@anzusystems/common-admin 1.47.0-beta.34 → 1.47.0-beta.340

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common-admin.js","sources":["../src/components/ABooleanValue.vue","../src/components/AAlerts.vue","../src/components/AProgress.vue","../src/components/ACardLoader.vue","../src/components/ACard.vue","../src/components/form/AFormTextarea.vue","../src/components/form/ASystemEntityScope.vue","../src/components/ADatatablePagination.vue","../src/components/ADatatableConfigButton.vue","../src/components/ADatatableOrdering.vue","../src/components/ALogData.vue","../src/components/ACreateDialog.vue","../src/components/AAdminSwitcher.vue","../src/components/AEmptyRouterView.vue","../src/components/ATimeTrackingFields.vue","../src/composables/filter/filterHelpers.ts","../src/components/filter/AFilterString.vue","../src/components/filter/AFilterMixed.vue","../src/components/filter/AFilterInteger.vue","../src/components/buttons/filter/AFilterAdvancedButton.vue","../src/components/filter/AFilterWrapper.vue","../src/model/valueObject/Grant.ts","../src/components/permission/APermissionGrantEditor.vue","../src/model/valueObject/GrantOrigin.ts","../src/components/permission/APermissionValueChip.vue","../src/composables/auth/authStore.ts","../src/types/OwnerAware.ts","../src/types/CreatedByAware.ts","../src/composables/auth/defineAuth.ts","../src/components/permission/Acl.vue","../src/components/datetime/ADatetime.vue","../src/components/form/AFormFlagDatetimePicker.vue","../src/components/filter/AFilterDatetimePicker.vue","../src/components/form/AFormRemoteAutocomplete.vue","../src/components/form/AFormRemoteCheckbox.vue","../src/components/form/AFormRemoteSwitch.vue","../src/components/form/AFormValueObjectOptionsSelect.vue","../src/components/filter/AFilterValueObjectOptionsSelect.vue","../src/components/filter/AFilterRemoteAutocomplete.vue","../src/components/filter/AFilterRemoteAutocompleteWithMinimal.vue","../src/components/filter/AFilterBooleanGroup.vue","../src/components/filter/AFilterBooleanSelect.vue","../src/model/valueObject/JobStatus.ts","../src/components/job/AJobStatusChip.vue","../src/model/commonConfig.ts","../src/components/ACachedChip.vue","../src/model/valueObject/LogLevel.ts","../src/components/log/ALogLevelChip.vue","../src/utils/number.ts","../src/components/ACopyText.vue","../src/components/AIconGroup.vue","../src/components/AChipNoLink.vue","../src/components/collab/components/ACollabCountdown.vue","../src/components/collab/composables/collabRoom.ts","../src/components/collab/components/ACollabManagement.vue","../src/components/AUserAndTimeTrackingFields.vue","../src/components/buttons/action/AActionCloseButton.vue","../src/components/buttons/action/AActionCreateButton.vue","../src/components/buttons/action/AActionDeleteButton.vue","../src/components/buttons/action/AActionEditButton.vue","../src/components/buttons/action/AActionSaveAndCloseButton.vue","../src/components/buttons/action/AActionSaveButton.vue","../src/components/buttons/table/ATableCopyIdButton.vue","../src/components/buttons/table/ATableDetailButton.vue","../src/components/buttons/table/ATableEditButton.vue","../src/components/buttons/ABtnSplit.vue","../src/composables/themeSettings.ts","../src/components/AThemeSelect.vue","../src/composables/languageSettings.ts","../src/components/flags/FlagSk.vue","../src/components/flags/FlagEn.vue","../src/components/flags/FlagEmpty.vue","../src/components/flags/FlagCountry.vue","../src/components/ALanguageSelect.vue","../src/components/systemBar/ASystemBarNewVersion.vue","../src/model/error/AnzuNewVersionFetchError.ts","../src/composables/useUserActivity.ts","../src/components/systemBar/systemBar.ts","../src/components/systemBar/ASystemBar.vue","../src/components/AAvatarColorPicker.vue","../src/components/ACurrentUserDropdown.vue","../src/components/form/AFormRemoteAutocompleteWithCached.vue","../src/components/view/ALoginView.vue","../src/components/view/ALogoutView.vue","../src/components/view/AUnauthorizedView.vue","../src/components/view/ANotFoundView.vue","../src/components/job/composables/jobPriority.ts","../src/components/job/AJobPriorityChip.vue","../src/components/job/AJobDetailCommon.vue","../src/components/job/AJobBaseCreateForm.vue","../src/types/coreDam/Asset.ts","../src/components/damImage/uploadQueue/api/damAssetLicenceApi.ts","../src/components/damImage/uploadQueue/composables/damAssetCustomFormApi.ts","../src/components/damImage/uploadQueue/composables/damConfigApi.ts","../src/types/coreDam/DamConfig.ts","../src/components/damImage/uploadQueue/composables/damConfigStore.ts","../src/components/damImage/uploadQueue/composables/damConfigState.ts","../src/components/damImage/uploadQueue/api/damAssetApi.ts","../src/model/coreDam/filter/AssetFilter.ts","../src/types/coreDam/AssetSelect.ts","../src/services/stores/coreDam/assetSelectStore.ts","../src/components/dam/assetSelect/composables/commonAdminCoreDamOptions.ts","../src/components/damImage/uploadQueue/composables/assetDetailStore.ts","../src/composables/system/defineCached.ts","../src/services/api/queryBuilder.ts","../src/services/api/apiFetchByIds.ts","../src/services/api/apiFetchList.ts","../src/components/damImage/uploadQueue/api/authorApi.ts","../src/components/damImage/uploadQueue/composables/extSystemIdForCached.ts","../src/components/damImage/uploadQueue/author/cachedAuthors.ts","../src/components/damImage/uploadQueue/api/keywordApi.ts","../src/components/damImage/uploadQueue/keyword/cachedKeywords.ts","../src/services/api/apiUpdateOne.ts","../src/components/dam/user/userApi.ts","../src/components/damImage/uploadQueue/author/cachedUsers.ts","../src/components/dam/assetSelect/composables/assetSelectFilterSidebar.ts","../src/components/dam/assetSelect/composables/assetSelectListActions.ts","../src/components/dam/assetSelect/composables/assetSelectItemActions.ts","../src/assets/image/placeholder16x9.jpg","../src/assets/dam-meta-icons/2k.svg","../src/assets/dam-meta-icons/4k.svg","../src/assets/dam-meta-icons/8k.svg","../src/assets/dam-meta-icons/qhd.svg","../src/assets/dam-meta-icons/fhd.svg","../src/assets/dam-meta-icons/slot.svg","../src/assets/dam-meta-icons/low.svg","../src/assets/dam-meta-icons/rss.svg","../src/components/damImage/uploadQueue/composables/assetImageIconsConfig.ts","../src/components/damImage/uploadQueue/components/AssetImageMetaIcons.vue","../src/components/dam/assetSelect/components/AssetImagePreview.vue","../node_modules/dayjs/plugin/duration.js","../src/utils/file.ts","../src/components/dam/assetSelect/components/AssetSelectTableRowItem.vue","../src/components/dam/assetSelect/components/AssetSelectListTable.vue","../src/components/dam/assetSelect/composables/assetSelectGridView.ts","../src/components/dam/assetSelect/components/AssetSelectListBar.vue","../src/components/dam/assetSelect/components/AssetSelectTilesItem.vue","../src/components/dam/assetSelect/components/AssetSelectListTiles.vue","../src/components/damImage/uploadQueue/keyword/keywordActions.ts","../src/components/damImage/uploadQueue/keyword/KeywordFilter.ts","../src/components/damImage/uploadQueue/keyword/DamKeywordFilterRemoteAutocomplete.vue","../src/components/damImage/uploadQueue/author/authorActions.ts","../src/components/damImage/uploadQueue/author/AuthorFilter.ts","../src/components/damImage/uploadQueue/author/DamAuthorFilterRemoteAutocomplete.vue","../src/components/dam/user/damUserSelectActions.ts","../src/components/dam/user/DamUserFilter.ts","../src/components/dam/user/DamUserFilterRemoteAutocomplete.vue","../src/components/dam/assetSelect/components/filter/AssetDistributionServiceNameFilter.vue","../src/components/dam/assetSelect/components/filter/damPodcastApi.ts","../src/components/dam/assetSelect/components/filter/podcastFilterAndActions.ts","../src/components/dam/assetSelect/components/filter/FilterPodcastRemoteAutocomplete.vue","../src/components/dam/assetSelect/components/filter/AssetSelectFilterForm.vue","../src/components/dam/assetSelect/components/filter/AssetSelectFilter.vue","../src/components/damImage/composables/damFilterUserAllowedUploadConfigs.ts","../src/types/coreDam/AssetFile.ts","../src/components/customDataForm/useCustomDataForm.ts","../src/components/customDataForm/CustomDataFormElementTypes.ts","../src/components/ABooleanSelect.vue","../src/components/customDataForm/ACustomDataFormElement.vue","../src/components/customDataForm/ACustomDataForm.vue","../src/components/damImage/uploadQueue/composables/imageMediaWidgetStore.ts","../src/components/damImage/uploadQueue/composables/uploadValidations.ts","../src/components/damImage/uploadQueue/components/AssetCustomMetadataForm.vue","../src/components/dam/AColorBox.vue","../src/components/damImage/uploadQueue/components/AssetMetadataImageAttributes.vue","../src/labs/form/AFormRemoteAutocompleteWithCached.vue","../src/components/damImage/uploadQueue/composables/UploadQueueItemFactory.ts","../src/components/damImage/uploadQueue/composables/assetSuggestions.ts","../src/components/damImage/uploadQueue/composables/damNotificationsEventBus.ts","../src/components/damImage/uploadQueue/composables/damNotifications.ts","../src/components/damImage/uploadQueue/composables/mimeTypeHelper.ts","../src/types/coreDam/UploadQueue.ts","../src/components/damImage/uploadQueue/composables/damUploadChunkSize.ts","../src/components/file/composables/fileType.ts","../src/services/sentry.ts","../src/components/damImage/uploadQueue/api/damImageApi.ts","../src/components/damImage/uploadQueue/api/uploadApi.ts","../node_modules/rusha/dist/rusha.js","../src/components/damImage/uploadQueue/composables/uploadService.ts","../src/components/damImage/uploadQueue/composables/uploadQueuesStore.ts","../src/components/damImage/uploadQueue/author/AuthorRemoteAutocompleteCachedAuthorChip.vue","../src/components/damImage/uploadQueue/author/AuthorRemoteAutocompleteCachedAuthorChipConflicts.vue","../src/components/damImage/uploadQueue/author/DamAuthorType.ts","../src/components/damImage/uploadQueue/author/authorValidation.ts","../src/components/damImage/uploadQueue/author/AuthorFactory.ts","../src/components/damImage/uploadQueue/author/AuthorCreateButton.vue","../src/components/damImage/uploadQueue/author/AuthorRemoteAutocompleteWithCached.vue","../src/components/damImage/uploadQueue/keyword/KeywordRemoteAutocompleteCachedKeywordChip.vue","../src/components/damImage/uploadQueue/keyword/KeywordFactory.ts","../src/components/damImage/uploadQueue/keyword/KeywordRemoteAutocompleteWithCached.vue","../src/components/damImage/uploadQueue/keyword/damKeywordConfig.ts","../src/components/damImage/uploadQueue/author/damAuthorConfig.ts","../src/components/ACachedUserChip.vue","../src/components/damImage/uploadQueue/components/AssetMetadata.vue","../src/components/dam/assetSelect/AAssetSelect.vue","../src/components/sortable/sortableNestedActions.ts","../src/components/sortable/ASortableNestedItem.vue","../src/components/sortable/ASortableNested.vue","../src/components/subjectSelect/ASubjectSelect.vue","../src/components/file/composables/dropzone.ts","../src/components/file/composables/formatAndSizeCheck.ts","../src/components/file/AFileDropzone.vue","../src/components/damImage/composables/commonAdminImageOptions.ts","../src/components/damImage/composables/imageActions.ts","../src/components/damImage/uploadQueue/composables/acceptTypeAndSizeHelper.ts","../src/components/damImage/uploadQueue/api/imageApi.ts","../src/components/damImage/AImageWidgetSimple.vue","../src/components/dam/DamAdminAssetLink.vue","../src/types/MediaAware.ts","../src/components/damImage/uploadQueue/components/ImageDetailDialogMetadata.vue","../src/components/damImage/uploadQueue/components/AssetDetailDialogLoader.vue","../src/composables/datetime/remainingTime.ts","../src/components/damImage/uploadQueue/components/AssetImage.vue","../src/components/damImage/uploadQueue/composables/assetFileFailReason.ts","../src/components/damImage/uploadQueue/components/AssetFileFailReasonChip.vue","../src/components/damImage/uploadQueue/components/AssetInfobox.vue","../src/components/damImage/uploadQueue/composables/assetDetailSidebarActionbar.ts","../src/components/damImage/uploadQueue/components/AssetDetailSidebarActionsWrapper.vue","../src/components/damImage/uploadQueue/components/AssetDetailSidebarMetadata.vue","../src/components/damImage/uploadQueue/composables/imageRoiStore.ts","../src/components/damImage/uploadQueue/components/AssetFileRotate.vue","../src/components/damImage/uploadQueue/api/damImageRoiApi.ts","../src/components/damImage/uploadQueue/components/AssetDetailSidebarROI.vue","../src/components/damImage/uploadQueue/components/AssetDetailSidebarActionsTeleportTarget.vue","../src/components/damImage/uploadQueue/components/AssetDetailDialogSidebar.vue","../src/components/damImage/uploadQueue/composables/cropperJsService.ts","../node_modules/cropperjs/dist/cropper.esm.js","../src/components/ACropperjs.vue","../src/components/damImage/uploadQueue/components/DamAssetImageRoiSelect.vue","../src/components/damImage/uploadQueue/components/AssetDetailDialog.vue","../src/components/damImage/uploadQueue/composables/uploadQueueDialog.ts","../src/components/damImage/uploadQueue/components/UploadQueueDialogSingleSidebarMetadataContent.vue","../src/components/damImage/uploadQueue/components/UploadQueueDialogSingleSidebarMetadata.vue","../src/components/damImage/uploadQueue/components/UploadQueueDialogSingleSidebar.vue","../src/components/damImage/uploadQueue/components/UploadQueueButtonStop.vue","../src/components/damImage/uploadQueue/components/UploadQueueDialogSingle.vue","../src/components/file/AFileInput.vue","../src/components/file/AFileInputDialog.vue","../src/components/damImage/composables/imageWidgetInkectionKeys.ts","../src/components/damImage/uploadQueue/components/ImageWidgetInner.vue","../src/components/damImage/AImageWidget.vue","../src/components/dam/assetSelect/AAssetSelectMedia.vue","../src/components/damImage/uploadQueue/components/ImageMediaWidgetInner.vue","../src/components/damImage/AImageMediaWidget.vue","../src/components/damImage/uploadQueue/components/MediaWidgetSimpleDialog.vue","../src/components/damImage/AMediaWidgetSimple.vue","../src/components/damImage/uploadQueue/composables/imageStore.ts","../src/components/damImage/uploadQueue/components/ImageWidgetMultipleItem.vue","../src/components/damImage/uploadQueue/components/UploadQueueItemEditable.vue","../src/components/damImage/uploadQueue/components/AssetCustomMetadataFormMassOperations.vue","../src/components/damImage/uploadQueue/composables/uploadQueueMassOperations.ts","../src/components/damImage/uploadQueue/components/AssetQueueSelectedSidebar.vue","../src/components/damImage/uploadQueue/components/UploadQueueEditable.vue","../src/components/damImage/uploadQueue/components/UploadQueueDialog.vue","../src/components/damImage/uploadQueue/components/ImageWidgetMultipleLimitDialog.vue","../src/services/api/apiAnyRequest.ts","../src/components/damImage/uploadQueue/api/damfetchAssetListByFileIdsMultipleLicences.ts","../src/components/damImage/uploadQueue/components/ImageWidgetMultipleInner.vue","../src/components/damImage/AImageWidgetMultiple.vue","../src/components/damImage/AImageWidgetMultipleSimple.vue","../src/components/damImage/uploadQueue/composables/imageMassOperations.ts","../src/components/damImage/uploadQueue/components/ImageMassOperations.vue","../src/components/damImage/AImagePublicInput.vue","../src/components/datatable/ADatatableColumn.vue","../src/components/datatable/ADatatable.vue","../src/components/subjectSelect/useSubjectSelect.ts","../src/components/subjectSelect/selectStrategies.ts","../src/utils/boolean.ts","../src/model/factory/AnzuUserFactory.ts","../src/model/factory/BaseUserFactory.ts","../src/model/factory/PermissionConfigFactory.ts","../src/model/factory/PermissionGroupFactory.ts","../src/services/api/apiFetchListBatch.ts","../src/composables/system/error.ts","../src/services/api/job/jobApi.ts","../src/model/valueObject/JobBaseResource.ts","../src/AnzuSystemsCommonAdmin.ts","../src/utils/array.ts","../src/utils/history.ts","../src/locales/cs.ts","../src/locales/en.ts","../src/locales/sk.ts","../src/model/commonVuetifyConfig.ts","../src/types/utils.ts","../src/plugins/webfontloader.ts","../src/model/factory/JobFactory.ts","../src/composables/system/loginStatus.ts","../src/components/damImage/uploadQueue/api/damCurrentUserApi.ts","../src/components/collab/composables/collabInit.ts","../src/components/collab/composables/collabHelpers.ts","../src/components/collab/composables/collabAnyDataChange.ts","../src/components/dam/user/assetLicenceApi.ts","../src/components/dam/user/AssetLicenceFilter.ts","../src/components/dam/user/assetLicenceActions.ts","../src/components/dam/user/DamAssetLicenceRemoteAutocomplete.vue","../src/components/dam/user/assetLicenceGroupApi.ts","../src/components/dam/user/assetLicenceGroupActions.ts","../src/components/dam/user/AssetLicenceGroupFilter.ts","../src/components/dam/user/DamAssetLicenceGroupRemoteAutocomplete.vue","../src/components/dam/user/extSystemApi.ts","../src/components/dam/user/extSystemActions.ts","../src/components/dam/user/ExtSystemFilter.ts","../src/components/dam/user/DamExtSystemRemoteAutocomplete.vue","../src/components/dam/user/DamExternalProviderAssetType.ts","../src/components/dam/user/DamExternalProviderAssetSelect.vue","../src/components/dam/user/DamDistributionServiceType.ts","../src/components/dam/user/DamDistributionServiceSelect.vue","../src/composables/system/breadcrumbs.ts","../src/components/damImage/uploadQueue/author/DamAuthorFilterRemoteAutocompleteLegacy.vue","../src/components/damImage/uploadQueue/keyword/DamKeywordFilterRemoteAutocompleteLegacy.vue","../src/components/dam/user/DamUserFilterRemoteAutocompleteLegacy.vue","../src/composables/useUnreleasedFeatures.ts"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\n\nconst props = withDefaults(\n defineProps<{\n value: number | string | boolean\n chip?: boolean\n invertColor?: boolean\n }>(),\n {\n chip: false,\n invertColor: false,\n }\n)\n\nconst { t } = useI18n()\n\nconst booleanValue = computed(() => {\n return props.value === true || props.value === 1 || props.value === 'true'\n})\n\nconst text = computed(() => {\n if (booleanValue.value) {\n return t('common.model.boolean.true')\n }\n return t('common.model.boolean.false')\n})\n\nconst color = computed(() => {\n if (props.invertColor) {\n return booleanValue.value ? 'error' : 'success'\n }\n return booleanValue.value ? 'success' : 'error'\n})\n</script>\n\n<template>\n <VChip\n v-if=\"chip\"\n :color=\"color\"\n label\n size=\"small\"\n >\n {{ text }}\n </VChip>\n <span v-else>{{ text }}</span>\n</template>\n","<script lang=\"ts\" setup>\n// @ts-nocheck\nwithDefaults(\n defineProps<{\n max?: number\n group?: string\n position?: string\n width?: string\n customClass?: string | undefined\n }>(),\n {\n max: 5,\n group: 'alerts',\n position: 'top center',\n width: '50%',\n customClass: undefined,\n }\n)\n</script>\n\n<template>\n <Notifications\n :max=\"max\"\n :group=\"group\"\n :position=\"position\"\n :width=\"width\"\n :class=\"customClass\"\n >\n <template #body=\"props\">\n <VAlert\n :type=\"props.item.type\"\n class=\"ma-1\"\n density=\"compact\"\n >\n <div\n class=\"white-space-pre\"\n data-cy=\"page-title\"\n v-text=\"props.item.text\"\n />\n <template #close>\n <VIcon\n icon=\"mdi-close\"\n @click.stop=\"props.close\"\n />\n </template>\n </VAlert>\n </template>\n </Notifications>\n</template>\n","<script lang=\"ts\" setup>\nwithDefaults(\n defineProps<{\n size?: 'small' | 'x-small' | 'default'\n }>(),\n {\n size: 'x-small',\n }\n)\n</script>\n\n<template>\n <div\n class=\"w-100 d-flex align-center justify-center\"\n >\n <VProgressCircular\n :size=\"size\"\n indeterminate\n />\n </div>\n</template>\n","<script lang=\"ts\" setup>\n// #region docs-props\nwithDefaults(\n defineProps<{\n loading?: boolean\n }>(),\n {\n loading: undefined,\n }\n)\n// #endregion docs-props\n</script>\n\n<template>\n <div\n v-show=\"loading\"\n class=\"a-card-loader\"\n />\n</template>\n\n<style lang=\"scss\">\n// todo dark mode\n.a-card-loader {\n position: absolute;\n inset: 0;\n background-color: rgb(0 0 0 / 10%);\n z-index: 5;\n}\n</style>\n","<script lang=\"ts\" setup>\nimport ACardLoader from '@/components/ACardLoader.vue'\nimport { computed } from 'vue'\n\nconst props = withDefaults(\n defineProps<{\n loading?: boolean\n title?: string\n }>(),\n {\n loading: undefined,\n title: undefined,\n }\n)\n\nconst loadingComputed = computed(() => {\n return props.loading ? 'primary' : false\n})\n</script>\n\n<template>\n <VCard\n :title=\"title\"\n variant=\"flat\"\n :loading=\"loadingComputed\"\n >\n <ACardLoader :loading=\"loading\" />\n <slot />\n </VCard>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, inject, ref, watch } from 'vue'\nimport { stringSplitOnFirstOccurrence } from '@/utils/string'\nimport { isDefined, isNumber, isUndefined } from '@/utils/common'\nimport { SubjectScopeSymbol, SystemScopeSymbol } from '@/components/injectionKeys'\nimport type { VuetifyIconValue } from '@/types/Vuetify'\nimport type { ErrorObject } from '@vuelidate/core'\nimport { useI18n } from 'vue-i18n'\nimport type { VTextField } from 'vuetify/components/VTextField'\nimport type { CollabComponentConfig, CollabFieldData, CollabFieldLockOptions } from '@/components/collab/types/Collab'\nimport type { IntegerIdNullable } from '@/types/common'\nimport ACollabLockedByUser from '@/components/collab/components/ACollabLockedByUser.vue'\nimport {\n CollabFieldLockStatus,\n type CollabFieldLockStatusPayload,\n CollabFieldLockType,\n} from '@/components/collab/composables/collabEventBus'\nimport { useCollabField } from '@/components/collab/composables/collabField'\nimport { useCommonAdminCollabOptions } from '@/components/collab/composables/commonAdminCollabOptions'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: string | null | undefined // todo check number and null\n label?: string | undefined\n errorMessage?: string | undefined\n required?: boolean | undefined\n v?: any\n prependIcon?: VuetifyIconValue | undefined\n appendIcon?: VuetifyIconValue | undefined\n dataCy?: string | undefined\n hideLabel?: boolean\n rows?: number\n collab?: CollabComponentConfig | undefined\n disabled?: boolean | undefined\n help?: string | undefined\n suggestedLength?: number | undefined\n }>(),\n {\n label: undefined,\n errorMessage: undefined,\n required: undefined,\n v: null,\n prependIcon: undefined,\n appendIcon: undefined,\n dataCy: undefined,\n hideLabel: false,\n rows: 1,\n collab: undefined,\n disabled: undefined,\n help: undefined,\n suggestedLength: undefined,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: string | null | undefined): void\n (e: 'click:append', data: string | null): void\n (e: 'blur', data: string | null | undefined): void\n (e: 'focus', data: string | null | undefined): void\n}>()\n\nconst textareaRef = ref<InstanceType<typeof VTextField> | null>(null)\n\n// Collaboration\nconst { collabOptions } = useCommonAdminCollabOptions()\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst releaseFieldLock = ref((data: CollabFieldData) => {})\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst acquireFieldLock = ref((options?: Partial<CollabFieldLockOptions>) => {})\nconst lockedByUserLocal = ref<IntegerIdNullable>(null)\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nif (collabOptions.value.enabled && isDefined(props.collab)) {\n const {\n releaseCollabFieldLock,\n acquireCollabFieldLock,\n addCollabFieldLockStatusListener,\n addCollabGatheringBufferDataListener,\n lockedByUser,\n } = useCollabField(props.collab.room, props.collab.field)\n releaseFieldLock.value = releaseCollabFieldLock\n acquireFieldLock.value = acquireCollabFieldLock\n watch(\n lockedByUser,\n (newValue) => {\n lockedByUserLocal.value = newValue\n },\n { immediate: true }\n )\n addCollabFieldLockStatusListener((data: CollabFieldLockStatusPayload) => {\n if (data.status === CollabFieldLockStatus.Failure && data.type === CollabFieldLockType.Acquire) {\n textareaRef.value?.blur()\n }\n })\n addCollabGatheringBufferDataListener(() => {\n textareaRef.value?.blur()\n })\n}\n\nconst { t } = useI18n()\n\nconst system = inject<string | undefined>(SystemScopeSymbol, undefined)\nconst subject = inject<string | undefined>(SubjectScopeSymbol, undefined)\n\nconst onUpdate = (newValue: string) => {\n emit('update:modelValue', newValue)\n}\nconst onBlur = () => {\n emit('blur', props.modelValue)\n props.v?.$touch()\n releaseFieldLock.value(props.modelValue)\n}\n\nconst onFocus = () => {\n emit('focus', props.modelValue)\n acquireFieldLock.value()\n}\n\nconst errorMessageComputed = computed(() => {\n if (isDefined(props.errorMessage)) return [props.errorMessage]\n if (props.v?.$errors?.length) return [props.v.$errors.map((item: ErrorObject) => item.$message).join(' ')]\n return []\n})\n\nconst labelComputed = computed(() => {\n if (isDefined(props.label)) return props.label\n if (isUndefined(system) || isUndefined(subject) || isUndefined(props.v?.$path)) return ''\n const { end: path } = stringSplitOnFirstOccurrence(props.v?.$path, '.')\n return t(system + '.' + subject + '.model.' + path)\n})\n\nconst requiredComputed = computed(() => {\n if (isDefined(props.required)) return props.required\n if (props.v?.required && props.v?.required.$params.type === 'required') return true\n return false\n})\n\nconst disabledComputed = computed(() => {\n if (isDefined(props.disabled)) return props.disabled\n return !!lockedByUserLocal.value\n})\n\nconst showCounterWarning = (counterValue: string | number | undefined) => {\n if (isNumber(counterValue) && !isUndefined(props.suggestedLength)) {\n return counterValue > props.suggestedLength\n }\n return false\n}\n\nconst focus = () => {\n textareaRef.value?.focus()\n}\n\ndefineExpose({\n focus,\n})\n</script>\n\n<template>\n <VTextarea\n ref=\"textareaRef\"\n :prepend-icon=\"prependIcon\"\n :data-cy=\"dataCy\"\n :error-messages=\"errorMessageComputed\"\n :model-value=\"modelValue\"\n :required=\"requiredComputed\"\n :disabled=\"disabledComputed\"\n :rows=\"rows\"\n auto-grow\n :append-icon=\"appendIcon\"\n trim\n @click:append=\"(event: any) => emit('click:append', event)\"\n @blur=\"onBlur\"\n @focus=\"onFocus\"\n @update:model-value=\"onUpdate($event)\"\n >\n <template\n v-if=\"!hideLabel\"\n #label\n >\n {{ labelComputed\n }}<span\n v-if=\"requiredComputed\"\n class=\"required\"\n />\n </template>\n <template\n v-if=\"lockedByUserLocal\"\n #append-inner\n >\n <slot\n name=\"locked\"\n :user-id=\"lockedByUserLocal\"\n >\n <ACollabLockedByUser\n v-if=\"collab\"\n :id=\"lockedByUserLocal\"\n :users=\"collab.cachedUsers\"\n />\n </slot>\n </template>\n <template\n v-if=\"$slots.prepend\"\n #prepend\n >\n <slot name=\"prepend\" />\n </template>\n <template\n v-if=\"$slots.counter\"\n #counter=\"counterProps\"\n >\n <slot\n name=\"counter\"\n :props=\"counterProps\"\n />\n </template>\n <template\n v-else-if=\"suggestedLength\"\n #counter=\"{ value: counterValue }\"\n >\n <span :class=\"{ 'text-warning': showCounterWarning(counterValue) }\">\n {{ t('common.system.inputSuggestedMax', { current: counterValue, max: suggestedLength }) }}\n </span>\n </template>\n <template\n v-if=\"help\"\n #append\n >\n <VIcon\n v-tooltip=\"help\"\n icon=\"mdi-help-circle-outline\"\n />\n </template>\n </VTextarea>\n</template>\n","<script lang=\"ts\" setup>\nimport { provide } from 'vue'\nimport { SubjectScopeSymbol, SystemScopeSymbol } from '@/components/injectionKeys'\n\nconst props = withDefaults(\n defineProps<{\n system: string\n subject: string\n }>(),\n {}\n)\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nprovide<string>(SystemScopeSymbol, props.system)\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nprovide<string>(SubjectScopeSymbol, props.subject)\n</script>\n\n<template>\n <slot />\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, watch } from 'vue'\nimport { cloneDeep, isNull } from '@/utils/common'\nimport type { Pagination } from '@/types/Pagination'\nimport { useI18n } from 'vue-i18n'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: Pagination\n itemsPerPageOptions?: number[]\n hideRecordsPerPage?: boolean\n }>(),\n {\n itemsPerPageOptions: () => [10, 25, 50],\n hideRecordsPerPage: false,\n }\n)\nconst emit = defineEmits<{\n (e: 'change'): void\n (e: 'update:modelValue', data: Pagination): void\n}>()\n\nconst modelValueComputed = computed({\n get() {\n return props.modelValue\n },\n set(newValue: Pagination) {\n emit('update:modelValue', cloneDeep(newValue))\n },\n})\n\nconst { t } = useI18n()\n\nconst lastPage = computed(() => {\n return Math.ceil(modelValueComputed.value.totalCount / modelValueComputed.value.rowsPerPage)\n})\n\nconst displayedFrom = computed(() => {\n return modelValueComputed.value.page * modelValueComputed.value.rowsPerPage - modelValueComputed.value.rowsPerPage + 1\n})\n\nconst displayedTo = computed(() => {\n return (\n modelValueComputed.value.page * modelValueComputed.value.rowsPerPage -\n modelValueComputed.value.rowsPerPage +\n modelValueComputed.value.currentViewCount\n )\n})\n\nconst disabledFirstAndPrev = computed(() => {\n return modelValueComputed.value.page === 1\n})\n\nconst disabledLast = computed(() => {\n return !isNull(modelValueComputed.value.hasNextPage) || modelValueComputed.value.page === lastPage.value\n})\n\nconst disabledNext = computed(() => {\n return (\n (isNull(modelValueComputed.value.hasNextPage) && modelValueComputed.value.page === lastPage.value) ||\n modelValueComputed.value.hasNextPage === false\n )\n})\n\nconst computedTotalCountText = computed(() => {\n if (!isNull(modelValueComputed.value.hasNextPage)) {\n return modelValueComputed.value.hasNextPage ? displayedTo.value + 1 + '+' : displayedTo.value\n }\n return modelValueComputed.value.totalCount\n})\n\nconst rowsPerPageComputed = computed(() => {\n return modelValueComputed.value.rowsPerPage\n})\nwatch(rowsPerPageComputed, (newValue, oldValue) => {\n if (newValue !== oldValue) {\n modelValueComputed.value.page = 1\n emit('change')\n }\n})\nconst pageComputed = computed(() => {\n return modelValueComputed.value.page\n})\nwatch(pageComputed, (newValue, oldValue) => {\n if (newValue !== oldValue) {\n emit('change')\n }\n})\n\nconst onClickFirst = () => {\n modelValueComputed.value.page = 1\n}\n\nconst onClickLast = () => {\n modelValueComputed.value.page = lastPage.value\n}\n\nconst onClickPrev = () => {\n modelValueComputed.value.page = modelValueComputed.value.page - 1\n}\n\nconst onClickNext = () => {\n modelValueComputed.value.page = modelValueComputed.value.page + 1\n}\n</script>\n\n<template>\n <div class=\"anzu-data-footer\">\n <div\n v-if=\"!hideRecordsPerPage\"\n class=\"anzu-data-footer__page-limit\"\n >\n {{ t('common.system.datatable.itemsPerPage') }}:\n <VBtnToggle\n v-model=\"modelValueComputed.rowsPerPage\"\n class=\"ml-2\"\n density=\"compact\"\n mandatory\n data-cy=\"table-size\"\n >\n <VBtn\n v-for=\"item in itemsPerPageOptions\"\n :key=\"item\"\n :color=\"item === modelValueComputed.rowsPerPage ? 'secondary' : ''\"\n :value=\"item\"\n density=\"compact\"\n size=\"small\"\n variant=\"text\"\n >\n {{ item }}\n </VBtn>\n </VBtnToggle>\n </div>\n <div class=\"anzu-data-footer__pagination\">\n {{ displayedFrom }} - {{ displayedTo }} {{ t('common.system.datatable.from') }} {{ computedTotalCountText }}\n </div>\n <div class=\"anzu-data-footer__icons-before\">\n <VBtn\n :disabled=\"disabledFirstAndPrev\"\n icon=\"mdi-page-first\"\n size=\"small\"\n variant=\"text\"\n @click.stop=\"onClickFirst\"\n />\n <VBtn\n :disabled=\"disabledFirstAndPrev\"\n icon=\"mdi-chevron-left\"\n size=\"small\"\n variant=\"text\"\n @click.stop=\"onClickPrev\"\n />\n </div>\n <div class=\"current-page\">\n <span>{{ modelValueComputed.page }}</span>\n </div>\n <div class=\"anzu-data-footer__icons-after\">\n <VBtn\n :disabled=\"disabledNext\"\n icon=\"mdi-chevron-right\"\n size=\"small\"\n variant=\"text\"\n @click.stop=\"onClickNext\"\n />\n <VBtn\n :disabled=\"disabledLast\"\n icon=\"mdi-page-last\"\n size=\"small\"\n variant=\"text\"\n @click.stop=\"onClickLast\"\n />\n </div>\n </div>\n</template>\n\n<style lang=\"scss\">\n.anzu-data-footer {\n margin-top: 10px;\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-end;\n align-items: center;\n font-size: 0.75rem;\n padding: 0 8px;\n\n > div.current-page {\n padding-left: 10px;\n padding-right: 10px;\n user-select: none;\n min-width: 40px;\n display: flex;\n text-align: center;\n align-items: center;\n justify-content: center;\n }\n\n &__page-limit {\n display: flex;\n align-items: center;\n flex: 0 0 0;\n justify-content: flex-end;\n white-space: nowrap;\n margin-right: 14px;\n }\n\n &__pagination {\n display: block;\n text-align: center;\n margin: 0 32px 0 24px;\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport type { ColumnInternalValues } from '@/composables/system/datatableColumns'\nimport { cloneDeep } from '@/utils/common'\n\nconst props = withDefaults(\n defineProps<{\n columnsAll: ColumnInternalValues[]\n columnsHidden: Array<string>\n buttonT?: string\n buttonClass?: string\n dataCy?: string\n }>(),\n {\n buttonT: 'common.system.datatable.config',\n buttonClass: 'ml-1',\n dataCy: 'table-settings',\n }\n)\nconst emit = defineEmits<{\n (e: 'update:columnsHidden', data: Array<string>): void\n}>()\n\nconst { t } = useI18n()\n\nconst isVisible = (key: string) => {\n return !props.columnsHidden.includes(key)\n}\n\nconst toggleVisibility = (key: string) => {\n const cloned = cloneDeep(props.columnsHidden)\n const index = cloned.indexOf(key)\n if (index > -1) {\n cloned.splice(index, 1)\n emit('update:columnsHidden', cloned)\n return\n }\n cloned.push(key)\n emit('update:columnsHidden', cloned)\n}\n</script>\n\n<template>\n <VBtn\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n color=\"light\"\n icon\n size=\"x-small\"\n variant=\"text\"\n >\n <VIcon icon=\"mdi-cog\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t(buttonT) }}\n </VTooltip>\n <VMenu\n :min-width=\"260\"\n activator=\"parent\"\n >\n <VCard>\n <VList density=\"compact\">\n <VListItem>\n <VListItemTitle>\n <strong>{{ t('common.system.datatable.displayCols') }}</strong>\n </VListItemTitle>\n </VListItem>\n <VListItem\n v-for=\"column in columnsAll\"\n :key=\"column.key\"\n @click.stop=\"toggleVisibility(column.key)\"\n >\n <VListItemTitle>\n <VIcon\n v-if=\"isVisible(column.key)\"\n class=\"mr-2\"\n icon=\"mdi-checkbox-marked\"\n />\n <VIcon\n v-else\n class=\"mr-2\"\n icon=\"mdi-checkbox-blank-outline\"\n />\n {{ column.title }}\n </VListItemTitle>\n </VListItem>\n </VList>\n </VCard>\n </VMenu>\n </VBtn>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, ref, watch } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport {\n type DatatableOrderingOption,\n type DatatableOrderingOptions, SORT_BY_SCORE,\n SortOrder,\n} from '@/composables/system/datatableColumns'\nimport { isUndefined } from '@/utils/common'\n\nconst props = withDefaults(\n defineProps<{\n modelValue?: number\n variant?: 'default' | 'id' | 'most-relevant'\n customOptions?: undefined | DatatableOrderingOptions\n }>(),\n {\n modelValue: 1,\n variant: 'default',\n customOptions: undefined,\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: number): void\n (e: 'sortByChange', data: DatatableOrderingOption): void\n}>()\n\nconst { t } = useI18n()\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst active = ref(props.modelValue)\n\nconst modelValueComputed = computed({\n get() {\n return props.modelValue\n },\n set(newValue: number) {\n active.value = newValue\n emit('update:modelValue', newValue)\n },\n})\n\nconst defaultItems: DatatableOrderingOptions = [\n { id: 1, titleT: 'common.system.datatable.ordering.mostRecent', sortBy: { key: 'createdAt', order: SortOrder.Desc } },\n { id: 2, titleT: 'common.system.datatable.ordering.oldest', sortBy: { key: 'createdAt', order: SortOrder.Asc } },\n]\n\nconst defaultItemsId: DatatableOrderingOptions = [\n { id: 1, titleT: 'common.system.datatable.ordering.mostRecent', sortBy: { key: 'id', order: SortOrder.Desc } },\n { id: 2, titleT: 'common.system.datatable.ordering.oldest', sortBy: { key: 'id', order: SortOrder.Asc } },\n]\n\nconst defaultItemsMostRelevant: DatatableOrderingOptions = [\n {\n id: 3,\n titleT: 'common.system.datatable.ordering.mostRelevant',\n sortBy: { key: SORT_BY_SCORE, order: SortOrder.Desc },\n },\n { id: 1, titleT: 'common.system.datatable.ordering.mostRecent', sortBy: { key: 'createdAt', order: SortOrder.Desc } },\n { id: 2, titleT: 'common.system.datatable.ordering.oldest', sortBy: { key: 'createdAt', order: SortOrder.Asc } },\n]\n\nconst activeTitle = computed(() => {\n const found = options.value.find((item: any) => item.id === active.value)\n if (found) return t(found.titleT)\n return ''\n})\n\nconst options = computed(() => {\n if (props.customOptions) return props.customOptions\n if (props.variant === 'most-relevant') return defaultItemsMostRelevant\n if (props.variant === 'id') return defaultItemsId\n return defaultItems\n})\n\nconst onItemClick = (item: DatatableOrderingOption) => {\n modelValueComputed.value = item.id\n}\n\nwatch(\n active,\n (newValue, oldValue) => {\n if (isUndefined(oldValue) || newValue === oldValue) return\n const found = options.value.find((item: any) => item.id === newValue)\n if (found) emit('sortByChange', found)\n },\n { immediate: true }\n)\n\nwatch(\n modelValueComputed,\n (newValue, oldValue) => {\n if (isUndefined(oldValue) || newValue === oldValue) return\n active.value = newValue\n },\n { immediate: true }\n)\n</script>\n\n<template>\n <div class=\"d-flex align-center justify-center\">\n <div class=\"text-caption mr-1\">\n {{ t('common.system.datatable.ordering.title') }}:\n </div>\n <VBtn\n variant=\"text\"\n rounded=\"xl\"\n size=\"small\"\n append-icon=\"mdi-chevron-down\"\n >\n {{ activeTitle }}\n <VMenu\n activator=\"parent\"\n location=\"bottom\"\n close-on-content-click\n >\n <VList\n density=\"compact\"\n class=\"pa-0\"\n >\n <VListItem\n v-for=\"item in options\"\n :key=\"item.id\"\n @click=\"onItemClick(item)\"\n >\n <VListItemTitle :class=\"{ 'font-weight-bold': item.id === active }\">\n {{ t(item.titleT) }}\n </VListItemTitle>\n </VListItem>\n </VList>\n </VMenu>\n </VBtn>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, watch } from 'vue'\n\nconst props = withDefaults(\n defineProps<{\n data: any\n }>(),\n {}\n)\n\nconst computedData = computed(() => {\n return props.data\n})\n\nwatch(\n computedData,\n (newValue) => {\n console.log(newValue)\n },\n { immediate: true }\n)\n</script>\n\n<template>\n <div />\n</template>\n","<script lang=\"ts\" setup>\nimport ADialogToolbar from '@/components/ADialogToolbar.vue'\nimport { ref } from 'vue'\nimport { useRouter } from 'vue-router'\nimport { useI18n } from 'vue-i18n'\nimport { useAlerts } from '@/composables/system/alerts'\nimport { isUndefined } from '@/utils/common'\n\nconst props = withDefaults(\n defineProps<{\n buttonClass?: string\n maxWidth?: number | undefined\n dataCy?: string\n v?: any\n callCreate: () => Promise<any>\n disableRedirect?: boolean\n redirectRouteName?: string | undefined\n redirectParamName?: string\n }>(),\n {\n buttonClass: '',\n maxWidth: undefined,\n dataCy: 'button-create',\n v: undefined,\n disableRedirect: false,\n redirectRouteName: undefined,\n redirectParamName: 'id',\n }\n)\n\nconst emit = defineEmits<{\n (e: 'onConfirm'): void\n (e: 'onOpen'): void\n (e: 'onClose'): void\n (e: 'onError', data: any): void\n (e: 'onSuccess', data: any): void\n}>()\n\nconst modelValue = defineModel<boolean>({ default: false, required: false })\n\nconst { t } = useI18n()\n\nconst buttonLoading = ref(false)\n\nconst onOpen = () => {\n modelValue.value = true\n emit('onOpen')\n}\n\nconst onClose = () => {\n modelValue.value = false\n emit('onClose')\n}\n\nconst router = useRouter()\nconst { showValidationError, showRecordWas, showErrorsDefault } = useAlerts()\n\nconst onConfirm = async () => {\n emit('onConfirm')\n try {\n buttonLoading.value = true\n props.v?.$touch()\n if (!isUndefined(props.v) && props.v.$invalid) {\n showValidationError()\n buttonLoading.value = false\n return\n }\n const res = await props.callCreate()\n emit('onSuccess', res)\n showRecordWas('created')\n onClose()\n if (!isUndefined(res.id) && !props.disableRedirect && props.redirectRouteName) {\n router.push({\n name: props.redirectRouteName,\n params: { [props.redirectParamName]: res[props.redirectParamName] },\n })\n }\n } catch (error) {\n showErrorsDefault(error)\n emit('onError', error)\n } finally {\n buttonLoading.value = false\n }\n}\n</script>\n\n<template>\n <ABtnPrimary\n :class=\"buttonClass\"\n rounded=\"pill\"\n :data-cy=\"dataCy\"\n @click.stop=\"onOpen\"\n >\n <slot name=\"button-title\">\n {{ t('common.button.create') }}\n </slot>\n <VDialog\n :model-value=\"modelValue\"\n :max-width=\"maxWidth\"\n persistent\n @update:model-value=\"modelValue = $event\"\n >\n <VCard\n v-if=\"modelValue\"\n data-cy=\"create-panel\"\n >\n <ADialogToolbar @on-cancel=\"onClose\">\n <slot name=\"title\">\n {{ t('common.button.create') }}\n </slot>\n </ADialogToolbar>\n <VCardText>\n <slot name=\"content\" />\n </VCardText>\n <VCardActions>\n <VSpacer />\n <ABtnTertiary\n data-cy=\"button-cancel\"\n @click.stop=\"onClose\"\n >\n {{ t('common.button.cancel') }}\n </ABtnTertiary>\n <ABtnPrimary\n :loading=\"buttonLoading\"\n data-cy=\"button-confirm\"\n @click.stop=\"onConfirm\"\n >\n <slot name=\"button-confirm-title\">\n {{ t('common.button.create') }}\n </slot>\n </ABtnPrimary>\n </VCardActions>\n </VCard>\n </VDialog>\n </ABtnPrimary>\n</template>\n","<script lang=\"ts\" setup>\nimport { onMounted, ref } from 'vue'\nimport { useFetch } from '@vueuse/core'\nimport { useI18n } from 'vue-i18n'\n\nconst props = withDefaults(\n defineProps<{\n configUrl?: string | undefined | null\n }>(),\n {\n configUrl: null,\n }\n)\n\nconst { t } = useI18n()\n\ninterface AdminConfigItem {\n id: string\n title: string\n url: string\n icon: string\n}\n\nconst config = ref<AdminConfigItem[]>([])\n\nonMounted(async () => {\n if (props.configUrl && props.configUrl.length > 0) {\n try {\n const { data } = await useFetch<AdminConfigItem[]>(props.configUrl).get().json()\n config.value = data.value\n } catch (e) {\n //\n }\n }\n})\n</script>\n\n<template>\n <VBtn\n v-if=\"config.length > 0\"\n variant=\"text\"\n size=\"small\"\n icon\n >\n <VIcon icon=\"mdi-dots-grid\" />\n <VTooltip\n activator=\"parent\"\n location=\"top\"\n >\n {{ t('common.system.adminSwitcher.button') }}\n </VTooltip>\n <VMenu activator=\"parent\">\n <VCard>\n <div class=\"a-admin-switcher__content\">\n <a\n v-for=\"item in config\"\n :key=\"item.id\"\n :href=\"item.url\"\n rel=\"noopener noreferrer\"\n target=\"_blank\"\n class=\"a-admin-switcher__item\"\n >\n <img\n :src=\"item.icon\"\n :alt=\"item.title\"\n >\n <span class=\"a-admin-switcher__item-title\">{{ item.title }}</span>\n </a>\n </div>\n </VCard>\n </VMenu>\n </VBtn>\n</template>\n\n<style lang=\"scss\">\n.a-admin-switcher {\n &__content {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n grid-template-rows: auto;\n padding: 6px;\n }\n\n &__item {\n display: flex;\n width: 96px;\n height: 96px;\n align-items: center;\n justify-content: center;\n flex-direction: column;\n text-decoration: none;\n color: rgb(var(--v-theme-on-surface), var(--v-hover-opacity));\n\n &:hover {\n background-color: rgb(var(--v-theme-on-surface), 10%);\n border-radius: 8px;\n }\n\n &-title {\n display: flex;\n font-weight: normal;\n font-size: 14px;\n line-height: 14px;\n color: rgb(var(--v-theme-on-surface), var(--v-high-emphasis-opacity));\n padding: 8px 0;\n }\n\n img {\n display: block;\n width: auto;\n height: 50px;\n }\n }\n}\n</style>\n","<template>\n <RouterView />\n</template>\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport type { AnzuUserAndTimeTrackingAware } from '@/types/AnzuUserAndTimeTrackingAware'\nimport { dateTimePretty } from '@/utils/datetime'\nimport ARow from '@/components/ARow.vue'\n\nconst props = withDefaults(\n defineProps<{\n data: AnzuUserAndTimeTrackingAware | any\n hideCreatedAt?: boolean\n hideModifiedAt?: boolean\n }>(),\n {\n hideCreatedAt: false,\n hideModifiedAt: false,\n }\n)\n\nconst createdAt = computed(() => {\n return dateTimePretty(props.data.createdAt)\n})\nconst modifiedAt = computed(() => {\n return dateTimePretty(props.data.modifiedAt)\n})\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <ARow :title=\"t('common.model.tracking.created')\">\n <div class=\"d-flex align-center\">\n <div\n v-if=\"!hideCreatedAt\"\n class=\"mr-2\"\n >\n {{ createdAt }}\n </div>\n </div>\n </ARow>\n <ARow :title=\"t('common.model.tracking.modified')\">\n <div class=\"d-flex align-center\">\n <div\n v-if=\"!hideModifiedAt\"\n class=\"mr-2\"\n >\n {{ modifiedAt }}\n </div>\n </div>\n </ARow>\n</template>\n","import { cloneDeep, isArray, isEmptyArray, isEmptyObject, isNull, isObject, isUndefined } from '@/utils/common'\nimport type { Filter, FilterBag, FilterVariant } from '@/types/Filter'\nimport type { Pagination } from '@/types/Pagination'\nimport type { Ref } from 'vue'\n\nexport interface MakeFilterOptions<T = any> {\n name: string\n variant: FilterVariant\n titleT?: string\n default: T | null\n field: string\n multiple: boolean\n clearable: boolean\n mandatory: boolean\n advanced: boolean\n exclude: boolean\n}\n\ninterface LoadStoredFilterOptions {\n showAdvancedFilter?: Ref<boolean>\n callback?: (containsAdvanced: boolean) => void\n}\n\nexport function makeFilterHelper<T = any>(system?: string, subject?: string) {\n return (options: Partial<MakeFilterOptions<T>> = {}): Filter<T> => {\n const variant = isUndefined(options.variant) ? 'eq' : options.variant\n\n let defaultValue = isUndefined(options.default) ? null : options.default\n if (isUndefined(options.default) && variant === 'in') {\n defaultValue = [] as any\n }\n let titleT = options.titleT\n if (isUndefined(titleT) && system && subject && options.name) {\n titleT = system + '.' + subject + '.filter.' + options.name\n }\n\n return {\n variant,\n titleT,\n default: defaultValue,\n field: isUndefined(options.field) ? '' : options.field,\n multiple: isArray(defaultValue),\n clearable: isUndefined(options.clearable) ? true : options.clearable,\n mandatory: isUndefined(options.mandatory) ? false : options.mandatory,\n advanced: isUndefined(options.advanced) ? false : options.advanced,\n exclude: isUndefined(options.exclude) ? false : options.exclude,\n model: cloneDeep(defaultValue),\n error: '',\n }\n }\n}\n\nexport function useFilterHelpers(storeId: string | undefined = undefined) {\n const clearOne = (filter: Filter) => {\n if (!filter.clearable) return\n filter.model = filter.default\n filter.error = ''\n }\n\n const clearAll = (filterBag: FilterBag) => {\n for (const filterName in filterBag) {\n clearOne(filterBag[filterName])\n }\n }\n\n const clearAllErrors = (filterBag: FilterBag) => {\n for (const filterName in filterBag) {\n filterBag[filterName].error = ''\n }\n }\n\n const loadStoredFilter = (filterBag: FilterBag, options: LoadStoredFilterOptions = {}) => {\n if (!storeId || !localStorage) return\n const { showAdvancedFilter, callback } = options\n let containsAdvanced = false\n const stored = localStorage.getItem(storeId)\n if (!stored) return\n const storedData = JSON.parse(stored)\n if (!isObject(storedData)) return\n for (const filterName in filterBag) {\n try {\n // @ts-ignore\n if (!isUndefined(storedData[filterName])) {\n // @ts-ignore\n filterBag[filterName].model = storedData[filterName]\n if (filterBag[filterName].advanced) {\n containsAdvanced = true\n }\n }\n } catch (e) {\n //\n }\n }\n if (showAdvancedFilter && containsAdvanced) showAdvancedFilter.value = true\n if (callback) callback(containsAdvanced)\n }\n\n const storeFilter = (filterBag: FilterBag) => {\n if (!storeId || !localStorage) return\n const data: Record<string, any> = {}\n for (const filterName in filterBag) {\n try {\n if (\n !filterName.startsWith('_') &&\n !isUndefined(filterBag[filterName].model) &&\n !isNull(filterBag[filterName].model) &&\n !isEmptyObject(filterBag[filterName].model) &&\n !isEmptyArray(filterBag[filterName].model) &&\n filterBag[filterName].model !== filterBag[filterName].default\n ) {\n data[filterName] = filterBag[filterName].model\n }\n } catch (e) {\n //\n }\n }\n if (isEmptyObject(data)) return\n localStorage.setItem(storeId, JSON.stringify(data))\n }\n\n const resetFilter = (filterBag: FilterBag, pagination: Pagination, callback?: any) => {\n clearAll(filterBag)\n pagination.page = 1\n if (storeId && localStorage) {\n localStorage.removeItem(storeId)\n }\n if (callback) callback()\n }\n\n const submitFilter = (filterBag: FilterBag, pagination: Pagination, callback: () => any) => {\n clearAllErrors(filterBag)\n storeFilter(filterBag)\n pagination.page = 1\n callback()\n }\n\n return {\n clearAllErrors,\n clearAll,\n clearOne,\n resetFilter,\n submitFilter,\n loadStoredFilter,\n }\n}\n","<script lang=\"ts\" setup>\nimport type { Filter } from '@/types/Filter'\nimport { useFilterHelpers } from '@/composables/filter/filterHelpers'\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { isUndefined } from '@/utils/common'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: Filter\n placeholder?: string | undefined\n dataCy?: string\n }>(),\n {\n placeholder: undefined,\n dataCy: 'filter-string',\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: Filter): void\n}>()\n\nconst value = computed({\n get() {\n return props.modelValue.model\n },\n set(newValue) {\n emit('update:modelValue', { ...props.modelValue, ...{ model: newValue } })\n },\n})\n\nconst { clearOne } = useFilterHelpers()\n\nconst { t } = useI18n()\n\nconst label = computed(() => {\n return props.modelValue.titleT ? t(props.modelValue.titleT) : undefined\n})\n\nconst placeholderComputed = computed(() => {\n if (!isUndefined(props.placeholder)) return props.placeholder\n if (props.modelValue.variant === 'startsWith') return t('common.model.filterPlaceholder.startsWith')\n if (props.modelValue.variant === 'eq') return t('common.model.filterPlaceholder.eq')\n if (props.modelValue.variant === 'contains' || props.modelValue.variant === 'search')\n return t('common.model.filterPlaceholder.contains')\n return ''\n})\n</script>\n\n<template>\n <VTextField\n v-model=\"value\"\n :label=\"label\"\n :placeholder=\"placeholderComputed\"\n :clearable=\"!modelValue.mandatory\"\n :data-cy=\"dataCy\"\n @click:clear.stop=\"clearOne(modelValue)\"\n />\n</template>\n","<script lang=\"ts\" setup>\nimport type { Filter } from '@/types/Filter'\nimport type { Ref } from 'vue'\nimport { computed, ref, toRefs, watch } from 'vue'\nimport { isDocId, isEmpty, isInt, isString, isUndefined } from '@/utils/common'\nimport { useFilterHelpers } from '@/composables/filter/filterHelpers'\nimport { useI18n } from 'vue-i18n'\n\nconst props = withDefaults(\n defineProps<{\n filterId?: Filter | undefined\n filterDocId?: Filter | undefined\n filterText?: Filter | undefined\n filterUrl?: Filter | undefined\n filterOverrides?: Filter[] | undefined\n placeholder?: string | undefined\n dataCy?: string\n }>(),\n {\n filterId: undefined,\n filterDocId: undefined,\n filterText: undefined,\n filterUrl: undefined,\n filterOverrides: undefined,\n placeholder: undefined,\n dataCy: 'filter-mixed',\n }\n)\nconst model = ref('')\nconst { filterId, filterText, filterDocId, filterUrl, filterOverrides } = toRefs(props)\nconst { t } = useI18n()\n\nconst filterActive = (filter: Ref<Filter | undefined> | undefined): filter is Ref<Filter> => {\n return !isUndefined(filter) && !isUndefined(filter.value)\n}\nconst { clearOne } = useFilterHelpers()\nconst clearIfActive = (filter: Ref<Filter | undefined> | undefined) => {\n if (filterActive(filter)) {\n clearOne(filter.value)\n }\n}\nconst clearAllActiveExcept = (exceptFilter: Ref<Filter | undefined> | undefined = undefined) => {\n if (exceptFilter?.value?.titleT !== filterId?.value?.titleT) {\n clearIfActive(filterId)\n }\n if (exceptFilter?.value?.titleT !== filterDocId?.value?.titleT) {\n clearIfActive(filterDocId)\n }\n if (exceptFilter?.value?.titleT !== filterText?.value?.titleT) {\n clearIfActive(filterText)\n }\n if (exceptFilter?.value?.titleT !== filterUrl?.value?.titleT) {\n clearIfActive(filterUrl)\n }\n if (!isUndefined(filterOverrides)) {\n filterOverrides.value?.forEach((filter: any) => {\n if (exceptFilter?.value?.titleT !== filter.titleT) {\n clearOne(filter)\n }\n })\n }\n}\nconst overrideFilter: Ref<Filter | undefined> = ref(undefined)\nwatch(overrideFilter, () => {\n if (filterActive(overrideFilter)) {\n overrideFilter.value.model = model.value\n currentFilter.value = overrideFilter.value\n clearAllActiveExcept(overrideFilter)\n return\n }\n setFilters(model.value)\n})\nconst currentFilter: Ref<Filter | undefined> = ref(undefined)\nwatch(model, (newModel: string) => {\n setFilters(newModel)\n})\nconst setFilters = (newModel: string) => {\n if (filterActive(overrideFilter)) {\n overrideFilter.value.model = newModel\n return\n }\n const filter = autodetectFilter(newModel)\n if (!isUndefined(filter)) {\n filter.model = newModel\n }\n currentFilter.value = filter\n clearAllActiveExcept(currentFilter)\n}\nconst autodetectFilter = (newModel: string): Filter | undefined => {\n if (isInt(newModel)) {\n if (filterActive(filterId)) {\n return filterId.value\n }\n }\n if (isDocId(newModel)) {\n if (filterActive(filterDocId)) {\n return filterDocId.value\n }\n }\n if (isString(newModel) && newModel.length > 0) {\n if (filterActive(filterUrl) && newModel.startsWith('http')) {\n return filterUrl.value\n }\n if (filterActive(filterText)) {\n return filterText.value\n }\n }\n return undefined\n}\n\nconst label = computed(() => {\n if (filterActive(overrideFilter)) {\n return t(overrideFilter.value.titleT ?? '')\n }\n if (filterActive(currentFilter)) {\n return t(currentFilter.value.titleT ?? '')\n }\n const filterLabels = []\n if (filterActive(filterId)) {\n filterLabels.push(t(filterId.value.titleT ?? ''))\n }\n if (filterActive(filterDocId)) {\n filterLabels.push(t(filterDocId.value.titleT ?? ''))\n }\n if (filterActive(filterUrl)) {\n filterLabels.push(t(filterUrl.value.titleT ?? ''))\n }\n if (filterActive(filterText)) {\n filterLabels.push(t(filterText.value.titleT ?? ''))\n }\n return filterLabels.join('/')\n})\n\nconst currentFilterModel = computed(() => {\n return currentFilter.value?.model\n})\nwatch(currentFilterModel, (newModel) => {\n if (!isEmpty(model.value) && isEmpty(newModel)) {\n model.value = ''\n }\n})\n\nconst placeholderComputed = computed(() => {\n if (!isUndefined(props.placeholder)) return props.placeholder\n if (currentFilter.value?.variant === 'startsWith') return t('common.model.filterPlaceholder.startsWith')\n if (currentFilter.value?.variant === 'eq') return t('common.model.filterPlaceholder.eq')\n if (currentFilter.value?.variant === 'contains' || currentFilter.value?.variant === 'search')\n return t('common.model.filterPlaceholder.contains')\n return ''\n})\n</script>\n\n<template>\n <VTextField\n v-model=\"model\"\n :label=\"label\"\n :data-cy=\"dataCy\"\n :placeholder=\"placeholderComputed\"\n >\n <template\n v-if=\"filterOverrides\"\n #append-inner\n >\n <VBtnToggle\n v-model=\"overrideFilter\"\n divided\n class=\"override-toggle\"\n >\n <VBtn\n v-for=\"(override, index) in filterOverrides\"\n :key=\"index\"\n size=\"small\"\n :value=\"override\"\n >\n {{ t(override.titleT ?? '') }}\n </VBtn>\n </VBtnToggle>\n </template>\n </VTextField>\n</template>\n\n<style lang=\"scss\" scoped>\n.override-toggle {\n height: 80%;\n}\n</style>\n","<script lang=\"ts\" setup>\nimport type { Filter } from '@/types/Filter'\nimport { useFilterHelpers } from '@/composables/filter/filterHelpers'\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { stringToInt } from '@/utils/string'\nimport { isNull } from '@/utils/common'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: Filter\n dataCy?: string\n }>(),\n {\n dataCy: 'filter-integer',\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: Filter): void\n}>()\n\nconst value = computed({\n get() {\n return props.modelValue.model\n },\n set(newValue) {\n emit('update:modelValue', {\n ...props.modelValue,\n ...{ model: isNull(newValue) ? null : stringToInt(newValue + '') },\n })\n },\n})\n\nconst { clearOne } = useFilterHelpers()\n\nconst { t } = useI18n()\n\nconst label = computed(() => {\n return props.modelValue.titleT ? t(props.modelValue.titleT) : undefined\n})\n</script>\n\n<template>\n <VTextField\n v-model=\"value\"\n :label=\"label\"\n :clearable=\"!modelValue.mandatory\"\n :data-cy=\"dataCy\"\n @click:clear.stop=\"clearOne(modelValue)\"\n />\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, ref } from 'vue'\nimport { eventClickBlur } from '@/utils/event'\nimport { useI18n } from 'vue-i18n'\n\nwithDefaults(\n defineProps<{\n tooltipT?: string\n buttonClass?: string\n dataCy?: string\n }>(),\n {\n tooltipT: 'common.button.advancedFilters',\n buttonClass: 'mt-1',\n dataCy: 'filter-advanced',\n }\n)\nconst emit = defineEmits<{\n (e: 'advancedFilter'): void\n}>()\n\nconst active = ref(false)\n\nconst onClick = (event: Event) => {\n eventClickBlur(event)\n active.value = !active.value\n emit('advancedFilter')\n}\n\nconst icon = computed(() => {\n return active.value ? 'mdi-chevron-double-up' : 'mdi-chevron-double-down'\n})\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <VBtn\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n icon\n size=\"x-small\"\n variant=\"text\"\n @click.stop=\"onClick\"\n >\n <VIcon :icon=\"icon\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t(tooltipT) }}\n </VTooltip>\n </VBtn>\n</template>\n","<script lang=\"ts\" setup>\nimport AFilterAdvancedButton from '@/components/buttons/filter/AFilterAdvancedButton.vue'\nimport AFilterSubmitButton from '@/components/buttons/filter/AFilterSubmitButton.vue'\nimport AFilterResetButton from '@/components/buttons/filter/AFilterResetButton.vue'\n\nwithDefaults(\n defineProps<{\n enableAdvanced?: boolean\n enableTop?: boolean\n hideButtons?: boolean\n touched?: boolean\n }>(),\n {\n enableAdvanced: false,\n enableTop: false,\n hideButtons: false,\n touched: true,\n }\n)\nconst emit = defineEmits<{\n (e: 'resetFilter'): void\n}>()\n\nconst showAdvanced = defineModel<boolean>('showAdvanced', { default: false, required: false })\n\nconst resetFilter = () => {\n emit('resetFilter')\n}\n\nconst toggleAdvancedFilter = () => {\n showAdvanced.value = !showAdvanced.value\n}\n</script>\n\n<template>\n <VRow\n v-if=\"enableTop\"\n dense\n >\n <VCol class=\"\">\n <slot name=\"top\" />\n </VCol>\n </VRow>\n <VRow\n dense\n class=\"a-filter-advanced\"\n :class=\"{ 'a-filter-advanced--active': showAdvanced }\"\n >\n <VCol\n v-if=\"enableAdvanced\"\n class=\"v-col-filters--show-hide\"\n cols=\"auto\"\n >\n <AFilterAdvancedButton\n :button-active=\"showAdvanced\"\n @advanced-filter=\"toggleAdvancedFilter\"\n />\n </VCol>\n <VCol class=\"\">\n <slot name=\"default\" />\n <div\n v-show=\"showAdvanced\"\n class=\"a-filter-advanced__content\"\n >\n <slot name=\"advanced\" />\n </div>\n </VCol>\n <VCol\n v-if=\"!hideButtons\"\n class=\"v-col-filters--buttons text-right\"\n cols=\"auto\"\n >\n <slot name=\"buttons\">\n <AFilterSubmitButton :touched=\"touched\" />\n <AFilterResetButton @reset=\"resetFilter\" />\n </slot>\n </VCol>\n </VRow>\n</template>\n","import { ref } from 'vue'\nimport type { ValueObjectOption } from '@/types/ValueObject'\nimport { useI18n } from 'vue-i18n'\n\nexport const Grant = {\n Deny: 0,\n AllowOwner: 1,\n Allow: 2,\n} as const\nexport type GrantType = (typeof Grant)[keyof typeof Grant]\nexport const GrantDefault = Grant.Deny\n\nexport function useGrant() {\n const { t } = useI18n()\n\n const grantOptions = ref<ValueObjectOption<GrantType>[]>([\n {\n value: Grant.Deny,\n title: t('common.permission.grant.deny'),\n color: 'error',\n },\n {\n value: Grant.AllowOwner,\n title: t('common.permission.grant.allowOwner'),\n color: 'warning',\n },\n {\n value: Grant.Allow,\n title: t('common.permission.grant.allow'),\n color: 'success',\n },\n ])\n\n const getGrantOption = (value: GrantType): ValueObjectOption<GrantType> => {\n return grantOptions.value.find((item) => item.value === value) as ValueObjectOption<GrantType>\n }\n\n return {\n grantOptions,\n getGrantOption,\n }\n}\n","<script lang=\"ts\" setup>\nimport { type GrantType, useGrant } from '@/model/valueObject/Grant'\nimport { computed } from 'vue'\n\nconst props = defineProps<{\n availableGrants: GrantType[]\n selectedGrant: GrantType | undefined\n}>()\nconst emit = defineEmits<{\n (e: 'change', data?: GrantType): void\n}>()\nconst selectedGrant = computed({\n get() {\n return props.selectedGrant\n },\n set(newGrant) {\n emit('change', newGrant)\n },\n})\nconst { getGrantOption } = useGrant()\n</script>\n\n<template>\n <VBtnToggle\n v-model=\"selectedGrant\"\n divided\n density=\"compact\"\n variant=\"outlined\"\n class=\"text-disabled\"\n >\n <VBtn\n v-for=\"availableGrant in availableGrants\"\n :key=\"availableGrant\"\n :value=\"availableGrant\"\n :color=\"getGrantOption(availableGrant)?.color\"\n >\n {{ getGrantOption(availableGrant)?.title }}\n </VBtn>\n </VBtnToggle>\n</template>\n","import { ref } from 'vue'\nimport type { ValueObjectOption } from '@/types/ValueObject'\nimport { useI18n } from 'vue-i18n'\n\nexport const GrantOrigin = {\n Role: 'role',\n Group: 'group',\n User: 'user',\n Default: 'default',\n} as const\nexport type GrantOriginType = (typeof GrantOrigin)[keyof typeof GrantOrigin]\nexport const GrantOriginDefault = GrantOrigin.Default\n\nexport function useGrantOrigin() {\n const { t } = useI18n()\n\n const grantOriginOptions = ref<ValueObjectOption<GrantOriginType>[]>([\n {\n value: GrantOrigin.Role,\n title: t('common.permission.grantOrigin.role'),\n },\n {\n value: GrantOrigin.Group,\n title: t('common.permission.grantOrigin.group'),\n },\n {\n value: GrantOrigin.User,\n title: t('common.permission.grantOrigin.user'),\n },\n {\n value: GrantOriginDefault,\n title: t('common.permission.grantOrigin.defaultGrant'),\n },\n ])\n\n const getGrantOriginOption = (value: GrantOriginType): ValueObjectOption<GrantOriginType> => {\n return grantOriginOptions.value.find((item) => item.value === value) as ValueObjectOption<GrantOriginType>\n }\n\n return {\n grantOriginOptions,\n getGrantOriginOption,\n }\n}\n","<script lang=\"ts\" setup>\nimport { type GrantType, useGrant } from '@/model/valueObject/Grant'\nimport { GrantOriginDefault, type GrantOriginType, useGrantOrigin } from '@/model/valueObject/GrantOrigin'\nimport { computed } from 'vue'\n\nconst props = defineProps<{\n grant: GrantType\n grantOrigin: GrantOriginType\n}>()\n\nconst { getGrantOption } = useGrant()\nconst grantOption = computed(() => getGrantOption(props.grant))\n\nconst { getGrantOriginOption } = useGrantOrigin()\nconst grantOriginOption = computed(() => getGrantOriginOption(props.grantOrigin))\n</script>\n\n<template>\n <VChip\n v-if=\"grantOption\"\n :color=\"grantOption.color\"\n label\n size=\"small\"\n >\n {{ grantOption.title }}\n <span\n v-if=\"grantOrigin !== GrantOriginDefault\"\n class=\"ml-1\"\n >({{ grantOriginOption?.title }})</span>\n </VChip>\n</template>\n","import { ref } from 'vue'\nimport type { AnzuUser } from '@/types/AnzuUser'\n\nconst currentUsers = ref<Map<string, AnzuUser | undefined>>(new Map())\nconst currentUsersLoaded = ref<Map<string, undefined | true>>(new Map())\nconst isAdminRoleBySystem = ref<Map<string, string>>(new Map())\n\nexport const useAuthStore = () => {\n function getCurrentUserBySystem(system: string) {\n return currentUsers.value.get(system)\n }\n\n function isCurrentUserLoadedBySystem(system: string) {\n return currentUsersLoaded.value.get(system)\n }\n\n function getAdminRoleBySystem(system: string) {\n return isAdminRoleBySystem.value.get(system)\n }\n\n function reset() {\n currentUsers.value.clear()\n currentUsersLoaded.value.clear()\n isAdminRoleBySystem.value.clear()\n }\n\n return {\n currentUsers,\n currentUsersLoaded,\n isAdminRoleBySystem,\n getCurrentUserBySystem,\n getAdminRoleBySystem,\n isCurrentUserLoadedBySystem,\n reset,\n }\n}\n","import type { IntegerId } from '@/types/common'\nimport { isObject } from '@/utils/common'\n\nexport interface OwnerAware {\n owners: IntegerId[]\n}\n\nexport const isOwnerAware = (value: unknown): value is OwnerAware => {\n return isObject(value) && Object.hasOwn(value, 'owners')\n}\n","import type { IntegerIdNullable } from '@/types/common'\n\nexport interface CreatedByAware {\n createdBy: IntegerIdNullable\n}\n\nexport const isCreatedByAware = (value: object): value is CreatedByAware => {\n return Object.hasOwn(value, 'createdBy')\n}\n","import { computed } from 'vue'\nimport { useAuthStore } from '@/composables/auth/authStore'\nimport { type AxiosInstance } from 'axios'\nimport type { AclValue } from '@/types/Permission'\nimport { isArray, isNull, isUndefined } from '@/utils/common'\nimport { objectGetValueByPath } from '@/utils/object'\nimport { Grant } from '@/model/valueObject/Grant'\nimport { isOwnerAware } from '@/types/OwnerAware'\nimport { isCreatedByAware } from '@/types/CreatedByAware'\nimport type { AnzuUser } from '@/types/AnzuUser'\nimport type { UrlParams } from '@/services/api/apiHelper'\nimport { apiFetchOne } from '@/services/api/apiFetchOne'\n\nexport type DefineAuthConfig = {\n adminRole: string | Array<{ system: string; adminRole: string }>\n}\n\nexport const ROLE_SUPER_ADMIN = 'ROLE_SUPER_ADMIN'\n\nconst defaultConfig: DefineAuthConfig = {\n adminRole: ROLE_SUPER_ADMIN,\n}\n\n/**\n * @param mainCurrentUserSystem - By this system currentUser object is used to get user ID.\n * @param config\n */\nexport function defineAuth<TAclValue extends AclValue>(\n mainCurrentUserSystem: string,\n config: Partial<DefineAuthConfig> = {}\n) {\n const mergedConfig = { ...defaultConfig, ...config }\n const authStore = useAuthStore()\n const { canHelper, canForAllHelper, canOwnerHelper, isAdminHelper } = useAuthHelpers()\n\n const isAdmin = (userRoles: string[], system: string) => {\n return isAdminHelper(userRoles, system)\n }\n\n const can = (acl: TAclValue, subject?: object) => {\n return canHelper(acl, subject)\n }\n\n function canOwner(subject: object) {\n return canOwnerHelper(subject, mainCurrentUserSystem)\n }\n\n const canForAll = (acls: TAclValue[], subject?: object) => {\n return canForAllHelper(acls, subject)\n }\n\n const canForSome = (acls: TAclValue[], subject?: object) => {\n if (acls.length === 0) {\n return true\n }\n return acls.some((acl) => {\n return can(acl, subject)\n })\n }\n\n const currentUserId = computed(() => {\n const user = authStore.getCurrentUserBySystem(mainCurrentUserSystem)\n const userIsLoaded = authStore.isCurrentUserLoadedBySystem(mainCurrentUserSystem)\n if (isUndefined(userIsLoaded)) {\n return undefined\n }\n if (isUndefined(user) || isUndefined(user.id) || isNull(user.id) || user.id === 0) {\n return undefined\n }\n return user.id\n })\n\n function useCurrentUser<TCurrentUser extends AnzuUser | undefined>(system: string) {\n const setCurrentUser = (user: TCurrentUser) => {\n authStore.currentUsers.value.set(system, user)\n authStore.currentUsersLoaded.value.set(system, true)\n }\n\n const currentUser = computed((): TCurrentUser | undefined => {\n return authStore.currentUsers.value.get(system) as TCurrentUser | undefined\n })\n\n const isCurrentUserLoaded = computed((): boolean | undefined => {\n return authStore.currentUsersLoaded.value.get(system) as boolean | undefined\n })\n\n const isSuperAdmin = computed(() => {\n if (currentUser.value) {\n return isAdmin(currentUser.value.roles, system)\n }\n return false\n })\n\n const hasCurrentUser = computed(() => {\n return currentUser.value ?? false\n })\n\n const isAnonymous = computed(() => {\n if (isUndefined(isCurrentUserLoaded.value)) return undefined\n return !hasCurrentUser.value\n })\n\n const storeAdminRoleBySystem = () => {\n if (isArray(mergedConfig.adminRole)) {\n const found = mergedConfig.adminRole.find((role) => role.system === system)\n if (found) {\n authStore.isAdminRoleBySystem.value.set(system, found.adminRole)\n }\n } else {\n authStore.isAdminRoleBySystem.value.set(system, mergedConfig.adminRole)\n }\n }\n\n const fetchCurrentUser = async (\n client: () => AxiosInstance,\n endPoint = '/adm/v1/users/current',\n urlParams: UrlParams | undefined = undefined,\n entity = 'user'\n ) => {\n try {\n const res = await apiFetchOne<TCurrentUser>(client, endPoint, urlParams, system, entity)\n setCurrentUser(res)\n authStore.currentUsersLoaded.value.set(system, true)\n storeAdminRoleBySystem()\n return currentUser.value\n } catch (error) {\n authStore.currentUsersLoaded.value.set(system, true)\n return undefined\n }\n }\n\n return {\n currentUser,\n setCurrentUser,\n isSuperAdmin,\n isAnonymous,\n hasCurrentUser,\n fetchCurrentUser,\n }\n }\n\n return {\n can,\n canForAll,\n canForSome,\n canOwner,\n useCurrentUser,\n currentUserId,\n config: mergedConfig,\n }\n}\n\nexport function useAuthHelpers<TAclValue extends AclValue>() {\n const authStore = useAuthStore()\n\n const canHelper = (acl: TAclValue, subject: object | undefined) => {\n const system = getSystemFromAcl(acl)\n const user = authStore.getCurrentUserBySystem(system)\n const userIsLoaded = authStore.isCurrentUserLoadedBySystem(system)\n if (isUndefined(userIsLoaded)) {\n throw new Error('Composable defineAuth must try to load currentUser first to use can function.')\n }\n if (isUndefined(user) || isUndefined(user.id) || isNull(user.id) || user.id === 0) {\n return false\n }\n if (isAdminHelper(user.roles, system)) return true\n const permission = objectGetValueByPath(user, 'resolvedPermissions.' + acl)\n if (isUndefined(permission)) return false\n switch (permission) {\n case Grant.Allow:\n return true\n case Grant.Deny:\n return false\n case Grant.AllowOwner:\n if (isUndefined(subject))\n throw new Error(`Required subject for acl \"${acl}\" to determine an ability to access the resource.`)\n return canOwnerHelper(subject, system)\n default:\n return false\n }\n }\n\n const canForAllHelper = (acls: TAclValue[], subject?: object) => {\n if (acls.length === 0) {\n return true\n }\n return acls.every((acl) => {\n return canHelper(acl, subject)\n })\n }\n\n const isAdminHelper = (userRoles: string[], system: string) => {\n const authStore = useAuthStore()\n const adminRole = authStore.getAdminRoleBySystem(system)\n if (isUndefined(adminRole)) return false\n\n return userRoles.includes(adminRole)\n }\n\n function canOwnerHelper(subject: object, system: string) {\n const user = authStore.getCurrentUserBySystem(system)\n const userIsLoaded = authStore.isCurrentUserLoadedBySystem(system)\n if (isUndefined(userIsLoaded)) {\n throw new Error('Composable defineAuth must try to load currentUser first to use canOwner function.')\n }\n if (isUndefined(user) || isUndefined(user.id) || isNull(user.id) || user.id === 0) {\n return false\n }\n if (isOwnerAware(subject)) {\n return subject.owners.includes(user.id)\n }\n if (isCreatedByAware(subject)) {\n return subject.createdBy === user.id\n }\n return false\n }\n\n return {\n canHelper,\n canForAllHelper,\n canOwnerHelper,\n isAdminHelper,\n }\n}\n\nfunction getSystemFromAcl (acl: any) {\n const parts = acl.split('_')\n\n return parts[0]\n}\n","<script lang=\"ts\" setup generic=\"TAclValue extends AclValue\">\nimport { computed, ref, watch } from 'vue'\nimport type { AclValue } from '@/types/Permission'\nimport { useAuthHelpers } from '@/composables/auth/defineAuth'\nimport { isArray } from '@/utils/common'\nimport { useAuthStore } from '@/composables/auth/authStore'\n\nconst props = withDefaults(\n defineProps<{\n permission: TAclValue | TAclValue[] // multiple values must be from same system!\n subject?: object\n }>(),\n {\n subject: undefined,\n }\n)\n\nconst allowed = ref<boolean>(false)\n\nconst authStore = useAuthStore()\n\nconst currentUsers = computed(() => {\n return authStore.currentUsers.value\n})\n\nconst { canHelper, canForAllHelper } = useAuthHelpers()\n\nconst can = (acls: TAclValue[] | TAclValue, subject?: object) => {\n if (isArray(acls)) {\n return canForAllHelper(acls, subject)\n }\n\n return canHelper(acls, subject)\n}\n\nconst watchHandle = watch(\n currentUsers,\n (newValue) => {\n if (newValue.size > 0) {\n const show = can(props.permission, props.subject)\n if (show) {\n allowed.value = show\n stopWatch()\n }\n }\n },\n {\n immediate: true,\n }\n)\n\nfunction stopWatch() {\n setTimeout(() => watchHandle?.(), 0)\n}\n</script>\n\n<template>\n <slot v-if=\"allowed\" />\n</template>\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { dateTimePretty } from '@/utils/datetime'\nimport type { DatetimeUTCNullable } from '@/types/common'\n\nconst props = withDefaults(\n defineProps<{\n dateTime: DatetimeUTCNullable\n edgeDateValue?: string\n }>(),\n {\n edgeDateValue: 'n/a',\n }\n)\n\nconst pretty = computed(() => {\n return dateTimePretty(props.dateTime, props.edgeDateValue)\n})\n</script>\n\n<template>\n {{ pretty }}\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, inject, ref, watch } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { SubjectScopeSymbol, SystemScopeSymbol } from '@/components/injectionKeys'\nimport { isDefined, isFunction, isNull, isUndefined } from '@/utils/common'\nimport type { ErrorObject } from '@vuelidate/core'\nimport { stringSplitOnFirstOccurrence } from '@/utils/string'\nimport type { DatetimeUTCNullable, IntegerIdNullable } from '@/types/common'\nimport { dateTimeNow } from '@/utils/datetime'\nimport ACollabLockedByUser from '@/components/collab/components/ACollabLockedByUser.vue'\nimport type { CollabComponentConfig, CollabFieldData } from '@/components/collab/types/Collab'\nimport { useCollabField } from '@/components/collab/composables/collabField'\nimport { useCommonAdminCollabOptions } from '@/components/collab/composables/commonAdminCollabOptions'\nimport ADatetimePicker from '@/components/datetime/ADatetimePicker.vue'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: DatetimeUTCNullable | undefined\n label?: string\n errorMessage?: string\n v?: any\n dataCy?: string\n clearable?: boolean\n defaultActivationValue?: DatetimeUTCNullable | 'now' | (() => DatetimeUTCNullable)\n collab?: CollabComponentConfig\n disabled?: boolean\n }>(),\n {\n label: undefined,\n errorMessage: undefined,\n v: null,\n dataCy: undefined,\n clearable: false,\n defaultActivationValue: 'now',\n collab: undefined,\n disabled: undefined,\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: DatetimeUTCNullable | undefined): void\n (e: 'click:append', data: string | number | null): void\n (e: 'blur', data: string | number | null): void\n}>()\n\nconst modelValueComputed = computed({\n get() {\n return props.modelValue\n },\n set(newValue: DatetimeUTCNullable | undefined) {\n emit('update:modelValue', newValue)\n },\n})\n\n// Collaboration\nconst { collabOptions } = useCommonAdminCollabOptions()\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst releaseFieldLock = ref((data: CollabFieldData) => {})\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst changeFieldData = ref((data: CollabFieldData) => {})\nconst acquireFieldLock = ref(() => {})\nconst lockedByUserLocal = ref<IntegerIdNullable>(null)\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nif (collabOptions.value.enabled && isDefined(props.collab)) {\n const { releaseCollabFieldLock, changeCollabFieldData, acquireCollabFieldLock, lockedByUser } = useCollabField(\n props.collab.room,\n props.collab.field\n )\n releaseFieldLock.value = releaseCollabFieldLock\n changeFieldData.value = changeCollabFieldData\n acquireFieldLock.value = acquireCollabFieldLock\n watch(\n lockedByUser,\n (newValue) => {\n lockedByUserLocal.value = newValue\n },\n { immediate: true }\n )\n}\n\nconst { t } = useI18n()\n\nconst system = inject<string | undefined>(SystemScopeSymbol, undefined)\nconst subject = inject<string | undefined>(SubjectScopeSymbol, undefined)\n\nconst checkboxModel = ref(false)\nconst isFocused = ref(false)\nconst isOpened = ref(false)\n\nconst onBlur = () => {\n isFocused.value = false\n emit('blur', isUndefined(props.modelValue) ? null : props.modelValue)\n props.v?.$touch()\n if (isOpened.value === false) releaseFieldLock.value(props.modelValue)\n}\n\nconst onFocus = () => {\n isFocused.value = true\n acquireFieldLock.value()\n}\n\nconst onOpen = () => {\n isOpened.value = true\n acquireFieldLock.value()\n}\n\nconst onClose = () => {\n isOpened.value = false\n releaseFieldLock.value(props.modelValue)\n}\n\nconst errorMessageComputed = computed(() => {\n if (!isUndefined(props.errorMessage)) return [props.errorMessage]\n if (props.v?.$errors?.length) return [props.v.$errors.map((item: ErrorObject) => item.$message).join(' ')]\n return []\n})\n\nconst labelComputed = computed(() => {\n if (isDefined(props.label)) return props.label\n if (isUndefined(system) || isUndefined(subject) || isUndefined(props.v?.$path)) return ''\n const { end: path } = stringSplitOnFirstOccurrence(props.v?.$path, '.')\n return t(system + '.' + subject + '.model.' + path)\n})\n\nwatch(\n modelValueComputed,\n (newValue, oldValue) => {\n if (newValue === oldValue) return\n if (isNull(newValue) || isUndefined(newValue)) {\n checkboxModel.value = false\n return\n }\n checkboxModel.value = true\n },\n { immediate: true }\n)\n\n/**\n * @param oldValue state before click\n */\nconst onCheckboxClick = (oldValue: boolean) => {\n acquireFieldLock.value()\n setTimeout(() => {\n if (isFocused.value === false) releaseFieldLock.value(props.modelValue)\n }, 500)\n if (oldValue) {\n modelValueComputed.value = null\n return\n }\n if (props.defaultActivationValue === 'now') {\n modelValueComputed.value = dateTimeNow()\n return\n }\n if (isFunction(props.defaultActivationValue)) {\n modelValueComputed.value = props.defaultActivationValue()\n return\n }\n modelValueComputed.value = props.defaultActivationValue\n}\n\nconst disabledComputed = computed(() => {\n if (isDefined(props.disabled)) return props.disabled\n return !!lockedByUserLocal.value\n})\n\nwatch(modelValueComputed, (newValue, oldValue) => {\n if (newValue === oldValue) return\n if (collabOptions.value.enabled && (isFocused.value || isOpened.value)) {\n changeFieldData.value(newValue)\n }\n})\n</script>\n\n<template>\n <div class=\"d-flex justify-space-between\">\n <VCheckboxBtn\n v-model=\"checkboxModel\"\n :label=\"labelComputed\"\n :disabled=\"disabledComputed\"\n @click.stop=\"onCheckboxClick(checkboxModel)\"\n />\n <div style=\"opacity: 0.5\">\n <slot\n name=\"locked\"\n :user-id=\"lockedByUserLocal\"\n >\n <ACollabLockedByUser\n v-if=\"collab\"\n :id=\"lockedByUserLocal\"\n :users=\"collab.cachedUsers\"\n />\n </slot>\n </div>\n </div>\n <VExpandTransition>\n <div v-show=\"checkboxModel\">\n <ADatetimePicker\n v-model=\"modelValueComputed\"\n :data-cy=\"dataCy\"\n :error-messages=\"errorMessageComputed\"\n :clearable=\"clearable\"\n :disabled=\"disabledComputed\"\n @focus=\"onFocus\"\n @blur=\"onBlur\"\n @on-open=\"onOpen\"\n @on-close=\"onClose\"\n >\n <template #append-inner />\n </ADatetimePicker>\n </div>\n </VExpandTransition>\n</template>\n","<script lang=\"ts\" setup>\nimport type { Filter } from '@/types/Filter'\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport ADatetimePicker from '@/components/datetime/ADatetimePicker.vue'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: Filter\n dataCy?: string\n }>(),\n {\n dataCy: 'filter-datepicker',\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: any): void\n}>()\n\nconst value = computed({\n get() {\n return props.modelValue.model\n },\n set(newValue) {\n emit('update:modelValue', { ...props.modelValue, ...{ model: newValue } })\n },\n})\n\nconst { t } = useI18n()\n\nconst label = computed(() => {\n return props.modelValue.titleT ? t(props.modelValue.titleT) : undefined\n})\n</script>\n\n<template>\n <ADatetimePicker\n v-model=\"value\"\n :data-cy=\"dataCy\"\n :clearable=\"!modelValue.mandatory\"\n :default-value=\"modelValue.default\"\n :label=\"label\"\n v-bind=\"$attrs\"\n />\n</template>\n","<script lang=\"ts\" setup>\nimport { watchDebounced } from '@vueuse/core'\nimport { computed, inject, type Ref, ref, toRefs, watch } from 'vue'\nimport type { ValueObjectOption } from '@/types/ValueObject'\nimport type { Pagination } from '@/types/Pagination'\nimport type { FilterBag } from '@/types/Filter'\nimport { usePagination } from '@/composables/system/pagination'\nimport { cloneDeep, isArray, isDefined, isNull, isUndefined } from '@/utils/common'\nimport { SubjectScopeSymbol, SystemScopeSymbol } from '@/components/injectionKeys'\nimport type { ErrorObject } from '@vuelidate/core'\nimport { stringSplitOnFirstOccurrence } from '@/utils/string'\nimport { useI18n } from 'vue-i18n'\nimport type { DocId, IntegerId, IntegerIdNullable } from '@/types/common'\nimport ACollabLockedByUser from '@/components/collab/components/ACollabLockedByUser.vue'\nimport type { CollabComponentConfig, CollabFieldData } from '@/components/collab/types/Collab'\nimport { useCollabField } from '@/components/collab/composables/collabField'\nimport { useCommonAdminCollabOptions } from '@/components/collab/composables/commonAdminCollabOptions'\n\ntype fetchItemsByIdsType =\n | ((ids: IntegerId[]) => Promise<ValueObjectOption<IntegerId>[]>)\n | ((ids: DocId[]) => Promise<ValueObjectOption<DocId>[]>)\n\nconst props = withDefaults(\n defineProps<{\n label?: string | undefined\n required?: boolean | undefined\n multiple?: boolean\n clearable?: boolean\n v?: any\n errorMessage?: string\n hideDetails?: boolean\n hideLabel?: boolean\n fetchItems: (pagination: Pagination, filterBag: FilterBag) => Promise<ValueObjectOption<string | number>[]>\n fetchItemsByIds: fetchItemsByIdsType\n innerFilter: FilterBag\n filterByField?: string\n filterSortBy?: string | null\n filterSortDescending?: boolean\n disableInitFetch?: boolean | undefined\n loading?: boolean\n collab?: CollabComponentConfig\n disabled?: boolean | undefined\n chips?: boolean\n autoSelectIfSingleAndEmptyOnInit?: boolean\n }>(),\n {\n label: undefined,\n required: undefined,\n multiple: false,\n clearable: false,\n v: null,\n errorMessage: undefined,\n hideDetails: false,\n hideLabel: false,\n filterByField: 'name',\n filterSortBy: 'createdAt',\n filterSortDescending: true,\n disableInitFetch: false,\n loading: false,\n collab: undefined,\n disabled: undefined,\n chips: false,\n autoSelectIfSingleAndEmptyOnInit: false,\n }\n)\nconst emit = defineEmits<{\n (e: 'searchChange', data: string): void\n (e: 'searchChangeDebounced', data: string): void\n (e: 'blur', data: DocId | IntegerId | DocId[] | IntegerId[] | null): void\n (e: 'focus', data: DocId | IntegerId | DocId[] | IntegerId[] | null): void\n}>()\n\nconst modelValue = defineModel<DocId | IntegerId | DocId[] | IntegerId[] | null | any>({\n required: true,\n set(newValue) {\n return isArray(newValue) ? cloneDeep(newValue) : newValue\n },\n})\n\nconst modelValueSelected = defineModel<DocId | IntegerId | DocId[] | IntegerId[] | null | any>('selected', {\n required: false,\n default: null,\n set(newValue) {\n return isArray(newValue) ? cloneDeep(newValue) : newValue\n },\n})\n\nconst modelValueAutocomplete = ref<DocId | IntegerId | DocId[] | IntegerId[] | null | any>(null)\n\nconst apiRequestCounter = ref(0)\n\n// Collaboration\nconst { collabOptions } = useCommonAdminCollabOptions()\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst releaseFieldLock = ref((data: CollabFieldData) => {})\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst changeFieldData = ref((data: CollabFieldData) => {})\nconst acquireFieldLock = ref(() => {})\nconst lockedByUserLocal = ref<IntegerIdNullable>(null)\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nif (collabOptions.value.enabled && isDefined(props.collab)) {\n const { releaseCollabFieldLock, changeCollabFieldData, acquireCollabFieldLock, lockedByUser } = useCollabField(\n props.collab.room,\n props.collab.field\n )\n releaseFieldLock.value = releaseCollabFieldLock\n changeFieldData.value = changeCollabFieldData\n acquireFieldLock.value = acquireCollabFieldLock\n watch(\n lockedByUser,\n (newValue) => {\n lockedByUserLocal.value = newValue\n },\n { immediate: true }\n )\n}\n\nconst search = ref('')\nconst isFocused = ref(false)\nconst autoFetchTimer: Ref<ReturnType<typeof setTimeout> | undefined> = ref(undefined)\n\nconst { t } = useI18n()\n\nconst { innerFilter } = toRefs(props)\n\nconst system = inject<string | undefined>(SystemScopeSymbol, undefined)\nconst subject = inject<string | undefined>(SubjectScopeSymbol, undefined)\n\nconst onBlur = () => {\n isFocused.value = false\n emit('blur', modelValue.value)\n props.v?.$touch()\n releaseFieldLock.value(modelValue.value)\n}\n\nconst errorMessageComputed = computed(() => {\n if (isDefined(props.errorMessage)) return [props.errorMessage]\n if (props.v?.$errors?.length) return props.v.$errors.map((item: ErrorObject) => item.$message)\n return []\n})\n\nconst labelComputed = computed(() => {\n if (isDefined(props.label)) return props.label\n if (isUndefined(system) || isUndefined(subject) || isUndefined(props.v?.$path)) return ''\n const { end: path } = stringSplitOnFirstOccurrence(props.v?.$path, '.')\n return t(system + '.' + subject + '.model.' + path)\n})\n\nconst requiredComputed = computed(() => {\n if (isDefined(props.required)) return props.required\n return props.v?.required && props.v?.required.$params.type === 'required'\n})\n\nconst disabledComputed = computed(() => {\n if (isDefined(props.disabled)) return props.disabled\n return !!lockedByUserLocal.value\n})\n\nconst multipleComputedVuetifyTypeFix = computed(() => {\n if (props.multiple === false) return false\n return true as unknown as undefined\n})\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst pagination = usePagination(props.filterSortBy, props.filterSortDescending)\nconst fetchedItems = ref<ValueObjectOption<string | number>[]>([])\nconst selectedItemsCache = ref<ValueObjectOption<string | number>[]>([])\n\nconst allItems = computed<ValueObjectOption<DocId | IntegerId>[]>(() => {\n const final = new Map()\n selectedItemsCache.value.forEach((value) => {\n final.set(value.value, { value: value.value, title: value.title, subtitle: value.subtitle })\n })\n fetchedItems.value.forEach((value) => {\n final.set(value.value, { value: value.value, title: value.title, subtitle: value.subtitle })\n })\n return Array.from(final, ([key, value]) => {\n return { value: key, title: value.title, subtitle: value.subtitle }\n })\n})\n\nconst loadingLocal = ref(false)\nconst loadingComputed = computed(() => {\n if (loadingLocal.value) return true\n return props.loading\n})\n\nconst apiSearch = async (query: string, requestCounter: number) => {\n loadingLocal.value = true\n const filterField = innerFilter.value[props.filterByField]\n if (isUndefined(filterField)) {\n throw new Error('AFormRemoteAutocomplete incorrect innerFilter or filterByField setup.')\n }\n filterField.model = query\n const res = await props.fetchItems(pagination, innerFilter.value)\n if (requestCounter === apiRequestCounter.value) fetchedItems.value = res\n loadingLocal.value = false\n}\n\nconst findLocalDataByValues = (values: Array<DocId | IntegerId>) => {\n const found = allItems.value.filter((item: ValueObjectOption<string | number>) => values.includes(item.value))\n return ([] as ValueObjectOption<string | number>[]).concat(found)\n}\n\nconst tryToLoadFromLocalData = async (value: string | number | string[] | number[]) => {\n let count = 1\n let foundItems = []\n if (isArray(value)) {\n count = value.length\n foundItems = findLocalDataByValues(value)\n } else {\n foundItems = findLocalDataByValues([value])\n }\n selectedItemsCache.value = foundItems\n return foundItems.length === count\n}\n\nconst autoFetched = ref(false)\nconst clearAutoFetchTimer = () => {\n clearTimeout(autoFetchTimer.value)\n autoFetchTimer.value = undefined\n}\nconst autoFetch = async () => {\n clearAutoFetchTimer()\n if (autoFetched.value === true) return\n autoFetched.value = true\n loadingLocal.value = true\n const res = await props.fetchItems(pagination, innerFilter.value)\n if (apiRequestCounter.value === 0) {\n fetchedItems.value = res\n if (\n props.autoSelectIfSingleAndEmptyOnInit &&\n res.length === 1 &&\n isNull(modelValue.value || (isArray(modelValue.value) && modelValue.value.length === 0))\n ) {\n modelValue.value = props.multiple ? [res[0].value] : res[0].value\n }\n }\n loadingLocal.value = false\n}\nconst onFocus = () => {\n isFocused.value = true\n clearAutoFetchTimer()\n autoFetch()\n emit('focus', modelValue.value)\n acquireFieldLock.value()\n}\n\nconst singleItemSelectedTitle = computed(() => {\n if (!props.multiple && selectedItemsCache.value[0]) {\n return selectedItemsCache.value[0].title\n }\n return undefined\n})\n\nconst onSearchUpdate = (query: string) => {\n if (!props.multiple && !isFocused.value && query.length === 0) return // vuetify fix\n if (singleItemSelectedTitle.value === query) return\n search.value = query\n}\n\nconst onClickClear = async () => {\n fetchedItems.value = await props.fetchItems(pagination, innerFilter.value)\n if (props.multiple) {\n modelValue.value = []\n return\n }\n modelValue.value = null\n}\n\nwatchDebounced(\n search,\n (newValue, oldValue) => {\n if (newValue !== oldValue) {\n apiRequestCounter.value++\n apiSearch(newValue, apiRequestCounter.value)\n emit('searchChangeDebounced', newValue)\n }\n },\n { debounce: 300 }\n)\n\nwatch(search, (newValue, oldValue) => {\n if (newValue !== oldValue) {\n emit('searchChange', newValue)\n }\n})\n\nconst updateSelected = (newValue: any) => {\n if (isArray(newValue)) {\n return newValue.map((id: any) => {\n const foundObject = allItems.value.find((obj) => obj.value === id)\n return foundObject ? foundObject : { title: `${id}`, value: id }\n })\n }\n const found = allItems.value.find((item) => item.value === newValue)\n if (found) return found\n return { value: newValue, title: newValue }\n}\n\nwatch(\n modelValue,\n async (newValue, oldValue) => {\n if (newValue === oldValue) return\n if (collabOptions.value.enabled && isFocused.value) {\n changeFieldData.value(newValue)\n }\n if (isNull(newValue) || isUndefined(newValue) || (isArray(newValue) && newValue.length === 0)) {\n selectedItemsCache.value = []\n modelValueSelected.value = isArray(newValue) ? [] : null\n modelValueAutocomplete.value = isArray(newValue) ? [] : null\n if (props.disableInitFetch || autoFetched.value === true) return\n autoFetchTimer.value = setTimeout(() => {\n autoFetch()\n }, 2000)\n return\n }\n const found = await tryToLoadFromLocalData(newValue)\n if (found) {\n const selectedNewValue = updateSelected(newValue)\n modelValueSelected.value = selectedNewValue\n modelValueAutocomplete.value = selectedNewValue\n return\n }\n if (isArray<IntegerId | DocId>(newValue)) {\n loadingLocal.value = true\n selectedItemsCache.value = await props.fetchItemsByIds(newValue as Array<IntegerId & DocId>)\n const selectedNewValue = updateSelected(newValue)\n modelValueSelected.value = selectedNewValue\n modelValueAutocomplete.value = selectedNewValue\n loadingLocal.value = false\n return\n }\n loadingLocal.value = true\n selectedItemsCache.value = await props.fetchItemsByIds([newValue as DocId & IntegerId])\n const selectedNewValue = updateSelected(newValue)\n modelValueSelected.value = selectedNewValue\n modelValueAutocomplete.value = selectedNewValue\n loadingLocal.value = false\n },\n { immediate: true }\n)\n\nconst onAutocompleteModelUpdate = (newValue: any) => {\n modelValueSelected.value = newValue\n if (isNull(newValue)) {\n modelValue.value = null\n return\n }\n if (isArray(newValue)) {\n modelValue.value = newValue.map((item: any) => item.value)\n return\n }\n modelValue.value = newValue.value\n}\n</script>\n\n<template>\n <VAutocomplete\n :model-value=\"modelValueAutocomplete\"\n :items=\"allItems\"\n no-filter\n :multiple=\"multipleComputedVuetifyTypeFix\"\n :clearable=\"clearable\"\n :error-messages=\"errorMessageComputed\"\n :chips=\"chips || multiple\"\n :hide-details=\"hideDetails\"\n :loading=\"loadingComputed\"\n :disabled=\"disabledComputed\"\n return-object\n autocomplete=\"off\"\n @update:search=\"onSearchUpdate\"\n @update:model-value=\"onAutocompleteModelUpdate\"\n @blur=\"onBlur\"\n @focus=\"onFocus\"\n @click:clear=\"onClickClear\"\n >\n <template #item=\"{ props: itemProps, item }\">\n <VListItem\n v-bind=\"itemProps\"\n :title=\"item.raw.title\"\n :subtitle=\"item.raw.subtitle\"\n />\n </template>\n <template #chip=\"{ props: chipProps, item }\">\n <VChip\n :closable=\"chipProps.closable as boolean\"\n size=\"small\"\n :text=\"`${item.title} (${item.raw.subtitle})`\"\n :disabled=\"item.props.disabled\"\n >\n {{ item.raw.title }}\n <span\n v-if=\"item.raw.subtitle\"\n class=\"font-italic pl-1\"\n >\n ({{ item.raw.subtitle }})\n </span>\n </VChip>\n </template>\n <template #label>\n <span\n v-if=\"!hideLabel\"\n :key=\"requiredComputed + ''\"\n >\n {{ labelComputed }}\n <span\n v-if=\"requiredComputed\"\n class=\"required\"\n />\n </span>\n </template>\n <template\n v-if=\"lockedByUserLocal\"\n #append-inner\n >\n <slot\n name=\"locked\"\n :user-id=\"lockedByUserLocal\"\n >\n <ACollabLockedByUser\n v-if=\"collab\"\n :id=\"lockedByUserLocal\"\n :users=\"collab.cachedUsers\"\n />\n </slot>\n </template>\n </VAutocomplete>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, inject, onMounted, ref, watch } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { SubjectScopeSymbol, SystemScopeSymbol } from '@/components/injectionKeys'\nimport { isUndefined } from '@/utils/common'\nimport { stringSplitOnFirstOccurrence } from '@/utils/string'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: boolean\n callbackToTrue: () => Promise<boolean> // return true if successfully changed, otherwise return false\n callbackToFalse: () => Promise<boolean> // return true if successfully changed, otherwise return false\n label?: string | undefined\n hideDetails?: boolean | undefined\n hideLabel?: boolean | undefined\n v?: any\n }>(),\n {\n label: undefined,\n hideDetails: undefined,\n hideLabel: undefined,\n v: null,\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: boolean): void\n}>()\n\nconst { t } = useI18n()\n\nconst system = inject<string | undefined>(SystemScopeSymbol, undefined)\nconst subject = inject<string | undefined>(SubjectScopeSymbol, undefined)\n\nconst labelComputed = computed(() => {\n if (!isUndefined(props.label)) return props.label\n if (isUndefined(system) || isUndefined(subject) || isUndefined(props.v?.$path)) return ''\n const { end: path } = stringSplitOnFirstOccurrence(props.v?.$path, '.')\n return t(system + '.' + subject + '.model.' + path)\n})\n\nconst loading = ref(false)\nconst hasError = ref(false)\nconst uniqueId = ref('')\n\nconst modelValueComputed = computed(() => {\n return props.modelValue\n})\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst internalModelValue = ref(props.modelValue)\n\nconst onClick = async () => {\n if (loading.value) return\n loading.value = true\n hasError.value = false\n if (internalModelValue.value === true) {\n const success = await props.callbackToFalse()\n emit('update:modelValue', !success)\n internalModelValue.value = !success\n if (!success) hasError.value = true\n loading.value = false\n return\n }\n const success = await props.callbackToTrue()\n emit('update:modelValue', success)\n internalModelValue.value = success\n if (!success) hasError.value = true\n loading.value = false\n}\n\nwatch(modelValueComputed, (newValue, oldValue) => {\n if (newValue !== oldValue) {\n internalModelValue.value = newValue\n hasError.value = false\n }\n})\n\nonMounted(() => {\n uniqueId.value = 'remote-switch-' + Date.now()\n})\n</script>\n\n<template>\n <div class=\"d-flex\">\n <VCheckboxBtn\n :id=\"uniqueId\"\n v-model=\"internalModelValue\"\n :disabled=\"loading\"\n @click.stop=\"onClick\"\n />\n <label\n v-if=\"!hideLabel\"\n :for=\"uniqueId\"\n class=\"v-label v-label--clickable\"\n >\n {{ labelComputed }}\n </label>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, inject, onMounted, ref, watch } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { SubjectScopeSymbol, SystemScopeSymbol } from '@/components/injectionKeys'\nimport { isUndefined } from '@/utils/common'\nimport { stringSplitOnFirstOccurrence } from '@/utils/string'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: boolean\n callbackToTrue: () => Promise<boolean> // return true if successfully changed, otherwise return false\n callbackToFalse: () => Promise<boolean> // return true if successfully changed, otherwise return false\n label?: string | undefined\n hideDetails?: boolean | undefined\n hideLabel?: boolean | undefined\n v?: any\n }>(),\n {\n label: undefined,\n hideDetails: undefined,\n hideLabel: undefined,\n v: null,\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: boolean): void\n}>()\n\nconst { t } = useI18n()\n\nconst system = inject<string | undefined>(SystemScopeSymbol, undefined)\nconst subject = inject<string | undefined>(SubjectScopeSymbol, undefined)\n\nconst labelComputed = computed(() => {\n if (!isUndefined(props.label)) return props.label\n if (isUndefined(system) || isUndefined(subject) || isUndefined(props.v?.$path)) return ''\n const { end: path } = stringSplitOnFirstOccurrence(props.v?.$path, '.')\n return t(system + '.' + subject + '.model.' + path)\n})\n\nconst loading = ref(false)\nconst hasError = ref(false)\nconst uniqueId = ref('')\n\nconst modelValueComputed = computed(() => {\n return props.modelValue\n})\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst internalModelValue = ref(props.modelValue)\n\nconst onClick = async () => {\n if (loading.value) return\n loading.value = true\n hasError.value = false\n if (internalModelValue.value === true) {\n const success = await props.callbackToFalse()\n emit('update:modelValue', !success)\n internalModelValue.value = !success\n if (!success) hasError.value = true\n loading.value = false\n return\n }\n const success = await props.callbackToTrue()\n emit('update:modelValue', success)\n internalModelValue.value = success\n if (!success) hasError.value = true\n loading.value = false\n}\n\nwatch(modelValueComputed, (newValue, oldValue) => {\n if (newValue !== oldValue) {\n internalModelValue.value = newValue\n hasError.value = false\n }\n})\n\nonMounted(() => {\n uniqueId.value = 'a-remote-switch-' + Date.now()\n})\n</script>\n\n<template>\n <div class=\"d-flex\">\n <VBtn\n :id=\"uniqueId\"\n icon\n class=\"a-switch-fix-click\"\n color=\"transparent\"\n :ripple=\"false\"\n :width=\"hideLabel ? 36 : undefined\"\n :height=\"36\"\n @click.stop=\"onClick\"\n >\n <VSwitch\n v-model=\"internalModelValue\"\n :loading=\"loading\"\n :disabled=\"loading\"\n :hide-details=\"hideDetails\"\n density=\"compact\"\n @click.stop=\"onClick\"\n >\n <template\n v-if=\"hasError\"\n #append\n >\n <VIcon\n icon=\"mdi-alert\"\n class=\"ml-5 mt-1\"\n size=\"x-small\"\n color=\"error\"\n />\n </template>\n </VSwitch>\n </VBtn>\n <label\n v-if=\"!hideLabel\"\n :for=\"uniqueId\"\n class=\"v-label v-label--clickable\"\n >\n {{ labelComputed }}\n </label>\n </div>\n</template>\n\n<style lang=\"scss\">\n.v-btn.a-switch-fix-click:hover > .v-btn__overlay {\n opacity: 0;\n max-height: 36px;\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed, inject, ref, watch } from 'vue'\nimport { stringSplitOnFirstOccurrence } from '@/utils/string'\nimport type { ErrorObject } from '@vuelidate/core'\nimport { cloneDeep, isDefined, isUndefined } from '@/utils/common'\nimport { SubjectScopeSymbol, SystemScopeSymbol } from '@/components/injectionKeys'\nimport { useI18n } from 'vue-i18n'\nimport ACollabLockedByUser from '@/components/collab/components/ACollabLockedByUser.vue'\nimport { useCollabField } from '@/components/collab/composables/collabField'\nimport type { CollabComponentConfig, CollabFieldData } from '@/components/collab/types/Collab'\nimport type { IntegerIdNullable } from '@/types/common'\nimport { useCommonAdminCollabOptions } from '@/components/collab/composables/commonAdminCollabOptions'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: any\n items: any[]\n label?: string\n errorMessage?: string\n required?: boolean\n v?: any\n hideLabel?: boolean\n multiple?: boolean\n hideDetails?: boolean\n clearable?: boolean\n dataCy?: string\n collab?: CollabComponentConfig\n disabled?: boolean\n }>(),\n {\n label: undefined,\n errorMessage: undefined,\n required: undefined,\n v: null,\n hideLabel: false,\n multiple: false,\n hideDetails: false,\n clearable: false,\n dataCy: '',\n collab: undefined,\n disabled: undefined,\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: any): void\n (e: 'blur', data: any): void\n (e: 'focus', data: any): void\n}>()\n\nconst modelValue = computed({\n get() {\n return props.modelValue\n },\n set(newValue) {\n emit('update:modelValue', cloneDeep<any>(newValue))\n },\n})\n\n// Collaboration\nconst { collabOptions } = useCommonAdminCollabOptions()\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst releaseFieldLock = ref((data: CollabFieldData) => {})\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst changeFieldData = ref((data: CollabFieldData) => {})\nconst acquireFieldLock = ref(() => {})\nconst lockedByUserLocal = ref<IntegerIdNullable>(null)\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nif (collabOptions.value.enabled && isDefined(props.collab)) {\n const { releaseCollabFieldLock, changeCollabFieldData, acquireCollabFieldLock, lockedByUser } = useCollabField(\n props.collab.room,\n props.collab.field\n )\n releaseFieldLock.value = releaseCollabFieldLock\n changeFieldData.value = changeCollabFieldData\n acquireFieldLock.value = acquireCollabFieldLock\n watch(\n lockedByUser,\n (newValue) => {\n lockedByUserLocal.value = newValue\n },\n { immediate: true }\n )\n}\n\nconst system = inject<string | undefined>(SystemScopeSymbol, undefined)\nconst subject = inject<string | undefined>(SubjectScopeSymbol, undefined)\n\nconst { t } = useI18n()\n\nconst isFocused = ref(false)\n\nconst onBlur = () => {\n isFocused.value = false\n emit('blur', props.modelValue)\n props.v?.$touch()\n releaseFieldLock.value(props.modelValue)\n}\n\nconst onFocus = () => {\n isFocused.value = true\n emit('focus', props.modelValue)\n acquireFieldLock.value()\n}\n\nconst errorMessageComputed = computed(() => {\n if (isDefined(props.errorMessage)) return [props.errorMessage]\n if (props.v?.$errors?.length) return props.v.$errors.map((item: ErrorObject) => item.$message)\n return []\n})\n\nconst labelComputed = computed(() => {\n if (isDefined(props.label)) return props.label\n if (isUndefined(system) || isUndefined(subject) || isUndefined(props.v?.$path)) return ''\n const { end: path } = stringSplitOnFirstOccurrence(props.v?.$path, '.')\n return t(system + '.' + subject + '.model.' + path)\n})\n\nconst requiredComputed = computed(() => {\n if (isDefined(props.required)) return props.required\n if (props.v?.required && props.v?.required.$params.type === 'required') return true\n return false\n})\n\nconst disabledComputed = computed(() => {\n if (isDefined(props.disabled)) return props.disabled\n return !!lockedByUserLocal.value\n})\n\nconst multipleComputedVuetifyTypeFix = computed(() => {\n if (props.multiple === false) return false\n return true as unknown as undefined\n})\n\nwatch(\n modelValue,\n async (newValue, oldValue) => {\n if (newValue === oldValue) return\n if (collabOptions.value.enabled && isFocused.value) {\n changeFieldData.value(newValue)\n }\n },\n { immediate: true }\n)\n</script>\n\n<template>\n <VAutocomplete\n v-model=\"modelValue\"\n :items=\"items\"\n item-title=\"title\"\n item-value=\"value\"\n :multiple=\"multipleComputedVuetifyTypeFix\"\n :disabled=\"disabledComputed\"\n :clearable=\"clearable\"\n :error-messages=\"errorMessageComputed\"\n :data-cy=\"dataCy\"\n autocomplete=\"off\"\n @blur=\"onBlur\"\n @focus=\"onFocus\"\n >\n <template #label>\n <span v-if=\"!hideLabel\">{{ labelComputed\n }}<span\n v-if=\"requiredComputed\"\n class=\"required\"\n /></span>\n </template>\n <template\n v-if=\"lockedByUserLocal\"\n #append-inner\n >\n <slot\n name=\"locked\"\n :user-id=\"lockedByUserLocal\"\n >\n <ACollabLockedByUser\n v-if=\"collab\"\n :id=\"lockedByUserLocal\"\n :users=\"collab.cachedUsers\"\n />\n </slot>\n </template>\n </VAutocomplete>\n</template>\n","<script lang=\"ts\" setup>\nimport type { ValueObjectOption } from '@/types/ValueObject'\nimport type { Filter } from '@/types/Filter'\nimport { useFilterHelpers } from '@/composables/filter/filterHelpers'\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: Filter\n items: ValueObjectOption<string | number>[]\n }>(),\n {}\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: any): void\n (e: 'change'): void\n}>()\nconst { clearOne } = useFilterHelpers()\n\nconst value = computed({\n get() {\n return props.modelValue.model\n },\n set(newValue) {\n emit('update:modelValue', { ...props.modelValue, ...{ model: newValue } })\n emit('change')\n },\n})\n\nconst { t } = useI18n()\n\nconst label = computed(() => {\n return props.modelValue.titleT ? t(props.modelValue.titleT) : undefined\n})\n\nconst multipleComputedVuetifyTypeFix = computed(() => {\n if (props.modelValue.multiple === false) return false\n return true as unknown as undefined\n})\n</script>\n\n<template>\n <VAutocomplete\n v-model=\"value\"\n :items=\"items\"\n :chips=\"modelValue.multiple\"\n :label=\"label\"\n :multiple=\"multipleComputedVuetifyTypeFix\"\n :clearable=\"!modelValue.mandatory\"\n data-cy=\"filter-value\"\n @clear=\"clearOne(modelValue)\"\n @change=\"emit('change')\"\n />\n</template>\n","<script lang=\"ts\" setup>\nimport { watchDebounced } from '@vueuse/core'\nimport { computed, type Ref, ref, toRefs, watch } from 'vue'\nimport type { ValueObjectOption } from '@/types/ValueObject'\nimport type { Pagination } from '@/types/Pagination'\nimport type { Filter, FilterBag } from '@/types/Filter'\nimport { usePagination } from '@/composables/system/pagination'\nimport { cloneDeep, isArray, isNull, isUndefined } from '@/utils/common'\nimport { useI18n } from 'vue-i18n'\nimport type { DocId, IntegerId } from '@/types/common'\n\ntype FetchItemsByIdsType =\n | ((ids: IntegerId[]) => Promise<ValueObjectOption<IntegerId>[]>)\n | ((ids: DocId[]) => Promise<ValueObjectOption<DocId>[]>)\n\nconst props = withDefaults(\n defineProps<{\n modelValue: Filter\n fetchItems: (pagination: Pagination, filterBag: FilterBag) => Promise<ValueObjectOption<string | number>[]>\n fetchItemsByIds: FetchItemsByIdsType\n innerFilter: FilterBag\n filterByField?: string\n filterSortBy?: string | null\n disableInitFetch?: boolean | undefined\n placeholder?: string | undefined\n }>(),\n {\n filterByField: 'name',\n filterSortBy: 'createdAt',\n disableInitFetch: false,\n placeholder: undefined,\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: Filter): void\n}>()\n\nconst modelValueComputed = computed({\n get() {\n return props.modelValue.model\n },\n set(newValue: DocId | IntegerId | DocId[] | IntegerId[] | null) {\n emit('update:modelValue', { ...props.modelValue, ...{ model: cloneDeep(newValue) } })\n },\n})\n\nconst search = ref('')\nconst isFocused = ref(false)\nconst autoFetchTimer: Ref<ReturnType<typeof setTimeout> | undefined> = ref(undefined)\n\nconst apiRequestCounter = ref(0)\n\nconst { t } = useI18n()\n\nconst { innerFilter } = toRefs(props)\n\nconst onBlur = () => {\n isFocused.value = true\n}\n\nconst label = computed(() => {\n return props.modelValue.titleT ? t(props.modelValue.titleT) : undefined\n})\n\nconst multipleComputedVuetifyTypeFix = computed(() => {\n if (props.modelValue.multiple === false) return false\n return true as unknown as undefined\n})\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst pagination = usePagination(props.filterSortBy)\nconst fetchedItems = ref<ValueObjectOption<string | number>[]>([])\nconst selectedItemsCache = ref<ValueObjectOption<string | number>[]>([])\n\nconst allItems = computed<ValueObjectOption<DocId | IntegerId>[]>(() => {\n const final = new Map()\n selectedItemsCache.value.forEach((value) => {\n final.set(value.value, { value: value.value, title: value.title, subtitle: value.subtitle })\n })\n fetchedItems.value.forEach((value) => {\n final.set(value.value, { value: value.value, title: value.title, subtitle: value.subtitle })\n })\n return Array.from(final, ([key, value]) => {\n return { value: key, title: value.title, subtitle: value.subtitle }\n })\n})\n\nconst loading = ref(false)\n\nconst apiSearch = async (query: string, requestCounter: number) => {\n loading.value = true\n const filterField = innerFilter.value[props.filterByField]\n filterField.model = query\n const res = await props.fetchItems(pagination, innerFilter.value)\n if (requestCounter === apiRequestCounter.value) fetchedItems.value = res\n loading.value = false\n}\n\nconst findLocalDataByValues = (values: Array<DocId | IntegerId>) => {\n const found = allItems.value.filter((item: ValueObjectOption<string | number>) => values.includes(item.value))\n return ([] as ValueObjectOption<string | number>[]).concat(found)\n}\n\nconst tryToLoadFromLocalData = async (value: string | number | string[] | number[]) => {\n let count = 1\n let foundItems = []\n if (isArray(value)) {\n count = value.length\n foundItems = findLocalDataByValues(value)\n } else {\n foundItems = findLocalDataByValues([value])\n }\n selectedItemsCache.value = foundItems\n return foundItems.length === count\n}\n\nconst autoFetched = ref(false)\nconst clearAutoFetchTimer = () => {\n clearTimeout(autoFetchTimer.value)\n autoFetchTimer.value = undefined\n}\nconst autoFetch = async () => {\n clearAutoFetchTimer()\n if (autoFetched.value === true) return\n autoFetched.value = true\n loading.value = true\n const res = await props.fetchItems(pagination, innerFilter.value)\n if (apiRequestCounter.value === 0) fetchedItems.value = res\n loading.value = false\n}\nconst onFocus = () => {\n isFocused.value = true\n clearAutoFetchTimer()\n autoFetch()\n}\n\nconst singleItemSelectedTitle = computed(() => {\n if (!props.modelValue.multiple && selectedItemsCache.value[0]) {\n return selectedItemsCache.value[0].title\n }\n return undefined\n})\n\nconst onSearchUpdate = (query: string) => {\n if (!props.modelValue.multiple && !isFocused.value && query.length === 0) return // vuetify fix\n if (singleItemSelectedTitle.value === query) return\n search.value = query\n}\n\nconst onClickClear = async () => {\n fetchedItems.value = await props.fetchItems(pagination, innerFilter.value)\n if (props.modelValue.multiple) {\n modelValueComputed.value = []\n return\n }\n modelValueComputed.value = null\n}\n\nconst placeholderComputed = computed(() => {\n if (!isUndefined(props.placeholder)) return props.placeholder\n if (props.modelValue.variant === 'startsWith') return t('common.model.filterPlaceholder.startsWith')\n if (props.modelValue.variant === 'eq') return t('common.model.filterPlaceholder.eq')\n if (props.modelValue.variant === 'contains' || props.modelValue.variant === 'search')\n return t('common.model.filterPlaceholder.contains')\n return ''\n})\n\nwatch(\n modelValueComputed,\n async (newValue, oldValue) => {\n if (newValue === oldValue) return\n if (isNull(newValue) || isUndefined(newValue) || (isArray(newValue) && newValue.length === 0)) {\n selectedItemsCache.value = []\n if (props.disableInitFetch || autoFetched.value === true) return\n autoFetchTimer.value = setTimeout(() => {\n autoFetch()\n }, 3000)\n return\n }\n const found = await tryToLoadFromLocalData(newValue)\n if (found) return\n if (isArray<IntegerId | DocId>(newValue)) {\n loading.value = true\n selectedItemsCache.value = await props.fetchItemsByIds(newValue as Array<IntegerId & DocId>)\n loading.value = false\n return\n }\n loading.value = true\n selectedItemsCache.value = await props.fetchItemsByIds([newValue as DocId & IntegerId])\n loading.value = false\n },\n { immediate: true }\n)\n\nwatchDebounced(\n search,\n (newValue, oldValue) => {\n apiRequestCounter.value++\n if (newValue !== oldValue) {\n apiRequestCounter.value++\n apiSearch(newValue, apiRequestCounter.value)\n }\n },\n { debounce: 300 }\n)\n</script>\n\n<template>\n <VAutocomplete\n v-model=\"modelValueComputed\"\n :items=\"allItems\"\n no-filter\n :placeholder=\"placeholderComputed\"\n :multiple=\"multipleComputedVuetifyTypeFix\"\n :clearable=\"!modelValue.mandatory\"\n :label=\"label\"\n :chips=\"modelValue.multiple\"\n :loading=\"loading\"\n @update:search=\"onSearchUpdate\"\n @blur=\"onBlur\"\n @focus=\"onFocus\"\n @click:clear=\"onClickClear\"\n >\n <template #item=\"{ props: itemProps, item }\">\n <VListItem\n v-bind=\"itemProps\"\n :title=\"item.raw.title\"\n :subtitle=\"item.raw.subtitle\"\n />\n </template>\n </VAutocomplete>\n</template>\n","<script lang=\"ts\" setup>\nimport { watchDebounced } from '@vueuse/core'\nimport { computed, type Ref, ref, toRefs, watch } from 'vue'\nimport type { ValueObjectOption } from '@/types/ValueObject'\nimport type { Pagination } from '@/types/Pagination'\nimport type { Filter, FilterBag } from '@/types/Filter'\nimport { usePagination } from '@/composables/system/pagination'\nimport { cloneDeep, isArray, isNull, isUndefined } from '@/utils/common'\nimport { useI18n } from 'vue-i18n'\nimport type { DocId, IntegerId } from '@/types/common'\n\ntype FetchItemsMinimalByIdsType = ((ids: IntegerId[]) => Promise<any[]>) | ((ids: DocId[]) => Promise<any[]>)\n\ntype FetchItemsMinimalType = (pagination: Pagination, filterBag: FilterBag) => Promise<any[]>\n\nconst props = withDefaults(\n defineProps<{\n modelValue: Filter\n fetchItemsMinimal: FetchItemsMinimalType\n fetchItemsMinimalByIds: FetchItemsMinimalByIdsType\n innerFilter: FilterBag\n filterByField?: string\n filterSortBy?: string | null\n disableInitFetch?: boolean | undefined\n placeholder?: string | undefined\n itemTitle?: string\n itemValue?: string\n }>(),\n {\n filterByField: 'name',\n filterSortBy: 'createdAt',\n disableInitFetch: false,\n placeholder: undefined,\n itemTitle: 'name',\n itemValue: 'id',\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: Filter): void\n}>()\n\nconst modelValueComputed = computed({\n get() {\n return props.modelValue.model\n },\n set(newValue: DocId | IntegerId | DocId[] | IntegerId[] | null) {\n emit('update:modelValue', { ...props.modelValue, ...{ model: cloneDeep(newValue) } })\n },\n})\n\nconst search = ref('')\nconst isFocused = ref(false)\nconst autoFetchTimer: Ref<ReturnType<typeof setTimeout> | undefined> = ref(undefined)\n\nconst apiRequestCounter = ref(0)\n\nconst { t } = useI18n()\n\nconst { innerFilter } = toRefs(props)\n\nconst onBlur = () => {\n isFocused.value = true\n}\n\nconst label = computed(() => {\n return props.modelValue.titleT ? t(props.modelValue.titleT) : undefined\n})\n\nconst multipleComputedVuetifyTypeFix = computed(() => {\n if (props.modelValue.multiple === false) return false\n return true as unknown as undefined\n})\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst pagination = usePagination(props.filterSortBy)\nconst fetchedItems = ref<any[]>([])\nconst selectedItemsCache = ref<any[]>([])\n\nconst allItems = computed<ValueObjectOption<DocId | IntegerId>[]>(() => {\n const final = new Map()\n const finalRaw: Map<IntegerId | DocId, any> = new Map()\n selectedItemsCache.value.forEach((value) => {\n if (value.raw) {\n final.set(value.raw[props.itemValue], value.raw[props.itemTitle])\n finalRaw.set(value.raw[props.itemValue], cloneDeep(value.raw))\n } else {\n final.set(value[props.itemValue], value[props.itemTitle])\n finalRaw.set(value[props.itemValue], cloneDeep(value))\n }\n })\n fetchedItems.value.forEach((value) => {\n if (value.raw) {\n final.set(value.raw[props.itemValue], value.raw[props.itemTitle])\n finalRaw.set(value.raw[props.itemValue], cloneDeep(value.raw))\n } else {\n final.set(value[props.itemValue], value[props.itemTitle])\n finalRaw.set(value[props.itemValue], cloneDeep(value))\n }\n })\n return Array.from(final, ([key, value]) => {\n return { value: key, title: value, raw: finalRaw.get(key) }\n })\n})\n\nconst loading = ref(false)\n\nconst apiSearch = async (query: string, requestCounter: number) => {\n loading.value = true\n const filterField = innerFilter.value[props.filterByField]\n filterField.model = query\n const res = await props.fetchItemsMinimal(pagination, innerFilter.value)\n if (requestCounter === apiRequestCounter.value) fetchedItems.value = res\n loading.value = false\n}\n\nconst findLocalDataByValues = (values: Array<DocId | IntegerId>) => {\n const found = allItems.value.filter((item: ValueObjectOption<string | number>) => values.includes(item.value))\n return ([] as ValueObjectOption<string | number>[]).concat(found)\n}\n\nconst tryToLoadFromLocalData = async (value: string | number | string[] | number[]) => {\n let count = 1\n let foundItems = []\n if (isArray(value)) {\n count = value.length\n foundItems = findLocalDataByValues(value)\n } else {\n foundItems = findLocalDataByValues([value])\n }\n selectedItemsCache.value = foundItems\n return foundItems.length === count\n}\n\nconst autoFetched = ref(false)\nconst clearAutoFetchTimer = () => {\n clearTimeout(autoFetchTimer.value)\n autoFetchTimer.value = undefined\n}\nconst autoFetch = async () => {\n clearAutoFetchTimer()\n if (autoFetched.value === true) return\n autoFetched.value = true\n loading.value = true\n const res = await props.fetchItemsMinimal(pagination, innerFilter.value)\n if (apiRequestCounter.value === 0) fetchedItems.value = res\n loading.value = false\n}\nconst onFocus = () => {\n isFocused.value = true\n clearAutoFetchTimer()\n autoFetch()\n}\n\nconst singleItemSelectedTitle = computed(() => {\n if (!props.modelValue.multiple && selectedItemsCache.value[0]) {\n return selectedItemsCache.value[0].title\n }\n return undefined\n})\n\nconst onSearchUpdate = (query: string) => {\n if (!props.modelValue.multiple && !isFocused.value && query.length === 0) return // vuetify fix\n if (singleItemSelectedTitle.value === query) return\n search.value = query\n}\n\nconst onClickClear = async () => {\n fetchedItems.value = await props.fetchItemsMinimal(pagination, innerFilter.value)\n if (props.modelValue.multiple) {\n modelValueComputed.value = []\n return\n }\n modelValueComputed.value = null\n}\n\nconst placeholderComputed = computed(() => {\n if (!isUndefined(props.placeholder)) return props.placeholder\n if (props.modelValue.variant === 'startsWith') return t('common.model.filterPlaceholder.startsWith')\n if (props.modelValue.variant === 'eq') return t('common.model.filterPlaceholder.eq')\n if (props.modelValue.variant === 'contains' || props.modelValue.variant === 'search')\n return t('common.model.filterPlaceholder.contains')\n return ''\n})\n\nwatch(\n modelValueComputed,\n async (newValue, oldValue) => {\n if (newValue === oldValue) return\n if (isNull(newValue) || isUndefined(newValue) || (isArray(newValue) && newValue.length === 0)) {\n selectedItemsCache.value = []\n if (props.disableInitFetch || autoFetched.value === true) return\n autoFetchTimer.value = setTimeout(() => {\n autoFetch()\n }, 3000)\n return\n }\n const found = await tryToLoadFromLocalData(newValue)\n if (found) return\n if (isArray<IntegerId | DocId>(newValue)) {\n loading.value = true\n selectedItemsCache.value = await props.fetchItemsMinimalByIds(newValue as Array<IntegerId & DocId>)\n loading.value = false\n return\n }\n loading.value = true\n selectedItemsCache.value = await props.fetchItemsMinimalByIds([newValue as DocId & IntegerId])\n loading.value = false\n },\n { immediate: true }\n)\n\nwatchDebounced(\n search,\n (newValue, oldValue) => {\n apiRequestCounter.value++\n if (newValue !== oldValue) {\n apiRequestCounter.value++\n apiSearch(newValue, apiRequestCounter.value)\n }\n },\n { debounce: 300 }\n)\n</script>\n\n<template>\n <VAutocomplete\n v-model=\"modelValueComputed\"\n :items=\"allItems\"\n no-filter\n :placeholder=\"placeholderComputed\"\n :multiple=\"multipleComputedVuetifyTypeFix\"\n :clearable=\"!modelValue.mandatory\"\n :label=\"label\"\n :chips=\"modelValue.multiple\"\n :loading=\"loading\"\n @update:search=\"onSearchUpdate\"\n @blur=\"onBlur\"\n @focus=\"onFocus\"\n @click:clear=\"onClickClear\"\n >\n <!-- @vue-skip -->\n <template #item=\"{ props: itemProps, item: itemItem }\">\n <slot\n name=\"item\"\n :item=\"itemItem\"\n :props=\"itemProps\"\n >\n <VListItem\n v-bind=\"itemProps\"\n :title=\"itemItem.raw.title\"\n :subtitle=\"itemItem.raw.subtitle\"\n />\n </slot>\n </template>\n <!-- @vue-skip -->\n <template #chip=\"{ props: chipProps, item: chipItem }\">\n <slot\n name=\"chip\"\n :props=\"chipProps\"\n :item=\"chipItem\"\n >\n <VChip\n v-bind=\"chipProps\"\n :text=\"chipItem.title\"\n />\n </slot>\n </template>\n </VAutocomplete>\n</template>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport { computed } from 'vue'\n\nimport type { Filter } from '@/types/Filter'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: Filter\n dataCyTrue?: string\n dataCyFalse?: string\n }>(),\n {\n dataCyTrue: 'filter-true',\n dataCyFalse: 'filter-false',\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: any): void\n}>()\n\nconst value = computed({\n get() {\n return props.modelValue.model\n },\n set(newValue) {\n emit('update:modelValue', { ...props.modelValue, ...{ model: newValue } })\n },\n})\n\nconst { t } = useI18n()\n\nconst label = computed(() => {\n return props.modelValue.titleT ? t(props.modelValue.titleT) : undefined\n})\n</script>\n\n<template>\n <div class=\"a-filter-boolean-group d-flex flex-column align-left justify-center mb-2\">\n <VLabel class=\"pr-1\">\n <span>{{ label }}</span>\n </VLabel>\n <VBtnToggle v-model=\"value\">\n <VBtn\n size=\"small\"\n :value=\"true\"\n :data-cy=\"dataCyTrue\"\n :color=\"value === true ? 'secondary' : ''\"\n >\n {{ t('common.model.boolean.true') }}\n </VBtn>\n <VBtn\n size=\"small\"\n :value=\"false\"\n :data-cy=\"dataCyFalse\"\n :color=\"value === false ? 'secondary' : ''\"\n >\n {{ t('common.model.boolean.false') }}\n </VBtn>\n </VBtnToggle>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.a-filter-boolean-group {\n position: relative;\n\n .v-label {\n position: absolute;\n top: -4px;\n left: 0;\n z-index: 2;\n }\n\n .v-btn-group {\n position: relative;\n margin-top: 20px;\n\n .v-btn {\n height: 33px !important;\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport { computed } from 'vue'\nimport type { Filter } from '@/types/Filter'\nimport { isNull, isUndefined } from '@/utils/common'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: Filter\n dataCy?: string\n allT?: string\n trueT?: string\n falseT?: string\n }>(),\n {\n dataCy: 'filter-boolean',\n allT: 'common.model.all',\n trueT: 'common.model.boolean.true',\n falseT: 'common.model.boolean.false',\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: any): void\n}>()\n\nconst value = computed({\n get() {\n if (isUndefined(props.modelValue.model) || isNull(props.modelValue.model)) return -1\n return props.modelValue.model ? 1 : 0\n },\n set(newValue) {\n let returnValue: null | boolean = null\n if (newValue === 1) returnValue = true\n if (newValue === 0) returnValue = false\n emit('update:modelValue', { ...props.modelValue, ...{ model: returnValue } })\n },\n})\n\nconst { t } = useI18n()\n\nconst label = computed(() => {\n return props.modelValue.titleT ? t(props.modelValue.titleT) : undefined\n})\n\nconst items = computed(() => {\n return [\n { value: -1, title: t(props.allT) },\n { value: 1, title: t(props.trueT) },\n { value: 0, title: t(props.falseT) },\n ]\n})\n</script>\n\n<template>\n <VSelect\n v-model=\"value\"\n :data-cy=\"dataCy\"\n :label=\"label\"\n :items=\"items\"\n />\n</template>\n","import { ref } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport type { ValueObjectOption } from '@/types/ValueObject'\n\nexport const JobStatus = {\n Waiting: 'waiting',\n Processing: 'processing',\n AwaitingBatchProcess: 'awaiting_batch_process',\n Done: 'done',\n Error: 'error',\n} as const\nexport type JobStatusType = (typeof JobStatus)[keyof typeof JobStatus]\nexport const JobStatusDefault = JobStatus.Waiting\n\nexport function useJobStatus() {\n const { t } = useI18n()\n\n const jobStatusOptions = ref<ValueObjectOption<JobStatusType>[]>([\n {\n value: JobStatus.Waiting,\n title: t('common.job.status.waiting'),\n color: 'warning',\n },\n {\n value: JobStatus.Processing,\n title: t('common.job.status.processing'),\n color: 'primary',\n },\n {\n value: JobStatus.AwaitingBatchProcess,\n title: t('common.job.status.awaitingBatchProcess'),\n color: 'primary',\n },\n {\n value: JobStatus.Done,\n title: t('common.job.status.done'),\n color: 'success',\n },\n {\n value: JobStatus.Error,\n title: t('common.job.status.error'),\n color: 'error',\n },\n ])\n\n const getJobStatusOption = (value: JobStatusType): ValueObjectOption<JobStatusType> => {\n return jobStatusOptions.value.find((item) => item.value === value) as ValueObjectOption<JobStatusType>\n }\n\n return {\n jobStatusOptions,\n getJobStatusOption,\n }\n}\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { type JobStatusType, useJobStatus } from '@/model/valueObject/JobStatus'\n\nconst props = defineProps<{\n value: JobStatusType\n}>()\n\nconst { getJobStatusOption } = useJobStatus()\nconst option = computed(() => getJobStatusOption(props.value))\n</script>\n\n<template>\n <VChip\n :color=\"option?.color\"\n label\n size=\"small\"\n >\n {{ option?.title }}\n </VChip>\n</template>\n","import type { Immutable } from '@/utils/object'\nimport { objectDeepFreeze } from '@/utils/object'\n\nconst commonConfig = {\n CHIP: {\n CLASS: {\n NO_LINK: 'v-chip-custom-no-link',\n },\n ICON: {\n LINK: 'mdi-arrow-top-right',\n LINK_EXTERNAL: 'mdi-open-in-new',\n },\n },\n}\n\nexport const COMMON_CONFIG: Immutable<typeof commonConfig> = objectDeepFreeze(commonConfig)\n","<script lang=\"ts\" setup>\nimport { computed, shallowRef, watch } from 'vue'\nimport { useRouter } from 'vue-router'\nimport type { DocId, IntegerId } from '@/types/common'\nimport { objectGetValueByPath } from '@/utils/object'\nimport { isNull, isUndefined } from '@/utils/common'\nimport { COMMON_CONFIG } from '@/model/commonConfig'\n\nconst props = withDefaults(\n defineProps<{\n id?: null | undefined | IntegerId | DocId\n title?: string\n containerClass?: undefined | string\n getCachedFn: (id: any) => any\n displayTextPath: string\n route: string\n disableClick?: boolean\n openInNew?: boolean\n size?: string\n forceRounded?: boolean\n textOnly?: boolean\n fallbackIdText?: boolean\n wrapText?: boolean\n closable?: boolean\n customTitleFn?: (\n cachedItem: any,\n defaultTitle: string,\n displayTextPath: string,\n fallbackIdText: boolean\n ) => string | undefined\n }>(),\n {\n id: null,\n title: '',\n containerClass: 'd-inline-flex',\n disableClick: false,\n openInNew: false,\n size: 'small',\n forceRounded: false,\n textOnly: false,\n fallbackIdText: false,\n wrapText: false,\n closable: false,\n customTitleFn: undefined,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'onClose', id: null | undefined | IntegerId | DocId): void\n}>()\n\nconst router = useRouter()\nconst cached = shallowRef<undefined | any>(undefined)\nconst loaded = shallowRef<boolean>(false)\n\nconst item = computed(() => {\n return props.getCachedFn(props.id as any)\n})\n\nconst containerClassComputed = computed(() => {\n return props.wrapText ? props.containerClass + ' a-chip--wrap' : props.containerClass\n})\n\nconst displayTitle = computed(() => {\n if (props.customTitleFn && cached.value) {\n const customTitle = props.customTitleFn(cached.value, props.title, props.displayTextPath, props.fallbackIdText)\n if (customTitle !== undefined) {\n return customTitle\n }\n }\n if (props.title.length > 0) return props.title\n if (cached.value) {\n return objectGetValueByPath(cached.value, props.displayTextPath)\n }\n return props.fallbackIdText ? props.id : ''\n})\n\nconst onClick = () => {\n router.push({ name: props.route, params: { id: props.id } })\n}\n\nwatch(\n item,\n async (newValue) => {\n if (loaded.value) return\n if (isUndefined(newValue) || newValue._loaded === false) return\n cached.value = newValue\n loaded.value = true\n },\n { immediate: true }\n)\n</script>\n\n<template>\n <div :class=\"containerClassComputed\">\n <template v-if=\"isNull(id) || isUndefined(id)\">\n <slot name=\"empty\">\n -\n </slot>\n </template>\n <div v-else-if=\"textOnly\">\n {{ displayTitle }}\n <VProgressCircular\n v-if=\"!loaded && title.length === 0\"\n :size=\"12\"\n :width=\"2\"\n indeterminate\n class=\"mx-1\"\n />\n </div>\n <VChip\n v-else-if=\"disableClick\"\n :size=\"size\"\n :label=\"forceRounded ? undefined : true\"\n :closable=\"closable\"\n @click:close=\"() => emit('onClose', id)\"\n >\n {{ displayTitle }}\n <VProgressCircular\n v-if=\"!loaded && title.length === 0\"\n :size=\"12\"\n :width=\"2\"\n indeterminate\n class=\"mx-1\"\n />\n </VChip>\n <VChip\n v-else\n :size=\"size\"\n :append-icon=\"openInNew ? COMMON_CONFIG.CHIP.ICON.LINK_EXTERNAL : COMMON_CONFIG.CHIP.ICON.LINK\"\n :label=\"forceRounded ? undefined : true\"\n :closable=\"closable\"\n @click.stop=\"onClick\"\n @click:close=\"() => emit('onClose', id)\"\n >\n {{ displayTitle }}\n <VProgressCircular\n v-if=\"!loaded && title.length === 0\"\n :size=\"12\"\n :width=\"2\"\n indeterminate\n class=\"mx-1\"\n />\n </VChip>\n </div>\n</template>\n\n<style lang=\"scss\">\n.a-chip--wrap {\n .v-chip {\n height: auto !important;\n }\n\n .v-chip .v-chip__content {\n max-width: 100%;\n height: auto;\n min-height: 26px;\n white-space: pre-wrap;\n }\n}\n</style>\n","import { ref } from 'vue'\nimport type { ValueObjectOption } from '@/types/ValueObject'\n\nexport const LogLevel = {\n Debug: 'DEBUG',\n Info: 'INFO',\n Notice: 'NOTICE',\n Warning: 'WARNING',\n Error: 'ERROR',\n Critical: 'CRITICAL',\n Alert: 'ALERT',\n Emergency: 'EMERGENCY',\n} as const\nexport type LogLevelType = (typeof LogLevel)[keyof typeof LogLevel]\nexport const LogLevelDefault = LogLevel.Info\n\nexport function useLogLevel() {\n const logLevelOptions = ref<ValueObjectOption<LogLevelType>[]>([\n {\n value: LogLevel.Debug,\n title: LogLevel.Debug,\n color: 'blue-grey lighten-5',\n },\n {\n value: LogLevel.Info,\n title: LogLevel.Info,\n color: 'blue-grey lighten-3',\n },\n {\n value: LogLevel.Notice,\n title: LogLevel.Notice,\n color: 'amber lighten-4',\n },\n {\n value: LogLevel.Warning,\n title: LogLevel.Warning,\n color: 'amber',\n },\n {\n value: LogLevel.Error,\n title: LogLevel.Error,\n color: 'red',\n },\n {\n value: LogLevel.Critical,\n title: LogLevel.Critical,\n color: 'red accent-4',\n },\n {\n value: LogLevel.Alert,\n title: LogLevel.Alert,\n color: 'pink',\n },\n {\n value: LogLevel.Emergency,\n title: LogLevel.Emergency,\n color: 'ping darken-4',\n },\n ])\n\n const getLogLevelOption = (value: LogLevelType) => {\n return logLevelOptions.value.find((item) => item.value === value)\n }\n\n return {\n logLevelOptions,\n getLogLevelOption,\n }\n}\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { type LogLevelType, useLogLevel } from '@/model/valueObject/LogLevel'\n\nconst props = withDefaults(\n defineProps<{\n level: LogLevelType\n }>(),\n {}\n)\n\nconst { getLogLevelOption } = useLogLevel()\nconst levelOption = computed(() => {\n return getLogLevelOption(props.level)\n})\n</script>\n\n<template>\n <VChip\n v-if=\"levelOption\"\n :color=\"levelOption.color\"\n label\n size=\"small\"\n >\n {{ levelOption.title }}\n </VChip>\n</template>\n","export const numberToString = (value: number): string => {\n return '' + value\n}\n","<script lang=\"ts\" setup>\nimport { useClipboard } from '@vueuse/core'\nimport { eventClickBlur } from '@/utils/event'\nimport { isNumber, isString } from '@/utils/common'\nimport { useI18n } from 'vue-i18n'\nimport { useAlerts } from '@/composables/system/alerts'\nimport { numberToString } from '@/utils/number'\nimport { withModifiers } from 'vue'\n\nconst props = withDefaults(\n defineProps<{\n value: number | string\n notifyT?: string\n tooltipT?: string\n dataCy?: string\n }>(),\n {\n notifyT: 'common.alert.textWasCopied',\n tooltipT: 'common.button.copy',\n dataCy: 'copy-text',\n }\n)\n\nconst { copy, isSupported } = useClipboard()\nconst { showSuccess } = useAlerts()\nconst { t } = useI18n()\n\nconst onClick = (event: Event) => {\n eventClickBlur(event)\n if (!isSupported) return\n if (isNumber(props.value)) {\n copy(numberToString(props.value)).then(() => {\n showSuccess(t(props.notifyT))\n })\n } else if (isString(props.value) && props.value.length) {\n copy(props.value).then(() => {\n showSuccess(t(props.notifyT))\n })\n }\n}\n</script>\n\n<template>\n <slot\n name=\"activator\"\n :props=\"{\n onClick: withModifiers((e) => onClick(e), ['stop']),\n disabled: !isSupported,\n }\"\n >\n <div\n :class=\"{ 'cursor-pointer': isSupported }\"\n :data-cy=\"dataCy\"\n class=\"d-inline-flex align-center anzu-copy-text\"\n @click.stop=\"onClick\"\n >\n <span>{{ value }}</span>\n <VIcon\n v-if=\"isSupported\"\n class=\"ml-1\"\n size=\"x-small\"\n icon=\"mdi-content-copy\"\n />\n <VTooltip\n v-if=\"tooltipT\"\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t(tooltipT) }}\n </VTooltip>\n </div>\n </slot>\n</template>\n\n<style lang=\"scss\">\n.anzu-copy-text {\n .v-icon {\n opacity: 0;\n }\n\n &:hover {\n .v-icon {\n opacity: 1;\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { isNull } from '@/utils/common'\n\nwithDefaults(\n defineProps<{\n mainIcon: string\n secondaryIcon?: null | string\n secondaryText?: null | string\n size?: string\n }>(),\n {\n secondaryIcon: null,\n secondaryText: null,\n size: 'default',\n }\n)\n</script>\n\n<template>\n <div\n v-if=\"!isNull(secondaryIcon)\"\n class=\"anzu-icon-group\"\n >\n <VIcon\n :size=\"size\"\n class=\"anzu-icon-group__main-icon\"\n :icon=\"mainIcon\"\n />\n <VIcon\n :size=\"size\"\n class=\"anzu-icon-group__secondary-icon\"\n :icon=\"secondaryIcon\"\n />\n </div>\n <div\n v-else-if=\"!isNull(secondaryText)\"\n class=\"anzu-icon-group\"\n >\n <VIcon\n :size=\"size\"\n class=\"anzu-icon-group__main-icon\"\n :icon=\"mainIcon\"\n />\n <div class=\"anzu-icon-group__secondary-text\">\n {{ secondaryText }}\n </div>\n </div>\n <VIcon\n v-else\n :icon=\"mainIcon\"\n />\n</template>\n\n<style lang=\"scss\">\n// todo: move style values to variables, styled only for small version for now\n.anzu-icon-group {\n position: relative;\n\n &__main-icon {\n position: relative;\n top: -2px;\n left: -2px;\n }\n\n &__secondary-icon {\n position: absolute;\n bottom: -6px;\n right: -6px;\n transform: scaleX(0.6) scaleY(0.6);\n border-radius: 100%;\n }\n\n &__secondary-text {\n padding: 2px;\n font-size: 10px;\n line-height: 13px;\n position: absolute;\n bottom: -4px;\n right: -4px;\n transform: scaleX(0.8) scaleY(0.8);\n border-radius: 100%;\n display: block;\n text-align: center;\n text-transform: uppercase;\n }\n}\n\n.v-theme--light {\n .anzu-icon-group {\n &__secondary-icon {\n background-color: white;\n }\n\n &__secondary-text {\n background-color: rgb(0 0 0 / 60%);\n color: white;\n }\n }\n}\n\n.v-theme--dark {\n .anzu-icon-group {\n &__secondary-icon {\n background-color: #363636;\n }\n\n &__secondary-text {\n background-color: #363636;\n color: white;\n }\n }\n}\n\n.v-btn--disabled.v-btn--icon {\n .anzu-icon-group {\n opacity: 0.45;\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { isUndefined } from '@/utils/common'\n\nconst props = withDefaults(\n defineProps<{\n color?: string | undefined\n size?: string\n dataCy?: string | undefined\n }>(),\n {\n color: undefined,\n size: 'small',\n dataCy: undefined,\n }\n)\n\nconst customColorClass = computed(() => {\n return isUndefined(props.color) ? 'a-chip-no-link--custom-color' : ''\n})\n</script>\n\n<template>\n <VChip\n :color=\"color as string\"\n :data-cy=\"dataCy\"\n class=\"a-chip-no-link\"\n :class=\"customColorClass\"\n label\n :size=\"size as string\"\n >\n <slot />\n </VChip>\n</template>\n","<script setup lang=\"ts\">\nimport { onMounted, onUnmounted, type Ref, ref, watch } from 'vue'\n\nconst props = withDefaults(\n defineProps<{\n label?: string\n seconds?: number\n parentheses?: boolean\n }>(),\n {\n label: '',\n seconds: 60,\n parentheses: false,\n }\n)\nconst emit = defineEmits<{\n (e: 'done'): void\n}>()\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst countdown = ref(props.seconds)\nconst countdownTimer: Ref<ReturnType<typeof setTimeout> | undefined> = ref(undefined)\n\nwatch(\n countdown,\n (newValue) => {\n if (newValue > 0) {\n countdownTimer.value = setTimeout(() => countdown.value--, 1000)\n } else {\n emit('done')\n }\n },\n { immediate: true }\n)\n\nonMounted(() => {\n countdown.value = props.seconds\n})\n\nonUnmounted(() => {\n clearTimeout(countdownTimer.value)\n countdownTimer.value = undefined\n})\n</script>\n\n<template>\n <span>\n <span v-if=\"parentheses\">(</span>\n <span\n v-if=\"label\"\n class=\"font-weight-bold mr-1\"\n >{{ label }}\n </span>\n <span>{{ countdown }}</span>\n <span v-if=\"parentheses\">)</span>\n </span>\n</template>\n","import {\n type CollabAccessRoomCallbackTypes,\n CollabAccessRoomStatus,\n type CollabAccessRoomStatusType,\n type CollabFieldLock,\n type CollabFieldName,\n CollabRequestToJoinStatus,\n type CollabRequestToJoinStatusCallback,\n type CollabRequestToJoinStatusType,\n CollabRequestToTakeModerationStatus,\n type CollabRequestToTakeModerationStatusCallback,\n type CollabRequestToTakeModerationStatusType,\n type CollabRoom,\n type CollabRoomInfo,\n type CollabRoomInfoCallback,\n type CollabRoomOptions,\n type CollabRoomPlainData,\n type CollabRoomsInfo,\n CollabStatus,\n isCollabSuccessAccessRoomCallback,\n} from '@/components/collab/types/Collab'\nimport { computed, ref, watch } from 'vue'\nimport {\n type CollabApprovedJoinRequestEvent,\n type CollabApprovedRequestToTakeModerationEvent,\n type CollabJoinRequestEvent,\n type CollabKickedFromRoomEvent,\n type CollabRejectedJoinRequestEvent,\n type CollabRejectedRequestToTakeModerationEvent,\n type CollabRequestToTakeModerationEvent,\n type CollabStartingEvent,\n useCollabApprovedJoinRequestEventBus,\n useCollabApprovedRequestToTakeModerationEventBus,\n useCollabJoinRequestEventBus,\n useCollabKickedFromRoomEventBus,\n useCollabReconnectEventBus,\n useCollabRejectedJoinRequestEventBus,\n useCollabRejectedRequestToTakeModerationEventBus,\n useCollabRequestToTakeModerationEventBus,\n useCollabStartingEventBus,\n} from '@/components/collab/composables/collabEventBus'\nimport type { Fn, Promisify } from '@vueuse/core'\nimport { tryOnBeforeUnmount } from '@vueuse/core'\nimport { useCollabState } from '@/components/collab/composables/collabState'\nimport { isDefined, isUndefined } from '@/utils/common'\nimport { useCommonAdminCollabOptions } from '@/components/collab/composables/commonAdminCollabOptions'\nimport type { AddToCachedArgs } from '@/composables/system/defineCached'\nimport type { IntegerId } from '@/types/common'\n\nconst alertedOccupiedRooms = ref(new Set<CollabRoom>())\n\nexport function useCollabRoom(\n room: CollabRoom,\n watchForNewUsers: boolean = false,\n addToCachedUsers: ((...args: AddToCachedArgs<IntegerId>) => void) | undefined = undefined,\n fetchCachedUsers: (() => Promisify<Promise<any>>) | undefined = undefined,\n disableAutoUnsubscribe = false\n) {\n const { collabSocket, collabRoomInfoState, collabFieldDataBufferState, collabFieldLocksState } = useCollabState()\n\n const reconnectEventBus = useCollabReconnectEventBus()\n const unsubscribeCollabReconnectListener = ref<undefined | Fn>()\n const reconnectCallback = ref<undefined | Fn>()\n\n const joinRequestEventBus = useCollabJoinRequestEventBus()\n const unsubscribeJoinRequestListener = ref<undefined | Fn>()\n const joinRequestCallback = ref<undefined | ((userId: number, timestamp: number) => void)>()\n\n const approvedJoinRequestEventBus = useCollabApprovedJoinRequestEventBus()\n const unsubscribeApprovedJoinRequestListener = ref<undefined | Fn>()\n const approvedJoinRequestCallback = ref<undefined | Fn>()\n\n const rejectedJoinRequestEventBus = useCollabRejectedJoinRequestEventBus()\n const unsubscribeRejectedJoinRequestListener = ref<undefined | Fn>()\n const rejectedJoinRequestCallback = ref<undefined | Fn>()\n\n const requestToTakeModerationEventBus = useCollabRequestToTakeModerationEventBus()\n const unsubscribeRequestToTakeModerationListener = ref<undefined | Fn>()\n const requestToTakeModerationCallback = ref<undefined | ((userId: number, timestamp: number) => void)>()\n\n const approvedRequestToTakeModerationEventBus = useCollabApprovedRequestToTakeModerationEventBus()\n const unsubscribeApprovedRequestToTakeModerationListener = ref<undefined | Fn>()\n const approvedRequestToTakeModerationCallback = ref<undefined | Fn>()\n\n const rejectedRequestToTakeModerationEventBus = useCollabRejectedRequestToTakeModerationEventBus()\n const unsubscribeRejectedRequestToTakeModerationListener = ref<undefined | Fn>()\n const rejectedRequestToTakeModerationCallback = ref<undefined | Fn>()\n\n const kickedFromRoomEventBus = useCollabKickedFromRoomEventBus()\n const unsubscribeKickedFromRoomListener = ref<undefined | Fn>()\n const kickedFromRoomCallback = ref<undefined | Fn>()\n\n const collabStartingEventBus = useCollabStartingEventBus()\n const unsubscribeCollabStartingListener = ref<undefined | Fn>()\n const collabStartingCallback = ref<undefined | ((startedCallback: (data: CollabRoomPlainData) => void) => void)>()\n\n const reconnectEventBusListener = () => {\n if (isDefined(reconnectCallback.value)) {\n reconnectCallback.value()\n }\n }\n\n const joinRequestEventBusListener = (event: CollabJoinRequestEvent) => {\n if (event.room === room && isDefined(joinRequestCallback.value)) {\n joinRequestCallback.value(event.userId, event.timestamp)\n }\n }\n\n const approvedJoinRequestEventBusListener = (event: CollabApprovedJoinRequestEvent) => {\n if (event.room === room && isDefined(approvedJoinRequestCallback.value)) {\n approvedJoinRequestCallback.value()\n }\n }\n\n const rejectedJoinRequestEventBusListener = (event: CollabRejectedJoinRequestEvent) => {\n if (event.room === room && isDefined(rejectedJoinRequestCallback.value)) {\n rejectedJoinRequestCallback.value()\n }\n }\n\n const requestToTakeModerationEventBusListener = (event: CollabRequestToTakeModerationEvent) => {\n if (event.room === room && isDefined(requestToTakeModerationCallback.value)) {\n requestToTakeModerationCallback.value(event.userId, event.timestamp)\n }\n }\n\n const approvedRequestToTakeModerationEventBusListener = (event: CollabApprovedRequestToTakeModerationEvent) => {\n if (event.room === room && isDefined(approvedRequestToTakeModerationCallback.value)) {\n approvedRequestToTakeModerationCallback.value()\n }\n }\n\n const rejectedRequestToTakeModerationEventBusListener = (event: CollabRejectedRequestToTakeModerationEvent) => {\n if (event.room === room && isDefined(rejectedRequestToTakeModerationCallback.value)) {\n rejectedRequestToTakeModerationCallback.value()\n }\n }\n\n const kickedFromCollabRookEventBusListener = (event: CollabKickedFromRoomEvent) => {\n if (event.room === room && isDefined(kickedFromRoomCallback.value)) {\n kickedFromRoomCallback.value()\n }\n }\n\n const collabStartingEventBusListener = (event: CollabStartingEvent) => {\n if (event.room === room && isDefined(collabStartingCallback.value)) {\n collabStartingCallback.value(event.startedCallback)\n }\n }\n\n const addJoinRequestListener = (callback: (userId: number, timestamp: number) => void) => {\n joinRequestCallback.value = callback\n unsubscribeJoinRequestListener.value = joinRequestEventBus.on(joinRequestEventBusListener)\n }\n\n const addApprovedJoinRequestListener = (callback: () => void) => {\n approvedJoinRequestCallback.value = callback\n unsubscribeApprovedJoinRequestListener.value = approvedJoinRequestEventBus.on(approvedJoinRequestEventBusListener)\n }\n\n const addRejectedJoinRequestListener = (callback: () => void) => {\n rejectedJoinRequestCallback.value = callback\n unsubscribeRejectedJoinRequestListener.value = rejectedJoinRequestEventBus.on(rejectedJoinRequestEventBusListener)\n }\n\n const addRequestToTakeModerationListener = (callback: (userId: number, timestamp: number) => void) => {\n requestToTakeModerationCallback.value = callback\n unsubscribeRequestToTakeModerationListener.value = requestToTakeModerationEventBus.on(\n requestToTakeModerationEventBusListener\n )\n }\n\n const addApprovedRequestToTakeModerationListener = (callback: () => void) => {\n approvedRequestToTakeModerationCallback.value = callback\n unsubscribeApprovedRequestToTakeModerationListener.value = approvedRequestToTakeModerationEventBus.on(\n approvedRequestToTakeModerationEventBusListener\n )\n }\n\n const addRejectedRequestToTakeModerationListener = (callback: () => void) => {\n rejectedRequestToTakeModerationCallback.value = callback\n unsubscribeRejectedRequestToTakeModerationListener.value = rejectedRequestToTakeModerationEventBus.on(\n rejectedRequestToTakeModerationEventBusListener\n )\n }\n\n const addCollabReconnectListener = (callback: () => void) => {\n reconnectCallback.value = callback\n unsubscribeCollabReconnectListener.value = reconnectEventBus.on(reconnectEventBusListener)\n }\n\n const addKickedFromRoomListener = (callback: () => void) => {\n kickedFromRoomCallback.value = callback\n unsubscribeKickedFromRoomListener.value = kickedFromRoomEventBus.on(kickedFromCollabRookEventBusListener)\n }\n\n const addCollabStartingListener = (callback: (startedCallback: (data: CollabRoomPlainData) => void) => void) => {\n collabStartingCallback.value = callback\n unsubscribeCollabStartingListener.value = collabStartingEventBus.on(collabStartingEventBusListener)\n }\n\n tryOnBeforeUnmount(() => {\n if (disableAutoUnsubscribe) return\n if (isDefined(unsubscribeJoinRequestListener.value)) {\n unsubscribeJoinRequestListener.value()\n }\n if (isDefined(unsubscribeApprovedJoinRequestListener.value)) {\n unsubscribeApprovedJoinRequestListener.value()\n }\n if (isDefined(unsubscribeRejectedJoinRequestListener.value)) {\n unsubscribeRejectedJoinRequestListener.value()\n }\n if (isDefined(unsubscribeRequestToTakeModerationListener.value)) {\n unsubscribeRequestToTakeModerationListener.value()\n }\n if (isDefined(unsubscribeApprovedRequestToTakeModerationListener.value)) {\n unsubscribeApprovedRequestToTakeModerationListener.value()\n }\n if (isDefined(unsubscribeRejectedRequestToTakeModerationListener.value)) {\n unsubscribeRejectedRequestToTakeModerationListener.value()\n }\n if (isDefined(unsubscribeKickedFromRoomListener.value)) {\n unsubscribeKickedFromRoomListener.value()\n }\n if (isDefined(unsubscribeCollabStartingListener.value)) {\n unsubscribeCollabStartingListener.value()\n }\n })\n\n const { collabOptions } = useCommonAdminCollabOptions()\n\n const subscribeCollabRoomInfo = () => {\n if (!collabOptions.value.enabled || isUndefined(collabSocket.value)) return\n collabSocket.value.emit('subscribeCollabRoomInfo', room, (response: CollabRoomInfoCallback) => {\n collabRoomInfoState.set(room, response.room)\n })\n }\n\n const unsubscribeCollabRoomInfo = () => {\n if (!collabOptions.value.enabled || isUndefined(collabSocket.value)) return\n collabSocket.value.emit('unsubscribeCollabRoomInfo', room, (response: CollabRoomInfoCallback) => {\n collabRoomInfoState.set(room, response.room)\n })\n }\n\n const joinCollabRoom = async (options: Partial<CollabRoomOptions> = {}): Promise<CollabAccessRoomStatusType> => {\n return new Promise((resolve, reject) => {\n if (!collabOptions.value.enabled || isUndefined(collabSocket.value)) return reject(CollabAccessRoomStatus.Failed)\n collabSocket.value\n ?.timeout(5000)\n .emit('joinCollabRoom', room, options, (error, response: CollabAccessRoomCallbackTypes) => {\n if (error) {\n return void reject(CollabAccessRoomStatus.Failed)\n }\n if (isCollabSuccessAccessRoomCallback(response)) {\n collabRoomInfoState.set(room, response.room)\n return void resolve(response.status)\n }\n return void reject(response.status)\n })\n })\n }\n\n const leaveCollabRoom = () => {\n if (!collabOptions.value.enabled || isUndefined(collabSocket.value)) return\n collabSocket.value.emit('leaveCollabRoom', room, (response: CollabAccessRoomCallbackTypes) => {\n if (isCollabSuccessAccessRoomCallback(response)) {\n collabRoomInfoState.set(room, response.room)\n }\n })\n }\n\n const enteredCollabRoom = () => {\n if (!collabOptions.value.enabled || isUndefined(collabSocket.value)) return\n collabSocket.value?.emit('enteredCollabRoom', room)\n }\n\n const requestToJoinCollabRoom = (): Promise<CollabRequestToJoinStatusType> => {\n return new Promise((resolve, reject) => {\n if (!collabOptions.value.enabled || isUndefined(collabSocket.value)) {\n return reject(CollabRequestToJoinStatus.Failed)\n }\n collabSocket.value\n ?.timeout(2000)\n .emit('requestToJoin', room, new Date().getTime(), (error, response: CollabRequestToJoinStatusCallback) => {\n if (error) {\n return void reject(CollabRequestToJoinStatus.Failed)\n }\n if (response.status === CollabRequestToJoinStatus.Ok) {\n return void resolve(response.status)\n }\n return void reject(response.status)\n })\n })\n }\n\n const approveRequestToJoinCollabRoom = (userId: number) => {\n if (!collabOptions.value.enabled || isUndefined(collabSocket.value)) return\n collabSocket.value.emit('approveRequestToJoin', room, userId)\n }\n\n const rejectRequestToJoinCollabRoom = (userId: number) => {\n if (!collabOptions.value.enabled || isUndefined(collabSocket.value)) return\n collabSocket.value.emit('rejectRequestToJoin', room, userId)\n }\n\n const requestToTakeModeration = async (): Promise<CollabRequestToTakeModerationStatusType> => {\n return new Promise((resolve, reject) => {\n if (!collabOptions.value.enabled || isUndefined(collabSocket.value)) {\n return reject(CollabRequestToTakeModerationStatus.Failed)\n }\n collabSocket.value\n ?.timeout(2000)\n .emit(\n 'requestToTakeModeration',\n room,\n new Date().getTime(),\n (error, response: CollabRequestToTakeModerationStatusCallback) => {\n if (error) {\n return void reject(CollabRequestToTakeModerationStatus.Failed)\n }\n if (response.status === CollabRequestToTakeModerationStatus.Ok) {\n return void resolve(response.status)\n }\n return void reject(response.status)\n }\n )\n })\n }\n\n const approveRequestToTakeModeration = () => {\n if (!collabOptions.value.enabled || isUndefined(collabSocket.value)) return\n collabSocket.value.emit('approveRequestToTakeModeration', room)\n }\n\n const rejectRequestToTakeModeration = () => {\n if (!collabOptions.value.enabled || isUndefined(collabSocket.value)) return\n collabSocket.value.emit('rejectRequestToTakeModeration', room)\n }\n\n const kickUserFromRoom = (userId: number) => {\n if (!collabOptions.value.enabled || isUndefined(collabSocket.value)) return\n collabSocket.value.emit('kickUserFromRoom', room, userId)\n }\n\n const purgeRoom = () => {\n if (!collabOptions.value.enabled || isUndefined(collabSocket.value)) return\n collabSocket.value.emit('purgeRoom', room)\n }\n\n const transferModeration = (userId: number) => {\n if (!collabOptions.value.enabled || isUndefined(collabSocket.value)) return\n collabSocket.value.emit('transferModeration', room, userId)\n }\n\n const createDefaultCollabRoomInfo = (): CollabRoomInfo => ({\n name: '',\n status: CollabStatus.Inactive,\n users: [],\n moderator: null,\n options: {},\n })\n\n const fetchRoomInfo = async (room: CollabRoom): Promise<CollabRoomInfo> => {\n const baseRoomInfo: CollabRoomInfo = createDefaultCollabRoomInfo()\n\n return new Promise((resolve) => {\n if (!collabOptions.value.enabled || isUndefined(collabSocket.value)) return resolve(baseRoomInfo)\n collabSocket.value?.timeout(500).emit('fetchRoomsInfo', [room], (error, response: CollabRoomsInfo) => {\n if (error) return void resolve(baseRoomInfo)\n const roomInfo = response[room]\n if (isUndefined(roomInfo)) resolve(baseRoomInfo)\n if (!isUndefined(addToCachedUsers)) addToCachedUsers(roomInfo.users)\n if (!isUndefined(fetchCachedUsers)) fetchCachedUsers()\n\n return resolve(roomInfo)\n })\n })\n }\n\n const collabRoomInfo = computed((): CollabRoomInfo => {\n return collabRoomInfoState.get(room) ?? createDefaultCollabRoomInfo()\n })\n\n if (watchForNewUsers) {\n watch(\n collabRoomInfo,\n (newValue) => {\n if (newValue.users.length) {\n if (!isUndefined(addToCachedUsers)) addToCachedUsers(newValue.users)\n if (!isUndefined(fetchCachedUsers)) fetchCachedUsers()\n }\n },\n { immediate: true }\n )\n }\n\n const collabRoomLocks = computed((): Map<CollabFieldName, CollabFieldLock> => {\n return collabFieldLocksState.get(room) ?? new Map()\n })\n\n return {\n subscribeCollabRoomInfo,\n unsubscribeCollabRoomInfo,\n joinCollabRoom,\n leaveCollabRoom,\n requestToJoinCollabRoom,\n approveRequestToJoinCollabRoom,\n rejectRequestToJoinCollabRoom,\n addJoinRequestListener,\n addCollabReconnectListener,\n addApprovedJoinRequestListener,\n addRejectedJoinRequestListener,\n requestToTakeModeration,\n approveRequestToTakeModeration,\n rejectRequestToTakeModeration,\n addRequestToTakeModerationListener,\n addApprovedRequestToTakeModerationListener,\n addRejectedRequestToTakeModerationListener,\n enteredCollabRoom,\n kickUserFromRoom,\n purgeRoom,\n transferModeration,\n addKickedFromRoomListener,\n addCollabStartingListener,\n fetchRoomInfo,\n collabRoomInfo,\n collabRoomLocks,\n collabFieldDataBufferState,\n alertedOccupiedRooms,\n unsubscribeJoinRequestListener,\n unsubscribeApprovedJoinRequestListener,\n unsubscribeRejectedJoinRequestListener,\n unsubscribeRequestToTakeModerationListener,\n unsubscribeApprovedRequestToTakeModerationListener,\n unsubscribeRejectedRequestToTakeModerationListener,\n unsubscribeKickedFromRoomListener,\n unsubscribeCollabStartingListener,\n }\n}\n","<script setup lang=\"ts\">\nimport {\n type CollabDelayedRequest,\n CollabRequestToJoinStatus,\n CollabRequestToTakeModerationStatus,\n type CollabRoom,\n CollabStatus,\n type CollabUserId,\n} from '@/components/collab/types/Collab'\nimport { useI18n } from 'vue-i18n'\nimport { computed, type Ref, ref } from 'vue'\nimport ACollabCountdown from '@/components/collab/components/ACollabCountdown.vue'\nimport { useCollabRoom } from '@/components/collab/composables/collabRoom'\nimport { useAlerts } from '@/composables/system/alerts'\nimport { useCollabCurrentUserId } from '@/components/collab/composables/collabCurrentUserId'\nimport type { AddToCachedArgs } from '@/composables/system/defineCached'\nimport type { IntegerId } from '@/types/common'\nimport type { Promisify } from '@vueuse/core'\nimport { isDefined } from '@/utils/common'\nimport ADialogToolbar from '@/components/ADialogToolbar.vue'\nimport ACollabLockedByUser from '@/components/collab/components/ACollabLockedByUser.vue'\nimport type { CollabCachedUsersMap } from '@/components/collab/composables/collabHelpers'\n\nconst props = withDefaults(\n defineProps<{\n collabRoom: CollabRoom\n cachedUsers: CollabCachedUsersMap | Ref<CollabCachedUsersMap>\n isEdit?: boolean\n isAllowedToPurgeRoom?: boolean\n approveRequestBlocked?: boolean\n addToCachedUsers?: ((...args: AddToCachedArgs<IntegerId>) => void) | undefined\n fetchCachedUsers?: (() => Promisify<Promise<any>>) | undefined\n }>(),\n {\n isEdit: false,\n isAllowedToPurgeRoom: false,\n approveRequestBlocked: false,\n addToCachedUsers: undefined,\n fetchCachedUsers: undefined,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'approvedRequestToJoinCollabRoom'): void\n}>()\n\nconst {\n collabRoomInfo,\n addJoinRequestListener,\n requestToJoinCollabRoom,\n approveRequestToJoinCollabRoom,\n rejectRequestToJoinCollabRoom,\n addApprovedJoinRequestListener,\n addRejectedJoinRequestListener,\n requestToTakeModeration,\n approveRequestToTakeModeration,\n rejectRequestToTakeModeration,\n addRequestToTakeModerationListener,\n addApprovedRequestToTakeModerationListener,\n addRejectedRequestToTakeModerationListener,\n kickUserFromRoom,\n purgeRoom,\n transferModeration,\n alertedOccupiedRooms,\n // eslint-disable-next-line vue/no-setup-props-reactivity-loss\n} = useCollabRoom(props.collabRoom)\n\nconst { t } = useI18n()\nconst { showErrorT, showSuccessT } = useAlerts()\n\nconst { currentUserId } = useCollabCurrentUserId()\n\nconst approveRequestsToCollab = ref<CollabDelayedRequest[]>([])\nconst selectedIdsToCollab = ref<CollabUserId[]>([])\nconst collabUserIds = computed<CollabUserId[]>(() => {\n return collabRoomInfo.value.users.filter((userId) => userId !== currentUserId.value)\n})\nconst moderatorManagementDialog = ref(false)\nconst approveRequestTakeModerationDialog = ref(false)\nconst moderationRequest = ref<null | CollabDelayedRequest>(null)\nconst requestToJoinAccepted = ref<boolean | null>(null)\nconst waitingFroApproval = ref(false)\n\naddJoinRequestListener(async (userId: CollabUserId, timestamp: number) => {\n if (isDefined(props.addToCachedUsers)) props.addToCachedUsers(userId)\n if (isDefined(props.fetchCachedUsers)) props.fetchCachedUsers()\n if (!selectedIdsToCollab.value.includes(userId)) selectedIdsToCollab.value.push(userId)\n approveRequestsToCollab.value.push({ userId, timestamp })\n})\n\naddApprovedJoinRequestListener(() => {\n showSuccessT('common.collab.alert.approvedJoinRequest')\n waitingFroApproval.value = false\n requestToJoinAccepted.value = true\n alertedOccupiedRooms.value.delete(props.collabRoom)\n})\n\naddRejectedJoinRequestListener(() => {\n showErrorT('common.collab.alert.rejectedJoinRequest')\n waitingFroApproval.value = false\n requestToJoinAccepted.value = false\n alertedOccupiedRooms.value.delete(props.collabRoom)\n})\n\naddRequestToTakeModerationListener(async (userId: number, timestamp: number) => {\n if (isDefined(props.addToCachedUsers)) props.addToCachedUsers(userId)\n if (isDefined(props.fetchCachedUsers)) props.fetchCachedUsers()\n moderationRequest.value = { userId, timestamp }\n approveRequestTakeModerationDialog.value = true\n})\n\naddApprovedRequestToTakeModerationListener(() => {\n showSuccessT('common.collab.alert.approvedToTakeModeration')\n waitingFroApproval.value = false\n})\n\naddRejectedRequestToTakeModerationListener(() => {\n showErrorT('common.collab.alert.rejectedToTakeModeration')\n waitingFroApproval.value = false\n})\n\nconst waitingForApprovalTimerDone = () => {\n waitingFroApproval.value = false\n}\n\nconst showRequestToJoinCollabButton = computed(() => {\n return (\n requestToJoinAccepted.value === null &&\n collabRoomInfo.value.users.length &&\n !collabRoomInfo.value.users.includes(currentUserId.value ?? 0) &&\n !waitingFroApproval.value\n )\n})\n\nconst showRequestToTakeModerationButton = computed(() => {\n return (\n props.isEdit &&\n collabRoomInfo.value.status === CollabStatus.Active &&\n collabRoomInfo.value.moderator !== currentUserId.value\n )\n})\n\nconst showModeratorManagementDialog = computed(() => {\n return moderatorManagementDialog.value && collabRoomInfo.value.status === CollabStatus.Active\n})\n\nconst showKickYourselfButton = computed(() => {\n return props.isEdit && collabRoomInfo.value.status === CollabStatus.Active\n})\n\nconst showModeratorManagementButton = computed(() => {\n return (\n props.isEdit &&\n collabRoomInfo.value.moderator === currentUserId.value &&\n collabRoomInfo.value.status === CollabStatus.Active\n )\n})\n\nconst showJoinCollaborationDialog = computed(() => {\n return !props.isEdit && alertedOccupiedRooms.value.has(props.collabRoom) && requestToJoinAccepted.value === null\n})\n\nconst collabUsers = computed(() => {\n return collabRoomInfo.value.users.filter((user) => user !== collabRoomInfo.value.moderator)\n})\n\nconst requestToJoinCollabTimerDone = (userId: number) => {\n approveRequestsToCollab.value = approveRequestsToCollab.value.filter((request) => request.userId !== userId)\n selectedIdsToCollab.value = selectedIdsToCollab.value.filter((id) => id !== userId)\n}\n\nconst requestToJoinCollabRoomAction = async () => {\n try {\n await requestToJoinCollabRoom()\n waitingFroApproval.value = true\n } catch (error) {\n if (error === CollabRequestToJoinStatus.AlreadyRequested) {\n return void showErrorT('common.collab.alert.alreadyRequestedToJoin')\n }\n return void showErrorT('common.collab.alert.failedRequestedToJoin')\n }\n}\n\nconst showModeratorManagementDialogAction = () => {\n moderatorManagementDialog.value = true\n}\n\nconst requestToTakeModerationAction = async () => {\n try {\n await requestToTakeModeration()\n waitingFroApproval.value = true\n } catch (error) {\n if (error === CollabRequestToTakeModerationStatus.AlreadyRequested) {\n return void showErrorT('common.collab.alert.alreadyRequestedToTakeModeration')\n }\n return void showErrorT('common.collab.alert.failedRequestToTakeModeration')\n }\n}\n\nconst approveRequestToCollaborate = () => {\n selectedIdsToCollab.value.forEach((selectedId) => {\n approveRequestToJoinCollabRoom(selectedId)\n })\n approveRequestsToCollab.value = approveRequestsToCollab.value.filter(\n (request) => !selectedIdsToCollab.value.includes(request.userId)\n )\n selectedIdsToCollab.value = []\n emit('approvedRequestToJoinCollabRoom')\n}\n\nconst rejectRequestToCollaborate = () => {\n selectedIdsToCollab.value.forEach((selectedId) => {\n rejectRequestToJoinCollabRoom(selectedId)\n })\n approveRequestsToCollab.value = approveRequestsToCollab.value.filter(\n (request) => !selectedIdsToCollab.value.includes(request.userId)\n )\n selectedIdsToCollab.value = []\n}\n\nconst resetRequestToTakeModeration = () => {\n moderationRequest.value = null\n approveRequestTakeModerationDialog.value = false\n}\n\nconst rejectRequestToTakeModerationAction = () => {\n rejectRequestToTakeModeration()\n resetRequestToTakeModeration()\n}\n\nconst approveRequestToTakeModerationAction = () => {\n approveRequestToTakeModeration()\n resetRequestToTakeModeration()\n}\n\nconst transferModerationAction = (userId: CollabUserId) => {\n transferModeration(userId)\n moderatorManagementDialog.value = false\n}\n\nconst kickUserAction = (userId: CollabUserId) => {\n kickUserFromRoom(userId)\n moderatorManagementDialog.value = false\n}\n\nconst purgeRoomAction = () => {\n purgeRoom()\n}\n\nconst kickYourselfAction = () => {\n kickUserFromRoom(currentUserId.value ?? 0)\n}\n\nconst calculateWaitingSeconds = (timestamp: number) => {\n return Math.ceil((60000 - (new Date().getTime() - timestamp)) / 1000)\n}\n</script>\n\n<template>\n <div>\n <ACollabLockedByUser\n v-if=\"collabRoomInfo.moderator\"\n :id=\"collabRoomInfo.moderator\"\n :key=\"collabRoomInfo.moderator\"\n :users=\"cachedUsers\"\n is-moderator\n />\n <VDivider\n class=\"ml-2 mr-1\"\n style=\"height: 16px\"\n vertical\n />\n <ACollabLockedByUser\n v-for=\"userId in collabUsers\"\n :id=\"userId\"\n :key=\"userId\"\n :users=\"cachedUsers\"\n class=\"mx-1\"\n />\n <VDivider\n v-if=\"collabUsers.length > 0\"\n class=\"ml-1 mr-2\"\n style=\"height: 16px\"\n vertical\n />\n <ABtnSecondary\n v-if=\"showRequestToJoinCollabButton\"\n size=\"small\"\n @click=\"requestToJoinCollabRoomAction\"\n >\n {{ t('common.collab.requestToCollaborate') }}\n </ABtnSecondary>\n <VBtn\n v-if=\"waitingFroApproval\"\n size=\"small\"\n variant=\"text\"\n >\n <VIcon\n class=\"mr-1\"\n icon=\"mdi-loading mdi-spin\"\n />\n {{ t('common.collab.waitingForApprove') }}\n <ACollabCountdown\n parentheses\n @done=\"waitingForApprovalTimerDone\"\n />\n </VBtn>\n <ABtnIcon\n v-if=\"showModeratorManagementButton\"\n size=\"small\"\n @click=\"showModeratorManagementDialogAction\"\n >\n <VIcon icon=\"mdi-account-details-outline\" />\n <VTooltip\n anchor=\"bottom\"\n activator=\"parent\"\n :text=\"t('common.collab.moderatorManagement')\"\n />\n </ABtnIcon>\n <VDialog\n v-if=\"approveRequestsToCollab.length\"\n :model-value=\"true\"\n width=\"auto\"\n >\n <VCard v-if=\"approveRequestsToCollab.length\">\n <ADialogToolbar>\n {{ t('common.collab.requestToCollaborateText') }}\n </ADialogToolbar>\n <VCardItem>\n <VList\n v-model:selected=\"selectedIdsToCollab\"\n select-strategy=\"independent\"\n >\n <VListItem\n v-for=\"request in approveRequestsToCollab\"\n :key=\"request.userId\"\n :value=\"request.userId\"\n >\n <template #prepend>\n <ACollabLockedByUser\n :id=\"request.userId\"\n :users=\"cachedUsers\"\n />\n </template>\n <template #title>\n <ACollabCountdown\n class=\"ml-3\"\n :seconds=\"calculateWaitingSeconds(request.timestamp)\"\n :label=\"t('common.collab.approvedAfterCountdown')\"\n @done=\"() => requestToJoinCollabTimerDone(request.userId)\"\n />\n </template>\n <template #append=\"{ isActive, select }\">\n <VCheckboxBtn\n :model-value=\"isActive\"\n color=\"primary\"\n @click=\"() => select(isActive)\"\n />\n </template>\n </VListItem>\n </VList>\n </VCardItem>\n <VCardActions>\n <VSpacer />\n <ABtnTertiary\n :disabled=\"!selectedIdsToCollab.length\"\n @click=\"rejectRequestToCollaborate\"\n >\n {{ t('common.collab.button.reject') }}\n </ABtnTertiary>\n <ABtnPrimary\n :disabled=\"!selectedIdsToCollab.length || approveRequestBlocked\"\n @click.stop=\"approveRequestToCollaborate\"\n >\n {{ t('common.collab.button.accept') }}\n </ABtnPrimary>\n </VCardActions>\n </VCard>\n </VDialog>\n <VDialog\n v-model=\"showModeratorManagementDialog\"\n width=\"auto\"\n >\n <VCard>\n <ADialogToolbar @on-cancel=\"moderatorManagementDialog = false\">\n {{ t('common.collab.moderatorManagement') }}\n </ADialogToolbar>\n <VCardItem>\n <VList>\n <VListItem\n v-for=\"userId in collabUserIds\"\n :key=\"userId\"\n :link=\"false\"\n >\n <template #title>\n <ACollabLockedByUser\n :id=\"userId\"\n :users=\"cachedUsers\"\n />\n </template>\n <template #append>\n <div class=\"ml-3\">\n <ABtnSecondary\n size=\"small\"\n @click=\"transferModerationAction(userId)\"\n >\n {{ t('common.collab.button.transferModeration') }}\n </ABtnSecondary>\n <ABtnTertiary\n size=\"small\"\n @click=\"kickUserAction(userId)\"\n >\n {{ t('common.collab.button.kickUser') }}\n </ABtnTertiary>\n </div>\n </template>\n </VListItem>\n </VList>\n </VCardItem>\n <VCardActions>\n <VSpacer />\n <ABtnTertiary @click=\"moderatorManagementDialog = false\">\n {{ t('common.button.close') }}\n </ABtnTertiary>\n </VCardActions>\n </VCard>\n </VDialog>\n <ABtnIcon\n v-if=\"showRequestToTakeModerationButton\"\n size=\"small\"\n @click=\"requestToTakeModerationAction\"\n >\n <VIcon icon=\"mdi-account-switch\" />\n <VTooltip\n anchor=\"bottom\"\n activator=\"parent\"\n :text=\"t('common.collab.requestToTakeModeration')\"\n />\n </ABtnIcon>\n <ABtnTertiary\n v-if=\"showKickYourselfButton\"\n size=\"small\"\n @click=\"kickYourselfAction\"\n >\n {{ t('common.collab.button.kickYourself') }}\n </ABtnTertiary>\n <VMenu v-if=\"isAllowedToPurgeRoom\">\n <template #activator=\"{ props: moreProps }\">\n <VBtn\n v-tooltip=\"t('common.collab.button.more')\"\n variant=\"text\"\n size=\"small\"\n icon=\"mdi-dots-horizontal\"\n v-bind=\"moreProps\"\n />\n </template>\n <VList>\n <VListItem\n :title=\"t('common.collab.button.purgeCollabRoom')\"\n @click.stop=\"purgeRoomAction\"\n />\n </VList>\n </VMenu>\n <VDialog\n v-if=\"moderationRequest\"\n v-model=\"approveRequestTakeModerationDialog\"\n width=\"auto\"\n >\n <VCard>\n <ADialogToolbar>\n {{ t('common.collab.requestToTakeModerationTextTitle') }}\n </ADialogToolbar>\n <VCardItem>\n <VList>\n <VListItem>\n <template #prepend>\n <ACollabLockedByUser\n :id=\"moderationRequest.userId\"\n :users=\"cachedUsers\"\n />\n </template>\n <template #title>\n <span class=\"ml-1\">{{ t('common.collab.requestToTakeModerationText') }}</span>\n </template>\n </VListItem>\n </VList>\n </VCardItem>\n <VCardActions>\n <VSpacer />\n <ABtnTertiary @click=\"rejectRequestToTakeModerationAction\">\n {{ t('common.collab.button.reject') }}\n </ABtnTertiary>\n <ABtnPrimary\n :disabled=\"approveRequestBlocked\"\n @click.stop=\"approveRequestToTakeModerationAction\"\n >\n {{ t('common.collab.button.accept') }}\n <ACollabCountdown\n parentheses\n :seconds=\"calculateWaitingSeconds(moderationRequest.timestamp)\"\n @done=\"resetRequestToTakeModeration\"\n />\n </ABtnPrimary>\n </VCardActions>\n </VCard>\n </VDialog>\n <VDialog\n v-if=\"showJoinCollaborationDialog\"\n :model-value=\"true\"\n width=\"auto\"\n >\n <VCard>\n <ADialogToolbar @on-cancel=\"alertedOccupiedRooms.delete(props.collabRoom)\">\n {{ t('common.collab.occupiedEntityTitle') }}\n </ADialogToolbar>\n <VCardText>{{ t('common.collab.occupiedEntityText') }}</VCardText>\n <VCardActions>\n <VSpacer />\n <ABtnTertiary @click=\"alertedOccupiedRooms.delete(props.collabRoom)\">\n {{ t('common.button.close') }}\n </ABtnTertiary>\n <ABtnPrimary\n v-if=\"showRequestToJoinCollabButton\"\n @click=\"requestToJoinCollabRoomAction\"\n >\n {{ t('common.collab.requestToCollaborate') }}\n </ABtnPrimary>\n <VBtn\n v-if=\"waitingFroApproval\"\n variant=\"text\"\n >\n <VIcon\n class=\"mr-1\"\n icon=\"mdi-loading mdi-spin\"\n />\n {{ t('common.collab.waitingForApprove') }}\n <ACollabCountdown\n parentheses\n @done=\"waitingForApprovalTimerDone\"\n />\n </VBtn>\n </VCardActions>\n </VCard>\n </VDialog>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport type { AnzuUserAndTimeTrackingAware } from '@/types/AnzuUserAndTimeTrackingAware'\nimport { useI18n } from 'vue-i18n'\nimport ARow from '@/components/ARow.vue'\nimport ADatetime from '@/components/datetime/ADatetime.vue'\n\n// todo add user details, find generic way for all systems\n\nwithDefaults(\n defineProps<{\n data: AnzuUserAndTimeTrackingAware | any\n hideCreatedAt?: boolean\n hideModifiedAt?: boolean\n hideCreatedBy?: boolean\n hideModifiedBy?: boolean\n }>(),\n {\n hideCreatedAt: false,\n hideModifiedAt: false,\n hideCreatedBy: false,\n hideModifiedBy: false,\n }\n)\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <ARow\n v-if=\"!hideCreatedAt\"\n :title=\"t('common.model.tracking.created')\"\n >\n <ADatetime :date-time=\"data.createdAt\" />\n </ARow>\n <ARow\n v-if=\"!hideModifiedAt\"\n :title=\"t('common.model.tracking.modified')\"\n >\n <ADatetime :date-time=\"data.modifiedAt\" />\n </ARow>\n</template>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport { computed } from 'vue'\nimport { isUndefined } from '@/utils/common'\n\nconst props = withDefaults(\n defineProps<{\n routeName?: string\n routeParams?: any | undefined\n buttonT?: string\n buttonClass?: string\n dataCy?: string\n size?: number\n }>(),\n {\n routeName: undefined,\n routeParams: undefined,\n buttonT: 'common.button.close',\n buttonClass: 'ml-2',\n dataCy: 'button-close',\n size: 36,\n }\n)\n\nconst { t } = useI18n()\n\nconst routerToComputed = computed(() => {\n if (isUndefined(props.routeName)) {\n return undefined\n }\n if (!isUndefined(props.routeParams)) {\n return { name: props.routeName, params: { ...props.routeParams } }\n }\n return { name: props.routeName }\n})\n</script>\n\n<template>\n <VBtn\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n :to=\"routerToComputed\"\n icon\n size=\"small\"\n variant=\"text\"\n :width=\"size\"\n :height=\"size\"\n :active=\"false\"\n >\n <VIcon icon=\"mdi-close\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.button.close') }}\n </VTooltip>\n </VBtn>\n</template>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport type { ButtonVariant } from '@/types/commonAdmin'\nimport { computed } from 'vue'\n\nconst props = withDefaults(\n defineProps<{\n routeName: string\n buttonT?: string\n buttonClass?: string\n dataCy?: string\n size?: number\n variant?: ButtonVariant\n }>(),\n {\n buttonT: 'common.button.create',\n buttonClass: 'ml-2',\n dataCy: 'button-create',\n size: 36,\n variant: 'primary',\n }\n)\n\nconst { t } = useI18n()\n\nconst variantComputed = computed(() => {\n switch (props.variant) {\n case 'secondary':\n return 'outlined'\n case 'tertiary':\n case 'icon':\n return 'text'\n default:\n return 'flat'\n }\n})\n</script>\n\n<template>\n <VBtn\n v-if=\"variant === 'icon'\"\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n icon\n size=\"small\"\n :variant=\"variantComputed\"\n :to=\"{ name: routeName }\"\n :width=\"size\"\n :height=\"size\"\n >\n <VIcon icon=\"mdi-content-save\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t(buttonT) }}\n </VTooltip>\n </VBtn>\n <VBtn\n v-else\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n :variant=\"variantComputed\"\n :to=\"{ name: routeName }\"\n color=\"primary\"\n rounded=\"pill\"\n :height=\"size\"\n >\n {{ t(buttonT) }}\n </VBtn>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, ref } from 'vue'\nimport { eventClickBlur } from '@/utils/event'\nimport { useI18n } from 'vue-i18n'\nimport ADialogToolbar from '@/components/ADialogToolbar.vue'\nimport type { ButtonVariant } from '@/types/commonAdmin'\n\nconst props = withDefaults(\n defineProps<{\n variant?: ButtonVariant\n buttonT?: string\n buttonClass?: string\n dialogMessageT?: string\n dialogConfirmButtonT?: string\n dialogCancelButtonT?: string\n dialogConfirmColor?: string\n dialogZIndex?: number\n dialogMaxWidth?: number\n dataCy?: string\n disabled?: boolean\n disableCloseAfterConfirm?: boolean\n loading?: boolean\n color?: string | undefined\n size?: number\n }>(),\n {\n variant: 'icon',\n buttonT: 'common.button.delete',\n buttonClass: 'ml-2',\n dialogMessageT: 'common.system.modal.confirmDelete',\n dialogConfirmButtonT: 'common.button.delete',\n dialogCancelButtonT: 'common.button.cancel',\n dialogConfirmColor: 'primary',\n dialogZIndex: 200,\n dialogMaxWidth: 300,\n dataCy: 'button-delete',\n disabled: false,\n disableCloseAfterConfirm: false,\n color: undefined,\n size: 36,\n }\n)\nconst emit = defineEmits<{\n (e: 'deleteRecord'): void\n}>()\n\nconst dialog = ref(false)\n\nconst onClick = (event: Event) => {\n eventClickBlur(event)\n dialog.value = true\n}\nconst onConfirm = () => {\n emit('deleteRecord')\n if (!props.disableCloseAfterConfirm) closeDialog()\n}\n\nconst closeDialog = () => {\n dialog.value = false\n}\n\nconst onCancel = () => {\n closeDialog()\n}\n\nconst { t } = useI18n()\n\ndefineExpose({\n closeDialog,\n})\n\nconst variantComputed = computed(() => {\n switch (props.variant) {\n case 'secondary':\n return 'outlined'\n case 'tertiary':\n case 'icon':\n return 'text'\n default:\n return 'flat'\n }\n})\n</script>\n\n<template>\n <VBtn\n v-if=\"variant === 'icon'\"\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n icon\n size=\"small\"\n :variant=\"variantComputed\"\n :disabled=\"disabled\"\n :color=\"color\"\n :loading=\"loading\"\n :width=\"size\"\n :height=\"size\"\n @click.stop=\"onClick\"\n >\n <VIcon icon=\"mdi-trash-can-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t(buttonT) }}\n </VTooltip>\n </VBtn>\n <VBtn\n v-else\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n :variant=\"variantComputed\"\n :color=\"color\"\n rounded=\"pill\"\n :height=\"size\"\n @click.stop=\"onClick\"\n >\n {{ t(buttonT) }}\n </VBtn>\n <VDialog\n v-model=\"dialog\"\n persistent\n :width=\"500\"\n no-click-animation\n >\n <VCard\n v-if=\"dialog\"\n data-cy=\"delete-panel\"\n >\n <ADialogToolbar @on-cancel=\"onCancel\">\n {{ t(dialogMessageT) }}\n </ADialogToolbar>\n <VCardActions>\n <VSpacer />\n <ABtnTertiary\n :disabled=\"loading\"\n data-cy=\"button-cancel\"\n @click.stop=\"onCancel\"\n >\n {{ t(dialogCancelButtonT) }}\n </ABtnTertiary>\n <ABtnPrimary\n :color=\"dialogConfirmColor\"\n :loading=\"loading\"\n data-cy=\"button-confirm-delete\"\n @click.stop=\"onConfirm\"\n >\n {{ t(dialogConfirmButtonT) }}\n </ABtnPrimary>\n </VCardActions>\n </VCard>\n </VDialog>\n</template>\n","<script lang=\"ts\" setup>\nimport { useRouter } from 'vue-router'\nimport { eventClickBlur } from '@/utils/event'\nimport { useI18n } from 'vue-i18n'\nimport type { ButtonVariant } from '@/types/commonAdmin'\nimport { computed } from 'vue'\nimport { isUndefined } from '@/utils/common'\n\nconst props = withDefaults(\n defineProps<{\n routeName: string\n recordId?: number | string | undefined\n routeParams?: any | undefined\n buttonT?: string\n buttonClass?: string\n dataCy?: string\n loading?: boolean\n size?: number\n variant?: ButtonVariant\n }>(),\n {\n recordId: undefined,\n routeParams: undefined,\n buttonT: 'common.button.edit',\n buttonClass: 'ml-2',\n dataCy: 'button-edit',\n loading: false,\n size: 36,\n variant: 'primary',\n }\n)\nconst emit = defineEmits<{\n (e: 'editRecord'): void\n}>()\n\nconst { t } = useI18n()\n\nconst router = useRouter()\n\nconst onClick = (event: Event) => {\n eventClickBlur(event)\n emit('editRecord')\n router.push(routerToComputed.value)\n}\n\nconst routerToComputed = computed(() => {\n if (!isUndefined(props.routeParams)) {\n return { name: props.routeName, params: { ...props.routeParams } }\n }\n return { name: props.routeName, params: { id: props.recordId } }\n})\n\nconst variantComputed = computed(() => {\n switch (props.variant) {\n case 'secondary':\n return 'outlined'\n case 'tertiary':\n case 'icon':\n return 'text'\n default:\n return 'flat'\n }\n})\n</script>\n\n<template>\n <VBtn\n v-if=\"variant === 'icon'\"\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n icon\n size=\"small\"\n :variant=\"variantComputed\"\n :loading=\"loading\"\n :width=\"size\"\n :height=\"size\"\n @click.stop=\"onClick\"\n >\n <VIcon icon=\"mdi-content-save\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t(buttonT) }}\n </VTooltip>\n </VBtn>\n <VBtn\n v-else\n :class=\"buttonClass\"\n :variant=\"variantComputed\"\n :data-cy=\"dataCy\"\n :loading=\"loading\"\n color=\"primary\"\n rounded=\"pill\"\n :height=\"size\"\n @click.stop=\"onClick\"\n >\n <span>{{ t(buttonT) }}</span>\n </VBtn>\n</template>\n","<script lang=\"ts\" setup>\nimport { eventClickBlur } from '@/utils/event'\nimport { useI18n } from 'vue-i18n'\nimport AIconGroup from '@/components/AIconGroup.vue'\n\nwithDefaults(\n defineProps<{\n buttonT?: string\n buttonClass?: string\n dataCy?: string\n loading?: boolean\n disabled?: boolean\n }>(),\n {\n buttonT: 'common.button.saveAndClose',\n buttonClass: 'ml-2',\n dataCy: 'button-save-close',\n loading: undefined,\n disabled: undefined,\n }\n)\nconst emit = defineEmits<{\n (e: 'saveRecordAndClose'): void\n}>()\n\nconst onClick = (event: Event) => {\n eventClickBlur(event)\n emit('saveRecordAndClose')\n}\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <VBtn\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n :loading=\"loading\"\n :disabled=\"disabled\"\n color=\"primary\"\n icon=\"\"\n variant=\"outlined\"\n :width=\"36\"\n :height=\"35\"\n @click.stop=\"onClick\"\n >\n <AIconGroup\n main-icon=\"mdi-content-save\"\n secondary-icon=\"mdi-close\"\n />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t(buttonT) }}\n </VTooltip>\n </VBtn>\n</template>\n","<script lang=\"ts\" setup>\nimport { eventClickBlur } from '@/utils/event'\nimport { useI18n } from 'vue-i18n'\nimport { computed } from 'vue'\nimport type { ButtonVariant } from '@/types/commonAdmin'\n\nconst props = withDefaults(\n defineProps<{\n buttonT?: string\n buttonClass?: string\n dataCy?: string\n loading?: boolean\n disabled?: boolean\n size?: number\n variant?: ButtonVariant\n }>(),\n {\n buttonT: 'common.button.save',\n buttonClass: 'ml-2',\n dataCy: 'button-save',\n loading: undefined,\n disabled: undefined,\n size: 36,\n variant: 'primary',\n }\n)\nconst emit = defineEmits<{\n (e: 'saveRecord'): void\n}>()\n\nconst onClick = (event: Event) => {\n eventClickBlur(event)\n emit('saveRecord')\n}\n\nconst { t } = useI18n()\n\nconst variantComputed = computed(() => {\n switch (props.variant) {\n case 'secondary':\n return 'outlined'\n case 'tertiary':\n case 'icon':\n return 'text'\n default:\n return 'flat'\n }\n})\n</script>\n\n<template>\n <VBtn\n v-if=\"variant === 'icon'\"\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n icon\n size=\"small\"\n :variant=\"variantComputed\"\n :loading=\"loading\"\n :disabled=\"disabled\"\n :width=\"size\"\n :height=\"size\"\n @click.stop=\"onClick\"\n >\n <VIcon icon=\"mdi-content-save\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t(buttonT) }}\n </VTooltip>\n </VBtn>\n <VBtn\n v-else\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n :variant=\"variantComputed\"\n color=\"primary\"\n rounded=\"pill\"\n :loading=\"loading\"\n :disabled=\"disabled\"\n :height=\"size\"\n @click.stop=\"onClick\"\n >\n {{ t(buttonT) }}\n </VBtn>\n</template>\n","<script lang=\"ts\" setup>\nimport { useClipboard } from '@vueuse/core'\nimport { eventClickBlur } from '@/utils/event'\nimport { useI18n } from 'vue-i18n'\nimport { isNumber, isString } from '@/utils/common'\nimport { numberToString } from '@/utils/number'\nimport { useAlerts } from '@/composables/system/alerts'\nimport AIconGroup from '@/components/AIconGroup.vue'\n\nconst props = withDefaults(\n defineProps<{\n id: number | string\n buttonT?: string\n buttonClass?: string\n iconT?: string\n notifyT?: string\n dataCy?: string\n size?: 'small' | 'x-small'\n }>(),\n {\n buttonT: 'common.button.copyId',\n buttonClass: 'ml-1',\n iconT: 'common.button.id',\n notifyT: 'common.alert.idWasCopied',\n dataCy: 'table-copy',\n size: 'x-small',\n }\n)\n\nconst { t } = useI18n()\nconst { copy, isSupported } = useClipboard()\nconst { showSuccess } = useAlerts()\n\nconst onClick = (event: Event) => {\n eventClickBlur(event)\n if (isNumber(props.id) && props.id > 0) {\n copy(numberToString(props.id)).then(() => {\n showSuccess(t(props.notifyT))\n })\n } else if (isString(props.id) && props.id.length) {\n copy(props.id).then(() => {\n showSuccess(t(props.notifyT))\n })\n }\n}\n</script>\n\n<template>\n <VBtn\n v-if=\"isSupported\"\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n icon\n :size=\"size\"\n variant=\"text\"\n @click.stop=\"onClick\"\n >\n <AIconGroup\n :secondary-text=\"t(iconT)\"\n main-icon=\"mdi-content-copy\"\n size=\"small\"\n />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t(buttonT) }}\n </VTooltip>\n </VBtn>\n</template>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport { computed } from 'vue'\nimport { isUndefined } from '@/utils/common'\n\nconst props = withDefaults(\n defineProps<{\n routeName: string\n recordId?: number | string | undefined\n routeParams?: any | undefined\n buttonT?: string\n buttonClass?: string\n dataCy?: string\n }>(),\n {\n recordId: undefined,\n routeParams: undefined,\n buttonT: 'common.button.detail',\n buttonClass: 'ml-1',\n dataCy: 'table-detail',\n }\n)\n\nconst { t } = useI18n()\n\nconst routerToComputed = computed(() => {\n if (!isUndefined(props.routeParams)) {\n return { name: props.routeName, params: { ...props.routeParams } }\n }\n return { name: props.routeName, params: { id: props.recordId } }\n})\n</script>\n\n<template>\n <VBtn\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n :to=\"routerToComputed\"\n icon\n :active=\"false\"\n size=\"x-small\"\n variant=\"text\"\n @click.stop=\"() => {}\"\n >\n <VIcon icon=\"mdi-information-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t(buttonT) }}\n </VTooltip>\n </VBtn>\n</template>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport { computed } from 'vue'\nimport { isUndefined } from '@/utils/common'\n\nconst props = withDefaults(\n defineProps<{\n routeName: string\n recordId?: number | string | undefined\n routeParams?: any | undefined\n buttonT?: string\n buttonClass?: string\n dataCy?: string\n }>(),\n {\n recordId: undefined,\n routeParams: undefined,\n buttonT: 'common.button.edit',\n buttonClass: 'ml-1',\n dataCy: 'table-edit',\n }\n)\n\nconst { t } = useI18n()\n\nconst routerToComputed = computed(() => {\n if (!isUndefined(props.routeParams)) {\n return { name: props.routeName, params: { ...props.routeParams } }\n }\n return { name: props.routeName, params: { id: props.recordId } }\n})\n</script>\n\n<template>\n <VBtn\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n :to=\"routerToComputed\"\n icon\n size=\"x-small\"\n variant=\"text\"\n :active=\"false\"\n @click.stop=\"() => {}\"\n >\n <VIcon icon=\"mdi-pencil\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t(buttonT) }}\n </VTooltip>\n </VBtn>\n</template>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport { eventClickBlur } from '@/utils/event'\nimport type { ButtonVariantText } from '@/types/commonAdmin'\nimport { computed } from 'vue'\n\nconst props = withDefaults(\n defineProps<{\n buttonT?: string\n buttonClass?: string\n dataCy?: string\n loading?: boolean\n disabled?: boolean\n disableMore?: boolean\n size?: undefined | 'small' | 'x-small'\n variant?: ButtonVariantText\n rounded?: 'pill' | undefined\n color?: string\n }>(),\n {\n buttonT: '',\n buttonClass: 'ml-2',\n dataCy: 'button-save',\n loading: undefined,\n disabled: undefined,\n disableMore: false,\n size: undefined,\n variant: 'primary',\n rounded: undefined,\n color: 'primary',\n }\n)\nconst emit = defineEmits<{\n (e: 'onClick'): void\n}>()\n\nconst onClick = (event: Event) => {\n eventClickBlur(event)\n emit('onClick')\n}\n\nconst variantComputed = computed(() => {\n switch (props.variant) {\n case 'secondary':\n return 'outlined'\n case 'tertiary':\n return 'text'\n default:\n return 'flat'\n }\n})\n\nconst loadingComputed = computed(() => {\n if (!props.loading) return false\n switch (variantComputed.value) {\n case 'flat':\n return 'white'\n default:\n return 'primary'\n }\n})\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <VBtn\n v-if=\"disableMore\"\n :variant=\"variantComputed\"\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n :color=\"color\"\n :rounded=\"rounded\"\n :size=\"size\"\n :loading=\"loadingComputed\"\n :disabled=\"disabled\"\n @click.stop=\"onClick\"\n >\n <slot name=\"button-content\">\n {{ t(buttonT) }}\n </slot>\n </VBtn>\n <div\n v-else\n class=\"a-button-split d-inline-flex\"\n :class=\"buttonClass + ' a-button-split--' + variant\"\n >\n <VBtn\n class=\"a-button-split__main\"\n :variant=\"variantComputed\"\n :data-cy=\"dataCy\"\n :loading=\"loadingComputed\"\n :disabled=\"disabled\"\n :size=\"size\"\n :rounded=\"rounded\"\n :color=\"color\"\n @click.stop=\"onClick\"\n >\n <slot name=\"button-content\">\n {{ t(buttonT) }}\n </slot>\n </VBtn>\n <div class=\"a-button-split__divider d-inline-flex\" />\n <VDivider\n v-if=\"variant === 'tertiary'\"\n vertical\n class=\"my-2 border-opacity-50\"\n :color=\"color\"\n />\n <VBtn\n :variant=\"variantComputed\"\n :disabled=\"disabled || loading\"\n :data-cy=\"dataCy\"\n :color=\"color\"\n :rounded=\"rounded\"\n :size=\"size\"\n class=\"a-button-split__more\"\n >\n <VIcon icon=\"mdi-chevron-down\" />\n <VMenu\n activator=\"parent\"\n location=\"bottom right\"\n >\n <VList\n density=\"compact\"\n class=\"pa-0\"\n >\n <slot name=\"default\" />\n </VList>\n </VMenu>\n </VBtn>\n </div>\n</template>\n\n<style lang=\"scss\">\n.a-button-split {\n .a-button-split__main {\n border-top-right-radius: 0 !important;\n border-bottom-right-radius: 0 !important;\n padding-right: 10px !important;\n }\n\n .a-button-split__more {\n border-top-left-radius: 0 !important;\n border-bottom-left-radius: 0 !important;\n padding: 0 4px 0 0 !important;\n min-width: 32px !important;\n }\n\n .a-button-split__divider {\n display: inline-block;\n width: 1px;\n }\n\n &--secondary {\n .a-button-split__more {\n left: -2px;\n }\n }\n}\n</style>\n","import { computed, readonly, ref } from 'vue'\nimport { useStorage } from '@vueuse/core'\n\nexport const ThemeSettings = {\n Light: 'light',\n Dark: 'dark',\n Auto: 'auto',\n} as const\nexport type ThemeSettingsType = (typeof ThemeSettings)[keyof typeof ThemeSettings]\n\nexport const Theme = {\n Light: 'light',\n Dark: 'dark',\n} as const\nexport type ThemeType = (typeof Theme)[keyof typeof Theme]\n\nconst storedSettings = useStorage('theme', ThemeSettings.Light)\n\nconst QUERY = '(prefers-color-scheme: dark)'\n\nconst settings = ref<ThemeSettingsType>(\n Object.values(ThemeSettings).some((val) => val === storedSettings.value)\n ? <ThemeSettingsType>storedSettings.value\n : ThemeSettings.Light\n)\nconst theme = ref<ThemeType>(Theme.Light)\nconst systemHasDarkPreference = ref(window.matchMedia && window.matchMedia(QUERY).matches)\n\nconst setTheme = () => {\n switch (settings.value) {\n case ThemeSettings.Auto:\n theme.value = systemHasDarkPreference.value ? Theme.Dark : Theme.Light\n break\n case ThemeSettings.Light:\n theme.value = Theme.Light\n break\n case ThemeSettings.Dark:\n theme.value = Theme.Dark\n break\n }\n}\nsetTheme()\n\nconst setThemeSettings = (value: ThemeSettingsType) => {\n settings.value = value\n storedSettings.value = value\n}\n\nwindow.matchMedia(QUERY).addEventListener('change', (event) => {\n systemHasDarkPreference.value = event.matches\n setTheme()\n})\n\nconst toolbarColor = computed(() => {\n return theme.value === Theme.Light ? 'white' : '#1A1A1A'\n})\n\nexport function useTheme() {\n const setThemeAuto = () => {\n setThemeSettings(ThemeSettings.Auto)\n setTheme()\n }\n\n const setThemeDark = () => {\n setThemeSettings(ThemeSettings.Dark)\n setTheme()\n }\n\n const setThemeLight = () => {\n setThemeSettings(ThemeSettings.Light)\n setTheme()\n }\n\n const toggleTheme = () => {\n switch (settings.value) {\n case ThemeSettings.Light:\n setThemeDark()\n break\n case ThemeSettings.Dark:\n setThemeAuto()\n break\n default:\n setThemeLight()\n break\n }\n }\n\n return {\n settings: readonly(settings),\n theme: readonly(theme),\n toolbarColor: readonly(toolbarColor),\n toggleTheme,\n setThemeAuto,\n setThemeDark,\n setThemeLight,\n }\n}\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport { ref } from 'vue'\nimport { ThemeSettings, useTheme } from '@/composables/themeSettings'\n\nconst { setThemeDark, setThemeAuto, setThemeLight, settings } = useTheme()\n\nconst { t } = useI18n()\n\nconst isOpen = ref(false)\n</script>\n\n<template>\n <VMenu\n v-model=\"isOpen\"\n close-on-content-click\n >\n <template #activator=\"{ props }\">\n <VBtn\n class=\"pl-1\"\n rounded=\"pill\"\n v-bind=\"props\"\n variant=\"text\"\n data-cy=\"settings-theme\"\n >\n <div v-if=\"settings === ThemeSettings.Auto\">\n <VIcon\n class=\"mr-1\"\n icon=\"mdi-brightness-auto\"\n :size=\"32\"\n />{{ t('common.system.theme.auto') }}\n </div>\n <div v-else-if=\"settings === ThemeSettings.Light\">\n <VIcon\n class=\"mr-1\"\n icon=\"mdi-brightness-7\"\n :size=\"32\"\n />{{ t('common.system.theme.light') }}\n </div>\n <div v-else-if=\"settings === ThemeSettings.Dark\">\n <VIcon\n class=\"mr-1\"\n icon=\"mdi-brightness-4\"\n :size=\"32\"\n />{{ t('common.system.theme.dark') }}\n </div>\n </VBtn>\n </template>\n <VCard>\n <VList density=\"compact\">\n <VListItem\n :title=\"t('common.system.theme.auto')\"\n @click.stop=\"setThemeAuto\"\n >\n <template #prepend>\n <VIcon\n class=\"mr-2\"\n icon=\"mdi-brightness-auto\"\n />\n </template>\n </VListItem>\n <VListItem\n :title=\"t('common.system.theme.light')\"\n @click.stop=\"setThemeLight\"\n >\n <template #prepend>\n <VIcon\n class=\"mr-2\"\n icon=\"mdi-brightness-7\"\n />\n </template>\n </VListItem>\n <VListItem\n :title=\"t('common.system.theme.dark')\"\n @click.stop=\"setThemeDark\"\n >\n <template #prepend>\n <VIcon\n class=\"mr-2\"\n icon=\"mdi-brightness-4\"\n />\n </template>\n </VListItem>\n </VList>\n </VCard>\n </VMenu>\n</template>\n","import { useStorage } from '@vueuse/core'\nimport { readonly } from 'vue'\n// import { useLocale } from 'vuetify'\nimport { i18n } from '@/plugins/i18n'\n\n// use ISO 639-1 codes\nexport type LanguageCode = 'en' | 'sk' | 'cs' | 'xx'\n\nexport interface Language {\n code: LanguageCode\n title: string\n adminOnly?: boolean\n}\n\nexport const ALL_LANGUAGES = [\n {\n code: 'en',\n title: 'English',\n },\n {\n code: 'sk',\n title: 'Slovensky',\n },\n {\n code: 'cs',\n title: 'Česky',\n },\n {\n code: 'xx',\n title: 'Translation ID',\n adminOnly: true,\n },\n] as Language[]\n\nconst storedSettings = useStorage<LanguageCode | 'default'>('language', 'default')\n\nexport function modifyLanguageSettings(configAvailableLanguages: LanguageCode[], configDefaultLanguage: LanguageCode) {\n if (storedSettings.value === 'default') storedSettings.value = configDefaultLanguage\n // const { current } = useLocale()\n\n function addMessages(language: LanguageCode, messages: any) {\n if (!i18n || !i18n.global) return\n // @ts-ignore\n i18n.global.setLocaleMessage(language, messages)\n }\n\n const setLanguage = (code: LanguageCode) => {\n if (!i18n || !i18n.global) return false\n if (configAvailableLanguages.includes(code) || code === 'xx') {\n // current.value = code\n storedSettings.value = code\n // @ts-ignore\n i18n.global.locale.value = code\n\n return code\n }\n return false\n }\n\n const initializeLanguage = () => {\n if (!i18n || !i18n.global || storedSettings.value === 'default') return\n if (configAvailableLanguages.includes(storedSettings.value) || storedSettings.value === 'xx') {\n // current.value = storedSettings.value\n // @ts-ignore\n i18n.global.locale.value = storedSettings.value\n return\n }\n storedSettings.value = configDefaultLanguage\n // current.value = configDefaultLanguage\n // @ts-ignore\n i18n.global.locale.value = configDefaultLanguage\n }\n\n return {\n addMessages,\n initializeLanguage,\n currentLanguageCode: readonly(storedSettings),\n setLanguage,\n allLanguages: ALL_LANGUAGES,\n }\n}\n\nexport function useLanguageSettings() {\n return {\n currentLanguageCode: readonly(storedSettings),\n }\n}\n","<script lang=\"ts\" setup>\n/* eslint-disable @stylistic/max-len */\n</script>\n\n<template>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 900 600\"\n >\n <path\n fill=\"#ee1c25\"\n d=\"M0 0h900v600H0z\"\n />\n <path\n fill=\"#0b4ea2\"\n d=\"M0 0h900v400H0z\"\n />\n <path\n fill=\"#fff\"\n d=\"M0 0h900v200H0z\"\n />\n <path\n d=\"M393.479 141H146.358l-.847 8.059c-.184 1.752-4.511 43.971-4.511 136.69 0 43.563 14.726 82 43.77 114.23 20.349 22.585 46.923 41.6 81.242 58.129l3.9 1.881 3.906-1.881c34.32-16.53 60.9-35.544 81.246-58.129 29.044-32.234 43.771-70.667 43.771-114.23 0-92.718-4.328-134.938-4.512-136.69l-.844-8.059z\"\n fill=\"#fff\"\n />\n <path\n d=\"M269.917 450C220.577 426.234 150 379.062 150 285.749S154.461 150 154.461 150h230.915s4.463 42.437 4.463 135.749S319.261 426.234 269.917 450z\"\n fill=\"#ee1c25\"\n />\n <path\n d=\"M280.484 261.284c13.36.216 39.425.739 62.635-7.027 0 0-.613 8.306-.613 17.98s.613 17.982.613 17.982c-21.289-7.125-47.58-7.273-62.635-7.082v51.539h-21.1v-51.539c-15.055-.191-41.345-.043-62.635 7.082 0 0 .613-8.305.613-17.982s-.613-17.98-.613-17.98c23.21 7.766 49.275 7.243 62.635 7.027v-32.368c-12.177-.108-29.723.473-49.563 7.113 0 0 .613-8.305.613-17.982s-.613-17.981-.613-17.981c19.81 6.628 37.336 7.219 49.509 7.114-.626-20.5-6.6-46.332-6.6-46.332s12.289.959 17.2.959 17.2-.959 17.2-.959-5.969 25.835-6.6 46.33c12.174.106 29.7-.485 49.509-7.114 0 0-.613 8.305-.613 17.981s.613 17.982.613 17.982c-19.839-6.639-37.386-7.221-49.563-7.113v32.37z\"\n fill=\"#fff\"\n />\n <path\n d=\"M269.9 329.094c-24.852 0-38.163 34.469-38.163 34.469a30.466 30.466 0 0 0-27.661-16.344c-13.719 0-23.829 12.2-30.256 23.5 24.959 39.7 64.78 64.207 96.079 79.281 31.305-15.075 71.152-39.571 96.112-79.281-6.427-11.3-16.537-23.5-30.256-23.5a30.539 30.539 0 0 0-27.693 16.344s-13.308-34.469-38.162-34.469z\"\n fill=\"#0b4ea2\"\n />\n </svg>\n</template>\n","<template>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n viewBox=\"0 0 7410 3900\"\n >\n <path\n fill=\"#b22234\"\n d=\"M0 0h7410v3900H0z\"\n />\n <path\n d=\"M0 450h7410m0 600H0m0 600h7410m0 600H0m0 600h7410m0 600H0\"\n stroke=\"#fff\"\n stroke-width=\"300\"\n />\n <path\n fill=\"#3c3b6e\"\n d=\"M0 0h2964v2100H0z\"\n />\n <g fill=\"#fff\">\n <g id=\"d\">\n <g id=\"c\">\n <g id=\"e\">\n <g id=\"b\">\n <path\n id=\"a\"\n d=\"M247 90l70.534 217.082-184.66-134.164h228.253L176.466 307.082z\"\n />\n <use\n xlink:href=\"#a\"\n y=\"420\"\n />\n <use\n xlink:href=\"#a\"\n y=\"840\"\n />\n <use\n xlink:href=\"#a\"\n y=\"1260\"\n />\n </g>\n <use\n xlink:href=\"#a\"\n y=\"1680\"\n />\n </g>\n <use\n xlink:href=\"#b\"\n x=\"247\"\n y=\"210\"\n />\n </g>\n <use\n xlink:href=\"#c\"\n x=\"494\"\n />\n </g>\n <use\n xlink:href=\"#d\"\n x=\"988\"\n />\n <use\n xlink:href=\"#c\"\n x=\"1976\"\n />\n <use\n xlink:href=\"#e\"\n x=\"2470\"\n />\n </g>\n </svg>\n</template>\n","<template>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 900 600\"\n >\n <rect\n width=\"900\"\n height=\"600\"\n fill=\"#cccccc\"\n />\n </svg>\n</template>\n","<script setup lang=\"ts\">\nimport type { LanguageCode } from '@/composables/languageSettings'\nimport { computed } from 'vue'\nimport FlagSk from '@/components/flags/FlagSk.vue'\nimport FlagEn from '@/components/flags/FlagEn.vue'\nimport FlagEmpty from '@/components/flags/FlagEmpty.vue'\n\n// flag source: https://github.com/hampusborgos/country-flags\n\nconst props = withDefaults(\n defineProps<{\n code?: LanguageCode | undefined\n dataCy?: string\n }>(),\n {\n code: 'xx',\n dataCy: 'flag-country',\n }\n)\n\nconst currentFlagComponent = computed(() => {\n switch (props.code) {\n case 'sk':\n return FlagSk\n case 'en':\n return FlagEn\n default:\n return FlagEmpty\n }\n})\n</script>\n\n<template>\n <div class=\"flag\">\n <component\n :is=\"currentFlagComponent\"\n :data-cy=\"dataCy\"\n />\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport type { Language, LanguageCode } from '@/composables/languageSettings'\nimport { ALL_LANGUAGES, modifyLanguageSettings, useLanguageSettings } from '@/composables/languageSettings'\nimport { computed, inject } from 'vue'\nimport { isUndefined } from '@/utils/common'\nimport FlagCountry from '@/components/flags/FlagCountry.vue'\nimport { AvailableLanguagesSymbol, DefaultLanguageSymbol } from '@/components/injectionKeys'\n\nconst props = withDefaults(\n defineProps<{\n isAdministrator: boolean\n }>(),\n {}\n)\n\nconst emit = defineEmits<{\n (e: 'afterChange', code: LanguageCode): void\n}>()\n\nconst configAvailableLanguages = inject(AvailableLanguagesSymbol) as LanguageCode[]\nconst configDefaultLanguage = inject(DefaultLanguageSymbol) as LanguageCode\n// @ts-ignore\nconst { setLanguage } = modifyLanguageSettings(configAvailableLanguages, configDefaultLanguage)\nconst { currentLanguageCode } = useLanguageSettings()\n\nconst onLanguageChange = (code: LanguageCode) => {\n const result = setLanguage(code)\n if (result) emit('afterChange', code)\n}\n\nconst currentLocale = computed(() => {\n const found = ALL_LANGUAGES.find((item) => item.code === currentLanguageCode.value)\n if (isUndefined(found)) {\n return ALL_LANGUAGES[0]\n }\n return found as Language\n})\n\nconst availableLocales = computed(() => {\n return ALL_LANGUAGES.filter(\n (item) =>\n (configAvailableLanguages.includes(item.code) || item.code === 'xx') && (!item.adminOnly || props.isAdministrator)\n )\n})\n</script>\n\n<template>\n <VMenu>\n <template #activator=\"{ props: activatorProps }\">\n <VBtn\n class=\"pl-1\"\n rounded=\"pill\"\n v-bind=\"activatorProps\"\n variant=\"text\"\n data-cy=\"settings-language\"\n >\n <VAvatar\n class=\"mr-1\"\n size=\"30\"\n >\n <FlagCountry :code=\"currentLocale?.code\" />\n </VAvatar>\n {{ currentLocale.title }}\n </VBtn>\n </template>\n <VCard>\n <VList density=\"compact\">\n <VListItem\n v-for=\"locale in availableLocales\"\n :key=\"locale.code\"\n @click.stop=\"onLanguageChange(locale.code)\"\n >\n <VListItemTitle>\n <VAvatar\n class=\"mr-1\"\n size=\"30\"\n >\n <FlagCountry :code=\"locale.code\" />\n </VAvatar>\n {{ locale.title }}\n </VListItemTitle>\n </VListItem>\n </VList>\n </VCard>\n </VMenu>\n</template>\n\n<style lang=\"scss\" scoped>\n.flag {\n position: relative;\n width: 30px;\n height: 30px;\n\n :deep(svg) {\n width: 90px;\n height: 60px;\n position: absolute;\n top: -15px;\n left: -27px;\n transform: scale(0.7);\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\n\nconst { t } = useI18n()\n\nconst reloadAdmin = () => {\n window.location.reload()\n}\n</script>\n\n<template>\n <span\n v-once\n class=\"system-bar-new-version\"\n >\n {{ t('common.system.newVersionText') }}\n <span\n class=\"text-decoration-underline cursor-pointer\"\n @click.stop=\"reloadAdmin\"\n >\n {{ t('common.system.newVersionReload') }}\n </span>\n </span>\n</template>\n","export const isAnzuNewVersionFetchError = (error: unknown): error is AnzuNewVersionFetchError => {\n return error instanceof AnzuNewVersionFetchError\n}\n\nexport class AnzuNewVersionFetchError extends Error {\n private originalError: Error | null\n\n constructor(message = '', originalError: Error | null = null) {\n super(message)\n this.name = 'AnzuNewVersionFetchError'\n this.message = message\n this.originalError = originalError\n }\n}\n","import { useDocumentVisibility } from '@vueuse/core'\nimport { computed } from 'vue'\n\nexport function useUserActivity() {\n const visibility = useDocumentVisibility()\n\n const isWindowActive = computed(() => visibility.value === 'visible')\n\n return {\n isWindowActive,\n visibility,\n }\n}\n","import { ref } from 'vue'\n\nconst newVersion = ref(false)\n\nexport function useSystemBar() {\n return {\n newVersion,\n }\n}\n","<script setup lang=\"ts\">\nimport { computed, onBeforeUnmount, ref, watch } from 'vue'\nimport { useIntervalFn } from '@vueuse/core'\nimport ASystemBarNewVersion from '@/components/systemBar/ASystemBarNewVersion.vue'\nimport { isUndefined } from '@/utils/common'\nimport { AnzuNewVersionFetchError, isAnzuNewVersionFetchError } from '@/model/error/AnzuNewVersionFetchError'\nimport { useUserActivity } from '@/composables/useUserActivity'\nimport { useSystemBar } from '@/components/systemBar/systemBar'\n\nconst props = withDefaults(\n defineProps<{\n currentVersion: string\n checkInterval?: number\n jsonRelativePath?: string\n minInactiveTime?: number\n }>(),\n {\n checkInterval: 60000,\n jsonRelativePath: 'config.json',\n minInactiveTime: 5000,\n }\n)\n\nconst showSystemBar = ref<boolean>(false)\nconst abortController = ref<AbortController | null>(null)\nconst lastInactiveTime = ref<number>(0)\n\nconst { newVersion } = useSystemBar()\n\nconst checkNewVersion = async (): Promise<void> => {\n if (abortController.value) {\n abortController.value.abort()\n }\n\n abortController.value = new AbortController()\n\n const isAbortError = (error: unknown): error is Error => {\n return error instanceof Error && error.name === 'AbortError'\n }\n\n try {\n const res = await fetch(`/${props.jsonRelativePath}?random=${Date.now()}`, {\n signal: abortController.value.signal,\n })\n if (res.ok) {\n const contentType = res.headers.get('content-type')\n if (!contentType || !contentType.includes('application/json')) {\n throw new AnzuNewVersionFetchError('Unable to load env config. Incorrect content type.')\n }\n const json = await res.json()\n if (Object.keys(json).length < 1) {\n throw new AnzuNewVersionFetchError('Unable to load env config. Incorrect response body.')\n }\n showSystemBar.value = !isUndefined(json.appVersion) && json.appVersion !== props.currentVersion\n newVersion.value = showSystemBar.value\n\n return\n }\n throw new AnzuNewVersionFetchError('Unable to load env config. Incorrect response code.')\n } catch (error) {\n if (isAbortError(error)) {\n return\n }\n if (isAnzuNewVersionFetchError(error)) {\n throw error\n }\n if (error instanceof SyntaxError) {\n throw new AnzuNewVersionFetchError('Unable to load env config. Syntax error.', error)\n }\n if (error instanceof Error) {\n throw new AnzuNewVersionFetchError('Unable to load env config. ' + error.message, error)\n }\n throw new AnzuNewVersionFetchError('Unable to load env config. Unknown error.', error as any)\n }\n}\n\nconst systemBarComponent = computed(() => {\n return ASystemBarNewVersion\n})\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { pause, resume } = useIntervalFn(() => {\n checkNewVersion()\n}, props.checkInterval)\n\nconst { isWindowActive } = useUserActivity()\n\nconst checkNewVersionWithRetry = (attempt = 1, maxAttempts = 3) => {\n const delay = Math.min(1000 * attempt, 3000) // 1000ms, 2000ms, 3000ms\n\n setTimeout(async () => {\n try {\n await checkNewVersion()\n } catch (error) {\n if (\n error instanceof AnzuNewVersionFetchError &&\n (error.message.includes('Failed to fetch') || error.message.includes('NetworkError')) &&\n attempt < maxAttempts\n ) {\n checkNewVersionWithRetry(attempt + 1, maxAttempts)\n } else {\n console.error('Version check failed:', error)\n }\n }\n }, delay)\n}\n\nwatch(\n isWindowActive,\n (newValue: boolean) => {\n const now: number = Date.now()\n\n if (newValue) {\n const inactiveDuration: number = now - lastInactiveTime.value\n resume()\n if (inactiveDuration > props.minInactiveTime) {\n checkNewVersionWithRetry()\n }\n } else {\n lastInactiveTime.value = now\n pause()\n }\n },\n { immediate: true }\n)\n\nonBeforeUnmount(() => {\n if (abortController.value) {\n abortController.value.abort()\n }\n})\n</script>\n\n<template>\n <VAppBar\n v-if=\"showSystemBar\"\n height=\"48\"\n color=\"orange accent-3\"\n elevation=\"0\"\n :order=\"-1\"\n >\n <div class=\"text-center w-100 text-caption pb-1\">\n <component :is=\"systemBarComponent\" />\n </div>\n </VAppBar>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, ref, watch } from 'vue'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: string\n label?: string\n loading?: boolean\n readonly?: boolean\n required?: boolean\n randomColor?: boolean\n hideLabel?: boolean\n }>(),\n {\n label: '',\n loading: false,\n readonly: false,\n required: false,\n randomColor: false,\n hideLabel: false,\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: string): void\n}>()\n\nconst swatches = [\n ['#F44336', '#E91E63', '#9C27B0', '#673AB7'],\n ['#2196F3', '#03A9F4', '#00BCD4', '#009688'],\n ['#4CAF50', '#8BC34A', '#CDDC39', '#F9A825'],\n ['#FF6F00', '#FF5722', '#795548', '#607D8B'],\n ['#757575', '#000000', '#3F51B5'],\n]\nconst generatedColor = ref('')\n\nconst generateRandomColor = () => {\n const randomRow = Math.floor(Math.random() * swatches.length)\n generatedColor.value = swatches[randomRow][Math.floor(Math.random() * swatches[randomRow].length)]\n return generatedColor.value\n}\n\nconst variantComputed = computed(() => {\n return props.modelValue.length > 0 ? 'flat' : 'tonal'\n})\n\nconst buttonColorComputed = computed(() => {\n return props.modelValue.length > 0 ? props.modelValue : undefined\n})\n\nconst onColorPickerChange = (newColor: string) => {\n emit('update:modelValue', newColor)\n}\n\nwatch(\n () => props.modelValue,\n (newValue, oldValue) => {\n if (newValue === oldValue) return\n if (newValue.length === 7) return\n if (newValue.length !== 7 && props.randomColor) {\n if (generatedColor.value === '') {\n emit('update:modelValue', generateRandomColor())\n return\n }\n emit('update:modelValue', generatedColor.value)\n }\n },\n { immediate: true }\n)\n</script>\n\n<template>\n <div>\n <label\n v-if=\"!hideLabel\"\n class=\"v-label mr-2\"\n >\n {{ label }}\n <span\n v-if=\"required\"\n class=\"required\"\n />\n </label>\n <VBtn\n :variant=\"variantComputed\"\n icon\n :color=\"buttonColorComputed\"\n >\n <VMenu\n v-if=\"!readonly\"\n activator=\"parent\"\n >\n <VCard>\n <VColorPicker\n :model-value=\"buttonColorComputed\"\n :swatches=\"swatches\"\n class=\"a-color-picker--hide-controls\"\n elevation=\"0\"\n hide-canvas\n hide-inputs\n show-swatches\n @update:model-value=\"onColorPickerChange\"\n />\n </VCard>\n </VMenu>\n </VBtn>\n </div>\n</template>\n\n<style lang=\"scss\">\n.a-color-picker--hide-controls .v-color-picker__controls {\n display: none;\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport { ref } from 'vue'\nimport type { AnzuUserMinimal } from '@/types/AnzuUser'\nimport AAnzuUserAvatar from '@/components/AAnzuUserAvatar.vue'\n\nwithDefaults(\n defineProps<{\n currentUser: AnzuUserMinimal | undefined | null\n settingsRouteName: string\n logoutRouteName: string\n dataCy?: string\n }>(),\n {\n dataCy: 'navbar-user',\n }\n)\n\nconst { t } = useI18n()\n\nconst logoutDialog = ref(false)\n</script>\n\n<template>\n <VBtn\n variant=\"text\"\n icon\n size=\"small\"\n :data-cy=\"dataCy\"\n >\n <AAnzuUserAvatar\n :size=\"32\"\n :user=\"currentUser\"\n />\n <VTooltip\n activator=\"parent\"\n location=\"top\"\n >\n {{ t('common.system.currentUser.button') }}\n </VTooltip>\n <VMenu\n v-if=\"currentUser\"\n activator=\"parent\"\n >\n <VCard>\n <VList class=\"pb-0\">\n <VListItem\n class=\"pb-6\"\n lines=\"two\"\n >\n <template #prepend>\n <AAnzuUserAvatar\n :user=\"currentUser\"\n :size=\"40\"\n />\n </template>\n <VListItemTitle>{{ currentUser.person.fullName }}</VListItemTitle>\n <VListItemSubtitle>\n {{ currentUser.email }}<br>\n {{ currentUser.id }}\n </VListItemSubtitle>\n </VListItem>\n <VDivider />\n <VListItem\n :active=\"false\"\n prepend-icon=\"mdi-cog\"\n :to=\"{ name: settingsRouteName }\"\n data-cy=\"navbar-user-settings\"\n >\n {{ t('common.system.currentUser.settings') }}\n </VListItem>\n <VListItem\n prepend-icon=\"mdi-logout\"\n data-cy=\"navbar-user-logout\"\n @click.stop=\"logoutDialog = true\"\n >\n {{ t('common.system.currentUser.logout') }}\n <VDialog\n v-model=\"logoutDialog\"\n width=\"auto\"\n >\n <VCard v-if=\"logoutDialog\">\n <VToolbar\n density=\"compact\"\n color=\"transparent\"\n >\n <VToolbarTitle class=\"flex-fill\">\n {{ t('common.system.currentUser.logout') }}\n </VToolbarTitle>\n <VSpacer />\n <VBtn\n class=\"ml-2\"\n icon=\"mdi-close\"\n size=\"small\"\n variant=\"text\"\n data-cy=\"button-close\"\n @click.stop=\"logoutDialog = false\"\n />\n </VToolbar>\n <VCardText>{{ t('common.system.currentUser.logoutText') }}</VCardText>\n <VCardActions>\n <VSpacer />\n <VBtn\n color=\"secondary\"\n variant=\"text\"\n data-cy=\"button-cancel\"\n @click.stop=\"logoutDialog = false\"\n >\n {{ t('common.button.cancel') }}\n </VBtn>\n <VBtn\n color=\"primary\"\n data-cy=\"button-confirm\"\n :to=\"{ name: logoutRouteName }\"\n >\n {{ t('common.system.currentUser.logoutConfirm') }}\n </VBtn>\n </VCardActions>\n </VCard>\n </VDialog>\n </VListItem>\n </VList>\n </VCard>\n </VMenu>\n </VBtn>\n</template>\n","<script lang=\"ts\" setup>\nimport { watchDebounced } from '@vueuse/core'\nimport { computed, inject, ref, toRefs, watch } from 'vue'\nimport type { ErrorObject } from '@vuelidate/core'\nimport { useI18n } from 'vue-i18n'\nimport type { FilterBag } from '@/types/Filter'\nimport type { Pagination } from '@/types/Pagination'\nimport type { DocId, IntegerId } from '@/types/common'\nimport { cloneDeep, isArray, isNull, isUndefined } from '@/utils/common'\nimport { SubjectScopeSymbol, SystemScopeSymbol } from '@/components/injectionKeys'\nimport { usePagination } from '@/composables/system/pagination'\nimport { stringSplitOnFirstOccurrence } from '@/utils/string'\nimport type { ValueObjectOption } from '@/types/ValueObject'\n\n// type FetchItemsByIdsType =\n// | ((ids: IntegerId[]) => Promise<ValueObjectOption<IntegerId>[]>)\n// | ((ids: DocId[]) => Promise<ValueObjectOption<DocId>[]>)\n\ntype FetchItemsMinimalType = (pagination: Pagination, filterBag: FilterBag) => Promise<any[]>\n\ntype UseCachedType = () => {\n fetch: any\n add: any\n addManualMinimal: any\n}\n\nconst props = withDefaults(\n defineProps<{\n modelValue: any\n label?: string | undefined\n required?: boolean\n multiple?: boolean\n clearable?: boolean\n v?: any\n errorMessage?: string\n hideLabel?: boolean\n fetchItemsMinimal: FetchItemsMinimalType\n innerFilter: FilterBag\n filterByField?: string\n filterSortBy?: string | null\n loading?: boolean\n useCached: UseCachedType\n itemTitle?: string\n itemValue?: string\n minSearchChars?: number\n minSearchText?: string | undefined\n }>(),\n {\n label: undefined,\n required: undefined,\n multiple: false,\n clearable: false,\n v: null,\n errorMessage: undefined,\n hideLabel: false,\n filterByField: 'name',\n filterSortBy: 'createdAt',\n loading: false,\n itemTitle: 'name',\n itemValue: 'id',\n minSearchChars: 2,\n minSearchText: undefined,\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: DocId | IntegerId | DocId[] | IntegerId[] | null | undefined): void\n (e: 'blur', data: DocId | IntegerId | DocId[] | IntegerId[] | null | undefined): void\n (e: 'focus', data: DocId | IntegerId | DocId[] | IntegerId[] | null | undefined): void\n (e: 'searchChange', data: string): void\n (e: 'searchChangeDebounced', data: string): void\n}>()\n\nconst search = defineModel<string>('search', { default: '', required: false })\nconst loadingLocal = defineModel<boolean>('loadingLocal', { default: false, required: false })\nconst fetchedItemsMinimal = defineModel<Map<IntegerId | DocId, any>>('fetchedItemsMinimal', {\n required: true,\n})\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { fetch, add, addManualMinimal } = props.useCached()\n\nconst noDataText = computed(() => {\n if (loadingLocal.value) {\n return '$vuetify.loading'\n }\n if (fetchedItemsMinimal.value.size === 0 && search.value.length < props.minSearchChars) {\n return isUndefined(props.minSearchText)\n ? t('common.filter.filterMinChars', { min: props.minSearchChars })\n : props.minSearchText\n }\n return undefined\n})\n\nconst modelValue = computed({\n get() {\n return props.modelValue\n },\n set(newValue: DocId | IntegerId | DocId[] | IntegerId[] | null | undefined) {\n emit('update:modelValue', cloneDeep<DocId | IntegerId | DocId[] | IntegerId[] | null | undefined>(newValue))\n },\n})\n\nconst { t } = useI18n()\nconst system = inject<string | undefined>(SystemScopeSymbol, undefined)\nconst subject = inject<string | undefined>(SubjectScopeSymbol, undefined)\n\nconst isFocused = ref(false)\nconst { innerFilter } = toRefs(props)\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst pagination = usePagination(props.filterSortBy)\n\nconst onFocus = () => {\n isFocused.value = true\n emit('focus', modelValue.value)\n}\n\nconst onBlur = () => {\n isFocused.value = false\n props.v?.$touch()\n emit('blur', modelValue.value)\n}\n\nconst errorMessageComputed = computed(() => {\n if (!isUndefined(props.errorMessage)) return [props.errorMessage]\n if (props.v?.$errors?.length) return props.v.$errors.map((item: ErrorObject) => item.$message)\n return []\n})\n\nconst labelComputed = computed(() => {\n if (!isUndefined(props.label)) return props.label\n if (isUndefined(system) || isUndefined(subject) || isUndefined(props.v?.$path)) return ''\n const { end: path } = stringSplitOnFirstOccurrence(props.v?.$path, '.')\n return t(system + '.' + subject + '.model.' + path)\n})\n\nconst requiredComputed = computed(() => {\n if (!isUndefined(props.required)) return props.required\n return props.v?.required && props.v?.required.$params.type === 'required'\n})\n\n// const onSearchUpdate = (query: string) => {\n// // if (!props.multiple && !isFocused.value && query.length === 0) return // vuetify fix\n// search.value = query\n// }\n\nconst apiSearch = async (query: string | null) => {\n if (isNull(query) || query.length < props.minSearchChars) {\n fetchedItemsMinimal.value.clear()\n return\n }\n loadingLocal.value = true\n const filterField = innerFilter.value[props.filterByField]\n filterField.model = query\n fetchedItemsMinimal.value.clear()\n const res = await props.fetchItemsMinimal(pagination, innerFilter.value)\n res.forEach((item: any) => {\n fetchedItemsMinimal.value.set(item[props.itemValue], item)\n })\n loadingLocal.value = false\n}\n\nconst allItems = computed<ValueObjectOption<DocId | IntegerId>[]>(() => {\n const final: Map<IntegerId | DocId, string> = new Map()\n const finalRaw: Map<IntegerId | DocId, any> = new Map()\n if (isArray(modelValue.value)) {\n modelValue.value.forEach((value: any) => {\n final.set(value, '')\n })\n } else if (modelValue.value) {\n final.set(modelValue.value, '')\n }\n fetchedItemsMinimal.value.forEach((value) => {\n final.set(value[props.itemValue], value[props.itemTitle])\n finalRaw.set(value[props.itemValue], cloneDeep(value))\n })\n return Array.from(final, ([key, value]) => {\n return { value: key, title: value, raw: finalRaw.get(key) }\n })\n})\n\nconst tryToAddFromFetchedItems = (ids: Set<DocId | IntegerId>) => {\n return new Promise<boolean>((resolve) => {\n fetchedItemsMinimal.value.forEach((value, key) => {\n if (ids.has(key)) {\n addManualMinimal(cloneDeep(value))\n }\n })\n return resolve(true)\n })\n}\n\nconst onClickClear = () => {\n search.value = ''\n apiSearch('')\n if (props.multiple) {\n modelValue.value = []\n return\n }\n modelValue.value = null\n}\n\n// const deleteWasPressedTime = ref(0)\n// const onKeydownDelete = () => {\n// deleteWasPressedTime.value = Date.now()\n// }\n\nwatchDebounced(\n search,\n (newValueBug, oldValueBug) => { // todo rollback fix when fixed on vuetify/vue use side\n const newValue = newValueBug as unknown as string\n const oldValue = oldValueBug as unknown as string | undefined\n if (newValue !== oldValue) {\n apiSearch(newValue)\n emit('searchChangeDebounced', newValue)\n }\n },\n { debounce: 300 }\n)\n\nwatch(search, (newValue, oldValue) => {\n // if (newValue.length === 0 && isFocused.value === true) {\n // const now = Date.now()\n // if (now - deleteWasPressedTime.value > 200) {\n // search.value = oldValue\n // return\n // }\n // }\n if (newValue !== oldValue) {\n emit('searchChange', newValue)\n }\n})\n\nwatch(\n modelValue,\n async (newValue) => {\n if (isNull(newValue) || isUndefined(newValue) || (isArray(newValue) && newValue.length === 0)) {\n return\n }\n const values = isArray(newValue) ? newValue : [newValue]\n const idsToFetch = new Set(values)\n await tryToAddFromFetchedItems(idsToFetch)\n\n if (idsToFetch.size > 0) {\n add(Array.from(idsToFetch) as Array<DocId & IntegerId>)\n fetch()\n }\n },\n { immediate: true }\n)\n</script>\n\n<template>\n <VAutocomplete\n v-model=\"modelValue\"\n v-model:search=\"search\"\n chips\n :items=\"allItems\"\n no-filter\n :multiple=\"multiple\"\n :clearable=\"clearable\"\n :error-messages=\"errorMessageComputed\"\n :loading=\"loadingLocal\"\n :no-data-text=\"noDataText\"\n autocomplete=\"off\"\n @blur=\"onBlur\"\n @focus=\"onFocus\"\n @click:clear=\"onClickClear\"\n >\n <template #label>\n <span\n v-if=\"!hideLabel\"\n :key=\"requiredComputed + ''\"\n >\n {{ labelComputed }}\n <span\n v-if=\"requiredComputed\"\n class=\"required\"\n />\n </span>\n </template>\n <template #append-item>\n <slot name=\"append-item\" />\n </template>\n <template\n v-if=\"!multiple\"\n #selection\n />\n <!-- @vue-skip -->\n <template #chip=\"{ props: chipProps, item: chipItem }\">\n <slot\n name=\"chip\"\n :props=\"chipProps\"\n :item=\"chipItem\"\n >\n <VChip\n v-bind=\"chipProps\"\n :text=\"chipItem.title\"\n />\n </slot>\n </template>\n <!-- @vue-skip -->\n <template #item=\"{ props: itemProps, item: itemItem }\">\n <slot\n name=\"item\"\n :props=\"itemProps\"\n :item=\"itemItem\"\n >\n <VListItem :props=\"itemProps\" />\n </slot>\n </template>\n </VAutocomplete>\n</template>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\n\nwithDefaults(\n defineProps<{\n title?: string | undefined\n logoUrl?: string | undefined\n loginUrl?: undefined | (() => string)\n dataCy?: string\n }>(),\n {\n title: undefined,\n logoUrl: undefined,\n loginUrl: undefined,\n dataCy: 'button-login',\n }\n)\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <div class=\"d-flex justify-center align-center fill-height\">\n <div class=\"d-flex justify-center align-center flex-column\">\n <img\n :src=\"logoUrl\"\n class=\"logo pb-2\"\n alt=\"\"\n >\n <h1\n v-if=\"title\"\n class=\"display-1 my-3\"\n >\n {{ title }}\n </h1>\n <h4 class=\"mb-3 body-1\">\n <span>{{ t('common.system.login.text') }}</span>\n </h4>\n <div class=\"py-5\">\n <VBtn\n v-if=\"loginUrl\"\n :data-cy=\"dataCy\"\n :href=\"loginUrl()\"\n color=\"primary\"\n size=\"large\"\n >\n {{ t('common.system.login.text') }}\n </VBtn>\n </div>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.logo {\n display: block;\n max-width: 120px;\n height: auto;\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { onMounted } from 'vue'\n\nconst props = withDefaults(\n defineProps<{\n logoutUrl?: undefined | (() => string)\n }>(),\n {\n logoutUrl: undefined,\n }\n)\n\nonMounted(() => {\n if (!props.logoutUrl) return\n window.location.href = props.logoutUrl()\n})\n</script>\n\n<template>\n <div />\n</template>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\n\nwithDefaults(\n defineProps<{\n returnRouteName: string\n }>(),\n {}\n)\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <div class=\"d-flex justify-center align-center fill-height\">\n <div class=\"d-flex flex-column align-center\">\n <h1 class=\"d-flex justify-center align-center text-primary\">\n <VIcon\n size=\"x-large\"\n icon=\"mdi-emoticon-cry\"\n />\n <span>{{ t('common.system.unauthorized.title') }}</span>\n </h1>\n\n <p class=\"pa-4\">\n {{ t('common.system.unauthorized.text') }}\n </p>\n\n <VBtn\n :to=\"{ name: returnRouteName }\"\n color=\"primary\"\n size=\"large\"\n >\n {{ t('common.system.unauthorized.backButton') }}\n </VBtn>\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\n\nwithDefaults(\n defineProps<{\n returnRouteName: string\n }>(),\n {}\n)\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <div class=\"d-flex justify-center align-center fill-height\">\n <div class=\"d-flex flex-column align-center\">\n <h1 class=\"d-flex justify-center align-center text-primary\">\n <VIcon\n size=\"x-large\"\n icon=\"mdi-emoticon-cry\"\n />\n <span>{{ t('common.system.notFound.title') }}</span>\n </h1>\n\n <p class=\"pa-4\">\n {{ t('common.system.notFound.text') }}\n </p>\n\n <VBtn\n :to=\"{ name: returnRouteName }\"\n color=\"primary\"\n size=\"large\"\n >\n {{ t('common.system.notFound.backButton') }}\n </VBtn>\n </div>\n </div>\n</template>\n","import { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { objectGetValueByPath } from '@/lib'\n\nexport const useJobPriority = () => {\n const { t } = useI18n()\n const priorityLabels = computed(() => {\n return {\n 0: t('common.job.meta.priority.low'),\n 1: t('common.job.meta.priority.medium'),\n 2: t('common.job.meta.priority.high'),\n }\n })\n\n const getPriorityColor = (priority: number): string => {\n switch (priority) {\n case 0:\n return 'amber'\n case 1:\n return 'primary'\n case 2:\n return 'red'\n default:\n return 'default'\n }\n }\n\n const getPriorityLabel = (priority: number): string => {\n return objectGetValueByPath(priorityLabels.value, priority.toString()) ?? priority.toString()\n }\n\n return {\n priorityLabels,\n getPriorityColor,\n getPriorityLabel,\n }\n}\n","<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { useJobPriority } from '@/components/job/composables/jobPriority'\nimport AChipNoLink from '@/components/AChipNoLink.vue'\n\nconst props = defineProps<{\n priority: number\n}>()\nconst { getPriorityLabel, getPriorityColor } = useJobPriority()\nconst priorityColor = computed(() => {\n return getPriorityColor(props.priority)\n})\nconst priorityLabel = computed(() => {\n return getPriorityLabel(props.priority)\n})\n</script>\n\n<template>\n <AChipNoLink :color=\"priorityColor\">\n {{ priorityLabel }}\n </AChipNoLink>\n</template>\n","<script lang=\"ts\" setup>\nimport type { JobBase } from '@/types/Job'\nimport { useI18n } from 'vue-i18n'\nimport ARow from '@/components/ARow.vue'\nimport AJobStatusChip from '@/components/job/AJobStatusChip.vue'\nimport AJobPriorityChip from '@/components/job/AJobPriorityChip.vue'\nimport ADatetime from '@/components/datetime/ADatetime.vue'\n\nwithDefaults(\n defineProps<{\n job: JobBase\n loading?: boolean\n }>(),\n {\n loading: false,\n }\n)\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <div>\n <ARow\n :title=\"t('common.job.model.id')\"\n :value=\"job.id\"\n />\n <ARow :title=\"t('common.job.model._resourceName')\">\n <slot name=\"resource-name\">\n {{ job._resourceName }}\n </slot>\n </ARow>\n <ARow :title=\"t('common.job.model.status')\">\n <AJobStatusChip :value=\"job.status\" />\n </ARow>\n <ARow :title=\"t('common.job.model.priority')\">\n <AJobPriorityChip :priority=\"job.priority\" />\n </ARow>\n <ARow :title=\"t('common.job.model.scheduledAt')\">\n <ADatetime :date-time=\"job.scheduledAt\" />\n </ARow>\n <ARow :title=\"t('common.job.model.startedAt')\">\n <ADatetime :date-time=\"job.startedAt\" />\n </ARow>\n <ARow :title=\"t('common.job.model.finishedAt')\">\n <ADatetime :date-time=\"job.finishedAt\" />\n </ARow>\n <ARow\n :title=\"t('common.job.model.result')\"\n :value=\"job.result\"\n />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport type { JobBase } from '@/types/Job'\nimport { useJobPriority } from '@/components/job/composables/jobPriority'\nimport ARow from '@/components/ARow.vue'\nimport AFormDatetimePicker from '@/components/form/AFormDatetimePicker.vue'\nimport { useI18n } from 'vue-i18n'\n\nconst modelValue = defineModel<JobBase>({ required: true })\nconst { priorityLabels, getPriorityColor } = useJobPriority()\nconst sliderColor = computed(() => {\n return getPriorityColor(modelValue.value.priority)\n})\nconst { t } = useI18n()\n</script>\n\n<template>\n <ARow>\n <AFormDatetimePicker\n v-model=\"modelValue.scheduledAt\"\n :label=\"t('common.job.model.scheduledAt')\"\n />\n </ARow>\n <ARow>\n <VSlider\n v-model=\"modelValue.priority\"\n :ticks=\"priorityLabels\"\n :max=\"2\"\n step=\"1\"\n show-ticks=\"always\"\n tick-size=\"3\"\n :color=\"sliderColor\"\n />\n </ARow>\n</template>\n","import type { DocId, DocIdNullable, IntegerId } from '@/types/common'\nimport type { AnzuUserAndTimeTrackingAware } from '@/types/AnzuUserAndTimeTrackingAware'\nimport type { ResourceNameSystemAware } from '@/types/ResourceNameSystemAware'\nimport type { AssetFile } from '@/types/coreDam/AssetFile'\n\ninterface Texts {\n displayTitle: string\n}\n\nexport type DamDistributionServiceName = string\n\nexport const DamAssetStatus = {\n Draft: 'draft',\n WithFile: 'with_file',\n Deleting: 'deleting',\n} as const\nexport type DamAssetStatusType = (typeof DamAssetStatus)[keyof typeof DamAssetStatus]\nexport const DamAssetStatusDefault = DamAssetStatus.Draft\n\nexport const DamAssetType = {\n Image: 'image',\n Audio: 'audio',\n Video: 'video',\n Document: 'document',\n} as const\nexport type DamAssetTypeType = (typeof DamAssetType)[keyof typeof DamAssetType]\nexport const DamAssetTypeDefault = DamAssetType.Image\n\ninterface Attributes {\n assetType: DamAssetTypeType\n assetStatus: DamAssetStatusType\n}\n\nexport interface AssetFileProperties {\n distributesInServices: DamDistributionServiceName[]\n slotNames: string[]\n fromRss: boolean\n width: number\n height: number\n}\n\ninterface Flags {\n described: boolean\n visible: boolean\n}\n\nexport interface AssetMetadataSuggestions extends Record<string, Array<string>> {}\n\nexport type AssetCustomData = Record<string, any>\n\ninterface Metadata {\n authorSuggestions: AssetMetadataSuggestions\n keywordSuggestions: AssetMetadataSuggestions\n customData: any\n}\n\nexport interface AssetSearchListItemDto extends AnzuUserAndTimeTrackingAware, ResourceNameSystemAware {\n id: DocId\n texts: Texts\n attributes: Attributes\n flags: Flags\n licence: IntegerId\n mainFile: null | AssetFile\n podcasts: DocId[]\n assetFileProperties: AssetFileProperties\n mainFileSingleUse: Readonly<boolean | null>\n}\n\nexport interface AssetDetailItemDto extends AnzuUserAndTimeTrackingAware, ResourceNameSystemAware {\n id: DocId\n texts: Texts\n attributes: Attributes\n flags: Flags\n licence: IntegerId\n mainFile: null | AssetFile\n keywords: DocId[]\n authors: DocId[]\n podcasts: DocId[]\n metadata: Metadata\n siblingToAsset: DocIdNullable\n distributionCategory: DocIdNullable\n assetFileProperties: AssetFileProperties\n mainFileSingleUse: Readonly<boolean | null>\n}\n\nexport interface AssetMetadataDto extends AnzuUserAndTimeTrackingAware, ResourceNameSystemAware, Metadata {\n id: DocId\n customData: AssetCustomData\n}\n\nexport type AssetExternalProviderId = string | number\nexport type AssetExternalProviderIdNullable = AssetExternalProviderId | null\n\nexport type AssetExternalProviderMetadata = Record<string, string | number | number[] | string[] | boolean>\n\nexport interface DamImageCopyToLicenceRequestItem {\n asset: DocId\n targetAssetLicence: IntegerId\n}\n\nexport type DamImageCopyToLicenceRequest = Array<DamImageCopyToLicenceRequestItem>\n\nexport interface DamImageCopyToLicenceResponseItem {\n asset: DocId\n targetAsset: DocId\n targetMainFile: DocId\n targetAssetLicence: IntegerId\n result: 'exists' | 'copy' | 'notAllowed' | 'unassigned'\n assetConflicts: DocId[]\n}\n\nexport type DamImageCopyToLicenceResponse = Array<DamImageCopyToLicenceResponseItem>\n","import type { DamAssetLicence } from '@/types/coreDam/AssetLicence'\nimport { apiFetchOne } from '@/services/api/apiFetchOne'\nimport type { AxiosInstance } from 'axios'\nimport type { IntegerId } from '@/types/common'\n\nconst END_POINT = '/adm/v1/asset-licence'\n\nexport const fetchDamAssetLicence = (client: () => AxiosInstance, id: IntegerId) =>\n apiFetchOne<DamAssetLicence>(client, END_POINT + '/:id', { id }, 'coreDam', 'assetLicence')\n","import type { AxiosInstance } from 'axios'\nimport type { IntegerId } from '@/types/common'\nimport type { DamAssetTypeType, DamDistributionServiceName } from '@/types/coreDam/Asset'\nimport type { CustomDataFormElement } from '@/components/customDataForm/CustomDataForm'\nimport { apiFetchOne } from '@/services/api/apiFetchOne'\n\nimport { SYSTEM_CORE_DAM } from '@/components/damImage/uploadQueue/api/damAssetApi'\n\nconst END_POINT = '/adm/v1/asset-custom-form'\nconst ENTITY = 'assetCustomForm'\n\n// todo limit set to 100 for now, add load for pagination?\nexport const fetchAssetCustomFormElements = (\n damClient: () => AxiosInstance,\n extSystem: IntegerId,\n assetType: DamAssetTypeType\n) =>\n apiFetchOne<{ data: CustomDataFormElement[] }>(\n damClient,\n END_POINT + '/ext-system/:extSystem/type/:assetType/element?order[position]=asc&limit=100',\n { extSystem, assetType },\n SYSTEM_CORE_DAM,\n ENTITY\n )\n\n// todo limit set to 100 for now, add load for pagination?\nexport const fetchDistributionCustomFormElements = (\n damClient: () => AxiosInstance,\n distributionService: DamDistributionServiceName\n) =>\n apiFetchOne<{ data: CustomDataFormElement[] }>(\n damClient,\n END_POINT + '/distribution-service/:distributionService/element?order[position]=asc&limit=100',\n { distributionService },\n SYSTEM_CORE_DAM,\n ENTITY\n )\n","import type { DamExtSystemConfig, DamPrvConfig, DamPubConfig } from '@/types/coreDam/DamConfig'\nimport type { AxiosInstance } from 'axios'\nimport { apiFetchOne } from '@/services/api/apiFetchOne'\nimport type { IntegerId } from '@/types/common'\nimport { SYSTEM_CORE_DAM } from '@/components/damImage/uploadQueue/api/damAssetApi'\n\nconst END_POINT = '/adm/v1/configuration'\nconst PUB_END_POINT_PREFIX = '/pub'\nconst PUB_END_POINT = PUB_END_POINT_PREFIX + '/v1/configuration'\nconst ENTITY = 'settings'\n\nexport const fetchPubConfiguration = (damClient: () => AxiosInstance) =>\n apiFetchOne<DamPubConfig>(damClient, PUB_END_POINT, {}, SYSTEM_CORE_DAM, ENTITY)\n\nexport const fetchConfiguration = (damClient: () => AxiosInstance) =>\n apiFetchOne<DamPrvConfig>(damClient, END_POINT, {}, SYSTEM_CORE_DAM, ENTITY)\n\nexport const fetchExtSystemConfiguration = (extSystem: IntegerId, damClient: () => AxiosInstance) =>\n apiFetchOne<DamExtSystemConfig>(damClient, END_POINT + '/ext-system/' + extSystem, {}, SYSTEM_CORE_DAM, ENTITY)\n","import type { DamAssetTypeType, DamDistributionServiceName } from '@/types/coreDam/Asset'\nimport type { IntegerId } from '@/types/common'\n\nexport interface DamPrvConfig {\n assetExternalProviders: {\n [key: string]: { title: string }\n }\n distributionServices: {\n [key: string]: {\n title: string\n iconPath: string\n type: DamDistributionServiceTypeType\n allowedRedistributeStatuses: Array<DamDistributionStatusType>\n }\n }\n colorSet: {\n [key: string]: string\n }\n settings: {\n aclCheckEnabled: boolean\n adminAllowListName: string\n allowSelectExtSystem: boolean\n allowSelectLicenceId: boolean\n defaultAssetLicenceId: number\n defaultExtSystemId: number\n imageChunkConfig: {\n minSize: number\n maxSize: number\n }\n maxBulkItemCount: number\n }\n}\n\nexport interface DamExtSystemConfig extends Record<DamAssetTypeType, DamExtSystemConfigItem> {\n assetExternalProviders: DamExternalProviderAssetConfig\n audio: DamExtSystemConfigItem\n video: DamExtSystemConfigItem\n image: DamExtSystemConfigItemImage\n document: DamExtSystemConfigItem\n}\n\nexport interface DamConfigLicenceExtSystem {\n extSystem: IntegerId\n name: string\n}\n\nexport interface DamConfigLicenceExtSystemReturnType {\n licence: IntegerId\n extSystem: IntegerId\n licenceName: string\n extSystemConfig: DamExtSystemConfig\n}\n\nexport interface DamExtSystemConfigItem {\n enabled: boolean\n sizeLimit: number\n defaultFileVersion: string\n versions: Array<string>\n mimeTypes: Array<string>\n distribution: DamDistributionConfig\n authors: DamExtSystemAssetTypeExifMetadata\n keywords: DamExtSystemAssetTypeExifMetadata\n customMetadataPinnedAmount: number\n slots: string[]\n}\n\nexport interface DamExtSystemConfigItemImage extends DamExtSystemConfigItem {\n roiWidth: number,\n roiHeight: number,\n}\n\nexport type DamExternalProviderAssetConfig = Record<\n DamExternalProviderAssetName,\n {\n listingLimit: number\n title: string\n }\n>\n\nexport type DamExternalProviderAssetName = string\n\nexport interface DamDistributionConfig {\n distributionServices: Array<DamDistributionServiceName>\n distributionRequirements: Record<DamDistributionServiceName, DamDistributionRequirementsConfig>\n}\n\nexport interface DamDistributionRequirementsConfig {\n title: string\n requiredAuth: boolean\n blockedBy: Array<DamDistributionServiceName>\n categorySelect: DamDistributionRequirementsCategorySelectConfig\n strategy: DamDistributionRequirementStrategyType\n}\n\nexport const DamDistributionRequirementStrategy = {\n None: 'none',\n AtLeastOne: 'at_least_one',\n OneFromType: 'one_from_type',\n WaitForAll: 'wait_for_all',\n} as const\nexport type DamDistributionRequirementStrategyType =\n (typeof DamDistributionRequirementStrategy)[keyof typeof DamDistributionRequirementStrategy]\nexport const DamDistributionRequirementStrategyDefault = DamDistributionRequirementStrategy.None\n\nexport interface DamDistributionRequirementsCategorySelectConfig {\n enabled: boolean\n required: boolean\n}\n\nexport interface DamExtSystemAssetTypeExifMetadata {\n enabled: boolean\n required: boolean\n}\n\nexport const DamDistributionServiceType = {\n Youtube: 'youtubeDistribution',\n Jw: 'jwDistribution',\n Custom: 'customDistribution',\n} as const\nexport type DamDistributionServiceTypeType =\n (typeof DamDistributionServiceType)[keyof typeof DamDistributionServiceType]\n\nexport const DamDistributionStatus = {\n Waiting: 'waiting',\n Distributing: 'distributing',\n RemoteProcessing: 'remote_processing',\n Distributed: 'distributed',\n Failed: 'failed',\n} as const\nexport type DamDistributionStatusType = (typeof DamDistributionStatus)[keyof typeof DamDistributionStatus]\nexport const DamDistributionStatusDefault = DamDistributionStatus.Waiting\n\nexport interface DamPubConfig {\n userAuthType: UserAuthTypeType\n}\n\nexport const UserAuthType = {\n JsonCredentials: 'json_credentials',\n OAuth2: 'oauth2',\n} as const\nexport type UserAuthTypeType = (typeof UserAuthType)[keyof typeof UserAuthType]\nexport const UserAuthTypeDefault = UserAuthType.JsonCredentials\n","import { acceptHMRUpdate, defineStore } from 'pinia'\nimport { reactive, shallowRef } from 'vue'\nimport {\n type DamConfigLicenceExtSystem,\n type DamExtSystemConfig,\n type DamPrvConfig,\n type DamPubConfig,\n UserAuthType,\n} from '@/types/coreDam/DamConfig'\nimport type { IntegerId } from '@/types/common'\nimport { type DamAssetTypeType, type DamDistributionServiceName } from '@/types/coreDam/Asset'\nimport type { CustomDataFormElement } from '@/components/customDataForm/CustomDataForm'\n\nconst damPubConfigDefault = () => ({\n userAuthType: UserAuthType.JsonCredentials,\n})\nconst damPrvConfigDefault = () => ({\n colorSet: {},\n assetExternalProviders: {},\n distributionServices: {},\n settings: {\n aclCheckEnabled: true,\n adminAllowListName: 'root',\n allowSelectExtSystem: false,\n allowSelectLicenceId: false,\n defaultAssetLicenceId: 0,\n defaultExtSystemId: 0,\n imageChunkConfig: {\n minSize: 0,\n maxSize: 0,\n },\n maxBulkItemCount: 0,\n },\n})\n\nexport const useDamConfigStore = defineStore('commonAdminDamConfigStore', () => {\n const initialized = reactive<{\n damPubConfig: boolean\n damPrvConfig: boolean\n }>({\n damPubConfig: false,\n damPrvConfig: false,\n })\n const damPubConfig = shallowRef<DamPubConfig>(damPubConfigDefault())\n const damPrvConfig = shallowRef<DamPrvConfig>(damPrvConfigDefault())\n const damConfigExtSystem = shallowRef(new Map<IntegerId, DamExtSystemConfig>())\n const damConfigLicenceExtSystem = shallowRef(new Map<IntegerId, DamConfigLicenceExtSystem>())\n const damConfigAssetCustomFormElements = shallowRef(\n new Map<IntegerId, { [key in DamAssetTypeType]: CustomDataFormElement[] }>()\n )\n const damConfigDistributionCustomFormElements = shallowRef(\n new Map<DamDistributionServiceName, CustomDataFormElement[]>()\n )\n\n function reset() {\n damPubConfig.value = damPubConfigDefault()\n damPrvConfig.value = damPrvConfigDefault()\n damConfigExtSystem.value.clear()\n damConfigLicenceExtSystem.value.clear()\n damConfigAssetCustomFormElements.value.clear()\n damConfigDistributionCustomFormElements.value.clear()\n initialized.damPrvConfig = false\n initialized.damPubConfig = false\n }\n\n return {\n initialized,\n damPubConfig,\n damPrvConfig,\n damConfigExtSystem,\n damConfigLicenceExtSystem,\n damConfigAssetCustomFormElements,\n damConfigDistributionCustomFormElements,\n reset,\n }\n})\n\nif (import.meta.hot) {\n import.meta.hot.accept(acceptHMRUpdate(useDamConfigStore, import.meta.hot))\n}\n","import type { CustomDataFormElement } from '@/components/customDataForm/CustomDataForm'\nimport { fetchDamAssetLicence } from '@/components/damImage/uploadQueue/api/damAssetLicenceApi'\nimport {\n fetchAssetCustomFormElements,\n fetchDistributionCustomFormElements,\n} from '@/components/damImage/uploadQueue/composables/damAssetCustomFormApi'\nimport {\n fetchConfiguration,\n fetchExtSystemConfiguration,\n fetchPubConfiguration,\n} from '@/components/damImage/uploadQueue/composables/damConfigApi'\nimport { useDamConfigStore } from '@/components/damImage/uploadQueue/composables/damConfigStore'\nimport type { IntegerId } from '@/types/common'\nimport { DamAssetType, type DamAssetTypeType, type DamDistributionServiceName } from '@/types/coreDam/Asset'\nimport type {\n DamConfigLicenceExtSystemReturnType,\n DamExtSystemConfig,\n DamPrvConfig,\n DamPubConfig,\n} from '@/types/coreDam/DamConfig'\nimport { cloneDeep, isNull, isUndefined } from '@/utils/common'\nimport type { AxiosInstance } from 'axios'\n\nexport function useDamConfigState(client: undefined | (() => AxiosInstance) = undefined) {\n const damConfigStore = useDamConfigStore()\n\n function onConfigError(error: Error) {\n console.error(error)\n }\n\n function loadDamPubConfig() {\n return new Promise((resolve, reject) => {\n damConfigStore.initialized.damPubConfig = false\n if (isUndefined(client)) {\n reject(false)\n return\n }\n fetchPubConfiguration(client)\n .then((config) => {\n if (Object.keys(config).length < 1) {\n throw new Error('Unable to load pub config. Incorrect response body.')\n }\n setDamPubConfig(config)\n resolve(true)\n })\n .catch((err) => {\n onConfigError(err)\n reject(false)\n })\n })\n }\n\n function setDamPubConfig(data: DamPubConfig) {\n try {\n damConfigStore.damPubConfig.userAuthType = data.userAuthType\n damConfigStore.initialized.damPubConfig = true\n } catch (err) {\n throw new Error('Unable to load dam pub config. Incorrect fields in json.')\n }\n }\n\n function loadDamPrvConfig() {\n return new Promise((resolve, reject) => {\n damConfigStore.initialized.damPubConfig = false\n if (isUndefined(client)) {\n reject(false)\n return\n }\n fetchConfiguration(client)\n .then((config) => {\n if (Object.keys(config).length < 1) {\n throw new Error('Unable to load dam prv config. Incorrect response body.')\n }\n setDamPrvConfig(config)\n resolve(true)\n })\n .catch((err) => {\n onConfigError(err)\n reject(false)\n })\n })\n }\n\n function setDamPrvConfig(data: DamPrvConfig) {\n try {\n damConfigStore.damPrvConfig.settings = data.settings\n damConfigStore.damPrvConfig.colorSet = data.colorSet\n damConfigStore.damPrvConfig.assetExternalProviders = data.assetExternalProviders\n damConfigStore.damPrvConfig.distributionServices = data.distributionServices\n damConfigStore.initialized.damPrvConfig = true\n } catch (err) {\n throw new Error('Unable to load dam config. Incorrect fields in json.')\n }\n }\n\n function loadDamConfigExtSystem(extSystemId: IntegerId) {\n return new Promise((resolve, reject) => {\n if (isUndefined(client)) {\n reject(false)\n return\n }\n fetchExtSystemConfiguration(extSystemId, client)\n .then((config) => {\n if (Object.keys(config).length < 1) {\n throw new Error('Unable to load dam ext system config. Incorrect response body.')\n }\n setDamConfigExtSystem(config, extSystemId)\n resolve(true)\n })\n .catch((err) => {\n onConfigError(err)\n reject(false)\n })\n })\n }\n\n function setDamConfigExtSystem(data: DamExtSystemConfig, extSystemId: IntegerId) {\n try {\n const config = {\n assetExternalProviders: data.assetExternalProviders,\n audio: data.audio,\n document: data.document,\n image: data.image,\n video: data.video,\n }\n damConfigStore.damConfigExtSystem.set(extSystemId, config)\n } catch (err) {\n throw new Error('Unable to load dam ext system config. Incorrect fields in json.')\n }\n }\n\n function loadDamConfigAssetCustomFormElements(\n extSystemId: IntegerId,\n types: DamAssetTypeType[] = [DamAssetType.Image, DamAssetType.Audio, DamAssetType.Video, DamAssetType.Document]\n ) {\n return new Promise((resolve, reject) => {\n if (isUndefined(client)) {\n reject(false)\n return\n }\n const promises = types.map((type) => fetchAssetCustomFormElements(client, extSystemId, type))\n\n Promise.all(promises)\n .then((responses) => {\n if (responses.length !== types.length || responses.some((response) => Object.keys(response).length < 1)) {\n throw new Error('Unable to load asset custom form config. Incorrect response body.')\n }\n setDamConfigAssetCustomFormElements(responses, extSystemId, types)\n resolve(true)\n })\n .catch((err) => {\n onConfigError(err)\n reject(false)\n })\n })\n }\n\n function setDamConfigAssetCustomFormElements(\n responses: Awaited<{\n data: CustomDataFormElement[]\n }>[],\n extSystemId: IntegerId,\n types: DamAssetTypeType[]\n ) {\n try {\n const existingConfig = damConfigStore.damConfigAssetCustomFormElements.get(extSystemId) || {\n image: [],\n audio: [],\n video: [],\n document: [],\n }\n\n const config = { ...existingConfig }\n\n types.forEach((type, index) => {\n config[type] = responses[index].data\n })\n\n damConfigStore.damConfigAssetCustomFormElements.set(extSystemId, config)\n } catch (err) {\n throw new Error('Unable to load asset custom form config. Incorrect fields in json.')\n }\n }\n\n function loadDamConfigDistributionCustomFormElements(distributionServiceName: DamDistributionServiceName) {\n return new Promise((resolve, reject) => {\n if (isUndefined(client)) {\n reject(false)\n return\n }\n if (damConfigStore.damConfigDistributionCustomFormElements.has(distributionServiceName)) {\n resolve(true)\n return\n }\n fetchDistributionCustomFormElements(client, distributionServiceName)\n .then((res) => {\n damConfigStore.damConfigDistributionCustomFormElements.set(distributionServiceName, res.data)\n resolve(true)\n return\n })\n .catch((error) => {\n reject(error)\n return\n })\n })\n }\n\n function isDamPubConfigLoaded() {\n return damConfigStore.initialized.damPubConfig\n }\n\n function isDamPrvConfigLoaded() {\n return damConfigStore.initialized.damPrvConfig\n }\n\n function getDamConfigExtSystem(extSystemId: IntegerId) {\n return damConfigStore.damConfigExtSystem.get(extSystemId)\n }\n\n function getDamConfigAssetCustomFormElements(extSystemId: IntegerId) {\n return damConfigStore.damConfigAssetCustomFormElements.get(extSystemId)\n }\n\n async function getOrLoadDamConfigExtSystemByLicences(\n licences: IntegerId[]\n ): Promise<DamConfigLicenceExtSystemReturnType[]> {\n const promises = licences.map((licence) =>\n getOrLoadDamConfigExtSystemByLicence(licence).catch((error) => {\n console.error(`Error fetching licence ${licence}:`, error)\n return undefined\n })\n )\n\n const responses = await Promise.allSettled(promises)\n\n return responses\n .filter(\n (result): result is PromiseFulfilledResult<DamConfigLicenceExtSystemReturnType> =>\n result.status === 'fulfilled' && !isUndefined(result.value)\n )\n .map((result) => result.value)\n }\n\n async function getOrLoadDamConfigExtSystemByLicence(\n licence: IntegerId\n ): Promise<DamConfigLicenceExtSystemReturnType | undefined> {\n if (isUndefined(client)) {\n console.warn('Client is undefined')\n return undefined\n }\n\n let foundLicenceConfig = damConfigStore.damConfigLicenceExtSystem.get(licence)\n\n if (isUndefined(foundLicenceConfig)) {\n try {\n const licenceRes = await fetchDamAssetLicence(client, licence)\n if (isNull(licenceRes.extSystem)) return undefined\n\n foundLicenceConfig = {\n extSystem: licenceRes.extSystem,\n name: licenceRes.name,\n }\n damConfigStore.damConfigLicenceExtSystem.set(licence, foundLicenceConfig)\n } catch (error) {\n console.error(`Error fetching asset licence for ${licence}:`, error)\n return undefined\n }\n }\n\n let foundExtSystemConfig = damConfigStore.damConfigExtSystem.get(foundLicenceConfig.extSystem)\n\n if (isUndefined(foundExtSystemConfig)) {\n try {\n await loadDamConfigExtSystem(foundLicenceConfig.extSystem)\n foundExtSystemConfig = damConfigStore.damConfigExtSystem.get(foundLicenceConfig.extSystem)\n } catch (error) {\n console.error(`Error loading extension system ${foundLicenceConfig.extSystem}:`, error)\n return undefined\n }\n }\n\n if (isUndefined(foundExtSystemConfig)) return undefined\n\n return {\n licence,\n extSystem: foundLicenceConfig.extSystem,\n licenceName: foundLicenceConfig.name,\n extSystemConfig: cloneDeep(foundExtSystemConfig),\n }\n }\n\n return {\n getOrLoadDamConfigExtSystemByLicences,\n getOrLoadDamConfigExtSystemByLicence,\n loadDamPrvConfig,\n loadDamPubConfig,\n loadDamConfigExtSystem,\n loadDamConfigAssetCustomFormElements,\n loadDamConfigDistributionCustomFormElements,\n isDamPubConfigLoaded,\n isDamPrvConfigLoaded,\n getDamConfigExtSystem,\n getDamConfigAssetCustomFormElements,\n }\n}\n","import type { AxiosInstance, AxiosResponse } from 'axios'\nimport type { DocId, IntegerId } from '@/types/common'\nimport type { AssetDetailItemDto, AssetSearchListItemDto, DamAssetTypeType } from '@/types/coreDam/Asset'\nimport { apiFetchOne } from '@/services/api/apiFetchOne'\nimport type { UploadQueueItem } from '@/types/coreDam/UploadQueue'\nimport { HTTP_STATUS_OK } from '@/composables/statusCodes'\nimport { isNull, isUndefined } from '@/utils/common'\nimport {\n AnzuApiValidationError,\n type AnzuApiValidationResponseData,\n axiosErrorResponseHasValidationData,\n type ValidationError,\n} from '@/model/error/AnzuApiValidationError'\nimport { useAlerts } from '@/composables/system/alerts'\nimport { AnzuApiForbiddenError, axiosErrorResponseIsForbidden } from '@/model/error/AnzuApiForbiddenError'\nimport {\n AnzuApiForbiddenOperationError,\n axiosErrorResponseHasForbiddenOperationData,\n} from '@/model/error/AnzuApiForbiddenOperationError'\nimport { AnzuFatalError } from '@/model/error/AnzuFatalError'\nimport { useDamConfigState } from '@/components/damImage/uploadQueue/composables/damConfigState'\nimport { useApiFetchList } from '@/labs/api/useApiFetchList'\nimport type { DamMediaFromDam } from '@/types/MediaAware'\n\nconst END_POINT = '/adm/v1/asset'\nconst BULK_METADATA_LIMIT = 10\nexport const ENTITY = 'asset'\nexport const SYSTEM_CORE_DAM = 'coreDam'\nexport const SYSTEM_DAM = 'dam'\nconst FETCH_BY_IDS_MAX_LIMIT = 25\n\nexport interface AssetMetadataBulkItem {\n id: DocId\n keywords: DocId[]\n authors: DocId[]\n described: boolean\n customData: AssetCustomData\n mainFileSingleUse: boolean | null\n}\n\nexport declare type AssetCustomData = Record<string, any>\n\nexport const useFetchAssetList = (client: () => AxiosInstance, licenceId: IntegerId) =>\n useApiFetchList<AssetSearchListItemDto[]>(client, SYSTEM_CORE_DAM, ENTITY, END_POINT + '/licence/:licenceId', {\n licenceId,\n })\n\nexport const fetchAsset = (client: () => AxiosInstance, id: DocId) =>\n apiFetchOne<AssetDetailItemDto>(client, END_POINT + '/:id', { id }, SYSTEM_CORE_DAM, ENTITY)\n\nexport const fetchAssetAsCmsMedia = <T extends DamMediaFromDam>(client: () => AxiosInstance, id: DocId) =>\n apiFetchOne<T>(client, '/adm/v1/cms/asset/:id', { id }, SYSTEM_CORE_DAM, ENTITY)\n\nexport const fetchAssetByFileId = (client: () => AxiosInstance, assetFileId: DocId) =>\n apiFetchOne<AssetDetailItemDto>(client, END_POINT + '/asset-file/:id', { id: assetFileId }, SYSTEM_CORE_DAM, ENTITY)\n\nexport const bulkUpdateAssetsMetadata = (\n client: () => AxiosInstance,\n items: UploadQueueItem[],\n mainFileSingleUseOverride: boolean | undefined = undefined\n) => {\n return new Promise<AssetMetadataBulkItem[]>((resolve, reject) => {\n const bulkItems = listItemsToMetadataBulkItems(items, mainFileSingleUseOverride)\n updateMetadataSequence(client, bulkItems)\n .then((responses) => {\n if (bulkItems.length === 0) {\n return resolve([])\n } else if (responses.length === 0) {\n return reject(responses)\n } else if (\n responses.every((res) => {\n return res.status === HTTP_STATUS_OK\n })\n ) {\n const bulkItemsRes: AssetMetadataBulkItem[] = responses.flatMap((response) => response.data)\n return resolve(bulkItemsRes)\n } else {\n return reject(responses)\n }\n })\n .catch((err) => {\n //\n return reject(err)\n })\n })\n}\n\nasync function fetchAssetListByIdsSequence(client: () => AxiosInstance, ids: DocId[], licenceId: number) {\n if (ids.length === 0) return Promise.resolve([])\n const totalCalls = Math.ceil(ids.length / FETCH_BY_IDS_MAX_LIMIT)\n const responses = []\n\n for (let i = 0; i < totalCalls; i++) {\n const offset = i * FETCH_BY_IDS_MAX_LIMIT\n const reduced = ids.slice(offset, offset + FETCH_BY_IDS_MAX_LIMIT)\n const res = await client().get(END_POINT + `/licence/${licenceId}/ids/${reduced.join(',')}`)\n responses.push(res)\n }\n return responses\n}\n\nexport const fetchAssetListByIds: (\n client: () => AxiosInstance,\n ids: DocId[],\n licenceId: number\n) => Promise<AssetDetailItemDto[]> = (client: () => AxiosInstance, ids: DocId[], licenceId: number) => {\n return new Promise((resolve, reject) => {\n fetchAssetListByIdsSequence(client, ids, licenceId)\n .then((responses) => {\n if (ids.length === 0) {\n return resolve([])\n } else if (responses.length === 0) {\n reject(responses)\n } else if (\n responses.every((res) => {\n return res.status === HTTP_STATUS_OK\n })\n ) {\n const final = []\n for (let i = 0; i < responses.length; i++) {\n final.push(...responses[i].data.data)\n }\n resolve(final as AssetDetailItemDto[])\n } else {\n reject(responses)\n }\n })\n .catch((err) => {\n //\n reject(err)\n })\n })\n}\n\nasync function updateMetadataSequence(client: () => AxiosInstance, bulkItems: AssetMetadataBulkItem[]) {\n const totalCalls = Math.ceil(bulkItems.length / BULK_METADATA_LIMIT)\n const responses: AxiosResponse[] = []\n if (bulkItems.length === 0) return Promise.resolve([])\n\n for (let i = 0; i < totalCalls; i++) {\n const offset = i * BULK_METADATA_LIMIT\n const reduced = bulkItems.slice(offset, offset + BULK_METADATA_LIMIT)\n const res = await client().patch(END_POINT + '/metadata-bulk-update', JSON.stringify(reduced))\n responses.push(res)\n }\n return responses\n}\n\nfunction listItemsToMetadataBulkItems(\n items: UploadQueueItem[],\n mainFileSingleUseOverride: boolean | undefined = undefined\n) {\n const dtoItems: AssetMetadataBulkItem[] = []\n items.forEach((item) => {\n if (!isNull(item.assetId) && item.canEditMetadata) {\n dtoItems.push({\n id: item.assetId,\n keywords: item.keywords,\n authors: item.authors,\n described: true,\n customData: item.customData,\n mainFileSingleUse: isUndefined(mainFileSingleUseOverride) ? item.mainFileSingleUse : mainFileSingleUseOverride,\n })\n }\n })\n\n return dtoItems\n}\n\nconst { showUnknownError, showApiValidationError } = useAlerts()\n\nconst handleMetadataValidationError = (error: any, assetType: DamAssetTypeType, extSystem: IntegerId) => {\n const { getDamConfigAssetCustomFormElements } = useDamConfigState()\n const configAssetCustomFormElements = getDamConfigAssetCustomFormElements(extSystem)\n if (isUndefined(configAssetCustomFormElements)) {\n throw new Error('Custom form elements must be initialised.')\n }\n if (!error || !error.response || !error.response.data) return\n const data = error.response.data as AnzuApiValidationResponseData\n const items = [] as ValidationError[]\n for (const [key, values] of Object.entries(data.fields)) {\n const field = key.split('.').pop()\n const found = configAssetCustomFormElements[assetType].find((item) => item.property === field)\n if (found) {\n items.push({\n field: found.name,\n errors: values,\n })\n }\n }\n if (items.length) {\n showApiValidationError(items, -1, true)\n return\n }\n showUnknownError()\n}\n\nexport const updateAssetMetadata = (\n client: () => AxiosInstance,\n asset: AssetDetailItemDto,\n extSystem: IntegerId,\n mainFileSingleUse: boolean | null\n) => {\n return new Promise((resolve, reject) => {\n const data: AssetMetadataBulkItem = {\n id: asset.id,\n keywords: asset.keywords,\n authors: asset.authors,\n described: true,\n customData: asset.metadata.customData,\n mainFileSingleUse: mainFileSingleUse,\n }\n client()\n .patch(END_POINT + '/metadata-bulk-update', JSON.stringify([data]))\n .then((res) => {\n if (res.status === HTTP_STATUS_OK) {\n resolve(res.data)\n } else {\n //\n reject()\n }\n })\n .catch((err) => {\n if (axiosErrorResponseIsForbidden(err)) {\n return reject(new AnzuApiForbiddenError(err, err.config?.url))\n }\n if (axiosErrorResponseHasValidationData(err)) {\n handleMetadataValidationError(err, asset.attributes.assetType, extSystem)\n return reject(new AnzuApiValidationError(err, SYSTEM_CORE_DAM, ENTITY, err))\n }\n if (axiosErrorResponseHasForbiddenOperationData(err)) {\n return reject(new AnzuApiForbiddenOperationError(err, err))\n }\n return reject(new AnzuFatalError(err))\n })\n })\n}\n\nexport const updateAssetAuthors = (client: () => AxiosInstance, asset: AssetDetailItemDto, extSystem: IntegerId) => {\n return new Promise((resolve, reject) => {\n const data: Partial<AssetMetadataBulkItem> = {\n id: asset.id,\n authors: asset.authors,\n described: true,\n }\n client()\n .patch(END_POINT + '/metadata-bulk-update', JSON.stringify([data]))\n .then((res) => {\n if (res.status === HTTP_STATUS_OK) {\n resolve(res.data)\n } else {\n //\n reject()\n }\n })\n .catch((err) => {\n if (axiosErrorResponseIsForbidden(err)) {\n return reject(new AnzuApiForbiddenError(err, err.config?.url))\n }\n if (axiosErrorResponseHasValidationData(err)) {\n handleMetadataValidationError(err, asset.attributes.assetType, extSystem)\n return reject(new AnzuApiValidationError(err, SYSTEM_CORE_DAM, ENTITY, err))\n }\n if (axiosErrorResponseHasForbiddenOperationData(err)) {\n return reject(new AnzuApiForbiddenOperationError(err, err))\n }\n return reject(new AnzuFatalError(err))\n })\n })\n}\n\nexport type IdsGroupedByLicences = Map<IntegerId, DocId[]>\n\nexport type AssetAuthorsItems = AssetAuthorsItem[]\nexport interface AssetAuthorsItem {\n id: DocId\n authors: DocId[]\n}\n\nasync function updateAuthorsSequence(client: () => AxiosInstance, items: AssetAuthorsItems) {\n const totalCalls = Math.ceil(items.length / BULK_METADATA_LIMIT)\n const responses: AxiosResponse[] = []\n if (items.length === 0) return Promise.resolve([])\n\n for (let i = 0; i < totalCalls; i++) {\n const offset = i * BULK_METADATA_LIMIT\n const reduced = items.slice(offset, offset + BULK_METADATA_LIMIT)\n const res = await client().patch(END_POINT + '/metadata-bulk-update', JSON.stringify(reduced))\n responses.push(res)\n }\n return responses\n}\n\nexport const bulkUpdateAssetsAuthors = (client: () => AxiosInstance, items: AssetAuthorsItems) => {\n return new Promise<AssetMetadataBulkItem[]>((resolve, reject) => {\n updateAuthorsSequence(client, items)\n .then((responses) => {\n if (items.length === 0) {\n return resolve([])\n } else if (responses.length === 0) {\n return reject(responses)\n } else if (\n responses.every((res) => {\n return res.status === HTTP_STATUS_OK\n })\n ) {\n const bulkItemsRes: AssetMetadataBulkItem[] = responses.flatMap((response) => response.data)\n return resolve(bulkItemsRes)\n } else {\n return reject(responses)\n }\n })\n .catch((err) => {\n //\n return reject(err)\n })\n })\n}\n","import { createFilter, createFilterStore, type MakeFilterOption } from '@/labs/filters/filterFactory'\nimport { ENTITY, SYSTEM_CORE_DAM } from '@/components/damImage/uploadQueue/api/damAssetApi'\n\nexport const filterFieldsList = [\n {\n name: 'text' as const,\n default: null,\n type: 'string',\n variant: 'search',\n titleT: 'common.assetSelect.filter.text',\n },\n { name: 'type' as const, default: [] },\n { name: 'status' as const, default: ['with_file'] },\n { name: 'keywordIds' as const, default: [], titleT: 'common.assetSelect.filter.keywordIds' },\n {\n name: 'assetAndMainFileIds' as const,\n default: null,\n type: 'string',\n titleT: 'common.assetSelect.filter.assetAndMainFileIds',\n },\n { name: 'authorIds' as const, default: [], titleT: 'common.assetSelect.filter.authorIds' },\n { name: 'createdByIds' as const, default: [], titleT: 'common.assetSelect.filter.createdByIds' },\n { name: 'mostDominantColor' as const, default: [] },\n { name: 'closestMostDominantColor' as const, default: [] },\n { name: 'codecName' as const, default: [] },\n { name: 'orientation' as const, default: [] },\n { name: 'described' as const, default: null, titleT: 'common.assetSelect.filter.described' },\n { name: 'visible' as const, default: true, titleT: 'common.assetSelect.filter.visible' },\n { name: 'generatedBySystem' as const, default: false, titleT: 'common.assetSelect.filter.generatedBySystem' },\n { name: 'inPodcast' as const, default: null },\n { name: 'podcastIds' as const, default: [], titleT: 'common.assetSelect.filter.podcastIds' },\n { name: 'fromRss' as const, default: null },\n { name: 'slotNames' as const, default: [] },\n { name: 'distributedInServices' as const, default: [], titleT: 'common.assetSelect.filter.distributedInServices' },\n { name: 'licences' as const, default: [] },\n { name: 'shortestDimensionFrom' as const, default: null, type: 'integer' },\n { name: 'shortestDimensionUntil' as const, default: null, type: 'integer' },\n { name: 'pixelSizeFrom' as const, default: null, type: 'integer' },\n { name: 'pixelSizeUntil' as const, default: null, type: 'integer' },\n { name: 'widthFrom' as const, default: null, type: 'integer' },\n { name: 'widthUntil' as const, default: null, type: 'integer' },\n { name: 'heightFrom' as const, default: null, type: 'integer' },\n { name: 'heightUntil' as const, default: null, type: 'integer' },\n { name: 'ratioWidthFrom' as const, default: null, type: 'integer' },\n { name: 'ratioWidthUntil' as const, default: null, type: 'integer' },\n { name: 'ratioHeightFrom' as const, default: null, type: 'integer' },\n { name: 'ratioHeightUntil' as const, default: null, type: 'integer' },\n { name: 'rotationFrom' as const, default: null, type: 'integer' },\n { name: 'rotationUntil' as const, default: null, type: 'integer' },\n { name: 'durationFrom' as const, default: null, type: 'integer' },\n { name: 'durationUntil' as const, default: null, type: 'integer' },\n { name: 'bitrateFrom' as const, default: null, type: 'integer' },\n { name: 'bitrateUntil' as const, default: null, type: 'integer' },\n { name: 'slotsCountFrom' as const, default: null, type: 'integer' },\n { name: 'slotsCountUntil' as const, default: null, type: 'integer' },\n { name: 'createdAtFrom' as const, default: null, type: 'timeInterval', related: 'createdAtUntil' },\n { name: 'createdAtUntil' as const, default: null, type: 'timeInterval', exclude: true, render: { skip: true } },\n { name: 'mainFileSingleUse' as const, default: false },\n] satisfies readonly MakeFilterOption[]\n\nconst listFiltersStore = createFilterStore(filterFieldsList)\n\nexport function useAssetListFilter() {\n const { filterConfig, filterData } = createFilter(filterFieldsList, listFiltersStore, {\n elastic: true,\n system: SYSTEM_CORE_DAM,\n subject: ENTITY,\n })\n\n return {\n filterConfig,\n filterData,\n }\n}\n","import type { DocId, IntegerId } from '@/types/common'\nimport type { AssetSearchListItemDto } from '@/types/coreDam/Asset'\n\nexport const AssetSelectReturnType = {\n MainFileId: 'mainFileId',\n AssetId: 'assetId',\n Asset: 'asset',\n} as const\nexport type AssetSelectReturnTypeType = (typeof AssetSelectReturnType)[keyof typeof AssetSelectReturnType]\n\nexport type AssetSelectReturnData = AssetSelectReturnMainFileId | AssetSelectReturnAssetId | AssetSelectReturnAsset\n\ninterface AssetSelectReturnMainFileId {\n type: typeof AssetSelectReturnType.MainFileId\n copyToLicence: undefined | IntegerId\n value: Array<DocId>\n}\n\ninterface AssetSelectReturnAssetId {\n type: typeof AssetSelectReturnType.AssetId\n copyToLicence: undefined | IntegerId\n value: Array<DocId>\n}\n\ninterface AssetSelectReturnAsset {\n type: typeof AssetSelectReturnType.Asset\n copyToLicence: undefined | IntegerId\n value: Array<AssetSearchListItemDto>\n}\n","import { acceptHMRUpdate, defineStore } from 'pinia'\nimport type { AssetSearchListItemDto, DamAssetTypeType } from '@/types/coreDam/Asset'\nimport { DamAssetTypeDefault } from '@/types/coreDam/Asset'\nimport type { DocId, IntegerId } from '@/types/common'\nimport { computed, ref, toRaw } from 'vue'\nimport {\n type AssetSelectReturnData,\n AssetSelectReturnType,\n type AssetSelectReturnTypeType,\n} from '@/types/coreDam/AssetSelect'\nimport type { DamConfigLicenceExtSystemReturnType } from '@/types/coreDam/DamConfig'\nimport { isNull } from '@/utils/common'\n\nexport interface AssetSelectListItem {\n asset: AssetSearchListItemDto\n selected: boolean\n active: boolean\n}\n\nexport const useAssetSelectStore = defineStore('commonAdminCoreDamAssetSelectStore', () => {\n const assetListItems = ref<Array<AssetSelectListItem>>([])\n const loader = ref(false)\n const selectedLicenceId = ref<IntegerId>(0)\n const selectConfig = ref<DamConfigLicenceExtSystemReturnType[]>([])\n const assetType = ref<DamAssetTypeType>(DamAssetTypeDefault)\n const inPodcast = ref<boolean | null>(null)\n const selectedAssets = ref<Map<DocId, AssetSelectListItem>>(new Map())\n const singleMode = ref(false)\n const minCount = ref(0)\n const maxCount = ref(0)\n const activeItemIndex = ref<null | number>(null)\n\n function showLoader() {\n loader.value = true\n }\n\n function hideLoader() {\n loader.value = false\n }\n\n function setSelectConfig(value: DamConfigLicenceExtSystemReturnType[]) {\n selectConfig.value = value\n if (value.length === 0) {\n selectedLicenceId.value = 0\n return\n }\n selectedLicenceId.value = value[0].licence\n }\n\n function setSingleMode(value: boolean) {\n singleMode.value = value\n }\n\n function setAssetType(value: DamAssetTypeType) {\n assetType.value = value\n }\n\n function setMinCount(value: number) {\n minCount.value = value\n }\n\n function setMaxCount(value: number) {\n maxCount.value = value\n }\n\n function setList(items: AssetSearchListItemDto[]) {\n assetListItems.value = items.map((item) => {\n return {\n asset: item,\n selected: false,\n active: false,\n }\n })\n }\n\n function appendList(items: AssetSearchListItemDto[]) {\n const assets = items.map((asset) => {\n return {\n asset: asset,\n selected: false,\n active: false,\n }\n })\n assetListItems.value = assetListItems.value.concat(assets)\n }\n\n function toggleSelectedByIndex(index: number) {\n if (!assetListItems.value[index]) return\n\n if (!singleMode.value && isSelectedMax.value && !assetListItems.value[index].selected) {\n return\n }\n\n assetListItems.value[index].selected = !assetListItems.value[index].selected\n\n if (singleMode.value && assetListItems.value[index].selected) {\n unselectAllExcept(index)\n clearSelected()\n addToSelected(assetListItems.value[index])\n return\n }\n\n if (!singleMode.value && assetListItems.value[index].selected) {\n addToSelected(assetListItems.value[index])\n return\n }\n\n removeFromSelected(assetListItems.value[index].asset.id)\n }\n\n function setActiveByIndex(index: number) {\n const oldActiveIndex = activeItemIndex.value\n if (index === activeItemIndex.value) return\n if (!assetListItems.value[index]) return\n assetListItems.value[index].active = true\n activeItemIndex.value = index\n if (isNull(oldActiveIndex)) return\n if (!(oldActiveIndex in assetListItems.value)) return\n assetListItems.value[oldActiveIndex].active = false\n }\n\n function unselectAllExcept(ignoreIndex: number) {\n const items = assetListItems.value\n for (let i = 0; i < items.length; i++) {\n if (items[i].selected && i !== ignoreIndex) {\n items[i].selected = false\n }\n }\n }\n\n function clearSelected() {\n selectedAssets.value.clear()\n }\n\n function addToSelected(assetItem: AssetSelectListItem) {\n if (!selectedAssets.value.has(assetItem.asset.id)) {\n selectedAssets.value.set(assetItem.asset.id, assetItem)\n }\n }\n\n function removeFromSelected(assetId: DocId) {\n if (selectedAssets.value.has(assetId)) {\n selectedAssets.value.delete(assetId)\n }\n }\n\n function getSelectedMainFileIds(): DocId[] {\n const fileIds: Set<DocId> = new Set()\n for (const value of selectedAssets.value.values()) {\n if (value.asset.mainFile?.id) {\n fileIds.add(value.asset.mainFile.id)\n }\n }\n return Array.from(fileIds)\n }\n\n function getSelectedAssetIds(): DocId[] {\n return Array.from(selectedAssets.value.keys())\n }\n\n function getSelectedAssets(): AssetSearchListItemDto[] {\n const assets: Array<AssetSearchListItemDto> = []\n for (const value of selectedAssets.value.values()) {\n assets.push(toRaw(value.asset))\n }\n return assets\n }\n\n function getSelectedData(\n type: AssetSelectReturnTypeType,\n copyToLicence: undefined | IntegerId\n ): AssetSelectReturnData {\n switch (type) {\n case AssetSelectReturnType.AssetId:\n return {\n type: AssetSelectReturnType.AssetId,\n copyToLicence,\n value: getSelectedAssetIds(),\n }\n case AssetSelectReturnType.Asset:\n return {\n type: AssetSelectReturnType.Asset,\n copyToLicence,\n value: getSelectedAssets(),\n }\n case AssetSelectReturnType.MainFileId:\n default:\n return {\n type: AssetSelectReturnType.MainFileId,\n copyToLicence,\n value: getSelectedMainFileIds(),\n }\n }\n }\n\n const isSelectedMax = computed(() => {\n return selectedCount.value >= maxCount.value\n })\n\n const selectedCount = computed(() => {\n return selectedAssets.value.size\n })\n\n function reset(all: boolean) {\n assetListItems.value = []\n loader.value = false\n clearSelected()\n if (!all) return\n assetType.value = DamAssetTypeDefault\n inPodcast.value = null\n singleMode.value = false\n minCount.value = 0\n maxCount.value = 0\n activeItemIndex.value = null\n }\n\n const selectedSelectConfig = computed(() => {\n const found = selectConfig.value.find((configItem) => configItem.licence === selectedLicenceId.value)\n if (found) return found\n return selectConfig.value[0]\n })\n\n return {\n selectedLicenceId,\n selectConfig,\n assetType,\n inPodcast,\n singleMode,\n minCount,\n maxCount,\n selectedCount,\n selectedAssets,\n loader,\n assetListItems,\n setActiveByIndex,\n getSelectedData,\n setAssetType,\n setSelectConfig,\n setSingleMode,\n setMinCount,\n setMaxCount,\n showLoader,\n hideLoader,\n setList,\n appendList,\n toggleSelectedByIndex,\n clearSelected,\n reset,\n selectedSelectConfig,\n }\n})\n\nif (import.meta.hot) {\n import.meta.hot.accept(acceptHMRUpdate(useAssetSelectStore, import.meta.hot))\n}\n","import { ref } from 'vue'\nimport type { CommonAdminCoreDamOptions } from '@/AnzuSystemsCommonAdmin'\n\nimport { isUndefined } from '@/utils/common'\n\nconst commonAdminCoreDamOptions = ref<CommonAdminCoreDamOptions | undefined>(undefined)\n\nexport function initCommonAdminCoreDamOptions(data: CommonAdminCoreDamOptions) {\n commonAdminCoreDamOptions.value = data\n}\n\nexport function useCommonAdminCoreDamOptions(configName: string = 'default') {\n if (\n isUndefined(commonAdminCoreDamOptions.value) ||\n isUndefined(commonAdminCoreDamOptions.value.configs) ||\n isUndefined(commonAdminCoreDamOptions.value.configs[configName])\n ) {\n throw new Error(\"Composable can't be used without properly configured common admin.\")\n }\n\n return {\n damClient: commonAdminCoreDamOptions.value.configs[configName].damClient,\n }\n}\n\nexport function useCommonAdminCoreDamOptionsGlobal() {\n if (isUndefined(commonAdminCoreDamOptions.value) || isUndefined(commonAdminCoreDamOptions.value.configs)) {\n throw new Error(\"Composable can't be used without properly configured common admin.\")\n }\n\n return {\n apiTimeout: commonAdminCoreDamOptions.value.apiTimeout,\n uploadStatusFallback: commonAdminCoreDamOptions.value.uploadStatusFallback,\n notification: commonAdminCoreDamOptions.value.notification,\n adminDomain: commonAdminCoreDamOptions.value.adminDomain,\n }\n}\n","import { defineStore } from 'pinia'\nimport { ref } from 'vue'\nimport type { AssetDetailItemDto } from '@/types/coreDam/Asset'\nimport type { DocId } from '@/types/common'\nimport type { UploadQueueKey } from '@/types/coreDam/UploadQueue'\n\nexport const AssetDetailTabImageWithRoi = {\n Info: 'meta',\n ROI: 'roi',\n} as const\nexport type AssetDetailTabImageWithRoiType =\n (typeof AssetDetailTabImageWithRoi)[keyof typeof AssetDetailTabImageWithRoi]\nexport const AssetDetailTabImageWithRoiDefault = AssetDetailTabImageWithRoi.Info\n\nexport const useAssetDetailStore = defineStore('commonAssetDetailStore', () => {\n const asset = ref<AssetDetailItemDto | null>(null)\n const authorConflicts = ref<DocId[]>([])\n const dialog = ref<null | UploadQueueKey>(null)\n const loading = ref(false)\n const metadataAreTouched = ref(false)\n const activeTab = ref<AssetDetailTabImageWithRoiType>(AssetDetailTabImageWithRoiDefault)\n const updateUploadStore = ref(false)\n const mainFileSingleUse = ref(false)\n\n function setAsset(data: AssetDetailItemDto | null) {\n asset.value = data\n mainFileSingleUse.value = data?.mainFileSingleUse || false\n }\n\n function reset() {\n asset.value = null\n mainFileSingleUse.value = false\n }\n\n return {\n metadataAreTouched,\n authorConflicts,\n asset,\n loading,\n dialog,\n activeTab,\n updateUploadStore,\n mainFileSingleUse,\n setAsset,\n reset,\n }\n})\n","import { type Ref, ref } from 'vue'\nimport { useDebounceFn } from '@vueuse/core'\nimport type { DocId, IntegerId } from '@/types/common'\nimport { isArray, isNull, isUndefined } from '@/utils/common'\n\nexport type CachedItem<T extends object> = T & { _loaded: boolean }\n\nexport type AddToCachedArgs<T extends DocId | IntegerId> =\n | Array<T | null | undefined>\n | Array<Array<T | null | undefined> | T | null | undefined>\n\n/**\n * @template I Identifier type\n * @template T Source type\n * @template M Minimal type\n */\nexport function defineCached<\n I extends DocId | IntegerId,\n T extends Record<DocId | IntegerId, any>,\n M extends Record<DocId | IntegerId, any>,\n>(\n mapFullToMinimal: (source: T) => M,\n mapIdToMinimal: (id: I) => M,\n fetchCallback: (ids: I[]) => Promise<T[]>,\n idProp = 'id',\n maxLimit = 1000\n) {\n const cache: Ref<Map<I, CachedItem<M>>> = ref(new Map()) // todo check\n const toFetch = ref(new Set()) as Ref<Set<I>> // todo check\n\n const add = (...args: AddToCachedArgs<I>) => {\n const toAdd = <Set<I>>new Set()\n for (let i = 0; i < args.length; i++) {\n const arg = args[i]\n if (isNull(arg) || isUndefined(arg)) continue\n if (isArray(arg)) {\n for (let j = 0; j < arg.length; j++) {\n const item = arg[j]\n if (isNull(item) || isUndefined(item)) continue\n if (!cache.value.has(item)) toAdd.add(item)\n }\n continue\n }\n if (!cache.value.has(arg)) toAdd.add(arg)\n }\n toAdd.forEach((id) => {\n cache.value.set(id, { ...mapIdToMinimal(id), ...{ _loaded: false } })\n toFetch.value.add(id)\n })\n }\n\n const addManual = (data: T) => {\n if (data[idProp]) {\n cache.value.set(data[idProp] as I, { ...mapFullToMinimal(data), ...{ _loaded: true } })\n }\n }\n\n const addManualMinimal = (data: M) => {\n if (data[idProp]) {\n cache.value.set(data[idProp] as I, { ...data, ...{ _loaded: true } })\n }\n }\n\n const updateMap = (data: T[]) => {\n if (cache.value.size >= maxLimit) {\n cache.value.clear()\n }\n for (let i = 0; i < data.length; i += 1) {\n cache.value.set(data[i][idProp] as I, { ...mapFullToMinimal(data[i]), ...{ _loaded: true } })\n }\n }\n\n const updateToFetch = (ids: Array<I>) => {\n for (let i = 0; i < ids.length; i += 1) {\n toFetch.value.delete(ids[i])\n }\n }\n\n async function apiFetch() {\n if (toFetch.value.size > 0) {\n const ids = Array.from(toFetch.value)\n const res = await fetchCallback(ids)\n updateToFetch(ids)\n updateMap(res)\n return res\n }\n return []\n }\n\n const debouncedFetch = useDebounceFn(\n async () => {\n return await apiFetch()\n },\n 1500,\n { maxWait: 5000 }\n )\n\n /**\n * Debounced fetch for best performance.\n * For general usage.\n */\n const fetch = () => {\n return debouncedFetch()\n }\n\n /**\n * Immediate fetch with no debounce and with result in promise.\n * Use for special cases.\n */\n const immediateFetch = () => {\n return apiFetch()\n }\n\n const get = (id: I | null | undefined) => {\n if (!id) return undefined\n return cache.value.get(id)\n }\n\n const has = (id: I | null | undefined): boolean => {\n if (!id) return false\n return cache.value.has(id)\n }\n\n const clear = () => {\n return cache.value.clear()\n }\n\n const isLoaded = (id: I | null | undefined): boolean => {\n if (!id) return false\n const item = cache.value.get(id)\n if (!item) return false\n return item._loaded\n }\n\n return {\n cache,\n toFetch,\n fetch,\n immediateFetch,\n add,\n addManual,\n addManualMinimal,\n has,\n get,\n clear,\n isLoaded,\n }\n}\n","import { ref } from 'vue'\nimport { isArray, isBoolean, isNull, isNumber, isString, isUndefined } from '@/utils/common'\nimport type { Filter, FilterBag, FilterVariant } from '@/types/Filter'\nimport { SortOrder } from '@/composables/system/datatableColumns'\n\n/**\n * Docs: /doc/Admin-Cms-Doc/Filters.md\n */\nexport function useApiQueryBuilder() {\n const q = ref<string[]>([])\n\n const querySetLimit = (value: number): void => {\n queryAdd('limit', value)\n }\n\n const querySetOffset = (page: number, limit: number): void => {\n queryAdd('offset', page * limit - limit)\n }\n\n const querySetOrder = (field: string | null, desc: boolean): void => {\n if (!isNull(field) && field.length > 0) queryAdd('order[' + field + ']', desc ? SortOrder.Desc : SortOrder.Asc)\n }\n\n const formatValue = (value: string | number | boolean): string | number => {\n if (isBoolean(value)) {\n return value ? '1' : '0'\n }\n return value\n }\n\n const queryAddFilter = (filterVariant: FilterVariant, field: string, value: string | number | boolean): void => {\n if (isString(value) && value.length === 0) return\n q.value.push('filter_' + filterVariant + '[' + field + ']=' + formatValue(value))\n }\n\n const getValue = (filter: Filter): string | number | boolean | null => {\n const model = filter.model\n if (isNull(model)) {\n if (filter.mandatory) {\n filter.model = filter.default\n return filter.default\n }\n return null\n }\n if (isString(model)) {\n if (model.length === 0) {\n if (filter.mandatory) {\n filter.model = filter.default\n return filter.default\n }\n return null\n }\n return encodeURIComponent(model)\n }\n if (isArray(model)) {\n if (model.length === 0) {\n if (filter.mandatory) {\n filter.model = filter.default\n return filter.default\n }\n return null\n }\n return model.map((item) => (isString(item) ? encodeURIComponent(item) : item)).join(',')\n }\n if (isNumber(model) || isBoolean(model)) {\n return model\n }\n\n return null\n }\n\n const queryAdd = (key: string, value: any): void => {\n q.value.push(key + '=' + value)\n }\n\n const queryBuild = (): string => {\n return '?' + q.value.join('&')\n }\n\n const querySetFilters = (filterBag: FilterBag): void => {\n const isSearchApi = !isUndefined(filterBag._elastic)\n for (const filterName in filterBag) {\n const filter = filterBag[filterName]\n const field = filter.field || filterName\n if (filter.exclude) {\n continue\n }\n const value = getValue(filter)\n if (isNull(value)) {\n continue\n }\n if (isSearchApi) {\n queryAdd(field, value)\n continue\n }\n queryAddFilter(filter.variant, field, value)\n }\n }\n\n return {\n querySetLimit,\n querySetOffset,\n querySetOrder,\n queryAddFilter,\n querySetFilters,\n queryAdd,\n queryBuild,\n }\n}\n","import { AnzuApiResponseCodeError } from '@/model/error/AnzuApiResponseCodeError'\nimport { AnzuApiValidationError, axiosErrorResponseHasValidationData } from '@/model/error/AnzuApiValidationError'\nimport { replaceUrlParameters, type UrlParams } from '@/services/api/apiHelper'\nimport { isValidHTTPStatus } from '@/utils/response'\nimport type { AxiosInstance, AxiosRequestConfig } from 'axios'\nimport { useApiQueryBuilder } from '@/services/api/queryBuilder'\nimport { AnzuApiForbiddenError, axiosErrorResponseIsForbidden } from '@/model/error/AnzuApiForbiddenError'\nimport { AnzuFatalError } from '@/model/error/AnzuFatalError'\nimport {\n AnzuApiForbiddenOperationError,\n axiosErrorResponseHasForbiddenOperationData,\n} from '@/model/error/AnzuApiForbiddenOperationError'\nimport { HTTP_STATUS_NO_CONTENT } from '@/composables/statusCodes'\nimport {\n AnzuApiDependencyExistsError,\n axiosErrorResponseHasDependencyExistsData,\n} from '@/model/error/AnzuApiDependencyExistsError'\n\n/**\n * @template T Type used for request payload, by default same as Response type\n * @template R Response type override, optional\n */\nconst generateByIdsApiQuery = (ids: number[] | string[], isSearchApi: boolean): string => {\n const { querySetLimit, querySetOffset, querySetOrder, queryBuild, queryAddFilter, queryAdd } = useApiQueryBuilder()\n const limit = ids.length\n querySetLimit(limit)\n querySetOffset(1, limit)\n querySetOrder('id', false)\n if (isSearchApi) queryAdd('id', ids.join(','))\n else queryAddFilter('in', 'id', ids.join(','))\n\n return queryBuild()\n}\n\nexport const apiFetchByIds = <T, R = T>(\n client: () => AxiosInstance,\n ids: string[] | number[],\n urlTemplate: string,\n urlParams: UrlParams = {},\n system: string,\n entity: string,\n options: AxiosRequestConfig = {},\n isSearchApi = false\n): Promise<R> => {\n return new Promise((resolve, reject) => {\n client()\n .get(replaceUrlParameters(urlTemplate, urlParams) + generateByIdsApiQuery(ids, isSearchApi), options)\n .then((res) => {\n if (!isValidHTTPStatus(res.status)) {\n return reject(new AnzuApiResponseCodeError(res.status))\n }\n if (res.data?.data) {\n return resolve(res.data.data)\n }\n if (res.status === HTTP_STATUS_NO_CONTENT) {\n return resolve(null as R)\n }\n return reject(new AnzuFatalError())\n })\n .catch((err) => {\n if (axiosErrorResponseIsForbidden(err)) {\n return reject(new AnzuApiForbiddenError(err, err.config?.url))\n }\n if (axiosErrorResponseHasValidationData(err)) {\n return reject(new AnzuApiValidationError(err, system, entity, err))\n }\n if (axiosErrorResponseHasDependencyExistsData(err)) {\n return reject(new AnzuApiDependencyExistsError(err, system, entity, err))\n }\n if (axiosErrorResponseHasForbiddenOperationData(err)) {\n return reject(new AnzuApiForbiddenOperationError(err, err))\n }\n // todo catch another axios errors, for example timeout\n return reject(new AnzuFatalError(err))\n })\n })\n}\n","import { AnzuApiResponseCodeError } from '@/model/error/AnzuApiResponseCodeError'\nimport { AnzuApiValidationError, axiosErrorResponseHasValidationData } from '@/model/error/AnzuApiValidationError'\nimport { replaceUrlParameters, type UrlParams } from '@/services/api/apiHelper'\nimport { isValidHTTPStatus } from '@/utils/response'\nimport type { FilterBag } from '@/types/Filter'\nimport type { Pagination } from '@/types/Pagination'\nimport { isUndefined } from '@/utils/common'\nimport type { AxiosInstance, AxiosRequestConfig } from 'axios'\nimport { useApiQueryBuilder } from '@/services/api/queryBuilder'\nimport { AnzuApiForbiddenError, axiosErrorResponseIsForbidden } from '@/model/error/AnzuApiForbiddenError'\nimport { AnzuFatalError } from '@/model/error/AnzuFatalError'\nimport type { ApiInfiniteResponseList, ApiResponseList } from '@/types/ApiResponse'\nimport { isApiInfiniteResponseList, isApiResponseList } from '@/types/ApiResponse'\nimport {\n AnzuApiForbiddenOperationError,\n axiosErrorResponseHasForbiddenOperationData,\n} from '@/model/error/AnzuApiForbiddenOperationError'\nimport { HTTP_STATUS_NO_CONTENT } from '@/composables/statusCodes'\nimport {\n AnzuApiDependencyExistsError,\n axiosErrorResponseHasDependencyExistsData,\n} from '@/model/error/AnzuApiDependencyExistsError'\n\nexport const apiGenerateListQuery = (pagination: Pagination, filterBag: FilterBag): string => {\n const { querySetLimit, querySetOffset, querySetOrder, queryBuild, querySetFilters } = useApiQueryBuilder()\n querySetLimit(pagination.rowsPerPage)\n querySetOffset(pagination.page, pagination.rowsPerPage)\n querySetOrder(pagination.sortBy, pagination.descending)\n querySetFilters(filterBag)\n return queryBuild()\n}\n\n/**\n * @template R Response type override, optional\n */\nexport const apiFetchList = <R>(\n client: () => AxiosInstance,\n urlTemplate: string,\n urlParams: UrlParams = {},\n pagination: Pagination,\n filterBag: FilterBag,\n system: string,\n entity: string,\n options: AxiosRequestConfig = {}\n): Promise<R> => {\n return new Promise((resolve, reject) => {\n const searchApi = isUndefined(filterBag._elastic) ? '' : '/search'\n client()\n .get(\n replaceUrlParameters(urlTemplate, urlParams) + searchApi + apiGenerateListQuery(pagination, filterBag),\n options\n )\n .then((res) => {\n if (!isValidHTTPStatus(res.status)) {\n return reject(new AnzuApiResponseCodeError(res.status))\n }\n if (res.data) {\n const resData = res.data as unknown as ApiResponseList<R> | ApiInfiniteResponseList<R>\n if (isApiInfiniteResponseList(resData)) {\n pagination.hasNextPage = res.data.hasNextPage\n } else if (isApiResponseList(resData)) {\n pagination.totalCount = resData.totalCount\n }\n pagination.currentViewCount = res.data.data.length\n return resolve(res.data.data)\n }\n if (res.status === HTTP_STATUS_NO_CONTENT) {\n return resolve([] as R)\n }\n return reject(new AnzuFatalError())\n })\n .catch((err) => {\n if (axiosErrorResponseIsForbidden(err)) {\n return reject(new AnzuApiForbiddenError(err, err.config?.url))\n }\n if (axiosErrorResponseHasValidationData(err)) {\n return reject(new AnzuApiValidationError(err, system, entity, err))\n }\n if (axiosErrorResponseHasDependencyExistsData(err)) {\n return reject(new AnzuApiDependencyExistsError(err, system, entity, err))\n }\n if (axiosErrorResponseHasForbiddenOperationData(err)) {\n return reject(new AnzuApiForbiddenOperationError(err, err))\n }\n // todo catch another axios errors, for example timeout\n return reject(new AnzuFatalError(err))\n })\n })\n}\n","import type { AxiosInstance } from 'axios'\nimport { apiFetchByIds } from '@/services/api/apiFetchByIds'\nimport type { DamAuthor } from '@/components/damImage/uploadQueue/author/DamAuthor'\nimport { SYSTEM_CORE_DAM } from '@/components/damImage/uploadQueue/api/damAssetApi'\nimport { apiCreateOne } from '@/services/api/apiCreateOne'\nimport { useApiFetchList } from '@/labs/api/useApiFetchList'\nimport type { IntegerId } from '@/types/common'\n// eslint-disable-next-line deprecation/no-deprecated-imports\nimport { apiFetchList } from '@/services/api/apiFetchList'\n// eslint-disable-next-line deprecation/no-deprecated-imports\nimport type { FilterBag } from '@/types/Filter'\nimport type { Pagination } from '@/types/Pagination'\n\nconst END_POINT = '/adm/v1/author'\nconst END_POINT_LIST = END_POINT + '/ext-system/:extSystemId'\nexport const ENTITY = 'author'\n\nexport const fetchAuthorListByIds = (client: () => AxiosInstance, extSystemId: number, ids: string[]) =>\n apiFetchByIds<DamAuthor[]>(\n client,\n ids,\n END_POINT_LIST + '/search',\n {\n extSystemId,\n },\n SYSTEM_CORE_DAM,\n ENTITY,\n {},\n true\n )\n\nexport const useFetchAuthorList = (client: () => AxiosInstance, extSystemId: IntegerId) =>\n useApiFetchList<DamAuthor[]>(client, SYSTEM_CORE_DAM, ENTITY, END_POINT_LIST, { extSystemId })\n\nexport const fetchAuthorList = (\n client: () => AxiosInstance,\n extSystemId: number,\n pagination: Pagination,\n filterBag: FilterBag\n) =>\n apiFetchList<DamAuthor[]>(\n client,\n END_POINT_LIST,\n {\n extSystemId,\n },\n pagination,\n filterBag,\n SYSTEM_CORE_DAM,\n ENTITY\n )\n\nexport const createAuthor = (client: () => AxiosInstance, data: DamAuthor) =>\n apiCreateOne<DamAuthor>(client, data, END_POINT, {}, SYSTEM_CORE_DAM, ENTITY)\n","import { ref } from 'vue'\nimport type { IntegerId } from '@/types/common'\n\nconst cachedExtSystemId = ref<IntegerId>(0)\n\nexport function useExtSystemIdForCached() {\n return {\n cachedExtSystemId,\n }\n}\n","import type { DocId } from '@/types/common'\nimport { defineCached } from '@/composables/system/defineCached'\nimport type { DamAuthor, DamAuthorMinimal } from '@/components/damImage/uploadQueue/author/DamAuthor'\nimport { fetchAuthorListByIds } from '@/components/damImage/uploadQueue/api/authorApi'\nimport { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport { useExtSystemIdForCached } from '@/components/damImage/uploadQueue/composables/extSystemIdForCached'\n\nconst mapFullToMinimal = (author: DamAuthor): DamAuthorMinimal => ({\n id: author.id,\n name: author.name,\n identifier: author.identifier,\n reviewed: author.flags.reviewed,\n})\n\nconst mapIdToMinimal = (id: DocId): DamAuthorMinimal => {\n return { id: id, name: '', identifier: '', reviewed: false }\n}\n\nconst { cache, toFetch, fetch, add, addManual, addManualMinimal, has, get, isLoaded } = defineCached<\n DocId,\n DamAuthor,\n DamAuthorMinimal\n>(mapFullToMinimal, mapIdToMinimal, (ids) => {\n const { cachedExtSystemId } = useExtSystemIdForCached()\n const { damClient } = useCommonAdminCoreDamOptions()\n return fetchAuthorListByIds(damClient, cachedExtSystemId.value, ids)\n})\n\nexport const useDamCachedAuthors = () => {\n return {\n addManualToCachedAuthors: addManual,\n addManualMinimalToCachedAuthors: addManualMinimal,\n addToCachedAuthors: add,\n fetchCachedAuthors: fetch,\n toFetchCachedAuthors: toFetch,\n cachedAuthors: cache,\n hasCachedAuthor: has,\n getCachedAuthor: get,\n isLoadedCachedAuthor: isLoaded,\n }\n}\n\nexport const useDamCachedAuthorsForRemoteAutocomplete = () => {\n return {\n fetch,\n add,\n addManualMinimal,\n }\n}\n","import type { AxiosInstance } from 'axios'\nimport { apiFetchByIds } from '@/services/api/apiFetchByIds'\nimport type { DamKeyword } from '@/components/damImage/uploadQueue/keyword/DamKeyword'\nimport { SYSTEM_CORE_DAM } from '@/components/damImage/uploadQueue/api/damAssetApi'\nimport { apiCreateOne } from '@/services/api/apiCreateOne'\nimport { useApiFetchList } from '@/labs/api/useApiFetchList'\nimport type { Pagination } from '@/types/Pagination'\n// eslint-disable-next-line deprecation/no-deprecated-imports\nimport type { FilterBag } from '@/types/Filter'\n// eslint-disable-next-line deprecation/no-deprecated-imports\nimport { apiFetchList } from '@/services/api/apiFetchList'\n\nconst END_POINT = '/adm/v1/keyword'\nconst END_POINT_LIST = END_POINT + '/ext-system/:extSystemId'\nexport const ENTITY = 'keyword'\n\nexport const fetchKeywordListByIds = (client: () => AxiosInstance, extSystemId: number, ids: string[]) =>\n apiFetchByIds<DamKeyword[]>(\n client,\n ids,\n END_POINT_LIST + '/search',\n { extSystemId },\n SYSTEM_CORE_DAM,\n ENTITY,\n {},\n true\n )\n\nexport const useFetchKeywordList = (client: () => AxiosInstance, extSystemId: number) =>\n useApiFetchList<DamKeyword[]>(client, SYSTEM_CORE_DAM, ENTITY, END_POINT_LIST, { extSystemId })\n\n/**\n * @deprecated\n */\nexport const fetchKeywordList = (\n client: () => AxiosInstance,\n extSystemId: number,\n pagination: Pagination,\n filterBag: FilterBag\n) => apiFetchList<DamKeyword[]>(client, END_POINT_LIST, { extSystemId }, pagination, filterBag, SYSTEM_CORE_DAM, ENTITY)\n\nexport const createKeyword = (client: () => AxiosInstance, data: DamKeyword) =>\n apiCreateOne<DamKeyword>(client, data, END_POINT, {}, SYSTEM_CORE_DAM, ENTITY)\n","import type { DocId } from '@/types/common'\nimport { defineCached } from '@/composables/system/defineCached'\nimport type { DamKeyword, DamKeywordMinimal } from '@/components/damImage/uploadQueue/keyword/DamKeyword'\nimport { fetchKeywordListByIds } from '@/components/damImage/uploadQueue/api/keywordApi'\nimport { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport { useExtSystemIdForCached } from '@/components/damImage/uploadQueue/composables/extSystemIdForCached'\n\nconst mapFullToMinimal = (keyword: DamKeyword): DamKeywordMinimal => ({\n id: keyword.id,\n name: keyword.name,\n})\n\nconst mapIdToMinimal = (id: DocId): DamKeywordMinimal => {\n return { id: id, name: '' }\n}\n\nconst { cache, toFetch, fetch, add, addManual, addManualMinimal, has, get, isLoaded } = defineCached<\n DocId,\n DamKeyword,\n DamKeywordMinimal\n>(mapFullToMinimal, mapIdToMinimal, (ids) => {\n const { cachedExtSystemId } = useExtSystemIdForCached()\n const { damClient } = useCommonAdminCoreDamOptions()\n return fetchKeywordListByIds(damClient, cachedExtSystemId.value, ids)\n})\n\nexport const useDamCachedKeywords = () => {\n return {\n addManualToCachedKeywords: addManual,\n addManualMinimalToCachedKeywords: addManualMinimal,\n addToCachedKeywords: add,\n fetchCachedKeywords: fetch,\n toFetchCachedKeywords: toFetch,\n cachedKeywords: cache,\n hasCachedKeyword: has,\n getCachedKeyword: get,\n isLoadedCachedKeyword: isLoaded,\n }\n}\n\nexport const useCachedKeywordsForRemoteAutocomplete = () => {\n return {\n fetch,\n add,\n addManualMinimal,\n }\n}\n","import { AnzuApiResponseCodeError } from '@/model/error/AnzuApiResponseCodeError'\nimport { AnzuApiValidationError, axiosErrorResponseHasValidationData } from '@/model/error/AnzuApiValidationError'\nimport { replaceUrlParameters, type UrlParams } from '@/services/api/apiHelper'\nimport { isValidHTTPStatus } from '@/utils/response'\nimport type { AxiosInstance, AxiosRequestConfig } from 'axios'\nimport { AnzuApiForbiddenError, axiosErrorResponseIsForbidden } from '@/model/error/AnzuApiForbiddenError'\nimport { AnzuFatalError } from '@/model/error/AnzuFatalError'\nimport {\n AnzuApiForbiddenOperationError,\n axiosErrorResponseHasForbiddenOperationData,\n} from '@/model/error/AnzuApiForbiddenOperationError'\nimport { HTTP_STATUS_NO_CONTENT } from '@/composables/statusCodes'\nimport {\n AnzuApiDependencyExistsError,\n axiosErrorResponseHasDependencyExistsData,\n} from '@/model/error/AnzuApiDependencyExistsError'\n\n/**\n * @template T Type used for request payload, by default same as Response type\n * @template R Response type override, optional\n */\nexport const apiUpdateOne = <T, R = T>(\n client: () => AxiosInstance,\n object: T | Record<string, never> = {},\n urlTemplate: string,\n urlParams: UrlParams = {},\n system: string,\n entity: string,\n options: AxiosRequestConfig = {}\n): Promise<R> => {\n return new Promise((resolve, reject) => {\n client()\n .put(replaceUrlParameters(urlTemplate, urlParams), JSON.stringify(object), options)\n .then((res) => {\n if (!isValidHTTPStatus(res.status)) {\n return reject(new AnzuApiResponseCodeError(res.status))\n }\n if (res.data) {\n return resolve(res.data)\n }\n if (res.status === HTTP_STATUS_NO_CONTENT) {\n return resolve(null as R)\n }\n return reject(new AnzuFatalError())\n })\n .catch((err) => {\n if (axiosErrorResponseIsForbidden(err)) {\n return reject(new AnzuApiForbiddenError(err, err.config?.url))\n }\n if (axiosErrorResponseHasValidationData(err)) {\n return reject(new AnzuApiValidationError(err, system, entity, err))\n }\n if (axiosErrorResponseHasDependencyExistsData(err)) {\n return reject(new AnzuApiDependencyExistsError(err, system, entity, err))\n }\n if (axiosErrorResponseHasForbiddenOperationData(err)) {\n return reject(new AnzuApiForbiddenOperationError(err, err))\n }\n // todo catch another axios errors, for example timeout\n return reject(new AnzuFatalError(err))\n })\n })\n}\n","import type { AxiosInstance } from 'axios'\nimport type { DamUser, DamUserUpdateDto } from '@/components/dam/user/DamUser'\nimport { SYSTEM_CORE_DAM } from '@/components/damImage/uploadQueue/api/damAssetApi'\nimport { apiFetchByIds } from '@/services/api/apiFetchByIds'\nimport { apiUpdateOne } from '@/services/api/apiUpdateOne'\nimport { apiFetchOne } from '@/services/api/apiFetchOne'\nimport { useApiFetchList } from '@/labs/api/useApiFetchList'\n// eslint-disable-next-line deprecation/no-deprecated-imports\nimport { apiFetchList } from '@/services/api/apiFetchList'\nimport type { Pagination } from '@/types/Pagination'\n// eslint-disable-next-line deprecation/no-deprecated-imports\nimport type { FilterBag } from '@/types/Filter'\n\nconst END_POINT = '/adm/v1/user'\nexport const ENTITY = 'user'\n\nexport const fetchDamUserListByIds = (client: () => AxiosInstance, ids: number[]) =>\n apiFetchByIds<DamUser[]>(client, ids, END_POINT, {}, SYSTEM_CORE_DAM, ENTITY)\n\n/**\n * @deprecated\n */\nexport const fetchDamUserList = (client: () => AxiosInstance, pagination: Pagination, filterBag: FilterBag) =>\n apiFetchList<DamUser[]>(client, END_POINT, {}, pagination, filterBag, SYSTEM_CORE_DAM, ENTITY)\n\nexport const useFetchDamUserList = (client: () => AxiosInstance) =>\n useApiFetchList<DamUser[]>(client, SYSTEM_CORE_DAM, ENTITY, END_POINT)\n\nexport const updateDamUser = (client: () => AxiosInstance, id: number, data: DamUserUpdateDto) =>\n apiUpdateOne<DamUserUpdateDto, DamUser>(client, data, END_POINT + '/:id', { id }, SYSTEM_CORE_DAM, ENTITY)\n\nexport const fetchDamUser = (client: () => AxiosInstance, id: number) =>\n apiFetchOne<DamUser>(client, END_POINT + '/:id', { id }, SYSTEM_CORE_DAM, ENTITY)\n","import type { AnzuUserMinimal } from '@/types/AnzuUser'\nimport type { DamUser } from '@/components/dam/user/DamUser'\nimport type { IntegerId } from '@/types/common'\nimport { defineCached } from '@/composables/system/defineCached'\nimport { fetchDamUserListByIds } from '@/components/dam/user/userApi'\nimport { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\n\nconst mapFullToMinimal = (source: DamUser): AnzuUserMinimal => {\n return { id: source.id, email: source.email, avatar: source.avatar, person: source.person }\n}\n\nconst mapIdToMinimal = (id: IntegerId): AnzuUserMinimal => {\n return { id: id, email: '', person: { firstName: '', lastName: '', fullName: '' }, avatar: { color: '', text: '' } }\n}\n\nconst { cache, fetch, add, addManual, has, get, isLoaded } = defineCached<IntegerId, DamUser, AnzuUserMinimal>(\n mapFullToMinimal,\n mapIdToMinimal,\n (ids: IntegerId[]) => {\n const { damClient } = useCommonAdminCoreDamOptions()\n return fetchDamUserListByIds(damClient, ids)\n }\n)\n\nexport const useDamCachedUsers = () => {\n return {\n addManualToCachedUsers: addManual,\n addToCachedUsers: add,\n fetchCachedUsers: fetch,\n cachedUsers: cache,\n hasCachedUser: has,\n getCachedUser: get,\n isLoadedCachedUser: isLoaded,\n }\n}\n","import { ref } from 'vue'\n\nconst sidebarLeft = ref(false)\nconst sidebarRight = ref(false)\n\nexport function useSidebar() {\n const toggleSidebarLeft = () => {\n sidebarLeft.value ? closeSidebarLeft() : openSidebarLeft()\n }\n\n const openSidebarLeft = () => {\n sidebarLeft.value = true\n }\n\n const closeSidebarLeft = () => {\n sidebarLeft.value = false\n }\n\n const toggleSidebarRight = () => {\n sidebarRight.value ? closeSidebarRight() : openSidebarRight()\n }\n\n const openSidebarRight = () => {\n sidebarRight.value = true\n }\n\n const closeSidebarRight = () => {\n sidebarRight.value = false\n }\n\n return {\n sidebarLeft,\n sidebarRight,\n toggleSidebarLeft,\n openSidebarLeft,\n closeSidebarLeft,\n toggleSidebarRight,\n openSidebarRight,\n closeSidebarRight,\n }\n}\n","import { useAssetListFilter } from '@/model/coreDam/filter/AssetFilter'\nimport { type AssetSelectListItem, useAssetSelectStore } from '@/services/stores/coreDam/assetSelectStore'\nimport { storeToRefs } from 'pinia'\nimport type { Ref } from 'vue'\nimport { ref } from 'vue'\nimport { type AssetDetailItemDto, DamAssetType, type DamAssetTypeType } from '@/types/coreDam/Asset'\nimport { usePagination } from '@/labs/filters/pagination'\nimport { useAlerts } from '@/composables/system/alerts'\nimport type { DocId, IntegerId } from '@/types/common'\nimport { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport { fetchAsset, useFetchAssetList } from '@/components/damImage/uploadQueue/api/damAssetApi'\nimport type { DamConfigLicenceExtSystemReturnType } from '@/types/coreDam/DamConfig'\nimport { useAssetDetailStore } from '@/components/damImage/uploadQueue/composables/assetDetailStore'\nimport { useDamCachedAuthors } from '@/components/damImage/uploadQueue/author/cachedAuthors'\nimport { useDamCachedKeywords } from '@/components/damImage/uploadQueue/keyword/cachedKeywords'\nimport { useExtSystemIdForCached } from '@/components/damImage/uploadQueue/composables/extSystemIdForCached'\nimport { isUndefined } from '@/utils/common'\nimport { useDamCachedUsers } from '@/components/damImage/uploadQueue/author/cachedUsers'\nimport { useSidebar } from '@/components/dam/assetSelect/composables/assetSelectFilterSidebar'\nimport { SORT_BY_SCORE_DATE } from '@/composables/system/datatableColumns'\nimport { useFilterClearHelpers } from '@/labs/filters/filterFactory'\nimport { useDebounceFn } from '@vueuse/core'\n\nconst { pagination } = usePagination(SORT_BY_SCORE_DATE)\nconst detailLoading = ref(false)\n\nexport function useAssetSelectActions(\n configName = 'default',\n onDetailLoadedCallback?: (asset: AssetDetailItemDto) => void\n) {\n const { damClient } = useCommonAdminCoreDamOptions(configName)\n\n const assetSelectStore = useAssetSelectStore()\n const { selectedCount, selectedAssets, assetListItems, loader } = storeToRefs(assetSelectStore)\n const assetDetailStore = useAssetDetailStore()\n const { openSidebarRight } = useSidebar()\n\n const { showErrorsDefault } = useAlerts()\n const { filterData, filterConfig } = useAssetListFilter()\n\n const resolveTypeFilter = (assetType: DamAssetTypeType, inPodcast: boolean | null) => {\n if (inPodcast === true) {\n filterData.type = [DamAssetType.Audio]\n filterData.inPodcast = true\n return\n }\n filterData.type = [assetType]\n filterData.inPodcast = null\n }\n\n const fetchAssetListDebounced = useDebounceFn(async () => {\n await fetchAssetList()\n })\n\n const fetchAssetList = async () => {\n resolveTypeFilter(assetSelectStore.assetType, assetSelectStore.inPodcast)\n const { executeFetch } = useFetchAssetList(damClient, assetSelectStore.selectedLicenceId)\n try {\n assetSelectStore.showLoader()\n assetSelectStore.setList(await executeFetch(pagination, filterData, filterConfig))\n } catch (error) {\n showErrorsDefault(error)\n } finally {\n assetSelectStore.hideLoader()\n }\n }\n\n const fetchNextPage = async () => {\n if (assetSelectStore.loader) return\n pagination.value.page = pagination.value.page + 1\n resolveTypeFilter(assetSelectStore.assetType, assetSelectStore.inPodcast)\n const { executeFetch } = useFetchAssetList(damClient, assetSelectStore.selectedLicenceId)\n try {\n assetSelectStore.showLoader()\n assetSelectStore.appendList(await executeFetch(pagination, filterData, filterConfig))\n } catch (error) {\n showErrorsDefault(error)\n } finally {\n assetSelectStore.hideLoader()\n }\n }\n\n const { addToCachedAuthors, fetchCachedAuthors } = useDamCachedAuthors()\n const { addToCachedKeywords, fetchCachedKeywords } = useDamCachedKeywords()\n const { addToCachedUsers, fetchCachedUsers } = useDamCachedUsers()\n\n const onItemClick = async (data: { assetId: DocId; index: number }, extSystem: IntegerId) => {\n const { cachedExtSystemId } = useExtSystemIdForCached()\n openSidebarRight()\n assetSelectStore.toggleSelectedByIndex(data.index)\n assetSelectStore.setActiveByIndex(data.index)\n detailLoading.value = true\n try {\n const asset = await fetchAsset(damClient, data.assetId)\n cachedExtSystemId.value = extSystem\n addToCachedAuthors(asset.authors)\n addToCachedKeywords(asset.keywords)\n addToCachedUsers(asset.modifiedBy, asset.createdBy)\n fetchCachedAuthors()\n fetchCachedKeywords()\n fetchCachedUsers()\n if (!isUndefined(onDetailLoadedCallback)) onDetailLoadedCallback(asset)\n assetDetailStore.setAsset(asset)\n } catch (e) {\n showErrorsDefault(e)\n } finally {\n detailLoading.value = false\n }\n }\n\n const { clearAll } = useFilterClearHelpers()\n\n const resetAssetList = async () => {\n clearAll(filterData, filterConfig)\n resolveTypeFilter(assetSelectStore.assetType, assetSelectStore.inPodcast)\n pagination.value.page = 1\n await fetchAssetListDebounced()\n }\n\n const reset = async () => {\n clearAll(filterData, filterConfig)\n pagination.value.page = 1\n assetSelectStore.reset(true)\n assetDetailStore.reset()\n }\n\n const initStoreContext = (\n selectConfig: DamConfigLicenceExtSystemReturnType[],\n assetType: DamAssetTypeType,\n inPodcast: boolean | null,\n singleMode: boolean,\n minCount: number,\n maxCount: number\n ): void => {\n assetSelectStore.clearSelected()\n assetSelectStore.setAssetType(assetType)\n assetSelectStore.setSelectConfig(selectConfig)\n assetSelectStore.setSingleMode(singleMode)\n assetSelectStore.setMinCount(minCount)\n assetSelectStore.setMaxCount(maxCount)\n assetSelectStore.inPodcast = inPodcast\n }\n\n return {\n damClient,\n filterData,\n filterConfig,\n selectedCount,\n selectedAssets,\n pagination,\n loader,\n detailLoading,\n assetListItems: assetListItems as Ref<Array<AssetSelectListItem>>,\n getSelectedData: assetSelectStore.getSelectedData,\n onItemClick,\n fetchAssetListDebounced,\n fetchNextPage,\n resetAssetList,\n reset,\n initStoreContext,\n }\n}\n","import { computed, type Ref } from 'vue'\nimport type { AssetSearchListItemDto } from '@/types/coreDam/Asset'\nimport type { AssetSelectListItem } from '@/services/stores/coreDam/assetSelectStore'\n\nconst IMAGE_HEIGHT = 200\nconst IMAGE_BG_COLOR_DEFAULT = '#ccc'\n\nexport function useAssetItemActions(item: Readonly<Ref<AssetSelectListItem>>) {\n const asset = computed<AssetSearchListItemDto>(() => {\n return item.value.asset\n })\n\n const assetType = computed(() => {\n return asset.value.attributes.assetType\n })\n\n const assetStatus = computed(() => {\n return asset.value.attributes.assetStatus\n })\n\n const imageProperties = computed(() => {\n if (asset.value.mainFile && asset.value.mainFile.links && asset.value.mainFile.links.image_list) {\n return {\n url: asset.value.mainFile.links.image_list.url,\n width: asset.value.mainFile.links.image_list.width,\n height: asset.value.mainFile.links.image_list.height,\n bgColor: IMAGE_BG_COLOR_DEFAULT,\n }\n }\n return {\n url: undefined,\n width: undefined,\n height: IMAGE_HEIGHT,\n bgColor: IMAGE_BG_COLOR_DEFAULT,\n }\n })\n\n const tableImageProperties = computed(() => {\n if (asset.value.mainFile && asset.value.mainFile.links && asset.value.mainFile.links.image_table) {\n return {\n url: asset.value.mainFile.links.image_table.url,\n width: asset.value.mainFile.links.image_table.width,\n height: asset.value.mainFile.links.image_table.height,\n bgColor: IMAGE_BG_COLOR_DEFAULT,\n }\n }\n return {\n url: undefined,\n width: undefined,\n height: IMAGE_HEIGHT,\n bgColor: IMAGE_BG_COLOR_DEFAULT,\n }\n })\n\n return {\n asset,\n assetType,\n assetStatus,\n imageProperties,\n tableImageProperties,\n }\n}\n","export default \"data:image/jpeg;base64,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ADUAAAABAC0AAAAGAAAAAAABOEJJTQP4AAAAAABwAAD/////////////////////////////A+gAAAAA/////////////////////////////wPoAAAAAP////////////////////////////8D6AAAAAD/////////////////////////////A+gAADhCSU0ECAAAAAAAEAAAAAEAAAJAAAACQAAAAAA4QklNBB4AAAAAAAQAAAAAOEJJTQQaAAAAAANVAAAABgAAAAAAAAAAAAADhAAABkAAAAAQAHAAbABhAGMAZQBoAG8AbABkAGUAcgAtADEANgAtADkAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAABkAAAAOEAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAEAAAAAAABudWxsAAAAAgAAAAZib3VuZHNPYmpjAAAAAQAAAAAAAFJjdDEAAAAEAAAAAFRvcCBsb25nAAAAAAAAAABMZWZ0bG9uZwAAAAAAAAAAQnRvbWxvbmcAAAOEAAAAAFJnaHRsb25nAAAGQAAAAAZzbGljZXNWbExzAAAAAU9iamMAAAABAAAAAAAFc2xpY2UAAAASAAAAB3NsaWNlSURsb25nAAAAAAAAAAdncm91cElEbG9uZwAAAAAAAAAGb3JpZ2luZW51bQAAAAxFU2xpY2VPcmlnaW4AAAANYXV0b0dlbmVyYXRlZAAAAABUeXBlZW51bQAAAApFU2xpY2VUeXBlAAAAAEltZyAAAAAGYm91bmRzT2JqYwAAAAEAAAAAAABSY3QxAAAABAAAAABUb3AgbG9uZwAAAAAAAAAATGVmdGxvbmcAAAAAAAAAAEJ0b21sb25nAAADhAAAAABSZ2h0bG9uZwAABkAAAAADdXJsVEVYVAAAAAEAAAAAAABudWxsVEVYVAAAAAEAAAAAAABNc2dlVEVYVAAAAAEAAAAAAAZhbHRUYWdURVhUAAAAAQAAAAAADmNlbGxUZXh0SXNIVE1MYm9vbAEAAAAIY2VsbFRleHRURVhUAAAAAQAAAAAACWhvcnpBbGlnbmVudW0AAAAPRVNsaWNlSG9yekFsaWduAAAAB2RlZmF1bHQAAAAJdmVydEFsaWduZW51bQAAAA9FU2xpY2VWZXJ0QWxp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Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1wTU06RG9jdW1lbnRJRD0iMjc4M0ZDMUFGQTdBRThFREUyRDE3MjI5NTdCNEExQjAiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MGVlZDBlZGUtOGM3MC00OTljLWEyYjUtMzMwZmFmNWYxMjZmIiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9IjI3ODNGQzFBRkE3QUU4RURFMkQxNzIyOTU3QjRBMUIwIiBkYzpmb3JtYXQ9ImltYWdlL2pwZWciIHBob3Rvc2hvcDpMZWdhY3lJUFRDRGlnZXN0PSJDNzVEMTdFNTc0QjU2RUY1REJCRTM5OTRDMEU5Nzk1QyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9IiIgeG1wOkNyZWF0ZURhdGU9IjIwMTctMDQtMjFUMTI6MTk6MTkrMDE6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDE3LTA0LTI2VDE0OjIzOjU0KzAxOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDE3LTA0LTI2VDE0OjIzOjU0KzAxOjAwIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE3IChNYWNpbnRvc2gpIj4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NDU2NTBiMjEtMjM4Zi00MGNjLTlkNGEtNDZiZTMyOWUzYWExIiBzdEV2dDp3aGVuPSIyMDE3LTA0LTIxVDEyOjE5OjU3KzAxOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxNyAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MGVlZDBlZGUtOGM3MC00OTljLWEyYjUtMzMwZmFmNWYxMjZmIiBzdEV2dDp3aGVuPSIyMDE3LTA0LTI2VDE0OjIzOjU0KzAxOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxNyAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD94cGFja2V0IGVuZD0idyI/Pv/uAA5BZG9iZQBkAAAAAAH/2wCEAAYEBAcFBwsGBgsOCggKDhEODg4OERYTExMTExYRDAwMDAwMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBBwkJEwwTIhMTIhQODg4UFA4ODg4UEQwMDAwMEREMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDP/AABEIA4QGQAMBEQACEQEDEQH/3QAEAMj/xAGiAAAABwEBAQEBAAAAAAAAAAAEBQMCBgEABwgJCgsBAAICAwEBAQEBAAAAAAAAAAEAAgMEBQYHCAkKCxAAAgEDAwIEAgYHAwQCBgJzAQIDEQQABSESMUFRBhNhInGBFDKRoQcVsUIjwVLR4TMWYvAkcoLxJUM0U5KismNzwjVEJ5OjszYXVGR0w9LiCCaDCQoYGYSURUaktFbTVSga8uPzxNTk9GV1hZWltcXV5fVmdoaWprbG1ub2N0dXZ3eHl6e3x9fn9zhIWGh4iJiouMjY6PgpOUlZaXmJmam5ydnp+So6SlpqeoqaqrrK2ur6EQACAgECAwUFBAUGBAgDA20BAAIRAwQhEjFBBVETYSIGcYGRMqGx8BTB0eEjQhVSYnLxMyQ0Q4IWklMlomOywgdz0jXiRIMXVJMICQoYGSY2RRonZHRVN/Kjs8MoKdPj84SUpLTE1OT0ZXWFlaW1xdXl9UZWZnaGlqa2xtbm9kdXZ3eHl6e3x9fn9zhIWGh4iJiouMjY6Pg5SVlpeYmZqbnJ2en5KjpKWmp6ipqqusra6vr/2gAMAwEAAhEDEQA/AO4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/0O4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/0e4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/0u4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/0+4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/1O4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/1e4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/1u4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/1+4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/0O4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/0e4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/0u4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/0+4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/1O4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/1e4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/1u4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/1+4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/0O4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/0e4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/0u4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/0+4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/1O4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/1e4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/1u4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/1+4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/0O4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/0e4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/0u4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/0+4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/1O4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/1e4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/1u4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/1+4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/0O4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq3xJ7Yq7ifDFXcT4Yq7ifDFXcT4Yq7ifDFXcT4Yq7ifDFXcT4Yq7ifDFXcT4Yq7ifDFXcT4Yq7ifDFXcT4Yq7ifDFXcT4Yq7ifDFXcT4Yq7ifDFXcT4Yq7ifDFXcT4Yq7ifDFXcT4Yq7ifDFXcT4Yq7ifDFXcT4Yq7ifDFXcT4Yq7ifDFXcT4Yq7ifDFXcT4Yq7ifDFXcT4Yq7ifDFXcT4Yq7ifDFWsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/9HuGKuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KrJZViUvIeKKKknsMVYrqPm+SQlLEcE/nPU+4H7OKpNJqV1KavM5P+sf4Yqt+uT/79f/gjirvrk/8Av1/+COKu+uT/AO/X/wCCOKu+uT/79f8A4I4q765P/v1/+COKu+uT/wC/X/4I4q765P8A79f/AII4q765P/v1/wDgjirvrk/+/X/4I4q765P/AL9f/gjirvrk/wDv1/8Agjirvrk/+/X/AOCOKu+uT/79f/gjirvrk/8Av1/+COKu+uT/AO/X/wCCOKu+uT/79f8A4I4q765P/v1/+COKu+uT/wC/X/4I4q765P8A79f/AII4q765P/v1/wDgjirvrk/+/X/4I4q765P/AL9f/gjirvrk/wDv1/8Agjirvrk/+/X/AOCOKu+uT/79f/gjirvrk/8Av1/+COKu+uT/AO/X/wCCOKu+uT/79f8A4I4q765P/v1/+COKu+uT/wC/X/4I4q765P8A79f/AII4q765P/v1/wDgjirvrk/+/X/4I4q765P/AL9f/gjirvrk/wDv1/8Agjirvrk/+/X/AOCOKu+uT/79f/gjirvrk/8Av1/+COKuF5cD/dr/APBHFUZaeYb22NBJzX+V9x/zVirK9H1qLUlIUcJV+0h/Wv8AMuKpjirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir/AP/S7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirEPNmqGab6nGfgj3b/Kb/mwYqkOKuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVfBO1s6zREq6GoOKvQrC8W8gS4Xo43Hge4xVEYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/0+4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FWj2xV5tcyGWV5G6sxP44qsxVuONpGCICzHoB1xVX/AEbdf75k/wCBOKu/Rt1/vmT/AIE4q79G3X++ZP8AgTirv0bdf75k/wCBOKu/Rt1/vmT/AIE4q79G3X++ZP8AgTirv0bdf75k/wCBOKu/Rt1/vmT/AIE4q79G3X++ZP8AgTirv0bdf75k/wCBOKu/Rt1/vmT/AIE4q79G3X++ZP8AgTirv0bdf75k/wCBOKu/Rt1/vmT/AIE4q79G3X++ZP8AgTirv0bdf75k/wCBOKu/Rt1/vmT/AIE4q79G3X++ZP8AgTirv0bdf75k/wCBOKu/Rt1/vmT/AIE4q79G3X++ZP8AgTirv0bdf75k/wCBOKu/Rt1/vmT/AIE4q79G3X++ZP8AgTirv0bdf75k/wCBOKu/Rt1/vmT/AIE4q79G3X++ZP8AgTirv0bdf75k/wCBOKu/Rt1/vmT/AIE4q79G3X++ZP8AgTirv0bdf75k/wCBOKu/Rt1/vmT/AIE4q79G3X++ZP8AgTirv0bdf75k/wCBOKu/Rt1/vmT/AIE4q79G3X++ZP8AgTirv0bdf75k/wCBOKu/Rt1/vmT/AIE4qsltJoRyljZV8SKb4qo4q3irLfJkpa2kjJ2WTb6RirIMVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir/AP/U7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVaxV5o/2j8z+vFWsVR2gml9D/r4qz8HFW64q6uKurirq4q6uKurirq4q6uKurirq4q6uKurirq4q6uKurirq4q6uKurirq4q6uKurirq4q6uKurirq4q6uKurirq4q6uKurirq4q6uKurirq4q6uKurirq4qkPnE/6Gv/GQfqOKsOGKt4qyryUP3U//ABkX9WKsjxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kv//V7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirzN/tH5n9eKtYqjtC/3uh/18VZ+MVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdiqRecf8AeNf+Mg/UcVYcOmKt4qyryV/cz/8AGRf1YqyPFXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq//9buGKuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KvM3+0fmf14q1iqO0L/e6H/XxVn4xV2KuxVw36Yql15r1naMVkkBYfsr8R/DFUJ/i6yHaT/gf7cVd/i+y/4s/4Ef1xV3+L7L/iz/gR/XFXf4vsv+LP+BH9cVd/i+y/4s/4Ef1xV3+L7L/iz/gR/XFXf4vsv+LP+BH9cVd/i+y/4s/4Ef1xV3+L7L/iz/gR/XFXf4vsv+LP+BH9cVd/i+y/4s/4Ef1xV3+L7L/iz/gR/XFXf4vsv+LP+BH9cVd/i+y/4s/4Ef1xV3+L7L/iz/gR/XFXf4vsv+LP+BH9cVd/i+y/4s/4Ef1xV3+L7L/iz/gR/XFXf4vsv+LP+BH9cVd/i+y/4s/4Ef1xV3+L7L/iz/gR/XFXf4vsv+LP+BH9cVd/i+y/4s/4Ef1xV3+L7L/iz/gR/XFXf4vsv+LP+BH9cVd/i+y/4s/4Ef1xV3+L7L/iz/gR/XFXf4vsv+LP+BH9cVd/i+y/4s/4Ef1xV3+L7L/iz/gR/XFXf4vsv+LP+BH9cVd/i+y/4s/4Ef1xV3+L7L/iz/gR/XFUt8wa9b6hbiGEPyDg/EKbCuKsfGKt4qnXlzWoNOSRZ+VXYEcRXoPniqb/AOL7L/iz/gR/XFXf4vsvCT/gf7cVXR+bbJjQl19yv9Diqa211FdLzgcOPbFVXFXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq//1+4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq8zf7R+Z/XirWKo7Qv97of9fFWfjFXYq7FWH675ia4Zra2YrCNmYdWPen+TiqRAU6Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqvt7mW1cSwMUYeH8R3xVnOi6uupRVNFmSgdR/xIe2KpjirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir//0O4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq8zf7R+Z/XirWKo7Qv97of9fFWfjFXYqlnmS8a1smKGjueCnwr1/wCFxVggFP4Yq3irsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVR2h3htLyNx9ljwb5NtirPz1pirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir//R7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirzN/tH5n9eKtYqjtC/3uh/18VZ+MVdirHfOjEQwDsZG/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sVdirsVdirsVdirsVS3zDqP1G0ZlP7x/hX5nq3+xGKsDpireKuxV2KuxV2Ktd69D4+GKs+0LUfr9qsjf3q/A/wAx3/2WKphirsVdirsVccVYDr3+903+viqAxVtPtL8x+vFXpgxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV//X7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirzN/tH5n9eKtYqjtC/3uh/18VZ+MVdirHPOv9zB/xkb9WKsVxVpumKsx8m/7xt/xkP6hiqe4q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FWJecrgvcRwjoicvvxVj+KuxV2KuxV2KuxV2Ksh8mTH1ZYezKGH0bYqywYq7FXYq7FXHFWA69/vdN/r4qgMVbT7S/MfrxV6YMVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf//Q7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirzN/tH5n9eKtYqjtC/3uh/18VZ+MVdirHPOv9zB/xkb9WKsVxVpumKsx8m/7xt/xkP6hiqe4q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq44qwrzcCL817op+6uKpPirsVdirsVdirsVdiqd+UP97Sewjav4YqzIYq7FXYq7FXHFWA69/vdN/r4qgMVbT7S/MfrxV6YMVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf//R7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirzN/tH5n9eKtYqjtC/3uh/18VZ+MVdirHPOv9zB/xkb9WKsVxVpumKsx8m/7xt/xkP6hiqe4q7FXYq7FXYq7FXYq7FXYq7FXYqsmmSFfUlIVQQKn3xVdXemKt4q7FXYq7FXYq7FXYq7FXYq7FXYqxbzrbHnFcDoQUJ+W64qxvFXYq7FXYq7FXYq7FWTeS7U/vbk9NkH62xVk9KbYq7FXYq7FXHFWA69/vdN/r4qgMVbT7S/MfrxV6YMVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/S7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirzN/tH5n9eKtYqjtC/3uh/18VZ+MVdirHPOv9zB/xkb9WKsVxVpumKsx8m/7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nh+0vaux8a4qz/T76O+hWeLodiO4PcYqiMVdirsVdirsVdirsVdirsVdirsVdirsVS7Wdai01KP8Ux+yn8W/ycVYRd3kt5IZpzyc/cPliqlirKvJX9zP/wAZF/VirI8VccVYDr3+903+viqAxVtPtL8x+vFXpgxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV//S7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirzN/tH5n9eKtYqjtC/3uh/18VZ+MVdirHPOv9zB/xkb9WKsVxVpumKsx8m/7xt/xkP6hiqe4q7FXYq7FXYq7FUq8xamLK2IU0mkqq+w/afFWDYq3irsVdirsVdirsVdirsVdirsVR+jaq2mzcxvE2zj2/m/2OKs7SZZVWSM8kcVB8cVX4q7FXYq7FXYq7FXYq7FXYq7FXYqk2u+YksAYIKNc/gvz/wAr/JxVhskryuZJCWdtyTiq3FXYqyryV/cz/wDGRf1YqyPFXHFWA69/vdN/r4qgMVbT7S/MfrxV6YMVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/T7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsV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sVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir//X7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirzN/tH5n9eKtYqjtC/3uh/18VZ+MVdirHPOv9zB/xkb9WKsVxVpumKsx8m/7xt/xkP6hiqe4q7FXYqgNa1EadbtMPtt8Ke5P/NOKsBJJJLGpJrirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVR+jaq+nTch8Ub7Ovt/MP8AKGKsi/xhZeEn3D+uKu/xhZeEn3f24qtl842oUmNHZ+wIoK++KsVu72a9kM1weTdvAey4qpYq7FXYq7FXYq7FXYq7FWVeSv7mf/jIv6sVZHirjirAde/3um/18VQGKtp9pfmP14q9MGKuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kv//Q7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirzN/tH5n9eKtYqjtC/3uh/18VZ+MVdirHPOv9zB/xkb9WKsVxVpumKsx8m/7xt/xkP6hiqe4q7FXYqwTX9U+v3BK/wB1HVV9/wCZ/wDZYqluKuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KtcRiruIxV1BireKuxV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3+Cp/wDfsf3HFXf4Kn/37H9xxV3+Cp/9+x/ccVd/gqf/AH7H9xxV3+Cp/wDfsf3HFXf4Kn/37H9xxV3+Cp/9+x/ccVd/gqf/AH7H9xxV3+Cp/wDfsf3HFXf4Kn/37H9xxV3+Cp/9+x/ccVd/gqf/AH7H9xxV3+Cp/wDfsf3HFXf4Kn/37H9xxV3+Cp/9+x/ccVd/gqf/AH7H9xxV3+Cp/wDfsf3HFXf4Kn/37H9xxVr/AAVcf79T7jiq6PyVJX95MtPZTX8cVTjTfL9tYEOg5yD9tuv+xH7OKpnirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf//W7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/X7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/Q7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/R7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/S7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/T7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/U7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/V7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/W7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/X7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/Q7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/R7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/S7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/T7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/U7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/V7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/W7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/X7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/Q7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/R7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/S7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/T7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/U7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/V7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/W7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/X7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/Q7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/R7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/S7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/T7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/U7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/V7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/W7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/X7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/Z\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='100'%20height='100'%20viewBox='0%200%20100%20100'%3e%3cg%20id='_2K'%20data-name='2K'%20transform='translate(-10480%20-9321)'%3e%3cg%20id='Group_2714'%20data-name='Group%202714'%20transform='translate(4751%201906)'%3e%3ccircle%20id='Ellipse_18'%20data-name='Ellipse%2018'%20cx='50'%20cy='50'%20r='50'%20transform='translate(5729%207415)'%20opacity='0.5'/%3e%3c/g%3e%3cpath%20id='Path_7179'%20data-name='Path%207179'%20d='M-13.982,7.587a11.158,11.158,0,0,1,1.1-4.668q1-2.375,4.717-5.028A34.591,34.591,0,0,0-3.991-5.417,4.889,4.889,0,0,0-2.534-8.824a3.774,3.774,0,0,0-.835-2.506,2.942,2.942,0,0,0-2.391-1,2.916,2.916,0,0,0-2.9,1.589,7.879,7.879,0,0,0-.524,2.915H-13.72a11.461,11.461,0,0,1,1.1-4.9q1.869-3.554,6.64-3.554a8.425,8.425,0,0,1,6,2.088A7.216,7.216,0,0,1,2.249-8.66,7.473,7.473,0,0,1,.673-3.976a15.678,15.678,0,0,1-3.4,3.03L-4.594.381Q-6.35,1.625-7,2.182A5.279,5.279,0,0,0-8.086,3.476H2.282V7.587ZM6.261-16.554h4.963v9.946l9.327-9.946H27.07L17.163-6.625,27.578,7.587H21.092L13.654-2.951,11.224-.487V7.587H6.261Z'%20transform='translate(10522.981%209375.554)'%20fill='%23fff'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='100'%20height='100'%20viewBox='0%200%20100%20100'%3e%3cg%20id='_4K'%20data-name='4K'%20transform='translate(-10580%20-9321)'%3e%3cg%20id='Group_2715'%20data-name='Group%202715'%20transform='translate(4851%201906)'%3e%3ccircle%20id='Ellipse_18'%20data-name='Ellipse%2018'%20cx='50'%20cy='50'%20r='50'%20transform='translate(5729%207415)'%20opacity='0.5'/%3e%3c/g%3e%3cpath%20id='Path_7180'%20data-name='Path%207180'%20d='M2.562,2.477H-.124v5.11H-4.693V2.477h-9.4V-1.6l8.73-14.412H-.124V-1.175H2.562ZM-4.693-1.175V-11.4L-10.621-1.175ZM6.313-16.554h4.963v9.946L20.6-16.554h6.518L17.214-6.625,27.629,7.587H21.143L13.705-2.951,11.275-.487V7.587H6.313Z'%20transform='translate(10623.095%209375.554)'%20fill='%23fff'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='100'%20height='100'%20viewBox='0%200%20100%20100'%3e%3cg%20id='_8K'%20data-name='8K'%20transform='translate(-10680%20-9321)'%3e%3cg%20id='Group_2716'%20data-name='Group%202716'%20transform='translate(4951%201906)'%3e%3ccircle%20id='Ellipse_18'%20data-name='Ellipse%2018'%20cx='50'%20cy='50'%20r='50'%20transform='translate(5729%207415)'%20opacity='0.5'/%3e%3c/g%3e%3cpath%20id='Path_7181'%20data-name='Path%207181'%20d='M-9.246.692A3.814,3.814,0,0,0-8.337,3.41a3.284,3.284,0,0,0,2.514.966A3.284,3.284,0,0,0-3.309,3.41,3.814,3.814,0,0,0-2.4.692a3.78,3.78,0,0,0-.925-2.76,3.342,3.342,0,0,0-2.5-.942,3.342,3.342,0,0,0-2.5.942A3.78,3.78,0,0,0-9.246.692ZM-14.094,1a7.31,7.31,0,0,1,.9-3.619,5.734,5.734,0,0,1,2.645-2.44A5.548,5.548,0,0,1-12.79-7.538a6.929,6.929,0,0,1-.518-2.5,5.823,5.823,0,0,1,1.953-4.414A7.769,7.769,0,0,1-5.84-16.275,7.769,7.769,0,0,1-.324-14.449a5.823,5.823,0,0,1,1.953,4.414,6.952,6.952,0,0,1-.516,2.5A4.77,4.77,0,0,1-1.123-5.221a6.6,6.6,0,0,1,2.649,2.6A7.406,7.406,0,0,1,2.415,1,6.768,6.768,0,0,1,.193,6.1a8.664,8.664,0,0,1-6.205,2.1q-3.984,0-6.033-2.1A7.043,7.043,0,0,1-14.094,1ZM-8.837-9.511A2.9,2.9,0,0,0-8.04-7.4a2.939,2.939,0,0,0,2.209.819A2.906,2.906,0,0,0-3.623-7.4a2.937,2.937,0,0,0,.78-2.113,3.009,3.009,0,0,0-.78-2.2,2.956,2.956,0,0,0-2.209-.794,2.99,2.99,0,0,0-2.209.794A2.972,2.972,0,0,0-8.837-9.511Zm15.15-7.042h4.963v9.946L20.6-16.554h6.518L17.214-6.625,27.629,7.587H21.143L13.705-2.951,11.275-.487V7.587H6.313Z'%20transform='translate(10723.095%209375.554)'%20fill='%23fff'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='100'%20height='100'%20viewBox='0%200%20100%20100'%3e%3cg%20id='QHD'%20transform='translate(-10380%20-9321)'%3e%3cg%20id='Group_2713'%20data-name='Group%202713'%20transform='translate(4651%201906)'%3e%3ccircle%20id='Ellipse_18'%20data-name='Ellipse%2018'%20cx='50'%20cy='50'%20r='50'%20transform='translate(5729%207415)'%20opacity='0.5'/%3e%3c/g%3e%3cpath%20id='Path_7178'%20data-name='Path%207178'%20d='M-12.888,4.215A6.477,6.477,0,0,0-11.217,4a8.316,8.316,0,0,0,1.131-.41L-12.53,1.267l2.592-2.706L-7.485.872a11.391,11.391,0,0,0,.8-2.063,11.878,11.878,0,0,0,.36-3.095,10.307,10.307,0,0,0-1.662-6.28,5.692,5.692,0,0,0-4.856-2.219,5.922,5.922,0,0,0-4.782,2.129q-1.785,2.129-1.785,6.371,0,4.962,2.556,7.108A5.958,5.958,0,0,0-12.888,4.215Zm11.61-8.86A16.059,16.059,0,0,1-2.065.76,8.992,8.992,0,0,1-3.942,4.209l2.772,2.61L-3.8,9.564-6.7,6.813A12.165,12.165,0,0,1-9,7.947a12.314,12.314,0,0,1-3.885.543,11.121,11.121,0,0,1-7.8-2.817q-3.738-3.39-3.738-9.957,0-6.616,3.832-10.007a11.313,11.313,0,0,1,7.78-2.768,11.157,11.157,0,0,1,7.861,2.932Q-1.278-10.737-1.278-4.645ZM2.538,7.818v-24.14H7.549v9.2h9.385v-9.2h5.012V7.818H16.934V-2.958H7.549V7.818ZM31.691-12.129V3.626H36.35A5.031,5.031,0,0,0,41.336.1a12.4,12.4,0,0,0,.771-4.6,11.315,11.315,0,0,0-1.156-5.658q-1.156-1.973-4.6-1.973ZM37.2-16.322a12.707,12.707,0,0,1,3.737.524,7.976,7.976,0,0,1,4.114,3.063,10.738,10.738,0,0,1,1.721,3.9,18.7,18.7,0,0,1,.459,4A16.034,16.034,0,0,1,45.3,3.314a8.728,8.728,0,0,1-8.1,4.5H26.794v-24.14Z'%20transform='translate(10418.421%209375.059)'%20fill='%23fff'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='100'%20height='100'%20viewBox='0%200%20100%20100'%3e%3cg%20id='Full_HD'%20data-name='Full%20HD'%20transform='translate(-10280%20-9321)'%3e%3cg%20id='Group_2712'%20data-name='Group%202712'%20transform='translate(4551%201906)'%3e%3ccircle%20id='Ellipse_18'%20data-name='Ellipse%2018'%20cx='50'%20cy='50'%20r='50'%20transform='translate(5729%207415)'%20opacity='0.5'/%3e%3c/g%3e%3cpath%20id='Path_7177'%20data-name='Path%207177'%20d='M-21.883-16.521H-4.669v4.242h-12.2v5.552H-6.176v4.193H-16.871V7.587h-5.012ZM-1.426,7.587v-24.14H3.585v9.2H12.97v-9.2h5.012V7.587H12.97V-3.19H3.585V7.587ZM27.727-12.361V3.394h4.659A5.031,5.031,0,0,0,37.372-.127a12.4,12.4,0,0,0,.771-4.6,11.315,11.315,0,0,0-1.156-5.658q-1.156-1.973-4.6-1.973Zm5.511-4.193a12.707,12.707,0,0,1,3.737.524,7.976,7.976,0,0,1,4.114,3.063,10.738,10.738,0,0,1,1.721,3.9,18.7,18.7,0,0,1,.459,4,16.034,16.034,0,0,1-1.934,8.156,8.728,8.728,0,0,1-8.1,4.5H22.83v-24.14Z'%20transform='translate(10318.883%209375.554)'%20fill='%23fff'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='100'%20height='100'%20viewBox='0%200%20100%20100'%3e%3cg%20id='Slot'%20transform='translate(-10080%20-9321)'%3e%3cg%20id='Group_2710'%20data-name='Group%202710'%20transform='translate(10080%209321)'%3e%3cg%20id='Group_2668'%20data-name='Group%202668'%20transform='translate(0%200)'%3e%3ccircle%20id='Ellipse_18'%20data-name='Ellipse%2018'%20cx='50'%20cy='50'%20r='50'%20opacity='0.5'/%3e%3c/g%3e%3c/g%3e%3cg%20id='Group_2711'%20data-name='Group%202711'%20transform='translate(10108.517%209349.516)'%3e%3cg%20id='Layer_2'%20data-name='Layer%202'%20transform='translate(0%200)'%3e%3cpath%20id='Path_7172'%20data-name='Path%207172'%20d='M18.322,17H9.371A5.371,5.371,0,0,0,4,22.371v8.951a5.371,5.371,0,0,0,5.371,5.371h8.951a5.371,5.371,0,0,0,5.371-5.371V22.371A5.371,5.371,0,0,0,18.322,17Zm1.79,14.322a1.79,1.79,0,0,1-1.79,1.79H9.371a1.79,1.79,0,0,1-1.79-1.79V22.371a1.79,1.79,0,0,1,1.79-1.79h8.951a1.79,1.79,0,0,1,1.79,1.79Z'%20transform='translate(-4%206.273)'%20fill='%23fff'/%3e%3cpath%20id='Path_7173'%20data-name='Path%207173'%20d='M31.322,17H22.371A5.371,5.371,0,0,0,17,22.371v8.951a5.371,5.371,0,0,0,5.371,5.371h8.951a5.371,5.371,0,0,0,5.371-5.371V22.371A5.371,5.371,0,0,0,31.322,17Zm1.79,14.322a1.79,1.79,0,0,1-1.79,1.79H22.371a1.79,1.79,0,0,1-1.79-1.79V22.371a1.79,1.79,0,0,1,1.79-1.79h8.951a1.79,1.79,0,0,1,1.79,1.79Z'%20transform='translate(6.273%206.273)'%20fill='%23fff'/%3e%3cpath%20id='Path_7174'%20data-name='Path%207174'%20d='M18.322,4H9.371A5.371,5.371,0,0,0,4,9.371v8.951a5.371,5.371,0,0,0,5.371,5.371h8.951a5.371,5.371,0,0,0,5.371-5.371V9.371A5.371,5.371,0,0,0,18.322,4Zm1.79,14.322a1.79,1.79,0,0,1-1.79,1.79H9.371a1.79,1.79,0,0,1-1.79-1.79V9.371a1.79,1.79,0,0,1,1.79-1.79h8.951a1.79,1.79,0,0,1,1.79,1.79Z'%20transform='translate(-4%20-4)'%20fill='%23fff'/%3e%3cpath%20id='Path_7175'%20data-name='Path%207175'%20d='M18.79,15.637h6.266V21.9a1.79,1.79,0,1,0,3.581,0V15.637H34.9a1.79,1.79,0,1,0,0-3.581H28.637V5.79a1.79,1.79,0,0,0-3.581,0v6.266H18.79a1.79,1.79,0,0,0,0,3.581Z'%20transform='translate(6.273%20-4)'%20fill='%23fff'/%3e%3c/g%3e%3c/g%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='100'%20height='100'%20viewBox='0%200%20100%20100'%3e%3cg%20id='Low'%20transform='translate(-10180%20-9321)'%3e%3cg%20id='Group_2709'%20data-name='Group%202709'%20transform='translate(4451%201906)'%3e%3ccircle%20id='Ellipse_18'%20data-name='Ellipse%2018'%20cx='50'%20cy='50'%20r='50'%20transform='translate(5729%207415)'%20opacity='0.5'/%3e%3c/g%3e%3cpath%20id='Path_7176'%20data-name='Path%207176'%20d='M-14.218-16.322h5.044v19.8H2.881v4.34h-17.1ZM16.9,4.215A6.477,6.477,0,0,0,18.574,4a8.316,8.316,0,0,0,1.131-.41L17.261,1.267l2.592-2.706L22.306.872a11.391,11.391,0,0,0,.8-2.063,11.878,11.878,0,0,0,.36-3.095,10.307,10.307,0,0,0-1.662-6.28,5.692,5.692,0,0,0-4.856-2.219,5.922,5.922,0,0,0-4.782,2.129q-1.785,2.129-1.785,6.371,0,4.962,2.556,7.108A5.958,5.958,0,0,0,16.9,4.215Zm11.61-8.86a16.059,16.059,0,0,1-.786,5.4,8.992,8.992,0,0,1-1.877,3.449l2.772,2.61L25.99,9.564l-2.9-2.751A12.165,12.165,0,0,1,20.8,7.947a12.314,12.314,0,0,1-3.885.543,11.121,11.121,0,0,1-7.8-2.817Q5.37,2.283,5.37-4.285,5.37-10.9,9.2-14.291a11.313,11.313,0,0,1,7.78-2.768,11.157,11.157,0,0,1,7.861,2.932Q28.513-10.737,28.513-4.645Z'%20transform='translate(10222.799%209374.746)'%20fill='%23fff'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='100'%20height='100'%20viewBox='0%200%20100%20100'%3e%3cdefs%3e%3cclipPath%20id='clip-path'%3e%3cpath%20id='Path_7158'%20data-name='Path%207158'%20d='M0,349.208A5.911,5.911,0,1,0,5.911,343.3,5.911,5.911,0,0,0,0,349.208'%20transform='translate(0%20-343.297)'%20fill='%23fff'/%3e%3c/clipPath%3e%3cclipPath%20id='clip-path-2'%3e%3cpath%20id='Path_7159'%20data-name='Path%207159'%20d='M0,167.86a20.2,20.2,0,0,1,20.2,20.2h8.375A28.572,28.572,0,0,0,0,159.485Z'%20transform='translate(-0.001%20-159.485)'%20fill='%23fff'/%3e%3c/clipPath%3e%3cclipPath%20id='clip-path-3'%3e%3cpath%20id='Path_7160'%20data-name='Path%207160'%20d='M0,0V8.621A34.483,34.483,0,0,1,34.484,43.1h8.621A43.1,43.1,0,0,0,0,0Z'%20transform='translate(-0.001%200)'%20fill='%23fff'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20id='RSS'%20transform='translate(-5652%20-7415)'%3e%3ccircle%20id='Ellipse_16'%20data-name='Ellipse%2016'%20cx='50'%20cy='50'%20r='50'%20transform='translate(5652%207415)'%20opacity='0.5'/%3e%3cg%20id='Group_2625'%20data-name='Group%202625'%20transform='translate(5683.674%207441.939)'%3e%3cg%20id='Group_2624'%20data-name='Group%202624'%20transform='translate(0)'%3e%3cg%20id='Group_2619'%20data-name='Group%202619'%20transform='translate(0%2031.281)'%3e%3cg%20id='Group_2618'%20data-name='Group%202618'%20clip-path='url(%23clip-path)'%3e%3crect%20id='Rectangle_2677'%20data-name='Rectangle%202677'%20width='11.823'%20height='11.823'%20fill='%23fff'/%3e%3c/g%3e%3c/g%3e%3cg%20id='Group_2621'%20data-name='Group%202621'%20transform='translate(0%2014.532)'%3e%3cg%20id='Group_2620'%20data-name='Group%202620'%20clip-path='url(%23clip-path-2)'%3e%3crect%20id='Rectangle_2678'%20data-name='Rectangle%202678'%20width='28.572'%20height='28.572'%20transform='translate(0%200)'%20fill='%23fff'/%3e%3c/g%3e%3c/g%3e%3cg%20id='Group_2623'%20data-name='Group%202623'%20transform='translate(0)'%3e%3cg%20id='Group_2622'%20data-name='Group%202622'%20clip-path='url(%23clip-path-3)'%3e%3crect%20id='Rectangle_2679'%20data-name='Rectangle%202679'%20width='43.104'%20height='43.104'%20transform='translate(0)'%20fill='%23fff'/%3e%3c/g%3e%3c/g%3e%3c/g%3e%3c/g%3e%3c/g%3e%3c/svg%3e\"","import svg2k from '@/assets/dam-meta-icons/2k.svg'\nimport svg4k from '@/assets/dam-meta-icons/4k.svg'\nimport svg8k from '@/assets/dam-meta-icons/8k.svg'\nimport svgqhd from '@/assets/dam-meta-icons/qhd.svg'\nimport svgfhd from '@/assets/dam-meta-icons/fhd.svg'\nimport svgslot from '@/assets/dam-meta-icons/slot.svg'\nimport svglow from '@/assets/dam-meta-icons/low.svg'\nimport svgrss from '@/assets/dam-meta-icons/rss.svg'\n\nexport const DIMENSIONS_CONFIG = [\n {\n titleT: 'common.damImage.asset.metaIcons.fullHd',\n width: 1920,\n height: 1080,\n svgSrc: svgfhd,\n },\n {\n titleT: 'common.damImage.asset.metaIcons.2k',\n width: 2048,\n height: 1080,\n svgSrc: svg2k,\n },\n {\n titleT: 'common.damImage.asset.metaIcons.qhd',\n width: 2560,\n height: 1440,\n svgSrc: svgqhd,\n },\n {\n titleT: 'common.damImage.asset.metaIcons.4k',\n width: 3840,\n height: 2160,\n svgSrc: svg4k,\n },\n {\n titleT: 'common.damImage.asset.metaIcons.8k',\n width: 7680,\n height: 4320,\n svgSrc: svg8k,\n },\n]\nexport const ICON_SLOTS = svgslot\nexport const ICON_RSS = svgrss\nexport const ICON_LOW = svglow\nexport const LOW_DIMENSION = 600\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { type AssetFileProperties, DamAssetType, type DamAssetTypeType } from '@/types/coreDam/Asset'\nimport {\n DIMENSIONS_CONFIG,\n ICON_LOW,\n ICON_RSS,\n ICON_SLOTS,\n LOW_DIMENSION,\n} from '@/components/damImage/uploadQueue/composables/assetImageIconsConfig'\nimport { useDamConfigStore } from '@/components/damImage/uploadQueue/composables/damConfigStore'\n\nconst props = withDefaults(\n defineProps<{\n assetType: DamAssetTypeType\n assetFileProperties: AssetFileProperties\n disableAbsolute?: boolean\n }>(),\n {\n disableAbsolute: false,\n }\n)\n\nconst { t } = useI18n()\n\nconst checkDimensions = (icons: string[], titles: string[]) => {\n if (props.assetFileProperties.width === 0 || props.assetFileProperties.height === 0) {\n return\n }\n if (props.assetFileProperties.width < LOW_DIMENSION || props.assetFileProperties.height < LOW_DIMENSION) {\n icons.push(ICON_LOW)\n titles.push(t('common.damImage.asset.metaIcons.low'))\n return\n }\n if (props.assetType !== DamAssetType.Video) return\n for (let i = 0; i < DIMENSIONS_CONFIG.length; i++) {\n if (\n props.assetFileProperties.width === DIMENSIONS_CONFIG[i].width &&\n props.assetFileProperties.height === DIMENSIONS_CONFIG[i].height\n ) {\n icons.push(DIMENSIONS_CONFIG[i].svgSrc)\n titles.push(t(DIMENSIONS_CONFIG[i].titleT))\n break\n }\n }\n}\n\nconst checkDistributions = (icons: string[], titles: string[]) => {\n const damConfigStore = useDamConfigStore()\n for (let i = 0; i < props.assetFileProperties.distributesInServices.length; i++) {\n const iconPath =\n damConfigStore.damPrvConfig.distributionServices[props.assetFileProperties.distributesInServices[i]]?.iconPath\n if (iconPath.length > 0 && !icons.includes(iconPath)) {\n icons.push(iconPath)\n titles.push(\n damConfigStore.damPrvConfig.distributionServices[props.assetFileProperties.distributesInServices[i]].title\n )\n }\n }\n}\n\nconst data = computed(() => {\n const icons: string[] = []\n const titles: string[] = []\n\n if (props.assetFileProperties.slotNames.length > 1) {\n icons.push(ICON_SLOTS)\n titles.push(t('common.damImage.asset.metaIcons.slots'))\n }\n if (props.assetFileProperties.fromRss) {\n icons.push(ICON_RSS)\n titles.push(t('common.damImage.asset.metaIcons.rss'))\n }\n checkDimensions(icons, titles)\n checkDistributions(icons, titles)\n\n return { icons, titles }\n})\n</script>\n\n<template>\n <div\n v-show=\"data.icons.length > 0\"\n class=\"asset-image__meta-icons\"\n :class=\"{ 'asset-image__meta-icons-absolute': !disableAbsolute }\"\n >\n <img\n v-for=\"(item, index) in data.icons\"\n :key=\"item\"\n class=\"img-svg\"\n :src=\"item\"\n alt=\"\"\n :title=\"data.titles[index] || ''\"\n >\n </div>\n</template>\n\n<style lang=\"scss\">\n.asset-image__meta-icons-absolute {\n position: absolute;\n left: 6px;\n top: 163px;\n}\n\n.asset-image__meta-icons {\n display: flex;\n\n img.img-svg {\n height: 30px;\n padding: 2px;\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport {\n type AssetFileProperties,\n DamAssetStatus,\n type DamAssetStatusType,\n DamAssetType,\n type DamAssetTypeType,\n} from '@/types/coreDam/Asset'\nimport placeholder16x9 from '@/assets/image/placeholder16x9.jpg'\nimport { isUndefined } from '@/lib'\nimport AssetImageMetaIcons from '@/components/damImage/uploadQueue/components/AssetImageMetaIcons.vue'\n\nconst props = withDefaults(\n defineProps<{\n src?: string\n assetType?: DamAssetTypeType\n assetStatus?: DamAssetStatusType\n backgroundColor?: string\n width?: number\n height?: number\n fallbackHeight?: number\n iconSize?: number\n iconColor?: string\n showMetaIcons?: boolean\n assetFileProperties?: AssetFileProperties | undefined\n }>(),\n {\n assetType: DamAssetType.Image,\n assetStatus: DamAssetStatus.WithFile,\n src: undefined,\n backgroundColor: '#ccc',\n width: undefined,\n height: undefined,\n fallbackHeight: 200,\n iconSize: 80,\n iconColor: '#505050',\n showMetaIcons: false,\n assetFileProperties: undefined,\n }\n)\nconst emit = defineEmits<{\n (e: 'error'): void\n}>()\n\nconst onError = () => {\n emit('error')\n}\n\nconst icon = computed(() => {\n if (props.assetStatus === DamAssetStatus.Deleting) return 'mdi-trash-can'\n switch (props.assetType) {\n case DamAssetType.Audio:\n return props.assetStatus === DamAssetStatus.WithFile ? 'mdi-music' : 'mdi-music-off'\n case DamAssetType.Document:\n return props.assetStatus === DamAssetStatus.WithFile ? 'mdi-note' : 'mdi-note-off'\n case DamAssetType.Video:\n return props.assetStatus === DamAssetStatus.WithFile ? 'mdi-video' : 'mdi-video-off'\n case DamAssetType.Image:\n return props.assetStatus === DamAssetStatus.WithFile ? 'mdi-image' : 'mdi-image-off'\n default:\n return ''\n }\n})\n\nconst srcComputed = computed(() => {\n return isUndefined(props.src) ? placeholder16x9 : props.src\n})\n\nconst showIconComputed = computed(() => {\n if (props.assetType === DamAssetType.Image && props.src) return false\n return true\n})\n</script>\n\n<template>\n <div\n v-if=\"assetStatus === DamAssetStatus.WithFile && src\"\n class=\"anzu-common-asset-image anzu-common-asset-image--img position-relative\"\n :style=\"{ width: width + 'px' }\"\n >\n <img\n class=\"anzu-common-asset-image__img\"\n :src=\"srcComputed\"\n :width=\"width\"\n :height=\"height\"\n alt=\"\"\n loading=\"lazy\"\n :style=\"'background-color:' + backgroundColor\"\n @onerror=\"onError\"\n >\n <div\n v-if=\"showIconComputed\"\n class=\"anzu-common-asset-image__icon-wrapper\"\n >\n <div\n class=\"anzu-common-asset-image__icon-circle\"\n :style=\"{ padding: iconSize / 4 + 'px' }\"\n >\n <VIcon\n v-if=\"icon.length\"\n :size=\"iconSize\"\n :icon=\"icon\"\n :color=\"iconColor\"\n class=\"anzu-common-asset-image__icon\"\n />\n </div>\n </div>\n <AssetImageMetaIcons\n v-if=\"showMetaIcons && assetFileProperties\"\n :asset-file-properties=\"assetFileProperties\"\n :asset-type=\"assetType\"\n />\n </div>\n <div\n v-else\n :style=\"{ height: fallbackHeight + 'px', backgroundColor: backgroundColor }\"\n style=\"width: 100%\"\n class=\"asset-image asset-image--placeholder d-flex align-center justify-center\"\n >\n <div\n v-if=\"showIconComputed\"\n class=\"asset-image__icon-wrapper\"\n >\n <div\n class=\"asset-image__icon-circle\"\n :style=\"{ padding: iconSize / 4 + 'px' }\"\n >\n <VIcon\n v-if=\"icon.length\"\n :size=\"iconSize\"\n :icon=\"icon\"\n :color=\"iconColor\"\n class=\"asset-image__icon\"\n />\n </div>\n </div>\n <AssetImageMetaIcons\n v-if=\"showMetaIcons && assetFileProperties\"\n :asset-file-properties=\"assetFileProperties\"\n :asset-type=\"assetType\"\n />\n </div>\n</template>\n\n<style lang=\"scss\">\n.anzu-common-asset-image {\n position: relative;\n\n &__icon-wrapper {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n &__icon-circle {\n border-radius: 100%;\n background-color: rgb(204 204 204 / 50%);\n }\n}\n</style>\n","!function(t,s){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=s():\"function\"==typeof define&&define.amd?define(s):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs_plugin_duration=s()}(this,(function(){\"use strict\";var t,s,n=1e3,i=6e4,e=36e5,r=864e5,o=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,u=31536e6,d=2628e6,a=/^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/,h={years:u,months:d,days:r,hours:e,minutes:i,seconds:n,milliseconds:1,weeks:6048e5},c=function(t){return t instanceof g},f=function(t,s,n){return new g(t,n,s.$l)},m=function(t){return s.p(t)+\"s\"},l=function(t){return t<0},$=function(t){return l(t)?Math.ceil(t):Math.floor(t)},y=function(t){return Math.abs(t)},v=function(t,s){return t?l(t)?{negative:!0,format:\"\"+y(t)+s}:{negative:!1,format:\"\"+t+s}:{negative:!1,format:\"\"}},g=function(){function l(t,s,n){var i=this;if(this.$d={},this.$l=n,void 0===t&&(this.$ms=0,this.parseFromMilliseconds()),s)return f(t*h[m(s)],this);if(\"number\"==typeof t)return this.$ms=t,this.parseFromMilliseconds(),this;if(\"object\"==typeof t)return Object.keys(t).forEach((function(s){i.$d[m(s)]=t[s]})),this.calMilliseconds(),this;if(\"string\"==typeof t){var e=t.match(a);if(e){var r=e.slice(2).map((function(t){return null!=t?Number(t):0}));return this.$d.years=r[0],this.$d.months=r[1],this.$d.weeks=r[2],this.$d.days=r[3],this.$d.hours=r[4],this.$d.minutes=r[5],this.$d.seconds=r[6],this.calMilliseconds(),this}}return this}var y=l.prototype;return y.calMilliseconds=function(){var t=this;this.$ms=Object.keys(this.$d).reduce((function(s,n){return s+(t.$d[n]||0)*h[n]}),0)},y.parseFromMilliseconds=function(){var t=this.$ms;this.$d.years=$(t/u),t%=u,this.$d.months=$(t/d),t%=d,this.$d.days=$(t/r),t%=r,this.$d.hours=$(t/e),t%=e,this.$d.minutes=$(t/i),t%=i,this.$d.seconds=$(t/n),t%=n,this.$d.milliseconds=t},y.toISOString=function(){var t=v(this.$d.years,\"Y\"),s=v(this.$d.months,\"M\"),n=+this.$d.days||0;this.$d.weeks&&(n+=7*this.$d.weeks);var i=v(n,\"D\"),e=v(this.$d.hours,\"H\"),r=v(this.$d.minutes,\"M\"),o=this.$d.seconds||0;this.$d.milliseconds&&(o+=this.$d.milliseconds/1e3,o=Math.round(1e3*o)/1e3);var u=v(o,\"S\"),d=t.negative||s.negative||i.negative||e.negative||r.negative||u.negative,a=e.format||r.format||u.format?\"T\":\"\",h=(d?\"-\":\"\")+\"P\"+t.format+s.format+i.format+a+e.format+r.format+u.format;return\"P\"===h||\"-P\"===h?\"P0D\":h},y.toJSON=function(){return this.toISOString()},y.format=function(t){var n=t||\"YYYY-MM-DDTHH:mm:ss\",i={Y:this.$d.years,YY:s.s(this.$d.years,2,\"0\"),YYYY:s.s(this.$d.years,4,\"0\"),M:this.$d.months,MM:s.s(this.$d.months,2,\"0\"),D:this.$d.days,DD:s.s(this.$d.days,2,\"0\"),H:this.$d.hours,HH:s.s(this.$d.hours,2,\"0\"),m:this.$d.minutes,mm:s.s(this.$d.minutes,2,\"0\"),s:this.$d.seconds,ss:s.s(this.$d.seconds,2,\"0\"),SSS:s.s(this.$d.milliseconds,3,\"0\")};return n.replace(o,(function(t,s){return s||String(i[t])}))},y.as=function(t){return this.$ms/h[m(t)]},y.get=function(t){var s=this.$ms,n=m(t);return\"milliseconds\"===n?s%=1e3:s=\"weeks\"===n?$(s/h[n]):this.$d[n],s||0},y.add=function(t,s,n){var i;return i=s?t*h[m(s)]:c(t)?t.$ms:f(t,this).$ms,f(this.$ms+i*(n?-1:1),this)},y.subtract=function(t,s){return this.add(t,s,!0)},y.locale=function(t){var s=this.clone();return s.$l=t,s},y.clone=function(){return f(this.$ms,this)},y.humanize=function(s){return t().add(this.$ms,\"ms\").locale(this.$l).fromNow(!s)},y.valueOf=function(){return this.asMilliseconds()},y.milliseconds=function(){return this.get(\"milliseconds\")},y.asMilliseconds=function(){return this.as(\"milliseconds\")},y.seconds=function(){return this.get(\"seconds\")},y.asSeconds=function(){return this.as(\"seconds\")},y.minutes=function(){return this.get(\"minutes\")},y.asMinutes=function(){return this.as(\"minutes\")},y.hours=function(){return this.get(\"hours\")},y.asHours=function(){return this.as(\"hours\")},y.days=function(){return this.get(\"days\")},y.asDays=function(){return this.as(\"days\")},y.weeks=function(){return this.get(\"weeks\")},y.asWeeks=function(){return this.as(\"weeks\")},y.months=function(){return this.get(\"months\")},y.asMonths=function(){return this.as(\"months\")},y.years=function(){return this.get(\"years\")},y.asYears=function(){return this.as(\"years\")},l}(),p=function(t,s,n){return t.add(s.years()*n,\"y\").add(s.months()*n,\"M\").add(s.days()*n,\"d\").add(s.hours()*n,\"h\").add(s.minutes()*n,\"m\").add(s.seconds()*n,\"s\").add(s.milliseconds()*n,\"ms\")};return function(n,i,e){t=e,s=e().$utils(),e.duration=function(t,s){var n=e.locale();return f(t,{$l:n},s)},e.isDuration=c;var r=i.prototype.add,o=i.prototype.subtract;i.prototype.add=function(t,s){return c(t)?p(this,t,1):r.bind(this)(t,s)},i.prototype.subtract=function(t,s){return c(t)?p(this,t,-1):o.bind(this)(t,s)}}}));","import dayjs from 'dayjs'\nimport Duration from 'dayjs/plugin/duration'\n\ndayjs.extend(Duration)\n\nexport const prettyBytes = (bytes: number, decimals = 2) => {\n if (bytes === 0) {\n return '0 Bytes'\n }\n\n const k = 1024\n const dm = decimals < 0 ? 0 : decimals\n const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']\n const i = Math.floor(Math.log(bytes) / Math.log(k))\n\n return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i]\n}\n\nexport const prettyDuration = (seconds: number): string => {\n const duration = dayjs.duration(seconds * 1000)\n\n return duration.format('HH:mm:ss')\n}\n","<script lang=\"ts\" setup>\nimport type { AssetSelectListItem } from '@/services/stores/coreDam/assetSelectStore'\nimport { useI18n } from 'vue-i18n'\nimport { useAssetItemActions } from '@/components/dam/assetSelect/composables/assetSelectItemActions'\nimport AssetImagePreview from '@/components/dam/assetSelect/components/AssetImagePreview.vue'\nimport type { DocId } from '@/types/common'\nimport { prettyBytes } from '@/utils/file'\nimport ADatetime from '@/components/datetime/ADatetime.vue'\nimport { toRef } from 'vue'\nimport AssetImageMetaIcons from '@/components/damImage/uploadQueue/components/AssetImageMetaIcons.vue'\n\nconst props = withDefaults(\n defineProps<{\n index: number\n item: AssetSelectListItem\n showMetaIcons?: boolean\n }>(),\n {\n showMetaIcons: false,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'itemClick', data: { assetId: DocId; index: number }): void\n}>()\n\nconst { t } = useI18n()\n\nconst IMAGE_HEIGHT = 72\nconst IMAGE_WIDTH = 128\n\nconst item = toRef(props, 'item')\n\nconst { asset, tableImageProperties, assetType, assetStatus } = useAssetItemActions(item)\n\nconst onItemClick = () => {\n emit('itemClick', { assetId: asset.value.id, index: props.index })\n}\n</script>\n\n<template>\n <tr\n class=\"a-datatable__row\"\n :class=\"{ 'a-datatable__row--selected': item.selected }\"\n @click.stop.exact=\"onItemClick\"\n >\n <td>\n <VIcon\n v-if=\"item.selected\"\n icon=\"mdi-checkbox-outline\"\n :size=\"20\"\n />\n <VIcon\n v-else\n icon=\"mdi-checkbox-blank-outline\"\n :size=\"20\"\n />\n </td>\n <td>\n <AssetImagePreview\n :asset-type=\"assetType\"\n :asset-status=\"assetStatus\"\n :src=\"tableImageProperties.url\"\n :background-color=\"tableImageProperties.bgColor\"\n :width=\"IMAGE_WIDTH\"\n :height=\"IMAGE_HEIGHT\"\n :icon-size=\"20\"\n :fallback-height=\"IMAGE_HEIGHT\"\n />\n </td>\n <td>\n {{ asset.texts.displayTitle || t('commonCoreDam.asset.list.noTitle') }}\n </td>\n <td>\n <ADatetime :date-time=\"asset.createdAt\" />\n </td>\n <td>\n <AssetImageMetaIcons\n :asset-file-properties=\"item.asset.assetFileProperties\"\n :asset-type=\"assetType\"\n disable-absolute\n />\n </td>\n <td>\n {{ asset.mainFile?.fileAttributes.mimeType }}\n </td>\n <td>\n {{ prettyBytes(asset.mainFile?.fileAttributes.size || 0) }}\n </td>\n </tr>\n</template>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport AssetSelectTableRowItem from '@/components/dam/assetSelect/components/AssetSelectTableRowItem.vue'\nimport { useAssetSelectActions } from '@/components/dam/assetSelect/composables/assetSelectListActions'\nimport type { IntegerId } from '@/types/common'\n\nwithDefaults(\n defineProps<{\n extSystem: IntegerId\n }>(),\n {}\n)\n\nconst { t } = useI18n()\n\nconst { onItemClick, assetListItems, loader } = useAssetSelectActions()\n</script>\n\n<template>\n <VTable\n class=\"a-datatable a-datatable--dialog-sticky-fix\"\n fixed-header\n >\n <thead>\n <tr>\n <th class=\"text-left\" />\n <th class=\"text-left\">\n {{ t('common.assetSelect.meta.table.image') }}\n </th>\n <th class=\"text-left\">\n {{ t('common.assetSelect.model.texts.displayTitle') }}\n </th>\n <th class=\"text-left\">\n {{ t('common.model.tracking.created') }}\n </th>\n <th class=\"text-left\">\n {{ t('common.assetSelect.meta.table.advanced') }}\n </th>\n <th class=\"text-left\">\n {{ t('common.assetSelect.model.mainFile.fileAttributes.mimeType') }}\n </th>\n <th class=\"text-left\">\n {{ t('common.assetSelect.model.mainFile.fileAttributes.size') }}\n </th>\n </tr>\n </thead>\n <tbody>\n <AssetSelectTableRowItem\n v-for=\"(item, index) in assetListItems\"\n :key=\"item.asset.id\"\n :index=\"index\"\n :item=\"item\"\n show-meta-icons\n @item-click=\"onItemClick($event, extSystem)\"\n />\n <tr v-if=\"!loader && assetListItems.length === 0\">\n <td\n colspan=\"6\"\n class=\"text-center\"\n >\n {{ t('common.assetSelect.meta.texts.noItemsFound') }}\n </td>\n </tr>\n </tbody>\n </VTable>\n</template>\n","import { readonly, ref } from 'vue'\n\nexport const AssetSelectGridView = {\n Masonry: 'masonry',\n Thumbnail: 'thumbnail',\n Table: 'table',\n} as const\nexport type AssetSelectGridViewType = (typeof AssetSelectGridView)[keyof typeof AssetSelectGridView]\nexport const AssetSelectGridViewDefault = AssetSelectGridView.Masonry\n\nconst gridView = ref<AssetSelectGridViewType>(AssetSelectGridViewDefault)\n\nexport function useGridView() {\n const setGridView = (value: AssetSelectGridViewType) => {\n gridView.value = value\n }\n\n return {\n gridView: readonly(gridView),\n setGridView,\n }\n}\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport { AssetSelectGridView, useGridView } from '@/components/dam/assetSelect/composables/assetSelectGridView'\nimport { useSidebar } from '@/components/dam/assetSelect/composables/assetSelectFilterSidebar'\nimport { computed, onMounted } from 'vue'\nimport { DamAssetType, type DamAssetTypeType } from '@/types/coreDam/Asset'\nimport { useAssetSelectStore } from '@/services/stores/coreDam/assetSelectStore'\nimport { storeToRefs } from 'pinia'\nimport ADatatableOrdering from '@/components/ADatatableOrdering.vue'\nimport {\n type DatatableOrderingOption,\n SORT_BY_SCORE_BEST,\n SORT_BY_SCORE_DATE,\n SortOrder,\n} from '@/composables/system/datatableColumns'\nimport { useAssetListFilter } from '@/model/coreDam/filter/AssetFilter'\n\nconst props = withDefaults(\n defineProps<{\n showTypes?: boolean\n disableSort?: boolean\n preselectAssetType?: DamAssetTypeType | undefined\n preselectInPodcast?: boolean | null | undefined\n }>(),\n {\n showTypes: false,\n disableSort: false,\n preselectAssetType: undefined,\n preselectInPodcast: undefined,\n }\n)\nconst emit = defineEmits<{\n (e: 'typeChange', data: { type: DamAssetTypeType; inPodcast: boolean | null }): void\n (e: 'sortByChange', data: DatatableOrderingOption): void\n}>()\n\nconst sortModel = defineModel<number>('sort', { default: 1, required: false })\n\nconst { t } = useI18n()\nconst { setGridView } = useGridView()\nconst { toggleSidebarLeft, sidebarLeft, toggleSidebarRight, sidebarRight } = useSidebar()\nconst assetSelectStore = useAssetSelectStore()\nconst { filterData } = useAssetListFilter()\nconst { assetType, inPodcast } = storeToRefs(assetSelectStore)\n\nconst isImageActive = computed(() => {\n return assetType.value === DamAssetType.Image\n})\n\nconst isVideoActive = computed(() => {\n return assetType.value === DamAssetType.Video\n})\n\nconst isPodcastActive = computed(() => {\n return assetType.value === DamAssetType.Audio && inPodcast.value === true\n})\n\nconst setFilterImage = () => {\n assetType.value = DamAssetType.Image\n inPodcast.value = null\n filterData.podcastIds = []\n emit('typeChange', { type: DamAssetType.Image, inPodcast: null })\n}\n\nconst setFilterVideo = () => {\n assetType.value = DamAssetType.Video\n inPodcast.value = null\n filterData.podcastIds = []\n emit('typeChange', { type: DamAssetType.Video, inPodcast: null })\n}\n\nconst setFilterPodcast = () => {\n assetType.value = DamAssetType.Audio\n inPodcast.value = true\n emit('typeChange', { type: DamAssetType.Audio, inPodcast: true })\n}\n\nconst customSortOptions = [\n {\n id: 3,\n titleT: 'common.system.datatable.ordering.mostRelevant',\n sortBy: { key: SORT_BY_SCORE_BEST, order: SortOrder.Desc },\n },\n {\n id: 1,\n titleT: 'common.system.datatable.ordering.mostRecent',\n sortBy: { key: SORT_BY_SCORE_DATE, order: SortOrder.Desc },\n },\n {\n id: 2,\n titleT: 'common.system.datatable.ordering.oldest',\n sortBy: { key: SORT_BY_SCORE_DATE, order: SortOrder.Asc },\n },\n]\n\nonMounted(() => {\n if (props.preselectAssetType === DamAssetType.Audio && props.preselectInPodcast) {\n setFilterPodcast()\n return\n }\n if (props.preselectAssetType === DamAssetType.Video) {\n setFilterVideo()\n }\n})\n</script>\n\n<template>\n <VToolbar\n density=\"compact\"\n color=\"transparent\"\n :height=\"46\"\n elevation=\"0\"\n class=\"system-border-b subject-select__second-bar\"\n >\n <slot name=\"second-bar\">\n <div class=\"d-flex flex-column w-100 px-1 align-center\">\n <div class=\"d-flex justify-space-between w-100 align-center\">\n <div class=\"d-flex align-center\">\n <VBtn\n icon\n :width=\"30\"\n :height=\"30\"\n :active=\"sidebarLeft\"\n @click=\"toggleSidebarLeft\"\n >\n <VIcon\n icon=\"mdi-tune\"\n :size=\"16\"\n />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.assetSelect.meta.filter.toggle') }}\n </VTooltip>\n </VBtn>\n <template v-if=\"showTypes\">\n <VDivider\n vertical\n class=\"ml-1 mr-2 my-2\"\n />\n <VBtn\n icon\n :width=\"30\"\n :height=\"30\"\n class=\"mr-1\"\n data-cy=\"button-image-types\"\n :active=\"isImageActive\"\n :color=\"isImageActive ? 'secondary' : ''\"\n :variant=\"isImageActive ? 'flat' : 'text'\"\n @click.stop=\"setFilterImage\"\n >\n <VIcon\n icon=\"mdi-image\"\n :size=\"16\"\n />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.assetSelect.assetType.image') }}\n </VTooltip>\n </VBtn>\n <VBtn\n icon\n :width=\"30\"\n :height=\"30\"\n class=\"mr-1\"\n data-cy=\"button-video-types\"\n :active=\"isVideoActive\"\n :color=\"isVideoActive ? 'secondary' : ''\"\n :variant=\"isVideoActive ? 'flat' : 'text'\"\n @click.stop=\"setFilterVideo\"\n >\n <VIcon\n icon=\"mdi-video\"\n :size=\"16\"\n />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.assetSelect.assetType.video') }}\n </VTooltip>\n </VBtn>\n <VBtn\n icon\n :width=\"30\"\n :height=\"30\"\n data-cy=\"button-in-podcast-types\"\n :active=\"isPodcastActive\"\n :color=\"isPodcastActive ? 'secondary' : ''\"\n :variant=\"isPodcastActive ? 'flat' : 'text'\"\n @click.stop=\"setFilterPodcast\"\n >\n <VIcon\n icon=\"mdi-podcast\"\n :size=\"16\"\n />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.assetSelect.filter.inPodcast') }}\n </VTooltip>\n </VBtn>\n </template>\n <slot name=\"second-bar-left\" />\n </div>\n <div class=\"d-flex align-center\">\n <slot name=\"second-bar-right\" />\n <ADatatableOrdering\n v-if=\"!disableSort\"\n v-model=\"sortModel\"\n :custom-options=\"customSortOptions\"\n @sort-by-change=\"emit('sortByChange', $event)\"\n />\n <VBtn\n size=\"x-small\"\n icon\n variant=\"text\"\n @click.stop=\"setGridView(AssetSelectGridView.Masonry)\"\n >\n <VIcon icon=\"mdi-view-compact\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.assetSelect.meta.grid.masonry') }}\n </VTooltip>\n </VBtn>\n <VBtn\n icon\n size=\"x-small\"\n variant=\"text\"\n @click.stop=\"setGridView(AssetSelectGridView.Thumbnail)\"\n >\n <VIcon icon=\"mdi-view-grid\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.assetSelect.meta.grid.thumbnail') }}\n </VTooltip>\n </VBtn>\n <VBtn\n size=\"x-small\"\n icon\n variant=\"text\"\n @click.stop=\"setGridView(AssetSelectGridView.Table)\"\n >\n <VIcon icon=\"mdi-view-headline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.assetSelect.meta.grid.table') }}\n </VTooltip>\n </VBtn>\n <VDivider\n vertical\n class=\"mx-1 my-2\"\n />\n <VBtn\n icon\n :width=\"30\"\n :height=\"30\"\n :active=\"sidebarRight\"\n @click=\"toggleSidebarRight\"\n >\n <VIcon\n icon=\"mdi-information-outline\"\n :size=\"16\"\n />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.assetSelect.meta.info.toggle') }}\n </VTooltip>\n </VBtn>\n </div>\n </div>\n </div>\n </slot>\n </VToolbar>\n</template>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport type { AssetSelectListItem } from '@/services/stores/coreDam/assetSelectStore'\nimport { useAssetItemActions } from '@/components/dam/assetSelect/composables/assetSelectItemActions'\nimport AssetImagePreview from '@/components/dam/assetSelect/components/AssetImagePreview.vue'\nimport type { DocId } from '@/types/common'\nimport { toRef } from 'vue'\n\nconst props = withDefaults(\n defineProps<{\n index: number\n item: AssetSelectListItem\n showMetaIcons?: boolean\n }>(),\n {\n showMetaIcons: false,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'itemClick', data: { assetId: DocId; index: number }): void\n}>()\n\nconst { t } = useI18n()\n\nconst IMAGE_HEIGHT = 200\n\nconst onItemClick = () => {\n emit('itemClick', { assetId: asset.value.id, index: props.index })\n}\n\nconst item = toRef(props, 'item')\n\nconst { asset, assetType, assetStatus, imageProperties } = useAssetItemActions(item)\n</script>\n\n<template>\n <div\n class=\"asset-list-tiles__item asset-list-tiles__item--pointer\"\n :class=\"{ 'asset-list-tiles__item--selected': item.selected, 'asset-list-tiles__item--active': item.active }\"\n @click.stop.exact=\"onItemClick\"\n >\n <div class=\"asset-list-tiles__item-card\">\n <div\n v-if=\"item.selected\"\n class=\"asset-list-tiles__selected-triangle\"\n >\n <div class=\"asset-list-tiles__selected-triangle__bg\" />\n <VIcon\n class=\"asset-list-tiles__selected-triangle__icon\"\n icon=\"mdi-check\"\n color=\"white\"\n size=\"large\"\n />\n </div>\n <AssetImagePreview\n :asset-type=\"assetType\"\n :asset-status=\"assetStatus\"\n :src=\"imageProperties.url\"\n :background-color=\"imageProperties.bgColor\"\n :width=\"imageProperties.width\"\n :height=\"imageProperties.height\"\n :fallback-height=\"IMAGE_HEIGHT\"\n :asset-file-properties=\"item.asset.assetFileProperties\"\n :show-meta-icons=\"showMetaIcons\"\n />\n <div class=\"asset-list-tiles__item-text text-caption px-2 py-1\">\n <div class=\"d-flex align-center justify-space-between position-relative\">\n <div class=\"line-clamp-1\">\n {{ asset.texts.displayTitle || t('commonCoreDam.asset.list.noTitle') }}\n </div>\n </div>\n </div>\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport AssetSelectTilesItem from '@/components/dam/assetSelect/components/AssetSelectTilesItem.vue'\nimport { useGridView } from '@/components/dam/assetSelect/composables/assetSelectGridView'\nimport { useAssetSelectActions } from '@/components/dam/assetSelect/composables/assetSelectListActions'\nimport { useI18n } from 'vue-i18n'\nimport type { IntegerId } from '@/types/common'\n\nwithDefaults(\n defineProps<{\n extSystem: IntegerId\n }>(),\n {}\n)\n\nconst { gridView } = useGridView()\nconst { onItemClick, assetListItems, loader } = useAssetSelectActions()\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <div\n class=\"asset-list-tiles\"\n :class=\"'asset-list-tiles--' + gridView\"\n >\n <AssetSelectTilesItem\n v-for=\"(item, index) in assetListItems\"\n :key=\"item.asset.id\"\n :index=\"index\"\n :item=\"item\"\n show-meta-icons\n @item-click=\"onItemClick($event, extSystem)\"\n />\n </div>\n <div\n v-if=\"!loader && assetListItems.length === 0\"\n class=\"text-h6 text-medium-emphasis d-flex w-100 h-100 align-center justify-center\"\n >\n {{ t('common.assetSelect.meta.texts.noItemsFound') }}\n </div>\n</template>\n\n<style lang=\"scss\">\n// css similar to '.dam-image-grid' in admin-dam, for now renamed here to new class to avoid conflicts\n// consider refactor later according how much different both versions will be\n\n$class-name-root: 'asset-list-tiles';\n$bg-color-light: #f9f9f9;\n$bg-color-dark: #1e1e1e;\n$border-color-light: #e8e9ea;\n$border-color-dark: #2c2c2c;\n$shadow-color-light: #959595;\n$shadow-color-dark: #3d3d3d;\n$bg-color-actions-light: #fff;\n$bg-color-actions-dark: #1a1a1a;\n\n.#{$class-name-root} {\n display: flex;\n flex-wrap: wrap;\n max-width: 100%;\n padding: 2px;\n\n &__item {\n user-select: none;\n flex-grow: 2;\n max-width: 600px;\n padding: 10px;\n position: relative;\n overflow: hidden;\n min-width: 200px;\n min-height: 260px;\n\n &-card {\n border-radius: 5px;\n overflow: hidden;\n\n img.anzu-common-asset-image__img {\n display: block;\n height: 200px;\n min-width: 100%;\n object-fit: cover;\n width: 100%;\n }\n\n &:hover {\n .#{$class-name-root}__item-card-actions {\n display: block;\n }\n }\n\n &-actions {\n border-radius: 4px;\n position: absolute;\n top: -2px;\n right: -5px;\n display: none;\n overflow: hidden;\n }\n }\n\n &-text,\n &-text .line-clamp-1 {\n font-weight: 500;\n line-height: 30px;\n min-height: 38px;\n max-height: 38px;\n }\n\n &--pointer {\n cursor: pointer;\n }\n }\n\n &--thumbnail {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));\n width: 100%;\n\n .#{$class-name-root}__item {\n min-width: unset;\n max-width: unset;\n\n img:not(.img-svg) {\n object-fit: contain;\n padding-left: 6px;\n padding-right: 6px;\n padding-top: 6px;\n background-color: transparent !important;\n }\n }\n }\n\n .#{$class-name-root}__selected-triangle {\n position: absolute;\n top: 10px;\n right: 10px;\n z-index: 1;\n\n &__bg {\n content: '';\n width: 0;\n height: 0;\n border-style: solid;\n border-width: 0 60px 60px 0;\n border-color: transparent #608a32 transparent transparent;\n top: 0;\n right: 0;\n position: absolute;\n }\n\n &__icon {\n position: absolute;\n display: block;\n width: 16px;\n height: 16px;\n top: -3px;\n right: 0;\n }\n }\n}\n\n.v-theme--light {\n .#{$class-name-root} {\n &__item {\n &-card {\n background-color: $bg-color-light;\n border: 1px solid $border-color-light;\n\n &:hover {\n box-shadow: 0 0 3px 1px $shadow-color-light;\n }\n\n &-actions {\n background-color: $bg-color-actions-light;\n }\n }\n\n &--selected {\n .#{$class-name-root}__item-card {\n border-color: #608a32;\n }\n }\n\n &--active {\n .#{$class-name-root}__item-card {\n border-color: blue;\n }\n }\n }\n }\n}\n\n.v-theme--dark {\n .#{$class-name-root} {\n &__item {\n &-card {\n background-color: $bg-color-dark;\n border: 1px solid $border-color-dark;\n\n &:hover {\n box-shadow: 0 0 3px 1px $shadow-color-dark;\n }\n\n &-actions {\n background-color: $bg-color-actions-dark;\n }\n }\n\n &--selected {\n .#{$class-name-root}__item-card {\n border-color: #608a32;\n }\n }\n\n &--active {\n .#{$class-name-root}__item-card {\n border-color: blue;\n }\n }\n }\n }\n}\n</style>\n","import { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport { useDamConfigState } from '@/components/damImage/uploadQueue/composables/damConfigState'\nimport { isUndefined } from '@/utils/common'\nimport type { DamKeyword, DamKeywordMinimal } from '@/components/damImage/uploadQueue/keyword/DamKeyword'\nimport type { ValueObjectOption } from '@/types/ValueObject'\nimport type { Pagination } from '@/labs/filters/pagination'\nimport type { Pagination as PaginationLegacy } from '@/types/Pagination'\nimport {\n fetchKeywordList,\n fetchKeywordListByIds,\n useFetchKeywordList,\n} from '@/components/damImage/uploadQueue/api/keywordApi'\nimport type { IntegerId } from '@/types/common'\nimport type { Ref } from 'vue'\nimport type { FilterConfig, FilterData } from '@/labs/filters/filterFactory'\n// eslint-disable-next-line deprecation/no-deprecated-imports\nimport type { FilterBag } from '@/types/Filter'\n\nexport const useKeywordSelectActions = (extSystem: IntegerId) => {\n const { damClient } = useCommonAdminCoreDamOptions()\n const { getDamConfigExtSystem } = useDamConfigState()\n\n const configExtSystem = getDamConfigExtSystem(extSystem)\n if (isUndefined(configExtSystem)) {\n throw new Error('Ext system must be initialised.')\n }\n\n const mapToValueObject = (keyword: DamKeyword): ValueObjectOption<string> => ({\n title: keyword.name,\n value: keyword.id,\n })\n\n const mapToMinimal = (keyword: DamKeyword): DamKeywordMinimal => ({\n id: keyword.id,\n name: keyword.name,\n })\n\n const mapToValueObjects = (keywords: DamKeyword[]): ValueObjectOption<string>[] => {\n return keywords.map((keyword: DamKeyword) => mapToValueObject(keyword))\n }\n\n const mapToMinimals = (keywords: DamKeyword[]): DamKeywordMinimal[] => {\n return keywords.map((keyword: DamKeyword) => mapToMinimal(keyword))\n }\n\n const { executeFetch } = useFetchKeywordList(damClient, extSystem)\n\n const fetchItems = async (pagination: Ref<Pagination>, filterData: FilterData, filterConfig: FilterConfig) => {\n return mapToValueObjects(await executeFetch(pagination, filterData, filterConfig))\n }\n\n const fetchItemsMinimal = async (pagination: Ref<Pagination>, filterData: FilterData, filterConfig: FilterConfig) => {\n return mapToMinimals(await executeFetch(pagination, filterData, filterConfig))\n }\n\n const fetchItemsByIds = async (ids: string[]) => {\n return mapToValueObjects(await fetchKeywordListByIds(damClient, extSystem, ids))\n }\n\n /**\n * @deprecated\n */\n const fetchItemsLegacy = async (pagination: PaginationLegacy, filterBag: FilterBag) => {\n return mapToValueObjects(await fetchKeywordList(damClient, extSystem, pagination, filterBag))\n }\n\n /**\n * @deprecated\n */\n const fetchItemsMinimalLegacy = async (pagination: PaginationLegacy, filterBag: FilterBag) => {\n return mapToMinimals(await fetchKeywordList(damClient, extSystem, pagination, filterBag))\n }\n\n return {\n mapToValueObject,\n fetchItems,\n fetchItemsByIds,\n fetchItemsMinimal,\n fetchItemsLegacy,\n fetchItemsMinimalLegacy,\n }\n}\n","import { SYSTEM_CORE_DAM } from '@/components/damImage/uploadQueue/api/damAssetApi'\nimport { ENTITY } from '@/components/damImage/uploadQueue/api/keywordApi'\nimport { createFilter, createFilterStore, type MakeFilterOption } from '@/labs/filters/filterFactory'\nimport { reactive } from 'vue'\n// eslint-disable-next-line deprecation/no-deprecated-imports\nimport { makeFilterHelper } from '@/composables/filter/filterHelpers'\n\nexport function useKeywordInnerFilter() {\n const filterFieldsInner = [\n { name: 'text' as const, variant: 'search', default: null, type: 'string' },\n ] satisfies readonly MakeFilterOption[]\n\n const { filterConfig, filterData } = createFilter(filterFieldsInner, createFilterStore(filterFieldsInner), {\n elastic: true,\n system: SYSTEM_CORE_DAM,\n subject: ENTITY,\n })\n\n return {\n filterConfig,\n filterData,\n }\n}\n\nconst makeFilter = makeFilterHelper(SYSTEM_CORE_DAM, ENTITY)\nconst filter = reactive({\n _elastic: {\n ...makeFilter({ exclude: true }),\n },\n id: {\n ...makeFilter({ name: 'id' }),\n },\n text: {\n ...makeFilter({ name: 'text' }),\n },\n reviewed: {\n ...makeFilter({ name: 'reviewed' }),\n },\n})\n\n/**\n * @deprecated\n */\nexport function useKeywordListFilter() {\n return filter\n}\n","<script lang=\"ts\" setup>\nimport { useKeywordSelectActions } from '@/components/damImage/uploadQueue/keyword/keywordActions'\nimport { useKeywordInnerFilter } from '@/components/damImage/uploadQueue/keyword/KeywordFilter'\nimport AFilterRemoteAutocomplete from '@/labs/filters/AFilterRemoteAutocomplete.vue'\nimport type { IntegerId } from '@/types/common'\nimport { provide } from 'vue'\nimport { FilterInnerConfigKey, FilterInnerDataKey } from '@/labs/filters/filterInjectionKeys'\n\nconst props = withDefaults(\n defineProps<{\n name: string\n extSystem: IntegerId\n }>(),\n {}\n)\nconst emit = defineEmits<{\n (e: 'change'): void\n}>()\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { fetchItems, fetchItemsByIds } = useKeywordSelectActions(props.extSystem)\n\nconst { filterData, filterConfig } = useKeywordInnerFilter()\nprovide(FilterInnerConfigKey, filterConfig)\nprovide(FilterInnerDataKey, filterData)\n</script>\n\n<template>\n <AFilterRemoteAutocomplete\n :name=\"name\"\n :fetch-items=\"fetchItems\"\n :fetch-items-by-ids=\"fetchItemsByIds\"\n filter-by-field=\"text\"\n :filter-sort-by=\"null\"\n @change=\"emit('change')\"\n />\n</template>\n","import { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport { useDamConfigState } from '@/components/damImage/uploadQueue/composables/damConfigState'\nimport { isUndefined } from '@/utils/common'\nimport type { DamAuthor, DamAuthorMinimal } from '@/components/damImage/uploadQueue/author/DamAuthor'\nimport type { Pagination } from '@/labs/filters/pagination'\nimport {\n fetchAuthorList,\n fetchAuthorListByIds,\n useFetchAuthorList,\n} from '@/components/damImage/uploadQueue/api/authorApi'\nimport type { ValueObjectOption } from '@/types/ValueObject'\nimport type { IntegerId } from '@/types/common'\nimport type { Ref } from 'vue'\nimport type { FilterConfig, FilterData } from '@/labs/filters/filterFactory'\nimport type { Pagination as PaginationLegacy } from '@/types/Pagination'\n// eslint-disable-next-line deprecation/no-deprecated-imports\nimport type { FilterBag } from '@/types/Filter'\n\nexport const useAuthorSelectActions = (extSystem: IntegerId) => {\n const { damClient } = useCommonAdminCoreDamOptions()\n const { getDamConfigExtSystem } = useDamConfigState()\n\n const configExtSystem = getDamConfigExtSystem(extSystem)\n if (isUndefined(configExtSystem)) {\n throw new Error('useAuthorSelectActions: Ext system must be initialised.')\n }\n\n const mapToMinimal = (author: DamAuthor): DamAuthorMinimal => ({\n id: author.id,\n name: author.name,\n identifier: author.identifier,\n reviewed: author.flags.reviewed,\n })\n\n const mapToValueObject = (author: DamAuthor): ValueObjectOption<string> => ({\n title: author.name + (author.identifier ? ` (${author.identifier})` : ''),\n value: author.id,\n })\n\n const mapToValueObjects = (authors: DamAuthor[]): ValueObjectOption<string>[] => {\n return authors.map((author: DamAuthor) => mapToValueObject(author))\n }\n\n const mapToMinimals = (authors: DamAuthor[]): DamAuthorMinimal[] => {\n return authors.map((author: DamAuthor) => mapToMinimal(author))\n }\n\n const { executeFetch } = useFetchAuthorList(damClient, extSystem)\n\n const fetchItems = async (pagination: Ref<Pagination>, filterData: FilterData, filterConfig: FilterConfig) => {\n return mapToValueObjects(await executeFetch(pagination, filterData, filterConfig))\n }\n\n const fetchItemsMinimal = async (pagination: Ref<Pagination>, filterData: FilterData, filterConfig: FilterConfig) => {\n return mapToMinimals(await executeFetch(pagination, filterData, filterConfig))\n }\n\n const fetchItemsByIds = async (ids: string[]) => {\n return mapToValueObjects(await fetchAuthorListByIds(damClient, extSystem, ids))\n }\n\n const fetchItemsMinimalByIds = async (ids: string[]) => {\n return mapToMinimals(await fetchAuthorListByIds(damClient, extSystem, ids))\n }\n\n /**\n * @deprecated\n */\n const fetchItemsLegacy = async (pagination: PaginationLegacy, filterBag: FilterBag) => {\n return mapToValueObjects(await fetchAuthorList(damClient, extSystem, pagination, filterBag))\n }\n\n /**\n * @deprecated\n */\n const fetchItemsMinimalLegacy = async (pagination: PaginationLegacy, filterBag: FilterBag) => {\n return mapToMinimals(await fetchAuthorList(damClient, extSystem, pagination, filterBag))\n }\n\n return {\n mapToValueObject,\n fetchItems,\n fetchItemsByIds,\n fetchItemsMinimal,\n fetchItemsMinimalByIds,\n fetchItemsLegacy,\n fetchItemsMinimalLegacy,\n }\n}\n","import { SYSTEM_CORE_DAM } from '@/components/damImage/uploadQueue/api/damAssetApi'\nimport { createFilter, createFilterStore, type MakeFilterOption } from '@/labs/filters/filterFactory'\nimport { ENTITY } from '@/components/damImage/uploadQueue/api/keywordApi'\nimport { reactive } from 'vue'\n// eslint-disable-next-line deprecation/no-deprecated-imports\nimport { makeFilterHelper } from '@/composables/filter/filterHelpers'\n\nexport function useAuthorInnerFilter() {\n const filterFieldsInner = [\n { name: 'text' as const, variant: 'search', default: null, type: 'string' },\n ] satisfies readonly MakeFilterOption[]\n\n const { filterConfig, filterData } = createFilter(filterFieldsInner, createFilterStore(filterFieldsInner), {\n elastic: true,\n system: SYSTEM_CORE_DAM,\n subject: ENTITY,\n })\n\n return {\n filterConfig,\n filterData,\n }\n}\n\nconst makeFilter = makeFilterHelper(SYSTEM_CORE_DAM, 'author')\n/**\n * @deprecated\n */\nexport function useAuthorFilter() {\n return reactive({\n _elastic: {\n ...makeFilter({ exclude: true }),\n },\n text: {\n ...makeFilter({ name: 'text' }),\n },\n })\n}\n\n","<script lang=\"ts\" setup>\nimport { useAuthorSelectActions } from '@/components/damImage/uploadQueue/author/authorActions'\nimport { useAuthorInnerFilter } from '@/components/damImage/uploadQueue/author/AuthorFilter'\nimport type { IntegerId } from '@/types/common'\nimport { useI18n } from 'vue-i18n'\nimport AFilterRemoteAutocompleteWithMinimal from '@/labs/filters/AFilterRemoteAutocompleteWithMinimal.vue'\nimport { provide } from 'vue'\nimport { FilterInnerConfigKey, FilterInnerDataKey } from '@/labs/filters/filterInjectionKeys'\n\nconst props = withDefaults(\n defineProps<{\n name: string\n extSystem: IntegerId\n }>(),\n {}\n)\nconst emit = defineEmits<{\n (e: 'change'): void\n}>()\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { fetchItemsMinimal, fetchItemsMinimalByIds } = useAuthorSelectActions(props.extSystem)\n\nconst { filterData, filterConfig } = useAuthorInnerFilter()\nprovide(FilterInnerConfigKey, filterConfig)\nprovide(FilterInnerDataKey, filterData)\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <AFilterRemoteAutocompleteWithMinimal\n :name=\"name\"\n :fetch-items-minimal=\"fetchItemsMinimal\"\n :fetch-items-minimal-by-ids=\"fetchItemsMinimalByIds\"\n filter-by-field=\"text\"\n :filter-sort-by=\"null\"\n @change=\"emit('change')\"\n >\n <template #item=\"{ props: itemProps, item: itemItem }\">\n <VListItem\n v-bind=\"itemProps\"\n title=\"\"\n >\n <VListItemTitle>\n {{ itemItem.title }}\n <VIcon\n v-if=\"itemItem.raw?.raw?.reviewed || itemItem.raw?.reviewed\"\n icon=\"mdi-shield-check\"\n class=\"text-success ml-1\"\n size=\"small\"\n :title=\"t('common.damImage.author.model.flags.reviewed')\"\n />\n </VListItemTitle>\n </VListItem>\n </template>\n <template #chip=\"{ props: chipProps, item: chipItem }\">\n <VChip v-bind=\"chipProps\">\n {{ chipItem.title }}\n <VIcon\n v-if=\"chipItem.raw?.raw?.reviewed || chipItem.raw?.reviewed\"\n icon=\"mdi-shield-check\"\n class=\"text-success ml-1\"\n size=\"small\"\n :title=\"t('common.damImage.author.model.flags.reviewed')\"\n />\n </VChip>\n </template>\n </AFilterRemoteAutocompleteWithMinimal>\n</template>\n","import type { AxiosInstance } from 'axios'\nimport type { DamUser } from '@/components/dam/user/DamUser'\nimport type { ValueObjectOption } from '@/types/ValueObject'\nimport type { IntegerId } from '@/types/common'\nimport type { Pagination } from '@/labs/filters/pagination'\nimport { fetchDamUserList, fetchDamUserListByIds, useFetchDamUserList } from '@/components/dam/user/userApi'\nimport type { Ref } from 'vue'\nimport type { FilterConfig, FilterData } from '@/labs/filters/filterFactory'\n// eslint-disable-next-line deprecation/no-deprecated-imports\nimport type { FilterBag } from '@/types/Filter'\nimport type { Pagination as PaginationLegacy } from '@/types/Pagination'\n\nexport const useDamUserSelectAction = (client: () => AxiosInstance) => {\n const mapToValueObject = (user: DamUser): ValueObjectOption<IntegerId> => ({\n title: '' === user.person.fullName ? user.email : user.person.fullName,\n value: user.id,\n })\n\n const mapToValueObjects = (users: DamUser[]): ValueObjectOption<IntegerId>[] => {\n return users.map((user: DamUser) => mapToValueObject(user))\n }\n\n const { executeFetch } = useFetchDamUserList(client)\n\n const fetchItems = async (pagination: Ref<Pagination>, filterData: FilterData, filterConfig: FilterConfig) => {\n return mapToValueObjects(await executeFetch(pagination, filterData, filterConfig))\n }\n\n const fetchItemsByIds = async (ids: IntegerId[]) => {\n return mapToValueObjects(await fetchDamUserListByIds(client, ids))\n }\n\n /**\n * @deprecated\n */\n const fetchItemsLegacy = async (pagination: PaginationLegacy, filterBag: FilterBag) => {\n return mapToValueObjects(await fetchDamUserList(client, pagination, filterBag))\n }\n\n return {\n mapToValueObject,\n fetchItems,\n fetchItemsByIds,\n fetchItemsLegacy,\n }\n}\n","import { createFilter, createFilterStore, type MakeFilterOption } from '@/labs/filters/filterFactory'\nimport { SYSTEM_CORE_DAM } from '@/components/damImage/uploadQueue/api/damAssetApi'\nimport { ENTITY } from '@/components/damImage/uploadQueue/api/keywordApi'\n// eslint-disable-next-line deprecation/no-deprecated-imports\nimport { makeFilterHelper } from '@/composables/filter/filterHelpers'\nimport { reactive } from 'vue'\n\nexport function useDamUserInnerFilter() {\n const filterFieldsInner = [\n { name: 'id' as const, default: null },\n { name: 'email' as const, default: null, variant: 'startsWith' },\n { name: 'enabled' as const, default: null },\n { name: 'lastName' as const, default: null, variant: 'startsWith', apiName: 'person.lastName' },\n { name: 'permissionGroups' as const, variant: 'custom', default: [], type: 'string' },\n ] satisfies readonly MakeFilterOption[]\n\n const { filterConfig, filterData } = createFilter(filterFieldsInner, createFilterStore(filterFieldsInner), {\n system: SYSTEM_CORE_DAM,\n subject: ENTITY,\n })\n\n return {\n filterConfig,\n filterData,\n }\n}\n\nconst makeFilter = makeFilterHelper('dam', 'user')\nconst filter = reactive({\n id: {\n ...makeFilter({ name: 'id', default: null }),\n },\n email: {\n ...makeFilter({ name: 'email', variant: 'startsWith' }),\n },\n enabled: {\n ...makeFilter({ name: 'enabled' }),\n },\n lastName: {\n ...makeFilter({ name: 'lastName', variant: 'startsWith', field: 'person.lastName' }),\n },\n permissionGroups: {\n ...makeFilter({ name: 'permissionGroups', variant: 'custom', multiple: true, default: [] }),\n },\n})\n/**\n * @deprecated\n */\nexport function useDamUserFilter() {\n return filter\n}\n","<script lang=\"ts\" setup>\nimport { useDamUserSelectAction } from '@/components/dam/user/damUserSelectActions'\nimport { useDamUserInnerFilter } from '@/components/dam/user/DamUserFilter'\nimport AFilterRemoteAutocomplete from '@/labs/filters/AFilterRemoteAutocomplete.vue'\nimport { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport { provide } from 'vue'\nimport { FilterInnerConfigKey, FilterInnerDataKey } from '@/labs/filters/filterInjectionKeys'\n\nconst props = withDefaults(\n defineProps<{\n name: string\n configName?: string\n }>(),\n {\n configName: 'default',\n }\n)\nconst emit = defineEmits<{\n (e: 'change'): void\n}>()\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { damClient } = useCommonAdminCoreDamOptions(props.configName)\n\nconst { fetchItems, fetchItemsByIds } = useDamUserSelectAction(damClient)\n\nconst { filterData, filterConfig } = useDamUserInnerFilter()\nprovide(FilterInnerConfigKey, filterConfig)\nprovide(FilterInnerDataKey, filterData)\n</script>\n\n<template>\n <AFilterRemoteAutocomplete\n :name=\"name\"\n :fetch-items=\"fetchItems\"\n :fetch-items-by-ids=\"fetchItemsByIds\"\n filter-by-field=\"lastName\"\n :filter-sort-by=\"null\"\n @change=\"emit('change')\"\n />\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, onMounted, ref } from 'vue'\nimport AFilterValueObjectOptionsSelect from '@/labs/filters/AFilterValueObjectOptionsSelect.vue'\nimport { useDamConfigStore } from '@/components/damImage/uploadQueue/composables/damConfigStore'\nimport { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport { useDamConfigState } from '@/components/damImage/uploadQueue/composables/damConfigState'\n\nconst props = withDefaults(\n defineProps<{\n name: string\n configName?: string\n }>(),\n {\n configName: 'default',\n }\n)\nconst emit = defineEmits<{\n (e: 'change'): void\n}>()\n\nconst status = ref<'loading' | 'ready' | 'error'>('loading')\n\nconst damConfigStore = useDamConfigStore()\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { damClient } = useCommonAdminCoreDamOptions(props.configName)\nconst { loadDamPrvConfig } = useDamConfigState(damClient)\n\nconst items = computed(() => {\n return Object.entries(damConfigStore.damPrvConfig.distributionServices).map(([key, value]) => {\n return {\n title: value.title,\n value: key,\n }\n })\n})\n\nonMounted(async () => {\n const promises: Promise<any>[] = []\n if (!damConfigStore.initialized.damPrvConfig) {\n promises.push(loadDamPrvConfig())\n }\n try {\n await Promise.allSettled(promises)\n } catch (e) {\n status.value = 'error'\n }\n if (status.value !== 'error') status.value = 'ready'\n})\n</script>\n\n<template>\n <div\n v-if=\"status === 'loading'\"\n class=\"d-flex w-100 align-center justify-center\"\n >\n <VProgressCircular indeterminate />\n </div>\n <div v-else-if=\"status === 'error'\">\n Error loading distribution services.\n </div>\n <AFilterValueObjectOptionsSelect\n v-else\n :name=\"name\"\n :items=\"items\"\n @change=\"emit('change')\"\n />\n</template>\n","import type { AxiosInstance } from 'axios'\nimport { apiFetchByIds } from '@/services/api/apiFetchByIds'\nimport { SYSTEM_CORE_DAM } from '@/components/damImage/uploadQueue/api/damAssetApi'\nimport type { DocId, IntegerId } from '@/types/common'\nimport { useApiFetchList } from '@/labs/api/useApiFetchList'\nimport type { DamPodcastAware } from '@/components/dam/assetSelect/components/filter/podcastFilterAndActions'\n\nconst END_POINT = '/adm/v1/podcast/licence/:licenceId'\nconst ENTITY = 'podcast'\n\nexport const fetchDamPodcastListByIds = (client: () => AxiosInstance, licenceId: IntegerId, ids: DocId[]) =>\n apiFetchByIds<DamPodcastAware[]>(client, ids, END_POINT, { licenceId }, SYSTEM_CORE_DAM, ENTITY, {}, false)\n\nexport const useFetchDamPodcastList = (client: () => AxiosInstance, licenceId: IntegerId) =>\n useApiFetchList<DamPodcastAware[]>(client, SYSTEM_CORE_DAM, ENTITY, END_POINT, { licenceId })\n","import {\n createFilter,\n createFilterStore,\n type FilterConfig,\n type FilterData,\n type MakeFilterOption,\n} from '@/labs/filters/filterFactory'\nimport { SYSTEM_CORE_DAM } from '@/components/damImage/uploadQueue/api/damAssetApi'\nimport type { Ref } from 'vue'\nimport type { Pagination } from '@/labs/filters/pagination'\nimport type { ValueObjectOption } from '@/types/ValueObject'\nimport type { DocId, IntegerId } from '@/types/common'\nimport { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport {\n fetchDamPodcastListByIds,\n useFetchDamPodcastList,\n} from '@/components/dam/assetSelect/components/filter/damPodcastApi'\n\nexport function usePodcastInnerFilter() {\n const filterFieldsInner = [\n { name: 'title' as const, variant: 'startsWith', default: null, type: 'string', apiName: 'texts.title' },\n ] satisfies readonly MakeFilterOption[]\n\n const { filterConfig, filterData } = createFilter(filterFieldsInner, createFilterStore(filterFieldsInner), {\n system: SYSTEM_CORE_DAM,\n subject: 'podcast',\n })\n\n return {\n filterConfig,\n filterData,\n }\n}\n\nexport const usePodcastSelectActions = (licenceId: IntegerId, configName = 'default') => {\n const { damClient } = useCommonAdminCoreDamOptions(configName)\n const { executeFetch } = useFetchDamPodcastList(damClient, licenceId)\n\n const fetchItems = async (pagination: Ref<Pagination>, filterData: FilterData, filterConfig: FilterConfig) => {\n const podcasts = await executeFetch(pagination, filterData, filterConfig)\n\n return <ValueObjectOption<DocId>[]>podcasts.map((podcast: DamPodcastAware) => ({\n title: podcast.texts.title,\n value: podcast.id,\n }))\n }\n\n const fetchItemsByIds = async (ids: DocId[]) => {\n const podcasts = await fetchDamPodcastListByIds(damClient, licenceId, ids)\n\n return <ValueObjectOption<DocId>[]>podcasts.map((podcast: DamPodcastAware) => ({\n title: podcast.texts.title,\n value: podcast.id,\n }))\n }\n\n return {\n fetchItems,\n fetchItemsByIds,\n }\n}\n\nexport interface DamPodcastAware {\n id: DocId\n texts: {\n title: string\n description: string\n }\n}\n","<script lang=\"ts\" setup>\nimport { provide } from 'vue'\nimport { FilterInnerConfigKey, FilterInnerDataKey } from '@/labs/filters/filterInjectionKeys'\nimport {\n usePodcastInnerFilter,\n usePodcastSelectActions,\n} from '@/components/dam/assetSelect/components/filter/podcastFilterAndActions'\nimport AFilterRemoteAutocomplete from '@/labs/filters/AFilterRemoteAutocomplete.vue'\nimport type { IntegerId } from '@/types/common'\n\nconst props = withDefaults(\n defineProps<{\n name: string\n licenceId: IntegerId\n }>(),\n {}\n)\nconst emit = defineEmits<{\n (e: 'change'): void\n}>()\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { fetchItems, fetchItemsByIds } = usePodcastSelectActions(props.licenceId)\nconst { filterData, filterConfig } = usePodcastInnerFilter()\nprovide(FilterInnerConfigKey, filterConfig)\nprovide(FilterInnerDataKey, filterData)\n</script>\n\n<template>\n <AFilterRemoteAutocomplete\n :name=\"name\"\n :fetch-items=\"fetchItems\"\n :fetch-items-by-ids=\"fetchItemsByIds\"\n filter-by-field=\"title\"\n prefetch=\"hover\"\n @change=\"emit('change')\"\n />\n</template>\n","<script lang=\"ts\" setup>\nimport { useAssetSelectActions } from '@/components/dam/assetSelect/composables/assetSelectListActions'\nimport { computed, watch } from 'vue'\nimport { useAssetSelectStore } from '@/services/stores/coreDam/assetSelectStore'\nimport { storeToRefs } from 'pinia'\nimport AFilterBooleanSelect from '@/labs/filters/AFilterBooleanSelect.vue'\nimport AFilterString from '@/labs/filters/AFilterString.vue'\nimport DamKeywordFilterRemoteAutocomplete\n from '@/components/damImage/uploadQueue/keyword/DamKeywordFilterRemoteAutocomplete.vue'\nimport type { IntegerId } from '@/types/common'\nimport DamAuthorFilterRemoteAutocomplete\n from '@/components/damImage/uploadQueue/author/DamAuthorFilterRemoteAutocomplete.vue'\nimport DamUserFilterRemoteAutocomplete from '@/components/dam/user/DamUserFilterRemoteAutocomplete.vue'\nimport AssetDistributionServiceNameFilter\n from '@/components/dam/assetSelect/components/filter/AssetDistributionServiceNameFilter.vue'\nimport { DamAssetType } from '@/types/coreDam/Asset'\nimport FilterPodcastRemoteAutocomplete\n from '@/components/dam/assetSelect/components/filter/FilterPodcastRemoteAutocomplete.vue'\n\nconst { filterData } = useAssetSelectActions()\n\nconst assetSelectStore = useAssetSelectStore()\nconst { selectConfig, selectedLicenceId, assetType } = storeToRefs(assetSelectStore)\n\nconst extSystem = computed<IntegerId | undefined>(() => {\n const found = selectConfig.value.find((config) => config.licence === selectedLicenceId.value)\n if (found) {\n return found.extSystem\n }\n return undefined\n})\n\nwatch(extSystem, (newValue, oldValue) => {\n if (newValue !== oldValue) {\n filterData.keywordIds = []\n filterData.authorIds = []\n }\n})\n</script>\n\n<template>\n <VRow>\n <VCol :cols=\"12\">\n <AFilterString name=\"text\" />\n </VCol>\n </VRow>\n <VRow>\n <VCol :cols=\"12\">\n <AFilterString name=\"assetAndMainFileIds\" />\n </VCol>\n </VRow>\n <template v-if=\"extSystem\">\n <VRow>\n <VCol :cols=\"12\">\n <DamKeywordFilterRemoteAutocomplete\n :key=\"extSystem\"\n name=\"keywordIds\"\n :ext-system=\"extSystem\"\n />\n </VCol>\n </VRow>\n <VRow>\n <VCol :cols=\"12\">\n <DamAuthorFilterRemoteAutocomplete\n :key=\"extSystem\"\n name=\"authorIds\"\n :ext-system=\"extSystem\"\n />\n </VCol>\n </VRow>\n </template>\n <VRow>\n <VCol :cols=\"12\">\n <DamUserFilterRemoteAutocomplete name=\"createdByIds\" />\n </VCol>\n </VRow>\n <VRow>\n <VCol :cols=\"12\">\n <AFilterBooleanSelect name=\"described\" />\n </VCol>\n </VRow>\n <VRow>\n <VCol :cols=\"12\">\n <AFilterBooleanSelect name=\"visible\" />\n </VCol>\n </VRow>\n <VRow>\n <VCol>\n <AFilterBooleanSelect name=\"generatedBySystem\" />\n </VCol>\n </VRow>\n <VRow v-if=\"assetType === DamAssetType.Audio || assetType === DamAssetType.Video\">\n <VCol>\n <AssetDistributionServiceNameFilter\n :key=\"selectedLicenceId\"\n name=\"distributedInServices\"\n />\n </VCol>\n </VRow>\n <VRow v-if=\"assetType === DamAssetType.Audio\">\n <VCol>\n <FilterPodcastRemoteAutocomplete\n :key=\"selectedLicenceId\"\n :licence-id=\"selectedLicenceId\"\n name=\"podcastIds\"\n />\n </VCol>\n </VRow>\n</template>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport { useAssetSelectActions } from '@/components/dam/assetSelect/composables/assetSelectListActions'\nimport { computed, onMounted, provide, watch } from 'vue'\nimport { useAssetSelectStore } from '@/services/stores/coreDam/assetSelectStore'\nimport { storeToRefs } from 'pinia'\nimport AssetSelectFilterForm from '@/components/dam/assetSelect/components/filter/AssetSelectFilterForm.vue'\nimport { useAssetListFilter } from '@/model/coreDam/filter/AssetFilter'\nimport { FilterConfigKey, FilterDataKey } from '@/labs/filters/filterInjectionKeys'\nimport AFilterWrapperSubjectSelect from '@/labs/subjectSelect/AFilterWrapperSubjectSelect.vue'\nimport { useFilterHelpers } from '@/labs/filters/filterFactory'\n\nconst { t } = useI18n()\nconst { fetchAssetListDebounced, resetAssetList, pagination } = useAssetSelectActions()\n\nconst assetSelectStore = useAssetSelectStore()\nconst { selectedLicenceId, selectConfig } = storeToRefs(assetSelectStore)\n\nconst { filterData, filterConfig } = useAssetListFilter()\nprovide(FilterConfigKey, filterConfig)\nprovide(FilterDataKey, filterData)\n\nconst { resetFilter, submitFilter } = useFilterHelpers(filterData, filterConfig, {\n populateUrlParams: false,\n storeFiltersLocalStorage: false,\n})\n\nconst submitFilterAction = () => {\n submitFilter(pagination, fetchAssetListDebounced)\n}\n\nconst resetFilterAction = () => {\n resetFilter(pagination, resetAssetList)\n}\n\nconst componentComputed = computed(() => {\n switch (assetSelectStore.assetType) {\n default:\n return AssetSelectFilterForm\n }\n})\n\nwatch(\n selectedLicenceId,\n (newValue, oldValue) => {\n if (newValue === oldValue) return\n resetFilterAction()\n },\n)\n\nonMounted(() => {\n fetchAssetListDebounced()\n})\n</script>\n\n<template>\n <div class=\"subject-select-filter\">\n <div class=\"subject-select-filter__content\">\n <AFilterWrapperSubjectSelect\n @submit=\"submitFilterAction\"\n @reset=\"resetFilterAction\"\n >\n <template #detail>\n <VRow v-if=\"selectConfig.length > 1\">\n <VCol :cols=\"12\">\n <VSelect\n v-model=\"selectedLicenceId\"\n :label=\"t('common.assetSelect.filter.licence')\"\n :items=\"selectConfig\"\n item-title=\"licenceName\"\n item-value=\"licence\"\n hide-details\n />\n </VCol>\n </VRow>\n <component :is=\"componentComputed\" />\n </template>\n <VRow v-if=\"selectConfig.length > 1\">\n <VCol :cols=\"12\">\n <VSelect\n v-model=\"selectedLicenceId\"\n :label=\"t('common.assetSelect.filter.licence')\"\n :items=\"selectConfig\"\n item-title=\"licenceName\"\n item-value=\"licence\"\n />\n </VCol>\n </VRow>\n <component :is=\"componentComputed\" />\n </AFilterWrapperSubjectSelect>\n </div>\n </div>\n</template>\n","import { cloneDeep, isUndefined } from '@/utils/common'\nimport type { DamConfigLicenceExtSystemReturnType } from '@/types/coreDam/DamConfig'\nimport { defineAuth } from '@/composables/auth/defineAuth'\nimport type { AclValue } from '@/types/Permission'\nimport type { DamCurrentUserDto } from '@/types/coreDam/DamCurrentUser'\nimport { SYSTEM_DAM } from '@/components/damImage/uploadQueue/api/damAssetApi'\n\nexport function filterAllowedImageWidgetSelectConfigs(values: DamConfigLicenceExtSystemReturnType[]) {\n const { useCurrentUser } = defineAuth<AclValue>(SYSTEM_DAM)\n const { currentUser: damCurrentUser, isSuperAdmin: damCurrentUserIsSuperAdmin } =\n useCurrentUser<DamCurrentUserDto>(SYSTEM_DAM)\n\n if (damCurrentUserIsSuperAdmin.value) return cloneDeep(values)\n const currentUser = damCurrentUser.value\n if (isUndefined(currentUser)) return []\n\n const adminToExtSystems = currentUser.adminToExtSystems\n const assetLicences = currentUser.resolvedAssetLicences.map((assetLicenceValue) => assetLicenceValue.id)\n const allowed: DamConfigLicenceExtSystemReturnType[] = []\n values.forEach((value) => {\n if (adminToExtSystems.includes(value.extSystem)) {\n allowed.push(value)\n return\n }\n if (assetLicences.includes(value.licence)) {\n allowed.push(value)\n }\n })\n return allowed\n}\n\nexport function isImageWidgetUploadConfigAllowed(value: DamConfigLicenceExtSystemReturnType) {\n const { useCurrentUser } = defineAuth<AclValue>(SYSTEM_DAM)\n const { currentUser: damCurrentUser, isSuperAdmin: damCurrentUserIsSuperAdmin } =\n useCurrentUser<DamCurrentUserDto>(SYSTEM_DAM)\n\n if (damCurrentUserIsSuperAdmin.value) return true\n\n const currentUser = damCurrentUser.value\n if (isUndefined(currentUser)) return []\n\n const adminToExtSystems = currentUser.adminToExtSystems\n if (adminToExtSystems.includes(value.extSystem)) {\n return true\n }\n\n const assetLicences = currentUser.resolvedAssetLicences.map((assetLicenceValue) => assetLicenceValue.id)\n if (assetLicences.includes(value.licence)) {\n return true\n }\n\n return false\n}\n","import type { DatetimeUTC, DocId, DocIdNullable } from '@/types/common'\nimport type { AnzuUserAndTimeTrackingAware } from '@/types/AnzuUserAndTimeTrackingAware'\n\nexport const AssetFileProcessStatus = {\n Uploading: 'uploading', // file entity created and ready to receive chunks\n Uploaded: 'uploaded', // all chunks were sent\n Stored: 'stored', // File is stored and ready to processing\n Duplicate: 'duplicate', // AssetFile is duplicate of another asset\n Processed: 'processed', // file processed and ready to serve\n Failed: 'failed',\n} as const\nexport type AssetFileProcessStatusType = (typeof AssetFileProcessStatus)[keyof typeof AssetFileProcessStatus]\n\nexport const AssetFileFailReason = {\n None: 'none',\n Unknown: 'unknown',\n InvalidChecksum: 'invalid_checksum',\n InvalidMimeType: 'invalid_mime_type',\n DownloadFailed: 'download_failed',\n InvalidSize: 'invalid_size',\n} as const\nexport type AssetFileFailReasonType = (typeof AssetFileFailReason)[keyof typeof AssetFileFailReason]\nexport const AssetFileFailReasonDefault = AssetFileFailReason.None\n\nexport const AssetFileRouteStatus = {\n Disabled: 'disabled',\n Active: 'active',\n} as const\nexport type AssetFileRouteStatusType = (typeof AssetFileRouteStatus)[keyof typeof AssetFileRouteStatus]\nexport const AssetFileRouteStatusDefault = AssetFileRouteStatus.Disabled\n\ninterface FileAttributes {\n status: AssetFileProcessStatusType\n mimeType: string\n size: number\n originFileName: string\n originUrl: string\n failReason: AssetFileFailReasonType\n}\n\nexport const AssetFileLinkType = {\n Image: 'image',\n Audio: 'audio',\n} as const\nexport type AssetFileLinkTypeType = (typeof AssetFileLinkType)[keyof typeof AssetFileLinkType]\n\nexport interface AssetFileLink {\n width: number\n height: number\n requestedWidth: number\n requestedHeight: number\n url: string\n title: string\n type: AssetFileLinkTypeType\n}\n\nexport interface AssetFileRoute {\n id: DocId\n status: AssetFileRouteStatusType\n main: boolean\n publicUrl: string\n _resourceName: 'assetFileRoute'\n}\n\nexport interface AssetFileMainRouteAware {\n mainRoute?: AssetFileRoute\n}\n\nexport type AssetFileLinks =\n | Record<'image_list' | 'image_table' | 'image_detail' | 'image_animated' | 'audio', AssetFileLink>\n | Record<string, never>\n\nexport interface AssetFileAware {\n flags: {\n public: boolean\n singleUse: boolean\n }\n}\n\nexport interface AssetFileImage extends AssetFileAware, AnzuUserAndTimeTrackingAware, AssetFileMainRouteAware {\n id: DocId\n asset: DocId\n fileAttributes: FileAttributes\n imageAttributes: ImageAttributes\n originAssetFile: DocIdNullable\n links?: AssetFileLinks\n metadata: Metadata\n manipulatedAt: DatetimeUTC\n _resourceName: 'imageFile'\n}\n\nexport interface AssetFileAudio extends AssetFileAware, AnzuUserAndTimeTrackingAware, AssetFileMainRouteAware {\n id: DocId\n asset: DocId\n fileAttributes: FileAttributes\n audioAttributes: AudioAttributes\n originAssetFile: DocIdNullable\n links?: AssetFileLinks\n imagePreview: AssetFileImagePreviewNullable\n _resourceName: 'audioFile'\n}\n\nexport interface AssetFileVideo extends AssetFileAware, AnzuUserAndTimeTrackingAware {\n id: DocId\n asset: DocId\n fileAttributes: FileAttributes\n videoAttributes: VideoAttributes\n originAssetFile: DocIdNullable\n links?: AssetFileLinks\n imagePreview: AssetFileImagePreviewNullable\n _resourceName: 'videoFile'\n}\n\nexport interface AssetFileDocument extends AssetFileAware, AnzuUserAndTimeTrackingAware, AssetFileMainRouteAware {\n id: DocId\n asset: DocId\n fileAttributes: FileAttributes\n documentAttributes: DocumentAttributes\n originAssetFile: DocIdNullable\n links?: AssetFileLinks\n _resourceName: 'documentFile'\n}\n\nexport interface AssetFileDownloadLink extends AnzuUserAndTimeTrackingAware {\n id: DocId\n link: string\n _system: string\n _resourceName: 'imageFile'\n}\n\nexport type AssetFile = AssetFileImage | AssetFileAudio | AssetFileVideo | AssetFileDocument\n\nexport type AssetFileNullable = AssetFileImage | AssetFileAudio | AssetFileVideo | AssetFileDocument | null\n\nexport const assetFileIsImageFile = (value: any): value is AssetFileImage => {\n if (!value || !value._resourceName) return false\n return value._resourceName === 'imageFile'\n}\n\nexport const assetFileIsVideoFile = (value: any): value is AssetFileVideo => {\n if (!value || !value._resourceName) return false\n return value._resourceName === 'videoFile'\n}\n\nexport const assetFileIsAudioFile = (value: any): value is AssetFileAudio => {\n if (!value || !value._resourceName) return false\n return value._resourceName === 'audioFile'\n}\n\nexport const assetFileIsDocumentFile = (value: any): value is AssetFileDocument => {\n if (!value || !value._resourceName) return false\n return value._resourceName === 'documentFile'\n}\n\ninterface ImageAttributes {\n ratioWidth: number\n ratioHeight: number\n width: number\n height: number\n rotation: number\n mostDominantColor: string\n animated: boolean\n}\n\ninterface Metadata {\n exifData: [] // todo check\n id: string\n createdAt: string\n modifiedAt: string\n createdBy: number\n modifiedBy: number\n}\n\ninterface AudioAttributes {\n duration: number\n codecName: string\n bitrate: number\n}\n\ninterface DocumentAttributes {\n pageCount: number\n}\n\ninterface VideoAttributes {\n bitrate: number\n codecName: string\n duration: number\n height: number\n ratioHeight: number\n ratioWidth: number\n rotation: number\n width: number\n}\n\nexport interface AssetFileImagePreview {\n imageFile: DocId\n position: number\n}\n\nexport type AssetFileImagePreviewNullable = AssetFileImagePreview | null\n","import { ref } from 'vue'\n\nconst showAll = ref(false)\n\nexport function useCustomDataForm() {\n const toggleForm = () => {\n showAll.value = !showAll.value\n }\n\n return {\n showAll,\n toggleForm,\n }\n}\n","import { ref } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport type { ValueObjectOption } from '@/types/ValueObject'\n\nexport const CustomDataFormElementType = {\n String: 'string',\n Integer: 'integer',\n StringArray: 'stringArray',\n StringArrayLegacy: 'string_array', // todo: remove\n Boolean: 'boolean',\n} as const\nexport const CustomDataFormElementTypeDefault = CustomDataFormElementType.String\nexport type CustomDataFormElementTypeType = (typeof CustomDataFormElementType)[keyof typeof CustomDataFormElementType]\n\nexport function useCustomDataFormElementType() {\n const { t } = useI18n()\n const customDataFormElementTypeOptions = ref<ValueObjectOption<CustomDataFormElementTypeType>[]>([\n {\n value: CustomDataFormElementType.String,\n title: t('common.customFormElement.type.string'),\n },\n {\n value: CustomDataFormElementType.Integer,\n title: t('common.customFormElement.type.integer'),\n },\n {\n value: CustomDataFormElementType.StringArray,\n title: t('common.customFormElement.type.C'),\n },\n {\n value: CustomDataFormElementType.StringArrayLegacy,\n title: t('common.customFormElement.type.stringArrayLegacy'),\n },\n {\n value: CustomDataFormElementType.Boolean,\n title: t('common.customFormElement.type.boolean'),\n },\n ])\n\n const getCustomDataFormElementTypeOption = (value: CustomDataFormElementTypeType) => {\n return customDataFormElementTypeOptions.value.find((item) => item.value === value)\n }\n\n return {\n customDataFormElementTypeOptions,\n getCustomDataFormElementTypeOption,\n }\n}\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport { computed } from 'vue'\nimport { isNull } from '@/utils/common'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: boolean | null\n dataCy?: string\n label?: string | undefined\n allT?: string\n trueT?: string\n falseT?: string\n }>(),\n {\n dataCy: 'optional-boolean',\n label: undefined,\n allT: 'common.model.all',\n trueT: 'common.model.boolean.true',\n falseT: 'common.model.boolean.false',\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: boolean | null): void\n}>()\n\nconst value = computed({\n get() {\n if (isNull(props.modelValue)) return -1\n return props.modelValue ? 1 : 0\n },\n set(newValue) {\n let returnValue: null | boolean = null\n if (newValue === 1) returnValue = true\n if (newValue === 0) returnValue = false\n emit('update:modelValue', returnValue)\n },\n})\n\nconst { t } = useI18n()\n\nconst items = computed(() => {\n return [\n { value: -1, title: t(props.allT) },\n { value: 1, title: t(props.trueT) },\n { value: 0, title: t(props.falseT) },\n ]\n})\n</script>\n\n<template>\n <VSelect\n v-model=\"value\"\n :data-cy=\"dataCy\"\n :label=\"label\"\n :items=\"items\"\n />\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, isProxy, ref, toRaw } from 'vue'\nimport type { ErrorObject } from '@vuelidate/core'\nimport { useVuelidate } from '@vuelidate/core'\nimport type { CustomDataFormElement } from '@/components/customDataForm/CustomDataForm'\nimport type { ValidationScope } from '@/types/Validation'\nimport { CustomDataFormElementType } from '@/components/customDataForm/CustomDataFormElementTypes'\nimport { isEmptyObject } from '@/utils/common'\nimport { useValidate } from '@/validators/vuelidate/useValidate'\nimport ABooleanSelect from '@/components/ABooleanSelect.vue'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: any\n config: CustomDataFormElement\n validationScope?: ValidationScope\n }>(),\n {\n validationScope: undefined,\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: { property: string; value: any }): void\n (e: 'blur', data: any): void\n}>()\n\nconst fixValue = (value: any) => {\n if (props.config.attributes.type === CustomDataFormElementType.Integer) {\n return parseInt(value)\n }\n return value\n}\n\nconst updateModelValue = (value: any) => {\n emit('update:modelValue', { property: props.config.property, value: fixValue(value) })\n}\n\nconst modelValueComputed = computed(() => {\n const value = isProxy(props.modelValue) ? toRaw(props.modelValue) : props.modelValue\n if (\n (props.config.attributes.type === CustomDataFormElementType.StringArray ||\n props.config.attributes.type === CustomDataFormElementType.StringArrayLegacy) &&\n isEmptyObject(value)\n )\n return []\n return value\n})\n\nconst { maxLength, minLength, requiredIf, minValue, maxValue, stringArrayItemLength } = useValidate()\n\nconst rules = computed(() => {\n const dynamicRules: Record<string, any> = {\n modelValueComputed: {\n required: requiredIf(props.config.attributes.required),\n },\n }\n switch (props.config.attributes.type) {\n case CustomDataFormElementType.String:\n dynamicRules.modelValueComputed.minLength = minLength(\n props.config.attributes.minValue ? props.config.attributes.minValue : 0\n )\n dynamicRules.modelValueComputed.maxLength = maxLength(\n props.config.attributes.maxValue ? props.config.attributes.maxValue : 256\n )\n break\n case CustomDataFormElementType.Integer:\n dynamicRules.modelValueComputed.minValue = minValue(\n props.config.attributes.minValue ? props.config.attributes.minValue : 0\n )\n dynamicRules.modelValueComputed.maxValue = maxValue(\n props.config.attributes.maxValue ? props.config.attributes.maxValue : 9999\n )\n break\n case CustomDataFormElementType.StringArray:\n dynamicRules.modelValueComputed.minLength = minLength(\n props.config.attributes.minCount ? props.config.attributes.minCount : 0\n )\n dynamicRules.modelValueComputed.maxLength = maxLength(\n props.config.attributes.maxCount ? props.config.attributes.maxCount : 32\n )\n dynamicRules.modelValueComputed.stringArrayItemLength = stringArrayItemLength(\n props.config.attributes.minValue ? props.config.attributes.minValue : 0,\n props.config.attributes.maxValue ? props.config.attributes.maxValue : 256\n )\n break\n }\n\n return dynamicRules\n})\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst v$ = useVuelidate(rules, { modelValueComputed }, { $scope: props.validationScope })\n\nconst errorMessageComputed = computed(() => {\n if (v$.value.$errors.length) return [v$.value.$errors.map((item: ErrorObject) => item.$message).join(' ')]\n return []\n})\n\nconst counter = ref<number | undefined>(undefined)\ncounter.value = props.config.attributes.maxValue ?? undefined\n\nconst onBlur = () => {\n emit('blur', props.modelValue)\n v$.value.$touch()\n}\n</script>\n\n<template>\n <VTextarea\n v-if=\"config.attributes.type === CustomDataFormElementType.String\"\n :model-value=\"modelValue\"\n auto-grow\n :rows=\"1\"\n :label=\"config.name\"\n :error-messages=\"errorMessageComputed\"\n :counter=\"counter\"\n :readonly=\"config.attributes.readonly\"\n :data-cy=\"'custom-field-' + config.property\"\n @update:model-value=\"updateModelValue\"\n @blur=\"onBlur\"\n >\n <template #label>\n {{ config.name\n }}<span\n v-if=\"config.attributes.required\"\n class=\"required\"\n />\n </template>\n </VTextarea>\n <VTextField\n v-else-if=\"config.attributes.type === CustomDataFormElementType.Integer\"\n :model-value=\"modelValueComputed\"\n type=\"number\"\n :label=\"config.name\"\n :error-messages=\"errorMessageComputed\"\n :readonly=\"config.attributes.readonly\"\n :data-cy=\"'custom-field-' + config.property\"\n @update:model-value=\"updateModelValue\"\n @blur=\"onBlur\"\n >\n <template #label>\n {{ config.name\n }}<span\n v-if=\"config.attributes.required\"\n class=\"required\"\n />\n </template>\n </VTextField>\n <VCombobox\n v-else-if=\"\n config.attributes.type === CustomDataFormElementType.StringArray ||\n config.attributes.type === CustomDataFormElementType.StringArrayLegacy\n \"\n :model-value=\"modelValueComputed\"\n :label=\"config.name\"\n multiple\n chips\n :readonly=\"config.attributes.readonly\"\n :error-messages=\"errorMessageComputed\"\n :data-cy=\"'custom-field-' + config.property\"\n @update:model-value=\"updateModelValue\"\n @blur=\"onBlur\"\n >\n <template #label>\n {{ config.name\n }}<span\n v-if=\"config.attributes.required\"\n class=\"required\"\n />\n </template>\n </VCombobox>\n <VSwitch\n v-if=\"config.attributes.type === CustomDataFormElementType.Boolean && config.attributes.required === true\"\n :label=\"config.name\"\n :model-value=\"modelValueComputed\"\n :readonly=\"config.attributes.readonly\"\n :data-cy=\"'custom-field-' + config.property\"\n @update:model-value=\"updateModelValue\"\n />\n <ABooleanSelect\n v-if=\"config.attributes.type === CustomDataFormElementType.Boolean && config.attributes.required === false\"\n :model-value=\"modelValueComputed\"\n :label=\"config.name\"\n :data-cy=\"'custom-field-' + config.property\"\n :readonly=\"config.attributes.readonly\"\n @update:model-value=\"updateModelValue\"\n />\n</template>\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport useVuelidate from '@vuelidate/core'\nimport type { CustomDataFormElement } from '@/components/customDataForm/CustomDataForm'\nimport type { ValidationScope } from '@/types/Validation'\nimport { useCustomDataForm } from '@/components/customDataForm/useCustomDataForm'\nimport ACustomFormElement from '@/components/customDataForm/ACustomDataFormElement.vue'\nimport ARow from '@/components/ARow.vue'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: { [key: string]: any }\n elements: CustomDataFormElement[]\n validationScope?: ValidationScope\n pinnedCount?: number\n readonly?: boolean\n }>(),\n {\n validationScope: undefined,\n pinnedCount: 1000,\n readonly: false,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: any): void\n (e: 'anyChange'): void\n}>()\n\nconst { t } = useI18n()\n\nconst { showAll, toggleForm } = useCustomDataForm()\n\nconst updateModelValue = (data: { property: string; value: any }) => {\n const updated = {} as { [key: string]: any }\n updated[data.property] = data.value\n emit('update:modelValue', { ...props.modelValue, ...updated })\n emit('anyChange')\n}\n\nconst elementsPinned = computed(() => {\n return props.elements.slice(0, props.pinnedCount)\n})\n\nconst elementsOther = computed(() => {\n return props.elements.slice(props.pinnedCount)\n})\n\nconst showHideButtonText = computed(() => {\n return showAll.value\n ? t('common.damImage.asset.detail.metadataToggle.show')\n : t('common.damImage.asset.detail.metadataToggle.hide')\n})\nconst showHideButtonIcon = computed(() => {\n return showAll.value ? 'mdi-minus' : 'mdi-plus'\n})\n\nconst enableShowHide = computed(() => {\n return props.elements.length > props.pinnedCount\n})\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst v$ = useVuelidate({ $scope: props.validationScope })\n\nconst validate = (): Promise<boolean> => {\n return v$.value.$validate()\n}\n\ndefineExpose({\n validate,\n})\n</script>\n\n<template>\n <div class=\"w-100\">\n <slot name=\"before-pinned\" />\n <VRow\n v-for=\"element in elementsPinned\"\n :key=\"element.id\"\n dense\n class=\"mt-1\"\n >\n <VCol>\n <ARow\n v-if=\"readonly\"\n :title=\"element.name\"\n >\n {{ modelValue[element.property] }}\n </ARow>\n <ACustomFormElement\n v-else\n :config=\"element\"\n :model-value=\"modelValue[element.property]\"\n :validation-scope=\"validationScope\"\n @update:model-value=\"updateModelValue\"\n />\n </VCol>\n </VRow>\n <slot name=\"after-pinned\" />\n </div>\n <div\n v-show=\"showAll\"\n class=\"w-100\"\n >\n <VRow\n v-for=\"element in elementsOther\"\n :key=\"element.id\"\n dense\n class=\"mt-1\"\n >\n <VCol>\n <ARow\n v-if=\"readonly\"\n :title=\"element.name\"\n >\n {{ modelValue[element.property] }}\n </ARow>\n <ACustomFormElement\n v-else\n :config=\"element\"\n :model-value=\"modelValue[element.property]\"\n @update:model-value=\"updateModelValue\"\n />\n </VCol>\n </VRow>\n </div>\n <VBtn\n v-if=\"enableShowHide\"\n variant=\"text\"\n size=\"small\"\n class=\"my-2\"\n @click=\"toggleForm\"\n >\n <VIcon :icon=\"showHideButtonIcon\" />\n {{ showHideButtonText }}\n </VBtn>\n</template>\n","import { defineStore } from 'pinia'\nimport { ref } from 'vue'\nimport type { MediaAware } from '@/types/MediaAware'\nimport type { ImageCreateUpdateAware } from '@/types/ImageAware'\nimport { cloneDeep, isNull } from '@/utils/common'\n\nexport const isMediaAware = (item: MediaAware | ImageCreateUpdateAware | null): item is MediaAware => {\n if (isNull(item)) return false\n return 'damMedia' in item\n}\n\nexport const isImageCreateUpdateAware = (\n item: MediaAware | ImageCreateUpdateAware | null\n): item is ImageCreateUpdateAware => {\n if (isNull(item)) return false\n return !('damMedia' in item) && 'texts' in item\n}\n\nexport const useImageMediaWidgetStore = defineStore('commonImageMediaWidgetStore', () => {\n const detail = ref<MediaAware | ImageCreateUpdateAware | null>(null)\n\n function reset() {\n detail.value = null\n }\n\n function setDetail(data: ImageCreateUpdateAware | MediaAware | null) {\n if (isNull(data)) detail.value = null\n detail.value = cloneDeep(data)\n }\n\n return {\n setDetail,\n detail,\n reset,\n }\n})\n","import type { Ref } from 'vue'\nimport { computed } from 'vue'\nimport useVuelidate from '@vuelidate/core'\nimport { useValidate } from '@/validators/vuelidate/useValidate'\nimport type { ImageCreateUpdateAware } from '@/types/ImageAware'\nimport type { MediaAware } from '@/types/MediaAware'\nimport { isImageCreateUpdateAware } from '@/components/damImage/uploadQueue/composables/imageMediaWidgetStore'\n\nexport const ADamAssetMetadataValidationScopeSymbol = Symbol.for('anzu:common:asset-metadata-validation-scope')\n\nexport const AImageMetadataValidationScopeSymbol = Symbol.for('anzu:common:image-validation-scope')\n\nexport const ADamKeywordCreateValidationScopeSymbol = Symbol.for('anzu:common:keyword-create-validation-scope')\n\nexport const ADamAuthorCreateValidationScopeSymbol = Symbol.for('anzu:common:author-create-validation-scope')\n\nexport function useImageValidation(\n image: Ref<ImageCreateUpdateAware | MediaAware | null>,\n sourceRequired: Ref<boolean>\n) {\n const { requiredIf, maxLength } = useValidate()\n const rules = computed(() => {\n if (isImageCreateUpdateAware(image.value)) {\n return {\n image: {\n texts: {\n description: {\n maxLength: maxLength(2000),\n },\n source: {\n required: requiredIf(sourceRequired.value),\n maxLength: maxLength(255),\n },\n },\n },\n }\n }\n return {}\n })\n const v$ = useVuelidate(rules, { image }, { $scope: AImageMetadataValidationScopeSymbol })\n\n return {\n v$,\n }\n}\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport type { DamAssetTypeType } from '@/types/coreDam/Asset'\nimport { useDamConfigState } from '@/components/damImage/uploadQueue/composables/damConfigState'\nimport ACustomDataForm from '@/components/customDataForm/ACustomDataForm.vue'\nimport { ADamAssetMetadataValidationScopeSymbol } from '@/components/damImage/uploadQueue/composables/uploadValidations'\nimport type { IntegerId } from '@/types/common'\nimport { isUndefined } from '@/utils/common'\n\nconst props = withDefaults(\n defineProps<{\n assetType: DamAssetTypeType\n extSystem: IntegerId\n modelValue: { [key: string]: any }\n dataCy?: string\n readonly?: boolean\n }>(),\n {\n dataCy: undefined,\n readonly: false,\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: any): void\n (e: 'anyChange'): void\n}>()\n\nconst { getDamConfigAssetCustomFormElements, getDamConfigExtSystem } = useDamConfigState()\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst configAssetCustomFormElements = getDamConfigAssetCustomFormElements(props.extSystem)\nif (isUndefined(configAssetCustomFormElements)) {\n throw new Error('Custom form elements must be initialised.')\n}\n\nconst elements = computed(() => {\n return configAssetCustomFormElements[props.assetType]\n})\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst configExtSystem = getDamConfigExtSystem(props.extSystem)\n\nif (isUndefined(configExtSystem)) {\n throw new Error('AssetCustomMetadataForm: Ext system must be initialised.')\n}\n\nconst pinnedCount = computed(() => {\n return configExtSystem[props.assetType].customMetadataPinnedAmount\n})\n</script>\n\n<template>\n <ACustomDataForm\n :model-value=\"modelValue\"\n :pinned-count=\"pinnedCount\"\n :elements=\"elements\"\n :readonly=\"readonly\"\n :validation-scope=\"ADamAssetMetadataValidationScopeSymbol\"\n @any-change=\"emit('anyChange')\"\n @update:model-value=\"emit('update:modelValue', $event)\"\n >\n <template #after-pinned>\n <slot name=\"after-pinned\" />\n </template>\n <template #before-pinned>\n <slot name=\"before-pinned\" />\n </template>\n </ACustomDataForm>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue'\n\nconst props = withDefaults(\n defineProps<{\n color?: string | null\n width?: number\n height?: number\n }>(),\n {\n color: null,\n width: 20,\n height: 20,\n }\n)\n\nconst style = computed(() => {\n return `background-color: ${props.color ? props.color : 'transparent'}; width: ${props.width}px; height: ${\n props.height\n }px;`\n})\n</script>\n\n<template>\n <div :style=\"style\">\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ color }}\n </VTooltip>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport AColorBox from '@/components/dam/AColorBox.vue'\nimport type { AssetFileImage } from '@/types/coreDam/AssetFile'\nimport ABooleanValue from '@/components/ABooleanValue.vue'\n\nwithDefaults(\n defineProps<{\n file: AssetFileImage\n }>(),\n {}\n)\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <VRow>\n <VCol cols=\"3\">\n {{ t('common.damImage.asset.detail.info.field.dominantColor') }}\n </VCol>\n <VCol cols=\"9\">\n <AColorBox :color=\"file.imageAttributes.mostDominantColor\" />\n </VCol>\n </VRow>\n <VRow>\n <VCol cols=\"3\">\n {{ t('common.damImage.asset.detail.info.field.width') }}\n </VCol>\n <VCol cols=\"9\">\n {{ file.imageAttributes.width }} px\n </VCol>\n </VRow>\n <VRow>\n <VCol cols=\"3\">\n {{ t('common.damImage.asset.detail.info.field.height') }}\n </VCol>\n <VCol cols=\"9\">\n {{ file.imageAttributes.height }} px\n </VCol>\n </VRow>\n <VRow>\n <VCol cols=\"3\">\n {{ t('common.damImage.asset.detail.info.field.ratio') }}\n </VCol>\n <VCol cols=\"9\">\n {{ file.imageAttributes.ratioWidth }} / {{ file.imageAttributes.ratioHeight }}\n </VCol>\n </VRow>\n <VRow>\n <VCol cols=\"3\">\n {{ t('common.damImage.asset.detail.info.field.animated') }}\n </VCol>\n <VCol cols=\"9\">\n <ABooleanValue :value=\"file.imageAttributes.animated\" />\n </VCol>\n </VRow>\n</template>\n","<script lang=\"ts\" setup>\nimport { watchDebounced } from '@vueuse/core'\nimport { computed, getCurrentInstance, inject, type Ref, ref, watch } from 'vue'\nimport type { ErrorObject } from '@vuelidate/core'\nimport { useI18n } from 'vue-i18n'\nimport type { Pagination } from '@/labs/filters/pagination'\nimport { usePagination } from '@/labs/filters/pagination'\nimport type { DocId, IntegerId } from '@/types/common'\nimport { cloneDeep, isArray, isNull, isUndefined } from '@/utils/common'\nimport { SubjectScopeSymbol, SystemScopeSymbol } from '@/components/injectionKeys'\nimport { stringSplitOnFirstOccurrence } from '@/utils/string'\nimport type { ValueObjectOption } from '@/types/ValueObject'\nimport type { FilterConfig, FilterData } from '@/labs/filters/filterFactory'\nimport { FilterInnerConfigKey, FilterInnerDataKey } from '@/labs/filters/filterInjectionKeys'\nimport type { DatatableSortBy } from '@/composables/system/datatableColumns'\nimport { useAlerts } from '@/composables/system/alerts'\n\ntype FetchItemsMinimalType = (\n pagination: Ref<Pagination>,\n filterData: FilterData,\n filterConfig: FilterConfig\n) => Promise<any[]>\n\ntype UseCachedType = () => {\n fetch: any\n add: any\n addManualMinimal: any\n}\n\nconst props = withDefaults(\n defineProps<{\n modelValue: any\n label?: string | undefined\n required?: boolean\n multiple?: boolean\n clearable?: boolean\n v?: any\n errorMessage?: string\n hideLabel?: boolean\n fetchItemsMinimal: FetchItemsMinimalType\n filterByField?: string\n filterSortBy?: DatatableSortBy\n loading?: boolean\n useCached: UseCachedType\n itemTitle?: string\n itemValue?: string\n minSearchChars?: number\n minSearchText?: string | undefined\n }>(),\n {\n label: undefined,\n required: undefined,\n multiple: false,\n clearable: false,\n v: null,\n errorMessage: undefined,\n hideLabel: false,\n filterByField: 'name',\n filterSortBy: null,\n loading: false,\n itemTitle: 'name',\n itemValue: 'id',\n minSearchChars: 2,\n minSearchText: undefined,\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: DocId | IntegerId | DocId[] | IntegerId[] | null | undefined): void\n (e: 'blur', data: DocId | IntegerId | DocId[] | IntegerId[] | null | undefined): void\n (e: 'focus', data: DocId | IntegerId | DocId[] | IntegerId[] | null | undefined): void\n (e: 'searchChange', data: string): void\n (e: 'searchChangeDebounced', data: string): void\n}>()\n\nconst search = defineModel<string>('search', { default: '', required: false })\nconst loadingLocal = defineModel<boolean>('loadingLocal', { default: false, required: false })\nconst fetchedItemsMinimal = defineModel<Map<IntegerId | DocId, any>>('fetchedItemsMinimal', {\n required: true,\n})\n\nconst filterInnerConfig = inject(FilterInnerConfigKey)\nconst filterInnerData = inject(FilterInnerDataKey)\n\nconst componentName = getCurrentInstance()?.type.__name\n\nif (isUndefined(filterInnerConfig) || isUndefined(filterInnerData)) {\n throw new Error(`[${componentName}] Incorrect provide/inject config.`)\n}\n\nif (\n // eslint-disable-next-line vue/no-setup-props-reactivity-loss\n isUndefined(filterInnerConfig.fields[props.filterByField]) ||\n // eslint-disable-next-line vue/no-setup-props-reactivity-loss\n isUndefined(filterInnerData[props.filterByField])\n) {\n throw new Error(\n `[${componentName}] Incorrect filter inner config. ` +\n `FilterByField is '${props.filterByField}' and available options are ${Object.keys(filterInnerData).join(', ')}.`\n )\n}\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { fetch, add, addManualMinimal } = props.useCached()\n\nconst noDataText = computed(() => {\n if (loadingLocal.value) {\n return '$vuetify.loading'\n }\n if (fetchedItemsMinimal.value.size === 0 && search.value.length < props.minSearchChars) {\n return isUndefined(props.minSearchText)\n ? t('common.filter.filterMinChars', { min: props.minSearchChars })\n : props.minSearchText\n }\n return undefined\n})\n\nconst modelValue = computed({\n get() {\n return props.modelValue\n },\n set(newValue: DocId | IntegerId | DocId[] | IntegerId[] | null | undefined) {\n emit('update:modelValue', cloneDeep<DocId | IntegerId | DocId[] | IntegerId[] | null | undefined>(newValue))\n },\n})\n\nconst { t } = useI18n()\nconst system = inject<string | undefined>(SystemScopeSymbol, undefined)\nconst subject = inject<string | undefined>(SubjectScopeSymbol, undefined)\n\nconst isFocused = ref(false)\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { pagination } = usePagination(\n // eslint-disable-next-line vue/no-setup-props-reactivity-loss\n isNull(props.filterSortBy) ? null : props.filterSortBy.key,\n props.filterSortBy?.order\n)\n\nconst onFocus = () => {\n isFocused.value = true\n emit('focus', modelValue.value)\n}\n\nconst onBlur = () => {\n isFocused.value = false\n props.v?.$touch()\n emit('blur', modelValue.value)\n}\n\nconst errorMessageComputed = computed(() => {\n if (!isUndefined(props.errorMessage)) return [props.errorMessage]\n if (props.v?.$errors?.length) return props.v.$errors.map((item: ErrorObject) => item.$message)\n return []\n})\n\nconst labelComputed = computed(() => {\n if (!isUndefined(props.label)) return props.label\n if (isUndefined(system) || isUndefined(subject) || isUndefined(props.v?.$path)) return ''\n const { end: path } = stringSplitOnFirstOccurrence(props.v?.$path, '.')\n return t(system + '.' + subject + '.model.' + path)\n})\n\nconst requiredComputed = computed(() => {\n if (!isUndefined(props.required)) return props.required\n return props.v?.required && props.v?.required.$params.type === 'required'\n})\n\nconst { showErrorsDefault } = useAlerts()\n\nconst apiSearch = async (query: string | null) => {\n if (isNull(query) || query.length < props.minSearchChars) {\n fetchedItemsMinimal.value.clear()\n return\n }\n loadingLocal.value = true\n filterInnerData[props.filterByField] = query\n fetchedItemsMinimal.value.clear()\n try {\n const res = await props.fetchItemsMinimal(pagination, filterInnerData, filterInnerConfig)\n res.forEach((item: any) => {\n fetchedItemsMinimal.value.set(item[props.itemValue], item)\n })\n } catch (e) {\n showErrorsDefault(e)\n } finally {\n loadingLocal.value = false\n }\n}\n\nconst allItems = computed<ValueObjectOption<DocId | IntegerId>[]>(() => {\n const final: Map<IntegerId | DocId, string> = new Map()\n const finalRaw: Map<IntegerId | DocId, any> = new Map()\n if (isArray(modelValue.value)) {\n modelValue.value.forEach((value: any) => {\n final.set(value, '')\n })\n } else if (modelValue.value) {\n final.set(modelValue.value, '')\n }\n fetchedItemsMinimal.value.forEach((value) => {\n final.set(value[props.itemValue], value[props.itemTitle])\n finalRaw.set(value[props.itemValue], cloneDeep(value))\n })\n return Array.from(final, ([key, value]) => {\n return { value: key, title: value, raw: finalRaw.get(key) }\n })\n})\n\nconst tryToAddFromFetchedItems = (ids: Set<DocId | IntegerId>) => {\n return new Promise<boolean>((resolve) => {\n fetchedItemsMinimal.value.forEach((value, key) => {\n if (ids.has(key)) {\n addManualMinimal(cloneDeep(value))\n }\n })\n return resolve(true)\n })\n}\n\nconst onClickClear = () => {\n search.value = ''\n apiSearch('')\n if (props.multiple) {\n modelValue.value = []\n return\n }\n modelValue.value = null\n}\n\nwatchDebounced(\n search,\n (newValueBug, oldValueBug) => {\n // todo rollback fix when fixed on vuetify/vue use side\n const newValue = newValueBug as unknown as string\n const oldValue = oldValueBug as unknown as string | undefined\n if (newValue !== oldValue) {\n apiSearch(newValue)\n emit('searchChangeDebounced', newValue)\n }\n },\n { debounce: 300 }\n)\n\nwatch(search, (newValue, oldValue) => {\n if (newValue !== oldValue) {\n emit('searchChange', newValue)\n }\n})\n\nwatch(\n modelValue,\n async (newValue) => {\n if (isNull(newValue) || isUndefined(newValue) || (isArray(newValue) && newValue.length === 0)) {\n return\n }\n const values = isArray(newValue) ? newValue : [newValue]\n const idsToFetch = new Set(values)\n await tryToAddFromFetchedItems(idsToFetch)\n\n if (idsToFetch.size > 0) {\n add(Array.from(idsToFetch) as Array<DocId & IntegerId>)\n fetch()\n }\n },\n { immediate: true }\n)\n</script>\n\n<template>\n <VAutocomplete\n v-model=\"modelValue\"\n v-model:search=\"search\"\n chips\n :items=\"allItems\"\n no-filter\n :multiple=\"multiple\"\n :clearable=\"clearable\"\n :error-messages=\"errorMessageComputed\"\n :loading=\"loadingLocal\"\n :no-data-text=\"noDataText\"\n autocomplete=\"off\"\n @blur=\"onBlur\"\n @focus=\"onFocus\"\n @click:clear=\"onClickClear\"\n >\n <template #label>\n <span\n v-if=\"!hideLabel\"\n :key=\"requiredComputed + ''\"\n >\n {{ labelComputed }}\n <span\n v-if=\"requiredComputed\"\n class=\"required\"\n />\n </span>\n </template>\n <template #append-item>\n <slot name=\"append-item\" />\n </template>\n <template\n v-if=\"!multiple\"\n #selection\n />\n <!-- @vue-skip -->\n <template #chip=\"{ props: chipProps, item: chipItem }\">\n <slot\n name=\"chip\"\n :props=\"chipProps\"\n :item=\"chipItem\"\n >\n <VChip\n v-bind=\"chipProps\"\n :text=\"chipItem.title\"\n />\n </slot>\n </template>\n <!-- @vue-skip -->\n <template #item=\"{ props: itemProps, item: itemItem }\">\n <slot\n name=\"item\"\n :props=\"itemProps\"\n :item=\"itemItem\"\n >\n <VListItem :props=\"itemProps\" />\n </slot>\n </template>\n </VAutocomplete>\n</template>\n","import type { UploadQueueItem, UploadQueueItemStatusType, UploadQueueItemTypeType } from '@/types/coreDam/UploadQueue'\nimport type { IntegerId } from '@/types/common'\nimport { DamAssetStatusDefault, type DamAssetTypeType } from '@/types/coreDam/Asset'\nimport { AssetFileFailReasonDefault } from '@/types/coreDam/AssetFile'\n\nexport function useUploadQueueItemFactory() {\n const createDefault = (\n key: string,\n type: UploadQueueItemTypeType,\n status: UploadQueueItemStatusType,\n assetType: DamAssetTypeType,\n chunkSize: number,\n licenceId: IntegerId\n ): UploadQueueItem => {\n return {\n key: key,\n type: type,\n file: null,\n status: status,\n isDuplicate: false,\n duplicateAssetId: null,\n assetType: assetType,\n assetStatus: DamAssetStatusDefault,\n displayTitle: '',\n assetId: null,\n fileId: null,\n externalProviderAssetId: null,\n externalProviderName: null,\n externalProviderMetadata: {},\n keywords: [],\n authors: [],\n authorConflicts: [],\n customData: {},\n latestChunkCancelToken: null,\n chunkSize: chunkSize,\n currentChunkIndex: 0,\n chunkTotalCount: 0,\n licenceId: licenceId,\n imagePreview: undefined,\n progress: {\n remainingTime: null,\n progressPercent: null,\n speed: null,\n },\n canEditMetadata: false,\n error: {\n hasError: false,\n message: '',\n assetFileFailReason: AssetFileFailReasonDefault,\n },\n notificationFallbackTimer: undefined,\n notificationFallbackTry: 1,\n slotName: null,\n image: undefined,\n mainFileSingleUse: null,\n }\n }\n\n return {\n createDefault,\n }\n}\n","import type { AssetMetadataSuggestions } from '@/types/coreDam/Asset'\nimport { isArray, isEmptyObject } from '@/utils/common'\nimport type { DocId } from '@/types/common'\n\nexport function useAssetSuggestions() {\n const updateNewNames = (suggestions: AssetMetadataSuggestions, newNames: Set<string>) => {\n for (const [key, value] of Object.entries(suggestions)) {\n if (isEmptyObject(value)) {\n newNames.add(key)\n }\n }\n }\n\n const getAuthorConflicts = (suggestions: AssetMetadataSuggestions) => {\n const conflicts: Array<DocId> = []\n for (const value of Object.values(suggestions)) {\n if (isArray(value) && value.length > 1) {\n value.forEach((id) => {\n conflicts.push(id)\n })\n }\n }\n return conflicts\n }\n\n return {\n updateNewNames,\n getAuthorConflicts,\n }\n}\n","import { type EventBusKey, useEventBus } from '@vueuse/core'\nimport type { DocId } from '@/types/common'\nimport type { AssetFileFailReasonType, AssetFileProcessStatusType } from '@/types/coreDam/AssetFile'\nimport type { DamAssetTypeType, DamDistributionServiceName } from '@/types/coreDam/Asset'\nimport type { DamDistributionStatusType } from '@/types/coreDam/DamConfig'\n\nexport const damNotificationsEventBusKey: EventBusKey<DamNotification> = Symbol('anzu:damNotificationsEventBusKey')\n\nexport function useDamNotificationsEventBus() {\n return useEventBus<DamNotification>(damNotificationsEventBusKey)\n}\n\nexport const DamNotificationName = {\n AssetFileProcessed: 'asset_file_processed',\n AssetFileFailed: 'asset_file_failed',\n AssetFileDuplicate: 'asset_file_duplicate',\n AssetFileUploaded: 'asset_file_uploaded',\n AssetFileDeleted: 'asset_file_deleted',\n AssetMetadataProcessed: 'asset_metadata_processed',\n AssetDeleted: 'asset_deleted',\n DistributionDistributing: 'distribution_distributing',\n DistributionRemoteProcessing: 'distribution_remote_processing',\n DistributionDistributed: 'distribution_distributed',\n DistributionFailed: 'distribution_failed',\n DistributionAuthorized: 'distribution_authorized',\n UserUpdated: 'user_updated',\n AssetFileCopied: 'asset_file_copied',\n} as const\n\nexport type DamNotificationNameType = (typeof DamNotificationName)[keyof typeof DamNotificationName]\n\ntype DamNotificationEvent<T extends DamNotificationNameType, P> = {\n name: T\n data: P\n}\n\ninterface DamNotificationAssetFileData {\n id: DocId\n asset: DocId\n}\n\ninterface DamNotificationAssetFileStatusData {\n id: DocId\n asset: DocId\n status: AssetFileProcessStatusType\n failReason: AssetFileFailReasonType\n assetType: DamAssetTypeType\n originAssetFile: DocId\n}\n\ninterface DamNotificationDistributionData {\n id: DocId\n asset: DocId\n assetFile: DocId\n status: DamDistributionStatusType\n}\n\ninterface DamNotificationAssetData {\n asset: DocId\n}\n\ntype DamNotificationAssetFileProcessed = DamNotificationEvent<\n typeof DamNotificationName.AssetFileProcessed,\n DamNotificationAssetFileStatusData\n>\n\ntype DamNotificationAssetFileFailed = DamNotificationEvent<\n typeof DamNotificationName.AssetFileFailed,\n DamNotificationAssetFileStatusData\n>\n\ntype DamNotificationAssetFileDuplicate = DamNotificationEvent<\n typeof DamNotificationName.AssetFileDuplicate,\n DamNotificationAssetFileStatusData\n>\n\ntype DamNotificationAssetFileUploaded = DamNotificationEvent<\n typeof DamNotificationName.AssetFileUploaded,\n DamNotificationAssetFileStatusData\n>\n\ntype DamNotificationAssetFileDeleted = DamNotificationEvent<\n typeof DamNotificationName.AssetFileDeleted,\n DamNotificationAssetFileData\n>\n\ntype DamNotificationAssetMetadataProcessed = DamNotificationEvent<\n typeof DamNotificationName.AssetMetadataProcessed,\n DamNotificationAssetFileStatusData\n>\n\ntype DamNotificationAssetDeleted = DamNotificationEvent<\n typeof DamNotificationName.AssetDeleted,\n DamNotificationAssetData\n>\n\ntype DamNotificationDistributionDistributing = DamNotificationEvent<\n typeof DamNotificationName.DistributionDistributing,\n DamNotificationDistributionData\n>\n\ntype DamNotificationDistributionRemoteProcessing = DamNotificationEvent<\n typeof DamNotificationName.DistributionRemoteProcessing,\n DamNotificationDistributionData\n>\n\ntype DamNotificationDistributionDistributed = DamNotificationEvent<\n typeof DamNotificationName.DistributionDistributed,\n DamNotificationDistributionData\n>\n\ntype DamNotificationDistributionFailed = DamNotificationEvent<\n typeof DamNotificationName.DistributionFailed,\n DamNotificationDistributionData\n>\n\ntype DamNotificationDistributionAuthorized = DamNotificationEvent<\n typeof DamNotificationName.DistributionAuthorized,\n {\n distributionService: DamDistributionServiceName\n success: boolean\n }\n>\n\ntype DamNotificationUserUpdated = DamNotificationEvent<typeof DamNotificationName.UserUpdated, undefined>\n\ntype DamNotificationAssetFileCopied = DamNotificationEvent<\n typeof DamNotificationName.AssetFileCopied,\n DamNotificationAssetFileStatusData\n>\n\nexport type DamNotification =\n | DamNotificationAssetFileProcessed\n | DamNotificationAssetFileFailed\n | DamNotificationAssetFileDuplicate\n | DamNotificationAssetFileUploaded\n | DamNotificationAssetFileDeleted\n | DamNotificationAssetMetadataProcessed\n | DamNotificationAssetDeleted\n | DamNotificationDistributionDistributing\n | DamNotificationDistributionRemoteProcessing\n | DamNotificationDistributionDistributed\n | DamNotificationDistributionFailed\n | DamNotificationDistributionAuthorized\n | DamNotificationUserUpdated\n | DamNotificationAssetFileCopied\n","import { useWebSocket } from '@vueuse/core'\nimport { ref } from 'vue'\nimport { i18n } from '@/plugins/i18n'\nimport {\n type DamNotification,\n useDamNotificationsEventBus,\n} from '@/components/damImage/uploadQueue/composables/damNotificationsEventBus'\nimport { useCommonAdminCoreDamOptionsGlobal } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport { useAlerts } from '@/composables/system/alerts'\n\nconst { t } = i18n.global || i18n\n\nconst damNotificationsInitialized = ref(false)\n\nexport function initDamNotifications() {\n const { notification } = useCommonAdminCoreDamOptionsGlobal()\n\n const enabled = notification.enabled && notification.webSocketUrl.length > 0\n\n const eventBus = useDamNotificationsEventBus()\n\n const { open } = useWebSocket(notification.webSocketUrl, {\n immediate: false,\n autoClose: false,\n autoReconnect: {\n retries: 5,\n delay: 5000,\n onFailed() {\n if (!enabled) return\n const { showWarning } = useAlerts()\n setTimeout(() => {\n showWarning(t('common.damImage.notificationsNotConnected'))\n }, 3000)\n },\n },\n onMessage(ws, event) {\n if (!enabled) return\n const message = JSON.parse(event.data as string)\n const data = message.data.length ? JSON.parse(message.data) : undefined\n eventBus.emit({ name: message.eventName, data })\n },\n })\n\n const openConnection = () => {\n damNotificationsInitialized.value = true\n if (!enabled) return\n open()\n }\n\n return {\n openConnection,\n damNotificationsInitialized,\n }\n}\n\nexport function useDamNotifications() {\n const eventBus = useDamNotificationsEventBus()\n\n const addDamNotificationListener = (callback: (event: DamNotification) => void) => {\n return eventBus.on(callback)\n }\n\n return {\n addDamNotificationListener,\n }\n}\n","import { DamAssetType, type DamAssetTypeType } from '@/types/coreDam/Asset'\nimport type { DamExtSystemConfig } from '@/types/coreDam/DamConfig'\n\nexport const getAssetTypeByMimeType = (\n mimeType: string,\n damConfigExtSystem: DamExtSystemConfig\n): DamAssetTypeType | null => {\n for (const [key, values] of Object.entries(damConfigExtSystem)) {\n if (!Object.values(DamAssetType).includes(key as DamAssetTypeType)) continue\n for (let i = 0; i < values.mimeTypes.length; i++) {\n if (mimeType === values.mimeTypes[i]) return key as DamAssetTypeType\n }\n }\n return null\n}\n","import type { CancelTokenSource } from 'axios'\nimport type { DocId, DocIdNullable, IntegerId } from '@/types/common'\nimport type {\n AssetExternalProviderIdNullable,\n AssetExternalProviderMetadata,\n DamAssetStatusType,\n DamAssetTypeType,\n} from '@/types/coreDam/Asset'\nimport type { AssetFileFailReasonType, AssetFileLink } from '@/types/coreDam/AssetFile'\nimport type { ImageAware } from '@/types/ImageAware'\n\nexport type UploadQueueKey = string\n\nexport interface UploadQueue {\n items: UploadQueueItem[]\n totalCount: number\n processedCount: number\n fileInputKey: number // used to reset html input file element\n\n suggestions: {\n newKeywordNames: Set<string>\n newAuthorNames: Set<string>\n }\n}\n\nexport const UploadQueueItemType = {\n File: 'file',\n Asset: 'asset',\n ExternalProviderAsset: 'externalProviderAsset',\n SlotFile: 'slotFile',\n} as const\nexport type UploadQueueItemTypeType = (typeof UploadQueueItemType)[keyof typeof UploadQueueItemType]\n\nexport const UploadQueueItemStatus = {\n Loading: 'loading', // loading additional api data\n Waiting: 'waiting', // waiting to be uploaded\n Uploading: 'uploading', // uploading right now\n Processing: 'processing', // all data sent by FE, server processing, waiting for notification, todo\n Failed: 'failed', // any error\n Uploaded: 'uploaded', // uploaded/ready after loading\n Stop: 'stop', // after hitting stop upload\n} as const\nexport type UploadQueueItemStatusType = (typeof UploadQueueItemStatus)[keyof typeof UploadQueueItemStatus]\n\nexport interface UploadQueueItem {\n key: string\n file: File | null\n status: UploadQueueItemStatusType\n assetStatus: DamAssetStatusType\n isDuplicate: boolean\n type: UploadQueueItemTypeType\n assetType: DamAssetTypeType\n displayTitle: string\n assetId: DocIdNullable\n duplicateAssetId: DocIdNullable\n fileId: DocIdNullable\n externalProviderAssetId: AssetExternalProviderIdNullable\n externalProviderName: string | null\n externalProviderMetadata: AssetExternalProviderMetadata\n latestChunkCancelToken: CancelTokenSource | null\n chunkSize: number\n currentChunkIndex: number\n chunkTotalCount: number\n licenceId: IntegerId\n imagePreview?: AssetFileLink\n canEditMetadata: boolean\n keywords: DocId[]\n authors: DocId[]\n customData: any\n authorConflicts: DocId[]\n progress: {\n remainingTime: null | number\n progressPercent: null | number\n speed: null | number\n }\n error: {\n hasError: boolean\n message: string\n assetFileFailReason: AssetFileFailReasonType\n }\n notificationFallbackTimer: ReturnType<typeof setTimeout> | undefined\n notificationFallbackTry: number\n slotName: string | null\n image: undefined | ImageAware // todo check\n mainFileSingleUse: boolean | null\n}\n\nexport interface DamUploadStartResponse {\n id: DocId\n asset: DocId\n}\n","import { ref } from 'vue'\nimport { isNull } from '@/utils/common'\nimport { useDamConfigStore } from '@/components/damImage/uploadQueue/composables/damConfigStore'\n\nconst chunkSize = ref<number | undefined>(undefined)\n\nexport function useDamUploadChunkSize(apiTimeout: number = 30) {\n const damConfigStore = useDamConfigStore()\n const lastChunkSize = ref(chunkSize.value || damConfigStore.damPrvConfig.settings.imageChunkConfig.minSize)\n\n const minUploadTimeThreshold = apiTimeout / 5\n const idealUploadTimeThreshold = apiTimeout / 4\n const maxUploadTimeThreshold = apiTimeout / 2\n\n const updateChunkSize = (speed: number | null) => {\n if (isNull(speed)) {\n return false\n }\n\n const expectedChunkUploadSpeed = lastChunkSize.value / speed\n if (expectedChunkUploadSpeed > maxUploadTimeThreshold) {\n lastChunkSize.value = returnFromRange(maxUploadTimeThreshold * speed)\n chunkSize.value = lastChunkSize.value\n\n return true\n }\n if (expectedChunkUploadSpeed < minUploadTimeThreshold) {\n lastChunkSize.value = returnFromRange(idealUploadTimeThreshold * speed)\n chunkSize.value = lastChunkSize.value\n\n return true\n }\n\n return false\n }\n\n const returnFromRange = (value: number) => {\n if (value > damConfigStore.damPrvConfig.settings.imageChunkConfig.maxSize) {\n return damConfigStore.damPrvConfig.settings.imageChunkConfig.maxSize\n }\n if (value < damConfigStore.damPrvConfig.settings.imageChunkConfig.minSize) {\n return damConfigStore.damPrvConfig.settings.imageChunkConfig.minSize\n }\n\n return value\n }\n\n return {\n lastChunkSize,\n updateChunkSize,\n }\n}\n","export const damFileTypeFix = (file: File | null | undefined) => {\n if (!file) return ''\n if (file.type && file.type.length > 0) {\n return file.type\n }\n const extension = file.name.split('.').pop()?.toLowerCase()\n switch (extension) {\n case 'mov':\n return 'video/quicktime'\n case 'icc':\n return 'application/vnd.iccprofile'\n default:\n return ''\n }\n}\n","import type * as SentryType from '@sentry/vue'\n\ndeclare global {\n interface Window {\n Sentry?: {\n captureException(error: Error, context?: Record<string, any>): void\n captureMessage(message: string, context?: Record<string, any>): void\n setTag(key: string, value: string): void\n setUser(user: { id: string, email?: string, username?: string }): void\n [key: string]: any\n }\n }\n}\n\ninterface SentryContext {\n extra?: Record<string, any>\n tags?: Record<string, string>\n level?: 'fatal' | 'error' | 'warning' | 'log' | 'info' | 'debug'\n [key: string]: any\n}\n\nlet sentryPromise: Promise<typeof SentryType | null> | null = null\n\nconst getSentry = (): Promise<typeof SentryType | null> => {\n if (!sentryPromise) {\n sentryPromise = import('@sentry/vue')\n .then((module) => module)\n .catch(() => null)\n }\n return sentryPromise\n}\n\nexport function useSentry() {\n const logError = (error: Error, context?: SentryContext): void => {\n console.error('[Common Admin]', error)\n\n if (window.Sentry) {\n try {\n window.Sentry.captureException(error, {\n ...context,\n tags: {\n ...context?.tags,\n component: 'common-admin',\n }\n })\n return\n } catch (e) {\n console.debug('Window Sentry logging failed', e)\n }\n }\n\n getSentry().then((sentry) => {\n if (sentry) {\n try {\n sentry.captureException(error, {\n ...context,\n tags: {\n ...context?.tags,\n component: 'common-admin',\n }\n })\n } catch (e) {\n console.debug('Imported Sentry logging failed', e)\n }\n }\n })\n }\n\n const logMessage = (\n message: string,\n level: 'fatal' | 'error' | 'warning' | 'info' | 'debug' = 'info',\n context?: SentryContext\n ): void => {\n switch (level) {\n case 'fatal':\n case 'error':\n console.error('[Common Admin]', message)\n break\n case 'warning':\n console.warn('[Common Admin]', message)\n break\n case 'info':\n console.info('[Common Admin]', message)\n break\n case 'debug':\n console.debug('[Common Admin]', message)\n break\n default:\n console.log('[Common Admin]', message)\n }\n\n if (window.Sentry) {\n try {\n window.Sentry.captureMessage(message, {\n level,\n ...context,\n tags: {\n ...context?.tags,\n component: 'common-admin',\n }\n })\n return\n } catch (e) {\n console.debug('Window Sentry logging failed', e)\n }\n }\n\n getSentry().then((sentry) => {\n if (sentry) {\n try {\n sentry.captureMessage(message, {\n level,\n ...context,\n tags: {\n ...context?.tags,\n component: 'common-admin',\n }\n })\n } catch (e) {\n console.debug('Imported Sentry logging failed', e)\n }\n }\n })\n }\n\n const setTag = (key: string, value: string): void => {\n if (window.Sentry) {\n try {\n window.Sentry.setTag(key, value)\n return\n } catch (e) {\n // Fail silently\n }\n }\n\n getSentry().then((sentry) => {\n if (sentry) {\n try {\n sentry.setTag(key, value)\n } catch (e) {\n // Fail silently\n }\n }\n })\n }\n\n const setUser = (user: { id: string, email?: string, username?: string }): void => {\n if (window.Sentry) {\n try {\n window.Sentry.setUser(user)\n return\n } catch (e) {\n // Fail silently\n }\n }\n\n getSentry().then((sentry) => {\n if (sentry) {\n try {\n sentry.setUser(user)\n } catch (e) {\n // Fail silently\n }\n }\n })\n }\n\n return {\n logError,\n logMessage,\n setTag,\n setUser\n }\n}\n","import type { AxiosInstance } from 'axios'\nimport axios from 'axios'\nimport { type UploadQueueItem, UploadQueueItemType } from '@/types/coreDam/UploadQueue'\nimport type { DocId } from '@/types/common'\nimport { HTTP_STATUS_CREATED, HTTP_STATUS_OK } from '@/composables/statusCodes'\nimport { damFileTypeFix } from '@/components/file/composables/fileType'\nimport type { AssetFileImage } from '@/types/coreDam/AssetFile'\nimport { apiFetchOne } from '@/services/api/apiFetchOne'\nimport { SYSTEM_CORE_DAM } from '@/components/damImage/uploadQueue/api/damAssetApi'\nimport type { DamImageCopyToLicenceRequest, DamImageCopyToLicenceResponse } from '@/types/coreDam/Asset'\nimport { useSentry } from '@/services/sentry'\n\nconst END_POINT = '/adm/v1/image'\nconst CHUNK_UPLOAD_TIMEOUT = 420\n\nexport const fetchImageFile = (client: () => AxiosInstance, id: DocId) =>\n apiFetchOne<AssetFileImage>(client, END_POINT + '/:id', { id }, SYSTEM_CORE_DAM, 'asset')\n\nexport const imageUploadStart = (client: () => AxiosInstance, item: UploadQueueItem) => {\n return new Promise((resolve, reject) => {\n let url = END_POINT + '/licence/' + item.licenceId\n if (item.type === UploadQueueItemType.SlotFile && item.slotName && item.assetId) {\n url = END_POINT + '/asset/' + item.assetId + '/slot-name/' + item.slotName\n }\n client()\n .post(\n url,\n JSON.stringify({\n mimeType: damFileTypeFix(item.file),\n size: item.file?.size,\n })\n )\n .then((res) => {\n if (res.status === HTTP_STATUS_CREATED) {\n resolve(res.data)\n } else {\n //\n reject()\n }\n })\n .catch((err) => {\n //\n reject(err)\n })\n })\n}\n\nexport const imageUploadChunk = (\n client: (timeout?: number) => AxiosInstance,\n item: UploadQueueItem,\n imageId: DocId,\n buffer: Blob | File,\n size: number,\n offset: number,\n onUploadProgressCallback: ((progressEvent: any) => void) | undefined = undefined\n) => {\n return new Promise((resolve, reject) => {\n const { logMessage, logError } = useSentry()\n\n // Validate buffer\n if (!(buffer instanceof Blob) || buffer.size === 0) {\n logMessage('dam_upload_chunk_validation', 'error', {\n tags: {\n error_type: 'dam_upload_chunk_validation_buffer',\n },\n extra: {\n type: item.assetType,\n chunkSize: item.chunkSize,\n chunkTotalCount: item.chunkTotalCount,\n imageId,\n offset,\n size,\n bufferType: typeof buffer,\n bufferInstanceOfBlob: buffer instanceof Blob,\n bufferInstanceOfFile: buffer instanceof File,\n bufferSize: buffer instanceof Blob ? buffer.size : 'N/A',\n },\n })\n reject(new Error('Invalid buffer: must be a non-empty Blob or File'))\n return\n }\n\n // Validate size\n if (typeof size !== 'number' || !Number.isInteger(size) || size <= 0) {\n logMessage('dam_upload_chunk_validation', 'error', {\n tags: {\n error_type: 'dam_upload_chunk_validation_size',\n },\n extra: {\n type: item.assetType,\n chunkSize: item.chunkSize,\n chunkTotalCount: item.chunkTotalCount,\n imageId,\n offset,\n size,\n sizeType: typeof size,\n isInteger: Number.isInteger(size),\n },\n })\n reject(new Error('Invalid size: must be a positive integer'))\n return\n }\n\n // Validate offset\n if (typeof offset !== 'number' || !Number.isInteger(offset) || offset < 0) {\n logMessage('dam_upload_chunk_validation', 'error', {\n tags: {\n error_type: 'dam_upload_chunk_validation_offset',\n },\n extra: {\n type: item.assetType,\n chunkSize: item.chunkSize,\n chunkTotalCount: item.chunkTotalCount,\n imageId,\n offset,\n size,\n offsetType: typeof offset,\n isInteger: Number.isInteger(offset),\n },\n })\n reject(new Error('Invalid offset: must be a non-negative integer'))\n return\n }\n\n const formData = new FormData()\n const url = END_POINT + '/' + imageId + '/chunk'\n formData.append('file', buffer)\n let chunkData = ''\n try {\n chunkData = JSON.stringify({\n offset: offset,\n size: size,\n })\n } catch (error) {\n logError(error as any, {\n tags: {\n error_type: 'dam_upload_chunk_stringify',\n },\n extra: {\n type: item.assetType,\n chunkSize: item.chunkSize,\n chunkTotalCount: item.chunkTotalCount,\n imageId,\n offset,\n size,\n offsetType: typeof offset,\n offsetIsInteger: Number.isInteger(offset),\n sizeType: typeof size,\n sizeIsInteger: Number.isInteger(size),\n },\n })\n reject(error)\n return\n }\n\n formData.append('chunk', chunkData)\n\n client(CHUNK_UPLOAD_TIMEOUT)\n .post(url, formData, {\n headers: {\n 'Content-Type': undefined, // Let Axios automatically set multipart/form-data with boundary\n },\n cancelToken: item.latestChunkCancelToken ? item.latestChunkCancelToken.token : undefined,\n onUploadProgress: onUploadProgressCallback,\n })\n .then((res) => {\n if (res.status === HTTP_STATUS_CREATED) {\n resolve(res.data)\n } else {\n //\n reject()\n }\n })\n .catch((err) => {\n // Check for 400 Bad Request error\n if (axios.isAxiosError(err) && err.response?.status === 400) {\n logError(err, {\n tags: {\n error_type: 'dam_upload_chunk_400',\n },\n extra: {\n type: item.assetType,\n chunkSize: item.chunkSize,\n chunkTotalCount: item.chunkTotalCount,\n imageId,\n offset,\n size,\n responseData: err.response.data,\n responseStatus: err.response.status,\n responseStatusText: err.response.statusText,\n chunkData,\n },\n })\n }\n reject(err)\n })\n })\n}\n\nexport const imageUploadFinish = (client: () => AxiosInstance, item: UploadQueueItem, sha: string) => {\n return new Promise((resolve, reject) => {\n const url = END_POINT + '/' + item.fileId + '/uploaded'\n client()\n .patch(\n url,\n JSON.stringify({\n checksum: sha,\n })\n )\n .then((res) => {\n if (res.status === HTTP_STATUS_OK) {\n resolve(res.data)\n } else {\n //\n reject()\n }\n })\n .catch((err) => {\n //\n reject(err)\n })\n })\n}\n\nexport const rotateImage = (client: () => AxiosInstance, imageId: DocId, angle: 90 | 270) => {\n return new Promise((resolve, reject) => {\n const url = END_POINT + '/' + imageId + '/rotate/' + angle\n client()\n .patch(url)\n .then((res) => {\n if (res.status === HTTP_STATUS_OK) {\n resolve(res.data)\n } else {\n //\n reject()\n }\n })\n .catch((err) => {\n //\n reject(err)\n })\n })\n}\n\nconst COPY_TO_LICENCE_MAX_LIMIT = 50\nconst COPY_TO_LICENCE_API_LIMIT = 20\n\nexport const copyToLicence = async (\n client: () => AxiosInstance,\n items: DamImageCopyToLicenceRequest\n): Promise<DamImageCopyToLicenceResponse> => {\n if (items.length > COPY_TO_LICENCE_MAX_LIMIT) {\n return Promise.reject('Exceeded max limit')\n }\n\n const url = END_POINT + '/copy-to-licence'\n\n const chunkArray = <T>(arr: T[], chunkSize: number): T[][] => {\n return Array.from({ length: Math.ceil(arr.length / chunkSize) }, (_, i) =>\n arr.slice(i * chunkSize, i * chunkSize + chunkSize)\n )\n }\n\n const itemChunks = chunkArray(items, COPY_TO_LICENCE_API_LIMIT)\n\n try {\n const responses = await Promise.all(\n itemChunks.map((chunk) =>\n client()\n .patch(url, JSON.stringify(chunk))\n .then((res) => (res.status === HTTP_STATUS_OK ? res.data : []))\n )\n )\n\n return responses.flat()\n } catch (error) {\n return Promise.reject(error)\n }\n}\n","import { DamAssetType } from '@/types/coreDam/Asset'\nimport { type DamUploadStartResponse, type UploadQueueItem, UploadQueueItemStatus } from '@/types/coreDam/UploadQueue'\nimport {\n imageUploadChunk,\n imageUploadFinish,\n imageUploadStart,\n} from '@/components/damImage/uploadQueue/api/damImageApi'\nimport type { AxiosInstance } from 'axios'\nimport type { DocId } from '@/types/common'\nimport { AssetFileProcessStatus } from '@/types/coreDam/AssetFile'\nimport { fetchAsset } from '@/components/damImage/uploadQueue/api/damAssetApi'\nimport { useUploadQueuesStore } from '@/components/damImage/uploadQueue/composables/uploadQueuesStore'\n\nconst NOTIFICATION_FALLBACK_TIMER_CHECK_SECONDS = 10\nconst NOTIFICATION_FALLBACK_MAX_TRIES = 4\n\nexport const damUploadStart: (client: () => AxiosInstance, item: UploadQueueItem) => Promise<DamUploadStartResponse> = (\n client: () => AxiosInstance,\n item: UploadQueueItem\n) => {\n return new Promise((resolve, reject) => {\n if (item.assetType !== DamAssetType.Image) {\n reject()\n return\n }\n imageUploadStart(client, item)\n .then((res) => {\n resolve(res as DamUploadStartResponse)\n return\n })\n .catch((err) => reject(err))\n })\n}\n\nexport const damUploadChunk = (\n client: () => AxiosInstance,\n item: UploadQueueItem,\n imageId: DocId,\n buffer: Blob | File,\n size: number,\n offset: number,\n onUploadProgressCallback: any\n) => {\n return new Promise((resolve, reject) => {\n if (item.assetType !== DamAssetType.Image) {\n reject()\n return\n }\n imageUploadChunk(client, item, imageId, buffer, size, offset, onUploadProgressCallback)\n .then((res) => {\n resolve(res)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const damUploadFinish = (\n client: () => AxiosInstance,\n item: UploadQueueItem,\n sha: string,\n uploadStatusFallback: boolean\n) => {\n return new Promise((resolve, reject) => {\n if (item.assetType !== DamAssetType.Image) {\n reject()\n return\n }\n imageUploadFinish(client, item, sha)\n .then((res) => {\n item.status = UploadQueueItemStatus.Processing\n if (uploadStatusFallback) {\n item.notificationFallbackTimer = setTimeout(function () {\n notificationFallbackCallback(client, item)\n }, calculateFallbackTime(item))\n }\n resolve(res)\n })\n .catch((err) => reject(err))\n })\n}\n\nfunction calculateFallbackTime(item: UploadQueueItem) {\n return NOTIFICATION_FALLBACK_TIMER_CHECK_SECONDS * 1000 * item.notificationFallbackTry * item.notificationFallbackTry\n}\n\nasync function notificationFallbackCallback(client: () => AxiosInstance, item: UploadQueueItem) {\n clearTimeout(item.notificationFallbackTimer)\n if (item.status === UploadQueueItemStatus.Uploaded) return\n if (item.notificationFallbackTry > NOTIFICATION_FALLBACK_MAX_TRIES) {\n item.error.hasError = true\n item.error.message = 'Processing is taking too long. Use item refresh button or remove item and retry later.'\n return\n }\n if (!item.assetId) return\n const asset = await fetchAsset(client, item.assetId)\n if (asset && asset.mainFile && asset.mainFile.fileAttributes) {\n const uploadQueuesStore = useUploadQueuesStore()\n if (asset.mainFile.fileAttributes.status === AssetFileProcessStatus.Processed) {\n uploadQueuesStore.queueItemProcessed(asset.id)\n return\n } else if (asset.mainFile.fileAttributes.status === AssetFileProcessStatus.Duplicate) {\n uploadQueuesStore.queueItemDuplicate(asset.id, asset.mainFile.originAssetFile, asset.attributes.assetType)\n return\n } else if (asset.mainFile.fileAttributes.status === AssetFileProcessStatus.Failed) {\n uploadQueuesStore.queueItemFailed(asset.id, asset.mainFile.fileAttributes.failReason)\n return\n }\n }\n item.notificationFallbackTry++\n item.notificationFallbackTimer = setTimeout(function () {\n notificationFallbackCallback(client, item)\n }, calculateFallbackTime(item))\n}\n","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Rusha\"] = factory();\n\telse\n\t\troot[\"Rusha\"] = factory();\n})(typeof self !== 'undefined' ? self : this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 3);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/* eslint-env commonjs, browser */\n\nvar RushaCore = __webpack_require__(5);\n\nvar _require = __webpack_require__(1),\n toHex = _require.toHex,\n ceilHeapSize = _require.ceilHeapSize;\n\nvar conv = __webpack_require__(6);\n\n// Calculate the length of buffer that the sha1 routine uses\n// including the padding.\nvar padlen = function (len) {\n for (len += 9; len % 64 > 0; len += 1) {}\n return len;\n};\n\nvar padZeroes = function (bin, len) {\n var h8 = new Uint8Array(bin.buffer);\n var om = len % 4,\n align = len - om;\n switch (om) {\n case 0:\n h8[align + 3] = 0;\n case 1:\n h8[align + 2] = 0;\n case 2:\n h8[align + 1] = 0;\n case 3:\n h8[align + 0] = 0;\n }\n for (var i = (len >> 2) + 1; i < bin.length; i++) {\n bin[i] = 0;\n }\n};\n\nvar padData = function (bin, chunkLen, msgLen) {\n bin[chunkLen >> 2] |= 0x80 << 24 - (chunkLen % 4 << 3);\n // To support msgLen >= 2 GiB, use a float division when computing the\n // high 32-bits of the big-endian message length in bits.\n bin[((chunkLen >> 2) + 2 & ~0x0f) + 14] = msgLen / (1 << 29) | 0;\n bin[((chunkLen >> 2) + 2 & ~0x0f) + 15] = msgLen << 3;\n};\n\nvar getRawDigest = function (heap, padMaxChunkLen) {\n var io = new Int32Array(heap, padMaxChunkLen + 320, 5);\n var out = new Int32Array(5);\n var arr = new DataView(out.buffer);\n arr.setInt32(0, io[0], false);\n arr.setInt32(4, io[1], false);\n arr.setInt32(8, io[2], false);\n arr.setInt32(12, io[3], false);\n arr.setInt32(16, io[4], false);\n return out;\n};\n\nvar Rusha = function () {\n function Rusha(chunkSize) {\n _classCallCheck(this, Rusha);\n\n chunkSize = chunkSize || 64 * 1024;\n if (chunkSize % 64 > 0) {\n throw new Error('Chunk size must be a multiple of 128 bit');\n }\n this._offset = 0;\n this._maxChunkLen = chunkSize;\n this._padMaxChunkLen = padlen(chunkSize);\n // The size of the heap is the sum of:\n // 1. The padded input message size\n // 2. The extended space the algorithm needs (320 byte)\n // 3. The 160 bit state the algoritm uses\n this._heap = new ArrayBuffer(ceilHeapSize(this._padMaxChunkLen + 320 + 20));\n this._h32 = new Int32Array(this._heap);\n this._h8 = new Int8Array(this._heap);\n this._core = new RushaCore({ Int32Array: Int32Array }, {}, this._heap);\n }\n\n Rusha.prototype._initState = function _initState(heap, padMsgLen) {\n this._offset = 0;\n var io = new Int32Array(heap, padMsgLen + 320, 5);\n io[0] = 1732584193;\n io[1] = -271733879;\n io[2] = -1732584194;\n io[3] = 271733878;\n io[4] = -1009589776;\n };\n\n Rusha.prototype._padChunk = function _padChunk(chunkLen, msgLen) {\n var padChunkLen = padlen(chunkLen);\n var view = new Int32Array(this._heap, 0, padChunkLen >> 2);\n padZeroes(view, chunkLen);\n padData(view, chunkLen, msgLen);\n return padChunkLen;\n };\n\n Rusha.prototype._write = function _write(data, chunkOffset, chunkLen, off) {\n conv(data, this._h8, this._h32, chunkOffset, chunkLen, off || 0);\n };\n\n Rusha.prototype._coreCall = function _coreCall(data, chunkOffset, chunkLen, msgLen, finalize) {\n var padChunkLen = chunkLen;\n this._write(data, chunkOffset, chunkLen);\n if (finalize) {\n padChunkLen = this._padChunk(chunkLen, msgLen);\n }\n this._core.hash(padChunkLen, this._padMaxChunkLen);\n };\n\n Rusha.prototype.rawDigest = function rawDigest(str) {\n var msgLen = str.byteLength || str.length || str.size || 0;\n this._initState(this._heap, this._padMaxChunkLen);\n var chunkOffset = 0,\n chunkLen = this._maxChunkLen;\n for (chunkOffset = 0; msgLen > chunkOffset + chunkLen; chunkOffset += chunkLen) {\n this._coreCall(str, chunkOffset, chunkLen, msgLen, false);\n }\n this._coreCall(str, chunkOffset, msgLen - chunkOffset, msgLen, true);\n return getRawDigest(this._heap, this._padMaxChunkLen);\n };\n\n Rusha.prototype.digest = function digest(str) {\n return toHex(this.rawDigest(str).buffer);\n };\n\n Rusha.prototype.digestFromString = function digestFromString(str) {\n return this.digest(str);\n };\n\n Rusha.prototype.digestFromBuffer = function digestFromBuffer(str) {\n return this.digest(str);\n };\n\n Rusha.prototype.digestFromArrayBuffer = function digestFromArrayBuffer(str) {\n return this.digest(str);\n };\n\n Rusha.prototype.resetState = function resetState() {\n this._initState(this._heap, this._padMaxChunkLen);\n return this;\n };\n\n Rusha.prototype.append = function append(chunk) {\n var chunkOffset = 0;\n var chunkLen = chunk.byteLength || chunk.length || chunk.size || 0;\n var turnOffset = this._offset % this._maxChunkLen;\n var inputLen = void 0;\n\n this._offset += chunkLen;\n while (chunkOffset < chunkLen) {\n inputLen = Math.min(chunkLen - chunkOffset, this._maxChunkLen - turnOffset);\n this._write(chunk, chunkOffset, inputLen, turnOffset);\n turnOffset += inputLen;\n chunkOffset += inputLen;\n if (turnOffset === this._maxChunkLen) {\n this._core.hash(this._maxChunkLen, this._padMaxChunkLen);\n turnOffset = 0;\n }\n }\n return this;\n };\n\n Rusha.prototype.getState = function getState() {\n var turnOffset = this._offset % this._maxChunkLen;\n var heap = void 0;\n if (!turnOffset) {\n var io = new Int32Array(this._heap, this._padMaxChunkLen + 320, 5);\n heap = io.buffer.slice(io.byteOffset, io.byteOffset + io.byteLength);\n } else {\n heap = this._heap.slice(0);\n }\n return {\n offset: this._offset,\n heap: heap\n };\n };\n\n Rusha.prototype.setState = function setState(state) {\n this._offset = state.offset;\n if (state.heap.byteLength === 20) {\n var io = new Int32Array(this._heap, this._padMaxChunkLen + 320, 5);\n io.set(new Int32Array(state.heap));\n } else {\n this._h32.set(new Int32Array(state.heap));\n }\n return this;\n };\n\n Rusha.prototype.rawEnd = function rawEnd() {\n var msgLen = this._offset;\n var chunkLen = msgLen % this._maxChunkLen;\n var padChunkLen = this._padChunk(chunkLen, msgLen);\n this._core.hash(padChunkLen, this._padMaxChunkLen);\n var result = getRawDigest(this._heap, this._padMaxChunkLen);\n this._initState(this._heap, this._padMaxChunkLen);\n return result;\n };\n\n Rusha.prototype.end = function end() {\n return toHex(this.rawEnd().buffer);\n };\n\n return Rusha;\n}();\n\nmodule.exports = Rusha;\nmodule.exports._core = RushaCore;\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports) {\n\n/* eslint-env commonjs, browser */\n\n//\n// toHex\n//\n\nvar precomputedHex = new Array(256);\nfor (var i = 0; i < 256; i++) {\n precomputedHex[i] = (i < 0x10 ? '0' : '') + i.toString(16);\n}\n\nmodule.exports.toHex = function (arrayBuffer) {\n var binarray = new Uint8Array(arrayBuffer);\n var res = new Array(arrayBuffer.byteLength);\n for (var _i = 0; _i < res.length; _i++) {\n res[_i] = precomputedHex[binarray[_i]];\n }\n return res.join('');\n};\n\n//\n// ceilHeapSize\n//\n\nmodule.exports.ceilHeapSize = function (v) {\n // The asm.js spec says:\n // The heap object's byteLength must be either\n // 2^n for n in [12, 24) or 2^24 * n for n ≥ 1.\n // Also, byteLengths smaller than 2^16 are deprecated.\n var p = 0;\n // If v is smaller than 2^16, the smallest possible solution\n // is 2^16.\n if (v <= 65536) return 65536;\n // If v < 2^24, we round up to 2^n,\n // otherwise we round up to 2^24 * n.\n if (v < 16777216) {\n for (p = 1; p < v; p = p << 1) {}\n } else {\n for (p = 16777216; p < v; p += 16777216) {}\n }\n return p;\n};\n\n//\n// isDedicatedWorkerScope\n//\n\nmodule.exports.isDedicatedWorkerScope = function (self) {\n var isRunningInWorker = 'WorkerGlobalScope' in self && self instanceof self.WorkerGlobalScope;\n var isRunningInSharedWorker = 'SharedWorkerGlobalScope' in self && self instanceof self.SharedWorkerGlobalScope;\n var isRunningInServiceWorker = 'ServiceWorkerGlobalScope' in self && self instanceof self.ServiceWorkerGlobalScope;\n\n // Detects whether we run inside a dedicated worker or not.\n //\n // We can't just check for `DedicatedWorkerGlobalScope`, since IE11\n // has a bug where it only supports `WorkerGlobalScope`.\n //\n // Therefore, we consider us as running inside a dedicated worker\n // when we are running inside a worker, but not in a shared or service worker.\n //\n // When new types of workers are introduced, we will need to adjust this code.\n return isRunningInWorker && !isRunningInSharedWorker && !isRunningInServiceWorker;\n};\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* eslint-env commonjs, worker */\n\nmodule.exports = function () {\n var Rusha = __webpack_require__(0);\n\n var hashData = function (hasher, data, cb) {\n try {\n return cb(null, hasher.digest(data));\n } catch (e) {\n return cb(e);\n }\n };\n\n var hashFile = function (hasher, readTotal, blockSize, file, cb) {\n var reader = new self.FileReader();\n reader.onloadend = function onloadend() {\n if (reader.error) {\n return cb(reader.error);\n }\n var buffer = reader.result;\n readTotal += reader.result.byteLength;\n try {\n hasher.append(buffer);\n } catch (e) {\n cb(e);\n return;\n }\n if (readTotal < file.size) {\n hashFile(hasher, readTotal, blockSize, file, cb);\n } else {\n cb(null, hasher.end());\n }\n };\n reader.readAsArrayBuffer(file.slice(readTotal, readTotal + blockSize));\n };\n\n var workerBehaviourEnabled = true;\n\n self.onmessage = function (event) {\n if (!workerBehaviourEnabled) {\n return;\n }\n\n var data = event.data.data,\n file = event.data.file,\n id = event.data.id;\n if (typeof id === 'undefined') return;\n if (!file && !data) return;\n var blockSize = event.data.blockSize || 4 * 1024 * 1024;\n var hasher = new Rusha(blockSize);\n hasher.resetState();\n var done = function (err, hash) {\n if (!err) {\n self.postMessage({ id: id, hash: hash });\n } else {\n self.postMessage({ id: id, error: err.name });\n }\n };\n if (data) hashData(hasher, data, done);\n if (file) hashFile(hasher, 0, blockSize, file, done);\n };\n\n return function () {\n workerBehaviourEnabled = false;\n };\n};\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* eslint-env commonjs, browser */\n\nvar work = __webpack_require__(4);\nvar Rusha = __webpack_require__(0);\nvar createHash = __webpack_require__(7);\nvar runWorker = __webpack_require__(2);\n\nvar _require = __webpack_require__(1),\n isDedicatedWorkerScope = _require.isDedicatedWorkerScope;\n\nvar isRunningInDedicatedWorker = typeof self !== 'undefined' && isDedicatedWorkerScope(self);\n\nRusha.disableWorkerBehaviour = isRunningInDedicatedWorker ? runWorker() : function () {};\n\nRusha.createWorker = function () {\n var worker = work(/*require.resolve*/(2));\n var terminate = worker.terminate;\n worker.terminate = function () {\n URL.revokeObjectURL(worker.objectURL);\n terminate.call(worker);\n };\n return worker;\n};\n\nRusha.createHash = createHash;\n\nmodule.exports = Rusha;\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\nfunction webpackBootstrapFunc (modules) {\n/******/ // The module cache\n/******/ var installedModules = {};\n\n/******/ // The require function\n/******/ function __webpack_require__(moduleId) {\n\n/******/ // Check if module is in cache\n/******/ if(installedModules[moduleId])\n/******/ return installedModules[moduleId].exports;\n\n/******/ // Create a new module (and put it into the cache)\n/******/ var module = installedModules[moduleId] = {\n/******/ i: moduleId,\n/******/ l: false,\n/******/ exports: {}\n/******/ };\n\n/******/ // Execute the module function\n/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ // Flag the module as loaded\n/******/ module.l = true;\n\n/******/ // Return the exports of the module\n/******/ return module.exports;\n/******/ }\n\n/******/ // expose the modules object (__webpack_modules__)\n/******/ __webpack_require__.m = modules;\n\n/******/ // expose the module cache\n/******/ __webpack_require__.c = installedModules;\n\n/******/ // identity function for calling harmony imports with the correct context\n/******/ __webpack_require__.i = function(value) { return value; };\n\n/******/ // define getter function for harmony exports\n/******/ __webpack_require__.d = function(exports, name, getter) {\n/******/ if(!__webpack_require__.o(exports, name)) {\n/******/ Object.defineProperty(exports, name, {\n/******/ configurable: false,\n/******/ enumerable: true,\n/******/ get: getter\n/******/ });\n/******/ }\n/******/ };\n\n/******/ // define __esModule on exports\n/******/ __webpack_require__.r = function(exports) {\n/******/ Object.defineProperty(exports, '__esModule', { value: true });\n/******/ };\n\n/******/ // getDefaultExport function for compatibility with non-harmony modules\n/******/ __webpack_require__.n = function(module) {\n/******/ var getter = module && module.__esModule ?\n/******/ function getDefault() { return module['default']; } :\n/******/ function getModuleExports() { return module; };\n/******/ __webpack_require__.d(getter, 'a', getter);\n/******/ return getter;\n/******/ };\n\n/******/ // Object.prototype.hasOwnProperty.call\n/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n/******/ // __webpack_public_path__\n/******/ __webpack_require__.p = \"/\";\n\n/******/ // on error function for async loading\n/******/ __webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n var f = __webpack_require__(__webpack_require__.s = ENTRY_MODULE)\n return f.default || f // try to call default if defined to also support babel esmodule exports\n}\n\nvar moduleNameReqExp = '[\\\\.|\\\\-|\\\\+|\\\\w|\\/|@]+'\nvar dependencyRegExp = '\\\\((\\/\\\\*.*?\\\\*\\/)?\\s?.*?(' + moduleNameReqExp + ').*?\\\\)' // additional chars when output.pathinfo is true\n\n// http://stackoverflow.com/a/2593661/130442\nfunction quoteRegExp (str) {\n return (str + '').replace(/[.?*+^$[\\]\\\\(){}|-]/g, '\\\\$&')\n}\n\nfunction getModuleDependencies (sources, module, queueName) {\n var retval = {}\n retval[queueName] = []\n\n var fnString = module.toString()\n var wrapperSignature = fnString.match(/^function\\s?\\(\\w+,\\s*\\w+,\\s*(\\w+)\\)/)\n if (!wrapperSignature) return retval\n var webpackRequireName = wrapperSignature[1]\n\n // main bundle deps\n var re = new RegExp('(\\\\\\\\n|\\\\W)' + quoteRegExp(webpackRequireName) + dependencyRegExp, 'g')\n var match\n while ((match = re.exec(fnString))) {\n if (match[3] === 'dll-reference') continue\n retval[queueName].push(match[3])\n }\n\n // dll deps\n re = new RegExp('\\\\(' + quoteRegExp(webpackRequireName) + '\\\\(\"(dll-reference\\\\s(' + moduleNameReqExp + '))\"\\\\)\\\\)' + dependencyRegExp, 'g')\n while ((match = re.exec(fnString))) {\n if (!sources[match[2]]) {\n retval[queueName].push(match[1])\n sources[match[2]] = __webpack_require__(match[1]).m\n }\n retval[match[2]] = retval[match[2]] || []\n retval[match[2]].push(match[4])\n }\n\n return retval\n}\n\nfunction hasValuesInQueues (queues) {\n var keys = Object.keys(queues)\n return keys.reduce(function (hasValues, key) {\n return hasValues || queues[key].length > 0\n }, false)\n}\n\nfunction getRequiredModules (sources, moduleId) {\n var modulesQueue = {\n main: [moduleId]\n }\n var requiredModules = {\n main: []\n }\n var seenModules = {\n main: {}\n }\n\n while (hasValuesInQueues(modulesQueue)) {\n var queues = Object.keys(modulesQueue)\n for (var i = 0; i < queues.length; i++) {\n var queueName = queues[i]\n var queue = modulesQueue[queueName]\n var moduleToCheck = queue.pop()\n seenModules[queueName] = seenModules[queueName] || {}\n if (seenModules[queueName][moduleToCheck] || !sources[queueName][moduleToCheck]) continue\n seenModules[queueName][moduleToCheck] = true\n requiredModules[queueName] = requiredModules[queueName] || []\n requiredModules[queueName].push(moduleToCheck)\n var newModules = getModuleDependencies(sources, sources[queueName][moduleToCheck], queueName)\n var newModulesKeys = Object.keys(newModules)\n for (var j = 0; j < newModulesKeys.length; j++) {\n modulesQueue[newModulesKeys[j]] = modulesQueue[newModulesKeys[j]] || []\n modulesQueue[newModulesKeys[j]] = modulesQueue[newModulesKeys[j]].concat(newModules[newModulesKeys[j]])\n }\n }\n }\n\n return requiredModules\n}\n\nmodule.exports = function (moduleId, options) {\n options = options || {}\n var sources = {\n main: __webpack_require__.m\n }\n\n var requiredModules = options.all ? { main: Object.keys(sources) } : getRequiredModules(sources, moduleId)\n\n var src = ''\n\n Object.keys(requiredModules).filter(function (m) { return m !== 'main' }).forEach(function (module) {\n var entryModule = 0\n while (requiredModules[module][entryModule]) {\n entryModule++\n }\n requiredModules[module].push(entryModule)\n sources[module][entryModule] = '(function(module, exports, __webpack_require__) { module.exports = __webpack_require__; })'\n src = src + 'var ' + module + ' = (' + webpackBootstrapFunc.toString().replace('ENTRY_MODULE', JSON.stringify(entryModule)) + ')({' + requiredModules[module].map(function (id) { return '' + JSON.stringify(id) + ': ' + sources[module][id].toString() }).join(',') + '});\\n'\n })\n\n src = src + '(' + webpackBootstrapFunc.toString().replace('ENTRY_MODULE', JSON.stringify(moduleId)) + ')({' + requiredModules.main.map(function (id) { return '' + JSON.stringify(id) + ': ' + sources.main[id].toString() }).join(',') + '})(self);'\n\n var blob = new window.Blob([src], { type: 'text/javascript' })\n if (options.bare) { return blob }\n\n var URL = window.URL || window.webkitURL || window.mozURL || window.msURL\n\n var workerUrl = URL.createObjectURL(blob)\n var worker = new window.Worker(workerUrl)\n worker.objectURL = workerUrl\n\n return worker\n}\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports) {\n\n// The low-level RushCore module provides the heart of Rusha,\n// a high-speed sha1 implementation working on an Int32Array heap.\n// At first glance, the implementation seems complicated, however\n// with the SHA1 spec at hand, it is obvious this almost a textbook\n// implementation that has a few functions hand-inlined and a few loops\n// hand-unrolled.\nmodule.exports = function RushaCore(stdlib$840, foreign$841, heap$842) {\n 'use asm';\n var H$843 = new stdlib$840.Int32Array(heap$842);\n function hash$844(k$845, x$846) {\n // k in bytes\n k$845 = k$845 | 0;\n x$846 = x$846 | 0;\n var i$847 = 0, j$848 = 0, y0$849 = 0, z0$850 = 0, y1$851 = 0, z1$852 = 0, y2$853 = 0, z2$854 = 0, y3$855 = 0, z3$856 = 0, y4$857 = 0, z4$858 = 0, t0$859 = 0, t1$860 = 0;\n y0$849 = H$843[x$846 + 320 >> 2] | 0;\n y1$851 = H$843[x$846 + 324 >> 2] | 0;\n y2$853 = H$843[x$846 + 328 >> 2] | 0;\n y3$855 = H$843[x$846 + 332 >> 2] | 0;\n y4$857 = H$843[x$846 + 336 >> 2] | 0;\n for (i$847 = 0; (i$847 | 0) < (k$845 | 0); i$847 = i$847 + 64 | 0) {\n z0$850 = y0$849;\n z1$852 = y1$851;\n z2$854 = y2$853;\n z3$856 = y3$855;\n z4$858 = y4$857;\n for (j$848 = 0; (j$848 | 0) < 64; j$848 = j$848 + 4 | 0) {\n t1$860 = H$843[i$847 + j$848 >> 2] | 0;\n t0$859 = ((y0$849 << 5 | y0$849 >>> 27) + (y1$851 & y2$853 | ~y1$851 & y3$855) | 0) + ((t1$860 + y4$857 | 0) + 1518500249 | 0) | 0;\n y4$857 = y3$855;\n y3$855 = y2$853;\n y2$853 = y1$851 << 30 | y1$851 >>> 2;\n y1$851 = y0$849;\n y0$849 = t0$859;\n H$843[k$845 + j$848 >> 2] = t1$860;\n }\n for (j$848 = k$845 + 64 | 0; (j$848 | 0) < (k$845 + 80 | 0); j$848 = j$848 + 4 | 0) {\n t1$860 = (H$843[j$848 - 12 >> 2] ^ H$843[j$848 - 32 >> 2] ^ H$843[j$848 - 56 >> 2] ^ H$843[j$848 - 64 >> 2]) << 1 | (H$843[j$848 - 12 >> 2] ^ H$843[j$848 - 32 >> 2] ^ H$843[j$848 - 56 >> 2] ^ H$843[j$848 - 64 >> 2]) >>> 31;\n t0$859 = ((y0$849 << 5 | y0$849 >>> 27) + (y1$851 & y2$853 | ~y1$851 & y3$855) | 0) + ((t1$860 + y4$857 | 0) + 1518500249 | 0) | 0;\n y4$857 = y3$855;\n y3$855 = y2$853;\n y2$853 = y1$851 << 30 | y1$851 >>> 2;\n y1$851 = y0$849;\n y0$849 = t0$859;\n H$843[j$848 >> 2] = t1$860;\n }\n for (j$848 = k$845 + 80 | 0; (j$848 | 0) < (k$845 + 160 | 0); j$848 = j$848 + 4 | 0) {\n t1$860 = (H$843[j$848 - 12 >> 2] ^ H$843[j$848 - 32 >> 2] ^ H$843[j$848 - 56 >> 2] ^ H$843[j$848 - 64 >> 2]) << 1 | (H$843[j$848 - 12 >> 2] ^ H$843[j$848 - 32 >> 2] ^ H$843[j$848 - 56 >> 2] ^ H$843[j$848 - 64 >> 2]) >>> 31;\n t0$859 = ((y0$849 << 5 | y0$849 >>> 27) + (y1$851 ^ y2$853 ^ y3$855) | 0) + ((t1$860 + y4$857 | 0) + 1859775393 | 0) | 0;\n y4$857 = y3$855;\n y3$855 = y2$853;\n y2$853 = y1$851 << 30 | y1$851 >>> 2;\n y1$851 = y0$849;\n y0$849 = t0$859;\n H$843[j$848 >> 2] = t1$860;\n }\n for (j$848 = k$845 + 160 | 0; (j$848 | 0) < (k$845 + 240 | 0); j$848 = j$848 + 4 | 0) {\n t1$860 = (H$843[j$848 - 12 >> 2] ^ H$843[j$848 - 32 >> 2] ^ H$843[j$848 - 56 >> 2] ^ H$843[j$848 - 64 >> 2]) << 1 | (H$843[j$848 - 12 >> 2] ^ H$843[j$848 - 32 >> 2] ^ H$843[j$848 - 56 >> 2] ^ H$843[j$848 - 64 >> 2]) >>> 31;\n t0$859 = ((y0$849 << 5 | y0$849 >>> 27) + (y1$851 & y2$853 | y1$851 & y3$855 | y2$853 & y3$855) | 0) + ((t1$860 + y4$857 | 0) - 1894007588 | 0) | 0;\n y4$857 = y3$855;\n y3$855 = y2$853;\n y2$853 = y1$851 << 30 | y1$851 >>> 2;\n y1$851 = y0$849;\n y0$849 = t0$859;\n H$843[j$848 >> 2] = t1$860;\n }\n for (j$848 = k$845 + 240 | 0; (j$848 | 0) < (k$845 + 320 | 0); j$848 = j$848 + 4 | 0) {\n t1$860 = (H$843[j$848 - 12 >> 2] ^ H$843[j$848 - 32 >> 2] ^ H$843[j$848 - 56 >> 2] ^ H$843[j$848 - 64 >> 2]) << 1 | (H$843[j$848 - 12 >> 2] ^ H$843[j$848 - 32 >> 2] ^ H$843[j$848 - 56 >> 2] ^ H$843[j$848 - 64 >> 2]) >>> 31;\n t0$859 = ((y0$849 << 5 | y0$849 >>> 27) + (y1$851 ^ y2$853 ^ y3$855) | 0) + ((t1$860 + y4$857 | 0) - 899497514 | 0) | 0;\n y4$857 = y3$855;\n y3$855 = y2$853;\n y2$853 = y1$851 << 30 | y1$851 >>> 2;\n y1$851 = y0$849;\n y0$849 = t0$859;\n H$843[j$848 >> 2] = t1$860;\n }\n y0$849 = y0$849 + z0$850 | 0;\n y1$851 = y1$851 + z1$852 | 0;\n y2$853 = y2$853 + z2$854 | 0;\n y3$855 = y3$855 + z3$856 | 0;\n y4$857 = y4$857 + z4$858 | 0;\n }\n H$843[x$846 + 320 >> 2] = y0$849;\n H$843[x$846 + 324 >> 2] = y1$851;\n H$843[x$846 + 328 >> 2] = y2$853;\n H$843[x$846 + 332 >> 2] = y3$855;\n H$843[x$846 + 336 >> 2] = y4$857;\n }\n return { hash: hash$844 };\n};\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports) {\n\nvar _this = this;\n\n/* eslint-env commonjs, browser */\n\nvar reader = void 0;\nif (typeof self !== 'undefined' && typeof self.FileReaderSync !== 'undefined') {\n reader = new self.FileReaderSync();\n}\n\n// Convert a binary string and write it to the heap.\n// A binary string is expected to only contain char codes < 256.\nvar convStr = function (str, H8, H32, start, len, off) {\n var i = void 0,\n om = off % 4,\n lm = (len + om) % 4,\n j = len - lm;\n switch (om) {\n case 0:\n H8[off] = str.charCodeAt(start + 3);\n case 1:\n H8[off + 1 - (om << 1) | 0] = str.charCodeAt(start + 2);\n case 2:\n H8[off + 2 - (om << 1) | 0] = str.charCodeAt(start + 1);\n case 3:\n H8[off + 3 - (om << 1) | 0] = str.charCodeAt(start);\n }\n if (len < lm + (4 - om)) {\n return;\n }\n for (i = 4 - om; i < j; i = i + 4 | 0) {\n H32[off + i >> 2] = str.charCodeAt(start + i) << 24 | str.charCodeAt(start + i + 1) << 16 | str.charCodeAt(start + i + 2) << 8 | str.charCodeAt(start + i + 3);\n }\n switch (lm) {\n case 3:\n H8[off + j + 1 | 0] = str.charCodeAt(start + j + 2);\n case 2:\n H8[off + j + 2 | 0] = str.charCodeAt(start + j + 1);\n case 1:\n H8[off + j + 3 | 0] = str.charCodeAt(start + j);\n }\n};\n\n// Convert a buffer or array and write it to the heap.\n// The buffer or array is expected to only contain elements < 256.\nvar convBuf = function (buf, H8, H32, start, len, off) {\n var i = void 0,\n om = off % 4,\n lm = (len + om) % 4,\n j = len - lm;\n switch (om) {\n case 0:\n H8[off] = buf[start + 3];\n case 1:\n H8[off + 1 - (om << 1) | 0] = buf[start + 2];\n case 2:\n H8[off + 2 - (om << 1) | 0] = buf[start + 1];\n case 3:\n H8[off + 3 - (om << 1) | 0] = buf[start];\n }\n if (len < lm + (4 - om)) {\n return;\n }\n for (i = 4 - om; i < j; i = i + 4 | 0) {\n H32[off + i >> 2 | 0] = buf[start + i] << 24 | buf[start + i + 1] << 16 | buf[start + i + 2] << 8 | buf[start + i + 3];\n }\n switch (lm) {\n case 3:\n H8[off + j + 1 | 0] = buf[start + j + 2];\n case 2:\n H8[off + j + 2 | 0] = buf[start + j + 1];\n case 1:\n H8[off + j + 3 | 0] = buf[start + j];\n }\n};\n\nvar convBlob = function (blob, H8, H32, start, len, off) {\n var i = void 0,\n om = off % 4,\n lm = (len + om) % 4,\n j = len - lm;\n var buf = new Uint8Array(reader.readAsArrayBuffer(blob.slice(start, start + len)));\n switch (om) {\n case 0:\n H8[off] = buf[3];\n case 1:\n H8[off + 1 - (om << 1) | 0] = buf[2];\n case 2:\n H8[off + 2 - (om << 1) | 0] = buf[1];\n case 3:\n H8[off + 3 - (om << 1) | 0] = buf[0];\n }\n if (len < lm + (4 - om)) {\n return;\n }\n for (i = 4 - om; i < j; i = i + 4 | 0) {\n H32[off + i >> 2 | 0] = buf[i] << 24 | buf[i + 1] << 16 | buf[i + 2] << 8 | buf[i + 3];\n }\n switch (lm) {\n case 3:\n H8[off + j + 1 | 0] = buf[j + 2];\n case 2:\n H8[off + j + 2 | 0] = buf[j + 1];\n case 1:\n H8[off + j + 3 | 0] = buf[j];\n }\n};\n\nmodule.exports = function (data, H8, H32, start, len, off) {\n if (typeof data === 'string') {\n return convStr(data, H8, H32, start, len, off);\n }\n if (data instanceof Array) {\n return convBuf(data, H8, H32, start, len, off);\n }\n // Safely doing a Buffer check using \"this\" to avoid Buffer polyfill to be included in the dist\n if (_this && _this.Buffer && _this.Buffer.isBuffer(data)) {\n return convBuf(data, H8, H32, start, len, off);\n }\n if (data instanceof ArrayBuffer) {\n return convBuf(new Uint8Array(data), H8, H32, start, len, off);\n }\n if (data.buffer instanceof ArrayBuffer) {\n return convBuf(new Uint8Array(data.buffer, data.byteOffset, data.byteLength), H8, H32, start, len, off);\n }\n if (data instanceof Blob) {\n return convBlob(data, H8, H32, start, len, off);\n }\n throw new Error('Unsupported data type.');\n};\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/* eslint-env commonjs, browser */\n\nvar Rusha = __webpack_require__(0);\n\nvar _require = __webpack_require__(1),\n toHex = _require.toHex;\n\nvar Hash = function () {\n function Hash() {\n _classCallCheck(this, Hash);\n\n this._rusha = new Rusha();\n this._rusha.resetState();\n }\n\n Hash.prototype.update = function update(data) {\n this._rusha.append(data);\n return this;\n };\n\n Hash.prototype.digest = function digest(encoding) {\n var digest = this._rusha.rawEnd().buffer;\n if (!encoding) {\n return digest;\n }\n if (encoding === 'hex') {\n return toHex(digest);\n }\n throw new Error('unsupported digest encoding');\n };\n\n _createClass(Hash, [{\n key: 'state',\n get: function () {\n return this._rusha.getState();\n },\n set: function (state) {\n this._rusha.setState(state);\n }\n }]);\n\n return Hash;\n}();\n\nmodule.exports = function () {\n return new Hash();\n};\n\n/***/ })\n/******/ ]);\n});","import { ref } from 'vue'\nimport type { CancelTokenSource } from 'axios'\nimport axios from 'axios'\nimport { i18n } from '@/plugins/i18n'\nimport {\n type AnzuApiValidationResponseData,\n axiosErrorResponseHasValidationData,\n} from '@/model/error/AnzuApiValidationError'\nimport { type UploadQueueItem, UploadQueueItemStatus } from '@/types/coreDam/UploadQueue'\nimport { NEW_LINE_MARK } from '@/composables/system/alerts'\nimport { isUndefined } from '@/utils/common'\nimport { useDamUploadChunkSize } from '@/components/damImage/uploadQueue/composables/damUploadChunkSize'\nimport { damUploadChunk, damUploadFinish, damUploadStart } from '@/components/damImage/uploadQueue/api/uploadApi'\nimport {\n useCommonAdminCoreDamOptions,\n useCommonAdminCoreDamOptionsGlobal,\n} from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport rusha from 'rusha'\n\n// const CHUNK_MAX_RETRY = 6\nconst CHUNK_MAX_RETRY = 4\nconst SPEED_CHECK_INTERVAL = 1000\nconst CHUNK_RETRY_INTERVAL = 1000\nconst CHUNK_RETRY_MULTIPLY = 3\n\nconst failUpload = async (queueItem: UploadQueueItem, error: unknown = null) => {\n throw error\n}\n\nconst finishUpload = async (queueItem: UploadQueueItem, sha: string) => {\n const { damClient } = useCommonAdminCoreDamOptions()\n const { uploadStatusFallback } = useCommonAdminCoreDamOptionsGlobal()\n return await damUploadFinish(damClient, queueItem, sha, uploadStatusFallback)\n}\n\nconst handleValidationErrorMessage = (error: Error | any) => {\n const { t } = i18n.global || i18n\n if (!error || !error.response || !error.response.data) {\n // @ts-ignore\n return t('common.damImage.uploadErrors.unknownError')\n }\n const data = error.response.data as AnzuApiValidationResponseData\n const errorMessages: string[] = []\n for (const [key, values] of Object.entries(data.fields)) {\n switch (key) {\n case 'size':\n errorMessages.push(t('common.damImage.uploadErrors.size'))\n break\n case 'offset':\n errorMessages.push(t('common.damImage.uploadErrors.offset'))\n break\n case 'mimeType':\n errorMessages.push(t('common.damImage.uploadErrors.mimeType'))\n break\n default:\n // @ts-ignore\n errorMessages.push(t('common.damImage.uploadErrors.systemError') + ': ' + key + ' - ' + values.join(','))\n }\n }\n return errorMessages.length > 0 ? errorMessages.join(NEW_LINE_MARK) : t('common.damImage.uploadErrors.unknownError')\n}\n\nconst readFile = async (offset: number, size: number, file: File): Promise<{ data: ArrayBuffer; offset: number }> => {\n return new Promise((resolve, reject) => {\n const partial = file.slice(offset, offset + size)\n const reader = new FileReader()\n reader.onload = function (e) {\n if (e.target?.readyState === FileReader.DONE) {\n const result = e.target.result\n if (result instanceof ArrayBuffer) {\n resolve({ data: result, offset: offset })\n } else {\n reject(new Error('FileReader result is not an ArrayBuffer'))\n }\n }\n }\n reader.onerror = function (e) {\n reject(e)\n }\n reader.readAsArrayBuffer(partial)\n })\n}\n\nconst sleep = (ms: number) => {\n return new Promise((resolve) => setTimeout(resolve, ms))\n}\n\nexport function useUpload(queueItem: UploadQueueItem, uploadCallback: any = undefined) {\n const { damClient } = useCommonAdminCoreDamOptions()\n const fileSize = ref(0)\n\n const progress = ref(0)\n\n let speedStack: any[] = []\n let lastTimestamp = 0\n let endTimestamp = 0\n let lastLoaded = 0\n let speedCheckTimerId: ReturnType<typeof setTimeout> | null = null\n const sha = rusha.createHash()\n const { updateChunkSize, lastChunkSize } = useDamUploadChunkSize()\n\n const getCurrentTimestamp = () => {\n return Date.now() / 1000\n }\n\n // @ts-ignore\n function progressCallback(progressEvent) {\n const currentStamp = getCurrentTimestamp()\n if (lastTimestamp === 0) {\n lastTimestamp = currentStamp\n\n return\n }\n\n const dataSent = lastLoaded > 0 ? progressEvent.loaded - lastLoaded : progressEvent.loaded\n lastLoaded = progressEvent.total === progressEvent.loaded ? 0 : progressEvent.loaded\n speedStack.push(dataSent / (currentStamp - lastTimestamp))\n\n lastTimestamp = currentStamp\n }\n\n const uploadChunk = async (chunkFile: File, offset: number) => {\n return new Promise((resolve, reject) => {\n if (!queueItem.fileId) {\n reject()\n return\n }\n damUploadChunk(damClient, queueItem, queueItem.fileId, chunkFile, chunkFile.size, offset, progressCallback)\n .then((result) => {\n resolve(result)\n })\n .catch((exception) => {\n reject(exception)\n })\n })\n }\n\n const processAndUploadChunk = async (offset: number): Promise<File> => {\n updateChunkSize(queueItem.progress.speed)\n let arrayBuffer: { data: ArrayBuffer; offset: number } = await readFile(\n offset,\n lastChunkSize.value,\n queueItem.file!\n )\n let chunkFile = new File([arrayBuffer.data], queueItem.file!.name, { type: queueItem.file!.type })\n\n queueItem.currentChunkIndex = offset\n const cancelToken = axios.CancelToken\n queueItem.latestChunkCancelToken = cancelToken.source()\n\n let sleepTime = CHUNK_RETRY_INTERVAL\n let attempt = 0\n do {\n attempt++\n try {\n await uploadChunk(chunkFile, offset)\n sha.update(arrayBuffer.data)\n\n return chunkFile\n } catch (error) {\n // Check for 400 Bad Request error on last attempt\n if (axios.isAxiosError(error) && error.response?.status === 400 && attempt >= CHUNK_MAX_RETRY) {\n queueItem.error.message = 'Upload chunk validation failed. Please contact administrator.'\n return Promise.reject(error)\n }\n\n // in error recompute\n if (axiosErrorResponseHasValidationData(error as Error)) {\n attempt = CHUNK_MAX_RETRY\n queueItem.error.message = handleValidationErrorMessage(error)\n return Promise.reject(error)\n }\n\n if (updateChunkSize(queueItem.progress.speed)) {\n arrayBuffer = await readFile(offset, lastChunkSize.value, queueItem.file!)\n chunkFile = new File([arrayBuffer.data], queueItem.file!.name, { type: queueItem.file!.type })\n }\n\n await sleep(sleepTime)\n attempt === CHUNK_MAX_RETRY - 1 ? (sleepTime = 1) : (sleepTime *= CHUNK_RETRY_MULTIPLY)\n }\n } while (attempt < CHUNK_MAX_RETRY)\n return Promise.reject('Unable to upload chunk, max tries exceeded')\n }\n\n function speedCheck() {\n function speedCheckRun() {\n speedStack = speedStack.slice(-15)\n if (speedStack.length > 0) {\n const avgSpeed = Math.ceil(speedStack.reduce((sum, current) => sum + current) / speedStack.length)\n const remainingBytes = Math.ceil(fileSize.value * ((100 - progress.value) / 100))\n\n uploadCallback(progress.value, avgSpeed, Math.ceil(remainingBytes / avgSpeed))\n }\n\n if (endTimestamp === 0) {\n speedCheckTimerId = setTimeout(function () {\n speedCheckRun()\n }, SPEED_CHECK_INTERVAL)\n }\n }\n\n speedCheckRun()\n }\n\n const stopSpeedCheck = () => {\n if (speedCheckTimerId !== null) {\n clearTimeout(speedCheckTimerId)\n speedCheckTimerId = null\n }\n endTimestamp = Date.now() / 1000\n }\n\n const uploadInit = async () => {\n return new Promise((resolve, reject) => {\n if (!queueItem.file || queueItem.file.size < 1) {\n failUpload(queueItem)\n return\n }\n fileSize.value = queueItem.file.size\n queueItem.status = UploadQueueItemStatus.Uploading\n damUploadStart(damClient, queueItem)\n .then((res) => {\n queueItem.assetId = res.asset\n queueItem.fileId = res.id\n resolve(queueItem)\n })\n .catch((err) => {\n reject(err)\n })\n })\n }\n\n const upload = async () => {\n if (uploadCallback) {\n speedCheck()\n }\n\n const filesize = queueItem.file?.size\n if (isUndefined(filesize)) return Promise.reject()\n\n let i = 0\n while (i < filesize) {\n const uploadedChunk = await processAndUploadChunk(i)\n i += uploadedChunk.size\n progress.value = (i / filesize) * 100\n }\n\n endTimestamp = Date.now() / 1000\n return await finishUpload(queueItem, sha.digest('hex'))\n }\n\n return {\n uploadInit,\n upload,\n stopSpeedCheck,\n }\n}\n\nexport const uploadStop = (cancelTokenSource: CancelTokenSource) => {\n cancelTokenSource.cancel('axios request cancelled')\n}\n","import { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport { fetchAsset, fetchAssetByFileId } from '@/components/damImage/uploadQueue/api/damAssetApi'\nimport { useDamCachedAuthors } from '@/components/damImage/uploadQueue/author/cachedAuthors'\nimport { useUploadQueueItemFactory } from '@/components/damImage/uploadQueue/composables/UploadQueueItemFactory'\nimport { useAssetSuggestions } from '@/components/damImage/uploadQueue/composables/assetSuggestions'\nimport { useDamConfigState } from '@/components/damImage/uploadQueue/composables/damConfigState'\nimport { useDamNotifications } from '@/components/damImage/uploadQueue/composables/damNotifications'\nimport { DamNotificationName } from '@/components/damImage/uploadQueue/composables/damNotificationsEventBus'\nimport { getAssetTypeByMimeType } from '@/components/damImage/uploadQueue/composables/mimeTypeHelper'\nimport { uploadStop, useUpload } from '@/components/damImage/uploadQueue/composables/uploadService'\nimport { useDamCachedKeywords } from '@/components/damImage/uploadQueue/keyword/cachedKeywords'\nimport { damFileTypeFix } from '@/components/file/composables/fileType'\nimport type { DocId, DocIdNullable, IntegerId } from '@/types/common'\nimport { type AssetDetailItemDto, DamAssetType, type DamAssetTypeType } from '@/types/coreDam/Asset'\nimport type { AssetFileFailReasonType } from '@/types/coreDam/AssetFile'\nimport {\n type UploadQueue,\n type UploadQueueItem,\n UploadQueueItemStatus,\n type UploadQueueItemStatusType,\n UploadQueueItemType,\n type UploadQueueKey,\n} from '@/types/coreDam/UploadQueue'\nimport { isNull, isUndefined } from '@/utils/common'\nimport { defineStore } from 'pinia'\nimport { ref } from 'vue'\n\nconst QUEUE_MAX_PARALLEL_UPLOADS = 2\nconst QUEUE_CHUNK_SIZE = 10485760\n\nexport const useUploadQueuesStore = defineStore('commonUploadQueuesStore', () => {\n const { addToCachedKeywords, fetchCachedKeywords } = useDamCachedKeywords()\n const { addToCachedAuthors, fetchCachedAuthors } = useDamCachedAuthors()\n\n const queues = ref<Map<UploadQueueKey, UploadQueue>>(new Map())\n\n const { createDefault } = useUploadQueueItemFactory()\n\n const { damClient } = useCommonAdminCoreDamOptions()\n const { addDamNotificationListener } = useDamNotifications()\n addDamNotificationListener((event) => {\n switch (event.name) {\n case DamNotificationName.AssetFileProcessed:\n queueItemProcessed(event.data.asset)\n break\n case DamNotificationName.AssetFileFailed:\n queueItemFailed(event.data.asset, event.data.failReason)\n break\n case DamNotificationName.AssetFileDuplicate:\n queueItemDuplicate(event.data.asset, event.data.originAssetFile, event.data.assetType)\n break\n case DamNotificationName.AssetMetadataProcessed:\n queueItemMetadataProcessed(event.data.asset)\n break\n case DamNotificationName.AssetFileCopied:\n queueItemCopied(event.data.asset)\n break\n }\n })\n\n function getQueue(queueKey: UploadQueueKey) {\n if (queues.value.has(queueKey)) {\n return queues.value.get(queueKey)\n }\n return null\n }\n\n function getQueueItems(queueKey: UploadQueueKey) {\n if (queues.value.has(queueKey)) {\n return queues.value.get(queueKey)?.items || []\n }\n return []\n }\n\n async function addByCopyToLicence(\n queueKey: UploadQueueKey,\n extSystem: IntegerId,\n assetLicence: IntegerId,\n assets: DocId[]\n ) {\n const { getDamConfigExtSystem } = useDamConfigState()\n\n const configExtSystem = getDamConfigExtSystem(extSystem)\n if (isUndefined(configExtSystem)) {\n throw new Error('useUploadQueuesStore.addByCopyToLicence: Ext system must be initialised.')\n }\n for (const assetId of assets) {\n const queueItem = createDefault(\n 'asset_' + assetId,\n UploadQueueItemType.Asset,\n UploadQueueItemStatus.Processing,\n DamAssetType.Image, // only image now\n QUEUE_CHUNK_SIZE,\n assetLicence\n )\n queueItem.assetId = assetId\n createQueue(queueKey)\n addQueueItem(queueKey, queueItem)\n recalculateQueueCounts(queueKey)\n processUpload(queueKey)\n }\n }\n\n async function addByFiles(queueKey: UploadQueueKey, extSystem: IntegerId, assetLicence: IntegerId, files: File[]) {\n const { getDamConfigExtSystem } = useDamConfigState()\n\n const configExtSystem = getDamConfigExtSystem(extSystem)\n if (isUndefined(configExtSystem)) {\n throw new Error('useUploadQueuesStore.addByFiles: Ext system must be initialised.')\n }\n for await (const file of files) {\n const type = getAssetTypeByMimeType(damFileTypeFix(file), configExtSystem)\n if (!type || type !== DamAssetType.Image) continue // only image now\n const queueItem = createDefault(\n 'file_' + file.name,\n UploadQueueItemType.File,\n UploadQueueItemStatus.Waiting,\n type,\n QUEUE_CHUNK_SIZE,\n assetLicence\n )\n queueItem.file = file\n queueItem.displayTitle = file.name\n createQueue(queueKey)\n addQueueItem(queueKey, queueItem)\n recalculateQueueCounts(queueKey)\n processUpload(queueKey)\n }\n }\n\n function addQueueItem(queueKey: UploadQueueKey, item: UploadQueueItem) {\n const queue = queues.value.get(queueKey)\n if (!queue) return\n queue.items.push(item)\n }\n\n function createQueue(queueKey: UploadQueueKey) {\n if (!queues.value.has(queueKey)) {\n queues.value.set(queueKey, {\n items: [],\n totalCount: 0,\n processedCount: 0,\n fileInputKey: 0,\n suggestions: { newKeywordNames: new Set<string>(), newAuthorNames: new Set<string>() },\n })\n }\n }\n\n function recalculateQueueCounts(queueKey: UploadQueueKey) {\n const queue = queues.value.get(queueKey)\n if (!queue) return\n queue.totalCount = queue.items.length\n queue.processedCount =\n getQueueItemsByStatus(queueKey, UploadQueueItemStatus.Uploaded).length +\n getQueueItemsByStatus(queueKey, UploadQueueItemStatus.Failed).length\n }\n\n function getQueueItemsByStatus(queueKey: UploadQueueKey, status: UploadQueueItemStatusType) {\n const queue = queues.value.get(queueKey)\n if (!queue) return []\n return queue.items.filter((item) => item.status === status)\n }\n\n function processUpload(queueKey: UploadQueueKey) {\n const waitingItems = getQueueItemsByStatus(queueKey, UploadQueueItemStatus.Waiting)\n if (waitingItems.length === 0) {\n // upload finished\n return\n }\n const uploadingCount = getQueueItemsByStatus(queueKey, UploadQueueItemStatus.Uploading).length\n if (uploadingCount === QUEUE_MAX_PARALLEL_UPLOADS) {\n // wait for empty upload slot\n return\n }\n for (let i = 0; i < QUEUE_MAX_PARALLEL_UPLOADS; i++) {\n if (waitingItems[i]) queueItemUploadStart(waitingItems[i], queueKey)\n }\n }\n\n async function queueItemUploadStart(item: UploadQueueItem, queueKey: UploadQueueKey) {\n const { upload, uploadInit, stopSpeedCheck } = useUpload(\n item,\n (progress: number, speed: number, estimate: number) => {\n setUploadSpeed(item, progress, speed, estimate)\n }\n )\n try {\n await uploadInit()\n await upload()\n processUpload(queueKey)\n } catch (e) {\n stopSpeedCheck()\n item.error.hasError = true\n item.status = UploadQueueItemStatus.Failed\n recalculateQueueCounts(queueKey)\n processUpload(queueKey)\n }\n }\n\n function setUploadSpeed(item: UploadQueueItem, progress: number, speed: number, estimate: number) {\n item.progress.progressPercent = progress\n item.progress.remainingTime = estimate\n item.progress.speed = speed\n }\n\n async function queueItemProcessed(assetId: DocId) {\n try {\n const asset = await fetchAsset(damClient, assetId)\n if (!asset) return\n queues.value.forEach((queue, queueKey) => {\n queue.items.forEach((item) => {\n if (item.assetId === asset.id && asset.mainFile) {\n clearTimeout(item.notificationFallbackTimer)\n item.status = UploadQueueItemStatus.Uploaded\n item.assetStatus = asset.attributes.assetStatus\n if (asset.mainFile.links?.image_detail) {\n item.imagePreview = asset.mainFile.links.image_detail\n }\n item.mainFileSingleUse = asset.mainFileSingleUse\n processUpload(queueKey)\n }\n })\n recalculateQueueCounts(queueKey)\n })\n } catch (e) {\n //\n }\n }\n\n async function queueItemDuplicate(\n assetId: DocId,\n originAssetFile: DocIdNullable = null,\n assetType: DamAssetTypeType | null = null\n ) {\n const { updateNewNames, getAuthorConflicts } = useAssetSuggestions()\n if (!originAssetFile || !assetType || assetType !== DamAssetType.Image) return\n let assetRes: null | AssetDetailItemDto = null\n try {\n assetRes = await fetchAssetByFileId(damClient, originAssetFile)\n } catch (e) {\n throw new Error('Fatal error')\n }\n queues.value.forEach((queue, queueKey) => {\n queue.items.forEach((item) => {\n if (isNull(assetRes)) return\n if (item.assetId === assetId) {\n clearTimeout(item.notificationFallbackTimer)\n item.isDuplicate = true\n item.status = UploadQueueItemStatus.Uploaded\n item.fileId = originAssetFile\n item.duplicateAssetId = assetRes.id\n item.assetStatus = assetRes.attributes.assetStatus\n if (assetRes.mainFile?.links?.image_detail) {\n item.imagePreview = assetRes.mainFile.links.image_detail\n }\n item.keywords = assetRes.keywords\n item.authors = assetRes.authors\n item.customData = assetRes.metadata.customData\n updateNewNames(assetRes.metadata.authorSuggestions, queue.suggestions.newAuthorNames)\n updateNewNames(assetRes.metadata.keywordSuggestions, queue.suggestions.newKeywordNames)\n item.authorConflicts = getAuthorConflicts(assetRes!.metadata.authorSuggestions)\n addToCachedKeywords(item.keywords)\n addToCachedAuthors(item.authors)\n addToCachedAuthors(item.authorConflicts)\n item.assetId = assetRes.id\n item.mainFileSingleUse = assetRes.mainFileSingleUse\n item.canEditMetadata = true\n processUpload(queueKey)\n }\n })\n recalculateQueueCounts(queueKey)\n fetchCachedAuthors()\n fetchCachedKeywords()\n })\n }\n\n async function queueItemFailed(assetId: DocId, failReason: AssetFileFailReasonType) {\n try {\n const asset = await fetchAsset(damClient, assetId)\n queues.value.forEach((queue, queueKey) => {\n queue.items.forEach((item) => {\n if (item.assetId === asset.id) {\n clearTimeout(item.notificationFallbackTimer)\n item.error.hasError = true\n item.status = UploadQueueItemStatus.Failed\n item.error.assetFileFailReason = failReason\n item.canEditMetadata = false\n processUpload(queueKey)\n }\n })\n recalculateQueueCounts(queueKey)\n })\n } catch (e) {\n //\n }\n }\n\n async function queueItemMetadataProcessed(assetId: DocId) {\n const { updateNewNames, getAuthorConflicts } = useAssetSuggestions()\n try {\n const asset = await fetchAsset(damClient, assetId)\n queues.value.forEach((queue, queueKey) => {\n queue.items.forEach((item) => {\n if (item.assetId === asset.id && item.type) {\n clearTimeout(item.notificationFallbackTimer)\n item.keywords = asset.keywords\n item.authors = asset.authors\n item.customData = asset.metadata.customData\n item.mainFileSingleUse = asset.mainFileSingleUse\n updateNewNames(asset.metadata.authorSuggestions, queue.suggestions.newAuthorNames)\n updateNewNames(asset.metadata.keywordSuggestions, queue.suggestions.newKeywordNames)\n item.authorConflicts = getAuthorConflicts(asset.metadata.authorSuggestions)\n addToCachedKeywords(item.keywords)\n addToCachedAuthors(item.authors)\n addToCachedAuthors(item.authorConflicts)\n item.canEditMetadata = true\n }\n })\n recalculateQueueCounts(queueKey)\n fetchCachedAuthors()\n fetchCachedKeywords()\n })\n } catch (e) {\n //\n }\n }\n\n async function queueItemCopied(assetId: DocId) {\n const { updateNewNames, getAuthorConflicts } = useAssetSuggestions()\n try {\n const asset = await fetchAsset(damClient, assetId)\n queues.value.forEach((queue, queueKey) => {\n queue.items.forEach((item) => {\n if (item.assetId === asset.id && asset.mainFile && item.type) {\n clearTimeout(item.notificationFallbackTimer)\n item.fileId = asset.mainFile.id\n item.status = UploadQueueItemStatus.Uploaded\n item.assetStatus = asset.attributes.assetStatus\n if (asset.mainFile.links?.image_detail) {\n item.imagePreview = asset.mainFile.links.image_detail\n }\n item.mainFileSingleUse = asset.mainFileSingleUse\n item.keywords = asset.keywords\n item.authors = asset.authors\n item.customData = asset.metadata.customData\n updateNewNames(asset.metadata.authorSuggestions, queue.suggestions.newAuthorNames)\n updateNewNames(asset.metadata.keywordSuggestions, queue.suggestions.newKeywordNames)\n item.authorConflicts = getAuthorConflicts(asset.metadata.authorSuggestions)\n addToCachedKeywords(item.keywords)\n addToCachedAuthors(item.authors)\n addToCachedAuthors(item.authorConflicts)\n item.canEditMetadata = true\n processUpload(queueKey)\n }\n })\n recalculateQueueCounts(queueKey)\n fetchCachedAuthors()\n fetchCachedKeywords()\n })\n } catch (e) {\n //\n }\n }\n\n function removeByIndex(queueKey: UploadQueueKey, index: number) {\n const queue = queues.value.get(queueKey)\n if (!queue || !queue.items[index]) return\n queue.items.splice(index, 1)\n recalculateQueueCounts(queueKey)\n }\n\n async function stopItemUpload(queueKey: UploadQueueKey, queueItem: UploadQueueItem, index: number) {\n const queue = queues.value.get(queueKey)\n if (!queue || queue.items.length === 0) return\n queueItem.status = UploadQueueItemStatus.Stop\n if (queueItem.latestChunkCancelToken) {\n uploadStop(queueItem.latestChunkCancelToken)\n }\n removeByIndex(queueKey, index)\n processUpload(queueKey)\n }\n\n async function updateFromDetail(asset: AssetDetailItemDto) {\n const { updateNewNames, getAuthorConflicts } = useAssetSuggestions()\n try {\n const assetRes = await fetchAsset(damClient, asset.id)\n queues.value.forEach((queue, queueKey) => {\n queue.items.forEach((item) => {\n if (item.assetId === assetRes.id && item.type) {\n clearTimeout(item.notificationFallbackTimer)\n item.keywords = assetRes.keywords\n item.authors = assetRes.authors\n item.customData = assetRes.metadata.customData\n updateNewNames(assetRes.metadata.authorSuggestions, queue.suggestions.newAuthorNames)\n updateNewNames(assetRes.metadata.keywordSuggestions, queue.suggestions.newKeywordNames)\n item.authorConflicts = getAuthorConflicts(assetRes.metadata.authorSuggestions)\n addToCachedKeywords(item.keywords)\n addToCachedAuthors(item.authors)\n addToCachedAuthors(item.authorConflicts)\n }\n })\n recalculateQueueCounts(queueKey)\n fetchCachedAuthors()\n fetchCachedKeywords()\n })\n } catch (e) {\n //\n }\n }\n\n function getQueueTotalCount(queueKey: UploadQueueKey) {\n const queue = queues.value.get(queueKey)\n if (!queue) return 0\n return queue.totalCount\n }\n\n function getQueueProcessedCount(queueKey: UploadQueueKey) {\n const queue = queues.value.get(queueKey)\n if (!queue) return 0\n return queue.processedCount\n }\n\n function stopUpload(queueKey: UploadQueueKey) {\n const queue = queues.value.get(queueKey)\n if (!queue || queue.items.length === 0) return\n const currentItems = getQueueItemsByStatus(queueKey, UploadQueueItemStatus.Uploading)\n queue.items.forEach((item) => {\n item.status = UploadQueueItemStatus.Stop\n })\n if (currentItems.length > 0) {\n currentItems.forEach((item) => {\n if (item.latestChunkCancelToken) {\n uploadStop(item.latestChunkCancelToken)\n }\n })\n }\n clearQueue(queueKey)\n forceReloadFileInput(queueKey)\n }\n\n function forceReloadFileInput(queueKey: UploadQueueKey) {\n createQueue(queueKey)\n const queue = queues.value.get(queueKey)\n if (!queue) return\n queue.fileInputKey++\n }\n\n function getQueueFileInputKey(queueKey: UploadQueueKey) {\n const queue = queues.value.get(queueKey)\n if (!queue) return -1\n return queue.fileInputKey\n }\n\n function clearQueue(queueKey: UploadQueueKey) {\n const queue = queues.value.get(queueKey)\n if (!queue) return\n queues.value.set(queueKey, {\n items: [],\n totalCount: 0,\n processedCount: 0,\n fileInputKey: getQueueFileInputKey(queueKey) + 1,\n suggestions: { newKeywordNames: new Set<string>(), newAuthorNames: new Set<string>() },\n })\n }\n\n function getQueueItemsTypes(queueKey: UploadQueueKey) {\n const types: Array<DamAssetTypeType> = []\n const queue = queues.value.get(queueKey)\n if (!queue) return types\n if (queue.items.length > 0) {\n for (let i = 0; i < queue.items.length; i++) {\n if (types.includes(queue.items[i].assetType)) {\n continue\n }\n types.push(queue.items[i].assetType)\n }\n }\n return types\n }\n\n return {\n getQueue,\n getQueueItems,\n addByFiles,\n addByCopyToLicence,\n queueItemProcessed,\n queueItemDuplicate,\n queueItemFailed,\n removeByIndex,\n stopItemUpload,\n getQueueTotalCount,\n getQueueProcessedCount,\n stopUpload,\n getQueueItemsTypes,\n updateFromDetail,\n forceReloadFileInput,\n }\n})\n","<script lang=\"ts\" setup>\nimport { computed, shallowRef, watch } from 'vue'\nimport { useDamCachedAuthors } from '@/components/damImage/uploadQueue/author/cachedAuthors'\nimport { useUploadQueuesStore } from '@/components/damImage/uploadQueue/composables/uploadQueuesStore'\nimport type { CachedItem } from '@/composables/system/defineCached'\nimport type { DamAuthorMinimal } from '@/components/damImage/uploadQueue/author/DamAuthor'\nimport { isNull, isUndefined } from '@/utils/common'\nimport type { DocId } from '@/types/common'\nimport { useI18n } from 'vue-i18n'\n\nconst props = withDefaults(\n defineProps<{\n id: null | DocId | undefined\n title?: string\n queueId?: string | undefined\n forceRounded?: boolean\n textOnly?: boolean\n size?: string\n containerClass?: undefined | string\n forceReviewed?: undefined | boolean\n }>(),\n {\n queueId: undefined,\n title: '',\n forceRounded: false,\n textOnly: false,\n size: 'small',\n containerClass: 'd-inline-flex',\n forceReviewed: undefined,\n }\n)\n\nconst { getCachedAuthor } = useDamCachedAuthors()\nconst uploadQueuesStore = useUploadQueuesStore()\n\nconst cached = shallowRef<undefined | CachedItem<DamAuthorMinimal>>(undefined)\nconst loaded = shallowRef<boolean>(false)\n\nconst item = computed(() => {\n return getCachedAuthor(props.id)\n})\n\nconst displayNewIcon = computed(() => {\n if (!props.queueId) return undefined\n const queue = uploadQueuesStore.getQueue(props.queueId)\n if (!queue || !cached.value) return undefined\n if (queue.suggestions.newAuthorNames.has(cached.value.name)) return 'mdi-new-box'\n return undefined\n})\n\nconst displayTitle = computed(() => {\n if (props.title.length > 0) return props.title\n if (cached.value) {\n return cached.value.name + (cached.value.identifier?.length > 0 ? ` (${cached.value.identifier})` : '')\n }\n return ''\n})\n\nconst displayReviewed = computed(() => {\n if (props.forceReviewed) return true\n if (item.value?.reviewed) return true\n return false\n})\n\nwatch(\n item,\n async (newValue) => {\n if (loaded.value) return\n if (isUndefined(newValue) || newValue._loaded === false) return\n cached.value = newValue\n loaded.value = true\n },\n { immediate: true }\n)\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <div :class=\"containerClass\">\n <template v-if=\"isNull(id) || isUndefined(id)\">\n <slot name=\"empty\">\n -\n </slot>\n </template>\n <div v-else-if=\"textOnly\">\n {{ displayTitle }}\n <VProgressCircular\n v-if=\"!loaded && title.length === 0\"\n :size=\"12\"\n :width=\"2\"\n indeterminate\n class=\"mx-1\"\n />\n <VIcon\n v-if=\"displayReviewed\"\n icon=\"mdi-shield-check\"\n size=\"small\"\n class=\"text-success ml-1\"\n :title=\"t('common.damImage.author.model.flags.reviewed')\"\n />\n </div>\n <VChip\n v-else\n :size=\"size\"\n :append-icon=\"displayNewIcon\"\n :label=\"forceRounded ? undefined : true\"\n :title=\"displayReviewed ? t('common.damImage.author.model.flags.reviewed') : undefined\"\n >\n {{ displayTitle }}\n <VProgressCircular\n v-if=\"!loaded && title.length === 0\"\n :size=\"12\"\n :width=\"2\"\n indeterminate\n class=\"mx-1\"\n />\n <VIcon\n v-if=\"displayReviewed\"\n icon=\"mdi-shield-check\"\n class=\"text-success ml-1\"\n size=\"small\"\n :title=\"t('common.damImage.author.model.flags.reviewed')\"\n />\n </VChip>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, shallowRef, watch } from 'vue'\nimport type { DocId } from '@/types/common'\nimport { useDamCachedAuthors } from '@/components/damImage/uploadQueue/author/cachedAuthors'\nimport type { CachedItem } from '@/composables/system/defineCached'\nimport type { DamAuthorMinimal } from '@/components/damImage/uploadQueue/author/DamAuthor'\nimport { isUndefined } from '@/utils/common'\n\nconst props = withDefaults(\n defineProps<{\n id: null | DocId | undefined\n queueId?: string | undefined\n }>(),\n {\n queueId: undefined,\n }\n)\nconst emit = defineEmits<{\n (e: 'addAuthor', data: DocId | null | undefined): void\n}>()\n\nconst clickClose = () => {\n emit('addAuthor', props.id)\n}\n\nconst { getCachedAuthor } = useDamCachedAuthors()\n\nconst cached = shallowRef<undefined | CachedItem<DamAuthorMinimal>>(undefined)\nconst loaded = shallowRef<boolean>(false)\n\nconst item = computed(() => {\n return getCachedAuthor(props.id)\n})\n\nconst displayTitle = computed(() => {\n if (cached.value) {\n return cached.value.name + (cached.value.identifier?.length > 0 ? ` (${cached.value.identifier})` : '')\n }\n return ''\n})\n\nwatch(\n item,\n async (newValue) => {\n if (loaded.value) return\n if (isUndefined(newValue) || newValue._loaded === false) return\n cached.value = newValue\n loaded.value = true\n },\n { immediate: true }\n)\n</script>\n\n<template>\n <VChip\n size=\"small\"\n closable\n close-icon=\"mdi-plus\"\n @click:close=\"clickClose\"\n >\n {{ displayTitle }}\n <VProgressCircular\n v-if=\"!loaded\"\n :size=\"12\"\n :width=\"2\"\n indeterminate\n class=\"mx-1\"\n />\n </VChip>\n</template>\n","import { ref } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport type { ValueObjectOption } from '@/types/ValueObject'\n\nexport const DamAuthorType = {\n None: 'none',\n Internal: 'internal',\n External: 'external',\n Agency: 'agency',\n} as const\nexport type DamAuthorTypeType = (typeof DamAuthorType)[keyof typeof DamAuthorType]\nexport const DamAuthorTypeDefault = DamAuthorType.None\n\nexport function useDamAuthorType() {\n const { t } = useI18n()\n\n const authorTypeOptions = ref<ValueObjectOption<DamAuthorTypeType>[]>([\n {\n value: DamAuthorType.None,\n title: t('common.damImage.author.authorType.none'),\n },\n {\n value: DamAuthorType.Internal,\n title: t('common.damImage.author.authorType.internal'),\n },\n {\n value: DamAuthorType.External,\n title: t('common.damImage.author.authorType.external'),\n },\n {\n value: DamAuthorType.Agency,\n title: t('common.damImage.author.authorType.agency'),\n },\n ])\n\n const getAuthorTypeOption = (value: DamAuthorTypeType) => {\n return authorTypeOptions.value.find((item) => item.value === value)\n }\n\n return {\n authorTypeOptions,\n getAuthorTypeOption,\n }\n}\n","import type { Ref } from 'vue'\nimport { computed } from 'vue'\nimport useVuelidate from '@vuelidate/core'\nimport type { DamAuthor } from '@/components/damImage/uploadQueue/author/DamAuthor'\nimport type { ValidationScope } from '@/types/Validation'\nimport { useValidate } from '@/validators/vuelidate/useValidate'\n\nconst { required, minLength } = useValidate()\n\nexport function useAuthorValidation(author: Ref<DamAuthor>, validationScope: ValidationScope = undefined) {\n const rules = computed(() => ({\n author: {\n name: {\n required,\n minLength: minLength(2),\n },\n identifier: {\n minLength: minLength(3),\n },\n },\n }))\n const v$ = useVuelidate(rules, { author }, { $scope: validationScope })\n\n return {\n v$,\n }\n}\n","import type { DamAuthor } from '@/components/damImage/uploadQueue/author/DamAuthor'\nimport { DamAuthorTypeDefault } from '@/components/damImage/uploadQueue/author/DamAuthorType'\nimport { dateTimeNow } from '@/utils/datetime'\nimport { ENTITY } from '@/components/damImage/uploadQueue/api/authorApi'\nimport { SYSTEM_CORE_DAM } from '@/components/damImage/uploadQueue/api/damAssetApi'\n\nexport function useDamAuthorFactory() {\n const createDefault = (extSystemId: number, reviewed?: boolean): DamAuthor => {\n return {\n id: '',\n name: '',\n identifier: '',\n extSystem: extSystemId,\n flags: {\n reviewed: reviewed ?? false,\n canBeCurrentAuthor: true,\n },\n currentAuthors: [],\n childAuthors: [],\n type: DamAuthorTypeDefault,\n createdAt: dateTimeNow(),\n modifiedAt: dateTimeNow(),\n createdBy: 0,\n modifiedBy: 0,\n _resourceName: ENTITY,\n _system: SYSTEM_CORE_DAM,\n }\n }\n\n return {\n createDefault,\n }\n}\n","<script lang=\"ts\" setup>\nimport { ref } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport type { ValidationScope } from '@/types/Validation'\nimport { ADamAuthorCreateValidationScopeSymbol } from '@/components/damImage/uploadQueue/composables/uploadValidations'\nimport type { DamAuthor } from '@/components/damImage/uploadQueue/author/DamAuthor'\nimport { useDamAuthorType } from '@/components/damImage/uploadQueue/author/DamAuthorType'\nimport { isUndefined } from '@/utils/common'\nimport { useAuthorValidation } from '@/components/damImage/uploadQueue/author/authorValidation'\nimport { useAlerts } from '@/composables/system/alerts'\nimport { createAuthor } from '@/components/damImage/uploadQueue/api/authorApi'\nimport { useDamConfigState } from '@/components/damImage/uploadQueue/composables/damConfigState'\nimport { useDamAuthorFactory } from '@/components/damImage/uploadQueue/author/AuthorFactory'\nimport { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport { SYSTEM_CORE_DAM } from '@/components/damImage/uploadQueue/api/damAssetApi'\nimport ASystemEntityScope from '@/components/form/ASystemEntityScope.vue'\nimport ADialogToolbar from '@/components/ADialogToolbar.vue'\nimport ARow from '@/components/ARow.vue'\nimport AFormTextField from '@/components/form/AFormTextField.vue'\nimport AFormValueObjectOptionsSelect from '@/components/form/AFormValueObjectOptionsSelect.vue'\nimport type { IntegerId } from '@/types/common'\n\nconst props = withDefaults(\n defineProps<{\n extSystem: IntegerId\n initialValue?: string\n disableRedirect?: boolean\n variant?: 'button' | 'icon' | 'listItem'\n buttonT?: string\n buttonClass?: string\n dataCy?: string\n disabled?: boolean | undefined\n validationScope?: ValidationScope\n }>(),\n {\n initialValue: '',\n disableRedirect: false,\n variant: 'button',\n buttonT: 'common.button.create',\n buttonClass: 'ml-2',\n dataCy: undefined,\n disabled: undefined,\n validationScope: ADamAuthorCreateValidationScopeSymbol,\n }\n)\nconst emit = defineEmits<{\n (e: 'onSuccess', data: DamAuthor): void\n}>()\n\nconst { damClient } = useCommonAdminCoreDamOptions()\nconst { getDamConfigExtSystem } = useDamConfigState()\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst configExtSystem = getDamConfigExtSystem(props.extSystem)\nif (isUndefined(configExtSystem)) {\n throw new Error('AuthorCreateButton: Ext system must be initialised.')\n}\n\nconst { createDefault } = useDamAuthorFactory()\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst author = ref<DamAuthor>(createDefault(props.extSystem))\nconst dialog = ref(false)\nconst buttonLoading = ref(false)\n\nconst onClick = (textOverride: string | undefined) => {\n if (isUndefined(configExtSystem)) {\n throw new Error('AuthorCreateButton: Ext system must be initialised.')\n }\n author.value = createDefault(props.extSystem, true)\n textOverride ? (author.value.name = textOverride) : (author.value.name = props.initialValue)\n dialog.value = true\n}\n\nconst onCancel = () => {\n dialog.value = false\n}\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { v$ } = useAuthorValidation(author, props.validationScope)\nconst { t } = useI18n()\nconst { showValidationError, showRecordWas, showErrorsDefault } = useAlerts()\n\nconst onConfirm = async () => {\n if (buttonLoading.value) return\n try {\n buttonLoading.value = true\n v$.value.$touch()\n if (v$.value.$invalid) {\n showValidationError()\n buttonLoading.value = false\n return\n }\n const res = await createAuthor(damClient, author.value)\n emit('onSuccess', res)\n showRecordWas('created')\n dialog.value = false\n if (!isUndefined(res.id) && !props.disableRedirect) {\n // router.push({ name: ROUTE.DAM.AUTHOR.DETAIL, params: { id: res.id } })\n }\n } catch (error) {\n showErrorsDefault(error)\n } finally {\n buttonLoading.value = false\n }\n}\n\nconst { authorTypeOptions } = useDamAuthorType()\n\ndefineExpose({\n open: onClick,\n})\n</script>\n\n<template>\n <VListItem v-if=\"variant === 'listItem'\">\n <ABtnSecondary\n size=\"small\"\n :text=\"initialValue\"\n prepend-icon=\"mdi-plus-circle\"\n @click.stop=\"onClick\"\n />\n </VListItem>\n <ABtnPrimary\n v-else-if=\"variant === 'button'\"\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n :disabled=\"disabled\"\n rounded=\"pill\"\n @click.stop=\"onClick(undefined)\"\n >\n {{ t(buttonT) }}\n </ABtnPrimary>\n <VBtn\n v-else\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n icon\n :disabled=\"disabled\"\n variant=\"text\"\n size=\"small\"\n @click.stop=\"onClick(undefined)\"\n >\n <VIcon icon=\"mdi-plus\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.author.button.add') }}\n </VTooltip>\n </VBtn>\n <VDialog v-model=\"dialog\">\n <VCard\n v-if=\"dialog\"\n width=\"500\"\n class=\"mt-0 mr-auto ml-auto\"\n data-cy=\"create-panel\"\n >\n <ADialogToolbar @on-cancel=\"onCancel\">\n {{ t('common.damImage.author.meta.create') }}\n </ADialogToolbar>\n <VCardText>\n <ASystemEntityScope\n :system=\"SYSTEM_CORE_DAM\"\n subject=\"author\"\n >\n <ARow>\n <AFormTextField\n v-model=\"author.name\"\n :label=\"t('common.damImage.author.model.name')\"\n :v=\"v$.author.name\"\n required\n data-cy=\"author-name\"\n @keyup.enter=\"onConfirm\"\n />\n </ARow>\n <ARow>\n <AFormTextField\n v-model=\"author.identifier\"\n :label=\"t('common.damImage.author.model.identifier')\"\n :v=\"v$.author.identifier\"\n data-cy=\"author-identifier\"\n @keyup.enter=\"onConfirm\"\n />\n </ARow>\n <ARow>\n <AFormValueObjectOptionsSelect\n v-model=\"author.type\"\n :label=\"t('common.damImage.author.model.type')\"\n :items=\"authorTypeOptions\"\n data-cy=\"author-type\"\n @keyup.enter=\"onConfirm\"\n />\n </ARow>\n </ASystemEntityScope>\n </VCardText>\n <VCardActions>\n <VSpacer />\n <ABtnTertiary\n data-cy=\"button-cancel\"\n @click.stop=\"onCancel\"\n >\n {{ t('common.button.cancel') }}\n </ABtnTertiary>\n <ABtnPrimary\n :loading=\"buttonLoading\"\n data-cy=\"button-confirm\"\n @click.stop=\"onConfirm\"\n >\n {{ t(buttonT) }}\n </ABtnPrimary>\n </VCardActions>\n </VCard>\n </VDialog>\n</template>\n","<script lang=\"ts\" setup>\nimport type { DocId, IntegerId } from '@/types/common'\nimport type { ValidationScope } from '@/types/Validation'\nimport { computed, provide, ref } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { useValidate } from '@/validators/vuelidate/useValidate'\nimport useVuelidate from '@vuelidate/core'\nimport {\n useDamCachedAuthors,\n useDamCachedAuthorsForRemoteAutocomplete,\n} from '@/components/damImage/uploadQueue/author/cachedAuthors'\nimport type { DamAuthor } from '@/components/damImage/uploadQueue/author/DamAuthor'\nimport { isArray } from '@/utils/common'\nimport AFormRemoteAutocompleteWithCached from '@/labs/form/AFormRemoteAutocompleteWithCached.vue'\nimport AuthorRemoteAutocompleteCachedAuthorChip from '@/components/damImage/uploadQueue/author/AuthorRemoteAutocompleteCachedAuthorChip.vue'\nimport AuthorRemoteAutocompleteCachedAuthorChipConflicts from '@/components/damImage/uploadQueue/author/AuthorRemoteAutocompleteCachedAuthorChipConflicts.vue'\nimport { useAuthorSelectActions } from '@/components/damImage/uploadQueue/author/authorActions'\nimport AuthorCreateButton from '@/components/damImage/uploadQueue/author/AuthorCreateButton.vue'\nimport ARow from '@/components/ARow.vue'\nimport { FilterInnerConfigKey, FilterInnerDataKey } from '@/labs/filters/filterInjectionKeys'\nimport { useAuthorInnerFilter } from '@/components/damImage/uploadQueue/author/AuthorFilter'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: DocId | null | DocId[] | any\n extSystem: IntegerId\n queueId?: string | undefined\n label?: string | undefined\n required?: boolean | null\n disabled?: boolean | undefined\n multiple?: boolean\n clearable?: boolean\n authorConflicts?: DocId[]\n dataCy?: string\n validationScope?: ValidationScope\n }>(),\n {\n label: undefined,\n queueId: undefined,\n required: null,\n disabled: undefined,\n multiple: false,\n clearable: false,\n authorConflicts: undefined,\n dataCy: undefined,\n validationScope: undefined,\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: DocId | null | DocId[]): void\n}>()\n\nconst modelValueComputed = computed({\n get() {\n return props.modelValue\n },\n set(newValue) {\n emit('update:modelValue', [...newValue])\n },\n})\n\nconst search = ref<string>('')\nconst loadingLocal = ref(false)\nconst fetchedItemsMinimal = ref<Map<IntegerId | DocId, any>>(new Map())\n\nconst { t } = useI18n()\n\nconst requiredComputed = computed(() => !!props.required)\n\nconst { requiredIf } = useValidate()\n\nconst rules = {\n modelValueComputed: {\n // eslint-disable-next-line vue/no-ref-object-reactivity-loss\n required: requiredIf(requiredComputed.value),\n },\n}\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst v$ = useVuelidate(rules, { modelValueComputed }, { $scope: props.validationScope })\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { fetchItemsMinimal } = useAuthorSelectActions(props.extSystem)\n\nconst { filterData, filterConfig } = useAuthorInnerFilter()\nprovide(FilterInnerConfigKey, filterConfig)\nprovide(FilterInnerDataKey, filterData)\n\nconst addAuthor = async (id: null | DocId | undefined) => {\n if (!id) return\n if (!modelValueComputed.value.includes(id)) {\n modelValueComputed.value = [...modelValueComputed.value, ...[id]]\n }\n}\n\nconst addNewAuthorText = ref('')\n\nconst searchChange = (newValue: string) => {\n if (newValue.length > 0) addNewAuthorText.value = removeLastComma(newValue)\n}\n\nconst { addManualToCachedAuthors } = useDamCachedAuthors()\n\nconst afterCreate = (author: DamAuthor) => {\n addManualToCachedAuthors(author)\n if (isArray(modelValueComputed.value)) {\n modelValueComputed.value = [...modelValueComputed.value, author.id]\n search.value = ''\n return\n }\n modelValueComputed.value = author.id\n search.value = ''\n}\n\nconst itemSlotIsSelected = (item: DocId) => {\n if (isArray(modelValueComputed.value)) {\n return modelValueComputed.value.includes(item)\n } else if (modelValueComputed.value) {\n return modelValueComputed.value === item\n }\n return false\n}\n\nconst authorCreateButton = ref<InstanceType<typeof AuthorCreateButton> | null>(null)\n\nconst removeLastComma = (value: string) => {\n if (value.endsWith(',')) return value.slice(0, -1)\n return value\n}\n\nconst onEnterKeyup = () => {\n const value = removeLastComma(search.value)\n authorCreateButton.value?.open(value)\n}\n\nconst onCommaKeyup = () => {\n const value = removeLastComma(search.value)\n authorCreateButton.value?.open(value)\n}\n\nconst showAdd = computed(() => {\n if (loadingLocal.value) return false\n if (search.value.length < 2 || search.value.length > 255) return false\n if (fetchedItemsMinimal.value.size === 0) return true\n return ![...fetchedItemsMinimal.value.values()].some(\n (item) => item.name?.toLowerCase() === search.value!.toLowerCase()\n )\n})\n</script>\n\n<template>\n <div class=\"d-flex\">\n <ARow\n v-if=\"disabled && multiple\"\n :title=\"label\"\n >\n <AuthorRemoteAutocompleteCachedAuthorChip\n v-for=\"id in modelValueComputed\"\n :id=\"id\"\n :key=\"id\"\n :queue-id=\"queueId\"\n force-rounded\n class=\"mr-1 mb-1\"\n />\n </ARow>\n <ARow\n v-else-if=\"disabled && !multiple\"\n :title=\"label\"\n >\n <AuthorRemoteAutocompleteCachedAuthorChip\n :id=\"modelValueComputed\"\n :key=\"modelValueComputed\"\n :queue-id=\"queueId\"\n force-rounded\n />\n </ARow>\n <AFormRemoteAutocompleteWithCached\n v-else\n v-model=\"modelValueComputed\"\n v-model:search=\"search\"\n v-model:loading-local=\"loadingLocal\"\n v-model:fetched-items-minimal=\"fetchedItemsMinimal\"\n :use-cached=\"useDamCachedAuthorsForRemoteAutocomplete\"\n :v=\"v$\"\n :required=\"requiredComputed\"\n :label=\"label\"\n :fetch-items-minimal=\"fetchItemsMinimal\"\n :multiple=\"multiple\"\n :clearable=\"clearable\"\n filter-by-field=\"text\"\n :filter-sort-by=\"null\"\n :data-cy=\"dataCy\"\n item-title=\"name\"\n item-value=\"id\"\n :min-search-chars=\"2\"\n min-search-text=\"common.damImage.author.filterMinChars\"\n @search-change=\"searchChange\"\n @keyup.enter=\"onEnterKeyup\"\n @keyup.,=\"onCommaKeyup\"\n >\n <template #item=\"{ props: itemSlotProps, item: itemSlotItem }\">\n <VListItem\n v-bind=\"itemSlotProps\"\n @click.prevent=\"\"\n >\n <template\n v-if=\"multiple\"\n #prepend\n >\n <VCheckboxBtn\n :model-value=\"itemSlotIsSelected(itemSlotItem.value)\"\n :ripple=\"false\"\n />\n </template>\n <template #title>\n <AuthorRemoteAutocompleteCachedAuthorChip\n :id=\"itemSlotItem.value\"\n :key=\"itemSlotItem.value\"\n :queue-id=\"queueId\"\n :title=\"itemSlotItem.title\"\n text-only\n :force-reviewed=\"itemSlotItem.raw?.raw?.reviewed\"\n />\n </template>\n </VListItem>\n </template>\n <template #chip=\"{ item: chipSlotItem }\">\n <AuthorRemoteAutocompleteCachedAuthorChip\n :id=\"chipSlotItem.value\"\n :key=\"chipSlotItem.value\"\n :queue-id=\"queueId\"\n :title=\"chipSlotItem.title\"\n force-rounded\n />\n </template>\n <template #append-item>\n <VListItem\n v-if=\"showAdd\"\n class=\"a-authors-append-item\"\n >\n <ABtnSecondary\n size=\"small\"\n :text=\"addNewAuthorText\"\n prepend-icon=\"mdi-plus-circle\"\n @click.stop=\"onCommaKeyup\"\n />\n </VListItem>\n </template>\n </AFormRemoteAutocompleteWithCached>\n <div v-show=\"!disabled\">\n <AuthorCreateButton\n ref=\"authorCreateButton\"\n variant=\"icon\"\n :ext-system=\"extSystem\"\n data-cy=\"add-author\"\n :initial-value=\"addNewAuthorText\"\n disable-redirect\n :disabled=\"disabled\"\n @on-success=\"afterCreate\"\n />\n </div>\n </div>\n <div\n v-if=\"!disabled && authorConflicts && authorConflicts.length > 0\"\n class=\"d-flex flex-column\"\n >\n <div>\n <span class=\"text-caption\">{{ t('common.damImage.author.conflicts') }}</span>\n </div>\n <div>\n <AuthorRemoteAutocompleteCachedAuthorChipConflicts\n v-for=\"authorId in authorConflicts\"\n :id=\"authorId\"\n :key=\"authorId\"\n class=\"mr-1 mt-1\"\n @add-author=\"addAuthor(authorId)\"\n />\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.a-authors-append-item {\n position: sticky;\n bottom: 0;\n background-color: white;\n transform: translateY(8px);\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed, shallowRef, watch } from 'vue'\nimport type { DocId } from '@/types/common'\nimport { useDamCachedKeywords } from '@/components/damImage/uploadQueue/keyword/cachedKeywords'\nimport { useUploadQueuesStore } from '@/components/damImage/uploadQueue/composables/uploadQueuesStore'\nimport type { CachedItem } from '@/composables/system/defineCached'\nimport type { DamKeywordMinimal } from '@/components/damImage/uploadQueue/keyword/DamKeyword'\nimport { isNull, isUndefined } from '@/utils/common'\n\nconst props = withDefaults(\n defineProps<{\n id: null | DocId | undefined\n title?: string\n queueId?: string | undefined\n forceRounded?: boolean\n textOnly?: boolean\n size?: string\n containerClass?: undefined | string\n }>(),\n {\n queueId: undefined,\n title: '',\n forceRounded: false,\n textOnly: false,\n size: 'small',\n containerClass: 'd-inline-flex',\n }\n)\n\nconst { getCachedKeyword } = useDamCachedKeywords()\nconst uploadQueuesStore = useUploadQueuesStore()\n\nconst cached = shallowRef<undefined | CachedItem<DamKeywordMinimal>>(undefined)\nconst loaded = shallowRef<boolean>(false)\n\nconst item = computed(() => {\n return getCachedKeyword(props.id)\n})\n\nconst displayNewIcon = computed(() => {\n if (!props.queueId) return undefined\n const queue = uploadQueuesStore.getQueue(props.queueId)\n if (!queue || !cached.value) return undefined\n if (queue.suggestions.newKeywordNames.has(cached.value.name)) return 'mdi-new-box'\n return undefined\n})\n\nconst displayTitle = computed(() => {\n if (props.title.length > 0) return props.title\n if (cached.value) {\n return cached.value.name\n }\n return ''\n})\n\nwatch(\n item,\n async (newValue) => {\n if (loaded.value) return\n if (isUndefined(newValue) || newValue._loaded === false) return\n cached.value = newValue\n loaded.value = true\n },\n { immediate: true }\n)\n</script>\n\n<template>\n <div :class=\"containerClass\">\n <template v-if=\"isNull(id) || isUndefined(id)\">\n <slot name=\"empty\">\n -\n </slot>\n </template>\n <div v-else-if=\"textOnly\">\n {{ displayTitle }}\n <VProgressCircular\n v-if=\"!loaded && title.length === 0\"\n :size=\"12\"\n :width=\"2\"\n indeterminate\n class=\"mx-1\"\n />\n </div>\n <VChip\n v-else\n :size=\"size\"\n :append-icon=\"displayNewIcon\"\n :label=\"forceRounded ? undefined : true\"\n >\n {{ displayTitle }}\n <VProgressCircular\n v-if=\"!loaded && title.length === 0\"\n :size=\"12\"\n :width=\"2\"\n indeterminate\n class=\"mx-1\"\n />\n </VChip>\n </div>\n</template>\n","import type { DamKeyword } from '@/components/damImage/uploadQueue/keyword/DamKeyword'\nimport { dateTimeNow } from '@/utils/datetime'\nimport { ENTITY } from '@/components/damImage/uploadQueue/api/keywordApi'\nimport { SYSTEM_CORE_DAM } from '@/components/damImage/uploadQueue/api/damAssetApi'\n\nexport function useDamKeywordFactory() {\n const createDefault = (extSystemId: number, reviewed?: boolean): DamKeyword => {\n return {\n id: '',\n name: '',\n extSystem: extSystemId,\n flags: {\n reviewed: reviewed ?? false,\n },\n createdAt: dateTimeNow(),\n modifiedAt: dateTimeNow(),\n createdBy: 1,\n modifiedBy: 1,\n _resourceName: ENTITY,\n _system: SYSTEM_CORE_DAM,\n }\n }\n\n return {\n createDefault,\n }\n}\n","<script lang=\"ts\" setup>\nimport type { DocId, IntegerId } from '@/types/common'\nimport type { ValidationScope } from '@/types/Validation'\nimport { computed, provide, ref } from 'vue'\nimport { useValidate } from '@/validators/vuelidate/useValidate'\nimport useVuelidate from '@vuelidate/core'\nimport { useKeywordSelectActions } from '@/components/damImage/uploadQueue/keyword/keywordActions'\nimport {\n useCachedKeywordsForRemoteAutocomplete,\n useDamCachedKeywords,\n} from '@/components/damImage/uploadQueue/keyword/cachedKeywords'\nimport type { DamKeyword } from '@/components/damImage/uploadQueue/keyword/DamKeyword'\nimport { isArray, isUndefined } from '@/utils/common'\nimport AFormRemoteAutocompleteWithCached from '@/labs/form/AFormRemoteAutocompleteWithCached.vue'\nimport KeywordRemoteAutocompleteCachedKeywordChip from '@/components/damImage/uploadQueue/keyword/KeywordRemoteAutocompleteCachedKeywordChip.vue'\nimport { createKeyword } from '@/components/damImage/uploadQueue/api/keywordApi'\nimport { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport { useAlerts } from '@/composables/system/alerts'\nimport { useDamKeywordFactory } from '@/components/damImage/uploadQueue/keyword/KeywordFactory'\nimport { useDamConfigState } from '@/components/damImage/uploadQueue/composables/damConfigState'\nimport ARow from '@/components/ARow.vue'\nimport { useKeywordInnerFilter } from '@/components/damImage/uploadQueue/keyword/KeywordFilter'\nimport { FilterInnerConfigKey, FilterInnerDataKey } from '@/labs/filters/filterInjectionKeys'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: DocId | null | DocId[] | any\n extSystem: IntegerId\n queueId?: string | undefined\n label?: string | undefined\n required?: boolean | null\n disabled?: boolean | undefined\n multiple?: boolean\n clearable?: boolean\n dataCy?: string\n validationScope?: ValidationScope\n }>(),\n {\n label: undefined,\n queueId: undefined,\n required: null,\n disabled: undefined,\n multiple: false,\n clearable: false,\n dataCy: undefined,\n validationScope: undefined,\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: DocId | null | DocId[]): void\n}>()\n\nconst modelValueComputed = computed({\n get() {\n return props.modelValue\n },\n set(newValue) {\n emit('update:modelValue', [...newValue])\n },\n})\n\nconst search = ref<string>('')\nconst loadingLocal = ref(false)\nconst fetchedItemsMinimal = ref<Map<IntegerId | DocId, any>>(new Map())\n\nconst requiredComputed = computed(() => !!props.required)\n\nconst { requiredIf } = useValidate()\n\nconst rules = {\n modelValueComputed: {\n required: requiredIf(requiredComputed),\n },\n}\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst v$ = useVuelidate(rules, { modelValueComputed }, { $scope: props.validationScope })\n\nconst { damClient } = useCommonAdminCoreDamOptions()\nconst { getDamConfigExtSystem } = useDamConfigState()\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst configExtSystem = getDamConfigExtSystem(props.extSystem)\nif (isUndefined(configExtSystem)) {\n throw new Error('KeywordRemoteAutocompleteWithCached: Ext system must be initialised.')\n}\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { fetchItemsMinimal } = useKeywordSelectActions(props.extSystem)\n\nconst { filterData, filterConfig } = useKeywordInnerFilter()\nprovide(FilterInnerConfigKey, filterConfig)\nprovide(FilterInnerDataKey, filterData)\n\nconst addNewKeywordText = ref('')\n\nconst searchChange = (newValue: string) => {\n if (newValue.length > 0) addNewKeywordText.value = removeLastComma(newValue)\n}\n\nconst { addManualToCachedKeywords } = useDamCachedKeywords()\n\nconst afterCreate = (keyword: DamKeyword) => {\n addManualToCachedKeywords(keyword)\n if (isArray(modelValueComputed.value)) {\n modelValueComputed.value = [...modelValueComputed.value, keyword.id]\n search.value = ''\n return\n }\n modelValueComputed.value = keyword.id\n search.value = ''\n}\n\nconst itemSlotIsSelected = (item: DocId) => {\n if (isArray(modelValueComputed.value)) {\n return modelValueComputed.value.includes(item)\n } else if (modelValueComputed.value) {\n return modelValueComputed.value === item\n }\n return false\n}\n\nconst { showErrorsDefault } = useAlerts()\nconst { createDefault } = useDamKeywordFactory()\n\nconst createOrSelectKeyword = async (name: string) => {\n const keywordCreate = createDefault(props.extSystem, true)\n keywordCreate.name = removeLastComma(name)\n if (keywordCreate.name.length < 2) return\n try {\n const keywordRes = await createKeyword(damClient, keywordCreate)\n afterCreate(keywordRes)\n } catch (error) {\n showErrorsDefault(error)\n }\n}\n\nconst removeLastComma = (value: string) => {\n if (value.endsWith(',')) return value.slice(0, -1)\n return value\n}\n\nconst onEnterKeyup = () => {\n const value = removeLastComma(search.value)\n createOrSelectKeyword(value)\n}\n\nconst onCommaKeyup = () => {\n const value = removeLastComma(search.value)\n createOrSelectKeyword(value)\n}\n\nconst showAdd = computed(() => {\n if (loadingLocal.value) return false\n if (search.value.length < 2 || search.value.length > 255) return false\n if (fetchedItemsMinimal.value.size === 0) return true\n return ![...fetchedItemsMinimal.value.values()].some(\n (item) => item.name?.toLowerCase() === search.value!.toLowerCase()\n )\n})\n</script>\n\n<template>\n <div class=\"d-flex\">\n <ARow\n v-if=\"disabled && multiple\"\n :title=\"label\"\n >\n <KeywordRemoteAutocompleteCachedKeywordChip\n v-for=\"id in modelValueComputed\"\n :id=\"id\"\n :key=\"id\"\n :queue-id=\"queueId\"\n force-rounded\n class=\"mr-1 mb-1\"\n />\n </ARow>\n <ARow\n v-else-if=\"disabled && !multiple\"\n :title=\"label\"\n >\n <KeywordRemoteAutocompleteCachedKeywordChip\n :id=\"modelValueComputed\"\n :key=\"modelValueComputed\"\n :queue-id=\"queueId\"\n force-rounded\n />\n </ARow>\n <AFormRemoteAutocompleteWithCached\n v-else\n v-model=\"modelValueComputed\"\n v-model:search=\"search\"\n v-model:loading-local=\"loadingLocal\"\n v-model:fetched-items-minimal=\"fetchedItemsMinimal\"\n :use-cached=\"useCachedKeywordsForRemoteAutocomplete\"\n :v=\"v$\"\n :required=\"requiredComputed\"\n :label=\"label\"\n :fetch-items-minimal=\"fetchItemsMinimal\"\n :multiple=\"multiple\"\n :clearable=\"clearable\"\n filter-by-field=\"text\"\n :filter-sort-by=\"null\"\n item-title=\"name\"\n item-value=\"id\"\n :data-cy=\"dataCy\"\n :min-search-chars=\"2\"\n min-search-text=\"common.damImage.keyword.filterMinChars\"\n @search-change=\"searchChange\"\n @keyup.enter=\"onEnterKeyup\"\n @keyup.,=\"onCommaKeyup\"\n >\n <template #item=\"{ props: itemSlotProps, item: itemSlotItem }\">\n <VListItem\n v-bind=\"itemSlotProps\"\n @click.prevent=\"\"\n >\n <template\n v-if=\"multiple\"\n #prepend\n >\n <VCheckboxBtn\n :model-value=\"itemSlotIsSelected(itemSlotItem.value)\"\n :ripple=\"false\"\n />\n </template>\n <template #title>\n <KeywordRemoteAutocompleteCachedKeywordChip\n :id=\"itemSlotItem.value\"\n :key=\"itemSlotItem.value\"\n :queue-id=\"queueId\"\n :title=\"itemSlotItem.title\"\n text-only\n />\n </template>\n </VListItem>\n </template>\n <template #chip=\"{ item: chipSlotItem }\">\n <KeywordRemoteAutocompleteCachedKeywordChip\n :id=\"chipSlotItem.value\"\n :key=\"chipSlotItem.value\"\n :queue-id=\"queueId\"\n :title=\"chipSlotItem.title\"\n force-rounded\n />\n </template>\n <template #append-item>\n <VListItem\n v-if=\"showAdd\"\n class=\"a-keywords-append-item\"\n >\n <ABtnSecondary\n size=\"small\"\n :text=\"addNewKeywordText\"\n prepend-icon=\"mdi-plus-circle\"\n @click.stop=\"onCommaKeyup\"\n />\n </VListItem>\n </template>\n </AFormRemoteAutocompleteWithCached>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.a-keywords-append-item {\n position: sticky;\n bottom: 0;\n background-color: white;\n transform: translateY(8px);\n}\n</style>\n","import { computed } from 'vue'\nimport type { DamAssetTypeType } from '@/types/coreDam/Asset'\nimport { useDamConfigState } from '@/components/damImage/uploadQueue/composables/damConfigState'\nimport type { IntegerId } from '@/types/common'\nimport { isUndefined } from '@/utils/common'\n\nexport const useDamKeywordAssetTypeConfig = (assetType: DamAssetTypeType, extSystem: IntegerId) => {\n const { getDamConfigExtSystem } = useDamConfigState()\n\n const configExtSystem = getDamConfigExtSystem(extSystem)\n\n if (isUndefined(configExtSystem)) {\n throw new Error('useDamKeywordAssetTypeConfig: Ext system must be initialised.')\n }\n\n const keywordEnabled = computed(() => {\n return configExtSystem[assetType].keywords.enabled\n })\n\n const keywordRequired = computed(() => {\n return configExtSystem[assetType].keywords.required\n })\n\n return {\n keywordEnabled,\n keywordRequired,\n }\n}\n","import { computed } from 'vue'\nimport type { DamAssetTypeType } from '@/types/coreDam/Asset'\nimport { useDamConfigState } from '@/components/damImage/uploadQueue/composables/damConfigState'\nimport type { IntegerId } from '@/types/common'\nimport { isUndefined } from '@/utils/common'\n\nexport const useDamAuthorAssetTypeConfig = (assetType: DamAssetTypeType, extSystem: IntegerId) => {\n const { getDamConfigExtSystem } = useDamConfigState()\n const configExtSystem = getDamConfigExtSystem(extSystem)\n\n if (isUndefined(configExtSystem)) {\n throw new Error('useDamAuthorAssetTypeConfig: Ext system must be initialised.')\n }\n\n const authorEnabled = computed(() => {\n return configExtSystem[assetType].authors.enabled\n })\n\n const authorRequired = computed(() => {\n return configExtSystem[assetType].authors.required\n })\n\n return {\n authorEnabled,\n authorRequired,\n }\n}\n","<script lang=\"ts\" setup>\nimport type { IntegerId } from '@/types/common'\nimport type { AnzuUserMinimal } from '@/types/AnzuUser'\nimport { computed, shallowRef, watch } from 'vue'\nimport type { CollabCachedUsersMap } from '@/components/collab/composables/collabHelpers'\nimport { isNull, isUndefined } from '@/utils/common'\nimport { COMMON_CONFIG } from '@/model/commonConfig'\nimport AAnzuUserAvatar from '@/components/AAnzuUserAvatar.vue'\nimport { useRouter } from 'vue-router'\nimport { replaceUrlParameters } from '@/services/api/apiHelper'\n\nconst props = withDefaults(\n defineProps<{\n id: null | undefined | IntegerId\n routeName?: string | undefined\n externalUrlTemplate?: string | undefined\n cachedUsers?: CollabCachedUsersMap | undefined\n }>(),\n {\n routeName: undefined,\n externalUrlTemplate: undefined,\n cachedUsers: undefined,\n }\n)\n\nconst router = useRouter()\nconst cached = shallowRef<undefined | AnzuUserMinimal>(undefined)\nconst loaded = shallowRef<boolean>(false)\n\nconst item = computed(() => {\n if (props.id) {\n return props.cachedUsers?.get(props.id)\n }\n return undefined\n})\n\nconst text = computed(() => {\n if (cached.value) {\n return cached.value.person.fullName.length ? cached.value.person.fullName : cached.value.email.split('@')[0]\n }\n return ''\n})\n\nconst appendIcon = computed(() => {\n if (props.externalUrlTemplate) {\n return COMMON_CONFIG.CHIP.ICON.LINK\n }\n if (props.routeName) {\n return COMMON_CONFIG.CHIP.ICON.LINK_EXTERNAL\n }\n return undefined\n})\n\nconst onClick = () => {\n if (props.externalUrlTemplate && props.id) {\n const url = replaceUrlParameters(props.externalUrlTemplate, { id: props.id })\n window.open(url, '_blank')\n return\n }\n if (!props.routeName) return\n router.push({ name: props.routeName, params: { id: props.id } })\n}\n\nwatch(\n item,\n async (newValue) => {\n if (loaded.value) return\n if (isUndefined(newValue) || newValue._loaded === false) return\n cached.value = newValue\n loaded.value = true\n },\n { immediate: true }\n)\n</script>\n\n<template>\n <div\n v-if=\"isUndefined(cachedUsers)\"\n class=\"d-inline-flex\"\n />\n <div\n v-else\n class=\"d-inline-flex\"\n >\n <span v-if=\"isNull(id) || isUndefined(id)\">-</span>\n <VChip\n v-else\n class=\"pl-1\"\n :class=\"appendIcon ? '' : 'non-clickable'\"\n size=\"small\"\n :append-icon=\"appendIcon\"\n @click.stop=\"onClick\"\n >\n <AAnzuUserAvatar\n v-if=\"loaded\"\n :user=\"cached ?? undefined\"\n container-class=\"mr-1\"\n :size=\"20\"\n />\n {{ text }}\n <VProgressCircular\n v-if=\"!loaded\"\n :size=\"12\"\n :width=\"2\"\n indeterminate\n class=\"ml-1\"\n />\n </VChip>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.non-clickable {\n cursor: default;\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport { computed, ref } from 'vue'\nimport { DamAssetType, DamAssetTypeDefault } from '@/types/coreDam/Asset'\nimport { type AssetFile, assetFileIsImageFile } from '@/types/coreDam/AssetFile'\nimport { useAssetDetailStore } from '@/components/damImage/uploadQueue/composables/assetDetailStore'\nimport { storeToRefs } from 'pinia'\nimport AssetCustomMetadataForm from '@/components/damImage/uploadQueue/components/AssetCustomMetadataForm.vue'\nimport ACopyText from '@/components/ACopyText.vue'\nimport { prettyBytes } from '@/utils/file'\nimport AssetMetadataImageAttributes from '@/components/damImage/uploadQueue/components/AssetMetadataImageAttributes.vue'\nimport ASystemEntityScope from '@/components/form/ASystemEntityScope.vue'\nimport { dateTimePretty } from '@/utils/datetime'\nimport { ADamAssetMetadataValidationScopeSymbol } from '@/components/damImage/uploadQueue/composables/uploadValidations'\nimport AuthorRemoteAutocompleteWithCached from '@/components/damImage/uploadQueue/author/AuthorRemoteAutocompleteWithCached.vue'\nimport KeywordRemoteAutocompleteWithCached from '@/components/damImage/uploadQueue/keyword/KeywordRemoteAutocompleteWithCached.vue'\nimport { useDamKeywordAssetTypeConfig } from '@/components/damImage/uploadQueue/keyword/damKeywordConfig'\nimport { useDamAuthorAssetTypeConfig } from '@/components/damImage/uploadQueue/author/damAuthorConfig'\nimport type { IntegerId } from '@/types/common'\nimport ABooleanValue from '@/components/ABooleanValue.vue'\nimport ARow from '@/components/ARow.vue'\nimport ACachedUserChip from '@/components/ACachedUserChip.vue'\nimport { useDamCachedUsers } from '@/components/damImage/uploadQueue/author/cachedUsers'\n\nconst props = withDefaults(\n defineProps<{\n extSystem: IntegerId\n readonly?: boolean\n }>(),\n {\n readonly: false,\n }\n)\n\nconst { t } = useI18n()\n\nconst panels = ref(['metadata', 'file'])\n\nconst assetDetailStore = useAssetDetailStore()\nconst { asset, authorConflicts, metadataAreTouched, mainFileSingleUse } = storeToRefs(assetDetailStore)\n\nconst assetType = computed(() => {\n return asset.value?.attributes.assetType || DamAssetTypeDefault\n})\n\nconst isTypeImage = computed(() => {\n return assetType.value === DamAssetType.Image\n})\n\nconst assetMainFile = computed<null | AssetFile>(() => {\n return asset.value && asset.value.mainFile ? (asset.value.mainFile as AssetFile) : null\n})\n\nconst onAnyMetadataChange = () => {\n metadataAreTouched.value = true\n}\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss,vue/no-ref-object-reactivity-loss\nconst { keywordRequired, keywordEnabled } = useDamKeywordAssetTypeConfig(assetType.value, props.extSystem)\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss,vue/no-ref-object-reactivity-loss\nconst { authorRequired, authorEnabled } = useDamAuthorAssetTypeConfig(assetType.value, props.extSystem)\n\nconst { cachedUsers } = useDamCachedUsers()\n</script>\n\n<template>\n <VExpansionPanels\n v-if=\"asset\"\n v-model=\"panels\"\n multiple\n class=\"v-expansion-panels--compact\"\n >\n <VExpansionPanel\n elevation=\"0\"\n :title=\"t('common.damImage.asset.detail.info.metadata')\"\n value=\"metadata\"\n >\n <VExpansionPanelText>\n <AssetCustomMetadataForm\n v-if=\"asset\"\n v-model=\"asset.metadata.customData\"\n :ext-system=\"extSystem\"\n :asset-type=\"assetType\"\n :readonly=\"readonly\"\n @any-change=\"onAnyMetadataChange\"\n >\n <template #after-pinned>\n <VRow\n v-if=\"keywordEnabled\"\n dense\n class=\"my-2\"\n >\n <VCol>\n <ASystemEntityScope\n subject=\"keyword\"\n system=\"dam\"\n >\n <KeywordRemoteAutocompleteWithCached\n v-model=\"asset.keywords\"\n :ext-system=\"extSystem\"\n :label=\"t('common.damImage.asset.model.keywords')\"\n data-cy=\"custom-field-keywords\"\n clearable\n multiple\n :disabled=\"readonly\"\n :required=\"keywordRequired\"\n :validation-scope=\"ADamAssetMetadataValidationScopeSymbol\"\n @update:model-value=\"onAnyMetadataChange\"\n />\n </ASystemEntityScope>\n </VCol>\n </VRow>\n <VRow\n v-if=\"authorEnabled\"\n dense\n class=\"my-2\"\n >\n <VCol>\n <ASystemEntityScope\n subject=\"author\"\n system=\"dam\"\n >\n <AuthorRemoteAutocompleteWithCached\n v-model=\"asset.authors\"\n :ext-system=\"extSystem\"\n :label=\"t('common.damImage.asset.model.authors')\"\n :author-conflicts=\"authorConflicts\"\n data-cy=\"custom-field-authors\"\n clearable\n multiple\n :disabled=\"readonly\"\n :required=\"authorRequired\"\n :validation-scope=\"ADamAssetMetadataValidationScopeSymbol\"\n @update:model-value=\"onAnyMetadataChange\"\n />\n </ASystemEntityScope>\n </VCol>\n </VRow>\n <VRow\n dense\n class=\"my-2\"\n >\n <VCol>\n <ARow\n v-if=\"readonly\"\n :title=\"t('common.damImage.asset.model.mainFileSingleUse')\"\n >\n <ABooleanValue :value=\"mainFileSingleUse\" />\n </ARow>\n <VSwitch\n v-else\n v-model=\"mainFileSingleUse\"\n :label=\"t('common.damImage.asset.model.mainFileSingleUse')\"\n />\n </VCol>\n </VRow>\n </template>\n </AssetCustomMetadataForm>\n </VExpansionPanelText>\n </VExpansionPanel>\n <VExpansionPanel\n elevation=\"0\"\n :title=\"t('common.damImage.asset.detail.info.file')\"\n value=\"file\"\n >\n <VExpansionPanelText\n class=\"text-caption\"\n style=\"overflow-wrap: normal\"\n >\n <!-- all types -->\n <VRow>\n <VCol cols=\"3\">\n {{ t('common.damImage.asset.detail.info.field.id') }}\n </VCol>\n <VCol cols=\"9\">\n <ACopyText :value=\"asset.id\" />\n </VCol>\n </VRow>\n <VRow>\n <VCol cols=\"3\">\n {{ t('common.damImage.asset.detail.info.field.type') }}\n </VCol>\n <VCol cols=\"9\">\n {{ asset.attributes.assetType }}\n </VCol>\n </VRow>\n <VRow>\n <VCol cols=\"3\">\n {{ t('common.model.tracking.created') }}\n </VCol>\n <VCol cols=\"9\">\n {{ dateTimePretty(asset.createdAt) }}<br>\n <ACachedUserChip\n :id=\"asset.createdBy\"\n :cached-users=\"cachedUsers\"\n />\n </VCol>\n </VRow>\n <VRow>\n <VCol cols=\"3\">\n {{ t('common.model.tracking.modified') }}\n </VCol>\n <VCol cols=\"9\">\n {{ dateTimePretty(asset.modifiedAt) }}<br>\n <ACachedUserChip\n :id=\"asset.modifiedBy\"\n :cached-users=\"cachedUsers\"\n />\n </VCol>\n </VRow>\n <div v-if=\"assetMainFile\">\n <VRow>\n <VCol cols=\"3\">\n {{ t('common.damImage.asset.detail.info.field.mainFileId') }}\n </VCol>\n <VCol cols=\"9\">\n <ACopyText :value=\"assetMainFile.id\" />\n </VCol>\n </VRow>\n <VRow>\n <VCol cols=\"3\">\n {{ t('common.damImage.asset.detail.info.field.mimeType') }}\n </VCol>\n <VCol cols=\"9\">\n {{ assetMainFile.fileAttributes.mimeType }}\n </VCol>\n </VRow>\n <VRow>\n <VCol cols=\"3\">\n {{ t('common.damImage.asset.detail.info.field.size') }}\n </VCol>\n <VCol cols=\"9\">\n {{ prettyBytes(assetMainFile.fileAttributes.size) }}\n </VCol>\n </VRow>\n <AssetMetadataImageAttributes\n v-if=\"isTypeImage && assetFileIsImageFile(assetMainFile)\"\n :file=\"assetMainFile\"\n />\n </div>\n </VExpansionPanelText>\n </VExpansionPanel>\n </VExpansionPanels>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, onMounted, onUnmounted, ref, shallowRef, watch, withModifiers } from 'vue'\nimport ADialogToolbar from '@/components/ADialogToolbar.vue'\nimport { useI18n } from 'vue-i18n'\nimport { type AssetDetailItemDto, DamAssetType, type DamAssetTypeType } from '@/types/coreDam/Asset'\nimport { useAssetSelectActions } from '@/components/dam/assetSelect/composables/assetSelectListActions'\nimport AssetSelectListTable from '@/components/dam/assetSelect/components/AssetSelectListTable.vue'\nimport AssetSelectListBar from '@/components/dam/assetSelect/components/AssetSelectListBar.vue'\nimport { AssetSelectGridView, useGridView } from '@/components/dam/assetSelect/composables/assetSelectGridView'\nimport AssetSelectListTiles from '@/components/dam/assetSelect/components/AssetSelectListTiles.vue'\nimport { useSidebar } from '@/components/dam/assetSelect/composables/assetSelectFilterSidebar'\nimport AssetSelectFilter from '@/components/dam/assetSelect/components/filter/AssetSelectFilter.vue'\nimport {\n type AssetSelectReturnData,\n AssetSelectReturnType,\n type AssetSelectReturnTypeType,\n} from '@/types/coreDam/AssetSelect'\nimport { filterAllowedImageWidgetSelectConfigs } from '@/components/damImage/composables/damFilterUserAllowedUploadConfigs'\nimport { useAlerts } from '@/composables/system/alerts'\nimport type { IntegerId } from '@/types/common'\nimport { useDamConfigState } from '@/components/damImage/uploadQueue/composables/damConfigState'\nimport type { DamConfigLicenceExtSystemReturnType } from '@/types/coreDam/DamConfig'\nimport { cloneDeep, isUndefined } from '@/utils/common'\nimport AssetMetadata from '@/components/damImage/uploadQueue/components/AssetMetadata.vue'\nimport { useAssetSelectStore } from '@/services/stores/coreDam/assetSelectStore'\nimport { storeToRefs } from 'pinia'\nimport { useAssetDetailStore } from '@/components/damImage/uploadQueue/composables/assetDetailStore'\nimport { type DatatableOrderingOption } from '@/composables/system/datatableColumns'\n\nconst props = withDefaults(\n defineProps<{\n assetType: DamAssetTypeType\n inPodcast?: boolean | null\n minCount: number\n maxCount: number\n selectLicences: IntegerId[]\n uploadLicence?: IntegerId | undefined\n returnType?: AssetSelectReturnTypeType\n configName?: string\n skipCurrentUserCheck?: boolean\n onDetailLoadedCallback?: ((asset: AssetDetailItemDto) => void) | undefined\n }>(),\n {\n inPodcast: null,\n uploadLicence: undefined,\n returnType: AssetSelectReturnType.MainFileId,\n configName: 'default',\n skipCurrentUserCheck: false,\n onDetailLoadedCallback: undefined,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'onConfirm', data: AssetSelectReturnData): void\n}>()\n\nconst modelValue = defineModel<boolean>({ default: false, required: false })\nconst sortModel = defineModel<number>('sort', { default: 1, required: false })\nconst ready = defineModel<boolean>('ready', { default: false, required: false })\n\nconst loading = ref(false)\nconst copyToLicence = ref(false)\n\nconst { t } = useI18n()\n\nconst {\n damClient,\n selectedCount,\n loader,\n pagination,\n fetchNextPage,\n getSelectedData,\n initStoreContext,\n detailLoading,\n fetchAssetListDebounced,\n reset,\n // eslint-disable-next-line vue/no-setup-props-reactivity-loss\n} = useAssetSelectActions('default', props.onDetailLoadedCallback)\n\nconst { loadDamConfigAssetCustomFormElements, getDamConfigAssetCustomFormElements } = useDamConfigState(damClient)\n\nconst { getOrLoadDamConfigExtSystemByLicences } = useDamConfigState(damClient)\nconst assetDetailStore = useAssetDetailStore()\nconst { asset } = storeToRefs(assetDetailStore)\nconst assetSelectStore = useAssetSelectStore()\nconst { selectedLicenceId } = storeToRefs(assetSelectStore)\n\nconst selectConfigs = shallowRef<DamConfigLicenceExtSystemReturnType[]>([])\n\nconst { openSidebarLeft, sidebarLeft, sidebarRight } = useSidebar()\nconst { showErrorT } = useAlerts()\n\nconst onOpen = () => {\n if (!ready.value) return\n let selectConfigLocal = cloneDeep(selectConfigs.value)\n if (!props.skipCurrentUserCheck) {\n selectConfigLocal = filterAllowedImageWidgetSelectConfigs(selectConfigs.value)\n }\n if (selectConfigLocal.length === 0) {\n showErrorT('common.assetSelect.error.unallowedLicence')\n return\n }\n\n reset()\n initStoreContext(\n selectConfigLocal,\n props.assetType,\n props.inPodcast,\n 1 === props.minCount && props.minCount === props.maxCount,\n props.minCount,\n props.maxCount\n )\n openSidebarLeft()\n modelValue.value = true\n}\n\nwatch(\n modelValue,\n async (newValue, oldValue) => {\n if (newValue === oldValue || !newValue) return\n onOpen()\n },\n { immediate: true }\n)\n\nconst onClose = () => {\n modelValue.value = false\n reset()\n}\n\nconst getCopyToLicenceId = () => {\n if (copyToLicence.value && props.uploadLicence) {\n return props.uploadLicence\n }\n return undefined\n}\n\nconst onConfirm = () => {\n emit('onConfirm', getSelectedData(props.returnType, getCopyToLicenceId()))\n onClose()\n}\n\nconst autoloadOnIntersect = (isIntersecting: boolean) => {\n if (isIntersecting && pagination.value.hasNextPage === true) {\n fetchNextPage()\n }\n}\n\nconst { gridView } = useGridView()\n\nconst showCopyToLicence = computed(() => {\n return (\n props.assetType === DamAssetType.Image &&\n selectedLicenceId.value > 0 &&\n !isUndefined(props.uploadLicence) &&\n selectedLicenceId.value !== props.uploadLicence\n )\n})\n\nconst componentComputed = computed(() => {\n switch (gridView.value) {\n case AssetSelectGridView.Table:\n return AssetSelectListTable\n default:\n case AssetSelectGridView.Masonry:\n case AssetSelectGridView.Thumbnail:\n return AssetSelectListTiles\n }\n})\n\nconst disabledSubmit = computed(() => {\n return selectedCount.value < props.minCount || selectedCount.value > props.maxCount\n})\n\nconst extId = computed(() => {\n if (selectConfigs.value.length === 0) return undefined\n if (selectedLicenceId.value > 0) {\n const found = selectConfigs.value.find((config) => config.licence === selectedLicenceId.value)\n if (found) return found.extSystem\n }\n return undefined\n})\n\nconst loadingSidebarRight = computed(() => {\n return customFormConfigLoading.value || detailLoading.value\n})\n\nconst { showErrorsDefault } = useAlerts()\nconst customFormConfigLoading = ref(true)\n\nconst sortByChange = (option: DatatableOrderingOption) => {\n pagination.value.sortBy = null\n if (option.sortBy) {\n pagination.value.sortBy = { key: option.sortBy.key, order: option.sortBy.order }\n }\n fetchAssetListDebounced()\n}\n\nwatch(\n extId,\n async (newValue) => {\n if (isUndefined(newValue)) return\n customFormConfigLoading.value = true\n const configAssetCustomFormElements = getDamConfigAssetCustomFormElements(newValue)\n if (isUndefined(configAssetCustomFormElements)) {\n try {\n await loadDamConfigAssetCustomFormElements(newValue)\n customFormConfigLoading.value = false\n } catch (e) {\n showErrorsDefault(e)\n }\n } else {\n customFormConfigLoading.value = false\n }\n },\n { immediate: true }\n)\n\nonMounted(async () => {\n ready.value = false\n loading.value = true\n selectConfigs.value = await getOrLoadDamConfigExtSystemByLicences(props.selectLicences)\n loading.value = false\n ready.value = true\n})\n\nonUnmounted(() => {\n selectConfigs.value = []\n})\n\ndefineExpose({\n open: onOpen,\n})\n</script>\n\n<template>\n <div\n v-if=\"loading\"\n class=\"w-100 d-flex align-center justify-center\"\n >\n <VProgressCircular indeterminate />\n </div>\n <template v-else-if=\"selectConfigs.length > 0\">\n <slot\n name=\"activator\"\n :props=\"{ onClick: withModifiers(() => onOpen(), ['stop']) }\"\n />\n <VDialog\n v-model=\"modelValue\"\n fullscreen\n class=\"subject-select\"\n >\n <VCard\n v-if=\"modelValue\"\n class=\"subject-select__card\"\n >\n <ADialogToolbar\n class=\"subject-select__toolbar system-border-b\"\n @on-cancel=\"onClose\"\n >\n <slot name=\"title\">\n {{ t('common.assetSelect.meta.texts.title') }}\n </slot>\n </ADialogToolbar>\n <AssetSelectListBar\n v-model:sort=\"sortModel\"\n @sort-by-change=\"sortByChange\"\n />\n <div\n class=\"subject-select__main\"\n :class=\"{\n 'subject-select__main--sidebar-active': sidebarLeft,\n 'subject-select__main--sidebar-right-active': sidebarRight,\n }\"\n >\n <div class=\"subject-select__sidebar system-border-r\">\n <AssetSelectFilter />\n </div>\n <div class=\"subject-select__content\">\n <component\n :is=\"componentComputed\"\n v-if=\"extId\"\n :ext-system=\"extId\"\n />\n <div class=\"d-flex w-100 align-center justify-center pa-4\">\n <ABtnSecondary\n v-show=\"pagination.hasNextPage || loader\"\n v-intersect=\"autoloadOnIntersect\"\n :loading=\"loader\"\n size=\"small\"\n @click=\"fetchNextPage\"\n >\n <slot name=\"button-confirm-title\">\n {{ t('common.button.loadMore') }}\n </slot>\n </ABtnSecondary>\n </div>\n </div>\n <div class=\"subject-select__sidebar-right system-border-l\">\n <div\n v-if=\"loadingSidebarRight\"\n class=\"d-flex w-100 align-center justify-center\"\n >\n <VProgressCircular indeterminate />\n </div>\n <div\n v-else-if=\"!asset\"\n class=\"d-flex w-100 align-center justify-center\"\n >\n {{ t('common.assetSelect.meta.info.noAssetSelected') }}\n </div>\n <div v-else>\n <AssetMetadata\n v-if=\"extId && !customFormConfigLoading\"\n :ext-system=\"extId\"\n readonly\n />\n </div>\n </div>\n </div>\n <div class=\"subject-select__actions system-border-t\">\n <div v-if=\"props.minCount === props.maxCount\">\n {{ t('common.assetSelect.meta.texts.pickExactCount', { count: props.minCount, selected: selectedCount }) }}\n </div>\n <div v-else>\n {{\n t('common.assetSelect.meta.texts.pickRangeCount', {\n minCount: props.minCount,\n maxCount: props.maxCount,\n selected: selectedCount,\n })\n }}\n </div>\n <VSpacer />\n <VSwitch\n v-if=\"showCopyToLicence\"\n v-model=\"copyToLicence\"\n :label=\"t('common.assetSelect.meta.texts.copyToLicence')\"\n hide-details\n class=\"mr-2\"\n />\n <ABtnPrimary\n :disabled=\"disabledSubmit\"\n @click.stop=\"onConfirm\"\n >\n <slot name=\"button-confirm-title\">\n {{ t('common.button.confirm') }}\n </slot>\n </ABtnPrimary>\n </div>\n </VCard>\n </VDialog>\n </template>\n <div v-else>\n Error, no select licence.\n </div>\n</template>\n","import { type InjectionKey, nextTick, type Ref, ref } from 'vue'\nimport type { UseSortableReturn } from '@vueuse/integrations/useSortable'\nimport type { SortableItemNewPositions, SortableItemWithParentDataAware } from '@/components/sortable/sortableUtils'\nimport { useAlerts } from '@/composables/system/alerts'\nimport { generateUUIDv1 } from '@/utils/generator'\nimport { cloneDeep, isNull, isUndefined } from '@/utils/common'\nimport type { DocId, IntegerId } from '@/types/common'\n\nexport const NESTED_HANDLE_CLASS = 'a-sortable-nested-widget__handle'\nexport const NESTED_GHOST_CLASS = 'a-sortable-nested-widget__ghost'\nexport const NESTED_DRAG_CLASS = 'a-sortable-nested-widget__drag'\nexport const NESTED_CHOSEN_CLASS = 'a-sortable-nested-widget__chosen'\nexport const NESTED_GROUP_CLASS = 'a-sortable-nested-widget__group'\nexport const SortableLevel: InjectionKey<number> = Symbol.for('anzu:SortableLevel')\n\nexport interface SortableNestedItem<TData extends SortableItemWithParentDataAware = any> {\n data: TData\n children?: Array<SortableNestedItem> | undefined // if undefined, no nested allowed\n meta: {\n dirty: boolean\n }\n}\n\nexport interface SortableNested<TData extends SortableItemWithParentDataAware = any> {\n children: Array<SortableNestedItem<TData>>\n meta: {\n dirty: boolean\n }\n}\n\nexport interface SortableNestedEmit {\n (e: 'update:modelValue', data: SortableNested): void\n\n (e: 'onEnd', data: SortableItemNewPositions): void\n\n (e: 'onAddAfter', data: SortableNestedItem): void\n\n (e: 'onAddChild', data: SortableNestedItem): void\n\n (e: 'onAddLast', data: SortableNestedItem | null): void\n\n (e: 'onEdit', data: SortableNestedItem): void\n\n (e: 'onDelete', data: SortableNestedItem): void\n}\n\nexport function useSortableNestedActions(\n model: Readonly<Ref<SortableNested>>,\n initSortablesCallback: () => void,\n emit: SortableNestedEmit\n): {\n onRemoveDialogConfirm: () => void\n removeById: (id: DocId | IntegerId) => SortableItemNewPositions\n updateData: (\n id: DocId | IntegerId,\n data: any,\n children: Array<SortableNestedItem> | undefined | null,\n position: number | null,\n dirty?: boolean | null,\n parent?: DocId | IntegerId | null | undefined\n ) => void\n refresh: () => void\n destroy: () => void\n removeDialog: Ref<boolean>\n sortableInstances: Ref<Array<UseSortableReturn>>\n addChildToId: (targetId: DocId | IntegerId, data: any, childrenAllowed: boolean) => void\n addAfterId: (targetId: DocId | IntegerId | null, data: any, childrenAllowed: boolean) => SortableItemNewPositions\n forceRerender: Ref<number>\n dragging: Ref<boolean>\n widgetEl: Ref<HTMLElement | null>\n itemToRemove: Ref<SortableNestedItem | null>\n randomUuid: Ref<string>\n moveArrayElement: (\n currentId: DocId | IntegerId,\n targetId: DocId | IntegerId | null,\n newIndex: number,\n oldIndex: number,\n maxDepth: number\n ) => SortableItemNewPositions\n} {\n const { showWarningT } = useAlerts()\n\n const sortableInstances = ref<Array<UseSortableReturn>>([])\n const forceRerender = ref(0)\n const removeDialog = ref(false)\n const itemToRemove = ref<null | SortableNestedItem>(null)\n const dragging = ref(false)\n const widgetEl = ref<HTMLElement | null>(null)\n const randomUuid = ref<string>(generateUUIDv1())\n\n const forceRerenderWidgetHtml = (emitData: SortableNested | undefined = undefined) => {\n forceRerender.value++\n if (!isUndefined(emitData)) {\n emit('update:modelValue', emitData)\n }\n nextTick(() => {\n initSortablesCallback()\n })\n }\n\n const refresh = () => {\n destroy()\n initSortablesCallback()\n }\n\n const onRemoveDialogConfirm = () => {\n if (isNull(itemToRemove.value)) return\n emit('onDelete', itemToRemove.value)\n removeDialog.value = false\n }\n\n const destroy = () => {\n if (!widgetEl.value) return\n sortableInstances.value.forEach((item) => {\n item.stop()\n })\n sortableInstances.value = []\n }\n\n const touchDirty = (item: SortableNestedItem, nestedData: SortableNested) => {\n item.meta.dirty = true\n nestedData.meta.dirty = true\n }\n\n const updatePositionsSameParent = (\n items: SortableNestedItem[],\n oldIndex: number,\n newIndex: number,\n clonedData: SortableNested,\n updatedPositions: SortableItemNewPositions = []\n ) => {\n const start = oldIndex > newIndex ? newIndex : oldIndex\n let position = start + 1\n for (let i = start; i < items.length; i++) {\n if (items[i].data.position !== position) {\n items[i].data.position = position\n touchDirty(items[i], clonedData)\n updatedPositions.push({\n id: items[i].data.id,\n position: items[i].data.position,\n })\n }\n position++\n }\n }\n const updatePositionsDifferentParent = (\n itemsTarget: SortableNestedItem[],\n itemsSource: SortableNestedItem[],\n indexTarget: number,\n indexSource: number,\n clonedData: SortableNested,\n updatedPositions: SortableItemNewPositions = []\n ) => {\n if (itemsTarget.length > 0) {\n let position = indexTarget + 1\n for (let i = indexTarget; i < itemsTarget.length; i++) {\n if (itemsTarget[i].data.position !== position) {\n itemsTarget[i].data.position = position\n touchDirty(itemsTarget[i], clonedData)\n updatedPositions.push({\n id: itemsTarget[i].data.id,\n position: itemsTarget[i].data.position,\n })\n }\n position++\n }\n }\n if (itemsSource.length > 0) {\n let position = indexSource + 1\n for (let i = indexSource; i < itemsSource.length; i++) {\n if (itemsSource[i].data.position !== position) {\n itemsSource[i].data.position = position\n touchDirty(itemsSource[i], clonedData)\n updatedPositions.push({\n id: itemsSource[i].data.id,\n position: itemsSource[i].data.position,\n })\n }\n position++\n }\n }\n }\n\n const calculateParentDepth = (\n parent: DocId | IntegerId | null,\n items: Array<SortableNestedItem>,\n depth: number = 0\n ): number => {\n if (parent === null) return depth\n const parentItem = items.find((item) => item.data.id === parent)\n if (!parentItem) return depth\n depth++\n return calculateParentDepth(parentItem.data.parent, items, depth)\n }\n\n const calculateChildDepth = (children: Array<SortableNestedItem> | undefined, depth: number = 0): number => {\n let childDepth = depth\n if (children && children.length) {\n depth++\n for (const child of children) {\n const currentDepth = calculateChildDepth(child.children, depth)\n childDepth = Math.max(childDepth, currentDepth)\n }\n }\n return childDepth\n }\n\n /**\n * @return number - Max depth of array, root = 1\n */\n const calculateNodeMaxDepth = (\n item: SortableNestedItem,\n items: Array<SortableNestedItem>,\n depth: number = 1\n ): number => {\n const parentDepth = calculateParentDepth(item.data.parent, items)\n const childDepth = calculateChildDepth(item.children, depth)\n return parentDepth + childDepth\n }\n\n const findItemById = (\n id: DocId | IntegerId,\n arr: SortableNestedItem[],\n parent: SortableNestedItem | null = null\n ): { itemFound: SortableNestedItem | null; parentItem: SortableNestedItem | null } => {\n for (const item of arr) {\n if (item.data.id === id) {\n return {\n itemFound: item,\n parentItem: parent,\n }\n }\n if (item.children) {\n const foundInChildren = findItemById(id, item.children, item)\n if (foundInChildren.itemFound !== null) {\n return foundInChildren\n }\n }\n }\n\n return {\n itemFound: null,\n parentItem: null,\n }\n }\n\n // todo refactor\n const moveArrayElement = (\n currentId: DocId | IntegerId,\n targetId: DocId | IntegerId | null,\n newIndex: number,\n oldIndex: number,\n maxDepth: number\n ): SortableItemNewPositions => {\n const clonedData: SortableNested = cloneDeep(model.value)\n\n const { itemFound: itemToMove, parentItem: itemToMoveParentItem } = findItemById(currentId, clonedData.children)\n\n if (!itemToMove) {\n console.error('ASortableNested error.')\n return []\n }\n\n const returnData: SortableItemNewPositions = []\n\n // moving to root\n if (targetId === null) {\n if (isNull(itemToMoveParentItem) && newIndex === oldIndex) {\n // moving item from root to root, but same place, skip\n return []\n }\n if (isNull(itemToMoveParentItem)) {\n // moving item from root to root\n const idx = clonedData.children.indexOf(itemToMove)\n if (idx !== -1) {\n const element = clonedData.children.splice(idx, 1)[0]\n clonedData.children.splice(newIndex, 0, element)\n updatePositionsSameParent(clonedData.children, idx, newIndex, clonedData, returnData)\n forceRerenderWidgetHtml(clonedData)\n return []\n }\n console.error('ASortableNested error.')\n return []\n }\n if (!isNull(itemToMoveParentItem) && itemToMoveParentItem.children) {\n // moving from non-root to root\n const idx = itemToMoveParentItem.children.indexOf(itemToMove)\n if (idx !== -1) {\n itemToMove.data.parent = null\n const element = itemToMoveParentItem.children.splice(idx, 1)[0]\n clonedData.children.splice(newIndex, 0, element)\n updatePositionsDifferentParent(\n clonedData.children,\n itemToMoveParentItem.children,\n newIndex,\n idx,\n clonedData,\n returnData\n )\n forceRerenderWidgetHtml(clonedData)\n return []\n }\n console.error('ASortableNested error.')\n return []\n }\n console.error('ASortableNested error.')\n return []\n }\n // moving to specific array element\n const { itemFound: targetItem } = findItemById(targetId, clonedData.children)\n\n if (!targetItem || !targetItem.children) {\n // moving item to undefined children is not allowed by this implementation but allowed by sortablejs\n // so rerender is needed\n forceRerenderWidgetHtml()\n return []\n }\n\n if (!isNull(itemToMoveParentItem) && itemToMoveParentItem.data.id === targetItem.data.id && newIndex === oldIndex) {\n // moving item from/to same parent and same position, skip\n return []\n }\n\n if (itemToMoveParentItem && itemToMoveParentItem.children && targetItem.data.id === itemToMoveParentItem.data.id) {\n // moving item inside same parent\n const idx = itemToMoveParentItem.children.indexOf(itemToMove)\n if (idx !== -1) {\n const element = itemToMoveParentItem.children.splice(idx, 1)[0]\n targetItem.children.splice(newIndex, 0, element)\n updatePositionsSameParent(targetItem.children, idx, newIndex, clonedData, returnData)\n }\n } else if (\n itemToMoveParentItem &&\n itemToMoveParentItem.children &&\n targetItem.data.id !== itemToMoveParentItem.data.id\n ) {\n // moving item between two different parents\n const idx = itemToMoveParentItem.children.indexOf(itemToMove)\n if (idx !== -1) {\n itemToMove.data.parent = targetItem.data.id\n const element = itemToMoveParentItem.children.splice(idx, 1)[0]\n targetItem.children.splice(newIndex, 0, element)\n updatePositionsDifferentParent(\n targetItem.children,\n itemToMoveParentItem.children,\n newIndex,\n idx,\n clonedData,\n returnData\n )\n }\n } else {\n // moving from root to non-root\n const idx = clonedData.children.indexOf(itemToMove)\n if (idx !== -1) {\n itemToMove.data.parent = targetItem.data.id\n const element = clonedData.children.splice(idx, 1)[0]\n targetItem.children.splice(newIndex, 0, element)\n updatePositionsDifferentParent(targetItem.children, clonedData.children, newIndex, idx, clonedData, returnData)\n }\n }\n\n if (calculateNodeMaxDepth(targetItem, clonedData.children) > maxDepth) {\n showWarningT('common.sortable.error.maxDeepExceed')\n forceRerenderWidgetHtml()\n return []\n }\n forceRerenderWidgetHtml(clonedData)\n return returnData\n }\n\n const removeById = (id: DocId | IntegerId): SortableItemNewPositions => {\n const clonedData: SortableNested = cloneDeep(model.value)\n const { itemFound, parentItem } = findItemById(id, clonedData.children)\n if (!itemFound) {\n return []\n }\n\n const returnData: SortableItemNewPositions = []\n\n if (parentItem && parentItem.children) {\n const idx = parentItem.children.indexOf(itemFound)\n if (idx !== -1) {\n parentItem.children.splice(idx, 1)\n updatePositionsSameParent(parentItem.children, idx, idx, clonedData, returnData)\n }\n } else {\n const idx = clonedData.children.indexOf(itemFound)\n if (idx !== -1) {\n clonedData.children.splice(idx, 1)\n updatePositionsSameParent(clonedData.children, idx, idx, clonedData, returnData)\n }\n }\n\n forceRerenderWidgetHtml(clonedData)\n return returnData\n }\n\n /**\n * @param id - id of item\n * @param data - item data\n * @param children - item children, use null to skip update and keep original data\n * @param position - item position, use null to skip update and keep original data\n * @param dirty - item dirty, use null to skip update and keep original data\n * @param parent - item parent id, use undefined to skip update and keep original data\n */\n const updateData = (\n id: DocId | IntegerId,\n data: any,\n children: Array<SortableNestedItem> | undefined | null = null,\n position: number | null = null,\n dirty: null | boolean = null,\n parent: DocId | IntegerId | null | undefined = undefined\n ) => {\n const clonedData: SortableNested = cloneDeep(model.value)\n\n const { itemFound } = findItemById(id, clonedData.children)\n if (!itemFound) {\n return\n }\n itemFound.data = cloneDeep(data)\n if (!isNull(children)) itemFound.children = children\n if (!isNull(position)) itemFound.data.position = position\n if (!isNull(dirty)) itemFound.meta.dirty = dirty\n if (!isNull(dirty) && dirty === true) clonedData.meta.dirty = true\n if (!isUndefined(parent)) itemFound.data.parent = parent\n forceRerenderWidgetHtml(clonedData)\n }\n\n /**\n * @template targetId null value is when push as last item\n */\n const addAfterId = (\n targetId: DocId | IntegerId | null,\n data: any,\n childrenAllowed: boolean\n ): SortableItemNewPositions => {\n const clonedData: SortableNested = cloneDeep(model.value)\n\n const insertData: SortableNestedItem = {\n data: cloneDeep(data),\n children: childrenAllowed ? [] : undefined,\n meta: {\n dirty: false,\n },\n }\n\n if (isNull(targetId)) {\n clonedData.children.push(insertData)\n forceRerenderWidgetHtml(clonedData)\n return []\n }\n\n const { itemFound: targetItem, parentItem: targetItemParentItem } = findItemById(targetId, clonedData.children)\n\n if (!targetItem) {\n showWarningT('common.sortable.error.unableToAdd')\n return []\n }\n insertData.data.position = targetItem.data.position + 1\n insertData.data.parent = targetItem.data.parent\n\n const returnData: SortableItemNewPositions = []\n\n if (!isNull(targetItemParentItem) && targetItemParentItem.children) {\n const idx = targetItemParentItem.children.indexOf(targetItem) + 1\n if (idx !== -1) {\n targetItemParentItem.children.splice(idx, 0, insertData)\n updatePositionsSameParent(targetItemParentItem.children, idx, idx, clonedData, returnData)\n }\n } else {\n // insert to root\n const idx = clonedData.children.indexOf(targetItem) + 1\n if (idx !== -1) {\n clonedData.children.splice(idx, 0, insertData)\n updatePositionsSameParent(clonedData.children, idx, idx, clonedData, returnData)\n }\n }\n\n forceRerenderWidgetHtml(clonedData)\n return returnData\n }\n\n const addChildToId = (targetId: DocId | IntegerId, data: any, childrenAllowed: boolean) => {\n const clonedData: SortableNested = cloneDeep(model.value)\n\n const { itemFound: targetItem } = findItemById(targetId, clonedData.children)\n\n if (!targetItem) {\n showWarningT('common.sortable.error.unableToAdd')\n return\n }\n const insertData: SortableNestedItem = {\n data: cloneDeep(data),\n children: childrenAllowed ? [] : undefined,\n meta: {\n dirty: false,\n },\n }\n insertData.data.id = data.id\n insertData.data.position =\n targetItem.children && targetItem.children.length > 0 ? targetItem.children.length + 1 : 1\n insertData.data.parent = targetItem.data.id\n\n if (!isUndefined(targetItem.children) && targetItem.children.length === 0) {\n targetItem.children.push(insertData)\n forceRerenderWidgetHtml(clonedData)\n }\n }\n\n return {\n dragging,\n widgetEl,\n randomUuid,\n removeDialog,\n itemToRemove,\n sortableInstances,\n forceRerender,\n refresh,\n onRemoveDialogConfirm,\n destroy,\n moveArrayElement,\n addAfterId,\n addChildToId,\n removeById,\n updateData,\n }\n}\n","<script setup lang=\"ts\">\nimport { inject, provide } from 'vue'\nimport { computed } from 'vue'\nimport type { SortableNestedItem } from '@/components/sortable/sortableNestedActions'\nimport { cloneDeep, isUndefined } from '@/utils/common'\nimport { NESTED_HANDLE_CLASS, SortableLevel } from '@/components/sortable/sortableNestedActions'\nimport { useI18n } from 'vue-i18n'\n\nconst props = withDefaults(\n defineProps<{\n item: SortableNestedItem | any\n disableDraggable: boolean\n maxDepth: number\n showAddAfterButton: boolean\n showAddChildButton: boolean\n showDeleteButton?: boolean\n showEditButton?: boolean\n }>(),\n {}\n)\nconst emit = defineEmits<{\n (e: 'onAddAfter', item: SortableNestedItem): void\n (e: 'onAddChild', item: SortableNestedItem): void\n (e: 'onDelete', item: SortableNestedItem): void\n (e: 'onEdit', item: SortableNestedItem): void\n}>()\n\nconst onDeleteClick = (item: SortableNestedItem | MouseEvent | KeyboardEvent) => {\n if ('data' in item) {\n emit('onDelete', item)\n return\n }\n emit('onDelete', cloneDeep(props.item))\n}\n\nconst onEditClick = (item: SortableNestedItem | MouseEvent | KeyboardEvent) => {\n if ('data' in item) {\n emit('onEdit', item)\n return\n }\n emit('onEdit', cloneDeep(props.item))\n}\n\nconst onAddAfterClick = (item: SortableNestedItem | MouseEvent | KeyboardEvent) => {\n if ('data' in item) {\n emit('onAddAfter', item)\n return\n }\n emit('onAddAfter', cloneDeep(props.item))\n}\n\nconst onAddChildClick = (item: SortableNestedItem | MouseEvent | KeyboardEvent) => {\n if ('data' in item) {\n emit('onAddChild', item)\n return\n }\n emit('onAddChild', cloneDeep(props.item))\n}\n\nconst level = inject<number>(SortableLevel, 1)\nprovide<number>(SortableLevel, level + 1)\n\nconst showAddChildButtonComputed = computed(() => {\n return (\n props.showAddChildButton &&\n !isUndefined(props.item.children) &&\n props.item.children.length === 0 &&\n level < props.maxDepth\n )\n})\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <div\n class=\"a-sortable-nested-widget__container\"\n :class=\"'a-sortable-nested-widget__container--level-' + level\"\n :data-id=\"item.data.id\"\n >\n <div class=\"a-sortable-nested-widget__nested\">\n <div class=\"a-sortable-nested-widget__item\">\n <VIcon\n :class=\"{\n [NESTED_HANDLE_CLASS]: true,\n [NESTED_HANDLE_CLASS + '--disabled']: disableDraggable,\n }\"\n icon=\"mdi-drag\"\n />\n <div class=\"a-sortable-nested-widget__content\">\n <slot\n name=\"item\"\n :item=\"item\"\n />\n </div>\n <div class=\"a-sortable-nested-widget__buttons\">\n <VBtn\n v-if=\"showEditButton\"\n icon\n size=\"x-small\"\n variant=\"text\"\n class=\"mx-1\"\n @click.stop=\"onEditClick\"\n >\n <VIcon icon=\"mdi-pencil\" />\n <VTooltip\n anchor=\"bottom\"\n activator=\"parent\"\n :text=\"t('common.sortable.edit')\"\n />\n </VBtn>\n <VBtn\n v-if=\"showDeleteButton\"\n icon\n size=\"x-small\"\n variant=\"text\"\n class=\"mx-1\"\n @click.stop=\"onDeleteClick\"\n >\n <VIcon icon=\"mdi-trash-can-outline\" />\n <VTooltip\n anchor=\"bottom\"\n activator=\"parent\"\n :text=\"t('common.sortable.remove')\"\n />\n </VBtn>\n <slot\n name=\"buttons\"\n :item=\"item\"\n />\n <VBtn\n v-if=\"showAddAfterButton || showAddChildButtonComputed\"\n icon\n size=\"x-small\"\n variant=\"text\"\n class=\"mx-1\"\n >\n <VIcon icon=\"mdi-dots-vertical\" />\n <VTooltip\n anchor=\"bottom\"\n activator=\"parent\"\n :text=\"t('common.sortable.more')\"\n />\n <VMenu activator=\"parent\">\n <VList density=\"compact\">\n <VListItem\n v-if=\"showAddAfterButton\"\n @click.stop=\"onAddAfterClick\"\n >\n {{ t('common.sortable.addAfter') }}\n </VListItem>\n <VListItem\n v-if=\"showAddChildButtonComputed\"\n @click.stop=\"onAddChildClick\"\n >\n {{ t('common.sortable.addChild') }}\n </VListItem>\n </VList>\n </VMenu>\n </VBtn>\n </div>\n </div>\n <div\n v-if=\"level < maxDepth && !isUndefined(item.children)\"\n class=\"a-sortable-nested-widget__group\"\n :class=\"{ 'a-sortable-nested-widget__group--empty': item.children.length === 0 }\"\n :data-id=\"item.data.id\"\n >\n <ASortableNestedItem\n v-for=\"child of item.children\"\n :key=\"child.data.id\"\n :item=\"child\"\n :disable-draggable=\"disableDraggable\"\n :max-depth=\"maxDepth\"\n :show-add-after-button=\"showAddAfterButton\"\n :show-add-child-button=\"showAddChildButton\"\n :show-delete-button=\"showDeleteButton\"\n :show-edit-button=\"showEditButton\"\n @on-add-after=\"onAddAfterClick\"\n @on-add-child=\"onAddChildClick\"\n @on-delete=\"onDeleteClick\"\n @on-edit=\"onEditClick\"\n >\n <!-- @vue-ignore -->\n <template #item=\"{ item: itemSlot }\">\n <slot\n name=\"item\"\n :item=\"itemSlot as any\"\n />\n </template>\n <!-- @vue-ignore -->\n <template #buttons=\"{ item: buttonSlot }\">\n <slot\n name=\"buttons\"\n :item=\"buttonSlot as any\"\n />\n </template>\n </ASortableNestedItem>\n </div>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { SortableEvent } from 'sortablejs'\nimport { computed, nextTick, onBeforeUnmount, toRef, watch } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport type {\n SortableNested,\n SortableNestedEmit,\n SortableNestedItem,\n} from '@/components/sortable/sortableNestedActions'\nimport { cloneDeep, isNull, isUndefined } from '@/utils/common'\nimport { WIDGET_HTML_ID_PREFIX } from '@/components/sortable/sortableUtils'\nimport {\n NESTED_CHOSEN_CLASS,\n NESTED_DRAG_CLASS,\n NESTED_GHOST_CLASS,\n NESTED_GROUP_CLASS,\n NESTED_HANDLE_CLASS,\n useSortableNestedActions,\n} from '@/components/sortable/sortableNestedActions'\nimport { useSortable } from '@vueuse/integrations/useSortable'\nimport { stringToInt } from '@/utils/string'\nimport ASortableNestedItem from '@/components/sortable/ASortableNestedItem.vue'\nimport ADialogToolbar from '@/components/ADialogToolbar.vue'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: SortableNested\n maxDepth: number\n disableDraggable?: boolean\n rootClassName?: string\n widgetIdentifierId?: string | undefined\n disableDefaultSort?: boolean\n showAddAfterButton?: boolean\n showAddLastButton?: boolean\n showAddChildButton?: boolean\n showDeleteButton?: boolean\n showEditButton?: boolean\n }>(),\n {\n disableDraggable: false,\n rootClassName: 'a-sortable-nested-widget',\n widgetIdentifierId: undefined,\n disableDefaultSort: false,\n showAddAfterButton: false,\n showAddLastButton: false,\n showAddChildButton: false,\n showDeleteButton: false,\n showEditButton: false,\n }\n)\nconst emit = defineEmits<SortableNestedEmit>()\n\nconst model = toRef(() => props.modelValue)\n\nconst onAddAfterClick = (data: SortableNestedItem) => {\n emit('onAddAfter', data)\n}\n\nconst onAddChildClick = (data: SortableNestedItem) => {\n emit('onAddChild', data)\n}\n\nconst onDeleteClick = (data: SortableNestedItem) => {\n itemToRemove.value = data\n removeDialog.value = true\n}\n\nconst onEditClick = (data: SortableNestedItem) => {\n emit('onEdit', data)\n}\n\nconst onAddLastClick = () => {\n if (props.modelValue.children.length > 0) {\n emit('onAddLast', cloneDeep(props.modelValue.children[props.modelValue.children.length - 1]))\n return\n }\n emit('onAddLast', null)\n}\n\nconst { t } = useI18n()\n\nconst widgetHtmlId = computed(() => {\n return isUndefined(props.widgetIdentifierId) ? WIDGET_HTML_ID_PREFIX + randomUuid.value : props.widgetIdentifierId\n})\n\nconst widgetClass = computed(() => {\n return props.rootClassName + ' ' + (dragging.value ? props.rootClassName + '--dragging' : '')\n})\n\nconst initSortables = () => {\n if (props.disableDraggable) return\n if (!widgetEl.value) return\n const nestedSortables = Array.from(widgetEl.value.querySelectorAll<HTMLElement>('.' + NESTED_GROUP_CLASS))\n sortableInstances.value = []\n for (let i = 0; i < nestedSortables.length; i++) {\n sortableInstances.value[i] = useSortable(nestedSortables[i], [], {\n group: {\n name: 'nested',\n pull: true,\n put: true,\n },\n handle: '.' + NESTED_HANDLE_CLASS,\n ghostClass: NESTED_GHOST_CLASS,\n dragClass: NESTED_DRAG_CLASS,\n chosenClass: NESTED_CHOSEN_CLASS,\n fallbackOnBody: true,\n swapThreshold: 0.65,\n forceFallback: true,\n fallbackTolerance: 3,\n onUpdate: () => {},\n onStart: () => {\n dragging.value = true\n },\n onEnd: (event: SortableEvent) => {\n dragging.value = false\n nextTick(() => {\n const id = stringToInt(event.item.getAttribute('data-id') ?? '0')\n if (id < 1) return\n const newIndex = event.newIndex\n if (isUndefined(newIndex)) return\n const oldIndex = event.oldIndex\n if (isUndefined(oldIndex)) return\n let parentId: number | null = null\n const parentEl = event.item.parentElement\n if (!isNull(parentEl)) {\n parentId = stringToInt(parentEl.getAttribute('data-id') ?? '0')\n if (parentId === 0) parentId = null\n }\n const needsRefresh = moveArrayElement(id, parentId, newIndex, oldIndex, props.maxDepth)\n emit('onEnd', needsRefresh)\n })\n },\n })\n }\n}\n\nconst {\n dragging,\n widgetEl,\n randomUuid,\n removeDialog,\n itemToRemove,\n forceRerender,\n moveArrayElement,\n addAfterId,\n addChildToId,\n removeById,\n updateData,\n destroy,\n refresh,\n onRemoveDialogConfirm,\n sortableInstances,\n} = useSortableNestedActions(model, initSortables, emit)\n\nonBeforeUnmount(() => {\n destroy()\n})\n\nnextTick(() => {\n widgetEl.value = document.querySelector('#' + widgetHtmlId.value)\n initSortables()\n})\n\nwatch(\n () => props.disableDraggable,\n async (newValue) => {\n destroy()\n if (newValue === false) initSortables()\n }\n)\n\ndefineExpose({\n refresh,\n addAfterId,\n addChildToId,\n removeById,\n updateData,\n})\n</script>\n\n<template>\n <div>\n <div\n :id=\"widgetHtmlId\"\n :class=\"widgetClass\"\n >\n <div\n :key=\"forceRerender\"\n :class=\"NESTED_GROUP_CLASS\"\n >\n <ASortableNestedItem\n v-for=\"item of modelValue.children\"\n :key=\"item.data.id\"\n :item=\"item\"\n :disable-draggable=\"disableDraggable\"\n :max-depth=\"maxDepth\"\n :show-add-after-button=\"showAddAfterButton\"\n :show-add-child-button=\"showAddChildButton\"\n :show-delete-button=\"showDeleteButton\"\n :show-edit-button=\"showEditButton\"\n @on-add-after=\"onAddAfterClick\"\n @on-add-child=\"onAddChildClick\"\n @on-delete=\"onDeleteClick\"\n @on-edit=\"onEditClick\"\n >\n <template #item=\"{ item: itemSlot }\">\n <slot\n name=\"item\"\n :item=\"itemSlot\"\n />\n </template>\n <template #buttons=\"{ item: buttonsSlot }\">\n <slot\n name=\"buttons\"\n :item=\"buttonsSlot\"\n />\n </template>\n </ASortableNestedItem>\n </div>\n </div>\n <VBtn\n v-if=\"showAddLastButton\"\n size=\"small\"\n prepend-icon=\"mdi-plus\"\n @click.stop=\"onAddLastClick\"\n >\n {{ t('common.sortable.addNewAtEnd') }}\n </VBtn>\n <VDialog\n v-model=\"removeDialog\"\n :width=\"500\"\n >\n <VCard v-if=\"removeDialog\">\n <ADialogToolbar @on-cancel=\"removeDialog = false\">\n {{ t('common.system.modal.confirmDelete') }}\n </ADialogToolbar>\n <VCardActions>\n <VSpacer />\n <ABtnTertiary @click.stop=\"removeDialog = false\">\n {{ t('common.button.cancel') }}\n </ABtnTertiary>\n <ABtnPrimary @click.stop=\"onRemoveDialogConfirm\">\n {{ t('common.button.delete') }}\n </ABtnPrimary>\n </VCardActions>\n </VCard>\n </VDialog>\n </div>\n</template>\n\n<style lang=\"scss\">\n@use 'sass:color';\n\n// todo dark theme colors\n\n$class-name-root: 'a-sortable-nested-widget';\n$bg-color: #fff;\n$border-color: lightgray;\n$border-color-hover: gray;\n$ghost-bg-color: color.scale(#3f6ad8, $lightness: 95%);\n$item-space: 10px;\n$ident: 40px;\n\n.#{$class-name-root} {\n &__container {\n position: relative;\n background-color: $bg-color;\n margin-left: ($ident + $item-space);\n\n &::before {\n content: '';\n position: absolute;\n top: -($item-space);\n left: -($ident);\n border-left: 1px solid $border-color;\n border-bottom: 1px solid $border-color;\n width: $ident;\n height: ($ident + $item-space);\n }\n\n &::after {\n position: absolute;\n content: '';\n top: ($ident - 1px);\n left: -($ident);\n border-left: 1px solid $border-color;\n border-top: 1px solid $border-color;\n width: $ident;\n height: 100%;\n }\n\n &:last-child::after {\n display: none;\n }\n\n &--level-2 {\n .#{$class-name-root}__item {\n background-color: color.scale($bg-color, $lightness: -4%);\n }\n }\n\n &--level-3 {\n .#{$class-name-root}__item {\n background-color: color.scale($bg-color, $lightness: -8%);\n }\n }\n\n &--level-4 {\n .#{$class-name-root}__item {\n background-color: color.scale($bg-color, $lightness: -12%);\n }\n }\n\n &--level-5 {\n .#{$class-name-root}__item {\n background-color: color.scale($bg-color, $lightness: -16%);\n }\n }\n }\n\n > .#{$class-name-root}__group > .#{$class-name-root}__container:first-child:before {\n border-bottom: none;\n }\n\n &__item {\n width: 100%;\n display: flex;\n border: 1px solid $border-color;\n align-items: center;\n justify-content: space-between;\n padding: 6px 10px;\n border-radius: 5px;\n margin-bottom: 10px;\n\n &:hover {\n border-color: $border-color-hover;\n\n .#{$class-name-root}__buttons {\n opacity: 1;\n }\n }\n\n &:hover + div {\n div {\n border-color: $border-color-hover;\n\n &::after,\n &::before {\n border-color: $border-color-hover;\n }\n }\n }\n }\n\n &__content {\n width: 100%;\n }\n\n &__nested {\n width: 100%;\n }\n\n &__handle {\n cursor: move;\n margin-right: 6px;\n\n &--disabled {\n opacity: 0;\n cursor: default;\n }\n }\n\n &__ghost {\n .#{$class-name-root}__item {\n background-color: $ghost-bg-color !important;\n }\n }\n\n &__buttons {\n opacity: 0;\n display: flex;\n }\n\n &--dragging {\n .#{$class-name-root}__group--empty {\n padding-bottom: 20px;\n }\n }\n\n &__chosen {\n .#{$class-name-root}__container {\n margin-left: 0;\n }\n }\n\n &__drag {\n &::before,\n &::after {\n opacity: 0;\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup generic=\"TItem\">\nimport { computed, ref, toRaw, withModifiers } from 'vue'\nimport { isNull, isUndefined } from '@/utils/common'\nimport ADialogToolbar from '@/components/ADialogToolbar.vue'\nimport { useI18n } from 'vue-i18n'\nimport type { Pagination } from '@/types/Pagination'\nimport ADatatablePagination from '@/components/ADatatablePagination.vue'\nimport type { Fn } from '@vueuse/core'\n\nconst props = withDefaults(\n defineProps<{\n selectedItems: Array<TItem>\n pagination: Pagination\n submitFilter: Fn\n resetFilter: Fn\n loading?: boolean\n minCount?: number\n maxCount?: number\n modelValue?: boolean | undefined // dialog\n dialogTitleT?: string\n paginationMode?: 'standard' | 'more'\n }>(),\n {\n loading: false,\n minCount: 1,\n maxCount: 1,\n modelValue: undefined,\n dialogTitleT: 'common.subjectSelect.texts.title',\n paginationMode: 'standard',\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: boolean): void\n (e: 'update:pagination', data: Pagination): void\n (e: 'onOpen'): void\n (e: 'onPageChange'): void\n (e: 'onConfirm', data: Array<TItem>): void\n (e: 'onFetchNextPage'): void\n}>()\n\nconst dialogLocal = ref(false)\nconst dialog = computed({\n get() {\n if (isUndefined(props.modelValue)) return dialogLocal.value\n return props.modelValue\n },\n set(newValue: boolean) {\n dialogLocal.value = newValue\n emit('update:modelValue', newValue)\n },\n})\n\nconst paginationComputed = computed({\n get: () => props.pagination,\n set: (newValue) => {\n emit('update:pagination', { ...toRaw(newValue) })\n },\n})\n\nconst sidebarLeft = ref(true)\nconst filterTouched = ref(false)\n\nconst { t } = useI18n()\n\nconst selectedItemsCount = computed(() => {\n return props.selectedItems.length\n})\n\nconst disabledSubmit = computed(() => {\n return selectedItemsCount.value < props.minCount || selectedItemsCount.value > props.maxCount\n})\n\nconst onOpen = () => {\n emit('onOpen')\n sidebarLeft.value = true\n dialog.value = true\n}\n\nconst toggleSidebar = () => {\n sidebarLeft.value = !sidebarLeft.value\n}\n\nconst onClose = () => {\n dialog.value = false\n}\n\nconst onConfirm = () => {\n emit(\n 'onConfirm',\n props.selectedItems.map((item) => toRaw(item))\n )\n onClose()\n}\n\nconst fetchNextPage = () => {\n emit('onFetchNextPage')\n}\n\nconst onPageChange = () => {\n emit('onPageChange')\n}\n\nconst lastPage = computed(() => {\n return Math.ceil(paginationComputed.value.totalCount / paginationComputed.value.rowsPerPage)\n})\n\nconst hasNextPage = computed(() => {\n return !(\n (isNull(paginationComputed.value.hasNextPage) && paginationComputed.value.page === lastPage.value) ||\n paginationComputed.value.hasNextPage === false\n )\n})\n\nconst autoloadOnIntersect = (isIntersecting: boolean) => {\n if (isIntersecting && hasNextPage.value && !props.loading) {\n fetchNextPage()\n }\n}\n\ndefineExpose({\n open: onOpen,\n})\n</script>\n\n<template>\n <slot\n name=\"activator\"\n :props=\"{ onClick: withModifiers(() => onOpen(), ['stop']) }\"\n />\n <VDialog\n v-bind=\"$attrs\"\n :model-value=\"dialog\"\n fullscreen\n class=\"subject-select\"\n @update:model-value=\"emit('update:modelValue', $event)\"\n >\n <VCard\n v-if=\"dialog\"\n class=\"subject-select__card\"\n >\n <ADialogToolbar\n class=\"subject-select__toolbar system-border-b\"\n @on-cancel=\"onClose\"\n >\n <slot name=\"title\">\n {{ t(dialogTitleT) }}\n </slot>\n </ADialogToolbar>\n <VToolbar\n density=\"compact\"\n color=\"transparent\"\n :height=\"46\"\n elevation=\"0\"\n class=\"system-border-b subject-select__second-bar\"\n >\n <slot name=\"second-bar\">\n <div class=\"d-flex flex-column w-100 px-1 align-center\">\n <div class=\"d-flex justify-space-between w-100 align-center\">\n <div class=\"d-flex align-center\">\n <VBtn\n icon\n :width=\"30\"\n :height=\"30\"\n @click=\"toggleSidebar\"\n >\n <VIcon\n icon=\"mdi-tune\"\n :size=\"16\"\n />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.subjectSelect.filter.toggle') }}\n </VTooltip>\n </VBtn>\n <slot name=\"second-bar-left\" />\n </div>\n <div class=\"d-flex align-center\">\n <slot name=\"second-bar-right\" />\n </div>\n </div>\n </div>\n </slot>\n </VToolbar>\n <div\n class=\"subject-select__main\"\n :class=\"{ 'subject-select__main--sidebar-active': sidebarLeft }\"\n >\n <div class=\"subject-select__sidebar system-border-r\">\n <div class=\"subject-select-filter\">\n <div class=\"subject-select-filter__content\">\n <VForm\n name=\"search2\"\n class=\"px-2 pt-4\"\n @submit.prevent=\"submitFilter\"\n >\n <slot name=\"filter\" />\n </VForm>\n </div>\n <div class=\"subject-select-filter__actions\">\n <VBtn\n color=\"primary\"\n class=\"mx-2\"\n :variant=\"filterTouched ? 'flat' : 'text'\"\n size=\"small\"\n @click.stop=\"submitFilter\"\n >\n {{ t('common.button.submitFilter') }}\n </VBtn>\n <VBtn\n class=\"px-2\"\n color=\"light\"\n min-width=\"36px\"\n variant=\"flat\"\n size=\"small\"\n @click.stop=\"resetFilter\"\n >\n <VIcon icon=\"mdi-filter-remove-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.button.resetFilter') }}\n </VTooltip>\n </VBtn>\n </div>\n </div>\n </div>\n <div class=\"subject-select__content\">\n <slot name=\"content\" />\n <div\n v-if=\"paginationMode === 'more'\"\n class=\"d-flex w-100 align-center justify-center pa-4\"\n >\n <ABtnSecondary\n v-show=\"hasNextPage || loading\"\n v-intersect.quiet=\"autoloadOnIntersect\"\n :loading=\"loading\"\n size=\"small\"\n @click=\"fetchNextPage\"\n >\n <slot name=\"button-confirm-title\">\n {{ t('common.button.loadMore') }}\n </slot>\n </ABtnSecondary>\n </div>\n <ADatatablePagination\n v-else\n v-model=\"paginationComputed\"\n @change=\"onPageChange\"\n />\n </div>\n </div>\n <div class=\"subject-select__actions system-border-t\">\n <div v-if=\"props.minCount === props.maxCount\">\n {{ t('common.subjectSelect.texts.pickExactCount', { count: props.minCount, selected: selectedItemsCount }) }}\n </div>\n <div v-else>\n {{\n t('common.subjectSelect.texts.pickRangeCount', {\n minCount: props.minCount,\n maxCount: props.maxCount,\n selected: selectedItemsCount,\n })\n }}\n </div>\n <VSpacer />\n <ABtnPrimary\n :disabled=\"disabledSubmit\"\n @click.stop=\"onConfirm\"\n >\n <slot name=\"button-confirm-title\">\n {{ t('common.button.confirm') }}\n </slot>\n </ABtnPrimary>\n </div>\n </VCard>\n </VDialog>\n</template>\n","import { type Ref, ref } from 'vue'\n\nconst isDraggingFile = ref(false)\nconst draggingTimer: Ref<ReturnType<typeof setTimeout> | undefined> = ref(undefined)\n\nexport function useDropzoneGlobalDragState() {\n const dragoverHandler = (event: DragEvent) => {\n event.preventDefault()\n checkReallyDraggingEnded(event, true)\n }\n const dragleaveHandler = (event: DragEvent) => {\n event.preventDefault()\n checkReallyDraggingEnded(event, false)\n }\n const dropHandler = (event: DragEvent) => {\n event.preventDefault()\n checkReallyDraggingEnded(event, false)\n }\n const checkReallyDraggingEnded = (event: DragEvent, dragging: boolean) => {\n if (!dragEventContainsFiles(event)) {\n return\n }\n if (dragging) {\n isDraggingFile.value = true\n clearTimeout(draggingTimer.value)\n } else {\n clearTimeout(draggingTimer.value)\n draggingTimer.value = setTimeout(() => {\n isDraggingFile.value = false\n }, 100)\n }\n }\n const dragEventContainsFiles = (event: DragEvent) => {\n if (event.dataTransfer?.types) {\n for (let i = 0; i < event.dataTransfer.types.length; i++) {\n if (event.dataTransfer.types[i] === 'Files') {\n return true\n }\n }\n }\n\n return false\n }\n\n const initGlobalDragState = () => {\n window.document.addEventListener('dragover', dragoverHandler)\n window.document.addEventListener('dragleave', dragleaveHandler)\n window.document.addEventListener('drop', dropHandler)\n }\n\n const destroyGlobalDragState = () => {\n window.document.removeEventListener('dragover', dragoverHandler)\n window.document.removeEventListener('dragleave', dragleaveHandler)\n window.document.removeEventListener('drop', dropHandler)\n }\n\n return {\n isDraggingFile,\n initGlobalDragState,\n destroyGlobalDragState,\n }\n}\n","import { useAlerts } from '@/composables/system/alerts'\nimport { damFileTypeFix } from '@/components/file/composables/fileType'\nimport { isUndefined } from '@/utils/common'\nimport { computed } from 'vue'\nimport { i18n } from '@/plugins/i18n'\n\n/**\n * @param accept example: 'image/*,.jpg'\n * @param maxSizes example: { 'image/*': 20000 } or { 'image/png': 20000, 'image/jpg': 20000 } or\n * { '.jpg': 20000, '.png': 20000 } or { '*': 20000, }\n */\nexport function useFormatAndSizeCheck(accept: string | undefined, maxSizes: Record<string, number> | undefined) {\n const acceptKeys = computed(() => {\n if (isUndefined(accept)) {\n return []\n }\n return accept.split(',')\n })\n\n const maxSizeKeys = computed(() => {\n if (isUndefined(maxSizes)) {\n return []\n }\n return Object.keys(maxSizes)\n })\n\n const checkFormatsAndSizes = (files: File[], disableAlert = false) => {\n const incorrectFileNames: string[] = []\n const validFiles = files.filter((file) => {\n const isFileValid = checkFormats(file, acceptKeys.value) && checkSizes(file, maxSizeKeys.value, maxSizes)\n if (!isFileValid) {\n incorrectFileNames.push(file.name)\n }\n return isFileValid\n })\n if (incorrectFileNames.length && !disableAlert) {\n const { showWarning } = useAlerts()\n const { t } = i18n.global\n showWarning(t('system.upload.incorrectFormatSize') + ':' + incorrectFileNames.join(', '))\n }\n\n return validFiles\n }\n\n const checkFormats = (file: File, accepts: string[]) => {\n if (accepts.length === 0) {\n return true\n }\n for (let i = 0; i < accepts.length; i++) {\n if (accepts[i].startsWith('.')) {\n // .format\n if (file.name.toLowerCase().endsWith(accepts[i])) {\n return true\n }\n } else {\n // type\n const splitType = accepts[i].split('/')\n if (splitType[1] === '*' && damFileTypeFix(file).startsWith(splitType[0] + '/')) {\n return true\n } else if (accepts[i] === damFileTypeFix(file)) {\n return true\n }\n }\n }\n return false\n }\n\n const checkSizes = (file: File, keys: Array<string>, sizes: Record<string, number> | undefined) => {\n if (keys.length === 0 || isUndefined(sizes)) {\n return true\n }\n for (let j = 0; j < keys.length; j++) {\n if (keys[j] === '*' && sizes[keys[j]] <= file.size) {\n // *\n return true\n } else if (keys[j].startsWith('.') && sizes[keys[j]] <= file.size) {\n // .format\n return true\n } else {\n // type\n const splitType = keys[j].split('/')\n if (splitType[1] === '*' && damFileTypeFix(file).startsWith(splitType[0] + '/') && sizes[keys[j]] > file.size) {\n return true\n } else if (keys[j] === damFileTypeFix(file) && sizes[keys[j]] > file.size) {\n return true\n }\n }\n }\n return false\n }\n\n return {\n checkFormatsAndSizes,\n }\n}\n","<script setup lang=\"ts\">\nimport { useDropZone } from '@vueuse/core'\nimport { ref } from 'vue'\nimport { useDropzoneGlobalDragState } from '@/components/file/composables/dropzone'\nimport { isNull } from '@/utils/common'\nimport { useFormatAndSizeCheck } from '@/components/file/composables/formatAndSizeCheck'\nimport { useI18n } from 'vue-i18n'\n\n/**\n * For accept and maxSizes check docs {@see useFormatAndSizeCheck}\n */\nconst props = withDefaults(\n defineProps<{\n variant?: 'fill' | 'default' | 'fullscreen'\n accept?: string | undefined\n maxSizes?: Record<string, number> | undefined\n disabled?: boolean\n transparent?: boolean\n size?: 'small' | 'default' | 'large'\n hoverOnly?: boolean\n hideText?: boolean\n }>(),\n {\n variant: 'default',\n accept: undefined,\n maxSizes: undefined,\n disabled: false,\n transparent: false,\n size: 'default',\n hoverOnly: false,\n hideText: false,\n }\n)\nconst emit = defineEmits<{\n (e: 'onDrop', files: File[]): void\n (e: 'onClick'): void\n}>()\n\nconst dropZoneRef = ref<HTMLDivElement>()\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { checkFormatsAndSizes } = useFormatAndSizeCheck(props.accept, props.maxSizes)\n\nfunction onDrop(files: File[] | null) {\n if (props.disabled) return\n if (isNull(files) || files.length === 0) return\n emit('onDrop', checkFormatsAndSizes(files))\n}\n\nconst { isOverDropZone } = useDropZone(dropZoneRef, onDrop)\n\nconst { isDraggingFile } = useDropzoneGlobalDragState()\nconst { t } = useI18n()\n</script>\n\n<template>\n <div\n ref=\"dropZoneRef\"\n class=\"a-file-dropzone\"\n :class=\"{\n 'a-file-dropzone--bg': !transparent,\n 'a-file-dropzone--over': isOverDropZone && isDraggingFile,\n 'a-file-dropzone--possibility': isDraggingFile,\n [`a-file-dropzone--${variant}`]: true,\n [`a-file-dropzone--${size}`]: true,\n [`a-file-dropzone--hover-only`]: hoverOnly,\n [`a-file-dropzone--hide-text`]: hideText,\n }\"\n @click.stop=\"emit('onClick')\"\n >\n <div\n v-if=\"disabled\"\n class=\"text\"\n />\n <div\n v-else-if=\"isDraggingFile\"\n class=\"text\"\n >\n {{ t('common.system.dropzone.dropHere') }}\n </div>\n <div\n v-else\n class=\"text\"\n >\n {{ t('common.system.dropzone.dropPossibility') }}\n </div>\n </div>\n</template>\n\n<style lang=\"scss\">\n$class-name-root: 'a-file-dropzone';\n\n.#{$class-name-root} {\n outline-offset: -4px;\n position: relative;\n text-align: center;\n display: flex;\n align-items: center;\n justify-content: center;\n\n .text {\n padding: 6px;\n pointer-events: none;\n user-select: none;\n text-align: center;\n border-radius: 5px;\n }\n\n &--fill {\n position: absolute !important;\n inset: 0;\n }\n\n &--bg {\n width: 100%;\n }\n\n &--fullscreen {\n inset: 0;\n position: fixed;\n z-index: 9999;\n }\n\n &--small {\n min-height: 70px;\n }\n\n &--default {\n min-height: 140px;\n }\n\n &--large {\n min-height: 210px;\n }\n\n &--hover-only {\n display: none;\n }\n\n &--hide-text .text {\n display: none;\n }\n\n &.#{$class-name-root}--hover-only.#{$class-name-root}--possibility {\n display: flex;\n }\n}\n\n.v-theme--light {\n .#{$class-name-root} {\n .text {\n background-color: rgb(212 212 212 / 50%);\n }\n\n &--bg {\n background-color: #d4d4d4;\n }\n\n &--over:not(&--disabled) {\n background-color: #dcedc8;\n outline: 2px dashed #7cb342;\n }\n\n &--possibility:not(&--disabled) {\n background-color: #e5edf1;\n outline: 2px dashed #bacfd4;\n }\n }\n}\n\n.v-theme--dark {\n .#{$class-name-root} {\n .text {\n background-color: rgb(57 57 57 / 50%);\n }\n\n &--bg {\n background-color: #393939;\n }\n\n &--over:not(&--disabled) {\n background-color: #283121;\n outline: 2px dashed #333e28;\n }\n\n &--possibility:not(&--disabled) {\n background-color: #212531;\n outline: 2px dashed #01579b;\n }\n }\n}\n</style>\n","import { ref } from 'vue'\nimport type { CommonAdminImageOptions } from '@/AnzuSystemsCommonAdmin'\nimport { isUndefined } from '@/utils/common'\n\nconst imageOptions = ref<CommonAdminImageOptions>(undefined)\n\nexport function initCommonAdminImageOptions(data: CommonAdminImageOptions) {\n imageOptions.value = data\n}\n\nexport function useCommonAdminImageOptions(configName: string = 'default') {\n if (\n isUndefined(imageOptions.value) ||\n isUndefined(imageOptions.value.configs) ||\n isUndefined(imageOptions.value.configs[configName])\n ) {\n throw new Error(\"Composable can't be used without properly configured common admin.\")\n }\n\n return {\n imageClient: imageOptions.value.configs[configName].imageClient,\n previewDomain: imageOptions.value.configs[configName].previewDomain,\n previewDomainOriginal: imageOptions.value.configs[configName].previewDomainOriginal,\n imageWidth: imageOptions.value.configs[configName].width,\n imageHeight: imageOptions.value.configs[configName].height,\n }\n}\n","import type { ImageAware, ImageCreateUpdateAware } from '@/types/ImageAware'\nimport type { useCommonAdminImageOptions } from '@/components/damImage/composables/commonAdminImageOptions'\nimport type { DocId } from '@/types/common'\n\nexport function useImageActions(config: ReturnType<typeof useCommonAdminImageOptions>) {\n const widgetImageToDamImageUrl = (\n image: ImageAware | ImageCreateUpdateAware,\n width = config.imageWidth,\n height = config.imageHeight\n ) => {\n return (\n config.previewDomain +\n '/image/w' +\n width +\n '-h' +\n height +\n (image.dam.regionPosition > 0 ? '-c' + image.dam.regionPosition : '') +\n '/' +\n image.dam.damId +\n '.jpg'\n )\n }\n\n const widgetImageToDamImageOriginalUrl = (image: ImageAware | ImageCreateUpdateAware) => {\n return config.previewDomainOriginal + '/image/original/' + image.dam.damId + '.jpg'\n }\n\n const damImageIdToDamImageUrl = (imageId: DocId, width = config.imageWidth, height = config.imageHeight) => {\n return config.previewDomain + '/image/w' + width + '-h' + height + '/' + imageId + '.jpg'\n }\n\n const damImageIdToDamImageOriginalUrl = (imageId: DocId) => {\n return config.previewDomainOriginal + '/image/original/' + imageId + '.jpg'\n }\n\n return {\n widgetImageToDamImageUrl,\n widgetImageToDamImageOriginalUrl,\n damImageIdToDamImageUrl,\n damImageIdToDamImageOriginalUrl,\n }\n}\n","import { DamAssetType, type DamAssetTypeType } from '@/types/coreDam/Asset'\nimport { computed } from 'vue'\nimport type { DamExtSystemConfig } from '@/types/coreDam/DamConfig'\n\nexport function useDamAcceptTypeAndSizeHelper(\n assetType: undefined | DamAssetTypeType = undefined,\n damConfigExtSystem: DamExtSystemConfig\n) {\n const createSizesByAssetType = (assetType: DamAssetTypeType) => {\n const sizes: Record<string, number> = {}\n for (let i = 0; i < damConfigExtSystem[assetType].mimeTypes.length; i++) {\n sizes[damConfigExtSystem[assetType].mimeTypes[i]] = damConfigExtSystem[assetType].sizeLimit\n }\n return sizes\n }\n\n const uploadSizes = computed(() => {\n if (assetType) {\n return {\n ...createSizesByAssetType(assetType),\n }\n }\n return {\n ...createSizesByAssetType(DamAssetType.Image),\n ...createSizesByAssetType(DamAssetType.Audio),\n ...createSizesByAssetType(DamAssetType.Video),\n ...createSizesByAssetType(DamAssetType.Document),\n }\n })\n\n const uploadAccept = computed(() => {\n return Object.keys(uploadSizes.value).join(',')\n })\n\n return {\n uploadSizes,\n uploadAccept,\n }\n}\n","import type { AxiosInstance, AxiosResponse } from 'axios'\nimport { apiCreateOne } from '@/services/api/apiCreateOne'\nimport { apiUpdateOne } from '@/services/api/apiUpdateOne'\nimport { apiDeleteOne } from '@/services/api/apiDeleteOne'\nimport { apiFetchOne } from '@/services/api/apiFetchOne'\nimport type { IntegerId } from '@/types/common'\nimport type { ImageAware, ImageCreateUpdateAware } from '@/types/ImageAware'\nimport { apiFetchByIds } from '@/services/api/apiFetchByIds'\nimport { HTTP_STATUS_OK } from '@/composables/statusCodes'\n\nconst END_POINT = '/adm/v1/image'\nexport const ENTITY = 'image'\nexport const SYSTEM_CMS = 'cms'\n\nconst BULK_METADATA_LIMIT = 20\n\nexport const fetchImageListByIds = (client: () => AxiosInstance, ids: IntegerId[]) =>\n apiFetchByIds<ImageAware[]>(client, ids, END_POINT, {}, SYSTEM_CMS, ENTITY)\n\nexport const fetchImage = (client: () => AxiosInstance, id: IntegerId) =>\n apiFetchOne<ImageAware>(client, END_POINT + '/:id', { id }, SYSTEM_CMS, ENTITY)\n\nexport const createImage = (client: () => AxiosInstance, data: ImageCreateUpdateAware) =>\n apiCreateOne<ImageCreateUpdateAware, ImageAware>(client, data, END_POINT, {}, SYSTEM_CMS, ENTITY)\n\nexport const updateImage = (client: () => AxiosInstance, id: IntegerId, data: ImageCreateUpdateAware) =>\n apiUpdateOne<ImageCreateUpdateAware, ImageAware>(client, data, END_POINT + '/:id', { id }, SYSTEM_CMS, ENTITY)\n\nexport const deleteImage = (client: () => AxiosInstance, id: IntegerId) =>\n apiDeleteOne<ImageAware>(client, END_POINT + '/:id', { id }, SYSTEM_CMS, ENTITY)\n\nexport const bulkUpdateImages = (client: () => AxiosInstance, items: ImageCreateUpdateAware[]) => {\n return new Promise<ImageAware[]>((resolve, reject) => {\n updateImagesSequence(client, items)\n .then((responses) => {\n if (items.length === 0) {\n return resolve([])\n } else if (responses.length === 0) {\n return reject(responses)\n } else if (\n responses.every((res) => {\n return res.status === HTTP_STATUS_OK\n })\n ) {\n const images: ImageAware[] = responses.flatMap((response) => response.data.images)\n return resolve(images)\n } else {\n return reject(responses)\n }\n })\n .catch((err) => {\n //\n return reject(err)\n })\n })\n}\n\nasync function updateImagesSequence(client: () => AxiosInstance, items: ImageCreateUpdateAware[]) {\n const totalCalls = Math.ceil(items.length / BULK_METADATA_LIMIT)\n const responses: AxiosResponse[] = []\n if (items.length === 0) return Promise.resolve([])\n\n for (let i = 0; i < totalCalls; i++) {\n const offset = i * BULK_METADATA_LIMIT\n const reduced = items.slice(offset, offset + BULK_METADATA_LIMIT)\n const reqData = { images: reduced }\n const res = await client().put(END_POINT, JSON.stringify(reqData))\n responses.push(res)\n }\n return responses\n}\n","<script lang=\"ts\" setup>\nimport { ref, toRefs, watch } from 'vue'\nimport imagePlaceholderPath from '@/assets/image/placeholder16x9.jpg'\nimport type { ImageAware, ImageCreateUpdateAware } from '@/types/ImageAware'\nimport { cloneDeep, isNumber } from '@/utils/common'\nimport { useCommonAdminImageOptions } from '@/components/damImage/composables/commonAdminImageOptions'\nimport { useImageActions } from '@/components/damImage/composables/imageActions'\nimport type { IntegerIdNullable } from '@/types/common'\nimport { useAlerts } from '@/composables/system/alerts'\nimport { fetchImage } from '@/components/damImage/uploadQueue/api/imageApi'\nimport { useI18n } from 'vue-i18n'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: IntegerIdNullable | undefined\n image?: ImageAware | ImageCreateUpdateAware | undefined | null // optional, if available, no need to fetch image data\n configName?: string\n label?: string | undefined\n width?: number | undefined\n height?: undefined | number\n disableAspectRatio?: boolean\n aspectRatio?: number | string\n showDescription?: boolean\n showSource?: boolean\n damWidth?: undefined | number\n damHeight?: undefined | number\n useHtmlImg?: boolean\n widgetClass?: string | undefined\n }>(),\n {\n configName: 'default',\n label: undefined,\n image: undefined,\n width: undefined,\n height: undefined,\n disableAspectRatio: false,\n aspectRatio: 1.777, // 16/9\n showDescription: false,\n showSource: false,\n damWidth: undefined,\n damHeight: undefined,\n useHtmlImg: false,\n widgetClass: undefined,\n }\n)\n\nconst { showErrorsDefault } = useAlerts()\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst imageOptions = useCommonAdminImageOptions(props.configName)\nconst { imageClient } = imageOptions\nconst { widgetImageToDamImageUrl } = useImageActions(imageOptions)\n\nconst resImage = ref<null | ImageAware | ImageCreateUpdateAware>(null)\n\nconst { image, modelValue } = toRefs(props)\n\nconst resolvedSrc = ref('')\n\nconst { t } = useI18n()\n\nconst getImageUrl = (image: ImageAware | ImageCreateUpdateAware) => {\n if (isNumber(props.damWidth) && isNumber(props.damHeight)) {\n return widgetImageToDamImageUrl(image, props.damWidth, props.damHeight)\n }\n return widgetImageToDamImageUrl(image, imageOptions.imageWidth, imageOptions.imageHeight)\n}\n\nwatch(\n [image, modelValue],\n async ([newImage, newImageId]) => {\n resImage.value = null\n resolvedSrc.value = imagePlaceholderPath\n if (newImage) {\n resImage.value = cloneDeep(newImage)\n if (resImage.value) {\n resolvedSrc.value = getImageUrl(resImage.value)\n }\n return\n }\n if (newImageId) {\n try {\n resImage.value = await fetchImage(imageClient, newImageId)\n } catch (error) {\n showErrorsDefault(error)\n }\n if (resImage.value) {\n resolvedSrc.value = getImageUrl(resImage.value)\n }\n }\n },\n { immediate: true }\n)\n</script>\n\n<template>\n <h4\n v-if=\"label\"\n class=\"font-weight-bold text-subtitle-2\"\n >\n {{ label }}\n </h4>\n <img\n v-if=\"useHtmlImg\"\n alt=\"\"\n :src=\"resolvedSrc\"\n :width=\"width\"\n :height=\"height\"\n :class=\"widgetClass\"\n >\n <VImg\n v-else\n :lazy-src=\"imagePlaceholderPath\"\n :src=\"resolvedSrc\"\n :width=\"width\"\n :height=\"height\"\n cover\n loading=\"lazy\"\n max-width=\"100%\"\n class=\"disable-radius\"\n :class=\"widgetClass\"\n :aspect-ratio=\"disableAspectRatio ? undefined : aspectRatio\"\n >\n <template #placeholder>\n <div class=\"d-flex align-center justify-center h-100\">\n <VProgressCircular\n indeterminate\n color=\"grey-lighten-4\"\n />\n </div>\n </template>\n </VImg>\n <div\n v-if=\"resImage && (showDescription || showSource)\"\n class=\"pa-2\"\n >\n <VRow\n v-if=\"showDescription\"\n dense\n >\n <VCol>\n <span class=\"text-caption text-medium-emphasis\">{{ t('common.damImage.image.model.texts.description') }}:</span>\n <br>{{ resImage.texts.description }}\n </VCol>\n </VRow>\n <VRow\n v-if=\"showSource\"\n dense\n >\n <VCol>\n <span class=\"text-caption text-medium-emphasis\"> {{ t('common.damImage.image.model.texts.source') }}:</span>\n <br>{{ resImage.texts.source }}\n </VCol>\n </VRow>\n </div>\n <slot\n name=\"append\"\n :image=\"resImage\"\n />\n</template>\n\n<style lang=\"scss\">\n.v-img.disable-radius .v-img__img {\n border-radius: 0;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { COMMON_CONFIG } from '@/model/commonConfig'\nimport { computed } from 'vue'\nimport type { DocIdNullable } from '@/types/common'\nimport { useCommonAdminCoreDamOptionsGlobal } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport { useI18n } from 'vue-i18n'\n\nconst props = withDefaults(\n defineProps<{\n assetId?: DocIdNullable\n }>(),\n {\n assetId: null,\n }\n)\n\nconst { t } = useI18n()\nconst { adminDomain } = useCommonAdminCoreDamOptionsGlobal()\n\nconst href = computed(() => {\n return adminDomain + '/asset/' + props.assetId\n})\n</script>\n\n<template>\n <VBtn\n :append-icon=\"COMMON_CONFIG.CHIP.ICON.LINK_EXTERNAL\"\n size=\"small\"\n label\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n :href=\"href\"\n >\n {{ t('common.damImage.media.button.editInDam') }}\n </VBtn>\n</template>\n","import type { DatetimeUTCNullable, DocIdNullable, IntegerId, IntegerIdNullable } from '@/types/common'\n\nexport interface MediaAware<T extends DamMedia = DamMedia> {\n id?: IntegerId\n damMedia: T\n extService: 'damVideo' | 'damPodcast'\n}\n\nexport interface DamMedia {\n imageFileId: DocIdNullable\n assetId: DocIdNullable\n licenceId: IntegerIdNullable\n assetType: DamMediaTypeType\n title: string\n description: string\n seriesName: string\n authorNames: string[]\n publishedAt: DatetimeUTCNullable\n duration: number\n mediaUrl: string | null\n playable: boolean\n syncedWithDam: boolean\n episodeName: string\n episodeNumber: number | null\n}\n\nexport const DamMediaType = {\n Audio: 'audio',\n Video: 'video',\n} as const\nexport type DamMediaTypeType = (typeof DamMediaType)[keyof typeof DamMediaType]\n\nexport type DamMediaFromDam = Omit<DamMedia, 'syncedWithDam'>\n","<script lang=\"ts\" setup>\nimport ADialogToolbar from '@/components/ADialogToolbar.vue'\nimport { useI18n } from 'vue-i18n'\nimport AImageWidgetSimple from '@/components/damImage/AImageWidgetSimple.vue'\nimport AFormTextarea from '@/components/form/AFormTextarea.vue'\nimport { storeToRefs } from 'pinia'\nimport type { DocId } from '@/types/common'\nimport {\n AImageMetadataValidationScopeSymbol,\n useImageValidation,\n} from '@/components/damImage/uploadQueue/composables/uploadValidations'\nimport { useAlerts } from '@/composables/system/alerts'\nimport AuthorRemoteAutocompleteWithCached from '@/components/damImage/uploadQueue/author/AuthorRemoteAutocompleteWithCached.vue'\nimport ASystemEntityScope from '@/components/form/ASystemEntityScope.vue'\nimport { useAssetDetailStore } from '@/components/damImage/uploadQueue/composables/assetDetailStore'\nimport { useExtSystemIdForCached } from '@/components/damImage/uploadQueue/composables/extSystemIdForCached'\nimport { computed } from 'vue'\nimport {\n isImageCreateUpdateAware,\n isMediaAware,\n useImageMediaWidgetStore,\n} from '@/components/damImage/uploadQueue/composables/imageMediaWidgetStore'\nimport { DamAssetType, type DamAssetTypeType } from '@/types/coreDam/Asset'\nimport type { ImageCreateUpdateAware } from '@/types/ImageAware'\nimport ARow from '@/components/ARow.vue'\nimport DamAdminAssetLink from '@/components/dam/DamAdminAssetLink.vue'\nimport { isNull } from '@/utils/common'\nimport { DamMediaType } from '@/types/MediaAware'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: boolean\n saving: boolean\n loading: boolean\n expand?: boolean\n showDamAuthors?: boolean\n }>(),\n {\n expand: false,\n showDamAuthors: false,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'editAsset', data: DocId): void\n (e: 'onConfirm'): void\n (e: 'onClose'): void\n}>()\n\nconst { t } = useI18n()\nconst imageMediaWidgetStore = useImageMediaWidgetStore()\nconst { detail } = storeToRefs(imageMediaWidgetStore)\nconst assetDetailStore = useAssetDetailStore()\nconst { asset, authorConflicts } = storeToRefs(assetDetailStore)\nconst { cachedExtSystemId } = useExtSystemIdForCached()\n\nconst type = computed<DamAssetTypeType | null>(() => {\n if (isMediaAware(detail.value)) {\n return detail.value.damMedia.assetType === DamMediaType.Video ? DamAssetType.Video : DamAssetType.Audio\n } else if (isImageCreateUpdateAware(detail.value)) {\n return DamAssetType.Image\n }\n return null\n})\n\nconst imageSourceRequired = computed(() => {\n return !props.showDamAuthors\n})\n\nconst imageMedia = computed<ImageCreateUpdateAware | undefined>(() => {\n if (!isMediaAware(detail.value) || isNull(detail.value.damMedia.imageFileId)) return undefined\n\n return {\n texts: {\n description: '',\n source: '',\n },\n dam: {\n damId: detail.value.damMedia.imageFileId,\n licenceId: detail.value.damMedia.licenceId!,\n regionPosition: 0,\n },\n flags: {\n showSource: false,\n },\n }\n})\n\nconst { v$ } = useImageValidation(detail, imageSourceRequired)\n\nconst { showValidationError } = useAlerts()\n\nconst onConfirm = () => {\n v$.value.$touch()\n if (v$.value.$invalid) {\n showValidationError()\n return\n }\n emit('onConfirm')\n}\n\nconst onDialogModelUpdate = (newValue: boolean) => {\n if (newValue) return\n emit('onClose')\n}\n\nconst onEditAsset = () => {\n if (!isImageCreateUpdateAware(detail.value)) return\n emit('editAsset', detail.value.dam.damId)\n}\n\ndefineExpose({\n confirm: onConfirm,\n})\n</script>\n\n<template>\n <div v-if=\"expand\">\n <VRow v-if=\"loading\">\n <VCol>\n <div class=\"d-flex align-center justify-center\">\n <VProgressCircular indeterminate />\n </div>\n </VCol>\n </VRow>\n <template v-if=\"isImageCreateUpdateAware(detail)\">\n <VRow>\n <VCol>\n <VBtn @click.stop=\"onEditAsset\">\n {{ t('common.damImage.image.button.editAsset') }}\n </VBtn>\n </VCol>\n </VRow>\n <VRow>\n <VCol>\n <AFormTextarea\n v-model=\"detail.texts.description\"\n :label=\"t('common.damImage.image.model.texts.description')\"\n :help=\"t('common.damImage.image.help.texts.description')\"\n />\n </VCol>\n </VRow>\n <VRow v-if=\"showDamAuthors && asset\">\n <VCol>\n <ASystemEntityScope\n subject=\"author\"\n system=\"dam\"\n >\n <AuthorRemoteAutocompleteWithCached\n v-model=\"asset.authors\"\n :ext-system=\"cachedExtSystemId\"\n :label=\"t('common.damImage.asset.model.authors')\"\n :author-conflicts=\"authorConflicts\"\n data-cy=\"custom-field-authors\"\n clearable\n multiple\n :validation-scope=\"AImageMetadataValidationScopeSymbol\"\n />\n </ASystemEntityScope>\n </VCol>\n </VRow>\n <VRow v-else>\n <VCol>\n <AFormTextarea\n v-model=\"detail.texts.source\"\n :label=\"t('common.damImage.image.model.texts.source')\"\n :v=\"v$.image?.texts.source\"\n />\n </VCol>\n </VRow>\n <VRow>\n <VCol>\n <VSwitch\n v-model=\"detail.flags.showSource\"\n :label=\"t('common.damImage.image.model.flags.showSource')\"\n density=\"compact\"\n hide-details\n />\n </VCol>\n </VRow>\n </template>\n <template v-else-if=\"isMediaAware(detail)\">\n <div>\n {{ detail.damMedia }}\n </div>\n </template>\n </div>\n <VDialog\n v-else\n :model-value=\"modelValue\"\n :max-width=\"500\"\n eager\n @update:model-value=\"onDialogModelUpdate\"\n >\n <VCard v-if=\"modelValue\">\n <ADialogToolbar @on-cancel=\"onDialogModelUpdate(false)\">\n {{ type === DamAssetType.Image ? t('common.damImage.image.meta.edit') : t('common.damImage.media.meta.edit') }}\n </ADialogToolbar>\n <VCardText>\n <div\n v-if=\"loading\"\n class=\"d-flex align-center justify-center\"\n >\n <VProgressCircular indeterminate />\n </div>\n <div\n v-else-if=\"isImageCreateUpdateAware(detail)\"\n class=\"position-relative\"\n >\n <div class=\"my-4\">\n <AImageWidgetSimple\n :model-value=\"detail.id\"\n :image=\"detail\"\n />\n </div>\n <VRow>\n <VCol>\n <VBtn @click.stop=\"onEditAsset\">\n {{ t('common.damImage.image.button.editAsset') }}\n </VBtn>\n </VCol>\n </VRow>\n <VRow>\n <VCol>\n <AFormTextarea\n v-model=\"detail.texts.description\"\n :label=\"t('common.damImage.image.model.texts.description')\"\n :help=\"t('common.damImage.image.help.texts.description')\"\n />\n </VCol>\n </VRow>\n <VRow v-if=\"showDamAuthors && asset\">\n <VCol>\n <ASystemEntityScope\n subject=\"author\"\n system=\"dam\"\n >\n <AuthorRemoteAutocompleteWithCached\n v-model=\"asset.authors\"\n :ext-system=\"cachedExtSystemId\"\n :label=\"t('common.damImage.asset.model.authors')\"\n :author-conflicts=\"authorConflicts\"\n data-cy=\"custom-field-authors\"\n clearable\n multiple\n :validation-scope=\"AImageMetadataValidationScopeSymbol\"\n />\n </ASystemEntityScope>\n </VCol>\n </VRow>\n <VRow v-else>\n <VCol>\n <AFormTextarea\n v-model=\"detail.texts.source\"\n :label=\"t('common.damImage.image.model.texts.source')\"\n :v=\"v$.image?.texts.source\"\n required\n />\n </VCol>\n </VRow>\n <VRow>\n <VCol>\n <VSwitch\n v-model=\"detail.flags.showSource\"\n :label=\"t('common.damImage.image.model.flags.showSource')\"\n density=\"compact\"\n hide-details\n />\n </VCol>\n </VRow>\n </div>\n <div\n v-else-if=\"isMediaAware(detail)\"\n class=\"position-relative\"\n >\n <div class=\"my-4\">\n <h4 class=\"font-weight-bold text-subtitle-2\">\n {{ t('common.damImage.media.meta.preview') }}:\n </h4>\n <slot\n name=\"preview\"\n :image-media=\"detail\"\n />\n <AImageWidgetSimple\n v-if=\"!detail.damMedia.playable\"\n :model-value=\"null\"\n :image=\"imageMedia\"\n />\n </div>\n <VRow>\n <VCol>\n <DamAdminAssetLink :asset-id=\"detail.damMedia.assetId\" />\n </VCol>\n </VRow>\n <div\n v-if=\"!detail.damMedia.playable\"\n class=\"my-2 text-warning text-caption\"\n >\n <VIcon\n icon=\"mdi-movie-off-outline\"\n class=\"mr-1\"\n size=\"small\"\n />{{ t('common.damImage.media.meta.notPlayable') }}\n </div>\n <ARow :title=\"t('common.damImage.media.model.damMedia.title')\">\n {{ detail.damMedia.title }}\n </ARow>\n <ARow :title=\"t('common.damImage.media.model.damMedia.authorNames')\">\n {{ detail.damMedia.authorNames.join(', ') }}\n </ARow>\n <template v-if=\"detail.damMedia.assetType === 'audio'\">\n <ARow :title=\"t('common.damImage.media.model.damMedia.seriesName')\">\n {{ detail.damMedia.seriesName }}\n </ARow>\n <ARow :title=\"t('common.damImage.media.model.damMedia.episodeName')\">\n {{ detail.damMedia.episodeName }}\n </ARow>\n <ARow :title=\"t('common.damImage.media.model.damMedia.episodeNumber')\">\n {{ detail.damMedia.episodeNumber }}\n </ARow>\n </template>\n <ARow :title=\"t('common.damImage.media.model.damMedia.assetId')\">\n {{ detail.damMedia.assetId }}\n </ARow>\n <ARow :title=\"t('common.damImage.media.model.damMedia.licenceId')\">\n {{ detail.damMedia.licenceId }}\n </ARow>\n </div>\n </VCardText>\n <VCardActions>\n <VSpacer />\n <ABtnPrimary\n :loading=\"saving\"\n :disabled=\"loading\"\n @click.stop=\"onConfirm\"\n >\n {{ t('common.button.confirm') }}\n </ABtnPrimary>\n </VCardActions>\n </VCard>\n </VDialog>\n</template>\n","<script setup lang=\"ts\">\nimport { useTheme } from '@/composables/themeSettings'\n\nconst emit = defineEmits<{\n (e: 'closeDialog'): void\n}>()\n\nconst { toolbarColor } = useTheme()\n\nconst closeDialog = () => {\n emit('closeDialog')\n}\n</script>\n\n<template>\n <VCard class=\"dam-image-detail\">\n <div class=\"d-flex flex-column w-100 h-100\">\n <VToolbar\n :color=\"toolbarColor\"\n density=\"compact\"\n :height=\"64\"\n class=\"system-border-b\"\n >\n <div class=\"text-subtitle-2 d-flex\" />\n <VSpacer />\n <div>\n <VBtn\n icon\n variant=\"text\"\n :width=\"36\"\n :height=\"36\"\n class=\"mr-1\"\n @click.stop=\"closeDialog\"\n >\n <VIcon icon=\"mdi-close\" />\n </VBtn>\n </div>\n </VToolbar>\n <div class=\"d-flex w-100 h-100 justify-center align-center\">\n <VProgressCircular\n indeterminate\n color=\"primary\"\n />\n </div>\n </div>\n </VCard>\n</template>\n","import { useI18n } from 'vue-i18n'\n\nconst MINUTE_IN_SECONDS = 60\nconst HOUR_IN_SECONDS = 3600\nconst DAY_IN_SECONDS = 86400\n\nexport function useRemainingTime() {\n const { t } = useI18n()\n\n const remainingTime = (seconds: number, short: boolean): string => {\n const prefix = short ? 'common.time.short.' : 'common.time.long.'\n if (seconds > DAY_IN_SECONDS) {\n return t(prefix + 'remainingDays', { value: Math.floor(seconds / DAY_IN_SECONDS) })\n }\n if (seconds > HOUR_IN_SECONDS) {\n return t(prefix + 'remainingHours', { value: Math.floor(seconds / HOUR_IN_SECONDS) })\n }\n if (seconds > MINUTE_IN_SECONDS) {\n return t(prefix + 'remainingMinutes', { value: Math.floor(seconds / MINUTE_IN_SECONDS) })\n }\n return t(prefix + 'remainingSeconds', { value: seconds })\n }\n\n const remainingTimeShort = (seconds: number): string => {\n return remainingTime(seconds, true)\n }\n\n const remainingTimeLong = (seconds: number): string => {\n return remainingTime(seconds, false)\n }\n\n return {\n remainingTimeShort,\n remainingTimeLong,\n }\n}\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport placeholder16x9 from '@/assets/image/placeholder16x9.jpg'\nimport {\n type AssetFileProperties,\n DamAssetStatus,\n type DamAssetStatusType,\n DamAssetType,\n type DamAssetTypeType,\n} from '@/types/coreDam/Asset'\nimport { isUndefined } from '@/utils/common'\nimport { useRemainingTime } from '@/composables/datetime/remainingTime'\nimport AssetImageMetaIcons from '@/components/damImage/uploadQueue/components/AssetImageMetaIcons.vue'\n\nconst props = withDefaults(\n defineProps<{\n src?: string\n assetType?: DamAssetTypeType\n assetStatus?: DamAssetStatusType\n backgroundColor?: string\n width?: number\n height?: number\n fallbackHeight?: number\n iconSize?: number\n useComponent?: boolean\n cover?: boolean\n aspectRatio?: number\n showUploading?: boolean\n showProcessing?: boolean\n showWaiting?: boolean\n showDone?: boolean\n uploadingColor?: string\n processingColor?: string\n disableProcessingText?: boolean\n uploadingProgress?: number | null\n remainingTime?: number | null\n hideIcon?: boolean\n showMetaIcons?: boolean\n assetFileProperties?: AssetFileProperties | undefined\n }>(),\n {\n assetType: DamAssetType.Image,\n assetStatus: DamAssetStatus.WithFile,\n src: undefined,\n backgroundColor: '#ccc',\n width: undefined,\n height: undefined,\n fallbackHeight: 200,\n iconSize: 80,\n useComponent: false,\n cover: false,\n aspectRatio: undefined,\n showUploading: false,\n showProcessing: false,\n showWaiting: false,\n showDone: false,\n uploadingColor: 'primary',\n processingColor: 'primary',\n disableProcessingText: false,\n uploadingProgress: null,\n remainingTime: null,\n hideIcon: false,\n showMetaIcons: false,\n assetFileProperties: undefined,\n }\n)\nconst emit = defineEmits<{\n (e: 'load'): void\n (e: 'error'): void\n}>()\n\nconst { t } = useI18n()\n\nconst onLoad = () => {\n emit('load')\n}\nconst onError = () => {\n emit('error')\n}\n\nconst icon = computed(() => {\n if (props.assetStatus === DamAssetStatus.Deleting) return 'mdi-trash-can'\n switch (props.assetType) {\n case DamAssetType.Audio:\n return props.assetStatus === DamAssetStatus.WithFile ? 'mdi-music' : 'mdi-music-off'\n case DamAssetType.Document:\n return props.assetStatus === DamAssetStatus.WithFile ? 'mdi-note' : 'mdi-note-off'\n case DamAssetType.Video:\n return props.assetStatus === DamAssetStatus.WithFile ? 'mdi-video' : 'mdi-video-off'\n case DamAssetType.Image:\n return props.assetStatus === DamAssetStatus.WithFile ? 'mdi-image' : 'mdi-image-off'\n default:\n return ''\n }\n})\n\nconst uploadingPercentage = computed(() => {\n if (!props.uploadingProgress) return '0%'\n const value = Math.ceil(props.uploadingProgress)\n return value > 100 ? '100%' : value + '%'\n})\n\nconst backgroundColorComputed = computed(() => {\n const grayBackgroundStatuses: readonly DamAssetStatusType[] = [DamAssetStatus.Deleting, DamAssetStatus.Draft]\n return grayBackgroundStatuses.includes(props.assetStatus) ? '#ccc' : props.backgroundColor\n})\n\nconst iconColor = computed(() => {\n return props.assetStatus === DamAssetStatus.WithFile ? '#505050' : '#8f8f8f'\n})\n\nconst srcComputed = computed(() => {\n return isUndefined(props.src) ? placeholder16x9 : props.src\n})\n\nconst showIconComputed = computed(() => {\n if (props.hideIcon) return false\n else if (props.assetType === DamAssetType.Image && props.src) return false\n return true\n})\n\nconst { remainingTimeShort } = useRemainingTime()\n</script>\n\n<template>\n <VImg\n v-if=\"showUploading || showProcessing || showWaiting\"\n :aspect-ratio=\"aspectRatio\"\n :src=\"srcComputed\"\n :width=\"width\"\n :height=\"height\"\n :cover=\"cover\"\n class=\"asset-image asset-image--loading-bg\"\n @error=\"onError\"\n @load=\"onLoad\"\n >\n <template #placeholder />\n <template #default>\n <div\n v-if=\"showWaiting\"\n class=\"asset-image__progress\"\n >\n <VProgressCircular\n indeterminate\n :size=\"iconSize\"\n :width=\"iconSize / 10\"\n />\n <div class=\"text-caption text-center\">\n {{ t('common.damImage.upload.waiting') }}\n </div>\n </div>\n <div\n v-if=\"showProcessing\"\n class=\"asset-image__progress\"\n >\n <VProgressCircular\n :color=\"processingColor\"\n indeterminate\n :size=\"iconSize\"\n :width=\"iconSize / 10\"\n class=\"ml-auto mr-auto\"\n />\n <div\n v-if=\"!disableProcessingText\"\n class=\"text-caption text-center\"\n >\n {{ t('common.damImage.upload.processing') }}\n </div>\n </div>\n <div\n v-else-if=\"showUploading\"\n class=\"asset-image__progress\"\n >\n <VProgressCircular\n :color=\"uploadingColor\"\n :size=\"iconSize\"\n :width=\"iconSize / 10\"\n class=\"ml-auto mr-auto\"\n :model-value=\"uploadingProgress === null ? undefined : uploadingProgress\"\n >\n {{ uploadingPercentage }}\n </VProgressCircular>\n <div class=\"text-caption text-center\">\n {{ t('common.damImage.upload.uploading') }}\n <span\n v-if=\"remainingTime\"\n class=\"font-weight-bold\"\n >\n {{ remainingTimeShort(remainingTime) }}\n </span>\n </div>\n </div>\n </template>\n </VImg>\n <VImg\n v-else-if=\"assetStatus === DamAssetStatus.WithFile && src && useComponent\"\n :src=\"srcComputed\"\n :width=\"width\"\n :height=\"height\"\n class=\"asset-image asset-image--component position-relative\"\n :cover=\"cover\"\n :aspect-ratio=\"aspectRatio\"\n @load=\"onLoad\"\n @error=\"onError\"\n >\n <template #placeholder />\n <template #default>\n <div\n v-if=\"showIconComputed\"\n class=\"asset-image__icon-wrapper\"\n >\n <div\n class=\"asset-image__icon-circle\"\n :style=\"{ padding: iconSize / 4 + 'px' }\"\n >\n <VIcon\n v-if=\"icon.length\"\n :size=\"iconSize\"\n :icon=\"icon\"\n :color=\"iconColor\"\n />\n </div>\n </div>\n <div\n v-if=\"showDone\"\n class=\"asset-image__progress asset-image__progress--animate-done\"\n >\n <VIcon\n icon=\"mdi-check-circle\"\n color=\"success\"\n :size=\"iconSize\"\n />\n <div class=\"text-caption text-center\">\n {{ t('common.damImage.upload.done') }}\n </div>\n </div>\n <AssetImageMetaIcons\n v-if=\"showMetaIcons && assetFileProperties\"\n :asset-file-properties=\"assetFileProperties\"\n :asset-type=\"assetType\"\n />\n </template>\n </VImg>\n <div\n v-else-if=\"assetStatus === DamAssetStatus.WithFile && src\"\n class=\"asset-image asset-image--img position-relative\"\n >\n <img\n :src=\"srcComputed\"\n :width=\"width\"\n :height=\"height\"\n alt=\"\"\n :style=\"'background-color:' + backgroundColorComputed\"\n @onerror=\"onError\"\n >\n <div\n v-if=\"showIconComputed\"\n class=\"asset-image__icon-wrapper\"\n >\n <div\n class=\"asset-image__icon-circle\"\n :style=\"{ padding: iconSize / 4 + 'px' }\"\n >\n <VIcon\n v-if=\"icon.length\"\n :size=\"iconSize\"\n :icon=\"icon\"\n :color=\"iconColor\"\n class=\"asset-image__icon\"\n />\n </div>\n </div>\n <AssetImageMetaIcons\n v-if=\"showMetaIcons && assetFileProperties\"\n :asset-file-properties=\"assetFileProperties\"\n :asset-type=\"assetType\"\n />\n </div>\n <div\n v-else\n :style=\"{ height: fallbackHeight + 'px', backgroundColor: backgroundColorComputed, width: width + 'px' }\"\n class=\"asset-image asset-image--placeholder d-flex align-center justify-center\"\n >\n <div\n v-if=\"showIconComputed\"\n class=\"asset-image__icon-wrapper\"\n >\n <div\n class=\"asset-image__icon-circle\"\n :style=\"{ padding: iconSize / 4 + 'px' }\"\n >\n <VIcon\n v-if=\"icon.length\"\n :size=\"iconSize\"\n :icon=\"icon\"\n :color=\"iconColor\"\n class=\"asset-image__icon\"\n />\n </div>\n </div>\n <div\n v-if=\"showDone\"\n class=\"asset-image__progress asset-image__progress--animate-done\"\n >\n <VIcon\n icon=\"mdi-check-circle\"\n color=\"success\"\n :size=\"iconSize\"\n />\n <div class=\"text-caption text-center\">\n {{ t('common.damImage.upload.done') }}\n </div>\n </div>\n <AssetImageMetaIcons\n v-if=\"showMetaIcons && assetFileProperties\"\n :asset-file-properties=\"assetFileProperties\"\n :asset-type=\"assetType\"\n />\n </div>\n</template>\n","import { useI18n } from 'vue-i18n'\nimport { ref } from 'vue'\nimport type { ValueObjectOption } from '@/types/ValueObject'\nimport { AssetFileFailReason, type AssetFileFailReasonType } from '@/types/coreDam/AssetFile'\n\nexport function useAssetFileFailReason() {\n const { t } = useI18n()\n\n const assetFileFailReasonOptions = ref<ValueObjectOption<AssetFileFailReasonType>[]>([\n {\n value: AssetFileFailReason.None,\n title: t('common.damImage.asset.assetFileFailReason.none'),\n },\n {\n value: AssetFileFailReason.Unknown,\n title: t('common.damImage.asset.assetFileFailReason.unknown'),\n },\n {\n value: AssetFileFailReason.InvalidChecksum,\n title: t('common.damImage.asset.assetFileFailReason.invalidChecksum'),\n },\n {\n value: AssetFileFailReason.InvalidMimeType,\n title: t('common.damImage.asset.assetFileFailReason.invalidMimeType'),\n },\n {\n value: AssetFileFailReason.DownloadFailed,\n title: t('common.damImage.asset.assetFileFailReason.downloadFailed'),\n },\n {\n value: AssetFileFailReason.InvalidSize,\n title: t('common.damImage.asset.assetFileFailReason.invalidSize'),\n },\n ])\n\n const getAssetFileFailReasonOption = (value: AssetFileFailReasonType) => {\n return assetFileFailReasonOptions.value.find((item) => item.value === value)\n }\n\n return {\n assetFileFailReasonOptions,\n getAssetFileFailReasonOption,\n }\n}\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport type { AssetFileFailReasonType } from '@/types/coreDam/AssetFile'\nimport { useAssetFileFailReason } from '@/components/damImage/uploadQueue/composables/assetFileFailReason'\nimport AChipNoLink from '@/components/AChipNoLink.vue'\n\nconst props = withDefaults(\n defineProps<{\n reason: AssetFileFailReasonType\n }>(),\n {}\n)\n\nconst { getAssetFileFailReasonOption } = useAssetFileFailReason()\nconst reasonOption = computed(() => {\n return getAssetFileFailReasonOption(props.reason)\n})\n</script>\n\n<template>\n <AChipNoLink v-if=\"reasonOption\">\n {{ reasonOption.title }}\n </AChipNoLink>\n</template>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport {\n type AssetFileFailReasonType,\n AssetFileProcessStatus,\n type AssetFileProcessStatusType,\n} from '@/types/coreDam/AssetFile'\nimport { DamAssetStatus, type DamAssetStatusType } from '@/types/coreDam/Asset'\nimport AssetFileFailReasonChip from '@/components/damImage/uploadQueue/components/AssetFileFailReasonChip.vue'\n\nwithDefaults(\n defineProps<{\n assetStatus: DamAssetStatusType\n assetMainFileStatus?: AssetFileProcessStatusType | undefined\n assetMainFileFailReason?: AssetFileFailReasonType | undefined\n }>(),\n {\n assetMainFileStatus: undefined,\n assetMainFileFailReason: undefined,\n }\n)\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <div\n v-if=\"assetMainFileStatus && assetMainFileStatus === AssetFileProcessStatus.Duplicate\"\n class=\"w-100 pa-2 text-caption\"\n >\n <VAlert\n dark\n type=\"warning\"\n >\n {{ t('common.damImage.asset.detail.info.status.duplicate') }}\n </VAlert>\n </div>\n <div\n v-if=\"assetMainFileStatus && assetMainFileStatus === AssetFileProcessStatus.Failed\"\n class=\"w-100 pa-2 text-caption\"\n >\n <VAlert\n dark\n type=\"error\"\n >\n {{ t('common.damImage.asset.detail.info.status.failed') }}\n <div v-if=\"assetMainFileFailReason\">\n <br>\n <AssetFileFailReasonChip :reason=\"assetMainFileFailReason\" />\n </div>\n </VAlert>\n </div>\n <div\n v-else-if=\"assetStatus === DamAssetStatus.Deleting\"\n class=\"w-100 pa-2 text-caption\"\n >\n <VAlert\n dark\n type=\"error\"\n >\n {{ t('common.damImage.asset.detail.info.status.deleting') }}\n </VAlert>\n </div>\n <div\n v-else-if=\"assetStatus === DamAssetStatus.Draft\"\n class=\"w-100 pa-2 text-caption\"\n >\n <VAlert\n dark\n type=\"warning\"\n >\n {{ t('common.damImage.asset.detail.info.status.draft') }}\n </VAlert>\n </div>\n</template>\n","import { computed, ref } from 'vue'\nimport type { UploadQueueKey } from '@/types/coreDam/UploadQueue'\n\nexport const CLASS_PREFIX = 'teleport-target-'\n\nconst mountedDivClasses = ref(new Set<string>())\n\nexport function useAssetDetailSidebarActionbar(uploadKey: UploadQueueKey) {\n const mounted = () => {\n mountedDivClasses.value.add(CLASS_PREFIX + uploadKey)\n }\n\n const unMounted = () => {\n mountedDivClasses.value.delete(CLASS_PREFIX + uploadKey)\n }\n\n const canTeleport = computed(() => {\n return mountedDivClasses.value.has(CLASS_PREFIX + uploadKey)\n })\n\n const divClassName = computed(() => {\n return CLASS_PREFIX + uploadKey\n })\n\n return {\n divClassName,\n canTeleport,\n mounted,\n unMounted,\n }\n}\n","<script lang=\"ts\" setup>\nimport { useAssetDetailSidebarActionbar } from '@/components/damImage/uploadQueue/composables/assetDetailSidebarActionbar'\nimport type { UploadQueueKey } from '@/types/coreDam/UploadQueue'\n\nconst props = withDefaults(\n defineProps<{\n queueKey: UploadQueueKey\n }>(),\n {}\n)\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { canTeleport, divClassName } = useAssetDetailSidebarActionbar(props.queueKey)\n</script>\n\n<template>\n <Teleport\n v-if=\"canTeleport\"\n :to=\"'.' + divClassName\"\n >\n <div class=\"w-100 text-right\">\n <slot />\n </div>\n </Teleport>\n</template>\n","<script lang=\"ts\" setup>\nimport AssetDetailSidebarActionsWrapper from '@/components/damImage/uploadQueue/components/AssetDetailSidebarActionsWrapper.vue'\nimport { isNull } from '@/utils/common'\nimport { useI18n } from 'vue-i18n'\nimport { ref } from 'vue'\nimport { useAlerts } from '@/composables/system/alerts'\nimport useVuelidate from '@vuelidate/core'\nimport type { DamAssetTypeType } from '@/types/coreDam/Asset'\nimport { useAssetDetailStore } from '@/components/damImage/uploadQueue/composables/assetDetailStore'\nimport { storeToRefs } from 'pinia'\nimport AssetMetadata from '@/components/damImage/uploadQueue/components/AssetMetadata.vue'\nimport { updateAssetMetadata } from '@/components/damImage/uploadQueue/api/damAssetApi'\nimport { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport { ADamAssetMetadataValidationScopeSymbol } from '@/components/damImage/uploadQueue/composables/uploadValidations'\nimport { useUploadQueuesStore } from '@/components/damImage/uploadQueue/composables/uploadQueuesStore'\nimport type { UploadQueueKey } from '@/types/coreDam/UploadQueue'\nimport type { IntegerId } from '@/types/common'\n\nconst props = withDefaults(\n defineProps<{\n queueKey: UploadQueueKey\n isActive: boolean\n dataCy?: string\n assetType: DamAssetTypeType\n extSystem: IntegerId\n }>(),\n {\n dataCy: undefined,\n }\n)\n\nconst { t } = useI18n()\n\nconst assetDetailStore = useAssetDetailStore()\nconst { asset, updateUploadStore, mainFileSingleUse } = storeToRefs(assetDetailStore)\nconst uploadQueueStore = useUploadQueuesStore()\n\nconst saveButtonLoading = ref(false)\n\nconst { showRecordWas, showValidationError, showErrorsDefault } = useAlerts()\n\nconst v$ = useVuelidate({ $scope: ADamAssetMetadataValidationScopeSymbol, $stopPropagation: true })\n\nconst { damClient } = useCommonAdminCoreDamOptions()\n\nconst onSave = async () => {\n if (isNull(asset.value)) return\n saveButtonLoading.value = true\n v$.value.$touch()\n if (v$.value.$invalid) {\n showValidationError()\n saveButtonLoading.value = false\n return\n }\n try {\n await updateAssetMetadata(damClient, asset.value, props.extSystem, mainFileSingleUse.value)\n if (updateUploadStore.value && !isNull(asset.value)) {\n await uploadQueueStore.updateFromDetail(asset.value)\n }\n showRecordWas('updated')\n } catch (error) {\n showErrorsDefault(error)\n } finally {\n saveButtonLoading.value = false\n }\n}\n</script>\n\n<template>\n <AssetDetailSidebarActionsWrapper\n v-if=\"isActive\"\n :queue-key=\"queueKey\"\n >\n <ABtnPrimary\n type=\"submit\"\n class=\"ml-2\"\n data-cy=\"button-save\"\n :loading=\"saveButtonLoading\"\n @click.stop=\"onSave\"\n >\n {{ t('common.button.save') }}\n </ABtnPrimary>\n </AssetDetailSidebarActionsWrapper>\n <AssetMetadata :ext-system=\"extSystem\" />\n</template>\n","import { acceptHMRUpdate, defineStore } from 'pinia'\nimport type { AssetFileImage } from '@/types/coreDam/AssetFile'\nimport type { RegionOfInterest } from '@/types/coreDam/Roi'\nimport { ref } from 'vue'\n\nexport const useImageRoiStore = defineStore('damImageRoiStore', () => {\n const imageFile = ref<null | AssetFileImage>(null)\n const loader = ref(false)\n const roi = ref<null | RegionOfInterest>(null)\n\n function setImageFile(newFile: AssetFileImage | null) {\n imageFile.value = newFile\n }\n\n function setRoi(newRoi: RegionOfInterest | null) {\n roi.value = newRoi\n }\n\n function showLoader() {\n loader.value = true\n }\n\n function hideLoader() {\n loader.value = false\n }\n\n function reset() {\n imageFile.value = null\n loader.value = false\n roi.value = null\n }\n\n return {\n imageFile,\n loader,\n roi,\n setImageFile,\n setRoi,\n showLoader,\n hideLoader,\n reset,\n }\n})\n\nif (import.meta.hot) {\n import.meta.hot.accept(acceptHMRUpdate(useImageRoiStore, import.meta.hot))\n}\n","<script lang=\"ts\" setup>\nimport { ref } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport type { DocId } from '@/types/common'\nimport { useAlerts } from '@/composables/system/alerts'\nimport { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport { rotateImage } from '@/components/damImage/uploadQueue/api/damImageApi'\n\nconst props = withDefaults(\n defineProps<{\n imageId: DocId\n dataCy?: string\n }>(),\n {\n dataCy: undefined,\n }\n)\nconst emit = defineEmits<{\n (e: 'afterRotate'): void\n}>()\n\nconst { showRecordWas, showErrorsDefault } = useAlerts()\n\nconst loading = ref(false)\n\nconst { damClient } = useCommonAdminCoreDamOptions()\n\nconst rotate = async (angle: 90 | 270) => {\n try {\n loading.value = true\n await rotateImage(damClient, props.imageId, angle)\n showRecordWas('updated')\n emit('afterRotate')\n } catch (e) {\n showErrorsDefault(e)\n } finally {\n loading.value = false\n }\n}\nconst { t } = useI18n()\n</script>\n\n<template>\n <div>\n <div class=\"text-caption\">\n {{ t('common.damImage.asset.detail.roi.rotate.rotateMainFileImage') }}\n </div>\n <div\n v-if=\"loading\"\n class=\"w-100 d-flex align-center justify-center\"\n >\n <VProgressCircular\n indeterminate\n color=\"primary\"\n />\n </div>\n <div v-else>\n <ABtnTertiary\n prepend-icon=\"mdi-rotate-right\"\n class=\"mr-2\"\n data-cy=\"button-rotate-right\"\n @click.stop=\"rotate(90)\"\n >\n {{ t('common.damImage.asset.detail.roi.rotate.rotateClockwise') }}\n </ABtnTertiary>\n <ABtnTertiary\n prepend-icon=\"mdi-rotate-left\"\n data-cy=\"button-rotate-left\"\n @click.stop=\"rotate(270)\"\n >\n {{ t('common.damImage.asset.detail.roi.rotate.rotateCounterclockwise') }}\n </ABtnTertiary>\n </div>\n </div>\n</template>\n","import type { RegionOfInterest } from '@/types/coreDam/Roi'\nimport type { AxiosInstance } from 'axios'\nimport type { DocId } from '@/types/common'\nimport { apiFetchOne } from '@/services/api/apiFetchOne'\nimport { apiUpdateOne } from '@/services/api/apiUpdateOne'\nimport { useApiFetchList } from '@/labs/api/useApiFetchList'\nimport { SYSTEM_CORE_DAM } from '@/components/damImage/uploadQueue/api/damAssetApi'\n\nconst END_POINT = '/adm/v1/roi'\nconst END_POINT_IMAGE_ROI = '/adm/v1/image/:id/roi'\nexport const ENTITY = 'asset'\n\nexport const fetchRoi = (client: () => AxiosInstance, id: DocId) =>\n apiFetchOne<RegionOfInterest>(client, END_POINT + '/:id', { id }, SYSTEM_CORE_DAM, ENTITY)\n\nexport const updateRoi = (client: () => AxiosInstance, id: DocId, data: RegionOfInterest) =>\n apiUpdateOne<RegionOfInterest>(client, data, END_POINT + '/:id', { id }, SYSTEM_CORE_DAM, ENTITY)\n\nexport const useFetchImageRoiList = (client: () => AxiosInstance, imageId: DocId) =>\n useApiFetchList<any[]>(client, SYSTEM_CORE_DAM, ENTITY, END_POINT_IMAGE_ROI, { id: imageId })\n","<script lang=\"ts\" setup>\nimport { useAssetDetailStore } from '@/components/damImage/uploadQueue/composables/assetDetailStore'\nimport { useImageRoiStore } from '@/components/damImage/uploadQueue/composables/imageRoiStore'\nimport { useI18n } from 'vue-i18n'\nimport { usePagination } from '@/labs/filters/pagination'\nimport { assetFileIsImageFile } from '@/types/coreDam/AssetFile'\nimport { cloneDeep } from '@/utils/common'\nimport { onMounted } from 'vue'\nimport AssetDetailSidebarActionsWrapper from '@/components/damImage/uploadQueue/components/AssetDetailSidebarActionsWrapper.vue'\nimport AssetFileRotate from '@/components/damImage/uploadQueue/components/AssetFileRotate.vue'\nimport { ENTITY, fetchRoi, useFetchImageRoiList } from '@/components/damImage/uploadQueue/api/damImageRoiApi'\nimport { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport type { UploadQueueKey } from '@/types/coreDam/UploadQueue'\nimport { SORT_BY_ID } from '@/composables/system/datatableColumns'\nimport { createFilter, createFilterStore, type MakeFilterOption } from '@/labs/filters/filterFactory'\nimport { SYSTEM_CORE_DAM } from '@/components/damImage/uploadQueue/api/damAssetApi'\nimport { fetchImageFile } from '@/components/damImage/uploadQueue/api/damImageApi'\nimport type { DocId } from '@/types/common'\n\nwithDefaults(\n defineProps<{\n isActive: boolean\n queueKey: UploadQueueKey\n }>(),\n {}\n)\n\nconst { t } = useI18n()\n\nconst imageRoiStore = useImageRoiStore()\nconst assetDetailStore = useAssetDetailStore()\n\nconst { pagination } = usePagination(SORT_BY_ID)\n\nconst { damClient } = useCommonAdminCoreDamOptions()\nconst filterFieldsInner = [] satisfies readonly MakeFilterOption[]\nconst { filterConfig, filterData } = createFilter(filterFieldsInner, createFilterStore(filterFieldsInner), {\n system: SYSTEM_CORE_DAM,\n subject: ENTITY,\n})\n\nconst loadImageFile = async (id: DocId) => {\n const res = await fetchImageFile(damClient, id)\n imageRoiStore.setImageFile(res)\n}\n\nconst loadRois = async (forceReloadFile = false) => {\n imageRoiStore.showLoader()\n if (imageRoiStore.imageFile) {\n const { executeFetch } = useFetchImageRoiList(damClient, imageRoiStore.imageFile.id)\n const res = await executeFetch(pagination, filterData, filterConfig)\n if (res.length > 0 && res[0].id) {\n const roi = await fetchRoi(damClient, res[0].id)\n if (forceReloadFile) {\n await loadImageFile(imageRoiStore.imageFile.id)\n }\n imageRoiStore.setRoi(roi)\n imageRoiStore.hideLoader()\n return\n }\n imageRoiStore.setRoi(null)\n imageRoiStore.hideLoader()\n return\n }\n imageRoiStore.setRoi(null)\n imageRoiStore.hideLoader()\n}\n\nconst afterRotate = async () => {\n await loadRois(true)\n}\n\nonMounted(async () => {\n imageRoiStore.reset()\n imageRoiStore.showLoader()\n if (\n assetDetailStore.asset &&\n assetDetailStore.asset.mainFile &&\n assetFileIsImageFile(assetDetailStore.asset.mainFile)\n ) {\n imageRoiStore.setImageFile(cloneDeep(assetDetailStore.asset.mainFile))\n await loadRois()\n }\n imageRoiStore.hideLoader()\n})\n</script>\n\n<template>\n <AssetDetailSidebarActionsWrapper\n v-if=\"isActive\"\n :queue-key=\"queueKey\"\n >\n <ABtnTertiary\n v-if=\"!imageRoiStore.loader\"\n @click.stop=\"loadRois(true)\"\n >\n {{ t('common.damImage.asset.detail.roi.refresh') }}\n </ABtnTertiary>\n </AssetDetailSidebarActionsWrapper>\n <div class=\"px-3\">\n <div class=\"v-expansion-panel-title px-0\">\n {{ t('common.damImage.asset.detail.roi.title') }}\n </div>\n <div class=\"text-caption\">\n {{ t('common.damImage.asset.detail.roi.description') }}\n </div>\n </div>\n <div\n v-if=\"imageRoiStore.loader\"\n class=\"w-100 h-100 d-flex align-center justify-center\"\n >\n <VProgressCircular\n indeterminate\n color=\"primary\"\n />\n </div>\n <div\n v-else-if=\"imageRoiStore.roi\"\n class=\"crop-preview pa-2\"\n >\n <div\n v-for=\"item in imageRoiStore.roi?.links.image_roi_example\"\n :key=\"item.url\"\n class=\"pb-2\"\n >\n <div class=\"text-subtitle-2\">\n {{ item.title }}\n </div>\n <img\n v-if=\"imageRoiStore.imageFile\"\n :src=\"item.url + '?manipulated=' + imageRoiStore.imageFile.manipulatedAt\"\n :width=\"item.width\"\n :height=\"item.height\"\n alt=\"\"\n >\n </div>\n </div>\n <AssetFileRotate\n v-if=\"imageRoiStore.imageFile\"\n :image-id=\"imageRoiStore.imageFile.id\"\n class=\"mx-2\"\n @after-rotate=\"afterRotate\"\n />\n</template>\n\n<style lang=\"scss\">\n.crop-preview {\n width: 100%;\n\n img {\n max-width: 100%;\n height: auto;\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { nextTick, onBeforeUnmount, onMounted } from 'vue'\nimport { useAssetDetailSidebarActionbar } from '@/components/damImage/uploadQueue/composables/assetDetailSidebarActionbar'\nimport type { UploadQueueKey } from '@/types/coreDam/UploadQueue'\n\nconst props = withDefaults(\n defineProps<{\n queueKey: UploadQueueKey\n }>(),\n {}\n)\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { mounted, unMounted, divClassName } = useAssetDetailSidebarActionbar(props.queueKey)\n\nonMounted(async () => {\n await nextTick()\n mounted()\n})\n\nonBeforeUnmount(() => {\n unMounted()\n})\n</script>\n\n<template>\n <div :class=\"divClassName\" />\n</template>\n","<script setup lang=\"ts\">\nimport {\n AssetDetailTabImageWithRoi,\n useAssetDetailStore,\n} from '@/components/damImage/uploadQueue/composables/assetDetailStore'\nimport { storeToRefs } from 'pinia'\nimport type { DocId, IntegerId } from '@/types/common'\nimport type { DamAssetStatusType, DamAssetTypeType } from '@/types/coreDam/Asset'\nimport type { AssetFileFailReasonType, AssetFileProcessStatusType } from '@/types/coreDam/AssetFile'\nimport { useI18n } from 'vue-i18n'\nimport AssetInfobox from '@/components/damImage/uploadQueue/components/AssetInfobox.vue'\nimport AssetDetailSidebarMetadata from '@/components/damImage/uploadQueue/components/AssetDetailSidebarMetadata.vue'\nimport AssetDetailSidebarROI from '@/components/damImage/uploadQueue/components/AssetDetailSidebarROI.vue'\nimport AssetDetailSidebarActionsTeleportTarget from '@/components/damImage/uploadQueue/components/AssetDetailSidebarActionsTeleportTarget.vue'\nimport type { UploadQueueKey } from '@/types/coreDam/UploadQueue'\n\nwithDefaults(\n defineProps<{\n queueKey: UploadQueueKey\n extSystem: IntegerId\n assetId: DocId\n isVideo: boolean\n isAudio: boolean\n isImage: boolean\n isDocument: boolean\n dataCy?: string\n assetStatus: DamAssetStatusType\n assetType: DamAssetTypeType\n assetMainFileStatus?: AssetFileProcessStatusType | undefined\n assetMainFileFailReason?: AssetFileFailReasonType | undefined\n }>(),\n {\n assetMainFileStatus: undefined,\n assetMainFileFailReason: undefined,\n dataCy: undefined,\n }\n)\n\nconst { t } = useI18n()\n\nconst assetDetailStore = useAssetDetailStore()\nconst { activeTab } = storeToRefs(assetDetailStore)\n</script>\n\n<template>\n <div class=\"sidebar-info d-flex w-100 h-100 flex-column\">\n <div class=\"w-100 d-flex flex-column\">\n <VTabs\n v-model=\"activeTab\"\n show-arrows\n class=\"sidebar-info__tabs\"\n >\n <VTab\n :value=\"AssetDetailTabImageWithRoi.Info\"\n data-cy=\"button-meta\"\n >\n {{ t('common.damImage.asset.detail.tabs.info') }}\n </VTab>\n <VTab\n v-if=\"isImage\"\n :value=\"AssetDetailTabImageWithRoi.ROI\"\n data-cy=\"button-focus\"\n >\n {{ t('common.damImage.asset.detail.tabs.roi') }}\n </VTab>\n </VTabs>\n\n <div class=\"sidebar-info__content\">\n <AssetInfobox\n :asset-status=\"assetStatus\"\n :asset-main-file-status=\"assetMainFileStatus\"\n :asset-main-file-fail-reason=\"assetMainFileFailReason\"\n />\n <div\n v-if=\"activeTab === AssetDetailTabImageWithRoi.Info\"\n class=\"py-2\"\n >\n <AssetDetailSidebarMetadata\n :queue-key=\"queueKey\"\n :ext-system=\"extSystem\"\n :is-active=\"activeTab === AssetDetailTabImageWithRoi.Info\"\n :asset-type=\"assetType\"\n />\n </div>\n <div\n v-if=\"isImage && activeTab === AssetDetailTabImageWithRoi.ROI\"\n class=\"py-2\"\n >\n <AssetDetailSidebarROI\n :is-active=\"activeTab === AssetDetailTabImageWithRoi.ROI\"\n :queue-key=\"queueKey\"\n />\n </div>\n </div>\n <div class=\"sidebar-info__actions px-2\">\n <AssetDetailSidebarActionsTeleportTarget :queue-key=\"queueKey\" />\n </div>\n </div>\n </div>\n</template>\n","import type { RegionOfInterest } from '@/types/coreDam/Roi'\nimport { stringToFloat, stringToInt } from '@/utils/string'\n\nconst PRECISION = 3\n\nexport interface ACropperjsExposed {\n enable: () => void\n disable: () => void\n destroy: () => void\n getImageData: () => Cropper.ImageData\n getData: () => Cropper.Data\n setData: (data: Cropper.SetDataOptions) => void\n}\n\nexport const regionToCrop = function (\n cropper: ACropperjsExposed,\n regionOfInterest: RegionOfInterest,\n originalImageWidth: number,\n originalImageHeight: number\n) {\n const imageData = cropper.getImageData()\n if (!imageData)\n return {\n x: 0,\n y: 0,\n width: 100,\n height: 100,\n rotate: 0,\n scaleX: 1,\n scaleY: 1,\n }\n const ratio = imageData.naturalHeight / originalImageHeight\n\n return {\n x: regionOfInterest.pointX * ratio,\n y: regionOfInterest.pointY * ratio,\n width: regionOfInterest.percentageWidth * imageData.naturalWidth,\n height: regionOfInterest.percentageHeight * imageData.naturalHeight,\n rotate: 0,\n scaleX: 1,\n scaleY: 1,\n }\n}\n\nexport const cropToRegion = function (\n cropper: ACropperjsExposed,\n regionOfInterest: RegionOfInterest,\n originalImageWidth: number,\n originalImageHeight: number\n) {\n const imageData = cropper.getImageData()\n const data = cropper.getData()\n if (!imageData || !data) return regionOfInterest\n const ratio = imageData.naturalHeight / originalImageHeight\n\n let pointX = stringToInt((data.x / ratio).toFixed(PRECISION))\n if (pointX < 0) pointX = 0\n\n let pointY = stringToInt((data.y / ratio).toFixed(PRECISION))\n if (pointY < 0) pointY = 0\n\n let percentageWidth = stringToFloat((data.width / imageData.naturalWidth).toFixed(PRECISION))\n const validateWidth = percentageWidth * originalImageWidth + pointX\n if (validateWidth > originalImageWidth) {\n percentageWidth = percentageWidth - ((validateWidth - originalImageWidth) * 100) / originalImageWidth\n }\n\n let percentageHeight = stringToFloat((data.height / imageData.naturalHeight).toFixed(PRECISION))\n const validateHeight = percentageHeight * originalImageHeight + pointY\n if (validateHeight > originalImageHeight) {\n percentageHeight = percentageHeight - ((validateHeight - originalImageHeight) * 100) / originalImageHeight\n }\n\n regionOfInterest.pointX = pointX\n regionOfInterest.pointY = pointY\n regionOfInterest.percentageWidth = percentageWidth\n regionOfInterest.percentageHeight = percentageHeight\n\n return regionOfInterest\n}\n","/*!\n * Cropper.js v1.6.2\n * https://fengyuanchen.github.io/cropperjs\n *\n * Copyright 2015-present Chen Fengyuan\n * Released under the MIT license\n *\n * Date: 2024-04-21T07:43:05.335Z\n */\n\nfunction ownKeys(e, r) {\n var t = Object.keys(e);\n if (Object.getOwnPropertySymbols) {\n var o = Object.getOwnPropertySymbols(e);\n r && (o = o.filter(function (r) {\n return Object.getOwnPropertyDescriptor(e, r).enumerable;\n })), t.push.apply(t, o);\n }\n return t;\n}\nfunction _objectSpread2(e) {\n for (var r = 1; r < arguments.length; r++) {\n var t = null != arguments[r] ? arguments[r] : {};\n r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {\n _defineProperty(e, r, t[r]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {\n Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n });\n }\n return e;\n}\nfunction _toPrimitive(t, r) {\n if (\"object\" != typeof t || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != typeof i) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}\nfunction _toPropertyKey(t) {\n var i = _toPrimitive(t, \"string\");\n return \"symbol\" == typeof i ? i : i + \"\";\n}\nfunction _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n}\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor);\n }\n}\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n}\nfunction _defineProperty(obj, key, value) {\n key = _toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n}\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nvar IS_BROWSER = typeof window !== 'undefined' && typeof window.document !== 'undefined';\nvar WINDOW = IS_BROWSER ? window : {};\nvar IS_TOUCH_DEVICE = IS_BROWSER && WINDOW.document.documentElement ? 'ontouchstart' in WINDOW.document.documentElement : false;\nvar HAS_POINTER_EVENT = IS_BROWSER ? 'PointerEvent' in WINDOW : false;\nvar NAMESPACE = 'cropper';\n\n// Actions\nvar ACTION_ALL = 'all';\nvar ACTION_CROP = 'crop';\nvar ACTION_MOVE = 'move';\nvar ACTION_ZOOM = 'zoom';\nvar ACTION_EAST = 'e';\nvar ACTION_WEST = 'w';\nvar ACTION_SOUTH = 's';\nvar ACTION_NORTH = 'n';\nvar ACTION_NORTH_EAST = 'ne';\nvar ACTION_NORTH_WEST = 'nw';\nvar ACTION_SOUTH_EAST = 'se';\nvar ACTION_SOUTH_WEST = 'sw';\n\n// Classes\nvar CLASS_CROP = \"\".concat(NAMESPACE, \"-crop\");\nvar CLASS_DISABLED = \"\".concat(NAMESPACE, \"-disabled\");\nvar CLASS_HIDDEN = \"\".concat(NAMESPACE, \"-hidden\");\nvar CLASS_HIDE = \"\".concat(NAMESPACE, \"-hide\");\nvar CLASS_INVISIBLE = \"\".concat(NAMESPACE, \"-invisible\");\nvar CLASS_MODAL = \"\".concat(NAMESPACE, \"-modal\");\nvar CLASS_MOVE = \"\".concat(NAMESPACE, \"-move\");\n\n// Data keys\nvar DATA_ACTION = \"\".concat(NAMESPACE, \"Action\");\nvar DATA_PREVIEW = \"\".concat(NAMESPACE, \"Preview\");\n\n// Drag modes\nvar DRAG_MODE_CROP = 'crop';\nvar DRAG_MODE_MOVE = 'move';\nvar DRAG_MODE_NONE = 'none';\n\n// Events\nvar EVENT_CROP = 'crop';\nvar EVENT_CROP_END = 'cropend';\nvar EVENT_CROP_MOVE = 'cropmove';\nvar EVENT_CROP_START = 'cropstart';\nvar EVENT_DBLCLICK = 'dblclick';\nvar EVENT_TOUCH_START = IS_TOUCH_DEVICE ? 'touchstart' : 'mousedown';\nvar EVENT_TOUCH_MOVE = IS_TOUCH_DEVICE ? 'touchmove' : 'mousemove';\nvar EVENT_TOUCH_END = IS_TOUCH_DEVICE ? 'touchend touchcancel' : 'mouseup';\nvar EVENT_POINTER_DOWN = HAS_POINTER_EVENT ? 'pointerdown' : EVENT_TOUCH_START;\nvar EVENT_POINTER_MOVE = HAS_POINTER_EVENT ? 'pointermove' : EVENT_TOUCH_MOVE;\nvar EVENT_POINTER_UP = HAS_POINTER_EVENT ? 'pointerup pointercancel' : EVENT_TOUCH_END;\nvar EVENT_READY = 'ready';\nvar EVENT_RESIZE = 'resize';\nvar EVENT_WHEEL = 'wheel';\nvar EVENT_ZOOM = 'zoom';\n\n// Mime types\nvar MIME_TYPE_JPEG = 'image/jpeg';\n\n// RegExps\nvar REGEXP_ACTIONS = /^e|w|s|n|se|sw|ne|nw|all|crop|move|zoom$/;\nvar REGEXP_DATA_URL = /^data:/;\nvar REGEXP_DATA_URL_JPEG = /^data:image\\/jpeg;base64,/;\nvar REGEXP_TAG_NAME = /^img|canvas$/i;\n\n// Misc\n// Inspired by the default width and height of a canvas element.\nvar MIN_CONTAINER_WIDTH = 200;\nvar MIN_CONTAINER_HEIGHT = 100;\n\nvar DEFAULTS = {\n // Define the view mode of the cropper\n viewMode: 0,\n // 0, 1, 2, 3\n\n // Define the dragging mode of the cropper\n dragMode: DRAG_MODE_CROP,\n // 'crop', 'move' or 'none'\n\n // Define the initial aspect ratio of the crop box\n initialAspectRatio: NaN,\n // Define the aspect ratio of the crop box\n aspectRatio: NaN,\n // An object with the previous cropping result data\n data: null,\n // A selector for adding extra containers to preview\n preview: '',\n // Re-render the cropper when resize the window\n responsive: true,\n // Restore the cropped area after resize the window\n restore: true,\n // Check if the current image is a cross-origin image\n checkCrossOrigin: true,\n // Check the current image's Exif Orientation information\n checkOrientation: true,\n // Show the black modal\n modal: true,\n // Show the dashed lines for guiding\n guides: true,\n // Show the center indicator for guiding\n center: true,\n // Show the white modal to highlight the crop box\n highlight: true,\n // Show the grid background\n background: true,\n // Enable to crop the image automatically when initialize\n autoCrop: true,\n // Define the percentage of automatic cropping area when initializes\n autoCropArea: 0.8,\n // Enable to move the image\n movable: true,\n // Enable to rotate the image\n rotatable: true,\n // Enable to scale the image\n scalable: true,\n // Enable to zoom the image\n zoomable: true,\n // Enable to zoom the image by dragging touch\n zoomOnTouch: true,\n // Enable to zoom the image by wheeling mouse\n zoomOnWheel: true,\n // Define zoom ratio when zoom the image by wheeling mouse\n wheelZoomRatio: 0.1,\n // Enable to move the crop box\n cropBoxMovable: true,\n // Enable to resize the crop box\n cropBoxResizable: true,\n // Toggle drag mode between \"crop\" and \"move\" when click twice on the cropper\n toggleDragModeOnDblclick: true,\n // Size limitation\n minCanvasWidth: 0,\n minCanvasHeight: 0,\n minCropBoxWidth: 0,\n minCropBoxHeight: 0,\n minContainerWidth: MIN_CONTAINER_WIDTH,\n minContainerHeight: MIN_CONTAINER_HEIGHT,\n // Shortcuts of events\n ready: null,\n cropstart: null,\n cropmove: null,\n cropend: null,\n crop: null,\n zoom: null\n};\n\nvar TEMPLATE = '<div class=\"cropper-container\" touch-action=\"none\">' + '<div class=\"cropper-wrap-box\">' + '<div class=\"cropper-canvas\"></div>' + '</div>' + '<div class=\"cropper-drag-box\"></div>' + '<div class=\"cropper-crop-box\">' + '<span class=\"cropper-view-box\"></span>' + '<span class=\"cropper-dashed dashed-h\"></span>' + '<span class=\"cropper-dashed dashed-v\"></span>' + '<span class=\"cropper-center\"></span>' + '<span class=\"cropper-face\"></span>' + '<span class=\"cropper-line line-e\" data-cropper-action=\"e\"></span>' + '<span class=\"cropper-line line-n\" data-cropper-action=\"n\"></span>' + '<span class=\"cropper-line line-w\" data-cropper-action=\"w\"></span>' + '<span class=\"cropper-line line-s\" data-cropper-action=\"s\"></span>' + '<span class=\"cropper-point point-e\" data-cropper-action=\"e\"></span>' + '<span class=\"cropper-point point-n\" data-cropper-action=\"n\"></span>' + '<span class=\"cropper-point point-w\" data-cropper-action=\"w\"></span>' + '<span class=\"cropper-point point-s\" data-cropper-action=\"s\"></span>' + '<span class=\"cropper-point point-ne\" data-cropper-action=\"ne\"></span>' + '<span class=\"cropper-point point-nw\" data-cropper-action=\"nw\"></span>' + '<span class=\"cropper-point point-sw\" data-cropper-action=\"sw\"></span>' + '<span class=\"cropper-point point-se\" data-cropper-action=\"se\"></span>' + '</div>' + '</div>';\n\n/**\n * Check if the given value is not a number.\n */\nvar isNaN = Number.isNaN || WINDOW.isNaN;\n\n/**\n * Check if the given value is a number.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a number, else `false`.\n */\nfunction isNumber(value) {\n return typeof value === 'number' && !isNaN(value);\n}\n\n/**\n * Check if the given value is a positive number.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a positive number, else `false`.\n */\nvar isPositiveNumber = function isPositiveNumber(value) {\n return value > 0 && value < Infinity;\n};\n\n/**\n * Check if the given value is undefined.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is undefined, else `false`.\n */\nfunction isUndefined(value) {\n return typeof value === 'undefined';\n}\n\n/**\n * Check if the given value is an object.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is an object, else `false`.\n */\nfunction isObject(value) {\n return _typeof(value) === 'object' && value !== null;\n}\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\n/**\n * Check if the given value is a plain object.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a plain object, else `false`.\n */\nfunction isPlainObject(value) {\n if (!isObject(value)) {\n return false;\n }\n try {\n var _constructor = value.constructor;\n var prototype = _constructor.prototype;\n return _constructor && prototype && hasOwnProperty.call(prototype, 'isPrototypeOf');\n } catch (error) {\n return false;\n }\n}\n\n/**\n * Check if the given value is a function.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a function, else `false`.\n */\nfunction isFunction(value) {\n return typeof value === 'function';\n}\nvar slice = Array.prototype.slice;\n\n/**\n * Convert array-like or iterable object to an array.\n * @param {*} value - The value to convert.\n * @returns {Array} Returns a new array.\n */\nfunction toArray(value) {\n return Array.from ? Array.from(value) : slice.call(value);\n}\n\n/**\n * Iterate the given data.\n * @param {*} data - The data to iterate.\n * @param {Function} callback - The process function for each element.\n * @returns {*} The original data.\n */\nfunction forEach(data, callback) {\n if (data && isFunction(callback)) {\n if (Array.isArray(data) || isNumber(data.length) /* array-like */) {\n toArray(data).forEach(function (value, key) {\n callback.call(data, value, key, data);\n });\n } else if (isObject(data)) {\n Object.keys(data).forEach(function (key) {\n callback.call(data, data[key], key, data);\n });\n }\n }\n return data;\n}\n\n/**\n * Extend the given object.\n * @param {*} target - The target object to extend.\n * @param {*} args - The rest objects for merging to the target object.\n * @returns {Object} The extended object.\n */\nvar assign = Object.assign || function assign(target) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n if (isObject(target) && args.length > 0) {\n args.forEach(function (arg) {\n if (isObject(arg)) {\n Object.keys(arg).forEach(function (key) {\n target[key] = arg[key];\n });\n }\n });\n }\n return target;\n};\nvar REGEXP_DECIMALS = /\\.\\d*(?:0|9){12}\\d*$/;\n\n/**\n * Normalize decimal number.\n * Check out {@link https://0.30000000000000004.com/}\n * @param {number} value - The value to normalize.\n * @param {number} [times=100000000000] - The times for normalizing.\n * @returns {number} Returns the normalized number.\n */\nfunction normalizeDecimalNumber(value) {\n var times = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 100000000000;\n return REGEXP_DECIMALS.test(value) ? Math.round(value * times) / times : value;\n}\nvar REGEXP_SUFFIX = /^width|height|left|top|marginLeft|marginTop$/;\n\n/**\n * Apply styles to the given element.\n * @param {Element} element - The target element.\n * @param {Object} styles - The styles for applying.\n */\nfunction setStyle(element, styles) {\n var style = element.style;\n forEach(styles, function (value, property) {\n if (REGEXP_SUFFIX.test(property) && isNumber(value)) {\n value = \"\".concat(value, \"px\");\n }\n style[property] = value;\n });\n}\n\n/**\n * Check if the given element has a special class.\n * @param {Element} element - The element to check.\n * @param {string} value - The class to search.\n * @returns {boolean} Returns `true` if the special class was found.\n */\nfunction hasClass(element, value) {\n return element.classList ? element.classList.contains(value) : element.className.indexOf(value) > -1;\n}\n\n/**\n * Add classes to the given element.\n * @param {Element} element - The target element.\n * @param {string} value - The classes to be added.\n */\nfunction addClass(element, value) {\n if (!value) {\n return;\n }\n if (isNumber(element.length)) {\n forEach(element, function (elem) {\n addClass(elem, value);\n });\n return;\n }\n if (element.classList) {\n element.classList.add(value);\n return;\n }\n var className = element.className.trim();\n if (!className) {\n element.className = value;\n } else if (className.indexOf(value) < 0) {\n element.className = \"\".concat(className, \" \").concat(value);\n }\n}\n\n/**\n * Remove classes from the given element.\n * @param {Element} element - The target element.\n * @param {string} value - The classes to be removed.\n */\nfunction removeClass(element, value) {\n if (!value) {\n return;\n }\n if (isNumber(element.length)) {\n forEach(element, function (elem) {\n removeClass(elem, value);\n });\n return;\n }\n if (element.classList) {\n element.classList.remove(value);\n return;\n }\n if (element.className.indexOf(value) >= 0) {\n element.className = element.className.replace(value, '');\n }\n}\n\n/**\n * Add or remove classes from the given element.\n * @param {Element} element - The target element.\n * @param {string} value - The classes to be toggled.\n * @param {boolean} added - Add only.\n */\nfunction toggleClass(element, value, added) {\n if (!value) {\n return;\n }\n if (isNumber(element.length)) {\n forEach(element, function (elem) {\n toggleClass(elem, value, added);\n });\n return;\n }\n\n // IE10-11 doesn't support the second parameter of `classList.toggle`\n if (added) {\n addClass(element, value);\n } else {\n removeClass(element, value);\n }\n}\nvar REGEXP_CAMEL_CASE = /([a-z\\d])([A-Z])/g;\n\n/**\n * Transform the given string from camelCase to kebab-case\n * @param {string} value - The value to transform.\n * @returns {string} The transformed value.\n */\nfunction toParamCase(value) {\n return value.replace(REGEXP_CAMEL_CASE, '$1-$2').toLowerCase();\n}\n\n/**\n * Get data from the given element.\n * @param {Element} element - The target element.\n * @param {string} name - The data key to get.\n * @returns {string} The data value.\n */\nfunction getData(element, name) {\n if (isObject(element[name])) {\n return element[name];\n }\n if (element.dataset) {\n return element.dataset[name];\n }\n return element.getAttribute(\"data-\".concat(toParamCase(name)));\n}\n\n/**\n * Set data to the given element.\n * @param {Element} element - The target element.\n * @param {string} name - The data key to set.\n * @param {string} data - The data value.\n */\nfunction setData(element, name, data) {\n if (isObject(data)) {\n element[name] = data;\n } else if (element.dataset) {\n element.dataset[name] = data;\n } else {\n element.setAttribute(\"data-\".concat(toParamCase(name)), data);\n }\n}\n\n/**\n * Remove data from the given element.\n * @param {Element} element - The target element.\n * @param {string} name - The data key to remove.\n */\nfunction removeData(element, name) {\n if (isObject(element[name])) {\n try {\n delete element[name];\n } catch (error) {\n element[name] = undefined;\n }\n } else if (element.dataset) {\n // #128 Safari not allows to delete dataset property\n try {\n delete element.dataset[name];\n } catch (error) {\n element.dataset[name] = undefined;\n }\n } else {\n element.removeAttribute(\"data-\".concat(toParamCase(name)));\n }\n}\nvar REGEXP_SPACES = /\\s\\s*/;\nvar onceSupported = function () {\n var supported = false;\n if (IS_BROWSER) {\n var once = false;\n var listener = function listener() {};\n var options = Object.defineProperty({}, 'once', {\n get: function get() {\n supported = true;\n return once;\n },\n /**\n * This setter can fix a `TypeError` in strict mode\n * {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Getter_only}\n * @param {boolean} value - The value to set\n */\n set: function set(value) {\n once = value;\n }\n });\n WINDOW.addEventListener('test', listener, options);\n WINDOW.removeEventListener('test', listener, options);\n }\n return supported;\n}();\n\n/**\n * Remove event listener from the target element.\n * @param {Element} element - The event target.\n * @param {string} type - The event type(s).\n * @param {Function} listener - The event listener.\n * @param {Object} options - The event options.\n */\nfunction removeListener(element, type, listener) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var handler = listener;\n type.trim().split(REGEXP_SPACES).forEach(function (event) {\n if (!onceSupported) {\n var listeners = element.listeners;\n if (listeners && listeners[event] && listeners[event][listener]) {\n handler = listeners[event][listener];\n delete listeners[event][listener];\n if (Object.keys(listeners[event]).length === 0) {\n delete listeners[event];\n }\n if (Object.keys(listeners).length === 0) {\n delete element.listeners;\n }\n }\n }\n element.removeEventListener(event, handler, options);\n });\n}\n\n/**\n * Add event listener to the target element.\n * @param {Element} element - The event target.\n * @param {string} type - The event type(s).\n * @param {Function} listener - The event listener.\n * @param {Object} options - The event options.\n */\nfunction addListener(element, type, listener) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var _handler = listener;\n type.trim().split(REGEXP_SPACES).forEach(function (event) {\n if (options.once && !onceSupported) {\n var _element$listeners = element.listeners,\n listeners = _element$listeners === void 0 ? {} : _element$listeners;\n _handler = function handler() {\n delete listeners[event][listener];\n element.removeEventListener(event, _handler, options);\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n listener.apply(element, args);\n };\n if (!listeners[event]) {\n listeners[event] = {};\n }\n if (listeners[event][listener]) {\n element.removeEventListener(event, listeners[event][listener], options);\n }\n listeners[event][listener] = _handler;\n element.listeners = listeners;\n }\n element.addEventListener(event, _handler, options);\n });\n}\n\n/**\n * Dispatch event on the target element.\n * @param {Element} element - The event target.\n * @param {string} type - The event type(s).\n * @param {Object} data - The additional event data.\n * @returns {boolean} Indicate if the event is default prevented or not.\n */\nfunction dispatchEvent(element, type, data) {\n var event;\n\n // Event and CustomEvent on IE9-11 are global objects, not constructors\n if (isFunction(Event) && isFunction(CustomEvent)) {\n event = new CustomEvent(type, {\n detail: data,\n bubbles: true,\n cancelable: true\n });\n } else {\n event = document.createEvent('CustomEvent');\n event.initCustomEvent(type, true, true, data);\n }\n return element.dispatchEvent(event);\n}\n\n/**\n * Get the offset base on the document.\n * @param {Element} element - The target element.\n * @returns {Object} The offset data.\n */\nfunction getOffset(element) {\n var box = element.getBoundingClientRect();\n return {\n left: box.left + (window.pageXOffset - document.documentElement.clientLeft),\n top: box.top + (window.pageYOffset - document.documentElement.clientTop)\n };\n}\nvar location = WINDOW.location;\nvar REGEXP_ORIGINS = /^(\\w+:)\\/\\/([^:/?#]*):?(\\d*)/i;\n\n/**\n * Check if the given URL is a cross origin URL.\n * @param {string} url - The target URL.\n * @returns {boolean} Returns `true` if the given URL is a cross origin URL, else `false`.\n */\nfunction isCrossOriginURL(url) {\n var parts = url.match(REGEXP_ORIGINS);\n return parts !== null && (parts[1] !== location.protocol || parts[2] !== location.hostname || parts[3] !== location.port);\n}\n\n/**\n * Add timestamp to the given URL.\n * @param {string} url - The target URL.\n * @returns {string} The result URL.\n */\nfunction addTimestamp(url) {\n var timestamp = \"timestamp=\".concat(new Date().getTime());\n return url + (url.indexOf('?') === -1 ? '?' : '&') + timestamp;\n}\n\n/**\n * Get transforms base on the given object.\n * @param {Object} obj - The target object.\n * @returns {string} A string contains transform values.\n */\nfunction getTransforms(_ref) {\n var rotate = _ref.rotate,\n scaleX = _ref.scaleX,\n scaleY = _ref.scaleY,\n translateX = _ref.translateX,\n translateY = _ref.translateY;\n var values = [];\n if (isNumber(translateX) && translateX !== 0) {\n values.push(\"translateX(\".concat(translateX, \"px)\"));\n }\n if (isNumber(translateY) && translateY !== 0) {\n values.push(\"translateY(\".concat(translateY, \"px)\"));\n }\n\n // Rotate should come first before scale to match orientation transform\n if (isNumber(rotate) && rotate !== 0) {\n values.push(\"rotate(\".concat(rotate, \"deg)\"));\n }\n if (isNumber(scaleX) && scaleX !== 1) {\n values.push(\"scaleX(\".concat(scaleX, \")\"));\n }\n if (isNumber(scaleY) && scaleY !== 1) {\n values.push(\"scaleY(\".concat(scaleY, \")\"));\n }\n var transform = values.length ? values.join(' ') : 'none';\n return {\n WebkitTransform: transform,\n msTransform: transform,\n transform: transform\n };\n}\n\n/**\n * Get the max ratio of a group of pointers.\n * @param {string} pointers - The target pointers.\n * @returns {number} The result ratio.\n */\nfunction getMaxZoomRatio(pointers) {\n var pointers2 = _objectSpread2({}, pointers);\n var maxRatio = 0;\n forEach(pointers, function (pointer, pointerId) {\n delete pointers2[pointerId];\n forEach(pointers2, function (pointer2) {\n var x1 = Math.abs(pointer.startX - pointer2.startX);\n var y1 = Math.abs(pointer.startY - pointer2.startY);\n var x2 = Math.abs(pointer.endX - pointer2.endX);\n var y2 = Math.abs(pointer.endY - pointer2.endY);\n var z1 = Math.sqrt(x1 * x1 + y1 * y1);\n var z2 = Math.sqrt(x2 * x2 + y2 * y2);\n var ratio = (z2 - z1) / z1;\n if (Math.abs(ratio) > Math.abs(maxRatio)) {\n maxRatio = ratio;\n }\n });\n });\n return maxRatio;\n}\n\n/**\n * Get a pointer from an event object.\n * @param {Object} event - The target event object.\n * @param {boolean} endOnly - Indicates if only returns the end point coordinate or not.\n * @returns {Object} The result pointer contains start and/or end point coordinates.\n */\nfunction getPointer(_ref2, endOnly) {\n var pageX = _ref2.pageX,\n pageY = _ref2.pageY;\n var end = {\n endX: pageX,\n endY: pageY\n };\n return endOnly ? end : _objectSpread2({\n startX: pageX,\n startY: pageY\n }, end);\n}\n\n/**\n * Get the center point coordinate of a group of pointers.\n * @param {Object} pointers - The target pointers.\n * @returns {Object} The center point coordinate.\n */\nfunction getPointersCenter(pointers) {\n var pageX = 0;\n var pageY = 0;\n var count = 0;\n forEach(pointers, function (_ref3) {\n var startX = _ref3.startX,\n startY = _ref3.startY;\n pageX += startX;\n pageY += startY;\n count += 1;\n });\n pageX /= count;\n pageY /= count;\n return {\n pageX: pageX,\n pageY: pageY\n };\n}\n\n/**\n * Get the max sizes in a rectangle under the given aspect ratio.\n * @param {Object} data - The original sizes.\n * @param {string} [type='contain'] - The adjust type.\n * @returns {Object} The result sizes.\n */\nfunction getAdjustedSizes(_ref4) {\n var aspectRatio = _ref4.aspectRatio,\n height = _ref4.height,\n width = _ref4.width;\n var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'contain';\n var isValidWidth = isPositiveNumber(width);\n var isValidHeight = isPositiveNumber(height);\n if (isValidWidth && isValidHeight) {\n var adjustedWidth = height * aspectRatio;\n if (type === 'contain' && adjustedWidth > width || type === 'cover' && adjustedWidth < width) {\n height = width / aspectRatio;\n } else {\n width = height * aspectRatio;\n }\n } else if (isValidWidth) {\n height = width / aspectRatio;\n } else if (isValidHeight) {\n width = height * aspectRatio;\n }\n return {\n width: width,\n height: height\n };\n}\n\n/**\n * Get the new sizes of a rectangle after rotated.\n * @param {Object} data - The original sizes.\n * @returns {Object} The result sizes.\n */\nfunction getRotatedSizes(_ref5) {\n var width = _ref5.width,\n height = _ref5.height,\n degree = _ref5.degree;\n degree = Math.abs(degree) % 180;\n if (degree === 90) {\n return {\n width: height,\n height: width\n };\n }\n var arc = degree % 90 * Math.PI / 180;\n var sinArc = Math.sin(arc);\n var cosArc = Math.cos(arc);\n var newWidth = width * cosArc + height * sinArc;\n var newHeight = width * sinArc + height * cosArc;\n return degree > 90 ? {\n width: newHeight,\n height: newWidth\n } : {\n width: newWidth,\n height: newHeight\n };\n}\n\n/**\n * Get a canvas which drew the given image.\n * @param {HTMLImageElement} image - The image for drawing.\n * @param {Object} imageData - The image data.\n * @param {Object} canvasData - The canvas data.\n * @param {Object} options - The options.\n * @returns {HTMLCanvasElement} The result canvas.\n */\nfunction getSourceCanvas(image, _ref6, _ref7, _ref8) {\n var imageAspectRatio = _ref6.aspectRatio,\n imageNaturalWidth = _ref6.naturalWidth,\n imageNaturalHeight = _ref6.naturalHeight,\n _ref6$rotate = _ref6.rotate,\n rotate = _ref6$rotate === void 0 ? 0 : _ref6$rotate,\n _ref6$scaleX = _ref6.scaleX,\n scaleX = _ref6$scaleX === void 0 ? 1 : _ref6$scaleX,\n _ref6$scaleY = _ref6.scaleY,\n scaleY = _ref6$scaleY === void 0 ? 1 : _ref6$scaleY;\n var aspectRatio = _ref7.aspectRatio,\n naturalWidth = _ref7.naturalWidth,\n naturalHeight = _ref7.naturalHeight;\n var _ref8$fillColor = _ref8.fillColor,\n fillColor = _ref8$fillColor === void 0 ? 'transparent' : _ref8$fillColor,\n _ref8$imageSmoothingE = _ref8.imageSmoothingEnabled,\n imageSmoothingEnabled = _ref8$imageSmoothingE === void 0 ? true : _ref8$imageSmoothingE,\n _ref8$imageSmoothingQ = _ref8.imageSmoothingQuality,\n imageSmoothingQuality = _ref8$imageSmoothingQ === void 0 ? 'low' : _ref8$imageSmoothingQ,\n _ref8$maxWidth = _ref8.maxWidth,\n maxWidth = _ref8$maxWidth === void 0 ? Infinity : _ref8$maxWidth,\n _ref8$maxHeight = _ref8.maxHeight,\n maxHeight = _ref8$maxHeight === void 0 ? Infinity : _ref8$maxHeight,\n _ref8$minWidth = _ref8.minWidth,\n minWidth = _ref8$minWidth === void 0 ? 0 : _ref8$minWidth,\n _ref8$minHeight = _ref8.minHeight,\n minHeight = _ref8$minHeight === void 0 ? 0 : _ref8$minHeight;\n var canvas = document.createElement('canvas');\n var context = canvas.getContext('2d');\n var maxSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: maxWidth,\n height: maxHeight\n });\n var minSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: minWidth,\n height: minHeight\n }, 'cover');\n var width = Math.min(maxSizes.width, Math.max(minSizes.width, naturalWidth));\n var height = Math.min(maxSizes.height, Math.max(minSizes.height, naturalHeight));\n\n // Note: should always use image's natural sizes for drawing as\n // imageData.naturalWidth === canvasData.naturalHeight when rotate % 180 === 90\n var destMaxSizes = getAdjustedSizes({\n aspectRatio: imageAspectRatio,\n width: maxWidth,\n height: maxHeight\n });\n var destMinSizes = getAdjustedSizes({\n aspectRatio: imageAspectRatio,\n width: minWidth,\n height: minHeight\n }, 'cover');\n var destWidth = Math.min(destMaxSizes.width, Math.max(destMinSizes.width, imageNaturalWidth));\n var destHeight = Math.min(destMaxSizes.height, Math.max(destMinSizes.height, imageNaturalHeight));\n var params = [-destWidth / 2, -destHeight / 2, destWidth, destHeight];\n canvas.width = normalizeDecimalNumber(width);\n canvas.height = normalizeDecimalNumber(height);\n context.fillStyle = fillColor;\n context.fillRect(0, 0, width, height);\n context.save();\n context.translate(width / 2, height / 2);\n context.rotate(rotate * Math.PI / 180);\n context.scale(scaleX, scaleY);\n context.imageSmoothingEnabled = imageSmoothingEnabled;\n context.imageSmoothingQuality = imageSmoothingQuality;\n context.drawImage.apply(context, [image].concat(_toConsumableArray(params.map(function (param) {\n return Math.floor(normalizeDecimalNumber(param));\n }))));\n context.restore();\n return canvas;\n}\nvar fromCharCode = String.fromCharCode;\n\n/**\n * Get string from char code in data view.\n * @param {DataView} dataView - The data view for read.\n * @param {number} start - The start index.\n * @param {number} length - The read length.\n * @returns {string} The read result.\n */\nfunction getStringFromCharCode(dataView, start, length) {\n var str = '';\n length += start;\n for (var i = start; i < length; i += 1) {\n str += fromCharCode(dataView.getUint8(i));\n }\n return str;\n}\nvar REGEXP_DATA_URL_HEAD = /^data:.*,/;\n\n/**\n * Transform Data URL to array buffer.\n * @param {string} dataURL - The Data URL to transform.\n * @returns {ArrayBuffer} The result array buffer.\n */\nfunction dataURLToArrayBuffer(dataURL) {\n var base64 = dataURL.replace(REGEXP_DATA_URL_HEAD, '');\n var binary = atob(base64);\n var arrayBuffer = new ArrayBuffer(binary.length);\n var uint8 = new Uint8Array(arrayBuffer);\n forEach(uint8, function (value, i) {\n uint8[i] = binary.charCodeAt(i);\n });\n return arrayBuffer;\n}\n\n/**\n * Transform array buffer to Data URL.\n * @param {ArrayBuffer} arrayBuffer - The array buffer to transform.\n * @param {string} mimeType - The mime type of the Data URL.\n * @returns {string} The result Data URL.\n */\nfunction arrayBufferToDataURL(arrayBuffer, mimeType) {\n var chunks = [];\n\n // Chunk Typed Array for better performance (#435)\n var chunkSize = 8192;\n var uint8 = new Uint8Array(arrayBuffer);\n while (uint8.length > 0) {\n // XXX: Babel's `toConsumableArray` helper will throw error in IE or Safari 9\n // eslint-disable-next-line prefer-spread\n chunks.push(fromCharCode.apply(null, toArray(uint8.subarray(0, chunkSize))));\n uint8 = uint8.subarray(chunkSize);\n }\n return \"data:\".concat(mimeType, \";base64,\").concat(btoa(chunks.join('')));\n}\n\n/**\n * Get orientation value from given array buffer.\n * @param {ArrayBuffer} arrayBuffer - The array buffer to read.\n * @returns {number} The read orientation value.\n */\nfunction resetAndGetOrientation(arrayBuffer) {\n var dataView = new DataView(arrayBuffer);\n var orientation;\n\n // Ignores range error when the image does not have correct Exif information\n try {\n var littleEndian;\n var app1Start;\n var ifdStart;\n\n // Only handle JPEG image (start by 0xFFD8)\n if (dataView.getUint8(0) === 0xFF && dataView.getUint8(1) === 0xD8) {\n var length = dataView.byteLength;\n var offset = 2;\n while (offset + 1 < length) {\n if (dataView.getUint8(offset) === 0xFF && dataView.getUint8(offset + 1) === 0xE1) {\n app1Start = offset;\n break;\n }\n offset += 1;\n }\n }\n if (app1Start) {\n var exifIDCode = app1Start + 4;\n var tiffOffset = app1Start + 10;\n if (getStringFromCharCode(dataView, exifIDCode, 4) === 'Exif') {\n var endianness = dataView.getUint16(tiffOffset);\n littleEndian = endianness === 0x4949;\n if (littleEndian || endianness === 0x4D4D /* bigEndian */) {\n if (dataView.getUint16(tiffOffset + 2, littleEndian) === 0x002A) {\n var firstIFDOffset = dataView.getUint32(tiffOffset + 4, littleEndian);\n if (firstIFDOffset >= 0x00000008) {\n ifdStart = tiffOffset + firstIFDOffset;\n }\n }\n }\n }\n }\n if (ifdStart) {\n var _length = dataView.getUint16(ifdStart, littleEndian);\n var _offset;\n var i;\n for (i = 0; i < _length; i += 1) {\n _offset = ifdStart + i * 12 + 2;\n if (dataView.getUint16(_offset, littleEndian) === 0x0112 /* Orientation */) {\n // 8 is the offset of the current tag's value\n _offset += 8;\n\n // Get the original orientation value\n orientation = dataView.getUint16(_offset, littleEndian);\n\n // Override the orientation with its default value\n dataView.setUint16(_offset, 1, littleEndian);\n break;\n }\n }\n }\n } catch (error) {\n orientation = 1;\n }\n return orientation;\n}\n\n/**\n * Parse Exif Orientation value.\n * @param {number} orientation - The orientation to parse.\n * @returns {Object} The parsed result.\n */\nfunction parseOrientation(orientation) {\n var rotate = 0;\n var scaleX = 1;\n var scaleY = 1;\n switch (orientation) {\n // Flip horizontal\n case 2:\n scaleX = -1;\n break;\n\n // Rotate left 180°\n case 3:\n rotate = -180;\n break;\n\n // Flip vertical\n case 4:\n scaleY = -1;\n break;\n\n // Flip vertical and rotate right 90°\n case 5:\n rotate = 90;\n scaleY = -1;\n break;\n\n // Rotate right 90°\n case 6:\n rotate = 90;\n break;\n\n // Flip horizontal and rotate right 90°\n case 7:\n rotate = 90;\n scaleX = -1;\n break;\n\n // Rotate left 90°\n case 8:\n rotate = -90;\n break;\n }\n return {\n rotate: rotate,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n\nvar render = {\n render: function render() {\n this.initContainer();\n this.initCanvas();\n this.initCropBox();\n this.renderCanvas();\n if (this.cropped) {\n this.renderCropBox();\n }\n },\n initContainer: function initContainer() {\n var element = this.element,\n options = this.options,\n container = this.container,\n cropper = this.cropper;\n var minWidth = Number(options.minContainerWidth);\n var minHeight = Number(options.minContainerHeight);\n addClass(cropper, CLASS_HIDDEN);\n removeClass(element, CLASS_HIDDEN);\n var containerData = {\n width: Math.max(container.offsetWidth, minWidth >= 0 ? minWidth : MIN_CONTAINER_WIDTH),\n height: Math.max(container.offsetHeight, minHeight >= 0 ? minHeight : MIN_CONTAINER_HEIGHT)\n };\n this.containerData = containerData;\n setStyle(cropper, {\n width: containerData.width,\n height: containerData.height\n });\n addClass(element, CLASS_HIDDEN);\n removeClass(cropper, CLASS_HIDDEN);\n },\n // Canvas (image wrapper)\n initCanvas: function initCanvas() {\n var containerData = this.containerData,\n imageData = this.imageData;\n var viewMode = this.options.viewMode;\n var rotated = Math.abs(imageData.rotate) % 180 === 90;\n var naturalWidth = rotated ? imageData.naturalHeight : imageData.naturalWidth;\n var naturalHeight = rotated ? imageData.naturalWidth : imageData.naturalHeight;\n var aspectRatio = naturalWidth / naturalHeight;\n var canvasWidth = containerData.width;\n var canvasHeight = containerData.height;\n if (containerData.height * aspectRatio > containerData.width) {\n if (viewMode === 3) {\n canvasWidth = containerData.height * aspectRatio;\n } else {\n canvasHeight = containerData.width / aspectRatio;\n }\n } else if (viewMode === 3) {\n canvasHeight = containerData.width / aspectRatio;\n } else {\n canvasWidth = containerData.height * aspectRatio;\n }\n var canvasData = {\n aspectRatio: aspectRatio,\n naturalWidth: naturalWidth,\n naturalHeight: naturalHeight,\n width: canvasWidth,\n height: canvasHeight\n };\n this.canvasData = canvasData;\n this.limited = viewMode === 1 || viewMode === 2;\n this.limitCanvas(true, true);\n canvasData.width = Math.min(Math.max(canvasData.width, canvasData.minWidth), canvasData.maxWidth);\n canvasData.height = Math.min(Math.max(canvasData.height, canvasData.minHeight), canvasData.maxHeight);\n canvasData.left = (containerData.width - canvasData.width) / 2;\n canvasData.top = (containerData.height - canvasData.height) / 2;\n canvasData.oldLeft = canvasData.left;\n canvasData.oldTop = canvasData.top;\n this.initialCanvasData = assign({}, canvasData);\n },\n limitCanvas: function limitCanvas(sizeLimited, positionLimited) {\n var options = this.options,\n containerData = this.containerData,\n canvasData = this.canvasData,\n cropBoxData = this.cropBoxData;\n var viewMode = options.viewMode;\n var aspectRatio = canvasData.aspectRatio;\n var cropped = this.cropped && cropBoxData;\n if (sizeLimited) {\n var minCanvasWidth = Number(options.minCanvasWidth) || 0;\n var minCanvasHeight = Number(options.minCanvasHeight) || 0;\n if (viewMode > 1) {\n minCanvasWidth = Math.max(minCanvasWidth, containerData.width);\n minCanvasHeight = Math.max(minCanvasHeight, containerData.height);\n if (viewMode === 3) {\n if (minCanvasHeight * aspectRatio > minCanvasWidth) {\n minCanvasWidth = minCanvasHeight * aspectRatio;\n } else {\n minCanvasHeight = minCanvasWidth / aspectRatio;\n }\n }\n } else if (viewMode > 0) {\n if (minCanvasWidth) {\n minCanvasWidth = Math.max(minCanvasWidth, cropped ? cropBoxData.width : 0);\n } else if (minCanvasHeight) {\n minCanvasHeight = Math.max(minCanvasHeight, cropped ? cropBoxData.height : 0);\n } else if (cropped) {\n minCanvasWidth = cropBoxData.width;\n minCanvasHeight = cropBoxData.height;\n if (minCanvasHeight * aspectRatio > minCanvasWidth) {\n minCanvasWidth = minCanvasHeight * aspectRatio;\n } else {\n minCanvasHeight = minCanvasWidth / aspectRatio;\n }\n }\n }\n var _getAdjustedSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: minCanvasWidth,\n height: minCanvasHeight\n });\n minCanvasWidth = _getAdjustedSizes.width;\n minCanvasHeight = _getAdjustedSizes.height;\n canvasData.minWidth = minCanvasWidth;\n canvasData.minHeight = minCanvasHeight;\n canvasData.maxWidth = Infinity;\n canvasData.maxHeight = Infinity;\n }\n if (positionLimited) {\n if (viewMode > (cropped ? 0 : 1)) {\n var newCanvasLeft = containerData.width - canvasData.width;\n var newCanvasTop = containerData.height - canvasData.height;\n canvasData.minLeft = Math.min(0, newCanvasLeft);\n canvasData.minTop = Math.min(0, newCanvasTop);\n canvasData.maxLeft = Math.max(0, newCanvasLeft);\n canvasData.maxTop = Math.max(0, newCanvasTop);\n if (cropped && this.limited) {\n canvasData.minLeft = Math.min(cropBoxData.left, cropBoxData.left + (cropBoxData.width - canvasData.width));\n canvasData.minTop = Math.min(cropBoxData.top, cropBoxData.top + (cropBoxData.height - canvasData.height));\n canvasData.maxLeft = cropBoxData.left;\n canvasData.maxTop = cropBoxData.top;\n if (viewMode === 2) {\n if (canvasData.width >= containerData.width) {\n canvasData.minLeft = Math.min(0, newCanvasLeft);\n canvasData.maxLeft = Math.max(0, newCanvasLeft);\n }\n if (canvasData.height >= containerData.height) {\n canvasData.minTop = Math.min(0, newCanvasTop);\n canvasData.maxTop = Math.max(0, newCanvasTop);\n }\n }\n }\n } else {\n canvasData.minLeft = -canvasData.width;\n canvasData.minTop = -canvasData.height;\n canvasData.maxLeft = containerData.width;\n canvasData.maxTop = containerData.height;\n }\n }\n },\n renderCanvas: function renderCanvas(changed, transformed) {\n var canvasData = this.canvasData,\n imageData = this.imageData;\n if (transformed) {\n var _getRotatedSizes = getRotatedSizes({\n width: imageData.naturalWidth * Math.abs(imageData.scaleX || 1),\n height: imageData.naturalHeight * Math.abs(imageData.scaleY || 1),\n degree: imageData.rotate || 0\n }),\n naturalWidth = _getRotatedSizes.width,\n naturalHeight = _getRotatedSizes.height;\n var width = canvasData.width * (naturalWidth / canvasData.naturalWidth);\n var height = canvasData.height * (naturalHeight / canvasData.naturalHeight);\n canvasData.left -= (width - canvasData.width) / 2;\n canvasData.top -= (height - canvasData.height) / 2;\n canvasData.width = width;\n canvasData.height = height;\n canvasData.aspectRatio = naturalWidth / naturalHeight;\n canvasData.naturalWidth = naturalWidth;\n canvasData.naturalHeight = naturalHeight;\n this.limitCanvas(true, false);\n }\n if (canvasData.width > canvasData.maxWidth || canvasData.width < canvasData.minWidth) {\n canvasData.left = canvasData.oldLeft;\n }\n if (canvasData.height > canvasData.maxHeight || canvasData.height < canvasData.minHeight) {\n canvasData.top = canvasData.oldTop;\n }\n canvasData.width = Math.min(Math.max(canvasData.width, canvasData.minWidth), canvasData.maxWidth);\n canvasData.height = Math.min(Math.max(canvasData.height, canvasData.minHeight), canvasData.maxHeight);\n this.limitCanvas(false, true);\n canvasData.left = Math.min(Math.max(canvasData.left, canvasData.minLeft), canvasData.maxLeft);\n canvasData.top = Math.min(Math.max(canvasData.top, canvasData.minTop), canvasData.maxTop);\n canvasData.oldLeft = canvasData.left;\n canvasData.oldTop = canvasData.top;\n setStyle(this.canvas, assign({\n width: canvasData.width,\n height: canvasData.height\n }, getTransforms({\n translateX: canvasData.left,\n translateY: canvasData.top\n })));\n this.renderImage(changed);\n if (this.cropped && this.limited) {\n this.limitCropBox(true, true);\n }\n },\n renderImage: function renderImage(changed) {\n var canvasData = this.canvasData,\n imageData = this.imageData;\n var width = imageData.naturalWidth * (canvasData.width / canvasData.naturalWidth);\n var height = imageData.naturalHeight * (canvasData.height / canvasData.naturalHeight);\n assign(imageData, {\n width: width,\n height: height,\n left: (canvasData.width - width) / 2,\n top: (canvasData.height - height) / 2\n });\n setStyle(this.image, assign({\n width: imageData.width,\n height: imageData.height\n }, getTransforms(assign({\n translateX: imageData.left,\n translateY: imageData.top\n }, imageData))));\n if (changed) {\n this.output();\n }\n },\n initCropBox: function initCropBox() {\n var options = this.options,\n canvasData = this.canvasData;\n var aspectRatio = options.aspectRatio || options.initialAspectRatio;\n var autoCropArea = Number(options.autoCropArea) || 0.8;\n var cropBoxData = {\n width: canvasData.width,\n height: canvasData.height\n };\n if (aspectRatio) {\n if (canvasData.height * aspectRatio > canvasData.width) {\n cropBoxData.height = cropBoxData.width / aspectRatio;\n } else {\n cropBoxData.width = cropBoxData.height * aspectRatio;\n }\n }\n this.cropBoxData = cropBoxData;\n this.limitCropBox(true, true);\n\n // Initialize auto crop area\n cropBoxData.width = Math.min(Math.max(cropBoxData.width, cropBoxData.minWidth), cropBoxData.maxWidth);\n cropBoxData.height = Math.min(Math.max(cropBoxData.height, cropBoxData.minHeight), cropBoxData.maxHeight);\n\n // The width/height of auto crop area must large than \"minWidth/Height\"\n cropBoxData.width = Math.max(cropBoxData.minWidth, cropBoxData.width * autoCropArea);\n cropBoxData.height = Math.max(cropBoxData.minHeight, cropBoxData.height * autoCropArea);\n cropBoxData.left = canvasData.left + (canvasData.width - cropBoxData.width) / 2;\n cropBoxData.top = canvasData.top + (canvasData.height - cropBoxData.height) / 2;\n cropBoxData.oldLeft = cropBoxData.left;\n cropBoxData.oldTop = cropBoxData.top;\n this.initialCropBoxData = assign({}, cropBoxData);\n },\n limitCropBox: function limitCropBox(sizeLimited, positionLimited) {\n var options = this.options,\n containerData = this.containerData,\n canvasData = this.canvasData,\n cropBoxData = this.cropBoxData,\n limited = this.limited;\n var aspectRatio = options.aspectRatio;\n if (sizeLimited) {\n var minCropBoxWidth = Number(options.minCropBoxWidth) || 0;\n var minCropBoxHeight = Number(options.minCropBoxHeight) || 0;\n var maxCropBoxWidth = limited ? Math.min(containerData.width, canvasData.width, canvasData.width + canvasData.left, containerData.width - canvasData.left) : containerData.width;\n var maxCropBoxHeight = limited ? Math.min(containerData.height, canvasData.height, canvasData.height + canvasData.top, containerData.height - canvasData.top) : containerData.height;\n\n // The min/maxCropBoxWidth/Height must be less than container's width/height\n minCropBoxWidth = Math.min(minCropBoxWidth, containerData.width);\n minCropBoxHeight = Math.min(minCropBoxHeight, containerData.height);\n if (aspectRatio) {\n if (minCropBoxWidth && minCropBoxHeight) {\n if (minCropBoxHeight * aspectRatio > minCropBoxWidth) {\n minCropBoxHeight = minCropBoxWidth / aspectRatio;\n } else {\n minCropBoxWidth = minCropBoxHeight * aspectRatio;\n }\n } else if (minCropBoxWidth) {\n minCropBoxHeight = minCropBoxWidth / aspectRatio;\n } else if (minCropBoxHeight) {\n minCropBoxWidth = minCropBoxHeight * aspectRatio;\n }\n if (maxCropBoxHeight * aspectRatio > maxCropBoxWidth) {\n maxCropBoxHeight = maxCropBoxWidth / aspectRatio;\n } else {\n maxCropBoxWidth = maxCropBoxHeight * aspectRatio;\n }\n }\n\n // The minWidth/Height must be less than maxWidth/Height\n cropBoxData.minWidth = Math.min(minCropBoxWidth, maxCropBoxWidth);\n cropBoxData.minHeight = Math.min(minCropBoxHeight, maxCropBoxHeight);\n cropBoxData.maxWidth = maxCropBoxWidth;\n cropBoxData.maxHeight = maxCropBoxHeight;\n }\n if (positionLimited) {\n if (limited) {\n cropBoxData.minLeft = Math.max(0, canvasData.left);\n cropBoxData.minTop = Math.max(0, canvasData.top);\n cropBoxData.maxLeft = Math.min(containerData.width, canvasData.left + canvasData.width) - cropBoxData.width;\n cropBoxData.maxTop = Math.min(containerData.height, canvasData.top + canvasData.height) - cropBoxData.height;\n } else {\n cropBoxData.minLeft = 0;\n cropBoxData.minTop = 0;\n cropBoxData.maxLeft = containerData.width - cropBoxData.width;\n cropBoxData.maxTop = containerData.height - cropBoxData.height;\n }\n }\n },\n renderCropBox: function renderCropBox() {\n var options = this.options,\n containerData = this.containerData,\n cropBoxData = this.cropBoxData;\n if (cropBoxData.width > cropBoxData.maxWidth || cropBoxData.width < cropBoxData.minWidth) {\n cropBoxData.left = cropBoxData.oldLeft;\n }\n if (cropBoxData.height > cropBoxData.maxHeight || cropBoxData.height < cropBoxData.minHeight) {\n cropBoxData.top = cropBoxData.oldTop;\n }\n cropBoxData.width = Math.min(Math.max(cropBoxData.width, cropBoxData.minWidth), cropBoxData.maxWidth);\n cropBoxData.height = Math.min(Math.max(cropBoxData.height, cropBoxData.minHeight), cropBoxData.maxHeight);\n this.limitCropBox(false, true);\n cropBoxData.left = Math.min(Math.max(cropBoxData.left, cropBoxData.minLeft), cropBoxData.maxLeft);\n cropBoxData.top = Math.min(Math.max(cropBoxData.top, cropBoxData.minTop), cropBoxData.maxTop);\n cropBoxData.oldLeft = cropBoxData.left;\n cropBoxData.oldTop = cropBoxData.top;\n if (options.movable && options.cropBoxMovable) {\n // Turn to move the canvas when the crop box is equal to the container\n setData(this.face, DATA_ACTION, cropBoxData.width >= containerData.width && cropBoxData.height >= containerData.height ? ACTION_MOVE : ACTION_ALL);\n }\n setStyle(this.cropBox, assign({\n width: cropBoxData.width,\n height: cropBoxData.height\n }, getTransforms({\n translateX: cropBoxData.left,\n translateY: cropBoxData.top\n })));\n if (this.cropped && this.limited) {\n this.limitCanvas(true, true);\n }\n if (!this.disabled) {\n this.output();\n }\n },\n output: function output() {\n this.preview();\n dispatchEvent(this.element, EVENT_CROP, this.getData());\n }\n};\n\nvar preview = {\n initPreview: function initPreview() {\n var element = this.element,\n crossOrigin = this.crossOrigin;\n var preview = this.options.preview;\n var url = crossOrigin ? this.crossOriginUrl : this.url;\n var alt = element.alt || 'The image to preview';\n var image = document.createElement('img');\n if (crossOrigin) {\n image.crossOrigin = crossOrigin;\n }\n image.src = url;\n image.alt = alt;\n this.viewBox.appendChild(image);\n this.viewBoxImage = image;\n if (!preview) {\n return;\n }\n var previews = preview;\n if (typeof preview === 'string') {\n previews = element.ownerDocument.querySelectorAll(preview);\n } else if (preview.querySelector) {\n previews = [preview];\n }\n this.previews = previews;\n forEach(previews, function (el) {\n var img = document.createElement('img');\n\n // Save the original size for recover\n setData(el, DATA_PREVIEW, {\n width: el.offsetWidth,\n height: el.offsetHeight,\n html: el.innerHTML\n });\n if (crossOrigin) {\n img.crossOrigin = crossOrigin;\n }\n img.src = url;\n img.alt = alt;\n\n /**\n * Override img element styles\n * Add `display:block` to avoid margin top issue\n * Add `height:auto` to override `height` attribute on IE8\n * (Occur only when margin-top <= -height)\n */\n img.style.cssText = 'display:block;' + 'width:100%;' + 'height:auto;' + 'min-width:0!important;' + 'min-height:0!important;' + 'max-width:none!important;' + 'max-height:none!important;' + 'image-orientation:0deg!important;\"';\n el.innerHTML = '';\n el.appendChild(img);\n });\n },\n resetPreview: function resetPreview() {\n forEach(this.previews, function (element) {\n var data = getData(element, DATA_PREVIEW);\n setStyle(element, {\n width: data.width,\n height: data.height\n });\n element.innerHTML = data.html;\n removeData(element, DATA_PREVIEW);\n });\n },\n preview: function preview() {\n var imageData = this.imageData,\n canvasData = this.canvasData,\n cropBoxData = this.cropBoxData;\n var cropBoxWidth = cropBoxData.width,\n cropBoxHeight = cropBoxData.height;\n var width = imageData.width,\n height = imageData.height;\n var left = cropBoxData.left - canvasData.left - imageData.left;\n var top = cropBoxData.top - canvasData.top - imageData.top;\n if (!this.cropped || this.disabled) {\n return;\n }\n setStyle(this.viewBoxImage, assign({\n width: width,\n height: height\n }, getTransforms(assign({\n translateX: -left,\n translateY: -top\n }, imageData))));\n forEach(this.previews, function (element) {\n var data = getData(element, DATA_PREVIEW);\n var originalWidth = data.width;\n var originalHeight = data.height;\n var newWidth = originalWidth;\n var newHeight = originalHeight;\n var ratio = 1;\n if (cropBoxWidth) {\n ratio = originalWidth / cropBoxWidth;\n newHeight = cropBoxHeight * ratio;\n }\n if (cropBoxHeight && newHeight > originalHeight) {\n ratio = originalHeight / cropBoxHeight;\n newWidth = cropBoxWidth * ratio;\n newHeight = originalHeight;\n }\n setStyle(element, {\n width: newWidth,\n height: newHeight\n });\n setStyle(element.getElementsByTagName('img')[0], assign({\n width: width * ratio,\n height: height * ratio\n }, getTransforms(assign({\n translateX: -left * ratio,\n translateY: -top * ratio\n }, imageData))));\n });\n }\n};\n\nvar events = {\n bind: function bind() {\n var element = this.element,\n options = this.options,\n cropper = this.cropper;\n if (isFunction(options.cropstart)) {\n addListener(element, EVENT_CROP_START, options.cropstart);\n }\n if (isFunction(options.cropmove)) {\n addListener(element, EVENT_CROP_MOVE, options.cropmove);\n }\n if (isFunction(options.cropend)) {\n addListener(element, EVENT_CROP_END, options.cropend);\n }\n if (isFunction(options.crop)) {\n addListener(element, EVENT_CROP, options.crop);\n }\n if (isFunction(options.zoom)) {\n addListener(element, EVENT_ZOOM, options.zoom);\n }\n addListener(cropper, EVENT_POINTER_DOWN, this.onCropStart = this.cropStart.bind(this));\n if (options.zoomable && options.zoomOnWheel) {\n addListener(cropper, EVENT_WHEEL, this.onWheel = this.wheel.bind(this), {\n passive: false,\n capture: true\n });\n }\n if (options.toggleDragModeOnDblclick) {\n addListener(cropper, EVENT_DBLCLICK, this.onDblclick = this.dblclick.bind(this));\n }\n addListener(element.ownerDocument, EVENT_POINTER_MOVE, this.onCropMove = this.cropMove.bind(this));\n addListener(element.ownerDocument, EVENT_POINTER_UP, this.onCropEnd = this.cropEnd.bind(this));\n if (options.responsive) {\n addListener(window, EVENT_RESIZE, this.onResize = this.resize.bind(this));\n }\n },\n unbind: function unbind() {\n var element = this.element,\n options = this.options,\n cropper = this.cropper;\n if (isFunction(options.cropstart)) {\n removeListener(element, EVENT_CROP_START, options.cropstart);\n }\n if (isFunction(options.cropmove)) {\n removeListener(element, EVENT_CROP_MOVE, options.cropmove);\n }\n if (isFunction(options.cropend)) {\n removeListener(element, EVENT_CROP_END, options.cropend);\n }\n if (isFunction(options.crop)) {\n removeListener(element, EVENT_CROP, options.crop);\n }\n if (isFunction(options.zoom)) {\n removeListener(element, EVENT_ZOOM, options.zoom);\n }\n removeListener(cropper, EVENT_POINTER_DOWN, this.onCropStart);\n if (options.zoomable && options.zoomOnWheel) {\n removeListener(cropper, EVENT_WHEEL, this.onWheel, {\n passive: false,\n capture: true\n });\n }\n if (options.toggleDragModeOnDblclick) {\n removeListener(cropper, EVENT_DBLCLICK, this.onDblclick);\n }\n removeListener(element.ownerDocument, EVENT_POINTER_MOVE, this.onCropMove);\n removeListener(element.ownerDocument, EVENT_POINTER_UP, this.onCropEnd);\n if (options.responsive) {\n removeListener(window, EVENT_RESIZE, this.onResize);\n }\n }\n};\n\nvar handlers = {\n resize: function resize() {\n if (this.disabled) {\n return;\n }\n var options = this.options,\n container = this.container,\n containerData = this.containerData;\n var ratioX = container.offsetWidth / containerData.width;\n var ratioY = container.offsetHeight / containerData.height;\n var ratio = Math.abs(ratioX - 1) > Math.abs(ratioY - 1) ? ratioX : ratioY;\n\n // Resize when width changed or height changed\n if (ratio !== 1) {\n var canvasData;\n var cropBoxData;\n if (options.restore) {\n canvasData = this.getCanvasData();\n cropBoxData = this.getCropBoxData();\n }\n this.render();\n if (options.restore) {\n this.setCanvasData(forEach(canvasData, function (n, i) {\n canvasData[i] = n * ratio;\n }));\n this.setCropBoxData(forEach(cropBoxData, function (n, i) {\n cropBoxData[i] = n * ratio;\n }));\n }\n }\n },\n dblclick: function dblclick() {\n if (this.disabled || this.options.dragMode === DRAG_MODE_NONE) {\n return;\n }\n this.setDragMode(hasClass(this.dragBox, CLASS_CROP) ? DRAG_MODE_MOVE : DRAG_MODE_CROP);\n },\n wheel: function wheel(event) {\n var _this = this;\n var ratio = Number(this.options.wheelZoomRatio) || 0.1;\n var delta = 1;\n if (this.disabled) {\n return;\n }\n event.preventDefault();\n\n // Limit wheel speed to prevent zoom too fast (#21)\n if (this.wheeling) {\n return;\n }\n this.wheeling = true;\n setTimeout(function () {\n _this.wheeling = false;\n }, 50);\n if (event.deltaY) {\n delta = event.deltaY > 0 ? 1 : -1;\n } else if (event.wheelDelta) {\n delta = -event.wheelDelta / 120;\n } else if (event.detail) {\n delta = event.detail > 0 ? 1 : -1;\n }\n this.zoom(-delta * ratio, event);\n },\n cropStart: function cropStart(event) {\n var buttons = event.buttons,\n button = event.button;\n if (this.disabled\n\n // Handle mouse event and pointer event and ignore touch event\n || (event.type === 'mousedown' || event.type === 'pointerdown' && event.pointerType === 'mouse') && (\n // No primary button (Usually the left button)\n isNumber(buttons) && buttons !== 1 || isNumber(button) && button !== 0\n\n // Open context menu\n || event.ctrlKey)) {\n return;\n }\n var options = this.options,\n pointers = this.pointers;\n var action;\n if (event.changedTouches) {\n // Handle touch event\n forEach(event.changedTouches, function (touch) {\n pointers[touch.identifier] = getPointer(touch);\n });\n } else {\n // Handle mouse event and pointer event\n pointers[event.pointerId || 0] = getPointer(event);\n }\n if (Object.keys(pointers).length > 1 && options.zoomable && options.zoomOnTouch) {\n action = ACTION_ZOOM;\n } else {\n action = getData(event.target, DATA_ACTION);\n }\n if (!REGEXP_ACTIONS.test(action)) {\n return;\n }\n if (dispatchEvent(this.element, EVENT_CROP_START, {\n originalEvent: event,\n action: action\n }) === false) {\n return;\n }\n\n // This line is required for preventing page zooming in iOS browsers\n event.preventDefault();\n this.action = action;\n this.cropping = false;\n if (action === ACTION_CROP) {\n this.cropping = true;\n addClass(this.dragBox, CLASS_MODAL);\n }\n },\n cropMove: function cropMove(event) {\n var action = this.action;\n if (this.disabled || !action) {\n return;\n }\n var pointers = this.pointers;\n event.preventDefault();\n if (dispatchEvent(this.element, EVENT_CROP_MOVE, {\n originalEvent: event,\n action: action\n }) === false) {\n return;\n }\n if (event.changedTouches) {\n forEach(event.changedTouches, function (touch) {\n // The first parameter should not be undefined (#432)\n assign(pointers[touch.identifier] || {}, getPointer(touch, true));\n });\n } else {\n assign(pointers[event.pointerId || 0] || {}, getPointer(event, true));\n }\n this.change(event);\n },\n cropEnd: function cropEnd(event) {\n if (this.disabled) {\n return;\n }\n var action = this.action,\n pointers = this.pointers;\n if (event.changedTouches) {\n forEach(event.changedTouches, function (touch) {\n delete pointers[touch.identifier];\n });\n } else {\n delete pointers[event.pointerId || 0];\n }\n if (!action) {\n return;\n }\n event.preventDefault();\n if (!Object.keys(pointers).length) {\n this.action = '';\n }\n if (this.cropping) {\n this.cropping = false;\n toggleClass(this.dragBox, CLASS_MODAL, this.cropped && this.options.modal);\n }\n dispatchEvent(this.element, EVENT_CROP_END, {\n originalEvent: event,\n action: action\n });\n }\n};\n\nvar change = {\n change: function change(event) {\n var options = this.options,\n canvasData = this.canvasData,\n containerData = this.containerData,\n cropBoxData = this.cropBoxData,\n pointers = this.pointers;\n var action = this.action;\n var aspectRatio = options.aspectRatio;\n var left = cropBoxData.left,\n top = cropBoxData.top,\n width = cropBoxData.width,\n height = cropBoxData.height;\n var right = left + width;\n var bottom = top + height;\n var minLeft = 0;\n var minTop = 0;\n var maxWidth = containerData.width;\n var maxHeight = containerData.height;\n var renderable = true;\n var offset;\n\n // Locking aspect ratio in \"free mode\" by holding shift key\n if (!aspectRatio && event.shiftKey) {\n aspectRatio = width && height ? width / height : 1;\n }\n if (this.limited) {\n minLeft = cropBoxData.minLeft;\n minTop = cropBoxData.minTop;\n maxWidth = minLeft + Math.min(containerData.width, canvasData.width, canvasData.left + canvasData.width);\n maxHeight = minTop + Math.min(containerData.height, canvasData.height, canvasData.top + canvasData.height);\n }\n var pointer = pointers[Object.keys(pointers)[0]];\n var range = {\n x: pointer.endX - pointer.startX,\n y: pointer.endY - pointer.startY\n };\n var check = function check(side) {\n switch (side) {\n case ACTION_EAST:\n if (right + range.x > maxWidth) {\n range.x = maxWidth - right;\n }\n break;\n case ACTION_WEST:\n if (left + range.x < minLeft) {\n range.x = minLeft - left;\n }\n break;\n case ACTION_NORTH:\n if (top + range.y < minTop) {\n range.y = minTop - top;\n }\n break;\n case ACTION_SOUTH:\n if (bottom + range.y > maxHeight) {\n range.y = maxHeight - bottom;\n }\n break;\n }\n };\n switch (action) {\n // Move crop box\n case ACTION_ALL:\n left += range.x;\n top += range.y;\n break;\n\n // Resize crop box\n case ACTION_EAST:\n if (range.x >= 0 && (right >= maxWidth || aspectRatio && (top <= minTop || bottom >= maxHeight))) {\n renderable = false;\n break;\n }\n check(ACTION_EAST);\n width += range.x;\n if (width < 0) {\n action = ACTION_WEST;\n width = -width;\n left -= width;\n }\n if (aspectRatio) {\n height = width / aspectRatio;\n top += (cropBoxData.height - height) / 2;\n }\n break;\n case ACTION_NORTH:\n if (range.y <= 0 && (top <= minTop || aspectRatio && (left <= minLeft || right >= maxWidth))) {\n renderable = false;\n break;\n }\n check(ACTION_NORTH);\n height -= range.y;\n top += range.y;\n if (height < 0) {\n action = ACTION_SOUTH;\n height = -height;\n top -= height;\n }\n if (aspectRatio) {\n width = height * aspectRatio;\n left += (cropBoxData.width - width) / 2;\n }\n break;\n case ACTION_WEST:\n if (range.x <= 0 && (left <= minLeft || aspectRatio && (top <= minTop || bottom >= maxHeight))) {\n renderable = false;\n break;\n }\n check(ACTION_WEST);\n width -= range.x;\n left += range.x;\n if (width < 0) {\n action = ACTION_EAST;\n width = -width;\n left -= width;\n }\n if (aspectRatio) {\n height = width / aspectRatio;\n top += (cropBoxData.height - height) / 2;\n }\n break;\n case ACTION_SOUTH:\n if (range.y >= 0 && (bottom >= maxHeight || aspectRatio && (left <= minLeft || right >= maxWidth))) {\n renderable = false;\n break;\n }\n check(ACTION_SOUTH);\n height += range.y;\n if (height < 0) {\n action = ACTION_NORTH;\n height = -height;\n top -= height;\n }\n if (aspectRatio) {\n width = height * aspectRatio;\n left += (cropBoxData.width - width) / 2;\n }\n break;\n case ACTION_NORTH_EAST:\n if (aspectRatio) {\n if (range.y <= 0 && (top <= minTop || right >= maxWidth)) {\n renderable = false;\n break;\n }\n check(ACTION_NORTH);\n height -= range.y;\n top += range.y;\n width = height * aspectRatio;\n } else {\n check(ACTION_NORTH);\n check(ACTION_EAST);\n if (range.x >= 0) {\n if (right < maxWidth) {\n width += range.x;\n } else if (range.y <= 0 && top <= minTop) {\n renderable = false;\n }\n } else {\n width += range.x;\n }\n if (range.y <= 0) {\n if (top > minTop) {\n height -= range.y;\n top += range.y;\n }\n } else {\n height -= range.y;\n top += range.y;\n }\n }\n if (width < 0 && height < 0) {\n action = ACTION_SOUTH_WEST;\n height = -height;\n width = -width;\n top -= height;\n left -= width;\n } else if (width < 0) {\n action = ACTION_NORTH_WEST;\n width = -width;\n left -= width;\n } else if (height < 0) {\n action = ACTION_SOUTH_EAST;\n height = -height;\n top -= height;\n }\n break;\n case ACTION_NORTH_WEST:\n if (aspectRatio) {\n if (range.y <= 0 && (top <= minTop || left <= minLeft)) {\n renderable = false;\n break;\n }\n check(ACTION_NORTH);\n height -= range.y;\n top += range.y;\n width = height * aspectRatio;\n left += cropBoxData.width - width;\n } else {\n check(ACTION_NORTH);\n check(ACTION_WEST);\n if (range.x <= 0) {\n if (left > minLeft) {\n width -= range.x;\n left += range.x;\n } else if (range.y <= 0 && top <= minTop) {\n renderable = false;\n }\n } else {\n width -= range.x;\n left += range.x;\n }\n if (range.y <= 0) {\n if (top > minTop) {\n height -= range.y;\n top += range.y;\n }\n } else {\n height -= range.y;\n top += range.y;\n }\n }\n if (width < 0 && height < 0) {\n action = ACTION_SOUTH_EAST;\n height = -height;\n width = -width;\n top -= height;\n left -= width;\n } else if (width < 0) {\n action = ACTION_NORTH_EAST;\n width = -width;\n left -= width;\n } else if (height < 0) {\n action = ACTION_SOUTH_WEST;\n height = -height;\n top -= height;\n }\n break;\n case ACTION_SOUTH_WEST:\n if (aspectRatio) {\n if (range.x <= 0 && (left <= minLeft || bottom >= maxHeight)) {\n renderable = false;\n break;\n }\n check(ACTION_WEST);\n width -= range.x;\n left += range.x;\n height = width / aspectRatio;\n } else {\n check(ACTION_SOUTH);\n check(ACTION_WEST);\n if (range.x <= 0) {\n if (left > minLeft) {\n width -= range.x;\n left += range.x;\n } else if (range.y >= 0 && bottom >= maxHeight) {\n renderable = false;\n }\n } else {\n width -= range.x;\n left += range.x;\n }\n if (range.y >= 0) {\n if (bottom < maxHeight) {\n height += range.y;\n }\n } else {\n height += range.y;\n }\n }\n if (width < 0 && height < 0) {\n action = ACTION_NORTH_EAST;\n height = -height;\n width = -width;\n top -= height;\n left -= width;\n } else if (width < 0) {\n action = ACTION_SOUTH_EAST;\n width = -width;\n left -= width;\n } else if (height < 0) {\n action = ACTION_NORTH_WEST;\n height = -height;\n top -= height;\n }\n break;\n case ACTION_SOUTH_EAST:\n if (aspectRatio) {\n if (range.x >= 0 && (right >= maxWidth || bottom >= maxHeight)) {\n renderable = false;\n break;\n }\n check(ACTION_EAST);\n width += range.x;\n height = width / aspectRatio;\n } else {\n check(ACTION_SOUTH);\n check(ACTION_EAST);\n if (range.x >= 0) {\n if (right < maxWidth) {\n width += range.x;\n } else if (range.y >= 0 && bottom >= maxHeight) {\n renderable = false;\n }\n } else {\n width += range.x;\n }\n if (range.y >= 0) {\n if (bottom < maxHeight) {\n height += range.y;\n }\n } else {\n height += range.y;\n }\n }\n if (width < 0 && height < 0) {\n action = ACTION_NORTH_WEST;\n height = -height;\n width = -width;\n top -= height;\n left -= width;\n } else if (width < 0) {\n action = ACTION_SOUTH_WEST;\n width = -width;\n left -= width;\n } else if (height < 0) {\n action = ACTION_NORTH_EAST;\n height = -height;\n top -= height;\n }\n break;\n\n // Move canvas\n case ACTION_MOVE:\n this.move(range.x, range.y);\n renderable = false;\n break;\n\n // Zoom canvas\n case ACTION_ZOOM:\n this.zoom(getMaxZoomRatio(pointers), event);\n renderable = false;\n break;\n\n // Create crop box\n case ACTION_CROP:\n if (!range.x || !range.y) {\n renderable = false;\n break;\n }\n offset = getOffset(this.cropper);\n left = pointer.startX - offset.left;\n top = pointer.startY - offset.top;\n width = cropBoxData.minWidth;\n height = cropBoxData.minHeight;\n if (range.x > 0) {\n action = range.y > 0 ? ACTION_SOUTH_EAST : ACTION_NORTH_EAST;\n } else if (range.x < 0) {\n left -= width;\n action = range.y > 0 ? ACTION_SOUTH_WEST : ACTION_NORTH_WEST;\n }\n if (range.y < 0) {\n top -= height;\n }\n\n // Show the crop box if is hidden\n if (!this.cropped) {\n removeClass(this.cropBox, CLASS_HIDDEN);\n this.cropped = true;\n if (this.limited) {\n this.limitCropBox(true, true);\n }\n }\n break;\n }\n if (renderable) {\n cropBoxData.width = width;\n cropBoxData.height = height;\n cropBoxData.left = left;\n cropBoxData.top = top;\n this.action = action;\n this.renderCropBox();\n }\n\n // Override\n forEach(pointers, function (p) {\n p.startX = p.endX;\n p.startY = p.endY;\n });\n }\n};\n\nvar methods = {\n // Show the crop box manually\n crop: function crop() {\n if (this.ready && !this.cropped && !this.disabled) {\n this.cropped = true;\n this.limitCropBox(true, true);\n if (this.options.modal) {\n addClass(this.dragBox, CLASS_MODAL);\n }\n removeClass(this.cropBox, CLASS_HIDDEN);\n this.setCropBoxData(this.initialCropBoxData);\n }\n return this;\n },\n // Reset the image and crop box to their initial states\n reset: function reset() {\n if (this.ready && !this.disabled) {\n this.imageData = assign({}, this.initialImageData);\n this.canvasData = assign({}, this.initialCanvasData);\n this.cropBoxData = assign({}, this.initialCropBoxData);\n this.renderCanvas();\n if (this.cropped) {\n this.renderCropBox();\n }\n }\n return this;\n },\n // Clear the crop box\n clear: function clear() {\n if (this.cropped && !this.disabled) {\n assign(this.cropBoxData, {\n left: 0,\n top: 0,\n width: 0,\n height: 0\n });\n this.cropped = false;\n this.renderCropBox();\n this.limitCanvas(true, true);\n\n // Render canvas after crop box rendered\n this.renderCanvas();\n removeClass(this.dragBox, CLASS_MODAL);\n addClass(this.cropBox, CLASS_HIDDEN);\n }\n return this;\n },\n /**\n * Replace the image's src and rebuild the cropper\n * @param {string} url - The new URL.\n * @param {boolean} [hasSameSize] - Indicate if the new image has the same size as the old one.\n * @returns {Cropper} this\n */\n replace: function replace(url) {\n var hasSameSize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n if (!this.disabled && url) {\n if (this.isImg) {\n this.element.src = url;\n }\n if (hasSameSize) {\n this.url = url;\n this.image.src = url;\n if (this.ready) {\n this.viewBoxImage.src = url;\n forEach(this.previews, function (element) {\n element.getElementsByTagName('img')[0].src = url;\n });\n }\n } else {\n if (this.isImg) {\n this.replaced = true;\n }\n this.options.data = null;\n this.uncreate();\n this.load(url);\n }\n }\n return this;\n },\n // Enable (unfreeze) the cropper\n enable: function enable() {\n if (this.ready && this.disabled) {\n this.disabled = false;\n removeClass(this.cropper, CLASS_DISABLED);\n }\n return this;\n },\n // Disable (freeze) the cropper\n disable: function disable() {\n if (this.ready && !this.disabled) {\n this.disabled = true;\n addClass(this.cropper, CLASS_DISABLED);\n }\n return this;\n },\n /**\n * Destroy the cropper and remove the instance from the image\n * @returns {Cropper} this\n */\n destroy: function destroy() {\n var element = this.element;\n if (!element[NAMESPACE]) {\n return this;\n }\n element[NAMESPACE] = undefined;\n if (this.isImg && this.replaced) {\n element.src = this.originalUrl;\n }\n this.uncreate();\n return this;\n },\n /**\n * Move the canvas with relative offsets\n * @param {number} offsetX - The relative offset distance on the x-axis.\n * @param {number} [offsetY=offsetX] - The relative offset distance on the y-axis.\n * @returns {Cropper} this\n */\n move: function move(offsetX) {\n var offsetY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : offsetX;\n var _this$canvasData = this.canvasData,\n left = _this$canvasData.left,\n top = _this$canvasData.top;\n return this.moveTo(isUndefined(offsetX) ? offsetX : left + Number(offsetX), isUndefined(offsetY) ? offsetY : top + Number(offsetY));\n },\n /**\n * Move the canvas to an absolute point\n * @param {number} x - The x-axis coordinate.\n * @param {number} [y=x] - The y-axis coordinate.\n * @returns {Cropper} this\n */\n moveTo: function moveTo(x) {\n var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : x;\n var canvasData = this.canvasData;\n var changed = false;\n x = Number(x);\n y = Number(y);\n if (this.ready && !this.disabled && this.options.movable) {\n if (isNumber(x)) {\n canvasData.left = x;\n changed = true;\n }\n if (isNumber(y)) {\n canvasData.top = y;\n changed = true;\n }\n if (changed) {\n this.renderCanvas(true);\n }\n }\n return this;\n },\n /**\n * Zoom the canvas with a relative ratio\n * @param {number} ratio - The target ratio.\n * @param {Event} _originalEvent - The original event if any.\n * @returns {Cropper} this\n */\n zoom: function zoom(ratio, _originalEvent) {\n var canvasData = this.canvasData;\n ratio = Number(ratio);\n if (ratio < 0) {\n ratio = 1 / (1 - ratio);\n } else {\n ratio = 1 + ratio;\n }\n return this.zoomTo(canvasData.width * ratio / canvasData.naturalWidth, null, _originalEvent);\n },\n /**\n * Zoom the canvas to an absolute ratio\n * @param {number} ratio - The target ratio.\n * @param {Object} pivot - The zoom pivot point coordinate.\n * @param {Event} _originalEvent - The original event if any.\n * @returns {Cropper} this\n */\n zoomTo: function zoomTo(ratio, pivot, _originalEvent) {\n var options = this.options,\n canvasData = this.canvasData;\n var width = canvasData.width,\n height = canvasData.height,\n naturalWidth = canvasData.naturalWidth,\n naturalHeight = canvasData.naturalHeight;\n ratio = Number(ratio);\n if (ratio >= 0 && this.ready && !this.disabled && options.zoomable) {\n var newWidth = naturalWidth * ratio;\n var newHeight = naturalHeight * ratio;\n if (dispatchEvent(this.element, EVENT_ZOOM, {\n ratio: ratio,\n oldRatio: width / naturalWidth,\n originalEvent: _originalEvent\n }) === false) {\n return this;\n }\n if (_originalEvent) {\n var pointers = this.pointers;\n var offset = getOffset(this.cropper);\n var center = pointers && Object.keys(pointers).length ? getPointersCenter(pointers) : {\n pageX: _originalEvent.pageX,\n pageY: _originalEvent.pageY\n };\n\n // Zoom from the triggering point of the event\n canvasData.left -= (newWidth - width) * ((center.pageX - offset.left - canvasData.left) / width);\n canvasData.top -= (newHeight - height) * ((center.pageY - offset.top - canvasData.top) / height);\n } else if (isPlainObject(pivot) && isNumber(pivot.x) && isNumber(pivot.y)) {\n canvasData.left -= (newWidth - width) * ((pivot.x - canvasData.left) / width);\n canvasData.top -= (newHeight - height) * ((pivot.y - canvasData.top) / height);\n } else {\n // Zoom from the center of the canvas\n canvasData.left -= (newWidth - width) / 2;\n canvasData.top -= (newHeight - height) / 2;\n }\n canvasData.width = newWidth;\n canvasData.height = newHeight;\n this.renderCanvas(true);\n }\n return this;\n },\n /**\n * Rotate the canvas with a relative degree\n * @param {number} degree - The rotate degree.\n * @returns {Cropper} this\n */\n rotate: function rotate(degree) {\n return this.rotateTo((this.imageData.rotate || 0) + Number(degree));\n },\n /**\n * Rotate the canvas to an absolute degree\n * @param {number} degree - The rotate degree.\n * @returns {Cropper} this\n */\n rotateTo: function rotateTo(degree) {\n degree = Number(degree);\n if (isNumber(degree) && this.ready && !this.disabled && this.options.rotatable) {\n this.imageData.rotate = degree % 360;\n this.renderCanvas(true, true);\n }\n return this;\n },\n /**\n * Scale the image on the x-axis.\n * @param {number} scaleX - The scale ratio on the x-axis.\n * @returns {Cropper} this\n */\n scaleX: function scaleX(_scaleX) {\n var scaleY = this.imageData.scaleY;\n return this.scale(_scaleX, isNumber(scaleY) ? scaleY : 1);\n },\n /**\n * Scale the image on the y-axis.\n * @param {number} scaleY - The scale ratio on the y-axis.\n * @returns {Cropper} this\n */\n scaleY: function scaleY(_scaleY) {\n var scaleX = this.imageData.scaleX;\n return this.scale(isNumber(scaleX) ? scaleX : 1, _scaleY);\n },\n /**\n * Scale the image\n * @param {number} scaleX - The scale ratio on the x-axis.\n * @param {number} [scaleY=scaleX] - The scale ratio on the y-axis.\n * @returns {Cropper} this\n */\n scale: function scale(scaleX) {\n var scaleY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : scaleX;\n var imageData = this.imageData;\n var transformed = false;\n scaleX = Number(scaleX);\n scaleY = Number(scaleY);\n if (this.ready && !this.disabled && this.options.scalable) {\n if (isNumber(scaleX)) {\n imageData.scaleX = scaleX;\n transformed = true;\n }\n if (isNumber(scaleY)) {\n imageData.scaleY = scaleY;\n transformed = true;\n }\n if (transformed) {\n this.renderCanvas(true, true);\n }\n }\n return this;\n },\n /**\n * Get the cropped area position and size data (base on the original image)\n * @param {boolean} [rounded=false] - Indicate if round the data values or not.\n * @returns {Object} The result cropped data.\n */\n getData: function getData() {\n var rounded = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n var options = this.options,\n imageData = this.imageData,\n canvasData = this.canvasData,\n cropBoxData = this.cropBoxData;\n var data;\n if (this.ready && this.cropped) {\n data = {\n x: cropBoxData.left - canvasData.left,\n y: cropBoxData.top - canvasData.top,\n width: cropBoxData.width,\n height: cropBoxData.height\n };\n var ratio = imageData.width / imageData.naturalWidth;\n forEach(data, function (n, i) {\n data[i] = n / ratio;\n });\n if (rounded) {\n // In case rounding off leads to extra 1px in right or bottom border\n // we should round the top-left corner and the dimension (#343).\n var bottom = Math.round(data.y + data.height);\n var right = Math.round(data.x + data.width);\n data.x = Math.round(data.x);\n data.y = Math.round(data.y);\n data.width = right - data.x;\n data.height = bottom - data.y;\n }\n } else {\n data = {\n x: 0,\n y: 0,\n width: 0,\n height: 0\n };\n }\n if (options.rotatable) {\n data.rotate = imageData.rotate || 0;\n }\n if (options.scalable) {\n data.scaleX = imageData.scaleX || 1;\n data.scaleY = imageData.scaleY || 1;\n }\n return data;\n },\n /**\n * Set the cropped area position and size with new data\n * @param {Object} data - The new data.\n * @returns {Cropper} this\n */\n setData: function setData(data) {\n var options = this.options,\n imageData = this.imageData,\n canvasData = this.canvasData;\n var cropBoxData = {};\n if (this.ready && !this.disabled && isPlainObject(data)) {\n var transformed = false;\n if (options.rotatable) {\n if (isNumber(data.rotate) && data.rotate !== imageData.rotate) {\n imageData.rotate = data.rotate;\n transformed = true;\n }\n }\n if (options.scalable) {\n if (isNumber(data.scaleX) && data.scaleX !== imageData.scaleX) {\n imageData.scaleX = data.scaleX;\n transformed = true;\n }\n if (isNumber(data.scaleY) && data.scaleY !== imageData.scaleY) {\n imageData.scaleY = data.scaleY;\n transformed = true;\n }\n }\n if (transformed) {\n this.renderCanvas(true, true);\n }\n var ratio = imageData.width / imageData.naturalWidth;\n if (isNumber(data.x)) {\n cropBoxData.left = data.x * ratio + canvasData.left;\n }\n if (isNumber(data.y)) {\n cropBoxData.top = data.y * ratio + canvasData.top;\n }\n if (isNumber(data.width)) {\n cropBoxData.width = data.width * ratio;\n }\n if (isNumber(data.height)) {\n cropBoxData.height = data.height * ratio;\n }\n this.setCropBoxData(cropBoxData);\n }\n return this;\n },\n /**\n * Get the container size data.\n * @returns {Object} The result container data.\n */\n getContainerData: function getContainerData() {\n return this.ready ? assign({}, this.containerData) : {};\n },\n /**\n * Get the image position and size data.\n * @returns {Object} The result image data.\n */\n getImageData: function getImageData() {\n return this.sized ? assign({}, this.imageData) : {};\n },\n /**\n * Get the canvas position and size data.\n * @returns {Object} The result canvas data.\n */\n getCanvasData: function getCanvasData() {\n var canvasData = this.canvasData;\n var data = {};\n if (this.ready) {\n forEach(['left', 'top', 'width', 'height', 'naturalWidth', 'naturalHeight'], function (n) {\n data[n] = canvasData[n];\n });\n }\n return data;\n },\n /**\n * Set the canvas position and size with new data.\n * @param {Object} data - The new canvas data.\n * @returns {Cropper} this\n */\n setCanvasData: function setCanvasData(data) {\n var canvasData = this.canvasData;\n var aspectRatio = canvasData.aspectRatio;\n if (this.ready && !this.disabled && isPlainObject(data)) {\n if (isNumber(data.left)) {\n canvasData.left = data.left;\n }\n if (isNumber(data.top)) {\n canvasData.top = data.top;\n }\n if (isNumber(data.width)) {\n canvasData.width = data.width;\n canvasData.height = data.width / aspectRatio;\n } else if (isNumber(data.height)) {\n canvasData.height = data.height;\n canvasData.width = data.height * aspectRatio;\n }\n this.renderCanvas(true);\n }\n return this;\n },\n /**\n * Get the crop box position and size data.\n * @returns {Object} The result crop box data.\n */\n getCropBoxData: function getCropBoxData() {\n var cropBoxData = this.cropBoxData;\n var data;\n if (this.ready && this.cropped) {\n data = {\n left: cropBoxData.left,\n top: cropBoxData.top,\n width: cropBoxData.width,\n height: cropBoxData.height\n };\n }\n return data || {};\n },\n /**\n * Set the crop box position and size with new data.\n * @param {Object} data - The new crop box data.\n * @returns {Cropper} this\n */\n setCropBoxData: function setCropBoxData(data) {\n var cropBoxData = this.cropBoxData;\n var aspectRatio = this.options.aspectRatio;\n var widthChanged;\n var heightChanged;\n if (this.ready && this.cropped && !this.disabled && isPlainObject(data)) {\n if (isNumber(data.left)) {\n cropBoxData.left = data.left;\n }\n if (isNumber(data.top)) {\n cropBoxData.top = data.top;\n }\n if (isNumber(data.width) && data.width !== cropBoxData.width) {\n widthChanged = true;\n cropBoxData.width = data.width;\n }\n if (isNumber(data.height) && data.height !== cropBoxData.height) {\n heightChanged = true;\n cropBoxData.height = data.height;\n }\n if (aspectRatio) {\n if (widthChanged) {\n cropBoxData.height = cropBoxData.width / aspectRatio;\n } else if (heightChanged) {\n cropBoxData.width = cropBoxData.height * aspectRatio;\n }\n }\n this.renderCropBox();\n }\n return this;\n },\n /**\n * Get a canvas drawn the cropped image.\n * @param {Object} [options={}] - The config options.\n * @returns {HTMLCanvasElement} - The result canvas.\n */\n getCroppedCanvas: function getCroppedCanvas() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n if (!this.ready || !window.HTMLCanvasElement) {\n return null;\n }\n var canvasData = this.canvasData;\n var source = getSourceCanvas(this.image, this.imageData, canvasData, options);\n\n // Returns the source canvas if it is not cropped.\n if (!this.cropped) {\n return source;\n }\n var _this$getData = this.getData(options.rounded),\n initialX = _this$getData.x,\n initialY = _this$getData.y,\n initialWidth = _this$getData.width,\n initialHeight = _this$getData.height;\n var ratio = source.width / Math.floor(canvasData.naturalWidth);\n if (ratio !== 1) {\n initialX *= ratio;\n initialY *= ratio;\n initialWidth *= ratio;\n initialHeight *= ratio;\n }\n var aspectRatio = initialWidth / initialHeight;\n var maxSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: options.maxWidth || Infinity,\n height: options.maxHeight || Infinity\n });\n var minSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: options.minWidth || 0,\n height: options.minHeight || 0\n }, 'cover');\n var _getAdjustedSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: options.width || (ratio !== 1 ? source.width : initialWidth),\n height: options.height || (ratio !== 1 ? source.height : initialHeight)\n }),\n width = _getAdjustedSizes.width,\n height = _getAdjustedSizes.height;\n width = Math.min(maxSizes.width, Math.max(minSizes.width, width));\n height = Math.min(maxSizes.height, Math.max(minSizes.height, height));\n var canvas = document.createElement('canvas');\n var context = canvas.getContext('2d');\n canvas.width = normalizeDecimalNumber(width);\n canvas.height = normalizeDecimalNumber(height);\n context.fillStyle = options.fillColor || 'transparent';\n context.fillRect(0, 0, width, height);\n var _options$imageSmoothi = options.imageSmoothingEnabled,\n imageSmoothingEnabled = _options$imageSmoothi === void 0 ? true : _options$imageSmoothi,\n imageSmoothingQuality = options.imageSmoothingQuality;\n context.imageSmoothingEnabled = imageSmoothingEnabled;\n if (imageSmoothingQuality) {\n context.imageSmoothingQuality = imageSmoothingQuality;\n }\n\n // https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.drawImage\n var sourceWidth = source.width;\n var sourceHeight = source.height;\n\n // Source canvas parameters\n var srcX = initialX;\n var srcY = initialY;\n var srcWidth;\n var srcHeight;\n\n // Destination canvas parameters\n var dstX;\n var dstY;\n var dstWidth;\n var dstHeight;\n if (srcX <= -initialWidth || srcX > sourceWidth) {\n srcX = 0;\n srcWidth = 0;\n dstX = 0;\n dstWidth = 0;\n } else if (srcX <= 0) {\n dstX = -srcX;\n srcX = 0;\n srcWidth = Math.min(sourceWidth, initialWidth + srcX);\n dstWidth = srcWidth;\n } else if (srcX <= sourceWidth) {\n dstX = 0;\n srcWidth = Math.min(initialWidth, sourceWidth - srcX);\n dstWidth = srcWidth;\n }\n if (srcWidth <= 0 || srcY <= -initialHeight || srcY > sourceHeight) {\n srcY = 0;\n srcHeight = 0;\n dstY = 0;\n dstHeight = 0;\n } else if (srcY <= 0) {\n dstY = -srcY;\n srcY = 0;\n srcHeight = Math.min(sourceHeight, initialHeight + srcY);\n dstHeight = srcHeight;\n } else if (srcY <= sourceHeight) {\n dstY = 0;\n srcHeight = Math.min(initialHeight, sourceHeight - srcY);\n dstHeight = srcHeight;\n }\n var params = [srcX, srcY, srcWidth, srcHeight];\n\n // Avoid \"IndexSizeError\"\n if (dstWidth > 0 && dstHeight > 0) {\n var scale = width / initialWidth;\n params.push(dstX * scale, dstY * scale, dstWidth * scale, dstHeight * scale);\n }\n\n // All the numerical parameters should be integer for `drawImage`\n // https://github.com/fengyuanchen/cropper/issues/476\n context.drawImage.apply(context, [source].concat(_toConsumableArray(params.map(function (param) {\n return Math.floor(normalizeDecimalNumber(param));\n }))));\n return canvas;\n },\n /**\n * Change the aspect ratio of the crop box.\n * @param {number} aspectRatio - The new aspect ratio.\n * @returns {Cropper} this\n */\n setAspectRatio: function setAspectRatio(aspectRatio) {\n var options = this.options;\n if (!this.disabled && !isUndefined(aspectRatio)) {\n // 0 -> NaN\n options.aspectRatio = Math.max(0, aspectRatio) || NaN;\n if (this.ready) {\n this.initCropBox();\n if (this.cropped) {\n this.renderCropBox();\n }\n }\n }\n return this;\n },\n /**\n * Change the drag mode.\n * @param {string} mode - The new drag mode.\n * @returns {Cropper} this\n */\n setDragMode: function setDragMode(mode) {\n var options = this.options,\n dragBox = this.dragBox,\n face = this.face;\n if (this.ready && !this.disabled) {\n var croppable = mode === DRAG_MODE_CROP;\n var movable = options.movable && mode === DRAG_MODE_MOVE;\n mode = croppable || movable ? mode : DRAG_MODE_NONE;\n options.dragMode = mode;\n setData(dragBox, DATA_ACTION, mode);\n toggleClass(dragBox, CLASS_CROP, croppable);\n toggleClass(dragBox, CLASS_MOVE, movable);\n if (!options.cropBoxMovable) {\n // Sync drag mode to crop box when it is not movable\n setData(face, DATA_ACTION, mode);\n toggleClass(face, CLASS_CROP, croppable);\n toggleClass(face, CLASS_MOVE, movable);\n }\n }\n return this;\n }\n};\n\nvar AnotherCropper = WINDOW.Cropper;\nvar Cropper = /*#__PURE__*/function () {\n /**\n * Create a new Cropper.\n * @param {Element} element - The target element for cropping.\n * @param {Object} [options={}] - The configuration options.\n */\n function Cropper(element) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n _classCallCheck(this, Cropper);\n if (!element || !REGEXP_TAG_NAME.test(element.tagName)) {\n throw new Error('The first argument is required and must be an <img> or <canvas> element.');\n }\n this.element = element;\n this.options = assign({}, DEFAULTS, isPlainObject(options) && options);\n this.cropped = false;\n this.disabled = false;\n this.pointers = {};\n this.ready = false;\n this.reloading = false;\n this.replaced = false;\n this.sized = false;\n this.sizing = false;\n this.init();\n }\n return _createClass(Cropper, [{\n key: \"init\",\n value: function init() {\n var element = this.element;\n var tagName = element.tagName.toLowerCase();\n var url;\n if (element[NAMESPACE]) {\n return;\n }\n element[NAMESPACE] = this;\n if (tagName === 'img') {\n this.isImg = true;\n\n // e.g.: \"img/picture.jpg\"\n url = element.getAttribute('src') || '';\n this.originalUrl = url;\n\n // Stop when it's a blank image\n if (!url) {\n return;\n }\n\n // e.g.: \"https://example.com/img/picture.jpg\"\n url = element.src;\n } else if (tagName === 'canvas' && window.HTMLCanvasElement) {\n url = element.toDataURL();\n }\n this.load(url);\n }\n }, {\n key: \"load\",\n value: function load(url) {\n var _this = this;\n if (!url) {\n return;\n }\n this.url = url;\n this.imageData = {};\n var element = this.element,\n options = this.options;\n if (!options.rotatable && !options.scalable) {\n options.checkOrientation = false;\n }\n\n // Only IE10+ supports Typed Arrays\n if (!options.checkOrientation || !window.ArrayBuffer) {\n this.clone();\n return;\n }\n\n // Detect the mime type of the image directly if it is a Data URL\n if (REGEXP_DATA_URL.test(url)) {\n // Read ArrayBuffer from Data URL of JPEG images directly for better performance\n if (REGEXP_DATA_URL_JPEG.test(url)) {\n this.read(dataURLToArrayBuffer(url));\n } else {\n // Only a JPEG image may contains Exif Orientation information,\n // the rest types of Data URLs are not necessary to check orientation at all.\n this.clone();\n }\n return;\n }\n\n // 1. Detect the mime type of the image by a XMLHttpRequest.\n // 2. Load the image as ArrayBuffer for reading orientation if its a JPEG image.\n var xhr = new XMLHttpRequest();\n var clone = this.clone.bind(this);\n this.reloading = true;\n this.xhr = xhr;\n\n // 1. Cross origin requests are only supported for protocol schemes:\n // http, https, data, chrome, chrome-extension.\n // 2. Access to XMLHttpRequest from a Data URL will be blocked by CORS policy\n // in some browsers as IE11 and Safari.\n xhr.onabort = clone;\n xhr.onerror = clone;\n xhr.ontimeout = clone;\n xhr.onprogress = function () {\n // Abort the request directly if it not a JPEG image for better performance\n if (xhr.getResponseHeader('content-type') !== MIME_TYPE_JPEG) {\n xhr.abort();\n }\n };\n xhr.onload = function () {\n _this.read(xhr.response);\n };\n xhr.onloadend = function () {\n _this.reloading = false;\n _this.xhr = null;\n };\n\n // Bust cache when there is a \"crossOrigin\" property to avoid browser cache error\n if (options.checkCrossOrigin && isCrossOriginURL(url) && element.crossOrigin) {\n url = addTimestamp(url);\n }\n\n // The third parameter is required for avoiding side-effect (#682)\n xhr.open('GET', url, true);\n xhr.responseType = 'arraybuffer';\n xhr.withCredentials = element.crossOrigin === 'use-credentials';\n xhr.send();\n }\n }, {\n key: \"read\",\n value: function read(arrayBuffer) {\n var options = this.options,\n imageData = this.imageData;\n\n // Reset the orientation value to its default value 1\n // as some iOS browsers will render image with its orientation\n var orientation = resetAndGetOrientation(arrayBuffer);\n var rotate = 0;\n var scaleX = 1;\n var scaleY = 1;\n if (orientation > 1) {\n // Generate a new URL which has the default orientation value\n this.url = arrayBufferToDataURL(arrayBuffer, MIME_TYPE_JPEG);\n var _parseOrientation = parseOrientation(orientation);\n rotate = _parseOrientation.rotate;\n scaleX = _parseOrientation.scaleX;\n scaleY = _parseOrientation.scaleY;\n }\n if (options.rotatable) {\n imageData.rotate = rotate;\n }\n if (options.scalable) {\n imageData.scaleX = scaleX;\n imageData.scaleY = scaleY;\n }\n this.clone();\n }\n }, {\n key: \"clone\",\n value: function clone() {\n var element = this.element,\n url = this.url;\n var crossOrigin = element.crossOrigin;\n var crossOriginUrl = url;\n if (this.options.checkCrossOrigin && isCrossOriginURL(url)) {\n if (!crossOrigin) {\n crossOrigin = 'anonymous';\n }\n\n // Bust cache when there is not a \"crossOrigin\" property (#519)\n crossOriginUrl = addTimestamp(url);\n }\n this.crossOrigin = crossOrigin;\n this.crossOriginUrl = crossOriginUrl;\n var image = document.createElement('img');\n if (crossOrigin) {\n image.crossOrigin = crossOrigin;\n }\n image.src = crossOriginUrl || url;\n image.alt = element.alt || 'The image to crop';\n this.image = image;\n image.onload = this.start.bind(this);\n image.onerror = this.stop.bind(this);\n addClass(image, CLASS_HIDE);\n element.parentNode.insertBefore(image, element.nextSibling);\n }\n }, {\n key: \"start\",\n value: function start() {\n var _this2 = this;\n var image = this.image;\n image.onload = null;\n image.onerror = null;\n this.sizing = true;\n\n // Match all browsers that use WebKit as the layout engine in iOS devices,\n // such as Safari for iOS, Chrome for iOS, and in-app browsers.\n var isIOSWebKit = WINDOW.navigator && /(?:iPad|iPhone|iPod).*?AppleWebKit/i.test(WINDOW.navigator.userAgent);\n var done = function done(naturalWidth, naturalHeight) {\n assign(_this2.imageData, {\n naturalWidth: naturalWidth,\n naturalHeight: naturalHeight,\n aspectRatio: naturalWidth / naturalHeight\n });\n _this2.initialImageData = assign({}, _this2.imageData);\n _this2.sizing = false;\n _this2.sized = true;\n _this2.build();\n };\n\n // Most modern browsers (excepts iOS WebKit)\n if (image.naturalWidth && !isIOSWebKit) {\n done(image.naturalWidth, image.naturalHeight);\n return;\n }\n var sizingImage = document.createElement('img');\n var body = document.body || document.documentElement;\n this.sizingImage = sizingImage;\n sizingImage.onload = function () {\n done(sizingImage.width, sizingImage.height);\n if (!isIOSWebKit) {\n body.removeChild(sizingImage);\n }\n };\n sizingImage.src = image.src;\n\n // iOS WebKit will convert the image automatically\n // with its orientation once append it into DOM (#279)\n if (!isIOSWebKit) {\n sizingImage.style.cssText = 'left:0;' + 'max-height:none!important;' + 'max-width:none!important;' + 'min-height:0!important;' + 'min-width:0!important;' + 'opacity:0;' + 'position:absolute;' + 'top:0;' + 'z-index:-1;';\n body.appendChild(sizingImage);\n }\n }\n }, {\n key: \"stop\",\n value: function stop() {\n var image = this.image;\n image.onload = null;\n image.onerror = null;\n image.parentNode.removeChild(image);\n this.image = null;\n }\n }, {\n key: \"build\",\n value: function build() {\n if (!this.sized || this.ready) {\n return;\n }\n var element = this.element,\n options = this.options,\n image = this.image;\n\n // Create cropper elements\n var container = element.parentNode;\n var template = document.createElement('div');\n template.innerHTML = TEMPLATE;\n var cropper = template.querySelector(\".\".concat(NAMESPACE, \"-container\"));\n var canvas = cropper.querySelector(\".\".concat(NAMESPACE, \"-canvas\"));\n var dragBox = cropper.querySelector(\".\".concat(NAMESPACE, \"-drag-box\"));\n var cropBox = cropper.querySelector(\".\".concat(NAMESPACE, \"-crop-box\"));\n var face = cropBox.querySelector(\".\".concat(NAMESPACE, \"-face\"));\n this.container = container;\n this.cropper = cropper;\n this.canvas = canvas;\n this.dragBox = dragBox;\n this.cropBox = cropBox;\n this.viewBox = cropper.querySelector(\".\".concat(NAMESPACE, \"-view-box\"));\n this.face = face;\n canvas.appendChild(image);\n\n // Hide the original image\n addClass(element, CLASS_HIDDEN);\n\n // Inserts the cropper after to the current image\n container.insertBefore(cropper, element.nextSibling);\n\n // Show the hidden image\n removeClass(image, CLASS_HIDE);\n this.initPreview();\n this.bind();\n options.initialAspectRatio = Math.max(0, options.initialAspectRatio) || NaN;\n options.aspectRatio = Math.max(0, options.aspectRatio) || NaN;\n options.viewMode = Math.max(0, Math.min(3, Math.round(options.viewMode))) || 0;\n addClass(cropBox, CLASS_HIDDEN);\n if (!options.guides) {\n addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-dashed\")), CLASS_HIDDEN);\n }\n if (!options.center) {\n addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-center\")), CLASS_HIDDEN);\n }\n if (options.background) {\n addClass(cropper, \"\".concat(NAMESPACE, \"-bg\"));\n }\n if (!options.highlight) {\n addClass(face, CLASS_INVISIBLE);\n }\n if (options.cropBoxMovable) {\n addClass(face, CLASS_MOVE);\n setData(face, DATA_ACTION, ACTION_ALL);\n }\n if (!options.cropBoxResizable) {\n addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-line\")), CLASS_HIDDEN);\n addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-point\")), CLASS_HIDDEN);\n }\n this.render();\n this.ready = true;\n this.setDragMode(options.dragMode);\n if (options.autoCrop) {\n this.crop();\n }\n this.setData(options.data);\n if (isFunction(options.ready)) {\n addListener(element, EVENT_READY, options.ready, {\n once: true\n });\n }\n dispatchEvent(element, EVENT_READY);\n }\n }, {\n key: \"unbuild\",\n value: function unbuild() {\n if (!this.ready) {\n return;\n }\n this.ready = false;\n this.unbind();\n this.resetPreview();\n var parentNode = this.cropper.parentNode;\n if (parentNode) {\n parentNode.removeChild(this.cropper);\n }\n removeClass(this.element, CLASS_HIDDEN);\n }\n }, {\n key: \"uncreate\",\n value: function uncreate() {\n if (this.ready) {\n this.unbuild();\n this.ready = false;\n this.cropped = false;\n } else if (this.sizing) {\n this.sizingImage.onload = null;\n this.sizing = false;\n this.sized = false;\n } else if (this.reloading) {\n this.xhr.onabort = null;\n this.xhr.abort();\n } else if (this.image) {\n this.stop();\n }\n }\n\n /**\n * Get the no conflict cropper class.\n * @returns {Cropper} The cropper class.\n */\n }], [{\n key: \"noConflict\",\n value: function noConflict() {\n window.Cropper = AnotherCropper;\n return Cropper;\n }\n\n /**\n * Change the default options.\n * @param {Object} options - The new default options.\n */\n }, {\n key: \"setDefaults\",\n value: function setDefaults(options) {\n assign(DEFAULTS, isPlainObject(options) && options);\n }\n }]);\n}();\nassign(Cropper.prototype, render, preview, events, handlers, change, methods);\n\nexport { Cropper as default };\n","<script setup lang=\"ts\" generic=\"T extends EventTarget = EventTarget\">\nimport Cropper from 'cropperjs'\nimport { nextTick, onMounted, onUnmounted, ref } from 'vue'\nimport { isNull } from '@/utils/common'\nimport 'cropperjs/dist/cropper.css'\n\nconst props = withDefaults(\n defineProps<{\n // Library props\n src?: string\n alt?: string\n containerStyle?: { [key: string]: string } | undefined\n imgStyle?: { [key: string]: string } | undefined\n // CropperJS props\n aspectRatio?: number\n autoCrop?: boolean\n autoCropArea?: number\n background?: boolean\n center?: boolean\n checkCrossOrigin?: boolean\n checkOrientation?: boolean\n cropBoxMovable?: boolean\n cropBoxResizable?: boolean\n data?: Cropper.SetDataOptions | null\n dragMode?: Cropper.DragMode\n guides?: boolean\n highlight?: boolean\n initialAspectRatio?: number\n modal?: boolean\n movable?: boolean\n preview?: HTMLElement | HTMLElement[] | NodeListOf<HTMLElement> | string\n responsive?: boolean\n restore?: boolean\n rotatable?: boolean\n scalable?: boolean\n toggleDragModeOnDblclick?: boolean\n viewMode?: Cropper.ViewMode\n wheelZoomRatio?: number\n zoomOnTouch?: boolean\n zoomOnWheel?: boolean\n zoomable?: boolean\n // Size limitation\n minCanvasWidth?: number\n minCanvasHeight?: number\n minContainerWidth?: number\n minContainerHeight?: number\n minCropBoxWidth?: number\n minCropBoxHeight?: number\n // callbacks\n ready?: null | ((event: Cropper.ReadyEvent<T>) => void)\n crop?: null | ((event: Cropper.CropEvent<T>) => void)\n cropend?: null | ((event: Cropper.CropEndEvent<T>) => void)\n cropmove?: null | ((event: Cropper.CropMoveEvent<T>) => void)\n cropstart?: null | ((event: Cropper.CropStartEvent<T>) => void)\n zoom?: null | ((event: Cropper.ZoomEvent<T>) => void)\n }>(),\n {\n containerStyle: undefined,\n src: '',\n alt: '',\n imgStyle: undefined,\n aspectRatio: NaN,\n autoCrop: true,\n autoCropArea: 0.8,\n background: true,\n center: true,\n checkCrossOrigin: true,\n checkOrientation: true,\n cropBoxMovable: true,\n cropBoxResizable: true,\n data: null,\n dragMode: 'crop',\n guides: true,\n highlight: true,\n initialAspectRatio: NaN,\n modal: true,\n movable: true,\n preview: '',\n responsive: true,\n restore: true,\n rotatable: true,\n scalable: true,\n toggleDragModeOnDblclick: true,\n viewMode: 0,\n wheelZoomRatio: 0.1,\n zoomOnTouch: true,\n zoomable: true,\n minCanvasWidth: 0,\n minCanvasHeight: 0,\n minContainerWidth: 200,\n minContainerHeight: 100,\n minCropBoxWidth: 0,\n minCropBoxHeight: 0,\n ready: null,\n crop: null,\n cropend: null,\n cropmove: null,\n cropstart: null,\n zoom: null,\n }\n)\n\nconst cropperInstance = ref<InstanceType<typeof Cropper> | null>(null)\nconst imgEl = ref<HTMLImageElement | HTMLCanvasElement | null>(null)\nconst loading = ref(true)\n\nconst enable = () => {\n cropperInstance.value?.enable()\n}\n\nconst disable = () => {\n cropperInstance.value?.disable()\n}\n\nconst destroy = () => {\n cropperInstance.value?.destroy()\n}\n\nconst getImageData = () => {\n return cropperInstance.value?.getImageData()\n}\n\nconst getData = () => {\n return cropperInstance.value?.getData()\n}\n\nconst setData = (data: Cropper.SetDataOptions) => {\n return cropperInstance.value?.setData(data)\n}\n\ndefineExpose({\n enable,\n disable,\n destroy,\n getImageData,\n getData,\n setData,\n})\n\nonMounted(() => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { containerStyle, src, alt, imgStyle, ...data } = props\n const propsOptions = data as Record<string, any>\n const options: Record<string, any> = {}\n for (const key in data) {\n if (Object.prototype.hasOwnProperty.call(propsOptions, key) && propsOptions[key] !== undefined) {\n options[key] = propsOptions[key]\n }\n }\n nextTick(() => {\n if (!isNull(imgEl.value)) {\n cropperInstance.value = new Cropper(imgEl.value as any, options)\n setTimeout(() => {\n loading.value = false\n }, 500)\n }\n })\n})\n\nonUnmounted(() => {\n destroy()\n})\n</script>\n\n<template>\n <div class=\"d-flex flex-column\">\n <div\n v-if=\"loading\"\n class=\"d-flex w-100 align-center justify-center\"\n >\n <VProgressCircular\n class=\"position-absolute\"\n indeterminate\n />\n </div>\n\n <div :style=\"containerStyle\">\n <img\n ref=\"imgEl\"\n :style=\"[{ 'max-width': '100%', opacity: loading ? 0 : 1 }, imgStyle]\"\n :alt=\"alt\"\n :src=\"src\"\n >\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, onUnmounted, useTemplateRef } from 'vue'\nimport { useAlerts } from '@/composables/system/alerts'\nimport { useImageRoiStore } from '@/components/damImage/uploadQueue/composables/imageRoiStore'\nimport { updateRoi } from '@/components/damImage/uploadQueue/api/damImageRoiApi'\nimport { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport { cropToRegion, regionToCrop, type ACropperjsExposed } from '@/components/damImage/uploadQueue/composables/cropperJsService'\nimport ACropperjs from '@/components/ACropperjs.vue'\nimport { useDamConfigState } from '@/components/damImage/uploadQueue/composables/damConfigState'\nimport type { DocId, IntegerId } from '@/types/common'\nimport { isUndefined } from '@/utils/common'\nimport { fetchImageFile } from '@/components/damImage/uploadQueue/api/damImageApi'\n\nconst props = withDefaults(\n defineProps<{\n extSystem: IntegerId\n }>(),\n {}\n)\n\nconst { showRecordWas, showErrorsDefault } = useAlerts()\n\nconst cropperContainerStyle = { overflow: 'hidden', maxHeight: 'calc(100vh - 160px)' }\n\nconst imageRoiStore = useImageRoiStore()\n\nconst { damClient } = useCommonAdminCoreDamOptions()\nconst { getDamConfigExtSystem } = useDamConfigState()\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst configExtSystem = getDamConfigExtSystem(props.extSystem)\n\nif (isUndefined(configExtSystem)) {\n throw new Error('DamAssetImageRoiSelect: Ext system must be initialised.')\n}\n\nconst cropperInstance = useTemplateRef<ACropperjsExposed>('cropperInstance')\n\nconst imageUrl = computed(() => {\n if (imageRoiStore.imageFile && imageRoiStore.imageFile.links?.image_detail) {\n return imageRoiStore.imageFile.links.image_detail.url + '?manipulated=' + imageRoiStore.imageFile.manipulatedAt\n }\n return ''\n})\n\nconst enableCropper = () => {\n if (cropperInstance.value) {\n cropperInstance.value.enable()\n }\n}\n\nconst disableCropper = () => {\n if (cropperInstance.value) {\n cropperInstance.value.disable()\n }\n}\n\nconst applyRegionOfInterest = () => {\n if (cropperInstance.value && imageRoiStore.roi && imageRoiStore.imageFile) {\n enableCropper()\n const data = regionToCrop(\n cropperInstance.value,\n imageRoiStore.roi,\n imageRoiStore.imageFile.imageAttributes.width,\n imageRoiStore.imageFile.imageAttributes.height\n )\n cropperInstance.value.setData(data)\n disableCropper()\n }\n}\n\nconst loadImageFile = async (id: DocId) => {\n const res = await fetchImageFile(damClient, id)\n imageRoiStore.setImageFile(res)\n imageRoiStore.hideLoader()\n}\n\nconst saveRoi = async () => {\n if (cropperInstance.value && imageRoiStore.roi && imageRoiStore.imageFile) {\n const roi = cropToRegion(\n cropperInstance.value,\n imageRoiStore.roi,\n imageRoiStore.imageFile.imageAttributes.width,\n imageRoiStore.imageFile.imageAttributes.height\n )\n try {\n imageRoiStore.showLoader()\n await updateRoi(damClient, roi.id, roi)\n showRecordWas('updated')\n setTimeout(() => {\n if (imageRoiStore.imageFile) {\n loadImageFile(imageRoiStore.imageFile.id)\n }\n }, 2000)\n } catch (error) {\n showErrorsDefault(error)\n }\n }\n}\n\nconst cropperReady = () => {\n applyRegionOfInterest()\n enableCropper()\n}\n\nconst cropperEnd = () => {\n saveRoi()\n}\n\nconst showCropper = computed(() => {\n if (imageRoiStore.imageFile && imageUrl.value.length > 0 && !imageRoiStore.loader) {\n return true\n }\n return false\n})\n\nonUnmounted(() => {\n if (cropperInstance.value) {\n cropperInstance.value.destroy()\n }\n})\n</script>\n\n<template>\n <div\n v-if=\"imageRoiStore.loader\"\n class=\"d-flex w-100 align-center justify-center\"\n >\n <VProgressCircular indeterminate />\n </div>\n <ACropperjs\n v-if=\"showCropper\"\n :key=\"imageRoiStore.imageFile?.manipulatedAt || 0\"\n ref=\"cropperInstance\"\n :aspect-ratio=\"configExtSystem.image.roiWidth / configExtSystem.image.roiHeight\"\n :background=\"false\"\n :check-cross-origin=\"false\"\n :container-style=\"cropperContainerStyle\"\n :ready=\"cropperReady\"\n :cropend=\"cropperEnd\"\n :src=\"imageUrl\"\n :view-mode=\"1\"\n :zoom-on-wheel=\"false\"\n responsive\n />\n</template>\n\n<style lang=\"scss\">\n.cropper-modal {\n background-color: #f1f4f6;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useI18n } from 'vue-i18n'\nimport { useTheme } from '@/composables/themeSettings'\nimport {\n AssetDetailTabImageWithRoi,\n useAssetDetailStore,\n} from '@/components/damImage/uploadQueue/composables/assetDetailStore'\nimport { DamAssetStatusDefault, DamAssetType, DamAssetTypeDefault } from '@/types/coreDam/Asset'\nimport AssetDetailDialogLoader from '@/components/damImage/uploadQueue/components/AssetDetailDialogLoader.vue'\nimport AssetImage from '@/components/damImage/uploadQueue/components/AssetImage.vue'\nimport AssetDetailDialogSidebar from '@/components/damImage/uploadQueue/components/AssetDetailDialogSidebar.vue'\nimport { assetFileIsImageFile } from '@/types/coreDam/AssetFile'\nimport DamAssetImageRoiSelect from '@/components/damImage/uploadQueue/components/DamAssetImageRoiSelect.vue'\nimport type { UploadQueueKey } from '@/types/coreDam/UploadQueue'\nimport type { IntegerId } from '@/types/common'\n\nwithDefaults(\n defineProps<{\n queueKey: UploadQueueKey\n extSystem: IntegerId\n }>(),\n {}\n)\n\nconst { t } = useI18n()\n\nconst { toolbarColor } = useTheme()\n\nconst assetDetailStore = useAssetDetailStore()\nconst { asset, dialog, activeTab, loading } = storeToRefs(assetDetailStore)\n\nconst closeDialog = () => {\n assetDetailStore.setAsset(null)\n dialog.value = null\n}\n\nconst sidebar = ref(true)\n\nconst toggleSidebar = () => {\n sidebar.value = !sidebar.value\n}\n\nconst onImageLoad = () => {\n // imageLoading.value = false\n}\n\nconst assetType = computed(() => {\n return asset.value?.attributes.assetType || DamAssetTypeDefault\n})\n\nconst assetStatus = computed(() => {\n if (!asset.value) return DamAssetStatusDefault\n return asset.value.attributes.assetStatus\n})\n\nconst isTypeImage = computed(() => {\n return assetType.value === DamAssetType.Image\n})\nconst isTypeVideo = computed(() => {\n return assetType.value === DamAssetType.Video\n})\nconst isTypeAudio = computed(() => {\n return assetType.value === DamAssetType.Audio\n})\nconst isTypeDocument = computed(() => {\n return assetType.value === DamAssetType.Document\n})\n\nconst imageProperties = computed(() => {\n if (asset.value?.mainFile && asset.value.mainFile.links && asset.value.mainFile.links.image_detail) {\n return {\n url: asset.value.mainFile.links.image_detail.url + '?random=' + Date.now(),\n width: asset.value.mainFile.links.image_detail.width,\n height: asset.value.mainFile.links.image_detail.height,\n bgColor:\n assetFileIsImageFile(asset.value.mainFile) &&\n asset.value.mainFile.imageAttributes &&\n asset.value.mainFile.imageAttributes.mostDominantColor\n ? asset.value.mainFile.imageAttributes.mostDominantColor\n : '#ccc',\n }\n }\n return {\n url: '',\n width: 356,\n height: 200,\n bgColor: '#ccc',\n }\n})\nconst toolbarTitle = computed(() => {\n if (!asset.value) return ''\n return asset.value.texts.displayTitle\n})\n\nconst assetMainFile = computed(() => {\n return asset.value?.mainFile || undefined\n})\n</script>\n\n<template>\n <VDialog\n :model-value=\"true\"\n fullscreen\n eager\n >\n <AssetDetailDialogLoader\n v-if=\"loading\"\n @close-dialog=\"closeDialog\"\n />\n <VCard\n v-else-if=\"asset\"\n class=\"dam-image-detail\"\n :class=\"{ 'dam-image-detail--sidebar-active': sidebar }\"\n >\n <div class=\"dam-image-detail__wrapper d-flex flex-column\">\n <VToolbar\n :color=\"toolbarColor\"\n density=\"compact\"\n :height=\"64\"\n class=\"system-border-b pr-1\"\n >\n <div class=\"text-subtitle-2 d-flex px-2\">\n <div>DAM: {{ toolbarTitle }}</div>\n </div>\n <VSpacer />\n <div class=\"pr-2\">\n <VBtn\n :active=\"sidebar\"\n :variant=\"sidebar ? 'flat' : 'text'\"\n :color=\"sidebar ? 'secondary' : ''\"\n icon\n class=\"mr-1\"\n :width=\"36\"\n :height=\"36\"\n @click.stop=\"toggleSidebar\"\n >\n <VIcon icon=\"mdi-information-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.asset.detail.toggleInfo') }}\n </VTooltip>\n </VBtn>\n <VBtn\n icon\n variant=\"text\"\n :width=\"36\"\n :height=\"36\"\n class=\"mr-1\"\n @click.stop=\"closeDialog\"\n >\n <VIcon icon=\"mdi-close\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.button.close') }}\n </VTooltip>\n </VBtn>\n </div>\n </VToolbar>\n <div class=\"d-flex w-100 h-100 position-relative\">\n <div class=\"d-flex w-100 align-center dam-image-detail__left\">\n <div\n v-if=\"activeTab === AssetDetailTabImageWithRoi.ROI\"\n class=\"w-100 h-100 pa-2 d-flex align-center justify-center\"\n >\n <DamAssetImageRoiSelect :ext-system=\"extSystem\" />\n </div>\n <div\n v-else\n class=\"w-100 h-100 pa-2 d-flex align-center justify-center\"\n >\n <AssetImage\n :asset-type=\"assetType\"\n :asset-status=\"assetStatus\"\n :src=\"imageProperties.url\"\n :background-color=\"imageProperties.bgColor\"\n :width=\"imageProperties.width\"\n :height=\"imageProperties.height\"\n use-component\n @load=\"onImageLoad\"\n @error=\"onImageLoad\"\n />\n </div>\n </div>\n <div class=\"h-100 d-flex dam-image-detail__sidebar system-border-l\">\n <AssetDetailDialogSidebar\n v-if=\"asset\"\n :key=\"asset.id\"\n :queue-key=\"queueKey\"\n :ext-system=\"extSystem\"\n :asset-id=\"asset.id\"\n :is-video=\"isTypeVideo\"\n :is-audio=\"isTypeAudio\"\n :is-image=\"isTypeImage\"\n :is-document=\"isTypeDocument\"\n :asset-status=\"assetStatus\"\n :asset-type=\"assetType\"\n :asset-main-file-status=\"assetMainFile ? assetMainFile.fileAttributes.status : undefined\"\n :asset-main-file-fail-reason=\"assetMainFile ? assetMainFile.fileAttributes.failReason : undefined\"\n />\n </div>\n </div>\n </div>\n </VCard>\n </VDialog>\n</template>\n","import { ref } from 'vue'\nimport type { UploadQueueKey } from '@/types/coreDam/UploadQueue'\n\nconst uploadQueueDialog = ref<UploadQueueKey | null>(null)\nconst uploadQueueSidebar = ref(false)\n\nexport function useUploadQueueDialog() {\n const toggleUploadQueueSidebar = () => {\n uploadQueueSidebar.value = !uploadQueueSidebar.value\n }\n\n return {\n toggleUploadQueueSidebar,\n uploadQueueDialog,\n uploadQueueSidebar,\n }\n}\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport { computed, ref } from 'vue'\nimport { DamAssetType } from '@/types/coreDam/Asset'\nimport { type AssetFile, assetFileIsImageFile } from '@/types/coreDam/AssetFile'\nimport { useAssetDetailStore } from '@/components/damImage/uploadQueue/composables/assetDetailStore'\nimport { storeToRefs } from 'pinia'\nimport AssetCustomMetadataForm from '@/components/damImage/uploadQueue/components/AssetCustomMetadataForm.vue'\nimport ACopyText from '@/components/ACopyText.vue'\nimport { prettyBytes } from '@/utils/file'\nimport AssetMetadataImageAttributes from '@/components/damImage/uploadQueue/components/AssetMetadataImageAttributes.vue'\nimport { useUploadQueuesStore } from '@/components/damImage/uploadQueue/composables/uploadQueuesStore'\nimport type { UploadQueueItem } from '@/types/coreDam/UploadQueue'\nimport AuthorRemoteAutocompleteWithCached from '@/components/damImage/uploadQueue/author/AuthorRemoteAutocompleteWithCached.vue'\nimport KeywordRemoteAutocompleteWithCached from '@/components/damImage/uploadQueue/keyword/KeywordRemoteAutocompleteWithCached.vue'\nimport ASystemEntityScope from '@/components/form/ASystemEntityScope.vue'\nimport { ADamAssetMetadataValidationScopeSymbol } from '@/components/damImage/uploadQueue/composables/uploadValidations'\nimport { dateTimePretty } from '@/utils/datetime'\nimport { useDamKeywordAssetTypeConfig } from '@/components/damImage/uploadQueue/keyword/damKeywordConfig'\nimport { useDamAuthorAssetTypeConfig } from '@/components/damImage/uploadQueue/author/damAuthorConfig'\nimport type { IntegerId } from '@/types/common'\n\nconst props = withDefaults(\n defineProps<{\n queueKey: string\n extSystem: IntegerId\n }>(),\n {}\n)\n\nconst { t } = useI18n()\n\nconst panels = ref(['metadata', 'file'])\n\nconst assetDetailStore = useAssetDetailStore()\nconst { asset, authorConflicts, metadataAreTouched, mainFileSingleUse } = storeToRefs(assetDetailStore)\n\nconst uploadQueuesStore = useUploadQueuesStore()\n\nconst items = computed(() => {\n return uploadQueuesStore.getQueueItems(props.queueKey)\n})\n\nconst item = computed<UploadQueueItem | null>(() => {\n return items.value[0] ?? null\n})\n\nconst assetType = computed(() => {\n return DamAssetType.Image\n})\n\nconst isTypeImage = computed(() => {\n return assetType.value === DamAssetType.Image\n})\n\nconst assetMainFile = computed<null | AssetFile>(() => {\n return asset.value && asset.value.mainFile ? (asset.value.mainFile as AssetFile) : null\n})\n\nconst onAnyMetadataChange = () => {\n metadataAreTouched.value = true\n}\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss,vue/no-ref-object-reactivity-loss\nconst { keywordRequired, keywordEnabled } = useDamKeywordAssetTypeConfig(assetType.value, props.extSystem)\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss,vue/no-ref-object-reactivity-loss\nconst { authorRequired, authorEnabled } = useDamAuthorAssetTypeConfig(assetType.value, props.extSystem)\n</script>\n\n<template>\n <VExpansionPanels\n v-if=\"item\"\n v-model=\"panels\"\n multiple\n class=\"v-expansion-panels--compact\"\n >\n <VExpansionPanel\n elevation=\"0\"\n :title=\"t('common.damImage.asset.detail.info.metadata')\"\n value=\"metadata\"\n >\n <VExpansionPanelText>\n <VForm :disabled=\"!item.canEditMetadata\">\n <AssetCustomMetadataForm\n v-if=\"item\"\n v-model=\"item.customData\"\n :ext-system=\"extSystem\"\n :asset-type=\"assetType\"\n @any-change=\"onAnyMetadataChange\"\n >\n <template #after-pinned>\n <VRow\n v-if=\"keywordEnabled\"\n dense\n class=\"my-2\"\n >\n <VCol>\n <ASystemEntityScope\n subject=\"keyword\"\n system=\"dam\"\n >\n <KeywordRemoteAutocompleteWithCached\n v-model=\"item.keywords\"\n :label=\"t('common.damImage.asset.model.keywords')\"\n data-cy=\"custom-field-keywords\"\n :ext-system=\"extSystem\"\n clearable\n multiple\n :disabled=\"!item.canEditMetadata\"\n :required=\"keywordRequired\"\n :validation-scope=\"ADamAssetMetadataValidationScopeSymbol\"\n @update:model-value=\"onAnyMetadataChange\"\n />\n </ASystemEntityScope>\n </VCol>\n </VRow>\n <VRow\n v-if=\"authorEnabled\"\n dense\n class=\"my-2\"\n >\n <VCol>\n <ASystemEntityScope\n subject=\"author\"\n system=\"dam\"\n >\n <AuthorRemoteAutocompleteWithCached\n v-model=\"item.authors\"\n :label=\"t('common.damImage.asset.model.authors')\"\n :author-conflicts=\"authorConflicts\"\n data-cy=\"custom-field-authors\"\n :ext-system=\"extSystem\"\n clearable\n multiple\n :disabled=\"!item.canEditMetadata\"\n :required=\"authorRequired\"\n :validation-scope=\"ADamAssetMetadataValidationScopeSymbol\"\n @update:model-value=\"onAnyMetadataChange\"\n />\n </ASystemEntityScope>\n </VCol>\n </VRow>\n <VRow\n dense\n class=\"my-2\"\n >\n <VCol>\n <VSwitch\n v-model=\"mainFileSingleUse\"\n :label=\"t('common.damImage.asset.model.mainFileSingleUse')\"\n />\n </VCol>\n </VRow>\n </template>\n </AssetCustomMetadataForm>\n </VForm>\n </VExpansionPanelText>\n </VExpansionPanel>\n <VExpansionPanel\n v-if=\"asset\"\n elevation=\"0\"\n :title=\"t('common.damImage.asset.detail.info.file')\"\n value=\"file\"\n >\n <VExpansionPanelText class=\"text-caption\">\n <!-- all types -->\n <VRow>\n <VCol cols=\"3\">\n {{ t('common.damImage.asset.detail.info.field.id') }}\n </VCol>\n <VCol cols=\"9\">\n <ACopyText :value=\"asset.id\" />\n </VCol>\n </VRow>\n <VRow>\n <VCol cols=\"3\">\n {{ t('common.damImage.asset.detail.info.field.type') }}\n </VCol>\n <VCol cols=\"9\">\n {{ asset.attributes.assetType }}\n </VCol>\n </VRow>\n <VRow>\n <VCol cols=\"3\">\n {{ t('common.model.tracking.created') }}\n </VCol>\n <VCol cols=\"9\">\n {{ dateTimePretty(asset.createdAt) }}\n </VCol>\n </VRow>\n <VRow>\n <VCol cols=\"3\">\n {{ t('common.model.tracking.modified') }}\n </VCol>\n <VCol cols=\"9\">\n {{ dateTimePretty(asset.modifiedAt) }}\n </VCol>\n </VRow>\n <div v-if=\"assetMainFile\">\n <VRow>\n <VCol cols=\"3\">\n {{ t('common.damImage.asset.detail.info.field.mainFileId') }}\n </VCol>\n <VCol cols=\"9\">\n <ACopyText :value=\"assetMainFile.id\" />\n </VCol>\n </VRow>\n <VRow>\n <VCol cols=\"3\">\n {{ t('common.damImage.asset.detail.info.field.mimeType') }}\n </VCol>\n <VCol cols=\"9\">\n {{ assetMainFile.fileAttributes.mimeType }}\n </VCol>\n </VRow>\n <VRow>\n <VCol cols=\"3\">\n {{ t('common.damImage.asset.detail.info.field.size') }}\n </VCol>\n <VCol cols=\"9\">\n {{ prettyBytes(assetMainFile.fileAttributes.size) }}\n </VCol>\n </VRow>\n <AssetMetadataImageAttributes\n v-if=\"isTypeImage && assetFileIsImageFile(assetMainFile)\"\n :file=\"assetMainFile\"\n />\n </div>\n </VExpansionPanelText>\n </VExpansionPanel>\n </VExpansionPanels>\n</template>\n","<script lang=\"ts\" setup>\nimport AssetDetailSidebarActionsWrapper from '@/components/damImage/uploadQueue/components/AssetDetailSidebarActionsWrapper.vue'\nimport { useI18n } from 'vue-i18n'\nimport useVuelidate from '@vuelidate/core'\nimport type { DamAssetTypeType } from '@/types/coreDam/Asset'\nimport UploadQueueDialogSingleSidebarMetadataContent from '@/components/damImage/uploadQueue/components/UploadQueueDialogSingleSidebarMetadataContent.vue'\nimport { ADamAssetMetadataValidationScopeSymbol } from '@/components/damImage/uploadQueue/composables/uploadValidations'\nimport { useAlerts } from '@/composables/system/alerts'\nimport type { IntegerId } from '@/types/common'\n\nwithDefaults(\n defineProps<{\n queueKey: string\n extSystem: IntegerId\n isActive: boolean\n dataCy?: string\n assetType: DamAssetTypeType\n }>(),\n {\n dataCy: undefined,\n }\n)\nconst emit = defineEmits<{\n (e: 'onSave'): void\n (e: 'onSaveAndApply'): void\n}>()\n\nconst { t } = useI18n()\n\nconst v$ = useVuelidate({ $scope: ADamAssetMetadataValidationScopeSymbol })\n\nconst { showValidationError } = useAlerts()\n\nconst onSave = async () => {\n v$.value.$touch()\n if (v$.value.$invalid) {\n showValidationError()\n return\n }\n emit('onSave')\n}\n\nconst onSaveAndApply = async () => {\n v$.value.$touch()\n if (v$.value.$invalid) {\n showValidationError()\n return\n }\n emit('onSaveAndApply')\n}\n</script>\n\n<template>\n <AssetDetailSidebarActionsWrapper\n v-if=\"isActive\"\n :queue-key=\"queueKey\"\n >\n <ABtnSecondary\n type=\"submit\"\n class=\"ml-2\"\n data-cy=\"button-save\"\n @click.stop=\"onSave\"\n >\n {{ t('common.button.save') }}\n </ABtnSecondary>\n <ABtnPrimary\n type=\"submit\"\n class=\"mx-2\"\n data-cy=\"button-save-and-apply\"\n @click.stop=\"onSaveAndApply\"\n >\n {{ t('common.damImage.upload.saveAndApply') }}\n </ABtnPrimary>\n </AssetDetailSidebarActionsWrapper>\n <UploadQueueDialogSingleSidebarMetadataContent\n :queue-key=\"queueKey\"\n :ext-system=\"extSystem\"\n />\n</template>\n","<script setup lang=\"ts\">\nimport {\n AssetDetailTabImageWithRoi,\n useAssetDetailStore,\n} from '@/components/damImage/uploadQueue/composables/assetDetailStore'\nimport { storeToRefs } from 'pinia'\nimport type { DocId, IntegerId } from '@/types/common'\nimport type { DamAssetStatusType, DamAssetTypeType } from '@/types/coreDam/Asset'\nimport type { AssetFileFailReasonType, AssetFileProcessStatusType } from '@/types/coreDam/AssetFile'\nimport { useI18n } from 'vue-i18n'\nimport AssetDetailSidebarROI from '@/components/damImage/uploadQueue/components/AssetDetailSidebarROI.vue'\nimport AssetDetailSidebarActionsTeleportTarget from '@/components/damImage/uploadQueue/components/AssetDetailSidebarActionsTeleportTarget.vue'\nimport UploadQueueDialogSingleSidebarMetadata from '@/components/damImage/uploadQueue/components/UploadQueueDialogSingleSidebarMetadata.vue'\n\nwithDefaults(\n defineProps<{\n queueKey: string\n extSystem: IntegerId\n assetId: DocId\n isVideo: boolean\n isAudio: boolean\n isImage: boolean\n isDocument: boolean\n enableRoiTab: boolean\n showFileInfo: boolean\n dataCy?: string\n assetStatus: DamAssetStatusType\n assetType: DamAssetTypeType\n assetMainFileStatus?: AssetFileProcessStatusType | undefined\n assetMainFileFailReason?: AssetFileFailReasonType | undefined\n }>(),\n {\n assetMainFileStatus: undefined,\n assetMainFileFailReason: undefined,\n dataCy: undefined,\n }\n)\nconst emit = defineEmits<{\n (e: 'onSave'): void\n (e: 'onSaveAndApply'): void\n}>()\n\nconst { t } = useI18n()\n\nconst assetDetailStore = useAssetDetailStore()\nconst { activeTab } = storeToRefs(assetDetailStore)\n</script>\n\n<template>\n <div class=\"sidebar-info d-flex w-100 h-100 flex-column\">\n <div class=\"w-100 d-flex flex-column\">\n <VTabs\n v-model=\"activeTab\"\n show-arrows\n class=\"sidebar-info__tabs\"\n >\n <VTab\n :value=\"AssetDetailTabImageWithRoi.Info\"\n data-cy=\"button-meta\"\n >\n {{ t('common.damImage.asset.detail.tabs.info') }}\n </VTab>\n <VTab\n v-if=\"isImage && enableRoiTab\"\n :value=\"AssetDetailTabImageWithRoi.ROI\"\n data-cy=\"button-focus\"\n >\n {{ t('common.damImage.asset.detail.tabs.roi') }}\n </VTab>\n </VTabs>\n\n <div class=\"sidebar-info__content\">\n <slot name=\"prepend-sidebar\" />\n <div\n v-if=\"activeTab === AssetDetailTabImageWithRoi.Info\"\n class=\"py-2\"\n >\n <UploadQueueDialogSingleSidebarMetadata\n :queue-key=\"queueKey\"\n :ext-system=\"extSystem\"\n :is-active=\"activeTab === AssetDetailTabImageWithRoi.Info\"\n :asset-type=\"assetType\"\n @on-save=\"emit('onSave')\"\n @on-save-and-apply=\"emit('onSaveAndApply')\"\n />\n </div>\n <div\n v-if=\"isImage && activeTab === AssetDetailTabImageWithRoi.ROI\"\n class=\"py-2\"\n >\n <AssetDetailSidebarROI\n :queue-key=\"queueKey\"\n :is-active=\"activeTab === AssetDetailTabImageWithRoi.ROI\"\n />\n </div>\n </div>\n <div class=\"sidebar-info__actions px-2\">\n <AssetDetailSidebarActionsTeleportTarget :queue-key=\"queueKey\" />\n </div>\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { ref } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { eventClickBlur } from '@/utils/event'\nimport ADialogToolbar from '@/components/ADialogToolbar.vue'\n\nconst props = withDefaults(\n defineProps<{\n isUploading: boolean\n dialogMaxWidth?: number\n buttonSize?: number\n dataCy?: string\n }>(),\n {\n dialogMaxWidth: 300,\n buttonSize: 26,\n dataCy: 'button-stop',\n }\n)\nconst emit = defineEmits<{\n (e: 'confirm'): void\n}>()\n\nconst dialog = ref(false)\n\nconst onClick = (event: Event) => {\n eventClickBlur(event)\n if (!props.isUploading) {\n emit('confirm')\n return\n }\n dialog.value = true\n}\nconst onConfirm = () => {\n emit('confirm')\n dialog.value = false\n}\n\nconst onCancel = () => {\n dialog.value = false\n}\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <VBtn\n variant=\"flat\"\n :data-cy=\"dataCy\"\n icon\n :width=\"buttonSize\"\n :height=\"buttonSize\"\n @click.stop=\"onClick\"\n >\n <VIcon icon=\"mdi-close\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.upload.stop') }}\n </VTooltip>\n </VBtn>\n <VDialog\n v-model=\"dialog\"\n :width=\"500\"\n >\n <VCard\n v-if=\"dialog\"\n data-cy=\"delete-panel\"\n >\n <ADialogToolbar @on-cancel=\"onCancel\">\n {{ t('common.damImage.upload.stopConfirmQuestion') }}\n </ADialogToolbar>\n <VCardActions>\n <VSpacer />\n <ABtnTertiary\n data-cy=\"button-cancel\"\n @click.stop=\"onCancel\"\n >\n {{ t('common.button.cancel') }}\n </ABtnTertiary>\n <ABtnPrimary\n data-cy=\"button-confirm\"\n @click.stop=\"onConfirm\"\n >\n {{ t('common.damImage.upload.stop') }}\n </ABtnPrimary>\n </VCardActions>\n </VCard>\n </VDialog>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, onMounted, ref, watch } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useI18n } from 'vue-i18n'\nimport { useTheme } from '@/composables/themeSettings'\nimport {\n AssetDetailTabImageWithRoi,\n useAssetDetailStore,\n} from '@/components/damImage/uploadQueue/composables/assetDetailStore'\nimport {\n type AssetDetailItemDto,\n DamAssetStatusDefault,\n DamAssetType,\n DamAssetTypeDefault,\n} from '@/types/coreDam/Asset'\nimport AssetDetailDialogLoader from '@/components/damImage/uploadQueue/components/AssetDetailDialogLoader.vue'\nimport AssetImage from '@/components/damImage/uploadQueue/components/AssetImage.vue'\nimport { AssetFileFailReason, assetFileIsImageFile } from '@/types/coreDam/AssetFile'\nimport DamAssetImageRoiSelect from '@/components/damImage/uploadQueue/components/DamAssetImageRoiSelect.vue'\nimport type { ImageCreateUpdateAware } from '@/types/ImageAware'\nimport { useUploadQueuesStore } from '@/components/damImage/uploadQueue/composables/uploadQueuesStore'\nimport { useUploadQueueDialog } from '@/components/damImage/uploadQueue/composables/uploadQueueDialog'\nimport {\n type UploadQueueItem,\n UploadQueueItemStatus,\n type UploadQueueItemStatusType,\n} from '@/types/coreDam/UploadQueue'\nimport { dateTimeNow } from '@/utils/datetime'\nimport AssetFileFailReasonChip from '@/components/damImage/uploadQueue/components/AssetFileFailReasonChip.vue'\nimport { useAlerts } from '@/composables/system/alerts'\nimport { bulkUpdateAssetsMetadata, fetchAsset } from '@/components/damImage/uploadQueue/api/damAssetApi'\nimport { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport UploadQueueDialogSingleSidebar from '@/components/damImage/uploadQueue/components/UploadQueueDialogSingleSidebar.vue'\nimport UploadQueueButtonStop from '@/components/damImage/uploadQueue/components/UploadQueueButtonStop.vue'\nimport { isNull, isString } from '@/utils/common'\nimport { fetchAuthorListByIds } from '@/components/damImage/uploadQueue/api/authorApi'\nimport type { IntegerId } from '@/types/common'\n\nconst props = withDefaults(\n defineProps<{\n queueKey: string\n extSystem: IntegerId\n licenceId: IntegerId\n fileInputKey: number\n accept: string | undefined\n maxSizes: Record<string, number> | undefined\n disableDoneAnimation?: boolean\n }>(),\n {\n disableDoneAnimation: false,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'onApply', items: ImageCreateUpdateAware[]): void\n}>()\n\nconst { showErrorsDefault, showRecordWas } = useAlerts()\n\nconst IMAGE_ASPECT_RATIO = 16 / 9\n\nconst { t } = useI18n()\n\nconst { toolbarColor } = useTheme()\n\nconst assetDetailStore = useAssetDetailStore()\nconst { activeTab, loading, asset: assetDetail } = storeToRefs(assetDetailStore)\nconst enableRoiTab = ref(false)\n\nconst uploadQueuesStore = useUploadQueuesStore()\nconst { uploadQueueDialog } = useUploadQueueDialog()\n\nconst items = computed(() => {\n return uploadQueuesStore.getQueueItems(props.queueKey)\n})\n\nconst item = computed<UploadQueueItem | null>(() => {\n return items.value[0] ?? null\n})\n\nconst asset = computed<AssetDetailItemDto | null>(() => {\n if (!item.value || !item.value.assetId) return null\n if (isDone.value && assetDetail.value) return assetDetail.value\n return {\n id: item.value.assetId,\n texts: {\n displayTitle: '',\n },\n attributes: {\n assetType: item.value.assetType,\n assetStatus: item.value.assetStatus,\n },\n mainFileSingleUse: false,\n flags: {\n described: false,\n visible: false,\n },\n siblingToAsset: null,\n licence: item.value.licenceId,\n mainFile: null,\n keywords: [],\n authors: [],\n podcasts: [],\n metadata: {\n authorSuggestions: {},\n keywordSuggestions: {},\n customData: {},\n },\n distributionCategory: null,\n assetFileProperties: {\n distributesInServices: [],\n slotNames: [],\n fromRss: false,\n width: 0,\n height: 0,\n },\n _resourceName: 'asset',\n _system: 'coreDam',\n createdAt: dateTimeNow(),\n modifiedAt: dateTimeNow(),\n createdBy: null,\n modifiedBy: null,\n }\n})\n\nconst sidebar = ref(true)\n\nconst toggleSidebar = () => {\n sidebar.value = !sidebar.value\n}\n\nconst assetType = computed(() => {\n return asset.value?.attributes.assetType || DamAssetTypeDefault\n})\n\nconst assetStatus = computed(() => {\n if (!asset.value) return DamAssetStatusDefault\n return asset.value.attributes.assetStatus\n})\n\nconst isTypeImage = computed(() => {\n return assetType.value === DamAssetType.Image\n})\nconst isTypeVideo = computed(() => {\n return assetType.value === DamAssetType.Video\n})\nconst isTypeAudio = computed(() => {\n return assetType.value === DamAssetType.Audio\n})\nconst isTypeDocument = computed(() => {\n return assetType.value === DamAssetType.Document\n})\n\nconst imageProperties = computed(() => {\n if (item.value?.imagePreview) {\n return {\n url: item.value.imagePreview.url + '?random=' + Date.now(),\n width: item.value.imagePreview.requestedWidth || undefined,\n height: item.value.imagePreview.requestedHeight || undefined,\n bgColor:\n assetFileIsImageFile(asset.value?.mainFile) &&\n asset.value?.mainFile.imageAttributes &&\n asset.value?.mainFile.imageAttributes.mostDominantColor\n ? asset.value.mainFile.imageAttributes.mostDominantColor\n : '#ccc',\n }\n }\n return {\n url: '',\n width: 356,\n height: 200,\n bgColor: '#ccc',\n }\n})\n\nconst assetMainFile = computed(() => {\n return asset.value?.mainFile || undefined\n})\n\nconst processingStatuses: readonly UploadQueueItemStatusType[] = [\n UploadQueueItemStatus.Processing,\n UploadQueueItemStatus.Loading,\n]\nconst processing = computed(() => {\n return !isNull(item.value) && processingStatuses.includes(item.value.status)\n})\nconst waiting = computed(() => {\n return !isNull(item.value) && item.value.status === UploadQueueItemStatus.Waiting\n})\nconst isDone = computed(() => {\n return !isNull(item.value) && item.value.status === UploadQueueItemStatus.Uploaded\n})\nconst showDone = computed(() => {\n return !props.disableDoneAnimation && isDone.value\n})\nconst uploading = computed(() => {\n return !isNull(item.value) && item.value.status === UploadQueueItemStatus.Uploading\n})\nconst uploadProgress = computed(() => {\n return item.value?.progress.progressPercent\n})\n\nconst { damClient } = useCommonAdminCoreDamOptions()\n\nconst onStopConfirm = async () => {\n uploadQueuesStore.stopUpload(props.queueKey)\n assetDetailStore.setAsset(null)\n uploadQueueDialog.value = null\n}\n\nconst queueTotalCount = computed(() => {\n return uploadQueuesStore.getQueueTotalCount(props.queueKey)\n})\n\nconst queueProcessedCount = computed(() => {\n return uploadQueuesStore.getQueueProcessedCount(props.queueKey)\n})\n\nconst isUploading = computed(() => {\n return queueTotalCount.value > queueProcessedCount.value\n})\n\nconst onSave = async () => {\n if (items.value.length === 0) return\n try {\n await bulkUpdateAssetsMetadata(damClient, items.value)\n showRecordWas('updated')\n } catch (error) {\n showErrorsDefault(error)\n }\n}\n\nconst onSaveAndApply = async () => {\n if (items.value.length === 0) return\n let description = ''\n let source = ''\n try {\n const assetsMetadataRes = await bulkUpdateAssetsMetadata(damClient, items.value, assetDetailStore.mainFileSingleUse)\n if (!assetsMetadataRes[0]) {\n throw new Error('Fatal error updating asset metadata')\n }\n showRecordWas('updated')\n if (isString(assetsMetadataRes[0].customData?.description)) {\n description = assetsMetadataRes[0].customData.description.trim()\n }\n if (assetsMetadataRes[0].authors.length > 0) {\n const authorsRes = await fetchAuthorListByIds(damClient, props.extSystem, assetsMetadataRes[0].authors)\n source = authorsRes.map((author) => author.name).join(', ')\n }\n emit(\n 'onApply',\n items.value.map((item) => {\n return {\n texts: {\n description: description,\n source: source,\n },\n flags: {\n showSource: true,\n },\n dam: {\n damId: item.fileId ?? '',\n regionPosition: 0,\n licenceId: props.licenceId,\n },\n position: 1,\n }\n })\n )\n\n await onStopConfirm()\n } catch (error) {\n showErrorsDefault(error)\n }\n}\n\nwatch(\n isDone,\n async (newValue) => {\n if (!newValue || !item.value?.assetId) return\n try {\n const res = await fetchAsset(damClient, item.value.assetId)\n assetDetailStore.setAsset(res)\n enableRoiTab.value = true\n } catch (e) {\n showErrorsDefault(e)\n }\n },\n { immediate: true }\n)\n\nonMounted(() => {\n activeTab.value = AssetDetailTabImageWithRoi.Info\n})\n</script>\n\n<template>\n <VDialog\n :model-value=\"true\"\n fullscreen\n eager\n >\n <AssetDetailDialogLoader\n v-if=\"loading || !item\"\n @close-dialog=\"onStopConfirm\"\n />\n <VCard\n v-else-if=\"item\"\n class=\"dam-image-detail\"\n :class=\"{ 'dam-image-detail--sidebar-active': sidebar }\"\n >\n <div class=\"dam-image-detail__wrapper d-flex flex-column\">\n <VToolbar\n :color=\"toolbarColor\"\n density=\"compact\"\n :height=\"64\"\n class=\"system-border-b pr-1\"\n >\n <div class=\"text-subtitle-2 d-flex px-2\">\n <div\n v-if=\"isUploading\"\n class=\"text-subtitle-2\"\n >\n {{ t('common.damImage.upload.title') }}\n </div>\n <div\n v-else\n class=\"text-subtitle-2 text-green-darken-3 font-weight-bold\"\n >\n {{ t('common.damImage.upload.titleDone') }}\n </div>\n </div>\n <VSpacer />\n <div class=\"pr-3\">\n <VBtn\n :active=\"sidebar\"\n :variant=\"sidebar ? 'flat' : 'text'\"\n :color=\"sidebar ? 'secondary' : ''\"\n icon\n class=\"mr-1\"\n :width=\"36\"\n :height=\"36\"\n @click.stop=\"toggleSidebar\"\n >\n <VIcon icon=\"mdi-information-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.asset.detail.toggleInfo') }}\n </VTooltip>\n </VBtn>\n <UploadQueueButtonStop\n data-cy=\"button-close\"\n :button-size=\"36\"\n :is-uploading=\"isUploading\"\n @confirm=\"onStopConfirm\"\n />\n </div>\n </VToolbar>\n <div class=\"d-flex w-100 h-100 position-relative\">\n <div class=\"d-flex w-100 align-center dam-image-detail__left\">\n <div\n v-if=\"activeTab === AssetDetailTabImageWithRoi.ROI && enableRoiTab\"\n class=\"w-100 h-100 pa-2 d-flex align-center justify-center\"\n >\n <DamAssetImageRoiSelect :ext-system=\"extSystem\" />\n </div>\n <div\n v-else\n class=\"w-100 h-100 pa-2 d-flex align-center justify-center\"\n >\n <div class=\"position-relative\">\n <AssetImage\n v-if=\"item\"\n :asset-type=\"assetType\"\n :asset-status=\"assetStatus\"\n :src=\"imageProperties.url\"\n :background-color=\"imageProperties.bgColor\"\n :width=\"imageProperties.width\"\n :height=\"imageProperties.height\"\n :show-uploading=\"uploading\"\n :show-processing=\"processing\"\n :show-waiting=\"waiting\"\n :show-done=\"showDone\"\n :uploading-progress=\"uploadProgress\"\n :remaining-time=\"item.progress.remainingTime\"\n use-component\n :aspect-ratio=\"IMAGE_ASPECT_RATIO\"\n />\n <div\n v-if=\"item && item.error.hasError\"\n :class=\"\n 'dam-upload-queue__overlay dam-upload-queue__overlay--error ' +\n 'd-flex align-center justify-center flex-column'\n \"\n >\n <VIcon\n icon=\"mdi-alert\"\n class=\"ma-1\"\n size=\"x-small\"\n color=\"error\"\n />\n <div class=\"text-error\">\n {{ t('common.damImage.queueItem.error') }}\n </div>\n <div\n v-if=\"item && item.error.message.length\"\n class=\"text-caption\"\n v-text=\"item.error.message\"\n />\n <div v-else-if=\"item.error.assetFileFailReason !== AssetFileFailReason.None\">\n <AssetFileFailReasonChip :reason=\"item.error.assetFileFailReason\" />\n </div>\n <div\n v-else\n class=\"text-caption\"\n >\n {{ t('common.damImage.uploadErrors.unknownError') }}\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"h-100 d-flex dam-image-detail__sidebar system-border-l\">\n <UploadQueueDialogSingleSidebar\n v-if=\"asset\"\n :key=\"asset.id\"\n :queue-key=\"queueKey\"\n :ext-system=\"extSystem\"\n :enable-roi-tab=\"enableRoiTab\"\n :show-file-info=\"enableRoiTab\"\n :asset-id=\"asset.id\"\n :is-video=\"isTypeVideo\"\n :is-audio=\"isTypeAudio\"\n :is-image=\"isTypeImage\"\n :is-document=\"isTypeDocument\"\n :asset-status=\"assetStatus\"\n :asset-type=\"assetType\"\n :asset-main-file-status=\"assetMainFile ? assetMainFile.fileAttributes.status : undefined\"\n :asset-main-file-fail-reason=\"assetMainFile ? assetMainFile.fileAttributes.failReason : undefined\"\n @on-save=\"onSave\"\n @on-save-and-apply=\"onSaveAndApply\"\n >\n <template #prepend-sidebar>\n <div\n v-if=\"item?.isDuplicate\"\n class=\"text-caption text-warning px-3 py-2\"\n >\n {{ t('common.damImage.asset.detail.info.status.duplicate') }}\n </div>\n <div\n v-if=\"item?.isDuplicate && item?.mainFileSingleUse\"\n class=\"text-caption text-error px-3 py-2\"\n >\n {{ t('common.damImage.asset.model.mainFileSingleUse') }}\n </div>\n </template>\n </UploadQueueDialogSingleSidebar>\n </div>\n </div>\n </div>\n </VCard>\n </VDialog>\n</template>\n","<script setup lang=\"ts\">\nimport { ref, watch, withModifiers } from 'vue'\nimport { isBoolean, isUndefined } from '@/utils/common'\nimport AFileDropzone from '@/components/file/AFileDropzone.vue'\nimport type { InputFileChangeEvent } from '@/types/ChangeEvent'\nimport { useFormatAndSizeCheck } from '@/components/file/composables/formatAndSizeCheck'\n\n/**\n * For accept and maxSizes check docs {@see useFormatAndSizeCheck}\n */\nconst props = withDefaults(\n defineProps<{\n fileInputKey?: number | undefined\n accept?: string | undefined\n maxSizes?: Record<string, number> | undefined\n multiple?: boolean\n useDropzone?: boolean\n dropzoneVariant?: 'fill' | 'default' | 'fullscreen'\n onDropzoneClickCallback?: (() => void) | undefined | false // false for disable, undefined for browse files, otherwise custom callback is used\n }>(),\n {\n fileInputKey: undefined,\n accept: undefined,\n maxSizes: undefined,\n multiple: false,\n useDropzone: false,\n dropzoneVariant: 'default',\n onDropzoneClickCallback: undefined,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'change', event: InputFileChangeEvent): void\n (e: 'filesInput', files: File[]): void\n}>()\n\nconst BLOCK_DOUBLE_CLICK_MS = 200\n\nconst inputRef = ref<undefined | HTMLInputElement>(undefined)\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst fileInputKeyLocal = ref(props.fileInputKey || 0)\nconst blockDoubleClick = ref(false)\n\nconst clickInput = () => {\n if (blockDoubleClick.value === true) {\n return\n }\n blockDoubleClick.value = true\n inputRef.value?.click()\n setTimeout(() => {\n blockDoubleClick.value = false\n }, BLOCK_DOUBLE_CLICK_MS)\n}\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { checkFormatsAndSizes } = useFormatAndSizeCheck(props.accept, props.maxSizes)\n\nconst validateData = (files: File[]) => {\n if (!props.multiple && files.length > 0) {\n const checked = checkFormatsAndSizes([files[0]])\n emit('filesInput', checked)\n return\n }\n const checked = checkFormatsAndSizes(files)\n emit('filesInput', checked)\n}\n\nconst onDropzoneDrop = (files: File[]) => {\n validateData(files)\n}\n\nconst onInputFileChange = (payload: Event) => {\n const event = payload as InputFileChangeEvent\n emit('change', event)\n validateData(Array.from(event.target?.files ?? []))\n}\n\nconst onFileDropzoneClick = () => {\n if (isBoolean(props.onDropzoneClickCallback)) {\n return\n }\n if (isUndefined(props.onDropzoneClickCallback)) {\n clickInput()\n return\n }\n props.onDropzoneClickCallback()\n}\n\nwatch(\n () => props.fileInputKey,\n (newValue, oldValue) => {\n if (newValue === oldValue || isUndefined(newValue)) {\n return\n }\n fileInputKeyLocal.value = newValue\n }\n)\n\ndefineExpose({\n activate: clickInput,\n})\n</script>\n\n<template>\n <AFileDropzone\n v-if=\"useDropzone\"\n :variant=\"dropzoneVariant\"\n @on-click=\"onFileDropzoneClick\"\n @on-drop=\"onDropzoneDrop\"\n />\n <slot\n v-else\n name=\"activator\"\n :props=\"{ onClick: withModifiers(() => clickInput(), ['stop']) }\"\n />\n <input\n ref=\"inputRef\"\n :key=\"fileInputKeyLocal\"\n :accept=\"accept\"\n :multiple=\"multiple\"\n hidden\n tabindex=\"-1\"\n type=\"file\"\n @change=\"onInputFileChange\"\n >\n</template>\n","<script setup lang=\"ts\">\nimport ADialogToolbar from '@/components/ADialogToolbar.vue'\nimport { useI18n } from 'vue-i18n'\nimport AFileInput from '@/components/file/AFileInput.vue'\nimport type { VBtn } from 'vuetify/components'\nimport type { InputFileChangeEvent } from '@/types/ChangeEvent'\nimport { ref } from 'vue'\nimport ARow from '@/components/ARow.vue'\n\n/**\n * For accept and maxSizes check docs {@see useFormatAndSizeCheck}\n */\nwithDefaults(\n defineProps<{\n fileInputKey?: number | undefined\n accept?: string | undefined\n maxSizes?: Record<string, number> | undefined\n multiple?: boolean\n toolbarT?: string\n }>(),\n {\n fileInputKey: undefined,\n accept: undefined,\n maxSizes: undefined,\n multiple: false,\n toolbarT: 'common.button.upload',\n }\n)\n\nconst emit = defineEmits<{\n (e: 'change', event: InputFileChangeEvent): void\n (e: 'filesInput', files: File[]): void\n}>()\n\nconst modelValue = defineModel<boolean>({ default: false, required: false })\n\nconst onClose = () => {\n modelValue.value = false\n}\n\nconst { t } = useI18n()\n\nconst fileInputComponent = ref<InstanceType<typeof AFileInput> | null>(null)\n\nconst onFilesInput = (files: File[]) => {\n emit('filesInput', files)\n modelValue.value = false\n}\n\nconst activate = () => {\n fileInputComponent.value?.activate()\n}\n\ndefineExpose({\n activate,\n})\n</script>\n\n<template>\n <VDialog\n :model-value=\"modelValue\"\n persistent\n :max-width=\"500\"\n @update:model-value=\"modelValue = $event\"\n >\n <template #activator=\"{ props: dialogProps }\">\n <slot\n name=\"activator\"\n :props=\"dialogProps\"\n >\n <VBtn\n v-bind=\"dialogProps\"\n :text=\"t('common.button.open')\"\n />\n </slot>\n </template>\n <VCard\n v-if=\"modelValue\"\n data-cy=\"create-panel\"\n >\n <ADialogToolbar @on-cancel=\"onClose\">\n <slot name=\"title\">\n {{ t(toolbarT) }}\n </slot>\n </ADialogToolbar>\n <VCardText>\n <ARow>\n <AFileInput\n ref=\"fileInput\"\n :file-input-key=\"fileInputKey\"\n :accept=\"accept\"\n :max-sizes=\"maxSizes\"\n :multiple=\"multiple\"\n use-dropzone\n @files-input=\"onFilesInput\"\n @change=\"emit('change', $event)\"\n />\n </ARow>\n </VCardText>\n <VCardActions>\n <VSpacer />\n <ABtnTertiary\n data-cy=\"button-close\"\n @click.stop=\"onClose\"\n >\n {{ t('common.button.close') }}\n </ABtnTertiary>\n </VCardActions>\n </VCard>\n </VDialog>\n</template>\n","import type { InjectionKey, ShallowRef } from 'vue'\nimport type { DamConfigLicenceExtSystemReturnType, DamExtSystemConfig } from '@/types/coreDam/DamConfig'\nimport type { IntegerId } from '@/types/common'\n\nexport const ImageWidgetExtSystemConfigs: InjectionKey<ShallowRef<Map<IntegerId, DamExtSystemConfig>>> = Symbol.for(\n 'anzu:ImageWidgetExtSystemConfigs'\n)\n\nexport const ImageWidgetUploadConfig: InjectionKey<ShallowRef<DamConfigLicenceExtSystemReturnType | undefined>> =\n Symbol.for('anzu:ImageWidgetUploadConfig')\n","<script lang=\"ts\" setup>\nimport AImageDropzone from '@/components/file/AFileDropzone.vue'\nimport type { DocId, IntegerId, IntegerIdNullable } from '@/types/common'\nimport type { ImageAware, ImageCreateUpdateAware } from '@/types/ImageAware'\nimport imagePlaceholderPath from '@/assets/image/placeholder16x9.jpg'\nimport { useCommonAdminImageOptions } from '@/components/damImage/composables/commonAdminImageOptions'\nimport { useImageActions } from '@/components/damImage/composables/imageActions'\nimport { cloneDeep, isDefined, isNull, isNumber, isString, isUndefined } from '@/utils/common'\nimport { useAlerts } from '@/composables/system/alerts'\nimport { DamAssetType, type DamImageCopyToLicenceResponse } from '@/types/coreDam/Asset'\nimport { useDamAcceptTypeAndSizeHelper } from '@/components/damImage/uploadQueue/composables/acceptTypeAndSizeHelper'\nimport { useUploadQueuesStore } from '@/components/damImage/uploadQueue/composables/uploadQueuesStore'\nimport type { UploadQueueKey } from '@/types/coreDam/UploadQueue'\nimport AAssetSelect from '@/components/dam/assetSelect/AAssetSelect.vue'\nimport type { AssetSelectReturnData } from '@/types/coreDam/AssetSelect'\nimport type { DamConfigLicenceExtSystemReturnType } from '@/types/coreDam/DamConfig'\nimport { createImage, deleteImage, fetchImage, updateImage } from '@/components/damImage/uploadQueue/api/imageApi'\nimport ImageDetailDialogMetadata from '@/components/damImage/uploadQueue/components/ImageDetailDialogMetadata.vue'\nimport { computed, inject, onMounted, ref, type ShallowRef, toRaw, watch } from 'vue'\nimport AssetDetailDialog from '@/components/damImage/uploadQueue/components/AssetDetailDialog.vue'\nimport { useAssetDetailStore } from '@/components/damImage/uploadQueue/composables/assetDetailStore'\nimport { storeToRefs } from 'pinia'\nimport { fetchAsset, fetchAssetByFileId, updateAssetAuthors } from '@/components/damImage/uploadQueue/api/damAssetApi'\nimport { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport UploadQueueDialogSingle from '@/components/damImage/uploadQueue/components/UploadQueueDialogSingle.vue'\nimport { useUploadQueueDialog } from '@/components/damImage/uploadQueue/composables/uploadQueueDialog'\nimport { fetchAuthorListByIds } from '@/components/damImage/uploadQueue/api/authorApi'\nimport { useI18n } from 'vue-i18n'\nimport { useExtSystemIdForCached } from '@/components/damImage/uploadQueue/composables/extSystemIdForCached'\nimport { useAssetSelectStore } from '@/services/stores/coreDam/assetSelectStore'\nimport { fetchDamAssetLicence } from '@/components/damImage/uploadQueue/api/damAssetLicenceApi'\nimport {\n type CollabComponentConfig,\n type CollabFieldData,\n type CollabFieldLockOptions,\n CollabStatus,\n type CollabStatusType,\n} from '@/components/collab/types/Collab'\nimport { useCommonAdminCollabOptions } from '@/components/collab/composables/commonAdminCollabOptions'\nimport { useCollabField } from '@/components/collab/composables/collabField'\nimport ACollabLockedByUser from '@/components/collab/components/ACollabLockedByUser.vue'\nimport AFileInputDialog from '@/components/file/AFileInputDialog.vue'\nimport {\n CollabFieldLockStatus,\n type CollabFieldLockStatusPayload,\n CollabFieldLockType,\n} from '@/components/collab/composables/collabEventBus'\nimport { ImageWidgetUploadConfig } from '@/components/damImage/composables/imageWidgetInkectionKeys'\nimport {\n isImageCreateUpdateAware,\n useImageMediaWidgetStore,\n} from '@/components/damImage/uploadQueue/composables/imageMediaWidgetStore'\nimport { copyToLicence } from '@/components/damImage/uploadQueue/api/damImageApi'\n\nconst props = withDefaults(\n defineProps<{\n queueKey: UploadQueueKey\n uploadLicence: IntegerId\n selectLicences: IntegerId[]\n image?: ImageAware | undefined // optional, if available, no need to fetch image data\n configName?: string\n collab?: CollabComponentConfig\n collabStatus?: CollabStatusType\n label?: string | undefined\n required?: boolean\n readonly?: boolean\n dataCy?: string | undefined\n expandOptions?: boolean\n expandMetadata?: boolean // only one at once, use in dialogs\n disableOnClickMenu?: boolean\n width?: number | undefined\n maxWidth?: number | undefined\n height?: number | undefined\n callDeleteApiOnRemove?: boolean\n damWidth?: undefined | number\n damHeight?: undefined | number\n }>(),\n {\n configName: 'default',\n collab: undefined,\n collabStatus: CollabStatus.Inactive,\n label: undefined,\n required: false,\n image: undefined,\n readonly: false,\n lockable: false,\n lockedById: undefined,\n dataCy: undefined,\n expandOptions: false,\n expandMetadata: false,\n disableOnClickMenu: false,\n width: undefined,\n maxWidth: undefined,\n height: undefined,\n callDeleteApiOnRemove: false,\n damWidth: undefined,\n damHeight: undefined,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'afterMetadataSaveSuccess'): void\n}>()\n\nconst modelValue = defineModel<IntegerIdNullable>({ required: true })\nconst showDamAuthorsInCmsImage = ref(false)\n\n// Collaboration\nconst { collabOptions } = useCommonAdminCollabOptions()\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst releaseFieldLock = ref((data: CollabFieldData, options?: Partial<CollabFieldLockOptions>) => {})\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst acquireFieldLock = ref((options?: Partial<CollabFieldLockOptions>) => {})\nconst lockedByUserLocal = ref<IntegerIdNullable>(null)\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nif (collabOptions.value.enabled && isDefined(props.collab)) {\n const { releaseCollabFieldLock, acquireCollabFieldLock, addCollabFieldLockStatusListener, lockedByUser } =\n useCollabField(props.collab.room, props.collab.field)\n releaseFieldLock.value = releaseCollabFieldLock\n acquireFieldLock.value = acquireCollabFieldLock\n watch(\n lockedByUser,\n (newValue) => {\n lockedByUserLocal.value = newValue\n },\n { immediate: true }\n )\n // addCollabFieldDataChangeListener((data: CollabFieldDataEnvelope) => {\n // modelValue.value = data.value as IntegerIdNullable\n // reload(undefined, modelValue.value)\n // })\n addCollabFieldLockStatusListener((data: CollabFieldLockStatusPayload) => {\n if (data.status === CollabFieldLockStatus.Success && data.type === CollabFieldLockType.Acquire) {\n collabFieldLockReallyLocked.value = true\n } else if (data.status === CollabFieldLockStatus.Failure && data.type === CollabFieldLockType.Acquire) {\n collabFieldLockReallyLocked.value = false\n } else if (data.status === CollabFieldLockStatus.Success && data.type === CollabFieldLockType.Release) {\n collabFieldLockReallyLocked.value = false\n } else if (data.status === CollabFieldLockStatus.Failure && data.type === CollabFieldLockType.Release) {\n collabFieldLockReallyLocked.value = true\n }\n })\n}\nconst lockedLocal = ref(false)\nconst acquireFieldLockLocal = () => {\n if (lockedLocal.value === true || props.collabStatus === CollabStatus.Inactive) return\n acquireFieldLock.value()\n lockedLocal.value = true\n}\nconst releaseFieldLockLocal = (value: IntegerIdNullable) => {\n if (lockedLocal.value === false || props.collabStatus === CollabStatus.Inactive) return\n releaseFieldLock.value(value)\n lockedLocal.value = false\n}\n\nconst imageWidgetUploadConfig = inject<ShallowRef<DamConfigLicenceExtSystemReturnType | undefined> | undefined>(\n ImageWidgetUploadConfig,\n undefined\n)\n\nif (isUndefined(imageWidgetUploadConfig) || isUndefined(imageWidgetUploadConfig.value)) {\n throw new Error(\"Fatal error, parent component doesn't provide necessary config ext system config.\")\n}\n\nconst { t } = useI18n()\n\nconst { showErrorsDefault, showError, showErrorT } = useAlerts()\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst imageOptions = useCommonAdminImageOptions(props.configName)\nconst { imageClient } = imageOptions\nconst { widgetImageToDamImageUrl } = useImageActions(imageOptions)\nconst uploadQueuesStore = useUploadQueuesStore()\nconst imageMediaWidgetStore = useImageMediaWidgetStore()\nconst { detail } = storeToRefs(imageMediaWidgetStore)\nconst { uploadQueueDialog } = useUploadQueueDialog()\n\nconst resImage = ref<null | ImageCreateUpdateAware>(null)\nconst clickMenuOpened = ref(false)\nconst assetSelectDialog = ref(false)\nconst metadataDialog = ref(false)\nconst metadataDialogSaving = ref(false)\nconst metadataDialogLoading = ref(false)\nconst fileInputDialog = ref(false)\n\nconst withoutImage = computed(() => {\n return isNull(modelValue.value)\n})\n\nconst resolvedSrc = ref('')\n\nconst uploadQueue = computed(() => {\n return uploadQueuesStore.getQueue(props.queueKey)\n})\n\nconst imageLoaded = computed(() => {\n return !isNull(resImage.value)\n})\n\nconst actionEditMeta = () => {\n imageMediaWidgetStore.setDetail(toRaw(resImage.value))\n metadataDialog.value = true\n}\n\nconst actionLibrary = () => {\n assetSelectDialog.value = true\n}\n\nconst { cachedExtSystemId } = useExtSystemIdForCached()\n\n// this ref is updating only when the lock was really success or failure using sockets, needed for drop files\nconst collabFieldLockReallyLocked = ref(false)\n\nconst waitForFieldLockIsReallyAcquired = async () => {\n if (!collabOptions.value.enabled || isUndefined(props.collab) || props.collabStatus === CollabStatus.Inactive) {\n return Promise.resolve(true)\n }\n\n let count = 0\n\n const checkLock: () => Promise<Awaited<boolean>> = () => {\n if (collabFieldLockReallyLocked.value) {\n return Promise.resolve(true)\n }\n\n count++\n if (count < 50) {\n return new Promise((resolve) => setTimeout(() => resolve(checkLock()), 100))\n }\n\n return Promise.reject(false)\n }\n\n return checkLock()\n}\n\nconst onDrop = async (files: File[]) => {\n acquireFieldLockLocal()\n const config = imageWidgetUploadConfig.value\n if (isUndefined(config)) return\n try {\n await waitForFieldLockIsReallyAcquired()\n cachedExtSystemId.value = config.extSystem\n uploadQueuesStore.addByFiles(props.queueKey, config.extSystem, config.licence, files)\n uploadQueueDialog.value = props.queueKey\n } catch (e) {\n showError('Unable to lock image widget by current user.')\n }\n}\n\nconst onCopyToLicence = (data: DamImageCopyToLicenceResponse) => {\n if (!data[0]) return\n const config = imageWidgetUploadConfig.value\n if (isUndefined(config)) return\n cachedExtSystemId.value = config.extSystem\n if (data[0].result === 'copy') {\n uploadQueuesStore.addByCopyToLicence(props.queueKey, config.extSystem, config.licence, [data[0].targetAsset])\n } else if (data[0].result === 'exists') {\n uploadQueuesStore.addByCopyToLicence(props.queueKey, config.extSystem, config.licence, [data[0].targetAsset])\n uploadQueuesStore.queueItemDuplicate(data[0].targetAsset, data[0].targetMainFile, DamAssetType.Image)\n } else {\n showErrorT('damImage.queueItem.errorUnableToCopyToLicence')\n return\n }\n uploadQueueDialog.value = props.queueKey\n}\n\nconst onFileInput = (files: File[]) => {\n const config = imageWidgetUploadConfig.value\n if (isUndefined(config)) return\n cachedExtSystemId.value = config.extSystem\n uploadQueuesStore.addByFiles(props.queueKey, config.extSystem, config.licence, files)\n uploadQueueDialog.value = props.queueKey\n}\n\nconst { uploadSizes, uploadAccept } = useDamAcceptTypeAndSizeHelper(\n DamAssetType.Image,\n imageWidgetUploadConfig.value.extSystemConfig\n)\n\nconst reload = async (newImage: ImageCreateUpdateAware | undefined, newImageId: IntegerIdNullable, force = false) => {\n resolvedSrc.value = imagePlaceholderPath\n if ((newImage && isNull(resImage.value)) || (newImage && force)) {\n resImage.value = cloneDeep(newImage)\n if (resImage.value) {\n if (isNumber(props.damWidth) && isNumber(props.damHeight)) {\n resolvedSrc.value = widgetImageToDamImageUrl(toRaw(resImage.value), props.damWidth, props.damHeight)\n } else {\n resolvedSrc.value = widgetImageToDamImageUrl(toRaw(resImage.value))\n }\n if (props.expandMetadata) {\n imageMediaWidgetStore.setDetail(toRaw(resImage.value))\n }\n }\n return\n }\n if (newImageId) {\n try {\n resImage.value = await fetchImage(imageClient, newImageId)\n } catch (error) {\n showErrorsDefault(error)\n }\n if (!isNull(resImage.value)) {\n if (isNumber(props.damWidth) && isNumber(props.damHeight)) {\n resolvedSrc.value = widgetImageToDamImageUrl(toRaw(resImage.value), props.damWidth, props.damHeight)\n } else {\n resolvedSrc.value = widgetImageToDamImageUrl(toRaw(resImage.value))\n }\n if (props.expandMetadata) {\n imageMediaWidgetStore.setDetail(toRaw(resImage.value))\n }\n }\n return\n }\n resImage.value = null\n}\n\nconst reset = () => {\n resolvedSrc.value = imagePlaceholderPath\n resImage.value = null\n modelValue.value = null\n releaseFieldLock.value(null)\n}\n\nwatch(\n [() => props.image, modelValue],\n async ([newImage, newImageId]) => {\n await reload(newImage, newImageId)\n },\n { immediate: true }\n)\n\nconst assetSelectStore = useAssetSelectStore()\n\nconst onAssetSelectConfirm = async (data: AssetSelectReturnData) => {\n metadataDialogLoading.value = true\n imageMediaWidgetStore.setDetail(null)\n showDamAuthorsInCmsImage.value = false\n let description = ''\n let source = ''\n if (data.type === 'asset') {\n if (!data.value[0] || !data.value[0].mainFile) return\n if (!isUndefined(data.copyToLicence)) {\n try {\n const copyRes = await copyToLicence(damClient, [\n { asset: data.value[0].id, targetAssetLicence: data.copyToLicence },\n ])\n onCopyToLicence(copyRes)\n } catch (e) {\n showErrorsDefault(e)\n } finally {\n metadataDialogLoading.value = false\n }\n return\n }\n metadataDialog.value = true\n try {\n const assetRes = await fetchAsset(damClient, data.value[0].id)\n if (isString(assetRes.metadata.customData?.description)) {\n description = assetRes.metadata.customData.description.trim()\n }\n if (assetRes.authors.length > 0) {\n const authorsRes = await fetchAuthorListByIds(\n damClient,\n assetSelectStore.selectedSelectConfig.extSystem,\n assetRes.authors\n )\n source = authorsRes.map((author) => author.name).join(', ')\n } else if (assetRes.authors.length === 0) {\n showDamAuthorsInCmsImage.value = true\n asset.value = assetRes\n }\n } catch (e) {\n showErrorsDefault(e)\n }\n const image: ImageCreateUpdateAware = {\n texts: {\n description: description,\n source: source,\n },\n flags: {\n showSource: true,\n },\n dam: {\n damId: data.value[0].mainFile.id,\n regionPosition: 0,\n licenceId: data.value[0].licence,\n },\n position: 1,\n }\n if (!isNull(modelValue.value)) {\n image.id = modelValue.value\n }\n imageMediaWidgetStore.setDetail(image)\n metadataDialogLoading.value = false\n if (props.expandMetadata) {\n forceReloadViewWithExpandMetadata()\n }\n }\n}\n\nconst assetDetailStore = useAssetDetailStore()\nconst { loading: assetLoading, dialog: assetDialog, asset } = storeToRefs(assetDetailStore)\nconst { damClient } = useCommonAdminCoreDamOptions()\n\nconst onEditAsset = async (assetFileId: DocId) => {\n assetLoading.value = true\n assetDialog.value = props.queueKey\n try {\n const assetRes = await fetchAssetByFileId(damClient, assetFileId)\n const licence = await fetchDamAssetLicence(damClient, assetRes.licence)\n if (licence.extSystem) {\n cachedExtSystemId.value = licence.extSystem\n }\n assetDetailStore.setAsset(assetRes)\n } catch (e) {\n showErrorsDefault(e)\n } finally {\n assetLoading.value = false\n }\n}\n\nconst onMetadataDialogClose = () => {\n imageMediaWidgetStore.setDetail(null)\n metadataDialog.value = false\n}\n\nconst onMetadataDialogConfirm = async () => {\n if (!isImageCreateUpdateAware(detail.value)) return\n metadataDialogSaving.value = true\n try {\n if (showDamAuthorsInCmsImage.value && asset.value) {\n if (asset.value.authors.length > 0) {\n const authorsRes = await fetchAuthorListByIds(\n damClient,\n assetSelectStore.selectedSelectConfig.extSystem,\n asset.value.authors\n )\n detail.value.texts.source = authorsRes.map((author) => author.name).join(', ')\n await updateAssetAuthors(damClient, asset.value, assetSelectStore.selectedSelectConfig.extSystem)\n showDamAuthorsInCmsImage.value = false\n }\n }\n const res = detail.value.id\n ? await updateImage(imageClient, detail.value.id, detail.value)\n : await createImage(imageClient, detail.value)\n metadataDialog.value = false\n modelValue.value = res.id\n imageMediaWidgetStore.setDetail(null)\n await reload(res, res.id, true)\n emit('afterMetadataSaveSuccess')\n releaseFieldLock.value(res.id)\n } catch (e) {\n showErrorsDefault(e)\n } finally {\n metadataDialogSaving.value = false\n }\n}\n\nconst onImageDelete = async () => {\n if (isNull(modelValue.value)) return\n if (props.callDeleteApiOnRemove) {\n try {\n await deleteImage(imageClient, modelValue.value)\n reset()\n } catch (e) {\n showErrorsDefault(e)\n }\n return\n }\n reset()\n}\n\nconst forceReloadViewWithExpandMetadata = () => {\n if (!isImageCreateUpdateAware(detail.value)) return\n reload(detail.value, null, true)\n}\n\nconst onAssetUploadConfirm = (items: ImageCreateUpdateAware[]) => {\n if (!items[0]) return\n\n if (!isNull(modelValue.value)) {\n items[0].id = modelValue.value\n }\n imageMediaWidgetStore.setDetail(items[0])\n metadataDialog.value = true\n if (props.expandMetadata) {\n forceReloadViewWithExpandMetadata()\n }\n}\n\nconst expandedUploadDialog = ref<InstanceType<typeof AFileInputDialog> | null>(null)\n\nconst onDropzoneClick = () => {\n if (isLocked.value) return\n acquireFieldLockLocal()\n if (!props.expandOptions) {\n clickMenuOpened.value = true\n return\n }\n expandedUploadDialog.value?.activate()\n}\n\nconst detailDialogMetadataComponent = ref<InstanceType<typeof ImageDetailDialogMetadata> | null>(null)\n\nconst metadataConfirm = () => {\n detailDialogMetadataComponent.value?.confirm()\n}\n\nconst onOptionsButtonClick = () => {\n acquireFieldLockLocal()\n}\n\nconst anyWidgetDialogOpened = computed(() => {\n return (\n metadataDialog.value ||\n assetSelectDialog.value ||\n fileInputDialog.value ||\n uploadQueueDialog.value === props.queueKey\n )\n})\n\nconst isLocked = computed(() => {\n return !isNull(lockedByUserLocal.value)\n})\n\nwatch(\n clickMenuOpened,\n (newValue, oldValue) => {\n if (newValue === oldValue || newValue || anyWidgetDialogOpened.value) return\n releaseFieldLockLocal(modelValue.value)\n },\n { immediate: false }\n)\n\nwatch(\n anyWidgetDialogOpened,\n (newValue, oldValue) => {\n if (newValue === oldValue || newValue) return\n releaseFieldLockLocal(modelValue.value)\n },\n { immediate: false }\n)\n\nonMounted(() => {\n imageMediaWidgetStore.reset()\n})\n\ndefineExpose({\n metadataConfirm,\n})\n</script>\n\n<template>\n <div\n class=\"a-image-widget\"\n :class=\"{ 'a-image-widget--locked': isLocked }\"\n :style=\"{ width: width ? width + 'px' : undefined, maxWidth: maxWidth ? maxWidth + 'px' : undefined }\"\n >\n <div class=\"a-image-widget__options\">\n <h4\n v-if=\"label\"\n class=\"font-weight-bold text-subtitle-2\"\n >\n {{ label\n }}<span\n v-if=\"required\"\n class=\"required-mark\"\n />\n </h4>\n <div class=\"d-flex\">\n <div v-if=\"isLocked && collab\">\n <ACollabLockedByUser\n :id=\"lockedByUserLocal\"\n :users=\"collab.cachedUsers\"\n />\n </div>\n <div>\n <div\n v-if=\"expandOptions\"\n class=\"d-flex flex-row\"\n >\n <VBtn\n v-if=\"imageLoaded && !expandMetadata\"\n class=\"mr-2 mb-2\"\n @click=\"actionEditMeta\"\n >\n {{ t('common.damImage.image.meta.edit') }}\n </VBtn>\n <VBtn\n class=\"mr-2 mb-2\"\n @click=\"actionLibrary\"\n >\n <span v-if=\"imageLoaded\">{{ t('common.damImage.image.button.replaceFromDam') }}</span>\n <span v-else>{{ t('common.damImage.image.button.addFromDam') }}</span>\n </VBtn>\n <AFileInputDialog\n ref=\"expandedUploadDialog\"\n v-model=\"fileInputDialog\"\n :file-input-key=\"uploadQueue?.fileInputKey\"\n :accept=\"uploadAccept\"\n :max-sizes=\"uploadSizes\"\n @files-input=\"onFileInput\"\n >\n <template #activator=\"{ props: fileInputProps }\">\n <VBtn v-bind=\"fileInputProps\">\n {{ t('common.damImage.image.button.upload') }}\n </VBtn>\n </template>\n </AFileInputDialog>\n <span\n v-if=\"required\"\n class=\"required-mark ml-2\"\n />\n </div>\n <VBtn\n v-else\n variant=\"text\"\n size=\"x-small\"\n icon\n :disabled=\"isLocked\"\n @click.stop=\"onOptionsButtonClick\"\n >\n <VIcon icon=\"mdi-dots-horizontal\" />\n <VTooltip\n activator=\"parent\"\n location=\"top\"\n >\n {{ t('common.damImage.image.button.options') }}\n </VTooltip>\n <VMenu\n v-model=\"clickMenuOpened\"\n activator=\"parent\"\n location=\"bottom right\"\n eager\n >\n <VCard>\n <VList density=\"compact\">\n <VListItem\n v-if=\"imageLoaded && !expandMetadata\"\n @click=\"actionEditMeta\"\n >\n <VListItemTitle>{{ t('common.damImage.image.meta.edit') }}</VListItemTitle>\n </VListItem>\n <VListItem @click=\"actionLibrary\">\n <VListItemTitle>\n <span v-if=\"imageLoaded\">{{ t('common.damImage.image.button.replaceFromDam') }}</span>\n <span v-else>{{ t('common.damImage.image.button.addFromDam') }}</span>\n </VListItemTitle>\n </VListItem>\n <AFileInputDialog\n v-model=\"fileInputDialog\"\n :file-input-key=\"uploadQueue?.fileInputKey\"\n :accept=\"uploadAccept\"\n :max-sizes=\"uploadSizes\"\n @files-input=\"onFileInput\"\n >\n <template #activator=\"{ props: fileInputProps }\">\n <VListItem\n @click=\"\n ($event: any) => {\n fileInputProps.onClick($event)\n clickMenuOpened = false\n }\n \"\n >\n {{ t('common.damImage.image.button.upload') }}\n </VListItem>\n </template>\n </AFileInputDialog>\n <VListItem\n v-if=\"imageLoaded\"\n @click=\"onImageDelete\"\n >\n <VListItemTitle>{{ t('common.damImage.image.button.removeImage') }}</VListItemTitle>\n </VListItem>\n </VList>\n </VCard>\n </VMenu>\n </VBtn>\n </div>\n </div>\n </div>\n <div class=\"position-relative\">\n <VImg\n :lazy-src=\"imagePlaceholderPath\"\n :src=\"resolvedSrc\"\n :width=\"width\"\n :height=\"height\"\n cover\n max-width=\"100%\"\n class=\"disable-radius\"\n >\n <template #placeholder>\n <div class=\"d-flex align-center justify-center h-100\">\n <VProgressCircular\n indeterminate\n color=\"grey-lighten-4\"\n />\n </div>\n </template>\n </VImg>\n <AImageDropzone\n variant=\"fill\"\n transparent\n :accept=\"uploadAccept\"\n :max-sizes=\"uploadSizes\"\n :hide-text=\"!withoutImage || isLocked\"\n @on-click=\"onDropzoneClick\"\n @on-drop=\"onDrop\"\n />\n </div>\n <slot\n name=\"append\"\n :image=\"resImage\"\n />\n <ImageDetailDialogMetadata\n ref=\"detailDialogMetadataComponent\"\n v-model=\"metadataDialog\"\n :show-dam-authors=\"showDamAuthorsInCmsImage\"\n :expand=\"expandMetadata\"\n :saving=\"metadataDialogSaving\"\n :loading=\"metadataDialogLoading\"\n :type=\"DamAssetType.Image\"\n @edit-asset=\"onEditAsset\"\n @on-confirm=\"onMetadataDialogConfirm\"\n @on-close=\"onMetadataDialogClose\"\n />\n </div>\n <AAssetSelect\n v-model=\"assetSelectDialog\"\n :select-licences=\"selectLicences\"\n :upload-licence=\"uploadLicence\"\n :min-count=\"1\"\n :max-count=\"1\"\n :asset-type=\"DamAssetType.Image\"\n return-type=\"asset\"\n @on-confirm=\"onAssetSelectConfirm\"\n />\n <AssetDetailDialog\n v-if=\"assetDialog === queueKey\"\n :queue-key=\"queueKey\"\n :ext-system=\"cachedExtSystemId\"\n />\n <UploadQueueDialogSingle\n v-if=\"uploadQueueDialog === queueKey && imageWidgetUploadConfig\"\n :queue-key=\"queueKey\"\n :ext-system=\"imageWidgetUploadConfig.extSystem\"\n :licence-id=\"imageWidgetUploadConfig.licence\"\n :file-input-key=\"uploadQueue?.fileInputKey ?? -1\"\n :accept=\"uploadAccept\"\n :max-sizes=\"uploadSizes\"\n @on-apply=\"onAssetUploadConfirm\"\n />\n</template>\n","<script lang=\"ts\" setup>\nimport type { IntegerId, IntegerIdNullable } from '@/types/common'\nimport { onMounted, provide, ref, shallowRef } from 'vue'\nimport { useDamConfigState } from '@/components/damImage/uploadQueue/composables/damConfigState'\nimport { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport type { ImageAware } from '@/types/ImageAware'\nimport type { UploadQueueKey } from '@/types/coreDam/UploadQueue'\nimport ImageWidgetInner from '@/components/damImage/uploadQueue/components/ImageWidgetInner.vue'\nimport { ImageWidgetUploadConfig } from '@/components/damImage/composables/imageWidgetInkectionKeys'\nimport { isUndefined } from '@/utils/common'\nimport { isImageWidgetUploadConfigAllowed } from '@/components/damImage/composables/damFilterUserAllowedUploadConfigs'\nimport { type CollabComponentConfig, CollabStatus, type CollabStatusType } from '@/components/collab/types/Collab'\nimport type { DamConfigLicenceExtSystemReturnType } from '@/types/coreDam/DamConfig'\nimport { useDamConfigStore } from '@/components/damImage/uploadQueue/composables/damConfigStore'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: IntegerIdNullable\n queueKey: UploadQueueKey\n uploadLicence: IntegerId\n selectLicences: IntegerId[]\n image?: ImageAware | undefined // optional, if available, no need to fetch image data\n configName?: string\n collab?: CollabComponentConfig\n collabStatus?: CollabStatusType\n label?: string | undefined\n readonly?: boolean\n required?: boolean\n dataCy?: string | undefined\n expandOptions?: boolean\n expandMetadata?: boolean\n disableOnClickMenu?: boolean\n width?: number | undefined\n maxWidth?: number | undefined\n height?: number | undefined\n callDeleteApiOnRemove?: boolean\n damWidth?: undefined | number\n damHeight?: undefined | number\n }>(),\n {\n configName: 'default',\n collab: undefined,\n collabStatus: CollabStatus.Inactive,\n label: undefined,\n image: undefined,\n readonly: false,\n required: false,\n lockable: false,\n lockedById: undefined,\n dataCy: undefined,\n expandOptions: false,\n expandMetadata: false,\n disableOnClickMenu: false,\n width: undefined,\n maxWidth: undefined,\n height: undefined,\n callDeleteApiOnRemove: false,\n damWidth: undefined,\n damHeight: undefined,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: IntegerIdNullable): void\n (e: 'afterMetadataSaveSuccess'): void\n}>()\n\nconst status = ref<'loading' | 'ready' | 'error' | 'uploadNotAllowed'>('loading')\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { damClient } = useCommonAdminCoreDamOptions(props.configName)\nconst {\n loadDamPrvConfig,\n loadDamConfigAssetCustomFormElements,\n getDamConfigAssetCustomFormElements,\n getOrLoadDamConfigExtSystemByLicence,\n getOrLoadDamConfigExtSystemByLicences,\n} = useDamConfigState(damClient)\n\nconst uploadConfig = shallowRef<DamConfigLicenceExtSystemReturnType | undefined>(undefined)\n\nonMounted(async () => {\n const damConfigStore = useDamConfigStore()\n uploadConfig.value = await getOrLoadDamConfigExtSystemByLicence(props.uploadLicence)\n if (isUndefined(uploadConfig.value)) {\n status.value = 'error'\n return\n }\n if (!isImageWidgetUploadConfigAllowed(uploadConfig.value)) {\n status.value = 'uploadNotAllowed'\n return\n }\n const promises: Promise<any>[] = []\n if (!damConfigStore.initialized.damPrvConfig) {\n promises.push(loadDamPrvConfig())\n }\n promises.push(getOrLoadDamConfigExtSystemByLicences(props.selectLicences))\n const configAssetCustomFormElements = getDamConfigAssetCustomFormElements(uploadConfig.value.extSystem)\n if (isUndefined(configAssetCustomFormElements)) {\n promises.push(loadDamConfigAssetCustomFormElements(uploadConfig.value.extSystem))\n }\n try {\n await Promise.allSettled(promises)\n } catch (e) {\n status.value = 'error'\n }\n if (status.value !== 'error') status.value = 'ready'\n})\n\nprovide(ImageWidgetUploadConfig, uploadConfig)\n\nconst innerComponent = ref<InstanceType<typeof ImageWidgetInner> | null>(null)\n\nconst metadataConfirm = () => {\n innerComponent.value?.metadataConfirm()\n}\n\ndefineExpose({\n metadataConfirm,\n})\n</script>\n\n<template>\n <ImageWidgetInner\n v-if=\"status === 'ready'\"\n ref=\"innerComponent\"\n v-bind=\"props\"\n @update:model-value=\"emit('update:modelValue', $event)\"\n @after-metadata-save-success=\"emit('afterMetadataSaveSuccess')\"\n >\n <template #append=\"{ image: appendImage }\">\n <slot\n name=\"append\"\n :image=\"appendImage\"\n />\n </template>\n </ImageWidgetInner>\n <div\n v-else-if=\"status === 'error'\"\n class=\"text-error\"\n >\n Loading DAM config error\n </div>\n <div\n v-else-if=\"status === 'uploadNotAllowed'\"\n class=\"text-error\"\n >\n DAM access rights error\n </div>\n <VProgressCircular\n v-else\n :size=\"12\"\n :width=\"2\"\n indeterminate\n />\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, onMounted, onUnmounted, ref, shallowRef, watch, withModifiers } from 'vue'\nimport ADialogToolbar from '@/components/ADialogToolbar.vue'\nimport { useI18n } from 'vue-i18n'\nimport { type AssetDetailItemDto, DamAssetType, type DamAssetTypeType } from '@/types/coreDam/Asset'\nimport { useAssetSelectActions } from '@/components/dam/assetSelect/composables/assetSelectListActions'\nimport AssetSelectListTable from '@/components/dam/assetSelect/components/AssetSelectListTable.vue'\nimport AssetSelectListBar from '@/components/dam/assetSelect/components/AssetSelectListBar.vue'\nimport { AssetSelectGridView, useGridView } from '@/components/dam/assetSelect/composables/assetSelectGridView'\nimport AssetSelectListTiles from '@/components/dam/assetSelect/components/AssetSelectListTiles.vue'\nimport { useSidebar } from '@/components/dam/assetSelect/composables/assetSelectFilterSidebar'\nimport AssetSelectFilter from '@/components/dam/assetSelect/components/filter/AssetSelectFilter.vue'\nimport {\n type AssetSelectReturnData,\n AssetSelectReturnType,\n type AssetSelectReturnTypeType,\n} from '@/types/coreDam/AssetSelect'\nimport {\n filterAllowedImageWidgetSelectConfigs\n} from '@/components/damImage/composables/damFilterUserAllowedUploadConfigs'\nimport { useAlerts } from '@/composables/system/alerts'\nimport type { IntegerId } from '@/types/common'\nimport { useDamConfigState } from '@/components/damImage/uploadQueue/composables/damConfigState'\nimport type { DamConfigLicenceExtSystemReturnType } from '@/types/coreDam/DamConfig'\nimport { cloneDeep, isUndefined } from '@/utils/common'\nimport AssetMetadata from '@/components/damImage/uploadQueue/components/AssetMetadata.vue'\nimport { useAssetSelectStore } from '@/services/stores/coreDam/assetSelectStore'\nimport { storeToRefs } from 'pinia'\nimport { useAssetDetailStore } from '@/components/damImage/uploadQueue/composables/assetDetailStore'\nimport { type DatatableOrderingOption } from '@/composables/system/datatableColumns'\n\nconst props = withDefaults(\n defineProps<{\n minCount: number\n maxCount: number\n selectLicences: IntegerId[]\n uploadLicence?: IntegerId | undefined\n returnType?: AssetSelectReturnTypeType\n configName?: string\n skipCurrentUserCheck?: boolean\n onDetailLoadedCallback?: ((asset: AssetDetailItemDto) => void) | undefined\n preselectAssetType?: DamAssetTypeType | undefined\n preselectInPodcast?: boolean | null | undefined\n }>(),\n {\n uploadLicence: undefined,\n returnType: AssetSelectReturnType.MainFileId,\n configName: 'default',\n skipCurrentUserCheck: false,\n onDetailLoadedCallback: undefined,\n preselectAssetType: undefined,\n preselectInPodcast: undefined,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'onConfirm', data: AssetSelectReturnData): void\n}>()\n\nconst modelValue = defineModel<boolean>({ default: false, required: false })\nconst sortModel = defineModel<number>('sort', { default: 1, required: false })\nconst ready = defineModel<boolean>('ready', { default: false, required: false })\n\nconst loading = ref(false)\nconst copyToLicence = ref(false)\n\nconst { t } = useI18n()\n\nconst {\n damClient,\n selectedCount,\n loader,\n pagination,\n fetchNextPage,\n fetchAssetListDebounced,\n getSelectedData,\n initStoreContext,\n detailLoading,\n reset,\n // eslint-disable-next-line vue/no-setup-props-reactivity-loss\n} = useAssetSelectActions('default', props.onDetailLoadedCallback)\n\nconst { loadDamConfigAssetCustomFormElements, getDamConfigAssetCustomFormElements } = useDamConfigState(damClient)\nconst { getOrLoadDamConfigExtSystemByLicences } = useDamConfigState(damClient)\nconst assetDetailStore = useAssetDetailStore()\nconst { asset } = storeToRefs(assetDetailStore)\nconst assetSelectStore = useAssetSelectStore()\nconst { selectedLicenceId, assetType } = storeToRefs(assetSelectStore)\n\nconst selectConfigs = shallowRef<DamConfigLicenceExtSystemReturnType[]>([])\n\nconst { openSidebarLeft, sidebarLeft, sidebarRight } = useSidebar()\nconst { showErrorT } = useAlerts()\n\nconst onOpen = () => {\n if (!ready.value) return\n let selectConfigLocal = cloneDeep(selectConfigs.value)\n if (!props.skipCurrentUserCheck) {\n selectConfigLocal = filterAllowedImageWidgetSelectConfigs(selectConfigs.value)\n }\n if (selectConfigLocal.length === 0) {\n showErrorT('common.assetSelect.error.unallowedLicence')\n return\n }\n\n reset()\n initStoreContext(\n selectConfigLocal,\n assetType.value,\n assetType.value === DamAssetType.Audio ? true : null,\n 1 === props.minCount && props.minCount === props.maxCount,\n props.minCount,\n props.maxCount\n )\n openSidebarLeft()\n modelValue.value = true\n}\n\nwatch(\n modelValue,\n async (newValue, oldValue) => {\n if (newValue === oldValue || !newValue) return\n onOpen()\n },\n { immediate: true }\n)\n\nconst onClose = () => {\n modelValue.value = false\n reset()\n}\n\nconst getCopyToLicenceId = () => {\n if (copyToLicence.value && props.uploadLicence) {\n return props.uploadLicence\n }\n return undefined\n}\n\nconst onConfirm = () => {\n emit('onConfirm', getSelectedData(props.returnType, getCopyToLicenceId()))\n onClose()\n}\n\nconst autoloadOnIntersect = (isIntersecting: boolean) => {\n if (isIntersecting && pagination.value.hasNextPage === true) {\n fetchNextPage()\n }\n}\n\nconst { gridView } = useGridView()\n\nconst showCopyToLicence = computed(() => {\n return (\n assetType.value === DamAssetType.Image &&\n selectedLicenceId.value > 0 &&\n !isUndefined(props.uploadLicence) &&\n selectedLicenceId.value !== props.uploadLicence\n )\n})\n\nconst componentComputed = computed(() => {\n switch (gridView.value) {\n case AssetSelectGridView.Table:\n return AssetSelectListTable\n default:\n case AssetSelectGridView.Masonry:\n case AssetSelectGridView.Thumbnail:\n return AssetSelectListTiles\n }\n})\n\nconst disabledSubmit = computed(() => {\n return selectedCount.value < props.minCount || selectedCount.value > props.maxCount\n})\n\nconst extId = computed(() => {\n if (selectConfigs.value.length === 0) return undefined\n if (selectedLicenceId.value > 0) {\n const found = selectConfigs.value.find((config) => config.licence === selectedLicenceId.value)\n if (found) return found.extSystem\n }\n return undefined\n})\n\nconst loadingSidebarRight = computed(() => {\n return customFormConfigLoading.value || detailLoading.value\n})\n\nconst { showErrorsDefault } = useAlerts()\nconst customFormConfigLoading = ref(true)\n\nconst typeChange = () => {\n assetSelectStore.reset(false)\n assetDetailStore.reset()\n fetchAssetListDebounced()\n}\n\nconst sortByChange = (option: DatatableOrderingOption) => {\n pagination.value.sortBy = null\n if (option.sortBy) {\n pagination.value.sortBy = { key: option.sortBy.key, order: option.sortBy.order }\n }\n fetchAssetListDebounced()\n}\n\nwatch(\n extId,\n async (newValue) => {\n if (isUndefined(newValue)) return\n customFormConfigLoading.value = true\n const configAssetCustomFormElements = getDamConfigAssetCustomFormElements(newValue)\n if (isUndefined(configAssetCustomFormElements)) {\n try {\n await loadDamConfigAssetCustomFormElements(newValue)\n customFormConfigLoading.value = false\n } catch (e) {\n showErrorsDefault(e)\n }\n } else {\n customFormConfigLoading.value = false\n }\n },\n { immediate: true }\n)\n\nonMounted(async () => {\n ready.value = false\n loading.value = true\n selectConfigs.value = await getOrLoadDamConfigExtSystemByLicences(props.selectLicences)\n loading.value = false\n ready.value = true\n})\n\nonUnmounted(() => {\n selectConfigs.value = []\n})\n\ndefineExpose({\n open: onOpen,\n})\n</script>\n\n<template>\n <div\n v-if=\"loading\"\n class=\"w-100 d-flex align-center justify-center\"\n >\n <VProgressCircular indeterminate />\n </div>\n <template v-else-if=\"selectConfigs.length > 0\">\n <slot\n name=\"activator\"\n :props=\"{ onClick: withModifiers(() => onOpen(), ['stop']) }\"\n />\n <VDialog\n v-model=\"modelValue\"\n fullscreen\n class=\"subject-select\"\n >\n <VCard\n v-if=\"modelValue\"\n class=\"subject-select__card\"\n >\n <ADialogToolbar\n class=\"subject-select__toolbar system-border-b\"\n @on-cancel=\"onClose\"\n >\n <slot name=\"title\">\n {{ t('common.assetSelect.meta.texts.title') }}\n </slot>\n </ADialogToolbar>\n <AssetSelectListBar\n v-model:sort=\"sortModel\"\n show-types\n :preselect-asset-type=\"preselectAssetType\"\n :preselect-in-podcast=\"preselectInPodcast\"\n @type-change=\"typeChange\"\n @sort-by-change=\"sortByChange\"\n />\n <div\n class=\"subject-select__main\"\n :class=\"{\n 'subject-select__main--sidebar-active': sidebarLeft,\n 'subject-select__main--sidebar-right-active': sidebarRight,\n }\"\n >\n <div class=\"subject-select__sidebar system-border-r\">\n <AssetSelectFilter />\n </div>\n <div class=\"subject-select__content\">\n <component\n :is=\"componentComputed\"\n v-if=\"extId\"\n :ext-system=\"extId\"\n />\n <div class=\"d-flex w-100 align-center justify-center pa-4\">\n <ABtnSecondary\n v-show=\"pagination.hasNextPage || loader\"\n v-intersect=\"autoloadOnIntersect\"\n :loading=\"loader\"\n size=\"small\"\n @click=\"fetchNextPage\"\n >\n <slot name=\"button-confirm-title\">\n {{ t('common.button.loadMore') }}\n </slot>\n </ABtnSecondary>\n </div>\n </div>\n <div class=\"subject-select__sidebar-right system-border-l\">\n <div\n v-if=\"loadingSidebarRight\"\n class=\"d-flex w-100 align-center justify-center\"\n >\n <VProgressCircular indeterminate />\n </div>\n <div\n v-else-if=\"!asset\"\n class=\"d-flex w-100 align-center justify-center\"\n >\n {{ t('common.assetSelect.meta.info.noAssetSelected') }}\n </div>\n <div v-else>\n <AssetMetadata\n v-if=\"extId && !customFormConfigLoading\"\n :ext-system=\"extId\"\n readonly\n />\n </div>\n </div>\n </div>\n <div class=\"subject-select__actions system-border-t\">\n <div v-if=\"props.minCount === props.maxCount\">\n {{ t('common.assetSelect.meta.texts.pickExactCount', { count: props.minCount, selected: selectedCount }) }}\n </div>\n <div v-else>\n {{\n t('common.assetSelect.meta.texts.pickRangeCount', {\n minCount: props.minCount,\n maxCount: props.maxCount,\n selected: selectedCount,\n })\n }}\n </div>\n <VSpacer />\n <VSwitch\n v-if=\"showCopyToLicence\"\n v-model=\"copyToLicence\"\n :label=\"t('common.assetSelect.meta.texts.copyToLicence')\"\n hide-details\n class=\"mr-2\"\n />\n <ABtnPrimary\n :disabled=\"disabledSubmit\"\n @click.stop=\"onConfirm\"\n >\n <slot name=\"button-confirm-title\">\n {{ t('common.button.confirm') }}\n </slot>\n </ABtnPrimary>\n </div>\n </VCard>\n </VDialog>\n </template>\n <div v-else>\n Error, no select licence.\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport AImageDropzone from '@/components/file/AFileDropzone.vue'\nimport type { DocId, IntegerId, IntegerIdNullable } from '@/types/common'\nimport type { ImageAware, ImageCreateUpdateAware } from '@/types/ImageAware'\nimport imagePlaceholderPath from '@/assets/image/placeholder16x9.jpg'\nimport { useCommonAdminImageOptions } from '@/components/damImage/composables/commonAdminImageOptions'\nimport { useImageActions } from '@/components/damImage/composables/imageActions'\nimport { cloneDeep, isDefined, isNull, isNumber, isString, isUndefined } from '@/utils/common'\nimport { useAlerts } from '@/composables/system/alerts'\nimport { DamAssetType, type DamAssetTypeType, type DamImageCopyToLicenceResponse } from '@/types/coreDam/Asset'\nimport { useDamAcceptTypeAndSizeHelper } from '@/components/damImage/uploadQueue/composables/acceptTypeAndSizeHelper'\nimport { useUploadQueuesStore } from '@/components/damImage/uploadQueue/composables/uploadQueuesStore'\nimport type { UploadQueueKey } from '@/types/coreDam/UploadQueue'\nimport type { AssetSelectReturnData } from '@/types/coreDam/AssetSelect'\nimport type { DamConfigLicenceExtSystemReturnType } from '@/types/coreDam/DamConfig'\nimport { createImage, deleteImage, fetchImage, updateImage } from '@/components/damImage/uploadQueue/api/imageApi'\nimport ImageDetailDialogMetadata from '@/components/damImage/uploadQueue/components/ImageDetailDialogMetadata.vue'\nimport { computed, inject, onMounted, ref, type ShallowRef, toRaw, watch } from 'vue'\nimport AssetDetailDialog from '@/components/damImage/uploadQueue/components/AssetDetailDialog.vue'\nimport { useAssetDetailStore } from '@/components/damImage/uploadQueue/composables/assetDetailStore'\nimport { storeToRefs } from 'pinia'\nimport {\n fetchAsset,\n fetchAssetAsCmsMedia,\n fetchAssetByFileId,\n updateAssetAuthors,\n} from '@/components/damImage/uploadQueue/api/damAssetApi'\nimport { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport UploadQueueDialogSingle from '@/components/damImage/uploadQueue/components/UploadQueueDialogSingle.vue'\nimport { useUploadQueueDialog } from '@/components/damImage/uploadQueue/composables/uploadQueueDialog'\nimport { fetchAuthorListByIds } from '@/components/damImage/uploadQueue/api/authorApi'\nimport { useI18n } from 'vue-i18n'\nimport type { VBtn } from 'vuetify/components'\nimport { useExtSystemIdForCached } from '@/components/damImage/uploadQueue/composables/extSystemIdForCached'\nimport { useAssetSelectStore } from '@/services/stores/coreDam/assetSelectStore'\nimport { fetchDamAssetLicence } from '@/components/damImage/uploadQueue/api/damAssetLicenceApi'\nimport {\n type CollabComponentConfig,\n type CollabFieldData,\n type CollabFieldLockOptions,\n CollabStatus,\n type CollabStatusType,\n} from '@/components/collab/types/Collab'\nimport { useCommonAdminCollabOptions } from '@/components/collab/composables/commonAdminCollabOptions'\nimport { useCollabField } from '@/components/collab/composables/collabField'\nimport ACollabLockedByUser from '@/components/collab/components/ACollabLockedByUser.vue'\nimport AFileInputDialog from '@/components/file/AFileInputDialog.vue'\nimport {\n CollabFieldLockStatus,\n type CollabFieldLockStatusPayload,\n CollabFieldLockType,\n} from '@/components/collab/composables/collabEventBus'\nimport { ImageWidgetUploadConfig } from '@/components/damImage/composables/imageWidgetInkectionKeys'\nimport AAssetSelectMedia from '@/components/dam/assetSelect/AAssetSelectMedia.vue'\nimport {\n isImageCreateUpdateAware,\n isMediaAware,\n useImageMediaWidgetStore,\n} from '@/components/damImage/uploadQueue/composables/imageMediaWidgetStore'\nimport { type DamMediaFromDam, DamMediaType, type DamMediaTypeType, type MediaAware } from '@/types/MediaAware'\nimport { assetFileIsAudioFile, assetFileIsVideoFile } from '@/types/coreDam/AssetFile'\nimport { copyToLicence } from '@/components/damImage/uploadQueue/api/damImageApi'\n\nconst props = withDefaults(\n defineProps<{\n queueKey: UploadQueueKey\n uploadLicence: IntegerId\n selectLicences: IntegerId[]\n initialImage?: ImageAware | undefined // optional, if available, no need to fetch image data\n configName?: string\n collab?: CollabComponentConfig\n collabStatus?: CollabStatusType\n label?: string | undefined\n required?: boolean\n readonly?: boolean\n dataCy?: string | undefined\n expandOptions?: boolean\n expandMetadata?: boolean // only one at once, use in dialogs\n disableOnClickMenu?: boolean\n width?: number | undefined\n maxWidth?: number | undefined\n height?: number | undefined\n callDeleteApiOnRemove?: boolean\n damWidth?: undefined | number\n damHeight?: undefined | number\n }>(),\n {\n configName: 'default',\n collab: undefined,\n collabStatus: CollabStatus.Inactive,\n label: undefined,\n required: false,\n initialImage: undefined,\n initialMedia: undefined,\n readonly: false,\n lockable: false,\n lockedById: undefined,\n dataCy: undefined,\n expandOptions: false,\n expandMetadata: false,\n disableOnClickMenu: false,\n width: undefined,\n maxWidth: undefined,\n height: undefined,\n callDeleteApiOnRemove: false,\n damWidth: undefined,\n damHeight: undefined,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'afterMetadataSaveSuccess'): void\n}>()\n\nconst imageModel = defineModel<IntegerIdNullable>('image', { required: true })\nconst mediaModel = defineModel<MediaAware | null>('media', { required: true })\n\n// Collaboration\nconst { collabOptions } = useCommonAdminCollabOptions()\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst releaseFieldLock = ref((data: CollabFieldData, options?: Partial<CollabFieldLockOptions>) => {})\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst acquireFieldLock = ref((options?: Partial<CollabFieldLockOptions>) => {})\nconst lockedByUserLocal = ref<IntegerIdNullable>(null)\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nif (collabOptions.value.enabled && isDefined(props.collab)) {\n const { releaseCollabFieldLock, acquireCollabFieldLock, addCollabFieldLockStatusListener, lockedByUser } =\n useCollabField(props.collab.room, props.collab.field)\n releaseFieldLock.value = releaseCollabFieldLock\n acquireFieldLock.value = acquireCollabFieldLock\n watch(\n lockedByUser,\n (newValue) => {\n lockedByUserLocal.value = newValue\n },\n { immediate: true }\n )\n addCollabFieldLockStatusListener((data: CollabFieldLockStatusPayload) => {\n if (data.status === CollabFieldLockStatus.Success && data.type === CollabFieldLockType.Acquire) {\n collabFieldLockReallyLocked.value = true\n } else if (data.status === CollabFieldLockStatus.Failure && data.type === CollabFieldLockType.Acquire) {\n collabFieldLockReallyLocked.value = false\n } else if (data.status === CollabFieldLockStatus.Success && data.type === CollabFieldLockType.Release) {\n collabFieldLockReallyLocked.value = false\n } else if (data.status === CollabFieldLockStatus.Failure && data.type === CollabFieldLockType.Release) {\n collabFieldLockReallyLocked.value = true\n }\n })\n}\nconst lockedLocal = ref(false)\nconst acquireFieldLockLocal = () => {\n if (lockedLocal.value === true || props.collabStatus === CollabStatus.Inactive) return\n acquireFieldLock.value()\n lockedLocal.value = true\n}\nconst releaseFieldLockLocal = (value: IntegerIdNullable) => {\n if (lockedLocal.value === false || props.collabStatus === CollabStatus.Inactive) return\n releaseFieldLock.value(value)\n lockedLocal.value = false\n}\n\nconst imageWidgetUploadConfig = inject<ShallowRef<DamConfigLicenceExtSystemReturnType | undefined> | undefined>(\n ImageWidgetUploadConfig,\n undefined\n)\n\nif (isUndefined(imageWidgetUploadConfig) || isUndefined(imageWidgetUploadConfig.value)) {\n throw new Error(\"Fatal error, parent component doesn't provide necessary config ext system config.\")\n}\n\nconst { t } = useI18n()\n\nconst { showErrorsDefault, showError, showErrorT } = useAlerts()\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst imageOptions = useCommonAdminImageOptions(props.configName)\nconst { imageClient } = imageOptions\nconst { widgetImageToDamImageUrl, damImageIdToDamImageUrl } = useImageActions(imageOptions)\nconst uploadQueuesStore = useUploadQueuesStore()\nconst { uploadQueueDialog } = useUploadQueueDialog()\n\nconst showDamAuthorsInCmsImage = ref(false)\nconst resImageMedia = ref<null | ImageCreateUpdateAware | MediaAware>(null)\nconst clickMenuOpened = ref(false)\nconst assetSelectDialog = ref(false)\nconst metadataDialog = ref(false)\nconst metadataDialogSaving = ref(false)\nconst metadataDialogLoading = ref(false)\nconst fileInputDialog = ref(false)\n\nconst hideDropzoneText = computed(() => {\n return !isNull(imageModel.value) || !isNull(mediaModel.value)\n})\n\nconst resolvedSrc = ref('')\n\nconst uploadQueue = computed(() => {\n return uploadQueuesStore.getQueue(props.queueKey)\n})\n\nconst imageMediaLoaded = computed(() => {\n return !isNull(resImageMedia.value)\n})\n\nconst actionEditMeta = () => {\n imageMediaWidgetStore.setDetail(toRaw(resImageMedia.value))\n metadataDialog.value = true\n}\n\nconst actionLibrary = () => {\n assetSelectDialog.value = true\n}\n\nconst { cachedExtSystemId } = useExtSystemIdForCached()\n\n// this ref is updating only when the lock was really success or failure using sockets, needed for drop files\nconst collabFieldLockReallyLocked = ref(false)\n\nconst waitForFieldLockIsReallyAcquired = async () => {\n if (!collabOptions.value.enabled || isUndefined(props.collab) || props.collabStatus === CollabStatus.Inactive) {\n return Promise.resolve(true)\n }\n\n let count = 0\n\n const checkLock: () => Promise<Awaited<boolean>> = () => {\n if (collabFieldLockReallyLocked.value) {\n return Promise.resolve(true)\n }\n\n count++\n if (count < 50) {\n return new Promise((resolve) => setTimeout(() => resolve(checkLock()), 100))\n }\n\n return Promise.reject(false)\n }\n\n return checkLock()\n}\n\nconst onDrop = async (files: File[]) => {\n acquireFieldLockLocal()\n const config = imageWidgetUploadConfig.value\n if (isUndefined(config)) return\n try {\n await waitForFieldLockIsReallyAcquired()\n cachedExtSystemId.value = config.extSystem\n uploadQueuesStore.addByFiles(props.queueKey, config.extSystem, config.licence, files)\n uploadQueueDialog.value = props.queueKey\n } catch (e) {\n showError('Unable to lock image widget by current user.')\n }\n}\n\nconst onCopyToLicence = (data: DamImageCopyToLicenceResponse) => {\n if (!data[0]) return\n const config = imageWidgetUploadConfig.value\n if (isUndefined(config)) return\n cachedExtSystemId.value = config.extSystem\n if (data[0].result === 'copy') {\n uploadQueuesStore.addByCopyToLicence(props.queueKey, config.extSystem, config.licence, [data[0].targetAsset])\n } else if (data[0].result === 'exists') {\n uploadQueuesStore.addByCopyToLicence(props.queueKey, config.extSystem, config.licence, [data[0].targetAsset])\n uploadQueuesStore.queueItemDuplicate(data[0].targetAsset, data[0].targetMainFile, DamAssetType.Image)\n } else {\n showErrorT('damImage.queueItem.errorUnableToCopyToLicence')\n return\n }\n uploadQueueDialog.value = props.queueKey\n}\n\nconst onFileInput = (files: File[]) => {\n const config = imageWidgetUploadConfig.value\n if (isUndefined(config)) return\n cachedExtSystemId.value = config.extSystem\n uploadQueuesStore.addByFiles(props.queueKey, config.extSystem, config.licence, files)\n uploadQueueDialog.value = props.queueKey\n}\n\nconst { uploadSizes, uploadAccept } = useDamAcceptTypeAndSizeHelper(\n DamAssetType.Image,\n imageWidgetUploadConfig.value.extSystemConfig\n)\n\nconst reloadImage = async (\n newImage: ImageCreateUpdateAware | undefined,\n newImageId: IntegerIdNullable,\n force = false\n) => {\n resolvedSrc.value = imagePlaceholderPath\n if ((newImage && isNull(resImageMedia.value)) || (newImage && force)) {\n resImageMedia.value = cloneDeep(newImage)\n if (isImageCreateUpdateAware(resImageMedia.value)) {\n if (isNumber(props.damWidth) && isNumber(props.damHeight)) {\n resolvedSrc.value = widgetImageToDamImageUrl(toRaw(resImageMedia.value), props.damWidth, props.damHeight)\n } else {\n resolvedSrc.value = widgetImageToDamImageUrl(toRaw(resImageMedia.value))\n }\n if (props.expandMetadata) {\n imageMediaWidgetStore.setDetail(toRaw(resImageMedia.value))\n }\n }\n return\n }\n if (newImageId) {\n try {\n resImageMedia.value = await fetchImage(imageClient, newImageId)\n } catch (error) {\n showErrorsDefault(error)\n }\n if (isImageCreateUpdateAware(resImageMedia.value)) {\n if (isNumber(props.damWidth) && isNumber(props.damHeight)) {\n resolvedSrc.value = widgetImageToDamImageUrl(toRaw(resImageMedia.value), props.damWidth, props.damHeight)\n } else {\n resolvedSrc.value = widgetImageToDamImageUrl(toRaw(resImageMedia.value))\n }\n if (props.expandMetadata) {\n imageMediaWidgetStore.setDetail(toRaw(resImageMedia.value))\n }\n }\n return\n }\n resImageMedia.value = null\n}\n\nconst reloadMedia = (newMedia: MediaAware | null) => {\n resolvedSrc.value = imagePlaceholderPath\n if (newMedia) {\n resImageMedia.value = cloneDeep(newMedia)\n if (isMediaAware(resImageMedia.value) && !isNull(resImageMedia.value.damMedia.imageFileId)) {\n if (isNumber(props.damWidth) && isNumber(props.damHeight)) {\n resolvedSrc.value = damImageIdToDamImageUrl(\n resImageMedia.value.damMedia.imageFileId,\n props.damWidth,\n props.damHeight\n )\n } else {\n resolvedSrc.value = damImageIdToDamImageUrl(resImageMedia.value.damMedia.imageFileId)\n }\n if (props.expandMetadata) {\n imageMediaWidgetStore.setDetail(toRaw(resImageMedia.value))\n }\n }\n return\n }\n resImageMedia.value = null\n}\n\nconst reset = () => {\n resolvedSrc.value = imagePlaceholderPath\n resImageMedia.value = null\n imageModel.value = null\n mediaModel.value = null\n imageMediaWidgetStore.reset()\n releaseFieldLock.value(null)\n}\n\nwatch(\n [() => props.initialImage, imageModel, mediaModel],\n async ([newImage, newImageId, newMedia], [oldImage, oldImageId, oldMedia]) => {\n\n if (!isNull(newMedia) && JSON.stringify(newMedia) !== JSON.stringify(oldMedia)) {\n reloadMedia(newMedia)\n return\n }\n\n if (newImage !== oldImage || newImageId !== oldImageId) {\n await reloadImage(newImage, newImageId)\n return\n }\n\n if (isNull(newMedia) && !isNull(oldMedia)) {\n reloadMedia(null)\n }\n },\n { immediate: true }\n)\n\nconst assetSelectStore = useAssetSelectStore()\nconst imageMediaWidgetStore = useImageMediaWidgetStore()\nconst { detail } = storeToRefs(imageMediaWidgetStore)\n\nconst onAssetSelectConfirm = async (data: AssetSelectReturnData) => {\n if (data.type !== 'asset' || !data.value[0]) return\n metadataDialogLoading.value = true\n imageMediaWidgetStore.setDetail(null)\n // metadataDialog.value = true\n showDamAuthorsInCmsImage.value = false\n let description = ''\n let source = ''\n const selectedAsset = data.value[0]\n if (!selectedAsset.mainFile) return\n let mediaDataFromDam: DamMediaFromDam | null = null\n try {\n mediaDataFromDam = await fetchAssetAsCmsMedia(damClient, selectedAsset.id)\n } catch (e) {\n showErrorsDefault(e)\n }\n if (!mediaDataFromDam) return\n if (selectedAsset.attributes.assetType === DamAssetType.Video && assetFileIsVideoFile(selectedAsset.mainFile)) {\n // video\n metadataDialog.value = true\n const mediaData: MediaAware = {\n extService: 'damVideo',\n damMedia: {\n imageFileId: selectedAsset.mainFile.imagePreview?.imageFile || null,\n assetId: selectedAsset.id,\n licenceId: selectedAsset.licence,\n assetType: DamAssetType.Video,\n title: mediaDataFromDam.title,\n description: mediaDataFromDam.description,\n seriesName: mediaDataFromDam.seriesName,\n authorNames: mediaDataFromDam.authorNames,\n publishedAt: mediaDataFromDam.publishedAt,\n duration: mediaDataFromDam.duration,\n mediaUrl: mediaDataFromDam.mediaUrl,\n playable: mediaDataFromDam.playable,\n syncedWithDam: true,\n episodeName: mediaDataFromDam.episodeName,\n episodeNumber: mediaDataFromDam.episodeNumber,\n },\n }\n imageMediaWidgetStore.setDetail(mediaData)\n } else if (\n selectedAsset.attributes.assetType === DamAssetType.Audio &&\n selectedAsset.podcasts.length > 0 &&\n assetFileIsAudioFile(selectedAsset.mainFile)\n ) {\n // podcast audio\n metadataDialog.value = true\n const mediaData: MediaAware = {\n extService: 'damPodcast',\n damMedia: {\n imageFileId: selectedAsset.mainFile.imagePreview?.imageFile || null,\n assetId: selectedAsset.id,\n licenceId: selectedAsset.licence,\n assetType: DamAssetType.Audio,\n title: mediaDataFromDam.title,\n description: mediaDataFromDam.description,\n seriesName: mediaDataFromDam.seriesName,\n authorNames: mediaDataFromDam.authorNames,\n publishedAt: mediaDataFromDam.publishedAt,\n duration: mediaDataFromDam.duration,\n mediaUrl: mediaDataFromDam.mediaUrl,\n playable: mediaDataFromDam.playable,\n syncedWithDam: true,\n episodeName: mediaDataFromDam.episodeName,\n episodeNumber: mediaDataFromDam.episodeNumber,\n },\n }\n imageMediaWidgetStore.setDetail(mediaData)\n } else if (selectedAsset.attributes.assetType === DamAssetType.Image) {\n // image\n if (!isUndefined(data.copyToLicence)) {\n try {\n const copyRes = await copyToLicence(damClient, [\n { asset: data.value[0].id, targetAssetLicence: data.copyToLicence },\n ])\n onCopyToLicence(copyRes)\n } catch (e) {\n showErrorsDefault(e)\n } finally {\n metadataDialogLoading.value = false\n }\n return\n }\n metadataDialog.value = true\n try {\n const assetRes = await fetchAsset(damClient, selectedAsset.id)\n if (isString(assetRes.metadata.customData?.description)) {\n description = assetRes.metadata.customData.description.trim()\n }\n if (assetRes.authors.length > 0) {\n const authorsRes = await fetchAuthorListByIds(\n damClient,\n assetSelectStore.selectedSelectConfig.extSystem,\n assetRes.authors\n )\n source = authorsRes.map((author) => author.name).join(', ')\n } else if (assetRes.authors.length === 0) {\n showDamAuthorsInCmsImage.value = true\n asset.value = assetRes\n }\n } catch (e) {\n showErrorsDefault(e)\n }\n const image: ImageCreateUpdateAware = {\n texts: {\n description: description,\n source: source,\n },\n flags: {\n showSource: true,\n },\n dam: {\n damId: selectedAsset.mainFile.id,\n regionPosition: 0,\n licenceId: selectedAsset.licence,\n },\n position: 1,\n }\n if (!isNull(imageModel.value)) {\n image.id = imageModel.value\n }\n imageMediaWidgetStore.setDetail(image)\n }\n metadataDialogLoading.value = false\n if (props.expandMetadata) {\n forceReloadViewWithExpandMetadata()\n }\n}\n\nconst assetDetailStore = useAssetDetailStore()\nconst { loading: assetLoading, dialog: assetDialog, asset } = storeToRefs(assetDetailStore)\nconst { damClient } = useCommonAdminCoreDamOptions()\n\nconst onEditAsset = async (assetFileId: DocId) => {\n assetLoading.value = true\n assetDialog.value = props.queueKey\n try {\n const assetRes = await fetchAssetByFileId(damClient, assetFileId)\n const licence = await fetchDamAssetLicence(damClient, assetRes.licence)\n if (licence.extSystem) {\n cachedExtSystemId.value = licence.extSystem\n }\n assetDetailStore.setAsset(assetRes)\n } catch (e) {\n showErrorsDefault(e)\n } finally {\n assetLoading.value = false\n }\n}\n\nconst onMetadataDialogClose = () => {\n imageMediaWidgetStore.setDetail(null)\n metadataDialog.value = false\n}\n\nconst tryMediaConfirm = async () => {\n if (!isMediaAware(detail.value)) return\n metadataDialogSaving.value = true\n try {\n metadataDialog.value = false\n mediaModel.value = detail.value\n imageModel.value = null\n imageMediaWidgetStore.setDetail(null)\n reloadMedia(mediaModel.value)\n emit('afterMetadataSaveSuccess')\n releaseFieldLock.value(mediaModel.value.id)\n } catch (e) {\n showErrorsDefault(e)\n } finally {\n metadataDialogSaving.value = false\n }\n}\n\nconst tryImageConfirm = async () => {\n if (!isImageCreateUpdateAware(detail.value)) return\n metadataDialogSaving.value = true\n try {\n if (showDamAuthorsInCmsImage.value && asset.value) {\n if (asset.value.authors.length > 0) {\n const authorsRes = await fetchAuthorListByIds(\n damClient,\n assetSelectStore.selectedSelectConfig.extSystem,\n asset.value.authors\n )\n detail.value.texts.source = authorsRes.map((author) => author.name).join(', ')\n await updateAssetAuthors(damClient, asset.value, assetSelectStore.selectedSelectConfig.extSystem)\n showDamAuthorsInCmsImage.value = false\n }\n }\n const res = detail.value.id\n ? await updateImage(imageClient, detail.value.id, detail.value)\n : await createImage(imageClient, detail.value)\n metadataDialog.value = false\n imageModel.value = res.id\n mediaModel.value = null\n imageMediaWidgetStore.setDetail(null)\n await reloadImage(res, res.id, true)\n emit('afterMetadataSaveSuccess')\n releaseFieldLock.value(res.id)\n } catch (e) {\n showErrorsDefault(e)\n } finally {\n metadataDialogSaving.value = false\n }\n}\n\nconst onMetadataDialogConfirm = async () => {\n await tryMediaConfirm()\n await tryImageConfirm()\n}\n\nconst onImageMediaDelete = async () => {\n if (props.callDeleteApiOnRemove && isImageCreateUpdateAware(detail.value) && detail.value.id) {\n try {\n await deleteImage(imageClient, detail.value.id)\n reset()\n } catch (e) {\n showErrorsDefault(e)\n }\n return\n }\n reset()\n}\n\nconst forceReloadViewWithExpandMetadata = () => {\n if (isMediaAware(detail.value)) {\n reloadMedia(detail.value)\n return\n } else if (isImageCreateUpdateAware(detail.value)) {\n reloadImage(detail.value, null, true)\n }\n}\n\nconst onAssetUploadConfirm = (items: ImageCreateUpdateAware[]) => {\n if (!items[0]) return\n\n if (!isNull(imageModel.value)) {\n items[0].id = imageModel.value\n }\n imageMediaWidgetStore.setDetail(items[0])\n metadataDialog.value = true\n if (props.expandMetadata) {\n forceReloadViewWithExpandMetadata()\n }\n}\n\nconst expandedUploadDialog = ref<InstanceType<typeof AFileInputDialog> | null>(null)\n\nconst onDropzoneClick = () => {\n if (isLocked.value) return\n acquireFieldLockLocal()\n if (!props.expandOptions) {\n clickMenuOpened.value = true\n return\n }\n expandedUploadDialog.value?.activate()\n}\n\nconst detailDialogMetadataComponent = ref<InstanceType<typeof ImageDetailDialogMetadata> | null>(null)\n\nconst metadataConfirm = () => {\n detailDialogMetadataComponent.value?.confirm()\n}\n\nconst onOptionsButtonClick = () => {\n acquireFieldLockLocal()\n}\n\nconst anyWidgetDialogOpened = computed(() => {\n return (\n metadataDialog.value ||\n assetSelectDialog.value ||\n fileInputDialog.value ||\n uploadQueueDialog.value === props.queueKey\n )\n})\n\nconst isLocked = computed(() => {\n return !isNull(lockedByUserLocal.value)\n})\n\nconst preselectType = computed(() => {\n if (mediaModel.value && mediaModel.value.damMedia.assetType) {\n return mediaModel.value.damMedia.assetType\n }\n return DamAssetType.Image as DamMediaTypeType\n})\n\nconst type = computed<DamAssetTypeType | null>(() => {\n if (isMediaAware(resImageMedia.value)) {\n return resImageMedia.value.damMedia.assetType === DamMediaType.Video ? DamAssetType.Video : DamAssetType.Audio\n } else if (isImageCreateUpdateAware(resImageMedia.value)) {\n return DamAssetType.Image\n }\n return null\n})\n\nwatch(\n clickMenuOpened,\n (newValue, oldValue) => {\n if (newValue === oldValue || newValue || anyWidgetDialogOpened.value) return\n releaseFieldLockLocal(imageModel.value)\n },\n { immediate: false }\n)\n\nwatch(\n anyWidgetDialogOpened,\n (newValue, oldValue) => {\n if (newValue === oldValue || newValue) return\n releaseFieldLockLocal(imageModel.value)\n },\n { immediate: false }\n)\n\nonMounted(() => {\n imageMediaWidgetStore.reset()\n})\n\ndefineExpose({\n metadataConfirm,\n})\n</script>\n\n<template>\n <div\n class=\"a-image-widget\"\n :class=\"{ 'a-image-widget--locked': isLocked }\"\n :style=\"{ width: width ? width + 'px' : undefined, maxWidth: maxWidth ? maxWidth + 'px' : undefined }\"\n >\n <div class=\"a-image-widget__options\">\n <h4\n v-if=\"label\"\n class=\"font-weight-bold text-subtitle-2\"\n >\n {{ label\n }}<span\n v-if=\"required\"\n class=\"required-mark\"\n />\n </h4>\n <div class=\"d-flex\">\n <div v-if=\"isLocked && collab\">\n <ACollabLockedByUser\n :id=\"lockedByUserLocal\"\n :users=\"collab.cachedUsers\"\n />\n </div>\n <div>\n <div\n v-if=\"expandOptions\"\n class=\"d-flex flex-row\"\n >\n <VBtn\n v-if=\"imageMediaLoaded && !expandMetadata\"\n class=\"mr-2 mb-2\"\n :text=\"\n type === DamAssetType.Image\n ? t('common.damImage.image.meta.edit')\n : t('common.damImage.media.meta.edit')\n \"\n @click=\"actionEditMeta\"\n />\n <VBtn\n class=\"mr-2 mb-2\"\n @click=\"actionLibrary\"\n >\n <span v-if=\"imageMediaLoaded\">{{ t('common.damImage.image.button.replaceFromDam') }}</span>\n <span v-else>{{ t('common.damImage.image.button.addFromDam') }}</span>\n </VBtn>\n <AFileInputDialog\n ref=\"expandedUploadDialog\"\n v-model=\"fileInputDialog\"\n :file-input-key=\"uploadQueue?.fileInputKey\"\n :accept=\"uploadAccept\"\n :max-sizes=\"uploadSizes\"\n toolbar-t=\"common.damImage.image.button.upload\"\n @files-input=\"onFileInput\"\n >\n <template #activator=\"{ props: fileInputProps }\">\n <VBtn v-bind=\"fileInputProps\">\n {{ t('common.damImage.image.button.upload') }}\n </VBtn>\n </template>\n </AFileInputDialog>\n <span\n v-if=\"required\"\n class=\"required-mark ml-2\"\n />\n </div>\n <VBtn\n v-else\n variant=\"text\"\n size=\"x-small\"\n icon\n :disabled=\"isLocked\"\n @click.stop=\"onOptionsButtonClick\"\n >\n <VIcon icon=\"mdi-dots-horizontal\" />\n <VTooltip\n activator=\"parent\"\n location=\"top\"\n >\n {{ t('common.damImage.image.button.options') }}\n </VTooltip>\n <VMenu\n v-model=\"clickMenuOpened\"\n activator=\"parent\"\n location=\"bottom right\"\n eager\n >\n <VCard>\n <VList density=\"compact\">\n <VListItem\n v-if=\"imageMediaLoaded && !expandMetadata\"\n @click=\"actionEditMeta\"\n >\n <VListItemTitle>\n {{\n type === DamAssetType.Image\n ? t('common.damImage.image.meta.edit')\n : t('common.damImage.media.meta.edit')\n }}\n </VListItemTitle>\n </VListItem>\n <VListItem @click=\"actionLibrary\">\n <VListItemTitle>\n <span v-if=\"imageMediaLoaded\">{{ t('common.damImage.image.button.replaceFromDam') }}</span>\n <span v-else>{{ t('common.damImage.image.button.addFromDam') }}</span>\n </VListItemTitle>\n </VListItem>\n <AFileInputDialog\n v-model=\"fileInputDialog\"\n :file-input-key=\"uploadQueue?.fileInputKey\"\n :accept=\"uploadAccept\"\n :max-sizes=\"uploadSizes\"\n toolbar-t=\"common.damImage.image.button.upload\"\n @files-input=\"onFileInput\"\n >\n <template #activator=\"{ props: fileInputProps }\">\n <VListItem\n @click=\"\n ($event: any) => {\n fileInputProps.onClick($event)\n clickMenuOpened = false\n }\n \"\n >\n {{ t('common.damImage.image.button.upload') }}\n </VListItem>\n </template>\n </AFileInputDialog>\n <VListItem\n v-if=\"imageMediaLoaded\"\n @click=\"onImageMediaDelete\"\n >\n <VListItemTitle>\n {{\n type === DamAssetType.Image\n ? t('common.damImage.image.button.removeImage')\n : t('common.damImage.media.button.remove')\n }}\n </VListItemTitle>\n </VListItem>\n </VList>\n </VCard>\n </VMenu>\n </VBtn>\n </div>\n </div>\n </div>\n <div class=\"position-relative\">\n <VImg\n :lazy-src=\"imagePlaceholderPath\"\n :src=\"resolvedSrc\"\n :width=\"width\"\n :height=\"height\"\n cover\n max-width=\"100%\"\n class=\"disable-radius\"\n >\n <template #placeholder>\n <div class=\"d-flex align-center justify-center h-100\">\n <VProgressCircular\n indeterminate\n color=\"grey-lighten-4\"\n />\n </div>\n </template>\n </VImg>\n <div\n v-if=\"type\"\n class=\"a-image-widget__icon\"\n >\n <div v-if=\"type === DamAssetType.Audio\">\n <VIcon\n size=\"80\"\n icon=\"mdi-music\"\n color=\"#505050\"\n />\n </div>\n <div v-else-if=\"type === DamAssetType.Video\">\n <VIcon\n size=\"80\"\n icon=\"mdi-video\"\n color=\"#505050\"\n />\n </div>\n </div>\n <AImageDropzone\n variant=\"fill\"\n transparent\n :accept=\"uploadAccept\"\n :max-sizes=\"uploadSizes\"\n :hide-text=\"hideDropzoneText || isLocked\"\n @on-click=\"onDropzoneClick\"\n @on-drop=\"onDrop\"\n />\n </div>\n <slot\n name=\"append\"\n :image-media=\"resImageMedia\"\n />\n <ImageDetailDialogMetadata\n ref=\"detailDialogMetadataComponent\"\n v-model=\"metadataDialog\"\n :show-dam-authors=\"showDamAuthorsInCmsImage\"\n :expand=\"expandMetadata\"\n :saving=\"metadataDialogSaving\"\n :loading=\"metadataDialogLoading\"\n @edit-asset=\"onEditAsset\"\n @on-confirm=\"onMetadataDialogConfirm\"\n @on-close=\"onMetadataDialogClose\"\n >\n <template #preview=\"{ imageMedia: appendMedia }\">\n <slot\n name=\"preview\"\n :image-media=\"appendMedia\"\n />\n </template>\n </ImageDetailDialogMetadata>\n </div>\n <AAssetSelectMedia\n v-model=\"assetSelectDialog\"\n :select-licences=\"selectLicences\"\n :upload-licence=\"uploadLicence\"\n :min-count=\"1\"\n :max-count=\"1\"\n return-type=\"asset\"\n :preselect-asset-type=\"preselectType\"\n :preselect-in-podcast=\"preselectType === DamAssetType.Audio || null\"\n @on-confirm=\"onAssetSelectConfirm\"\n />\n <AssetDetailDialog\n v-if=\"assetDialog === queueKey\"\n :queue-key=\"queueKey\"\n :ext-system=\"cachedExtSystemId\"\n />\n <UploadQueueDialogSingle\n v-if=\"uploadQueueDialog === queueKey && imageWidgetUploadConfig\"\n :queue-key=\"queueKey\"\n :ext-system=\"imageWidgetUploadConfig.extSystem\"\n :licence-id=\"imageWidgetUploadConfig.licence\"\n :file-input-key=\"uploadQueue?.fileInputKey ?? -1\"\n :accept=\"uploadAccept\"\n :max-sizes=\"uploadSizes\"\n @on-apply=\"onAssetUploadConfirm\"\n />\n</template>\n","<script lang=\"ts\" setup>\nimport type { IntegerId, IntegerIdNullable } from '@/types/common'\nimport { onMounted, provide, ref, shallowRef } from 'vue'\nimport { useDamConfigState } from '@/components/damImage/uploadQueue/composables/damConfigState'\nimport { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport type { ImageAware } from '@/types/ImageAware'\nimport type { UploadQueueKey } from '@/types/coreDam/UploadQueue'\nimport ImageWidgetInner from '@/components/damImage/uploadQueue/components/ImageWidgetInner.vue'\nimport { ImageWidgetUploadConfig } from '@/components/damImage/composables/imageWidgetInkectionKeys'\nimport { isUndefined } from '@/utils/common'\nimport { isImageWidgetUploadConfigAllowed } from '@/components/damImage/composables/damFilterUserAllowedUploadConfigs'\nimport { type CollabComponentConfig, CollabStatus, type CollabStatusType } from '@/components/collab/types/Collab'\nimport type { DamConfigLicenceExtSystemReturnType } from '@/types/coreDam/DamConfig'\nimport { useDamConfigStore } from '@/components/damImage/uploadQueue/composables/damConfigStore'\nimport ImageMediaWidgetInner from '@/components/damImage/uploadQueue/components/ImageMediaWidgetInner.vue'\nimport type { MediaAware } from '@/types/MediaAware'\n\nconst props = withDefaults(\n defineProps<{\n queueKey: UploadQueueKey\n uploadLicence: IntegerId\n selectLicences: IntegerId[]\n initialImage?: ImageAware | undefined // optional, if available, no need to fetch image data\n configName?: string\n collab?: CollabComponentConfig\n collabStatus?: CollabStatusType\n label?: string | undefined\n readonly?: boolean\n required?: boolean\n dataCy?: string | undefined\n expandOptions?: boolean\n expandMetadata?: boolean\n disableOnClickMenu?: boolean\n width?: number | undefined\n maxWidth?: number | undefined\n height?: number | undefined\n callDeleteApiOnRemove?: boolean\n damWidth?: undefined | number\n damHeight?: undefined | number\n }>(),\n {\n configName: 'default',\n collab: undefined,\n collabStatus: CollabStatus.Inactive,\n label: undefined,\n initialImage: undefined,\n initialMedia: undefined,\n readonly: false,\n required: false,\n lockable: false,\n lockedById: undefined,\n dataCy: undefined,\n expandOptions: false,\n expandMetadata: false,\n disableOnClickMenu: false,\n width: undefined,\n maxWidth: undefined,\n height: undefined,\n callDeleteApiOnRemove: false,\n damWidth: undefined,\n damHeight: undefined,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'afterMetadataSaveSuccess'): void\n}>()\n\nconst mediaModel = defineModel<MediaAware | null>('media', { required: true })\nconst imageModel = defineModel<IntegerIdNullable>('image', { required: true })\nconst status = ref<'loading' | 'ready' | 'error' | 'uploadNotAllowed'>('loading')\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { damClient } = useCommonAdminCoreDamOptions(props.configName)\nconst {\n loadDamPrvConfig,\n loadDamConfigAssetCustomFormElements,\n getDamConfigAssetCustomFormElements,\n getOrLoadDamConfigExtSystemByLicence,\n getOrLoadDamConfigExtSystemByLicences,\n} = useDamConfigState(damClient)\n\nconst uploadConfig = shallowRef<DamConfigLicenceExtSystemReturnType | undefined>(undefined)\n\nonMounted(async () => {\n const damConfigStore = useDamConfigStore()\n uploadConfig.value = await getOrLoadDamConfigExtSystemByLicence(props.uploadLicence)\n if (isUndefined(uploadConfig.value)) {\n status.value = 'error'\n return\n }\n if (!isImageWidgetUploadConfigAllowed(uploadConfig.value)) {\n status.value = 'uploadNotAllowed'\n return\n }\n const promises: Promise<any>[] = []\n if (!damConfigStore.initialized.damPrvConfig) {\n promises.push(loadDamPrvConfig())\n }\n promises.push(getOrLoadDamConfigExtSystemByLicences(props.selectLicences))\n const configAssetCustomFormElements = getDamConfigAssetCustomFormElements(uploadConfig.value.extSystem)\n if (isUndefined(configAssetCustomFormElements)) {\n promises.push(loadDamConfigAssetCustomFormElements(uploadConfig.value.extSystem))\n }\n try {\n await Promise.allSettled(promises)\n } catch (e) {\n status.value = 'error'\n }\n if (status.value !== 'error') status.value = 'ready'\n})\n\nprovide(ImageWidgetUploadConfig, uploadConfig)\n\nconst innerComponent = ref<InstanceType<typeof ImageWidgetInner> | null>(null)\n\nconst metadataConfirm = () => {\n innerComponent.value?.metadataConfirm()\n}\n\ndefineExpose({\n metadataConfirm,\n})\n</script>\n\n<template>\n <ImageMediaWidgetInner\n v-if=\"status === 'ready'\"\n ref=\"innerComponent\"\n v-model:media=\"mediaModel\"\n v-model:image=\"imageModel\"\n v-bind=\"props\"\n @after-metadata-save-success=\"emit('afterMetadataSaveSuccess')\"\n >\n <template #append=\"{ imageMedia: appendImage }\">\n <slot\n name=\"append\"\n :image-media=\"appendImage\"\n />\n </template>\n <template #preview=\"{ imageMedia: appendImage }\">\n <slot\n name=\"preview\"\n :image-media=\"appendImage\"\n />\n </template>\n </ImageMediaWidgetInner>\n <div\n v-else-if=\"status === 'error'\"\n class=\"text-error\"\n >\n Loading DAM config error\n </div>\n <div\n v-else-if=\"status === 'uploadNotAllowed'\"\n class=\"text-error\"\n >\n DAM access rights error\n </div>\n <VProgressCircular\n v-else\n :size=\"12\"\n :width=\"2\"\n indeterminate\n />\n</template>\n","<script setup lang=\"ts\">\nimport ADialogToolbar from '@/components/ADialogToolbar.vue'\nimport { useI18n } from 'vue-i18n'\nimport type { MediaAware } from '@/types/MediaAware'\n\nwithDefaults(\n defineProps<{\n modelValue: boolean\n media: null | MediaAware\n }>(),\n {}\n)\n\nconst emit = defineEmits<{\n (e: 'onClose'): void\n}>()\n\nconst { t } = useI18n()\n\nconst onDialogModelUpdate = (newValue: boolean) => {\n if (newValue) return\n emit('onClose')\n}\n</script>\n\n<template>\n <VDialog\n :model-value=\"modelValue\"\n :max-width=\"500\"\n eager\n @update:model-value=\"onDialogModelUpdate\"\n >\n <VCard v-if=\"modelValue\">\n <ADialogToolbar @on-cancel=\"onDialogModelUpdate(false)\">\n {{ t('common.damImage.media.meta.preview') }}\n </ADialogToolbar>\n <VCardText>\n <slot\n name=\"preview\"\n :media=\"media\"\n />\n </VCardText>\n <VCardActions>\n <VSpacer />\n <ABtnTertiary\n data-cy=\"button-close\"\n @click.stop=\"onDialogModelUpdate(false)\"\n >\n {{ t('common.button.close') }}\n </ABtnTertiary>\n </VCardActions>\n </VCard>\n </VDialog>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, ref, watch } from 'vue'\nimport imagePlaceholderPath from '@/assets/image/placeholder16x9.jpg'\nimport { cloneDeep, isNull, isNumber } from '@/utils/common'\nimport { useCommonAdminImageOptions } from '@/components/damImage/composables/commonAdminImageOptions'\nimport { useImageActions } from '@/components/damImage/composables/imageActions'\nimport { DamMediaType, type MediaAware } from '@/types/MediaAware'\nimport { DamAssetType, type DamAssetTypeType } from '@/types/coreDam/Asset'\nimport MediaWidgetSimpleDialog from '@/components/damImage/uploadQueue/components/MediaWidgetSimpleDialog.vue'\n\nconst props = withDefaults(\n defineProps<{\n media?: MediaAware | null | undefined // optional, render media instead of image\n configName?: string\n label?: string | undefined\n width?: number | undefined\n height?: undefined | number\n disableAspectRatio?: boolean\n aspectRatio?: number | string\n showDescription?: boolean\n showSource?: boolean\n damWidth?: undefined | number\n damHeight?: undefined | number\n useHtmlImg?: boolean\n widgetClass?: string | undefined\n }>(),\n {\n configName: 'default',\n label: undefined,\n media: undefined,\n width: undefined,\n height: undefined,\n disableAspectRatio: false,\n aspectRatio: 1.777, // 16/9\n showDescription: false,\n showSource: false,\n damWidth: undefined,\n damHeight: undefined,\n useHtmlImg: false,\n widgetClass: undefined,\n }\n)\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst imageOptions = useCommonAdminImageOptions(props.configName)\nconst { damImageIdToDamImageUrl } = useImageActions(imageOptions)\n\nconst resMedia = ref<null | MediaAware>(null)\nconst resolvedSrc = ref('')\nconst dialog = ref(false)\n\nconst getImageUrl = (media: MediaAware) => {\n if (isNull(media.damMedia.imageFileId)) return imagePlaceholderPath\n if (isNumber(props.damWidth) && isNumber(props.damHeight)) {\n return damImageIdToDamImageUrl(media.damMedia.imageFileId, props.damWidth, props.damHeight)\n }\n return damImageIdToDamImageUrl(media.damMedia.imageFileId)\n}\n\nconst onDetailClick = () => {\n if (resMedia.value?.damMedia.playable) {\n dialog.value = true\n }\n}\n\nconst onDialogClose = () => {\n dialog.value = false\n}\n\nconst type = computed<DamAssetTypeType | null>(() => {\n return resMedia.value?.damMedia.assetType === DamMediaType.Video ? DamAssetType.Video : DamAssetType.Audio\n})\n\nwatch(\n [() => props.media],\n async ([newMedia]) => {\n resMedia.value = null\n resolvedSrc.value = imagePlaceholderPath\n if (newMedia) {\n resMedia.value = cloneDeep(newMedia)\n resolvedSrc.value = getImageUrl(newMedia)\n }\n },\n { immediate: true }\n)\n</script>\n\n<template>\n <h4\n v-if=\"label\"\n class=\"font-weight-bold text-subtitle-2\"\n >\n {{ label }}\n </h4>\n <div\n class=\"position-relative\"\n :class=\"{ 'cursor-pointer': resMedia?.damMedia.playable }\"\n @click.stop=\"onDetailClick\"\n >\n <img\n v-if=\"useHtmlImg\"\n alt=\"\"\n :src=\"resolvedSrc\"\n :width=\"width\"\n :height=\"height\"\n :class=\"widgetClass\"\n >\n <VImg\n v-else\n :lazy-src=\"imagePlaceholderPath\"\n :src=\"resolvedSrc\"\n :width=\"width\"\n :height=\"height\"\n cover\n max-width=\"100%\"\n class=\"disable-radius\"\n :class=\"widgetClass\"\n :aspect-ratio=\"disableAspectRatio ? undefined : aspectRatio\"\n >\n <template #placeholder>\n <div class=\"d-flex align-center justify-center h-100\">\n <VProgressCircular\n indeterminate\n color=\"grey-lighten-4\"\n />\n </div>\n </template>\n </VImg>\n <div\n v-if=\"type\"\n class=\"a-image-widget__icon\"\n >\n <div v-if=\"type === DamAssetType.Audio\">\n <VIcon\n size=\"80\"\n icon=\"mdi-music\"\n color=\"#505050\"\n />\n </div>\n <div v-else-if=\"type === DamAssetType.Video\">\n <VIcon\n size=\"80\"\n icon=\"mdi-video\"\n color=\"#505050\"\n />\n </div>\n </div>\n </div>\n <slot\n name=\"append\"\n :media=\"resMedia\"\n />\n <MediaWidgetSimpleDialog\n v-model=\"dialog\"\n :media=\"resMedia\"\n @on-close=\"onDialogClose\"\n >\n <template #preview=\"{ media: appendMedia }\">\n <slot\n name=\"preview\"\n :media=\"appendMedia\"\n />\n </template>\n </MediaWidgetSimpleDialog>\n</template>\n","import { defineStore } from 'pinia'\nimport { ref } from 'vue'\nimport type { ImageStoreItem } from '@/types/ImageAware'\n\nexport const useImageStore = defineStore('commonImageStore', () => {\n const images = ref<ImageStoreItem[]>([])\n const maxPosition = ref(0)\n\n function setImages(data: ImageStoreItem[]) {\n images.value = data\n }\n\n function addImages(data: ImageStoreItem[]) {\n images.value.push(...data)\n }\n\n function updateMaxPositionIfGreater(newPosition: number) {\n if (newPosition > maxPosition.value) {\n maxPosition.value = newPosition\n }\n }\n\n function removeImageByIndex(index: number) {\n images.value.splice(index, 1)\n }\n\n function reset() {\n images.value = []\n }\n\n return {\n images,\n maxPosition,\n setImages,\n addImages,\n updateMaxPositionIfGreater,\n removeImageByIndex,\n reset,\n }\n})\n","<script lang=\"ts\" setup>\nimport AImageWidgetSimple from '@/components/damImage/AImageWidgetSimple.vue'\nimport { useImageStore } from '@/components/damImage/uploadQueue/composables/imageStore'\nimport { computed, ref } from 'vue'\nimport AFormTextarea from '@/components/form/AFormTextarea.vue'\nimport type { DocId } from '@/types/common'\nimport { isNull, isUndefined } from '@/utils/common'\nimport AActionDeleteButton from '@/components/buttons/action/AActionDeleteButton.vue'\nimport { HANDLE_CLASS } from '@/components/sortable/sortableActions'\nimport { useI18n } from 'vue-i18n'\nimport {\n AImageMetadataValidationScopeSymbol,\n useImageValidation,\n} from '@/components/damImage/uploadQueue/composables/uploadValidations'\nimport AuthorRemoteAutocompleteWithCached from '@/components/damImage/uploadQueue/author/AuthorRemoteAutocompleteWithCached.vue'\nimport ASystemEntityScope from '@/components/form/ASystemEntityScope.vue'\nimport { useExtSystemIdForCached } from '@/components/damImage/uploadQueue/composables/extSystemIdForCached'\n\nconst props = withDefaults(\n defineProps<{\n index: number\n disableDraggable: boolean\n }>(),\n {}\n)\n\nconst emit = defineEmits<{\n (e: 'editAsset', data: DocId): void\n (e: 'removeItem', index: number): void\n}>()\n\nconst imageStore = useImageStore()\nconst { t } = useI18n()\n\nconst { cachedExtSystemId } = useExtSystemIdForCached()\nconst authorConflicts = ref<DocId[]>([])\nconst image = computed(() => imageStore.images[props.index])\nconst imageSourceRequired = computed(() => {\n if (isNull(image.value) || isUndefined(image.value)) return true\n return image.value.showDamAuthors === false\n})\n\nconst { v$ } = useImageValidation(image, imageSourceRequired)\n\nconst onEditAsset = () => {\n if (isNull(image.value) || isUndefined(image.value)) return\n emit('editAsset', image.value.dam.damId)\n}\n\nconst removeItem = () => {\n emit('removeItem', props.index)\n}\n</script>\n\n<template>\n <div class=\"asset-list-tiles__item\">\n <div class=\"asset-list-tiles__item-card\">\n <div class=\"ma-2\">\n <div class=\"d-flex justify-md-space-between align-center\">\n <VIcon\n :class=\"{\n [HANDLE_CLASS]: true,\n [HANDLE_CLASS + '--disabled']: disableDraggable,\n }\"\n icon=\"mdi-drag\"\n />\n </div>\n <AImageWidgetSimple\n :model-value=\"image.id\"\n :image=\"image\"\n />\n <VRow dense>\n <VCol class=\"d-flex justify-space-between mt-1\">\n <VBtn\n variant=\"text\"\n size=\"small\"\n class=\"mb-2\"\n @click.stop=\"onEditAsset\"\n >\n {{ t('common.damImage.queueItem.edit') }}\n </VBtn>\n <AActionDeleteButton\n variant=\"icon\"\n :size=\"30\"\n button-class=\"\"\n @delete-record=\"removeItem\"\n />\n </VCol>\n </VRow>\n <VRow dense>\n <VCol>\n <AFormTextarea\n v-model=\"image.texts.description\"\n :label=\"t('common.damImage.image.model.texts.description')\"\n :help=\"t('common.damImage.image.help.texts.description')\"\n :v=\"v$.image?.texts.description\"\n />\n </VCol>\n </VRow>\n <VRow\n v-if=\"image.showDamAuthors\"\n dense\n >\n <VCol>\n <ASystemEntityScope\n subject=\"author\"\n system=\"dam\"\n >\n <AuthorRemoteAutocompleteWithCached\n v-model=\"image.damAuthors\"\n :ext-system=\"cachedExtSystemId\"\n :label=\"t('common.damImage.asset.model.authors')\"\n :author-conflicts=\"authorConflicts\"\n data-cy=\"custom-field-authors\"\n clearable\n multiple\n :validation-scope=\"AImageMetadataValidationScopeSymbol\"\n />\n </ASystemEntityScope>\n </VCol>\n </VRow>\n <VRow\n v-else\n dense\n >\n <VCol>\n <AFormTextarea\n v-model=\"image.texts.source\"\n :label=\"t('common.damImage.image.model.texts.source')\"\n :v=\"v$.image?.texts.source\"\n />\n </VCol>\n </VRow>\n <VRow>\n <VCol>\n <VSwitch\n v-model=\"image.flags.showSource\"\n :label=\"t('common.damImage.image.model.flags.showSource')\"\n density=\"compact\"\n hide-details\n />\n </VCol>\n </VRow>\n </div>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\">\n.asset-list-tiles--thumbnail.a-sortable-widget__group {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n\n .asset-list-tiles__item {\n flex: 1 1 260px;\n min-width: 260px;\n max-width: 400px;\n\n img:not(.img-svg) {\n padding: 0;\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed, onUnmounted, ref, type Ref, watch } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { type AssetCustomData, DamAssetStatusDefault } from '@/types/coreDam/Asset'\nimport type { DocId, IntegerId } from '@/types/common'\nimport {\n type UploadQueueItem,\n UploadQueueItemStatus,\n type UploadQueueItemStatusType,\n type UploadQueueKey,\n} from '@/types/coreDam/UploadQueue'\nimport { AssetFileFailReason } from '@/types/coreDam/AssetFile'\nimport ATableCopyIdButton from '@/components/buttons/table/ATableCopyIdButton.vue'\nimport { prettyBytes } from '@/utils/file'\nimport ASystemEntityScope from '@/components/form/ASystemEntityScope.vue'\nimport AssetCustomMetadataForm from '@/components/damImage/uploadQueue/components/AssetCustomMetadataForm.vue'\nimport AssetImage from '@/components/damImage/uploadQueue/components/AssetImage.vue'\nimport AssetFileFailReasonChip from '@/components/damImage/uploadQueue/components/AssetFileFailReasonChip.vue'\nimport AuthorRemoteAutocompleteWithCached from '@/components/damImage/uploadQueue/author/AuthorRemoteAutocompleteWithCached.vue'\nimport { ADamAssetMetadataValidationScopeSymbol } from '@/components/damImage/uploadQueue/composables/uploadValidations'\nimport KeywordRemoteAutocompleteWithCached from '@/components/damImage/uploadQueue/keyword/KeywordRemoteAutocompleteWithCached.vue'\nimport { isNull } from '@/utils/common'\nimport { useDamKeywordAssetTypeConfig } from '@/components/damImage/uploadQueue/keyword/damKeywordConfig'\nimport { useDamAuthorAssetTypeConfig } from '@/components/damImage/uploadQueue/author/damAuthorConfig'\nimport AActionDeleteButton from '@/components/buttons/action/AActionDeleteButton.vue'\n\nconst props = withDefaults(\n defineProps<{\n index: number\n queueKey: string\n extSystem: IntegerId\n customData: AssetCustomData\n keywords: DocId[]\n authors: DocId[]\n item: UploadQueueItem\n refreshDisabled: boolean\n mainFileSingleUse: boolean | null\n disableDoneAnimation?: boolean\n }>(),\n {\n disableDoneAnimation: false,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'update:customData', data: AssetCustomData): void\n (e: 'update:keywords', data: DocId[]): void\n (e: 'update:authors', data: DocId[]): void\n (e: 'update:mainFileSingleUse', data: boolean | null): void\n (e: 'cancelItem', data: { index: number; item: UploadQueueItem; queueKey: UploadQueueKey }): void\n (e: 'removeItem', index: number): void\n (e: 'showDetail', data: DocId): void\n (e: 'refreshItem', data: { index: number; assetId: DocId }): void\n}>()\n\nconst IMAGE_ASPECT_RATIO = 16 / 9\n\nconst customData = computed({\n get() {\n return props.customData\n },\n set(newValue) {\n emit('update:customData', { ...props.customData, ...newValue })\n },\n})\n\nconst keywords = computed({\n get() {\n return props.keywords\n },\n set(newValue) {\n emit('update:keywords', [...newValue])\n },\n})\n\nconst authors = computed({\n get() {\n return props.authors\n },\n set(newValue) {\n emit('update:authors', [...newValue])\n },\n})\n\nconst mainFileSingleUse = computed({\n get() {\n return props.mainFileSingleUse\n },\n set(newValue) {\n emit('update:mainFileSingleUse', newValue)\n },\n})\n\nconst { t } = useI18n()\n\nconst processingStatuses: readonly UploadQueueItemStatusType[] = [\n UploadQueueItemStatus.Processing,\n UploadQueueItemStatus.Loading,\n]\nconst processing = computed(() => {\n return processingStatuses.includes(props.item.status)\n})\nconst waiting = computed(() => {\n return props.item.status === UploadQueueItemStatus.Waiting\n})\nconst done = computed(() => {\n return !props.disableDoneAnimation && props.item.status === UploadQueueItemStatus.Uploaded\n})\nconst uploading = computed(() => {\n return props.item.status === UploadQueueItemStatus.Uploading\n})\nconst uploadProgress = computed(() => {\n return props.item.progress.progressPercent\n})\n\nconst imageSrc = computed(() => {\n return props.item.imagePreview ? props.item.imagePreview.url : undefined\n})\nconst assetType = computed(() => {\n return props.item.assetType\n})\nconst status = computed(() => {\n if (!props.item) return DamAssetStatusDefault\n return props.item.assetStatus\n})\n\nconst cancelItem = () => {\n emit('cancelItem', { index: props.index, item: props.item, queueKey: props.queueKey })\n}\n\nconst showCancelStatuses: readonly UploadQueueItemStatusType[] = [\n UploadQueueItemStatus.Loading,\n UploadQueueItemStatus.Waiting,\n UploadQueueItemStatus.Uploading,\n]\nconst showCancel = computed(() => {\n return showCancelStatuses.includes(props.item.status)\n})\n\nconst SHOW_REFRESH_AFTER_SECONDS = 20\nconst showRefresh = ref(false)\nconst refreshTimer: Ref<ReturnType<typeof setTimeout> | undefined> = ref(undefined)\n\nconst showDetail = async () => {\n if (isNull(props.item.assetId)) return\n emit('showDetail', props.item.assetId)\n}\n\nconst refresh = () => {\n if (props.item.assetId) {\n emit('refreshItem', { index: props.index, assetId: props.item.assetId })\n }\n}\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss,vue/no-ref-object-reactivity-loss\nconst { keywordRequired, keywordEnabled } = useDamKeywordAssetTypeConfig(assetType.value, props.extSystem)\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss,vue/no-ref-object-reactivity-loss\nconst { authorRequired, authorEnabled } = useDamAuthorAssetTypeConfig(assetType.value, props.extSystem)\n\nwatch(\n () => props.item.status,\n async (newValue) => {\n if (newValue === UploadQueueItemStatus.Uploading || newValue === UploadQueueItemStatus.Processing) {\n clearTimeout(refreshTimer.value)\n refreshTimer.value = setTimeout(() => {\n if (newValue === UploadQueueItemStatus.Uploading || newValue === UploadQueueItemStatus.Processing) {\n showRefresh.value = true\n }\n }, SHOW_REFRESH_AFTER_SECONDS * 1000)\n } else if (newValue === UploadQueueItemStatus.Uploaded) {\n clearTimeout(refreshTimer.value)\n refreshTimer.value = undefined\n showRefresh.value = false\n }\n },\n { immediate: true }\n)\n\nonUnmounted(() => {\n clearTimeout(refreshTimer.value)\n refreshTimer.value = undefined\n})\n</script>\n\n<template>\n <VCol\n xxl=\"2\"\n xl=\"3\"\n md=\"4\"\n sm=\"6\"\n cols=\"12\"\n >\n <div class=\"dam-upload-queue__item\">\n <div class=\"dam-upload-queue__item-card\">\n <div class=\"position-relative\">\n <AssetImage\n :asset-type=\"assetType\"\n :asset-status=\"status\"\n :src=\"imageSrc\"\n background-color=\"#ccc\"\n :show-uploading=\"uploading\"\n :show-processing=\"processing\"\n :show-waiting=\"waiting\"\n :show-done=\"done\"\n :uploading-progress=\"uploadProgress\"\n :remaining-time=\"item.progress.remainingTime\"\n use-component\n cover\n :aspect-ratio=\"IMAGE_ASPECT_RATIO\"\n />\n <div\n v-if=\"item.error.hasError\"\n :class=\"\n 'dam-upload-queue__overlay dam-upload-queue__overlay--error ' +\n 'd-flex align-center justify-center flex-column'\n \"\n >\n <VIcon\n icon=\"mdi-alert\"\n class=\"ma-1\"\n size=\"x-small\"\n color=\"error\"\n />\n <div class=\"text-error\">\n {{ t('common.damImage.queueItem.error') }}\n </div>\n <div\n v-if=\"item.error.message.length\"\n class=\"text-caption\"\n v-text=\"item.error.message\"\n />\n <div v-else-if=\"item.error.assetFileFailReason !== AssetFileFailReason.None\">\n <AssetFileFailReasonChip :reason=\"item.error.assetFileFailReason\" />\n </div>\n <div\n v-else\n class=\"text-caption\"\n >\n {{ t('common.damImage.uploadErrors.unknownError') }}\n </div>\n </div>\n </div>\n <VRow\n dense\n class=\"my-2\"\n >\n <VCol>\n <div class=\"w-100 d-flex justify-space-between align-center\">\n <div>\n <VBtn\n size=\"small\"\n variant=\"text\"\n :disabled=\"!item.canEditMetadata\"\n @click.stop=\"showDetail\"\n >\n {{ t('common.damImage.queueItem.edit') }}\n </VBtn>\n </div>\n <div>\n <div v-if=\"item.isDuplicate\" />\n <ATableCopyIdButton\n v-if=\"item.assetId\"\n :id=\"item.assetId\"\n button-t=\"common.damImage.queueItem.copyAssetId\"\n size=\"small\"\n />\n <VBtn\n v-if=\"showRefresh\"\n icon\n size=\"small\"\n variant=\"text\"\n :disabled=\"refreshDisabled\"\n @click.stop=\"refresh\"\n >\n <VIcon icon=\"mdi-refresh\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.button.refresh') }}\n </VTooltip>\n </VBtn>\n <VBtn\n v-if=\"showCancel\"\n icon\n size=\"small\"\n variant=\"text\"\n @click.stop=\"cancelItem\"\n >\n <VIcon icon=\"mdi-close-circle-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.button.cancel') }}\n </VTooltip>\n </VBtn>\n <AActionDeleteButton\n v-if=\"showRefresh\"\n variant=\"icon\"\n button-class=\"\"\n dialog-message-t=\"common.damImage.queueItem.removeFromQueue\"\n @delete-record=\"emit('removeItem', index)\"\n />\n </div>\n </div>\n </VCol>\n </VRow>\n <VRow\n v-if=\"item.displayTitle\"\n dense\n class=\"my-2 mb-3 mt-0 text-caption\"\n >\n <VCol class=\"pt-0\">\n {{ t('common.damImage.queueItem.displayTitle') }}: {{ item.displayTitle }}\n <span v-if=\"item.file?.size\">&nbsp;({{ prettyBytes(item.file.size) }})</span>\n </VCol>\n </VRow>\n <VRow\n v-if=\"item.isDuplicate\"\n class=\"text-caption text-warning\"\n >\n <VCol class=\"pt-0\">\n {{ t('common.damImage.asset.detail.info.status.duplicate') }}\n </VCol>\n </VRow>\n <VForm :disabled=\"!item.canEditMetadata\">\n <AssetCustomMetadataForm\n v-if=\"item\"\n v-model=\"customData\"\n :ext-system=\"extSystem\"\n :asset-type=\"assetType\"\n >\n <template #after-pinned>\n <VRow\n v-if=\"keywordEnabled\"\n dense\n class=\"my-2\"\n >\n <VCol>\n <ASystemEntityScope\n subject=\"keyword\"\n system=\"dam\"\n >\n <KeywordRemoteAutocompleteWithCached\n v-model=\"keywords\"\n :queue-id=\"queueKey\"\n :ext-system=\"extSystem\"\n :label=\"t('common.damImage.asset.model.keywords')\"\n clearable\n multiple\n :required=\"keywordRequired\"\n :validation-scope=\"ADamAssetMetadataValidationScopeSymbol\"\n :disabled=\"!item.canEditMetadata\"\n />\n </ASystemEntityScope>\n </VCol>\n </VRow>\n <VRow\n v-if=\"authorEnabled\"\n dense\n class=\"my-2\"\n >\n <VCol>\n <ASystemEntityScope\n subject=\"author\"\n system=\"dam\"\n >\n <AuthorRemoteAutocompleteWithCached\n v-model=\"authors\"\n :queue-id=\"queueKey\"\n :label=\"t('common.damImage.asset.model.authors')\"\n :author-conflicts=\"item.authorConflicts\"\n :ext-system=\"extSystem\"\n clearable\n multiple\n :required=\"authorRequired\"\n :validation-scope=\"ADamAssetMetadataValidationScopeSymbol\"\n :disabled=\"!item.canEditMetadata\"\n />\n </ASystemEntityScope>\n </VCol>\n </VRow>\n <VRow\n dense\n class=\"my-2\"\n >\n <VCol>\n <VSwitch\n v-model=\"mainFileSingleUse\"\n :label=\"t('common.damImage.asset.model.mainFileSingleUse')\"\n />\n </VCol>\n </VRow>\n </template>\n </AssetCustomMetadataForm>\n </VForm>\n </div>\n </div>\n </VCol>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport type { DamAssetTypeType } from '@/types/coreDam/Asset'\nimport { useDamConfigState } from '@/components/damImage/uploadQueue/composables/damConfigState'\nimport ACustomDataFormElement from '@/components/customDataForm/ACustomDataFormElement.vue'\nimport { isUndefined } from '@/utils/common'\nimport type { IntegerId } from '@/types/common'\n\nconst props = withDefaults(\n defineProps<{\n assetType: DamAssetTypeType\n extSystem: IntegerId\n modelValue: { [key: string]: any }\n }>(),\n {}\n)\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: any): void\n (e: 'fillEmptyField', data: { assetType: DamAssetTypeType; elementProperty: string; value: any }): void\n (e: 'replaceField', data: { assetType: DamAssetTypeType; elementProperty: string; value: any }): void\n}>()\n\nconst { t } = useI18n()\n\nconst updateModelValue = (data: { property: string; value: any }) => {\n const updated = {} as { [key: string]: any }\n updated[data.property] = data.value\n emit('update:modelValue', { ...props.modelValue, ...updated })\n}\n\nconst fillEmptyField = (elementProperty: string, value: any) => {\n emit('fillEmptyField', { assetType: props.assetType, elementProperty, value })\n}\nconst replaceField = (elementProperty: string, value: any) => {\n emit('replaceField', { assetType: props.assetType, elementProperty, value })\n}\n\nconst { getDamConfigAssetCustomFormElements } = useDamConfigState()\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst configAssetCustomFormElements = getDamConfigAssetCustomFormElements(props.extSystem)\nif (isUndefined(configAssetCustomFormElements)) {\n throw new Error('Custom form elements must be initialised.')\n}\n\nconst elements = computed(() => {\n return configAssetCustomFormElements[props.assetType]\n})\n</script>\n\n<template>\n <div class=\"w-100\">\n <VRow\n v-for=\"element in elements\"\n :key=\"element.id\"\n dense\n class=\"mt-1\"\n >\n <VCol>\n <div v-if=\"element.attributes.readonly\" />\n <div\n v-else\n class=\"d-flex\"\n >\n <ACustomDataFormElement\n :config=\"element\"\n :model-value=\"modelValue[element.property]\"\n @update:model-value=\"updateModelValue\"\n />\n <VBtn\n icon\n size=\"small\"\n variant=\"text\"\n class=\"mr-1\"\n @click.stop=\"fillEmptyField(element.property, modelValue[element.property])\"\n >\n <VIcon icon=\"mdi-file-arrow-left-right-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.asset.massOperations.fillOneEmpty') }}\n </VTooltip>\n </VBtn>\n <VBtn\n icon\n size=\"small\"\n variant=\"text\"\n @click.stop=\"replaceField(element.property, modelValue[element.property])\"\n >\n <VIcon icon=\"mdi-file-replace-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.asset.massOperations.replaceOne') }}\n </VTooltip>\n </VBtn>\n </div>\n </VCol>\n </VRow>\n </div>\n</template>\n","import type { UploadQueueKey } from '@/types/coreDam/UploadQueue'\nimport { useUploadQueuesStore } from '@/components/damImage/uploadQueue/composables/uploadQueuesStore'\nimport type { DamAssetTypeType } from '@/types/coreDam/Asset'\nimport { isUndefined } from '@/utils/common'\n\nexport function useUploadQueueMassOperations(queueKey: UploadQueueKey) {\n const uploadQueuesStore = useUploadQueuesStore()\n\n const replaceEmptyCustomDataValue = (\n data: { assetType: DamAssetTypeType; elementProperty: string; value: any },\n forceReplace = false\n ) => {\n const items = uploadQueuesStore.getQueueItems(queueKey)\n for (let i = 0; i < items.length; i++) {\n const item = items[i]\n if (item.assetType !== data.assetType) continue\n if (\n forceReplace ||\n isUndefined(item.customData[data.elementProperty]) ||\n item.customData[data.elementProperty] === ''\n ) {\n item.customData[data.elementProperty] = data.value\n }\n }\n }\n\n const replaceEmptyKeywords = (value: any, forceReplace = false) => {\n const items = uploadQueuesStore.getQueueItems(queueKey)\n for (let i = 0; i < items.length; i++) {\n const item = items[i]\n if (forceReplace || isUndefined(item.keywords) || item.keywords.length === 0) {\n item.keywords = value\n }\n }\n }\n\n const replaceEmptyAuthors = (value: any, forceReplace = false) => {\n const items = uploadQueuesStore.getQueueItems(queueKey)\n for (let i = 0; i < items.length; i++) {\n const item = items[i]\n if (forceReplace || isUndefined(item.authors) || item.authors.length === 0) {\n item.authors = value\n }\n }\n }\n\n return {\n replaceEmptyCustomDataValue,\n replaceEmptyKeywords,\n replaceEmptyAuthors,\n }\n}\n","<script setup lang=\"ts\">\nimport { computed, onMounted, ref } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { useUploadQueuesStore } from '@/components/damImage/uploadQueue/composables/uploadQueuesStore'\nimport { DamAssetType, type DamAssetTypeType } from '@/types/coreDam/Asset'\nimport ASystemEntityScope from '@/components/form/ASystemEntityScope.vue'\nimport AssetCustomMetadataFormMassOperations from '@/components/damImage/uploadQueue/components/AssetCustomMetadataFormMassOperations.vue'\nimport AuthorRemoteAutocompleteWithCached from '@/components/damImage/uploadQueue/author/AuthorRemoteAutocompleteWithCached.vue'\nimport KeywordRemoteAutocompleteWithCached from '@/components/damImage/uploadQueue/keyword/KeywordRemoteAutocompleteWithCached.vue'\nimport { useUploadQueueMassOperations } from '@/components/damImage/uploadQueue/composables/uploadQueueMassOperations'\nimport type { IntegerId } from '@/types/common'\n\nconst props = withDefaults(\n defineProps<{\n queueKey: string\n extSystem: IntegerId\n }>(),\n {}\n)\n\nconst massOperationsData = ref({ image: {}, video: {}, audio: {}, document: {} })\nconst massOperationsKeywords = ref([])\nconst massOperationsAuthors = ref([])\n\nconst { t } = useI18n()\n\nconst panels = ref<Array<string>>(['general'])\n\nconst uploadQueuesStore = useUploadQueuesStore()\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { replaceEmptyCustomDataValue, replaceEmptyAuthors, replaceEmptyKeywords } = useUploadQueueMassOperations(\n props.queueKey\n)\n\nconst fillEmptyField = (data: { assetType: DamAssetTypeType; elementProperty: string; value: any }) => {\n replaceEmptyCustomDataValue(data)\n}\nconst replaceField = (data: { assetType: DamAssetTypeType; elementProperty: string; value: any }) => {\n replaceEmptyCustomDataValue(data, true)\n}\nconst fillEmptyKeywords = () => {\n replaceEmptyKeywords(massOperationsKeywords.value)\n}\nconst replaceKeywords = () => {\n replaceEmptyKeywords(massOperationsKeywords.value, true)\n}\nconst fillEmptyAuthors = () => {\n replaceEmptyAuthors(massOperationsAuthors.value)\n}\nconst replaceAuthors = () => {\n replaceEmptyAuthors(massOperationsAuthors.value, true)\n}\nconst fillAll = (forceReplace = false) => {\n for (const [elementProperty, value] of Object.entries(massOperationsData.value.image)) {\n replaceEmptyCustomDataValue(\n {\n assetType: DamAssetType.Image,\n elementProperty,\n value,\n },\n forceReplace\n )\n }\n for (const [elementProperty, value] of Object.entries(massOperationsData.value.video)) {\n replaceEmptyCustomDataValue(\n {\n assetType: DamAssetType.Video,\n elementProperty,\n value,\n },\n forceReplace\n )\n }\n for (const [elementProperty, value] of Object.entries(massOperationsData.value.audio)) {\n replaceEmptyCustomDataValue(\n {\n assetType: DamAssetType.Audio,\n elementProperty,\n value,\n },\n forceReplace\n )\n }\n for (const [elementProperty, value] of Object.entries(massOperationsData.value.document)) {\n replaceEmptyCustomDataValue(\n {\n assetType: DamAssetType.Document,\n elementProperty,\n value,\n },\n forceReplace\n )\n }\n if (forceReplace) {\n replaceAuthors()\n replaceKeywords()\n return\n }\n fillEmptyAuthors()\n fillEmptyKeywords()\n}\nconst clearForm = () => {\n massOperationsData.value = { image: {}, video: {}, audio: {}, document: {} }\n massOperationsAuthors.value = []\n massOperationsKeywords.value = []\n}\n\nconst assetTypes = computed(() => {\n return uploadQueuesStore.getQueueItemsTypes(props.queueKey)\n})\n\nonMounted(() => {\n if (assetTypes.value[0]) {\n panels.value.push(assetTypes.value[0])\n }\n})\n</script>\n\n<template>\n <div class=\"sidebar-info d-flex w-100 h-100 flex-column\">\n <div class=\"w-100 d-flex flex-column\">\n <VTabs class=\"sidebar-info__tabs\">\n <VTab>{{ t('common.damImage.asset.massOperations.title') }}</VTab>\n </VTabs>\n <div class=\"sidebar-info__content\">\n <div class=\"text-caption pa-3\">\n {{ t('common.damImage.asset.massOperations.description') }}\n </div>\n <VExpansionPanels\n v-model=\"panels\"\n multiple\n class=\"v-expansion-panels--compact\"\n >\n <VExpansionPanel\n elevation=\"0\"\n :title=\"t('common.damImage.asset.massOperations.general')\"\n value=\"general\"\n >\n <VExpansionPanelText>\n <VRow\n dense\n class=\"my-2\"\n >\n <VCol>\n <ASystemEntityScope\n subject=\"keyword\"\n system=\"dam\"\n >\n <div class=\"d-flex\">\n <div style=\"min-width: 286px\">\n <KeywordRemoteAutocompleteWithCached\n v-model=\"massOperationsKeywords\"\n :label=\"t('common.damImage.asset.model.keywords')\"\n clearable\n :ext-system=\"extSystem\"\n multiple\n :validation-scope=\"false\"\n />\n </div>\n <VBtn\n icon\n size=\"small\"\n variant=\"text\"\n class=\"mr-1\"\n @click.stop=\"fillEmptyKeywords\"\n >\n <VIcon icon=\"mdi-file-arrow-left-right-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.asset.massOperations.fillOneEmpty') }}\n </VTooltip>\n </VBtn>\n <VBtn\n icon\n size=\"small\"\n variant=\"text\"\n @click.stop=\"replaceKeywords\"\n >\n <VIcon icon=\"mdi-file-replace-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.asset.massOperations.replaceOne') }}\n </VTooltip>\n </VBtn>\n </div>\n </ASystemEntityScope>\n </VCol>\n </VRow>\n <VRow\n dense\n class=\"my-2\"\n >\n <VCol>\n <ASystemEntityScope\n subject=\"author\"\n system=\"dam\"\n >\n <div class=\"d-flex\">\n <div style=\"min-width: 286px\">\n <AuthorRemoteAutocompleteWithCached\n v-model=\"massOperationsAuthors\"\n :label=\"t('common.damImage.asset.model.authors')\"\n :ext-system=\"extSystem\"\n clearable\n multiple\n :validation-scope=\"false\"\n />\n </div>\n <VBtn\n icon\n size=\"small\"\n variant=\"text\"\n class=\"mr-1\"\n @click.stop=\"fillEmptyAuthors\"\n >\n <VIcon icon=\"mdi-file-arrow-left-right-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.asset.massOperations.fillOneEmpty') }}\n </VTooltip>\n </VBtn>\n <VBtn\n icon\n size=\"small\"\n variant=\"text\"\n @click.stop=\"replaceAuthors\"\n >\n <VIcon icon=\"mdi-file-replace-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.asset.massOperations.replaceOne') }}\n </VTooltip>\n </VBtn>\n </div>\n </ASystemEntityScope>\n </VCol>\n </VRow>\n </VExpansionPanelText>\n </VExpansionPanel>\n <VExpansionPanel\n v-if=\"assetTypes.includes(DamAssetType.Image)\"\n elevation=\"0\"\n :title=\"t('common.damImage.asset.assetType.image')\"\n :value=\"DamAssetType.Image\"\n >\n <VExpansionPanelText>\n <AssetCustomMetadataFormMassOperations\n v-model=\"massOperationsData.image\"\n :asset-type=\"DamAssetType.Image\"\n :ext-system=\"extSystem\"\n @fill-empty-field=\"fillEmptyField\"\n @replace-field=\"replaceField\"\n />\n </VExpansionPanelText>\n </VExpansionPanel>\n </VExpansionPanels>\n </div>\n <div class=\"sidebar-info__actions pa-2 d-flex align-center justify-center\">\n <VBtn\n class=\"mr-2\"\n variant=\"text\"\n size=\"small\"\n @click.stop=\"fillAll(false)\"\n >\n {{ t('common.damImage.asset.massOperations.fillAllEmpty') }}\n </VBtn>\n <VBtn\n class=\"mr-2\"\n variant=\"text\"\n size=\"small\"\n @click.stop=\"fillAll(true)\"\n >\n {{ t('common.damImage.asset.massOperations.replaceAll') }}\n </VBtn>\n <VBtn\n variant=\"text\"\n size=\"small\"\n @click.stop=\"clearForm\"\n >\n {{ t('common.damImage.asset.massOperations.clearForm') }}\n </VBtn>\n </div>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, onMounted, ref, onBeforeUnmount } from 'vue'\nimport { useUploadQueuesStore } from '@/components/damImage/uploadQueue/composables/uploadQueuesStore'\nimport type { UploadQueueItem, UploadQueueKey } from '@/types/coreDam/UploadQueue'\nimport UploadQueueItemEditable from '@/components/damImage/uploadQueue/components/UploadQueueItemEditable.vue'\nimport AssetQueueSelectedSidebar from '@/components/damImage/uploadQueue/components/AssetQueueSelectedSidebar.vue'\nimport { useDamCachedKeywords } from '@/components/damImage/uploadQueue/keyword/cachedKeywords'\nimport { useDamCachedAuthors } from '@/components/damImage/uploadQueue/author/cachedAuthors'\nimport type { DocId, IntegerId } from '@/types/common'\nimport { fetchAsset } from '@/components/damImage/uploadQueue/api/damAssetApi'\nimport { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport { DamAssetStatus, DamAssetType } from '@/types/coreDam/Asset'\nimport { useAlerts } from '@/composables/system/alerts'\nimport { AssetFileProcessStatus } from '@/types/coreDam/AssetFile'\nimport { useEventListener } from '@vueuse/core'\n\nconst props = withDefaults(\n defineProps<{\n queueKey: string\n extSystem: IntegerId\n massOperations: boolean\n disableDoneAnimation?: boolean\n }>(),\n {\n disableDoneAnimation: false,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'showDetail', data: DocId): void\n}>()\n\nconst { damClient } = useCommonAdminCoreDamOptions()\n\nconst refreshDisabled = ref(false)\n\nconst uploadQueuesStore = useUploadQueuesStore()\n\nconst list = computed(() => {\n return uploadQueuesStore.getQueueItems(props.queueKey)\n})\n\nconst cancelItem = (data: { index: number; item: UploadQueueItem; queueKey: UploadQueueKey }) => {\n uploadQueuesStore.stopItemUpload(data.queueKey, data.item, data.index)\n}\n\nconst removeItem = (index: number) => {\n uploadQueuesStore.removeByIndex(props.queueKey, index)\n}\n\nconst { showWarningT } = useAlerts()\n\nconst refreshItem = async (data: { index: number; assetId: DocId }) => {\n refreshDisabled.value = true\n try {\n const asset = await fetchAsset(damClient, data.assetId)\n if (asset.attributes.assetStatus === DamAssetStatus.WithFile) {\n await uploadQueuesStore.queueItemProcessed(asset.id)\n } else if (asset.mainFile?.fileAttributes.status === AssetFileProcessStatus.Duplicate) {\n await uploadQueuesStore.queueItemDuplicate(asset.id, asset.mainFile.originAssetFile, DamAssetType.Image)\n } else if (asset.mainFile?.fileAttributes.status === AssetFileProcessStatus.Failed) {\n await uploadQueuesStore.queueItemFailed(data.assetId, asset.mainFile.fileAttributes.failReason)\n } else {\n showWarningT('common.damImage.queueItem.stillUploadingOrProcessing')\n }\n } catch (e) {\n //\n } finally {\n refreshDisabled.value = false\n }\n}\n\nconst { addToCachedKeywords, fetchCachedKeywords } = useDamCachedKeywords()\nconst { addToCachedAuthors, fetchCachedAuthors } = useDamCachedAuthors()\n\nconst scrollableContainer = ref<HTMLElement | null>(null)\n\nconst handleKeyboardNavigation = (e: KeyboardEvent) => {\n if (!scrollableContainer.value) return\n\n const container = scrollableContainer.value\n const scrollAmount = 100\n const pageScrollAmount = container.clientHeight - 50\n\n switch (e.key) {\n case 'ArrowDown':\n container.scrollTop += scrollAmount\n e.preventDefault()\n break\n case 'ArrowUp':\n container.scrollTop -= scrollAmount\n e.preventDefault()\n break\n case 'PageDown':\n container.scrollTop += pageScrollAmount\n e.preventDefault()\n break\n case 'PageUp':\n container.scrollTop -= pageScrollAmount\n e.preventDefault()\n break\n case 'Home':\n container.scrollTop = 0\n e.preventDefault()\n break\n case 'End':\n container.scrollTop = container.scrollHeight\n e.preventDefault()\n break\n }\n}\n\nlet cleanup: (() => void) | undefined\n\nonMounted(() => {\n list.value.forEach((item) => {\n addToCachedKeywords(item.keywords)\n addToCachedAuthors(item.authors)\n })\n fetchCachedKeywords()\n fetchCachedAuthors()\n\n cleanup = useEventListener(document, 'keydown', handleKeyboardNavigation)\n})\n\nonBeforeUnmount(() => {\n if (cleanup) {\n cleanup()\n }\n})\n</script>\n\n<template>\n <div\n class=\"asset-queue-editable\"\n :class=\"{ 'asset-queue-editable--sidebar-active': massOperations }\"\n >\n <div class=\"asset-queue-editable__left\">\n <div\n ref=\"scrollableContainer\"\n class=\"overflow-y-auto overflow-x-hidden h-100 mr-4\"\n style=\"outline: none;\"\n >\n <VRow class=\"dam-upload-queue dam-upload-queue--editable pa-2 mb-5\">\n <UploadQueueItemEditable\n v-for=\"(item, index) in list\"\n :key=\"item.key\"\n v-model:custom-data=\"item.customData\"\n v-model:keywords=\"item.keywords\"\n v-model:authors=\"item.authors\"\n v-model:main-file-single-use=\"item.mainFileSingleUse\"\n :ext-system=\"extSystem\"\n :item=\"item\"\n :index=\"index\"\n :queue-key=\"queueKey\"\n :disable-done-animation=\"disableDoneAnimation\"\n :refresh-disabled=\"refreshDisabled\"\n @cancel-item=\"cancelItem\"\n @remove-item=\"removeItem\"\n @refresh-item=\"refreshItem\"\n @show-detail=\"emit('showDetail', $event)\"\n />\n </VRow>\n </div>\n </div>\n <div\n v-if=\"list.length > 0\"\n class=\"asset-queue-editable__sidebar system-border-l\"\n >\n <AssetQueueSelectedSidebar\n :queue-key=\"queueKey\"\n :ext-system=\"extSystem\"\n />\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { useUploadQueueDialog } from '@/components/damImage/uploadQueue/composables/uploadQueueDialog'\nimport { useI18n } from 'vue-i18n'\nimport UploadQueueEditable from '@/components/damImage/uploadQueue/components/UploadQueueEditable.vue'\nimport { useUploadQueuesStore } from '@/components/damImage/uploadQueue/composables/uploadQueuesStore'\nimport { computed, ref, toRaw } from 'vue'\nimport { useTheme } from '@/composables/themeSettings'\nimport UploadQueueButtonStop from '@/components/damImage/uploadQueue/components/UploadQueueButtonStop.vue'\nimport useVuelidate from '@vuelidate/core'\nimport { useAlerts } from '@/composables/system/alerts'\nimport {\n type AssetMetadataBulkItem,\n bulkUpdateAssetsMetadata,\n fetchAsset,\n} from '@/components/damImage/uploadQueue/api/damAssetApi'\nimport { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport AFileInput from '@/components/file/AFileInput.vue'\nimport AImageDropzone from '@/components/file/AFileDropzone.vue'\nimport type { ImageStoreItem } from '@/types/ImageAware'\nimport type { DocId, IntegerId } from '@/types/common'\nimport { isNull, isString, isUndefined } from '@/utils/common'\nimport { fetchAuthorListByIds } from '@/components/damImage/uploadQueue/api/authorApi'\nimport { generateUUIDv1 } from '@/utils/generator'\nimport type { UploadQueueItem } from '@/types/coreDam/UploadQueue'\nimport { useImageStore } from '@/components/damImage/uploadQueue/composables/imageStore'\nimport { storeToRefs } from 'pinia'\nimport { useAssetDetailStore } from '@/components/damImage/uploadQueue/composables/assetDetailStore'\n\nconst props = withDefaults(\n defineProps<{\n queueKey: string\n licenceId: IntegerId\n fileInputKey: number\n extSystem: IntegerId\n accept: string | undefined\n maxSizes: Record<string, number> | undefined\n }>(),\n {}\n)\n\nconst emit = defineEmits<{\n (e: 'onDrop', files: File[]): void\n (e: 'onFilesInput', files: File[]): void\n (e: 'onApply', items: ImageStoreItem[]): void\n}>()\n\nconst { uploadQueueDialog, uploadQueueSidebar, toggleUploadQueueSidebar } = useUploadQueueDialog()\n\nconst imageStore = useImageStore()\nconst { maxPosition } = storeToRefs(imageStore)\nconst uploadQueuesStore = useUploadQueuesStore()\nconst queueTotalCount = computed(() => {\n return uploadQueuesStore.getQueueTotalCount(props.queueKey)\n})\n\nconst items = computed(() => {\n return uploadQueuesStore.getQueueItems(props.queueKey)\n})\n\nconst queueProcessedCount = computed(() => {\n return uploadQueuesStore.getQueueProcessedCount(props.queueKey)\n})\n\nconst isUploading = computed(() => {\n return queueTotalCount.value > queueProcessedCount.value\n})\n\nconst isFinished = computed(() => {\n return queueTotalCount.value === queueProcessedCount.value\n})\n\nconst { t } = useI18n()\nconst { toolbarColor } = useTheme()\nconst v$ = useVuelidate({ $stopPropagation: true })\nconst { showRecordWas, showValidationError, showErrorsDefault } = useAlerts()\nconst { damClient } = useCommonAdminCoreDamOptions()\n\nconst saveButtonLoading = ref(false)\nconst saveAndCloseButtonLoading = ref(false)\n\nconst onStopConfirm = async () => {\n uploadQueuesStore.stopUpload(props.queueKey)\n uploadQueueDialog.value = null\n}\n\nconst onSave = async () => {\n const itemsRaw = toRaw(items.value)\n if (itemsRaw.length === 0) return\n saveButtonLoading.value = true\n v$.value.$touch()\n if (v$.value.$invalid) {\n showValidationError()\n saveButtonLoading.value = false\n return\n }\n try {\n await bulkUpdateAssetsMetadata(damClient, itemsRaw)\n showRecordWas('updated')\n } catch (error) {\n console.error(error)\n showErrorsDefault(error)\n } finally {\n saveButtonLoading.value = false\n }\n}\n\nconst metadataMap = async (\n queueItems: UploadQueueItem[],\n bulkItems: AssetMetadataBulkItem[]\n): Promise<ImageStoreItem[]> => {\n const assetMetadataMap = new Map<DocId, { description: string; authorIds: DocId[] }>()\n const authorIdsToFetch = new Set<DocId>()\n const authorsMap = new Map<DocId, string>()\n try {\n bulkItems.forEach((bulkItem) => {\n assetMetadataMap.set(bulkItem.id, {\n description: isString(bulkItem.customData?.description) ? bulkItem.customData.description.trim() : '',\n authorIds: bulkItem.authors,\n })\n })\n assetMetadataMap.forEach((assetMeta) => {\n assetMeta.authorIds.forEach((authorId) => {\n authorIdsToFetch.add(authorId)\n })\n })\n if (authorIdsToFetch.size > 0) {\n const authorsRes = await fetchAuthorListByIds(damClient, props.extSystem, [...authorIdsToFetch])\n authorsRes.forEach((author) => {\n authorsMap.set(author.id, author.name)\n })\n }\n } catch (e) {\n showErrorsDefault(e)\n }\n\n const queueItemsWithAssetId = queueItems.filter(\n (queueItem) => !isNull(queueItem.assetId) && !isNull(queueItem.fileId)\n )\n\n return queueItemsWithAssetId.map((queueItem) => {\n maxPosition.value++\n const description = assetMetadataMap.get(queueItem.assetId!)?.description\n const authorIds = assetMetadataMap.get(queueItem.assetId!)?.authorIds\n const authorNames: string[] = []\n if (authorIds) {\n authorIds.forEach((authorId) => {\n const name = authorsMap.get(authorId)\n if (!isUndefined(name) && name.trim().length > 0) {\n authorNames.push(name)\n }\n })\n }\n\n return {\n key: generateUUIDv1(),\n texts: {\n description: description ?? '',\n source: authorNames.join(', '),\n },\n flags: {\n showSource: true,\n },\n dam: {\n damId: queueItem.fileId as DocId,\n regionPosition: 0,\n licenceId: props.licenceId,\n },\n position: maxPosition.value,\n damAuthors: authorIds || [],\n showDamAuthors: !!(authorIds && authorIds.length === 0),\n assetId: queueItem.assetId || undefined,\n }\n })\n}\n\nconst onSaveAndApply = async () => {\n const itemsRaw = toRaw(items.value)\n if (itemsRaw.length === 0) return\n saveAndCloseButtonLoading.value = true\n v$.value.$touch()\n if (v$.value.$invalid) {\n showValidationError()\n saveAndCloseButtonLoading.value = false\n return\n }\n try {\n const res = await bulkUpdateAssetsMetadata(damClient, itemsRaw)\n const mapped = await metadataMap(itemsRaw, res)\n emit('onApply', mapped)\n } catch (error) {\n showErrorsDefault(error)\n } finally {\n saveAndCloseButtonLoading.value = false\n }\n}\n\nconst assetDetailStore = useAssetDetailStore()\nconst { loading, dialog, updateUploadStore } = storeToRefs(assetDetailStore)\n\nconst showDetail = async (id: DocId) => {\n try {\n assetDetailStore.setAsset(null)\n loading.value = true\n dialog.value = props.queueKey\n updateUploadStore.value = true\n assetDetailStore.setAsset(await fetchAsset(damClient, id))\n } catch (e) {\n showErrorsDefault(e)\n } finally {\n loading.value = false\n }\n}\n</script>\n\n<template>\n <VDialog\n :model-value=\"true\"\n fullscreen\n scrollable\n class=\"overlay--sidebar\"\n >\n <VCard>\n <div class=\"asset-footer__upload asset-footer--full asset-footer__upload--full pa-0\">\n <div class=\"d-flex w-100 h-100 flex-column\">\n <VToolbar\n class=\"w-100 system-border-b pr-1\"\n :color=\"toolbarColor\"\n density=\"compact\"\n :height=\"64\"\n >\n <div class=\"d-flex align-center px-2\">\n <div>\n <div\n v-if=\"isUploading\"\n class=\"text-subtitle-2 d-flex align-center\"\n >\n {{ t('common.damImage.upload.title') }}\n </div>\n <div\n v-else\n class=\"text-subtitle-2 d-flex align-center text-green-darken-3 font-weight-bold\"\n >\n {{ t('common.damImage.upload.titleDone') }}\n </div>\n </div>\n </div>\n <VSpacer />\n <div\n v-if=\"isUploading\"\n class=\"text-caption d-flex align-center\"\n >\n <VProgressCircular\n indeterminate\n color=\"primary\"\n size=\"16\"\n width=\"2\"\n class=\"mr-1\"\n />\n <div>{{ t('common.damImage.upload.uploading') }} {{ queueProcessedCount + 1 }}/{{ queueTotalCount }}</div>\n </div>\n <div class=\"d-flex align-center pr-3\">\n <VDivider\n v-show=\"isUploading\"\n vertical\n class=\"mx-4 my-2\"\n />\n <ABtnPrimary\n v-if=\"isFinished\"\n :height=\"36\"\n class=\"mr-2\"\n rounded=\"pill\"\n :loading=\"saveAndCloseButtonLoading\"\n :disabled=\"saveButtonLoading\"\n @click.stop=\"onSaveAndApply\"\n >\n {{ t('common.damImage.upload.saveAndApply') }}\n </ABtnPrimary>\n <VBtn\n variant=\"text\"\n :height=\"36\"\n :width=\"36\"\n class=\"mr-2\"\n icon\n :loading=\"saveButtonLoading\"\n :disabled=\"saveAndCloseButtonLoading\"\n @click.stop=\"onSave\"\n >\n <VIcon icon=\"mdi-content-save\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.upload.save') }}\n </VTooltip>\n </VBtn>\n <AFileInput\n :file-input-key=\"fileInputKey\"\n :accept=\"accept\"\n :max-sizes=\"maxSizes\"\n multiple\n @files-input=\"emit('onFilesInput', $event)\"\n >\n <template #activator=\"{ props: fileInputProps }\">\n <VBtn\n tabindex=\"-1\"\n icon\n variant=\"text\"\n :height=\"34\"\n :width=\"34\"\n v-bind=\"fileInputProps\"\n >\n <VIcon icon=\"mdi-plus\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.upload.add') }}\n </VTooltip>\n </VBtn>\n </template>\n </AFileInput>\n <VDivider\n vertical\n class=\"mx-4 my-2\"\n />\n <VBtn\n :height=\"36\"\n :width=\"36\"\n :active=\"uploadQueueSidebar\"\n :variant=\"uploadQueueSidebar ? 'flat' : 'text'\"\n :color=\"uploadQueueSidebar ? 'secondary' : ''\"\n class=\"mr-2\"\n icon\n @click.stop=\"toggleUploadQueueSidebar\"\n >\n <VIcon icon=\"mdi-tag-text-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.asset.massOperations.title') }}\n </VTooltip>\n </VBtn>\n <UploadQueueButtonStop\n data-cy=\"button-close\"\n :button-size=\"36\"\n :is-uploading=\"isUploading\"\n @confirm=\"onStopConfirm\"\n />\n </div>\n </VToolbar>\n <UploadQueueEditable\n :queue-key=\"queueKey\"\n :ext-system=\"extSystem\"\n :mass-operations=\"uploadQueueSidebar\"\n @show-detail=\"showDetail\"\n />\n </div>\n <AImageDropzone\n variant=\"fill\"\n transparent\n hover-only\n :accept=\"accept\"\n :max-sizes=\"maxSizes\"\n @on-drop=\"emit('onDrop', $event)\"\n />\n </div>\n </VCard>\n </VDialog>\n</template>\n","<script lang=\"ts\" setup>\nimport ADialogToolbar from '@/components/ADialogToolbar.vue'\nimport { useI18n } from 'vue-i18n'\nimport { computed, inject, ref, type ShallowRef } from 'vue'\nimport { useUploadQueuesStore } from '@/components/damImage/uploadQueue/composables/uploadQueuesStore'\nimport type { UploadQueueKey } from '@/types/coreDam/UploadQueue'\nimport type { DamConfigLicenceExtSystemReturnType } from '@/types/coreDam/DamConfig'\nimport { isUndefined } from '@/utils/common'\nimport { ImageWidgetUploadConfig } from '@/components/damImage/composables/imageWidgetInkectionKeys'\n\nconst props = withDefaults(\n defineProps<{\n queueKey: UploadQueueKey\n }>(),\n {}\n)\n\nconst emit = defineEmits<{\n (e: 'afterAdd'): void\n}>()\n\nconst MAX_UPLOAD_ITEMS = 50\nconst dialog = ref(false)\nconst uploadDialogLoader = ref(false)\nconst fileCache = ref<File[]>([])\n\nconst { t } = useI18n()\n\nconst imageWidgetUploadConfig = inject<ShallowRef<DamConfigLicenceExtSystemReturnType | undefined> | undefined>(\n ImageWidgetUploadConfig,\n undefined\n)\n\nif (isUndefined(imageWidgetUploadConfig) || isUndefined(imageWidgetUploadConfig.value)) {\n throw new Error(\"Fatal error, parent component doesn't provide necessary config ext system config.\")\n}\n\nconst uploadQueuesStore = useUploadQueuesStore()\n\nconst uploadQueueTotalCount = computed(() => {\n return uploadQueuesStore.getQueueTotalCount(props.queueKey)\n})\n\nconst alreadyAtUploadLimit = computed(() => {\n return uploadQueueTotalCount.value === MAX_UPLOAD_ITEMS\n})\n\nconst openDialog = () => {\n dialog.value = true\n}\n\nconst onDialogConfirm = async () => {\n if (isUndefined(imageWidgetUploadConfig) || isUndefined(imageWidgetUploadConfig.value)) {\n return\n }\n uploadDialogLoader.value = true\n const files = fileCache.value.slice(0, MAX_UPLOAD_ITEMS - uploadQueueTotalCount.value)\n await uploadQueuesStore.addByFiles(\n props.queueKey,\n imageWidgetUploadConfig.value.extSystem,\n imageWidgetUploadConfig.value.licence,\n files\n )\n fileCache.value = []\n uploadDialogLoader.value = false\n dialog.value = false\n emit('afterAdd')\n}\n\nconst onDialogCancel = () => {\n fileCache.value = []\n uploadQueuesStore.forceReloadFileInput(props.queueKey)\n dialog.value = false\n}\n\nconst checkForLimit = (files: File[]) => {\n fileCache.value = files\n if (files.length + uploadQueueTotalCount.value > MAX_UPLOAD_ITEMS) {\n openDialog()\n return\n }\n onDialogConfirm()\n}\n\ndefineExpose({\n check: checkForLimit,\n})\n</script>\n\n<template>\n <VDialog\n v-model=\"dialog\"\n :width=\"500\"\n >\n <VCard\n v-if=\"dialog\"\n data-cy=\"delete-panel\"\n >\n <ADialogToolbar @on-cancel=\"onDialogCancel\">\n {{ t('common.damImage.upload.limits.uploadWarning') }}\n </ADialogToolbar>\n <VCardText>\n <p v-if=\"alreadyAtUploadLimit\">\n {{ t('common.damImage.upload.limits.onUploadLimit', { limit: MAX_UPLOAD_ITEMS }) }}\n </p>\n <p v-else>\n {{ t('common.damImage.upload.limits.addingOverLimit', { count: fileCache.length }) }}\n <span v-if=\"uploadQueueTotalCount > 0\">{{\n t('common.damImage.upload.limits.countAlreadyInProgress', { count: uploadQueueTotalCount })\n }}</span>\n {{ t('common.damImage.upload.limits.onlyAllowedAtOnce', { count: MAX_UPLOAD_ITEMS }) }}<br><br>\n {{\n t('common.damImage.upload.limits.cancelOrUploadFirst', { count: MAX_UPLOAD_ITEMS - uploadQueueTotalCount })\n }}\n </p>\n </VCardText>\n <VCardActions>\n <VSpacer />\n <ABtnTertiary @click.stop=\"onDialogCancel\">\n {{ t('common.button.cancel') }}\n </ABtnTertiary>\n <ABtnPrimary\n v-if=\"!alreadyAtUploadLimit\"\n :loading=\"uploadDialogLoader\"\n @click.stop=\"onDialogConfirm\"\n >\n {{\n t('common.damImage.upload.limits.actionAddFirstItems', { count: MAX_UPLOAD_ITEMS - uploadQueueTotalCount })\n }}\n </ABtnPrimary>\n </VCardActions>\n </VCard>\n </VDialog>\n</template>\n","import { AnzuApiResponseCodeError } from '@/model/error/AnzuApiResponseCodeError'\nimport { AnzuApiValidationError, axiosErrorResponseHasValidationData } from '@/model/error/AnzuApiValidationError'\nimport { replaceUrlParameters, type UrlParams } from '@/services/api/apiHelper'\nimport { isNull } from '@/utils/common'\nimport { isValidHTTPStatus } from '@/utils/response'\nimport type { AxiosInstance, AxiosRequestConfig, Method } from 'axios'\nimport { AnzuFatalError } from '@/model/error/AnzuFatalError'\nimport { AnzuApiForbiddenError, axiosErrorResponseIsForbidden } from '@/model/error/AnzuApiForbiddenError'\nimport {\n AnzuApiForbiddenOperationError,\n axiosErrorResponseHasForbiddenOperationData,\n} from '@/model/error/AnzuApiForbiddenOperationError'\nimport { HTTP_STATUS_NO_CONTENT } from '@/composables/statusCodes'\nimport {\n AnzuApiDependencyExistsError,\n axiosErrorResponseHasDependencyExistsData,\n} from '@/model/error/AnzuApiDependencyExistsError'\n\n/**\n * @template T Type used for request payload, by default same as Response type\n * @template R Response type override, optional\n */\nexport const apiAnyRequest = <T, R = T>(\n client: () => AxiosInstance,\n method: Method,\n urlTemplate = '',\n urlParams: UrlParams = {},\n object: T | null = null,\n system: string,\n entity: string,\n options: AxiosRequestConfig = {}\n): Promise<R> => {\n return new Promise((resolve, reject) => {\n const axiosConfig: AxiosRequestConfig = { method: method }\n if (urlTemplate !== '') {\n axiosConfig.url = replaceUrlParameters(urlTemplate, urlParams)\n }\n if (!isNull(object)) {\n axiosConfig.data = JSON.stringify(object)\n }\n client()\n .request({ ...options, ...axiosConfig })\n .then((res) => {\n if (!isValidHTTPStatus(res.status)) {\n return reject(new AnzuApiResponseCodeError(res.status))\n }\n if (res.data) {\n return resolve(res.data)\n }\n if (res.status === HTTP_STATUS_NO_CONTENT) {\n return resolve(null as R)\n }\n return reject(new AnzuFatalError())\n })\n .catch((err) => {\n if (axiosErrorResponseIsForbidden(err)) {\n return reject(new AnzuApiForbiddenError(err, err.config?.url))\n }\n if (axiosErrorResponseHasValidationData(err)) {\n return reject(new AnzuApiValidationError(err, system, entity, err))\n }\n if (axiosErrorResponseHasDependencyExistsData(err)) {\n return reject(new AnzuApiDependencyExistsError(err, system, entity, err))\n }\n if (axiosErrorResponseHasForbiddenOperationData(err)) {\n return reject(new AnzuApiForbiddenOperationError(err, err))\n }\n // todo catch another axios errors, for example timeout\n return reject(new AnzuFatalError(err))\n })\n })\n}\n","import type { AxiosInstance } from 'axios'\nimport type { AssetSearchListItemDto } from '@/types/coreDam/Asset'\nimport type { IdsGroupedByLicences } from '@/components/damImage/uploadQueue/api/damAssetApi'\nimport { ENTITY, fetchAssetListByIds, SYSTEM_CORE_DAM } from '@/components/damImage/uploadQueue/api/damAssetApi'\nimport { apiAnyRequest } from '@/services/api/apiAnyRequest'\n\nconst MAX_LIMIT = 20\n\nexport const fetchAssetListByFileIdsMultipleLicences = async (\n client: () => AxiosInstance,\n groupedIds: IdsGroupedByLicences\n) => {\n const batchedRequests = Array.from(groupedIds.entries()).flatMap(([licenceId, docIds]) => {\n return chunkArray(docIds, MAX_LIMIT).map((chunk) =>\n fetchAssetListByFileIdsMultipleLicencesWithLimit(client, new Map([[licenceId, chunk]]))\n )\n })\n\n const assetsResponses = await Promise.all(batchedRequests)\n return assetsResponses.flat()\n}\n\nexport const fetchAssetAndCheckForSingleUseByFileIds = async (\n client: () => AxiosInstance,\n groupedIds: IdsGroupedByLicences\n) => {\n const batchedRequests = Array.from(groupedIds.entries()).flatMap(([licenceId, docIds]) => {\n return chunkArray(docIds, MAX_LIMIT).map((chunk) =>\n fetchAssetListByFileIdsMultipleLicencesWithLimit(client, new Map([[licenceId, chunk]]), 1, true)\n )\n })\n\n const assetsResponses = await Promise.all(batchedRequests)\n return assetsResponses.some((batch) => batch.length > 0)\n}\n\nconst fetchAssetListByFileIdsMultipleLicencesWithLimit = async (\n client: () => AxiosInstance,\n groupedIds: IdsGroupedByLicences,\n forceLimit?: number,\n filterSingleUse?: boolean\n) => {\n const searchResults = await Promise.all(\n Array.from(groupedIds.entries()).map(([licenceId, docIds]) => {\n const singleUseParam = filterSingleUse ? '&mainFileSingleUse=1' : ''\n return apiAnyRequest<object, { data: AssetSearchListItemDto[] }>(\n client,\n 'GET',\n '/adm/v1/asset/licence/:licenceId/search?assetAndMainFileIds=' +\n `${docIds.join(',')}&limit=${forceLimit !== undefined ? forceLimit : docIds.length}${singleUseParam}`,\n { licenceId },\n {},\n SYSTEM_CORE_DAM,\n ENTITY\n )\n })\n )\n\n const groupedSearchResults: IdsGroupedByLicences = new Map()\n searchResults.forEach((res) => {\n res.data.forEach((item) => {\n if (!groupedSearchResults.has(item.licence)) {\n groupedSearchResults.set(item.licence, [])\n }\n groupedSearchResults.get(item.licence)!.push(item.id)\n })\n })\n\n const finalResults = await Promise.all(\n Array.from(groupedSearchResults.entries()).map(([licenceId, docIds]) =>\n fetchAssetListByIds(client, docIds, licenceId)\n )\n )\n\n return finalResults.flat()\n}\n\nconst chunkArray = <T>(arr: T[], size: number): T[][] => {\n return Array.from({ length: Math.ceil(arr.length / size) }, (_, index) =>\n arr.slice(index * size, index * size + size)\n )\n}\n","<script lang=\"ts\" setup>\nimport type { DocId, IntegerId } from '@/types/common'\nimport { computed, inject, nextTick, onMounted, ref, type ShallowRef, toRaw } from 'vue'\nimport { isNull, isString, isUndefined } from '@/utils/common'\nimport type { UploadQueueKey } from '@/types/coreDam/UploadQueue'\nimport type { DamConfigLicenceExtSystemReturnType } from '@/types/coreDam/DamConfig'\nimport { useImageStore } from '@/components/damImage/uploadQueue/composables/imageStore'\nimport ImageWidgetMultipleItem from '@/components/damImage/uploadQueue/components/ImageWidgetMultipleItem.vue'\nimport { storeToRefs } from 'pinia'\nimport { bulkUpdateImages, deleteImage, fetchImageListByIds } from '@/components/damImage/uploadQueue/api/imageApi'\nimport { useCommonAdminImageOptions } from '@/components/damImage/composables/commonAdminImageOptions'\nimport { useAlerts } from '@/composables/system/alerts'\nimport { type AssetSearchListItemDto, DamAssetType, type DamImageCopyToLicenceResponse } from '@/types/coreDam/Asset'\nimport AAssetSelect from '@/components/dam/assetSelect/AAssetSelect.vue'\nimport AFileInput from '@/components/file/AFileInput.vue'\nimport AImageDropzone from '@/components/file/AFileDropzone.vue'\nimport { useDamAcceptTypeAndSizeHelper } from '@/components/damImage/uploadQueue/composables/acceptTypeAndSizeHelper'\nimport { useUploadQueuesStore } from '@/components/damImage/uploadQueue/composables/uploadQueuesStore'\nimport type { AssetSelectReturnData } from '@/types/coreDam/AssetSelect'\nimport UploadQueueDialog from '@/components/damImage/uploadQueue/components/UploadQueueDialog.vue'\nimport { useUploadQueueDialog } from '@/components/damImage/uploadQueue/composables/uploadQueueDialog'\nimport AssetDetailDialog from '@/components/damImage/uploadQueue/components/AssetDetailDialog.vue'\nimport {\n type AssetAuthorsItems,\n bulkUpdateAssetsAuthors,\n fetchAssetByFileId,\n fetchAssetListByIds,\n type IdsGroupedByLicences,\n} from '@/components/damImage/uploadQueue/api/damAssetApi'\nimport { useAssetDetailStore } from '@/components/damImage/uploadQueue/composables/assetDetailStore'\nimport { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport type { ImageStoreItem } from '@/types/ImageAware'\nimport { generateUUIDv1 } from '@/utils/generator'\nimport { CHOSEN_CLASS, DRAG_CLASS, GHOST_CLASS, GROUP_CLASS, HANDLE_CLASS } from '@/components/sortable/sortableActions'\nimport { useSortable, type UseSortableReturn } from '@vueuse/integrations/useSortable'\nimport type { SortableEvent } from 'sortablejs'\nimport { WIDGET_HTML_ID_PREFIX } from '@/components/sortable/sortableUtils'\nimport { fetchAuthorListByIds } from '@/components/damImage/uploadQueue/api/authorApi'\nimport { useI18n } from 'vue-i18n'\nimport useVuelidate from '@vuelidate/core'\nimport { AImageMetadataValidationScopeSymbol } from '@/components/damImage/uploadQueue/composables/uploadValidations'\nimport { useExtSystemIdForCached } from '@/components/damImage/uploadQueue/composables/extSystemIdForCached'\nimport { fetchDamAssetLicence } from '@/components/damImage/uploadQueue/api/damAssetLicenceApi'\nimport { useAssetSelectStore } from '@/services/stores/coreDam/assetSelectStore'\nimport ImageWidgetMultipleLimitDialog from '@/components/damImage/uploadQueue/components/ImageWidgetMultipleLimitDialog.vue'\nimport { ImageWidgetUploadConfig } from '@/components/damImage/composables/imageWidgetInkectionKeys'\nimport { fetchAssetListByFileIdsMultipleLicences } from '@/components/damImage/uploadQueue/api/damfetchAssetListByFileIdsMultipleLicences'\nimport { copyToLicence } from '@/components/damImage/uploadQueue/api/damImageApi'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: IntegerId[]\n queueKey: UploadQueueKey\n uploadLicence: IntegerId\n selectLicences: IntegerId[]\n configName?: string\n label?: string | undefined\n readonly?: boolean\n dataCy?: string | undefined\n width?: number | undefined\n disableDraggable?: boolean\n widgetIdentifierId?: string | undefined\n callDeleteApiOnRemove?: boolean\n }>(),\n {\n configName: 'default',\n label: undefined,\n image: undefined,\n readonly: false,\n lockable: false,\n lockedById: undefined,\n dataCy: undefined,\n width: undefined,\n disableDraggable: false,\n widgetIdentifierId: undefined,\n callDeleteApiOnRemove: false,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: IntegerId[]): void\n}>()\n\nconst assetSelectDialog = ref(false)\n\nconst imageWidgetUploadConfig = inject<ShallowRef<DamConfigLicenceExtSystemReturnType | undefined> | undefined>(\n ImageWidgetUploadConfig,\n undefined\n)\n\nif (isUndefined(imageWidgetUploadConfig) || isUndefined(imageWidgetUploadConfig.value)) {\n throw new Error(\"Fatal error, parent component doesn't provide necessary config ext system config.\")\n}\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst imageOptions = useCommonAdminImageOptions(props.configName)\nconst { imageClient } = imageOptions\nconst { showErrorsDefault, showValidationError, showErrorT } = useAlerts()\nconst uploadButtonComponent = ref<InstanceType<any> | null>(null)\n\nconst { uploadSizes, uploadAccept } = useDamAcceptTypeAndSizeHelper(\n DamAssetType.Image,\n imageWidgetUploadConfig.value.extSystemConfig\n)\n\nconst { t } = useI18n()\n\nconst imagesLoading = ref(false)\n\nconst imageStore = useImageStore()\nconst { images, maxPosition } = storeToRefs(imageStore)\n\nconst fetchImagesOnLoad = async () => {\n try {\n imagesLoading.value = true\n const imagesRes = (await fetchImageListByIds(imageClient, props.modelValue)).sort(\n (a, b) => (a.position ?? 0) - (b.position ?? 0)\n )\n const groupedIds: IdsGroupedByLicences = new Map()\n imagesRes.forEach((image) => {\n const group = groupedIds.get(image.dam.licenceId)\n if (group) {\n group.push(image.dam.damId)\n } else {\n groupedIds.set(image.dam.licenceId, [image.dam.damId])\n }\n })\n\n const assetsRes = await fetchAssetListByFileIdsMultipleLicences(damClient, groupedIds)\n\n imageStore.setImages(\n imagesRes.map((imageRes) => {\n if (isUndefined(imageRes.position)) throw new Error('Image object needs position field!')\n imageStore.updateMaxPositionIfGreater(imageRes.position)\n const found = assetsRes.find((asset) => asset.mainFile?.id === imageRes.dam.damId)\n return {\n key: generateUUIDv1(),\n ...imageRes,\n ...{\n damAuthors: found ? found.authors : [],\n showDamAuthors: found ? found.authors.length === 0 : false,\n assetId: found ? found.id : undefined,\n },\n }\n })\n )\n emit('update:modelValue', images.value.map((image) => image.id).filter((id) => id !== undefined) as IntegerId[])\n } catch (e) {\n showErrorsDefault(e)\n } finally {\n imagesLoading.value = false\n }\n}\n\nconst uploadQueuesStore = useUploadQueuesStore()\n\nconst uploadQueue = computed(() => {\n return uploadQueuesStore.getQueue(props.queueKey)\n})\n\nconst { cachedExtSystemId } = useExtSystemIdForCached()\n\nconst { uploadQueueDialog } = useUploadQueueDialog()\n\nconst onFileInput = (files: File[]) => {\n const config = imageWidgetUploadConfig.value\n if (isUndefined(config)) return\n cachedExtSystemId.value = config.extSystem\n limitDialogComponent.value?.check(files)\n uploadQueueDialog.value = props.queueKey\n}\n\nconst onDrop = (files: File[]) => {\n const config = imageWidgetUploadConfig.value\n if (isUndefined(config)) return\n cachedExtSystemId.value = config.extSystem\n limitDialogComponent.value?.check(files)\n uploadQueueDialog.value = props.queueKey\n}\n\nconst onCopyToLicence = (data: DamImageCopyToLicenceResponse) => {\n if (data.length === 0) return\n const config = imageWidgetUploadConfig.value\n if (isUndefined(config)) return\n cachedExtSystemId.value = config.extSystem\n data.forEach((item) => {\n if (item.result === 'copy') {\n uploadQueuesStore.addByCopyToLicence(props.queueKey, config.extSystem, config.licence, [item.targetAsset])\n } else if (item.result === 'exists') {\n uploadQueuesStore.addByCopyToLicence(props.queueKey, config.extSystem, config.licence, [item.targetAsset])\n uploadQueuesStore.queueItemDuplicate(item.targetAsset, item.targetMainFile, DamAssetType.Image)\n } else {\n showErrorT('damImage.queueItem.errorUnableToCopyToLicence')\n return\n }\n })\n uploadQueueDialog.value = props.queueKey\n}\n\nconst afterLimitDialogAdd = () => {\n uploadQueueDialog.value = props.queueKey\n}\n\nconst assetSelectConfirmMap = async (items: AssetSearchListItemDto[]): Promise<ImageStoreItem[]> => {\n const assetSelectStore = useAssetSelectStore()\n const ids = items.map((item) => item.id)\n const assetMetadataMap = new Map<DocId, { description: string; authorIds: DocId[] }>()\n const authorIdsToFetch = new Set<DocId>()\n const authorsMap = new Map<DocId, string>()\n try {\n const assetDetails = await fetchAssetListByIds(damClient, ids, assetSelectStore.selectedLicenceId)\n assetDetails.forEach((assetDetail) => {\n assetMetadataMap.set(assetDetail.id, {\n description: isString(assetDetail.metadata.customData?.description)\n ? assetDetail.metadata.customData.description.trim()\n : '',\n authorIds: assetDetail.authors,\n })\n })\n assetMetadataMap.forEach((assetMeta) => {\n assetMeta.authorIds.forEach((authorId) => {\n authorIdsToFetch.add(authorId)\n })\n })\n if (authorIdsToFetch.size > 0) {\n const authorsRes = await fetchAuthorListByIds(damClient, assetSelectStore.selectedSelectConfig.extSystem, [\n ...authorIdsToFetch,\n ])\n authorsRes.forEach((author) => {\n authorsMap.set(author.id, author.name)\n })\n }\n } catch (e) {\n showErrorsDefault(e)\n }\n\n return items.map((asset) => {\n maxPosition.value++\n const authorIds = assetMetadataMap.get(asset.id)?.authorIds || []\n const description = assetMetadataMap.get(asset.id)?.description ?? ''\n const authorNames: string[] = []\n assetMetadataMap.get(asset.id)?.authorIds.forEach((authorId) => {\n const name = authorsMap.get(authorId)\n if (!isUndefined(name) && name.trim().length > 0) {\n authorNames.push(name)\n }\n })\n\n return {\n key: generateUUIDv1(),\n texts: {\n description: description,\n source: authorNames.join(', '),\n },\n flags: {\n showSource: true,\n },\n dam: {\n damId: asset.mainFile!.id,\n regionPosition: 0,\n licenceId: asset.licence,\n },\n position: maxPosition.value,\n damAuthors: authorIds,\n showDamAuthors: authorIds.length === 0,\n assetId: asset.id,\n }\n })\n}\n\nconst onAssetSelectConfirm = async (data: AssetSelectReturnData) => {\n if (data.type !== 'asset' || data.value.length === 0) return\n if (!isUndefined(data.copyToLicence)) {\n try {\n const copyRes = await copyToLicence(damClient, data.value\n .filter((asset) => !isNull(asset.mainFile))\n .map((asset) => ({ asset: asset.id, targetAssetLicence: data.copyToLicence! })))\n onCopyToLicence(copyRes)\n } catch (e) {\n showErrorsDefault(e)\n }\n return\n }\n const items = await assetSelectConfirmMap(data.value.filter((asset) => !isNull(asset.mainFile)))\n imageStore.addImages(items)\n}\n\nconst assetDetailStore = useAssetDetailStore()\nconst { loading: assetLoading, dialog: assetDialog } = storeToRefs(assetDetailStore)\nconst { damClient } = useCommonAdminCoreDamOptions()\n\nconst onEditAsset = async (assetFileId: DocId) => {\n assetLoading.value = true\n assetDialog.value = props.queueKey\n try {\n const asset = await fetchAssetByFileId(damClient, assetFileId)\n const licence = await fetchDamAssetLicence(damClient, asset.licence)\n if (licence.extSystem) {\n cachedExtSystemId.value = licence.extSystem\n }\n assetDetailStore.setAsset(asset)\n } catch (e) {\n showErrorsDefault(e)\n } finally {\n assetLoading.value = false\n }\n}\n\nconst onAssetUploadConfirm = (items: ImageStoreItem[]) => {\n if (items.length === 0) return\n imageStore.addImages(\n items.map((item) => {\n maxPosition.value++\n return {\n ...item,\n position: maxPosition.value,\n }\n })\n )\n uploadQueueDialog.value = null\n uploadQueuesStore.stopUpload(props.queueKey)\n}\n\nconst actionLibrary = () => {\n assetSelectDialog.value = true\n}\n\nconst v$ = useVuelidate({ $scope: AImageMetadataValidationScopeSymbol })\n\nconst saveImages = async () => {\n v$.value.$touch()\n if (v$.value.$invalid) {\n showValidationError()\n return false\n }\n try {\n const assetUpdateItems: AssetAuthorsItems = []\n const imagesRaw = toRaw(images.value)\n for (const image of imagesRaw) {\n if (image.showDamAuthors && image.assetId) {\n assetUpdateItems.push({ id: image.assetId, authors: image.damAuthors })\n }\n if (image.damAuthors.length > 0 && image.showDamAuthors) {\n const authorsRes = await fetchAuthorListByIds(damClient, cachedExtSystemId.value, image.damAuthors)\n image.texts.source = authorsRes.map((author) => author.name).join(', ')\n }\n }\n if (assetUpdateItems.length) {\n await bulkUpdateAssetsAuthors(damClient, assetUpdateItems)\n }\n const resItems = await bulkUpdateImages(imageClient, imagesRaw)\n const ids: IntegerId[] = []\n const items = resItems.map((resItem) => {\n ids.push(resItem.id)\n\n return {\n key: generateUUIDv1(),\n ...resItem,\n damAuthors: [],\n showDamAuthors: false,\n assetId: undefined,\n }\n })\n if (imageStore.images.length === 0) return\n\n const getUpdatedItem = async (item: ImageStoreItem): Promise<ImageStoreItem> => {\n const matchedImage = imageStore.images.find((storeItem) => storeItem.dam.damId === item.dam.damId)\n\n return {\n ...item,\n damAuthors: matchedImage ? matchedImage.damAuthors : item.damAuthors,\n showDamAuthors: matchedImage ? matchedImage.damAuthors.length === 0 : item.damAuthors.length === 0,\n assetId: item.assetId,\n }\n }\n\n const updatedItems = await Promise.all(items.map((item) => getUpdatedItem(item)))\n imageStore.setImages(updatedItems)\n emit('update:modelValue', ids)\n return true\n } catch (e) {\n return false\n }\n}\n\nconst removeItem = async (index: number) => {\n const image = images.value[index]\n if (!image) return\n if (isUndefined(image.id)) {\n imageStore.removeImageByIndex(index)\n return\n }\n if (props.callDeleteApiOnRemove) {\n try {\n await deleteImage(imageClient, image.id)\n imageStore.removeImageByIndex(index)\n } catch (e) {\n showErrorsDefault(e)\n }\n return\n }\n imageStore.removeImageByIndex(index)\n}\n\nconst widgetEl = ref<HTMLElement | null>(null)\nconst randomUuid = ref<string>(generateUUIDv1())\nconst sortableInstance = ref<UseSortableReturn | null>(null)\nconst forceRerender = ref(0)\nconst limitDialogComponent = ref<InstanceType<typeof ImageWidgetMultipleLimitDialog> | null>(null)\n\nconst widgetHtmlId = computed(() => {\n return isUndefined(props.widgetIdentifierId) ? WIDGET_HTML_ID_PREFIX + randomUuid.value : props.widgetIdentifierId\n})\n\nconst forceRerenderWidgetHtml = () => {\n forceRerender.value++\n nextTick(() => {\n initSortable()\n })\n}\n\nconst updateAllPositions = () => {\n let pos = 0\n images.value.forEach((image) => {\n pos++\n image.position = pos\n })\n imageStore.maxPosition = pos\n}\nconst moveImagePositions = (from: number, to: number) => {\n if (to >= 0 && to < images.value.length) {\n const element = images.value.splice(from, 1)[0]\n images.value.splice(to, 0, element)\n updateAllPositions()\n forceRerenderWidgetHtml()\n }\n}\n\nconst initSortable = () => {\n if (props.disableDraggable) return\n if (!widgetEl.value) return\n const nestedSortable = widgetEl.value.querySelector<HTMLElement>('.' + GROUP_CLASS)\n if (!nestedSortable) return\n sortableInstance.value = useSortable(nestedSortable, [], {\n handle: '.' + HANDLE_CLASS,\n ghostClass: GHOST_CLASS,\n dragClass: DRAG_CLASS,\n chosenClass: CHOSEN_CLASS,\n onEnd: async (event: SortableEvent) => {\n if (isUndefined(event.oldIndex) || isUndefined(event.newIndex)) return\n moveImagePositions(event.oldIndex, event.newIndex)\n },\n })\n}\n\nnextTick(() => {\n widgetEl.value = document.querySelector('#' + widgetHtmlId.value)\n initSortable()\n})\n\ndefineExpose({\n saveImages,\n})\n\nonMounted(() => {\n fetchImagesOnLoad()\n})\n</script>\n\n<template>\n <div :id=\"widgetHtmlId\">\n <h4\n v-if=\"label\"\n class=\"font-weight-bold text-subtitle-2\"\n >\n {{ label }}\n </h4>\n <div class=\"pb-2\">\n <AFileInput\n :file-input-key=\"uploadQueue?.fileInputKey\"\n :accept=\"uploadAccept\"\n :max-sizes=\"uploadSizes\"\n multiple\n @files-input=\"onFileInput\"\n >\n <template #activator=\"{ props: fileInputProps }\">\n <VBtn\n ref=\"uploadButtonComponent\"\n v-bind=\"fileInputProps\"\n >\n {{ t('common.damImage.image.button.upload') }}\n </VBtn>\n </template>\n </AFileInput>\n <VBtn\n class=\"mr-2\"\n @click=\"actionLibrary\"\n >\n {{ t('common.damImage.image.button.addFromDam') }}\n </VBtn>\n </div>\n <AAssetSelect\n v-model=\"assetSelectDialog\"\n :select-licences=\"selectLicences\"\n :upload-licence=\"uploadLicence\"\n :min-count=\"1\"\n :max-count=\"50\"\n :asset-type=\"DamAssetType.Image\"\n return-type=\"asset\"\n @on-confirm=\"onAssetSelectConfirm\"\n />\n <div\n v-if=\"imagesLoading\"\n class=\"w-100 d-flex align-center justify-center\"\n >\n <VProgressCircular\n indeterminate\n color=\"primary\"\n />\n </div>\n <div\n class=\"position-relative w-100\"\n style=\"min-height: 140px\"\n >\n <div\n :key=\"forceRerender\"\n :class=\"GROUP_CLASS\"\n class=\"asset-list-tiles asset-list-tiles--thumbnail\"\n >\n <ImageWidgetMultipleItem\n v-for=\"(image, index) in images\"\n :key=\"image.key\"\n :index=\"index\"\n :disable-draggable=\"disableDraggable\"\n @edit-asset=\"onEditAsset\"\n @remove-item=\"removeItem\"\n />\n </div>\n <AImageDropzone\n variant=\"fill\"\n :hover-only=\"modelValue.length > 0 || images.length > 0\"\n :accept=\"uploadAccept\"\n :max-sizes=\"uploadSizes\"\n @on-drop=\"onDrop\"\n @on-click=\"uploadButtonComponent?.$el.click()\"\n />\n </div>\n <UploadQueueDialog\n v-if=\"uploadQueueDialog === queueKey && imageWidgetUploadConfig\"\n :queue-key=\"queueKey\"\n :ext-system=\"imageWidgetUploadConfig.extSystem\"\n :licence-id=\"imageWidgetUploadConfig.licence\"\n :file-input-key=\"uploadQueue?.fileInputKey ?? -1\"\n :accept=\"uploadAccept\"\n :max-sizes=\"uploadSizes\"\n multiple\n @on-apply=\"onAssetUploadConfirm\"\n @on-files-input=\"onFileInput\"\n />\n <AssetDetailDialog\n v-if=\"assetDialog === queueKey\"\n :queue-key=\"queueKey\"\n :ext-system=\"cachedExtSystemId\"\n />\n <ImageWidgetMultipleLimitDialog\n ref=\"limitDialogComponent\"\n :queue-key=\"queueKey\"\n @after-add=\"afterLimitDialogAdd\"\n />\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport { isImageWidgetUploadConfigAllowed } from '@/components/damImage/composables/damFilterUserAllowedUploadConfigs'\nimport { ImageWidgetUploadConfig } from '@/components/damImage/composables/imageWidgetInkectionKeys'\nimport ImageWidgetMultipleInner from '@/components/damImage/uploadQueue/components/ImageWidgetMultipleInner.vue'\nimport { useDamConfigState } from '@/components/damImage/uploadQueue/composables/damConfigState'\nimport { useDamConfigStore } from '@/components/damImage/uploadQueue/composables/damConfigStore'\nimport type { IntegerId } from '@/types/common'\nimport type { DamConfigLicenceExtSystemReturnType } from '@/types/coreDam/DamConfig'\nimport type { UploadQueueKey } from '@/types/coreDam/UploadQueue'\nimport { isUndefined } from '@/utils/common'\nimport { onMounted, provide, ref, shallowRef } from 'vue'\nimport { useExtSystemIdForCached } from '@/components/damImage/uploadQueue/composables/extSystemIdForCached'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: IntegerId[] // initial ids, updated only when save is called\n queueKey: UploadQueueKey\n uploadLicence: IntegerId\n selectLicences: IntegerId[]\n configName?: string\n label?: string | undefined\n readonly?: boolean\n dataCy?: string | undefined\n width?: number | undefined\n callDeleteApiOnRemove?: boolean\n }>(),\n {\n configName: 'default',\n label: undefined,\n image: undefined,\n readonly: false,\n lockable: false,\n lockedById: undefined,\n dataCy: undefined,\n expandOptions: false,\n width: undefined,\n callDeleteApiOnRemove: false,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: IntegerId[]): void\n}>()\n\nconst status = ref<'loading' | 'ready' | 'error' | 'uploadNotAllowed'>('loading')\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { damClient } = useCommonAdminCoreDamOptions(props.configName)\nconst {\n loadDamPrvConfig,\n loadDamConfigAssetCustomFormElements,\n getDamConfigAssetCustomFormElements,\n getOrLoadDamConfigExtSystemByLicence,\n getOrLoadDamConfigExtSystemByLicences,\n} = useDamConfigState(damClient)\n\nconst uploadConfig = shallowRef<DamConfigLicenceExtSystemReturnType | undefined>(undefined)\n\nconst { cachedExtSystemId } = useExtSystemIdForCached()\n\nonMounted(async () => {\n const damConfigStore = useDamConfigStore()\n uploadConfig.value = await getOrLoadDamConfigExtSystemByLicence(props.uploadLicence)\n if (isUndefined(uploadConfig.value)) {\n status.value = 'error'\n return\n }\n if (!isImageWidgetUploadConfigAllowed(uploadConfig.value)) {\n status.value = 'uploadNotAllowed'\n return\n }\n cachedExtSystemId.value = uploadConfig.value.extSystem\n const promises: Promise<any>[] = []\n if (!damConfigStore.initialized.damPrvConfig) {\n promises.push(loadDamPrvConfig())\n }\n promises.push(getOrLoadDamConfigExtSystemByLicences(props.selectLicences))\n const configAssetCustomFormElements = getDamConfigAssetCustomFormElements(uploadConfig.value.extSystem)\n if (isUndefined(configAssetCustomFormElements)) {\n promises.push(loadDamConfigAssetCustomFormElements(uploadConfig.value.extSystem))\n }\n try {\n await Promise.allSettled(promises)\n } catch (e) {\n status.value = 'error'\n }\n if (status.value !== 'error') status.value = 'ready'\n})\n\nconst innerComponent = ref<InstanceType<typeof ImageWidgetMultipleInner> | null>(null)\n\nconst saveImages = async () => {\n if (!innerComponent.value) return false\n return (await innerComponent.value.saveImages()) as boolean\n}\n\nprovide(ImageWidgetUploadConfig, uploadConfig)\n\ndefineExpose({\n saveImages,\n})\n</script>\n\n<template>\n <ImageWidgetMultipleInner\n v-if=\"status === 'ready'\"\n ref=\"innerComponent\"\n v-bind=\"props\"\n @update:model-value=\"emit('update:modelValue', $event)\"\n />\n <div\n v-else-if=\"status === 'error'\"\n class=\"text-error\"\n >\n Loading DAM config error\n </div>\n <div\n v-else-if=\"status === 'uploadNotAllowed'\"\n class=\"text-error\"\n >\n DAM access rights error\n </div>\n <VProgressCircular\n v-else\n :size=\"12\"\n :width=\"2\"\n indeterminate\n />\n</template>\n","<script lang=\"ts\" setup>\nimport type { IntegerId } from '@/types/common'\nimport type { ImageAware } from '@/types/ImageAware'\nimport AImageWidgetSimple from '@/components/damImage/AImageWidgetSimple.vue'\nimport { ref, toRefs, watch } from 'vue'\nimport { cloneDeep } from '@/utils/common'\nimport { fetchImageListByIds } from '@/components/damImage/uploadQueue/api/imageApi'\nimport { useAlerts } from '@/composables/system/alerts'\nimport { useCommonAdminImageOptions } from '@/components/damImage/composables/commonAdminImageOptions'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: IntegerId[]\n images?: ImageAware[]\n configName?: string\n label?: string | undefined\n width?: number | undefined\n disableAspectRatio?: boolean\n aspectRatio?: number | string\n showDescription?: boolean\n showSource?: boolean\n }>(),\n {\n images: () => [],\n configName: 'default',\n label: undefined,\n image: undefined,\n width: undefined,\n disableAspectRatio: false,\n aspectRatio: 1.777, // 16/9\n showDescription: false,\n showSource: false,\n }\n)\n\nconst { images, modelValue } = toRefs(props)\n\nconst resImages = ref<ImageAware[]>([])\n\nconst { showErrorsDefault } = useAlerts()\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst imageOptions = useCommonAdminImageOptions(props.configName)\nconst { imageClient } = imageOptions\n\nwatch(\n [images, modelValue],\n async ([newImages, newImageIds]) => {\n resImages.value = []\n if (newImages && newImages.length > 0) {\n resImages.value = cloneDeep(newImages).sort((a, b) => (a.position ?? 0) - (b.position ?? 0))\n return\n }\n if (newImageIds && newImageIds.length > 0) {\n try {\n resImages.value = (await fetchImageListByIds(imageClient, newImageIds)).sort(\n (a, b) => (a.position ?? 0) - (b.position ?? 0)\n )\n } catch (error) {\n showErrorsDefault(error)\n }\n }\n },\n { immediate: true }\n)\n</script>\n\n<template>\n <div class=\"asset-list-tiles asset-list-tiles--thumbnail\">\n <div\n v-for=\"image in resImages\"\n :key=\"image.id\"\n class=\"asset-list-tiles__item\"\n >\n <div class=\"asset-list-tiles__item-card\">\n <div class=\"ma-2\">\n <AImageWidgetSimple\n :model-value=\"image.id\"\n :image=\"image\"\n :config-name=\"configName\"\n :width=\"width\"\n :disable-aspect-ratio=\"disableAspectRatio\"\n :aspect-ratio=\"aspectRatio\"\n :show-description=\"showDescription\"\n :show-source=\"showSource\"\n />\n </div>\n </div>\n </div>\n </div>\n</template>\n","import { isUndefined } from '@/utils/common'\nimport { useImageStore } from '@/components/damImage/uploadQueue/composables/imageStore'\nimport type { DocId } from '@/types/common'\nimport { fetchAuthorListByIds } from '@/components/damImage/uploadQueue/api/authorApi'\nimport { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport { useExtSystemIdForCached } from '@/components/damImage/uploadQueue/composables/extSystemIdForCached'\n\nexport function useImageMassOperations() {\n const imageStore = useImageStore()\n\n const replaceEmptyDescription = (value: string, forceReplace = false) => {\n const items = imageStore.images\n for (let i = 0; i < items.length; i++) {\n const item = items[i]\n if (forceReplace || isUndefined(item.texts.description) || item.texts.description.length === 0) {\n item.texts.description = value\n }\n }\n }\n\n const replaceEmptySource = (value: string, forceReplace = false) => {\n const items = imageStore.images\n for (let i = 0; i < items.length; i++) {\n const item = items[i]\n if (forceReplace || isUndefined(item.texts.source) || item.texts.source.length === 0) {\n item.texts.source = value\n }\n }\n }\n\n const { damClient } = useCommonAdminCoreDamOptions()\n const { cachedExtSystemId } = useExtSystemIdForCached()\n\n const replaceEmptyAuthors = async (value: DocId[], forceReplace = false) => {\n const authorsMap = new Map<DocId, string>()\n const authorNames: string[] = []\n const authorsRes = await fetchAuthorListByIds(damClient, cachedExtSystemId.value, [...value])\n authorsRes.forEach((author) => {\n authorsMap.set(author.id, author.name)\n })\n value.forEach((authorId) => {\n const name = authorsMap.get(authorId)\n if (!isUndefined(name) && name.trim().length > 0) {\n authorNames.push(name)\n }\n })\n const items = imageStore.images\n for (let i = 0; i < items.length; i++) {\n const item = items[i]\n if (forceReplace || isUndefined(item.damAuthors) || item.damAuthors.length === 0) {\n item.damAuthors = value\n item.texts.source = authorNames.join(', ')\n }\n }\n }\n\n return {\n replaceEmptyDescription,\n replaceEmptySource,\n replaceEmptyAuthors,\n }\n}\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport { useImageMassOperations } from '@/components/damImage/uploadQueue/composables/imageMassOperations'\nimport AFormTextarea from '@/components/form/AFormTextarea.vue'\nimport { computed, ref } from 'vue'\nimport useVuelidate from '@vuelidate/core'\nimport { useValidate } from '@/validators/vuelidate/useValidate'\nimport { useImageStore } from '@/components/damImage/uploadQueue/composables/imageStore'\nimport ASystemEntityScope from '@/components/form/ASystemEntityScope.vue'\nimport AuthorRemoteAutocompleteWithCached from '@/components/damImage/uploadQueue/author/AuthorRemoteAutocompleteWithCached.vue'\nimport { useExtSystemIdForCached } from '@/components/damImage/uploadQueue/composables/extSystemIdForCached'\nimport { storeToRefs } from 'pinia'\n\nconst texts = ref({ description: '', source: '', authors: [] })\n\nconst imageStore = useImageStore()\nconst { images } = storeToRefs(imageStore)\nconst { replaceEmptyDescription, replaceEmptySource, replaceEmptyAuthors } = useImageMassOperations()\nconst { t } = useI18n()\n\nconst fillAll = (forceReplace: boolean) => {\n replaceEmptyDescription(texts.value.description, forceReplace)\n replaceEmptySource(texts.value.source, forceReplace)\n replaceEmptyAuthors(texts.value.authors, forceReplace)\n}\n\nconst clearForm = () => {\n texts.value.description = ''\n texts.value.source = ''\n texts.value.authors = []\n}\n\nconst { cachedExtSystemId } = useExtSystemIdForCached()\n\nconst { maxLength } = useValidate()\n\nconst rules = computed(() => ({\n texts: {\n description: {\n maxLength: maxLength(2000),\n },\n source: {\n maxLength: maxLength(255),\n },\n },\n}))\nconst v$ = useVuelidate(rules, { texts }, { $scope: false })\n\nconst showDamAuthorsAtLeastOne = computed(() => {\n if (images.value.length === 0) return false\n return images.value.length && images.value.some((item) => item?.showDamAuthors)\n})\n</script>\n\n<template>\n <div class=\"w-100\">\n <VRow\n dense\n class=\"mt-1\"\n >\n <VCol>\n <div class=\"d-flex\">\n <AFormTextarea\n v-model=\"texts.description\"\n :v=\"v$\"\n :label=\"t('common.damImage.image.model.texts.description')\"\n />\n <VBtn\n icon\n size=\"small\"\n variant=\"text\"\n class=\"mr-1\"\n @click.stop=\"replaceEmptyDescription(texts.description, false)\"\n >\n <VIcon icon=\"mdi-file-arrow-left-right-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.asset.massOperations.fillOneEmpty') }}\n </VTooltip>\n </VBtn>\n <VBtn\n icon\n size=\"small\"\n variant=\"text\"\n @click.stop=\"replaceEmptyDescription(texts.description, true)\"\n >\n <VIcon icon=\"mdi-file-replace-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.asset.massOperations.replaceOne') }}\n </VTooltip>\n </VBtn>\n </div>\n </VCol>\n </VRow>\n <VRow\n v-if=\"showDamAuthorsAtLeastOne\"\n dense\n class=\"mt-1\"\n >\n <VCol>\n <ASystemEntityScope\n subject=\"keyword\"\n system=\"dam\"\n >\n <div class=\"d-flex\">\n <div style=\"flex-grow: 1\">\n <AuthorRemoteAutocompleteWithCached\n v-model=\"texts.authors\"\n :ext-system=\"cachedExtSystemId\"\n :label=\"t('common.damImage.asset.model.authors')\"\n clearable\n multiple\n :validation-scope=\"false\"\n />\n </div>\n <VBtn\n icon\n size=\"small\"\n variant=\"text\"\n class=\"mr-1\"\n @click.stop=\"replaceEmptyAuthors(texts.authors, false)\"\n >\n <VIcon icon=\"mdi-file-arrow-left-right-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.asset.massOperations.fillOneEmpty') }}\n </VTooltip>\n </VBtn>\n <VBtn\n icon\n size=\"small\"\n variant=\"text\"\n @click.stop=\"replaceEmptyAuthors(texts.authors, true)\"\n >\n <VIcon icon=\"mdi-file-replace-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.asset.massOperations.replaceOne') }}\n </VTooltip>\n </VBtn>\n </div>\n </ASystemEntityScope>\n </VCol>\n </VRow>\n <VRow\n v-else\n dense\n class=\"mt-1\"\n >\n <VCol>\n <div class=\"d-flex\">\n <AFormTextarea\n v-model=\"texts.source\"\n :label=\"t('common.damImage.image.model.texts.source')\"\n />\n <VBtn\n icon\n size=\"small\"\n variant=\"text\"\n class=\"mr-1\"\n @click.stop=\"replaceEmptySource(texts.source, false)\"\n >\n <VIcon icon=\"mdi-file-arrow-left-right-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.asset.massOperations.fillOneEmpty') }}\n </VTooltip>\n </VBtn>\n <VBtn\n icon\n size=\"small\"\n variant=\"text\"\n @click.stop=\"replaceEmptySource(texts.source, true)\"\n >\n <VIcon icon=\"mdi-file-replace-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.asset.massOperations.replaceOne') }}\n </VTooltip>\n </VBtn>\n </div>\n </VCol>\n </VRow>\n <div class=\"sidebar-info__actions pa-2 d-flex align-center justify-center\">\n <VBtn\n class=\"mr-2\"\n variant=\"text\"\n size=\"small\"\n @click.stop=\"fillAll(false)\"\n >\n {{ t('common.damImage.asset.massOperations.fillAllEmpty') }}\n </VBtn>\n <VBtn\n class=\"mr-2\"\n variant=\"text\"\n size=\"small\"\n @click.stop=\"fillAll(true)\"\n >\n {{ t('common.damImage.asset.massOperations.replaceAll') }}\n </VBtn>\n <VBtn\n variant=\"text\"\n size=\"small\"\n @click.stop=\"clearForm\"\n >\n {{ t('common.damImage.asset.massOperations.clearForm') }}\n </VBtn>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { ImageAware, ImageCreateUpdateAware } from '@/types/ImageAware'\nimport { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport { fetchAssetByFileId } from '@/components/damImage/uploadQueue/api/damAssetApi'\nimport { cloneDeep, isDocId, isNull, isString } from '@/utils/common'\nimport { computed, ref, toRaw, watch } from 'vue'\nimport type { AssetDetailItemDto } from '@/types/coreDam/Asset'\nimport type { IntegerId, IntegerIdNullable } from '@/types/common'\nimport { createImage, fetchImage, updateImage } from '@/components/damImage/uploadQueue/api/imageApi'\nimport { useImageActions } from '@/components/damImage/composables/imageActions'\nimport { useCommonAdminImageOptions } from '@/components/damImage/composables/commonAdminImageOptions'\nimport { useAlerts } from '@/composables/system/alerts'\nimport { useI18n } from 'vue-i18n'\nimport AFormTextField from '@/components/form/AFormTextField.vue'\nimport AFormTextarea from '@/components/form/AFormTextarea.vue'\nimport ARow from '@/components/ARow.vue'\nimport useVuelidate from '@vuelidate/core'\nimport { useValidate } from '@/validators/vuelidate/useValidate'\n\nconst props = withDefaults(\n defineProps<{\n selectLicences: IntegerId[]\n image?: ImageAware | undefined // optional, if available, no need to fetch image data\n configName?: string\n labelT?: string | undefined\n dataCy?: string | undefined\n }>(),\n {\n image: undefined,\n configName: 'default',\n labelT: 'common.damImage.public.idOrUrl',\n dataCy: undefined,\n }\n)\nconst modelValue = defineModel<IntegerIdNullable>({ default: null, required: true })\nconst inputField = ref('')\nconst meta = ref({ description: '', source: '' })\n\nconst resolvedSrc = ref('')\nconst resImage = ref<null | ImageCreateUpdateAware>(null)\n\nconst isValid = ref(true)\nconst isDirty = ref(false)\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst imageOptions = useCommonAdminImageOptions(props.configName)\nconst { imageClient } = imageOptions\nconst { damClient } = useCommonAdminCoreDamOptions()\nconst { widgetImageToDamImageOriginalUrl } = useImageActions(imageOptions)\n\nconst { showErrorsDefault, showValidationError } = useAlerts()\nconst { t } = useI18n()\n\nconst extractUUID = (url: string): string | undefined => {\n const regex = /\\/image\\/original\\/([0-9a-fA-F-]+)\\.jpg/\n const match = url.match(regex)\n\n return match ? match[1] : undefined\n}\n\nconst validateAssetData = (asset: AssetDetailItemDto, licences: IntegerId[]) => {\n return licences.some((licence) => licence === asset.licence)\n}\n\nconst { required, maxLength } = useValidate()\n\nconst rules = {\n meta: {\n description: {\n maxLength: maxLength(255),\n },\n source: {\n required,\n maxLength: maxLength(255),\n },\n },\n}\nconst v$ = useVuelidate(rules, { meta }, { $stopPropagation: true })\n\nconst validateField = async () => {\n isDirty.value = true\n isValid.value = true\n inputField.value = inputField.value.trim()\n if (inputField.value.startsWith('http')) {\n const extracted = extractUUID(inputField.value)\n if (isString(extracted)) inputField.value = extracted\n }\n if (!isDocId(inputField.value)) {\n isValid.value = false\n return Promise.reject('Incorrect URL/ID provided')\n }\n try {\n const assetRes = await fetchAssetByFileId(damClient, inputField.value)\n if (isNull(assetRes.mainFile)) {\n isValid.value = false\n return Promise.reject('Incorrect asset mainFile')\n }\n if (validateAssetData(assetRes, props.selectLicences)) {\n isValid.value = true\n return Promise.resolve(assetRes)\n }\n isValid.value = false\n return Promise.reject('Incorrect asset or no access')\n } catch (e) {\n isValid.value = false\n return Promise.reject('Incorrect asset or no access')\n }\n}\n\nconst submit = async () => {\n try {\n const asset = await validateField()\n v$.value.$touch()\n if (v$.value.$invalid) {\n showValidationError()\n return Promise.reject('Invalid source or description')\n }\n const data: ImageCreateUpdateAware = {\n texts: {\n description: meta.value.description.trim(),\n source: meta.value.source.trim(),\n },\n flags: {\n showSource: true,\n },\n dam: {\n damId: asset.mainFile!.id,\n licenceId: asset.licence,\n regionPosition: 0,\n },\n position: 0,\n }\n if (resImage.value?.id) {\n data.id = resImage.value.id\n }\n const imageRes = resImage.value?.id\n ? await updateImage(imageClient, resImage.value.id, data)\n : await createImage(imageClient, data)\n resImage.value = imageRes\n modelValue.value = imageRes.id\n return Promise.resolve({ asset: asset, image: imageRes })\n } catch (e) {\n showErrorsDefault(e)\n }\n}\n\nconst updatePreviewAndTexts = () => {\n resolvedSrc.value = widgetImageToDamImageOriginalUrl({\n texts: {\n description: '',\n source: '',\n },\n flags: {\n showSource: true,\n },\n dam: {\n damId: inputField.value,\n licenceId: 0,\n regionPosition: 0,\n },\n })\n}\n\nconst onBlur = async () => {\n try {\n await validateField()\n updatePreviewAndTexts()\n } catch (e) {\n //\n }\n}\n\nconst reload = async (newImage: ImageCreateUpdateAware | undefined, newImageId: IntegerIdNullable, force = false) => {\n resolvedSrc.value = ''\n if ((newImage && isNull(resImage.value)) || (newImage && force)) {\n resImage.value = cloneDeep(newImage)\n if (resImage.value) {\n inputField.value = resImage.value.dam.damId\n resolvedSrc.value = widgetImageToDamImageOriginalUrl(toRaw(resImage.value))\n meta.value.description = resImage.value.texts.description\n meta.value.source = resImage.value.texts.source\n onBlur()\n }\n return\n }\n if (newImageId) {\n try {\n resImage.value = await fetchImage(imageClient, newImageId)\n } catch (error) {\n showErrorsDefault(error)\n }\n if (!isNull(resImage.value)) {\n inputField.value = resImage.value.dam.damId\n resolvedSrc.value = widgetImageToDamImageOriginalUrl(toRaw(resImage.value))\n meta.value.description = resImage.value.texts.description\n meta.value.source = resImage.value.texts.source\n onBlur()\n }\n return\n }\n resImage.value = null\n meta.value.description = ''\n meta.value.source = ''\n}\n\nconst disabled = computed(() => !(isValid.value && isDirty.value))\n\nwatch(\n [() => props.image, modelValue],\n async ([newImage, newImageId]) => {\n await reload(newImage, newImageId)\n },\n { immediate: true }\n)\n\ndefineExpose({\n submit,\n})\n</script>\n\n<template>\n <ARow>\n <AFormTextField\n v-model=\"inputField\"\n :label=\"labelT ? t(labelT) : undefined\"\n :error=\"!isValid\"\n :error-message=\"isValid ? undefined : t('common.damImage.public.inputError')\"\n required\n @blur=\"onBlur\"\n @keyup.enter=\"onBlur\"\n />\n </ARow>\n <ARow>\n <AFormTextarea\n v-model=\"meta.description\"\n :label=\"t('common.damImage.image.model.texts.description')\"\n :v=\"v$.meta.description\"\n :disabled=\"disabled\"\n />\n </ARow>\n <ARow>\n <AFormTextarea\n v-model=\"meta.source\"\n :label=\"t('common.damImage.image.model.texts.source')\"\n :v=\"v$.meta.source\"\n :disabled=\"disabled\"\n />\n </ARow>\n <ARow style=\"min-height: 50px\">\n <div>{{ t('common.damImage.public.imagePreview') }}:</div>\n <img\n v-if=\"resolvedSrc.length > 0\"\n :src=\"resolvedSrc\"\n alt=\"\"\n >\n </ARow>\n</template>\n","<script lang=\"ts\" setup>\nimport { objectGetValueByPath } from '@/utils/object'\nimport { computed } from 'vue'\nimport ABooleanValue from '@/components/ABooleanValue.vue'\nimport { datatableSlotName } from '@/components/datatable/datatable'\n\nconst props = withDefaults(\n defineProps<{\n item: any\n column: any\n }>(),\n {}\n)\n\nconst value = computed(() => {\n return objectGetValueByPath(props.item, props.column.key)\n})\n\nconst isBoolean = computed(() => typeof value.value === 'boolean')\n</script>\n\n<template>\n <td>\n <slot\n :name=\"datatableSlotName(column.key)\"\n :item=\"item\"\n >\n <ABooleanValue\n v-if=\"isBoolean\"\n chip\n :value=\"value\"\n />\n <template v-else>\n {{ value }}\n </template>\n </slot>\n </td>\n</template>\n","<script lang=\"ts\" setup generic=\"TItem = Record<string, unknown>\">\nimport { computed } from 'vue'\nimport { isEmpty } from '@/utils/common'\nimport { useI18n } from 'vue-i18n'\nimport ADatatableColumn from '@/components/datatable/ADatatableColumn.vue'\nimport { datatableSlotName } from '@/components/datatable/datatable'\n\nconst props = withDefaults(\n defineProps<{\n items: TItem[]\n columns: any\n itemKey?: string\n }>(),\n {\n itemKey: 'id',\n }\n)\nconst emit = defineEmits<{\n (e: 'click:row', data: any): void\n}>()\nconst onRowClick = (event: unknown, item: unknown) => {\n emit('click:row', { event, item })\n}\n\nconst isNotEmpty = computed(() => {\n return !isEmpty(props.items)\n})\n\nconst totalColumnsCount = computed(() => {\n return props.columns.length\n})\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <VTable class=\"a-datatable\">\n <thead>\n <tr>\n <th\n v-for=\"column in columns\"\n :key=\"column.key\"\n class=\"text-left\"\n >\n {{ column.title }}\n </th>\n </tr>\n </thead>\n <tbody>\n <template v-if=\"isNotEmpty\">\n <tr\n v-for=\"item in props.items\"\n :key=\"(item as any)[itemKey]\"\n @click=\"onRowClick($event, item)\"\n >\n <ADatatableColumn\n v-for=\"column in columns\"\n :key=\"column.key\"\n :item=\"item\"\n :column=\"column\"\n >\n <template #[datatableSlotName(column.key)]=\"{ item: slotItem }\">\n <slot\n :name=\"datatableSlotName(column.key)\"\n :item=\"slotItem\"\n />\n </template>\n </ADatatableColumn>\n </tr>\n </template>\n <template v-else>\n <tr>\n <td\n :colspan=\"totalColumnsCount\"\n class=\"text-center text-disabled\"\n >\n {{ t('common.system.datatable.noDataText') }}\n </td>\n </tr>\n </template>\n </tbody>\n </VTable>\n <slot name=\"bottom\" />\n</template>\n","import { createDatatableColumnsConfig, type DatatableOrderingOption } from '@/composables/system/datatableColumns'\nimport type { Ref } from 'vue'\nimport { ref } from 'vue'\nimport type { Pagination } from '@/types/Pagination'\nimport type { FilterBag } from '@/types/Filter'\nimport { useFilterHelpers } from '@/composables/filter/filterHelpers'\nimport { useAlerts } from '@/composables/system/alerts'\n\nexport function useSubjectSelect<TItem>(\n datatableConfig: any,\n datatableHiddenColumns: any,\n system: string,\n subject: string,\n fetch: (pag: Pagination, fb: FilterBag) => Promise<Array<TItem>>,\n filter: FilterBag\n) {\n const filterTouched: Ref<boolean> = ref(false)\n const items: Ref<Array<TItem>> = ref([])\n const selected: Ref<Array<TItem>> = ref([])\n const loading = ref(false)\n\n const { resetFilter, submitFilter } = useFilterHelpers()\n const { showErrorsDefault } = useAlerts()\n\n const { columnsVisible, pagination, updateSortBy, columnsAll, columnsHidden } = createDatatableColumnsConfig(\n datatableConfig,\n datatableHiddenColumns,\n system,\n subject\n )\n\n const onOpen = () => {\n resetState()\n getList()\n }\n\n const sortByChange = (option: DatatableOrderingOption) => {\n updateSortBy(option.sortBy)\n getList()\n }\n\n const onFetchNextPage = async () => {\n loading.value = true\n pagination.page++\n try {\n items.value.push(...(await fetch(pagination, filter)))\n } catch (e) {\n showErrorsDefault(e)\n } finally {\n loading.value = false\n }\n }\n\n const resetState = () => {\n items.value = []\n selected.value = []\n }\n\n const getList = async () => {\n loading.value = true\n try {\n items.value = await fetch(pagination, filter)\n } catch (e) {\n showErrorsDefault(e)\n } finally {\n loading.value = false\n }\n }\n\n const onRowClick = (event: Event) => {\n const eventTarget = event.target as HTMLElement | null\n if (!eventTarget || (eventTarget.tagName === 'INPUT' && (eventTarget as HTMLInputElement).type === 'checkbox')) {\n return\n }\n const parent = eventTarget.closest('.v-data-table__tr')\n if (!parent || !parent.classList.contains('v-data-table__tr')) return\n const firstTd = parent.firstElementChild\n if (!firstTd || !firstTd.classList.contains('v-data-table__td')) return\n const input = firstTd.querySelector('input')\n if (!input) return\n input.click()\n }\n\n return {\n items,\n selected,\n pagination,\n columnsVisible,\n columnsHidden,\n columnsAll,\n filterTouched,\n loading,\n onRowClick,\n onFetchNextPage,\n onOpen,\n sortByChange,\n getList,\n resetFilter: () => resetFilter(filter, pagination, getList),\n submitFilter: () => submitFilter(filter, pagination, getList),\n }\n}\n","export interface VDatatableSelectableItem {\n value: any\n selectable: boolean\n}\n\ninterface DataTableSelectStrategy {\n showSelectAll: boolean\n allSelected: (data: {\n allItems: VDatatableSelectableItem[]\n currentPage: VDatatableSelectableItem[]\n }) => VDatatableSelectableItem[]\n select: (data: { items: VDatatableSelectableItem[]; value: boolean; selected: Set<unknown> }) => Set<unknown>\n selectAll: (data: {\n value: boolean\n allItems: VDatatableSelectableItem[]\n currentPage: VDatatableSelectableItem[]\n selected: Set<unknown>\n }) => Set<unknown>\n}\n\nexport const generateDatatableMinMaxSelectStrategy = (min: number, max: number): DataTableSelectStrategy => {\n return {\n showSelectAll: false,\n allSelected: () => [],\n select: ({ items, value, selected }) => {\n if (min === max && min === 1) {\n return new Set(value ? [items[0]?.value] : [])\n }\n for (const item of items) {\n if (selected.size >= max && value) break\n else if (value) selected.add(item.value)\n else selected.delete(item.value)\n }\n return selected\n },\n selectAll: ({ selected }) => selected,\n }\n}\n","import { isNumber, isString } from '@/utils/common'\n\nexport const booleanToInteger = (value: boolean) => {\n return value ? 1 : 0\n}\n\nexport const parseBoolean = (x: unknown): boolean => {\n if (x === true) return true\n if (!x) return false\n if (!isString(x) && !isNumber(x)) return false\n const str = `${x}`.toUpperCase().trim()\n\n return !['FALSE', 'NO', '0'].includes(str)\n}\n","import { dateTimeNow } from '@/utils/datetime'\nimport { isString } from '@/utils/common'\nimport type { AnzuUser } from '@/types/AnzuUser'\n\nexport function useAnzuUserFactory(system = '', resourceName = 'user') {\n let _system = system\n let _resourceName = resourceName\n const createAnzuUser = (system?: string, resourceName?: string): AnzuUser => {\n if (isString(system)) _system = system\n if (isString(resourceName)) _resourceName = resourceName\n\n return {\n id: null,\n email: '',\n avatar: {\n color: '',\n text: '',\n },\n person: {\n firstName: '',\n fullName: '',\n lastName: '',\n },\n enabled: false,\n permissionGroups: [],\n permissions: {},\n resolvedPermissions: {},\n roles: [],\n modifiedAt: dateTimeNow(),\n modifiedBy: null,\n createdAt: dateTimeNow(),\n createdBy: null,\n _system: _system,\n _resourceName: _resourceName,\n }\n }\n\n return {\n createAnzuUser,\n }\n}\n","import type { BaseUser } from '@/types/AnzuUser'\n\nexport function useBaseUserFactory() {\n const createBaseUser = (): BaseUser => {\n return {\n id: null,\n email: '',\n avatar: {\n color: '',\n text: '',\n },\n person: {\n firstName: '',\n fullName: '',\n lastName: '',\n },\n }\n }\n\n return {\n createBaseUser,\n }\n}\n","import type { PermissionConfig } from '@/types/PermissionConfig'\n\nexport function usePermissionConfigFactory() {\n const createPermissionConfig = (): PermissionConfig => {\n return {\n config: {},\n defaultGrants: [],\n roles: [],\n translation: {\n actions: {},\n subjects: {},\n roles: {},\n },\n }\n }\n\n return {\n createPermissionConfig,\n }\n}\n","import { dateTimeNow } from '@/utils/datetime'\nimport type { PermissionGroup } from '@/types/PermissionGroup'\n\nexport function usePermissionGroupFactory() {\n const createPermissionGroup = (): PermissionGroup => {\n return {\n id: 0,\n title: '',\n description: '',\n permissions: {},\n createdBy: 0,\n modifiedBy: 0,\n createdAt: dateTimeNow(),\n modifiedAt: dateTimeNow(),\n _resourceName: 'permissionGroup',\n _system: '',\n }\n }\n\n return {\n createPermissionGroup,\n }\n}\n","import { replaceUrlParameters, type UrlParams } from '@/services/api/apiHelper'\nimport type { FilterBag } from '@/types/Filter'\nimport type { Pagination } from '@/types/Pagination'\nimport { isDefined } from '@/utils/common'\nimport type { AxiosInstance, AxiosRequestConfig } from 'axios'\nimport { useApiQueryBuilder } from '@/services/api/queryBuilder'\nimport { usePagination } from '@/composables/system/pagination'\nimport { AnzuApiForbiddenError, axiosErrorResponseIsForbidden } from '@/model/error/AnzuApiForbiddenError'\nimport { AnzuApiValidationError, axiosErrorResponseHasValidationData } from '@/model/error/AnzuApiValidationError'\nimport {\n AnzuApiForbiddenOperationError,\n axiosErrorResponseHasForbiddenOperationData,\n} from '@/model/error/AnzuApiForbiddenOperationError'\nimport { AnzuFatalError } from '@/model/error/AnzuFatalError'\nimport { isValidHTTPStatus } from '@/utils/response'\nimport { AnzuApiResponseCodeError } from '@/model/error/AnzuApiResponseCodeError'\nimport {\n type ApiInfiniteResponseList,\n type ApiResponseList,\n isApiInfiniteResponseList,\n isApiResponseList,\n} from '@/types/ApiResponse'\nimport { HTTP_STATUS_NO_CONTENT } from '@/composables/statusCodes'\nimport {\n AnzuApiDependencyExistsError,\n axiosErrorResponseHasDependencyExistsData,\n} from '@/model/error/AnzuApiDependencyExistsError'\n\nconst generateListApiQuery = (pagination: Pagination, filterBag: FilterBag | undefined = undefined): string => {\n const { querySetLimit, querySetOffset, querySetOrder, queryBuild, querySetFilters } = useApiQueryBuilder()\n querySetLimit(pagination.rowsPerPage)\n querySetOffset(pagination.page, pagination.rowsPerPage)\n querySetOrder(pagination.sortBy, pagination.descending)\n if (isDefined(filterBag)) querySetFilters(filterBag)\n return queryBuild()\n}\n\nconst generateListApiQueryWithoutPagination = (\n rowsPerPage: number,\n page: number,\n orderField: string,\n orderDesc: boolean,\n filterBag: FilterBag | undefined = undefined\n): string => {\n const { querySetLimit, querySetOffset, querySetOrder, queryBuild, querySetFilters } = useApiQueryBuilder()\n querySetLimit(rowsPerPage)\n querySetOffset(page, rowsPerPage)\n querySetOrder(orderField, orderDesc)\n if (isDefined(filterBag)) querySetFilters(filterBag)\n return queryBuild()\n}\n// todo: alpha version\n/**\n * Used to fetch all items from list api.\n *\n * @template R Response type override, optional\n */\nexport const apiFetchListBatch = async <R>(\n client: () => AxiosInstance,\n urlTemplate: string,\n urlParams: UrlParams = {},\n sortBy = 'id',\n sortDesc = true,\n filterBag: FilterBag | undefined = undefined,\n batchSize = 100,\n system: string,\n entity: string,\n forceElastic = false,\n options: AxiosRequestConfig = {}\n): Promise<R> => {\n const searchApi = isDefined(filterBag?._elastic) || forceElastic ? '/search' : ''\n const pagination = usePagination(sortBy)\n pagination.rowsPerPage = batchSize\n pagination.sortBy = sortBy\n pagination.descending = sortDesc\n const urlPart = replaceUrlParameters(urlTemplate, urlParams) + searchApi\n const results = [] as unknown as R\n\n try {\n const res = await client().get(urlPart + generateListApiQuery(pagination, filterBag), options)\n if (!isValidHTTPStatus(res.status)) {\n return Promise.reject(new AnzuApiResponseCodeError(res.status))\n }\n if (res.data) {\n const resData = res.data as unknown as ApiResponseList<R> | ApiInfiniteResponseList<R>\n // @ts-ignore\n results.push(...resData.data)\n if (isApiInfiniteResponseList(resData)) {\n pagination.hasNextPage = res.data.hasNextPage\n if (pagination.hasNextPage) {\n while (pagination.hasNextPage) {\n pagination.page++\n const nextPageResponse = await client().get(urlPart + generateListApiQuery(pagination, filterBag), options)\n const nextPageData = nextPageResponse.data\n // @ts-ignore\n results.push(...nextPageData.data)\n pagination.hasNextPage = nextPageData.hasNextPage\n }\n }\n } else if (isApiResponseList(resData)) {\n pagination.totalCount = resData.totalCount\n if (pagination.totalCount <= pagination.rowsPerPage) {\n return Promise.resolve(results as R)\n }\n const promises: Promise<any>[] = []\n const numPages = Math.ceil(pagination.totalCount / pagination.rowsPerPage)\n for (let i = 0; i < numPages; i++) {\n promises.push(\n client().get(\n urlPart +\n generateListApiQueryWithoutPagination(\n pagination.rowsPerPage,\n i,\n pagination.sortBy,\n pagination.descending,\n filterBag\n ),\n options\n )\n )\n }\n const allResponses = await Promise.all(promises)\n allResponses.forEach((pageResponse) => {\n // @ts-ignore\n results.push(...pageResponse.data.data)\n })\n }\n pagination.currentViewCount = res.data.data.length\n return Promise.resolve(results as R)\n }\n if (res.status === HTTP_STATUS_NO_CONTENT) {\n return Promise.resolve([] as R)\n }\n\n return results\n } catch (err: any) {\n if (axiosErrorResponseIsForbidden(err)) {\n return Promise.reject(new AnzuApiForbiddenError(err, err.config?.url))\n }\n if (axiosErrorResponseHasValidationData(err)) {\n return Promise.reject(new AnzuApiValidationError(err, system, entity, err))\n }\n if (axiosErrorResponseHasDependencyExistsData(err)) {\n return Promise.reject(new AnzuApiDependencyExistsError(err, system, entity, err))\n }\n if (axiosErrorResponseHasForbiddenOperationData(err)) {\n return Promise.reject(new AnzuApiForbiddenOperationError(err, err))\n }\n return Promise.reject(new AnzuFatalError(err))\n }\n}\n","import { isAnzuApiValidationError } from '@/model/error/AnzuApiValidationError'\nimport { isAnzuFatalError } from '@/model/error/AnzuFatalError'\nimport { isAnzuApiForbiddenError } from '@/model/error/AnzuApiForbiddenError'\nimport { isAnzuApiResponseCodeError } from '@/model/error/AnzuApiResponseCodeError'\n\nexport function useErrors() {\n return {\n isAnzuFatalError,\n isAnzuApiForbiddenError,\n isAnzuApiValidationError,\n isAnzuApiResponseCodeError,\n }\n}\n","import type { AxiosInstance } from 'axios'\nimport type { Pagination } from '@/types/Pagination'\nimport type { FilterBag } from '@/types/Filter'\nimport type { JobBase } from '@/types/Job'\nimport { apiFetchList } from '@/services/api/apiFetchList'\nimport { apiFetchOne } from '@/services/api/apiFetchOne'\nimport { apiCreateOne } from '@/services/api/apiCreateOne'\nimport { apiDeleteOne } from '@/services/api/apiDeleteOne'\nimport { stringToKebabCase } from '@/utils/string'\n\nconst END_POINT = '/adm/v1/job'\nexport const ENTITY = 'job'\n\nexport function useJobApi<JobType extends JobBase = JobBase>(client: () => AxiosInstance, system: string) {\n const fetchJobList = (pagination: Pagination, filterBag: FilterBag) =>\n apiFetchList<JobType[]>(client, END_POINT, {}, pagination, filterBag, system, ENTITY)\n\n const fetchJob = (id: number) => apiFetchOne<JobType>(client, END_POINT + '/:id', { id }, system, ENTITY)\n\n const createJob = (data: JobType) => {\n const type = stringToKebabCase(data._resourceName)\n .slice(4) // remove \"job-\" prefix\n .replace('-kind-', '-kind/') // replace \"-kind-\" with \"-kind/\" if the needle is found\n\n return apiCreateOne<JobType>(client, data, END_POINT + '/:type', { type }, system, ENTITY)\n }\n\n const deleteJob = (id: number) => apiDeleteOne<JobType>(client, END_POINT + '/:id', { id }, system, ENTITY)\n\n return {\n fetchJobList,\n fetchJob,\n createJob,\n deleteJob,\n }\n}\n","import { ref } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport type { ValueObjectOption } from '@/types/ValueObject'\n\nexport const JOB_RESOURCE_USER_DATA_DELETE = 'jobUserDataDelete'\n\nexport type JobBaseResource = typeof JOB_RESOURCE_USER_DATA_DELETE | `job${string}`\n\nexport function useJobBaseResource<T extends JobBaseResource = JobBaseResource>(\n customJobs: ValueObjectOption<T>[] = []\n) {\n const { t } = useI18n()\n\n const jobResourceOptions = ref<ValueObjectOption<T>[]>([\n ...([\n {\n value: 'jobUserDataDelete',\n title: t('common.job.jobResource.jobUserDataDelete'),\n },\n ] as unknown as ValueObjectOption<T>[]),\n ...customJobs,\n ])\n\n const getJobResourceOption = (value: T): ValueObjectOption<T> => {\n return jobResourceOptions.value.find((item) => item.value === value) as ValueObjectOption<T>\n }\n\n return {\n jobResourceOptions,\n getJobResourceOption,\n }\n}\n","import type { App, DeepReadonly, Ref, UnwrapRef } from 'vue'\nimport type { AnzuUser } from '@/types/AnzuUser'\nimport Acl from '@/components/permission/Acl.vue'\nimport Notification from '@kyvg/vue3-notification'\nimport type { LanguageCode } from '@/composables/languageSettings'\nimport { AvailableLanguagesSymbol, DefaultLanguageSymbol } from '@/components/injectionKeys'\nimport type { AxiosInstance } from 'axios'\nimport { initCommonAdminImageOptions } from '@/components/damImage/composables/commonAdminImageOptions'\nimport { initCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport { initCommonAdminCollabOptions } from '@/components/collab/composables/commonAdminCollabOptions'\n\nexport type PluginOptions = {\n languages: { available: LanguageCode[]; default: LanguageCode }\n coreDam?: CommonAdminCoreDamOptions\n image?: CommonAdminImageOptions\n collab?: CommonAdminCollabOptions\n}\n\nexport type CurrentUserType = DeepReadonly<Ref<UnwrapRef<AnzuUser | undefined>>>\n\nexport interface CommonAdminImageConfig {\n imageClient: () => AxiosInstance\n previewDomain: string\n previewDomainOriginal: string\n width: number\n height: number\n}\n\nexport type CommonAdminImageOptions =\n | undefined\n | {\n configs: { [key: string]: CommonAdminImageConfig }\n }\n\nexport interface CommonAdminCoreDamConfig {\n damClient: () => AxiosInstance\n}\n\nexport type CommonAdminCoreDamOptions =\n | undefined\n | {\n configs: { [key: string]: CommonAdminCoreDamConfig }\n apiTimeout: number\n uploadStatusFallback: boolean\n adminDomain: string\n notification: {\n enabled: boolean\n webSocketUrl: string\n }\n }\n\nexport type CommonAdminCollabOptions = {\n enabled: boolean\n socketUrl: string\n beforeReconnect: () => Promise<void>\n}\n\nexport default {\n install(app: App, options: PluginOptions): void {\n app.provide(AvailableLanguagesSymbol, options.languages.available)\n app.provide(DefaultLanguageSymbol, options.languages.default)\n app.component('Acl', Acl)\n app.use(Notification, { componentName: 'Notifications' })\n initCommonAdminImageOptions(options.image)\n initCommonAdminCoreDamOptions(options.coreDam)\n initCommonAdminCollabOptions(options.collab)\n },\n}\n","export const arrayItemToggle = <T>(array: Array<T>, value: T) => {\n const index = array.indexOf(value)\n if (index === -1) {\n array.push(value)\n return\n }\n array.splice(index, 1)\n}\n\nexport const arrayToString = (values: Array<string | number>, separator = ', ') => values.join(separator)\n\nexport const arrayFromArgs = <T>(...args: [T[]]) => Array.from(...args)\n\nexport type NestedArray<T> = Array<NestedArray<T> | T>\n\nexport const arrayFlatten = <T>(input: NestedArray<T>, acc: T[] = []): T[] => {\n return input.reduce((_: T[], current) => {\n if (Array.isArray(current)) return arrayFlatten(current, acc)\n acc.push(current)\n return acc\n }, [])\n}\n\nexport const arraysHaveSameElements = <T>(array1: T[], array2: T[]): boolean => {\n if (array1.length !== array2.length) {\n return false\n }\n\n // Sort both arrays\n const sortedArray1 = array1.slice().sort()\n const sortedArray2 = array2.slice().sort()\n\n // Compare the sorted arrays\n for (let i = 0; i < sortedArray1.length; i++) {\n if (sortedArray1[i] !== sortedArray2[i]) {\n return false\n }\n }\n\n return true\n}\n","import type { RouteLocationRaw, Router } from 'vue-router'\n\nexport const browserHistoryReplaceUrlByString = (path: string) => {\n history.replaceState(history.state, '', path)\n}\n\nexport const browserHistoryReplaceUrlByRouter = (router: Router, to: RouteLocationRaw) => {\n const resolved = router.resolve(to)\n browserHistoryReplaceUrlByString(resolved.href)\n}\n","import alert from '@/locales/cs/common/alert.json'\nimport button from '@/locales/cs/common/button.json'\nimport model from '@/locales/cs/common/model.json'\nimport system from '@/locales/cs/common/system.json'\nimport anzuUser from '@/locales/cs/common/anzuUser.json'\nimport job from '@/locales/cs/common/job.json'\nimport log from '@/locales/cs/common/log.json'\nimport permission from '@/locales/cs/common/permission.json'\nimport permissionGroup from '@/locales/cs/common/permissionGroup.json'\nimport vuetify from '@/locales/cs/vuetify.json'\nimport apiValidation from '@/locales/cs/error/apiValidation.json'\nimport apiForbiddenOperation from '@/locales/cs/error/apiForbiddenOperation.json'\nimport apiDependencyExists from '@/locales/cs/error/apiDependencyExists.json'\nimport jsValidation from '@/locales/cs/error/jsValidation.json'\nimport assetSelect from '@/locales/cs/common/assetSelect.json'\nimport subjectSelect from '@/locales/cs/common/subjectSelect.json'\nimport time from '@/locales/cs/common/time.json'\nimport sortable from '@/locales/cs/common/sortable.json'\nimport damImage from '@/locales/cs/common/damImage.json'\nimport collab from '@/locales/cs/common/collab.json'\nimport filter from '@/locales/cs/common/filter.json'\nimport apiTimedOut from '@/locales/cs/error/apiTimedOut.json'\n\nexport default {\n common: {\n alert,\n button,\n model,\n system,\n anzuUser,\n job,\n log,\n permission,\n permissionGroup,\n assetSelect,\n subjectSelect,\n time,\n sortable,\n damImage,\n collab,\n filter,\n },\n $vuetify: vuetify,\n error: {\n apiValidation: {\n ...apiValidation,\n },\n apiForbiddenOperation: {\n ...apiForbiddenOperation,\n },\n apiDependencyExists: {\n ...apiDependencyExists,\n },\n jsValidation: {\n ...jsValidation,\n },\n apiTimedOut: {\n ...apiTimedOut,\n },\n },\n}\n","import vuetify from '@/locales/en/vuetify.json'\nimport alert from '@/locales/en/common/alert.json'\nimport button from '@/locales/en/common/button.json'\nimport model from '@/locales/en/common/model.json'\nimport system from '@/locales/en/common/system.json'\nimport anzuUser from '@/locales/en/common/anzuUser.json'\nimport job from '@/locales/en/common/job.json'\nimport log from '@/locales/en/common/log.json'\nimport permission from '@/locales/en/common/permission.json'\nimport permissionGroup from '@/locales/en/common/permissionGroup.json'\nimport apiValidation from '@/locales/en/error/apiValidation.json'\nimport jsValidation from '@/locales/en/error/jsValidation.json'\nimport apiForbiddenOperation from '@/locales/en/error/apiForbiddenOperation.json'\nimport apiDependencyExists from '@/locales/en/error/apiDependencyExists.json'\nimport assetSelect from '@/locales/en/common/assetSelect.json'\nimport subjectSelect from '@/locales/en/common/subjectSelect.json'\nimport time from '@/locales/en/common/time.json'\nimport sortable from '@/locales/en/common/sortable.json'\nimport damImage from '@/locales/en/common/damImage.json'\nimport collab from '@/locales/en/common/collab.json'\nimport filter from '@/locales/en/common/filter.json'\nimport apiTimedOut from '@/locales/en/error/apiTimedOut.json'\n\nexport default {\n common: {\n alert,\n button,\n model,\n system,\n anzuUser,\n job,\n log,\n permission,\n permissionGroup,\n assetSelect,\n subjectSelect,\n time,\n sortable,\n damImage,\n collab,\n filter,\n },\n $vuetify: vuetify,\n error: {\n apiValidation: {\n ...apiValidation,\n },\n apiForbiddenOperation: {\n ...apiForbiddenOperation,\n },\n apiDependencyExists: {\n ...apiDependencyExists,\n },\n jsValidation: {\n ...jsValidation,\n },\n apiTimedOut: {\n ...apiTimedOut,\n },\n },\n}\n","import alert from '@/locales/sk/common/alert.json'\nimport button from '@/locales/sk/common/button.json'\nimport model from '@/locales/sk/common/model.json'\nimport system from '@/locales/sk/common/system.json'\nimport anzuUser from '@/locales/sk/common/anzuUser.json'\nimport job from '@/locales/sk/common/job.json'\nimport log from '@/locales/sk/common/log.json'\nimport permission from '@/locales/sk/common/permission.json'\nimport permissionGroup from '@/locales/sk/common/permissionGroup.json'\nimport vuetify from '@/locales/sk/vuetify.json'\nimport apiValidation from '@/locales/sk/error/apiValidation.json'\nimport apiForbiddenOperation from '@/locales/sk/error/apiForbiddenOperation.json'\nimport apiDependencyExists from '@/locales/sk/error/apiDependencyExists.json'\nimport jsValidation from '@/locales/sk/error/jsValidation.json'\nimport assetSelect from '@/locales/sk/common/assetSelect.json'\nimport subjectSelect from '@/locales/sk/common/subjectSelect.json'\nimport time from '@/locales/sk/common/time.json'\nimport sortable from '@/locales/sk/common/sortable.json'\nimport damImage from '@/locales/sk/common/damImage.json'\nimport collab from '@/locales/sk/common/collab.json'\nimport filter from '@/locales/sk/common/filter.json'\nimport apiTimedOut from '@/locales/sk/error/apiTimedOut.json'\n\nexport default {\n common: {\n alert,\n button,\n model,\n system,\n anzuUser,\n job,\n log,\n permission,\n permissionGroup,\n assetSelect,\n subjectSelect,\n time,\n sortable,\n damImage,\n collab,\n filter,\n },\n $vuetify: vuetify,\n error: {\n apiValidation: {\n ...apiValidation,\n },\n apiForbiddenOperation: {\n ...apiForbiddenOperation,\n },\n apiDependencyExists: {\n ...apiDependencyExists,\n },\n jsValidation: {\n ...jsValidation,\n },\n apiTimedOut: {\n ...apiTimedOut,\n },\n },\n}\n","import { VBtn, VChip } from 'vuetify/components'\n\nexport const useCommonVuetifyConfig = () => {\n const commonTheme = () => {\n return {\n defaultTheme: 'light',\n variations: {\n colors: [],\n lighten: 0,\n darken: 0,\n },\n themes: {\n light: {\n dark: false,\n colors: {\n background: '#ffffff',\n surface: '#ffffff',\n 'on-surface': '#333',\n primary: '#3f6ad8',\n secondary: '#E0E0E0',\n 'on-secondary': '#333',\n success: '#3ac47d',\n 'on-success': '#fff',\n warning: '#FB8C00',\n error: '#d92550',\n info: '#78c3fb',\n },\n variables: {},\n },\n dark: {\n dark: true,\n colors: {\n background: '#1A1A1A',\n surface: '#1A1A1A',\n primary: '#3f6ad8',\n secondary: '#E0E0E0',\n 'on-secondary': '#333',\n success: '#3ac47d',\n warning: '#FB8C00',\n error: '#d92550',\n info: '#78c3fb',\n },\n variables: {},\n },\n },\n }\n }\n\n const commonDefaults = () => {\n return {\n global: {},\n VTextField: {\n variant: 'underlined',\n density: 'compact',\n color: 'primary',\n },\n VTextarea: {\n variant: 'underlined',\n density: 'compact',\n color: 'primary',\n },\n VSelect: {\n variant: 'underlined',\n density: 'compact',\n color: 'primary',\n },\n VAutocomplete: {\n variant: 'underlined',\n density: 'compact',\n color: 'primary',\n clearOnSelect: true,\n },\n VCombobox: {\n variant: 'underlined',\n density: 'compact',\n color: 'primary',\n },\n VNumberInput: {\n variant: 'underlined',\n density: 'compact',\n color: 'primary',\n },\n VSwitch: {\n color: 'success',\n density: 'compact',\n },\n VCard: {\n variant: 'flat',\n },\n VDialog: {\n noClickAnimation: true,\n persistent: true,\n scrollable: true,\n },\n VProgressCircular: {\n color: 'primary',\n },\n VBtn: {\n variant: 'flat',\n },\n ABtnPrimary: {\n variant: 'flat',\n color: 'primary',\n },\n ABtnSecondary: {\n variant: 'outlined',\n color: 'primary',\n },\n ABtnTertiary: {\n variant: 'text',\n color: 'primary',\n },\n ABtnIcon: {\n variant: 'text',\n icon: true,\n },\n }\n }\n\n const commonAliases = () => {\n return {\n ABtnPrimary: VBtn as any,\n ABtnSecondary: VBtn as any,\n ABtnTertiary: VBtn as any,\n ABtnIcon: VBtn as any,\n AChipNoLink: VChip as any,\n }\n }\n\n return {\n commonAliases,\n commonDefaults,\n commonTheme,\n }\n}\n","type Prev = [never, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ...0[]]\n\ntype Join<K, P> = K extends string | number\n ? P extends string | number\n ? `${K}${'' extends P ? '' : '.'}${P}`\n : never\n : never\n\nexport type ObjectPaths<T, D extends number = 10> = [D] extends [never]\n ? never\n : T extends object\n ? {\n [K in keyof T]-?: K extends string | number ? `${K}` | Join<K, ObjectPaths<T[K], Prev[D]>> : never\n }[keyof T]\n : ''\n\nexport type ObjectLeaves<T, D extends number = 10> = [D] extends [never]\n ? never\n : T extends object\n ? { [K in keyof T]-?: Join<K, ObjectLeaves<T[K], Prev[D]>> }[keyof T]\n : ''\n\nexport type Prettify<T> = {\n [K in keyof T]: T[K]\n} & {}\n\nexport type UniqueValues<T extends Record<string, any>> = {\n [K in keyof T]: Exclude<T[K], T[Exclude<keyof T, K>]>\n}\n\nexport function ensureUniqueValues<T extends Record<string, any>>(obj: UniqueValues<T>): UniqueValues<T> {\n return obj\n}\n","export async function loadCommonFonts() {\n const webfontloader = await import('webfontloader')\n\n webfontloader.load({\n google: {\n families: ['Roboto:100,300,400,500,700,900&display=swap'],\n },\n // urls: ['https://cdn.jsdelivr.net/npm/@mdi/font@5.x/css/materialdesignicons.min.css']\n })\n}\n","import type { JobBase, JobUserDataDelete } from '@/types/Job'\nimport { JobStatusDefault } from '@/model/valueObject/JobStatus'\nimport { dateTimeNow } from '@/utils/datetime'\nimport type { JobBaseResource } from '@/model/valueObject/JobBaseResource'\n\nexport function useCommonJobFactory() {\n const createBase = (resourceName: JobBaseResource, system: string): JobBase => {\n return {\n id: 0,\n scheduledAt: dateTimeNow(),\n priority: 1,\n status: JobStatusDefault,\n result: '',\n batchProcessedIterationCount: 0,\n finishedAt: null,\n startedAt: null,\n lastBatchProcessedRecord: '',\n createdAt: dateTimeNow(),\n modifiedAt: dateTimeNow(),\n createdBy: null,\n modifiedBy: null,\n _resourceName: resourceName,\n _system: system,\n }\n }\n\n const createUserDataDelete = (system: string): JobUserDataDelete => {\n return {\n ...createBase('jobUserDataDelete', system),\n ...{\n targetUserId: null,\n anonymizeUser: false,\n },\n }\n }\n\n return {\n createBase,\n createUserDataDelete,\n }\n}\n","import { readonly, ref } from 'vue'\nimport type { RouteLocationNormalized } from 'vue-router'\nimport { isNull } from '@/utils/common'\nimport { stringToInt } from '@/utils/string'\n\nexport const LoginState = {\n Success: 'success',\n FailureSsoCommunicationFailed: 'failure-sso-communication',\n FailureInternalError: 'failure-internal-error',\n FailureUnauthorized: 'failure-unauthorized',\n} as const\nexport type JobStatusType = (typeof LoginState)[keyof typeof LoginState]\n\nconst status = ref<string | null>(null)\nconst serverTimestamp = ref<number | null>(null)\nexport const localTimeShiftInSeconds = ref<number>(0)\n\nexport function useLoginStatus(to: RouteLocationNormalized) {\n if (to.query.loginState) {\n status.value = to.query.loginState.toString()\n serverTimestamp.value = stringToInt(to.query.timestamp)\n const localTime = Math.floor(Date.now() / 1000)\n if (serverTimestamp.value) {\n const localTimeDiff = serverTimestamp.value - localTime\n /**\n * If the server time is ahead of the user’s local time by more than the one-minute grace period,\n * we need to store that time shift so we can refresh the token sooner.\n */\n if (localTimeDiff > 60) {\n localTimeShiftInSeconds.value = localTimeDiff - 60\n }\n }\n }\n\n const isStatusNotDefined = () => isNull(status.value)\n const isStatusLoginSuccess = () => status.value === LoginState.Success\n const isStatusSsoCommunicationFailure = () => status.value === LoginState.FailureSsoCommunicationFailed\n const isStatusInternalErrorFailure = () => status.value === LoginState.FailureInternalError\n const isStatusUnauthorized = () => status.value === LoginState.FailureUnauthorized\n\n return {\n status: readonly(status),\n serverTimestamp: readonly(serverTimestamp),\n isStatusNotDefined,\n isStatusLoginSuccess,\n isStatusSsoCommunicationFailure,\n isStatusInternalErrorFailure,\n isStatusUnauthorized,\n }\n}\n","import type { AxiosInstance } from 'axios'\nimport { apiFetchOne } from '@/services/api/apiFetchOne'\nimport type { DamCurrentUserDto } from '@/types/coreDam/DamCurrentUser'\n\nconst END_POINT = '/adm/users/current'\n\nexport const fetchDamCurrentUser = (client: () => AxiosInstance) =>\n apiFetchOne<DamCurrentUserDto>(client, END_POINT, {}, 'coreDam', 'user')\n","import type {\n CollabRoom,\n CollabRoomData,\n CollabRoomInfo,\n CollabRoomLocks,\n CollabRoomPlainData,\n} from '@/components/collab/types/Collab'\nimport { CollabStatus } from '@/components/collab/types/Collab'\nimport { io } from 'socket.io-client'\nimport {\n useCollabApprovedJoinRequestEventBus,\n useCollabApprovedRequestToTakeModerationEventBus,\n useCollabJoinRequestEventBus,\n useCollabKickedFromRoomEventBus,\n useCollabReconnectEventBus,\n useCollabRejectedJoinRequestEventBus,\n useCollabRejectedRequestToTakeModerationEventBus,\n useCollabRequestToTakeModerationEventBus,\n useCollabRoomDataChangeEventBus,\n useCollabStartingEventBus,\n} from '@/components/collab/composables/collabEventBus'\nimport { useCollabState } from '@/components/collab/composables/collabState'\nimport { useAlerts } from '@/composables/system/alerts'\nimport { useCommonAdminCollabOptions } from '@/components/collab/composables/commonAdminCollabOptions'\nimport { useSentry } from '@/services/sentry'\nimport { isNull } from '@/utils/common'\n\nexport function useCollabInit() {\n const { collabOptions } = useCommonAdminCollabOptions()\n const { showWarningT, showSuccessT } = useAlerts()\n const { collabConnected, collabSocket, collabRoomInfoState, collabFieldLocksState } = useCollabState()\n\n const { logError } = useSentry()\n\n let authorizationReconnectTriggered = false\n\n const initCollab = () => {\n const changeEventBus = useCollabRoomDataChangeEventBus()\n const reconnectEventBus = useCollabReconnectEventBus()\n const collabStartingEventBus = useCollabStartingEventBus()\n const requestAccessEventBus = useCollabJoinRequestEventBus()\n const approvedJoinRequestEventBus = useCollabApprovedJoinRequestEventBus()\n const rejectedJoinRequestEventBus = useCollabRejectedJoinRequestEventBus()\n const requestToTakeModerationEventBus = useCollabRequestToTakeModerationEventBus()\n const approvedRequestToTakeModerationEventBus = useCollabApprovedRequestToTakeModerationEventBus()\n const rejectedRequestToTakeModerationEventBus = useCollabRejectedRequestToTakeModerationEventBus()\n const kickedFromRoomEventBus = useCollabKickedFromRoomEventBus()\n\n if (collabSocket.value || !collabOptions.value.enabled) {\n return\n }\n\n try {\n collabSocket.value = io(collabOptions.value.socketUrl, {\n transports: ['websocket'],\n path: '/ws',\n forceNew: true,\n })\n collabSocket.value.on('collabRoomChanged', (room: CollabRoomInfo) => {\n try {\n if (collabRoomInfoState.has(room.name)) {\n collabRoomInfoState.set(room.name, room)\n }\n } catch (error) {\n console.error('error', error)\n }\n })\n collabSocket.value.on('collabRoomLocksChanged', (room: CollabRoom, locks: CollabRoomLocks | null) => {\n if (!isNull(locks)) {\n const locksEntries = Object.entries(locks)\n if (!collabFieldLocksState.has(room) || Object.keys(locks).length === 0) {\n collabFieldLocksState.set(room, new Map(locksEntries))\n }\n for (const [field, lock] of locksEntries) {\n if (!lock) {\n collabFieldLocksState.get(room)?.delete(field)\n continue\n }\n collabFieldLocksState.get(room)?.set(field, lock)\n }\n }\n })\n collabSocket.value.on('collabRoomDataChanged', (room: CollabRoom, data: CollabRoomData) => {\n const dataEntries = Object.entries(data)\n for (const [field, fieldData] of dataEntries) {\n changeEventBus.emit({ room, field }, fieldData)\n }\n })\n collabSocket.value?.on('requestToJoin', (room: CollabRoom, userId: number, timestamp: number) => {\n requestAccessEventBus.emit({ room, userId, timestamp })\n })\n collabSocket.value?.on('approvedRequestToJoin', (room: CollabRoom) => {\n approvedJoinRequestEventBus.emit({ room })\n })\n collabSocket.value?.on('rejectedRequestToJoin', (room: CollabRoom) => {\n rejectedJoinRequestEventBus.emit({ room })\n })\n collabSocket.value?.on('requestToTakeModeration', (room: CollabRoom, userId: number, timestamp: number) => {\n requestToTakeModerationEventBus.emit({ room, userId, timestamp })\n })\n collabSocket.value?.on('approvedRequestToTakeModeration', (room: CollabRoom) => {\n approvedRequestToTakeModerationEventBus.emit({ room })\n })\n collabSocket.value?.on('rejectedRequestToTakeModeration', (room: CollabRoom) => {\n rejectedRequestToTakeModerationEventBus.emit({ room })\n })\n collabSocket.value?.on('transferredModeration', () => {\n showSuccessT('common.collab.alert.transferredModeration')\n })\n collabSocket.value?.on('kickedFromRoom', (room: CollabRoom) => {\n showWarningT('common.collab.alert.kickedFromRoom')\n kickedFromRoomEventBus.emit({ room })\n })\n collabSocket.value?.on('startCollab', async (room, callback: (data: CollabRoomPlainData) => void) => {\n collabStartingEventBus.emit({ room, startedCallback: callback })\n })\n collabSocket.value.on('connect', async () => {\n collabRoomInfoState.clear()\n const connectedBefore = collabConnected.value\n collabConnected.value = collabSocket.value?.connected ?? false\n if (!connectedBefore) {\n await collabOptions.value.beforeReconnect()\n reconnectEventBus.emit('reconnect')\n }\n })\n collabSocket.value.on('connect_error', async (error) => {\n if (!authorizationReconnectTriggered) {\n authorizationReconnectTriggered = true\n await collabOptions.value.beforeReconnect()\n collabSocket.value?.connect()\n return\n }\n collabConnected.value = collabSocket.value?.connected ?? false\n logError(error, { level: 'error', message: 'Collab connect_error' })\n })\n collabSocket.value.on('disconnect', async (reason) => {\n collabRoomInfoState.forEach((roomInfo: CollabRoomInfo) => (roomInfo.status = CollabStatus.Inactive))\n collabConnected.value = collabSocket.value?.connected ?? false\n if (reason === 'io server disconnect') {\n await collabOptions.value.beforeReconnect()\n collabSocket.value?.connect()\n }\n })\n } catch (error) {\n logError(error as any, { level: 'error', message: 'Collab init error' })\n }\n }\n\n return {\n initCollab,\n }\n}\n","import type { CollabFieldName, CollabRoom } from '@/components/collab/types/Collab'\nimport type { DocId, IntegerId } from '@/types/common'\nimport type { CachedItem } from '@/composables/system/defineCached'\nimport type { AnzuUserMinimal } from '@/types/AnzuUser'\n\nexport const COLLAB_FIELD_PREFIX_EMBED = 'embed:'\nexport const COLLAB_FIELD_PREFIX_COMMENT = 'comment:'\n\nexport type CollabCachedUsersMap = Map<IntegerId, CachedItem<AnzuUserMinimal>>\n\nexport function useCollabHelpers() {\n const createCollabRoom = (id: IntegerId | DocId, entity: string, system: string) => {\n return (system + ':' + entity + ':' + id) as CollabRoom\n }\n\n const createCollabFieldConfig = (name: CollabFieldName, room: CollabRoom, cachedUsers: CollabCachedUsersMap) => {\n return { room, field: name, cachedUsers }\n }\n\n const createCollabEmbedFieldName = (id: DocId) => {\n return (COLLAB_FIELD_PREFIX_EMBED + id) as CollabFieldName\n }\n\n const createCollabCommentFieldName = (id: DocId) => {\n return (COLLAB_FIELD_PREFIX_COMMENT + id) as CollabFieldName\n }\n\n return {\n createCollabRoom,\n createCollabFieldConfig,\n createCollabEmbedFieldName,\n createCollabCommentFieldName,\n }\n}\n","import {\n type CollabChangeRoomLockCallbackTypes,\n type CollabFieldData,\n type CollabFieldDataEnvelope,\n type CollabFieldLockOptions,\n type CollabFieldName,\n type CollabRoom,\n CollabStatus,\n isCollabFailedChangeRoomLockCallback,\n isCollabSuccessChangeRoomLockCallback,\n} from '@/components/collab/types/Collab'\nimport { type MaybeRef, ref, unref } from 'vue'\nimport {\n CollabFieldLockStatus,\n type CollabFieldLockStatusEvent,\n CollabFieldLockType,\n type CollabRoomDataChangedEvent,\n createFieldLockStatusPayload,\n useCollabFieldLockStatusEventBus,\n useCollabRoomDataChangeEventBus,\n} from '@/components/collab/composables/collabEventBus'\nimport { type Fn, tryOnBeforeUnmount } from '@vueuse/core'\nimport { useCommonAdminCollabOptions } from '@/components/collab/composables/commonAdminCollabOptions'\nimport { useCollabState } from '@/components/collab/composables/collabState'\nimport { cloneDeep, isDefined, isUndefined } from '@/utils/common'\nimport { objectSetValueByPath } from '@/utils/object'\n\nexport function useCollabAnyDataChange(room: CollabRoom, disableAutoUnsubscribe = false) {\n const { collabOptions } = useCommonAdminCollabOptions()\n const { collabSocket, collabFieldLocksState, collabFieldDataBufferState, collabRoomInfoState } = useCollabState()\n const changeEventBus = useCollabRoomDataChangeEventBus()\n const fieldLockStatusEventBus = useCollabFieldLockStatusEventBus()\n\n const anyChangeCallback = ref<undefined | ((field: CollabFieldName, payload: CollabFieldDataEnvelope) => void)>()\n const unsubscribeCollabAnyDataChangeListener = ref<undefined | Fn>()\n\n const anyChangeEventBusListener = (event: CollabRoomDataChangedEvent, payload?: CollabFieldDataEnvelope) => {\n if (event.room !== room || isUndefined(payload) || isUndefined(anyChangeCallback.value)) {\n return\n }\n anyChangeCallback.value(event.field, payload)\n }\n\n const addCollabAnyDataChangeListener = (\n callback: (field: CollabFieldName, data: CollabFieldDataEnvelope) => void\n ) => {\n anyChangeCallback.value = callback\n unsubscribeCollabAnyDataChangeListener.value = changeEventBus.on(anyChangeEventBusListener)\n }\n\n const changeCollabAnyData = (field: CollabFieldName, data: CollabFieldData, callback: Fn | undefined = undefined) => {\n if (!collabOptions.value.enabled || isUndefined(collabSocket.value)) return\n const roomInfo = collabRoomInfoState.get(room)\n if (roomInfo && roomInfo.status === CollabStatus.Inactive) return\n collabSocket.value.emit('changeFieldData', room, field, data, () => {\n if (!isUndefined(callback)) callback()\n })\n }\n\n const objectSetDataByField = <T extends object>(\n field: CollabFieldName,\n data: CollabFieldDataEnvelope,\n objectToUpdate: MaybeRef<T>\n ) => {\n const object = unref(objectToUpdate)\n switch (data.type) {\n case 'json':\n {\n objectSetValueByPath(object, field, cloneDeep(data.value))\n }\n break\n default: {\n objectSetValueByPath(object, field, data.value)\n }\n }\n }\n\n tryOnBeforeUnmount(() => {\n if (disableAutoUnsubscribe) return\n if (isDefined(unsubscribeCollabAnyDataChangeListener.value)) {\n unsubscribeCollabAnyDataChangeListener.value()\n }\n })\n\n const acquireCollabAnyLock = (field: CollabFieldName, options: Partial<CollabFieldLockOptions> = {}) => {\n if (!collabOptions.value.enabled || isUndefined(collabSocket.value)) return\n const roomInfo = collabRoomInfoState.get(room)\n if (roomInfo && roomInfo.status === CollabStatus.Inactive) return\n collabSocket.value\n ?.timeout(1000)\n .emit('acquireFieldLock', room, field, options, (error, response: CollabChangeRoomLockCallbackTypes) => {\n const statusEvent: CollabFieldLockStatusEvent = { field, room }\n if (error || isCollabFailedChangeRoomLockCallback(response)) {\n return void fieldLockStatusEventBus.emit(\n statusEvent,\n createFieldLockStatusPayload(CollabFieldLockType.Acquire, CollabFieldLockStatus.Failure)\n )\n }\n if (isCollabSuccessChangeRoomLockCallback(response)) {\n if (!collabFieldLocksState.has(room)) {\n collabFieldLocksState.set(room, new Map())\n }\n const locks = new Map(response.locks ? Object.entries(response.locks) : [])\n for (const [field, lock] of locks.entries()) {\n collabFieldLocksState.get(room)?.set(field, lock)\n }\n\n return void fieldLockStatusEventBus.emit(\n statusEvent,\n createFieldLockStatusPayload(CollabFieldLockType.Acquire, CollabFieldLockStatus.Success)\n )\n }\n })\n }\n\n const releaseCollabAnyLock = (\n field: CollabFieldName,\n data: CollabFieldData,\n options: Partial<CollabFieldLockOptions> = {}\n ) => {\n if (!collabOptions.value.enabled || isUndefined(collabSocket.value)) return\n const roomInfo = collabRoomInfoState.get(room)\n if (roomInfo && roomInfo.status === CollabStatus.Inactive) {\n if (!collabFieldDataBufferState.has(room)) {\n collabFieldDataBufferState.set(room, new Map())\n }\n collabFieldDataBufferState.get(room)?.set(field, data)\n return\n }\n collabSocket.value\n ?.timeout(1000)\n .emit('releaseFieldLock', room, field, data, options, (error, response: CollabChangeRoomLockCallbackTypes) => {\n const statusEvent: CollabFieldLockStatusEvent = { field, room }\n if (error || isCollabFailedChangeRoomLockCallback(response)) {\n return void fieldLockStatusEventBus.emit(\n statusEvent,\n createFieldLockStatusPayload(CollabFieldLockType.Release, CollabFieldLockStatus.Failure)\n )\n }\n if (isCollabSuccessChangeRoomLockCallback(response)) {\n if (!collabFieldLocksState.has(room)) {\n collabFieldLocksState.set(room, new Map())\n }\n if (response.locks) {\n for (const field of Object.keys(response.locks)) {\n collabFieldLocksState.get(room)?.delete(field)\n }\n }\n\n return void fieldLockStatusEventBus.emit(\n statusEvent,\n createFieldLockStatusPayload(CollabFieldLockType.Release, CollabFieldLockStatus.Success)\n )\n }\n })\n }\n\n return {\n addCollabAnyDataChangeListener,\n unsubscribeCollabAnyDataChangeListener,\n changeCollabAnyData,\n objectSetDataByField,\n acquireCollabAnyLock,\n releaseCollabAnyLock,\n }\n}\n","import type { AxiosInstance } from 'axios'\nimport { apiFetchByIds } from '@/services/api/apiFetchByIds'\nimport { SYSTEM_CORE_DAM } from '@/components/damImage/uploadQueue/api/damAssetApi'\nimport type { DamAssetLicence } from '@/types/coreDam/AssetLicence'\nimport type { IntegerId } from '@/types/common'\nimport { useApiFetchList } from '@/labs/api/useApiFetchList'\n// eslint-disable-next-line deprecation/no-deprecated-imports\nimport { apiFetchList } from '@/services/api/apiFetchList'\nimport type { Pagination } from '@/types/Pagination'\n// eslint-disable-next-line deprecation/no-deprecated-imports\nimport type { FilterBag } from '@/types/Filter'\n\nconst END_POINT = '/adm/v1/asset-licence'\nexport const ENTITY = 'assetLicence'\n\nexport const fetchDamAssetLicenceListByIds = (client: () => AxiosInstance, ids: IntegerId[]) =>\n apiFetchByIds<DamAssetLicence[]>(client, ids, END_POINT, {}, SYSTEM_CORE_DAM, ENTITY)\n\nexport const useFetchDamAssetLicenceList = (client: () => AxiosInstance) =>\n useApiFetchList<DamAssetLicence[]>(client, SYSTEM_CORE_DAM, ENTITY, END_POINT)\n\n/**\n * @deprecated\n */\nexport const fetchDamAssetLicenceList = (client: () => AxiosInstance, pagination: Pagination, filterBag: FilterBag) =>\n apiFetchList<DamAssetLicence[]>(client, END_POINT, {}, pagination, filterBag, SYSTEM_CORE_DAM, ENTITY)\n","import { SYSTEM_CORE_DAM } from '@/components/damImage/uploadQueue/api/damAssetApi'\nimport { ENTITY } from '@/components/dam/user/assetLicenceApi'\nimport { createFilter, createFilterStore, type MakeFilterOption } from '@/labs/filters/filterFactory'\nimport { reactive } from 'vue'\n// eslint-disable-next-line deprecation/no-deprecated-imports\nimport { makeFilterHelper } from '@/composables/filter/filterHelpers'\n\nexport function useDamAssetLicenceInnerFilter() {\n const filterFieldsInner = [\n { name: 'name' as const, variant: 'startsWith', default: null, type: 'string' },\n { name: 'extSystem' as const, default: null },\n { name: 'extId' as const, default: null },\n ] satisfies readonly MakeFilterOption[]\n\n const { filterConfig, filterData } = createFilter(filterFieldsInner, createFilterStore(filterFieldsInner), {\n system: SYSTEM_CORE_DAM,\n subject: ENTITY,\n })\n\n return {\n filterConfig,\n filterData,\n }\n}\n\nconst makeFilter = makeFilterHelper(SYSTEM_CORE_DAM, ENTITY)\n/**\n * @deprecated\n */\nexport function useDamAssetLicenceFilter() {\n return reactive({\n name: {\n ...makeFilter({ name: 'name', variant: 'startsWith' }),\n },\n extSystem: {\n ...makeFilter({ name: 'extSystem', default: null }),\n },\n extId: {\n ...makeFilter({ name: 'extId', default: null }),\n },\n })\n}\n","import type { DamAssetLicence } from '@/types/coreDam/AssetLicence'\nimport type { ValueObjectOption } from '@/types/ValueObject'\nimport type { Pagination } from '@/labs/filters/pagination'\nimport { fetchDamAssetLicenceListByIds, useFetchDamAssetLicenceList } from '@/components/dam/user/assetLicenceApi'\nimport type { AxiosInstance } from 'axios'\nimport type { IntegerId } from '@/types/common'\nimport type { Ref } from 'vue'\nimport type { FilterConfig, FilterData } from '@/labs/filters/filterFactory'\n\nexport const useAssetLicenceSelectActions = (client: () => AxiosInstance) => {\n const { executeFetch } = useFetchDamAssetLicenceList(client)\n\n const mapToValueObjectOption = (assetLicences: DamAssetLicence[]): ValueObjectOption<IntegerId>[] => {\n return assetLicences.map((assetLicence: DamAssetLicence) => ({\n title: assetLicence.name,\n value: assetLicence.id,\n }))\n }\n\n const fetchItems = async (pagination: Ref<Pagination>, filterData: FilterData, filterConfig: FilterConfig) => {\n return mapToValueObjectOption(await executeFetch(pagination, filterData, filterConfig))\n }\n\n const fetchItemsByIds = async (ids: IntegerId[]) => {\n return mapToValueObjectOption(await fetchDamAssetLicenceListByIds(client, ids))\n }\n\n return {\n fetchItems,\n fetchItemsByIds,\n }\n}\n","<script lang=\"ts\" setup>\nimport { computed, provide, watch } from 'vue'\nimport type { IntegerId } from '@/types/common'\nimport { cloneDeep } from '@/utils/common'\nimport AFormRemoteAutocomplete from '@/labs/form/AFormRemoteAutocomplete.vue'\nimport { useDamAssetLicenceInnerFilter } from '@/components/dam/user/AssetLicenceFilter'\nimport { useAssetLicenceSelectActions } from '@/components/dam/user/assetLicenceActions'\nimport type { AxiosInstance } from 'axios'\nimport type { ValueObjectOption } from '@/types/ValueObject'\nimport { FilterInnerConfigKey, FilterInnerDataKey } from '@/labs/filters/filterInjectionKeys'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: IntegerId | null | IntegerId[] | any\n client: () => AxiosInstance\n label?: string | undefined\n required?: boolean | undefined\n multiple?: boolean\n clearable?: boolean\n dataCy?: string\n extSystemId?: IntegerId | null\n hideDetails?: boolean\n }>(),\n {\n label: undefined,\n required: undefined,\n multiple: false,\n clearable: false,\n dataCy: '',\n extSystemId: null,\n hideDetails: undefined,\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: IntegerId | null | IntegerId[] | any): void\n}>()\n\nconst modelValueComputed = computed({\n get() {\n return props.modelValue\n },\n set(newValue: IntegerId | null | IntegerId[] | any) {\n emit('update:modelValue', cloneDeep<IntegerId | null | IntegerId[] | any>(newValue))\n },\n})\n\nconst selected = defineModel<ValueObjectOption<IntegerId>[]>('selected', { required: false, default: () => [] })\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { fetchItems, fetchItemsByIds } = useAssetLicenceSelectActions(props.client)\n\nconst { filterData, filterConfig } = useDamAssetLicenceInnerFilter()\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nfilterData.extSystem = props.extSystemId\nprovide(FilterInnerConfigKey, filterConfig)\nprovide(FilterInnerDataKey, filterData)\n\nwatch(\n () => props.extSystemId,\n (newValue, oldValue) => {\n if (newValue === oldValue) return\n modelValueComputed.value = props.multiple ? [] : null\n filterData.extSystem = newValue\n }\n)\n</script>\n\n<template>\n <AFormRemoteAutocomplete\n :key=\"extSystemId + ''\"\n v-model=\"modelValueComputed\"\n v-model:selected=\"selected\"\n :required=\"required\"\n :label=\"label\"\n :fetch-items=\"fetchItems\"\n :fetch-items-by-ids=\"fetchItemsByIds\"\n :multiple=\"multiple\"\n :clearable=\"clearable\"\n filter-by-field=\"name\"\n :data-cy=\"dataCy\"\n :hide-details=\"hideDetails\"\n prefetch=\"hover\"\n />\n</template>\n","import type { AxiosInstance } from 'axios'\nimport { apiFetchByIds } from '@/services/api/apiFetchByIds'\nimport { SYSTEM_CORE_DAM } from '@/components/damImage/uploadQueue/api/damAssetApi'\nimport type { IntegerId } from '@/types/common'\nimport type { DamAssetLicenceGroup } from '@/types/coreDam/AssetLicenceGroup'\nimport { useApiFetchList } from '@/labs/api/useApiFetchList'\nimport type { Pagination } from '@/types/Pagination'\n// eslint-disable-next-line deprecation/no-deprecated-imports\nimport type { FilterBag } from '@/types/Filter'\n// eslint-disable-next-line deprecation/no-deprecated-imports\nimport { apiFetchList } from '@/services/api/apiFetchList'\n\nconst END_POINT = '/adm/v1/asset-licence-group'\nexport const ENTITY = 'assetLicenceGroup'\n\nexport const fetchDamAssetLicenceGroupListByIds = (client: () => AxiosInstance, ids: IntegerId[]) =>\n apiFetchByIds<DamAssetLicenceGroup[]>(client, ids, END_POINT, {}, SYSTEM_CORE_DAM, ENTITY, {}, false)\n\nexport const useFetchDamAssetLicenceGroupList = (client: () => AxiosInstance) =>\n useApiFetchList<DamAssetLicenceGroup[]>(client, SYSTEM_CORE_DAM, ENTITY, END_POINT)\n\n/**\n * @deprecated\n */\nexport const fetchDamAssetLicenceGroupList = (\n client: () => AxiosInstance,\n pagination: Pagination,\n filterBag: FilterBag\n) => apiFetchList<DamAssetLicenceGroup[]>(client, END_POINT, {}, pagination, filterBag, SYSTEM_CORE_DAM, ENTITY)\n","import type { ValueObjectOption } from '@/types/ValueObject'\nimport type { Pagination } from '@/labs/filters/pagination'\nimport type { AxiosInstance } from 'axios'\nimport type { IntegerId } from '@/types/common'\nimport type { DamAssetLicenceGroup } from '@/types/coreDam/AssetLicenceGroup'\nimport {\n fetchDamAssetLicenceGroupListByIds,\n useFetchDamAssetLicenceGroupList,\n} from '@/components/dam/user/assetLicenceGroupApi'\nimport type { Ref } from 'vue'\nimport type { FilterConfig, FilterData } from '@/labs/filters/filterFactory'\n\nexport const useAssetLicenceGroupSelectActions = (client: () => AxiosInstance) => {\n const { executeFetch } = useFetchDamAssetLicenceGroupList(client)\n\n const mapToValueObjectOption = (assetLicenceGroups: DamAssetLicenceGroup[]): ValueObjectOption<IntegerId>[] => {\n return assetLicenceGroups.map((assetLicence: DamAssetLicenceGroup) => ({\n title: assetLicence.name,\n value: assetLicence.id,\n }))\n }\n\n const fetchItems = async (pagination: Ref<Pagination>, filterData: FilterData, filterConfig: FilterConfig) => {\n return mapToValueObjectOption(await executeFetch(pagination, filterData, filterConfig))\n }\n\n const fetchItemsByIds = async (ids: number[]) => {\n return mapToValueObjectOption(await fetchDamAssetLicenceGroupListByIds(client, ids))\n }\n\n return {\n fetchItems,\n fetchItemsByIds,\n }\n}\n","import { SYSTEM_CORE_DAM } from '@/components/damImage/uploadQueue/api/damAssetApi'\nimport { ENTITY } from '@/components/dam/user/assetLicenceGroupApi'\nimport { createFilter, createFilterStore, type MakeFilterOption } from '@/labs/filters/filterFactory'\n\nexport function useDamAssetLicenceGroupInnerFilter() {\n const filterFieldsInner = [\n { name: 'name' as const, variant: 'startsWith', default: null, type: 'string' },\n ] satisfies readonly MakeFilterOption[]\n\n const { filterConfig, filterData } = createFilter(filterFieldsInner, createFilterStore(filterFieldsInner), {\n system: SYSTEM_CORE_DAM,\n subject: ENTITY,\n })\n\n return {\n filterConfig,\n filterData,\n }\n}\n","<script lang=\"ts\" setup>\nimport { computed, provide } from 'vue'\nimport type { IntegerId } from '@/types/common'\nimport type { AxiosInstance } from 'axios'\nimport { cloneDeep } from '@/utils/common'\nimport type { ValueObjectOption } from '@/types/ValueObject'\nimport AFormRemoteAutocomplete from '@/labs/form/AFormRemoteAutocomplete.vue'\nimport { useAssetLicenceGroupSelectActions } from '@/components/dam/user/assetLicenceGroupActions'\nimport { useDamAssetLicenceGroupInnerFilter } from '@/components/dam/user/AssetLicenceGroupFilter'\nimport { FilterInnerConfigKey, FilterInnerDataKey } from '@/labs/filters/filterInjectionKeys'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: IntegerId | null | IntegerId[] | any\n client: () => AxiosInstance\n label?: string | undefined\n required?: boolean | undefined\n multiple?: boolean\n clearable?: boolean\n dataCy?: string\n hideDetails?: boolean\n }>(),\n {\n label: undefined,\n required: undefined,\n multiple: false,\n clearable: false,\n dataCy: '',\n hideDetails: undefined,\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: IntegerId | null | IntegerId[] | any): void\n}>()\n\nconst modelValueComputed = computed({\n get() {\n return props.modelValue\n },\n set(newValue: IntegerId | null | IntegerId[] | any) {\n emit('update:modelValue', cloneDeep<IntegerId | null | IntegerId[] | any>(newValue))\n },\n})\n\nconst selected = defineModel<ValueObjectOption<IntegerId>[]>('selected', { required: false, default: () => [] })\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { fetchItems, fetchItemsByIds } = useAssetLicenceGroupSelectActions(props.client)\n\nconst { filterData, filterConfig } = useDamAssetLicenceGroupInnerFilter()\nprovide(FilterInnerConfigKey, filterConfig)\nprovide(FilterInnerDataKey, filterData)\n</script>\n\n<template>\n <AFormRemoteAutocomplete\n v-model=\"modelValueComputed\"\n v-model:selected=\"selected\"\n :required=\"required\"\n :label=\"label\"\n :fetch-items=\"fetchItems\"\n :fetch-items-by-ids=\"fetchItemsByIds\"\n :multiple=\"multiple\"\n :clearable=\"clearable\"\n filter-by-field=\"name\"\n :data-cy=\"dataCy\"\n :hide-details=\"hideDetails\"\n prefetch=\"hover\"\n />\n</template>\n","import type { DamExtSystem } from '@/components/damImage/uploadQueue/composables/DamExtSystem'\nimport { apiFetchByIds } from '@/services/api/apiFetchByIds'\nimport type { AxiosInstance } from 'axios'\nimport { SYSTEM_CORE_DAM } from '@/components/damImage/uploadQueue/api/damAssetApi'\nimport type { IntegerId } from '@/types/common'\nimport { useApiFetchList } from '@/labs/api/useApiFetchList'\n// eslint-disable-next-line deprecation/no-deprecated-imports\nimport { apiFetchList } from '@/services/api/apiFetchList'\n// eslint-disable-next-line deprecation/no-deprecated-imports\nimport type { FilterBag } from '@/types/Filter'\nimport type { Pagination } from '@/types/Pagination'\n\nconst END_POINT = '/adm/v1/ext-system'\nexport const ENTITY = 'extSystem'\n\nexport const fetchDamExtSystemListByIds = (client: () => AxiosInstance, ids: IntegerId[]) =>\n apiFetchByIds<DamExtSystem[]>(client, ids, END_POINT, {}, SYSTEM_CORE_DAM, ENTITY)\n\nexport const useFetchDamExtSystemList = (client: () => AxiosInstance) =>\n useApiFetchList<DamExtSystem[]>(client, SYSTEM_CORE_DAM, ENTITY, END_POINT)\n\n/**\n * @deprecated\n */\nexport const fetchDamExtSystemList = (client: () => AxiosInstance, pagination: Pagination, filterBag: FilterBag) =>\n apiFetchList<DamExtSystem[]>(client, END_POINT, {}, pagination, filterBag, SYSTEM_CORE_DAM, ENTITY)\n","import type { Pagination } from '@/labs/filters/pagination'\nimport type { ValueObjectOption } from '@/types/ValueObject'\nimport type { DamExtSystem } from '@/components/damImage/uploadQueue/composables/DamExtSystem'\nimport type { AxiosInstance } from 'axios'\nimport { fetchDamExtSystemListByIds, useFetchDamExtSystemList } from '@/components/dam/user/extSystemApi'\nimport type { IntegerId } from '@/types/common'\nimport type { Ref } from 'vue'\nimport type { FilterConfig, FilterData } from '@/labs/filters/filterFactory'\n\nexport const useExtSystemSelectActions = (client: () => AxiosInstance) => {\n const { executeFetch } = useFetchDamExtSystemList(client)\n\n const fetchItems = async (pagination: Ref<Pagination>, filterData: FilterData, filterConfig: FilterConfig) => {\n const extSystems = await executeFetch(pagination, filterData, filterConfig)\n\n return <ValueObjectOption<IntegerId>[]>extSystems.map((extSystem: DamExtSystem) => ({\n title: extSystem.slug,\n value: extSystem.id,\n }))\n }\n\n const fetchItemsByIds = async (ids: IntegerId[]) => {\n const extSystems = await fetchDamExtSystemListByIds(client, ids)\n\n return <ValueObjectOption<IntegerId>[]>extSystems.map((extSystem: DamExtSystem) => ({\n title: extSystem.slug,\n value: extSystem.id,\n }))\n }\n\n return {\n fetchItems,\n fetchItemsByIds,\n }\n}\n","import { SYSTEM_CORE_DAM } from '@/components/damImage/uploadQueue/api/damAssetApi'\nimport { ENTITY } from '@/components/dam/user/extSystemApi'\nimport { createFilter, createFilterStore, type MakeFilterOption } from '@/labs/filters/filterFactory'\n\nexport function useExtSystemInnerFilter() {\n const filterFieldsInner = [\n { name: 'name' as const, variant: 'startsWith', default: null, type: 'string' },\n ] satisfies readonly MakeFilterOption[]\n\n const { filterConfig, filterData } = createFilter(filterFieldsInner, createFilterStore(filterFieldsInner), {\n system: SYSTEM_CORE_DAM,\n subject: ENTITY,\n })\n\n return {\n filterConfig,\n filterData,\n }\n}\n","<script lang=\"ts\" setup>\nimport { computed, provide } from 'vue'\nimport { cloneDeep } from '@/utils/common'\nimport AFormRemoteAutocomplete from '@/labs/form/AFormRemoteAutocomplete.vue'\nimport { useExtSystemSelectActions } from '@/components/dam/user/extSystemActions'\nimport { useExtSystemInnerFilter } from '@/components/dam/user/ExtSystemFilter'\nimport type { AxiosInstance } from 'axios'\nimport type { IntegerId } from '@/types/common'\nimport { FilterInnerConfigKey, FilterInnerDataKey } from '@/labs/filters/filterInjectionKeys'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: IntegerId | null | IntegerId[] | any\n client: () => AxiosInstance\n label?: string | undefined\n required?: boolean | undefined\n multiple?: boolean\n clearable?: boolean\n dataCy?: string\n hideDetails?: boolean\n }>(),\n {\n label: undefined,\n required: undefined,\n multiple: false,\n clearable: false,\n dataCy: '',\n hideDetails: undefined,\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: IntegerId | null | IntegerId[] | any): void\n}>()\n\nconst modelValueComputed = computed({\n get() {\n return props.modelValue\n },\n set(newValue: IntegerId | null | IntegerId[] | any) {\n emit('update:modelValue', cloneDeep<IntegerId | null | IntegerId[] | any>(newValue))\n },\n})\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { fetchItems, fetchItemsByIds } = useExtSystemSelectActions(props.client)\n\nconst { filterData, filterConfig } = useExtSystemInnerFilter()\nprovide(FilterInnerConfigKey, filterConfig)\nprovide(FilterInnerDataKey, filterData)\n</script>\n\n<template>\n <AFormRemoteAutocomplete\n v-model=\"modelValueComputed\"\n :required=\"required\"\n :label=\"label\"\n :fetch-items=\"fetchItems\"\n :fetch-items-by-ids=\"fetchItemsByIds\"\n :multiple=\"multiple\"\n :clearable=\"clearable\"\n filter-by-field=\"name\"\n :data-cy=\"dataCy\"\n :hide-details=\"hideDetails\"\n prefetch=\"hover\"\n />\n</template>\n","import { ref } from 'vue'\nimport type { ValueObjectOption } from '@/types/ValueObject'\nimport { useDamConfigStore } from '@/components/damImage/uploadQueue/composables/damConfigStore'\n\nexport function useDamExternalProviderAssetType() {\n const damConfigStore = useDamConfigStore()\n const all = Object.entries(damConfigStore.damPrvConfig.assetExternalProviders).map(\n ([providerName, value]): ValueObjectOption<string> => {\n return {\n value: providerName,\n title: value.title,\n }\n }\n )\n\n const allExternalProviderAssetTypeOptions = ref<ValueObjectOption<string>[]>(all)\n\n const getExternalProviderAssetTypeOption = (value: string) => {\n return allExternalProviderAssetTypeOptions.value.find((item) => item.value === value)\n }\n\n return {\n allExternalProviderAssetTypeOptions,\n getExternalProviderAssetTypeOption,\n }\n}\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { cloneDeep } from '@/utils/common'\nimport { useDamExternalProviderAssetType } from '@/components/dam/user/DamExternalProviderAssetType'\nimport type { AxiosInstance } from 'axios'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: string[]\n client: () => AxiosInstance\n multiple?: boolean\n label?: string\n dataCy?: string\n }>(),\n {\n multiple: false,\n label: undefined,\n dataCy: '',\n }\n)\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: string[]): void\n (e: 'blur', data: string[]): void\n}>()\n\nconst modelValueComputed = computed({\n get() {\n return props.modelValue\n },\n set(newValue: string[]) {\n emit('update:modelValue', cloneDeep<string[]>(newValue))\n },\n})\n\nconst onBlur = () => {\n emit('blur', modelValueComputed.value)\n}\n\nconst { allExternalProviderAssetTypeOptions } = useDamExternalProviderAssetType()\n</script>\n\n<template>\n <VSelect\n v-model=\"modelValueComputed\"\n :items=\"allExternalProviderAssetTypeOptions\"\n item-title=\"title\"\n item-value=\"value\"\n :label=\"label\"\n :multiple=\"multiple\"\n clearable\n chips\n no-filter\n :data-cy=\"dataCy\"\n @blur=\"onBlur\"\n />\n</template>\n","import { ref } from 'vue'\nimport type { ValueObjectOption } from '@/types/ValueObject'\nimport { useDamConfigStore } from '@/components/damImage/uploadQueue/composables/damConfigStore'\n\nexport function useDamDistributionServiceType() {\n const damConfigStore = useDamConfigStore()\n const all = Object.entries(damConfigStore.damPrvConfig.distributionServices).map(\n ([serviceName, value]): ValueObjectOption<string> => {\n return {\n value: serviceName,\n title: value.title,\n }\n }\n )\n\n const allDistributionServiceTypeOptions = ref<ValueObjectOption<string>[]>(all)\n\n const getDistributionServiceTypeOption = (value: string) => {\n return allDistributionServiceTypeOptions.value.find((item) => item.value === value)\n }\n\n return {\n allDistributionServiceTypeOptions,\n getDistributionServiceTypeOption,\n }\n}\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { cloneDeep } from '@/utils/common'\nimport { useDamDistributionServiceType } from '@/components/dam/user/DamDistributionServiceType'\nimport type { AxiosInstance } from 'axios'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: string[]\n client: () => AxiosInstance\n multiple?: boolean\n label?: string\n dataCy?: string\n }>(),\n {\n multiple: false,\n label: undefined,\n dataCy: '',\n }\n)\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: string[]): void\n (e: 'blur', data: string[]): void\n}>()\n\nconst modelValueComputed = computed({\n get() {\n return props.modelValue\n },\n set(newValue: string[]) {\n emit('update:modelValue', cloneDeep<string[]>(newValue))\n },\n})\n\nconst onBlur = () => {\n emit('blur', modelValueComputed.value)\n}\n\nconst { allDistributionServiceTypeOptions } = useDamDistributionServiceType()\n</script>\n\n<template>\n <VSelect\n v-model=\"modelValueComputed\"\n :items=\"allDistributionServiceTypeOptions\"\n item-title=\"title\"\n item-value=\"value\"\n :label=\"label\"\n :multiple=\"multiple\"\n clearable\n no-filter\n chips\n :data-cy=\"dataCy\"\n @blur=\"onBlur\"\n />\n</template>\n","import { type ComputedRef } from 'vue'\nimport type { DocId, IntegerId } from '@/types/common'\n\nexport interface BreadcrumbItem {\n title: string\n routeName: string\n id?: IntegerId | DocId\n routeParams?: any\n}\n\nexport interface Breadcrumbs {\n items: ComputedRef<Array<BreadcrumbItem>>\n options: BreadcrumbOptions\n}\n\nexport interface BreadcrumbOptions {\n linkLastItem: boolean\n}\n\nexport const defaultOptions: BreadcrumbOptions = {\n linkLastItem: false,\n}\n\nexport function defineBreadcrumbs(items: ComputedRef<Array<BreadcrumbItem>>, options: Partial<BreadcrumbOptions> = {}) {\n return {\n items,\n options: {\n ...defaultOptions,\n ...options,\n },\n }\n}\n","<script lang=\"ts\" setup>\n// eslint-disable-next-line deprecation/no-deprecated-imports\nimport type { Filter } from '@/types/Filter'\nimport { useAuthorSelectActions } from '@/components/damImage/uploadQueue/author/authorActions'\nimport { useAuthorFilter } from '@/components/damImage/uploadQueue/author/AuthorFilter'\nimport type { IntegerId } from '@/types/common'\nimport { useI18n } from 'vue-i18n'\nimport AFilterRemoteAutocompleteWithMinimal from '@/components/filter/AFilterRemoteAutocompleteWithMinimal.vue'\n\nconst props = withDefaults(\n defineProps<{\n extSystem: IntegerId\n }>(),\n {}\n)\n\nconst modelValue = defineModel<Filter>({ required: true })\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { fetchItemsMinimalLegacy, fetchItemsMinimalByIds } = useAuthorSelectActions(props.extSystem)\n\nconst innerFilter = useAuthorFilter()\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <AFilterRemoteAutocompleteWithMinimal\n v-model=\"modelValue\"\n :fetch-items-minimal=\"fetchItemsMinimalLegacy\"\n :fetch-items-minimal-by-ids=\"fetchItemsMinimalByIds\"\n :inner-filter=\"innerFilter\"\n filter-by-field=\"text\"\n :filter-sort-by=\"null\"\n >\n <template #item=\"{ props: itemProps, item: itemItem }\">\n <VListItem\n v-bind=\"itemProps\"\n title=\"\"\n >\n <VListItemTitle>\n {{ itemItem.title }}\n <VIcon\n v-if=\"itemItem.raw?.raw?.reviewed || itemItem.raw?.reviewed\"\n icon=\"mdi-shield-check\"\n class=\"text-success ml-1\"\n size=\"small\"\n :title=\"t('common.damImage.author.model.flags.reviewed')\"\n />\n </VListItemTitle>\n </VListItem>\n </template>\n <template #chip=\"{ props: chipProps, item: chipItem }\">\n <VChip v-bind=\"chipProps\">\n {{ chipItem.title }}\n <VIcon\n v-if=\"chipItem.raw?.raw?.reviewed || chipItem.raw?.reviewed\"\n icon=\"mdi-shield-check\"\n class=\"text-success ml-1\"\n size=\"small\"\n :title=\"t('common.damImage.author.model.flags.reviewed')\"\n />\n </VChip>\n </template>\n </AFilterRemoteAutocompleteWithMinimal>\n</template>\n","<script lang=\"ts\" setup>\nimport { useKeywordSelectActions } from '@/components/damImage/uploadQueue/keyword/keywordActions'\nimport { useKeywordListFilter } from '@/components/damImage/uploadQueue/keyword/KeywordFilter'\n// eslint-disable-next-line deprecation/no-deprecated-imports\nimport type { Filter } from '@/types/Filter'\nimport AFilterRemoteAutocomplete from '@/components/filter/AFilterRemoteAutocomplete.vue'\nimport type { IntegerId } from '@/types/common'\n\nconst props = withDefaults(\n defineProps<{\n extSystem: IntegerId\n }>(),\n {}\n)\n\nconst modelValue = defineModel<Filter>({ required: true })\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { fetchItemsLegacy, fetchItemsByIds } = useKeywordSelectActions(props.extSystem)\n\nconst innerFilter = useKeywordListFilter()\n</script>\n\n<template>\n <AFilterRemoteAutocomplete\n v-model=\"modelValue\"\n :fetch-items=\"fetchItemsLegacy\"\n :fetch-items-by-ids=\"fetchItemsByIds\"\n :inner-filter=\"innerFilter\"\n filter-by-field=\"text\"\n :filter-sort-by=\"null\"\n />\n</template>\n","<script lang=\"ts\" setup>\n// eslint-disable-next-line deprecation/no-deprecated-imports\nimport type { Filter } from '@/types/Filter'\nimport { useDamUserSelectAction } from '@/components/dam/user/damUserSelectActions'\nimport { useDamUserFilter } from '@/components/dam/user/DamUserFilter'\nimport AFilterRemoteAutocomplete from '@/components/filter/AFilterRemoteAutocomplete.vue'\nimport { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\n\nconst props = withDefaults(\n defineProps<{\n configName?: string\n }>(),\n {\n configName: 'default',\n }\n)\n\nconst modelValue = defineModel<Filter>({ required: true })\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { damClient } = useCommonAdminCoreDamOptions(props.configName)\n\nconst { fetchItemsLegacy, fetchItemsByIds } = useDamUserSelectAction(damClient)\n\nconst innerFilter = useDamUserFilter()\n</script>\n\n<template>\n <AFilterRemoteAutocomplete\n v-model=\"modelValue\"\n :fetch-items=\"fetchItemsLegacy\"\n :fetch-items-by-ids=\"fetchItemsByIds\"\n :inner-filter=\"innerFilter\"\n filter-by-field=\"lastName\"\n :filter-sort-by=\"null\"\n />\n</template>\n","import { useStorage } from '@vueuse/core'\n\nconst NAME = 'unreleasedFeatures'\n\nexport function useUnreleasedFeatures() {\n const showUnreleasedFeatures = useStorage(NAME, false, localStorage, { writeDefaults: false })\n\n return {\n showUnreleasedFeatures,\n }\n}\n"],"names":["props","__props","useI18n","booleanValue","computed","text","color","_createBlock","_component_VChip","_openBlock","_createElementBlock","_component_Notifications","_withCtx","_createVNode","_component_VAlert","_component_VIcon","_withModifiers","_createElementVNode","_toDisplayString","_hoisted_1","_component_VProgressCircular","_withDirectives","loadingComputed","_component_VCard","ACardLoader","_renderSlot","_ctx","emit","__emit","textareaRef","ref","collabOptions","useCommonAdminCollabOptions","releaseFieldLock","data","acquireFieldLock","options","lockedByUserLocal","isDefined","releaseCollabFieldLock","acquireCollabFieldLock","addCollabFieldLockStatusListener","addCollabGatheringBufferDataListener","lockedByUser","useCollabField","watch","newValue","CollabFieldLockStatus","CollabFieldLockType","t","system","inject","SystemScopeSymbol","subject","SubjectScopeSymbol","onUpdate","onBlur","onFocus","errorMessageComputed","item","labelComputed","isUndefined","path","stringSplitOnFirstOccurrence","requiredComputed","disabledComputed","showCounterWarning","counterValue","isNumber","__expose","_component_VTextarea","_cache","event","$event","ACollabLockedByUser","$slots","counterProps","_normalizeClass","_unref","provide","modelValueComputed","cloneDeep","lastPage","displayedFrom","displayedTo","disabledFirstAndPrev","disabledLast","isNull","disabledNext","computedTotalCountText","rowsPerPageComputed","oldValue","pageComputed","onClickFirst","onClickLast","onClickPrev","onClickNext","_hoisted_2","_createTextVNode","_component_VBtnToggle","_Fragment","_renderList","_component_VBtn","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","isVisible","key","toggleVisibility","cloned","index","_component_VTooltip","_component_VMenu","_component_VList","_component_VListItem","_component_VListItemTitle","column","active","defaultItems","SortOrder","defaultItemsId","defaultItemsMostRelevant","SORT_BY_SCORE","activeTitle","found","onItemClick","computedData","modelValue","_useModel","buttonLoading","onOpen","onClose","router","useRouter","showValidationError","showRecordWas","showErrorsDefault","useAlerts","onConfirm","res","error","_component_ABtnPrimary","_component_VDialog","ADialogToolbar","_component_VCardText","_component_VCardActions","_component_VSpacer","_component_ABtnTertiary","config","onMounted","useFetch","_component_RouterView","createdAt","dateTimePretty","modifiedAt","ARow","makeFilterHelper","variant","defaultValue","titleT","isArray","useFilterHelpers","storeId","clearOne","filter","clearAll","filterBag","filterName","clearAllErrors","loadStoredFilter","showAdvancedFilter","callback","containsAdvanced","stored","storedData","isObject","storeFilter","isEmptyObject","isEmptyArray","pagination","value","label","placeholderComputed","_component_VTextField","model","filterId","filterText","filterDocId","filterUrl","filterOverrides","toRefs","filterActive","clearIfActive","clearAllActiveExcept","exceptFilter","overrideFilter","currentFilter","setFilters","newModel","autodetectFilter","isInt","isDocId","isString","filterLabels","currentFilterModel","isEmpty","override","stringToInt","onClick","eventClickBlur","icon","showAdvanced","resetFilter","toggleAdvancedFilter","_component_VRow","_component_VCol","AFilterAdvancedButton","AFilterSubmitButton","AFilterResetButton","Grant","GrantDefault","useGrant","grantOptions","selectedGrant","newGrant","getGrantOption","availableGrant","GrantOrigin","GrantOriginDefault","useGrantOrigin","grantOriginOptions","grantOption","getGrantOriginOption","grantOriginOption","currentUsers","currentUsersLoaded","isAdminRoleBySystem","useAuthStore","getCurrentUserBySystem","isCurrentUserLoadedBySystem","getAdminRoleBySystem","reset","isOwnerAware","isCreatedByAware","ROLE_SUPER_ADMIN","defaultConfig","defineAuth","mainCurrentUserSystem","mergedConfig","authStore","canHelper","canForAllHelper","canOwnerHelper","isAdminHelper","useAuthHelpers","isAdmin","userRoles","can","acl","canOwner","canForAll","acls","canForSome","currentUserId","user","userIsLoaded","useCurrentUser","setCurrentUser","currentUser","isCurrentUserLoaded","isSuperAdmin","hasCurrentUser","isAnonymous","storeAdminRoleBySystem","role","client","endPoint","urlParams","entity","apiFetchOne","getSystemFromAcl","permission","objectGetValueByPath","adminRole","allowed","watchHandle","show","stopWatch","pretty","changeFieldData","changeCollabFieldData","checkboxModel","isFocused","isOpened","onCheckboxClick","dateTimeNow","isFunction","_component_VCheckboxBtn","_component_VExpandTransition","ADatetimePicker","_mergeProps","$attrs","modelValueSelected","modelValueAutocomplete","apiRequestCounter","search","autoFetchTimer","innerFilter","multipleComputedVuetifyTypeFix","usePagination","fetchedItems","selectedItemsCache","allItems","final","loadingLocal","apiSearch","query","requestCounter","filterField","findLocalDataByValues","values","tryToLoadFromLocalData","count","foundItems","autoFetched","clearAutoFetchTimer","autoFetch","singleItemSelectedTitle","onSearchUpdate","onClickClear","watchDebounced","updateSelected","id","foundObject","obj","selectedNewValue","onAutocompleteModelUpdate","_component_VAutocomplete","itemProps","chipProps","loading","hasError","uniqueId","internalModelValue","success","_component_VSwitch","finalRaw","itemItem","chipItem","_component_VLabel","returnValue","items","_component_VSelect","JobStatus","JobStatusDefault","useJobStatus","jobStatusOptions","getJobStatusOption","option","commonConfig","COMMON_CONFIG","objectDeepFreeze","cached","shallowRef","loaded","containerClassComputed","displayTitle","customTitle","LogLevel","LogLevelDefault","useLogLevel","logLevelOptions","getLogLevelOption","levelOption","numberToString","copy","isSupported","useClipboard","showSuccess","withModifiers","e","customColorClass","countdown","countdownTimer","onUnmounted","alertedOccupiedRooms","useCollabRoom","room","watchForNewUsers","addToCachedUsers","fetchCachedUsers","disableAutoUnsubscribe","collabSocket","collabRoomInfoState","collabFieldDataBufferState","collabFieldLocksState","useCollabState","reconnectEventBus","useCollabReconnectEventBus","unsubscribeCollabReconnectListener","reconnectCallback","joinRequestEventBus","useCollabJoinRequestEventBus","unsubscribeJoinRequestListener","joinRequestCallback","approvedJoinRequestEventBus","useCollabApprovedJoinRequestEventBus","unsubscribeApprovedJoinRequestListener","approvedJoinRequestCallback","rejectedJoinRequestEventBus","useCollabRejectedJoinRequestEventBus","unsubscribeRejectedJoinRequestListener","rejectedJoinRequestCallback","requestToTakeModerationEventBus","useCollabRequestToTakeModerationEventBus","unsubscribeRequestToTakeModerationListener","requestToTakeModerationCallback","approvedRequestToTakeModerationEventBus","useCollabApprovedRequestToTakeModerationEventBus","unsubscribeApprovedRequestToTakeModerationListener","approvedRequestToTakeModerationCallback","rejectedRequestToTakeModerationEventBus","useCollabRejectedRequestToTakeModerationEventBus","unsubscribeRejectedRequestToTakeModerationListener","rejectedRequestToTakeModerationCallback","kickedFromRoomEventBus","useCollabKickedFromRoomEventBus","unsubscribeKickedFromRoomListener","kickedFromRoomCallback","collabStartingEventBus","useCollabStartingEventBus","unsubscribeCollabStartingListener","collabStartingCallback","reconnectEventBusListener","joinRequestEventBusListener","approvedJoinRequestEventBusListener","rejectedJoinRequestEventBusListener","requestToTakeModerationEventBusListener","approvedRequestToTakeModerationEventBusListener","rejectedRequestToTakeModerationEventBusListener","kickedFromCollabRookEventBusListener","collabStartingEventBusListener","addJoinRequestListener","addApprovedJoinRequestListener","addRejectedJoinRequestListener","addRequestToTakeModerationListener","addApprovedRequestToTakeModerationListener","addRejectedRequestToTakeModerationListener","addCollabReconnectListener","addKickedFromRoomListener","addCollabStartingListener","tryOnBeforeUnmount","subscribeCollabRoomInfo","response","unsubscribeCollabRoomInfo","joinCollabRoom","resolve","reject","CollabAccessRoomStatus","isCollabSuccessAccessRoomCallback","leaveCollabRoom","enteredCollabRoom","requestToJoinCollabRoom","CollabRequestToJoinStatus","approveRequestToJoinCollabRoom","userId","rejectRequestToJoinCollabRoom","requestToTakeModeration","CollabRequestToTakeModerationStatus","approveRequestToTakeModeration","rejectRequestToTakeModeration","kickUserFromRoom","purgeRoom","transferModeration","createDefaultCollabRoomInfo","CollabStatus","fetchRoomInfo","baseRoomInfo","roomInfo","collabRoomInfo","collabRoomLocks","showErrorT","showSuccessT","useCollabCurrentUserId","approveRequestsToCollab","selectedIdsToCollab","collabUserIds","moderatorManagementDialog","approveRequestTakeModerationDialog","moderationRequest","requestToJoinAccepted","waitingFroApproval","timestamp","waitingForApprovalTimerDone","showRequestToJoinCollabButton","showRequestToTakeModerationButton","showModeratorManagementDialog","showKickYourselfButton","showModeratorManagementButton","showJoinCollaborationDialog","collabUsers","requestToJoinCollabTimerDone","request","requestToJoinCollabRoomAction","showModeratorManagementDialogAction","requestToTakeModerationAction","approveRequestToCollaborate","selectedId","rejectRequestToCollaborate","resetRequestToTakeModeration","rejectRequestToTakeModerationAction","approveRequestToTakeModerationAction","transferModerationAction","kickUserAction","purgeRoomAction","kickYourselfAction","calculateWaitingSeconds","_component_VDivider","_component_ABtnSecondary","ACollabCountdown","_component_ABtnIcon","_component_VCardItem","isActive","select","moreProps","ADatetime","routerToComputed","variantComputed","dialog","closeDialog","onCancel","AIconGroup","ThemeSettings","Theme","storedSettings","useStorage","QUERY","settings","val","theme","systemHasDarkPreference","setTheme","setThemeSettings","toolbarColor","useTheme","setThemeAuto","setThemeDark","setThemeLight","toggleTheme","readonly","isOpen","ALL_LANGUAGES","modifyLanguageSettings","configAvailableLanguages","configDefaultLanguage","addMessages","language","messages","i18n","setLanguage","code","useLanguageSettings","currentFlagComponent","FlagSk","FlagEn","FlagEmpty","_resolveDynamicComponent","AvailableLanguagesSymbol","DefaultLanguageSymbol","currentLanguageCode","onLanguageChange","currentLocale","availableLocales","activatorProps","_component_VAvatar","FlagCountry","locale","reloadAdmin","isAnzuNewVersionFetchError","AnzuNewVersionFetchError","message","originalError","useUserActivity","visibility","useDocumentVisibility","newVersion","useSystemBar","showSystemBar","abortController","lastInactiveTime","checkNewVersion","isAbortError","contentType","json","systemBarComponent","ASystemBarNewVersion","pause","resume","useIntervalFn","isWindowActive","checkNewVersionWithRetry","attempt","maxAttempts","delay","now","inactiveDuration","onBeforeUnmount","_component_VAppBar","swatches","generatedColor","generateRandomColor","randomRow","buttonColorComputed","onColorPickerChange","newColor","_component_VColorPicker","logoutDialog","AAnzuUserAvatar","_component_VListItemSubtitle","_component_VToolbar","_component_VToolbarTitle","fetchedItemsMinimal","fetch","add","addManualMinimal","noDataText","tryToAddFromFetchedItems","ids","newValueBug","oldValueBug","idsToFetch","useJobPriority","priorityLabels","priority","getPriorityLabel","getPriorityColor","priorityColor","priorityLabel","AChipNoLink","AJobStatusChip","AJobPriorityChip","sliderColor","AFormDatetimePicker","_component_VSlider","DamAssetStatus","DamAssetStatusDefault","DamAssetType","DamAssetTypeDefault","END_POINT","fetchDamAssetLicence","ENTITY","fetchAssetCustomFormElements","damClient","extSystem","assetType","SYSTEM_CORE_DAM","fetchDistributionCustomFormElements","distributionService","PUB_END_POINT_PREFIX","PUB_END_POINT","fetchPubConfiguration","fetchConfiguration","fetchExtSystemConfiguration","DamDistributionRequirementStrategy","DamDistributionRequirementStrategyDefault","DamDistributionServiceType","DamDistributionStatus","DamDistributionStatusDefault","UserAuthType","UserAuthTypeDefault","damPubConfigDefault","damPrvConfigDefault","useDamConfigStore","defineStore","initialized","reactive","damPubConfig","damPrvConfig","damConfigExtSystem","damConfigLicenceExtSystem","damConfigAssetCustomFormElements","damConfigDistributionCustomFormElements","useDamConfigState","damConfigStore","onConfigError","loadDamPubConfig","setDamPubConfig","err","loadDamPrvConfig","setDamPrvConfig","loadDamConfigExtSystem","extSystemId","setDamConfigExtSystem","loadDamConfigAssetCustomFormElements","types","promises","type","responses","setDamConfigAssetCustomFormElements","loadDamConfigDistributionCustomFormElements","distributionServiceName","isDamPubConfigLoaded","isDamPrvConfigLoaded","getDamConfigExtSystem","getDamConfigAssetCustomFormElements","getOrLoadDamConfigExtSystemByLicences","licences","licence","getOrLoadDamConfigExtSystemByLicence","result","foundLicenceConfig","licenceRes","foundExtSystemConfig","BULK_METADATA_LIMIT","SYSTEM_DAM","FETCH_BY_IDS_MAX_LIMIT","useFetchAssetList","licenceId","useApiFetchList","fetchAsset","fetchAssetAsCmsMedia","fetchAssetByFileId","assetFileId","bulkUpdateAssetsMetadata","mainFileSingleUseOverride","bulkItems","listItemsToMetadataBulkItems","updateMetadataSequence","HTTP_STATUS_OK","bulkItemsRes","fetchAssetListByIdsSequence","totalCalls","offset","reduced","fetchAssetListByIds","i","dtoItems","showUnknownError","showApiValidationError","handleMetadataValidationError","configAssetCustomFormElements","field","updateAssetMetadata","asset","mainFileSingleUse","axiosErrorResponseIsForbidden","AnzuApiForbiddenError","axiosErrorResponseHasValidationData","AnzuApiValidationError","axiosErrorResponseHasForbiddenOperationData","AnzuApiForbiddenOperationError","AnzuFatalError","updateAssetAuthors","updateAuthorsSequence","bulkUpdateAssetsAuthors","filterFieldsList","listFiltersStore","createFilterStore","useAssetListFilter","filterConfig","filterData","createFilter","AssetSelectReturnType","useAssetSelectStore","assetListItems","loader","selectedLicenceId","selectConfig","inPodcast","selectedAssets","singleMode","minCount","maxCount","activeItemIndex","showLoader","hideLoader","setSelectConfig","setSingleMode","setAssetType","setMinCount","setMaxCount","setList","appendList","assets","toggleSelectedByIndex","isSelectedMax","unselectAllExcept","clearSelected","addToSelected","removeFromSelected","setActiveByIndex","oldActiveIndex","ignoreIndex","assetItem","assetId","getSelectedMainFileIds","fileIds","getSelectedAssetIds","getSelectedAssets","toRaw","getSelectedData","copyToLicence","selectedCount","all","selectedSelectConfig","configItem","commonAdminCoreDamOptions","initCommonAdminCoreDamOptions","useCommonAdminCoreDamOptions","configName","useCommonAdminCoreDamOptionsGlobal","AssetDetailTabImageWithRoi","AssetDetailTabImageWithRoiDefault","useAssetDetailStore","authorConflicts","metadataAreTouched","activeTab","updateUploadStore","setAsset","defineCached","mapFullToMinimal","mapIdToMinimal","fetchCallback","idProp","maxLimit","cache","toFetch","args","toAdd","arg","j","addManual","updateMap","updateToFetch","apiFetch","debouncedFetch","useDebounceFn","useApiQueryBuilder","q","querySetLimit","queryAdd","querySetOffset","page","limit","querySetOrder","desc","formatValue","isBoolean","queryAddFilter","filterVariant","getValue","isSearchApi","generateByIdsApiQuery","queryBuild","apiFetchByIds","urlTemplate","replaceUrlParameters","isValidHTTPStatus","HTTP_STATUS_NO_CONTENT","AnzuApiResponseCodeError","axiosErrorResponseHasDependencyExistsData","AnzuApiDependencyExistsError","apiGenerateListQuery","querySetFilters","apiFetchList","searchApi","resData","isApiInfiniteResponseList","isApiResponseList","END_POINT_LIST","fetchAuthorListByIds","useFetchAuthorList","fetchAuthorList","createAuthor","apiCreateOne","cachedExtSystemId","useExtSystemIdForCached","author","has","get","isLoaded","useDamCachedAuthors","useDamCachedAuthorsForRemoteAutocomplete","fetchKeywordListByIds","useFetchKeywordList","fetchKeywordList","createKeyword","keyword","useDamCachedKeywords","useCachedKeywordsForRemoteAutocomplete","apiUpdateOne","object","fetchDamUserListByIds","fetchDamUserList","useFetchDamUserList","updateDamUser","fetchDamUser","source","useDamCachedUsers","sidebarLeft","sidebarRight","useSidebar","toggleSidebarLeft","closeSidebarLeft","openSidebarLeft","toggleSidebarRight","closeSidebarRight","openSidebarRight","SORT_BY_SCORE_DATE","detailLoading","useAssetSelectActions","onDetailLoadedCallback","assetSelectStore","storeToRefs","assetDetailStore","resolveTypeFilter","fetchAssetListDebounced","fetchAssetList","executeFetch","fetchNextPage","addToCachedAuthors","fetchCachedAuthors","addToCachedKeywords","fetchCachedKeywords","useFilterClearHelpers","resetAssetList","initStoreContext","IMAGE_HEIGHT","IMAGE_BG_COLOR_DEFAULT","useAssetItemActions","assetStatus","imageProperties","tableImageProperties","imagePlaceholderPath","svg2k","svg4k","svg8k","svgqhd","svgfhd","svgslot","svglow","svgrss","DIMENSIONS_CONFIG","ICON_SLOTS","ICON_RSS","ICON_LOW","LOW_DIMENSION","checkDimensions","icons","titles","checkDistributions","iconPath","onError","srcComputed","placeholder16x9","showIconComputed","AssetImageMetaIcons","_normalizeStyle","module","this","n","r","o","u","d","a","h","c","g","f","s","m","l","$","v","y","p","dayjs","Duration","prettyBytes","bytes","decimals","k","dm","sizes","prettyDuration","seconds","IMAGE_WIDTH","toRef","AssetImagePreview","_component_VTable","AssetSelectTableRowItem","_hoisted_7","_hoisted_8","AssetSelectGridView","AssetSelectGridViewDefault","gridView","useGridView","setGridView","sortModel","isImageActive","isVideoActive","isPodcastActive","setFilterImage","setFilterVideo","setFilterPodcast","customSortOptions","SORT_BY_SCORE_BEST","ADatatableOrdering","AssetSelectTilesItem","useKeywordSelectActions","configExtSystem","mapToValueObject","mapToMinimal","mapToValueObjects","keywords","mapToMinimals","useKeywordInnerFilter","filterFieldsInner","makeFilter","useKeywordListFilter","fetchItems","fetchItemsByIds","FilterInnerConfigKey","FilterInnerDataKey","AFilterRemoteAutocomplete","useAuthorSelectActions","authors","useAuthorInnerFilter","useAuthorFilter","fetchItemsMinimal","fetchItemsMinimalByIds","AFilterRemoteAutocompleteWithMinimal","useDamUserSelectAction","users","useDamUserInnerFilter","useDamUserFilter","status","AFilterValueObjectOptionsSelect","fetchDamPodcastListByIds","useFetchDamPodcastList","usePodcastInnerFilter","usePodcastSelectActions","podcast","AFilterString","DamKeywordFilterRemoteAutocomplete","DamAuthorFilterRemoteAutocomplete","DamUserFilterRemoteAutocomplete","AFilterBooleanSelect","AssetDistributionServiceNameFilter","FilterPodcastRemoteAutocomplete","FilterConfigKey","FilterDataKey","submitFilter","submitFilterAction","resetFilterAction","componentComputed","AssetSelectFilterForm","AFilterWrapperSubjectSelect","filterAllowedImageWidgetSelectConfigs","damCurrentUser","damCurrentUserIsSuperAdmin","adminToExtSystems","assetLicences","assetLicenceValue","isImageWidgetUploadConfigAllowed","AssetFileProcessStatus","AssetFileFailReason","AssetFileFailReasonDefault","AssetFileRouteStatus","AssetFileRouteStatusDefault","AssetFileLinkType","assetFileIsImageFile","assetFileIsVideoFile","assetFileIsAudioFile","assetFileIsDocumentFile","showAll","useCustomDataForm","CustomDataFormElementType","CustomDataFormElementTypeDefault","useCustomDataFormElementType","customDataFormElementTypeOptions","fixValue","updateModelValue","isProxy","maxLength","minLength","requiredIf","minValue","maxValue","stringArrayItemLength","useValidate","rules","dynamicRules","v$","useVuelidate","counter","_component_VCombobox","ABooleanSelect","toggleForm","updated","elementsPinned","elementsOther","showHideButtonText","showHideButtonIcon","enableShowHide","element","ACustomFormElement","isMediaAware","isImageCreateUpdateAware","useImageMediaWidgetStore","detail","setDetail","ADamAssetMetadataValidationScopeSymbol","AImageMetadataValidationScopeSymbol","ADamAuthorCreateValidationScopeSymbol","useImageValidation","image","sourceRequired","elements","pinnedCount","ACustomDataForm","style","AColorBox","ABooleanValue","filterInnerConfig","filterInnerData","componentName","getCurrentInstance","useUploadQueueItemFactory","chunkSize","useAssetSuggestions","suggestions","newNames","conflicts","damNotificationsEventBusKey","useDamNotificationsEventBus","useEventBus","DamNotificationName","damNotificationsInitialized","initDamNotifications","notification","enabled","eventBus","open","useWebSocket","showWarning","ws","useDamNotifications","getAssetTypeByMimeType","mimeType","UploadQueueItemType","UploadQueueItemStatus","useDamUploadChunkSize","apiTimeout","lastChunkSize","minUploadTimeThreshold","idealUploadTimeThreshold","maxUploadTimeThreshold","updateChunkSize","speed","expectedChunkUploadSpeed","returnFromRange","damFileTypeFix","file","sentryPromise","getSentry","useSentry","context","sentry","level","CHUNK_UPLOAD_TIMEOUT","fetchImageFile","imageUploadStart","url","HTTP_STATUS_CREATED","imageUploadChunk","imageId","buffer","size","onUploadProgressCallback","logMessage","logError","formData","chunkData","axios","imageUploadFinish","sha","rotateImage","angle","COPY_TO_LICENCE_MAX_LIMIT","COPY_TO_LICENCE_API_LIMIT","itemChunks","arr","_","chunk","NOTIFICATION_FALLBACK_TIMER_CHECK_SECONDS","NOTIFICATION_FALLBACK_MAX_TRIES","damUploadStart","damUploadChunk","damUploadFinish","uploadStatusFallback","notificationFallbackCallback","calculateFallbackTime","uploadQueuesStore","useUploadQueuesStore","root","factory","modules","installedModules","__webpack_require__","moduleId","exports","name","getter","property","_classCallCheck","instance","Constructor","RushaCore","_require","toHex","ceilHeapSize","conv","padlen","len","padZeroes","bin","h8","om","align","padData","chunkLen","msgLen","getRawDigest","heap","padMaxChunkLen","io","out","Rusha","padMsgLen","padChunkLen","view","chunkOffset","off","finalize","str","turnOffset","inputLen","state","precomputedHex","arrayBuffer","binarray","_i","self","isRunningInWorker","isRunningInSharedWorker","isRunningInServiceWorker","hashData","hasher","cb","hashFile","readTotal","blockSize","reader","workerBehaviourEnabled","done","hash","work","createHash","runWorker","isDedicatedWorkerScope","isRunningInDedicatedWorker","worker","terminate","webpackBootstrapFunc","moduleNameReqExp","dependencyRegExp","quoteRegExp","getModuleDependencies","sources","queueName","retval","fnString","wrapperSignature","webpackRequireName","re","match","hasValuesInQueues","queues","keys","hasValues","getRequiredModules","modulesQueue","requiredModules","seenModules","queue","moduleToCheck","newModules","newModulesKeys","src","entryModule","blob","URL","workerUrl","stdlib$840","foreign$841","heap$842","H$843","hash$844","k$845","x$846","i$847","j$848","y0$849","z0$850","y1$851","z1$852","y2$853","z2$854","y3$855","z3$856","y4$857","z4$858","t0$859","t1$860","_this","convStr","H8","H32","start","lm","convBuf","buf","convBlob","_createClass","defineProperties","target","descriptor","protoProps","staticProps","Hash","encoding","digest","CHUNK_MAX_RETRY","SPEED_CHECK_INTERVAL","CHUNK_RETRY_INTERVAL","CHUNK_RETRY_MULTIPLY","failUpload","queueItem","finishUpload","handleValidationErrorMessage","errorMessages","NEW_LINE_MARK","readFile","partial","sleep","ms","useUpload","uploadCallback","fileSize","progress","speedStack","lastTimestamp","endTimestamp","lastLoaded","speedCheckTimerId","rusha","getCurrentTimestamp","progressCallback","progressEvent","currentStamp","dataSent","uploadChunk","chunkFile","exception","processAndUploadChunk","cancelToken","sleepTime","speedCheck","speedCheckRun","avgSpeed","sum","current","remainingBytes","filesize","uploadedChunk","uploadStop","cancelTokenSource","QUEUE_MAX_PARALLEL_UPLOADS","QUEUE_CHUNK_SIZE","createDefault","addDamNotificationListener","queueItemProcessed","queueItemFailed","queueItemDuplicate","queueItemMetadataProcessed","queueItemCopied","getQueue","queueKey","getQueueItems","addByCopyToLicence","assetLicence","createQueue","addQueueItem","recalculateQueueCounts","processUpload","addByFiles","files","getQueueItemsByStatus","waitingItems","queueItemUploadStart","upload","uploadInit","stopSpeedCheck","estimate","setUploadSpeed","originAssetFile","updateNewNames","getAuthorConflicts","assetRes","failReason","removeByIndex","stopItemUpload","updateFromDetail","getQueueTotalCount","getQueueProcessedCount","stopUpload","currentItems","clearQueue","forceReloadFileInput","getQueueFileInputKey","getQueueItemsTypes","getCachedAuthor","displayNewIcon","displayReviewed","clickClose","DamAuthorType","DamAuthorTypeDefault","useDamAuthorType","authorTypeOptions","required","useAuthorValidation","validationScope","useDamAuthorFactory","reviewed","textOverride","ASystemEntityScope","AFormTextField","AFormValueObjectOptionsSelect","addAuthor","addNewAuthorText","searchChange","removeLastComma","addManualToCachedAuthors","afterCreate","itemSlotIsSelected","authorCreateButton","onEnterKeyup","onCommaKeyup","showAdd","AuthorRemoteAutocompleteCachedAuthorChip","AFormRemoteAutocompleteWithCached","itemSlotProps","itemSlotItem","chipSlotItem","AuthorCreateButton","authorId","AuthorRemoteAutocompleteCachedAuthorChipConflicts","getCachedKeyword","useDamKeywordFactory","addNewKeywordText","addManualToCachedKeywords","createOrSelectKeyword","keywordCreate","keywordRes","KeywordRemoteAutocompleteCachedKeywordChip","useDamKeywordAssetTypeConfig","keywordEnabled","keywordRequired","useDamAuthorAssetTypeConfig","authorEnabled","authorRequired","appendIcon","panels","isTypeImage","assetMainFile","onAnyMetadataChange","cachedUsers","_component_VExpansionPanels","_component_VExpansionPanel","_component_VExpansionPanelText","AssetCustomMetadataForm","KeywordRemoteAutocompleteWithCached","AuthorRemoteAutocompleteWithCached","ACopyText","ACachedUserChip","AssetMetadataImageAttributes","ready","selectConfigs","selectConfigLocal","getCopyToLicenceId","autoloadOnIntersect","isIntersecting","showCopyToLicence","AssetSelectListTable","AssetSelectListTiles","disabledSubmit","extId","loadingSidebarRight","customFormConfigLoading","sortByChange","AssetSelectListBar","AssetSelectFilter","AssetMetadata","_hoisted_9","NESTED_HANDLE_CLASS","NESTED_GHOST_CLASS","NESTED_DRAG_CLASS","NESTED_CHOSEN_CLASS","NESTED_GROUP_CLASS","SortableLevel","useSortableNestedActions","initSortablesCallback","showWarningT","sortableInstances","forceRerender","removeDialog","itemToRemove","dragging","widgetEl","randomUuid","generateUUIDv1","forceRerenderWidgetHtml","emitData","nextTick","refresh","destroy","onRemoveDialogConfirm","touchDirty","nestedData","updatePositionsSameParent","oldIndex","newIndex","clonedData","updatedPositions","position","updatePositionsDifferentParent","itemsTarget","itemsSource","indexTarget","indexSource","calculateParentDepth","parent","depth","parentItem","calculateChildDepth","children","childDepth","child","currentDepth","calculateNodeMaxDepth","parentDepth","findItemById","foundInChildren","currentId","targetId","maxDepth","itemToMove","itemToMoveParentItem","returnData","idx","targetItem","childrenAllowed","insertData","targetItemParentItem","itemFound","dirty","onDeleteClick","onEditClick","onAddAfterClick","onAddChildClick","showAddChildButtonComputed","_component_ASortableNestedItem","itemSlot","buttonSlot","onAddLastClick","widgetHtmlId","WIDGET_HTML_ID_PREFIX","widgetClass","initSortables","nestedSortables","useSortable","parentId","parentEl","needsRefresh","moveArrayElement","addAfterId","addChildToId","removeById","updateData","ASortableNestedItem","buttonsSlot","dialogLocal","paginationComputed","filterTouched","selectedItemsCount","toggleSidebar","onPageChange","hasNextPage","_component_VForm","_hoisted_10","_vShow","ADatatablePagination","_hoisted_11","isDraggingFile","draggingTimer","useDropzoneGlobalDragState","dragoverHandler","checkReallyDraggingEnded","dragleaveHandler","dropHandler","dragEventContainsFiles","useFormatAndSizeCheck","accept","maxSizes","acceptKeys","maxSizeKeys","checkFormatsAndSizes","disableAlert","incorrectFileNames","validFiles","isFileValid","checkFormats","checkSizes","accepts","splitType","dropZoneRef","onDrop","isOverDropZone","useDropZone","imageOptions","initCommonAdminImageOptions","useCommonAdminImageOptions","useImageActions","width","height","useDamAcceptTypeAndSizeHelper","createSizesByAssetType","uploadSizes","uploadAccept","SYSTEM_CMS","fetchImageListByIds","fetchImage","createImage","updateImage","deleteImage","apiDeleteOne","bulkUpdateImages","updateImagesSequence","images","reqData","imageClient","widgetImageToDamImageUrl","resImage","resolvedSrc","getImageUrl","newImage","newImageId","_component_VImg","adminDomain","href","DamMediaType","imageMediaWidgetStore","imageSourceRequired","imageMedia","onDialogModelUpdate","onEditAsset","AFormTextarea","AImageWidgetSimple","DamAdminAssetLink","MINUTE_IN_SECONDS","HOUR_IN_SECONDS","DAY_IN_SECONDS","useRemainingTime","remainingTime","short","prefix","onLoad","uploadingPercentage","backgroundColorComputed","iconColor","remainingTimeShort","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","useAssetFileFailReason","assetFileFailReasonOptions","getAssetFileFailReasonOption","reasonOption","AssetFileFailReasonChip","CLASS_PREFIX","mountedDivClasses","useAssetDetailSidebarActionbar","uploadKey","mounted","unMounted","canTeleport","divClassName","_Teleport","uploadQueueStore","saveButtonLoading","onSave","AssetDetailSidebarActionsWrapper","useImageRoiStore","imageFile","roi","setImageFile","newFile","setRoi","newRoi","rotate","END_POINT_IMAGE_ROI","fetchRoi","updateRoi","useFetchImageRoiList","imageRoiStore","SORT_BY_ID","loadImageFile","loadRois","forceReloadFile","afterRotate","AssetFileRotate","_component_VTabs","_component_VTab","AssetInfobox","AssetDetailSidebarMetadata","AssetDetailSidebarROI","AssetDetailSidebarActionsTeleportTarget","PRECISION","regionToCrop","cropper","regionOfInterest","originalImageWidth","originalImageHeight","imageData","ratio","cropToRegion","pointX","pointY","percentageWidth","stringToFloat","validateWidth","percentageHeight","validateHeight","ownKeys","_objectSpread2","_defineProperty","_toPrimitive","_toPropertyKey","_typeof","_defineProperties","_toConsumableArray","_arrayWithoutHoles","_iterableToArray","_unsupportedIterableToArray","_nonIterableSpread","_arrayLikeToArray","iter","minLen","arr2","IS_BROWSER","WINDOW","IS_TOUCH_DEVICE","HAS_POINTER_EVENT","NAMESPACE","ACTION_ALL","ACTION_CROP","ACTION_MOVE","ACTION_ZOOM","ACTION_EAST","ACTION_WEST","ACTION_SOUTH","ACTION_NORTH","ACTION_NORTH_EAST","ACTION_NORTH_WEST","ACTION_SOUTH_EAST","ACTION_SOUTH_WEST","CLASS_CROP","CLASS_DISABLED","CLASS_HIDDEN","CLASS_HIDE","CLASS_INVISIBLE","CLASS_MODAL","CLASS_MOVE","DATA_ACTION","DATA_PREVIEW","DRAG_MODE_CROP","DRAG_MODE_MOVE","DRAG_MODE_NONE","EVENT_CROP","EVENT_CROP_END","EVENT_CROP_MOVE","EVENT_CROP_START","EVENT_DBLCLICK","EVENT_TOUCH_START","EVENT_TOUCH_MOVE","EVENT_TOUCH_END","EVENT_POINTER_DOWN","EVENT_POINTER_MOVE","EVENT_POINTER_UP","EVENT_READY","EVENT_RESIZE","EVENT_WHEEL","EVENT_ZOOM","MIME_TYPE_JPEG","REGEXP_ACTIONS","REGEXP_DATA_URL","REGEXP_DATA_URL_JPEG","REGEXP_TAG_NAME","MIN_CONTAINER_WIDTH","MIN_CONTAINER_HEIGHT","DEFAULTS","TEMPLATE","isNaN","isPositiveNumber","hasOwnProperty","isPlainObject","_constructor","prototype","slice","toArray","forEach","assign","_len","_key","REGEXP_DECIMALS","normalizeDecimalNumber","times","REGEXP_SUFFIX","setStyle","styles","hasClass","addClass","elem","className","removeClass","toggleClass","added","REGEXP_CAMEL_CASE","toParamCase","getData","setData","removeData","REGEXP_SPACES","onceSupported","supported","once","listener","removeListener","handler","listeners","addListener","_handler","_element$listeners","_len2","_key2","dispatchEvent","getOffset","box","location","REGEXP_ORIGINS","isCrossOriginURL","parts","addTimestamp","getTransforms","_ref","scaleX","scaleY","translateX","translateY","transform","getMaxZoomRatio","pointers","pointers2","maxRatio","pointer","pointerId","pointer2","x1","y1","x2","y2","z1","z2","getPointer","_ref2","endOnly","pageX","pageY","end","getPointersCenter","_ref3","startX","startY","getAdjustedSizes","_ref4","aspectRatio","isValidWidth","isValidHeight","adjustedWidth","getRotatedSizes","_ref5","degree","arc","sinArc","cosArc","newWidth","newHeight","getSourceCanvas","_ref6","_ref7","_ref8","imageAspectRatio","imageNaturalWidth","imageNaturalHeight","_ref6$rotate","_ref6$scaleX","_ref6$scaleY","naturalWidth","naturalHeight","_ref8$fillColor","fillColor","_ref8$imageSmoothingE","imageSmoothingEnabled","_ref8$imageSmoothingQ","imageSmoothingQuality","_ref8$maxWidth","maxWidth","_ref8$maxHeight","maxHeight","_ref8$minWidth","minWidth","_ref8$minHeight","minHeight","canvas","minSizes","destMaxSizes","destMinSizes","destWidth","destHeight","params","param","fromCharCode","getStringFromCharCode","dataView","length","REGEXP_DATA_URL_HEAD","dataURLToArrayBuffer","dataURL","base64","binary","uint8","arrayBufferToDataURL","chunks","resetAndGetOrientation","orientation","littleEndian","app1Start","ifdStart","exifIDCode","tiffOffset","endianness","firstIFDOffset","_length","_offset","parseOrientation","render","container","containerData","viewMode","rotated","canvasWidth","canvasHeight","canvasData","sizeLimited","positionLimited","cropBoxData","cropped","minCanvasWidth","minCanvasHeight","_getAdjustedSizes","newCanvasLeft","newCanvasTop","changed","transformed","_getRotatedSizes","autoCropArea","limited","minCropBoxWidth","minCropBoxHeight","maxCropBoxWidth","maxCropBoxHeight","preview","crossOrigin","alt","previews","el","img","cropBoxWidth","cropBoxHeight","left","top","originalWidth","originalHeight","events","handlers","ratioX","ratioY","delta","buttons","button","action","touch","change","right","bottom","minLeft","minTop","renderable","range","check","side","methods","hasSameSize","offsetX","offsetY","_this$canvasData","x","_originalEvent","pivot","center","_scaleX","_scaleY","rounded","widthChanged","heightChanged","_this$getData","initialX","initialY","initialWidth","initialHeight","_options$imageSmoothi","sourceWidth","sourceHeight","srcX","srcY","srcWidth","srcHeight","dstX","dstY","dstWidth","dstHeight","scale","mode","dragBox","face","croppable","movable","AnotherCropper","Cropper","tagName","xhr","clone","_parseOrientation","crossOriginUrl","_this2","isIOSWebKit","sizingImage","body","template","cropBox","parentNode","cropperInstance","imgEl","enable","disable","containerStyle","imgStyle","propsOptions","cropperContainerStyle","useTemplateRef","imageUrl","enableCropper","disableCropper","applyRegionOfInterest","saveRoi","cropperReady","cropperEnd","showCropper","ACropperjs","sidebar","onImageLoad","isTypeVideo","isTypeAudio","isTypeDocument","toolbarTitle","AssetDetailDialogLoader","DamAssetImageRoiSelect","AssetImage","AssetDetailDialogSidebar","uploadQueueDialog","uploadQueueSidebar","useUploadQueueDialog","onSaveAndApply","UploadQueueDialogSingleSidebarMetadataContent","UploadQueueDialogSingleSidebarMetadata","IMAGE_ASPECT_RATIO","assetDetail","enableRoiTab","isDone","processingStatuses","processing","waiting","showDone","uploading","uploadProgress","onStopConfirm","queueTotalCount","queueProcessedCount","isUploading","description","assetsMetadataRes","UploadQueueButtonStop","_hoisted_12","UploadQueueDialogSingleSidebar","_hoisted_17","_hoisted_18","BLOCK_DOUBLE_CLICK_MS","inputRef","fileInputKeyLocal","blockDoubleClick","clickInput","validateData","checked","onDropzoneDrop","onInputFileChange","payload","onFileDropzoneClick","AFileDropzone","fileInputComponent","onFilesInput","dialogProps","AFileInput","ImageWidgetUploadConfig","showDamAuthorsInCmsImage","collabFieldLockReallyLocked","lockedLocal","acquireFieldLockLocal","releaseFieldLockLocal","imageWidgetUploadConfig","showError","clickMenuOpened","assetSelectDialog","metadataDialog","metadataDialogSaving","metadataDialogLoading","fileInputDialog","withoutImage","uploadQueue","imageLoaded","actionEditMeta","actionLibrary","waitForFieldLockIsReallyAcquired","checkLock","onCopyToLicence","onFileInput","reload","force","onAssetSelectConfirm","copyRes","forceReloadViewWithExpandMetadata","assetLoading","assetDialog","onMetadataDialogClose","onMetadataDialogConfirm","authorsRes","onImageDelete","onAssetUploadConfirm","expandedUploadDialog","onDropzoneClick","isLocked","detailDialogMetadataComponent","metadataConfirm","onOptionsButtonClick","anyWidgetDialogOpened","AFileInputDialog","fileInputProps","AImageDropzone","ImageDetailDialogMetadata","AAssetSelect","AssetDetailDialog","UploadQueueDialogSingle","uploadConfig","innerComponent","ImageWidgetInner","appendImage","typeChange","imageModel","mediaModel","damImageIdToDamImageUrl","resImageMedia","hideDropzoneText","imageMediaLoaded","reloadImage","reloadMedia","newMedia","oldImage","oldImageId","oldMedia","selectedAsset","mediaDataFromDam","mediaData","tryMediaConfirm","tryImageConfirm","onImageMediaDelete","preselectType","appendMedia","AAssetSelectMedia","ImageMediaWidgetInner","resMedia","media","onDetailClick","onDialogClose","MediaWidgetSimpleDialog","useImageStore","maxPosition","setImages","addImages","updateMaxPositionIfGreater","newPosition","removeImageByIndex","imageStore","removeItem","HANDLE_CLASS","AActionDeleteButton","SHOW_REFRESH_AFTER_SECONDS","customData","imageSrc","cancelItem","showCancelStatuses","showCancel","showRefresh","refreshTimer","showDetail","ATableCopyIdButton","fillEmptyField","elementProperty","replaceField","ACustomDataFormElement","useUploadQueueMassOperations","forceReplace","massOperationsData","massOperationsKeywords","massOperationsAuthors","replaceEmptyCustomDataValue","replaceEmptyAuthors","replaceEmptyKeywords","fillEmptyKeywords","replaceKeywords","fillEmptyAuthors","replaceAuthors","fillAll","clearForm","assetTypes","AssetCustomMetadataFormMassOperations","refreshDisabled","list","refreshItem","scrollableContainer","handleKeyboardNavigation","scrollAmount","pageScrollAmount","cleanup","useEventListener","UploadQueueItemEditable","AssetQueueSelectedSidebar","toggleUploadQueueSidebar","isFinished","saveAndCloseButtonLoading","itemsRaw","metadataMap","queueItems","assetMetadataMap","authorIdsToFetch","authorsMap","bulkItem","assetMeta","authorIds","authorNames","mapped","UploadQueueEditable","MAX_UPLOAD_ITEMS","uploadDialogLoader","fileCache","uploadQueueTotalCount","alreadyAtUploadLimit","openDialog","onDialogConfirm","onDialogCancel","apiAnyRequest","method","axiosConfig","MAX_LIMIT","fetchAssetListByFileIdsMultipleLicences","groupedIds","batchedRequests","docIds","chunkArray","fetchAssetListByFileIdsMultipleLicencesWithLimit","fetchAssetAndCheckForSingleUseByFileIds","batch","forceLimit","filterSingleUse","searchResults","singleUseParam","groupedSearchResults","uploadButtonComponent","imagesLoading","fetchImagesOnLoad","imagesRes","b","group","assetsRes","imageRes","limitDialogComponent","afterLimitDialogAdd","assetSelectConfirmMap","saveImages","assetUpdateItems","imagesRaw","resItems","resItem","getUpdatedItem","matchedImage","storeItem","updatedItems","sortableInstance","initSortable","updateAllPositions","pos","moveImagePositions","from","to","nestedSortable","GROUP_CLASS","GHOST_CLASS","DRAG_CLASS","CHOSEN_CLASS","ImageWidgetMultipleItem","UploadQueueDialog","ImageWidgetMultipleLimitDialog","ImageWidgetMultipleInner","resImages","newImages","newImageIds","useImageMassOperations","replaceEmptyDescription","replaceEmptySource","texts","showDamAuthorsAtLeastOne","inputField","meta","isValid","isDirty","widgetImageToDamImageOriginalUrl","extractUUID","regex","validateAssetData","validateField","extracted","submit","updatePreviewAndTexts","disabled","datatableSlotName","onRowClick","isNotEmpty","totalColumnsCount","ADatatableColumn","slotItem","useSubjectSelect","datatableConfig","datatableHiddenColumns","selected","columnsVisible","updateSortBy","columnsAll","columnsHidden","createDatatableColumnsConfig","resetState","getList","onFetchNextPage","eventTarget","firstTd","input","generateDatatableMinMaxSelectStrategy","min","max","booleanToInteger","useAnzuUserFactory","resourceName","_system","_resourceName","useBaseUserFactory","usePermissionConfigFactory","usePermissionGroupFactory","generateListApiQuery","generateListApiQueryWithoutPagination","rowsPerPage","orderField","orderDesc","apiFetchListBatch","sortBy","sortDesc","batchSize","forceElastic","urlPart","results","nextPageData","numPages","pageResponse","useErrors","isAnzuFatalError","isAnzuApiForbiddenError","isAnzuApiValidationError","isAnzuApiResponseCodeError","useJobApi","stringToKebabCase","JOB_RESOURCE_USER_DATA_DELETE","useJobBaseResource","customJobs","jobResourceOptions","AnzuSystemsCommonAdmin","app","Acl","Notification","initCommonAdminCollabOptions","arrayItemToggle","array","arrayToString","separator","arrayFromArgs","arrayFlatten","acc","arraysHaveSameElements","array1","array2","sortedArray1","sortedArray2","browserHistoryReplaceUrlByString","browserHistoryReplaceUrlByRouter","resolved","cs","alert","anzuUser","job","log","permissionGroup","assetSelect","subjectSelect","time","sortable","damImage","collab","vuetify","apiValidation","apiForbiddenOperation","apiDependencyExists","jsValidation","apiTimedOut","en","sk","useCommonVuetifyConfig","VBtn","VChip","ensureUniqueValues","loadCommonFonts","useCommonJobFactory","createBase","LoginState","serverTimestamp","localTimeShiftInSeconds","useLoginStatus","localTime","localTimeDiff","isStatusNotDefined","isStatusLoginSuccess","isStatusSsoCommunicationFailure","isStatusInternalErrorFailure","isStatusUnauthorized","fetchDamCurrentUser","useCollabInit","collabConnected","authorizationReconnectTriggered","changeEventBus","useCollabRoomDataChangeEventBus","requestAccessEventBus","locks","locksEntries","lock","dataEntries","fieldData","connectedBefore","reason","COLLAB_FIELD_PREFIX_EMBED","COLLAB_FIELD_PREFIX_COMMENT","useCollabHelpers","useCollabAnyDataChange","fieldLockStatusEventBus","useCollabFieldLockStatusEventBus","anyChangeCallback","unsubscribeCollabAnyDataChangeListener","anyChangeEventBusListener","addCollabAnyDataChangeListener","changeCollabAnyData","objectSetDataByField","objectToUpdate","unref","objectSetValueByPath","statusEvent","isCollabFailedChangeRoomLockCallback","createFieldLockStatusPayload","isCollabSuccessChangeRoomLockCallback","fetchDamAssetLicenceListByIds","useFetchDamAssetLicenceList","fetchDamAssetLicenceList","useDamAssetLicenceInnerFilter","useDamAssetLicenceFilter","useAssetLicenceSelectActions","mapToValueObjectOption","AFormRemoteAutocomplete","fetchDamAssetLicenceGroupListByIds","useFetchDamAssetLicenceGroupList","fetchDamAssetLicenceGroupList","useAssetLicenceGroupSelectActions","assetLicenceGroups","useDamAssetLicenceGroupInnerFilter","fetchDamExtSystemListByIds","useFetchDamExtSystemList","fetchDamExtSystemList","useExtSystemSelectActions","useExtSystemInnerFilter","useDamExternalProviderAssetType","providerName","allExternalProviderAssetTypeOptions","useDamDistributionServiceType","serviceName","allDistributionServiceTypeOptions","defaultOptions","defineBreadcrumbs","fetchItemsMinimalLegacy","fetchItemsLegacy","NAME","useUnreleasedFeatures"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,UAAMA,IAAQC,GAYR,EAAE,EAAA,IAAMC,EAAA,GAERC,IAAeC,EAAS,MACrBJ,EAAM,UAAU,MAAQA,EAAM,UAAU,KAAKA,EAAM,UAAU,MACrE,GAEKK,IAAOD,EAAS,MAChBD,EAAa,QACR,EAAE,2BAA2B,IAE/B,EAAE,4BAA4B,CACtC,GAEKG,IAAQF,EAAS,MACjBJ,EAAM,cACDG,EAAa,QAAQ,UAAU,YAEjCA,EAAa,QAAQ,YAAY,OACzC;qBAKSF,EAAA,aADRM,EAOQC,IAAA;AAAA;MALL,OAAOF,EAAA;AAAA,MACR,OAAA;AAAA,MACA,MAAK;AAAA,IAAA;iBAEL,MAAU;AAAA,YAAPD,EAAA,KAAI,GAAA,CAAA;AAAA,MAAA;;yBAETI,EAAA,GAAAC,EAA8B,cAAdL,EAAA,KAAI,GAAA,CAAA;AAAA;;;;;;;;;;;;;kBCzBpBE,EA0BgBI,GAAA;AAAA,QAzBb,KAAKV,EAAA;AAAA,QACL,OAAOA,EAAA;AAAA,QACP,UAAUA,EAAA;AAAA,QACV,OAAOA,EAAA;AAAA,QACP,UAAOA,EAAA,WAAW;AAAA,MAAA;QAER,MAAIW,EACb,CAgBSZ,MAjBW;AAAA,UACpBa,EAgBSC,IAAA;AAAA,YAfN,MAAMd,EAAM,KAAK;AAAA,YAClB,OAAM;AAAA,YACN,SAAQ;AAAA,UAAA;YAOG,SACT,MAGE;AAAA,cAHFa,EAGEE,IAAA;AAAA,gBAFA,MAAK;AAAA,gBACJ,SAAKC,EAAOhB,EAAM,OAAK,CAAA,MAAA,CAAA;AAAA,cAAA;;uBAR5B,MAIE;AAAA,cAJFiB,EAIE,OAAA;AAAA,gBAHA,OAAM;AAAA,gBACN,WAAQ;AAAA,gBACR,aAAAC,EAAQlB,EAAM,KAAK,IAAI;AAAA,cAAA;;;;;;;;;;;;;;;sBCzB/BS,EAAA,GAAAC,EAOM,OAPNS,IAOM;AAAA,MAJJN,EAGEO,IAAA;AAAA,QAFC,MAAMnB,EAAA;AAAA,QACP,eAAA;AAAA,MAAA;;;;;;;;;qBCHJoB,IAAAZ,KAAAC,EAGE,OAHFS,IAGE,MAAA,GAAA,IAAA;AAAA,WAFQlB,EAAA,OAAO;AAAA,IAAA;;;;;;;;;ACXnB,UAAMD,IAAQC,GAWRqB,IAAkBlB,EAAS,MACxBJ,EAAM,UAAU,YAAY,EACpC;2BAICO,EAOQgB,IAAA;AAAA,MANL,OAAOtB,EAAA;AAAA,MACR,SAAQ;AAAA,MACP,SAASqB,EAAA;AAAA,IAAA;iBAEV,MAAkC;AAAA,QAAlCT,EAAkCW,IAAA,EAApB,SAASvB,EAAA,QAAA,GAAO,MAAA,GAAA,CAAA,SAAA,CAAA;AAAA,QAC9BwB,GAAQC,EAAA,QAAA,SAAA;AAAA,MAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;ACPZ,UAAM1B,IAAQC,GAkCR0B,IAAOC,GAOPC,IAAcC,EAA4C,IAAI,GAG9D,EAAE,eAAAC,EAAA,IAAkBC,GAAA,GAEpBC,IAAmBH,EAAI,CAACI,MAA0B;AAAA,IAAC,CAAC,GAEpDC,IAAmBL,EAAI,CAACM,MAA8C;AAAA,IAAC,CAAC,GACxEC,IAAoBP,EAAuB,IAAI;AAErD,QAAIC,EAAc,MAAM,WAAWO,GAAUtC,EAAM,MAAM,GAAG;AAC1D,YAAM;AAAA,QACJ,wBAAAuC;AAAA,QACA,wBAAAC;AAAA,QACA,kCAAAC;AAAA,QACA,sCAAAC;AAAA,QACA,cAAAC;AAAA,MAAA,IACEC,GAAe5C,EAAM,OAAO,MAAMA,EAAM,OAAO,KAAK;AACxD,MAAAiC,EAAiB,QAAQM,GACzBJ,EAAiB,QAAQK,GACzBK;AAAA,QACEF;AAAA,QACA,CAACG,MAAa;AACZ,UAAAT,EAAkB,QAAQS;AAAA,QAC5B;AAAA,QACA,EAAE,WAAW,GAAA;AAAA,MAAK,GAEpBL,EAAiC,CAACP,MAAuC;AACvE,QAAIA,EAAK,WAAWa,GAAsB,WAAWb,EAAK,SAASc,GAAoB,WACrFnB,EAAY,OAAO,KAAA;AAAA,MAEvB,CAAC,GACDa,EAAqC,MAAM;AACzC,QAAAb,EAAY,OAAO,KAAA;AAAA,MACrB,CAAC;AAAA,IACH;AAEA,UAAM,EAAE,GAAAoB,EAAA,IAAM/C,EAAA,GAERgD,IAASC,GAA2BC,IAAmB,MAAS,GAChEC,IAAUF,GAA2BG,IAAoB,MAAS,GAElEC,IAAW,CAACT,MAAqB;AACrC,MAAAnB,EAAK,qBAAqBmB,CAAQ;AAAA,IACpC,GACMU,IAAS,MAAM;AACnB,MAAA7B,EAAK,QAAQ3B,EAAM,UAAU,GAC7BA,EAAM,GAAG,OAAA,GACTiC,EAAiB,MAAMjC,EAAM,UAAU;AAAA,IACzC,GAEMyD,IAAU,MAAM;AACpB,MAAA9B,EAAK,SAAS3B,EAAM,UAAU,GAC9BmC,EAAiB,MAAA;AAAA,IACnB,GAEMuB,IAAuBtD,EAAS,MAChCkC,GAAUtC,EAAM,YAAY,IAAU,CAACA,EAAM,YAAY,IACzDA,EAAM,GAAG,SAAS,SAAe,CAACA,EAAM,EAAE,QAAQ,IAAI,CAAC2D,MAAsBA,EAAK,QAAQ,EAAE,KAAK,GAAG,CAAC,IAClG,CAAA,CACR,GAEKC,IAAgBxD,EAAS,MAAM;AACnC,UAAIkC,GAAUtC,EAAM,KAAK,UAAUA,EAAM;AACzC,UAAI6D,EAAYX,CAAM,KAAKW,EAAYR,CAAO,KAAKQ,EAAY7D,EAAM,GAAG,KAAK,EAAG,QAAO;AACvF,YAAM,EAAE,KAAK8D,MAASC,GAA6B/D,EAAM,GAAG,OAAO,GAAG;AACtE,aAAOiD,EAAEC,IAAS,MAAMG,IAAU,YAAYS,CAAI;AAAA,IACpD,CAAC,GAEKE,IAAmB5D,EAAS,MAC5BkC,GAAUtC,EAAM,QAAQ,IAAUA,EAAM,WACxC,GAAAA,EAAM,GAAG,YAAYA,EAAM,GAAG,SAAS,QAAQ,SAAS,WAE7D,GAEKiE,IAAmB7D,EAAS,MAC5BkC,GAAUtC,EAAM,QAAQ,IAAUA,EAAM,WACrC,CAAC,CAACqC,EAAkB,KAC5B,GAEK6B,IAAqB,CAACC,MACtBC,GAASD,CAAY,KAAK,CAACN,EAAY7D,EAAM,eAAe,IACvDmE,IAAenE,EAAM,kBAEvB;AAOT,WAAAqE,EAAa;AAAA,MACX,OALY,MAAM;AAClB,QAAAxC,EAAY,OAAO,MAAA;AAAA,MACrB;AAAA,IAGE,CACD,mBAICtB,EA0EY+D,IAAA;AAAA,eAzEN;AAAA,MAAJ,KAAIzC;AAAA,MACH,gBAAc5B,EAAA;AAAA,MACd,WAASA,EAAA;AAAA,MACT,kBAAgByD,EAAA;AAAA,MAChB,eAAazD,EAAA;AAAA,MACb,UAAU+D,EAAA;AAAA,MACV,UAAUC,EAAA;AAAA,MACV,MAAMhE,EAAA;AAAA,MACP,aAAA;AAAA,MACC,eAAaA,EAAA;AAAA,MACd,MAAA;AAAA,MACC,kBAAYsE,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAGC,MAAe7C,kBAAqB6C,CAAK;AAAA,MACxD,QAAAhB;AAAA,MACA,SAAAC;AAAA,MACA,uBAAkBc,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAE,MAAElB,EAASkB,CAAM;AAAA,IAAA;MAG3BxE,EAAA;cACN;AAAA,cAED,MACE;AAAA,cADC2D,EAAA,KAAa,GAAA,CAAA;AAAA,UAERI,EAAA,SADNvD,EAAA,GAAAC,EAGA,QAHAS,EAGA;;;;MAGIkB,EAAA;cACL;AAAA,cAED,MASO;AAAA,UATPZ,GASOC,EAAA,QAAA,UAAA,EAPJ,QAASW,EAAA,MAAA,GAFZ,MASO;AAAA,YAJGpC,EAAA,eADRM,EAIEmE,IAAA;AAAA;cAFC,IAAIrC,EAAA;AAAA,cACJ,OAAOpC,EAAA,OAAO;AAAA,YAAA;;;;;MAKb0E,EAAAA,OAAO;cACZ;AAAA,cAED,MAAuB;AAAA,UAAvBlD,GAAuBC,EAAA,QAAA,SAAA;AAAA,QAAA;;;MAGjBiD,EAAAA,OAAO;cACZ;AAAA,QAED,IAAA/D,EAAA,CAFUgE,MAAY;AAAA,UAEtBnD,GAGEC,EAAA,QAAA,WAAA,EADC,OAAOkD,GAAY;AAAA,QAAA;;UAIX3E,EAAA;cACV;AAAA,QAED,IAAAW,EAAA,CAEO,SAJYuD,QAAY;AAAA,UAE/BlD,EAEO,QAAA;AAAA,YAFA,OAAK4D,GAAA,EAAA,gBAAoBX,EAAmBC,CAAY,GAAA;AAAA,UAAA,KAC1DW,EAAA7B,CAAA,EAAC,mCAAA,EAAA,SAA+CkB,GAAY,KAAOlE,EAAA,gBAAA,CAAe,CAAA,GAAA,CAAA;AAAA,QAAA;;;MAIjFA,EAAA;cACL;AAAA,cAED,MAGE;AAAA,aAHFY,EAGEE,IAAA,EADA,MAAK,6BAAyB,MAAA,GAAA,GAAA;AAAA,iBADnBd,EAAA,IAAI;AAAA,UAAA;;;;;;;;;;;;;AChOvB,UAAMD,IAAQC;AAQd,WAAA8E,GAAgB3B,IAAmBpD,EAAM,MAAM,GAE/C+E,GAAgBzB,IAAoBtD,EAAM,OAAO,aAI/CyB,GAAQC,EAAA,QAAA,SAAA;AAAA;;;;;;;;;;;;;ACZV,UAAM1B,IAAQC,GAWR0B,IAAOC,GAKPoD,IAAqB5E,EAAS;AAAA,MAClC,MAAM;AACJ,eAAOJ,EAAM;AAAA,MACf;AAAA,MACA,IAAI8C,GAAsB;AACxB,QAAAnB,EAAK,qBAAqBsD,GAAUnC,CAAQ,CAAC;AAAA,MAC/C;AAAA,IAAA,CACD,GAEK,EAAE,GAAAG,EAAA,IAAM/C,EAAA,GAERgF,IAAW9E,EAAS,MACjB,KAAK,KAAK4E,EAAmB,MAAM,aAAaA,EAAmB,MAAM,WAAW,CAC5F,GAEKG,IAAgB/E,EAAS,MACtB4E,EAAmB,MAAM,OAAOA,EAAmB,MAAM,cAAcA,EAAmB,MAAM,cAAc,CACtH,GAEKI,IAAchF,EAAS,MAEzB4E,EAAmB,MAAM,OAAOA,EAAmB,MAAM,cACzDA,EAAmB,MAAM,cACzBA,EAAmB,MAAM,gBAE5B,GAEKK,IAAuBjF,EAAS,MAC7B4E,EAAmB,MAAM,SAAS,CAC1C,GAEKM,IAAelF,EAAS,MACrB,CAACmF,GAAOP,EAAmB,MAAM,WAAW,KAAKA,EAAmB,MAAM,SAASE,EAAS,KACpG,GAEKM,IAAepF,EAAS,MAEzBmF,GAAOP,EAAmB,MAAM,WAAW,KAAKA,EAAmB,MAAM,SAASE,EAAS,SAC5FF,EAAmB,MAAM,gBAAgB,EAE5C,GAEKS,IAAyBrF,EAAS,MACjCmF,GAAOP,EAAmB,MAAM,WAAW,IAGzCA,EAAmB,MAAM,aAFvBA,EAAmB,MAAM,cAAcI,EAAY,QAAQ,IAAI,MAAMA,EAAY,KAG3F,GAEKM,IAAsBtF,EAAS,MAC5B4E,EAAmB,MAAM,WACjC;AACD,IAAAnC,GAAM6C,GAAqB,CAAC5C,GAAU6C,MAAa;AACjD,MAAI7C,MAAa6C,MACfX,EAAmB,MAAM,OAAO,GAChCrD,EAAK,QAAQ;AAAA,IAEjB,CAAC;AACD,UAAMiE,IAAexF,EAAS,MACrB4E,EAAmB,MAAM,IACjC;AACD,IAAAnC,GAAM+C,GAAc,CAAC9C,GAAU6C,MAAa;AAC1C,MAAI7C,MAAa6C,KACfhE,EAAK,QAAQ;AAAA,IAEjB,CAAC;AAED,UAAMkE,IAAe,MAAM;AACzB,MAAAb,EAAmB,MAAM,OAAO;AAAA,IAClC,GAEMc,IAAc,MAAM;AACxB,MAAAd,EAAmB,MAAM,OAAOE,EAAS;AAAA,IAC3C,GAEMa,IAAc,MAAM;AACxB,MAAAf,EAAmB,MAAM,OAAOA,EAAmB,MAAM,OAAO;AAAA,IAClE,GAEMgB,IAAc,MAAM;AACxB,MAAAhB,EAAmB,MAAM,OAAOA,EAAmB,MAAM,OAAO;AAAA,IAClE;sBAIEvE,EAAA,GAAAC,EAgEM,OAhENS,IAgEM;AAAA,MA9DKlB,EAAA,kCADTQ,KAAAC,EAwBM,OAxBNuF,IAwBM;AAAA,QApBDC,EAAAhF,EAAA4D,EAAA7B,CAAA,6CAA4C,MAC/C,CAAA;AAAA,QAAApC,EAkBasF,IAAA;AAAA,UAjBF,YAAAnB,EAAA,MAAmB;AAAA,UAAnB,uBAAAT,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAE,MAAAO,EAAA,MAAmB,cAAWP;AAAA,UACvC,OAAM;AAAA,UACN,SAAQ;AAAA,UACR,WAAA;AAAA,UACA,WAAQ;AAAA,QAAA;qBAGN,MAAmC;AAAA,oBADrC/D,EAUO0F,IAAA,MAAAC,GATUpG,EAAA,qBAAmB,CAA3B0D,YADTpD,EAUO+F,IAAA;AAAA,cARJ,KAAK3C;AAAA,cACL,OAAOA,MAASqB,EAAA,MAAmB,cAAW,cAAA;AAAA,cAC9C,OAAOrB;AAAA,cACR,SAAQ;AAAA,cACR,MAAK;AAAA,cACL,SAAQ;AAAA,YAAA;yBAER,MAAU;AAAA,oBAAPA,CAAI,GAAA,CAAA;AAAA,cAAA;;;;;;;MAIb1C,EAEM,OAFNsF,IAEMrF,EADDiE,EAAA,KAAa,IAAG,QAAGjE,EAAGkE,EAAA,KAAW,IAAG,MAAClE,EAAG4D,EAAA7B,CAAA,EAAC,8BAAA,CAAA,IAAmC,QAAIwC,EAAA,KAAsB,GAAA,CAAA;AAAA,MAE3GxE,EAeM,OAfNuF,IAeM;AAAA,QAdJ3F,EAMEyF,IAAA;AAAA,UALC,UAAUjB,EAAA;AAAA,UACX,MAAK;AAAA,UACL,MAAK;AAAA,UACL,SAAQ;AAAA,UACP,WAAYQ,GAAY,CAAA,MAAA,CAAA;AAAA,QAAA;QAE3BhF,EAMEyF,IAAA;AAAA,UALC,UAAUjB,EAAA;AAAA,UACX,MAAK;AAAA,UACL,MAAK;AAAA,UACL,SAAQ;AAAA,UACP,WAAYU,GAAW,CAAA,MAAA,CAAA;AAAA,QAAA;;MAG5B9E,EAEM,OAFNwF,IAEM;AAAA,QADJxF,EAA0C,QAAA,MAAAC,EAAjC8D,EAAA,MAAmB,IAAI,GAAA,CAAA;AAAA,MAAA;MAElC/D,EAeM,OAfNyF,IAeM;AAAA,QAdJ7F,EAMEyF,IAAA;AAAA,UALC,UAAUd,EAAA;AAAA,UACX,MAAK;AAAA,UACL,MAAK;AAAA,UACL,SAAQ;AAAA,UACP,WAAYQ,GAAW,CAAA,MAAA,CAAA;AAAA,QAAA;QAE1BnF,EAMEyF,IAAA;AAAA,UALC,UAAUhB,EAAA;AAAA,UACX,MAAK;AAAA,UACL,MAAK;AAAA,UACL,SAAQ;AAAA,UACP,WAAYQ,GAAW,CAAA,MAAA,CAAA;AAAA,QAAA;;;;;;;;;;;;;;;ACnKhC,UAAM9F,IAAQC,GAcR0B,IAAOC,GAIP,EAAE,GAAAqB,EAAA,IAAM/C,EAAA,GAERyG,IAAY,CAACC,MACV,CAAC5G,EAAM,cAAc,SAAS4G,CAAG,GAGpCC,IAAmB,CAACD,MAAgB;AACxC,YAAME,IAAS7B,GAAUjF,EAAM,aAAa,GACtC+G,IAAQD,EAAO,QAAQF,CAAG;AAChC,UAAIG,IAAQ,IAAI;AACd,QAAAD,EAAO,OAAOC,GAAO,CAAC,GACtBpF,EAAK,wBAAwBmF,CAAM;AACnC;AAAA,MACF;AACA,MAAAA,EAAO,KAAKF,CAAG,GACfjF,EAAK,wBAAwBmF,CAAM;AAAA,IACrC;2BAIEvG,EAgDO+F,IAAA;AAAA,MA/CJ,UAAOrG,EAAA,WAAW;AAAA,MAClB,WAASA,EAAA;AAAA,MACV,OAAM;AAAA,MACN,MAAA;AAAA,MACA,MAAK;AAAA,MACL,SAAQ;AAAA,IAAA;iBAER,MAAwB;AAAA,QAAxBY,EAAwBE,IAAA,EAAjB,MAAK,WAAS;AAAA,QACrBF,EAKWmG,IAAA;AAAA,UAJT,WAAU;AAAA,UACV,UAAS;AAAA,QAAA;qBAET,MAAgB;AAAA,YAAbd,EAAAhF,EAAA4D,EAAA7B,CAAA,EAAEhD,EAAA,OAAO,CAAA,GAAA,CAAA;AAAA,UAAA;;;QAEdY,EAgCQoG,IAAA;AAAA,UA/BL,aAAW;AAAA,UACZ,WAAU;AAAA,QAAA;qBAEV,MA2BQ;AAAA,YA3BRpG,EA2BQU,IAAA,MAAA;AAAA,yBA1BN,MAyBQ;AAAA,gBAzBRV,EAyBQqG,IAAA,EAzBD,SAAQ,aAAS;AAAA,6BACtB,MAIY;AAAA,oBAJZrG,EAIYsG,IAAA,MAAA;AAAA,iCAHV,MAEiB;AAAA,wBAFjBtG,EAEiBuG,IAAA,MAAA;AAAA,qCADf,MAA+D;AAAA,4BAA/DnG,EAA+D,kBAApD6D,EAAA7B,CAAA,EAAC,qCAAA,CAAA,GAAA,CAAA;AAAA,0BAAA;;;;;;4BAGhBvC,EAkBY0F,IAAA,MAAAC,GAjBOpG,EAAA,YAAU,CAApBoH,YADT9G,EAkBY4G,IAAA;AAAA,sBAhBT,KAAKE,EAAO;AAAA,sBACZ,SAAKrG,EAAA,CAAAyD,MAAOoC,EAAiBQ,EAAO,GAAG,GAAA,CAAA,MAAA,CAAA;AAAA,oBAAA;iCAExC,MAYiB;AAAA,wBAZjBxG,EAYiBuG,IAAA,MAAA;AAAA,qCAXf,MAIE;AAAA,4BAHMT,EAAUU,EAAO,GAAG,UAD5B9G,EAIEQ,IAAA;AAAA;8BAFA,OAAM;AAAA,8BACN,MAAK;AAAA,4BAAA,YAEPR,EAIEQ,IAAA;AAAA;8BAFA,OAAM;AAAA,8BACN,MAAK;AAAA,4BAAA;8BACL,MACFG,EAAGmG,EAAO,KAAK,GAAA,CAAA;AAAA,0BAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3E7B,UAAMrH,IAAQC,GAYR0B,IAAOC,GAKP,EAAE,GAAAqB,EAAA,IAAM/C,EAAA,GAGRoH,IAASxF,EAAI9B,EAAM,UAAU,GAE7BgF,IAAqB5E,EAAS;AAAA,MAClC,MAAM;AACJ,eAAOJ,EAAM;AAAA,MACf;AAAA,MACA,IAAI8C,GAAkB;AACpB,QAAAwE,EAAO,QAAQxE,GACfnB,EAAK,qBAAqBmB,CAAQ;AAAA,MACpC;AAAA,IAAA,CACD,GAEKyE,IAAyC;AAAA,MAC7C,EAAE,IAAI,GAAG,QAAQ,+CAA+C,QAAQ,EAAE,KAAK,aAAa,OAAOC,GAAU,KAAA,EAAK;AAAA,MAClH,EAAE,IAAI,GAAG,QAAQ,2CAA2C,QAAQ,EAAE,KAAK,aAAa,OAAOA,GAAU,IAAA,EAAI;AAAA,IAAE,GAG3GC,IAA2C;AAAA,MAC/C,EAAE,IAAI,GAAG,QAAQ,+CAA+C,QAAQ,EAAE,KAAK,MAAM,OAAOD,GAAU,KAAA,EAAK;AAAA,MAC3G,EAAE,IAAI,GAAG,QAAQ,2CAA2C,QAAQ,EAAE,KAAK,MAAM,OAAOA,GAAU,IAAA,EAAI;AAAA,IAAE,GAGpGE,IAAqD;AAAA,MACzD;AAAA,QACE,IAAI;AAAA,QACJ,QAAQ;AAAA,QACR,QAAQ,EAAE,KAAKC,IAAe,OAAOH,GAAU,KAAA;AAAA,MAAK;AAAA,MAEtD,EAAE,IAAI,GAAG,QAAQ,+CAA+C,QAAQ,EAAE,KAAK,aAAa,OAAOA,GAAU,KAAA,EAAK;AAAA,MAClH,EAAE,IAAI,GAAG,QAAQ,2CAA2C,QAAQ,EAAE,KAAK,aAAa,OAAOA,GAAU,IAAA,EAAI;AAAA,IAAE,GAG3GI,IAAcxH,EAAS,MAAM;AACjC,YAAMyH,IAAQzF,EAAQ,MAAM,KAAK,CAACuB,MAAcA,EAAK,OAAO2D,EAAO,KAAK;AACxE,aAAIO,IAAc5E,EAAE4E,EAAM,MAAM,IACzB;AAAA,IACT,CAAC,GAEKzF,IAAUhC,EAAS,MACnBJ,EAAM,gBAAsBA,EAAM,gBAClCA,EAAM,YAAY,kBAAwB0H,IAC1C1H,EAAM,YAAY,OAAayH,IAC5BF,CACR,GAEKO,IAAc,CAACnE,MAAkC;AACrD,MAAAqB,EAAmB,QAAQrB,EAAK;AAAA,IAClC;AAEA,WAAAd;AAAA,MACEyE;AAAA,MACA,CAACxE,GAAU6C,MAAa;AACtB,YAAI9B,EAAY8B,CAAQ,KAAK7C,MAAa6C,EAAU;AACpD,cAAMkC,IAAQzF,EAAQ,MAAM,KAAK,CAACuB,MAAcA,EAAK,OAAOb,CAAQ;AACpE,QAAI+E,KAAOlG,EAAK,gBAAgBkG,CAAK;AAAA,MACvC;AAAA,MACA,EAAE,WAAW,GAAA;AAAA,IAAK,GAGpBhF;AAAA,MACEmC;AAAA,MACA,CAAClC,GAAU6C,MAAa;AACtB,QAAI9B,EAAY8B,CAAQ,KAAK7C,MAAa6C,MAC1C2B,EAAO,QAAQxE;AAAA,MACjB;AAAA,MACA,EAAE,WAAW,GAAA;AAAA,IAAK,cAKlBrC,EAAA,GAAAC,EAgCM,OAhCNS,IAgCM;AAAA,MA/BJF,EAEM,OAFNgF,IAEM/E,EADD4D,EAAA7B,CAAA,+CAA8C,MACnD,CAAA;AAAA,MACApC,EA2BOyF,IAAA;AAAA,QA1BL,SAAQ;AAAA,QACR,SAAQ;AAAA,QACR,MAAK;AAAA,QACL,eAAY;AAAA,MAAA;mBAEZ,MAAiB;AAAA,UAAdJ,EAAAhF,EAAA0G,EAAA,KAAW,IAAG,KACjB,CAAA;AAAA,UAAA/G,EAmBQoG,IAAA;AAAA,YAlBN,WAAU;AAAA,YACV,UAAS;AAAA,YACT,0BAAA;AAAA,UAAA;uBAEA,MAaQ;AAAA,cAbRpG,EAaQqG,IAAA;AAAA,gBAZN,SAAQ;AAAA,gBACR,OAAM;AAAA,cAAA;2BAGJ,MAAuB;AAAA,0BADzBxG,EAQY0F,IAAA,MAAAC,GAPKjE,EAAA,OAAO,CAAfuB,YADTpD,EAQY4G,IAAA;AAAA,oBANT,KAAKxD,EAAK;AAAA,oBACV,SAAK,CAAAc,MAAEqD,EAAYnE,CAAI;AAAA,kBAAA;+BAExB,MAEiB;AAAA,sBAFjB9C,EAEiBuG,IAAA;AAAA,wBAFA,OAAKvC,GAAA,EAAA,oBAAwBlB,EAAK,OAAO2D,EAAA,OAAM;AAAA,sBAAA;mCAC9D,MAAoB;AAAA,8BAAjBxC,EAAA7B,CAAA,EAAEU,EAAK,MAAM,CAAA,GAAA,CAAA;AAAA,wBAAA;;;;;;;;;;;;;;;;;;;;;;;AC3H9B,UAAM3D,IAAQC,GAOR8H,IAAe3H,EAAS,MACrBJ,EAAM,IACd;AAED,WAAA6C;AAAA,MACEkF;AAAA,MACA,CAACjF,MAAa;AACZ,gBAAQ,IAAIA,CAAQ;AAAA,MACtB;AAAA,MACA,EAAE,WAAW,GAAA;AAAA,IAAK,mBAKlBpC,EAAO,KAAA;AAAA;;;;;;;;;;;;;;;;;;AChBT,UAAMV,IAAQC,GAsBR0B,IAAOC,GAQPoG,IAAaC,GAAoBhI,GAAA,YAAoC,GAErE,EAAE,GAAAgD,EAAA,IAAM/C,EAAA,GAERgI,IAAgBpG,EAAI,EAAK,GAEzBqG,IAAS,MAAM;AACnB,MAAAH,EAAW,QAAQ,IACnBrG,EAAK,QAAQ;AAAA,IACf,GAEMyG,IAAU,MAAM;AACpB,MAAAJ,EAAW,QAAQ,IACnBrG,EAAK,SAAS;AAAA,IAChB,GAEM0G,IAASC,GAAA,GACT,EAAE,qBAAAC,GAAqB,eAAAC,GAAe,mBAAAC,EAAA,IAAsBC,GAAA,GAE5DC,IAAY,YAAY;AAC5B,MAAAhH,EAAK,WAAW;AAChB,UAAI;AAGF,YAFAuG,EAAc,QAAQ,IACtBlI,EAAM,GAAG,OAAA,GACL,CAAC6D,EAAY7D,EAAM,CAAC,KAAKA,EAAM,EAAE,UAAU;AAC7C,UAAAuI,EAAA,GACAL,EAAc,QAAQ;AACtB;AAAA,QACF;AACA,cAAMU,IAAM,MAAM5I,EAAM,WAAA;AACxB,QAAA2B,EAAK,aAAaiH,CAAG,GACrBJ,EAAc,SAAS,GACvBJ,EAAA,GACI,CAACvE,EAAY+E,EAAI,EAAE,KAAK,CAAC5I,EAAM,mBAAmBA,EAAM,qBAC1DqI,EAAO,KAAK;AAAA,UACV,MAAMrI,EAAM;AAAA,UACZ,QAAQ,EAAE,CAACA,EAAM,iBAAiB,GAAG4I,EAAI5I,EAAM,iBAAiB,EAAA;AAAA,QAAE,CACnE;AAAA,MAEL,SAAS6I,GAAO;AACd,QAAAJ,EAAkBI,CAAK,GACvBlH,EAAK,WAAWkH,CAAK;AAAA,MACvB,UAAA;AACE,QAAAX,EAAc,QAAQ;AAAA,MACxB;AAAA,IACF;;;kBAIE3H,EA+CcuI,GAAA;AAAA,QA9CX,UAAO7I,EAAA,WAAW;AAAA,QACnB,SAAQ;AAAA,QACP,WAASA,EAAA;AAAA,QACT,WAAYkI,GAAM,CAAA,MAAA,CAAA;AAAA,MAAA;mBAEnB,MAEO;AAAA,UAFP1G,GAEOC,8BAFP,MAEO;AAAA,gBADFoD,EAAA7B,CAAA,EAAC,sBAAA,CAAA,GAAA,CAAA;AAAA,UAAA;UAENpC,EAqCUkI,IAAA;AAAA,YApCP,eAAaf,EAAA;AAAA,YACb,aAAW/H,EAAA;AAAA,YACZ,YAAA;AAAA,YACC,uBAAkBsE,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAE,MAAEuD,EAAA,QAAavD;AAAA,UAAA;uBAElC,MA8BQ;AAAA,cA7BAuD,EAAA,cADRzH,EA8BQgB,IAAA;AAAA;gBA5BN,WAAQ;AAAA,cAAA;2BAER,MAIiB;AAAA,kBAJjBV,EAIiBmI,IAAA,EAJA,YAAWZ,KAAO;AAAA,+BACjC,MAEO;AAAA,sBAFP3G,GAEOC,uBAFP,MAEO;AAAA,4BADFoD,EAAA7B,CAAA,EAAC,sBAAA,CAAA,GAAA,CAAA;AAAA,sBAAA;;;;kBAGRpC,EAEYoI,IAAA,MAAA;AAAA,+BADV,MAAuB;AAAA,sBAAvBxH,GAAuBC,EAAA,QAAA,SAAA;AAAA,oBAAA;;;kBAEzBb,EAiBeqI,IAAA,MAAA;AAAA,+BAhBb,MAAW;AAAA,sBAAXrI,EAAWsI,EAAA;AAAA,sBACXtI,EAKeuI,GAAA;AAAA,wBAJb,WAAQ;AAAA,wBACP,WAAYhB,GAAO,CAAA,MAAA,CAAA;AAAA,sBAAA;mCAEpB,MAA+B;AAAA,8BAA5BtD,EAAA7B,CAAA,EAAC,sBAAA,CAAA,GAAA,CAAA;AAAA,wBAAA;;;sBAENpC,EAQciI,GAAA;AAAA,wBAPX,SAASZ,EAAA;AAAA,wBACV,WAAQ;AAAA,wBACP,WAAYS,GAAS,CAAA,MAAA,CAAA;AAAA,sBAAA;mCAEtB,MAEO;AAAA,0BAFPlH,GAEOC,sCAFP,MAEO;AAAA,gCADFoD,EAAA7B,CAAA,EAAC,sBAAA,CAAA,GAAA,CAAA;AAAA,0BAAA;;;;;;;;;;;;;;;;;;;;;;;;AC3HlB,UAAMjD,IAAQC,GASR,EAAE,EAAA,IAAMC,EAAA,GASRmJ,IAASvH,EAAuB,EAAE;AAExC,WAAAwH,GAAU,YAAY;AACpB,UAAItJ,EAAM,aAAaA,EAAM,UAAU,SAAS;AAC9C,YAAI;AACF,gBAAM,EAAE,MAAAkC,EAAA,IAAS,MAAMqH,GAA4BvJ,EAAM,SAAS,EAAE,IAAA,EAAM,KAAA;AAC1E,UAAAqJ,EAAO,QAAQnH,EAAK;AAAA,QACtB,QAAY;AAAA,QAEZ;AAAA,IAEJ,CAAC,aAKSmH,EAAA,MAAO,SAAM,UADrB9I,EAiCO+F,IAAA;AAAA;MA/BL,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,MAAA;AAAA,IAAA;iBAEA,MAA8B;AAAA,QAA9BzF,EAA8BE,IAAA,EAAvB,MAAK,iBAAe;AAAA,QAC3BF,EAKWmG,IAAA;AAAA,UAJT,WAAU;AAAA,UACV,UAAS;AAAA,QAAA;qBAET,MAA6C;AAAA,gBAA1ClC,EAAA,CAAA,EAAC,oCAAA,CAAA,GAAA,CAAA;AAAA,UAAA;;;QAENjE,EAmBQoG,IAAA,EAnBD,WAAU,YAAQ;AAAA,qBACvB,MAiBQ;AAAA,YAjBRpG,EAiBQU,IAAA,MAAA;AAAA,yBAhBN,MAeM;AAAA,gBAfNN,EAeM,OAfNE,IAeM;AAAA,0BAdJT,EAaI0F,IAAA,MAAAC,GAZagD,EAAA,OAAM,CAAd1F,YADTjD,EAaI,KAAA;AAAA,oBAXD,KAAKiD,EAAK;AAAA,oBACV,MAAMA,EAAK;AAAA,oBACZ,KAAI;AAAA,oBACJ,QAAO;AAAA,oBACP,OAAM;AAAA,kBAAA;oBAEN1C,EAGC,OAAA;AAAA,sBAFE,KAAK0C,EAAK;AAAA,sBACV,KAAKA,EAAK;AAAA,oBAAA;oBAEb1C,EAAkE,QAAlEuF,IAAkEtF,EAApByC,EAAK,KAAK,GAAA,CAAA;AAAA,kBAAA;;;;;;;;;;;;;;;cCjElEpD,EAAciJ,CAAA;;;;;;;;;;;;;;;;ACMhB,UAAMxJ,IAAQC,GAYRwJ,IAAYrJ,EAAS,MAClBsJ,GAAe1J,EAAM,KAAK,SAAS,CAC3C,GACK2J,IAAavJ,EAAS,MACnBsJ,GAAe1J,EAAM,KAAK,UAAU,CAC5C,GAEK,EAAE,GAAAiD,EAAA,IAAM/C,EAAA;;MAIZW,EASO+I,IAAA;AAAA,QATA,OAAO9E,EAAA7B,CAAA,EAAC,+BAAA;AAAA,MAAA;mBACb,MAOM;AAAA,UAPNhC,EAOM,OAPNE,IAOM;AAAA,YALKlB,EAAA,kCADTS,EAKM,OALNuF,IAKM/E,EADDuI,EAAA,KAAS,GAAA,CAAA;AAAA;;;;MAIlB5I,EASO+I,IAAA;AAAA,QATA,OAAO9E,EAAA7B,CAAA,EAAC,gCAAA;AAAA,MAAA;mBACb,MAOM;AAAA,UAPNhC,EAOM,OAPNsF,IAOM;AAAA,YALKtG,EAAA,mCADTS,EAKM,OALN8F,IAKMtF,EADDyI,EAAA,KAAU,GAAA,CAAA;AAAA;;;;;;;ACvBd,SAASE,GAA0B3G,GAAiBG,GAAkB;AAC3E,SAAO,CAACjB,IAAyC,OAAkB;AACjE,UAAM0H,IAAUjG,EAAYzB,EAAQ,OAAO,IAAI,OAAOA,EAAQ;AAE9D,QAAI2H,IAAelG,EAAYzB,EAAQ,OAAO,IAAI,OAAOA,EAAQ;AACjE,IAAIyB,EAAYzB,EAAQ,OAAO,KAAK0H,MAAY,SAC9CC,IAAe,CAAA;AAEjB,QAAIC,IAAS5H,EAAQ;AACrB,WAAIyB,EAAYmG,CAAM,KAAK9G,KAAUG,KAAWjB,EAAQ,SACtD4H,IAAS9G,IAAS,MAAMG,IAAU,aAAajB,EAAQ,OAGlD;AAAA,MACL,SAAA0H;AAAA,MACA,QAAAE;AAAA,MACA,SAASD;AAAA,MACT,OAAOlG,EAAYzB,EAAQ,KAAK,IAAI,KAAKA,EAAQ;AAAA,MACjD,UAAU6H,GAAQF,CAAY;AAAA,MAC9B,WAAWlG,EAAYzB,EAAQ,SAAS,IAAI,KAAOA,EAAQ;AAAA,MAC3D,WAAWyB,EAAYzB,EAAQ,SAAS,IAAI,KAAQA,EAAQ;AAAA,MAC5D,UAAUyB,EAAYzB,EAAQ,QAAQ,IAAI,KAAQA,EAAQ;AAAA,MAC1D,SAASyB,EAAYzB,EAAQ,OAAO,IAAI,KAAQA,EAAQ;AAAA,MACxD,OAAO6C,GAAU8E,CAAY;AAAA,MAC7B,OAAO;AAAA,IAAA;AAAA,EAEX;AACF;AAEO,SAASG,GAAiBC,IAA8B,QAAW;AACxE,QAAMC,IAAW,CAACC,MAAmB;AACnC,IAAKA,EAAO,cACZA,EAAO,QAAQA,EAAO,SACtBA,EAAO,QAAQ;AAAA,EACjB,GAEMC,IAAW,CAACC,MAAyB;AACzC,eAAWC,KAAcD;AACvB,MAAAH,EAASG,EAAUC,CAAU,CAAC;AAAA,EAElC,GAEMC,IAAiB,CAACF,MAAyB;AAC/C,eAAWC,KAAcD;AACvB,MAAAA,EAAUC,CAAU,EAAE,QAAQ;AAAA,EAElC,GAEME,IAAmB,CAACH,GAAsBnI,IAAmC,CAAA,MAAO;AACxF,QAAI,CAAC+H,KAAW,CAAC,aAAc;AAC/B,UAAM,EAAE,oBAAAQ,GAAoB,UAAAC,EAAA,IAAaxI;AACzC,QAAIyI,IAAmB;AACvB,UAAMC,IAAS,aAAa,QAAQX,CAAO;AAC3C,QAAI,CAACW,EAAQ;AACb,UAAMC,IAAa,KAAK,MAAMD,CAAM;AACpC,QAAKE,GAASD,CAAU,GACxB;AAAA,iBAAWP,KAAcD;AACvB,YAAI;AAEF,UAAK1G,EAAYkH,EAAWP,CAAU,CAAC,MAErCD,EAAUC,CAAU,EAAE,QAAQO,EAAWP,CAAU,GAC/CD,EAAUC,CAAU,EAAE,aACxBK,IAAmB;AAAA,QAGzB,QAAY;AAAA,QAEZ;AAEF,MAAIF,KAAsBE,MAAkBF,EAAmB,QAAQ,KACnEC,OAAmBC,CAAgB;AAAA;AAAA,EACzC,GAEMI,IAAc,CAACV,MAAyB;AAC5C,QAAI,CAACJ,KAAW,CAAC,aAAc;AAC/B,UAAMjI,IAA4B,CAAA;AAClC,eAAWsI,KAAcD;AACvB,UAAI;AACF,QACE,CAACC,EAAW,WAAW,GAAG,KAC1B,CAAC3G,EAAY0G,EAAUC,CAAU,EAAE,KAAK,KACxC,CAACjF,GAAOgF,EAAUC,CAAU,EAAE,KAAK,KACnC,CAACU,GAAcX,EAAUC,CAAU,EAAE,KAAK,KAC1C,CAACW,GAAaZ,EAAUC,CAAU,EAAE,KAAK,KACzCD,EAAUC,CAAU,EAAE,UAAUD,EAAUC,CAAU,EAAE,YAEtDtI,EAAKsI,CAAU,IAAID,EAAUC,CAAU,EAAE;AAAA,MAE7C,QAAY;AAAA,MAEZ;AAEF,IAAIU,GAAchJ,CAAI,KACtB,aAAa,QAAQiI,GAAS,KAAK,UAAUjI,CAAI,CAAC;AAAA,EACpD;AAkBA,SAAO;AAAA,IACL,gBAAAuI;AAAA,IACA,UAAAH;AAAA,IACA,UAAAF;AAAA,IACA,aApBkB,CAACG,GAAsBa,GAAwBR,MAAmB;AACpF,MAAAN,EAASC,CAAS,GAClBa,EAAW,OAAO,GACdjB,KAAW,gBACb,aAAa,WAAWA,CAAO,GAE7BS,KAAUA,EAAA;AAAA,IAChB;AAAA,IAcE,cAZmB,CAACL,GAAsBa,GAAwBR,MAAwB;AAC1F,MAAAH,EAAeF,CAAS,GACxBU,EAAYV,CAAS,GACrBa,EAAW,OAAO,GAClBR,EAAA;AAAA,IACF;AAAA,IAQE,kBAAAF;AAAA,EAAA;AAEJ;;;;;;;;;;ACzIA,UAAM1K,IAAQC,GAWR0B,IAAOC,GAIPyJ,IAAQjL,EAAS;AAAA,MACrB,MAAM;AACJ,eAAOJ,EAAM,WAAW;AAAA,MAC1B;AAAA,MACA,IAAI8C,GAAU;AACZ,QAAAnB,EAAK,qBAAqB,EAAE,GAAG3B,EAAM,YAAiB,OAAO8C,GAAY;AAAA,MAC3E;AAAA,IAAA,CACD,GAEK,EAAE,UAAAsH,EAAA,IAAaF,GAAA,GAEf,EAAE,GAAAjH,EAAA,IAAM/C,EAAA,GAERoL,IAAQlL,EAAS,MACdJ,EAAM,WAAW,SAASiD,EAAEjD,EAAM,WAAW,MAAM,IAAI,MAC/D,GAEKuL,IAAsBnL,EAAS,MAC9ByD,EAAY7D,EAAM,WAAW,IAC9BA,EAAM,WAAW,YAAY,eAAqBiD,EAAE,2CAA2C,IAC/FjD,EAAM,WAAW,YAAY,OAAaiD,EAAE,mCAAmC,IAC/EjD,EAAM,WAAW,YAAY,cAAcA,EAAM,WAAW,YAAY,WACnEiD,EAAE,yCAAyC,IAC7C,KALqCjD,EAAM,WAMnD;2BAICO,EAOEiL,IAAA;AAAA,kBANSH,EAAA;AAAA,oDAAAA,EAAK,QAAA5G;AAAA,MACb,OAAO6G,EAAA;AAAA,MACP,aAAaC,EAAA;AAAA,MACb,WAAS,CAAGtL,EAAA,WAAW;AAAA,MACvB,WAASA,EAAA;AAAA,MACT,iBAAWsE,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAAvD,EAAA,CAAAyD,MAAOK,EAAAsF,CAAA,EAASnK,EAAA,UAAU,GAAA,CAAA,MAAA,CAAA;AAAA,IAAA;;;;;;;;;;;;;;AChD1C,UAAMD,IAAQC,GAoBRwL,IAAQ3J,EAAI,EAAE,GACd,EAAE,UAAA4J,GAAU,YAAAC,GAAY,aAAAC,GAAa,WAAAC,GAAW,iBAAAC,EAAA,IAAoBC,GAAO/L,CAAK,GAChF,EAAE,GAAAiD,EAAA,IAAM/C,EAAA,GAER8L,IAAe,CAAC3B,MACb,CAACxG,EAAYwG,CAAM,KAAK,CAACxG,EAAYwG,EAAO,KAAK,GAEpD,EAAE,UAAAD,EAAA,IAAaF,GAAA,GACf+B,IAAgB,CAAC5B,MAAgD;AACrE,MAAI2B,EAAa3B,CAAM,KACrBD,EAASC,EAAO,KAAK;AAAA,IAEzB,GACM6B,IAAuB,CAACC,IAAoD,WAAc;AAC9F,MAAIA,GAAc,OAAO,WAAWT,GAAU,OAAO,UACnDO,EAAcP,CAAQ,GAEpBS,GAAc,OAAO,WAAWP,GAAa,OAAO,UACtDK,EAAcL,CAAW,GAEvBO,GAAc,OAAO,WAAWR,GAAY,OAAO,UACrDM,EAAcN,CAAU,GAEtBQ,GAAc,OAAO,WAAWN,GAAW,OAAO,UACpDI,EAAcJ,CAAS,GAEpBhI,EAAYiI,CAAe,KAC9BA,EAAgB,OAAO,QAAQ,CAACzB,MAAgB;AAC9C,QAAI8B,GAAc,OAAO,WAAW9B,EAAO,UACzCD,EAASC,CAAM;AAAA,MAEnB,CAAC;AAAA,IAEL,GACM+B,IAA0CtK,EAAI,MAAS;AAC7D,IAAAe,GAAMuJ,GAAgB,MAAM;AAC1B,UAAIJ,EAAaI,CAAc,GAAG;AAChC,QAAAA,EAAe,MAAM,QAAQX,EAAM,OACnCY,EAAc,QAAQD,EAAe,OACrCF,EAAqBE,CAAc;AACnC;AAAA,MACF;AACA,MAAAE,EAAWb,EAAM,KAAK;AAAA,IACxB,CAAC;AACD,UAAMY,IAAyCvK,EAAI,MAAS;AAC5D,IAAAe,GAAM4I,GAAO,CAACc,MAAqB;AACjC,MAAAD,EAAWC,CAAQ;AAAA,IACrB,CAAC;AACD,UAAMD,IAAa,CAACC,MAAqB;AACvC,UAAIP,EAAaI,CAAc,GAAG;AAChC,QAAAA,EAAe,MAAM,QAAQG;AAC7B;AAAA,MACF;AACA,YAAMlC,IAASmC,EAAiBD,CAAQ;AACxC,MAAK1I,EAAYwG,CAAM,MACrBA,EAAO,QAAQkC,IAEjBF,EAAc,QAAQhC,GACtB6B,EAAqBG,CAAa;AAAA,IACpC,GACMG,IAAmB,CAACD,MAAyC;AACjE,UAAIE,GAAMF,CAAQ,KACZP,EAAaN,CAAQ;AACvB,eAAOA,EAAS;AAGpB,UAAIgB,GAAQH,CAAQ,KACdP,EAAaJ,CAAW;AAC1B,eAAOA,EAAY;AAGvB,UAAIe,GAASJ,CAAQ,KAAKA,EAAS,SAAS,GAAG;AAC7C,YAAIP,EAAaH,CAAS,KAAKU,EAAS,WAAW,MAAM;AACvD,iBAAOV,EAAU;AAEnB,YAAIG,EAAaL,CAAU;AACzB,iBAAOA,EAAW;AAAA,MAEtB;AAAA,IAEF,GAEML,IAAQlL,EAAS,MAAM;AAC3B,UAAI4L,EAAaI,CAAc;AAC7B,eAAOnJ,EAAEmJ,EAAe,MAAM,UAAU,EAAE;AAE5C,UAAIJ,EAAaK,CAAa;AAC5B,eAAOpJ,EAAEoJ,EAAc,MAAM,UAAU,EAAE;AAE3C,YAAMO,IAAe,CAAA;AACrB,aAAIZ,EAAaN,CAAQ,KACvBkB,EAAa,KAAK3J,EAAEyI,EAAS,MAAM,UAAU,EAAE,CAAC,GAE9CM,EAAaJ,CAAW,KAC1BgB,EAAa,KAAK3J,EAAE2I,EAAY,MAAM,UAAU,EAAE,CAAC,GAEjDI,EAAaH,CAAS,KACxBe,EAAa,KAAK3J,EAAE4I,EAAU,MAAM,UAAU,EAAE,CAAC,GAE/CG,EAAaL,CAAU,KACzBiB,EAAa,KAAK3J,EAAE0I,EAAW,MAAM,UAAU,EAAE,CAAC,GAE7CiB,EAAa,KAAK,GAAG;AAAA,IAC9B,CAAC,GAEKC,IAAqBzM,EAAS,MAC3BiM,EAAc,OAAO,KAC7B;AACD,IAAAxJ,GAAMgK,GAAoB,CAACN,MAAa;AACtC,MAAI,CAACO,GAAQrB,EAAM,KAAK,KAAKqB,GAAQP,CAAQ,MAC3Cd,EAAM,QAAQ;AAAA,IAElB,CAAC;AAED,UAAMF,IAAsBnL,EAAS,MAC9ByD,EAAY7D,EAAM,WAAW,IAC9BqM,EAAc,OAAO,YAAY,eAAqBpJ,EAAE,2CAA2C,IACnGoJ,EAAc,OAAO,YAAY,OAAapJ,EAAE,mCAAmC,IACnFoJ,EAAc,OAAO,YAAY,cAAcA,EAAc,OAAO,YAAY,WAC3EpJ,EAAE,yCAAyC,IAC7C,KALqCjD,EAAM,WAMnD;2BAICO,EAyBaiL,IAAA;AAAA,kBAxBFC,EAAA;AAAA,oDAAAA,EAAK,QAAAhH;AAAA,MACb,OAAO6G,EAAA;AAAA,MACP,WAASrL,EAAA;AAAA,MACT,aAAasL,EAAA;AAAA,IAAA;MAGNzG,EAAAgH,CAAA;cACL;AAAA,cAED,MAaa;AAAA,UAbbjL,EAaasF,IAAA;AAAA,wBAZFiG,EAAA;AAAA,0DAAAA,EAAc,QAAA3H;AAAA,YACvB,SAAA;AAAA,YACA,OAAM;AAAA,UAAA;uBAGJ,MAA4C;AAAA,eAD9ChE,EAAA,EAAA,GAAAC,EAOO0F,IAAA,MAAAC,GANuBvB,EAAAgH,CAAA,GAAe,CAAnCiB,GAAUhG,YADpBxG,EAOO+F,IAAA;AAAA,gBALJ,KAAKS;AAAA,gBACN,MAAK;AAAA,gBACJ,OAAOgG;AAAA,cAAA;2BAER,MAA8B;AAAA,sBAA3BjI,EAAA7B,CAAA,EAAE8J,EAAS,UAAM,EAAA,CAAA,GAAA,CAAA;AAAA,gBAAA;;;;;;;;;;;;;;;;;;;ACtK9B,UAAM/M,IAAQC,GASR0B,IAAOC,GAIPyJ,IAAQjL,EAAS;AAAA,MACrB,MAAM;AACJ,eAAOJ,EAAM,WAAW;AAAA,MAC1B;AAAA,MACA,IAAI8C,GAAU;AACZ,QAAAnB,EAAK,qBAAqB;AAAA,UACxB,GAAG3B,EAAM;AAAA,UACJ,OAAOuF,GAAOzC,CAAQ,IAAI,OAAOkK,GAAYlK,IAAW,EAAE;AAAA,QAAE,CAClE;AAAA,MACH;AAAA,IAAA,CACD,GAEK,EAAE,UAAAsH,EAAA,IAAaF,GAAA,GAEf,EAAE,GAAAjH,EAAA,IAAM/C,EAAA,GAERoL,IAAQlL,EAAS,MACdJ,EAAM,WAAW,SAASiD,EAAEjD,EAAM,WAAW,MAAM,IAAI,MAC/D;2BAICO,EAMEiL,IAAA;AAAA,kBALSH,EAAA;AAAA,oDAAAA,EAAK,QAAA5G;AAAA,MACb,OAAO6G,EAAA;AAAA,MACP,WAAS,CAAGrL,EAAA,WAAW;AAAA,MACvB,WAASA,EAAA;AAAA,MACT,iBAAWsE,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAAvD,EAAA,CAAAyD,MAAOK,EAAAsF,CAAA,EAASnK,EAAA,UAAU,GAAA,CAAA,MAAA,CAAA;AAAA,IAAA;;;;;;;;;;;AC/B1C,UAAM0B,IAAOC,GAIP0F,IAASxF,EAAI,EAAK,GAElBmL,IAAU,CAACzI,MAAiB;AAChC,MAAA0I,GAAe1I,CAAK,GACpB8C,EAAO,QAAQ,CAACA,EAAO,OACvB3F,EAAK,gBAAgB;AAAA,IACvB,GAEMwL,IAAO/M,EAAS,MACbkH,EAAO,QAAQ,0BAA0B,yBACjD,GAEK,EAAE,GAAArE,EAAA,IAAM/C,EAAA;2BAIZK,EAeO+F,IAAA;AAAA,MAdJ,UAAOrG,EAAA,WAAW;AAAA,MAClB,WAASA,EAAA;AAAA,MACV,MAAA;AAAA,MACA,MAAK;AAAA,MACL,SAAQ;AAAA,MACP,WAAYgN,GAAO,CAAA,MAAA,CAAA;AAAA,IAAA;iBAEpB,MAAsB;AAAA,QAAtBpM,EAAsBE,IAAA,EAAd,MAAMoM,EAAA,MAAA,GAAI,MAAA,GAAA,CAAA,MAAA,CAAA;AAAA,QAClBtM,EAKWmG,IAAA;AAAA,UAJT,WAAU;AAAA,UACV,UAAS;AAAA,QAAA;qBAET,MAAiB;AAAA,YAAdd,EAAAhF,EAAA4D,EAAA7B,CAAA,EAAEhD,EAAA,QAAQ,CAAA,GAAA,CAAA;AAAA,UAAA;;;;;;;;;;;;;;;;;;;;AC/BnB,UAAM0B,IAAOC,GAIPwL,IAAenF,GAAoBhI,GAAC,cAAmD,GAEvFoN,IAAc,MAAM;AACxB,MAAA1L,EAAK,aAAa;AAAA,IACpB,GAEM2L,IAAuB,MAAM;AACjC,MAAAF,EAAa,QAAQ,CAACA,EAAa;AAAA,IACrC;;MAKUnN,EAAA,kBADRM,EAOOgN,IAAA;AAAA;QALL,OAAA;AAAA,MAAA;mBAEA,MAEO;AAAA,UAFP1M,EAEO2M,IAAA,EAFD,OAAM,MAAE;AAAA,uBACZ,MAAmB;AAAA,cAAnB/L,GAAmBC,EAAA,QAAA,KAAA;AAAA,YAAA;;;;;;MAGvBb,EAkCO0M,IAAA;AAAA,QAjCL,OAAA;AAAA,QACA,OAAK1I,GAAA,CAAC,qBAAmB,EAAA,6BACcuI,EAAA,OAAY,CAAA;AAAA,MAAA;mBAEnD,MASO;AAAA,UARCnN,EAAA,uBADRM,EASOiN,IAAA;AAAA;YAPL,OAAM;AAAA,YACN,MAAK;AAAA,UAAA;uBAEL,MAGE;AAAA,cAHF3M,EAGE4M,IAAA;AAAA,gBAFC,iBAAeL,EAAA;AAAA,gBACf,kBAAiBE;AAAA,cAAA;;;;UAGtBzM,EAQO2M,IAAA,EARD,OAAM,MAAE;AAAA,uBACZ,MAAuB;AAAA,cAAvB/L,GAAuBC,EAAA,QAAA,SAAA;AAAA,cACvBL,GAAAJ,EAKM,OALNE,IAKM;AAAA,gBADJM,GAAwBC,EAAA,QAAA,UAAA;AAAA,cAAA;qBAHhB0L,EAAA,KAAY;AAAA,cAAA;;;;UAOfnN,EAAA,gCADTM,EASOiN,IAAA;AAAA;YAPL,OAAM;AAAA,YACN,MAAK;AAAA,UAAA;uBAEL,MAGO;AAAA,cAHP/L,GAGOC,yBAHP,MAGO;AAAA,gBAFLb,EAA0C6M,IAAA,EAApB,SAASzN,EAAA,QAAA,GAAO,MAAA,GAAA,CAAA,SAAA,CAAA;AAAA,gBACtCY,EAA2C8M,IAAA,EAAtB,SAAON,GAAW;AAAA,cAAA;;;;;;;;;ICtElCO,KAAQ;AAAA,EACnB,MAAM;AAAA,EACN,YAAY;AAAA,EACZ,OAAO;AACT,GAEaC,KAAeD,GAAM;AAE3B,SAASE,KAAW;AACzB,QAAM,EAAE,GAAA7K,EAAA,IAAM/C,EAAA,GAER6N,IAAejM,EAAoC;AAAA,IACvD;AAAA,MACE,OAAO8L,GAAM;AAAA,MACb,OAAO3K,EAAE,8BAA8B;AAAA,MACvC,OAAO;AAAA,IAAA;AAAA,IAET;AAAA,MACE,OAAO2K,GAAM;AAAA,MACb,OAAO3K,EAAE,oCAAoC;AAAA,MAC7C,OAAO;AAAA,IAAA;AAAA,IAET;AAAA,MACE,OAAO2K,GAAM;AAAA,MACb,OAAO3K,EAAE,+BAA+B;AAAA,MACxC,OAAO;AAAA,IAAA;AAAA,EACT,CACD;AAMD,SAAO;AAAA,IACL,cAAA8K;AAAA,IACA,gBANqB,CAAC1C,MACf0C,EAAa,MAAM,KAAK,CAACpK,MAASA,EAAK,UAAU0H,CAAK;AAAA,EAK7D;AAEJ;;;;;;;;;ACrCA,UAAMrL,IAAQC,GAIR0B,IAAOC,GAGPoM,IAAgB5N,EAAS;AAAA,MAC7B,MAAM;AACJ,eAAOJ,EAAM;AAAA,MACf;AAAA,MACA,IAAIiO,GAAU;AACZ,QAAAtM,EAAK,UAAUsM,CAAQ;AAAA,MACzB;AAAA,IAAA,CACD,GACK,EAAE,gBAAAC,EAAA,IAAmBJ,GAAA;2BAIzBvN,EAea4F,IAAA;AAAA,kBAdF6H,EAAA;AAAA,oDAAAA,EAAa,QAAAvJ;AAAA,MACtB,SAAA;AAAA,MACA,SAAQ;AAAA,MACR,SAAQ;AAAA,MACR,OAAM;AAAA,IAAA;iBAGJ,MAAyC;AAAA,gBAD3C/D,EAOO0F,IAAA,MAAAC,GANoBpG,EAAA,iBAAe,CAAjCkO,YADT5N,EAOO+F,IAAA;AAAA,UALJ,KAAK6H;AAAA,UACL,OAAOA;AAAA,UACP,OAAOrJ,EAAAoJ,CAAA,EAAeC,CAAc,GAAG;AAAA,QAAA;qBAExC,MAA2C;AAAA,gBAAxCrJ,EAAAoJ,CAAA,EAAeC,CAAc,GAAG,KAAK,GAAA,CAAA;AAAA,UAAA;;;;;;;IChCjCC,KAAc;AAAA,EACzB,MAAM;AAAA,EACN,OAAO;AAAA,EACP,MAAM;AAAA,EACN,SAAS;AACX,GAEaC,KAAqBD,GAAY;AAEvC,SAASE,KAAiB;AAC/B,QAAM,EAAE,GAAArL,EAAA,IAAM/C,EAAA,GAERqO,IAAqBzM,EAA0C;AAAA,IACnE;AAAA,MACE,OAAOsM,GAAY;AAAA,MACnB,OAAOnL,EAAE,oCAAoC;AAAA,IAAA;AAAA,IAE/C;AAAA,MACE,OAAOmL,GAAY;AAAA,MACnB,OAAOnL,EAAE,qCAAqC;AAAA,IAAA;AAAA,IAEhD;AAAA,MACE,OAAOmL,GAAY;AAAA,MACnB,OAAOnL,EAAE,oCAAoC;AAAA,IAAA;AAAA,IAE/C;AAAA,MACE,OAAOoL;AAAA,MACP,OAAOpL,EAAE,4CAA4C;AAAA,IAAA;AAAA,EACvD,CACD;AAMD,SAAO;AAAA,IACL,oBAAAsL;AAAA,IACA,sBAN2B,CAAClD,MACrBkD,EAAmB,MAAM,KAAK,CAAC5K,MAASA,EAAK,UAAU0H,CAAK;AAAA,EAKnE;AAEJ;;;;;;;;;;;ACtCA,UAAMrL,IAAQC,GAKR,EAAE,gBAAAiO,EAAA,IAAmBJ,GAAA,GACrBU,IAAcpO,EAAS,MAAM8N,EAAelO,EAAM,KAAK,CAAC,GAExD,EAAE,sBAAAyO,EAAA,IAAyBH,GAAA,GAC3BI,IAAoBtO,EAAS,MAAMqO,EAAqBzO,EAAM,WAAW,CAAC;qBAKtEwO,EAAA,cADRjO,EAWQC,IAAA;AAAA;MATL,OAAOgO,EAAA,MAAY;AAAA,MACpB,OAAA;AAAA,MACA,MAAK;AAAA,IAAA;iBAEL,MAAuB;AAAA,YAApBA,EAAA,MAAY,KAAK,IAAG,KACvB,CAAA;AAAA,QACQvO,EAAA,gBAAgB6E,EAAAuJ,EAAA,UADxB3N,EAGwC,QAHxCS,IAGC,QAAIuN,EAAA,OAAmB,KAAK,IAAG,KAAC,CAAA;;;;;ICzB/BC,KAAe7M,EAAuC,oBAAI,KAAK,GAC/D8M,KAAqB9M,EAAmC,oBAAI,KAAK,GACjE+M,KAAsB/M,EAAyB,oBAAI,KAAK,GAEjDgN,KAAe,MAAM;AAChC,WAASC,EAAuB7L,GAAgB;AAC9C,WAAOyL,GAAa,MAAM,IAAIzL,CAAM;AAAA,EACtC;AAEA,WAAS8L,EAA4B9L,GAAgB;AACnD,WAAO0L,GAAmB,MAAM,IAAI1L,CAAM;AAAA,EAC5C;AAEA,WAAS+L,EAAqB/L,GAAgB;AAC5C,WAAO2L,GAAoB,MAAM,IAAI3L,CAAM;AAAA,EAC7C;AAEA,WAASgM,IAAQ;AACf,IAAAP,GAAa,MAAM,MAAA,GACnBC,GAAmB,MAAM,MAAA,GACzBC,GAAoB,MAAM,MAAA;AAAA,EAC5B;AAEA,SAAO;AAAA,IACL,cAAAF;AAAA,IACA,oBAAAC;AAAA,IACA,qBAAAC;AAAA,IACA,wBAAAE;AAAA,IACA,sBAAAE;AAAA,IACA,6BAAAD;AAAA,IACA,OAAAE;AAAA,EAAA;AAEJ,GC5BaC,KAAe,CAAC9D,MACpBL,GAASK,CAAK,KAAK,OAAO,OAAOA,GAAO,QAAQ,GCF5C+D,KAAmB,CAAC/D,MACxB,OAAO,OAAOA,GAAO,WAAW,GCU5BgE,KAAmB,oBAE1BC,KAAkC;AAAA,EACtC,WAAWD;AACb;AAMO,SAASE,GACdC,GACAnG,IAAoC,IACpC;AACA,QAAMoG,IAAe,EAAE,GAAGH,IAAe,GAAGjG,EAAA,GACtCqG,IAAYZ,GAAA,GACZ,EAAE,WAAAa,GAAW,iBAAAC,GAAiB,gBAAAC,GAAgB,eAAAC,EAAA,IAAkBC,GAAA,GAEhEC,IAAU,CAACC,GAAqB/M,MAC7B4M,EAAcG,GAAW/M,CAAM,GAGlCgN,IAAM,CAACC,GAAgB9M,MACpBsM,EAAUQ,GAAK9M,CAAO;AAG/B,WAAS+M,EAAS/M,GAAiB;AACjC,WAAOwM,EAAexM,GAASmM,CAAqB;AAAA,EACtD;AAEA,QAAMa,IAAY,CAACC,GAAmBjN,MAC7BuM,EAAgBU,GAAMjN,CAAO,GAGhCkN,IAAa,CAACD,GAAmBjN,MACjCiN,EAAK,WAAW,IACX,KAEFA,EAAK,KAAK,CAACH,MACTD,EAAIC,GAAK9M,CAAO,CACxB,GAGGmN,IAAgBpQ,EAAS,MAAM;AACnC,UAAMqQ,IAAOf,EAAU,uBAAuBF,CAAqB,GAC7DkB,IAAehB,EAAU,4BAA4BF,CAAqB;AAChF,QAAI3L,CAAAA,EAAY6M,CAAY,KAGxB7M,EAAAA,EAAY4M,CAAI,KAAK5M,EAAY4M,EAAK,EAAE,KAAKlL,GAAOkL,EAAK,EAAE,KAAKA,EAAK,OAAO;AAGhF,aAAOA,EAAK;AAAA,EACd,CAAC;AAED,WAASE,EAA0DzN,GAAgB;AACjF,UAAM0N,IAAiB,CAACH,MAAuB;AAC7C,MAAAf,EAAU,aAAa,MAAM,IAAIxM,GAAQuN,CAAI,GAC7Cf,EAAU,mBAAmB,MAAM,IAAIxM,GAAQ,EAAI;AAAA,IACrD,GAEM2N,IAAczQ,EAAS,MACpBsP,EAAU,aAAa,MAAM,IAAIxM,CAAM,CAC/C,GAEK4N,IAAsB1Q,EAAS,MAC5BsP,EAAU,mBAAmB,MAAM,IAAIxM,CAAM,CACrD,GAEK6N,IAAe3Q,EAAS,MACxByQ,EAAY,QACPb,EAAQa,EAAY,MAAM,OAAO3N,CAAM,IAEzC,EACR,GAEK8N,IAAiB5Q,EAAS,MACvByQ,EAAY,SAAS,EAC7B,GAEKI,IAAc7Q,EAAS,MAAM;AACjC,UAAIyD,CAAAA,EAAYiN,EAAoB,KAAK;AACzC,eAAO,CAACE,EAAe;AAAA,IACzB,CAAC,GAEKE,IAAyB,MAAM;AACnC,UAAIjH,GAAQwF,EAAa,SAAS,GAAG;AACnC,cAAM5H,IAAQ4H,EAAa,UAAU,KAAK,CAAC0B,MAASA,EAAK,WAAWjO,CAAM;AAC1E,QAAI2E,KACF6H,EAAU,oBAAoB,MAAM,IAAIxM,GAAQ2E,EAAM,SAAS;AAAA,MAEnE;AACE,QAAA6H,EAAU,oBAAoB,MAAM,IAAIxM,GAAQuM,EAAa,SAAS;AAAA,IAE1E;AAoBA,WAAO;AAAA,MACL,aAAAoB;AAAA,MACA,gBAAAD;AAAA,MACA,cAAAG;AAAA,MACA,aAAAE;AAAA,MACA,gBAAAD;AAAA,MACA,kBAxBuB,OACvBI,GACAC,IAAW,yBACXC,IAAmC,QACnCC,IAAS,WACN;AACH,YAAI;AACF,gBAAM3I,IAAM,MAAM4I,GAA0BJ,GAAQC,GAAUC,GAAWpO,GAAQqO,CAAM;AACvF,iBAAAX,EAAehI,CAAG,GAClB8G,EAAU,mBAAmB,MAAM,IAAIxM,GAAQ,EAAI,GACnDgO,EAAA,GACOL,EAAY;AAAA,QACrB,QAAgB;AACd,UAAAnB,EAAU,mBAAmB,MAAM,IAAIxM,GAAQ,EAAI;AACnD;AAAA,QACF;AAAA,MACF;AAAA,IAQE;AAAA,EAEJ;AAEA,SAAO;AAAA,IACL,KAAAgN;AAAA,IACA,WAAAG;AAAA,IACA,YAAAE;AAAA,IACA,UAAAH;AAAA,IACA,gBAAAO;AAAA,IACA,eAAAH;AAAA,IACA,QAAQf;AAAA,EAAA;AAEZ;AAEO,SAASM,KAA6C;AAC3D,QAAML,IAAYZ,GAAA,GAEZa,IAAY,CAACQ,GAAgB9M,MAAgC;AACjE,UAAMH,IAASuO,GAAiBtB,CAAG,GAC7BM,IAAOf,EAAU,uBAAuBxM,CAAM,GAC9CwN,IAAehB,EAAU,4BAA4BxM,CAAM;AACjE,QAAIW,EAAY6M,CAAY;AAC1B,YAAM,IAAI,MAAM,+EAA+E;AAEjG,QAAI7M,EAAY4M,CAAI,KAAK5M,EAAY4M,EAAK,EAAE,KAAKlL,GAAOkL,EAAK,EAAE,KAAKA,EAAK,OAAO;AAC9E,aAAO;AAET,QAAIX,EAAcW,EAAK,OAAOvN,CAAM,EAAG,QAAO;AAC9C,UAAMwO,IAAaC,GAAqBlB,GAAM,yBAAyBN,CAAG;AAC1E,QAAItM,EAAY6N,CAAU,EAAG,QAAO;AACpC,YAAQA,GAAA;AAAA,MACN,KAAK9D,GAAM;AACT,eAAO;AAAA,MACT,KAAKA,GAAM;AACT,eAAO;AAAA,MACT,KAAKA,GAAM;AACT,YAAI/J,EAAYR,CAAO;AACrB,gBAAM,IAAI,MAAM,6BAA6B8M,CAAG,mDAAmD;AACrG,eAAON,EAAexM,GAASH,CAAM;AAAA,MACvC;AACE,eAAO;AAAA,IAAA;AAAA,EAEb,GAEM0M,IAAkB,CAACU,GAAmBjN,MACtCiN,EAAK,WAAW,IACX,KAEFA,EAAK,MAAM,CAACH,MACVR,EAAUQ,GAAK9M,CAAO,CAC9B,GAGGyM,IAAgB,CAACG,GAAqB/M,MAAmB;AAE7D,UAAM0O,IADY9C,GAAA,EACU,qBAAqB5L,CAAM;AACvD,WAAIW,EAAY+N,CAAS,IAAU,KAE5B3B,EAAU,SAAS2B,CAAS;AAAA,EACrC;AAEA,WAAS/B,EAAexM,GAAiBH,GAAgB;AACvD,UAAMuN,IAAOf,EAAU,uBAAuBxM,CAAM,GAC9CwN,IAAehB,EAAU,4BAA4BxM,CAAM;AACjE,QAAIW,EAAY6M,CAAY;AAC1B,YAAM,IAAI,MAAM,oFAAoF;AAEtG,WAAI7M,EAAY4M,CAAI,KAAK5M,EAAY4M,EAAK,EAAE,KAAKlL,GAAOkL,EAAK,EAAE,KAAKA,EAAK,OAAO,IACvE,KAELtB,GAAa9L,CAAO,IACfA,EAAQ,OAAO,SAASoN,EAAK,EAAE,IAEpCrB,GAAiB/L,CAAO,IACnBA,EAAQ,cAAcoN,EAAK,KAE7B;AAAA,EACT;AAEA,SAAO;AAAA,IACL,WAAAd;AAAA,IACA,iBAAAC;AAAA,IACA,gBAAAC;AAAA,IACA,eAAAC;AAAA,EAAA;AAEJ;AAEA,SAAS2B,GAAkBtB,GAAU;AAGnC,SAFcA,EAAI,MAAM,GAAG,EAEd,CAAC;AAChB;;;;;;;;AC9NA,UAAMnQ,IAAQC,GAUR4R,IAAU/P,EAAa,EAAK,GAE5B4N,IAAYZ,GAAA,GAEZH,IAAevO,EAAS,MACrBsP,EAAU,aAAa,KAC/B,GAEK,EAAE,WAAAC,GAAW,iBAAAC,EAAA,IAAoBG,GAAA,GAEjCG,IAAM,CAACI,GAA+BjN,MACtC4G,GAAQqG,CAAI,IACPV,EAAgBU,GAAMjN,CAAO,IAG/BsM,EAAUW,GAAMjN,CAAO,GAG1ByO,IAAcjP;AAAA,MAClB8L;AAAA,MACA,CAAC7L,MAAa;AACZ,YAAIA,EAAS,OAAO,GAAG;AACrB,gBAAMiP,IAAO7B,EAAIlQ,EAAM,YAAYA,EAAM,OAAO;AAChD,UAAI+R,MACFF,EAAQ,QAAQE,GAChBC,EAAA;AAAA,QAEJ;AAAA,MACF;AAAA,MACA;AAAA,QACE,WAAW;AAAA,MAAA;AAAA,IACb;AAGF,aAASA,IAAY;AACnB,iBAAW,MAAMF,IAAA,GAAiB,CAAC;AAAA,IACrC;qBAIcD,EAAA,QAAZpQ,GAAuBC,EAAA,QAAA,WAAA,EAAA,KAAA,EAAA,CAAA;;;;;;;;;ACpDzB,UAAM1B,IAAQC,GAURgS,IAAS7R,EAAS,MACfsJ,GAAe1J,EAAM,UAAUA,EAAM,aAAa,CAC1D;uBAIIiS,EAAA,KAAM;AAAA;;;;;;;;;;;;;;;;ACNX,UAAMjS,IAAQC,GAuBR0B,IAAOC,GAMPoD,IAAqB5E,EAAS;AAAA,MAClC,MAAM;AACJ,eAAOJ,EAAM;AAAA,MACf;AAAA,MACA,IAAI8C,GAA2C;AAC7C,QAAAnB,EAAK,qBAAqBmB,CAAQ;AAAA,MACpC;AAAA,IAAA,CACD,GAGK,EAAE,eAAAf,EAAA,IAAkBC,GAAA,GAEpBC,IAAmBH,EAAI,CAACI,MAA0B;AAAA,IAAC,CAAC,GAEpDgQ,IAAkBpQ,EAAI,CAACI,MAA0B;AAAA,IAAC,CAAC,GACnDC,IAAmBL,EAAI,MAAM;AAAA,IAAC,CAAC,GAC/BO,IAAoBP,EAAuB,IAAI;AAErD,QAAIC,EAAc,MAAM,WAAWO,GAAUtC,EAAM,MAAM,GAAG;AAC1D,YAAM,EAAE,wBAAAuC,GAAwB,uBAAA4P,GAAuB,wBAAA3P,GAAwB,cAAAG,MAAiBC;AAAA,QAC9F5C,EAAM,OAAO;AAAA,QACbA,EAAM,OAAO;AAAA,MAAA;AAEf,MAAAiC,EAAiB,QAAQM,GACzB2P,EAAgB,QAAQC,GACxBhQ,EAAiB,QAAQK,GACzBK;AAAA,QACEF;AAAA,QACA,CAACG,MAAa;AACZ,UAAAT,EAAkB,QAAQS;AAAA,QAC5B;AAAA,QACA,EAAE,WAAW,GAAA;AAAA,MAAK;AAAA,IAEtB;AAEA,UAAM,EAAE,GAAAG,EAAA,IAAM/C,EAAA,GAERgD,IAASC,GAA2BC,IAAmB,MAAS,GAChEC,IAAUF,GAA2BG,IAAoB,MAAS,GAElE8O,IAAgBtQ,EAAI,EAAK,GACzBuQ,IAAYvQ,EAAI,EAAK,GACrBwQ,IAAWxQ,EAAI,EAAK,GAEpB0B,IAAS,MAAM;AACnB,MAAA6O,EAAU,QAAQ,IAClB1Q,EAAK,QAAQkC,EAAY7D,EAAM,UAAU,IAAI,OAAOA,EAAM,UAAU,GACpEA,EAAM,GAAG,OAAA,GACLsS,EAAS,UAAU,MAAOrQ,EAAiB,MAAMjC,EAAM,UAAU;AAAA,IACvE,GAEMyD,IAAU,MAAM;AACpB,MAAA4O,EAAU,QAAQ,IAClBlQ,EAAiB,MAAA;AAAA,IACnB,GAEMgG,IAAS,MAAM;AACnB,MAAAmK,EAAS,QAAQ,IACjBnQ,EAAiB,MAAA;AAAA,IACnB,GAEMiG,IAAU,MAAM;AACpB,MAAAkK,EAAS,QAAQ,IACjBrQ,EAAiB,MAAMjC,EAAM,UAAU;AAAA,IACzC,GAEM0D,IAAuBtD,EAAS,MAC/ByD,EAAY7D,EAAM,YAAY,IAC/BA,EAAM,GAAG,SAAS,SAAe,CAACA,EAAM,EAAE,QAAQ,IAAI,CAAC2D,MAAsBA,EAAK,QAAQ,EAAE,KAAK,GAAG,CAAC,IAClG,CAAA,IAFsC,CAAC3D,EAAM,YAAY,CAGjE,GAEK4D,IAAgBxD,EAAS,MAAM;AACnC,UAAIkC,GAAUtC,EAAM,KAAK,UAAUA,EAAM;AACzC,UAAI6D,EAAYX,CAAM,KAAKW,EAAYR,CAAO,KAAKQ,EAAY7D,EAAM,GAAG,KAAK,EAAG,QAAO;AACvF,YAAM,EAAE,KAAK8D,MAASC,GAA6B/D,EAAM,GAAG,OAAO,GAAG;AACtE,aAAOiD,EAAEC,IAAS,MAAMG,IAAU,YAAYS,CAAI;AAAA,IACpD,CAAC;AAED,IAAAjB;AAAA,MACEmC;AAAA,MACA,CAAClC,GAAU6C,MAAa;AACtB,YAAI7C,MAAa6C,GACjB;AAAA,cAAIJ,GAAOzC,CAAQ,KAAKe,EAAYf,CAAQ,GAAG;AAC7C,YAAAsP,EAAc,QAAQ;AACtB;AAAA,UACF;AACA,UAAAA,EAAc,QAAQ;AAAA;AAAA,MACxB;AAAA,MACA,EAAE,WAAW,GAAA;AAAA,IAAK;AAMpB,UAAMG,IAAkB,CAAC5M,MAAsB;AAK7C,UAJAxD,EAAiB,MAAA,GACjB,WAAW,MAAM;AACf,QAAIkQ,EAAU,UAAU,MAAOpQ,EAAiB,MAAMjC,EAAM,UAAU;AAAA,MACxE,GAAG,GAAG,GACF2F,GAAU;AACZ,QAAAX,EAAmB,QAAQ;AAC3B;AAAA,MACF;AACA,UAAIhF,EAAM,2BAA2B,OAAO;AAC1C,QAAAgF,EAAmB,QAAQwN,GAAA;AAC3B;AAAA,MACF;AACA,UAAIC,GAAWzS,EAAM,sBAAsB,GAAG;AAC5C,QAAAgF,EAAmB,QAAQhF,EAAM,uBAAA;AACjC;AAAA,MACF;AACA,MAAAgF,EAAmB,QAAQhF,EAAM;AAAA,IACnC,GAEMiE,IAAmB7D,EAAS,MAC5BkC,GAAUtC,EAAM,QAAQ,IAAUA,EAAM,WACrC,CAAC,CAACqC,EAAkB,KAC5B;AAED,WAAAQ,GAAMmC,GAAoB,CAAClC,GAAU6C,MAAa;AAChD,MAAI7C,MAAa6C,KACb5D,EAAc,MAAM,YAAYsQ,EAAU,SAASC,EAAS,UAC9DJ,EAAgB,MAAMpP,CAAQ;AAAA,IAElC,CAAC;MAIC7B,EAmBM,OAnBNE,IAmBM;AAAA,QAlBJN,EAKE6R,IAAA;AAAA,sBAJSN,EAAA;AAAA,wDAAAA,EAAa,QAAA3N;AAAA,UACrB,OAAOb,EAAA;AAAA,UACP,UAAUK,EAAA;AAAA,UACV,SAAKM,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAAvD,EAAA,CAAAyD,MAAO8N,EAAgBH,EAAA,KAAa,GAAA,CAAA,MAAA,CAAA;AAAA,QAAA;QAE5CnR,EAWM,OAXNgF,IAWM;AAAA,UAVJxE,GASOC,EAAA,QAAA,UAAA,EAPJ,QAASW,EAAA,MAAA,GAFZ,MASO;AAAA,YAJGpC,EAAA,eADRM,EAIEmE,IAAA;AAAA;cAFC,IAAIrC,EAAA;AAAA,cACJ,OAAOpC,EAAA,OAAO;AAAA,YAAA;;;;MAKvBY,EAgBoB8R,IAAA,MAAA;AAAA,mBAflB,MAcM;AAAA,aAdN1R,EAcM,OAAA,MAAA;AAAA,YAbJJ,EAYkB+R,IAAA;AAAA,0BAXP5N,EAAA;AAAA,4DAAAA,EAAkB,QAAAP;AAAA,cAC1B,WAASxE,EAAA;AAAA,cACT,kBAAgByD,EAAA;AAAA,cAChB,WAAWzD,EAAA;AAAA,cACX,UAAUgE,EAAA;AAAA,cACV,SAAAR;AAAA,cACA,QAAAD;AAAA,cACA,UAAS2E;AAAA,cACT,WAAUC;AAAA,YAAA;cAEA,kBAAX,MAA0B,CAAA,GAAA7D,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAA,EAAA,CAAA;AAAA;;;iBAZjB6N,EAAA,KAAa;AAAA,UAAA;;;;;;;;;;;;;;AC5L9B,UAAMpS,IAAQC,GASR0B,IAAOC,GAIPyJ,IAAQjL,EAAS;AAAA,MACrB,MAAM;AACJ,eAAOJ,EAAM,WAAW;AAAA,MAC1B;AAAA,MACA,IAAI8C,GAAU;AACZ,QAAAnB,EAAK,qBAAqB,EAAE,GAAG3B,EAAM,YAAiB,OAAO8C,GAAY;AAAA,MAC3E;AAAA,IAAA,CACD,GAEK,EAAE,GAAAG,EAAA,IAAM/C,EAAA,GAERoL,IAAQlL,EAAS,MACdJ,EAAM,WAAW,SAASiD,EAAEjD,EAAM,WAAW,MAAM,IAAI,MAC/D;sBAICS,EAAA,GAAAF,EAOEqS,IAPFC,GAOE;AAAA,kBANSxH,EAAA;AAAA,oDAAAA,EAAK,QAAA5G;AAAA,MACb,WAASxE,EAAA;AAAA,MACT,WAAS,CAAGA,EAAA,WAAW;AAAA,MACvB,iBAAeA,EAAA,WAAW;AAAA,MAC1B,OAAOqL,EAAA;AAAA,IAAA,GACAwH,EAAAA,MAAM,GAAA,MAAA,IAAA,CAAA,cAAA,WAAA,aAAA,iBAAA,OAAA,CAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpBlB,UAAM9S,IAAQC,GA2CR0B,IAAOC,GAOPoG,IAAaC,GAAmEhI,GAAA,cAAC;AAAA,MAErF,IAAI6C,IAAU;AACZ,eAAOmH,GAAQnH,EAAQ,IAAImC,GAAUnC,EAAQ,IAAIA;AAAA,MACnD;AAAA,IAAA,CACD,GAEKiQ,IAAqB9K,GAAmEhI,GAAC,YAAY;AAAA,MAGzG,IAAI6C,IAAU;AACZ,eAAOmH,GAAQnH,EAAQ,IAAImC,GAAUnC,EAAQ,IAAIA;AAAA,MACnD;AAAA,IAAA,CACD,GAEKkQ,IAAyBlR,EAA4D,IAAI,GAEzFmR,IAAoBnR,EAAI,CAAC,GAGzB,EAAE,eAAAC,EAAA,IAAkBC,GAAA,GAEpBC,IAAmBH,EAAI,CAACI,OAA0B;AAAA,IAAC,CAAC,GAEpDgQ,IAAkBpQ,EAAI,CAACI,OAA0B;AAAA,IAAC,CAAC,GACnDC,IAAmBL,EAAI,MAAM;AAAA,IAAC,CAAC,GAC/BO,IAAoBP,EAAuB,IAAI;AAErD,QAAIC,EAAc,MAAM,WAAWO,GAAUtC,EAAM,MAAM,GAAG;AAC1D,YAAM,EAAE,wBAAAuC,IAAwB,uBAAA4P,IAAuB,wBAAA3P,IAAwB,cAAAG,OAAiBC;AAAA,QAC9F5C,EAAM,OAAO;AAAA,QACbA,EAAM,OAAO;AAAA,MAAA;AAEf,MAAAiC,EAAiB,QAAQM,IACzB2P,EAAgB,QAAQC,IACxBhQ,EAAiB,QAAQK,IACzBK;AAAA,QACEF;AAAA,QACA,CAACG,OAAa;AACZ,UAAAT,EAAkB,QAAQS;AAAA,QAC5B;AAAA,QACA,EAAE,WAAW,GAAA;AAAA,MAAK;AAAA,IAEtB;AAEA,UAAMoQ,IAASpR,EAAI,EAAE,GACfuQ,IAAYvQ,EAAI,EAAK,GACrBqR,IAAiErR,EAAI,MAAS,GAE9E,EAAE,GAAAmB,EAAA,IAAM/C,EAAA,GAER,EAAE,aAAAkT,EAAA,IAAgBrH,GAAO/L,CAAK,GAE9BkD,IAASC,GAA2BC,IAAmB,MAAS,GAChEC,IAAUF,GAA2BG,IAAoB,MAAS,GAElEE,IAAS,MAAM;AACnB,MAAA6O,EAAU,QAAQ,IAClB1Q,EAAK,QAAQqG,EAAW,KAAK,GAC7BhI,EAAM,GAAG,OAAA,GACTiC,EAAiB,MAAM+F,EAAW,KAAK;AAAA,IACzC,GAEMtE,IAAuBtD,EAAS,MAChCkC,GAAUtC,EAAM,YAAY,IAAU,CAACA,EAAM,YAAY,IACzDA,EAAM,GAAG,SAAS,SAAeA,EAAM,EAAE,QAAQ,IAAI,CAAC2D,OAAsBA,GAAK,QAAQ,IACtF,CAAA,CACR,GAEKC,IAAgBxD,EAAS,MAAM;AACnC,UAAIkC,GAAUtC,EAAM,KAAK,UAAUA,EAAM;AACzC,UAAI6D,EAAYX,CAAM,KAAKW,EAAYR,CAAO,KAAKQ,EAAY7D,EAAM,GAAG,KAAK,EAAG,QAAO;AACvF,YAAM,EAAE,KAAK8D,OAASC,GAA6B/D,EAAM,GAAG,OAAO,GAAG;AACtE,aAAOiD,EAAEC,IAAS,MAAMG,IAAU,YAAYS,EAAI;AAAA,IACpD,CAAC,GAEKE,IAAmB5D,EAAS,MAC5BkC,GAAUtC,EAAM,QAAQ,IAAUA,EAAM,WACrCA,EAAM,GAAG,YAAYA,EAAM,GAAG,SAAS,QAAQ,SAAS,UAChE,GAEKiE,IAAmB7D,EAAS,MAC5BkC,GAAUtC,EAAM,QAAQ,IAAUA,EAAM,WACrC,CAAC,CAACqC,EAAkB,KAC5B,GAEKgR,IAAiCjT,EAAS,MAC1CJ,EAAM,aAAa,EAExB,GAGKoL,IAAakI,GAActT,EAAM,cAAcA,EAAM,oBAAoB,GACzEuT,IAAezR,EAA0C,EAAE,GAC3D0R,IAAqB1R,EAA0C,EAAE,GAEjE2R,IAAWrT,EAAiD,MAAM;AACtE,YAAMsT,yBAAY,IAAA;AAClB,aAAAF,EAAmB,MAAM,QAAQ,CAACnI,OAAU;AAC1C,QAAAqI,GAAM,IAAIrI,GAAM,OAAO,EAAE,OAAOA,GAAM,OAAO,OAAOA,GAAM,OAAO,UAAUA,GAAM,UAAU;AAAA,MAC7F,CAAC,GACDkI,EAAa,MAAM,QAAQ,CAAClI,OAAU;AACpC,QAAAqI,GAAM,IAAIrI,GAAM,OAAO,EAAE,OAAOA,GAAM,OAAO,OAAOA,GAAM,OAAO,UAAUA,GAAM,UAAU;AAAA,MAC7F,CAAC,GACM,MAAM,KAAKqI,IAAO,CAAC,CAAC9M,IAAKyE,EAAK,OAC5B,EAAE,OAAOzE,IAAK,OAAOyE,GAAM,OAAO,UAAUA,GAAM,SAAA,EAC1D;AAAA,IACH,CAAC,GAEKsI,IAAe7R,EAAI,EAAK,GACxBR,IAAkBlB,EAAS,MAC3BuT,EAAa,QAAc,KACxB3T,EAAM,OACd,GAEK4T,IAAY,OAAOC,IAAeC,OAA2B;AACjE,MAAAH,EAAa,QAAQ;AACrB,YAAMI,KAAcX,EAAY,MAAMpT,EAAM,aAAa;AACzD,UAAI6D,EAAYkQ,EAAW;AACzB,cAAM,IAAI,MAAM,uEAAuE;AAEzF,MAAAA,GAAY,QAAQF;AACpB,YAAMjL,KAAM,MAAM5I,EAAM,WAAWoL,GAAYgI,EAAY,KAAK;AAChE,MAAIU,OAAmBb,EAAkB,UAAOM,EAAa,QAAQ3K,KACrE+K,EAAa,QAAQ;AAAA,IACvB,GAEMK,IAAwB,CAACC,OAAqC;AAClE,YAAMpM,KAAQ4L,EAAS,MAAM,OAAO,CAAC9P,OAA6CsQ,GAAO,SAAStQ,GAAK,KAAK,CAAC;AAC7G,aAAQ,CAAA,EAA4C,OAAOkE,EAAK;AAAA,IAClE,GAEMqM,IAAyB,OAAO7I,OAAiD;AACrF,UAAI8I,KAAQ,GACRC,KAAa,CAAA;AACjB,aAAInK,GAAQoB,EAAK,KACf8I,KAAQ9I,GAAM,QACd+I,KAAaJ,EAAsB3I,EAAK,KAExC+I,KAAaJ,EAAsB,CAAC3I,EAAK,CAAC,GAE5CmI,EAAmB,QAAQY,IACpBA,GAAW,WAAWD;AAAA,IAC/B,GAEME,IAAcvS,EAAI,EAAK,GACvBwS,IAAsB,MAAM;AAChC,mBAAanB,EAAe,KAAK,GACjCA,EAAe,QAAQ;AAAA,IACzB,GACMoB,IAAY,YAAY;AAE5B,UADAD,EAAA,GACID,EAAY,UAAU,GAAM;AAChC,MAAAA,EAAY,QAAQ,IACpBV,EAAa,QAAQ;AACrB,YAAM/K,KAAM,MAAM5I,EAAM,WAAWoL,GAAYgI,EAAY,KAAK;AAChE,MAAIH,EAAkB,UAAU,MAC9BM,EAAa,QAAQ3K,IAEnB5I,EAAM,oCACN4I,GAAI,WAAW,KACfrD,GAAOyC,EAAW,SAAUiC,GAAQjC,EAAW,KAAK,KAAKA,EAAW,MAAM,WAAW,CAAE,MAEvFA,EAAW,QAAQhI,EAAM,WAAW,CAAC4I,GAAI,CAAC,EAAE,KAAK,IAAIA,GAAI,CAAC,EAAE,SAGhE+K,EAAa,QAAQ;AAAA,IACvB,GACMlQ,KAAU,MAAM;AACpB,MAAA4O,EAAU,QAAQ,IAClBiC,EAAA,GACAC,EAAA,GACA5S,EAAK,SAASqG,EAAW,KAAK,GAC9B7F,EAAiB,MAAA;AAAA,IACnB,GAEMqS,KAA0BpU,EAAS,MAAM;AAC7C,UAAI,CAACJ,EAAM,YAAYwT,EAAmB,MAAM,CAAC;AAC/C,eAAOA,EAAmB,MAAM,CAAC,EAAE;AAAA,IAGvC,CAAC,GAEKiB,KAAiB,CAACZ,OAAkB;AACxC,MAAI,CAAC7T,EAAM,YAAY,CAACqS,EAAU,SAASwB,GAAM,WAAW,KACxDW,GAAwB,UAAUX,OACtCX,EAAO,QAAQW;AAAA,IACjB,GAEMa,KAAe,YAAY;AAE/B,UADAnB,EAAa,QAAQ,MAAMvT,EAAM,WAAWoL,GAAYgI,EAAY,KAAK,GACrEpT,EAAM,UAAU;AAClB,QAAAgI,EAAW,QAAQ,CAAA;AACnB;AAAA,MACF;AACA,MAAAA,EAAW,QAAQ;AAAA,IACrB;AAEA,IAAA2M;AAAA,MACEzB;AAAA,MACA,CAACpQ,IAAU6C,OAAa;AACtB,QAAI7C,OAAa6C,OACfsN,EAAkB,SAClBW,EAAU9Q,IAAUmQ,EAAkB,KAAK,GAC3CtR,EAAK,yBAAyBmB,EAAQ;AAAA,MAE1C;AAAA,MACA,EAAE,UAAU,IAAA;AAAA,IAAI,GAGlBD,GAAMqQ,GAAQ,CAACpQ,IAAU6C,OAAa;AACpC,MAAI7C,OAAa6C,MACfhE,EAAK,gBAAgBmB,EAAQ;AAAA,IAEjC,CAAC;AAED,UAAM8R,KAAiB,CAAC9R,OAAkB;AACxC,UAAImH,GAAQnH,EAAQ;AAClB,eAAOA,GAAS,IAAI,CAAC+R,OAAY;AAC/B,gBAAMC,KAAcrB,EAAS,MAAM,KAAK,CAACsB,OAAQA,GAAI,UAAUF,EAAE;AACjE,iBAAOC,MAA4B,EAAE,OAAO,GAAGD,EAAE,IAAI,OAAOA,GAAA;AAAA,QAC9D,CAAC;AAEH,YAAMhN,KAAQ4L,EAAS,MAAM,KAAK,CAAC9P,OAASA,GAAK,UAAUb,EAAQ;AACnE,aAAI+E,MACG,EAAE,OAAO/E,IAAU,OAAOA,GAAA;AAAA,IACnC;AAEA,IAAAD;AAAA,MACEmF;AAAA,MACA,OAAOlF,IAAU6C,OAAa;AAC5B,YAAI7C,OAAa6C,GAAU;AAI3B,YAHI5D,EAAc,MAAM,WAAWsQ,EAAU,SAC3CH,EAAgB,MAAMpP,EAAQ,GAE5ByC,GAAOzC,EAAQ,KAAKe,EAAYf,EAAQ,KAAMmH,GAAQnH,EAAQ,KAAKA,GAAS,WAAW,GAAI;AAI7F,cAHA0Q,EAAmB,QAAQ,CAAA,GAC3BT,EAAmB,QAAQ9I,GAAQnH,EAAQ,IAAI,CAAA,IAAK,MACpDkQ,EAAuB,QAAQ/I,GAAQnH,EAAQ,IAAI,CAAA,IAAK,MACpD9C,EAAM,oBAAoBqU,EAAY,UAAU,GAAM;AAC1D,UAAAlB,EAAe,QAAQ,WAAW,MAAM;AACtC,YAAAoB,EAAA;AAAA,UACF,GAAG,GAAI;AACP;AAAA,QACF;AAEA,YADc,MAAML,EAAuBpR,EAAQ,GACxC;AACT,gBAAMkS,KAAmBJ,GAAe9R,EAAQ;AAChD,UAAAiQ,EAAmB,QAAQiC,IAC3BhC,EAAuB,QAAQgC;AAC/B;AAAA,QACF;AACA,YAAI/K,GAA2BnH,EAAQ,GAAG;AACxC,UAAA6Q,EAAa,QAAQ,IACrBH,EAAmB,QAAQ,MAAMxT,EAAM,gBAAgB8C,EAAoC;AAC3F,gBAAMkS,KAAmBJ,GAAe9R,EAAQ;AAChD,UAAAiQ,EAAmB,QAAQiC,IAC3BhC,EAAuB,QAAQgC,IAC/BrB,EAAa,QAAQ;AACrB;AAAA,QACF;AACA,QAAAA,EAAa,QAAQ,IACrBH,EAAmB,QAAQ,MAAMxT,EAAM,gBAAgB,CAAC8C,EAA6B,CAAC;AACtF,cAAMkS,KAAmBJ,GAAe9R,EAAQ;AAChD,QAAAiQ,EAAmB,QAAQiC,IAC3BhC,EAAuB,QAAQgC,IAC/BrB,EAAa,QAAQ;AAAA,MACvB;AAAA,MACA,EAAE,WAAW,GAAA;AAAA,IAAK;AAGpB,UAAMsB,KAA4B,CAACnS,OAAkB;AAEnD,UADAiQ,EAAmB,QAAQjQ,IACvByC,GAAOzC,EAAQ,GAAG;AACpB,QAAAkF,EAAW,QAAQ;AACnB;AAAA,MACF;AACA,UAAIiC,GAAQnH,EAAQ,GAAG;AACrB,QAAAkF,EAAW,QAAQlF,GAAS,IAAI,CAACa,OAAcA,GAAK,KAAK;AACzD;AAAA,MACF;AACA,MAAAqE,EAAW,QAAQlF,GAAS;AAAA,IAC9B;6BAIEvC,EAqEgB2U,IAAA;AAAA,MApEb,eAAalC,EAAA;AAAA,MACb,OAAOS,EAAA;AAAA,MACR,aAAA;AAAA,MACC,UAAUJ,EAAA;AAAA,MACV,WAAWpT,EAAA;AAAA,MACX,kBAAgByD,EAAA;AAAA,MAChB,OAAOzD,EAAA,SAASA,EAAA;AAAA,MAChB,gBAAcA,EAAA;AAAA,MACd,SAASqB,EAAA;AAAA,MACT,UAAU2C,EAAA;AAAA,MACX,iBAAA;AAAA,MACA,cAAa;AAAA,MACZ,mBAAewQ;AAAA,MACf,uBAAoBQ;AAAA,MACpB,QAAAzR;AAAA,MACA,SAAAC;AAAA,MACA,iBAAaiR;AAAA,IAAA;MAEH,MAAI9T,EACb,CAIE,EAAA,OALsBuU,IAAW,MAAAxR,SAAI;AAAA,QACvC9C,EAIEsG,IAJF0L,GAIEsC,IAHiB;AAAA,UAChB,OAAOxR,GAAK,IAAI;AAAA,UAChB,UAAUA,GAAK,IAAI;AAAA,QAAA;;MAGb,MAAI/C,EACb,CAaQ,EAAA,OAdgBwU,IAAW,MAAAzR,SAAI;AAAA,QACvC9C,EAaQL,IAAA;AAAA,UAZL,UAAU4U,GAAU;AAAA,UACrB,MAAK;AAAA,UACJ,MAAI,GAAKzR,GAAK,KAAK,KAAKA,GAAK,IAAI,QAAQ;AAAA,UACzC,UAAUA,GAAK,MAAM;AAAA,QAAA;qBAEtB,MAAoB;AAAA,YAAjBuC,EAAAhF,EAAAyC,GAAK,IAAI,KAAK,IAAG,KACpB,CAAA;AAAA,YACQA,GAAK,IAAI,iBADjBjD,EAKO,QALPS,IAGC,OACED,EAAGyC,GAAK,IAAI,QAAQ,IAAG,MAC1B,CAAA;;;;;MAGO,SACT,MASO;AAAA,QARE1D,EAAA,8BADTS,EASO,QAAA;AAAA,UAPJ,KAAKsD,EAAA,QAAgB;AAAA,QAAA;UAEnBkC,EAAAhF,EAAA0C,EAAA,KAAa,IAAG,KACnB,CAAA;AAAA,UACQI,EAAA,SADRvD,EAAA,GAAAC,EAGE,QAHFuF,EAGE;;;;;MAIE5D,EAAA;cACL;AAAA,cAED,MASO;AAAA,UATPZ,GASOC,GAAA,QAAA,UAAA,EAPJ,QAASW,EAAA,MAAA,GAFZ,MASO;AAAA,YAJGpC,EAAA,eADRM,EAIEmE,IAAA;AAAA;cAFC,IAAIrC,EAAA;AAAA,cACJ,OAAOpC,EAAA,OAAO;AAAA,YAAA;;;;;;;;;;;;;;;;;;;;AChazB,UAAMD,IAAQC,GAiBR0B,IAAOC,GAIP,EAAE,GAAAqB,EAAA,IAAM/C,EAAA,GAERgD,IAASC,GAA2BC,IAAmB,MAAS,GAChEC,IAAUF,GAA2BG,IAAoB,MAAS,GAElEM,IAAgBxD,EAAS,MAAM;AACnC,UAAI,CAACyD,EAAY7D,EAAM,KAAK,UAAUA,EAAM;AAC5C,UAAI6D,EAAYX,CAAM,KAAKW,EAAYR,CAAO,KAAKQ,EAAY7D,EAAM,GAAG,KAAK,EAAG,QAAO;AACvF,YAAM,EAAE,KAAK8D,MAASC,GAA6B/D,EAAM,GAAG,OAAO,GAAG;AACtE,aAAOiD,EAAEC,IAAS,MAAMG,IAAU,YAAYS,CAAI;AAAA,IACpD,CAAC,GAEKuR,IAAUvT,EAAI,EAAK,GACnBwT,IAAWxT,EAAI,EAAK,GACpByT,IAAWzT,EAAI,EAAE,GAEjBkD,IAAqB5E,EAAS,MAC3BJ,EAAM,UACd,GAGKwV,IAAqB1T,EAAI9B,EAAM,UAAU,GAEzCiN,IAAU,YAAY;AAC1B,UAAIoI,EAAQ,MAAO;AAGnB,UAFAA,EAAQ,QAAQ,IAChBC,EAAS,QAAQ,IACbE,EAAmB,UAAU,IAAM;AACrC,cAAMC,IAAU,MAAMzV,EAAM,gBAAA;AAC5B,QAAA2B,EAAK,qBAAqB,CAAC8T,CAAO,GAClCD,EAAmB,QAAQ,CAACC,GACvBA,MAASH,EAAS,QAAQ,KAC/BD,EAAQ,QAAQ;AAChB;AAAA,MACF;AACA,YAAMI,IAAU,MAAMzV,EAAM,eAAA;AAC5B,MAAA2B,EAAK,qBAAqB8T,CAAO,GACjCD,EAAmB,QAAQC,GACtBA,MAASH,EAAS,QAAQ,KAC/BD,EAAQ,QAAQ;AAAA,IAClB;AAEA,WAAAxS,GAAMmC,GAAoB,CAAClC,GAAU6C,MAAa;AAChD,MAAI7C,MAAa6C,MACf6P,EAAmB,QAAQ1S,GAC3BwS,EAAS,QAAQ;AAAA,IAErB,CAAC,GAEDhM,GAAU,MAAM;AACd,MAAAiM,EAAS,QAAQ,mBAAmB,KAAK,IAAA;AAAA,IAC3C,CAAC,cAIC9U,EAAA,GAAAC,EAcM,OAdNS,IAcM;AAAA,MAbJN,EAKE6R,IAAA;AAAA,QAJC,IAAI6C,EAAA;AAAA,oBACIC,EAAA;AAAA,sDAAAA,EAAkB,QAAA/Q;AAAA,QAC1B,UAAU4Q,EAAA;AAAA,QACV,WAAYpI,GAAO,CAAA,MAAA,CAAA;AAAA,MAAA;MAGbhN,EAAA,8BADTS,EAMQ,SAAA;AAAA;QAJL,KAAK6U,EAAA;AAAA,QACN,OAAM;AAAA,MAAA,KAEH3R,EAAA,KAAa,GAAA,GAAAqC,EAAA;AAAA;;;;;;;;;;;;;;;ACxFtB,UAAMjG,IAAQC,GAiBR0B,IAAOC,GAIP,EAAE,GAAAqB,EAAA,IAAM/C,EAAA,GAERgD,IAASC,GAA2BC,IAAmB,MAAS,GAChEC,IAAUF,GAA2BG,IAAoB,MAAS,GAElEM,IAAgBxD,EAAS,MAAM;AACnC,UAAI,CAACyD,EAAY7D,EAAM,KAAK,UAAUA,EAAM;AAC5C,UAAI6D,EAAYX,CAAM,KAAKW,EAAYR,CAAO,KAAKQ,EAAY7D,EAAM,GAAG,KAAK,EAAG,QAAO;AACvF,YAAM,EAAE,KAAK8D,MAASC,GAA6B/D,EAAM,GAAG,OAAO,GAAG;AACtE,aAAOiD,EAAEC,IAAS,MAAMG,IAAU,YAAYS,CAAI;AAAA,IACpD,CAAC,GAEKuR,IAAUvT,EAAI,EAAK,GACnBwT,IAAWxT,EAAI,EAAK,GACpByT,IAAWzT,EAAI,EAAE,GAEjBkD,IAAqB5E,EAAS,MAC3BJ,EAAM,UACd,GAGKwV,IAAqB1T,EAAI9B,EAAM,UAAU,GAEzCiN,IAAU,YAAY;AAC1B,UAAIoI,EAAQ,MAAO;AAGnB,UAFAA,EAAQ,QAAQ,IAChBC,EAAS,QAAQ,IACbE,EAAmB,UAAU,IAAM;AACrC,cAAMC,IAAU,MAAMzV,EAAM,gBAAA;AAC5B,QAAA2B,EAAK,qBAAqB,CAAC8T,CAAO,GAClCD,EAAmB,QAAQ,CAACC,GACvBA,MAASH,EAAS,QAAQ,KAC/BD,EAAQ,QAAQ;AAChB;AAAA,MACF;AACA,YAAMI,IAAU,MAAMzV,EAAM,eAAA;AAC5B,MAAA2B,EAAK,qBAAqB8T,CAAO,GACjCD,EAAmB,QAAQC,GACtBA,MAASH,EAAS,QAAQ,KAC/BD,EAAQ,QAAQ;AAAA,IAClB;AAEA,WAAAxS,GAAMmC,GAAoB,CAAClC,GAAU6C,MAAa;AAChD,MAAI7C,MAAa6C,MACf6P,EAAmB,QAAQ1S,GAC3BwS,EAAS,QAAQ;AAAA,IAErB,CAAC,GAEDhM,GAAU,MAAM;AACd,MAAAiM,EAAS,QAAQ,qBAAqB,KAAK,IAAA;AAAA,IAC7C,CAAC,cAIC9U,EAAA,GAAAC,EAuCM,OAvCNS,IAuCM;AAAA,MAtCJN,EA8BOyF,IAAA;AAAA,QA7BJ,IAAIiP,EAAA;AAAA,QACL,MAAA;AAAA,QACA,OAAM;AAAA,QACN,OAAM;AAAA,QACL,QAAQ;AAAA,QACR,OAAOtV,EAAA,YAAS,KAAQ;AAAA,QACxB,QAAQ;AAAA,QACR,WAAYgN,GAAO,CAAA,MAAA,CAAA;AAAA,MAAA;mBAEpB,MAmBU;AAAA,UAnBVpM,EAmBU6U,IAAA;AAAA,wBAlBCF,EAAA;AAAA,0DAAAA,EAAkB,QAAA/Q;AAAA,YAC1B,SAAS4Q,EAAA;AAAA,YACT,UAAUA,EAAA;AAAA,YACV,gBAAcpV,EAAA;AAAA,YACf,SAAQ;AAAA,YACP,WAAYgN,GAAO,CAAA,MAAA,CAAA;AAAA,UAAA;YAGZqI,EAAA;oBACL;AAAA,oBAED,MAKE;AAAA,gBALFzU,EAKEE,IAAA;AAAA,kBAJA,MAAK;AAAA,kBACL,OAAM;AAAA,kBACN,MAAK;AAAA,kBACL,OAAM;AAAA,gBAAA;;;;;;;;MAMLd,EAAA,8BADTS,EAMQ,SAAA;AAAA;QAJL,KAAK6U,EAAA;AAAA,QACN,OAAM;AAAA,MAAA,KAEH3R,EAAA,KAAa,GAAA,GAAAqC,EAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;AC3GtB,UAAMjG,IAAQC,GA8BR0B,IAAOC,GAMPoG,IAAa5H,EAAS;AAAA,MAC1B,MAAM;AACJ,eAAOJ,EAAM;AAAA,MACf;AAAA,MACA,IAAI8C,GAAU;AACZ,QAAAnB,EAAK,qBAAqBsD,GAAenC,CAAQ,CAAC;AAAA,MACpD;AAAA,IAAA,CACD,GAGK,EAAE,eAAAf,EAAA,IAAkBC,GAAA,GAEpBC,IAAmBH,EAAI,CAACI,MAA0B;AAAA,IAAC,CAAC,GAEpDgQ,IAAkBpQ,EAAI,CAACI,MAA0B;AAAA,IAAC,CAAC,GACnDC,IAAmBL,EAAI,MAAM;AAAA,IAAC,CAAC,GAC/BO,IAAoBP,EAAuB,IAAI;AAErD,QAAIC,EAAc,MAAM,WAAWO,GAAUtC,EAAM,MAAM,GAAG;AAC1D,YAAM,EAAE,wBAAAuC,GAAwB,uBAAA4P,GAAuB,wBAAA3P,GAAwB,cAAAG,MAAiBC;AAAA,QAC9F5C,EAAM,OAAO;AAAA,QACbA,EAAM,OAAO;AAAA,MAAA;AAEf,MAAAiC,EAAiB,QAAQM,GACzB2P,EAAgB,QAAQC,GACxBhQ,EAAiB,QAAQK,GACzBK;AAAA,QACEF;AAAA,QACA,CAACG,MAAa;AACZ,UAAAT,EAAkB,QAAQS;AAAA,QAC5B;AAAA,QACA,EAAE,WAAW,GAAA;AAAA,MAAK;AAAA,IAEtB;AAEA,UAAMI,IAASC,GAA2BC,IAAmB,MAAS,GAChEC,IAAUF,GAA2BG,IAAoB,MAAS,GAElE,EAAE,GAAAL,EAAA,IAAM/C,EAAA,GAERmS,IAAYvQ,EAAI,EAAK,GAErB0B,IAAS,MAAM;AACnB,MAAA6O,EAAU,QAAQ,IAClB1Q,EAAK,QAAQ3B,EAAM,UAAU,GAC7BA,EAAM,GAAG,OAAA,GACTiC,EAAiB,MAAMjC,EAAM,UAAU;AAAA,IACzC,GAEMyD,IAAU,MAAM;AACpB,MAAA4O,EAAU,QAAQ,IAClB1Q,EAAK,SAAS3B,EAAM,UAAU,GAC9BmC,EAAiB,MAAA;AAAA,IACnB,GAEMuB,IAAuBtD,EAAS,MAChCkC,GAAUtC,EAAM,YAAY,IAAU,CAACA,EAAM,YAAY,IACzDA,EAAM,GAAG,SAAS,SAAeA,EAAM,EAAE,QAAQ,IAAI,CAAC2D,MAAsBA,EAAK,QAAQ,IACtF,CAAA,CACR,GAEKC,IAAgBxD,EAAS,MAAM;AACnC,UAAIkC,GAAUtC,EAAM,KAAK,UAAUA,EAAM;AACzC,UAAI6D,EAAYX,CAAM,KAAKW,EAAYR,CAAO,KAAKQ,EAAY7D,EAAM,GAAG,KAAK,EAAG,QAAO;AACvF,YAAM,EAAE,KAAK8D,MAASC,GAA6B/D,EAAM,GAAG,OAAO,GAAG;AACtE,aAAOiD,EAAEC,IAAS,MAAMG,IAAU,YAAYS,CAAI;AAAA,IACpD,CAAC,GAEKE,IAAmB5D,EAAS,MAC5BkC,GAAUtC,EAAM,QAAQ,IAAUA,EAAM,WACxC,GAAAA,EAAM,GAAG,YAAYA,EAAM,GAAG,SAAS,QAAQ,SAAS,WAE7D,GAEKiE,IAAmB7D,EAAS,MAC5BkC,GAAUtC,EAAM,QAAQ,IAAUA,EAAM,WACrC,CAAC,CAACqC,EAAkB,KAC5B,GAEKgR,IAAiCjT,EAAS,MAC1CJ,EAAM,aAAa,EAExB;AAED,WAAA6C;AAAA,MACEmF;AAAA,MACA,OAAOlF,GAAU6C,MAAa;AAC5B,QAAI7C,MAAa6C,KACb5D,EAAc,MAAM,WAAWsQ,EAAU,SAC3CH,EAAgB,MAAMpP,CAAQ;AAAA,MAElC;AAAA,MACA,EAAE,WAAW,GAAA;AAAA,IAAK,mBAKlBvC,EAoCgB2U,IAAA;AAAA,kBAnCLlN,EAAA;AAAA,oDAAAA,EAAU,QAAAvD;AAAA,MAClB,OAAOxE,EAAA;AAAA,MACR,cAAW;AAAA,MACX,cAAW;AAAA,MACV,UAAUoT,EAAA;AAAA,MACV,UAAUpP,EAAA;AAAA,MACV,WAAWhE,EAAA;AAAA,MACX,kBAAgByD,EAAA;AAAA,MAChB,WAASzD,EAAA;AAAA,MACV,cAAa;AAAA,MACZ,QAAAuD;AAAA,MACA,SAAAC;AAAA,IAAA;MAEU,SACT,MAIS;AAAA,QAJIxD,EAAA,8BAAbS,EAIS,QAAAS,IAAA;AAAA,cAJkByC,EAAA,KAAa,GAAA,CAAA;AAAA,UAEhCI,EAAA,SADNvD,EAAA,GAAAC,EAGA,QAHAuF,EAGA;;;;;MAGI5D,EAAA;cACL;AAAA,cAED,MASO;AAAA,UATPZ,GASOC,EAAA,QAAA,UAAA,EAPJ,QAASW,EAAA,MAAA,GAFZ,MASO;AAAA,YAJGpC,EAAA,eADRM,EAIEmE,IAAA;AAAA;cAFC,IAAIrC,EAAA;AAAA,cACJ,OAAOpC,EAAA,OAAO;AAAA,YAAA;;;;;;;;;;;;;;;AC3KzB,UAAMD,IAAQC,GAOR0B,IAAOC,GAIP,EAAE,UAAAwI,EAAA,IAAaF,GAAA,GAEfmB,IAAQjL,EAAS;AAAA,MACrB,MAAM;AACJ,eAAOJ,EAAM,WAAW;AAAA,MAC1B;AAAA,MACA,IAAI8C,GAAU;AACZ,QAAAnB,EAAK,qBAAqB,EAAE,GAAG3B,EAAM,YAAiB,OAAO8C,GAAY,GACzEnB,EAAK,QAAQ;AAAA,MACf;AAAA,IAAA,CACD,GAEK,EAAE,GAAAsB,EAAA,IAAM/C,EAAA,GAERoL,IAAQlL,EAAS,MACdJ,EAAM,WAAW,SAASiD,EAAEjD,EAAM,WAAW,MAAM,IAAI,MAC/D,GAEKqT,IAAiCjT,EAAS,MAC1CJ,EAAM,WAAW,aAAa,EAEnC;2BAICO,EAUE2U,IAAA;AAAA,kBATS7J,EAAA;AAAA,oDAAAA,EAAK,QAAA5G;AAAA,MACb,OAAOxE,EAAA;AAAA,MACP,OAAOA,EAAA,WAAW;AAAA,MAClB,OAAOqL,EAAA;AAAA,MACP,UAAU+H,EAAA;AAAA,MACV,WAAS,CAAGpT,EAAA,WAAW;AAAA,MACxB,WAAQ;AAAA,MACP,SAAKsE,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAE,MAAEK,EAAAsF,CAAA,EAASnK,EAAA,UAAU;AAAA,MAC1B,iCAAQ0B,EAAI,QAAA;AAAA,IAAA;;;;;;;;;;;;;;;;ACrCjB,UAAM3B,IAAQC,GAkBR0B,IAAOC,GAIPoD,IAAqB5E,EAAS;AAAA,MAClC,MAAM;AACJ,eAAOJ,EAAM,WAAW;AAAA,MAC1B;AAAA,MACA,IAAI8C,GAA4D;AAC9D,QAAAnB,EAAK,qBAAqB,EAAE,GAAG3B,EAAM,YAAiB,OAAOiF,GAAUnC,CAAQ,GAAK;AAAA,MACtF;AAAA,IAAA,CACD,GAEKoQ,IAASpR,EAAI,EAAE,GACfuQ,IAAYvQ,EAAI,EAAK,GACrBqR,IAAiErR,EAAI,MAAS,GAE9EmR,IAAoBnR,EAAI,CAAC,GAEzB,EAAE,GAAAmB,EAAA,IAAM/C,EAAA,GAER,EAAE,aAAAkT,EAAA,IAAgBrH,GAAO/L,CAAK,GAE9BwD,IAAS,MAAM;AACnB,MAAA6O,EAAU,QAAQ;AAAA,IACpB,GAEM/G,IAAQlL,EAAS,MACdJ,EAAM,WAAW,SAASiD,EAAEjD,EAAM,WAAW,MAAM,IAAI,MAC/D,GAEKqT,IAAiCjT,EAAS,MAC1CJ,EAAM,WAAW,aAAa,EAEnC,GAGKoL,IAAakI,GAActT,EAAM,YAAY,GAC7CuT,IAAezR,EAA0C,EAAE,GAC3D0R,IAAqB1R,EAA0C,EAAE,GAEjE2R,IAAWrT,EAAiD,MAAM;AACtE,YAAMsT,wBAAY,IAAA;AAClB,aAAAF,EAAmB,MAAM,QAAQ,CAACnI,MAAU;AAC1C,QAAAqI,EAAM,IAAIrI,EAAM,OAAO,EAAE,OAAOA,EAAM,OAAO,OAAOA,EAAM,OAAO,UAAUA,EAAM,UAAU;AAAA,MAC7F,CAAC,GACDkI,EAAa,MAAM,QAAQ,CAAClI,MAAU;AACpC,QAAAqI,EAAM,IAAIrI,EAAM,OAAO,EAAE,OAAOA,EAAM,OAAO,OAAOA,EAAM,OAAO,UAAUA,EAAM,UAAU;AAAA,MAC7F,CAAC,GACM,MAAM,KAAKqI,GAAO,CAAC,CAAC9M,GAAKyE,CAAK,OAC5B,EAAE,OAAOzE,GAAK,OAAOyE,EAAM,OAAO,UAAUA,EAAM,SAAA,EAC1D;AAAA,IACH,CAAC,GAEKgK,IAAUvT,EAAI,EAAK,GAEnB8R,IAAY,OAAOC,GAAeC,MAA2B;AACjE,MAAAuB,EAAQ,QAAQ;AAChB,YAAMtB,IAAcX,EAAY,MAAMpT,EAAM,aAAa;AACzD,MAAA+T,EAAY,QAAQF;AACpB,YAAMjL,IAAM,MAAM5I,EAAM,WAAWoL,GAAYgI,EAAY,KAAK;AAChE,MAAIU,MAAmBb,EAAkB,UAAOM,EAAa,QAAQ3K,IACrEyM,EAAQ,QAAQ;AAAA,IAClB,GAEMrB,IAAwB,CAACC,MAAqC;AAClE,YAAMpM,IAAQ4L,EAAS,MAAM,OAAO,CAAC9P,MAA6CsQ,EAAO,SAAStQ,EAAK,KAAK,CAAC;AAC7G,aAAQ,CAAA,EAA4C,OAAOkE,CAAK;AAAA,IAClE,GAEMqM,IAAyB,OAAO7I,MAAiD;AACrF,UAAI8I,IAAQ,GACRC,IAAa,CAAA;AACjB,aAAInK,GAAQoB,CAAK,KACf8I,IAAQ9I,EAAM,QACd+I,IAAaJ,EAAsB3I,CAAK,KAExC+I,IAAaJ,EAAsB,CAAC3I,CAAK,CAAC,GAE5CmI,EAAmB,QAAQY,GACpBA,EAAW,WAAWD;AAAA,IAC/B,GAEME,IAAcvS,EAAI,EAAK,GACvBwS,IAAsB,MAAM;AAChC,mBAAanB,EAAe,KAAK,GACjCA,EAAe,QAAQ;AAAA,IACzB,GACMoB,IAAY,YAAY;AAE5B,UADAD,EAAA,GACID,EAAY,UAAU,GAAM;AAChC,MAAAA,EAAY,QAAQ,IACpBgB,EAAQ,QAAQ;AAChB,YAAMzM,IAAM,MAAM5I,EAAM,WAAWoL,GAAYgI,EAAY,KAAK;AAChE,MAAIH,EAAkB,UAAU,MAAGM,EAAa,QAAQ3K,IACxDyM,EAAQ,QAAQ;AAAA,IAClB,GACM5R,IAAU,MAAM;AACpB,MAAA4O,EAAU,QAAQ,IAClBiC,EAAA,GACAC,EAAA;AAAA,IACF,GAEMC,IAA0BpU,EAAS,MAAM;AAC7C,UAAI,CAACJ,EAAM,WAAW,YAAYwT,EAAmB,MAAM,CAAC;AAC1D,eAAOA,EAAmB,MAAM,CAAC,EAAE;AAAA,IAGvC,CAAC,GAEKiB,IAAiB,CAACZ,MAAkB;AACxC,MAAI,CAAC7T,EAAM,WAAW,YAAY,CAACqS,EAAU,SAASwB,EAAM,WAAW,KACnEW,EAAwB,UAAUX,MACtCX,EAAO,QAAQW;AAAA,IACjB,GAEMa,IAAe,YAAY;AAE/B,UADAnB,EAAa,QAAQ,MAAMvT,EAAM,WAAWoL,GAAYgI,EAAY,KAAK,GACrEpT,EAAM,WAAW,UAAU;AAC7B,QAAAgF,EAAmB,QAAQ,CAAA;AAC3B;AAAA,MACF;AACA,MAAAA,EAAmB,QAAQ;AAAA,IAC7B,GAEMuG,IAAsBnL,EAAS,MAC9ByD,EAAY7D,EAAM,WAAW,IAC9BA,EAAM,WAAW,YAAY,eAAqBiD,EAAE,2CAA2C,IAC/FjD,EAAM,WAAW,YAAY,OAAaiD,EAAE,mCAAmC,IAC/EjD,EAAM,WAAW,YAAY,cAAcA,EAAM,WAAW,YAAY,WACnEiD,EAAE,yCAAyC,IAC7C,KALqCjD,EAAM,WAMnD;AAED,WAAA6C;AAAA,MACEmC;AAAA,MACA,OAAOlC,GAAU6C,MAAa;AAC5B,YAAI7C,MAAa6C,EAAU;AAC3B,YAAIJ,GAAOzC,CAAQ,KAAKe,EAAYf,CAAQ,KAAMmH,GAAQnH,CAAQ,KAAKA,EAAS,WAAW,GAAI;AAE7F,cADA0Q,EAAmB,QAAQ,CAAA,GACvBxT,EAAM,oBAAoBqU,EAAY,UAAU,GAAM;AAC1D,UAAAlB,EAAe,QAAQ,WAAW,MAAM;AACtC,YAAAoB,EAAA;AAAA,UACF,GAAG,GAAI;AACP;AAAA,QACF;AAEA,YADc,OAAML,EAAuBpR,CAAQ,GAEnD;AAAA,cAAImH,GAA2BnH,CAAQ,GAAG;AACxC,YAAAuS,EAAQ,QAAQ,IAChB7B,EAAmB,QAAQ,MAAMxT,EAAM,gBAAgB8C,CAAoC,GAC3FuS,EAAQ,QAAQ;AAChB;AAAA,UACF;AACA,UAAAA,EAAQ,QAAQ,IAChB7B,EAAmB,QAAQ,MAAMxT,EAAM,gBAAgB,CAAC8C,CAA6B,CAAC,GACtFuS,EAAQ,QAAQ;AAAA;AAAA,MAClB;AAAA,MACA,EAAE,WAAW,GAAA;AAAA,IAAK,GAGpBV;AAAA,MACEzB;AAAA,MACA,CAACpQ,GAAU6C,MAAa;AACtB,QAAAsN,EAAkB,SACdnQ,MAAa6C,MACfsN,EAAkB,SAClBW,EAAU9Q,GAAUmQ,EAAkB,KAAK;AAAA,MAE/C;AAAA,MACA,EAAE,UAAU,IAAA;AAAA,IAAI,mBAKhB1S,EAsBgB2U,IAAA;AAAA,kBArBLlQ,EAAA;AAAA,oDAAAA,EAAkB,QAAAP;AAAA,MAC1B,OAAOgP,EAAA;AAAA,MACR,aAAA;AAAA,MACC,aAAalI,EAAA;AAAA,MACb,UAAU8H,EAAA;AAAA,MACV,WAAS,CAAGpT,EAAA,WAAW;AAAA,MACvB,OAAOqL,EAAA;AAAA,MACP,OAAOrL,EAAA,WAAW;AAAA,MAClB,SAASoV,EAAA;AAAA,MACT,mBAAeZ;AAAA,MACf,QAAAjR;AAAA,MACA,SAAAC;AAAA,MACA,iBAAaiR;AAAA,IAAA;MAEH,MAAI9T,EACb,CAIE,EAAA,OALsBuU,GAAW,MAAAxR,QAAI;AAAA,QACvC9C,EAIEsG,IAJF0L,GAIEsC,GAHiB;AAAA,UAChB,OAAOxR,EAAK,IAAI;AAAA,UAChB,UAAUA,EAAK,IAAI;AAAA,QAAA;;;;;;;;;;;;;;;;;;;;;ACpN5B,UAAM3D,IAAQC,GAsBR0B,IAAOC,GAIPoD,IAAqB5E,EAAS;AAAA,MAClC,MAAM;AACJ,eAAOJ,EAAM,WAAW;AAAA,MAC1B;AAAA,MACA,IAAI8C,GAA4D;AAC9D,QAAAnB,EAAK,qBAAqB,EAAE,GAAG3B,EAAM,YAAiB,OAAOiF,GAAUnC,CAAQ,GAAK;AAAA,MACtF;AAAA,IAAA,CACD,GAEKoQ,IAASpR,EAAI,EAAE,GACfuQ,IAAYvQ,EAAI,EAAK,GACrBqR,IAAiErR,EAAI,MAAS,GAE9EmR,IAAoBnR,EAAI,CAAC,GAEzB,EAAE,GAAAmB,EAAA,IAAM/C,EAAA,GAER,EAAE,aAAAkT,EAAA,IAAgBrH,GAAO/L,CAAK,GAE9BwD,IAAS,MAAM;AACnB,MAAA6O,EAAU,QAAQ;AAAA,IACpB,GAEM/G,IAAQlL,EAAS,MACdJ,EAAM,WAAW,SAASiD,EAAEjD,EAAM,WAAW,MAAM,IAAI,MAC/D,GAEKqT,IAAiCjT,EAAS,MAC1CJ,EAAM,WAAW,aAAa,EAEnC,GAGKoL,IAAakI,GAActT,EAAM,YAAY,GAC7CuT,IAAezR,EAAW,EAAE,GAC5B0R,IAAqB1R,EAAW,EAAE,GAElC2R,IAAWrT,EAAiD,MAAM;AACtE,YAAMsT,wBAAY,IAAA,GACZiC,wBAA4C,IAAA;AAClD,aAAAnC,EAAmB,MAAM,QAAQ,CAACnI,MAAU;AAC1C,QAAIA,EAAM,OACRqI,EAAM,IAAIrI,EAAM,IAAIrL,EAAM,SAAS,GAAGqL,EAAM,IAAIrL,EAAM,SAAS,CAAC,GAChE2V,EAAS,IAAItK,EAAM,IAAIrL,EAAM,SAAS,GAAGiF,GAAUoG,EAAM,GAAG,CAAC,MAE7DqI,EAAM,IAAIrI,EAAMrL,EAAM,SAAS,GAAGqL,EAAMrL,EAAM,SAAS,CAAC,GACxD2V,EAAS,IAAItK,EAAMrL,EAAM,SAAS,GAAGiF,GAAUoG,CAAK,CAAC;AAAA,MAEzD,CAAC,GACDkI,EAAa,MAAM,QAAQ,CAAClI,MAAU;AACpC,QAAIA,EAAM,OACRqI,EAAM,IAAIrI,EAAM,IAAIrL,EAAM,SAAS,GAAGqL,EAAM,IAAIrL,EAAM,SAAS,CAAC,GAChE2V,EAAS,IAAItK,EAAM,IAAIrL,EAAM,SAAS,GAAGiF,GAAUoG,EAAM,GAAG,CAAC,MAE7DqI,EAAM,IAAIrI,EAAMrL,EAAM,SAAS,GAAGqL,EAAMrL,EAAM,SAAS,CAAC,GACxD2V,EAAS,IAAItK,EAAMrL,EAAM,SAAS,GAAGiF,GAAUoG,CAAK,CAAC;AAAA,MAEzD,CAAC,GACM,MAAM,KAAKqI,GAAO,CAAC,CAAC9M,GAAKyE,CAAK,OAC5B,EAAE,OAAOzE,GAAK,OAAOyE,GAAO,KAAKsK,EAAS,IAAI/O,CAAG,EAAA,EACzD;AAAA,IACH,CAAC,GAEKyO,IAAUvT,EAAI,EAAK,GAEnB8R,IAAY,OAAOC,GAAeC,MAA2B;AACjE,MAAAuB,EAAQ,QAAQ;AAChB,YAAMtB,IAAcX,EAAY,MAAMpT,EAAM,aAAa;AACzD,MAAA+T,EAAY,QAAQF;AACpB,YAAMjL,IAAM,MAAM5I,EAAM,kBAAkBoL,GAAYgI,EAAY,KAAK;AACvE,MAAIU,MAAmBb,EAAkB,UAAOM,EAAa,QAAQ3K,IACrEyM,EAAQ,QAAQ;AAAA,IAClB,GAEMrB,IAAwB,CAACC,MAAqC;AAClE,YAAMpM,IAAQ4L,EAAS,MAAM,OAAO,CAAC9P,MAA6CsQ,EAAO,SAAStQ,EAAK,KAAK,CAAC;AAC7G,aAAQ,CAAA,EAA4C,OAAOkE,CAAK;AAAA,IAClE,GAEMqM,IAAyB,OAAO7I,MAAiD;AACrF,UAAI8I,IAAQ,GACRC,IAAa,CAAA;AACjB,aAAInK,GAAQoB,CAAK,KACf8I,IAAQ9I,EAAM,QACd+I,IAAaJ,EAAsB3I,CAAK,KAExC+I,IAAaJ,EAAsB,CAAC3I,CAAK,CAAC,GAE5CmI,EAAmB,QAAQY,GACpBA,EAAW,WAAWD;AAAA,IAC/B,GAEME,IAAcvS,EAAI,EAAK,GACvBwS,IAAsB,MAAM;AAChC,mBAAanB,EAAe,KAAK,GACjCA,EAAe,QAAQ;AAAA,IACzB,GACMoB,IAAY,YAAY;AAE5B,UADAD,EAAA,GACID,EAAY,UAAU,GAAM;AAChC,MAAAA,EAAY,QAAQ,IACpBgB,EAAQ,QAAQ;AAChB,YAAMzM,IAAM,MAAM5I,EAAM,kBAAkBoL,GAAYgI,EAAY,KAAK;AACvE,MAAIH,EAAkB,UAAU,MAAGM,EAAa,QAAQ3K,IACxDyM,EAAQ,QAAQ;AAAA,IAClB,GACM5R,IAAU,MAAM;AACpB,MAAA4O,EAAU,QAAQ,IAClBiC,EAAA,GACAC,EAAA;AAAA,IACF,GAEMC,IAA0BpU,EAAS,MAAM;AAC7C,UAAI,CAACJ,EAAM,WAAW,YAAYwT,EAAmB,MAAM,CAAC;AAC1D,eAAOA,EAAmB,MAAM,CAAC,EAAE;AAAA,IAGvC,CAAC,GAEKiB,IAAiB,CAACZ,MAAkB;AACxC,MAAI,CAAC7T,EAAM,WAAW,YAAY,CAACqS,EAAU,SAASwB,EAAM,WAAW,KACnEW,EAAwB,UAAUX,MACtCX,EAAO,QAAQW;AAAA,IACjB,GAEMa,IAAe,YAAY;AAE/B,UADAnB,EAAa,QAAQ,MAAMvT,EAAM,kBAAkBoL,GAAYgI,EAAY,KAAK,GAC5EpT,EAAM,WAAW,UAAU;AAC7B,QAAAgF,EAAmB,QAAQ,CAAA;AAC3B;AAAA,MACF;AACA,MAAAA,EAAmB,QAAQ;AAAA,IAC7B,GAEMuG,IAAsBnL,EAAS,MAC9ByD,EAAY7D,EAAM,WAAW,IAC9BA,EAAM,WAAW,YAAY,eAAqBiD,EAAE,2CAA2C,IAC/FjD,EAAM,WAAW,YAAY,OAAaiD,EAAE,mCAAmC,IAC/EjD,EAAM,WAAW,YAAY,cAAcA,EAAM,WAAW,YAAY,WACnEiD,EAAE,yCAAyC,IAC7C,KALqCjD,EAAM,WAMnD;AAED,WAAA6C;AAAA,MACEmC;AAAA,MACA,OAAOlC,GAAU6C,MAAa;AAC5B,YAAI7C,MAAa6C,EAAU;AAC3B,YAAIJ,GAAOzC,CAAQ,KAAKe,EAAYf,CAAQ,KAAMmH,GAAQnH,CAAQ,KAAKA,EAAS,WAAW,GAAI;AAE7F,cADA0Q,EAAmB,QAAQ,CAAA,GACvBxT,EAAM,oBAAoBqU,EAAY,UAAU,GAAM;AAC1D,UAAAlB,EAAe,QAAQ,WAAW,MAAM;AACtC,YAAAoB,EAAA;AAAA,UACF,GAAG,GAAI;AACP;AAAA,QACF;AAEA,YADc,OAAML,EAAuBpR,CAAQ,GAEnD;AAAA,cAAImH,GAA2BnH,CAAQ,GAAG;AACxC,YAAAuS,EAAQ,QAAQ,IAChB7B,EAAmB,QAAQ,MAAMxT,EAAM,uBAAuB8C,CAAoC,GAClGuS,EAAQ,QAAQ;AAChB;AAAA,UACF;AACA,UAAAA,EAAQ,QAAQ,IAChB7B,EAAmB,QAAQ,MAAMxT,EAAM,uBAAuB,CAAC8C,CAA6B,CAAC,GAC7FuS,EAAQ,QAAQ;AAAA;AAAA,MAClB;AAAA,MACA,EAAE,WAAW,GAAA;AAAA,IAAK,GAGpBV;AAAA,MACEzB;AAAA,MACA,CAACpQ,GAAU6C,MAAa;AACtB,QAAAsN,EAAkB,SACdnQ,MAAa6C,MACfsN,EAAkB,SAClBW,EAAU9Q,GAAUmQ,EAAkB,KAAK;AAAA,MAE/C;AAAA,MACA,EAAE,UAAU,IAAA;AAAA,IAAI,mBAKhB1S,EA0CgB2U,IAAA;AAAA,kBAzCLlQ,EAAA;AAAA,oDAAAA,EAAkB,QAAAP;AAAA,MAC1B,OAAOgP,EAAA;AAAA,MACR,aAAA;AAAA,MACC,aAAalI,EAAA;AAAA,MACb,UAAU8H,EAAA;AAAA,MACV,WAAS,CAAGpT,EAAA,WAAW;AAAA,MACvB,OAAOqL,EAAA;AAAA,MACP,OAAOrL,EAAA,WAAW;AAAA,MAClB,SAASoV,EAAA;AAAA,MACT,mBAAeZ;AAAA,MACf,QAAAjR;AAAA,MACA,SAAAC;AAAA,MACA,iBAAaiR;AAAA,IAAA;MAGH,MAAI9T,EACb,CAUO,EAAA,OAXiBuU,SAAiBS,QAAQ;AAAA,QACjDnU,GAUOC,EAAA,QAAA,QAAA;AAAA,UARJ,MAAMkU;AAAA,UACN,OAAOT;AAAA,QAAA,GAHV,MAUO;AAAA,UALLtU,EAIEsG,IAJF0L,GAIEsC,GAHiB;AAAA,YAChB,OAAOS,EAAS,IAAI;AAAA,YACpB,UAAUA,EAAS,IAAI;AAAA,UAAA;;;MAKnB,MAAIhV,EACb,CASO,EAAA,OAViBwU,SAAiBS,QAAQ;AAAA,QACjDpU,GASOC,EAAA,QAAA,QAAA;AAAA,UAPJ,OAAO0T;AAAA,UACP,MAAMS;AAAA,QAAA,GAHT,MASO;AAAA,UAJLhV,EAGEL,IAHFqS,GAGEuC,GAFiB;AAAA,YAChB,MAAMS,EAAS;AAAA,UAAA;;;;;;;;;;;;;;;ACjQ1B,UAAM7V,IAAQC,GAWR0B,IAAOC,GAIPyJ,IAAQjL,EAAS;AAAA,MACrB,MAAM;AACJ,eAAOJ,EAAM,WAAW;AAAA,MAC1B;AAAA,MACA,IAAI8C,GAAU;AACZ,QAAAnB,EAAK,qBAAqB,EAAE,GAAG3B,EAAM,YAAiB,OAAO8C,GAAY;AAAA,MAC3E;AAAA,IAAA,CACD,GAEK,EAAE,GAAAG,EAAA,IAAM/C,EAAA,GAERoL,IAAQlL,EAAS,MACdJ,EAAM,WAAW,SAASiD,EAAEjD,EAAM,WAAW,MAAM,IAAI,MAC/D;sBAICS,EAAA,GAAAC,EAsBM,OAtBNS,IAsBM;AAAA,MArBJN,EAESiV,IAAA,EAFD,OAAM,UAAM;AAAA,mBAClB,MAAwB;AAAA,UAAxB7U,EAAwB,gBAAfqK,EAAA,KAAK,GAAA,CAAA;AAAA,QAAA;;;MAEhBzK,EAiBasF,IAAA;AAAA,oBAjBQkF,EAAA;AAAA,sDAAAA,EAAK,QAAA5G;AAAA,MAAA;mBACxB,MAOO;AAAA,UAPP5D,EAOOyF,IAAA;AAAA,YANL,MAAK;AAAA,YACJ,OAAO;AAAA,YACP,WAASrG,EAAA;AAAA,YACT,OAAOoL,EAAA,UAAK,KAAA,cAAA;AAAA,UAAA;uBAEb,MAAoC;AAAA,kBAAjCvG,EAAA7B,CAAA,EAAC,2BAAA,CAAA,GAAA,CAAA;AAAA,YAAA;;;UAENpC,EAOOyF,IAAA;AAAA,YANL,MAAK;AAAA,YACJ,OAAO;AAAA,YACP,WAASrG,EAAA;AAAA,YACT,OAAOoL,EAAA,UAAK,KAAA,cAAA;AAAA,UAAA;uBAEb,MAAqC;AAAA,kBAAlCvG,EAAA7B,CAAA,EAAC,4BAAA,CAAA,GAAA,CAAA;AAAA,YAAA;;;;;;;;;;;;;;;;;;;ACnDZ,UAAMjD,IAAQC,GAeR0B,IAAOC,GAIPyJ,IAAQjL,EAAS;AAAA,MACrB,MAAM;AACJ,eAAIyD,EAAY7D,EAAM,WAAW,KAAK,KAAKuF,GAAOvF,EAAM,WAAW,KAAK,IAAU,KAC3EA,EAAM,WAAW,QAAQ,IAAI;AAAA,MACtC;AAAA,MACA,IAAI8C,GAAU;AACZ,YAAIiT,IAA8B;AAClC,QAAIjT,MAAa,MAAGiT,IAAc,KAC9BjT,MAAa,MAAGiT,IAAc,KAClCpU,EAAK,qBAAqB,EAAE,GAAG3B,EAAM,YAAiB,OAAO+V,GAAe;AAAA,MAC9E;AAAA,IAAA,CACD,GAEK,EAAE,GAAA9S,EAAA,IAAM/C,EAAA,GAERoL,IAAQlL,EAAS,MACdJ,EAAM,WAAW,SAASiD,EAAEjD,EAAM,WAAW,MAAM,IAAI,MAC/D,GAEKgW,IAAQ5V,EAAS,MACd;AAAA,MACL,EAAE,OAAO,IAAI,OAAO6C,EAAEjD,EAAM,IAAI,EAAA;AAAA,MAChC,EAAE,OAAO,GAAG,OAAOiD,EAAEjD,EAAM,KAAK,EAAA;AAAA,MAChC,EAAE,OAAO,GAAG,OAAOiD,EAAEjD,EAAM,MAAM,EAAA;AAAA,IAAE,CAEtC;2BAICO,EAKE0V,IAAA;AAAA,kBAJS5K,EAAA;AAAA,oDAAAA,EAAK,QAAA5G;AAAA,MACb,WAASxE,EAAA;AAAA,MACT,OAAOqL,EAAA;AAAA,MACP,OAAO0K,EAAA;AAAA,IAAA;;ICtDCE,KAAY;AAAA,EACvB,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,sBAAsB;AAAA,EACtB,MAAM;AAAA,EACN,OAAO;AACT,GAEaC,KAAmBD,GAAU;AAEnC,SAASE,KAAe;AAC7B,QAAM,EAAE,GAAAnT,EAAA,IAAM/C,EAAA,GAERmW,IAAmBvU,EAAwC;AAAA,IAC/D;AAAA,MACE,OAAOoU,GAAU;AAAA,MACjB,OAAOjT,EAAE,2BAA2B;AAAA,MACpC,OAAO;AAAA,IAAA;AAAA,IAET;AAAA,MACE,OAAOiT,GAAU;AAAA,MACjB,OAAOjT,EAAE,8BAA8B;AAAA,MACvC,OAAO;AAAA,IAAA;AAAA,IAET;AAAA,MACE,OAAOiT,GAAU;AAAA,MACjB,OAAOjT,EAAE,wCAAwC;AAAA,MACjD,OAAO;AAAA,IAAA;AAAA,IAET;AAAA,MACE,OAAOiT,GAAU;AAAA,MACjB,OAAOjT,EAAE,wBAAwB;AAAA,MACjC,OAAO;AAAA,IAAA;AAAA,IAET;AAAA,MACE,OAAOiT,GAAU;AAAA,MACjB,OAAOjT,EAAE,yBAAyB;AAAA,MAClC,OAAO;AAAA,IAAA;AAAA,EACT,CACD;AAMD,SAAO;AAAA,IACL,kBAAAoT;AAAA,IACA,oBANyB,CAAChL,MACnBgL,EAAiB,MAAM,KAAK,CAAC1S,MAASA,EAAK,UAAU0H,CAAK;AAAA,EAKjE;AAEJ;;;;;;;ACjDA,UAAMrL,IAAQC,GAIR,EAAE,oBAAAqW,EAAA,IAAuBF,GAAA,GACzBG,IAASnW,EAAS,MAAMkW,EAAmBtW,EAAM,KAAK,CAAC;2BAI3DO,EAMQC,IAAA;AAAA,MALL,OAAO+V,EAAA,OAAQ;AAAA,MAChB,OAAA;AAAA,MACA,MAAK;AAAA,IAAA;iBAEL,MAAmB;AAAA,QAAhBrQ,EAAAhF,EAAAqV,EAAA,OAAQ,KAAK,GAAA,CAAA;AAAA,MAAA;;;;ICfdC,KAAe;AAAA,EACnB,MAAM;AAAA,IACJ,OAAO;AAAA,MACL,SAAS;AAAA,IAAA;AAAA,IAEX,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,eAAe;AAAA,IAAA;AAAA,EACjB;AAEJ,GAEaC,KAAgDC,GAAiBF,EAAY;;;;;;;;;;;;;;;;;;;;;ACP1F,UAAMxW,IAAQC,GAuCR0B,IAAOC,GAIPyG,IAASC,GAAA,GACTqO,IAASC,GAA4B,MAAS,GAC9CC,IAASD,GAAoB,EAAK,GAElCjT,IAAOvD,EAAS,MACbJ,EAAM,YAAYA,EAAM,EAAS,CACzC,GAEK8W,IAAyB1W,EAAS,MAC/BJ,EAAM,WAAWA,EAAM,iBAAiB,kBAAkBA,EAAM,cACxE,GAEK+W,IAAe3W,EAAS,MAAM;AAClC,UAAIJ,EAAM,iBAAiB2W,EAAO,OAAO;AACvC,cAAMK,IAAchX,EAAM,cAAc2W,EAAO,OAAO3W,EAAM,OAAOA,EAAM,iBAAiBA,EAAM,cAAc;AAC9G,YAAIgX,MAAgB;AAClB,iBAAOA;AAAA,MAEX;AACA,aAAIhX,EAAM,MAAM,SAAS,IAAUA,EAAM,QACrC2W,EAAO,QACFhF,GAAqBgF,EAAO,OAAO3W,EAAM,eAAe,IAE1DA,EAAM,iBAAiBA,EAAM,KAAK;AAAA,IAC3C,CAAC,GAEKiN,IAAU,MAAM;AACpB,MAAA5E,EAAO,KAAK,EAAE,MAAMrI,EAAM,OAAO,QAAQ,EAAE,IAAIA,EAAM,GAAA,EAAG,CAAG;AAAA,IAC7D;AAEA,WAAA6C;AAAA,MACEc;AAAA,MACA,OAAOb,MAAa;AAClB,QAAI+T,EAAO,SACPhT,EAAYf,CAAQ,KAAKA,EAAS,YAAY,OAClD6T,EAAO,QAAQ7T,GACf+T,EAAO,QAAQ;AAAA,MACjB;AAAA,MACA,EAAE,WAAW,GAAA;AAAA,IAAK,mBAKlBnW,EAkDM,OAAA;AAAA,MAlDA,UAAOoW,EAAA,KAAsB;AAAA,IAAA;MACjBhS,EAAAS,EAAA,EAAOtF,EAAA,EAAE,KAAK6E,EAAAjB,CAAA,EAAY5D,EAAA,EAAE,IAC1CwB,GAEOC,+BAFP,MAEO;AAAA,0BAFY,OAEnB,EAAA;AAAA,MAAA,KAEczB,EAAA,iBAAhBS,EASM,OAAAS,IAAA;AAAA,QARD+E,EAAAhF,EAAA6V,EAAA,KAAY,IAAG,KAClB,CAAA;AAAA,SACSF,EAAA,SAAU5W,EAAA,MAAM,WAAM,UAD/BM,EAMEa,IAAA;AAAA;UAJC,MAAM;AAAA,UACN,OAAO;AAAA,UACR,eAAA;AAAA,UACA,OAAM;AAAA,QAAA;YAIGnB,EAAA,qBADbM,EAeQC,IAAA;AAAA;QAbL,MAAMP,EAAA;AAAA,QACN,OAAOA,EAAA,eAAe,SAAS;AAAA,QAC/B,UAAUA,EAAA;AAAA,QACV,iBAAWsE,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,MAAQ5C,EAAI,WAAY1B,EAAA,EAAE;AAAA,MAAA;mBAEtC,MAAkB;AAAA,UAAfiG,EAAAhF,EAAA6V,EAAA,KAAY,IAAG,KAClB,CAAA;AAAA,WACSF,EAAA,SAAU5W,EAAA,MAAM,WAAM,UAD/BM,EAMEa,IAAA;AAAA;YAJC,MAAM;AAAA,YACN,OAAO;AAAA,YACR,eAAA;AAAA,YACA,OAAM;AAAA,UAAA;;;oDAGVb,EAiBQC,IAAA;AAAA;QAfL,MAAMP,EAAA;AAAA,QACN,eAAaA,EAAA,YAAY6E,EAAA2R,EAAA,EAAc,KAAK,KAAK,gBAAgB3R,EAAA2R,EAAA,EAAc,KAAK,KAAK;AAAA,QACzF,OAAOxW,EAAA,eAAe,SAAS;AAAA,QAC/B,UAAUA,EAAA;AAAA,QACV,WAAYgN,GAAO,CAAA,MAAA,CAAA;AAAA,QACnB,iBAAW1I,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,MAAQ5C,EAAI,WAAY1B,EAAA,EAAE;AAAA,MAAA;mBAEtC,MAAkB;AAAA,UAAfiG,EAAAhF,EAAA6V,EAAA,KAAY,IAAG,KAClB,CAAA;AAAA,WACSF,EAAA,SAAU5W,EAAA,MAAM,WAAM,UAD/BM,EAMEa,IAAA;AAAA;YAJC,MAAM;AAAA,YACN,OAAO;AAAA,YACR,eAAA;AAAA,YACA,OAAM;AAAA,UAAA;;;;;;IC1ID6V,KAAW;AAAA,EACtB,OAAO;AAAA,EACP,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,OAAO;AAAA,EACP,UAAU;AAAA,EACV,OAAO;AAAA,EACP,WAAW;AACb,GAEaC,KAAkBD,GAAS;AAEjC,SAASE,KAAc;AAC5B,QAAMC,IAAkBtV,EAAuC;AAAA,IAC7D;AAAA,MACE,OAAOmV,GAAS;AAAA,MAChB,OAAOA,GAAS;AAAA,MAChB,OAAO;AAAA,IAAA;AAAA,IAET;AAAA,MACE,OAAOA,GAAS;AAAA,MAChB,OAAOA,GAAS;AAAA,MAChB,OAAO;AAAA,IAAA;AAAA,IAET;AAAA,MACE,OAAOA,GAAS;AAAA,MAChB,OAAOA,GAAS;AAAA,MAChB,OAAO;AAAA,IAAA;AAAA,IAET;AAAA,MACE,OAAOA,GAAS;AAAA,MAChB,OAAOA,GAAS;AAAA,MAChB,OAAO;AAAA,IAAA;AAAA,IAET;AAAA,MACE,OAAOA,GAAS;AAAA,MAChB,OAAOA,GAAS;AAAA,MAChB,OAAO;AAAA,IAAA;AAAA,IAET;AAAA,MACE,OAAOA,GAAS;AAAA,MAChB,OAAOA,GAAS;AAAA,MAChB,OAAO;AAAA,IAAA;AAAA,IAET;AAAA,MACE,OAAOA,GAAS;AAAA,MAChB,OAAOA,GAAS;AAAA,MAChB,OAAO;AAAA,IAAA;AAAA,IAET;AAAA,MACE,OAAOA,GAAS;AAAA,MAChB,OAAOA,GAAS;AAAA,MAChB,OAAO;AAAA,IAAA;AAAA,EACT,CACD;AAMD,SAAO;AAAA,IACL,iBAAAG;AAAA,IACA,mBANwB,CAAC/L,MAClB+L,EAAgB,MAAM,KAAK,CAACzT,MAASA,EAAK,UAAU0H,CAAK;AAAA,EAKhE;AAEJ;;;;;;;AChEA,UAAMrL,IAAQC,GAOR,EAAE,mBAAAoX,EAAA,IAAsBF,GAAA,GACxBG,IAAclX,EAAS,MACpBiX,EAAkBrX,EAAM,KAAK,CACrC;qBAKSsX,EAAA,cADR/W,EAOQC,IAAA;AAAA;MALL,OAAO8W,EAAA,MAAY;AAAA,MACpB,OAAA;AAAA,MACA,MAAK;AAAA,IAAA;iBAEL,MAAuB;AAAA,QAApBpR,EAAAhF,EAAAoW,EAAA,MAAY,KAAK,GAAA,CAAA;AAAA,MAAA;;;;ICxBXC,KAAiB,CAAClM,MACtB,KAAKA;;;;;;;;;ACQd,UAAMrL,IAAQC,GAcR,EAAE,MAAAuX,GAAM,aAAAC,EAAA,IAAgBC,GAAA,GACxB,EAAE,aAAAC,EAAA,IAAgBjP,GAAA,GAClB,EAAE,GAAAzF,EAAA,IAAM/C,EAAA,GAER+M,IAAU,CAACzI,MAAiB;AAEhC,MADA0I,GAAe1I,CAAK,GACfiT,MACDrT,GAASpE,EAAM,KAAK,IACtBwX,EAAKD,GAAevX,EAAM,KAAK,CAAC,EAAE,KAAK,MAAM;AAC3C,QAAA2X,EAAY1U,EAAEjD,EAAM,OAAO,CAAC;AAAA,MAC9B,CAAC,IACQ2M,GAAS3M,EAAM,KAAK,KAAKA,EAAM,MAAM,UAC9CwX,EAAKxX,EAAM,KAAK,EAAE,KAAK,MAAM;AAC3B,QAAA2X,EAAY1U,EAAEjD,EAAM,OAAO,CAAC;AAAA,MAC9B,CAAC;AAAA,IAEL;qBAIEyB,GA4BOC,EAAA,QAAA,aAAA;AAAA,MA1BJ,OAAK;AAAA,QAAmB,SAAAkW,EAAa,CAAEC,MAAM5K,EAAQ4K,CAAC,GAAA,CAAA,MAAA,CAAA;AAAA,mBAA+B/S,EAAA2S,CAAA;AAAA,MAAA;AAAA,OAFxF,MA4BO;AAAA,MArBLxW,EAoBM,OAAA;AAAA,QAnBH,OAAK4D,GAAA,CAAA,EAAA,kBAAsBC,EAAA2S,CAAA,EAAA,GAEtB,2CAA2C,CAAA;AAAA,QADhD,WAASxX,EAAA;AAAA,QAET,WAAYgN,GAAO,CAAA,MAAA,CAAA;AAAA,MAAA;QAEpBhM,EAAwB,gBAAfhB,EAAA,KAAK,GAAA,CAAA;AAAA,QAEN6E,EAAA2S,CAAA,UADRlX,EAKEQ,IAAA;AAAA;UAHA,OAAM;AAAA,UACN,MAAK;AAAA,UACL,MAAK;AAAA,QAAA;QAGCd,EAAA,iBADRM,EAMWyG,IAAA;AAAA;UAJT,WAAU;AAAA,UACV,UAAS;AAAA,QAAA;qBAET,MAAiB;AAAA,YAAdd,EAAAhF,EAAA4D,EAAA7B,CAAA,EAAEhD,EAAA,QAAQ,CAAA,GAAA,CAAA;AAAA,UAAA;;;;;;;;;;;;;;;;;;;;;qBChDV6E,EAAAS,EAAA,EAAOtF,EAAA,aAAa,IAef6E,EAAAS,EAAA,EAAOtF,EAAA,aAAa,UAYlCM,EAGEQ,IAAA;AAAA;MADC,MAAMd,EAAA;AAAA,IAAA,0BAfTQ,EAAA,GAAAC,EAYM,OAZNuF,IAYM;AAAA,MARJpF,EAIEE,IAAA;AAAA,QAHC,MAAMd,EAAA;AAAA,QACP,OAAM;AAAA,QACL,MAAMA,EAAA;AAAA,MAAA;MAETgB,EAEM,OAFNsF,IAEMrF,EADDjB,EAAA,aAAa,GAAA,CAAA;AAAA,IAAA,OAzBpBQ,KAAAC,EAcM,OAdNS,IAcM;AAAA,MAVJN,EAIEE,IAAA;AAAA,QAHC,MAAMd,EAAA;AAAA,QACP,OAAM;AAAA,QACL,MAAMA,EAAA;AAAA,MAAA;MAETY,EAIEE,IAAA;AAAA,QAHC,MAAMd,EAAA;AAAA,QACP,OAAM;AAAA,QACL,MAAMA,EAAA;AAAA,MAAA;;;;;;;;;;;AC3Bb,UAAMD,IAAQC,GAaR6X,IAAmB1X,EAAS,MACzByD,EAAY7D,EAAM,KAAK,IAAI,iCAAiC,EACpE;2BAICO,EASQC,IAAA;AAAA,MARL,OAAOP,EAAA;AAAA,MACP,WAASA,EAAA;AAAA,MACV,OAAK4E,GAAA,CAAC,kBACEiT,EAAA,KAAgB,CAAA;AAAA,MACxB,OAAA;AAAA,MACC,MAAM7X,EAAA;AAAA,IAAA;iBAEP,MAAQ;AAAA,QAARwB,GAAQC,EAAA,QAAA,SAAA;AAAA,MAAA;;;;;;;;;;;;;;;;AC5BZ,UAAM1B,IAAQC,GAYR0B,IAAOC,GAKPmW,IAAYjW,EAAI9B,EAAM,OAAO,GAC7BgY,IAAiElW,EAAI,MAAS;AAEpF,WAAAe;AAAA,MACEkV;AAAA,MACA,CAACjV,MAAa;AACZ,QAAIA,IAAW,IACbkV,EAAe,QAAQ,WAAW,MAAMD,EAAU,SAAS,GAAI,IAE/DpW,EAAK,MAAM;AAAA,MAEf;AAAA,MACA,EAAE,WAAW,GAAA;AAAA,IAAK,GAGpB2H,GAAU,MAAM;AACd,MAAAyO,EAAU,QAAQ/X,EAAM;AAAA,IAC1B,CAAC,GAEDiY,GAAY,MAAM;AAChB,mBAAaD,EAAe,KAAK,GACjCA,EAAe,QAAQ;AAAA,IACzB,CAAC,mBAICtX,EASO,QAAA,MAAA;AAAA,MAROT,EAAA,eAAZQ,EAAA,GAAAC,EAAiC,YAAR,GAAC;MAElBT,EAAA,cADRS,EAIO,QAJPuF,IAIO/E,EADHjB,EAAA,KAAK,GAAA,CAAA;MAETgB,EAA4B,gBAAnB8W,EAAA,KAAS,GAAA,CAAA;AAAA,MACN9X,EAAA,eAAZQ,EAAA,GAAAC,EAAiC,YAAR,GAAC;;;ICLxBwX,KAAuBpW,EAAI,oBAAI,KAAiB;AAE/C,SAASqW,GACdC,GACAC,IAA4B,IAC5BC,IAAgF,QAChFC,IAAgE,QAChEC,IAAyB,IACzB;AACA,QAAM,EAAE,cAAAC,GAAc,qBAAAC,GAAqB,4BAAAC,GAA4B,uBAAAC,EAAA,IAA0BC,GAAA,GAE3FC,IAAoBC,GAAA,GACpBC,IAAqClX,EAAA,GACrCmX,IAAoBnX,EAAA,GAEpBoX,IAAsBC,GAAA,GACtBC,IAAiCtX,EAAA,GACjCuX,IAAsBvX,EAAA,GAEtBwX,IAA8BC,GAAA,GAC9BC,IAAyC1X,EAAA,GACzC2X,IAA8B3X,EAAA,GAE9B4X,IAA8BC,GAAA,GAC9BC,IAAyC9X,EAAA,GACzC+X,IAA8B/X,EAAA,GAE9BgY,IAAkCC,GAAA,GAClCC,IAA6ClY,EAAA,GAC7CmY,IAAkCnY,EAAA,GAElCoY,IAA0CC,GAAA,GAC1CC,IAAqDtY,EAAA,GACrDuY,IAA0CvY,EAAA,GAE1CwY,IAA0CC,GAAA,GAC1CC,IAAqD1Y,EAAA,GACrD2Y,IAA0C3Y,EAAA,GAE1C4Y,IAAyBC,GAAA,GACzBC,IAAoC9Y,EAAA,GACpC+Y,IAAyB/Y,EAAA,GAEzBgZ,IAAyBC,GAAA,GACzBC,IAAoClZ,EAAA,GACpCmZ,IAAyBnZ,EAAA,GAEzBoZ,IAA4B,MAAM;AACtC,IAAI5Y,GAAU2W,EAAkB,KAAK,KACnCA,EAAkB,MAAA;AAAA,EAEtB,GAEMkC,IAA8B,CAAC3W,OAAkC;AACrE,IAAIA,GAAM,SAAS4T,KAAQ9V,GAAU+W,EAAoB,KAAK,KAC5DA,EAAoB,MAAM7U,GAAM,QAAQA,GAAM,SAAS;AAAA,EAE3D,GAEM4W,KAAsC,CAAC5W,OAA0C;AACrF,IAAIA,GAAM,SAAS4T,KAAQ9V,GAAUmX,EAA4B,KAAK,KACpEA,EAA4B,MAAA;AAAA,EAEhC,GAEM4B,KAAsC,CAAC7W,OAA0C;AACrF,IAAIA,GAAM,SAAS4T,KAAQ9V,GAAUuX,EAA4B,KAAK,KACpEA,EAA4B,MAAA;AAAA,EAEhC,GAEMyB,KAA0C,CAAC9W,OAA8C;AAC7F,IAAIA,GAAM,SAAS4T,KAAQ9V,GAAU2X,EAAgC,KAAK,KACxEA,EAAgC,MAAMzV,GAAM,QAAQA,GAAM,SAAS;AAAA,EAEvE,GAEM+W,KAAkD,CAAC/W,OAAsD;AAC7G,IAAIA,GAAM,SAAS4T,KAAQ9V,GAAU+X,EAAwC,KAAK,KAChFA,EAAwC,MAAA;AAAA,EAE5C,GAEMmB,KAAkD,CAAChX,OAAsD;AAC7G,IAAIA,GAAM,SAAS4T,KAAQ9V,GAAUmY,EAAwC,KAAK,KAChFA,EAAwC,MAAA;AAAA,EAE5C,GAEMgB,KAAuC,CAACjX,OAAqC;AACjF,IAAIA,GAAM,SAAS4T,KAAQ9V,GAAUuY,EAAuB,KAAK,KAC/DA,EAAuB,MAAA;AAAA,EAE3B,GAEMa,KAAiC,CAAClX,OAA+B;AACrE,IAAIA,GAAM,SAAS4T,KAAQ9V,GAAU2Y,EAAuB,KAAK,KAC/DA,EAAuB,MAAMzW,GAAM,eAAe;AAAA,EAEtD,GAEMmX,KAAyB,CAAC/Q,OAA0D;AACxF,IAAAyO,EAAoB,QAAQzO,IAC5BwO,EAA+B,QAAQF,EAAoB,GAAGiC,CAA2B;AAAA,EAC3F,GAEMS,KAAiC,CAAChR,OAAyB;AAC/D,IAAA6O,EAA4B,QAAQ7O,IACpC4O,EAAuC,QAAQF,EAA4B,GAAG8B,EAAmC;AAAA,EACnH,GAEMS,KAAiC,CAACjR,OAAyB;AAC/D,IAAAiP,EAA4B,QAAQjP,IACpCgP,EAAuC,QAAQF,EAA4B,GAAG2B,EAAmC;AAAA,EACnH,GAEMS,KAAqC,CAAClR,OAA0D;AACpG,IAAAqP,EAAgC,QAAQrP,IACxCoP,EAA2C,QAAQF,EAAgC;AAAA,MACjFwB;AAAA,IAAA;AAAA,EAEJ,GAEMS,KAA6C,CAACnR,OAAyB;AAC3E,IAAAyP,EAAwC,QAAQzP,IAChDwP,EAAmD,QAAQF,EAAwC;AAAA,MACjGqB;AAAA,IAAA;AAAA,EAEJ,GAEMS,KAA6C,CAACpR,OAAyB;AAC3E,IAAA6P,EAAwC,QAAQ7P,IAChD4P,EAAmD,QAAQF,EAAwC;AAAA,MACjGkB;AAAA,IAAA;AAAA,EAEJ,GAEMS,KAA6B,CAACrR,OAAyB;AAC3D,IAAAqO,EAAkB,QAAQrO,IAC1BoO,EAAmC,QAAQF,EAAkB,GAAGoC,CAAyB;AAAA,EAC3F,GAEMgB,KAA4B,CAACtR,OAAyB;AAC1D,IAAAiQ,EAAuB,QAAQjQ,IAC/BgQ,EAAkC,QAAQF,EAAuB,GAAGe,EAAoC;AAAA,EAC1G,GAEMU,KAA4B,CAACvR,OAA6E;AAC9G,IAAAqQ,EAAuB,QAAQrQ,IAC/BoQ,EAAkC,QAAQF,EAAuB,GAAGY,EAA8B;AAAA,EACpG;AAEA,EAAAU,GAAmB,MAAM;AACvB,IAAI5D,MACAlW,GAAU8W,EAA+B,KAAK,KAChDA,EAA+B,MAAA,GAE7B9W,GAAUkX,EAAuC,KAAK,KACxDA,EAAuC,MAAA,GAErClX,GAAUsX,EAAuC,KAAK,KACxDA,EAAuC,MAAA,GAErCtX,GAAU0X,EAA2C,KAAK,KAC5DA,EAA2C,MAAA,GAEzC1X,GAAU8X,EAAmD,KAAK,KACpEA,EAAmD,MAAA,GAEjD9X,GAAUkY,EAAmD,KAAK,KACpEA,EAAmD,MAAA,GAEjDlY,GAAUsY,EAAkC,KAAK,KACnDA,EAAkC,MAAA,GAEhCtY,GAAU0Y,EAAkC,KAAK,KACnDA,EAAkC,MAAA;AAAA,EAEtC,CAAC;AAED,QAAM,EAAE,eAAAjZ,GAAA,IAAkBC,GAAA,GAEpBqa,KAA0B,MAAM;AACpC,IAAI,CAACta,GAAc,MAAM,WAAW8B,EAAY4U,EAAa,KAAK,KAClEA,EAAa,MAAM,KAAK,2BAA2BL,GAAM,CAACkE,OAAqC;AAC7F,MAAA5D,EAAoB,IAAIN,GAAMkE,GAAS,IAAI;AAAA,IAC7C,CAAC;AAAA,EACH,GAEMC,KAA4B,MAAM;AACtC,IAAI,CAACxa,GAAc,MAAM,WAAW8B,EAAY4U,EAAa,KAAK,KAClEA,EAAa,MAAM,KAAK,6BAA6BL,GAAM,CAACkE,OAAqC;AAC/F,MAAA5D,EAAoB,IAAIN,GAAMkE,GAAS,IAAI;AAAA,IAC7C,CAAC;AAAA,EACH,GAEME,KAAiB,OAAOpa,KAAsC,OAC3D,IAAI,QAAQ,CAACqa,IAASC,OAAW;AACtC,QAAI,CAAC3a,GAAc,MAAM,WAAW8B,EAAY4U,EAAa,KAAK,EAAG,QAAOiE,GAAOC,GAAuB,MAAM;AAChH,IAAAlE,EAAa,OACT,QAAQ,GAAI,EACb,KAAK,kBAAkBL,GAAMhW,IAAS,CAACyG,IAAOyT,OACzCzT,KACK,KAAK6T,GAAOC,GAAuB,MAAM,IAE9CC,GAAkCN,EAAQ,KAC5C5D,EAAoB,IAAIN,GAAMkE,GAAS,IAAI,GACpC,KAAKG,GAAQH,GAAS,MAAM,KAE9B,KAAKI,GAAOJ,GAAS,MAAM,CACnC;AAAA,EACL,CAAC,GAGGO,KAAkB,MAAM;AAC5B,IAAI,CAAC9a,GAAc,MAAM,WAAW8B,EAAY4U,EAAa,KAAK,KAClEA,EAAa,MAAM,KAAK,mBAAmBL,GAAM,CAACkE,OAA4C;AAC5F,MAAIM,GAAkCN,EAAQ,KAC5C5D,EAAoB,IAAIN,GAAMkE,GAAS,IAAI;AAAA,IAE/C,CAAC;AAAA,EACH,GAEMQ,KAAoB,MAAM;AAC9B,IAAI,CAAC/a,GAAc,MAAM,WAAW8B,EAAY4U,EAAa,KAAK,KAClEA,EAAa,OAAO,KAAK,qBAAqBL,CAAI;AAAA,EACpD,GAEM2E,KAA0B,MACvB,IAAI,QAAQ,CAACN,IAASC,OAAW;AACtC,QAAI,CAAC3a,GAAc,MAAM,WAAW8B,EAAY4U,EAAa,KAAK;AAChE,aAAOiE,GAAOM,GAA0B,MAAM;AAEhD,IAAAvE,EAAa,OACT,QAAQ,GAAI,EACb,KAAK,iBAAiBL,IAAM,oBAAI,KAAA,GAAO,QAAA,GAAW,CAACvP,IAAOyT,OACrDzT,KACK,KAAK6T,GAAOM,GAA0B,MAAM,IAEjDV,GAAS,WAAWU,GAA0B,KACzC,KAAKP,GAAQH,GAAS,MAAM,IAE9B,KAAKI,GAAOJ,GAAS,MAAM,CACnC;AAAA,EACL,CAAC,GAGGW,KAAiC,CAACC,OAAmB;AACzD,IAAI,CAACnb,GAAc,MAAM,WAAW8B,EAAY4U,EAAa,KAAK,KAClEA,EAAa,MAAM,KAAK,wBAAwBL,GAAM8E,EAAM;AAAA,EAC9D,GAEMC,KAAgC,CAACD,OAAmB;AACxD,IAAI,CAACnb,GAAc,MAAM,WAAW8B,EAAY4U,EAAa,KAAK,KAClEA,EAAa,MAAM,KAAK,uBAAuBL,GAAM8E,EAAM;AAAA,EAC7D,GAEME,KAA0B,YACvB,IAAI,QAAQ,CAACX,IAASC,OAAW;AACtC,QAAI,CAAC3a,GAAc,MAAM,WAAW8B,EAAY4U,EAAa,KAAK;AAChE,aAAOiE,GAAOW,GAAoC,MAAM;AAE1D,IAAA5E,EAAa,OACT,QAAQ,GAAI,EACb;AAAA,MACC;AAAA,MACAL;AAAA,OACA,oBAAI,KAAA,GAAO,QAAA;AAAA,MACX,CAACvP,IAAOyT,OACFzT,KACK,KAAK6T,GAAOW,GAAoC,MAAM,IAE3Df,GAAS,WAAWe,GAAoC,KACnD,KAAKZ,GAAQH,GAAS,MAAM,IAE9B,KAAKI,GAAOJ,GAAS,MAAM;AAAA,IACpC;AAAA,EAEN,CAAC,GAGGgB,KAAiC,MAAM;AAC3C,IAAI,CAACvb,GAAc,MAAM,WAAW8B,EAAY4U,EAAa,KAAK,KAClEA,EAAa,MAAM,KAAK,kCAAkCL,CAAI;AAAA,EAChE,GAEMmF,KAAgC,MAAM;AAC1C,IAAI,CAACxb,GAAc,MAAM,WAAW8B,EAAY4U,EAAa,KAAK,KAClEA,EAAa,MAAM,KAAK,iCAAiCL,CAAI;AAAA,EAC/D,GAEMoF,KAAmB,CAACN,OAAmB;AAC3C,IAAI,CAACnb,GAAc,MAAM,WAAW8B,EAAY4U,EAAa,KAAK,KAClEA,EAAa,MAAM,KAAK,oBAAoBL,GAAM8E,EAAM;AAAA,EAC1D,GAEMO,KAAY,MAAM;AACtB,IAAI,CAAC1b,GAAc,MAAM,WAAW8B,EAAY4U,EAAa,KAAK,KAClEA,EAAa,MAAM,KAAK,aAAaL,CAAI;AAAA,EAC3C,GAEMsF,KAAqB,CAACR,OAAmB;AAC7C,IAAI,CAACnb,GAAc,MAAM,WAAW8B,EAAY4U,EAAa,KAAK,KAClEA,EAAa,MAAM,KAAK,sBAAsBL,GAAM8E,EAAM;AAAA,EAC5D,GAEMS,KAA8B,OAAuB;AAAA,IACzD,MAAM;AAAA,IACN,QAAQC,GAAa;AAAA,IACrB,OAAO,CAAA;AAAA,IACP,WAAW;AAAA,IACX,SAAS,CAAA;AAAA,EAAC,IAGNC,KAAgB,OAAOzF,OAA8C;AACzE,UAAM0F,KAA+BH,GAAA;AAErC,WAAO,IAAI,QAAQ,CAAClB,OAAY;AAC9B,UAAI,CAAC1a,GAAc,MAAM,WAAW8B,EAAY4U,EAAa,KAAK,EAAG,QAAOgE,GAAQqB,EAAY;AAChG,MAAArF,EAAa,OAAO,QAAQ,GAAG,EAAE,KAAK,kBAAkB,CAACL,EAAI,GAAG,CAACvP,IAAOyT,OAA8B;AACpG,YAAIzT,GAAO,QAAO,KAAK4T,GAAQqB,EAAY;AAC3C,cAAMC,KAAWzB,GAASlE,EAAI;AAC9B,eAAIvU,EAAYka,EAAQ,KAAGtB,GAAQqB,EAAY,GAC1Cja,EAAYyU,CAAgB,KAAGA,EAAiByF,GAAS,KAAK,GAC9Dla,EAAY0U,CAAgB,KAAGA,EAAA,GAE7BkE,GAAQsB,EAAQ;AAAA,MACzB,CAAC;AAAA,IACH,CAAC;AAAA,EACH,GAEMC,KAAiB5d,EAAS,MACvBsY,EAAoB,IAAIN,CAAI,KAAKuF,GAAA,CACzC;AAED,EAAItF,KACFxV;AAAA,IACEmb;AAAA,IACA,CAAClb,OAAa;AACZ,MAAIA,GAAS,MAAM,WACZe,EAAYyU,CAAgB,KAAGA,EAAiBxV,GAAS,KAAK,GAC9De,EAAY0U,CAAgB,KAAGA,EAAA;AAAA,IAExC;AAAA,IACA,EAAE,WAAW,GAAA;AAAA,EAAK;AAItB,QAAM0F,KAAkB7d,EAAS,MACxBwY,EAAsB,IAAIR,CAAI,yBAAS,IAAA,CAC/C;AAED,SAAO;AAAA,IACL,yBAAAiE;AAAA,IACA,2BAAAE;AAAA,IACA,gBAAAC;AAAA,IACA,iBAAAK;AAAA,IACA,yBAAAE;AAAA,IACA,gCAAAE;AAAA,IACA,+BAAAE;AAAA,IACA,wBAAAxB;AAAA,IACA,4BAAAM;AAAA,IACA,gCAAAL;AAAA,IACA,gCAAAC;AAAA,IACA,yBAAAuB;AAAA,IACA,gCAAAE;AAAA,IACA,+BAAAC;AAAA,IACA,oCAAAzB;AAAA,IACA,4CAAAC;AAAA,IACA,4CAAAC;AAAA,IACA,mBAAAc;AAAA,IACA,kBAAAU;AAAA,IACA,WAAAC;AAAA,IACA,oBAAAC;AAAA,IACA,2BAAAxB;AAAA,IACA,2BAAAC;AAAA,IACA,eAAA0B;AAAA,IACA,gBAAAG;AAAA,IACA,iBAAAC;AAAA,IACA,4BAAAtF;AAAA,IACA,sBAAAT;AAAA,IACA,gCAAAkB;AAAA,IACA,wCAAAI;AAAA,IACA,wCAAAI;AAAA,IACA,4CAAAI;AAAA,IACA,oDAAAI;AAAA,IACA,oDAAAI;AAAA,IACA,mCAAAI;AAAA,IACA,mCAAAI;AAAA,EAAA;AAEJ;;;;;;;;;;;;;;AChaA,UAAMhb,IAAQC,GAmBR0B,IAAOC,GAIP;AAAA,MACJ,gBAAAoc;AAAA,MACA,wBAAArC;AAAA,MACA,yBAAAoB;AAAA,MACA,gCAAAE;AAAA,MACA,+BAAAE;AAAA,MACA,gCAAAvB;AAAA,MACA,gCAAAC;AAAA,MACA,yBAAAuB;AAAA,MACA,gCAAAE;AAAA,MACA,+BAAAC;AAAA,MACA,oCAAAzB;AAAA,MACA,4CAAAC;AAAA,MACA,4CAAAC;AAAA,MACA,kBAAAwB;AAAA,MACA,WAAAC;AAAA,MACA,oBAAAC;AAAA,MACA,sBAAAxF;AAAA;AAAA,IAAA,IAEEC,GAAcnY,EAAM,UAAU,GAE5B,EAAE,GAAAiD,EAAA,IAAM/C,EAAA,GACR,EAAE,YAAAge,GAAY,cAAAC,EAAA,IAAiBzV,GAAA,GAE/B,EAAE,eAAA8H,EAAA,IAAkB4N,GAAA,GAEpBC,IAA0Bvc,EAA4B,EAAE,GACxDwc,IAAsBxc,EAAoB,EAAE,GAC5Cyc,IAAgBne,EAAyB,MACtC4d,EAAe,MAAM,MAAM,OAAO,CAACd,OAAWA,OAAW1M,EAAc,KAAK,CACpF,GACKgO,IAA4B1c,EAAI,EAAK,GACrC2c,IAAqC3c,EAAI,EAAK,GAC9C4c,IAAoB5c,EAAiC,IAAI,GACzD6c,IAAwB7c,EAAoB,IAAI,GAChD8c,IAAqB9c,EAAI,EAAK;AAEpC,IAAA6Z,EAAuB,OAAOuB,IAAsB2B,OAAsB;AACxE,MAAIvc,GAAUtC,EAAM,gBAAgB,KAAGA,EAAM,iBAAiBkd,EAAM,GAChE5a,GAAUtC,EAAM,gBAAgB,OAAS,iBAAA,GACxCse,EAAoB,MAAM,SAASpB,EAAM,KAAGoB,EAAoB,MAAM,KAAKpB,EAAM,GACtFmB,EAAwB,MAAM,KAAK,EAAE,QAAAnB,IAAQ,WAAA2B,IAAW;AAAA,IAC1D,CAAC,GAEDjD,EAA+B,MAAM;AACnC,MAAAuC,EAAa,yCAAyC,GACtDS,EAAmB,QAAQ,IAC3BD,EAAsB,QAAQ,IAC9BzG,EAAqB,MAAM,OAAOlY,EAAM,UAAU;AAAA,IACpD,CAAC,GAED6b,EAA+B,MAAM;AACnC,MAAAqC,EAAW,yCAAyC,GACpDU,EAAmB,QAAQ,IAC3BD,EAAsB,QAAQ,IAC9BzG,EAAqB,MAAM,OAAOlY,EAAM,UAAU;AAAA,IACpD,CAAC,GAED8b,EAAmC,OAAOoB,IAAgB2B,OAAsB;AAC9E,MAAIvc,GAAUtC,EAAM,gBAAgB,KAAGA,EAAM,iBAAiBkd,EAAM,GAChE5a,GAAUtC,EAAM,gBAAgB,OAAS,iBAAA,GAC7C0e,EAAkB,QAAQ,EAAE,QAAAxB,IAAQ,WAAA2B,GAAA,GACpCJ,EAAmC,QAAQ;AAAA,IAC7C,CAAC,GAED1C,EAA2C,MAAM;AAC/C,MAAAoC,EAAa,8CAA8C,GAC3DS,EAAmB,QAAQ;AAAA,IAC7B,CAAC,GAED5C,EAA2C,MAAM;AAC/C,MAAAkC,EAAW,8CAA8C,GACzDU,EAAmB,QAAQ;AAAA,IAC7B,CAAC;AAED,UAAME,IAA8B,MAAM;AACxC,MAAAF,EAAmB,QAAQ;AAAA,IAC7B,GAEMG,IAAgC3e,EAAS,MAE3Cue,EAAsB,UAAU,QAChCX,EAAe,MAAM,MAAM,UAC3B,CAACA,EAAe,MAAM,MAAM,SAASxN,EAAc,SAAS,CAAC,KAC7D,CAACoO,EAAmB,KAEvB,GAEKI,IAAoC5e,EAAS,MAE/CJ,EAAM,UACNge,EAAe,MAAM,WAAWJ,GAAa,UAC7CI,EAAe,MAAM,cAAcxN,EAAc,KAEpD,GAEKyO,IAAgC7e,EAAS,MACtCoe,EAA0B,SAASR,EAAe,MAAM,WAAWJ,GAAa,MACxF,GAEKsB,IAAyB9e,EAAS,MAC/BJ,EAAM,UAAUge,EAAe,MAAM,WAAWJ,GAAa,MACrE,GAEKuB,KAAgC/e,EAAS,MAE3CJ,EAAM,UACNge,EAAe,MAAM,cAAcxN,EAAc,SACjDwN,EAAe,MAAM,WAAWJ,GAAa,MAEhD,GAEKwB,KAA8Bhf,EAAS,MACpC,CAACJ,EAAM,UAAUkY,EAAqB,MAAM,IAAIlY,EAAM,UAAU,KAAK2e,EAAsB,UAAU,IAC7G,GAEKU,KAAcjf,EAAS,MACpB4d,EAAe,MAAM,MAAM,OAAO,CAACvN,OAASA,OAASuN,EAAe,MAAM,SAAS,CAC3F,GAEKsB,KAA+B,CAACpC,OAAmB;AACvD,MAAAmB,EAAwB,QAAQA,EAAwB,MAAM,OAAO,CAACkB,OAAYA,GAAQ,WAAWrC,EAAM,GAC3GoB,EAAoB,QAAQA,EAAoB,MAAM,OAAO,CAACzJ,OAAOA,OAAOqI,EAAM;AAAA,IACpF,GAEMsC,KAAgC,YAAY;AAChD,UAAI;AACF,cAAMzC,EAAA,GACN6B,EAAmB,QAAQ;AAAA,MAC7B,SAAS/V,IAAO;AACd,eAAIA,OAAUmU,GAA0B,mBAC/B,KAAKkB,EAAW,4CAA4C,IAE9D,KAAKA,EAAW,2CAA2C;AAAA,MACpE;AAAA,IACF,GAEMuB,KAAsC,MAAM;AAChD,MAAAjB,EAA0B,QAAQ;AAAA,IACpC,GAEMkB,KAAgC,YAAY;AAChD,UAAI;AACF,cAAMtC,EAAA,GACNwB,EAAmB,QAAQ;AAAA,MAC7B,SAAS/V,IAAO;AACd,eAAIA,OAAUwU,GAAoC,mBACzC,KAAKa,EAAW,sDAAsD,IAExE,KAAKA,EAAW,mDAAmD;AAAA,MAC5E;AAAA,IACF,GAEMyB,KAA8B,MAAM;AACxC,MAAArB,EAAoB,MAAM,QAAQ,CAACsB,OAAe;AAChD,QAAA3C,EAA+B2C,EAAU;AAAA,MAC3C,CAAC,GACDvB,EAAwB,QAAQA,EAAwB,MAAM;AAAA,QAC5D,CAACkB,OAAY,CAACjB,EAAoB,MAAM,SAASiB,GAAQ,MAAM;AAAA,MAAA,GAEjEjB,EAAoB,QAAQ,CAAA,GAC5B3c,EAAK,iCAAiC;AAAA,IACxC,GAEMke,KAA6B,MAAM;AACvC,MAAAvB,EAAoB,MAAM,QAAQ,CAACsB,OAAe;AAChD,QAAAzC,EAA8ByC,EAAU;AAAA,MAC1C,CAAC,GACDvB,EAAwB,QAAQA,EAAwB,MAAM;AAAA,QAC5D,CAACkB,OAAY,CAACjB,EAAoB,MAAM,SAASiB,GAAQ,MAAM;AAAA,MAAA,GAEjEjB,EAAoB,QAAQ,CAAA;AAAA,IAC9B,GAEMwB,KAA+B,MAAM;AACzC,MAAApB,EAAkB,QAAQ,MAC1BD,EAAmC,QAAQ;AAAA,IAC7C,GAEMsB,KAAsC,MAAM;AAChD,MAAAxC,EAAA,GACAuC,GAAA;AAAA,IACF,GAEME,KAAuC,MAAM;AACjD,MAAA1C,EAAA,GACAwC,GAAA;AAAA,IACF,GAEMG,KAA2B,CAAC/C,OAAyB;AACzD,MAAAQ,EAAmBR,EAAM,GACzBsB,EAA0B,QAAQ;AAAA,IACpC,GAEM0B,KAAiB,CAAChD,OAAyB;AAC/C,MAAAM,EAAiBN,EAAM,GACvBsB,EAA0B,QAAQ;AAAA,IACpC,GAEM2B,KAAkB,MAAM;AAC5B,MAAA1C,EAAA;AAAA,IACF,GAEM2C,KAAqB,MAAM;AAC/B,MAAA5C,EAAiBhN,EAAc,SAAS,CAAC;AAAA,IAC3C,GAEM6P,KAA0B,CAACxB,OACxB,KAAK,MAAM,QAAS,oBAAI,QAAO,QAAA,IAAYA,OAAc,GAAI;;;kBAKpEne,EA6RM,OAAA,MAAA;AAAA,QA3RIoE,EAAAkZ,CAAA,EAAe,kBADvBzd,EAMEmE,IAAA;AAAA,UAJC,IAAII,EAAAkZ,CAAA,EAAe;AAAA,UACnB,KAAKlZ,EAAAkZ,CAAA,EAAe;AAAA,UACpB,OAAO/d,EAAA;AAAA,UACR,gBAAA;AAAA,QAAA;QAEFY,EAIEyf,IAAA;AAAA,UAHA,OAAM;AAAA,UACN,OAAA,EAAA,QAAA,OAAA;AAAA,UACA,UAAA;AAAA,QAAA;gBAEF5f,EAME0F,IAAA,MAAAC,GALiBgZ,GAAA,OAAW,CAArBnC,aADT3c,EAMEmE,IAAA;AAAA,UAJC,IAAIwY;AAAA,UACJ,KAAKA;AAAA,UACL,OAAOjd,EAAA;AAAA,UACR,OAAM;AAAA,QAAA;QAGAof,GAAA,MAAY,SAAM,UAD1B9e,EAKE+f,IAAA;AAAA;UAHA,OAAM;AAAA,UACN,OAAA,EAAA,QAAA,OAAA;AAAA,UACA,UAAA;AAAA,QAAA;QAGMvB,EAAA,cADRxe,EAMgBggB,IAAA;AAAA;UAJd,MAAK;AAAA,UACJ,SAAOf;AAAA,QAAA;qBAER,MAA6C;AAAA,gBAA1C1a,EAAA7B,CAAA,EAAC,oCAAA,CAAA,GAAA,CAAA;AAAA,UAAA;;;QAGE2b,EAAA,cADRre,EAcO+F,IAAA;AAAA;UAZL,MAAK;AAAA,UACL,SAAQ;AAAA,QAAA;qBAER,MAGE;AAAA,YAHFzF,EAGEE,IAAA;AAAA,cAFA,OAAM;AAAA,cACN,MAAK;AAAA,YAAA;cACL,MACFG,EAAG4D,EAAA7B,CAAA,EAAC,iCAAA,CAAA,IAAsC,KAC1C,CAAA;AAAA,YAAApC,EAGE2f,IAAA;AAAA,cAFA,aAAA;AAAA,cACC,QAAM1B;AAAA,YAAA;;;;QAIHK,GAAA,cADR5e,EAWWkgB,IAAA;AAAA;UATT,MAAK;AAAA,UACJ,SAAOhB;AAAA,QAAA;qBAER,MAA4C;AAAA,YAA5C5e,EAA4CE,IAAA,EAArC,MAAK,+BAA6B;AAAA,YACzCF,EAIEmG,IAAA;AAAA,cAHA,QAAO;AAAA,cACP,WAAU;AAAA,cACT,MAAMlC,EAAA7B,CAAA,EAAC,mCAAA;AAAA,YAAA;;;;QAIJob,EAAA,MAAwB,eADhC9d,EA2DUwI,IAAA;AAAA;UAzDP,eAAa;AAAA,UACd,OAAM;AAAA,QAAA;qBAEN,MAqDQ;AAAA,YArDKsV,EAAA,MAAwB,eAArC9d,EAqDQgB,IAAA,EAAA,KAAA,KAAA;AAAA,yBApDN,MAEiB;AAAA,gBAFjBV,EAEiBmI,IAAA,MAAA;AAAA,6BADf,MAAiD;AAAA,wBAA9ClE,EAAA7B,CAAA,EAAC,wCAAA,CAAA,GAAA,CAAA;AAAA,kBAAA;;;gBAENpC,EAiCY6f,IAAA,MAAA;AAAA,6BAhCV,MA+BQ;AAAA,oBA/BR7f,EA+BQqG,IAAA;AAAA,sBA9BE,UAAUoX,EAAA;AAAA,qEAAAA,EAAmB,QAAA7Z;AAAA,sBACrC,mBAAgB;AAAA,oBAAA;iCAGd,MAA0C;AAAA,gCAD5C/D,EA0BY0F,IAAA,MAAAC,GAzBQgY,EAAA,OAAuB,CAAlCkB,aADThf,EA0BY4G,IAAA;AAAA,0BAxBT,KAAKoY,GAAQ;AAAA,0BACb,OAAOA,GAAQ;AAAA,wBAAA;0BAEL,WACT,MAGE;AAAA,4BAHF1e,EAGE6D,IAAA;AAAA,8BAFC,IAAI6a,GAAQ;AAAA,8BACZ,OAAOtf,EAAA;AAAA,4BAAA;;0BAGD,SACT,MAKE;AAAA,4BALFY,EAKE2f,IAAA;AAAA,8BAJA,OAAM;AAAA,8BACL,SAASH,GAAwBd,GAAQ,SAAS;AAAA,8BAClD,OAAOza,EAAA7B,CAAA,EAAC,sCAAA;AAAA,8BACR,QAAI,MAAQqc,GAA6BC,GAAQ,MAAM;AAAA,4BAAA;;0BAGjD,QAAM3e,EACf,CAIE,EALiB,UAAA+f,IAAU,QAAAC,SAAM;AAAA,4BACnC/f,EAIE6R,IAAA;AAAA,8BAHC,eAAaiO;AAAA,8BACd,OAAM;AAAA,8BACL,SAAK,MAAQC,GAAOD,EAAQ;AAAA,4BAAA;;;;;;;;;;gBAMvC9f,EAceqI,IAAA,MAAA;AAAA,6BAbb,MAAW;AAAA,oBAAXrI,EAAWsI,EAAA;AAAA,oBACXtI,EAKeuI,IAAA;AAAA,sBAJZ,UAAQ,CAAGkV,EAAA,MAAoB;AAAA,sBAC/B,SAAOuB;AAAA,oBAAA;iCAER,MAAsC;AAAA,4BAAnC/a,EAAA7B,CAAA,EAAC,6BAAA,CAAA,GAAA,CAAA;AAAA,sBAAA;;;oBAENpC,EAKciI,IAAA;AAAA,sBAJX,UAAQ,CAAGwV,EAAA,MAAoB,UAAUre,EAAA;AAAA,sBACzC,WAAY0f,IAA2B,CAAA,MAAA,CAAA;AAAA,oBAAA;iCAExC,MAAsC;AAAA,4BAAnC7a,EAAA7B,CAAA,EAAC,6BAAA,CAAA,GAAA,CAAA;AAAA,sBAAA;;;;;;;;;;;;QAKZpC,EA+CUkI,IAAA;AAAA,sBA9CCkW,EAAA;AAAA,2DAAAA,EAA6B,QAAAxa;AAAA,UACtC,OAAM;AAAA,QAAA;qBAEN,MA0CQ;AAAA,YA1CR5D,EA0CQU,IAAA,MAAA;AAAA,yBAzCN,MAEiB;AAAA,gBAFjBV,EAEiBmI,IAAA;AAAA,kBAFA,sCAAWwV,EAAA,QAAyB;AAAA,gBAAA;6BACnD,MAA4C;AAAA,wBAAzC1Z,EAAA7B,CAAA,EAAC,mCAAA,CAAA,GAAA,CAAA;AAAA,kBAAA;;;gBAENpC,EA+BY6f,IAAA,MAAA;AAAA,6BA9BV,MA6BQ;AAAA,oBA7BR7f,EA6BQqG,IAAA,MAAA;AAAA,iCA3BJ,MAA+B;AAAA,gCADjCxG,EA2BY0F,IAAA,MAAAC,GA1BOkY,EAAA,OAAa,CAAvBrB,aADT3c,EA2BY4G,IAAA;AAAA,0BAzBT,KAAK+V;AAAA,0BACL,MAAM;AAAA,wBAAA;0BAEI,SACT,MAGE;AAAA,4BAHFrc,EAGE6D,IAAA;AAAA,8BAFC,IAAIwY;AAAA,8BACJ,OAAOjd,EAAA;AAAA,4BAAA;;0BAGD,UACT,MAaM;AAAA,4BAbNgB,EAaM,OAbNE,IAaM;AAAA,8BAZJN,EAKgB0f,IAAA;AAAA,gCAJd,MAAK;AAAA,gCACJ,SAAK,CAAA9b,OAAEwb,GAAyB/C,EAAM;AAAA,8BAAA;2CAEvC,MAAkD;AAAA,sCAA/CpY,EAAA7B,CAAA,EAAC,yCAAA,CAAA,GAAA,CAAA;AAAA,gCAAA;;;8BAENpC,EAKeuI,IAAA;AAAA,gCAJb,MAAK;AAAA,gCACJ,SAAK,CAAA3E,OAAEyb,GAAehD,EAAM;AAAA,8BAAA;2CAE7B,MAAwC;AAAA,sCAArCpY,EAAA7B,CAAA,EAAC,+BAAA,CAAA,GAAA,CAAA;AAAA,gCAAA;;;;;;;;;;;;;gBAOhBpC,EAKeqI,IAAA,MAAA;AAAA,6BAJb,MAAW;AAAA,oBAAXrI,EAAWsI,EAAA;AAAA,oBACXtI,EAEeuI,IAAA;AAAA,sBAFA,mCAAOoV,EAAA,QAAyB;AAAA,oBAAA;iCAC7C,MAA8B;AAAA,4BAA3B1Z,EAAA7B,CAAA,EAAC,qBAAA,CAAA,GAAA,CAAA;AAAA,sBAAA;;;;;;;;;;;;QAMJ+b,EAAA,cADRze,EAWWkgB,IAAA;AAAA;UATT,MAAK;AAAA,UACJ,SAAOf;AAAA,QAAA;qBAER,MAAmC;AAAA,YAAnC7e,EAAmCE,IAAA,EAA5B,MAAK,sBAAoB;AAAA,YAChCF,EAIEmG,IAAA;AAAA,cAHA,QAAO;AAAA,cACP,WAAU;AAAA,cACT,MAAMlC,EAAA7B,CAAA,EAAC,uCAAA;AAAA,YAAA;;;;QAIJic,EAAA,cADR3e,EAMe6I,IAAA;AAAA;UAJb,MAAK;AAAA,UACJ,SAAOgX;AAAA,QAAA;qBAER,MAA4C;AAAA,gBAAzCtb,EAAA7B,CAAA,EAAC,mCAAA,CAAA,GAAA,CAAA;AAAA,UAAA;;;QAEOhD,EAAA,6BAAbM,EAgBQ0G,IAAA,EAAA,KAAA,KAAA;AAAA,UAfK,WAASrG,EAClB,CAME,EAAA,OAP2BigB,SAAS;AAAA,YACtCxf,GAAAR,EAMEyF,IANFuM,GAME;AAAA,cAJA,SAAQ;AAAA,cACR,MAAK;AAAA,cACL,MAAK;AAAA,YAAA,GACGgO,EAAS,GAAA,MAAA,EAAA,GAAA;AAAA,mBAJN/b,EAAA7B,CAAA,EAAC,2BAAA,CAAA;AAAA,YAAA;;qBAOhB,MAKQ;AAAA,YALRpC,EAKQqG,IAAA,MAAA;AAAA,yBAJN,MAGE;AAAA,gBAHFrG,EAGEsG,IAAA;AAAA,kBAFC,OAAOrC,EAAA7B,CAAA,EAAC,sCAAA;AAAA,kBACR,WAAYkd,IAAe,CAAA,MAAA,CAAA;AAAA,gBAAA;;;;;;;QAK1BzB,EAAA,cADRne,EA0CUwI,IAAA;AAAA;sBAxCC0V,EAAA;AAAA,2DAAAA,EAAkC,QAAAha;AAAA,UAC3C,OAAM;AAAA,QAAA;qBAEN,MAoCQ;AAAA,YApCR5D,EAoCQU,IAAA,MAAA;AAAA,yBAnCN,MAEiB;AAAA,gBAFjBV,EAEiBmI,IAAA,MAAA;AAAA,6BADf,MAAyD;AAAA,wBAAtDlE,EAAA7B,CAAA,EAAC,gDAAA,CAAA,GAAA,CAAA;AAAA,kBAAA;;;gBAENpC,EAcY6f,IAAA,MAAA;AAAA,6BAbV,MAYQ;AAAA,oBAZR7f,EAYQqG,IAAA,MAAA;AAAA,iCAXN,MAUY;AAAA,wBAVZrG,EAUYsG,IAAA,MAAA;AAAA,0BATC,WACT,MAGE;AAAA,4BAHFtG,EAGE6D,IAAA;AAAA,8BAFC,IAAIga,EAAA,MAAkB;AAAA,8BACtB,OAAOze,EAAA;AAAA,4BAAA;;0BAGD,SACT,MAA8E;AAAA,4BAA9EgB,EAA8E,QAA9EgF,IAA8E/E,EAAxD4D,EAAA7B,CAAA,EAAC,2CAAA,CAAA,GAAA,CAAA;AAAA,0BAAA;;;;;;;;;gBAK/BpC,EAgBeqI,IAAA,MAAA;AAAA,6BAfb,MAAW;AAAA,oBAAXrI,EAAWsI,EAAA;AAAA,oBACXtI,EAEeuI,IAAA,EAFA,SAAO2W,MAAmC;AAAA,iCACvD,MAAsC;AAAA,4BAAnCjb,EAAA7B,CAAA,EAAC,6BAAA,CAAA,GAAA,CAAA;AAAA,sBAAA;;;oBAENpC,EAUciI,IAAA;AAAA,sBATX,UAAU7I,EAAA;AAAA,sBACV,WAAY+f,IAAoC,CAAA,MAAA,CAAA;AAAA,oBAAA;iCAEjD,MAAsC;AAAA,wBAAnC9Z,EAAAhF,EAAA4D,EAAA7B,CAAA,oCAAmC,KACtC,CAAA;AAAA,wBAAApC,EAIE2f,IAAA;AAAA,0BAHA,aAAA;AAAA,0BACC,SAASH,GAAwB3B,EAAA,MAAkB,SAAS;AAAA,0BAC5D,QAAMoB;AAAA,wBAAA;;;;;;;;;;;;;QAOTV,GAAA,cADR7e,EAqCUwI,IAAA;AAAA;UAnCP,eAAa;AAAA,UACd,OAAM;AAAA,QAAA;qBAEN,MA+BQ;AAAA,YA/BRlI,EA+BQU,IAAA,MAAA;AAAA,yBA9BN,MAEiB;AAAA,gBAFjBV,EAEiBmI,IAAA;AAAA,kBAFA,sCAAWlE,EAAAoT,CAAA,EAAqB,OAAOlY,EAAM,UAAU;AAAA,gBAAA;6BACtE,MAA4C;AAAA,wBAAzC8E,EAAA7B,CAAA,EAAC,mCAAA,CAAA,GAAA,CAAA;AAAA,kBAAA;;;gBAENpC,EAAkEoI,IAAA,MAAA;AAAA,6BAAvD,MAA2C;AAAA,wBAAxCnE,EAAA7B,CAAA,EAAC,kCAAA,CAAA,GAAA,CAAA;AAAA,kBAAA;;;gBACfpC,EAyBeqI,IAAA,MAAA;AAAA,6BAxBb,MAAW;AAAA,oBAAXrI,EAAWsI,EAAA;AAAA,oBACXtI,EAEeuI,IAAA;AAAA,sBAFA,mCAAOtE,EAAAoT,CAAA,EAAqB,OAAOlY,EAAM,UAAU;AAAA,oBAAA;iCAChE,MAA8B;AAAA,4BAA3B8E,EAAA7B,CAAA,EAAC,qBAAA,CAAA,GAAA,CAAA;AAAA,sBAAA;;;oBAGE8b,EAAA,cADRxe,EAKcuI,IAAA;AAAA;sBAHX,SAAO0W;AAAA,oBAAA;iCAER,MAA6C;AAAA,4BAA1C1a,EAAA7B,CAAA,EAAC,oCAAA,CAAA,GAAA,CAAA;AAAA,sBAAA;;;oBAGE2b,EAAA,cADRre,EAaO+F,IAAA;AAAA;sBAXL,SAAQ;AAAA,oBAAA;iCAER,MAGE;AAAA,wBAHFzF,EAGEE,IAAA;AAAA,0BAFA,OAAM;AAAA,0BACN,MAAK;AAAA,wBAAA;0BACL,MACFG,EAAG4D,EAAA7B,CAAA,EAAC,iCAAA,CAAA,IAAsC,KAC1C,CAAA;AAAA,wBAAApC,EAGE2f,IAAA;AAAA,0BAFA,aAAA;AAAA,0BACC,QAAM1B;AAAA,wBAAA;;;;;;;;;;;;;;;;;;;;;;;;;;AClgBrB,UAAM,EAAE,GAAA7b,EAAA,IAAM/C,EAAA;;MAKHD,EAAA,kCADTM,EAKOqJ,IAAA;AAAA;QAHJ,OAAO9E,EAAA7B,CAAA,EAAC,+BAAA;AAAA,MAAA;mBAET,MAAyC;AAAA,UAAzCpC,EAAyCigB,IAAA;AAAA,YAA7B,aAAW7gB,EAAA,KAAK;AAAA,UAAA;;;;MAGrBA,EAAA,mCADTM,EAKOqJ,IAAA;AAAA;QAHJ,OAAO9E,EAAA7B,CAAA,EAAC,gCAAA;AAAA,MAAA;mBAET,MAA0C;AAAA,UAA1CpC,EAA0CigB,IAAA;AAAA,YAA9B,aAAW7gB,EAAA,KAAK;AAAA,UAAA;;;;;;;;;;;;;;;;;ACjChC,UAAMD,IAAQC,GAmBR,EAAE,EAAA,IAAMC,EAAA,GAER6gB,IAAmB3gB,EAAS,MAAM;AACtC,UAAIyD,CAAAA,EAAY7D,EAAM,SAAS;AAG/B,eAAK6D,EAAY7D,EAAM,WAAW,IAG3B,EAAE,MAAMA,EAAM,UAAA,IAFZ,EAAE,MAAMA,EAAM,WAAW,QAAQ,EAAE,GAAGA,EAAM,cAAY;AAAA,IAGnE,CAAC;2BAICO,EAkBO+F,IAAA;AAAA,MAjBJ,UAAOrG,EAAA,WAAW;AAAA,MAClB,WAASA,EAAA;AAAA,MACT,IAAI8gB,EAAA;AAAA,MACL,MAAA;AAAA,MACA,MAAK;AAAA,MACL,SAAQ;AAAA,MACP,OAAO9gB,EAAA;AAAA,MACP,QAAQA,EAAA;AAAA,MACR,QAAQ;AAAA,IAAA;iBAET,MAA0B;AAAA,QAA1BY,EAA0BE,IAAA,EAAnB,MAAK,aAAW;AAAA,QACvBF,EAKWmG,IAAA;AAAA,UAJT,WAAU;AAAA,UACV,UAAS;AAAA,QAAA;qBAET,MAA8B;AAAA,gBAA3BlC,EAAA,CAAA,EAAC,qBAAA,CAAA,GAAA,CAAA;AAAA,UAAA;;;;;;;;;;;;;;;;;;ACjDV,UAAM9E,IAAQC,GAkBR,EAAE,EAAA,IAAMC,EAAA,GAER8gB,IAAkB5gB,EAAS,MAAM;AACrC,cAAQJ,EAAM,SAAA;AAAA,QACZ,KAAK;AACH,iBAAO;AAAA,QACT,KAAK;AAAA,QACL,KAAK;AACH,iBAAO;AAAA,QACT;AACE,iBAAO;AAAA,MAAA;AAAA,IAEb,CAAC;qBAKSC,EAAA,YAAO,eADfM,EAkBO+F,IAAA;AAAA;MAhBJ,UAAOrG,EAAA,WAAW;AAAA,MAClB,WAASA,EAAA;AAAA,MACV,MAAA;AAAA,MACA,MAAK;AAAA,MACJ,SAAS+gB,EAAA;AAAA,MACT,YAAY/gB,EAAA,UAAA;AAAA,MACZ,OAAOA,EAAA;AAAA,MACP,QAAQA,EAAA;AAAA,IAAA;iBAET,MAAiC;AAAA,QAAjCY,EAAiCE,IAAA,EAA1B,MAAK,oBAAkB;AAAA,QAC9BF,EAKWmG,IAAA;AAAA,UAJT,WAAU;AAAA,UACV,UAAS;AAAA,QAAA;qBAET,MAAgB;AAAA,YAAbd,EAAAhF,EAAA4D,EAAA,CAAA,EAAE7E,EAAA,OAAO,CAAA,GAAA,CAAA;AAAA,UAAA;;;;;6EAGhBM,EAWO+F,IAAA;AAAA;MATJ,UAAOrG,EAAA,WAAW;AAAA,MAClB,WAASA,EAAA;AAAA,MACT,SAAS+gB,EAAA;AAAA,MACT,YAAY/gB,EAAA,UAAA;AAAA,MACb,OAAM;AAAA,MACN,SAAQ;AAAA,MACP,QAAQA,EAAA;AAAA,IAAA;iBAET,MAAgB;AAAA,QAAbiG,EAAAhF,EAAA4D,EAAA,CAAA,EAAE7E,EAAA,OAAO,CAAA,GAAA,CAAA;AAAA,MAAA;;;;;;;;;;;;;;;;;;;;;;;;;AC7DhB,UAAMD,IAAQC,GAmCR0B,IAAOC,GAIPqf,IAASnf,EAAI,EAAK,GAElBmL,IAAU,CAACzI,MAAiB;AAChC,MAAA0I,GAAe1I,CAAK,GACpByc,EAAO,QAAQ;AAAA,IACjB,GACMtY,IAAY,MAAM;AACtB,MAAAhH,EAAK,cAAc,GACd3B,EAAM,4BAA0BkhB,EAAA;AAAA,IACvC,GAEMA,IAAc,MAAM;AACxB,MAAAD,EAAO,QAAQ;AAAA,IACjB,GAEME,IAAW,MAAM;AACrB,MAAAD,EAAA;AAAA,IACF,GAEM,EAAE,GAAAje,EAAA,IAAM/C,EAAA;AAEd,IAAAmE,EAAa;AAAA,MACX,aAAA6c;AAAA,IAAA,CACD;AAED,UAAMF,IAAkB5gB,EAAS,MAAM;AACrC,cAAQJ,EAAM,SAAA;AAAA,QACZ,KAAK;AACH,iBAAO;AAAA,QACT,KAAK;AAAA,QACL,KAAK;AACH,iBAAO;AAAA,QACT;AACE,iBAAO;AAAA,MAAA;AAAA,IAEb,CAAC;;;;QAKSC,EAAA,YAAO,eADfM,EAqBO+F,IAAA;AAAA;UAnBJ,UAAOrG,EAAA,WAAW;AAAA,UAClB,WAASA,EAAA;AAAA,UACV,MAAA;AAAA,UACA,MAAK;AAAA,UACJ,SAAS+gB,EAAA;AAAA,UACT,UAAU/gB,EAAA;AAAA,UACV,OAAOA,EAAA;AAAA,UACP,SAASA,EAAA;AAAA,UACT,OAAOA,EAAA;AAAA,UACP,QAAQA,EAAA;AAAA,UACR,WAAYgN,GAAO,CAAA,MAAA,CAAA;AAAA,QAAA;qBAEpB,MAAsC;AAAA,YAAtCpM,EAAsCE,IAAA,EAA/B,MAAK,yBAAuB;AAAA,YACnCF,EAKWmG,IAAA;AAAA,cAJT,WAAU;AAAA,cACV,UAAS;AAAA,YAAA;yBAET,MAAgB;AAAA,gBAAbd,EAAAhF,EAAA4D,EAAA7B,CAAA,EAAEhD,EAAA,OAAO,CAAA,GAAA,CAAA;AAAA,cAAA;;;;;2GAGhBM,EAWO+F,IAAA;AAAA;UATJ,UAAOrG,EAAA,WAAW;AAAA,UAClB,WAASA,EAAA;AAAA,UACT,SAAS+gB,EAAA;AAAA,UACT,OAAO/gB,EAAA;AAAA,UACR,SAAQ;AAAA,UACP,QAAQA,EAAA;AAAA,UACR,WAAYgN,GAAO,CAAA,MAAA,CAAA;AAAA,QAAA;qBAEpB,MAAgB;AAAA,YAAb/G,EAAAhF,EAAA4D,EAAA7B,CAAA,EAAEhD,EAAA,OAAO,CAAA,GAAA,CAAA;AAAA,UAAA;;;QAEdY,EAgCUkI,IAAA;AAAA,sBA/BCkY,EAAA;AAAA,wDAAAA,EAAM,QAAAxc;AAAA,UACf,YAAA;AAAA,UACC,OAAO;AAAA,UACR,sBAAA;AAAA,QAAA;qBAEA,MAyBQ;AAAA,YAxBAwc,EAAA,cADR1gB,EAyBQgB,IAAA;AAAA;cAvBN,WAAQ;AAAA,YAAA;yBAER,MAEiB;AAAA,gBAFjBV,EAEiBmI,IAAA,EAFA,YAAWmY,KAAQ;AAAA,6BAClC,MAAuB;AAAA,oBAApBjb,EAAAhF,EAAA4D,EAAA7B,CAAA,EAAEhD,EAAA,cAAc,CAAA,GAAA,CAAA;AAAA,kBAAA;;;gBAErBY,EAiBeqI,IAAA,MAAA;AAAA,6BAhBb,MAAW;AAAA,oBAAXrI,EAAWsI,EAAA;AAAA,oBACXtI,EAMeuI,GAAA;AAAA,sBALZ,UAAUnJ,EAAA;AAAA,sBACX,WAAQ;AAAA,sBACP,WAAYkhB,GAAQ,CAAA,MAAA,CAAA;AAAA,oBAAA;iCAErB,MAA4B;AAAA,wBAAzBjb,EAAAhF,EAAA4D,EAAA7B,CAAA,EAAEhD,EAAA,mBAAmB,CAAA,GAAA,CAAA;AAAA,sBAAA;;;oBAE1BY,EAOciI,GAAA;AAAA,sBANX,OAAO7I,EAAA;AAAA,sBACP,SAASA,EAAA;AAAA,sBACV,WAAQ;AAAA,sBACP,WAAY0I,GAAS,CAAA,MAAA,CAAA;AAAA,oBAAA;iCAEtB,MAA6B;AAAA,wBAA1BzC,EAAAhF,EAAA4D,EAAA7B,CAAA,EAAEhD,EAAA,oBAAoB,CAAA,GAAA,CAAA;AAAA,sBAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3InC,UAAMD,IAAQC,GAuBR0B,IAAOC,GAIP,EAAE,GAAAqB,EAAA,IAAM/C,EAAA,GAERmI,IAASC,GAAA,GAET2E,IAAU,CAACzI,MAAiB;AAChC,MAAA0I,GAAe1I,CAAK,GACpB7C,EAAK,YAAY,GACjB0G,EAAO,KAAK0Y,EAAiB,KAAK;AAAA,IACpC,GAEMA,IAAmB3gB,EAAS,MAC3ByD,EAAY7D,EAAM,WAAW,IAG3B,EAAE,MAAMA,EAAM,WAAW,QAAQ,EAAE,IAAIA,EAAM,WAAS,IAFpD,EAAE,MAAMA,EAAM,WAAW,QAAQ,EAAE,GAAGA,EAAM,cAAY,CAGlE,GAEKghB,IAAkB5gB,EAAS,MAAM;AACrC,cAAQJ,EAAM,SAAA;AAAA,QACZ,KAAK;AACH,iBAAO;AAAA,QACT,KAAK;AAAA,QACL,KAAK;AACH,iBAAO;AAAA,QACT;AACE,iBAAO;AAAA,MAAA;AAAA,IAEb,CAAC;qBAKSC,EAAA,YAAO,eADfM,EAmBO+F,IAAA;AAAA;MAjBJ,UAAOrG,EAAA,WAAW;AAAA,MAClB,WAASA,EAAA;AAAA,MACV,MAAA;AAAA,MACA,MAAK;AAAA,MACJ,SAAS+gB,EAAA;AAAA,MACT,SAAS/gB,EAAA;AAAA,MACT,OAAOA,EAAA;AAAA,MACP,QAAQA,EAAA;AAAA,MACR,WAAYgN,GAAO,CAAA,MAAA,CAAA;AAAA,IAAA;iBAEpB,MAAiC;AAAA,QAAjCpM,EAAiCE,IAAA,EAA1B,MAAK,oBAAkB;AAAA,QAC9BF,EAKWmG,IAAA;AAAA,UAJT,WAAU;AAAA,UACV,UAAS;AAAA,QAAA;qBAET,MAAgB;AAAA,YAAbd,EAAAhF,EAAA4D,EAAA7B,CAAA,EAAEhD,EAAA,OAAO,CAAA,GAAA,CAAA;AAAA,UAAA;;;;;kFAGhBM,EAYO+F,IAAA;AAAA;MAVJ,UAAOrG,EAAA,WAAW;AAAA,MAClB,SAAS+gB,EAAA;AAAA,MACT,WAAS/gB,EAAA;AAAA,MACT,SAASA,EAAA;AAAA,MACV,OAAM;AAAA,MACN,SAAQ;AAAA,MACP,QAAQA,EAAA;AAAA,MACR,WAAYgN,GAAO,CAAA,MAAA,CAAA;AAAA,IAAA;iBAEpB,MAA6B;AAAA,QAA7BhM,EAA6B,QAAA,MAAAC,EAApB4D,EAAA7B,CAAA,EAAEhD,EAAA,OAAO,CAAA,GAAA,CAAA;AAAA,MAAA;;;;;;;;;;;;;;;AC5EtB,UAAM0B,IAAOC,GAIPqL,IAAU,CAACzI,MAAiB;AAChC,MAAA0I,GAAe1I,CAAK,GACpB7C,EAAK,oBAAoB;AAAA,IAC3B,GAEM,EAAE,GAAAsB,EAAA,IAAM/C,EAAA;2BAIZK,EAsBO+F,IAAA;AAAA,MArBJ,UAAOrG,EAAA,WAAW;AAAA,MAClB,WAASA,EAAA;AAAA,MACT,SAASA,EAAA;AAAA,MACT,UAAUA,EAAA;AAAA,MACX,OAAM;AAAA,MACN,MAAK;AAAA,MACL,SAAQ;AAAA,MACP,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,WAAYgN,GAAO,CAAA,MAAA,CAAA;AAAA,IAAA;iBAEpB,MAGE;AAAA,QAHFpM,EAGEugB,IAAA;AAAA,UAFA,aAAU;AAAA,UACV,kBAAe;AAAA,QAAA;QAEjBvgB,EAKWmG,IAAA;AAAA,UAJT,WAAU;AAAA,UACV,UAAS;AAAA,QAAA;qBAET,MAAgB;AAAA,YAAbd,EAAAhF,EAAA4D,EAAA7B,CAAA,EAAEhD,EAAA,OAAO,CAAA,GAAA,CAAA;AAAA,UAAA;;;;;;;;;;;;;;;;;;;;AChDlB,UAAMD,IAAQC,GAoBR0B,IAAOC,GAIPqL,IAAU,CAACzI,MAAiB;AAChC,MAAA0I,GAAe1I,CAAK,GACpB7C,EAAK,YAAY;AAAA,IACnB,GAEM,EAAE,GAAAsB,EAAA,IAAM/C,EAAA,GAER8gB,IAAkB5gB,EAAS,MAAM;AACrC,cAAQJ,EAAM,SAAA;AAAA,QACZ,KAAK;AACH,iBAAO;AAAA,QACT,KAAK;AAAA,QACL,KAAK;AACH,iBAAO;AAAA,QACT;AACE,iBAAO;AAAA,MAAA;AAAA,IAEb,CAAC;qBAKSC,EAAA,YAAO,eADfM,EAoBO+F,IAAA;AAAA;MAlBJ,UAAOrG,EAAA,WAAW;AAAA,MAClB,WAASA,EAAA;AAAA,MACV,MAAA;AAAA,MACA,MAAK;AAAA,MACJ,SAAS+gB,EAAA;AAAA,MACT,SAAS/gB,EAAA;AAAA,MACT,UAAUA,EAAA;AAAA,MACV,OAAOA,EAAA;AAAA,MACP,QAAQA,EAAA;AAAA,MACR,WAAYgN,GAAO,CAAA,MAAA,CAAA;AAAA,IAAA;iBAEpB,MAAiC;AAAA,QAAjCpM,EAAiCE,IAAA,EAA1B,MAAK,oBAAkB;AAAA,QAC9BF,EAKWmG,IAAA;AAAA,UAJT,WAAU;AAAA,UACV,UAAS;AAAA,QAAA;qBAET,MAAgB;AAAA,YAAbd,EAAAhF,EAAA4D,EAAA7B,CAAA,EAAEhD,EAAA,OAAO,CAAA,GAAA,CAAA;AAAA,UAAA;;;;;8FAGhBM,EAaO+F,IAAA;AAAA;MAXJ,UAAOrG,EAAA,WAAW;AAAA,MAClB,WAASA,EAAA;AAAA,MACT,SAAS+gB,EAAA;AAAA,MACV,OAAM;AAAA,MACN,SAAQ;AAAA,MACP,SAAS/gB,EAAA;AAAA,MACT,UAAUA,EAAA;AAAA,MACV,QAAQA,EAAA;AAAA,MACR,WAAYgN,GAAO,CAAA,MAAA,CAAA;AAAA,IAAA;iBAEpB,MAAgB;AAAA,QAAb/G,EAAAhF,EAAA4D,EAAA7B,CAAA,EAAEhD,EAAA,OAAO,CAAA,GAAA,CAAA;AAAA,MAAA;;;;;;;;;;;;;;;;AC3EhB,UAAMD,IAAQC,GAoBR,EAAE,EAAA,IAAMC,EAAA,GACR,EAAE,MAAAsX,GAAM,aAAAC,EAAA,IAAgBC,GAAA,GACxB,EAAE,aAAAC,EAAA,IAAgBjP,GAAA,GAElBuE,IAAU,CAACzI,MAAiB;AAChC,MAAA0I,GAAe1I,CAAK,GAChBJ,GAASpE,EAAM,EAAE,KAAKA,EAAM,KAAK,IACnCwX,EAAKD,GAAevX,EAAM,EAAE,CAAC,EAAE,KAAK,MAAM;AACxC,QAAA2X,EAAY,EAAE3X,EAAM,OAAO,CAAC;AAAA,MAC9B,CAAC,IACQ2M,GAAS3M,EAAM,EAAE,KAAKA,EAAM,GAAG,UACxCwX,EAAKxX,EAAM,EAAE,EAAE,KAAK,MAAM;AACxB,QAAA2X,EAAY,EAAE3X,EAAM,OAAO,CAAC;AAAA,MAC9B,CAAC;AAAA,IAEL;qBAKU8E,EAAA2S,CAAA,UADRlX,EAoBO+F,IAAA;AAAA;MAlBJ,UAAOrG,EAAA,WAAW;AAAA,MAClB,WAASA,EAAA;AAAA,MACV,MAAA;AAAA,MACC,MAAMA,EAAA;AAAA,MACP,SAAQ;AAAA,MACP,WAAYgN,GAAO,CAAA,MAAA,CAAA;AAAA,IAAA;iBAEpB,MAIE;AAAA,QAJFpM,EAIEugB,IAAA;AAAA,UAHC,kBAAgBtc,EAAA,CAAA,EAAE7E,EAAA,KAAK;AAAA,UACxB,aAAU;AAAA,UACV,MAAK;AAAA,QAAA;QAEPY,EAKWmG,IAAA;AAAA,UAJT,WAAU;AAAA,UACV,UAAS;AAAA,QAAA;qBAET,MAAgB;AAAA,YAAbd,EAAAhF,EAAA4D,EAAA,CAAA,EAAE7E,EAAA,OAAO,CAAA,GAAA,CAAA;AAAA,UAAA;;;;;;;;;;;;;;;;;;AC7DlB,UAAMD,IAAQC,GAkBR,EAAE,EAAA,IAAMC,EAAA,GAER6gB,IAAmB3gB,EAAS,MAC3ByD,EAAY7D,EAAM,WAAW,IAG3B,EAAE,MAAMA,EAAM,WAAW,QAAQ,EAAE,IAAIA,EAAM,WAAS,IAFpD,EAAE,MAAMA,EAAM,WAAW,QAAQ,EAAE,GAAGA,EAAM,cAAY,CAGlE;2BAICO,EAiBO+F,IAAA;AAAA,MAhBJ,UAAOrG,EAAA,WAAW;AAAA,MAClB,WAASA,EAAA;AAAA,MACT,IAAI8gB,EAAA;AAAA,MACL,MAAA;AAAA,MACC,QAAQ;AAAA,MACT,MAAK;AAAA,MACL,SAAQ;AAAA,MACP,WAAY,MAAA;AAAA,MAAA,GAAQ,CAAA,MAAA,CAAA;AAAA,IAAA;iBAErB,MAAwC;AAAA,QAAxClgB,EAAwCE,IAAA,EAAjC,MAAK,2BAAyB;AAAA,QACrCF,EAKWmG,IAAA;AAAA,UAJT,WAAU;AAAA,UACV,UAAS;AAAA,QAAA;qBAET,MAAgB;AAAA,YAAbd,EAAAhF,EAAA4D,EAAA,CAAA,EAAE7E,EAAA,OAAO,CAAA,GAAA,CAAA;AAAA,UAAA;;;;;;;;;;;;;;;;;;AC5ClB,UAAMD,IAAQC,GAkBR,EAAE,EAAA,IAAMC,EAAA,GAER6gB,IAAmB3gB,EAAS,MAC3ByD,EAAY7D,EAAM,WAAW,IAG3B,EAAE,MAAMA,EAAM,WAAW,QAAQ,EAAE,IAAIA,EAAM,WAAS,IAFpD,EAAE,MAAMA,EAAM,WAAW,QAAQ,EAAE,GAAGA,EAAM,cAAY,CAGlE;2BAICO,EAiBO+F,IAAA;AAAA,MAhBJ,UAAOrG,EAAA,WAAW;AAAA,MAClB,WAASA,EAAA;AAAA,MACT,IAAI8gB,EAAA;AAAA,MACL,MAAA;AAAA,MACA,MAAK;AAAA,MACL,SAAQ;AAAA,MACP,QAAQ;AAAA,MACR,WAAY,MAAA;AAAA,MAAA,GAAQ,CAAA,MAAA,CAAA;AAAA,IAAA;iBAErB,MAA2B;AAAA,QAA3BlgB,EAA2BE,IAAA,EAApB,MAAK,cAAY;AAAA,QACxBF,EAKWmG,IAAA;AAAA,UAJT,WAAU;AAAA,UACV,UAAS;AAAA,QAAA;qBAET,MAAgB;AAAA,YAAbd,EAAAhF,EAAA4D,EAAA,CAAA,EAAE7E,EAAA,OAAO,CAAA,GAAA,CAAA;AAAA,UAAA;;;;;;;;;;;;;;;;;;;;;;;AC3ClB,UAAMD,IAAQC,GA0BR0B,IAAOC,GAIPqL,IAAU,CAACzI,MAAiB;AAChC,MAAA0I,GAAe1I,CAAK,GACpB7C,EAAK,SAAS;AAAA,IAChB,GAEMqf,IAAkB5gB,EAAS,MAAM;AACrC,cAAQJ,EAAM,SAAA;AAAA,QACZ,KAAK;AACH,iBAAO;AAAA,QACT,KAAK;AACH,iBAAO;AAAA,QACT;AACE,iBAAO;AAAA,MAAA;AAAA,IAEb,CAAC,GAEKsB,IAAkBlB,EAAS,MAAM;AACrC,UAAI,CAACJ,EAAM,QAAS,QAAO;AAC3B,cAAQghB,EAAgB,OAAA;AAAA,QACtB,KAAK;AACH,iBAAO;AAAA,QACT;AACE,iBAAO;AAAA,MAAA;AAAA,IAEb,CAAC,GAEK,EAAE,GAAA/d,EAAA,IAAM/C,EAAA;qBAKJD,EAAA,oBADRM,EAeO+F,IAAA;AAAA;MAbJ,SAAS0a,EAAA;AAAA,MACT,UAAO/gB,EAAA,WAAW;AAAA,MAClB,WAASA,EAAA;AAAA,MACT,OAAOA,EAAA;AAAA,MACP,SAASA,EAAA;AAAA,MACT,MAAMA,EAAA;AAAA,MACN,SAASqB,EAAA;AAAA,MACT,UAAUrB,EAAA;AAAA,MACV,WAAYgN,GAAO,CAAA,MAAA,CAAA;AAAA,IAAA;iBAEpB,MAEO;AAAA,QAFPxL,GAEOC,gCAFP,MAEO;AAAA,UADFwE,EAAAhF,EAAA4D,EAAA7B,CAAA,EAAEhD,EAAA,OAAO,CAAA,GAAA,CAAA;AAAA,QAAA;;;uGAGhBS,EAiDM,OAAA;AAAA;MA/CJ,OAAKmE,GAAA,CAAC,gCACE5E,EAAA,oCAAoCA,EAAA,OAAO,CAAA;AAAA,IAAA;MAEnDY,EAcOyF,IAAA;AAAA,QAbL,OAAM;AAAA,QACL,SAAS0a,EAAA;AAAA,QACT,WAAS/gB,EAAA;AAAA,QACT,SAASqB,EAAA;AAAA,QACT,UAAUrB,EAAA;AAAA,QACV,MAAMA,EAAA;AAAA,QACN,SAASA,EAAA;AAAA,QACT,OAAOA,EAAA;AAAA,QACP,WAAYgN,GAAO,CAAA,MAAA,CAAA;AAAA,MAAA;mBAEpB,MAEO;AAAA,UAFPxL,GAEOC,gCAFP,MAEO;AAAA,YADFwE,EAAAhF,EAAA4D,EAAA7B,CAAA,EAAEhD,EAAA,OAAO,CAAA,GAAA,CAAA;AAAA,UAAA;;;;sBAGhBgB,EAAqD,OAAA,EAAhD,OAAM,wCAAA,GAAuC,MAAA,EAAA;AAAA,MAE1ChB,EAAA,YAAO,mBADfM,EAKE+f,IAAA;AAAA;QAHA,UAAA;AAAA,QACA,OAAM;AAAA,QACL,OAAOrgB,EAAA;AAAA,MAAA;MAEVY,EAqBOyF,IAAA;AAAA,QApBJ,SAAS0a,EAAA;AAAA,QACT,UAAU/gB,EAAA,YAAYA,EAAA;AAAA,QACtB,WAASA,EAAA;AAAA,QACT,OAAOA,EAAA;AAAA,QACP,SAASA,EAAA;AAAA,QACT,MAAMA,EAAA;AAAA,QACP,OAAM;AAAA,MAAA;mBAEN,MAAiC;AAAA,UAAjCY,EAAiCE,IAAA,EAA1B,MAAK,oBAAkB;AAAA,UAC9BF,EAUQoG,IAAA;AAAA,YATN,WAAU;AAAA,YACV,UAAS;AAAA,UAAA;uBAET,MAKQ;AAAA,cALRpG,EAKQqG,IAAA;AAAA,gBAJN,SAAQ;AAAA,gBACR,OAAM;AAAA,cAAA;2BAEN,MAAuB;AAAA,kBAAvBzF,GAAuBC,EAAA,QAAA,SAAA;AAAA,gBAAA;;;;;;;;;;;IC5HpB2f,KAAgB;AAAA,EAC3B,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AACR,GAGaC,KAAQ;AAAA,EACnB,OAAO;AAAA,EACP,MAAM;AACR,GAGMC,KAAiBC,GAAW,SAASH,GAAc,KAAK,GAExDI,KAAQ,gCAERC,KAAW5f;AAAA,EACf,OAAO,OAAOuf,EAAa,EAAE,KAAK,CAACM,MAAQA,MAAQJ,GAAe,KAAK,IAChDA,GAAe,QAClCF,GAAc;AACpB,GACMO,KAAQ9f,EAAewf,GAAM,KAAK,GAClCO,KAA0B/f,EAAI,OAAO,cAAc,OAAO,WAAW2f,EAAK,EAAE,OAAO,GAEnFK,KAAW,MAAM;AACrB,UAAQJ,GAAS,OAAA;AAAA,IACf,KAAKL,GAAc;AACjBO,MAAAA,GAAM,QAAQC,GAAwB,QAAQP,GAAM,OAAOA,GAAM;AACjE;AAAA,IACF,KAAKD,GAAc;AACjBO,MAAAA,GAAM,QAAQN,GAAM;AACpB;AAAA,IACF,KAAKD,GAAc;AACjBO,MAAAA,GAAM,QAAQN,GAAM;AACpB;AAAA,EAAA;AAEN;AACAQ,GAAA;AAEA,MAAMC,KAAmB,CAAC1W,MAA6B;AACrD,EAAAqW,GAAS,QAAQrW,GACjBkW,GAAe,QAAQlW;AACzB;AAEA,OAAO,WAAWoW,EAAK,EAAE,iBAAiB,UAAU,CAACjd,MAAU;AAC7D,EAAAqd,GAAwB,QAAQrd,EAAM,SACtCsd,GAAA;AACF,CAAC;AAED,MAAME,KAAe5hB,EAAS,MACrBwhB,GAAM,UAAUN,GAAM,QAAQ,UAAU,SAChD;AAEM,SAASW,KAAW;AACzB,QAAMC,IAAe,MAAM;AACzB,IAAAH,GAAiBV,GAAc,IAAI,GACnCS,GAAA;AAAA,EACF,GAEMK,IAAe,MAAM;AACzB,IAAAJ,GAAiBV,GAAc,IAAI,GACnCS,GAAA;AAAA,EACF,GAEMM,IAAgB,MAAM;AAC1B,IAAAL,GAAiBV,GAAc,KAAK,GACpCS,GAAA;AAAA,EACF,GAEMO,IAAc,MAAM;AACxB,YAAQX,GAAS,OAAA;AAAA,MACf,KAAKL,GAAc;AACjB,QAAAc,EAAA;AACA;AAAA,MACF,KAAKd,GAAc;AACjB,QAAAa,EAAA;AACA;AAAA,MACF;AACE,QAAAE,EAAA;AACA;AAAA,IAAA;AAAA,EAEN;AAEA,SAAO;AAAA,IACL,UAAUE,GAASZ,EAAQ;AAAA,IAC3B,OAAOY,GAASV,EAAK;AAAA,IACrB,cAAcU,GAASN,EAAY;AAAA,IACnC,aAAAK;AAAA,IACA,cAAAH;AAAA,IACA,cAAAC;AAAA,IACA,eAAAC;AAAA,EAAA;AAEJ;;;;AC3FA,UAAM,EAAE,cAAAD,GAAc,cAAAD,GAAc,eAAAE,GAAe,UAAAV,EAAA,IAAaO,GAAA,GAE1D,EAAE,GAAAhf,EAAA,IAAM/C,EAAA,GAERqiB,IAASzgB,EAAI,EAAK;2BAItBvB,EAwEQ0G,IAAA;AAAA,kBAvEGsb,EAAA;AAAA,oDAAAA,EAAM,QAAA9d;AAAA,MACf,0BAAA;AAAA,IAAA;MAEW,WAAS7D,EAClB,CA4BO,EA7Be,OAAAZ,QAAK;AAAA,QAC3Ba,EA4BOyF,IA5BPuM,GA4BO;AAAA,UA3BL,OAAM;AAAA,UACN,SAAQ;AAAA,QAAA,GACA7S,GAAK;AAAA,UACb,SAAQ;AAAA,UACR,WAAQ;AAAA,QAAA;qBAER,MAMM;AAAA,YANK8E,EAAA4c,CAAA,MAAa5c,EAAAuc,EAAA,EAAc,aAAtC3gB,EAMM,OAAAS,IAAA;AAAA,cALJN,EAIEE,IAAA;AAAA,gBAHA,OAAM;AAAA,gBACN,MAAK;AAAA,gBACJ,MAAM;AAAA,cAAA;kBACJ+D,EAAA7B,CAAA,EAAC,0BAAA,CAAA,GAAA,CAAA;AAAA,YAAA,MAEQ6B,EAAA4c,CAAA,MAAa5c,EAAAuc,EAAA,EAAc,cAA3C3gB,EAMM,OAAAuF,IAAA;AAAA,cALJpF,EAIEE,IAAA;AAAA,gBAHA,OAAM;AAAA,gBACN,MAAK;AAAA,gBACJ,MAAM;AAAA,cAAA;kBACJ+D,EAAA7B,CAAA,EAAC,2BAAA,CAAA,GAAA,CAAA;AAAA,YAAA,MAEQ6B,EAAA4c,CAAA,MAAa5c,EAAAuc,EAAA,EAAc,aAA3C3gB,EAMM,OAAA6F,IAAA;AAAA,cALJ1F,EAIEE,IAAA;AAAA,gBAHA,OAAM;AAAA,gBACN,MAAK;AAAA,gBACJ,MAAM;AAAA,cAAA;kBACJ+D,EAAA7B,CAAA,EAAC,0BAAA,CAAA,GAAA,CAAA;AAAA,YAAA;;;;;iBAIZ,MAoCQ;AAAA,QApCRpC,EAoCQU,IAAA,MAAA;AAAA,qBAnCN,MAkCQ;AAAA,YAlCRV,EAkCQqG,IAAA,EAlCD,SAAQ,aAAS;AAAA,yBACtB,MAUY;AAAA,gBAVZrG,EAUYsG,IAAA;AAAA,kBATT,OAAOrC,EAAA7B,CAAA,EAAC,0BAAA;AAAA,kBACR,WAAY6B,EAAAod,CAAA,GAAY,CAAA,MAAA,CAAA;AAAA,gBAAA;kBAEd,WACT,MAGE;AAAA,oBAHFrhB,EAGEE,IAAA;AAAA,sBAFA,OAAM;AAAA,sBACN,MAAK;AAAA,oBAAA;;;;gBAIXF,EAUYsG,IAAA;AAAA,kBATT,OAAOrC,EAAA7B,CAAA,EAAC,2BAAA;AAAA,kBACR,WAAY6B,EAAAsd,CAAA,GAAa,CAAA,MAAA,CAAA;AAAA,gBAAA;kBAEf,WACT,MAGE;AAAA,oBAHFvhB,EAGEE,IAAA;AAAA,sBAFA,OAAM;AAAA,sBACN,MAAK;AAAA,oBAAA;;;;gBAIXF,EAUYsG,IAAA;AAAA,kBATT,OAAOrC,EAAA7B,CAAA,EAAC,0BAAA;AAAA,kBACR,WAAY6B,EAAAqd,CAAA,GAAY,CAAA,MAAA,CAAA;AAAA,gBAAA;kBAEd,WACT,MAGE;AAAA,oBAHFthB,EAGEE,IAAA;AAAA,sBAFA,OAAM;AAAA,sBACN,MAAK;AAAA,oBAAA;;;;;;;;;;;;;;ICjENyhB,KAAgB;AAAA,EAC3B;AAAA,IACE,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET;AAAA,IACE,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET;AAAA,IACE,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET;AAAA,IACE,MAAM;AAAA,IACN,OAAO;AAAA,IACP,WAAW;AAAA,EAAA;AAEf,GAEMjB,KAAiBC,GAAqC,YAAY,SAAS;AAE1E,SAASiB,GAAuBC,GAA0CC,GAAqC;AACpH,EAAIpB,GAAe,UAAU,cAAWA,GAAe,QAAQoB;AAG/D,WAASC,EAAYC,GAAwBC,GAAe;AAC1D,IAAI,CAACC,MAAQ,CAACA,GAAK,UAEnBA,GAAK,OAAO,iBAAiBF,GAAUC,CAAQ;AAAA,EACjD;AAEA,QAAME,IAAc,CAACC,MACf,CAACF,MAAQ,CAACA,GAAK,SAAe,KAC9BL,EAAyB,SAASO,CAAI,KAAKA,MAAS,QAEtD1B,GAAe,QAAQ0B,GAEvBF,GAAK,OAAO,OAAO,QAAQE,GAEpBA,KAEF;AAiBT,SAAO;AAAA,IACL,aAAAL;AAAA,IACA,oBAhByB,MAAM;AAC/B,UAAI,GAACG,MAAQ,CAACA,GAAK,UAAUxB,GAAe,UAAU,YACtD;AAAA,YAAImB,EAAyB,SAASnB,GAAe,KAAK,KAAKA,GAAe,UAAU,MAAM;AAG5F,UAAAwB,GAAK,OAAO,OAAO,QAAQxB,GAAe;AAC1C;AAAA,QACF;AACA,QAAAA,GAAe,QAAQoB,GAGvBI,GAAK,OAAO,OAAO,QAAQJ;AAAA;AAAA,IAC7B;AAAA,IAKE,qBAAqBL,GAASf,EAAc;AAAA,IAC5C,aAAAyB;AAAA,IACA,cAAcR;AAAA,EAAA;AAElB;AAEO,SAASU,KAAsB;AACpC,SAAO;AAAA,IACL,qBAAqBZ,GAASf,EAAc;AAAA,EAAA;AAEhD;;;;;;;sBCjFE9gB,EAAA,GAAAC,EAgCM,OAhCNS,IAgCM,CAAA,GAAAoD,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA;AAAA;;;;ECnCJ,OAAM;AAAA,EACN,eAAY;AAAA,EACZ,SAAQ;;;AAHV,SAAA9D,EAAA,GAAAC,EAqEM,OArENS,IAqEM,CAAA,GAAAoD,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA;AAAA;;;;ECpEJ,OAAM;AAAA,EACN,SAAQ;;;AAFV,SAAA9D,EAAA,GAAAC,EASM,OATNS,IASM,CAAA,GAAAoD,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA;AAAA,IALJtD,EAIE,QAAA;AAAA,MAHA,OAAM;AAAA,MACN,QAAO;AAAA,MACP,MAAK;AAAA;;;;;;;;;;ACCX,UAAMjB,IAAQC,GAWRkjB,IAAuB/iB,EAAS,MAAM;AAC1C,cAAQJ,EAAM,MAAA;AAAA,QACZ,KAAK;AACH,iBAAOojB;AAAAA,QACT,KAAK;AACH,iBAAOC;AAAA,QACT;AACE,iBAAOC;AAAA,MAAA;AAAA,IAEb,CAAC;sBAIC7iB,EAAA,GAAAC,EAKM,OALNS,IAKM;AAAA,OAJJV,KAAAF,EAGEgjB,GAFKJ,EAAA,KAAoB,GAAA,EACxB,WAASljB,EAAA,UAAM,MAAA,GAAA,CAAA,SAAA,CAAA;AAAA,IAAA;;;;;;;;;AC5BtB,UAAMD,IAAQC,GAOR0B,IAAOC,GAIP8gB,IAA2Bvf,GAAOqgB,EAAwB,GAC1Db,IAAwBxf,GAAOsgB,EAAqB,GAEpD,EAAE,aAAAT,EAAA,IAAgBP,GAAuBC,GAA0BC,CAAqB,GACxF,EAAE,qBAAAe,EAAA,IAAwBR,GAAA,GAE1BS,IAAmB,CAACV,MAAuB;AAE/C,MADeD,EAAYC,CAAI,KACnBthB,EAAK,eAAeshB,CAAI;AAAA,IACtC,GAEMW,IAAgBxjB,EAAS,MAAM;AACnC,YAAMyH,IAAQ2a,GAAc,KAAK,CAAC7e,MAASA,EAAK,SAAS+f,EAAoB,KAAK;AAClF,aAAI7f,EAAYgE,CAAK,IACZ2a,GAAc,CAAC,IAEjB3a;AAAA,IACT,CAAC,GAEKgc,IAAmBzjB,EAAS,MACzBoiB,GAAc;AAAA,MACnB,CAAC7e,OACE+e,EAAyB,SAAS/e,EAAK,IAAI,KAAKA,EAAK,SAAS,UAAU,CAACA,EAAK,aAAa3D,EAAM;AAAA,IAAA,CAEvG;2BAICO,EAqCQ0G,IAAA,MAAA;AAAA,MApCK,WAASrG,EAClB,CAcO,EAAA,OAfsBkjB,QAAc;AAAA,QAC3CjjB,EAcOyF,IAdPuM,GAcO;AAAA,UAbL,OAAM;AAAA,UACN,SAAQ;AAAA,QAAA,GACAiR,GAAc;AAAA,UACtB,SAAQ;AAAA,UACR,WAAQ;AAAA,QAAA;qBAER,MAKU;AAAA,YALVjjB,EAKUkjB,IAAA;AAAA,cAJR,OAAM;AAAA,cACN,MAAK;AAAA,YAAA;yBAEL,MAA2C;AAAA,gBAA3CljB,EAA2CmjB,IAAA;AAAA,kBAA7B,MAAMJ,EAAA,OAAe;AAAA,gBAAA;;;;cAC3B,MACV1iB,EAAG0iB,EAAA,MAAc,KAAK,GAAA,CAAA;AAAA,UAAA;;;;iBAG1B,MAkBQ;AAAA,QAlBR/iB,EAkBQU,IAAA,MAAA;AAAA,qBAjBN,MAgBQ;AAAA,YAhBRV,EAgBQqG,IAAA,EAhBD,SAAQ,aAAS;AAAA,yBAEpB,MAAkC;AAAA,wBADpCxG,EAcY0F,IAAA,MAAAC,GAbOwd,EAAA,OAAgB,CAA1BI,YADT1jB,EAcY4G,IAAA;AAAA,kBAZT,KAAK8c,EAAO;AAAA,kBACZ,SAAKjjB,EAAA,CAAAyD,MAAOkf,EAAiBM,EAAO,IAAI,GAAA,CAAA,MAAA,CAAA;AAAA,gBAAA;6BAEzC,MAQiB;AAAA,oBARjBpjB,EAQiBuG,IAAA,MAAA;AAAA,iCAPf,MAKU;AAAA,wBALVvG,EAKUkjB,IAAA;AAAA,0BAJR,OAAM;AAAA,0BACN,MAAK;AAAA,wBAAA;qCAEL,MAAmC;AAAA,4BAAnCljB,EAAmCmjB,IAAA;AAAA,8BAArB,MAAMC,EAAO;AAAA,4BAAA;;;;0BACnB,MACV/iB,EAAG+iB,EAAO,KAAK,GAAA,CAAA;AAAA,sBAAA;;;;;;;;;;;;;;;;;;;AC5E3B,UAAM,EAAE,GAAAhhB,EAAA,IAAM/C,EAAA,GAERgkB,IAAc,MAAM;AACxB,aAAO,SAAS,OAAA;AAAA,IAClB;kDAIEjjB,EAWO,QAAA,EATL,OAAM,4BAAwB;AAAA,MAE3BiF,EAAAhF,EAAA4D,EAAA7B,CAAA,qCAAoC,KACvC,CAAA;AAAA,MAAAhC,EAKO,QAAA;AAAA,QAJL,OAAM;AAAA,QACL,WAAYijB,GAAW,CAAA,MAAA,CAAA;AAAA,MAAA,KAErBpf,EAAA7B,CAAA,EAAC,gCAAA,CAAA,GAAA,CAAA;AAAA,IAAA;;ICpBGkhB,KAA6B,CAACtb,MAClCA,aAAiBub;AAGnB,MAAMA,WAAiC,MAAM;AAAA,EAC1C;AAAA,EAER,YAAYC,IAAU,IAAIC,IAA8B,MAAM;AAC5D,UAAMD,CAAO,GACb,KAAK,OAAO,4BACZ,KAAK,UAAUA,GACf,KAAK,gBAAgBC;AAAA,EACvB;AACF;ACVO,SAASC,KAAkB;AAChC,QAAMC,IAAaC,GAAA;AAInB,SAAO;AAAA,IACL,gBAHqBrkB,EAAS,MAAMokB,EAAW,UAAU,SAAS;AAAA,IAIlE,YAAAA;AAAA,EAAA;AAEJ;ACVA,MAAME,KAAa5iB,EAAI,EAAK;AAErB,SAAS6iB,KAAe;AAC7B,SAAO;AAAA,IACL,YAAAD;AAAA,EAAA;AAEJ;;;;;;;;;;ACCA,UAAM1kB,IAAQC,GAcR2kB,IAAgB9iB,EAAa,EAAK,GAClC+iB,IAAkB/iB,EAA4B,IAAI,GAClDgjB,IAAmBhjB,EAAY,CAAC,GAEhC,EAAE,YAAA4iB,EAAA,IAAeC,GAAA,GAEjBI,IAAkB,YAA2B;AACjD,MAAIF,EAAgB,SAClBA,EAAgB,MAAM,MAAA,GAGxBA,EAAgB,QAAQ,IAAI,gBAAA;AAE5B,YAAMG,IAAe,CAACnc,MACbA,aAAiB,SAASA,EAAM,SAAS;AAGlD,UAAI;AACF,cAAMD,IAAM,MAAM,MAAM,IAAI5I,EAAM,gBAAgB,WAAW,KAAK,IAAA,CAAK,IAAI;AAAA,UACzE,QAAQ6kB,EAAgB,MAAM;AAAA,QAAA,CAC/B;AACD,YAAIjc,EAAI,IAAI;AACV,gBAAMqc,IAAcrc,EAAI,QAAQ,IAAI,cAAc;AAClD,cAAI,CAACqc,KAAe,CAACA,EAAY,SAAS,kBAAkB;AAC1D,kBAAM,IAAIb,GAAyB,oDAAoD;AAEzF,gBAAMc,IAAO,MAAMtc,EAAI,KAAA;AACvB,cAAI,OAAO,KAAKsc,CAAI,EAAE,SAAS;AAC7B,kBAAM,IAAId,GAAyB,qDAAqD;AAE1F,UAAAQ,EAAc,QAAQ,CAAC/gB,EAAYqhB,EAAK,UAAU,KAAKA,EAAK,eAAellB,EAAM,gBACjF0kB,EAAW,QAAQE,EAAc;AAEjC;AAAA,QACF;AACA,cAAM,IAAIR,GAAyB,qDAAqD;AAAA,MAC1F,SAASvb,GAAO;AACd,YAAImc,EAAanc,CAAK;AACpB;AAEF,cAAIsb,GAA2Btb,CAAK,IAC5BA,IAEJA,aAAiB,cACb,IAAIub,GAAyB,4CAA4Cvb,CAAK,IAElFA,aAAiB,QACb,IAAIub,GAAyB,gCAAgCvb,EAAM,SAASA,CAAK,IAEnF,IAAIub,GAAyB,6CAA6Cvb,CAAY;AAAA,MAC9F;AAAA,IACF,GAEMsc,IAAqB/kB,EAAS,MAC3BglB,EACR,GAGK,EAAE,OAAAC,GAAO,QAAAC,EAAA,IAAWC,GAAc,MAAM;AAC5C,MAAAR,EAAA;AAAA,IACF,GAAG/kB,EAAM,aAAa,GAEhB,EAAE,gBAAAwlB,EAAA,IAAmBjB,GAAA,GAErBkB,IAA2B,CAACC,IAAU,GAAGC,IAAc,MAAM;AACjE,YAAMC,IAAQ,KAAK,IAAI,MAAOF,GAAS,GAAI;AAE3C,iBAAW,YAAY;AACrB,YAAI;AACF,gBAAMX,EAAA;AAAA,QACR,SAASlc,GAAO;AACd,UACEA,aAAiBub,OAChBvb,EAAM,QAAQ,SAAS,iBAAiB,KAAKA,EAAM,QAAQ,SAAS,cAAc,MACnF6c,IAAUC,IAEVF,EAAyBC,IAAU,GAAGC,CAAW,IAEjD,QAAQ,MAAM,yBAAyB9c,CAAK;AAAA,QAEhD;AAAA,MACF,GAAG+c,CAAK;AAAA,IACV;AAEA,WAAA/iB;AAAA,MACE2iB;AAAA,MACA,CAAC1iB,MAAsB;AACrB,cAAM+iB,IAAc,KAAK,IAAA;AAEzB,YAAI/iB,GAAU;AACZ,gBAAMgjB,IAA2BD,IAAMf,EAAiB;AACxD,UAAAQ,EAAA,GACIQ,IAAmB9lB,EAAM,mBAC3BylB,EAAA;AAAA,QAEJ;AACE,UAAAX,EAAiB,QAAQe,GACzBR,EAAA;AAAA,MAEJ;AAAA,MACA,EAAE,WAAW,GAAA;AAAA,IAAK,GAGpBU,GAAgB,MAAM;AACpB,MAAIlB,EAAgB,SAClBA,EAAgB,MAAM,MAAA;AAAA,IAE1B,CAAC,aAKSD,EAAA,cADRrkB,EAUUylB,IAAA;AAAA;MARR,QAAO;AAAA,MACP,OAAM;AAAA,MACN,WAAU;AAAA,MACT,OAAO;AAAA,IAAA;iBAER,MAEM;AAAA,QAFN/kB,EAEM,OAFNE,IAEM;AAAA,WADJV,KAAAF,EAAsCgjB,GAAtB4B,EAAA,KAAkB,CAAA;AAAA,QAAA;;;;;;;;;;;;;;;;;;;;;;;;AC3IxC,UAAMnlB,IAAQC,GAmBR0B,IAAOC,GAIPqkB,IAAW;AAAA,MACf,CAAC,WAAW,WAAW,WAAW,SAAS;AAAA,MAC3C,CAAC,WAAW,WAAW,WAAW,SAAS;AAAA,MAC3C,CAAC,WAAW,WAAW,WAAW,SAAS;AAAA,MAC3C,CAAC,WAAW,WAAW,WAAW,SAAS;AAAA,MAC3C,CAAC,WAAW,WAAW,SAAS;AAAA,IAAA,GAE5BC,IAAiBpkB,EAAI,EAAE,GAEvBqkB,IAAsB,MAAM;AAChC,YAAMC,IAAY,KAAK,MAAM,KAAK,OAAA,IAAWH,EAAS,MAAM;AAC5D,aAAAC,EAAe,QAAQD,EAASG,CAAS,EAAE,KAAK,MAAM,KAAK,OAAA,IAAWH,EAASG,CAAS,EAAE,MAAM,CAAC,GAC1FF,EAAe;AAAA,IACxB,GAEMlF,IAAkB5gB,EAAS,MACxBJ,EAAM,WAAW,SAAS,IAAI,SAAS,OAC/C,GAEKqmB,IAAsBjmB,EAAS,MAC5BJ,EAAM,WAAW,SAAS,IAAIA,EAAM,aAAa,MACzD,GAEKsmB,IAAsB,CAACC,MAAqB;AAChD,MAAA5kB,EAAK,qBAAqB4kB,CAAQ;AAAA,IACpC;AAEA,WAAA1jB;AAAA,MACE,MAAM7C,EAAM;AAAA,MACZ,CAAC8C,GAAU6C,MAAa;AACtB,YAAI7C,MAAa6C,KACb7C,EAAS,WAAW,KACpBA,EAAS,WAAW,KAAK9C,EAAM,aAAa;AAC9C,cAAIkmB,EAAe,UAAU,IAAI;AAC/B,YAAAvkB,EAAK,qBAAqBwkB,GAAqB;AAC/C;AAAA,UACF;AACA,UAAAxkB,EAAK,qBAAqBukB,EAAe,KAAK;AAAA,QAChD;AAAA,MACF;AAAA,MACA,EAAE,WAAW,GAAA;AAAA,IAAK,mBAKlBxlB,EAkCM,OAAA,MAAA;AAAA,MAhCKT,EAAA,yBADTQ,KAAAC,EASQ,SATRS,IASQ;AAAA,QALH+E,EAAAhF,EAAAjB,EAAA,KAAK,IAAG,KACX,CAAA;AAAA,QACQA,EAAA,YADRQ,EAAA,GAAAC,EAGE,QAHFuF,EAGE;;MAEJpF,EAsBOyF,IAAA;AAAA,QArBJ,SAAS0a,EAAA;AAAA,QACV,MAAA;AAAA,QACC,OAAOqF,EAAA;AAAA,MAAA;mBAER,MAgBQ;AAAA,UAfCpmB,EAAA,6BADTM,EAgBQ0G,IAAA;AAAA;YAdN,WAAU;AAAA,UAAA;uBAEV,MAWQ;AAAA,cAXRpG,EAWQU,IAAA,MAAA;AAAA,2BAVN,MASE;AAAA,kBATFV,EASE2lB,IAAA;AAAA,oBARC,eAAaH,EAAA;AAAA,oBACb,UAAAJ;AAAA,oBACD,OAAM;AAAA,oBACN,WAAU;AAAA,oBACV,eAAA;AAAA,oBACA,eAAA;AAAA,oBACA,iBAAA;AAAA,oBACC,uBAAoBK;AAAA,kBAAA;;;;;;;;;;;;;;;;;;;;;AClFjC,UAAM,EAAE,GAAArjB,EAAA,IAAM/C,EAAA,GAERumB,IAAe3kB,EAAI,EAAK;2BAI5BvB,EAoGO+F,IAAA;AAAA,MAnGL,SAAQ;AAAA,MACR,MAAA;AAAA,MACA,MAAK;AAAA,MACJ,WAASrG,EAAA;AAAA,IAAA;iBAEV,MAGE;AAAA,QAHFY,EAGE6lB,IAAA;AAAA,UAFC,MAAM;AAAA,UACN,MAAMzmB,EAAA;AAAA,QAAA;QAETY,EAKWmG,IAAA;AAAA,UAJT,WAAU;AAAA,UACV,UAAS;AAAA,QAAA;qBAET,MAA2C;AAAA,gBAAxClC,EAAA7B,CAAA,EAAC,kCAAA,CAAA,GAAA,CAAA;AAAA,UAAA;;;QAGEhD,EAAA,oBADRM,EAmFQ0G,IAAA;AAAA;UAjFN,WAAU;AAAA,QAAA;qBAEV,MA8EQ;AAAA,YA9ERpG,EA8EQU,IAAA,MAAA;AAAA,yBA7EN,MA4EQ;AAAA,gBA5ERV,EA4EQqG,IAAA,EA5ED,OAAM,UAAM;AAAA,6BACjB,MAeY;AAAA,oBAfZrG,EAeYsG,IAAA;AAAA,sBAdV,OAAM;AAAA,sBACN,OAAM;AAAA,oBAAA;sBAEK,WACT,MAGE;AAAA,wBAHFtG,EAGE6lB,IAAA;AAAA,0BAFC,MAAMzmB,EAAA;AAAA,0BACN,MAAM;AAAA,wBAAA;;iCAGX,MAAkE;AAAA,wBAAlEY,EAAkEuG,IAAA,MAAA;AAAA,qCAAlD,MAAiC;AAAA,gCAA9BnH,EAAA,YAAY,OAAO,QAAQ,GAAA,CAAA;AAAA,0BAAA;;;wBAC9CY,EAGoB8lB,IAAA,MAAA;AAAA,qCAFlB,MAAuB;AAAA,4BAApBzgB,EAAAhF,EAAAjB,EAAA,YAAY,KAAK,GAAA,CAAA;AAAA,4CAAGgB,EAAI,MAAA,MAAA,MAAA,EAAA;AAAA,8BAAA,MAC3BC,EAAGjB,EAAA,YAAY,EAAE,GAAA,CAAA;AAAA,0BAAA;;;;;;oBAGrBY,EAAYyf,EAAA;AAAA,oBACZzf,EAOYsG,IAAA;AAAA,sBANT,QAAQ;AAAA,sBACT,gBAAa;AAAA,sBACZ,YAAYlH,EAAA,kBAAA;AAAA,sBACb,WAAQ;AAAA,oBAAA;iCAER,MAA6C;AAAA,4BAA1C6E,EAAA7B,CAAA,EAAC,oCAAA,CAAA,GAAA,CAAA;AAAA,sBAAA;;;oBAENpC,EAiDYsG,IAAA;AAAA,sBAhDV,gBAAa;AAAA,sBACb,WAAQ;AAAA,sBACP,kCAAYsf,EAAA,QAAY,IAAA,CAAA,MAAA,CAAA;AAAA,oBAAA;iCAEzB,MAA2C;AAAA,wBAAxCvgB,EAAAhF,EAAA4D,EAAA7B,CAAA,yCAAwC,KAC3C,CAAA;AAAA,wBAAApC,EA0CUkI,IAAA;AAAA,sCAzCC0d,EAAA;AAAA,wEAAAA,EAAY,QAAAhiB;AAAA,0BACrB,OAAM;AAAA,wBAAA;qCAEN,MAqCQ;AAAA,4BArCKgiB,EAAA,cAAblmB,EAqCQgB,IAAA,EAAA,KAAA,KAAA;AAAA,yCApCN,MAgBW;AAAA,gCAhBXV,EAgBW+lB,IAAA;AAAA,kCAfT,SAAQ;AAAA,kCACR,OAAM;AAAA,gCAAA;6CAEN,MAEgB;AAAA,oCAFhB/lB,EAEgBgmB,IAAA,EAFD,OAAM,eAAW;AAAA,iDAC9B,MAA2C;AAAA,4CAAxC/hB,EAAA7B,CAAA,EAAC,kCAAA,CAAA,GAAA,CAAA;AAAA,sCAAA;;;oCAENpC,EAAWsI,EAAA;AAAA,oCACXtI,EAOEyF,IAAA;AAAA,sCANA,OAAM;AAAA,sCACN,MAAK;AAAA,sCACL,MAAK;AAAA,sCACL,SAAQ;AAAA,sCACR,WAAQ;AAAA,sCACP,kCAAYmgB,EAAA,QAAY,IAAA,CAAA,MAAA,CAAA;AAAA,oCAAA;;;;gCAG7B5lB,EAAsEoI,IAAA,MAAA;AAAA,6CAA3D,MAA+C;AAAA,wCAA5CnE,EAAA7B,CAAA,EAAC,sCAAA,CAAA,GAAA,CAAA;AAAA,kCAAA;;;gCACfpC,EAiBeqI,IAAA,MAAA;AAAA,6CAhBb,MAAW;AAAA,oCAAXrI,EAAWsI,EAAA;AAAA,oCACXtI,EAOOyF,IAAA;AAAA,sCANL,OAAM;AAAA,sCACN,SAAQ;AAAA,sCACR,WAAQ;AAAA,sCACP,kCAAYmgB,EAAA,QAAY,IAAA,CAAA,MAAA,CAAA;AAAA,oCAAA;iDAEzB,MAA+B;AAAA,4CAA5B3hB,EAAA7B,CAAA,EAAC,sBAAA,CAAA,GAAA,CAAA;AAAA,sCAAA;;;oCAENpC,EAMOyF,IAAA;AAAA,sCALL,OAAM;AAAA,sCACN,WAAQ;AAAA,sCACP,YAAYrG,EAAA,gBAAA;AAAA,oCAAe;iDAE5B,MAAkD;AAAA,4CAA/C6E,EAAA7B,CAAA,EAAC,yCAAA,CAAA,GAAA,CAAA;AAAA,sCAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzFxB,UAAMjD,IAAQC,GAsCR0B,IAAOC,GAQPsR,IAASjL,GAAmBhI,GAAC,QAA0C,GACvE0T,IAAe1L,GAAoBhI,GAAC,cAAmD,GACvF6mB,IAAsB7e,GAAwChI,GAAC,qBAEpE,GAGK,EAAE,OAAA8mB,GAAO,KAAAC,GAAK,kBAAAC,EAAA,IAAqBjnB,EAAM,UAAA,GAEzCknB,IAAa9mB,EAAS,MAAM;AAChC,UAAIuT,EAAa;AACf,eAAO;AAET,UAAImT,EAAoB,MAAM,SAAS,KAAK5T,EAAO,MAAM,SAASlT,EAAM;AACtE,eAAO6D,EAAY7D,EAAM,aAAa,IAClCiD,EAAE,gCAAgC,EAAE,KAAKjD,EAAM,gBAAgB,IAC/DA,EAAM;AAAA,IAGd,CAAC,GAEKgI,IAAa5H,EAAS;AAAA,MAC1B,MAAM;AACJ,eAAOJ,EAAM;AAAA,MACf;AAAA,MACA,IAAI8C,GAAwE;AAC1E,QAAAnB,EAAK,qBAAqBsD,GAAwEnC,CAAQ,CAAC;AAAA,MAC7G;AAAA,IAAA,CACD,GAEK,EAAE,GAAAG,EAAA,IAAM/C,EAAA,GACRgD,IAASC,GAA2BC,IAAmB,MAAS,GAChEC,IAAUF,GAA2BG,IAAoB,MAAS,GAElE+O,IAAYvQ,EAAI,EAAK,GACrB,EAAE,aAAAsR,EAAA,IAAgBrH,GAAO/L,CAAK,GAE9BoL,IAAakI,GAActT,EAAM,YAAY,GAE7CyD,IAAU,MAAM;AACpB,MAAA4O,EAAU,QAAQ,IAClB1Q,EAAK,SAASqG,EAAW,KAAK;AAAA,IAChC,GAEMxE,IAAS,MAAM;AACnB,MAAA6O,EAAU,QAAQ,IAClBrS,EAAM,GAAG,OAAA,GACT2B,EAAK,QAAQqG,EAAW,KAAK;AAAA,IAC/B,GAEMtE,IAAuBtD,EAAS,MAC/ByD,EAAY7D,EAAM,YAAY,IAC/BA,EAAM,GAAG,SAAS,SAAeA,EAAM,EAAE,QAAQ,IAAI,CAAC2D,MAAsBA,EAAK,QAAQ,IACtF,CAAA,IAFsC,CAAC3D,EAAM,YAAY,CAGjE,GAEK4D,IAAgBxD,EAAS,MAAM;AACnC,UAAI,CAACyD,EAAY7D,EAAM,KAAK,UAAUA,EAAM;AAC5C,UAAI6D,EAAYX,CAAM,KAAKW,EAAYR,CAAO,KAAKQ,EAAY7D,EAAM,GAAG,KAAK,EAAG,QAAO;AACvF,YAAM,EAAE,KAAK8D,MAASC,GAA6B/D,EAAM,GAAG,OAAO,GAAG;AACtE,aAAOiD,EAAEC,IAAS,MAAMG,IAAU,YAAYS,CAAI;AAAA,IACpD,CAAC,GAEKE,IAAmB5D,EAAS,MAC3ByD,EAAY7D,EAAM,QAAQ,IACxBA,EAAM,GAAG,YAAYA,EAAM,GAAG,SAAS,QAAQ,SAAS,aADtBA,EAAM,QAEhD,GAOK4T,IAAY,OAAOC,MAAyB;AAChD,UAAItO,GAAOsO,CAAK,KAAKA,EAAM,SAAS7T,EAAM,gBAAgB;AACxD,QAAA8mB,EAAoB,MAAM,MAAA;AAC1B;AAAA,MACF;AACA,MAAAnT,EAAa,QAAQ;AACrB,YAAMI,IAAcX,EAAY,MAAMpT,EAAM,aAAa;AACzD,MAAA+T,EAAY,QAAQF,GACpBiT,EAAoB,MAAM,MAAA,IACd,MAAM9mB,EAAM,kBAAkBoL,GAAYgI,EAAY,KAAK,GACnE,QAAQ,CAACzP,MAAc;AACzB,QAAAmjB,EAAoB,MAAM,IAAInjB,EAAK3D,EAAM,SAAS,GAAG2D,CAAI;AAAA,MAC3D,CAAC,GACDgQ,EAAa,QAAQ;AAAA,IACvB,GAEMF,IAAWrT,EAAiD,MAAM;AACtE,YAAMsT,wBAA4C,IAAA,GAC5CiC,wBAA4C,IAAA;AAClD,aAAI1L,GAAQjC,EAAW,KAAK,IAC1BA,EAAW,MAAM,QAAQ,CAACqD,MAAe;AACvC,QAAAqI,EAAM,IAAIrI,GAAO,EAAE;AAAA,MACrB,CAAC,IACQrD,EAAW,SACpB0L,EAAM,IAAI1L,EAAW,OAAO,EAAE,GAEhC8e,EAAoB,MAAM,QAAQ,CAACzb,MAAU;AAC3C,QAAAqI,EAAM,IAAIrI,EAAMrL,EAAM,SAAS,GAAGqL,EAAMrL,EAAM,SAAS,CAAC,GACxD2V,EAAS,IAAItK,EAAMrL,EAAM,SAAS,GAAGiF,GAAUoG,CAAK,CAAC;AAAA,MACvD,CAAC,GACM,MAAM,KAAKqI,GAAO,CAAC,CAAC9M,GAAKyE,CAAK,OAC5B,EAAE,OAAOzE,GAAK,OAAOyE,GAAO,KAAKsK,EAAS,IAAI/O,CAAG,EAAA,EACzD;AAAA,IACH,CAAC,GAEKugB,IAA2B,CAACC,MACzB,IAAI,QAAiB,CAAC3K,OAC3BqK,EAAoB,MAAM,QAAQ,CAACzb,GAAOzE,MAAQ;AAChD,MAAIwgB,EAAI,IAAIxgB,CAAG,KACbqgB,EAAiBhiB,GAAUoG,CAAK,CAAC;AAAA,IAErC,CAAC,GACMoR,EAAQ,EAAI,EACpB,GAGG/H,IAAe,MAAM;AAGzB,UAFAxB,EAAO,QAAQ,IACfU,EAAU,EAAE,GACR5T,EAAM,UAAU;AAClB,QAAAgI,EAAW,QAAQ,CAAA;AACnB;AAAA,MACF;AACA,MAAAA,EAAW,QAAQ;AAAA,IACrB;AAOA,WAAA2M;AAAA,MACEzB;AAAA,MACA,CAACmU,GAAaC,MAAgB;AAC5B,cAAMxkB,IAAWukB;AAEjB,QAAIvkB,MADawkB,MAEf1T,EAAU9Q,CAAQ,GAClBnB,EAAK,yBAAyBmB,CAAQ;AAAA,MAE1C;AAAA,MACA,EAAE,UAAU,IAAA;AAAA,IAAI,GAGlBD,GAAMqQ,GAAQ,CAACpQ,GAAU6C,MAAa;AAQpC,MAAI7C,MAAa6C,KACfhE,EAAK,gBAAgBmB,CAAQ;AAAA,IAEjC,CAAC,GAEDD;AAAA,MACEmF;AAAA,MACA,OAAOlF,MAAa;AAClB,YAAIyC,GAAOzC,CAAQ,KAAKe,EAAYf,CAAQ,KAAMmH,GAAQnH,CAAQ,KAAKA,EAAS,WAAW;AACzF;AAEF,cAAMmR,IAAShK,GAAQnH,CAAQ,IAAIA,IAAW,CAACA,CAAQ,GACjDykB,IAAa,IAAI,IAAItT,CAAM;AACjC,cAAMkT,EAAyBI,CAAU,GAErCA,EAAW,OAAO,MACpBP,EAAI,MAAM,KAAKO,CAAU,CAA6B,GACtDR,EAAA;AAAA,MAEJ;AAAA,MACA,EAAE,WAAW,GAAA;AAAA,IAAK,mBAKlBxmB,EA0DgB2U,IAAA;AAAA,kBAzDLlN,EAAA;AAAA,oDAAAA,EAAU,QAAAvD;AAAA,MACX,QAAQyO,EAAA;AAAA,gDAAAA,EAAM,QAAAzO;AAAA,MACtB,OAAA;AAAA,MACC,OAAOgP,EAAA;AAAA,MACR,aAAA;AAAA,MACC,UAAUxT,EAAA;AAAA,MACV,WAAWA,EAAA;AAAA,MACX,kBAAgByD,EAAA;AAAA,MAChB,SAASiQ,EAAA;AAAA,MACT,gBAAcuT,EAAA;AAAA,MACf,cAAa;AAAA,MACZ,QAAA1jB;AAAA,MACA,SAAAC;AAAA,MACA,iBAAaiR;AAAA,IAAA;MAEH,SACT,MASO;AAAA,QAREzU,EAAA,8BADTS,EASO,QAAA;AAAA,UAPJ,KAAKsD,EAAA,QAAgB;AAAA,QAAA;UAEnBkC,EAAAhF,EAAA0C,EAAA,KAAa,IAAG,KACnB,CAAA;AAAA,UACQI,EAAA,SADRvD,EAAA,GAAAC,EAGE,QAHFS,EAGE;;;MAGK,iBACT,MAA2B;AAAA,QAA3BM,GAA2BC,EAAA,QAAA,aAAA;AAAA,MAAA;MAOlB,MAAId,EACb,CASO,EAAA,OAViBwU,SAAiBS,QAAQ;AAAA,QACjDpU,GASOC,EAAA,QAAA,QAAA;AAAA,UAPJ,OAAO0T;AAAA,UACP,MAAMS;AAAA,QAAA,GAHT,MASO;AAAA,UAJLhV,EAGEL,IAHFqS,GAGEuC,GAFiB;AAAA,YAChB,MAAMS,EAAS;AAAA,UAAA;;;MAKX,MAAIjV,EACb,CAMO,EAAA,OAPiBuU,SAAiBS,QAAQ;AAAA,QACjDnU,GAMOC,EAAA,QAAA,QAAA;AAAA,UAJJ,OAAOyT;AAAA,UACP,MAAMS;AAAA,QAAA,GAHT,MAMO;AAAA,UADL/U,EAAgCsG,IAAA,EAApB,OAAOgO,EAAA,GAAS,MAAA,GAAA,CAAA,OAAA,CAAA;AAAA,QAAA;;;;MAvBvBlV,EAAA;cACN;AAAA,cAFH,MAGE,EAAA;AAAA;;;;;;;;;;;;;;;;AC5QN,UAAM,EAAE,GAAAgD,EAAA,IAAM/C,EAAA;sBAIZO,EAAA,GAAAC,EA4BM,OA5BNS,IA4BM;AAAA,MA3BJF,EA0BM,OA1BNgF,IA0BM;AAAA,QAzBJhF,EAIC,OAAA;AAAA,UAHE,KAAKhB,EAAA;AAAA,UACN,OAAM;AAAA,UACN,KAAI;AAAA,QAAA;QAGEA,EAAA,cADRS,EAKK,MALL8F,IAKKtF,EADAjB,EAAA,KAAK,GAAA,CAAA;QAEVgB,EAEK,MAFLwF,IAEK;AAAA,UADHxF,EAAgD,gBAAvC6D,EAAA7B,CAAA,EAAC,0BAAA,CAAA,GAAA,CAAA;AAAA,QAAA;QAEZhC,EAUM,OAVNyF,IAUM;AAAA,UARIzG,EAAA,iBADRM,EAQO+F,IAAA;AAAA;YANJ,WAASrG,EAAA;AAAA,YACT,MAAMA,EAAA,SAAA;AAAA,YACP,OAAM;AAAA,YACN,MAAK;AAAA,UAAA;uBAEL,MAAmC;AAAA,kBAAhC6E,EAAA7B,CAAA,EAAC,0BAAA,CAAA,GAAA,CAAA;AAAA,YAAA;;;;;;;;;;;;;AC3Cd,UAAMjD,IAAQC;AASd,WAAAqJ,GAAU,MAAM;AACd,MAAKtJ,EAAM,cACX,OAAO,SAAS,OAAOA,EAAM,UAAA;AAAA,IAC/B,CAAC,mBAICU,EAAO,KAAA;AAAA;;;;;;;ACTT,UAAM,EAAE,GAAAuC,EAAA,IAAM/C,EAAA;sBAIZO,EAAA,GAAAC,EAsBM,OAtBNS,IAsBM;AAAA,MArBJF,EAoBM,OApBNgF,IAoBM;AAAA,QAnBJhF,EAMK,MANLsF,IAMK;AAAA,UALH1F,EAGEE,IAAA;AAAA,YAFA,MAAK;AAAA,YACL,MAAK;AAAA,UAAA;UAEPE,EAAwD,gBAA/C6D,EAAA7B,CAAA,EAAC,kCAAA,CAAA,GAAA,CAAA;AAAA,QAAA;QAGZhC,EAEI,KAFJuF,IAEItF,EADC4D,EAAA7B,CAAA,EAAC,iCAAA,CAAA,GAAA,CAAA;AAAA,QAGNpC,EAMOyF,IAAA;AAAA,UALJ,YAAYrG,EAAA,gBAAA;AAAA,UACb,OAAM;AAAA,UACN,MAAK;AAAA,QAAA;qBAEL,MAAgD;AAAA,gBAA7C6E,EAAA7B,CAAA,EAAC,uCAAA,CAAA,GAAA,CAAA;AAAA,UAAA;;;;;;;;;;;;ACvBZ,UAAM,EAAE,GAAAA,EAAA,IAAM/C,EAAA;sBAIZO,EAAA,GAAAC,EAsBM,OAtBNS,IAsBM;AAAA,MArBJF,EAoBM,OApBNgF,IAoBM;AAAA,QAnBJhF,EAMK,MANLsF,IAMK;AAAA,UALH1F,EAGEE,IAAA;AAAA,YAFA,MAAK;AAAA,YACL,MAAK;AAAA,UAAA;UAEPE,EAAoD,gBAA3C6D,EAAA7B,CAAA,EAAC,8BAAA,CAAA,GAAA,CAAA;AAAA,QAAA;QAGZhC,EAEI,KAFJuF,IAEItF,EADC4D,EAAA7B,CAAA,EAAC,6BAAA,CAAA,GAAA,CAAA;AAAA,QAGNpC,EAMOyF,IAAA;AAAA,UALJ,YAAYrG,EAAA,gBAAA;AAAA,UACb,OAAM;AAAA,UACN,MAAK;AAAA,QAAA;qBAEL,MAA4C;AAAA,gBAAzC6E,EAAA7B,CAAA,EAAC,mCAAA,CAAA,GAAA,CAAA;AAAA,UAAA;;;;;;IC7BCukB,KAAiB,MAAM;AAClC,QAAM,EAAE,GAAAvkB,EAAA,IAAM/C,EAAA,GACRunB,IAAiBrnB,EAAS,OACvB;AAAA,IACL,GAAG6C,EAAE,8BAA8B;AAAA,IACnC,GAAGA,EAAE,iCAAiC;AAAA,IACtC,GAAGA,EAAE,+BAA+B;AAAA,EAAA,EAEvC;AAmBD,SAAO;AAAA,IACL,gBAAAwkB;AAAA,IACA,kBAnBuB,CAACC,MAA6B;AACrD,cAAQA,GAAA;AAAA,QACN,KAAK;AACH,iBAAO;AAAA,QACT,KAAK;AACH,iBAAO;AAAA,QACT,KAAK;AACH,iBAAO;AAAA,QACT;AACE,iBAAO;AAAA,MAAA;AAAA,IAEb;AAAA,IASE,kBAPuB,CAACA,MACjB/V,GAAqB8V,EAAe,OAAOC,EAAS,UAAU,KAAKA,EAAS,SAAA;AAAA,EAMnF;AAEJ;;;;;;AC/BA,UAAM1nB,IAAQC,GAGR,EAAE,kBAAA0nB,GAAkB,kBAAAC,EAAA,IAAqBJ,GAAA,GACzCK,IAAgBznB,EAAS,MACtBwnB,EAAiB5nB,EAAM,QAAQ,CACvC,GACK8nB,IAAgB1nB,EAAS,MACtBunB,EAAiB3nB,EAAM,QAAQ,CACvC;2BAICO,EAEcwnB,IAAA,EAFA,OAAOF,EAAA,SAAa;AAAA,iBAChC,MAAmB;AAAA,YAAhBC,EAAA,KAAa,GAAA,CAAA;AAAA,MAAA;;;;;;;;;;;ACDpB,UAAM,EAAE,GAAA7kB,EAAA,IAAM/C,EAAA;2BAIZQ,EA6BM,OAAA,MAAA;AAAA,MA5BJG,EAGE+I,IAAA;AAAA,QAFC,OAAO9E,EAAA7B,CAAA,EAAC,qBAAA;AAAA,QACR,OAAOhD,EAAA,IAAI;AAAA,MAAA;MAEdY,EAIO+I,IAAA;AAAA,QAJA,OAAO9E,EAAA7B,CAAA,EAAC,gCAAA;AAAA,MAAA;mBACb,MAEO;AAAA,UAFPxB,GAEOC,+BAFP,MAEO;AAAA,YADFwE,EAAAhF,EAAAjB,EAAA,IAAI,aAAa,GAAA,CAAA;AAAA,UAAA;;;;MAGxBY,EAEO+I,IAAA;AAAA,QAFA,OAAO9E,EAAA7B,CAAA,EAAC,yBAAA;AAAA,MAAA;mBACb,MAAsC;AAAA,UAAtCpC,EAAsCmnB,IAAA;AAAA,YAArB,OAAO/nB,EAAA,IAAI;AAAA,UAAA;;;;MAE9BY,EAEO+I,IAAA;AAAA,QAFA,OAAO9E,EAAA7B,CAAA,EAAC,2BAAA;AAAA,MAAA;mBACb,MAA6C;AAAA,UAA7CpC,EAA6ConB,IAAA;AAAA,YAA1B,UAAUhoB,EAAA,IAAI;AAAA,UAAA;;;;MAEnCY,EAEO+I,IAAA;AAAA,QAFA,OAAO9E,EAAA7B,CAAA,EAAC,8BAAA;AAAA,MAAA;mBACb,MAA0C;AAAA,UAA1CpC,EAA0CigB,IAAA;AAAA,YAA9B,aAAW7gB,EAAA,IAAI;AAAA,UAAA;;;;MAE7BY,EAEO+I,IAAA;AAAA,QAFA,OAAO9E,EAAA7B,CAAA,EAAC,4BAAA;AAAA,MAAA;mBACb,MAAwC;AAAA,UAAxCpC,EAAwCigB,IAAA;AAAA,YAA5B,aAAW7gB,EAAA,IAAI;AAAA,UAAA;;;;MAE7BY,EAEO+I,IAAA;AAAA,QAFA,OAAO9E,EAAA7B,CAAA,EAAC,6BAAA;AAAA,MAAA;mBACb,MAAyC;AAAA,UAAzCpC,EAAyCigB,IAAA;AAAA,YAA7B,aAAW7gB,EAAA,IAAI;AAAA,UAAA;;;;MAE7BY,EAGE+I,IAAA;AAAA,QAFC,OAAO9E,EAAA7B,CAAA,EAAC,yBAAA;AAAA,QACR,OAAOhD,EAAA,IAAI;AAAA,MAAA;;;;;;;;;;;ACzClB,UAAM+H,IAAaC,GAAoBhI,GAAA,YAAmB,GACpD,EAAE,gBAAAwnB,GAAgB,kBAAAG,EAAA,IAAqBJ,GAAA,GACvCU,IAAc9nB,EAAS,MACpBwnB,EAAiB5f,EAAW,MAAM,QAAQ,CAClD,GACK,EAAE,GAAA/E,EAAA,IAAM/C,EAAA;;MAIZW,EAKO+I,IAAA,MAAA;AAAA,mBAJL,MAGE;AAAA,UAHF/I,EAGEsnB,IAAA;AAAA,YAFS,YAAAngB,EAAA,MAAW;AAAA,YAAX,uBAAAzD,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAE,MAAAuD,EAAA,MAAW,cAAWvD;AAAA,YAC9B,OAAOK,EAAA7B,CAAA,EAAC,8BAAA;AAAA,UAAA;;;;MAGbpC,EAUO+I,IAAA,MAAA;AAAA,mBATL,MAQE;AAAA,UARF/I,EAQEunB,IAAA;AAAA,YAPS,YAAApgB,EAAA,MAAW;AAAA,YAAX,uBAAAzD,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAE,MAAAuD,EAAA,MAAW,WAAQvD;AAAA,YAC3B,OAAOK,EAAA2iB,CAAA;AAAA,YACP,KAAK;AAAA,YACN,MAAK;AAAA,YACL,cAAW;AAAA,YACX,aAAU;AAAA,YACT,OAAOS,EAAA;AAAA,UAAA;;;;;;ICpBDG,KAAiB;AAAA,EAC5B,OAAO;AAAA,EACP,UAAU;AAAA,EACV,UAAU;AACZ,GAEaC,KAAwBD,GAAe,OAEvCE,KAAe;AAAA,EAC1B,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,UAAU;AACZ,GAEaC,KAAsBD,GAAa,OCrB1CE,KAAY,yBAELC,KAAuB,CAACtX,GAA6ByD,MAChErD,GAA6BJ,GAAQqX,KAAY,QAAQ,EAAE,IAAA5T,KAAM,WAAW,cAAc,GCAtF4T,KAAY,6BACZE,KAAS,mBAGFC,KAA+B,CAC1CC,GACAC,GACAC,MAEAvX;AAAA,EACEqX;AAAA,EACAJ,KAAY;AAAA,EACZ,EAAE,WAAAK,GAAW,WAAAC,EAAA;AAAA,EACbC;AAAA,EACAL;AACF,GAGWM,KAAsC,CACjDJ,GACAK,MAEA1X;AAAA,EACEqX;AAAA,EACAJ,KAAY;AAAA,EACZ,EAAE,qBAAAS,EAAA;AAAA,EACFF;AAAA,EACAL;AACF,GC9BIF,KAAY,yBACZU,KAAuB,QACvBC,KAAgBD,KAAuB,qBACvCR,KAAS,YAEFU,KAAwB,CAACR,MACpCrX,GAA0BqX,GAAWO,IAAe,CAAA,GAAIJ,IAAiBL,EAAM,GAEpEW,KAAqB,CAACT,MACjCrX,GAA0BqX,GAAWJ,IAAW,CAAA,GAAIO,IAAiBL,EAAM,GAEhEY,KAA8B,CAACT,GAAsBD,MAChErX,GAAgCqX,GAAWJ,KAAY,iBAAiBK,GAAW,IAAIE,IAAiBL,EAAM,GC4EnGa,KAAqC;AAAA,EAChD,MAAM;AAAA,EACN,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,YAAY;AACd,GAGaC,KAA4CD,GAAmC,MAY/EE,KAA6B;AAAA,EACxC,SAAS;AAAA,EACT,IAAI;AAAA,EACJ,QAAQ;AACV,GAIaC,KAAwB;AAAA,EACnC,SAAS;AAAA,EACT,cAAc;AAAA,EACd,kBAAkB;AAAA,EAClB,aAAa;AAAA,EACb,QAAQ;AACV,GAEaC,KAA+BD,GAAsB,SAMrDE,KAAe;AAAA,EAC1B,iBAAiB;AAAA,EACjB,QAAQ;AACV,GAEaC,KAAsBD,GAAa,iBChI1CE,KAAsB,OAAO;AAAA,EACjC,cAAcF,GAAa;AAC7B,IACMG,KAAsB,OAAO;AAAA,EACjC,UAAU,CAAA;AAAA,EACV,wBAAwB,CAAA;AAAA,EACxB,sBAAsB,CAAA;AAAA,EACtB,UAAU;AAAA,IACR,iBAAiB;AAAA,IACjB,oBAAoB;AAAA,IACpB,sBAAsB;AAAA,IACtB,sBAAsB;AAAA,IACtB,uBAAuB;AAAA,IACvB,oBAAoB;AAAA,IACpB,kBAAkB;AAAA,MAChB,SAAS;AAAA,MACT,SAAS;AAAA,IAAA;AAAA,IAEX,kBAAkB;AAAA,EAAA;AAEtB,IAEaC,KAAoBC,GAAY,6BAA6B,MAAM;AAC9E,QAAMC,IAAcC,GAGjB;AAAA,IACD,cAAc;AAAA,IACd,cAAc;AAAA,EAAA,CACf,GACKC,IAAezT,GAAyBmT,IAAqB,GAC7DO,IAAe1T,GAAyBoT,IAAqB,GAC7DO,IAAqB3T,GAAW,oBAAI,KAAoC,GACxE4T,IAA4B5T,GAAW,oBAAI,KAA2C,GACtF6T,IAAmC7T;AAAA,wBACnC,IAAA;AAAA,EAAuE,GAEvE8T,IAA0C9T;AAAA,wBAC1C,IAAA;AAAA,EAAyD;AAG/D,WAAS1H,IAAQ;AACf,IAAAmb,EAAa,QAAQN,GAAA,GACrBO,EAAa,QAAQN,GAAA,GACrBO,EAAmB,MAAM,MAAA,GACzBC,EAA0B,MAAM,MAAA,GAChCC,EAAiC,MAAM,MAAA,GACvCC,EAAwC,MAAM,MAAA,GAC9CP,EAAY,eAAe,IAC3BA,EAAY,eAAe;AAAA,EAC7B;AAEA,SAAO;AAAA,IACL,aAAAA;AAAA,IACA,cAAAE;AAAA,IACA,cAAAC;AAAA,IACA,oBAAAC;AAAA,IACA,2BAAAC;AAAA,IACA,kCAAAC;AAAA,IACA,yCAAAC;AAAA,IACA,OAAAxb;AAAA,EAAA;AAEJ,CAAC;ACpDM,SAASyb,GAAkBvZ,IAA4C,QAAW;AACvF,QAAMwZ,IAAiBX,GAAA;AAEvB,WAASY,EAAchiB,GAAc;AACnC,YAAQ,MAAMA,CAAK;AAAA,EACrB;AAEA,WAASiiB,IAAmB;AAC1B,WAAO,IAAI,QAAQ,CAACrO,GAASC,MAAW;AAEtC,UADAkO,EAAe,YAAY,eAAe,IACtC/mB,EAAYuN,CAAM,GAAG;AACvB,QAAAsL,EAAO,EAAK;AACZ;AAAA,MACF;AACA,MAAA2M,GAAsBjY,CAAM,EACzB,KAAK,CAAC/H,MAAW;AAChB,YAAI,OAAO,KAAKA,CAAM,EAAE,SAAS;AAC/B,gBAAM,IAAI,MAAM,qDAAqD;AAEvE,QAAA0hB,EAAgB1hB,CAAM,GACtBoT,EAAQ,EAAI;AAAA,MACd,CAAC,EACA,MAAM,CAACuO,MAAQ;AACd,QAAAH,EAAcG,CAAG,GACjBtO,EAAO,EAAK;AAAA,MACd,CAAC;AAAA,IACL,CAAC;AAAA,EACH;AAEA,WAASqO,EAAgB7oB,GAAoB;AAC3C,QAAI;AACF,MAAA0oB,EAAe,aAAa,eAAe1oB,EAAK,cAChD0oB,EAAe,YAAY,eAAe;AAAA,IAC5C,QAAc;AACZ,YAAM,IAAI,MAAM,0DAA0D;AAAA,IAC5E;AAAA,EACF;AAEA,WAASK,IAAmB;AAC1B,WAAO,IAAI,QAAQ,CAACxO,GAASC,MAAW;AAEtC,UADAkO,EAAe,YAAY,eAAe,IACtC/mB,EAAYuN,CAAM,GAAG;AACvB,QAAAsL,EAAO,EAAK;AACZ;AAAA,MACF;AACA,MAAA4M,GAAmBlY,CAAM,EACtB,KAAK,CAAC/H,MAAW;AAChB,YAAI,OAAO,KAAKA,CAAM,EAAE,SAAS;AAC/B,gBAAM,IAAI,MAAM,yDAAyD;AAE3E,QAAA6hB,EAAgB7hB,CAAM,GACtBoT,EAAQ,EAAI;AAAA,MACd,CAAC,EACA,MAAM,CAACuO,MAAQ;AACd,QAAAH,EAAcG,CAAG,GACjBtO,EAAO,EAAK;AAAA,MACd,CAAC;AAAA,IACL,CAAC;AAAA,EACH;AAEA,WAASwO,EAAgBhpB,GAAoB;AAC3C,QAAI;AACF,MAAA0oB,EAAe,aAAa,WAAW1oB,EAAK,UAC5C0oB,EAAe,aAAa,WAAW1oB,EAAK,UAC5C0oB,EAAe,aAAa,yBAAyB1oB,EAAK,wBAC1D0oB,EAAe,aAAa,uBAAuB1oB,EAAK,sBACxD0oB,EAAe,YAAY,eAAe;AAAA,IAC5C,QAAc;AACZ,YAAM,IAAI,MAAM,sDAAsD;AAAA,IACxE;AAAA,EACF;AAEA,WAASO,EAAuBC,GAAwB;AACtD,WAAO,IAAI,QAAQ,CAAC3O,GAASC,MAAW;AACtC,UAAI7Y,EAAYuN,CAAM,GAAG;AACvB,QAAAsL,EAAO,EAAK;AACZ;AAAA,MACF;AACA,MAAA6M,GAA4B6B,GAAaha,CAAM,EAC5C,KAAK,CAAC/H,MAAW;AAChB,YAAI,OAAO,KAAKA,CAAM,EAAE,SAAS;AAC/B,gBAAM,IAAI,MAAM,gEAAgE;AAElF,QAAAgiB,EAAsBhiB,GAAQ+hB,CAAW,GACzC3O,EAAQ,EAAI;AAAA,MACd,CAAC,EACA,MAAM,CAACuO,MAAQ;AACd,QAAAH,EAAcG,CAAG,GACjBtO,EAAO,EAAK;AAAA,MACd,CAAC;AAAA,IACL,CAAC;AAAA,EACH;AAEA,WAAS2O,EAAsBnpB,GAA0BkpB,GAAwB;AAC/E,QAAI;AACF,YAAM/hB,IAAS;AAAA,QACb,wBAAwBnH,EAAK;AAAA,QAC7B,OAAOA,EAAK;AAAA,QACZ,UAAUA,EAAK;AAAA,QACf,OAAOA,EAAK;AAAA,QACZ,OAAOA,EAAK;AAAA,MAAA;AAEd,MAAA0oB,EAAe,mBAAmB,IAAIQ,GAAa/hB,CAAM;AAAA,IAC3D,QAAc;AACZ,YAAM,IAAI,MAAM,iEAAiE;AAAA,IACnF;AAAA,EACF;AAEA,WAASiiB,EACPF,GACAG,IAA4B,CAAChD,GAAa,OAAOA,GAAa,OAAOA,GAAa,OAAOA,GAAa,QAAQ,GAC9G;AACA,WAAO,IAAI,QAAQ,CAAC9L,GAASC,MAAW;AACtC,UAAI7Y,EAAYuN,CAAM,GAAG;AACvB,QAAAsL,EAAO,EAAK;AACZ;AAAA,MACF;AACA,YAAM8O,IAAWD,EAAM,IAAI,CAACE,MAAS7C,GAA6BxX,GAAQga,GAAaK,CAAI,CAAC;AAE5F,cAAQ,IAAID,CAAQ,EACjB,KAAK,CAACE,MAAc;AACnB,YAAIA,EAAU,WAAWH,EAAM,UAAUG,EAAU,KAAK,CAACpP,MAAa,OAAO,KAAKA,CAAQ,EAAE,SAAS,CAAC;AACpG,gBAAM,IAAI,MAAM,mEAAmE;AAErF,QAAAqP,EAAoCD,GAAWN,GAAaG,CAAK,GACjE9O,EAAQ,EAAI;AAAA,MACd,CAAC,EACA,MAAM,CAACuO,MAAQ;AACd,QAAAH,EAAcG,CAAG,GACjBtO,EAAO,EAAK;AAAA,MACd,CAAC;AAAA,IACL,CAAC;AAAA,EACH;AAEA,WAASiP,EACPD,GAGAN,GACAG,GACA;AACA,QAAI;AAQF,YAAMliB,IAAS,EAAE,GAPMuhB,EAAe,iCAAiC,IAAIQ,CAAW,KAAK;AAAA,QACzF,OAAO,CAAA;AAAA,QACP,OAAO,CAAA;AAAA,QACP,OAAO,CAAA;AAAA,QACP,UAAU,CAAA;AAAA,MAAC,EAGO;AAEpB,MAAAG,EAAM,QAAQ,CAACE,GAAM1kB,MAAU;AAC7B,QAAAsC,EAAOoiB,CAAI,IAAIC,EAAU3kB,CAAK,EAAE;AAAA,MAClC,CAAC,GAED6jB,EAAe,iCAAiC,IAAIQ,GAAa/hB,CAAM;AAAA,IACzE,QAAc;AACZ,YAAM,IAAI,MAAM,oEAAoE;AAAA,IACtF;AAAA,EACF;AAEA,WAASuiB,EAA4CC,GAAqD;AACxG,WAAO,IAAI,QAAQ,CAACpP,GAASC,MAAW;AACtC,UAAI7Y,EAAYuN,CAAM,GAAG;AACvB,QAAAsL,EAAO,EAAK;AACZ;AAAA,MACF;AACA,UAAIkO,EAAe,wCAAwC,IAAIiB,CAAuB,GAAG;AACvF,QAAApP,EAAQ,EAAI;AACZ;AAAA,MACF;AACA,MAAAwM,GAAoC7X,GAAQya,CAAuB,EAChE,KAAK,CAACjjB,MAAQ;AACb,QAAAgiB,EAAe,wCAAwC,IAAIiB,GAAyBjjB,EAAI,IAAI,GAC5F6T,EAAQ,EAAI;AAAA,MAEd,CAAC,EACA,MAAM,CAAC5T,MAAU;AAChB,QAAA6T,EAAO7T,CAAK;AAAA,MAEd,CAAC;AAAA,IACL,CAAC;AAAA,EACH;AAEA,WAASijB,IAAuB;AAC9B,WAAOlB,EAAe,YAAY;AAAA,EACpC;AAEA,WAASmB,IAAuB;AAC9B,WAAOnB,EAAe,YAAY;AAAA,EACpC;AAEA,WAASoB,EAAsBZ,GAAwB;AACrD,WAAOR,EAAe,mBAAmB,IAAIQ,CAAW;AAAA,EAC1D;AAEA,WAASa,EAAoCb,GAAwB;AACnE,WAAOR,EAAe,iCAAiC,IAAIQ,CAAW;AAAA,EACxE;AAEA,iBAAec,EACbC,GACgD;AAChD,UAAMX,IAAWW,EAAS;AAAA,MAAI,CAACC,MAC7BC,EAAqCD,CAAO,EAAE,MAAM,CAACvjB,MAAU;AAC7D,gBAAQ,MAAM,0BAA0BujB,CAAO,KAAKvjB,CAAK;AAAA,MAE3D,CAAC;AAAA,IAAA;AAKH,YAFkB,MAAM,QAAQ,WAAW2iB,CAAQ,GAGhD;AAAA,MACC,CAACc,MACCA,EAAO,WAAW,eAAe,CAACzoB,EAAYyoB,EAAO,KAAK;AAAA,IAAA,EAE7D,IAAI,CAACA,MAAWA,EAAO,KAAK;AAAA,EACjC;AAEA,iBAAeD,EACbD,GAC0D;AAC1D,QAAIvoB,EAAYuN,CAAM,GAAG;AACvB,cAAQ,KAAK,qBAAqB;AAClC;AAAA,IACF;AAEA,QAAImb,IAAqB3B,EAAe,0BAA0B,IAAIwB,CAAO;AAE7E,QAAIvoB,EAAY0oB,CAAkB;AAChC,UAAI;AACF,cAAMC,IAAa,MAAM9D,GAAqBtX,GAAQgb,CAAO;AAC7D,YAAI7mB,GAAOinB,EAAW,SAAS,EAAG;AAElC,QAAAD,IAAqB;AAAA,UACnB,WAAWC,EAAW;AAAA,UACtB,MAAMA,EAAW;AAAA,QAAA,GAEnB5B,EAAe,0BAA0B,IAAIwB,GAASG,CAAkB;AAAA,MAC1E,SAAS1jB,GAAO;AACd,gBAAQ,MAAM,oCAAoCujB,CAAO,KAAKvjB,CAAK;AACnE;AAAA,MACF;AAGF,QAAI4jB,IAAuB7B,EAAe,mBAAmB,IAAI2B,EAAmB,SAAS;AAE7F,QAAI1oB,EAAY4oB,CAAoB;AAClC,UAAI;AACF,cAAMtB,EAAuBoB,EAAmB,SAAS,GACzDE,IAAuB7B,EAAe,mBAAmB,IAAI2B,EAAmB,SAAS;AAAA,MAC3F,SAAS1jB,GAAO;AACd,gBAAQ,MAAM,kCAAkC0jB,EAAmB,SAAS,KAAK1jB,CAAK;AACtF;AAAA,MACF;AAGF,QAAIhF,CAAAA,EAAY4oB,CAAoB;AAEpC,aAAO;AAAA,QACL,SAAAL;AAAA,QACA,WAAWG,EAAmB;AAAA,QAC9B,aAAaA,EAAmB;AAAA,QAChC,iBAAiBtnB,GAAUwnB,CAAoB;AAAA,MAAA;AAAA,EAEnD;AAEA,SAAO;AAAA,IACL,uCAAAP;AAAA,IACA,sCAAAG;AAAA,IACA,kBAAApB;AAAA,IACA,kBAAAH;AAAA,IACA,wBAAAK;AAAA,IACA,sCAAAG;AAAA,IACA,6CAAAM;AAAA,IACA,sBAAAE;AAAA,IACA,sBAAAC;AAAA,IACA,uBAAAC;AAAA,IACA,qCAAAC;AAAA,EAAA;AAEJ;ACxRA,MAAMxD,KAAY,iBACZiE,KAAsB,IACf/D,KAAS,SACTK,KAAkB,WAClB2D,KAAa,OACpBC,KAAyB,IAalBC,KAAoB,CAACzb,GAA6B0b,MAC7DC,GAA0C3b,GAAQ4X,IAAiBL,IAAQF,KAAY,uBAAuB;AAAA,EAC5G,WAAAqE;AACF,CAAC,GAEUE,KAAa,CAAC5b,GAA6ByD,MACtDrD,GAAgCJ,GAAQqX,KAAY,QAAQ,EAAE,IAAA5T,KAAMmU,IAAiBL,EAAM,GAEhFsE,KAAuB,CAA4B7b,GAA6ByD,MAC3FrD,GAAeJ,GAAQ,yBAAyB,EAAE,IAAAyD,KAAMmU,IAAiBL,EAAM,GAEpEuE,KAAqB,CAAC9b,GAA6B+b,MAC9D3b,GAAgCJ,GAAQqX,KAAY,mBAAmB,EAAE,IAAI0E,KAAenE,IAAiBL,EAAM,GAExGyE,KAA2B,CACtChc,GACA4E,GACAqX,IAAiD,WAE1C,IAAI,QAAiC,CAAC5Q,GAASC,MAAW;AAC/D,QAAM4Q,IAAYC,GAA6BvX,GAAOqX,CAAyB;AAC/E,EAAAG,GAAuBpc,GAAQkc,CAAS,EACrC,KAAK,CAAC5B,MAAc;AACnB,QAAI4B,EAAU,WAAW;AACvB,aAAO7Q,EAAQ,CAAA,CAAE;AACnB,QAAWiP,EAAU,WAAW;AAC9B,aAAOhP,EAAOgP,CAAS;AACzB,QACEA,EAAU,MAAM,CAAC9iB,MACRA,EAAI,WAAW6kB,EACvB,GACD;AACA,YAAMC,IAAwChC,EAAU,QAAQ,CAACpP,MAAaA,EAAS,IAAI;AAC3F,aAAOG,EAAQiR,CAAY;AAAA,IAC7B;AACE,aAAOhR,EAAOgP,CAAS;AAAA,EAE3B,CAAC,EACA,MAAM,CAACV,MAECtO,EAAOsO,CAAG,CAClB;AACL,CAAC;AAGH,eAAe2C,GAA4Bvc,GAA6BgW,GAAc0F,GAAmB;AACvG,MAAI1F,EAAI,WAAW,UAAU,QAAQ,QAAQ,EAAE;AAC/C,QAAMwG,IAAa,KAAK,KAAKxG,EAAI,SAASwF,EAAsB,GAC1DlB,IAAY,CAAA;AAElB,WAAS,IAAI,GAAG,IAAIkC,GAAY,KAAK;AACnC,UAAMC,IAAS,IAAIjB,IACbkB,IAAU1G,EAAI,MAAMyG,GAAQA,IAASjB,EAAsB,GAC3DhkB,IAAM,MAAMwI,EAAA,EAAS,IAAIqX,KAAY,YAAYqE,CAAS,QAAQgB,EAAQ,KAAK,GAAG,CAAC,EAAE;AAC3F,IAAApC,EAAU,KAAK9iB,CAAG;AAAA,EACpB;AACA,SAAO8iB;AACT;AAEO,MAAMqC,KAIwB,CAAC3c,GAA6BgW,GAAc0F,MACxE,IAAI,QAAQ,CAACrQ,GAASC,MAAW;AACtC,EAAAiR,GAA4Bvc,GAAQgW,GAAK0F,CAAS,EAC/C,KAAK,CAACpB,MAAc;AACnB,QAAItE,EAAI,WAAW;AACjB,aAAO3K,EAAQ,CAAA,CAAE;AACnB,QAAWiP,EAAU,WAAW;AAC9B,MAAAhP,EAAOgP,CAAS;AAAA,aAEhBA,EAAU,MAAM,CAAC9iB,MACRA,EAAI,WAAW6kB,EACvB,GACD;AACA,YAAM/Z,IAAQ,CAAA;AACd,eAASsa,IAAI,GAAGA,IAAItC,EAAU,QAAQsC;AACpC,QAAAta,EAAM,KAAK,GAAGgY,EAAUsC,CAAC,EAAE,KAAK,IAAI;AAEtC,MAAAvR,EAAQ/I,CAA6B;AAAA,IACvC;AACE,MAAAgJ,EAAOgP,CAAS;AAAA,EAEpB,CAAC,EACA,MAAM,CAACV,MAAQ;AAEd,IAAAtO,EAAOsO,CAAG;AAAA,EACZ,CAAC;AACL,CAAC;AAGH,eAAewC,GAAuBpc,GAA6Bkc,GAAoC;AACrG,QAAMM,IAAa,KAAK,KAAKN,EAAU,SAASZ,EAAmB,GAC7DhB,IAA6B,CAAA;AACnC,MAAI4B,EAAU,WAAW,UAAU,QAAQ,QAAQ,EAAE;AAErD,WAASU,IAAI,GAAGA,IAAIJ,GAAYI,KAAK;AACnC,UAAMH,IAASG,IAAItB,IACboB,IAAUR,EAAU,MAAMO,GAAQA,IAASnB,EAAmB,GAC9D9jB,IAAM,MAAMwI,EAAA,EAAS,MAAMqX,KAAY,yBAAyB,KAAK,UAAUqF,CAAO,CAAC;AAC7F,IAAApC,EAAU,KAAK9iB,CAAG;AAAA,EACpB;AACA,SAAO8iB;AACT;AAEA,SAAS6B,GACPvX,GACAqX,IAAiD,QACjD;AACA,QAAMY,IAAoC,CAAA;AAC1C,SAAAjY,EAAM,QAAQ,CAACrS,MAAS;AACtB,IAAI,CAAC4B,GAAO5B,EAAK,OAAO,KAAKA,EAAK,mBAChCsqB,EAAS,KAAK;AAAA,MACZ,IAAItqB,EAAK;AAAA,MACT,UAAUA,EAAK;AAAA,MACf,SAASA,EAAK;AAAA,MACd,WAAW;AAAA,MACX,YAAYA,EAAK;AAAA,MACjB,mBAAmBE,EAAYwpB,CAAyB,IAAI1pB,EAAK,oBAAoB0pB;AAAA,IAAA,CACtF;AAAA,EAEL,CAAC,GAEMY;AACT;AAEA,MAAM,EAAE,kBAAAC,IAAkB,wBAAAC,GAAA,IAA2BzlB,GAAA,GAE/C0lB,KAAgC,CAACvlB,GAAYkgB,GAA6BD,MAAyB;AACvG,QAAM,EAAE,qCAAAmD,EAAA,IAAwCtB,GAAA,GAC1C0D,IAAgCpC,EAAoCnD,CAAS;AACnF,MAAIjlB,EAAYwqB,CAA6B;AAC3C,UAAM,IAAI,MAAM,2CAA2C;AAE7D,MAAI,CAACxlB,KAAS,CAACA,EAAM,YAAY,CAACA,EAAM,SAAS,KAAM;AACvD,QAAM3G,IAAO2G,EAAM,SAAS,MACtBmN,IAAQ,CAAA;AACd,aAAW,CAACpP,GAAKqN,CAAM,KAAK,OAAO,QAAQ/R,EAAK,MAAM,GAAG;AACvD,UAAMosB,IAAQ1nB,EAAI,MAAM,GAAG,EAAE,IAAA,GACvBiB,IAAQwmB,EAA8BtF,CAAS,EAAE,KAAK,CAACplB,MAASA,EAAK,aAAa2qB,CAAK;AAC7F,IAAIzmB,KACFmO,EAAM,KAAK;AAAA,MACT,OAAOnO,EAAM;AAAA,MACb,QAAQoM;AAAA,IAAA,CACT;AAAA,EAEL;AACA,MAAI+B,EAAM,QAAQ;AAChB,IAAAmY,GAAuBnY,GAAO,IAAI,EAAI;AACtC;AAAA,EACF;AACA,EAAAkY,GAAA;AACF,GAEaK,KAAsB,CACjCnd,GACAod,GACA1F,GACA2F,MAEO,IAAI,QAAQ,CAAChS,GAASC,MAAW;AACtC,QAAMxa,IAA8B;AAAA,IAClC,IAAIssB,EAAM;AAAA,IACV,UAAUA,EAAM;AAAA,IAChB,SAASA,EAAM;AAAA,IACf,WAAW;AAAA,IACX,YAAYA,EAAM,SAAS;AAAA,IAC3B,mBAAAC;AAAA,EAAA;AAEF,EAAArd,IACG,MAAMqX,KAAY,yBAAyB,KAAK,UAAU,CAACvmB,CAAI,CAAC,CAAC,EACjE,KAAK,CAAC0G,MAAQ;AACb,IAAIA,EAAI,WAAW6kB,KACjBhR,EAAQ7T,EAAI,IAAI,IAGhB8T,EAAA;AAAA,EAEJ,CAAC,EACA,MAAM,CAACsO,MACF0D,GAA8B1D,CAAG,IAC5BtO,EAAO,IAAIiS,GAAsB3D,GAAKA,EAAI,QAAQ,GAAG,CAAC,IAE3D4D,GAAoC5D,CAAG,KACzCoD,GAA8BpD,GAAKwD,EAAM,WAAW,WAAW1F,CAAS,GACjEpM,EAAO,IAAImS,GAAuB7D,GAAKhC,IAAiBL,IAAQqC,CAAG,CAAC,KAEzE8D,GAA4C9D,CAAG,IAC1CtO,EAAO,IAAIqS,GAA+B/D,GAAKA,CAAG,CAAC,IAErDtO,EAAO,IAAIsS,GAAehE,CAAG,CAAC,CACtC;AACL,CAAC,GAGUiE,KAAqB,CAAC7d,GAA6Bod,GAA2B1F,MAClF,IAAI,QAAQ,CAACrM,GAASC,MAAW;AACtC,QAAMxa,IAAuC;AAAA,IAC3C,IAAIssB,EAAM;AAAA,IACV,SAASA,EAAM;AAAA,IACf,WAAW;AAAA,EAAA;AAEb,EAAApd,IACG,MAAMqX,KAAY,yBAAyB,KAAK,UAAU,CAACvmB,CAAI,CAAC,CAAC,EACjE,KAAK,CAAC0G,MAAQ;AACb,IAAIA,EAAI,WAAW6kB,KACjBhR,EAAQ7T,EAAI,IAAI,IAGhB8T,EAAA;AAAA,EAEJ,CAAC,EACA,MAAM,CAACsO,MACF0D,GAA8B1D,CAAG,IAC5BtO,EAAO,IAAIiS,GAAsB3D,GAAKA,EAAI,QAAQ,GAAG,CAAC,IAE3D4D,GAAoC5D,CAAG,KACzCoD,GAA8BpD,GAAKwD,EAAM,WAAW,WAAW1F,CAAS,GACjEpM,EAAO,IAAImS,GAAuB7D,GAAKhC,IAAiBL,IAAQqC,CAAG,CAAC,KAEzE8D,GAA4C9D,CAAG,IAC1CtO,EAAO,IAAIqS,GAA+B/D,GAAKA,CAAG,CAAC,IAErDtO,EAAO,IAAIsS,GAAehE,CAAG,CAAC,CACtC;AACL,CAAC;AAWH,eAAekE,GAAsB9d,GAA6B4E,GAA0B;AAC1F,QAAM4X,IAAa,KAAK,KAAK5X,EAAM,SAAS0W,EAAmB,GACzDhB,IAA6B,CAAA;AACnC,MAAI1V,EAAM,WAAW,UAAU,QAAQ,QAAQ,EAAE;AAEjD,WAASgY,IAAI,GAAGA,IAAIJ,GAAYI,KAAK;AACnC,UAAMH,IAASG,IAAItB,IACboB,IAAU9X,EAAM,MAAM6X,GAAQA,IAASnB,EAAmB,GAC1D9jB,IAAM,MAAMwI,EAAA,EAAS,MAAMqX,KAAY,yBAAyB,KAAK,UAAUqF,CAAO,CAAC;AAC7F,IAAApC,EAAU,KAAK9iB,CAAG;AAAA,EACpB;AACA,SAAO8iB;AACT;AAEO,MAAMyD,KAA0B,CAAC/d,GAA6B4E,MAC5D,IAAI,QAAiC,CAACyG,GAASC,MAAW;AAC/D,EAAAwS,GAAsB9d,GAAQ4E,CAAK,EAChC,KAAK,CAAC0V,MAAc;AACnB,QAAI1V,EAAM,WAAW;AACnB,aAAOyG,EAAQ,CAAA,CAAE;AACnB,QAAWiP,EAAU,WAAW;AAC9B,aAAOhP,EAAOgP,CAAS;AACzB,QACEA,EAAU,MAAM,CAAC9iB,MACRA,EAAI,WAAW6kB,EACvB,GACD;AACA,YAAMC,IAAwChC,EAAU,QAAQ,CAACpP,MAAaA,EAAS,IAAI;AAC3F,aAAOG,EAAQiR,CAAY;AAAA,IAC7B;AACE,aAAOhR,EAAOgP,CAAS;AAAA,EAE3B,CAAC,EACA,MAAM,CAACV,MAECtO,EAAOsO,CAAG,CAClB;AACL,CAAC,GCzTUoE,KAAmB;AAAA,EAC9B;AAAA,IACE,MAAM;AAAA,IACN,SAAS;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,IACT,QAAQ;AAAA,EAAA;AAAA,EAEV,EAAE,MAAM,QAAiB,SAAS,GAAC;AAAA,EACnC,EAAE,MAAM,UAAmB,SAAS,CAAC,WAAW,EAAA;AAAA,EAChD,EAAE,MAAM,cAAuB,SAAS,CAAA,GAAI,QAAQ,uCAAA;AAAA,EACpD;AAAA,IACE,MAAM;AAAA,IACN,SAAS;AAAA,IACT,MAAM;AAAA,IACN,QAAQ;AAAA,EAAA;AAAA,EAEV,EAAE,MAAM,aAAsB,SAAS,CAAA,GAAI,QAAQ,sCAAA;AAAA,EACnD,EAAE,MAAM,gBAAyB,SAAS,CAAA,GAAI,QAAQ,yCAAA;AAAA,EACtD,EAAE,MAAM,qBAA8B,SAAS,GAAC;AAAA,EAChD,EAAE,MAAM,4BAAqC,SAAS,GAAC;AAAA,EACvD,EAAE,MAAM,aAAsB,SAAS,GAAC;AAAA,EACxC,EAAE,MAAM,eAAwB,SAAS,GAAC;AAAA,EAC1C,EAAE,MAAM,aAAsB,SAAS,MAAM,QAAQ,sCAAA;AAAA,EACrD,EAAE,MAAM,WAAoB,SAAS,IAAM,QAAQ,oCAAA;AAAA,EACnD,EAAE,MAAM,qBAA8B,SAAS,IAAO,QAAQ,8CAAA;AAAA,EAC9D,EAAE,MAAM,aAAsB,SAAS,KAAA;AAAA,EACvC,EAAE,MAAM,cAAuB,SAAS,CAAA,GAAI,QAAQ,uCAAA;AAAA,EACpD,EAAE,MAAM,WAAoB,SAAS,KAAA;AAAA,EACrC,EAAE,MAAM,aAAsB,SAAS,GAAC;AAAA,EACxC,EAAE,MAAM,yBAAkC,SAAS,CAAA,GAAI,QAAQ,kDAAA;AAAA,EAC/D,EAAE,MAAM,YAAqB,SAAS,GAAC;AAAA,EACvC,EAAE,MAAM,yBAAkC,SAAS,MAAM,MAAM,UAAA;AAAA,EAC/D,EAAE,MAAM,0BAAmC,SAAS,MAAM,MAAM,UAAA;AAAA,EAChE,EAAE,MAAM,iBAA0B,SAAS,MAAM,MAAM,UAAA;AAAA,EACvD,EAAE,MAAM,kBAA2B,SAAS,MAAM,MAAM,UAAA;AAAA,EACxD,EAAE,MAAM,aAAsB,SAAS,MAAM,MAAM,UAAA;AAAA,EACnD,EAAE,MAAM,cAAuB,SAAS,MAAM,MAAM,UAAA;AAAA,EACpD,EAAE,MAAM,cAAuB,SAAS,MAAM,MAAM,UAAA;AAAA,EACpD,EAAE,MAAM,eAAwB,SAAS,MAAM,MAAM,UAAA;AAAA,EACrD,EAAE,MAAM,kBAA2B,SAAS,MAAM,MAAM,UAAA;AAAA,EACxD,EAAE,MAAM,mBAA4B,SAAS,MAAM,MAAM,UAAA;AAAA,EACzD,EAAE,MAAM,mBAA4B,SAAS,MAAM,MAAM,UAAA;AAAA,EACzD,EAAE,MAAM,oBAA6B,SAAS,MAAM,MAAM,UAAA;AAAA,EAC1D,EAAE,MAAM,gBAAyB,SAAS,MAAM,MAAM,UAAA;AAAA,EACtD,EAAE,MAAM,iBAA0B,SAAS,MAAM,MAAM,UAAA;AAAA,EACvD,EAAE,MAAM,gBAAyB,SAAS,MAAM,MAAM,UAAA;AAAA,EACtD,EAAE,MAAM,iBAA0B,SAAS,MAAM,MAAM,UAAA;AAAA,EACvD,EAAE,MAAM,eAAwB,SAAS,MAAM,MAAM,UAAA;AAAA,EACrD,EAAE,MAAM,gBAAyB,SAAS,MAAM,MAAM,UAAA;AAAA,EACtD,EAAE,MAAM,kBAA2B,SAAS,MAAM,MAAM,UAAA;AAAA,EACxD,EAAE,MAAM,mBAA4B,SAAS,MAAM,MAAM,UAAA;AAAA,EACzD,EAAE,MAAM,iBAA0B,SAAS,MAAM,MAAM,gBAAgB,SAAS,iBAAA;AAAA,EAChF,EAAE,MAAM,kBAA2B,SAAS,MAAM,MAAM,gBAAgB,SAAS,IAAM,QAAQ,EAAE,MAAM,KAAK;AAAA,EAC5G,EAAE,MAAM,qBAA8B,SAAS,GAAA;AACjD,GAEMC,KAAmBC,GAAkBF,EAAgB;AAEpD,SAASG,KAAqB;AACnC,QAAM,EAAE,cAAAC,GAAc,YAAAC,EAAA,IAAeC,GAAaN,IAAkBC,IAAkB;AAAA,IACpF,SAAS;AAAA,IACT,QAAQrG;AAAA,IACR,SAASL;AAAAA,EAAA,CACV;AAED,SAAO;AAAA,IACL,cAAA6G;AAAA,IACA,YAAAC;AAAA,EAAA;AAEJ;ACtEO,MAAME,KAAwB;AAAA,EACnC,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,OAAO;AACT,GCYaC,KAAsB1F,GAAY,sCAAsC,MAAM;AACzF,QAAM2F,IAAiB/tB,EAAgC,EAAE,GACnDguB,IAAShuB,EAAI,EAAK,GAClBiuB,IAAoBjuB,EAAe,CAAC,GACpCkuB,IAAeluB,EAA2C,EAAE,GAC5DinB,IAAYjnB,EAAsB0mB,EAAmB,GACrDyH,IAAYnuB,EAAoB,IAAI,GACpCouB,IAAiBpuB,EAAqC,oBAAI,KAAK,GAC/DquB,IAAaruB,EAAI,EAAK,GACtBsuB,IAAWtuB,EAAI,CAAC,GAChBuuB,IAAWvuB,EAAI,CAAC,GAChBwuB,IAAkBxuB,EAAmB,IAAI;AAE/C,WAASyuB,IAAa;AACpB,IAAAT,EAAO,QAAQ;AAAA,EACjB;AAEA,WAASU,IAAa;AACpB,IAAAV,EAAO,QAAQ;AAAA,EACjB;AAEA,WAASW,EAAgBplB,GAA8C;AAErE,QADA2kB,EAAa,QAAQ3kB,GACjBA,EAAM,WAAW,GAAG;AACtB,MAAA0kB,EAAkB,QAAQ;AAC1B;AAAA,IACF;AACA,IAAAA,EAAkB,QAAQ1kB,EAAM,CAAC,EAAE;AAAA,EACrC;AAEA,WAASqlB,EAAcrlB,GAAgB;AACrC,IAAA8kB,EAAW,QAAQ9kB;AAAA,EACrB;AAEA,WAASslB,EAAatlB,GAAyB;AAC7C,IAAA0d,EAAU,QAAQ1d;AAAA,EACpB;AAEA,WAASulB,EAAYvlB,GAAe;AAClC,IAAA+kB,EAAS,QAAQ/kB;AAAA,EACnB;AAEA,WAASwlB,EAAYxlB,GAAe;AAClC,IAAAglB,EAAS,QAAQhlB;AAAA,EACnB;AAEA,WAASylB,EAAQ9a,GAAiC;AAChD,IAAA6Z,EAAe,QAAQ7Z,EAAM,IAAI,CAACrS,OACzB;AAAA,MACL,OAAOA;AAAA,MACP,UAAU;AAAA,MACV,QAAQ;AAAA,IAAA,EAEX;AAAA,EACH;AAEA,WAASotB,EAAW/a,GAAiC;AACnD,UAAMgb,IAAShb,EAAM,IAAI,CAACwY,OACjB;AAAA,MACL,OAAAA;AAAA,MACA,UAAU;AAAA,MACV,QAAQ;AAAA,IAAA,EAEX;AACD,IAAAqB,EAAe,QAAQA,EAAe,MAAM,OAAOmB,CAAM;AAAA,EAC3D;AAEA,WAASC,EAAsBlqB,GAAe;AAC5C,QAAK8oB,EAAe,MAAM9oB,CAAK,KAE3B,GAACopB,EAAW,SAASe,EAAc,SAAS,CAACrB,EAAe,MAAM9oB,CAAK,EAAE,WAM7E;AAAA,UAFA8oB,EAAe,MAAM9oB,CAAK,EAAE,WAAW,CAAC8oB,EAAe,MAAM9oB,CAAK,EAAE,UAEhEopB,EAAW,SAASN,EAAe,MAAM9oB,CAAK,EAAE,UAAU;AAC5D,QAAAoqB,EAAkBpqB,CAAK,GACvBqqB,EAAA,GACAC,EAAcxB,EAAe,MAAM9oB,CAAK,CAAC;AACzC;AAAA,MACF;AAEA,UAAI,CAACopB,EAAW,SAASN,EAAe,MAAM9oB,CAAK,EAAE,UAAU;AAC7D,QAAAsqB,EAAcxB,EAAe,MAAM9oB,CAAK,CAAC;AACzC;AAAA,MACF;AAEA,MAAAuqB,EAAmBzB,EAAe,MAAM9oB,CAAK,EAAE,MAAM,EAAE;AAAA;AAAA,EACzD;AAEA,WAASwqB,EAAiBxqB,GAAe;AACvC,UAAMyqB,IAAiBlB,EAAgB;AACvC,IAAIvpB,MAAUupB,EAAgB,SACzBT,EAAe,MAAM9oB,CAAK,MAC/B8oB,EAAe,MAAM9oB,CAAK,EAAE,SAAS,IACrCupB,EAAgB,QAAQvpB,GACpB,CAAAxB,GAAOisB,CAAc,KACnBA,KAAkB3B,EAAe,UACvCA,EAAe,MAAM2B,CAAc,EAAE,SAAS;AAAA,EAChD;AAEA,WAASL,EAAkBM,GAAqB;AAC9C,UAAMzb,IAAQ6Z,EAAe;AAC7B,aAAS7B,IAAI,GAAGA,IAAIhY,EAAM,QAAQgY;AAChC,MAAIhY,EAAMgY,CAAC,EAAE,YAAYA,MAAMyD,MAC7Bzb,EAAMgY,CAAC,EAAE,WAAW;AAAA,EAG1B;AAEA,WAASoD,IAAgB;AACvB,IAAAlB,EAAe,MAAM,MAAA;AAAA,EACvB;AAEA,WAASmB,EAAcK,GAAgC;AACrD,IAAKxB,EAAe,MAAM,IAAIwB,EAAU,MAAM,EAAE,KAC9CxB,EAAe,MAAM,IAAIwB,EAAU,MAAM,IAAIA,CAAS;AAAA,EAE1D;AAEA,WAASJ,EAAmBK,GAAgB;AAC1C,IAAIzB,EAAe,MAAM,IAAIyB,CAAO,KAClCzB,EAAe,MAAM,OAAOyB,CAAO;AAAA,EAEvC;AAEA,WAASC,IAAkC;AACzC,UAAMC,wBAA0B,IAAA;AAChC,eAAWxmB,KAAS6kB,EAAe,MAAM,OAAA;AACvC,MAAI7kB,EAAM,MAAM,UAAU,MACxBwmB,EAAQ,IAAIxmB,EAAM,MAAM,SAAS,EAAE;AAGvC,WAAO,MAAM,KAAKwmB,CAAO;AAAA,EAC3B;AAEA,WAASC,IAA+B;AACtC,WAAO,MAAM,KAAK5B,EAAe,MAAM,MAAM;AAAA,EAC/C;AAEA,WAAS6B,IAA8C;AACrD,UAAMf,IAAwC,CAAA;AAC9C,eAAW3lB,KAAS6kB,EAAe,MAAM,OAAA;AACvC,MAAAc,EAAO,KAAKgB,GAAM3mB,EAAM,KAAK,CAAC;AAEhC,WAAO2lB;AAAA,EACT;AAEA,WAASiB,EACPxG,GACAyG,GACuB;AACvB,YAAQzG,GAAA;AAAA,MACN,KAAKkE,GAAsB;AACzB,eAAO;AAAA,UACL,MAAMA,GAAsB;AAAA,UAC5B,eAAAuC;AAAA,UACA,OAAOJ,EAAA;AAAA,QAAoB;AAAA,MAE/B,KAAKnC,GAAsB;AACzB,eAAO;AAAA,UACL,MAAMA,GAAsB;AAAA,UAC5B,eAAAuC;AAAA,UACA,OAAOH,EAAA;AAAA,QAAkB;AAAA,MAE7B,KAAKpC,GAAsB;AAAA,MAC3B;AACE,eAAO;AAAA,UACL,MAAMA,GAAsB;AAAA,UAC5B,eAAAuC;AAAA,UACA,OAAON,EAAA;AAAA,QAAuB;AAAA,IAChC;AAAA,EAEN;AAEA,QAAMV,IAAgB9wB,EAAS,MACtB+xB,EAAc,SAAS9B,EAAS,KACxC,GAEK8B,IAAgB/xB,EAAS,MACtB8vB,EAAe,MAAM,IAC7B;AAED,WAAShhB,EAAMkjB,GAAc;AAI3B,IAHAvC,EAAe,QAAQ,CAAA,GACvBC,EAAO,QAAQ,IACfsB,EAAA,GACKgB,MACLrJ,EAAU,QAAQP,IAClByH,EAAU,QAAQ,MAClBE,EAAW,QAAQ,IACnBC,EAAS,QAAQ,GACjBC,EAAS,QAAQ,GACjBC,EAAgB,QAAQ;AAAA,EAC1B;AAEA,QAAM+B,IAAuBjyB,EAAS,MAAM;AAC1C,UAAMyH,IAAQmoB,EAAa,MAAM,KAAK,CAACsC,MAAeA,EAAW,YAAYvC,EAAkB,KAAK;AACpG,WAAIloB,KACGmoB,EAAa,MAAM,CAAC;AAAA,EAC7B,CAAC;AAED,SAAO;AAAA,IACL,mBAAAD;AAAA,IACA,cAAAC;AAAA,IACA,WAAAjH;AAAA,IACA,WAAAkH;AAAA,IACA,YAAAE;AAAA,IACA,UAAAC;AAAA,IACA,UAAAC;AAAA,IACA,eAAA8B;AAAA,IACA,gBAAAjC;AAAA,IACA,QAAAJ;AAAA,IACA,gBAAAD;AAAA,IACA,kBAAA0B;AAAA,IACA,iBAAAU;AAAA,IACA,cAAAtB;AAAA,IACA,iBAAAF;AAAA,IACA,eAAAC;AAAA,IACA,aAAAE;AAAA,IACA,aAAAC;AAAA,IACA,YAAAN;AAAA,IACA,YAAAC;AAAA,IACA,SAAAM;AAAA,IACA,YAAAC;AAAA,IACA,uBAAAE;AAAA,IACA,eAAAG;AAAA,IACA,OAAAliB;AAAA,IACA,sBAAAmjB;AAAA,EAAA;AAEJ,CAAC,GCrPKE,KAA4BzwB,EAA2C,MAAS;AAE/E,SAAS0wB,GAA8BtwB,GAAiC;AAC7E,EAAAqwB,GAA0B,QAAQrwB;AACpC;AAEO,SAASuwB,GAA6BC,IAAqB,WAAW;AAC3E,MACE7uB,EAAY0uB,GAA0B,KAAK,KAC3C1uB,EAAY0uB,GAA0B,MAAM,OAAO,KACnD1uB,EAAY0uB,GAA0B,MAAM,QAAQG,CAAU,CAAC;AAE/D,UAAM,IAAI,MAAM,oEAAoE;AAGtF,SAAO;AAAA,IACL,WAAWH,GAA0B,MAAM,QAAQG,CAAU,EAAE;AAAA,EAAA;AAEnE;AAEO,SAASC,KAAqC;AACnD,MAAI9uB,EAAY0uB,GAA0B,KAAK,KAAK1uB,EAAY0uB,GAA0B,MAAM,OAAO;AACrG,UAAM,IAAI,MAAM,oEAAoE;AAGtF,SAAO;AAAA,IACL,YAAYA,GAA0B,MAAM;AAAA,IAC5C,sBAAsBA,GAA0B,MAAM;AAAA,IACtD,cAAcA,GAA0B,MAAM;AAAA,IAC9C,aAAaA,GAA0B,MAAM;AAAA,EAAA;AAEjD;AC9BO,MAAMK,KAA6B;AAAA,EACxC,MAAM;AAAA,EACN,KAAK;AACP,GAGaC,KAAoCD,GAA2B,MAE/DE,KAAsB5I,GAAY,0BAA0B,MAAM;AAC7E,QAAMsE,IAAQ1sB,EAA+B,IAAI,GAC3CixB,IAAkBjxB,EAAa,EAAE,GACjCmf,IAASnf,EAA2B,IAAI,GACxCuT,IAAUvT,EAAI,EAAK,GACnBkxB,IAAqBlxB,EAAI,EAAK,GAC9BmxB,IAAYnxB,EAAoC+wB,EAAiC,GACjFK,IAAoBpxB,EAAI,EAAK,GAC7B2sB,IAAoB3sB,EAAI,EAAK;AAEnC,WAASqxB,EAASjxB,GAAiC;AACjD,IAAAssB,EAAM,QAAQtsB,GACdusB,EAAkB,QAAQvsB,GAAM,qBAAqB;AAAA,EACvD;AAEA,WAASgN,IAAQ;AACf,IAAAsf,EAAM,QAAQ,MACdC,EAAkB,QAAQ;AAAA,EAC5B;AAEA,SAAO;AAAA,IACL,oBAAAuE;AAAA,IACA,iBAAAD;AAAA,IACA,OAAAvE;AAAA,IACA,SAAAnZ;AAAA,IACA,QAAA4L;AAAA,IACA,WAAAgS;AAAA,IACA,mBAAAC;AAAA,IACA,mBAAAzE;AAAA,IACA,UAAA0E;AAAA,IACA,OAAAjkB;AAAA,EAAA;AAEJ,CAAC;AC9BM,SAASkkB,GAKdC,GACAC,GACAC,GACAC,IAAS,MACTC,IAAW,KACX;AACA,QAAMC,IAAoC5xB,EAAI,oBAAI,KAAK,GACjD6xB,IAAU7xB,EAAI,oBAAI,KAAK,GAEvBklB,IAAM,IAAI4M,MAA6B;AAC3C,UAAMC,wBAAoB,IAAA;AAC1B,aAAS7F,IAAI,GAAGA,IAAI4F,EAAK,QAAQ5F,KAAK;AACpC,YAAM8F,IAAMF,EAAK5F,CAAC;AAClB,UAAI,EAAAzoB,GAAOuuB,CAAG,KAAKjwB,EAAYiwB,CAAG,IAClC;AAAA,YAAI7pB,GAAQ6pB,CAAG,GAAG;AAChB,mBAASC,IAAI,GAAGA,IAAID,EAAI,QAAQC,KAAK;AACnC,kBAAMpwB,IAAOmwB,EAAIC,CAAC;AAClB,YAAIxuB,GAAO5B,CAAI,KAAKE,EAAYF,CAAI,KAC/B+vB,EAAM,MAAM,IAAI/vB,CAAI,KAAGkwB,EAAM,IAAIlwB,CAAI;AAAA,UAC5C;AACA;AAAA,QACF;AACA,QAAK+vB,EAAM,MAAM,IAAII,CAAG,KAAGD,EAAM,IAAIC,CAAG;AAAA;AAAA,IAC1C;AACA,IAAAD,EAAM,QAAQ,CAAChf,MAAO;AACpB,MAAA6e,EAAM,MAAM,IAAI7e,GAAI,EAAE,GAAGye,EAAeze,CAAE,GAAQ,SAAS,IAAS,GACpE8e,EAAQ,MAAM,IAAI9e,CAAE;AAAA,IACtB,CAAC;AAAA,EACH,GAEMmf,IAAY,CAAC9xB,MAAY;AAC7B,IAAIA,EAAKsxB,CAAM,KACbE,EAAM,MAAM,IAAIxxB,EAAKsxB,CAAM,GAAQ,EAAE,GAAGH,EAAiBnxB,CAAI,GAAQ,SAAS,IAAQ;AAAA,EAE1F,GAEM+kB,IAAmB,CAAC/kB,MAAY;AACpC,IAAIA,EAAKsxB,CAAM,KACbE,EAAM,MAAM,IAAIxxB,EAAKsxB,CAAM,GAAQ,EAAE,GAAGtxB,GAAW,SAAS,IAAQ;AAAA,EAExE,GAEM+xB,IAAY,CAAC/xB,MAAc;AAC/B,IAAIwxB,EAAM,MAAM,QAAQD,KACtBC,EAAM,MAAM,MAAA;AAEd,aAAS1F,IAAI,GAAGA,IAAI9rB,EAAK,QAAQ8rB,KAAK;AACpC,MAAA0F,EAAM,MAAM,IAAIxxB,EAAK8rB,CAAC,EAAEwF,CAAM,GAAQ,EAAE,GAAGH,EAAiBnxB,EAAK8rB,CAAC,CAAC,GAAQ,SAAS,IAAQ;AAAA,EAEhG,GAEMkG,IAAgB,CAAC9M,MAAkB;AACvC,aAAS4G,IAAI,GAAGA,IAAI5G,EAAI,QAAQ4G,KAAK;AACnC,MAAA2F,EAAQ,MAAM,OAAOvM,EAAI4G,CAAC,CAAC;AAAA,EAE/B;AAEA,iBAAemG,IAAW;AACxB,QAAIR,EAAQ,MAAM,OAAO,GAAG;AAC1B,YAAMvM,IAAM,MAAM,KAAKuM,EAAQ,KAAK,GAC9B/qB,IAAM,MAAM2qB,EAAcnM,CAAG;AACnC,aAAA8M,EAAc9M,CAAG,GACjB6M,EAAUrrB,CAAG,GACNA;AAAA,IACT;AACA,WAAO,CAAA;AAAA,EACT;AAEA,QAAMwrB,IAAiBC;AAAA,IACrB,YACS,MAAMF,EAAA;AAAA,IAEf;AAAA,IACA,EAAE,SAAS,IAAA;AAAA,EAAK;AAwClB,SAAO;AAAA,IACL,OAAAT;AAAA,IACA,SAAAC;AAAA,IACA,OApCY,MACLS,EAAA;AAAA,IAoCP,gBA7BqB,MACdD,EAAA;AAAA,IA6BP,KAAAnN;AAAA,IACA,WAAAgN;AAAA,IACA,kBAAA/M;AAAA,IACA,KAxBU,CAACpS,MACNA,IACE6e,EAAM,MAAM,IAAI7e,CAAE,IADT;AAAA,IAwBhB,KA9BU,CAACA,MAA6B;AACxC,UAAKA;AACL,eAAO6e,EAAM,MAAM,IAAI7e,CAAE;AAAA,IAC3B;AAAA,IA4BE,OArBY,MACL6e,EAAM,MAAM,MAAA;AAAA,IAqBnB,UAlBe,CAAC7e,MAAsC;AACtD,UAAI,CAACA,EAAI,QAAO;AAChB,YAAMlR,IAAO+vB,EAAM,MAAM,IAAI7e,CAAE;AAC/B,aAAKlR,IACEA,EAAK,UADM;AAAA,IAEpB;AAAA,EAaE;AAEJ;AC3IO,SAAS2wB,KAAqB;AACnC,QAAMC,IAAIzyB,EAAc,EAAE,GAEpB0yB,IAAgB,CAACnpB,MAAwB;AAC7C,IAAAopB,EAAS,SAASppB,CAAK;AAAA,EACzB,GAEMqpB,IAAiB,CAACC,GAAcC,MAAwB;AAC5D,IAAAH,EAAS,UAAUE,IAAOC,IAAQA,CAAK;AAAA,EACzC,GAEMC,IAAgB,CAACvG,GAAsBwG,MAAwB;AACnE,IAAI,CAACvvB,GAAO+oB,CAAK,KAAKA,EAAM,SAAS,KAAGmG,EAAS,WAAWnG,IAAQ,KAAKwG,IAAOttB,GAAU,OAAOA,GAAU,GAAG;AAAA,EAChH,GAEMutB,IAAc,CAAC1pB,MACf2pB,GAAU3pB,CAAK,IACVA,IAAQ,MAAM,MAEhBA,GAGH4pB,IAAiB,CAACC,GAA8B5G,GAAejjB,MAA2C;AAC9G,IAAIsB,GAAStB,CAAK,KAAKA,EAAM,WAAW,KACxCkpB,EAAE,MAAM,KAAK,YAAYW,IAAgB,MAAM5G,IAAQ,OAAOyG,EAAY1pB,CAAK,CAAC;AAAA,EAClF,GAEM8pB,IAAW,CAAC9qB,MAAqD;AACrE,UAAMoB,IAAQpB,EAAO;AACrB,WAAI9E,GAAOkG,CAAK,IACVpB,EAAO,aACTA,EAAO,QAAQA,EAAO,SACfA,EAAO,WAET,OAELsC,GAASlB,CAAK,IACZA,EAAM,WAAW,IACfpB,EAAO,aACTA,EAAO,QAAQA,EAAO,SACfA,EAAO,WAET,OAEF,mBAAmBoB,CAAK,IAE7BxB,GAAQwB,CAAK,IACXA,EAAM,WAAW,IACfpB,EAAO,aACTA,EAAO,QAAQA,EAAO,SACfA,EAAO,WAET,OAEFoB,EAAM,IAAI,CAAC9H,MAAUgJ,GAAShJ,CAAI,IAAI,mBAAmBA,CAAI,IAAIA,CAAK,EAAE,KAAK,GAAG,IAErFS,GAASqH,CAAK,KAAKupB,GAAUvpB,CAAK,IAC7BA,IAGF;AAAA,EACT,GAEMgpB,IAAW,CAAC7tB,GAAayE,MAAqB;AAClD,IAAAkpB,EAAE,MAAM,KAAK3tB,IAAM,MAAMyE,CAAK;AAAA,EAChC;AA0BA,SAAO;AAAA,IACL,eAAAmpB;AAAA,IACA,gBAAAE;AAAA,IACA,eAAAG;AAAA,IACA,gBAAAI;AAAA,IACA,iBAzBsB,CAAC1qB,MAA+B;AACtD,YAAM6qB,IAAc,CAACvxB,EAAY0G,EAAU,QAAQ;AACnD,iBAAWC,KAAcD,GAAW;AAClC,cAAMF,IAASE,EAAUC,CAAU,GAC7B8jB,IAAQjkB,EAAO,SAASG;AAC9B,YAAIH,EAAO;AACT;AAEF,cAAMgB,IAAQ8pB,EAAS9qB,CAAM;AAC7B,YAAI,CAAA9E,GAAO8F,CAAK,GAGhB;AAAA,cAAI+pB,GAAa;AACf,YAAAX,EAASnG,GAAOjjB,CAAK;AACrB;AAAA,UACF;AACA,UAAA4pB,EAAe5qB,EAAO,SAASikB,GAAOjjB,CAAK;AAAA;AAAA,MAC7C;AAAA,IACF;AAAA,IAQE,UAAAopB;AAAA,IACA,YA/BiB,MACV,MAAMF,EAAE,MAAM,KAAK,GAAG;AAAA,EA8B7B;AAEJ;ACtFA,MAAMc,KAAwB,CAACjO,GAA0BgO,MAAiC;AACxF,QAAM,EAAE,eAAAZ,GAAe,gBAAAE,GAAgB,eAAAG,GAAe,YAAAS,GAAY,gBAAAL,GAAgB,UAAAR,EAAA,IAAaH,GAAA,GACzFM,IAAQxN,EAAI;AAClB,SAAAoN,EAAcI,CAAK,GACnBF,EAAe,GAAGE,CAAK,GACvBC,EAAc,MAAM,EAAK,GACrBO,IAAaX,EAAS,MAAMrN,EAAI,KAAK,GAAG,CAAC,MACzB,MAAM,MAAMA,EAAI,KAAK,GAAG,CAAC,GAEtCkO,EAAA;AACT,GAEaC,KAAgB,CAC3BnkB,GACAgW,GACAoO,GACAlkB,IAAuB,CAAA,GACvBpO,GACAqO,GACAnP,IAA8B,IAC9BgzB,IAAc,OAEP,IAAI,QAAQ,CAAC3Y,GAASC,MAAW;AACtC,EAAAtL,EAAA,EACG,IAAIqkB,GAAqBD,GAAalkB,CAAS,IAAI+jB,GAAsBjO,GAAKgO,CAAW,GAAGhzB,CAAO,EACnG,KAAK,CAACwG,MACA8sB,GAAkB9sB,EAAI,MAAM,IAG7BA,EAAI,MAAM,OACL6T,EAAQ7T,EAAI,KAAK,IAAI,IAE1BA,EAAI,WAAW+sB,KACVlZ,EAAQ,IAAS,IAEnBC,EAAO,IAAIsS,IAAgB,IARzBtS,EAAO,IAAIkZ,GAAyBhtB,EAAI,MAAM,CAAC,CASzD,EACA,MAAM,CAACoiB,MACF0D,GAA8B1D,CAAG,IAC5BtO,EAAO,IAAIiS,GAAsB3D,GAAKA,EAAI,QAAQ,GAAG,CAAC,IAE3D4D,GAAoC5D,CAAG,IAClCtO,EAAO,IAAImS,GAAuB7D,GAAK9nB,GAAQqO,GAAQyZ,CAAG,CAAC,IAEhE6K,GAA0C7K,CAAG,IACxCtO,EAAO,IAAIoZ,GAA6B9K,GAAK9nB,GAAQqO,GAAQyZ,CAAG,CAAC,IAEtE8D,GAA4C9D,CAAG,IAC1CtO,EAAO,IAAIqS,GAA+B/D,GAAKA,CAAG,CAAC,IAGrDtO,EAAO,IAAIsS,GAAehE,CAAG,CAAC,CACtC;AACL,CAAC,GCpDU+K,KAAuB,CAAC3qB,GAAwBb,MAAiC;AAC5F,QAAM,EAAE,eAAAiqB,GAAe,gBAAAE,GAAgB,eAAAG,GAAe,YAAAS,GAAY,iBAAAU,EAAA,IAAoB1B,GAAA;AACtF,SAAAE,EAAcppB,EAAW,WAAW,GACpCspB,EAAetpB,EAAW,MAAMA,EAAW,WAAW,GACtDypB,EAAczpB,EAAW,QAAQA,EAAW,UAAU,GACtD4qB,EAAgBzrB,CAAS,GAClB+qB,EAAA;AACT,GAKaW,KAAe,CAC1B7kB,GACAokB,GACAlkB,IAAuB,CAAA,GACvBlG,GACAb,GACArH,GACAqO,GACAnP,IAA8B,CAAA,MAEvB,IAAI,QAAQ,CAACqa,GAASC,MAAW;AACtC,QAAMwZ,IAAYryB,EAAY0G,EAAU,QAAQ,IAAI,KAAK;AACzD,EAAA6G,EAAA,EACG;AAAA,IACCqkB,GAAqBD,GAAalkB,CAAS,IAAI4kB,IAAYH,GAAqB3qB,GAAYb,CAAS;AAAA,IACrGnI;AAAA,EAAA,EAED,KAAK,CAACwG,MAAQ;AACb,QAAI,CAAC8sB,GAAkB9sB,EAAI,MAAM;AAC/B,aAAO8T,EAAO,IAAIkZ,GAAyBhtB,EAAI,MAAM,CAAC;AAExD,QAAIA,EAAI,MAAM;AACZ,YAAMutB,IAAUvtB,EAAI;AACpB,aAAIwtB,GAA0BD,CAAO,IACnC/qB,EAAW,cAAcxC,EAAI,KAAK,cACzBytB,GAAkBF,CAAO,MAClC/qB,EAAW,aAAa+qB,EAAQ,aAElC/qB,EAAW,mBAAmBxC,EAAI,KAAK,KAAK,QACrC6T,EAAQ7T,EAAI,KAAK,IAAI;AAAA,IAC9B;AACA,WAAIA,EAAI,WAAW+sB,KACVlZ,EAAQ,CAAA,CAAO,IAEjBC,EAAO,IAAIsS,IAAgB;AAAA,EACpC,CAAC,EACA,MAAM,CAAChE,MACF0D,GAA8B1D,CAAG,IAC5BtO,EAAO,IAAIiS,GAAsB3D,GAAKA,EAAI,QAAQ,GAAG,CAAC,IAE3D4D,GAAoC5D,CAAG,IAClCtO,EAAO,IAAImS,GAAuB7D,GAAK9nB,GAAQqO,GAAQyZ,CAAG,CAAC,IAEhE6K,GAA0C7K,CAAG,IACxCtO,EAAO,IAAIoZ,GAA6B9K,GAAK9nB,GAAQqO,GAAQyZ,CAAG,CAAC,IAEtE8D,GAA4C9D,CAAG,IAC1CtO,EAAO,IAAIqS,GAA+B/D,GAAKA,CAAG,CAAC,IAGrDtO,EAAO,IAAIsS,GAAehE,CAAG,CAAC,CACtC;AACL,CAAC,GC1EGvC,KAAY,kBACZ6N,KAAiB7N,KAAY,4BACtBE,KAAS,UAET4N,KAAuB,CAACnlB,GAA6Bga,GAAqBhE,MACrFmO;AAAA,EACEnkB;AAAA,EACAgW;AAAA,EACAkP,KAAiB;AAAA,EACjB;AAAA,IACE,aAAAlL;AAAA,EAAA;AAAA,EAEFpC;AAAA,EACAL;AAAAA,EACA,CAAA;AAAA,EACA;AACF,GAEW6N,KAAqB,CAACplB,GAA6Bga,MAC9D2B,GAA6B3b,GAAQ4X,IAAiBL,IAAQ2N,IAAgB,EAAE,aAAAlL,GAAa,GAElFqL,KAAkB,CAC7BrlB,GACAga,GACAhgB,GACAb,MAEA0rB;AAAA,EACE7kB;AAAA,EACAklB;AAAAA,EACA;AAAA,IACE,aAAAlL;AAAA,EAAA;AAAA,EAEFhgB;AAAA,EACAb;AAAA,EACAye;AAAA,EACAL;AACF,GAEW+N,KAAe,CAACtlB,GAA6BlP,MACxDy0B,GAAwBvlB,GAAQlP,GAAMumB,IAAW,CAAA,GAAIO,IAAiBL,EAAM,GClDxEiO,KAAoB90B,EAAe,CAAC;AAEnC,SAAS+0B,KAA0B;AACxC,SAAO;AAAA,IACL,mBAAAD;AAAA,EAAA;AAEJ;ACFA,MAAMvD,KAAmB,CAACyD,OAAyC;AAAA,EACjE,IAAIA,EAAO;AAAA,EACX,MAAMA,EAAO;AAAA,EACb,YAAYA,EAAO;AAAA,EACnB,UAAUA,EAAO,MAAM;AACzB,IAEMxD,KAAiB,CAACze,OACf,EAAE,IAAAA,GAAQ,MAAM,IAAI,YAAY,IAAI,UAAU,GAAA,IAGjD,EAAA,OAAE6e,IAAA,SAAOC,IAAA,OAAS5M,IAAA,KAAOC,eAAKgN,IAAA,kBAAW/M,IAAA,KAAkB8P,IAAA,KAAKC,IAAA,UAAKC,OAAa7D,GAItFC,IAAkBC,IAAgB,CAAClM,MAAQ;AAC3C,QAAM,EAAE,mBAAAwP,EAAA,IAAsBC,GAAA,GACxB,EAAE,WAAAhO,EAAA,IAAc4J,GAAA;AACtB,SAAO8D,GAAqB1N,GAAW+N,EAAkB,OAAOxP,CAAG;AACrE,CAAC,GAEY8P,KAAsB,OAC1B;AAAA,EACL,0BAA0BlD;AAAAA,EAC1B,iCAAiC/M;AAAAA,EACjC,oBAAoBD;AAAAA,EACpB,oBAAoBD;AAAAA,EACpB,sBAAsB4M;AAAAA,EACtB,eAAeD;AAAAA,EACf,iBAAiBqD;AAAAA,EACjB,iBAAiBC;AAAAA,EACjB,sBAAsBC;AAAA,IAIbE,KAA2C,OAC/C;AAAA,EAAA,OACLpQ;AAAAA,EAAA,KACAC;AAAAA,EAAA,kBACAC;AAAA,IClCEwB,KAAY,mBACZ6N,KAAiB7N,KAAY,4BACtBE,KAAS,WAETyO,KAAwB,CAAChmB,GAA6Bga,GAAqBhE,MACtFmO;AAAA,EACEnkB;AAAA,EACAgW;AAAA,EACAkP,KAAiB;AAAA,EACjB,EAAE,aAAAlL,EAAA;AAAA,EACFpC;AAAA,EACAL;AAAAA,EACA,CAAA;AAAA,EACA;AACF,GAEW0O,KAAsB,CAACjmB,GAA6Bga,MAC/D2B,GAA8B3b,GAAQ4X,IAAiBL,IAAQ2N,IAAgB,EAAE,aAAAlL,GAAa,GAKnFkM,KAAmB,CAC9BlmB,GACAga,GACAhgB,GACAb,MACG0rB,GAA2B7kB,GAAQklB,IAAgB,EAAE,aAAAlL,EAAA,GAAehgB,GAAYb,GAAWye,IAAiBL,EAAM,GAE1G4O,KAAgB,CAACnmB,GAA6BlP,MACzDy0B,GAAyBvlB,GAAQlP,GAAMumB,IAAW,CAAA,GAAIO,IAAiBL,EAAM,GCnCzE0K,KAAmB,CAACmE,OAA4C;AAAA,EACpE,IAAIA,EAAQ;AAAA,EACZ,MAAMA,EAAQ;AAChB,IAEMlE,KAAiB,CAACze,OACf,EAAE,IAAAA,GAAQ,MAAM,GAAA,IAGnB,EAAA,OAAE6e,IAAO,SAAAC,IAAA,OAAS5M,IAAA,KAAOC,eAAKgN,IAAW,kBAAA/M,IAAA,KAAkB8P,IAAA,KAAKC,IAAA,UAAKC,OAAa7D,GAItFC,IAAkBC,IAAgB,CAAClM,MAAQ;AAC3C,QAAM,EAAE,mBAAAwP,EAAA,IAAsBC,GAAA,GACxB,EAAE,WAAAhO,EAAA,IAAc4J,GAAA;AACtB,SAAO2E,GAAsBvO,GAAW+N,EAAkB,OAAOxP,CAAG;AACtE,CAAC,GAEYqQ,KAAuB,OAC3B;AAAA,EACL,2BAA2BzD;AAAAA,EAC3B,kCAAkC/M;AAAA,EAClC,qBAAqBD;AAAAA,EACrB,qBAAqBD;AAAAA,EACrB,uBAAuB4M;AAAA,EACvB,gBAAgBD;AAAAA,EAChB,kBAAkBqD;AAAAA,EAClB,kBAAkBC;AAAAA,EAClB,uBAAuBC;AAAA,IAIdS,KAAyC,OAC7C;AAAA,EAAA,OACL3Q;AAAAA,EAAA,KACAC;AAAAA,EACA,kBAAAC;AAAA,ICvBS0Q,KAAe,CAC1BvmB,GACAwmB,IAAoC,CAAA,GACpCpC,GACAlkB,IAAuB,CAAA,GACvBpO,GACAqO,GACAnP,IAA8B,CAAA,MAEvB,IAAI,QAAQ,CAACqa,GAASC,MAAW;AACtC,EAAAtL,EAAA,EACG,IAAIqkB,GAAqBD,GAAalkB,CAAS,GAAG,KAAK,UAAUsmB,CAAM,GAAGx1B,CAAO,EACjF,KAAK,CAACwG,MACA8sB,GAAkB9sB,EAAI,MAAM,IAG7BA,EAAI,OACC6T,EAAQ7T,EAAI,IAAI,IAErBA,EAAI,WAAW+sB,KACVlZ,EAAQ,IAAS,IAEnBC,EAAO,IAAIsS,IAAgB,IARzBtS,EAAO,IAAIkZ,GAAyBhtB,EAAI,MAAM,CAAC,CASzD,EACA,MAAM,CAACoiB,MACF0D,GAA8B1D,CAAG,IAC5BtO,EAAO,IAAIiS,GAAsB3D,GAAKA,EAAI,QAAQ,GAAG,CAAC,IAE3D4D,GAAoC5D,CAAG,IAClCtO,EAAO,IAAImS,GAAuB7D,GAAK9nB,GAAQqO,GAAQyZ,CAAG,CAAC,IAEhE6K,GAA0C7K,CAAG,IACxCtO,EAAO,IAAIoZ,GAA6B9K,GAAK9nB,GAAQqO,GAAQyZ,CAAG,CAAC,IAEtE8D,GAA4C9D,CAAG,IAC1CtO,EAAO,IAAIqS,GAA+B/D,GAAKA,CAAG,CAAC,IAGrDtO,EAAO,IAAIsS,GAAehE,CAAG,CAAC,CACtC;AACL,CAAC,GChDGvC,KAAY,gBACLE,KAAS,QAETkP,KAAwB,CAACzmB,GAA6BgW,MACjEmO,GAAyBnkB,GAAQgW,GAAKqB,IAAW,IAAIO,IAAiBL,EAAM,GAKjEmP,KAAmB,CAAC1mB,GAA6BhG,GAAwBb,MACpF0rB,GAAwB7kB,GAAQqX,IAAW,CAAA,GAAIrd,GAAYb,GAAWye,IAAiBL,EAAM,GAElFoP,KAAsB,CAAC3mB,MAClC2b,GAA2B3b,GAAQ4X,IAAiBL,IAAQF,EAAS,GAE1DuP,KAAgB,CAAC5mB,GAA6ByD,GAAY3S,MACrEy1B,GAAwCvmB,GAAQlP,GAAMumB,KAAY,QAAQ,EAAE,IAAA5T,EAAA,GAAMmU,IAAiBL,EAAM,GAE9FsP,KAAe,CAAC7mB,GAA6ByD,MACxDrD,GAAqBJ,GAAQqX,KAAY,QAAQ,EAAE,IAAA5T,EAAA,GAAMmU,IAAiBL,EAAM,GCzB5E0K,KAAmB,CAAC6E,OACjB,EAAE,IAAIA,EAAO,IAAI,OAAOA,EAAO,OAAO,QAAQA,EAAO,QAAQ,QAAQA,EAAO,OAAA,IAG/E5E,KAAiB,CAACze,OACf,EAAE,IAAAA,GAAQ,OAAO,IAAI,QAAQ,EAAE,WAAW,IAAI,UAAU,IAAI,UAAU,GAAA,GAAM,QAAQ,EAAE,OAAO,IAAI,MAAM,KAAG,IAG7G,EAAE,OAAA6e,WAAO3M,IAAA,KAAOC,IAAK,WAAAgN,IAAW,KAAA+C,IAAK,KAAAC,IAAK,UAAAC,OAAa7D;AAAA,EAC3DC;AAAA,EACAC;AAAA,EACA,CAAClM,MAAqB;AACpB,UAAM,EAAE,WAAAyB,EAAA,IAAc4J,GAAA;AACtB,WAAOoF,GAAsBhP,GAAWzB,CAAG;AAAA,EAC7C;AACF,GAEa+Q,KAAoB,OACxB;AAAA,EACL,wBAAwBnE;AAAA,EACxB,kBAAkBhN;AAAAA,EAClB,kBAAkBD;AAAAA,EAClB,aAAa2M;AAAA,EACb,eAAeqD;AAAA,EACf,eAAeC;AAAA,EACf,oBAAoBC;AAAA,IC9BlBmB,KAAct2B,EAAI,EAAK,GACvBu2B,KAAev2B,EAAI,EAAK;AAEvB,SAASw2B,KAAa;AAC3B,QAAMC,IAAoB,MAAM;AAC9B,IAAAH,GAAY,QAAQI,EAAA,IAAqBC,EAAA;AAAA,EAC3C,GAEMA,IAAkB,MAAM;AAC5B,IAAAL,GAAY,QAAQ;AAAA,EACtB,GAEMI,IAAmB,MAAM;AAC7B,IAAAJ,GAAY,QAAQ;AAAA,EACtB,GAEMM,IAAqB,MAAM;AAC/B,IAAAL,GAAa,QAAQM,EAAA,IAAsBC,EAAA;AAAA,EAC7C,GAEMA,IAAmB,MAAM;AAC7B,IAAAP,GAAa,QAAQ;AAAA,EACvB,GAEMM,IAAoB,MAAM;AAC9B,IAAAN,GAAa,QAAQ;AAAA,EACvB;AAEA,SAAO;AAAA,IACL,aAAAD;AAAA,IACA,cAAAC;AAAA,IACA,mBAAAE;AAAA,IACA,iBAAAE;AAAA,IACA,kBAAAD;AAAA,IACA,oBAAAE;AAAA,IACA,kBAAAE;AAAA,IACA,mBAAAD;AAAA,EAAA;AAEJ;ACjBA,MAAM,cAAEvtB,GAAA,IAAekI,GAAculB,EAAkB,GACjDC,KAAgBh3B,EAAI,EAAK;AAExB,SAASi3B,GACdrG,IAAa,WACbsG,GACA;AACA,QAAM,EAAE,WAAAnQ,EAAA,IAAc4J,GAA6BC,CAAU,GAEvDuG,IAAmBrJ,GAAA,GACnB,EAAE,eAAAuC,GAAe,gBAAAjC,GAAgB,gBAAAL,GAAgB,QAAAC,EAAA,IAAWoJ,GAAYD,CAAgB,GACxFE,IAAmBrG,GAAA,GACnB,EAAE,kBAAA8F,EAAA,IAAqBN,GAAA,GAEvB,EAAE,mBAAA7vB,EAAA,IAAsBC,GAAA,GACxB,EAAE,YAAA+mB,GAAY,cAAAD,EAAA,IAAiBD,GAAA,GAE/B6J,IAAoB,CAACrQ,GAA6BkH,MAA8B;AACpF,QAAIA,MAAc,IAAM;AACtB,MAAAR,EAAW,OAAO,CAAClH,GAAa,KAAK,GACrCkH,EAAW,YAAY;AACvB;AAAA,IACF;AACA,IAAAA,EAAW,OAAO,CAAC1G,CAAS,GAC5B0G,EAAW,YAAY;AAAA,EACzB,GAEM4J,IAA0BhF,GAAc,YAAY;AACxD,UAAMiF,EAAA;AAAA,EACR,CAAC,GAEKA,IAAiB,YAAY;AACjC,IAAAF,EAAkBH,EAAiB,WAAWA,EAAiB,SAAS;AACxE,UAAM,EAAE,cAAAM,EAAA,IAAiB1M,GAAkBhE,GAAWoQ,EAAiB,iBAAiB;AACxF,QAAI;AACF,MAAAA,EAAiB,WAAA,GACjBA,EAAiB,QAAQ,MAAMM,EAAanuB,IAAYqkB,GAAYD,CAAY,CAAC;AAAA,IACnF,SAAS3mB,GAAO;AACd,MAAAJ,EAAkBI,CAAK;AAAA,IACzB,UAAA;AACE,MAAAowB,EAAiB,WAAA;AAAA,IACnB;AAAA,EACF,GAEMO,IAAgB,YAAY;AAChC,QAAIP,EAAiB,OAAQ;AAC7B7tB,IAAAA,GAAW,MAAM,OAAOA,GAAW,MAAM,OAAO,GAChDguB,EAAkBH,EAAiB,WAAWA,EAAiB,SAAS;AACxE,UAAM,EAAE,cAAAM,EAAA,IAAiB1M,GAAkBhE,GAAWoQ,EAAiB,iBAAiB;AACxF,QAAI;AACF,MAAAA,EAAiB,WAAA,GACjBA,EAAiB,WAAW,MAAMM,EAAanuB,IAAYqkB,GAAYD,CAAY,CAAC;AAAA,IACtF,SAAS3mB,GAAO;AACd,MAAAJ,EAAkBI,CAAK;AAAA,IACzB,UAAA;AACE,MAAAowB,EAAiB,WAAA;AAAA,IACnB;AAAA,EACF,GAEM,EAAE,oBAAAQ,GAAoB,oBAAAC,EAAA,IAAuBxC,GAAA,GAC7C,EAAE,qBAAAyC,GAAqB,qBAAAC,EAAA,IAAwBnC,GAAA,GAC/C,EAAE,kBAAAnf,GAAkB,kBAAAC,EAAA,IAAqB4f,GAAA,GAEzCrwB,IAAc,OAAO5F,GAAyC4mB,MAAyB;AAC3F,UAAM,EAAE,mBAAA8N,EAAA,IAAsBC,GAAA;AAC9B,IAAA+B,EAAA,GACAK,EAAiB,sBAAsB/2B,EAAK,KAAK,GACjD+2B,EAAiB,iBAAiB/2B,EAAK,KAAK,GAC5C42B,GAAc,QAAQ;AACtB,QAAI;AACF,YAAMtK,IAAQ,MAAMxB,GAAWnE,GAAW3mB,EAAK,OAAO;AACtD,MAAA00B,EAAkB,QAAQ9N,GAC1B2Q,EAAmBjL,EAAM,OAAO,GAChCmL,EAAoBnL,EAAM,QAAQ,GAClClW,EAAiBkW,EAAM,YAAYA,EAAM,SAAS,GAClDkL,EAAA,GACAE,EAAA,GACArhB,EAAA,GACK1U,EAAYm1B,CAAsB,OAA0BxK,CAAK,GACtE2K,EAAiB,SAAS3K,CAAK;AAAA,IACjC,SAAS3W,GAAG;AACV,MAAApP,EAAkBoP,CAAC;AAAA,IACrB,UAAA;AACE,MAAAihB,GAAc,QAAQ;AAAA,IACxB;AAAA,EACF,GAEM,EAAE,UAAAxuB,EAAA,IAAauvB,GAAA,GAEfC,IAAiB,YAAY;AACjC,IAAAxvB,EAASmlB,GAAYD,CAAY,GACjC4J,EAAkBH,EAAiB,WAAWA,EAAiB,SAAS,GACxE7tB,GAAW,MAAM,OAAO,GACxB,MAAMiuB,EAAA;AAAA,EACR,GAEMnqB,IAAQ,YAAY;AACxB,IAAA5E,EAASmlB,GAAYD,CAAY,GACjCpkB,GAAW,MAAM,OAAO,GACxB6tB,EAAiB,MAAM,EAAI,GAC3BE,EAAiB,MAAA;AAAA,EACnB,GAEMY,IAAmB,CACvB/J,GACAjH,GACAkH,GACAE,GACAC,GACAC,MACS;AACT,IAAA4I,EAAiB,cAAA,GACjBA,EAAiB,aAAalQ,CAAS,GACvCkQ,EAAiB,gBAAgBjJ,CAAY,GAC7CiJ,EAAiB,cAAc9I,CAAU,GACzC8I,EAAiB,YAAY7I,CAAQ,GACrC6I,EAAiB,YAAY5I,CAAQ,GACrC4I,EAAiB,YAAYhJ;AAAA,EAC/B;AAEA,SAAO;AAAA,IACL,WAAApH;AAAA,IACA,YAAA4G;AAAA,IACA,cAAAD;AAAA,IACA,eAAA2C;AAAA,IACA,gBAAAjC;AAAA,IAAA,YACA9kB;AAAAA,IACA,QAAA0kB;AAAA,IACA,eAAAgJ;AAAA,IACA,gBAAAjJ;AAAA,IACA,iBAAiBoJ,EAAiB;AAAA,IAClC,aAAAnxB;AAAA,IACA,yBAAAuxB;AAAA,IACA,eAAAG;AAAA,IACA,gBAAAM;AAAA,IACA,OAAA5qB;AAAA,IACA,kBAAA6qB;AAAA,EAAA;AAEJ;AC7JA,MAAMC,KAAe,KACfC,KAAyB;AAExB,SAASC,GAAoBv2B,GAA0C;AAC5E,QAAM6qB,IAAQpuB,EAAiC,MACtCuD,EAAK,MAAM,KACnB,GAEKolB,IAAY3oB,EAAS,MAClBouB,EAAM,MAAM,WAAW,SAC/B,GAEK2L,IAAc/5B,EAAS,MACpBouB,EAAM,MAAM,WAAW,WAC/B,GAEK4L,IAAkBh6B,EAAS,MAC3BouB,EAAM,MAAM,YAAYA,EAAM,MAAM,SAAS,SAASA,EAAM,MAAM,SAAS,MAAM,aAC5E;AAAA,IACL,KAAKA,EAAM,MAAM,SAAS,MAAM,WAAW;AAAA,IAC3C,OAAOA,EAAM,MAAM,SAAS,MAAM,WAAW;AAAA,IAC7C,QAAQA,EAAM,MAAM,SAAS,MAAM,WAAW;AAAA,IAC9C,SAASyL;AAAA,EAAA,IAGN;AAAA,IACL,KAAK;AAAA,IACL,OAAO;AAAA,IACP,QAAQD;AAAAA,IACR,SAASC;AAAA,EAAA,CAEZ,GAEKI,IAAuBj6B,EAAS,MAChCouB,EAAM,MAAM,YAAYA,EAAM,MAAM,SAAS,SAASA,EAAM,MAAM,SAAS,MAAM,cAC5E;AAAA,IACL,KAAKA,EAAM,MAAM,SAAS,MAAM,YAAY;AAAA,IAC5C,OAAOA,EAAM,MAAM,SAAS,MAAM,YAAY;AAAA,IAC9C,QAAQA,EAAM,MAAM,SAAS,MAAM,YAAY;AAAA,IAC/C,SAASyL;AAAA,EAAA,IAGN;AAAA,IACL,KAAK;AAAA,IACL,OAAO;AAAA,IACP,QAAQD;AAAAA,IACR,SAASC;AAAA,EAAA,CAEZ;AAED,SAAO;AAAA,IACL,OAAAzL;AAAA,IACA,WAAAzF;AAAA,IACA,aAAAoR;AAAA,IACA,iBAAAC;AAAA,IACA,sBAAAC;AAAA,EAAA;AAEJ;AC7DA,MAAAC,KAAe,+03ECAfC,KAAe,0pCCAfC,KAAe,uyBCAfC,KAAe,mkDCAfC,KAAe,+lDCAfC,KAAe,ujCCAfC,KAAe,4mECAfC,KAAe,gvCCAfC,KAAe,yqECSFC,KAAoB;AAAA,EAC/B;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQJ;AAAA,EAAA;AAAA,EAEV;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQJ;AAAA,EAAA;AAAA,EAEV;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQG;AAAA,EAAA;AAAA,EAEV;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQF;AAAA,EAAA;AAAA,EAEV;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQC;AAAA,EAAA;AAEZ,GACaO,KAAaJ,IACbK,KAAWH,IACXI,KAAWL,IACXM,KAAgB;;;;;;;;AC/B7B,UAAMn7B,IAAQC,GAWR,EAAE,EAAA,IAAMC,EAAA,GAERk7B,IAAkB,CAACC,GAAiBC,MAAqB;AAC7D,UAAI,EAAAt7B,EAAM,oBAAoB,UAAU,KAAKA,EAAM,oBAAoB,WAAW,IAGlF;AAAA,YAAIA,EAAM,oBAAoB,QAAQm7B,MAAiBn7B,EAAM,oBAAoB,SAASm7B,IAAe;AACvG,UAAAE,EAAM,KAAKH,EAAQ,GACnBI,EAAO,KAAK,EAAE,qCAAqC,CAAC;AACpD;AAAA,QACF;AACA,YAAIt7B,EAAM,cAAcuoB,GAAa;AACrC,mBAASyF,IAAI,GAAGA,IAAI+M,GAAkB,QAAQ/M;AAC5C,gBACEhuB,EAAM,oBAAoB,UAAU+6B,GAAkB/M,CAAC,EAAE,SACzDhuB,EAAM,oBAAoB,WAAW+6B,GAAkB/M,CAAC,EAAE,QAC1D;AACA,cAAAqN,EAAM,KAAKN,GAAkB/M,CAAC,EAAE,MAAM,GACtCsN,EAAO,KAAK,EAAEP,GAAkB/M,CAAC,EAAE,MAAM,CAAC;AAC1C;AAAA,YACF;AAAA;AAAA;AAAA,IAEJ,GAEMuN,IAAqB,CAACF,GAAiBC,MAAqB;AAChE,YAAM1Q,IAAiBX,GAAA;AACvB,eAAS+D,IAAI,GAAGA,IAAIhuB,EAAM,oBAAoB,sBAAsB,QAAQguB,KAAK;AAC/E,cAAMwN,IACJ5Q,EAAe,aAAa,qBAAqB5qB,EAAM,oBAAoB,sBAAsBguB,CAAC,CAAC,GAAG;AACxG,QAAIwN,EAAS,SAAS,KAAK,CAACH,EAAM,SAASG,CAAQ,MACjDH,EAAM,KAAKG,CAAQ,GACnBF,EAAO;AAAA,UACL1Q,EAAe,aAAa,qBAAqB5qB,EAAM,oBAAoB,sBAAsBguB,CAAC,CAAC,EAAE;AAAA,QAAA;AAAA,MAG3G;AAAA,IACF,GAEM9rB,IAAO9B,EAAS,MAAM;AAC1B,YAAMi7B,IAAkB,CAAA,GAClBC,IAAmB,CAAA;AAEzB,aAAIt7B,EAAM,oBAAoB,UAAU,SAAS,MAC/Cq7B,EAAM,KAAKL,EAAU,GACrBM,EAAO,KAAK,EAAE,uCAAuC,CAAC,IAEpDt7B,EAAM,oBAAoB,YAC5Bq7B,EAAM,KAAKJ,EAAQ,GACnBK,EAAO,KAAK,EAAE,qCAAqC,CAAC,IAEtDF,EAAgBC,GAAOC,CAAM,GAC7BC,EAAmBF,GAAOC,CAAM,GAEzB,EAAE,OAAAD,GAAO,QAAAC,EAAA;AAAA,IAClB,CAAC;8BAIC56B,EAaM,OAAA;AAAA,MAXJ,OAAKmE,GAAA,CAAC,2BAAyB,EAAA,oCAAA,CACgB5E,EAAA,iBAAe,CAAA;AAAA,IAAA;OAE9DQ,EAAA,EAAA,GAAAC,EAOC0F,aANyBlE,EAAA,MAAK,OAAK,CAA1ByB,GAAMoD,YADhBrG,EAOC,OAAA;AAAA,QALE,KAAKiD;AAAA,QACN,OAAM;AAAA,QACL,KAAKA;AAAA,QACN,KAAI;AAAA,QACH,OAAOzB,EAAA,MAAK,OAAO6E,CAAK,KAAA;AAAA,MAAA;;WAVnB7E,EAAA,MAAK,MAAM,SAAM,CAAA;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;ACtE7B,UAAMlC,IAAQC,GA4BR0B,IAAOC,GAIP65B,IAAU,MAAM;AACpB,MAAA95B,EAAK,OAAO;AAAA,IACd,GAEMwL,IAAO/M,EAAS,MAAM;AAC1B,UAAIJ,EAAM,gBAAgBqoB,GAAe,SAAU,QAAO;AAC1D,cAAQroB,EAAM,WAAA;AAAA,QACZ,KAAKuoB,GAAa;AAChB,iBAAOvoB,EAAM,gBAAgBqoB,GAAe,WAAW,cAAc;AAAA,QACvE,KAAKE,GAAa;AAChB,iBAAOvoB,EAAM,gBAAgBqoB,GAAe,WAAW,aAAa;AAAA,QACtE,KAAKE,GAAa;AAChB,iBAAOvoB,EAAM,gBAAgBqoB,GAAe,WAAW,cAAc;AAAA,QACvE,KAAKE,GAAa;AAChB,iBAAOvoB,EAAM,gBAAgBqoB,GAAe,WAAW,cAAc;AAAA,QACvE;AACE,iBAAO;AAAA,MAAA;AAAA,IAEb,CAAC,GAEKqT,IAAct7B,EAAS,MACpByD,EAAY7D,EAAM,GAAG,IAAI27B,KAAkB37B,EAAM,GACzD,GAEK47B,IAAmBx7B,EAAS,MAC5B,EAAAJ,EAAM,cAAcuoB,GAAa,SAASvoB,EAAM,IAErD;qBAKSC,EAAA,gBAAgB6E,EAAAujB,EAAA,EAAe,YAAYpoB,EAAA,YADnDS,EAqCM,OAAA;AAAA;MAnCJ,OAAM;AAAA,MACL,mBAAgBT,EAAA,QAAK,MAAA;AAAA,IAAA;MAEtBgB,EASC,OAAA;AAAA,QARC,OAAM;AAAA,QACL,KAAKy6B,EAAA;AAAA,QACL,OAAOz7B,EAAA;AAAA,QACP,QAAQA,EAAA;AAAA,QACT,KAAI;AAAA,QACJ,SAAQ;AAAA,QACP,gCAA6BA,EAAA,eAAe;AAAA,QAC5C,WAASw7B;AAAA,MAAA;MAGJG,EAAA,SADRn7B,EAAA,GAAAC,EAgBM,OAhBNuF,IAgBM;AAAA,QAZJhF,EAWM,OAAA;AAAA,UAVJ,OAAM;AAAA,UACL,qBAAkBhB,EAAA,WAAQ,IAAA,MAAA;AAAA,QAAA;UAGnBkN,EAAA,MAAK,eADb5M,EAMEQ,IAAA;AAAA;YAJC,MAAMd,EAAA;AAAA,YACN,MAAMkN,EAAA;AAAA,YACN,OAAOlN,EAAA;AAAA,YACR,OAAM;AAAA,UAAA;;;MAKJA,EAAA,iBAAiBA,EAAA,4BADzBM,EAIEs7B,IAAA;AAAA;QAFC,yBAAuB57B,EAAA;AAAA,QACvB,cAAYA,EAAA;AAAA,MAAA;mBAGjBS,EA4BM,OAAA;AAAA;MA1BH,OAAKo7B,GAAA,CAAA,EAAA,QAAY77B,EAAA,iBAAc,MAAA,iBAA0BA,EAAA,mBAC1D,EAAA,OAAA,OAAA,CAAmB,CAAA;AAAA,MACnB,OAAM;AAAA,IAAA;MAGE27B,EAAA,SADRn7B,EAAA,GAAAC,EAgBM,OAhBN6F,IAgBM;AAAA,QAZJtF,EAWM,OAAA;AAAA,UAVJ,OAAM;AAAA,UACL,qBAAkBhB,EAAA,WAAQ,IAAA,MAAA;AAAA,QAAA;UAGnBkN,EAAA,MAAK,eADb5M,EAMEQ,IAAA;AAAA;YAJC,MAAMd,EAAA;AAAA,YACN,MAAMkN,EAAA;AAAA,YACN,OAAOlN,EAAA;AAAA,YACR,OAAM;AAAA,UAAA;;;MAKJA,EAAA,iBAAiBA,EAAA,4BADzBM,EAIEs7B,IAAA;AAAA;QAFC,yBAAuB57B,EAAA;AAAA,QACvB,cAAYA,EAAA;AAAA,MAAA;;;;;;;AC5InB,KAAC,SAAS,GAAE,GAAE;AAAsD,MAAA87B,EAAA,UAAe,EAAC;AAAA,IAAkI,GAAEC,KAAM,WAAU;AAAc,UAAI,GAAE,GAAEC,IAAE,KAAI,IAAE,KAAIpkB,IAAE,MAAKqkB,IAAE,OAAMC,IAAE,uFAAsFC,IAAE,SAAQC,IAAE,QAAOC,IAAE,uKAAsKC,IAAE,EAAC,OAAMH,GAAE,QAAOC,GAAE,MAAKH,GAAE,OAAMrkB,GAAE,SAAQ,GAAE,SAAQokB,GAAE,cAAa,GAAE,OAAM,OAAM,GAAEO,IAAE,SAASv5B,GAAE;AAAC,eAAOA,aAAaw5B;AAAA,MAAC,GAAEC,IAAE,SAASz5B,GAAE05B,GAAEV,GAAE;AAAC,eAAO,IAAIQ,EAAEx5B,GAAEg5B,GAAEU,EAAE,EAAE;AAAA,MAAC,GAAEC,IAAE,SAAS35B,GAAE;AAAC,eAAO,EAAE,EAAEA,CAAC,IAAE;AAAA,MAAG,GAAE45B,IAAE,SAAS55B,GAAE;AAAC,eAAOA,IAAE;AAAA,MAAC,GAAE65B,IAAE,SAAS75B,GAAE;AAAC,eAAO45B,EAAE55B,CAAC,IAAE,KAAK,KAAKA,CAAC,IAAE,KAAK,MAAMA,CAAC;AAAA,MAAC,GAAE,IAAE,SAASA,GAAE;AAAC,eAAO,KAAK,IAAIA,CAAC;AAAA,MAAC,GAAE85B,IAAE,SAAS95B,GAAE05B,GAAE;AAAC,eAAO15B,IAAE45B,EAAE55B,CAAC,IAAE,EAAC,UAAS,IAAG,QAAO,KAAG,EAAEA,CAAC,IAAE05B,EAAC,IAAE,EAAC,UAAS,IAAG,QAAO,KAAG15B,IAAE05B,EAAC,IAAE,EAAC,UAAS,IAAG,QAAO,GAAE;AAAA,MAAC,GAAEF,KAAE,WAAU;AAAC,iBAASI,EAAE55B,GAAE05B,GAAEV,GAAE;AAAC,cAAIjO,IAAE;AAAK,cAAG,KAAK,KAAG,CAAA,GAAG,KAAK,KAAGiO,GAAWh5B,MAAT,WAAa,KAAK,MAAI,GAAE,KAAK,sBAAqB,IAAI05B,EAAE,QAAOD,EAAEz5B,IAAEs5B,EAAEK,EAAED,CAAC,CAAC,GAAE,IAAI;AAAE,cAAa,OAAO15B,KAAjB,SAAmB,QAAO,KAAK,MAAIA,GAAE,KAAK,sBAAqB,GAAG;AAAK,cAAa,OAAOA,KAAjB,SAAmB,QAAO,OAAO,KAAKA,CAAC,EAAE,SAAS,SAAS05B,GAAE;AAAC,YAAA3O,EAAE,GAAG4O,EAAED,CAAC,CAAC,IAAE15B,EAAE05B,CAAC;AAAA,UAAC,EAAC,GAAG,KAAK,gBAAe,GAAG;AAAK,cAAa,OAAO15B,KAAjB,UAAmB;AAAC,gBAAI4U,IAAE5U,EAAE,MAAMq5B,CAAC;AAAE,gBAAGzkB,GAAE;AAAC,kBAAIqkB,IAAErkB,EAAE,MAAM,CAAC,EAAE,KAAK,SAAS5U,GAAE;AAAC,uBAAaA,KAAN,OAAQ,OAAOA,CAAC,IAAE;AAAA,cAAC,EAAC;AAAG,qBAAO,KAAK,GAAG,QAAMi5B,EAAE,CAAC,GAAE,KAAK,GAAG,SAAOA,EAAE,CAAC,GAAE,KAAK,GAAG,QAAMA,EAAE,CAAC,GAAE,KAAK,GAAG,OAAKA,EAAE,CAAC,GAAE,KAAK,GAAG,QAAMA,EAAE,CAAC,GAAE,KAAK,GAAG,UAAQA,EAAE,CAAC,GAAE,KAAK,GAAG,UAAQA,EAAE,CAAC,GAAE,KAAK,mBAAkB;AAAA,YAAI;AAAA,UAAC;AAAC,iBAAO;AAAA,QAAI;AAAC,YAAIc,IAAEH,EAAE;AAAU,eAAOG,EAAE,kBAAgB,WAAU;AAAC,cAAI/5B,IAAE;AAAK,eAAK,MAAI,OAAO,KAAK,KAAK,EAAE,EAAE,QAAQ,SAAS05B,GAAEV,GAAE;AAAC,mBAAOU,KAAG15B,EAAE,GAAGg5B,CAAC,KAAG,KAAGM,EAAEN,CAAC;AAAA,UAAC,IAAG,CAAC;AAAA,QAAC,GAAEe,EAAE,wBAAsB,WAAU;AAAC,cAAI/5B,IAAE,KAAK;AAAI,eAAK,GAAG,QAAM65B,EAAE75B,IAAEm5B,CAAC,GAAEn5B,KAAGm5B,GAAE,KAAK,GAAG,SAAOU,EAAE75B,IAAEo5B,CAAC,GAAEp5B,KAAGo5B,GAAE,KAAK,GAAG,OAAKS,EAAE75B,IAAEi5B,CAAC,GAAEj5B,KAAGi5B,GAAE,KAAK,GAAG,QAAMY,EAAE75B,IAAE4U,CAAC,GAAE5U,KAAG4U,GAAE,KAAK,GAAG,UAAQilB,EAAE75B,IAAE,CAAC,GAAEA,KAAG,GAAE,KAAK,GAAG,UAAQ65B,EAAE75B,IAAEg5B,CAAC,GAAEh5B,KAAGg5B,GAAE,KAAK,GAAG,eAAah5B;AAAA,QAAC,GAAE+5B,EAAE,cAAY,WAAU;AAAC,cAAI/5B,IAAE85B,EAAE,KAAK,GAAG,OAAM,GAAG,GAAEJ,IAAEI,EAAE,KAAK,GAAG,QAAO,GAAG,GAAEd,IAAE,CAAC,KAAK,GAAG,QAAM;AAAE,eAAK,GAAG,UAAQA,KAAG,IAAE,KAAK,GAAG;AAAO,cAAIjO,IAAE+O,EAAEd,GAAE,GAAG,GAAEpkB,IAAEklB,EAAE,KAAK,GAAG,OAAM,GAAG,GAAEb,IAAEa,EAAE,KAAK,GAAG,SAAQ,GAAG,GAAEZ,IAAE,KAAK,GAAG,WAAS;AAAE,eAAK,GAAG,iBAAeA,KAAG,KAAK,GAAG,eAAa,KAAIA,IAAE,KAAK,MAAM,MAAIA,CAAC,IAAE;AAAK,cAAIC,IAAEW,EAAEZ,GAAE,GAAG,GAAEE,IAAEp5B,EAAE,YAAU05B,EAAE,YAAU3O,EAAE,YAAUnW,EAAE,YAAUqkB,EAAE,YAAUE,EAAE,UAASE,IAAEzkB,EAAE,UAAQqkB,EAAE,UAAQE,EAAE,SAAO,MAAI,IAAGG,KAAGF,IAAE,MAAI,MAAI,MAAIp5B,EAAE,SAAO05B,EAAE,SAAO3O,EAAE,SAAOsO,IAAEzkB,EAAE,SAAOqkB,EAAE,SAAOE,EAAE;AAAO,iBAAYG,MAAN,OAAgBA,MAAP,OAAS,QAAMA;AAAA,QAAC,GAAES,EAAE,SAAO,WAAU;AAAC,iBAAO,KAAK,YAAW;AAAA,QAAE,GAAEA,EAAE,SAAO,SAAS/5B,GAAE;AAAC,cAAIg5B,IAAEh5B,KAAG,uBAAsB+qB,IAAE,EAAC,GAAE,KAAK,GAAG,OAAM,IAAG,EAAE,EAAE,KAAK,GAAG,OAAM,GAAE,GAAG,GAAE,MAAK,EAAE,EAAE,KAAK,GAAG,OAAM,GAAE,GAAG,GAAE,GAAE,KAAK,GAAG,QAAO,IAAG,EAAE,EAAE,KAAK,GAAG,QAAO,GAAE,GAAG,GAAE,GAAE,KAAK,GAAG,MAAK,IAAG,EAAE,EAAE,KAAK,GAAG,MAAK,GAAE,GAAG,GAAE,GAAE,KAAK,GAAG,OAAM,IAAG,EAAE,EAAE,KAAK,GAAG,OAAM,GAAE,GAAG,GAAE,GAAE,KAAK,GAAG,SAAQ,IAAG,EAAE,EAAE,KAAK,GAAG,SAAQ,GAAE,GAAG,GAAE,GAAE,KAAK,GAAG,SAAQ,IAAG,EAAE,EAAE,KAAK,GAAG,SAAQ,GAAE,GAAG,GAAE,KAAI,EAAE,EAAE,KAAK,GAAG,cAAa,GAAE,GAAG,EAAC;AAAE,iBAAOiO,EAAE,QAAQE,IAAG,SAASl5B,GAAE05B,GAAE;AAAC,mBAAOA,KAAG,OAAO3O,EAAE/qB,CAAC,CAAC;AAAA,UAAC,EAAC;AAAA,QAAE,GAAE+5B,EAAE,KAAG,SAAS/5B,GAAE;AAAC,iBAAO,KAAK,MAAIs5B,EAAEK,EAAE35B,CAAC,CAAC;AAAA,QAAC,GAAE+5B,EAAE,MAAI,SAAS/5B,GAAE;AAAC,cAAI05B,IAAE,KAAK,KAAIV,IAAEW,EAAE35B,CAAC;AAAE,iBAAuBg5B,MAAjB,iBAAmBU,KAAG,MAAIA,IAAYV,MAAV,UAAYa,EAAEH,IAAEJ,EAAEN,CAAC,CAAC,IAAE,KAAK,GAAGA,CAAC,GAAEU,KAAG;AAAA,QAAC,GAAEK,EAAE,MAAI,SAAS/5B,GAAE05B,GAAEV,GAAE;AAAC,cAAIjO;AAAE,iBAAOA,IAAE2O,IAAE15B,IAAEs5B,EAAEK,EAAED,CAAC,CAAC,IAAEH,EAAEv5B,CAAC,IAAEA,EAAE,MAAIy5B,EAAEz5B,GAAE,IAAI,EAAE,KAAIy5B,EAAE,KAAK,MAAI1O,KAAGiO,IAAE,KAAG,IAAG,IAAI;AAAA,QAAC,GAAEe,EAAE,WAAS,SAAS/5B,GAAE05B,GAAE;AAAC,iBAAO,KAAK,IAAI15B,GAAE05B,GAAE,EAAE;AAAA,QAAC,GAAEK,EAAE,SAAO,SAAS/5B,GAAE;AAAC,cAAI05B,IAAE,KAAK,MAAK;AAAG,iBAAOA,EAAE,KAAG15B,GAAE05B;AAAA,QAAC,GAAEK,EAAE,QAAM,WAAU;AAAC,iBAAON,EAAE,KAAK,KAAI,IAAI;AAAA,QAAC,GAAEM,EAAE,WAAS,SAASL,GAAE;AAAC,iBAAO,EAAC,EAAG,IAAI,KAAK,KAAI,IAAI,EAAE,OAAO,KAAK,EAAE,EAAE,QAAQ,CAACA,CAAC;AAAA,QAAC,GAAEK,EAAE,UAAQ,WAAU;AAAC,iBAAO,KAAK,eAAc;AAAA,QAAE,GAAEA,EAAE,eAAa,WAAU;AAAC,iBAAO,KAAK,IAAI,cAAc;AAAA,QAAC,GAAEA,EAAE,iBAAe,WAAU;AAAC,iBAAO,KAAK,GAAG,cAAc;AAAA,QAAC,GAAEA,EAAE,UAAQ,WAAU;AAAC,iBAAO,KAAK,IAAI,SAAS;AAAA,QAAC,GAAEA,EAAE,YAAU,WAAU;AAAC,iBAAO,KAAK,GAAG,SAAS;AAAA,QAAC,GAAEA,EAAE,UAAQ,WAAU;AAAC,iBAAO,KAAK,IAAI,SAAS;AAAA,QAAC,GAAEA,EAAE,YAAU,WAAU;AAAC,iBAAO,KAAK,GAAG,SAAS;AAAA,QAAC,GAAEA,EAAE,QAAM,WAAU;AAAC,iBAAO,KAAK,IAAI,OAAO;AAAA,QAAC,GAAEA,EAAE,UAAQ,WAAU;AAAC,iBAAO,KAAK,GAAG,OAAO;AAAA,QAAC,GAAEA,EAAE,OAAK,WAAU;AAAC,iBAAO,KAAK,IAAI,MAAM;AAAA,QAAC,GAAEA,EAAE,SAAO,WAAU;AAAC,iBAAO,KAAK,GAAG,MAAM;AAAA,QAAC,GAAEA,EAAE,QAAM,WAAU;AAAC,iBAAO,KAAK,IAAI,OAAO;AAAA,QAAC,GAAEA,EAAE,UAAQ,WAAU;AAAC,iBAAO,KAAK,GAAG,OAAO;AAAA,QAAC,GAAEA,EAAE,SAAO,WAAU;AAAC,iBAAO,KAAK,IAAI,QAAQ;AAAA,QAAC,GAAEA,EAAE,WAAS,WAAU;AAAC,iBAAO,KAAK,GAAG,QAAQ;AAAA,QAAC,GAAEA,EAAE,QAAM,WAAU;AAAC,iBAAO,KAAK,IAAI,OAAO;AAAA,QAAC,GAAEA,EAAE,UAAQ,WAAU;AAAC,iBAAO,KAAK,GAAG,OAAO;AAAA,QAAC,GAAEH;AAAA,MAAC,GAAC,GAAGI,IAAE,SAASh6B,GAAE05B,GAAEV,GAAE;AAAC,eAAOh5B,EAAE,IAAI05B,EAAE,MAAK,IAAGV,GAAE,GAAG,EAAE,IAAIU,EAAE,OAAM,IAAGV,GAAE,GAAG,EAAE,IAAIU,EAAE,KAAI,IAAGV,GAAE,GAAG,EAAE,IAAIU,EAAE,MAAK,IAAGV,GAAE,GAAG,EAAE,IAAIU,EAAE,QAAO,IAAGV,GAAE,GAAG,EAAE,IAAIU,EAAE,QAAO,IAAGV,GAAE,GAAG,EAAE,IAAIU,EAAE,aAAY,IAAGV,GAAE,IAAI;AAAA,MAAC;AAAE,aAAO,SAASA,GAAEjO,GAAEnW,GAAE;AAAC,YAAEA,GAAE,IAAEA,EAAC,EAAG,OAAM,GAAGA,EAAE,WAAS,SAAS5U,GAAE05B,GAAE;AAAC,cAAIV,IAAEpkB,EAAE,OAAM;AAAG,iBAAO6kB,EAAEz5B,GAAE,EAAC,IAAGg5B,EAAC,GAAEU,CAAC;AAAA,QAAC,GAAE9kB,EAAE,aAAW2kB;AAAE,YAAIN,IAAElO,EAAE,UAAU,KAAImO,IAAEnO,EAAE,UAAU;AAAS,QAAAA,EAAE,UAAU,MAAI,SAAS/qB,GAAE05B,GAAE;AAAC,iBAAOH,EAAEv5B,CAAC,IAAEg6B,EAAE,MAAKh6B,GAAE,CAAC,IAAEi5B,EAAE,KAAK,IAAI,EAAEj5B,GAAE05B,CAAC;AAAA,QAAC,GAAE3O,EAAE,UAAU,WAAS,SAAS/qB,GAAE05B,GAAE;AAAC,iBAAOH,EAAEv5B,CAAC,IAAEg6B,EAAE,MAAKh6B,GAAE,EAAE,IAAEk5B,EAAE,KAAK,IAAI,EAAEl5B,GAAE05B,CAAC;AAAA,QAAC;AAAA,MAAC;AAAA,IAAC,EAAC;AAAA;;;;ACG1uJO,GAAM,OAAOC,EAAQ;AAEd,MAAMC,KAAc,CAACC,GAAeC,IAAW,MAAM;AAC1D,MAAID,MAAU;AACZ,WAAO;AAGT,QAAME,IAAI,MACJC,IAAKF,IAAW,IAAI,IAAIA,GACxBG,IAAQ,CAAC,SAAS,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI,GAChE,IAAI,KAAK,MAAM,KAAK,IAAIJ,CAAK,IAAI,KAAK,IAAIE,CAAC,CAAC;AAElD,SAAO,YAAYF,IAAQ,KAAK,IAAIE,GAAG,CAAC,GAAG,QAAQC,CAAE,CAAC,IAAI,MAAMC,EAAM,CAAC;AACzE,GAEaC,KAAiB,CAACC,MACZT,GAAM,SAASS,IAAU,GAAI,EAE9B,OAAO,UAAU,GCO7B3D,KAAe,IACf4D,KAAc;;;;;;;;;AAlBpB,UAAM59B,IAAQC,GAWR0B,IAAOC,GAIP,EAAE,GAAAqB,EAAA,IAAM/C,EAAA,GAKRyD,IAAOk6B,GAAM79B,GAAO,MAAM,GAE1B,EAAE,OAAAwuB,GAAO,sBAAA6L,GAAsB,WAAAtR,GAAW,aAAAoR,EAAA,IAAgBD,GAAoBv2B,CAAI,GAElFmE,IAAc,MAAM;AACxB,MAAAnG,EAAK,aAAa,EAAE,SAAS6sB,EAAM,MAAM,IAAI,OAAOxuB,EAAM,OAAO;AAAA,IACnE;2BAIEU,EAgDK,MAAA;AAAA,MA/CH,OAAKmE,GAAA,CAAC,oBAAkB,EAAA,8BACgBlB,EAAA,MAAK,SAAA,CAAQ,CAAA;AAAA,MACpD,WAAkBmE,GAAW,CAAA,QAAA,OAAA,CAAA;AAAA,IAAA;MAE9B7G,EAWK,MAAA,MAAA;AAAA,QATK0C,EAAA,MAAK,iBADbpD,EAIEQ,IAAA;AAAA;UAFA,MAAK;AAAA,UACJ,MAAM;AAAA,QAAA,YAETR,EAIEQ,IAAA;AAAA;UAFA,MAAK;AAAA,UACJ,MAAM;AAAA,QAAA;;MAGXE,EAWK,MAAA,MAAA;AAAA,QAVHJ,EASEi9B,IAAA;AAAA,UARC,cAAYh5B,EAAAikB,CAAA;AAAA,UACZ,gBAAcjkB,EAAAq1B,CAAA;AAAA,UACd,KAAKr1B,EAAAu1B,CAAA,EAAqB;AAAA,UAC1B,oBAAkBv1B,EAAAu1B,CAAA,EAAqB;AAAA,UACvC,OAAOuD;AAAA,UACP,QAAQ5D;AAAAA,UACR,aAAW;AAAA,UACX,mBAAiBA;AAAAA,QAAA;;MAGtB/4B,EAEK,cADA6D,EAAA0pB,CAAA,EAAM,MAAM,gBAAgB1pB,EAAA7B,CAAA,EAAC,kCAAA,CAAA,GAAA,CAAA;AAAA,MAElChC,EAEK,MAAA,MAAA;AAAA,QADHJ,EAA0CigB,IAAA;AAAA,UAA9B,aAAWhc,EAAA0pB,CAAA,EAAM;AAAA,QAAA;;MAE/BvtB,EAMK,MAAA,MAAA;AAAA,QALHJ,EAIEg7B,IAAA;AAAA,UAHC,yBAAuBl4B,EAAA,MAAK,MAAM;AAAA,UAClC,cAAYmB,EAAAikB,CAAA;AAAA,UACb,oBAAA;AAAA,QAAA;;MAGJ9nB,EAEK,cADA6D,EAAA0pB,CAAA,EAAM,UAAU,eAAe,QAAQ,GAAA,CAAA;AAAA,MAE5CvtB,EAEK,MAAA,MAAAC,EADA4D,MAAYA,EAAA0pB,CAAA,EAAM,UAAU,eAAe,QAAI,CAAA,CAAA,GAAA,CAAA;AAAA,IAAA;;;;;;;;;;;AC1ExD,UAAM,EAAE,GAAAvrB,EAAA,IAAM/C,EAAA,GAER,EAAE,aAAA4H,GAAa,gBAAA+nB,GAAgB,QAAAC,EAAA,IAAWiJ,GAAA;2BAI9Cx4B,EA6CSw9B,IAAA;AAAA,MA5CP,OAAM;AAAA,MACN,gBAAA;AAAA,IAAA;iBAEA,MAsBQ;AAAA,QAtBR98B,EAsBQ,SAAA,MAAA;AAAA,UArBNA,EAoBK,MAAA,MAAA;AAAA,4BAnBHA,EAAwB,MAAA,EAApB,OAAM,YAAA,GAAW,MAAA,EAAA;AAAA,YACrBA,EAEK,MAFLE,IAEKD,EADA4D,EAAA7B,CAAA,EAAC,qCAAA,CAAA,GAAA,CAAA;AAAA,YAENhC,EAEK,MAFLgF,IAEK/E,EADA4D,EAAA7B,CAAA,EAAC,6CAAA,CAAA,GAAA,CAAA;AAAA,YAENhC,EAEK,MAFLsF,IAEKrF,EADA4D,EAAA7B,CAAA,EAAC,+BAAA,CAAA,GAAA,CAAA;AAAA,YAENhC,EAEK,MAFLuF,IAEKtF,EADA4D,EAAA7B,CAAA,EAAC,wCAAA,CAAA,GAAA,CAAA;AAAA,YAENhC,EAEK,MAFLwF,IAEKvF,EADA4D,EAAA7B,CAAA,EAAC,2DAAA,CAAA,GAAA,CAAA;AAAA,YAENhC,EAEK,MAFLyF,IAEKxF,EADA4D,EAAA7B,CAAA,EAAC,uDAAA,CAAA,GAAA,CAAA;AAAA,UAAA;;QAIVhC,EAiBQ,SAAA,MAAA;AAAA,WAhBNR,EAAA,EAAA,GAAAC,EAOE0F,IAAA,MAAAC,GANwBvB,EAAA+qB,CAAA,GAAc,CAA9BlsB,GAAMoD,YADhBxG,EAOEy9B,IAAA;AAAA,YALC,KAAKr6B,EAAK,MAAM;AAAA,YAChB,OAAAoD;AAAA,YACA,MAAApD;AAAA,YACD,mBAAA;AAAA,YACC,aAAUY,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAE,MAAEK,EAAAgD,CAAA,EAAYrD,GAAQxE,EAAA,SAAS;AAAA,UAAA;WAEjC6E,EAAAgrB,CAAA,KAAUhrB,EAAA+qB,CAAA,EAAe,WAAM,UAA1CnvB,EAOK,MAAAu9B,IAAA;AAAA,YANHh9B,EAKK,MALLi9B,IAKKh9B,EADA4D,EAAA7B,CAAA,EAAC,4CAAA,CAAA,GAAA,CAAA;AAAA,UAAA;;;;;;IC1DDk7B,KAAsB;AAAA,EACjC,SAAS;AAAA,EACT,WAAW;AAAA,EACX,OAAO;AACT,GAEaC,KAA6BD,GAAoB,SAExDE,KAAWv8B,EAA6Bs8B,EAA0B;AAEjE,SAASE,KAAc;AAC5B,QAAMC,IAAc,CAAClzB,MAAmC;AACtD,IAAAgzB,GAAS,QAAQhzB;AAAA,EACnB;AAEA,SAAO;AAAA,IACL,UAAUiX,GAAS+b,EAAQ;AAAA,IAC3B,aAAAE;AAAA,EAAA;AAEJ;;;;;;;;;;;;;;ACJA,UAAMv+B,IAAQC,GAcR0B,IAAOC,GAKP48B,IAAYv2B,GAAmBhI,GAAC,MAAuC,GAEvE,EAAE,GAAAgD,EAAA,IAAM/C,EAAA,GACR,EAAE,aAAAq+B,EAAA,IAAgBD,GAAA,GAClB,EAAE,mBAAA/F,GAAmB,aAAAH,GAAa,oBAAAM,GAAoB,cAAAL,EAAA,IAAiBC,GAAA,GACvEW,IAAmBrJ,GAAA,GACnB,EAAE,YAAAH,EAAA,IAAeF,GAAA,GACjB,EAAE,WAAAxG,GAAW,WAAAkH,MAAciJ,GAAYD,CAAgB,GAEvDwF,IAAgBr+B,EAAS,MACtB2oB,EAAU,UAAUR,GAAa,KACzC,GAEKmW,IAAgBt+B,EAAS,MACtB2oB,EAAU,UAAUR,GAAa,KACzC,GAEKoW,IAAkBv+B,EAAS,MACxB2oB,EAAU,UAAUR,GAAa,SAAS0H,EAAU,UAAU,EACtE,GAEK2O,IAAiB,MAAM;AAC3B,MAAA7V,EAAU,QAAQR,GAAa,OAC/B0H,EAAU,QAAQ,MAClBR,EAAW,aAAa,CAAA,GACxB9tB,EAAK,cAAc,EAAE,MAAM4mB,GAAa,OAAO,WAAW,MAAM;AAAA,IAClE,GAEMsW,IAAiB,MAAM;AAC3B,MAAA9V,EAAU,QAAQR,GAAa,OAC/B0H,EAAU,QAAQ,MAClBR,EAAW,aAAa,CAAA,GACxB9tB,EAAK,cAAc,EAAE,MAAM4mB,GAAa,OAAO,WAAW,MAAM;AAAA,IAClE,GAEMuW,IAAmB,MAAM;AAC7B,MAAA/V,EAAU,QAAQR,GAAa,OAC/B0H,EAAU,QAAQ,IAClBtuB,EAAK,cAAc,EAAE,MAAM4mB,GAAa,OAAO,WAAW,IAAM;AAAA,IAClE,GAEMwW,IAAoB;AAAA,MACxB;AAAA,QACE,IAAI;AAAA,QACJ,QAAQ;AAAA,QACR,QAAQ,EAAE,KAAKC,IAAoB,OAAOx3B,GAAU,KAAA;AAAA,MAAK;AAAA,MAE3D;AAAA,QACE,IAAI;AAAA,QACJ,QAAQ;AAAA,QACR,QAAQ,EAAE,KAAKqxB,IAAoB,OAAOrxB,GAAU,KAAA;AAAA,MAAK;AAAA,MAE3D;AAAA,QACE,IAAI;AAAA,QACJ,QAAQ;AAAA,QACR,QAAQ,EAAE,KAAKqxB,IAAoB,OAAOrxB,GAAU,IAAA;AAAA,MAAI;AAAA,IAC1D;AAGF,WAAA8B,GAAU,MAAM;AACd,UAAItJ,EAAM,uBAAuBuoB,GAAa,SAASvoB,EAAM,oBAAoB;AAC/E,QAAA8+B,EAAA;AACA;AAAA,MACF;AACA,MAAI9+B,EAAM,uBAAuBuoB,GAAa,SAC5CsW,EAAA;AAAA,IAEJ,CAAC,mBAICt+B,EAkLWqmB,IAAA;AAAA,MAjLT,SAAQ;AAAA,MACR,OAAM;AAAA,MACL,QAAQ;AAAA,MACT,WAAU;AAAA,MACV,OAAM;AAAA,IAAA;iBAEN,MA0KO;AAAA,QA1KPnlB,GA0KOC,4BA1KP,MA0KO;AAAA,UAzKLT,EAwKM,OAxKNE,IAwKM;AAAA,YAvKJF,EAsKM,OAtKNgF,IAsKM;AAAA,cArKJhF,EA2FM,OA3FNsF,IA2FM;AAAA,gBA1FJ1F,EAiBOyF,IAAA;AAAA,kBAhBL,MAAA;AAAA,kBACC,OAAO;AAAA,kBACP,QAAQ;AAAA,kBACR,QAAQxB,EAAAszB,CAAA;AAAA,kBACR,SAAOtzB,EAAAyzB,CAAA;AAAA,gBAAA;6BAER,MAGE;AAAA,oBAHF13B,EAGEE,IAAA;AAAA,sBAFA,MAAK;AAAA,sBACJ,MAAM;AAAA,oBAAA;oBAETF,EAKWmG,IAAA;AAAA,sBAJT,WAAU;AAAA,sBACV,UAAS;AAAA,oBAAA;iCAET,MAAgD;AAAA,4BAA7ClC,EAAA7B,CAAA,EAAC,uCAAA,CAAA,GAAA,CAAA;AAAA,sBAAA;;;;;;gBAGQhD,EAAA,kBAAhBS,EAsEW0F,IAAA,EAAA,KAAA,KAAA;AAAA,kBArETvF,EAGEyf,IAAA;AAAA,oBAFA,UAAA;AAAA,oBACA,OAAM;AAAA,kBAAA;kBAERzf,EAqBOyF,IAAA;AAAA,oBApBL,MAAA;AAAA,oBACC,OAAO;AAAA,oBACP,QAAQ;AAAA,oBACT,OAAM;AAAA,oBACN,WAAQ;AAAA,oBACP,QAAQm4B,EAAA;AAAA,oBACR,OAAOA,EAAA,QAAa,cAAA;AAAA,oBACpB,SAASA,EAAA,QAAa,SAAA;AAAA,oBACtB,WAAYG,GAAc,CAAA,MAAA,CAAA;AAAA,kBAAA;+BAE3B,MAGE;AAAA,sBAHF/9B,EAGEE,IAAA;AAAA,wBAFA,MAAK;AAAA,wBACJ,MAAM;AAAA,sBAAA;sBAETF,EAKWmG,IAAA;AAAA,wBAJT,WAAU;AAAA,wBACV,UAAS;AAAA,sBAAA;mCAET,MAA6C;AAAA,8BAA1ClC,EAAA7B,CAAA,EAAC,oCAAA,CAAA,GAAA,CAAA;AAAA,wBAAA;;;;;;kBAGRpC,EAqBOyF,IAAA;AAAA,oBApBL,MAAA;AAAA,oBACC,OAAO;AAAA,oBACP,QAAQ;AAAA,oBACT,OAAM;AAAA,oBACN,WAAQ;AAAA,oBACP,QAAQo4B,EAAA;AAAA,oBACR,OAAOA,EAAA,QAAa,cAAA;AAAA,oBACpB,SAASA,EAAA,QAAa,SAAA;AAAA,oBACtB,WAAYG,GAAc,CAAA,MAAA,CAAA;AAAA,kBAAA;+BAE3B,MAGE;AAAA,sBAHFh+B,EAGEE,IAAA;AAAA,wBAFA,MAAK;AAAA,wBACJ,MAAM;AAAA,sBAAA;sBAETF,EAKWmG,IAAA;AAAA,wBAJT,WAAU;AAAA,wBACV,UAAS;AAAA,sBAAA;mCAET,MAA6C;AAAA,8BAA1ClC,EAAA7B,CAAA,EAAC,oCAAA,CAAA,GAAA,CAAA;AAAA,wBAAA;;;;;;kBAGRpC,EAoBOyF,IAAA;AAAA,oBAnBL,MAAA;AAAA,oBACC,OAAO;AAAA,oBACP,QAAQ;AAAA,oBACT,WAAQ;AAAA,oBACP,QAAQq4B,EAAA;AAAA,oBACR,OAAOA,EAAA,QAAe,cAAA;AAAA,oBACtB,SAASA,EAAA,QAAe,SAAA;AAAA,oBACxB,WAAYG,GAAgB,CAAA,MAAA,CAAA;AAAA,kBAAA;+BAE7B,MAGE;AAAA,sBAHFj+B,EAGEE,IAAA;AAAA,wBAFA,MAAK;AAAA,wBACJ,MAAM;AAAA,sBAAA;sBAETF,EAKWmG,IAAA;AAAA,wBAJT,WAAU;AAAA,wBACV,UAAS;AAAA,sBAAA;mCAET,MAA8C;AAAA,8BAA3ClC,EAAA7B,CAAA,EAAC,qCAAA,CAAA,GAAA,CAAA;AAAA,wBAAA;;;;;;;gBAIVxB,GAA+BC,EAAA,QAAA,iBAAA;AAAA,cAAA;cAEjCT,EAwEM,OAxENuF,IAwEM;AAAA,gBAvEJ/E,GAAgCC,EAAA,QAAA,kBAAA;AAAA,gBAEvBzB,EAAA,gCADTM,EAKE0+B,IAAA;AAAA;8BAHST,EAAA;AAAA,gEAAAA,EAAS,QAAA/5B;AAAA,kBACjB,kBAAgBs6B;AAAA,kBAChB,gBAAcx6B,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAE,MAAE9C,EAAI,gBAAiB8C,CAAM;AAAA,gBAAA;gBAE9C5D,EAaOyF,IAAA;AAAA,kBAZL,MAAK;AAAA,kBACL,MAAA;AAAA,kBACA,SAAQ;AAAA,kBACP,SAAK/B,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAAvD,EAAA,CAAAyD,MAAOK,EAAAy5B,CAAA,EAAYz5B,EAAAq5B,EAAA,EAAoB,OAAO,GAAA,CAAA,MAAA,CAAA;AAAA,gBAAA;6BAEpD,MAAiC;AAAA,oBAAjCt9B,EAAiCE,IAAA,EAA1B,MAAK,oBAAkB;AAAA,oBAC9BF,EAKWmG,IAAA;AAAA,sBAJT,WAAU;AAAA,sBACV,UAAS;AAAA,oBAAA;iCAET,MAA+C;AAAA,4BAA5ClC,EAAA7B,CAAA,EAAC,sCAAA,CAAA,GAAA,CAAA;AAAA,sBAAA;;;;;;gBAGRpC,EAaOyF,IAAA;AAAA,kBAZL,MAAA;AAAA,kBACA,MAAK;AAAA,kBACL,SAAQ;AAAA,kBACP,SAAK/B,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAAvD,EAAA,CAAAyD,MAAOK,EAAAy5B,CAAA,EAAYz5B,EAAAq5B,EAAA,EAAoB,SAAS,GAAA,CAAA,MAAA,CAAA;AAAA,gBAAA;6BAEtD,MAA8B;AAAA,oBAA9Bt9B,EAA8BE,IAAA,EAAvB,MAAK,iBAAe;AAAA,oBAC3BF,EAKWmG,IAAA;AAAA,sBAJT,WAAU;AAAA,sBACV,UAAS;AAAA,oBAAA;iCAET,MAAiD;AAAA,4BAA9ClC,EAAA7B,CAAA,EAAC,wCAAA,CAAA,GAAA,CAAA;AAAA,sBAAA;;;;;;gBAGRpC,EAaOyF,IAAA;AAAA,kBAZL,MAAK;AAAA,kBACL,MAAA;AAAA,kBACA,SAAQ;AAAA,kBACP,SAAK/B,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAAvD,EAAA,CAAAyD,MAAOK,EAAAy5B,CAAA,EAAYz5B,EAAAq5B,EAAA,EAAoB,KAAK,GAAA,CAAA,MAAA,CAAA;AAAA,gBAAA;6BAElD,MAAkC;AAAA,oBAAlCt9B,EAAkCE,IAAA,EAA3B,MAAK,qBAAmB;AAAA,oBAC/BF,EAKWmG,IAAA;AAAA,sBAJT,WAAU;AAAA,sBACV,UAAS;AAAA,oBAAA;iCAET,MAA6C;AAAA,4BAA1ClC,EAAA7B,CAAA,EAAC,oCAAA,CAAA,GAAA,CAAA;AAAA,sBAAA;;;;;;gBAGRpC,EAGEyf,IAAA;AAAA,kBAFA,UAAA;AAAA,kBACA,OAAM;AAAA,gBAAA;gBAERzf,EAiBOyF,IAAA;AAAA,kBAhBL,MAAA;AAAA,kBACC,OAAO;AAAA,kBACP,QAAQ;AAAA,kBACR,QAAQxB,EAAAuzB,CAAA;AAAA,kBACR,SAAOvzB,EAAA4zB,CAAA;AAAA,gBAAA;6BAER,MAGE;AAAA,oBAHF73B,EAGEE,IAAA;AAAA,sBAFA,MAAK;AAAA,sBACJ,MAAM;AAAA,oBAAA;oBAETF,EAKWmG,IAAA;AAAA,sBAJT,WAAU;AAAA,sBACV,UAAS;AAAA,oBAAA;iCAET,MAA8C;AAAA,4BAA3ClC,EAAA7B,CAAA,EAAC,qCAAA,CAAA,GAAA,CAAA;AAAA,sBAAA;;;;;;;;;;;;;;;;;wLC7Pd+2B,KAAe;;;;;;;;;AAjBrB,UAAMh6B,IAAQC,GAWR0B,IAAOC,GAIP,EAAE,GAAAqB,EAAA,IAAM/C,EAAA,GAIR4H,IAAc,MAAM;AACxB,MAAAnG,EAAK,aAAa,EAAE,SAAS6sB,EAAM,MAAM,IAAI,OAAOxuB,EAAM,OAAO;AAAA,IACnE,GAEM2D,IAAOk6B,GAAM79B,GAAO,MAAM,GAE1B,EAAE,OAAAwuB,GAAO,WAAAzF,GAAW,aAAAoR,GAAa,iBAAAC,EAAA,IAAoBF,GAAoBv2B,CAAI;2BAIjFjD,EAqCM,OAAA;AAAA,MApCJ,OAAKmE,GAAA,CAAC,0DAAwD,EAAA,oCAChBlB,EAAA,MAAK,UAAQ,kCAAoCA,EAAA,MAAK,OAAA,CAAM,CAAA;AAAA,MACzG,WAAkBmE,GAAW,CAAA,QAAA,OAAA,CAAA;AAAA,IAAA;MAE9B7G,EA+BM,OA/BNE,IA+BM;AAAA,QA7BIwC,EAAA,MAAK,YADblD,KAAAC,EAWM,OAXNuF,IAWM;AAAA,0BAPJhF,EAAuD,OAAA,EAAlD,OAAM,0CAAA,GAAyC,MAAA,EAAA;AAAA,UACpDJ,EAKEE,IAAA;AAAA,YAJA,OAAM;AAAA,YACN,MAAK;AAAA,YACL,OAAM;AAAA,YACN,MAAK;AAAA,UAAA;;QAGTF,EAUEi9B,IAAA;AAAA,UATC,cAAYh5B,EAAAikB,CAAA;AAAA,UACZ,gBAAcjkB,EAAAq1B,CAAA;AAAA,UACd,KAAKr1B,EAAAs1B,CAAA,EAAgB;AAAA,UACrB,oBAAkBt1B,EAAAs1B,CAAA,EAAgB;AAAA,UAClC,OAAOt1B,EAAAs1B,CAAA,EAAgB;AAAA,UACvB,QAAQt1B,EAAAs1B,CAAA,EAAgB;AAAA,UACxB,mBAAiBJ;AAAA,UACjB,yBAAuBr2B,EAAA,MAAK,MAAM;AAAA,UAClC,mBAAiB1D,EAAA;AAAA,QAAA;QAEpBgB,EAMM,OANNsF,IAMM;AAAA,UALJtF,EAIM,OAJNuF,IAIM;AAAA,YAHJvF,EAEM,OAFNwF,IAEMvF,EADD4D,EAAA0pB,CAAA,EAAM,MAAM,gBAAgB1pB,EAAA7B,CAAA,EAAC,kCAAA,CAAA,GAAA,CAAA;AAAA,UAAA;;;;;;;;;;;;;;ACvD5C,UAAM,EAAE,UAAAo7B,EAAA,IAAaC,GAAA,GACf,EAAE,aAAAx2B,GAAa,gBAAA+nB,GAAgB,QAAAC,EAAA,IAAWiJ,GAAA,GAE1C,EAAE,GAAA91B,EAAA,IAAM/C,EAAA;;MAIZe,EAYM,OAAA;AAAA,QAXJ,OAAK4D,GAAA,CAAC,oBAAkB,uBACOC,EAAAu5B,CAAA,CAAQ,CAAA;AAAA,MAAA;SAEvC59B,EAAA,EAAA,GAAAC,EAOE0F,IAAA,MAAAC,GANwBvB,EAAA+qB,CAAA,GAAc,CAA9BlsB,GAAMoD,YADhBxG,EAOE2+B,IAAA;AAAA,UALC,KAAKv7B,EAAK,MAAM;AAAA,UAChB,OAAAoD;AAAA,UACA,MAAApD;AAAA,UACD,mBAAA;AAAA,UACC,aAAUY,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAE,MAAEK,EAAAgD,CAAA,EAAYrD,GAAQxE,EAAA,SAAS;AAAA,QAAA;;OAIrC6E,EAAAgrB,CAAA,KAAUhrB,EAAA+qB,CAAA,EAAe,WAAM,UADxCnvB,EAKM,OALNS,IAKMD,EADD4D,EAAA7B,CAAA,EAAC,4CAAA,CAAA,GAAA,CAAA;;;ICpBKk8B,KAA0B,CAACrW,MAAyB;AAC/D,QAAM,EAAE,WAAAD,EAAA,IAAc4J,GAAA,GAChB,EAAE,uBAAAzG,EAAA,IAA0BrB,GAAA,GAE5ByU,IAAkBpT,EAAsBlD,CAAS;AACvD,MAAIjlB,EAAYu7B,CAAe;AAC7B,UAAM,IAAI,MAAM,iCAAiC;AAGnD,QAAMC,IAAmB,CAAC7H,OAAoD;AAAA,IAC5E,OAAOA,EAAQ;AAAA,IACf,OAAOA,EAAQ;AAAA,EAAA,IAGX8H,IAAe,CAAC9H,OAA4C;AAAA,IAChE,IAAIA,EAAQ;AAAA,IACZ,MAAMA,EAAQ;AAAA,EAAA,IAGV+H,IAAoB,CAACC,MAClBA,EAAS,IAAI,CAAChI,MAAwB6H,EAAiB7H,CAAO,CAAC,GAGlEiI,IAAgB,CAACD,MACdA,EAAS,IAAI,CAAChI,MAAwB8H,EAAa9H,CAAO,CAAC,GAG9D,EAAE,cAAA+B,EAAA,IAAiBlC,GAAoBxO,GAAWC,CAAS;AA4BjE,SAAO;AAAA,IACL,kBAAAuW;AAAA,IACA,YA5BiB,OAAOj0B,GAA6BqkB,GAAwBD,MACtE+P,EAAkB,MAAMhG,EAAanuB,GAAYqkB,GAAYD,CAAY,CAAC;AAAA,IA4BjF,iBArBsB,OAAOpI,MACtBmY,EAAkB,MAAMnI,GAAsBvO,GAAWC,GAAW1B,CAAG,CAAC;AAAA,IAqB/E,mBA1BwB,OAAOhc,GAA6BqkB,GAAwBD,MAC7EiQ,EAAc,MAAMlG,EAAanuB,GAAYqkB,GAAYD,CAAY,CAAC;AAAA,IA0B7E,kBAhBuB,OAAOpkB,GAA8Bb,MACrDg1B,EAAkB,MAAMjI,GAAiBzO,GAAWC,GAAW1d,GAAYb,CAAS,CAAC;AAAA,IAgB5F,yBAV8B,OAAOa,GAA8Bb,MAC5Dk1B,EAAc,MAAMnI,GAAiBzO,GAAWC,GAAW1d,GAAYb,CAAS,CAAC;AAAA,EASxF;AAEJ;AC1EO,SAASm1B,KAAwB;AACtC,QAAMC,IAAoB;AAAA,IACxB,EAAE,MAAM,QAAiB,SAAS,UAAU,SAAS,MAAM,MAAM,SAAA;AAAA,EAAS,GAGtE,EAAE,cAAAnQ,GAAc,YAAAC,EAAA,IAAeC,GAAaiQ,GAAmBrQ,GAAkBqQ,CAAiB,GAAG;AAAA,IACzG,SAAS;AAAA,IACT,QAAQ3W;AAAA,IACR,SAASL;AAAAA,EAAA,CACV;AAED,SAAO;AAAA,IACL,cAAA6G;AAAA,IACA,YAAAC;AAAA,EAAA;AAEJ;AAEA,MAAMmQ,KAAa/1B,GAAiBmf,IAAiBL,EAAM,GACrDte,KAAS+f,GAAS;AAAA,EACtB,UAAU;AAAA,IACR,GAAGwV,GAAW,EAAE,SAAS,IAAM;AAAA,EAAA;AAAA,EAEjC,IAAI;AAAA,IACF,GAAGA,GAAW,EAAE,MAAM,MAAM;AAAA,EAAA;AAAA,EAE9B,MAAM;AAAA,IACJ,GAAGA,GAAW,EAAE,MAAM,QAAQ;AAAA,EAAA;AAAA,EAEhC,UAAU;AAAA,IACR,GAAGA,GAAW,EAAE,MAAM,YAAY;AAAA,EAAA;AAEtC,CAAC;AAKM,SAASC,KAAuB;AACrC,SAAOx1B;AACT;;;;;;;;;ACrCA,UAAMrK,IAAQC,GAOR0B,IAAOC,GAKP,EAAE,YAAAk+B,GAAY,iBAAAC,EAAA,IAAoBZ,GAAwBn/B,EAAM,SAAS,GAEzE,EAAE,YAAAyvB,GAAY,cAAAD,EAAA,IAAiBkQ,GAAA;AACrC,WAAA36B,GAAQi7B,IAAsBxQ,CAAY,GAC1CzqB,GAAQk7B,IAAoBxQ,CAAU,mBAIpClvB,EAOE2/B,IAAA;AAAA,MANC,MAAMjgC,EAAA;AAAA,MACN,eAAa6E,EAAAg7B,CAAA;AAAA,MACb,sBAAoBh7B,EAAAi7B,CAAA;AAAA,MACrB,mBAAgB;AAAA,MACf,kBAAgB;AAAA,MAChB,iCAAQp+B,EAAI,QAAA;AAAA,IAAA;;IChBJw+B,KAAyB,CAACrX,MAAyB;AAC9D,QAAM,EAAE,WAAAD,EAAA,IAAc4J,GAAA,GAChB,EAAE,uBAAAzG,EAAA,IAA0BrB,GAAA,GAE5ByU,IAAkBpT,EAAsBlD,CAAS;AACvD,MAAIjlB,EAAYu7B,CAAe;AAC7B,UAAM,IAAI,MAAM,yDAAyD;AAG3E,QAAME,IAAe,CAACxI,OAAyC;AAAA,IAC7D,IAAIA,EAAO;AAAA,IACX,MAAMA,EAAO;AAAA,IACb,YAAYA,EAAO;AAAA,IACnB,UAAUA,EAAO,MAAM;AAAA,EAAA,IAGnBuI,IAAmB,CAACvI,OAAkD;AAAA,IAC1E,OAAOA,EAAO,QAAQA,EAAO,aAAa,KAAKA,EAAO,UAAU,MAAM;AAAA,IACtE,OAAOA,EAAO;AAAA,EAAA,IAGVyI,IAAoB,CAACa,MAClBA,EAAQ,IAAI,CAACtJ,MAAsBuI,EAAiBvI,CAAM,CAAC,GAG9D2I,IAAgB,CAACW,MACdA,EAAQ,IAAI,CAACtJ,MAAsBwI,EAAaxI,CAAM,CAAC,GAG1D,EAAE,cAAAyC,EAAA,IAAiB/C,GAAmB3N,GAAWC,CAAS;AAgChE,SAAO;AAAA,IACL,kBAAAuW;AAAA,IACA,YAhCiB,OAAOj0B,GAA6BqkB,GAAwBD,MACtE+P,EAAkB,MAAMhG,EAAanuB,GAAYqkB,GAAYD,CAAY,CAAC;AAAA,IAgCjF,iBAzBsB,OAAOpI,MACtBmY,EAAkB,MAAMhJ,GAAqB1N,GAAWC,GAAW1B,CAAG,CAAC;AAAA,IAyB9E,mBA9BwB,OAAOhc,GAA6BqkB,GAAwBD,MAC7EiQ,EAAc,MAAMlG,EAAanuB,GAAYqkB,GAAYD,CAAY,CAAC;AAAA,IA8B7E,wBAvB6B,OAAOpI,MAC7BqY,EAAc,MAAMlJ,GAAqB1N,GAAWC,GAAW1B,CAAG,CAAC;AAAA,IAuB1E,kBAjBuB,OAAOhc,GAA8Bb,MACrDg1B,EAAkB,MAAM9I,GAAgB5N,GAAWC,GAAW1d,GAAYb,CAAS,CAAC;AAAA,IAiB3F,yBAX8B,OAAOa,GAA8Bb,MAC5Dk1B,EAAc,MAAMhJ,GAAgB5N,GAAWC,GAAW1d,GAAYb,CAAS,CAAC;AAAA,EAUvF;AAEJ;ACjFO,SAAS81B,KAAuB;AACrC,QAAMV,IAAoB;AAAA,IACxB,EAAE,MAAM,QAAiB,SAAS,UAAU,SAAS,MAAM,MAAM,SAAA;AAAA,EAAS,GAGtE,EAAE,cAAAnQ,GAAc,YAAAC,EAAA,IAAeC,GAAaiQ,GAAmBrQ,GAAkBqQ,CAAiB,GAAG;AAAA,IACzG,SAAS;AAAA,IACT,QAAQ3W;AAAA,IACR,SAASL;AAAAA,EAAA,CACV;AAED,SAAO;AAAA,IACL,cAAA6G;AAAA,IACA,YAAAC;AAAA,EAAA;AAEJ;AAEA,MAAMmQ,KAAa/1B,GAAiBmf,IAAiB,QAAQ;AAItD,SAASsX,KAAkB;AAChC,SAAOlW,GAAS;AAAA,IACd,UAAU;AAAA,MACR,GAAGwV,GAAW,EAAE,SAAS,IAAM;AAAA,IAAA;AAAA,IAEjC,MAAM;AAAA,MACJ,GAAGA,GAAW,EAAE,MAAM,QAAQ;AAAA,IAAA;AAAA,EAChC,CACD;AACH;;;;;;;;;AC5BA,UAAM5/B,IAAQC,GAOR0B,IAAOC,GAKP,EAAE,mBAAA2+B,GAAmB,wBAAAC,EAAA,IAA2BL,GAAuBngC,EAAM,SAAS,GAEtF,EAAE,YAAAyvB,GAAY,cAAAD,EAAA,IAAiB6Q,GAAA;AACrC,IAAAt7B,GAAQi7B,IAAsBxQ,CAAY,GAC1CzqB,GAAQk7B,IAAoBxQ,CAAU;AAEtC,UAAM,EAAE,GAAAxsB,EAAA,IAAM/C,EAAA;2BAIZK,EAqCuCkgC,IAAA;AAAA,MApCpC,MAAMxgC,EAAA;AAAA,MACN,uBAAqB6E,EAAAy7B,CAAA;AAAA,MACrB,8BAA4Bz7B,EAAA07B,CAAA;AAAA,MAC7B,mBAAgB;AAAA,MACf,kBAAgB;AAAA,MAChB,iCAAQ7+B,EAAI,QAAA;AAAA,IAAA;MAEF,MAAIf,EACb,CAcY,EAAA,OAfYuU,SAAiBS,QAAQ;AAAA,QACjD/U,EAcYsG,IAdZ0L,GAcYsC,GAbO,EACjB,OAAM,GAAA,CAAE,GAAA;AAAA,qBAER,MASiB;AAAA,YATjBtU,EASiBuG,IAAA,MAAA;AAAA,yBARf,MAAoB;AAAA,oBAAjBwO,EAAS,KAAK,IAAG,KACpB,CAAA;AAAA,gBACQA,EAAS,KAAK,KAAK,YAAYA,EAAS,KAAK,iBADrDrV,EAMEQ,IAAA;AAAA;kBAJA,MAAK;AAAA,kBACL,OAAM;AAAA,kBACN,MAAK;AAAA,kBACJ,OAAO+D,EAAA7B,CAAA,EAAC,6CAAA;AAAA,gBAAA;;;;;;;;MAKN,MAAIrC,EACb,CASQ,EAAA,OAVgBwU,SAAiBS,QAAQ;AAAA,QACjDhV,EASQL,UATO4U,CAAS,CAAA,GAAA;AAAA,qBACtB,MAAoB;AAAA,gBAAjBS,EAAS,KAAK,IAAG,KACpB,CAAA;AAAA,YACQA,EAAS,KAAK,KAAK,YAAYA,EAAS,KAAK,iBADrDtV,EAMEQ,IAAA;AAAA;cAJA,MAAK;AAAA,cACL,OAAM;AAAA,cACN,MAAK;AAAA,cACJ,OAAO+D,EAAA7B,CAAA,EAAC,6CAAA;AAAA,YAAA;;;;;;;;ICpDNy9B,KAAyB,CAACtvB,MAAgC;AACrE,QAAMiuB,IAAmB,CAAC5uB,OAAiD;AAAA,IACzE,OAAcA,EAAK,OAAO,aAAnB,KAA8BA,EAAK,QAAQA,EAAK,OAAO;AAAA,IAC9D,OAAOA,EAAK;AAAA,EAAA,IAGR8uB,IAAoB,CAACoB,MAClBA,EAAM,IAAI,CAAClwB,MAAkB4uB,EAAiB5uB,CAAI,CAAC,GAGtD,EAAE,cAAA8oB,EAAA,IAAiBxB,GAAoB3mB,CAAM;AAiBnD,SAAO;AAAA,IACL,kBAAAiuB;AAAA,IACA,YAjBiB,OAAOj0B,GAA6BqkB,GAAwBD,MACtE+P,EAAkB,MAAMhG,EAAanuB,GAAYqkB,GAAYD,CAAY,CAAC;AAAA,IAiBjF,iBAdsB,OAAOpI,MACtBmY,EAAkB,MAAM1H,GAAsBzmB,GAAQgW,CAAG,CAAC;AAAA,IAcjE,kBARuB,OAAOhc,GAA8Bb,MACrDg1B,EAAkB,MAAMzH,GAAiB1mB,GAAQhG,GAAYb,CAAS,CAAC;AAAA,EAO9E;AAEJ;ACtCO,SAASq2B,KAAwB;AACtC,QAAMjB,IAAoB;AAAA,IACxB,EAAE,MAAM,MAAe,SAAS,KAAA;AAAA,IAChC,EAAE,MAAM,SAAkB,SAAS,MAAM,SAAS,aAAA;AAAA,IAClD,EAAE,MAAM,WAAoB,SAAS,KAAA;AAAA,IACrC,EAAE,MAAM,YAAqB,SAAS,MAAM,SAAS,cAAc,SAAS,kBAAA;AAAA,IAC5E,EAAE,MAAM,oBAA6B,SAAS,UAAU,SAAS,CAAA,GAAI,MAAM,SAAA;AAAA,EAAS,GAGhF,EAAE,cAAAnQ,GAAc,YAAAC,EAAA,IAAeC,GAAaiQ,GAAmBrQ,GAAkBqQ,CAAiB,GAAG;AAAA,IACzG,QAAQ3W;AAAA,IACR,SAASL;AAAAA,EAAA,CACV;AAED,SAAO;AAAA,IACL,cAAA6G;AAAA,IACA,YAAAC;AAAA,EAAA;AAEJ;AAEA,MAAMmQ,KAAa/1B,GAAiB,OAAO,MAAM,GAC3CQ,KAAS+f,GAAS;AAAA,EACtB,IAAI;AAAA,IACF,GAAGwV,GAAW,EAAE,MAAM,MAAM,SAAS,MAAM;AAAA,EAAA;AAAA,EAE7C,OAAO;AAAA,IACL,GAAGA,GAAW,EAAE,MAAM,SAAS,SAAS,cAAc;AAAA,EAAA;AAAA,EAExD,SAAS;AAAA,IACP,GAAGA,GAAW,EAAE,MAAM,WAAW;AAAA,EAAA;AAAA,EAEnC,UAAU;AAAA,IACR,GAAGA,GAAW,EAAE,MAAM,YAAY,SAAS,cAAc,OAAO,kBAAA,CAAmB;AAAA,EAAA;AAAA,EAErF,kBAAkB;AAAA,IAChB,GAAGA,GAAW,EAAE,MAAM,oBAAoB,SAAS,UAAU,UAAU,IAAM,SAAS,GAAC,CAAG;AAAA,EAAA;AAE9F,CAAC;AAIM,SAASiB,KAAmB;AACjC,SAAOx2B;AACT;;;;;;;;;AC1CA,UAAMrK,IAAQC,GASR0B,IAAOC,GAKP,EAAE,WAAAinB,EAAA,IAAc4J,GAA6BzyB,EAAM,UAAU,GAE7D,EAAE,YAAA8/B,GAAY,iBAAAC,MAAoBW,GAAuB7X,CAAS,GAElE,EAAE,YAAA4G,GAAY,cAAAD,EAAA,IAAiBoR,GAAA;AACrC,WAAA77B,GAAQi7B,IAAsBxQ,CAAY,GAC1CzqB,GAAQk7B,IAAoBxQ,CAAU,mBAIpClvB,EAOE2/B,IAAA;AAAA,MANC,MAAMjgC,EAAA;AAAA,MACN,eAAa6E,EAAAg7B,CAAA;AAAA,MACb,sBAAoBh7B,EAAAi7B,CAAA;AAAA,MACrB,mBAAgB;AAAA,MACf,kBAAgB;AAAA,MAChB,iCAAQp+B,EAAI,QAAA;AAAA,IAAA;;;;;;;;;;;;;AC/BjB,UAAM3B,IAAQC,GASR0B,IAAOC,GAIPk/B,IAASh/B,EAAmC,SAAS,GAErD8oB,IAAiBX,GAAA,GAEjB,EAAE,WAAApB,EAAA,IAAc4J,GAA6BzyB,EAAM,UAAU,GAC7D,EAAE,kBAAAirB,EAAA,IAAqBN,GAAkB9B,CAAS,GAElD7S,IAAQ5V,EAAS,MACd,OAAO,QAAQwqB,EAAe,aAAa,oBAAoB,EAAE,IAAI,CAAC,CAAChkB,GAAKyE,CAAK,OAC/E;AAAA,MACL,OAAOA,EAAM;AAAA,MACb,OAAOzE;AAAA,IAAA,EAEV,CACF;AAED,WAAA0C,GAAU,YAAY;AACpB,YAAMkiB,IAA2B,CAAA;AACjC,MAAKZ,EAAe,YAAY,gBAC9BY,EAAS,KAAKP,GAAkB;AAElC,UAAI;AACF,cAAM,QAAQ,WAAWO,CAAQ;AAAA,MACnC,QAAY;AACV,QAAAsV,EAAO,QAAQ;AAAA,MACjB;AACA,MAAIA,EAAO,UAAU,YAASA,EAAO,QAAQ;AAAA,IAC/C,CAAC,aAKSA,EAAA,UAAM,aADdrgC,KAAAC,EAKM,OALNS,IAKM;AAAA,MADJN,EAAmCO,IAAA,EAAhB,eAAA,IAAa;AAAA,IAAA,MAElB0/B,EAAA,UAAM,WAAtBrgC,EAAA,GAAAC,EAEM,WAF8B,wCAEpC,WACAH,EAKEwgC,IAAA;AAAA;MAHC,MAAM9gC,EAAA;AAAA,MACN,OAAO+V,EAAA;AAAA,MACP,iCAAQrU,EAAI,QAAA;AAAA,IAAA;;ICzDX8mB,KAAY,sCACZE,KAAS,WAEFqY,KAA2B,CAAC5vB,GAA6B0b,GAAsB1F,MAC1FmO,GAAiCnkB,GAAQgW,GAAKqB,IAAW,EAAE,WAAAqE,KAAa9D,IAAiBL,IAAQ,CAAA,GAAI,EAAK,GAE/FsY,KAAyB,CAAC7vB,GAA6B0b,MAClEC,GAAmC3b,GAAQ4X,IAAiBL,IAAQF,IAAW,EAAE,WAAAqE,GAAW;ACIvF,SAASoU,KAAwB;AACtC,QAAMvB,IAAoB;AAAA,IACxB,EAAE,MAAM,SAAkB,SAAS,cAAc,SAAS,MAAM,MAAM,UAAU,SAAS,cAAA;AAAA,EAAc,GAGnG,EAAE,cAAAnQ,GAAc,YAAAC,EAAA,IAAeC,GAAaiQ,GAAmBrQ,GAAkBqQ,CAAiB,GAAG;AAAA,IACzG,QAAQ3W;AAAA,IACR,SAAS;AAAA,EAAA,CACV;AAED,SAAO;AAAA,IACL,cAAAwG;AAAA,IACA,YAAAC;AAAA,EAAA;AAEJ;AAEO,MAAM0R,KAA0B,CAACrU,GAAsB4F,IAAa,cAAc;AACvF,QAAM,EAAE,WAAA7J,EAAA,IAAc4J,GAA6BC,CAAU,GACvD,EAAE,cAAA6G,EAAA,IAAiB0H,GAAuBpY,GAAWiE,CAAS;AAoBpE,SAAO;AAAA,IACL,YAnBiB,OAAO1hB,GAA6BqkB,GAAwBD,OAC5D,MAAM+J,EAAanuB,GAAYqkB,GAAYD,CAAY,GAE5B,IAAI,CAAC4R,OAA8B;AAAA,MAC7E,OAAOA,EAAQ,MAAM;AAAA,MACrB,OAAOA,EAAQ;AAAA,IAAA,EACf;AAAA,IAcF,iBAXsB,OAAOha,OACZ,MAAM4Z,GAAyBnY,GAAWiE,GAAW1F,CAAG,GAE7B,IAAI,CAACga,OAA8B;AAAA,MAC7E,OAAOA,EAAQ,MAAM;AAAA,MACrB,OAAOA,EAAQ;AAAA,IAAA,EACf;AAAA,EAKF;AAEJ;;;;;;;;AClDA,UAAMphC,IAAQC,GAOR0B,IAAOC,GAKP,EAAE,YAAAk+B,GAAY,iBAAAC,EAAA,IAAoBoB,GAAwBnhC,EAAM,SAAS,GACzE,EAAE,YAAAyvB,GAAY,cAAAD,EAAA,IAAiB0R,GAAA;AACrC,WAAAn8B,GAAQi7B,IAAsBxQ,CAAY,GAC1CzqB,GAAQk7B,IAAoBxQ,CAAU,mBAIpClvB,EAOE2/B,IAAA;AAAA,MANC,MAAMjgC,EAAA;AAAA,MACN,eAAa6E,EAAAg7B,CAAA;AAAA,MACb,sBAAoBh7B,EAAAi7B,CAAA;AAAA,MACrB,mBAAgB;AAAA,MAChB,UAAS;AAAA,MACR,iCAAQp+B,EAAI,QAAA;AAAA,IAAA;;;;;AChBjB,UAAM,EAAE,YAAA8tB,EAAA,IAAesJ,GAAA,GAEjBE,IAAmBrJ,GAAA,GACnB,EAAE,cAAAI,GAAc,mBAAAD,GAAmB,WAAAhH,EAAA,IAAcmQ,GAAYD,CAAgB,GAE7EnQ,IAAY1oB,EAAgC,MAAM;AACtD,YAAMyH,IAAQmoB,EAAa,MAAM,KAAK,CAAC3mB,MAAWA,EAAO,YAAY0mB,EAAkB,KAAK;AAC5F,UAAIloB;AACF,eAAOA,EAAM;AAAA,IAGjB,CAAC;AAED,WAAAhF,GAAMimB,GAAW,CAAChmB,GAAU6C,MAAa;AACvC,MAAI7C,MAAa6C,MACf8pB,EAAW,aAAa,CAAA,GACxBA,EAAW,YAAY,CAAA;AAAA,IAE3B,CAAC;MAIC5uB,EAIO0M,IAAA,MAAA;AAAA,mBAHL,MAEO;AAAA,UAFP1M,EAEO2M,IAAA,EAFA,MAAM,MAAE;AAAA,uBACb,MAA6B;AAAA,cAA7B3M,EAA6BwgC,IAAA,EAAd,MAAK,QAAM;AAAA,YAAA;;;;;;MAG9BxgC,EAIO0M,IAAA,MAAA;AAAA,mBAHL,MAEO;AAAA,UAFP1M,EAEO2M,IAAA,EAFA,MAAM,MAAE;AAAA,uBACb,MAA4C;AAAA,cAA5C3M,EAA4CwgC,IAAA,EAA7B,MAAK,uBAAqB;AAAA,YAAA;;;;;;MAG7BvY,EAAA,cAAhBpoB,EAmBW0F,IAAA,EAAA,KAAA,KAAA;AAAA,QAlBTvF,EAQO0M,IAAA,MAAA;AAAA,qBAPL,MAMO;AAAA,YANP1M,EAMO2M,IAAA,EANA,MAAM,MAAE;AAAA,yBACb,MAIE;AAAA,sBAJFjN,EAIE+gC,IAAA;AAAA,kBAHC,KAAKxY,EAAA;AAAA,kBACN,MAAK;AAAA,kBACJ,cAAYA,EAAA;AAAA,gBAAA;;;;;;;QAInBjoB,EAQO0M,IAAA,MAAA;AAAA,qBAPL,MAMO;AAAA,YANP1M,EAMO2M,IAAA,EANA,MAAM,MAAE;AAAA,yBACb,MAIE;AAAA,sBAJFjN,EAIEghC,IAAA;AAAA,kBAHC,KAAKzY,EAAA;AAAA,kBACN,MAAK;AAAA,kBACJ,cAAYA,EAAA;AAAA,gBAAA;;;;;;;;MAKrBjoB,EAIO0M,IAAA,MAAA;AAAA,mBAHL,MAEO;AAAA,UAFP1M,EAEO2M,IAAA,EAFA,MAAM,MAAE;AAAA,uBACb,MAAuD;AAAA,cAAvD3M,EAAuD2gC,IAAA,EAAtB,MAAK,gBAAc;AAAA,YAAA;;;;;;MAGxD3gC,EAIO0M,IAAA,MAAA;AAAA,mBAHL,MAEO;AAAA,UAFP1M,EAEO2M,IAAA,EAFA,MAAM,MAAE;AAAA,uBACb,MAAyC;AAAA,cAAzC3M,EAAyC4gC,IAAA,EAAnB,MAAK,aAAW;AAAA,YAAA;;;;;;MAG1C5gC,EAIO0M,IAAA,MAAA;AAAA,mBAHL,MAEO;AAAA,UAFP1M,EAEO2M,IAAA,EAFA,MAAM,MAAE;AAAA,uBACb,MAAuC;AAAA,cAAvC3M,EAAuC4gC,IAAA,EAAjB,MAAK,WAAS;AAAA,YAAA;;;;;;MAGxC5gC,EAIO0M,IAAA,MAAA;AAAA,mBAHL,MAEO;AAAA,UAFP1M,EAEO2M,IAAA,MAAA;AAAA,uBADL,MAAiD;AAAA,cAAjD3M,EAAiD4gC,IAAA,EAA3B,MAAK,qBAAmB;AAAA,YAAA;;;;;;MAGtC38B,EAAAikB,CAAA,MAAcjkB,MAAa,SAASA,EAAAikB,CAAA,MAAcjkB,EAAAyjB,EAAA,EAAa,cAA3EhoB,EAOOgN,IAAA,EAAA,KAAA,KAAA;AAAA,mBANL,MAKO;AAAA,UALP1M,EAKO2M,IAAA,MAAA;AAAA,uBAJL,MAGE;AAAA,oBAHFjN,EAGEmhC,IAAA;AAAA,gBAFC,KAAK58B,EAAAirB,CAAA;AAAA,gBACN,MAAK;AAAA,cAAA;;;;;;;MAICjrB,EAAAikB,CAAA,MAAcjkB,EAAAyjB,EAAA,EAAa,cAAvChoB,EAQOgN,IAAA,EAAA,KAAA,KAAA;AAAA,mBAPL,MAMO;AAAA,UANP1M,EAMO2M,IAAA,MAAA;AAAA,uBALL,MAIE;AAAA,oBAJFjN,EAIEohC,IAAA;AAAA,gBAHC,KAAK78B,EAAAirB,CAAA;AAAA,gBACL,cAAYjrB,EAAAirB,CAAA;AAAA,gBACb,MAAK;AAAA,cAAA;;;;;;;;;;;;AC5Fb,UAAM,EAAE,GAAA9sB,EAAA,IAAM/C,EAAA,GACR,EAAE,yBAAAm5B,GAAyB,gBAAAS,GAAgB,YAAA1uB,EAAA,IAAe2tB,GAAA,GAE1DE,IAAmBrJ,GAAA,GACnB,EAAE,mBAAAG,GAAmB,cAAAC,MAAiBkJ,GAAYD,CAAgB,GAElE,EAAE,YAAAxJ,GAAY,cAAAD,EAAA,IAAiBD,GAAA;AACrC,IAAAxqB,GAAQ68B,IAAiBpS,CAAY,GACrCzqB,GAAQ88B,IAAepS,CAAU;AAEjC,UAAM,EAAE,aAAApiB,GAAa,cAAAy0B,EAAA,IAAiB53B,GAAiBulB,GAAYD,GAAc;AAAA,MAC/E,mBAAmB;AAAA,MACnB,0BAA0B;AAAA,IAAA,CAC3B,GAEKuS,IAAqB,MAAM;AAC/B,MAAAD,EAAa12B,GAAYiuB,CAAuB;AAAA,IAClD,GAEM2I,IAAoB,MAAM;AAC9B,MAAA30B,EAAYjC,GAAY0uB,CAAc;AAAA,IACxC,GAEMmI,IAAoB7hC,EAAS,MAAM;AACvC,cAAQ64B,EAAiB,WAAA;AAAA,QACvB;AACE,iBAAOiJ;AAAAA,MAAA;AAAA,IAEb,CAAC;AAED,WAAAr/B;AAAA,MACEktB;AAAA,MACA,CAACjtB,GAAU6C,MAAa;AACtB,QAAI7C,MAAa6C,KACjBq8B,EAAA;AAAA,MACF;AAAA,IAAA,GAGF14B,GAAU,MAAM;AACd,MAAA+vB,EAAA;AAAA,IACF,CAAC,cAIC54B,EAAA,GAAAC,EAmCM,OAnCNS,IAmCM;AAAA,MAlCJF,EAiCM,OAjCNgF,IAiCM;AAAA,QAhCJpF,EA+B8BshC,IAAA;AAAA,UA9B3B,UAAQJ;AAAA,UACR,SAAOC;AAAA,QAAA;UAEG,UACT,MAWO;AAAA,YAXKl9B,EAAAkrB,CAAA,EAAa,SAAM,UAA/BzvB,EAWOgN,IAAA,EAAA,KAAA,EAAA,GAAA;AAAA,yBAVL,MASO;AAAA,gBATP1M,EASO2M,IAAA,EATA,MAAM,MAAE;AAAA,6BACb,MAOE;AAAA,oBAPF3M,EAOEoV,IAAA;AAAA,kCANSnR,EAAAirB,CAAA;AAAA,4EAAAA,EAAiB,QAAAtrB,IAAA;AAAA,sBACzB,OAAOK,EAAA7B,CAAA,EAAC,mCAAA;AAAA,sBACR,OAAO6B,EAAAkrB,CAAA;AAAA,sBACR,cAAW;AAAA,sBACX,cAAW;AAAA,sBACX,gBAAA;AAAA,oBAAA;;;;;;;aAINvvB,KAAAF,EAAqCgjB,GAArB0e,EAAA,KAAiB,CAAA;AAAA,UAAA;qBAEnC,MAUO;AAAA,YAVKn9B,EAAAkrB,CAAA,EAAa,SAAM,UAA/BzvB,EAUOgN,IAAA,EAAA,KAAA,EAAA,GAAA;AAAA,yBATL,MAQO;AAAA,gBARP1M,EAQO2M,IAAA,EARA,MAAM,MAAE;AAAA,6BACb,MAME;AAAA,oBANF3M,EAMEoV,IAAA;AAAA,kCALSnR,EAAAirB,CAAA;AAAA,4EAAAA,EAAiB,QAAAtrB,IAAA;AAAA,sBACzB,OAAOK,EAAA7B,CAAA,EAAC,mCAAA;AAAA,sBACR,OAAO6B,EAAAkrB,CAAA;AAAA,sBACR,cAAW;AAAA,sBACX,cAAW;AAAA,oBAAA;;;;;;;aAIjBvvB,KAAAF,EAAqCgjB,GAArB0e,EAAA,KAAiB,CAAA;AAAA,UAAA;;;;;;;ACjFlC,SAASG,GAAsCnuB,GAA+C;AACnG,QAAM,EAAE,gBAAAtD,EAAA,IAAmBpB,GAAqBod,EAAU,GACpD,EAAE,aAAa0V,GAAgB,cAAcC,EAAA,IACjD3xB,EAAkCgc,EAAU;AAE9C,MAAI2V,EAA2B,MAAO,QAAOr9B,GAAUgP,CAAM;AAC7D,QAAMpD,IAAcwxB,EAAe;AACnC,MAAIx+B,EAAYgN,CAAW,EAAG,QAAO,CAAA;AAErC,QAAM0xB,IAAoB1xB,EAAY,mBAChC2xB,IAAgB3xB,EAAY,sBAAsB,IAAI,CAAC4xB,MAAsBA,EAAkB,EAAE,GACjG5wB,IAAiD,CAAA;AACvD,SAAAoC,EAAO,QAAQ,CAAC5I,MAAU;AACxB,QAAIk3B,EAAkB,SAASl3B,EAAM,SAAS,GAAG;AAC/C,MAAAwG,EAAQ,KAAKxG,CAAK;AAClB;AAAA,IACF;AACA,IAAIm3B,EAAc,SAASn3B,EAAM,OAAO,KACtCwG,EAAQ,KAAKxG,CAAK;AAAA,EAEtB,CAAC,GACMwG;AACT;AAEO,SAAS6wB,GAAiCr3B,GAA4C;AAC3F,QAAM,EAAE,gBAAAsF,EAAA,IAAmBpB,GAAqBod,EAAU,GACpD,EAAE,aAAa0V,GAAgB,cAAcC,EAAA,IACjD3xB,EAAkCgc,EAAU;AAE9C,MAAI2V,EAA2B,MAAO,QAAO;AAE7C,QAAMzxB,IAAcwxB,EAAe;AACnC,SAAIx+B,EAAYgN,CAAW,IAAU,CAAA,IAGjC,GADsBA,EAAY,kBAChB,SAASxF,EAAM,SAAS,KAIxBwF,EAAY,sBAAsB,IAAI,CAAC4xB,MAAsBA,EAAkB,EAAE,EACrF,SAASp3B,EAAM,OAAO;AAK1C;ACjDO,MAAMs3B,KAAyB;AAAA,EACpC,WAAW;AAAA;AAAA,EACX,UAAU;AAAA;AAAA,EACV,QAAQ;AAAA;AAAA,EACR,WAAW;AAAA;AAAA,EACX,WAAW;AAAA;AAAA,EACX,QAAQ;AACV,GAGaC,KAAsB;AAAA,EACjC,MAAM;AAAA,EACN,SAAS;AAAA,EACT,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,gBAAgB;AAAA,EAChB,aAAa;AACf,GAEaC,KAA6BD,GAAoB,MAEjDE,KAAuB;AAAA,EAClC,UAAU;AAAA,EACV,QAAQ;AACV,GAEaC,KAA8BD,GAAqB,UAWnDE,KAAoB;AAAA,EAC/B,OAAO;AAAA,EACP,OAAO;AACT,GA2FaC,KAAuB,CAAC53B,MAC/B,CAACA,KAAS,CAACA,EAAM,gBAAsB,KACpCA,EAAM,kBAAkB,aAGpB63B,KAAuB,CAAC73B,MAC/B,CAACA,KAAS,CAACA,EAAM,gBAAsB,KACpCA,EAAM,kBAAkB,aAGpB83B,KAAuB,CAAC93B,MAC/B,CAACA,KAAS,CAACA,EAAM,gBAAsB,KACpCA,EAAM,kBAAkB,aAGpB+3B,KAA0B,CAAC/3B,MAClC,CAACA,KAAS,CAACA,EAAM,gBAAsB,KACpCA,EAAM,kBAAkB,gBCrJ3Bg4B,KAAUvhC,EAAI,EAAK;AAElB,SAASwhC,KAAoB;AAKlC,SAAO;AAAA,IACL,SAAAD;AAAA,IACA,YANiB,MAAM;AACvB,MAAAA,GAAQ,QAAQ,CAACA,GAAQ;AAAA,IAC3B;AAAA,EAIE;AAEJ;ACTO,MAAME,KAA4B;AAAA,EACvC,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,aAAa;AAAA,EACb,mBAAmB;AAAA;AAAA,EACnB,SAAS;AACX,GACaC,KAAmCD,GAA0B;AAGnE,SAASE,KAA+B;AAC7C,QAAM,EAAE,GAAAxgC,EAAA,IAAM/C,EAAA,GACRwjC,IAAmC5hC,EAAwD;AAAA,IAC/F;AAAA,MACE,OAAOyhC,GAA0B;AAAA,MACjC,OAAOtgC,EAAE,sCAAsC;AAAA,IAAA;AAAA,IAEjD;AAAA,MACE,OAAOsgC,GAA0B;AAAA,MACjC,OAAOtgC,EAAE,uCAAuC;AAAA,IAAA;AAAA,IAElD;AAAA,MACE,OAAOsgC,GAA0B;AAAA,MACjC,OAAOtgC,EAAE,iCAAiC;AAAA,IAAA;AAAA,IAE5C;AAAA,MACE,OAAOsgC,GAA0B;AAAA,MACjC,OAAOtgC,EAAE,iDAAiD;AAAA,IAAA;AAAA,IAE5D;AAAA,MACE,OAAOsgC,GAA0B;AAAA,MACjC,OAAOtgC,EAAE,uCAAuC;AAAA,IAAA;AAAA,EAClD,CACD;AAMD,SAAO;AAAA,IACL,kCAAAygC;AAAA,IACA,oCANyC,CAACr4B,MACnCq4B,EAAiC,MAAM,KAAK,CAAC//B,MAASA,EAAK,UAAU0H,CAAK;AAAA,EAKjF;AAEJ;;;;;;;;;;;;;AC1CA,UAAMrL,IAAQC,GAiBR0B,IAAOC,GAIPyJ,IAAQjL,EAAS;AAAA,MACrB,MAAM;AACJ,eAAImF,GAAOvF,EAAM,UAAU,IAAU,KAC9BA,EAAM,aAAa,IAAI;AAAA,MAChC;AAAA,MACA,IAAI8C,GAAU;AACZ,YAAIiT,IAA8B;AAClC,QAAIjT,MAAa,MAAGiT,IAAc,KAC9BjT,MAAa,MAAGiT,IAAc,KAClCpU,EAAK,qBAAqBoU,CAAW;AAAA,MACvC;AAAA,IAAA,CACD,GAEK,EAAE,GAAA9S,EAAA,IAAM/C,EAAA,GAER8V,IAAQ5V,EAAS,MACd;AAAA,MACL,EAAE,OAAO,IAAI,OAAO6C,EAAEjD,EAAM,IAAI,EAAA;AAAA,MAChC,EAAE,OAAO,GAAG,OAAOiD,EAAEjD,EAAM,KAAK,EAAA;AAAA,MAChC,EAAE,OAAO,GAAG,OAAOiD,EAAEjD,EAAM,MAAM,EAAA;AAAA,IAAE,CAEtC;2BAICO,EAKE0V,IAAA;AAAA,kBAJS5K,EAAA;AAAA,oDAAAA,EAAK,QAAA5G;AAAA,MACb,WAASxE,EAAA;AAAA,MACT,OAAOA,EAAA;AAAA,MACP,OAAO+V,EAAA;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;AC5CZ,UAAMhW,IAAQC,GAUR0B,IAAOC,GAKP+hC,IAAW,CAACt4B,MACZrL,EAAM,OAAO,WAAW,SAASujC,GAA0B,UACtD,SAASl4B,CAAK,IAEhBA,GAGHu4B,IAAmB,CAACv4B,MAAe;AACvC,MAAA1J,EAAK,qBAAqB,EAAE,UAAU3B,EAAM,OAAO,UAAU,OAAO2jC,EAASt4B,CAAK,GAAG;AAAA,IACvF,GAEMrG,IAAqB5E,EAAS,MAAM;AACxC,YAAMiL,IAAQw4B,GAAQ7jC,EAAM,UAAU,IAAIgyB,GAAMhyB,EAAM,UAAU,IAAIA,EAAM;AAC1E,cACGA,EAAM,OAAO,WAAW,SAASujC,GAA0B,eAC1DvjC,EAAM,OAAO,WAAW,SAASujC,GAA0B,sBAC7Dr4B,GAAcG,CAAK,IAEZ,CAAA,IACFA;AAAA,IACT,CAAC,GAEK,EAAE,WAAAy4B,GAAW,WAAAC,GAAW,YAAAC,GAAY,UAAAC,GAAU,UAAAC,GAAU,uBAAAC,EAAA,IAA0BC,GAAA,GAElFC,IAAQjkC,EAAS,MAAM;AAC3B,YAAMkkC,IAAoC;AAAA,QACxC,oBAAoB;AAAA,UAClB,UAAUN,EAAWhkC,EAAM,OAAO,WAAW,QAAQ;AAAA,QAAA;AAAA,MACvD;AAEF,cAAQA,EAAM,OAAO,WAAW,MAAA;AAAA,QAC9B,KAAKujC,GAA0B;AAC7B,UAAAe,EAAa,mBAAmB,YAAYP;AAAA,YAC1C/jC,EAAM,OAAO,WAAW,WAAWA,EAAM,OAAO,WAAW,WAAW;AAAA,UAAA,GAExEskC,EAAa,mBAAmB,YAAYR;AAAA,YAC1C9jC,EAAM,OAAO,WAAW,WAAWA,EAAM,OAAO,WAAW,WAAW;AAAA,UAAA;AAExE;AAAA,QACF,KAAKujC,GAA0B;AAC7B,UAAAe,EAAa,mBAAmB,WAAWL;AAAA,YACzCjkC,EAAM,OAAO,WAAW,WAAWA,EAAM,OAAO,WAAW,WAAW;AAAA,UAAA,GAExEskC,EAAa,mBAAmB,WAAWJ;AAAA,YACzClkC,EAAM,OAAO,WAAW,WAAWA,EAAM,OAAO,WAAW,WAAW;AAAA,UAAA;AAExE;AAAA,QACF,KAAKujC,GAA0B;AAC7B,UAAAe,EAAa,mBAAmB,YAAYP;AAAA,YAC1C/jC,EAAM,OAAO,WAAW,WAAWA,EAAM,OAAO,WAAW,WAAW;AAAA,UAAA,GAExEskC,EAAa,mBAAmB,YAAYR;AAAA,YAC1C9jC,EAAM,OAAO,WAAW,WAAWA,EAAM,OAAO,WAAW,WAAW;AAAA,UAAA,GAExEskC,EAAa,mBAAmB,wBAAwBH;AAAA,YACtDnkC,EAAM,OAAO,WAAW,WAAWA,EAAM,OAAO,WAAW,WAAW;AAAA,YACtEA,EAAM,OAAO,WAAW,WAAWA,EAAM,OAAO,WAAW,WAAW;AAAA,UAAA;AAExE;AAAA,MAAA;AAGJ,aAAOskC;AAAA,IACT,CAAC,GAGKC,IAAKC,GAAaH,GAAO,EAAE,oBAAAr/B,EAAA,GAAsB,EAAE,QAAQhF,EAAM,iBAAiB,GAElF0D,IAAuBtD,EAAS,MAChCmkC,EAAG,MAAM,QAAQ,SAAe,CAACA,EAAG,MAAM,QAAQ,IAAI,CAAC5gC,MAAsBA,EAAK,QAAQ,EAAE,KAAK,GAAG,CAAC,IAClG,CAAA,CACR,GAEK8gC,IAAU3iC,EAAwB,MAAS;AACjD,IAAA2iC,EAAQ,QAAQzkC,EAAM,OAAO,WAAW,YAAY;AAEpD,UAAMwD,IAAS,MAAM;AACnB,MAAA7B,EAAK,QAAQ3B,EAAM,UAAU,GAC7BukC,EAAG,MAAM,OAAA;AAAA,IACX;;MAKUtkC,EAAA,OAAO,WAAW,SAAS6E,EAAAy+B,EAAA,EAA0B,eAD7DhjC,EAoBY+D,IAAA;AAAA;QAlBT,eAAarE,EAAA;AAAA,QACd,aAAA;AAAA,QACC,MAAM;AAAA,QACN,OAAOA,EAAA,OAAO;AAAA,QACd,kBAAgByD,EAAA;AAAA,QAChB,SAAS+gC,EAAA;AAAA,QACT,UAAUxkC,EAAA,OAAO,WAAW;AAAA,QAC5B,WAAO,kBAAoBA,EAAA,OAAO;AAAA,QAClC,uBAAoB2jC;AAAA,QACpB,QAAApgC;AAAA,MAAA;QAEU,SACT,MACE;AAAA,UADC0C,EAAAhF,EAAAjB,EAAA,OAAO,IAAI,GAAA,CAAA;AAAA,UAENA,EAAA,OAAO,WAAW,YADxBQ,EAAA,GAAAC,EAGA,QAHAS,EAGA;;;6FAIOlB,EAAA,OAAO,WAAW,SAAS6E,EAAAy+B,EAAA,EAA0B,gBADlEhjC,EAkBaiL,IAAA;AAAA;QAhBV,eAAaxG,EAAA;AAAA,QACd,MAAK;AAAA,QACJ,OAAO/E,EAAA,OAAO;AAAA,QACd,kBAAgByD,EAAA;AAAA,QAChB,UAAUzD,EAAA,OAAO,WAAW;AAAA,QAC5B,WAAO,kBAAoBA,EAAA,OAAO;AAAA,QAClC,uBAAoB2jC;AAAA,QACpB,QAAApgC;AAAA,MAAA;QAEU,SACT,MACE;AAAA,UADC0C,EAAAhF,EAAAjB,EAAA,OAAO,IAAI,GAAA,CAAA;AAAA,UAENA,EAAA,OAAO,WAAW,YADxBQ,EAAA,GAAAC,EAGA,QAHAuF,EAGA;;;kFAIchG,EAAA,OAAO,WAAW,SAAS6E,EAAAy+B,EAAA,EAA0B,eAAuBtjC,EAAA,OAAO,WAAW,SAAS6E,EAAAy+B,EAAA,EAA0B,0BADrJhjC,EAsBYmkC,IAAA;AAAA;QAjBT,eAAa1/B,EAAA;AAAA,QACb,OAAO/E,EAAA,OAAO;AAAA,QACf,UAAA;AAAA,QACA,OAAA;AAAA,QACC,UAAUA,EAAA,OAAO,WAAW;AAAA,QAC5B,kBAAgByD,EAAA;AAAA,QAChB,WAAO,kBAAoBzD,EAAA,OAAO;AAAA,QAClC,uBAAoB2jC;AAAA,QACpB,QAAApgC;AAAA,MAAA;QAEU,SACT,MACE;AAAA,UADC0C,EAAAhF,EAAAjB,EAAA,OAAO,IAAI,GAAA,CAAA;AAAA,UAENA,EAAA,OAAO,WAAW,YADxBQ,EAAA,GAAAC,EAGA,QAHA6F,EAGA;;;;MAIEtG,EAAA,OAAO,WAAW,SAAS6E,EAAAy+B,EAAA,EAA0B,WAAWtjC,EAAA,OAAO,WAAW,aAAQ,WADlGM,EAOEmV,IAAA;AAAA;QALC,OAAOzV,EAAA,OAAO;AAAA,QACd,eAAa+E,EAAA;AAAA,QACb,UAAU/E,EAAA,OAAO,WAAW;AAAA,QAC5B,WAAO,kBAAoBA,EAAA,OAAO;AAAA,QAClC,uBAAoB2jC;AAAA,MAAA;MAGf3jC,EAAA,OAAO,WAAW,SAAS6E,EAAAy+B,EAAA,EAA0B,WAAWtjC,EAAA,OAAO,WAAW,aAAQ,WADlGM,EAOEokC,IAAA;AAAA;QALC,eAAa3/B,EAAA;AAAA,QACb,OAAO/E,EAAA,OAAO;AAAA,QACd,WAAO,kBAAoBA,EAAA,OAAO;AAAA,QAClC,UAAUA,EAAA,OAAO,WAAW;AAAA,QAC5B,uBAAoB2jC;AAAA,MAAA;;;;;;;;;;;;;;AC/KzB,UAAM5jC,IAAQC,GAeR0B,IAAOC,GAKP,EAAE,GAAAqB,EAAA,IAAM/C,EAAA,GAER,EAAE,SAAAmjC,GAAS,YAAAuB,EAAA,IAAetB,GAAA,GAE1BM,IAAmB,CAAC1hC,MAA2C;AACnE,YAAM2iC,IAAU,CAAA;AAChB,MAAAA,EAAQ3iC,EAAK,QAAQ,IAAIA,EAAK,OAC9BP,EAAK,qBAAqB,EAAE,GAAG3B,EAAM,YAAY,GAAG6kC,GAAS,GAC7DljC,EAAK,WAAW;AAAA,IAClB,GAEMmjC,IAAiB1kC,EAAS,MACvBJ,EAAM,SAAS,MAAM,GAAGA,EAAM,WAAW,CACjD,GAEK+kC,IAAgB3kC,EAAS,MACtBJ,EAAM,SAAS,MAAMA,EAAM,WAAW,CAC9C,GAEKglC,IAAqB5kC,EAAS,MAC3BijC,EAAQ,QACXpgC,EAAE,kDAAkD,IACpDA,EAAE,kDAAkD,CACzD,GACKgiC,IAAqB7kC,EAAS,MAC3BijC,EAAQ,QAAQ,cAAc,UACtC,GAEK6B,IAAiB9kC,EAAS,MACvBJ,EAAM,SAAS,SAASA,EAAM,WACtC,GAGKukC,IAAKC,GAAa,EAAE,QAAQxkC,EAAM,iBAAiB;AAMzD,WAAAqE,EAAa;AAAA,MACX,UALe,MACRkgC,EAAG,MAAM,UAAA;AAAA,IAIhB,CACD;MAICtjC,EAyBM,OAzBNE,IAyBM;AAAA,QAxBJM,GAA6BC,EAAA,QAAA,eAAA;AAAA,gBAC7BhB,EAqBO0F,IAAA,MAAAC,GApBay+B,EAAA,OAAc,CAAzBK,YADT5kC,EAqBOgN,IAAA;AAAA,UAnBJ,KAAK43B,EAAQ;AAAA,UACd,OAAA;AAAA,UACA,OAAM;AAAA,QAAA;qBAEN,MAcO;AAAA,YAdPtkC,EAcO2M,IAAA,MAAA;AAAA,yBAbL,MAKO;AAAA,gBAJCvN,EAAA,iBADRM,EAKOqJ,IAAA;AAAA;kBAHJ,OAAOu7B,EAAQ;AAAA,gBAAA;6BAEhB,MAAkC;AAAA,wBAA/BllC,EAAA,WAAWklC,EAAQ,QAAQ,CAAA,GAAA,CAAA;AAAA,kBAAA;;6CAEhC5kC,EAME6kC,IAAA;AAAA;kBAJC,QAAQD;AAAA,kBACR,eAAallC,EAAA,WAAWklC,EAAQ,QAAQ;AAAA,kBACxC,oBAAkBllC,EAAA;AAAA,kBAClB,uBAAoB2jC;AAAA,gBAAA;;;;;;;QAI3BniC,GAA4BC,EAAA,QAAA,cAAA;AAAA,MAAA;MAE9BL,GAAAJ,EAyBM,OAzBNgF,IAyBM;AAAA,gBArBJvF,EAoBO0F,IAAA,MAAAC,GAnBa0+B,EAAA,OAAa,CAAxBI,YADT5kC,EAoBOgN,IAAA;AAAA,UAlBJ,KAAK43B,EAAQ;AAAA,UACd,OAAA;AAAA,UACA,OAAM;AAAA,QAAA;qBAEN,MAaO;AAAA,YAbPtkC,EAaO2M,IAAA,MAAA;AAAA,yBAZL,MAKO;AAAA,gBAJCvN,EAAA,iBADRM,EAKOqJ,IAAA;AAAA;kBAHJ,OAAOu7B,EAAQ;AAAA,gBAAA;6BAEhB,MAAkC;AAAA,wBAA/BllC,EAAA,WAAWklC,EAAQ,QAAQ,CAAA,GAAA,CAAA;AAAA,kBAAA;;6CAEhC5kC,EAKE6kC,IAAA;AAAA;kBAHC,QAAQD;AAAA,kBACR,eAAallC,EAAA,WAAWklC,EAAQ,QAAQ;AAAA,kBACxC,uBAAoBvB;AAAA,gBAAA;;;;;;;;aApBnB9+B,EAAAu+B,CAAA,CAAO;AAAA,MAAA;MA0BT6B,EAAA,cADR3kC,EASO+F,IAAA;AAAA;QAPL,SAAQ;AAAA,QACR,MAAK;AAAA,QACL,OAAM;AAAA,QACL,SAAOxB,EAAA8/B,CAAA;AAAA,MAAA;mBAER,MAAoC;AAAA,UAApC/jC,EAAoCE,IAAA,EAA5B,MAAMkkC,EAAA,MAAA,GAAkB,MAAA,GAAA,CAAA,MAAA,CAAA;AAAA,UAAI/+B,EAAA,QACjC8+B,EAAA,KAAkB,GAAA,CAAA;AAAA,QAAA;;;;;ICjIZK,KAAe,CAAC1hC,MACvB4B,GAAO5B,CAAI,IAAU,KAClB,cAAcA,GAGV2hC,KAA2B,CACtC3hC,MAEI4B,GAAO5B,CAAI,IAAU,KAClB,EAAE,cAAcA,MAAS,WAAWA,GAGhC4hC,KAA2Brb,GAAY,+BAA+B,MAAM;AACvF,QAAMsb,IAAS1jC,EAAgD,IAAI;AAEnE,WAASoN,IAAQ;AACf,IAAAs2B,EAAO,QAAQ;AAAA,EACjB;AAEA,WAASC,EAAUvjC,GAAkD;AACnE,IAAIqD,GAAOrD,CAAI,MAAGsjC,EAAO,QAAQ,OACjCA,EAAO,QAAQvgC,GAAU/C,CAAI;AAAA,EAC/B;AAEA,SAAO;AAAA,IACL,WAAAujC;AAAA,IACA,QAAAD;AAAA,IACA,OAAAt2B;AAAA,EAAA;AAEJ,CAAC,GC3BYw2B,KAAyC,OAAO,IAAI,6CAA6C,GAEjGC,KAAsC,OAAO,IAAI,oCAAoC,GAIrFC,KAAwC,OAAO,IAAI,4CAA4C;AAErG,SAASC,GACdC,GACAC,GACA;AACA,QAAM,EAAE,YAAA/B,GAAY,WAAAF,EAAA,IAAcM,GAAA,GAC5BC,IAAQjkC,EAAS,MACjBklC,GAAyBQ,EAAM,KAAK,IAC/B;AAAA,IACL,OAAO;AAAA,MACL,OAAO;AAAA,QACL,aAAa;AAAA,UACX,WAAWhC,EAAU,GAAI;AAAA,QAAA;AAAA,QAE3B,QAAQ;AAAA,UACN,UAAUE,EAAW+B,EAAe,KAAK;AAAA,UACzC,WAAWjC,EAAU,GAAG;AAAA,QAAA;AAAA,MAC1B;AAAA,IACF;AAAA,EACF,IAGG,CAAA,CACR;AAGD,SAAO;AAAA,IACL,IAHSU,GAAaH,GAAO,EAAE,OAAAyB,KAAS,EAAE,QAAQH,IAAqC;AAAA,EAGvF;AAEJ;;;;;;;;;;;;ACnCA,UAAM3lC,IAAQC,GAaR0B,IAAOC,GAKP,EAAE,qCAAAqqB,GAAqC,uBAAAD,EAAA,IAA0BrB,GAAA,GAEjE0D,IAAgCpC,EAAoCjsB,EAAM,SAAS;AACzF,QAAI6D,EAAYwqB,CAA6B;AAC3C,YAAM,IAAI,MAAM,2CAA2C;AAG7D,UAAM2X,IAAW5lC,EAAS,MACjBiuB,EAA8BruB,EAAM,SAAS,CACrD,GAGKo/B,IAAkBpT,EAAsBhsB,EAAM,SAAS;AAE7D,QAAI6D,EAAYu7B,CAAe;AAC7B,YAAM,IAAI,MAAM,0DAA0D;AAG5E,UAAM6G,IAAc7lC,EAAS,MACpBg/B,EAAgBp/B,EAAM,SAAS,EAAE,0BACzC;2BAICO,EAekB2lC,IAAA;AAAA,MAdf,eAAajmC,EAAA;AAAA,MACb,gBAAcgmC,EAAA;AAAA,MACd,UAAUD,EAAA;AAAA,MACV,UAAU/lC,EAAA;AAAA,MACV,oBAAkB6E,EAAA4gC,EAAA;AAAA,MAClB,oCAAY/jC,EAAI,WAAA;AAAA,MAChB,uBAAkB4C,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAE,MAAE9C,EAAI,qBAAsB8C,CAAM;AAAA,IAAA;MAE1C,kBACT,MAA4B;AAAA,QAA5BhD,GAA4BC,EAAA,QAAA,cAAA;AAAA,MAAA;MAEnB,mBACT,MAA6B;AAAA,QAA7BD,GAA6BC,EAAA,QAAA,eAAA;AAAA,MAAA;;;;;;;;;;;;AC7DnC,UAAM1B,IAAQC,GAaRkmC,IAAQ/lC,EAAS,MACd,qBAAqBJ,EAAM,QAAQA,EAAM,QAAQ,aAAa,YAAYA,EAAM,KAAK,eAC1FA,EAAM,MACR,KACD;2BAICU,EAOM,OAAA;AAAA,MAPA,UAAOylC,EAAA,KAAK;AAAA,IAAA;MAChBtlC,EAKWmG,IAAA;AAAA,QAJT,WAAU;AAAA,QACV,UAAS;AAAA,MAAA;mBAET,MAAW;AAAA,cAAR/G,EAAA,KAAK,GAAA,CAAA;AAAA,QAAA;;;;;;;;;;;AChBd,UAAM,EAAE,GAAAgD,EAAA,IAAM/C,EAAA;;MAIZW,EAOO0M,IAAA,MAAA;AAAA,mBANL,MAEO;AAAA,UAFP1M,EAEO2M,IAAA,EAFD,MAAK,OAAG;AAAA,uBACZ,MAAgE;AAAA,kBAA7D1I,EAAA7B,CAAA,EAAC,uDAAA,CAAA,GAAA,CAAA;AAAA,YAAA;;;UAENpC,EAEO2M,IAAA,EAFD,MAAK,OAAG;AAAA,uBACZ,MAA6D;AAAA,cAA7D3M,EAA6DulC,IAAA;AAAA,gBAAjD,OAAOnmC,EAAA,KAAK,gBAAgB;AAAA,cAAA;;;;;;;MAG5CY,EAOO0M,IAAA,MAAA;AAAA,mBANL,MAEO;AAAA,UAFP1M,EAEO2M,IAAA,EAFD,MAAK,OAAG;AAAA,uBACZ,MAAwD;AAAA,kBAArD1I,EAAA7B,CAAA,EAAC,+CAAA,CAAA,GAAA,CAAA;AAAA,YAAA;;;UAENpC,EAEO2M,IAAA,EAFD,MAAK,OAAG;AAAA,uBACZ,MAAgC;AAAA,cAA7BtH,EAAAhF,EAAAjB,EAAA,KAAK,gBAAgB,KAAK,IAAG,QAClC,CAAA;AAAA,YAAA;;;;;;MAEFY,EAOO0M,IAAA,MAAA;AAAA,mBANL,MAEO;AAAA,UAFP1M,EAEO2M,IAAA,EAFD,MAAK,OAAG;AAAA,uBACZ,MAAyD;AAAA,kBAAtD1I,EAAA7B,CAAA,EAAC,gDAAA,CAAA,GAAA,CAAA;AAAA,YAAA;;;UAENpC,EAEO2M,IAAA,EAFD,MAAK,OAAG;AAAA,uBACZ,MAAiC;AAAA,cAA9BtH,EAAAhF,EAAAjB,EAAA,KAAK,gBAAgB,MAAM,IAAG,QACnC,CAAA;AAAA,YAAA;;;;;;MAEFY,EAOO0M,IAAA,MAAA;AAAA,mBANL,MAEO;AAAA,UAFP1M,EAEO2M,IAAA,EAFD,MAAK,OAAG;AAAA,uBACZ,MAAwD;AAAA,kBAArD1I,EAAA7B,CAAA,EAAC,+CAAA,CAAA,GAAA,CAAA;AAAA,YAAA;;;UAENpC,EAEO2M,IAAA,EAFD,MAAK,OAAG;AAAA,uBACZ,MAAqC;AAAA,kBAAlCvN,EAAA,KAAK,gBAAgB,UAAU,IAAG,QAAGiB,EAAGjB,EAAA,KAAK,gBAAgB,WAAW,GAAA,CAAA;AAAA,YAAA;;;;;;MAG/EY,EAOO0M,IAAA,MAAA;AAAA,mBANL,MAEO;AAAA,UAFP1M,EAEO2M,IAAA,EAFD,MAAK,OAAG;AAAA,uBACZ,MAA2D;AAAA,kBAAxD1I,EAAA7B,CAAA,EAAC,kDAAA,CAAA,GAAA,CAAA;AAAA,YAAA;;;UAENpC,EAEO2M,IAAA,EAFD,MAAK,OAAG;AAAA,uBACZ,MAAwD;AAAA,cAAxD3M,EAAwDwlC,IAAA;AAAA,gBAAxC,OAAOpmC,EAAA,KAAK,gBAAgB;AAAA,cAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzBlD,UAAMD,IAAQC,GAqCR0B,IAAOC,GAQPsR,IAASjL,GAAmBhI,GAAC,QAA0C,GACvE0T,IAAe1L,GAAoBhI,GAAC,cAAmD,GACvF6mB,IAAsB7e,GAAwChI,GAAC,qBAEpE,GAEKqmC,IAAoBnjC,GAAO68B,EAAoB,GAC/CuG,IAAkBpjC,GAAO88B,EAAkB,GAE3CuG,IAAgBC,MAAsB,KAAK;AAEjD,QAAI5iC,EAAYyiC,CAAiB,KAAKziC,EAAY0iC,CAAe;AAC/D,YAAM,IAAI,MAAM,IAAIC,CAAa,oCAAoC;AAGvE;AAAA;AAAA,MAEE3iC,EAAYyiC,EAAkB,OAAOtmC,EAAM,aAAa,CAAC;AAAA,MAEzD6D,EAAY0iC,EAAgBvmC,EAAM,aAAa,CAAC;AAAA;AAEhD,YAAM,IAAI;AAAA,QACR,IAAIwmC,CAAa,sDACMxmC,EAAM,aAAa,+BAA+B,OAAO,KAAKumC,CAAe,EAAE,KAAK,IAAI,CAAC;AAAA,MAAA;AAKpH,UAAM,EAAE,OAAAxf,GAAO,KAAAC,GAAK,kBAAAC,EAAA,IAAqBjnB,EAAM,UAAA,GAEzCknB,IAAa9mB,EAAS,MAAM;AAChC,UAAIuT,EAAa;AACf,eAAO;AAET,UAAImT,EAAoB,MAAM,SAAS,KAAK5T,EAAO,MAAM,SAASlT,EAAM;AACtE,eAAO6D,EAAY7D,EAAM,aAAa,IAClCiD,EAAE,gCAAgC,EAAE,KAAKjD,EAAM,gBAAgB,IAC/DA,EAAM;AAAA,IAGd,CAAC,GAEKgI,IAAa5H,EAAS;AAAA,MAC1B,MAAM;AACJ,eAAOJ,EAAM;AAAA,MACf;AAAA,MACA,IAAI8C,GAAwE;AAC1E,QAAAnB,EAAK,qBAAqBsD,GAAwEnC,CAAQ,CAAC;AAAA,MAC7G;AAAA,IAAA,CACD,GAEK,EAAE,GAAAG,EAAA,IAAM/C,EAAA,GACRgD,IAASC,GAA2BC,IAAmB,MAAS,GAChEC,IAAUF,GAA2BG,IAAoB,MAAS,GAElE+O,IAAYvQ,EAAI,EAAK,GAErB,EAAE,YAAAsJ,MAAekI;AAAAA;AAAAA,MAErB/N,GAAOvF,EAAM,YAAY,IAAI,OAAOA,EAAM,aAAa;AAAA,MACvDA,EAAM,cAAc;AAAA,IAAA,GAGhByD,IAAU,MAAM;AACpB,MAAA4O,EAAU,QAAQ,IAClB1Q,EAAK,SAASqG,EAAW,KAAK;AAAA,IAChC,GAEMxE,IAAS,MAAM;AACnB,MAAA6O,EAAU,QAAQ,IAClBrS,EAAM,GAAG,OAAA,GACT2B,EAAK,QAAQqG,EAAW,KAAK;AAAA,IAC/B,GAEMtE,IAAuBtD,EAAS,MAC/ByD,EAAY7D,EAAM,YAAY,IAC/BA,EAAM,GAAG,SAAS,SAAeA,EAAM,EAAE,QAAQ,IAAI,CAAC2D,MAAsBA,EAAK,QAAQ,IACtF,CAAA,IAFsC,CAAC3D,EAAM,YAAY,CAGjE,GAEK4D,IAAgBxD,EAAS,MAAM;AACnC,UAAI,CAACyD,EAAY7D,EAAM,KAAK,UAAUA,EAAM;AAC5C,UAAI6D,EAAYX,CAAM,KAAKW,EAAYR,CAAO,KAAKQ,EAAY7D,EAAM,GAAG,KAAK,EAAG,QAAO;AACvF,YAAM,EAAE,KAAK8D,MAASC,GAA6B/D,EAAM,GAAG,OAAO,GAAG;AACtE,aAAOiD,EAAEC,IAAS,MAAMG,IAAU,YAAYS,CAAI;AAAA,IACpD,CAAC,GAEKE,IAAmB5D,EAAS,MAC3ByD,EAAY7D,EAAM,QAAQ,IACxBA,EAAM,GAAG,YAAYA,EAAM,GAAG,SAAS,QAAQ,SAAS,aADtBA,EAAM,QAEhD,GAEK,EAAE,mBAAAyI,EAAA,IAAsBC,GAAA,GAExBkL,IAAY,OAAOC,MAAyB;AAChD,UAAItO,GAAOsO,CAAK,KAAKA,EAAM,SAAS7T,EAAM,gBAAgB;AACxD,QAAA8mB,EAAoB,MAAM,MAAA;AAC1B;AAAA,MACF;AACA,MAAAnT,EAAa,QAAQ,IACrB4yB,EAAgBvmC,EAAM,aAAa,IAAI6T,GACvCiT,EAAoB,MAAM,MAAA;AAC1B,UAAI;AAEF,SADY,MAAM9mB,EAAM,kBAAkBoL,GAAYm7B,GAAiBD,CAAiB,GACpF,QAAQ,CAAC3iC,MAAc;AACzB,UAAAmjB,EAAoB,MAAM,IAAInjB,EAAK3D,EAAM,SAAS,GAAG2D,CAAI;AAAA,QAC3D,CAAC;AAAA,MACH,SAASkU,GAAG;AACV,QAAApP,EAAkBoP,CAAC;AAAA,MACrB,UAAA;AACE,QAAAlE,EAAa,QAAQ;AAAA,MACvB;AAAA,IACF,GAEMF,IAAWrT,EAAiD,MAAM;AACtE,YAAMsT,wBAA4C,IAAA,GAC5CiC,wBAA4C,IAAA;AAClD,aAAI1L,GAAQjC,EAAW,KAAK,IAC1BA,EAAW,MAAM,QAAQ,CAACqD,MAAe;AACvC,QAAAqI,EAAM,IAAIrI,GAAO,EAAE;AAAA,MACrB,CAAC,IACQrD,EAAW,SACpB0L,EAAM,IAAI1L,EAAW,OAAO,EAAE,GAEhC8e,EAAoB,MAAM,QAAQ,CAACzb,MAAU;AAC3C,QAAAqI,EAAM,IAAIrI,EAAMrL,EAAM,SAAS,GAAGqL,EAAMrL,EAAM,SAAS,CAAC,GACxD2V,EAAS,IAAItK,EAAMrL,EAAM,SAAS,GAAGiF,GAAUoG,CAAK,CAAC;AAAA,MACvD,CAAC,GACM,MAAM,KAAKqI,GAAO,CAAC,CAAC9M,GAAKyE,CAAK,OAC5B,EAAE,OAAOzE,GAAK,OAAOyE,GAAO,KAAKsK,EAAS,IAAI/O,CAAG,EAAA,EACzD;AAAA,IACH,CAAC,GAEKugB,IAA2B,CAACC,MACzB,IAAI,QAAiB,CAAC3K,OAC3BqK,EAAoB,MAAM,QAAQ,CAACzb,GAAOzE,MAAQ;AAChD,MAAIwgB,EAAI,IAAIxgB,CAAG,KACbqgB,EAAiBhiB,GAAUoG,CAAK,CAAC;AAAA,IAErC,CAAC,GACMoR,EAAQ,EAAI,EACpB,GAGG/H,IAAe,MAAM;AAGzB,UAFAxB,EAAO,QAAQ,IACfU,EAAU,EAAE,GACR5T,EAAM,UAAU;AAClB,QAAAgI,EAAW,QAAQ,CAAA;AACnB;AAAA,MACF;AACA,MAAAA,EAAW,QAAQ;AAAA,IACrB;AAEA,WAAA2M;AAAA,MACEzB;AAAA,MACA,CAACmU,GAAaC,MAAgB;AAE5B,cAAMxkB,IAAWukB;AAEjB,QAAIvkB,MADawkB,MAEf1T,EAAU9Q,CAAQ,GAClBnB,EAAK,yBAAyBmB,CAAQ;AAAA,MAE1C;AAAA,MACA,EAAE,UAAU,IAAA;AAAA,IAAI,GAGlBD,GAAMqQ,GAAQ,CAACpQ,GAAU6C,MAAa;AACpC,MAAI7C,MAAa6C,KACfhE,EAAK,gBAAgBmB,CAAQ;AAAA,IAEjC,CAAC,GAEDD;AAAA,MACEmF;AAAA,MACA,OAAOlF,MAAa;AAClB,YAAIyC,GAAOzC,CAAQ,KAAKe,EAAYf,CAAQ,KAAMmH,GAAQnH,CAAQ,KAAKA,EAAS,WAAW;AACzF;AAEF,cAAMmR,IAAShK,GAAQnH,CAAQ,IAAIA,IAAW,CAACA,CAAQ,GACjDykB,IAAa,IAAI,IAAItT,CAAM;AACjC,cAAMkT,EAAyBI,CAAU,GAErCA,EAAW,OAAO,MACpBP,EAAI,MAAM,KAAKO,CAAU,CAA6B,GACtDR,EAAA;AAAA,MAEJ;AAAA,MACA,EAAE,WAAW,GAAA;AAAA,IAAK,mBAKlBxmB,EA0DgB2U,IAAA;AAAA,kBAzDLlN,EAAA;AAAA,oDAAAA,EAAU,QAAAvD;AAAA,MACX,QAAQyO,EAAA;AAAA,gDAAAA,EAAM,QAAAzO;AAAA,MACtB,OAAA;AAAA,MACC,OAAOgP,EAAA;AAAA,MACR,aAAA;AAAA,MACC,UAAUxT,EAAA;AAAA,MACV,WAAWA,EAAA;AAAA,MACX,kBAAgByD,EAAA;AAAA,MAChB,SAASiQ,EAAA;AAAA,MACT,gBAAcuT,EAAA;AAAA,MACf,cAAa;AAAA,MACZ,QAAA1jB;AAAA,MACA,SAAAC;AAAA,MACA,iBAAaiR;AAAA,IAAA;MAEH,SACT,MASO;AAAA,QAREzU,EAAA,8BADTS,EASO,QAAA;AAAA,UAPJ,KAAKsD,EAAA,QAAgB;AAAA,QAAA;UAEnBkC,EAAAhF,EAAA0C,EAAA,KAAa,IAAG,KACnB,CAAA;AAAA,UACQI,EAAA,SADRvD,EAAA,GAAAC,EAGE,QAHFS,EAGE;;;MAGK,iBACT,MAA2B;AAAA,QAA3BM,GAA2BC,EAAA,QAAA,aAAA;AAAA,MAAA;MAOlB,MAAId,EACb,CASO,EAAA,OAViBwU,SAAiBS,QAAQ;AAAA,QACjDpU,GASOC,EAAA,QAAA,QAAA;AAAA,UAPJ,OAAO0T;AAAA,UACP,MAAMS;AAAA,QAAA,GAHT,MASO;AAAA,UAJLhV,EAGEL,IAHFqS,GAGEuC,GAFiB;AAAA,YAChB,MAAMS,EAAS;AAAA,UAAA;;;MAKX,MAAIjV,EACb,CAMO,EAAA,OAPiBuU,SAAiBS,QAAQ;AAAA,QACjDnU,GAMOC,EAAA,QAAA,QAAA;AAAA,UAJJ,OAAOyT;AAAA,UACP,MAAMS;AAAA,QAAA,GAHT,MAMO;AAAA,UADL/U,EAAgCsG,IAAA,EAApB,OAAOgO,EAAA,GAAS,MAAA,GAAA,CAAA,OAAA,CAAA;AAAA,QAAA;;;;MAvBvBlV,EAAA;cACN;AAAA,cAFH,MAGE,EAAA;AAAA;;;;;ACzSC,SAASymC,KAA4B;AAqD1C,SAAO;AAAA,IACL,eArDoB,CACpB9/B,GACA6kB,GACAqV,GACA/X,GACA4d,GACA7Z,OAEO;AAAA,MACL,KAAAlmB;AAAA,MACA,MAAA6kB;AAAA,MACA,MAAM;AAAA,MACN,QAAAqV;AAAA,MACA,aAAa;AAAA,MACb,kBAAkB;AAAA,MAClB,WAAA/X;AAAA,MACA,aAAaT;AAAA,MACb,cAAc;AAAA,MACd,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,yBAAyB;AAAA,MACzB,sBAAsB;AAAA,MACtB,0BAA0B,CAAA;AAAA,MAC1B,UAAU,CAAA;AAAA,MACV,SAAS,CAAA;AAAA,MACT,iBAAiB,CAAA;AAAA,MACjB,YAAY,CAAA;AAAA,MACZ,wBAAwB;AAAA,MACxB,WAAAqe;AAAA,MACA,mBAAmB;AAAA,MACnB,iBAAiB;AAAA,MACjB,WAAA7Z;AAAA,MACA,cAAc;AAAA,MACd,UAAU;AAAA,QACR,eAAe;AAAA,QACf,iBAAiB;AAAA,QACjB,OAAO;AAAA,MAAA;AAAA,MAET,iBAAiB;AAAA,MACjB,OAAO;AAAA,QACL,UAAU;AAAA,QACV,SAAS;AAAA,QACT,qBAAqB+V;AAAA,MAAA;AAAA,MAEvB,2BAA2B;AAAA,MAC3B,yBAAyB;AAAA,MACzB,UAAU;AAAA,MACV,OAAO;AAAA,MACP,mBAAmB;AAAA,IAAA;AAAA,EAKrB;AAEJ;ACzDO,SAAS+D,KAAsB;AAqBpC,SAAO;AAAA,IACL,gBArBqB,CAACC,GAAuCC,MAA0B;AACvF,iBAAW,CAAClgC,GAAKyE,CAAK,KAAK,OAAO,QAAQw7B,CAAW;AACnD,QAAI37B,GAAcG,CAAK,KACrBy7B,EAAS,IAAIlgC,CAAG;AAAA,IAGtB;AAAA,IAgBE,oBAdyB,CAACigC,MAA0C;AACpE,YAAME,IAA0B,CAAA;AAChC,iBAAW17B,KAAS,OAAO,OAAOw7B,CAAW;AAC3C,QAAI58B,GAAQoB,CAAK,KAAKA,EAAM,SAAS,KACnCA,EAAM,QAAQ,CAACwJ,MAAO;AACpB,UAAAkyB,EAAU,KAAKlyB,CAAE;AAAA,QACnB,CAAC;AAGL,aAAOkyB;AAAA,IACT;AAAA,EAIE;AAEJ;ACvBO,MAAMC,KAA4D,OAAO,kCAAkC;AAE3G,SAASC,KAA8B;AAC5C,SAAOC,GAA6BF,EAA2B;AACjE;AAEO,MAAMG,KAAsB;AAAA,EACjC,oBAAoB;AAAA,EACpB,iBAAiB;AAAA,EACjB,oBAAoB;AAAA,EACpB,mBAAmB;AAAA,EACnB,kBAAkB;AAAA,EAClB,wBAAwB;AAAA,EACxB,cAAc;AAAA,EACd,0BAA0B;AAAA,EAC1B,8BAA8B;AAAA,EAC9B,yBAAyB;AAAA,EACzB,oBAAoB;AAAA,EACpB,wBAAwB;AAAA,EACxB,aAAa;AAAA,EACb,iBAAiB;AACnB,GCjBM,EAAE,GAAAlkC,GAAA,IAAM8f,GAAK,UAAUA,IAEvBqkB,KAA8BtlC,EAAI,EAAK;AAEtC,SAASulC,KAAuB;AACrC,QAAM,EAAE,cAAAC,EAAA,IAAiB3U,GAAA,GAEnB4U,IAAUD,EAAa,WAAWA,EAAa,aAAa,SAAS,GAErEE,IAAWP,GAAA,GAEX,EAAE,MAAAQ,EAAA,IAASC,GAAaJ,EAAa,cAAc;AAAA,IACvD,WAAW;AAAA,IACX,WAAW;AAAA,IACX,eAAe;AAAA,MACb,SAAS;AAAA,MACT,OAAO;AAAA,MACP,WAAW;AACT,YAAI,CAACC,EAAS;AACd,cAAM,EAAE,aAAAI,EAAA,IAAgBj/B,GAAA;AACxB,mBAAW,MAAM;AACf,UAAAi/B,EAAY1kC,GAAE,2CAA2C,CAAC;AAAA,QAC5D,GAAG,GAAI;AAAA,MACT;AAAA,IAAA;AAAA,IAEF,UAAU2kC,GAAIpjC,GAAO;AACnB,UAAI,CAAC+iC,EAAS;AACd,YAAMljB,IAAU,KAAK,MAAM7f,EAAM,IAAc,GACzCtC,IAAOmiB,EAAQ,KAAK,SAAS,KAAK,MAAMA,EAAQ,IAAI,IAAI;AAC9D,MAAAmjB,EAAS,KAAK,EAAE,MAAMnjB,EAAQ,WAAW,MAAAniB,GAAM;AAAA,IACjD;AAAA,EAAA,CACD;AAQD,SAAO;AAAA,IACL,gBAPqB,MAAM;AAE3B,MADAklC,GAA4B,QAAQ,IAC/BG,KACLE,EAAA;AAAA,IACF;AAAA,IAIE,6BAAAL;AAAA,EAAA;AAEJ;AAEO,SAASS,KAAsB;AACpC,QAAML,IAAWP,GAAA;AAMjB,SAAO;AAAA,IACL,4BALiC,CAACr8B,MAC3B48B,EAAS,GAAG58B,CAAQ;AAAA,EAI3B;AAEJ;AC9DO,MAAMk9B,KAAyB,CACpCC,GACAxd,MAC4B;AAC5B,aAAW,CAAC3jB,GAAKqN,CAAM,KAAK,OAAO,QAAQsW,CAAkB;AAC3D,QAAK,OAAO,OAAOhC,EAAY,EAAE,SAAS3hB,CAAuB;AACjE,eAASonB,IAAI,GAAGA,IAAI/Z,EAAO,UAAU,QAAQ+Z;AAC3C,YAAI+Z,MAAa9zB,EAAO,UAAU+Z,CAAC,EAAG,QAAOpnB;AAAA;AAGjD,SAAO;AACT,GCWaohC,KAAsB;AAAA,EACjC,MAAM;AAAA,EACN,OAAO;AAAA,EACP,uBAAuB;AAAA,EACvB,UAAU;AACZ,GAGaC,KAAwB;AAAA,EACnC,SAAS;AAAA;AAAA,EACT,SAAS;AAAA;AAAA,EACT,WAAW;AAAA;AAAA,EACX,YAAY;AAAA;AAAA,EACZ,QAAQ;AAAA;AAAA,EACR,UAAU;AAAA;AAAA,EACV,MAAM;AAAA;AACR,GCrCMtB,KAAY7kC,EAAwB,MAAS;AAE5C,SAASomC,GAAsBC,IAAqB,IAAI;AAC7D,QAAMvd,IAAiBX,GAAA,GACjBme,IAAgBtmC,EAAI6kC,GAAU,SAAS/b,EAAe,aAAa,SAAS,iBAAiB,OAAO,GAEpGyd,IAAyBF,IAAa,GACtCG,IAA2BH,IAAa,GACxCI,IAAyBJ,IAAa,GAEtCK,IAAkB,CAACC,MAAyB;AAChD,QAAIljC,GAAOkjC,CAAK;AACd,aAAO;AAGT,UAAMC,IAA2BN,EAAc,QAAQK;AACvD,WAAIC,IAA2BH,KAC7BH,EAAc,QAAQO,EAAgBJ,IAAyBE,CAAK,GACpE9B,GAAU,QAAQyB,EAAc,OAEzB,MAELM,IAA2BL,KAC7BD,EAAc,QAAQO,EAAgBL,IAA2BG,CAAK,GACtE9B,GAAU,QAAQyB,EAAc,OAEzB,MAGF;AAAA,EACT,GAEMO,IAAkB,CAACt9B,MACnBA,IAAQuf,EAAe,aAAa,SAAS,iBAAiB,UACzDA,EAAe,aAAa,SAAS,iBAAiB,UAE3Dvf,IAAQuf,EAAe,aAAa,SAAS,iBAAiB,UACzDA,EAAe,aAAa,SAAS,iBAAiB,UAGxDvf;AAGT,SAAO;AAAA,IACL,eAAA+8B;AAAA,IACA,iBAAAI;AAAA,EAAA;AAEJ;ACnDO,MAAMI,KAAiB,CAACC,MAAkC;AAC/D,MAAI,CAACA,EAAM,QAAO;AAClB,MAAIA,EAAK,QAAQA,EAAK,KAAK,SAAS;AAClC,WAAOA,EAAK;AAGd,UADkBA,EAAK,KAAK,MAAM,GAAG,EAAE,IAAA,GAAO,YAAA,GACtC;AAAA,IACN,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EAAA;AAEb;ACOA,IAAIC,KAA0D;AAE9D,MAAMC,KAAY,OACXD,OACHA,KAAgB,OAAO,sBAAa,EACjC,KAAK,CAAC/M,MAAWA,CAAM,EACvB,MAAM,MAAM,IAAI,IAEd+M;AAGF,SAASE,KAAY;AAuI1B,SAAO;AAAA,IACL,UAvIe,CAACngC,GAAcogC,MAAkC;AAGhE,UAFA,QAAQ,MAAM,kBAAkBpgC,CAAK,GAEjC,OAAO;AACT,YAAI;AACF,iBAAO,OAAO,iBAAiBA,GAAO;AAAA,YACpC,GAAGogC;AAAA,YACH,MAAM;AAAA,cACJ,GAAGA,GAAS;AAAA,cACZ,WAAW;AAAA,YAAA;AAAA,UACb,CACD;AACD;AAAA,QACF,SAASpxB,GAAG;AACV,kBAAQ,MAAM,gCAAgCA,CAAC;AAAA,QACjD;AAGF,MAAAkxB,GAAA,EAAY,KAAK,CAACG,MAAW;AAC3B,YAAIA;AACF,cAAI;AACF,YAAAA,EAAO,iBAAiBrgC,GAAO;AAAA,cAC7B,GAAGogC;AAAA,cACH,MAAM;AAAA,gBACJ,GAAGA,GAAS;AAAA,gBACZ,WAAW;AAAA,cAAA;AAAA,YACb,CACD;AAAA,UACH,SAASpxB,GAAG;AACV,oBAAQ,MAAM,kCAAkCA,CAAC;AAAA,UACnD;AAAA,MAEJ,CAAC;AAAA,IACH;AAAA,IAuGE,YArGiB,CACjBwM,GACA8kB,IAA0D,QAC1DF,MACS;AACT,cAAQE,GAAA;AAAA,QACN,KAAK;AAAA,QACL,KAAK;AACH,kBAAQ,MAAM,kBAAkB9kB,CAAO;AACvC;AAAA,QACF,KAAK;AACH,kBAAQ,KAAK,kBAAkBA,CAAO;AACtC;AAAA,QACF,KAAK;AACH,kBAAQ,KAAK,kBAAkBA,CAAO;AACtC;AAAA,QACF,KAAK;AACH,kBAAQ,MAAM,kBAAkBA,CAAO;AACvC;AAAA,QACF;AACE,kBAAQ,IAAI,kBAAkBA,CAAO;AAAA,MAAA;AAGzC,UAAI,OAAO;AACT,YAAI;AACF,iBAAO,OAAO,eAAeA,GAAS;AAAA,YACpC,OAAA8kB;AAAA,YACA,GAAGF;AAAA,YACH,MAAM;AAAA,cACJ,GAAGA,GAAS;AAAA,cACZ,WAAW;AAAA,YAAA;AAAA,UACb,CACD;AACD;AAAA,QACF,SAASpxB,GAAG;AACV,kBAAQ,MAAM,gCAAgCA,CAAC;AAAA,QACjD;AAGF,MAAAkxB,GAAA,EAAY,KAAK,CAACG,MAAW;AAC3B,YAAIA;AACF,cAAI;AACF,YAAAA,EAAO,eAAe7kB,GAAS;AAAA,cAC7B,OAAA8kB;AAAA,cACA,GAAGF;AAAA,cACH,MAAM;AAAA,gBACJ,GAAGA,GAAS;AAAA,gBACZ,WAAW;AAAA,cAAA;AAAA,YACb,CACD;AAAA,UACH,SAASpxB,GAAG;AACV,oBAAQ,MAAM,kCAAkCA,CAAC;AAAA,UACnD;AAAA,MAEJ,CAAC;AAAA,IACH;AAAA,IA+CE,QA7Ca,CAACjR,GAAayE,MAAwB;AACnD,UAAI,OAAO;AACT,YAAI;AACF,iBAAO,OAAO,OAAOzE,GAAKyE,CAAK;AAC/B;AAAA,QACF,QAAY;AAAA,QAEZ;AAGF,MAAA09B,GAAA,EAAY,KAAK,CAACG,MAAW;AAC3B,YAAIA;AACF,cAAI;AACF,YAAAA,EAAO,OAAOtiC,GAAKyE,CAAK;AAAA,UAC1B,QAAY;AAAA,UAEZ;AAAA,MAEJ,CAAC;AAAA,IACH;AAAA,IA2BE,SAzBc,CAACoF,MAAkE;AACjF,UAAI,OAAO;AACT,YAAI;AACF,iBAAO,OAAO,QAAQA,CAAI;AAC1B;AAAA,QACF,QAAY;AAAA,QAEZ;AAGF,MAAAs4B,GAAA,EAAY,KAAK,CAACG,MAAW;AAC3B,YAAIA;AACF,cAAI;AACF,YAAAA,EAAO,QAAQz4B,CAAI;AAAA,UACrB,QAAY;AAAA,UAEZ;AAAA,MAEJ,CAAC;AAAA,IACH;AAAA,EAME;AAEJ;ACjKA,MAAMgY,KAAY,iBACZ2gB,KAAuB,KAEhBC,KAAiB,CAACj4B,GAA6ByD,MAC1DrD,GAA4BJ,GAAQqX,KAAY,QAAQ,EAAE,IAAA5T,KAAMmU,IAAiB,OAAO,GAE7EsgB,KAAmB,CAACl4B,GAA6BzN,MACrD,IAAI,QAAQ,CAAC8Y,GAASC,MAAW;AACtC,MAAI6sB,IAAM9gB,KAAY,cAAc9kB,EAAK;AACzC,EAAIA,EAAK,SAASqkC,GAAoB,YAAYrkC,EAAK,YAAYA,EAAK,YACtE4lC,IAAM9gB,KAAY,YAAY9kB,EAAK,UAAU,gBAAgBA,EAAK,WAEpEyN,EAAA,EACG;AAAA,IACCm4B;AAAA,IACA,KAAK,UAAU;AAAA,MACb,UAAUX,GAAejlC,EAAK,IAAI;AAAA,MAClC,MAAMA,EAAK,MAAM;AAAA,IAAA,CAClB;AAAA,EAAA,EAEF,KAAK,CAACiF,MAAQ;AACb,IAAIA,EAAI,WAAW4gC,KACjB/sB,EAAQ7T,EAAI,IAAI,IAGhB8T,EAAA;AAAA,EAEJ,CAAC,EACA,MAAM,CAACsO,MAAQ;AAEd,IAAAtO,EAAOsO,CAAG;AAAA,EACZ,CAAC;AACL,CAAC,GAGUye,KAAmB,CAC9Br4B,GACAzN,GACA+lC,GACAC,GACAC,GACA/b,GACAgc,IAAuE,WAEhE,IAAI,QAAQ,CAACptB,GAASC,MAAW;AACtC,QAAM,EAAE,YAAAotB,GAAY,UAAAC,EAAA,IAAaf,GAAA;AAGjC,MAAI,EAAEW,aAAkB,SAASA,EAAO,SAAS,GAAG;AAClD,IAAAG,EAAW,+BAA+B,SAAS;AAAA,MACjD,MAAM;AAAA,QACJ,YAAY;AAAA,MAAA;AAAA,MAEd,OAAO;AAAA,QACL,MAAMnmC,EAAK;AAAA,QACX,WAAWA,EAAK;AAAA,QAChB,iBAAiBA,EAAK;AAAA,QACtB,SAAA+lC;AAAA,QACA,QAAA7b;AAAA,QACA,MAAA+b;AAAA,QACA,YAAY,OAAOD;AAAA,QACnB,sBAAsBA,aAAkB;AAAA,QACxC,sBAAsBA,aAAkB;AAAA,QACxC,YAAYA,aAAkB,OAAOA,EAAO,OAAO;AAAA,MAAA;AAAA,IACrD,CACD,GACDjtB,EAAO,IAAI,MAAM,kDAAkD,CAAC;AACpE;AAAA,EACF;AAGA,MAAI,OAAOktB,KAAS,YAAY,CAAC,OAAO,UAAUA,CAAI,KAAKA,KAAQ,GAAG;AACpE,IAAAE,EAAW,+BAA+B,SAAS;AAAA,MACjD,MAAM;AAAA,QACJ,YAAY;AAAA,MAAA;AAAA,MAEd,OAAO;AAAA,QACL,MAAMnmC,EAAK;AAAA,QACX,WAAWA,EAAK;AAAA,QAChB,iBAAiBA,EAAK;AAAA,QACtB,SAAA+lC;AAAA,QACA,QAAA7b;AAAA,QACA,MAAA+b;AAAA,QACA,UAAU,OAAOA;AAAA,QACjB,WAAW,OAAO,UAAUA,CAAI;AAAA,MAAA;AAAA,IAClC,CACD,GACDltB,EAAO,IAAI,MAAM,0CAA0C,CAAC;AAC5D;AAAA,EACF;AAGA,MAAI,OAAOmR,KAAW,YAAY,CAAC,OAAO,UAAUA,CAAM,KAAKA,IAAS,GAAG;AACzE,IAAAic,EAAW,+BAA+B,SAAS;AAAA,MACjD,MAAM;AAAA,QACJ,YAAY;AAAA,MAAA;AAAA,MAEd,OAAO;AAAA,QACL,MAAMnmC,EAAK;AAAA,QACX,WAAWA,EAAK;AAAA,QAChB,iBAAiBA,EAAK;AAAA,QACtB,SAAA+lC;AAAA,QACA,QAAA7b;AAAA,QACA,MAAA+b;AAAA,QACA,YAAY,OAAO/b;AAAA,QACnB,WAAW,OAAO,UAAUA,CAAM;AAAA,MAAA;AAAA,IACpC,CACD,GACDnR,EAAO,IAAI,MAAM,gDAAgD,CAAC;AAClE;AAAA,EACF;AAEA,QAAMstB,IAAW,IAAI,SAAA,GACfT,IAAM9gB,KAAY,MAAMihB,IAAU;AACxC,EAAAM,EAAS,OAAO,QAAQL,CAAM;AAC9B,MAAIM,IAAY;AAChB,MAAI;AACF,IAAAA,IAAY,KAAK,UAAU;AAAA,MACzB,QAAApc;AAAA,MACA,MAAA+b;AAAA,IAAA,CACD;AAAA,EACH,SAAS/gC,GAAO;AACd,IAAAkhC,EAASlhC,GAAc;AAAA,MACrB,MAAM;AAAA,QACJ,YAAY;AAAA,MAAA;AAAA,MAEd,OAAO;AAAA,QACL,MAAMlF,EAAK;AAAA,QACX,WAAWA,EAAK;AAAA,QAChB,iBAAiBA,EAAK;AAAA,QACtB,SAAA+lC;AAAA,QACA,QAAA7b;AAAA,QACA,MAAA+b;AAAA,QACA,YAAY,OAAO/b;AAAA,QACnB,iBAAiB,OAAO,UAAUA,CAAM;AAAA,QACxC,UAAU,OAAO+b;AAAA,QACjB,eAAe,OAAO,UAAUA,CAAI;AAAA,MAAA;AAAA,IACtC,CACD,GACDltB,EAAO7T,CAAK;AACZ;AAAA,EACF;AAEA,EAAAmhC,EAAS,OAAO,SAASC,CAAS,GAElC74B,EAAOg4B,EAAoB,EACxB,KAAKG,GAAKS,GAAU;AAAA,IACnB,SAAS;AAAA,MACP,gBAAgB;AAAA;AAAA,IAAA;AAAA,IAElB,aAAarmC,EAAK,yBAAyBA,EAAK,uBAAuB,QAAQ;AAAA,IAC/E,kBAAkBkmC;AAAA,EAAA,CACnB,EACA,KAAK,CAACjhC,MAAQ;AACb,IAAIA,EAAI,WAAW4gC,KACjB/sB,EAAQ7T,EAAI,IAAI,IAGhB8T,EAAA;AAAA,EAEJ,CAAC,EACA,MAAM,CAACsO,MAAQ;AAEd,IAAIkf,GAAM,aAAalf,CAAG,KAAKA,EAAI,UAAU,WAAW,OACtD+e,EAAS/e,GAAK;AAAA,MACZ,MAAM;AAAA,QACJ,YAAY;AAAA,MAAA;AAAA,MAEd,OAAO;AAAA,QACL,MAAMrnB,EAAK;AAAA,QACX,WAAWA,EAAK;AAAA,QAChB,iBAAiBA,EAAK;AAAA,QACtB,SAAA+lC;AAAA,QACA,QAAA7b;AAAA,QACA,MAAA+b;AAAA,QACA,cAAc5e,EAAI,SAAS;AAAA,QAC3B,gBAAgBA,EAAI,SAAS;AAAA,QAC7B,oBAAoBA,EAAI,SAAS;AAAA,QACjC,WAAAif;AAAA,MAAA;AAAA,IACF,CACD,GAEHvtB,EAAOsO,CAAG;AAAA,EACZ,CAAC;AACL,CAAC,GAGUmf,KAAoB,CAAC/4B,GAA6BzN,GAAuBymC,MAC7E,IAAI,QAAQ,CAAC3tB,GAASC,MAAW;AACtC,QAAM6sB,IAAM9gB,KAAY,MAAM9kB,EAAK,SAAS;AAC5C,EAAAyN,EAAA,EACG;AAAA,IACCm4B;AAAA,IACA,KAAK,UAAU;AAAA,MACb,UAAUa;AAAA,IAAA,CACX;AAAA,EAAA,EAEF,KAAK,CAACxhC,MAAQ;AACb,IAAIA,EAAI,WAAW6kB,KACjBhR,EAAQ7T,EAAI,IAAI,IAGhB8T,EAAA;AAAA,EAEJ,CAAC,EACA,MAAM,CAACsO,MAAQ;AAEd,IAAAtO,EAAOsO,CAAG;AAAA,EACZ,CAAC;AACL,CAAC,GAGUqf,KAAc,CAACj5B,GAA6Bs4B,GAAgBY,MAChE,IAAI,QAAQ,CAAC7tB,GAASC,MAAW;AACtC,QAAM6sB,IAAM9gB,KAAY,MAAMihB,IAAU,aAAaY;AACrD,EAAAl5B,EAAA,EACG,MAAMm4B,CAAG,EACT,KAAK,CAAC3gC,MAAQ;AACb,IAAIA,EAAI,WAAW6kB,KACjBhR,EAAQ7T,EAAI,IAAI,IAGhB8T,EAAA;AAAA,EAEJ,CAAC,EACA,MAAM,CAACsO,MAAQ;AAEd,IAAAtO,EAAOsO,CAAG;AAAA,EACZ,CAAC;AACL,CAAC,GAGGuf,KAA4B,IAC5BC,KAA4B,IAErBtY,KAAgB,OAC3B9gB,GACA4E,MAC2C;AAC3C,MAAIA,EAAM,SAASu0B;AACjB,WAAO,QAAQ,OAAO,oBAAoB;AAG5C,QAAMhB,IAAM9gB,KAAY,oBAQlBgiB,KANa,CAAIC,GAAU/D,MACxB,MAAM;AAAA,IAAK,EAAE,QAAQ,KAAK,KAAK+D,EAAI,SAAS/D,CAAS,EAAA;AAAA,IAAK,CAACgE,GAAG3c,MACnE0c,EAAI,MAAM1c,IAAI2Y,GAAW3Y,IAAI2Y,IAAYA,CAAS;AAAA,EAAA,GAIxB3wB,GAAOw0B,EAAyB;AAE9D,MAAI;AASF,YARkB,MAAM,QAAQ;AAAA,MAC9BC,EAAW;AAAA,QAAI,CAACG,MACdx5B,IACG,MAAMm4B,GAAK,KAAK,UAAUqB,CAAK,CAAC,EAChC,KAAK,CAAChiC,MAASA,EAAI,WAAW6kB,KAAiB7kB,EAAI,OAAO,CAAA,CAAG;AAAA,MAAA;AAAA,IAClE,GAGe,KAAA;AAAA,EACnB,SAASC,GAAO;AACd,WAAO,QAAQ,OAAOA,CAAK;AAAA,EAC7B;AACF,GCzQMgiC,KAA4C,IAC5CC,KAAkC,GAE3BC,KAA0G,CACrH35B,GACAzN,MAEO,IAAI,QAAQ,CAAC8Y,GAASC,MAAW;AACtC,MAAI/Y,EAAK,cAAc4kB,GAAa,OAAO;AACzC,IAAA7L,EAAA;AACA;AAAA,EACF;AACA,EAAA4sB,GAAiBl4B,GAAQzN,CAAI,EAC1B,KAAK,CAACiF,MAAQ;AACb,IAAA6T,EAAQ7T,CAA6B;AAAA,EAEvC,CAAC,EACA,MAAM,CAACoiB,MAAQtO,EAAOsO,CAAG,CAAC;AAC/B,CAAC,GAGUggB,KAAiB,CAC5B55B,GACAzN,GACA+lC,GACAC,GACAC,GACA/b,GACAgc,MAEO,IAAI,QAAQ,CAACptB,GAASC,MAAW;AACtC,MAAI/Y,EAAK,cAAc4kB,GAAa,OAAO;AACzC,IAAA7L,EAAA;AACA;AAAA,EACF;AACA,EAAA+sB,GAAiBr4B,GAAQzN,GAAM+lC,GAASC,GAAQC,GAAM/b,GAAQgc,CAAwB,EACnF,KAAK,CAACjhC,MAAQ;AACb,IAAA6T,EAAQ7T,CAAG;AAAA,EACb,CAAC,EACA,MAAM,CAACoiB,MAAQ;AACd,IAAAtO,EAAOsO,CAAG;AAAA,EACZ,CAAC;AACL,CAAC,GAGUigB,KAAkB,CAC7B75B,GACAzN,GACAymC,GACAc,MAEO,IAAI,QAAQ,CAACzuB,GAASC,MAAW;AACtC,MAAI/Y,EAAK,cAAc4kB,GAAa,OAAO;AACzC,IAAA7L,EAAA;AACA;AAAA,EACF;AACA,EAAAytB,GAAkB/4B,GAAQzN,GAAMymC,CAAG,EAChC,KAAK,CAACxhC,MAAQ;AACb,IAAAjF,EAAK,SAASskC,GAAsB,YAChCiD,MACFvnC,EAAK,4BAA4B,WAAW,WAAY;AACtD,MAAAwnC,GAA6B/5B,GAAQzN,CAAI;AAAA,IAC3C,GAAGynC,GAAsBznC,CAAI,CAAC,IAEhC8Y,EAAQ7T,CAAG;AAAA,EACb,CAAC,EACA,MAAM,CAACoiB,MAAQtO,EAAOsO,CAAG,CAAC;AAC/B,CAAC;AAGH,SAASogB,GAAsBznC,GAAuB;AACpD,SAAOknC,KAA4C,MAAOlnC,EAAK,0BAA0BA,EAAK;AAChG;AAEA,eAAewnC,GAA6B/5B,GAA6BzN,GAAuB;AAE9F,MADA,aAAaA,EAAK,yBAAyB,GACvCA,EAAK,WAAWskC,GAAsB,SAAU;AACpD,MAAItkC,EAAK,0BAA0BmnC,IAAiC;AAClE,IAAAnnC,EAAK,MAAM,WAAW,IACtBA,EAAK,MAAM,UAAU;AACrB;AAAA,EACF;AACA,MAAI,CAACA,EAAK,QAAS;AACnB,QAAM6qB,IAAQ,MAAMxB,GAAW5b,GAAQzN,EAAK,OAAO;AACnD,MAAI6qB,KAASA,EAAM,YAAYA,EAAM,SAAS,gBAAgB;AAC5D,UAAM6c,IAAoBC,GAAA;AAC1B,QAAI9c,EAAM,SAAS,eAAe,WAAWmU,GAAuB,WAAW;AAC7E,MAAA0I,EAAkB,mBAAmB7c,EAAM,EAAE;AAC7C;AAAA,IACF,WAAWA,EAAM,SAAS,eAAe,WAAWmU,GAAuB,WAAW;AACpF,MAAA0I,EAAkB,mBAAmB7c,EAAM,IAAIA,EAAM,SAAS,iBAAiBA,EAAM,WAAW,SAAS;AACzG;AAAA,IACF,WAAWA,EAAM,SAAS,eAAe,WAAWmU,GAAuB,QAAQ;AACjF,MAAA0I,EAAkB,gBAAgB7c,EAAM,IAAIA,EAAM,SAAS,eAAe,UAAU;AACpF;AAAA,IACF;AAAA,EACF;AACA,EAAA7qB,EAAK,2BACLA,EAAK,4BAA4B,WAAW,WAAY;AACtD,IAAAwnC,GAA6B/5B,GAAQzN,CAAI;AAAA,EAC3C,GAAGynC,GAAsBznC,CAAI,CAAC;AAChC;;;;AClHA,KAAC,SAA0C4nC,GAAMC,GAAS;AAExD,MAAAzP,EAAA,UAAiByP,EAAO;AAAA,IAO1B,GAAG,OAAO,OAAS,MAAc,OAAOxP,IAAM,WAAW;AACzD;AAAA;AAAA,SAAiB,SAASyP,GAAS;AAEzB,cAAIC,IAAmB,CAAA;AAGvB,mBAASC,EAAoBC,GAAU;AAGtC,gBAAGF,EAAiBE,CAAQ;AAC3B,qBAAOF,EAAiBE,CAAQ,EAAE;AAGnC,gBAAI7P,IAAS2P,EAAiBE,CAAQ,IAAI;AAAA;AAAA,cACzCA;AAAA;AAAA,cACA,GAAG;AAAA;AAAA,cACH,SAAS,CAAA;AAAA;AAAA;AAIV,mBAAAH,EAAQG,CAAQ,EAAE,KAAK7P,EAAO,SAASA,GAAQA,EAAO,SAAS4P,CAAmB,GAGlF5P,EAAO,IAAI,IAGJA,EAAO;AAAA,UACzB;AAIU,iBAAA4P,EAAoB,IAAIF,GAGxBE,EAAoB,IAAID,GAGxBC,EAAoB,IAAI,SAASE,GAASC,GAAMC,GAAQ;AACvD,YAAIJ,EAAoB,EAAEE,GAASC,CAAI,KACtC,OAAO,eAAeD,GAASC,GAAM;AAAA;AAAA,cACpC,cAAc;AAAA;AAAA,cACd,YAAY;AAAA;AAAA,cACZ,KAAKC;AAAA;AAAA,YAClB,CAAa;AAAA,UAEb,GAGUJ,EAAoB,IAAI,SAAS5P,GAAQ;AACxC,gBAAIgQ,IAAShQ,KAAUA,EAAO;AAAA;AAAA,cAC7B,WAAsB;AAAE,uBAAOA,EAAO;AAAA,cAAW;AAAA;AAAA;AAAA,cACjD,WAA4B;AAAE,uBAAOA;AAAA,cAAO;AAAA;AAC7C,mBAAA4P,EAAoB,EAAEI,GAAQ,KAAKA,CAAM,GAClCA;AAAA,UAClB,GAGUJ,EAAoB,IAAI,SAAS/T,GAAQoU,GAAU;AAAE,mBAAO,OAAO,UAAU,eAAe,KAAKpU,GAAQoU,CAAQ;AAAA,UAAE,GAGnHL,EAAoB,IAAI,IAGjBA,EAAoBA,EAAoB,IAAI,CAAC;AAAA,QAC9D,GAEU;AAAA;AAAA;AAAA,WAEH,SAAS5P,GAAQ8P,GAASF,GAAqB;AAEtD,qBAASM,EAAgBC,GAAUC,GAAa;AAAE,kBAAI,EAAED,aAAoBC;AAAgB,sBAAM,IAAI,UAAU,mCAAmC;AAAA,YAAI;AAIvJ,gBAAIC,IAAYT,EAAoB,CAAC,GAEjCU,IAAWV,EAAoB,CAAC,GAChCW,IAAQD,EAAS,OACjBE,IAAeF,EAAS,cAExBG,IAAOb,EAAoB,CAAC,GAI5Bc,IAAS,SAAUC,GAAK;AAC1B,mBAAKA,KAAO,GAAGA,IAAM,KAAK,GAAGA,KAAO;AAAG;AACvC,qBAAOA;AAAA,YACT,GAEIC,IAAY,SAAUC,GAAKF,GAAK;AAClC,kBAAIG,IAAK,IAAI,WAAWD,EAAI,MAAM,GAC9BE,IAAKJ,IAAM,GACXK,IAAQL,IAAMI;AAClB,sBAAQA,GAAE;AAAA,gBACR,KAAK;AACH,kBAAAD,EAAGE,IAAQ,CAAC,IAAI;AAAA,gBAClB,KAAK;AACH,kBAAAF,EAAGE,IAAQ,CAAC,IAAI;AAAA,gBAClB,KAAK;AACH,kBAAAF,EAAGE,IAAQ,CAAC,IAAI;AAAA,gBAClB,KAAK;AACH,kBAAAF,EAAGE,IAAQ,CAAC,IAAI;AAAA,cACtB;AACE,uBAAS/e,KAAK0e,KAAO,KAAK,GAAG1e,IAAI4e,EAAI,QAAQ5e;AAC3C,gBAAA4e,EAAI5e,CAAC,IAAI;AAAA,YAEb,GAEIgf,IAAU,SAAUJ,GAAKK,GAAUC,GAAQ;AAC7C,cAAAN,EAAIK,KAAY,CAAC,KAAK,OAAQ,MAAMA,IAAW,KAAK,IAGpDL,IAAMK,KAAY,KAAK,IAAI,OAAS,EAAE,IAAIC,KAAU,KAAK,MAAM,GAC/DN,IAAMK,KAAY,KAAK,IAAI,OAAS,EAAE,IAAIC,KAAU;AAAA,YACtD,GAEIC,IAAe,SAAUC,GAAMC,GAAgB;AACjD,kBAAIC,IAAK,IAAI,WAAWF,GAAMC,IAAiB,KAAK,CAAC,GACjDE,IAAM,IAAI,WAAW,CAAC,GACtB7C,IAAM,IAAI,SAAS6C,EAAI,MAAM;AACjC,qBAAA7C,EAAI,SAAS,GAAG4C,EAAG,CAAC,GAAG,EAAK,GAC5B5C,EAAI,SAAS,GAAG4C,EAAG,CAAC,GAAG,EAAK,GAC5B5C,EAAI,SAAS,GAAG4C,EAAG,CAAC,GAAG,EAAK,GAC5B5C,EAAI,SAAS,IAAI4C,EAAG,CAAC,GAAG,EAAK,GAC7B5C,EAAI,SAAS,IAAI4C,EAAG,CAAC,GAAG,EAAK,GACtBC;AAAA,YACT,GAEIC,KAAQ,WAAY;AACtB,uBAASA,EAAM7G,GAAW;AAIxB,oBAHAsF,EAAgB,MAAMuB,CAAK,GAE3B7G,IAAYA,KAAa,KAAK,MAC1BA,IAAY,KAAK;AACnB,wBAAM,IAAI,MAAM,0CAA0C;AAE5D,qBAAK,UAAU,GACf,KAAK,eAAeA,GACpB,KAAK,kBAAkB8F,EAAO9F,CAAS,GAKvC,KAAK,QAAQ,IAAI,YAAY4F,EAAa,KAAK,kBAAkB,MAAM,EAAE,CAAC,GAC1E,KAAK,OAAO,IAAI,WAAW,KAAK,KAAK,GACrC,KAAK,MAAM,IAAI,UAAU,KAAK,KAAK,GACnC,KAAK,QAAQ,IAAIH,EAAU,EAAE,cAA0B,CAAA,GAAI,KAAK,KAAK;AAAA,cACzE;AAEE,qBAAAoB,EAAM,UAAU,aAAa,SAAoBJ,GAAMK,GAAW;AAChE,qBAAK,UAAU;AACf,oBAAIH,IAAK,IAAI,WAAWF,GAAMK,IAAY,KAAK,CAAC;AAChD,gBAAAH,EAAG,CAAC,IAAI,YACRA,EAAG,CAAC,IAAI,YACRA,EAAG,CAAC,IAAI,aACRA,EAAG,CAAC,IAAI,WACRA,EAAG,CAAC,IAAI;AAAA,cACZ,GAEEE,EAAM,UAAU,YAAY,SAAmBP,GAAUC,GAAQ;AAC/D,oBAAIQ,IAAcjB,EAAOQ,CAAQ,GAC7BU,IAAO,IAAI,WAAW,KAAK,OAAO,GAAGD,KAAe,CAAC;AACzD,uBAAAf,EAAUgB,GAAMV,CAAQ,GACxBD,EAAQW,GAAMV,GAAUC,CAAM,GACvBQ;AAAA,cACX,GAEEF,EAAM,UAAU,SAAS,SAAgBtrC,GAAM0rC,GAAaX,GAAUY,GAAK;AACzE,gBAAArB,EAAKtqC,GAAM,KAAK,KAAK,KAAK,MAAM0rC,GAAaX,GAAUY,KAAO,CAAC;AAAA,cACnE,GAEEL,EAAM,UAAU,YAAY,SAAmBtrC,GAAM0rC,GAAaX,GAAUC,GAAQY,GAAU;AAC5F,oBAAIJ,IAAcT;AAClB,qBAAK,OAAO/qC,GAAM0rC,GAAaX,CAAQ,GACnCa,MACFJ,IAAc,KAAK,UAAUT,GAAUC,CAAM,IAE/C,KAAK,MAAM,KAAKQ,GAAa,KAAK,eAAe;AAAA,cACrD,GAEEF,EAAM,UAAU,YAAY,SAAmBO,GAAK;AAClD,oBAAIb,IAASa,EAAI,cAAcA,EAAI,UAAUA,EAAI,QAAQ;AACzD,qBAAK,WAAW,KAAK,OAAO,KAAK,eAAe;AAChD,oBAAIH,IAAc,GACdX,IAAW,KAAK;AACpB,qBAAKW,IAAc,GAAGV,IAASU,IAAcX,GAAUW,KAAeX;AACpE,uBAAK,UAAUc,GAAKH,GAAaX,GAAUC,GAAQ,EAAK;AAE1D,4BAAK,UAAUa,GAAKH,GAAaV,IAASU,GAAaV,GAAQ,EAAI,GAC5DC,EAAa,KAAK,OAAO,KAAK,eAAe;AAAA,cACxD,GAEEK,EAAM,UAAU,SAAS,SAAgBO,GAAK;AAC5C,uBAAOzB,EAAM,KAAK,UAAUyB,CAAG,EAAE,MAAM;AAAA,cAC3C,GAEEP,EAAM,UAAU,mBAAmB,SAA0BO,GAAK;AAChE,uBAAO,KAAK,OAAOA,CAAG;AAAA,cAC1B,GAEEP,EAAM,UAAU,mBAAmB,SAA0BO,GAAK;AAChE,uBAAO,KAAK,OAAOA,CAAG;AAAA,cAC1B,GAEEP,EAAM,UAAU,wBAAwB,SAA+BO,GAAK;AAC1E,uBAAO,KAAK,OAAOA,CAAG;AAAA,cAC1B,GAEEP,EAAM,UAAU,aAAa,WAAsB;AACjD,4BAAK,WAAW,KAAK,OAAO,KAAK,eAAe,GACzC;AAAA,cACX,GAEEA,EAAM,UAAU,SAAS,SAAgB5C,GAAO;AAC9C,oBAAIgD,IAAc,GACdX,IAAWrC,EAAM,cAAcA,EAAM,UAAUA,EAAM,QAAQ,GAC7DoD,IAAa,KAAK,UAAU,KAAK,cACjCC,IAAW;AAGf,qBADA,KAAK,WAAWhB,GACTW,IAAcX;AACnB,kBAAAgB,IAAW,KAAK,IAAIhB,IAAWW,GAAa,KAAK,eAAeI,CAAU,GAC1E,KAAK,OAAOpD,GAAOgD,GAAaK,GAAUD,CAAU,GACpDA,KAAcC,GACdL,KAAeK,GACXD,MAAe,KAAK,iBACtB,KAAK,MAAM,KAAK,KAAK,cAAc,KAAK,eAAe,GACvDA,IAAa;AAGjB,uBAAO;AAAA,cACX,GAEER,EAAM,UAAU,WAAW,WAAoB;AAC7C,oBAAIQ,IAAa,KAAK,UAAU,KAAK,cACjCZ,IAAO;AACX,oBAAKY;AAIH,kBAAAZ,IAAO,KAAK,MAAM,MAAM,CAAC;AAAA,qBAJV;AACf,sBAAIE,IAAK,IAAI,WAAW,KAAK,OAAO,KAAK,kBAAkB,KAAK,CAAC;AACjE,kBAAAF,IAAOE,EAAG,OAAO,MAAMA,EAAG,YAAYA,EAAG,aAAaA,EAAG,UAAU;AAAA,gBACzE;AAGI,uBAAO;AAAA,kBACL,QAAQ,KAAK;AAAA,kBACb,MAAMF;AAAA;cAEZ,GAEEI,EAAM,UAAU,WAAW,SAAkBU,GAAO;AAElD,oBADA,KAAK,UAAUA,EAAM,QACjBA,EAAM,KAAK,eAAe,IAAI;AAChC,sBAAIZ,IAAK,IAAI,WAAW,KAAK,OAAO,KAAK,kBAAkB,KAAK,CAAC;AACjE,kBAAAA,EAAG,IAAI,IAAI,WAAWY,EAAM,IAAI,CAAC;AAAA,gBACvC;AACM,uBAAK,KAAK,IAAI,IAAI,WAAWA,EAAM,IAAI,CAAC;AAE1C,uBAAO;AAAA,cACX,GAEEV,EAAM,UAAU,SAAS,WAAkB;AACzC,oBAAIN,IAAS,KAAK,SACdD,IAAWC,IAAS,KAAK,cACzBQ,IAAc,KAAK,UAAUT,GAAUC,CAAM;AACjD,qBAAK,MAAM,KAAKQ,GAAa,KAAK,eAAe;AACjD,oBAAIphB,IAAS6gB,EAAa,KAAK,OAAO,KAAK,eAAe;AAC1D,4BAAK,WAAW,KAAK,OAAO,KAAK,eAAe,GACzC7gB;AAAA,cACX,GAEEkhB,EAAM,UAAU,MAAM,WAAe;AACnC,uBAAOlB,EAAM,KAAK,OAAM,EAAG,MAAM;AAAA,cACrC,GAESkB;AAAA,YACT,GAAC;AAED,YAAAzR,EAAO,UAAUyR,GACjBzR,EAAO,QAAQ,QAAQqQ;AAAA,UAEvB;AAAA;AAAA;AAAA,WAEO,SAASrQ,GAAQ8P,GAAS;AASjC,qBADIsC,IAAiB,IAAI,MAAM,GAAG,GACzB,IAAI,GAAG,IAAI,KAAK;AACvB,cAAAA,EAAe,CAAC,KAAK,IAAI,KAAO,MAAM,MAAM,EAAE,SAAS,EAAE;AAG3D,YAAApS,EAAO,QAAQ,QAAQ,SAAUqS,GAAa;AAG5C,uBAFIC,IAAW,IAAI,WAAWD,CAAW,GACrCxlC,IAAM,IAAI,MAAMwlC,EAAY,UAAU,GACjCE,IAAK,GAAGA,IAAK1lC,EAAI,QAAQ0lC;AAChC,gBAAA1lC,EAAI0lC,CAAE,IAAIH,EAAeE,EAASC,CAAE,CAAC;AAEvC,qBAAO1lC,EAAI,KAAK,EAAE;AAAA,YACpB,GAMAmzB,EAAO,QAAQ,eAAe,SAAUgB,GAAG;AAKzC,kBAAIE,IAAI;AAGR,kBAAIF,KAAK,MAAO,QAAO;AAGvB,kBAAIA,IAAI;AACN,qBAAKE,IAAI,GAAGA,IAAIF,GAAGE,IAAIA,KAAK;AAAG;AAAA;AAE/B,qBAAKA,IAAI,UAAUA,IAAIF,GAAGE,KAAK;AAAU;AAE3C,qBAAOA;AAAA,YACT,GAMAlB,EAAO,QAAQ,yBAAyB,SAAUwS,GAAM;AACtD,kBAAIC,IAAoB,uBAAuBD,KAAQA,aAAgBA,EAAK,mBACxEE,IAA0B,6BAA6BF,KAAQA,aAAgBA,EAAK,yBACpFG,IAA2B,8BAA8BH,KAAQA,aAAgBA,EAAK;AAW1F,qBAAOC,KAAqB,CAACC,KAA2B,CAACC;AAAA,YAC3D;AAAA,UAEA;AAAA;AAAA;AAAA,WAEO,SAAS3S,GAAQ8P,GAASF,GAAqB;AAItD,YAAA5P,EAAO,UAAU,WAAY;AAC3B,kBAAIyR,IAAQ7B,EAAoB,CAAC,GAE7BgD,IAAW,SAAUC,GAAQ1sC,GAAM2sC,GAAI;AACzC,oBAAI;AACF,yBAAOA,EAAG,MAAMD,EAAO,OAAO1sC,CAAI,CAAC;AAAA,gBACzC,SAAa2V,GAAG;AACV,yBAAOg3B,EAAGh3B,CAAC;AAAA,gBACjB;AAAA,cACA,GAEMi3B,IAAW,SAAUF,GAAQG,GAAWC,GAAWnG,GAAMgG,GAAI;AAC/D,oBAAII,IAAS,IAAI,KAAK,WAAU;AAChC,gBAAAA,EAAO,YAAY,WAAqB;AACtC,sBAAIA,EAAO;AACT,2BAAOJ,EAAGI,EAAO,KAAK;AAExB,sBAAItF,IAASsF,EAAO;AACpB,kBAAAF,KAAaE,EAAO,OAAO;AAC3B,sBAAI;AACF,oBAAAL,EAAO,OAAOjF,CAAM;AAAA,kBAC5B,SAAe9xB,GAAG;AACV,oBAAAg3B,EAAGh3B,CAAC;AACJ;AAAA,kBACR;AACM,kBAAIk3B,IAAYlG,EAAK,OACnBiG,EAASF,GAAQG,GAAWC,GAAWnG,GAAMgG,CAAE,IAE/CA,EAAG,MAAMD,EAAO,KAAK;AAAA,gBAE7B,GACIK,EAAO,kBAAkBpG,EAAK,MAAMkG,GAAWA,IAAYC,CAAS,CAAC;AAAA,cACzE,GAEME,IAAyB;AAE7B,0BAAK,YAAY,SAAU1qC,GAAO;AAChC,oBAAK0qC,GAIL;AAAA,sBAAIhtC,IAAOsC,EAAM,KAAK,MAClBqkC,IAAOrkC,EAAM,KAAK,MAClBqQ,IAAKrQ,EAAM,KAAK;AACpB,sBAAI,SAAOqQ,IAAO,QACd,GAACg0B,KAAQ,CAAC3mC,IACd;AAAA,wBAAI8sC,IAAYxqC,EAAM,KAAK,aAAa,IAAI,OAAO,MAC/CoqC,IAAS,IAAIpB,EAAMwB,CAAS;AAChC,oBAAAJ,EAAO,WAAU;AACjB,wBAAIO,IAAO,SAAUnkB,GAAKokB,GAAM;AAC9B,sBAAKpkB,IAGH,KAAK,YAAY,EAAE,IAAInW,GAAI,OAAOmW,EAAI,MAAM,IAF5C,KAAK,YAAY,EAAE,IAAInW,GAAI,MAAMu6B,GAAM;AAAA,oBAI/C;AACI,oBAAIltC,KAAMysC,EAASC,GAAQ1sC,GAAMitC,CAAI,GACjCtG,KAAMiG,EAASF,GAAQ,GAAGI,GAAWnG,GAAMsG,CAAI;AAAA;AAAA;AAAA,cACvD,GAES,WAAY;AACjB,gBAAAD,IAAyB;AAAA,cAC7B;AAAA,YACA;AAAA,UAEA;AAAA;AAAA;AAAA,WAEO,SAASnT,GAAQ8P,GAASF,GAAqB;AAItD,gBAAI0D,IAAO1D,EAAoB,CAAC,GAC5B6B,IAAQ7B,EAAoB,CAAC,GAC7B2D,IAAa3D,EAAoB,CAAC,GAClC4D,IAAY5D,EAAoB,CAAC,GAEjCU,IAAWV,EAAoB,CAAC,GAChC6D,IAAyBnD,EAAS,wBAElCoD,IAA6B,OAAO,OAAS,OAAeD,EAAuB,IAAI;AAE3F,YAAAhC,EAAM,yBAAyBiC,IAA6BF,EAAS,IAAK,WAAY;AAAA,YAAA,GAEtF/B,EAAM,eAAe,WAAY;AAC/B,kBAAIkC,IAASL;AAAA;AAAA,gBAAyB;AAAA,cAAC,GACnCM,IAAYD,EAAO;AACvB,qBAAAA,EAAO,YAAY,WAAY;AAC7B,oBAAI,gBAAgBA,EAAO,SAAS,GACpCC,EAAU,KAAKD,CAAM;AAAA,cACzB,GACSA;AAAA,YACT,GAEAlC,EAAM,aAAa8B,GAEnBvT,EAAO,UAAUyR;AAAA,UAEjB;AAAA;AAAA;AAAA,WAEO,SAASzR,GAAQ8P,GAASF,GAAqB;AAEtD,qBAASiE,EAAsBnE,GAAS;AAE9B,kBAAIC,IAAmB,CAAA;AAGvB,uBAASC,EAAoBC,GAAU;AAGrC,oBAAGF,EAAiBE,CAAQ;AAC1B,yBAAOF,EAAiBE,CAAQ,EAAE;AAGpC,oBAAI7P,IAAS2P,EAAiBE,CAAQ,IAAI;AAAA;AAAA,kBACxC,GAAGA;AAAA;AAAA,kBACH,GAAG;AAAA;AAAA,kBACH,SAAS,CAAA;AAAA;AAAA;AAIX,uBAAAH,EAAQG,CAAQ,EAAE,KAAK7P,EAAO,SAASA,GAAQA,EAAO,SAAS4P,CAAmB,GAGlF5P,EAAO,IAAI,IAGJA,EAAO;AAAA,cAC1B;AAGU,cAAA4P,EAAoB,IAAIF,GAGxBE,EAAoB,IAAID,GAGxBC,EAAoB,IAAI,SAAStgC,GAAO;AAAE,uBAAOA;AAAA,cAAM,GAGvDsgC,EAAoB,IAAI,SAASE,GAASC,GAAMC,GAAQ;AACtD,gBAAIJ,EAAoB,EAAEE,GAASC,CAAI,KACrC,OAAO,eAAeD,GAASC,GAAM;AAAA;AAAA,kBACnC,cAAc;AAAA;AAAA,kBACd,YAAY;AAAA;AAAA,kBACZ,KAAKC;AAAA;AAAA,gBACrB,CAAe;AAAA,cAEf,GAGUJ,EAAoB,IAAI,SAASE,GAAS;AACxC,uBAAO,eAAeA,GAAS,cAAc,EAAE,OAAO,IAAM;AAAA,cACxE,GAGUF,EAAoB,IAAI,SAAS5P,GAAQ;AACvC,oBAAIgQ,IAAShQ,KAAUA,EAAO;AAAA;AAAA,kBAC5B,WAAsB;AAAE,2BAAOA,EAAO;AAAA,kBAAW;AAAA;AAAA;AAAA,kBACjD,WAA4B;AAAE,2BAAOA;AAAA,kBAAO;AAAA;AAC9C,uBAAA4P,EAAoB,EAAEI,GAAQ,KAAKA,CAAM,GAClCA;AAAA,cACnB,GAGUJ,EAAoB,IAAI,SAAS/T,GAAQoU,GAAU;AAAE,uBAAO,OAAO,UAAU,eAAe,KAAKpU,GAAQoU,CAAQ;AAAA,cAAE,GAGnHL,EAAoB,IAAI,KAGxBA,EAAoB,KAAK,SAAS3gB,GAAK;AAAE,8BAAQ,MAAMA,CAAG,GAASA;AAAA,cAAI;AAE/E,kBAAI0R,IAAIiP,EAAoBA,EAAoB,IAAI,YAAY;AAChE,qBAAOjP,EAAE,WAAWA;AAAA,YACtB;AAEA,gBAAImT,IAAmB,0BACnBC,IAAmB,4BAA+BD,IAAmB;AAGzE,qBAASE,EAAahC,GAAK;AACzB,sBAAQA,IAAM,IAAI,QAAQ,wBAAwB,MAAM;AAAA,YAC1D;AAEA,qBAASiC,EAAuBC,GAASlU,GAAQmU,GAAW;AAC1D,kBAAIC,IAAS,CAAA;AACb,cAAAA,EAAOD,CAAS,IAAI,CAAA;AAEpB,kBAAIE,IAAWrU,EAAO,SAAQ,GAC1BsU,IAAmBD,EAAS,MAAM,qCAAqC;AAC3E,kBAAI,CAACC,EAAkB,QAAOF;AAM9B,uBALIG,IAAqBD,EAAiB,CAAC,GAGvCE,IAAK,IAAI,OAAO,gBAAgBR,EAAYO,CAAkB,IAAIR,GAAkB,GAAG,GACvFU,GACIA,IAAQD,EAAG,KAAKH,CAAQ;AAC9B,gBAAII,EAAM,CAAC,MAAM,mBACjBL,EAAOD,CAAS,EAAE,KAAKM,EAAM,CAAC,CAAC;AAKjC,mBADAD,IAAK,IAAI,OAAO,QAAQR,EAAYO,CAAkB,IAAI,2BAA2BT,IAAmB,cAAcC,GAAkB,GAAG,GACnIU,IAAQD,EAAG,KAAKH,CAAQ;AAC9B,gBAAKH,EAAQO,EAAM,CAAC,CAAC,MACnBL,EAAOD,CAAS,EAAE,KAAKM,EAAM,CAAC,CAAC,GAC/BP,EAAQO,EAAM,CAAC,CAAC,IAAI7E,EAAoB6E,EAAM,CAAC,CAAC,EAAE,IAEpDL,EAAOK,EAAM,CAAC,CAAC,IAAIL,EAAOK,EAAM,CAAC,CAAC,KAAK,CAAA,GACvCL,EAAOK,EAAM,CAAC,CAAC,EAAE,KAAKA,EAAM,CAAC,CAAC;AAGhC,qBAAOL;AAAA,YACT;AAEA,qBAASM,EAAmBC,GAAQ;AAClC,kBAAIC,IAAO,OAAO,KAAKD,CAAM;AAC7B,qBAAOC,EAAK,OAAO,SAAUC,GAAWhqC,GAAK;AAC3C,uBAAOgqC,KAAaF,EAAO9pC,CAAG,EAAE,SAAS;AAAA,cAC7C,GAAK,EAAK;AAAA,YACV;AAEA,qBAASiqC,EAAoBZ,GAASrE,GAAU;AAW9C,uBAVIkF,IAAe;AAAA,gBACjB,MAAM,CAAClF,CAAQ;AAAA,cACnB,GACMmF,IAAkB;AAAA,gBACpB,MAAM,CAAA;AAAA,cACV,GACMC,IAAc;AAAA,gBAChB,MAAM,CAAA;AAAA,cACV,GAESP,EAAkBK,CAAY;AAEnC,yBADIJ,IAAS,OAAO,KAAKI,CAAY,GAC5B9iB,IAAI,GAAGA,IAAI0iB,EAAO,QAAQ1iB,KAAK;AACtC,sBAAIkiB,IAAYQ,EAAO1iB,CAAC,GACpBijB,IAAQH,EAAaZ,CAAS,GAC9BgB,IAAgBD,EAAM,IAAG;AAE7B,sBADAD,EAAYd,CAAS,IAAIc,EAAYd,CAAS,KAAK,CAAA,GAC/C,EAAAc,EAAYd,CAAS,EAAEgB,CAAa,KAAK,CAACjB,EAAQC,CAAS,EAAEgB,CAAa,IAC9E;AAAA,oBAAAF,EAAYd,CAAS,EAAEgB,CAAa,IAAI,IACxCH,EAAgBb,CAAS,IAAIa,EAAgBb,CAAS,KAAK,CAAA,GAC3Da,EAAgBb,CAAS,EAAE,KAAKgB,CAAa;AAG7C,6BAFIC,IAAanB,EAAsBC,GAASA,EAAQC,CAAS,EAAEgB,CAAa,GAAGhB,CAAS,GACxFkB,IAAiB,OAAO,KAAKD,CAAU,GAClCpd,IAAI,GAAGA,IAAIqd,EAAe,QAAQrd;AACzC,sBAAA+c,EAAaM,EAAerd,CAAC,CAAC,IAAI+c,EAAaM,EAAerd,CAAC,CAAC,KAAK,CAAA,GACrE+c,EAAaM,EAAerd,CAAC,CAAC,IAAI+c,EAAaM,EAAerd,CAAC,CAAC,EAAE,OAAOod,EAAWC,EAAerd,CAAC,CAAC,CAAC;AAAA;AAAA,gBAE9G;AAGE,qBAAOgd;AAAA,YACT;AAEA,YAAAhV,EAAO,UAAU,SAAU6P,GAAUxpC,GAAS;AAC5C,cAAAA,IAAUA,KAAW,CAAA;AACrB,kBAAI6tC,IAAU;AAAA,gBACZ,MAAMtE,EAAoB;AAAA,cAC9B,GAEMoF,IAAkB3uC,EAAQ,MAAM,EAAE,MAAM,OAAO,KAAK6tC,CAAO,EAAC,IAAKY,EAAmBZ,GAASrE,CAAQ,GAErGyF,IAAM;AAEV,qBAAO,KAAKN,CAAe,EAAE,OAAO,SAAUnU,GAAG;AAAE,uBAAOA,MAAM;AAAA,cAAM,CAAE,EAAE,QAAQ,SAAUb,GAAQ;AAElG,yBADIuV,IAAc,GACXP,EAAgBhV,CAAM,EAAEuV,CAAW;AACxC,kBAAAA;AAEF,gBAAAP,EAAgBhV,CAAM,EAAE,KAAKuV,CAAW,GACxCrB,EAAQlU,CAAM,EAAEuV,CAAW,IAAI,8FAC/BD,IAAMA,IAAM,SAAStV,IAAS,SAAS6T,EAAqB,WAAW,QAAQ,gBAAgB,KAAK,UAAU0B,CAAW,CAAC,IAAI,QAAQP,EAAgBhV,CAAM,EAAE,IAAI,SAAUlnB,GAAI;AAAE,yBAAO,KAAK,KAAK,UAAUA,CAAE,IAAI,OAAOo7B,EAAQlU,CAAM,EAAElnB,CAAE,EAAE,SAAQ;AAAA,gBAAE,CAAE,EAAE,KAAK,GAAG,IAAI;AAAA;AAAA,cAC5Q,CAAG,GAEDw8B,IAAMA,IAAM,MAAMzB,EAAqB,SAAQ,EAAG,QAAQ,gBAAgB,KAAK,UAAUhE,CAAQ,CAAC,IAAI,QAAQmF,EAAgB,KAAK,IAAI,SAAUl8B,GAAI;AAAE,uBAAO,KAAK,KAAK,UAAUA,CAAE,IAAI,OAAOo7B,EAAQ,KAAKp7B,CAAE,EAAE,SAAQ;AAAA,cAAE,CAAE,EAAE,KAAK,GAAG,IAAI;AAE1O,kBAAI08B,IAAO,IAAI,OAAO,KAAK,CAACF,CAAG,GAAG,EAAE,MAAM,kBAAiB,CAAE;AAC7D,kBAAIjvC,EAAQ;AAAQ,uBAAOmvC;AAE3B,kBAAIC,IAAM,OAAO,OAAO,OAAO,aAAa,OAAO,UAAU,OAAO,OAEhEC,IAAYD,EAAI,gBAAgBD,CAAI,GACpC7B,IAAS,IAAI,OAAO,OAAO+B,CAAS;AACxC,qBAAA/B,EAAO,YAAY+B,GAEZ/B;AAAA,YACT;AAAA,UAGA;AAAA;AAAA;AAAA,WAEO,SAAS3T,GAAQ8P,GAAS;AAQjC,YAAA9P,EAAO,UAAU,SAAmB2V,GAAYC,GAAaC,GAAU;AAEnE,kBAAIC,IAAQ,IAAIH,EAAW,WAAWE,CAAQ;AAC9C,uBAASE,EAASC,GAAOC,GAAO;AAE5B,gBAAAD,IAAQA,IAAQ,GAChBC,IAAQA,IAAQ;AAChB,oBAAIC,IAAQ,GAAGC,IAAQ,GAAGC,IAAS,GAAGC,IAAS,GAAGC,IAAS,GAAGC,IAAS,GAAGC,IAAS,GAAGC,IAAS,GAAGC,IAAS,GAAGC,IAAS,GAAGC,IAAS,GAAGC,IAAS,GAAGC,IAAS,GAAGC,IAAS;AAMvK,qBALAX,IAASN,EAAMG,IAAQ,OAAO,CAAC,IAAI,GACnCK,IAASR,EAAMG,IAAQ,OAAO,CAAC,IAAI,GACnCO,IAASV,EAAMG,IAAQ,OAAO,CAAC,IAAI,GACnCS,IAASZ,EAAMG,IAAQ,OAAO,CAAC,IAAI,GACnCW,IAASd,EAAMG,IAAQ,OAAO,CAAC,IAAI,GAC9BC,IAAQ,IAAIA,IAAQ,MAAMF,IAAQ,IAAIE,IAAQA,IAAQ,KAAK,GAAG;AAM/D,uBALAG,IAASD,GACTG,IAASD,GACTG,IAASD,GACTG,IAASD,GACTG,IAASD,GACJT,IAAQ,IAAIA,IAAQ,KAAK,IAAIA,IAAQA,IAAQ,IAAI;AAClD,oBAAAY,IAASjB,EAAMI,IAAQC,KAAS,CAAC,IAAI,GACrCW,MAAWV,KAAU,IAAIA,MAAW,OAAOE,IAASE,IAAS,CAACF,IAASI,KAAU,OAAOK,IAASH,IAAS,KAAK,aAAa,KAAK,GACjIA,IAASF,GACTA,IAASF,GACTA,IAASF,KAAU,KAAKA,MAAW,GACnCA,IAASF,GACTA,IAASU,GACThB,EAAME,IAAQG,KAAS,CAAC,IAAIY;AAEhC,uBAAKZ,IAAQH,IAAQ,KAAK,IAAIG,IAAQ,MAAMH,IAAQ,KAAK,IAAIG,IAAQA,IAAQ,IAAI;AAC7E,oBAAAY,KAAUjB,EAAMK,IAAQ,MAAM,CAAC,IAAIL,EAAMK,IAAQ,MAAM,CAAC,IAAIL,EAAMK,IAAQ,MAAM,CAAC,IAAIL,EAAMK,IAAQ,MAAM,CAAC,MAAM,KAAKL,EAAMK,IAAQ,MAAM,CAAC,IAAIL,EAAMK,IAAQ,MAAM,CAAC,IAAIL,EAAMK,IAAQ,MAAM,CAAC,IAAIL,EAAMK,IAAQ,MAAM,CAAC,OAAO,IAC5NW,MAAWV,KAAU,IAAIA,MAAW,OAAOE,IAASE,IAAS,CAACF,IAASI,KAAU,OAAOK,IAASH,IAAS,KAAK,aAAa,KAAK,GACjIA,IAASF,GACTA,IAASF,GACTA,IAASF,KAAU,KAAKA,MAAW,GACnCA,IAASF,GACTA,IAASU,GACThB,EAAMK,KAAS,CAAC,IAAIY;AAExB,uBAAKZ,IAAQH,IAAQ,KAAK,IAAIG,IAAQ,MAAMH,IAAQ,MAAM,IAAIG,IAAQA,IAAQ,IAAI;AAC9E,oBAAAY,KAAUjB,EAAMK,IAAQ,MAAM,CAAC,IAAIL,EAAMK,IAAQ,MAAM,CAAC,IAAIL,EAAMK,IAAQ,MAAM,CAAC,IAAIL,EAAMK,IAAQ,MAAM,CAAC,MAAM,KAAKL,EAAMK,IAAQ,MAAM,CAAC,IAAIL,EAAMK,IAAQ,MAAM,CAAC,IAAIL,EAAMK,IAAQ,MAAM,CAAC,IAAIL,EAAMK,IAAQ,MAAM,CAAC,OAAO,IAC5NW,MAAWV,KAAU,IAAIA,MAAW,OAAOE,IAASE,IAASE,KAAU,OAAOK,IAASH,IAAS,KAAK,aAAa,KAAK,GACvHA,IAASF,GACTA,IAASF,GACTA,IAASF,KAAU,KAAKA,MAAW,GACnCA,IAASF,GACTA,IAASU,GACThB,EAAMK,KAAS,CAAC,IAAIY;AAExB,uBAAKZ,IAAQH,IAAQ,MAAM,IAAIG,IAAQ,MAAMH,IAAQ,MAAM,IAAIG,IAAQA,IAAQ,IAAI;AAC/E,oBAAAY,KAAUjB,EAAMK,IAAQ,MAAM,CAAC,IAAIL,EAAMK,IAAQ,MAAM,CAAC,IAAIL,EAAMK,IAAQ,MAAM,CAAC,IAAIL,EAAMK,IAAQ,MAAM,CAAC,MAAM,KAAKL,EAAMK,IAAQ,MAAM,CAAC,IAAIL,EAAMK,IAAQ,MAAM,CAAC,IAAIL,EAAMK,IAAQ,MAAM,CAAC,IAAIL,EAAMK,IAAQ,MAAM,CAAC,OAAO,IAC5NW,MAAWV,KAAU,IAAIA,MAAW,OAAOE,IAASE,IAASF,IAASI,IAASF,IAASE,KAAU,OAAOK,IAASH,IAAS,KAAK,aAAa,KAAK,GAClJA,IAASF,GACTA,IAASF,GACTA,IAASF,KAAU,KAAKA,MAAW,GACnCA,IAASF,GACTA,IAASU,GACThB,EAAMK,KAAS,CAAC,IAAIY;AAExB,uBAAKZ,IAAQH,IAAQ,MAAM,IAAIG,IAAQ,MAAMH,IAAQ,MAAM,IAAIG,IAAQA,IAAQ,IAAI;AAC/E,oBAAAY,KAAUjB,EAAMK,IAAQ,MAAM,CAAC,IAAIL,EAAMK,IAAQ,MAAM,CAAC,IAAIL,EAAMK,IAAQ,MAAM,CAAC,IAAIL,EAAMK,IAAQ,MAAM,CAAC,MAAM,KAAKL,EAAMK,IAAQ,MAAM,CAAC,IAAIL,EAAMK,IAAQ,MAAM,CAAC,IAAIL,EAAMK,IAAQ,MAAM,CAAC,IAAIL,EAAMK,IAAQ,MAAM,CAAC,OAAO,IAC5NW,MAAWV,KAAU,IAAIA,MAAW,OAAOE,IAASE,IAASE,KAAU,OAAOK,IAASH,IAAS,KAAK,YAAY,KAAK,GACtHA,IAASF,GACTA,IAASF,GACTA,IAASF,KAAU,KAAKA,MAAW,GACnCA,IAASF,GACTA,IAASU,GACThB,EAAMK,KAAS,CAAC,IAAIY;AAExB,kBAAAX,IAASA,IAASC,IAAS,GAC3BC,IAASA,IAASC,IAAS,GAC3BC,IAASA,IAASC,IAAS,GAC3BC,IAASA,IAASC,IAAS,GAC3BC,IAASA,IAASC,IAAS;AAAA,gBACvC;AACQ,gBAAAf,EAAMG,IAAQ,OAAO,CAAC,IAAIG,GAC1BN,EAAMG,IAAQ,OAAO,CAAC,IAAIK,GAC1BR,EAAMG,IAAQ,OAAO,CAAC,IAAIO,GAC1BV,EAAMG,IAAQ,OAAO,CAAC,IAAIS,GAC1BZ,EAAMG,IAAQ,OAAO,CAAC,IAAIW;AAAA,cAClC;AACI,qBAAO,EAAE,MAAMb,EAAQ;AAAA,YAC3B;AAAA,UAEA;AAAA;AAAA;AAAA,WAEO,SAAS/V,GAAQ8P,GAAS;AAEjC,gBAAIkH,IAAQ,MAIR9D,IAAS;AACb,YAAI,OAAO,OAAS,OAAe,OAAO,KAAK,iBAAmB,QAChEA,IAAS,IAAI,KAAK,eAAc;AAKlC,gBAAI+D,IAAU,SAAUjF,GAAKkF,GAAIC,GAAKC,GAAOzG,GAAKmB,GAAK;AACrD,kBAAI7f,IAAI,QACJ8e,IAAKe,IAAM,GACXuF,KAAM1G,IAAMI,KAAM,GAClB/Y,IAAI2Y,IAAM0G;AACd,sBAAQtG,GAAE;AAAA,gBACR,KAAK;AACH,kBAAAmG,EAAGpF,CAAG,IAAIE,EAAI,WAAWoF,IAAQ,CAAC;AAAA,gBACpC,KAAK;AACH,kBAAAF,EAAGpF,IAAM,KAAKf,KAAM,KAAK,CAAC,IAAIiB,EAAI,WAAWoF,IAAQ,CAAC;AAAA,gBACxD,KAAK;AACH,kBAAAF,EAAGpF,IAAM,KAAKf,KAAM,KAAK,CAAC,IAAIiB,EAAI,WAAWoF,IAAQ,CAAC;AAAA,gBACxD,KAAK;AACH,kBAAAF,EAAGpF,IAAM,KAAKf,KAAM,KAAK,CAAC,IAAIiB,EAAI,WAAWoF,CAAK;AAAA,cACxD;AACE,kBAAI,EAAAzG,IAAM0G,KAAM,IAAItG,KAGpB;AAAA,qBAAK9e,IAAI,IAAI8e,GAAI9e,IAAI+F,GAAG/F,IAAIA,IAAI,IAAI;AAClC,kBAAAklB,EAAIrF,IAAM7f,KAAK,CAAC,IAAI+f,EAAI,WAAWoF,IAAQnlB,CAAC,KAAK,KAAK+f,EAAI,WAAWoF,IAAQnlB,IAAI,CAAC,KAAK,KAAK+f,EAAI,WAAWoF,IAAQnlB,IAAI,CAAC,KAAK,IAAI+f,EAAI,WAAWoF,IAAQnlB,IAAI,CAAC;AAE/J,wBAAQolB,GAAE;AAAA,kBACR,KAAK;AACH,oBAAAH,EAAGpF,IAAM9Z,IAAI,IAAI,CAAC,IAAIga,EAAI,WAAWoF,IAAQpf,IAAI,CAAC;AAAA,kBACpD,KAAK;AACH,oBAAAkf,EAAGpF,IAAM9Z,IAAI,IAAI,CAAC,IAAIga,EAAI,WAAWoF,IAAQpf,IAAI,CAAC;AAAA,kBACpD,KAAK;AACH,oBAAAkf,EAAGpF,IAAM9Z,IAAI,IAAI,CAAC,IAAIga,EAAI,WAAWoF,IAAQpf,CAAC;AAAA,gBACpD;AAAA;AAAA,YACA,GAIIsf,IAAU,SAAUC,GAAKL,GAAIC,GAAKC,GAAOzG,GAAKmB,GAAK;AACrD,kBAAI7f,IAAI,QACJ8e,IAAKe,IAAM,GACXuF,KAAM1G,IAAMI,KAAM,GAClB/Y,IAAI2Y,IAAM0G;AACd,sBAAQtG,GAAE;AAAA,gBACR,KAAK;AACH,kBAAAmG,EAAGpF,CAAG,IAAIyF,EAAIH,IAAQ,CAAC;AAAA,gBACzB,KAAK;AACH,kBAAAF,EAAGpF,IAAM,KAAKf,KAAM,KAAK,CAAC,IAAIwG,EAAIH,IAAQ,CAAC;AAAA,gBAC7C,KAAK;AACH,kBAAAF,EAAGpF,IAAM,KAAKf,KAAM,KAAK,CAAC,IAAIwG,EAAIH,IAAQ,CAAC;AAAA,gBAC7C,KAAK;AACH,kBAAAF,EAAGpF,IAAM,KAAKf,KAAM,KAAK,CAAC,IAAIwG,EAAIH,CAAK;AAAA,cAC7C;AACE,kBAAI,EAAAzG,IAAM0G,KAAM,IAAItG,KAGpB;AAAA,qBAAK9e,IAAI,IAAI8e,GAAI9e,IAAI+F,GAAG/F,IAAIA,IAAI,IAAI;AAClC,kBAAAklB,EAAIrF,IAAM7f,KAAK,IAAI,CAAC,IAAIslB,EAAIH,IAAQnlB,CAAC,KAAK,KAAKslB,EAAIH,IAAQnlB,IAAI,CAAC,KAAK,KAAKslB,EAAIH,IAAQnlB,IAAI,CAAC,KAAK,IAAIslB,EAAIH,IAAQnlB,IAAI,CAAC;AAEvH,wBAAQolB,GAAE;AAAA,kBACR,KAAK;AACH,oBAAAH,EAAGpF,IAAM9Z,IAAI,IAAI,CAAC,IAAIuf,EAAIH,IAAQpf,IAAI,CAAC;AAAA,kBACzC,KAAK;AACH,oBAAAkf,EAAGpF,IAAM9Z,IAAI,IAAI,CAAC,IAAIuf,EAAIH,IAAQpf,IAAI,CAAC;AAAA,kBACzC,KAAK;AACH,oBAAAkf,EAAGpF,IAAM9Z,IAAI,IAAI,CAAC,IAAIuf,EAAIH,IAAQpf,CAAC;AAAA,gBACzC;AAAA;AAAA,YACA,GAEIwf,IAAW,SAAUhC,GAAM0B,GAAIC,GAAKC,GAAOzG,GAAKmB,GAAK;AACvD,kBAAI7f,IAAI,QACJ8e,IAAKe,IAAM,GACXuF,KAAM1G,IAAMI,KAAM,GAClB/Y,IAAI2Y,IAAM0G,GACVE,IAAM,IAAI,WAAWrE,EAAO,kBAAkBsC,EAAK,MAAM4B,GAAOA,IAAQzG,CAAG,CAAC,CAAC;AACjF,sBAAQI,GAAE;AAAA,gBACR,KAAK;AACH,kBAAAmG,EAAGpF,CAAG,IAAIyF,EAAI,CAAC;AAAA,gBACjB,KAAK;AACH,kBAAAL,EAAGpF,IAAM,KAAKf,KAAM,KAAK,CAAC,IAAIwG,EAAI,CAAC;AAAA,gBACrC,KAAK;AACH,kBAAAL,EAAGpF,IAAM,KAAKf,KAAM,KAAK,CAAC,IAAIwG,EAAI,CAAC;AAAA,gBACrC,KAAK;AACH,kBAAAL,EAAGpF,IAAM,KAAKf,KAAM,KAAK,CAAC,IAAIwG,EAAI,CAAC;AAAA,cACzC;AACE,kBAAI,EAAA5G,IAAM0G,KAAM,IAAItG,KAGpB;AAAA,qBAAK9e,IAAI,IAAI8e,GAAI9e,IAAI+F,GAAG/F,IAAIA,IAAI,IAAI;AAClC,kBAAAklB,EAAIrF,IAAM7f,KAAK,IAAI,CAAC,IAAIslB,EAAItlB,CAAC,KAAK,KAAKslB,EAAItlB,IAAI,CAAC,KAAK,KAAKslB,EAAItlB,IAAI,CAAC,KAAK,IAAIslB,EAAItlB,IAAI,CAAC;AAEvF,wBAAQolB,GAAE;AAAA,kBACR,KAAK;AACH,oBAAAH,EAAGpF,IAAM9Z,IAAI,IAAI,CAAC,IAAIuf,EAAIvf,IAAI,CAAC;AAAA,kBACjC,KAAK;AACH,oBAAAkf,EAAGpF,IAAM9Z,IAAI,IAAI,CAAC,IAAIuf,EAAIvf,IAAI,CAAC;AAAA,kBACjC,KAAK;AACH,oBAAAkf,EAAGpF,IAAM9Z,IAAI,IAAI,CAAC,IAAIuf,EAAIvf,CAAC;AAAA,gBACjC;AAAA;AAAA,YACA;AAEA,YAAAgI,EAAO,UAAU,SAAU75B,GAAM+wC,GAAIC,GAAKC,GAAOzG,GAAKmB,GAAK;AACzD,kBAAI,OAAO3rC,KAAS;AAClB,uBAAO8wC,EAAQ9wC,GAAM+wC,GAAIC,GAAKC,GAAOzG,GAAKmB,CAAG;AAM/C,kBAJI3rC,aAAgB,SAIhB6wC,KAASA,EAAM,UAAUA,EAAM,OAAO,SAAS7wC,CAAI;AACrD,uBAAOmxC,EAAQnxC,GAAM+wC,GAAIC,GAAKC,GAAOzG,GAAKmB,CAAG;AAE/C,kBAAI3rC,aAAgB;AAClB,uBAAOmxC,EAAQ,IAAI,WAAWnxC,CAAI,GAAG+wC,GAAIC,GAAKC,GAAOzG,GAAKmB,CAAG;AAE/D,kBAAI3rC,EAAK,kBAAkB;AACzB,uBAAOmxC,EAAQ,IAAI,WAAWnxC,EAAK,QAAQA,EAAK,YAAYA,EAAK,UAAU,GAAG+wC,GAAIC,GAAKC,GAAOzG,GAAKmB,CAAG;AAExG,kBAAI3rC,aAAgB;AAClB,uBAAOqxC,EAASrxC,GAAM+wC,GAAIC,GAAKC,GAAOzG,GAAKmB,CAAG;AAEhD,oBAAM,IAAI,MAAM,wBAAwB;AAAA,YAC1C;AAAA,UAEA;AAAA;AAAA;AAAA,WAEO,SAAS9R,GAAQ8P,GAASF,GAAqB;AAEtD,gBAAI6H,IAAe,4BAAY;AAAE,uBAASC,EAAiBC,GAAQ1zC,GAAO;AAAE,yBAASguB,IAAI,GAAGA,IAAIhuB,EAAM,QAAQguB,KAAK;AAAE,sBAAI2lB,IAAa3zC,EAAMguB,CAAC;AAAG,kBAAA2lB,EAAW,aAAaA,EAAW,cAAc,IAAOA,EAAW,eAAe,IAAU,WAAWA,MAAYA,EAAW,WAAW,KAAM,OAAO,eAAeD,GAAQC,EAAW,KAAKA,CAAU;AAAA,gBAAE;AAAA,cAAE;AAAG,qBAAO,SAAUxH,GAAayH,GAAYC,GAAa;AAAE,uBAAID,KAAYH,EAAiBtH,EAAY,WAAWyH,CAAU,GAAOC,KAAaJ,EAAiBtH,GAAa0H,CAAW,GAAU1H;AAAA,cAAY;AAAA,YAAG,GAAE;AAEjjB,qBAASF,EAAgBC,GAAUC,GAAa;AAAE,kBAAI,EAAED,aAAoBC;AAAgB,sBAAM,IAAI,UAAU,mCAAmC;AAAA,YAAI;AAIvJ,gBAAIqB,IAAQ7B,EAAoB,CAAC,GAE7BU,IAAWV,EAAoB,CAAC,GAChCW,IAAQD,EAAS,OAEjByH,KAAO,WAAY;AACrB,uBAASA,IAAO;AACd,gBAAA7H,EAAgB,MAAM6H,CAAI,GAE1B,KAAK,SAAS,IAAItG,EAAK,GACvB,KAAK,OAAO,WAAU;AAAA,cAC1B;AAEE,qBAAAsG,EAAK,UAAU,SAAS,SAAgB5xC,GAAM;AAC5C,4BAAK,OAAO,OAAOA,CAAI,GAChB;AAAA,cACX,GAEE4xC,EAAK,UAAU,SAAS,SAAgBC,GAAU;AAChD,oBAAIC,IAAS,KAAK,OAAO,OAAM,EAAG;AAClC,oBAAI,CAACD;AACH,yBAAOC;AAET,oBAAID,MAAa;AACf,yBAAOzH,EAAM0H,CAAM;AAErB,sBAAM,IAAI,MAAM,6BAA6B;AAAA,cACjD,GAEER,EAAaM,GAAM,CAAC;AAAA,gBAClB,KAAK;AAAA,gBACL,KAAK,WAAY;AACf,yBAAO,KAAK,OAAO,SAAQ;AAAA,gBACjC;AAAA,gBACI,KAAK,SAAU5F,GAAO;AACpB,uBAAK,OAAO,SAASA,CAAK;AAAA,gBAChC;AAAA,cACA,CAAG,CAAC,GAEK4F;AAAA,YACT,GAAC;AAED,YAAA/X,EAAO,UAAU,WAAY;AAC3B,qBAAO,IAAI+X,EAAI;AAAA,YACjB;AAAA,UAEA;AAAA;AAAA,QACA,CAAU;AAAA;AAAA,IACV,CAAC;AAAA;;;mCCv5BKG,KAAkB,GAClBC,KAAuB,KACvBC,KAAuB,KACvBC,KAAuB,GAEvBC,KAAa,OAAOC,GAA4BzrC,IAAiB,SAAS;AAC9E,QAAMA;AACR,GAEM0rC,KAAe,OAAOD,GAA4BlK,MAAgB;AACtE,QAAM,EAAE,WAAAvhB,EAAA,IAAc4J,GAAA,GAChB,EAAE,sBAAAyY,EAAA,IAAyBvY,GAAA;AACjC,SAAO,MAAMsY,GAAgBpiB,GAAWyrB,GAAWlK,GAAKc,CAAoB;AAC9E,GAEMsJ,KAA+B,CAAC3rC,MAAuB;AAC3D,QAAM,EAAE,GAAA5F,EAAA,IAAM8f,GAAK,UAAUA;AAC7B,MAAI,CAACla,KAAS,CAACA,EAAM,YAAY,CAACA,EAAM,SAAS;AAE/C,WAAO5F,EAAE,2CAA2C;AAEtD,QAAMf,IAAO2G,EAAM,SAAS,MACtB4rC,IAA0B,CAAA;AAChC,aAAW,CAAC7tC,GAAKqN,CAAM,KAAK,OAAO,QAAQ/R,EAAK,MAAM;AACpD,YAAQ0E,GAAA;AAAA,MACN,KAAK;AACH,QAAA6tC,EAAc,KAAKxxC,EAAE,mCAAmC,CAAC;AACzD;AAAA,MACF,KAAK;AACH,QAAAwxC,EAAc,KAAKxxC,EAAE,qCAAqC,CAAC;AAC3D;AAAA,MACF,KAAK;AACH,QAAAwxC,EAAc,KAAKxxC,EAAE,uCAAuC,CAAC;AAC7D;AAAA,MACF;AAEE,QAAAwxC,EAAc,KAAKxxC,EAAE,0CAA0C,IAAI,OAAO2D,IAAM,QAAQqN,EAAO,KAAK,GAAG,CAAC;AAAA,IAAA;AAG9G,SAAOwgC,EAAc,SAAS,IAAIA,EAAc,KAAKC,EAAa,IAAIzxC,EAAE,2CAA2C;AACrH,GAEM0xC,KAAW,OAAO9mB,GAAgB+b,GAAcf,MAC7C,IAAI,QAAQ,CAACpsB,GAASC,MAAW;AACtC,QAAMk4B,IAAU/L,EAAK,MAAMhb,GAAQA,IAAS+b,CAAI,GAC1CqF,IAAS,IAAI,WAAA;AACnB,EAAAA,EAAO,SAAS,SAAUp3B,GAAG;AAC3B,QAAIA,EAAE,QAAQ,eAAe,WAAW,MAAM;AAC5C,YAAMyU,IAASzU,EAAE,OAAO;AACxB,MAAIyU,aAAkB,cACpB7P,EAAQ,EAAE,MAAM6P,GAAQ,QAAAuB,EAAA,CAAgB,IAExCnR,EAAO,IAAI,MAAM,yCAAyC,CAAC;AAAA,IAE/D;AAAA,EACF,GACAuyB,EAAO,UAAU,SAAUp3B,GAAG;AAC5B,IAAA6E,EAAO7E,CAAC;AAAA,EACV,GACAo3B,EAAO,kBAAkB2F,CAAO;AAClC,CAAC,GAGGC,KAAQ,CAACC,MACN,IAAI,QAAQ,CAACr4B,MAAY,WAAWA,GAASq4B,CAAE,CAAC;AAGlD,SAASC,GAAUT,GAA4BU,IAAsB,QAAW;AACrF,QAAM,EAAE,WAAAnsB,EAAA,IAAc4J,GAAA,GAChBwiB,IAAWnzC,EAAI,CAAC,GAEhBozC,IAAWpzC,EAAI,CAAC;AAEtB,MAAIqzC,IAAoB,CAAA,GACpBC,IAAgB,GAChBC,IAAe,GACfC,IAAa,GACbC,IAA0D;AAC9D,QAAMnL,IAAMoL,GAAM,WAAA,GACZ,EAAE,iBAAAhN,GAAiB,eAAAJ,EAAA,IAAkBF,GAAA,GAErCuN,IAAsB,MACnB,KAAK,QAAQ;AAItB,WAASC,EAAiBC,GAAe;AACvC,UAAMC,IAAeH,EAAA;AACrB,QAAIL,MAAkB,GAAG;AACvB,MAAAA,IAAgBQ;AAEhB;AAAA,IACF;AAEA,UAAMC,IAAWP,IAAa,IAAIK,EAAc,SAASL,IAAaK,EAAc;AACpF,IAAAL,IAAaK,EAAc,UAAUA,EAAc,SAAS,IAAIA,EAAc,QAC9ER,EAAW,KAAKU,KAAYD,IAAeR,EAAc,GAEzDA,IAAgBQ;AAAA,EAClB;AAEA,QAAME,IAAc,OAAOC,GAAiBloB,MACnC,IAAI,QAAQ,CAACpR,GAASC,MAAW;AACtC,QAAI,CAAC43B,EAAU,QAAQ;AACrB,MAAA53B,EAAA;AACA;AAAA,IACF;AACA,IAAAsuB,GAAeniB,GAAWyrB,GAAWA,EAAU,QAAQyB,GAAWA,EAAU,MAAMloB,GAAQ6nB,CAAgB,EACvG,KAAK,CAACppB,MAAW;AAChB,MAAA7P,EAAQ6P,CAAM;AAAA,IAChB,CAAC,EACA,MAAM,CAAC0pB,MAAc;AACpB,MAAAt5B,EAAOs5B,CAAS;AAAA,IAClB,CAAC;AAAA,EACL,CAAC,GAGGC,IAAwB,OAAOpoB,MAAkC;AACrE,IAAA2a,EAAgB8L,EAAU,SAAS,KAAK;AACxC,QAAIlG,IAAqD,MAAMuG;AAAA,MAC7D9mB;AAAA,MACAua,EAAc;AAAA,MACdkM,EAAU;AAAA,IAAA,GAERyB,IAAY,IAAI,KAAK,CAAC3H,EAAY,IAAI,GAAGkG,EAAU,KAAM,MAAM,EAAE,MAAMA,EAAU,KAAM,MAAM;AAEjG,IAAAA,EAAU,oBAAoBzmB;AAC9B,UAAMqoB,IAAchM,GAAM;AAC1B,IAAAoK,EAAU,yBAAyB4B,EAAY,OAAA;AAE/C,QAAIC,IAAYhC,IACZzuB,IAAU;AACd,OAAG;AACD,MAAAA;AACA,UAAI;AACF,qBAAMowB,EAAYC,GAAWloB,CAAM,GACnCuc,EAAI,OAAOgE,EAAY,IAAI,GAEpB2H;AAAA,MACT,SAASltC,GAAO;AAEd,YAAIqhC,GAAM,aAAarhC,CAAK,KAAKA,EAAM,UAAU,WAAW,OAAO6c,KAAWuuB;AAC5E,iBAAAK,EAAU,MAAM,UAAU,iEACnB,QAAQ,OAAOzrC,CAAK;AAI7B,YAAI+lB,GAAoC/lB,CAAc;AACpD,iBAAA6c,IAAUuuB,IACVK,EAAU,MAAM,UAAUE,GAA6B3rC,CAAK,GACrD,QAAQ,OAAOA,CAAK;AAG7B,QAAI2/B,EAAgB8L,EAAU,SAAS,KAAK,MAC1ClG,IAAc,MAAMuG,GAAS9mB,GAAQua,EAAc,OAAOkM,EAAU,IAAK,GACzEyB,IAAY,IAAI,KAAK,CAAC3H,EAAY,IAAI,GAAGkG,EAAU,KAAM,MAAM,EAAE,MAAMA,EAAU,KAAM,MAAM,IAG/F,MAAMO,GAAMsB,CAAS,GACrBzwB,MAAYuuB,KAAkB,IAAKkC,IAAY,IAAMA,KAAa/B;AAAA,MACpE;AAAA,IACF,SAAS1uB,IAAUuuB;AACnB,WAAO,QAAQ,OAAO,4CAA4C;AAAA,EACpE;AAEA,WAASmC,IAAa;AACpB,aAASC,IAAgB;AAEvB,UADAlB,IAAaA,EAAW,MAAM,GAAG,GAC7BA,EAAW,SAAS,GAAG;AACzB,cAAMmB,IAAW,KAAK,KAAKnB,EAAW,OAAO,CAACoB,GAAKC,MAAYD,IAAMC,CAAO,IAAIrB,EAAW,MAAM,GAC3FsB,IAAiB,KAAK,KAAKxB,EAAS,UAAU,MAAMC,EAAS,SAAS,IAAI;AAEhF,QAAAF,EAAeE,EAAS,OAAOoB,GAAU,KAAK,KAAKG,IAAiBH,CAAQ,CAAC;AAAA,MAC/E;AAEA,MAAIjB,MAAiB,MACnBE,IAAoB,WAAW,WAAY;AACzC,QAAAc,EAAA;AAAA,MACF,GAAGnC,EAAoB;AAAA,IAE3B;AAEA,IAAAmC,EAAA;AAAA,EACF;AAiDA,SAAO;AAAA,IACL,YAxCiB,YACV,IAAI,QAAQ,CAAC55B,GAASC,MAAW;AACtC,UAAI,CAAC43B,EAAU,QAAQA,EAAU,KAAK,OAAO,GAAG;AAC9C,QAAAD,GAAoB;AACpB;AAAA,MACF;AACA,MAAAY,EAAS,QAAQX,EAAU,KAAK,MAChCA,EAAU,SAASrM,GAAsB,WACzC8C,GAAeliB,GAAWyrB,CAAS,EAChC,KAAK,CAAC1rC,MAAQ;AACb,QAAA0rC,EAAU,UAAU1rC,EAAI,OACxB0rC,EAAU,SAAS1rC,EAAI,IACvB6T,EAAQ63B,CAAS;AAAA,MACnB,CAAC,EACA,MAAM,CAACtpB,MAAQ;AACd,QAAAtO,EAAOsO,CAAG;AAAA,MACZ,CAAC;AAAA,IACL,CAAC;AAAA,IAwBD,QArBa,YAAY;AACzB,MAAIgqB,KACFoB,EAAA;AAGF,YAAMM,IAAWpC,EAAU,MAAM;AACjC,UAAIzwC,EAAY6yC,CAAQ,EAAG,QAAO,QAAQ,OAAA;AAE1C,UAAI1oB,IAAI;AACR,aAAOA,IAAI0oB,KAAU;AACnB,cAAMC,IAAgB,MAAMV,EAAsBjoB,CAAC;AACnD,QAAAA,KAAK2oB,EAAc,MACnBzB,EAAS,QAASlnB,IAAI0oB,IAAY;AAAA,MACpC;AAEA,aAAArB,IAAe,KAAK,QAAQ,KACrB,MAAMd,GAAaD,GAAWlK,EAAI,OAAO,KAAK,CAAC;AAAA,IACxD;AAAA,IAKE,gBAlDqB,MAAM;AAC3B,MAAImL,MAAsB,SACxB,aAAaA,CAAiB,GAC9BA,IAAoB,OAEtBF,IAAe,KAAK,QAAQ;AAAA,IAC9B;AAAA,EA4CE;AAEJ;AAEO,MAAMuB,KAAa,CAACC,MAAyC;AAClE,EAAAA,EAAkB,OAAO,yBAAyB;AACpD,GC1OMC,KAA6B,GAC7BC,KAAmB,UAEZzL,KAAuBphB,GAAY,2BAA2B,MAAM;AAC/E,QAAM,EAAE,qBAAAyP,GAAqB,qBAAAC,EAAA,IAAwBnC,GAAA,GAC/C,EAAE,oBAAAgC,GAAoB,oBAAAC,EAAA,IAAuBxC,GAAA,GAE7CwZ,IAAS5uC,EAAsC,oBAAI,KAAK,GAExD,EAAE,eAAAk1C,EAAA,IAAkBtQ,GAAA,GAEpB,EAAE,WAAA7d,EAAA,IAAc4J,GAAA,GAChB,EAAE,4BAAAwkB,EAAA,IAA+BpP,GAAA;AACvC,EAAAoP,EAA2B,CAACzyC,MAAU;AACpC,YAAQA,EAAM,MAAA;AAAA,MACZ,KAAK2iC,GAAoB;AACvB,QAAA+P,EAAmB1yC,EAAM,KAAK,KAAK;AACnC;AAAA,MACF,KAAK2iC,GAAoB;AACvB,QAAAgQ,EAAgB3yC,EAAM,KAAK,OAAOA,EAAM,KAAK,UAAU;AACvD;AAAA,MACF,KAAK2iC,GAAoB;AACvB,QAAAiQ,EAAmB5yC,EAAM,KAAK,OAAOA,EAAM,KAAK,iBAAiBA,EAAM,KAAK,SAAS;AACrF;AAAA,MACF,KAAK2iC,GAAoB;AACvB,QAAAkQ,EAA2B7yC,EAAM,KAAK,KAAK;AAC3C;AAAA,MACF,KAAK2iC,GAAoB;AACvB,QAAAmQ,EAAgB9yC,EAAM,KAAK,KAAK;AAChC;AAAA,IAAA;AAAA,EAEN,CAAC;AAED,WAAS+yC,EAASC,GAA0B;AAC1C,WAAI9G,EAAO,MAAM,IAAI8G,CAAQ,IACpB9G,EAAO,MAAM,IAAI8G,CAAQ,IAE3B;AAAA,EACT;AAEA,WAASC,EAAcD,GAA0B;AAC/C,WAAI9G,EAAO,MAAM,IAAI8G,CAAQ,IACpB9G,EAAO,MAAM,IAAI8G,CAAQ,GAAG,SAAS,CAAA,IAEvC,CAAA;AAAA,EACT;AAEA,iBAAeE,EACbF,GACA1uB,GACA6uB,GACA3mB,GACA;AACA,UAAM,EAAE,uBAAAhF,GAAA,IAA0BrB,GAAA,GAE5ByU,KAAkBpT,GAAsBlD,CAAS;AACvD,QAAIjlB,EAAYu7B,EAAe;AAC7B,YAAM,IAAI,MAAM,0EAA0E;AAE5F,eAAWzN,MAAWX,GAAQ;AAC5B,YAAMsjB,KAAY0C;AAAA,QAChB,WAAWrlB;AAAA,QACXqW,GAAoB;AAAA,QACpBC,GAAsB;AAAA,QACtB1f,GAAa;AAAA;AAAA,QACbwuB;AAAA,QACAY;AAAA,MAAA;AAEF,MAAArD,GAAU,UAAU3iB,IACpBimB,EAAYJ,CAAQ,GACpBK,EAAaL,GAAUlD,EAAS,GAChCwD,EAAuBN,CAAQ,GAC/BO,EAAcP,CAAQ;AAAA,IACxB;AAAA,EACF;AAEA,iBAAeQ,EAAWR,GAA0B1uB,GAAsB6uB,GAAyBM,GAAe;AAChH,UAAM,EAAE,uBAAAjsB,GAAA,IAA0BrB,GAAA,GAE5ByU,KAAkBpT,GAAsBlD,CAAS;AACvD,QAAIjlB,EAAYu7B,EAAe;AAC7B,YAAM,IAAI,MAAM,kEAAkE;AAEpF,qBAAiByJ,MAAQoP,GAAO;AAC9B,YAAMxsB,KAAOqc,GAAuBc,GAAeC,EAAI,GAAGzJ,EAAe;AACzE,UAAI,CAAC3T,MAAQA,OAASlD,GAAa,MAAO;AAC1C,YAAM+rB,KAAY0C;AAAA,QAChB,UAAUnO,GAAK;AAAA,QACfb,GAAoB;AAAA,QACpBC,GAAsB;AAAA,QACtBxc;AAAA,QACAsrB;AAAA,QACAY;AAAA,MAAA;AAEF,MAAArD,GAAU,OAAOzL,IACjByL,GAAU,eAAezL,GAAK,MAC9B+O,EAAYJ,CAAQ,GACpBK,EAAaL,GAAUlD,EAAS,GAChCwD,EAAuBN,CAAQ,GAC/BO,EAAcP,CAAQ;AAAA,IACxB;AAAA,EACF;AAEA,WAASK,EAAaL,GAA0B7zC,GAAuB;AACrE,UAAMstC,IAAQP,EAAO,MAAM,IAAI8G,CAAQ;AACvC,IAAKvG,KACLA,EAAM,MAAM,KAAKttC,CAAI;AAAA,EACvB;AAEA,WAASi0C,EAAYJ,GAA0B;AAC7C,IAAK9G,EAAO,MAAM,IAAI8G,CAAQ,KAC5B9G,EAAO,MAAM,IAAI8G,GAAU;AAAA,MACzB,OAAO,CAAA;AAAA,MACP,YAAY;AAAA,MACZ,gBAAgB;AAAA,MAChB,cAAc;AAAA,MACd,aAAa,EAAE,iBAAiB,oBAAI,OAAe,gBAAgB,oBAAI,IAAA,EAAY;AAAA,IAAE,CACtF;AAAA,EAEL;AAEA,WAASM,EAAuBN,GAA0B;AACxD,UAAMvG,IAAQP,EAAO,MAAM,IAAI8G,CAAQ;AACvC,IAAKvG,MACLA,EAAM,aAAaA,EAAM,MAAM,QAC/BA,EAAM,iBACJiH,EAAsBV,GAAUvP,GAAsB,QAAQ,EAAE,SAChEiQ,EAAsBV,GAAUvP,GAAsB,MAAM,EAAE;AAAA,EAClE;AAEA,WAASiQ,EAAsBV,GAA0B1W,GAAmC;AAC1F,UAAMmQ,IAAQP,EAAO,MAAM,IAAI8G,CAAQ;AACvC,WAAKvG,IACEA,EAAM,MAAM,OAAO,CAACttC,MAASA,EAAK,WAAWm9B,CAAM,IADvC,CAAA;AAAA,EAErB;AAEA,WAASiX,EAAcP,GAA0B;AAC/C,UAAMW,IAAeD,EAAsBV,GAAUvP,GAAsB,OAAO;AAMlF,QALI,EAAAkQ,EAAa,WAAW,KAILD,EAAsBV,GAAUvP,GAAsB,SAAS,EAAE,WACjE6O;AAIvB,eAAS9oB,IAAI,GAAGA,IAAI8oB,IAA4B9oB;AAC9C,QAAImqB,EAAanqB,CAAC,OAAwBmqB,EAAanqB,CAAC,GAAGwpB,CAAQ;AAAA,EAEvE;AAEA,iBAAeY,EAAqBz0C,GAAuB6zC,GAA0B;AACnF,UAAM,EAAE,QAAAa,GAAQ,YAAAC,GAAY,gBAAAC,GAAA,IAAmBxD;AAAA,MAC7CpxC;AAAA,MACA,CAACuxC,IAAkBzM,IAAe+P,OAAqB;AACrD,QAAAC,EAAe90C,GAAMuxC,IAAUzM,IAAO+P,EAAQ;AAAA,MAChD;AAAA,IAAA;AAEF,QAAI;AACF,YAAMF,EAAA,GACN,MAAMD,EAAA,GACNN,EAAcP,CAAQ;AAAA,IACxB,QAAY;AACV,MAAAe,GAAA,GACA50C,EAAK,MAAM,WAAW,IACtBA,EAAK,SAASskC,GAAsB,QACpC6P,EAAuBN,CAAQ,GAC/BO,EAAcP,CAAQ;AAAA,IACxB;AAAA,EACF;AAEA,WAASiB,EAAe90C,GAAuBuxC,GAAkBzM,GAAe+P,GAAkB;AAChG,IAAA70C,EAAK,SAAS,kBAAkBuxC,GAChCvxC,EAAK,SAAS,gBAAgB60C,GAC9B70C,EAAK,SAAS,QAAQ8kC;AAAA,EACxB;AAEA,iBAAeyO,EAAmBvlB,GAAgB;AAChD,QAAI;AACF,YAAMnD,IAAQ,MAAMxB,GAAWnE,GAAW8I,CAAO;AACjD,UAAI,CAACnD,EAAO;AACZ,MAAAkiB,EAAO,MAAM,QAAQ,CAACO,GAAOuG,MAAa;AACxC,QAAAvG,EAAM,MAAM,QAAQ,CAACttC,OAAS;AAC5B,UAAIA,GAAK,YAAY6qB,EAAM,MAAMA,EAAM,aACrC,aAAa7qB,GAAK,yBAAyB,GAC3CA,GAAK,SAASskC,GAAsB,UACpCtkC,GAAK,cAAc6qB,EAAM,WAAW,aAChCA,EAAM,SAAS,OAAO,iBACxB7qB,GAAK,eAAe6qB,EAAM,SAAS,MAAM,eAE3C7qB,GAAK,oBAAoB6qB,EAAM,mBAC/BupB,EAAcP,CAAQ;AAAA,QAE1B,CAAC,GACDM,EAAuBN,CAAQ;AAAA,MACjC,CAAC;AAAA,IACH,QAAY;AAAA,IAEZ;AAAA,EACF;AAEA,iBAAeJ,EACbzlB,GACA+mB,IAAiC,MACjC3vB,IAAqC,MACrC;AACA,UAAM,EAAE,gBAAA4vB,GAAgB,oBAAAC,GAAA,IAAuBhS,GAAA;AAC/C,QAAI,CAAC8R,KAAmB,CAAC3vB,KAAaA,MAAcR,GAAa,MAAO;AACxE,QAAIswB,KAAsC;AAC1C,QAAI;AACF,MAAAA,KAAW,MAAM3rB,GAAmBrE,GAAW6vB,CAAe;AAAA,IAChE,QAAY;AACV,YAAM,IAAI,MAAM,aAAa;AAAA,IAC/B;AACA,IAAAhI,EAAO,MAAM,QAAQ,CAACO,IAAOuG,OAAa;AACxC,MAAAvG,GAAM,MAAM,QAAQ,CAACttC,OAAS;AAC5B,QAAI4B,GAAOszC,EAAQ,KACfl1C,GAAK,YAAYguB,MACnB,aAAahuB,GAAK,yBAAyB,GAC3CA,GAAK,cAAc,IACnBA,GAAK,SAASskC,GAAsB,UACpCtkC,GAAK,SAAS+0C,GACd/0C,GAAK,mBAAmBk1C,GAAS,IACjCl1C,GAAK,cAAck1C,GAAS,WAAW,aACnCA,GAAS,UAAU,OAAO,iBAC5Bl1C,GAAK,eAAek1C,GAAS,SAAS,MAAM,eAE9Cl1C,GAAK,WAAWk1C,GAAS,UACzBl1C,GAAK,UAAUk1C,GAAS,SACxBl1C,GAAK,aAAak1C,GAAS,SAAS,YACpCF,EAAeE,GAAS,SAAS,mBAAmB5H,GAAM,YAAY,cAAc,GACpF0H,EAAeE,GAAS,SAAS,oBAAoB5H,GAAM,YAAY,eAAe,GACtFttC,GAAK,kBAAkBi1C,GAAmBC,GAAU,SAAS,iBAAiB,GAC9Elf,EAAoBh2B,GAAK,QAAQ,GACjC81B,EAAmB91B,GAAK,OAAO,GAC/B81B,EAAmB91B,GAAK,eAAe,GACvCA,GAAK,UAAUk1C,GAAS,IACxBl1C,GAAK,oBAAoBk1C,GAAS,mBAClCl1C,GAAK,kBAAkB,IACvBo0C,EAAcP,EAAQ;AAAA,MAE1B,CAAC,GACDM,EAAuBN,EAAQ,GAC/B9d,EAAA,GACAE,EAAA;AAAA,IACF,CAAC;AAAA,EACH;AAEA,iBAAeud,EAAgBxlB,GAAgBmnB,GAAqC;AAClF,QAAI;AACF,YAAMtqB,IAAQ,MAAMxB,GAAWnE,GAAW8I,CAAO;AACjD,MAAA+e,EAAO,MAAM,QAAQ,CAACO,GAAOuG,OAAa;AACxC,QAAAvG,EAAM,MAAM,QAAQ,CAACttC,OAAS;AAC5B,UAAIA,GAAK,YAAY6qB,EAAM,OACzB,aAAa7qB,GAAK,yBAAyB,GAC3CA,GAAK,MAAM,WAAW,IACtBA,GAAK,SAASskC,GAAsB,QACpCtkC,GAAK,MAAM,sBAAsBm1C,GACjCn1C,GAAK,kBAAkB,IACvBo0C,EAAcP,EAAQ;AAAA,QAE1B,CAAC,GACDM,EAAuBN,EAAQ;AAAA,MACjC,CAAC;AAAA,IACH,QAAY;AAAA,IAEZ;AAAA,EACF;AAEA,iBAAeH,EAA2B1lB,GAAgB;AACxD,UAAM,EAAE,gBAAAgnB,GAAgB,oBAAAC,EAAA,IAAuBhS,GAAA;AAC/C,QAAI;AACF,YAAMpY,IAAQ,MAAMxB,GAAWnE,GAAW8I,CAAO;AACjD,MAAA+e,EAAO,MAAM,QAAQ,CAACO,IAAOuG,OAAa;AACxC,QAAAvG,GAAM,MAAM,QAAQ,CAACttC,OAAS;AAC5B,UAAIA,GAAK,YAAY6qB,EAAM,MAAM7qB,GAAK,SACpC,aAAaA,GAAK,yBAAyB,GAC3CA,GAAK,WAAW6qB,EAAM,UACtB7qB,GAAK,UAAU6qB,EAAM,SACrB7qB,GAAK,aAAa6qB,EAAM,SAAS,YACjC7qB,GAAK,oBAAoB6qB,EAAM,mBAC/BmqB,EAAenqB,EAAM,SAAS,mBAAmByiB,GAAM,YAAY,cAAc,GACjF0H,EAAenqB,EAAM,SAAS,oBAAoByiB,GAAM,YAAY,eAAe,GACnFttC,GAAK,kBAAkBi1C,EAAmBpqB,EAAM,SAAS,iBAAiB,GAC1EmL,EAAoBh2B,GAAK,QAAQ,GACjC81B,EAAmB91B,GAAK,OAAO,GAC/B81B,EAAmB91B,GAAK,eAAe,GACvCA,GAAK,kBAAkB;AAAA,QAE3B,CAAC,GACDm0C,EAAuBN,EAAQ,GAC/B9d,EAAA,GACAE,EAAA;AAAA,MACF,CAAC;AAAA,IACH,QAAY;AAAA,IAEZ;AAAA,EACF;AAEA,iBAAe0d,EAAgB3lB,GAAgB;AAC7C,UAAM,EAAE,gBAAAgnB,GAAgB,oBAAAC,EAAA,IAAuBhS,GAAA;AAC/C,QAAI;AACF,YAAMpY,IAAQ,MAAMxB,GAAWnE,GAAW8I,CAAO;AACjD,MAAA+e,EAAO,MAAM,QAAQ,CAACO,IAAOuG,OAAa;AACxC,QAAAvG,GAAM,MAAM,QAAQ,CAACttC,OAAS;AAC5B,UAAIA,GAAK,YAAY6qB,EAAM,MAAMA,EAAM,YAAY7qB,GAAK,SACtD,aAAaA,GAAK,yBAAyB,GAC3CA,GAAK,SAAS6qB,EAAM,SAAS,IAC7B7qB,GAAK,SAASskC,GAAsB,UACpCtkC,GAAK,cAAc6qB,EAAM,WAAW,aAChCA,EAAM,SAAS,OAAO,iBACxB7qB,GAAK,eAAe6qB,EAAM,SAAS,MAAM,eAE3C7qB,GAAK,oBAAoB6qB,EAAM,mBAC/B7qB,GAAK,WAAW6qB,EAAM,UACtB7qB,GAAK,UAAU6qB,EAAM,SACrB7qB,GAAK,aAAa6qB,EAAM,SAAS,YACjCmqB,EAAenqB,EAAM,SAAS,mBAAmByiB,GAAM,YAAY,cAAc,GACjF0H,EAAenqB,EAAM,SAAS,oBAAoByiB,GAAM,YAAY,eAAe,GACnFttC,GAAK,kBAAkBi1C,EAAmBpqB,EAAM,SAAS,iBAAiB,GAC1EmL,EAAoBh2B,GAAK,QAAQ,GACjC81B,EAAmB91B,GAAK,OAAO,GAC/B81B,EAAmB91B,GAAK,eAAe,GACvCA,GAAK,kBAAkB,IACvBo0C,EAAcP,EAAQ;AAAA,QAE1B,CAAC,GACDM,EAAuBN,EAAQ,GAC/B9d,EAAA,GACAE,EAAA;AAAA,MACF,CAAC;AAAA,IACH,QAAY;AAAA,IAEZ;AAAA,EACF;AAEA,WAASmf,EAAcvB,GAA0BzwC,GAAe;AAC9D,UAAMkqC,IAAQP,EAAO,MAAM,IAAI8G,CAAQ;AACvC,IAAI,CAACvG,KAAS,CAACA,EAAM,MAAMlqC,CAAK,MAChCkqC,EAAM,MAAM,OAAOlqC,GAAO,CAAC,GAC3B+wC,EAAuBN,CAAQ;AAAA,EACjC;AAEA,iBAAewB,EAAexB,GAA0BlD,GAA4BvtC,GAAe;AACjG,UAAMkqC,IAAQP,EAAO,MAAM,IAAI8G,CAAQ;AACvC,IAAI,CAACvG,KAASA,EAAM,MAAM,WAAW,MACrCqD,EAAU,SAASrM,GAAsB,MACrCqM,EAAU,0BACZsC,GAAWtC,EAAU,sBAAsB,GAE7CyE,EAAcvB,GAAUzwC,CAAK,GAC7BgxC,EAAcP,CAAQ;AAAA,EACxB;AAEA,iBAAeyB,EAAiBzqB,GAA2B;AACzD,UAAM,EAAE,gBAAAmqB,GAAgB,oBAAAC,EAAA,IAAuBhS,GAAA;AAC/C,QAAI;AACF,YAAMiS,IAAW,MAAM7rB,GAAWnE,GAAW2F,EAAM,EAAE;AACrD,MAAAkiB,EAAO,MAAM,QAAQ,CAACO,IAAOuG,OAAa;AACxC,QAAAvG,GAAM,MAAM,QAAQ,CAACttC,OAAS;AAC5B,UAAIA,GAAK,YAAYk1C,EAAS,MAAMl1C,GAAK,SACvC,aAAaA,GAAK,yBAAyB,GAC3CA,GAAK,WAAWk1C,EAAS,UACzBl1C,GAAK,UAAUk1C,EAAS,SACxBl1C,GAAK,aAAak1C,EAAS,SAAS,YACpCF,EAAeE,EAAS,SAAS,mBAAmB5H,GAAM,YAAY,cAAc,GACpF0H,EAAeE,EAAS,SAAS,oBAAoB5H,GAAM,YAAY,eAAe,GACtFttC,GAAK,kBAAkBi1C,EAAmBC,EAAS,SAAS,iBAAiB,GAC7Elf,EAAoBh2B,GAAK,QAAQ,GACjC81B,EAAmB91B,GAAK,OAAO,GAC/B81B,EAAmB91B,GAAK,eAAe;AAAA,QAE3C,CAAC,GACDm0C,EAAuBN,EAAQ,GAC/B9d,EAAA,GACAE,EAAA;AAAA,MACF,CAAC;AAAA,IACH,QAAY;AAAA,IAEZ;AAAA,EACF;AAEA,WAASsf,EAAmB1B,GAA0B;AACpD,UAAMvG,IAAQP,EAAO,MAAM,IAAI8G,CAAQ;AACvC,WAAKvG,IACEA,EAAM,aADM;AAAA,EAErB;AAEA,WAASkI,EAAuB3B,GAA0B;AACxD,UAAMvG,IAAQP,EAAO,MAAM,IAAI8G,CAAQ;AACvC,WAAKvG,IACEA,EAAM,iBADM;AAAA,EAErB;AAEA,WAASmI,EAAW5B,GAA0B;AAC5C,UAAMvG,IAAQP,EAAO,MAAM,IAAI8G,CAAQ;AACvC,QAAI,CAACvG,KAASA,EAAM,MAAM,WAAW,EAAG;AACxC,UAAMoI,IAAenB,EAAsBV,GAAUvP,GAAsB,SAAS;AACpF,IAAAgJ,EAAM,MAAM,QAAQ,CAACttC,MAAS;AAC5B,MAAAA,EAAK,SAASskC,GAAsB;AAAA,IACtC,CAAC,GACGoR,EAAa,SAAS,KACxBA,EAAa,QAAQ,CAAC11C,MAAS;AAC7B,MAAIA,EAAK,0BACPizC,GAAWjzC,EAAK,sBAAsB;AAAA,IAE1C,CAAC,GAEH21C,EAAW9B,CAAQ,GACnB+B,EAAqB/B,CAAQ;AAAA,EAC/B;AAEA,WAAS+B,EAAqB/B,GAA0B;AACtD,IAAAI,EAAYJ,CAAQ;AACpB,UAAMvG,IAAQP,EAAO,MAAM,IAAI8G,CAAQ;AACvC,IAAKvG,KACLA,EAAM;AAAA,EACR;AAEA,WAASuI,EAAqBhC,GAA0B;AACtD,UAAMvG,IAAQP,EAAO,MAAM,IAAI8G,CAAQ;AACvC,WAAKvG,IACEA,EAAM,eADM;AAAA,EAErB;AAEA,WAASqI,EAAW9B,GAA0B;AAE5C,IADc9G,EAAO,MAAM,IAAI8G,CAAQ,KAEvC9G,EAAO,MAAM,IAAI8G,GAAU;AAAA,MACzB,OAAO,CAAA;AAAA,MACP,YAAY;AAAA,MACZ,gBAAgB;AAAA,MAChB,cAAcgC,EAAqBhC,CAAQ,IAAI;AAAA,MAC/C,aAAa,EAAE,iBAAiB,oBAAI,OAAe,gBAAgB,oBAAI,IAAA,EAAY;AAAA,IAAE,CACtF;AAAA,EACH;AAEA,WAASiC,EAAmBjC,GAA0B;AACpD,UAAMjsB,IAAiC,CAAA,GACjC0lB,IAAQP,EAAO,MAAM,IAAI8G,CAAQ;AACvC,QAAI,CAACvG,EAAO,QAAO1lB;AACnB,QAAI0lB,EAAM,MAAM,SAAS;AACvB,eAASjjB,IAAI,GAAGA,IAAIijB,EAAM,MAAM,QAAQjjB;AACtC,QAAIzC,EAAM,SAAS0lB,EAAM,MAAMjjB,CAAC,EAAE,SAAS,KAG3CzC,EAAM,KAAK0lB,EAAM,MAAMjjB,CAAC,EAAE,SAAS;AAGvC,WAAOzC;AAAA,EACT;AAEA,SAAO;AAAA,IACL,UAAAgsB;AAAA,IACA,eAAAE;AAAA,IACA,YAAAO;AAAA,IACA,oBAAAN;AAAA,IACA,oBAAAR;AAAA,IACA,oBAAAE;AAAA,IACA,iBAAAD;AAAA,IACA,eAAA4B;AAAA,IACA,gBAAAC;AAAA,IACA,oBAAAE;AAAA,IACA,wBAAAC;AAAA,IACA,YAAAC;AAAA,IACA,oBAAAK;AAAA,IACA,kBAAAR;AAAA,IACA,sBAAAM;AAAA,EAAA;AAEJ,CAAC;;;;;;;;;;;;;ACveD,UAAMv5C,IAAQC,GAsBR,EAAE,iBAAAy5C,EAAA,IAAoBxiB,GAAA,GACtBmU,IAAoBC,GAAA,GAEpB30B,IAASC,GAAqD,MAAS,GACvEC,IAASD,GAAoB,EAAK,GAElCjT,IAAOvD,EAAS,MACbs5C,EAAgB15C,EAAM,EAAE,CAChC,GAEK25C,IAAiBv5C,EAAS,MAAM;AACpC,UAAI,CAACJ,EAAM,QAAS;AACpB,YAAMixC,IAAQ5F,EAAkB,SAASrrC,EAAM,OAAO;AACtD,UAAI,GAACixC,KAAS,CAACt6B,EAAO,UAClBs6B,EAAM,YAAY,eAAe,IAAIt6B,EAAO,MAAM,IAAI;AAAG,eAAO;AAAA,IAEtE,CAAC,GAEKI,IAAe3W,EAAS,MACxBJ,EAAM,MAAM,SAAS,IAAUA,EAAM,QACrC2W,EAAO,QACFA,EAAO,MAAM,QAAQA,EAAO,MAAM,YAAY,SAAS,IAAI,KAAKA,EAAO,MAAM,UAAU,MAAM,MAE/F,EACR,GAEKijC,IAAkBx5C,EAAS,MAC3B,GAAAJ,EAAM,iBACN2D,EAAK,OAAO,SAEjB;AAED,IAAAd;AAAA,MACEc;AAAA,MACA,OAAOb,MAAa;AAClB,QAAI+T,EAAO,SACPhT,EAAYf,CAAQ,KAAKA,EAAS,YAAY,OAClD6T,EAAO,QAAQ7T,GACf+T,EAAO,QAAQ;AAAA,MACjB;AAAA,MACA,EAAE,WAAW,GAAA;AAAA,IAAK;AAGpB,UAAM,EAAE,GAAA5T,EAAA,IAAM/C,EAAA;2BAIZQ,EA8CM,OAAA;AAAA,MA9CA,UAAOT,EAAA,cAAc;AAAA,IAAA;MACT6E,EAAAS,EAAA,EAAOtF,EAAA,EAAE,KAAK6E,EAAAjB,CAAA,EAAY5D,EAAA,EAAE,IAC1CwB,GAEOC,+BAFP,MAEO;AAAA,0BAFY,OAEnB,EAAA;AAAA,MAAA,KAEczB,EAAA,iBAAhBS,EAgBM,OAAAS,IAAA;AAAA,QAfD+E,EAAAhF,EAAA6V,EAAA,KAAY,IAAG,KAClB,CAAA;AAAA,SACSF,EAAA,SAAU5W,EAAA,MAAM,WAAM,UAD/BM,EAMEa,IAAA;AAAA;UAJC,MAAM;AAAA,UACN,OAAO;AAAA,UACR,eAAA;AAAA,UACA,OAAM;AAAA,QAAA;QAGAw4C,EAAA,cADRr5C,EAMEQ,IAAA;AAAA;UAJA,MAAK;AAAA,UACL,MAAK;AAAA,UACL,OAAM;AAAA,UACL,OAAO+D,EAAA7B,CAAA,EAAC,6CAAA;AAAA,QAAA;kBAGb1C,EAsBQC,IAAA;AAAA;QApBL,MAAMP,EAAA;AAAA,QACN,eAAa05C,EAAA;AAAA,QACb,OAAO15C,EAAA,eAAe,SAAS;AAAA,QAC/B,OAAO25C,EAAA,QAAkB90C,EAAA7B,CAAA,mDAAmD;AAAA,MAAA;mBAE7E,MAAkB;AAAA,UAAfiD,EAAAhF,EAAA6V,EAAA,KAAY,IAAG,KAClB,CAAA;AAAA,WACSF,EAAA,SAAU5W,EAAA,MAAM,WAAM,UAD/BM,EAMEa,IAAA;AAAA;YAJC,MAAM;AAAA,YACN,OAAO;AAAA,YACR,eAAA;AAAA,YACA,OAAM;AAAA,UAAA;UAGAw4C,EAAA,cADRr5C,EAMEQ,IAAA;AAAA;YAJA,MAAK;AAAA,YACL,OAAM;AAAA,YACN,MAAK;AAAA,YACJ,OAAO+D,EAAA7B,CAAA,EAAC,6CAAA;AAAA,UAAA;;;;;;;;;;;;;;AClHjB,UAAMjD,IAAQC,GASR0B,IAAOC,GAIPi4C,IAAa,MAAM;AACvB,MAAAl4C,EAAK,aAAa3B,EAAM,EAAE;AAAA,IAC5B,GAEM,EAAE,iBAAA05C,EAAA,IAAoBxiB,GAAA,GAEtBvgB,IAASC,GAAqD,MAAS,GACvEC,IAASD,GAAoB,EAAK,GAElCjT,IAAOvD,EAAS,MACbs5C,EAAgB15C,EAAM,EAAE,CAChC,GAEK+W,IAAe3W,EAAS,MACxBuW,EAAO,QACFA,EAAO,MAAM,QAAQA,EAAO,MAAM,YAAY,SAAS,IAAI,KAAKA,EAAO,MAAM,UAAU,MAAM,MAE/F,EACR;AAED,WAAA9T;AAAA,MACEc;AAAA,MACA,OAAOb,MAAa;AAClB,QAAI+T,EAAO,SACPhT,EAAYf,CAAQ,KAAKA,EAAS,YAAY,OAClD6T,EAAO,QAAQ7T,GACf+T,EAAO,QAAQ;AAAA,MACjB;AAAA,MACA,EAAE,WAAW,GAAA;AAAA,IAAK,mBAKlBtW,EAcQC,IAAA;AAAA,MAbN,MAAK;AAAA,MACL,UAAA;AAAA,MACA,cAAW;AAAA,MACV,iBAAaq5C;AAAA,IAAA;iBAEd,MAAkB;AAAA,QAAf3zC,EAAAhF,EAAA6V,EAAA,KAAY,IAAG,KAClB,CAAA;AAAA,QACSF,EAAA,0BADTtW,EAMEa,IAAA;AAAA;UAJC,MAAM;AAAA,UACN,OAAO;AAAA,UACR,eAAA;AAAA,UACA,OAAM;AAAA,QAAA;;;;;IC9DC04C,KAAgB;AAAA,EAC3B,MAAM;AAAA,EACN,UAAU;AAAA,EACV,UAAU;AAAA,EACV,QAAQ;AACV,GAEaC,KAAuBD,GAAc;AAE3C,SAASE,KAAmB;AACjC,QAAM,EAAE,GAAA/2C,EAAA,IAAM/C,EAAA,GAER+5C,IAAoBn4C,EAA4C;AAAA,IACpE;AAAA,MACE,OAAOg4C,GAAc;AAAA,MACrB,OAAO72C,EAAE,wCAAwC;AAAA,IAAA;AAAA,IAEnD;AAAA,MACE,OAAO62C,GAAc;AAAA,MACrB,OAAO72C,EAAE,4CAA4C;AAAA,IAAA;AAAA,IAEvD;AAAA,MACE,OAAO62C,GAAc;AAAA,MACrB,OAAO72C,EAAE,4CAA4C;AAAA,IAAA;AAAA,IAEvD;AAAA,MACE,OAAO62C,GAAc;AAAA,MACrB,OAAO72C,EAAE,0CAA0C;AAAA,IAAA;AAAA,EACrD,CACD;AAMD,SAAO;AAAA,IACL,mBAAAg3C;AAAA,IACA,qBAN0B,CAAC5uC,MACpB4uC,EAAkB,MAAM,KAAK,CAACt2C,MAASA,EAAK,UAAU0H,CAAK;AAAA,EAKlE;AAEJ;ACpCA,MAAM,YAAE6uC,IAAA,WAAUnW,GAAA,IAAcK,GAAA;AAEzB,SAAS+V,GAAoBrjB,GAAwBsjB,IAAmC,QAAW;AACxG,QAAM/V,IAAQjkC,EAAS,OAAO;AAAA,IAC5B,QAAQ;AAAA,MACN,MAAM;AAAA,QAAA,UACJ85C;AAAAA,QACA,WAAWnW,GAAU,CAAC;AAAA,MAAA;AAAA,MAExB,YAAY;AAAA,QACV,WAAWA,GAAU,CAAC;AAAA,MAAA;AAAA,IACxB;AAAA,EACF,EACA;AAGF,SAAO;AAAA,IACL,IAHSS,GAAaH,GAAO,EAAE,QAAAvN,KAAU,EAAE,QAAQsjB,GAAiB;AAAA,EAGpE;AAEJ;ACpBO,SAASC,KAAsB;AAuBpC,SAAO;AAAA,IACL,eAvBoB,CAACjvB,GAAqBkvB,OACnC;AAAA,MACL,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,YAAY;AAAA,MACZ,WAAWlvB;AAAA,MACX,OAAO;AAAA,QACL,UAAUkvB,KAAY;AAAA,QACtB,oBAAoB;AAAA,MAAA;AAAA,MAEtB,gBAAgB,CAAA;AAAA,MAChB,cAAc,CAAA;AAAA,MACd,MAAMP;AAAA,MACN,WAAWvnC,GAAA;AAAA,MACX,YAAYA,GAAA;AAAA,MACZ,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,eAAemW;AAAAA,MACf,SAASK;AAAA,IAAA;AAAA,EAKX;AAEJ;;;;;;;;;;;;;;;;ACVA,UAAMhpB,IAAQC,GAuBR0B,IAAOC,GAIP,EAAE,WAAAinB,EAAA,IAAc4J,GAAA,GAChB,EAAE,uBAAAzG,EAAA,IAA0BrB,GAAA,GAE5ByU,IAAkBpT,EAAsBhsB,EAAM,SAAS;AAC7D,QAAI6D,EAAYu7B,CAAe;AAC7B,YAAM,IAAI,MAAM,qDAAqD;AAGvE,UAAM,EAAE,eAAA4X,EAAA,IAAkBqD,GAAA,GAEpBvjB,IAASh1B,EAAek1C,EAAch3C,EAAM,SAAS,CAAC,GACtDihB,IAASnf,EAAI,EAAK,GAClBoG,IAAgBpG,EAAI,EAAK,GAEzBmL,IAAU,CAACstC,MAAqC;AACpD,UAAI12C,EAAYu7B,CAAe;AAC7B,cAAM,IAAI,MAAM,qDAAqD;AAEvE,MAAAtI,EAAO,QAAQkgB,EAAch3C,EAAM,WAAW,EAAI,GAClDu6C,IAAgBzjB,EAAO,MAAM,OAAOyjB,IAAiBzjB,EAAO,MAAM,OAAO92B,EAAM,cAC/EihB,EAAO,QAAQ;AAAA,IACjB,GAEME,IAAW,MAAM;AACrB,MAAAF,EAAO,QAAQ;AAAA,IACjB,GAGM,EAAE,IAAAsjB,EAAA,IAAO4V,GAAoBrjB,GAAQ92B,EAAM,eAAe,GAC1D,EAAE,GAAAiD,EAAA,IAAM/C,EAAA,GACR,EAAE,qBAAAqI,GAAqB,eAAAC,GAAe,mBAAAC,EAAA,IAAsBC,GAAA,GAE5DC,IAAY,YAAY;AAC5B,UAAI,CAAAT,EAAc;AAClB,YAAI;AAGF,cAFAA,EAAc,QAAQ,IACtBq8B,EAAG,MAAM,OAAA,GACLA,EAAG,MAAM,UAAU;AACrB,YAAAh8B,EAAA,GACAL,EAAc,QAAQ;AACtB;AAAA,UACF;AACA,gBAAMU,IAAM,MAAM8tB,GAAa7N,GAAWiO,EAAO,KAAK;AACtD,UAAAn1B,EAAK,aAAaiH,CAAG,GACrBJ,EAAc,SAAS,GACvByY,EAAO,QAAQ,IACX,CAACpd,EAAY+E,EAAI,EAAE,KAAM5I,EAAM;AAAA,QAGrC,SAAS6I,GAAO;AACd,UAAAJ,EAAkBI,CAAK;AAAA,QACzB,UAAA;AACE,UAAAX,EAAc,QAAQ;AAAA,QACxB;AAAA,IACF,GAEM,EAAE,mBAAA+xC,EAAA,IAAsBD,GAAA;AAE9B,WAAA31C,EAAa;AAAA,MACX,MAAM4I;AAAA,IAAA,CACP;;;QAIkBhN,EAAA,YAAO,mBAAxBM,EAOY4G,IAAA,EAAA,KAAA,KAAA;AAAA,qBANV,MAKE;AAAA,YALFtG,EAKE0f,GAAA;AAAA,cAJA,MAAK;AAAA,cACJ,MAAMtgB,EAAA;AAAA,cACP,gBAAa;AAAA,cACZ,WAAYgN,GAAO,CAAA,MAAA,CAAA;AAAA,YAAA;;;cAIXhN,EAAA,YAAO,iBADpBM,EAScuI,GAAA;AAAA;UAPX,UAAO7I,EAAA,WAAW;AAAA,UAClB,WAASA,EAAA;AAAA,UACT,UAAUA,EAAA;AAAA,UACX,SAAQ;AAAA,UACP,SAAKsE,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAAvD,EAAA,CAAAyD,MAAOwI,EAAQ,MAAS,GAAA,CAAA,MAAA,CAAA;AAAA,QAAA;qBAE9B,MAAgB;AAAA,YAAb/G,EAAAhF,EAAA4D,EAAA7B,CAAA,EAAEhD,EAAA,OAAO,CAAA,GAAA,CAAA;AAAA,UAAA;;yDAEdM,EAiBO+F,IAAA;AAAA;UAfJ,UAAOrG,EAAA,WAAW;AAAA,UAClB,WAASA,EAAA;AAAA,UACV,MAAA;AAAA,UACC,UAAUA,EAAA;AAAA,UACX,SAAQ;AAAA,UACR,MAAK;AAAA,UACJ,SAAKsE,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAAvD,EAAA,CAAAyD,MAAOwI,EAAQ,MAAS,GAAA,CAAA,MAAA,CAAA;AAAA,QAAA;qBAE9B,MAAyB;AAAA,YAAzBpM,EAAyBE,IAAA,EAAlB,MAAK,YAAU;AAAA,YACtBF,EAKWmG,IAAA;AAAA,cAJT,WAAU;AAAA,cACV,UAAS;AAAA,YAAA;yBAET,MAA4C;AAAA,oBAAzClC,EAAA7B,CAAA,EAAC,mCAAA,CAAA,GAAA,CAAA;AAAA,cAAA;;;;;;QAGRpC,EA8DUkI,IAAA;AAAA,sBA9DQkY,EAAA;AAAA,wDAAAA,EAAM,QAAAxc;AAAA,QAAA;qBACtB,MA4DQ;AAAA,YA3DAwc,EAAA,cADR1gB,EA4DQgB,IAAA;AAAA;cA1DN,OAAM;AAAA,cACN,OAAM;AAAA,cACN,WAAQ;AAAA,YAAA;yBAER,MAEiB;AAAA,gBAFjBV,EAEiBmI,IAAA,EAFA,YAAWmY,KAAQ;AAAA,6BAClC,MAA6C;AAAA,wBAA1Crc,EAAA7B,CAAA,EAAC,oCAAA,CAAA,GAAA,CAAA;AAAA,kBAAA;;;gBAENpC,EAkCYoI,IAAA,MAAA;AAAA,6BAjCV,MAgCqB;AAAA,oBAhCrBpI,EAgCqB25C,IAAA;AAAA,sBA/BlB,QAAQ11C,EAAAkkB,EAAA;AAAA,sBACT,SAAQ;AAAA,oBAAA;iCAER,MASO;AAAA,wBATPnoB,EASO+I,IAAA,MAAA;AAAA,qCARL,MAOE;AAAA,4BAPF/I,EAOE45C,IAAA;AAAA,8BANS,YAAA3jB,EAAA,MAAO;AAAA,8BAAP,uBAAAvyB,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAE,MAAAqyB,EAAA,MAAO,OAAIryB;AAAA,8BACnB,OAAOK,EAAA7B,CAAA,EAAC,mCAAA;AAAA,8BACR,GAAG6B,EAAAy/B,CAAA,EAAG,OAAO;AAAA,8BACd,UAAA;AAAA,8BACA,WAAQ;AAAA,8BACP,YAAa57B,GAAS,CAAA,OAAA,CAAA;AAAA,4BAAA;;;;wBAG3B9H,EAQO+I,IAAA,MAAA;AAAA,qCAPL,MAME;AAAA,4BANF/I,EAME45C,IAAA;AAAA,8BALS,YAAA3jB,EAAA,MAAO;AAAA,8BAAP,uBAAAvyB,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAE,MAAAqyB,EAAA,MAAO,aAAUryB;AAAA,8BACzB,OAAOK,EAAA7B,CAAA,EAAC,yCAAA;AAAA,8BACR,GAAG6B,EAAAy/B,CAAA,EAAG,OAAO;AAAA,8BACd,WAAQ;AAAA,8BACP,YAAa57B,GAAS,CAAA,OAAA,CAAA;AAAA,4BAAA;;;;wBAG3B9H,EAQO+I,IAAA,MAAA;AAAA,qCAPL,MAME;AAAA,4BANF/I,EAME65C,IAAA;AAAA,8BALS,YAAA5jB,EAAA,MAAO;AAAA,8BAAP,uBAAAvyB,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAE,MAAAqyB,EAAA,MAAO,OAAIryB;AAAA,8BACnB,OAAOK,EAAA7B,CAAA,EAAC,mCAAA;AAAA,8BACR,OAAO6B,EAAAm1C,CAAA;AAAA,8BACR,WAAQ;AAAA,8BACP,YAAatxC,GAAS,CAAA,OAAA,CAAA;AAAA,4BAAA;;;;;;;;;;gBAK/B9H,EAeeqI,IAAA,MAAA;AAAA,6BAdb,MAAW;AAAA,oBAAXrI,EAAWsI,EAAA;AAAA,oBACXtI,EAKeuI,GAAA;AAAA,sBAJb,WAAQ;AAAA,sBACP,WAAY+X,GAAQ,CAAA,MAAA,CAAA;AAAA,oBAAA;iCAErB,MAA+B;AAAA,4BAA5Brc,EAAA7B,CAAA,EAAC,sBAAA,CAAA,GAAA,CAAA;AAAA,sBAAA;;;oBAENpC,EAMciI,GAAA;AAAA,sBALX,SAASZ,EAAA;AAAA,sBACV,WAAQ;AAAA,sBACP,WAAYS,GAAS,CAAA,MAAA,CAAA;AAAA,oBAAA;iCAEtB,MAAgB;AAAA,wBAAbzC,EAAAhF,EAAA4D,EAAA7B,CAAA,EAAEhD,EAAA,OAAO,CAAA,GAAA,CAAA;AAAA,sBAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzLtB,UAAMD,IAAQC,GA0BR0B,IAAOC,GAIPoD,IAAqB5E,EAAS;AAAA,MAClC,MAAM;AACJ,eAAOJ,EAAM;AAAA,MACf;AAAA,MACA,IAAI8C,GAAU;AACZ,QAAAnB,EAAK,qBAAqB,CAAC,GAAGmB,CAAQ,CAAC;AAAA,MACzC;AAAA,IAAA,CACD,GAEKoQ,IAASpR,EAAY,EAAE,GACvB6R,IAAe7R,EAAI,EAAK,GACxBglB,IAAsBhlB,EAAiC,oBAAI,KAAK,GAEhE,EAAE,GAAAmB,EAAA,IAAM/C,EAAA,GAER8D,IAAmB5D,EAAS,MAAM,CAAC,CAACJ,EAAM,QAAQ,GAElD,EAAE,YAAAgkC,EAAA,IAAeI,GAAA,GAEjBC,IAAQ;AAAA,MACZ,oBAAoB;AAAA;AAAA,QAElB,UAAUL,EAAWhgC,EAAiB,KAAK;AAAA,MAAA;AAAA,IAC7C,GAIIugC,IAAKC,GAAaH,GAAO,EAAE,oBAAAr/B,EAAA,GAAsB,EAAE,QAAQhF,EAAM,iBAAiB,GAGlF,EAAE,mBAAAugC,EAAA,IAAsBJ,GAAuBngC,EAAM,SAAS,GAE9D,EAAE,YAAAyvB,GAAY,cAAAD,EAAA,IAAiB6Q,GAAA;AACrC,IAAAt7B,GAAQi7B,IAAsBxQ,CAAY,GAC1CzqB,GAAQk7B,IAAoBxQ,CAAU;AAEtC,UAAMkrB,IAAY,OAAO9lC,MAAiC;AACxD,MAAKA,MACA7P,EAAmB,MAAM,SAAS6P,CAAE,MACvC7P,EAAmB,QAAQ,CAAC,GAAGA,EAAmB,OAAW6P,CAAG;AAAA,IAEpE,GAEM+lC,IAAmB94C,EAAI,EAAE,GAEzB+4C,IAAe,CAAC/3C,MAAqB;AACzC,MAAIA,EAAS,SAAS,MAAG83C,EAAiB,QAAQE,EAAgBh4C,CAAQ;AAAA,IAC5E,GAEM,EAAE,0BAAAi4C,EAAA,IAA6B7jB,GAAA,GAE/B8jB,IAAc,CAAClkB,MAAsB;AAEzC,UADAikB,EAAyBjkB,CAAM,GAC3B7sB,GAAQjF,EAAmB,KAAK,GAAG;AACrC,QAAAA,EAAmB,QAAQ,CAAC,GAAGA,EAAmB,OAAO8xB,EAAO,EAAE,GAClE5jB,EAAO,QAAQ;AACf;AAAA,MACF;AACA,MAAAlO,EAAmB,QAAQ8xB,EAAO,IAClC5jB,EAAO,QAAQ;AAAA,IACjB,GAEM+nC,IAAqB,CAACt3C,MACtBsG,GAAQjF,EAAmB,KAAK,IAC3BA,EAAmB,MAAM,SAASrB,CAAI,IACpCqB,EAAmB,QACrBA,EAAmB,UAAUrB,IAE/B,IAGHu3C,IAAqBp5C,EAAoD,IAAI,GAE7Eg5C,IAAkB,CAACzvC,MACnBA,EAAM,SAAS,GAAG,IAAUA,EAAM,MAAM,GAAG,EAAE,IAC1CA,GAGH8vC,IAAe,MAAM;AACzB,YAAM9vC,IAAQyvC,EAAgB5nC,EAAO,KAAK;AAC1C,MAAAgoC,EAAmB,OAAO,KAAK7vC,CAAK;AAAA,IACtC,GAEM+vC,IAAe,MAAM;AACzB,YAAM/vC,IAAQyvC,EAAgB5nC,EAAO,KAAK;AAC1C,MAAAgoC,EAAmB,OAAO,KAAK7vC,CAAK;AAAA,IACtC,GAEMgwC,IAAUj7C,EAAS,MACnBuT,EAAa,SACbT,EAAO,MAAM,SAAS,KAAKA,EAAO,MAAM,SAAS,MAAY,KAC7D4T,EAAoB,MAAM,SAAS,IAAU,KAC1C,CAAC,CAAC,GAAGA,EAAoB,MAAM,OAAA,CAAQ,EAAE;AAAA,MAC9C,CAACnjB,MAASA,EAAK,MAAM,kBAAkBuP,EAAO,MAAO,YAAA;AAAA,IAAY,CAEpE;;;;QAICjS,EA8GM,OA9GNE,IA8GM;AAAA,UA5GIlB,EAAA,YAAYA,EAAA,iBADpBM,EAYOqJ,IAAA;AAAA;YAVJ,OAAO3J,EAAA;AAAA,UAAA;uBAGN,MAAgC;AAAA,sBADlCS,EAOE0F,IAAA,MAAAC,GANarB,EAAA,OAAkB,CAAxB6P,YADTtU,EAOE+6C,IAAA;AAAA,gBALC,IAAAzmC;AAAA,gBACA,KAAKA;AAAA,gBACL,YAAU5U,EAAA;AAAA,gBACX,iBAAA;AAAA,gBACA,OAAM;AAAA,cAAA;;;8BAIGA,EAAA,aAAaA,EAAA,iBAD1BM,EAUOqJ,IAAA;AAAA;YARJ,OAAO3J,EAAA;AAAA,UAAA;uBAER,MAKE;AAAA,oBALFM,EAKE+6C,IAAA;AAAA,gBAJC,IAAIt2C,EAAA;AAAA,gBACJ,KAAKA,EAAA;AAAA,gBACL,YAAU/E,EAAA;AAAA,gBACX,iBAAA;AAAA,cAAA;;;oCAGJM,EAwEoCg7C,IAAA;AAAA;wBAtEzBv2C,EAAA;AAAA,0DAAAA,EAAkB,QAAAP;AAAA,YACnB,QAAQyO,EAAA;AAAA,sDAAAA,EAAM,QAAAzO;AAAA,YACd,iBAAekP,EAAA;AAAA,4DAAAA,EAAY,QAAAlP;AAAA,YAC3B,yBAAuBqiB,EAAA;AAAA,mEAAAA,EAAmB,QAAAriB;AAAA,YACjD,cAAYK,EAAAqyB,EAAA;AAAA,YACZ,GAAGryB,EAAAy/B,CAAA;AAAA,YACH,UAAUvgC,EAAA;AAAA,YACV,OAAO/D,EAAA;AAAA,YACP,uBAAqB6E,EAAAy7B,CAAA;AAAA,YACrB,UAAUtgC,EAAA;AAAA,YACV,WAAWA,EAAA;AAAA,YACZ,mBAAgB;AAAA,YACf,kBAAgB;AAAA,YAChB,WAASA,EAAA;AAAA,YACV,cAAW;AAAA,YACX,cAAW;AAAA,YACV,oBAAkB;AAAA,YACnB,mBAAgB;AAAA,YACf,gBAAe46C;AAAA,YACf,SAAK;AAAA,iBAAQM,GAAY,CAAA,OAAA,CAAA;AAAA,iBAChBC,GAAY,CAAA,GAAA,CAAA;AAAA,YAAA;AAAA;YAEX,MAAIx6C,EACb,CAuBY,EAAA,OAxBY46C,SAAqBC,QAAY;AAAA,cACzD56C,EAuBYsG,IAvBZ0L,GAuBY2oC,GAtBW;AAAA,gBACpB,2BAAD,MAAA;AAAA,gBAAA,GAAiB,CAAA,SAAA,CAAA;AAAA,cAAA;gBAWN,SACT,MAOE;AAAA,wBAPFj7C,EAOE+6C,IAAA;AAAA,oBANC,IAAIG,EAAa;AAAA,oBACjB,KAAKA,EAAa;AAAA,oBAClB,YAAUx7C,EAAA;AAAA,oBACV,OAAOw7C,EAAa;AAAA,oBACrB,aAAA;AAAA,oBACC,kBAAgBA,EAAa,KAAK,KAAK;AAAA,kBAAA;;;;gBAfpCx7C,EAAA;wBACL;AAAA,wBAED,MAGE;AAAA,oBAHFY,EAGE6R,IAAA;AAAA,sBAFC,eAAauoC,EAAmBQ,EAAa,KAAK;AAAA,sBAClD,QAAQ;AAAA,oBAAA;;;;;;YAeN,MAAI76C,EACb,CAME,EAAA,MAPqB86C,QAAY;AAAA,oBACnCn7C,EAME+6C,IAAA;AAAA,gBALC,IAAII,EAAa;AAAA,gBACjB,KAAKA,EAAa;AAAA,gBAClB,YAAUz7C,EAAA;AAAA,gBACV,OAAOy7C,EAAa;AAAA,gBACrB,iBAAA;AAAA,cAAA;;YAGO,iBACT,MAUY;AAAA,cATJL,EAAA,cADR96C,EAUY4G,IAAA;AAAA;gBARV,OAAM;AAAA,cAAA;2BAEN,MAKE;AAAA,kBALFtG,EAKE0f,GAAA;AAAA,oBAJA,MAAK;AAAA,oBACJ,MAAMq6B,EAAA;AAAA,oBACP,gBAAa;AAAA,oBACZ,WAAYQ,GAAY,CAAA,MAAA,CAAA;AAAA,kBAAA;;;;;;;aAKjCn6C,EAWM,OAAA,MAAA;AAAA,YAVJJ,EASE86C,IAAA;AAAA,uBARI;AAAA,cAAJ,KAAIT;AAAA,cACJ,SAAQ;AAAA,cACP,cAAYj7C,EAAA;AAAA,cACb,WAAQ;AAAA,cACP,iBAAe26C,EAAA;AAAA,cAChB,oBAAA;AAAA,cACC,UAAU36C,EAAA;AAAA,cACV,aAAY+6C;AAAA,YAAA;;kBATH/6C,EAAA,QAAQ;AAAA,UAAA;;QAcf,CAAAA,EAAA,YAAYA,EAAA,mBAAmBA,EAAA,gBAAgB,SAAM,KAD9DQ,EAAA,GAAAC,EAgBM,OAhBNuF,IAgBM;AAAA,UAZJhF,EAEM,OAAA,MAAA;AAAA,YADJA,EAA6E,QAA7EsF,IAA6ErF,EAA/C4D,EAAA7B,CAAA,EAAC,kCAAA,CAAA,GAAA,CAAA;AAAA,UAAA;UAEjChC,EAQM,OAAA,MAAA;AAAA,oBAPJP,EAME0F,IAAA,MAAAC,GALmBpG,EAAA,iBAAe,CAA3B27C,YADTr7C,EAMEs7C,IAAA;AAAA,cAJC,IAAID;AAAA,cACJ,KAAKA;AAAA,cACN,OAAM;AAAA,cACL,aAAU,CAAAn3C,MAAEk2C,EAAUiB,CAAQ;AAAA,YAAA;;;;;;;;;;;;;;;;;;AC1QvC,UAAM57C,IAAQC,GAoBR,EAAE,kBAAA67C,EAAA,IAAqBrkB,GAAA,GACvB4T,IAAoBC,GAAA,GAEpB30B,IAASC,GAAsD,MAAS,GACxEC,IAASD,GAAoB,EAAK,GAElCjT,IAAOvD,EAAS,MACb07C,EAAiB97C,EAAM,EAAE,CACjC,GAEK25C,IAAiBv5C,EAAS,MAAM;AACpC,UAAI,CAACJ,EAAM,QAAS;AACpB,YAAMixC,IAAQ5F,EAAkB,SAASrrC,EAAM,OAAO;AACtD,UAAI,GAACixC,KAAS,CAACt6B,EAAO,UAClBs6B,EAAM,YAAY,gBAAgB,IAAIt6B,EAAO,MAAM,IAAI;AAAG,eAAO;AAAA,IAEvE,CAAC,GAEKI,IAAe3W,EAAS,MACxBJ,EAAM,MAAM,SAAS,IAAUA,EAAM,QACrC2W,EAAO,QACFA,EAAO,MAAM,OAEf,EACR;AAED,WAAA9T;AAAA,MACEc;AAAA,MACA,OAAOb,MAAa;AAClB,QAAI+T,EAAO,SACPhT,EAAYf,CAAQ,KAAKA,EAAS,YAAY,OAClD6T,EAAO,QAAQ7T,GACf+T,EAAO,QAAQ;AAAA,MACjB;AAAA,MACA,EAAE,WAAW,GAAA;AAAA,IAAK,mBAKlBnW,EA+BM,OAAA;AAAA,MA/BA,UAAOT,EAAA,cAAc;AAAA,IAAA;MACT6E,EAAAS,EAAA,EAAOtF,EAAA,EAAE,KAAK6E,EAAAjB,CAAA,EAAY5D,EAAA,EAAE,IAC1CwB,GAEOC,+BAFP,MAEO;AAAA,0BAFY,OAEnB,EAAA;AAAA,MAAA,KAEczB,EAAA,iBAAhBS,EASM,OAAAS,IAAA;AAAA,QARD+E,EAAAhF,EAAA6V,EAAA,KAAY,IAAG,KAClB,CAAA;AAAA,SACSF,EAAA,SAAU5W,EAAA,MAAM,WAAM,UAD/BM,EAMEa,IAAA;AAAA;UAJC,MAAM;AAAA,UACN,OAAO;AAAA,UACR,eAAA;AAAA,UACA,OAAM;AAAA,QAAA;kBAGVb,EAcQC,IAAA;AAAA;QAZL,MAAMP,EAAA;AAAA,QACN,eAAa05C,EAAA;AAAA,QACb,OAAO15C,EAAA,eAAe,SAAS;AAAA,MAAA;mBAEhC,MAAkB;AAAA,UAAfiG,EAAAhF,EAAA6V,EAAA,KAAY,IAAG,KAClB,CAAA;AAAA,WACSF,EAAA,SAAU5W,EAAA,MAAM,WAAM,UAD/BM,EAMEa,IAAA;AAAA;YAJC,MAAM;AAAA,YACN,OAAO;AAAA,YACR,eAAA;AAAA,YACA,OAAM;AAAA,UAAA;;;;;;;AC3FP,SAAS26C,KAAuB;AAkBrC,SAAO;AAAA,IACL,eAlBoB,CAAC3wB,GAAqBkvB,OACnC;AAAA,MACL,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,WAAWlvB;AAAA,MACX,OAAO;AAAA,QACL,UAAUkvB,KAAY;AAAA,MAAA;AAAA,MAExB,WAAW9nC,GAAA;AAAA,MACX,YAAYA,GAAA;AAAA,MACZ,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,eAAemW;AAAAA,MACf,SAASK;AAAA,IAAA;AAAA,EAKX;AAEJ;;;;;;;;;;;;;;;;;ACFA,UAAMhpB,IAAQC,GAwBR0B,IAAOC,GAIPoD,IAAqB5E,EAAS;AAAA,MAClC,MAAM;AACJ,eAAOJ,EAAM;AAAA,MACf;AAAA,MACA,IAAI8C,GAAU;AACZ,QAAAnB,EAAK,qBAAqB,CAAC,GAAGmB,CAAQ,CAAC;AAAA,MACzC;AAAA,IAAA,CACD,GAEKoQ,IAASpR,EAAY,EAAE,GACvB6R,IAAe7R,EAAI,EAAK,GACxBglB,IAAsBhlB,EAAiC,oBAAI,KAAK,GAEhEkC,IAAmB5D,EAAS,MAAM,CAAC,CAACJ,EAAM,QAAQ,GAElD,EAAE,YAAAgkC,EAAA,IAAeI,GAAA,GAEjBC,IAAQ;AAAA,MACZ,oBAAoB;AAAA,QAClB,UAAUL,EAAWhgC,CAAgB;AAAA,MAAA;AAAA,IACvC,GAIIugC,IAAKC,GAAaH,GAAO,EAAE,oBAAAr/B,EAAA,GAAsB,EAAE,QAAQhF,EAAM,iBAAiB,GAElF,EAAE,WAAA6oB,EAAA,IAAc4J,GAAA,GAChB,EAAE,uBAAAzG,EAAA,IAA0BrB,GAAA,GAE5ByU,IAAkBpT,EAAsBhsB,EAAM,SAAS;AAC7D,QAAI6D,EAAYu7B,CAAe;AAC7B,YAAM,IAAI,MAAM,sEAAsE;AAIxF,UAAM,EAAE,mBAAAmB,EAAA,IAAsBpB,GAAwBn/B,EAAM,SAAS,GAE/D,EAAE,YAAAyvB,GAAY,cAAAD,EAAA,IAAiBkQ,GAAA;AACrC,IAAA36B,GAAQi7B,IAAsBxQ,CAAY,GAC1CzqB,GAAQk7B,IAAoBxQ,CAAU;AAEtC,UAAMusB,IAAoBl6C,EAAI,EAAE,GAE1B+4C,IAAe,CAAC/3C,MAAqB;AACzC,MAAIA,EAAS,SAAS,MAAGk5C,EAAkB,QAAQlB,EAAgBh4C,CAAQ;AAAA,IAC7E,GAEM,EAAE,2BAAAm5C,EAAA,IAA8BxkB,GAAA,GAEhCujB,IAAc,CAACxjB,MAAwB;AAE3C,UADAykB,EAA0BzkB,CAAO,GAC7BvtB,GAAQjF,EAAmB,KAAK,GAAG;AACrC,QAAAA,EAAmB,QAAQ,CAAC,GAAGA,EAAmB,OAAOwyB,EAAQ,EAAE,GACnEtkB,EAAO,QAAQ;AACf;AAAA,MACF;AACA,MAAAlO,EAAmB,QAAQwyB,EAAQ,IACnCtkB,EAAO,QAAQ;AAAA,IACjB,GAEM+nC,IAAqB,CAACt3C,MACtBsG,GAAQjF,EAAmB,KAAK,IAC3BA,EAAmB,MAAM,SAASrB,CAAI,IACpCqB,EAAmB,QACrBA,EAAmB,UAAUrB,IAE/B,IAGH,EAAE,mBAAA8E,EAAA,IAAsBC,GAAA,GACxB,EAAE,eAAAsuC,EAAA,IAAkB+E,GAAA,GAEpBG,IAAwB,OAAOpQ,MAAiB;AACpD,YAAMqQ,IAAgBnF,EAAch3C,EAAM,WAAW,EAAI;AAEzD,UADAm8C,EAAc,OAAOrB,EAAgBhP,CAAI,GACrC,EAAAqQ,EAAc,KAAK,SAAS;AAChC,YAAI;AACF,gBAAMC,IAAa,MAAM7kB,GAAc1O,GAAWszB,CAAa;AAC/D,UAAAnB,EAAYoB,CAAU;AAAA,QACxB,SAASvzC,GAAO;AACd,UAAAJ,EAAkBI,CAAK;AAAA,QACzB;AAAA,IACF,GAEMiyC,IAAkB,CAACzvC,MACnBA,EAAM,SAAS,GAAG,IAAUA,EAAM,MAAM,GAAG,EAAE,IAC1CA,GAGH8vC,IAAe,MAAM;AACzB,YAAM9vC,IAAQyvC,EAAgB5nC,EAAO,KAAK;AAC1C,MAAAgpC,EAAsB7wC,CAAK;AAAA,IAC7B,GAEM+vC,IAAe,MAAM;AACzB,YAAM/vC,IAAQyvC,EAAgB5nC,EAAO,KAAK;AAC1C,MAAAgpC,EAAsB7wC,CAAK;AAAA,IAC7B,GAEMgwC,IAAUj7C,EAAS,MACnBuT,EAAa,SACbT,EAAO,MAAM,SAAS,KAAKA,EAAO,MAAM,SAAS,MAAY,KAC7D4T,EAAoB,MAAM,SAAS,IAAU,KAC1C,CAAC,CAAC,GAAGA,EAAoB,MAAM,OAAA,CAAQ,EAAE;AAAA,MAC9C,CAACnjB,MAASA,EAAK,MAAM,kBAAkBuP,EAAO,MAAO,YAAA;AAAA,IAAY,CAEpE;;;AAIC,aAAAzS,EAAA,GAAAC,EAiGM,OAjGNS,IAiGM;AAAA,QA/FIlB,EAAA,YAAYA,EAAA,iBADpBM,EAYOqJ,IAAA;AAAA;UAVJ,OAAO3J,EAAA;AAAA,QAAA;qBAGN,MAAgC;AAAA,oBADlCS,EAOE0F,IAAA,MAAAC,GANarB,EAAA,OAAkB,CAAxB6P,YADTtU,EAOE87C,IAAA;AAAA,cALC,IAAAxnC;AAAA,cACA,KAAKA;AAAA,cACL,YAAU5U,EAAA;AAAA,cACX,iBAAA;AAAA,cACA,OAAM;AAAA,YAAA;;;4BAIGA,EAAA,aAAaA,EAAA,iBAD1BM,EAUOqJ,IAAA;AAAA;UARJ,OAAO3J,EAAA;AAAA,QAAA;qBAER,MAKE;AAAA,kBALFM,EAKE87C,IAAA;AAAA,cAJC,IAAIr3C,EAAA;AAAA,cACJ,KAAKA,EAAA;AAAA,cACL,YAAU/E,EAAA;AAAA,cACX,iBAAA;AAAA,YAAA;;;kCAGJM,EAuEoCg7C,IAAA;AAAA;sBArEzBv2C,EAAA;AAAA,wDAAAA,EAAkB,QAAAP;AAAA,UACnB,QAAQyO,EAAA;AAAA,oDAAAA,EAAM,QAAAzO;AAAA,UACd,iBAAekP,EAAA;AAAA,0DAAAA,EAAY,QAAAlP;AAAA,UAC3B,yBAAuBqiB,EAAA;AAAA,iEAAAA,EAAmB,QAAAriB;AAAA,UACjD,cAAYK,EAAA4yB,EAAA;AAAA,UACZ,GAAG5yB,EAAAy/B,CAAA;AAAA,UACH,UAAUvgC,EAAA;AAAA,UACV,OAAO/D,EAAA;AAAA,UACP,uBAAqB6E,EAAAy7B,CAAA;AAAA,UACrB,UAAUtgC,EAAA;AAAA,UACV,WAAWA,EAAA;AAAA,UACZ,mBAAgB;AAAA,UACf,kBAAgB;AAAA,UACjB,cAAW;AAAA,UACX,cAAW;AAAA,UACV,WAASA,EAAA;AAAA,UACT,oBAAkB;AAAA,UACnB,mBAAgB;AAAA,UACf,gBAAe46C;AAAA,UACf,SAAK;AAAA,eAAQM,GAAY,CAAA,OAAA,CAAA;AAAA,eAChBC,GAAY,CAAA,GAAA,CAAA;AAAA,UAAA;AAAA;UAEX,MAAIx6C,EACb,CAsBY,EAAA,OAvBY46C,SAAqBC,QAAY;AAAA,YACzD56C,EAsBYsG,IAtBZ0L,GAsBY2oC,GArBW;AAAA,cACpB,2BAAD,MAAA;AAAA,cAAA,GAAiB,CAAA,SAAA,CAAA;AAAA,YAAA;cAWN,SACT,MAME;AAAA,sBANFj7C,EAME87C,IAAA;AAAA,kBALC,IAAIZ,EAAa;AAAA,kBACjB,KAAKA,EAAa;AAAA,kBAClB,YAAUx7C,EAAA;AAAA,kBACV,OAAOw7C,EAAa;AAAA,kBACrB,aAAA;AAAA,gBAAA;;;;cAdIx7C,EAAA;sBACL;AAAA,sBAED,MAGE;AAAA,kBAHFY,EAGE6R,IAAA;AAAA,oBAFC,eAAauoC,EAAmBQ,EAAa,KAAK;AAAA,oBAClD,QAAQ;AAAA,kBAAA;;;;;;UAcN,MAAI76C,EACb,CAME,EAAA,MAPqB86C,QAAY;AAAA,kBACnCn7C,EAME87C,IAAA;AAAA,cALC,IAAIX,EAAa;AAAA,cACjB,KAAKA,EAAa;AAAA,cAClB,YAAUz7C,EAAA;AAAA,cACV,OAAOy7C,EAAa;AAAA,cACrB,iBAAA;AAAA,YAAA;;UAGO,iBACT,MAUY;AAAA,YATJL,EAAA,cADR96C,EAUY4G,IAAA;AAAA;cARV,OAAM;AAAA,YAAA;yBAEN,MAKE;AAAA,gBALFtG,EAKE0f,GAAA;AAAA,kBAJA,MAAK;AAAA,kBACJ,MAAMy7B,EAAA;AAAA,kBACP,gBAAa;AAAA,kBACZ,WAAYZ,GAAY,CAAA,MAAA,CAAA;AAAA,gBAAA;;;;;;;;;;qECxPxBkB,KAA+B,CAACvzB,GAA6BD,MAAyB;AACjG,QAAM,EAAE,uBAAAkD,EAAA,IAA0BrB,GAAA,GAE5ByU,IAAkBpT,EAAsBlD,CAAS;AAEvD,MAAIjlB,EAAYu7B,CAAe;AAC7B,UAAM,IAAI,MAAM,+DAA+D;AAGjF,QAAMmd,IAAiBn8C,EAAS,MACvBg/B,EAAgBrW,CAAS,EAAE,SAAS,OAC5C,GAEKyzB,IAAkBp8C,EAAS,MACxBg/B,EAAgBrW,CAAS,EAAE,SAAS,QAC5C;AAED,SAAO;AAAA,IACL,gBAAAwzB;AAAA,IACA,iBAAAC;AAAA,EAAA;AAEJ,GCrBaC,KAA8B,CAAC1zB,GAA6BD,MAAyB;AAChG,QAAM,EAAE,uBAAAkD,EAAA,IAA0BrB,GAAA,GAC5ByU,IAAkBpT,EAAsBlD,CAAS;AAEvD,MAAIjlB,EAAYu7B,CAAe;AAC7B,UAAM,IAAI,MAAM,8DAA8D;AAGhF,QAAMsd,IAAgBt8C,EAAS,MACtBg/B,EAAgBrW,CAAS,EAAE,QAAQ,OAC3C,GAEK4zB,IAAiBv8C,EAAS,MACvBg/B,EAAgBrW,CAAS,EAAE,QAAQ,QAC3C;AAED,SAAO;AAAA,IACL,eAAA2zB;AAAA,IACA,gBAAAC;AAAA,EAAA;AAEJ;;;;;;;;;;;;;;;ACfA,UAAM38C,IAAQC,GAcRoI,IAASC,GAAA,GACTqO,IAASC,GAAwC,MAAS,GAC1DC,IAASD,GAAoB,EAAK,GAElCjT,IAAOvD,EAAS,MAAM;AAC1B,UAAIJ,EAAM;AACR,eAAOA,EAAM,aAAa,IAAIA,EAAM,EAAE;AAAA,IAG1C,CAAC,GAEKK,IAAOD,EAAS,MAChBuW,EAAO,QACFA,EAAO,MAAM,OAAO,SAAS,SAASA,EAAO,MAAM,OAAO,WAAWA,EAAO,MAAM,MAAM,MAAM,GAAG,EAAE,CAAC,IAEtG,EACR,GAEKimC,IAAax8C,EAAS,MAAM;AAChC,UAAIJ,EAAM;AACR,eAAOyW,GAAc,KAAK,KAAK;AAEjC,UAAIzW,EAAM;AACR,eAAOyW,GAAc,KAAK,KAAK;AAAA,IAGnC,CAAC,GAEKxJ,IAAU,MAAM;AACpB,UAAIjN,EAAM,uBAAuBA,EAAM,IAAI;AACzC,cAAMupC,IAAM9T,GAAqBz1B,EAAM,qBAAqB,EAAE,IAAIA,EAAM,IAAI;AAC5E,eAAO,KAAKupC,GAAK,QAAQ;AACzB;AAAA,MACF;AACA,MAAKvpC,EAAM,aACXqI,EAAO,KAAK,EAAE,MAAMrI,EAAM,WAAW,QAAQ,EAAE,IAAIA,EAAM,GAAA,EAAG,CAAG;AAAA,IACjE;AAEA,WAAA6C;AAAA,MACEc;AAAA,MACA,OAAOb,MAAa;AAClB,QAAI+T,EAAO,SACPhT,EAAYf,CAAQ,KAAKA,EAAS,YAAY,OAClD6T,EAAO,QAAQ7T,GACf+T,EAAO,QAAQ;AAAA,MACjB;AAAA,MACA,EAAE,WAAW,GAAA;AAAA,IAAK,aAMV/R,EAAAjB,CAAA,EAAY5D,EAAA,WAAW,KAD/BQ,EAAA,GAAAC,EAGE,OAHFS,EAGE,MACFV,EAAA,GAAAC,EA4BM,OA5BNuF,IA4BM;AAAA,MAxBQnB,EAAAS,EAAA,EAAOtF,EAAA,EAAE,KAAK6E,EAAAjB,CAAA,EAAY5D,EAAA,EAAE,KAAxCQ,KAAAC,EAAmD,YAAR,GAAC,WAC5CH,EAsBQC,IAAA;AAAA;QApBN,OAAKqE,GAAA,CAAC,QACE+3C,EAAA,QAAU,KAAA,eAAA,CAAA;AAAA,QAClB,MAAK;AAAA,QACJ,eAAaA,EAAA;AAAA,QACb,WAAY3vC,GAAO,CAAA,MAAA,CAAA;AAAA,MAAA;mBAEpB,MAKE;AAAA,UAJM4J,EAAA,cADRtW,EAKEmmB,IAAA;AAAA;YAHC,MAAM/P,EAAA,SAAU;AAAA,YACjB,mBAAgB;AAAA,YACf,MAAM;AAAA,UAAA;YACP,MACFzV,EAAGb,EAAA,KAAI,IAAG,KACV,CAAA;AAAA,UACSwW,EAAA,0BADTtW,EAMEa,IAAA;AAAA;YAJC,MAAM;AAAA,YACN,OAAO;AAAA,YACR,eAAA;AAAA,YACA,OAAM;AAAA,UAAA;;;;;;;;;;;;;ACjFd,UAAMpB,IAAQC,GAUR,EAAE,EAAA,IAAMC,EAAA,GAER28C,IAAS/6C,EAAI,CAAC,YAAY,MAAM,CAAC,GAEjCq3B,IAAmBrG,GAAA,GACnB,EAAE,OAAAtE,GAAO,iBAAAuE,GAAiB,oBAAAC,GAAoB,mBAAAvE,EAAA,IAAsByK,GAAYC,CAAgB,GAEhGpQ,IAAY3oB,EAAS,MAClBouB,EAAM,OAAO,WAAW,aAAahG,EAC7C,GAEKs0B,IAAc18C,EAAS,MACpB2oB,EAAU,UAAUR,GAAa,KACzC,GAEKw0B,IAAgB38C,EAA2B,MACxCouB,EAAM,SAASA,EAAM,MAAM,WAAYA,EAAM,MAAM,WAAyB,IACpF,GAEKwuB,IAAsB,MAAM;AAChC,MAAAhqB,EAAmB,QAAQ;AAAA,IAC7B,GAGM,EAAE,iBAAAwpB,GAAiB,gBAAAD,MAAmBD,GAA6BvzB,EAAU,OAAO/oB,EAAM,SAAS,GAEnG,EAAE,gBAAA28C,GAAgB,eAAAD,MAAkBD,GAA4B1zB,EAAU,OAAO/oB,EAAM,SAAS,GAEhG,EAAE,aAAAi9C,EAAA,IAAgB9kB,GAAA;qBAKdrzB,EAAA0pB,CAAA,UADRjuB,EAgLmB28C,IAAA;AAAA;kBA9KRL,EAAA;AAAA,oDAAAA,EAAM,QAAAp4C;AAAA,MACf,UAAA;AAAA,MACA,OAAM;AAAA,IAAA;iBAEN,MAuFkB;AAAA,QAvFlB5D,EAuFkBs8C,IAAA;AAAA,UAtFhB,WAAU;AAAA,UACT,OAAOr4C,EAAA,CAAA,EAAC,4CAAA;AAAA,UACT,OAAM;AAAA,QAAA;qBAEN,MAiFsB;AAAA,YAjFtBjE,EAiFsBu8C,IAAA,MAAA;AAAA,yBAhFpB,MA+E0B;AAAA,gBA9ElBt4C,EAAA0pB,CAAA,UADRjuB,EA+E0B88C,IAAA;AAAA;8BA7Efv4C,EAAA0pB,CAAA,EAAM,SAAS;AAAA,gEAAf1pB,EAAA0pB,CAAA,EAAM,SAAS,aAAU/pB;AAAA,kBACjC,cAAYxE,EAAA;AAAA,kBACZ,cAAY8oB,EAAA;AAAA,kBACZ,UAAU9oB,EAAA;AAAA,kBACV,aAAY+8C;AAAA,gBAAA;kBAEF,kBACT,MAwBO;AAAA,oBAvBCl4C,EAAAy3C,CAAA,UADRh8C,EAwBOgN,IAAA;AAAA;sBAtBL,OAAA;AAAA,sBACA,OAAM;AAAA,oBAAA;iCAEN,MAkBO;AAAA,wBAlBP1M,EAkBO2M,IAAA,MAAA;AAAA,qCAjBL,MAgBqB;AAAA,4BAhBrB3M,EAgBqB25C,IAAA;AAAA,8BAfnB,SAAQ;AAAA,8BACR,QAAO;AAAA,4BAAA;yCAEP,MAWE;AAAA,gCAXF35C,EAWEy8C,IAAA;AAAA,kCAVS,YAAAx4C,EAAA0pB,CAAA,EAAM;AAAA;oCAANjqB,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAE,MAAAK,EAAA0pB,CAAA,EAAM,WAAQ/pB;AAAA,oCASFu4C;AAAA,kCAAA;AAAA,kCARpB,cAAY/8C,EAAA;AAAA,kCACZ,OAAO6E,EAAA,CAAA,EAAC,sCAAA;AAAA,kCACT,WAAQ;AAAA,kCACR,WAAA;AAAA,kCACA,UAAA;AAAA,kCACC,UAAU7E,EAAA;AAAA,kCACV,UAAU6E,EAAA03C,CAAA;AAAA,kCACV,oBAAkB13C,EAAA4gC,EAAA;AAAA,gCAAA;;;;;;;;;;oBAOnB5gC,EAAA43C,CAAA,UADRn8C,EAyBOgN,IAAA;AAAA;sBAvBL,OAAA;AAAA,sBACA,OAAM;AAAA,oBAAA;iCAEN,MAmBO;AAAA,wBAnBP1M,EAmBO2M,IAAA,MAAA;AAAA,qCAlBL,MAiBqB;AAAA,4BAjBrB3M,EAiBqB25C,IAAA;AAAA,8BAhBnB,SAAQ;AAAA,8BACR,QAAO;AAAA,4BAAA;yCAEP,MAYE;AAAA,gCAZF35C,EAYE08C,IAAA;AAAA,kCAXS,YAAAz4C,EAAA0pB,CAAA,EAAM;AAAA;oCAANjqB,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAE,MAAAK,EAAA0pB,CAAA,EAAM,UAAO/pB;AAAA,oCAUDu4C;AAAA,kCAAA;AAAA,kCATpB,cAAY/8C,EAAA;AAAA,kCACZ,OAAO6E,EAAA,CAAA,EAAC,qCAAA;AAAA,kCACR,oBAAkBA,EAAAiuB,CAAA;AAAA,kCACnB,WAAQ;AAAA,kCACR,WAAA;AAAA,kCACA,UAAA;AAAA,kCACC,UAAU9yB,EAAA;AAAA,kCACV,UAAU6E,EAAA63C,CAAA;AAAA,kCACV,oBAAkB73C,EAAA4gC,EAAA;AAAA,gCAAA;;;;;;;;;;oBAM3B7kC,EAiBO0M,IAAA;AAAA,sBAhBL,OAAA;AAAA,sBACA,OAAM;AAAA,oBAAA;iCAEN,MAYO;AAAA,wBAZP1M,EAYO2M,IAAA,MAAA;AAAA,qCAXL,MAKO;AAAA,4BAJCvN,EAAA,iBADRM,EAKOqJ,IAAA;AAAA;8BAHJ,OAAO9E,EAAA,CAAA,EAAC,+CAAA;AAAA,4BAAA;yCAET,MAA4C;AAAA,gCAA5CjE,EAA4CwlC,IAAA,EAA5B,OAAOvhC,EAAA2pB,CAAA,EAAA,GAAiB,MAAA,GAAA,CAAA,OAAA,CAAA;AAAA,8BAAA;;sDAE1CluB,EAIEmV,IAAA;AAAA;0CAFS5Q,EAAA2pB,CAAA;AAAA,oFAAAA,EAAiB,QAAAhqB,IAAA;AAAA,8BACzB,OAAOK,EAAA,CAAA,EAAC,+CAAA;AAAA,4BAAA;;;;;;;;;;;;;;;;QAQvBjE,EAiFkBs8C,IAAA;AAAA,UAhFhB,WAAU;AAAA,UACT,OAAOr4C,EAAA,CAAA,EAAC,wCAAA;AAAA,UACT,OAAM;AAAA,QAAA;qBAEN,MA2EsB;AAAA,YA3EtBjE,EA2EsBu8C,IAAA;AAAA,cA1EpB,OAAM;AAAA,cACN,OAAA,EAAA,iBAAA,SAAA;AAAA,YAAA;yBAGA,MAOO;AAAA,gBAPPv8C,EAOO0M,IAAA,MAAA;AAAA,6BANL,MAEO;AAAA,oBAFP1M,EAEO2M,IAAA,EAFD,MAAK,OAAG;AAAA,iCACZ,MAAqD;AAAA,4BAAlD1I,EAAA,CAAA,EAAC,4CAAA,CAAA,GAAA,CAAA;AAAA,sBAAA;;;oBAENjE,EAEO2M,IAAA,EAFD,MAAK,OAAG;AAAA,iCACZ,MAA+B;AAAA,wBAA/B3M,EAA+B28C,IAAA;AAAA,0BAAnB,OAAO14C,EAAA0pB,CAAA,EAAM;AAAA,wBAAA;;;;;;;gBAG7B3tB,EAOO0M,IAAA,MAAA;AAAA,6BANL,MAEO;AAAA,oBAFP1M,EAEO2M,IAAA,EAFD,MAAK,OAAG;AAAA,iCACZ,MAAuD;AAAA,4BAApD1I,EAAA,CAAA,EAAC,8CAAA,CAAA,GAAA,CAAA;AAAA,sBAAA;;;oBAENjE,EAEO2M,IAAA,EAFD,MAAK,OAAG;AAAA,iCACZ,MAAgC;AAAA,4BAA7B1I,EAAA0pB,CAAA,EAAM,WAAW,SAAS,GAAA,CAAA;AAAA,sBAAA;;;;;;gBAGjC3tB,EAWO0M,IAAA,MAAA;AAAA,6BAVL,MAEO;AAAA,oBAFP1M,EAEO2M,IAAA,EAFD,MAAK,OAAG;AAAA,iCACZ,MAAwC;AAAA,4BAArC1I,EAAA,CAAA,EAAC,+BAAA,CAAA,GAAA,CAAA;AAAA,sBAAA;;;oBAENjE,EAMO2M,IAAA,EAND,MAAK,OAAG;AAAA,iCACZ,MAAqC;AAAA,4BAAlC1I,EAAA4E,EAAA,EAAe5E,EAAA0pB,CAAA,EAAM,SAAS,CAAA,GAAA,CAAA;AAAA,wCAAIvtB,EAAI,MAAA,MAAA,MAAA,EAAA;AAAA,wBACzCJ,EAGE48C,IAAA;AAAA,0BAFC,IAAI34C,EAAA0pB,CAAA,EAAM;AAAA,0BACV,gBAAc1pB,EAAAm4C,CAAA;AAAA,wBAAA;;;;;;;gBAIrBp8C,EAWO0M,IAAA,MAAA;AAAA,6BAVL,MAEO;AAAA,oBAFP1M,EAEO2M,IAAA,EAFD,MAAK,OAAG;AAAA,iCACZ,MAAyC;AAAA,4BAAtC1I,EAAA,CAAA,EAAC,gCAAA,CAAA,GAAA,CAAA;AAAA,sBAAA;;;oBAENjE,EAMO2M,IAAA,EAND,MAAK,OAAG;AAAA,iCACZ,MAAsC;AAAA,4BAAnC1I,EAAA4E,EAAA,EAAe5E,EAAA0pB,CAAA,EAAM,UAAU,CAAA,GAAA,CAAA;AAAA,wCAAIvtB,EAAI,MAAA,MAAA,MAAA,EAAA;AAAA,wBAC1CJ,EAGE48C,IAAA;AAAA,0BAFC,IAAI34C,EAAA0pB,CAAA,EAAM;AAAA,0BACV,gBAAc1pB,EAAAm4C,CAAA;AAAA,wBAAA;;;;;;;gBAIVF,EAAA,cAAXr8C,EA6BM,OAAAS,IAAA;AAAA,kBA5BJN,EAOO0M,IAAA,MAAA;AAAA,+BANL,MAEO;AAAA,sBAFP1M,EAEO2M,IAAA,EAFD,MAAK,OAAG;AAAA,mCACZ,MAA6D;AAAA,8BAA1D1I,EAAA,CAAA,EAAC,oDAAA,CAAA,GAAA,CAAA;AAAA,wBAAA;;;sBAENjE,EAEO2M,IAAA,EAFD,MAAK,OAAG;AAAA,mCACZ,MAAuC;AAAA,0BAAvC3M,EAAuC28C,IAAA;AAAA,4BAA3B,OAAOT,EAAA,MAAc;AAAA,0BAAA;;;;;;;kBAGrCl8C,EAOO0M,IAAA,MAAA;AAAA,+BANL,MAEO;AAAA,sBAFP1M,EAEO2M,IAAA,EAFD,MAAK,OAAG;AAAA,mCACZ,MAA2D;AAAA,8BAAxD1I,EAAA,CAAA,EAAC,kDAAA,CAAA,GAAA,CAAA;AAAA,wBAAA;;;sBAENjE,EAEO2M,IAAA,EAFD,MAAK,OAAG;AAAA,mCACZ,MAA2C;AAAA,8BAAxCuvC,EAAA,MAAc,eAAe,QAAQ,GAAA,CAAA;AAAA,wBAAA;;;;;;kBAG5Cl8C,EAOO0M,IAAA,MAAA;AAAA,+BANL,MAEO;AAAA,sBAFP1M,EAEO2M,IAAA,EAFD,MAAK,OAAG;AAAA,mCACZ,MAAuD;AAAA,8BAApD1I,EAAA,CAAA,EAAC,8CAAA,CAAA,GAAA,CAAA;AAAA,wBAAA;;;sBAENjE,EAEO2M,IAAA,EAFD,MAAK,OAAG;AAAA,mCACZ,MAAoD;AAAA,0BAAjDtH,EAAAhF,EAAA4D,EAAAs4B,EAAA,EAAY2f,EAAA,MAAc,eAAe,IAAI,CAAA,GAAA,CAAA;AAAA,wBAAA;;;;;;kBAI5CD,EAAA,SAAeh4C,EAAAm+B,EAAA,EAAqB8Z,EAAA,KAAa,UADzDx8C,EAGEm9C,IAAA;AAAA;oBADC,MAAMX,EAAA;AAAA,kBAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChNnB,UAAM/8C,IAAQC,GAuBR0B,IAAOC,GAIPoG,IAAaC,GAAoBhI,GAAA,YAAoC,GACrEu+B,IAAYv2B,GAAmBhI,GAAC,MAAuC,GACvE09C,IAAQ11C,GAAoBhI,GAAC,OAA4C,GAEzEoV,IAAUvT,EAAI,EAAK,GACnBowB,IAAgBpwB,EAAI,EAAK,GAEzB,EAAE,GAAAmB,EAAA,IAAM/C,EAAA,GAER;AAAA,MACJ,WAAA2oB;AAAA,MACA,eAAAsJ;AAAA,MACA,QAAArC;AAAA,MACA,YAAA1kB;AAAA,MACA,eAAAouB;AAAA,MACA,iBAAAvH;AAAA,MACA,kBAAA8H;AAAA,MACA,eAAAjB;AAAA,MACA,yBAAAO;AAAA,MACA,OAAAnqB;AAAA;AAAA,IAAA,IAEE6pB,GAAsB,WAAW/4B,EAAM,sBAAsB,GAE3D,EAAE,sCAAAsrB,GAAsC,qCAAAW,MAAwCtB,GAAkB9B,CAAS,GAE3G,EAAE,uCAAAqD,EAAA,IAA0CvB,GAAkB9B,CAAS,GACvEsQ,IAAmBrG,GAAA,GACnB,EAAE,OAAAtE,EAAA,IAAU0K,GAAYC,CAAgB,GACxCF,IAAmBrJ,GAAA,GACnB,EAAE,mBAAAG,EAAA,IAAsBmJ,GAAYD,CAAgB,GAEpD2kB,IAAgBhnC,GAAkD,EAAE,GAEpE,EAAE,iBAAA6hB,GAAiB,aAAAL,GAAa,cAAAC,EAAA,IAAiBC,GAAA,GACjD,EAAE,YAAApa,EAAA,IAAexV,GAAA,GAEjBP,IAAS,MAAM;AACnB,UAAI,CAACw1C,EAAM,MAAO;AAClB,UAAIE,KAAoB54C,GAAU24C,EAAc,KAAK;AAIrD,UAHK59C,EAAM,yBACT69C,KAAoBzb,GAAsCwb,EAAc,KAAK,IAE3EC,GAAkB,WAAW,GAAG;AAClC,QAAA3/B,EAAW,2CAA2C;AACtD;AAAA,MACF;AAEA,MAAAhP,EAAA,GACA6qB;AAAA,QACE8jB;AAAA,QACA79C,EAAM;AAAA,QACNA,EAAM;AAAA,QACAA,EAAM,aAAZ,KAAwBA,EAAM,aAAaA,EAAM;AAAA,QACjDA,EAAM;AAAA,QACNA,EAAM;AAAA,MAAA,GAERy4B,EAAA,GACAzwB,EAAW,QAAQ;AAAA,IACrB;AAEA,IAAAnF;AAAA,MACEmF;AAAA,MACA,OAAOlF,IAAU6C,OAAa;AAC5B,QAAI7C,OAAa6C,MAAY,CAAC7C,MAC9BqF,EAAA;AAAA,MACF;AAAA,MACA,EAAE,WAAW,GAAA;AAAA,IAAK;AAGpB,UAAMC,IAAU,MAAM;AACpB,MAAAJ,EAAW,QAAQ,IACnBkH,EAAA;AAAA,IACF,GAEM4uC,IAAqB,MAAM;AAC/B,UAAI5rB,EAAc,SAASlyB,EAAM;AAC/B,eAAOA,EAAM;AAAA,IAGjB,GAEM2I,IAAY,MAAM;AACtB,MAAAhH,EAAK,aAAaswB,EAAgBjyB,EAAM,YAAY89C,EAAA,CAAoB,CAAC,GACzE11C,EAAA;AAAA,IACF,GAEM21C,IAAsB,CAACC,OAA4B;AACvD,MAAIA,MAAkB5yC,EAAW,MAAM,gBAAgB,MACrDouB,EAAA;AAAA,IAEJ,GAEM,EAAE,UAAA6E,GAAA,IAAaC,GAAA,GAEf2f,KAAoB79C,EAAS,MAE/BJ,EAAM,cAAcuoB,GAAa,SACjCwH,EAAkB,QAAQ,KAC1B,CAAClsB,EAAY7D,EAAM,aAAa,KAChC+vB,EAAkB,UAAU/vB,EAAM,aAErC,GAEKiiC,KAAoB7hC,EAAS,MAAM;AACvC,cAAQi+B,GAAS,OAAA;AAAA,QACf,KAAKF,GAAoB;AACvB,iBAAO+f;AAAAA,QACT;AAAA,QACA,KAAK/f,GAAoB;AAAA,QACzB,KAAKA,GAAoB;AACvB,iBAAOggB;AAAAA,MAAA;AAAA,IAEb,CAAC,GAEKC,KAAiBh+C,EAAS,MACvB+xB,EAAc,QAAQnyB,EAAM,YAAYmyB,EAAc,QAAQnyB,EAAM,QAC5E,GAEKq+C,KAAQj+C,EAAS,MAAM;AAC3B,UAAIw9C,EAAc,MAAM,WAAW,KAC/B7tB,EAAkB,QAAQ,GAAG;AAC/B,cAAMloB,KAAQ+1C,EAAc,MAAM,KAAK,CAACv0C,OAAWA,GAAO,YAAY0mB,EAAkB,KAAK;AAC7F,YAAIloB,WAAcA,GAAM;AAAA,MAC1B;AAAA,IAEF,CAAC,GAEKy2C,KAAsBl+C,EAAS,MAC5Bm+C,GAAwB,SAASzlB,EAAc,KACvD,GAEK,EAAE,mBAAArwB,GAAA,IAAsBC,GAAA,GACxB61C,KAA0Bz8C,EAAI,EAAI,GAElC08C,KAAe,CAACjoC,OAAoC;AACxD,MAAAnL,EAAW,MAAM,SAAS,MACtBmL,GAAO,WACTnL,EAAW,MAAM,SAAS,EAAE,KAAKmL,GAAO,OAAO,KAAK,OAAOA,GAAO,OAAO,MAAA,IAE3E8iB,EAAA;AAAA,IACF;AAEA,WAAAx2B;AAAA,MACEw7C;AAAA,MACA,OAAOv7C,OAAa;AAClB,YAAIe,EAAYf,EAAQ,EAAG;AAC3B,QAAAy7C,GAAwB,QAAQ;AAChC,cAAMlwB,KAAgCpC,EAAoCnpB,EAAQ;AAClF,YAAIe,EAAYwqB,EAA6B;AAC3C,cAAI;AACF,kBAAM/C,EAAqCxoB,EAAQ,GACnDy7C,GAAwB,QAAQ;AAAA,UAClC,SAAS1mC,IAAG;AACV,YAAApP,GAAkBoP,EAAC;AAAA,UACrB;AAAA;AAEA,UAAA0mC,GAAwB,QAAQ;AAAA,MAEpC;AAAA,MACA,EAAE,WAAW,GAAA;AAAA,IAAK,GAGpBj1C,GAAU,YAAY;AACpB,MAAAq0C,EAAM,QAAQ,IACdtoC,EAAQ,QAAQ,IAChBuoC,EAAc,QAAQ,MAAM1xB,EAAsClsB,EAAM,cAAc,GACtFqV,EAAQ,QAAQ,IAChBsoC,EAAM,QAAQ;AAAA,IAChB,CAAC,GAED1lC,GAAY,MAAM;AAChB,MAAA2lC,EAAc,QAAQ,CAAA;AAAA,IACxB,CAAC,GAEDv5C,EAAa;AAAA,MACX,MAAM8D;AAAA,IAAA,CACP;;aAKSkN,EAAA,SADR5U,EAAA,GAAAC,EAKM,OALNS,IAKM;AAAA,QADJN,EAAmCO,IAAA,EAAhB,eAAA,IAAa;AAAA,MAAA,MAEbw8C,EAAA,MAAc,SAAM,UAAzCl9C,EA8GW0F,IAAA,EAAA,KAAA,KAAA;AAAA,QA7GT3E,GAGEC,GAAA,QAAA,aAAA;AAAA,UADC,OAAK,EAAA,SAAakW,EAAa,MAAOzP,KAAM,CAAA,MAAA,CAAA,EAAA;AAAA,QAAA;QAE/CtH,EAwGUkI,IAAA;AAAA,sBAvGCf,EAAA;AAAA,2DAAAA,EAAU,QAAAvD;AAAA,UACnB,YAAA;AAAA,UACA,OAAM;AAAA,QAAA;qBAEN,MAkGQ;AAAA,YAjGAuD,EAAA,cADRzH,EAkGQgB,IAAA;AAAA;cAhGN,OAAM;AAAA,YAAA;yBAEN,MAOiB;AAAA,gBAPjBV,EAOiBmI,IAAA;AAAA,kBANf,OAAM;AAAA,kBACL,YAAWZ;AAAA,gBAAA;6BAEZ,MAEO;AAAA,oBAFP3G,GAEOC,wBAFP,MAEO;AAAA,0BADFoD,EAAA7B,CAAA,EAAC,qCAAA,CAAA,GAAA,CAAA;AAAA,oBAAA;;;;gBAGRpC,EAGE49C,IAAA;AAAA,kBAFQ,MAAMjgB,EAAA;AAAA,6DAAAA,EAAS,QAAA/5B;AAAA,kBACtB,gBAAgB+5C;AAAA,gBAAA;gBAEnBv9C,EAmDM,OAAA;AAAA,kBAlDJ,WAAM,wBAAsB;AAAA,4DACkC6D,EAAAszB,CAAA;AAAA,kEAAuEtzB,EAAAuzB,CAAA;AAAA,kBAAA;;kBAKrIp3B,EAEM,OAFNgF,IAEM;AAAA,oBADJpF,EAAqB69C,EAAA;AAAA,kBAAA;kBAEvBz9C,EAmBM,OAnBNsF,IAmBM;AAAA,oBAhBI83C,GAAA,SAFR59C,EAAA,GAAAF,EAIEgjB,GAHK0e,GAAA,KAAiB,GAAA;AAAA;sBAErB,cAAYoc,GAAA;AAAA,oBAAA;oBAEfp9C,EAYM,OAZNuF,IAYM;AAAA,+BAXJjG,EAUgBggB,IAAA;AAAA,wBAPb,SAASzb,EAAAgrB,CAAA;AAAA,wBACV,MAAK;AAAA,wBACJ,SAAOhrB,EAAA00B,CAAA;AAAA,sBAAA;mCAER,MAEO;AAAA,0BAFP/3B,GAEOC,uCAFP,MAEO;AAAA,gCADFoD,EAAA7B,CAAA,EAAC,wBAAA,CAAA,GAAA,CAAA;AAAA,0BAAA;;;;6BAPE6B,EAAAsG,CAAA,EAAW,eAAetG,EAAAgrB,CAAA,CAAM;AAAA,6BAC3BiuB,CAAmB;AAAA,sBAAA;;;kBAWtC98C,EAoBM,OApBNwF,IAoBM;AAAA,oBAlBI63C,GAAA,SADR79C,EAAA,GAAAC,EAKM,OALNgG,IAKM;AAAA,sBADJ7F,EAAmCO,IAAA,EAAhB,eAAA,IAAa;AAAA,oBAAA,MAGpB0D,EAAA0pB,CAAA,UAKd9tB,EAMM,OAAAw9B,IAAA;AAAA,sBAJImgB,GAAA,UAAUE,GAAA,cADlBh+C,EAIEo+C,IAAA;AAAA;wBAFC,cAAYN,GAAA;AAAA,wBACb,UAAA;AAAA,sBAAA;gCAVJ39C,EAKM,OALNu9B,IAKM/8B,EADD4D,EAAA7B,CAAA,EAAC,8CAAA,CAAA,GAAA,CAAA;AAAA;;gBAWVhC,EA6BM,OA7BN29C,IA6BM;AAAA,kBA5BO5+C,EAAM,aAAaA,EAAM,YAApCS,EAAA,GAAAC,EAEM,aADDoE,EAAA7B,CAAA,EAAC,gDAAA,EAAA,OAA0DjD,EAAM,oBAAoB8E,EAAAqtB,CAAA,EAAA,CAAa,CAAA,GAAA,CAAA,MAEvG1xB,EAAA,GAAAC,EAQM,aANFoE,EAAA7B,CAAA,EAAC,gDAAA;AAAA,oBAA6E,UAAAjD,EAAM;AAAA,oBAAoC,UAAAA,EAAM;AAAA,8BAAoC8E,EAAAqtB,CAAA;AAAA,kBAAA;kBAOtKtxB,EAAWsI,EAAA;AAAA,kBAEH80C,GAAA,cADR19C,EAMEmV,IAAA;AAAA;gCAJSwc,EAAA;AAAA,qEAAAA,EAAa,QAAAztB;AAAA,oBACrB,OAAOK,EAAA7B,CAAA,EAAC,6CAAA;AAAA,oBACT,gBAAA;AAAA,oBACA,OAAM;AAAA,kBAAA;kBAERpC,EAOciI,IAAA;AAAA,oBANX,UAAUs1C,GAAA;AAAA,oBACV,WAAYz1C,GAAS,CAAA,MAAA,CAAA;AAAA,kBAAA;+BAEtB,MAEO;AAAA,sBAFPlH,GAEOC,uCAFP,MAEO;AAAA,4BADFoD,EAAA7B,CAAA,EAAC,uBAAA,CAAA,GAAA,CAAA;AAAA,sBAAA;;;;;;;;;;;iBAOhBxC,EAAA,GAAAC,EAEM,WAFM,6BAEZ;AAAA;;IC3VWm+C,KAAsB,oCACtBC,KAAqB,mCACrBC,KAAoB,kCACpBC,KAAsB,oCACtBC,KAAqB,mCACrBC,KAAsC,OAAO,IAAI,oBAAoB;AAiC3E,SAASC,GACd1zC,GACA2zC,GACAz9C,GA8BA;AACA,QAAM,EAAE,cAAA09C,EAAA,IAAiB32C,GAAA,GAEnB42C,IAAoBx9C,EAA8B,EAAE,GACpDy9C,IAAgBz9C,EAAI,CAAC,GACrB09C,IAAe19C,EAAI,EAAK,GACxB29C,IAAe39C,EAA+B,IAAI,GAClD49C,IAAW59C,EAAI,EAAK,GACpB69C,IAAW79C,EAAwB,IAAI,GACvC89C,IAAa99C,EAAY+9C,IAAgB,GAEzCC,IAA0B,CAACC,IAAuC,WAAc;AACpF,IAAAR,EAAc,SACT17C,EAAYk8C,CAAQ,KACvBp+C,EAAK,qBAAqBo+C,CAAQ,GAEpCC,GAAS,MAAM;AACb,MAAAZ,EAAA;AAAA,IACF,CAAC;AAAA,EACH,GAEMa,IAAU,MAAM;AACpB,IAAAC,EAAA,GACAd,EAAA;AAAA,EACF,GAEMe,IAAwB,MAAM;AAClC,IAAI56C,GAAOk6C,EAAa,KAAK,MAC7B99C,EAAK,YAAY89C,EAAa,KAAK,GACnCD,EAAa,QAAQ;AAAA,EACvB,GAEMU,IAAU,MAAM;AACpB,IAAKP,EAAS,UACdL,EAAkB,MAAM,QAAQ,CAAC37C,MAAS;AACxC,MAAAA,EAAK,KAAA;AAAA,IACP,CAAC,GACD27C,EAAkB,QAAQ,CAAA;AAAA,EAC5B,GAEMc,IAAa,CAACz8C,GAA0B08C,MAA+B;AAC3E,IAAA18C,EAAK,KAAK,QAAQ,IAClB08C,EAAW,KAAK,QAAQ;AAAA,EAC1B,GAEMC,IAA4B,CAChCtqC,GACAuqC,GACAC,GACAC,GACAC,IAA6C,OAC1C;AACH,UAAMvN,IAAQoN,IAAWC,IAAWA,IAAWD;AAC/C,QAAII,IAAWxN,IAAQ;AACvB,aAASnlB,IAAImlB,GAAOnlB,IAAIhY,EAAM,QAAQgY;AACpC,MAAIhY,EAAMgY,CAAC,EAAE,KAAK,aAAa2yB,MAC7B3qC,EAAMgY,CAAC,EAAE,KAAK,WAAW2yB,GACzBP,EAAWpqC,EAAMgY,CAAC,GAAGyyB,CAAU,GAC/BC,EAAiB,KAAK;AAAA,QACpB,IAAI1qC,EAAMgY,CAAC,EAAE,KAAK;AAAA,QAClB,UAAUhY,EAAMgY,CAAC,EAAE,KAAK;AAAA,MAAA,CACzB,IAEH2yB;AAAA,EAEJ,GACMC,IAAiC,CACrCC,GACAC,GACAC,GACAC,GACAP,GACAC,IAA6C,OAC1C;AACH,QAAIG,EAAY,SAAS,GAAG;AAC1B,UAAIF,IAAWI,IAAc;AAC7B,eAAS/yB,IAAI+yB,GAAa/yB,IAAI6yB,EAAY,QAAQ7yB;AAChD,QAAI6yB,EAAY7yB,CAAC,EAAE,KAAK,aAAa2yB,MACnCE,EAAY7yB,CAAC,EAAE,KAAK,WAAW2yB,GAC/BP,EAAWS,EAAY7yB,CAAC,GAAGyyB,CAAU,GACrCC,EAAiB,KAAK;AAAA,UACpB,IAAIG,EAAY7yB,CAAC,EAAE,KAAK;AAAA,UACxB,UAAU6yB,EAAY7yB,CAAC,EAAE,KAAK;AAAA,QAAA,CAC/B,IAEH2yB;AAAA,IAEJ;AACA,QAAIG,EAAY,SAAS,GAAG;AAC1B,UAAIH,IAAWK,IAAc;AAC7B,eAAShzB,IAAIgzB,GAAahzB,IAAI8yB,EAAY,QAAQ9yB;AAChD,QAAI8yB,EAAY9yB,CAAC,EAAE,KAAK,aAAa2yB,MACnCG,EAAY9yB,CAAC,EAAE,KAAK,WAAW2yB,GAC/BP,EAAWU,EAAY9yB,CAAC,GAAGyyB,CAAU,GACrCC,EAAiB,KAAK;AAAA,UACpB,IAAII,EAAY9yB,CAAC,EAAE,KAAK;AAAA,UACxB,UAAU8yB,EAAY9yB,CAAC,EAAE,KAAK;AAAA,QAAA,CAC/B,IAEH2yB;AAAA,IAEJ;AAAA,EACF,GAEMM,IAAuB,CAC3BC,GACAlrC,GACAmrC,IAAgB,MACL;AACX,QAAID,MAAW,KAAM,QAAOC;AAC5B,UAAMC,IAAaprC,EAAM,KAAK,CAACrS,MAASA,EAAK,KAAK,OAAOu9C,CAAM;AAC/D,WAAKE,KACLD,KACOF,EAAqBG,EAAW,KAAK,QAAQprC,GAAOmrC,CAAK,KAFxCA;AAAA,EAG1B,GAEME,IAAsB,CAACC,GAAiDH,IAAgB,MAAc;AAC1G,QAAII,IAAaJ;AACjB,QAAIG,KAAYA,EAAS,QAAQ;AAC/B,MAAAH;AACA,iBAAWK,KAASF,GAAU;AAC5B,cAAMG,IAAeJ,EAAoBG,EAAM,UAAUL,CAAK;AAC9D,QAAAI,IAAa,KAAK,IAAIA,GAAYE,CAAY;AAAA,MAChD;AAAA,IACF;AACA,WAAOF;AAAA,EACT,GAKMG,IAAwB,CAC5B/9C,GACAqS,GACAmrC,IAAgB,MACL;AACX,UAAMQ,IAAcV,EAAqBt9C,EAAK,KAAK,QAAQqS,CAAK,GAC1DurC,IAAaF,EAAoB19C,EAAK,UAAUw9C,CAAK;AAC3D,WAAOQ,IAAcJ;AAAA,EACvB,GAEMK,IAAe,CACnB/sC,GACA61B,GACAwW,IAAoC,SACgD;AACpF,eAAWv9C,KAAQ+mC,GAAK;AACtB,UAAI/mC,EAAK,KAAK,OAAOkR;AACnB,eAAO;AAAA,UACL,WAAWlR;AAAA,UACX,YAAYu9C;AAAA,QAAA;AAGhB,UAAIv9C,EAAK,UAAU;AACjB,cAAMk+C,IAAkBD,EAAa/sC,GAAIlR,EAAK,UAAUA,CAAI;AAC5D,YAAIk+C,EAAgB,cAAc;AAChC,iBAAOA;AAAA,MAEX;AAAA,IACF;AAEA,WAAO;AAAA,MACL,WAAW;AAAA,MACX,YAAY;AAAA,IAAA;AAAA,EAEhB;AA0QA,SAAO;AAAA,IACL,UAAAnC;AAAA,IACA,UAAAC;AAAA,IACA,YAAAC;AAAA,IACA,cAAAJ;AAAA,IACA,cAAAC;AAAA,IACA,mBAAAH;AAAA,IACA,eAAAC;AAAA,IACA,SAAAU;AAAA,IACA,uBAAAE;AAAA,IACA,SAAAD;AAAA,IACA,kBAlRuB,CACvB4B,GACAC,GACAvB,GACAD,GACAyB,MAC6B;AAC7B,YAAMvB,IAA6Bx7C,GAAUwG,EAAM,KAAK,GAElD,EAAE,WAAWw2C,GAAY,YAAYC,MAAyBN,EAAaE,GAAWrB,EAAW,QAAQ;AAE/G,UAAI,CAACwB;AACH,uBAAQ,MAAM,wBAAwB,GAC/B,CAAA;AAGT,YAAME,IAAuC,CAAA;AAG7C,UAAIJ,MAAa,MAAM;AACrB,YAAIx8C,GAAO28C,CAAoB,KAAK1B,MAAaD;AAE/C,iBAAO,CAAA;AAET,YAAIh7C,GAAO28C,CAAoB,GAAG;AAEhC,gBAAME,IAAM3B,EAAW,SAAS,QAAQwB,CAAU;AAClD,cAAIG,MAAQ,IAAI;AACd,kBAAMjd,KAAUsb,EAAW,SAAS,OAAO2B,GAAK,CAAC,EAAE,CAAC;AACpD,mBAAA3B,EAAW,SAAS,OAAOD,GAAU,GAAGrb,EAAO,GAC/Cmb,EAA0BG,EAAW,UAAU2B,GAAK5B,GAAUC,GAAY0B,CAAU,GACpFrC,EAAwBW,CAAU,GAC3B,CAAA;AAAA,UACT;AACA,yBAAQ,MAAM,wBAAwB,GAC/B,CAAA;AAAA,QACT;AACA,YAAI,CAACl7C,GAAO28C,CAAoB,KAAKA,EAAqB,UAAU;AAElE,gBAAME,IAAMF,EAAqB,SAAS,QAAQD,CAAU;AAC5D,cAAIG,MAAQ,IAAI;AACd,YAAAH,EAAW,KAAK,SAAS;AACzB,kBAAM9c,KAAU+c,EAAqB,SAAS,OAAOE,GAAK,CAAC,EAAE,CAAC;AAC9D,mBAAA3B,EAAW,SAAS,OAAOD,GAAU,GAAGrb,EAAO,GAC/Cyb;AAAA,cACEH,EAAW;AAAA,cACXyB,EAAqB;AAAA,cACrB1B;AAAA,cACA4B;AAAA,cACA3B;AAAA,cACA0B;AAAA,YAAA,GAEFrC,EAAwBW,CAAU,GAC3B,CAAA;AAAA,UACT;AACA,yBAAQ,MAAM,wBAAwB,GAC/B,CAAA;AAAA,QACT;AACA,uBAAQ,MAAM,wBAAwB,GAC/B,CAAA;AAAA,MACT;AAEA,YAAM,EAAE,WAAW4B,EAAA,IAAeT,EAAaG,GAAUtB,EAAW,QAAQ;AAE5E,UAAI,CAAC4B,KAAc,CAACA,EAAW;AAG7B,eAAAvC,EAAA,GACO,CAAA;AAGT,UAAI,CAACv6C,GAAO28C,CAAoB,KAAKA,EAAqB,KAAK,OAAOG,EAAW,KAAK,MAAM7B,MAAaD;AAEvG,eAAO,CAAA;AAGT,UAAI2B,KAAwBA,EAAqB,YAAYG,EAAW,KAAK,OAAOH,EAAqB,KAAK,IAAI;AAEhH,cAAME,IAAMF,EAAqB,SAAS,QAAQD,CAAU;AAC5D,YAAIG,MAAQ,IAAI;AACd,gBAAMjd,KAAU+c,EAAqB,SAAS,OAAOE,GAAK,CAAC,EAAE,CAAC;AAC9D,UAAAC,EAAW,SAAS,OAAO7B,GAAU,GAAGrb,EAAO,GAC/Cmb,EAA0B+B,EAAW,UAAUD,GAAK5B,GAAUC,GAAY0B,CAAU;AAAA,QACtF;AAAA,MACF,WACED,KACAA,EAAqB,YACrBG,EAAW,KAAK,OAAOH,EAAqB,KAAK,IACjD;AAEA,cAAME,IAAMF,EAAqB,SAAS,QAAQD,CAAU;AAC5D,YAAIG,MAAQ,IAAI;AACd,UAAAH,EAAW,KAAK,SAASI,EAAW,KAAK;AACzC,gBAAMld,KAAU+c,EAAqB,SAAS,OAAOE,GAAK,CAAC,EAAE,CAAC;AAC9D,UAAAC,EAAW,SAAS,OAAO7B,GAAU,GAAGrb,EAAO,GAC/Cyb;AAAA,YACEyB,EAAW;AAAA,YACXH,EAAqB;AAAA,YACrB1B;AAAA,YACA4B;AAAA,YACA3B;AAAA,YACA0B;AAAA,UAAA;AAAA,QAEJ;AAAA,MACF,OAAO;AAEL,cAAMC,IAAM3B,EAAW,SAAS,QAAQwB,CAAU;AAClD,YAAIG,MAAQ,IAAI;AACd,UAAAH,EAAW,KAAK,SAASI,EAAW,KAAK;AACzC,gBAAMld,KAAUsb,EAAW,SAAS,OAAO2B,GAAK,CAAC,EAAE,CAAC;AACpD,UAAAC,EAAW,SAAS,OAAO7B,GAAU,GAAGrb,EAAO,GAC/Cyb,EAA+ByB,EAAW,UAAU5B,EAAW,UAAUD,GAAU4B,GAAK3B,GAAY0B,CAAU;AAAA,QAChH;AAAA,MACF;AAEA,aAAIT,EAAsBW,GAAY5B,EAAW,QAAQ,IAAIuB,KAC3D3C,EAAa,qCAAqC,GAClDS,EAAA,GACO,CAAA,MAETA,EAAwBW,CAAU,GAC3B0B;AAAA,IACT;AAAA,IAyJE,YA1FiB,CACjBJ,GACA7/C,GACAogD,MAC6B;AAC7B,YAAM7B,IAA6Bx7C,GAAUwG,EAAM,KAAK,GAElD82C,IAAiC;AAAA,QACrC,MAAMt9C,GAAU/C,CAAI;AAAA,QACpB,UAAUogD,IAAkB,CAAA,IAAK;AAAA,QACjC,MAAM;AAAA,UACJ,OAAO;AAAA,QAAA;AAAA,MACT;AAGF,UAAI/8C,GAAOw8C,CAAQ;AACjB,eAAAtB,EAAW,SAAS,KAAK8B,CAAU,GACnCzC,EAAwBW,CAAU,GAC3B,CAAA;AAGT,YAAM,EAAE,WAAW4B,GAAY,YAAYG,MAAyBZ,EAAaG,GAAUtB,EAAW,QAAQ;AAE9G,UAAI,CAAC4B;AACH,eAAAhD,EAAa,mCAAmC,GACzC,CAAA;AAET,MAAAkD,EAAW,KAAK,WAAWF,EAAW,KAAK,WAAW,GACtDE,EAAW,KAAK,SAASF,EAAW,KAAK;AAEzC,YAAMF,IAAuC,CAAA;AAE7C,UAAI,CAAC58C,GAAOi9C,CAAoB,KAAKA,EAAqB,UAAU;AAClE,cAAMJ,IAAMI,EAAqB,SAAS,QAAQH,CAAU,IAAI;AAChE,QAAID,MAAQ,OACVI,EAAqB,SAAS,OAAOJ,GAAK,GAAGG,CAAU,GACvDjC,EAA0BkC,EAAqB,UAAUJ,GAAKA,GAAK3B,GAAY0B,CAAU;AAAA,MAE7F,OAAO;AAEL,cAAMC,IAAM3B,EAAW,SAAS,QAAQ4B,CAAU,IAAI;AACtD,QAAID,MAAQ,OACV3B,EAAW,SAAS,OAAO2B,GAAK,GAAGG,CAAU,GAC7CjC,EAA0BG,EAAW,UAAU2B,GAAKA,GAAK3B,GAAY0B,CAAU;AAAA,MAEnF;AAEA,aAAArC,EAAwBW,CAAU,GAC3B0B;AAAA,IACT;AAAA,IA0CE,cAxCmB,CAACJ,GAA6B7/C,GAAWogD,MAA6B;AACzF,YAAM7B,IAA6Bx7C,GAAUwG,EAAM,KAAK,GAElD,EAAE,WAAW42C,EAAA,IAAeT,EAAaG,GAAUtB,EAAW,QAAQ;AAE5E,UAAI,CAAC4B,GAAY;AACf,QAAAhD,EAAa,mCAAmC;AAChD;AAAA,MACF;AACA,YAAMkD,IAAiC;AAAA,QACrC,MAAMt9C,GAAU/C,CAAI;AAAA,QACpB,UAAUogD,IAAkB,CAAA,IAAK;AAAA,QACjC,MAAM;AAAA,UACJ,OAAO;AAAA,QAAA;AAAA,MACT;AAEF,MAAAC,EAAW,KAAK,KAAKrgD,EAAK,IAC1BqgD,EAAW,KAAK,WACdF,EAAW,YAAYA,EAAW,SAAS,SAAS,IAAIA,EAAW,SAAS,SAAS,IAAI,GAC3FE,EAAW,KAAK,SAASF,EAAW,KAAK,IAErC,CAACx+C,EAAYw+C,EAAW,QAAQ,KAAKA,EAAW,SAAS,WAAW,MACtEA,EAAW,SAAS,KAAKE,CAAU,GACnCzC,EAAwBW,CAAU;AAAA,IAEtC;AAAA,IAgBE,YAzJiB,CAAC5rC,MAAoD;AACtE,YAAM4rC,IAA6Bx7C,GAAUwG,EAAM,KAAK,GAClD,EAAE,WAAAg3C,GAAW,YAAArB,EAAA,IAAeQ,EAAa/sC,GAAI4rC,EAAW,QAAQ;AACtE,UAAI,CAACgC;AACH,eAAO,CAAA;AAGT,YAAMN,IAAuC,CAAA;AAE7C,UAAIf,KAAcA,EAAW,UAAU;AACrC,cAAMgB,IAAMhB,EAAW,SAAS,QAAQqB,CAAS;AACjD,QAAIL,MAAQ,OACVhB,EAAW,SAAS,OAAOgB,GAAK,CAAC,GACjC9B,EAA0Bc,EAAW,UAAUgB,GAAKA,GAAK3B,GAAY0B,CAAU;AAAA,MAEnF,OAAO;AACL,cAAMC,IAAM3B,EAAW,SAAS,QAAQgC,CAAS;AACjD,QAAIL,MAAQ,OACV3B,EAAW,SAAS,OAAO2B,GAAK,CAAC,GACjC9B,EAA0BG,EAAW,UAAU2B,GAAKA,GAAK3B,GAAY0B,CAAU;AAAA,MAEnF;AAEA,aAAArC,EAAwBW,CAAU,GAC3B0B;AAAA,IACT;AAAA,IAiIE,YAvHiB,CACjBttC,GACA3S,GACAo/C,IAAyD,MACzDX,IAA0B,MAC1B+B,IAAwB,MACxBxB,IAA+C,WAC5C;AACH,YAAMT,IAA6Bx7C,GAAUwG,EAAM,KAAK,GAElD,EAAE,WAAAg3C,EAAA,IAAcb,EAAa/sC,GAAI4rC,EAAW,QAAQ;AAC1D,MAAKgC,MAGLA,EAAU,OAAOx9C,GAAU/C,CAAI,GAC1BqD,GAAO+7C,CAAQ,QAAa,WAAWA,IACvC/7C,GAAOo7C,CAAQ,MAAG8B,EAAU,KAAK,WAAW9B,IAC5Cp7C,GAAOm9C,CAAK,MAAGD,EAAU,KAAK,QAAQC,IACvC,CAACn9C,GAAOm9C,CAAK,KAAKA,MAAU,OAAMjC,EAAW,KAAK,QAAQ,KACzD58C,EAAYq9C,CAAM,MAAGuB,EAAU,KAAK,SAASvB,IAClDpB,EAAwBW,CAAU;AAAA,IACpC;AAAA,EAkGE;AAEJ;;;;;;;;;;;;;;ACvgBA,UAAMzgD,IAAQC,GAYR0B,IAAOC,GAOP+gD,IAAgB,CAACh/C,MAA0D;AAC/E,UAAI,UAAUA,GAAM;AAClB,QAAAhC,EAAK,YAAYgC,CAAI;AACrB;AAAA,MACF;AACA,MAAAhC,EAAK,YAAYsD,GAAUjF,EAAM,IAAI,CAAC;AAAA,IACxC,GAEM4iD,IAAc,CAACj/C,MAA0D;AAC7E,UAAI,UAAUA,GAAM;AAClB,QAAAhC,EAAK,UAAUgC,CAAI;AACnB;AAAA,MACF;AACA,MAAAhC,EAAK,UAAUsD,GAAUjF,EAAM,IAAI,CAAC;AAAA,IACtC,GAEM6iD,IAAkB,CAACl/C,MAA0D;AACjF,UAAI,UAAUA,GAAM;AAClB,QAAAhC,EAAK,cAAcgC,CAAI;AACvB;AAAA,MACF;AACA,MAAAhC,EAAK,cAAcsD,GAAUjF,EAAM,IAAI,CAAC;AAAA,IAC1C,GAEM8iD,IAAkB,CAACn/C,MAA0D;AACjF,UAAI,UAAUA,GAAM;AAClB,QAAAhC,EAAK,cAAcgC,CAAI;AACvB;AAAA,MACF;AACA,MAAAhC,EAAK,cAAcsD,GAAUjF,EAAM,IAAI,CAAC;AAAA,IAC1C,GAEMmpC,IAAQhmC,GAAe+7C,IAAe,CAAC;AAC7C,IAAAn6C,GAAgBm6C,IAAe/V,IAAQ,CAAC;AAExC,UAAM4Z,IAA6B3iD,EAAS,MAExCJ,EAAM,sBACN,CAAC6D,EAAY7D,EAAM,KAAK,QAAQ,KAChCA,EAAM,KAAK,SAAS,WAAW,KAC/BmpC,IAAQnpC,EAAM,QAEjB,GAEK,EAAE,GAAAiD,EAAA,IAAM/C,EAAA;;;kBAIZQ,EA6HM,OAAA;AAAA,QA5HJ,OAAKmE,GAAA,CAAC,uCAAqC,gDACaC,EAAAqkC,CAAA,CAAK,CAAA;AAAA,QAC5D,WAASlpC,EAAA,KAAK,KAAK;AAAA,MAAA;QAEpBgB,EAuHM,OAvHNgF,IAuHM;AAAA,UAtHJhF,EAgFM,OAhFNsF,IAgFM;AAAA,YA/EJ1F,EAMEE,IAAA;AAAA,cALC,OAAK8D,GAAA;AAAA,iBAAiBC,EAAA+5C,EAAA,CAAmB,GAAA;AAAA,gBAAsB,CAAA/5C,EAAA+5C,EAAA,mBAAqC5+C,EAAA;AAAA,cAAA;cAIrG,MAAK;AAAA,YAAA;YAEPgB,EAKM,OALNuF,IAKM;AAAA,cAJJ/E,GAGEC,EAAA,QAAA,QAAA,EADC,MAAMzB,EAAA,MAAI;AAAA,YAAA;YAGfgB,EAiEM,OAjENwF,IAiEM;AAAA,cA/DIxG,EAAA,uBADRM,EAcO+F,IAAA;AAAA;gBAZL,MAAA;AAAA,gBACA,MAAK;AAAA,gBACL,SAAQ;AAAA,gBACR,OAAM;AAAA,gBACL,WAAYs8C,GAAW,CAAA,MAAA,CAAA;AAAA,cAAA;2BAExB,MAA2B;AAAA,kBAA3B/hD,EAA2BE,IAAA,EAApB,MAAK,cAAY;AAAA,kBACxBF,EAIEmG,IAAA;AAAA,oBAHA,QAAO;AAAA,oBACP,WAAU;AAAA,oBACT,MAAMlC,EAAA7B,CAAA,EAAC,sBAAA;AAAA,kBAAA;;;;cAIJhD,EAAA,yBADRM,EAcO+F,IAAA;AAAA;gBAZL,MAAA;AAAA,gBACA,MAAK;AAAA,gBACL,SAAQ;AAAA,gBACR,OAAM;AAAA,gBACL,WAAYq8C,GAAa,CAAA,MAAA,CAAA;AAAA,cAAA;2BAE1B,MAAsC;AAAA,kBAAtC9hD,EAAsCE,IAAA,EAA/B,MAAK,yBAAuB;AAAA,kBACnCF,EAIEmG,IAAA;AAAA,oBAHA,QAAO;AAAA,oBACP,WAAU;AAAA,oBACT,MAAMlC,EAAA7B,CAAA,EAAC,wBAAA;AAAA,kBAAA;;;;cAGZxB,GAGEC,EAAA,QAAA,WAAA,EADC,MAAMzB,EAAA,MAAI;AAAA,cAGLA,EAAA,sBAAsB8iD,EAAA,cAD9BxiD,EA6BO+F,IAAA;AAAA;gBA3BL,MAAA;AAAA,gBACA,MAAK;AAAA,gBACL,SAAQ;AAAA,gBACR,OAAM;AAAA,cAAA;2BAEN,MAAkC;AAAA,kBAAlCzF,EAAkCE,IAAA,EAA3B,MAAK,qBAAmB;AAAA,kBAC/BF,EAIEmG,IAAA;AAAA,oBAHA,QAAO;AAAA,oBACP,WAAU;AAAA,oBACT,MAAMlC,EAAA7B,CAAA,EAAC,sBAAA;AAAA,kBAAA;kBAEVpC,EAeQoG,IAAA,EAfD,WAAU,YAAQ;AAAA,+BACvB,MAaQ;AAAA,sBAbRpG,EAaQqG,IAAA,EAbD,SAAQ,aAAS;AAAA,mCACtB,MAKY;AAAA,0BAJJjH,EAAA,2BADRM,EAKY4G,IAAA;AAAA;4BAHT,WAAY07C,GAAe,CAAA,MAAA,CAAA;AAAA,0BAAA;uCAE5B,MAAmC;AAAA,kCAAhC/9C,EAAA7B,CAAA,EAAC,0BAAA,CAAA,GAAA,CAAA;AAAA,4BAAA;;;0BAGE8/C,EAAA,cADRxiD,EAKY4G,IAAA;AAAA;4BAHT,WAAY27C,GAAe,CAAA,MAAA,CAAA;AAAA,0BAAA;uCAE5B,MAAmC;AAAA,kCAAhCh+C,EAAA7B,CAAA,EAAC,0BAAA,CAAA,GAAA,CAAA;AAAA,4BAAA;;;;;;;;;;;;;;UAQR6B,EAAAqkC,CAAA,IAAQlpC,EAAA,YAAQ,CAAK6E,KAAY7E,EAAA,KAAK,QAAQ,UADtDS,EAoCM,OAAA;AAAA;YAlCJ,WAAM,mCAAiC,EAAA,0CACaT,OAAK,SAAS,WAAM,EAAA,CAAA,CAAA;AAAA,YACvE,WAASA,EAAA,KAAK,KAAK;AAAA,UAAA;aAEpBQ,EAAA,EAAA,GAAAC,EA6BsB0F,IAAA,MAAAC,GA5BJpG,EAAA,KAAK,WAAduhD,YADTjhD,EA6BsByiD,GAAA;AAAA,cA3BnB,KAAKxB,EAAM,KAAK;AAAA,cAChB,MAAMA;AAAA,cACN,qBAAmBvhD,EAAA;AAAA,cACnB,aAAWA,EAAA;AAAA,cACX,yBAAuBA,EAAA;AAAA,cACvB,yBAAuBA,EAAA;AAAA,cACvB,sBAAoBA,EAAA;AAAA,cACpB,oBAAkBA,EAAA;AAAA,cAClB,cAAc4iD;AAAA,cACd,cAAcC;AAAA,cACd,YAAWH;AAAA,cACX,UAASC;AAAA,YAAA;cAGC,MAAIhiD,EACb,CAGE,EAAA,MAJqBqiD,QAAQ;AAAA,gBAC/BxhD,GAGEC,EAAA,QAAA,QAAA;AAAA,kBADC,MAAMuhD;AAAA,gBAAA;;cAIA,SAAOriD,EAChB,CAGE,EAAA,MAJwBsiD,QAAU;AAAA,gBACpCzhD,GAGEC,EAAA,QAAA,WAAA;AAAA,kBADC,MAAMwhD;AAAA,gBAAA;;;;;;;;;;;;;;;;;;;;;;;;;;AC1KrB,UAAMljD,IAAQC,GA0BR0B,IAAOC,GAEP6J,IAAQoyB,GAAM,MAAM79B,EAAM,UAAU,GAEpC6iD,IAAkB,CAAC3gD,MAA6B;AACpD,MAAAP,EAAK,cAAcO,CAAI;AAAA,IACzB,GAEM4gD,IAAkB,CAAC5gD,MAA6B;AACpD,MAAAP,EAAK,cAAcO,CAAI;AAAA,IACzB,GAEMygD,IAAgB,CAACzgD,MAA6B;AAClD,MAAAu9C,EAAa,QAAQv9C,GACrBs9C,EAAa,QAAQ;AAAA,IACvB,GAEMoD,IAAc,CAAC1gD,MAA6B;AAChD,MAAAP,EAAK,UAAUO,CAAI;AAAA,IACrB,GAEMihD,IAAiB,MAAM;AAC3B,UAAInjD,EAAM,WAAW,SAAS,SAAS,GAAG;AACxC,QAAA2B,EAAK,aAAasD,GAAUjF,EAAM,WAAW,SAASA,EAAM,WAAW,SAAS,SAAS,CAAC,CAAC,CAAC;AAC5F;AAAA,MACF;AACA,MAAA2B,EAAK,aAAa,IAAI;AAAA,IACxB,GAEM,EAAE,GAAAsB,EAAA,IAAM/C,EAAA,GAERkjD,IAAehjD,EAAS,MACrByD,EAAY7D,EAAM,kBAAkB,IAAIqjD,KAAwBzD,EAAW,QAAQ5/C,EAAM,kBACjG,GAEKsjD,IAAcljD,EAAS,MACpBJ,EAAM,gBAAgB,OAAO0/C,EAAS,QAAQ1/C,EAAM,gBAAgB,eAAe,GAC3F,GAEKujD,IAAgB,MAAM;AAE1B,UADIvjD,EAAM,oBACN,CAAC2/C,EAAS,MAAO;AACrB,YAAM6D,IAAkB,MAAM,KAAK7D,EAAS,MAAM,iBAA8B,MAAMV,EAAkB,CAAC;AACzG,MAAAK,EAAkB,QAAQ,CAAA;AAC1B,eAAStxB,IAAI,GAAGA,IAAIw1B,EAAgB,QAAQx1B;AAC1C,QAAAsxB,EAAkB,MAAMtxB,CAAC,IAAIy1B,GAAYD,EAAgBx1B,CAAC,GAAG,IAAI;AAAA,UAC/D,OAAO;AAAA,YACL,MAAM;AAAA,YACN,MAAM;AAAA,YACN,KAAK;AAAA,UAAA;AAAA,UAEP,QAAQ,MAAM6wB;AAAA,UACd,YAAYC;AAAA,UACZ,WAAWC;AAAA,UACX,aAAaC;AAAA,UACb,gBAAgB;AAAA,UAChB,eAAe;AAAA,UACf,eAAe;AAAA,UACf,mBAAmB;AAAA,UACnB,UAAU,MAAM;AAAA,UAAC;AAAA,UACjB,SAAS,MAAM;AACb,YAAAU,EAAS,QAAQ;AAAA,UACnB;AAAA,UACA,OAAO,CAACl7C,MAAyB;AAC/B,YAAAk7C,EAAS,QAAQ,IACjBM,GAAS,MAAM;AACb,oBAAMnrC,IAAK7H,GAAYxI,EAAM,KAAK,aAAa,SAAS,KAAK,GAAG;AAChE,kBAAIqQ,IAAK,EAAG;AACZ,oBAAM2rC,IAAWh8C,EAAM;AACvB,kBAAIX,EAAY28C,CAAQ,EAAG;AAC3B,oBAAMD,IAAW/7C,EAAM;AACvB,kBAAIX,EAAY08C,CAAQ,EAAG;AAC3B,kBAAImD,IAA0B;AAC9B,oBAAMC,IAAWn/C,EAAM,KAAK;AAC5B,cAAKe,GAAOo+C,CAAQ,MAClBD,IAAW12C,GAAY22C,EAAS,aAAa,SAAS,KAAK,GAAG,GAC1DD,MAAa,MAAGA,IAAW;AAEjC,oBAAME,KAAeC,EAAiBhvC,GAAI6uC,GAAUlD,GAAUD,GAAUvgD,EAAM,QAAQ;AACtF,cAAA2B,EAAK,SAASiiD,EAAY;AAAA,YAC5B,CAAC;AAAA,UACH;AAAA,QAAA,CACD;AAAA,IAEL,GAEM;AAAA,MACJ,UAAAlE;AAAA,MACA,UAAAC;AAAA,MACA,YAAAC;AAAA,MACA,cAAAJ;AAAA,MACA,cAAAC;AAAA,MACA,eAAAF;AAAA,MACA,kBAAAsE;AAAA,MACA,YAAAC;AAAA,MACA,cAAAC;AAAA,MACA,YAAAC;AAAA,MACA,YAAAC;AAAA,MACA,SAAA/D;AAAA,MACA,SAAAD;AAAA,MACA,uBAAAE;AAAA,MACA,mBAAAb;AAAA,IAAA,IACEH,GAAyB1zC,GAAO83C,GAAe5hD,CAAI;AAEvD,WAAAokB,GAAgB,MAAM;AACpB,MAAAm6B,EAAA;AAAA,IACF,CAAC,GAEDF,GAAS,MAAM;AACb,MAAAL,EAAS,QAAQ,SAAS,cAAc,MAAMyD,EAAa,KAAK,GAChEG,EAAA;AAAA,IACF,CAAC,GAED1gD;AAAA,MACE,MAAM7C,EAAM;AAAA,MACZ,OAAO8C,MAAa;AAClB,QAAAo9C,EAAA,GACIp9C,MAAa,MAAOygD,EAAA;AAAA,MAC1B;AAAA,IAAA,GAGFl/C,EAAa;AAAA,MACX,SAAA47C;AAAA,MACA,YAAA6D;AAAA,MACA,cAAAC;AAAA,MACA,YAAAC;AAAA,MACA,YAAAC;AAAA,IAAA,CACD;;kBAICvjD,EAkEM,OAAA,MAAA;AAAA,QAjEJO,EAqCM,OAAA;AAAA,UApCH,IAAImiD,EAAA;AAAA,UACJ,UAAOE,EAAA,KAAW;AAAA,QAAA;gBAEnB5iD,EAgCM,OAAA;AAAA,YA/BH,KAAKoE,EAAAy6C,CAAA;AAAA,YACL,UAAOz6C,EAAAm6C,EAAA,CAAkB;AAAA,UAAA;aAE1Bx+C,EAAA,EAAA,GAAAC,EA2BsB0F,IAAA,MAAAC,GA1BLpG,EAAA,WAAW,WAAnB0D,YADTpD,EA2BsB2jD,IAAA;AAAA,cAzBnB,KAAKvgD,EAAK,KAAK;AAAA,cACf,MAAAA;AAAA,cACA,qBAAmB1D,EAAA;AAAA,cACnB,aAAWA,EAAA;AAAA,cACX,yBAAuBA,EAAA;AAAA,cACvB,yBAAuBA,EAAA;AAAA,cACvB,sBAAoBA,EAAA;AAAA,cACpB,oBAAkBA,EAAA;AAAA,cAClB,cAAc4iD;AAAA,cACd,cAAcC;AAAA,cACd,YAAWH;AAAA,cACX,UAASC;AAAA,YAAA;cAEC,MAAIhiD,EACb,CAGE,EAAA,MAJqBqiD,QAAQ;AAAA,gBAC/BxhD,GAGEC,EAAA,QAAA,QAAA,EADC,MAAMuhD,GAAQ;AAAA,cAAA;cAGR,SAAOriD,EAChB,CAGE,EAAA,MAJwBujD,QAAW;AAAA,gBACrC1iD,GAGEC,EAAA,QAAA,WAAA,EADC,MAAMyiD,GAAW;AAAA,cAAA;;;;;QAOpBlkD,EAAA,0BADRM,EAOO+F,IAAA;AAAA;UALL,MAAK;AAAA,UACL,gBAAa;AAAA,UACZ,WAAY68C,GAAc,CAAA,MAAA,CAAA;AAAA,QAAA;qBAE3B,MAAsC;AAAA,gBAAnCr+C,EAAA7B,CAAA,EAAC,6BAAA,CAAA,GAAA,CAAA;AAAA,UAAA;;;QAENpC,EAkBUkI,IAAA;AAAA,sBAjBCjE,EAAA06C,CAAA;AAAA,gEAAAA,EAAY,QAAA/6C,IAAA;AAAA,UACpB,OAAO;AAAA,QAAA;qBAER,MAaQ;AAAA,YAbKK,EAAA06C,CAAA,UAAbj/C,EAaQgB,IAAA,EAAA,KAAA,KAAA;AAAA,yBAZN,MAEiB;AAAA,gBAFjBV,EAEiBmI,IAAA;AAAA,kBAFA,mCAAWw2C,EAAA,QAAY;AAAA,gBAAA;6BACtC,MAA4C;AAAA,wBAAzC16C,EAAA7B,CAAA,EAAC,mCAAA,CAAA,GAAA,CAAA;AAAA,kBAAA;;;gBAENpC,EAQeqI,IAAA,MAAA;AAAA,6BAPb,MAAW;AAAA,oBAAXrI,EAAWsI,EAAA;AAAA,oBACXtI,EAEeuI,GAAA;AAAA,sBAFA,kCAAYo2C,EAAA,QAAY,IAAA,CAAA,MAAA,CAAA;AAAA,oBAAA;iCACrC,MAA+B;AAAA,4BAA5B16C,EAAA7B,CAAA,EAAC,sBAAA,CAAA,GAAA,CAAA;AAAA,sBAAA;;;oBAENpC,EAEciI,GAAA;AAAA,sBAFA,WAAYhE,EAAAq7C,CAAA,GAAqB,CAAA,MAAA,CAAA;AAAA,oBAAA;iCAC7C,MAA+B;AAAA,4BAA5Br7C,EAAA7B,CAAA,EAAC,sBAAA,CAAA,GAAA,CAAA;AAAA,sBAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzOhB,UAAMjD,IAAQC,GAsBR0B,IAAOC,GASPwiD,IAActiD,EAAI,EAAK,GACvBmf,IAAS7gB,EAAS;AAAA,MACtB,MAAM;AACJ,eAAIyD,EAAY7D,EAAM,UAAU,IAAUokD,EAAY,QAC/CpkD,EAAM;AAAA,MACf;AAAA,MACA,IAAI8C,GAAmB;AACrB,QAAAshD,EAAY,QAAQthD,GACpBnB,EAAK,qBAAqBmB,CAAQ;AAAA,MACpC;AAAA,IAAA,CACD,GAEKuhD,IAAqBjkD,EAAS;AAAA,MAClC,KAAK,MAAMJ,EAAM;AAAA,MACjB,KAAK,CAAC8C,MAAa;AACjB,QAAAnB,EAAK,qBAAqB,EAAE,GAAGqwB,GAAMlvB,CAAQ,GAAG;AAAA,MAClD;AAAA,IAAA,CACD,GAEKs1B,IAAct2B,EAAI,EAAI,GACtBwiD,IAAgBxiD,EAAI,EAAK,GAEzB,EAAE,GAAAmB,EAAA,IAAM/C,EAAA,GAERqkD,IAAqBnkD,EAAS,MAC3BJ,EAAM,cAAc,MAC5B,GAEKo+C,IAAiBh+C,EAAS,MACvBmkD,EAAmB,QAAQvkD,EAAM,YAAYukD,EAAmB,QAAQvkD,EAAM,QACtF,GAEKmI,IAAS,MAAM;AACnB,MAAAxG,EAAK,QAAQ,GACby2B,EAAY,QAAQ,IACpBnX,EAAO,QAAQ;AAAA,IACjB,GAEMujC,IAAgB,MAAM;AAC1B,MAAApsB,EAAY,QAAQ,CAACA,EAAY;AAAA,IACnC,GAEMhwB,IAAU,MAAM;AACpB,MAAA6Y,EAAO,QAAQ;AAAA,IACjB,GAEMtY,IAAY,MAAM;AACtB,MAAAhH;AAAA,QACE;AAAA,QACA3B,EAAM,cAAc,IAAI,CAAC2D,MAASquB,GAAMruB,CAAI,CAAC;AAAA,MAAA,GAE/CyE,EAAA;AAAA,IACF,GAEMoxB,IAAgB,MAAM;AAC1B,MAAA73B,EAAK,iBAAiB;AAAA,IACxB,GAEM8iD,IAAe,MAAM;AACzB,MAAA9iD,EAAK,cAAc;AAAA,IACrB,GAEMuD,IAAW9E,EAAS,MACjB,KAAK,KAAKikD,EAAmB,MAAM,aAAaA,EAAmB,MAAM,WAAW,CAC5F,GAEKK,IAActkD,EAAS,MACpB,EACJmF,GAAO8+C,EAAmB,MAAM,WAAW,KAAKA,EAAmB,MAAM,SAASn/C,EAAS,SAC5Fm/C,EAAmB,MAAM,gBAAgB,GAE5C,GAEKtG,IAAsB,CAACC,MAA4B;AACvD,MAAIA,KAAkB0G,EAAY,SAAS,CAAC1kD,EAAM,WAChDw5B,EAAA;AAAA,IAEJ;AAEA,WAAAn1B,EAAa;AAAA,MACX,MAAM8D;AAAA,IAAA,CACP;;;QAIC1G,GAGEC,EAAA,QAAA,aAAA;AAAA,UADC,OAAK,EAAA,SAAakW,EAAa,MAAOzP,KAAM,CAAA,MAAA,CAAA,EAAA;AAAA,QAAA;QAE/CtH,EAqJUkI,IArJV8J,GAqJUnR,EAAA,QApJM;AAAA,UACb,eAAauf,EAAA;AAAA,UACd,YAAA;AAAA,UACA,OAAM;AAAA,UACL,uBAAkB1c,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAE,MAAE9C,EAAI,qBAAsB8C,CAAM;AAAA,QAAA;qBAErD,MA6IQ;AAAA,YA5IAwc,EAAA,cADR1gB,EA6IQgB,IAAA;AAAA;cA3IN,OAAM;AAAA,YAAA;yBAEN,MAOiB;AAAA,gBAPjBV,EAOiBmI,IAAA;AAAA,kBANf,OAAM;AAAA,kBACL,YAAWZ;AAAA,gBAAA;6BAEZ,MAEO;AAAA,oBAFP3G,GAEOC,uBAFP,MAEO;AAAA,sBADFwE,EAAAhF,EAAA4D,EAAA7B,CAAA,EAAEhD,EAAA,YAAY,CAAA,GAAA,CAAA;AAAA,oBAAA;;;;gBAGrBY,EAoCW+lB,IAAA;AAAA,kBAnCT,SAAQ;AAAA,kBACR,OAAM;AAAA,kBACL,QAAQ;AAAA,kBACT,WAAU;AAAA,kBACV,OAAM;AAAA,gBAAA;6BAEN,MA4BO;AAAA,oBA5BPnlB,GA4BOC,4BA5BP,MA4BO;AAAA,sBA3BLT,EA0BM,OA1BNE,IA0BM;AAAA,wBAzBJF,EAwBM,OAxBNgF,IAwBM;AAAA,0BAvBJhF,EAmBM,OAnBNsF,IAmBM;AAAA,4BAlBJ1F,EAgBOyF,IAAA;AAAA,8BAfL,MAAA;AAAA,8BACC,OAAO;AAAA,8BACP,QAAQ;AAAA,8BACR,SAAOk+C;AAAA,4BAAA;yCAER,MAGE;AAAA,gCAHF3jD,EAGEE,IAAA;AAAA,kCAFA,MAAK;AAAA,kCACJ,MAAM;AAAA,gCAAA;gCAETF,EAKWmG,IAAA;AAAA,kCAJT,WAAU;AAAA,kCACV,UAAS;AAAA,gCAAA;6CAET,MAA6C;AAAA,wCAA1ClC,EAAA7B,CAAA,EAAC,oCAAA,CAAA,GAAA,CAAA;AAAA,kCAAA;;;;;;4BAGRxB,GAA+BC,EAAA,QAAA,iBAAA;AAAA,0BAAA;0BAEjCT,EAEM,OAFNuF,IAEM;AAAA,4BADJ/E,GAAgCC,EAAA,QAAA,kBAAA;AAAA,0BAAA;;;;;;;gBAM1CT,EAoEM,OAAA;AAAA,kBAnEJ,OAAK4D,GAAA,CAAC,wBAAsB,EAAA,wCACsBuzB,EAAA,OAAW,CAAA;AAAA,gBAAA;kBAE7Dn3B,EAuCM,OAvCNwF,IAuCM;AAAA,oBAtCJxF,EAqCM,OArCNyF,IAqCM;AAAA,sBApCJzF,EAQM,OARNg9B,IAQM;AAAA,wBAPJp9B,EAMQ8jD,IAAA;AAAA,0BALN,MAAK;AAAA,0BACL,OAAM;AAAA,0BACL,YAAgB1kD,EAAA,cAAY,CAAA,SAAA,CAAA;AAAA,wBAAA;qCAE7B,MAAsB;AAAA,4BAAtBwB,GAAsBC,EAAA,QAAA,QAAA;AAAA,0BAAA;;;;sBAG1BT,EA0BM,OA1BNi9B,IA0BM;AAAA,wBAzBJr9B,EAQOyF,IAAA;AAAA,0BAPL,OAAM;AAAA,0BACN,OAAM;AAAA,0BACL,SAASg+C,EAAA,QAAa,SAAA;AAAA,0BACvB,MAAK;AAAA,0BACJ,WAAYrkD,EAAA,cAAY,CAAA,MAAA,CAAA;AAAA,wBAAA;qCAEzB,MAAqC;AAAA,gCAAlC6E,EAAA7B,CAAA,EAAC,4BAAA,CAAA,GAAA,CAAA;AAAA,0BAAA;;;wBAENpC,EAeOyF,IAAA;AAAA,0BAdL,OAAM;AAAA,0BACN,OAAM;AAAA,0BACN,aAAU;AAAA,0BACV,SAAQ;AAAA,0BACR,MAAK;AAAA,0BACJ,WAAYrG,EAAA,aAAW,CAAA,MAAA,CAAA;AAAA,wBAAA;qCAExB,MAA0C;AAAA,4BAA1CY,EAA0CE,IAAA,EAAnC,MAAK,6BAA2B;AAAA,4BACvCF,EAKWmG,IAAA;AAAA,8BAJT,WAAU;AAAA,8BACV,UAAS;AAAA,4BAAA;yCAET,MAAoC;AAAA,oCAAjClC,EAAA7B,CAAA,EAAC,2BAAA,CAAA,GAAA,CAAA;AAAA,8BAAA;;;;;;;;;kBAMdhC,EAuBM,OAvBN29C,IAuBM;AAAA,oBAtBJn9C,GAAuBC,EAAA,QAAA,SAAA;AAAA,oBAEfzB,EAAA,mBAAc,UADtBQ,KAAAC,EAeM,OAfNkkD,IAeM;AAAA,+BAXJrkD,EAUgBggB,GAAA;AAAA,wBAPb,SAAStgB,EAAA;AAAA,wBACV,MAAK;AAAA,wBACJ,SAAOu5B;AAAA,sBAAA;mCAER,MAEO;AAAA,0BAFP/3B,GAEOC,sCAFP,MAEO;AAAA,gCADFoD,EAAA7B,CAAA,EAAC,wBAAA,CAAA,GAAA,CAAA;AAAA,0BAAA;;;;wBAPE,CAAA4hD,IAAAH,EAAA,SAAezkD,EAAA,OAAO;AAAA;;0BACX89C;AAAA;0BAAP,EAAA,OAAZ,GAAA;AAAA,wBAAuC;AAAA;gCAU3Cx9C,EAIEukD,IAAA;AAAA;kCAFST,EAAA;AAAA,oEAAAA,EAAkB,QAAA5/C;AAAA,sBAC1B,UAAQggD;AAAA,oBAAA;;;gBAIfxjD,EAsBM,OAtBN8jD,IAsBM;AAAA,kBArBO/kD,EAAM,aAAaA,EAAM,YAApCS,KAAAC,EAEM,aADDoE,EAAA7B,CAAA,EAAC,6CAAA,EAAA,OAAuDjD,EAAM,oBAAoBukD,EAAA,MAAA,CAAkB,CAAA,GAAA,CAAA,MAEzG9jD,EAAA,GAAAC,EAQM,aANFoE,EAAA7B,CAAA,EAAC,6CAAA;AAAA,oBAAwE,UAAAjD,EAAM;AAAA,oBAAkC,UAAAA,EAAM;AAAA,8BAAkCukD,EAAA;AAAA,kBAAA;kBAO7J1jD,EAAWsI,EAAA;AAAA,kBACXtI,EAOciI,GAAA;AAAA,oBANX,UAAUs1C,EAAA;AAAA,oBACV,WAAYz1C,GAAS,CAAA,MAAA,CAAA;AAAA,kBAAA;+BAEtB,MAEO;AAAA,sBAFPlH,GAEOC,sCAFP,MAEO;AAAA,4BADFoD,EAAA7B,CAAA,EAAC,uBAAA,CAAA,GAAA,CAAA;AAAA,sBAAA;;;;;;;;;;;;;;IC/QV+hD,KAAiBljD,EAAI,EAAK,GAC1BmjD,KAAgEnjD,EAAI,MAAS;AAE5E,SAASojD,KAA6B;AAC3C,QAAMC,IAAkB,CAAC3gD,MAAqB;AAC5C,IAAAA,EAAM,eAAA,GACN4gD,EAAyB5gD,GAAO,EAAI;AAAA,EACtC,GACM6gD,IAAmB,CAAC7gD,MAAqB;AAC7C,IAAAA,EAAM,eAAA,GACN4gD,EAAyB5gD,GAAO,EAAK;AAAA,EACvC,GACM8gD,IAAc,CAAC9gD,MAAqB;AACxC,IAAAA,EAAM,eAAA,GACN4gD,EAAyB5gD,GAAO,EAAK;AAAA,EACvC,GACM4gD,IAA2B,CAAC5gD,GAAkBk7C,MAAsB;AACxE,IAAK6F,EAAuB/gD,CAAK,MAG7Bk7C,KACFsF,GAAe,QAAQ,IACvB,aAAaC,GAAc,KAAK,MAEhC,aAAaA,GAAc,KAAK,GAChCA,GAAc,QAAQ,WAAW,MAAM;AACrC,MAAAD,GAAe,QAAQ;AAAA,IACzB,GAAG,GAAG;AAAA,EAEV,GACMO,IAAyB,CAAC/gD,MAAqB;AACnD,QAAIA,EAAM,cAAc;AACtB,eAASwpB,IAAI,GAAGA,IAAIxpB,EAAM,aAAa,MAAM,QAAQwpB;AACnD,YAAIxpB,EAAM,aAAa,MAAMwpB,CAAC,MAAM;AAClC,iBAAO;AAAA;AAKb,WAAO;AAAA,EACT;AAcA,SAAO;AAAA,IACL,gBAAAg3B;AAAA,IACA,qBAd0B,MAAM;AAChC,aAAO,SAAS,iBAAiB,YAAYG,CAAe,GAC5D,OAAO,SAAS,iBAAiB,aAAaE,CAAgB,GAC9D,OAAO,SAAS,iBAAiB,QAAQC,CAAW;AAAA,IACtD;AAAA,IAWE,wBAT6B,MAAM;AACnC,aAAO,SAAS,oBAAoB,YAAYH,CAAe,GAC/D,OAAO,SAAS,oBAAoB,aAAaE,CAAgB,GACjE,OAAO,SAAS,oBAAoB,QAAQC,CAAW;AAAA,IACzD;AAAA,EAKE;AAEJ;AClDO,SAASE,GAAsBC,GAA4BC,GAA8C;AAC9G,QAAMC,IAAavlD,EAAS,MACtByD,EAAY4hD,CAAM,IACb,CAAA,IAEFA,EAAO,MAAM,GAAG,CACxB,GAEKG,IAAcxlD,EAAS,MACvByD,EAAY6hD,CAAQ,IACf,CAAA,IAEF,OAAO,KAAKA,CAAQ,CAC5B,GAEKG,IAAuB,CAAC5N,GAAe6N,IAAe,OAAU;AACpE,UAAMC,IAA+B,CAAA,GAC/BC,IAAa/N,EAAM,OAAO,CAACpP,MAAS;AACxC,YAAMod,IAAcC,EAAard,GAAM8c,EAAW,KAAK,KAAKQ,EAAWtd,GAAM+c,EAAY,OAAOF,CAAQ;AACxG,aAAKO,KACHF,EAAmB,KAAKld,EAAK,IAAI,GAE5Bod;AAAA,IACT,CAAC;AACD,QAAIF,EAAmB,UAAU,CAACD,GAAc;AAC9C,YAAM,EAAE,aAAAne,EAAA,IAAgBj/B,GAAA,GAClB,EAAE,GAAAzF,MAAM8f,GAAK;AACnB,MAAA4kB,EAAY1kC,EAAE,mCAAmC,IAAI,MAAM8iD,EAAmB,KAAK,IAAI,CAAC;AAAA,IAC1F;AAEA,WAAOC;AAAA,EACT,GAEME,IAAe,CAACrd,GAAYud,MAAsB;AACtD,QAAIA,EAAQ,WAAW;AACrB,aAAO;AAET,aAASp4B,IAAI,GAAGA,IAAIo4B,EAAQ,QAAQp4B;AAClC,UAAIo4B,EAAQp4B,CAAC,EAAE,WAAW,GAAG;AAE3B,YAAI6a,EAAK,KAAK,YAAA,EAAc,SAASud,EAAQp4B,CAAC,CAAC;AAC7C,iBAAO;AAAA,aAEJ;AAEL,cAAMq4B,IAAYD,EAAQp4B,CAAC,EAAE,MAAM,GAAG;AACtC,YAAIq4B,EAAU,CAAC,MAAM,OAAOzd,GAAeC,CAAI,EAAE,WAAWwd,EAAU,CAAC,IAAI,GAAG;AAC5E,iBAAO;YACED,EAAQp4B,CAAC,MAAM4a,GAAeC,CAAI;AAC3C,iBAAO;AAAA,MAEX;AAEF,WAAO;AAAA,EACT,GAEMsd,IAAa,CAACtd,GAAY8H,GAAqBlT,MAA8C;AACjG,QAAIkT,EAAK,WAAW,KAAK9sC,EAAY45B,CAAK;AACxC,aAAO;AAET,aAAS1J,IAAI,GAAGA,IAAI4c,EAAK,QAAQ5c,KAAK;AACpC,UAAI4c,EAAK5c,CAAC,MAAM,OAAO0J,EAAMkT,EAAK5c,CAAC,CAAC,KAAK8U,EAAK;AAE5C,eAAO;AACT,UAAW8H,EAAK5c,CAAC,EAAE,WAAW,GAAG,KAAK0J,EAAMkT,EAAK5c,CAAC,CAAC,KAAK8U,EAAK;AAE3D,eAAO;AACF;AAEL,cAAMwd,IAAY1V,EAAK5c,CAAC,EAAE,MAAM,GAAG;AACnC,YAAIsyB,EAAU,CAAC,MAAM,OAAOzd,GAAeC,CAAI,EAAE,WAAWwd,EAAU,CAAC,IAAI,GAAG,KAAK5oB,EAAMkT,EAAK5c,CAAC,CAAC,IAAI8U,EAAK;AACvG,iBAAO;AACT,YAAW8H,EAAK5c,CAAC,MAAM6U,GAAeC,CAAI,KAAKpL,EAAMkT,EAAK5c,CAAC,CAAC,IAAI8U,EAAK;AACnE,iBAAO;AAAA,MAEX;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL,sBAAAgd;AAAA,EAAA;AAEJ;;;;;;;;;;;;;;;;;;;;;;;;ACnFA,UAAM7lD,IAAQC,GAsBR0B,IAAOC,GAKP0kD,IAAcxkD,EAAA,GAGd,EAAE,sBAAA+jD,EAAA,IAAyBL,GAAsBxlD,EAAM,QAAQA,EAAM,QAAQ;AAEnF,aAASumD,EAAOtO,GAAsB;AACpC,MAAIj4C,EAAM,YACNuF,GAAO0yC,CAAK,KAAKA,EAAM,WAAW,KACtCt2C,EAAK,UAAUkkD,EAAqB5N,CAAK,CAAC;AAAA,IAC5C;AAEA,UAAM,EAAE,gBAAAuO,EAAA,IAAmBC,GAAYH,GAAaC,CAAM,GAEpD,EAAE,gBAAAvB,EAAA,IAAmBE,GAAA,GACrB,EAAE,GAAAjiD,EAAA,IAAM/C,EAAA;2BAIZQ,EA8BM,OAAA;AAAA,eA7BA;AAAA,MAAJ,KAAI4lD;AAAA,MACJ,WAAM,mBAAiB;AAAA,gCACiBrmD,EAAA;AAAA,QAA4C,yBAAA6E,EAAA0hD,CAAA,KAAkB1hD,EAAAkgD,CAAA;AAAA,wCAAsDlgD,EAAAkgD,CAAA;AAAA,6BAA2C/kD,EAAA,OAAO,EAAA,GAAA;AAAA,6BAAsCA,EAAA,IAAI,EAAA,GAAA;AAAA,uCAAkDA,EAAA;AAAA,sCAAiDA,EAAA;AAAA,MAAA;MAS1V,kCAAY0B,EAAI,SAAA,GAAA,CAAA,MAAA,CAAA;AAAA,IAAA;MAGT1B,EAAA,YADRQ,EAAA,GAAAC,EAGE,OAHFS,EAGE,KAEW2D,EAAAkgD,CAAA,UADbtkD,EAKM,OALNuF,IAKM/E,EADD4D,EAAA7B,CAAA,EAAC,iCAAA,CAAA,GAAA,CAAA,WAENvC,EAKM,OALN6F,IAKMrF,EADD4D,EAAA7B,CAAA,EAAC,wCAAA,CAAA,GAAA,CAAA;AAAA,IAAA;;IChFJyjD,KAAe5kD,EAA6B,MAAS;AAEpD,SAAS6kD,GAA4BzkD,GAA+B;AACzE,EAAAwkD,GAAa,QAAQxkD;AACvB;AAEO,SAAS0kD,GAA2Bl0B,IAAqB,WAAW;AACzE,MACE7uB,EAAY6iD,GAAa,KAAK,KAC9B7iD,EAAY6iD,GAAa,MAAM,OAAO,KACtC7iD,EAAY6iD,GAAa,MAAM,QAAQh0B,CAAU,CAAC;AAElD,UAAM,IAAI,MAAM,oEAAoE;AAGtF,SAAO;AAAA,IACL,aAAag0B,GAAa,MAAM,QAAQh0B,CAAU,EAAE;AAAA,IACpD,eAAeg0B,GAAa,MAAM,QAAQh0B,CAAU,EAAE;AAAA,IACtD,uBAAuBg0B,GAAa,MAAM,QAAQh0B,CAAU,EAAE;AAAA,IAC9D,YAAYg0B,GAAa,MAAM,QAAQh0B,CAAU,EAAE;AAAA,IACnD,aAAag0B,GAAa,MAAM,QAAQh0B,CAAU,EAAE;AAAA,EAAA;AAExD;ACtBO,SAASm0B,GAAgBx9C,GAAuD;AA+BrF,SAAO;AAAA,IACL,0BA/B+B,CAC/By8B,GACAghB,IAAQz9C,EAAO,YACf09C,IAAS19C,EAAO,gBAGdA,EAAO,gBACP,aACAy9C,IACA,OACAC,KACCjhB,EAAM,IAAI,iBAAiB,IAAI,OAAOA,EAAM,IAAI,iBAAiB,MAClE,MACAA,EAAM,IAAI,QACV;AAAA,IAkBF,kCAduC,CAACA,MACjCz8B,EAAO,wBAAwB,qBAAqBy8B,EAAM,IAAI,QAAQ;AAAA,IAc7E,yBAX8B,CAAC4D,GAAgBod,IAAQz9C,EAAO,YAAY09C,IAAS19C,EAAO,gBACnFA,EAAO,gBAAgB,aAAay9C,IAAQ,OAAOC,IAAS,MAAMrd,IAAU;AAAA,IAWnF,iCARsC,CAACA,MAChCrgC,EAAO,wBAAwB,qBAAqBqgC,IAAU;AAAA,EAOrE;AAEJ;ACrCO,SAASsd,GACdj+B,IAA0C,QAC1CwB,GACA;AACA,QAAM08B,IAAyB,CAACl+B,MAAgC;AAC9D,UAAM0U,IAAgC,CAAA;AACtC,aAASzP,IAAI,GAAGA,IAAIzD,EAAmBxB,CAAS,EAAE,UAAU,QAAQiF;AAClE,MAAAyP,EAAMlT,EAAmBxB,CAAS,EAAE,UAAUiF,CAAC,CAAC,IAAIzD,EAAmBxB,CAAS,EAAE;AAEpF,WAAO0U;AAAA,EACT,GAEMypB,IAAc9mD,EAAS,MACvB2oB,IACK;AAAA,IACL,GAAGk+B,EAAuBl+B,CAAS;AAAA,EAAA,IAGhC;AAAA,IACL,GAAGk+B,EAAuB1+B,GAAa,KAAK;AAAA,IAC5C,GAAG0+B,EAAuB1+B,GAAa,KAAK;AAAA,IAC5C,GAAG0+B,EAAuB1+B,GAAa,KAAK;AAAA,IAC5C,GAAG0+B,EAAuB1+B,GAAa,QAAQ;AAAA,EAAA,CAElD,GAEK4+B,IAAe/mD,EAAS,MACrB,OAAO,KAAK8mD,EAAY,KAAK,EAAE,KAAK,GAAG,CAC/C;AAED,SAAO;AAAA,IACL,aAAAA;AAAA,IACA,cAAAC;AAAA,EAAA;AAEJ;AC5BA,MAAM1+B,KAAY,iBACLE,KAAS,SACTy+B,KAAa,OAEpB16B,KAAsB,IAEf26B,KAAsB,CAACj2C,GAA6BgW,MAC/DmO,GAA4BnkB,GAAQgW,GAAKqB,IAAW,CAAA,GAAI2+B,IAAYz+B,EAAM,GAE/D2+B,KAAa,CAACl2C,GAA6ByD,MACtDrD,GAAwBJ,GAAQqX,KAAY,QAAQ,EAAE,IAAA5T,KAAMuyC,IAAYz+B,EAAM,GAEnE4+B,KAAc,CAACn2C,GAA6BlP,MACvDy0B,GAAiDvlB,GAAQlP,GAAMumB,IAAW,CAAA,GAAI2+B,IAAYz+B,EAAM,GAErF6+B,KAAc,CAACp2C,GAA6ByD,GAAe3S,MACtEy1B,GAAiDvmB,GAAQlP,GAAMumB,KAAY,QAAQ,EAAE,IAAA5T,EAAA,GAAMuyC,IAAYz+B,EAAM,GAElG8+B,KAAc,CAACr2C,GAA6ByD,MACvD6yC,GAAyBt2C,GAAQqX,KAAY,QAAQ,EAAE,IAAA5T,KAAMuyC,IAAYz+B,EAAM,GAEpEg/B,KAAmB,CAACv2C,GAA6B4E,MACrD,IAAI,QAAsB,CAACyG,GAASC,MAAW;AACpD,EAAAkrC,GAAqBx2C,GAAQ4E,CAAK,EAC/B,KAAK,CAAC0V,MAAc;AACnB,QAAI1V,EAAM,WAAW;AACnB,aAAOyG,EAAQ,CAAA,CAAE;AACnB,QAAWiP,EAAU,WAAW;AAC9B,aAAOhP,EAAOgP,CAAS;AACzB,QACEA,EAAU,MAAM,CAAC9iB,MACRA,EAAI,WAAW6kB,EACvB,GACD;AACA,YAAMo6B,IAAuBn8B,EAAU,QAAQ,CAACpP,MAAaA,EAAS,KAAK,MAAM;AACjF,aAAOG,EAAQorC,CAAM;AAAA,IACvB;AACE,aAAOnrC,EAAOgP,CAAS;AAAA,EAE3B,CAAC,EACA,MAAM,CAACV,MAECtO,EAAOsO,CAAG,CAClB;AACL,CAAC;AAGH,eAAe48B,GAAqBx2C,GAA6B4E,GAAiC;AAChG,QAAM4X,IAAa,KAAK,KAAK5X,EAAM,SAAS0W,EAAmB,GACzDhB,IAA6B,CAAA;AACnC,MAAI1V,EAAM,WAAW,UAAU,QAAQ,QAAQ,EAAE;AAEjD,WAASgY,IAAI,GAAGA,IAAIJ,GAAYI,KAAK;AACnC,UAAMH,IAASG,IAAItB,IAEbo7B,IAAU,EAAE,QADF9xC,EAAM,MAAM6X,GAAQA,IAASnB,EAAmB,EACtC,GACpB9jB,IAAM,MAAMwI,IAAS,IAAIqX,IAAW,KAAK,UAAUq/B,CAAO,CAAC;AACjE,IAAAp8B,EAAU,KAAK9iB,CAAG;AAAA,EACpB;AACA,SAAO8iB;AACT;;;;;;;;;;;;;;;;;;;;;;;;;;AC1DA,UAAM1rB,IAAQC,GAkCR,EAAE,mBAAAwI,EAAA,IAAsBC,GAAA,GAGxBg+C,IAAeE,GAA2B5mD,EAAM,UAAU,GAC1D,EAAE,aAAA+nD,MAAgBrB,GAClB,EAAE,0BAAAsB,EAAA,IAA6BnB,GAAgBH,CAAY,GAE3DuB,IAAWnmD,EAAgD,IAAI,GAE/D,EAAE,OAAAgkC,GAAO,YAAA99B,MAAe+D,GAAO/L,CAAK,GAEpCkoD,IAAcpmD,EAAI,EAAE,GAEpB,EAAE,GAAAmB,EAAA,IAAM/C,EAAA,GAERioD,IAAc,CAACriB,MACf1hC,GAASpE,EAAM,QAAQ,KAAKoE,GAASpE,EAAM,SAAS,IAC/CgoD,EAAyBliB,GAAO9lC,EAAM,UAAUA,EAAM,SAAS,IAEjEgoD,EAAyBliB,GAAO4gB,EAAa,YAAYA,EAAa,WAAW;AAG1F,WAAA7jD;AAAA,MACE,CAACijC,GAAO99B,CAAU;AAAA,MAClB,OAAO,CAACogD,GAAUC,CAAU,MAAM;AAGhC,YAFAJ,EAAS,QAAQ,MACjBC,EAAY,QAAQ5tB,IAChB8tB,GAAU;AACZ,UAAAH,EAAS,QAAQhjD,GAAUmjD,CAAQ,GAC/BH,EAAS,UACXC,EAAY,QAAQC,EAAYF,EAAS,KAAK;AAEhD;AAAA,QACF;AACA,YAAII,GAAY;AACd,cAAI;AACF,YAAAJ,EAAS,QAAQ,MAAMX,GAAWS,GAAaM,CAAU;AAAA,UAC3D,SAASx/C,GAAO;AACd,YAAAJ,EAAkBI,CAAK;AAAA,UACzB;AACA,UAAIo/C,EAAS,UACXC,EAAY,QAAQC,EAAYF,EAAS,KAAK;AAAA,QAElD;AAAA,MACF;AAAA,MACA,EAAE,WAAW,GAAA;AAAA,IAAK;MAMVhoD,EAAA,cADRS,EAKK,MALLS,IAKKD,EADAjB,EAAA,KAAK,GAAA,CAAA;MAGFA,EAAA,mBADRS,EAOC,OAAA;AAAA;QALC,KAAI;AAAA,QACH,KAAKwnD,EAAA;AAAA,QACL,OAAOjoD,EAAA;AAAA,QACP,QAAQA,EAAA;AAAA,QACR,UAAOA,EAAA,WAAW;AAAA,MAAA,0BAErBM,EAqBO+nD,IAAA;AAAA;QAnBJ,YAAUxjD,EAAAw1B,EAAA;AAAA,QACV,KAAK4tB,EAAA;AAAA,QACL,OAAOjoD,EAAA;AAAA,QACP,QAAQA,EAAA;AAAA,QACT,OAAA;AAAA,QACA,SAAQ;AAAA,QACR,aAAU;AAAA,QACV,OAAK4E,GAAA,CAAC,kBACE5E,EAAA,WAAW,CAAA;AAAA,QAClB,gBAAcA,EAAA,qBAAqB,SAAYA,EAAA;AAAA,MAAA;QAErC,eACT,MAKM;AAAA,UALNgB,EAKM,OALNsF,IAKM;AAAA,YAJJ1F,EAGEO,IAAA;AAAA,cAFA,eAAA;AAAA,cACA,OAAM;AAAA,YAAA;;;;;MAMN6mD,EAAA,UAAahoD,EAAA,mBAAmBA,EAAA,eADxCQ,EAAA,GAAAC,EAsBM,OAtBN8F,IAsBM;AAAA,QAjBIvG,EAAA,wBADRM,EAQOgN,IAAA;AAAA;UANL,OAAA;AAAA,QAAA;qBAEA,MAGO;AAAA,YAHP1M,EAGO2M,IAAA,MAAA;AAAA,yBAFL,MAAgH;AAAA,gBAAhHvM,EAAgH,QAAhHwF,IAAgHvF,EAA7D4D,EAAA7B,CAAA,sDAAqD,KAAC,CAAA;AAAA,gCACzGhC,EAAI,MAAA,MAAA,MAAA,EAAA;AAAA,oBAAGgnD,EAAA,MAAS,MAAM,WAAW,GAAA,CAAA;AAAA,cAAA;;;;;;QAI7BhoD,EAAA,mBADRM,EAQOgN,IAAA;AAAA;UANL,OAAA;AAAA,QAAA;qBAEA,MAGO;AAAA,YAHP1M,EAGO2M,IAAA,MAAA;AAAA,yBAFL,MAA4G;AAAA,gBAA5GvM,EAA4G,QAA5GyF,IAA4GxF,EAAxD4D,EAAA7B,CAAA,iDAAgD,KAAC,CAAA;AAAA,gCACrGhC,EAAI,MAAA,MAAA,MAAA,EAAA;AAAA,oBAAGgnD,EAAA,MAAS,MAAM,MAAM,GAAA,CAAA;AAAA,cAAA;;;;;;;MAIlCxmD,GAGEC,EAAA,QAAA,UAAA,EADC,OAAOumD,EAAA,OAAQ;AAAA,IAAA;;;;;;;;ACtJpB,UAAMjoD,IAAQC,GASR,EAAE,EAAA,IAAMC,EAAA,GACR,EAAE,aAAAqoD,EAAA,IAAgB51B,GAAA,GAElB61B,IAAOpoD,EAAS,MACbmoD,IAAc,YAAYvoD,EAAM,OACxC;2BAICO,EASO+F,IAAA;AAAA,MARJ,eAAaxB,EAAA2R,EAAA,EAAc,KAAK,KAAK;AAAA,MACtC,MAAK;AAAA,MACL,OAAA;AAAA,MACA,QAAO;AAAA,MACP,KAAI;AAAA,MACH,MAAM+xC,EAAA;AAAA,IAAA;iBAEP,MAAiD;AAAA,YAA9C1jD,EAAA,CAAA,EAAC,wCAAA,CAAA,GAAA,CAAA;AAAA,MAAA;;;;ICPK2jD,KAAe;AAAA,EAE1B,OAAO;AACT;;;;;;;;;;;;;;;;;;;;;;;ACAA,UAAMzoD,IAAQC,GAcR0B,IAAOC,GAMP,EAAE,GAAAqB,EAAA,IAAM/C,EAAA,GACRwoD,IAAwBnjB,GAAA,GACxB,EAAE,QAAAC,EAAA,IAAWtM,GAAYwvB,CAAqB,GAC9CvvB,IAAmBrG,GAAA,GACnB,EAAE,OAAAtE,GAAO,iBAAAuE,MAAoBmG,GAAYC,CAAgB,GACzD,EAAE,mBAAAvC,EAAA,IAAsBC,GAAA,GAExBpL,IAAOrrB,EAAkC,MACzCilC,GAAaG,EAAO,KAAK,IACpBA,EAAO,MAAM,SAAS,cAAcijB,GAAa,QAAQlgC,GAAa,QAAQA,GAAa,QACzF+c,GAAyBE,EAAO,KAAK,IACvCjd,GAAa,QAEf,IACR,GAEKogC,IAAsBvoD,EAAS,MAC5B,CAACJ,EAAM,cACf,GAEK4oD,IAAaxoD,EAA6C,MAAM;AACpE,UAAI,GAACilC,GAAaG,EAAO,KAAK,KAAKjgC,GAAOigC,EAAO,MAAM,SAAS,WAAW;AAE3E,eAAO;AAAA,UACL,OAAO;AAAA,YACL,aAAa;AAAA,YACb,QAAQ;AAAA,UAAA;AAAA,UAEV,KAAK;AAAA,YACH,OAAOA,EAAO,MAAM,SAAS;AAAA,YAC7B,WAAWA,EAAO,MAAM,SAAS;AAAA,YACjC,gBAAgB;AAAA,UAAA;AAAA,UAElB,OAAO;AAAA,YACL,YAAY;AAAA,UAAA;AAAA,QACd;AAAA,IAEJ,CAAC,GAEK,EAAE,IAAAjB,EAAA,IAAOsB,GAAmBL,GAAQmjB,CAAmB,GAEvD,EAAE,qBAAApgD,EAAA,IAAwBG,GAAA,GAE1BC,IAAY,MAAM;AAEtB,UADA47B,EAAG,MAAM,OAAA,GACLA,EAAG,MAAM,UAAU;AACrB,QAAAh8B,EAAA;AACA;AAAA,MACF;AACA,MAAA5G,EAAK,WAAW;AAAA,IAClB,GAEMknD,IAAsB,CAAC/lD,MAAsB;AACjD,MAAIA,KACJnB,EAAK,SAAS;AAAA,IAChB,GAEMmnD,IAAc,MAAM;AACxB,MAAKxjB,GAAyBE,EAAO,KAAK,KAC1C7jC,EAAK,aAAa6jC,EAAO,MAAM,IAAI,KAAK;AAAA,IAC1C;AAEA,WAAAnhC,EAAa;AAAA,MACX,SAASsE;AAAA,IAAA,CACV;;aAIY1I,EAAA,eAAXS,EAqEM,OAAAS,IAAA;AAAA,QApEQlB,EAAA,gBAAZM,EAMOgN,IAAA,EAAA,KAAA,KAAA;AAAA,qBALL,MAIO;AAAA,YAJP1M,EAIO2M,IAAA,MAAA;AAAA,yBAHL,MAEM;AAAA,gBAFNvM,EAEM,OAFNgF,IAEM;AAAA,kBADJpF,EAAmCO,IAAA,EAAhB,eAAA,IAAa;AAAA,gBAAA;;;;;;;QAItB0D,EAAAwgC,EAAA,EAAyBxgC,EAAA0gC,CAAA,CAAM,UAA/C9kC,EAuDW0F,IAAA,EAAA,KAAA,KAAA;AAAA,UAtDTvF,EAMO0M,IAAA,MAAA;AAAA,uBALL,MAIO;AAAA,cAJP1M,EAIO2M,IAAA,MAAA;AAAA,2BAHL,MAEO;AAAA,kBAFP3M,EAEOyF,IAAA;AAAA,oBAFA,WAAYwiD,GAAW,CAAA,MAAA,CAAA;AAAA,kBAAA;+BAC5B,MAAiD;AAAA,0BAA9ChkD,EAAA7B,CAAA,EAAC,wCAAA,CAAA,GAAA,CAAA;AAAA,oBAAA;;;;;;;;;UAIVpC,EAQO0M,IAAA,MAAA;AAAA,uBAPL,MAMO;AAAA,cANP1M,EAMO2M,IAAA,MAAA;AAAA,2BALL,MAIE;AAAA,kBAJF3M,EAIEkoD,IAAA;AAAA,gCAHSjkD,EAAA0gC,CAAA,EAAO,MAAM;AAAA,kEAAb1gC,EAAA0gC,CAAA,EAAO,MAAM,cAAW/gC;AAAA,oBAChC,OAAOK,EAAA7B,CAAA,EAAC,+CAAA;AAAA,oBACR,MAAM6B,EAAA7B,CAAA,EAAC,8CAAA;AAAA,kBAAA;;;;;;;UAIFhD,EAAA,kBAAkB6E,EAAA0pB,CAAA,UAA9BjuB,EAkBOgN,IAAA,EAAA,KAAA,EAAA,GAAA;AAAA,uBAjBL,MAgBO;AAAA,cAhBP1M,EAgBO2M,IAAA,MAAA;AAAA,2BAfL,MAcqB;AAAA,kBAdrB3M,EAcqB25C,IAAA;AAAA,oBAbnB,SAAQ;AAAA,oBACR,QAAO;AAAA,kBAAA;+BAEP,MASE;AAAA,sBATF35C,EASE08C,IAAA;AAAA,wBARS,YAAAz4C,EAAA0pB,CAAA,EAAM;AAAA,wBAAN,uBAAAjqB,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAE,MAAAK,EAAA0pB,CAAA,EAAM,UAAO/pB;AAAA,wBACrB,cAAYK,EAAA8xB,CAAA;AAAA,wBACZ,OAAO9xB,EAAA7B,CAAA,EAAC,qCAAA;AAAA,wBACR,oBAAkB6B,EAAAiuB,CAAA;AAAA,wBACnB,WAAQ;AAAA,wBACR,WAAA;AAAA,wBACA,UAAA;AAAA,wBACC,oBAAkBjuB,EAAA6gC,EAAA;AAAA,sBAAA;;;;;;;;;sBAK3BplC,EAQOgN,IAAA,EAAA,KAAA,KAAA;AAAA,uBAPL,MAMO;AAAA,cANP1M,EAMO2M,IAAA,MAAA;AAAA,2BALL,MAIE;AAAA,kBAJF3M,EAIEkoD,IAAA;AAAA,gCAHSjkD,EAAA0gC,CAAA,EAAO,MAAM;AAAA,kEAAb1gC,EAAA0gC,CAAA,EAAO,MAAM,SAAM/gC;AAAA,oBAC3B,OAAOK,EAAA7B,CAAA,EAAC,0CAAA;AAAA,oBACR,GAAG6B,EAAAy/B,CAAA,EAAG,OAAO,MAAM;AAAA,kBAAA;;;;;;;UAI1B1jC,EASO0M,IAAA,MAAA;AAAA,uBARL,MAOO;AAAA,cAPP1M,EAOO2M,IAAA,MAAA;AAAA,2BANL,MAKE;AAAA,kBALF3M,EAKE6U,IAAA;AAAA,gCAJS5Q,EAAA0gC,CAAA,EAAO,MAAM;AAAA,kEAAb1gC,EAAA0gC,CAAA,EAAO,MAAM,aAAU/gC;AAAA,oBAC/B,OAAOK,EAAA7B,CAAA,EAAC,8CAAA;AAAA,oBACT,SAAQ;AAAA,oBACR,gBAAA;AAAA,kBAAA;;;;;;;kBAKa6B,EAAAugC,EAAA,EAAavgC,EAAA0gC,CAAA,CAAM,UACtC9kC,EAEM,OAAA6F,IAAArF,EADD4D,EAAA0gC,CAAA,EAAO,QAAQ,GAAA,CAAA;kBAIxBjlC,EAyJUwI,IAAA;AAAA;QAvJP,eAAa9I,EAAA;AAAA,QACb,aAAW;AAAA,QACZ,OAAA;AAAA,QACC,uBAAoB4oD;AAAA,MAAA;mBAErB,MAiJQ;AAAA,UAjJK5oD,EAAA,mBAAbM,EAiJQgB,IAAA,EAAA,KAAA,KAAA;AAAA,uBAhJN,MAEiB;AAAA,cAFjBV,EAEiBmI,IAAA;AAAA,gBAFA,mCAAW6/C,EAAmB,EAAA;AAAA,cAAA;2BAC7C,MAA+G;AAAA,kBAA5G3iD,EAAAhF,EAAAuqB,EAAA,UAAS3mB,EAAAyjB,EAAA,EAAa,QAAQzjB,EAAA7B,CAAA,uCAAuC6B,EAAA7B,CAAA,EAAC,iCAAA,CAAA,GAAA,CAAA;AAAA,gBAAA;;;cAE3EpC,EAkIYoI,IAAA,MAAA;AAAA,2BAjIV,MAKM;AAAA,kBAJEhJ,EAAA,WADRQ,EAAA,GAAAC,EAKM,OALN8F,IAKM;AAAA,oBADJ3F,EAAmCO,IAAA,EAAhB,eAAA,IAAa;AAAA,kBAAA,MAGrB0D,EAAAwgC,EAAA,EAAyBxgC,EAAA0gC,CAAA,CAAM,KAD5C/kC,EAAA,GAAAC,EAiEM,OAjEN+F,IAiEM;AAAA,oBA7DJxF,EAKM,OALNyF,IAKM;AAAA,sBAJJ7F,EAGEmoD,IAAA;AAAA,wBAFC,eAAalkD,EAAA0gC,CAAA,EAAO;AAAA,wBACpB,OAAO1gC,EAAA0gC,CAAA;AAAA,sBAAA;;oBAGZ3kC,EAMO0M,IAAA,MAAA;AAAA,iCALL,MAIO;AAAA,wBAJP1M,EAIO2M,IAAA,MAAA;AAAA,qCAHL,MAEO;AAAA,4BAFP3M,EAEOyF,IAAA;AAAA,8BAFA,WAAYwiD,GAAW,CAAA,MAAA,CAAA;AAAA,4BAAA;yCAC5B,MAAiD;AAAA,oCAA9ChkD,EAAA7B,CAAA,EAAC,wCAAA,CAAA,GAAA,CAAA;AAAA,8BAAA;;;;;;;;;oBAIVpC,EAQO0M,IAAA,MAAA;AAAA,iCAPL,MAMO;AAAA,wBANP1M,EAMO2M,IAAA,MAAA;AAAA,qCALL,MAIE;AAAA,4BAJF3M,EAIEkoD,IAAA;AAAA,0CAHSjkD,EAAA0gC,CAAA,EAAO,MAAM;AAAA,4EAAb1gC,EAAA0gC,CAAA,EAAO,MAAM,cAAW/gC;AAAA,8BAChC,OAAOK,EAAA7B,CAAA,EAAC,+CAAA;AAAA,8BACR,MAAM6B,EAAA7B,CAAA,EAAC,8CAAA;AAAA,4BAAA;;;;;;;oBAIFhD,EAAA,kBAAkB6E,EAAA0pB,CAAA,UAA9BjuB,EAkBOgN,IAAA,EAAA,KAAA,EAAA,GAAA;AAAA,iCAjBL,MAgBO;AAAA,wBAhBP1M,EAgBO2M,IAAA,MAAA;AAAA,qCAfL,MAcqB;AAAA,4BAdrB3M,EAcqB25C,IAAA;AAAA,8BAbnB,SAAQ;AAAA,8BACR,QAAO;AAAA,4BAAA;yCAEP,MASE;AAAA,gCATF35C,EASE08C,IAAA;AAAA,kCARS,YAAAz4C,EAAA0pB,CAAA,EAAM;AAAA,kCAAN,uBAAAjqB,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAE,MAAAK,EAAA0pB,CAAA,EAAM,UAAO/pB;AAAA,kCACrB,cAAYK,EAAA8xB,CAAA;AAAA,kCACZ,OAAO9xB,EAAA7B,CAAA,EAAC,qCAAA;AAAA,kCACR,oBAAkB6B,EAAAiuB,CAAA;AAAA,kCACnB,WAAQ;AAAA,kCACR,WAAA;AAAA,kCACA,UAAA;AAAA,kCACC,oBAAkBjuB,EAAA6gC,EAAA;AAAA,gCAAA;;;;;;;;;gCAK3BplC,EASOgN,IAAA,EAAA,KAAA,KAAA;AAAA,iCARL,MAOO;AAAA,wBAPP1M,EAOO2M,IAAA,MAAA;AAAA,qCANL,MAKE;AAAA,4BALF3M,EAKEkoD,IAAA;AAAA,0CAJSjkD,EAAA0gC,CAAA,EAAO,MAAM;AAAA,4EAAb1gC,EAAA0gC,CAAA,EAAO,MAAM,SAAM/gC;AAAA,8BAC3B,OAAOK,EAAA7B,CAAA,EAAC,0CAAA;AAAA,8BACR,GAAG6B,EAAAy/B,CAAA,EAAG,OAAO,MAAM;AAAA,8BACpB,UAAA;AAAA,4BAAA;;;;;;;oBAIN1jC,EASO0M,IAAA,MAAA;AAAA,iCARL,MAOO;AAAA,wBAPP1M,EAOO2M,IAAA,MAAA;AAAA,qCANL,MAKE;AAAA,4BALF3M,EAKE6U,IAAA;AAAA,0CAJS5Q,EAAA0gC,CAAA,EAAO,MAAM;AAAA,4EAAb1gC,EAAA0gC,CAAA,EAAO,MAAM,aAAU/gC;AAAA,8BAC/B,OAAOK,EAAA7B,CAAA,EAAC,8CAAA;AAAA,8BACT,SAAQ;AAAA,8BACR,gBAAA;AAAA,4BAAA;;;;;;;wBAMK6B,EAAAugC,EAAA,EAAavgC,EAAA0gC,CAAA,CAAM,KADhC/kC,EAAA,GAAAC,EAwDM,OAxDNu9B,IAwDM;AAAA,oBApDJh9B,EAaM,OAbNi9B,IAaM;AAAA,sBAZJj9B,EAEK,MAFL29C,IAEK19C,EADA4D,EAAA7B,CAAA,2CAA0C,MAC/C,CAAA;AAAA,sBACAxB,GAGEC,EAAA,QAAA,WAAA,EADC,YAAaoD,EAAA0gC,CAAA,GAAM;AAAA,sBAGb1gC,EAAA0gC,CAAA,EAAO,SAAS,6BADzBjlC,EAIEyoD,IAAA;AAAA;wBAFC,eAAa;AAAA,wBACb,OAAOJ,EAAA;AAAA,sBAAA;;oBAGZ/nD,EAIO0M,IAAA,MAAA;AAAA,iCAHL,MAEO;AAAA,wBAFP1M,EAEO2M,IAAA,MAAA;AAAA,qCADL,MAAyD;AAAA,4BAAzD3M,EAAyDooD,IAAA;AAAA,8BAArC,YAAUnkD,EAAA0gC,CAAA,EAAO,SAAS;AAAA,4BAAA;;;;;;;oBAIzC1gC,EAAA0gC,CAAA,EAAO,SAAS,wBADzB/kC,KAAAC,EASM,OATNkkD,IASM;AAAA,sBALJ/jD,EAIEE,IAAA;AAAA,wBAHA,MAAK;AAAA,wBACL,OAAM;AAAA,wBACN,MAAK;AAAA,sBAAA;0BACF+D,EAAA7B,CAAA,EAAC,wCAAA,CAAA,GAAA,CAAA;AAAA,oBAAA;oBAERpC,EAEO+I,IAAA;AAAA,sBAFA,OAAO9E,EAAA7B,CAAA,EAAC,4CAAA;AAAA,oBAAA;iCACb,MAA2B;AAAA,4BAAxB6B,EAAA0gC,CAAA,EAAO,SAAS,KAAK,GAAA,CAAA;AAAA,sBAAA;;;oBAE1B3kC,EAEO+I,IAAA;AAAA,sBAFA,OAAO9E,EAAA7B,CAAA,EAAC,kDAAA;AAAA,oBAAA;iCACb,MAA4C;AAAA,wBAAzCiD,EAAAhF,EAAA4D,EAAA0gC,CAAA,EAAO,SAAS,YAAY,KAAI,IAAA,CAAA,GAAA,CAAA;AAAA,sBAAA;;;oBAErB1gC,EAAA0gC,CAAA,EAAO,SAAS,cAAS,gBAAzC9kC,EAUW0F,IAAA,EAAA,KAAA,KAAA;AAAA,sBATTvF,EAEO+I,IAAA;AAAA,wBAFA,OAAO9E,EAAA7B,CAAA,EAAC,iDAAA;AAAA,sBAAA;mCACb,MAAgC;AAAA,8BAA7B6B,EAAA0gC,CAAA,EAAO,SAAS,UAAU,GAAA,CAAA;AAAA,wBAAA;;;sBAE/B3kC,EAEO+I,IAAA;AAAA,wBAFA,OAAO9E,EAAA7B,CAAA,EAAC,kDAAA;AAAA,sBAAA;mCACb,MAAiC;AAAA,8BAA9B6B,EAAA0gC,CAAA,EAAO,SAAS,WAAW,GAAA,CAAA;AAAA,wBAAA;;;sBAEhC3kC,EAEO+I,IAAA;AAAA,wBAFA,OAAO9E,EAAA7B,CAAA,EAAC,oDAAA;AAAA,sBAAA;mCACb,MAAmC;AAAA,8BAAhC6B,EAAA0gC,CAAA,EAAO,SAAS,aAAa,GAAA,CAAA;AAAA,wBAAA;;;;oBAGpC3kC,EAEO+I,IAAA;AAAA,sBAFA,OAAO9E,EAAA7B,CAAA,EAAC,8CAAA;AAAA,oBAAA;iCACb,MAA6B;AAAA,4BAA1B6B,EAAA0gC,CAAA,EAAO,SAAS,OAAO,GAAA,CAAA;AAAA,sBAAA;;;oBAE5B3kC,EAEO+I,IAAA;AAAA,sBAFA,OAAO9E,EAAA7B,CAAA,EAAC,gDAAA;AAAA,oBAAA;iCACb,MAA+B;AAAA,4BAA5B6B,EAAA0gC,CAAA,EAAO,SAAS,SAAS,GAAA,CAAA;AAAA,sBAAA;;;;;;;cAIlC3kC,EASeqI,IAAA,MAAA;AAAA,2BARb,MAAW;AAAA,kBAAXrI,EAAWsI,EAAA;AAAA,kBACXtI,EAMciI,GAAA;AAAA,oBALX,SAAS7I,EAAA;AAAA,oBACT,UAAUA,EAAA;AAAA,oBACV,WAAY0I,GAAS,CAAA,MAAA,CAAA;AAAA,kBAAA;+BAEtB,MAAgC;AAAA,0BAA7B7D,EAAA7B,CAAA,EAAC,uBAAA,CAAA,GAAA,CAAA;AAAA,oBAAA;;;;;;;;;;;;;;;;;;AC7Ud,UAAMtB,IAAOC,GAIP,EAAE,cAAAogB,EAAA,IAAiBC,GAAA,GAEnBf,IAAc,MAAM;AACxB,MAAAvf,EAAK,aAAa;AAAA,IACpB;2BAIEpB,EA8BQgB,IAAA,EA9BD,OAAM,sBAAkB;AAAA,iBAC7B,MA4BM;AAAA,QA5BNN,EA4BM,OA5BNE,IA4BM;AAAA,UA3BJN,EAoBW+lB,IAAA;AAAA,YAnBR,OAAO9hB,EAAAkd,CAAA;AAAA,YACR,SAAQ;AAAA,YACP,QAAQ;AAAA,YACT,OAAM;AAAA,UAAA;uBAEN,MAAsC;AAAA,8BAAtC/gB,EAAsC,OAAA,EAAjC,OAAM,yBAAA,GAAwB,MAAA,EAAA;AAAA,cACnCJ,EAAWsI,EAAA;AAAA,cACXlI,EAWM,OAAA,MAAA;AAAA,gBAVJJ,EASOyF,IAAA;AAAA,kBARL,MAAA;AAAA,kBACA,SAAQ;AAAA,kBACP,OAAO;AAAA,kBACP,QAAQ;AAAA,kBACT,OAAM;AAAA,kBACL,WAAY4a,GAAW,CAAA,MAAA,CAAA;AAAA,gBAAA;6BAExB,MAA0B;AAAA,oBAA1BrgB,EAA0BE,IAAA,EAAnB,MAAK,aAAW;AAAA,kBAAA;;;;;;;UAI7BE,EAKM,OALNgF,IAKM;AAAA,YAJJpF,EAGEO,IAAA;AAAA,cAFA,eAAA;AAAA,cACA,OAAM;AAAA,YAAA;;;;;;;ICvCV8nD,KAAoB,IACpBC,KAAkB,MAClBC,KAAiB;AAEhB,SAASC,KAAmB;AACjC,QAAM,EAAE,GAAApmD,EAAA,IAAM/C,EAAA,GAERopD,IAAgB,CAAC3rB,GAAiB4rB,MAA2B;AACjE,UAAMC,IAASD,IAAQ,uBAAuB;AAC9C,WAAI5rB,IAAUyrB,KACLnmD,EAAEumD,IAAS,iBAAiB,EAAE,OAAO,KAAK,MAAM7rB,IAAUyrB,EAAc,GAAG,IAEhFzrB,IAAUwrB,KACLlmD,EAAEumD,IAAS,kBAAkB,EAAE,OAAO,KAAK,MAAM7rB,IAAUwrB,EAAe,GAAG,IAElFxrB,IAAUurB,KACLjmD,EAAEumD,IAAS,oBAAoB,EAAE,OAAO,KAAK,MAAM7rB,IAAUurB,EAAiB,GAAG,IAEnFjmD,EAAEumD,IAAS,oBAAoB,EAAE,OAAO7rB,GAAS;AAAA,EAC1D;AAUA,SAAO;AAAA,IACL,oBATyB,CAACA,MACnB2rB,EAAc3rB,GAAS,EAAI;AAAA,IASlC,mBANwB,CAACA,MAClB2rB,EAAc3rB,GAAS,EAAK;AAAA,EAKnC;AAEJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpBA,UAAM39B,IAAQC,GAoDR0B,IAAOC,GAKP,EAAE,GAAAqB,EAAA,IAAM/C,EAAA,GAERupD,IAAS,MAAM;AACnB,MAAA9nD,EAAK,MAAM;AAAA,IACb,GACM85B,IAAU,MAAM;AACpB,MAAA95B,EAAK,OAAO;AAAA,IACd,GAEMwL,IAAO/M,EAAS,MAAM;AAC1B,UAAIJ,EAAM,gBAAgBqoB,GAAe,SAAU,QAAO;AAC1D,cAAQroB,EAAM,WAAA;AAAA,QACZ,KAAKuoB,GAAa;AAChB,iBAAOvoB,EAAM,gBAAgBqoB,GAAe,WAAW,cAAc;AAAA,QACvE,KAAKE,GAAa;AAChB,iBAAOvoB,EAAM,gBAAgBqoB,GAAe,WAAW,aAAa;AAAA,QACtE,KAAKE,GAAa;AAChB,iBAAOvoB,EAAM,gBAAgBqoB,GAAe,WAAW,cAAc;AAAA,QACvE,KAAKE,GAAa;AAChB,iBAAOvoB,EAAM,gBAAgBqoB,GAAe,WAAW,cAAc;AAAA,QACvE;AACE,iBAAO;AAAA,MAAA;AAAA,IAEb,CAAC,GAEKqhC,IAAsBtpD,EAAS,MAAM;AACzC,UAAI,CAACJ,EAAM,kBAAmB,QAAO;AACrC,YAAMqL,IAAQ,KAAK,KAAKrL,EAAM,iBAAiB;AAC/C,aAAOqL,IAAQ,MAAM,SAASA,IAAQ;AAAA,IACxC,CAAC,GAEKs+C,IAA0BvpD,EAAS,MACuB,CAACioB,GAAe,UAAUA,GAAe,KAAK,EAC9E,SAASroB,EAAM,WAAW,IAAI,SAASA,EAAM,eAC5E,GAEK4pD,IAAYxpD,EAAS,MAClBJ,EAAM,gBAAgBqoB,GAAe,WAAW,YAAY,SACpE,GAEKqT,IAAct7B,EAAS,MACpByD,EAAY7D,EAAM,GAAG,IAAI27B,KAAkB37B,EAAM,GACzD,GAEK47B,IAAmBx7B,EAAS,MAC5BJ,EAAM,WAAiB,KAClB,EAAAA,EAAM,cAAcuoB,GAAa,SAASvoB,EAAM,IAE1D,GAEK,EAAE,oBAAA6pD,EAAA,IAAuBR,GAAA;qBAKrBppD,EAAA,iBAAiBA,EAAA,kBAAkBA,EAAA,oBAD3CM,EAoEO+nD,IAAA;AAAA;MAlEJ,gBAAcroD,EAAA;AAAA,MACd,KAAKy7B,EAAA;AAAA,MACL,OAAOz7B,EAAA;AAAA,MACP,QAAQA,EAAA;AAAA,MACR,OAAOA,EAAA;AAAA,MACR,OAAM;AAAA,MACL,SAAAw7B;AAAA,MACA,QAAAguB;AAAA,IAAA;MAEU,eAAX,MAAyB,CAAA,GAAAllD,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAA,EAAA,CAAA;AAAA,MACd,WACT,MAYM;AAAA,QAXEtE,EAAA,eADRQ,EAAA,GAAAC,EAYM,OAZNS,IAYM;AAAA,UARJN,EAIEO,IAAA;AAAA,YAHA,eAAA;AAAA,YACC,MAAMnB,EAAA;AAAA,YACN,OAAOA,EAAA,WAAQ;AAAA,UAAA;UAElBgB,EAEM,OAFNgF,IAEM/E,EADD4D,EAAA7B,CAAA,EAAC,gCAAA,CAAA,GAAA,CAAA;AAAA,QAAA;QAIAhD,EAAA,kBADRQ,EAAA,GAAAC,EAiBM,OAjBN6F,IAiBM;AAAA,UAbJ1F,EAMEO,IAAA;AAAA,YALC,OAAOnB,EAAA;AAAA,YACR,eAAA;AAAA,YACC,MAAMA,EAAA;AAAA,YACN,OAAOA,EAAA,WAAQ;AAAA,YAChB,OAAM;AAAA,UAAA;UAGCA,EAAA,0CADTS,EAKM,OALN8F,IAKMtF,EADD4D,EAAA7B,CAAA,EAAC,mCAAA,CAAA,GAAA,CAAA;AAAA,cAIKhD,EAAA,iBADbQ,KAAAC,EAsBM,OAtBN+F,IAsBM;AAAA,UAlBJ5F,EAQoBO,IAAA;AAAA,YAPjB,OAAOnB,EAAA;AAAA,YACP,MAAMA,EAAA;AAAA,YACN,OAAOA,EAAA,WAAQ;AAAA,YAChB,OAAM;AAAA,YACL,eAAaA,EAAA,sBAAiB,OAAY,SAAYA,EAAA;AAAA,UAAA;uBAEvD,MAAyB;AAAA,kBAAtBypD,EAAA,KAAmB,GAAA,CAAA;AAAA,YAAA;;;UAExBzoD,EAQM,OARNyF,IAQM;AAAA,YAPDR,EAAAhF,EAAA4D,EAAA7B,CAAA,yCAAwC,KAC3C,CAAA;AAAA,YACQhD,EAAA,iBADRQ,EAAA,GAAAC,EAKO,QALPu9B,IAKO/8B,EADF4D,EAAA+kD,CAAA,EAAmB5pD,EAAA,aAAa,CAAA,GAAA,CAAA;;;;;kEAOhCA,EAAA,gBAAgB6E,EAAAujB,EAAA,EAAe,YAAYpoB,EAAA,OAAOA,EAAA,qBAD/DM,EAgDO+nD,IAAA;AAAA;MA9CJ,KAAK5sB,EAAA;AAAA,MACL,OAAOz7B,EAAA;AAAA,MACP,QAAQA,EAAA;AAAA,MACT,OAAM;AAAA,MACL,OAAOA,EAAA;AAAA,MACP,gBAAcA,EAAA;AAAA,MACd,QAAAwpD;AAAA,MACA,SAAAhuB;AAAA,IAAA;MAEU,eAAX,MAAyB,CAAA,GAAAl3B,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAA,EAAA,CAAA;AAAA,MACd,WACT,MAeM;AAAA,QAdEq3B,EAAA,SADRn7B,EAAA,GAAAC,EAeM,OAfNw9B,IAeM;AAAA,UAXJj9B,EAUM,OAAA;AAAA,YATJ,OAAM;AAAA,YACL,qBAAkBhB,EAAA,WAAQ,IAAA,MAAA;AAAA,UAAA;YAGnBkN,EAAA,MAAK,eADb5M,EAKEQ,IAAA;AAAA;cAHC,MAAMd,EAAA;AAAA,cACN,MAAMkN,EAAA;AAAA,cACN,OAAOy8C,EAAA;AAAA,YAAA;;;QAKN3pD,EAAA,YADRQ,EAAA,GAAAC,EAYM,OAZNk+C,IAYM;AAAA,UARJ/9C,EAIEE,IAAA;AAAA,YAHA,MAAK;AAAA,YACL,OAAM;AAAA,YACL,MAAMd,EAAA;AAAA,UAAA;UAETgB,EAEM,OAFN2jD,IAEM1jD,EADD4D,EAAA7B,CAAA,EAAC,6BAAA,CAAA,GAAA,CAAA;AAAA,QAAA;QAIAhD,EAAA,iBAAiBA,EAAA,4BADzBM,EAIEs7B,IAAA;AAAA;UAFC,yBAAuB57B,EAAA;AAAA,UACvB,cAAYA,EAAA;AAAA,QAAA;;;kEAKNA,EAAA,gBAAgB6E,EAAAujB,EAAA,EAAe,YAAYpoB,EAAA,OADxDQ,KAAAC,EAkCM,OAlCNqkD,IAkCM;AAAA,MA9BJ9jD,EAOC,OAAA;AAAA,QANE,KAAKy6B,EAAA;AAAA,QACL,OAAOz7B,EAAA;AAAA,QACP,QAAQA,EAAA;AAAA,QACT,KAAI;AAAA,QACH,gCAA6B0pD,EAAA,KAAuB;AAAA,QACpD,WAASluB;AAAA,MAAA;MAGJG,EAAA,SADRn7B,EAAA,GAAAC,EAgBM,OAhBNopD,IAgBM;AAAA,QAZJ7oD,EAWM,OAAA;AAAA,UAVJ,OAAM;AAAA,UACL,qBAAkBhB,EAAA,WAAQ,IAAA,MAAA;AAAA,QAAA;UAGnBkN,EAAA,MAAK,eADb5M,EAMEQ,IAAA;AAAA;YAJC,MAAMd,EAAA;AAAA,YACN,MAAMkN,EAAA;AAAA,YACN,OAAOy8C,EAAA;AAAA,YACR,OAAM;AAAA,UAAA;;;MAKJ3pD,EAAA,iBAAiBA,EAAA,4BADzBM,EAIEs7B,IAAA;AAAA;QAFC,yBAAuB57B,EAAA;AAAA,QACvB,cAAYA,EAAA;AAAA,MAAA;gBAGjBS,EAwCM,OAAA;AAAA;MAtCH,OAAKo7B,GAAA,EAAA,QAAY77B,EAAA,iBAAc,MAAA,iBAA0B0pD,EAAA,cAAgC1pD,EAAA,QAAK,MAAA;AAAA,MAC/F,OAAM;AAAA,IAAA;MAGE27B,EAAA,SADRn7B,EAAA,GAAAC,EAgBM,OAhBNqpD,IAgBM;AAAA,QAZJ9oD,EAWM,OAAA;AAAA,UAVJ,OAAM;AAAA,UACL,qBAAkBhB,EAAA,WAAQ,IAAA,MAAA;AAAA,QAAA;UAGnBkN,EAAA,MAAK,eADb5M,EAMEQ,IAAA;AAAA;YAJC,MAAMd,EAAA;AAAA,YACN,MAAMkN,EAAA;AAAA,YACN,OAAOy8C,EAAA;AAAA,YACR,OAAM;AAAA,UAAA;;;MAKJ3pD,EAAA,YADRQ,EAAA,GAAAC,EAYM,OAZNspD,IAYM;AAAA,QARJnpD,EAIEE,IAAA;AAAA,UAHA,MAAK;AAAA,UACL,OAAM;AAAA,UACL,MAAMd,EAAA;AAAA,QAAA;QAETgB,EAEM,OAFNgpD,IAEM/oD,EADD4D,EAAA7B,CAAA,EAAC,6BAAA,CAAA,GAAA,CAAA;AAAA,MAAA;MAIAhD,EAAA,iBAAiBA,EAAA,4BADzBM,EAIEs7B,IAAA;AAAA;QAFC,yBAAuB57B,EAAA;AAAA,QACvB,cAAYA,EAAA;AAAA,MAAA;;;;ACxTZ,SAASiqD,KAAyB;AACvC,QAAM,EAAE,GAAAjnD,EAAA,IAAM/C,EAAA,GAERiqD,IAA6BroD,EAAkD;AAAA,IACnF;AAAA,MACE,OAAO8gC,GAAoB;AAAA,MAC3B,OAAO3/B,EAAE,gDAAgD;AAAA,IAAA;AAAA,IAE3D;AAAA,MACE,OAAO2/B,GAAoB;AAAA,MAC3B,OAAO3/B,EAAE,mDAAmD;AAAA,IAAA;AAAA,IAE9D;AAAA,MACE,OAAO2/B,GAAoB;AAAA,MAC3B,OAAO3/B,EAAE,2DAA2D;AAAA,IAAA;AAAA,IAEtE;AAAA,MACE,OAAO2/B,GAAoB;AAAA,MAC3B,OAAO3/B,EAAE,2DAA2D;AAAA,IAAA;AAAA,IAEtE;AAAA,MACE,OAAO2/B,GAAoB;AAAA,MAC3B,OAAO3/B,EAAE,0DAA0D;AAAA,IAAA;AAAA,IAErE;AAAA,MACE,OAAO2/B,GAAoB;AAAA,MAC3B,OAAO3/B,EAAE,uDAAuD;AAAA,IAAA;AAAA,EAClE,CACD;AAMD,SAAO;AAAA,IACL,4BAAAknD;AAAA,IACA,8BANmC,CAAC9+C,MAC7B8+C,EAA2B,MAAM,KAAK,CAACxmD,MAASA,EAAK,UAAU0H,CAAK;AAAA,EAK3E;AAEJ;;;;;;;ACrCA,UAAMrL,IAAQC,GAOR,EAAE,8BAAAmqD,EAAA,IAAiCF,GAAA,GACnCG,IAAejqD,EAAS,MACrBgqD,EAA6BpqD,EAAM,MAAM,CACjD;qBAIoBqqD,EAAA,cAAnB9pD,EAEcwnB,IAAA,EAAA,KAAA,KAAA;AAAA,iBADZ,MAAwB;AAAA,QAArB7hB,EAAAhF,EAAAmpD,EAAA,MAAa,KAAK,GAAA,CAAA;AAAA,MAAA;;;;;;;;;;;;;;;;;;;;;;;;ACCzB,UAAM,EAAE,GAAApnD,EAAA,IAAM/C,EAAA;;MAKJD,EAAA,uBAAuBA,EAAA,wBAAwB6E,EAAA69B,EAAA,EAAuB,aAD9EliC,EAAA,GAAAC,EAUM,OAVNS,IAUM;AAAA,QANJN,EAKSC,IAAA;AAAA,UAJP,MAAA;AAAA,UACA,MAAK;AAAA,QAAA;qBAEL,MAA6D;AAAA,gBAA1DgE,EAAA7B,CAAA,EAAC,oDAAA,CAAA,GAAA,CAAA;AAAA,UAAA;;;;MAIAhD,EAAA,uBAAuBA,EAAA,wBAAwB6E,EAAA69B,EAAA,EAAuB,UAD9EliC,EAAA,GAAAC,EAcM,OAdNuF,IAcM;AAAA,QAVJpF,EASSC,IAAA;AAAA,UARP,MAAA;AAAA,UACA,MAAK;AAAA,QAAA;qBAEL,MAA0D;AAAA,YAAvDoF,EAAAhF,EAAA4D,EAAA7B,CAAA,wDAAuD,KAC1D,CAAA;AAAA,YAAWhD,EAAA,gCAAXS,EAGM,OAAA6F,IAAA;AAAA,8BAFJtF,EAAI,MAAA,MAAA,MAAA,EAAA;AAAA,cACJJ,EAA6DypD,IAAA,EAAnC,QAAQrqD,EAAA,wBAAA,GAAuB,MAAA,GAAA,CAAA,QAAA,CAAA;AAAA,YAAA;;;;YAKlDA,EAAA,gBAAgB6E,EAAAujB,EAAA,EAAe,YAD5C5nB,EAAA,GAAAC,EAUM,OAVN8F,IAUM;AAAA,QANJ3F,EAKSC,IAAA;AAAA,UAJP,MAAA;AAAA,UACA,MAAK;AAAA,QAAA;qBAEL,MAA4D;AAAA,gBAAzDgE,EAAA7B,CAAA,EAAC,mDAAA,CAAA,GAAA,CAAA;AAAA,UAAA;;;YAIKhD,EAAA,gBAAgB6E,EAAAujB,EAAA,EAAe,SAD5C5nB,EAAA,GAAAC,EAUM,OAVN+F,IAUM;AAAA,QANJ5F,EAKSC,IAAA;AAAA,UAJP,MAAA;AAAA,UACA,MAAK;AAAA,QAAA;qBAEL,MAAyD;AAAA,gBAAtDgE,EAAA7B,CAAA,EAAC,gDAAA,CAAA,GAAA,CAAA;AAAA,UAAA;;;;;;ICpEGsnD,KAAe,oBAEtBC,KAAoB1oD,EAAI,oBAAI,KAAa;AAExC,SAAS2oD,GAA+BC,GAA2B;AACxE,QAAMC,IAAU,MAAM;AACpB,IAAAH,GAAkB,MAAM,IAAID,KAAeG,CAAS;AAAA,EACtD,GAEME,IAAY,MAAM;AACtB,IAAAJ,GAAkB,MAAM,OAAOD,KAAeG,CAAS;AAAA,EACzD,GAEMG,IAAczqD,EAAS,MACpBoqD,GAAkB,MAAM,IAAID,KAAeG,CAAS,CAC5D;AAMD,SAAO;AAAA,IACL,cALmBtqD,EAAS,MACrBmqD,KAAeG,CACvB;AAAA,IAIC,aAAAG;AAAA,IACA,SAAAF;AAAA,IACA,WAAAC;AAAA,EAAA;AAEJ;;;;;;;AC1BA,UAAM5qD,IAAQC,GAQR,EAAE,aAAA4qD,GAAa,cAAAC,EAAA,IAAiBL,GAA+BzqD,EAAM,QAAQ;qBAKzE8E,EAAA+lD,CAAA,UADRtqD,EAOWwqD,IAAA;AAAA;MALR,UAAUjmD,EAAAgmD,CAAA;AAAA,IAAA;MAEX7pD,EAEM,OAFNE,IAEM;AAAA,QADJM,GAAQC,EAAA,QAAA,SAAA;AAAA,MAAA;;;;;;;;;;;;;ACHd,UAAM1B,IAAQC,GAaR,EAAE,EAAA,IAAMC,EAAA,GAERi5B,IAAmBrG,GAAA,GACnB,EAAE,OAAAtE,GAAO,mBAAA0E,GAAmB,mBAAAzE,EAAA,IAAsByK,GAAYC,CAAgB,GAC9E6xB,IAAmB1f,GAAA,GAEnB2f,IAAoBnpD,EAAI,EAAK,GAE7B,EAAE,eAAA0G,GAAe,qBAAAD,GAAqB,mBAAAE,EAAA,IAAsBC,GAAA,GAE5D67B,IAAKC,GAAa,EAAE,QAAQkB,IAAwC,kBAAkB,IAAM,GAE5F,EAAE,WAAA7c,EAAA,IAAc4J,GAAA,GAEhBy4B,IAAS,YAAY;AACzB,UAAI,CAAA3lD,GAAOipB,EAAM,KAAK,GAGtB;AAAA,YAFAy8B,EAAkB,QAAQ,IAC1B1mB,EAAG,MAAM,OAAA,GACLA,EAAG,MAAM,UAAU;AACrB,UAAAh8B,EAAA,GACA0iD,EAAkB,QAAQ;AAC1B;AAAA,QACF;AACA,YAAI;AACF,gBAAM18B,GAAoB1F,GAAW2F,EAAM,OAAOxuB,EAAM,WAAWyuB,EAAkB,KAAK,GACtFyE,EAAkB,SAAS,CAAC3tB,GAAOipB,EAAM,KAAK,KAChD,MAAMw8B,EAAiB,iBAAiBx8B,EAAM,KAAK,GAErDhmB,EAAc,SAAS;AAAA,QACzB,SAASK,GAAO;AACd,UAAAJ,EAAkBI,CAAK;AAAA,QACzB,UAAA;AACE,UAAAoiD,EAAkB,QAAQ;AAAA,QAC5B;AAAA;AAAA,IACF;;;;QAKUhrD,EAAA,iBADRM,EAamC4qD,IAAA;AAAA;UAXhC,aAAWlrD,EAAA;AAAA,QAAA;qBAEZ,MAQc;AAAA,YARdY,EAQciI,GAAA;AAAA,cAPZ,MAAK;AAAA,cACL,OAAM;AAAA,cACN,WAAQ;AAAA,cACP,SAASmiD,EAAA;AAAA,cACT,WAAYC,GAAM,CAAA,MAAA,CAAA;AAAA,YAAA;yBAEnB,MAA6B;AAAA,oBAA1BpmD,EAAA,CAAA,EAAC,oBAAA,CAAA,GAAA,CAAA;AAAA,cAAA;;;;;;QAGRjE,EAAyC89C,IAAA,EAAzB,cAAY1+C,EAAA,UAAA,GAAS,MAAA,GAAA,CAAA,YAAA,CAAA;AAAA,MAAA;;;IC9E1BmrD,KAAmBlhC,GAAY,oBAAoB,MAAM;AACpE,QAAMmhC,IAAYvpD,EAA2B,IAAI,GAC3CguB,IAAShuB,EAAI,EAAK,GAClBwpD,IAAMxpD,EAA6B,IAAI;AAE7C,WAASypD,EAAaC,GAAgC;AACpD,IAAAH,EAAU,QAAQG;AAAA,EACpB;AAEA,WAASC,EAAOC,GAAiC;AAC/C,IAAAJ,EAAI,QAAQI;AAAA,EACd;AAEA,WAASn7B,IAAa;AACpB,IAAAT,EAAO,QAAQ;AAAA,EACjB;AAEA,WAASU,IAAa;AACpB,IAAAV,EAAO,QAAQ;AAAA,EACjB;AAEA,WAAS5gB,IAAQ;AACf,IAAAm8C,EAAU,QAAQ,MAClBv7B,EAAO,QAAQ,IACfw7B,EAAI,QAAQ;AAAA,EACd;AAEA,SAAO;AAAA,IACL,WAAAD;AAAA,IACA,QAAAv7B;AAAA,IACA,KAAAw7B;AAAA,IACA,cAAAC;AAAA,IACA,QAAAE;AAAA,IACA,YAAAl7B;AAAA,IACA,YAAAC;AAAA,IACA,OAAAthB;AAAA,EAAA;AAEJ,CAAC;;;;;;;;;;;AClCD,UAAMlP,IAAQC,GASR0B,IAAOC,GAIP,EAAE,eAAA4G,GAAe,mBAAAC,EAAA,IAAsBC,GAAA,GAEvC2M,IAAUvT,EAAI,EAAK,GAEnB,EAAE,WAAA+mB,EAAA,IAAc4J,GAAA,GAEhBk5B,IAAS,OAAOrhB,MAAoB;AACxC,UAAI;AACF,QAAAj1B,EAAQ,QAAQ,IAChB,MAAMg1B,GAAYxhB,GAAW7oB,EAAM,SAASsqC,CAAK,GACjD9hC,EAAc,SAAS,GACvB7G,EAAK,aAAa;AAAA,MACpB,SAASkW,GAAG;AACV,QAAApP,EAAkBoP,CAAC;AAAA,MACrB,UAAA;AACE,QAAAxC,EAAQ,QAAQ;AAAA,MAClB;AAAA,IACF,GACM,EAAE,GAAApS,EAAA,IAAM/C,EAAA;;;kBAIZQ,EA8BM,OAAA,MAAA;AAAA,QA7BJO,EAEM,OAFNE,IAEMD,EADD4D,EAAA7B,CAAA,EAAC,6DAAA,CAAA,GAAA,CAAA;AAAA,QAGEoS,EAAA,SADR5U,EAAA,GAAAC,EAQM,OARNuF,IAQM;AAAA,UAJJpF,EAGEO,IAAA;AAAA,YAFA,eAAA;AAAA,YACA,OAAM;AAAA,UAAA;oBAGVV,EAgBM,OAAA6F,IAAA;AAAA,UAfJ1F,EAOeuI,GAAA;AAAA,YANb,gBAAa;AAAA,YACb,OAAM;AAAA,YACN,WAAQ;AAAA,YACP,kCAAYuiD,EAAM,EAAA,GAAA,CAAA,MAAA,CAAA;AAAA,UAAA;uBAEnB,MAAkE;AAAA,kBAA/D7mD,EAAA7B,CAAA,EAAC,yDAAA,CAAA,GAAA,CAAA;AAAA,YAAA;;;UAENpC,EAMeuI,GAAA;AAAA,YALb,gBAAa;AAAA,YACb,WAAQ;AAAA,YACP,kCAAYuiD,EAAM,GAAA,GAAA,CAAA,MAAA,CAAA;AAAA,UAAA;uBAEnB,MAAyE;AAAA,kBAAtE7mD,EAAA7B,CAAA,EAAC,gEAAA,CAAA,GAAA,CAAA;AAAA,YAAA;;;;;;;IC9DNwlB,KAAY,eACZmjC,KAAsB,yBACfjjC,KAAS,SAETkjC,KAAW,CAACz6C,GAA6ByD,MACpDrD,GAA8BJ,GAAQqX,KAAY,QAAQ,EAAE,IAAA5T,KAAMmU,IAAiBL,EAAM,GAE9EmjC,KAAY,CAAC16C,GAA6ByD,GAAW3S,MAChEy1B,GAA+BvmB,GAAQlP,GAAMumB,KAAY,QAAQ,EAAE,IAAA5T,EAAA,GAAMmU,IAAiBL,EAAM,GAErFojC,KAAuB,CAAC36C,GAA6Bs4B,MAChE3c,GAAuB3b,GAAQ4X,IAAiBL,IAAQijC,IAAqB,EAAE,IAAIliB,EAAA,CAAS;;;;;;;;;;;;;ACQ9F,UAAM,EAAE,GAAAzmC,EAAA,IAAM/C,EAAA,GAER8rD,IAAgBZ,GAAA,GAChBjyB,IAAmBrG,GAAA,GAEnB,EAAE,YAAA1nB,EAAA,IAAekI,GAAc24C,EAAU,GAEzC,EAAE,WAAApjC,EAAA,IAAc4J,GAAA,GAChBkN,IAAoB,CAAA,GACpB,EAAE,cAAAnQ,GAAc,YAAAC,EAAA,IAAeC,GAAaiQ,GAAmBrQ,GAAkBqQ,CAAiB,GAAG;AAAA,MACzG,QAAQ3W;AAAA,MACR,SAASL;AAAAA,IAAA,CACV,GAEKujC,IAAgB,OAAOr3C,MAAc;AACzC,YAAMjM,IAAM,MAAMygC,GAAexgB,GAAWhU,CAAE;AAC9C,MAAAm3C,EAAc,aAAapjD,CAAG;AAAA,IAChC,GAEMujD,IAAW,OAAOC,IAAkB,OAAU;AAElD,UADAJ,EAAc,WAAA,GACVA,EAAc,WAAW;AAC3B,cAAM,EAAE,cAAAzyB,EAAA,IAAiBwyB,GAAqBljC,GAAWmjC,EAAc,UAAU,EAAE,GAC7EpjD,IAAM,MAAM2wB,EAAanuB,GAAYqkB,GAAYD,CAAY;AACnE,YAAI5mB,EAAI,SAAS,KAAKA,EAAI,CAAC,EAAE,IAAI;AAC/B,gBAAM0iD,IAAM,MAAMO,GAAShjC,GAAWjgB,EAAI,CAAC,EAAE,EAAE;AAC/C,UAAIwjD,KACF,MAAMF,EAAcF,EAAc,UAAU,EAAE,GAEhDA,EAAc,OAAOV,CAAG,GACxBU,EAAc,WAAA;AACd;AAAA,QACF;AACA,QAAAA,EAAc,OAAO,IAAI,GACzBA,EAAc,WAAA;AACd;AAAA,MACF;AACA,MAAAA,EAAc,OAAO,IAAI,GACzBA,EAAc,WAAA;AAAA,IAChB,GAEMK,IAAc,YAAY;AAC9B,YAAMF,EAAS,EAAI;AAAA,IACrB;AAEA,WAAA7iD,GAAU,YAAY;AACpB,MAAA0iD,EAAc,MAAA,GACdA,EAAc,WAAA,GAEZ7yB,EAAiB,SACjBA,EAAiB,MAAM,YACvB8J,GAAqB9J,EAAiB,MAAM,QAAQ,MAEpD6yB,EAAc,aAAa/mD,GAAUk0B,EAAiB,MAAM,QAAQ,CAAC,GACrE,MAAMgzB,EAAA,IAERH,EAAc,WAAA;AAAA,IAChB,CAAC;;;QAKS/rD,EAAA,iBADRM,EAUmC4qD,IAAA;AAAA;UARhC,aAAWlrD,EAAA;AAAA,QAAA;qBAEZ,MAKe;AAAA,YAJN6E,EAAAknD,CAAA,EAAc,2BADvBzrD,EAKe6I,GAAA;AAAA;cAHZ,kCAAY+iD,EAAQ,EAAA,GAAA,CAAA,MAAA,CAAA;AAAA,YAAA;yBAErB,MAAmD;AAAA,oBAAhDrnD,EAAA7B,CAAA,EAAC,0CAAA,CAAA,GAAA,CAAA;AAAA,cAAA;;;;;;QAGRhC,EAOM,OAPNE,IAOM;AAAA,UANJF,EAEM,OAFNgF,IAEM/E,EADD4D,EAAA7B,CAAA,EAAC,wCAAA,CAAA,GAAA,CAAA;AAAA,UAENhC,EAEM,OAFNsF,IAEMrF,EADD4D,EAAA7B,CAAA,EAAC,8CAAA,CAAA,GAAA,CAAA;AAAA,QAAA;QAIA6B,EAAAknD,CAAA,EAAc,UADtBvrD,KAAAC,EAQM,OARN8F,IAQM;AAAA,UAJJ3F,EAGEO,IAAA;AAAA,YAFA,eAAA;AAAA,YACA,OAAM;AAAA,UAAA;cAIG0D,EAAAknD,CAAA,EAAc,OAD3BvrD,KAAAC,EAoBM,OApBN+F,IAoBM;AAAA,kBAhBJ/F,EAeM0F,IAAA,MAAAC,GAdWvB,KAAc,KAAK,MAAM,mBAAiB,CAAlDnB,YADTjD,EAeM,OAAA;AAAA,YAbH,KAAKiD,EAAK;AAAA,YACX,OAAM;AAAA,UAAA;YAEN1C,EAEM,OAFNyF,IAEMxF,EADDyC,EAAK,KAAK,GAAA,CAAA;AAAA,YAGPmB,EAAAknD,CAAA,EAAc,kBADtBtrD,EAMC,OAAA;AAAA;cAJE,KAAKiD,EAAK,wBAAwBmB,EAAAknD,CAAA,EAAc,UAAU;AAAA,cAC1D,OAAOroD,EAAK;AAAA,cACZ,QAAQA,EAAK;AAAA,cACd,KAAI;AAAA,YAAA;;;QAKFmB,EAAAknD,CAAA,EAAc,kBADtBzrD,EAKE+rD,IAAA;AAAA;UAHC,YAAUxnD,EAAAknD,CAAA,EAAc,UAAU;AAAA,UACnC,OAAM;AAAA,UACL,eAAcK;AAAA,QAAA;;;;;;;;;;ACxInB,UAAMrsD,IAAQC,GAQR,EAAE,SAAA0qD,GAAS,WAAAC,GAAW,cAAAE,MAAiBL,GAA+BzqD,EAAM,QAAQ;AAE1F,WAAAsJ,GAAU,YAAY;AACpB,YAAM02C,GAAA,GACN2K,EAAA;AAAA,IACF,CAAC,GAED5kC,GAAgB,MAAM;AACpB,MAAA6kC,EAAA;AAAA,IACF,CAAC,mBAIClqD,EAA6B,OAAA;AAAA,MAAvB,UAAOoE,EAAAgmD,CAAA,CAAY;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;ACY3B,UAAM,EAAE,GAAA7nD,EAAA,IAAM/C,EAAA,GAERi5B,IAAmBrG,GAAA,GACnB,EAAE,WAAAG,EAAA,IAAciG,GAAYC,CAAgB;sBAIhD14B,EAAA,GAAAC,EAqDM,OArDNS,IAqDM;AAAA,MApDJF,EAmDM,OAnDNgF,IAmDM;AAAA,QAlDJpF,EAkBQ0rD,IAAA;AAAA,sBAjBGznD,EAAAmuB,CAAA;AAAA,gEAAAA,EAAS,QAAAxuB,IAAA;AAAA,UAClB,eAAA;AAAA,UACA,OAAM;AAAA,QAAA;qBAEN,MAKO;AAAA,YALP5D,EAKO2rD,IAAA;AAAA,cAJJ,OAAO1nD,EAAA8tB,EAAA,EAA2B;AAAA,cACnC,WAAQ;AAAA,YAAA;yBAER,MAAiD;AAAA,oBAA9C9tB,EAAA7B,CAAA,EAAC,wCAAA,CAAA,GAAA,CAAA;AAAA,cAAA;;;YAGEhD,EAAA,gBADRM,EAMOisD,IAAA;AAAA;cAJJ,OAAO1nD,EAAA8tB,EAAA,EAA2B;AAAA,cACnC,WAAQ;AAAA,YAAA;yBAER,MAAgD;AAAA,oBAA7C9tB,EAAA7B,CAAA,EAAC,uCAAA,CAAA,GAAA,CAAA;AAAA,cAAA;;;;;;QAIRhC,EA0BM,OA1BNsF,IA0BM;AAAA,UAzBJ1F,EAIE4rD,IAAA;AAAA,YAHC,gBAAcxsD,EAAA;AAAA,YACd,0BAAwBA,EAAA;AAAA,YACxB,+BAA6BA,EAAA;AAAA,UAAA;UAGxB6E,EAAAmuB,CAAA,MAAcnuB,EAAA8tB,EAAA,EAA2B,QADjDnyB,KAAAC,EAUM,OAVN8F,IAUM;AAAA,YANJ3F,EAKE6rD,IAAA;AAAA,cAJC,aAAWzsD,EAAA;AAAA,cACX,cAAYA,EAAA;AAAA,cACZ,aAAW6E,EAAAmuB,CAAA,MAAcnuB,EAAA8tB,EAAA,EAA2B;AAAA,cACpD,cAAY3yB,EAAA;AAAA,YAAA;;UAITA,EAAA,WAAW6E,EAAAmuB,CAAA,MAAcnuB,EAAA8tB,EAAA,EAA2B,OAD5DnyB,EAAA,GAAAC,EAQM,OARN+F,IAQM;AAAA,YAJJ5F,EAGE8rD,IAAA;AAAA,cAFC,aAAW7nD,EAAAmuB,CAAA,MAAcnuB,EAAA8tB,EAAA,EAA2B;AAAA,cACpD,aAAW3yB,EAAA;AAAA,YAAA;;;QAIlBgB,EAEM,OAFNyF,IAEM;AAAA,UADJ7F,EAAiE+rD,IAAA,EAAvB,aAAW3sD,EAAA,SAAA,GAAQ,MAAA,GAAA,CAAA,WAAA,CAAA;AAAA,QAAA;;;;IC5F/D4sD,KAAY,GAWLC,KAAe,SAC1BC,GACAC,GACAC,GACAC,GACA;AACA,QAAMC,IAAYJ,EAAQ,aAAA;AAC1B,MAAI,CAACI;AACH,WAAO;AAAA,MACL,GAAG;AAAA,MACH,GAAG;AAAA,MACH,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,QAAQ;AAAA,IAAA;AAEZ,QAAMC,IAAQD,EAAU,gBAAgBD;AAExC,SAAO;AAAA,IACL,GAAGF,EAAiB,SAASI;AAAA,IAC7B,GAAGJ,EAAiB,SAASI;AAAA,IAC7B,OAAOJ,EAAiB,kBAAkBG,EAAU;AAAA,IACpD,QAAQH,EAAiB,mBAAmBG,EAAU;AAAA,IACtD,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,EAAA;AAEZ,GAEaE,KAAe,SAC1BN,GACAC,GACAC,GACAC,GACA;AACA,QAAMC,IAAYJ,EAAQ,aAAA,GACpB7qD,IAAO6qD,EAAQ,QAAA;AACrB,MAAI,CAACI,KAAa,CAACjrD,EAAM,QAAO8qD;AAChC,QAAMI,IAAQD,EAAU,gBAAgBD;AAExC,MAAII,IAAStgD,IAAa9K,EAAK,IAAIkrD,GAAO,QAAQP,EAAS,CAAC;AAC5D,EAAIS,IAAS,MAAGA,IAAS;AAEzB,MAAIC,IAASvgD,IAAa9K,EAAK,IAAIkrD,GAAO,QAAQP,EAAS,CAAC;AAC5D,EAAIU,IAAS,MAAGA,IAAS;AAEzB,MAAIC,IAAkBC,IAAevrD,EAAK,QAAQirD,EAAU,cAAc,QAAQN,EAAS,CAAC;AAC5F,QAAMa,IAAgBF,IAAkBP,IAAqBK;AAC7D,EAAII,IAAgBT,MAClBO,IAAkBA,KAAoBE,IAAgBT,KAAsB,MAAOA;AAGrF,MAAIU,IAAmBF,IAAevrD,EAAK,SAASirD,EAAU,eAAe,QAAQN,EAAS,CAAC;AAC/F,QAAMe,IAAiBD,IAAmBT,IAAsBK;AAChE,SAAIK,IAAiBV,MACnBS,IAAmBA,KAAqBC,IAAiBV,KAAuB,MAAOA,IAGzFF,EAAiB,SAASM,GAC1BN,EAAiB,SAASO,GAC1BP,EAAiB,kBAAkBQ,GACnCR,EAAiB,mBAAmBW,GAE7BX;AACT;ACrEA,SAASa,GAAQ,GAAG3xB,GAAG;AACrB,MAAI,IAAI,OAAO,KAAK,CAAC;AACrB,MAAI,OAAO,uBAAuB;AAChC,QAAIC,IAAI,OAAO,sBAAsB,CAAC;AACtC,IAAAD,MAAMC,IAAIA,EAAE,OAAO,SAAU,GAAG;AAC9B,aAAO,OAAO,yBAAyB,GAAG,CAAC,EAAE;AAAA,IAC/C,CAAC,IAAI,EAAE,KAAK,MAAM,GAAGA,CAAC;AAAA,EACxB;AACA,SAAO;AACT;AACA,SAAS2xB,GAAe,GAAG;AACzB,WAAS5xB,IAAI,GAAGA,IAAI,UAAU,QAAQA,KAAK;AACzC,QAAI,IAAY,UAAUA,CAAC,KAAnB,OAAuB,UAAUA,CAAC,IAAI,CAAA;AAC9C,IAAAA,IAAI,IAAI2xB,GAAQ,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,SAAU3xB,GAAG;AAClD,MAAA6xB,GAAgB,GAAG7xB,GAAG,EAAEA,CAAC,CAAC;AAAA,IAC5B,CAAC,IAAI,OAAO,4BAA4B,OAAO,iBAAiB,GAAG,OAAO,0BAA0B,CAAC,CAAC,IAAI2xB,GAAQ,OAAO,CAAC,CAAC,EAAE,QAAQ,SAAU3xB,GAAG;AAChJ,aAAO,eAAe,GAAGA,GAAG,OAAO,yBAAyB,GAAGA,CAAC,CAAC;AAAA,IACnE,CAAC;AAAA,EACH;AACA,SAAO;AACT;AACA,SAAS8xB,GAAa/qD,GAAGi5B,GAAG;AAC1B,MAAgB,OAAOj5B,KAAnB,YAAwB,CAACA,EAAG,QAAOA;AACvC,MAAI4U,IAAI5U,EAAE,OAAO,WAAW;AAC5B,MAAe4U,MAAX,QAAc;AAChB,QAAImW,IAAInW,EAAE,KAAK5U,GAAGi5B,CAAc;AAChC,QAAgB,OAAOlO,KAAnB,SAAsB,QAAOA;AACjC,UAAM,IAAI,UAAU,8CAA8C;AAAA,EACpE;AACA,SAAyB,OAAiB/qB,CAAC;AAC7C;AACA,SAASgrD,GAAehrD,GAAG;AACzB,MAAI+qB,IAAIggC,GAAa/qD,GAAG,QAAQ;AAChC,SAAmB,OAAO+qB,KAAnB,WAAuBA,IAAIA,IAAI;AACxC;AACA,SAASkgC,GAAQ/xB,GAAG;AAClB;AAEA,SAAO+xB,KAAwB,OAAO,UAArB,cAA2C,OAAO,OAAO,YAA1B,WAAqC,SAAU/xB,GAAG;AAChG,WAAO,OAAOA;AAAA,EAChB,IAAI,SAAUA,GAAG;AACf,WAAOA,KAAmB,OAAO,UAArB,cAA+BA,EAAE,gBAAgB,UAAUA,MAAM,OAAO,YAAY,WAAW,OAAOA;AAAA,EACpH,GAAG+xB,GAAQ/xB,CAAC;AACd;AACA,SAAS8P,GAAgBC,GAAUC,GAAa;AAC9C,MAAI,EAAED,aAAoBC;AACxB,UAAM,IAAI,UAAU,mCAAmC;AAE3D;AACA,SAASgiB,GAAkBza,GAAQ1zC,GAAO;AACxC,WAASguB,IAAI,GAAGA,IAAIhuB,EAAM,QAAQguB,KAAK;AACrC,QAAI2lB,IAAa3zC,EAAMguB,CAAC;AACxB,IAAA2lB,EAAW,aAAaA,EAAW,cAAc,IACjDA,EAAW,eAAe,IACtB,WAAWA,MAAYA,EAAW,WAAW,KACjD,OAAO,eAAeD,GAAQua,GAAeta,EAAW,GAAG,GAAGA,CAAU;AAAA,EAC1E;AACF;AACA,SAASH,GAAarH,GAAayH,GAAYC,GAAa;AAC1D,SAAID,KAAYua,GAAkBhiB,EAAY,WAAWyH,CAAU,GAC/DC,KAAasa,GAAkBhiB,GAAa0H,CAAW,GAC3D,OAAO,eAAe1H,GAAa,aAAa;AAAA,IAC9C,UAAU;AAAA,EACd,CAAG,GACMA;AACT;AACA,SAAS4hB,GAAgBh5C,GAAKnO,GAAKyE,GAAO;AACxC,SAAAzE,IAAMqnD,GAAernD,CAAG,GACpBA,KAAOmO,IACT,OAAO,eAAeA,GAAKnO,GAAK;AAAA,IAC9B,OAAOyE;AAAA,IACP,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,UAAU;AAAA,EAChB,CAAK,IAED0J,EAAInO,CAAG,IAAIyE,GAEN0J;AACT;AACA,SAASq5C,GAAmB1jB,GAAK;AAC/B,SAAO2jB,GAAmB3jB,CAAG,KAAK4jB,GAAiB5jB,CAAG,KAAK6jB,GAA4B7jB,CAAG,KAAK8jB,GAAkB;AACnH;AACA,SAASH,GAAmB3jB,GAAK;AAC/B,MAAI,MAAM,QAAQA,CAAG,EAAG,QAAO+jB,GAAkB/jB,CAAG;AACtD;AACA,SAAS4jB,GAAiBI,GAAM;AAC9B,MAAI,OAAO,SAAW,OAAeA,EAAK,OAAO,QAAQ,KAAK,QAAQA,EAAK,YAAY,KAAK,KAAM,QAAO,MAAM,KAAKA,CAAI;AAC1H;AACA,SAASH,GAA4BpyB,GAAGwyB,GAAQ;AAC9C,MAAKxyB,GACL;AAAA,QAAI,OAAOA,KAAM,SAAU,QAAOsyB,GAAkBtyB,GAAGwyB,CAAM;AAC7D,QAAI1yB,IAAI,OAAO,UAAU,SAAS,KAAKE,CAAC,EAAE,MAAM,GAAG,EAAE;AAErD,QADIF,MAAM,YAAYE,EAAE,gBAAaF,IAAIE,EAAE,YAAY,OACnDF,MAAM,SAASA,MAAM,MAAO,QAAO,MAAM,KAAKE,CAAC;AACnD,QAAIF,MAAM,eAAe,2CAA2C,KAAKA,CAAC,EAAG,QAAOwyB,GAAkBtyB,GAAGwyB,CAAM;AAAA;AACjH;AACA,SAASF,GAAkB/jB,GAAKgC,GAAK;AACnC,GAAIA,KAAO,QAAQA,IAAMhC,EAAI,YAAQgC,IAAMhC,EAAI;AAC/C,WAAS1c,IAAI,GAAG4gC,IAAO,IAAI,MAAMliB,CAAG,GAAG1e,IAAI0e,GAAK1e,IAAK,CAAA4gC,EAAK5gC,CAAC,IAAI0c,EAAI1c,CAAC;AACpE,SAAO4gC;AACT;AACA,SAASJ,KAAqB;AAC5B,QAAM,IAAI,UAAU;AAAA,mFAAsI;AAC5J;AAEA,IAAIK,KAAa,OAAO,SAAW,OAAe,OAAO,OAAO,WAAa,KACzEC,KAASD,KAAa,SAAS,CAAA,GAC/BE,KAAkBF,MAAcC,GAAO,SAAS,kBAAkB,kBAAkBA,GAAO,SAAS,kBAAkB,IACtHE,KAAoBH,KAAa,kBAAkBC,KAAS,IAC5DG,KAAY,WAGZC,KAAa,OACbC,KAAc,QACdC,KAAc,QACdC,KAAc,QACdC,KAAc,KACdC,KAAc,KACdC,KAAe,KACfC,KAAe,KACfC,KAAoB,MACpBC,KAAoB,MACpBC,KAAoB,MACpBC,KAAoB,MAGpBC,KAAa,GAAG,OAAOb,IAAW,OAAO,GACzCc,KAAiB,GAAG,OAAOd,IAAW,WAAW,GACjDe,KAAe,GAAG,OAAOf,IAAW,SAAS,GAC7CgB,KAAa,GAAG,OAAOhB,IAAW,OAAO,GACzCiB,KAAkB,GAAG,OAAOjB,IAAW,YAAY,GACnDkB,KAAc,GAAG,OAAOlB,IAAW,QAAQ,GAC3CmB,KAAa,GAAG,OAAOnB,IAAW,OAAO,GAGzCoB,KAAc,GAAG,OAAOpB,IAAW,QAAQ,GAC3CqB,KAAe,GAAG,OAAOrB,IAAW,SAAS,GAG7CsB,KAAiB,QACjBC,KAAiB,QACjBC,KAAiB,QAGjBC,KAAa,QACbC,KAAiB,WACjBC,KAAkB,YAClBC,KAAmB,aACnBC,KAAiB,YACjBC,KAAoBhC,KAAkB,eAAe,aACrDiC,KAAmBjC,KAAkB,cAAc,aACnDkC,KAAkBlC,KAAkB,yBAAyB,WAC7DmC,KAAqBlC,KAAoB,gBAAgB+B,IACzDI,KAAqBnC,KAAoB,gBAAgBgC,IACzDI,KAAmBpC,KAAoB,4BAA4BiC,IACnEI,KAAc,SACdC,KAAe,UACfC,KAAc,SACdC,KAAa,QAGbC,KAAiB,cAGjBC,KAAiB,4CACjBC,KAAkB,UAClBC,KAAuB,6BACvBC,KAAkB,iBAIlBC,KAAsB,KACtBC,KAAuB,KAEvBC,KAAW;AAAA;AAAA,EAEb,UAAU;AAAA;AAAA;AAAA,EAIV,UAAUzB;AAAA;AAAA;AAAA,EAIV,oBAAoB;AAAA;AAAA,EAEpB,aAAa;AAAA;AAAA,EAEb,MAAM;AAAA;AAAA,EAEN,SAAS;AAAA;AAAA,EAET,YAAY;AAAA;AAAA,EAEZ,SAAS;AAAA;AAAA,EAET,kBAAkB;AAAA;AAAA,EAElB,kBAAkB;AAAA;AAAA,EAElB,OAAO;AAAA;AAAA,EAEP,QAAQ;AAAA;AAAA,EAER,QAAQ;AAAA;AAAA,EAER,WAAW;AAAA;AAAA,EAEX,YAAY;AAAA;AAAA,EAEZ,UAAU;AAAA;AAAA,EAEV,cAAc;AAAA;AAAA,EAEd,SAAS;AAAA;AAAA,EAET,WAAW;AAAA;AAAA,EAEX,UAAU;AAAA;AAAA,EAEV,UAAU;AAAA;AAAA,EAEV,aAAa;AAAA;AAAA,EAEb,aAAa;AAAA;AAAA,EAEb,gBAAgB;AAAA;AAAA,EAEhB,gBAAgB;AAAA;AAAA,EAEhB,kBAAkB;AAAA;AAAA,EAElB,0BAA0B;AAAA;AAAA,EAE1B,gBAAgB;AAAA,EAChB,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,kBAAkB;AAAA,EAClB,mBAAmBuB;AAAA,EACnB,oBAAoBC;AAAA;AAAA,EAEpB,OAAO;AAAA,EACP,WAAW;AAAA,EACX,UAAU;AAAA,EACV,SAAS;AAAA,EACT,MAAM;AAAA,EACN,MAAM;AACR,GAEIE,KAAW,qrCAKXC,KAAQ,OAAO,SAASpD,GAAO;AAOnC,SAAS1qD,GAASiH,GAAO;AACvB,SAAO,OAAOA,KAAU,YAAY,CAAC6mD,GAAM7mD,CAAK;AAClD;AAOA,IAAI8mD,KAAmB,SAA0B9mD,GAAO;AACtD,SAAOA,IAAQ,KAAKA,IAAQ;AAC9B;AAOA,SAASxH,GAAYwH,GAAO;AAC1B,SAAO,OAAOA,IAAU;AAC1B;AAOA,SAASL,GAASK,GAAO;AACvB,SAAO6iD,GAAQ7iD,CAAK,MAAM,YAAYA,MAAU;AAClD;AACA,IAAI+mD,KAAiB,OAAO,UAAU;AAOtC,SAASC,GAAchnD,GAAO;AAC5B,MAAI,CAACL,GAASK,CAAK;AACjB,WAAO;AAET,MAAI;AACF,QAAIinD,IAAejnD,EAAM,aACrBknD,IAAYD,EAAa;AAC7B,WAAOA,KAAgBC,KAAaH,GAAe,KAAKG,GAAW,eAAe;AAAA,EACpF,QAAgB;AACd,WAAO;AAAA,EACT;AACF;AAOA,SAAS9/C,GAAWpH,GAAO;AACzB,SAAO,OAAOA,KAAU;AAC1B;AACA,IAAImnD,KAAQ,MAAM,UAAU;AAO5B,SAASC,GAAQpnD,GAAO;AACtB,SAAO,MAAM,OAAO,MAAM,KAAKA,CAAK,IAAImnD,GAAM,KAAKnnD,CAAK;AAC1D;AAQA,SAASqnD,GAAQxwD,GAAM0I,GAAU;AAC/B,SAAI1I,KAAQuQ,GAAW7H,CAAQ,MACzB,MAAM,QAAQ1I,CAAI,KAAKkC,GAASlC,EAAK,MAAM,IAC7CuwD,GAAQvwD,CAAI,EAAE,QAAQ,SAAUmJ,GAAOzE,GAAK;AAC1C,IAAAgE,EAAS,KAAK1I,GAAMmJ,GAAOzE,GAAK1E,CAAI;AAAA,EACtC,CAAC,IACQ8I,GAAS9I,CAAI,KACtB,OAAO,KAAKA,CAAI,EAAE,QAAQ,SAAU0E,GAAK;AACvC,IAAAgE,EAAS,KAAK1I,GAAMA,EAAK0E,CAAG,GAAGA,GAAK1E,CAAI;AAAA,EAC1C,CAAC,IAGEA;AACT;AAQA,IAAIywD,KAAS,OAAO,UAAU,SAAgBjf,GAAQ;AACpD,WAASkf,IAAO,UAAU,QAAQh/B,IAAO,IAAI,MAAMg/B,IAAO,IAAIA,IAAO,IAAI,CAAC,GAAGC,IAAO,GAAGA,IAAOD,GAAMC;AAClG,IAAAj/B,EAAKi/B,IAAO,CAAC,IAAI,UAAUA,CAAI;AAEjC,SAAI7nD,GAAS0oC,CAAM,KAAK9f,EAAK,SAAS,KACpCA,EAAK,QAAQ,SAAUE,GAAK;AAC1B,IAAI9oB,GAAS8oB,CAAG,KACd,OAAO,KAAKA,CAAG,EAAE,QAAQ,SAAUltB,GAAK;AACtC,MAAA8sC,EAAO9sC,CAAG,IAAIktB,EAAIltB,CAAG;AAAA,IACvB,CAAC;AAAA,EAEL,CAAC,GAEI8sC;AACT,GACIof,KAAkB;AAStB,SAASC,GAAuB1nD,GAAO;AACrC,MAAI2nD,IAAQ,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM,SAAY,UAAU,CAAC,IAAI;AAChF,SAAOF,GAAgB,KAAKznD,CAAK,IAAI,KAAK,MAAMA,IAAQ2nD,CAAK,IAAIA,IAAQ3nD;AAC3E;AACA,IAAI4nD,KAAgB;AAOpB,SAASC,GAAS/tB,GAASguB,GAAQ;AACjC,MAAIhtB,IAAQhB,EAAQ;AACpB,EAAAutB,GAAQS,GAAQ,SAAU9nD,GAAO2gC,GAAU;AACzC,IAAIinB,GAAc,KAAKjnB,CAAQ,KAAK5nC,GAASiH,CAAK,MAChDA,IAAQ,GAAG,OAAOA,GAAO,IAAI,IAE/B86B,EAAM6F,CAAQ,IAAI3gC;AAAA,EACpB,CAAC;AACH;AAQA,SAAS+nD,GAASjuB,GAAS95B,GAAO;AAChC,SAAO85B,EAAQ,YAAYA,EAAQ,UAAU,SAAS95B,CAAK,IAAI85B,EAAQ,UAAU,QAAQ95B,CAAK,IAAI;AACpG;AAOA,SAASgoD,GAASluB,GAAS95B,GAAO;AAChC,MAAKA,GAGL;AAAA,QAAIjH,GAAS+gC,EAAQ,MAAM,GAAG;AAC5B,MAAAutB,GAAQvtB,GAAS,SAAUmuB,GAAM;AAC/B,QAAAD,GAASC,GAAMjoD,CAAK;AAAA,MACtB,CAAC;AACD;AAAA,IACF;AACA,QAAI85B,EAAQ,WAAW;AACrB,MAAAA,EAAQ,UAAU,IAAI95B,CAAK;AAC3B;AAAA,IACF;AACA,QAAIkoD,IAAYpuB,EAAQ,UAAU,KAAI;AACtC,IAAKouB,IAEMA,EAAU,QAAQloD,CAAK,IAAI,MACpC85B,EAAQ,YAAY,GAAG,OAAOouB,GAAW,GAAG,EAAE,OAAOloD,CAAK,KAF1D85B,EAAQ,YAAY95B;AAAA;AAIxB;AAOA,SAASmoD,GAAYruB,GAAS95B,GAAO;AACnC,MAAKA,GAGL;AAAA,QAAIjH,GAAS+gC,EAAQ,MAAM,GAAG;AAC5B,MAAAutB,GAAQvtB,GAAS,SAAUmuB,GAAM;AAC/B,QAAAE,GAAYF,GAAMjoD,CAAK;AAAA,MACzB,CAAC;AACD;AAAA,IACF;AACA,QAAI85B,EAAQ,WAAW;AACrB,MAAAA,EAAQ,UAAU,OAAO95B,CAAK;AAC9B;AAAA,IACF;AACA,IAAI85B,EAAQ,UAAU,QAAQ95B,CAAK,KAAK,MACtC85B,EAAQ,YAAYA,EAAQ,UAAU,QAAQ95B,GAAO,EAAE;AAAA;AAE3D;AAQA,SAASooD,GAAYtuB,GAAS95B,GAAOqoD,GAAO;AAC1C,MAAKroD,GAGL;AAAA,QAAIjH,GAAS+gC,EAAQ,MAAM,GAAG;AAC5B,MAAAutB,GAAQvtB,GAAS,SAAUmuB,GAAM;AAC/B,QAAAG,GAAYH,GAAMjoD,GAAOqoD,CAAK;AAAA,MAChC,CAAC;AACD;AAAA,IACF;AAGA,IAAIA,IACFL,GAASluB,GAAS95B,CAAK,IAEvBmoD,GAAYruB,GAAS95B,CAAK;AAAA;AAE9B;AACA,IAAIsoD,KAAoB;AAOxB,SAASC,GAAYvoD,GAAO;AAC1B,SAAOA,EAAM,QAAQsoD,IAAmB,OAAO,EAAE,YAAW;AAC9D;AAQA,SAASE,GAAQ1uB,GAAS2G,GAAM;AAC9B,SAAI9gC,GAASm6B,EAAQ2G,CAAI,CAAC,IACjB3G,EAAQ2G,CAAI,IAEjB3G,EAAQ,UACHA,EAAQ,QAAQ2G,CAAI,IAEtB3G,EAAQ,aAAa,QAAQ,OAAOyuB,GAAY9nB,CAAI,CAAC,CAAC;AAC/D;AAQA,SAASgoB,GAAQ3uB,GAAS2G,GAAM5pC,GAAM;AACpC,EAAI8I,GAAS9I,CAAI,IACfijC,EAAQ2G,CAAI,IAAI5pC,IACPijC,EAAQ,UACjBA,EAAQ,QAAQ2G,CAAI,IAAI5pC,IAExBijC,EAAQ,aAAa,QAAQ,OAAOyuB,GAAY9nB,CAAI,CAAC,GAAG5pC,CAAI;AAEhE;AAOA,SAAS6xD,GAAW5uB,GAAS2G,GAAM;AACjC,MAAI9gC,GAASm6B,EAAQ2G,CAAI,CAAC;AACxB,QAAI;AACF,aAAO3G,EAAQ2G,CAAI;AAAA,IACrB,QAAgB;AACd,MAAA3G,EAAQ2G,CAAI,IAAI;AAAA,IAClB;AAAA,WACS3G,EAAQ;AAEjB,QAAI;AACF,aAAOA,EAAQ,QAAQ2G,CAAI;AAAA,IAC7B,QAAgB;AACd,MAAA3G,EAAQ,QAAQ2G,CAAI,IAAI;AAAA,IAC1B;AAAA;AAEA,IAAA3G,EAAQ,gBAAgB,QAAQ,OAAOyuB,GAAY9nB,CAAI,CAAC,CAAC;AAE7D;AACA,IAAIkoB,KAAgB,SAChBC,MAAgB,WAAY;AAC9B,MAAIC,IAAY;AAChB,MAAIrF,IAAY;AACd,QAAIsF,IAAO,IACPC,IAAW,WAAoB;AAAA,IAAC,GAChChyD,IAAU,OAAO,eAAe,CAAA,GAAI,QAAQ;AAAA,MAC9C,KAAK,WAAe;AAClB,eAAA8xD,IAAY,IACLC;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,KAAK,SAAa9oD,GAAO;AACvB,QAAA8oD,IAAO9oD;AAAA,MACT;AAAA,IACN,CAAK;AACD,IAAAyjD,GAAO,iBAAiB,QAAQsF,GAAUhyD,CAAO,GACjD0sD,GAAO,oBAAoB,QAAQsF,GAAUhyD,CAAO;AAAA,EACtD;AACA,SAAO8xD;AACT,GAAC;AASD,SAASG,GAAelvB,GAAS1Z,GAAM2oC,GAAU;AAC/C,MAAIhyD,IAAU,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM,SAAY,UAAU,CAAC,IAAI,CAAA,GAC9EkyD,IAAUF;AACd,EAAA3oC,EAAK,KAAI,EAAG,MAAMuoC,EAAa,EAAE,QAAQ,SAAUxvD,GAAO;AACxD,QAAI,CAACyvD,IAAe;AAClB,UAAIM,IAAYpvB,EAAQ;AACxB,MAAIovB,KAAaA,EAAU/vD,CAAK,KAAK+vD,EAAU/vD,CAAK,EAAE4vD,CAAQ,MAC5DE,IAAUC,EAAU/vD,CAAK,EAAE4vD,CAAQ,GACnC,OAAOG,EAAU/vD,CAAK,EAAE4vD,CAAQ,GAC5B,OAAO,KAAKG,EAAU/vD,CAAK,CAAC,EAAE,WAAW,KAC3C,OAAO+vD,EAAU/vD,CAAK,GAEpB,OAAO,KAAK+vD,CAAS,EAAE,WAAW,KACpC,OAAOpvB,EAAQ;AAAA,IAGrB;AACA,IAAAA,EAAQ,oBAAoB3gC,GAAO8vD,GAASlyD,CAAO;AAAA,EACrD,CAAC;AACH;AASA,SAASoyD,GAAYrvB,GAAS1Z,GAAM2oC,GAAU;AAC5C,MAAIhyD,IAAU,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM,SAAY,UAAU,CAAC,IAAI,CAAA,GAC9EqyD,IAAWL;AACf,EAAA3oC,EAAK,KAAI,EAAG,MAAMuoC,EAAa,EAAE,QAAQ,SAAUxvD,GAAO;AACxD,QAAIpC,EAAQ,QAAQ,CAAC6xD,IAAe;AAClC,UAAIS,IAAqBvvB,EAAQ,WAC/BovB,IAAYG,MAAuB,SAAS,CAAA,IAAKA;AACnD,MAAAD,IAAW,WAAmB;AAC5B,eAAOF,EAAU/vD,CAAK,EAAE4vD,CAAQ,GAChCjvB,EAAQ,oBAAoB3gC,GAAOiwD,GAAUryD,CAAO;AACpD,iBAASuyD,IAAQ,UAAU,QAAQ/gC,IAAO,IAAI,MAAM+gC,CAAK,GAAGC,IAAQ,GAAGA,IAAQD,GAAOC;AACpF,UAAAhhC,EAAKghC,CAAK,IAAI,UAAUA,CAAK;AAE/B,QAAAR,EAAS,MAAMjvB,GAASvR,CAAI;AAAA,MAC9B,GACK2gC,EAAU/vD,CAAK,MAClB+vD,EAAU/vD,CAAK,IAAI,CAAA,IAEjB+vD,EAAU/vD,CAAK,EAAE4vD,CAAQ,KAC3BjvB,EAAQ,oBAAoB3gC,GAAO+vD,EAAU/vD,CAAK,EAAE4vD,CAAQ,GAAGhyD,CAAO,GAExEmyD,EAAU/vD,CAAK,EAAE4vD,CAAQ,IAAIK,GAC7BtvB,EAAQ,YAAYovB;AAAA,IACtB;AACA,IAAApvB,EAAQ,iBAAiB3gC,GAAOiwD,GAAUryD,CAAO;AAAA,EACnD,CAAC;AACH;AASA,SAASyyD,GAAc1vB,GAAS1Z,GAAMvpB,GAAM;AAC1C,MAAIsC;AAGJ,SAAIiO,GAAW,KAAK,KAAKA,GAAW,WAAW,IAC7CjO,IAAQ,IAAI,YAAYinB,GAAM;AAAA,IAC5B,QAAQvpB;AAAA,IACR,SAAS;AAAA,IACT,YAAY;AAAA,EAClB,CAAK,KAEDsC,IAAQ,SAAS,YAAY,aAAa,GAC1CA,EAAM,gBAAgBinB,GAAM,IAAM,IAAMvpB,CAAI,IAEvCijC,EAAQ,cAAc3gC,CAAK;AACpC;AAOA,SAASswD,GAAU3vB,GAAS;AAC1B,MAAI4vB,IAAM5vB,EAAQ,sBAAqB;AACvC,SAAO;AAAA,IACL,MAAM4vB,EAAI,QAAQ,OAAO,cAAc,SAAS,gBAAgB;AAAA,IAChE,KAAKA,EAAI,OAAO,OAAO,cAAc,SAAS,gBAAgB;AAAA,EAClE;AACA;AACA,IAAIC,KAAWlG,GAAO,UAClBmG,KAAiB;AAOrB,SAASC,GAAiB3rB,GAAK;AAC7B,MAAI4rB,IAAQ5rB,EAAI,MAAM0rB,EAAc;AACpC,SAAOE,MAAU,SAASA,EAAM,CAAC,MAAMH,GAAS,YAAYG,EAAM,CAAC,MAAMH,GAAS,YAAYG,EAAM,CAAC,MAAMH,GAAS;AACtH;AAOA,SAASI,GAAa7rB,GAAK;AACzB,MAAI1qB,IAAY,aAAa,QAAO,oBAAI,KAAI,GAAG,SAAS;AACxD,SAAO0qB,KAAOA,EAAI,QAAQ,GAAG,MAAM,KAAK,MAAM,OAAO1qB;AACvD;AAOA,SAASw2C,GAAcC,GAAM;AAC3B,MAAI3J,IAAS2J,EAAK,QAChBC,IAASD,EAAK,QACdE,IAASF,EAAK,QACdG,IAAaH,EAAK,YAClBI,IAAaJ,EAAK,YAChBrhD,IAAS,CAAA;AACb,EAAI7P,GAASqxD,CAAU,KAAKA,MAAe,KACzCxhD,EAAO,KAAK,cAAc,OAAOwhD,GAAY,KAAK,CAAC,GAEjDrxD,GAASsxD,CAAU,KAAKA,MAAe,KACzCzhD,EAAO,KAAK,cAAc,OAAOyhD,GAAY,KAAK,CAAC,GAIjDtxD,GAASunD,CAAM,KAAKA,MAAW,KACjC13C,EAAO,KAAK,UAAU,OAAO03C,GAAQ,MAAM,CAAC,GAE1CvnD,GAASmxD,CAAM,KAAKA,MAAW,KACjCthD,EAAO,KAAK,UAAU,OAAOshD,GAAQ,GAAG,CAAC,GAEvCnxD,GAASoxD,CAAM,KAAKA,MAAW,KACjCvhD,EAAO,KAAK,UAAU,OAAOuhD,GAAQ,GAAG,CAAC;AAE3C,MAAIG,IAAY1hD,EAAO,SAASA,EAAO,KAAK,GAAG,IAAI;AACnD,SAAO;AAAA,IACL,iBAAiB0hD;AAAA,IACjB,aAAaA;AAAA,IACb,WAAWA;AAAA,EACf;AACA;AAOA,SAASC,GAAgBC,GAAU;AACjC,MAAIC,IAAYhI,GAAe,CAAA,GAAI+H,CAAQ,GACvCE,IAAW;AACf,SAAArD,GAAQmD,GAAU,SAAUG,GAASC,GAAW;AAC9C,WAAOH,EAAUG,CAAS,GAC1BvD,GAAQoD,GAAW,SAAUI,GAAU;AACrC,UAAIC,IAAK,KAAK,IAAIH,EAAQ,SAASE,EAAS,MAAM,GAC9CE,IAAK,KAAK,IAAIJ,EAAQ,SAASE,EAAS,MAAM,GAC9CG,IAAK,KAAK,IAAIL,EAAQ,OAAOE,EAAS,IAAI,GAC1CI,IAAK,KAAK,IAAIN,EAAQ,OAAOE,EAAS,IAAI,GAC1CK,IAAK,KAAK,KAAKJ,IAAKA,IAAKC,IAAKA,CAAE,GAChCI,IAAK,KAAK,KAAKH,IAAKA,IAAKC,IAAKA,CAAE,GAChClJ,KAASoJ,IAAKD,KAAMA;AACxB,MAAI,KAAK,IAAInJ,CAAK,IAAI,KAAK,IAAI2I,CAAQ,MACrCA,IAAW3I;AAAA,IAEf,CAAC;AAAA,EACH,CAAC,GACM2I;AACT;AAQA,SAASU,GAAWC,GAAOC,GAAS;AAClC,MAAIC,IAAQF,EAAM,OAChBG,IAAQH,EAAM,OACZI,IAAM;AAAA,IACR,MAAMF;AAAA,IACN,MAAMC;AAAA,EACV;AACE,SAAOF,IAAUG,IAAMhJ,GAAe;AAAA,IACpC,QAAQ8I;AAAA,IACR,QAAQC;AAAA,EACZ,GAAKC,CAAG;AACR;AAOA,SAASC,GAAkBlB,GAAU;AACnC,MAAIe,IAAQ,GACRC,IAAQ,GACR1iD,IAAQ;AACZ,SAAAu+C,GAAQmD,GAAU,SAAUmB,GAAO;AACjC,QAAIC,IAASD,EAAM,QACjBE,IAASF,EAAM;AACjB,IAAAJ,KAASK,GACTJ,KAASK,GACT/iD,KAAS;AAAA,EACX,CAAC,GACDyiD,KAASziD,GACT0iD,KAAS1iD,GACF;AAAA,IACL,OAAOyiD;AAAA,IACP,OAAOC;AAAA,EACX;AACA;AAQA,SAASM,GAAiBC,GAAO;AAC/B,MAAIC,IAAcD,EAAM,aACtBrQ,IAASqQ,EAAM,QACftQ,IAAQsQ,EAAM,OACZ3rC,IAAO,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM,SAAY,UAAU,CAAC,IAAI,WAC3E6rC,IAAenF,GAAiBrL,CAAK,GACrCyQ,IAAgBpF,GAAiBpL,CAAM;AAC3C,MAAIuQ,KAAgBC,GAAe;AACjC,QAAIC,IAAgBzQ,IAASsQ;AAC7B,IAAI5rC,MAAS,aAAa+rC,IAAgB1Q,KAASr7B,MAAS,WAAW+rC,IAAgB1Q,IACrFC,IAASD,IAAQuQ,IAEjBvQ,IAAQC,IAASsQ;AAAA,EAErB,MAAO,CAAIC,IACTvQ,IAASD,IAAQuQ,IACRE,MACTzQ,IAAQC,IAASsQ;AAEnB,SAAO;AAAA,IACL,OAAOvQ;AAAA,IACP,QAAQC;AAAA,EACZ;AACA;AAOA,SAAS0Q,GAAgBC,GAAO;AAC9B,MAAI5Q,IAAQ4Q,EAAM,OAChB3Q,IAAS2Q,EAAM,QACfC,IAASD,EAAM;AAEjB,MADAC,IAAS,KAAK,IAAIA,CAAM,IAAI,KACxBA,MAAW;AACb,WAAO;AAAA,MACL,OAAO5Q;AAAA,MACP,QAAQD;AAAA,IACd;AAEE,MAAI8Q,IAAMD,IAAS,KAAK,KAAK,KAAK,KAC9BE,IAAS,KAAK,IAAID,CAAG,GACrBE,IAAS,KAAK,IAAIF,CAAG,GACrBG,IAAWjR,IAAQgR,IAAS/Q,IAAS8Q,GACrCG,IAAYlR,IAAQ+Q,IAAS9Q,IAAS+Q;AAC1C,SAAOH,IAAS,KAAK;AAAA,IACnB,OAAOK;AAAA,IACP,QAAQD;AAAA,EACZ,IAAM;AAAA,IACF,OAAOA;AAAA,IACP,QAAQC;AAAA,EACZ;AACA;AAUA,SAASC,GAAgBnyB,GAAOoyB,GAAOC,GAAOC,GAAO;AACnD,MAAIC,IAAmBH,EAAM,aAC3BI,IAAoBJ,EAAM,cAC1BK,IAAqBL,EAAM,eAC3BM,IAAeN,EAAM,QACrBvM,IAAS6M,MAAiB,SAAS,IAAIA,GACvCC,IAAeP,EAAM,QACrB3C,IAASkD,MAAiB,SAAS,IAAIA,GACvCC,IAAeR,EAAM,QACrB1C,IAASkD,MAAiB,SAAS,IAAIA,GACrCrB,IAAcc,EAAM,aACtBQ,IAAeR,EAAM,cACrBS,IAAgBT,EAAM,eACpBU,IAAkBT,EAAM,WAC1BU,IAAYD,MAAoB,SAAS,gBAAgBA,GACzDE,IAAwBX,EAAM,uBAC9BY,IAAwBD,MAA0B,SAAS,KAAOA,GAClEE,IAAwBb,EAAM,uBAC9Bc,IAAwBD,MAA0B,SAAS,QAAQA,GACnEE,IAAiBf,EAAM,UACvBgB,IAAWD,MAAmB,SAAS,QAAWA,GAClDE,IAAkBjB,EAAM,WACxBkB,IAAYD,MAAoB,SAAS,QAAWA,GACpDE,IAAiBnB,EAAM,UACvBoB,IAAWD,MAAmB,SAAS,IAAIA,GAC3CE,IAAkBrB,EAAM,WACxBsB,IAAYD,MAAoB,SAAS,IAAIA,GAC3CE,IAAS,SAAS,cAAc,QAAQ,GACxC1wB,IAAU0wB,EAAO,WAAW,IAAI,GAChCjU,IAAWyR,GAAiB;AAAA,IAC9B,aAAaE;AAAA,IACb,OAAO+B;AAAA,IACP,QAAQE;AAAA,EACZ,CAAG,GACGM,IAAWzC,GAAiB;AAAA,IAC9B,aAAaE;AAAA,IACb,OAAOmC;AAAA,IACP,QAAQE;AAAA,EACZ,GAAK,OAAO,GACN5S,IAAQ,KAAK,IAAIpB,EAAS,OAAO,KAAK,IAAIkU,EAAS,OAAOjB,CAAY,CAAC,GACvE5R,IAAS,KAAK,IAAIrB,EAAS,QAAQ,KAAK,IAAIkU,EAAS,QAAQhB,CAAa,CAAC,GAI3EiB,IAAe1C,GAAiB;AAAA,IAClC,aAAakB;AAAA,IACb,OAAOe;AAAA,IACP,QAAQE;AAAA,EACZ,CAAG,GACGQ,IAAe3C,GAAiB;AAAA,IAClC,aAAakB;AAAA,IACb,OAAOmB;AAAA,IACP,QAAQE;AAAA,EACZ,GAAK,OAAO,GACNK,KAAY,KAAK,IAAIF,EAAa,OAAO,KAAK,IAAIC,EAAa,OAAOxB,CAAiB,CAAC,GACxF0B,KAAa,KAAK,IAAIH,EAAa,QAAQ,KAAK,IAAIC,EAAa,QAAQvB,CAAkB,CAAC,GAC5F0B,KAAS,CAAC,CAACF,KAAY,GAAG,CAACC,KAAa,GAAGD,IAAWC,EAAU;AACpE,SAAAL,EAAO,QAAQ5G,GAAuBjM,CAAK,GAC3C6S,EAAO,SAAS5G,GAAuBhM,CAAM,GAC7C9d,EAAQ,YAAY6vB,GACpB7vB,EAAQ,SAAS,GAAG,GAAG6d,GAAOC,CAAM,GACpC9d,EAAQ,KAAI,GACZA,EAAQ,UAAU6d,IAAQ,GAAGC,IAAS,CAAC,GACvC9d,EAAQ,OAAO0iB,IAAS,KAAK,KAAK,GAAG,GACrC1iB,EAAQ,MAAMssB,GAAQC,CAAM,GAC5BvsB,EAAQ,wBAAwB+vB,GAChC/vB,EAAQ,wBAAwBiwB,GAChCjwB,EAAQ,UAAU,MAAMA,GAAS,CAACnD,CAAK,EAAE,OAAOsoB,GAAmB6L,GAAO,IAAI,SAAUC,IAAO;AAC7F,WAAO,KAAK,MAAMnH,GAAuBmH,EAAK,CAAC;AAAA,EACjD,CAAC,CAAC,CAAC,CAAC,GACJjxB,EAAQ,QAAO,GACR0wB;AACT;AACA,IAAIQ,KAAe,OAAO;AAS1B,SAASC,GAAsBC,GAAUlnB,GAAOmnB,GAAQ;AACtD,MAAIvsB,IAAM;AACV,EAAAusB,KAAUnnB;AACV,WAASnlB,IAAImlB,GAAOnlB,IAAIssC,GAAQtsC,KAAK;AACnC,IAAA+f,KAAOosB,GAAaE,EAAS,SAASrsC,CAAC,CAAC;AAE1C,SAAO+f;AACT;AACA,IAAIwsB,KAAuB;AAO3B,SAASC,GAAqBC,GAAS;AACrC,MAAIC,IAASD,EAAQ,QAAQF,IAAsB,EAAE,GACjDI,IAAS,KAAKD,CAAM,GACpBtsB,IAAc,IAAI,YAAYusB,EAAO,MAAM,GAC3CC,IAAQ,IAAI,WAAWxsB,CAAW;AACtC,SAAAskB,GAAQkI,GAAO,SAAUvvD,GAAO2iB,GAAG;AACjC,IAAA4sC,EAAM5sC,CAAC,IAAI2sC,EAAO,WAAW3sC,CAAC;AAAA,EAChC,CAAC,GACMogB;AACT;AAQA,SAASysB,GAAqBzsB,GAAarG,GAAU;AAMnD,WALI+yB,IAAS,CAAA,GAGTn0B,IAAY,MACZi0B,IAAQ,IAAI,WAAWxsB,CAAW,GAC/BwsB,EAAM,SAAS;AAGpB,IAAAE,EAAO,KAAKX,GAAa,MAAM,MAAM1H,GAAQmI,EAAM,SAAS,GAAGj0B,CAAS,CAAC,CAAC,CAAC,GAC3Ei0B,IAAQA,EAAM,SAASj0B,CAAS;AAElC,SAAO,QAAQ,OAAOoB,GAAU,UAAU,EAAE,OAAO,KAAK+yB,EAAO,KAAK,EAAE,CAAC,CAAC;AAC1E;AAOA,SAASC,GAAuB3sB,GAAa;AAC3C,MAAIisB,IAAW,IAAI,SAASjsB,CAAW,GACnC4sB;AAGJ,MAAI;AACF,QAAIC,GACAC,GACAC;AAGJ,QAAId,EAAS,SAAS,CAAC,MAAM,OAAQA,EAAS,SAAS,CAAC,MAAM;AAG5D,eAFIC,IAASD,EAAS,YAClBxsC,IAAS,GACNA,IAAS,IAAIysC,KAAQ;AAC1B,YAAID,EAAS,SAASxsC,CAAM,MAAM,OAAQwsC,EAAS,SAASxsC,IAAS,CAAC,MAAM,KAAM;AAChF,UAAAqtC,IAAYrtC;AACZ;AAAA,QACF;AACA,QAAAA,KAAU;AAAA,MACZ;AAEF,QAAIqtC,GAAW;AACb,UAAIE,IAAaF,IAAY,GACzBG,IAAaH,IAAY;AAC7B,UAAId,GAAsBC,GAAUe,GAAY,CAAC,MAAM,QAAQ;AAC7D,YAAIE,IAAajB,EAAS,UAAUgB,CAAU;AAE9C,YADAJ,IAAeK,MAAe,QAC1BL,KAAgBK,MAAe,UAC7BjB,EAAS,UAAUgB,IAAa,GAAGJ,CAAY,MAAM,IAAQ;AAC/D,cAAIM,IAAiBlB,EAAS,UAAUgB,IAAa,GAAGJ,CAAY;AACpE,UAAIM,KAAkB,MACpBJ,IAAWE,IAAaE;AAAA,QAE5B;AAAA,MAEJ;AAAA,IACF;AACA,QAAIJ,GAAU;AACZ,UAAIK,IAAUnB,EAAS,UAAUc,GAAUF,CAAY,GACnDQ,GACAztC;AACJ,WAAKA,IAAI,GAAGA,IAAIwtC,GAASxtC,KAAK;AAE5B,YADAytC,IAAUN,IAAWntC,IAAI,KAAK,GAC1BqsC,EAAS,UAAUoB,GAASR,CAAY,MAAM,KAA0B;AAE1E,UAAAQ,KAAW,GAGXT,IAAcX,EAAS,UAAUoB,GAASR,CAAY,GAGtDZ,EAAS,UAAUoB,GAAS,GAAGR,CAAY;AAC3C;AAAA,QACF;AAAA,IAEJ;AAAA,EACF,QAAgB;AACd,IAAAD,IAAc;AAAA,EAChB;AACA,SAAOA;AACT;AAOA,SAASU,GAAiBV,GAAa;AACrC,MAAIrP,IAAS,GACT4J,IAAS,GACTC,IAAS;AACb,UAAQwF,GAAW;AAAA;AAAA,IAEjB,KAAK;AACH,MAAAzF,IAAS;AACT;AAAA;AAAA,IAGF,KAAK;AACH,MAAA5J,IAAS;AACT;AAAA;AAAA,IAGF,KAAK;AACH,MAAA6J,IAAS;AACT;AAAA;AAAA,IAGF,KAAK;AACH,MAAA7J,IAAS,IACT6J,IAAS;AACT;AAAA;AAAA,IAGF,KAAK;AACH,MAAA7J,IAAS;AACT;AAAA;AAAA,IAGF,KAAK;AACH,MAAAA,IAAS,IACT4J,IAAS;AACT;AAAA;AAAA,IAGF,KAAK;AACH,MAAA5J,IAAS;AACT;AAAA,EACN;AACE,SAAO;AAAA,IACL,QAAQA;AAAA,IACR,QAAQ4J;AAAA,IACR,QAAQC;AAAA,EACZ;AACA;AAEA,IAAImG,KAAS;AAAA,EACX,QAAQ,WAAkB;AACxB,SAAK,cAAa,GAClB,KAAK,WAAU,GACf,KAAK,YAAW,GAChB,KAAK,aAAY,GACb,KAAK,WACP,KAAK,cAAa;AAAA,EAEtB;AAAA,EACA,eAAe,WAAyB;AACtC,QAAIx2B,IAAU,KAAK,SACjB/iC,IAAU,KAAK,SACfw5D,IAAY,KAAK,WACjB7O,IAAU,KAAK,SACbyM,IAAW,OAAOp3D,EAAQ,iBAAiB,GAC3Cs3D,IAAY,OAAOt3D,EAAQ,kBAAkB;AACjD,IAAAixD,GAAStG,GAASiD,EAAY,GAC9BwD,GAAYruB,GAAS6qB,EAAY;AACjC,QAAI6L,IAAgB;AAAA,MAClB,OAAO,KAAK,IAAID,EAAU,aAAapC,KAAY,IAAIA,IAAW1H,EAAmB;AAAA,MACrF,QAAQ,KAAK,IAAI8J,EAAU,cAAclC,KAAa,IAAIA,IAAY3H,EAAoB;AAAA,IAChG;AACI,SAAK,gBAAgB8J,GACrB3I,GAASnG,GAAS;AAAA,MAChB,OAAO8O,EAAc;AAAA,MACrB,QAAQA,EAAc;AAAA,IAC5B,CAAK,GACDxI,GAASluB,GAAS6qB,EAAY,GAC9BwD,GAAYzG,GAASiD,EAAY;AAAA,EACnC;AAAA;AAAA,EAEA,YAAY,WAAsB;AAChC,QAAI6L,IAAgB,KAAK,eACvB1O,IAAY,KAAK,WACf2O,IAAW,KAAK,QAAQ,UACxBC,IAAU,KAAK,IAAI5O,EAAU,MAAM,IAAI,QAAQ,IAC/CwL,IAAeoD,IAAU5O,EAAU,gBAAgBA,EAAU,cAC7DyL,IAAgBmD,IAAU5O,EAAU,eAAeA,EAAU,eAC7DkK,IAAcsB,IAAeC,GAC7BoD,IAAcH,EAAc,OAC5BI,IAAeJ,EAAc;AACjC,IAAIA,EAAc,SAASxE,IAAcwE,EAAc,QACjDC,MAAa,IACfE,IAAcH,EAAc,SAASxE,IAErC4E,IAAeJ,EAAc,QAAQxE,IAE9ByE,MAAa,IACtBG,IAAeJ,EAAc,QAAQxE,IAErC2E,IAAcH,EAAc,SAASxE;AAEvC,QAAI6E,IAAa;AAAA,MACf,aAAa7E;AAAA,MACb,cAAcsB;AAAA,MACd,eAAeC;AAAA,MACf,OAAOoD;AAAA,MACP,QAAQC;AAAA,IACd;AACI,SAAK,aAAaC,GAClB,KAAK,UAAUJ,MAAa,KAAKA,MAAa,GAC9C,KAAK,YAAY,IAAM,EAAI,GAC3BI,EAAW,QAAQ,KAAK,IAAI,KAAK,IAAIA,EAAW,OAAOA,EAAW,QAAQ,GAAGA,EAAW,QAAQ,GAChGA,EAAW,SAAS,KAAK,IAAI,KAAK,IAAIA,EAAW,QAAQA,EAAW,SAAS,GAAGA,EAAW,SAAS,GACpGA,EAAW,QAAQL,EAAc,QAAQK,EAAW,SAAS,GAC7DA,EAAW,OAAOL,EAAc,SAASK,EAAW,UAAU,GAC9DA,EAAW,UAAUA,EAAW,MAChCA,EAAW,SAASA,EAAW,KAC/B,KAAK,oBAAoBvJ,GAAO,CAAA,GAAIuJ,CAAU;AAAA,EAChD;AAAA,EACA,aAAa,SAAqBC,GAAaC,GAAiB;AAC9D,QAAIh6D,IAAU,KAAK,SACjBy5D,IAAgB,KAAK,eACrBK,IAAa,KAAK,YAClBG,IAAc,KAAK,aACjBP,IAAW15D,EAAQ,UACnBi1D,IAAc6E,EAAW,aACzBI,IAAU,KAAK,WAAWD;AAC9B,QAAIF,GAAa;AACf,UAAII,IAAiB,OAAOn6D,EAAQ,cAAc,KAAK,GACnDo6D,IAAkB,OAAOp6D,EAAQ,eAAe,KAAK;AACzD,MAAI05D,IAAW,KACbS,IAAiB,KAAK,IAAIA,GAAgBV,EAAc,KAAK,GAC7DW,IAAkB,KAAK,IAAIA,GAAiBX,EAAc,MAAM,GAC5DC,MAAa,MACXU,IAAkBnF,IAAckF,IAClCA,IAAiBC,IAAkBnF,IAEnCmF,IAAkBD,IAAiBlF,MAG9ByE,IAAW,MAChBS,IACFA,IAAiB,KAAK,IAAIA,GAAgBD,IAAUD,EAAY,QAAQ,CAAC,IAChEG,IACTA,IAAkB,KAAK,IAAIA,GAAiBF,IAAUD,EAAY,SAAS,CAAC,IACnEC,MACTC,IAAiBF,EAAY,OAC7BG,IAAkBH,EAAY,QAC1BG,IAAkBnF,IAAckF,IAClCA,IAAiBC,IAAkBnF,IAEnCmF,IAAkBD,IAAiBlF;AAIzC,UAAIoF,IAAoBtF,GAAiB;AAAA,QACvC,aAAaE;AAAA,QACb,OAAOkF;AAAA,QACP,QAAQC;AAAA,MAChB,CAAO;AACD,MAAAD,IAAiBE,EAAkB,OACnCD,IAAkBC,EAAkB,QACpCP,EAAW,WAAWK,GACtBL,EAAW,YAAYM,GACvBN,EAAW,WAAW,OACtBA,EAAW,YAAY;AAAA,IACzB;AACA,QAAIE;AACF,UAAIN,KAAYQ,IAAU,IAAI,IAAI;AAChC,YAAII,IAAgBb,EAAc,QAAQK,EAAW,OACjDS,IAAed,EAAc,SAASK,EAAW;AACrD,QAAAA,EAAW,UAAU,KAAK,IAAI,GAAGQ,CAAa,GAC9CR,EAAW,SAAS,KAAK,IAAI,GAAGS,CAAY,GAC5CT,EAAW,UAAU,KAAK,IAAI,GAAGQ,CAAa,GAC9CR,EAAW,SAAS,KAAK,IAAI,GAAGS,CAAY,GACxCL,KAAW,KAAK,YAClBJ,EAAW,UAAU,KAAK,IAAIG,EAAY,MAAMA,EAAY,QAAQA,EAAY,QAAQH,EAAW,MAAM,GACzGA,EAAW,SAAS,KAAK,IAAIG,EAAY,KAAKA,EAAY,OAAOA,EAAY,SAASH,EAAW,OAAO,GACxGA,EAAW,UAAUG,EAAY,MACjCH,EAAW,SAASG,EAAY,KAC5BP,MAAa,MACXI,EAAW,SAASL,EAAc,UACpCK,EAAW,UAAU,KAAK,IAAI,GAAGQ,CAAa,GAC9CR,EAAW,UAAU,KAAK,IAAI,GAAGQ,CAAa,IAE5CR,EAAW,UAAUL,EAAc,WACrCK,EAAW,SAAS,KAAK,IAAI,GAAGS,CAAY,GAC5CT,EAAW,SAAS,KAAK,IAAI,GAAGS,CAAY;AAAA,MAIpD;AACE,QAAAT,EAAW,UAAU,CAACA,EAAW,OACjCA,EAAW,SAAS,CAACA,EAAW,QAChCA,EAAW,UAAUL,EAAc,OACnCK,EAAW,SAASL,EAAc;AAAA,EAGxC;AAAA,EACA,cAAc,SAAsBe,GAASC,GAAa;AACxD,QAAIX,IAAa,KAAK,YACpB/O,IAAY,KAAK;AACnB,QAAI0P,GAAa;AACf,UAAIC,IAAmBrF,GAAgB;AAAA,QACnC,OAAOtK,EAAU,eAAe,KAAK,IAAIA,EAAU,UAAU,CAAC;AAAA,QAC9D,QAAQA,EAAU,gBAAgB,KAAK,IAAIA,EAAU,UAAU,CAAC;AAAA,QAChE,QAAQA,EAAU,UAAU;AAAA,MACtC,CAAS,GACDwL,IAAemE,EAAiB,OAChClE,IAAgBkE,EAAiB,QAC/BhW,IAAQoV,EAAW,SAASvD,IAAeuD,EAAW,eACtDnV,IAASmV,EAAW,UAAUtD,IAAgBsD,EAAW;AAC7D,MAAAA,EAAW,SAASpV,IAAQoV,EAAW,SAAS,GAChDA,EAAW,QAAQnV,IAASmV,EAAW,UAAU,GACjDA,EAAW,QAAQpV,GACnBoV,EAAW,SAASnV,GACpBmV,EAAW,cAAcvD,IAAeC,GACxCsD,EAAW,eAAevD,GAC1BuD,EAAW,gBAAgBtD,GAC3B,KAAK,YAAY,IAAM,EAAK;AAAA,IAC9B;AACA,KAAIsD,EAAW,QAAQA,EAAW,YAAYA,EAAW,QAAQA,EAAW,cAC1EA,EAAW,OAAOA,EAAW,WAE3BA,EAAW,SAASA,EAAW,aAAaA,EAAW,SAASA,EAAW,eAC7EA,EAAW,MAAMA,EAAW,SAE9BA,EAAW,QAAQ,KAAK,IAAI,KAAK,IAAIA,EAAW,OAAOA,EAAW,QAAQ,GAAGA,EAAW,QAAQ,GAChGA,EAAW,SAAS,KAAK,IAAI,KAAK,IAAIA,EAAW,QAAQA,EAAW,SAAS,GAAGA,EAAW,SAAS,GACpG,KAAK,YAAY,IAAO,EAAI,GAC5BA,EAAW,OAAO,KAAK,IAAI,KAAK,IAAIA,EAAW,MAAMA,EAAW,OAAO,GAAGA,EAAW,OAAO,GAC5FA,EAAW,MAAM,KAAK,IAAI,KAAK,IAAIA,EAAW,KAAKA,EAAW,MAAM,GAAGA,EAAW,MAAM,GACxFA,EAAW,UAAUA,EAAW,MAChCA,EAAW,SAASA,EAAW,KAC/BhJ,GAAS,KAAK,QAAQP,GAAO;AAAA,MAC3B,OAAOuJ,EAAW;AAAA,MAClB,QAAQA,EAAW;AAAA,IACzB,GAAO7G,GAAc;AAAA,MACf,YAAY6G,EAAW;AAAA,MACvB,YAAYA,EAAW;AAAA,IAC7B,CAAK,CAAC,CAAC,GACH,KAAK,YAAYU,CAAO,GACpB,KAAK,WAAW,KAAK,WACvB,KAAK,aAAa,IAAM,EAAI;AAAA,EAEhC;AAAA,EACA,aAAa,SAAqBA,GAAS;AACzC,QAAIV,IAAa,KAAK,YACpB/O,IAAY,KAAK,WACfrG,IAAQqG,EAAU,gBAAgB+O,EAAW,QAAQA,EAAW,eAChEnV,IAASoG,EAAU,iBAAiB+O,EAAW,SAASA,EAAW;AACvE,IAAAvJ,GAAOxF,GAAW;AAAA,MAChB,OAAOrG;AAAA,MACP,QAAQC;AAAA,MACR,OAAOmV,EAAW,QAAQpV,KAAS;AAAA,MACnC,MAAMoV,EAAW,SAASnV,KAAU;AAAA,IAC1C,CAAK,GACDmM,GAAS,KAAK,OAAOP,GAAO;AAAA,MAC1B,OAAOxF,EAAU;AAAA,MACjB,QAAQA,EAAU;AAAA,IACxB,GAAOkI,GAAc1C,GAAO;AAAA,MACtB,YAAYxF,EAAU;AAAA,MACtB,YAAYA,EAAU;AAAA,IAC5B,GAAOA,CAAS,CAAC,CAAC,CAAC,GACXyP,KACF,KAAK,OAAM;AAAA,EAEf;AAAA,EACA,aAAa,WAAuB;AAClC,QAAIx6D,IAAU,KAAK,SACjB85D,IAAa,KAAK,YAChB7E,IAAcj1D,EAAQ,eAAeA,EAAQ,oBAC7C26D,IAAe,OAAO36D,EAAQ,YAAY,KAAK,KAC/Ci6D,IAAc;AAAA,MAChB,OAAOH,EAAW;AAAA,MAClB,QAAQA,EAAW;AAAA,IACzB;AACI,IAAI7E,MACE6E,EAAW,SAAS7E,IAAc6E,EAAW,QAC/CG,EAAY,SAASA,EAAY,QAAQhF,IAEzCgF,EAAY,QAAQA,EAAY,SAAShF,IAG7C,KAAK,cAAcgF,GACnB,KAAK,aAAa,IAAM,EAAI,GAG5BA,EAAY,QAAQ,KAAK,IAAI,KAAK,IAAIA,EAAY,OAAOA,EAAY,QAAQ,GAAGA,EAAY,QAAQ,GACpGA,EAAY,SAAS,KAAK,IAAI,KAAK,IAAIA,EAAY,QAAQA,EAAY,SAAS,GAAGA,EAAY,SAAS,GAGxGA,EAAY,QAAQ,KAAK,IAAIA,EAAY,UAAUA,EAAY,QAAQU,CAAY,GACnFV,EAAY,SAAS,KAAK,IAAIA,EAAY,WAAWA,EAAY,SAASU,CAAY,GACtFV,EAAY,OAAOH,EAAW,QAAQA,EAAW,QAAQG,EAAY,SAAS,GAC9EA,EAAY,MAAMH,EAAW,OAAOA,EAAW,SAASG,EAAY,UAAU,GAC9EA,EAAY,UAAUA,EAAY,MAClCA,EAAY,SAASA,EAAY,KACjC,KAAK,qBAAqB1J,GAAO,CAAA,GAAI0J,CAAW;AAAA,EAClD;AAAA,EACA,cAAc,SAAsBF,GAAaC,GAAiB;AAChE,QAAIh6D,IAAU,KAAK,SACjBy5D,IAAgB,KAAK,eACrBK,IAAa,KAAK,YAClBG,IAAc,KAAK,aACnBW,IAAU,KAAK,SACb3F,IAAcj1D,EAAQ;AAC1B,QAAI+5D,GAAa;AACf,UAAIc,IAAkB,OAAO76D,EAAQ,eAAe,KAAK,GACrD86D,IAAmB,OAAO96D,EAAQ,gBAAgB,KAAK,GACvD+6D,IAAkBH,IAAU,KAAK,IAAInB,EAAc,OAAOK,EAAW,OAAOA,EAAW,QAAQA,EAAW,MAAML,EAAc,QAAQK,EAAW,IAAI,IAAIL,EAAc,OACvKuB,IAAmBJ,IAAU,KAAK,IAAInB,EAAc,QAAQK,EAAW,QAAQA,EAAW,SAASA,EAAW,KAAKL,EAAc,SAASK,EAAW,GAAG,IAAIL,EAAc;AAG9K,MAAAoB,IAAkB,KAAK,IAAIA,GAAiBpB,EAAc,KAAK,GAC/DqB,IAAmB,KAAK,IAAIA,GAAkBrB,EAAc,MAAM,GAC9DxE,MACE4F,KAAmBC,IACjBA,IAAmB7F,IAAc4F,IACnCC,IAAmBD,IAAkB5F,IAErC4F,IAAkBC,IAAmB7F,IAE9B4F,IACTC,IAAmBD,IAAkB5F,IAC5B6F,MACTD,IAAkBC,IAAmB7F,IAEnC+F,IAAmB/F,IAAc8F,IACnCC,IAAmBD,IAAkB9F,IAErC8F,IAAkBC,IAAmB/F,IAKzCgF,EAAY,WAAW,KAAK,IAAIY,GAAiBE,CAAe,GAChEd,EAAY,YAAY,KAAK,IAAIa,GAAkBE,CAAgB,GACnEf,EAAY,WAAWc,GACvBd,EAAY,YAAYe;AAAA,IAC1B;AACA,IAAIhB,MACEY,KACFX,EAAY,UAAU,KAAK,IAAI,GAAGH,EAAW,IAAI,GACjDG,EAAY,SAAS,KAAK,IAAI,GAAGH,EAAW,GAAG,GAC/CG,EAAY,UAAU,KAAK,IAAIR,EAAc,OAAOK,EAAW,OAAOA,EAAW,KAAK,IAAIG,EAAY,OACtGA,EAAY,SAAS,KAAK,IAAIR,EAAc,QAAQK,EAAW,MAAMA,EAAW,MAAM,IAAIG,EAAY,WAEtGA,EAAY,UAAU,GACtBA,EAAY,SAAS,GACrBA,EAAY,UAAUR,EAAc,QAAQQ,EAAY,OACxDA,EAAY,SAASR,EAAc,SAASQ,EAAY;AAAA,EAG9D;AAAA,EACA,eAAe,WAAyB;AACtC,QAAIj6D,IAAU,KAAK,SACjBy5D,IAAgB,KAAK,eACrBQ,IAAc,KAAK;AACrB,KAAIA,EAAY,QAAQA,EAAY,YAAYA,EAAY,QAAQA,EAAY,cAC9EA,EAAY,OAAOA,EAAY,WAE7BA,EAAY,SAASA,EAAY,aAAaA,EAAY,SAASA,EAAY,eACjFA,EAAY,MAAMA,EAAY,SAEhCA,EAAY,QAAQ,KAAK,IAAI,KAAK,IAAIA,EAAY,OAAOA,EAAY,QAAQ,GAAGA,EAAY,QAAQ,GACpGA,EAAY,SAAS,KAAK,IAAI,KAAK,IAAIA,EAAY,QAAQA,EAAY,SAAS,GAAGA,EAAY,SAAS,GACxG,KAAK,aAAa,IAAO,EAAI,GAC7BA,EAAY,OAAO,KAAK,IAAI,KAAK,IAAIA,EAAY,MAAMA,EAAY,OAAO,GAAGA,EAAY,OAAO,GAChGA,EAAY,MAAM,KAAK,IAAI,KAAK,IAAIA,EAAY,KAAKA,EAAY,MAAM,GAAGA,EAAY,MAAM,GAC5FA,EAAY,UAAUA,EAAY,MAClCA,EAAY,SAASA,EAAY,KAC7Bj6D,EAAQ,WAAWA,EAAQ,kBAE7B0xD,GAAQ,KAAK,MAAMzD,IAAagM,EAAY,SAASR,EAAc,SAASQ,EAAY,UAAUR,EAAc,SAASzM,KAAcF,EAAU,GAEnJgE,GAAS,KAAK,SAASP,GAAO;AAAA,MAC5B,OAAO0J,EAAY;AAAA,MACnB,QAAQA,EAAY;AAAA,IAC1B,GAAOhH,GAAc;AAAA,MACf,YAAYgH,EAAY;AAAA,MACxB,YAAYA,EAAY;AAAA,IAC9B,CAAK,CAAC,CAAC,GACC,KAAK,WAAW,KAAK,WACvB,KAAK,YAAY,IAAM,EAAI,GAExB,KAAK,YACR,KAAK,OAAM;AAAA,EAEf;AAAA,EACA,QAAQ,WAAkB;AACxB,SAAK,QAAO,GACZxH,GAAc,KAAK,SAASnE,IAAY,KAAK,QAAO,CAAE;AAAA,EACxD;AACF,GAEI2M,KAAU;AAAA,EACZ,aAAa,WAAuB;AAClC,QAAIl4B,IAAU,KAAK,SACjBm4B,IAAc,KAAK,aACjBD,IAAU,KAAK,QAAQ,SACvB9zB,IAAM+zB,IAAc,KAAK,iBAAiB,KAAK,KAC/CC,IAAMp4B,EAAQ,OAAO,wBACrBW,IAAQ,SAAS,cAAc,KAAK;AAQxC,QAPIw3B,MACFx3B,EAAM,cAAcw3B,IAEtBx3B,EAAM,MAAMyD,GACZzD,EAAM,MAAMy3B,GACZ,KAAK,QAAQ,YAAYz3B,CAAK,GAC9B,KAAK,eAAeA,GAChB,EAACu3B,GAGL;AAAA,UAAIG,IAAWH;AACf,MAAI,OAAOA,KAAY,WACrBG,IAAWr4B,EAAQ,cAAc,iBAAiBk4B,CAAO,IAChDA,EAAQ,kBACjBG,IAAW,CAACH,CAAO,IAErB,KAAK,WAAWG,GAChB9K,GAAQ8K,GAAU,SAAUC,GAAI;AAC9B,YAAIC,IAAM,SAAS,cAAc,KAAK;AAGtC,QAAA5J,GAAQ2J,GAAInN,IAAc;AAAA,UACxB,OAAOmN,EAAG;AAAA,UACV,QAAQA,EAAG;AAAA,UACX,MAAMA,EAAG;AAAA,QACjB,CAAO,GACGH,MACFI,EAAI,cAAcJ,IAEpBI,EAAI,MAAMn0B,GACVm0B,EAAI,MAAMH,GAQVG,EAAI,MAAM,UAAU,2KACpBD,EAAG,YAAY,IACfA,EAAG,YAAYC,CAAG;AAAA,MACpB,CAAC;AAAA;AAAA,EACH;AAAA,EACA,cAAc,WAAwB;AACpC,IAAAhL,GAAQ,KAAK,UAAU,SAAUvtB,GAAS;AACxC,UAAIjjC,IAAO2xD,GAAQ1uB,GAASmrB,EAAY;AACxC,MAAA4C,GAAS/tB,GAAS;AAAA,QAChB,OAAOjjC,EAAK;AAAA,QACZ,QAAQA,EAAK;AAAA,MACrB,CAAO,GACDijC,EAAQ,YAAYjjC,EAAK,MACzB6xD,GAAW5uB,GAASmrB,EAAY;AAAA,IAClC,CAAC;AAAA,EACH;AAAA,EACA,SAAS,WAAmB;AAC1B,QAAInD,IAAY,KAAK,WACnB+O,IAAa,KAAK,YAClBG,IAAc,KAAK,aACjBsB,IAAetB,EAAY,OAC7BuB,IAAgBvB,EAAY,QAC1BvV,IAAQqG,EAAU,OACpBpG,IAASoG,EAAU,QACjB0Q,IAAOxB,EAAY,OAAOH,EAAW,OAAO/O,EAAU,MACtD2Q,IAAMzB,EAAY,MAAMH,EAAW,MAAM/O,EAAU;AACvD,IAAI,CAAC,KAAK,WAAW,KAAK,aAG1B+F,GAAS,KAAK,cAAcP,GAAO;AAAA,MACjC,OAAO7L;AAAA,MACP,QAAQC;AAAA,IACd,GAAOsO,GAAc1C,GAAO;AAAA,MACtB,YAAY,CAACkL;AAAA,MACb,YAAY,CAACC;AAAA,IACnB,GAAO3Q,CAAS,CAAC,CAAC,CAAC,GACfuF,GAAQ,KAAK,UAAU,SAAUvtB,GAAS;AACxC,UAAIjjC,IAAO2xD,GAAQ1uB,GAASmrB,EAAY,GACpCyN,IAAgB77D,EAAK,OACrB87D,IAAiB97D,EAAK,QACtB61D,IAAWgG,GACX/F,IAAYgG,GACZ5Q,IAAQ;AACZ,MAAIuQ,MACFvQ,IAAQ2Q,IAAgBJ,GACxB3F,IAAY4F,IAAgBxQ,IAE1BwQ,KAAiB5F,IAAYgG,MAC/B5Q,IAAQ4Q,IAAiBJ,GACzB7F,IAAW4F,IAAevQ,GAC1B4K,IAAYgG,IAEd9K,GAAS/tB,GAAS;AAAA,QAChB,OAAO4yB;AAAA,QACP,QAAQC;AAAA,MAChB,CAAO,GACD9E,GAAS/tB,EAAQ,qBAAqB,KAAK,EAAE,CAAC,GAAGwtB,GAAO;AAAA,QACtD,OAAO7L,IAAQsG;AAAA,QACf,QAAQrG,IAASqG;AAAA,MACzB,GAASiI,GAAc1C,GAAO;AAAA,QACtB,YAAY,CAACkL,IAAOzQ;AAAA,QACpB,YAAY,CAAC0Q,IAAM1Q;AAAA,MAC3B,GAASD,CAAS,CAAC,CAAC,CAAC;AAAA,IACjB,CAAC;AAAA,EACH;AACF,GAEI8Q,KAAS;AAAA,EACX,MAAM,WAAgB;AACpB,QAAI94B,IAAU,KAAK,SACjB/iC,IAAU,KAAK,SACf2qD,IAAU,KAAK;AACjB,IAAIt6C,GAAWrQ,EAAQ,SAAS,KAC9BoyD,GAAYrvB,GAAS0rB,IAAkBzuD,EAAQ,SAAS,GAEtDqQ,GAAWrQ,EAAQ,QAAQ,KAC7BoyD,GAAYrvB,GAASyrB,IAAiBxuD,EAAQ,QAAQ,GAEpDqQ,GAAWrQ,EAAQ,OAAO,KAC5BoyD,GAAYrvB,GAASwrB,IAAgBvuD,EAAQ,OAAO,GAElDqQ,GAAWrQ,EAAQ,IAAI,KACzBoyD,GAAYrvB,GAASurB,IAAYtuD,EAAQ,IAAI,GAE3CqQ,GAAWrQ,EAAQ,IAAI,KACzBoyD,GAAYrvB,GAASqsB,IAAYpvD,EAAQ,IAAI,GAE/CoyD,GAAYzH,GAASmE,IAAoB,KAAK,cAAc,KAAK,UAAU,KAAK,IAAI,CAAC,GACjF9uD,EAAQ,YAAYA,EAAQ,eAC9BoyD,GAAYzH,GAASwE,IAAa,KAAK,UAAU,KAAK,MAAM,KAAK,IAAI,GAAG;AAAA,MACtE,SAAS;AAAA,MACT,SAAS;AAAA,IACjB,CAAO,GAECnvD,EAAQ,4BACVoyD,GAAYzH,GAAS+D,IAAgB,KAAK,aAAa,KAAK,SAAS,KAAK,IAAI,CAAC,GAEjF0D,GAAYrvB,EAAQ,eAAegsB,IAAoB,KAAK,aAAa,KAAK,SAAS,KAAK,IAAI,CAAC,GACjGqD,GAAYrvB,EAAQ,eAAeisB,IAAkB,KAAK,YAAY,KAAK,QAAQ,KAAK,IAAI,CAAC,GACzFhvD,EAAQ,cACVoyD,GAAY,QAAQlD,IAAc,KAAK,WAAW,KAAK,OAAO,KAAK,IAAI,CAAC;AAAA,EAE5E;AAAA,EACA,QAAQ,WAAkB;AACxB,QAAInsB,IAAU,KAAK,SACjB/iC,IAAU,KAAK,SACf2qD,IAAU,KAAK;AACjB,IAAIt6C,GAAWrQ,EAAQ,SAAS,KAC9BiyD,GAAelvB,GAAS0rB,IAAkBzuD,EAAQ,SAAS,GAEzDqQ,GAAWrQ,EAAQ,QAAQ,KAC7BiyD,GAAelvB,GAASyrB,IAAiBxuD,EAAQ,QAAQ,GAEvDqQ,GAAWrQ,EAAQ,OAAO,KAC5BiyD,GAAelvB,GAASwrB,IAAgBvuD,EAAQ,OAAO,GAErDqQ,GAAWrQ,EAAQ,IAAI,KACzBiyD,GAAelvB,GAASurB,IAAYtuD,EAAQ,IAAI,GAE9CqQ,GAAWrQ,EAAQ,IAAI,KACzBiyD,GAAelvB,GAASqsB,IAAYpvD,EAAQ,IAAI,GAElDiyD,GAAetH,GAASmE,IAAoB,KAAK,WAAW,GACxD9uD,EAAQ,YAAYA,EAAQ,eAC9BiyD,GAAetH,GAASwE,IAAa,KAAK,SAAS;AAAA,MACjD,SAAS;AAAA,MACT,SAAS;AAAA,IACjB,CAAO,GAECnvD,EAAQ,4BACViyD,GAAetH,GAAS+D,IAAgB,KAAK,UAAU,GAEzDuD,GAAelvB,EAAQ,eAAegsB,IAAoB,KAAK,UAAU,GACzEkD,GAAelvB,EAAQ,eAAeisB,IAAkB,KAAK,SAAS,GAClEhvD,EAAQ,cACViyD,GAAe,QAAQ/C,IAAc,KAAK,QAAQ;AAAA,EAEtD;AACF,GAEI4M,KAAW;AAAA,EACb,QAAQ,WAAkB;AACxB,QAAI,MAAK,UAGT;AAAA,UAAI97D,IAAU,KAAK,SACjBw5D,IAAY,KAAK,WACjBC,IAAgB,KAAK,eACnBsC,IAASvC,EAAU,cAAcC,EAAc,OAC/CuC,IAASxC,EAAU,eAAeC,EAAc,QAChDzO,IAAQ,KAAK,IAAI+Q,IAAS,CAAC,IAAI,KAAK,IAAIC,IAAS,CAAC,IAAID,IAASC;AAGnE,UAAIhR,MAAU,GAAG;AACf,YAAI8O,GACAG;AACJ,QAAIj6D,EAAQ,YACV85D,IAAa,KAAK,cAAa,GAC/BG,IAAc,KAAK,eAAc,IAEnC,KAAK,OAAM,GACPj6D,EAAQ,YACV,KAAK,cAAcswD,GAAQwJ,GAAY,SAAUjgC,GAAGjO,GAAG;AACrD,UAAAkuC,EAAWluC,CAAC,IAAIiO,IAAImxB;AAAA,QACtB,CAAC,CAAC,GACF,KAAK,eAAesF,GAAQ2J,GAAa,SAAUpgC,GAAGjO,GAAG;AACvD,UAAAquC,EAAYruC,CAAC,IAAIiO,IAAImxB;AAAA,QACvB,CAAC,CAAC;AAAA,MAEN;AAAA;AAAA,EACF;AAAA,EACA,UAAU,WAAoB;AAC5B,IAAI,KAAK,YAAY,KAAK,QAAQ,aAAaqD,MAG/C,KAAK,YAAY2C,GAAS,KAAK,SAAStD,EAAU,IAAIU,KAAiBD,EAAc;AAAA,EACvF;AAAA,EACA,OAAO,SAAe/rD,GAAO;AAC3B,QAAIuuC,IAAQ,MACRqa,IAAQ,OAAO,KAAK,QAAQ,cAAc,KAAK,KAC/CiR,IAAQ;AACZ,IAAI,KAAK,aAGT75D,EAAM,eAAc,GAGhB,MAAK,aAGT,KAAK,WAAW,IAChB,WAAW,WAAY;AACrB,MAAAuuC,EAAM,WAAW;AAAA,IACnB,GAAG,EAAE,GACDvuC,EAAM,SACR65D,IAAQ75D,EAAM,SAAS,IAAI,IAAI,KACtBA,EAAM,aACf65D,IAAQ,CAAC75D,EAAM,aAAa,MACnBA,EAAM,WACf65D,IAAQ75D,EAAM,SAAS,IAAI,IAAI,KAEjC,KAAK,KAAK,CAAC65D,IAAQjR,GAAO5oD,CAAK;AAAA,EACjC;AAAA,EACA,WAAW,SAAmBA,GAAO;AACnC,QAAI85D,IAAU95D,EAAM,SAClB+5D,IAAS/5D,EAAM;AACjB,QAAI,OAAK,aAGLA,EAAM,SAAS,eAAeA,EAAM,SAAS,iBAAiBA,EAAM,gBAAgB;AAAA,KAExFJ,GAASk6D,CAAO,KAAKA,MAAY,KAAKl6D,GAASm6D,CAAM,KAAKA,MAAW,KAGlE/5D,EAAM,WAGT;AAAA,UAAIpC,IAAU,KAAK,SACjByzD,IAAW,KAAK,UACd2I;AAeJ,MAdIh6D,EAAM,iBAERkuD,GAAQluD,EAAM,gBAAgB,SAAUi6D,GAAO;AAC7C,QAAA5I,EAAS4I,EAAM,UAAU,IAAIhI,GAAWgI,CAAK;AAAA,MAC/C,CAAC,IAGD5I,EAASrxD,EAAM,aAAa,CAAC,IAAIiyD,GAAWjyD,CAAK,GAE/C,OAAO,KAAKqxD,CAAQ,EAAE,SAAS,KAAKzzD,EAAQ,YAAYA,EAAQ,cAClEo8D,IAASnP,KAETmP,IAAS3K,GAAQrvD,EAAM,QAAQ6rD,EAAW,GAEvCqB,GAAe,KAAK8M,CAAM,KAG3B3J,GAAc,KAAK,SAAShE,IAAkB;AAAA,QAChD,eAAersD;AAAA,QACf,QAAQg6D;AAAA,MACd,CAAK,MAAM,OAKPh6D,EAAM,eAAc,GACpB,KAAK,SAASg6D,GACd,KAAK,WAAW,IACZA,MAAWrP,OACb,KAAK,WAAW,IAChBkE,GAAS,KAAK,SAASlD,EAAW;AAAA;AAAA,EAEtC;AAAA,EACA,UAAU,SAAkB3rD,GAAO;AACjC,QAAIg6D,IAAS,KAAK;AAClB,QAAI,OAAK,YAAY,CAACA,IAGtB;AAAA,UAAI3I,IAAW,KAAK;AAEpB,MADArxD,EAAM,eAAc,GAChBqwD,GAAc,KAAK,SAASjE,IAAiB;AAAA,QAC/C,eAAepsD;AAAA,QACf,QAAQg6D;AAAA,MACd,CAAK,MAAM,OAGHh6D,EAAM,iBACRkuD,GAAQluD,EAAM,gBAAgB,SAAUi6D,GAAO;AAE7C,QAAA9L,GAAOkD,EAAS4I,EAAM,UAAU,KAAK,CAAA,GAAIhI,GAAWgI,GAAO,EAAI,CAAC;AAAA,MAClE,CAAC,IAED9L,GAAOkD,EAASrxD,EAAM,aAAa,CAAC,KAAK,CAAA,GAAIiyD,GAAWjyD,GAAO,EAAI,CAAC,GAEtE,KAAK,OAAOA,CAAK;AAAA;AAAA,EACnB;AAAA,EACA,SAAS,SAAiBA,GAAO;AAC/B,QAAI,MAAK,UAGT;AAAA,UAAIg6D,IAAS,KAAK,QAChB3I,IAAW,KAAK;AAQlB,MAPIrxD,EAAM,iBACRkuD,GAAQluD,EAAM,gBAAgB,SAAUi6D,GAAO;AAC7C,eAAO5I,EAAS4I,EAAM,UAAU;AAAA,MAClC,CAAC,IAED,OAAO5I,EAASrxD,EAAM,aAAa,CAAC,GAEjCg6D,MAGLh6D,EAAM,eAAc,GACf,OAAO,KAAKqxD,CAAQ,EAAE,WACzB,KAAK,SAAS,KAEZ,KAAK,aACP,KAAK,WAAW,IAChBpC,GAAY,KAAK,SAAStD,IAAa,KAAK,WAAW,KAAK,QAAQ,KAAK,IAE3E0E,GAAc,KAAK,SAASlE,IAAgB;AAAA,QAC1C,eAAensD;AAAA,QACf,QAAQg6D;AAAA,MACd,CAAK;AAAA;AAAA,EACH;AACF,GAEIE,KAAS;AAAA,EACX,QAAQ,SAAgBl6D,GAAO;AAC7B,QAAIpC,IAAU,KAAK,SACjB85D,IAAa,KAAK,YAClBL,IAAgB,KAAK,eACrBQ,IAAc,KAAK,aACnBxG,IAAW,KAAK,UACd2I,IAAS,KAAK,QACdnH,IAAcj1D,EAAQ,aACtBy7D,IAAOxB,EAAY,MACrByB,IAAMzB,EAAY,KAClBvV,IAAQuV,EAAY,OACpBtV,IAASsV,EAAY,QACnBsC,IAAQd,IAAO/W,GACf8X,IAASd,IAAM/W,GACf8X,IAAU,GACVC,IAAS,GACT1F,IAAWyC,EAAc,OACzBvC,IAAYuC,EAAc,QAC1BkD,IAAa,IACblxC;AAGJ,IAAI,CAACwpC,KAAe7yD,EAAM,aACxB6yD,IAAcvQ,KAASC,IAASD,IAAQC,IAAS,IAE/C,KAAK,YACP8X,IAAUxC,EAAY,SACtByC,IAASzC,EAAY,QACrBjD,IAAWyF,IAAU,KAAK,IAAIhD,EAAc,OAAOK,EAAW,OAAOA,EAAW,OAAOA,EAAW,KAAK,GACvG5C,IAAYwF,IAAS,KAAK,IAAIjD,EAAc,QAAQK,EAAW,QAAQA,EAAW,MAAMA,EAAW,MAAM;AAE3G,QAAIlG,IAAUH,EAAS,OAAO,KAAKA,CAAQ,EAAE,CAAC,CAAC,GAC3CmJ,IAAQ;AAAA,MACV,GAAGhJ,EAAQ,OAAOA,EAAQ;AAAA,MAC1B,GAAGA,EAAQ,OAAOA,EAAQ;AAAA,IAChC,GACQiJ,IAAQ,SAAeC,GAAM;AAC/B,cAAQA,GAAI;AAAA,QACV,KAAK5P;AACH,UAAIqP,IAAQK,EAAM,IAAI5F,MACpB4F,EAAM,IAAI5F,IAAWuF;AAEvB;AAAA,QACF,KAAKpP;AACH,UAAIsO,IAAOmB,EAAM,IAAIH,MACnBG,EAAM,IAAIH,IAAUhB;AAEtB;AAAA,QACF,KAAKpO;AACH,UAAIqO,IAAMkB,EAAM,IAAIF,MAClBE,EAAM,IAAIF,IAAShB;AAErB;AAAA,QACF,KAAKtO;AACH,UAAIoP,IAASI,EAAM,IAAI1F,MACrB0F,EAAM,IAAI1F,IAAYsF;AAExB;AAAA,MACV;AAAA,IACI;AACA,YAAQJ,GAAM;AAAA;AAAA,MAEZ,KAAKtP;AACH,QAAA2O,KAAQmB,EAAM,GACdlB,KAAOkB,EAAM;AACb;AAAA;AAAA,MAGF,KAAK1P;AACH,YAAI0P,EAAM,KAAK,MAAML,KAASvF,KAAY/B,MAAgByG,KAAOgB,KAAUF,KAAUtF,KAAa;AAChG,UAAAyF,IAAa;AACb;AAAA,QACF;AACA,QAAAE,EAAM3P,EAAW,GACjBxI,KAASkY,EAAM,GACXlY,IAAQ,MACV0X,IAASjP,IACTzI,IAAQ,CAACA,GACT+W,KAAQ/W,IAENuQ,MACFtQ,IAASD,IAAQuQ,GACjByG,MAAQzB,EAAY,SAAStV,KAAU;AAEzC;AAAA,MACF,KAAK0I;AACH,YAAIuP,EAAM,KAAK,MAAMlB,KAAOgB,KAAUzH,MAAgBwG,KAAQgB,KAAWF,KAASvF,KAAY;AAC5F,UAAA2F,IAAa;AACb;AAAA,QACF;AACA,QAAAE,EAAMxP,EAAY,GAClB1I,KAAUiY,EAAM,GAChBlB,KAAOkB,EAAM,GACTjY,IAAS,MACXyX,IAAShP,IACTzI,IAAS,CAACA,GACV+W,KAAO/W,IAELsQ,MACFvQ,IAAQC,IAASsQ,GACjBwG,MAASxB,EAAY,QAAQvV,KAAS;AAExC;AAAA,MACF,KAAKyI;AACH,YAAIyP,EAAM,KAAK,MAAMnB,KAAQgB,KAAWxH,MAAgByG,KAAOgB,KAAUF,KAAUtF,KAAa;AAC9F,UAAAyF,IAAa;AACb;AAAA,QACF;AACA,QAAAE,EAAM1P,EAAW,GACjBzI,KAASkY,EAAM,GACfnB,KAAQmB,EAAM,GACVlY,IAAQ,MACV0X,IAASlP,IACTxI,IAAQ,CAACA,GACT+W,KAAQ/W,IAENuQ,MACFtQ,IAASD,IAAQuQ,GACjByG,MAAQzB,EAAY,SAAStV,KAAU;AAEzC;AAAA,MACF,KAAKyI;AACH,YAAIwP,EAAM,KAAK,MAAMJ,KAAUtF,KAAajC,MAAgBwG,KAAQgB,KAAWF,KAASvF,KAAY;AAClG,UAAA2F,IAAa;AACb;AAAA,QACF;AACA,QAAAE,EAAMzP,EAAY,GAClBzI,KAAUiY,EAAM,GACZjY,IAAS,MACXyX,IAAS/O,IACT1I,IAAS,CAACA,GACV+W,KAAO/W,IAELsQ,MACFvQ,IAAQC,IAASsQ,GACjBwG,MAASxB,EAAY,QAAQvV,KAAS;AAExC;AAAA,MACF,KAAK4I;AACH,YAAI2H,GAAa;AACf,cAAI2H,EAAM,KAAK,MAAMlB,KAAOgB,KAAUH,KAASvF,IAAW;AACxD,YAAA2F,IAAa;AACb;AAAA,UACF;AACA,UAAAE,EAAMxP,EAAY,GAClB1I,KAAUiY,EAAM,GAChBlB,KAAOkB,EAAM,GACblY,IAAQC,IAASsQ;AAAA,QACnB;AACE,UAAA4H,EAAMxP,EAAY,GAClBwP,EAAM3P,EAAW,GACb0P,EAAM,KAAK,IACTL,IAAQvF,IACVtS,KAASkY,EAAM,IACNA,EAAM,KAAK,KAAKlB,KAAOgB,MAChCC,IAAa,MAGfjY,KAASkY,EAAM,GAEbA,EAAM,KAAK,IACTlB,IAAMgB,MACR/X,KAAUiY,EAAM,GAChBlB,KAAOkB,EAAM,MAGfjY,KAAUiY,EAAM,GAChBlB,KAAOkB,EAAM;AAGjB,QAAIlY,IAAQ,KAAKC,IAAS,KACxByX,IAAS3O,IACT9I,IAAS,CAACA,GACVD,IAAQ,CAACA,GACTgX,KAAO/W,GACP8W,KAAQ/W,KACCA,IAAQ,KACjB0X,IAAS7O,IACT7I,IAAQ,CAACA,GACT+W,KAAQ/W,KACCC,IAAS,MAClByX,IAAS5O,IACT7I,IAAS,CAACA,GACV+W,KAAO/W;AAET;AAAA,MACF,KAAK4I;AACH,YAAI0H,GAAa;AACf,cAAI2H,EAAM,KAAK,MAAMlB,KAAOgB,KAAUjB,KAAQgB,IAAU;AACtD,YAAAE,IAAa;AACb;AAAA,UACF;AACA,UAAAE,EAAMxP,EAAY,GAClB1I,KAAUiY,EAAM,GAChBlB,KAAOkB,EAAM,GACblY,IAAQC,IAASsQ,GACjBwG,KAAQxB,EAAY,QAAQvV;AAAA,QAC9B;AACE,UAAAmY,EAAMxP,EAAY,GAClBwP,EAAM1P,EAAW,GACbyP,EAAM,KAAK,IACTnB,IAAOgB,KACT/X,KAASkY,EAAM,GACfnB,KAAQmB,EAAM,KACLA,EAAM,KAAK,KAAKlB,KAAOgB,MAChCC,IAAa,OAGfjY,KAASkY,EAAM,GACfnB,KAAQmB,EAAM,IAEZA,EAAM,KAAK,IACTlB,IAAMgB,MACR/X,KAAUiY,EAAM,GAChBlB,KAAOkB,EAAM,MAGfjY,KAAUiY,EAAM,GAChBlB,KAAOkB,EAAM;AAGjB,QAAIlY,IAAQ,KAAKC,IAAS,KACxByX,IAAS5O,IACT7I,IAAS,CAACA,GACVD,IAAQ,CAACA,GACTgX,KAAO/W,GACP8W,KAAQ/W,KACCA,IAAQ,KACjB0X,IAAS9O,IACT5I,IAAQ,CAACA,GACT+W,KAAQ/W,KACCC,IAAS,MAClByX,IAAS3O,IACT9I,IAAS,CAACA,GACV+W,KAAO/W;AAET;AAAA,MACF,KAAK8I;AACH,YAAIwH,GAAa;AACf,cAAI2H,EAAM,KAAK,MAAMnB,KAAQgB,KAAWD,KAAUtF,IAAY;AAC5D,YAAAyF,IAAa;AACb;AAAA,UACF;AACA,UAAAE,EAAM1P,EAAW,GACjBzI,KAASkY,EAAM,GACfnB,KAAQmB,EAAM,GACdjY,IAASD,IAAQuQ;AAAA,QACnB;AACE,UAAA4H,EAAMzP,EAAY,GAClByP,EAAM1P,EAAW,GACbyP,EAAM,KAAK,IACTnB,IAAOgB,KACT/X,KAASkY,EAAM,GACfnB,KAAQmB,EAAM,KACLA,EAAM,KAAK,KAAKJ,KAAUtF,MACnCyF,IAAa,OAGfjY,KAASkY,EAAM,GACfnB,KAAQmB,EAAM,IAEZA,EAAM,KAAK,IACTJ,IAAStF,MACXvS,KAAUiY,EAAM,KAGlBjY,KAAUiY,EAAM;AAGpB,QAAIlY,IAAQ,KAAKC,IAAS,KACxByX,IAAS9O,IACT3I,IAAS,CAACA,GACVD,IAAQ,CAACA,GACTgX,KAAO/W,GACP8W,KAAQ/W,KACCA,IAAQ,KACjB0X,IAAS5O,IACT9I,IAAQ,CAACA,GACT+W,KAAQ/W,KACCC,IAAS,MAClByX,IAAS7O,IACT5I,IAAS,CAACA,GACV+W,KAAO/W;AAET;AAAA,MACF,KAAK6I;AACH,YAAIyH,GAAa;AACf,cAAI2H,EAAM,KAAK,MAAML,KAASvF,KAAYwF,KAAUtF,IAAY;AAC9D,YAAAyF,IAAa;AACb;AAAA,UACF;AACA,UAAAE,EAAM3P,EAAW,GACjBxI,KAASkY,EAAM,GACfjY,IAASD,IAAQuQ;AAAA,QACnB;AACE,UAAA4H,EAAMzP,EAAY,GAClByP,EAAM3P,EAAW,GACb0P,EAAM,KAAK,IACTL,IAAQvF,IACVtS,KAASkY,EAAM,IACNA,EAAM,KAAK,KAAKJ,KAAUtF,MACnCyF,IAAa,MAGfjY,KAASkY,EAAM,GAEbA,EAAM,KAAK,IACTJ,IAAStF,MACXvS,KAAUiY,EAAM,KAGlBjY,KAAUiY,EAAM;AAGpB,QAAIlY,IAAQ,KAAKC,IAAS,KACxByX,IAAS7O,IACT5I,IAAS,CAACA,GACVD,IAAQ,CAACA,GACTgX,KAAO/W,GACP8W,KAAQ/W,KACCA,IAAQ,KACjB0X,IAAS3O,IACT/I,IAAQ,CAACA,GACT+W,KAAQ/W,KACCC,IAAS,MAClByX,IAAS9O,IACT3I,IAAS,CAACA,GACV+W,KAAO/W;AAET;AAAA;AAAA,MAGF,KAAKqI;AACH,aAAK,KAAK4P,EAAM,GAAGA,EAAM,CAAC,GAC1BD,IAAa;AACb;AAAA;AAAA,MAGF,KAAK1P;AACH,aAAK,KAAKuG,GAAgBC,CAAQ,GAAGrxD,CAAK,GAC1Cu6D,IAAa;AACb;AAAA;AAAA,MAGF,KAAK5P;AACH,YAAI,CAAC6P,EAAM,KAAK,CAACA,EAAM,GAAG;AACxB,UAAAD,IAAa;AACb;AAAA,QACF;AACA,QAAAlxC,IAASinC,GAAU,KAAK,OAAO,GAC/B+I,IAAO7H,EAAQ,SAASnoC,EAAO,MAC/BiwC,IAAM9H,EAAQ,SAASnoC,EAAO,KAC9Bi5B,IAAQuV,EAAY,UACpBtV,IAASsV,EAAY,WACjB2C,EAAM,IAAI,IACZR,IAASQ,EAAM,IAAI,IAAIpP,KAAoBF,KAClCsP,EAAM,IAAI,MACnBnB,KAAQ/W,GACR0X,IAASQ,EAAM,IAAI,IAAInP,KAAoBF,KAEzCqP,EAAM,IAAI,MACZlB,KAAO/W,IAIJ,KAAK,YACRyM,GAAY,KAAK,SAASxD,EAAY,GACtC,KAAK,UAAU,IACX,KAAK,WACP,KAAK,aAAa,IAAM,EAAI;AAGhC;AAAA,IACR;AACI,IAAI+O,MACF1C,EAAY,QAAQvV,GACpBuV,EAAY,SAAStV,GACrBsV,EAAY,OAAOwB,GACnBxB,EAAY,MAAMyB,GAClB,KAAK,SAASU,GACd,KAAK,cAAa,IAIpB9L,GAAQmD,GAAU,SAAU54B,GAAG;AAC7B,MAAAA,EAAE,SAASA,EAAE,MACbA,EAAE,SAASA,EAAE;AAAA,IACf,CAAC;AAAA,EACH;AACF,GAEIkiC,KAAU;AAAA;AAAA,EAEZ,MAAM,WAAgB;AACpB,WAAI,KAAK,SAAS,CAAC,KAAK,WAAW,CAAC,KAAK,aACvC,KAAK,UAAU,IACf,KAAK,aAAa,IAAM,EAAI,GACxB,KAAK,QAAQ,SACf9L,GAAS,KAAK,SAASlD,EAAW,GAEpCqD,GAAY,KAAK,SAASxD,EAAY,GACtC,KAAK,eAAe,KAAK,kBAAkB,IAEtC;AAAA,EACT;AAAA;AAAA,EAEA,OAAO,WAAiB;AACtB,WAAI,KAAK,SAAS,CAAC,KAAK,aACtB,KAAK,YAAY2C,GAAO,CAAA,GAAI,KAAK,gBAAgB,GACjD,KAAK,aAAaA,GAAO,CAAA,GAAI,KAAK,iBAAiB,GACnD,KAAK,cAAcA,GAAO,CAAA,GAAI,KAAK,kBAAkB,GACrD,KAAK,aAAY,GACb,KAAK,WACP,KAAK,cAAa,IAGf;AAAA,EACT;AAAA;AAAA,EAEA,OAAO,WAAiB;AACtB,WAAI,KAAK,WAAW,CAAC,KAAK,aACxBA,GAAO,KAAK,aAAa;AAAA,MACvB,MAAM;AAAA,MACN,KAAK;AAAA,MACL,OAAO;AAAA,MACP,QAAQ;AAAA,IAChB,CAAO,GACD,KAAK,UAAU,IACf,KAAK,cAAa,GAClB,KAAK,YAAY,IAAM,EAAI,GAG3B,KAAK,aAAY,GACjBa,GAAY,KAAK,SAASrD,EAAW,GACrCkD,GAAS,KAAK,SAASrD,EAAY,IAE9B;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,SAAS,SAAiBzmB,GAAK;AAC7B,QAAI61B,IAAc,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM,SAAY,UAAU,CAAC,IAAI;AACtF,WAAI,CAAC,KAAK,YAAY71B,MAChB,KAAK,UACP,KAAK,QAAQ,MAAMA,IAEjB61B,KACF,KAAK,MAAM71B,GACX,KAAK,MAAM,MAAMA,GACb,KAAK,UACP,KAAK,aAAa,MAAMA,GACxBmpB,GAAQ,KAAK,UAAU,SAAUvtB,GAAS;AACxC,MAAAA,EAAQ,qBAAqB,KAAK,EAAE,CAAC,EAAE,MAAMoE;AAAA,IAC/C,CAAC,OAGC,KAAK,UACP,KAAK,WAAW,KAElB,KAAK,QAAQ,OAAO,MACpB,KAAK,SAAQ,GACb,KAAK,KAAKA,CAAG,KAGV;AAAA,EACT;AAAA;AAAA,EAEA,QAAQ,WAAkB;AACxB,WAAI,KAAK,SAAS,KAAK,aACrB,KAAK,WAAW,IAChBiqB,GAAY,KAAK,SAASzD,EAAc,IAEnC;AAAA,EACT;AAAA;AAAA,EAEA,SAAS,WAAmB;AAC1B,WAAI,KAAK,SAAS,CAAC,KAAK,aACtB,KAAK,WAAW,IAChBsD,GAAS,KAAK,SAAStD,EAAc,IAEhC;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,SAAS,WAAmB;AAC1B,QAAI5qB,IAAU,KAAK;AACnB,WAAKA,EAAQ8pB,EAAS,KAGtB9pB,EAAQ8pB,EAAS,IAAI,QACjB,KAAK,SAAS,KAAK,aACrB9pB,EAAQ,MAAM,KAAK,cAErB,KAAK,SAAQ,GACN,QAPE;AAAA,EAQX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,SAAck6B,GAAS;AAC3B,QAAIC,IAAU,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM,SAAY,UAAU,CAAC,IAAID,GAC9EE,IAAmB,KAAK,YAC1B1B,IAAO0B,EAAiB,MACxBzB,IAAMyB,EAAiB;AACzB,WAAO,KAAK,OAAO17D,GAAYw7D,CAAO,IAAIA,IAAUxB,IAAO,OAAOwB,CAAO,GAAGx7D,GAAYy7D,CAAO,IAAIA,IAAUxB,IAAM,OAAOwB,CAAO,CAAC;AAAA,EACpI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,QAAQ,SAAgBE,GAAG;AACzB,QAAIxiC,IAAI,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM,SAAY,UAAU,CAAC,IAAIwiC,GACxEtD,IAAa,KAAK,YAClBU,IAAU;AACd,WAAA4C,IAAI,OAAOA,CAAC,GACZxiC,IAAI,OAAOA,CAAC,GACR,KAAK,SAAS,CAAC,KAAK,YAAY,KAAK,QAAQ,YAC3C54B,GAASo7D,CAAC,MACZtD,EAAW,OAAOsD,GAClB5C,IAAU,KAERx4D,GAAS44B,CAAC,MACZk/B,EAAW,MAAMl/B,GACjB4/B,IAAU,KAERA,KACF,KAAK,aAAa,EAAI,IAGnB;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,SAAcxP,GAAOqS,GAAgB;AACzC,QAAIvD,IAAa,KAAK;AACtB,WAAA9O,IAAQ,OAAOA,CAAK,GAChBA,IAAQ,IACVA,IAAQ,KAAK,IAAIA,KAEjBA,IAAQ,IAAIA,GAEP,KAAK,OAAO8O,EAAW,QAAQ9O,IAAQ8O,EAAW,cAAc,MAAMuD,CAAc;AAAA,EAC7F;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,QAAQ,SAAgBrS,GAAOsS,GAAOD,GAAgB;AACpD,QAAIr9D,IAAU,KAAK,SACjB85D,IAAa,KAAK,YAChBpV,IAAQoV,EAAW,OACrBnV,IAASmV,EAAW,QACpBvD,IAAeuD,EAAW,cAC1BtD,IAAgBsD,EAAW;AAE7B,QADA9O,IAAQ,OAAOA,CAAK,GAChBA,KAAS,KAAK,KAAK,SAAS,CAAC,KAAK,YAAYhrD,EAAQ,UAAU;AAClE,UAAI21D,IAAWY,IAAevL,GAC1B4K,IAAYY,IAAgBxL;AAChC,UAAIyH,GAAc,KAAK,SAASrD,IAAY;AAAA,QAC1C,OAAOpE;AAAA,QACP,UAAUtG,IAAQ6R;AAAA,QAClB,eAAe8G;AAAA,MACvB,CAAO,MAAM;AACL,eAAO;AAET,UAAIA,GAAgB;AAClB,YAAI5J,IAAW,KAAK,UAChBhoC,IAASinC,GAAU,KAAK,OAAO,GAC/B6K,IAAS9J,KAAY,OAAO,KAAKA,CAAQ,EAAE,SAASkB,GAAkBlB,CAAQ,IAAI;AAAA,UACpF,OAAO4J,EAAe;AAAA,UACtB,OAAOA,EAAe;AAAA,QAChC;AAGQ,QAAAvD,EAAW,SAASnE,IAAWjR,OAAW6Y,EAAO,QAAQ9xC,EAAO,OAAOquC,EAAW,QAAQpV,IAC1FoV,EAAW,QAAQlE,IAAYjR,OAAY4Y,EAAO,QAAQ9xC,EAAO,MAAMquC,EAAW,OAAOnV;AAAA,MAC3F,MAAO,CAAIsL,GAAcqN,CAAK,KAAKt7D,GAASs7D,EAAM,CAAC,KAAKt7D,GAASs7D,EAAM,CAAC,KACtExD,EAAW,SAASnE,IAAWjR,OAAW4Y,EAAM,IAAIxD,EAAW,QAAQpV,IACvEoV,EAAW,QAAQlE,IAAYjR,OAAY2Y,EAAM,IAAIxD,EAAW,OAAOnV,OAGvEmV,EAAW,SAASnE,IAAWjR,KAAS,GACxCoV,EAAW,QAAQlE,IAAYjR,KAAU;AAE3C,MAAAmV,EAAW,QAAQnE,GACnBmE,EAAW,SAASlE,GACpB,KAAK,aAAa,EAAI;AAAA,IACxB;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,QAAQ,SAAgBL,GAAQ;AAC9B,WAAO,KAAK,UAAU,KAAK,UAAU,UAAU,KAAK,OAAOA,CAAM,CAAC;AAAA,EACpE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,UAAU,SAAkBA,GAAQ;AAClC,WAAAA,IAAS,OAAOA,CAAM,GAClBvzD,GAASuzD,CAAM,KAAK,KAAK,SAAS,CAAC,KAAK,YAAY,KAAK,QAAQ,cACnE,KAAK,UAAU,SAASA,IAAS,KACjC,KAAK,aAAa,IAAM,EAAI,IAEvB;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,QAAQ,SAAgBiI,GAAS;AAC/B,QAAIpK,IAAS,KAAK,UAAU;AAC5B,WAAO,KAAK,MAAMoK,GAASx7D,GAASoxD,CAAM,IAAIA,IAAS,CAAC;AAAA,EAC1D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,QAAQ,SAAgBqK,GAAS;AAC/B,QAAItK,IAAS,KAAK,UAAU;AAC5B,WAAO,KAAK,MAAMnxD,GAASmxD,CAAM,IAAIA,IAAS,GAAGsK,CAAO;AAAA,EAC1D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,SAAetK,GAAQ;AAC5B,QAAIC,IAAS,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM,SAAY,UAAU,CAAC,IAAID,GAC7EpI,IAAY,KAAK,WACjB0P,IAAc;AAClB,WAAAtH,IAAS,OAAOA,CAAM,GACtBC,IAAS,OAAOA,CAAM,GAClB,KAAK,SAAS,CAAC,KAAK,YAAY,KAAK,QAAQ,aAC3CpxD,GAASmxD,CAAM,MACjBpI,EAAU,SAASoI,GACnBsH,IAAc,KAEZz4D,GAASoxD,CAAM,MACjBrI,EAAU,SAASqI,GACnBqH,IAAc,KAEZA,KACF,KAAK,aAAa,IAAM,EAAI,IAGzB;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,SAAS,WAAmB;AAC1B,QAAIiD,IAAU,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM,SAAY,UAAU,CAAC,IAAI,IAC9E19D,IAAU,KAAK,SACjB+qD,IAAY,KAAK,WACjB+O,IAAa,KAAK,YAClBG,IAAc,KAAK,aACjBn6D;AACJ,QAAI,KAAK,SAAS,KAAK,SAAS;AAC9B,MAAAA,IAAO;AAAA,QACL,GAAGm6D,EAAY,OAAOH,EAAW;AAAA,QACjC,GAAGG,EAAY,MAAMH,EAAW;AAAA,QAChC,OAAOG,EAAY;AAAA,QACnB,QAAQA,EAAY;AAAA,MAC5B;AACM,UAAIjP,IAAQD,EAAU,QAAQA,EAAU;AAIxC,UAHAuF,GAAQxwD,GAAM,SAAU+5B,GAAGjO,GAAG;AAC5B,QAAA9rB,EAAK8rB,CAAC,IAAIiO,IAAImxB;AAAA,MAChB,CAAC,GACG0S,GAAS;AAGX,YAAIlB,IAAS,KAAK,MAAM18D,EAAK,IAAIA,EAAK,MAAM,GACxCy8D,IAAQ,KAAK,MAAMz8D,EAAK,IAAIA,EAAK,KAAK;AAC1C,QAAAA,EAAK,IAAI,KAAK,MAAMA,EAAK,CAAC,GAC1BA,EAAK,IAAI,KAAK,MAAMA,EAAK,CAAC,GAC1BA,EAAK,QAAQy8D,IAAQz8D,EAAK,GAC1BA,EAAK,SAAS08D,IAAS18D,EAAK;AAAA,MAC9B;AAAA,IACF;AACE,MAAAA,IAAO;AAAA,QACL,GAAG;AAAA,QACH,GAAG;AAAA,QACH,OAAO;AAAA,QACP,QAAQ;AAAA,MAChB;AAEI,WAAIE,EAAQ,cACVF,EAAK,SAASirD,EAAU,UAAU,IAEhC/qD,EAAQ,aACVF,EAAK,SAASirD,EAAU,UAAU,GAClCjrD,EAAK,SAASirD,EAAU,UAAU,IAE7BjrD;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,SAAS,SAAiBA,GAAM;AAC9B,QAAIE,IAAU,KAAK,SACjB+qD,IAAY,KAAK,WACjB+O,IAAa,KAAK,YAChBG,IAAc,CAAA;AAClB,QAAI,KAAK,SAAS,CAAC,KAAK,YAAYhK,GAAcnwD,CAAI,GAAG;AACvD,UAAI26D,IAAc;AAClB,MAAIz6D,EAAQ,aACNgC,GAASlC,EAAK,MAAM,KAAKA,EAAK,WAAWirD,EAAU,WACrDA,EAAU,SAASjrD,EAAK,QACxB26D,IAAc,KAGdz6D,EAAQ,aACNgC,GAASlC,EAAK,MAAM,KAAKA,EAAK,WAAWirD,EAAU,WACrDA,EAAU,SAASjrD,EAAK,QACxB26D,IAAc,KAEZz4D,GAASlC,EAAK,MAAM,KAAKA,EAAK,WAAWirD,EAAU,WACrDA,EAAU,SAASjrD,EAAK,QACxB26D,IAAc,MAGdA,KACF,KAAK,aAAa,IAAM,EAAI;AAE9B,UAAIzP,IAAQD,EAAU,QAAQA,EAAU;AACxC,MAAI/oD,GAASlC,EAAK,CAAC,MACjBm6D,EAAY,OAAOn6D,EAAK,IAAIkrD,IAAQ8O,EAAW,OAE7C93D,GAASlC,EAAK,CAAC,MACjBm6D,EAAY,MAAMn6D,EAAK,IAAIkrD,IAAQ8O,EAAW,MAE5C93D,GAASlC,EAAK,KAAK,MACrBm6D,EAAY,QAAQn6D,EAAK,QAAQkrD,IAE/BhpD,GAASlC,EAAK,MAAM,MACtBm6D,EAAY,SAASn6D,EAAK,SAASkrD,IAErC,KAAK,eAAeiP,CAAW;AAAA,IACjC;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,kBAAkB,WAA4B;AAC5C,WAAO,KAAK,QAAQ1J,GAAO,CAAA,GAAI,KAAK,aAAa,IAAI,CAAA;AAAA,EACvD;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,cAAc,WAAwB;AACpC,WAAO,KAAK,QAAQA,GAAO,CAAA,GAAI,KAAK,SAAS,IAAI,CAAA;AAAA,EACnD;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,eAAe,WAAyB;AACtC,QAAIuJ,IAAa,KAAK,YAClBh6D,IAAO,CAAA;AACX,WAAI,KAAK,SACPwwD,GAAQ,CAAC,QAAQ,OAAO,SAAS,UAAU,gBAAgB,eAAe,GAAG,SAAUz2B,GAAG;AACxF,MAAA/5B,EAAK+5B,CAAC,IAAIigC,EAAWjgC,CAAC;AAAA,IACxB,CAAC,GAEI/5B;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,eAAe,SAAuBA,GAAM;AAC1C,QAAIg6D,IAAa,KAAK,YAClB7E,IAAc6E,EAAW;AAC7B,WAAI,KAAK,SAAS,CAAC,KAAK,YAAY7J,GAAcnwD,CAAI,MAChDkC,GAASlC,EAAK,IAAI,MACpBg6D,EAAW,OAAOh6D,EAAK,OAErBkC,GAASlC,EAAK,GAAG,MACnBg6D,EAAW,MAAMh6D,EAAK,MAEpBkC,GAASlC,EAAK,KAAK,KACrBg6D,EAAW,QAAQh6D,EAAK,OACxBg6D,EAAW,SAASh6D,EAAK,QAAQm1D,KACxBjzD,GAASlC,EAAK,MAAM,MAC7Bg6D,EAAW,SAASh6D,EAAK,QACzBg6D,EAAW,QAAQh6D,EAAK,SAASm1D,IAEnC,KAAK,aAAa,EAAI,IAEjB;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,gBAAgB,WAA0B;AACxC,QAAIgF,IAAc,KAAK,aACnBn6D;AACJ,WAAI,KAAK,SAAS,KAAK,YACrBA,IAAO;AAAA,MACL,MAAMm6D,EAAY;AAAA,MAClB,KAAKA,EAAY;AAAA,MACjB,OAAOA,EAAY;AAAA,MACnB,QAAQA,EAAY;AAAA,IAC5B,IAEWn6D,KAAQ,CAAA;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,gBAAgB,SAAwBA,GAAM;AAC5C,QAAIm6D,IAAc,KAAK,aACnBhF,IAAc,KAAK,QAAQ,aAC3B0I,GACAC;AACJ,WAAI,KAAK,SAAS,KAAK,WAAW,CAAC,KAAK,YAAY3N,GAAcnwD,CAAI,MAChEkC,GAASlC,EAAK,IAAI,MACpBm6D,EAAY,OAAOn6D,EAAK,OAEtBkC,GAASlC,EAAK,GAAG,MACnBm6D,EAAY,MAAMn6D,EAAK,MAErBkC,GAASlC,EAAK,KAAK,KAAKA,EAAK,UAAUm6D,EAAY,UACrD0D,IAAe,IACf1D,EAAY,QAAQn6D,EAAK,QAEvBkC,GAASlC,EAAK,MAAM,KAAKA,EAAK,WAAWm6D,EAAY,WACvD2D,IAAgB,IAChB3D,EAAY,SAASn6D,EAAK,SAExBm1D,MACE0I,IACF1D,EAAY,SAASA,EAAY,QAAQhF,IAChC2I,MACT3D,EAAY,QAAQA,EAAY,SAAShF,KAG7C,KAAK,cAAa,IAEb;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,kBAAkB,WAA4B;AAC5C,QAAIj1D,IAAU,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM,SAAY,UAAU,CAAC,IAAI,CAAA;AAClF,QAAI,CAAC,KAAK,SAAS,CAAC,OAAO;AACzB,aAAO;AAET,QAAI85D,IAAa,KAAK,YAClBhkC,IAAS+/B,GAAgB,KAAK,OAAO,KAAK,WAAWiE,GAAY95D,CAAO;AAG5E,QAAI,CAAC,KAAK;AACR,aAAO81B;AAET,QAAI+nC,IAAgB,KAAK,QAAQ79D,EAAQ,OAAO,GAC9C89D,IAAWD,EAAc,GACzBE,IAAWF,EAAc,GACzBG,IAAeH,EAAc,OAC7BI,IAAgBJ,EAAc,QAC5B7S,IAAQl1B,EAAO,QAAQ,KAAK,MAAMgkC,EAAW,YAAY;AAC7D,IAAI9O,MAAU,MACZ8S,KAAY9S,GACZ+S,KAAY/S,GACZgT,KAAgBhT,GAChBiT,KAAiBjT;AAEnB,QAAIiK,IAAc+I,IAAeC,GAC7B3a,IAAWyR,GAAiB;AAAA,MAC9B,aAAaE;AAAA,MACb,OAAOj1D,EAAQ,YAAY;AAAA,MAC3B,QAAQA,EAAQ,aAAa;AAAA,IACnC,CAAK,GACGw3D,IAAWzC,GAAiB;AAAA,MAC9B,aAAaE;AAAA,MACb,OAAOj1D,EAAQ,YAAY;AAAA,MAC3B,QAAQA,EAAQ,aAAa;AAAA,IACnC,GAAO,OAAO,GACNq6D,IAAoBtF,GAAiB;AAAA,MACrC,aAAaE;AAAA,MACb,OAAOj1D,EAAQ,UAAUgrD,MAAU,IAAIl1B,EAAO,QAAQkoC;AAAA,MACtD,QAAQh+D,EAAQ,WAAWgrD,MAAU,IAAIl1B,EAAO,SAASmoC;AAAA,IACjE,CAAO,GACDvZ,IAAQ2V,EAAkB,OAC1B1V,IAAS0V,EAAkB;AAC7B,IAAA3V,IAAQ,KAAK,IAAIpB,EAAS,OAAO,KAAK,IAAIkU,EAAS,OAAO9S,CAAK,CAAC,GAChEC,IAAS,KAAK,IAAIrB,EAAS,QAAQ,KAAK,IAAIkU,EAAS,QAAQ7S,CAAM,CAAC;AACpE,QAAI4S,IAAS,SAAS,cAAc,QAAQ,GACxC1wB,IAAU0wB,EAAO,WAAW,IAAI;AACpC,IAAAA,EAAO,QAAQ5G,GAAuBjM,CAAK,GAC3C6S,EAAO,SAAS5G,GAAuBhM,CAAM,GAC7C9d,EAAQ,YAAY7mC,EAAQ,aAAa,eACzC6mC,EAAQ,SAAS,GAAG,GAAG6d,GAAOC,CAAM;AACpC,QAAIuZ,IAAwBl+D,EAAQ,uBAClC42D,IAAwBsH,MAA0B,SAAS,KAAOA,GAClEpH,IAAwB92D,EAAQ;AAClC,IAAA6mC,EAAQ,wBAAwB+vB,GAC5BE,MACFjwB,EAAQ,wBAAwBiwB;AAIlC,QAAIqH,IAAcroC,EAAO,OACrBsoC,IAAetoC,EAAO,QAGtBuoC,IAAOP,GACPQ,IAAOP,GACPQ,GACAC,GAGAC,GACAC,GACAC,GACAC;AACJ,IAAIP,KAAQ,CAACL,KAAgBK,IAAOF,KAClCE,IAAO,GACPE,IAAW,GACXE,IAAO,GACPE,IAAW,KACFN,KAAQ,KACjBI,IAAO,CAACJ,GACRA,IAAO,GACPE,IAAW,KAAK,IAAIJ,GAAaH,IAAeK,CAAI,GACpDM,IAAWJ,KACFF,KAAQF,MACjBM,IAAO,GACPF,IAAW,KAAK,IAAIP,GAAcG,IAAcE,CAAI,GACpDM,IAAWJ,IAETA,KAAY,KAAKD,KAAQ,CAACL,KAAiBK,IAAOF,KACpDE,IAAO,GACPE,IAAY,GACZE,IAAO,GACPE,IAAY,KACHN,KAAQ,KACjBI,IAAO,CAACJ,GACRA,IAAO,GACPE,IAAY,KAAK,IAAIJ,GAAcH,IAAgBK,CAAI,GACvDM,IAAYJ,KACHF,KAAQF,MACjBM,IAAO,GACPF,IAAY,KAAK,IAAIP,GAAeG,IAAeE,CAAI,GACvDM,IAAYJ;AAEd,QAAI3G,IAAS,CAACwG,GAAMC,GAAMC,GAAUC,CAAS;AAG7C,QAAIG,IAAW,KAAKC,IAAY,GAAG;AACjC,UAAIC,IAAQna,IAAQsZ;AACpB,MAAAnG,EAAO,KAAK4G,IAAOI,GAAOH,IAAOG,GAAOF,IAAWE,GAAOD,IAAYC,CAAK;AAAA,IAC7E;AAIA,WAAAh4B,EAAQ,UAAU,MAAMA,GAAS,CAAC/Q,CAAM,EAAE,OAAOk2B,GAAmB6L,EAAO,IAAI,SAAUC,GAAO;AAC9F,aAAO,KAAK,MAAMnH,GAAuBmH,CAAK,CAAC;AAAA,IACjD,CAAC,CAAC,CAAC,CAAC,GACGP;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,gBAAgB,SAAwBtC,GAAa;AACnD,QAAIj1D,IAAU,KAAK;AACnB,WAAI,CAAC,KAAK,YAAY,CAACyB,GAAYwzD,CAAW,MAE5Cj1D,EAAQ,cAAc,KAAK,IAAI,GAAGi1D,CAAW,KAAK,KAC9C,KAAK,UACP,KAAK,YAAW,GACZ,KAAK,WACP,KAAK,cAAa,KAIjB;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,aAAa,SAAqB6J,GAAM;AACtC,QAAI9+D,IAAU,KAAK,SACjB++D,IAAU,KAAK,SACfC,IAAO,KAAK;AACd,QAAI,KAAK,SAAS,CAAC,KAAK,UAAU;AAChC,UAAIC,IAAYH,MAAS3Q,IACrB+Q,IAAUl/D,EAAQ,WAAW8+D,MAAS1Q;AAC1C,MAAA0Q,IAAOG,KAAaC,IAAUJ,IAAOzQ,IACrCruD,EAAQ,WAAW8+D,GACnBpN,GAAQqN,GAAS9Q,IAAa6Q,CAAI,GAClCzN,GAAY0N,GAASrR,IAAYuR,CAAS,GAC1C5N,GAAY0N,GAAS/Q,IAAYkR,CAAO,GACnCl/D,EAAQ,mBAEX0xD,GAAQsN,GAAM/Q,IAAa6Q,CAAI,GAC/BzN,GAAY2N,GAAMtR,IAAYuR,CAAS,GACvC5N,GAAY2N,GAAMhR,IAAYkR,CAAO;AAAA,IAEzC;AACA,WAAO;AAAA,EACT;AACF,GAEIC,KAAiBzS,GAAO,SACxB0S,KAAuB,4BAAY;AAMrC,WAASA,EAAQr8B,GAAS;AACxB,QAAI/iC,IAAU,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM,SAAY,UAAU,CAAC,IAAI,CAAA;AAElF,QADA6pC,GAAgB,MAAMu1B,CAAO,GACzB,CAACr8B,KAAW,CAAC0sB,GAAgB,KAAK1sB,EAAQ,OAAO;AACnD,YAAM,IAAI,MAAM,0EAA0E;AAE5F,SAAK,UAAUA,GACf,KAAK,UAAUwtB,GAAO,CAAA,GAAIX,IAAUK,GAAcjwD,CAAO,KAAKA,CAAO,GACrE,KAAK,UAAU,IACf,KAAK,WAAW,IAChB,KAAK,WAAW,CAAA,GAChB,KAAK,QAAQ,IACb,KAAK,YAAY,IACjB,KAAK,WAAW,IAChB,KAAK,QAAQ,IACb,KAAK,SAAS,IACd,KAAK,KAAI;AAAA,EACX;AACA,SAAOoxC,GAAaguB,GAAS,CAAC;AAAA,IAC5B,KAAK;AAAA,IACL,OAAO,WAAgB;AACrB,UAAIr8B,IAAU,KAAK,SACfs8B,IAAUt8B,EAAQ,QAAQ,YAAW,GACrCoE;AACJ,UAAI,CAAApE,EAAQ8pB,EAAS,GAIrB;AAAA,YADA9pB,EAAQ8pB,EAAS,IAAI,MACjBwS,MAAY,OAAO;AAQrB,cAPA,KAAK,QAAQ,IAGbl4B,IAAMpE,EAAQ,aAAa,KAAK,KAAK,IACrC,KAAK,cAAcoE,GAGf,CAACA;AACH;AAIF,UAAAA,IAAMpE,EAAQ;AAAA,QAChB,MAAO,CAAIs8B,MAAY,YAAY,OAAO,sBACxCl4B,IAAMpE,EAAQ,UAAS;AAEzB,aAAK,KAAKoE,CAAG;AAAA;AAAA,IACf;AAAA,EACJ,GAAK;AAAA,IACD,KAAK;AAAA,IACL,OAAO,SAAcA,GAAK;AACxB,UAAIwJ,IAAQ;AACZ,UAAKxJ,GAGL;AAAA,aAAK,MAAMA,GACX,KAAK,YAAY,CAAA;AACjB,YAAIpE,IAAU,KAAK,SACjB/iC,IAAU,KAAK;AAMjB,YALI,CAACA,EAAQ,aAAa,CAACA,EAAQ,aACjCA,EAAQ,mBAAmB,KAIzB,CAACA,EAAQ,oBAAoB,CAAC,OAAO,aAAa;AACpD,eAAK,MAAK;AACV;AAAA,QACF;AAGA,YAAIuvD,GAAgB,KAAKpoB,CAAG,GAAG;AAE7B,UAAIqoB,GAAqB,KAAKroB,CAAG,IAC/B,KAAK,KAAKixB,GAAqBjxB,CAAG,CAAC,IAInC,KAAK,MAAK;AAEZ;AAAA,QACF;AAIA,YAAIm4B,IAAM,IAAI,eAAc,GACxBC,IAAQ,KAAK,MAAM,KAAK,IAAI;AAChC,aAAK,YAAY,IACjB,KAAK,MAAMD,GAMXA,EAAI,UAAUC,GACdD,EAAI,UAAUC,GACdD,EAAI,YAAYC,GAChBD,EAAI,aAAa,WAAY;AAE3B,UAAIA,EAAI,kBAAkB,cAAc,MAAMjQ,MAC5CiQ,EAAI,MAAK;AAAA,QAEb,GACAA,EAAI,SAAS,WAAY;AACvB,UAAA3uB,EAAM,KAAK2uB,EAAI,QAAQ;AAAA,QACzB,GACAA,EAAI,YAAY,WAAY;AAC1B,UAAA3uB,EAAM,YAAY,IAClBA,EAAM,MAAM;AAAA,QACd,GAGI3wC,EAAQ,oBAAoB8yD,GAAiB3rB,CAAG,KAAKpE,EAAQ,gBAC/DoE,IAAM6rB,GAAa7rB,CAAG,IAIxBm4B,EAAI,KAAK,OAAOn4B,GAAK,EAAI,GACzBm4B,EAAI,eAAe,eACnBA,EAAI,kBAAkBv8B,EAAQ,gBAAgB,mBAC9Cu8B,EAAI,KAAI;AAAA;AAAA,IACV;AAAA,EACJ,GAAK;AAAA,IACD,KAAK;AAAA,IACL,OAAO,SAActzB,GAAa;AAChC,UAAIhsC,IAAU,KAAK,SACjB+qD,IAAY,KAAK,WAIf6N,IAAcD,GAAuB3sB,CAAW,GAChDud,IAAS,GACT4J,IAAS,GACTC,IAAS;AACb,UAAIwF,IAAc,GAAG;AAEnB,aAAK,MAAMH,GAAqBzsB,GAAaqjB,EAAc;AAC3D,YAAImQ,IAAoBlG,GAAiBV,CAAW;AACpD,QAAArP,IAASiW,EAAkB,QAC3BrM,IAASqM,EAAkB,QAC3BpM,IAASoM,EAAkB;AAAA,MAC7B;AACA,MAAIx/D,EAAQ,cACV+qD,EAAU,SAASxB,IAEjBvpD,EAAQ,aACV+qD,EAAU,SAASoI,GACnBpI,EAAU,SAASqI,IAErB,KAAK,MAAK;AAAA,IACZ;AAAA,EACJ,GAAK;AAAA,IACD,KAAK;AAAA,IACL,OAAO,WAAiB;AACtB,UAAIrwB,IAAU,KAAK,SACjBoE,IAAM,KAAK,KACT+zB,IAAcn4B,EAAQ,aACtB08B,IAAiBt4B;AACrB,MAAI,KAAK,QAAQ,oBAAoB2rB,GAAiB3rB,CAAG,MAClD+zB,MACHA,IAAc,cAIhBuE,IAAiBzM,GAAa7rB,CAAG,IAEnC,KAAK,cAAc+zB,GACnB,KAAK,iBAAiBuE;AACtB,UAAI/7B,IAAQ,SAAS,cAAc,KAAK;AACxC,MAAIw3B,MACFx3B,EAAM,cAAcw3B,IAEtBx3B,EAAM,MAAM+7B,KAAkBt4B,GAC9BzD,EAAM,MAAMX,EAAQ,OAAO,qBAC3B,KAAK,QAAQW,GACbA,EAAM,SAAS,KAAK,MAAM,KAAK,IAAI,GACnCA,EAAM,UAAU,KAAK,KAAK,KAAK,IAAI,GACnCutB,GAASvtB,GAAOmqB,EAAU,GAC1B9qB,EAAQ,WAAW,aAAaW,GAAOX,EAAQ,WAAW;AAAA,IAC5D;AAAA,EACJ,GAAK;AAAA,IACD,KAAK;AAAA,IACL,OAAO,WAAiB;AACtB,UAAI28B,IAAS,MACTh8B,IAAQ,KAAK;AACjB,MAAAA,EAAM,SAAS,MACfA,EAAM,UAAU,MAChB,KAAK,SAAS;AAId,UAAIi8B,IAAcjT,GAAO,aAAa,sCAAsC,KAAKA,GAAO,UAAU,SAAS,GACvG3f,IAAO,SAAcwpB,GAAcC,GAAe;AACpD,QAAAjG,GAAOmP,EAAO,WAAW;AAAA,UACvB,cAAcnJ;AAAA,UACd,eAAeC;AAAA,UACf,aAAaD,IAAeC;AAAA,QACtC,CAAS,GACDkJ,EAAO,mBAAmBnP,GAAO,CAAA,GAAImP,EAAO,SAAS,GACrDA,EAAO,SAAS,IAChBA,EAAO,QAAQ,IACfA,EAAO,MAAK;AAAA,MACd;AAGA,UAAIh8B,EAAM,gBAAgB,CAACi8B,GAAa;AACtC,QAAA5yB,EAAKrJ,EAAM,cAAcA,EAAM,aAAa;AAC5C;AAAA,MACF;AACA,UAAIk8B,IAAc,SAAS,cAAc,KAAK,GAC1CC,IAAO,SAAS,QAAQ,SAAS;AACrC,WAAK,cAAcD,GACnBA,EAAY,SAAS,WAAY;AAC/B,QAAA7yB,EAAK6yB,EAAY,OAAOA,EAAY,MAAM,GACrCD,KACHE,EAAK,YAAYD,CAAW;AAAA,MAEhC,GACAA,EAAY,MAAMl8B,EAAM,KAInBi8B,MACHC,EAAY,MAAM,UAAU,wJAC5BC,EAAK,YAAYD,CAAW;AAAA,IAEhC;AAAA,EACJ,GAAK;AAAA,IACD,KAAK;AAAA,IACL,OAAO,WAAgB;AACrB,UAAIl8B,IAAQ,KAAK;AACjB,MAAAA,EAAM,SAAS,MACfA,EAAM,UAAU,MAChBA,EAAM,WAAW,YAAYA,CAAK,GAClC,KAAK,QAAQ;AAAA,IACf;AAAA,EACJ,GAAK;AAAA,IACD,KAAK;AAAA,IACL,OAAO,WAAiB;AACtB,UAAI,GAAC,KAAK,SAAS,KAAK,QAGxB;AAAA,YAAIX,IAAU,KAAK,SACjB/iC,IAAU,KAAK,SACf0jC,IAAQ,KAAK,OAGX81B,IAAYz2B,EAAQ,YACpB+8B,IAAW,SAAS,cAAc,KAAK;AAC3C,QAAAA,EAAS,YAAYjQ;AACrB,YAAIlF,IAAUmV,EAAS,cAAc,IAAI,OAAOjT,IAAW,YAAY,CAAC,GACpE0K,IAAS5M,EAAQ,cAAc,IAAI,OAAOkC,IAAW,SAAS,CAAC,GAC/DkS,IAAUpU,EAAQ,cAAc,IAAI,OAAOkC,IAAW,WAAW,CAAC,GAClEkT,IAAUpV,EAAQ,cAAc,IAAI,OAAOkC,IAAW,WAAW,CAAC,GAClEmS,IAAOe,EAAQ,cAAc,IAAI,OAAOlT,IAAW,OAAO,CAAC;AAC/D,aAAK,YAAY2M,GACjB,KAAK,UAAU7O,GACf,KAAK,SAAS4M,GACd,KAAK,UAAUwH,GACf,KAAK,UAAUgB,GACf,KAAK,UAAUpV,EAAQ,cAAc,IAAI,OAAOkC,IAAW,WAAW,CAAC,GACvE,KAAK,OAAOmS,GACZzH,EAAO,YAAY7zB,CAAK,GAGxButB,GAASluB,GAAS6qB,EAAY,GAG9B4L,EAAU,aAAa7O,GAAS5nB,EAAQ,WAAW,GAGnDquB,GAAY1tB,GAAOmqB,EAAU,GAC7B,KAAK,YAAW,GAChB,KAAK,KAAI,GACT7tD,EAAQ,qBAAqB,KAAK,IAAI,GAAGA,EAAQ,kBAAkB,KAAK,KACxEA,EAAQ,cAAc,KAAK,IAAI,GAAGA,EAAQ,WAAW,KAAK,KAC1DA,EAAQ,WAAW,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,KAAK,MAAMA,EAAQ,QAAQ,CAAC,CAAC,KAAK,GAC7EixD,GAAS8O,GAASnS,EAAY,GACzB5tD,EAAQ,UACXixD,GAAS8O,EAAQ,uBAAuB,GAAG,OAAOlT,IAAW,SAAS,CAAC,GAAGe,EAAY,GAEnF5tD,EAAQ,UACXixD,GAAS8O,EAAQ,uBAAuB,GAAG,OAAOlT,IAAW,SAAS,CAAC,GAAGe,EAAY,GAEpF5tD,EAAQ,cACVixD,GAAStG,GAAS,GAAG,OAAOkC,IAAW,KAAK,CAAC,GAE1C7sD,EAAQ,aACXixD,GAAS+N,GAAMlR,EAAe,GAE5B9tD,EAAQ,mBACVixD,GAAS+N,GAAMhR,EAAU,GACzB0D,GAAQsN,GAAM/Q,IAAanB,EAAU,IAElC9sD,EAAQ,qBACXixD,GAAS8O,EAAQ,uBAAuB,GAAG,OAAOlT,IAAW,OAAO,CAAC,GAAGe,EAAY,GACpFqD,GAAS8O,EAAQ,uBAAuB,GAAG,OAAOlT,IAAW,QAAQ,CAAC,GAAGe,EAAY,IAEvF,KAAK,OAAM,GACX,KAAK,QAAQ,IACb,KAAK,YAAY5tD,EAAQ,QAAQ,GAC7BA,EAAQ,YACV,KAAK,KAAI,GAEX,KAAK,QAAQA,EAAQ,IAAI,GACrBqQ,GAAWrQ,EAAQ,KAAK,KAC1BoyD,GAAYrvB,GAASksB,IAAajvD,EAAQ,OAAO;AAAA,UAC/C,MAAM;AAAA,QAChB,CAAS,GAEHyyD,GAAc1vB,GAASksB,EAAW;AAAA;AAAA,IACpC;AAAA,EACJ,GAAK;AAAA,IACD,KAAK;AAAA,IACL,OAAO,WAAmB;AACxB,UAAK,KAAK,OAGV;AAAA,aAAK,QAAQ,IACb,KAAK,OAAM,GACX,KAAK,aAAY;AACjB,YAAI+Q,IAAa,KAAK,QAAQ;AAC9B,QAAIA,KACFA,EAAW,YAAY,KAAK,OAAO,GAErC5O,GAAY,KAAK,SAASxD,EAAY;AAAA;AAAA,IACxC;AAAA,EACJ,GAAK;AAAA,IACD,KAAK;AAAA,IACL,OAAO,WAAoB;AACzB,MAAI,KAAK,SACP,KAAK,QAAO,GACZ,KAAK,QAAQ,IACb,KAAK,UAAU,MACN,KAAK,UACd,KAAK,YAAY,SAAS,MAC1B,KAAK,SAAS,IACd,KAAK,QAAQ,MACJ,KAAK,aACd,KAAK,IAAI,UAAU,MACnB,KAAK,IAAI,MAAK,KACL,KAAK,SACd,KAAK,KAAI;AAAA,IAEb;AAAA;AAAA;AAAA;AAAA;AAAA,EAMJ,CAAG,GAAG,CAAC;AAAA,IACH,KAAK;AAAA,IACL,OAAO,WAAsB;AAC3B,oBAAO,UAAUuR,IACVC;AAAA,IACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMJ,GAAK;AAAA,IACD,KAAK;AAAA,IACL,OAAO,SAAqBp/D,GAAS;AACnC,MAAAuwD,GAAOX,IAAUK,GAAcjwD,CAAO,KAAKA,CAAO;AAAA,IACpD;AAAA,EACJ,CAAG,CAAC;AACJ,GAAC;AACDuwD,GAAO6O,GAAQ,WAAW7F,IAAQ0B,IAASY,IAAQC,IAAUQ,IAAQS,EAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxrG5E,UAAMn/D,IAAQC,GAgGRoiE,IAAkBvgE,EAAyC,IAAI,GAC/DwgE,IAAQxgE,EAAiD,IAAI,GAC7DuT,IAAUvT,EAAI,EAAI,GAElBygE,IAAS,MAAM;AACnB,MAAAF,EAAgB,OAAO,OAAA;AAAA,IACzB,GAEMG,IAAU,MAAM;AACpB,MAAAH,EAAgB,OAAO,QAAA;AAAA,IACzB,GAEMniB,IAAU,MAAM;AACpB,MAAAmiB,EAAgB,OAAO,QAAA;AAAA,IACzB;AAcA,WAAAh+D,EAAa;AAAA,MACX,QAAAk+D;AAAA,MACA,SAAAC;AAAA,MACA,SAAAtiB;AAAA,MACA,cAhBmB,MACZmiB,EAAgB,OAAO,aAAA;AAAA,MAgB9B,SAbc,MACPA,EAAgB,OAAO,QAAA;AAAA,MAa9B,SAVc,CAACngE,MACRmgE,EAAgB,OAAO,QAAQngE,CAAI;AAAA,IAS1C,CACD,GAEDoH,GAAU,MAAM;AAEd,YAAM,EAAE,gBAAAm5D,GAAgB,KAAApxB,GAAK,KAAAksB,GAAK,UAAAmF,GAAU,GAAGxgE,MAASlC,GAClD2iE,IAAezgE,GACfE,IAA+B,CAAA;AACrC,iBAAWwE,KAAO1E;AAChB,QAAI,OAAO,UAAU,eAAe,KAAKygE,GAAc/7D,CAAG,KAAK+7D,EAAa/7D,CAAG,MAAM,WACnFxE,EAAQwE,CAAG,IAAI+7D,EAAa/7D,CAAG;AAGnC,MAAAo5C,GAAS,MAAM;AACb,QAAKz6C,GAAO+8D,EAAM,KAAK,MACrBD,EAAgB,QAAQ,IAAIb,GAAQc,EAAM,OAAclgE,CAAO,GAC/D,WAAW,MAAM;AACf,UAAAiT,EAAQ,QAAQ;AAAA,QAClB,GAAG,GAAG;AAAA,MAEV,CAAC;AAAA,IACH,CAAC,GAED4C,GAAY,MAAM;AAChB,MAAAioC,EAAA;AAAA,IACF,CAAC,cAICz/C,EAAA,GAAAC,EAmBM,OAnBNS,IAmBM;AAAA,MAjBIkU,EAAA,SADR5U,EAAA,GAAAC,EAQM,OARNuF,IAQM;AAAA,QAJJpF,EAGEO,IAAA;AAAA,UAFA,OAAM;AAAA,UACN,eAAA;AAAA,QAAA;;MAIJH,EAOM,OAAA;AAAA,QAPA,UAAOhB,EAAA,cAAc;AAAA,MAAA;QACzBgB,EAKC,OAAA;AAAA,mBAJK;AAAA,UAAJ,KAAIqhE;AAAA,UACH,OAAKxmC,GAAA,CAAA,EAAA,aAAA,QAAA,SAAmCzmB,EAAA,QAAO,IAAA,EAAA,GAAYpV,EAAA,QAAQ,CAAA;AAAA,UACnE,KAAKA,EAAA;AAAA,UACL,KAAKA,EAAA;AAAA,QAAA;;;;;;;;;;;;;ACxKd,UAAMD,IAAQC,GAOR,EAAE,eAAAuI,GAAe,mBAAAC,EAAA,IAAsBC,GAAA,GAEvCk6D,IAAwB,EAAE,UAAU,UAAU,WAAW,sBAAA,GAEzD5W,IAAgBZ,GAAA,GAEhB,EAAE,WAAAviC,EAAA,IAAc4J,GAAA,GAChB,EAAE,uBAAAzG,EAAA,IAA0BrB,GAAA,GAE5ByU,IAAkBpT,EAAsBhsB,EAAM,SAAS;AAE7D,QAAI6D,EAAYu7B,CAAe;AAC7B,YAAM,IAAI,MAAM,yDAAyD;AAG3E,UAAMijC,IAAkBQ,GAAkC,iBAAiB,GAErEC,IAAW1iE,EAAS,MACpB4rD,EAAc,aAAaA,EAAc,UAAU,OAAO,eACrDA,EAAc,UAAU,MAAM,aAAa,MAAM,kBAAkBA,EAAc,UAAU,gBAE7F,EACR,GAEK+W,IAAgB,MAAM;AAC1B,MAAIV,EAAgB,SAClBA,EAAgB,MAAM,OAAA;AAAA,IAE1B,GAEMW,IAAiB,MAAM;AAC3B,MAAIX,EAAgB,SAClBA,EAAgB,MAAM,QAAA;AAAA,IAE1B,GAEMY,IAAwB,MAAM;AAClC,UAAIZ,EAAgB,SAASrW,EAAc,OAAOA,EAAc,WAAW;AACzE,QAAA+W,EAAA;AACA,cAAM7gE,IAAO4qD;AAAA,UACXuV,EAAgB;AAAA,UAChBrW,EAAc;AAAA,UACdA,EAAc,UAAU,gBAAgB;AAAA,UACxCA,EAAc,UAAU,gBAAgB;AAAA,QAAA;AAE1C,QAAAqW,EAAgB,MAAM,QAAQngE,CAAI,GAClC8gE,EAAA;AAAA,MACF;AAAA,IACF,GAEM9W,IAAgB,OAAOr3C,MAAc;AACzC,YAAMjM,IAAM,MAAMygC,GAAexgB,GAAWhU,CAAE;AAC9C,MAAAm3C,EAAc,aAAapjD,CAAG,GAC9BojD,EAAc,WAAA;AAAA,IAChB,GAEMkX,IAAU,YAAY;AAC1B,UAAIb,EAAgB,SAASrW,EAAc,OAAOA,EAAc,WAAW;AACzE,cAAMV,IAAM+B;AAAA,UACVgV,EAAgB;AAAA,UAChBrW,EAAc;AAAA,UACdA,EAAc,UAAU,gBAAgB;AAAA,UACxCA,EAAc,UAAU,gBAAgB;AAAA,QAAA;AAE1C,YAAI;AACF,UAAAA,EAAc,WAAA,GACd,MAAMF,GAAUjjC,GAAWyiC,EAAI,IAAIA,CAAG,GACtC9iD,EAAc,SAAS,GACvB,WAAW,MAAM;AACf,YAAIwjD,EAAc,aAChBE,EAAcF,EAAc,UAAU,EAAE;AAAA,UAE5C,GAAG,GAAI;AAAA,QACT,SAASnjD,GAAO;AACd,UAAAJ,EAAkBI,CAAK;AAAA,QACzB;AAAA,MACF;AAAA,IACF,GAEMs6D,IAAe,MAAM;AACzB,MAAAF,EAAA,GACAF,EAAA;AAAA,IACF,GAEMK,IAAa,MAAM;AACvB,MAAAF,EAAA;AAAA,IACF,GAEMG,IAAcjjE,EAAS,MACvB,GAAA4rD,EAAc,aAAa8W,EAAS,MAAM,SAAS,KAAK,CAAC9W,EAAc,OAI5E;AAED,WAAA/zC,GAAY,MAAM;AAChB,MAAIoqD,EAAgB,SAClBA,EAAgB,MAAM,QAAA;AAAA,IAE1B,CAAC;MAKSv9D,EAAAknD,CAAA,EAAc,UADtBvrD,KAAAC,EAKM,OALNS,IAKM;AAAA,QADJN,EAAmCO,IAAA,EAAhB,eAAA,IAAa;AAAA,MAAA;MAG1BiiE,EAAA,cADR9iE,EAcE+iE,IAAA;AAAA,QAZC,KAAKx+D,EAAAknD,CAAA,EAAc,WAAW,iBAAa;AAAA,iBACxC;AAAA,QAAJ,KAAIqW;AAAA,QACH,gBAAcv9D,EAAAs6B,CAAA,EAAgB,MAAM,WAAWt6B,EAAAs6B,CAAA,EAAgB,MAAM;AAAA,QACrE,YAAY;AAAA,QACZ,sBAAoB;AAAA,QACpB,mBAAiBwjC;AAAA,QACjB,OAAOO;AAAA,QACP,SAASC;AAAA,QACT,KAAKN,EAAA;AAAA,QACL,aAAW;AAAA,QACX,iBAAe;AAAA,QAChB,YAAA;AAAA,MAAA;;;;;;;;;;;;;;;;ACpHJ,UAAM,EAAE,GAAA7/D,EAAA,IAAM/C,EAAA,GAER,EAAE,cAAA8hB,EAAA,IAAiBC,GAAA,GAEnBkX,IAAmBrG,GAAA,GACnB,EAAE,OAAAtE,GAAO,QAAAvN,GAAQ,WAAAgS,GAAW,SAAA5d,EAAA,IAAY6jB,GAAYC,CAAgB,GAEpEjY,IAAc,MAAM;AACxB,MAAAiY,EAAiB,SAAS,IAAI,GAC9BlY,EAAO,QAAQ;AAAA,IACjB,GAEMsiD,IAAUzhE,EAAI,EAAI,GAElB0iD,IAAgB,MAAM;AAC1B,MAAA+e,EAAQ,QAAQ,CAACA,EAAQ;AAAA,IAC3B,GAEMC,IAAc,MAAM;AAAA,IAE1B,GAEMz6C,IAAY3oB,EAAS,MAClBouB,EAAM,OAAO,WAAW,aAAahG,EAC7C,GAEK2R,IAAc/5B,EAAS,MACtBouB,EAAM,QACJA,EAAM,MAAM,WAAW,cADLlG,EAE1B,GAEKw0B,IAAc18C,EAAS,MACpB2oB,EAAU,UAAUR,GAAa,KACzC,GACKk7C,IAAcrjE,EAAS,MACpB2oB,EAAU,UAAUR,GAAa,KACzC,GACKm7C,IAActjE,EAAS,MACpB2oB,EAAU,UAAUR,GAAa,KACzC,GACKo7C,IAAiBvjE,EAAS,MACvB2oB,EAAU,UAAUR,GAAa,QACzC,GAEK6R,IAAkBh6B,EAAS,MAC3BouB,EAAM,OAAO,YAAYA,EAAM,MAAM,SAAS,SAASA,EAAM,MAAM,SAAS,MAAM,eAC7E;AAAA,MACL,KAAKA,EAAM,MAAM,SAAS,MAAM,aAAa,MAAM,aAAa,KAAK,IAAA;AAAA,MACrE,OAAOA,EAAM,MAAM,SAAS,MAAM,aAAa;AAAA,MAC/C,QAAQA,EAAM,MAAM,SAAS,MAAM,aAAa;AAAA,MAChD,SACEyU,GAAqBzU,EAAM,MAAM,QAAQ,KACzCA,EAAM,MAAM,SAAS,mBACrBA,EAAM,MAAM,SAAS,gBAAgB,oBACjCA,EAAM,MAAM,SAAS,gBAAgB,oBACrC;AAAA,IAAA,IAGH;AAAA,MACL,KAAK;AAAA,MACL,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,SAAS;AAAA,IAAA,CAEZ,GACKo1C,IAAexjE,EAAS,MACvBouB,EAAM,QACJA,EAAM,MAAM,MAAM,eADA,EAE1B,GAEKuuB,IAAgB38C,EAAS,MACtBouB,EAAM,OAAO,YAAY,MACjC;2BAICjuB,EA2GUwI,IAAA;AAAA,MA1GP,eAAa;AAAA,MACd,YAAA;AAAA,MACA,OAAA;AAAA,IAAA;iBAEA,MAGE;AAAA,QAFMjE,EAAAuQ,CAAA,UADR9U,EAGEsjE,IAAA;AAAA;UADC,eAAc3iD;AAAA,QAAA,MAGJpc,EAAA0pB,CAAA,UADbjuB,EAiGQgB,IAAA;AAAA;UA/FN,OAAKsD,GAAA,CAAC,oBAAkB,EAAA,oCACsB0+D,EAAA,OAAO,CAAA;AAAA,QAAA;qBAErD,MA2FM;AAAA,YA3FNtiE,EA2FM,OA3FNE,IA2FM;AAAA,cA1FJN,EA8CW+lB,IAAA;AAAA,gBA7CR,OAAO9hB,EAAAkd,CAAA;AAAA,gBACR,SAAQ;AAAA,gBACP,QAAQ;AAAA,gBACT,OAAM;AAAA,cAAA;2BAEN,MAEM;AAAA,kBAFN/gB,EAEM,OAFNgF,IAEM;AAAA,oBADJhF,EAAkC,OAAA,MAA7B,UAAKC,EAAG0iE,EAAA,KAAY,GAAA,CAAA;AAAA,kBAAA;kBAE3B/iE,EAAWsI,EAAA;AAAA,kBACXlI,EAmCM,OAnCNsF,IAmCM;AAAA,oBAlCJ1F,EAiBOyF,IAAA;AAAA,sBAhBJ,QAAQi9D,EAAA;AAAA,sBACR,SAASA,EAAA,QAAO,SAAA;AAAA,sBAChB,OAAOA,EAAA,QAAO,cAAA;AAAA,sBACf,MAAA;AAAA,sBACA,OAAM;AAAA,sBACL,OAAO;AAAA,sBACP,QAAQ;AAAA,sBACR,WAAY/e,GAAa,CAAA,MAAA,CAAA;AAAA,oBAAA;iCAE1B,MAAwC;AAAA,wBAAxC3jD,EAAwCE,IAAA,EAAjC,MAAK,2BAAyB;AAAA,wBACrCF,EAKWmG,IAAA;AAAA,0BAJT,WAAU;AAAA,0BACV,UAAS;AAAA,wBAAA;qCAET,MAAkD;AAAA,gCAA/ClC,EAAA7B,CAAA,EAAC,yCAAA,CAAA,GAAA,CAAA;AAAA,0BAAA;;;;;;oBAGRpC,EAeOyF,IAAA;AAAA,sBAdL,MAAA;AAAA,sBACA,SAAQ;AAAA,sBACP,OAAO;AAAA,sBACP,QAAQ;AAAA,sBACT,OAAM;AAAA,sBACL,WAAY4a,GAAW,CAAA,MAAA,CAAA;AAAA,oBAAA;iCAExB,MAA0B;AAAA,wBAA1BrgB,EAA0BE,IAAA,EAAnB,MAAK,aAAW;AAAA,wBACvBF,EAKWmG,IAAA;AAAA,0BAJT,WAAU;AAAA,0BACV,UAAS;AAAA,wBAAA;qCAET,MAA8B;AAAA,gCAA3BlC,EAAA7B,CAAA,EAAC,qBAAA,CAAA,GAAA,CAAA;AAAA,0BAAA;;;;;;;;;;cAKZhC,EA0CM,OA1CNuF,IA0CM;AAAA,gBAzCJvF,EAuBM,OAvBNwF,IAuBM;AAAA,kBArBI3B,EAAAmuB,CAAA,MAAcnuB,EAAA8tB,EAAA,EAA2B,OADjDnyB,KAAAC,EAKM,OALNgG,IAKM;AAAA,oBADJ7F,EAAkDijE,IAAA,EAAzB,cAAY7jE,EAAA,UAAA,GAAS,MAAA,GAAA,CAAA,YAAA,CAAA;AAAA,kBAAA,OAEhDQ,EAAA,GAAAC,EAeM,OAfNu9B,IAeM;AAAA,oBAXJp9B,EAUEkjE,IAAA;AAAA,sBATC,cAAYh7C,EAAA;AAAA,sBACZ,gBAAcoR,EAAA;AAAA,sBACd,KAAKC,EAAA,MAAgB;AAAA,sBACrB,oBAAkBA,EAAA,MAAgB;AAAA,sBAClC,OAAOA,EAAA,MAAgB;AAAA,sBACvB,QAAQA,EAAA,MAAgB;AAAA,sBACzB,iBAAA;AAAA,sBACC,QAAMopC;AAAA,sBACN,SAAOA;AAAA,oBAAA;;;gBAIdviE,EAgBM,OAhBNi9B,IAgBM;AAAA,kBAdIp5B,EAAA0pB,CAAA,UADRjuB,EAcEyjE,IAAA;AAAA,oBAZC,KAAKl/D,EAAA0pB,CAAA,EAAM;AAAA,oBACX,aAAWvuB,EAAA;AAAA,oBACX,cAAYA,EAAA;AAAA,oBACZ,YAAU6E,EAAA0pB,CAAA,EAAM;AAAA,oBAChB,YAAUi1C,EAAA;AAAA,oBACV,YAAUC,EAAA;AAAA,oBACV,YAAU5mB,EAAA;AAAA,oBACV,eAAa6mB,EAAA;AAAA,oBACb,gBAAcxpC,EAAA;AAAA,oBACd,cAAYpR,EAAA;AAAA,oBACZ,0BAAwBg0B,UAAgBA,EAAA,MAAc,eAAe,SAAS;AAAA,oBAC9E,+BAA6BA,UAAgBA,EAAA,MAAc,eAAe,aAAa;AAAA,kBAAA;;;;;;;;;;;ICxMhGknB,KAAoBniE,EAA2B,IAAI,GACnDoiE,KAAqBpiE,EAAI,EAAK;AAE7B,SAASqiE,KAAuB;AAKrC,SAAO;AAAA,IACL,0BAL+B,MAAM;AACrC,MAAAD,GAAmB,QAAQ,CAACA,GAAmB;AAAA,IACjD;AAAA,IAIE,mBAAAD;AAAA,IACA,oBAAAC;AAAA,EAAA;AAEJ;;;;;;;;ACMA,UAAMlkE,IAAQC,GAQR,EAAE,EAAA,IAAMC,EAAA,GAER28C,IAAS/6C,EAAI,CAAC,YAAY,MAAM,CAAC,GAEjCq3B,IAAmBrG,GAAA,GACnB,EAAE,OAAAtE,GAAO,iBAAAuE,GAAiB,oBAAAC,GAAoB,mBAAAvE,EAAA,IAAsByK,GAAYC,CAAgB,GAEhGkS,IAAoBC,GAAA,GAEpBt1B,IAAQ5V,EAAS,MACdirC,EAAkB,cAAcrrC,EAAM,QAAQ,CACtD,GAEK2D,IAAOvD,EAAiC,MACrC4V,EAAM,MAAM,CAAC,KAAK,IAC1B,GAEK+S,IAAY3oB,EAAS,MAClBmoB,GAAa,KACrB,GAEKu0B,IAAc18C,EAAS,MACpB2oB,EAAU,UAAUR,GAAa,KACzC,GAEKw0B,IAAgB38C,EAA2B,MACxCouB,EAAM,SAASA,EAAM,MAAM,WAAYA,EAAM,MAAM,WAAyB,IACpF,GAEKwuB,IAAsB,MAAM;AAChC,MAAAhqB,EAAmB,QAAQ;AAAA,IAC7B,GAGM,EAAE,iBAAAwpB,GAAiB,gBAAAD,MAAmBD,GAA6BvzB,EAAU,OAAO/oB,EAAM,SAAS,GAEnG,EAAE,gBAAA28C,GAAgB,eAAAD,MAAkBD,GAA4B1zB,EAAU,OAAO/oB,EAAM,SAAS;qBAK5F2D,EAAA,cADRpD,EAgKmB28C,IAAA;AAAA;kBA9JRL,EAAA;AAAA,oDAAAA,EAAM,QAAAp4C;AAAA,MACf,UAAA;AAAA,MACA,OAAM;AAAA,IAAA;iBAEN,MAiFkB;AAAA,QAjFlB5D,EAiFkBs8C,IAAA;AAAA,UAhFhB,WAAU;AAAA,UACT,OAAOr4C,EAAA,CAAA,EAAC,4CAAA;AAAA,UACT,OAAM;AAAA,QAAA;qBAEN,MA2EsB;AAAA,YA3EtBjE,EA2EsBu8C,IAAA,MAAA;AAAA,yBA1EpB,MAyEQ;AAAA,gBAzERv8C,EAyEQ8jD,IAAA;AAAA,kBAzEA,UAAQ,CAAGhhD,EAAA,MAAK;AAAA,gBAAA;6BACtB,MAuE0B;AAAA,oBAtElBA,EAAA,cADRpD,EAuE0B88C,IAAA;AAAA;sBArEf,YAAA15C,EAAA,MAAK;AAAA,sBAAL,uBAAAY,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAE,MAAAd,EAAA,MAAK,aAAUc;AAAA,sBACvB,cAAYxE,EAAA;AAAA,sBACZ,cAAY8oB,EAAA;AAAA,sBACZ,aAAYi0B;AAAA,oBAAA;sBAEF,kBACT,MAwBO;AAAA,wBAvBCl4C,EAAAy3C,CAAA,UADRh8C,EAwBOgN,IAAA;AAAA;0BAtBL,OAAA;AAAA,0BACA,OAAM;AAAA,wBAAA;qCAEN,MAkBO;AAAA,4BAlBP1M,EAkBO2M,IAAA,MAAA;AAAA,yCAjBL,MAgBqB;AAAA,gCAhBrB3M,EAgBqB25C,IAAA;AAAA,kCAfnB,SAAQ;AAAA,kCACR,QAAO;AAAA,gCAAA;6CAEP,MAWE;AAAA,oCAXF35C,EAWEy8C,IAAA;AAAA,sCAVS,YAAA35C,EAAA,MAAK;AAAA;wCAALY,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAE,MAAAd,EAAA,MAAK,WAAQc;AAAA,wCASDu4C;AAAA,sCAAA;AAAA,sCARpB,OAAOl4C,EAAA,CAAA,EAAC,sCAAA;AAAA,sCACT,WAAQ;AAAA,sCACP,cAAY7E,EAAA;AAAA,sCACb,WAAA;AAAA,sCACA,UAAA;AAAA,sCACC,UAAQ,CAAG0D,EAAA,MAAK;AAAA,sCAChB,UAAUmB,EAAA03C,CAAA;AAAA,sCACV,oBAAkB13C,EAAA4gC,EAAA;AAAA,oCAAA;;;;;;;;;;wBAOnB5gC,EAAA43C,CAAA,UADRn8C,EAyBOgN,IAAA;AAAA;0BAvBL,OAAA;AAAA,0BACA,OAAM;AAAA,wBAAA;qCAEN,MAmBO;AAAA,4BAnBP1M,EAmBO2M,IAAA,MAAA;AAAA,yCAlBL,MAiBqB;AAAA,gCAjBrB3M,EAiBqB25C,IAAA;AAAA,kCAhBnB,SAAQ;AAAA,kCACR,QAAO;AAAA,gCAAA;6CAEP,MAYE;AAAA,oCAZF35C,EAYE08C,IAAA;AAAA,sCAXS,YAAA55C,EAAA,MAAK;AAAA;wCAALY,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAE,MAAAd,EAAA,MAAK,UAAOc;AAAA,wCAUAu4C;AAAA,sCAAA;AAAA,sCATpB,OAAOl4C,EAAA,CAAA,EAAC,qCAAA;AAAA,sCACR,oBAAkBA,EAAAiuB,CAAA;AAAA,sCACnB,WAAQ;AAAA,sCACP,cAAY9yB,EAAA;AAAA,sCACb,WAAA;AAAA,sCACA,UAAA;AAAA,sCACC,UAAQ,CAAG0D,EAAA,MAAK;AAAA,sCAChB,UAAUmB,EAAA63C,CAAA;AAAA,sCACV,oBAAkB73C,EAAA4gC,EAAA;AAAA,oCAAA;;;;;;;;;;wBAM3B7kC,EAUO0M,IAAA;AAAA,0BATL,OAAA;AAAA,0BACA,OAAM;AAAA,wBAAA;qCAEN,MAKO;AAAA,4BALP1M,EAKO2M,IAAA,MAAA;AAAA,yCAJL,MAGE;AAAA,gCAHF3M,EAGE6U,IAAA;AAAA,8CAFS5Q,EAAA2pB,CAAA;AAAA,wFAAAA,EAAiB,QAAAhqB,IAAA;AAAA,kCACzB,OAAOK,EAAA,CAAA,EAAC,+CAAA;AAAA,gCAAA;;;;;;;;;;;;;;;;;;;QAUjBA,EAAA0pB,CAAA,UADRjuB,EAuEkB48C,IAAA;AAAA;UArEhB,WAAU;AAAA,UACT,OAAOr4C,EAAA,CAAA,EAAC,wCAAA;AAAA,UACT,OAAM;AAAA,QAAA;qBAEN,MAgEsB;AAAA,YAhEtBjE,EAgEsBu8C,IAAA,EAhED,OAAM,kBAAc;AAAA,yBAEvC,MAOO;AAAA,gBAPPv8C,EAOO0M,IAAA,MAAA;AAAA,6BANL,MAEO;AAAA,oBAFP1M,EAEO2M,IAAA,EAFD,MAAK,OAAG;AAAA,iCACZ,MAAqD;AAAA,4BAAlD1I,EAAA,CAAA,EAAC,4CAAA,CAAA,GAAA,CAAA;AAAA,sBAAA;;;oBAENjE,EAEO2M,IAAA,EAFD,MAAK,OAAG;AAAA,iCACZ,MAA+B;AAAA,wBAA/B3M,EAA+B28C,IAAA;AAAA,0BAAnB,OAAO14C,EAAA0pB,CAAA,EAAM;AAAA,wBAAA;;;;;;;gBAG7B3tB,EAOO0M,IAAA,MAAA;AAAA,6BANL,MAEO;AAAA,oBAFP1M,EAEO2M,IAAA,EAFD,MAAK,OAAG;AAAA,iCACZ,MAAuD;AAAA,4BAApD1I,EAAA,CAAA,EAAC,8CAAA,CAAA,GAAA,CAAA;AAAA,sBAAA;;;oBAENjE,EAEO2M,IAAA,EAFD,MAAK,OAAG;AAAA,iCACZ,MAAgC;AAAA,4BAA7B1I,EAAA0pB,CAAA,EAAM,WAAW,SAAS,GAAA,CAAA;AAAA,sBAAA;;;;;;gBAGjC3tB,EAOO0M,IAAA,MAAA;AAAA,6BANL,MAEO;AAAA,oBAFP1M,EAEO2M,IAAA,EAFD,MAAK,OAAG;AAAA,iCACZ,MAAwC;AAAA,4BAArC1I,EAAA,CAAA,EAAC,+BAAA,CAAA,GAAA,CAAA;AAAA,sBAAA;;;oBAENjE,EAEO2M,IAAA,EAFD,MAAK,OAAG;AAAA,iCACZ,MAAqC;AAAA,4BAAlC1I,EAAA4E,EAAA,EAAe5E,EAAA0pB,CAAA,EAAM,SAAS,CAAA,GAAA,CAAA;AAAA,sBAAA;;;;;;gBAGrC3tB,EAOO0M,IAAA,MAAA;AAAA,6BANL,MAEO;AAAA,oBAFP1M,EAEO2M,IAAA,EAFD,MAAK,OAAG;AAAA,iCACZ,MAAyC;AAAA,4BAAtC1I,EAAA,CAAA,EAAC,gCAAA,CAAA,GAAA,CAAA;AAAA,sBAAA;;;oBAENjE,EAEO2M,IAAA,EAFD,MAAK,OAAG;AAAA,iCACZ,MAAsC;AAAA,4BAAnC1I,EAAA4E,EAAA,EAAe5E,EAAA0pB,CAAA,EAAM,UAAU,CAAA,GAAA,CAAA;AAAA,sBAAA;;;;;;gBAG3BuuB,EAAA,cAAXr8C,EA6BM,OAAAS,IAAA;AAAA,kBA5BJN,EAOO0M,IAAA,MAAA;AAAA,+BANL,MAEO;AAAA,sBAFP1M,EAEO2M,IAAA,EAFD,MAAK,OAAG;AAAA,mCACZ,MAA6D;AAAA,8BAA1D1I,EAAA,CAAA,EAAC,oDAAA,CAAA,GAAA,CAAA;AAAA,wBAAA;;;sBAENjE,EAEO2M,IAAA,EAFD,MAAK,OAAG;AAAA,mCACZ,MAAuC;AAAA,0BAAvC3M,EAAuC28C,IAAA;AAAA,4BAA3B,OAAOT,EAAA,MAAc;AAAA,0BAAA;;;;;;;kBAGrCl8C,EAOO0M,IAAA,MAAA;AAAA,+BANL,MAEO;AAAA,sBAFP1M,EAEO2M,IAAA,EAFD,MAAK,OAAG;AAAA,mCACZ,MAA2D;AAAA,8BAAxD1I,EAAA,CAAA,EAAC,kDAAA,CAAA,GAAA,CAAA;AAAA,wBAAA;;;sBAENjE,EAEO2M,IAAA,EAFD,MAAK,OAAG;AAAA,mCACZ,MAA2C;AAAA,8BAAxCuvC,EAAA,MAAc,eAAe,QAAQ,GAAA,CAAA;AAAA,wBAAA;;;;;;kBAG5Cl8C,EAOO0M,IAAA,MAAA;AAAA,+BANL,MAEO;AAAA,sBAFP1M,EAEO2M,IAAA,EAFD,MAAK,OAAG;AAAA,mCACZ,MAAuD;AAAA,8BAApD1I,EAAA,CAAA,EAAC,8CAAA,CAAA,GAAA,CAAA;AAAA,wBAAA;;;sBAENjE,EAEO2M,IAAA,EAFD,MAAK,OAAG;AAAA,mCACZ,MAAoD;AAAA,0BAAjDtH,EAAAhF,EAAA4D,EAAAs4B,EAAA,EAAY2f,EAAA,MAAc,eAAe,IAAI,CAAA,GAAA,CAAA;AAAA,wBAAA;;;;;;kBAI5CD,EAAA,SAAeh4C,EAAAm+B,EAAA,EAAqB8Z,EAAA,KAAa,UADzDx8C,EAGEm9C,IAAA;AAAA;oBADC,MAAMX,EAAA;AAAA,kBAAA;;;;;;;;;;;;;;;;;;;;;;;AC3MnB,UAAMp7C,IAAOC,GAKP,EAAE,GAAAqB,EAAA,IAAM/C,EAAA,GAERqkC,IAAKC,GAAa,EAAE,QAAQkB,IAAwC,GAEpE,EAAE,qBAAAn9B,EAAA,IAAwBG,GAAA,GAE1BwiD,IAAS,YAAY;AAEzB,UADA3mB,EAAG,MAAM,OAAA,GACLA,EAAG,MAAM,UAAU;AACrB,QAAAh8B,EAAA;AACA;AAAA,MACF;AACA,MAAA5G,EAAK,QAAQ;AAAA,IACf,GAEMyiE,IAAiB,YAAY;AAEjC,UADA7/B,EAAG,MAAM,OAAA,GACLA,EAAG,MAAM,UAAU;AACrB,QAAAh8B,EAAA;AACA;AAAA,MACF;AACA,MAAA5G,EAAK,gBAAgB;AAAA,IACvB;;;;QAKU1B,EAAA,iBADRM,EAoBmC4qD,IAAA;AAAA;UAlBhC,aAAWlrD,EAAA;AAAA,QAAA;qBAEZ,MAOgB;AAAA,YAPhBY,EAOgB0f,GAAA;AAAA,cANd,MAAK;AAAA,cACL,OAAM;AAAA,cACN,WAAQ;AAAA,cACP,WAAY2qC,GAAM,CAAA,MAAA,CAAA;AAAA,YAAA;yBAEnB,MAA6B;AAAA,oBAA1BpmD,EAAA7B,CAAA,EAAC,oBAAA,CAAA,GAAA,CAAA;AAAA,cAAA;;;YAENpC,EAOciI,GAAA;AAAA,cANZ,MAAK;AAAA,cACL,OAAM;AAAA,cACN,WAAQ;AAAA,cACP,WAAYs7D,GAAc,CAAA,MAAA,CAAA;AAAA,YAAA;yBAE3B,MAA8C;AAAA,oBAA3Ct/D,EAAA7B,CAAA,EAAC,qCAAA,CAAA,GAAA,CAAA;AAAA,cAAA;;;;;;QAGRpC,EAGEwjE,IAAA;AAAA,UAFC,aAAWpkE,EAAA;AAAA,UACX,cAAYA,EAAA;AAAA,QAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvCjB,UAAM0B,IAAOC,GAKP,EAAE,GAAAqB,EAAA,IAAM/C,EAAA,GAERi5B,IAAmBrG,GAAA,GACnB,EAAE,WAAAG,EAAA,IAAciG,GAAYC,CAAgB;sBAIhD14B,EAAA,GAAAC,EAmDM,OAnDNS,IAmDM;AAAA,MAlDJF,EAiDM,OAjDNgF,IAiDM;AAAA,QAhDJpF,EAkBQ0rD,IAAA;AAAA,sBAjBGznD,EAAAmuB,CAAA;AAAA,gEAAAA,EAAS,QAAAxuB,IAAA;AAAA,UAClB,eAAA;AAAA,UACA,OAAM;AAAA,QAAA;qBAEN,MAKO;AAAA,YALP5D,EAKO2rD,IAAA;AAAA,cAJJ,OAAO1nD,EAAA8tB,EAAA,EAA2B;AAAA,cACnC,WAAQ;AAAA,YAAA;yBAER,MAAiD;AAAA,oBAA9C9tB,EAAA7B,CAAA,EAAC,wCAAA,CAAA,GAAA,CAAA;AAAA,cAAA;;;YAGEhD,EAAA,WAAWA,EAAA,qBADnBM,EAMOisD,IAAA;AAAA;cAJJ,OAAO1nD,EAAA8tB,EAAA,EAA2B;AAAA,cACnC,WAAQ;AAAA,YAAA;yBAER,MAAgD;AAAA,oBAA7C9tB,EAAA7B,CAAA,EAAC,uCAAA,CAAA,GAAA,CAAA;AAAA,cAAA;;;;;;QAIRhC,EAwBM,OAxBNsF,IAwBM;AAAA,UAvBJ9E,GAA+BC,EAAA,QAAA,iBAAA;AAAA,UAEvBoD,EAAAmuB,CAAA,MAAcnuB,EAAA8tB,EAAA,EAA2B,QADjDnyB,KAAAC,EAYM,OAZN8F,IAYM;AAAA,YARJ3F,EAOEyjE,IAAA;AAAA,cANC,aAAWrkE,EAAA;AAAA,cACX,cAAYA,EAAA;AAAA,cACZ,aAAW6E,EAAAmuB,CAAA,MAAcnuB,EAAA8tB,EAAA,EAA2B;AAAA,cACpD,cAAY3yB,EAAA;AAAA,cACZ,iCAAS0B,EAAI,QAAA;AAAA,cACb,yCAAmBA,EAAI,gBAAA;AAAA,YAAA;;UAIpB1B,EAAA,WAAW6E,EAAAmuB,CAAA,MAAcnuB,EAAA8tB,EAAA,EAA2B,OAD5DnyB,EAAA,GAAAC,EAQM,OARN+F,IAQM;AAAA,YAJJ5F,EAGE8rD,IAAA;AAAA,cAFC,aAAW1sD,EAAA;AAAA,cACX,aAAW6E,EAAAmuB,CAAA,MAAcnuB,EAAA8tB,EAAA,EAA2B;AAAA,YAAA;;;QAI3D3xB,EAEM,OAFNyF,IAEM;AAAA,UADJ7F,EAAiE+rD,IAAA,EAAvB,aAAW3sD,EAAA,SAAA,GAAQ,MAAA,GAAA,CAAA,WAAA,CAAA;AAAA,QAAA;;;;;;;;;;;;;;AC3FrE,UAAMD,IAAQC,GAaR0B,IAAOC,GAIPqf,IAASnf,EAAI,EAAK,GAElBmL,IAAU,CAACzI,MAAiB;AAEhC,UADA0I,GAAe1I,CAAK,GAChB,CAACxE,EAAM,aAAa;AACtB,QAAA2B,EAAK,SAAS;AACd;AAAA,MACF;AACA,MAAAsf,EAAO,QAAQ;AAAA,IACjB,GACMtY,IAAY,MAAM;AACtB,MAAAhH,EAAK,SAAS,GACdsf,EAAO,QAAQ;AAAA,IACjB,GAEME,IAAW,MAAM;AACrB,MAAAF,EAAO,QAAQ;AAAA,IACjB,GAEM,EAAE,GAAAhe,EAAA,IAAM/C,EAAA;;;;QAIZW,EAeOyF,IAAA;AAAA,UAdL,SAAQ;AAAA,UACP,WAASrG,EAAA;AAAA,UACV,MAAA;AAAA,UACC,OAAOA,EAAA;AAAA,UACP,QAAQA,EAAA;AAAA,UACR,WAAYgN,GAAO,CAAA,MAAA,CAAA;AAAA,QAAA;qBAEpB,MAA0B;AAAA,YAA1BpM,EAA0BE,IAAA,EAAnB,MAAK,aAAW;AAAA,YACvBF,EAKWmG,IAAA;AAAA,cAJT,WAAU;AAAA,cACV,UAAS;AAAA,YAAA;yBAET,MAAsC;AAAA,oBAAnClC,EAAA7B,CAAA,EAAC,6BAAA,CAAA,GAAA,CAAA;AAAA,cAAA;;;;;;QAGRpC,EA2BUkI,IAAA;AAAA,sBA1BCkY,EAAA;AAAA,wDAAAA,EAAM,QAAAxc;AAAA,UACd,OAAO;AAAA,QAAA;qBAER,MAsBQ;AAAA,YArBAwc,EAAA,cADR1gB,EAsBQgB,IAAA;AAAA;cApBN,WAAQ;AAAA,YAAA;yBAER,MAEiB;AAAA,gBAFjBV,EAEiBmI,IAAA,EAFA,YAAWmY,KAAQ;AAAA,6BAClC,MAAqD;AAAA,wBAAlDrc,EAAA7B,CAAA,EAAC,4CAAA,CAAA,GAAA,CAAA;AAAA,kBAAA;;;gBAENpC,EAceqI,IAAA,MAAA;AAAA,6BAbb,MAAW;AAAA,oBAAXrI,EAAWsI,EAAA;AAAA,oBACXtI,EAKeuI,GAAA;AAAA,sBAJb,WAAQ;AAAA,sBACP,WAAY+X,GAAQ,CAAA,MAAA,CAAA;AAAA,oBAAA;iCAErB,MAA+B;AAAA,4BAA5Brc,EAAA7B,CAAA,EAAC,sBAAA,CAAA,GAAA,CAAA;AAAA,sBAAA;;;oBAENpC,EAKciI,GAAA;AAAA,sBAJZ,WAAQ;AAAA,sBACP,WAAYH,GAAS,CAAA,MAAA,CAAA;AAAA,oBAAA;iCAEtB,MAAsC;AAAA,4BAAnC7D,EAAA7B,CAAA,EAAC,6BAAA,CAAA,GAAA,CAAA;AAAA,sBAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GC1BRshE,KAAqB,KAAK;;;;;;;;;;;;;AArBhC,UAAMvkE,IAAQC,GAeR0B,IAAOC,GAIP,EAAE,mBAAA6G,GAAmB,eAAAD,EAAA,IAAkBE,GAAA,GAIvC,EAAE,GAAAzF,EAAA,IAAM/C,EAAA,GAER,EAAE,cAAA8hB,EAAA,IAAiBC,GAAA,GAEnBkX,IAAmBrG,GAAA,GACnB,EAAE,WAAAG,GAAW,SAAA5d,GAAS,OAAOmvD,EAAA,IAAgBtrC,GAAYC,CAAgB,GACzEsrC,IAAe3iE,EAAI,EAAK,GAExBupC,IAAoBC,GAAA,GACpB,EAAE,mBAAA24B,EAAA,IAAsBE,GAAA,GAExBnuD,IAAQ5V,EAAS,MACdirC,EAAkB,cAAcrrC,EAAM,QAAQ,CACtD,GAEK2D,IAAOvD,EAAiC,MACrC4V,EAAM,MAAM,CAAC,KAAK,IAC1B,GAEKwY,IAAQpuB,EAAoC,MAC5C,CAACuD,EAAK,SAAS,CAACA,EAAK,MAAM,UAAgB,OAC3C+gE,EAAO,SAASF,EAAY,QAAcA,EAAY,QACnD;AAAA,MACL,IAAI7gE,EAAK,MAAM;AAAA,MACf,OAAO;AAAA,QACL,cAAc;AAAA,MAAA;AAAA,MAEhB,YAAY;AAAA,QACV,WAAWA,EAAK,MAAM;AAAA,QACtB,aAAaA,EAAK,MAAM;AAAA,MAAA;AAAA,MAE1B,mBAAmB;AAAA,MACnB,OAAO;AAAA,QACL,WAAW;AAAA,QACX,SAAS;AAAA,MAAA;AAAA,MAEX,gBAAgB;AAAA,MAChB,SAASA,EAAK,MAAM;AAAA,MACpB,UAAU;AAAA,MACV,UAAU,CAAA;AAAA,MACV,SAAS,CAAA;AAAA,MACT,UAAU,CAAA;AAAA,MACV,UAAU;AAAA,QACR,mBAAmB,CAAA;AAAA,QACnB,oBAAoB,CAAA;AAAA,QACpB,YAAY,CAAA;AAAA,MAAC;AAAA,MAEf,sBAAsB;AAAA,MACtB,qBAAqB;AAAA,QACnB,uBAAuB,CAAA;AAAA,QACvB,WAAW,CAAA;AAAA,QACX,SAAS;AAAA,QACT,OAAO;AAAA,QACP,QAAQ;AAAA,MAAA;AAAA,MAEV,eAAe;AAAA,MACf,SAAS;AAAA,MACT,WAAW6O,GAAA;AAAA,MACX,YAAYA,GAAA;AAAA,MACZ,WAAW;AAAA,MACX,YAAY;AAAA,IAAA,CAEf,GAEK+wD,IAAUzhE,EAAI,EAAI,GAElB0iD,IAAgB,MAAM;AAC1B,MAAA+e,EAAQ,QAAQ,CAACA,EAAQ;AAAA,IAC3B,GAEMx6C,IAAY3oB,EAAS,MAClBouB,EAAM,OAAO,WAAW,aAAahG,EAC7C,GAEK2R,IAAc/5B,EAAS,MACtBouB,EAAM,QACJA,EAAM,MAAM,WAAW,cADLlG,EAE1B,GAEKw0B,IAAc18C,EAAS,MACpB2oB,EAAU,UAAUR,GAAa,KACzC,GACKk7C,IAAcrjE,EAAS,MACpB2oB,EAAU,UAAUR,GAAa,KACzC,GACKm7C,IAActjE,EAAS,MACpB2oB,EAAU,UAAUR,GAAa,KACzC,GACKo7C,IAAiBvjE,EAAS,MACvB2oB,EAAU,UAAUR,GAAa,QACzC,GAEK6R,IAAkBh6B,EAAS,MAC3BuD,EAAK,OAAO,eACP;AAAA,MACL,KAAKA,EAAK,MAAM,aAAa,MAAM,aAAa,KAAK,IAAA;AAAA,MACrD,OAAOA,EAAK,MAAM,aAAa,kBAAkB;AAAA,MACjD,QAAQA,EAAK,MAAM,aAAa,mBAAmB;AAAA,MACnD,SACEs/B,GAAqBzU,EAAM,OAAO,QAAQ,KAC1CA,EAAM,OAAO,SAAS,mBACtBA,EAAM,OAAO,SAAS,gBAAgB,oBAClCA,EAAM,MAAM,SAAS,gBAAgB,oBACrC;AAAA,IAAA,IAGH;AAAA,MACL,KAAK;AAAA,MACL,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,SAAS;AAAA,IAAA,CAEZ,GAEKuuB,IAAgB38C,EAAS,MACtBouB,EAAM,OAAO,YAAY,MACjC,GAEKm2C,IAA2D;AAAA,MAC/D18B,GAAsB;AAAA,MACtBA,GAAsB;AAAA,IAAA,GAElB28B,IAAaxkE,EAAS,MACnB,CAACmF,GAAO5B,EAAK,KAAK,KAAKghE,EAAmB,SAAShhE,EAAK,MAAM,MAAM,CAC5E,GACKkhE,IAAUzkE,EAAS,MAChB,CAACmF,GAAO5B,EAAK,KAAK,KAAKA,EAAK,MAAM,WAAWskC,GAAsB,OAC3E,GACKy8B,IAAStkE,EAAS,MACf,CAACmF,GAAO5B,EAAK,KAAK,KAAKA,EAAK,MAAM,WAAWskC,GAAsB,QAC3E,GACK68B,IAAW1kE,EAAS,MACjB,CAACJ,EAAM,wBAAwB0kE,EAAO,KAC9C,GACKK,IAAY3kE,EAAS,MAClB,CAACmF,GAAO5B,EAAK,KAAK,KAAKA,EAAK,MAAM,WAAWskC,GAAsB,SAC3E,GACK+8B,IAAiB5kE,EAAS,MACvBuD,EAAK,OAAO,SAAS,eAC7B,GAEK,EAAE,WAAAklB,EAAA,IAAc4J,GAAA,GAEhBwyC,IAAgB,YAAY;AAChC,MAAA55B,EAAkB,WAAWrrC,EAAM,QAAQ,GAC3Cm5B,EAAiB,SAAS,IAAI,GAC9B8qC,EAAkB,QAAQ;AAAA,IAC5B,GAEMiB,IAAkB9kE,EAAS,MACxBirC,EAAkB,mBAAmBrrC,EAAM,QAAQ,CAC3D,GAEKmlE,KAAsB/kE,EAAS,MAC5BirC,EAAkB,uBAAuBrrC,EAAM,QAAQ,CAC/D,GAEKolE,KAAchlE,EAAS,MACpB8kE,EAAgB,QAAQC,GAAoB,KACpD,GAEKja,KAAS,YAAY;AACzB,UAAIl1C,EAAM,MAAM,WAAW;AAC3B,YAAI;AACF,gBAAMoX,GAAyBvE,GAAW7S,EAAM,KAAK,GACrDxN,EAAc,SAAS;AAAA,QACzB,SAASK,IAAO;AACd,UAAAJ,EAAkBI,EAAK;AAAA,QACzB;AAAA,IACF,GAEMu7D,KAAiB,YAAY;AACjC,UAAIpuD,EAAM,MAAM,WAAW,EAAG;AAC9B,UAAIqvD,KAAc,IACdntC,KAAS;AACb,UAAI;AACF,cAAMotC,KAAoB,MAAMl4C,GAAyBvE,GAAW7S,EAAM,OAAOmjB,EAAiB,iBAAiB;AACnH,YAAI,CAACmsC,GAAkB,CAAC;AACtB,gBAAM,IAAI,MAAM,qCAAqC;AAEvD,QAAA98D,EAAc,SAAS,GACnBmE,GAAS24D,GAAkB,CAAC,EAAE,YAAY,WAAW,MACvDD,KAAcC,GAAkB,CAAC,EAAE,WAAW,YAAY,KAAA,IAExDA,GAAkB,CAAC,EAAE,QAAQ,SAAS,MAExCptC,MADmB,MAAM3B,GAAqB1N,GAAW7oB,EAAM,WAAWslE,GAAkB,CAAC,EAAE,OAAO,GAClF,IAAI,CAACxuC,OAAWA,GAAO,IAAI,EAAE,KAAK,IAAI,IAE5Dn1B;AAAA,UACE;AAAA,UACAqU,EAAM,MAAM,IAAI,CAACrS,QACR;AAAA,YACL,OAAO;AAAA,cACL,aAAA0hE;AAAA,cACA,QAAAntC;AAAA,YAAA;AAAA,YAEF,OAAO;AAAA,cACL,YAAY;AAAA,YAAA;AAAA,YAEd,KAAK;AAAA,cACH,OAAOv0B,GAAK,UAAU;AAAA,cACtB,gBAAgB;AAAA,cAChB,WAAW3D,EAAM;AAAA,YAAA;AAAA,YAEnB,UAAU;AAAA,UAAA,EAEb;AAAA,QAAA,GAGH,MAAMilE,EAAA;AAAA,MACR,SAASp8D,IAAO;AACd,QAAAJ,EAAkBI,EAAK;AAAA,MACzB;AAAA,IACF;AAEA,WAAAhG;AAAA,MACE6hE;AAAA,MACA,OAAO5hE,OAAa;AAClB,YAAI,GAACA,MAAY,CAACa,EAAK,OAAO;AAC9B,cAAI;AACF,kBAAMiF,KAAM,MAAMokB,GAAWnE,GAAWllB,EAAK,MAAM,OAAO;AAC1D,YAAAw1B,EAAiB,SAASvwB,EAAG,GAC7B67D,EAAa,QAAQ;AAAA,UACvB,SAAS5sD,IAAG;AACV,YAAApP,EAAkBoP,EAAC;AAAA,UACrB;AAAA,MACF;AAAA,MACA,EAAE,WAAW,GAAA;AAAA,IAAK,GAGpBvO,GAAU,MAAM;AACd,MAAA2pB,EAAU,QAAQL,GAA2B;AAAA,IAC/C,CAAC,qBAICryB,EAsKUwI,IAAA;AAAA,MArKP,eAAa;AAAA,MACd,YAAA;AAAA,MACA,OAAA;AAAA,IAAA;iBAEA,MAGE;AAAA,QAFMjE,EAAAuQ,CAAA,MAAY1R,EAAA,cADpBpD,EAGEsjE,IAAA;AAAA;UADC,eAAcoB;AAAA,QAAA,MAGJthE,EAAA,cADbpD,EA4JQgB,IAAA;AAAA;UA1JN,OAAKsD,GAAA,CAAC,oBAAkB,EAAA,oCACsB0+D,EAAA,OAAO,CAAA;AAAA,QAAA;qBAErD,MAsJM;AAAA,YAtJNtiE,EAsJM,OAtJNE,IAsJM;AAAA,cArJJN,EA+CW+lB,IAAA;AAAA,gBA9CR,OAAO9hB,EAAAkd,CAAA;AAAA,gBACR,SAAQ;AAAA,gBACP,QAAQ;AAAA,gBACT,OAAM;AAAA,cAAA;2BAEN,MAaM;AAAA,kBAbN/gB,EAaM,OAbNgF,IAaM;AAAA,oBAXIm/D,GAAA,cADR1kE,EAKM,OALN6F,IAKMrF,EADD4D,EAAA7B,CAAA,EAAC,8BAAA,CAAA,GAAA,CAAA,WAENvC,EAKM,OALN8F,IAKMtF,EADD4D,EAAA7B,CAAA,EAAC,kCAAA,CAAA,GAAA,CAAA;AAAA,kBAAA;kBAGRpC,EAAWsI,EAAA;AAAA,kBACXlI,EAyBM,OAzBNwF,IAyBM;AAAA,oBAxBJ5F,EAiBOyF,IAAA;AAAA,sBAhBJ,QAAQi9D,EAAA;AAAA,sBACR,SAASA,EAAA,QAAO,SAAA;AAAA,sBAChB,OAAOA,EAAA,QAAO,cAAA;AAAA,sBACf,MAAA;AAAA,sBACA,OAAM;AAAA,sBACL,OAAO;AAAA,sBACP,QAAQ;AAAA,sBACR,WAAY/e,GAAa,CAAA,MAAA,CAAA;AAAA,oBAAA;iCAE1B,MAAwC;AAAA,wBAAxC3jD,EAAwCE,IAAA,EAAjC,MAAK,2BAAyB;AAAA,wBACrCF,EAKWmG,IAAA;AAAA,0BAJT,WAAU;AAAA,0BACV,UAAS;AAAA,wBAAA;qCAET,MAAkD;AAAA,gCAA/ClC,EAAA7B,CAAA,EAAC,yCAAA,CAAA,GAAA,CAAA;AAAA,0BAAA;;;;;;oBAGRpC,EAKE0kE,IAAA;AAAA,sBAJA,WAAQ;AAAA,sBACP,eAAa;AAAA,sBACb,gBAAcH,GAAA;AAAA,sBACd,WAASH;AAAA,oBAAA;;;;;cAIhBhkE,EAoGM,OApGNyF,IAoGM;AAAA,gBAnGJzF,EA8DM,OA9DNg9B,IA8DM;AAAA,kBA5DIn5B,EAAAmuB,CAAA,MAAcnuB,EAAA8tB,EAAA,EAA2B,OAAO6xC,EAAA,SADxDhkE,EAAA,GAAAC,EAKM,OALNw9B,IAKM;AAAA,oBADJr9B,EAAkDijE,IAAA,EAAzB,cAAY7jE,EAAA,UAAA,GAAS,MAAA,GAAA,CAAA,YAAA,CAAA;AAAA,kBAAA,OAEhDQ,EAAA,GAAAC,EAsDM,OAtDNk+C,IAsDM;AAAA,oBAlDJ39C,EAiDM,OAjDN2jD,IAiDM;AAAA,sBA/CIjhD,EAAA,cADRpD,EAgBEwjE,IAAA;AAAA;wBAdC,cAAYh7C,EAAA;AAAA,wBACZ,gBAAcoR,EAAA;AAAA,wBACd,KAAKC,EAAA,MAAgB;AAAA,wBACrB,oBAAkBA,EAAA,MAAgB;AAAA,wBAClC,OAAOA,EAAA,MAAgB;AAAA,wBACvB,QAAQA,EAAA,MAAgB;AAAA,wBACxB,kBAAgB2qC,EAAA;AAAA,wBAChB,mBAAiBH,EAAA;AAAA,wBACjB,gBAAcC,EAAA;AAAA,wBACd,aAAWC,EAAA;AAAA,wBACX,sBAAoBE,EAAA;AAAA,wBACpB,kBAAgBrhE,EAAA,MAAK,SAAS;AAAA,wBAC/B,iBAAA;AAAA,wBACC,gBAAc4gE;AAAAA,sBAAA;sBAGT5gE,EAAA,SAAQA,EAAA,MAAK,MAAM,YAD3BlD,KAAAC,EA8BM,OA9BNqkD,IA8BM;AAAA,wBAvBJlkD,EAKEE,IAAA;AAAA,0BAJA,MAAK;AAAA,0BACL,OAAM;AAAA,0BACN,MAAK;AAAA,0BACL,OAAM;AAAA,wBAAA;wBAERE,EAEM,OAFNukE,IAEMtkE,EADD4D,EAAA7B,CAAA,EAAC,iCAAA,CAAA,GAAA,CAAA;AAAA,wBAGEU,EAAA,SAAQA,EAAA,MAAK,MAAM,QAAQ,eADnCjD,EAIE,OAAA;AAAA;0BAFA,OAAM;AAAA,0BACN,aAAAQ,EAAQyC,EAAmB,MAAd,MAAM,OAAO;AAAA,wBAAA,mBAEZA,EAAA,MAAK,MAAM,wBAAwBmB,EAAA89B,EAAA,EAAoB,aAAvEliC,EAEM,OAAAqpD,IAAA;AAAA,0BADJlpD,EAAoEypD,IAAA;AAAA,4BAA1C,QAAQ3mD,EAAA,MAAK,MAAM;AAAA,0BAAA;oCAE/CjD,EAKM,OALNspD,IAKM9oD,EADD4D,EAAA7B,CAAA,EAAC,2CAAA,CAAA,GAAA,CAAA;AAAA,sBAAA;;;;gBAMdhC,EAmCM,OAnCNgpD,IAmCM;AAAA,kBAjCIz7B,EAAA,cADRjuB,EAiCiCklE,IAAA;AAAA,oBA/B9B,KAAKj3C,EAAA,MAAM;AAAA,oBACX,aAAWvuB,EAAA;AAAA,oBACX,cAAYA,EAAA;AAAA,oBACZ,kBAAgBwkE,EAAA;AAAA,oBAChB,kBAAgBA,EAAA;AAAA,oBAChB,YAAUj2C,EAAA,MAAM;AAAA,oBAChB,YAAUi1C,EAAA;AAAA,oBACV,YAAUC,EAAA;AAAA,oBACV,YAAU5mB,EAAA;AAAA,oBACV,eAAa6mB,EAAA;AAAA,oBACb,gBAAcxpC,EAAA;AAAA,oBACd,cAAYpR,EAAA;AAAA,oBACZ,0BAAwBg0B,UAAgBA,EAAA,MAAc,eAAe,SAAS;AAAA,oBAC9E,+BAA6BA,UAAgBA,EAAA,MAAc,eAAe,aAAa;AAAA,oBACvF,UAASmO;AAAA,oBACT,kBAAmBkZ;AAAA,kBAAA;oBAET,qBACT,MAKM;AAAA,sBAJEzgE,EAAA,OAAM,oBADdjD,EAKM,OALNglE,IAKMxkE,EADD4D,EAAA7B,CAAA,EAAC,oDAAA,CAAA,GAAA,CAAA;sBAGEU,EAAA,OAAM,eAAeA,EAAA,OAAM,0BADnCjD,EAKM,OALNilE,IAKMzkE,EADD4D,EAAA7B,CAAA,EAAC,+CAAA,CAAA,GAAA,CAAA;;;;;;;;;;;;;;iCCnahB2iE,KAAwB;;;;;;;;;;;;;AA1B9B,UAAM5lE,IAAQC,GAqBR0B,IAAOC,GAOPikE,IAAW/jE,EAAkC,MAAS,GAEtDgkE,IAAoBhkE,EAAI9B,EAAM,gBAAgB,CAAC,GAC/C+lE,IAAmBjkE,EAAI,EAAK,GAE5BkkE,IAAa,MAAM;AACvB,MAAID,EAAiB,UAAU,OAG/BA,EAAiB,QAAQ,IACzBF,EAAS,OAAO,MAAA,GAChB,WAAW,MAAM;AACf,QAAAE,EAAiB,QAAQ;AAAA,MAC3B,GAAGH,EAAqB;AAAA,IAC1B,GAGM,EAAE,sBAAA/f,EAAA,IAAyBL,GAAsBxlD,EAAM,QAAQA,EAAM,QAAQ,GAE7EimE,IAAe,CAAChuB,MAAkB;AACtC,UAAI,CAACj4C,EAAM,YAAYi4C,EAAM,SAAS,GAAG;AACvC,cAAMiuB,IAAUrgB,EAAqB,CAAC5N,EAAM,CAAC,CAAC,CAAC;AAC/C,QAAAt2C,EAAK,cAAcukE,CAAO;AAC1B;AAAA,MACF;AACA,YAAMA,IAAUrgB,EAAqB5N,CAAK;AAC1C,MAAAt2C,EAAK,cAAcukE,CAAO;AAAA,IAC5B,GAEMC,IAAiB,CAACluB,MAAkB;AACxC,MAAAguB,EAAahuB,CAAK;AAAA,IACpB,GAEMmuB,IAAoB,CAACC,MAAmB;AAC5C,YAAM7hE,IAAQ6hE;AACd,MAAA1kE,EAAK,UAAU6C,CAAK,GACpByhE,EAAa,MAAM,KAAKzhE,EAAM,QAAQ,SAAS,CAAA,CAAE,CAAC;AAAA,IACpD,GAEM8hE,IAAsB,MAAM;AAChC,UAAI,CAAAtxC,GAAUh1B,EAAM,uBAAuB,GAG3C;AAAA,YAAI6D,EAAY7D,EAAM,uBAAuB,GAAG;AAC9C,UAAAgmE,EAAA;AACA;AAAA,QACF;AACA,QAAAhmE,EAAM,wBAAA;AAAA;AAAA,IACR;AAEA,WAAA6C;AAAA,MACE,MAAM7C,EAAM;AAAA,MACZ,CAAC8C,GAAU6C,MAAa;AACtB,QAAI7C,MAAa6C,KAAY9B,EAAYf,CAAQ,MAGjDgjE,EAAkB,QAAQhjE;AAAA,MAC5B;AAAA,IAAA,GAGFuB,EAAa;AAAA,MACX,UAAU2hE;AAAA,IAAA,CACX;MAKS/lE,EAAA,oBADRM,EAKEgmE,IAAA;AAAA;QAHC,SAAStmE,EAAA;AAAA,QACT,WAAUqmE;AAAA,QACV,UAASH;AAAA,MAAA,4BAEZ1kE,GAIEC,EAAA,QAAA,aAAA;AAAA;QADC,OAAK,EAAA,SAAakW,EAAa,MAAOouD,KAAU,CAAA,MAAA,CAAA,EAAA;AAAA,MAAA;YAEnDtlE,EASC,SAAA;AAAA,iBARK;AAAA,QAAJ,KAAImlE;AAAA,QACH,KAAKC,EAAA;AAAA,QACL,QAAQ7lE,EAAA;AAAA,QACR,UAAUA,EAAA;AAAA,QACX,QAAA;AAAA,QACA,UAAS;AAAA,QACT,MAAK;AAAA,QACJ,UAAQmmE;AAAA,MAAA;;;;;;;;;;;;;;;;;AC9Fb,UAAMzkE,IAAOC,GAKPoG,IAAaC,GAAoBhI,GAAA,YAAoC,GAErEmI,IAAU,MAAM;AACpB,MAAAJ,EAAW,QAAQ;AAAA,IACrB,GAEM,EAAE,GAAA/E,EAAA,IAAM/C,EAAA,GAERsmE,IAAqB1kE,EAA4C,IAAI,GAErE2kE,IAAe,CAACxuB,MAAkB;AACtC,MAAAt2C,EAAK,cAAcs2C,CAAK,GACxBjwC,EAAW,QAAQ;AAAA,IACrB;AAMA,WAAA3D,EAAa;AAAA,MACX,UALe,MAAM;AACrB,QAAAmiE,EAAmB,OAAO,SAAA;AAAA,MAC5B;AAAA,IAGE,CACD;;kBAICjmE,EAkDUwI,IAAA;AAAA,QAjDP,eAAaf,EAAA;AAAA,QACd,YAAA;AAAA,QACC,aAAW;AAAA,QACX,uBAAkBzD,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAE,MAAEuD,EAAA,QAAavD;AAAA,MAAA;QAEvB,WAAS7D,EAClB,CAQO,EAAA,OATsB8lE,QAAW;AAAA,UACxCjlE,GAQOC,EAAA,QAAA,aAAA,EANJ,OAAOglE,EAAA,GAFV,MAQO;AAAA,YAJL7lE,EAGEyF,IAHFuM,GAGE6zD,GAFmB;AAAA,cAClB,MAAM5hE,EAAA7B,CAAA,EAAC,oBAAA;AAAA,YAAA;;;mBAId,MAgCQ;AAAA,UA/BA+E,EAAA,cADRzH,EAgCQgB,IAAA;AAAA;YA9BN,WAAQ;AAAA,UAAA;uBAER,MAIiB;AAAA,cAJjBV,EAIiBmI,IAAA,EAJA,YAAWZ,KAAO;AAAA,2BACjC,MAEO;AAAA,kBAFP3G,GAEOC,uBAFP,MAEO;AAAA,oBADFwE,EAAAhF,EAAA4D,EAAA7B,CAAA,EAAEhD,EAAA,QAAQ,CAAA,GAAA,CAAA;AAAA,kBAAA;;;;cAGjBY,EAaYoI,IAAA,MAAA;AAAA,2BAZV,MAWO;AAAA,kBAXPpI,EAWO+I,IAAA,MAAA;AAAA,+BAVL,MASE;AAAA,sBATF/I,EASE8lE,IAAA;AAAA,wBARA,KAAI;AAAA,wBACH,kBAAgB1mE,EAAA;AAAA,wBAChB,QAAQA,EAAA;AAAA,wBACR,aAAWA,EAAA;AAAA,wBACX,UAAUA,EAAA;AAAA,wBACX,gBAAA;AAAA,wBACC,cAAAwmE;AAAA,wBACA,UAAMliE,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAE,MAAE9C,EAAI,UAAW8C,CAAM;AAAA,sBAAA;;;;;;;cAIpC5D,EAQeqI,IAAA,MAAA;AAAA,2BAPb,MAAW;AAAA,kBAAXrI,EAAWsI,EAAA;AAAA,kBACXtI,EAKeuI,GAAA;AAAA,oBAJb,WAAQ;AAAA,oBACP,WAAYhB,GAAO,CAAA,MAAA,CAAA;AAAA,kBAAA;+BAEpB,MAA8B;AAAA,0BAA3BtD,EAAA7B,CAAA,EAAC,qBAAA,CAAA,GAAA,CAAA;AAAA,oBAAA;;;;;;;;;;;;;;ICjGD2jE,KACX,OAAO,IAAI,8BAA8B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC6C3C,UAAM5mE,IAAQC,GA8CR0B,IAAOC,GAIPoG,IAAaC,GAA8BhI,GAAA,YAAmB,GAC9D4mE,IAA2B/kE,EAAI,EAAK,GAGpC,EAAE,eAAAC,EAAA,IAAkBC,GAAA,GAEpBC,IAAmBH,EAAI,CAACI,IAAuBE,OAA8C;AAAA,IAAC,CAAC,GAE/FD,IAAmBL,EAAI,CAACM,OAA8C;AAAA,IAAC,CAAC,GACxEC,IAAoBP,EAAuB,IAAI;AAErD,QAAIC,EAAc,MAAM,WAAWO,GAAUtC,EAAM,MAAM,GAAG;AAC1D,YAAM,EAAE,wBAAAuC,IAAwB,wBAAAC,IAAwB,kCAAAC,IAAkC,cAAAE,GAAA,IACxFC,GAAe5C,EAAM,OAAO,MAAMA,EAAM,OAAO,KAAK;AACtD,MAAAiC,EAAiB,QAAQM,IACzBJ,EAAiB,QAAQK,IACzBK;AAAA,QACEF;AAAA,QACA,CAACG,OAAa;AACZ,UAAAT,EAAkB,QAAQS;AAAA,QAC5B;AAAA,QACA,EAAE,WAAW,GAAA;AAAA,MAAK,GAMpBL,GAAiC,CAACP,OAAuC;AACvE,QAAIA,GAAK,WAAWa,GAAsB,WAAWb,GAAK,SAASc,GAAoB,UACrF8jE,GAA4B,QAAQ,KAC3B5kE,GAAK,WAAWa,GAAsB,WAAWb,GAAK,SAASc,GAAoB,WAEnFd,GAAK,WAAWa,GAAsB,WAAWb,GAAK,SAASc,GAAoB,UAD5F8jE,GAA4B,QAAQ,KAG3B5kE,GAAK,WAAWa,GAAsB,WAAWb,GAAK,SAASc,GAAoB,YAC5F8jE,GAA4B,QAAQ;AAAA,MAExC,CAAC;AAAA,IACH;AACA,UAAMC,IAAcjlE,EAAI,EAAK,GACvBklE,IAAwB,MAAM;AAClC,MAAID,EAAY,UAAU,MAAQ/mE,EAAM,iBAAiB4d,GAAa,aACtEzb,EAAiB,MAAA,GACjB4kE,EAAY,QAAQ;AAAA,IACtB,GACME,IAAwB,CAAC57D,OAA6B;AAC1D,MAAI07D,EAAY,UAAU,MAAS/mE,EAAM,iBAAiB4d,GAAa,aACvE3b,EAAiB,MAAMoJ,EAAK,GAC5B07D,EAAY,QAAQ;AAAA,IACtB,GAEMG,IAA0B/jE;AAAA,MAC9ByjE;AAAA,MACA;AAAA,IAAA;AAGF,QAAI/iE,EAAYqjE,CAAuB,KAAKrjE,EAAYqjE,EAAwB,KAAK;AACnF,YAAM,IAAI,MAAM,mFAAmF;AAGrG,UAAM,EAAE,GAAAjkE,EAAA,IAAM/C,EAAA,GAER,EAAE,mBAAAuI,GAAmB,WAAA0+D,GAAW,YAAAjpD,EAAA,IAAexV,GAAA,GAG/Cg+C,IAAeE,GAA2B5mD,EAAM,UAAU,GAC1D,EAAE,aAAA+nD,MAAgBrB,GAClB,EAAE,0BAAAsB,EAAA,IAA6BnB,GAAgBH,CAAY,GAC3Drb,IAAoBC,GAAA,GACpBod,IAAwBnjB,GAAA,GACxB,EAAE,QAAAC,EAAA,IAAWtM,GAAYwvB,CAAqB,GAC9C,EAAE,mBAAAub,EAAA,IAAsBE,GAAA,GAExBlc,IAAWnmD,EAAmC,IAAI,GAClDslE,IAAkBtlE,EAAI,EAAK,GAC3BulE,IAAoBvlE,EAAI,EAAK,GAC7BwlE,IAAiBxlE,EAAI,EAAK,GAC1BylE,IAAuBzlE,EAAI,EAAK,GAChC0lE,IAAwB1lE,EAAI,EAAK,GACjC2lE,IAAkB3lE,EAAI,EAAK,GAE3B4lE,IAAetnE,EAAS,MACrBmF,GAAOyC,EAAW,KAAK,CAC/B,GAEKkgD,IAAcpmD,EAAI,EAAE,GAEpB6lE,IAAcvnE,EAAS,MACpBirC,EAAkB,SAASrrC,EAAM,QAAQ,CACjD,GAEK4nE,IAAcxnE,EAAS,MACpB,CAACmF,GAAO0iD,EAAS,KAAK,CAC9B,GAEK4f,IAAiB,MAAM;AAC3B,MAAAnf,EAAsB,UAAU12B,GAAMi2B,EAAS,KAAK,CAAC,GACrDqf,EAAe,QAAQ;AAAA,IACzB,GAEMQ,KAAgB,MAAM;AAC1B,MAAAT,EAAkB,QAAQ;AAAA,IAC5B,GAEM,EAAE,mBAAAzwC,GAAA,IAAsBC,GAAA,GAGxBiwC,KAA8BhlE,EAAI,EAAK,GAEvCimE,KAAmC,YAAY;AACnD,UAAI,CAAChmE,EAAc,MAAM,WAAW8B,EAAY7D,EAAM,MAAM,KAAKA,EAAM,iBAAiB4d,GAAa;AACnG,eAAO,QAAQ,QAAQ,EAAI;AAG7B,UAAIzJ,KAAQ;AAEZ,YAAM6zD,KAA6C,MAC7ClB,GAA4B,QACvB,QAAQ,QAAQ,EAAI,KAG7B3yD,MACIA,KAAQ,KACH,IAAI,QAAQ,CAACsI,OAAY,WAAW,MAAMA,GAAQurD,GAAA,CAAW,GAAG,GAAG,CAAC,IAGtE,QAAQ,OAAO,EAAK;AAG7B,aAAOA,GAAA;AAAA,IACT,GAEMzhB,KAAS,OAAOtO,OAAkB;AACtC,MAAA+uB,EAAA;AACA,YAAM39D,KAAS69D,EAAwB;AACvC,UAAIrjE,CAAAA,EAAYwF,EAAM;AACtB,YAAI;AACF,gBAAM0+D,GAAA,GACNnxC,GAAkB,QAAQvtB,GAAO,WACjCgiC,EAAkB,WAAWrrC,EAAM,UAAUqJ,GAAO,WAAWA,GAAO,SAAS4uC,EAAK,GACpFgsB,EAAkB,QAAQjkE,EAAM;AAAA,QAClC,QAAY;AACV,UAAAmnE,EAAU,8CAA8C;AAAA,QAC1D;AAAA,IACF,GAEMc,KAAkB,CAAC/lE,OAAwC;AAC/D,UAAI,CAACA,GAAK,CAAC,EAAG;AACd,YAAMmH,KAAS69D,EAAwB;AACvC,UAAIrjE,CAAAA,EAAYwF,EAAM,GAEtB;AAAA,YADAutB,GAAkB,QAAQvtB,GAAO,WAC7BnH,GAAK,CAAC,EAAE,WAAW;AACrB,UAAAmpC,EAAkB,mBAAmBrrC,EAAM,UAAUqJ,GAAO,WAAWA,GAAO,SAAS,CAACnH,GAAK,CAAC,EAAE,WAAW,CAAC;AAAA,iBACnGA,GAAK,CAAC,EAAE,WAAW;AAC5B,UAAAmpC,EAAkB,mBAAmBrrC,EAAM,UAAUqJ,GAAO,WAAWA,GAAO,SAAS,CAACnH,GAAK,CAAC,EAAE,WAAW,CAAC,GAC5GmpC,EAAkB,mBAAmBnpC,GAAK,CAAC,EAAE,aAAaA,GAAK,CAAC,EAAE,gBAAgBqmB,GAAa,KAAK;AAAA,aAC/F;AACL,UAAArK,EAAW,+CAA+C;AAC1D;AAAA,QACF;AACA,QAAA+lD,EAAkB,QAAQjkE,EAAM;AAAA;AAAA,IAClC,GAEMkoE,KAAc,CAACjwB,OAAkB;AACrC,YAAM5uC,KAAS69D,EAAwB;AACvC,MAAIrjE,EAAYwF,EAAM,MACtButB,GAAkB,QAAQvtB,GAAO,WACjCgiC,EAAkB,WAAWrrC,EAAM,UAAUqJ,GAAO,WAAWA,GAAO,SAAS4uC,EAAK,GACpFgsB,EAAkB,QAAQjkE,EAAM;AAAA,IAClC,GAEM,EAAE,aAAAknD,IAAa,cAAAC,GAAA,IAAiBH;AAAA,MACpCz+B,GAAa;AAAA,MACb2+C,EAAwB,MAAM;AAAA,IAAA,GAG1BiB,KAAS,OAAO/f,IAA8CC,IAA+B+f,KAAQ,OAAU;AAEnH,UADAlgB,EAAY,QAAQ5tB,IACf8tB,MAAY7iD,GAAO0iD,EAAS,KAAK,KAAOG,MAAYggB,IAAQ;AAC/D,QAAAngB,EAAS,QAAQhjD,GAAUmjD,EAAQ,GAC/BH,EAAS,UACP7jD,GAASpE,EAAM,QAAQ,KAAKoE,GAASpE,EAAM,SAAS,IACtDkoD,EAAY,QAAQF,EAAyBh2B,GAAMi2B,EAAS,KAAK,GAAGjoD,EAAM,UAAUA,EAAM,SAAS,IAEnGkoD,EAAY,QAAQF,EAAyBh2B,GAAMi2B,EAAS,KAAK,CAAC,GAEhEjoD,EAAM,kBACR0oD,EAAsB,UAAU12B,GAAMi2B,EAAS,KAAK,CAAC;AAGzD;AAAA,MACF;AACA,UAAII,IAAY;AACd,YAAI;AACF,UAAAJ,EAAS,QAAQ,MAAMX,GAAWS,GAAaM,EAAU;AAAA,QAC3D,SAASx/C,IAAO;AACd,UAAAJ,EAAkBI,EAAK;AAAA,QACzB;AACA,QAAKtD,GAAO0iD,EAAS,KAAK,MACpB7jD,GAASpE,EAAM,QAAQ,KAAKoE,GAASpE,EAAM,SAAS,IACtDkoD,EAAY,QAAQF,EAAyBh2B,GAAMi2B,EAAS,KAAK,GAAGjoD,EAAM,UAAUA,EAAM,SAAS,IAEnGkoD,EAAY,QAAQF,EAAyBh2B,GAAMi2B,EAAS,KAAK,CAAC,GAEhEjoD,EAAM,kBACR0oD,EAAsB,UAAU12B,GAAMi2B,EAAS,KAAK,CAAC;AAGzD;AAAA,MACF;AACA,MAAAA,EAAS,QAAQ;AAAA,IACnB,GAEM/4C,KAAQ,MAAM;AAClB,MAAAg5C,EAAY,QAAQ5tB,IACpB2tB,EAAS,QAAQ,MACjBjgD,EAAW,QAAQ,MACnB/F,EAAiB,MAAM,IAAI;AAAA,IAC7B;AAEA,IAAAY;AAAA,MACE,CAAC,MAAM7C,EAAM,OAAOgI,CAAU;AAAA,MAC9B,OAAO,CAACogD,IAAUC,EAAU,MAAM;AAChC,cAAM8f,GAAO/f,IAAUC,EAAU;AAAA,MACnC;AAAA,MACA,EAAE,WAAW,GAAA;AAAA,IAAK;AAGpB,UAAMpvB,KAAmBrJ,GAAA,GAEnBy4C,KAAuB,OAAOnmE,OAAgC;AAClE,MAAAslE,EAAsB,QAAQ,IAC9B9e,EAAsB,UAAU,IAAI,GACpCme,EAAyB,QAAQ;AACjC,UAAIxB,KAAc,IACdntC,KAAS;AACb,UAAIh2B,GAAK,SAAS,SAAS;AACzB,YAAI,CAACA,GAAK,MAAM,CAAC,KAAK,CAACA,GAAK,MAAM,CAAC,EAAE,SAAU;AAC/C,YAAI,CAAC2B,EAAY3B,GAAK,aAAa,GAAG;AACpC,cAAI;AACF,kBAAMomE,KAAU,MAAMp2C,GAAcrJ,IAAW;AAAA,cAC7C,EAAE,OAAO3mB,GAAK,MAAM,CAAC,EAAE,IAAI,oBAAoBA,GAAK,cAAA;AAAA,YAAc,CACnE;AACD,YAAA+lE,GAAgBK,EAAO;AAAA,UACzB,SAASzwD,IAAG;AACV,YAAApP,EAAkBoP,EAAC;AAAA,UACrB,UAAA;AACE,YAAA2vD,EAAsB,QAAQ;AAAA,UAChC;AACA;AAAA,QACF;AACA,QAAAF,EAAe,QAAQ;AACvB,YAAI;AACF,gBAAMzuB,KAAW,MAAM7rB,GAAWnE,IAAW3mB,GAAK,MAAM,CAAC,EAAE,EAAE;AAC7D,UAAIyK,GAASksC,GAAS,SAAS,YAAY,WAAW,MACpDwsB,KAAcxsB,GAAS,SAAS,WAAW,YAAY,KAAA,IAErDA,GAAS,QAAQ,SAAS,IAM5B3gB,MALmB,MAAM3B;AAAA,YACvB1N;AAAA,YACAoQ,GAAiB,qBAAqB;AAAA,YACtC4f,GAAS;AAAA,UAAA,GAES,IAAI,CAAC/hB,OAAWA,GAAO,IAAI,EAAE,KAAK,IAAI,IACjD+hB,GAAS,QAAQ,WAAW,MACrCguB,EAAyB,QAAQ,IACjCr4C,GAAM,QAAQqqB;AAAA,QAElB,SAAShhC,IAAG;AACV,UAAApP,EAAkBoP,EAAC;AAAA,QACrB;AACA,cAAMiuB,KAAgC;AAAA,UACpC,OAAO;AAAA,YACL,aAAAu/B;AAAA,YACA,QAAAntC;AAAA,UAAA;AAAA,UAEF,OAAO;AAAA,YACL,YAAY;AAAA,UAAA;AAAA,UAEd,KAAK;AAAA,YACH,OAAOh2B,GAAK,MAAM,CAAC,EAAE,SAAS;AAAA,YAC9B,gBAAgB;AAAA,YAChB,WAAWA,GAAK,MAAM,CAAC,EAAE;AAAA,UAAA;AAAA,UAE3B,UAAU;AAAA,QAAA;AAEZ,QAAKqD,GAAOyC,EAAW,KAAK,MAC1B89B,GAAM,KAAK99B,EAAW,QAExB0gD,EAAsB,UAAU5iB,EAAK,GACrC0hC,EAAsB,QAAQ,IAC1BxnE,EAAM,kBACRuoE,GAAA;AAAA,MAEJ;AAAA,IACF,GAEMpvC,KAAmBrG,GAAA,GACnB,EAAE,SAAS01C,IAAc,QAAQC,IAAa,OAAAj6C,GAAA,IAAU0K,GAAYC,EAAgB,GACpF,EAAE,WAAAtQ,GAAA,IAAc4J,GAAA,GAEhBq2B,KAAc,OAAO37B,OAAuB;AAChD,MAAAq7C,GAAa,QAAQ,IACrBC,GAAY,QAAQzoE,EAAM;AAC1B,UAAI;AACF,cAAM64C,KAAW,MAAM3rB,GAAmBrE,IAAWsE,EAAW,GAC1Df,KAAU,MAAM1D,GAAqBG,IAAWgwB,GAAS,OAAO;AACtE,QAAIzsB,GAAQ,cACVwK,GAAkB,QAAQxK,GAAQ,YAEpC+M,GAAiB,SAAS0f,EAAQ;AAAA,MACpC,SAAShhC,IAAG;AACV,QAAApP,EAAkBoP,EAAC;AAAA,MACrB,UAAA;AACE,QAAA2wD,GAAa,QAAQ;AAAA,MACvB;AAAA,IACF,GAEME,KAAwB,MAAM;AAClC,MAAAhgB,EAAsB,UAAU,IAAI,GACpC4e,EAAe,QAAQ;AAAA,IACzB,GAEMqB,KAA0B,YAAY;AAC1C,UAAKrjC,GAAyBE,EAAO,KAAK,GAC1C;AAAA,QAAA+hC,EAAqB,QAAQ;AAC7B,YAAI;AACF,cAAIV,EAAyB,SAASr4C,GAAM,SACtCA,GAAM,MAAM,QAAQ,SAAS,GAAG;AAClC,kBAAMo6C,KAAa,MAAMryC;AAAA,cACvB1N;AAAA,cACAoQ,GAAiB,qBAAqB;AAAA,cACtCzK,GAAM,MAAM;AAAA,YAAA;AAEd,YAAAgX,EAAO,MAAM,MAAM,SAASojC,GAAW,IAAI,CAAC9xC,OAAWA,GAAO,IAAI,EAAE,KAAK,IAAI,GAC7E,MAAM7H,GAAmBpG,IAAW2F,GAAM,OAAOyK,GAAiB,qBAAqB,SAAS,GAChG4tC,EAAyB,QAAQ;AAAA,UACnC;AAEF,gBAAMj+D,KAAM48B,EAAO,MAAM,KACrB,MAAMgiB,GAAYO,GAAaviB,EAAO,MAAM,IAAIA,EAAO,KAAK,IAC5D,MAAM+hB,GAAYQ,GAAaviB,EAAO,KAAK;AAC/C,UAAA8hC,EAAe,QAAQ,IACvBt/D,EAAW,QAAQY,GAAI,IACvB8/C,EAAsB,UAAU,IAAI,GACpC,MAAMyf,GAAOv/D,IAAKA,GAAI,IAAI,EAAI,GAC9BjH,EAAK,0BAA0B,GAC/BM,EAAiB,MAAM2G,GAAI,EAAE;AAAA,QAC/B,SAASiP,IAAG;AACV,UAAApP,EAAkBoP,EAAC;AAAA,QACrB,UAAA;AACE,UAAA0vD,EAAqB,QAAQ;AAAA,QAC/B;AAAA;AAAA,IACF,GAEMsB,KAAgB,YAAY;AAChC,UAAI,CAAAtjE,GAAOyC,EAAW,KAAK,GAC3B;AAAA,YAAIhI,EAAM,uBAAuB;AAC/B,cAAI;AACF,kBAAMynD,GAAYM,GAAa//C,EAAW,KAAK,GAC/CkH,GAAA;AAAA,UACF,SAAS2I,IAAG;AACV,YAAApP,EAAkBoP,EAAC;AAAA,UACrB;AACA;AAAA,QACF;AACA,QAAA3I,GAAA;AAAA;AAAA,IACF,GAEMq5D,KAAoC,MAAM;AAC9C,MAAKjjC,GAAyBE,EAAO,KAAK,KAC1C2iC,GAAO3iC,EAAO,OAAO,MAAM,EAAI;AAAA,IACjC,GAEMsjC,KAAuB,CAAC9yD,OAAoC;AAChE,MAAKA,GAAM,CAAC,MAEPzQ,GAAOyC,EAAW,KAAK,MAC1BgO,GAAM,CAAC,EAAE,KAAKhO,EAAW,QAE3B0gD,EAAsB,UAAU1yC,GAAM,CAAC,CAAC,GACxCsxD,EAAe,QAAQ,IACnBtnE,EAAM,kBACRuoE,GAAA;AAAA,IAEJ,GAEMQ,KAAuBjnE,EAAkD,IAAI,GAE7EknE,KAAkB,MAAM;AAC5B,UAAI,CAAAC,GAAS,OAEb;AAAA,YADAjC,EAAA,GACI,CAAChnE,EAAM,eAAe;AACxB,UAAAonE,EAAgB,QAAQ;AACxB;AAAA,QACF;AACA,QAAA2B,GAAqB,OAAO,SAAA;AAAA;AAAA,IAC9B,GAEMG,KAAgCpnE,EAA2D,IAAI,GAE/FqnE,KAAkB,MAAM;AAC5B,MAAAD,GAA8B,OAAO,QAAA;AAAA,IACvC,GAEME,KAAuB,MAAM;AACjC,MAAApC,EAAA;AAAA,IACF,GAEMqC,KAAwBjpE,EAAS,MAEnCknE,EAAe,SACfD,EAAkB,SAClBI,EAAgB,SAChBxD,EAAkB,UAAUjkE,EAAM,QAErC,GAEKipE,KAAW7oE,EAAS,MACjB,CAACmF,GAAOlD,EAAkB,KAAK,CACvC;AAED,WAAAQ;AAAA,MACEukE;AAAA,MACA,CAACtkE,IAAU6C,OAAa;AACtB,QAAI7C,OAAa6C,MAAY7C,MAAYumE,GAAsB,SAC/DpC,EAAsBj/D,EAAW,KAAK;AAAA,MACxC;AAAA,MACA,EAAE,WAAW,GAAA;AAAA,IAAM,GAGrBnF;AAAA,MACEwmE;AAAA,MACA,CAACvmE,IAAU6C,OAAa;AACtB,QAAI7C,OAAa6C,MAAY7C,MAC7BmkE,EAAsBj/D,EAAW,KAAK;AAAA,MACxC;AAAA,MACA,EAAE,WAAW,GAAA;AAAA,IAAM,GAGrBsB,GAAU,MAAM;AACd,MAAAo/C,EAAsB,MAAA;AAAA,IACxB,CAAC,GAEDrkD,EAAa;AAAA,MACX,iBAAA8kE;AAAA,IAAA,CACD;MAICloE,EA8KM,OAAA;AAAA,QA7KJ,OAAK4D,GAAA,CAAC,kBAAgB,EAAA,0BACcokE,GAAA,MAAA,CAAQ,CAAA;AAAA,QAC3C,OAAKntC,GAAA,EAAA,OAAW77B,EAAA,QAAQA,EAAA,QAAK,OAAU,QAAS,UAAYA,EAAA,WAAWA,EAAA,WAAQ,OAAU,QAAS;AAAA,MAAA;QAEnGgB,EA2HM,OA3HNE,IA2HM;AAAA,UAzHIlB,EAAA,SADRQ,EAAA,GAAAC,EASK,MATLuF,IASK;AAAA,gBALAhG,EAAA,KAAK,GAAA,CAAA;AAAA,YAEAA,EAAA,YADNQ,EAAA,GAAAC,EAGA,QAHA6F,EAGA;;UAEJtF,EA+GM,OA/GNuF,IA+GM;AAAA,YA9GOyiE,GAAA,SAAYhpE,EAAA,eAAvBS,EAKM,OAAA+F,IAAA;AAAA,cAJJ5F,EAGE6D,IAAA;AAAA,gBAFC,IAAIrC,EAAA;AAAA,gBACJ,OAAOpC,EAAA,OAAO;AAAA,cAAA;;YAGnBgB,EAuGM,OAAA,MAAA;AAAA,cArGIhB,EAAA,iBADRQ,EAAA,GAAAC,EAoCM,OApCNgG,IAoCM;AAAA,gBA/BIkhE,EAAA,UAAgB3nE,EAAA,uBADxBM,EAMO+F,IAAA;AAAA;kBAJL,OAAM;AAAA,kBACL,SAAOuhE;AAAA,gBAAA;6BAER,MAA0C;AAAA,wBAAvC/iE,EAAA7B,CAAA,EAAC,iCAAA,CAAA,GAAA,CAAA;AAAA,kBAAA;;;gBAENpC,EAMOyF,IAAA;AAAA,kBALL,OAAM;AAAA,kBACL,SAAOwhE;AAAA,gBAAA;6BAER,MAAsF;AAAA,oBAA1EF,EAAA,SAAZnnE,EAAA,GAAAC,EAAsF,cAA1DoE,EAAA7B,CAAA,EAAC,6CAAA,CAAA,GAAA,CAAA,MAC7BxC,EAAA,GAAAC,EAAsE,cAAtDoE,EAAA7B,CAAA,EAAC,yCAAA,CAAA,GAAA,CAAA;AAAA,kBAAA;;;gBAEnBpC,EAamByoE,IAAA;AAAA,2BAZb;AAAA,kBAAJ,KAAIP;AAAA,8BACKtB,EAAA;AAAA,mEAAAA,EAAe,QAAAhjE;AAAA,kBACvB,kBAAgBkjE,EAAA,OAAa;AAAA,kBAC7B,QAAQ7iE,EAAAqiD,EAAA;AAAA,kBACR,aAAWriD,EAAAoiD,EAAA;AAAA,kBACX,cAAaghB;AAAA,gBAAA;kBAEH,WAAStnE,EAClB,CAEO,EAAA,OAHsB2oE,SAAc;AAAA,oBAC3C1oE,EAEOyF,UAFOijE,EAAc,CAAA,GAAA;AAAA,iCAC1B,MAA8C;AAAA,4BAA3CzkE,EAAA7B,CAAA,EAAC,qCAAA,CAAA,GAAA,CAAA;AAAA,sBAAA;;;;;;gBAKFhD,EAAA,YADRQ,EAAA,GAAAC,EAGE,QAHFk+C,EAGE;0BAEJr+C,EAgEO+F,IAAA;AAAA;gBA9DL,SAAQ;AAAA,gBACR,MAAK;AAAA,gBACL,MAAA;AAAA,gBACC,UAAU2iE,GAAA;AAAA,gBACV,WAAYG,IAAoB,CAAA,MAAA,CAAA;AAAA,cAAA;2BAEjC,MAAoC;AAAA,kBAApCvoE,EAAoCE,IAAA,EAA7B,MAAK,uBAAqB;AAAA,kBACjCF,EAKWmG,IAAA;AAAA,oBAJT,WAAU;AAAA,oBACV,UAAS;AAAA,kBAAA;+BAET,MAA+C;AAAA,0BAA5ClC,EAAA7B,CAAA,EAAC,sCAAA,CAAA,GAAA,CAAA;AAAA,oBAAA;;;kBAENpC,EAgDQoG,IAAA;AAAA,gCA/CGmgE,EAAA;AAAA,qEAAAA,EAAe,QAAA3iE;AAAA,oBACxB,WAAU;AAAA,oBACV,UAAS;AAAA,oBACT,OAAA;AAAA,kBAAA;+BAEA,MAyCQ;AAAA,sBAzCR5D,EAyCQU,IAAA,MAAA;AAAA,mCAxCN,MAuCQ;AAAA,0BAvCRV,EAuCQqG,IAAA,EAvCD,SAAQ,aAAS;AAAA,uCACtB,MAKY;AAAA,8BAJJ0gE,EAAA,UAAgB3nE,EAAA,uBADxBM,EAKY4G,IAAA;AAAA;gCAHT,SAAO0gE;AAAA,8BAAA;2CAER,MAA2E;AAAA,kCAA3EhnE,EAA2EuG,IAAA,MAAA;AAAA,+CAA3D,MAA0C;AAAA,0CAAvCtC,EAAA7B,CAAA,EAAC,iCAAA,CAAA,GAAA,CAAA;AAAA,oCAAA;;;;;;8BAEtBpC,EAKYsG,IAAA,EALA,SAAO2gE,MAAa;AAAA,2CAC9B,MAGiB;AAAA,kCAHjBjnE,EAGiBuG,IAAA,MAAA;AAAA,+CAFf,MAAsF;AAAA,sCAA1EwgE,EAAA,SAAZnnE,EAAA,GAAAC,EAAsF,cAA1DoE,EAAA7B,CAAA,EAAC,6CAAA,CAAA,GAAA,CAAA,MAC7BxC,EAAA,GAAAC,EAAsE,cAAtDoE,EAAA7B,CAAA,EAAC,yCAAA,CAAA,GAAA,CAAA;AAAA,oCAAA;;;;;;8BAGrBpC,EAmBmByoE,IAAA;AAAA,4CAlBR7B,EAAA;AAAA,iFAAAA,EAAe,QAAAhjE;AAAA,gCACvB,kBAAgBkjE,EAAA,OAAa;AAAA,gCAC7B,QAAQ7iE,EAAAqiD,EAAA;AAAA,gCACR,aAAWriD,EAAAoiD,EAAA;AAAA,gCACX,cAAaghB;AAAA,8BAAA;gCAEH,WAAStnE,EAClB,CASY,EAAA,OAViB2oE,SAAc;AAAA,kCAC3C1oE,EASYsG,IAAA;AAAA,oCART,UAAmC1C,OAAW;AAAmC,sCAAA8kE,GAAe,QAAQ9kE,EAAM,GAA8B2iE,EAAA,QAAe;AAAA;;+CAO5J,MAA8C;AAAA,0CAA3CtiE,EAAA7B,CAAA,EAAC,qCAAA,CAAA,GAAA,CAAA;AAAA,oCAAA;;;;;;8BAKF2kE,EAAA,cADRrnE,EAKY4G,IAAA;AAAA;gCAHT,SAAO0hE;AAAA,8BAAA;2CAER,MAAoF;AAAA,kCAApFhoE,EAAoFuG,IAAA,MAAA;AAAA,+CAApE,MAAmD;AAAA,0CAAhDtC,EAAA7B,CAAA,EAAC,0CAAA,CAAA,GAAA,CAAA;AAAA,oCAAA;;;;;;;;;;;;;;;;;;;;;QASpChC,EA4BM,OA5BNukE,IA4BM;AAAA,UA3BJ3kE,EAiBOynD,IAAA;AAAA,YAhBJ,YAAUxjD,EAAAw1B,EAAA;AAAA,YACV,KAAK4tB,EAAA;AAAA,YACL,OAAOjoD,EAAA;AAAA,YACP,QAAQA,EAAA;AAAA,YACT,OAAA;AAAA,YACA,aAAU;AAAA,YACV,OAAM;AAAA,UAAA;YAEK,eACT,MAKM;AAAA,cALNgB,EAKM,OALN6oD,IAKM;AAAA,gBAJJjpD,EAGEO,IAAA;AAAA,kBAFA,eAAA;AAAA,kBACA,OAAM;AAAA,gBAAA;;;;;UAKdP,EAQE2oE,IAAA;AAAA,YAPA,SAAQ;AAAA,YACR,aAAA;AAAA,YACC,QAAQ1kE,EAAAqiD,EAAA;AAAA,YACR,aAAWriD,EAAAoiD,EAAA;AAAA,YACX,aAAS,CAAGwgB,EAAA,SAAgBuB,GAAA;AAAA,YAC5B,WAAUD;AAAA,YACV,UAASziB;AAAA,UAAA;;QAGd9kD,GAGEC,GAAA,QAAA,UAAA,EADC,OAAOumD,EAAA,OAAQ;AAAA,QAElBpnD,EAWE4oE,IAAA;AAAA,mBAVI;AAAA,UAAJ,KAAIP;AAAA,sBACK5B,EAAA;AAAA,2DAAAA,EAAc,QAAA7iE;AAAA,UACtB,oBAAkBoiE,EAAA;AAAA,UAClB,QAAQ5mE,EAAA;AAAA,UACR,QAAQsnE,EAAA;AAAA,UACR,SAASC,EAAA;AAAA,UACT,MAAM1iE,EAAAyjB,EAAA,EAAa;AAAA,UACnB,aAAAugC;AAAA,UACA,aAAY6f;AAAA,UACZ,WAAUD;AAAA,QAAA;;MAGf7nE,EASE6oE,IAAA;AAAA,oBARSrC,EAAA;AAAA,yDAAAA,EAAiB,QAAA5iE;AAAA,QACzB,mBAAiBxE,EAAA;AAAA,QACjB,kBAAgBA,EAAA;AAAA,QAChB,aAAW;AAAA,QACX,aAAW;AAAA,QACX,cAAY6E,EAAAyjB,EAAA,EAAa;AAAA,QAC1B,eAAY;AAAA,QACX,aAAY8/C;AAAA,MAAA;MAGPvjE,EAAA2jE,EAAA,MAAgBxoE,EAAA,iBADxBM,EAIEopE,IAAA;AAAA;QAFC,aAAW1pE,EAAA;AAAA,QACX,cAAY6E,EAAA8xB,EAAA;AAAA,MAAA;MAGP9xB,EAAAm/D,CAAA,MAAsBhkE,EAAA,YAAY6E,EAAAoiE,CAAA,UAD1C3mE,EASEqpE,IAAA;AAAA;QAPC,aAAW3pE,EAAA;AAAA,QACX,cAAY6E,EAAAoiE,CAAA,EAAwB;AAAA,QACpC,cAAYpiE,EAAAoiE,CAAA,EAAwB;AAAA,QACpC,kBAAgBS,EAAA,OAAa,gBAAY;AAAA,QACzC,QAAQ7iE,EAAAqiD,EAAA;AAAA,QACR,aAAWriD,EAAAoiD,EAAA;AAAA,QACX,WAAU4hB;AAAA,MAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjuBf,UAAM9oE,IAAQC,GA+CR0B,IAAOC,GAKPk/B,IAASh/B,EAAwD,SAAS,GAG1E,EAAE,WAAA+mB,EAAA,IAAc4J,GAA6BzyB,EAAM,UAAU,GAC7D;AAAA,MACJ,kBAAAirB;AAAA,MACA,sCAAAK;AAAA,MACA,qCAAAW;AAAA,MACA,sCAAAI;AAAA,MACA,uCAAAH;AAAA,IAAA,IACEvB,GAAkB9B,CAAS,GAEzBghD,IAAejzD,GAA4D,MAAS;AAE1F,IAAAtN,GAAU,YAAY;AACpB,YAAMshB,IAAiBX,GAAA;AAEvB,UADA4/C,EAAa,QAAQ,MAAMx9C,EAAqCrsB,EAAM,aAAa,GAC/E6D,EAAYgmE,EAAa,KAAK,GAAG;AACnC,QAAA/oC,EAAO,QAAQ;AACf;AAAA,MACF;AACA,UAAI,CAAC4B,GAAiCmnC,EAAa,KAAK,GAAG;AACzD,QAAA/oC,EAAO,QAAQ;AACf;AAAA,MACF;AACA,YAAMtV,IAA2B,CAAA;AACjC,MAAKZ,EAAe,YAAY,gBAC9BY,EAAS,KAAKP,GAAkB,GAElCO,EAAS,KAAKU,EAAsClsB,EAAM,cAAc,CAAC;AACzE,YAAMquB,IAAgCpC,EAAoC49C,EAAa,MAAM,SAAS;AACtG,MAAIhmE,EAAYwqB,CAA6B,KAC3C7C,EAAS,KAAKF,EAAqCu+C,EAAa,MAAM,SAAS,CAAC;AAElF,UAAI;AACF,cAAM,QAAQ,WAAWr+C,CAAQ;AAAA,MACnC,QAAY;AACV,QAAAsV,EAAO,QAAQ;AAAA,MACjB;AACA,MAAIA,EAAO,UAAU,YAASA,EAAO,QAAQ;AAAA,IAC/C,CAAC,GAED/7B,GAAQ6hE,IAAyBiD,CAAY;AAE7C,UAAMC,IAAiBhoE,EAAkD,IAAI;AAM7E,WAAAuC,EAAa;AAAA,MACX,iBALsB,MAAM;AAC5B,QAAAylE,EAAe,OAAO,gBAAA;AAAA,MACxB;AAAA,IAGE,CACD,aAKShpC,EAAA,UAAM,WADdrgC,KAAAF,EAamBwpE,IAbnBl3D,GAamB;AAAA;eAXb;AAAA,MAAJ,KAAIi3D;AAAA,IAAA,GACI9pE,GAAK;AAAA,MACZ,uBAAkBuE,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAE,MAAE9C,EAAI,qBAAsB8C,CAAM;AAAA,MACpD,mDAA6B9C,EAAI,0BAAA;AAAA,IAAA;MAEvB,QAAMf,EACf,CAGE,EAAA,OAJwBopE,QAAW;AAAA,QACrCvoE,GAGEC,EAAA,QAAA,UAAA,EADC,OAAOsoE,GAAW;AAAA,MAAA;;cAKZlpC,EAAA,UAAM,gBADnBpgC,EAKM,OALNS,IAGC,4BAED,KAEa2/B,EAAA,UAAM,2BADnBpgC,EAKM,OALNuF,IAGC,2BAED,WACA1F,EAKEa,IAAA;AAAA;MAHC,MAAM;AAAA,MACN,OAAO;AAAA,MACR,eAAA;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1HJ,UAAMpB,IAAQC,GAwBR0B,IAAOC,GAIPoG,IAAaC,GAAoBhI,GAAA,YAAoC,GACrEu+B,IAAYv2B,GAAmBhI,GAAC,MAAuC,GACvE09C,IAAQ11C,GAAoBhI,GAAC,OAA4C,GAEzEoV,IAAUvT,EAAI,EAAK,GACnBowB,IAAgBpwB,EAAI,EAAK,GAEzB,EAAE,GAAAmB,EAAA,IAAM/C,EAAA,GAER;AAAA,MACJ,WAAA2oB;AAAA,MACA,eAAAsJ;AAAA,MACA,QAAArC;AAAA,MACA,YAAA1kB;AAAA,MACA,eAAAouB;AAAA,MACA,yBAAAH;AAAA,MACA,iBAAApH;AAAA,MACA,kBAAA8H;AAAA,MACA,eAAAjB;AAAA,MACA,OAAA5pB;AAAA;AAAA,IAAA,IAEE6pB,GAAsB,WAAW/4B,EAAM,sBAAsB,GAE3D,EAAE,sCAAAsrB,GAAsC,qCAAAW,MAAwCtB,GAAkB9B,CAAS,GAC3G,EAAE,uCAAAqD,EAAA,IAA0CvB,GAAkB9B,CAAS,GACvEsQ,IAAmBrG,GAAA,GACnB,EAAE,OAAAtE,EAAA,IAAU0K,GAAYC,CAAgB,GACxCF,IAAmBrJ,GAAA,GACnB,EAAE,mBAAAG,GAAmB,WAAAhH,MAAcmQ,GAAYD,CAAgB,GAE/D2kB,IAAgBhnC,GAAkD,EAAE,GAEpE,EAAE,iBAAA6hB,GAAiB,aAAAL,GAAa,cAAAC,EAAA,IAAiBC,GAAA,GACjD,EAAE,YAAApa,EAAA,IAAexV,GAAA,GAEjBP,IAAS,MAAM;AACnB,UAAI,CAACw1C,EAAM,MAAO;AAClB,UAAIE,KAAoB54C,GAAU24C,EAAc,KAAK;AAIrD,UAHK59C,EAAM,yBACT69C,KAAoBzb,GAAsCwb,EAAc,KAAK,IAE3EC,GAAkB,WAAW,GAAG;AAClC,QAAA3/B,EAAW,2CAA2C;AACtD;AAAA,MACF;AAEA,MAAAhP,EAAA,GACA6qB;AAAA,QACE8jB;AAAA,QACA90B,EAAU;AAAA,QACVA,EAAU,UAAUR,GAAa,QAAQ,KAAO;AAAA,QAC1CvoB,EAAM,aAAZ,KAAwBA,EAAM,aAAaA,EAAM;AAAA,QACjDA,EAAM;AAAA,QACNA,EAAM;AAAA,MAAA,GAERy4B,EAAA,GACAzwB,EAAW,QAAQ;AAAA,IACrB;AAEA,IAAAnF;AAAA,MACEmF;AAAA,MACA,OAAOlF,IAAU6C,OAAa;AAC5B,QAAI7C,OAAa6C,MAAY,CAAC7C,MAC9BqF,EAAA;AAAA,MACF;AAAA,MACA,EAAE,WAAW,GAAA;AAAA,IAAK;AAGpB,UAAMC,IAAU,MAAM;AACpB,MAAAJ,EAAW,QAAQ,IACnBkH,EAAA;AAAA,IACF,GAEM4uC,IAAqB,MAAM;AAC/B,UAAI5rB,EAAc,SAASlyB,EAAM;AAC/B,eAAOA,EAAM;AAAA,IAGjB,GAEM2I,IAAY,MAAM;AACtB,MAAAhH,EAAK,aAAaswB,EAAgBjyB,EAAM,YAAY89C,EAAA,CAAoB,CAAC,GACzE11C,EAAA;AAAA,IACF,GAEM21C,KAAsB,CAACC,OAA4B;AACvD,MAAIA,MAAkB5yC,EAAW,MAAM,gBAAgB,MACrDouB,EAAA;AAAA,IAEJ,GAEM,EAAE,UAAA6E,GAAA,IAAaC,GAAA,GAEf2f,KAAoB79C,EAAS,MAE/B2oB,EAAU,UAAUR,GAAa,SACjCwH,EAAkB,QAAQ,KAC1B,CAAClsB,EAAY7D,EAAM,aAAa,KAChC+vB,EAAkB,UAAU/vB,EAAM,aAErC,GAEKiiC,KAAoB7hC,EAAS,MAAM;AACvC,cAAQi+B,GAAS,OAAA;AAAA,QACf,KAAKF,GAAoB;AACvB,iBAAO+f;AAAAA,QACT;AAAA,QACA,KAAK/f,GAAoB;AAAA,QACzB,KAAKA,GAAoB;AACvB,iBAAOggB;AAAAA,MAAA;AAAA,IAEb,CAAC,GAEKC,KAAiBh+C,EAAS,MACvB+xB,EAAc,QAAQnyB,EAAM,YAAYmyB,EAAc,QAAQnyB,EAAM,QAC5E,GAEKq+C,KAAQj+C,EAAS,MAAM;AAC3B,UAAIw9C,EAAc,MAAM,WAAW,KAC/B7tB,EAAkB,QAAQ,GAAG;AAC/B,cAAMloB,KAAQ+1C,EAAc,MAAM,KAAK,CAACv0C,OAAWA,GAAO,YAAY0mB,EAAkB,KAAK;AAC7F,YAAIloB,WAAcA,GAAM;AAAA,MAC1B;AAAA,IAEF,CAAC,GAEKy2C,KAAsBl+C,EAAS,MAC5Bm+C,GAAwB,SAASzlB,EAAc,KACvD,GAEK,EAAE,mBAAArwB,GAAA,IAAsBC,GAAA,GACxB61C,KAA0Bz8C,EAAI,EAAI,GAElCmoE,KAAa,MAAM;AACvB,MAAAhxC,EAAiB,MAAM,EAAK,GAC5BE,EAAiB,MAAA,GACjBE,EAAA;AAAA,IACF,GAEMmlB,KAAe,CAACjoC,OAAoC;AACxD,MAAAnL,EAAW,MAAM,SAAS,MACtBmL,GAAO,WACTnL,EAAW,MAAM,SAAS,EAAE,KAAKmL,GAAO,OAAO,KAAK,OAAOA,GAAO,OAAO,MAAA,IAE3E8iB,EAAA;AAAA,IACF;AAEA,WAAAx2B;AAAA,MACEw7C;AAAA,MACA,OAAOv7C,OAAa;AAClB,YAAIe,EAAYf,EAAQ,EAAG;AAC3B,QAAAy7C,GAAwB,QAAQ;AAChC,cAAMlwB,KAAgCpC,EAAoCnpB,EAAQ;AAClF,YAAIe,EAAYwqB,EAA6B;AAC3C,cAAI;AACF,kBAAM/C,EAAqCxoB,EAAQ,GACnDy7C,GAAwB,QAAQ;AAAA,UAClC,SAAS1mC,IAAG;AACV,YAAApP,GAAkBoP,EAAC;AAAA,UACrB;AAAA;AAEA,UAAA0mC,GAAwB,QAAQ;AAAA,MAEpC;AAAA,MACA,EAAE,WAAW,GAAA;AAAA,IAAK,GAGpBj1C,GAAU,YAAY;AACpB,MAAAq0C,EAAM,QAAQ,IACdtoC,EAAQ,QAAQ,IAChBuoC,EAAc,QAAQ,MAAM1xB,EAAsClsB,EAAM,cAAc,GACtFqV,EAAQ,QAAQ,IAChBsoC,EAAM,QAAQ;AAAA,IAChB,CAAC,GAED1lC,GAAY,MAAM;AAChB,MAAA2lC,EAAc,QAAQ,CAAA;AAAA,IACxB,CAAC,GAEDv5C,EAAa;AAAA,MACX,MAAM8D;AAAA,IAAA,CACP;;aAKSkN,EAAA,SADR5U,EAAA,GAAAC,EAKM,OALNS,IAKM;AAAA,QADJN,EAAmCO,IAAA,EAAhB,eAAA,IAAa;AAAA,MAAA,MAEbw8C,EAAA,MAAc,SAAM,UAAzCl9C,EAkHW0F,IAAA,EAAA,KAAA,KAAA;AAAA,QAjHT3E,GAGEC,GAAA,QAAA,aAAA;AAAA,UADC,OAAK,EAAA,SAAakW,EAAa,MAAOzP,KAAM,CAAA,MAAA,CAAA,EAAA;AAAA,QAAA;QAE/CtH,EA4GUkI,IAAA;AAAA,sBA3GCf,EAAA;AAAA,2DAAAA,EAAU,QAAAvD;AAAA,UACnB,YAAA;AAAA,UACA,OAAM;AAAA,QAAA;qBAEN,MAsGQ;AAAA,YArGAuD,EAAA,cADRzH,EAsGQgB,IAAA;AAAA;cApGN,OAAM;AAAA,YAAA;yBAEN,MAOiB;AAAA,gBAPjBV,EAOiBmI,IAAA;AAAA,kBANf,OAAM;AAAA,kBACL,YAAWZ;AAAA,gBAAA;6BAEZ,MAEO;AAAA,oBAFP3G,GAEOC,wBAFP,MAEO;AAAA,0BADFoD,EAAA7B,CAAA,EAAC,qCAAA,CAAA,GAAA,CAAA;AAAA,oBAAA;;;;gBAGRpC,EAOE49C,IAAA;AAAA,kBANQ,MAAMjgB,EAAA;AAAA,6DAAAA,EAAS,QAAA/5B;AAAA,kBACvB,cAAA;AAAA,kBACC,wBAAsBxE,EAAA;AAAA,kBACtB,wBAAsBA,EAAA;AAAA,kBACtB,cAAagqE;AAAA,kBACb,gBAAgBzrB;AAAA,gBAAA;gBAEnBv9C,EAmDM,OAAA;AAAA,kBAlDJ,WAAM,wBAAsB;AAAA,4DACkC6D,EAAAszB,CAAA;AAAA,kEAAuEtzB,EAAAuzB,CAAA;AAAA,kBAAA;;kBAKrIp3B,EAEM,OAFNgF,IAEM;AAAA,oBADJpF,EAAqB69C,EAAA;AAAA,kBAAA;kBAEvBz9C,EAmBM,OAnBNsF,IAmBM;AAAA,oBAhBI83C,GAAA,SAFR59C,EAAA,GAAAF,EAIEgjB,GAHK0e,GAAA,KAAiB,GAAA;AAAA;sBAErB,cAAYoc,GAAA;AAAA,oBAAA;oBAEfp9C,EAYM,OAZNuF,IAYM;AAAA,+BAXJjG,EAUgBggB,IAAA;AAAA,wBAPb,SAASzb,EAAAgrB,CAAA;AAAA,wBACV,MAAK;AAAA,wBACJ,SAAOhrB,EAAA00B,CAAA;AAAA,sBAAA;mCAER,MAEO;AAAA,0BAFP/3B,GAEOC,uCAFP,MAEO;AAAA,gCADFoD,EAAA7B,CAAA,EAAC,wBAAA,CAAA,GAAA,CAAA;AAAA,0BAAA;;;;6BAPE6B,EAAAsG,CAAA,EAAW,eAAetG,EAAAgrB,CAAA,CAAM;AAAA,6BAC3BiuB,EAAmB;AAAA,sBAAA;;;kBAWtC98C,EAoBM,OApBNwF,IAoBM;AAAA,oBAlBI63C,GAAA,SADR79C,EAAA,GAAAC,EAKM,OALNgG,IAKM;AAAA,sBADJ7F,EAAmCO,IAAA,EAAhB,eAAA,IAAa;AAAA,oBAAA,MAGpB0D,EAAA0pB,CAAA,UAKd9tB,EAMM,OAAAw9B,IAAA;AAAA,sBAJImgB,GAAA,UAAUE,GAAA,cADlBh+C,EAIEo+C,IAAA;AAAA;wBAFC,cAAYN,GAAA;AAAA,wBACb,UAAA;AAAA,sBAAA;gCAVJ39C,EAKM,OALNu9B,IAKM/8B,EADD4D,EAAA7B,CAAA,EAAC,8CAAA,CAAA,GAAA,CAAA;AAAA;;gBAWVhC,EA6BM,OA7BN29C,IA6BM;AAAA,kBA5BO5+C,EAAM,aAAaA,EAAM,YAApCS,EAAA,GAAAC,EAEM,aADDoE,EAAA7B,CAAA,EAAC,gDAAA,EAAA,OAA0DjD,EAAM,oBAAoB8E,EAAAqtB,CAAA,EAAA,CAAa,CAAA,GAAA,CAAA,MAEvG1xB,EAAA,GAAAC,EAQM,aANFoE,EAAA7B,CAAA,EAAC,gDAAA;AAAA,oBAA6E,UAAAjD,EAAM;AAAA,oBAAoC,UAAAA,EAAM;AAAA,8BAAoC8E,EAAAqtB,CAAA;AAAA,kBAAA;kBAOtKtxB,EAAWsI,EAAA;AAAA,kBAEH80C,GAAA,cADR19C,EAMEmV,IAAA;AAAA;gCAJSwc,EAAA;AAAA,qEAAAA,EAAa,QAAAztB;AAAA,oBACrB,OAAOK,EAAA7B,CAAA,EAAC,6CAAA;AAAA,oBACT,gBAAA;AAAA,oBACA,OAAM;AAAA,kBAAA;kBAERpC,EAOciI,IAAA;AAAA,oBANX,UAAUs1C,GAAA;AAAA,oBACV,WAAYz1C,GAAS,CAAA,MAAA,CAAA;AAAA,kBAAA;+BAEtB,MAEO;AAAA,sBAFPlH,GAEOC,uCAFP,MAEO;AAAA,4BADFoD,EAAA7B,CAAA,EAAC,uBAAA,CAAA,GAAA,CAAA;AAAA,sBAAA;;;;;;;;;;;iBAOhBxC,EAAA,GAAAC,EAEM,WAFM,6BAEZ;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChTF,UAAMV,IAAQC,GA+CR0B,IAAOC,GAIPsoE,IAAajiE,GAA8BhI,GAAC,OAA2B,GACvEkqE,IAAaliE,GAA8BhI,GAAC,OAA2B,GAGvE,EAAE,eAAA8B,EAAA,IAAkBC,GAAA,GAEpBC,IAAmBH,EAAI,CAACI,IAAuBE,OAA8C;AAAA,IAAC,CAAC,GAE/FD,IAAmBL,EAAI,CAACM,OAA8C;AAAA,IAAC,CAAC,GACxEC,IAAoBP,EAAuB,IAAI;AAErD,QAAIC,EAAc,MAAM,WAAWO,GAAUtC,EAAM,MAAM,GAAG;AAC1D,YAAM,EAAE,wBAAAuC,IAAwB,wBAAAC,IAAwB,kCAAAC,IAAkC,cAAAE,GAAA,IACxFC,GAAe5C,EAAM,OAAO,MAAMA,EAAM,OAAO,KAAK;AACtD,MAAAiC,EAAiB,QAAQM,IACzBJ,EAAiB,QAAQK,IACzBK;AAAA,QACEF;AAAA,QACA,CAACG,OAAa;AACZ,UAAAT,EAAkB,QAAQS;AAAA,QAC5B;AAAA,QACA,EAAE,WAAW,GAAA;AAAA,MAAK,GAEpBL,GAAiC,CAACP,OAAuC;AACvE,QAAIA,GAAK,WAAWa,GAAsB,WAAWb,GAAK,SAASc,GAAoB,UACrF8jE,GAA4B,QAAQ,KAC3B5kE,GAAK,WAAWa,GAAsB,WAAWb,GAAK,SAASc,GAAoB,WAEnFd,GAAK,WAAWa,GAAsB,WAAWb,GAAK,SAASc,GAAoB,UAD5F8jE,GAA4B,QAAQ,KAG3B5kE,GAAK,WAAWa,GAAsB,WAAWb,GAAK,SAASc,GAAoB,YAC5F8jE,GAA4B,QAAQ;AAAA,MAExC,CAAC;AAAA,IACH;AACA,UAAMC,IAAcjlE,EAAI,EAAK,GACvBklE,IAAwB,MAAM;AAClC,MAAID,EAAY,UAAU,MAAQ/mE,EAAM,iBAAiB4d,GAAa,aACtEzb,EAAiB,MAAA,GACjB4kE,EAAY,QAAQ;AAAA,IACtB,GACME,IAAwB,CAAC57D,OAA6B;AAC1D,MAAI07D,EAAY,UAAU,MAAS/mE,EAAM,iBAAiB4d,GAAa,aACvE3b,EAAiB,MAAMoJ,EAAK,GAC5B07D,EAAY,QAAQ;AAAA,IACtB,GAEMG,IAA0B/jE;AAAA,MAC9ByjE;AAAA,MACA;AAAA,IAAA;AAGF,QAAI/iE,EAAYqjE,CAAuB,KAAKrjE,EAAYqjE,EAAwB,KAAK;AACnF,YAAM,IAAI,MAAM,mFAAmF;AAGrG,UAAM,EAAE,GAAAjkE,EAAA,IAAM/C,EAAA,GAER,EAAE,mBAAAuI,GAAmB,WAAA0+D,GAAW,YAAAjpD,EAAA,IAAexV,GAAA,GAG/Cg+C,IAAeE,GAA2B5mD,EAAM,UAAU,GAC1D,EAAE,aAAA+nD,MAAgBrB,GAClB,EAAE,0BAAAsB,GAA0B,yBAAAoiB,MAA4BvjB,GAAgBH,CAAY,GACpFrb,IAAoBC,GAAA,GACpB,EAAE,mBAAA24B,EAAA,IAAsBE,GAAA,GAExB0C,IAA2B/kE,EAAI,EAAK,GACpCuoE,IAAgBvoE,EAAgD,IAAI,GACpEslE,IAAkBtlE,EAAI,EAAK,GAC3BulE,IAAoBvlE,EAAI,EAAK,GAC7BwlE,IAAiBxlE,EAAI,EAAK,GAC1BylE,IAAuBzlE,EAAI,EAAK,GAChC0lE,IAAwB1lE,EAAI,EAAK,GACjC2lE,IAAkB3lE,EAAI,EAAK,GAE3BwoE,IAAmBlqE,EAAS,MACzB,CAACmF,GAAO2kE,EAAW,KAAK,KAAK,CAAC3kE,GAAO4kE,EAAW,KAAK,CAC7D,GAEKjiB,IAAcpmD,EAAI,EAAE,GAEpB6lE,IAAcvnE,EAAS,MACpBirC,EAAkB,SAASrrC,EAAM,QAAQ,CACjD,GAEKuqE,IAAmBnqE,EAAS,MACzB,CAACmF,GAAO8kE,EAAc,KAAK,CACnC,GAEKxC,IAAiB,MAAM;AAC3B,MAAAnf,GAAsB,UAAU12B,GAAMq4C,EAAc,KAAK,CAAC,GAC1D/C,EAAe,QAAQ;AAAA,IACzB,GAEMQ,KAAgB,MAAM;AAC1B,MAAAT,EAAkB,QAAQ;AAAA,IAC5B,GAEM,EAAE,mBAAAzwC,GAAA,IAAsBC,GAAA,GAGxBiwC,KAA8BhlE,EAAI,EAAK,GAEvCimE,KAAmC,YAAY;AACnD,UAAI,CAAChmE,EAAc,MAAM,WAAW8B,EAAY7D,EAAM,MAAM,KAAKA,EAAM,iBAAiB4d,GAAa;AACnG,eAAO,QAAQ,QAAQ,EAAI;AAG7B,UAAIzJ,KAAQ;AAEZ,YAAM6zD,KAA6C,MAC7ClB,GAA4B,QACvB,QAAQ,QAAQ,EAAI,KAG7B3yD,MACIA,KAAQ,KACH,IAAI,QAAQ,CAACsI,OAAY,WAAW,MAAMA,GAAQurD,GAAA,CAAW,GAAG,GAAG,CAAC,IAGtE,QAAQ,OAAO,EAAK;AAG7B,aAAOA,GAAA;AAAA,IACT,GAEMzhB,KAAS,OAAOtO,OAAkB;AACtC,MAAA+uB,EAAA;AACA,YAAM39D,KAAS69D,EAAwB;AACvC,UAAIrjE,CAAAA,EAAYwF,EAAM;AACtB,YAAI;AACF,gBAAM0+D,GAAA,GACNnxC,GAAkB,QAAQvtB,GAAO,WACjCgiC,EAAkB,WAAWrrC,EAAM,UAAUqJ,GAAO,WAAWA,GAAO,SAAS4uC,EAAK,GACpFgsB,EAAkB,QAAQjkE,EAAM;AAAA,QAClC,QAAY;AACV,UAAAmnE,EAAU,8CAA8C;AAAA,QAC1D;AAAA,IACF,GAEMc,KAAkB,CAAC/lE,OAAwC;AAC/D,UAAI,CAACA,GAAK,CAAC,EAAG;AACd,YAAMmH,KAAS69D,EAAwB;AACvC,UAAIrjE,CAAAA,EAAYwF,EAAM,GAEtB;AAAA,YADAutB,GAAkB,QAAQvtB,GAAO,WAC7BnH,GAAK,CAAC,EAAE,WAAW;AACrB,UAAAmpC,EAAkB,mBAAmBrrC,EAAM,UAAUqJ,GAAO,WAAWA,GAAO,SAAS,CAACnH,GAAK,CAAC,EAAE,WAAW,CAAC;AAAA,iBACnGA,GAAK,CAAC,EAAE,WAAW;AAC5B,UAAAmpC,EAAkB,mBAAmBrrC,EAAM,UAAUqJ,GAAO,WAAWA,GAAO,SAAS,CAACnH,GAAK,CAAC,EAAE,WAAW,CAAC,GAC5GmpC,EAAkB,mBAAmBnpC,GAAK,CAAC,EAAE,aAAaA,GAAK,CAAC,EAAE,gBAAgBqmB,GAAa,KAAK;AAAA,aAC/F;AACL,UAAArK,EAAW,+CAA+C;AAC1D;AAAA,QACF;AACA,QAAA+lD,EAAkB,QAAQjkE,EAAM;AAAA;AAAA,IAClC,GAEMkoE,KAAc,CAACjwB,OAAkB;AACrC,YAAM5uC,KAAS69D,EAAwB;AACvC,MAAIrjE,EAAYwF,EAAM,MACtButB,GAAkB,QAAQvtB,GAAO,WACjCgiC,EAAkB,WAAWrrC,EAAM,UAAUqJ,GAAO,WAAWA,GAAO,SAAS4uC,EAAK,GACpFgsB,EAAkB,QAAQjkE,EAAM;AAAA,IAClC,GAEM,EAAE,aAAAknD,IAAa,cAAAC,GAAA,IAAiBH;AAAA,MACpCz+B,GAAa;AAAA,MACb2+C,EAAwB,MAAM;AAAA,IAAA,GAG1BsD,KAAc,OAClBpiB,IACAC,IACA+f,KAAQ,OACL;AAEH,UADAlgB,EAAY,QAAQ5tB,IACf8tB,MAAY7iD,GAAO8kE,EAAc,KAAK,KAAOjiB,MAAYggB,IAAQ;AACpE,QAAAiC,EAAc,QAAQplE,GAAUmjD,EAAQ,GACpC9iB,GAAyB+kC,EAAc,KAAK,MAC1CjmE,GAASpE,EAAM,QAAQ,KAAKoE,GAASpE,EAAM,SAAS,IACtDkoD,EAAY,QAAQF,EAAyBh2B,GAAMq4C,EAAc,KAAK,GAAGrqE,EAAM,UAAUA,EAAM,SAAS,IAExGkoD,EAAY,QAAQF,EAAyBh2B,GAAMq4C,EAAc,KAAK,CAAC,GAErErqE,EAAM,kBACR0oD,GAAsB,UAAU12B,GAAMq4C,EAAc,KAAK,CAAC;AAG9D;AAAA,MACF;AACA,UAAIhiB,IAAY;AACd,YAAI;AACF,UAAAgiB,EAAc,QAAQ,MAAM/iB,GAAWS,GAAaM,EAAU;AAAA,QAChE,SAASx/C,IAAO;AACd,UAAAJ,EAAkBI,EAAK;AAAA,QACzB;AACA,QAAIy8B,GAAyB+kC,EAAc,KAAK,MAC1CjmE,GAASpE,EAAM,QAAQ,KAAKoE,GAASpE,EAAM,SAAS,IACtDkoD,EAAY,QAAQF,EAAyBh2B,GAAMq4C,EAAc,KAAK,GAAGrqE,EAAM,UAAUA,EAAM,SAAS,IAExGkoD,EAAY,QAAQF,EAAyBh2B,GAAMq4C,EAAc,KAAK,CAAC,GAErErqE,EAAM,kBACR0oD,GAAsB,UAAU12B,GAAMq4C,EAAc,KAAK,CAAC;AAG9D;AAAA,MACF;AACA,MAAAA,EAAc,QAAQ;AAAA,IACxB,GAEMI,KAAc,CAACC,OAAgC;AAEnD,UADAxiB,EAAY,QAAQ5tB,IAChBowC,IAAU;AACZ,QAAAL,EAAc,QAAQplE,GAAUylE,EAAQ,GACpCrlC,GAAaglC,EAAc,KAAK,KAAK,CAAC9kE,GAAO8kE,EAAc,MAAM,SAAS,WAAW,MACnFjmE,GAASpE,EAAM,QAAQ,KAAKoE,GAASpE,EAAM,SAAS,IACtDkoD,EAAY,QAAQkiB;AAAA,UAClBC,EAAc,MAAM,SAAS;AAAA,UAC7BrqE,EAAM;AAAA,UACNA,EAAM;AAAA,QAAA,IAGRkoD,EAAY,QAAQkiB,EAAwBC,EAAc,MAAM,SAAS,WAAW,GAElFrqE,EAAM,kBACR0oD,GAAsB,UAAU12B,GAAMq4C,EAAc,KAAK,CAAC;AAG9D;AAAA,MACF;AACA,MAAAA,EAAc,QAAQ;AAAA,IACxB,GAEMn7D,KAAQ,MAAM;AAClB,MAAAg5C,EAAY,QAAQ5tB,IACpB+vC,EAAc,QAAQ,MACtBH,EAAW,QAAQ,MACnBC,EAAW,QAAQ,MACnBzhB,GAAsB,MAAA,GACtBzmD,EAAiB,MAAM,IAAI;AAAA,IAC7B;AAEA,IAAAY;AAAA,MACE,CAAC,MAAM7C,EAAM,cAAckqE,GAAYC,CAAU;AAAA,MACjD,OAAO,CAAC/hB,IAAUC,IAAYqiB,EAAQ,GAAG,CAACC,IAAUC,IAAYC,EAAQ,MAAM;AAE5E,YAAI,CAACtlE,GAAOmlE,EAAQ,KAAK,KAAK,UAAUA,EAAQ,MAAM,KAAK,UAAUG,EAAQ,GAAG;AAC9E,UAAAJ,GAAYC,EAAQ;AACpB;AAAA,QACF;AAEA,YAAItiB,OAAauiB,MAAYtiB,OAAeuiB,IAAY;AACtD,gBAAMJ,GAAYpiB,IAAUC,EAAU;AACtC;AAAA,QACF;AAEA,QAAI9iD,GAAOmlE,EAAQ,KAAK,CAACnlE,GAAOslE,EAAQ,KACtCJ,GAAY,IAAI;AAAA,MAEpB;AAAA,MACA,EAAE,WAAW,GAAA;AAAA,IAAK;AAGpB,UAAMxxC,KAAmBrJ,GAAA,GACnB84B,KAAwBnjB,GAAA,GACxB,EAAE,QAAAC,GAAA,IAAWtM,GAAYwvB,EAAqB,GAE9C2f,KAAuB,OAAOnmE,OAAgC;AAClE,UAAIA,GAAK,SAAS,WAAW,CAACA,GAAK,MAAM,CAAC,EAAG;AAC7C,MAAAslE,EAAsB,QAAQ,IAC9B9e,GAAsB,UAAU,IAAI,GAEpCme,EAAyB,QAAQ;AACjC,UAAIxB,KAAc,IACdntC,KAAS;AACb,YAAM4yC,KAAgB5oE,GAAK,MAAM,CAAC;AAClC,UAAI,CAAC4oE,GAAc,SAAU;AAC7B,UAAIC,KAA2C;AAC/C,UAAI;AACF,QAAAA,KAAmB,MAAM99C,GAAqBpE,IAAWiiD,GAAc,EAAE;AAAA,MAC3E,SAASjzD,IAAG;AACV,QAAApP,EAAkBoP,EAAC;AAAA,MACrB;AACA,UAAKkzD,IACL;AAAA,YAAID,GAAc,WAAW,cAAcviD,GAAa,SAAS2a,GAAqB4nC,GAAc,QAAQ,GAAG;AAE7G,UAAAxD,EAAe,QAAQ;AACvB,gBAAM0D,KAAwB;AAAA,YAC5B,YAAY;AAAA,YACZ,UAAU;AAAA,cACR,aAAaF,GAAc,SAAS,cAAc,aAAa;AAAA,cAC/D,SAASA,GAAc;AAAA,cACvB,WAAWA,GAAc;AAAA,cACzB,WAAWviD,GAAa;AAAA,cACxB,OAAOwiD,GAAiB;AAAA,cACxB,aAAaA,GAAiB;AAAA,cAC9B,YAAYA,GAAiB;AAAA,cAC7B,aAAaA,GAAiB;AAAA,cAC9B,aAAaA,GAAiB;AAAA,cAC9B,UAAUA,GAAiB;AAAA,cAC3B,UAAUA,GAAiB;AAAA,cAC3B,UAAUA,GAAiB;AAAA,cAC3B,eAAe;AAAA,cACf,aAAaA,GAAiB;AAAA,cAC9B,eAAeA,GAAiB;AAAA,YAAA;AAAA,UAClC;AAEF,UAAAriB,GAAsB,UAAUsiB,EAAS;AAAA,QAC3C,WACEF,GAAc,WAAW,cAAcviD,GAAa,SACpDuiD,GAAc,SAAS,SAAS,KAChC3nC,GAAqB2nC,GAAc,QAAQ,GAC3C;AAEA,UAAAxD,EAAe,QAAQ;AACvB,gBAAM0D,KAAwB;AAAA,YAC5B,YAAY;AAAA,YACZ,UAAU;AAAA,cACR,aAAaF,GAAc,SAAS,cAAc,aAAa;AAAA,cAC/D,SAASA,GAAc;AAAA,cACvB,WAAWA,GAAc;AAAA,cACzB,WAAWviD,GAAa;AAAA,cACxB,OAAOwiD,GAAiB;AAAA,cACxB,aAAaA,GAAiB;AAAA,cAC9B,YAAYA,GAAiB;AAAA,cAC7B,aAAaA,GAAiB;AAAA,cAC9B,aAAaA,GAAiB;AAAA,cAC9B,UAAUA,GAAiB;AAAA,cAC3B,UAAUA,GAAiB;AAAA,cAC3B,UAAUA,GAAiB;AAAA,cAC3B,eAAe;AAAA,cACf,aAAaA,GAAiB;AAAA,cAC9B,eAAeA,GAAiB;AAAA,YAAA;AAAA,UAClC;AAEF,UAAAriB,GAAsB,UAAUsiB,EAAS;AAAA,QAC3C,WAAWF,GAAc,WAAW,cAAcviD,GAAa,OAAO;AAEpE,cAAI,CAAC1kB,EAAY3B,GAAK,aAAa,GAAG;AACpC,gBAAI;AACF,oBAAMomE,KAAU,MAAMp2C,GAAcrJ,IAAW;AAAA,gBAC7C,EAAE,OAAO3mB,GAAK,MAAM,CAAC,EAAE,IAAI,oBAAoBA,GAAK,cAAA;AAAA,cAAc,CACnE;AACD,cAAA+lE,GAAgBK,EAAO;AAAA,YACzB,SAASzwD,IAAG;AACV,cAAApP,EAAkBoP,EAAC;AAAA,YACrB,UAAA;AACE,cAAA2vD,EAAsB,QAAQ;AAAA,YAChC;AACA;AAAA,UACF;AACA,UAAAF,EAAe,QAAQ;AACvB,cAAI;AACF,kBAAMzuB,KAAW,MAAM7rB,GAAWnE,IAAWiiD,GAAc,EAAE;AAC7D,YAAIn+D,GAASksC,GAAS,SAAS,YAAY,WAAW,MACpDwsB,KAAcxsB,GAAS,SAAS,WAAW,YAAY,KAAA,IAErDA,GAAS,QAAQ,SAAS,IAM5B3gB,MALmB,MAAM3B;AAAA,cACvB1N;AAAA,cACAoQ,GAAiB,qBAAqB;AAAA,cACtC4f,GAAS;AAAA,YAAA,GAES,IAAI,CAAC/hB,OAAWA,GAAO,IAAI,EAAE,KAAK,IAAI,IACjD+hB,GAAS,QAAQ,WAAW,MACrCguB,EAAyB,QAAQ,IACjCr4C,GAAM,QAAQqqB;AAAA,UAElB,SAAShhC,IAAG;AACV,YAAApP,EAAkBoP,EAAC;AAAA,UACrB;AACA,gBAAMiuB,KAAgC;AAAA,YACpC,OAAO;AAAA,cACL,aAAAu/B;AAAA,cACA,QAAAntC;AAAA,YAAA;AAAA,YAEF,OAAO;AAAA,cACL,YAAY;AAAA,YAAA;AAAA,YAEd,KAAK;AAAA,cACH,OAAO4yC,GAAc,SAAS;AAAA,cAC9B,gBAAgB;AAAA,cAChB,WAAWA,GAAc;AAAA,YAAA;AAAA,YAE3B,UAAU;AAAA,UAAA;AAEZ,UAAKvlE,GAAO2kE,EAAW,KAAK,MAC1BpkC,GAAM,KAAKokC,EAAW,QAExBxhB,GAAsB,UAAU5iB,EAAK;AAAA,QACvC;AACA,QAAA0hC,EAAsB,QAAQ,IAC1BxnE,EAAM,kBACRuoE,GAAA;AAAA;AAAA,IAEJ,GAEMpvC,KAAmBrG,GAAA,GACnB,EAAE,SAAS01C,IAAc,QAAQC,IAAa,OAAAj6C,GAAA,IAAU0K,GAAYC,EAAgB,GACpF,EAAE,WAAAtQ,GAAA,IAAc4J,GAAA,GAEhBq2B,KAAc,OAAO37B,OAAuB;AAChD,MAAAq7C,GAAa,QAAQ,IACrBC,GAAY,QAAQzoE,EAAM;AAC1B,UAAI;AACF,cAAM64C,KAAW,MAAM3rB,GAAmBrE,IAAWsE,EAAW,GAC1Df,KAAU,MAAM1D,GAAqBG,IAAWgwB,GAAS,OAAO;AACtE,QAAIzsB,GAAQ,cACVwK,GAAkB,QAAQxK,GAAQ,YAEpC+M,GAAiB,SAAS0f,EAAQ;AAAA,MACpC,SAAShhC,IAAG;AACV,QAAApP,EAAkBoP,EAAC;AAAA,MACrB,UAAA;AACE,QAAA2wD,GAAa,QAAQ;AAAA,MACvB;AAAA,IACF,GAEME,KAAwB,MAAM;AAClC,MAAAhgB,GAAsB,UAAU,IAAI,GACpC4e,EAAe,QAAQ;AAAA,IACzB,GAEM2D,KAAkB,YAAY;AAClC,UAAK5lC,GAAaG,GAAO,KAAK,GAC9B;AAAA,QAAA+hC,EAAqB,QAAQ;AAC7B,YAAI;AACF,UAAAD,EAAe,QAAQ,IACvB6C,EAAW,QAAQ3kC,GAAO,OAC1B0kC,EAAW,QAAQ,MACnBxhB,GAAsB,UAAU,IAAI,GACpC+hB,GAAYN,EAAW,KAAK,GAC5BxoE,EAAK,0BAA0B,GAC/BM,EAAiB,MAAMkoE,EAAW,MAAM,EAAE;AAAA,QAC5C,SAAStyD,IAAG;AACV,UAAApP,EAAkBoP,EAAC;AAAA,QACrB,UAAA;AACE,UAAA0vD,EAAqB,QAAQ;AAAA,QAC/B;AAAA;AAAA,IACF,GAEM2D,KAAkB,YAAY;AAClC,UAAK5lC,GAAyBE,GAAO,KAAK,GAC1C;AAAA,QAAA+hC,EAAqB,QAAQ;AAC7B,YAAI;AACF,cAAIV,EAAyB,SAASr4C,GAAM,SACtCA,GAAM,MAAM,QAAQ,SAAS,GAAG;AAClC,kBAAMo6C,KAAa,MAAMryC;AAAA,cACvB1N;AAAA,cACAoQ,GAAiB,qBAAqB;AAAA,cACtCzK,GAAM,MAAM;AAAA,YAAA;AAEd,YAAAgX,GAAO,MAAM,MAAM,SAASojC,GAAW,IAAI,CAAC9xC,OAAWA,GAAO,IAAI,EAAE,KAAK,IAAI,GAC7E,MAAM7H,GAAmBpG,IAAW2F,GAAM,OAAOyK,GAAiB,qBAAqB,SAAS,GAChG4tC,EAAyB,QAAQ;AAAA,UACnC;AAEF,gBAAMj+D,KAAM48B,GAAO,MAAM,KACrB,MAAMgiB,GAAYO,GAAaviB,GAAO,MAAM,IAAIA,GAAO,KAAK,IAC5D,MAAM+hB,GAAYQ,GAAaviB,GAAO,KAAK;AAC/C,UAAA8hC,EAAe,QAAQ,IACvB4C,EAAW,QAAQthE,GAAI,IACvBuhE,EAAW,QAAQ,MACnBzhB,GAAsB,UAAU,IAAI,GACpC,MAAM8hB,GAAY5hE,IAAKA,GAAI,IAAI,EAAI,GACnCjH,EAAK,0BAA0B,GAC/BM,EAAiB,MAAM2G,GAAI,EAAE;AAAA,QAC/B,SAASiP,IAAG;AACV,UAAApP,EAAkBoP,EAAC;AAAA,QACrB,UAAA;AACE,UAAA0vD,EAAqB,QAAQ;AAAA,QAC/B;AAAA;AAAA,IACF,GAEMoB,KAA0B,YAAY;AAC1C,YAAMsC,GAAA,GACN,MAAMC,GAAA;AAAA,IACR,GAEMC,KAAqB,YAAY;AACrC,UAAInrE,EAAM,yBAAyBslC,GAAyBE,GAAO,KAAK,KAAKA,GAAO,MAAM,IAAI;AAC5F,YAAI;AACF,gBAAMiiB,GAAYM,GAAaviB,GAAO,MAAM,EAAE,GAC9Ct2B,GAAA;AAAA,QACF,SAAS2I,IAAG;AACV,UAAApP,EAAkBoP,EAAC;AAAA,QACrB;AACA;AAAA,MACF;AACA,MAAA3I,GAAA;AAAA,IACF,GAEMq5D,KAAoC,MAAM;AAC9C,UAAIljC,GAAaG,GAAO,KAAK,GAAG;AAC9B,QAAAilC,GAAYjlC,GAAO,KAAK;AACxB;AAAA,MACF,MAAA,CAAWF,GAAyBE,GAAO,KAAK,KAC9CglC,GAAYhlC,GAAO,OAAO,MAAM,EAAI;AAAA,IAExC,GAEMsjC,KAAuB,CAAC9yD,OAAoC;AAChE,MAAKA,GAAM,CAAC,MAEPzQ,GAAO2kE,EAAW,KAAK,MAC1Bl0D,GAAM,CAAC,EAAE,KAAKk0D,EAAW,QAE3BxhB,GAAsB,UAAU1yC,GAAM,CAAC,CAAC,GACxCsxD,EAAe,QAAQ,IACnBtnE,EAAM,kBACRuoE,GAAA;AAAA,IAEJ,GAEMQ,KAAuBjnE,EAAkD,IAAI,GAE7EknE,KAAkB,MAAM;AAC5B,UAAI,CAAAC,GAAS,OAEb;AAAA,YADAjC,EAAA,GACI,CAAChnE,EAAM,eAAe;AACxB,UAAAonE,EAAgB,QAAQ;AACxB;AAAA,QACF;AACA,QAAA2B,GAAqB,OAAO,SAAA;AAAA;AAAA,IAC9B,GAEMG,KAAgCpnE,EAA2D,IAAI,GAE/FqnE,KAAkB,MAAM;AAC5B,MAAAD,GAA8B,OAAO,QAAA;AAAA,IACvC,GAEME,KAAuB,MAAM;AACjC,MAAApC,EAAA;AAAA,IACF,GAEMqC,KAAwBjpE,EAAS,MAEnCknE,EAAe,SACfD,EAAkB,SAClBI,EAAgB,SAChBxD,EAAkB,UAAUjkE,EAAM,QAErC,GAEKipE,KAAW7oE,EAAS,MACjB,CAACmF,GAAOlD,EAAkB,KAAK,CACvC,GAEK+oE,KAAgBhrE,EAAS,MACzB+pE,EAAW,SAASA,EAAW,MAAM,SAAS,YACzCA,EAAW,MAAM,SAAS,YAE5B5hD,GAAa,KACrB,GAEKkD,KAAOrrB,EAAkC,MACzCilC,GAAaglC,EAAc,KAAK,IAC3BA,EAAc,MAAM,SAAS,cAAc5hB,GAAa,QAAQlgC,GAAa,QAAQA,GAAa,QAChG+c,GAAyB+kC,EAAc,KAAK,IAC9C9hD,GAAa,QAEf,IACR;AAED,WAAA1lB;AAAA,MACEukE;AAAA,MACA,CAACtkE,IAAU6C,OAAa;AACtB,QAAI7C,OAAa6C,MAAY7C,MAAYumE,GAAsB,SAC/DpC,EAAsBiD,EAAW,KAAK;AAAA,MACxC;AAAA,MACA,EAAE,WAAW,GAAA;AAAA,IAAM,GAGrBrnE;AAAA,MACEwmE;AAAA,MACA,CAACvmE,IAAU6C,OAAa;AACtB,QAAI7C,OAAa6C,MAAY7C,MAC7BmkE,EAAsBiD,EAAW,KAAK;AAAA,MACxC;AAAA,MACA,EAAE,WAAW,GAAA;AAAA,IAAM,GAGrB5gE,GAAU,MAAM;AACd,MAAAo/C,GAAsB,MAAA;AAAA,IACxB,CAAC,GAEDrkD,EAAa;AAAA,MACX,iBAAA8kE;AAAA,IAAA,CACD;MAICloE,EAwNM,OAAA;AAAA,QAvNJ,OAAK4D,GAAA,CAAC,kBAAgB,EAAA,0BACcokE,GAAA,MAAA,CAAQ,CAAA;AAAA,QAC3C,OAAKntC,GAAA,EAAA,OAAW77B,EAAA,QAAQA,EAAA,QAAK,OAAU,QAAS,UAAYA,EAAA,WAAWA,EAAA,WAAQ,OAAU,QAAS;AAAA,MAAA;QAEnGgB,EA4IM,OA5INE,IA4IM;AAAA,UA1IIlB,EAAA,SADRQ,EAAA,GAAAC,EASK,MATLuF,IASK;AAAA,gBALAhG,EAAA,KAAK,GAAA,CAAA;AAAA,YAEAA,EAAA,YADNQ,EAAA,GAAAC,EAGA,QAHA6F,EAGA;;UAEJtF,EAgIM,OAhINuF,IAgIM;AAAA,YA/HOyiE,GAAA,SAAYhpE,EAAA,eAAvBS,EAKM,OAAA+F,IAAA;AAAA,cAJJ5F,EAGE6D,IAAA;AAAA,gBAFC,IAAIrC,EAAA;AAAA,gBACJ,OAAOpC,EAAA,OAAO;AAAA,cAAA;;YAGnBgB,EAwHM,OAAA,MAAA;AAAA,cAtHIhB,EAAA,iBADRQ,EAAA,GAAAC,EAwCM,OAxCNgG,IAwCM;AAAA,gBAnCI6jE,EAAA,UAAqBtqE,EAAA,uBAD7BM,EASE+F,IAAA;AAAA;kBAPA,OAAM;AAAA,kBACL,MAAuBmlB,GAAA,UAAS3mB,EAAAyjB,EAAA,EAAa,QAA0BzjB,EAAA7B,CAAA,EAAC,iCAAA,IAAwD6B,EAAA7B,CAAA,EAAC,iCAAA;AAAA,kBAKjI,SAAO4kE;AAAA,gBAAA;gBAEVhnE,EAMOyF,IAAA;AAAA,kBALL,OAAM;AAAA,kBACL,SAAOwhE;AAAA,gBAAA;6BAER,MAA2F;AAAA,oBAA/EyC,EAAA,SAAZ9pE,EAAA,GAAAC,EAA2F,cAA1DoE,EAAA7B,CAAA,EAAC,6CAAA,CAAA,GAAA,CAAA,MAClCxC,EAAA,GAAAC,EAAsE,cAAtDoE,EAAA7B,CAAA,EAAC,yCAAA,CAAA,GAAA,CAAA;AAAA,kBAAA;;;gBAEnBpC,EAcmByoE,IAAA;AAAA,2BAbb;AAAA,kBAAJ,KAAIP;AAAA,8BACKtB,EAAA;AAAA,mEAAAA,EAAe,QAAAhjE;AAAA,kBACvB,kBAAgBkjE,EAAA,OAAa;AAAA,kBAC7B,QAAQ7iE,EAAAqiD,EAAA;AAAA,kBACR,aAAWriD,EAAAoiD,EAAA;AAAA,kBACZ,aAAU;AAAA,kBACT,cAAaghB;AAAA,gBAAA;kBAEH,WAAStnE,EAClB,CAEO,EAAA,OAHsB2oE,SAAc;AAAA,oBAC3C1oE,EAEOyF,UAFOijE,EAAc,CAAA,GAAA;AAAA,iCAC1B,MAA8C;AAAA,4BAA3CzkE,EAAA7B,CAAA,EAAC,qCAAA,CAAA,GAAA,CAAA;AAAA,sBAAA;;;;;;gBAKFhD,EAAA,YADRQ,EAAA,GAAAC,EAGE,QAHFk+C,EAGE;0BAEJr+C,EA6EO+F,IAAA;AAAA;gBA3EL,SAAQ;AAAA,gBACR,MAAK;AAAA,gBACL,MAAA;AAAA,gBACC,UAAU2iE,GAAA;AAAA,gBACV,WAAYG,IAAoB,CAAA,MAAA,CAAA;AAAA,cAAA;2BAEjC,MAAoC;AAAA,kBAApCvoE,EAAoCE,IAAA,EAA7B,MAAK,uBAAqB;AAAA,kBACjCF,EAKWmG,IAAA;AAAA,oBAJT,WAAU;AAAA,oBACV,UAAS;AAAA,kBAAA;+BAET,MAA+C;AAAA,0BAA5ClC,EAAA7B,CAAA,EAAC,sCAAA,CAAA,GAAA,CAAA;AAAA,oBAAA;;;kBAENpC,EA6DQoG,IAAA;AAAA,gCA5DGmgE,EAAA;AAAA,qEAAAA,EAAe,QAAA3iE;AAAA,oBACxB,WAAU;AAAA,oBACV,UAAS;AAAA,oBACT,OAAA;AAAA,kBAAA;+BAEA,MAsDQ;AAAA,sBAtDR5D,EAsDQU,IAAA,MAAA;AAAA,mCArDN,MAoDQ;AAAA,0BApDRV,EAoDQqG,IAAA,EApDD,SAAQ,aAAS;AAAA,uCACtB,MAWY;AAAA,8BAVJqjE,EAAA,UAAqBtqE,EAAA,uBAD7BM,EAWY4G,IAAA;AAAA;gCATT,SAAO0gE;AAAA,8BAAA;2CAER,MAMiB;AAAA,kCANjBhnE,EAMiBuG,IAAA,MAAA;AAAA,+CALf,MAIE;AAAA,0CAHAqkB,GAAA,UAAS3mB,EAAAyjB,EAAA,EAAa,QAAkCzjB,EAAA7B,CAAA,EAAC,iCAAA,IAAgE6B,EAAA7B,CAAA,EAAC,iCAAA,CAAA,GAAA,CAAA;AAAA,oCAAA;;;;;;8BAMhIpC,EAKYsG,IAAA,EALA,SAAO2gE,MAAa;AAAA,2CAC9B,MAGiB;AAAA,kCAHjBjnE,EAGiBuG,IAAA,MAAA;AAAA,+CAFf,MAA2F;AAAA,sCAA/EmjE,EAAA,SAAZ9pE,EAAA,GAAAC,EAA2F,cAA1DoE,EAAA7B,CAAA,EAAC,6CAAA,CAAA,GAAA,CAAA,MAClCxC,EAAA,GAAAC,EAAsE,cAAtDoE,EAAA7B,CAAA,EAAC,yCAAA,CAAA,GAAA,CAAA;AAAA,oCAAA;;;;;;8BAGrBpC,EAoBmByoE,IAAA;AAAA,4CAnBR7B,EAAA;AAAA,iFAAAA,EAAe,QAAAhjE;AAAA,gCACvB,kBAAgBkjE,EAAA,OAAa;AAAA,gCAC7B,QAAQ7iE,EAAAqiD,EAAA;AAAA,gCACR,aAAWriD,EAAAoiD,EAAA;AAAA,gCACZ,aAAU;AAAA,gCACT,cAAaghB;AAAA,8BAAA;gCAEH,WAAStnE,EAClB,CASY,EAAA,OAViB2oE,SAAc;AAAA,kCAC3C1oE,EASYsG,IAAA;AAAA,oCART,UAAmC1C,OAAW;AAAmC,sCAAA8kE,GAAe,QAAQ9kE,EAAM,GAA8B2iE,EAAA,QAAe;AAAA;;+CAO5J,MAA8C;AAAA,0CAA3CtiE,EAAA7B,CAAA,EAAC,qCAAA,CAAA,GAAA,CAAA;AAAA,oCAAA;;;;;;8BAKFsnE,EAAA,cADRhqE,EAWY4G,IAAA;AAAA;gCATT,SAAOgkE;AAAA,8BAAA;2CAER,MAMiB;AAAA,kCANjBtqE,EAMiBuG,IAAA,MAAA;AAAA,+CALf,MAIE;AAAA,0CAHAqkB,GAAA,UAAS3mB,EAAAyjB,EAAA,EAAa,QAAkCzjB,EAAA7B,CAAA,EAAC,0CAAA,IAAyE6B,EAAA7B,CAAA,EAAC,qCAAA,CAAA,GAAA,CAAA;AAAA,oCAAA;;;;;;;;;;;;;;;;;;;;;QAavJhC,EA+CM,OA/CNukE,IA+CM;AAAA,UA9CJ3kE,EAiBOynD,IAAA;AAAA,YAhBJ,YAAUxjD,EAAAw1B,EAAA;AAAA,YACV,KAAK4tB,EAAA;AAAA,YACL,OAAOjoD,EAAA;AAAA,YACP,QAAQA,EAAA;AAAA,YACT,OAAA;AAAA,YACA,aAAU;AAAA,YACV,OAAM;AAAA,UAAA;YAEK,eACT,MAKM;AAAA,cALNgB,EAKM,OALN6oD,IAKM;AAAA,gBAJJjpD,EAGEO,IAAA;AAAA,kBAFA,eAAA;AAAA,kBACA,OAAM;AAAA,gBAAA;;;;;UAMNqqB,GAAA,SADRhrB,EAAA,GAAAC,EAkBM,OAlBNqpD,IAkBM;AAAA,YAdOt+B,GAAA,UAAS3mB,EAAAyjB,EAAA,EAAa,cAAjC7nB,EAMM,OAAAspD,IAAA;AAAA,cALJnpD,EAIEE,IAAA;AAAA,gBAHA,MAAK;AAAA,gBACL,MAAK;AAAA,gBACL,OAAM;AAAA,cAAA;kBAGM0qB,GAAA,UAAS3mB,EAAAyjB,EAAA,EAAa,cAAtC7nB,EAMM,OAAAupD,IAAA;AAAA,cALJppD,EAIEE,IAAA;AAAA,gBAHA,MAAK;AAAA,gBACL,MAAK;AAAA,gBACL,OAAM;AAAA,cAAA;;;UAIZF,EAQE2oE,IAAA;AAAA,YAPA,SAAQ;AAAA,YACR,aAAA;AAAA,YACC,QAAQ1kE,EAAAqiD,EAAA;AAAA,YACR,aAAWriD,EAAAoiD,EAAA;AAAA,YACX,aAAWojB,EAAA,SAAoBrB,GAAA;AAAA,YAC/B,WAAUD;AAAA,YACV,UAASziB;AAAA,UAAA;;QAGd9kD,GAGEC,GAAA,QAAA,UAAA,EADC,YAAa2oE,EAAA,OAAa;AAAA,QAE7BxpE,EAiB4B4oE,IAAA;AAAA,mBAhBtB;AAAA,UAAJ,KAAIP;AAAA,sBACK5B,EAAA;AAAA,2DAAAA,EAAc,QAAA7iE;AAAA,UACtB,oBAAkBoiE,EAAA;AAAA,UAClB,QAAQ5mE,EAAA;AAAA,UACR,QAAQsnE,EAAA;AAAA,UACR,SAASC,EAAA;AAAA,UACT,aAAA1e;AAAA,UACA,aAAY6f;AAAA,UACZ,WAAUD;AAAA,QAAA;UAEA,SAAO9nE,EAChB,CAGE,EAAA,YAJ8ByqE,SAAW;AAAA,YAC3C5pE,GAGEC,GAAA,QAAA,WAAA,EADC,YAAa2pE,IAAW;AAAA,UAAA;;;;MAKjCxqE,EAUEyqE,IAAA;AAAA,oBATSjE,EAAA;AAAA,yDAAAA,EAAiB,QAAA5iE;AAAA,QACzB,mBAAiBxE,EAAA;AAAA,QACjB,kBAAgBA,EAAA;AAAA,QAChB,aAAW;AAAA,QACX,aAAW;AAAA,QACZ,eAAY;AAAA,QACX,wBAAsBmrE,GAAA;AAAA,QACtB,wBAAsBA,GAAA,UAAkBtmE,EAAAyjB,EAAA,EAAa,SAAK;AAAA,QAC1D,aAAY8/C;AAAA,MAAA;MAGPvjE,EAAA2jE,EAAA,MAAgBxoE,EAAA,iBADxBM,EAIEopE,IAAA;AAAA;QAFC,aAAW1pE,EAAA;AAAA,QACX,cAAY6E,EAAA8xB,EAAA;AAAA,MAAA;MAGP9xB,EAAAm/D,CAAA,MAAsBhkE,EAAA,YAAY6E,EAAAoiE,CAAA,UAD1C3mE,EASEqpE,IAAA;AAAA;QAPC,aAAW3pE,EAAA;AAAA,QACX,cAAY6E,EAAAoiE,CAAA,EAAwB;AAAA,QACpC,cAAYpiE,EAAAoiE,CAAA,EAAwB;AAAA,QACpC,kBAAgBS,EAAA,OAAa,gBAAY;AAAA,QACzC,QAAQ7iE,EAAAqiD,EAAA;AAAA,QACR,aAAWriD,EAAAoiD,EAAA;AAAA,QACX,WAAU4hB;AAAA,MAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACr6Bf,UAAM9oE,IAAQC,GA+CR0B,IAAOC,GAIPuoE,IAAaliE,GAA8BhI,GAAC,OAA2B,GACvEiqE,IAAajiE,GAA8BhI,GAAC,OAA2B,GACvE6gC,IAASh/B,EAAwD,SAAS,GAG1E,EAAE,WAAA+mB,EAAA,IAAc4J,GAA6BzyB,EAAM,UAAU,GAC7D;AAAA,MACJ,kBAAAirB;AAAA,MACA,sCAAAK;AAAA,MACA,qCAAAW;AAAA,MACA,sCAAAI;AAAA,MACA,uCAAAH;AAAA,IAAA,IACEvB,GAAkB9B,CAAS,GAEzBghD,IAAejzD,GAA4D,MAAS;AAE1F,IAAAtN,GAAU,YAAY;AACpB,YAAMshB,IAAiBX,GAAA;AAEvB,UADA4/C,EAAa,QAAQ,MAAMx9C,EAAqCrsB,EAAM,aAAa,GAC/E6D,EAAYgmE,EAAa,KAAK,GAAG;AACnC,QAAA/oC,EAAO,QAAQ;AACf;AAAA,MACF;AACA,UAAI,CAAC4B,GAAiCmnC,EAAa,KAAK,GAAG;AACzD,QAAA/oC,EAAO,QAAQ;AACf;AAAA,MACF;AACA,YAAMtV,IAA2B,CAAA;AACjC,MAAKZ,EAAe,YAAY,gBAC9BY,EAAS,KAAKP,GAAkB,GAElCO,EAAS,KAAKU,EAAsClsB,EAAM,cAAc,CAAC;AACzE,YAAMquB,IAAgCpC,EAAoC49C,EAAa,MAAM,SAAS;AACtG,MAAIhmE,EAAYwqB,CAA6B,KAC3C7C,EAAS,KAAKF,EAAqCu+C,EAAa,MAAM,SAAS,CAAC;AAElF,UAAI;AACF,cAAM,QAAQ,WAAWr+C,CAAQ;AAAA,MACnC,QAAY;AACV,QAAAsV,EAAO,QAAQ;AAAA,MACjB;AACA,MAAIA,EAAO,UAAU,YAASA,EAAO,QAAQ;AAAA,IAC/C,CAAC,GAED/7B,GAAQ6hE,IAAyBiD,CAAY;AAE7C,UAAMC,IAAiBhoE,EAAkD,IAAI;AAM7E,WAAAuC,EAAa;AAAA,MACX,iBALsB,MAAM;AAC5B,QAAAylE,EAAe,OAAO,gBAAA;AAAA,MACxB;AAAA,IAGE,CACD,aAKShpC,EAAA,UAAM,WADdrgC,KAAAF,EAoBwBgrE,IApBxB14D,GAoBwB;AAAA;eAlBlB;AAAA,MAAJ,KAAIi3D;AAAA,MACI,OAAOK,EAAA;AAAA,+CAAAA,EAAU,QAAA1lE;AAAA,MACjB,OAAOylE,EAAA;AAAA,+CAAAA,EAAU,QAAAzlE;AAAA,IAAA,GACjBzE,GAAK;AAAA,MACZ,mDAA6B2B,EAAI,0BAAA;AAAA,IAAA;MAEvB,QAAMf,EACf,CAGE,EAAA,YAJ6BopE,QAAW;AAAA,QAC1CvoE,GAGEC,EAAA,QAAA,UAAA,EADC,YAAasoE,GAAW;AAAA,MAAA;MAGlB,SAAOppE,EAChB,CAGE,EAAA,YAJ8BopE,QAAW;AAAA,QAC3CvoE,GAGEC,EAAA,QAAA,WAAA,EADC,YAAasoE,GAAW;AAAA,MAAA;;kCAKlBlpC,EAAA,UAAM,gBADnBpgC,EAKM,OALNS,IAGC,4BAED,KAEa2/B,EAAA,UAAM,2BADnBpgC,EAKM,OALNuF,IAGC,2BAED,WACA1F,EAKEa,IAAA;AAAA;MAHC,MAAM;AAAA,MACN,OAAO;AAAA,MACR,eAAA;AAAA,IAAA;;;;;;;;;;ACtJJ,UAAMO,IAAOC,GAIP,EAAE,GAAAqB,EAAA,IAAM/C,EAAA,GAER2oD,IAAsB,CAAC/lD,MAAsB;AACjD,MAAIA,KACJnB,EAAK,SAAS;AAAA,IAChB;;;kBAIEpB,EA0BUwI,IAAA;AAAA,QAzBP,eAAa9I,EAAA;AAAA,QACb,aAAW;AAAA,QACZ,OAAA;AAAA,QACC,uBAAoB4oD;AAAA,MAAA;mBAErB,MAmBQ;AAAA,UAnBK5oD,EAAA,mBAAbM,EAmBQgB,IAAA,EAAA,KAAA,KAAA;AAAA,uBAlBN,MAEiB;AAAA,cAFjBV,EAEiBmI,IAAA;AAAA,gBAFA,mCAAW6/C,EAAmB,EAAA;AAAA,cAAA;2BAC7C,MAA6C;AAAA,sBAA1C/jD,EAAA7B,CAAA,EAAC,oCAAA,CAAA,GAAA,CAAA;AAAA,gBAAA;;;cAENpC,EAKYoI,IAAA,MAAA;AAAA,2BAJV,MAGE;AAAA,kBAHFxH,GAGEC,EAAA,QAAA,WAAA,EADC,OAAOzB,EAAA,OAAK;AAAA,gBAAA;;;cAGjBY,EAQeqI,IAAA,MAAA;AAAA,2BAPb,MAAW;AAAA,kBAAXrI,EAAWsI,EAAA;AAAA,kBACXtI,EAKeuI,GAAA;AAAA,oBAJb,WAAQ;AAAA,oBACP,kCAAYy/C,EAAmB,EAAA,GAAA,CAAA,MAAA,CAAA;AAAA,kBAAA;+BAEhC,MAA8B;AAAA,0BAA3B/jD,EAAA7B,CAAA,EAAC,qBAAA,CAAA,GAAA,CAAA;AAAA,oBAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtCd,UAAMjD,IAAQC,GAkCRymD,IAAeE,GAA2B5mD,EAAM,UAAU,GAC1D,EAAE,yBAAAoqE,EAAA,IAA4BvjB,GAAgBH,CAAY,GAE1D8kB,IAAW1pE,EAAuB,IAAI,GACtComD,IAAcpmD,EAAI,EAAE,GACpBmf,IAASnf,EAAI,EAAK,GAElBqmD,IAAc,CAACsjB,MACflmE,GAAOkmE,EAAM,SAAS,WAAW,IAAUnxC,KAC3Cl2B,GAASpE,EAAM,QAAQ,KAAKoE,GAASpE,EAAM,SAAS,IAC/CoqE,EAAwBqB,EAAM,SAAS,aAAazrE,EAAM,UAAUA,EAAM,SAAS,IAErFoqE,EAAwBqB,EAAM,SAAS,WAAW,GAGrDC,IAAgB,MAAM;AAC1B,MAAIF,EAAS,OAAO,SAAS,aAC3BvqD,EAAO,QAAQ;AAAA,IAEnB,GAEM0qD,IAAgB,MAAM;AAC1B,MAAA1qD,EAAO,QAAQ;AAAA,IACjB,GAEMwK,IAAOrrB,EAAkC,MACtCorE,EAAS,OAAO,SAAS,cAAc/iB,GAAa,QAAQlgC,GAAa,QAAQA,GAAa,KACtG;AAED,WAAA1lB;AAAA,MACE,CAAC,MAAM7C,EAAM,KAAK;AAAA,MAClB,OAAO,CAAC0qE,CAAQ,MAAM;AACpB,QAAAc,EAAS,QAAQ,MACjBtjB,EAAY,QAAQ5tB,IAChBowC,MACFc,EAAS,QAAQvmE,GAAUylE,CAAQ,GACnCxiB,EAAY,QAAQC,EAAYuiB,CAAQ;AAAA,MAE5C;AAAA,MACA,EAAE,WAAW,GAAA;AAAA,IAAK;MAMVzqE,EAAA,cADRS,EAKK,MALLS,IAKKD,EADAjB,EAAA,KAAK,GAAA,CAAA;MAEVgB,EAqDM,OAAA;AAAA,QApDJ,WAAM,qBAAmB,EAAA,kBACGuqE,SAAU,SAAS,SAAA,CAAQ,CAAA;AAAA,QACtD,WAAYE,GAAa,CAAA,MAAA,CAAA;AAAA,MAAA;QAGlBzrE,EAAA,mBADRS,EAOC,OAAA;AAAA;UALC,KAAI;AAAA,UACH,KAAKwnD,EAAA;AAAA,UACL,OAAOjoD,EAAA;AAAA,UACP,QAAQA,EAAA;AAAA,UACR,UAAOA,EAAA,WAAW;AAAA,QAAA,0BAErBM,EAoBO+nD,IAAA;AAAA;UAlBJ,YAAUxjD,EAAAw1B,EAAA;AAAA,UACV,KAAK4tB,EAAA;AAAA,UACL,OAAOjoD,EAAA;AAAA,UACP,QAAQA,EAAA;AAAA,UACT,OAAA;AAAA,UACA,aAAU;AAAA,UACV,OAAK4E,GAAA,CAAC,kBACE5E,EAAA,WAAW,CAAA;AAAA,UAClB,gBAAcA,EAAA,qBAAqB,SAAYA,EAAA;AAAA,QAAA;UAErC,eACT,MAKM;AAAA,YALNgB,EAKM,OALNsF,IAKM;AAAA,cAJJ1F,EAGEO,IAAA;AAAA,gBAFA,eAAA;AAAA,gBACA,OAAM;AAAA,cAAA;;;;;QAMNqqB,EAAA,SADRhrB,EAAA,GAAAC,EAkBM,OAlBN8F,IAkBM;AAAA,UAdOilB,EAAA,UAAS3mB,EAAAyjB,EAAA,EAAa,cAAjC7nB,EAMM,OAAA+F,IAAA;AAAA,YALJ5F,EAIEE,IAAA;AAAA,cAHA,MAAK;AAAA,cACL,MAAK;AAAA,cACL,OAAM;AAAA,YAAA;gBAGM0qB,EAAA,UAAS3mB,EAAAyjB,EAAA,EAAa,cAAtC7nB,EAMM,OAAAgG,IAAA;AAAA,YALJ7F,EAIEE,IAAA;AAAA,cAHA,MAAK;AAAA,cACL,MAAK;AAAA,cACL,OAAM;AAAA,YAAA;;;;MAKdU,GAGEC,EAAA,QAAA,UAAA,EADC,OAAO8pE,EAAA,OAAQ;AAAA,MAElB3qE,EAW0B+qE,IAAA;AAAA,oBAVf3qD,EAAA;AAAA,sDAAAA,EAAM,QAAAxc;AAAA,QACd,OAAO+mE,EAAA;AAAA,QACP,WAAUG;AAAA,MAAA;QAEA,SAAO/qE,EAChB,CAGE,EAAA,OAJyByqE,QAAW;AAAA,UACtC5pE,GAGEC,EAAA,QAAA,WAAA,EADC,OAAO2pE,GAAW;AAAA,QAAA;;;;;IC5JdQ,KAAgB3hD,GAAY,oBAAoB,MAAM;AACjE,QAAM29B,IAAS/lD,EAAsB,EAAE,GACjCgqE,IAAchqE,EAAI,CAAC;AAEzB,WAASiqE,EAAU7pE,GAAwB;AACzC,IAAA2lD,EAAO,QAAQ3lD;AAAA,EACjB;AAEA,WAAS8pE,EAAU9pE,GAAwB;AACzC,IAAA2lD,EAAO,MAAM,KAAK,GAAG3lD,CAAI;AAAA,EAC3B;AAEA,WAAS+pE,EAA2BC,GAAqB;AACvD,IAAIA,IAAcJ,EAAY,UAC5BA,EAAY,QAAQI;AAAA,EAExB;AAEA,WAASC,EAAmBplE,GAAe;AACzC,IAAA8gD,EAAO,MAAM,OAAO9gD,GAAO,CAAC;AAAA,EAC9B;AAEA,WAASmI,IAAQ;AACf,IAAA24C,EAAO,QAAQ,CAAA;AAAA,EACjB;AAEA,SAAO;AAAA,IACL,QAAAA;AAAA,IACA,aAAAikB;AAAA,IACA,WAAAC;AAAA,IACA,WAAAC;AAAA,IACA,4BAAAC;AAAA,IACA,oBAAAE;AAAA,IACA,OAAAj9D;AAAA,EAAA;AAEJ,CAAC;;;;;;;;ACrBD,UAAMlP,IAAQC,GAQR0B,IAAOC,GAKPwqE,IAAaP,GAAA,GACb,EAAE,GAAA5oE,EAAA,IAAM/C,EAAA,GAER,EAAE,mBAAA02B,EAAA,IAAsBC,GAAA,GACxB9D,IAAkBjxB,EAAa,EAAE,GACjCgkC,IAAQ1lC,EAAS,MAAMgsE,EAAW,OAAOpsE,EAAM,KAAK,CAAC,GACrD2oD,IAAsBvoD,EAAS,MAC/BmF,GAAOugC,EAAM,KAAK,KAAKjiC,EAAYiiC,EAAM,KAAK,IAAU,KACrDA,EAAM,MAAM,mBAAmB,EACvC,GAEK,EAAE,IAAAvB,EAAA,IAAOsB,GAAmBC,GAAO6iB,CAAmB,GAEtDG,IAAc,MAAM;AACxB,MAAIvjD,GAAOugC,EAAM,KAAK,KAAKjiC,EAAYiiC,EAAM,KAAK,KAClDnkC,EAAK,aAAamkC,EAAM,MAAM,IAAI,KAAK;AAAA,IACzC,GAEMumC,IAAa,MAAM;AACvB,MAAA1qE,EAAK,cAAc3B,EAAM,KAAK;AAAA,IAChC;sBAIES,EAAA,GAAAC,EA0FM,OA1FNS,IA0FM;AAAA,MAzFJF,EAwFM,OAxFNgF,IAwFM;AAAA,QAvFJhF,EAsFM,OAtFNsF,IAsFM;AAAA,UArFJtF,EAQM,OARNuF,IAQM;AAAA,YAPJ3F,EAMEE,IAAA;AAAA,cALC,OAAK8D,GAAA;AAAA,iBAAmBC,EAAAwnE,EAAA,CAAY,GAAA;AAAA,gBAAwB,CAAAxnE,EAAAwnE,EAAA,mBAA8BrsE,EAAA;AAAA,cAAA;cAI3F,MAAK;AAAA,YAAA;;UAGTY,EAGEmoD,IAAA;AAAA,YAFC,eAAaljB,EAAA,MAAM;AAAA,YACnB,OAAOA,EAAA;AAAA,UAAA;UAEVjlC,EAiBO0M,IAAA,EAjBD,OAAA,MAAK;AAAA,uBACT,MAeO;AAAA,cAfP1M,EAeO2M,IAAA,EAfD,OAAM,uCAAmC;AAAA,2BAC7C,MAOO;AAAA,kBAPP3M,EAOOyF,IAAA;AAAA,oBANL,SAAQ;AAAA,oBACR,MAAK;AAAA,oBACL,OAAM;AAAA,oBACL,WAAYwiD,GAAW,CAAA,MAAA,CAAA;AAAA,kBAAA;+BAExB,MAAyC;AAAA,0BAAtChkD,EAAA7B,CAAA,EAAC,gCAAA,CAAA,GAAA,CAAA;AAAA,oBAAA;;;kBAENpC,EAKE0rE,IAAA;AAAA,oBAJA,SAAQ;AAAA,oBACP,MAAM;AAAA,oBACP,gBAAa;AAAA,oBACZ,gBAAeF;AAAA,kBAAA;;;;;;;UAItBxrE,EASO0M,IAAA,EATD,OAAA,MAAK;AAAA,uBACT,MAOO;AAAA,cAPP1M,EAOO2M,IAAA,MAAA;AAAA,2BANL,MAKE;AAAA,kBALF3M,EAKEkoD,IAAA;AAAA,gCAJSjjB,EAAA,MAAM,MAAM;AAAA,kEAAZA,EAAA,MAAM,MAAM,cAAWrhC;AAAA,oBAC/B,OAAOK,EAAA7B,CAAA,EAAC,+CAAA;AAAA,oBACR,MAAM6B,EAAA7B,CAAA,EAAC,8CAAA;AAAA,oBACP,GAAG6B,EAAAy/B,CAAA,EAAG,OAAO,MAAM;AAAA,kBAAA;;;;;;;UAKlBuB,EAAA,MAAM,uBADdvlC,EAqBOgN,IAAA;AAAA;YAnBL,OAAA;AAAA,UAAA;uBAEA,MAgBO;AAAA,cAhBP1M,EAgBO2M,IAAA,MAAA;AAAA,2BAfL,MAcqB;AAAA,kBAdrB3M,EAcqB25C,IAAA;AAAA,oBAbnB,SAAQ;AAAA,oBACR,QAAO;AAAA,kBAAA;+BAEP,MASE;AAAA,sBATF35C,EASE08C,IAAA;AAAA,wBARS,YAAAzX,EAAA,MAAM;AAAA,wBAAN,uBAAAvhC,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAE,MAAAqhC,EAAA,MAAM,aAAUrhC;AAAA,wBACxB,cAAYK,EAAA8xB,CAAA;AAAA,wBACZ,OAAO9xB,EAAA7B,CAAA,EAAC,qCAAA;AAAA,wBACR,oBAAkB8vB,EAAA;AAAA,wBACnB,WAAQ;AAAA,wBACR,WAAA;AAAA,wBACA,UAAA;AAAA,wBACC,oBAAkBjuB,EAAA6gC,EAAA;AAAA,sBAAA;;;;;;;;;sBAK3BplC,EAWOgN,IAAA;AAAA;YATL,OAAA;AAAA,UAAA;uBAEA,MAMO;AAAA,cANP1M,EAMO2M,IAAA,MAAA;AAAA,2BALL,MAIE;AAAA,kBAJF3M,EAIEkoD,IAAA;AAAA,gCAHSjjB,EAAA,MAAM,MAAM;AAAA,kEAAZA,EAAA,MAAM,MAAM,SAAMrhC;AAAA,oBAC1B,OAAOK,EAAA7B,CAAA,EAAC,0CAAA;AAAA,oBACR,GAAG6B,EAAAy/B,CAAA,EAAG,OAAO,MAAM;AAAA,kBAAA;;;;;;;UAI1B1jC,EASO0M,IAAA,MAAA;AAAA,uBARL,MAOO;AAAA,cAPP1M,EAOO2M,IAAA,MAAA;AAAA,2BANL,MAKE;AAAA,kBALF3M,EAKE6U,IAAA;AAAA,gCAJSowB,EAAA,MAAM,MAAM;AAAA,kEAAZA,EAAA,MAAM,MAAM,aAAUrhC;AAAA,oBAC9B,OAAOK,EAAA7B,CAAA,EAAC,8CAAA;AAAA,oBACT,SAAQ;AAAA,oBACR,gBAAA;AAAA,kBAAA;;;;;;;;;;;;;;;;;;;wGCpFRshE,KAAqB,KAAK,GAoF1BiI,KAA6B;;;;;;;;;;;;;;;;AAjHnC,UAAMxsE,IAAQC,GAkBR0B,IAAOC,GAaP6qE,IAAarsE,EAAS;AAAA,MAC1B,MAAM;AACJ,eAAOJ,EAAM;AAAA,MACf;AAAA,MACA,IAAI8C,GAAU;AACZ,QAAAnB,EAAK,qBAAqB,EAAE,GAAG3B,EAAM,YAAY,GAAG8C,GAAU;AAAA,MAChE;AAAA,IAAA,CACD,GAEK08B,IAAWp/B,EAAS;AAAA,MACxB,MAAM;AACJ,eAAOJ,EAAM;AAAA,MACf;AAAA,MACA,IAAI8C,GAAU;AACZ,QAAAnB,EAAK,mBAAmB,CAAC,GAAGmB,CAAQ,CAAC;AAAA,MACvC;AAAA,IAAA,CACD,GAEKs9B,IAAUhgC,EAAS;AAAA,MACvB,MAAM;AACJ,eAAOJ,EAAM;AAAA,MACf;AAAA,MACA,IAAI8C,GAAU;AACZ,QAAAnB,EAAK,kBAAkB,CAAC,GAAGmB,CAAQ,CAAC;AAAA,MACtC;AAAA,IAAA,CACD,GAEK2rB,IAAoBruB,EAAS;AAAA,MACjC,MAAM;AACJ,eAAOJ,EAAM;AAAA,MACf;AAAA,MACA,IAAI8C,GAAU;AACZ,QAAAnB,EAAK,4BAA4BmB,CAAQ;AAAA,MAC3C;AAAA,IAAA,CACD,GAEK,EAAE,GAAAG,EAAA,IAAM/C,EAAA,GAERykE,IAA2D;AAAA,MAC/D18B,GAAsB;AAAA,MACtBA,GAAsB;AAAA,IAAA,GAElB28B,IAAaxkE,EAAS,MACnBukE,EAAmB,SAAS3kE,EAAM,KAAK,MAAM,CACrD,GACK6kE,IAAUzkE,EAAS,MAChBJ,EAAM,KAAK,WAAWioC,GAAsB,OACpD,GACKkH,IAAO/uC,EAAS,MACb,CAACJ,EAAM,wBAAwBA,EAAM,KAAK,WAAWioC,GAAsB,QACnF,GACK88B,IAAY3kE,EAAS,MAClBJ,EAAM,KAAK,WAAWioC,GAAsB,SACpD,GACK+8B,IAAiB5kE,EAAS,MACvBJ,EAAM,KAAK,SAAS,eAC5B,GAEK0sE,IAAWtsE,EAAS,MACjBJ,EAAM,KAAK,eAAeA,EAAM,KAAK,aAAa,MAAM,MAChE,GACK+oB,IAAY3oB,EAAS,MAClBJ,EAAM,KAAK,SACnB,GACK8gC,IAAS1gC,EAAS,MACjBJ,EAAM,OACJA,EAAM,KAAK,cADMsoB,EAEzB,GAEKqkD,IAAa,MAAM;AACvB,MAAAhrE,EAAK,cAAc,EAAE,OAAO3B,EAAM,OAAO,MAAMA,EAAM,MAAM,UAAUA,EAAM,SAAA,CAAU;AAAA,IACvF,GAEM4sE,IAA2D;AAAA,MAC/D3kC,GAAsB;AAAA,MACtBA,GAAsB;AAAA,MACtBA,GAAsB;AAAA,IAAA,GAElB4kC,IAAazsE,EAAS,MACnBwsE,EAAmB,SAAS5sE,EAAM,KAAK,MAAM,CACrD,GAGK8sE,IAAchrE,EAAI,EAAK,GACvBirE,IAA+DjrE,EAAI,MAAS,GAE5EkrE,IAAa,YAAY;AAC7B,MAAIznE,GAAOvF,EAAM,KAAK,OAAO,KAC7B2B,EAAK,cAAc3B,EAAM,KAAK,OAAO;AAAA,IACvC,GAEMigD,IAAU,MAAM;AACpB,MAAIjgD,EAAM,KAAK,WACb2B,EAAK,eAAe,EAAE,OAAO3B,EAAM,OAAO,SAASA,EAAM,KAAK,SAAS;AAAA,IAE3E,GAGM,EAAE,iBAAAw8C,GAAiB,gBAAAD,MAAmBD,GAA6BvzB,EAAU,OAAO/oB,EAAM,SAAS,GAEnG,EAAE,gBAAA28C,GAAgB,eAAAD,MAAkBD,GAA4B1zB,EAAU,OAAO/oB,EAAM,SAAS;AAEtG,WAAA6C;AAAA,MACE,MAAM7C,EAAM,KAAK;AAAA,MACjB,OAAO8C,MAAa;AAClB,QAAIA,MAAamlC,GAAsB,aAAanlC,MAAamlC,GAAsB,cACrF,aAAa8kC,EAAa,KAAK,GAC/BA,EAAa,QAAQ,WAAW,MAAM;AACpC,WAAIjqE,MAAamlC,GAAsB,aAAanlC,MAAamlC,GAAsB,gBACrF6kC,EAAY,QAAQ;AAAA,QAExB,GAAGN,KAA6B,GAAI,KAC3B1pE,MAAamlC,GAAsB,aAC5C,aAAa8kC,EAAa,KAAK,GAC/BA,EAAa,QAAQ,QACrBD,EAAY,QAAQ;AAAA,MAExB;AAAA,MACA,EAAE,WAAW,GAAA;AAAA,IAAK,GAGpB70D,GAAY,MAAM;AAChB,mBAAa80D,EAAa,KAAK,GAC/BA,EAAa,QAAQ;AAAA,IACvB,CAAC,mBAICxsE,EAsNOiN,IAAA;AAAA,MArNL,KAAI;AAAA,MACJ,IAAG;AAAA,MACH,IAAG;AAAA,MACH,IAAG;AAAA,MACH,MAAK;AAAA,IAAA;iBAEL,MA8MM;AAAA,QA9MNvM,EA8MM,OA9MNE,IA8MM;AAAA,UA7MJF,EA4MM,OA5MNgF,IA4MM;AAAA,YA3MJhF,EA+CM,OA/CNsF,IA+CM;AAAA,cA9CJ1F,EAcEkjE,IAAA;AAAA,gBAbC,cAAYh7C,EAAA;AAAA,gBACZ,gBAAc+X,EAAA;AAAA,gBACd,KAAK4rC,EAAA;AAAA,gBACN,oBAAiB;AAAA,gBAChB,kBAAgB3H,EAAA;AAAA,gBAChB,mBAAiBH,EAAA;AAAA,gBACjB,gBAAcC,EAAA;AAAA,gBACd,aAAW11B,EAAA;AAAA,gBACX,sBAAoB61B,EAAA;AAAA,gBACpB,kBAAgB/kE,EAAA,KAAK,SAAS;AAAA,gBAC/B,iBAAA;AAAA,gBACA,OAAA;AAAA,gBACC,gBAAcskE;AAAA,cAAA;cAGTtkE,EAAA,KAAK,MAAM,YADnBQ,KAAAC,EA8BM,OA9BN8F,IA8BM;AAAA,gBAvBJ3F,EAKEE,IAAA;AAAA,kBAJA,MAAK;AAAA,kBACL,OAAM;AAAA,kBACN,MAAK;AAAA,kBACL,OAAM;AAAA,gBAAA;gBAERE,EAEM,OAFNwF,IAEMvF,EADD4D,EAAA7B,CAAA,EAAC,iCAAA,CAAA,GAAA,CAAA;AAAA,gBAGEhD,EAAA,KAAK,MAAM,QAAQ,eAD3BS,EAIE,OAAA;AAAA;kBAFA,OAAM;AAAA,kBACN,aAAAQ,EAAQjB,EAAmB,KAAd,MAAM,OAAO;AAAA,gBAAA,mBAEZA,EAAA,KAAK,MAAM,wBAAwB6E,EAAA89B,EAAA,EAAoB,aAAvEliC,EAEM,OAAAu9B,IAAA;AAAA,kBADJp9B,EAAoEypD,IAAA;AAAA,oBAA1C,QAAQrqD,EAAA,KAAK,MAAM;AAAA,kBAAA;4BAE/CS,EAKM,OALNw9B,IAKMh9B,EADD4D,EAAA7B,CAAA,EAAC,2CAAA,CAAA,GAAA,CAAA;AAAA,cAAA;;YAIVpC,EAiEO0M,IAAA;AAAA,cAhEL,OAAA;AAAA,cACA,OAAM;AAAA,YAAA;yBAEN,MA4DO;AAAA,gBA5DP1M,EA4DO2M,IAAA,MAAA;AAAA,6BA3DL,MA0DM;AAAA,oBA1DNvM,EA0DM,OA1DN29C,IA0DM;AAAA,sBAzDJ39C,EASM,OAAA,MAAA;AAAA,wBARJJ,EAOOyF,IAAA;AAAA,0BANL,MAAK;AAAA,0BACL,SAAQ;AAAA,0BACP,UAAQ,CAAGrG,EAAA,KAAK;AAAA,0BAChB,WAAY+sE,GAAU,CAAA,MAAA,CAAA;AAAA,wBAAA;qCAEvB,MAAyC;AAAA,gCAAtCloE,EAAA7B,CAAA,EAAC,gCAAA,CAAA,GAAA,CAAA;AAAA,0BAAA;;;;sBAGRhC,EA8CM,OAAA,MAAA;AAAA,wBA7COhB,EAAA,KAAK,oBAAhBS,EAA+B,OAAAkkD,EAAA;wBAEvB3kD,EAAA,KAAK,gBADbM,EAKE0sE,IAAA;AAAA;0BAHC,IAAIhtE,EAAA,KAAK;AAAA,0BACV,YAAS;AAAA,0BACT,MAAK;AAAA,wBAAA;wBAGC6sE,EAAA,cADRvsE,EAeO+F,IAAA;AAAA;0BAbL,MAAA;AAAA,0BACA,MAAK;AAAA,0BACL,SAAQ;AAAA,0BACP,UAAUrG,EAAA;AAAA,0BACV,WAAYggD,GAAO,CAAA,MAAA,CAAA;AAAA,wBAAA;qCAEpB,MAA4B;AAAA,4BAA5Bp/C,EAA4BE,IAAA,EAArB,MAAK,eAAa;AAAA,4BACzBF,EAKWmG,IAAA;AAAA,8BAJT,WAAU;AAAA,8BACV,UAAS;AAAA,4BAAA;yCAET,MAAgC;AAAA,oCAA7BlC,EAAA7B,CAAA,EAAC,uBAAA,CAAA,GAAA,CAAA;AAAA,8BAAA;;;;;;wBAIA4pE,EAAA,cADRtsE,EAcO+F,IAAA;AAAA;0BAZL,MAAA;AAAA,0BACA,MAAK;AAAA,0BACL,SAAQ;AAAA,0BACP,WAAYqmE,GAAU,CAAA,MAAA,CAAA;AAAA,wBAAA;qCAEvB,MAAyC;AAAA,4BAAzC9rE,EAAyCE,IAAA,EAAlC,MAAK,4BAA0B;AAAA,4BACtCF,EAKWmG,IAAA;AAAA,8BAJT,WAAU;AAAA,8BACV,UAAS;AAAA,4BAAA;yCAET,MAA+B;AAAA,oCAA5BlC,EAAA7B,CAAA,EAAC,sBAAA,CAAA,GAAA,CAAA;AAAA,8BAAA;;;;;;wBAIA6pE,EAAA,cADRvsE,EAMEgsE,IAAA;AAAA;0BAJA,SAAQ;AAAA,0BACR,gBAAa;AAAA,0BACb,oBAAiB;AAAA,0BAChB,gBAAahoE,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAE,MAAE9C,EAAI,cAAe1B,EAAA,KAAK;AAAA,wBAAA;;;;;;;;;YAO1CA,EAAA,KAAK,qBADbM,EASOgN,IAAA;AAAA;cAPL,OAAA;AAAA,cACA,OAAM;AAAA,YAAA;yBAEN,MAGO;AAAA,gBAHP1M,EAGO2M,IAAA,EAHD,OAAM,UAAM;AAAA,6BAChB,MAAiD;AAAA,oBAA9CtH,EAAAhF,EAAA4D,EAAA7B,CAAA,+CAA8C,OAAE/B,EAAGjB,OAAK,YAAY,IAAG,KAC1E,CAAA;AAAA,oBAAYA,EAAA,KAAK,MAAM,aAAvBS,EAA6E,QAAAqkD,IAAhD,OAAO7jD,EAAG4D,EAAAs4B,EAAA,EAAYn9B,EAAA,KAAK,KAAK,IAAI,CAAA,IAAI,KAAC,CAAA;;;;;;;YAIlEA,EAAA,KAAK,oBADbM,EAOOgN,IAAA;AAAA;cALL,OAAM;AAAA,YAAA;yBAEN,MAEO;AAAA,gBAFP1M,EAEO2M,IAAA,EAFD,OAAM,UAAM;AAAA,6BAChB,MAA6D;AAAA,wBAA1D1I,EAAA7B,CAAA,EAAC,oDAAA,CAAA,GAAA,CAAA;AAAA,kBAAA;;;;;;YAGRpC,EAsEQ8jD,IAAA;AAAA,cAtEA,UAAQ,CAAG1kD,EAAA,KAAK;AAAA,YAAA;yBACtB,MAoE0B;AAAA,gBAnElBA,EAAA,aADRM,EAoE0B88C,IAAA;AAAA;8BAlEfovB,EAAA;AAAA,gEAAAA,EAAU,QAAAhoE;AAAA,kBAClB,cAAYxE,EAAA;AAAA,kBACZ,cAAY8oB,EAAA;AAAA,gBAAA;kBAEF,kBACT,MAuBO;AAAA,oBAtBCjkB,EAAAy3C,CAAA,UADRh8C,EAuBOgN,IAAA;AAAA;sBArBL,OAAA;AAAA,sBACA,OAAM;AAAA,oBAAA;iCAEN,MAiBO;AAAA,wBAjBP1M,EAiBO2M,IAAA,MAAA;AAAA,qCAhBL,MAeqB;AAAA,4BAfrB3M,EAeqB25C,IAAA;AAAA,8BAdnB,SAAQ;AAAA,8BACR,QAAO;AAAA,4BAAA;yCAEP,MAUE;AAAA,gCAVF35C,EAUEy8C,IAAA;AAAA,8CATS9d,EAAA;AAAA,gFAAAA,EAAQ,QAAA/6B;AAAA,kCAChB,YAAUxE,EAAA;AAAA,kCACV,cAAYA,EAAA;AAAA,kCACZ,OAAO6E,EAAA7B,CAAA,EAAC,sCAAA;AAAA,kCACT,WAAA;AAAA,kCACA,UAAA;AAAA,kCACC,UAAU6B,EAAA03C,CAAA;AAAA,kCACV,oBAAkB13C,EAAA4gC,EAAA;AAAA,kCAClB,UAAQ,CAAGzlC,EAAA,KAAK;AAAA,gCAAA;;;;;;;;;;oBAMjB6E,EAAA43C,CAAA,UADRn8C,EAwBOgN,IAAA;AAAA;sBAtBL,OAAA;AAAA,sBACA,OAAM;AAAA,oBAAA;iCAEN,MAkBO;AAAA,wBAlBP1M,EAkBO2M,IAAA,MAAA;AAAA,qCAjBL,MAgBqB;AAAA,4BAhBrB3M,EAgBqB25C,IAAA;AAAA,8BAfnB,SAAQ;AAAA,8BACR,QAAO;AAAA,4BAAA;yCAEP,MAWE;AAAA,gCAXF35C,EAWE08C,IAAA;AAAA,8CAVSnd,EAAA;AAAA,gFAAAA,EAAO,QAAA37B;AAAA,kCACf,YAAUxE,EAAA;AAAA,kCACV,OAAO6E,EAAA7B,CAAA,EAAC,qCAAA;AAAA,kCACR,oBAAkBhD,EAAA,KAAK;AAAA,kCACvB,cAAYA,EAAA;AAAA,kCACb,WAAA;AAAA,kCACA,UAAA;AAAA,kCACC,UAAU6E,EAAA63C,CAAA;AAAA,kCACV,oBAAkB73C,EAAA4gC,EAAA;AAAA,kCAClB,UAAQ,CAAGzlC,EAAA,KAAK;AAAA,gCAAA;;;;;;;;;;oBAKzBY,EAUO0M,IAAA;AAAA,sBATL,OAAA;AAAA,sBACA,OAAM;AAAA,oBAAA;iCAEN,MAKO;AAAA,wBALP1M,EAKO2M,IAAA,MAAA;AAAA,qCAJL,MAGE;AAAA,4BAHF3M,EAGE6U,IAAA;AAAA,0CAFS+Y,EAAA;AAAA,4EAAAA,EAAiB,QAAAhqB;AAAA,8BACzB,OAAOK,EAAA7B,CAAA,EAAC,+CAAA;AAAA,4BAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7X7B,UAAMjD,IAAQC,GASR0B,IAAOC,GAMP,EAAE,GAAAqB,EAAA,IAAM/C,EAAA,GAER0jC,IAAmB,CAAC1hC,MAA2C;AACnE,YAAM2iC,IAAU,CAAA;AAChB,MAAAA,EAAQ3iC,EAAK,QAAQ,IAAIA,EAAK,OAC9BP,EAAK,qBAAqB,EAAE,GAAG3B,EAAM,YAAY,GAAG6kC,GAAS;AAAA,IAC/D,GAEMqoC,IAAiB,CAACC,GAAyB9hE,MAAe;AAC9D,MAAA1J,EAAK,kBAAkB,EAAE,WAAW3B,EAAM,WAAW,iBAAAmtE,GAAiB,OAAA9hE,GAAO;AAAA,IAC/E,GACM+hE,IAAe,CAACD,GAAyB9hE,MAAe;AAC5D,MAAA1J,EAAK,gBAAgB,EAAE,WAAW3B,EAAM,WAAW,iBAAAmtE,GAAiB,OAAA9hE,GAAO;AAAA,IAC7E,GAEM,EAAE,qCAAA4gB,EAAA,IAAwCtB,GAAA,GAE1C0D,IAAgCpC,EAAoCjsB,EAAM,SAAS;AACzF,QAAI6D,EAAYwqB,CAA6B;AAC3C,YAAM,IAAI,MAAM,2CAA2C;AAG7D,UAAM2X,IAAW5lC,EAAS,MACjBiuB,EAA8BruB,EAAM,SAAS,CACrD;sBAICS,EAAA,GAAAC,EAkDM,OAlDNS,IAkDM;AAAA,cAjDJT,EAgDO0F,IAAA,MAAAC,GA/Ca2/B,EAAA,OAAQ,CAAnBb,YADT5kC,EAgDOgN,IAAA;AAAA,QA9CJ,KAAK43B,EAAQ;AAAA,QACd,OAAA;AAAA,QACA,OAAM;AAAA,MAAA;mBAEN,MAyCO;AAAA,UAzCPtkC,EAyCO2M,IAAA,MAAA;AAAA,uBAxCL,MAA0C;AAAA,cAA/B23B,EAAQ,WAAW,iBAA9BzkC,EAA0C,OAAAuF,EAAA,MAC1CxF,EAAA,GAAAC,EAsCM,OAtCN6F,IAsCM;AAAA,gBAlCJ1F,EAIEwsE,IAAA;AAAA,kBAHC,QAAQloC;AAAA,kBACR,eAAallC,EAAA,WAAWklC,EAAQ,QAAQ;AAAA,kBACxC,uBAAoBvB;AAAA,gBAAA;gBAEvB/iC,EAcOyF,IAAA;AAAA,kBAbL,MAAA;AAAA,kBACA,MAAK;AAAA,kBACL,SAAQ;AAAA,kBACR,OAAM;AAAA,kBACL,SAAKtF,EAAA,CAAAyD,MAAOyoE,EAAe/nC,EAAQ,UAAUllC,EAAA,WAAWklC,EAAQ,QAAQ,CAAA,GAAA,CAAA,MAAA,CAAA;AAAA,gBAAA;6BAEzE,MAAkD;AAAA,oBAAlDtkC,EAAkDE,IAAA,EAA3C,MAAK,qCAAmC;AAAA,oBAC/CF,EAKWmG,IAAA;AAAA,sBAJT,WAAU;AAAA,sBACV,UAAS;AAAA,oBAAA;iCAET,MAA4D;AAAA,4BAAzDlC,EAAA7B,CAAA,EAAC,mDAAA,CAAA,GAAA,CAAA;AAAA,sBAAA;;;;;;gBAGRpC,EAaOyF,IAAA;AAAA,kBAZL,MAAA;AAAA,kBACA,MAAK;AAAA,kBACL,SAAQ;AAAA,kBACP,SAAKtF,EAAA,CAAAyD,MAAO2oE,EAAajoC,EAAQ,UAAUllC,EAAA,WAAWklC,EAAQ,QAAQ,CAAA,GAAA,CAAA,MAAA,CAAA;AAAA,gBAAA;6BAEvE,MAAyC;AAAA,oBAAzCtkC,EAAyCE,IAAA,EAAlC,MAAK,4BAA0B;AAAA,oBACtCF,EAKWmG,IAAA;AAAA,sBAJT,WAAU;AAAA,sBACV,UAAS;AAAA,oBAAA;iCAET,MAA0D;AAAA,4BAAvDlC,EAAA7B,CAAA,EAAC,iDAAA,CAAA,GAAA,CAAA;AAAA,sBAAA;;;;;;;;;;;;;;;;AC3FX,SAASqqE,GAA6B91B,GAA0B;AACrE,QAAMnM,IAAoBC,GAAA;AAwC1B,SAAO;AAAA,IACL,6BAvCkC,CAClCppC,GACAqrE,IAAe,OACZ;AACH,YAAMv3D,IAAQq1B,EAAkB,cAAcmM,CAAQ;AACtD,eAASxpB,IAAI,GAAGA,IAAIhY,EAAM,QAAQgY,KAAK;AACrC,cAAMrqB,IAAOqS,EAAMgY,CAAC;AACpB,QAAIrqB,EAAK,cAAczB,EAAK,cAE1BqrE,KACA1pE,EAAYF,EAAK,WAAWzB,EAAK,eAAe,CAAC,KACjDyB,EAAK,WAAWzB,EAAK,eAAe,MAAM,QAE1CyB,EAAK,WAAWzB,EAAK,eAAe,IAAIA,EAAK;AAAA,MAEjD;AAAA,IACF;AAAA,IAwBE,sBAtB2B,CAACmJ,GAAYkiE,IAAe,OAAU;AACjE,YAAMv3D,IAAQq1B,EAAkB,cAAcmM,CAAQ;AACtD,eAASxpB,IAAI,GAAGA,IAAIhY,EAAM,QAAQgY,KAAK;AACrC,cAAMrqB,IAAOqS,EAAMgY,CAAC;AACpB,SAAIu/C,KAAgB1pE,EAAYF,EAAK,QAAQ,KAAKA,EAAK,SAAS,WAAW,OACzEA,EAAK,WAAW0H;AAAA,MAEpB;AAAA,IACF;AAAA,IAeE,qBAb0B,CAACA,GAAYkiE,IAAe,OAAU;AAChE,YAAMv3D,IAAQq1B,EAAkB,cAAcmM,CAAQ;AACtD,eAASxpB,IAAI,GAAGA,IAAIhY,EAAM,QAAQgY,KAAK;AACrC,cAAMrqB,IAAOqS,EAAMgY,CAAC;AACpB,SAAIu/C,KAAgB1pE,EAAYF,EAAK,OAAO,KAAKA,EAAK,QAAQ,WAAW,OACvEA,EAAK,UAAU0H;AAAA,MAEnB;AAAA,IACF;AAAA,EAKE;AAEJ;;;;;;;;ACvCA,UAAMrL,IAAQC,GAQRutE,IAAqB1rE,EAAI,EAAE,OAAO,CAAA,GAAI,OAAO,CAAA,GAAI,OAAO,CAAA,GAAI,UAAU,CAAA,GAAI,GAC1E2rE,IAAyB3rE,EAAI,EAAE,GAC/B4rE,IAAwB5rE,EAAI,EAAE,GAE9B,EAAE,GAAAmB,EAAA,IAAM/C,EAAA,GAER28C,IAAS/6C,EAAmB,CAAC,SAAS,CAAC,GAEvCupC,IAAoBC,GAAA,GAGpB,EAAE,6BAAAqiC,GAA6B,qBAAAC,GAAqB,sBAAAC,EAAA,IAAyBP;AAAA,MACjFttE,EAAM;AAAA,IAAA,GAGFktE,IAAiB,CAAChrE,MAA+E;AACrG,MAAAyrE,EAA4BzrE,CAAI;AAAA,IAClC,GACMkrE,IAAe,CAAClrE,MAA+E;AACnG,MAAAyrE,EAA4BzrE,GAAM,EAAI;AAAA,IACxC,GACM4rE,IAAoB,MAAM;AAC9B,MAAAD,EAAqBJ,EAAuB,KAAK;AAAA,IACnD,GACMM,IAAkB,MAAM;AAC5B,MAAAF,EAAqBJ,EAAuB,OAAO,EAAI;AAAA,IACzD,GACMO,IAAmB,MAAM;AAC7B,MAAAJ,EAAoBF,EAAsB,KAAK;AAAA,IACjD,GACMO,IAAiB,MAAM;AAC3B,MAAAL,EAAoBF,EAAsB,OAAO,EAAI;AAAA,IACvD,GACMQ,IAAU,CAACX,IAAe,OAAU;AACxC,iBAAW,CAACJ,GAAiB9hE,CAAK,KAAK,OAAO,QAAQmiE,EAAmB,MAAM,KAAK;AAClF,QAAAG;AAAA,UACE;AAAA,YACE,WAAWplD,GAAa;AAAA,YACxB,iBAAA4kD;AAAA,YACA,OAAA9hE;AAAA,UAAA;AAAA,UAEFkiE;AAAA,QAAA;AAGJ,iBAAW,CAACJ,GAAiB9hE,CAAK,KAAK,OAAO,QAAQmiE,EAAmB,MAAM,KAAK;AAClF,QAAAG;AAAA,UACE;AAAA,YACE,WAAWplD,GAAa;AAAA,YACxB,iBAAA4kD;AAAA,YACA,OAAA9hE;AAAA,UAAA;AAAA,UAEFkiE;AAAA,QAAA;AAGJ,iBAAW,CAACJ,GAAiB9hE,CAAK,KAAK,OAAO,QAAQmiE,EAAmB,MAAM,KAAK;AAClF,QAAAG;AAAA,UACE;AAAA,YACE,WAAWplD,GAAa;AAAA,YACxB,iBAAA4kD;AAAA,YACA,OAAA9hE;AAAA,UAAA;AAAA,UAEFkiE;AAAA,QAAA;AAGJ,iBAAW,CAACJ,GAAiB9hE,CAAK,KAAK,OAAO,QAAQmiE,EAAmB,MAAM,QAAQ;AACrF,QAAAG;AAAA,UACE;AAAA,YACE,WAAWplD,GAAa;AAAA,YACxB,iBAAA4kD;AAAA,YACA,OAAA9hE;AAAA,UAAA;AAAA,UAEFkiE;AAAA,QAAA;AAGJ,UAAIA,GAAc;AAChB,QAAAU,EAAA,GACAF,EAAA;AACA;AAAA,MACF;AACA,MAAAC,EAAA,GACAF,EAAA;AAAA,IACF,GACMK,IAAY,MAAM;AACtB,MAAAX,EAAmB,QAAQ,EAAE,OAAO,IAAI,OAAO,CAAA,GAAI,OAAO,CAAA,GAAI,UAAU,GAAC,GACzEE,EAAsB,QAAQ,CAAA,GAC9BD,EAAuB,QAAQ,CAAA;AAAA,IACjC,GAEMW,IAAahuE,EAAS,MACnBirC,EAAkB,mBAAmBrrC,EAAM,QAAQ,CAC3D;AAED,WAAAsJ,GAAU,MAAM;AACd,MAAI8kE,EAAW,MAAM,CAAC,KACpBvxB,EAAO,MAAM,KAAKuxB,EAAW,MAAM,CAAC,CAAC;AAAA,IAEzC,CAAC,cAIC3tE,EAAA,GAAAC,EA4KM,OA5KNS,IA4KM;AAAA,MA3KJF,EA0KM,OA1KNgF,IA0KM;AAAA,QAzKJpF,EAEQ0rD,IAAA,EAFD,OAAM,wBAAoB;AAAA,qBAC/B,MAAkE;AAAA,YAAlE1rD,EAAkE2rD,IAAA,MAAA;AAAA,yBAA5D,MAAqD;AAAA,oBAAlD1nD,EAAA7B,CAAA,EAAC,4CAAA,CAAA,GAAA,CAAA;AAAA,cAAA;;;;;;QAEZhC,EA4IM,OA5INsF,IA4IM;AAAA,UA3IJtF,EAEM,OAFNuF,IAEMtF,EADD4D,EAAA7B,CAAA,EAAC,kDAAA,CAAA,GAAA,CAAA;AAAA,UAENpC,EAuImBq8C,IAAA;AAAA,wBAtIRL,EAAA;AAAA,0DAAAA,EAAM,QAAAp4C;AAAA,YACf,UAAA;AAAA,YACA,OAAM;AAAA,UAAA;uBAEN,MAiHkB;AAAA,cAjHlB5D,EAiHkBs8C,IAAA;AAAA,gBAhHhB,WAAU;AAAA,gBACT,OAAOr4C,EAAA7B,CAAA,EAAC,8CAAA;AAAA,gBACT,OAAM;AAAA,cAAA;2BAEN,MA2GsB;AAAA,kBA3GtBpC,EA2GsBu8C,IAAA,MAAA;AAAA,+BA1GpB,MAoDO;AAAA,sBApDPv8C,EAoDO0M,IAAA;AAAA,wBAnDL,OAAA;AAAA,wBACA,OAAM;AAAA,sBAAA;mCAEN,MA+CO;AAAA,0BA/CP1M,EA+CO2M,IAAA,MAAA;AAAA,uCA9CL,MA6CqB;AAAA,8BA7CrB3M,EA6CqB25C,IAAA;AAAA,gCA5CnB,SAAQ;AAAA,gCACR,QAAO;AAAA,8BAAA;2CAEP,MAwCM;AAAA,kCAxCNv5C,EAwCM,OAxCNwF,IAwCM;AAAA,oCAvCJxF,EASM,OATNyF,IASM;AAAA,sCARJ7F,EAOEy8C,IAAA;AAAA,oDANSmwB,EAAA;AAAA,sFAAAA,EAAsB,QAAAhpE;AAAA,wCAC9B,OAAOK,EAAA7B,CAAA,EAAC,sCAAA;AAAA,wCACT,WAAA;AAAA,wCACC,cAAYhD,EAAA;AAAA,wCACb,UAAA;AAAA,wCACC,oBAAkB;AAAA,sCAAA;;oCAGvBY,EAcOyF,IAAA;AAAA,sCAbL,MAAA;AAAA,sCACA,MAAK;AAAA,sCACL,SAAQ;AAAA,sCACR,OAAM;AAAA,sCACL,WAAYwnE,GAAiB,CAAA,MAAA,CAAA;AAAA,oCAAA;iDAE9B,MAAkD;AAAA,wCAAlDjtE,EAAkDE,IAAA,EAA3C,MAAK,qCAAmC;AAAA,wCAC/CF,EAKWmG,IAAA;AAAA,0CAJT,WAAU;AAAA,0CACV,UAAS;AAAA,wCAAA;qDAET,MAA4D;AAAA,gDAAzDlC,EAAA7B,CAAA,EAAC,mDAAA,CAAA,GAAA,CAAA;AAAA,0CAAA;;;;;;oCAGRpC,EAaOyF,IAAA;AAAA,sCAZL,MAAA;AAAA,sCACA,MAAK;AAAA,sCACL,SAAQ;AAAA,sCACP,WAAYynE,GAAe,CAAA,MAAA,CAAA;AAAA,oCAAA;iDAE5B,MAAyC;AAAA,wCAAzCltE,EAAyCE,IAAA,EAAlC,MAAK,4BAA0B;AAAA,wCACtCF,EAKWmG,IAAA;AAAA,0CAJT,WAAU;AAAA,0CACV,UAAS;AAAA,wCAAA;qDAET,MAA0D;AAAA,gDAAvDlC,EAAA7B,CAAA,EAAC,iDAAA,CAAA,GAAA,CAAA;AAAA,0CAAA;;;;;;;;;;;;;;;;sBAOhBpC,EAoDO0M,IAAA;AAAA,wBAnDL,OAAA;AAAA,wBACA,OAAM;AAAA,sBAAA;mCAEN,MA+CO;AAAA,0BA/CP1M,EA+CO2M,IAAA,MAAA;AAAA,uCA9CL,MA6CqB;AAAA,8BA7CrB3M,EA6CqB25C,IAAA;AAAA,gCA5CnB,SAAQ;AAAA,gCACR,QAAO;AAAA,8BAAA;2CAEP,MAwCM;AAAA,kCAxCNv5C,EAwCM,OAxCNg9B,IAwCM;AAAA,oCAvCJh9B,EASM,OATNi9B,IASM;AAAA,sCARJr9B,EAOE08C,IAAA;AAAA,oDANSmwB,EAAA;AAAA,sFAAAA,EAAqB,QAAAjpE;AAAA,wCAC7B,OAAOK,EAAA7B,CAAA,EAAC,qCAAA;AAAA,wCACR,cAAYhD,EAAA;AAAA,wCACb,WAAA;AAAA,wCACA,UAAA;AAAA,wCACC,oBAAkB;AAAA,sCAAA;;oCAGvBY,EAcOyF,IAAA;AAAA,sCAbL,MAAA;AAAA,sCACA,MAAK;AAAA,sCACL,SAAQ;AAAA,sCACR,OAAM;AAAA,sCACL,WAAY0nE,GAAgB,CAAA,MAAA,CAAA;AAAA,oCAAA;iDAE7B,MAAkD;AAAA,wCAAlDntE,EAAkDE,IAAA,EAA3C,MAAK,qCAAmC;AAAA,wCAC/CF,EAKWmG,IAAA;AAAA,0CAJT,WAAU;AAAA,0CACV,UAAS;AAAA,wCAAA;qDAET,MAA4D;AAAA,gDAAzDlC,EAAA7B,CAAA,EAAC,mDAAA,CAAA,GAAA,CAAA;AAAA,0CAAA;;;;;;oCAGRpC,EAaOyF,IAAA;AAAA,sCAZL,MAAA;AAAA,sCACA,MAAK;AAAA,sCACL,SAAQ;AAAA,sCACP,WAAY2nE,GAAc,CAAA,MAAA,CAAA;AAAA,oCAAA;iDAE3B,MAAyC;AAAA,wCAAzCptE,EAAyCE,IAAA,EAAlC,MAAK,4BAA0B;AAAA,wCACtCF,EAKWmG,IAAA;AAAA,0CAJT,WAAU;AAAA,0CACV,UAAS;AAAA,wCAAA;qDAET,MAA0D;AAAA,gDAAvDlC,EAAA7B,CAAA,EAAC,iDAAA,CAAA,GAAA,CAAA;AAAA,0CAAA;;;;;;;;;;;;;;;;;;;;;;cAUZmrE,EAAA,MAAW,SAAStpE,EAAAyjB,EAAA,EAAa,KAAK,UAD9ChoB,EAekB48C,IAAA;AAAA;gBAbhB,WAAU;AAAA,gBACT,OAAOr4C,EAAA7B,CAAA,EAAC,uCAAA;AAAA,gBACR,OAAO6B,EAAAyjB,EAAA,EAAa;AAAA,cAAA;2BAErB,MAQsB;AAAA,kBARtB1nB,EAQsBu8C,IAAA,MAAA;AAAA,+BAPpB,MAME;AAAA,sBANFv8C,EAMEwtE,IAAA;AAAA,wBALS,YAAAb,EAAA,MAAmB;AAAA,wBAAnB,uBAAAjpE,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAE,MAAA+oE,EAAA,MAAmB,QAAK/oE;AAAA,wBAChC,cAAYK,EAAAyjB,EAAA,EAAa;AAAA,wBACzB,cAAYtoB,EAAA;AAAA,wBACZ,kBAAkBitE;AAAA,wBAClB,gBAAeE;AAAA,sBAAA;;;;;;;;;;;QAM1BnsE,EAwBM,OAxBN29C,IAwBM;AAAA,UAvBJ/9C,EAOOyF,IAAA;AAAA,YANL,OAAM;AAAA,YACN,SAAQ;AAAA,YACR,MAAK;AAAA,YACJ,kCAAY4nE,EAAO,EAAA,GAAA,CAAA,MAAA,CAAA;AAAA,UAAA;uBAEpB,MAA4D;AAAA,kBAAzDppE,EAAA7B,CAAA,EAAC,mDAAA,CAAA,GAAA,CAAA;AAAA,YAAA;;;UAENpC,EAOOyF,IAAA;AAAA,YANL,OAAM;AAAA,YACN,SAAQ;AAAA,YACR,MAAK;AAAA,YACJ,kCAAY4nE,EAAO,EAAA,GAAA,CAAA,MAAA,CAAA;AAAA,UAAA;uBAEpB,MAA0D;AAAA,kBAAvDppE,EAAA7B,CAAA,EAAC,iDAAA,CAAA,GAAA,CAAA;AAAA,YAAA;;;UAENpC,EAMOyF,IAAA;AAAA,YALL,SAAQ;AAAA,YACR,MAAK;AAAA,YACJ,WAAY6nE,GAAS,CAAA,MAAA,CAAA;AAAA,UAAA;uBAEtB,MAAyD;AAAA,kBAAtDrpE,EAAA7B,CAAA,EAAC,gDAAA,CAAA,GAAA,CAAA;AAAA,YAAA;;;;;;;;;;;;;;;;;;;;AChRd,UAAMjD,IAAQC,GAYR0B,IAAOC,GAIP,EAAE,WAAAinB,EAAA,IAAc4J,GAAA,GAEhB67C,IAAkBxsE,EAAI,EAAK,GAE3BupC,IAAoBC,GAAA,GAEpBijC,IAAOnuE,EAAS,MACbirC,EAAkB,cAAcrrC,EAAM,QAAQ,CACtD,GAEK2sE,IAAa,CAACzqE,MAA6E;AAC/F,MAAAmpC,EAAkB,eAAenpC,EAAK,UAAUA,EAAK,MAAMA,EAAK,KAAK;AAAA,IACvE,GAEMmqE,IAAa,CAACtlE,MAAkB;AACpC,MAAAskC,EAAkB,cAAcrrC,EAAM,UAAU+G,CAAK;AAAA,IACvD,GAEM,EAAE,cAAAs4C,EAAA,IAAiB32C,GAAA,GAEnB8lE,IAAc,OAAOtsE,MAA4C;AACrE,MAAAosE,EAAgB,QAAQ;AACxB,UAAI;AACF,cAAM9/C,IAAQ,MAAMxB,GAAWnE,GAAW3mB,EAAK,OAAO;AACtD,QAAIssB,EAAM,WAAW,gBAAgBnG,GAAe,WAClD,MAAMgjB,EAAkB,mBAAmB7c,EAAM,EAAE,IAC1CA,EAAM,UAAU,eAAe,WAAWmU,GAAuB,YAC1E,MAAM0I,EAAkB,mBAAmB7c,EAAM,IAAIA,EAAM,SAAS,iBAAiBjG,GAAa,KAAK,IAC9FiG,EAAM,UAAU,eAAe,WAAWmU,GAAuB,SAC1E,MAAM0I,EAAkB,gBAAgBnpC,EAAK,SAASssB,EAAM,SAAS,eAAe,UAAU,IAE9F6wB,EAAa,sDAAsD;AAAA,MAEvE,QAAY;AAAA,MAEZ,UAAA;AACE,QAAAivB,EAAgB,QAAQ;AAAA,MAC1B;AAAA,IACF,GAEM,EAAE,qBAAA30C,GAAqB,qBAAAC,EAAA,IAAwBnC,GAAA,GAC/C,EAAE,oBAAAgC,GAAoB,oBAAAC,EAAA,IAAuBxC,GAAA,GAE7Cu3C,IAAsB3sE,EAAwB,IAAI,GAElD4sE,IAA2B,CAAC72D,MAAqB;AACrD,UAAI,CAAC42D,EAAoB,MAAO;AAEhC,YAAM7S,IAAY6S,EAAoB,OAChCE,IAAe,KACfC,IAAmBhT,EAAU,eAAe;AAElD,cAAQ/jD,EAAE,KAAA;AAAA,QACR,KAAK;AACH,UAAA+jD,EAAU,aAAa+S,GACvB92D,EAAE,eAAA;AACF;AAAA,QACF,KAAK;AACH,UAAA+jD,EAAU,aAAa+S,GACvB92D,EAAE,eAAA;AACF;AAAA,QACF,KAAK;AACH,UAAA+jD,EAAU,aAAagT,GACvB/2D,EAAE,eAAA;AACF;AAAA,QACF,KAAK;AACH,UAAA+jD,EAAU,aAAagT,GACvB/2D,EAAE,eAAA;AACF;AAAA,QACF,KAAK;AACH,UAAA+jD,EAAU,YAAY,GACtB/jD,EAAE,eAAA;AACF;AAAA,QACF,KAAK;AACH,UAAA+jD,EAAU,YAAYA,EAAU,cAChC/jD,EAAE,eAAA;AACF;AAAA,MAAA;AAAA,IAEN;AAEA,QAAIg3D;AAEJ,WAAAvlE,GAAU,MAAM;AACd,MAAAilE,EAAK,MAAM,QAAQ,CAAC5qE,MAAS;AAC3B,QAAAg2B,EAAoBh2B,EAAK,QAAQ,GACjC81B,EAAmB91B,EAAK,OAAO;AAAA,MACjC,CAAC,GACDi2B,EAAA,GACAF,EAAA,GAEAm1C,IAAUC,GAAiB,UAAU,WAAWJ,CAAwB;AAAA,IAC1E,CAAC,GAED3oD,GAAgB,MAAM;AACpB,MAAI8oD,KACFA,EAAA;AAAA,IAEJ,CAAC,mBAICnuE,EAyCM,OAAA;AAAA,MAxCJ,OAAKmE,GAAA,CAAC,wBAAsB,EAAA,wCACsB5E,EAAA,gBAAc,CAAA;AAAA,IAAA;MAEhEgB,EA2BM,OA3BNE,IA2BM;AAAA,QA1BJF,EAyBM,OAAA;AAAA,mBAxBA;AAAA,UAAJ,KAAIwtE;AAAA,UACJ,OAAM;AAAA,UACN,OAAA,EAAA,SAAA,OAAA;AAAA,QAAA;UAEA5tE,EAmBO0M,IAAA,EAnBD,OAAM,2DAAuD;AAAA,uBAE/D,MAA6B;AAAA,eAD/B9M,EAAA,EAAA,GAAAC,EAiBE0F,IAAA,MAAAC,GAhBwBkoE,EAAA,OAAI,CAApB5qE,GAAMoD,YADhBxG,EAiBEwuE,IAAA;AAAA,gBAfC,KAAKprE,EAAK;AAAA,gBACH,eAAaA,EAAK;AAAA,gBAAL,uBAAA,CAAAc,MAAAd,EAAK,aAAUc;AAAA,gBAC5B,UAAUd,EAAK;AAAA,gBAAL,qBAAA,CAAAc,MAAAd,EAAK,WAAQc;AAAA,gBACvB,SAASd,EAAK;AAAA,gBAAL,oBAAA,CAAAc,MAAAd,EAAK,UAAOc;AAAA,gBACrB,wBAAsBd,EAAK;AAAA,gBAAL,8BAAA,CAAAc,MAAAd,EAAK,oBAAiBc;AAAA,gBACnD,cAAYxE,EAAA;AAAA,gBACZ,MAAA0D;AAAA,gBACA,OAAAoD;AAAA,gBACA,aAAW9G,EAAA;AAAA,gBACX,0BAAwBA,EAAA;AAAA,gBACxB,oBAAkBquE,EAAA;AAAA,gBAClB,cAAa3B;AAAA,gBACb,cAAaN;AAAA,gBACb,eAAcmC;AAAA,gBACd,cAAWjqE,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAE,MAAE9C,EAAI,cAAe8C,CAAM;AAAA,cAAA;;;;;;MAMvC8pE,EAAA,MAAK,SAAM,KADnB9tE,KAAAC,EAQM,OARNuF,IAQM;AAAA,QAJJpF,EAGEmuE,IAAA;AAAA,UAFC,aAAW/uE,EAAA;AAAA,UACX,cAAYA,EAAA;AAAA,QAAA;;;;;;;;;;;;;;;;;;;;;;;;;AC/IrB,UAAMD,IAAQC,GAYR0B,IAAOC,GAMP,EAAE,mBAAAqiE,GAAmB,oBAAAC,GAAoB,0BAAA+K,EAAA,IAA6B9K,GAAA,GAEtEiI,IAAaP,GAAA,GACb,EAAE,aAAAC,EAAA,IAAgB5yC,GAAYkzC,CAAU,GACxC/gC,IAAoBC,GAAA,GACpB45B,IAAkB9kE,EAAS,MACxBirC,EAAkB,mBAAmBrrC,EAAM,QAAQ,CAC3D,GAEKgW,IAAQ5V,EAAS,MACdirC,EAAkB,cAAcrrC,EAAM,QAAQ,CACtD,GAEKmlE,IAAsB/kE,EAAS,MAC5BirC,EAAkB,uBAAuBrrC,EAAM,QAAQ,CAC/D,GAEKolE,IAAchlE,EAAS,MACpB8kE,EAAgB,QAAQC,EAAoB,KACpD,GAEK+J,IAAa9uE,EAAS,MACnB8kE,EAAgB,UAAUC,EAAoB,KACtD,GAEK,EAAE,GAAAliE,EAAA,IAAM/C,EAAA,GACR,EAAE,cAAA8hB,EAAA,IAAiBC,GAAA,GACnBsiB,IAAKC,GAAa,EAAE,kBAAkB,IAAM,GAC5C,EAAE,eAAAh8B,GAAe,qBAAAD,GAAqB,mBAAAE,EAAA,IAAsBC,GAAA,GAC5D,EAAE,WAAAmgB,EAAA,IAAc4J,GAAA,GAEhBw4B,IAAoBnpD,EAAI,EAAK,GAC7BqtE,IAA4BrtE,EAAI,EAAK,GAErCmjE,IAAgB,YAAY;AAChC,MAAA55B,EAAkB,WAAWrrC,EAAM,QAAQ,GAC3CikE,EAAkB,QAAQ;AAAA,IAC5B,GAEM/Y,IAAS,YAAY;AACzB,YAAMkkB,IAAWp9C,GAAMhc,EAAM,KAAK;AAClC,UAAIo5D,EAAS,WAAW,GAGxB;AAAA,YAFAnkB,EAAkB,QAAQ,IAC1B1mB,EAAG,MAAM,OAAA,GACLA,EAAG,MAAM,UAAU;AACrB,UAAAh8B,EAAA,GACA0iD,EAAkB,QAAQ;AAC1B;AAAA,QACF;AACA,YAAI;AACF,gBAAM79B,GAAyBvE,GAAWumD,CAAQ,GAClD5mE,EAAc,SAAS;AAAA,QACzB,SAASK,GAAO;AACd,kBAAQ,MAAMA,CAAK,GACnBJ,EAAkBI,CAAK;AAAA,QACzB,UAAA;AACE,UAAAoiD,EAAkB,QAAQ;AAAA,QAC5B;AAAA;AAAA,IACF,GAEMokB,IAAc,OAClBC,GACAhiD,MAC8B;AAC9B,YAAMiiD,wBAAuB,IAAA,GACvBC,wBAAuB,IAAA,GACvBC,wBAAiB,IAAA;AACvB,UAAI;AACF,QAAAniD,EAAU,QAAQ,CAACoiD,OAAa;AAC9B,UAAAH,EAAiB,IAAIG,GAAS,IAAI;AAAA,YAChC,aAAa/iE,GAAS+iE,GAAS,YAAY,WAAW,IAAIA,GAAS,WAAW,YAAY,KAAA,IAAS;AAAA,YACnG,WAAWA,GAAS;AAAA,UAAA,CACrB;AAAA,QACH,CAAC,GACDH,EAAiB,QAAQ,CAACI,OAAc;AACtC,UAAAA,GAAU,UAAU,QAAQ,CAAC/zB,OAAa;AACxC,YAAA4zB,EAAiB,IAAI5zB,EAAQ;AAAA,UAC/B,CAAC;AAAA,QACH,CAAC,GACG4zB,EAAiB,OAAO,MACP,MAAMj5C,GAAqB1N,GAAW7oB,EAAM,WAAW,CAAC,GAAGwvE,CAAgB,CAAC,GACpF,QAAQ,CAAC14C,OAAW;AAC7B,UAAA24C,EAAW,IAAI34C,GAAO,IAAIA,GAAO,IAAI;AAAA,QACvC,CAAC;AAAA,MAEL,SAASjf,IAAG;AACV,QAAApP,EAAkBoP,EAAC;AAAA,MACrB;AAMA,aAJ8By3D,EAAW;AAAA,QACvC,CAACh7B,OAAc,CAAC/uC,GAAO+uC,GAAU,OAAO,KAAK,CAAC/uC,GAAO+uC,GAAU,MAAM;AAAA,MAAA,EAG1C,IAAI,CAACA,OAAc;AAC9C,QAAAw3B,EAAY;AACZ,cAAMzG,KAAckK,EAAiB,IAAIj7B,GAAU,OAAQ,GAAG,aACxDs7B,KAAYL,EAAiB,IAAIj7B,GAAU,OAAQ,GAAG,WACtDu7B,KAAwB,CAAA;AAC9B,eAAID,MACFA,GAAU,QAAQ,CAACh0B,OAAa;AAC9B,gBAAM9P,KAAO2jC,EAAW,IAAI7zB,EAAQ;AACpC,UAAI,CAAC/3C,EAAYioC,EAAI,KAAKA,GAAK,KAAA,EAAO,SAAS,KAC7C+jC,GAAY,KAAK/jC,EAAI;AAAA,QAEzB,CAAC,GAGI;AAAA,UACL,KAAK+T,GAAA;AAAA,UACL,OAAO;AAAA,YACL,aAAawlB,MAAe;AAAA,YAC5B,QAAQwK,GAAY,KAAK,IAAI;AAAA,UAAA;AAAA,UAE/B,OAAO;AAAA,YACL,YAAY;AAAA,UAAA;AAAA,UAEd,KAAK;AAAA,YACH,OAAOv7B,GAAU;AAAA,YACjB,gBAAgB;AAAA,YAChB,WAAWt0C,EAAM;AAAA,UAAA;AAAA,UAEnB,UAAU8rE,EAAY;AAAA,UACtB,YAAY8D,MAAa,CAAA;AAAA,UACzB,gBAAgB,CAAC,EAAEA,MAAaA,GAAU,WAAW;AAAA,UACrD,SAASt7B,GAAU,WAAW;AAAA,QAAA;AAAA,MAElC,CAAC;AAAA,IACH,GAEM8vB,IAAiB,YAAY;AACjC,YAAMgL,IAAWp9C,GAAMhc,EAAM,KAAK;AAClC,UAAIo5D,EAAS,WAAW,GAGxB;AAAA,YAFAD,EAA0B,QAAQ,IAClC5qC,EAAG,MAAM,OAAA,GACLA,EAAG,MAAM,UAAU;AACrB,UAAAh8B,EAAA,GACA4mE,EAA0B,QAAQ;AAClC;AAAA,QACF;AACA,YAAI;AACF,gBAAMvmE,IAAM,MAAMwkB,GAAyBvE,GAAWumD,CAAQ,GACxDU,IAAS,MAAMT,EAAYD,GAAUxmE,CAAG;AAC9C,UAAAjH,EAAK,WAAWmuE,CAAM;AAAA,QACxB,SAASjnE,GAAO;AACd,UAAAJ,EAAkBI,CAAK;AAAA,QACzB,UAAA;AACE,UAAAsmE,EAA0B,QAAQ;AAAA,QACpC;AAAA;AAAA,IACF,GAEMh2C,IAAmBrG,GAAA,GACnB,EAAE,SAAAzd,GAAS,QAAA4L,GAAQ,mBAAAiS,EAAA,IAAsBgG,GAAYC,CAAgB,GAErE6zC,IAAa,OAAOn4D,MAAc;AACtC,UAAI;AACF,QAAAskB,EAAiB,SAAS,IAAI,GAC9B9jB,EAAQ,QAAQ,IAChB4L,EAAO,QAAQjhB,EAAM,UACrBkzB,EAAkB,QAAQ,IAC1BiG,EAAiB,SAAS,MAAMnM,GAAWnE,GAAWhU,CAAE,CAAC;AAAA,MAC3D,SAASgD,GAAG;AACV,QAAApP,EAAkBoP,CAAC;AAAA,MACrB,UAAA;AACE,QAAAxC,EAAQ,QAAQ;AAAA,MAClB;AAAA,IACF;;;kBAIE9U,EAyJUwI,IAAA;AAAA,QAxJP,eAAa;AAAA,QACd,YAAA;AAAA,QACA,YAAA;AAAA,QACA,OAAM;AAAA,MAAA;mBAEN,MAkJQ;AAAA,UAlJRlI,EAkJQU,IAAA,MAAA;AAAA,uBAjJN,MAgJM;AAAA,cAhJNN,EAgJM,OAhJNE,IAgJM;AAAA,gBA/IJF,EAsIM,OAtINgF,IAsIM;AAAA,kBArIJpF,EA8HW+lB,IAAA;AAAA,oBA7HT,OAAM;AAAA,oBACL,OAAO9hB,EAAAkd,CAAA;AAAA,oBACR,SAAQ;AAAA,oBACP,QAAQ;AAAA,kBAAA;+BAET,MAeM;AAAA,sBAfN/gB,EAeM,OAfNsF,IAeM;AAAA,wBAdJtF,EAaM,OAAA,MAAA;AAAA,0BAXImkE,EAAA,cADR1kE,EAKM,OALN8F,IAKMtF,EADD4D,EAAA7B,CAAA,EAAC,8BAAA,CAAA,GAAA,CAAA,WAENvC,EAKM,OALN+F,IAKMvF,EADD4D,EAAA7B,CAAA,EAAC,kCAAA,CAAA,GAAA,CAAA;AAAA,wBAAA;;sBAIVpC,EAAWsI,EAAA;AAAA,sBAEHi8D,EAAA,SADR3kE,EAAA,GAAAC,EAYM,OAZNgG,IAYM;AAAA,wBARJ7F,EAMEO,IAAA;AAAA,0BALA,eAAA;AAAA,0BACA,OAAM;AAAA,0BACN,MAAK;AAAA,0BACL,OAAM;AAAA,0BACN,OAAM;AAAA,wBAAA;wBAERH,EAA0G,OAAA,MAAAC,EAAlG4D,KAAC,kCAAA,CAAA,IAAuC,QAAIqgE,EAAA,QAAmB,CAAA,IAAO,MAACjkE,EAAGgkE,EAAA,KAAe,GAAA,CAAA;AAAA,sBAAA;sBAEnGjkE,EAyFM,OAzFNg9B,IAyFM;AAAA,2BAxFJp9B,EAIEyf,IAAA;AAAA,0BAFA,UAAA;AAAA,0BACA,OAAM;AAAA,wBAAA;+BAFE8kD,EAAA,KAAW;AAAA,wBAAA;wBAKb8J,EAAA,cADR3uE,EAUcuI,GAAA;AAAA;0BARX,QAAQ;AAAA,0BACT,OAAM;AAAA,0BACN,SAAQ;AAAA,0BACP,SAASqmE,EAAA;AAAA,0BACT,UAAUlkB,EAAA;AAAA,0BACV,WAAYmZ,GAAc,CAAA,MAAA,CAAA;AAAA,wBAAA;qCAE3B,MAA8C;AAAA,gCAA3Ct/D,EAAA7B,CAAA,EAAC,qCAAA,CAAA,GAAA,CAAA;AAAA,0BAAA;;;wBAENpC,EAiBOyF,IAAA;AAAA,0BAhBL,SAAQ;AAAA,0BACP,QAAQ;AAAA,0BACR,OAAO;AAAA,0BACR,OAAM;AAAA,0BACN,MAAA;AAAA,0BACC,SAAS2kD,EAAA;AAAA,0BACT,UAAUkkB,EAAA;AAAA,0BACV,WAAYjkB,GAAM,CAAA,MAAA,CAAA;AAAA,wBAAA;qCAEnB,MAAiC;AAAA,4BAAjCrqD,EAAiCE,IAAA,EAA1B,MAAK,oBAAkB;AAAA,4BAC9BF,EAKWmG,IAAA;AAAA,8BAJT,WAAU;AAAA,8BACV,UAAS;AAAA,4BAAA;yCAET,MAAsC;AAAA,oCAAnClC,EAAA7B,CAAA,EAAC,6BAAA,CAAA,GAAA,CAAA;AAAA,8BAAA;;;;;;wBAGRpC,EAyBa8lE,IAAA;AAAA,0BAxBV,kBAAgB1mE,EAAA;AAAA,0BAChB,QAAQA,EAAA;AAAA,0BACR,aAAWA,EAAA;AAAA,0BACZ,UAAA;AAAA,0BACC,cAAWsE,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAE,MAAE9C,EAAI,gBAAiB8C,CAAM;AAAA,wBAAA;0BAE9B,WAAS7D,EAClB,CAeO,EAAA,OAhBsB2oE,QAAc;AAAA,4BAC3C1oE,EAeOyF,IAfPuM,GAeO;AAAA,8BAdL,UAAS;AAAA,8BACT,MAAA;AAAA,8BACA,SAAQ;AAAA,8BACP,QAAQ;AAAA,8BACR,OAAO;AAAA,4BAAA,GACA02D,CAAc,GAAA;AAAA,yCAEtB,MAAyB;AAAA,gCAAzB1oE,EAAyBE,IAAA,EAAlB,MAAK,YAAU;AAAA,gCACtBF,EAKWmG,IAAA;AAAA,kCAJT,WAAU;AAAA,kCACV,UAAS;AAAA,gCAAA;6CAET,MAAqC;AAAA,wCAAlClC,EAAA7B,CAAA,EAAC,4BAAA,CAAA,GAAA,CAAA;AAAA,kCAAA;;;;;;;;;wBAKZpC,EAGEyf,IAAA;AAAA,0BAFA,UAAA;AAAA,0BACA,OAAM;AAAA,wBAAA;wBAERzf,EAiBOyF,IAAA;AAAA,0BAhBJ,QAAQ;AAAA,0BACR,OAAO;AAAA,0BACP,QAAQxB,EAAAo/D,CAAA;AAAA,0BACR,SAASp/D,EAAAo/D,CAAA,IAAkB,SAAA;AAAA,0BAC3B,OAAOp/D,EAAAo/D,CAAA,IAAkB,cAAA;AAAA,0BAC1B,OAAM;AAAA,0BACN,MAAA;AAAA,0BACC,WAAYp/D,EAAAmqE,CAAA,GAAwB,CAAA,MAAA,CAAA;AAAA,wBAAA;qCAErC,MAAqC;AAAA,4BAArCpuE,EAAqCE,IAAA,EAA9B,MAAK,wBAAsB;AAAA,4BAClCF,EAKWmG,IAAA;AAAA,8BAJT,WAAU;AAAA,8BACV,UAAS;AAAA,4BAAA;yCAET,MAAqD;AAAA,oCAAlDlC,EAAA7B,CAAA,EAAC,4CAAA,CAAA,GAAA,CAAA;AAAA,8BAAA;;;;;;wBAGRpC,EAKE0kE,IAAA;AAAA,0BAJA,WAAQ;AAAA,0BACP,eAAa;AAAA,0BACb,gBAAcH,EAAA;AAAA,0BACd,WAASH;AAAA,wBAAA;;;;;kBAIhBpkE,EAKEkvE,IAAA;AAAA,oBAJC,aAAW9vE,EAAA;AAAA,oBACX,cAAYA,EAAA;AAAA,oBACZ,mBAAiB6E,EAAAo/D,CAAA;AAAA,oBACjB,cAAa8I;AAAA,kBAAA;;gBAGlBnsE,EAOE2oE,IAAA;AAAA,kBANA,SAAQ;AAAA,kBACR,aAAA;AAAA,kBACA,cAAA;AAAA,kBACC,QAAQvpE,EAAA;AAAA,kBACR,aAAWA,EAAA;AAAA,kBACX,UAAOsE,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAE,MAAE9C,EAAI,UAAW8C,CAAM;AAAA,gBAAA;;;;;;;;;;uDCvVnCurE,KAAmB;;;;;;;AAXzB,UAAMhwE,IAAQC,GAOR0B,IAAOC,GAKPqf,IAASnf,EAAI,EAAK,GAClBmuE,IAAqBnuE,EAAI,EAAK,GAC9BouE,IAAYpuE,EAAY,EAAE,GAE1B,EAAE,GAAAmB,EAAA,IAAM/C,EAAA,GAERgnE,IAA0B/jE;AAAA,MAC9ByjE;AAAA,MACA;AAAA,IAAA;AAGF,QAAI/iE,EAAYqjE,CAAuB,KAAKrjE,EAAYqjE,EAAwB,KAAK;AACnF,YAAM,IAAI,MAAM,mFAAmF;AAGrG,UAAM77B,IAAoBC,GAAA,GAEpB6kC,IAAwB/vE,EAAS,MAC9BirC,EAAkB,mBAAmBrrC,EAAM,QAAQ,CAC3D,GAEKowE,IAAuBhwE,EAAS,MAC7B+vE,EAAsB,UAAUH,EACxC,GAEKK,IAAa,MAAM;AACvB,MAAApvD,EAAO,QAAQ;AAAA,IACjB,GAEMqvD,IAAkB,YAAY;AAClC,UAAIzsE,EAAYqjE,CAAuB,KAAKrjE,EAAYqjE,EAAwB,KAAK;AACnF;AAEF,MAAA+I,EAAmB,QAAQ;AAC3B,YAAMh4B,IAAQi4B,EAAU,MAAM,MAAM,GAAGF,KAAmBG,EAAsB,KAAK;AACrF,YAAM9kC,EAAkB;AAAA,QACtBrrC,EAAM;AAAA,QACNknE,EAAwB,MAAM;AAAA,QAC9BA,EAAwB,MAAM;AAAA,QAC9BjvB;AAAA,MAAA,GAEFi4B,EAAU,QAAQ,CAAA,GAClBD,EAAmB,QAAQ,IAC3BhvD,EAAO,QAAQ,IACftf,EAAK,UAAU;AAAA,IACjB,GAEM4uE,IAAiB,MAAM;AAC3B,MAAAL,EAAU,QAAQ,CAAA,GAClB7kC,EAAkB,qBAAqBrrC,EAAM,QAAQ,GACrDihB,EAAO,QAAQ;AAAA,IACjB;AAWA,WAAA5c,EAAa;AAAA,MACX,OAVoB,CAAC4zC,MAAkB;AAEvC,YADAi4B,EAAU,QAAQj4B,GACdA,EAAM,SAASk4B,EAAsB,QAAQH,IAAkB;AACjE,UAAAK,EAAA;AACA;AAAA,QACF;AACA,QAAAC,EAAA;AAAA,MACF;AAAA,IAGS,CACR;;kBAIC/vE,EA0CUwI,IAAA;AAAA,oBAzCCkY,EAAA;AAAA,sDAAAA,EAAM,QAAAxc;AAAA,QACd,OAAO;AAAA,MAAA;mBAER,MAqCQ;AAAA,UApCAwc,EAAA,cADR1gB,EAqCQgB,IAAA;AAAA;YAnCN,WAAQ;AAAA,UAAA;uBAER,MAEiB;AAAA,cAFjBV,EAEiBmI,IAAA,EAFA,YAAWunE,KAAc;AAAA,2BACxC,MAAsD;AAAA,sBAAnDzrE,EAAA7B,CAAA,EAAC,6CAAA,CAAA,GAAA,CAAA;AAAA,gBAAA;;;cAENpC,EAcYoI,IAAA,MAAA;AAAA,2BAbV,MAEI;AAAA,kBAFKmnE,EAAA,cAAT1vE,EAEI,KAAAS,IAAAD,EADC4D,EAAA7B,CAAA,EAAC,+CAAA,EAAA,OAAyD+sE,GAAA,CAAgB,CAAA,GAAA,CAAA,WAE/EtvE,EASI,KAAAuF,IAAA;AAAA,oBARCC,EAAAhF,EAAA4D,EAAA7B,CAAA,EAAC,iDAAA,EAAA,OAA2DitE,EAAA,MAAU,OAAA,MAAY,KACrF,CAAA;AAAA,oBAAYC,EAAA,QAAqB,UAAjCzvE,EAES,QAAA6F,IAAArF,EADP4D,EAAA7B,CAAA,EAAC,wDAAA,EAAA,OAAkEktE,EAAA,MAAA,CAAqB,CAAA,GAAA,CAAA;sBACjF,MACTjvE,EAAG4D,EAAA7B,CAAA,EAAC,mDAAA,EAAA,OAA6D+sE,IAAgB,CAAA,GAAA,CAAA;AAAA,oCAAM/uE,EAAI,MAAA,MAAA,MAAA,EAAA;AAAA,oCAAAA,EAAI,MAAA,MAAA,MAAA,EAAA;AAAA,oBAAAiF,EAAA,MAC/FhF,EACE4D,EAAA7B,CAAA,EAAC,qDAAA,EAAA,OAA+D+sE,KAAmBG,EAAA,MAAA,CAAqB,CAAA,GAAA,CAAA;AAAA,kBAAA;;;;cAI9GtvE,EAceqI,IAAA,MAAA;AAAA,2BAbb,MAAW;AAAA,kBAAXrI,EAAWsI,EAAA;AAAA,kBACXtI,EAEeuI,GAAA;AAAA,oBAFA,WAAYmnE,GAAc,CAAA,MAAA,CAAA;AAAA,kBAAA;+BACvC,MAA+B;AAAA,0BAA5BzrE,EAAA7B,CAAA,EAAC,sBAAA,CAAA,GAAA,CAAA;AAAA,oBAAA;;;kBAGGmtE,EAAA,0BADT7vE,EAQcuI,GAAA;AAAA;oBANX,SAASmnE,EAAA;AAAA,oBACT,WAAYK,GAAe,CAAA,MAAA,CAAA;AAAA,kBAAA;+BAE5B,MAEE;AAAA,0BADAxrE,EAAA7B,CAAA,EAAC,qDAAA,EAAA,OAA+D+sE,KAAmBG,EAAA,MAAA,CAAqB,CAAA,GAAA,CAAA;AAAA,oBAAA;;;;;;;;;;;;;;ICzGvGK,KAAgB,CAC3Bp/D,GACAq/D,GACAj7C,IAAc,IACdlkB,IAAuB,IACvBsmB,IAAmB,MACnB10B,GACAqO,GACAnP,IAA8B,CAAA,MAEvB,IAAI,QAAQ,CAACqa,GAASC,MAAW;AACtC,QAAMg0D,IAAkC,EAAE,QAAAD,EAAA;AAC1C,EAAIj7C,MAAgB,OAClBk7C,EAAY,MAAMj7C,GAAqBD,GAAalkB,CAAS,IAE1D/L,GAAOqyB,CAAM,MAChB84C,EAAY,OAAO,KAAK,UAAU94C,CAAM,IAE1CxmB,EAAA,EACG,QAAQ,EAAE,GAAGhP,GAAS,GAAGsuE,GAAa,EACtC,KAAK,CAAC9nE,MACA8sB,GAAkB9sB,EAAI,MAAM,IAG7BA,EAAI,OACC6T,EAAQ7T,EAAI,IAAI,IAErBA,EAAI,WAAW+sB,KACVlZ,EAAQ,IAAS,IAEnBC,EAAO,IAAIsS,IAAgB,IARzBtS,EAAO,IAAIkZ,GAAyBhtB,EAAI,MAAM,CAAC,CASzD,EACA,MAAM,CAACoiB,MACF0D,GAA8B1D,CAAG,IAC5BtO,EAAO,IAAIiS,GAAsB3D,GAAKA,EAAI,QAAQ,GAAG,CAAC,IAE3D4D,GAAoC5D,CAAG,IAClCtO,EAAO,IAAImS,GAAuB7D,GAAK9nB,GAAQqO,GAAQyZ,CAAG,CAAC,IAEhE6K,GAA0C7K,CAAG,IACxCtO,EAAO,IAAIoZ,GAA6B9K,GAAK9nB,GAAQqO,GAAQyZ,CAAG,CAAC,IAEtE8D,GAA4C9D,CAAG,IAC1CtO,EAAO,IAAIqS,GAA+B/D,GAAKA,CAAG,CAAC,IAGrDtO,EAAO,IAAIsS,GAAehE,CAAG,CAAC,CACtC;AACL,CAAC,GChEG2lD,KAAY,IAELC,KAA0C,OACrDx/D,GACAy/D,MACG;AACH,QAAMC,IAAkB,MAAM,KAAKD,EAAW,SAAS,EAAE,QAAQ,CAAC,CAAC/jD,GAAWikD,CAAM,MAC3EC,GAAWD,GAAQJ,EAAS,EAAE;AAAA,IAAI,CAAC/lC,MACxCqmC,GAAiD7/D,GAAQ,oBAAI,IAAI,CAAC,CAAC0b,GAAW8d,CAAK,CAAC,CAAC,CAAC;AAAA,EAAA,CAEzF;AAGD,UADwB,MAAM,QAAQ,IAAIkmC,CAAe,GAClC,KAAA;AACzB,GAEaI,KAA0C,OACrD9/D,GACAy/D,MACG;AACH,QAAMC,IAAkB,MAAM,KAAKD,EAAW,SAAS,EAAE,QAAQ,CAAC,CAAC/jD,GAAWikD,CAAM,MAC3EC,GAAWD,GAAQJ,EAAS,EAAE;AAAA,IAAI,CAAC/lC,MACxCqmC,GAAiD7/D,uBAAY,IAAI,CAAC,CAAC0b,GAAW8d,CAAK,CAAC,CAAC,GAAG,GAAG,EAAI;AAAA,EAAA,CAElG;AAGD,UADwB,MAAM,QAAQ,IAAIkmC,CAAe,GAClC,KAAK,CAACK,MAAUA,EAAM,SAAS,CAAC;AACzD,GAEMF,KAAmD,OACvD7/D,GACAy/D,GACAO,GACAC,MACG;AACH,QAAMC,IAAgB,MAAM,QAAQ;AAAA,IAClC,MAAM,KAAKT,EAAW,QAAA,CAAS,EAAE,IAAI,CAAC,CAAC/jD,GAAWikD,CAAM,MAAM;AAC5D,YAAMQ,IAAiBF,IAAkB,yBAAyB;AAClE,aAAOb;AAAA,QACLp/D;AAAA,QACA;AAAA,QACA,+DACG2/D,EAAO,KAAK,GAAG,CAAC,UAAUK,MAAe,SAAYA,IAAaL,EAAO,MAAM,GAAGQ,CAAc;AAAA,QACnG,EAAE,WAAAzkD,EAAA;AAAA,QACF,CAAA;AAAA,QACA9D;AAAA,QACAL;AAAAA,MAAA;AAAA,IAEJ,CAAC;AAAA,EAAA,GAGG6oD,wBAAiD,IAAA;AACvD,SAAAF,EAAc,QAAQ,CAAC1oE,MAAQ;AAC7B,IAAAA,EAAI,KAAK,QAAQ,CAACjF,MAAS;AACzB,MAAK6tE,EAAqB,IAAI7tE,EAAK,OAAO,KACxC6tE,EAAqB,IAAI7tE,EAAK,SAAS,CAAA,CAAE,GAE3C6tE,EAAqB,IAAI7tE,EAAK,OAAO,EAAG,KAAKA,EAAK,EAAE;AAAA,IACtD,CAAC;AAAA,EACH,CAAC,IAEoB,MAAM,QAAQ;AAAA,IACjC,MAAM,KAAK6tE,EAAqB,QAAA,CAAS,EAAE;AAAA,MAAI,CAAC,CAAC1kD,GAAWikD,CAAM,MAChEhjD,GAAoB3c,GAAQ2/D,GAAQjkD,CAAS;AAAA,IAAA;AAAA,EAC/C,GAGkB,KAAA;AACtB,GAEMkkD,KAAa,CAAItmC,GAAUd,MACxB,MAAM;AAAA,EAAK,EAAE,QAAQ,KAAK,KAAKc,EAAI,SAASd,CAAI,EAAA;AAAA,EAAK,CAACe,GAAG5jC,MAC9D2jC,EAAI,MAAM3jC,IAAQ6iC,GAAM7iC,IAAQ6iC,IAAOA,CAAI;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9B/C,UAAM5pC,IAAQC,GA8BR0B,IAAOC,GAIPylE,IAAoBvlE,EAAI,EAAK,GAE7BolE,IAA0B/jE;AAAA,MAC9ByjE;AAAA,MACA;AAAA,IAAA;AAGF,QAAI/iE,EAAYqjE,CAAuB,KAAKrjE,EAAYqjE,EAAwB,KAAK;AACnF,YAAM,IAAI,MAAM,mFAAmF;AAIrG,UAAMxgB,IAAeE,GAA2B5mD,EAAM,UAAU,GAC1D,EAAE,aAAA+nD,MAAgBrB,GAClB,EAAE,mBAAAj+C,GAAmB,qBAAAF,GAAqB,YAAA2V,EAAA,IAAexV,GAAA,GACzD+oE,IAAwB3vE,EAA8B,IAAI,GAE1D,EAAE,aAAAolD,GAAa,cAAAC,EAAA,IAAiBH;AAAA,MACpCz+B,GAAa;AAAA,MACb2+C,EAAwB,MAAM;AAAA,IAAA,GAG1B,EAAE,GAAAjkE,EAAA,IAAM/C,EAAA,GAERwxE,IAAgB5vE,EAAI,EAAK,GAEzBsqE,IAAaP,GAAA,GACb,EAAE,QAAAhkB,GAAQ,aAAAikB,MAAgB5yC,GAAYkzC,CAAU,GAEhDuF,IAAoB,YAAY;AACpC,UAAI;AACF,QAAAD,EAAc,QAAQ;AACtB,cAAME,MAAa,MAAMvqB,GAAoBU,GAAa/nD,EAAM,UAAU,GAAG;AAAA,UAC3E,CAACs8B,IAAGu1C,QAAOv1C,GAAE,YAAY,MAAMu1C,GAAE,YAAY;AAAA,QAAA,GAEzChB,yBAAuC,IAAA;AAC7C,QAAAe,GAAU,QAAQ,CAAC9rC,OAAU;AAC3B,gBAAMgsC,KAAQjB,GAAW,IAAI/qC,GAAM,IAAI,SAAS;AAChD,UAAIgsC,KACFA,GAAM,KAAKhsC,GAAM,IAAI,KAAK,IAE1B+qC,GAAW,IAAI/qC,GAAM,IAAI,WAAW,CAACA,GAAM,IAAI,KAAK,CAAC;AAAA,QAEzD,CAAC;AAED,cAAMisC,KAAY,MAAMnB,GAAwC/nD,GAAWgoD,EAAU;AAErF,QAAAzE,EAAW;AAAA,UACTwF,GAAU,IAAI,CAACI,OAAa;AAC1B,gBAAInuE,EAAYmuE,GAAS,QAAQ,EAAG,OAAM,IAAI,MAAM,oCAAoC;AACxF,YAAA5F,EAAW,2BAA2B4F,GAAS,QAAQ;AACvD,kBAAMnqE,KAAQkqE,GAAU,KAAK,CAACvjD,OAAUA,GAAM,UAAU,OAAOwjD,GAAS,IAAI,KAAK;AACjF,mBAAO;AAAA,cACL,KAAKnyB,GAAA;AAAA,cACL,GAAGmyB;AAAA,cAED,YAAYnqE,KAAQA,GAAM,UAAU,CAAA;AAAA,cACpC,gBAAgBA,KAAQA,GAAM,QAAQ,WAAW,IAAI;AAAA,cACrD,SAASA,KAAQA,GAAM,KAAK;AAAA,YAC9B;AAAA,UAEJ,CAAC;AAAA,QAAA,GAEHlG,EAAK,qBAAqBkmD,EAAO,MAAM,IAAI,CAAC/hB,OAAUA,GAAM,EAAE,EAAE,OAAO,CAACjxB,OAAOA,OAAO,MAAS,CAAgB;AAAA,MACjH,SAASgD,IAAG;AACV,QAAApP,EAAkBoP,EAAC;AAAA,MACrB,UAAA;AACE,QAAA65D,EAAc,QAAQ;AAAA,MACxB;AAAA,IACF,GAEMrmC,IAAoBC,GAAA,GAEpBq8B,IAAcvnE,EAAS,MACpBirC,EAAkB,SAASrrC,EAAM,QAAQ,CACjD,GAEK,EAAE,mBAAA42B,EAAA,IAAsBC,GAAA,GAExB,EAAE,mBAAAotC,EAAA,IAAsBE,GAAA,GAExB+D,IAAc,CAACjwB,OAAkB;AACrC,YAAM5uC,KAAS69D,EAAwB;AACvC,MAAIrjE,EAAYwF,EAAM,MACtButB,EAAkB,QAAQvtB,GAAO,WACjC4oE,GAAqB,OAAO,MAAMh6B,EAAK,GACvCgsB,EAAkB,QAAQjkE,EAAM;AAAA,IAClC,GAEMumD,IAAS,CAACtO,OAAkB;AAChC,YAAM5uC,KAAS69D,EAAwB;AACvC,MAAIrjE,EAAYwF,EAAM,MACtButB,EAAkB,QAAQvtB,GAAO,WACjC4oE,GAAqB,OAAO,MAAMh6B,EAAK,GACvCgsB,EAAkB,QAAQjkE,EAAM;AAAA,IAClC,GAEMioE,IAAkB,CAAC/lE,OAAwC;AAC/D,UAAIA,GAAK,WAAW,EAAG;AACvB,YAAMmH,KAAS69D,EAAwB;AACvC,MAAIrjE,EAAYwF,EAAM,MACtButB,EAAkB,QAAQvtB,GAAO,WACjCnH,GAAK,QAAQ,CAACyB,OAAS;AACrB,YAAIA,GAAK,WAAW;AAClB,UAAA0nC,EAAkB,mBAAmBrrC,EAAM,UAAUqJ,GAAO,WAAWA,GAAO,SAAS,CAAC1F,GAAK,WAAW,CAAC;AAAA,iBAChGA,GAAK,WAAW;AACzB,UAAA0nC,EAAkB,mBAAmBrrC,EAAM,UAAUqJ,GAAO,WAAWA,GAAO,SAAS,CAAC1F,GAAK,WAAW,CAAC,GACzG0nC,EAAkB,mBAAmB1nC,GAAK,aAAaA,GAAK,gBAAgB4kB,GAAa,KAAK;AAAA,aACzF;AACL,UAAArK,EAAW,+CAA+C;AAC1D;AAAA,QACF;AAAA,MACF,CAAC,GACD+lD,EAAkB,QAAQjkE,EAAM;AAAA,IAClC,GAEMkyE,IAAsB,MAAM;AAChC,MAAAjO,EAAkB,QAAQjkE,EAAM;AAAA,IAClC,GAEMmyE,IAAwB,OAAOn8D,OAA+D;AAClG,YAAMijB,KAAmBrJ,GAAA,GACnBxI,KAAMpR,GAAM,IAAI,CAACrS,OAASA,GAAK,EAAE,GACjC4rE,yBAAuB,IAAA,GACvBC,yBAAuB,IAAA,GACvBC,yBAAiB,IAAA;AACvB,UAAI;AAEF,SADqB,MAAM1hD,GAAoBlF,GAAWzB,IAAK6R,GAAiB,iBAAiB,GACpF,QAAQ,CAACurC,OAAgB;AACpC,UAAA+K,GAAiB,IAAI/K,GAAY,IAAI;AAAA,YACnC,aAAa73D,GAAS63D,GAAY,SAAS,YAAY,WAAW,IAC9DA,GAAY,SAAS,WAAW,YAAY,KAAA,IAC5C;AAAA,YACJ,WAAWA,GAAY;AAAA,UAAA,CACxB;AAAA,QACH,CAAC,GACD+K,GAAiB,QAAQ,CAACI,OAAc;AACtC,UAAAA,GAAU,UAAU,QAAQ,CAAC/zB,OAAa;AACxC,YAAA4zB,GAAiB,IAAI5zB,EAAQ;AAAA,UAC/B,CAAC;AAAA,QACH,CAAC,GACG4zB,GAAiB,OAAO,MACP,MAAMj5C,GAAqB1N,GAAWoQ,GAAiB,qBAAqB,WAAW;AAAA,UACxG,GAAGu2C;AAAA,QAAA,CACJ,GACU,QAAQ,CAAC14C,OAAW;AAC7B,UAAA24C,GAAW,IAAI34C,GAAO,IAAIA,GAAO,IAAI;AAAA,QACvC,CAAC;AAAA,MAEL,SAASjf,IAAG;AACV,QAAApP,EAAkBoP,EAAC;AAAA,MACrB;AAEA,aAAO7B,GAAM,IAAI,CAACwY,OAAU;AAC1B,QAAAs9C,EAAY;AACZ,cAAM8D,KAAYL,GAAiB,IAAI/gD,GAAM,EAAE,GAAG,aAAa,CAAA,GACzD62C,KAAckK,GAAiB,IAAI/gD,GAAM,EAAE,GAAG,eAAe,IAC7DqhD,KAAwB,CAAA;AAC9B,eAAAN,GAAiB,IAAI/gD,GAAM,EAAE,GAAG,UAAU,QAAQ,CAACotB,OAAa;AAC9D,gBAAM9P,KAAO2jC,GAAW,IAAI7zB,EAAQ;AACpC,UAAI,CAAC/3C,EAAYioC,EAAI,KAAKA,GAAK,KAAA,EAAO,SAAS,KAC7C+jC,GAAY,KAAK/jC,EAAI;AAAA,QAEzB,CAAC,GAEM;AAAA,UACL,KAAK+T,GAAA;AAAA,UACL,OAAO;AAAA,YACL,aAAAwlB;AAAA,YACA,QAAQwK,GAAY,KAAK,IAAI;AAAA,UAAA;AAAA,UAE/B,OAAO;AAAA,YACL,YAAY;AAAA,UAAA;AAAA,UAEd,KAAK;AAAA,YACH,OAAOrhD,GAAM,SAAU;AAAA,YACvB,gBAAgB;AAAA,YAChB,WAAWA,GAAM;AAAA,UAAA;AAAA,UAEnB,UAAUs9C,EAAY;AAAA,UACtB,YAAY8D;AAAA,UACZ,gBAAgBA,GAAU,WAAW;AAAA,UACrC,SAASphD,GAAM;AAAA,QAAA;AAAA,MAEnB,CAAC;AAAA,IACH,GAEM65C,IAAuB,OAAOnmE,OAAgC;AAClE,UAAIA,GAAK,SAAS,WAAWA,GAAK,MAAM,WAAW,EAAG;AACtD,UAAI,CAAC2B,EAAY3B,GAAK,aAAa,GAAG;AACpC,YAAI;AACF,gBAAMomE,KAAU,MAAMp2C,GAAcrJ,GAAW3mB,GAAK,MACjD,OAAO,CAACssB,OAAU,CAACjpB,GAAOipB,GAAM,QAAQ,CAAC,EACzC,IAAI,CAACA,QAAW,EAAE,OAAOA,GAAM,IAAI,oBAAoBtsB,GAAK,cAAA,EAAiB,CAAC;AACjF,UAAA+lE,EAAgBK,EAAO;AAAA,QACzB,SAASzwD,IAAG;AACV,UAAApP,EAAkBoP,EAAC;AAAA,QACrB;AACA;AAAA,MACF;AACA,YAAM7B,KAAQ,MAAMm8D,EAAsBjwE,GAAK,MAAM,OAAO,CAACssB,OAAU,CAACjpB,GAAOipB,GAAM,QAAQ,CAAC,CAAC;AAC/F,MAAA49C,EAAW,UAAUp2D,EAAK;AAAA,IAC5B,GAEMmjB,IAAmBrG,GAAA,GACnB,EAAE,SAAS01C,GAAc,QAAQC,EAAA,IAAgBvvC,GAAYC,CAAgB,GAC7E,EAAE,WAAAtQ,EAAA,IAAc4J,GAAA,GAEhBq2B,IAAc,OAAO37B,OAAuB;AAChD,MAAAq7C,EAAa,QAAQ,IACrBC,EAAY,QAAQzoE,EAAM;AAC1B,UAAI;AACF,cAAMwuB,KAAQ,MAAMtB,GAAmBrE,GAAWsE,EAAW,GACvDf,KAAU,MAAM1D,GAAqBG,GAAW2F,GAAM,OAAO;AACnE,QAAIpC,GAAQ,cACVwK,EAAkB,QAAQxK,GAAQ,YAEpC+M,EAAiB,SAAS3K,EAAK;AAAA,MACjC,SAAS3W,IAAG;AACV,QAAApP,EAAkBoP,EAAC;AAAA,MACrB,UAAA;AACE,QAAA2wD,EAAa,QAAQ;AAAA,MACvB;AAAA,IACF,GAEMM,IAAuB,CAAC9yD,OAA4B;AACxD,MAAIA,GAAM,WAAW,MACrBo2D,EAAW;AAAA,QACTp2D,GAAM,IAAI,CAACrS,QACTmoE,EAAY,SACL;AAAA,UACL,GAAGnoE;AAAA,UACH,UAAUmoE,EAAY;AAAA,QAAA,EAEzB;AAAA,MAAA,GAEH7H,EAAkB,QAAQ,MAC1B54B,EAAkB,WAAWrrC,EAAM,QAAQ;AAAA,IAC7C,GAEM8nE,IAAgB,MAAM;AAC1B,MAAAT,EAAkB,QAAQ;AAAA,IAC5B,GAEM9iC,KAAKC,GAAa,EAAE,QAAQmB,IAAqC,GAEjEysC,KAAa,YAAY;AAE7B,UADA7tC,GAAG,MAAM,OAAA,GACLA,GAAG,MAAM;AACX,eAAAh8B,EAAA,GACO;AAET,UAAI;AACF,cAAM8pE,KAAsC,CAAA,GACtCC,KAAYtgD,GAAM61B,EAAO,KAAK;AACpC,mBAAW/hB,MAASwsC;AAIlB,cAHIxsC,GAAM,kBAAkBA,GAAM,WAChCusC,GAAiB,KAAK,EAAE,IAAIvsC,GAAM,SAAS,SAASA,GAAM,YAAY,GAEpEA,GAAM,WAAW,SAAS,KAAKA,GAAM,gBAAgB;AACvD,kBAAM8iC,KAAa,MAAMryC,GAAqB1N,GAAW+N,EAAkB,OAAOkP,GAAM,UAAU;AAClG,YAAAA,GAAM,MAAM,SAAS8iC,GAAW,IAAI,CAAC9xC,OAAWA,GAAO,IAAI,EAAE,KAAK,IAAI;AAAA,UACxE;AAEF,QAAIu7C,GAAiB,UACnB,MAAMljD,GAAwBtG,GAAWwpD,EAAgB;AAE3D,cAAME,KAAW,MAAM5qB,GAAiBI,GAAauqB,EAAS,GACxDlrD,KAAmB,CAAA,GACnBpR,KAAQu8D,GAAS,IAAI,CAACC,QAC1BprD,GAAI,KAAKorD,GAAQ,EAAE,GAEZ;AAAA,UACL,KAAK3yB,GAAA;AAAA,UACL,GAAG2yB;AAAA,UACH,YAAY,CAAA;AAAA,UACZ,gBAAgB;AAAA,UAChB,SAAS;AAAA,QAAA,EAEZ;AACD,YAAIpG,EAAW,OAAO,WAAW,EAAG;AAEpC,cAAMqG,KAAiB,OAAO9uE,OAAkD;AAC9E,gBAAM+uE,KAAetG,EAAW,OAAO,KAAK,CAACuG,OAAcA,GAAU,IAAI,UAAUhvE,GAAK,IAAI,KAAK;AAEjG,iBAAO;AAAA,YACL,GAAGA;AAAA,YACH,YAAY+uE,KAAeA,GAAa,aAAa/uE,GAAK;AAAA,YAC1D,gBAAgB+uE,KAAeA,GAAa,WAAW,WAAW,IAAI/uE,GAAK,WAAW,WAAW;AAAA,YACjG,SAASA,GAAK;AAAA,UAAA;AAAA,QAElB,GAEMivE,KAAe,MAAM,QAAQ,IAAI58D,GAAM,IAAI,CAACrS,OAAS8uE,GAAe9uE,EAAI,CAAC,CAAC;AAChF,eAAAyoE,EAAW,UAAUwG,EAAY,GACjCjxE,EAAK,qBAAqBylB,EAAG,GACtB;AAAA,MACT,QAAY;AACV,eAAO;AAAA,MACT;AAAA,IACF,GAEMilD,KAAa,OAAOtlE,OAAkB;AAC1C,YAAM++B,KAAQ+hB,EAAO,MAAM9gD,EAAK;AAChC,UAAK++B,IACL;AAAA,YAAIjiC,EAAYiiC,GAAM,EAAE,GAAG;AACzB,UAAAsmC,EAAW,mBAAmBrlE,EAAK;AACnC;AAAA,QACF;AACA,YAAI/G,EAAM,uBAAuB;AAC/B,cAAI;AACF,kBAAMynD,GAAYM,GAAajiB,GAAM,EAAE,GACvCsmC,EAAW,mBAAmBrlE,EAAK;AAAA,UACrC,SAAS8Q,IAAG;AACV,YAAApP,EAAkBoP,EAAC;AAAA,UACrB;AACA;AAAA,QACF;AACA,QAAAu0D,EAAW,mBAAmBrlE,EAAK;AAAA;AAAA,IACrC,GAEM44C,KAAW79C,EAAwB,IAAI,GACvC89C,KAAa99C,EAAY+9C,IAAgB,GACzCgzB,KAAmB/wE,EAA8B,IAAI,GACrDy9C,KAAgBz9C,EAAI,CAAC,GACrBmwE,KAAuBnwE,EAAgE,IAAI,GAE3FshD,KAAehjD,EAAS,MACrByD,EAAY7D,EAAM,kBAAkB,IAAIqjD,KAAwBzD,GAAW,QAAQ5/C,EAAM,kBACjG,GAEK8/C,KAA0B,MAAM;AACpC,MAAAP,GAAc,SACdS,GAAS,MAAM;AACb,QAAA8yB,GAAA;AAAA,MACF,CAAC;AAAA,IACH,GAEMC,KAAqB,MAAM;AAC/B,UAAIC,KAAM;AACV,MAAAnrB,EAAO,MAAM,QAAQ,CAAC/hB,OAAU;AAC9B,QAAAktC,MACAltC,GAAM,WAAWktC;AAAA,MACnB,CAAC,GACD5G,EAAW,cAAc4G;AAAA,IAC3B,GACMC,KAAqB,CAACC,IAAcC,OAAe;AACvD,UAAIA,MAAM,KAAKA,KAAKtrB,EAAO,MAAM,QAAQ;AACvC,cAAM1iB,KAAU0iB,EAAO,MAAM,OAAOqrB,IAAM,CAAC,EAAE,CAAC;AAC9C,QAAArrB,EAAO,MAAM,OAAOsrB,IAAI,GAAGhuC,EAAO,GAClC4tC,GAAA,GACAjzB,GAAA;AAAA,MACF;AAAA,IACF,GAEMgzB,KAAe,MAAM;AAEzB,UADI9yE,EAAM,oBACN,CAAC2/C,GAAS,MAAO;AACrB,YAAMyzB,KAAiBzzB,GAAS,MAAM,cAA2B,MAAM0zB,EAAW;AAClF,MAAKD,OACLP,GAAiB,QAAQpvB,GAAY2vB,IAAgB,CAAA,GAAI;AAAA,QACvD,QAAQ,MAAM9G;AAAA,QACd,YAAYgH;AAAA,QACZ,WAAWC;AAAA,QACX,aAAaC;AAAA,QACb,OAAO,OAAOhvE,OAAyB;AACrC,UAAIX,EAAYW,GAAM,QAAQ,KAAKX,EAAYW,GAAM,QAAQ,KAC7DyuE,GAAmBzuE,GAAM,UAAUA,GAAM,QAAQ;AAAA,QACnD;AAAA,MAAA,CACD;AAAA,IACH;AAEA,WAAAw7C,GAAS,MAAM;AACb,MAAAL,GAAS,QAAQ,SAAS,cAAc,MAAMyD,GAAa,KAAK,GAChE0vB,GAAA;AAAA,IACF,CAAC,GAEDzuE,EAAa;AAAA,MACX,YAAA+tE;AAAA,IAAA,CACD,GAED9oE,GAAU,MAAM;AACd,MAAAqoE,EAAA;AAAA,IACF,CAAC,qBAICjxE,EAmGM,OAAA,EAnGA,IAAI0iD,GAAA,SAAY;AAAA,MAEZnjD,EAAA,cADRS,EAKK,MALLuF,IAKK/E,EADAjB,EAAA,KAAK,GAAA,CAAA;MAEVgB,EAuBM,OAvBNsF,IAuBM;AAAA,QAtBJ1F,EAea8lE,IAAA;AAAA,UAdV,kBAAgBgB,EAAA,OAAa;AAAA,UAC7B,QAAQ7iE,EAAAqiD,CAAA;AAAA,UACR,aAAWriD,EAAAoiD,CAAA;AAAA,UACZ,UAAA;AAAA,UACC,cAAaghB;AAAA,QAAA;UAEH,WAAStnE,EAClB,CAKO,EAAA,OANsB2oE,SAAc;AAAA,YAC3C1oE,EAKOyF,IALPuM,GAKO;AAAA,uBAJD;AAAA,cAAJ,KAAI4+D;AAAA,YAAA,GACIlI,EAAc,GAAA;AAAA,yBAEtB,MAA8C;AAAA,oBAA3CzkE,EAAA7B,CAAA,EAAC,qCAAA,CAAA,GAAA,CAAA;AAAA,cAAA;;;;;;QAIVpC,EAKOyF,IAAA;AAAA,UAJL,OAAM;AAAA,UACL,SAAOwhE;AAAA,QAAA;qBAER,MAAkD;AAAA,gBAA/ChjE,EAAA7B,CAAA,EAAC,yCAAA,CAAA,GAAA,CAAA;AAAA,UAAA;;;;MAGRpC,EASE6oE,IAAA;AAAA,oBARSrC,EAAA;AAAA,yDAAAA,EAAiB,QAAA5iE;AAAA,QACzB,mBAAiBxE,EAAA;AAAA,QACjB,kBAAgBA,EAAA;AAAA,QAChB,aAAW;AAAA,QACX,aAAW;AAAA,QACX,cAAY6E,EAAAyjB,EAAA,EAAa;AAAA,QAC1B,eAAY;AAAA,QACX,aAAY8/C;AAAA,MAAA;MAGPqJ,EAAA,SADRjxE,EAAA,GAAAC,EAQM,OARN8F,IAQM;AAAA,QAJJ3F,EAGEO,IAAA;AAAA,UAFA,eAAA;AAAA,UACA,OAAM;AAAA,QAAA;;MAGVH,EA0BM,OA1BNwF,IA0BM;AAAA,cAtBJ/F,EAaM,OAAA;AAAA,UAZH,KAAK6+C,GAAA;AAAA,UACL,OAAK16C,GAAA,CAAEC,EAAAuuE,EAAA,GACF,8CAA8C,CAAA;AAAA,QAAA;WAEpD5yE,EAAA,EAAA,GAAAC,EAOE0F,IAAA,MAAAC,GANyBvB,EAAA+iD,CAAA,GAAM,CAAvB/hB,IAAO/+B,aADjBxG,EAOEkzE,IAAA;AAAA,YALC,KAAK3tC,GAAM;AAAA,YACX,OAAA/+B;AAAA,YACA,qBAAmB9G,EAAA;AAAA,YACnB,aAAA6oD;AAAA,YACA,cAAaujB;AAAA,UAAA;;QAGlBxrE,EAOE2oE,IAAA;AAAA,UANA,SAAQ;AAAA,UACP,cAAYvpE,EAAA,WAAW,SAAM,KAAQ6E,EAAA+iD,CAAA,EAAO,SAAM;AAAA,UAClD,QAAQ/iD,EAAAqiD,CAAA;AAAA,UACR,aAAWriD,EAAAoiD,CAAA;AAAA,UACX,UAASX;AAAA,UACT,WAAQhiD,GAAA,CAAA,MAAAA,GAAA,CAAA,IAAA,CAAAE,OAAEgtE,EAAA,OAAuB,IAAI,MAAA;AAAA,QAAK;;MAIvC3sE,EAAAm/D,CAAA,MAAsBhkE,EAAA,YAAY6E,EAAAoiE,CAAA,UAD1C3mE,EAWEmzE,IAAA;AAAA;QATC,aAAWzzE,EAAA;AAAA,QACX,cAAY6E,EAAAoiE,CAAA,EAAwB;AAAA,QACpC,cAAYpiE,EAAAoiE,CAAA,EAAwB;AAAA,QACpC,kBAAgBS,EAAA,OAAa,gBAAY;AAAA,QACzC,QAAQ7iE,EAAAqiD,CAAA;AAAA,QACR,aAAWriD,EAAAoiD,CAAA;AAAA,QACZ,UAAA;AAAA,QACC,WAAU4hB;AAAA,QACV,gBAAgBZ;AAAA,MAAA;MAGXpjE,EAAA2jE,CAAA,MAAgBxoE,EAAA,iBADxBM,EAIEopE,IAAA;AAAA;QAFC,aAAW1pE,EAAA;AAAA,QACX,cAAY6E,EAAA8xB,CAAA;AAAA,MAAA;MAEf/1B,EAIE8yE,IAAA;AAAA,iBAHI;AAAA,QAAJ,KAAI1B;AAAA,QACH,aAAWhyE,EAAA;AAAA,QACX,YAAWiyE;AAAA,MAAA;;;;;;;;;;;;;;;;;;;;;;;;;ACziBlB,UAAMlyE,IAAQC,GA2BR0B,IAAOC,GAIPk/B,IAASh/B,EAAwD,SAAS,GAG1E,EAAE,WAAA+mB,EAAA,IAAc4J,GAA6BzyB,EAAM,UAAU,GAC7D;AAAA,MACJ,kBAAAirB;AAAA,MACA,sCAAAK;AAAA,MACA,qCAAAW;AAAA,MACA,sCAAAI;AAAA,MACA,uCAAAH;AAAA,IAAA,IACEvB,GAAkB9B,CAAS,GAEzBghD,IAAejzD,GAA4D,MAAS,GAEpF,EAAE,mBAAAggB,EAAA,IAAsBC,GAAA;AAE9B,IAAAvtB,GAAU,YAAY;AACpB,YAAMshB,IAAiBX,GAAA;AAEvB,UADA4/C,EAAa,QAAQ,MAAMx9C,EAAqCrsB,EAAM,aAAa,GAC/E6D,EAAYgmE,EAAa,KAAK,GAAG;AACnC,QAAA/oC,EAAO,QAAQ;AACf;AAAA,MACF;AACA,UAAI,CAAC4B,GAAiCmnC,EAAa,KAAK,GAAG;AACzD,QAAA/oC,EAAO,QAAQ;AACf;AAAA,MACF;AACA,MAAAlK,EAAkB,QAAQizC,EAAa,MAAM;AAC7C,YAAMr+C,IAA2B,CAAA;AACjC,MAAKZ,EAAe,YAAY,gBAC9BY,EAAS,KAAKP,GAAkB,GAElCO,EAAS,KAAKU,EAAsClsB,EAAM,cAAc,CAAC;AACzE,YAAMquB,IAAgCpC,EAAoC49C,EAAa,MAAM,SAAS;AACtG,MAAIhmE,EAAYwqB,CAA6B,KAC3C7C,EAAS,KAAKF,EAAqCu+C,EAAa,MAAM,SAAS,CAAC;AAElF,UAAI;AACF,cAAM,QAAQ,WAAWr+C,CAAQ;AAAA,MACnC,QAAY;AACV,QAAAsV,EAAO,QAAQ;AAAA,MACjB;AACA,MAAIA,EAAO,UAAU,YAASA,EAAO,QAAQ;AAAA,IAC/C,CAAC;AAED,UAAMgpC,IAAiBhoE,EAA0D,IAAI,GAE/EswE,IAAa,YACZtI,EAAe,QACZ,MAAMA,EAAe,MAAM,WAAA,IADD;AAIpC,WAAA/kE,GAAQ6hE,IAAyBiD,CAAY,GAE7CxlE,EAAa;AAAA,MACX,YAAA+tE;AAAA,IAAA,CACD,aAKStxC,EAAA,UAAM,WADdrgC,KAAAF,EAKEqzE,IALF/gE,GAKE;AAAA;eAHI;AAAA,MAAJ,KAAIi3D;AAAA,IAAA,GACI9pE,GAAK;AAAA,MACZ,uBAAkBuE,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAE,MAAE9C,EAAI,qBAAsB8C,CAAM;AAAA,IAAA,iBAG1Cq8B,EAAA,UAAM,gBADnBpgC,EAKM,OALNS,IAGC,4BAED,KAEa2/B,EAAA,UAAM,2BADnBpgC,EAKM,OALNuF,IAGC,2BAED,WACA1F,EAKEa,IAAA;AAAA;MAHC,MAAM;AAAA,MACN,OAAO;AAAA,MACR,eAAA;AAAA,IAAA;;;;;;;;;;;;;;;;ACrHJ,UAAMpB,IAAQC,GAyBR,EAAE,QAAA4nD,GAAQ,YAAA7/C,MAAe+D,GAAO/L,CAAK,GAErC6zE,IAAY/xE,EAAkB,EAAE,GAEhC,EAAE,mBAAA2G,EAAA,IAAsBC,GAAA,GAGxBg+C,IAAeE,GAA2B5mD,EAAM,UAAU,GAC1D,EAAE,aAAA+nD,MAAgBrB;AAExB,WAAA7jD;AAAA,MACE,CAACglD,GAAQ7/C,CAAU;AAAA,MACnB,OAAO,CAAC8rE,GAAWC,CAAW,MAAM;AAElC,YADAF,EAAU,QAAQ,CAAA,GACdC,KAAaA,EAAU,SAAS,GAAG;AACrC,UAAAD,EAAU,QAAQ5uE,GAAU6uE,CAAS,EAAE,KAAK,CAACx3C,GAAGu1C,OAAOv1C,EAAE,YAAY,MAAMu1C,EAAE,YAAY,EAAE;AAC3F;AAAA,QACF;AACA,YAAIkC,KAAeA,EAAY,SAAS;AACtC,cAAI;AACF,YAAAF,EAAU,SAAS,MAAMxsB,GAAoBU,GAAagsB,CAAW,GAAG;AAAA,cACtE,CAACz3C,GAAGu1C,OAAOv1C,EAAE,YAAY,MAAMu1C,EAAE,YAAY;AAAA,YAAA;AAAA,UAEjD,SAAShpE,GAAO;AACd,YAAAJ,EAAkBI,CAAK;AAAA,UACzB;AAAA,MAEJ;AAAA,MACA,EAAE,WAAW,GAAA;AAAA,IAAK,cAKlBpI,EAAA,GAAAC,EAqBM,OArBNS,IAqBM;AAAA,cApBJT,EAmBM0F,IAAA,MAAAC,GAlBYwtE,EAAA,OAAS,CAAlB/tC,YADTplC,EAmBM,OAAA;AAAA,QAjBH,KAAKolC,EAAM;AAAA,QACZ,OAAM;AAAA,MAAA;QAEN7kC,EAaM,OAbNgF,IAaM;AAAA,UAZJhF,EAWM,OAXNsF,IAWM;AAAA,YAVJ1F,EASEmoD,IAAA;AAAA,cARC,eAAaljB,EAAM;AAAA,cACnB,OAAAA;AAAA,cACA,eAAa7lC,EAAA;AAAA,cACb,OAAOA,EAAA;AAAA,cACP,wBAAsBA,EAAA;AAAA,cACtB,gBAAcA,EAAA;AAAA,cACd,oBAAkBA,EAAA;AAAA,cAClB,eAAaA,EAAA;AAAA,YAAA;;;;;;;AC7EnB,SAAS+zE,KAAyB;AACvC,QAAM5H,IAAaP,GAAA,GAEboI,IAA0B,CAAC5oE,GAAekiE,IAAe,OAAU;AACvE,UAAMv3D,IAAQo2D,EAAW;AACzB,aAASp+C,IAAI,GAAGA,IAAIhY,EAAM,QAAQgY,KAAK;AACrC,YAAMrqB,IAAOqS,EAAMgY,CAAC;AACpB,OAAIu/C,KAAgB1pE,EAAYF,EAAK,MAAM,WAAW,KAAKA,EAAK,MAAM,YAAY,WAAW,OAC3FA,EAAK,MAAM,cAAc0H;AAAA,IAE7B;AAAA,EACF,GAEM6oE,IAAqB,CAAC7oE,GAAekiE,IAAe,OAAU;AAClE,UAAMv3D,IAAQo2D,EAAW;AACzB,aAASp+C,IAAI,GAAGA,IAAIhY,EAAM,QAAQgY,KAAK;AACrC,YAAMrqB,IAAOqS,EAAMgY,CAAC;AACpB,OAAIu/C,KAAgB1pE,EAAYF,EAAK,MAAM,MAAM,KAAKA,EAAK,MAAM,OAAO,WAAW,OACjFA,EAAK,MAAM,SAAS0H;AAAA,IAExB;AAAA,EACF,GAEM,EAAE,WAAAwd,EAAA,IAAc4J,GAAA,GAChB,EAAE,mBAAAmE,EAAA,IAAsBC,GAAA;AAyB9B,SAAO;AAAA,IACL,yBAAAo9C;AAAA,IACA,oBAAAC;AAAA,IACA,qBA1B0B,OAAO7oE,GAAgBkiE,IAAe,OAAU;AAC1E,YAAMkC,wBAAiB,IAAA,GACjBI,IAAwB,CAAA;AAE9B,OADmB,MAAMt5C,GAAqB1N,GAAW+N,EAAkB,OAAO,CAAC,GAAGvrB,CAAK,CAAC,GACjF,QAAQ,CAACyrB,MAAW;AAC7B,QAAA24C,EAAW,IAAI34C,EAAO,IAAIA,EAAO,IAAI;AAAA,MACvC,CAAC,GACDzrB,EAAM,QAAQ,CAACuwC,MAAa;AAC1B,cAAM9P,IAAO2jC,EAAW,IAAI7zB,CAAQ;AACpC,QAAI,CAAC/3C,EAAYioC,CAAI,KAAKA,EAAK,KAAA,EAAO,SAAS,KAC7C+jC,EAAY,KAAK/jC,CAAI;AAAA,MAEzB,CAAC;AACD,YAAM91B,IAAQo2D,EAAW;AACzB,eAASp+C,IAAI,GAAGA,IAAIhY,EAAM,QAAQgY,KAAK;AACrC,cAAMrqB,IAAOqS,EAAMgY,CAAC;AACpB,SAAIu/C,KAAgB1pE,EAAYF,EAAK,UAAU,KAAKA,EAAK,WAAW,WAAW,OAC7EA,EAAK,aAAa0H,GAClB1H,EAAK,MAAM,SAASksE,EAAY,KAAK,IAAI;AAAA,MAE7C;AAAA,IACF;AAAA,EAKE;AAEJ;;;;AChDA,UAAMsE,IAAQryE,EAAI,EAAE,aAAa,IAAI,QAAQ,IAAI,SAAS,CAAA,GAAI,GAExDsqE,IAAaP,GAAA,GACb,EAAE,QAAAhkB,EAAA,IAAW3uB,GAAYkzC,CAAU,GACnC,EAAE,yBAAA6H,GAAyB,oBAAAC,GAAoB,qBAAAtG,EAAA,IAAwBoG,GAAA,GACvE,EAAE,GAAA/wE,EAAA,IAAM/C,EAAA,GAERguE,IAAU,CAACX,MAA0B;AACzC,MAAA0G,EAAwBE,EAAM,MAAM,aAAa5G,CAAY,GAC7D2G,EAAmBC,EAAM,MAAM,QAAQ5G,CAAY,GACnDK,EAAoBuG,EAAM,MAAM,SAAS5G,CAAY;AAAA,IACvD,GAEMY,IAAY,MAAM;AACtB,MAAAgG,EAAM,MAAM,cAAc,IAC1BA,EAAM,MAAM,SAAS,IACrBA,EAAM,MAAM,UAAU,CAAA;AAAA,IACxB,GAEM,EAAE,mBAAAv9C,EAAA,IAAsBC,GAAA,GAExB,EAAE,WAAAiN,EAAA,IAAcM,GAAA,GAEhBC,IAAQjkC,EAAS,OAAO;AAAA,MAC5B,OAAO;AAAA,QACL,aAAa;AAAA,UACX,WAAW0jC,EAAU,GAAI;AAAA,QAAA;AAAA,QAE3B,QAAQ;AAAA,UACN,WAAWA,EAAU,GAAG;AAAA,QAAA;AAAA,MAC1B;AAAA,IACF,EACA,GACIS,IAAKC,GAAaH,GAAO,EAAE,OAAA8vC,KAAS,EAAE,QAAQ,IAAO,GAErDC,IAA2Bh0E,EAAS,MACpCynD,EAAO,MAAM,WAAW,IAAU,KAC/BA,EAAO,MAAM,UAAUA,EAAO,MAAM,KAAK,CAAClkD,MAASA,GAAM,cAAc,CAC/E;sBAIClD,EAAA,GAAAC,EAsKM,OAtKNS,IAsKM;AAAA,MArKJN,EA0CO0M,IAAA;AAAA,QAzCL,OAAA;AAAA,QACA,OAAM;AAAA,MAAA;mBAEN,MAqCO;AAAA,UArCP1M,EAqCO2M,IAAA,MAAA;AAAA,uBApCL,MAmCM;AAAA,cAnCNvM,EAmCM,OAnCNgF,IAmCM;AAAA,gBAlCJpF,EAIEkoD,IAAA;AAAA,kBAHS,YAAAorB,EAAA,MAAM;AAAA,kBAAN,uBAAA5vE,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAE,MAAA0vE,EAAA,MAAM,cAAW1vE;AAAA,kBACzB,GAAGK,EAAAy/B,CAAA;AAAA,kBACH,OAAOz/B,EAAA7B,CAAA,EAAC,+CAAA;AAAA,gBAAA;gBAEXpC,EAcOyF,IAAA;AAAA,kBAbL,MAAA;AAAA,kBACA,MAAK;AAAA,kBACL,SAAQ;AAAA,kBACR,OAAM;AAAA,kBACL,SAAK/B,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAAvD,EAAA,CAAAyD,MAAOK,EAAAmvE,CAAA,EAAwBE,EAAA,MAAM,aAAW,EAAA,GAAA,CAAA,MAAA,CAAA;AAAA,gBAAA;6BAEtD,MAAkD;AAAA,oBAAlDtzE,EAAkDE,IAAA,EAA3C,MAAK,qCAAmC;AAAA,oBAC/CF,EAKWmG,IAAA;AAAA,sBAJT,WAAU;AAAA,sBACV,UAAS;AAAA,oBAAA;iCAET,MAA4D;AAAA,4BAAzDlC,EAAA7B,CAAA,EAAC,mDAAA,CAAA,GAAA,CAAA;AAAA,sBAAA;;;;;;gBAGRpC,EAaOyF,IAAA;AAAA,kBAZL,MAAA;AAAA,kBACA,MAAK;AAAA,kBACL,SAAQ;AAAA,kBACP,SAAK/B,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAAvD,EAAA,CAAAyD,MAAOK,EAAAmvE,CAAA,EAAwBE,EAAA,MAAM,aAAW,EAAA,GAAA,CAAA,MAAA,CAAA;AAAA,gBAAA;6BAEtD,MAAyC;AAAA,oBAAzCtzE,EAAyCE,IAAA,EAAlC,MAAK,4BAA0B;AAAA,oBACtCF,EAKWmG,IAAA;AAAA,sBAJT,WAAU;AAAA,sBACV,UAAS;AAAA,oBAAA;iCAET,MAA0D;AAAA,4BAAvDlC,EAAA7B,CAAA,EAAC,iDAAA,CAAA,GAAA,CAAA;AAAA,sBAAA;;;;;;;;;;;;;MAONmxE,EAAA,cADR7zE,EAqDOgN,IAAA;AAAA;QAnDL,OAAA;AAAA,QACA,OAAM;AAAA,MAAA;mBAEN,MA+CO;AAAA,UA/CP1M,EA+CO2M,IAAA,MAAA;AAAA,uBA9CL,MA6CqB;AAAA,cA7CrB3M,EA6CqB25C,IAAA;AAAA,gBA5CnB,SAAQ;AAAA,gBACR,QAAO;AAAA,cAAA;2BAEP,MAwCM;AAAA,kBAxCNv5C,EAwCM,OAxCNsF,IAwCM;AAAA,oBAvCJtF,EASM,OATNuF,IASM;AAAA,sBARJ3F,EAOE08C,IAAA;AAAA,wBANS,YAAA42B,EAAA,MAAM;AAAA,wBAAN,uBAAA5vE,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAE,MAAA0vE,EAAA,MAAM,UAAO1vE;AAAA,wBACrB,cAAYK,EAAA8xB,CAAA;AAAA,wBACZ,OAAO9xB,EAAA7B,CAAA,EAAC,qCAAA;AAAA,wBACT,WAAA;AAAA,wBACA,UAAA;AAAA,wBACC,oBAAkB;AAAA,sBAAA;;oBAGvBpC,EAcOyF,IAAA;AAAA,sBAbL,MAAA;AAAA,sBACA,MAAK;AAAA,sBACL,SAAQ;AAAA,sBACR,OAAM;AAAA,sBACL,SAAK/B,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAAvD,EAAA,CAAAyD,MAAOK,EAAA8oE,CAAA,EAAoBuG,EAAA,MAAM,SAAO,EAAA,GAAA,CAAA,MAAA,CAAA;AAAA,oBAAA;iCAE9C,MAAkD;AAAA,wBAAlDtzE,EAAkDE,IAAA,EAA3C,MAAK,qCAAmC;AAAA,wBAC/CF,EAKWmG,IAAA;AAAA,0BAJT,WAAU;AAAA,0BACV,UAAS;AAAA,wBAAA;qCAET,MAA4D;AAAA,gCAAzDlC,EAAA7B,CAAA,EAAC,mDAAA,CAAA,GAAA,CAAA;AAAA,0BAAA;;;;;;oBAGRpC,EAaOyF,IAAA;AAAA,sBAZL,MAAA;AAAA,sBACA,MAAK;AAAA,sBACL,SAAQ;AAAA,sBACP,SAAK/B,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAAvD,EAAA,CAAAyD,MAAOK,EAAA8oE,CAAA,EAAoBuG,EAAA,MAAM,SAAO,EAAA,GAAA,CAAA,MAAA,CAAA;AAAA,oBAAA;iCAE9C,MAAyC;AAAA,wBAAzCtzE,EAAyCE,IAAA,EAAlC,MAAK,4BAA0B;AAAA,wBACtCF,EAKWmG,IAAA;AAAA,0BAJT,WAAU;AAAA,0BACV,UAAS;AAAA,wBAAA;qCAET,MAA0D;AAAA,gCAAvDlC,EAAA7B,CAAA,EAAC,iDAAA,CAAA,GAAA,CAAA;AAAA,0BAAA;;;;;;;;;;;;;;;kBAOhB1C,EA0COgN,IAAA;AAAA;QAxCL,OAAA;AAAA,QACA,OAAM;AAAA,MAAA;mBAEN,MAoCO;AAAA,UApCP1M,EAoCO2M,IAAA,MAAA;AAAA,uBAnCL,MAkCM;AAAA,cAlCNvM,EAkCM,OAlCNwF,IAkCM;AAAA,gBAjCJ5F,EAGEkoD,IAAA;AAAA,kBAFS,YAAAorB,EAAA,MAAM;AAAA,kBAAN,uBAAA5vE,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAE,MAAA0vE,EAAA,MAAM,SAAM1vE;AAAA,kBACpB,OAAOK,EAAA7B,CAAA,EAAC,0CAAA;AAAA,gBAAA;gBAEXpC,EAcOyF,IAAA;AAAA,kBAbL,MAAA;AAAA,kBACA,MAAK;AAAA,kBACL,SAAQ;AAAA,kBACR,OAAM;AAAA,kBACL,SAAK/B,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAAvD,EAAA,CAAAyD,MAAOK,EAAAovE,CAAA,EAAmBC,EAAA,MAAM,QAAM,EAAA,GAAA,CAAA,MAAA,CAAA;AAAA,gBAAA;6BAE5C,MAAkD;AAAA,oBAAlDtzE,EAAkDE,IAAA,EAA3C,MAAK,qCAAmC;AAAA,oBAC/CF,EAKWmG,IAAA;AAAA,sBAJT,WAAU;AAAA,sBACV,UAAS;AAAA,oBAAA;iCAET,MAA4D;AAAA,4BAAzDlC,EAAA7B,CAAA,EAAC,mDAAA,CAAA,GAAA,CAAA;AAAA,sBAAA;;;;;;gBAGRpC,EAaOyF,IAAA;AAAA,kBAZL,MAAA;AAAA,kBACA,MAAK;AAAA,kBACL,SAAQ;AAAA,kBACP,SAAK/B,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAAvD,EAAA,CAAAyD,MAAOK,EAAAovE,CAAA,EAAmBC,EAAA,MAAM,QAAM,EAAA,GAAA,CAAA,MAAA,CAAA;AAAA,gBAAA;6BAE5C,MAAyC;AAAA,oBAAzCtzE,EAAyCE,IAAA,EAAlC,MAAK,4BAA0B;AAAA,oBACtCF,EAKWmG,IAAA;AAAA,sBAJT,WAAU;AAAA,sBACV,UAAS;AAAA,oBAAA;iCAET,MAA0D;AAAA,4BAAvDlC,EAAA7B,CAAA,EAAC,iDAAA,CAAA,GAAA,CAAA;AAAA,sBAAA;;;;;;;;;;;;;MAMdhC,EAwBM,OAxBNyF,IAwBM;AAAA,QAvBJ7F,EAOOyF,IAAA;AAAA,UANL,OAAM;AAAA,UACN,SAAQ;AAAA,UACR,MAAK;AAAA,UACJ,kCAAY4nE,EAAO,EAAA,GAAA,CAAA,MAAA,CAAA;AAAA,QAAA;qBAEpB,MAA4D;AAAA,gBAAzDppE,EAAA7B,CAAA,EAAC,mDAAA,CAAA,GAAA,CAAA;AAAA,UAAA;;;QAENpC,EAOOyF,IAAA;AAAA,UANL,OAAM;AAAA,UACN,SAAQ;AAAA,UACR,MAAK;AAAA,UACJ,oCAAY4nE,EAAO,EAAA,GAAA,CAAA,MAAA,CAAA;AAAA,QAAA;qBAEpB,MAA0D;AAAA,gBAAvDppE,EAAA7B,CAAA,EAAC,iDAAA,CAAA,GAAA,CAAA;AAAA,UAAA;;;QAENpC,EAMOyF,IAAA;AAAA,UALL,SAAQ;AAAA,UACR,MAAK;AAAA,UACJ,WAAY6nE,GAAS,CAAA,MAAA,CAAA;AAAA,QAAA;qBAEtB,MAAyD;AAAA,gBAAtDrpE,EAAA7B,CAAA,EAAC,gDAAA,CAAA,GAAA,CAAA;AAAA,UAAA;;;;;;;;;;;;;;;;;;;;ACvMZ,UAAMjD,IAAQC,GAeR+H,IAAaC,GAA8BhI,GAAA,YAAkC,GAC7Eo0E,IAAavyE,EAAI,EAAE,GACnBwyE,IAAOxyE,EAAI,EAAE,aAAa,IAAI,QAAQ,IAAI,GAE1ComD,IAAcpmD,EAAI,EAAE,GACpBmmD,IAAWnmD,EAAmC,IAAI,GAElDyyE,IAAUzyE,EAAI,EAAI,GAClB0yE,IAAU1yE,EAAI,EAAK,GAGnB4kD,IAAeE,GAA2B5mD,EAAM,UAAU,GAC1D,EAAE,aAAA+nD,MAAgBrB,GAClB,EAAE,WAAA79B,EAAA,IAAc4J,GAAA,GAChB,EAAE,kCAAAgiD,EAAA,IAAqC5tB,GAAgBH,CAAY,GAEnE,EAAE,mBAAAj+C,GAAmB,qBAAAF,EAAA,IAAwBG,GAAA,GAC7C,EAAE,GAAAzF,EAAA,IAAM/C,EAAA,GAERw0E,IAAc,CAACnrC,MAAoC;AACvD,YAAMorC,IAAQ,2CACRnkC,IAAQjH,EAAI,MAAMorC,CAAK;AAE7B,aAAOnkC,IAAQA,EAAM,CAAC,IAAI;AAAA,IAC5B,GAEMokC,IAAoB,CAACpmD,GAA2BrC,MAC7CA,EAAS,KAAK,CAACC,MAAYA,MAAYoC,EAAM,OAAO,GAGvD,EAAE,UAAA0rB,GAAU,WAAApW,EAAA,IAAcM,GAAA,GAE1BC,IAAQ;AAAA,MACZ,MAAM;AAAA,QACJ,aAAa;AAAA,UACX,WAAWP,EAAU,GAAG;AAAA,QAAA;AAAA,QAE1B,QAAQ;AAAA,UACN,UAAAoW;AAAA,UACA,WAAWpW,EAAU,GAAG;AAAA,QAAA;AAAA,MAC1B;AAAA,IACF,GAEIS,IAAKC,GAAaH,GAAO,EAAE,MAAAiwC,KAAQ,EAAE,kBAAkB,IAAM,GAE7DO,IAAgB,YAAY;AAIhC,UAHAL,EAAQ,QAAQ,IAChBD,EAAQ,QAAQ,IAChBF,EAAW,QAAQA,EAAW,MAAM,KAAA,GAChCA,EAAW,MAAM,WAAW,MAAM,GAAG;AACvC,cAAMS,IAAYJ,EAAYL,EAAW,KAAK;AAC9C,QAAI1nE,GAASmoE,CAAS,MAAGT,EAAW,QAAQS;AAAA,MAC9C;AACA,UAAI,CAACpoE,GAAQ2nE,EAAW,KAAK;AAC3B,eAAAE,EAAQ,QAAQ,IACT,QAAQ,OAAO,2BAA2B;AAEnD,UAAI;AACF,cAAM17B,IAAW,MAAM3rB,GAAmBrE,GAAWwrD,EAAW,KAAK;AACrE,eAAI9uE,GAAOszC,EAAS,QAAQ,KAC1B07B,EAAQ,QAAQ,IACT,QAAQ,OAAO,0BAA0B,KAE9CK,EAAkB/7B,GAAU74C,EAAM,cAAc,KAClDu0E,EAAQ,QAAQ,IACT,QAAQ,QAAQ17B,CAAQ,MAEjC07B,EAAQ,QAAQ,IACT,QAAQ,OAAO,8BAA8B;AAAA,MACtD,QAAY;AACV,eAAAA,EAAQ,QAAQ,IACT,QAAQ,OAAO,8BAA8B;AAAA,MACtD;AAAA,IACF,GAEMQ,IAAS,YAAY;AACzB,UAAI;AACF,cAAMvmD,IAAQ,MAAMqmD,EAAA;AAEpB,YADAtwC,EAAG,MAAM,OAAA,GACLA,EAAG,MAAM;AACX,iBAAAh8B,EAAA,GACO,QAAQ,OAAO,+BAA+B;AAEvD,cAAMrG,IAA+B;AAAA,UACnC,OAAO;AAAA,YACL,aAAaoyE,EAAK,MAAM,YAAY,KAAA;AAAA,YACpC,QAAQA,EAAK,MAAM,OAAO,KAAA;AAAA,UAAK;AAAA,UAEjC,OAAO;AAAA,YACL,YAAY;AAAA,UAAA;AAAA,UAEd,KAAK;AAAA,YACH,OAAO9lD,EAAM,SAAU;AAAA,YACvB,WAAWA,EAAM;AAAA,YACjB,gBAAgB;AAAA,UAAA;AAAA,UAElB,UAAU;AAAA,QAAA;AAEZ,QAAIy5B,EAAS,OAAO,OAClB/lD,EAAK,KAAK+lD,EAAS,MAAM;AAE3B,cAAM+pB,IAAW/pB,EAAS,OAAO,KAC7B,MAAMT,GAAYO,GAAaE,EAAS,MAAM,IAAI/lD,CAAI,IACtD,MAAMqlD,GAAYQ,GAAa7lD,CAAI;AACvC,eAAA+lD,EAAS,QAAQ+pB,GACjBhqE,EAAW,QAAQgqE,EAAS,IACrB,QAAQ,QAAQ,EAAE,OAAAxjD,GAAc,OAAOwjD,GAAU;AAAA,MAC1D,SAASn6D,GAAG;AACV,QAAApP,EAAkBoP,CAAC;AAAA,MACrB;AAAA,IACF,GAEMm9D,IAAwB,MAAM;AAClC,MAAA9sB,EAAY,QAAQusB,EAAiC;AAAA,QACnD,OAAO;AAAA,UACL,aAAa;AAAA,UACb,QAAQ;AAAA,QAAA;AAAA,QAEV,OAAO;AAAA,UACL,YAAY;AAAA,QAAA;AAAA,QAEd,KAAK;AAAA,UACH,OAAOJ,EAAW;AAAA,UAClB,WAAW;AAAA,UACX,gBAAgB;AAAA,QAAA;AAAA,MAClB,CACD;AAAA,IACH,GAEM7wE,IAAS,YAAY;AACzB,UAAI;AACF,cAAMqxE,EAAA,GACNG,EAAA;AAAA,MACF,QAAY;AAAA,MAEZ;AAAA,IACF,GAEM7M,IAAS,OAAO/f,GAA8CC,GAA+B+f,IAAQ,OAAU;AAEnH,UADAlgB,EAAY,QAAQ,IACfE,KAAY7iD,GAAO0iD,EAAS,KAAK,KAAOG,KAAYggB,GAAQ;AAC/D,QAAAngB,EAAS,QAAQhjD,GAAUmjD,CAAQ,GAC/BH,EAAS,UACXosB,EAAW,QAAQpsB,EAAS,MAAM,IAAI,OACtCC,EAAY,QAAQusB,EAAiCziD,GAAMi2B,EAAS,KAAK,CAAC,GAC1EqsB,EAAK,MAAM,cAAcrsB,EAAS,MAAM,MAAM,aAC9CqsB,EAAK,MAAM,SAASrsB,EAAS,MAAM,MAAM,QACzCzkD,EAAA;AAEF;AAAA,MACF;AACA,UAAI6kD,GAAY;AACd,YAAI;AACF,UAAAJ,EAAS,QAAQ,MAAMX,GAAWS,GAAaM,CAAU;AAAA,QAC3D,SAASx/C,GAAO;AACd,UAAAJ,EAAkBI,CAAK;AAAA,QACzB;AACA,QAAKtD,GAAO0iD,EAAS,KAAK,MACxBosB,EAAW,QAAQpsB,EAAS,MAAM,IAAI,OACtCC,EAAY,QAAQusB,EAAiCziD,GAAMi2B,EAAS,KAAK,CAAC,GAC1EqsB,EAAK,MAAM,cAAcrsB,EAAS,MAAM,MAAM,aAC9CqsB,EAAK,MAAM,SAASrsB,EAAS,MAAM,MAAM,QACzCzkD,EAAA;AAEF;AAAA,MACF;AACA,MAAAykD,EAAS,QAAQ,MACjBqsB,EAAK,MAAM,cAAc,IACzBA,EAAK,MAAM,SAAS;AAAA,IACtB,GAEMW,IAAW70E,EAAS,MAAM,EAAEm0E,EAAQ,SAASC,EAAQ,MAAM;AAEjE,WAAA3xE;AAAA,MACE,CAAC,MAAM7C,EAAM,OAAOgI,CAAU;AAAA,MAC9B,OAAO,CAACogD,GAAUC,CAAU,MAAM;AAChC,cAAM8f,EAAO/f,GAAUC,CAAU;AAAA,MACnC;AAAA,MACA,EAAE,WAAW,GAAA;AAAA,IAAK,GAGpBhkD,EAAa;AAAA,MACX,QAAA0wE;AAAA,IAAA,CACD;MAICl0E,EAUO+I,IAAA,MAAA;AAAA,mBATL,MAQE;AAAA,UARF/I,EAQE45C,IAAA;AAAA,wBAPS45B,EAAA;AAAA,0DAAAA,EAAU,QAAA5vE;AAAA,YAClB,OAAOxE,EAAA,SAAS6E,KAAE7E,EAAA,MAAM,IAAI;AAAA,YAC5B,QAAQs0E,EAAA;AAAA,YACR,iBAAeA,EAAA,QAAU,SAAYzvE,EAAA7B,CAAA,EAAC,mCAAA;AAAA,YACvC,UAAA;AAAA,YACC,QAAAO;AAAA,YACA,YAAaA,GAAM,CAAA,OAAA,CAAA;AAAA,UAAA;;;;MAGxB3C,EAOO+I,IAAA,MAAA;AAAA,mBANL,MAKE;AAAA,UALF/I,EAKEkoD,IAAA;AAAA,YAJS,YAAAurB,EAAA,MAAK;AAAA,YAAL,uBAAA/vE,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAE,MAAA6vE,EAAA,MAAK,cAAW7vE;AAAA,YACxB,OAAOK,EAAA7B,CAAA,EAAC,+CAAA;AAAA,YACR,GAAG6B,EAAAy/B,CAAA,EAAG,KAAK;AAAA,YACX,UAAU0wC,EAAA;AAAA,UAAA;;;;MAGfp0E,EAOO+I,IAAA,MAAA;AAAA,mBANL,MAKE;AAAA,UALF/I,EAKEkoD,IAAA;AAAA,YAJS,YAAAurB,EAAA,MAAK;AAAA,YAAL,uBAAA/vE,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAE,MAAA6vE,EAAA,MAAK,SAAM7vE;AAAA,YACnB,OAAOK,EAAA7B,CAAA,EAAC,0CAAA;AAAA,YACR,GAAG6B,EAAAy/B,CAAA,EAAG,KAAK;AAAA,YACX,UAAU0wC,EAAA;AAAA,UAAA;;;;MAGfp0E,EAOO+I,IAAA,EAPD,OAAA,EAAA,cAAA,OAAA,KAAwB;AAAA,mBAC5B,MAA0D;AAAA,UAA1D3I,EAA0D,OAAA,MAAAC,EAAlD4D,EAAA7B,CAAA,EAAC,qCAAA,CAAA,IAA0C,KAAC,CAAA;AAAA,UAE5CilD,EAAA,MAAY,SAAM,UAD1BxnD,EAIC,OAAA;AAAA;YAFE,KAAKwnD,EAAA;AAAA,YACN,KAAI;AAAA,UAAA;;;;;;;;;;;;;ACvPV,UAAMloD,IAAQC,GAQRoL,IAAQjL,EAAS,MACduR,GAAqB3R,EAAM,MAAMA,EAAM,OAAO,GAAG,CACzD,GAEKg1B,IAAY50B,EAAS,MAAM,OAAOiL,EAAM,SAAU,SAAS;2BAI/D3K,EAcK,MAAA,MAAA;AAAA,MAbHe,GAYOC,EAAA,QAXEoD,EAAAowE,EAAA,EAAkBj1E,EAAA,OAAO,GAAG,GAAA,EAClC,MAAMA,EAAA,KAAA,GAFT,MAYO;AAAA,QAPG+0B,EAAA,cADRz0B,EAIE8lC,IAAA;AAAA;UAFA,MAAA;AAAA,UACC,OAAOh7B,EAAA;AAAA,QAAA,gCAEV3K,EAEW0F,IAAA,EAAA,KAAA,KAAA;AAAA,cADNiF,EAAA,KAAK,GAAA,CAAA;AAAA,QAAA;;;;;;;;;;;;;AC1BhB,UAAMrL,IAAQC,GAUR0B,IAAOC,GAGPuzE,IAAa,CAAC3wE,GAAgBb,MAAkB;AACpD,MAAAhC,EAAK,aAAa,EAAE,OAAA6C,GAAO,MAAAb,EAAA,CAAM;AAAA,IACnC,GAEMyxE,IAAah1E,EAAS,MACnB,CAAC0M,GAAQ9M,EAAM,KAAK,CAC5B,GAEKq1E,IAAoBj1E,EAAS,MAC1BJ,EAAM,QAAQ,MACtB,GAEK,EAAE,GAAAiD,EAAA,IAAM/C,EAAA;;MAIZW,EA6CSk9B,IAAA,EA7CD,OAAM,iBAAa;AAAA,mBACzB,MAUQ;AAAA,UAVR98B,EAUQ,SAAA,MAAA;AAAA,YATNA,EAQK,MAAA,MAAA;AAAA,sBAPHP,EAMK0F,IAAA,MAAAC,GALcpG,EAAA,SAAO,CAAjBoH,YADT3G,EAMK,MAAA;AAAA,gBAJF,KAAK2G,EAAO;AAAA,gBACb,OAAM;AAAA,cAAA,GAEHnG,EAAAmG,EAAO,KAAK,GAAA,CAAA;;;UAIrBpG,EAgCQ,SAAA,MAAA;AAAA,YA/BUm0E,EAAA,SACd30E,EAAA,EAAA,GAAAC,EAkBK0F,IAAA,EAAA,KAAA,KAAAC,GAjBYrG,EAAM,QAAd2D,YADTjD,EAkBK,MAAA;AAAA,cAhBF,KAAMiD,EAAa1D,EAAA,OAAO;AAAA,cAC1B,SAAK,CAAAwE,MAAE0wE,EAAW1wE,GAAQd,CAAI;AAAA,YAAA;sBAE/BjD,EAYmB0F,IAAA,MAAAC,GAXApG,EAAA,SAAO,CAAjBoH,YADT9G,EAYmB+0E,IAAA;AAAA,gBAVhB,KAAKjuE,EAAO;AAAA,gBACZ,MAAA1D;AAAA,gBACA,QAAA0D;AAAA,cAAA;gBAEU,CAAAvC,EAAAowE,EAAA,EAAkB7tE,EAAO,GAAG,CAAA,GAAAzG,EACrC,CAGE,QAJgD20E,QAAQ;AAAA,kBAC1D9zE,GAGEC,EAAA,QAFOoD,MAAkBuC,EAAO,GAAG,GAAA,EAClC,MAAMkuE,EAAA,CAAQ;AAAA,gBAAA;;;uCAOvB70E,EAOK,MAAAuF,IAAA;AAAA,cANHhF,EAKK,MAAA;AAAA,gBAJF,SAASo0E,EAAA;AAAA,gBACV,OAAM;AAAA,cAAA,KAEHvwE,EAAA7B,CAAA,EAAC,oCAAA,CAAA,GAAA,GAAAsD,EAAA;AAAA,YAAA;;;;;MAMd9E,GAAsBC,EAAA,QAAA,QAAA;AAAA,IAAA;;;AC1EjB,SAAS8zE,GACdC,GACAC,GACAxyE,GACAG,GACA0jB,GACA1c,GACA;AACA,QAAMi6C,IAA8BxiD,EAAI,EAAK,GACvCkU,IAA2BlU,EAAI,EAAE,GACjC6zE,IAA8B7zE,EAAI,EAAE,GACpCuT,IAAUvT,EAAI,EAAK,GAEnB,EAAE,aAAAuL,GAAa,cAAAy0B,EAAA,IAAiB53B,GAAA,GAChC,EAAE,mBAAAzB,EAAA,IAAsBC,GAAA,GAExB,EAAE,gBAAAktE,GAAgB,YAAAxqE,GAAY,cAAAyqE,GAAc,YAAAC,GAAY,eAAAC,MAAkBC;AAAA,IAC9EP;AAAA,IACAC;AAAA,IACAxyE;AAAA,IACAG;AAAA,EAAA,GAGI8E,IAAS,MAAM;AACnB,IAAA8tE,EAAA,GACAC,EAAA;AAAA,EACF,GAEM13B,IAAe,CAACjoC,MAAoC;AACxD,IAAAs/D,EAAat/D,EAAO,MAAM,GAC1B2/D,EAAA;AAAA,EACF,GAEMC,IAAkB,YAAY;AAClC,IAAA9gE,EAAQ,QAAQ,IAChBjK,EAAW;AACX,QAAI;AACF,MAAA4K,EAAM,MAAM,KAAK,GAAI,MAAM+Q,EAAM3b,GAAYf,CAAM,CAAE;AAAA,IACvD,SAASwN,GAAG;AACV,MAAApP,EAAkBoP,CAAC;AAAA,IACrB,UAAA;AACE,MAAAxC,EAAQ,QAAQ;AAAA,IAClB;AAAA,EACF,GAEM4gE,IAAa,MAAM;AACvB,IAAAjgE,EAAM,QAAQ,CAAA,GACd2/D,EAAS,QAAQ,CAAA;AAAA,EACnB,GAEMO,IAAU,YAAY;AAC1B,IAAA7gE,EAAQ,QAAQ;AAChB,QAAI;AACF,MAAAW,EAAM,QAAQ,MAAM+Q,EAAM3b,GAAYf,CAAM;AAAA,IAC9C,SAASwN,GAAG;AACV,MAAApP,EAAkBoP,CAAC;AAAA,IACrB,UAAA;AACE,MAAAxC,EAAQ,QAAQ;AAAA,IAClB;AAAA,EACF;AAgBA,SAAO;AAAA,IACL,OAAAW;AAAA,IACA,UAAA2/D;AAAA,IACA,YAAAvqE;AAAA,IACA,gBAAAwqE;AAAA,IACA,eAAAG;AAAA,IACA,YAAAD;AAAA,IACA,eAAAxxB;AAAA,IACA,SAAAjvC;AAAA,IACA,YAvBiB,CAAC7Q,MAAiB;AACnC,YAAM4xE,IAAc5xE,EAAM;AAC1B,UAAI,CAAC4xE,KAAgBA,EAAY,YAAY,WAAYA,EAAiC,SAAS;AACjG;AAEF,YAAMl1B,IAASk1B,EAAY,QAAQ,mBAAmB;AACtD,UAAI,CAACl1B,KAAU,CAACA,EAAO,UAAU,SAAS,kBAAkB,EAAG;AAC/D,YAAMm1B,IAAUn1B,EAAO;AACvB,UAAI,CAACm1B,KAAW,CAACA,EAAQ,UAAU,SAAS,kBAAkB,EAAG;AACjE,YAAMC,IAAQD,EAAQ,cAAc,OAAO;AAC3C,MAAKC,KACLA,EAAM,MAAA;AAAA,IACR;AAAA,IAYE,iBAAAH;AAAA,IACA,QAAAhuE;AAAA,IACA,cAAAq2C;AAAA,IACA,SAAA03B;AAAA,IACA,aAAa,MAAM7oE,EAAYhD,GAAQe,GAAY8qE,CAAO;AAAA,IAC1D,cAAc,MAAMp0C,EAAaz3B,GAAQe,GAAY8qE,CAAO;AAAA,EAAA;AAEhE;AChFO,MAAMK,KAAwC,CAACC,GAAaC,OAC1D;AAAA,EACL,eAAe;AAAA,EACf,aAAa,MAAM,CAAA;AAAA,EACnB,QAAQ,CAAC,EAAE,OAAAzgE,GAAO,OAAA3K,GAAO,UAAAsqE,QAAe;AACtC,QAAIa,MAAQC,KAAOD,MAAQ;AACzB,aAAO,IAAI,IAAInrE,IAAQ,CAAC2K,EAAM,CAAC,GAAG,KAAK,IAAI,EAAE;AAE/C,eAAWrS,KAAQqS,GAAO;AACxB,UAAI2/D,EAAS,QAAQc,KAAOprE,EAAO;AAAA,MAC1BA,IAAOsqE,EAAS,IAAIhyE,EAAK,KAAK,IAClCgyE,EAAS,OAAOhyE,EAAK,KAAK;AAAA,IACjC;AACA,WAAOgyE;AAAA,EACT;AAAA,EACA,WAAW,CAAC,EAAE,UAAAA,QAAeA;AAAA,ICjCpBe,KAAmB,CAACrrE,MACxBA,IAAQ,IAAI;ACCd,SAASsrE,GAAmBzzE,IAAS,IAAI0zE,IAAe,QAAQ;AACrE,MAAIC,IAAU3zE,GACV4zE,IAAgBF;AA+BpB,SAAO;AAAA,IACL,gBA/BqB,CAAC1zE,GAAiB0zE,OACnCjqE,GAASzJ,CAAM,MAAG2zE,IAAU3zE,IAC5ByJ,GAASiqE,CAAY,MAAGE,IAAgBF,IAErC;AAAA,MACL,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,QAAQ;AAAA,QACN,OAAO;AAAA,QACP,MAAM;AAAA,MAAA;AAAA,MAER,QAAQ;AAAA,QACN,WAAW;AAAA,QACX,UAAU;AAAA,QACV,UAAU;AAAA,MAAA;AAAA,MAEZ,SAAS;AAAA,MACT,kBAAkB,CAAA;AAAA,MAClB,aAAa,CAAA;AAAA,MACb,qBAAqB,CAAA;AAAA,MACrB,OAAO,CAAA;AAAA,MACP,YAAYpkE,GAAA;AAAA,MACZ,YAAY;AAAA,MACZ,WAAWA,GAAA;AAAA,MACX,WAAW;AAAA,MACX,SAAAqkE;AAAA,MACA,eAAAC;AAAA,IAAA;AAAA,EAKF;AAEJ;ACtCO,SAASC,KAAqB;AAiBnC,SAAO;AAAA,IACL,gBAjBqB,OACd;AAAA,MACL,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,QAAQ;AAAA,QACN,OAAO;AAAA,QACP,MAAM;AAAA,MAAA;AAAA,MAER,QAAQ;AAAA,QACN,WAAW;AAAA,QACX,UAAU;AAAA,QACV,UAAU;AAAA,MAAA;AAAA,IACZ;AAAA,EAKF;AAEJ;ACpBO,SAASC,KAA6B;AAc3C,SAAO;AAAA,IACL,wBAd6B,OACtB;AAAA,MACL,QAAQ,CAAA;AAAA,MACR,eAAe,CAAA;AAAA,MACf,OAAO,CAAA;AAAA,MACP,aAAa;AAAA,QACX,SAAS,CAAA;AAAA,QACT,UAAU,CAAA;AAAA,QACV,OAAO,CAAA;AAAA,MAAC;AAAA,IACV;AAAA,EAKF;AAEJ;AChBO,SAASC,KAA4B;AAgB1C,SAAO;AAAA,IACL,uBAhB4B,OACrB;AAAA,MACL,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,aAAa;AAAA,MACb,aAAa,CAAA;AAAA,MACb,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,WAAWzkE,GAAA;AAAA,MACX,YAAYA,GAAA;AAAA,MACZ,eAAe;AAAA,MACf,SAAS;AAAA,IAAA;AAAA,EAKX;AAEJ;ACMA,MAAM0kE,KAAuB,CAAC9rE,GAAwBb,IAAmC,WAAsB;AAC7G,QAAM,EAAE,eAAAiqB,GAAe,gBAAAE,GAAgB,eAAAG,GAAe,YAAAS,GAAY,iBAAAU,EAAA,IAAoB1B,GAAA;AACtF,SAAAE,EAAcppB,EAAW,WAAW,GACpCspB,EAAetpB,EAAW,MAAMA,EAAW,WAAW,GACtDypB,EAAczpB,EAAW,QAAQA,EAAW,UAAU,GAClD9I,GAAUiI,CAAS,KAAGyrB,EAAgBzrB,CAAS,GAC5C+qB,EAAA;AACT,GAEM6hD,KAAwC,CAC5CC,GACAziD,GACA0iD,GACAC,GACA/sE,IAAmC,WACxB;AACX,QAAM,EAAE,eAAAiqB,GAAe,gBAAAE,GAAgB,eAAAG,GAAe,YAAAS,GAAY,iBAAAU,EAAA,IAAoB1B,GAAA;AACtF,SAAAE,EAAc4iD,CAAW,GACzB1iD,EAAeC,GAAMyiD,CAAW,GAChCviD,EAAcwiD,GAAYC,CAAS,GAC/Bh1E,GAAUiI,CAAS,KAAGyrB,EAAgBzrB,CAAS,GAC5C+qB,EAAA;AACT,GAOaiiD,KAAoB,OAC/BnmE,GACAokB,GACAlkB,IAAuB,CAAA,GACvBkmE,IAAS,MACTC,IAAW,IACXltE,IAAmC,QACnCmtE,IAAY,KACZx0E,GACAqO,GACAomE,IAAe,IACfv1E,IAA8B,OACf;AACf,QAAM8zB,IAAY5zB,GAAUiI,GAAW,QAAQ,KAAKotE,IAAe,YAAY,IACzEvsE,IAAakI,GAAckkE,CAAM;AACvC,EAAApsE,EAAW,cAAcssE,GACzBtsE,EAAW,SAASosE,GACpBpsE,EAAW,aAAaqsE;AACxB,QAAMG,IAAUniD,GAAqBD,GAAalkB,CAAS,IAAI4kB,GACzD2hD,IAAU,CAAA;AAEhB,MAAI;AACF,UAAMjvE,IAAM,MAAMwI,EAAA,EAAS,IAAIwmE,IAAUV,GAAqB9rE,GAAYb,CAAS,GAAGnI,CAAO;AAC7F,QAAI,CAACszB,GAAkB9sB,EAAI,MAAM;AAC/B,aAAO,QAAQ,OAAO,IAAIgtB,GAAyBhtB,EAAI,MAAM,CAAC;AAEhE,QAAIA,EAAI,MAAM;AACZ,YAAMutB,IAAUvtB,EAAI;AAGpB,UADAivE,EAAQ,KAAK,GAAG1hD,EAAQ,IAAI,GACxBC,GAA0BD,CAAO;AAEnC,YADA/qB,EAAW,cAAcxC,EAAI,KAAK,aAC9BwC,EAAW;AACb,iBAAOA,EAAW,eAAa;AAC7B,YAAAA,EAAW;AAEX,kBAAM0sE,KADmB,MAAM1mE,EAAA,EAAS,IAAIwmE,IAAUV,GAAqB9rE,GAAYb,CAAS,GAAGnI,CAAO,GACpE;AAEtC,YAAAy1E,EAAQ,KAAK,GAAGC,EAAa,IAAI,GACjC1sE,EAAW,cAAc0sE,EAAa;AAAA,UACxC;AAAA,iBAEOzhD,GAAkBF,CAAO,GAAG;AAErC,YADA/qB,EAAW,aAAa+qB,EAAQ,YAC5B/qB,EAAW,cAAcA,EAAW;AACtC,iBAAO,QAAQ,QAAQysE,CAAY;AAErC,cAAMrsD,IAA2B,CAAA,GAC3BusD,IAAW,KAAK,KAAK3sE,EAAW,aAAaA,EAAW,WAAW;AACzE,iBAAS4iB,IAAI,GAAGA,IAAI+pD,GAAU/pD;AAC5B,UAAAxC,EAAS;AAAA,YACPpa,IAAS;AAAA,cACPwmE,IACET;AAAA,gBACE/rE,EAAW;AAAA,gBACX4iB;AAAA,gBACA5iB,EAAW;AAAA,gBACXA,EAAW;AAAA,gBACXb;AAAA,cAAA;AAAA,cAEJnI;AAAA,YAAA;AAAA,UACF;AAIJ,SADqB,MAAM,QAAQ,IAAIopB,CAAQ,GAClC,QAAQ,CAACwsD,MAAiB;AAErC,UAAAH,EAAQ,KAAK,GAAGG,EAAa,KAAK,IAAI;AAAA,QACxC,CAAC;AAAA,MACH;AACA,aAAA5sE,EAAW,mBAAmBxC,EAAI,KAAK,KAAK,QACrC,QAAQ,QAAQivE,CAAY;AAAA,IACrC;AACA,WAAIjvE,EAAI,WAAW+sB,KACV,QAAQ,QAAQ,EAAO,IAGzBkiD;AAAA,EACT,SAAS7sD,GAAU;AACjB,WAAI0D,GAA8B1D,CAAG,IAC5B,QAAQ,OAAO,IAAI2D,GAAsB3D,GAAKA,EAAI,QAAQ,GAAG,CAAC,IAEnE4D,GAAoC5D,CAAG,IAClC,QAAQ,OAAO,IAAI6D,GAAuB7D,GAAK9nB,GAAQqO,GAAQyZ,CAAG,CAAC,IAExE6K,GAA0C7K,CAAG,IACxC,QAAQ,OAAO,IAAI8K,GAA6B9K,GAAK9nB,GAAQqO,GAAQyZ,CAAG,CAAC,IAE9E8D,GAA4C9D,CAAG,IAC1C,QAAQ,OAAO,IAAI+D,GAA+B/D,GAAKA,CAAG,CAAC,IAE7D,QAAQ,OAAO,IAAIgE,GAAehE,CAAG,CAAC;AAAA,EAC/C;AACF;ACjJO,SAASitD,KAAY;AAC1B,SAAO;AAAA,IACL,kBAAAC;AAAA,IACA,yBAAAC;AAAA,IACA,0BAAAC;AAAA,IACA,4BAAAC;AAAA,EAAA;AAEJ;ACFA,MAAM5vD,KAAY,eACLE,KAAS;AAEf,SAAS2vD,GAA6ClnE,GAA6BlO,GAAgB;AAgBxG,SAAO;AAAA,IACL,cAhBmB,CAACkI,GAAwBb,MAC5C0rB,GAAwB7kB,GAAQqX,IAAW,CAAA,GAAIrd,GAAYb,GAAWrH,GAAQylB,EAAM;AAAA,IAgBpF,UAde,CAAC9T,MAAerD,GAAqBJ,GAAQqX,KAAY,QAAQ,EAAE,IAAA5T,KAAM3R,GAAQylB,EAAM;AAAA,IAetG,WAbgB,CAACzmB,MAAkB;AACnC,YAAMupB,IAAO8sD,GAAkBr2E,EAAK,aAAa,EAC9C,MAAM,CAAC,EACP,QAAQ,UAAU,QAAQ;AAE7B,aAAOy0B,GAAsBvlB,GAAQlP,GAAMumB,KAAY,UAAU,EAAE,MAAAgD,EAAA,GAAQvoB,GAAQylB,EAAM;AAAA,IAC3F;AAAA,IAQE,WANgB,CAAC9T,MAAe6yC,GAAsBt2C,GAAQqX,KAAY,QAAQ,EAAE,IAAA5T,KAAM3R,GAAQylB,EAAM;AAAA,EAMxG;AAEJ;AC/BO,MAAM6vD,KAAgC;AAItC,SAASC,GACdC,IAAqC,IACrC;AACA,QAAM,EAAE,GAAAz1E,EAAA,IAAM/C,EAAA,GAERy4E,IAAqB72E,EAA4B;AAAA,IAEnD;AAAA,MACE,OAAO;AAAA,MACP,OAAOmB,EAAE,0CAA0C;AAAA,IAAA;AAAA,IAGvD,GAAGy1E;AAAA,EAAA,CACJ;AAMD,SAAO;AAAA,IACL,oBAAAC;AAAA,IACA,sBAN2B,CAACttE,MACrBstE,EAAmB,MAAM,KAAK,CAACh1E,MAASA,EAAK,UAAU0H,CAAK;AAAA,EAKnE;AAEJ;AC0BA,MAAAutE,KAAe;AAAA,EACb,QAAQC,GAAUz2E,GAA8B;AAC9C,IAAAy2E,EAAI,QAAQr1D,IAA0BphB,EAAQ,UAAU,SAAS,GACjEy2E,EAAI,QAAQp1D,IAAuBrhB,EAAQ,UAAU,OAAO,GAC5Dy2E,EAAI,UAAU,OAAOC,EAAG,GACxBD,EAAI,IAAIE,IAAc,EAAE,eAAe,iBAAiB,GACxDpyB,GAA4BvkD,EAAQ,KAAK,GACzCowB,GAA8BpwB,EAAQ,OAAO,GAC7C42E,GAA6B52E,EAAQ,MAAM;AAAA,EAC7C;AACF,GCnEa62E,KAAkB,CAAIC,GAAiB7tE,MAAa;AAC/D,QAAMtE,IAAQmyE,EAAM,QAAQ7tE,CAAK;AACjC,MAAItE,MAAU,IAAI;AAChB,IAAAmyE,EAAM,KAAK7tE,CAAK;AAChB;AAAA,EACF;AACA,EAAA6tE,EAAM,OAAOnyE,GAAO,CAAC;AACvB,GAEaoyE,KAAgB,CAACllE,GAAgCmlE,IAAY,SAASnlE,EAAO,KAAKmlE,CAAS,GAE3FC,KAAgB,IAAOzlD,MAAgB,MAAM,KAAK,GAAGA,CAAI,GAIzD0lD,KAAe,CAAIhD,GAAuBiD,IAAW,OACzDjD,EAAM,OAAO,CAAC3rC,GAAQ6L,MACvB,MAAM,QAAQA,CAAO,IAAU8iC,GAAa9iC,GAAS+iC,CAAG,KAC5DA,EAAI,KAAK/iC,CAAO,GACT+iC,IACN,CAAA,CAAE,GAGMC,KAAyB,CAAIC,GAAaC,MAAyB;AAC9E,MAAID,EAAO,WAAWC,EAAO;AAC3B,WAAO;AAIT,QAAMC,IAAeF,EAAO,MAAA,EAAQ,KAAA,GAC9BG,IAAeF,EAAO,MAAA,EAAQ,KAAA;AAGpC,WAAS1rD,IAAI,GAAGA,IAAI2rD,EAAa,QAAQ3rD;AACvC,QAAI2rD,EAAa3rD,CAAC,MAAM4rD,EAAa5rD,CAAC;AACpC,aAAO;AAIX,SAAO;AACT,GCtCa6rD,KAAmC,CAAC/1E,MAAiB;AAChE,UAAQ,aAAa,QAAQ,OAAO,IAAIA,CAAI;AAC9C,GAEag2E,KAAmC,CAACzxE,GAAgB8qE,MAAyB;AACxF,QAAM4G,IAAW1xE,EAAO,QAAQ8qE,CAAE;AAClC,EAAA0G,GAAiCE,EAAS,IAAI;AAChD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GCcAC,KAAe;AAAA,EACb,QAAQ;AAAA,IAAA,OACNC;AAAAA,IAAA,QACA1b;AAAAA,IAAA,OACA9yD;AAAAA,IAAA,QACAvI;AAAAA,IAAA,UACAg3E;AAAAA,IAAA,KACAC;AAAAA,IAAA,KACAC;AAAAA,IAAA,YACA1oE;AAAAA,IAAA,iBACA2oE;AAAAA,IAAA,aACAC;AAAAA,IAAA,eACAC;AAAAA,IAAA,MACAC;AAAAA,IAAA,UACAC;AAAAA,IAAA,UACAC;AAAAA,IAAA,QACAC;AAAAA,IAAA,QACAtwE;AAAAA,EAAA;AAAA,EAEF,UAAUuwE;AAAAA,EACV,OAAO;AAAA,IACL,eAAe;AAAA,MACb,GAAGC;AAAAA,IAAA;AAAA,IAEL,uBAAuB;AAAA,MACrB,GAAGC;AAAAA,IAAA;AAAA,IAEL,qBAAqB;AAAA,MACnB,GAAGC;AAAAA,IAAA;AAAA,IAEL,cAAc;AAAA,MACZ,GAAGC;AAAAA,IAAA;AAAA,IAEL,aAAa;AAAA,MACX,GAAGC;AAAAA,IAAA;AAAA,EACL;AAEJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GCrCAC,KAAe;AAAA,EACb,QAAQ;AAAA,IAAA,OACNjB;AAAAA,IAAA,QACA1b;AAAAA,IAAA,OACA9yD;AAAAA,IAAA,QACAvI;AAAAA,IAAA,UACAg3E;AAAAA,IAAA,KACAC;AAAAA,IAAA,KACAC;AAAAA,IAAA,YACA1oE;AAAAA,IAAA,iBACA2oE;AAAAA,IAAA,aACAC;AAAAA,IAAA,eACAC;AAAAA,IAAA,MACAC;AAAAA,IAAA,UACAC;AAAAA,IAAA,UACAC;AAAAA,IAAA,QACAC;AAAAA,IAAA,QACAtwE;AAAAA,EAAA;AAAA,EAEF,UAAUuwE;AAAAA,EACV,OAAO;AAAA,IACL,eAAe;AAAA,MACb,GAAGC;AAAAA,IAAA;AAAA,IAEL,uBAAuB;AAAA,MACrB,GAAGC;AAAAA,IAAA;AAAA,IAEL,qBAAqB;AAAA,MACnB,GAAGC;AAAAA,IAAA;AAAA,IAEL,cAAc;AAAA,MACZ,GAAGC;AAAAA,IAAA;AAAA,IAEL,aAAa;AAAA,MACX,GAAGC;AAAAA,IAAA;AAAA,EACL;AAEJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GCrCAE,KAAe;AAAA,EACb,QAAQ;AAAA,IAAA,OACNlB;AAAAA,IAAA,QACA1b;AAAAA,IAAA,OACA9yD;AAAAA,IAAA,QACAvI;AAAAA,IACA,UAAAg3E;AAAA,IACA,KAAAC;AAAA,IACA,KAAAC;AAAA,IACA,YAAA1oE;AAAA,IACA,iBAAA2oE;AAAA,IACA,aAAAC;AAAA,IACA,eAAAC;AAAA,IACA,MAAAC;AAAA,IACA,UAAAC;AAAA,IACA,UAAAC;AAAA,IACA,QAAAC;AAAA,IACA,QAAAtwE;AAAA,EAAA;AAAA,EAEF,UAAUuwE;AAAA,EACV,OAAO;AAAA,IACL,eAAe;AAAA,MACb,GAAGC;AAAA,IAAA;AAAA,IAEL,uBAAuB;AAAA,MACrB,GAAGC;AAAA,IAAA;AAAA,IAEL,qBAAqB;AAAA,MACnB,GAAGC;AAAA,IAAA;AAAA,IAEL,cAAc;AAAA,MACZ,GAAGC;AAAA,IAAA;AAAA,IAEL,aAAa;AAAA,MACX,GAAGC;AAAA,IAAA;AAAA,EACL;AAEJ,GC1DaG,KAAyB,OA+H7B;AAAA,EACL,eAXoB,OACb;AAAA,IACL,aAAaC;AAAAA,IACb,eAAeA;AAAAA,IACf,cAAcA;AAAAA,IACd,UAAUA;AAAAA,IACV,aAAaC;AAAAA,EAAA;AAAA,EAMf,gBAnFqB,OACd;AAAA,IACL,QAAQ,CAAA;AAAA,IACR,YAAY;AAAA,MACV,SAAS;AAAA,MACT,SAAS;AAAA,MACT,OAAO;AAAA,IAAA;AAAA,IAET,WAAW;AAAA,MACT,SAAS;AAAA,MACT,SAAS;AAAA,MACT,OAAO;AAAA,IAAA;AAAA,IAET,SAAS;AAAA,MACP,SAAS;AAAA,MACT,SAAS;AAAA,MACT,OAAO;AAAA,IAAA;AAAA,IAET,eAAe;AAAA,MACb,SAAS;AAAA,MACT,SAAS;AAAA,MACT,OAAO;AAAA,MACP,eAAe;AAAA,IAAA;AAAA,IAEjB,WAAW;AAAA,MACT,SAAS;AAAA,MACT,SAAS;AAAA,MACT,OAAO;AAAA,IAAA;AAAA,IAET,cAAc;AAAA,MACZ,SAAS;AAAA,MACT,SAAS;AAAA,MACT,OAAO;AAAA,IAAA;AAAA,IAET,SAAS;AAAA,MACP,OAAO;AAAA,MACP,SAAS;AAAA,IAAA;AAAA,IAEX,OAAO;AAAA,MACL,SAAS;AAAA,IAAA;AAAA,IAEX,SAAS;AAAA,MACP,kBAAkB;AAAA,MAClB,YAAY;AAAA,MACZ,YAAY;AAAA,IAAA;AAAA,IAEd,mBAAmB;AAAA,MACjB,OAAO;AAAA,IAAA;AAAA,IAET,MAAM;AAAA,MACJ,SAAS;AAAA,IAAA;AAAA,IAEX,aAAa;AAAA,MACX,SAAS;AAAA,MACT,OAAO;AAAA,IAAA;AAAA,IAET,eAAe;AAAA,MACb,SAAS;AAAA,MACT,OAAO;AAAA,IAAA;AAAA,IAET,cAAc;AAAA,MACZ,SAAS;AAAA,MACT,OAAO;AAAA,IAAA;AAAA,IAET,UAAU;AAAA,MACR,SAAS;AAAA,MACT,MAAM;AAAA,IAAA;AAAA,EACR;AAAA,EAiBF,aAjIkB,OACX;AAAA,IACL,cAAc;AAAA,IACd,YAAY;AAAA,MACV,QAAQ,CAAA;AAAA,MACR,SAAS;AAAA,MACT,QAAQ;AAAA,IAAA;AAAA,IAEV,QAAQ;AAAA,MACN,OAAO;AAAA,QACL,MAAM;AAAA,QACN,QAAQ;AAAA,UACN,YAAY;AAAA,UACZ,SAAS;AAAA,UACT,cAAc;AAAA,UACd,SAAS;AAAA,UACT,WAAW;AAAA,UACX,gBAAgB;AAAA,UAChB,SAAS;AAAA,UACT,cAAc;AAAA,UACd,SAAS;AAAA,UACT,OAAO;AAAA,UACP,MAAM;AAAA,QAAA;AAAA,QAER,WAAW,CAAA;AAAA,MAAC;AAAA,MAEd,MAAM;AAAA,QACJ,MAAM;AAAA,QACN,QAAQ;AAAA,UACN,YAAY;AAAA,UACZ,SAAS;AAAA,UACT,SAAS;AAAA,UACT,WAAW;AAAA,UACX,gBAAgB;AAAA,UAChB,SAAS;AAAA,UACT,SAAS;AAAA,UACT,OAAO;AAAA,UACP,MAAM;AAAA,QAAA;AAAA,QAER,WAAW,CAAA;AAAA,MAAC;AAAA,IACd;AAAA,EACF;AAwFF;ACtGG,SAASC,GAAkDxmE,GAAuC;AACvG,SAAOA;AACT;AChCA,eAAsBymE,KAAkB;AAGtC,GAFsB,MAAM,OAAO,8BAAe,EAAA,KAAA,CAAAv/C,MAAAA,EAAA,CAAA,GAEpC,KAAK;AAAA,IACjB,QAAQ;AAAA,MACN,UAAU,CAAC,6CAA6C;AAAA,IAAA;AAAA;AAAA,EAC1D,CAED;AACH;ACJO,SAASw/C,KAAsB;AACpC,QAAMC,IAAa,CAAC9E,GAA+B1zE,OAC1C;AAAA,IACL,IAAI;AAAA,IACJ,aAAasP,GAAA;AAAA,IACb,UAAU;AAAA,IACV,QAAQ2D;AAAA,IACR,QAAQ;AAAA,IACR,8BAA8B;AAAA,IAC9B,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,0BAA0B;AAAA,IAC1B,WAAW3D,GAAA;AAAA,IACX,YAAYA,GAAA;AAAA,IACZ,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,eAAeokE;AAAA,IACf,SAAS1zE;AAAA,EAAA;AAcb,SAAO;AAAA,IACL,YAAAw4E;AAAA,IACA,sBAZ2B,CAACx4E,OACrB;AAAA,MACL,GAAGw4E,EAAW,qBAAqBx4E,CAAM;AAAA,MAEvC,cAAc;AAAA,MACd,eAAe;AAAA,IACjB;AAAA,EAMF;AAEJ;ACnCO,MAAMy4E,KAAa;AAAA,EACxB,SAAS;AAAA,EACT,+BAA+B;AAAA,EAC/B,sBAAsB;AAAA,EACtB,qBAAqB;AACvB,GAGM76C,KAASh/B,EAAmB,IAAI,GAChC85E,KAAkB95E,EAAmB,IAAI,GAClC+5E,KAA0B/5E,EAAY,CAAC;AAE7C,SAASg6E,GAAe3I,GAA6B;AAC1D,MAAIA,EAAG,MAAM,YAAY;AACvB,IAAAryC,GAAO,QAAQqyC,EAAG,MAAM,WAAW,SAAA,GACnCyI,GAAgB,QAAQ5uE,GAAYmmE,EAAG,MAAM,SAAS;AACtD,UAAM4I,IAAY,KAAK,MAAM,KAAK,IAAA,IAAQ,GAAI;AAC9C,QAAIH,GAAgB,OAAO;AACzB,YAAMI,IAAgBJ,GAAgB,QAAQG;AAK9C,MAAIC,IAAgB,OAClBH,GAAwB,QAAQG,IAAgB;AAAA,IAEpD;AAAA,EACF;AAEA,QAAMC,IAAqB,MAAM12E,GAAOu7B,GAAO,KAAK,GAC9Co7C,IAAuB,MAAMp7C,GAAO,UAAU66C,GAAW,SACzDQ,IAAkC,MAAMr7C,GAAO,UAAU66C,GAAW,+BACpES,IAA+B,MAAMt7C,GAAO,UAAU66C,GAAW,sBACjEU,IAAuB,MAAMv7C,GAAO,UAAU66C,GAAW;AAE/D,SAAO;AAAA,IACL,QAAQr5D,GAASwe,EAAM;AAAA,IACvB,iBAAiBxe,GAASs5D,EAAe;AAAA,IACzC,oBAAAK;AAAA,IACA,sBAAAC;AAAA,IACA,iCAAAC;AAAA,IACA,8BAAAC;AAAA,IACA,sBAAAC;AAAA,EAAA;AAEJ;AC7CA,MAAM5zD,KAAY,sBAEL6zD,KAAsB,CAAClrE,MAClCI,GAA+BJ,GAAQqX,IAAW,CAAA,GAAI,WAAW,MAAM;ACoBlE,SAAS8zD,KAAgB;AAC9B,QAAM,EAAE,eAAAx6E,EAAA,IAAkBC,GAAA,GACpB,EAAE,cAAAq9C,GAAc,cAAAlhC,EAAA,IAAiBzV,GAAA,GACjC,EAAE,iBAAA8zE,GAAiB,cAAA/jE,GAAc,qBAAAC,GAAqB,uBAAAE,EAAA,IAA0BC,GAAA,GAEhF,EAAE,UAAAkxB,EAAA,IAAaf,GAAA;AAErB,MAAIyzC,IAAkC;AAkHtC,SAAO;AAAA,IACL,YAjHiB,MAAM;AACvB,YAAMC,IAAiBC,GAAA,GACjB7jE,IAAoBC,GAAA,GACpB+B,IAAyBC,GAAA,GACzB6hE,IAAwBzjE,GAAA,GACxBG,IAA8BC,GAAA,GAC9BG,IAA8BC,GAAA,GAC9BG,IAAkCC,GAAA,GAClCG,IAA0CC,GAAA,GAC1CG,IAA0CC,GAAA,GAC1CG,IAAyBC,GAAA;AAE/B,UAAI,EAAAlC,EAAa,SAAS,CAAC1W,EAAc,MAAM;AAI/C,YAAI;AACF,UAAA0W,EAAa,QAAQ60B,GAAGvrC,EAAc,MAAM,WAAW;AAAA,YACrD,YAAY,CAAC,WAAW;AAAA,YACxB,MAAM;AAAA,YACN,UAAU;AAAA,UAAA,CACX,GACD0W,EAAa,MAAM,GAAG,qBAAqB,CAACL,MAAyB;AACnE,gBAAI;AACF,cAAIM,EAAoB,IAAIN,EAAK,IAAI,KACnCM,EAAoB,IAAIN,EAAK,MAAMA,CAAI;AAAA,YAE3C,SAASvP,GAAO;AACd,sBAAQ,MAAM,SAASA,CAAK;AAAA,YAC9B;AAAA,UACF,CAAC,GACD4P,EAAa,MAAM,GAAG,0BAA0B,CAACL,GAAkBykE,MAAkC;AACnG,gBAAI,CAACt3E,GAAOs3E,CAAK,GAAG;AAClB,oBAAMC,IAAe,OAAO,QAAQD,CAAK;AACzC,eAAI,CAACjkE,EAAsB,IAAIR,CAAI,KAAK,OAAO,KAAKykE,CAAK,EAAE,WAAW,MACpEjkE,EAAsB,IAAIR,GAAM,IAAI,IAAI0kE,CAAY,CAAC;AAEvD,yBAAW,CAACxuD,GAAOyuD,CAAI,KAAKD,GAAc;AACxC,oBAAI,CAACC,GAAM;AACT,kBAAAnkE,EAAsB,IAAIR,CAAI,GAAG,OAAOkW,CAAK;AAC7C;AAAA,gBACF;AACA,gBAAA1V,EAAsB,IAAIR,CAAI,GAAG,IAAIkW,GAAOyuD,CAAI;AAAA,cAClD;AAAA,YACF;AAAA,UACF,CAAC,GACDtkE,EAAa,MAAM,GAAG,yBAAyB,CAACL,GAAkBlW,MAAyB;AACzF,kBAAM86E,IAAc,OAAO,QAAQ96E,CAAI;AACvC,uBAAW,CAACosB,GAAO2uD,CAAS,KAAKD;AAC/B,cAAAN,EAAe,KAAK,EAAE,MAAAtkE,GAAM,OAAAkW,EAAA,GAAS2uD,CAAS;AAAA,UAElD,CAAC,GACDxkE,EAAa,OAAO,GAAG,iBAAiB,CAACL,GAAkB8E,GAAgB2B,MAAsB;AAC/F,YAAA+9D,EAAsB,KAAK,EAAE,MAAAxkE,GAAM,QAAA8E,GAAQ,WAAA2B,GAAW;AAAA,UACxD,CAAC,GACDpG,EAAa,OAAO,GAAG,yBAAyB,CAACL,MAAqB;AACpE,YAAAkB,EAA4B,KAAK,EAAE,MAAAlB,GAAM;AAAA,UAC3C,CAAC,GACDK,EAAa,OAAO,GAAG,yBAAyB,CAACL,MAAqB;AACpE,YAAAsB,EAA4B,KAAK,EAAE,MAAAtB,GAAM;AAAA,UAC3C,CAAC,GACDK,EAAa,OAAO,GAAG,2BAA2B,CAACL,GAAkB8E,GAAgB2B,MAAsB;AACzG,YAAA/E,EAAgC,KAAK,EAAE,MAAA1B,GAAM,QAAA8E,GAAQ,WAAA2B,GAAW;AAAA,UAClE,CAAC,GACDpG,EAAa,OAAO,GAAG,mCAAmC,CAACL,MAAqB;AAC9E,YAAA8B,EAAwC,KAAK,EAAE,MAAA9B,GAAM;AAAA,UACvD,CAAC,GACDK,EAAa,OAAO,GAAG,mCAAmC,CAACL,MAAqB;AAC9E,YAAAkC,EAAwC,KAAK,EAAE,MAAAlC,GAAM;AAAA,UACvD,CAAC,GACDK,EAAa,OAAO,GAAG,yBAAyB,MAAM;AACpD,YAAA0F,EAAa,2CAA2C;AAAA,UAC1D,CAAC,GACD1F,EAAa,OAAO,GAAG,kBAAkB,CAACL,MAAqB;AAC7D,YAAAinC,EAAa,oCAAoC,GACjD3kC,EAAuB,KAAK,EAAE,MAAAtC,GAAM;AAAA,UACtC,CAAC,GACDK,EAAa,OAAO,GAAG,eAAe,OAAOL,GAAMxN,MAAkD;AACnG,YAAAkQ,EAAuB,KAAK,EAAE,MAAA1C,GAAM,iBAAiBxN,GAAU;AAAA,UACjE,CAAC,GACD6N,EAAa,MAAM,GAAG,WAAW,YAAY;AAC3C,YAAAC,EAAoB,MAAA;AACpB,kBAAMwkE,IAAkBV,EAAgB;AACxC,YAAAA,EAAgB,QAAQ/jE,EAAa,OAAO,aAAa,IACpDykE,MACH,MAAMn7E,EAAc,MAAM,gBAAA,GAC1B+W,EAAkB,KAAK,WAAW;AAAA,UAEtC,CAAC,GACDL,EAAa,MAAM,GAAG,iBAAiB,OAAO5P,MAAU;AACtD,gBAAI,CAAC4zE,GAAiC;AACpC,cAAAA,IAAkC,IAClC,MAAM16E,EAAc,MAAM,gBAAA,GAC1B0W,EAAa,OAAO,QAAA;AACpB;AAAA,YACF;AACA,YAAA+jE,EAAgB,QAAQ/jE,EAAa,OAAO,aAAa,IACzDsxB,EAASlhC,GAAO,EAAE,OAAO,SAAS,SAAS,wBAAwB;AAAA,UACrE,CAAC,GACD4P,EAAa,MAAM,GAAG,cAAc,OAAO0kE,MAAW;AACpD,YAAAzkE,EAAoB,QAAQ,CAACqF,MAA8BA,EAAS,SAASH,GAAa,QAAS,GACnG4+D,EAAgB,QAAQ/jE,EAAa,OAAO,aAAa,IACrD0kE,MAAW,2BACb,MAAMp7E,EAAc,MAAM,gBAAA,GAC1B0W,EAAa,OAAO,QAAA;AAAA,UAExB,CAAC;AAAA,QACH,SAAS5P,GAAO;AACd,UAAAkhC,EAASlhC,GAAc,EAAE,OAAO,SAAS,SAAS,qBAAqB;AAAA,QACzE;AAAA,IACF;AAAA,EAGE;AAEJ;AClJO,MAAMu0E,KAA4B,UAC5BC,KAA8B;AAIpC,SAASC,KAAmB;AAiBjC,SAAO;AAAA,IACL,kBAjBuB,CAACzoE,GAAuBtD,GAAgBrO,MACvDA,IAAS,MAAMqO,IAAS,MAAMsD;AAAA,IAiBtC,yBAd8B,CAACi3B,GAAuB1zB,GAAkB6kC,OACjE,EAAE,MAAA7kC,GAAM,OAAO0zB,GAAM,aAAAmR,EAAA;AAAA,IAc5B,4BAXiC,CAACpoC,MAC1BuoE,KAA4BvoE;AAAA,IAWpC,8BARmC,CAACA,MAC5BwoE,KAA8BxoE;AAAA,EAOtC;AAEJ;ACNO,SAAS0oE,GAAuBnlE,GAAkBI,IAAyB,IAAO;AACvF,QAAM,EAAE,eAAAzW,EAAA,IAAkBC,GAAA,GACpB,EAAE,cAAAyW,GAAc,uBAAAG,GAAuB,4BAAAD,GAA4B,qBAAAD,EAAA,IAAwBG,GAAA,GAC3F6jE,IAAiBC,GAAA,GACjBa,IAA0BC,GAAA,GAE1BC,IAAoB57E,EAAA,GACpB67E,IAAyC77E,EAAA,GAEzC87E,IAA4B,CAACp5E,GAAmC6hE,MAAsC;AAC1G,IAAI7hE,EAAM,SAAS4T,KAAQvU,EAAYwiE,CAAO,KAAKxiE,EAAY65E,EAAkB,KAAK,KAGtFA,EAAkB,MAAMl5E,EAAM,OAAO6hE,CAAO;AAAA,EAC9C,GAEMwX,IAAiC,CACrCjzE,MACG;AACH,IAAA8yE,EAAkB,QAAQ9yE,GAC1B+yE,EAAuC,QAAQjB,EAAe,GAAGkB,CAAyB;AAAA,EAC5F,GAEME,IAAsB,CAACxvD,GAAwBpsB,GAAuB0I,IAA2B,WAAc;AACnH,QAAI,CAAC7I,EAAc,MAAM,WAAW8B,EAAY4U,EAAa,KAAK,EAAG;AACrE,UAAMsF,IAAWrF,EAAoB,IAAIN,CAAI;AAC7C,IAAI2F,KAAYA,EAAS,WAAWH,GAAa,YACjDnF,EAAa,MAAM,KAAK,mBAAmBL,GAAMkW,GAAOpsB,GAAM,MAAM;AAClE,MAAK2B,EAAY+G,CAAQ,KAAGA,EAAA;AAAA,IAC9B,CAAC;AAAA,EACH,GAEMmzE,IAAuB,CAC3BzvD,GACApsB,GACA87E,MACG;AACH,UAAMpmD,IAASqmD,EAAMD,CAAc;AACnC,YAAQ97E,EAAK,MAAA;AAAA,MACX,KAAK;AAED,QAAAg8E,GAAqBtmD,GAAQtJ,GAAOrpB,GAAU/C,EAAK,KAAK,CAAC;AAE3D;AAAA,MACF;AACE,QAAAg8E,GAAqBtmD,GAAQtJ,GAAOpsB,EAAK,KAAK;AAAA,IAChD;AAAA,EAEJ;AAEA,SAAAka,GAAmB,MAAM;AACvB,IAAI5D,KACAlW,GAAUq7E,EAAuC,KAAK,KACxDA,EAAuC,MAAA;AAAA,EAE3C,CAAC,GA2EM;AAAA,IACL,gCAAAE;AAAA,IACA,wCAAAF;AAAA,IACA,qBAAAG;AAAA,IACA,sBAAAC;AAAA,IACA,sBA9E2B,CAACzvD,GAAwBlsB,IAA2C,CAAA,MAAO;AACtG,UAAI,CAACL,EAAc,MAAM,WAAW8B,EAAY4U,EAAa,KAAK,EAAG;AACrE,YAAMsF,IAAWrF,EAAoB,IAAIN,CAAI;AAC7C,MAAI2F,KAAYA,EAAS,WAAWH,GAAa,YACjDnF,EAAa,OACT,QAAQ,GAAI,EACb,KAAK,oBAAoBL,GAAMkW,GAAOlsB,GAAS,CAACyG,GAAOyT,MAAgD;AACtG,cAAM6hE,IAA0C,EAAE,OAAA7vD,GAAO,MAAAlW,EAAA;AACzD,YAAIvP,KAASu1E,GAAqC9hE,CAAQ;AACxD,iBAAO,KAAKkhE,EAAwB;AAAA,YAClCW;AAAA,YACAE,GAA6Br7E,GAAoB,SAASD,GAAsB,OAAO;AAAA,UAAA;AAG3F,YAAIu7E,GAAsChiE,CAAQ,GAAG;AACnD,UAAK1D,EAAsB,IAAIR,CAAI,KACjCQ,EAAsB,IAAIR,GAAM,oBAAI,IAAA,CAAK;AAE3C,gBAAMykE,IAAQ,IAAI,IAAIvgE,EAAS,QAAQ,OAAO,QAAQA,EAAS,KAAK,IAAI,EAAE;AAC1E,qBAAW,CAACgS,GAAOyuD,CAAI,KAAKF,EAAM;AAChC,YAAAjkE,EAAsB,IAAIR,CAAI,GAAG,IAAIkW,GAAOyuD,CAAI;AAGlD,iBAAO,KAAKS,EAAwB;AAAA,YAClCW;AAAA,YACAE,GAA6Br7E,GAAoB,SAASD,GAAsB,OAAO;AAAA,UAAA;AAAA,QAE3F;AAAA,MACF,CAAC;AAAA,IACL;AAAA,IAkDE,sBAhD2B,CAC3BurB,GACApsB,GACAE,IAA2C,CAAA,MACxC;AACH,UAAI,CAACL,EAAc,MAAM,WAAW8B,EAAY4U,EAAa,KAAK,EAAG;AACrE,YAAMsF,IAAWrF,EAAoB,IAAIN,CAAI;AAC7C,UAAI2F,KAAYA,EAAS,WAAWH,GAAa,UAAU;AACzD,QAAKjF,EAA2B,IAAIP,CAAI,KACtCO,EAA2B,IAAIP,GAAM,oBAAI,IAAA,CAAK,GAEhDO,EAA2B,IAAIP,CAAI,GAAG,IAAIkW,GAAOpsB,CAAI;AACrD;AAAA,MACF;AACA,MAAAuW,EAAa,OACT,QAAQ,GAAI,EACb,KAAK,oBAAoBL,GAAMkW,GAAOpsB,GAAME,GAAS,CAACyG,GAAOyT,MAAgD;AAC5G,cAAM6hE,IAA0C,EAAE,OAAA7vD,GAAO,MAAAlW,EAAA;AACzD,YAAIvP,KAASu1E,GAAqC9hE,CAAQ;AACxD,iBAAO,KAAKkhE,EAAwB;AAAA,YAClCW;AAAA,YACAE,GAA6Br7E,GAAoB,SAASD,GAAsB,OAAO;AAAA,UAAA;AAG3F,YAAIu7E,GAAsChiE,CAAQ,GAAG;AAInD,cAHK1D,EAAsB,IAAIR,CAAI,KACjCQ,EAAsB,IAAIR,GAAM,oBAAI,IAAA,CAAK,GAEvCkE,EAAS;AACX,uBAAWgS,KAAS,OAAO,KAAKhS,EAAS,KAAK;AAC5C,cAAA1D,EAAsB,IAAIR,CAAI,GAAG,OAAOkW,CAAK;AAIjD,iBAAO,KAAKkvD,EAAwB;AAAA,YAClCW;AAAA,YACAE,GAA6Br7E,GAAoB,SAASD,GAAsB,OAAO;AAAA,UAAA;AAAA,QAE3F;AAAA,MACF,CAAC;AAAA,IACL;AAAA,EAQE;AAEJ;ACzJA,MAAM0lB,KAAY,yBACLE,KAAS,gBAET41D,KAAgC,CAACntE,GAA6BgW,MACzEmO,GAAiCnkB,GAAQgW,GAAKqB,IAAW,IAAIO,IAAiBL,EAAM,GAEzE61D,KAA8B,CAACptE,MAC1C2b,GAAmC3b,GAAQ4X,IAAiBL,IAAQF,EAAS,GAKlEg2D,KAA2B,CAACrtE,GAA6BhG,GAAwBb,MAC5F0rB,GAAgC7kB,GAAQqX,IAAW,CAAA,GAAIrd,GAAYb,GAAWye,IAAiBL,EAAM;AClBhG,SAAS+1D,KAAgC;AAC9C,QAAM/+C,IAAoB;AAAA,IACxB,EAAE,MAAM,QAAiB,SAAS,cAAc,SAAS,MAAM,MAAM,SAAA;AAAA,IACrE,EAAE,MAAM,aAAsB,SAAS,KAAA;AAAA,IACvC,EAAE,MAAM,SAAkB,SAAS,KAAA;AAAA,EAAK,GAGpC,EAAE,cAAAnQ,GAAc,YAAAC,EAAA,IAAeC,GAAaiQ,GAAmBrQ,GAAkBqQ,CAAiB,GAAG;AAAA,IACzG,QAAQ3W;AAAA,IACR,SAASL;AAAAA,EAAA,CACV;AAED,SAAO;AAAA,IACL,cAAA6G;AAAA,IACA,YAAAC;AAAA,EAAA;AAEJ;AAEA,MAAMmQ,KAAa/1B,GAAiBmf,IAAiBL,EAAM;AAIpD,SAASg2D,KAA2B;AACzC,SAAOv0D,GAAS;AAAA,IACd,MAAM;AAAA,MACJ,GAAGwV,GAAW,EAAE,MAAM,QAAQ,SAAS,cAAc;AAAA,IAAA;AAAA,IAEvD,WAAW;AAAA,MACT,GAAGA,GAAW,EAAE,MAAM,aAAa,SAAS,MAAM;AAAA,IAAA;AAAA,IAEpD,OAAO;AAAA,MACL,GAAGA,GAAW,EAAE,MAAM,SAAS,SAAS,MAAM;AAAA,IAAA;AAAA,EAChD,CACD;AACH;AChCO,MAAMg/C,KAA+B,CAACxtE,MAAgC;AAC3E,QAAM,EAAE,cAAAmoB,EAAA,IAAiBilD,GAA4BptE,CAAM,GAErDytE,IAAyB,CAACr8C,MACvBA,EAAc,IAAI,CAACmV,OAAmC;AAAA,IAC3D,OAAOA,EAAa;AAAA,IACpB,OAAOA,EAAa;AAAA,EAAA,EACpB;AAWJ,SAAO;AAAA,IACL,YATiB,OAAOvsC,GAA6BqkB,GAAwBD,MACtEqvD,EAAuB,MAAMtlD,EAAanuB,GAAYqkB,GAAYD,CAAY,CAAC;AAAA,IAStF,iBANsB,OAAOpI,MACtBy3D,EAAuB,MAAMN,GAA8BntE,GAAQgW,CAAG,CAAC;AAAA,EAK9E;AAEJ;;;;;;;;;;;;;;;;;;ACpBA,UAAMpnB,IAAQC,GAsBR0B,IAAOC,GAIPoD,IAAqB5E,EAAS;AAAA,MAClC,MAAM;AACJ,eAAOJ,EAAM;AAAA,MACf;AAAA,MACA,IAAI8C,GAAgD;AAClD,QAAAnB,EAAK,qBAAqBsD,GAAgDnC,CAAQ,CAAC;AAAA,MACrF;AAAA,IAAA,CACD,GAEK6yE,IAAW1tE,GAA2ChI,GAAC,UAAkD,GAGzG,EAAE,YAAA6/B,GAAY,iBAAAC,EAAA,IAAoB6+C,GAA6B5+E,EAAM,MAAM,GAE3E,EAAE,YAAAyvB,GAAY,cAAAD,EAAA,IAAiBkvD,GAAA;AAErC,WAAAjvD,EAAW,YAAYzvB,EAAM,aAC7B+E,GAAQi7B,IAAsBxQ,CAAY,GAC1CzqB,GAAQk7B,IAAoBxQ,CAAU,GAEtC5sB;AAAA,MACE,MAAM7C,EAAM;AAAA,MACZ,CAAC8C,GAAU6C,MAAa;AACtB,QAAI7C,MAAa6C,MACjBX,EAAmB,QAAQhF,EAAM,WAAW,CAAA,IAAK,MACjDyvB,EAAW,YAAY3sB;AAAA,MACzB;AAAA,IAAA,mBAKAvC,EAcEu+E,IAAA;AAAA,MAbC,KAAK7+E,EAAA,cAAW;AAAA,kBACR+E,EAAA;AAAA,oDAAAA,EAAkB,QAAAP;AAAA,MACnB,UAAUkxE,EAAA;AAAA,kDAAAA,EAAQ,QAAAlxE;AAAA,MACzB,UAAUxE,EAAA;AAAA,MACV,OAAOA,EAAA;AAAA,MACP,eAAa6E,EAAAg7B,CAAA;AAAA,MACb,sBAAoBh7B,EAAAi7B,CAAA;AAAA,MACpB,UAAU9/B,EAAA;AAAA,MACV,WAAWA,EAAA;AAAA,MACZ,mBAAgB;AAAA,MACf,WAASA,EAAA;AAAA,MACT,gBAAcA,EAAA;AAAA,MACf,UAAS;AAAA,IAAA;;ICrEPwoB,KAAY,+BACLE,KAAS,qBAETo2D,KAAqC,CAAC3tE,GAA6BgW,MAC9EmO,GAAsCnkB,GAAQgW,GAAKqB,IAAW,CAAA,GAAIO,IAAiBL,IAAQ,CAAA,GAAI,EAAK,GAEzFq2D,KAAmC,CAAC5tE,MAC/C2b,GAAwC3b,GAAQ4X,IAAiBL,IAAQF,EAAS,GAKvEw2D,KAAgC,CAC3C7tE,GACAhG,GACAb,MACG0rB,GAAqC7kB,GAAQqX,IAAW,CAAA,GAAIrd,GAAYb,GAAWye,IAAiBL,EAAM,GChBlGu2D,KAAoC,CAAC9tE,MAAgC;AAChF,QAAM,EAAE,cAAAmoB,EAAA,IAAiBylD,GAAiC5tE,CAAM,GAE1DytE,IAAyB,CAACM,MACvBA,EAAmB,IAAI,CAACxnC,OAAwC;AAAA,IACrE,OAAOA,EAAa;AAAA,IACpB,OAAOA,EAAa;AAAA,EAAA,EACpB;AAWJ,SAAO;AAAA,IACL,YATiB,OAAOvsC,GAA6BqkB,GAAwBD,MACtEqvD,EAAuB,MAAMtlD,EAAanuB,GAAYqkB,GAAYD,CAAY,CAAC;AAAA,IAStF,iBANsB,OAAOpI,MACtBy3D,EAAuB,MAAME,GAAmC3tE,GAAQgW,CAAG,CAAC;AAAA,EAKnF;AAEJ;AC9BO,SAASg4D,KAAqC;AACnD,QAAMz/C,IAAoB;AAAA,IACxB,EAAE,MAAM,QAAiB,SAAS,cAAc,SAAS,MAAM,MAAM,SAAA;AAAA,EAAS,GAG1E,EAAE,cAAAnQ,GAAc,YAAAC,EAAA,IAAeC,GAAaiQ,GAAmBrQ,GAAkBqQ,CAAiB,GAAG;AAAA,IACzG,QAAQ3W;AAAA,IACR,SAASL;AAAAA,EAAA,CACV;AAED,SAAO;AAAA,IACL,cAAA6G;AAAA,IACA,YAAAC;AAAA,EAAA;AAEJ;;;;;;;;;;;;;;;;;;ACPA,UAAMzvB,IAAQC,GAoBR0B,IAAOC,GAIPoD,IAAqB5E,EAAS;AAAA,MAClC,MAAM;AACJ,eAAOJ,EAAM;AAAA,MACf;AAAA,MACA,IAAI8C,GAAgD;AAClD,QAAAnB,EAAK,qBAAqBsD,GAAgDnC,CAAQ,CAAC;AAAA,MACrF;AAAA,IAAA,CACD,GAEK6yE,IAAW1tE,GAA2ChI,GAAC,UAAkD,GAGzG,EAAE,YAAA6/B,GAAY,iBAAAC,EAAA,IAAoBm/C,GAAkCl/E,EAAM,MAAM,GAEhF,EAAE,YAAAyvB,GAAY,cAAAD,EAAA,IAAiB4vD,GAAA;AACrC,WAAAr6E,GAAQi7B,IAAsBxQ,CAAY,GAC1CzqB,GAAQk7B,IAAoBxQ,CAAU,mBAIpClvB,EAaEu+E,IAAA;AAAA,kBAZS95E,EAAA;AAAA,oDAAAA,EAAkB,QAAAP;AAAA,MACnB,UAAUkxE,EAAA;AAAA,kDAAAA,EAAQ,QAAAlxE;AAAA,MACzB,UAAUxE,EAAA;AAAA,MACV,OAAOA,EAAA;AAAA,MACP,eAAa6E,EAAAg7B,CAAA;AAAA,MACb,sBAAoBh7B,EAAAi7B,CAAA;AAAA,MACpB,UAAU9/B,EAAA;AAAA,MACV,WAAWA,EAAA;AAAA,MACZ,mBAAgB;AAAA,MACf,WAASA,EAAA;AAAA,MACT,gBAAcA,EAAA;AAAA,MACf,UAAS;AAAA,IAAA;;ICvDPwoB,KAAY,sBACLE,KAAS,aAET02D,KAA6B,CAACjuE,GAA6BgW,MACtEmO,GAA8BnkB,GAAQgW,GAAKqB,IAAW,IAAIO,IAAiBL,EAAM,GAEtE22D,KAA2B,CAACluE,MACvC2b,GAAgC3b,GAAQ4X,IAAiBL,IAAQF,EAAS,GAK/D82D,KAAwB,CAACnuE,GAA6BhG,GAAwBb,MACzF0rB,GAA6B7kB,GAAQqX,IAAW,CAAA,GAAIrd,GAAYb,GAAWye,IAAiBL,EAAM,GChBvF62D,KAA4B,CAACpuE,MAAgC;AACxE,QAAM,EAAE,cAAAmoB,EAAA,IAAiB+lD,GAAyBluE,CAAM;AAoBxD,SAAO;AAAA,IACL,YAnBiB,OAAOhG,GAA6BqkB,GAAwBD,OAC1D,MAAM+J,EAAanuB,GAAYqkB,GAAYD,CAAY,GAExB,IAAI,CAAC1G,OAA6B;AAAA,MAClF,OAAOA,EAAU;AAAA,MACjB,OAAOA,EAAU;AAAA,IAAA,EACjB;AAAA,IAcF,iBAXsB,OAAO1B,OACV,MAAMi4D,GAA2BjuE,GAAQgW,CAAG,GAEb,IAAI,CAAC0B,OAA6B;AAAA,MAClF,OAAOA,EAAU;AAAA,MACjB,OAAOA,EAAU;AAAA,IAAA,EACjB;AAAA,EAKF;AAEJ;AC9BO,SAAS22D,KAA0B;AACxC,QAAM9/C,IAAoB;AAAA,IACxB,EAAE,MAAM,QAAiB,SAAS,cAAc,SAAS,MAAM,MAAM,SAAA;AAAA,EAAS,GAG1E,EAAE,cAAAnQ,GAAc,YAAAC,EAAA,IAAeC,GAAaiQ,GAAmBrQ,GAAkBqQ,CAAiB,GAAG;AAAA,IACzG,QAAQ3W;AAAA,IACR,SAASL;AAAA,EAAA,CACV;AAED,SAAO;AAAA,IACL,cAAA6G;AAAA,IACA,YAAAC;AAAA,EAAA;AAEJ;;;;;;;;;;;;;;;ACRA,UAAMzvB,IAAQC,GAoBR0B,IAAOC,GAIPoD,IAAqB5E,EAAS;AAAA,MAClC,MAAM;AACJ,eAAOJ,EAAM;AAAA,MACf;AAAA,MACA,IAAI8C,GAAgD;AAClD,QAAAnB,EAAK,qBAAqBsD,GAAgDnC,CAAQ,CAAC;AAAA,MACrF;AAAA,IAAA,CACD,GAGK,EAAE,YAAAg9B,GAAY,iBAAAC,EAAA,IAAoBy/C,GAA0Bx/E,EAAM,MAAM,GAExE,EAAE,YAAAyvB,GAAY,cAAAD,EAAA,IAAiBiwD,GAAA;AACrC,WAAA16E,GAAQi7B,IAAsBxQ,CAAY,GAC1CzqB,GAAQk7B,IAAoBxQ,CAAU,mBAIpClvB,EAYEu+E,IAAA;AAAA,kBAXS95E,EAAA;AAAA,oDAAAA,EAAkB,QAAAP;AAAA,MAC1B,UAAUxE,EAAA;AAAA,MACV,OAAOA,EAAA;AAAA,MACP,eAAa6E,EAAAg7B,CAAA;AAAA,MACb,sBAAoBh7B,EAAAi7B,CAAA;AAAA,MACpB,UAAU9/B,EAAA;AAAA,MACV,WAAWA,EAAA;AAAA,MACZ,mBAAgB;AAAA,MACf,WAASA,EAAA;AAAA,MACT,gBAAcA,EAAA;AAAA,MACf,UAAS;AAAA,IAAA;;;AC3DN,SAASy/E,KAAkC;AAChD,QAAM90D,IAAiBX,GAAA,GACjBmI,IAAM,OAAO,QAAQxH,EAAe,aAAa,sBAAsB,EAAE;AAAA,IAC7E,CAAC,CAAC+0D,GAAct0E,CAAK,OACZ;AAAA,MACL,OAAOs0E;AAAA,MACP,OAAOt0E,EAAM;AAAA,IAAA;AAAA,EAEjB,GAGIu0E,IAAsC99E,EAAiCswB,CAAG;AAMhF,SAAO;AAAA,IACL,qCAAAwtD;AAAA,IACA,oCANyC,CAACv0E,MACnCu0E,EAAoC,MAAM,KAAK,CAACj8E,MAASA,EAAK,UAAU0H,CAAK;AAAA,EAKpF;AAEJ;;;;;;;;;;;;ACnBA,UAAMrL,IAAQC,GAeR0B,IAAOC,GAKPoD,IAAqB5E,EAAS;AAAA,MAClC,MAAM;AACJ,eAAOJ,EAAM;AAAA,MACf;AAAA,MACA,IAAI8C,GAAoB;AACtB,QAAAnB,EAAK,qBAAqBsD,GAAoBnC,CAAQ,CAAC;AAAA,MACzD;AAAA,IAAA,CACD,GAEKU,IAAS,MAAM;AACnB,MAAA7B,EAAK,QAAQqD,EAAmB,KAAK;AAAA,IACvC,GAEM,EAAE,qCAAA46E,EAAA,IAAwCF,GAAA;2BAI9Cn/E,EAYE0V,IAAA;AAAA,kBAXSjR,EAAA;AAAA,oDAAAA,EAAkB,QAAAP;AAAA,MAC1B,OAAOK,EAAA86E,CAAA;AAAA,MACR,cAAW;AAAA,MACX,cAAW;AAAA,MACV,OAAO3/E,EAAA;AAAA,MACP,UAAUA,EAAA;AAAA,MACX,WAAA;AAAA,MACA,OAAA;AAAA,MACA,aAAA;AAAA,MACC,WAASA,EAAA;AAAA,MACT,QAAAuD;AAAA,IAAA;;;AClDE,SAASq8E,KAAgC;AAC9C,QAAMj1D,IAAiBX,GAAA,GACjBmI,IAAM,OAAO,QAAQxH,EAAe,aAAa,oBAAoB,EAAE;AAAA,IAC3E,CAAC,CAACk1D,GAAaz0E,CAAK,OACX;AAAA,MACL,OAAOy0E;AAAA,MACP,OAAOz0E,EAAM;AAAA,IAAA;AAAA,EAEjB,GAGI00E,IAAoCj+E,EAAiCswB,CAAG;AAM9E,SAAO;AAAA,IACL,mCAAA2tD;AAAA,IACA,kCANuC,CAAC10E,MACjC00E,EAAkC,MAAM,KAAK,CAACp8E,MAASA,EAAK,UAAU0H,CAAK;AAAA,EAKlF;AAEJ;;;;;;;;;;;;ACnBA,UAAMrL,IAAQC,GAeR0B,IAAOC,GAKPoD,IAAqB5E,EAAS;AAAA,MAClC,MAAM;AACJ,eAAOJ,EAAM;AAAA,MACf;AAAA,MACA,IAAI8C,GAAoB;AACtB,QAAAnB,EAAK,qBAAqBsD,GAAoBnC,CAAQ,CAAC;AAAA,MACzD;AAAA,IAAA,CACD,GAEKU,IAAS,MAAM;AACnB,MAAA7B,EAAK,QAAQqD,EAAmB,KAAK;AAAA,IACvC,GAEM,EAAE,mCAAA+6E,EAAA,IAAsCF,GAAA;2BAI5Ct/E,EAYE0V,IAAA;AAAA,kBAXSjR,EAAA;AAAA,oDAAAA,EAAkB,QAAAP;AAAA,MAC1B,OAAOK,EAAAi7E,CAAA;AAAA,MACR,cAAW;AAAA,MACX,cAAW;AAAA,MACV,OAAO9/E,EAAA;AAAA,MACP,UAAUA,EAAA;AAAA,MACX,WAAA;AAAA,MACA,aAAA;AAAA,MACA,OAAA;AAAA,MACC,WAASA,EAAA;AAAA,MACT,QAAAuD;AAAA,IAAA;;ICnCQw8E,KAAoC;AAAA,EAC/C,cAAc;AAChB;AAEO,SAASC,GAAkBjqE,GAA2C5T,IAAsC,IAAI;AACrH,SAAO;AAAA,IACL,OAAA4T;AAAA,IACA,SAAS;AAAA,MACP,GAAGgqE;AAAA,MACH,GAAG59E;AAAA,IAAA;AAAA,EACL;AAEJ;;;;;;;;;;;ACtBA,UAAMpC,IAAQC,GAOR+H,IAAaC,GAAmBhI,GAAA,YAAmB,GAGnD,EAAE,yBAAAigF,GAAyB,wBAAA1/C,EAAA,IAA2BL,GAAuBngC,EAAM,SAAS,GAE5FoT,IAAcktB,GAAA,GAEd,EAAE,GAAAr9B,EAAA,IAAM/C,EAAA;2BAIZK,EAqCuCkgC,IAAA;AAAA,kBApC5Bz4B,EAAA;AAAA,oDAAAA,EAAU,QAAAvD;AAAA,MAClB,uBAAqBK,EAAAo7E,CAAA;AAAA,MACrB,8BAA4Bp7E,EAAA07B,CAAA;AAAA,MAC5B,gBAAc17B,EAAAsO,CAAA;AAAA,MACf,mBAAgB;AAAA,MACf,kBAAgB;AAAA,IAAA;MAEN,MAAIxS,EACb,CAcY,EAAA,OAfYuU,SAAiBS,QAAQ;AAAA,QACjD/U,EAcYsG,IAdZ0L,GAcYsC,GAbO,EACjB,OAAM,GAAA,CAAE,GAAA;AAAA,qBAER,MASiB;AAAA,YATjBtU,EASiBuG,IAAA,MAAA;AAAA,yBARf,MAAoB;AAAA,oBAAjBwO,EAAS,KAAK,IAAG,KACpB,CAAA;AAAA,gBACQA,EAAS,KAAK,KAAK,YAAYA,EAAS,KAAK,iBADrDrV,EAMEQ,IAAA;AAAA;kBAJA,MAAK;AAAA,kBACL,OAAM;AAAA,kBACN,MAAK;AAAA,kBACJ,OAAO+D,EAAA7B,CAAA,EAAC,6CAAA;AAAA,gBAAA;;;;;;;;MAKN,MAAIrC,EACb,CASQ,EAAA,OAVgBwU,SAAiBS,QAAQ;AAAA,QACjDhV,EASQL,UATO4U,CAAS,CAAA,GAAA;AAAA,qBACtB,MAAoB;AAAA,gBAAjBS,EAAS,KAAK,IAAG,KACpB,CAAA;AAAA,YACQA,EAAS,KAAK,KAAK,YAAYA,EAAS,KAAK,iBADrDtV,EAMEQ,IAAA;AAAA;cAJA,MAAK;AAAA,cACL,OAAM;AAAA,cACN,MAAK;AAAA,cACJ,OAAO+D,EAAA7B,CAAA,EAAC,6CAAA;AAAA,YAAA;;;;;;;;;;;;;;;;;;ACpDnB,UAAMjD,IAAQC,GAOR+H,IAAaC,GAAmBhI,GAAA,YAAmB,GAGnD,EAAE,kBAAAkgF,GAAkB,iBAAApgD,EAAA,IAAoBZ,GAAwBn/B,EAAM,SAAS,GAE/EoT,IAAcysB,GAAA;2BAIlBt/B,EAOE2/B,IAAA;AAAA,kBANSl4B,EAAA;AAAA,oDAAAA,EAAU,QAAAvD;AAAA,MAClB,eAAaK,EAAAq7E,CAAA;AAAA,MACb,sBAAoBr7E,EAAAi7B,CAAA;AAAA,MACpB,gBAAcj7B,EAAAsO,CAAA;AAAA,MACf,mBAAgB;AAAA,MACf,kBAAgB;AAAA,IAAA;;;;;;;;;;;;ACtBrB,UAAMpT,IAAQC,GASR+H,IAAaC,GAAmBhI,GAAA,YAAmB,GAGnD,EAAE,WAAA4oB,EAAA,IAAc4J,GAA6BzyB,EAAM,UAAU,GAE7D,EAAE,kBAAAmgF,GAAkB,iBAAApgD,MAAoBW,GAAuB7X,CAAS,GAExEzV,IAAcytB,GAAA;2BAIlBtgC,EAOE2/B,IAAA;AAAA,kBANSl4B,EAAA;AAAA,oDAAAA,EAAU,QAAAvD;AAAA,MAClB,eAAaK,EAAAq7E,CAAA;AAAA,MACb,sBAAoBr7E,EAAAi7B,CAAA;AAAA,MACpB,gBAAcj7B,EAAAsO,CAAA;AAAA,MACf,mBAAgB;AAAA,MACf,kBAAgB;AAAA,IAAA;;IChCfgtE,KAAO;AAEN,SAASC,KAAwB;AAGtC,SAAO;AAAA,IACL,wBAH6B7+D,GAAW4+D,IAAM,IAAO,cAAc,EAAE,eAAe,IAAO;AAAA,EAG3F;AAEJ;","x_google_ignoreList":[130,177,226]}