@fps-games/editor 0.2.1-beta.1 → 0.2.1-beta.2
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.
- package/dist/agent-bridge/capabilities/ui-regions.d.ts.map +1 -1
- package/dist/agent-bridge/capabilities/ui-regions.js +16 -0
- package/dist/agent-bridge/capabilities/ui-regions.js.map +1 -1
- package/dist/build-info.json +43 -43
- package/dist/internal/material-preview.d.ts +22 -0
- package/dist/internal/material-preview.d.ts.map +1 -0
- package/dist/internal/material-preview.js +186 -0
- package/dist/internal/material-preview.js.map +1 -0
- package/dist/internal/project-model-preview.d.ts +4 -0
- package/dist/internal/project-model-preview.d.ts.map +1 -0
- package/dist/internal/project-model-preview.js +359 -0
- package/dist/internal/project-model-preview.js.map +1 -0
- package/dist/local-editor-agent-context.d.ts +12 -1
- package/dist/local-editor-agent-context.d.ts.map +1 -1
- package/dist/local-editor-agent-context.js +47 -0
- package/dist/local-editor-agent-context.js.map +1 -1
- package/dist/local-editor-harness.d.ts +15 -2
- package/dist/local-editor-harness.d.ts.map +1 -1
- package/dist/local-editor-harness.js +310 -21
- package/dist/local-editor-harness.js.map +1 -1
- package/dist/local-editor-tools.d.ts +1 -0
- package/dist/local-editor-tools.d.ts.map +1 -1
- package/dist/local-editor-tools.js +3 -0
- package/dist/local-editor-tools.js.map +1 -1
- package/dist/playable-local-editor-host.d.ts +4 -0
- package/dist/playable-local-editor-host.d.ts.map +1 -1
- package/dist/playable-local-editor-host.js +27 -0
- package/dist/playable-local-editor-host.js.map +1 -1
- package/dist/playable-product-scene-capabilities.d.ts.map +1 -1
- package/dist/playable-product-scene-capabilities.js +9 -3
- package/dist/playable-product-scene-capabilities.js.map +1 -1
- package/dist/playable-standard-project.d.ts.map +1 -1
- package/dist/playable-standard-project.js +5 -2
- package/dist/playable-standard-project.js.map +1 -1
- package/node_modules/@fps-games/babylon-renderer/package.json +7 -7
- package/node_modules/@fps-games/editor-babylon/dist/marker-overlay.js +24 -0
- package/node_modules/@fps-games/editor-babylon/dist/marker-overlay.js.map +1 -1
- package/node_modules/@fps-games/editor-babylon/dist/projection.d.ts +10 -1
- package/node_modules/@fps-games/editor-babylon/dist/projection.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-babylon/dist/projection.js +96 -1
- package/node_modules/@fps-games/editor-babylon/dist/projection.js.map +1 -1
- package/node_modules/@fps-games/editor-babylon/dist/scene-view-spatial-overlay-controller.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-babylon/dist/scene-view-spatial-overlay-controller.js +85 -22
- package/node_modules/@fps-games/editor-babylon/dist/scene-view-spatial-overlay-controller.js.map +1 -1
- package/node_modules/@fps-games/editor-babylon/dist/selection-presentation-controller.d.ts +2 -0
- package/node_modules/@fps-games/editor-babylon/dist/selection-presentation-controller.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-babylon/dist/selection-presentation-controller.js +150 -4
- package/node_modules/@fps-games/editor-babylon/dist/selection-presentation-controller.js.map +1 -1
- package/node_modules/@fps-games/editor-babylon/dist/transform-gizmo-controller.d.ts +1 -0
- package/node_modules/@fps-games/editor-babylon/dist/transform-gizmo-controller.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-babylon/dist/transform-gizmo-controller.js +249 -15
- package/node_modules/@fps-games/editor-babylon/dist/transform-gizmo-controller.js.map +1 -1
- package/node_modules/@fps-games/editor-babylon/dist/types.d.ts +1 -1
- package/node_modules/@fps-games/editor-babylon/dist/types.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-babylon/dist/types.js.map +1 -1
- package/node_modules/@fps-games/editor-babylon/package.json +6 -6
- package/node_modules/@fps-games/editor-browser/dist/index.d.ts +5 -0
- package/node_modules/@fps-games/editor-browser/dist/index.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/index.js +3 -0
- package/node_modules/@fps-games/editor-browser/dist/index.js.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-browser-continuity.d.ts +35 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-browser-continuity.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-browser-continuity.js +136 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-browser-continuity.js.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-filesystem.d.ts +46 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-filesystem.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-filesystem.js +283 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-filesystem.js.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-preview-cleanup-registry.d.ts +12 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-preview-cleanup-registry.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-preview-cleanup-registry.js +67 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-preview-cleanup-registry.js.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-open.d.ts +6 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-open.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-open.js +9 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-open.js.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-preview.d.ts +7 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-preview.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-preview.js +20 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-preview.js.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-project-media-thumbnail-cache.d.ts +9 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-project-media-thumbnail-cache.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-project-media-thumbnail-cache.js +219 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-project-media-thumbnail-cache.js.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-tool-presentation.d.ts +14 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-tool-presentation.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-tool-presentation.js +42 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-tool-presentation.js.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-asset-kind.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-asset-kind.js +2 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-asset-kind.js.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-console.d.ts +27 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-console.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-console.js +288 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-console.js.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-icons.d.ts +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-icons.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-icons.js +29 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-icons.js.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.d.ts +20 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.js +321 -60
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.js.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-prefab-stage.d.ts +2 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-prefab-stage.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-prefab-stage.js +4 -2
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-prefab-stage.js.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-types.d.ts +63 -3
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-types.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-types.js.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-workbench.d.ts +9 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-workbench.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-workbench.js +88 -16
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-workbench.js.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.d.ts +2 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.js +1463 -356
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.js.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-viewport-orientation.d.ts +13 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-viewport-orientation.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-viewport-orientation.js +15 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-viewport-orientation.js.map +1 -0
- package/node_modules/@fps-games/editor-browser/package.json +7 -7
- package/node_modules/@fps-games/editor-core/dist/editor-tools.d.ts +1 -0
- package/node_modules/@fps-games/editor-core/dist/editor-tools.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-core/dist/editor-tools.js +3 -1
- package/node_modules/@fps-games/editor-core/dist/editor-tools.js.map +1 -1
- package/node_modules/@fps-games/editor-core/dist/viewport-tools.d.ts +11 -2
- package/node_modules/@fps-games/editor-core/dist/viewport-tools.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-core/dist/viewport-tools.js +12 -1
- package/node_modules/@fps-games/editor-core/dist/viewport-tools.js.map +1 -1
- package/node_modules/@fps-games/editor-core/package.json +6 -6
- package/node_modules/@fps-games/editor-forge-play/package.json +2 -2
- package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/catalog.d.ts +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/catalog.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/catalog.js +5 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/catalog.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/index.d.ts +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/index.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/index.js +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/index.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/handler.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/handler.js +15 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/handler.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/routes.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/routes.js +3 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/routes.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/types.d.ts +6 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/types.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/types.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/index.d.ts +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/index.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/index.js +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/index.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/scene-source.d.ts +4 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/scene-source.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/scene-source.js +10 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/scene-source.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/index.d.ts +4 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/index.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/index.js +4 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/index.js.map +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/protocol.d.ts +4 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/protocol.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/protocol.js +86 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/protocol.js.map +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/support.d.ts +9 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/support.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/support.js +76 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/support.js.map +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/types.d.ts +34 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/types.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/types.js +2 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/types.js.map +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/client.d.ts +4 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/client.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/client.js +40 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/client.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.d.ts +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.js +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-authoring-api.d.ts +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-authoring-api.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-authoring-api.js +94 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-authoring-api.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-file-handle.d.ts +14 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-file-handle.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-file-handle.js +101 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-file-handle.js.map +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-files.d.ts +23 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-files.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-files.js +180 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-files.js.map +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/package.json +6 -6
- package/node_modules/@fps-games/editor-protocol/dist/agent.d.ts +23 -3
- package/node_modules/@fps-games/editor-protocol/dist/agent.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-protocol/dist/agent.js.map +1 -1
- package/node_modules/@fps-games/editor-protocol/package.json +2 -2
- package/node_modules/@fps-games/editor-tooling/package.json +3 -3
- package/node_modules/@fps-games/editor-ui/dist/editor-ui-theme.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-ui/dist/editor-ui-theme.js +103 -10
- package/node_modules/@fps-games/editor-ui/dist/editor-ui-theme.js.map +1 -1
- package/node_modules/@fps-games/editor-ui/package.json +1 -1
- package/node_modules/@fps-games/playable-assets/package.json +1 -1
- package/node_modules/@fps-games/playable-contracts/package.json +1 -1
- package/node_modules/@fps-games/playable-rendering/package.json +2 -2
- package/node_modules/@fps-games/playable-runtime/package.json +12 -12
- package/node_modules/@fps-games/playable-runtime-data/package.json +4 -4
- package/node_modules/@fps-games/playable-scene/package.json +2 -2
- package/node_modules/@fps-games/plugin-api/package.json +1 -1
- package/node_modules/@fps-games/plugin-assets/dist/version.d.ts +1 -1
- package/node_modules/@fps-games/plugin-assets/dist/version.js +1 -1
- package/node_modules/@fps-games/plugin-assets/dist/version.js.map +1 -1
- package/node_modules/@fps-games/plugin-assets/package.json +5 -5
- package/node_modules/@fps-games/plugin-hierarchy/dist/version.d.ts +1 -1
- package/node_modules/@fps-games/plugin-hierarchy/dist/version.js +1 -1
- package/node_modules/@fps-games/plugin-hierarchy/dist/version.js.map +1 -1
- package/node_modules/@fps-games/plugin-hierarchy/package.json +5 -5
- package/node_modules/@fps-games/plugin-host/package.json +2 -2
- package/node_modules/@fps-games/plugin-markers/dist/version.d.ts +1 -1
- package/node_modules/@fps-games/plugin-markers/dist/version.js +1 -1
- package/node_modules/@fps-games/plugin-markers/dist/version.js.map +1 -1
- package/node_modules/@fps-games/plugin-markers/package.json +5 -5
- package/node_modules/@fps-games/plugin-materials/dist/version.d.ts +1 -1
- package/node_modules/@fps-games/plugin-materials/dist/version.js +1 -1
- package/node_modules/@fps-games/plugin-materials/dist/version.js.map +1 -1
- package/node_modules/@fps-games/plugin-materials/package.json +5 -5
- package/node_modules/@fps-games/plugin-rendering/dist/version.d.ts +1 -1
- package/node_modules/@fps-games/plugin-rendering/dist/version.js +1 -1
- package/node_modules/@fps-games/plugin-rendering/dist/version.js.map +1 -1
- package/node_modules/@fps-games/plugin-rendering/package.json +5 -5
- package/node_modules/@fps-games/plugin-scene/dist/version.d.ts +1 -1
- package/node_modules/@fps-games/plugin-scene/dist/version.js +1 -1
- package/node_modules/@fps-games/plugin-scene/dist/version.js.map +1 -1
- package/node_modules/@fps-games/plugin-scene/package.json +5 -5
- package/node_modules/@fps-games/plugin-shadow-map-experiment/dist/version.d.ts +1 -1
- package/node_modules/@fps-games/plugin-shadow-map-experiment/dist/version.js +1 -1
- package/node_modules/@fps-games/plugin-shadow-map-experiment/dist/version.js.map +1 -1
- package/node_modules/@fps-games/plugin-shadow-map-experiment/package.json +5 -5
- package/node_modules/@fps-games/plugin-shadows/dist/version.d.ts +1 -1
- package/node_modules/@fps-games/plugin-shadows/dist/version.js +1 -1
- package/node_modules/@fps-games/plugin-shadows/dist/version.js.map +1 -1
- package/node_modules/@fps-games/plugin-shadows/package.json +7 -7
- package/package.json +22 -22
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projection.js","sourceRoot":"","sources":["../src/projection.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n EditorSelectionState,\n EditorTransformMatrix,\n EditorTransformPivot,\n EditorTransformSnapshot,\n EditorTransformVec3,\n} from '@fps-games/editor-core';\nimport {\n cloneEditorTransformMatrix,\n combineEditorTransforms,\n createIdentityEditorTransformMatrix,\n createEditorTransformMatrixSnapshot,\n isEditorTransformMatrixSnapshot,\n readEditorTransformPosition,\n toEditorLocalTransformFromWorld,\n} from '@fps-games/editor-core';\nimport type {\n ArtistMaterialProfile,\n ArtistMaterialSlotBinding,\n ArtistMaterialTextureRef,\n MaterialSlotSourceDescriptor,\n SceneMaterialAssetKind,\n} from '@fps-games/editor-protocol';\nimport {\n applyBabylonDefaultOutline,\n collectBabylonMaterialOwnerCandidates,\n resolveBabylonEffectiveMaterialOwner,\n type BabylonDefaultOutlineOptions,\n type BabylonMaterialOwnerTarget,\n} from '@fps-games/babylon-renderer';\nimport {\n isMaterialOwnerResolutionPointerVerified,\n resolveMaterialOwner,\n type MaterialOwnerMatchKind,\n type MaterialOwnerResolvedIdentity,\n type MaterialOwnerResolution,\n type MaterialOwnerResolutionDiagnostic,\n} from '@fps-games/playable-contracts';\nimport type {\n BabylonRuntimeGlobal,\n RuntimeCamera,\n RuntimeScene,\n} from './types';\nimport { applyArtistMaterialProfileToRuntimeMaterial } from './material-property-adapter';\nimport {\n pickBabylonProjectionNodeIdAt,\n resolveBabylonPickSelectionNodeId,\n resolveBabylonProjectionNodeId,\n} from './projection-pick-resolver';\nimport {\n normalizeProjectionOwnerNodePath,\n readProjectionSourceNodeSegment,\n} from './projection-source-owner-path';\nimport {\n createMaterialSlotOwnerPathMatchKey,\n isMaterialSlotOwnerPathMatch,\n} from './material-slot-source-resolver';\nimport {\n isBabylonPrimitiveProjectionSharedMaterial,\n} from './primitive-projection-instancing';\nimport {\n createBabylonEditorSelectionPresentationController,\n type BabylonEditorSelectionPresentationController,\n type BabylonEditorSelectionPresentationDiagnostics,\n type BabylonEditorSelectionPresentationTarget,\n} from './selection-presentation-controller';\n\nexport type BabylonEditorProjectionVec3 = EditorTransformVec3;\nexport interface BabylonEditorProjectionVec2 {\n x: number;\n y: number;\n}\n\nconst PROJECTION_LOCAL_MATRIX_METADATA_KEY = 'editorLocalTransformMatrix';\nconst MIN_SELECTION_BOUNDS_PROXY_SIZE = 0.002;\n\nexport type BabylonEditorProjectionTransform = EditorTransformSnapshot;\n\nexport interface BabylonEditorProjectionAssetTransform {\n position?: BabylonEditorProjectionVec3;\n rotation?: BabylonEditorProjectionVec3;\n rotationDeg?: BabylonEditorProjectionVec3;\n scale?: number | BabylonEditorProjectionVec3;\n}\n\nexport interface BabylonEditorProjectionAsset {\n id?: string;\n sourceId?: string;\n transform?: BabylonEditorProjectionAssetTransform;\n metadata?: Record<string, unknown>;\n}\n\nexport type BabylonEditorProjectionPrimitiveShape = 'cube' | 'sphere' | 'plane' | 'capsule';\n\nexport interface BabylonEditorProjectionPrimitive {\n shape: BabylonEditorProjectionPrimitiveShape;\n}\n\nexport interface BabylonEditorProjectionOutline {\n strategy?: 'babylon-default';\n renderOutline?: boolean;\n outlineWidth?: number;\n outlineColor?: BabylonEditorProjectionColorRGB;\n}\n\nexport type BabylonEditorProjectionCameraMode = 'orthographic' | 'perspective';\n\nexport interface BabylonEditorProjectionCameraSettings {\n projection?: BabylonEditorProjectionCameraMode;\n alpha: number;\n beta: number;\n radius: number;\n orthoSize: number;\n fov?: number;\n targetOffset?: BabylonEditorProjectionVec3;\n minZ?: number;\n maxZ?: number;\n lowerBetaLimit?: number;\n upperBetaLimit?: number;\n lowerRadiusLimit?: number;\n upperRadiusLimit?: number;\n inertia?: number;\n targetScreenOffset?: BabylonEditorProjectionVec2;\n}\n\nexport interface BabylonEditorProjectionCameraRigApplyOptions {\n target?: BabylonEditorProjectionVec3 | null;\n lockOrbit?: boolean;\n}\n\nexport interface BabylonEditorProjectionColorRGB {\n r: number;\n g: number;\n b: number;\n}\n\nexport interface BabylonEditorProjectionDirectionalLightSettings {\n type: 'directional';\n intensity: number;\n direction: BabylonEditorProjectionVec3;\n diffuseColor?: BabylonEditorProjectionColorRGB;\n helperVisible?: boolean;\n}\n\nexport interface BabylonEditorProjectionHemisphericLightSettings {\n type: 'hemispheric';\n intensity: number;\n diffuseColor?: BabylonEditorProjectionColorRGB;\n groundColor?: BabylonEditorProjectionColorRGB;\n helperVisible?: boolean;\n}\n\nexport type BabylonEditorProjectionLightSettings =\n | BabylonEditorProjectionDirectionalLightSettings\n | BabylonEditorProjectionHemisphericLightSettings;\n\nexport type BabylonEditorProjectionShadowMode = 'default' | 'none' | 'blob' | 'static' | 'planar' | 'dynamic';\n\nexport interface BabylonEditorProjectionRendering {\n renderingGroupId?: number;\n alphaIndex?: number;\n}\n\nexport interface BabylonEditorProjectionNode {\n id: string;\n name?: string;\n parentId?: string | null;\n active?: boolean;\n transform?: BabylonEditorProjectionTransform;\n asset?: BabylonEditorProjectionAsset | null;\n primitive?: BabylonEditorProjectionPrimitive | null;\n helperKind?: 'root';\n runtimeKind?: 'camera' | 'light';\n shadow?: unknown;\n shadowPlan?: unknown;\n rendering?: BabylonEditorProjectionRendering;\n camera?: BabylonEditorProjectionCameraSettings;\n light?: BabylonEditorProjectionLightSettings;\n outline?: BabylonEditorProjectionOutline | null;\n artistMaterialKind?: SceneMaterialAssetKind;\n artistMaterialProfile?: ArtistMaterialProfile;\n artistMaterialSlotBindings?: ArtistMaterialSlotBinding[];\n}\n\nexport interface BabylonEditorProjectionImportResult {\n meshes?: any[];\n transformNodes?: any[];\n animationGroups?: any[];\n}\n\nexport type BabylonEditorProjectionImportNodeKind = 'root' | 'transform' | 'mesh';\n\nexport interface BabylonEditorProjectionImportNodeSnapshot {\n id: string;\n parentId: string | null;\n name: string;\n kind: BabylonEditorProjectionImportNodeKind;\n sourceName?: string;\n ownerNodePath?: string;\n materialIds?: string[];\n}\n\nexport interface BabylonEditorProjectionImportMaterialSnapshot {\n id: string;\n name: string;\n kind?: string;\n nodeIds: string[];\n textureIds: string[];\n}\n\nexport interface BabylonEditorProjectionImportTextureSnapshot {\n id: string;\n name: string;\n kind?: string;\n url?: string;\n}\n\nexport interface BabylonEditorProjectionImportAnimationSnapshot {\n id: string;\n name: string;\n}\n\nexport interface BabylonEditorProjectionImportStructureSnapshot {\n projectionNodeId: string;\n assetId?: string;\n sourceId?: string;\n nodes: BabylonEditorProjectionImportNodeSnapshot[];\n materials: BabylonEditorProjectionImportMaterialSnapshot[];\n textures: BabylonEditorProjectionImportTextureSnapshot[];\n animations: BabylonEditorProjectionImportAnimationSnapshot[];\n}\n\nexport interface BabylonEditorProjectionImportContext {\n babylon: BabylonRuntimeGlobal;\n scene: RuntimeScene;\n root: any;\n node: BabylonEditorProjectionNode;\n asset: BabylonEditorProjectionAsset;\n}\n\nexport type BabylonEditorProjectionImporter = (\n context: BabylonEditorProjectionImportContext,\n) => Promise<BabylonEditorProjectionImportResult | null | undefined>;\n\nexport type BabylonEditorProjectionMaterialProfileSource = 'rootProfile' | 'slotBinding';\nexport type BabylonEditorProjectionMaterialProfileMatchKind =\n | 'root'\n | MaterialOwnerMatchKind\n | 'none';\nexport type BabylonEditorProjectionMaterialProfileTargetStatus =\n | 'material'\n | 'subMaterial'\n | 'primitiveFallbackMaterial'\n | 'missingMeshOwner'\n | 'missingMaterial'\n | 'missingTargetMaterial'\n | 'missingSubMaterial';\n\nexport interface BabylonEditorProjectionMaterialProfileDiagnostic {\n projectionNodeId: string;\n source: BabylonEditorProjectionMaterialProfileSource;\n applied: boolean;\n matchKind: BabylonEditorProjectionMaterialProfileMatchKind;\n targetMaterialStatus: BabylonEditorProjectionMaterialProfileTargetStatus;\n slotId?: string;\n ownerNodePath?: string;\n meshOwnerNodePath?: string | null;\n primitiveIndex?: number;\n targetMaterialName?: string;\n targetMaterialType?: string | null;\n ownerResolutionStatus?: ProjectionMaterialOwnerResolution['status'];\n ownerDiagnosticCode?: MaterialOwnerResolutionDiagnostic['code'];\n ownerDiagnosticSeverity?: MaterialOwnerResolutionDiagnostic['severity'];\n ownerCandidateIds?: string[];\n ownerIdentity?: MaterialOwnerResolvedIdentity;\n warningMessage?: string;\n}\n\nexport interface BabylonEditorProjectionOptions {\n babylon: BabylonRuntimeGlobal;\n scene: RuntimeScene;\n importModel?: BabylonEditorProjectionImporter;\n resolveTextureUrl?: (texture: ArtistMaterialTextureRef) => string | null | undefined;\n /** @deprecated Selection presentation no longer uses EdgesRenderer prewarming. */\n selectionEdgesPrewarm?: BabylonEditorProjectionSelectionEdgesPrewarm;\n selectionPresentationController?: BabylonEditorSelectionPresentationController;\n logger?: Pick<Console, 'warn'> & Partial<Pick<Console, 'info'>>;\n onProjectionReady?: (event: BabylonEditorProjectionReadyEvent) => void;\n onProjectionBatchSettled?: (event: BabylonEditorProjectionBatchSettledEvent) => void;\n onMaterialProfileDiagnostic?: (diagnostic: BabylonEditorProjectionMaterialProfileDiagnostic) => void;\n}\n\nexport type BabylonEditorProjectionSelectionEdgesPrewarm = 'eager' | 'lazy' | 'idle';\n\ntype ProjectionMaterialSlotBoundingBox = {\n min?: [number, number, number];\n max?: [number, number, number];\n};\n\ntype ProjectionMaterialSlotDescriptor = MaterialSlotSourceDescriptor & {\n key: string;\n normalizedOwnerNodePath: string;\n matchKey: string;\n triangleCount?: number;\n boundingBox?: ProjectionMaterialSlotBoundingBox;\n};\n\ntype ProjectionMaterialSlotBinding = {\n slot: ProjectionMaterialSlotDescriptor;\n profile: ArtistMaterialProfile;\n source: Exclude<BabylonEditorProjectionMaterialProfileSource, 'rootProfile'>;\n};\n\ntype ProjectionMaterialSlotDescriptorInput = Partial<Record<keyof MaterialSlotSourceDescriptor, unknown>> & {\n triangleCount?: unknown;\n boundingBox?: unknown;\n};\n\ntype ProjectionMaterialSlotTarget = {\n material: unknown;\n clonedMaterials: unknown[];\n};\n\ntype ProjectionMaterialDetachResult = {\n material: unknown;\n clonedMaterials: unknown[];\n projectionOwnsMaterialLifecycle: boolean;\n};\n\ntype ProjectionMaterialSlotTargetResolution = {\n target: ProjectionMaterialSlotTarget | null;\n targetMaterialStatus: BabylonEditorProjectionMaterialProfileTargetStatus;\n warningMessage?: string;\n};\n\ntype ProjectionMaterialOwnerResolution = MaterialOwnerResolution<BabylonMaterialOwnerTarget>;\n\ntype ProjectionMaterialOwnerResolutionContext = {\n resolve: (\n slot: ProjectionMaterialSlotDescriptor,\n options?: { explicitSlotBinding?: boolean },\n ) => ProjectionMaterialOwnerResolution;\n};\n\nexport interface BabylonEditorProjectionReadyEvent {\n nodeId: string;\n async: boolean;\n}\n\nexport interface BabylonEditorProjectionBatchSettledEvent {\n batchId: number;\n nodeIds: string[];\n asyncNodeIds: string[];\n settledNodeIds: string[];\n}\n\nexport type BabylonEditorProjectionBatchState = 'pending' | 'settled' | 'stale';\n\nexport interface BabylonEditorProjectionBatchStatus {\n batchId: number;\n nodeIds: string[];\n asyncNodeIds: string[];\n pendingNodeIds: string[];\n settledNodeIds: string[];\n state: BabylonEditorProjectionBatchState;\n}\n\nexport interface BabylonEditorProjectionBatchHandle {\n batchId: number;\n nodeIds: string[];\n getStatus(): BabylonEditorProjectionBatchStatus;\n settled: Promise<BabylonEditorProjectionBatchStatus>;\n}\n\nexport interface BabylonEditorProjectionIdleState {\n idle: boolean;\n activeBatchIds: number[];\n lastBatch: BabylonEditorProjectionBatchStatus | null;\n}\n\nexport interface BabylonEditorProjectionPreviewVisibilityEntry {\n nodeId: string;\n visible: boolean;\n authoredActive: boolean;\n effectiveVisible: boolean;\n}\n\nexport interface BabylonEditorProjectionDebugBounds {\n min: BabylonEditorProjectionVec3;\n max: BabylonEditorProjectionVec3;\n size: BabylonEditorProjectionVec3;\n center: BabylonEditorProjectionVec3;\n}\n\nexport interface BabylonEditorProjectionShadowDebugOverlayItem {\n id: string;\n kind: 'caster-bounds' | 'receiver-bounds' | 'receiver-surface' | 'light-direction' | 'footprint' | 'artifact-bounds';\n bounds?: BabylonEditorProjectionDebugBounds;\n center?: BabylonEditorProjectionVec3;\n size?: BabylonEditorProjectionVec3;\n direction?: BabylonEditorProjectionVec3;\n}\n\nexport interface ProjectedBabylonEditorNode {\n nodeId: string;\n root: any;\n outlineMeshes: any[];\n selectionMeshes?: any[];\n selectionPresentationTargets?: BabylonEditorSelectionPresentationTarget[];\n animationGroups: any[];\n runtimeObjects: any[];\n importStructure?: BabylonEditorProjectionImportStructureSnapshot | null;\n loadPromise?: Promise<void>;\n}\n\nexport interface BabylonEditorProjection {\n projectNodes(nodes: BabylonEditorProjectionNode[]): BabylonEditorProjectionBatchHandle;\n projectNode(node: BabylonEditorProjectionNode): ProjectedBabylonEditorNode | null;\n removeNode(nodeId: string): void;\n rebuild(nodes: BabylonEditorProjectionNode[]): BabylonEditorProjectionBatchHandle;\n getLastProjectionBatch(): BabylonEditorProjectionBatchHandle | null;\n getIdleState(): BabylonEditorProjectionIdleState;\n waitForIdle(): Promise<BabylonEditorProjectionIdleState>;\n readNodeTransform(nodeId: string): EditorTransformSnapshot | null;\n readNodeTransforms(nodeIds: string[]): Record<string, EditorTransformSnapshot>;\n toNodeLocalTransform?(nodeId: string, worldTransform: EditorTransformSnapshot): EditorTransformSnapshot | null;\n readNodeImportStructure(nodeId: string): BabylonEditorProjectionImportStructureSnapshot | null;\n setNodeTransformPreview(nodeId: string, transform: EditorTransformSnapshot): void;\n setNodeTransformsPreview(transforms: Record<string, EditorTransformSnapshot>): void;\n getAttachableRoot(nodeId: string): any | null;\n getSelectionBounds(nodeIds: string[]): BabylonEditorProjectionBounds | null;\n getSelectionPivot(nodeIds: string[]): EditorTransformPivot | null;\n syncNodeTransform(node: BabylonEditorProjectionNode): void;\n syncRuntimeNode(node: BabylonEditorProjectionNode): boolean;\n syncNodeMetadata(node: BabylonEditorProjectionNode): void;\n syncSelection(selection: EditorSelectionState): void;\n getSelectionPresentationDiagnostics(): BabylonEditorSelectionPresentationDiagnostics;\n resolveProjectionNodeId(target: unknown): string | null;\n resolvePickSelectionNodeId(target: unknown): string | null;\n pickNodeIdAt(clientX: number, clientY: number): string | null;\n getNodeIdsInScreenRect(rect: BabylonEditorProjectionScreenRect): string[];\n getProjectedNode(nodeId: string): ProjectedBabylonEditorNode | null;\n getProjectedNodeIds(): string[];\n getProjectionParentIds(nodeId: string): string[];\n getPreviewVisibilityOverrides(): BabylonEditorProjectionPreviewVisibilityEntry[];\n setPreviewVisibilityOverrides(overrides: Record<string, boolean>): BabylonEditorProjectionPreviewVisibilityEntry[];\n clearPreviewVisibilityOverrides(): BabylonEditorProjectionPreviewVisibilityEntry[];\n setShadowDebugOverlay(items: BabylonEditorProjectionShadowDebugOverlayItem[]): string[];\n clearShadowDebugOverlay(): boolean;\n dispose(): void;\n}\n\nexport interface BabylonEditorProjectionScreenRect {\n left: number;\n top: number;\n right: number;\n bottom: number;\n}\n\nexport interface BabylonEditorProjectionBounds {\n min: BabylonEditorProjectionVec3;\n max: BabylonEditorProjectionVec3;\n center: BabylonEditorProjectionVec3;\n size: BabylonEditorProjectionVec3;\n}\n\ninterface BabylonEditorProjectionBatch {\n id: number;\n generation: number;\n nodeIds: string[];\n asyncNodeIds: string[];\n pendingNodeIds: Set<string>;\n settledNodeIds: Set<string>;\n notifyScheduled: boolean;\n state: BabylonEditorProjectionBatchState;\n handle: BabylonEditorProjectionBatchHandle;\n resolveSettled(status: BabylonEditorProjectionBatchStatus): void;\n}\n\nconst ASSET_MESH_SELECTION_SEPARATOR = '::assetMesh::';\n\nfunction requireBabylonCtor<T>(value: T | undefined, name: string): T {\n if (!value) throw new Error(`Babylon runtime missing ${name}`);\n return value;\n}\n\nexport function createBabylonEditorProjection(\n options: BabylonEditorProjectionOptions,\n): BabylonEditorProjection {\n const projections = new Map<string, ProjectedBabylonEditorNode>();\n const projectionNodes = new Map<string, BabylonEditorProjectionNode>();\n const projectionParentIds = new Map<string, string | null>();\n const projectionAuthoredActive = new Map<string, boolean>();\n const previewVisibilityOverrides = new Map<string, boolean>();\n const shadowDebugOverlayObjects: any[] = [];\n const selectionPresentation = options.selectionPresentationController\n ?? createBabylonEditorSelectionPresentationController({\n babylon: options.babylon as BabylonRuntimeGlobal & Record<string, any>,\n scene: options.scene,\n logger: options.logger,\n });\n const activeBatches = new Set<BabylonEditorProjectionBatch>();\n const idleWaiters = new Set<(state: BabylonEditorProjectionIdleState) => void>();\n let nextBatchId = 1;\n let projectionGeneration = 0;\n let lastBatch: BabylonEditorProjectionBatch | null = null;\n let idleNotificationSuspendCount = 0;\n\n const createBatch = (nodeIds: string[]): BabylonEditorProjectionBatch => {\n let resolveSettled!: (status: BabylonEditorProjectionBatchStatus) => void;\n const settled = new Promise<BabylonEditorProjectionBatchStatus>(resolve => {\n resolveSettled = resolve;\n });\n const batch: BabylonEditorProjectionBatch = {\n id: nextBatchId,\n generation: projectionGeneration,\n nodeIds,\n asyncNodeIds: [],\n pendingNodeIds: new Set(),\n settledNodeIds: new Set(),\n notifyScheduled: false,\n state: 'pending',\n handle: null as unknown as BabylonEditorProjectionBatchHandle,\n resolveSettled,\n };\n batch.handle = {\n batchId: batch.id,\n nodeIds: [...batch.nodeIds],\n getStatus: () => createBatchStatus(batch),\n settled,\n };\n nextBatchId += 1;\n lastBatch = batch;\n activeBatches.add(batch);\n return batch;\n };\n\n const createBatchStatus = (\n batch: BabylonEditorProjectionBatch,\n ): BabylonEditorProjectionBatchStatus => ({\n batchId: batch.id,\n nodeIds: [...batch.nodeIds],\n asyncNodeIds: [...batch.asyncNodeIds],\n pendingNodeIds: [...batch.pendingNodeIds],\n settledNodeIds: [...batch.settledNodeIds],\n state: batch.state,\n });\n\n const getIdleState = (): BabylonEditorProjectionIdleState => ({\n idle: activeBatches.size === 0,\n activeBatchIds: [...activeBatches].map(batch => batch.id),\n lastBatch: lastBatch ? createBatchStatus(lastBatch) : null,\n });\n\n const notifyIdleWaitersIfNeeded = (): void => {\n if (idleNotificationSuspendCount > 0 || activeBatches.size > 0 || idleWaiters.size === 0) return;\n const state = getIdleState();\n for (const resolve of idleWaiters) resolve(state);\n idleWaiters.clear();\n };\n\n const completeBatch = (\n batch: BabylonEditorProjectionBatch,\n state: Exclude<BabylonEditorProjectionBatchState, 'pending'>,\n ): BabylonEditorProjectionBatchStatus => {\n if (batch.state !== 'pending') return createBatchStatus(batch);\n batch.state = state;\n const status = createBatchStatus(batch);\n activeBatches.delete(batch);\n batch.resolveSettled(status);\n notifyIdleWaitersIfNeeded();\n return status;\n };\n\n const markActiveBatchesStale = (): void => {\n for (const batch of [...activeBatches]) {\n completeBatch(batch, 'stale');\n }\n };\n\n const scheduleBatchSettled = (batch: BabylonEditorProjectionBatch): void => {\n if (batch.state !== 'pending' || batch.pendingNodeIds.size > 0 || batch.notifyScheduled) return;\n batch.notifyScheduled = true;\n void Promise.resolve().then(() => {\n batch.notifyScheduled = false;\n if (batch.state !== 'pending' || batch.pendingNodeIds.size > 0) return;\n if (batch.generation !== projectionGeneration) {\n completeBatch(batch, 'stale');\n return;\n }\n options.onProjectionBatchSettled?.({\n batchId: batch.id,\n nodeIds: [...batch.nodeIds],\n asyncNodeIds: [...batch.asyncNodeIds],\n settledNodeIds: [...batch.settledNodeIds],\n });\n completeBatch(batch, 'settled');\n });\n };\n\n const trackAsyncProjection = (\n batch: BabylonEditorProjectionBatch,\n node: BabylonEditorProjectionNode,\n projection: ProjectedBabylonEditorNode,\n ): Promise<void> => {\n batch.asyncNodeIds.push(node.id);\n batch.pendingNodeIds.add(node.id);\n return loadModelProjection(\n options,\n node,\n projection,\n () => projectionNodes.get(node.id) ?? node,\n ).finally(() => {\n batch.pendingNodeIds.delete(node.id);\n batch.settledNodeIds.add(node.id);\n if (projections.get(node.id) === projection && !projection.root.isDisposed?.()) {\n delete projection.loadPromise;\n applyProjectionPreviewVisibility(node.id);\n applyProjectionOutline(projectionNodes.get(node.id) ?? node, projection);\n selectionPresentation.updateProjectedNode(projection);\n options.onProjectionReady?.({ nodeId: node.id, async: true });\n }\n scheduleBatchSettled(batch);\n });\n };\n\n const disposeProjectedNode = (projection: ProjectedBabylonEditorNode): void => {\n selectionPresentation.detachProjectedNode(projection.nodeId);\n projection.importStructure = null;\n for (const animationGroup of projection.animationGroups) {\n animationGroup.dispose?.();\n }\n let disposedRuntimeLight = false;\n for (const runtimeObject of projection.runtimeObjects) {\n disposedRuntimeLight = disposedRuntimeLight || isProjectionRuntimeLightObject(runtimeObject);\n runtimeObject.dispose?.();\n }\n if (disposedRuntimeLight) resyncProjectionSceneLightSources(options.scene);\n projection.root?.dispose?.();\n };\n\n const disposeAll = (): void => {\n markActiveBatchesStale();\n projectionGeneration += 1;\n clearShadowDebugOverlayObjects();\n for (const projection of projections.values()) {\n disposeProjectedNode(projection);\n }\n projections.clear();\n projectionNodes.clear();\n projectionParentIds.clear();\n projectionAuthoredActive.clear();\n previewVisibilityOverrides.clear();\n };\n\n const createPreviewVisibilityEntry = (\n nodeId: string,\n visible: boolean,\n ): BabylonEditorProjectionPreviewVisibilityEntry => {\n const authoredActive = projectionAuthoredActive.get(nodeId) !== false;\n return {\n nodeId,\n visible,\n authoredActive,\n effectiveVisible: authoredActive && visible !== false,\n };\n };\n\n const applyProjectionPreviewVisibility = (nodeId: string): void => {\n const projection = projections.get(nodeId);\n if (!projection) return;\n const authoredActive = projectionAuthoredActive.get(nodeId) !== false;\n const override = previewVisibilityOverrides.get(nodeId);\n const effectiveVisible = authoredActive && override !== false;\n projection.root?.setEnabled?.(effectiveVisible);\n for (const runtimeObject of projection.runtimeObjects) {\n runtimeObject.setEnabled?.(effectiveVisible);\n }\n };\n\n const clearShadowDebugOverlayObjects = (): boolean => {\n const hadObjects = shadowDebugOverlayObjects.length > 0;\n for (const object of shadowDebugOverlayObjects.splice(0)) {\n object.dispose?.();\n }\n return hadObjects;\n };\n\n const syncProjectionHierarchy = (): void => {\n for (const [nodeId, projection] of projections) {\n const parentId = projectionParentIds.get(nodeId) ?? null;\n const parent = parentId && parentId !== nodeId\n ? projections.get(parentId)?.root ?? null\n : null;\n if (projection.root.parent !== parent) {\n projection.root.parent = parent;\n }\n }\n };\n\n const projectNodeInBatch = (\n node: BabylonEditorProjectionNode,\n batch: BabylonEditorProjectionBatch,\n ): ProjectedBabylonEditorNode | null => {\n removeNode(node.id);\n const root = createProjectionRoot(options.babylon, options.scene, node);\n if (!root) return null;\n const projection: ProjectedBabylonEditorNode = {\n nodeId: node.id,\n root,\n outlineMeshes: [],\n selectionMeshes: [],\n selectionPresentationTargets: [],\n animationGroups: [],\n runtimeObjects: [],\n };\n projections.set(node.id, projection);\n projectionNodes.set(node.id, node);\n projectionParentIds.set(node.id, node.parentId ?? null);\n projectionAuthoredActive.set(node.id, node.active !== false);\n applyProjectionPreviewVisibility(node.id);\n if (node.transform) applyProjectionTransform(options.babylon, root, node.transform);\n\n if (node.helperKind !== 'root' && !attachRuntimeProjection(options.babylon, options.scene, node, projection)) {\n if (node.asset && options.importModel) {\n projection.loadPromise = trackAsyncProjection(batch, node, projection);\n } else if (node.primitive) {\n attachPrimitiveProjection(options, node, projection);\n } else if (node.asset) {\n attachFallbackProjection(options.babylon, options.scene, node, projection, true);\n }\n }\n if (!projection.loadPromise) applyProjectionOutline(node, projection);\n selectionPresentation.attachProjectedNode(projection);\n if (!projection.loadPromise) batch.settledNodeIds.add(node.id);\n return projection;\n };\n\n const projectNode = (node: BabylonEditorProjectionNode): ProjectedBabylonEditorNode | null => {\n const batch = createBatch([node.id]);\n const projection = projectNodeInBatch(node, batch);\n syncProjectionHierarchy();\n scheduleBatchSettled(batch);\n return projection;\n };\n\n const removeNode = (nodeId: string): void => {\n const existing = projections.get(nodeId);\n if (!existing) return;\n projections.delete(nodeId);\n projectionNodes.delete(nodeId);\n projectionParentIds.delete(nodeId);\n projectionAuthoredActive.delete(nodeId);\n previewVisibilityOverrides.delete(nodeId);\n syncProjectionHierarchy();\n disposeProjectedNode(existing);\n };\n\n return {\n projectNodes(nodes) {\n const nodeList = [...nodes];\n idleNotificationSuspendCount += 1;\n try {\n disposeAll();\n const batch = createBatch(nodeList.map(node => node.id));\n for (const node of nodeList) projectNodeInBatch(node, batch);\n syncProjectionHierarchy();\n scheduleBatchSettled(batch);\n return batch.handle;\n } finally {\n idleNotificationSuspendCount = Math.max(0, idleNotificationSuspendCount - 1);\n notifyIdleWaitersIfNeeded();\n }\n },\n projectNode,\n removeNode,\n rebuild(nodes) {\n return this.projectNodes(nodes);\n },\n getLastProjectionBatch() {\n return lastBatch?.handle ?? null;\n },\n getIdleState,\n waitForIdle() {\n if (activeBatches.size === 0) return Promise.resolve(getIdleState());\n return new Promise(resolve => {\n idleWaiters.add(resolve);\n });\n },\n readNodeTransform(nodeId) {\n const projection = projections.get(nodeId);\n return projection?.root ? readProjectionTransform(projection.root) : null;\n },\n readNodeTransforms(nodeIds) {\n const transforms: Record<string, EditorTransformSnapshot> = {};\n for (const nodeId of nodeIds) {\n const transform = this.readNodeTransform(nodeId);\n if (transform) transforms[nodeId] = transform;\n }\n return transforms;\n },\n toNodeLocalTransform(nodeId, worldTransform) {\n const projection = projections.get(nodeId);\n if (!projection?.root) return null;\n const parent = projection.root.parent ?? null;\n return parent\n ? toEditorLocalTransformFromWorld(\n readProjectionWorldTransform(parent),\n worldTransform,\n { allowMatrixFallback: true },\n )\n : cloneProjectionTransformSnapshot(worldTransform);\n },\n readNodeImportStructure(nodeId) {\n return cloneProjectionImportStructureSnapshot(projections.get(nodeId)?.importStructure ?? null);\n },\n setNodeTransformPreview(nodeId, transform) {\n const projection = projections.get(nodeId);\n if (!projection?.root) return;\n if (!applyProjectionWorldTransform(options.babylon, projection.root, transform)) {\n options.logger?.warn?.(`[BabylonEditorProjection] Failed to preview non-representable world transform for \"${nodeId}\"`);\n }\n },\n setNodeTransformsPreview(transforms) {\n for (const [nodeId, transform] of Object.entries(transforms)) {\n this.setNodeTransformPreview(nodeId, transform);\n }\n },\n getAttachableRoot(nodeId) {\n return projections.get(nodeId)?.root ?? null;\n },\n getSelectionBounds(nodeIds) {\n return getProjectionSelectionBounds(projections, nodeIds);\n },\n getSelectionPivot(nodeIds) {\n const bounds = getProjectionSelectionBounds(projections, nodeIds);\n if (bounds) {\n return {\n mode: 'selection-center',\n position: bounds.center,\n };\n }\n const transforms = nodeIds\n .map(nodeId => this.readNodeTransform(nodeId))\n .filter((transform): transform is EditorTransformSnapshot => !!transform);\n if (transforms.length === 0) return null;\n return {\n mode: 'selection-center',\n position: averagePositions(transforms),\n };\n },\n syncNodeTransform(node) {\n const projection = projections.get(node.id);\n if (!projection) return;\n projectionNodes.set(node.id, node);\n projectionAuthoredActive.set(node.id, node.active !== false);\n applyProjectionPreviewVisibility(node.id);\n projectionParentIds.set(node.id, node.parentId ?? null);\n syncProjectionHierarchy();\n if (node.transform) applyProjectionTransform(options.babylon, projection.root, node.transform);\n selectionPresentation.updateProjectedNode(projection);\n },\n syncRuntimeNode(node) {\n const projection = projections.get(node.id);\n if (!projection || node.runtimeKind !== 'light') return false;\n projectionNodes.set(node.id, node);\n projectionAuthoredActive.set(node.id, node.active !== false);\n applyProjectionPreviewVisibility(node.id);\n projectionParentIds.set(node.id, node.parentId ?? null);\n syncProjectionHierarchy();\n if (node.transform) applyProjectionTransform(options.babylon, projection.root, node.transform);\n if (!syncRuntimeLightProjection(options.babylon, options.scene, node, projection)) return false;\n selectionPresentation.updateProjectedNode(projection);\n return true;\n },\n syncNodeMetadata(node) {\n const projection = projections.get(node.id);\n if (!projection) return;\n projectionNodes.set(node.id, node);\n syncProjectionNodeMetadata(projection, node);\n },\n syncSelection(selection) {\n selectionPresentation.syncSelection(selection);\n },\n getSelectionPresentationDiagnostics() {\n return selectionPresentation.getDiagnostics();\n },\n resolveProjectionNodeId(target) {\n return resolveBabylonProjectionNodeId(target);\n },\n resolvePickSelectionNodeId(target) {\n return resolveBabylonPickSelectionNodeId(target);\n },\n pickNodeIdAt(clientX, clientY) {\n return pickBabylonProjectionNodeIdAt(options.scene, clientX, clientY);\n },\n getNodeIdsInScreenRect(rect) {\n return getProjectionNodeIdsInScreenRect(options.babylon, options.scene, projections, rect);\n },\n getProjectedNode(nodeId) {\n return projections.get(nodeId) ?? null;\n },\n getProjectedNodeIds() {\n return [...projections.keys()];\n },\n getProjectionParentIds(nodeId) {\n const parentIds: string[] = [];\n const seen = new Set<string>([nodeId]);\n let currentId: string | null = nodeId;\n while (currentId) {\n const parentId: string | null = projectionParentIds.get(currentId) ?? null;\n if (!parentId || parentId === currentId || seen.has(parentId)) break;\n seen.add(parentId);\n parentIds.push(parentId);\n currentId = parentId;\n }\n return parentIds;\n },\n getPreviewVisibilityOverrides() {\n return [...previewVisibilityOverrides.entries()]\n .map(([nodeId, visible]) => createPreviewVisibilityEntry(nodeId, visible));\n },\n setPreviewVisibilityOverrides(overrides) {\n for (const [nodeId, visible] of Object.entries(overrides)) {\n if (!projections.has(nodeId)) continue;\n previewVisibilityOverrides.set(nodeId, visible !== false);\n applyProjectionPreviewVisibility(nodeId);\n }\n return this.getPreviewVisibilityOverrides();\n },\n clearPreviewVisibilityOverrides() {\n const changedNodeIds = [...previewVisibilityOverrides.keys()];\n previewVisibilityOverrides.clear();\n for (const nodeId of changedNodeIds) applyProjectionPreviewVisibility(nodeId);\n return [];\n },\n setShadowDebugOverlay(items) {\n clearShadowDebugOverlayObjects();\n for (const item of items) {\n const object = createShadowDebugOverlayObject(options.babylon, options.scene, item);\n if (object) shadowDebugOverlayObjects.push(object);\n }\n return items.map(item => item.id);\n },\n clearShadowDebugOverlay() {\n return clearShadowDebugOverlayObjects();\n },\n dispose() {\n disposeAll();\n selectionPresentation.dispose();\n },\n };\n}\n\nfunction readVector3(value: any, fallback: EditorTransformVec3): EditorTransformVec3 {\n return {\n x: Number.isFinite(value?.x) ? Number(value.x) : fallback.x,\n y: Number.isFinite(value?.y) ? Number(value.y) : fallback.y,\n z: Number.isFinite(value?.z) ? Number(value.z) : fallback.z,\n };\n}\n\nfunction createShadowDebugOverlayObject(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n item: BabylonEditorProjectionShadowDebugOverlayItem,\n): any | null {\n if (item.kind === 'light-direction') return createShadowDebugDirectionOverlay(babylon, scene, item);\n const bounds = item.bounds ?? createBoundsFromCenterSize(item.center, item.size);\n if (!bounds) return null;\n const MeshBuilder = (babylon as any).MeshBuilder;\n const StandardMaterial = (babylon as any).StandardMaterial;\n if (!MeshBuilder?.CreateBox || !StandardMaterial) return null;\n const size = {\n x: Math.max(Math.abs(bounds.size.x), 0.01),\n y: Math.max(Math.abs(bounds.size.y), item.kind === 'footprint' ? 0.015 : 0.01),\n z: Math.max(Math.abs(bounds.size.z), 0.01),\n };\n const mesh = MeshBuilder.CreateBox(`${item.id}.shadowDebugOverlay`, {\n width: size.x,\n height: size.y,\n depth: size.z,\n }, scene);\n if (!mesh) return null;\n mesh.id = item.id;\n mesh.name = item.id;\n mesh.isPickable = false;\n mesh.renderingGroupId = 3;\n mesh.metadata = createShadowDebugOverlayMetadata();\n mesh.position = createBabylonVector3(babylon, bounds.center);\n const material = new StandardMaterial(`${item.id}.shadowDebugOverlay.material`, scene);\n const color = readShadowDebugOverlayColor(babylon, item.kind);\n if (color) {\n material.diffuseColor = color;\n material.emissiveColor = color;\n }\n material.alpha = item.kind === 'receiver-surface' ? 0.14 : item.kind === 'footprint' ? 0.32 : 0.5;\n material.wireframe = item.kind !== 'footprint' && item.kind !== 'receiver-surface';\n material.disableLighting = true;\n mesh.material = material;\n const disposeMaterial = material.dispose?.bind(material);\n const disposeMesh = mesh.dispose?.bind(mesh);\n mesh.dispose = (...args: unknown[]) => {\n disposeMaterial?.();\n return disposeMesh?.(...args);\n };\n return mesh;\n}\n\nfunction createShadowDebugDirectionOverlay(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n item: BabylonEditorProjectionShadowDebugOverlayItem,\n): any | null {\n const MeshBuilder = (babylon as any).MeshBuilder;\n if (!MeshBuilder?.CreateLineSystem) return null;\n const center = item.center ?? item.bounds?.center;\n const direction = normalizeDebugVec3(item.direction ?? { x: -0.3, y: -1, z: -0.2 });\n if (!center || !direction) return null;\n const length = Math.max(item.size?.x ?? item.bounds?.size.x ?? 2, item.size?.y ?? item.bounds?.size.y ?? 2, item.size?.z ?? item.bounds?.size.z ?? 2, 2);\n const start = createBabylonVector3(babylon, {\n x: center.x - direction.x * length * 0.5,\n y: center.y - direction.y * length * 0.5,\n z: center.z - direction.z * length * 0.5,\n });\n const end = createBabylonVector3(babylon, {\n x: center.x + direction.x * length * 0.5,\n y: center.y + direction.y * length * 0.5,\n z: center.z + direction.z * length * 0.5,\n });\n const arrowLeft = createBabylonVector3(babylon, {\n x: end.x - direction.x * length * 0.18 + direction.z * length * 0.08,\n y: end.y - direction.y * length * 0.18,\n z: end.z - direction.z * length * 0.18 - direction.x * length * 0.08,\n });\n const arrowRight = createBabylonVector3(babylon, {\n x: end.x - direction.x * length * 0.18 - direction.z * length * 0.08,\n y: end.y - direction.y * length * 0.18,\n z: end.z - direction.z * length * 0.18 + direction.x * length * 0.08,\n });\n const line = MeshBuilder.CreateLineSystem(`${item.id}.shadowDebugOverlay`, {\n lines: [\n [start, end],\n [end, arrowLeft],\n [end, arrowRight],\n ],\n }, scene);\n if (!line) return null;\n line.id = item.id;\n line.name = item.id;\n line.isPickable = false;\n line.renderingGroupId = 3;\n line.metadata = createShadowDebugOverlayMetadata();\n const color = readShadowDebugOverlayColor(babylon, item.kind);\n if (color) line.color = color;\n return line;\n}\n\nfunction createShadowDebugOverlayMetadata(): Record<string, unknown> {\n return {\n shadowDebugOverlayInternal: true,\n disablePlanarShadow: true,\n disableBlobShadow: true,\n disableStaticProjectedShadow: true,\n };\n}\n\nfunction createBoundsFromCenterSize(\n center: BabylonEditorProjectionVec3 | undefined,\n size: BabylonEditorProjectionVec3 | undefined,\n): BabylonEditorProjectionDebugBounds | null {\n if (!center || !size) return null;\n return {\n center,\n size,\n min: {\n x: center.x - size.x / 2,\n y: center.y - size.y / 2,\n z: center.z - size.z / 2,\n },\n max: {\n x: center.x + size.x / 2,\n y: center.y + size.y / 2,\n z: center.z + size.z / 2,\n },\n };\n}\n\nfunction createBabylonVector3(babylon: BabylonRuntimeGlobal, value: BabylonEditorProjectionVec3): any {\n const Vector3 = (babylon as any).Vector3;\n return Vector3 ? new Vector3(value.x, value.y, value.z) : { x: value.x, y: value.y, z: value.z };\n}\n\nfunction normalizeDebugVec3(value: BabylonEditorProjectionVec3): BabylonEditorProjectionVec3 | null {\n const length = Math.hypot(value.x, value.y, value.z);\n if (!Number.isFinite(length) || length <= 0.0001) return null;\n return {\n x: value.x / length,\n y: value.y / length,\n z: value.z / length,\n };\n}\n\nfunction readShadowDebugOverlayColor(babylon: BabylonRuntimeGlobal, kind: BabylonEditorProjectionShadowDebugOverlayItem['kind']): any | null {\n const Color3 = (babylon as any).Color3;\n if (!Color3) return null;\n if (kind === 'caster-bounds') return new Color3(1, 0.78, 0.1);\n if (kind === 'receiver-bounds') return new Color3(0.1, 0.75, 1);\n if (kind === 'receiver-surface') return new Color3(0.05, 0.55, 1);\n if (kind === 'light-direction') return new Color3(1, 0.95, 0.2);\n if (kind === 'footprint') return new Color3(0.1, 1, 0.42);\n return new Color3(1, 0.25, 0.25);\n}\n\nfunction addVec3(left: EditorTransformVec3, right: EditorTransformVec3): EditorTransformVec3 {\n return {\n x: left.x + right.x,\n y: left.y + right.y,\n z: left.z + right.z,\n };\n}\n\nfunction scaleVec3(value: EditorTransformVec3, factor: number): EditorTransformVec3 {\n return {\n x: value.x * factor,\n y: value.y * factor,\n z: value.z * factor,\n };\n}\n\nfunction averagePositions(transforms: EditorTransformSnapshot[]): EditorTransformVec3 {\n const sum = transforms.reduce(\n (current, transform) => addVec3(current, readEditorTransformPosition(transform)),\n { x: 0, y: 0, z: 0 },\n );\n return scaleVec3(sum, 1 / transforms.length);\n}\n\nfunction getProjectionSelectionBounds(\n projections: Map<string, ProjectedBabylonEditorNode>,\n nodeIds: string[],\n): BabylonEditorProjectionBounds | null {\n let min: EditorTransformVec3 | null = null;\n let max: EditorTransformVec3 | null = null;\n for (const nodeId of nodeIds) {\n const bounds = readProjectionBounds(resolveProjectionSelectionBoundsTarget(projections, nodeId));\n if (!bounds) continue;\n min = min\n ? {\n x: Math.min(min.x, bounds.min.x),\n y: Math.min(min.y, bounds.min.y),\n z: Math.min(min.z, bounds.min.z),\n }\n : bounds.min;\n max = max\n ? {\n x: Math.max(max.x, bounds.max.x),\n y: Math.max(max.y, bounds.max.y),\n z: Math.max(max.z, bounds.max.z),\n }\n : bounds.max;\n }\n if (!min || !max) return null;\n const center = {\n x: (min.x + max.x) / 2,\n y: (min.y + max.y) / 2,\n z: (min.z + max.z) / 2,\n };\n return {\n min,\n max,\n center,\n size: {\n x: max.x - min.x,\n y: max.y - min.y,\n z: max.z - min.z,\n },\n };\n}\n\nfunction resolveProjectionSelectionBoundsTarget(\n projections: Map<string, ProjectedBabylonEditorNode>,\n nodeId: string,\n): any | null {\n const projection = projections.get(nodeId);\n if (projection?.root) return projection.root;\n for (const candidateProjection of projections.values()) {\n const selectionTarget = findProjectionSelectionMeshByNodeId(candidateProjection, nodeId);\n if (selectionTarget) return selectionTarget;\n }\n return null;\n}\n\nfunction findProjectionSelectionMeshByNodeId(\n projection: ProjectedBabylonEditorNode,\n nodeId: string,\n): any | null {\n for (const mesh of projection.selectionMeshes ?? []) {\n if (readProjectionMeshSelectionNodeId(mesh) === nodeId) return mesh;\n }\n for (const mesh of projection.outlineMeshes) {\n if (readProjectionMeshSelectionNodeId(mesh) === nodeId) return mesh;\n }\n return null;\n}\n\nfunction readProjectionMeshSelectionNodeId(mesh: any): string | null {\n const nodeId = mesh?.metadata?.editorProjection?.nodeId;\n return typeof nodeId === 'string' && nodeId.length > 0 ? nodeId : null;\n}\n\nfunction readProjectionBounds(root: any): Pick<BabylonEditorProjectionBounds, 'min' | 'max'> | null {\n if (!root) return null;\n const bounds = root.getHierarchyBoundingVectors?.();\n if (bounds?.min && bounds?.max) {\n return {\n min: readVector3(bounds.min, { x: 0, y: 0, z: 0 }),\n max: readVector3(bounds.max, { x: 0, y: 0, z: 0 }),\n };\n }\n const transform = readProjectionTransform(root);\n const position = readEditorTransformPosition(transform);\n return {\n min: position,\n max: position,\n };\n}\n\nexport function readProjectionTransform(node: any): EditorTransformSnapshot {\n return readProjectionWorldTransform(node);\n}\n\nfunction readProjectionWorldTransform(node: any, seen = new Set<any>()): EditorTransformSnapshot {\n const local = readProjectionLocalTransform(node);\n const parent = node?.parent ?? null;\n if (!parent || seen.has(node)) return local;\n seen.add(node);\n const parentWorld = readProjectionWorldTransform(parent, seen);\n return combineEditorTransforms(parentWorld, local) ?? local;\n}\n\nfunction readProjectionLocalTransform(node: any): EditorTransformSnapshot {\n const matrix = readProjectionLocalMatrixTransform(node);\n if (matrix) return matrix;\n const rotation = node?.rotationQuaternion?.toEulerAngles?.() ?? node?.rotation;\n return {\n position: readVector3(node?.position, { x: 0, y: 0, z: 0 }),\n rotation: readVector3(rotation, { x: 0, y: 0, z: 0 }),\n scale: readVector3(node?.scaling, { x: 1, y: 1, z: 1 }),\n };\n}\n\nfunction readProjectionLocalMatrixTransform(node: any): EditorTransformSnapshot | null {\n const metadata = readProjectionObject(node?.metadata);\n const metadataMatrix = metadata?.[PROJECTION_LOCAL_MATRIX_METADATA_KEY];\n if (Array.isArray(metadataMatrix)) {\n const transform = createEditorTransformMatrixSnapshot(metadataMatrix);\n if (transform) return transform;\n }\n const pivotMatrix = node?._usePivotMatrix ? node?._pivotMatrix?.asArray?.() : null;\n return Array.isArray(pivotMatrix) || ArrayBuffer.isView(pivotMatrix)\n ? createEditorTransformMatrixSnapshot(Array.from(pivotMatrix as ArrayLike<number>))\n : null;\n}\n\nfunction createProjectionRoot(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n node: BabylonEditorProjectionNode,\n): any | null {\n const TransformNode = (babylon as any).TransformNode;\n if (!TransformNode) return null;\n const root = new TransformNode(`${node.id}.projection`, scene);\n root.id = node.id;\n root.name = node.name ?? node.id;\n const disableGeneratedShadow = node.runtimeKind === 'camera' || node.runtimeKind === 'light' || node.helperKind === 'root';\n root.metadata = {\n ...(root.metadata ?? {}),\n ...(disableGeneratedShadow ? {\n disablePlanarShadow: true,\n disableBlobShadow: true,\n disableStaticProjectedShadow: true,\n } : {}),\n editorProjection: {\n nodeId: node.id,\n ...(node.runtimeKind ? { runtimeKind: node.runtimeKind } : {}),\n ...createProjectionShadowMetadata(node),\n },\n };\n return root;\n}\n\nasync function loadModelProjection(\n options: BabylonEditorProjectionOptions,\n node: BabylonEditorProjectionNode,\n projection: ProjectedBabylonEditorNode,\n getLatestNode: () => BabylonEditorProjectionNode,\n): Promise<void> {\n const asset = node.asset;\n if (!asset || !options.importModel) {\n const latestNode = getLatestNode();\n attachFallbackProjection(options.babylon, options.scene, latestNode, projection, !!asset);\n applyProjectionOutline(latestNode, projection);\n return;\n }\n\n try {\n const result = await options.importModel({\n babylon: options.babylon,\n scene: options.scene,\n root: projection.root,\n node,\n asset,\n });\n if (!result) {\n const latestNode = getLatestNode();\n attachFallbackProjection(options.babylon, options.scene, latestNode, projection, true);\n applyProjectionOutline(latestNode, projection);\n return;\n }\n if (projection.root.isDisposed?.()) {\n disposeImportedProjectionResult(result);\n return;\n }\n const latestNode = getLatestNode();\n attachImportedProjectionResult(options, latestNode, asset, projection, result);\n applyProjectionOutline(latestNode, projection);\n } catch (error) {\n options.logger?.warn?.(`[BabylonEditorProjection] Failed to project model \"${asset.sourceId ?? asset.id ?? node.id}\"`, error);\n if (!projection.root.isDisposed?.()) {\n const latestNode = getLatestNode();\n attachFallbackProjection(options.babylon, options.scene, latestNode, projection, true);\n applyProjectionOutline(latestNode, projection);\n }\n }\n}\n\nfunction attachImportedProjectionResult(\n options: BabylonEditorProjectionOptions,\n node: BabylonEditorProjectionNode,\n asset: BabylonEditorProjectionAsset,\n projection: ProjectedBabylonEditorNode,\n result: BabylonEditorProjectionImportResult,\n): void {\n const { babylon, scene } = options;\n const TransformNode = (babylon as any).TransformNode;\n if (!TransformNode) return;\n try {\n const modelRoot = new TransformNode(`${node.id}.modelRoot`, scene);\n modelRoot.parent = projection.root;\n modelRoot.metadata = {\n ...(modelRoot.metadata ?? {}),\n editorProjection: {\n nodeId: node.id,\n sourceId: asset.sourceId,\n ...createProjectionShadowMetadata(node),\n },\n };\n applyAssetDefaultsTransform(babylon, modelRoot, asset.transform);\n collapseZeroVertexProjectionWrapperMeshes(babylon, scene, result);\n\n const importedNodes = [\n ...(result.transformNodes ?? []),\n ...(result.meshes ?? []),\n ];\n const importedNodeSet = new Set<any>(importedNodes);\n for (const importedNode of importedNodes) {\n if (importedNode === modelRoot) continue;\n if (!importedNode.parent || !importedNodeSet.has(importedNode.parent)) {\n importedNode.parent = modelRoot;\n }\n importedNode.metadata = {\n ...(importedNode.metadata ?? {}),\n editorProjection: {\n nodeId: node.id,\n sourceId: asset.sourceId,\n ...createProjectionShadowMetadata(node),\n },\n };\n }\n const materialSlots = readProjectionAssetMaterialSlots(asset, node.id);\n const materialOwnerResolutionContext = createProjectionMaterialOwnerResolutionContext(\n modelRoot,\n node.id,\n );\n const explicitlyBoundSlotIds = new Set(\n createProjectionMaterialSlotBindings(node).map(binding => binding.slot.slotId),\n );\n const ownerNodePathByMesh = new Map<any, string>();\n const ownerMeshCountByKey = new Map<string, number>();\n for (const mesh of result.meshes ?? []) {\n const ownerNodePath = buildProjectionOwnerNodePath(mesh, modelRoot, node.id);\n if (!ownerNodePath) continue;\n ownerNodePathByMesh.set(mesh, ownerNodePath);\n const ownerKey = createMaterialSlotOwnerPathMatchKey(ownerNodePath, { projectionNodeId: node.id });\n ownerMeshCountByKey.set(ownerKey, (ownerMeshCountByKey.get(ownerKey) ?? 0) + 1);\n }\n const splitPrimitiveOrdinalByOwnerKey = new Map<string, number>();\n const primitiveBoundsProxyOwnerKeys = new Set<string>();\n for (const mesh of result.meshes ?? []) {\n mesh.isPickable = true;\n applyProjectionRenderingToMesh(node, mesh);\n const ownerNodePath = ownerNodePathByMesh.get(mesh) ?? null;\n if (ownerNodePath) {\n const ownerKey = createMaterialSlotOwnerPathMatchKey(ownerNodePath, { projectionNodeId: node.id });\n const ownerMeshCount = ownerMeshCountByKey.get(ownerKey) ?? 0;\n const splitPrimitiveSlot = resolveProjectionSplitPrimitiveMeshSelectionSlot(\n mesh,\n materialSlots,\n materialOwnerResolutionContext,\n explicitlyBoundSlotIds,\n ownerMeshCount,\n splitPrimitiveOrdinalByOwnerKey,\n );\n const primitiveSelectionMeshes = createProjectionAssetMeshSelectionProxies(\n options,\n node,\n projection,\n mesh,\n ownerNodePath,\n materialSlots,\n materialOwnerResolutionContext,\n explicitlyBoundSlotIds,\n );\n const primitiveBoundsSelectionMeshes = !splitPrimitiveSlot\n && primitiveSelectionMeshes.length === 0\n && !primitiveBoundsProxyOwnerKeys.has(ownerKey)\n ? createProjectionPrimitiveBoundsSelectionProxies(\n options,\n node,\n projection,\n mesh,\n ownerNodePath,\n materialSlots,\n materialOwnerResolutionContext,\n explicitlyBoundSlotIds,\n ownerMeshCount,\n )\n : [];\n if (primitiveBoundsSelectionMeshes.length > 0) primitiveBoundsProxyOwnerKeys.add(ownerKey);\n const usesSelectionMeshes = primitiveSelectionMeshes.length > 0\n || primitiveBoundsSelectionMeshes.length > 0\n || primitiveBoundsProxyOwnerKeys.has(ownerKey);\n const selectionKey = resolveProjectionAssetMeshSelectionKey(\n asset,\n mesh,\n ownerNodePath,\n materialOwnerResolutionContext,\n explicitlyBoundSlotIds,\n node.id,\n );\n mesh.metadata = {\n ...(mesh.metadata ?? {}),\n editorProjection: {\n nodeId: splitPrimitiveSlot\n ? createAssetMeshProjectionNodeId(node.id, splitPrimitiveSlot.key)\n : usesSelectionMeshes\n ? node.id\n : createAssetMeshProjectionNodeId(node.id, selectionKey),\n rootNodeId: node.id,\n sourceId: asset.sourceId,\n ownerNodePath,\n ...(splitPrimitiveSlot\n ? {\n slotSelectionKey: splitPrimitiveSlot.key,\n primitiveIndex: splitPrimitiveSlot.primitiveIndex,\n }\n : {}),\n ...(!splitPrimitiveSlot && !usesSelectionMeshes && selectionKey !== ownerNodePath\n ? { slotSelectionKey: selectionKey }\n : {}),\n runtimeKind: 'assetMesh',\n ...createProjectionShadowMetadata(node),\n },\n };\n }\n }\n projection.runtimeObjects.push(\n ...applyProjectionArtistMaterialProfilesToMeshes(\n options,\n node,\n modelRoot,\n result.meshes ?? [],\n materialOwnerResolutionContext,\n ),\n );\n for (const animationGroup of result.animationGroups ?? []) {\n animationGroup.stop?.();\n }\n projection.animationGroups = result.animationGroups ?? [];\n projection.outlineMeshes = (result.meshes ?? []).filter((mesh: any) => mesh.getTotalVertices?.() > 0);\n projection.importStructure = createProjectionImportStructureSnapshot(node, asset, modelRoot, result);\n const lightSync = resyncProjectionMeshLightSources(scene, result.meshes ?? []);\n options.logger?.info?.('[BabylonEditorProjection] Model light sources synchronized', {\n projectionNodeId: node.id,\n sourceAssetId: asset.sourceId ?? asset.id ?? null,\n importedMeshCount: lightSync.importedMeshCount,\n instancedMeshCount: lightSync.instancedMeshCount,\n lightSourceOwnerCount: lightSync.lightSourceOwnerCount,\n activeSceneLightCount: lightSync.activeSceneLightCount,\n resolvedLightSourceOwnerCount: lightSync.resolvedLightSourceOwnerCount,\n });\n } catch (error) {\n disposeImportedProjectionResult(result);\n throw error;\n }\n}\n\nfunction collapseZeroVertexProjectionWrapperMeshes(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n result: BabylonEditorProjectionImportResult,\n): void {\n const meshes = result.meshes ?? [];\n if (meshes.length === 0) return;\n const TransformNode = (babylon as any).TransformNode;\n if (!TransformNode) return;\n const sourceMeshes = collectProjectionSourceMeshReferences(meshes);\n const keptMeshes: any[] = [];\n const replacementTransformNodes: any[] = [];\n for (const mesh of meshes) {\n if (!canCollapseProjectionWrapperMesh(mesh, sourceMeshes)) {\n keptMeshes.push(mesh);\n continue;\n }\n const replacement = createProjectionWrapperTransformNode(TransformNode, scene, mesh);\n if (!replacement) {\n keptMeshes.push(mesh);\n continue;\n }\n for (const child of readProjectionDirectChildren(mesh)) {\n child.parent = replacement;\n }\n mesh.dispose?.(true, false);\n replacementTransformNodes.push(replacement);\n }\n if (replacementTransformNodes.length === 0) return;\n result.meshes = keptMeshes;\n result.transformNodes = [\n ...(result.transformNodes ?? []),\n ...replacementTransformNodes,\n ];\n}\n\nfunction collectProjectionSourceMeshReferences(meshes: readonly any[]): Set<any> {\n const sourceMeshes = new Set<any>();\n for (const mesh of meshes) {\n const sourceMesh = mesh?.sourceMesh;\n if (sourceMesh) sourceMeshes.add(sourceMesh);\n }\n return sourceMeshes;\n}\n\nfunction canCollapseProjectionWrapperMesh(mesh: any, sourceMeshes: ReadonlySet<any>): boolean {\n if (!mesh || mesh.getClassName?.() !== 'Mesh') return false;\n if (sourceMeshes.has(mesh)) return false;\n if (mesh.sourceMesh) return false;\n const vertices = mesh.getTotalVertices?.();\n if (vertices !== 0) return false;\n if (Array.isArray(mesh.instances) && mesh.instances.length > 0) return false;\n if (mesh.skeleton || mesh.morphTargetManager) return false;\n if (Array.isArray(mesh.subMeshes) && mesh.subMeshes.length > 0) return false;\n if (mesh.material) return false;\n const projection = readProjectionObject(mesh.metadata?.editorProjection);\n const runtimeKind = projection?.runtimeKind;\n if (\n runtimeKind === 'assetMeshSelectionProxy'\n || runtimeKind === 'primitive'\n || runtimeKind === 'camera'\n || runtimeKind === 'light'\n || projection?.primitiveShape != null\n || projection?.helper != null\n || projection?.disableStaticProjectedShadow === false\n ) {\n return false;\n }\n return true;\n}\n\nfunction createProjectionWrapperTransformNode(\n TransformNode: new (name: string, scene: RuntimeScene) => any,\n scene: RuntimeScene,\n mesh: any,\n): any | null {\n const name = typeof mesh.name === 'string' ? mesh.name : typeof mesh.id === 'string' ? mesh.id : 'projectionWrapper';\n const replacement = new TransformNode(name, scene);\n if (typeof mesh.id === 'string') replacement.id = mesh.id;\n if (typeof mesh.name === 'string') replacement.name = mesh.name;\n replacement.parent = mesh.parent ?? null;\n if (mesh.metadata && typeof mesh.metadata === 'object') {\n replacement.metadata = { ...mesh.metadata };\n }\n if (mesh.reservedDataStore && typeof mesh.reservedDataStore === 'object') {\n replacement.reservedDataStore = { ...mesh.reservedDataStore };\n }\n if (Array.isArray(mesh.animations)) replacement.animations = [...mesh.animations];\n copyProjectionWrapperTransform(mesh, replacement);\n if (typeof mesh.isEnabled === 'function' && typeof replacement.setEnabled === 'function') {\n replacement.setEnabled(mesh.isEnabled());\n }\n if (typeof mesh.state === 'string') replacement.state = mesh.state;\n if (typeof mesh.layerMask === 'number') replacement.layerMask = mesh.layerMask;\n return replacement;\n}\n\nfunction copyProjectionWrapperTransform(source: any, target: any): void {\n copyBabylonVector3(source.position, target.position);\n copyBabylonVector3(source.rotation, target.rotation);\n copyBabylonVector3(source.scaling, target.scaling);\n if (source.rotationQuaternion?.clone) {\n target.rotationQuaternion = source.rotationQuaternion.clone();\n } else {\n target.rotationQuaternion = null;\n }\n const pivotMatrix = source._pivotMatrix?.clone?.() ?? source.getPivotMatrix?.()?.clone?.();\n if (pivotMatrix) {\n if (source._usePivotMatrix && typeof target.setPreTransformMatrix === 'function') {\n target.setPreTransformMatrix(pivotMatrix.clone?.() ?? pivotMatrix);\n } else if (typeof target.setPivotMatrix === 'function') {\n target.setPivotMatrix(pivotMatrix.clone?.() ?? pivotMatrix, false);\n }\n }\n}\n\nfunction copyBabylonVector3(source: any, target: any): void {\n if (!source || !target) return;\n if (typeof target.copyFrom === 'function') {\n target.copyFrom(source);\n return;\n }\n target.x = source.x;\n target.y = source.y;\n target.z = source.z;\n}\n\nfunction readProjectionDirectChildren(node: any): any[] {\n const children = node?.getChildren?.((candidate: any) => candidate?.parent === node, true);\n return Array.isArray(children) ? children.filter(child => child?.parent === node) : [];\n}\n\nfunction createProjectionImportStructureSnapshot(\n node: BabylonEditorProjectionNode,\n asset: BabylonEditorProjectionAsset,\n modelRoot: any,\n result: BabylonEditorProjectionImportResult,\n): BabylonEditorProjectionImportStructureSnapshot {\n const runtimeNodes = collectProjectionImportRuntimeNodes(modelRoot, result);\n const nodeIdByRuntimeNode = new Map<any, string>();\n const materialIdByRuntimeMaterial = new Map<any, string>();\n const textureIdByRuntimeTexture = new Map<any, string>();\n const materialNodeIds = new Map<string, Set<string>>();\n const materialTextureIds = new Map<string, Set<string>>();\n const rootSnapshotId = 'root';\n const snapshots: BabylonEditorProjectionImportNodeSnapshot[] = [{\n id: rootSnapshotId,\n parentId: null,\n name: readProjectionRuntimeName(modelRoot, node.name ?? node.id),\n kind: 'root',\n }];\n\n for (const runtimeNode of runtimeNodes) {\n const snapshotId = createProjectionImportRuntimeNodeId(runtimeNode, nodeIdByRuntimeNode.size);\n nodeIdByRuntimeNode.set(runtimeNode, snapshotId);\n }\n\n for (const runtimeNode of runtimeNodes) {\n const snapshotId = nodeIdByRuntimeNode.get(runtimeNode);\n if (!snapshotId) continue;\n const materialIds = readProjectionRuntimeNodeMaterials(runtimeNode)\n .map(runtimeMaterial => getProjectionImportMaterialSnapshotId(runtimeMaterial, materialIdByRuntimeMaterial))\n .filter((materialId): materialId is string => !!materialId);\n for (const materialId of materialIds) {\n const nodeIds = materialNodeIds.get(materialId) ?? new Set<string>();\n nodeIds.add(snapshotId);\n materialNodeIds.set(materialId, nodeIds);\n const textureIds = readProjectionRuntimeMaterialTextures(readProjectionRuntimeNodeMaterialById(runtimeNode, runtimeNode, materialId, materialIdByRuntimeMaterial))\n .map(runtimeTexture => getProjectionImportTextureSnapshotId(runtimeTexture, textureIdByRuntimeTexture))\n .filter((textureId): textureId is string => !!textureId);\n const materialTextures = materialTextureIds.get(materialId) ?? new Set<string>();\n for (const textureId of textureIds) materialTextures.add(textureId);\n materialTextureIds.set(materialId, materialTextures);\n }\n snapshots.push({\n id: snapshotId,\n parentId: resolveProjectionImportRuntimeParentId(runtimeNode, modelRoot, nodeIdByRuntimeNode, rootSnapshotId),\n name: readProjectionRuntimeName(runtimeNode, snapshotId),\n kind: isProjectionRuntimeMeshLike(runtimeNode) ? 'mesh' : 'transform',\n ...readProjectionRuntimeSourceName(runtimeNode),\n ...readProjectionRuntimeOwnerNodePath(runtimeNode),\n ...(materialIds.length > 0 ? { materialIds } : {}),\n });\n }\n\n const materials = [...materialIdByRuntimeMaterial.entries()].map(([runtimeMaterial, id]) => ({\n id,\n name: readProjectionRuntimeName(runtimeMaterial, id),\n ...readProjectionRuntimeKind(runtimeMaterial),\n nodeIds: [...(materialNodeIds.get(id) ?? [])],\n textureIds: [...(materialTextureIds.get(id) ?? [])],\n }));\n const textures = [...textureIdByRuntimeTexture.entries()].map(([runtimeTexture, id]) => ({\n id,\n name: readProjectionRuntimeName(runtimeTexture, id),\n ...readProjectionRuntimeKind(runtimeTexture),\n ...readProjectionRuntimeTextureUrl(runtimeTexture),\n }));\n const animations = createProjectionImportAnimationSnapshots(result.animationGroups ?? []);\n\n return {\n projectionNodeId: node.id,\n ...(asset.id ? { assetId: asset.id } : {}),\n ...(asset.sourceId ? { sourceId: asset.sourceId } : {}),\n nodes: snapshots,\n materials,\n textures,\n animations,\n };\n}\n\nfunction collectProjectionImportRuntimeNodes(\n modelRoot: any,\n result: BabylonEditorProjectionImportResult,\n): any[] {\n const known = new Set<any>([\n ...(result.transformNodes ?? []),\n ...(result.meshes ?? []),\n ].filter(Boolean));\n const ordered: any[] = [];\n const visit = (runtimeNode: any): void => {\n for (const child of readProjectionRuntimeChildren(runtimeNode)) {\n if (!known.has(child) || ordered.includes(child)) continue;\n ordered.push(child);\n visit(child);\n }\n };\n visit(modelRoot);\n for (const runtimeNode of known) {\n if (!ordered.includes(runtimeNode)) ordered.push(runtimeNode);\n }\n return ordered;\n}\n\nfunction readProjectionRuntimeChildren(runtimeNode: any): any[] {\n const children = runtimeNode?.getChildren?.();\n return Array.isArray(children) ? children : [];\n}\n\nfunction createProjectionImportRuntimeNodeId(runtimeNode: any, index: number): string {\n const sourceName = readProjectionSourceNodeSegment(runtimeNode);\n const rawName = sourceName || runtimeNode?.name || runtimeNode?.id || `node-${index + 1}`;\n return `${isProjectionRuntimeMeshLike(runtimeNode) ? 'mesh' : 'node'}:${sanitizeProjectionImportSnapshotId(rawName)}:${index + 1}`;\n}\n\nfunction resolveProjectionImportRuntimeParentId(\n runtimeNode: any,\n modelRoot: any,\n nodeIdByRuntimeNode: ReadonlyMap<any, string>,\n rootSnapshotId: string,\n): string | null {\n const parent = runtimeNode?.parent ?? null;\n if (!parent || parent === modelRoot) return rootSnapshotId;\n return nodeIdByRuntimeNode.get(parent) ?? rootSnapshotId;\n}\n\nfunction isProjectionRuntimeMeshLike(runtimeNode: any): boolean {\n return typeof runtimeNode?.getTotalVertices === 'function';\n}\n\nfunction readProjectionRuntimeNodeMaterials(runtimeNode: any): any[] {\n const material = runtimeNode?.material;\n if (!material) return [];\n const subMaterials = material.subMaterials;\n if (Array.isArray(subMaterials) && subMaterials.length > 0) {\n return subMaterials.filter(Boolean);\n }\n return [material];\n}\n\nfunction readProjectionRuntimeNodeMaterialById(\n runtimeNode: any,\n _fallbackNode: any,\n materialId: string,\n materialIdByRuntimeMaterial: ReadonlyMap<any, string>,\n): any | null {\n for (const material of readProjectionRuntimeNodeMaterials(runtimeNode)) {\n if (materialIdByRuntimeMaterial.get(material) === materialId) return material;\n }\n return null;\n}\n\nfunction getProjectionImportMaterialSnapshotId(\n runtimeMaterial: any,\n materialIdByRuntimeMaterial: Map<any, string>,\n): string | null {\n if (!runtimeMaterial) return null;\n const existing = materialIdByRuntimeMaterial.get(runtimeMaterial);\n if (existing) return existing;\n const id = `material:${sanitizeProjectionImportSnapshotId(readProjectionRuntimeName(runtimeMaterial, 'material'))}:${materialIdByRuntimeMaterial.size + 1}`;\n materialIdByRuntimeMaterial.set(runtimeMaterial, id);\n return id;\n}\n\nfunction readProjectionRuntimeMaterialTextures(runtimeMaterial: any | null): any[] {\n if (!runtimeMaterial) return [];\n const textures = runtimeMaterial.getActiveTextures?.();\n return Array.isArray(textures) ? textures.filter(Boolean) : [];\n}\n\nfunction getProjectionImportTextureSnapshotId(\n runtimeTexture: any,\n textureIdByRuntimeTexture: Map<any, string>,\n): string | null {\n if (!runtimeTexture) return null;\n const existing = textureIdByRuntimeTexture.get(runtimeTexture);\n if (existing) return existing;\n const name = readProjectionRuntimeTextureUrl(runtimeTexture).url\n ?? readProjectionRuntimeName(runtimeTexture, 'texture');\n const id = `texture:${sanitizeProjectionImportSnapshotId(name)}:${textureIdByRuntimeTexture.size + 1}`;\n textureIdByRuntimeTexture.set(runtimeTexture, id);\n return id;\n}\n\nfunction createProjectionImportAnimationSnapshots(animationGroups: any[]): BabylonEditorProjectionImportAnimationSnapshot[] {\n return animationGroups.filter(Boolean).map((animationGroup, index) => ({\n id: `animation:${sanitizeProjectionImportSnapshotId(readProjectionRuntimeName(animationGroup, 'animation'))}:${index + 1}`,\n name: readProjectionRuntimeName(animationGroup, `Animation ${index + 1}`),\n }));\n}\n\nfunction readProjectionRuntimeName(runtimeObject: any, fallback: string): string {\n const name = runtimeObject?.name ?? runtimeObject?.id;\n return typeof name === 'string' && name.trim() ? name.trim() : fallback;\n}\n\nfunction readProjectionRuntimeKind(runtimeObject: any): { kind?: string } {\n const kind = runtimeObject?.getClassName?.();\n return typeof kind === 'string' && kind.trim() ? { kind: kind.trim() } : {};\n}\n\nfunction readProjectionRuntimeTextureUrl(runtimeTexture: any): { url?: string } {\n const url = runtimeTexture?.url ?? runtimeTexture?.name;\n return typeof url === 'string' && url.trim() ? { url: url.trim() } : {};\n}\n\nfunction readProjectionRuntimeSourceName(runtimeNode: any): { sourceName?: string } {\n const sourceName = readProjectionSourceNodeSegment(runtimeNode);\n return sourceName ? { sourceName } : {};\n}\n\nfunction readProjectionRuntimeOwnerNodePath(runtimeNode: any): { ownerNodePath?: string } {\n const ownerNodePath = runtimeNode?.metadata?.editorProjection?.ownerNodePath;\n return typeof ownerNodePath === 'string' && ownerNodePath.trim() ? { ownerNodePath: ownerNodePath.trim() } : {};\n}\n\nfunction sanitizeProjectionImportSnapshotId(value: string): string {\n return value.trim().toLowerCase().replace(/[^a-z0-9_.:-]+/gi, '-').replace(/^-+|-+$/g, '') || 'item';\n}\n\nfunction cloneProjectionImportStructureSnapshot(\n snapshot: BabylonEditorProjectionImportStructureSnapshot | null,\n): BabylonEditorProjectionImportStructureSnapshot | null {\n if (!snapshot) return null;\n return {\n ...snapshot,\n nodes: snapshot.nodes.map(item => ({\n ...item,\n ...(item.materialIds ? { materialIds: [...item.materialIds] } : {}),\n })),\n materials: snapshot.materials.map(item => ({\n ...item,\n nodeIds: [...item.nodeIds],\n textureIds: [...item.textureIds],\n })),\n textures: snapshot.textures.map(item => ({ ...item })),\n animations: snapshot.animations.map(item => ({ ...item })),\n };\n}\n\nfunction disposeImportedProjectionResult(result: BabylonEditorProjectionImportResult): void {\n for (const animationGroup of result.animationGroups ?? []) {\n animationGroup.dispose?.();\n }\n for (const node of [...(result.meshes ?? []), ...(result.transformNodes ?? [])]) {\n node.dispose?.();\n }\n}\n\nfunction attachRuntimeProjection(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n node: BabylonEditorProjectionNode,\n projection: ProjectedBabylonEditorNode,\n): boolean {\n if (node.runtimeKind === 'camera') {\n attachCameraProjection(babylon, scene, node, projection);\n return true;\n }\n if (node.runtimeKind === 'light') {\n if (node.light?.type === 'hemispheric') {\n attachHemisphericLightProjection(babylon, scene, node, projection);\n } else {\n attachDirectionalLightProjection(babylon, scene, node, projection);\n }\n return true;\n }\n return false;\n}\n\nfunction attachCameraProjection(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n node: BabylonEditorProjectionNode,\n projection: ProjectedBabylonEditorNode,\n): void {\n const MeshBuilder = (babylon as any).MeshBuilder;\n const StandardMaterial = (babylon as any).StandardMaterial;\n const Color3 = requireBabylonCtor(babylon.Color3, 'Color3');\n if (!MeshBuilder || !StandardMaterial) return;\n\n const settings = normalizeBabylonEditorProjectionCameraSettings(node.camera);\n const body = MeshBuilder.CreateBox(`${node.id}.cameraHelper`, {\n width: 0.38,\n height: 0.28,\n depth: 0.24,\n }, scene);\n body.parent = projection.root;\n body.metadata = createProjectionMetadata(node.id, { runtimeKind: 'camera', helper: 'body' });\n const material = new StandardMaterial(`${node.id}.cameraHelper.material`, scene);\n material.diffuseColor = new Color3(0.45, 0.68, 1);\n material.specularColor = new Color3(0.08, 0.1, 0.12);\n body.material = material;\n projection.runtimeObjects.push(material);\n projection.outlineMeshes = [body];\n\n const frustum = createCameraFrustumLines(babylon, scene, node, settings);\n if (frustum) {\n frustum.parent = projection.root;\n frustum.isPickable = false;\n }\n}\n\nfunction attachDirectionalLightProjection(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n node: BabylonEditorProjectionNode,\n projection: ProjectedBabylonEditorNode,\n): void {\n const MeshBuilder = (babylon as any).MeshBuilder;\n const StandardMaterial = (babylon as any).StandardMaterial;\n const DirectionalLight = (babylon as any).DirectionalLight;\n const Vector3 = requireBabylonCtor(babylon.Vector3, 'Vector3');\n const Color3 = requireBabylonCtor(babylon.Color3, 'Color3');\n if (!MeshBuilder || !StandardMaterial) return;\n const settings = readProjectionDirectionalLightSettings(\n node.light?.type === 'directional' ? node.light : undefined,\n );\n const direction = new Vector3(settings.direction.x, settings.direction.y, settings.direction.z);\n\n if (DirectionalLight) {\n const light = new DirectionalLight(`${node.id}.directionalLight`, direction, scene);\n light.intensity = settings.intensity;\n light.diffuse = new Color3(\n settings.diffuseColor?.r ?? 1,\n settings.diffuseColor?.g ?? 1,\n settings.diffuseColor?.b ?? 1,\n );\n light.metadata = createProjectionMetadata(node.id, { runtimeKind: 'light', lightType: 'directional' });\n light.setEnabled?.(node.active !== false);\n projection.runtimeObjects.push(light);\n resyncProjectionSceneLightSources(scene);\n }\n\n if (!settings.helperVisible) return;\n\n const helper = MeshBuilder.CreateBox(`${node.id}.lightHelper`, {\n size: 0.28,\n }, scene);\n helper.parent = projection.root;\n helper.metadata = createProjectionMetadata(node.id, { runtimeKind: 'light', helper: 'body' });\n const material = new StandardMaterial(`${node.id}.lightHelper.material`, scene);\n material.diffuseColor = new Color3(1, 0.92, 0.42);\n material.emissiveColor = new Color3(0.5, 0.42, 0.12);\n material.specularColor = new Color3(0.08, 0.1, 0.12);\n helper.material = material;\n projection.runtimeObjects.push(material);\n projection.outlineMeshes = [helper];\n\n const arrow = createLightDirectionLines(babylon, scene, node, settings.direction);\n if (arrow) {\n arrow.parent = projection.root;\n arrow.isPickable = false;\n }\n}\n\nfunction attachFallbackProjection(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n node: BabylonEditorProjectionNode,\n projection: ProjectedBabylonEditorNode,\n rendererFallback: boolean,\n): void {\n const mesh = createFallbackProjectionMesh(babylon, scene, node, rendererFallback);\n if (!mesh) return;\n mesh.parent = projection.root;\n projection.outlineMeshes = [mesh];\n}\n\nfunction attachPrimitiveProjection(\n options: BabylonEditorProjectionOptions,\n node: BabylonEditorProjectionNode,\n projection: ProjectedBabylonEditorNode,\n): void {\n const { babylon, scene } = options;\n const mesh = createPrimitiveProjectionMesh(babylon, scene, node, options);\n if (!mesh) {\n attachFallbackProjection(babylon, scene, node, projection, true);\n return;\n }\n mesh.parent = projection.root;\n mesh.isPickable = true;\n if (mesh.material && !isBabylonPrimitiveProjectionSharedMaterial(mesh.material)) {\n projection.runtimeObjects.push(mesh.material);\n }\n projection.outlineMeshes = [mesh];\n}\n\nfunction applyProjectionOutline(\n node: BabylonEditorProjectionNode,\n projection: ProjectedBabylonEditorNode,\n): void {\n const options = createBabylonDefaultOutlineOptions(node.outline);\n if (!options) return;\n for (const mesh of projection.outlineMeshes) {\n applyBabylonDefaultOutline(mesh, options);\n }\n}\n\nfunction createBabylonDefaultOutlineOptions(\n outline: BabylonEditorProjectionOutline | null | undefined,\n): BabylonDefaultOutlineOptions | null {\n if (!outline) return null;\n const options: BabylonDefaultOutlineOptions = {};\n if (typeof outline.renderOutline === 'boolean') options.enabled = outline.renderOutline;\n if (typeof outline.outlineWidth === 'number' && Number.isFinite(outline.outlineWidth)) {\n options.width = outline.outlineWidth;\n }\n if (outline.outlineColor) {\n const color = outline.outlineColor;\n options.color = { r: color.r, g: color.g, b: color.b };\n }\n return Object.keys(options).length > 0 ? options : null;\n}\n\nfunction createPrimitiveProjectionMesh(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n node: BabylonEditorProjectionNode,\n options?: Pick<BabylonEditorProjectionOptions, 'resolveTextureUrl'>,\n): any | null {\n const MeshBuilder = (babylon as any).MeshBuilder;\n const StandardMaterial = (babylon as any).StandardMaterial;\n const PBRMaterial = (babylon as any).PBRMaterial;\n const Color3 = requireBabylonCtor(babylon.Color3, 'Color3');\n if (!MeshBuilder || !StandardMaterial) return null;\n const shape = node.primitive?.shape;\n const name = `${node.id}.${shape ?? 'primitive'}Projection`;\n const mesh = shape === 'sphere'\n ? MeshBuilder.CreateSphere?.(name, { diameter: 1, segments: 32 }, scene)\n : shape === 'plane'\n ? MeshBuilder.CreateGround?.(name, { width: 1, height: 1, subdivisions: 1 }, scene)\n : shape === 'capsule'\n ? MeshBuilder.CreateCapsule?.(name, { height: 2, radius: 0.5, tessellation: 24, subdivisions: 8 }, scene)\n : MeshBuilder.CreateBox?.(name, { size: 1 }, scene);\n if (!mesh) return null;\n const material = node.artistMaterialKind === 'standard' || !PBRMaterial\n ? new StandardMaterial(`${node.id}.primitive.material`, scene)\n : new PBRMaterial(`${node.id}.primitive.material`, scene);\n if ('albedoColor' in material) material.albedoColor = new Color3(0.72, 0.74, 0.76);\n else material.diffuseColor = new Color3(0.72, 0.74, 0.76);\n if ('specularColor' in material) material.specularColor = new Color3(0.12, 0.14, 0.16);\n if ('metallic' in material) material.metallic = 0;\n if ('roughness' in material) material.roughness = 1;\n if (shape === 'plane') material.backFaceCulling = false;\n applyProjectionArtistMaterialProfile({ babylon, scene, resolveTextureUrl: options?.resolveTextureUrl }, material, node.artistMaterialProfile);\n mesh.material = material;\n applyProjectionRenderingToMesh(node, mesh);\n mesh.metadata = createProjectionMetadata(node.id, {\n runtimeKind: 'primitive',\n primitiveShape: shape,\n ...createProjectionShadowMetadata(node),\n });\n return mesh;\n}\n\nfunction applyProjectionArtistMaterialProfilesToMeshes(\n options: BabylonEditorProjectionOptions,\n node: BabylonEditorProjectionNode,\n modelRoot: any,\n meshes: any[],\n materialOwnerResolutionContext: ProjectionMaterialOwnerResolutionContext,\n): unknown[] {\n const slotBindings = createProjectionMaterialSlotBindings(node);\n const hasRootProfile = !!node.artistMaterialProfile;\n const hasSlotProfiles = slotBindings.length > 0;\n if (!hasRootProfile && !hasSlotProfiles) return [];\n const clonedMaterials: unknown[] = [];\n const materials = new Set<unknown>();\n if (hasRootProfile) {\n for (const mesh of meshes) {\n const material = readProjectionWritableMeshMaterial(mesh);\n const meshOwnerNodePath = buildProjectionOwnerNodePath(mesh, modelRoot, node.id);\n if (!material) {\n emitProjectionMaterialProfileDiagnostic(options, {\n projectionNodeId: node.id,\n source: 'rootProfile',\n applied: false,\n matchKind: 'root',\n targetMaterialStatus: 'missingMaterial',\n meshOwnerNodePath,\n warningMessage: 'Root material profile was not applied because an imported mesh has no target material.',\n });\n continue;\n }\n if (materials.has(material)) continue;\n materials.add(material);\n applyProjectionArtistMaterialProfile(options, material, node.artistMaterialProfile);\n emitProjectionMaterialProfileDiagnostic(options, {\n projectionNodeId: node.id,\n source: 'rootProfile',\n applied: true,\n matchKind: 'root',\n targetMaterialStatus: 'material',\n meshOwnerNodePath,\n targetMaterialName: readProjectionMaterialName(material),\n targetMaterialType: readProjectionMaterialType(material),\n });\n }\n if (materials.size === 0 && meshes.length === 0) {\n emitProjectionMaterialProfileDiagnostic(options, {\n projectionNodeId: node.id,\n source: 'rootProfile',\n applied: false,\n matchKind: 'root',\n targetMaterialStatus: 'missingMaterial',\n meshOwnerNodePath: null,\n warningMessage: 'Root material profile was not applied because the imported model produced no meshes.',\n });\n }\n }\n if (!hasSlotProfiles) return clonedMaterials;\n const materialCounts = countProjectionMeshMaterials(meshes);\n const assetMaterialSlots = node.asset ? readProjectionAssetMaterialSlots(node.asset, node.id) : [];\n for (const slotBinding of slotBindings) {\n const ownerResolution = materialOwnerResolutionContext.resolve(slotBinding.slot, {\n explicitSlotBinding: true,\n });\n const ownerDiagnostic = createProjectionOwnerDiagnosticFields(ownerResolution);\n if (ownerResolution.status !== 'resolved') {\n emitProjectionSlotMaterialProfileDiagnostic(options, node.id, slotBinding, {\n applied: false,\n matchKind: ownerResolution.matchKind ?? 'none',\n meshOwnerNodePath: null,\n targetMaterialStatus: 'missingMeshOwner',\n ...ownerDiagnostic,\n warningMessage: ownerResolution.diagnostic.message,\n });\n continue;\n }\n const mesh = ownerResolution.target.runtimeNode;\n const ownerNodePath = ownerResolution.candidate.canonicalPath;\n if (!readProjectionWritableMeshMaterial(mesh)) {\n emitProjectionSlotMaterialProfileDiagnostic(options, node.id, slotBinding, {\n applied: false,\n matchKind: ownerResolution.matchKind,\n meshOwnerNodePath: ownerNodePath,\n targetMaterialStatus: 'missingMaterial',\n ...ownerDiagnostic,\n warningMessage: 'Slot material profile was not applied because the resolved owner has no target material.',\n });\n continue;\n }\n const materialResolution = resolveProjectionSlotMaterialTarget(\n mesh,\n materialCounts,\n slotBinding.slot,\n ownerNodePath,\n {\n projectionNodeId: node.id,\n primitiveOwnerResolvedByPointer: isMaterialOwnerResolutionPointerVerified(\n slotBinding.slot,\n ownerResolution,\n ),\n primitiveSingleMaterialFallbackAllowed: isProjectionSinglePrimitiveMaterialSlot(slotBinding.slot, assetMaterialSlots),\n },\n );\n const targetMaterial = materialResolution.target?.material ?? readProjectionWritableMeshMaterial(mesh);\n if (!materialResolution.target) {\n emitProjectionSlotMaterialProfileDiagnostic(options, node.id, slotBinding, {\n applied: false,\n matchKind: ownerResolution.matchKind,\n meshOwnerNodePath: ownerNodePath,\n targetMaterialStatus: materialResolution.targetMaterialStatus,\n targetMaterialName: readProjectionMaterialName(targetMaterial),\n targetMaterialType: readProjectionMaterialType(targetMaterial),\n ...ownerDiagnostic,\n warningMessage: materialResolution.warningMessage,\n });\n continue;\n }\n const target = materialResolution.target;\n clonedMaterials.push(...target.clonedMaterials);\n applyProjectionArtistMaterialProfile(options, target.material, slotBinding.profile);\n emitProjectionSlotMaterialProfileDiagnostic(options, node.id, slotBinding, {\n applied: true,\n matchKind: ownerResolution.matchKind,\n meshOwnerNodePath: ownerNodePath,\n targetMaterialStatus: materialResolution.targetMaterialStatus,\n targetMaterialName: readProjectionMaterialName(target.material),\n targetMaterialType: readProjectionMaterialType(target.material),\n ...ownerDiagnostic,\n ...(ownerResolution.diagnostic?.severity === 'warning'\n ? { warningMessage: ownerResolution.diagnostic.message }\n : {}),\n });\n }\n return clonedMaterials;\n}\n\nfunction createProjectionOwnerDiagnosticFields(\n resolution: ProjectionMaterialOwnerResolution,\n): Pick<\n BabylonEditorProjectionMaterialProfileDiagnostic,\n | 'ownerResolutionStatus'\n | 'ownerDiagnosticCode'\n | 'ownerDiagnosticSeverity'\n | 'ownerCandidateIds'\n | 'ownerIdentity'\n> {\n return {\n ownerResolutionStatus: resolution.status,\n ...(resolution.diagnostic ? {\n ownerDiagnosticCode: resolution.diagnostic.code,\n ownerDiagnosticSeverity: resolution.diagnostic.severity,\n } : {}),\n ownerCandidateIds: resolution.candidates.map(candidate => candidate.candidateId),\n ...(resolution.status === 'resolved' ? { ownerIdentity: resolution.identity } : {}),\n };\n}\n\nfunction applyProjectionArtistMaterialProfile(\n options: Pick<BabylonEditorProjectionOptions, 'babylon' | 'scene' | 'resolveTextureUrl'>,\n material: unknown,\n profile: ArtistMaterialProfile | null | undefined,\n): void {\n if (!profile) return;\n applyArtistMaterialProfileToRuntimeMaterial(material, options.scene, profile, {\n babylon: options.babylon,\n resolveTextureUrl: options.resolveTextureUrl,\n });\n}\n\nfunction emitProjectionSlotMaterialProfileDiagnostic(\n options: BabylonEditorProjectionOptions,\n projectionNodeId: string,\n slotBinding: ProjectionMaterialSlotBinding,\n diagnostic: Omit<BabylonEditorProjectionMaterialProfileDiagnostic, 'projectionNodeId' | 'source' | 'slotId' | 'ownerNodePath' | 'primitiveIndex'>,\n): void {\n emitProjectionMaterialProfileDiagnostic(options, {\n projectionNodeId,\n source: slotBinding.source,\n slotId: slotBinding.slot.slotId,\n ownerNodePath: slotBinding.slot.ownerNodePath,\n primitiveIndex: slotBinding.slot.primitiveIndex,\n ...diagnostic,\n });\n}\n\nfunction emitProjectionMaterialProfileDiagnostic(\n options: BabylonEditorProjectionOptions,\n diagnostic: BabylonEditorProjectionMaterialProfileDiagnostic,\n): void {\n options.onMaterialProfileDiagnostic?.(diagnostic);\n if (!diagnostic.warningMessage) return;\n options.logger?.warn?.('[BabylonEditorProjection] Material profile diagnostic warning', {\n projectionNodeId: diagnostic.projectionNodeId,\n source: diagnostic.source,\n slotId: diagnostic.slotId,\n ownerNodePath: diagnostic.ownerNodePath,\n meshOwnerNodePath: diagnostic.meshOwnerNodePath,\n matchKind: diagnostic.matchKind,\n targetMaterialStatus: diagnostic.targetMaterialStatus,\n warningMessage: diagnostic.warningMessage,\n });\n}\n\nfunction readProjectionMaterialName(material: unknown): string | undefined {\n const name = (material as any)?.name;\n return typeof name === 'string' && name.trim() ? name.trim() : undefined;\n}\n\nfunction readProjectionMaterialType(material: unknown): string | null | undefined {\n const getClassName = (material as any)?.getClassName;\n const className = typeof getClassName === 'function' ? getClassName.call(material) : null;\n return typeof className === 'string' && className.trim() ? className.trim() : className;\n}\n\nfunction createProjectionMaterialSlotBindings(\n node: Pick<BabylonEditorProjectionNode, 'artistMaterialSlotBindings' | 'id'>,\n): ProjectionMaterialSlotBinding[] {\n const bindings: ProjectionMaterialSlotBinding[] = [];\n for (const binding of node.artistMaterialSlotBindings ?? []) {\n const profile = binding?.profile;\n const slot = createProjectionMaterialSlotDescriptor(binding?.slot, node.id);\n if (!profile || !slot) continue;\n bindings.push({ slot, profile, source: 'slotBinding' });\n }\n return bindings;\n}\n\nfunction createProjectionMaterialSlotDescriptor(\n value: ProjectionMaterialSlotDescriptorInput | null | undefined,\n projectionNodeId?: string,\n): ProjectionMaterialSlotDescriptor | null {\n if (!value || typeof value !== 'object') return null;\n const ownerNodePath = typeof value.ownerNodePath === 'string'\n ? normalizeProjectionOwnerNodePath(value.ownerNodePath, { projectionNodeId })\n : '';\n const slotId = typeof value.slotId === 'string' && value.slotId.trim() ? value.slotId.trim() : '';\n if (!slotId || !ownerNodePath) return null;\n const label = typeof value.label === 'string' && value.label.trim() ? value.label.trim() : '';\n const nodeIndex = Number.isInteger(value.nodeIndex) ? value.nodeIndex as number : undefined;\n const nodeIndexPath = Array.isArray(value.nodeIndexPath)\n ? value.nodeIndexPath.filter((item): item is number => Number.isInteger(item))\n : undefined;\n const meshIndex = Number.isInteger(value.meshIndex) ? value.meshIndex as number : undefined;\n const primitiveIndex = Number.isInteger(value.primitiveIndex) ? value.primitiveIndex as number : undefined;\n const sourceMaterialIndex = Number.isInteger(value.sourceMaterialIndex) ? value.sourceMaterialIndex as number : undefined;\n const sourceMaterialIndices = Array.isArray(value.sourceMaterialIndices)\n ? value.sourceMaterialIndices.filter((item): item is number => Number.isInteger(item))\n : undefined;\n const materialName = typeof value.materialName === 'string' && value.materialName.trim() ? value.materialName.trim() : '';\n const materialNames = Array.isArray(value.materialNames)\n ? value.materialNames.filter((item): item is string => typeof item === 'string' && !!item.trim()).map(item => item.trim())\n : undefined;\n const triangleCount = Number.isFinite(value.triangleCount) ? value.triangleCount as number : undefined;\n const boundingBox = readProjectionMaterialSlotBoundingBox(value.boundingBox);\n return {\n slotId,\n ownerNodePath,\n ...(label ? { label } : {}),\n ...(nodeIndex != null ? { nodeIndex } : {}),\n ...(nodeIndexPath && nodeIndexPath.length > 0 ? { nodeIndexPath } : {}),\n ...(meshIndex != null ? { meshIndex } : {}),\n ...(primitiveIndex != null ? { primitiveIndex } : {}),\n ...(sourceMaterialIndex != null ? { sourceMaterialIndex } : {}),\n ...(sourceMaterialIndices && sourceMaterialIndices.length > 0\n ? { sourceMaterialIndices }\n : {}),\n ...(materialName ? { materialName } : {}),\n ...(materialNames && materialNames.length > 0 ? { materialNames } : {}),\n ...(triangleCount != null ? { triangleCount } : {}),\n ...(boundingBox ? { boundingBox } : {}),\n key: slotId || ownerNodePath,\n normalizedOwnerNodePath: ownerNodePath,\n matchKey: createMaterialSlotOwnerPathMatchKey(ownerNodePath, { projectionNodeId }),\n };\n}\n\nfunction readProjectionMaterialSlotBoundingBox(value: unknown): ProjectionMaterialSlotBoundingBox | undefined {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return undefined;\n const record = value as Record<string, unknown>;\n const min = readProjectionMaterialSlotBoundsTuple(record.min);\n const max = readProjectionMaterialSlotBoundsTuple(record.max);\n if (!min && !max) return undefined;\n return {\n ...(min ? { min } : {}),\n ...(max ? { max } : {}),\n };\n}\n\nfunction readProjectionMaterialSlotBoundsTuple(value: unknown): [number, number, number] | undefined {\n if (!Array.isArray(value) || value.length < 3) return undefined;\n const tuple = value.slice(0, 3).map(item => Number(item));\n if (!tuple.every(item => Number.isFinite(item))) return undefined;\n return tuple as [number, number, number];\n}\n\nfunction createProjectionMaterialOwnerResolutionContext(\n rootNode: any,\n projectionNodeId: string,\n): ProjectionMaterialOwnerResolutionContext {\n const candidates = collectBabylonMaterialOwnerCandidates(rootNode, {\n readPathSegment: node => {\n const segment = stableProjectionNodeSegment(node);\n return segment == null\n ? null\n : normalizeProjectionOwnerNodePath(segment, { projectionNodeId });\n },\n }).map(candidate => ({\n ...candidate,\n canonicalPath: normalizeProjectionOwnerNodePath(candidate.canonicalPath, { projectionNodeId }),\n ...(candidate.sourceOwnerAliases ? {\n sourceOwnerAliases: candidate.sourceOwnerAliases.map(alias => (\n normalizeProjectionOwnerNodePath(alias, { projectionNodeId })\n )),\n } : {}),\n }));\n const cache = new Map<string, ProjectionMaterialOwnerResolution>();\n return {\n resolve(slot, options = {}) {\n const explicitSlotBinding = options.explicitSlotBinding === true;\n const cacheKey = createProjectionMaterialOwnerResolutionCacheKey(slot, explicitSlotBinding);\n const cached = cache.get(cacheKey);\n if (cached) return cached;\n const resolution = resolveMaterialOwner(slot, candidates, { explicitSlotBinding });\n cache.set(cacheKey, resolution);\n return resolution;\n },\n };\n}\n\nfunction createProjectionMaterialOwnerResolutionCacheKey(\n slot: ProjectionMaterialSlotDescriptor,\n explicitSlotBinding: boolean,\n): string {\n return JSON.stringify([\n explicitSlotBinding,\n slot.ownerNodePath,\n slot.nodeIndex ?? null,\n slot.nodeIndexPath ?? null,\n slot.meshIndex ?? null,\n slot.primitiveIndex ?? null,\n slot.sourceMaterialIndex ?? null,\n slot.sourceMaterialIndices ?? null,\n ]);\n}\n\nfunction buildProjectionOwnerNodePath(node: any, rootNode: any, projectionNodeId?: string): string | null {\n if (!node || !rootNode || node === rootNode) return '';\n const segments: string[] = [];\n let current = node;\n while (current && current !== rootNode) {\n const segment = stableProjectionNodeSegment(current);\n if (!segment) return null;\n segments.push(segment);\n current = current.parent ?? null;\n }\n if (current !== rootNode) return null;\n return normalizeProjectionOwnerNodePath(segments.reverse().join('/'), { projectionNodeId });\n}\n\nfunction stableProjectionNodeSegment(node: any): string | null {\n const sourceSegment = readProjectionSourceNodeSegment(node);\n if (sourceSegment) return sourceSegment;\n const candidates = [node?.name, node?.id];\n for (const candidate of candidates) {\n if (typeof candidate !== 'string') continue;\n const trimmed = candidate.trim();\n if (trimmed) return trimmed;\n }\n return null;\n}\n\nfunction createAssetMeshProjectionNodeId(rootNodeId: string, ownerNodePath: string): string {\n return `${rootNodeId}${ASSET_MESH_SELECTION_SEPARATOR}${encodeURIComponent(ownerNodePath)}`;\n}\n\nfunction resolveProjectionAssetMeshSelectionKey(\n asset: BabylonEditorProjectionAsset,\n mesh: any,\n ownerNodePath: string,\n materialOwnerResolutionContext: ProjectionMaterialOwnerResolutionContext,\n explicitlyBoundSlotIds: ReadonlySet<string>,\n projectionNodeId?: string,\n): string {\n const slots = resolveProjectionAssetMeshSelectionSlots(\n readProjectionAssetMaterialSlots(asset, projectionNodeId),\n mesh,\n materialOwnerResolutionContext,\n explicitlyBoundSlotIds,\n );\n return slots[0]?.key ?? ownerNodePath;\n}\n\nfunction resolveProjectionAssetMeshSelectionSlots(\n materialSlots: readonly ProjectionMaterialSlotDescriptor[],\n mesh: any,\n materialOwnerResolutionContext: ProjectionMaterialOwnerResolutionContext,\n explicitlyBoundSlotIds: ReadonlySet<string>,\n): ProjectionMaterialSlotDescriptor[] {\n return materialSlots.filter(slot => {\n const resolution = materialOwnerResolutionContext.resolve(slot, {\n explicitSlotBinding: explicitlyBoundSlotIds.has(slot.slotId),\n });\n return resolution.status === 'resolved' && resolution.target.runtimeNode === mesh;\n });\n}\n\nfunction createProjectionAssetMeshSelectionProxies(\n options: BabylonEditorProjectionOptions,\n node: BabylonEditorProjectionNode,\n projection: ProjectedBabylonEditorNode,\n mesh: any,\n ownerNodePath: string,\n materialSlots: readonly ProjectionMaterialSlotDescriptor[],\n materialOwnerResolutionContext: ProjectionMaterialOwnerResolutionContext,\n explicitlyBoundSlotIds: ReadonlySet<string>,\n): any[] {\n const primitiveSlots = resolveProjectionAssetMeshSelectionSlots(\n materialSlots,\n mesh,\n materialOwnerResolutionContext,\n explicitlyBoundSlotIds,\n )\n .filter(slot => Number.isInteger(slot.primitiveIndex));\n if (primitiveSlots.length <= 1) return [];\n const subMeshes = Array.isArray(mesh?.subMeshes) ? mesh.subMeshes : [];\n if (subMeshes.length <= 1) return [];\n\n const proxies: any[] = [];\n const createdNodeIds = new Set<string>();\n for (const slot of primitiveSlots) {\n const primitiveIndex = slot.primitiveIndex;\n if (primitiveIndex == null || primitiveIndex < 0) continue;\n const subMesh = subMeshes[primitiveIndex];\n if (!subMesh) continue;\n const selectionNodeId = createAssetMeshProjectionNodeId(node.id, slot.key);\n if (createdNodeIds.has(selectionNodeId)) continue;\n const proxy = createProjectionSubMeshSelectionProxy(options, node, mesh, subMesh, {\n selectionNodeId,\n ownerNodePath,\n slotSelectionKey: slot.key,\n primitiveIndex,\n });\n if (!proxy) continue;\n createdNodeIds.add(selectionNodeId);\n proxies.push(proxy);\n projection.selectionMeshes = projection.selectionMeshes ?? [];\n projection.selectionMeshes.push(proxy);\n registerProjectionSelectionPresentationTarget(projection, selectionNodeId, mesh);\n if (proxy.material) projection.runtimeObjects.push(proxy.material);\n }\n return proxies;\n}\n\nfunction resolveProjectionSplitPrimitiveMeshSelectionSlot(\n mesh: any,\n materialSlots: readonly ProjectionMaterialSlotDescriptor[],\n materialOwnerResolutionContext: ProjectionMaterialOwnerResolutionContext,\n explicitlyBoundSlotIds: ReadonlySet<string>,\n ownerMeshCount: number,\n ordinalByOwnerKey: Map<string, number>,\n): ProjectionMaterialSlotDescriptor | null {\n const subMeshes = Array.isArray(mesh?.subMeshes) ? mesh.subMeshes : [];\n if (subMeshes.length > 1) return null;\n if ((mesh?.getTotalVertices?.() ?? 0) <= 0) return null;\n const primitiveSlots = resolveProjectionAssetMeshSelectionSlots(\n materialSlots,\n mesh,\n materialOwnerResolutionContext,\n explicitlyBoundSlotIds,\n )\n .filter((slot): slot is ProjectionMaterialSlotDescriptor & { primitiveIndex: number } => (\n Number.isInteger(slot.primitiveIndex)\n ))\n .sort((left, right) => left.primitiveIndex - right.primitiveIndex);\n if (primitiveSlots.length === 1 && ownerMeshCount > 1) return primitiveSlots[0]!;\n if (primitiveSlots.length <= 1) return null;\n if (ownerMeshCount < primitiveSlots.length) return null;\n\n const ownerKey = primitiveSlots[0]?.matchKey ?? '';\n const ordinal = ordinalByOwnerKey.get(ownerKey) ?? 0;\n ordinalByOwnerKey.set(ownerKey, ordinal + 1);\n\n return primitiveSlots.find(slot => slot.primitiveIndex === ordinal) ?? primitiveSlots[ordinal] ?? null;\n}\n\nfunction createProjectionPrimitiveBoundsSelectionProxies(\n options: BabylonEditorProjectionOptions,\n node: BabylonEditorProjectionNode,\n projection: ProjectedBabylonEditorNode,\n mesh: any,\n ownerNodePath: string,\n materialSlots: readonly ProjectionMaterialSlotDescriptor[],\n materialOwnerResolutionContext: ProjectionMaterialOwnerResolutionContext,\n explicitlyBoundSlotIds: ReadonlySet<string>,\n ownerMeshCount: number,\n): any[] {\n const subMeshes = Array.isArray(mesh?.subMeshes) ? mesh.subMeshes : [];\n if (subMeshes.length > 1) return [];\n const primitiveSlots = resolveProjectionAssetMeshSelectionSlots(\n materialSlots,\n mesh,\n materialOwnerResolutionContext,\n explicitlyBoundSlotIds,\n )\n .filter(slot => Number.isInteger(slot.primitiveIndex) && !!slot.boundingBox)\n .sort((left, right) => (left.primitiveIndex ?? 0) - (right.primitiveIndex ?? 0));\n if (primitiveSlots.length <= 1) return [];\n if (ownerMeshCount >= primitiveSlots.length) return [];\n\n const proxies: any[] = [];\n const createdNodeIds = new Set<string>();\n for (const slot of primitiveSlots) {\n const primitiveIndex = slot.primitiveIndex;\n if (primitiveIndex == null || primitiveIndex < 0) continue;\n const selectionNodeId = createAssetMeshProjectionNodeId(node.id, slot.key);\n if (createdNodeIds.has(selectionNodeId)) continue;\n const proxy = createProjectionPrimitiveBoundsSelectionProxy(options, node, mesh, slot, {\n selectionNodeId,\n ownerNodePath,\n slotSelectionKey: slot.key,\n primitiveIndex,\n });\n if (!proxy) continue;\n createdNodeIds.add(selectionNodeId);\n proxies.push(proxy);\n projection.selectionMeshes = projection.selectionMeshes ?? [];\n projection.selectionMeshes.push(proxy);\n registerProjectionSelectionPresentationTarget(projection, selectionNodeId, mesh);\n if (proxy.material) projection.runtimeObjects.push(proxy.material);\n }\n return proxies;\n}\n\nfunction registerProjectionSelectionPresentationTarget(\n projection: ProjectedBabylonEditorNode,\n selectionNodeId: string,\n renderMesh: any,\n): void {\n projection.selectionPresentationTargets = projection.selectionPresentationTargets ?? [];\n const existing = projection.selectionPresentationTargets.find(\n target => target.selectionNodeId === selectionNodeId,\n );\n if (existing) {\n if (!existing.renderMeshes.includes(renderMesh)) {\n existing.renderMeshes = [...existing.renderMeshes, renderMesh];\n }\n return;\n }\n projection.selectionPresentationTargets.push({\n selectionNodeId,\n renderMeshes: [renderMesh],\n });\n}\n\nfunction createProjectionPrimitiveBoundsSelectionProxy(\n options: BabylonEditorProjectionOptions,\n node: BabylonEditorProjectionNode,\n sourceMesh: any,\n slot: ProjectionMaterialSlotDescriptor,\n metadata: {\n selectionNodeId: string;\n ownerNodePath: string;\n slotSelectionKey: string;\n primitiveIndex: number;\n },\n): any | null {\n const { babylon, scene } = options;\n const MeshBuilder = (babylon as any).MeshBuilder;\n const StandardMaterial = (babylon as any).StandardMaterial;\n if (!MeshBuilder?.CreateBox || !StandardMaterial) return null;\n const bounds = readProjectionPrimitiveSlotBounds(slot);\n if (!bounds) return null;\n\n const size = {\n x: Math.max(Math.abs(bounds.max.x - bounds.min.x), MIN_SELECTION_BOUNDS_PROXY_SIZE),\n y: Math.max(Math.abs(bounds.max.y - bounds.min.y), MIN_SELECTION_BOUNDS_PROXY_SIZE),\n z: Math.max(Math.abs(bounds.max.z - bounds.min.z), MIN_SELECTION_BOUNDS_PROXY_SIZE),\n };\n const center = {\n x: (bounds.min.x + bounds.max.x) / 2,\n y: (bounds.min.y + bounds.max.y) / 2,\n z: (bounds.min.z + bounds.max.z) / 2,\n };\n const proxy = MeshBuilder.CreateBox(\n `${sourceMesh.name ?? node.id}.selectionBoundsProxy.${sanitizeProjectionImportSnapshotId(metadata.slotSelectionKey)}`,\n {\n width: size.x,\n height: size.y,\n depth: size.z,\n },\n scene,\n );\n if (!proxy) return null;\n proxy.parent = sourceMesh;\n proxy.position.x = center.x;\n proxy.position.y = center.y;\n proxy.position.z = center.z;\n proxy.isPickable = false;\n proxy.metadata = {\n ...(proxy.metadata ?? {}),\n disablePlanarShadow: true,\n disableBlobShadow: true,\n disableStaticProjectedShadow: true,\n editorProjectionSelectionProxy: true,\n editorProjectionSelectionBoundsProxy: true,\n editorProjection: {\n nodeId: metadata.selectionNodeId,\n rootNodeId: node.id,\n sourceId: node.asset?.sourceId,\n ownerNodePath: metadata.ownerNodePath,\n slotSelectionKey: metadata.slotSelectionKey,\n primitiveIndex: metadata.primitiveIndex,\n runtimeKind: 'assetMeshSelectionProxy',\n ...createProjectionShadowMetadata(node),\n },\n };\n\n const material = new StandardMaterial(`${proxy.name}.material`, scene);\n material.alpha = 0;\n material.disableLighting = true;\n material.backFaceCulling = false;\n if ('disableColorWrite' in material) {\n material.disableColorWrite = true;\n }\n proxy.material = material;\n return proxy;\n}\n\nfunction readProjectionPrimitiveSlotBounds(\n slot: ProjectionMaterialSlotDescriptor,\n): Pick<BabylonEditorProjectionBounds, 'min' | 'max'> | null {\n const min = readProjectionMaterialSlotBoundsVec3(slot.boundingBox?.min);\n const max = readProjectionMaterialSlotBoundsVec3(slot.boundingBox?.max);\n if (!min || !max) return null;\n return { min, max };\n}\n\nfunction readProjectionMaterialSlotBoundsVec3(value: readonly number[] | undefined): EditorTransformVec3 | null {\n if (!Array.isArray(value) || value.length < 3) return null;\n const [x, y, z] = value.map(item => Number(item));\n if (!Number.isFinite(x) || !Number.isFinite(y) || !Number.isFinite(z)) return null;\n return { x, y, z };\n}\n\nfunction createProjectionSubMeshSelectionProxy(\n options: BabylonEditorProjectionOptions,\n node: BabylonEditorProjectionNode,\n sourceMesh: any,\n subMesh: any,\n metadata: {\n selectionNodeId: string;\n ownerNodePath: string;\n slotSelectionKey: string;\n primitiveIndex: number;\n },\n): any | null {\n const { babylon, scene } = options;\n const Mesh = (babylon as any).Mesh;\n const VertexData = (babylon as any).VertexData;\n const VertexBuffer = (babylon as any).VertexBuffer;\n const StandardMaterial = (babylon as any).StandardMaterial;\n if (!Mesh || !VertexData || !VertexBuffer || !StandardMaterial) return null;\n\n const positions = sourceMesh.getVerticesData?.(VertexBuffer.PositionKind, true, true);\n if (!positions || positions.length < 9) return null;\n const sourceIndices = sourceMesh.getIndices?.(true, true) ?? null;\n const subIndices = readProjectionSubMeshIndices(sourceIndices, subMesh);\n if (subIndices.length < 3) return null;\n\n const indexMap = new Map<number, number>();\n const proxyPositions: number[] = [];\n const proxyIndices: number[] = [];\n for (const sourceIndex of subIndices) {\n const vertexIndex = Number(sourceIndex);\n if (!Number.isInteger(vertexIndex) || vertexIndex < 0) continue;\n let mappedIndex = indexMap.get(vertexIndex);\n if (mappedIndex == null) {\n const positionIndex = vertexIndex * 3;\n if (positionIndex + 2 >= positions.length) continue;\n mappedIndex = indexMap.size;\n indexMap.set(vertexIndex, mappedIndex);\n proxyPositions.push(\n Number(positions[positionIndex] ?? 0),\n Number(positions[positionIndex + 1] ?? 0),\n Number(positions[positionIndex + 2] ?? 0),\n );\n }\n proxyIndices.push(mappedIndex);\n }\n if (proxyPositions.length < 9 || proxyIndices.length < 3) return null;\n\n const proxy = new Mesh(`${sourceMesh.name ?? node.id}.selectionProxy.${sanitizeProjectionImportSnapshotId(metadata.slotSelectionKey)}`, scene);\n proxy.parent = sourceMesh;\n proxy.isPickable = false;\n proxy.metadata = {\n ...(proxy.metadata ?? {}),\n disablePlanarShadow: true,\n disableBlobShadow: true,\n disableStaticProjectedShadow: true,\n editorProjectionSelectionProxy: true,\n editorProjection: {\n nodeId: metadata.selectionNodeId,\n rootNodeId: node.id,\n sourceId: node.asset?.sourceId,\n ownerNodePath: metadata.ownerNodePath,\n slotSelectionKey: metadata.slotSelectionKey,\n primitiveIndex: metadata.primitiveIndex,\n runtimeKind: 'assetMeshSelectionProxy',\n ...createProjectionShadowMetadata(node),\n },\n };\n\n const vertexData = new VertexData();\n vertexData.positions = proxyPositions;\n vertexData.indices = proxyIndices;\n vertexData.applyToMesh(proxy, false);\n\n const material = new StandardMaterial(`${proxy.name}.material`, scene);\n material.alpha = 0;\n material.disableLighting = true;\n material.backFaceCulling = false;\n if ('disableColorWrite' in material) {\n material.disableColorWrite = true;\n }\n proxy.material = material;\n return proxy;\n}\n\nfunction readProjectionSubMeshIndices(sourceIndices: ArrayLike<number> | null, subMesh: any): number[] {\n const indexStart = Number.isInteger(subMesh?.indexStart) ? subMesh.indexStart as number : 0;\n const indexCount = Number.isInteger(subMesh?.indexCount) ? subMesh.indexCount as number : 0;\n if (sourceIndices && indexCount > 0) {\n return Array.from(sourceIndices).slice(indexStart, indexStart + indexCount);\n }\n const verticesStart = Number.isInteger(subMesh?.verticesStart) ? subMesh.verticesStart as number : 0;\n const verticesCount = Number.isInteger(subMesh?.verticesCount) ? subMesh.verticesCount as number : 0;\n return Array.from({ length: Math.max(0, verticesCount) }, (_, index) => verticesStart + index);\n}\n\nfunction readProjectionAssetMaterialSlots(\n asset: BabylonEditorProjectionAsset,\n projectionNodeId?: string,\n): ProjectionMaterialSlotDescriptor[] {\n const rawSlots = asset.metadata?.materialSlots;\n if (!Array.isArray(rawSlots)) return [];\n const slots: ProjectionMaterialSlotDescriptor[] = [];\n for (const rawSlot of rawSlots) {\n const slot = readProjectionAssetMaterialSlot(rawSlot, projectionNodeId);\n if (slot) slots.push(slot);\n }\n return slots;\n}\n\nfunction readProjectionAssetMaterialSlot(value: unknown, projectionNodeId?: string): ProjectionMaterialSlotDescriptor | null {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return null;\n const record = value as Record<string, unknown>;\n return createProjectionMaterialSlotDescriptor(record, projectionNodeId);\n}\n\nfunction countProjectionMeshMaterials(meshes: any[]): Map<unknown, number> {\n const counts = new Map<unknown, number>();\n for (const mesh of meshes) {\n const material = readProjectionWritableMeshMaterial(mesh);\n if (!material) continue;\n counts.set(material, (counts.get(material) ?? 0) + 1);\n }\n return counts;\n}\n\nfunction isProjectionSinglePrimitiveMaterialSlot(\n slot: ProjectionMaterialSlotDescriptor,\n materialSlots: readonly ProjectionMaterialSlotDescriptor[],\n): boolean {\n if (slot.primitiveIndex !== 0 || materialSlots.length === 0) return false;\n const matchingPrimitiveSlots = materialSlots.filter(candidate => (\n candidate.primitiveIndex != null\n && candidate.matchKey === slot.matchKey\n && isProjectionMaterialSlotSameMesh(candidate, slot)\n ));\n return matchingPrimitiveSlots.length === 1 && matchingPrimitiveSlots[0]?.primitiveIndex === 0;\n}\n\nfunction isProjectionMaterialSlotSameMesh(\n left: ProjectionMaterialSlotDescriptor,\n right: ProjectionMaterialSlotDescriptor,\n): boolean {\n if (left.meshIndex != null || right.meshIndex != null) {\n return left.meshIndex === right.meshIndex;\n }\n return true;\n}\n\nfunction detachProjectionSlotMaterial(\n mesh: any,\n materialCounts: Map<unknown, number>,\n ownerNodePath: string | null,\n): ProjectionMaterialDetachResult | null {\n const materialOwner = resolveProjectionWritableMaterialOwner(mesh);\n const material = materialOwner?.material;\n if (!material) return null;\n const projectionOwnsMaterialLifecycle = materialOwner === mesh;\n if (typeof material !== 'object') {\n return { material, clonedMaterials: [], projectionOwnsMaterialLifecycle };\n }\n const materialUseCount = materialCounts.get(material) ?? 0;\n if (materialUseCount <= 1) return { material, clonedMaterials: [], projectionOwnsMaterialLifecycle };\n const clone = typeof (material as any).clone === 'function'\n ? safelyCloneProjectionMaterial(\n material,\n createProjectionSlotMaterialName(material, ownerNodePath),\n )\n : null;\n if (!clone) return null;\n try {\n cloneProjectionSubMaterials(clone, material, ownerNodePath);\n } catch {\n safelyDisposeProjectionMaterial(clone);\n return null;\n }\n if (Array.isArray((material as any).subMaterials) && !Array.isArray((clone as any).subMaterials)) {\n safelyDisposeProjectionMaterial(clone);\n return null;\n }\n materialOwner.material = clone;\n materialCounts.set(material, materialUseCount - 1);\n materialCounts.set(clone, 1);\n return {\n material: clone,\n clonedMaterials: projectionOwnsMaterialLifecycle ? [clone] : [],\n projectionOwnsMaterialLifecycle,\n };\n}\n\nfunction resolveProjectionSlotMaterialTarget(\n mesh: any,\n materialCounts: Map<unknown, number>,\n slot: ProjectionMaterialSlotDescriptor,\n ownerNodePath: string | null,\n options: {\n projectionNodeId?: string;\n primitiveOwnerResolvedByPointer: boolean;\n primitiveSingleMaterialFallbackAllowed: boolean;\n },\n): ProjectionMaterialSlotTargetResolution {\n const material = readProjectionWritableMeshMaterial(mesh);\n if (!material) {\n return {\n target: null,\n targetMaterialStatus: 'missingMaterial',\n warningMessage: 'Slot material profile was not applied because the matched mesh has no target material.',\n };\n }\n if (slot.primitiveIndex == null) {\n const detachResult = detachProjectionSlotMaterial(mesh, materialCounts, ownerNodePath);\n if (!detachResult) {\n return {\n target: null,\n targetMaterialStatus: 'missingTargetMaterial',\n warningMessage: 'Slot material profile was not applied because the mesh material could not be detached.',\n };\n }\n return {\n target: {\n material: detachResult.material,\n clonedMaterials: detachResult.clonedMaterials,\n },\n targetMaterialStatus: 'material',\n };\n }\n if (!Array.isArray((material as any).subMaterials)) {\n if (!options.primitiveOwnerResolvedByPointer\n && (slot.primitiveIndex !== 0 || !options.primitiveSingleMaterialFallbackAllowed)) {\n return {\n target: null,\n targetMaterialStatus: 'missingSubMaterial',\n warningMessage: 'Primitive slot material profile was not applied because the target mesh does not expose a matching subMaterial.',\n };\n }\n const detachResult = detachProjectionSlotMaterial(mesh, materialCounts, ownerNodePath);\n if (!detachResult) {\n return {\n target: null,\n targetMaterialStatus: 'missingTargetMaterial',\n warningMessage: 'Primitive slot material profile was not applied because the fallback mesh material could not be detached.',\n };\n }\n return {\n target: {\n material: detachResult.material,\n clonedMaterials: detachResult.clonedMaterials,\n },\n targetMaterialStatus: 'primitiveFallbackMaterial',\n };\n }\n const sourceSubMaterials = (material as any).subMaterials;\n const sourceSubMaterial = sourceSubMaterials[slot.primitiveIndex];\n if (!sourceSubMaterial || typeof sourceSubMaterial !== 'object' || typeof sourceSubMaterial.clone !== 'function') {\n return {\n target: null,\n targetMaterialStatus: 'missingSubMaterial',\n warningMessage: 'Primitive slot material profile was not applied because the target subMaterial is missing or cannot be cloned.',\n };\n }\n const clonedSubMaterial = safelyCloneProjectionMaterial(\n sourceSubMaterial,\n createProjectionSlotSubMaterialName(sourceSubMaterial, ownerNodePath, slot.primitiveIndex),\n );\n if (!clonedSubMaterial) {\n return {\n target: null,\n targetMaterialStatus: 'missingSubMaterial',\n warningMessage: 'Primitive slot material profile was not applied because the target subMaterial clone failed.',\n };\n }\n const detachResult = detachProjectionSlotMaterial(mesh, materialCounts, ownerNodePath);\n const slotMaterial = detachResult?.material;\n if (!detachResult || !Array.isArray((slotMaterial as any).subMaterials)) {\n safelyDisposeProjectionMaterial(clonedSubMaterial);\n return {\n target: null,\n targetMaterialStatus: 'missingTargetMaterial',\n warningMessage: 'Primitive slot material profile was not applied because the multi-material target could not be detached.',\n };\n }\n const subMaterials = (slotMaterial as any).subMaterials;\n const detachedSubMaterial = subMaterials[slot.primitiveIndex];\n subMaterials[slot.primitiveIndex] = clonedSubMaterial;\n if (detachedSubMaterial !== sourceSubMaterial && detachedSubMaterial !== clonedSubMaterial) {\n safelyDisposeProjectionMaterial(detachedSubMaterial);\n }\n return {\n target: {\n material: clonedSubMaterial,\n clonedMaterials: [\n ...detachResult.clonedMaterials,\n ...(detachResult.projectionOwnsMaterialLifecycle ? [clonedSubMaterial] : []),\n ],\n },\n targetMaterialStatus: 'subMaterial',\n };\n}\n\nfunction safelyCloneProjectionMaterial(material: any, name: string): any | null {\n try {\n return material?.clone?.(name) ?? null;\n } catch {\n return null;\n }\n}\n\nfunction safelyDisposeProjectionMaterial(material: any): void {\n try {\n material?.dispose?.();\n } catch {\n // Best-effort cleanup for a clone that was never committed to the scene owner.\n }\n}\n\nfunction readProjectionWritableMeshMaterial(mesh: any): unknown | null {\n return resolveProjectionWritableMaterialOwner(mesh)?.material ?? null;\n}\n\nfunction resolveProjectionWritableMaterialOwner(mesh: any): any | null {\n return resolveBabylonEffectiveMaterialOwner(mesh);\n}\n\nfunction cloneProjectionSubMaterials(clone: any, source: any, ownerNodePath: string | null): void {\n if (!Array.isArray(clone?.subMaterials) || !Array.isArray(source?.subMaterials)) return;\n clone.subMaterials = source.subMaterials.map((subMaterial: any, index: number) => {\n if (!subMaterial || typeof subMaterial !== 'object') return subMaterial;\n if (typeof subMaterial.clone !== 'function') return subMaterial;\n const clonedSubMaterial = subMaterial.clone(createProjectionSlotSubMaterialName(subMaterial, ownerNodePath, index));\n return clonedSubMaterial ?? subMaterial;\n });\n}\n\nfunction createProjectionSlotMaterialName(material: any, ownerNodePath: string | null): string {\n const baseName = String(material?.name ?? material?.id ?? 'material');\n const suffix = ownerNodePath?.trim()\n ? ownerNodePath.replace(/[^a-zA-Z0-9_-]+/g, '_')\n : 'root';\n return `${baseName}.projectionSlot.${suffix}`;\n}\n\nfunction createProjectionSlotSubMaterialName(material: any, ownerNodePath: string | null, index: number): string {\n return `${createProjectionSlotMaterialName(material, ownerNodePath)}.sub${index}`;\n}\n\nfunction createFallbackProjectionMesh(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n node: BabylonEditorProjectionNode,\n rendererFallback: boolean,\n): any | null {\n const MeshBuilder = (babylon as any).MeshBuilder;\n const StandardMaterial = (babylon as any).StandardMaterial;\n const Color3 = requireBabylonCtor(babylon.Color3, 'Color3');\n if (!MeshBuilder || !StandardMaterial) return null;\n const mesh = MeshBuilder.CreateBox(`${node.id}.fallbackProjection`, {\n size: rendererFallback ? 1 : 0.24,\n }, scene);\n const material = new StandardMaterial(`${node.id}.projection.material`, scene);\n if (rendererFallback) {\n material.diffuseColor = new Color3(0.22, 0.55, 0.28);\n } else {\n material.diffuseColor = new Color3(0.5, 0.58, 0.68);\n material.alpha = 0.45;\n }\n material.specularColor = new Color3(0.08, 0.1, 0.12);\n mesh.material = material;\n applyProjectionRenderingToMesh(node, mesh);\n mesh.metadata = {\n ...(mesh.metadata ?? {}),\n editorProjection: {\n nodeId: node.id,\n fallback: true,\n ...createProjectionShadowMetadata(node),\n },\n };\n return mesh;\n}\n\nfunction applyProjectionRenderingToMesh(node: BabylonEditorProjectionNode, mesh: any): void {\n const rendering = node.rendering;\n if (!mesh || !rendering) return;\n if (isProjectionRenderingGroupId(rendering.renderingGroupId)) {\n mesh.renderingGroupId = rendering.renderingGroupId;\n }\n if (typeof rendering.alphaIndex === 'number' && Number.isFinite(rendering.alphaIndex)) {\n mesh.alphaIndex = rendering.alphaIndex;\n }\n}\n\nfunction isProjectionRenderingGroupId(value: unknown): value is 0 | 1 | 2 | 3 {\n return value === 0 || value === 1 || value === 2 || value === 3;\n}\n\nfunction createCameraFrustumLines(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n node: BabylonEditorProjectionNode,\n settings: BabylonEditorProjectionCameraSettings,\n): any | null {\n const MeshBuilder = (babylon as any).MeshBuilder;\n const Vector3 = requireBabylonCtor(babylon.Vector3, 'Vector3');\n const Color3 = requireBabylonCtor(babylon.Color3, 'Color3');\n if (!MeshBuilder?.CreateLineSystem) return null;\n const distance = Math.max(0.4, settings.radius * 0.12);\n const aspect = 16 / 9;\n const nearDistance = 0.18;\n let lines: any[];\n\n if (settings.projection === 'perspective') {\n const halfHeight = Math.max(0.12, Math.tan((settings.fov ?? 0.85) / 2) * distance);\n const halfWidth = halfHeight * aspect;\n const origin = new Vector3(0, 0, nearDistance);\n const topLeft = new Vector3(-halfWidth, halfHeight, -distance);\n const topRight = new Vector3(halfWidth, halfHeight, -distance);\n const bottomRight = new Vector3(halfWidth, -halfHeight, -distance);\n const bottomLeft = new Vector3(-halfWidth, -halfHeight, -distance);\n lines = [\n [topLeft, topRight, bottomRight, bottomLeft, topLeft],\n [origin, topLeft],\n [origin, topRight],\n [origin, bottomRight],\n [origin, bottomLeft],\n ];\n } else {\n const halfHeight = Math.max(0.12, settings.orthoSize * 0.08);\n const halfWidth = halfHeight * aspect;\n const nearTopLeft = new Vector3(-halfWidth, halfHeight, nearDistance);\n const nearTopRight = new Vector3(halfWidth, halfHeight, nearDistance);\n const nearBottomRight = new Vector3(halfWidth, -halfHeight, nearDistance);\n const nearBottomLeft = new Vector3(-halfWidth, -halfHeight, nearDistance);\n const farTopLeft = new Vector3(-halfWidth, halfHeight, -distance);\n const farTopRight = new Vector3(halfWidth, halfHeight, -distance);\n const farBottomRight = new Vector3(halfWidth, -halfHeight, -distance);\n const farBottomLeft = new Vector3(-halfWidth, -halfHeight, -distance);\n lines = [\n [nearTopLeft, nearTopRight, nearBottomRight, nearBottomLeft, nearTopLeft],\n [farTopLeft, farTopRight, farBottomRight, farBottomLeft, farTopLeft],\n [nearTopLeft, farTopLeft],\n [nearTopRight, farTopRight],\n [nearBottomRight, farBottomRight],\n [nearBottomLeft, farBottomLeft],\n ];\n }\n\n const frustum = MeshBuilder.CreateLineSystem(`${node.id}.cameraFrustum`, {\n lines,\n }, scene);\n frustum.color = new Color3(0.45, 0.68, 1);\n frustum.metadata = createProjectionMetadata(node.id, {\n runtimeKind: 'camera',\n helper: 'frustum',\n projection: settings.projection,\n orthoSize: settings.orthoSize,\n fov: settings.fov,\n });\n return frustum;\n}\n\nfunction createLightDirectionLines(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n node: BabylonEditorProjectionNode,\n direction: BabylonEditorProjectionVec3,\n): any | null {\n const MeshBuilder = (babylon as any).MeshBuilder;\n const Vector3 = requireBabylonCtor(babylon.Vector3, 'Vector3');\n const Color3 = requireBabylonCtor(babylon.Color3, 'Color3');\n if (!MeshBuilder?.CreateLineSystem) return null;\n const normalized = normalizeProjectionVec3(direction, { x: -0.3, y: -1, z: -0.2 });\n const shaftEnd = new Vector3(normalized.x, normalized.y, normalized.z);\n const arrowLeft = new Vector3(\n shaftEnd.x - normalized.x * 0.22 + normalized.z * 0.12,\n shaftEnd.y - normalized.y * 0.22,\n shaftEnd.z - normalized.z * 0.22 - normalized.x * 0.12,\n );\n const arrowRight = new Vector3(\n shaftEnd.x - normalized.x * 0.22 - normalized.z * 0.12,\n shaftEnd.y - normalized.y * 0.22,\n shaftEnd.z - normalized.z * 0.22 + normalized.x * 0.12,\n );\n const arrow = MeshBuilder.CreateLineSystem(`${node.id}.lightDirection`, {\n lines: [\n [new Vector3(0, 0, 0), shaftEnd],\n [shaftEnd, arrowLeft],\n [shaftEnd, arrowRight],\n ],\n }, scene);\n arrow.color = new Color3(1, 0.92, 0.42);\n arrow.metadata = createProjectionMetadata(node.id, {\n runtimeKind: 'light',\n helper: 'direction',\n });\n return arrow;\n}\n\nfunction attachHemisphericLightProjection(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n node: BabylonEditorProjectionNode,\n projection: ProjectedBabylonEditorNode,\n): void {\n const MeshBuilder = (babylon as any).MeshBuilder;\n const StandardMaterial = (babylon as any).StandardMaterial;\n const HemisphericLight = (babylon as any).HemisphericLight;\n const Vector3 = requireBabylonCtor(babylon.Vector3, 'Vector3');\n const Color3 = requireBabylonCtor(babylon.Color3, 'Color3');\n if (!MeshBuilder || !StandardMaterial) return;\n const settings = readProjectionHemisphericLightSettings(\n node.light?.type === 'hemispheric' ? node.light : undefined,\n );\n\n if (HemisphericLight) {\n const light = new HemisphericLight(`${node.id}.hemisphericLight`, new Vector3(0, 1, 0), scene);\n light.intensity = settings.intensity;\n light.diffuse = new Color3(\n settings.diffuseColor?.r ?? 1,\n settings.diffuseColor?.g ?? 1,\n settings.diffuseColor?.b ?? 1,\n );\n light.groundColor = new Color3(\n settings.groundColor?.r ?? 0.48,\n settings.groundColor?.g ?? 0.52,\n settings.groundColor?.b ?? 0.62,\n );\n light.metadata = createProjectionMetadata(node.id, { runtimeKind: 'light', lightType: 'hemispheric' });\n light.setEnabled?.(node.active !== false);\n projection.runtimeObjects.push(light);\n resyncProjectionSceneLightSources(scene);\n }\n\n if (!settings.helperVisible) return;\n\n const helper = MeshBuilder.CreateSphere?.(`${node.id}.hemisphericLightHelper`, {\n diameter: 0.32,\n segments: 18,\n }, scene) ?? MeshBuilder.CreateBox?.(`${node.id}.hemisphericLightHelper`, {\n size: 0.28,\n }, scene);\n if (!helper) return;\n helper.parent = projection.root;\n helper.metadata = createProjectionMetadata(node.id, {\n runtimeKind: 'light',\n lightType: 'hemispheric',\n helper: 'body',\n });\n const material = new StandardMaterial(`${node.id}.hemisphericLightHelper.material`, scene);\n material.diffuseColor = new Color3(0.72, 0.82, 1);\n material.emissiveColor = new Color3(0.16, 0.28, 0.48);\n material.specularColor = new Color3(0.08, 0.1, 0.12);\n helper.material = material;\n projection.runtimeObjects.push(material);\n projection.outlineMeshes = [helper];\n}\n\nfunction syncRuntimeLightProjection(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n node: BabylonEditorProjectionNode,\n projection: ProjectedBabylonEditorNode,\n): boolean {\n if (node.light?.type === 'hemispheric') {\n return syncRuntimeHemisphericLightProjection(babylon, scene, node, projection);\n }\n return syncRuntimeDirectionalLightProjection(babylon, scene, node, projection);\n}\n\nfunction syncRuntimeDirectionalLightProjection(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n node: BabylonEditorProjectionNode,\n projection: ProjectedBabylonEditorNode,\n): boolean {\n const settings = readProjectionDirectionalLightSettings(\n node.light?.type === 'directional' ? node.light : undefined,\n );\n const light = findProjectionRuntimeLight(projection, node.id, 'directional');\n if (!light) return false;\n const hasHelper = !!(scene as any).getMeshByName?.(`${node.id}.lightHelper`);\n if (settings.helperVisible !== hasHelper) return false;\n\n const Vector3 = requireBabylonCtor(babylon.Vector3, 'Vector3');\n const Color3 = requireBabylonCtor(babylon.Color3, 'Color3');\n copyOrAssignBabylonVec3(light, 'direction', new Vector3(\n settings.direction.x,\n settings.direction.y,\n settings.direction.z,\n ));\n light.intensity = settings.intensity;\n copyOrAssignBabylonColor(light, 'diffuse', new Color3(\n settings.diffuseColor?.r ?? 1,\n settings.diffuseColor?.g ?? 1,\n settings.diffuseColor?.b ?? 1,\n ));\n light.setEnabled?.(node.active !== false);\n resyncProjectionSceneLightSources(scene);\n if (settings.helperVisible) refreshLightDirectionLines(babylon, scene, node, projection, settings.direction);\n return true;\n}\n\nfunction syncRuntimeHemisphericLightProjection(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n node: BabylonEditorProjectionNode,\n projection: ProjectedBabylonEditorNode,\n): boolean {\n const settings = readProjectionHemisphericLightSettings(\n node.light?.type === 'hemispheric' ? node.light : undefined,\n );\n const light = findProjectionRuntimeLight(projection, node.id, 'hemispheric');\n if (!light) return false;\n const hasHelper = !!(scene as any).getMeshByName?.(`${node.id}.hemisphericLightHelper`);\n if (settings.helperVisible !== hasHelper) return false;\n\n const Color3 = requireBabylonCtor(babylon.Color3, 'Color3');\n light.intensity = settings.intensity;\n copyOrAssignBabylonColor(light, 'diffuse', new Color3(\n settings.diffuseColor?.r ?? 1,\n settings.diffuseColor?.g ?? 1,\n settings.diffuseColor?.b ?? 1,\n ));\n copyOrAssignBabylonColor(light, 'groundColor', new Color3(\n settings.groundColor?.r ?? 0.48,\n settings.groundColor?.g ?? 0.52,\n settings.groundColor?.b ?? 0.62,\n ));\n light.setEnabled?.(node.active !== false);\n resyncProjectionSceneLightSources(scene);\n return true;\n}\n\nfunction findProjectionRuntimeLight(\n projection: ProjectedBabylonEditorNode,\n nodeId: string,\n lightType: 'directional' | 'hemispheric',\n): any | null {\n return projection.runtimeObjects.find(runtimeObject => {\n const metadata = runtimeObject?.metadata?.editorProjection;\n return metadata?.nodeId === nodeId\n && metadata?.runtimeKind === 'light'\n && metadata?.lightType === lightType;\n }) ?? null;\n}\n\nfunction isProjectionRuntimeLightObject(runtimeObject: any): boolean {\n const metadata = runtimeObject?.metadata?.editorProjection;\n return metadata?.runtimeKind === 'light'\n && (metadata?.lightType === 'directional' || metadata?.lightType === 'hemispheric');\n}\n\nfunction resyncProjectionSceneLightSources(scene: RuntimeScene): void {\n const meshes = Array.isArray((scene as any).meshes) ? (scene as any).meshes : [];\n resyncProjectionMeshLightSources(scene, meshes);\n}\n\ninterface ProjectionMeshLightSourceSyncSummary {\n importedMeshCount: number;\n instancedMeshCount: number;\n lightSourceOwnerCount: number;\n activeSceneLightCount: number;\n resolvedLightSourceOwnerCount: number;\n}\n\nfunction resyncProjectionMeshLightSources(\n scene: RuntimeScene,\n meshes: readonly any[],\n): ProjectionMeshLightSourceSyncSummary {\n const lightSourceOwners = new Set<any>();\n const sourceMeshes = new Set<any>();\n const instancedMeshes = new Set<any>();\n for (const mesh of meshes) {\n if (!mesh || typeof mesh !== 'object') continue;\n const sourceMesh = mesh.sourceMesh;\n if (sourceMesh && sourceMesh !== mesh) {\n sourceMeshes.add(sourceMesh);\n instancedMeshes.add(mesh);\n } else {\n lightSourceOwners.add(mesh);\n }\n }\n for (const sourceMesh of sourceMeshes) {\n if (sourceMesh?.isDisposed?.()) continue;\n lightSourceOwners.add(sourceMesh);\n }\n for (const lightSourceOwner of lightSourceOwners) {\n if (lightSourceOwner?.isDisposed?.()) continue;\n lightSourceOwner?._resyncLightSources?.();\n }\n for (const instancedMesh of instancedMeshes) {\n if (instancedMesh?.isDisposed?.()) continue;\n instancedMesh?._markSubMeshesAsLightDirty?.();\n }\n (scene as any).resetCachedMaterial?.();\n\n const activeSceneLights = (Array.isArray((scene as any).lights) ? (scene as any).lights : [])\n .filter((light: any) => light?.isEnabled?.() !== false);\n const resolvedLightSourceOwnerCount = [...lightSourceOwners].filter(owner => {\n if (owner?.isDisposed?.()) return false;\n const lightSources = owner?.lightSources ?? owner?._lightSources;\n return Array.isArray(lightSources) && lightSources.length > 0;\n }).length;\n return {\n importedMeshCount: meshes.length,\n instancedMeshCount: instancedMeshes.size,\n lightSourceOwnerCount: lightSourceOwners.size,\n activeSceneLightCount: activeSceneLights.length,\n resolvedLightSourceOwnerCount,\n };\n}\n\nfunction refreshLightDirectionLines(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n node: BabylonEditorProjectionNode,\n projection: ProjectedBabylonEditorNode,\n direction: BabylonEditorProjectionVec3,\n): void {\n const existing = (scene as any).getMeshByName?.(`${node.id}.lightDirection`);\n existing?.dispose?.();\n const arrow = createLightDirectionLines(babylon, scene, node, direction);\n if (!arrow) return;\n arrow.parent = projection.root;\n arrow.isPickable = false;\n}\n\nfunction copyOrAssignBabylonVec3(target: any, key: string, value: any): void {\n if (target?.[key]?.copyFrom) {\n target[key].copyFrom(value);\n return;\n }\n target[key] = value;\n}\n\nfunction copyOrAssignBabylonColor(target: any, key: string, value: any): void {\n if (target?.[key]?.copyFrom) {\n target[key].copyFrom(value);\n return;\n }\n target[key] = value;\n}\n\nexport function normalizeBabylonEditorProjectionCameraSettings(\n settings: BabylonEditorProjectionCameraSettings | undefined,\n): BabylonEditorProjectionCameraSettings {\n const targetOffset = readOptionalProjectionVec3(settings?.targetOffset);\n const targetScreenOffset = readOptionalProjectionVec2(settings?.targetScreenOffset);\n return {\n projection: readProjectionCameraMode(settings?.projection),\n alpha: readFiniteNumber(settings?.alpha, 3.9269908169872414),\n beta: readFiniteNumber(settings?.beta, 0.8),\n radius: Math.max(0.001, readFiniteNumber(settings?.radius, 14)),\n orthoSize: Math.max(0.001, readFiniteNumber(settings?.orthoSize, 6)),\n fov: Math.max(0.001, readFiniteNumber(settings?.fov, 0.85)),\n ...(targetOffset ? { targetOffset } : {}),\n minZ: Math.max(0.001, readFiniteNumber(settings?.minZ, 1)),\n maxZ: Math.max(0.001, readFiniteNumber(settings?.maxZ, 10000)),\n lowerBetaLimit: readFiniteNumber(settings?.lowerBetaLimit, settings?.beta ?? 0.8),\n upperBetaLimit: readFiniteNumber(settings?.upperBetaLimit, settings?.beta ?? 0.8),\n lowerRadiusLimit: Math.max(0.001, readFiniteNumber(settings?.lowerRadiusLimit, settings?.radius ?? 14)),\n upperRadiusLimit: Math.max(0.001, readFiniteNumber(settings?.upperRadiusLimit, settings?.radius ?? 14)),\n inertia: clampUnit(readFiniteNumber(settings?.inertia, 0.9)),\n ...(targetScreenOffset ? { targetScreenOffset } : {}),\n };\n}\n\nexport function applyBabylonEditorProjectionCameraRig(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n camera: RuntimeCamera,\n settings: BabylonEditorProjectionCameraSettings | undefined,\n options: BabylonEditorProjectionCameraRigApplyOptions = {},\n): BabylonEditorProjectionCameraSettings {\n const normalized = normalizeBabylonEditorProjectionCameraSettings(settings);\n const Vector3 = babylon.Vector3;\n const Vector2 = (babylon as any).Vector2;\n const targetInput = options.target ?? normalized.targetOffset ?? null;\n const target = targetInput && Vector3\n ? new Vector3(targetInput.x, targetInput.y, targetInput.z)\n : null;\n\n camera.minZ = normalized.minZ ?? 1;\n camera.maxZ = Math.max(camera.minZ + 0.001, normalized.maxZ ?? 10000);\n camera.inertia = normalized.inertia ?? camera.inertia;\n if (normalized.targetScreenOffset) {\n camera.targetScreenOffset = Vector2\n ? new Vector2(normalized.targetScreenOffset.x, normalized.targetScreenOffset.y)\n : { ...normalized.targetScreenOffset };\n }\n\n if (typeof camera.alpha === 'number') {\n clearBabylonArcRotateCameraOrbitLimits(camera);\n if (target) camera.target = target;\n camera.alpha = normalized.alpha;\n camera.beta = normalized.beta;\n camera.radius = normalized.radius;\n if (options.lockOrbit !== false) {\n camera.lowerAlphaLimit = normalized.alpha;\n camera.upperAlphaLimit = normalized.alpha;\n camera.lowerBetaLimit = normalized.lowerBetaLimit ?? normalized.beta;\n camera.upperBetaLimit = normalized.upperBetaLimit ?? normalized.beta;\n camera.lowerRadiusLimit = normalized.lowerRadiusLimit ?? normalized.radius;\n camera.upperRadiusLimit = normalized.upperRadiusLimit ?? normalized.radius;\n }\n } else if (target) {\n camera.setTarget?.(target);\n }\n\n if (normalized.projection === 'perspective') {\n camera.mode = babylon.Camera?.PERSPECTIVE_CAMERA ?? camera.mode ?? 0;\n camera.fov = normalized.fov ?? 0.85;\n return normalized;\n }\n\n camera.mode = babylon.Camera?.ORTHOGRAPHIC_CAMERA ?? camera.mode ?? 1;\n const aspect = readProjectionSceneAspect(scene);\n const halfHeight = normalized.orthoSize;\n const halfWidth = halfHeight * aspect;\n camera.orthoLeft = -halfWidth;\n camera.orthoRight = halfWidth;\n camera.orthoTop = halfHeight;\n camera.orthoBottom = -halfHeight;\n return normalized;\n}\n\nfunction clearBabylonArcRotateCameraOrbitLimits(camera: RuntimeCamera): void {\n camera.lowerAlphaLimit = null;\n camera.upperAlphaLimit = null;\n camera.lowerBetaLimit = null;\n camera.upperBetaLimit = null;\n camera.lowerRadiusLimit = null;\n camera.upperRadiusLimit = null;\n}\n\nfunction readProjectionCameraMode(value: unknown): BabylonEditorProjectionCameraMode {\n return value === 'perspective' ? 'perspective' : 'orthographic';\n}\n\nfunction readProjectionSceneAspect(scene: RuntimeScene): number {\n const engine = scene.getEngine?.();\n const width = Number(engine?.getRenderWidth?.() ?? engine?.getRenderingCanvas?.()?.width ?? 1);\n const height = Number(engine?.getRenderHeight?.() ?? engine?.getRenderingCanvas?.()?.height ?? 1);\n if (!Number.isFinite(width) || !Number.isFinite(height) || height <= 0) return 16 / 9;\n return Math.max(0.01, width / height);\n}\n\nfunction readOptionalProjectionVec2(value: unknown): BabylonEditorProjectionVec2 | null {\n if (!value || typeof value !== 'object') return null;\n const candidate = value as Partial<BabylonEditorProjectionVec2>;\n if (!Number.isFinite(candidate.x) || !Number.isFinite(candidate.y)) return null;\n return {\n x: Number(candidate.x),\n y: Number(candidate.y),\n };\n}\n\nfunction readOptionalProjectionVec3(value: unknown): BabylonEditorProjectionVec3 | null {\n if (!value || typeof value !== 'object') return null;\n const candidate = value as Partial<BabylonEditorProjectionVec3>;\n if (!Number.isFinite(candidate.x) || !Number.isFinite(candidate.y) || !Number.isFinite(candidate.z)) return null;\n return {\n x: Number(candidate.x),\n y: Number(candidate.y),\n z: Number(candidate.z),\n };\n}\n\nfunction clampUnit(value: number): number {\n if (!Number.isFinite(value)) return 0;\n return Math.min(1, Math.max(0, value));\n}\n\nfunction readProjectionDirectionalLightSettings(\n settings: BabylonEditorProjectionDirectionalLightSettings | undefined,\n): BabylonEditorProjectionDirectionalLightSettings {\n return {\n type: 'directional',\n intensity: Math.max(0, readFiniteNumber(settings?.intensity, 2)),\n direction: readVector3(settings?.direction, { x: -0.3, y: -1, z: -0.2 }),\n diffuseColor: readProjectionColor(settings?.diffuseColor, { r: 1, g: 1, b: 1 }),\n helperVisible: settings?.helperVisible !== false,\n };\n}\n\nfunction readProjectionHemisphericLightSettings(\n settings: BabylonEditorProjectionHemisphericLightSettings | undefined,\n): BabylonEditorProjectionHemisphericLightSettings {\n return {\n type: 'hemispheric',\n intensity: Math.max(0, readFiniteNumber(settings?.intensity, 0.8)),\n diffuseColor: readProjectionColor(settings?.diffuseColor, { r: 1, g: 1, b: 1 }),\n groundColor: readProjectionColor(settings?.groundColor, { r: 0.48, g: 0.52, b: 0.62 }),\n helperVisible: settings?.helperVisible !== false,\n };\n}\n\nfunction readProjectionColor(\n value: BabylonEditorProjectionColorRGB | undefined,\n fallback: BabylonEditorProjectionColorRGB,\n): BabylonEditorProjectionColorRGB {\n return {\n r: readFiniteNumber(value?.r, fallback.r),\n g: readFiniteNumber(value?.g, fallback.g),\n b: readFiniteNumber(value?.b, fallback.b),\n };\n}\n\nfunction readFiniteNumber(value: unknown, fallback: number): number {\n return typeof value === 'number' && Number.isFinite(value) ? value : fallback;\n}\n\nfunction normalizeProjectionVec3(\n value: BabylonEditorProjectionVec3,\n fallback: BabylonEditorProjectionVec3,\n): BabylonEditorProjectionVec3 {\n const length = Math.hypot(value.x, value.y, value.z);\n if (!Number.isFinite(length) || length <= 0.000001) return normalizeProjectionVec3(fallback, { x: 0, y: -1, z: 0 });\n return {\n x: value.x / length,\n y: value.y / length,\n z: value.z / length,\n };\n}\n\nfunction createProjectionMetadata(\n nodeId: string,\n extra: Record<string, unknown> = {},\n): Record<string, unknown> {\n const disableGeneratedShadow = extra.runtimeKind === 'camera'\n || extra.runtimeKind === 'light'\n || extra.helper != null;\n return {\n ...(disableGeneratedShadow ? {\n disablePlanarShadow: true,\n disableBlobShadow: true,\n disableStaticProjectedShadow: true,\n } : {}),\n editorProjection: {\n nodeId,\n ...extra,\n },\n };\n}\n\nfunction createProjectionShadowMetadata(node: BabylonEditorProjectionNode): Record<string, unknown> {\n return {\n ...(node.shadow ? { shadow: structuredClone(node.shadow) } : {}),\n ...(node.shadowPlan ? { shadowPlan: structuredClone(node.shadowPlan) } : {}),\n };\n}\n\nfunction syncProjectionNodeMetadata(\n projection: ProjectedBabylonEditorNode,\n node: BabylonEditorProjectionNode,\n): void {\n walkProjectionRuntimeNodes(projection.root, (runtimeNode) => {\n syncProjectionRuntimeNodeMetadata(runtimeNode, node);\n });\n}\n\nfunction walkProjectionRuntimeNodes(node: any, visit: (node: any) => void): void {\n if (!node) return;\n visit(node);\n const children = typeof node.getChildren === 'function' ? node.getChildren() : [];\n if (!Array.isArray(children)) return;\n for (const child of children) {\n walkProjectionRuntimeNodes(child, visit);\n }\n}\n\nfunction syncProjectionRuntimeNodeMetadata(\n runtimeNode: any,\n node: BabylonEditorProjectionNode,\n): void {\n const metadata = readProjectionObject(runtimeNode.metadata);\n const editorProjection = readProjectionObject(metadata?.editorProjection);\n if (!editorProjection) return;\n if (editorProjection.nodeId !== node.id && editorProjection.rootNodeId !== node.id) return;\n const nextEditorProjection = { ...editorProjection };\n if (node.shadow) nextEditorProjection.shadow = structuredClone(node.shadow);\n else delete nextEditorProjection.shadow;\n if (node.shadowPlan) nextEditorProjection.shadowPlan = structuredClone(node.shadowPlan);\n else delete nextEditorProjection.shadowPlan;\n runtimeNode.metadata = {\n ...(metadata ?? {}),\n editorProjection: nextEditorProjection,\n };\n}\n\nfunction readProjectionObject(value: unknown): Record<string, unknown> | null {\n return value && typeof value === 'object' && !Array.isArray(value)\n ? value as Record<string, unknown>\n : null;\n}\n\nexport function applyProjectionTransform(\n babylon: BabylonRuntimeGlobal,\n node: any,\n transform: BabylonEditorProjectionTransform,\n): void {\n const Vector3 = requireBabylonCtor(babylon.Vector3, 'Vector3');\n if (isEditorTransformMatrixSnapshot(transform)) {\n const Matrix = requireBabylonCtor(babylon.Matrix, 'Matrix');\n if (typeof Matrix.FromArray !== 'function' || typeof node?.setPreTransformMatrix !== 'function') {\n throw new Error('Babylon runtime missing matrix transform support.');\n }\n node.position = new Vector3(0, 0, 0);\n node.rotationQuaternion = null;\n node.rotation = new Vector3(0, 0, 0);\n node.scaling = new Vector3(1, 1, 1);\n node.setPreTransformMatrix(Matrix.FromArray(transform.matrix));\n writeProjectionLocalMatrixTransform(node, transform.matrix);\n return;\n }\n clearProjectionLocalMatrixTransform(babylon, node);\n node.position = new Vector3(transform.position.x, transform.position.y, transform.position.z);\n node.rotationQuaternion = null;\n node.rotation = new Vector3(transform.rotation.x, transform.rotation.y, transform.rotation.z);\n const scale = transform.scale ?? { x: 1, y: 1, z: 1 };\n node.scaling = new Vector3(scale.x, scale.y, scale.z);\n}\n\nfunction applyProjectionWorldTransform(\n babylon: BabylonRuntimeGlobal,\n node: any,\n transform: EditorTransformSnapshot,\n): boolean {\n const parent = node?.parent ?? null;\n const local = parent\n ? toEditorLocalTransformFromWorld(readProjectionWorldTransform(parent), transform, { allowMatrixFallback: true })\n : transform;\n if (!local) return false;\n applyProjectionTransform(babylon, node, local);\n return true;\n}\n\nfunction cloneProjectionTransformSnapshot(transform: EditorTransformSnapshot): EditorTransformSnapshot {\n return isEditorTransformMatrixSnapshot(transform)\n ? { mode: 'matrix', matrix: cloneEditorTransformMatrix(transform.matrix) }\n : {\n position: { ...transform.position },\n rotation: { ...transform.rotation },\n scale: { ...transform.scale },\n };\n}\n\nfunction writeProjectionLocalMatrixTransform(node: any, matrix: EditorTransformMatrix): void {\n node.metadata = {\n ...(readProjectionObject(node?.metadata) ?? {}),\n [PROJECTION_LOCAL_MATRIX_METADATA_KEY]: cloneEditorTransformMatrix(matrix),\n };\n}\n\nfunction clearProjectionLocalMatrixTransform(babylon: BabylonRuntimeGlobal, node: any): void {\n if (typeof node?.setPreTransformMatrix === 'function') {\n const Matrix = babylon.Matrix;\n if (typeof Matrix?.FromArray === 'function') {\n node.setPreTransformMatrix(Matrix.FromArray(createIdentityEditorTransformMatrix()));\n }\n }\n const metadata = readProjectionObject(node?.metadata);\n if (!metadata || !(PROJECTION_LOCAL_MATRIX_METADATA_KEY in metadata)) return;\n const nextMetadata = { ...metadata };\n delete nextMetadata[PROJECTION_LOCAL_MATRIX_METADATA_KEY];\n node.metadata = nextMetadata;\n}\n\nfunction applyAssetDefaultsTransform(\n babylon: BabylonRuntimeGlobal,\n node: any,\n transform: BabylonEditorProjectionAssetTransform | undefined,\n): void {\n if (!transform) return;\n const Vector3 = requireBabylonCtor(babylon.Vector3, 'Vector3');\n node.position = new Vector3(\n transform.position?.x ?? 0,\n transform.position?.y ?? 0,\n transform.position?.z ?? 0,\n );\n if (transform.rotationDeg) {\n node.rotation = new Vector3(\n (transform.rotationDeg.x * Math.PI) / 180,\n (transform.rotationDeg.y * Math.PI) / 180,\n (transform.rotationDeg.z * Math.PI) / 180,\n );\n } else {\n node.rotation = new Vector3(\n transform.rotation?.x ?? 0,\n transform.rotation?.y ?? 0,\n transform.rotation?.z ?? 0,\n );\n }\n if (typeof transform.scale === 'number') {\n node.scaling = new Vector3(transform.scale, transform.scale, transform.scale);\n } else {\n node.scaling = new Vector3(\n transform.scale?.x ?? 1,\n transform.scale?.y ?? 1,\n transform.scale?.z ?? 1,\n );\n }\n}\n\nfunction getProjectionNodeIdsInScreenRect(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n projections: Map<string, ProjectedBabylonEditorNode>,\n rect: BabylonEditorProjectionScreenRect,\n): string[] {\n const canvas = scene.getEngine?.().getRenderingCanvas?.() as HTMLCanvasElement | null | undefined;\n const camera = scene.activeCamera ?? (scene as any).cameraToUseForPointers ?? null;\n const Vector3 = babylon.Vector3 as any;\n const Matrix = (babylon as any).Matrix;\n if (!canvas || !camera || !Vector3?.Project || !Matrix?.Identity) return [];\n const canvasRect = canvas.getBoundingClientRect();\n const viewport = camera.viewport?.toGlobal?.(\n scene.getEngine?.().getRenderWidth?.() ?? canvas.width,\n scene.getEngine?.().getRenderHeight?.() ?? canvas.height,\n );\n const transformMatrix = scene.getTransformMatrix?.();\n const worldMatrix = Matrix.Identity();\n if (!viewport || !transformMatrix || !worldMatrix) return [];\n const selectedIds: string[] = [];\n for (const [nodeId, projection] of projections) {\n const bounds = projection.root?.getHierarchyBoundingVectors?.();\n if (!bounds?.min || !bounds?.max) continue;\n const corners = createBoundsCorners(Vector3, bounds.min, bounds.max);\n const projected = corners\n .map((corner: any) => Vector3.Project(corner, worldMatrix, transformMatrix, viewport))\n .map((point: any) => ({\n x: canvasRect.left + point.x,\n y: canvasRect.top + point.y,\n }));\n if (projected.length === 0) continue;\n const minX = Math.min(...projected.map(point => point.x));\n const maxX = Math.max(...projected.map(point => point.x));\n const minY = Math.min(...projected.map(point => point.y));\n const maxY = Math.max(...projected.map(point => point.y));\n if (rectsIntersect(rect, { left: minX, top: minY, right: maxX, bottom: maxY })) {\n selectedIds.push(nodeId);\n }\n }\n return selectedIds;\n}\n\nfunction createBoundsCorners(Vector3: any, min: any, max: any): any[] {\n return [\n new Vector3(min.x, min.y, min.z),\n new Vector3(min.x, min.y, max.z),\n new Vector3(min.x, max.y, min.z),\n new Vector3(min.x, max.y, max.z),\n new Vector3(max.x, min.y, min.z),\n new Vector3(max.x, min.y, max.z),\n new Vector3(max.x, max.y, min.z),\n new Vector3(max.x, max.y, max.z),\n ];\n}\n\nfunction rectsIntersect(\n left: BabylonEditorProjectionScreenRect,\n right: BabylonEditorProjectionScreenRect,\n): boolean {\n return left.left <= right.right\n && left.right >= right.left\n && left.top <= right.bottom\n && left.bottom >= right.top;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"projection.js","sourceRoot":"","sources":["../src/projection.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,0BAA0B,EAC1B,uBAAuB,EACvB,mCAAmC,EACnC,mCAAmC,EACnC,+BAA+B,EAC/B,2BAA2B,EAC3B,+BAA+B,GAChC,MAAM,wBAAwB,CAAC;AAQhC,OAAO,EACL,0BAA0B,EAC1B,qCAAqC,EACrC,oCAAoC,GAGrC,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,wCAAwC,EACxC,oBAAoB,GAKrB,MAAM,+BAA+B,CAAC;AAMvC,OAAO,EAAE,2CAA2C,EAAE,MAAM,6BAA6B,CAAC;AAC1F,OAAO,EACL,6BAA6B,EAC7B,iCAAiC,EACjC,8BAA8B,GAC/B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,gCAAgC,EAChC,+BAA+B,GAChC,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,mCAAmC,EACnC,4BAA4B,GAC7B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,0CAA0C,GAC3C,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACL,kDAAkD,GAInD,MAAM,qCAAqC,CAAC;AAQ7C,MAAM,oCAAoC,GAAG,4BAA4B,CAAC;AAC1E,MAAM,+BAA+B,GAAG,KAAK,CAAC;AA8Z9C,MAAM,8BAA8B,GAAG,eAAe,CAAC;AAEvD,SAAS,kBAAkB,CAAI,KAAoB,EAAE,IAAY;IAC/D,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,IAAI,EAAE,CAAC,CAAC;IAC/D,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,6BAA6B,CAC3C,OAAuC;IAEvC,MAAM,WAAW,GAAG,IAAI,GAAG,EAAsC,CAAC;IAClE,MAAM,eAAe,GAAG,IAAI,GAAG,EAAuC,CAAC;IACvE,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAyB,CAAC;IAC7D,MAAM,wBAAwB,GAAG,IAAI,GAAG,EAAmB,CAAC;IAC5D,MAAM,0BAA0B,GAAG,IAAI,GAAG,EAAmB,CAAC;IAC9D,MAAM,yBAAyB,GAAU,EAAE,CAAC;IAC5C,MAAM,qBAAqB,GAAG,OAAO,CAAC,+BAA+B;WAChE,kDAAkD,CAAC;YACpD,OAAO,EAAE,OAAO,CAAC,OAAqD;YACtE,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,OAAO,EAAE,OAAO,CAAC,qBAAqB,KAAK,SAAS;SACrD,CAAC,CAAC;IACL,MAAM,aAAa,GAAG,IAAI,GAAG,EAAgC,CAAC;IAC9D,MAAM,WAAW,GAAG,IAAI,GAAG,EAAqD,CAAC;IACjF,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,oBAAoB,GAAG,CAAC,CAAC;IAC7B,IAAI,SAAS,GAAwC,IAAI,CAAC;IAC1D,IAAI,4BAA4B,GAAG,CAAC,CAAC;IAErC,MAAM,WAAW,GAAG,CAAC,OAAiB,EAAgC,EAAE;QACtE,IAAI,cAAqE,CAAC;QAC1E,MAAM,OAAO,GAAG,IAAI,OAAO,CAAqC,OAAO,CAAC,EAAE;YACxE,cAAc,GAAG,OAAO,CAAC;QAC3B,CAAC,CAAC,CAAC;QACH,MAAM,KAAK,GAAiC;YAC1C,EAAE,EAAE,WAAW;YACf,UAAU,EAAE,oBAAoB;YAChC,OAAO;YACP,YAAY,EAAE,EAAE;YAChB,cAAc,EAAE,IAAI,GAAG,EAAE;YACzB,cAAc,EAAE,IAAI,GAAG,EAAE;YACzB,eAAe,EAAE,KAAK;YACtB,KAAK,EAAE,SAAS;YAChB,MAAM,EAAE,IAAqD;YAC7D,cAAc;SACf,CAAC;QACF,KAAK,CAAC,MAAM,GAAG;YACb,OAAO,EAAE,KAAK,CAAC,EAAE;YACjB,OAAO,EAAE,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC;YAC3B,SAAS,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,KAAK,CAAC;YACzC,OAAO;SACR,CAAC;QACF,WAAW,IAAI,CAAC,CAAC;QACjB,SAAS,GAAG,KAAK,CAAC;QAClB,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACzB,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IAEF,MAAM,iBAAiB,GAAG,CACxB,KAAmC,EACC,EAAE,CAAC,CAAC;QACxC,OAAO,EAAE,KAAK,CAAC,EAAE;QACjB,OAAO,EAAE,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC;QAC3B,YAAY,EAAE,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC;QACrC,cAAc,EAAE,CAAC,GAAG,KAAK,CAAC,cAAc,CAAC;QACzC,cAAc,EAAE,CAAC,GAAG,KAAK,CAAC,cAAc,CAAC;QACzC,KAAK,EAAE,KAAK,CAAC,KAAK;KACnB,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,GAAqC,EAAE,CAAC,CAAC;QAC5D,IAAI,EAAE,aAAa,CAAC,IAAI,KAAK,CAAC;QAC9B,cAAc,EAAE,CAAC,GAAG,aAAa,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;QACzD,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI;KAC3D,CAAC,CAAC;IAEH,MAAM,yBAAyB,GAAG,GAAS,EAAE;QAC3C,IAAI,4BAA4B,GAAG,CAAC,IAAI,aAAa,CAAC,IAAI,GAAG,CAAC,IAAI,WAAW,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO;QACjG,MAAM,KAAK,GAAG,YAAY,EAAE,CAAC;QAC7B,KAAK,MAAM,OAAO,IAAI,WAAW;YAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QAClD,WAAW,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,CACpB,KAAmC,EACnC,KAA4D,EACxB,EAAE;QACtC,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;YAAE,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAC/D,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;QACpB,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACxC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5B,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAC7B,yBAAyB,EAAE,CAAC;QAC5B,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;IAEF,MAAM,sBAAsB,GAAG,GAAS,EAAE;QACxC,KAAK,MAAM,KAAK,IAAI,CAAC,GAAG,aAAa,CAAC,EAAE,CAAC;YACvC,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAChC,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,oBAAoB,GAAG,CAAC,KAAmC,EAAQ,EAAE;QACzE,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,cAAc,CAAC,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,eAAe;YAAE,OAAO;QAChG,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC;QAC7B,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;YAC/B,KAAK,CAAC,eAAe,GAAG,KAAK,CAAC;YAC9B,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,cAAc,CAAC,IAAI,GAAG,CAAC;gBAAE,OAAO;YACvE,IAAI,KAAK,CAAC,UAAU,KAAK,oBAAoB,EAAE,CAAC;gBAC9C,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;gBAC9B,OAAO;YACT,CAAC;YACD,OAAO,CAAC,wBAAwB,EAAE,CAAC;gBACjC,OAAO,EAAE,KAAK,CAAC,EAAE;gBACjB,OAAO,EAAE,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC;gBAC3B,YAAY,EAAE,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC;gBACrC,cAAc,EAAE,CAAC,GAAG,KAAK,CAAC,cAAc,CAAC;aAC1C,CAAC,CAAC;YACH,aAAa,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,oBAAoB,GAAG,CAC3B,KAAmC,EACnC,IAAiC,EACjC,UAAsC,EACvB,EAAE;QACjB,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClC,OAAO,mBAAmB,CACxB,OAAO,EACP,IAAI,EACJ,UAAU,EACV,GAAG,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI,CAC3C,CAAC,OAAO,CAAC,GAAG,EAAE;YACb,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACrC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAClC,IAAI,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,UAAU,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,EAAE,CAAC;gBAC/E,OAAO,UAAU,CAAC,WAAW,CAAC;gBAC9B,gCAAgC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAC1C,sBAAsB,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE,UAAU,CAAC,CAAC;gBACzE,qBAAqB,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;gBACtD,OAAO,CAAC,iBAAiB,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAChE,CAAC;YACD,oBAAoB,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,oBAAoB,GAAG,CAAC,UAAsC,EAAQ,EAAE;QAC5E,qBAAqB,CAAC,mBAAmB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAC7D,UAAU,CAAC,eAAe,GAAG,IAAI,CAAC;QAClC,KAAK,MAAM,cAAc,IAAI,UAAU,CAAC,eAAe,EAAE,CAAC;YACxD,cAAc,CAAC,OAAO,EAAE,EAAE,CAAC;QAC7B,CAAC;QACD,IAAI,oBAAoB,GAAG,KAAK,CAAC;QACjC,KAAK,MAAM,aAAa,IAAI,UAAU,CAAC,cAAc,EAAE,CAAC;YACtD,oBAAoB,GAAG,oBAAoB,IAAI,8BAA8B,CAAC,aAAa,CAAC,CAAC;YAC7F,aAAa,CAAC,OAAO,EAAE,EAAE,CAAC;QAC5B,CAAC;QACD,IAAI,oBAAoB;YAAE,iCAAiC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC3E,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC;IAC/B,CAAC,CAAC;IAEF,MAAM,UAAU,GAAG,GAAS,EAAE;QAC5B,sBAAsB,EAAE,CAAC;QACzB,oBAAoB,IAAI,CAAC,CAAC;QAC1B,8BAA8B,EAAE,CAAC;QACjC,KAAK,MAAM,UAAU,IAAI,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC;YAC9C,oBAAoB,CAAC,UAAU,CAAC,CAAC;QACnC,CAAC;QACD,WAAW,CAAC,KAAK,EAAE,CAAC;QACpB,eAAe,CAAC,KAAK,EAAE,CAAC;QACxB,mBAAmB,CAAC,KAAK,EAAE,CAAC;QAC5B,wBAAwB,CAAC,KAAK,EAAE,CAAC;QACjC,0BAA0B,CAAC,KAAK,EAAE,CAAC;IACrC,CAAC,CAAC;IAEF,MAAM,4BAA4B,GAAG,CACnC,MAAc,EACd,OAAgB,EAC+B,EAAE;QACjD,MAAM,cAAc,GAAG,wBAAwB,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,KAAK,CAAC;QACtE,OAAO;YACL,MAAM;YACN,OAAO;YACP,cAAc;YACd,gBAAgB,EAAE,cAAc,IAAI,OAAO,KAAK,KAAK;SACtD,CAAC;IACJ,CAAC,CAAC;IAEF,MAAM,gCAAgC,GAAG,CAAC,MAAc,EAAQ,EAAE;QAChE,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC3C,IAAI,CAAC,UAAU;YAAE,OAAO;QACxB,MAAM,cAAc,GAAG,wBAAwB,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,KAAK,CAAC;QACtE,MAAM,QAAQ,GAAG,0BAA0B,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACxD,MAAM,gBAAgB,GAAG,cAAc,IAAI,QAAQ,KAAK,KAAK,CAAC;QAC9D,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,CAAC,gBAAgB,CAAC,CAAC;QAChD,KAAK,MAAM,aAAa,IAAI,UAAU,CAAC,cAAc,EAAE,CAAC;YACtD,aAAa,CAAC,UAAU,EAAE,CAAC,gBAAgB,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,8BAA8B,GAAG,GAAY,EAAE;QACnD,MAAM,UAAU,GAAG,yBAAyB,CAAC,MAAM,GAAG,CAAC,CAAC;QACxD,KAAK,MAAM,MAAM,IAAI,yBAAyB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;YACzD,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;QACrB,CAAC;QACD,OAAO,UAAU,CAAC;IACpB,CAAC,CAAC;IAEF,MAAM,uBAAuB,GAAG,GAAS,EAAE;QACzC,KAAK,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,IAAI,WAAW,EAAE,CAAC;YAC/C,MAAM,QAAQ,GAAG,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC;YACzD,MAAM,MAAM,GAAG,QAAQ,IAAI,QAAQ,KAAK,MAAM;gBAC5C,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,IAAI,IAAI,IAAI;gBACzC,CAAC,CAAC,IAAI,CAAC;YACT,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBACtC,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;YAClC,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,kBAAkB,GAAG,CACzB,IAAiC,EACjC,KAAmC,EACA,EAAE;QACrC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpB,MAAM,IAAI,GAAG,oBAAoB,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACxE,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QACvB,MAAM,UAAU,GAA+B;YAC7C,MAAM,EAAE,IAAI,CAAC,EAAE;YACf,IAAI;YACJ,aAAa,EAAE,EAAE;YACjB,eAAe,EAAE,EAAE;YACnB,4BAA4B,EAAE,EAAE;YAChC,eAAe,EAAE,EAAE;YACnB,cAAc,EAAE,EAAE;SACnB,CAAC;QACF,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;QACrC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QACnC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAC;QACxD,wBAAwB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC;QAC7D,gCAAgC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC1C,IAAI,IAAI,CAAC,SAAS;YAAE,wBAAwB,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAEpF,IAAI,IAAI,CAAC,UAAU,KAAK,MAAM,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,UAAU,CAAC,EAAE,CAAC;YAC7G,IAAI,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;gBACtC,UAAU,CAAC,WAAW,GAAG,oBAAoB,CAAC,KAAK,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;YACzE,CAAC;iBAAM,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBAC1B,yBAAyB,CAAC,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;YACvD,CAAC;iBAAM,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACtB,wBAAwB,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;YACnF,CAAC;QACH,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,WAAW;YAAE,sBAAsB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QACtE,qBAAqB,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;QACtD,IAAI,CAAC,UAAU,CAAC,WAAW;YAAE,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC/D,OAAO,UAAU,CAAC;IACpB,CAAC,CAAC;IAEF,MAAM,WAAW,GAAG,CAAC,IAAiC,EAAqC,EAAE;QAC3F,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACrC,MAAM,UAAU,GAAG,kBAAkB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACnD,uBAAuB,EAAE,CAAC;QAC1B,oBAAoB,CAAC,KAAK,CAAC,CAAC;QAC5B,OAAO,UAAU,CAAC;IACpB,CAAC,CAAC;IAEF,MAAM,UAAU,GAAG,CAAC,MAAc,EAAQ,EAAE;QAC1C,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACzC,IAAI,CAAC,QAAQ;YAAE,OAAO;QACtB,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC3B,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC/B,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACnC,wBAAwB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACxC,0BAA0B,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC1C,uBAAuB,EAAE,CAAC;QAC1B,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IACjC,CAAC,CAAC;IAEF,OAAO;QACL,YAAY,CAAC,KAAK;YAChB,MAAM,QAAQ,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;YAC5B,4BAA4B,IAAI,CAAC,CAAC;YAClC,IAAI,CAAC;gBACH,UAAU,EAAE,CAAC;gBACb,MAAM,KAAK,GAAG,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBACzD,KAAK,MAAM,IAAI,IAAI,QAAQ;oBAAE,kBAAkB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;gBAC7D,uBAAuB,EAAE,CAAC;gBAC1B,oBAAoB,CAAC,KAAK,CAAC,CAAC;gBAC5B,OAAO,KAAK,CAAC,MAAM,CAAC;YACtB,CAAC;oBAAS,CAAC;gBACT,4BAA4B,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,4BAA4B,GAAG,CAAC,CAAC,CAAC;gBAC7E,yBAAyB,EAAE,CAAC;YAC9B,CAAC;QACH,CAAC;QACD,WAAW;QACX,UAAU;QACV,OAAO,CAAC,KAAK;YACX,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAClC,CAAC;QACD,sBAAsB;YACpB,OAAO,SAAS,EAAE,MAAM,IAAI,IAAI,CAAC;QACnC,CAAC;QACD,YAAY;QACZ,WAAW;YACT,IAAI,aAAa,CAAC,IAAI,KAAK,CAAC;gBAAE,OAAO,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;YACrE,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;gBAC3B,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC3B,CAAC,CAAC,CAAC;QACL,CAAC;QACD,iBAAiB,CAAC,MAAM;YACtB,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC3C,OAAO,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,uBAAuB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC5E,CAAC;QACD,kBAAkB,CAAC,OAAO;YACxB,MAAM,UAAU,GAA4C,EAAE,CAAC;YAC/D,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;gBACjD,IAAI,SAAS;oBAAE,UAAU,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC;YAChD,CAAC;YACD,OAAO,UAAU,CAAC;QACpB,CAAC;QACD,oBAAoB,CAAC,MAAM,EAAE,cAAc;YACzC,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC3C,IAAI,CAAC,UAAU,EAAE,IAAI;gBAAE,OAAO,IAAI,CAAC;YACnC,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC;YAC9C,OAAO,MAAM;gBACX,CAAC,CAAC,+BAA+B,CAC7B,4BAA4B,CAAC,MAAM,CAAC,EACpC,cAAc,EACd,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAC9B;gBACH,CAAC,CAAC,gCAAgC,CAAC,cAAc,CAAC,CAAC;QACvD,CAAC;QACD,uBAAuB,CAAC,MAAM;YAC5B,OAAO,sCAAsC,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,eAAe,IAAI,IAAI,CAAC,CAAC;QAClG,CAAC;QACD,uBAAuB,CAAC,MAAM,EAAE,SAAS;YACvC,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC3C,IAAI,CAAC,UAAU,EAAE,IAAI;gBAAE,OAAO;YAC9B,IAAI,CAAC,6BAA6B,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,CAAC;gBAChF,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,sFAAsF,MAAM,GAAG,CAAC,CAAC;YAC1H,CAAC;QACH,CAAC;QACD,wBAAwB,CAAC,UAAU;YACjC,KAAK,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC7D,IAAI,CAAC,uBAAuB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;QACD,iBAAiB,CAAC,MAAM;YACtB,OAAO,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,IAAI,IAAI,CAAC;QAC/C,CAAC;QACD,kBAAkB,CAAC,OAAO;YACxB,OAAO,4BAA4B,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAC5D,CAAC;QACD,iBAAiB,CAAC,OAAO;YACvB,MAAM,MAAM,GAAG,4BAA4B,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YAClE,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO;oBACL,IAAI,EAAE,kBAAkB;oBACxB,QAAQ,EAAE,MAAM,CAAC,MAAM;iBACxB,CAAC;YACJ,CAAC;YACD,MAAM,UAAU,GAAG,OAAO;iBACvB,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;iBAC7C,MAAM,CAAC,CAAC,SAAS,EAAwC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YAC5E,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,IAAI,CAAC;YACzC,OAAO;gBACL,IAAI,EAAE,kBAAkB;gBACxB,QAAQ,EAAE,gBAAgB,CAAC,UAAU,CAAC;aACvC,CAAC;QACJ,CAAC;QACD,iBAAiB,CAAC,IAAI;YACpB,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC5C,IAAI,CAAC,UAAU;gBAAE,OAAO;YACxB,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YACnC,wBAAwB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC;YAC7D,gCAAgC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC1C,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAC;YACxD,uBAAuB,EAAE,CAAC;YAC1B,IAAI,IAAI,CAAC,SAAS;gBAAE,wBAAwB,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YAC/F,qBAAqB,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;QACxD,CAAC;QACD,eAAe,CAAC,IAAI;YAClB,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC5C,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,WAAW,KAAK,OAAO;gBAAE,OAAO,KAAK,CAAC;YAC9D,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YACnC,wBAAwB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC;YAC7D,gCAAgC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC1C,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAC;YACxD,uBAAuB,EAAE,CAAC;YAC1B,IAAI,IAAI,CAAC,SAAS;gBAAE,wBAAwB,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YAC/F,IAAI,CAAC,0BAA0B,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,UAAU,CAAC;gBAAE,OAAO,KAAK,CAAC;YAChG,qBAAqB,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;YACtD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,gBAAgB,CAAC,IAAI;YACnB,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC5C,IAAI,CAAC,UAAU;gBAAE,OAAO;YACxB,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YACnC,0BAA0B,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAC/C,CAAC;QACD,aAAa,CAAC,SAAS;YACrB,qBAAqB,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QACjD,CAAC;QACD,mCAAmC;YACjC,OAAO,qBAAqB,CAAC,cAAc,EAAE,CAAC;QAChD,CAAC;QACD,uBAAuB,CAAC,MAAM;YAC5B,OAAO,8BAA8B,CAAC,MAAM,CAAC,CAAC;QAChD,CAAC;QACD,0BAA0B,CAAC,MAAM;YAC/B,OAAO,iCAAiC,CAAC,MAAM,CAAC,CAAC;QACnD,CAAC;QACD,YAAY,CAAC,OAAO,EAAE,OAAO;YAC3B,OAAO,6BAA6B,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QACxE,CAAC;QACD,sBAAsB,CAAC,IAAI;YACzB,OAAO,gCAAgC,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;QAC7F,CAAC;QACD,gBAAgB,CAAC,MAAM;YACrB,OAAO,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC;QACzC,CAAC;QACD,mBAAmB;YACjB,OAAO,CAAC,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;QACjC,CAAC;QACD,sBAAsB,CAAC,MAAM;YAC3B,MAAM,SAAS,GAAa,EAAE,CAAC;YAC/B,MAAM,IAAI,GAAG,IAAI,GAAG,CAAS,CAAC,MAAM,CAAC,CAAC,CAAC;YACvC,IAAI,SAAS,GAAkB,MAAM,CAAC;YACtC,OAAO,SAAS,EAAE,CAAC;gBACjB,MAAM,QAAQ,GAAkB,mBAAmB,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC;gBAC3E,IAAI,CAAC,QAAQ,IAAI,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;oBAAE,MAAM;gBACrE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBACnB,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACzB,SAAS,GAAG,QAAQ,CAAC;YACvB,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,6BAA6B;YAC3B,OAAO,CAAC,GAAG,0BAA0B,CAAC,OAAO,EAAE,CAAC;iBAC7C,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,4BAA4B,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;QAC/E,CAAC;QACD,6BAA6B,CAAC,SAAS;YACrC,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC1D,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC;oBAAE,SAAS;gBACvC,0BAA0B,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,KAAK,KAAK,CAAC,CAAC;gBAC1D,gCAAgC,CAAC,MAAM,CAAC,CAAC;YAC3C,CAAC;YACD,OAAO,IAAI,CAAC,6BAA6B,EAAE,CAAC;QAC9C,CAAC;QACD,+BAA+B;YAC7B,MAAM,cAAc,GAAG,CAAC,GAAG,0BAA0B,CAAC,IAAI,EAAE,CAAC,CAAC;YAC9D,0BAA0B,CAAC,KAAK,EAAE,CAAC;YACnC,KAAK,MAAM,MAAM,IAAI,cAAc;gBAAE,gCAAgC,CAAC,MAAM,CAAC,CAAC;YAC9E,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,qBAAqB,CAAC,KAAK;YACzB,8BAA8B,EAAE,CAAC;YACjC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM,MAAM,GAAG,8BAA8B,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;gBACpF,IAAI,MAAM;oBAAE,yBAAyB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACrD,CAAC;YACD,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpC,CAAC;QACD,uBAAuB;YACrB,OAAO,8BAA8B,EAAE,CAAC;QAC1C,CAAC;QACD,OAAO;YACL,UAAU,EAAE,CAAC;YACb,qBAAqB,CAAC,OAAO,EAAE,CAAC;QAClC,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,KAAU,EAAE,QAA6B;IAC5D,OAAO;QACL,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC3D,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC3D,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;KAC5D,CAAC;AACJ,CAAC;AAED,SAAS,8BAA8B,CACrC,OAA6B,EAC7B,KAAmB,EACnB,IAAmD;IAEnD,IAAI,IAAI,CAAC,IAAI,KAAK,iBAAiB;QAAE,OAAO,iCAAiC,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IACpG,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,0BAA0B,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IACjF,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzB,MAAM,WAAW,GAAI,OAAe,CAAC,WAAW,CAAC;IACjD,MAAM,gBAAgB,GAAI,OAAe,CAAC,gBAAgB,CAAC;IAC3D,IAAI,CAAC,WAAW,EAAE,SAAS,IAAI,CAAC,gBAAgB;QAAE,OAAO,IAAI,CAAC;IAC9D,MAAM,IAAI,GAAG;QACX,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;QAC1C,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;QAC9E,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;KAC3C,CAAC;IACF,MAAM,IAAI,GAAG,WAAW,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,EAAE,qBAAqB,EAAE;QAClE,KAAK,EAAE,IAAI,CAAC,CAAC;QACb,MAAM,EAAE,IAAI,CAAC,CAAC;QACd,KAAK,EAAE,IAAI,CAAC,CAAC;KACd,EAAE,KAAK,CAAC,CAAC;IACV,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;IAClB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;IACpB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;IACxB,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;IAC1B,IAAI,CAAC,QAAQ,GAAG,gCAAgC,EAAE,CAAC;IACnD,IAAI,CAAC,QAAQ,GAAG,oBAAoB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAC7D,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC,GAAG,IAAI,CAAC,EAAE,8BAA8B,EAAE,KAAK,CAAC,CAAC;IACvF,MAAM,KAAK,GAAG,2BAA2B,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9D,IAAI,KAAK,EAAE,CAAC;QACV,QAAQ,CAAC,YAAY,GAAG,KAAK,CAAC;QAC9B,QAAQ,CAAC,aAAa,GAAG,KAAK,CAAC;IACjC,CAAC;IACD,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,KAAK,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;IAClG,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,KAAK,WAAW,IAAI,IAAI,CAAC,IAAI,KAAK,kBAAkB,CAAC;IACnF,QAAQ,CAAC,eAAe,GAAG,IAAI,CAAC;IAChC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IACzB,MAAM,eAAe,GAAG,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzD,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7C,IAAI,CAAC,OAAO,GAAG,CAAC,GAAG,IAAe,EAAE,EAAE;QACpC,eAAe,EAAE,EAAE,CAAC;QACpB,OAAO,WAAW,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;IAChC,CAAC,CAAC;IACF,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,iCAAiC,CACxC,OAA6B,EAC7B,KAAmB,EACnB,IAAmD;IAEnD,MAAM,WAAW,GAAI,OAAe,CAAC,WAAW,CAAC;IACjD,IAAI,CAAC,WAAW,EAAE,gBAAgB;QAAE,OAAO,IAAI,CAAC;IAChD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC;IAClD,MAAM,SAAS,GAAG,kBAAkB,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;IACpF,IAAI,CAAC,MAAM,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IACvC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IACzJ,MAAM,KAAK,GAAG,oBAAoB,CAAC,OAAO,EAAE;QAC1C,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,MAAM,GAAG,GAAG;QACxC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,MAAM,GAAG,GAAG;QACxC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,MAAM,GAAG,GAAG;KACzC,CAAC,CAAC;IACH,MAAM,GAAG,GAAG,oBAAoB,CAAC,OAAO,EAAE;QACxC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,MAAM,GAAG,GAAG;QACxC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,MAAM,GAAG,GAAG;QACxC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,MAAM,GAAG,GAAG;KACzC,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,oBAAoB,CAAC,OAAO,EAAE;QAC9C,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC,GAAG,MAAM,GAAG,IAAI;QACpE,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,MAAM,GAAG,IAAI;QACtC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC,GAAG,MAAM,GAAG,IAAI;KACrE,CAAC,CAAC;IACH,MAAM,UAAU,GAAG,oBAAoB,CAAC,OAAO,EAAE;QAC/C,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC,GAAG,MAAM,GAAG,IAAI;QACpE,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,MAAM,GAAG,IAAI;QACtC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC,GAAG,MAAM,GAAG,IAAI;KACrE,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,WAAW,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC,EAAE,qBAAqB,EAAE;QACzE,KAAK,EAAE;YACL,CAAC,KAAK,EAAE,GAAG,CAAC;YACZ,CAAC,GAAG,EAAE,SAAS,CAAC;YAChB,CAAC,GAAG,EAAE,UAAU,CAAC;SAClB;KACF,EAAE,KAAK,CAAC,CAAC;IACV,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;IAClB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;IACpB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;IACxB,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;IAC1B,IAAI,CAAC,QAAQ,GAAG,gCAAgC,EAAE,CAAC;IACnD,MAAM,KAAK,GAAG,2BAA2B,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9D,IAAI,KAAK;QAAE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IAC9B,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,gCAAgC;IACvC,OAAO;QACL,0BAA0B,EAAE,IAAI;QAChC,mBAAmB,EAAE,IAAI;QACzB,iBAAiB,EAAE,IAAI;QACvB,4BAA4B,EAAE,IAAI;KACnC,CAAC;AACJ,CAAC;AAED,SAAS,0BAA0B,CACjC,MAA+C,EAC/C,IAA6C;IAE7C,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IAClC,OAAO;QACL,MAAM;QACN,IAAI;QACJ,GAAG,EAAE;YACH,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC;YACxB,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC;YACxB,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC;SACzB;QACD,GAAG,EAAE;YACH,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC;YACxB,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC;YACxB,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC;SACzB;KACF,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAAC,OAA6B,EAAE,KAAkC;IAC7F,MAAM,OAAO,GAAI,OAAe,CAAC,OAAO,CAAC;IACzC,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC;AACnG,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAkC;IAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IACrD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,MAAM;QAAE,OAAO,IAAI,CAAC;IAC9D,OAAO;QACL,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,MAAM;QACnB,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,MAAM;QACnB,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,MAAM;KACpB,CAAC;AACJ,CAAC;AAED,SAAS,2BAA2B,CAAC,OAA6B,EAAE,IAA2D;IAC7H,MAAM,MAAM,GAAI,OAAe,CAAC,MAAM,CAAC;IACvC,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzB,IAAI,IAAI,KAAK,eAAe;QAAE,OAAO,IAAI,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;IAC9D,IAAI,IAAI,KAAK,iBAAiB;QAAE,OAAO,IAAI,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAChE,IAAI,IAAI,KAAK,kBAAkB;QAAE,OAAO,IAAI,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAClE,IAAI,IAAI,KAAK,iBAAiB;QAAE,OAAO,IAAI,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;IAChE,IAAI,IAAI,KAAK,WAAW;QAAE,OAAO,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;IAC1D,OAAO,IAAI,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,OAAO,CAAC,IAAyB,EAAE,KAA0B;IACpE,OAAO;QACL,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;QACnB,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;QACnB,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;KACpB,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,KAA0B,EAAE,MAAc;IAC3D,OAAO;QACL,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,MAAM;QACnB,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,MAAM;QACnB,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,MAAM;KACpB,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,UAAqC;IAC7D,MAAM,GAAG,GAAG,UAAU,CAAC,MAAM,CAC3B,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,2BAA2B,CAAC,SAAS,CAAC,CAAC,EAChF,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CACrB,CAAC;IACF,OAAO,SAAS,CAAC,GAAG,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;AAC/C,CAAC;AAED,SAAS,4BAA4B,CACnC,WAAoD,EACpD,OAAiB;IAEjB,IAAI,GAAG,GAA+B,IAAI,CAAC;IAC3C,IAAI,GAAG,GAA+B,IAAI,CAAC;IAC3C,IAAI,QAAmD,CAAC;IACxD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,sCAAsC,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAC3E,MAAM,MAAM,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM;YAAE,SAAS;QACtB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,QAAQ,GAAG,4BAA4B,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC;QACvF,GAAG,GAAG,GAAG;YACP,CAAC,CAAC;gBACE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;gBAChC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;gBAChC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;aACjC;YACH,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;QACf,GAAG,GAAG,GAAG;YACP,CAAC,CAAC;gBACE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;gBAChC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;gBAChC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;aACjC;YACH,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;IACjB,CAAC;IACD,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IAC9B,MAAM,MAAM,GAAG;QACb,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QACtB,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QACtB,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;KACvB,CAAC;IACF,OAAO;QACL,GAAG;QACH,GAAG;QACH,MAAM;QACN,IAAI,EAAE;YACJ,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;YAChB,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;YAChB,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;SACjB;QACD,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAClC,CAAC;AACJ,CAAC;AAED,SAAS,sCAAsC,CAC7C,WAAoD,EACpD,MAAc;IAEd,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3C,IAAI,UAAU,EAAE,IAAI;QAAE,OAAO,UAAU,CAAC,IAAI,CAAC;IAC7C,KAAK,MAAM,mBAAmB,IAAI,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC;QACvD,MAAM,eAAe,GAAG,mCAAmC,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC;QACzF,IAAI,eAAe;YAAE,OAAO,eAAe,CAAC;IAC9C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,mCAAmC,CAC1C,UAAsC,EACtC,MAAc;IAEd,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,eAAe,IAAI,EAAE,EAAE,CAAC;QACpD,IAAI,iCAAiC,CAAC,IAAI,CAAC,KAAK,MAAM;YAAE,OAAO,IAAI,CAAC;IACtE,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,aAAa,EAAE,CAAC;QAC5C,IAAI,iCAAiC,CAAC,IAAI,CAAC,KAAK,MAAM;YAAE,OAAO,IAAI,CAAC;IACtE,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,iCAAiC,CAAC,IAAS;IAClD,MAAM,MAAM,GAAG,IAAI,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,CAAC;IACxD,OAAO,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;AACzE,CAAC;AAED,SAAS,oBAAoB,CAAC,IAAS;IACrC,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,MAAM,MAAM,GAAG,IAAI,CAAC,2BAA2B,EAAE,EAAE,CAAC;IACpD,IAAI,MAAM,EAAE,GAAG,IAAI,MAAM,EAAE,GAAG,EAAE,CAAC;QAC/B,OAAO;YACL,GAAG,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;YAClD,GAAG,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;SACnD,CAAC;IACJ,CAAC;IACD,MAAM,SAAS,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAC;IAChD,MAAM,QAAQ,GAAG,2BAA2B,CAAC,SAAS,CAAC,CAAC;IACxD,OAAO;QACL,GAAG,EAAE,QAAQ;QACb,GAAG,EAAE,QAAQ;KACd,CAAC;AACJ,CAAC;AAED,SAAS,4BAA4B,CAAC,IAAS;IAC7C,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,MAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;IAC/E,MAAM,kBAAkB,GAAG,WAAW,EAAE,KAAK,EAAE,EAAE,CAAC;IAClD,IAAI,CAAC,WAAW,IAAI,CAAC,kBAAkB,EAAE,MAAM;QAAE,OAAO,IAAI,CAAC;IAC7D,kBAAkB,CAAC,MAAM,EAAE,CAAC;IAC5B,MAAM,MAAM,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC/D,MAAM,WAAW,GAAU,EAAE,CAAC;IAC9B,IAAI,OAAO,GAAQ,IAAI,CAAC;IACxB,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;QAC1B,IAAI,EAAE,kBAAkB,EAAE,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,YAAY,GAAG,IAAI,EAAE,eAAe,EAAE,EAAE,EAAE,WAAW,EAAE,YAAY,CAAC;QAC1E,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC;YAAE,SAAS;QAC3C,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;YACjC,MAAM,YAAY,GAAG,KAAK,EAAE,WAAW,CAAC;YACxC,IAAI,OAAO,YAAY,EAAE,oBAAoB,KAAK,UAAU;gBAAE,SAAS;YACvE,OAAO,KAAP,OAAO,GAAK,YAAY,EAAC;YACzB,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,oBAAoB,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC,CAAC;QACjF,CAAC;IACH,CAAC;IACD,IAAI,CAAC,OAAO,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACtD,MAAM,QAAQ,GAAG;QACf,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACzD,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACzD,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;KAC1D,CAAC;IACF,MAAM,QAAQ,GAAG;QACf,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACzD,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACzD,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;KAC1D,CAAC;IACF,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAClG,MAAM,cAAc,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,EAAuB,EAAE;QAC9E,MAAM,KAAK,GAAG,OAAO,CAAC,oBAAoB,CAAC,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;QAC9E,OAAO,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IACxE,CAAC,CAAC;IACF,MAAM,SAAS,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IACrE,MAAM,SAAS,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IACrE,MAAM,SAAS,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IACrE,MAAM,SAAS,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IACrE,MAAM,SAAS,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IACrE,MAAM,KAAK,GAAG,sBAAsB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAC3D,MAAM,KAAK,GAAG,sBAAsB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAC3D,MAAM,KAAK,GAAG,sBAAsB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAC3D,MAAM,IAAI,GAAG;QACX,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;QACxC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;QACxC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;KACzC,CAAC;IACF,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAChG,MAAM,WAAW,GAAG,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5C,MAAM,kBAAkB,GAAG,CAAC,KAA0B,EAA8B,EAAE;QACpF,MAAM,IAAI,GAAG,sBAAsB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QACxD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QAClD,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC3F,CAAC,CAAC;IACF,MAAM,KAAK,GAAG,kBAAkB,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC1D,MAAM,KAAK,GAAG,kBAAkB,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC1D,MAAM,KAAK,GAAG,kBAAkB,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC1D,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAC5C,OAAO;QACL,MAAM,EAAE;YACN,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC;YAClC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC;YAClC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC;SACnC;QACD,IAAI;QACJ,IAAI,EAAE;YACJ,CAAC,EAAE,KAAK;YACR,CAAC,EAAE,KAAK;YACR,CAAC,EAAE,KAAK;SACT;KACF,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAC7B,IAAyB,EACzB,KAA0B;IAE1B,OAAO;QACL,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;QACnB,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;QACnB,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;KACpB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,IAAS;IAC/C,OAAO,4BAA4B,CAAC,IAAI,CAAC,CAAC;AAC5C,CAAC;AAED,SAAS,4BAA4B,CAAC,IAAS,EAAE,OAAO,IAAI,GAAG,EAAO;IACpE,MAAM,KAAK,GAAG,4BAA4B,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,IAAI,EAAE,MAAM,IAAI,IAAI,CAAC;IACpC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAC5C,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACf,MAAM,WAAW,GAAG,4BAA4B,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC/D,OAAO,uBAAuB,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC;AAC9D,CAAC;AAED,SAAS,4BAA4B,CAAC,IAAS;IAC7C,MAAM,MAAM,GAAG,kCAAkC,CAAC,IAAI,CAAC,CAAC;IACxD,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAC1B,MAAM,QAAQ,GAAG,IAAI,EAAE,kBAAkB,EAAE,aAAa,EAAE,EAAE,IAAI,IAAI,EAAE,QAAQ,CAAC;IAC/E,OAAO;QACL,QAAQ,EAAE,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;QAC3D,QAAQ,EAAE,WAAW,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;QACrD,KAAK,EAAE,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;KACxD,CAAC;AACJ,CAAC;AAED,SAAS,kCAAkC,CAAC,IAAS;IACnD,MAAM,QAAQ,GAAG,oBAAoB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACtD,MAAM,cAAc,GAAG,QAAQ,EAAE,CAAC,oCAAoC,CAAC,CAAC;IACxE,IAAI,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC;QAClC,MAAM,SAAS,GAAG,mCAAmC,CAAC,cAAc,CAAC,CAAC;QACtE,IAAI,SAAS;YAAE,OAAO,SAAS,CAAC;IAClC,CAAC;IACD,MAAM,WAAW,GAAG,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACnF,OAAO,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,WAAW,CAAC,MAAM,CAAC,WAAW,CAAC;QAClE,CAAC,CAAC,mCAAmC,CAAC,KAAK,CAAC,IAAI,CAAC,WAAgC,CAAC,CAAC;QACnF,CAAC,CAAC,IAAI,CAAC;AACX,CAAC;AAED,SAAS,oBAAoB,CAC3B,OAA6B,EAC7B,KAAmB,EACnB,IAAiC;IAEjC,MAAM,aAAa,GAAI,OAAe,CAAC,aAAa,CAAC;IACrD,IAAI,CAAC,aAAa;QAAE,OAAO,IAAI,CAAC;IAChC,MAAM,IAAI,GAAG,IAAI,aAAa,CAAC,GAAG,IAAI,CAAC,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC;IAC/D,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;IAClB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC;IACjC,MAAM,sBAAsB,GAAG,IAAI,CAAC,WAAW,KAAK,QAAQ,IAAI,IAAI,CAAC,WAAW,KAAK,OAAO,IAAI,IAAI,CAAC,UAAU,KAAK,MAAM,CAAC;IAC3H,IAAI,CAAC,QAAQ,GAAG;QACd,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;QACxB,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAC;YAC3B,mBAAmB,EAAE,IAAI;YACzB,iBAAiB,EAAE,IAAI;YACvB,4BAA4B,EAAE,IAAI;SACnC,CAAC,CAAC,CAAC,EAAE,CAAC;QACP,gBAAgB,EAAE;YAChB,MAAM,EAAE,IAAI,CAAC,EAAE;YACf,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9D,GAAG,8BAA8B,CAAC,IAAI,CAAC;SACxC;KACF,CAAC;IACF,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,mBAAmB,CAChC,OAAuC,EACvC,IAAiC,EACjC,UAAsC,EACtC,aAAgD;IAEhD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;IACzB,IAAI,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QACnC,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;QACnC,wBAAwB,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;QAC1F,sBAAsB,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAC/C,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC;YACvC,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,IAAI,EAAE,UAAU,CAAC,IAAI;YACrB,IAAI;YACJ,KAAK;SACN,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;YACnC,wBAAwB,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;YACvF,sBAAsB,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;YAC/C,OAAO;QACT,CAAC;QACD,IAAI,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,EAAE,CAAC;YACnC,+BAA+B,CAAC,MAAM,CAAC,CAAC;YACxC,OAAO;QACT,CAAC;QACD,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;QACnC,8BAA8B,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;QAC/E,sBAAsB,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IACjD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,sDAAsD,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAC9H,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,EAAE,CAAC;YACpC,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;YACnC,wBAAwB,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;YACvF,sBAAsB,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,8BAA8B,CACrC,OAAuC,EACvC,IAAiC,EACjC,KAAmC,EACnC,UAAsC,EACtC,MAA2C;IAE3C,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IACnC,MAAM,aAAa,GAAI,OAAe,CAAC,aAAa,CAAC;IACrD,IAAI,CAAC,aAAa;QAAE,OAAO;IAC3B,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,IAAI,aAAa,CAAC,GAAG,IAAI,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;QACnE,SAAS,CAAC,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC;QACnC,SAAS,CAAC,QAAQ,GAAG;YACnB,GAAG,CAAC,SAAS,CAAC,QAAQ,IAAI,EAAE,CAAC;YAC7B,gBAAgB,EAAE;gBAChB,MAAM,EAAE,IAAI,CAAC,EAAE;gBACf,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,GAAG,8BAA8B,CAAC,IAAI,CAAC;aACxC;SACF,CAAC;QACF,2BAA2B,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QACjE,yCAAyC,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAElE,MAAM,aAAa,GAAG;YACpB,GAAG,CAAC,MAAM,CAAC,cAAc,IAAI,EAAE,CAAC;YAChC,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;SACzB,CAAC;QACF,MAAM,eAAe,GAAG,IAAI,GAAG,CAAM,aAAa,CAAC,CAAC;QACpD,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE,CAAC;YACzC,IAAI,YAAY,KAAK,SAAS;gBAAE,SAAS;YACzC,IAAI,CAAC,YAAY,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;gBACtE,YAAY,CAAC,MAAM,GAAG,SAAS,CAAC;YAClC,CAAC;YACD,YAAY,CAAC,QAAQ,GAAG;gBACtB,GAAG,CAAC,YAAY,CAAC,QAAQ,IAAI,EAAE,CAAC;gBAChC,gBAAgB,EAAE;oBAChB,MAAM,EAAE,IAAI,CAAC,EAAE;oBACf,QAAQ,EAAE,KAAK,CAAC,QAAQ;oBACxB,GAAG,8BAA8B,CAAC,IAAI,CAAC;iBACxC;aACF,CAAC;QACJ,CAAC;QACD,MAAM,aAAa,GAAG,gCAAgC,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QACvE,MAAM,8BAA8B,GAAG,8CAA8C,CACnF,SAAS,EACT,IAAI,CAAC,EAAE,CACR,CAAC;QACF,MAAM,sBAAsB,GAAG,IAAI,GAAG,CACpC,oCAAoC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAC/E,CAAC;QACF,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAe,CAAC;QACnD,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAkB,CAAC;QACtD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;YACvC,MAAM,aAAa,GAAG,4BAA4B,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;YAC7E,IAAI,CAAC,aAAa;gBAAE,SAAS;YAC7B,mBAAmB,CAAC,GAAG,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;YAC7C,MAAM,QAAQ,GAAG,mCAAmC,CAAC,aAAa,EAAE,EAAE,gBAAgB,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;YACnG,mBAAmB,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAClF,CAAC;QACD,MAAM,+BAA+B,GAAG,IAAI,GAAG,EAAkB,CAAC;QAClE,MAAM,6BAA6B,GAAG,IAAI,GAAG,EAAU,CAAC;QACxD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;YACvC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;YACvB,8BAA8B,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAC3C,MAAM,aAAa,GAAG,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;YAC5D,IAAI,aAAa,EAAE,CAAC;gBAClB,MAAM,QAAQ,GAAG,mCAAmC,CAAC,aAAa,EAAE,EAAE,gBAAgB,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;gBACnG,MAAM,cAAc,GAAG,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBAC9D,MAAM,kBAAkB,GAAG,gDAAgD,CACzE,IAAI,EACJ,aAAa,EACb,8BAA8B,EAC9B,sBAAsB,EACtB,cAAc,EACd,+BAA+B,CAChC,CAAC;gBACF,MAAM,wBAAwB,GAAG,yCAAyC,CACxE,OAAO,EACP,IAAI,EACJ,UAAU,EACV,IAAI,EACJ,aAAa,EACb,aAAa,EACb,8BAA8B,EAC9B,sBAAsB,CACvB,CAAC;gBACF,MAAM,8BAA8B,GAAG,CAAC,kBAAkB;uBACrD,wBAAwB,CAAC,MAAM,KAAK,CAAC;uBACrC,CAAC,6BAA6B,CAAC,GAAG,CAAC,QAAQ,CAAC;oBAC/C,CAAC,CAAC,+CAA+C,CAC7C,OAAO,EACP,IAAI,EACJ,UAAU,EACV,IAAI,EACJ,aAAa,EACb,aAAa,EACb,8BAA8B,EAC9B,sBAAsB,EACtB,cAAc,CACf;oBACH,CAAC,CAAC,EAAE,CAAC;gBACP,IAAI,8BAA8B,CAAC,MAAM,GAAG,CAAC;oBAAE,6BAA6B,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBAC3F,MAAM,mBAAmB,GAAG,wBAAwB,CAAC,MAAM,GAAG,CAAC;uBAC1D,8BAA8B,CAAC,MAAM,GAAG,CAAC;uBACzC,6BAA6B,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBACjD,MAAM,YAAY,GAAG,sCAAsC,CACzD,KAAK,EACL,IAAI,EACJ,aAAa,EACb,8BAA8B,EAC9B,sBAAsB,EACtB,IAAI,CAAC,EAAE,CACR,CAAC;gBACF,IAAI,CAAC,QAAQ,GAAG;oBACd,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;oBACxB,gBAAgB,EAAE;wBAChB,MAAM,EAAE,kBAAkB;4BACxB,CAAC,CAAC,+BAA+B,CAAC,IAAI,CAAC,EAAE,EAAE,kBAAkB,CAAC,GAAG,CAAC;4BAClE,CAAC,CAAC,mBAAmB;gCACrB,CAAC,CAAC,IAAI,CAAC,EAAE;gCACT,CAAC,CAAC,+BAA+B,CAAC,IAAI,CAAC,EAAE,EAAE,YAAY,CAAC;wBAC1D,UAAU,EAAE,IAAI,CAAC,EAAE;wBACnB,QAAQ,EAAE,KAAK,CAAC,QAAQ;wBACxB,aAAa;wBACb,GAAG,CAAC,kBAAkB;4BACpB,CAAC,CAAC;gCACE,gBAAgB,EAAE,kBAAkB,CAAC,GAAG;gCACxC,cAAc,EAAE,kBAAkB,CAAC,cAAc;6BAClD;4BACH,CAAC,CAAC,EAAE,CAAC;wBACP,GAAG,CAAC,CAAC,kBAAkB,IAAI,CAAC,mBAAmB,IAAI,YAAY,KAAK,aAAa;4BAC/E,CAAC,CAAC,EAAE,gBAAgB,EAAE,YAAY,EAAE;4BACpC,CAAC,CAAC,EAAE,CAAC;wBACP,WAAW,EAAE,WAAW;wBACxB,GAAG,8BAA8B,CAAC,IAAI,CAAC;qBACxC;iBACF,CAAC;YACJ,CAAC;QACH,CAAC;QACD,UAAU,CAAC,cAAc,CAAC,IAAI,CAC5B,GAAG,6CAA6C,CAC9C,OAAO,EACP,IAAI,EACJ,SAAS,EACT,MAAM,CAAC,MAAM,IAAI,EAAE,EACnB,8BAA8B,CAC/B,CACF,CAAC;QACF,KAAK,MAAM,cAAc,IAAI,MAAM,CAAC,eAAe,IAAI,EAAE,EAAE,CAAC;YAC1D,cAAc,CAAC,IAAI,EAAE,EAAE,CAAC;QAC1B,CAAC;QACD,UAAU,CAAC,eAAe,GAAG,MAAM,CAAC,eAAe,IAAI,EAAE,CAAC;QAC1D,UAAU,CAAC,aAAa,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;QACtG,UAAU,CAAC,eAAe,GAAG,uCAAuC,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QACrG,MAAM,SAAS,GAAG,gCAAgC,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;QAC/E,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,4DAA4D,EAAE;YACnF,gBAAgB,EAAE,IAAI,CAAC,EAAE;YACzB,aAAa,EAAE,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,EAAE,IAAI,IAAI;YACjD,iBAAiB,EAAE,SAAS,CAAC,iBAAiB;YAC9C,kBAAkB,EAAE,SAAS,CAAC,kBAAkB;YAChD,qBAAqB,EAAE,SAAS,CAAC,qBAAqB;YACtD,qBAAqB,EAAE,SAAS,CAAC,qBAAqB;YACtD,6BAA6B,EAAE,SAAS,CAAC,6BAA6B;SACvE,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,+BAA+B,CAAC,MAAM,CAAC,CAAC;QACxC,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,yCAAyC,CAChD,OAA6B,EAC7B,KAAmB,EACnB,MAA2C;IAE3C,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;IACnC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAChC,MAAM,aAAa,GAAI,OAAe,CAAC,aAAa,CAAC;IACrD,IAAI,CAAC,aAAa;QAAE,OAAO;IAC3B,MAAM,YAAY,GAAG,qCAAqC,CAAC,MAAM,CAAC,CAAC;IACnE,MAAM,UAAU,GAAU,EAAE,CAAC;IAC7B,MAAM,yBAAyB,GAAU,EAAE,CAAC;IAC5C,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;QAC1B,IAAI,CAAC,gCAAgC,CAAC,IAAI,EAAE,YAAY,CAAC,EAAE,CAAC;YAC1D,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtB,SAAS;QACX,CAAC;QACD,MAAM,WAAW,GAAG,oCAAoC,CAAC,aAAa,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QACrF,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtB,SAAS;QACX,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,4BAA4B,CAAC,IAAI,CAAC,EAAE,CAAC;YACvD,KAAK,CAAC,MAAM,GAAG,WAAW,CAAC;QAC7B,CAAC;QACD,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC5B,yBAAyB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC9C,CAAC;IACD,IAAI,yBAAyB,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IACnD,MAAM,CAAC,MAAM,GAAG,UAAU,CAAC;IAC3B,MAAM,CAAC,cAAc,GAAG;QACtB,GAAG,CAAC,MAAM,CAAC,cAAc,IAAI,EAAE,CAAC;QAChC,GAAG,yBAAyB;KAC7B,CAAC;AACJ,CAAC;AAED,SAAS,qCAAqC,CAAC,MAAsB;IACnE,MAAM,YAAY,GAAG,IAAI,GAAG,EAAO,CAAC;IACpC,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;QAC1B,MAAM,UAAU,GAAG,IAAI,EAAE,UAAU,CAAC;QACpC,IAAI,UAAU;YAAE,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC/C,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,SAAS,gCAAgC,CAAC,IAAS,EAAE,YAA8B;IACjF,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE,KAAK,MAAM;QAAE,OAAO,KAAK,CAAC;IAC5D,IAAI,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACzC,IAAI,IAAI,CAAC,UAAU;QAAE,OAAO,KAAK,CAAC;IAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE,EAAE,CAAC;IAC3C,IAAI,QAAQ,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACjC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAC7E,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,kBAAkB;QAAE,OAAO,KAAK,CAAC;IAC3D,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAC7E,IAAI,IAAI,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAC;IAChC,MAAM,UAAU,GAAG,oBAAoB,CAAC,IAAI,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;IACzE,MAAM,WAAW,GAAG,UAAU,EAAE,WAAW,CAAC;IAC5C,IACE,WAAW,KAAK,yBAAyB;WACtC,WAAW,KAAK,WAAW;WAC3B,WAAW,KAAK,QAAQ;WACxB,WAAW,KAAK,OAAO;WACvB,UAAU,EAAE,cAAc,IAAI,IAAI;WAClC,UAAU,EAAE,MAAM,IAAI,IAAI;WAC1B,UAAU,EAAE,4BAA4B,KAAK,KAAK,EACrD,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,oCAAoC,CAC3C,aAA6D,EAC7D,KAAmB,EACnB,IAAS;IAET,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC;IACrH,MAAM,WAAW,GAAG,IAAI,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACnD,IAAI,OAAO,IAAI,CAAC,EAAE,KAAK,QAAQ;QAAE,WAAW,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;IAC1D,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ;QAAE,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IAChE,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC;IACzC,IAAI,IAAI,CAAC,QAAQ,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACvD,WAAW,CAAC,QAAQ,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC9C,CAAC;IACD,IAAI,IAAI,CAAC,iBAAiB,IAAI,OAAO,IAAI,CAAC,iBAAiB,KAAK,QAAQ,EAAE,CAAC;QACzE,WAAW,CAAC,iBAAiB,GAAG,EAAE,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAChE,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;QAAE,WAAW,CAAC,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;IAClF,8BAA8B,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAClD,IAAI,OAAO,IAAI,CAAC,SAAS,KAAK,UAAU,IAAI,OAAO,WAAW,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;QACzF,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;IAC3C,CAAC;IACD,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ;QAAE,WAAW,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;IACnE,IAAI,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ;QAAE,WAAW,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;IAC/E,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,SAAS,8BAA8B,CAAC,MAAW,EAAE,MAAW;IAC9D,kBAAkB,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IACrD,kBAAkB,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IACrD,kBAAkB,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IACnD,IAAI,MAAM,CAAC,kBAAkB,EAAE,KAAK,EAAE,CAAC;QACrC,MAAM,CAAC,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC;IAChE,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,kBAAkB,GAAG,IAAI,CAAC;IACnC,CAAC;IACD,MAAM,WAAW,GAAG,MAAM,CAAC,YAAY,EAAE,KAAK,EAAE,EAAE,IAAI,MAAM,CAAC,cAAc,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC;IAC3F,IAAI,WAAW,EAAE,CAAC;QAChB,IAAI,MAAM,CAAC,eAAe,IAAI,OAAO,MAAM,CAAC,qBAAqB,KAAK,UAAU,EAAE,CAAC;YACjF,MAAM,CAAC,qBAAqB,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,IAAI,WAAW,CAAC,CAAC;QACrE,CAAC;aAAM,IAAI,OAAO,MAAM,CAAC,cAAc,KAAK,UAAU,EAAE,CAAC;YACvD,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,IAAI,WAAW,EAAE,KAAK,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAW,EAAE,MAAW;IAClD,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM;QAAE,OAAO;IAC/B,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;QAC1C,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACxB,OAAO;IACT,CAAC;IACD,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;IACpB,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;IACpB,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;AACtB,CAAC;AAED,SAAS,4BAA4B,CAAC,IAAS;IAC7C,MAAM,QAAQ,GAAG,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,SAAc,EAAE,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,EAAE,IAAI,CAAC,CAAC;IAC3F,OAAO,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACzF,CAAC;AAED,SAAS,uCAAuC,CAC9C,IAAiC,EACjC,KAAmC,EACnC,SAAc,EACd,MAA2C;IAE3C,MAAM,YAAY,GAAG,mCAAmC,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAC5E,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAe,CAAC;IACnD,MAAM,2BAA2B,GAAG,IAAI,GAAG,EAAe,CAAC;IAC3D,MAAM,yBAAyB,GAAG,IAAI,GAAG,EAAe,CAAC;IACzD,MAAM,eAAe,GAAG,IAAI,GAAG,EAAuB,CAAC;IACvD,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAuB,CAAC;IAC1D,MAAM,cAAc,GAAG,MAAM,CAAC;IAC9B,MAAM,SAAS,GAAgD,CAAC;YAC9D,EAAE,EAAE,cAAc;YAClB,QAAQ,EAAE,IAAI;YACd,IAAI,EAAE,yBAAyB,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC;YAChE,IAAI,EAAE,MAAM;SACb,CAAC,CAAC;IAEH,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;QACvC,MAAM,UAAU,GAAG,mCAAmC,CAAC,WAAW,EAAE,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC9F,mBAAmB,CAAC,GAAG,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IACnD,CAAC;IAED,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;QACvC,MAAM,UAAU,GAAG,mBAAmB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACxD,IAAI,CAAC,UAAU;YAAE,SAAS;QAC1B,MAAM,WAAW,GAAG,kCAAkC,CAAC,WAAW,CAAC;aAChE,GAAG,CAAC,eAAe,CAAC,EAAE,CAAC,qCAAqC,CAAC,eAAe,EAAE,2BAA2B,CAAC,CAAC;aAC3G,MAAM,CAAC,CAAC,UAAU,EAAwB,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QAC9D,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;YACrC,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,IAAI,GAAG,EAAU,CAAC;YACrE,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACxB,eAAe,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YACzC,MAAM,UAAU,GAAG,qCAAqC,CAAC,qCAAqC,CAAC,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,2BAA2B,CAAC,CAAC;iBAC/J,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC,oCAAoC,CAAC,cAAc,EAAE,yBAAyB,CAAC,CAAC;iBACtG,MAAM,CAAC,CAAC,SAAS,EAAuB,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YAC3D,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,IAAI,GAAG,EAAU,CAAC;YACjF,KAAK,MAAM,SAAS,IAAI,UAAU;gBAAE,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACpE,kBAAkB,CAAC,GAAG,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;QACvD,CAAC;QACD,SAAS,CAAC,IAAI,CAAC;YACb,EAAE,EAAE,UAAU;YACd,QAAQ,EAAE,sCAAsC,CAAC,WAAW,EAAE,SAAS,EAAE,mBAAmB,EAAE,cAAc,CAAC;YAC7G,IAAI,EAAE,yBAAyB,CAAC,WAAW,EAAE,UAAU,CAAC;YACxD,IAAI,EAAE,2BAA2B,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW;YACrE,GAAG,+BAA+B,CAAC,WAAW,CAAC;YAC/C,GAAG,kCAAkC,CAAC,WAAW,CAAC;YAClD,GAAG,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACnD,CAAC,CAAC;IACL,CAAC;IAED,MAAM,SAAS,GAAG,CAAC,GAAG,2BAA2B,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAC3F,EAAE;QACF,IAAI,EAAE,yBAAyB,CAAC,eAAe,EAAE,EAAE,CAAC;QACpD,GAAG,yBAAyB,CAAC,eAAe,CAAC;QAC7C,OAAO,EAAE,CAAC,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;QAC7C,UAAU,EAAE,CAAC,GAAG,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;KACpD,CAAC,CAAC,CAAC;IACJ,MAAM,QAAQ,GAAG,CAAC,GAAG,yBAAyB,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QACvF,EAAE;QACF,IAAI,EAAE,yBAAyB,CAAC,cAAc,EAAE,EAAE,CAAC;QACnD,GAAG,yBAAyB,CAAC,cAAc,CAAC;QAC5C,GAAG,+BAA+B,CAAC,cAAc,CAAC;KACnD,CAAC,CAAC,CAAC;IACJ,MAAM,UAAU,GAAG,wCAAwC,CAAC,MAAM,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC;IAE1F,OAAO;QACL,gBAAgB,EAAE,IAAI,CAAC,EAAE;QACzB,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1C,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvD,KAAK,EAAE,SAAS;QAChB,SAAS;QACT,QAAQ;QACR,UAAU;KACX,CAAC;AACJ,CAAC;AAED,SAAS,mCAAmC,CAC1C,SAAc,EACd,MAA2C;IAE3C,MAAM,KAAK,GAAG,IAAI,GAAG,CAAM;QACzB,GAAG,CAAC,MAAM,CAAC,cAAc,IAAI,EAAE,CAAC;QAChC,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;KACzB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IACnB,MAAM,OAAO,GAAU,EAAE,CAAC;IAC1B,MAAM,KAAK,GAAG,CAAC,WAAgB,EAAQ,EAAE;QACvC,KAAK,MAAM,KAAK,IAAI,6BAA6B,CAAC,WAAW,CAAC,EAAE,CAAC;YAC/D,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAAE,SAAS;YAC3D,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACpB,KAAK,CAAC,KAAK,CAAC,CAAC;QACf,CAAC;IACH,CAAC,CAAC;IACF,KAAK,CAAC,SAAS,CAAC,CAAC;IACjB,KAAK,MAAM,WAAW,IAAI,KAAK,EAAE,CAAC;QAChC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,6BAA6B,CAAC,WAAgB;IACrD,MAAM,QAAQ,GAAG,WAAW,EAAE,WAAW,EAAE,EAAE,CAAC;IAC9C,OAAO,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;AACjD,CAAC;AAED,SAAS,mCAAmC,CAAC,WAAgB,EAAE,KAAa;IAC1E,MAAM,UAAU,GAAG,+BAA+B,CAAC,WAAW,CAAC,CAAC;IAChE,MAAM,OAAO,GAAG,UAAU,IAAI,WAAW,EAAE,IAAI,IAAI,WAAW,EAAE,EAAE,IAAI,QAAQ,KAAK,GAAG,CAAC,EAAE,CAAC;IAC1F,OAAO,GAAG,2BAA2B,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,IAAI,kCAAkC,CAAC,OAAO,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;AACrI,CAAC;AAED,SAAS,sCAAsC,CAC7C,WAAgB,EAChB,SAAc,EACd,mBAA6C,EAC7C,cAAsB;IAEtB,MAAM,MAAM,GAAG,WAAW,EAAE,MAAM,IAAI,IAAI,CAAC;IAC3C,IAAI,CAAC,MAAM,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,cAAc,CAAC;IAC3D,OAAO,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,cAAc,CAAC;AAC3D,CAAC;AAED,SAAS,2BAA2B,CAAC,WAAgB;IACnD,OAAO,OAAO,WAAW,EAAE,gBAAgB,KAAK,UAAU,CAAC;AAC7D,CAAC;AAED,SAAS,kCAAkC,CAAC,WAAgB;IAC1D,MAAM,QAAQ,GAAG,WAAW,EAAE,QAAQ,CAAC;IACvC,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,CAAC;IACzB,MAAM,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC;IAC3C,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3D,OAAO,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,CAAC,QAAQ,CAAC,CAAC;AACpB,CAAC;AAED,SAAS,qCAAqC,CAC5C,WAAgB,EAChB,aAAkB,EAClB,UAAkB,EAClB,2BAAqD;IAErD,KAAK,MAAM,QAAQ,IAAI,kCAAkC,CAAC,WAAW,CAAC,EAAE,CAAC;QACvE,IAAI,2BAA2B,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,UAAU;YAAE,OAAO,QAAQ,CAAC;IAChF,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,qCAAqC,CAC5C,eAAoB,EACpB,2BAA6C;IAE7C,IAAI,CAAC,eAAe;QAAE,OAAO,IAAI,CAAC;IAClC,MAAM,QAAQ,GAAG,2BAA2B,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAClE,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,MAAM,EAAE,GAAG,YAAY,kCAAkC,CAAC,yBAAyB,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC,IAAI,2BAA2B,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;IAC5J,2BAA2B,CAAC,GAAG,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;IACrD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,qCAAqC,CAAC,eAA2B;IACxE,IAAI,CAAC,eAAe;QAAE,OAAO,EAAE,CAAC;IAChC,MAAM,QAAQ,GAAG,eAAe,CAAC,iBAAiB,EAAE,EAAE,CAAC;IACvD,OAAO,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACjE,CAAC;AAED,SAAS,oCAAoC,CAC3C,cAAmB,EACnB,yBAA2C;IAE3C,IAAI,CAAC,cAAc;QAAE,OAAO,IAAI,CAAC;IACjC,MAAM,QAAQ,GAAG,yBAAyB,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAC/D,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,MAAM,IAAI,GAAG,+BAA+B,CAAC,cAAc,CAAC,CAAC,GAAG;WAC3D,yBAAyB,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;IAC1D,MAAM,EAAE,GAAG,WAAW,kCAAkC,CAAC,IAAI,CAAC,IAAI,yBAAyB,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;IACvG,yBAAyB,CAAC,GAAG,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;IAClD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,wCAAwC,CAAC,eAAsB;IACtE,OAAO,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,cAAc,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QACrE,EAAE,EAAE,aAAa,kCAAkC,CAAC,yBAAyB,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE;QAC1H,IAAI,EAAE,yBAAyB,CAAC,cAAc,EAAE,aAAa,KAAK,GAAG,CAAC,EAAE,CAAC;KAC1E,CAAC,CAAC,CAAC;AACN,CAAC;AAED,SAAS,yBAAyB,CAAC,aAAkB,EAAE,QAAgB;IACrE,MAAM,IAAI,GAAG,aAAa,EAAE,IAAI,IAAI,aAAa,EAAE,EAAE,CAAC;IACtD,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC1E,CAAC;AAED,SAAS,yBAAyB,CAAC,aAAkB;IACnD,MAAM,IAAI,GAAG,aAAa,EAAE,YAAY,EAAE,EAAE,CAAC;IAC7C,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAC9E,CAAC;AAED,SAAS,+BAA+B,CAAC,cAAmB;IAC1D,MAAM,GAAG,GAAG,cAAc,EAAE,GAAG,IAAI,cAAc,EAAE,IAAI,CAAC;IACxD,OAAO,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAC1E,CAAC;AAED,SAAS,+BAA+B,CAAC,WAAgB;IACvD,MAAM,UAAU,GAAG,+BAA+B,CAAC,WAAW,CAAC,CAAC;IAChE,OAAO,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAC1C,CAAC;AAED,SAAS,kCAAkC,CAAC,WAAgB;IAC1D,MAAM,aAAa,GAAG,WAAW,EAAE,QAAQ,EAAE,gBAAgB,EAAE,aAAa,CAAC;IAC7E,OAAO,OAAO,aAAa,KAAK,QAAQ,IAAI,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,aAAa,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAClH,CAAC;AAED,SAAS,kCAAkC,CAAC,KAAa;IACvD,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC;AACvG,CAAC;AAED,SAAS,sCAAsC,CAC7C,QAA+D;IAE/D,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3B,OAAO;QACL,GAAG,QAAQ;QACX,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjC,GAAG,IAAI;YACP,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACpE,CAAC,CAAC;QACH,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACzC,GAAG,IAAI;YACP,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;YAC1B,UAAU,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC;SACjC,CAAC,CAAC;QACH,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;QACtD,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;KAC3D,CAAC;AACJ,CAAC;AAED,SAAS,+BAA+B,CAAC,MAA2C;IAClF,KAAK,MAAM,cAAc,IAAI,MAAM,CAAC,eAAe,IAAI,EAAE,EAAE,CAAC;QAC1D,cAAc,CAAC,OAAO,EAAE,EAAE,CAAC;IAC7B,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;QAChF,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,uBAAuB,CAC9B,OAA6B,EAC7B,KAAmB,EACnB,IAAiC,EACjC,UAAsC;IAEtC,IAAI,IAAI,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;QAClC,sBAAsB,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;QACzD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,IAAI,CAAC,WAAW,KAAK,OAAO,EAAE,CAAC;QACjC,IAAI,IAAI,CAAC,KAAK,EAAE,IAAI,KAAK,aAAa,EAAE,CAAC;YACvC,gCAAgC,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;QACrE,CAAC;aAAM,CAAC;YACN,gCAAgC,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;QACrE,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,sBAAsB,CAC7B,OAA6B,EAC7B,KAAmB,EACnB,IAAiC,EACjC,UAAsC;IAEtC,MAAM,WAAW,GAAI,OAAe,CAAC,WAAW,CAAC;IACjD,MAAM,gBAAgB,GAAI,OAAe,CAAC,gBAAgB,CAAC;IAC3D,MAAM,MAAM,GAAG,kBAAkB,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC5D,IAAI,CAAC,WAAW,IAAI,CAAC,gBAAgB;QAAE,OAAO;IAE9C,MAAM,QAAQ,GAAG,8CAA8C,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC7E,MAAM,IAAI,GAAG,WAAW,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,EAAE,eAAe,EAAE;QAC5D,KAAK,EAAE,IAAI;QACX,MAAM,EAAE,IAAI;QACZ,KAAK,EAAE,IAAI;KACZ,EAAE,KAAK,CAAC,CAAC;IACV,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC;IAC9B,IAAI,CAAC,QAAQ,GAAG,wBAAwB,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC7F,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC,GAAG,IAAI,CAAC,EAAE,wBAAwB,EAAE,KAAK,CAAC,CAAC;IACjF,QAAQ,CAAC,YAAY,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAClD,QAAQ,CAAC,aAAa,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IACrD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IACzB,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzC,UAAU,CAAC,aAAa,GAAG,CAAC,IAAI,CAAC,CAAC;IAElC,MAAM,OAAO,GAAG,wBAAwB,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;IACzE,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC;QACjC,OAAO,CAAC,UAAU,GAAG,KAAK,CAAC;IAC7B,CAAC;AACH,CAAC;AAED,SAAS,gCAAgC,CACvC,OAA6B,EAC7B,KAAmB,EACnB,IAAiC,EACjC,UAAsC;IAEtC,MAAM,WAAW,GAAI,OAAe,CAAC,WAAW,CAAC;IACjD,MAAM,gBAAgB,GAAI,OAAe,CAAC,gBAAgB,CAAC;IAC3D,MAAM,gBAAgB,GAAI,OAAe,CAAC,gBAAgB,CAAC;IAC3D,MAAM,OAAO,GAAG,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAC/D,MAAM,MAAM,GAAG,kBAAkB,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC5D,IAAI,CAAC,WAAW,IAAI,CAAC,gBAAgB;QAAE,OAAO;IAC9C,MAAM,QAAQ,GAAG,sCAAsC,CACrD,IAAI,CAAC,KAAK,EAAE,IAAI,KAAK,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAC5D,CAAC;IACF,MAAM,SAAS,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAEhG,IAAI,gBAAgB,EAAE,CAAC;QACrB,MAAM,KAAK,GAAG,IAAI,gBAAgB,CAAC,GAAG,IAAI,CAAC,EAAE,mBAAmB,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;QACpF,KAAK,CAAC,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;QACrC,KAAK,CAAC,OAAO,GAAG,IAAI,MAAM,CACxB,QAAQ,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,EAC7B,QAAQ,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,EAC7B,QAAQ,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,CAC9B,CAAC;QACF,KAAK,CAAC,QAAQ,GAAG,wBAAwB,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC,CAAC;QACvG,KAAK,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC;QAC1C,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtC,iCAAiC,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,aAAa;QAAE,OAAO;IAEpC,MAAM,MAAM,GAAG,WAAW,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,EAAE,cAAc,EAAE;QAC7D,IAAI,EAAE,IAAI;KACX,EAAE,KAAK,CAAC,CAAC;IACV,MAAM,CAAC,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC;IAChC,MAAM,CAAC,QAAQ,GAAG,wBAAwB,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC9F,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC,GAAG,IAAI,CAAC,EAAE,uBAAuB,EAAE,KAAK,CAAC,CAAC;IAChF,QAAQ,CAAC,YAAY,GAAG,IAAI,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAClD,QAAQ,CAAC,aAAa,GAAG,IAAI,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACrD,QAAQ,CAAC,aAAa,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IACrD,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzC,UAAU,CAAC,aAAa,GAAG,CAAC,MAAM,CAAC,CAAC;IAEpC,MAAM,KAAK,GAAG,yBAAyB,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;IAClF,IAAI,KAAK,EAAE,CAAC;QACV,KAAK,CAAC,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC;QAC/B,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC;IAC3B,CAAC;AACH,CAAC;AAED,SAAS,wBAAwB,CAC/B,OAA6B,EAC7B,KAAmB,EACnB,IAAiC,EACjC,UAAsC,EACtC,gBAAyB;IAEzB,MAAM,IAAI,GAAG,4BAA4B,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,gBAAgB,CAAC,CAAC;IAClF,IAAI,CAAC,IAAI;QAAE,OAAO;IAClB,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC;IAC9B,UAAU,CAAC,aAAa,GAAG,CAAC,IAAI,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,yBAAyB,CAChC,OAAuC,EACvC,IAAiC,EACjC,UAAsC;IAEtC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IACnC,MAAM,IAAI,GAAG,6BAA6B,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC1E,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,wBAAwB,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;QACjE,OAAO;IACT,CAAC;IACD,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC;IAC9B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;IACvB,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,0CAA0C,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QAChF,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAChD,CAAC;IACD,UAAU,CAAC,aAAa,GAAG,CAAC,IAAI,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,sBAAsB,CAC7B,IAAiC,EACjC,UAAsC;IAEtC,MAAM,OAAO,GAAG,kCAAkC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACjE,IAAI,CAAC,OAAO;QAAE,OAAO;IACrB,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,aAAa,EAAE,CAAC;QAC5C,0BAA0B,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC;AACH,CAAC;AAED,SAAS,kCAAkC,CACzC,OAA0D;IAE1D,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC1B,MAAM,OAAO,GAAiC,EAAE,CAAC;IACjD,IAAI,OAAO,OAAO,CAAC,aAAa,KAAK,SAAS;QAAE,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC;IACxF,IAAI,OAAO,OAAO,CAAC,YAAY,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;QACtF,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,YAAY,CAAC;IACvC,CAAC;IACD,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,OAAO,CAAC,YAAY,CAAC;QACnC,OAAO,CAAC,KAAK,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC;IACzD,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;AAC1D,CAAC;AAED,SAAS,6BAA6B,CACpC,OAA6B,EAC7B,KAAmB,EACnB,IAAiC,EACjC,OAAmE;IAEnE,MAAM,WAAW,GAAI,OAAe,CAAC,WAAW,CAAC;IACjD,MAAM,gBAAgB,GAAI,OAAe,CAAC,gBAAgB,CAAC;IAC3D,MAAM,WAAW,GAAI,OAAe,CAAC,WAAW,CAAC;IACjD,MAAM,MAAM,GAAG,kBAAkB,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC5D,IAAI,CAAC,WAAW,IAAI,CAAC,gBAAgB;QAAE,OAAO,IAAI,CAAC;IACnD,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC;IACpC,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC,EAAE,IAAI,KAAK,IAAI,WAAW,YAAY,CAAC;IAC5D,MAAM,IAAI,GAAG,KAAK,KAAK,QAAQ;QAC7B,CAAC,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC;QACxE,CAAC,CAAC,KAAK,KAAK,OAAO;YACjB,CAAC,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC;YACnF,CAAC,CAAC,KAAK,KAAK,SAAS;gBACnB,CAAC,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,EAAE,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC;gBACzG,CAAC,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IAC1D,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,KAAK,UAAU,IAAI,CAAC,WAAW;QACrE,CAAC,CAAC,IAAI,gBAAgB,CAAC,GAAG,IAAI,CAAC,EAAE,qBAAqB,EAAE,KAAK,CAAC;QAC9D,CAAC,CAAC,IAAI,WAAW,CAAC,GAAG,IAAI,CAAC,EAAE,qBAAqB,EAAE,KAAK,CAAC,CAAC;IAC5D,IAAI,aAAa,IAAI,QAAQ;QAAE,QAAQ,CAAC,WAAW,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;;QAC9E,QAAQ,CAAC,YAAY,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAC1D,IAAI,eAAe,IAAI,QAAQ;QAAE,QAAQ,CAAC,aAAa,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACvF,IAAI,UAAU,IAAI,QAAQ;QAAE,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAC;IAClD,IAAI,WAAW,IAAI,QAAQ;QAAE,QAAQ,CAAC,SAAS,GAAG,CAAC,CAAC;IACpD,IAAI,KAAK,KAAK,OAAO;QAAE,QAAQ,CAAC,eAAe,GAAG,KAAK,CAAC;IACxD,oCAAoC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,OAAO,EAAE,iBAAiB,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;IAC9I,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IACzB,8BAA8B,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC3C,IAAI,CAAC,QAAQ,GAAG,wBAAwB,CAAC,IAAI,CAAC,EAAE,EAAE;QAChD,WAAW,EAAE,WAAW;QACxB,cAAc,EAAE,KAAK;QACrB,GAAG,8BAA8B,CAAC,IAAI,CAAC;KACxC,CAAC,CAAC;IACH,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,6CAA6C,CACpD,OAAuC,EACvC,IAAiC,EACjC,SAAc,EACd,MAAa,EACb,8BAAwE;IAExE,MAAM,YAAY,GAAG,oCAAoC,CAAC,IAAI,CAAC,CAAC;IAChE,MAAM,cAAc,GAAG,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC;IACpD,MAAM,eAAe,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;IAChD,IAAI,CAAC,cAAc,IAAI,CAAC,eAAe;QAAE,OAAO,EAAE,CAAC;IACnD,MAAM,eAAe,GAAc,EAAE,CAAC;IACtC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAW,CAAC;IACrC,IAAI,cAAc,EAAE,CAAC;QACnB,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;YAC1B,MAAM,QAAQ,GAAG,kCAAkC,CAAC,IAAI,CAAC,CAAC;YAC1D,MAAM,iBAAiB,GAAG,4BAA4B,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;YACjF,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,uCAAuC,CAAC,OAAO,EAAE;oBAC/C,gBAAgB,EAAE,IAAI,CAAC,EAAE;oBACzB,MAAM,EAAE,aAAa;oBACrB,OAAO,EAAE,KAAK;oBACd,SAAS,EAAE,MAAM;oBACjB,oBAAoB,EAAE,iBAAiB;oBACvC,iBAAiB;oBACjB,cAAc,EAAE,wFAAwF;iBACzG,CAAC,CAAC;gBACH,SAAS;YACX,CAAC;YACD,IAAI,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;gBAAE,SAAS;YACtC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACxB,oCAAoC,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;YACpF,uCAAuC,CAAC,OAAO,EAAE;gBAC/C,gBAAgB,EAAE,IAAI,CAAC,EAAE;gBACzB,MAAM,EAAE,aAAa;gBACrB,OAAO,EAAE,IAAI;gBACb,SAAS,EAAE,MAAM;gBACjB,oBAAoB,EAAE,UAAU;gBAChC,iBAAiB;gBACjB,kBAAkB,EAAE,0BAA0B,CAAC,QAAQ,CAAC;gBACxD,kBAAkB,EAAE,0BAA0B,CAAC,QAAQ,CAAC;aACzD,CAAC,CAAC;QACL,CAAC;QACD,IAAI,SAAS,CAAC,IAAI,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChD,uCAAuC,CAAC,OAAO,EAAE;gBAC/C,gBAAgB,EAAE,IAAI,CAAC,EAAE;gBACzB,MAAM,EAAE,aAAa;gBACrB,OAAO,EAAE,KAAK;gBACd,SAAS,EAAE,MAAM;gBACjB,oBAAoB,EAAE,iBAAiB;gBACvC,iBAAiB,EAAE,IAAI;gBACvB,cAAc,EAAE,sFAAsF;aACvG,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,IAAI,CAAC,eAAe;QAAE,OAAO,eAAe,CAAC;IAC7C,MAAM,cAAc,GAAG,4BAA4B,CAAC,MAAM,CAAC,CAAC;IAC5D,MAAM,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,gCAAgC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACnG,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;QACvC,MAAM,eAAe,GAAG,8BAA8B,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE;YAC/E,mBAAmB,EAAE,IAAI;SAC1B,CAAC,CAAC;QACH,MAAM,eAAe,GAAG,qCAAqC,CAAC,eAAe,CAAC,CAAC;QAC/E,IAAI,eAAe,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YAC1C,2CAA2C,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,WAAW,EAAE;gBACzE,OAAO,EAAE,KAAK;gBACd,SAAS,EAAE,eAAe,CAAC,SAAS,IAAI,MAAM;gBAC9C,iBAAiB,EAAE,IAAI;gBACvB,oBAAoB,EAAE,kBAAkB;gBACxC,GAAG,eAAe;gBAClB,cAAc,EAAE,eAAe,CAAC,UAAU,CAAC,OAAO;aACnD,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QACD,MAAM,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,WAAW,CAAC;QAChD,MAAM,aAAa,GAAG,eAAe,CAAC,SAAS,CAAC,aAAa,CAAC;QAC9D,IAAI,CAAC,kCAAkC,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9C,2CAA2C,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,WAAW,EAAE;gBACzE,OAAO,EAAE,KAAK;gBACd,SAAS,EAAE,eAAe,CAAC,SAAS;gBACpC,iBAAiB,EAAE,aAAa;gBAChC,oBAAoB,EAAE,iBAAiB;gBACvC,GAAG,eAAe;gBAClB,cAAc,EAAE,0FAA0F;aAC3G,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QACD,MAAM,kBAAkB,GAAG,mCAAmC,CAC5D,IAAI,EACJ,cAAc,EACd,WAAW,CAAC,IAAI,EAChB,aAAa,EACb;YACE,gBAAgB,EAAE,IAAI,CAAC,EAAE;YACzB,+BAA+B,EAAE,wCAAwC,CACvE,WAAW,CAAC,IAAI,EAChB,eAAe,CAChB;YACD,sCAAsC,EAAE,uCAAuC,CAAC,WAAW,CAAC,IAAI,EAAE,kBAAkB,CAAC;SACtH,CACF,CAAC;QACF,MAAM,cAAc,GAAG,kBAAkB,CAAC,MAAM,EAAE,QAAQ,IAAI,kCAAkC,CAAC,IAAI,CAAC,CAAC;QACvG,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,CAAC;YAC/B,2CAA2C,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,WAAW,EAAE;gBACzE,OAAO,EAAE,KAAK;gBACd,SAAS,EAAE,eAAe,CAAC,SAAS;gBACpC,iBAAiB,EAAE,aAAa;gBAChC,oBAAoB,EAAE,kBAAkB,CAAC,oBAAoB;gBAC7D,kBAAkB,EAAE,0BAA0B,CAAC,cAAc,CAAC;gBAC9D,kBAAkB,EAAE,0BAA0B,CAAC,cAAc,CAAC;gBAC9D,GAAG,eAAe;gBAClB,cAAc,EAAE,kBAAkB,CAAC,cAAc;aAClD,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QACD,MAAM,MAAM,GAAG,kBAAkB,CAAC,MAAM,CAAC;QACzC,eAAe,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;QAChD,oCAAoC,CAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;QACpF,2CAA2C,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,WAAW,EAAE;YACzE,OAAO,EAAE,IAAI;YACb,SAAS,EAAE,eAAe,CAAC,SAAS;YACpC,iBAAiB,EAAE,aAAa;YAChC,oBAAoB,EAAE,kBAAkB,CAAC,oBAAoB;YAC7D,kBAAkB,EAAE,0BAA0B,CAAC,MAAM,CAAC,QAAQ,CAAC;YAC/D,kBAAkB,EAAE,0BAA0B,CAAC,MAAM,CAAC,QAAQ,CAAC;YAC/D,GAAG,eAAe;YAClB,GAAG,CAAC,eAAe,CAAC,UAAU,EAAE,QAAQ,KAAK,SAAS;gBACpD,CAAC,CAAC,EAAE,cAAc,EAAE,eAAe,CAAC,UAAU,CAAC,OAAO,EAAE;gBACxD,CAAC,CAAC,EAAE,CAAC;SACR,CAAC,CAAC;IACL,CAAC;IACD,OAAO,eAAe,CAAC;AACzB,CAAC;AAED,SAAS,qCAAqC,CAC5C,UAA6C;IAS7C,OAAO;QACL,qBAAqB,EAAE,UAAU,CAAC,MAAM;QACxC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;YAC1B,mBAAmB,EAAE,UAAU,CAAC,UAAU,CAAC,IAAI;YAC/C,uBAAuB,EAAE,UAAU,CAAC,UAAU,CAAC,QAAQ;SACxD,CAAC,CAAC,CAAC,EAAE,CAAC;QACP,iBAAiB,EAAE,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,WAAW,CAAC;QAChF,GAAG,CAAC,UAAU,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACpF,CAAC;AACJ,CAAC;AAED,SAAS,oCAAoC,CAC3C,OAAwF,EACxF,QAAiB,EACjB,OAAiD;IAEjD,IAAI,CAAC,OAAO;QAAE,OAAO;IACrB,2CAA2C,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE;QAC5E,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;KAC7C,CAAC,CAAC;AACL,CAAC;AAED,SAAS,2CAA2C,CAClD,OAAuC,EACvC,gBAAwB,EACxB,WAA0C,EAC1C,UAAiJ;IAEjJ,uCAAuC,CAAC,OAAO,EAAE;QAC/C,gBAAgB;QAChB,MAAM,EAAE,WAAW,CAAC,MAAM;QAC1B,MAAM,EAAE,WAAW,CAAC,IAAI,CAAC,MAAM;QAC/B,aAAa,EAAE,WAAW,CAAC,IAAI,CAAC,aAAa;QAC7C,cAAc,EAAE,WAAW,CAAC,IAAI,CAAC,cAAc;QAC/C,GAAG,UAAU;KACd,CAAC,CAAC;AACL,CAAC;AAED,SAAS,uCAAuC,CAC9C,OAAuC,EACvC,UAA4D;IAE5D,OAAO,CAAC,2BAA2B,EAAE,CAAC,UAAU,CAAC,CAAC;IAClD,IAAI,CAAC,UAAU,CAAC,cAAc;QAAE,OAAO;IACvC,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,+DAA+D,EAAE;QACtF,gBAAgB,EAAE,UAAU,CAAC,gBAAgB;QAC7C,MAAM,EAAE,UAAU,CAAC,MAAM;QACzB,MAAM,EAAE,UAAU,CAAC,MAAM;QACzB,aAAa,EAAE,UAAU,CAAC,aAAa;QACvC,iBAAiB,EAAE,UAAU,CAAC,iBAAiB;QAC/C,SAAS,EAAE,UAAU,CAAC,SAAS;QAC/B,oBAAoB,EAAE,UAAU,CAAC,oBAAoB;QACrD,cAAc,EAAE,UAAU,CAAC,cAAc;KAC1C,CAAC,CAAC;AACL,CAAC;AAED,SAAS,0BAA0B,CAAC,QAAiB;IACnD,MAAM,IAAI,GAAI,QAAgB,EAAE,IAAI,CAAC;IACrC,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AAC3E,CAAC;AAED,SAAS,0BAA0B,CAAC,QAAiB;IACnD,MAAM,YAAY,GAAI,QAAgB,EAAE,YAAY,CAAC;IACrD,MAAM,SAAS,GAAG,OAAO,YAAY,KAAK,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1F,OAAO,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AAC1F,CAAC;AAED,SAAS,oCAAoC,CAC3C,IAA4E;IAE5E,MAAM,QAAQ,GAAoC,EAAE,CAAC;IACrD,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,0BAA0B,IAAI,EAAE,EAAE,CAAC;QAC5D,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO,CAAC;QACjC,MAAM,IAAI,GAAG,sCAAsC,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QAC5E,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI;YAAE,SAAS;QAChC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,sCAAsC,CAC7C,KAA+D,EAC/D,gBAAyB;IAEzB,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACrD,MAAM,aAAa,GAAG,OAAO,KAAK,CAAC,aAAa,KAAK,QAAQ;QAC3D,CAAC,CAAC,gCAAgC,CAAC,KAAK,CAAC,aAAa,EAAE,EAAE,gBAAgB,EAAE,CAAC;QAC7E,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,MAAM,GAAG,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAClG,IAAI,CAAC,MAAM,IAAI,CAAC,aAAa;QAAE,OAAO,IAAI,CAAC;IAC3C,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9F,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAmB,CAAC,CAAC,CAAC,SAAS,CAAC;IAC5F,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC;QACtD,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC9E,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAmB,CAAC,CAAC,CAAC,SAAS,CAAC;IAC5F,MAAM,cAAc,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,cAAwB,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3G,MAAM,mBAAmB,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,mBAA6B,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1H,MAAM,qBAAqB,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC;QACtE,CAAC,CAAC,KAAK,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACtF,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,YAAY,GAAG,OAAO,KAAK,CAAC,YAAY,KAAK,QAAQ,IAAI,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1H,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC;QACtD,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAC1H,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,aAAuB,CAAC,CAAC,CAAC,SAAS,CAAC;IACvG,MAAM,WAAW,GAAG,qCAAqC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAC7E,OAAO;QACL,MAAM;QACN,aAAa;QACb,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3B,GAAG,CAAC,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3C,GAAG,CAAC,aAAa,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvE,GAAG,CAAC,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3C,GAAG,CAAC,cAAc,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrD,GAAG,CAAC,mBAAmB,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,mBAAmB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,GAAG,CAAC,qBAAqB,IAAI,qBAAqB,CAAC,MAAM,GAAG,CAAC;YAC3D,CAAC,CAAC,EAAE,qBAAqB,EAAE;YAC3B,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzC,GAAG,CAAC,aAAa,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvE,GAAG,CAAC,aAAa,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnD,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvC,GAAG,EAAE,MAAM,IAAI,aAAa;QAC5B,uBAAuB,EAAE,aAAa;QACtC,QAAQ,EAAE,mCAAmC,CAAC,aAAa,EAAE,EAAE,gBAAgB,EAAE,CAAC;KACnF,CAAC;AACJ,CAAC;AAED,SAAS,qCAAqC,CAAC,KAAc;IAC3D,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAClF,MAAM,MAAM,GAAG,KAAgC,CAAC;IAChD,MAAM,GAAG,GAAG,qCAAqC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC9D,MAAM,GAAG,GAAG,qCAAqC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC9D,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC;IACnC,OAAO;QACL,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvB,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACxB,CAAC;AACJ,CAAC;AAED,SAAS,qCAAqC,CAAC,KAAc;IAC3D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IAChE,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1D,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IAClE,OAAO,KAAiC,CAAC;AAC3C,CAAC;AAED,SAAS,8CAA8C,CACrD,QAAa,EACb,gBAAwB;IAExB,MAAM,UAAU,GAAG,qCAAqC,CAAC,QAAQ,EAAE;QACjE,eAAe,EAAE,IAAI,CAAC,EAAE;YACtB,MAAM,OAAO,GAAG,2BAA2B,CAAC,IAAI,CAAC,CAAC;YAClD,OAAO,OAAO,IAAI,IAAI;gBACpB,CAAC,CAAC,IAAI;gBACN,CAAC,CAAC,gCAAgC,CAAC,OAAO,EAAE,EAAE,gBAAgB,EAAE,CAAC,CAAC;QACtE,CAAC;KACF,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACnB,GAAG,SAAS;QACZ,aAAa,EAAE,gCAAgC,CAAC,SAAS,CAAC,aAAa,EAAE,EAAE,gBAAgB,EAAE,CAAC;QAC9F,GAAG,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC,CAAC;YACjC,kBAAkB,EAAE,SAAS,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAC5D,gCAAgC,CAAC,KAAK,EAAE,EAAE,gBAAgB,EAAE,CAAC,CAC9D,CAAC;SACH,CAAC,CAAC,CAAC,EAAE,CAAC;KACR,CAAC,CAAC,CAAC;IACJ,MAAM,KAAK,GAAG,IAAI,GAAG,EAA6C,CAAC;IACnE,OAAO;QACL,OAAO,CAAC,IAAI,EAAE,OAAO,GAAG,EAAE;YACxB,MAAM,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,KAAK,IAAI,CAAC;YACjE,MAAM,QAAQ,GAAG,+CAA+C,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC;YAC5F,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACnC,IAAI,MAAM;gBAAE,OAAO,MAAM,CAAC;YAC1B,MAAM,UAAU,GAAG,oBAAoB,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,mBAAmB,EAAE,CAAC,CAAC;YACnF,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;YAChC,OAAO,UAAU,CAAC;QACpB,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,+CAA+C,CACtD,IAAsC,EACtC,mBAA4B;IAE5B,OAAO,IAAI,CAAC,SAAS,CAAC;QACpB,mBAAmB;QACnB,IAAI,CAAC,aAAa;QAClB,IAAI,CAAC,SAAS,IAAI,IAAI;QACtB,IAAI,CAAC,aAAa,IAAI,IAAI;QAC1B,IAAI,CAAC,SAAS,IAAI,IAAI;QACtB,IAAI,CAAC,cAAc,IAAI,IAAI;QAC3B,IAAI,CAAC,mBAAmB,IAAI,IAAI;QAChC,IAAI,CAAC,qBAAqB,IAAI,IAAI;KACnC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,4BAA4B,CAAC,IAAS,EAAE,QAAa,EAAE,gBAAyB;IACvF,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IACvD,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAI,OAAO,GAAG,IAAI,CAAC;IACnB,OAAO,OAAO,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACvC,MAAM,OAAO,GAAG,2BAA2B,CAAC,OAAO,CAAC,CAAC;QACrD,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QAC1B,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvB,OAAO,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC;IACnC,CAAC;IACD,IAAI,OAAO,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACtC,OAAO,gCAAgC,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,gBAAgB,EAAE,CAAC,CAAC;AAC9F,CAAC;AAED,SAAS,2BAA2B,CAAC,IAAS;IAC5C,MAAM,aAAa,GAAG,+BAA+B,CAAC,IAAI,CAAC,CAAC;IAC5D,IAAI,aAAa;QAAE,OAAO,aAAa,CAAC;IACxC,MAAM,UAAU,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;IAC1C,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,OAAO,SAAS,KAAK,QAAQ;YAAE,SAAS;QAC5C,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC;QACjC,IAAI,OAAO;YAAE,OAAO,OAAO,CAAC;IAC9B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,+BAA+B,CAAC,UAAkB,EAAE,aAAqB;IAChF,OAAO,GAAG,UAAU,GAAG,8BAA8B,GAAG,kBAAkB,CAAC,aAAa,CAAC,EAAE,CAAC;AAC9F,CAAC;AAED,SAAS,sCAAsC,CAC7C,KAAmC,EACnC,IAAS,EACT,aAAqB,EACrB,8BAAwE,EACxE,sBAA2C,EAC3C,gBAAyB;IAEzB,MAAM,KAAK,GAAG,wCAAwC,CACpD,gCAAgC,CAAC,KAAK,EAAE,gBAAgB,CAAC,EACzD,IAAI,EACJ,8BAA8B,EAC9B,sBAAsB,CACvB,CAAC;IACF,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,aAAa,CAAC;AACxC,CAAC;AAED,SAAS,wCAAwC,CAC/C,aAA0D,EAC1D,IAAS,EACT,8BAAwE,EACxE,sBAA2C;IAE3C,OAAO,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;QACjC,MAAM,UAAU,GAAG,8BAA8B,CAAC,OAAO,CAAC,IAAI,EAAE;YAC9D,mBAAmB,EAAE,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;SAC7D,CAAC,CAAC;QACH,OAAO,UAAU,CAAC,MAAM,KAAK,UAAU,IAAI,UAAU,CAAC,MAAM,CAAC,WAAW,KAAK,IAAI,CAAC;IACpF,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,yCAAyC,CAChD,OAAuC,EACvC,IAAiC,EACjC,UAAsC,EACtC,IAAS,EACT,aAAqB,EACrB,aAA0D,EAC1D,8BAAwE,EACxE,sBAA2C;IAE3C,MAAM,cAAc,GAAG,wCAAwC,CAC7D,aAAa,EACb,IAAI,EACJ,8BAA8B,EAC9B,sBAAsB,CACvB;SACE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;IACzD,IAAI,cAAc,CAAC,MAAM,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IAC1C,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;IACvE,IAAI,SAAS,CAAC,MAAM,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IAErC,MAAM,OAAO,GAAU,EAAE,CAAC;IAC1B,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;IACzC,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;QAClC,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;QAC3C,IAAI,cAAc,IAAI,IAAI,IAAI,cAAc,GAAG,CAAC;YAAE,SAAS;QAC3D,MAAM,OAAO,GAAG,SAAS,CAAC,cAAc,CAAC,CAAC;QAC1C,IAAI,CAAC,OAAO;YAAE,SAAS;QACvB,MAAM,eAAe,GAAG,+BAA+B,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3E,IAAI,cAAc,CAAC,GAAG,CAAC,eAAe,CAAC;YAAE,SAAS;QAClD,MAAM,KAAK,GAAG,qCAAqC,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE;YAChF,eAAe;YACf,aAAa;YACb,gBAAgB,EAAE,IAAI,CAAC,GAAG;YAC1B,cAAc;SACf,CAAC,CAAC;QACH,IAAI,CAAC,KAAK;YAAE,SAAS;QACrB,cAAc,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QACpC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpB,UAAU,CAAC,eAAe,GAAG,UAAU,CAAC,eAAe,IAAI,EAAE,CAAC;QAC9D,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvC,6CAA6C,CAAC,UAAU,EAAE,eAAe,EAAE,IAAI,CAAC,CAAC;QACjF,IAAI,KAAK,CAAC,QAAQ;YAAE,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACrE,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,gDAAgD,CACvD,IAAS,EACT,aAA0D,EAC1D,8BAAwE,EACxE,sBAA2C,EAC3C,cAAsB,EACtB,iBAAsC;IAEtC,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;IACvE,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACtC,IAAI,CAAC,IAAI,EAAE,gBAAgB,EAAE,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACxD,MAAM,cAAc,GAAG,wCAAwC,CAC7D,aAAa,EACb,IAAI,EACJ,8BAA8B,EAC9B,sBAAsB,CACvB;SACE,MAAM,CAAC,CAAC,IAAI,EAAyE,EAAE,CAAC,CACvF,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,CACtC,CAAC;SACD,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC;IACrE,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,IAAI,cAAc,GAAG,CAAC;QAAE,OAAO,cAAc,CAAC,CAAC,CAAE,CAAC;IACjF,IAAI,cAAc,CAAC,MAAM,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5C,IAAI,cAAc,GAAG,cAAc,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAExD,MAAM,QAAQ,GAAG,cAAc,CAAC,CAAC,CAAC,EAAE,QAAQ,IAAI,EAAE,CAAC;IACnD,MAAM,OAAO,GAAG,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACrD,iBAAiB,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC;IAE7C,OAAO,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,cAAc,KAAK,OAAO,CAAC,IAAI,cAAc,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC;AACzG,CAAC;AAED,SAAS,+CAA+C,CACtD,OAAuC,EACvC,IAAiC,EACjC,UAAsC,EACtC,IAAS,EACT,aAAqB,EACrB,aAA0D,EAC1D,8BAAwE,EACxE,sBAA2C,EAC3C,cAAsB;IAEtB,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;IACvE,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IACpC,MAAM,cAAc,GAAG,wCAAwC,CAC7D,aAAa,EACb,IAAI,EACJ,8BAA8B,EAC9B,sBAAsB,CACvB;SACE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC;SAC3E,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,cAAc,IAAI,CAAC,CAAC,CAAC,CAAC;IACnF,IAAI,cAAc,CAAC,MAAM,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IAC1C,IAAI,cAAc,IAAI,cAAc,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IAEvD,MAAM,OAAO,GAAU,EAAE,CAAC;IAC1B,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;IACzC,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;QAClC,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;QAC3C,IAAI,cAAc,IAAI,IAAI,IAAI,cAAc,GAAG,CAAC;YAAE,SAAS;QAC3D,MAAM,eAAe,GAAG,+BAA+B,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3E,IAAI,cAAc,CAAC,GAAG,CAAC,eAAe,CAAC;YAAE,SAAS;QAClD,MAAM,KAAK,GAAG,6CAA6C,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;YACrF,eAAe;YACf,aAAa;YACb,gBAAgB,EAAE,IAAI,CAAC,GAAG;YAC1B,cAAc;SACf,CAAC,CAAC;QACH,IAAI,CAAC,KAAK;YAAE,SAAS;QACrB,cAAc,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QACpC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpB,UAAU,CAAC,eAAe,GAAG,UAAU,CAAC,eAAe,IAAI,EAAE,CAAC;QAC9D,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvC,6CAA6C,CAAC,UAAU,EAAE,eAAe,EAAE,IAAI,CAAC,CAAC;QACjF,IAAI,KAAK,CAAC,QAAQ;YAAE,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACrE,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,6CAA6C,CACpD,UAAsC,EACtC,eAAuB,EACvB,UAAe;IAEf,UAAU,CAAC,4BAA4B,GAAG,UAAU,CAAC,4BAA4B,IAAI,EAAE,CAAC;IACxF,MAAM,QAAQ,GAAG,UAAU,CAAC,4BAA4B,CAAC,IAAI,CAC3D,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,eAAe,KAAK,eAAe,CACrD,CAAC;IACF,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YAChD,QAAQ,CAAC,YAAY,GAAG,CAAC,GAAG,QAAQ,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QACjE,CAAC;QACD,OAAO;IACT,CAAC;IACD,UAAU,CAAC,4BAA4B,CAAC,IAAI,CAAC;QAC3C,eAAe;QACf,YAAY,EAAE,CAAC,UAAU,CAAC;KAC3B,CAAC,CAAC;AACL,CAAC;AAED,SAAS,6CAA6C,CACpD,OAAuC,EACvC,IAAiC,EACjC,UAAe,EACf,IAAsC,EACtC,QAKC;IAED,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IACnC,MAAM,WAAW,GAAI,OAAe,CAAC,WAAW,CAAC;IACjD,MAAM,gBAAgB,GAAI,OAAe,CAAC,gBAAgB,CAAC;IAC3D,IAAI,CAAC,WAAW,EAAE,SAAS,IAAI,CAAC,gBAAgB;QAAE,OAAO,IAAI,CAAC;IAC9D,MAAM,MAAM,GAAG,iCAAiC,CAAC,IAAI,CAAC,CAAC;IACvD,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEzB,MAAM,IAAI,GAAG;QACX,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,+BAA+B,CAAC;QACnF,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,+BAA+B,CAAC;QACnF,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,+BAA+B,CAAC;KACpF,CAAC;IACF,MAAM,MAAM,GAAG;QACb,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QACpC,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QACpC,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;KACrC,CAAC;IACF,MAAM,KAAK,GAAG,WAAW,CAAC,SAAS,CACjC,GAAG,UAAU,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,yBAAyB,kCAAkC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,EACrH;QACE,KAAK,EAAE,IAAI,CAAC,CAAC;QACb,MAAM,EAAE,IAAI,CAAC,CAAC;QACd,KAAK,EAAE,IAAI,CAAC,CAAC;KACd,EACD,KAAK,CACN,CAAC;IACF,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,KAAK,CAAC,MAAM,GAAG,UAAU,CAAC;IAC1B,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;IAC5B,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;IAC5B,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;IAC5B,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC;IACzB,KAAK,CAAC,QAAQ,GAAG;QACf,GAAG,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC;QACzB,mBAAmB,EAAE,IAAI;QACzB,iBAAiB,EAAE,IAAI;QACvB,4BAA4B,EAAE,IAAI;QAClC,8BAA8B,EAAE,IAAI;QACpC,oCAAoC,EAAE,IAAI;QAC1C,gBAAgB,EAAE;YAChB,MAAM,EAAE,QAAQ,CAAC,eAAe;YAChC,UAAU,EAAE,IAAI,CAAC,EAAE;YACnB,QAAQ,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ;YAC9B,aAAa,EAAE,QAAQ,CAAC,aAAa;YACrC,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB;YAC3C,cAAc,EAAE,QAAQ,CAAC,cAAc;YACvC,WAAW,EAAE,yBAAyB;YACtC,GAAG,8BAA8B,CAAC,IAAI,CAAC;SACxC;KACF,CAAC;IAEF,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC,GAAG,KAAK,CAAC,IAAI,WAAW,EAAE,KAAK,CAAC,CAAC;IACvE,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC;IACnB,QAAQ,CAAC,eAAe,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,eAAe,GAAG,KAAK,CAAC;IACjC,IAAI,mBAAmB,IAAI,QAAQ,EAAE,CAAC;QACpC,QAAQ,CAAC,iBAAiB,GAAG,IAAI,CAAC;IACpC,CAAC;IACD,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC1B,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,iCAAiC,CACxC,IAAsC;IAEtC,MAAM,GAAG,GAAG,oCAAoC,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;IACxE,MAAM,GAAG,GAAG,oCAAoC,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;IACxE,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IAC9B,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AACtB,CAAC;AAED,SAAS,oCAAoC,CAAC,KAAoC;IAChF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3D,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAClD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACnF,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACrB,CAAC;AAED,SAAS,qCAAqC,CAC5C,OAAuC,EACvC,IAAiC,EACjC,UAAe,EACf,OAAY,EACZ,QAKC;IAED,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IACnC,MAAM,IAAI,GAAI,OAAe,CAAC,IAAI,CAAC;IACnC,MAAM,UAAU,GAAI,OAAe,CAAC,UAAU,CAAC;IAC/C,MAAM,YAAY,GAAI,OAAe,CAAC,YAAY,CAAC;IACnD,MAAM,gBAAgB,GAAI,OAAe,CAAC,gBAAgB,CAAC;IAC3D,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,YAAY,IAAI,CAAC,gBAAgB;QAAE,OAAO,IAAI,CAAC;IAE5E,MAAM,SAAS,GAAG,UAAU,CAAC,eAAe,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACtF,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACpD,MAAM,aAAa,GAAG,UAAU,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC;IAClE,MAAM,UAAU,GAAG,4BAA4B,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IACxE,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAEvC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC3C,MAAM,cAAc,GAAa,EAAE,CAAC;IACpC,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,KAAK,MAAM,WAAW,IAAI,UAAU,EAAE,CAAC;QACrC,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;QACxC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,WAAW,GAAG,CAAC;YAAE,SAAS;QAChE,IAAI,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC5C,IAAI,WAAW,IAAI,IAAI,EAAE,CAAC;YACxB,MAAM,aAAa,GAAG,WAAW,GAAG,CAAC,CAAC;YACtC,IAAI,aAAa,GAAG,CAAC,IAAI,SAAS,CAAC,MAAM;gBAAE,SAAS;YACpD,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC;YAC5B,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;YACvC,cAAc,CAAC,IAAI,CACjB,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,EACrC,MAAM,CAAC,SAAS,CAAC,aAAa,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EACzC,MAAM,CAAC,SAAS,CAAC,aAAa,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAC1C,CAAC;QACJ,CAAC;QACD,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACjC,CAAC;IACD,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAEtE,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,GAAG,UAAU,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,mBAAmB,kCAAkC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IAC/I,KAAK,CAAC,MAAM,GAAG,UAAU,CAAC;IAC1B,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC;IACzB,KAAK,CAAC,QAAQ,GAAG;QACf,GAAG,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC;QACzB,mBAAmB,EAAE,IAAI;QACzB,iBAAiB,EAAE,IAAI;QACvB,4BAA4B,EAAE,IAAI;QAClC,8BAA8B,EAAE,IAAI;QACpC,gBAAgB,EAAE;YAChB,MAAM,EAAE,QAAQ,CAAC,eAAe;YAChC,UAAU,EAAE,IAAI,CAAC,EAAE;YACnB,QAAQ,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ;YAC9B,aAAa,EAAE,QAAQ,CAAC,aAAa;YACrC,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB;YAC3C,cAAc,EAAE,QAAQ,CAAC,cAAc;YACvC,WAAW,EAAE,yBAAyB;YACtC,GAAG,8BAA8B,CAAC,IAAI,CAAC;SACxC;KACF,CAAC;IAEF,MAAM,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;IACpC,UAAU,CAAC,SAAS,GAAG,cAAc,CAAC;IACtC,UAAU,CAAC,OAAO,GAAG,YAAY,CAAC;IAClC,UAAU,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAErC,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC,GAAG,KAAK,CAAC,IAAI,WAAW,EAAE,KAAK,CAAC,CAAC;IACvE,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC;IACnB,QAAQ,CAAC,eAAe,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,eAAe,GAAG,KAAK,CAAC;IACjC,IAAI,mBAAmB,IAAI,QAAQ,EAAE,CAAC;QACpC,QAAQ,CAAC,iBAAiB,GAAG,IAAI,CAAC;IACpC,CAAC;IACD,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC1B,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,4BAA4B,CAAC,aAAuC,EAAE,OAAY;IACzF,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAoB,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5F,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAoB,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5F,IAAI,aAAa,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;QACpC,OAAO,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,UAAU,EAAE,UAAU,GAAG,UAAU,CAAC,CAAC;IAC9E,CAAC;IACD,MAAM,aAAa,GAAG,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,aAAuB,CAAC,CAAC,CAAC,CAAC,CAAC;IACrG,MAAM,aAAa,GAAG,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,aAAuB,CAAC,CAAC,CAAC,CAAC,CAAC;IACrG,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,aAAa,GAAG,KAAK,CAAC,CAAC;AACjG,CAAC;AAED,SAAS,gCAAgC,CACvC,KAAmC,EACnC,gBAAyB;IAEzB,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,EAAE,aAAa,CAAC;IAC/C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;QAAE,OAAO,EAAE,CAAC;IACxC,MAAM,KAAK,GAAuC,EAAE,CAAC;IACrD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,+BAA+B,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;QACxE,IAAI,IAAI;YAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,+BAA+B,CAAC,KAAc,EAAE,gBAAyB;IAChF,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7E,MAAM,MAAM,GAAG,KAAgC,CAAC;IAChD,OAAO,sCAAsC,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;AAC1E,CAAC;AAED,SAAS,4BAA4B,CAAC,MAAa;IACjD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAmB,CAAC;IAC1C,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;QAC1B,MAAM,QAAQ,GAAG,kCAAkC,CAAC,IAAI,CAAC,CAAC;QAC1D,IAAI,CAAC,QAAQ;YAAE,SAAS;QACxB,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACxD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,uCAAuC,CAC9C,IAAsC,EACtC,aAA0D;IAE1D,IAAI,IAAI,CAAC,cAAc,KAAK,CAAC,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1E,MAAM,sBAAsB,GAAG,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAC/D,SAAS,CAAC,cAAc,IAAI,IAAI;WAC7B,SAAS,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ;WACpC,gCAAgC,CAAC,SAAS,EAAE,IAAI,CAAC,CACrD,CAAC,CAAC;IACH,OAAO,sBAAsB,CAAC,MAAM,KAAK,CAAC,IAAI,sBAAsB,CAAC,CAAC,CAAC,EAAE,cAAc,KAAK,CAAC,CAAC;AAChG,CAAC;AAED,SAAS,gCAAgC,CACvC,IAAsC,EACtC,KAAuC;IAEvC,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,IAAI,KAAK,CAAC,SAAS,IAAI,IAAI,EAAE,CAAC;QACtD,OAAO,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC,SAAS,CAAC;IAC5C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,4BAA4B,CACnC,IAAS,EACT,cAAoC,EACpC,aAA4B;IAE5B,MAAM,aAAa,GAAG,sCAAsC,CAAC,IAAI,CAAC,CAAC;IACnE,MAAM,QAAQ,GAAG,aAAa,EAAE,QAAQ,CAAC;IACzC,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3B,MAAM,+BAA+B,GAAG,aAAa,KAAK,IAAI,CAAC;IAC/D,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACjC,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,EAAE,EAAE,+BAA+B,EAAE,CAAC;IAC5E,CAAC;IACD,MAAM,gBAAgB,GAAG,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC3D,IAAI,gBAAgB,IAAI,CAAC;QAAE,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,EAAE,EAAE,+BAA+B,EAAE,CAAC;IACrG,MAAM,KAAK,GAAG,OAAQ,QAAgB,CAAC,KAAK,KAAK,UAAU;QACzD,CAAC,CAAC,6BAA6B,CAC7B,QAAQ,EACR,gCAAgC,CAAC,QAAQ,EAAE,aAAa,CAAC,CAC1D;QACD,CAAC,CAAC,IAAI,CAAC;IACT,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,IAAI,CAAC;QACH,2BAA2B,CAAC,KAAK,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;IAC9D,CAAC;IAAC,MAAM,CAAC;QACP,+BAA+B,CAAC,KAAK,CAAC,CAAC;QACvC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAE,QAAgB,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAE,KAAa,CAAC,YAAY,CAAC,EAAE,CAAC;QACjG,+BAA+B,CAAC,KAAK,CAAC,CAAC;QACvC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,aAAa,CAAC,QAAQ,GAAG,KAAK,CAAC;IAC/B,cAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,gBAAgB,GAAG,CAAC,CAAC,CAAC;IACnD,cAAc,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAC7B,OAAO;QACL,QAAQ,EAAE,KAAK;QACf,eAAe,EAAE,+BAA+B,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;QAC/D,+BAA+B;KAChC,CAAC;AACJ,CAAC;AAED,SAAS,mCAAmC,CAC1C,IAAS,EACT,cAAoC,EACpC,IAAsC,EACtC,aAA4B,EAC5B,OAIC;IAED,MAAM,QAAQ,GAAG,kCAAkC,CAAC,IAAI,CAAC,CAAC;IAC1D,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO;YACL,MAAM,EAAE,IAAI;YACZ,oBAAoB,EAAE,iBAAiB;YACvC,cAAc,EAAE,wFAAwF;SACzG,CAAC;IACJ,CAAC;IACD,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,EAAE,CAAC;QAChC,MAAM,YAAY,GAAG,4BAA4B,CAAC,IAAI,EAAE,cAAc,EAAE,aAAa,CAAC,CAAC;QACvF,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,OAAO;gBACL,MAAM,EAAE,IAAI;gBACZ,oBAAoB,EAAE,uBAAuB;gBAC7C,cAAc,EAAE,wFAAwF;aACzG,CAAC;QACJ,CAAC;QACD,OAAO;YACL,MAAM,EAAE;gBACN,QAAQ,EAAE,YAAY,CAAC,QAAQ;gBAC/B,eAAe,EAAE,YAAY,CAAC,eAAe;aAC9C;YACD,oBAAoB,EAAE,UAAU;SACjC,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAE,QAAgB,CAAC,YAAY,CAAC,EAAE,CAAC;QACnD,IAAI,CAAC,OAAO,CAAC,+BAA+B;eACvC,CAAC,IAAI,CAAC,cAAc,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,sCAAsC,CAAC,EAAE,CAAC;YACpF,OAAO;gBACL,MAAM,EAAE,IAAI;gBACZ,oBAAoB,EAAE,oBAAoB;gBAC1C,cAAc,EAAE,iHAAiH;aAClI,CAAC;QACJ,CAAC;QACD,MAAM,YAAY,GAAG,4BAA4B,CAAC,IAAI,EAAE,cAAc,EAAE,aAAa,CAAC,CAAC;QACvF,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,OAAO;gBACL,MAAM,EAAE,IAAI;gBACZ,oBAAoB,EAAE,uBAAuB;gBAC7C,cAAc,EAAE,2GAA2G;aAC5H,CAAC;QACJ,CAAC;QACD,OAAO;YACL,MAAM,EAAE;gBACN,QAAQ,EAAE,YAAY,CAAC,QAAQ;gBAC/B,eAAe,EAAE,YAAY,CAAC,eAAe;aAC9C;YACD,oBAAoB,EAAE,2BAA2B;SAClD,CAAC;IACJ,CAAC;IACD,MAAM,kBAAkB,GAAI,QAAgB,CAAC,YAAY,CAAC;IAC1D,MAAM,iBAAiB,GAAG,kBAAkB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAClE,IAAI,CAAC,iBAAiB,IAAI,OAAO,iBAAiB,KAAK,QAAQ,IAAI,OAAO,iBAAiB,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;QACjH,OAAO;YACL,MAAM,EAAE,IAAI;YACZ,oBAAoB,EAAE,oBAAoB;YAC1C,cAAc,EAAE,gHAAgH;SACjI,CAAC;IACJ,CAAC;IACD,MAAM,iBAAiB,GAAG,6BAA6B,CACrD,iBAAiB,EACjB,mCAAmC,CAAC,iBAAiB,EAAE,aAAa,EAAE,IAAI,CAAC,cAAc,CAAC,CAC3F,CAAC;IACF,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACvB,OAAO;YACL,MAAM,EAAE,IAAI;YACZ,oBAAoB,EAAE,oBAAoB;YAC1C,cAAc,EAAE,8FAA8F;SAC/G,CAAC;IACJ,CAAC;IACD,MAAM,YAAY,GAAG,4BAA4B,CAAC,IAAI,EAAE,cAAc,EAAE,aAAa,CAAC,CAAC;IACvF,MAAM,YAAY,GAAG,YAAY,EAAE,QAAQ,CAAC;IAC5C,IAAI,CAAC,YAAY,IAAI,CAAC,KAAK,CAAC,OAAO,CAAE,YAAoB,CAAC,YAAY,CAAC,EAAE,CAAC;QACxE,+BAA+B,CAAC,iBAAiB,CAAC,CAAC;QACnD,OAAO;YACL,MAAM,EAAE,IAAI;YACZ,oBAAoB,EAAE,uBAAuB;YAC7C,cAAc,EAAE,0GAA0G;SAC3H,CAAC;IACJ,CAAC;IACD,MAAM,YAAY,GAAI,YAAoB,CAAC,YAAY,CAAC;IACxD,MAAM,mBAAmB,GAAG,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC9D,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,iBAAiB,CAAC;IACtD,IAAI,mBAAmB,KAAK,iBAAiB,IAAI,mBAAmB,KAAK,iBAAiB,EAAE,CAAC;QAC3F,+BAA+B,CAAC,mBAAmB,CAAC,CAAC;IACvD,CAAC;IACD,OAAO;QACL,MAAM,EAAE;YACN,QAAQ,EAAE,iBAAiB;YAC3B,eAAe,EAAE;gBACf,GAAG,YAAY,CAAC,eAAe;gBAC/B,GAAG,CAAC,YAAY,CAAC,+BAA+B,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;aAC7E;SACF;QACD,oBAAoB,EAAE,aAAa;KACpC,CAAC;AACJ,CAAC;AAED,SAAS,6BAA6B,CAAC,QAAa,EAAE,IAAY;IAChE,IAAI,CAAC;QACH,OAAO,QAAQ,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,+BAA+B,CAAC,QAAa;IACpD,IAAI,CAAC;QACH,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,+EAA+E;IACjF,CAAC;AACH,CAAC;AAED,SAAS,kCAAkC,CAAC,IAAS;IACnD,OAAO,sCAAsC,CAAC,IAAI,CAAC,EAAE,QAAQ,IAAI,IAAI,CAAC;AACxE,CAAC;AAED,SAAS,sCAAsC,CAAC,IAAS;IACvD,OAAO,oCAAoC,CAAC,IAAI,CAAC,CAAC;AACpD,CAAC;AAED,SAAS,2BAA2B,CAAC,KAAU,EAAE,MAAW,EAAE,aAA4B;IACxF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,YAAY,CAAC;QAAE,OAAO;IACxF,KAAK,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,WAAgB,EAAE,KAAa,EAAE,EAAE;QAC/E,IAAI,CAAC,WAAW,IAAI,OAAO,WAAW,KAAK,QAAQ;YAAE,OAAO,WAAW,CAAC;QACxE,IAAI,OAAO,WAAW,CAAC,KAAK,KAAK,UAAU;YAAE,OAAO,WAAW,CAAC;QAChE,MAAM,iBAAiB,GAAG,WAAW,CAAC,KAAK,CAAC,mCAAmC,CAAC,WAAW,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC,CAAC;QACpH,OAAO,iBAAiB,IAAI,WAAW,CAAC;IAC1C,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,gCAAgC,CAAC,QAAa,EAAE,aAA4B;IACnF,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,EAAE,IAAI,IAAI,QAAQ,EAAE,EAAE,IAAI,UAAU,CAAC,CAAC;IACtE,MAAM,MAAM,GAAG,aAAa,EAAE,IAAI,EAAE;QAClC,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,kBAAkB,EAAE,GAAG,CAAC;QAChD,CAAC,CAAC,MAAM,CAAC;IACX,OAAO,GAAG,QAAQ,mBAAmB,MAAM,EAAE,CAAC;AAChD,CAAC;AAED,SAAS,mCAAmC,CAAC,QAAa,EAAE,aAA4B,EAAE,KAAa;IACrG,OAAO,GAAG,gCAAgC,CAAC,QAAQ,EAAE,aAAa,CAAC,OAAO,KAAK,EAAE,CAAC;AACpF,CAAC;AAED,SAAS,4BAA4B,CACnC,OAA6B,EAC7B,KAAmB,EACnB,IAAiC,EACjC,gBAAyB;IAEzB,MAAM,WAAW,GAAI,OAAe,CAAC,WAAW,CAAC;IACjD,MAAM,gBAAgB,GAAI,OAAe,CAAC,gBAAgB,CAAC;IAC3D,MAAM,MAAM,GAAG,kBAAkB,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC5D,IAAI,CAAC,WAAW,IAAI,CAAC,gBAAgB;QAAE,OAAO,IAAI,CAAC;IACnD,MAAM,IAAI,GAAG,WAAW,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,EAAE,qBAAqB,EAAE;QAClE,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;KAClC,EAAE,KAAK,CAAC,CAAC;IACV,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC,GAAG,IAAI,CAAC,EAAE,sBAAsB,EAAE,KAAK,CAAC,CAAC;IAC/E,IAAI,gBAAgB,EAAE,CAAC;QACrB,QAAQ,CAAC,YAAY,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACvD,CAAC;SAAM,CAAC;QACN,QAAQ,CAAC,YAAY,GAAG,IAAI,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACpD,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC;IACxB,CAAC;IACD,QAAQ,CAAC,aAAa,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IACrD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IACzB,8BAA8B,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC3C,IAAI,CAAC,QAAQ,GAAG;QACd,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;QACxB,gBAAgB,EAAE;YAChB,MAAM,EAAE,IAAI,CAAC,EAAE;YACf,QAAQ,EAAE,IAAI;YACd,GAAG,8BAA8B,CAAC,IAAI,CAAC;SACxC;KACF,CAAC;IACF,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,8BAA8B,CAAC,IAAiC,EAAE,IAAS;IAClF,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;IACjC,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS;QAAE,OAAO;IAChC,IAAI,4BAA4B,CAAC,SAAS,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAC7D,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC,gBAAgB,CAAC;IACrD,CAAC;IACD,IAAI,OAAO,SAAS,CAAC,UAAU,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC;QACtF,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC;IACzC,CAAC;AACH,CAAC;AAED,SAAS,4BAA4B,CAAC,KAAc;IAClD,OAAO,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC;AAClE,CAAC;AAED,SAAS,wBAAwB,CAC/B,OAA6B,EAC7B,KAAmB,EACnB,IAAiC,EACjC,QAA+C;IAE/C,MAAM,WAAW,GAAI,OAAe,CAAC,WAAW,CAAC;IACjD,MAAM,OAAO,GAAG,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAC/D,MAAM,MAAM,GAAG,kBAAkB,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC5D,IAAI,CAAC,WAAW,EAAE,gBAAgB;QAAE,OAAO,IAAI,CAAC;IAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACvD,MAAM,MAAM,GAAG,EAAE,GAAG,CAAC,CAAC;IACtB,MAAM,YAAY,GAAG,IAAI,CAAC;IAC1B,IAAI,KAAY,CAAC;IAEjB,IAAI,QAAQ,CAAC,UAAU,KAAK,aAAa,EAAE,CAAC;QAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC;QACnF,MAAM,SAAS,GAAG,UAAU,GAAG,MAAM,CAAC;QACtC,MAAM,MAAM,GAAG,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC;QAC/C,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE,CAAC,QAAQ,CAAC,CAAC;QAC/D,MAAM,QAAQ,GAAG,IAAI,OAAO,CAAC,SAAS,EAAE,UAAU,EAAE,CAAC,QAAQ,CAAC,CAAC;QAC/D,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC,UAAU,EAAE,CAAC,QAAQ,CAAC,CAAC;QACnE,MAAM,UAAU,GAAG,IAAI,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC,UAAU,EAAE,CAAC,QAAQ,CAAC,CAAC;QACnE,KAAK,GAAG;YACN,CAAC,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,CAAC;YACrD,CAAC,MAAM,EAAE,OAAO,CAAC;YACjB,CAAC,MAAM,EAAE,QAAQ,CAAC;YAClB,CAAC,MAAM,EAAE,WAAW,CAAC;YACrB,CAAC,MAAM,EAAE,UAAU,CAAC;SACrB,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;QAC7D,MAAM,SAAS,GAAG,UAAU,GAAG,MAAM,CAAC;QACtC,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;QACtE,MAAM,YAAY,GAAG,IAAI,OAAO,CAAC,SAAS,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;QACtE,MAAM,eAAe,GAAG,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;QAC1E,MAAM,cAAc,GAAG,IAAI,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;QAC1E,MAAM,UAAU,GAAG,IAAI,OAAO,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE,CAAC,QAAQ,CAAC,CAAC;QAClE,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,SAAS,EAAE,UAAU,EAAE,CAAC,QAAQ,CAAC,CAAC;QAClE,MAAM,cAAc,GAAG,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC,UAAU,EAAE,CAAC,QAAQ,CAAC,CAAC;QACtE,MAAM,aAAa,GAAG,IAAI,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC,UAAU,EAAE,CAAC,QAAQ,CAAC,CAAC;QACtE,KAAK,GAAG;YACN,CAAC,WAAW,EAAE,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,WAAW,CAAC;YACzE,CAAC,UAAU,EAAE,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,UAAU,CAAC;YACpE,CAAC,WAAW,EAAE,UAAU,CAAC;YACzB,CAAC,YAAY,EAAE,WAAW,CAAC;YAC3B,CAAC,eAAe,EAAE,cAAc,CAAC;YACjC,CAAC,cAAc,EAAE,aAAa,CAAC;SAChC,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,WAAW,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC,EAAE,gBAAgB,EAAE;QACvE,KAAK;KACN,EAAE,KAAK,CAAC,CAAC;IACV,OAAO,CAAC,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC1C,OAAO,CAAC,QAAQ,GAAG,wBAAwB,CAAC,IAAI,CAAC,EAAE,EAAE;QACnD,WAAW,EAAE,QAAQ;QACrB,MAAM,EAAE,SAAS;QACjB,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,SAAS,EAAE,QAAQ,CAAC,SAAS;QAC7B,GAAG,EAAE,QAAQ,CAAC,GAAG;KAClB,CAAC,CAAC;IACH,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,yBAAyB,CAChC,OAA6B,EAC7B,KAAmB,EACnB,IAAiC,EACjC,SAAsC;IAEtC,MAAM,WAAW,GAAI,OAAe,CAAC,WAAW,CAAC;IACjD,MAAM,OAAO,GAAG,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAC/D,MAAM,MAAM,GAAG,kBAAkB,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC5D,IAAI,CAAC,WAAW,EAAE,gBAAgB;QAAE,OAAO,IAAI,CAAC;IAChD,MAAM,UAAU,GAAG,uBAAuB,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;IACnF,MAAM,QAAQ,GAAG,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;IACvE,MAAM,SAAS,GAAG,IAAI,OAAO,CAC3B,QAAQ,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,GAAG,IAAI,GAAG,UAAU,CAAC,CAAC,GAAG,IAAI,EACtD,QAAQ,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,GAAG,IAAI,EAChC,QAAQ,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,GAAG,IAAI,GAAG,UAAU,CAAC,CAAC,GAAG,IAAI,CACvD,CAAC;IACF,MAAM,UAAU,GAAG,IAAI,OAAO,CAC5B,QAAQ,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,GAAG,IAAI,GAAG,UAAU,CAAC,CAAC,GAAG,IAAI,EACtD,QAAQ,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,GAAG,IAAI,EAChC,QAAQ,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,GAAG,IAAI,GAAG,UAAU,CAAC,CAAC,GAAG,IAAI,CACvD,CAAC;IACF,MAAM,KAAK,GAAG,WAAW,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC,EAAE,iBAAiB,EAAE;QACtE,KAAK,EAAE;YACL,CAAC,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC;YAChC,CAAC,QAAQ,EAAE,SAAS,CAAC;YACrB,CAAC,QAAQ,EAAE,UAAU,CAAC;SACvB;KACF,EAAE,KAAK,CAAC,CAAC;IACV,KAAK,CAAC,KAAK,GAAG,IAAI,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACxC,KAAK,CAAC,QAAQ,GAAG,wBAAwB,CAAC,IAAI,CAAC,EAAE,EAAE;QACjD,WAAW,EAAE,OAAO;QACpB,MAAM,EAAE,WAAW;KACpB,CAAC,CAAC;IACH,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,gCAAgC,CACvC,OAA6B,EAC7B,KAAmB,EACnB,IAAiC,EACjC,UAAsC;IAEtC,MAAM,WAAW,GAAI,OAAe,CAAC,WAAW,CAAC;IACjD,MAAM,gBAAgB,GAAI,OAAe,CAAC,gBAAgB,CAAC;IAC3D,MAAM,gBAAgB,GAAI,OAAe,CAAC,gBAAgB,CAAC;IAC3D,MAAM,OAAO,GAAG,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAC/D,MAAM,MAAM,GAAG,kBAAkB,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC5D,IAAI,CAAC,WAAW,IAAI,CAAC,gBAAgB;QAAE,OAAO;IAC9C,MAAM,QAAQ,GAAG,sCAAsC,CACrD,IAAI,CAAC,KAAK,EAAE,IAAI,KAAK,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAC5D,CAAC;IAEF,IAAI,gBAAgB,EAAE,CAAC;QACrB,MAAM,KAAK,GAAG,IAAI,gBAAgB,CAAC,GAAG,IAAI,CAAC,EAAE,mBAAmB,EAAE,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAC/F,KAAK,CAAC,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;QACrC,KAAK,CAAC,OAAO,GAAG,IAAI,MAAM,CACxB,QAAQ,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,EAC7B,QAAQ,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,EAC7B,QAAQ,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,CAC9B,CAAC;QACF,KAAK,CAAC,WAAW,GAAG,IAAI,MAAM,CAC5B,QAAQ,CAAC,WAAW,EAAE,CAAC,IAAI,IAAI,EAC/B,QAAQ,CAAC,WAAW,EAAE,CAAC,IAAI,IAAI,EAC/B,QAAQ,CAAC,WAAW,EAAE,CAAC,IAAI,IAAI,CAChC,CAAC;QACF,KAAK,CAAC,QAAQ,GAAG,wBAAwB,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC,CAAC;QACvG,KAAK,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC;QAC1C,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtC,iCAAiC,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,aAAa;QAAE,OAAO;IAEpC,MAAM,MAAM,GAAG,WAAW,CAAC,YAAY,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,yBAAyB,EAAE;QAC7E,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,EAAE;KACb,EAAE,KAAK,CAAC,IAAI,WAAW,CAAC,SAAS,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,yBAAyB,EAAE;QACxE,IAAI,EAAE,IAAI;KACX,EAAE,KAAK,CAAC,CAAC;IACV,IAAI,CAAC,MAAM;QAAE,OAAO;IACpB,MAAM,CAAC,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC;IAChC,MAAM,CAAC,QAAQ,GAAG,wBAAwB,CAAC,IAAI,CAAC,EAAE,EAAE;QAClD,WAAW,EAAE,OAAO;QACpB,SAAS,EAAE,aAAa;QACxB,MAAM,EAAE,MAAM;KACf,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC,GAAG,IAAI,CAAC,EAAE,kCAAkC,EAAE,KAAK,CAAC,CAAC;IAC3F,QAAQ,CAAC,YAAY,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAClD,QAAQ,CAAC,aAAa,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACtD,QAAQ,CAAC,aAAa,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IACrD,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzC,UAAU,CAAC,aAAa,GAAG,CAAC,MAAM,CAAC,CAAC;AACtC,CAAC;AAED,SAAS,0BAA0B,CACjC,OAA6B,EAC7B,KAAmB,EACnB,IAAiC,EACjC,UAAsC;IAEtC,IAAI,IAAI,CAAC,KAAK,EAAE,IAAI,KAAK,aAAa,EAAE,CAAC;QACvC,OAAO,qCAAqC,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;IACjF,CAAC;IACD,OAAO,qCAAqC,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;AACjF,CAAC;AAED,SAAS,qCAAqC,CAC5C,OAA6B,EAC7B,KAAmB,EACnB,IAAiC,EACjC,UAAsC;IAEtC,MAAM,QAAQ,GAAG,sCAAsC,CACrD,IAAI,CAAC,KAAK,EAAE,IAAI,KAAK,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAC5D,CAAC;IACF,MAAM,KAAK,GAAG,0BAA0B,CAAC,UAAU,EAAE,IAAI,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;IAC7E,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,MAAM,SAAS,GAAG,CAAC,CAAE,KAAa,CAAC,aAAa,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,cAAc,CAAC,CAAC;IAC7E,IAAI,QAAQ,CAAC,aAAa,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAEvD,MAAM,OAAO,GAAG,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAC/D,MAAM,MAAM,GAAG,kBAAkB,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC5D,uBAAuB,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,OAAO,CACrD,QAAQ,CAAC,SAAS,CAAC,CAAC,EACpB,QAAQ,CAAC,SAAS,CAAC,CAAC,EACpB,QAAQ,CAAC,SAAS,CAAC,CAAC,CACrB,CAAC,CAAC;IACH,KAAK,CAAC,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;IACrC,wBAAwB,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,MAAM,CACnD,QAAQ,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,EAC7B,QAAQ,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,EAC7B,QAAQ,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,CAC9B,CAAC,CAAC;IACH,KAAK,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC;IAC1C,iCAAiC,CAAC,KAAK,CAAC,CAAC;IACzC,IAAI,QAAQ,CAAC,aAAa;QAAE,0BAA0B,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC7G,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,qCAAqC,CAC5C,OAA6B,EAC7B,KAAmB,EACnB,IAAiC,EACjC,UAAsC;IAEtC,MAAM,QAAQ,GAAG,sCAAsC,CACrD,IAAI,CAAC,KAAK,EAAE,IAAI,KAAK,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAC5D,CAAC;IACF,MAAM,KAAK,GAAG,0BAA0B,CAAC,UAAU,EAAE,IAAI,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;IAC7E,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,MAAM,SAAS,GAAG,CAAC,CAAE,KAAa,CAAC,aAAa,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,yBAAyB,CAAC,CAAC;IACxF,IAAI,QAAQ,CAAC,aAAa,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAEvD,MAAM,MAAM,GAAG,kBAAkB,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC5D,KAAK,CAAC,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;IACrC,wBAAwB,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,MAAM,CACnD,QAAQ,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,EAC7B,QAAQ,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,EAC7B,QAAQ,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,CAC9B,CAAC,CAAC;IACH,wBAAwB,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,MAAM,CACvD,QAAQ,CAAC,WAAW,EAAE,CAAC,IAAI,IAAI,EAC/B,QAAQ,CAAC,WAAW,EAAE,CAAC,IAAI,IAAI,EAC/B,QAAQ,CAAC,WAAW,EAAE,CAAC,IAAI,IAAI,CAChC,CAAC,CAAC;IACH,KAAK,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC;IAC1C,iCAAiC,CAAC,KAAK,CAAC,CAAC;IACzC,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,0BAA0B,CACjC,UAAsC,EACtC,MAAc,EACd,SAAwC;IAExC,OAAO,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE;QACpD,MAAM,QAAQ,GAAG,aAAa,EAAE,QAAQ,EAAE,gBAAgB,CAAC;QAC3D,OAAO,QAAQ,EAAE,MAAM,KAAK,MAAM;eAC7B,QAAQ,EAAE,WAAW,KAAK,OAAO;eACjC,QAAQ,EAAE,SAAS,KAAK,SAAS,CAAC;IACzC,CAAC,CAAC,IAAI,IAAI,CAAC;AACb,CAAC;AAED,SAAS,8BAA8B,CAAC,aAAkB;IACxD,MAAM,QAAQ,GAAG,aAAa,EAAE,QAAQ,EAAE,gBAAgB,CAAC;IAC3D,OAAO,QAAQ,EAAE,WAAW,KAAK,OAAO;WACnC,CAAC,QAAQ,EAAE,SAAS,KAAK,aAAa,IAAI,QAAQ,EAAE,SAAS,KAAK,aAAa,CAAC,CAAC;AACxF,CAAC;AAED,SAAS,iCAAiC,CAAC,KAAmB;IAC5D,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAE,KAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAE,KAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IACjF,gCAAgC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AAClD,CAAC;AAUD,SAAS,gCAAgC,CACvC,KAAmB,EACnB,MAAsB;IAEtB,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAO,CAAC;IACzC,MAAM,YAAY,GAAG,IAAI,GAAG,EAAO,CAAC;IACpC,MAAM,eAAe,GAAG,IAAI,GAAG,EAAO,CAAC;IACvC,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;QAC1B,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;YAAE,SAAS;QAChD,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QACnC,IAAI,UAAU,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;YACtC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAC7B,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;aAAM,CAAC;YACN,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IACD,KAAK,MAAM,UAAU,IAAI,YAAY,EAAE,CAAC;QACtC,IAAI,UAAU,EAAE,UAAU,EAAE,EAAE;YAAE,SAAS;QACzC,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACpC,CAAC;IACD,KAAK,MAAM,gBAAgB,IAAI,iBAAiB,EAAE,CAAC;QACjD,IAAI,gBAAgB,EAAE,UAAU,EAAE,EAAE;YAAE,SAAS;QAC/C,gBAAgB,EAAE,mBAAmB,EAAE,EAAE,CAAC;IAC5C,CAAC;IACD,KAAK,MAAM,aAAa,IAAI,eAAe,EAAE,CAAC;QAC5C,IAAI,aAAa,EAAE,UAAU,EAAE,EAAE;YAAE,SAAS;QAC5C,aAAa,EAAE,0BAA0B,EAAE,EAAE,CAAC;IAChD,CAAC;IACA,KAAa,CAAC,mBAAmB,EAAE,EAAE,CAAC;IAEvC,MAAM,iBAAiB,GAAG,CAAC,KAAK,CAAC,OAAO,CAAE,KAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAE,KAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;SAC1F,MAAM,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,KAAK,KAAK,CAAC,CAAC;IAC1D,MAAM,6BAA6B,GAAG,CAAC,GAAG,iBAAiB,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;QAC1E,IAAI,KAAK,EAAE,UAAU,EAAE,EAAE;YAAE,OAAO,KAAK,CAAC;QACxC,MAAM,YAAY,GAAG,KAAK,EAAE,YAAY,IAAI,KAAK,EAAE,aAAa,CAAC;QACjE,OAAO,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC,MAAM,CAAC;IACV,OAAO;QACL,iBAAiB,EAAE,MAAM,CAAC,MAAM;QAChC,kBAAkB,EAAE,eAAe,CAAC,IAAI;QACxC,qBAAqB,EAAE,iBAAiB,CAAC,IAAI;QAC7C,qBAAqB,EAAE,iBAAiB,CAAC,MAAM;QAC/C,6BAA6B;KAC9B,CAAC;AACJ,CAAC;AAED,SAAS,0BAA0B,CACjC,OAA6B,EAC7B,KAAmB,EACnB,IAAiC,EACjC,UAAsC,EACtC,SAAsC;IAEtC,MAAM,QAAQ,GAAI,KAAa,CAAC,aAAa,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,iBAAiB,CAAC,CAAC;IAC7E,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC;IACtB,MAAM,KAAK,GAAG,yBAAyB,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;IACzE,IAAI,CAAC,KAAK;QAAE,OAAO;IACnB,KAAK,CAAC,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC;IAC/B,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC;AAC3B,CAAC;AAED,SAAS,uBAAuB,CAAC,MAAW,EAAE,GAAW,EAAE,KAAU;IACnE,IAAI,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC;QAC5B,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC5B,OAAO;IACT,CAAC;IACD,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACtB,CAAC;AAED,SAAS,wBAAwB,CAAC,MAAW,EAAE,GAAW,EAAE,KAAU;IACpE,IAAI,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC;QAC5B,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC5B,OAAO;IACT,CAAC;IACD,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,8CAA8C,CAC5D,QAA2D;IAE3D,MAAM,YAAY,GAAG,0BAA0B,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IACxE,MAAM,kBAAkB,GAAG,0BAA0B,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC;IACpF,OAAO;QACL,UAAU,EAAE,wBAAwB,CAAC,QAAQ,EAAE,UAAU,CAAC;QAC1D,KAAK,EAAE,gBAAgB,CAAC,QAAQ,EAAE,KAAK,EAAE,kBAAkB,CAAC;QAC5D,IAAI,EAAE,gBAAgB,CAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,CAAC;QAC3C,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;QAC/D,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,gBAAgB,CAAC,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;QACpE,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,gBAAgB,CAAC,QAAQ,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QAC3D,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,gBAAgB,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAC1D,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,gBAAgB,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QAC9D,cAAc,EAAE,gBAAgB,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,IAAI,GAAG,CAAC;QACjF,cAAc,EAAE,gBAAgB,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,IAAI,GAAG,CAAC;QACjF,gBAAgB,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,gBAAgB,CAAC,QAAQ,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC;QACvG,gBAAgB,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,gBAAgB,CAAC,QAAQ,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC;QACvG,OAAO,EAAE,SAAS,CAAC,gBAAgB,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;QAC5D,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACtD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qCAAqC,CACnD,OAA6B,EAC7B,KAAmB,EACnB,MAAqB,EACrB,QAA2D,EAC3D,UAAwD,EAAE;IAE1D,MAAM,UAAU,GAAG,8CAA8C,CAAC,QAAQ,CAAC,CAAC;IAC5E,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAChC,MAAM,OAAO,GAAI,OAAe,CAAC,OAAO,CAAC;IACzC,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,IAAI,UAAU,CAAC,YAAY,IAAI,IAAI,CAAC;IACtE,MAAM,MAAM,GAAG,WAAW,IAAI,OAAO;QACnC,CAAC,CAAC,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC;QAC1D,CAAC,CAAC,IAAI,CAAC;IAET,MAAM,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,IAAI,CAAC,CAAC;IACnC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,KAAK,EAAE,UAAU,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC;IACtE,MAAM,CAAC,OAAO,GAAG,UAAU,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC;IACtD,IAAI,UAAU,CAAC,kBAAkB,EAAE,CAAC;QAClC,MAAM,CAAC,kBAAkB,GAAG,OAAO;YACjC,CAAC,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC,EAAE,UAAU,CAAC,kBAAkB,CAAC,CAAC,CAAC;YAC/E,CAAC,CAAC,EAAE,GAAG,UAAU,CAAC,kBAAkB,EAAE,CAAC;IAC3C,CAAC;IAED,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QACrC,sCAAsC,CAAC,MAAM,CAAC,CAAC;QAC/C,IAAI,MAAM;YAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;QACnC,MAAM,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC;QAChC,MAAM,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC;QAC9B,MAAM,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;QAClC,IAAI,OAAO,CAAC,SAAS,KAAK,KAAK,EAAE,CAAC;YAChC,MAAM,CAAC,eAAe,GAAG,UAAU,CAAC,KAAK,CAAC;YAC1C,MAAM,CAAC,eAAe,GAAG,UAAU,CAAC,KAAK,CAAC;YAC1C,MAAM,CAAC,cAAc,GAAG,UAAU,CAAC,cAAc,IAAI,UAAU,CAAC,IAAI,CAAC;YACrE,MAAM,CAAC,cAAc,GAAG,UAAU,CAAC,cAAc,IAAI,UAAU,CAAC,IAAI,CAAC;YACrE,MAAM,CAAC,gBAAgB,GAAG,UAAU,CAAC,gBAAgB,IAAI,UAAU,CAAC,MAAM,CAAC;YAC3E,MAAM,CAAC,gBAAgB,GAAG,UAAU,CAAC,gBAAgB,IAAI,UAAU,CAAC,MAAM,CAAC;QAC7E,CAAC;IACH,CAAC;SAAM,IAAI,MAAM,EAAE,CAAC;QAClB,MAAM,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;IAED,IAAI,UAAU,CAAC,UAAU,KAAK,aAAa,EAAE,CAAC;QAC5C,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC,MAAM,EAAE,kBAAkB,IAAI,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC;QACrE,MAAM,CAAC,GAAG,GAAG,UAAU,CAAC,GAAG,IAAI,IAAI,CAAC;QACpC,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC,MAAM,EAAE,mBAAmB,IAAI,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC;IACtE,MAAM,MAAM,GAAG,yBAAyB,CAAC,KAAK,CAAC,CAAC;IAChD,MAAM,UAAU,GAAG,UAAU,CAAC,SAAS,CAAC;IACxC,MAAM,SAAS,GAAG,UAAU,GAAG,MAAM,CAAC;IACtC,MAAM,CAAC,SAAS,GAAG,CAAC,SAAS,CAAC;IAC9B,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC;IAC9B,MAAM,CAAC,QAAQ,GAAG,UAAU,CAAC;IAC7B,MAAM,CAAC,WAAW,GAAG,CAAC,UAAU,CAAC;IACjC,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,sCAAsC,CAAC,MAAqB;IACnE,MAAM,CAAC,eAAe,GAAG,IAAI,CAAC;IAC9B,MAAM,CAAC,eAAe,GAAG,IAAI,CAAC;IAC9B,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC;IAC7B,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC;IAC7B,MAAM,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAC/B,MAAM,CAAC,gBAAgB,GAAG,IAAI,CAAC;AACjC,CAAC;AAED,SAAS,wBAAwB,CAAC,KAAc;IAC9C,OAAO,KAAK,KAAK,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,cAAc,CAAC;AAClE,CAAC;AAED,SAAS,yBAAyB,CAAC,KAAmB;IACpD,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,EAAE,EAAE,CAAC;IACnC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,IAAI,MAAM,EAAE,kBAAkB,EAAE,EAAE,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC;IAC/F,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,eAAe,EAAE,EAAE,IAAI,MAAM,EAAE,kBAAkB,EAAE,EAAE,EAAE,MAAM,IAAI,CAAC,CAAC,CAAC;IAClG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC;QAAE,OAAO,EAAE,GAAG,CAAC,CAAC;IACtF,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,GAAG,MAAM,CAAC,CAAC;AACxC,CAAC;AAED,SAAS,0BAA0B,CAAC,KAAc;IAChD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACrD,MAAM,SAAS,GAAG,KAA6C,CAAC;IAChE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAChF,OAAO;QACL,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;QACtB,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;KACvB,CAAC;AACJ,CAAC;AAED,SAAS,0BAA0B,CAAC,KAAc;IAChD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACrD,MAAM,SAAS,GAAG,KAA6C,CAAC;IAChE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACjH,OAAO;QACL,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;QACtB,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;QACtB,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;KACvB,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,KAAa;IAC9B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IACtC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,sCAAsC,CAC7C,QAAqE;IAErE,OAAO;QACL,IAAI,EAAE,aAAa;QACnB,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,gBAAgB,CAAC,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;QAChE,SAAS,EAAE,WAAW,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;QACxE,YAAY,EAAE,mBAAmB,CAAC,QAAQ,EAAE,YAAY,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;QAC/E,aAAa,EAAE,QAAQ,EAAE,aAAa,KAAK,KAAK;KACjD,CAAC;AACJ,CAAC;AAED,SAAS,sCAAsC,CAC7C,QAAqE;IAErE,OAAO;QACL,IAAI,EAAE,aAAa;QACnB,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,gBAAgB,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;QAClE,YAAY,EAAE,mBAAmB,CAAC,QAAQ,EAAE,YAAY,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;QAC/E,WAAW,EAAE,mBAAmB,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC;QACtF,aAAa,EAAE,QAAQ,EAAE,aAAa,KAAK,KAAK;KACjD,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAC1B,KAAkD,EAClD,QAAyC;IAEzC,OAAO;QACL,CAAC,EAAE,gBAAgB,CAAC,KAAK,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;QACzC,CAAC,EAAE,gBAAgB,CAAC,KAAK,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;QACzC,CAAC,EAAE,gBAAgB,CAAC,KAAK,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;KAC1C,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc,EAAE,QAAgB;IACxD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;AAChF,CAAC;AAED,SAAS,uBAAuB,CAC9B,KAAkC,EAClC,QAAqC;IAErC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IACrD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,QAAQ;QAAE,OAAO,uBAAuB,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACpH,OAAO;QACL,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,MAAM;QACnB,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,MAAM;QACnB,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,MAAM;KACpB,CAAC;AACJ,CAAC;AAED,SAAS,wBAAwB,CAC/B,MAAc,EACd,QAAiC,EAAE;IAEnC,MAAM,sBAAsB,GAAG,KAAK,CAAC,WAAW,KAAK,QAAQ;WACxD,KAAK,CAAC,WAAW,KAAK,OAAO;WAC7B,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC;IAC1B,OAAO;QACL,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAC;YAC3B,mBAAmB,EAAE,IAAI;YACzB,iBAAiB,EAAE,IAAI;YACvB,4BAA4B,EAAE,IAAI;SACnC,CAAC,CAAC,CAAC,EAAE,CAAC;QACP,gBAAgB,EAAE;YAChB,MAAM;YACN,GAAG,KAAK;SACT;KACF,CAAC;AACJ,CAAC;AAED,SAAS,8BAA8B,CAAC,IAAiC;IACvE,OAAO;QACL,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChE,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC7E,CAAC;AACJ,CAAC;AAED,SAAS,0BAA0B,CACjC,UAAsC,EACtC,IAAiC;IAEjC,0BAA0B,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE;QAC1D,iCAAiC,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,0BAA0B,CAAC,IAAS,EAAE,KAA0B;IACvE,IAAI,CAAC,IAAI;QAAE,OAAO;IAClB,KAAK,CAAC,IAAI,CAAC,CAAC;IACZ,MAAM,QAAQ,GAAG,OAAO,IAAI,CAAC,WAAW,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAClF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;QAAE,OAAO;IACrC,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;QAC7B,0BAA0B,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC3C,CAAC;AACH,CAAC;AAED,SAAS,iCAAiC,CACxC,WAAgB,EAChB,IAAiC;IAEjC,MAAM,QAAQ,GAAG,oBAAoB,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC5D,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;IAC1E,IAAI,CAAC,gBAAgB;QAAE,OAAO;IAC9B,IAAI,gBAAgB,CAAC,MAAM,KAAK,IAAI,CAAC,EAAE,IAAI,gBAAgB,CAAC,UAAU,KAAK,IAAI,CAAC,EAAE;QAAE,OAAO;IAC3F,MAAM,oBAAoB,GAAG,EAAE,GAAG,gBAAgB,EAAE,CAAC;IACrD,IAAI,IAAI,CAAC,MAAM;QAAE,oBAAoB,CAAC,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;;QACvE,OAAO,oBAAoB,CAAC,MAAM,CAAC;IACxC,IAAI,IAAI,CAAC,UAAU;QAAE,oBAAoB,CAAC,UAAU,GAAG,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;;QACnF,OAAO,oBAAoB,CAAC,UAAU,CAAC;IAC5C,WAAW,CAAC,QAAQ,GAAG;QACrB,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC;QACnB,gBAAgB,EAAE,oBAAoB;KACvC,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAc;IAC1C,OAAO,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAChE,CAAC,CAAC,KAAgC;QAClC,CAAC,CAAC,IAAI,CAAC;AACX,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,OAA6B,EAC7B,IAAS,EACT,SAA2C;IAE3C,MAAM,OAAO,GAAG,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAC/D,IAAI,+BAA+B,CAAC,SAAS,CAAC,EAAE,CAAC;QAC/C,MAAM,MAAM,GAAG,kBAAkB,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC5D,IAAI,OAAO,MAAM,CAAC,SAAS,KAAK,UAAU,IAAI,OAAO,IAAI,EAAE,qBAAqB,KAAK,UAAU,EAAE,CAAC;YAChG,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;QACvE,CAAC;QACD,IAAI,CAAC,QAAQ,GAAG,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACrC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QAC/B,IAAI,CAAC,QAAQ,GAAG,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACrC,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACpC,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;QAC/D,mCAAmC,CAAC,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QAC5D,OAAO;IACT,CAAC;IACD,mCAAmC,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACnD,IAAI,CAAC,QAAQ,GAAG,IAAI,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC9F,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAC/B,IAAI,CAAC,QAAQ,GAAG,IAAI,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC9F,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IACtD,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,6BAA6B,CACpC,OAA6B,EAC7B,IAAS,EACT,SAAkC;IAElC,MAAM,MAAM,GAAG,IAAI,EAAE,MAAM,IAAI,IAAI,CAAC;IACpC,MAAM,KAAK,GAAG,MAAM;QAClB,CAAC,CAAC,+BAA+B,CAAC,4BAA4B,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAC;QACjH,CAAC,CAAC,SAAS,CAAC;IACd,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,wBAAwB,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAC/C,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,gCAAgC,CAAC,SAAkC;IAC1E,OAAO,+BAA+B,CAAC,SAAS,CAAC;QAC/C,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,0BAA0B,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE;QAC1E,CAAC,CAAC;YACE,QAAQ,EAAE,EAAE,GAAG,SAAS,CAAC,QAAQ,EAAE;YACnC,QAAQ,EAAE,EAAE,GAAG,SAAS,CAAC,QAAQ,EAAE;YACnC,KAAK,EAAE,EAAE,GAAG,SAAS,CAAC,KAAK,EAAE;SAC9B,CAAC;AACR,CAAC;AAED,SAAS,mCAAmC,CAAC,IAAS,EAAE,MAA6B;IACnF,IAAI,CAAC,QAAQ,GAAG;QACd,GAAG,CAAC,oBAAoB,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC/C,CAAC,oCAAoC,CAAC,EAAE,0BAA0B,CAAC,MAAM,CAAC;KAC3E,CAAC;AACJ,CAAC;AAED,SAAS,mCAAmC,CAAC,OAA6B,EAAE,IAAS;IACnF,IAAI,OAAO,IAAI,EAAE,qBAAqB,KAAK,UAAU,EAAE,CAAC;QACtD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC9B,IAAI,OAAO,MAAM,EAAE,SAAS,KAAK,UAAU,EAAE,CAAC;YAC5C,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,SAAS,CAAC,mCAAmC,EAAE,CAAC,CAAC,CAAC;QACtF,CAAC;IACH,CAAC;IACD,MAAM,QAAQ,GAAG,oBAAoB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACtD,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,oCAAoC,IAAI,QAAQ,CAAC;QAAE,OAAO;IAC7E,MAAM,YAAY,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;IACrC,OAAO,YAAY,CAAC,oCAAoC,CAAC,CAAC;IAC1D,IAAI,CAAC,QAAQ,GAAG,YAAY,CAAC;AAC/B,CAAC;AAED,SAAS,2BAA2B,CAClC,OAA6B,EAC7B,IAAS,EACT,SAA4D;IAE5D,IAAI,CAAC,SAAS;QAAE,OAAO;IACvB,MAAM,OAAO,GAAG,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAC/D,IAAI,CAAC,QAAQ,GAAG,IAAI,OAAO,CACzB,SAAS,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,EAC1B,SAAS,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,EAC1B,SAAS,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAC3B,CAAC;IACF,IAAI,SAAS,CAAC,WAAW,EAAE,CAAC;QAC1B,IAAI,CAAC,QAAQ,GAAG,IAAI,OAAO,CACzB,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,EACzC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,EACzC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAC1C,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,QAAQ,GAAG,IAAI,OAAO,CACzB,SAAS,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,EAC1B,SAAS,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,EAC1B,SAAS,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAC3B,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,SAAS,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QACxC,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;IAChF,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,CACxB,SAAS,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,EACvB,SAAS,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,EACvB,SAAS,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CACxB,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,gCAAgC,CACvC,OAA6B,EAC7B,KAAmB,EACnB,WAAoD,EACpD,IAAuC;IAEvC,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,EAAE,EAAE,CAAC,kBAAkB,EAAE,EAA0C,CAAC;IAClG,MAAM,MAAM,GAAG,KAAK,CAAC,YAAY,IAAK,KAAa,CAAC,sBAAsB,IAAI,IAAI,CAAC;IACnF,MAAM,OAAO,GAAG,OAAO,CAAC,OAAc,CAAC;IACvC,MAAM,MAAM,GAAI,OAAe,CAAC,MAAM,CAAC;IACvC,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,OAAO,IAAI,CAAC,MAAM,EAAE,QAAQ;QAAE,OAAO,EAAE,CAAC;IAC5E,MAAM,UAAU,GAAG,MAAM,CAAC,qBAAqB,EAAE,CAAC;IAClD,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAC1C,KAAK,CAAC,SAAS,EAAE,EAAE,CAAC,cAAc,EAAE,EAAE,IAAI,MAAM,CAAC,KAAK,EACtD,KAAK,CAAC,SAAS,EAAE,EAAE,CAAC,eAAe,EAAE,EAAE,IAAI,MAAM,CAAC,MAAM,CACzD,CAAC;IACF,MAAM,eAAe,GAAG,KAAK,CAAC,kBAAkB,EAAE,EAAE,CAAC;IACrD,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;IACtC,IAAI,CAAC,QAAQ,IAAI,CAAC,eAAe,IAAI,CAAC,WAAW;QAAE,OAAO,EAAE,CAAC;IAC7D,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,KAAK,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,IAAI,WAAW,EAAE,CAAC;QAC/C,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE,2BAA2B,EAAE,EAAE,CAAC;QAChE,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG;YAAE,SAAS;QAC3C,MAAM,OAAO,GAAG,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;QACrE,MAAM,SAAS,GAAG,OAAO;aACtB,GAAG,CAAC,CAAC,MAAW,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,eAAe,EAAE,QAAQ,CAAC,CAAC;aACrF,GAAG,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC,CAAC;YACpB,CAAC,EAAE,UAAU,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC;YAC5B,CAAC,EAAE,UAAU,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC;SAC5B,CAAC,CAAC,CAAC;QACN,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1D,IAAI,cAAc,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;YAC/E,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,SAAS,mBAAmB,CAAC,OAAY,EAAE,GAAQ,EAAE,GAAQ;IAC3D,OAAO;QACL,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAChC,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAChC,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAChC,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAChC,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAChC,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAChC,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAChC,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;KACjC,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CACrB,IAAuC,EACvC,KAAwC;IAExC,OAAO,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,KAAK;WAC1B,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI;WACxB,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,MAAM;WACxB,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC;AAChC,CAAC","sourcesContent":["import type {\n EditorSelectionState,\n EditorTransformMatrix,\n EditorTransformPivot,\n EditorTransformSnapshot,\n EditorTransformVec3,\n} from '@fps-games/editor-core';\nimport {\n cloneEditorTransformMatrix,\n combineEditorTransforms,\n createIdentityEditorTransformMatrix,\n createEditorTransformMatrixSnapshot,\n isEditorTransformMatrixSnapshot,\n readEditorTransformPosition,\n toEditorLocalTransformFromWorld,\n} from '@fps-games/editor-core';\nimport type {\n ArtistMaterialProfile,\n ArtistMaterialSlotBinding,\n ArtistMaterialTextureRef,\n MaterialSlotSourceDescriptor,\n SceneMaterialAssetKind,\n} from '@fps-games/editor-protocol';\nimport {\n applyBabylonDefaultOutline,\n collectBabylonMaterialOwnerCandidates,\n resolveBabylonEffectiveMaterialOwner,\n type BabylonDefaultOutlineOptions,\n type BabylonMaterialOwnerTarget,\n} from '@fps-games/babylon-renderer';\nimport {\n isMaterialOwnerResolutionPointerVerified,\n resolveMaterialOwner,\n type MaterialOwnerMatchKind,\n type MaterialOwnerResolvedIdentity,\n type MaterialOwnerResolution,\n type MaterialOwnerResolutionDiagnostic,\n} from '@fps-games/playable-contracts';\nimport type {\n BabylonRuntimeGlobal,\n RuntimeCamera,\n RuntimeScene,\n} from './types';\nimport { applyArtistMaterialProfileToRuntimeMaterial } from './material-property-adapter';\nimport {\n pickBabylonProjectionNodeIdAt,\n resolveBabylonPickSelectionNodeId,\n resolveBabylonProjectionNodeId,\n} from './projection-pick-resolver';\nimport {\n normalizeProjectionOwnerNodePath,\n readProjectionSourceNodeSegment,\n} from './projection-source-owner-path';\nimport {\n createMaterialSlotOwnerPathMatchKey,\n isMaterialSlotOwnerPathMatch,\n} from './material-slot-source-resolver';\nimport {\n isBabylonPrimitiveProjectionSharedMaterial,\n} from './primitive-projection-instancing';\nimport {\n createBabylonEditorSelectionPresentationController,\n type BabylonEditorSelectionPresentationController,\n type BabylonEditorSelectionPresentationDiagnostics,\n type BabylonEditorSelectionPresentationTarget,\n} from './selection-presentation-controller';\n\nexport type BabylonEditorProjectionVec3 = EditorTransformVec3;\nexport interface BabylonEditorProjectionVec2 {\n x: number;\n y: number;\n}\n\nconst PROJECTION_LOCAL_MATRIX_METADATA_KEY = 'editorLocalTransformMatrix';\nconst MIN_SELECTION_BOUNDS_PROXY_SIZE = 0.002;\n\nexport type BabylonEditorProjectionTransform = EditorTransformSnapshot;\n\nexport interface BabylonEditorProjectionAssetTransform {\n position?: BabylonEditorProjectionVec3;\n rotation?: BabylonEditorProjectionVec3;\n rotationDeg?: BabylonEditorProjectionVec3;\n scale?: number | BabylonEditorProjectionVec3;\n}\n\nexport interface BabylonEditorProjectionAsset {\n id?: string;\n sourceId?: string;\n transform?: BabylonEditorProjectionAssetTransform;\n metadata?: Record<string, unknown>;\n}\n\nexport type BabylonEditorProjectionPrimitiveShape = 'cube' | 'sphere' | 'plane' | 'capsule';\n\nexport interface BabylonEditorProjectionPrimitive {\n shape: BabylonEditorProjectionPrimitiveShape;\n}\n\nexport interface BabylonEditorProjectionOutline {\n strategy?: 'babylon-default';\n renderOutline?: boolean;\n outlineWidth?: number;\n outlineColor?: BabylonEditorProjectionColorRGB;\n}\n\nexport type BabylonEditorProjectionCameraMode = 'orthographic' | 'perspective';\n\nexport interface BabylonEditorProjectionCameraSettings {\n projection?: BabylonEditorProjectionCameraMode;\n alpha: number;\n beta: number;\n radius: number;\n orthoSize: number;\n fov?: number;\n targetOffset?: BabylonEditorProjectionVec3;\n minZ?: number;\n maxZ?: number;\n lowerBetaLimit?: number;\n upperBetaLimit?: number;\n lowerRadiusLimit?: number;\n upperRadiusLimit?: number;\n inertia?: number;\n targetScreenOffset?: BabylonEditorProjectionVec2;\n}\n\nexport interface BabylonEditorProjectionCameraRigApplyOptions {\n target?: BabylonEditorProjectionVec3 | null;\n lockOrbit?: boolean;\n}\n\nexport interface BabylonEditorProjectionColorRGB {\n r: number;\n g: number;\n b: number;\n}\n\nexport interface BabylonEditorProjectionDirectionalLightSettings {\n type: 'directional';\n intensity: number;\n direction: BabylonEditorProjectionVec3;\n diffuseColor?: BabylonEditorProjectionColorRGB;\n helperVisible?: boolean;\n}\n\nexport interface BabylonEditorProjectionHemisphericLightSettings {\n type: 'hemispheric';\n intensity: number;\n diffuseColor?: BabylonEditorProjectionColorRGB;\n groundColor?: BabylonEditorProjectionColorRGB;\n helperVisible?: boolean;\n}\n\nexport type BabylonEditorProjectionLightSettings =\n | BabylonEditorProjectionDirectionalLightSettings\n | BabylonEditorProjectionHemisphericLightSettings;\n\nexport type BabylonEditorProjectionShadowMode = 'default' | 'none' | 'blob' | 'static' | 'planar' | 'dynamic';\n\nexport interface BabylonEditorProjectionRendering {\n renderingGroupId?: number;\n alphaIndex?: number;\n}\n\nexport interface BabylonEditorProjectionNode {\n id: string;\n name?: string;\n parentId?: string | null;\n active?: boolean;\n transform?: BabylonEditorProjectionTransform;\n asset?: BabylonEditorProjectionAsset | null;\n primitive?: BabylonEditorProjectionPrimitive | null;\n helperKind?: 'root';\n runtimeKind?: 'camera' | 'light';\n shadow?: unknown;\n shadowPlan?: unknown;\n rendering?: BabylonEditorProjectionRendering;\n camera?: BabylonEditorProjectionCameraSettings;\n light?: BabylonEditorProjectionLightSettings;\n outline?: BabylonEditorProjectionOutline | null;\n artistMaterialKind?: SceneMaterialAssetKind;\n artistMaterialProfile?: ArtistMaterialProfile;\n artistMaterialSlotBindings?: ArtistMaterialSlotBinding[];\n}\n\nexport interface BabylonEditorProjectionImportResult {\n meshes?: any[];\n transformNodes?: any[];\n animationGroups?: any[];\n}\n\nexport type BabylonEditorProjectionImportNodeKind = 'root' | 'transform' | 'mesh';\n\nexport interface BabylonEditorProjectionImportNodeSnapshot {\n id: string;\n parentId: string | null;\n name: string;\n kind: BabylonEditorProjectionImportNodeKind;\n sourceName?: string;\n ownerNodePath?: string;\n materialIds?: string[];\n}\n\nexport interface BabylonEditorProjectionImportMaterialSnapshot {\n id: string;\n name: string;\n kind?: string;\n nodeIds: string[];\n textureIds: string[];\n}\n\nexport interface BabylonEditorProjectionImportTextureSnapshot {\n id: string;\n name: string;\n kind?: string;\n url?: string;\n}\n\nexport interface BabylonEditorProjectionImportAnimationSnapshot {\n id: string;\n name: string;\n}\n\nexport interface BabylonEditorProjectionImportStructureSnapshot {\n projectionNodeId: string;\n assetId?: string;\n sourceId?: string;\n nodes: BabylonEditorProjectionImportNodeSnapshot[];\n materials: BabylonEditorProjectionImportMaterialSnapshot[];\n textures: BabylonEditorProjectionImportTextureSnapshot[];\n animations: BabylonEditorProjectionImportAnimationSnapshot[];\n}\n\nexport interface BabylonEditorProjectionImportContext {\n babylon: BabylonRuntimeGlobal;\n scene: RuntimeScene;\n root: any;\n node: BabylonEditorProjectionNode;\n asset: BabylonEditorProjectionAsset;\n}\n\nexport type BabylonEditorProjectionImporter = (\n context: BabylonEditorProjectionImportContext,\n) => Promise<BabylonEditorProjectionImportResult | null | undefined>;\n\nexport type BabylonEditorProjectionMaterialProfileSource = 'rootProfile' | 'slotBinding';\nexport type BabylonEditorProjectionMaterialProfileMatchKind =\n | 'root'\n | MaterialOwnerMatchKind\n | 'none';\nexport type BabylonEditorProjectionMaterialProfileTargetStatus =\n | 'material'\n | 'subMaterial'\n | 'primitiveFallbackMaterial'\n | 'missingMeshOwner'\n | 'missingMaterial'\n | 'missingTargetMaterial'\n | 'missingSubMaterial';\n\nexport interface BabylonEditorProjectionMaterialProfileDiagnostic {\n projectionNodeId: string;\n source: BabylonEditorProjectionMaterialProfileSource;\n applied: boolean;\n matchKind: BabylonEditorProjectionMaterialProfileMatchKind;\n targetMaterialStatus: BabylonEditorProjectionMaterialProfileTargetStatus;\n slotId?: string;\n ownerNodePath?: string;\n meshOwnerNodePath?: string | null;\n primitiveIndex?: number;\n targetMaterialName?: string;\n targetMaterialType?: string | null;\n ownerResolutionStatus?: ProjectionMaterialOwnerResolution['status'];\n ownerDiagnosticCode?: MaterialOwnerResolutionDiagnostic['code'];\n ownerDiagnosticSeverity?: MaterialOwnerResolutionDiagnostic['severity'];\n ownerCandidateIds?: string[];\n ownerIdentity?: MaterialOwnerResolvedIdentity;\n warningMessage?: string;\n}\n\nexport interface BabylonEditorProjectionOptions {\n babylon: BabylonRuntimeGlobal;\n scene: RuntimeScene;\n importModel?: BabylonEditorProjectionImporter;\n resolveTextureUrl?: (texture: ArtistMaterialTextureRef) => string | null | undefined;\n /** @deprecated Kept for compatibility; now prewarms the depth-aware selection presentation. */\n selectionEdgesPrewarm?: BabylonEditorProjectionSelectionEdgesPrewarm;\n selectionPresentationController?: BabylonEditorSelectionPresentationController;\n logger?: Pick<Console, 'warn'> & Partial<Pick<Console, 'info'>>;\n onProjectionReady?: (event: BabylonEditorProjectionReadyEvent) => void;\n onProjectionBatchSettled?: (event: BabylonEditorProjectionBatchSettledEvent) => void;\n onMaterialProfileDiagnostic?: (diagnostic: BabylonEditorProjectionMaterialProfileDiagnostic) => void;\n}\n\nexport type BabylonEditorProjectionSelectionEdgesPrewarm = 'eager' | 'lazy' | 'idle';\n\ntype ProjectionMaterialSlotBoundingBox = {\n min?: [number, number, number];\n max?: [number, number, number];\n};\n\ntype ProjectionMaterialSlotDescriptor = MaterialSlotSourceDescriptor & {\n key: string;\n normalizedOwnerNodePath: string;\n matchKey: string;\n triangleCount?: number;\n boundingBox?: ProjectionMaterialSlotBoundingBox;\n};\n\ntype ProjectionMaterialSlotBinding = {\n slot: ProjectionMaterialSlotDescriptor;\n profile: ArtistMaterialProfile;\n source: Exclude<BabylonEditorProjectionMaterialProfileSource, 'rootProfile'>;\n};\n\ntype ProjectionMaterialSlotDescriptorInput = Partial<Record<keyof MaterialSlotSourceDescriptor, unknown>> & {\n triangleCount?: unknown;\n boundingBox?: unknown;\n};\n\ntype ProjectionMaterialSlotTarget = {\n material: unknown;\n clonedMaterials: unknown[];\n};\n\ntype ProjectionMaterialDetachResult = {\n material: unknown;\n clonedMaterials: unknown[];\n projectionOwnsMaterialLifecycle: boolean;\n};\n\ntype ProjectionMaterialSlotTargetResolution = {\n target: ProjectionMaterialSlotTarget | null;\n targetMaterialStatus: BabylonEditorProjectionMaterialProfileTargetStatus;\n warningMessage?: string;\n};\n\ntype ProjectionMaterialOwnerResolution = MaterialOwnerResolution<BabylonMaterialOwnerTarget>;\n\ntype ProjectionMaterialOwnerResolutionContext = {\n resolve: (\n slot: ProjectionMaterialSlotDescriptor,\n options?: { explicitSlotBinding?: boolean },\n ) => ProjectionMaterialOwnerResolution;\n};\n\nexport interface BabylonEditorProjectionReadyEvent {\n nodeId: string;\n async: boolean;\n}\n\nexport interface BabylonEditorProjectionBatchSettledEvent {\n batchId: number;\n nodeIds: string[];\n asyncNodeIds: string[];\n settledNodeIds: string[];\n}\n\nexport type BabylonEditorProjectionBatchState = 'pending' | 'settled' | 'stale';\n\nexport interface BabylonEditorProjectionBatchStatus {\n batchId: number;\n nodeIds: string[];\n asyncNodeIds: string[];\n pendingNodeIds: string[];\n settledNodeIds: string[];\n state: BabylonEditorProjectionBatchState;\n}\n\nexport interface BabylonEditorProjectionBatchHandle {\n batchId: number;\n nodeIds: string[];\n getStatus(): BabylonEditorProjectionBatchStatus;\n settled: Promise<BabylonEditorProjectionBatchStatus>;\n}\n\nexport interface BabylonEditorProjectionIdleState {\n idle: boolean;\n activeBatchIds: number[];\n lastBatch: BabylonEditorProjectionBatchStatus | null;\n}\n\nexport interface BabylonEditorProjectionPreviewVisibilityEntry {\n nodeId: string;\n visible: boolean;\n authoredActive: boolean;\n effectiveVisible: boolean;\n}\n\nexport interface BabylonEditorProjectionDebugBounds {\n min: BabylonEditorProjectionVec3;\n max: BabylonEditorProjectionVec3;\n size: BabylonEditorProjectionVec3;\n center: BabylonEditorProjectionVec3;\n}\n\nexport interface BabylonEditorProjectionShadowDebugOverlayItem {\n id: string;\n kind: 'caster-bounds' | 'receiver-bounds' | 'receiver-surface' | 'light-direction' | 'footprint' | 'artifact-bounds';\n bounds?: BabylonEditorProjectionDebugBounds;\n center?: BabylonEditorProjectionVec3;\n size?: BabylonEditorProjectionVec3;\n direction?: BabylonEditorProjectionVec3;\n}\n\nexport interface ProjectedBabylonEditorNode {\n nodeId: string;\n root: any;\n outlineMeshes: any[];\n selectionMeshes?: any[];\n selectionPresentationTargets?: BabylonEditorSelectionPresentationTarget[];\n animationGroups: any[];\n runtimeObjects: any[];\n importStructure?: BabylonEditorProjectionImportStructureSnapshot | null;\n loadPromise?: Promise<void>;\n}\n\nexport interface BabylonEditorProjection {\n projectNodes(nodes: BabylonEditorProjectionNode[]): BabylonEditorProjectionBatchHandle;\n projectNode(node: BabylonEditorProjectionNode): ProjectedBabylonEditorNode | null;\n removeNode(nodeId: string): void;\n rebuild(nodes: BabylonEditorProjectionNode[]): BabylonEditorProjectionBatchHandle;\n getLastProjectionBatch(): BabylonEditorProjectionBatchHandle | null;\n getIdleState(): BabylonEditorProjectionIdleState;\n waitForIdle(): Promise<BabylonEditorProjectionIdleState>;\n readNodeTransform(nodeId: string): EditorTransformSnapshot | null;\n readNodeTransforms(nodeIds: string[]): Record<string, EditorTransformSnapshot>;\n toNodeLocalTransform?(nodeId: string, worldTransform: EditorTransformSnapshot): EditorTransformSnapshot | null;\n readNodeImportStructure(nodeId: string): BabylonEditorProjectionImportStructureSnapshot | null;\n setNodeTransformPreview(nodeId: string, transform: EditorTransformSnapshot): void;\n setNodeTransformsPreview(transforms: Record<string, EditorTransformSnapshot>): void;\n getAttachableRoot(nodeId: string): any | null;\n getSelectionBounds(nodeIds: string[]): BabylonEditorProjectionBounds | null;\n getSelectionPivot(nodeIds: string[]): EditorTransformPivot | null;\n syncNodeTransform(node: BabylonEditorProjectionNode): void;\n syncRuntimeNode(node: BabylonEditorProjectionNode): boolean;\n syncNodeMetadata(node: BabylonEditorProjectionNode): void;\n syncSelection(selection: EditorSelectionState): void;\n getSelectionPresentationDiagnostics(): BabylonEditorSelectionPresentationDiagnostics;\n resolveProjectionNodeId(target: unknown): string | null;\n resolvePickSelectionNodeId(target: unknown): string | null;\n pickNodeIdAt(clientX: number, clientY: number): string | null;\n getNodeIdsInScreenRect(rect: BabylonEditorProjectionScreenRect): string[];\n getProjectedNode(nodeId: string): ProjectedBabylonEditorNode | null;\n getProjectedNodeIds(): string[];\n getProjectionParentIds(nodeId: string): string[];\n getPreviewVisibilityOverrides(): BabylonEditorProjectionPreviewVisibilityEntry[];\n setPreviewVisibilityOverrides(overrides: Record<string, boolean>): BabylonEditorProjectionPreviewVisibilityEntry[];\n clearPreviewVisibilityOverrides(): BabylonEditorProjectionPreviewVisibilityEntry[];\n setShadowDebugOverlay(items: BabylonEditorProjectionShadowDebugOverlayItem[]): string[];\n clearShadowDebugOverlay(): boolean;\n dispose(): void;\n}\n\nexport interface BabylonEditorProjectionScreenRect {\n left: number;\n top: number;\n right: number;\n bottom: number;\n}\n\nexport interface BabylonEditorProjectionBounds {\n min: BabylonEditorProjectionVec3;\n max: BabylonEditorProjectionVec3;\n center: BabylonEditorProjectionVec3;\n size: BabylonEditorProjectionVec3;\n oriented?: {\n center: BabylonEditorProjectionVec3;\n size: BabylonEditorProjectionVec3;\n axes: {\n x: BabylonEditorProjectionVec3;\n y: BabylonEditorProjectionVec3;\n z: BabylonEditorProjectionVec3;\n };\n };\n}\n\ninterface BabylonEditorProjectionBatch {\n id: number;\n generation: number;\n nodeIds: string[];\n asyncNodeIds: string[];\n pendingNodeIds: Set<string>;\n settledNodeIds: Set<string>;\n notifyScheduled: boolean;\n state: BabylonEditorProjectionBatchState;\n handle: BabylonEditorProjectionBatchHandle;\n resolveSettled(status: BabylonEditorProjectionBatchStatus): void;\n}\n\nconst ASSET_MESH_SELECTION_SEPARATOR = '::assetMesh::';\n\nfunction requireBabylonCtor<T>(value: T | undefined, name: string): T {\n if (!value) throw new Error(`Babylon runtime missing ${name}`);\n return value;\n}\n\nexport function createBabylonEditorProjection(\n options: BabylonEditorProjectionOptions,\n): BabylonEditorProjection {\n const projections = new Map<string, ProjectedBabylonEditorNode>();\n const projectionNodes = new Map<string, BabylonEditorProjectionNode>();\n const projectionParentIds = new Map<string, string | null>();\n const projectionAuthoredActive = new Map<string, boolean>();\n const previewVisibilityOverrides = new Map<string, boolean>();\n const shadowDebugOverlayObjects: any[] = [];\n const selectionPresentation = options.selectionPresentationController\n ?? createBabylonEditorSelectionPresentationController({\n babylon: options.babylon as BabylonRuntimeGlobal & Record<string, any>,\n scene: options.scene,\n logger: options.logger,\n prewarm: options.selectionEdgesPrewarm !== undefined,\n });\n const activeBatches = new Set<BabylonEditorProjectionBatch>();\n const idleWaiters = new Set<(state: BabylonEditorProjectionIdleState) => void>();\n let nextBatchId = 1;\n let projectionGeneration = 0;\n let lastBatch: BabylonEditorProjectionBatch | null = null;\n let idleNotificationSuspendCount = 0;\n\n const createBatch = (nodeIds: string[]): BabylonEditorProjectionBatch => {\n let resolveSettled!: (status: BabylonEditorProjectionBatchStatus) => void;\n const settled = new Promise<BabylonEditorProjectionBatchStatus>(resolve => {\n resolveSettled = resolve;\n });\n const batch: BabylonEditorProjectionBatch = {\n id: nextBatchId,\n generation: projectionGeneration,\n nodeIds,\n asyncNodeIds: [],\n pendingNodeIds: new Set(),\n settledNodeIds: new Set(),\n notifyScheduled: false,\n state: 'pending',\n handle: null as unknown as BabylonEditorProjectionBatchHandle,\n resolveSettled,\n };\n batch.handle = {\n batchId: batch.id,\n nodeIds: [...batch.nodeIds],\n getStatus: () => createBatchStatus(batch),\n settled,\n };\n nextBatchId += 1;\n lastBatch = batch;\n activeBatches.add(batch);\n return batch;\n };\n\n const createBatchStatus = (\n batch: BabylonEditorProjectionBatch,\n ): BabylonEditorProjectionBatchStatus => ({\n batchId: batch.id,\n nodeIds: [...batch.nodeIds],\n asyncNodeIds: [...batch.asyncNodeIds],\n pendingNodeIds: [...batch.pendingNodeIds],\n settledNodeIds: [...batch.settledNodeIds],\n state: batch.state,\n });\n\n const getIdleState = (): BabylonEditorProjectionIdleState => ({\n idle: activeBatches.size === 0,\n activeBatchIds: [...activeBatches].map(batch => batch.id),\n lastBatch: lastBatch ? createBatchStatus(lastBatch) : null,\n });\n\n const notifyIdleWaitersIfNeeded = (): void => {\n if (idleNotificationSuspendCount > 0 || activeBatches.size > 0 || idleWaiters.size === 0) return;\n const state = getIdleState();\n for (const resolve of idleWaiters) resolve(state);\n idleWaiters.clear();\n };\n\n const completeBatch = (\n batch: BabylonEditorProjectionBatch,\n state: Exclude<BabylonEditorProjectionBatchState, 'pending'>,\n ): BabylonEditorProjectionBatchStatus => {\n if (batch.state !== 'pending') return createBatchStatus(batch);\n batch.state = state;\n const status = createBatchStatus(batch);\n activeBatches.delete(batch);\n batch.resolveSettled(status);\n notifyIdleWaitersIfNeeded();\n return status;\n };\n\n const markActiveBatchesStale = (): void => {\n for (const batch of [...activeBatches]) {\n completeBatch(batch, 'stale');\n }\n };\n\n const scheduleBatchSettled = (batch: BabylonEditorProjectionBatch): void => {\n if (batch.state !== 'pending' || batch.pendingNodeIds.size > 0 || batch.notifyScheduled) return;\n batch.notifyScheduled = true;\n void Promise.resolve().then(() => {\n batch.notifyScheduled = false;\n if (batch.state !== 'pending' || batch.pendingNodeIds.size > 0) return;\n if (batch.generation !== projectionGeneration) {\n completeBatch(batch, 'stale');\n return;\n }\n options.onProjectionBatchSettled?.({\n batchId: batch.id,\n nodeIds: [...batch.nodeIds],\n asyncNodeIds: [...batch.asyncNodeIds],\n settledNodeIds: [...batch.settledNodeIds],\n });\n completeBatch(batch, 'settled');\n });\n };\n\n const trackAsyncProjection = (\n batch: BabylonEditorProjectionBatch,\n node: BabylonEditorProjectionNode,\n projection: ProjectedBabylonEditorNode,\n ): Promise<void> => {\n batch.asyncNodeIds.push(node.id);\n batch.pendingNodeIds.add(node.id);\n return loadModelProjection(\n options,\n node,\n projection,\n () => projectionNodes.get(node.id) ?? node,\n ).finally(() => {\n batch.pendingNodeIds.delete(node.id);\n batch.settledNodeIds.add(node.id);\n if (projections.get(node.id) === projection && !projection.root.isDisposed?.()) {\n delete projection.loadPromise;\n applyProjectionPreviewVisibility(node.id);\n applyProjectionOutline(projectionNodes.get(node.id) ?? node, projection);\n selectionPresentation.updateProjectedNode(projection);\n options.onProjectionReady?.({ nodeId: node.id, async: true });\n }\n scheduleBatchSettled(batch);\n });\n };\n\n const disposeProjectedNode = (projection: ProjectedBabylonEditorNode): void => {\n selectionPresentation.detachProjectedNode(projection.nodeId);\n projection.importStructure = null;\n for (const animationGroup of projection.animationGroups) {\n animationGroup.dispose?.();\n }\n let disposedRuntimeLight = false;\n for (const runtimeObject of projection.runtimeObjects) {\n disposedRuntimeLight = disposedRuntimeLight || isProjectionRuntimeLightObject(runtimeObject);\n runtimeObject.dispose?.();\n }\n if (disposedRuntimeLight) resyncProjectionSceneLightSources(options.scene);\n projection.root?.dispose?.();\n };\n\n const disposeAll = (): void => {\n markActiveBatchesStale();\n projectionGeneration += 1;\n clearShadowDebugOverlayObjects();\n for (const projection of projections.values()) {\n disposeProjectedNode(projection);\n }\n projections.clear();\n projectionNodes.clear();\n projectionParentIds.clear();\n projectionAuthoredActive.clear();\n previewVisibilityOverrides.clear();\n };\n\n const createPreviewVisibilityEntry = (\n nodeId: string,\n visible: boolean,\n ): BabylonEditorProjectionPreviewVisibilityEntry => {\n const authoredActive = projectionAuthoredActive.get(nodeId) !== false;\n return {\n nodeId,\n visible,\n authoredActive,\n effectiveVisible: authoredActive && visible !== false,\n };\n };\n\n const applyProjectionPreviewVisibility = (nodeId: string): void => {\n const projection = projections.get(nodeId);\n if (!projection) return;\n const authoredActive = projectionAuthoredActive.get(nodeId) !== false;\n const override = previewVisibilityOverrides.get(nodeId);\n const effectiveVisible = authoredActive && override !== false;\n projection.root?.setEnabled?.(effectiveVisible);\n for (const runtimeObject of projection.runtimeObjects) {\n runtimeObject.setEnabled?.(effectiveVisible);\n }\n };\n\n const clearShadowDebugOverlayObjects = (): boolean => {\n const hadObjects = shadowDebugOverlayObjects.length > 0;\n for (const object of shadowDebugOverlayObjects.splice(0)) {\n object.dispose?.();\n }\n return hadObjects;\n };\n\n const syncProjectionHierarchy = (): void => {\n for (const [nodeId, projection] of projections) {\n const parentId = projectionParentIds.get(nodeId) ?? null;\n const parent = parentId && parentId !== nodeId\n ? projections.get(parentId)?.root ?? null\n : null;\n if (projection.root.parent !== parent) {\n projection.root.parent = parent;\n }\n }\n };\n\n const projectNodeInBatch = (\n node: BabylonEditorProjectionNode,\n batch: BabylonEditorProjectionBatch,\n ): ProjectedBabylonEditorNode | null => {\n removeNode(node.id);\n const root = createProjectionRoot(options.babylon, options.scene, node);\n if (!root) return null;\n const projection: ProjectedBabylonEditorNode = {\n nodeId: node.id,\n root,\n outlineMeshes: [],\n selectionMeshes: [],\n selectionPresentationTargets: [],\n animationGroups: [],\n runtimeObjects: [],\n };\n projections.set(node.id, projection);\n projectionNodes.set(node.id, node);\n projectionParentIds.set(node.id, node.parentId ?? null);\n projectionAuthoredActive.set(node.id, node.active !== false);\n applyProjectionPreviewVisibility(node.id);\n if (node.transform) applyProjectionTransform(options.babylon, root, node.transform);\n\n if (node.helperKind !== 'root' && !attachRuntimeProjection(options.babylon, options.scene, node, projection)) {\n if (node.asset && options.importModel) {\n projection.loadPromise = trackAsyncProjection(batch, node, projection);\n } else if (node.primitive) {\n attachPrimitiveProjection(options, node, projection);\n } else if (node.asset) {\n attachFallbackProjection(options.babylon, options.scene, node, projection, true);\n }\n }\n if (!projection.loadPromise) applyProjectionOutline(node, projection);\n selectionPresentation.attachProjectedNode(projection);\n if (!projection.loadPromise) batch.settledNodeIds.add(node.id);\n return projection;\n };\n\n const projectNode = (node: BabylonEditorProjectionNode): ProjectedBabylonEditorNode | null => {\n const batch = createBatch([node.id]);\n const projection = projectNodeInBatch(node, batch);\n syncProjectionHierarchy();\n scheduleBatchSettled(batch);\n return projection;\n };\n\n const removeNode = (nodeId: string): void => {\n const existing = projections.get(nodeId);\n if (!existing) return;\n projections.delete(nodeId);\n projectionNodes.delete(nodeId);\n projectionParentIds.delete(nodeId);\n projectionAuthoredActive.delete(nodeId);\n previewVisibilityOverrides.delete(nodeId);\n syncProjectionHierarchy();\n disposeProjectedNode(existing);\n };\n\n return {\n projectNodes(nodes) {\n const nodeList = [...nodes];\n idleNotificationSuspendCount += 1;\n try {\n disposeAll();\n const batch = createBatch(nodeList.map(node => node.id));\n for (const node of nodeList) projectNodeInBatch(node, batch);\n syncProjectionHierarchy();\n scheduleBatchSettled(batch);\n return batch.handle;\n } finally {\n idleNotificationSuspendCount = Math.max(0, idleNotificationSuspendCount - 1);\n notifyIdleWaitersIfNeeded();\n }\n },\n projectNode,\n removeNode,\n rebuild(nodes) {\n return this.projectNodes(nodes);\n },\n getLastProjectionBatch() {\n return lastBatch?.handle ?? null;\n },\n getIdleState,\n waitForIdle() {\n if (activeBatches.size === 0) return Promise.resolve(getIdleState());\n return new Promise(resolve => {\n idleWaiters.add(resolve);\n });\n },\n readNodeTransform(nodeId) {\n const projection = projections.get(nodeId);\n return projection?.root ? readProjectionTransform(projection.root) : null;\n },\n readNodeTransforms(nodeIds) {\n const transforms: Record<string, EditorTransformSnapshot> = {};\n for (const nodeId of nodeIds) {\n const transform = this.readNodeTransform(nodeId);\n if (transform) transforms[nodeId] = transform;\n }\n return transforms;\n },\n toNodeLocalTransform(nodeId, worldTransform) {\n const projection = projections.get(nodeId);\n if (!projection?.root) return null;\n const parent = projection.root.parent ?? null;\n return parent\n ? toEditorLocalTransformFromWorld(\n readProjectionWorldTransform(parent),\n worldTransform,\n { allowMatrixFallback: true },\n )\n : cloneProjectionTransformSnapshot(worldTransform);\n },\n readNodeImportStructure(nodeId) {\n return cloneProjectionImportStructureSnapshot(projections.get(nodeId)?.importStructure ?? null);\n },\n setNodeTransformPreview(nodeId, transform) {\n const projection = projections.get(nodeId);\n if (!projection?.root) return;\n if (!applyProjectionWorldTransform(options.babylon, projection.root, transform)) {\n options.logger?.warn?.(`[BabylonEditorProjection] Failed to preview non-representable world transform for \"${nodeId}\"`);\n }\n },\n setNodeTransformsPreview(transforms) {\n for (const [nodeId, transform] of Object.entries(transforms)) {\n this.setNodeTransformPreview(nodeId, transform);\n }\n },\n getAttachableRoot(nodeId) {\n return projections.get(nodeId)?.root ?? null;\n },\n getSelectionBounds(nodeIds) {\n return getProjectionSelectionBounds(projections, nodeIds);\n },\n getSelectionPivot(nodeIds) {\n const bounds = getProjectionSelectionBounds(projections, nodeIds);\n if (bounds) {\n return {\n mode: 'selection-center',\n position: bounds.center,\n };\n }\n const transforms = nodeIds\n .map(nodeId => this.readNodeTransform(nodeId))\n .filter((transform): transform is EditorTransformSnapshot => !!transform);\n if (transforms.length === 0) return null;\n return {\n mode: 'selection-center',\n position: averagePositions(transforms),\n };\n },\n syncNodeTransform(node) {\n const projection = projections.get(node.id);\n if (!projection) return;\n projectionNodes.set(node.id, node);\n projectionAuthoredActive.set(node.id, node.active !== false);\n applyProjectionPreviewVisibility(node.id);\n projectionParentIds.set(node.id, node.parentId ?? null);\n syncProjectionHierarchy();\n if (node.transform) applyProjectionTransform(options.babylon, projection.root, node.transform);\n selectionPresentation.updateProjectedNode(projection);\n },\n syncRuntimeNode(node) {\n const projection = projections.get(node.id);\n if (!projection || node.runtimeKind !== 'light') return false;\n projectionNodes.set(node.id, node);\n projectionAuthoredActive.set(node.id, node.active !== false);\n applyProjectionPreviewVisibility(node.id);\n projectionParentIds.set(node.id, node.parentId ?? null);\n syncProjectionHierarchy();\n if (node.transform) applyProjectionTransform(options.babylon, projection.root, node.transform);\n if (!syncRuntimeLightProjection(options.babylon, options.scene, node, projection)) return false;\n selectionPresentation.updateProjectedNode(projection);\n return true;\n },\n syncNodeMetadata(node) {\n const projection = projections.get(node.id);\n if (!projection) return;\n projectionNodes.set(node.id, node);\n syncProjectionNodeMetadata(projection, node);\n },\n syncSelection(selection) {\n selectionPresentation.syncSelection(selection);\n },\n getSelectionPresentationDiagnostics() {\n return selectionPresentation.getDiagnostics();\n },\n resolveProjectionNodeId(target) {\n return resolveBabylonProjectionNodeId(target);\n },\n resolvePickSelectionNodeId(target) {\n return resolveBabylonPickSelectionNodeId(target);\n },\n pickNodeIdAt(clientX, clientY) {\n return pickBabylonProjectionNodeIdAt(options.scene, clientX, clientY);\n },\n getNodeIdsInScreenRect(rect) {\n return getProjectionNodeIdsInScreenRect(options.babylon, options.scene, projections, rect);\n },\n getProjectedNode(nodeId) {\n return projections.get(nodeId) ?? null;\n },\n getProjectedNodeIds() {\n return [...projections.keys()];\n },\n getProjectionParentIds(nodeId) {\n const parentIds: string[] = [];\n const seen = new Set<string>([nodeId]);\n let currentId: string | null = nodeId;\n while (currentId) {\n const parentId: string | null = projectionParentIds.get(currentId) ?? null;\n if (!parentId || parentId === currentId || seen.has(parentId)) break;\n seen.add(parentId);\n parentIds.push(parentId);\n currentId = parentId;\n }\n return parentIds;\n },\n getPreviewVisibilityOverrides() {\n return [...previewVisibilityOverrides.entries()]\n .map(([nodeId, visible]) => createPreviewVisibilityEntry(nodeId, visible));\n },\n setPreviewVisibilityOverrides(overrides) {\n for (const [nodeId, visible] of Object.entries(overrides)) {\n if (!projections.has(nodeId)) continue;\n previewVisibilityOverrides.set(nodeId, visible !== false);\n applyProjectionPreviewVisibility(nodeId);\n }\n return this.getPreviewVisibilityOverrides();\n },\n clearPreviewVisibilityOverrides() {\n const changedNodeIds = [...previewVisibilityOverrides.keys()];\n previewVisibilityOverrides.clear();\n for (const nodeId of changedNodeIds) applyProjectionPreviewVisibility(nodeId);\n return [];\n },\n setShadowDebugOverlay(items) {\n clearShadowDebugOverlayObjects();\n for (const item of items) {\n const object = createShadowDebugOverlayObject(options.babylon, options.scene, item);\n if (object) shadowDebugOverlayObjects.push(object);\n }\n return items.map(item => item.id);\n },\n clearShadowDebugOverlay() {\n return clearShadowDebugOverlayObjects();\n },\n dispose() {\n disposeAll();\n selectionPresentation.dispose();\n },\n };\n}\n\nfunction readVector3(value: any, fallback: EditorTransformVec3): EditorTransformVec3 {\n return {\n x: Number.isFinite(value?.x) ? Number(value.x) : fallback.x,\n y: Number.isFinite(value?.y) ? Number(value.y) : fallback.y,\n z: Number.isFinite(value?.z) ? Number(value.z) : fallback.z,\n };\n}\n\nfunction createShadowDebugOverlayObject(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n item: BabylonEditorProjectionShadowDebugOverlayItem,\n): any | null {\n if (item.kind === 'light-direction') return createShadowDebugDirectionOverlay(babylon, scene, item);\n const bounds = item.bounds ?? createBoundsFromCenterSize(item.center, item.size);\n if (!bounds) return null;\n const MeshBuilder = (babylon as any).MeshBuilder;\n const StandardMaterial = (babylon as any).StandardMaterial;\n if (!MeshBuilder?.CreateBox || !StandardMaterial) return null;\n const size = {\n x: Math.max(Math.abs(bounds.size.x), 0.01),\n y: Math.max(Math.abs(bounds.size.y), item.kind === 'footprint' ? 0.015 : 0.01),\n z: Math.max(Math.abs(bounds.size.z), 0.01),\n };\n const mesh = MeshBuilder.CreateBox(`${item.id}.shadowDebugOverlay`, {\n width: size.x,\n height: size.y,\n depth: size.z,\n }, scene);\n if (!mesh) return null;\n mesh.id = item.id;\n mesh.name = item.id;\n mesh.isPickable = false;\n mesh.renderingGroupId = 3;\n mesh.metadata = createShadowDebugOverlayMetadata();\n mesh.position = createBabylonVector3(babylon, bounds.center);\n const material = new StandardMaterial(`${item.id}.shadowDebugOverlay.material`, scene);\n const color = readShadowDebugOverlayColor(babylon, item.kind);\n if (color) {\n material.diffuseColor = color;\n material.emissiveColor = color;\n }\n material.alpha = item.kind === 'receiver-surface' ? 0.14 : item.kind === 'footprint' ? 0.32 : 0.5;\n material.wireframe = item.kind !== 'footprint' && item.kind !== 'receiver-surface';\n material.disableLighting = true;\n mesh.material = material;\n const disposeMaterial = material.dispose?.bind(material);\n const disposeMesh = mesh.dispose?.bind(mesh);\n mesh.dispose = (...args: unknown[]) => {\n disposeMaterial?.();\n return disposeMesh?.(...args);\n };\n return mesh;\n}\n\nfunction createShadowDebugDirectionOverlay(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n item: BabylonEditorProjectionShadowDebugOverlayItem,\n): any | null {\n const MeshBuilder = (babylon as any).MeshBuilder;\n if (!MeshBuilder?.CreateLineSystem) return null;\n const center = item.center ?? item.bounds?.center;\n const direction = normalizeDebugVec3(item.direction ?? { x: -0.3, y: -1, z: -0.2 });\n if (!center || !direction) return null;\n const length = Math.max(item.size?.x ?? item.bounds?.size.x ?? 2, item.size?.y ?? item.bounds?.size.y ?? 2, item.size?.z ?? item.bounds?.size.z ?? 2, 2);\n const start = createBabylonVector3(babylon, {\n x: center.x - direction.x * length * 0.5,\n y: center.y - direction.y * length * 0.5,\n z: center.z - direction.z * length * 0.5,\n });\n const end = createBabylonVector3(babylon, {\n x: center.x + direction.x * length * 0.5,\n y: center.y + direction.y * length * 0.5,\n z: center.z + direction.z * length * 0.5,\n });\n const arrowLeft = createBabylonVector3(babylon, {\n x: end.x - direction.x * length * 0.18 + direction.z * length * 0.08,\n y: end.y - direction.y * length * 0.18,\n z: end.z - direction.z * length * 0.18 - direction.x * length * 0.08,\n });\n const arrowRight = createBabylonVector3(babylon, {\n x: end.x - direction.x * length * 0.18 - direction.z * length * 0.08,\n y: end.y - direction.y * length * 0.18,\n z: end.z - direction.z * length * 0.18 + direction.x * length * 0.08,\n });\n const line = MeshBuilder.CreateLineSystem(`${item.id}.shadowDebugOverlay`, {\n lines: [\n [start, end],\n [end, arrowLeft],\n [end, arrowRight],\n ],\n }, scene);\n if (!line) return null;\n line.id = item.id;\n line.name = item.id;\n line.isPickable = false;\n line.renderingGroupId = 3;\n line.metadata = createShadowDebugOverlayMetadata();\n const color = readShadowDebugOverlayColor(babylon, item.kind);\n if (color) line.color = color;\n return line;\n}\n\nfunction createShadowDebugOverlayMetadata(): Record<string, unknown> {\n return {\n shadowDebugOverlayInternal: true,\n disablePlanarShadow: true,\n disableBlobShadow: true,\n disableStaticProjectedShadow: true,\n };\n}\n\nfunction createBoundsFromCenterSize(\n center: BabylonEditorProjectionVec3 | undefined,\n size: BabylonEditorProjectionVec3 | undefined,\n): BabylonEditorProjectionDebugBounds | null {\n if (!center || !size) return null;\n return {\n center,\n size,\n min: {\n x: center.x - size.x / 2,\n y: center.y - size.y / 2,\n z: center.z - size.z / 2,\n },\n max: {\n x: center.x + size.x / 2,\n y: center.y + size.y / 2,\n z: center.z + size.z / 2,\n },\n };\n}\n\nfunction createBabylonVector3(babylon: BabylonRuntimeGlobal, value: BabylonEditorProjectionVec3): any {\n const Vector3 = (babylon as any).Vector3;\n return Vector3 ? new Vector3(value.x, value.y, value.z) : { x: value.x, y: value.y, z: value.z };\n}\n\nfunction normalizeDebugVec3(value: BabylonEditorProjectionVec3): BabylonEditorProjectionVec3 | null {\n const length = Math.hypot(value.x, value.y, value.z);\n if (!Number.isFinite(length) || length <= 0.0001) return null;\n return {\n x: value.x / length,\n y: value.y / length,\n z: value.z / length,\n };\n}\n\nfunction readShadowDebugOverlayColor(babylon: BabylonRuntimeGlobal, kind: BabylonEditorProjectionShadowDebugOverlayItem['kind']): any | null {\n const Color3 = (babylon as any).Color3;\n if (!Color3) return null;\n if (kind === 'caster-bounds') return new Color3(1, 0.78, 0.1);\n if (kind === 'receiver-bounds') return new Color3(0.1, 0.75, 1);\n if (kind === 'receiver-surface') return new Color3(0.05, 0.55, 1);\n if (kind === 'light-direction') return new Color3(1, 0.95, 0.2);\n if (kind === 'footprint') return new Color3(0.1, 1, 0.42);\n return new Color3(1, 0.25, 0.25);\n}\n\nfunction addVec3(left: EditorTransformVec3, right: EditorTransformVec3): EditorTransformVec3 {\n return {\n x: left.x + right.x,\n y: left.y + right.y,\n z: left.z + right.z,\n };\n}\n\nfunction scaleVec3(value: EditorTransformVec3, factor: number): EditorTransformVec3 {\n return {\n x: value.x * factor,\n y: value.y * factor,\n z: value.z * factor,\n };\n}\n\nfunction averagePositions(transforms: EditorTransformSnapshot[]): EditorTransformVec3 {\n const sum = transforms.reduce(\n (current, transform) => addVec3(current, readEditorTransformPosition(transform)),\n { x: 0, y: 0, z: 0 },\n );\n return scaleVec3(sum, 1 / transforms.length);\n}\n\nfunction getProjectionSelectionBounds(\n projections: Map<string, ProjectedBabylonEditorNode>,\n nodeIds: string[],\n): BabylonEditorProjectionBounds | null {\n let min: EditorTransformVec3 | null = null;\n let max: EditorTransformVec3 | null = null;\n let oriented: BabylonEditorProjectionBounds['oriented'];\n for (const nodeId of nodeIds) {\n const target = resolveProjectionSelectionBoundsTarget(projections, nodeId);\n const bounds = readProjectionBounds(target);\n if (!bounds) continue;\n if (nodeIds.length === 1) oriented = readProjectionOrientedBounds(target) ?? undefined;\n min = min\n ? {\n x: Math.min(min.x, bounds.min.x),\n y: Math.min(min.y, bounds.min.y),\n z: Math.min(min.z, bounds.min.z),\n }\n : bounds.min;\n max = max\n ? {\n x: Math.max(max.x, bounds.max.x),\n y: Math.max(max.y, bounds.max.y),\n z: Math.max(max.z, bounds.max.z),\n }\n : bounds.max;\n }\n if (!min || !max) return null;\n const center = {\n x: (min.x + max.x) / 2,\n y: (min.y + max.y) / 2,\n z: (min.z + max.z) / 2,\n };\n return {\n min,\n max,\n center,\n size: {\n x: max.x - min.x,\n y: max.y - min.y,\n z: max.z - min.z,\n },\n ...(oriented ? { oriented } : {}),\n };\n}\n\nfunction resolveProjectionSelectionBoundsTarget(\n projections: Map<string, ProjectedBabylonEditorNode>,\n nodeId: string,\n): any | null {\n const projection = projections.get(nodeId);\n if (projection?.root) return projection.root;\n for (const candidateProjection of projections.values()) {\n const selectionTarget = findProjectionSelectionMeshByNodeId(candidateProjection, nodeId);\n if (selectionTarget) return selectionTarget;\n }\n return null;\n}\n\nfunction findProjectionSelectionMeshByNodeId(\n projection: ProjectedBabylonEditorNode,\n nodeId: string,\n): any | null {\n for (const mesh of projection.selectionMeshes ?? []) {\n if (readProjectionMeshSelectionNodeId(mesh) === nodeId) return mesh;\n }\n for (const mesh of projection.outlineMeshes) {\n if (readProjectionMeshSelectionNodeId(mesh) === nodeId) return mesh;\n }\n return null;\n}\n\nfunction readProjectionMeshSelectionNodeId(mesh: any): string | null {\n const nodeId = mesh?.metadata?.editorProjection?.nodeId;\n return typeof nodeId === 'string' && nodeId.length > 0 ? nodeId : null;\n}\n\nfunction readProjectionBounds(root: any): Pick<BabylonEditorProjectionBounds, 'min' | 'max'> | null {\n if (!root) return null;\n const bounds = root.getHierarchyBoundingVectors?.();\n if (bounds?.min && bounds?.max) {\n return {\n min: readVector3(bounds.min, { x: 0, y: 0, z: 0 }),\n max: readVector3(bounds.max, { x: 0, y: 0, z: 0 }),\n };\n }\n const transform = readProjectionTransform(root);\n const position = readEditorTransformPosition(transform);\n return {\n min: position,\n max: position,\n };\n}\n\nfunction readProjectionOrientedBounds(root: any): BabylonEditorProjectionBounds['oriented'] | null {\n if (!root) return null;\n const worldMatrix = root.computeWorldMatrix?.(true) ?? root.getWorldMatrix?.();\n const inverseWorldMatrix = worldMatrix?.clone?.();\n if (!worldMatrix || !inverseWorldMatrix?.invert) return null;\n inverseWorldMatrix.invert();\n const meshes = [root, ...(root.getChildMeshes?.(false) ?? [])];\n const localPoints: any[] = [];\n let Vector3: any = null;\n for (const mesh of meshes) {\n mesh?.computeWorldMatrix?.(true);\n const worldCorners = mesh?.getBoundingInfo?.()?.boundingBox?.vectorsWorld;\n if (!Array.isArray(worldCorners)) continue;\n for (const point of worldCorners) {\n const PointVector3 = point?.constructor;\n if (typeof PointVector3?.TransformCoordinates !== 'function') continue;\n Vector3 ??= PointVector3;\n localPoints.push(PointVector3.TransformCoordinates(point, inverseWorldMatrix));\n }\n }\n if (!Vector3 || localPoints.length === 0) return null;\n const localMin = {\n x: Math.min(...localPoints.map(point => Number(point.x))),\n y: Math.min(...localPoints.map(point => Number(point.y))),\n z: Math.min(...localPoints.map(point => Number(point.z))),\n };\n const localMax = {\n x: Math.max(...localPoints.map(point => Number(point.x))),\n y: Math.max(...localPoints.map(point => Number(point.y))),\n z: Math.max(...localPoints.map(point => Number(point.z))),\n };\n if (![...Object.values(localMin), ...Object.values(localMax)].every(Number.isFinite)) return null;\n const transformPoint = (x: number, y: number, z: number): EditorTransformVec3 => {\n const point = Vector3.TransformCoordinates(new Vector3(x, y, z), worldMatrix);\n return { x: Number(point.x), y: Number(point.y), z: Number(point.z) };\n };\n const minMinMin = transformPoint(localMin.x, localMin.y, localMin.z);\n const maxMinMin = transformPoint(localMax.x, localMin.y, localMin.z);\n const minMaxMin = transformPoint(localMin.x, localMax.y, localMin.z);\n const minMinMax = transformPoint(localMin.x, localMin.y, localMax.z);\n const maxMaxMax = transformPoint(localMax.x, localMax.y, localMax.z);\n const xEdge = subtractProjectionVec3(maxMinMin, minMinMin);\n const yEdge = subtractProjectionVec3(minMaxMin, minMinMin);\n const zEdge = subtractProjectionVec3(minMinMax, minMinMin);\n const size = {\n x: Math.hypot(xEdge.x, xEdge.y, xEdge.z),\n y: Math.hypot(yEdge.x, yEdge.y, yEdge.z),\n z: Math.hypot(zEdge.x, zEdge.y, zEdge.z),\n };\n if (![size.x, size.y, size.z].every(value => Number.isFinite(value) && value >= 0)) return null;\n const worldOrigin = transformPoint(0, 0, 0);\n const normalizeWorldAxis = (point: EditorTransformVec3): EditorTransformVec3 | null => {\n const axis = subtractProjectionVec3(point, worldOrigin);\n const length = Math.hypot(axis.x, axis.y, axis.z);\n return Number.isFinite(length) && length > 0.000001 ? scaleVec3(axis, 1 / length) : null;\n };\n const xAxis = normalizeWorldAxis(transformPoint(1, 0, 0));\n const yAxis = normalizeWorldAxis(transformPoint(0, 1, 0));\n const zAxis = normalizeWorldAxis(transformPoint(0, 0, 1));\n if (!xAxis || !yAxis || !zAxis) return null;\n return {\n center: {\n x: (minMinMin.x + maxMaxMax.x) / 2,\n y: (minMinMin.y + maxMaxMax.y) / 2,\n z: (minMinMin.z + maxMaxMax.z) / 2,\n },\n size,\n axes: {\n x: xAxis,\n y: yAxis,\n z: zAxis,\n },\n };\n}\n\nfunction subtractProjectionVec3(\n left: EditorTransformVec3,\n right: EditorTransformVec3,\n): EditorTransformVec3 {\n return {\n x: left.x - right.x,\n y: left.y - right.y,\n z: left.z - right.z,\n };\n}\n\nexport function readProjectionTransform(node: any): EditorTransformSnapshot {\n return readProjectionWorldTransform(node);\n}\n\nfunction readProjectionWorldTransform(node: any, seen = new Set<any>()): EditorTransformSnapshot {\n const local = readProjectionLocalTransform(node);\n const parent = node?.parent ?? null;\n if (!parent || seen.has(node)) return local;\n seen.add(node);\n const parentWorld = readProjectionWorldTransform(parent, seen);\n return combineEditorTransforms(parentWorld, local) ?? local;\n}\n\nfunction readProjectionLocalTransform(node: any): EditorTransformSnapshot {\n const matrix = readProjectionLocalMatrixTransform(node);\n if (matrix) return matrix;\n const rotation = node?.rotationQuaternion?.toEulerAngles?.() ?? node?.rotation;\n return {\n position: readVector3(node?.position, { x: 0, y: 0, z: 0 }),\n rotation: readVector3(rotation, { x: 0, y: 0, z: 0 }),\n scale: readVector3(node?.scaling, { x: 1, y: 1, z: 1 }),\n };\n}\n\nfunction readProjectionLocalMatrixTransform(node: any): EditorTransformSnapshot | null {\n const metadata = readProjectionObject(node?.metadata);\n const metadataMatrix = metadata?.[PROJECTION_LOCAL_MATRIX_METADATA_KEY];\n if (Array.isArray(metadataMatrix)) {\n const transform = createEditorTransformMatrixSnapshot(metadataMatrix);\n if (transform) return transform;\n }\n const pivotMatrix = node?._usePivotMatrix ? node?._pivotMatrix?.asArray?.() : null;\n return Array.isArray(pivotMatrix) || ArrayBuffer.isView(pivotMatrix)\n ? createEditorTransformMatrixSnapshot(Array.from(pivotMatrix as ArrayLike<number>))\n : null;\n}\n\nfunction createProjectionRoot(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n node: BabylonEditorProjectionNode,\n): any | null {\n const TransformNode = (babylon as any).TransformNode;\n if (!TransformNode) return null;\n const root = new TransformNode(`${node.id}.projection`, scene);\n root.id = node.id;\n root.name = node.name ?? node.id;\n const disableGeneratedShadow = node.runtimeKind === 'camera' || node.runtimeKind === 'light' || node.helperKind === 'root';\n root.metadata = {\n ...(root.metadata ?? {}),\n ...(disableGeneratedShadow ? {\n disablePlanarShadow: true,\n disableBlobShadow: true,\n disableStaticProjectedShadow: true,\n } : {}),\n editorProjection: {\n nodeId: node.id,\n ...(node.runtimeKind ? { runtimeKind: node.runtimeKind } : {}),\n ...createProjectionShadowMetadata(node),\n },\n };\n return root;\n}\n\nasync function loadModelProjection(\n options: BabylonEditorProjectionOptions,\n node: BabylonEditorProjectionNode,\n projection: ProjectedBabylonEditorNode,\n getLatestNode: () => BabylonEditorProjectionNode,\n): Promise<void> {\n const asset = node.asset;\n if (!asset || !options.importModel) {\n const latestNode = getLatestNode();\n attachFallbackProjection(options.babylon, options.scene, latestNode, projection, !!asset);\n applyProjectionOutline(latestNode, projection);\n return;\n }\n\n try {\n const result = await options.importModel({\n babylon: options.babylon,\n scene: options.scene,\n root: projection.root,\n node,\n asset,\n });\n if (!result) {\n const latestNode = getLatestNode();\n attachFallbackProjection(options.babylon, options.scene, latestNode, projection, true);\n applyProjectionOutline(latestNode, projection);\n return;\n }\n if (projection.root.isDisposed?.()) {\n disposeImportedProjectionResult(result);\n return;\n }\n const latestNode = getLatestNode();\n attachImportedProjectionResult(options, latestNode, asset, projection, result);\n applyProjectionOutline(latestNode, projection);\n } catch (error) {\n options.logger?.warn?.(`[BabylonEditorProjection] Failed to project model \"${asset.sourceId ?? asset.id ?? node.id}\"`, error);\n if (!projection.root.isDisposed?.()) {\n const latestNode = getLatestNode();\n attachFallbackProjection(options.babylon, options.scene, latestNode, projection, true);\n applyProjectionOutline(latestNode, projection);\n }\n }\n}\n\nfunction attachImportedProjectionResult(\n options: BabylonEditorProjectionOptions,\n node: BabylonEditorProjectionNode,\n asset: BabylonEditorProjectionAsset,\n projection: ProjectedBabylonEditorNode,\n result: BabylonEditorProjectionImportResult,\n): void {\n const { babylon, scene } = options;\n const TransformNode = (babylon as any).TransformNode;\n if (!TransformNode) return;\n try {\n const modelRoot = new TransformNode(`${node.id}.modelRoot`, scene);\n modelRoot.parent = projection.root;\n modelRoot.metadata = {\n ...(modelRoot.metadata ?? {}),\n editorProjection: {\n nodeId: node.id,\n sourceId: asset.sourceId,\n ...createProjectionShadowMetadata(node),\n },\n };\n applyAssetDefaultsTransform(babylon, modelRoot, asset.transform);\n collapseZeroVertexProjectionWrapperMeshes(babylon, scene, result);\n\n const importedNodes = [\n ...(result.transformNodes ?? []),\n ...(result.meshes ?? []),\n ];\n const importedNodeSet = new Set<any>(importedNodes);\n for (const importedNode of importedNodes) {\n if (importedNode === modelRoot) continue;\n if (!importedNode.parent || !importedNodeSet.has(importedNode.parent)) {\n importedNode.parent = modelRoot;\n }\n importedNode.metadata = {\n ...(importedNode.metadata ?? {}),\n editorProjection: {\n nodeId: node.id,\n sourceId: asset.sourceId,\n ...createProjectionShadowMetadata(node),\n },\n };\n }\n const materialSlots = readProjectionAssetMaterialSlots(asset, node.id);\n const materialOwnerResolutionContext = createProjectionMaterialOwnerResolutionContext(\n modelRoot,\n node.id,\n );\n const explicitlyBoundSlotIds = new Set(\n createProjectionMaterialSlotBindings(node).map(binding => binding.slot.slotId),\n );\n const ownerNodePathByMesh = new Map<any, string>();\n const ownerMeshCountByKey = new Map<string, number>();\n for (const mesh of result.meshes ?? []) {\n const ownerNodePath = buildProjectionOwnerNodePath(mesh, modelRoot, node.id);\n if (!ownerNodePath) continue;\n ownerNodePathByMesh.set(mesh, ownerNodePath);\n const ownerKey = createMaterialSlotOwnerPathMatchKey(ownerNodePath, { projectionNodeId: node.id });\n ownerMeshCountByKey.set(ownerKey, (ownerMeshCountByKey.get(ownerKey) ?? 0) + 1);\n }\n const splitPrimitiveOrdinalByOwnerKey = new Map<string, number>();\n const primitiveBoundsProxyOwnerKeys = new Set<string>();\n for (const mesh of result.meshes ?? []) {\n mesh.isPickable = true;\n applyProjectionRenderingToMesh(node, mesh);\n const ownerNodePath = ownerNodePathByMesh.get(mesh) ?? null;\n if (ownerNodePath) {\n const ownerKey = createMaterialSlotOwnerPathMatchKey(ownerNodePath, { projectionNodeId: node.id });\n const ownerMeshCount = ownerMeshCountByKey.get(ownerKey) ?? 0;\n const splitPrimitiveSlot = resolveProjectionSplitPrimitiveMeshSelectionSlot(\n mesh,\n materialSlots,\n materialOwnerResolutionContext,\n explicitlyBoundSlotIds,\n ownerMeshCount,\n splitPrimitiveOrdinalByOwnerKey,\n );\n const primitiveSelectionMeshes = createProjectionAssetMeshSelectionProxies(\n options,\n node,\n projection,\n mesh,\n ownerNodePath,\n materialSlots,\n materialOwnerResolutionContext,\n explicitlyBoundSlotIds,\n );\n const primitiveBoundsSelectionMeshes = !splitPrimitiveSlot\n && primitiveSelectionMeshes.length === 0\n && !primitiveBoundsProxyOwnerKeys.has(ownerKey)\n ? createProjectionPrimitiveBoundsSelectionProxies(\n options,\n node,\n projection,\n mesh,\n ownerNodePath,\n materialSlots,\n materialOwnerResolutionContext,\n explicitlyBoundSlotIds,\n ownerMeshCount,\n )\n : [];\n if (primitiveBoundsSelectionMeshes.length > 0) primitiveBoundsProxyOwnerKeys.add(ownerKey);\n const usesSelectionMeshes = primitiveSelectionMeshes.length > 0\n || primitiveBoundsSelectionMeshes.length > 0\n || primitiveBoundsProxyOwnerKeys.has(ownerKey);\n const selectionKey = resolveProjectionAssetMeshSelectionKey(\n asset,\n mesh,\n ownerNodePath,\n materialOwnerResolutionContext,\n explicitlyBoundSlotIds,\n node.id,\n );\n mesh.metadata = {\n ...(mesh.metadata ?? {}),\n editorProjection: {\n nodeId: splitPrimitiveSlot\n ? createAssetMeshProjectionNodeId(node.id, splitPrimitiveSlot.key)\n : usesSelectionMeshes\n ? node.id\n : createAssetMeshProjectionNodeId(node.id, selectionKey),\n rootNodeId: node.id,\n sourceId: asset.sourceId,\n ownerNodePath,\n ...(splitPrimitiveSlot\n ? {\n slotSelectionKey: splitPrimitiveSlot.key,\n primitiveIndex: splitPrimitiveSlot.primitiveIndex,\n }\n : {}),\n ...(!splitPrimitiveSlot && !usesSelectionMeshes && selectionKey !== ownerNodePath\n ? { slotSelectionKey: selectionKey }\n : {}),\n runtimeKind: 'assetMesh',\n ...createProjectionShadowMetadata(node),\n },\n };\n }\n }\n projection.runtimeObjects.push(\n ...applyProjectionArtistMaterialProfilesToMeshes(\n options,\n node,\n modelRoot,\n result.meshes ?? [],\n materialOwnerResolutionContext,\n ),\n );\n for (const animationGroup of result.animationGroups ?? []) {\n animationGroup.stop?.();\n }\n projection.animationGroups = result.animationGroups ?? [];\n projection.outlineMeshes = (result.meshes ?? []).filter((mesh: any) => mesh.getTotalVertices?.() > 0);\n projection.importStructure = createProjectionImportStructureSnapshot(node, asset, modelRoot, result);\n const lightSync = resyncProjectionMeshLightSources(scene, result.meshes ?? []);\n options.logger?.info?.('[BabylonEditorProjection] Model light sources synchronized', {\n projectionNodeId: node.id,\n sourceAssetId: asset.sourceId ?? asset.id ?? null,\n importedMeshCount: lightSync.importedMeshCount,\n instancedMeshCount: lightSync.instancedMeshCount,\n lightSourceOwnerCount: lightSync.lightSourceOwnerCount,\n activeSceneLightCount: lightSync.activeSceneLightCount,\n resolvedLightSourceOwnerCount: lightSync.resolvedLightSourceOwnerCount,\n });\n } catch (error) {\n disposeImportedProjectionResult(result);\n throw error;\n }\n}\n\nfunction collapseZeroVertexProjectionWrapperMeshes(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n result: BabylonEditorProjectionImportResult,\n): void {\n const meshes = result.meshes ?? [];\n if (meshes.length === 0) return;\n const TransformNode = (babylon as any).TransformNode;\n if (!TransformNode) return;\n const sourceMeshes = collectProjectionSourceMeshReferences(meshes);\n const keptMeshes: any[] = [];\n const replacementTransformNodes: any[] = [];\n for (const mesh of meshes) {\n if (!canCollapseProjectionWrapperMesh(mesh, sourceMeshes)) {\n keptMeshes.push(mesh);\n continue;\n }\n const replacement = createProjectionWrapperTransformNode(TransformNode, scene, mesh);\n if (!replacement) {\n keptMeshes.push(mesh);\n continue;\n }\n for (const child of readProjectionDirectChildren(mesh)) {\n child.parent = replacement;\n }\n mesh.dispose?.(true, false);\n replacementTransformNodes.push(replacement);\n }\n if (replacementTransformNodes.length === 0) return;\n result.meshes = keptMeshes;\n result.transformNodes = [\n ...(result.transformNodes ?? []),\n ...replacementTransformNodes,\n ];\n}\n\nfunction collectProjectionSourceMeshReferences(meshes: readonly any[]): Set<any> {\n const sourceMeshes = new Set<any>();\n for (const mesh of meshes) {\n const sourceMesh = mesh?.sourceMesh;\n if (sourceMesh) sourceMeshes.add(sourceMesh);\n }\n return sourceMeshes;\n}\n\nfunction canCollapseProjectionWrapperMesh(mesh: any, sourceMeshes: ReadonlySet<any>): boolean {\n if (!mesh || mesh.getClassName?.() !== 'Mesh') return false;\n if (sourceMeshes.has(mesh)) return false;\n if (mesh.sourceMesh) return false;\n const vertices = mesh.getTotalVertices?.();\n if (vertices !== 0) return false;\n if (Array.isArray(mesh.instances) && mesh.instances.length > 0) return false;\n if (mesh.skeleton || mesh.morphTargetManager) return false;\n if (Array.isArray(mesh.subMeshes) && mesh.subMeshes.length > 0) return false;\n if (mesh.material) return false;\n const projection = readProjectionObject(mesh.metadata?.editorProjection);\n const runtimeKind = projection?.runtimeKind;\n if (\n runtimeKind === 'assetMeshSelectionProxy'\n || runtimeKind === 'primitive'\n || runtimeKind === 'camera'\n || runtimeKind === 'light'\n || projection?.primitiveShape != null\n || projection?.helper != null\n || projection?.disableStaticProjectedShadow === false\n ) {\n return false;\n }\n return true;\n}\n\nfunction createProjectionWrapperTransformNode(\n TransformNode: new (name: string, scene: RuntimeScene) => any,\n scene: RuntimeScene,\n mesh: any,\n): any | null {\n const name = typeof mesh.name === 'string' ? mesh.name : typeof mesh.id === 'string' ? mesh.id : 'projectionWrapper';\n const replacement = new TransformNode(name, scene);\n if (typeof mesh.id === 'string') replacement.id = mesh.id;\n if (typeof mesh.name === 'string') replacement.name = mesh.name;\n replacement.parent = mesh.parent ?? null;\n if (mesh.metadata && typeof mesh.metadata === 'object') {\n replacement.metadata = { ...mesh.metadata };\n }\n if (mesh.reservedDataStore && typeof mesh.reservedDataStore === 'object') {\n replacement.reservedDataStore = { ...mesh.reservedDataStore };\n }\n if (Array.isArray(mesh.animations)) replacement.animations = [...mesh.animations];\n copyProjectionWrapperTransform(mesh, replacement);\n if (typeof mesh.isEnabled === 'function' && typeof replacement.setEnabled === 'function') {\n replacement.setEnabled(mesh.isEnabled());\n }\n if (typeof mesh.state === 'string') replacement.state = mesh.state;\n if (typeof mesh.layerMask === 'number') replacement.layerMask = mesh.layerMask;\n return replacement;\n}\n\nfunction copyProjectionWrapperTransform(source: any, target: any): void {\n copyBabylonVector3(source.position, target.position);\n copyBabylonVector3(source.rotation, target.rotation);\n copyBabylonVector3(source.scaling, target.scaling);\n if (source.rotationQuaternion?.clone) {\n target.rotationQuaternion = source.rotationQuaternion.clone();\n } else {\n target.rotationQuaternion = null;\n }\n const pivotMatrix = source._pivotMatrix?.clone?.() ?? source.getPivotMatrix?.()?.clone?.();\n if (pivotMatrix) {\n if (source._usePivotMatrix && typeof target.setPreTransformMatrix === 'function') {\n target.setPreTransformMatrix(pivotMatrix.clone?.() ?? pivotMatrix);\n } else if (typeof target.setPivotMatrix === 'function') {\n target.setPivotMatrix(pivotMatrix.clone?.() ?? pivotMatrix, false);\n }\n }\n}\n\nfunction copyBabylonVector3(source: any, target: any): void {\n if (!source || !target) return;\n if (typeof target.copyFrom === 'function') {\n target.copyFrom(source);\n return;\n }\n target.x = source.x;\n target.y = source.y;\n target.z = source.z;\n}\n\nfunction readProjectionDirectChildren(node: any): any[] {\n const children = node?.getChildren?.((candidate: any) => candidate?.parent === node, true);\n return Array.isArray(children) ? children.filter(child => child?.parent === node) : [];\n}\n\nfunction createProjectionImportStructureSnapshot(\n node: BabylonEditorProjectionNode,\n asset: BabylonEditorProjectionAsset,\n modelRoot: any,\n result: BabylonEditorProjectionImportResult,\n): BabylonEditorProjectionImportStructureSnapshot {\n const runtimeNodes = collectProjectionImportRuntimeNodes(modelRoot, result);\n const nodeIdByRuntimeNode = new Map<any, string>();\n const materialIdByRuntimeMaterial = new Map<any, string>();\n const textureIdByRuntimeTexture = new Map<any, string>();\n const materialNodeIds = new Map<string, Set<string>>();\n const materialTextureIds = new Map<string, Set<string>>();\n const rootSnapshotId = 'root';\n const snapshots: BabylonEditorProjectionImportNodeSnapshot[] = [{\n id: rootSnapshotId,\n parentId: null,\n name: readProjectionRuntimeName(modelRoot, node.name ?? node.id),\n kind: 'root',\n }];\n\n for (const runtimeNode of runtimeNodes) {\n const snapshotId = createProjectionImportRuntimeNodeId(runtimeNode, nodeIdByRuntimeNode.size);\n nodeIdByRuntimeNode.set(runtimeNode, snapshotId);\n }\n\n for (const runtimeNode of runtimeNodes) {\n const snapshotId = nodeIdByRuntimeNode.get(runtimeNode);\n if (!snapshotId) continue;\n const materialIds = readProjectionRuntimeNodeMaterials(runtimeNode)\n .map(runtimeMaterial => getProjectionImportMaterialSnapshotId(runtimeMaterial, materialIdByRuntimeMaterial))\n .filter((materialId): materialId is string => !!materialId);\n for (const materialId of materialIds) {\n const nodeIds = materialNodeIds.get(materialId) ?? new Set<string>();\n nodeIds.add(snapshotId);\n materialNodeIds.set(materialId, nodeIds);\n const textureIds = readProjectionRuntimeMaterialTextures(readProjectionRuntimeNodeMaterialById(runtimeNode, runtimeNode, materialId, materialIdByRuntimeMaterial))\n .map(runtimeTexture => getProjectionImportTextureSnapshotId(runtimeTexture, textureIdByRuntimeTexture))\n .filter((textureId): textureId is string => !!textureId);\n const materialTextures = materialTextureIds.get(materialId) ?? new Set<string>();\n for (const textureId of textureIds) materialTextures.add(textureId);\n materialTextureIds.set(materialId, materialTextures);\n }\n snapshots.push({\n id: snapshotId,\n parentId: resolveProjectionImportRuntimeParentId(runtimeNode, modelRoot, nodeIdByRuntimeNode, rootSnapshotId),\n name: readProjectionRuntimeName(runtimeNode, snapshotId),\n kind: isProjectionRuntimeMeshLike(runtimeNode) ? 'mesh' : 'transform',\n ...readProjectionRuntimeSourceName(runtimeNode),\n ...readProjectionRuntimeOwnerNodePath(runtimeNode),\n ...(materialIds.length > 0 ? { materialIds } : {}),\n });\n }\n\n const materials = [...materialIdByRuntimeMaterial.entries()].map(([runtimeMaterial, id]) => ({\n id,\n name: readProjectionRuntimeName(runtimeMaterial, id),\n ...readProjectionRuntimeKind(runtimeMaterial),\n nodeIds: [...(materialNodeIds.get(id) ?? [])],\n textureIds: [...(materialTextureIds.get(id) ?? [])],\n }));\n const textures = [...textureIdByRuntimeTexture.entries()].map(([runtimeTexture, id]) => ({\n id,\n name: readProjectionRuntimeName(runtimeTexture, id),\n ...readProjectionRuntimeKind(runtimeTexture),\n ...readProjectionRuntimeTextureUrl(runtimeTexture),\n }));\n const animations = createProjectionImportAnimationSnapshots(result.animationGroups ?? []);\n\n return {\n projectionNodeId: node.id,\n ...(asset.id ? { assetId: asset.id } : {}),\n ...(asset.sourceId ? { sourceId: asset.sourceId } : {}),\n nodes: snapshots,\n materials,\n textures,\n animations,\n };\n}\n\nfunction collectProjectionImportRuntimeNodes(\n modelRoot: any,\n result: BabylonEditorProjectionImportResult,\n): any[] {\n const known = new Set<any>([\n ...(result.transformNodes ?? []),\n ...(result.meshes ?? []),\n ].filter(Boolean));\n const ordered: any[] = [];\n const visit = (runtimeNode: any): void => {\n for (const child of readProjectionRuntimeChildren(runtimeNode)) {\n if (!known.has(child) || ordered.includes(child)) continue;\n ordered.push(child);\n visit(child);\n }\n };\n visit(modelRoot);\n for (const runtimeNode of known) {\n if (!ordered.includes(runtimeNode)) ordered.push(runtimeNode);\n }\n return ordered;\n}\n\nfunction readProjectionRuntimeChildren(runtimeNode: any): any[] {\n const children = runtimeNode?.getChildren?.();\n return Array.isArray(children) ? children : [];\n}\n\nfunction createProjectionImportRuntimeNodeId(runtimeNode: any, index: number): string {\n const sourceName = readProjectionSourceNodeSegment(runtimeNode);\n const rawName = sourceName || runtimeNode?.name || runtimeNode?.id || `node-${index + 1}`;\n return `${isProjectionRuntimeMeshLike(runtimeNode) ? 'mesh' : 'node'}:${sanitizeProjectionImportSnapshotId(rawName)}:${index + 1}`;\n}\n\nfunction resolveProjectionImportRuntimeParentId(\n runtimeNode: any,\n modelRoot: any,\n nodeIdByRuntimeNode: ReadonlyMap<any, string>,\n rootSnapshotId: string,\n): string | null {\n const parent = runtimeNode?.parent ?? null;\n if (!parent || parent === modelRoot) return rootSnapshotId;\n return nodeIdByRuntimeNode.get(parent) ?? rootSnapshotId;\n}\n\nfunction isProjectionRuntimeMeshLike(runtimeNode: any): boolean {\n return typeof runtimeNode?.getTotalVertices === 'function';\n}\n\nfunction readProjectionRuntimeNodeMaterials(runtimeNode: any): any[] {\n const material = runtimeNode?.material;\n if (!material) return [];\n const subMaterials = material.subMaterials;\n if (Array.isArray(subMaterials) && subMaterials.length > 0) {\n return subMaterials.filter(Boolean);\n }\n return [material];\n}\n\nfunction readProjectionRuntimeNodeMaterialById(\n runtimeNode: any,\n _fallbackNode: any,\n materialId: string,\n materialIdByRuntimeMaterial: ReadonlyMap<any, string>,\n): any | null {\n for (const material of readProjectionRuntimeNodeMaterials(runtimeNode)) {\n if (materialIdByRuntimeMaterial.get(material) === materialId) return material;\n }\n return null;\n}\n\nfunction getProjectionImportMaterialSnapshotId(\n runtimeMaterial: any,\n materialIdByRuntimeMaterial: Map<any, string>,\n): string | null {\n if (!runtimeMaterial) return null;\n const existing = materialIdByRuntimeMaterial.get(runtimeMaterial);\n if (existing) return existing;\n const id = `material:${sanitizeProjectionImportSnapshotId(readProjectionRuntimeName(runtimeMaterial, 'material'))}:${materialIdByRuntimeMaterial.size + 1}`;\n materialIdByRuntimeMaterial.set(runtimeMaterial, id);\n return id;\n}\n\nfunction readProjectionRuntimeMaterialTextures(runtimeMaterial: any | null): any[] {\n if (!runtimeMaterial) return [];\n const textures = runtimeMaterial.getActiveTextures?.();\n return Array.isArray(textures) ? textures.filter(Boolean) : [];\n}\n\nfunction getProjectionImportTextureSnapshotId(\n runtimeTexture: any,\n textureIdByRuntimeTexture: Map<any, string>,\n): string | null {\n if (!runtimeTexture) return null;\n const existing = textureIdByRuntimeTexture.get(runtimeTexture);\n if (existing) return existing;\n const name = readProjectionRuntimeTextureUrl(runtimeTexture).url\n ?? readProjectionRuntimeName(runtimeTexture, 'texture');\n const id = `texture:${sanitizeProjectionImportSnapshotId(name)}:${textureIdByRuntimeTexture.size + 1}`;\n textureIdByRuntimeTexture.set(runtimeTexture, id);\n return id;\n}\n\nfunction createProjectionImportAnimationSnapshots(animationGroups: any[]): BabylonEditorProjectionImportAnimationSnapshot[] {\n return animationGroups.filter(Boolean).map((animationGroup, index) => ({\n id: `animation:${sanitizeProjectionImportSnapshotId(readProjectionRuntimeName(animationGroup, 'animation'))}:${index + 1}`,\n name: readProjectionRuntimeName(animationGroup, `Animation ${index + 1}`),\n }));\n}\n\nfunction readProjectionRuntimeName(runtimeObject: any, fallback: string): string {\n const name = runtimeObject?.name ?? runtimeObject?.id;\n return typeof name === 'string' && name.trim() ? name.trim() : fallback;\n}\n\nfunction readProjectionRuntimeKind(runtimeObject: any): { kind?: string } {\n const kind = runtimeObject?.getClassName?.();\n return typeof kind === 'string' && kind.trim() ? { kind: kind.trim() } : {};\n}\n\nfunction readProjectionRuntimeTextureUrl(runtimeTexture: any): { url?: string } {\n const url = runtimeTexture?.url ?? runtimeTexture?.name;\n return typeof url === 'string' && url.trim() ? { url: url.trim() } : {};\n}\n\nfunction readProjectionRuntimeSourceName(runtimeNode: any): { sourceName?: string } {\n const sourceName = readProjectionSourceNodeSegment(runtimeNode);\n return sourceName ? { sourceName } : {};\n}\n\nfunction readProjectionRuntimeOwnerNodePath(runtimeNode: any): { ownerNodePath?: string } {\n const ownerNodePath = runtimeNode?.metadata?.editorProjection?.ownerNodePath;\n return typeof ownerNodePath === 'string' && ownerNodePath.trim() ? { ownerNodePath: ownerNodePath.trim() } : {};\n}\n\nfunction sanitizeProjectionImportSnapshotId(value: string): string {\n return value.trim().toLowerCase().replace(/[^a-z0-9_.:-]+/gi, '-').replace(/^-+|-+$/g, '') || 'item';\n}\n\nfunction cloneProjectionImportStructureSnapshot(\n snapshot: BabylonEditorProjectionImportStructureSnapshot | null,\n): BabylonEditorProjectionImportStructureSnapshot | null {\n if (!snapshot) return null;\n return {\n ...snapshot,\n nodes: snapshot.nodes.map(item => ({\n ...item,\n ...(item.materialIds ? { materialIds: [...item.materialIds] } : {}),\n })),\n materials: snapshot.materials.map(item => ({\n ...item,\n nodeIds: [...item.nodeIds],\n textureIds: [...item.textureIds],\n })),\n textures: snapshot.textures.map(item => ({ ...item })),\n animations: snapshot.animations.map(item => ({ ...item })),\n };\n}\n\nfunction disposeImportedProjectionResult(result: BabylonEditorProjectionImportResult): void {\n for (const animationGroup of result.animationGroups ?? []) {\n animationGroup.dispose?.();\n }\n for (const node of [...(result.meshes ?? []), ...(result.transformNodes ?? [])]) {\n node.dispose?.();\n }\n}\n\nfunction attachRuntimeProjection(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n node: BabylonEditorProjectionNode,\n projection: ProjectedBabylonEditorNode,\n): boolean {\n if (node.runtimeKind === 'camera') {\n attachCameraProjection(babylon, scene, node, projection);\n return true;\n }\n if (node.runtimeKind === 'light') {\n if (node.light?.type === 'hemispheric') {\n attachHemisphericLightProjection(babylon, scene, node, projection);\n } else {\n attachDirectionalLightProjection(babylon, scene, node, projection);\n }\n return true;\n }\n return false;\n}\n\nfunction attachCameraProjection(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n node: BabylonEditorProjectionNode,\n projection: ProjectedBabylonEditorNode,\n): void {\n const MeshBuilder = (babylon as any).MeshBuilder;\n const StandardMaterial = (babylon as any).StandardMaterial;\n const Color3 = requireBabylonCtor(babylon.Color3, 'Color3');\n if (!MeshBuilder || !StandardMaterial) return;\n\n const settings = normalizeBabylonEditorProjectionCameraSettings(node.camera);\n const body = MeshBuilder.CreateBox(`${node.id}.cameraHelper`, {\n width: 0.38,\n height: 0.28,\n depth: 0.24,\n }, scene);\n body.parent = projection.root;\n body.metadata = createProjectionMetadata(node.id, { runtimeKind: 'camera', helper: 'body' });\n const material = new StandardMaterial(`${node.id}.cameraHelper.material`, scene);\n material.diffuseColor = new Color3(0.45, 0.68, 1);\n material.specularColor = new Color3(0.08, 0.1, 0.12);\n body.material = material;\n projection.runtimeObjects.push(material);\n projection.outlineMeshes = [body];\n\n const frustum = createCameraFrustumLines(babylon, scene, node, settings);\n if (frustum) {\n frustum.parent = projection.root;\n frustum.isPickable = false;\n }\n}\n\nfunction attachDirectionalLightProjection(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n node: BabylonEditorProjectionNode,\n projection: ProjectedBabylonEditorNode,\n): void {\n const MeshBuilder = (babylon as any).MeshBuilder;\n const StandardMaterial = (babylon as any).StandardMaterial;\n const DirectionalLight = (babylon as any).DirectionalLight;\n const Vector3 = requireBabylonCtor(babylon.Vector3, 'Vector3');\n const Color3 = requireBabylonCtor(babylon.Color3, 'Color3');\n if (!MeshBuilder || !StandardMaterial) return;\n const settings = readProjectionDirectionalLightSettings(\n node.light?.type === 'directional' ? node.light : undefined,\n );\n const direction = new Vector3(settings.direction.x, settings.direction.y, settings.direction.z);\n\n if (DirectionalLight) {\n const light = new DirectionalLight(`${node.id}.directionalLight`, direction, scene);\n light.intensity = settings.intensity;\n light.diffuse = new Color3(\n settings.diffuseColor?.r ?? 1,\n settings.diffuseColor?.g ?? 1,\n settings.diffuseColor?.b ?? 1,\n );\n light.metadata = createProjectionMetadata(node.id, { runtimeKind: 'light', lightType: 'directional' });\n light.setEnabled?.(node.active !== false);\n projection.runtimeObjects.push(light);\n resyncProjectionSceneLightSources(scene);\n }\n\n if (!settings.helperVisible) return;\n\n const helper = MeshBuilder.CreateBox(`${node.id}.lightHelper`, {\n size: 0.28,\n }, scene);\n helper.parent = projection.root;\n helper.metadata = createProjectionMetadata(node.id, { runtimeKind: 'light', helper: 'body' });\n const material = new StandardMaterial(`${node.id}.lightHelper.material`, scene);\n material.diffuseColor = new Color3(1, 0.92, 0.42);\n material.emissiveColor = new Color3(0.5, 0.42, 0.12);\n material.specularColor = new Color3(0.08, 0.1, 0.12);\n helper.material = material;\n projection.runtimeObjects.push(material);\n projection.outlineMeshes = [helper];\n\n const arrow = createLightDirectionLines(babylon, scene, node, settings.direction);\n if (arrow) {\n arrow.parent = projection.root;\n arrow.isPickable = false;\n }\n}\n\nfunction attachFallbackProjection(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n node: BabylonEditorProjectionNode,\n projection: ProjectedBabylonEditorNode,\n rendererFallback: boolean,\n): void {\n const mesh = createFallbackProjectionMesh(babylon, scene, node, rendererFallback);\n if (!mesh) return;\n mesh.parent = projection.root;\n projection.outlineMeshes = [mesh];\n}\n\nfunction attachPrimitiveProjection(\n options: BabylonEditorProjectionOptions,\n node: BabylonEditorProjectionNode,\n projection: ProjectedBabylonEditorNode,\n): void {\n const { babylon, scene } = options;\n const mesh = createPrimitiveProjectionMesh(babylon, scene, node, options);\n if (!mesh) {\n attachFallbackProjection(babylon, scene, node, projection, true);\n return;\n }\n mesh.parent = projection.root;\n mesh.isPickable = true;\n if (mesh.material && !isBabylonPrimitiveProjectionSharedMaterial(mesh.material)) {\n projection.runtimeObjects.push(mesh.material);\n }\n projection.outlineMeshes = [mesh];\n}\n\nfunction applyProjectionOutline(\n node: BabylonEditorProjectionNode,\n projection: ProjectedBabylonEditorNode,\n): void {\n const options = createBabylonDefaultOutlineOptions(node.outline);\n if (!options) return;\n for (const mesh of projection.outlineMeshes) {\n applyBabylonDefaultOutline(mesh, options);\n }\n}\n\nfunction createBabylonDefaultOutlineOptions(\n outline: BabylonEditorProjectionOutline | null | undefined,\n): BabylonDefaultOutlineOptions | null {\n if (!outline) return null;\n const options: BabylonDefaultOutlineOptions = {};\n if (typeof outline.renderOutline === 'boolean') options.enabled = outline.renderOutline;\n if (typeof outline.outlineWidth === 'number' && Number.isFinite(outline.outlineWidth)) {\n options.width = outline.outlineWidth;\n }\n if (outline.outlineColor) {\n const color = outline.outlineColor;\n options.color = { r: color.r, g: color.g, b: color.b };\n }\n return Object.keys(options).length > 0 ? options : null;\n}\n\nfunction createPrimitiveProjectionMesh(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n node: BabylonEditorProjectionNode,\n options?: Pick<BabylonEditorProjectionOptions, 'resolveTextureUrl'>,\n): any | null {\n const MeshBuilder = (babylon as any).MeshBuilder;\n const StandardMaterial = (babylon as any).StandardMaterial;\n const PBRMaterial = (babylon as any).PBRMaterial;\n const Color3 = requireBabylonCtor(babylon.Color3, 'Color3');\n if (!MeshBuilder || !StandardMaterial) return null;\n const shape = node.primitive?.shape;\n const name = `${node.id}.${shape ?? 'primitive'}Projection`;\n const mesh = shape === 'sphere'\n ? MeshBuilder.CreateSphere?.(name, { diameter: 1, segments: 32 }, scene)\n : shape === 'plane'\n ? MeshBuilder.CreateGround?.(name, { width: 1, height: 1, subdivisions: 1 }, scene)\n : shape === 'capsule'\n ? MeshBuilder.CreateCapsule?.(name, { height: 2, radius: 0.5, tessellation: 24, subdivisions: 8 }, scene)\n : MeshBuilder.CreateBox?.(name, { size: 1 }, scene);\n if (!mesh) return null;\n const material = node.artistMaterialKind === 'standard' || !PBRMaterial\n ? new StandardMaterial(`${node.id}.primitive.material`, scene)\n : new PBRMaterial(`${node.id}.primitive.material`, scene);\n if ('albedoColor' in material) material.albedoColor = new Color3(0.72, 0.74, 0.76);\n else material.diffuseColor = new Color3(0.72, 0.74, 0.76);\n if ('specularColor' in material) material.specularColor = new Color3(0.12, 0.14, 0.16);\n if ('metallic' in material) material.metallic = 0;\n if ('roughness' in material) material.roughness = 1;\n if (shape === 'plane') material.backFaceCulling = false;\n applyProjectionArtistMaterialProfile({ babylon, scene, resolveTextureUrl: options?.resolveTextureUrl }, material, node.artistMaterialProfile);\n mesh.material = material;\n applyProjectionRenderingToMesh(node, mesh);\n mesh.metadata = createProjectionMetadata(node.id, {\n runtimeKind: 'primitive',\n primitiveShape: shape,\n ...createProjectionShadowMetadata(node),\n });\n return mesh;\n}\n\nfunction applyProjectionArtistMaterialProfilesToMeshes(\n options: BabylonEditorProjectionOptions,\n node: BabylonEditorProjectionNode,\n modelRoot: any,\n meshes: any[],\n materialOwnerResolutionContext: ProjectionMaterialOwnerResolutionContext,\n): unknown[] {\n const slotBindings = createProjectionMaterialSlotBindings(node);\n const hasRootProfile = !!node.artistMaterialProfile;\n const hasSlotProfiles = slotBindings.length > 0;\n if (!hasRootProfile && !hasSlotProfiles) return [];\n const clonedMaterials: unknown[] = [];\n const materials = new Set<unknown>();\n if (hasRootProfile) {\n for (const mesh of meshes) {\n const material = readProjectionWritableMeshMaterial(mesh);\n const meshOwnerNodePath = buildProjectionOwnerNodePath(mesh, modelRoot, node.id);\n if (!material) {\n emitProjectionMaterialProfileDiagnostic(options, {\n projectionNodeId: node.id,\n source: 'rootProfile',\n applied: false,\n matchKind: 'root',\n targetMaterialStatus: 'missingMaterial',\n meshOwnerNodePath,\n warningMessage: 'Root material profile was not applied because an imported mesh has no target material.',\n });\n continue;\n }\n if (materials.has(material)) continue;\n materials.add(material);\n applyProjectionArtistMaterialProfile(options, material, node.artistMaterialProfile);\n emitProjectionMaterialProfileDiagnostic(options, {\n projectionNodeId: node.id,\n source: 'rootProfile',\n applied: true,\n matchKind: 'root',\n targetMaterialStatus: 'material',\n meshOwnerNodePath,\n targetMaterialName: readProjectionMaterialName(material),\n targetMaterialType: readProjectionMaterialType(material),\n });\n }\n if (materials.size === 0 && meshes.length === 0) {\n emitProjectionMaterialProfileDiagnostic(options, {\n projectionNodeId: node.id,\n source: 'rootProfile',\n applied: false,\n matchKind: 'root',\n targetMaterialStatus: 'missingMaterial',\n meshOwnerNodePath: null,\n warningMessage: 'Root material profile was not applied because the imported model produced no meshes.',\n });\n }\n }\n if (!hasSlotProfiles) return clonedMaterials;\n const materialCounts = countProjectionMeshMaterials(meshes);\n const assetMaterialSlots = node.asset ? readProjectionAssetMaterialSlots(node.asset, node.id) : [];\n for (const slotBinding of slotBindings) {\n const ownerResolution = materialOwnerResolutionContext.resolve(slotBinding.slot, {\n explicitSlotBinding: true,\n });\n const ownerDiagnostic = createProjectionOwnerDiagnosticFields(ownerResolution);\n if (ownerResolution.status !== 'resolved') {\n emitProjectionSlotMaterialProfileDiagnostic(options, node.id, slotBinding, {\n applied: false,\n matchKind: ownerResolution.matchKind ?? 'none',\n meshOwnerNodePath: null,\n targetMaterialStatus: 'missingMeshOwner',\n ...ownerDiagnostic,\n warningMessage: ownerResolution.diagnostic.message,\n });\n continue;\n }\n const mesh = ownerResolution.target.runtimeNode;\n const ownerNodePath = ownerResolution.candidate.canonicalPath;\n if (!readProjectionWritableMeshMaterial(mesh)) {\n emitProjectionSlotMaterialProfileDiagnostic(options, node.id, slotBinding, {\n applied: false,\n matchKind: ownerResolution.matchKind,\n meshOwnerNodePath: ownerNodePath,\n targetMaterialStatus: 'missingMaterial',\n ...ownerDiagnostic,\n warningMessage: 'Slot material profile was not applied because the resolved owner has no target material.',\n });\n continue;\n }\n const materialResolution = resolveProjectionSlotMaterialTarget(\n mesh,\n materialCounts,\n slotBinding.slot,\n ownerNodePath,\n {\n projectionNodeId: node.id,\n primitiveOwnerResolvedByPointer: isMaterialOwnerResolutionPointerVerified(\n slotBinding.slot,\n ownerResolution,\n ),\n primitiveSingleMaterialFallbackAllowed: isProjectionSinglePrimitiveMaterialSlot(slotBinding.slot, assetMaterialSlots),\n },\n );\n const targetMaterial = materialResolution.target?.material ?? readProjectionWritableMeshMaterial(mesh);\n if (!materialResolution.target) {\n emitProjectionSlotMaterialProfileDiagnostic(options, node.id, slotBinding, {\n applied: false,\n matchKind: ownerResolution.matchKind,\n meshOwnerNodePath: ownerNodePath,\n targetMaterialStatus: materialResolution.targetMaterialStatus,\n targetMaterialName: readProjectionMaterialName(targetMaterial),\n targetMaterialType: readProjectionMaterialType(targetMaterial),\n ...ownerDiagnostic,\n warningMessage: materialResolution.warningMessage,\n });\n continue;\n }\n const target = materialResolution.target;\n clonedMaterials.push(...target.clonedMaterials);\n applyProjectionArtistMaterialProfile(options, target.material, slotBinding.profile);\n emitProjectionSlotMaterialProfileDiagnostic(options, node.id, slotBinding, {\n applied: true,\n matchKind: ownerResolution.matchKind,\n meshOwnerNodePath: ownerNodePath,\n targetMaterialStatus: materialResolution.targetMaterialStatus,\n targetMaterialName: readProjectionMaterialName(target.material),\n targetMaterialType: readProjectionMaterialType(target.material),\n ...ownerDiagnostic,\n ...(ownerResolution.diagnostic?.severity === 'warning'\n ? { warningMessage: ownerResolution.diagnostic.message }\n : {}),\n });\n }\n return clonedMaterials;\n}\n\nfunction createProjectionOwnerDiagnosticFields(\n resolution: ProjectionMaterialOwnerResolution,\n): Pick<\n BabylonEditorProjectionMaterialProfileDiagnostic,\n | 'ownerResolutionStatus'\n | 'ownerDiagnosticCode'\n | 'ownerDiagnosticSeverity'\n | 'ownerCandidateIds'\n | 'ownerIdentity'\n> {\n return {\n ownerResolutionStatus: resolution.status,\n ...(resolution.diagnostic ? {\n ownerDiagnosticCode: resolution.diagnostic.code,\n ownerDiagnosticSeverity: resolution.diagnostic.severity,\n } : {}),\n ownerCandidateIds: resolution.candidates.map(candidate => candidate.candidateId),\n ...(resolution.status === 'resolved' ? { ownerIdentity: resolution.identity } : {}),\n };\n}\n\nfunction applyProjectionArtistMaterialProfile(\n options: Pick<BabylonEditorProjectionOptions, 'babylon' | 'scene' | 'resolveTextureUrl'>,\n material: unknown,\n profile: ArtistMaterialProfile | null | undefined,\n): void {\n if (!profile) return;\n applyArtistMaterialProfileToRuntimeMaterial(material, options.scene, profile, {\n babylon: options.babylon,\n resolveTextureUrl: options.resolveTextureUrl,\n });\n}\n\nfunction emitProjectionSlotMaterialProfileDiagnostic(\n options: BabylonEditorProjectionOptions,\n projectionNodeId: string,\n slotBinding: ProjectionMaterialSlotBinding,\n diagnostic: Omit<BabylonEditorProjectionMaterialProfileDiagnostic, 'projectionNodeId' | 'source' | 'slotId' | 'ownerNodePath' | 'primitiveIndex'>,\n): void {\n emitProjectionMaterialProfileDiagnostic(options, {\n projectionNodeId,\n source: slotBinding.source,\n slotId: slotBinding.slot.slotId,\n ownerNodePath: slotBinding.slot.ownerNodePath,\n primitiveIndex: slotBinding.slot.primitiveIndex,\n ...diagnostic,\n });\n}\n\nfunction emitProjectionMaterialProfileDiagnostic(\n options: BabylonEditorProjectionOptions,\n diagnostic: BabylonEditorProjectionMaterialProfileDiagnostic,\n): void {\n options.onMaterialProfileDiagnostic?.(diagnostic);\n if (!diagnostic.warningMessage) return;\n options.logger?.warn?.('[BabylonEditorProjection] Material profile diagnostic warning', {\n projectionNodeId: diagnostic.projectionNodeId,\n source: diagnostic.source,\n slotId: diagnostic.slotId,\n ownerNodePath: diagnostic.ownerNodePath,\n meshOwnerNodePath: diagnostic.meshOwnerNodePath,\n matchKind: diagnostic.matchKind,\n targetMaterialStatus: diagnostic.targetMaterialStatus,\n warningMessage: diagnostic.warningMessage,\n });\n}\n\nfunction readProjectionMaterialName(material: unknown): string | undefined {\n const name = (material as any)?.name;\n return typeof name === 'string' && name.trim() ? name.trim() : undefined;\n}\n\nfunction readProjectionMaterialType(material: unknown): string | null | undefined {\n const getClassName = (material as any)?.getClassName;\n const className = typeof getClassName === 'function' ? getClassName.call(material) : null;\n return typeof className === 'string' && className.trim() ? className.trim() : className;\n}\n\nfunction createProjectionMaterialSlotBindings(\n node: Pick<BabylonEditorProjectionNode, 'artistMaterialSlotBindings' | 'id'>,\n): ProjectionMaterialSlotBinding[] {\n const bindings: ProjectionMaterialSlotBinding[] = [];\n for (const binding of node.artistMaterialSlotBindings ?? []) {\n const profile = binding?.profile;\n const slot = createProjectionMaterialSlotDescriptor(binding?.slot, node.id);\n if (!profile || !slot) continue;\n bindings.push({ slot, profile, source: 'slotBinding' });\n }\n return bindings;\n}\n\nfunction createProjectionMaterialSlotDescriptor(\n value: ProjectionMaterialSlotDescriptorInput | null | undefined,\n projectionNodeId?: string,\n): ProjectionMaterialSlotDescriptor | null {\n if (!value || typeof value !== 'object') return null;\n const ownerNodePath = typeof value.ownerNodePath === 'string'\n ? normalizeProjectionOwnerNodePath(value.ownerNodePath, { projectionNodeId })\n : '';\n const slotId = typeof value.slotId === 'string' && value.slotId.trim() ? value.slotId.trim() : '';\n if (!slotId || !ownerNodePath) return null;\n const label = typeof value.label === 'string' && value.label.trim() ? value.label.trim() : '';\n const nodeIndex = Number.isInteger(value.nodeIndex) ? value.nodeIndex as number : undefined;\n const nodeIndexPath = Array.isArray(value.nodeIndexPath)\n ? value.nodeIndexPath.filter((item): item is number => Number.isInteger(item))\n : undefined;\n const meshIndex = Number.isInteger(value.meshIndex) ? value.meshIndex as number : undefined;\n const primitiveIndex = Number.isInteger(value.primitiveIndex) ? value.primitiveIndex as number : undefined;\n const sourceMaterialIndex = Number.isInteger(value.sourceMaterialIndex) ? value.sourceMaterialIndex as number : undefined;\n const sourceMaterialIndices = Array.isArray(value.sourceMaterialIndices)\n ? value.sourceMaterialIndices.filter((item): item is number => Number.isInteger(item))\n : undefined;\n const materialName = typeof value.materialName === 'string' && value.materialName.trim() ? value.materialName.trim() : '';\n const materialNames = Array.isArray(value.materialNames)\n ? value.materialNames.filter((item): item is string => typeof item === 'string' && !!item.trim()).map(item => item.trim())\n : undefined;\n const triangleCount = Number.isFinite(value.triangleCount) ? value.triangleCount as number : undefined;\n const boundingBox = readProjectionMaterialSlotBoundingBox(value.boundingBox);\n return {\n slotId,\n ownerNodePath,\n ...(label ? { label } : {}),\n ...(nodeIndex != null ? { nodeIndex } : {}),\n ...(nodeIndexPath && nodeIndexPath.length > 0 ? { nodeIndexPath } : {}),\n ...(meshIndex != null ? { meshIndex } : {}),\n ...(primitiveIndex != null ? { primitiveIndex } : {}),\n ...(sourceMaterialIndex != null ? { sourceMaterialIndex } : {}),\n ...(sourceMaterialIndices && sourceMaterialIndices.length > 0\n ? { sourceMaterialIndices }\n : {}),\n ...(materialName ? { materialName } : {}),\n ...(materialNames && materialNames.length > 0 ? { materialNames } : {}),\n ...(triangleCount != null ? { triangleCount } : {}),\n ...(boundingBox ? { boundingBox } : {}),\n key: slotId || ownerNodePath,\n normalizedOwnerNodePath: ownerNodePath,\n matchKey: createMaterialSlotOwnerPathMatchKey(ownerNodePath, { projectionNodeId }),\n };\n}\n\nfunction readProjectionMaterialSlotBoundingBox(value: unknown): ProjectionMaterialSlotBoundingBox | undefined {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return undefined;\n const record = value as Record<string, unknown>;\n const min = readProjectionMaterialSlotBoundsTuple(record.min);\n const max = readProjectionMaterialSlotBoundsTuple(record.max);\n if (!min && !max) return undefined;\n return {\n ...(min ? { min } : {}),\n ...(max ? { max } : {}),\n };\n}\n\nfunction readProjectionMaterialSlotBoundsTuple(value: unknown): [number, number, number] | undefined {\n if (!Array.isArray(value) || value.length < 3) return undefined;\n const tuple = value.slice(0, 3).map(item => Number(item));\n if (!tuple.every(item => Number.isFinite(item))) return undefined;\n return tuple as [number, number, number];\n}\n\nfunction createProjectionMaterialOwnerResolutionContext(\n rootNode: any,\n projectionNodeId: string,\n): ProjectionMaterialOwnerResolutionContext {\n const candidates = collectBabylonMaterialOwnerCandidates(rootNode, {\n readPathSegment: node => {\n const segment = stableProjectionNodeSegment(node);\n return segment == null\n ? null\n : normalizeProjectionOwnerNodePath(segment, { projectionNodeId });\n },\n }).map(candidate => ({\n ...candidate,\n canonicalPath: normalizeProjectionOwnerNodePath(candidate.canonicalPath, { projectionNodeId }),\n ...(candidate.sourceOwnerAliases ? {\n sourceOwnerAliases: candidate.sourceOwnerAliases.map(alias => (\n normalizeProjectionOwnerNodePath(alias, { projectionNodeId })\n )),\n } : {}),\n }));\n const cache = new Map<string, ProjectionMaterialOwnerResolution>();\n return {\n resolve(slot, options = {}) {\n const explicitSlotBinding = options.explicitSlotBinding === true;\n const cacheKey = createProjectionMaterialOwnerResolutionCacheKey(slot, explicitSlotBinding);\n const cached = cache.get(cacheKey);\n if (cached) return cached;\n const resolution = resolveMaterialOwner(slot, candidates, { explicitSlotBinding });\n cache.set(cacheKey, resolution);\n return resolution;\n },\n };\n}\n\nfunction createProjectionMaterialOwnerResolutionCacheKey(\n slot: ProjectionMaterialSlotDescriptor,\n explicitSlotBinding: boolean,\n): string {\n return JSON.stringify([\n explicitSlotBinding,\n slot.ownerNodePath,\n slot.nodeIndex ?? null,\n slot.nodeIndexPath ?? null,\n slot.meshIndex ?? null,\n slot.primitiveIndex ?? null,\n slot.sourceMaterialIndex ?? null,\n slot.sourceMaterialIndices ?? null,\n ]);\n}\n\nfunction buildProjectionOwnerNodePath(node: any, rootNode: any, projectionNodeId?: string): string | null {\n if (!node || !rootNode || node === rootNode) return '';\n const segments: string[] = [];\n let current = node;\n while (current && current !== rootNode) {\n const segment = stableProjectionNodeSegment(current);\n if (!segment) return null;\n segments.push(segment);\n current = current.parent ?? null;\n }\n if (current !== rootNode) return null;\n return normalizeProjectionOwnerNodePath(segments.reverse().join('/'), { projectionNodeId });\n}\n\nfunction stableProjectionNodeSegment(node: any): string | null {\n const sourceSegment = readProjectionSourceNodeSegment(node);\n if (sourceSegment) return sourceSegment;\n const candidates = [node?.name, node?.id];\n for (const candidate of candidates) {\n if (typeof candidate !== 'string') continue;\n const trimmed = candidate.trim();\n if (trimmed) return trimmed;\n }\n return null;\n}\n\nfunction createAssetMeshProjectionNodeId(rootNodeId: string, ownerNodePath: string): string {\n return `${rootNodeId}${ASSET_MESH_SELECTION_SEPARATOR}${encodeURIComponent(ownerNodePath)}`;\n}\n\nfunction resolveProjectionAssetMeshSelectionKey(\n asset: BabylonEditorProjectionAsset,\n mesh: any,\n ownerNodePath: string,\n materialOwnerResolutionContext: ProjectionMaterialOwnerResolutionContext,\n explicitlyBoundSlotIds: ReadonlySet<string>,\n projectionNodeId?: string,\n): string {\n const slots = resolveProjectionAssetMeshSelectionSlots(\n readProjectionAssetMaterialSlots(asset, projectionNodeId),\n mesh,\n materialOwnerResolutionContext,\n explicitlyBoundSlotIds,\n );\n return slots[0]?.key ?? ownerNodePath;\n}\n\nfunction resolveProjectionAssetMeshSelectionSlots(\n materialSlots: readonly ProjectionMaterialSlotDescriptor[],\n mesh: any,\n materialOwnerResolutionContext: ProjectionMaterialOwnerResolutionContext,\n explicitlyBoundSlotIds: ReadonlySet<string>,\n): ProjectionMaterialSlotDescriptor[] {\n return materialSlots.filter(slot => {\n const resolution = materialOwnerResolutionContext.resolve(slot, {\n explicitSlotBinding: explicitlyBoundSlotIds.has(slot.slotId),\n });\n return resolution.status === 'resolved' && resolution.target.runtimeNode === mesh;\n });\n}\n\nfunction createProjectionAssetMeshSelectionProxies(\n options: BabylonEditorProjectionOptions,\n node: BabylonEditorProjectionNode,\n projection: ProjectedBabylonEditorNode,\n mesh: any,\n ownerNodePath: string,\n materialSlots: readonly ProjectionMaterialSlotDescriptor[],\n materialOwnerResolutionContext: ProjectionMaterialOwnerResolutionContext,\n explicitlyBoundSlotIds: ReadonlySet<string>,\n): any[] {\n const primitiveSlots = resolveProjectionAssetMeshSelectionSlots(\n materialSlots,\n mesh,\n materialOwnerResolutionContext,\n explicitlyBoundSlotIds,\n )\n .filter(slot => Number.isInteger(slot.primitiveIndex));\n if (primitiveSlots.length <= 1) return [];\n const subMeshes = Array.isArray(mesh?.subMeshes) ? mesh.subMeshes : [];\n if (subMeshes.length <= 1) return [];\n\n const proxies: any[] = [];\n const createdNodeIds = new Set<string>();\n for (const slot of primitiveSlots) {\n const primitiveIndex = slot.primitiveIndex;\n if (primitiveIndex == null || primitiveIndex < 0) continue;\n const subMesh = subMeshes[primitiveIndex];\n if (!subMesh) continue;\n const selectionNodeId = createAssetMeshProjectionNodeId(node.id, slot.key);\n if (createdNodeIds.has(selectionNodeId)) continue;\n const proxy = createProjectionSubMeshSelectionProxy(options, node, mesh, subMesh, {\n selectionNodeId,\n ownerNodePath,\n slotSelectionKey: slot.key,\n primitiveIndex,\n });\n if (!proxy) continue;\n createdNodeIds.add(selectionNodeId);\n proxies.push(proxy);\n projection.selectionMeshes = projection.selectionMeshes ?? [];\n projection.selectionMeshes.push(proxy);\n registerProjectionSelectionPresentationTarget(projection, selectionNodeId, mesh);\n if (proxy.material) projection.runtimeObjects.push(proxy.material);\n }\n return proxies;\n}\n\nfunction resolveProjectionSplitPrimitiveMeshSelectionSlot(\n mesh: any,\n materialSlots: readonly ProjectionMaterialSlotDescriptor[],\n materialOwnerResolutionContext: ProjectionMaterialOwnerResolutionContext,\n explicitlyBoundSlotIds: ReadonlySet<string>,\n ownerMeshCount: number,\n ordinalByOwnerKey: Map<string, number>,\n): ProjectionMaterialSlotDescriptor | null {\n const subMeshes = Array.isArray(mesh?.subMeshes) ? mesh.subMeshes : [];\n if (subMeshes.length > 1) return null;\n if ((mesh?.getTotalVertices?.() ?? 0) <= 0) return null;\n const primitiveSlots = resolveProjectionAssetMeshSelectionSlots(\n materialSlots,\n mesh,\n materialOwnerResolutionContext,\n explicitlyBoundSlotIds,\n )\n .filter((slot): slot is ProjectionMaterialSlotDescriptor & { primitiveIndex: number } => (\n Number.isInteger(slot.primitiveIndex)\n ))\n .sort((left, right) => left.primitiveIndex - right.primitiveIndex);\n if (primitiveSlots.length === 1 && ownerMeshCount > 1) return primitiveSlots[0]!;\n if (primitiveSlots.length <= 1) return null;\n if (ownerMeshCount < primitiveSlots.length) return null;\n\n const ownerKey = primitiveSlots[0]?.matchKey ?? '';\n const ordinal = ordinalByOwnerKey.get(ownerKey) ?? 0;\n ordinalByOwnerKey.set(ownerKey, ordinal + 1);\n\n return primitiveSlots.find(slot => slot.primitiveIndex === ordinal) ?? primitiveSlots[ordinal] ?? null;\n}\n\nfunction createProjectionPrimitiveBoundsSelectionProxies(\n options: BabylonEditorProjectionOptions,\n node: BabylonEditorProjectionNode,\n projection: ProjectedBabylonEditorNode,\n mesh: any,\n ownerNodePath: string,\n materialSlots: readonly ProjectionMaterialSlotDescriptor[],\n materialOwnerResolutionContext: ProjectionMaterialOwnerResolutionContext,\n explicitlyBoundSlotIds: ReadonlySet<string>,\n ownerMeshCount: number,\n): any[] {\n const subMeshes = Array.isArray(mesh?.subMeshes) ? mesh.subMeshes : [];\n if (subMeshes.length > 1) return [];\n const primitiveSlots = resolveProjectionAssetMeshSelectionSlots(\n materialSlots,\n mesh,\n materialOwnerResolutionContext,\n explicitlyBoundSlotIds,\n )\n .filter(slot => Number.isInteger(slot.primitiveIndex) && !!slot.boundingBox)\n .sort((left, right) => (left.primitiveIndex ?? 0) - (right.primitiveIndex ?? 0));\n if (primitiveSlots.length <= 1) return [];\n if (ownerMeshCount >= primitiveSlots.length) return [];\n\n const proxies: any[] = [];\n const createdNodeIds = new Set<string>();\n for (const slot of primitiveSlots) {\n const primitiveIndex = slot.primitiveIndex;\n if (primitiveIndex == null || primitiveIndex < 0) continue;\n const selectionNodeId = createAssetMeshProjectionNodeId(node.id, slot.key);\n if (createdNodeIds.has(selectionNodeId)) continue;\n const proxy = createProjectionPrimitiveBoundsSelectionProxy(options, node, mesh, slot, {\n selectionNodeId,\n ownerNodePath,\n slotSelectionKey: slot.key,\n primitiveIndex,\n });\n if (!proxy) continue;\n createdNodeIds.add(selectionNodeId);\n proxies.push(proxy);\n projection.selectionMeshes = projection.selectionMeshes ?? [];\n projection.selectionMeshes.push(proxy);\n registerProjectionSelectionPresentationTarget(projection, selectionNodeId, mesh);\n if (proxy.material) projection.runtimeObjects.push(proxy.material);\n }\n return proxies;\n}\n\nfunction registerProjectionSelectionPresentationTarget(\n projection: ProjectedBabylonEditorNode,\n selectionNodeId: string,\n renderMesh: any,\n): void {\n projection.selectionPresentationTargets = projection.selectionPresentationTargets ?? [];\n const existing = projection.selectionPresentationTargets.find(\n target => target.selectionNodeId === selectionNodeId,\n );\n if (existing) {\n if (!existing.renderMeshes.includes(renderMesh)) {\n existing.renderMeshes = [...existing.renderMeshes, renderMesh];\n }\n return;\n }\n projection.selectionPresentationTargets.push({\n selectionNodeId,\n renderMeshes: [renderMesh],\n });\n}\n\nfunction createProjectionPrimitiveBoundsSelectionProxy(\n options: BabylonEditorProjectionOptions,\n node: BabylonEditorProjectionNode,\n sourceMesh: any,\n slot: ProjectionMaterialSlotDescriptor,\n metadata: {\n selectionNodeId: string;\n ownerNodePath: string;\n slotSelectionKey: string;\n primitiveIndex: number;\n },\n): any | null {\n const { babylon, scene } = options;\n const MeshBuilder = (babylon as any).MeshBuilder;\n const StandardMaterial = (babylon as any).StandardMaterial;\n if (!MeshBuilder?.CreateBox || !StandardMaterial) return null;\n const bounds = readProjectionPrimitiveSlotBounds(slot);\n if (!bounds) return null;\n\n const size = {\n x: Math.max(Math.abs(bounds.max.x - bounds.min.x), MIN_SELECTION_BOUNDS_PROXY_SIZE),\n y: Math.max(Math.abs(bounds.max.y - bounds.min.y), MIN_SELECTION_BOUNDS_PROXY_SIZE),\n z: Math.max(Math.abs(bounds.max.z - bounds.min.z), MIN_SELECTION_BOUNDS_PROXY_SIZE),\n };\n const center = {\n x: (bounds.min.x + bounds.max.x) / 2,\n y: (bounds.min.y + bounds.max.y) / 2,\n z: (bounds.min.z + bounds.max.z) / 2,\n };\n const proxy = MeshBuilder.CreateBox(\n `${sourceMesh.name ?? node.id}.selectionBoundsProxy.${sanitizeProjectionImportSnapshotId(metadata.slotSelectionKey)}`,\n {\n width: size.x,\n height: size.y,\n depth: size.z,\n },\n scene,\n );\n if (!proxy) return null;\n proxy.parent = sourceMesh;\n proxy.position.x = center.x;\n proxy.position.y = center.y;\n proxy.position.z = center.z;\n proxy.isPickable = false;\n proxy.metadata = {\n ...(proxy.metadata ?? {}),\n disablePlanarShadow: true,\n disableBlobShadow: true,\n disableStaticProjectedShadow: true,\n editorProjectionSelectionProxy: true,\n editorProjectionSelectionBoundsProxy: true,\n editorProjection: {\n nodeId: metadata.selectionNodeId,\n rootNodeId: node.id,\n sourceId: node.asset?.sourceId,\n ownerNodePath: metadata.ownerNodePath,\n slotSelectionKey: metadata.slotSelectionKey,\n primitiveIndex: metadata.primitiveIndex,\n runtimeKind: 'assetMeshSelectionProxy',\n ...createProjectionShadowMetadata(node),\n },\n };\n\n const material = new StandardMaterial(`${proxy.name}.material`, scene);\n material.alpha = 0;\n material.disableLighting = true;\n material.backFaceCulling = false;\n if ('disableColorWrite' in material) {\n material.disableColorWrite = true;\n }\n proxy.material = material;\n return proxy;\n}\n\nfunction readProjectionPrimitiveSlotBounds(\n slot: ProjectionMaterialSlotDescriptor,\n): Pick<BabylonEditorProjectionBounds, 'min' | 'max'> | null {\n const min = readProjectionMaterialSlotBoundsVec3(slot.boundingBox?.min);\n const max = readProjectionMaterialSlotBoundsVec3(slot.boundingBox?.max);\n if (!min || !max) return null;\n return { min, max };\n}\n\nfunction readProjectionMaterialSlotBoundsVec3(value: readonly number[] | undefined): EditorTransformVec3 | null {\n if (!Array.isArray(value) || value.length < 3) return null;\n const [x, y, z] = value.map(item => Number(item));\n if (!Number.isFinite(x) || !Number.isFinite(y) || !Number.isFinite(z)) return null;\n return { x, y, z };\n}\n\nfunction createProjectionSubMeshSelectionProxy(\n options: BabylonEditorProjectionOptions,\n node: BabylonEditorProjectionNode,\n sourceMesh: any,\n subMesh: any,\n metadata: {\n selectionNodeId: string;\n ownerNodePath: string;\n slotSelectionKey: string;\n primitiveIndex: number;\n },\n): any | null {\n const { babylon, scene } = options;\n const Mesh = (babylon as any).Mesh;\n const VertexData = (babylon as any).VertexData;\n const VertexBuffer = (babylon as any).VertexBuffer;\n const StandardMaterial = (babylon as any).StandardMaterial;\n if (!Mesh || !VertexData || !VertexBuffer || !StandardMaterial) return null;\n\n const positions = sourceMesh.getVerticesData?.(VertexBuffer.PositionKind, true, true);\n if (!positions || positions.length < 9) return null;\n const sourceIndices = sourceMesh.getIndices?.(true, true) ?? null;\n const subIndices = readProjectionSubMeshIndices(sourceIndices, subMesh);\n if (subIndices.length < 3) return null;\n\n const indexMap = new Map<number, number>();\n const proxyPositions: number[] = [];\n const proxyIndices: number[] = [];\n for (const sourceIndex of subIndices) {\n const vertexIndex = Number(sourceIndex);\n if (!Number.isInteger(vertexIndex) || vertexIndex < 0) continue;\n let mappedIndex = indexMap.get(vertexIndex);\n if (mappedIndex == null) {\n const positionIndex = vertexIndex * 3;\n if (positionIndex + 2 >= positions.length) continue;\n mappedIndex = indexMap.size;\n indexMap.set(vertexIndex, mappedIndex);\n proxyPositions.push(\n Number(positions[positionIndex] ?? 0),\n Number(positions[positionIndex + 1] ?? 0),\n Number(positions[positionIndex + 2] ?? 0),\n );\n }\n proxyIndices.push(mappedIndex);\n }\n if (proxyPositions.length < 9 || proxyIndices.length < 3) return null;\n\n const proxy = new Mesh(`${sourceMesh.name ?? node.id}.selectionProxy.${sanitizeProjectionImportSnapshotId(metadata.slotSelectionKey)}`, scene);\n proxy.parent = sourceMesh;\n proxy.isPickable = false;\n proxy.metadata = {\n ...(proxy.metadata ?? {}),\n disablePlanarShadow: true,\n disableBlobShadow: true,\n disableStaticProjectedShadow: true,\n editorProjectionSelectionProxy: true,\n editorProjection: {\n nodeId: metadata.selectionNodeId,\n rootNodeId: node.id,\n sourceId: node.asset?.sourceId,\n ownerNodePath: metadata.ownerNodePath,\n slotSelectionKey: metadata.slotSelectionKey,\n primitiveIndex: metadata.primitiveIndex,\n runtimeKind: 'assetMeshSelectionProxy',\n ...createProjectionShadowMetadata(node),\n },\n };\n\n const vertexData = new VertexData();\n vertexData.positions = proxyPositions;\n vertexData.indices = proxyIndices;\n vertexData.applyToMesh(proxy, false);\n\n const material = new StandardMaterial(`${proxy.name}.material`, scene);\n material.alpha = 0;\n material.disableLighting = true;\n material.backFaceCulling = false;\n if ('disableColorWrite' in material) {\n material.disableColorWrite = true;\n }\n proxy.material = material;\n return proxy;\n}\n\nfunction readProjectionSubMeshIndices(sourceIndices: ArrayLike<number> | null, subMesh: any): number[] {\n const indexStart = Number.isInteger(subMesh?.indexStart) ? subMesh.indexStart as number : 0;\n const indexCount = Number.isInteger(subMesh?.indexCount) ? subMesh.indexCount as number : 0;\n if (sourceIndices && indexCount > 0) {\n return Array.from(sourceIndices).slice(indexStart, indexStart + indexCount);\n }\n const verticesStart = Number.isInteger(subMesh?.verticesStart) ? subMesh.verticesStart as number : 0;\n const verticesCount = Number.isInteger(subMesh?.verticesCount) ? subMesh.verticesCount as number : 0;\n return Array.from({ length: Math.max(0, verticesCount) }, (_, index) => verticesStart + index);\n}\n\nfunction readProjectionAssetMaterialSlots(\n asset: BabylonEditorProjectionAsset,\n projectionNodeId?: string,\n): ProjectionMaterialSlotDescriptor[] {\n const rawSlots = asset.metadata?.materialSlots;\n if (!Array.isArray(rawSlots)) return [];\n const slots: ProjectionMaterialSlotDescriptor[] = [];\n for (const rawSlot of rawSlots) {\n const slot = readProjectionAssetMaterialSlot(rawSlot, projectionNodeId);\n if (slot) slots.push(slot);\n }\n return slots;\n}\n\nfunction readProjectionAssetMaterialSlot(value: unknown, projectionNodeId?: string): ProjectionMaterialSlotDescriptor | null {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return null;\n const record = value as Record<string, unknown>;\n return createProjectionMaterialSlotDescriptor(record, projectionNodeId);\n}\n\nfunction countProjectionMeshMaterials(meshes: any[]): Map<unknown, number> {\n const counts = new Map<unknown, number>();\n for (const mesh of meshes) {\n const material = readProjectionWritableMeshMaterial(mesh);\n if (!material) continue;\n counts.set(material, (counts.get(material) ?? 0) + 1);\n }\n return counts;\n}\n\nfunction isProjectionSinglePrimitiveMaterialSlot(\n slot: ProjectionMaterialSlotDescriptor,\n materialSlots: readonly ProjectionMaterialSlotDescriptor[],\n): boolean {\n if (slot.primitiveIndex !== 0 || materialSlots.length === 0) return false;\n const matchingPrimitiveSlots = materialSlots.filter(candidate => (\n candidate.primitiveIndex != null\n && candidate.matchKey === slot.matchKey\n && isProjectionMaterialSlotSameMesh(candidate, slot)\n ));\n return matchingPrimitiveSlots.length === 1 && matchingPrimitiveSlots[0]?.primitiveIndex === 0;\n}\n\nfunction isProjectionMaterialSlotSameMesh(\n left: ProjectionMaterialSlotDescriptor,\n right: ProjectionMaterialSlotDescriptor,\n): boolean {\n if (left.meshIndex != null || right.meshIndex != null) {\n return left.meshIndex === right.meshIndex;\n }\n return true;\n}\n\nfunction detachProjectionSlotMaterial(\n mesh: any,\n materialCounts: Map<unknown, number>,\n ownerNodePath: string | null,\n): ProjectionMaterialDetachResult | null {\n const materialOwner = resolveProjectionWritableMaterialOwner(mesh);\n const material = materialOwner?.material;\n if (!material) return null;\n const projectionOwnsMaterialLifecycle = materialOwner === mesh;\n if (typeof material !== 'object') {\n return { material, clonedMaterials: [], projectionOwnsMaterialLifecycle };\n }\n const materialUseCount = materialCounts.get(material) ?? 0;\n if (materialUseCount <= 1) return { material, clonedMaterials: [], projectionOwnsMaterialLifecycle };\n const clone = typeof (material as any).clone === 'function'\n ? safelyCloneProjectionMaterial(\n material,\n createProjectionSlotMaterialName(material, ownerNodePath),\n )\n : null;\n if (!clone) return null;\n try {\n cloneProjectionSubMaterials(clone, material, ownerNodePath);\n } catch {\n safelyDisposeProjectionMaterial(clone);\n return null;\n }\n if (Array.isArray((material as any).subMaterials) && !Array.isArray((clone as any).subMaterials)) {\n safelyDisposeProjectionMaterial(clone);\n return null;\n }\n materialOwner.material = clone;\n materialCounts.set(material, materialUseCount - 1);\n materialCounts.set(clone, 1);\n return {\n material: clone,\n clonedMaterials: projectionOwnsMaterialLifecycle ? [clone] : [],\n projectionOwnsMaterialLifecycle,\n };\n}\n\nfunction resolveProjectionSlotMaterialTarget(\n mesh: any,\n materialCounts: Map<unknown, number>,\n slot: ProjectionMaterialSlotDescriptor,\n ownerNodePath: string | null,\n options: {\n projectionNodeId?: string;\n primitiveOwnerResolvedByPointer: boolean;\n primitiveSingleMaterialFallbackAllowed: boolean;\n },\n): ProjectionMaterialSlotTargetResolution {\n const material = readProjectionWritableMeshMaterial(mesh);\n if (!material) {\n return {\n target: null,\n targetMaterialStatus: 'missingMaterial',\n warningMessage: 'Slot material profile was not applied because the matched mesh has no target material.',\n };\n }\n if (slot.primitiveIndex == null) {\n const detachResult = detachProjectionSlotMaterial(mesh, materialCounts, ownerNodePath);\n if (!detachResult) {\n return {\n target: null,\n targetMaterialStatus: 'missingTargetMaterial',\n warningMessage: 'Slot material profile was not applied because the mesh material could not be detached.',\n };\n }\n return {\n target: {\n material: detachResult.material,\n clonedMaterials: detachResult.clonedMaterials,\n },\n targetMaterialStatus: 'material',\n };\n }\n if (!Array.isArray((material as any).subMaterials)) {\n if (!options.primitiveOwnerResolvedByPointer\n && (slot.primitiveIndex !== 0 || !options.primitiveSingleMaterialFallbackAllowed)) {\n return {\n target: null,\n targetMaterialStatus: 'missingSubMaterial',\n warningMessage: 'Primitive slot material profile was not applied because the target mesh does not expose a matching subMaterial.',\n };\n }\n const detachResult = detachProjectionSlotMaterial(mesh, materialCounts, ownerNodePath);\n if (!detachResult) {\n return {\n target: null,\n targetMaterialStatus: 'missingTargetMaterial',\n warningMessage: 'Primitive slot material profile was not applied because the fallback mesh material could not be detached.',\n };\n }\n return {\n target: {\n material: detachResult.material,\n clonedMaterials: detachResult.clonedMaterials,\n },\n targetMaterialStatus: 'primitiveFallbackMaterial',\n };\n }\n const sourceSubMaterials = (material as any).subMaterials;\n const sourceSubMaterial = sourceSubMaterials[slot.primitiveIndex];\n if (!sourceSubMaterial || typeof sourceSubMaterial !== 'object' || typeof sourceSubMaterial.clone !== 'function') {\n return {\n target: null,\n targetMaterialStatus: 'missingSubMaterial',\n warningMessage: 'Primitive slot material profile was not applied because the target subMaterial is missing or cannot be cloned.',\n };\n }\n const clonedSubMaterial = safelyCloneProjectionMaterial(\n sourceSubMaterial,\n createProjectionSlotSubMaterialName(sourceSubMaterial, ownerNodePath, slot.primitiveIndex),\n );\n if (!clonedSubMaterial) {\n return {\n target: null,\n targetMaterialStatus: 'missingSubMaterial',\n warningMessage: 'Primitive slot material profile was not applied because the target subMaterial clone failed.',\n };\n }\n const detachResult = detachProjectionSlotMaterial(mesh, materialCounts, ownerNodePath);\n const slotMaterial = detachResult?.material;\n if (!detachResult || !Array.isArray((slotMaterial as any).subMaterials)) {\n safelyDisposeProjectionMaterial(clonedSubMaterial);\n return {\n target: null,\n targetMaterialStatus: 'missingTargetMaterial',\n warningMessage: 'Primitive slot material profile was not applied because the multi-material target could not be detached.',\n };\n }\n const subMaterials = (slotMaterial as any).subMaterials;\n const detachedSubMaterial = subMaterials[slot.primitiveIndex];\n subMaterials[slot.primitiveIndex] = clonedSubMaterial;\n if (detachedSubMaterial !== sourceSubMaterial && detachedSubMaterial !== clonedSubMaterial) {\n safelyDisposeProjectionMaterial(detachedSubMaterial);\n }\n return {\n target: {\n material: clonedSubMaterial,\n clonedMaterials: [\n ...detachResult.clonedMaterials,\n ...(detachResult.projectionOwnsMaterialLifecycle ? [clonedSubMaterial] : []),\n ],\n },\n targetMaterialStatus: 'subMaterial',\n };\n}\n\nfunction safelyCloneProjectionMaterial(material: any, name: string): any | null {\n try {\n return material?.clone?.(name) ?? null;\n } catch {\n return null;\n }\n}\n\nfunction safelyDisposeProjectionMaterial(material: any): void {\n try {\n material?.dispose?.();\n } catch {\n // Best-effort cleanup for a clone that was never committed to the scene owner.\n }\n}\n\nfunction readProjectionWritableMeshMaterial(mesh: any): unknown | null {\n return resolveProjectionWritableMaterialOwner(mesh)?.material ?? null;\n}\n\nfunction resolveProjectionWritableMaterialOwner(mesh: any): any | null {\n return resolveBabylonEffectiveMaterialOwner(mesh);\n}\n\nfunction cloneProjectionSubMaterials(clone: any, source: any, ownerNodePath: string | null): void {\n if (!Array.isArray(clone?.subMaterials) || !Array.isArray(source?.subMaterials)) return;\n clone.subMaterials = source.subMaterials.map((subMaterial: any, index: number) => {\n if (!subMaterial || typeof subMaterial !== 'object') return subMaterial;\n if (typeof subMaterial.clone !== 'function') return subMaterial;\n const clonedSubMaterial = subMaterial.clone(createProjectionSlotSubMaterialName(subMaterial, ownerNodePath, index));\n return clonedSubMaterial ?? subMaterial;\n });\n}\n\nfunction createProjectionSlotMaterialName(material: any, ownerNodePath: string | null): string {\n const baseName = String(material?.name ?? material?.id ?? 'material');\n const suffix = ownerNodePath?.trim()\n ? ownerNodePath.replace(/[^a-zA-Z0-9_-]+/g, '_')\n : 'root';\n return `${baseName}.projectionSlot.${suffix}`;\n}\n\nfunction createProjectionSlotSubMaterialName(material: any, ownerNodePath: string | null, index: number): string {\n return `${createProjectionSlotMaterialName(material, ownerNodePath)}.sub${index}`;\n}\n\nfunction createFallbackProjectionMesh(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n node: BabylonEditorProjectionNode,\n rendererFallback: boolean,\n): any | null {\n const MeshBuilder = (babylon as any).MeshBuilder;\n const StandardMaterial = (babylon as any).StandardMaterial;\n const Color3 = requireBabylonCtor(babylon.Color3, 'Color3');\n if (!MeshBuilder || !StandardMaterial) return null;\n const mesh = MeshBuilder.CreateBox(`${node.id}.fallbackProjection`, {\n size: rendererFallback ? 1 : 0.24,\n }, scene);\n const material = new StandardMaterial(`${node.id}.projection.material`, scene);\n if (rendererFallback) {\n material.diffuseColor = new Color3(0.22, 0.55, 0.28);\n } else {\n material.diffuseColor = new Color3(0.5, 0.58, 0.68);\n material.alpha = 0.45;\n }\n material.specularColor = new Color3(0.08, 0.1, 0.12);\n mesh.material = material;\n applyProjectionRenderingToMesh(node, mesh);\n mesh.metadata = {\n ...(mesh.metadata ?? {}),\n editorProjection: {\n nodeId: node.id,\n fallback: true,\n ...createProjectionShadowMetadata(node),\n },\n };\n return mesh;\n}\n\nfunction applyProjectionRenderingToMesh(node: BabylonEditorProjectionNode, mesh: any): void {\n const rendering = node.rendering;\n if (!mesh || !rendering) return;\n if (isProjectionRenderingGroupId(rendering.renderingGroupId)) {\n mesh.renderingGroupId = rendering.renderingGroupId;\n }\n if (typeof rendering.alphaIndex === 'number' && Number.isFinite(rendering.alphaIndex)) {\n mesh.alphaIndex = rendering.alphaIndex;\n }\n}\n\nfunction isProjectionRenderingGroupId(value: unknown): value is 0 | 1 | 2 | 3 {\n return value === 0 || value === 1 || value === 2 || value === 3;\n}\n\nfunction createCameraFrustumLines(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n node: BabylonEditorProjectionNode,\n settings: BabylonEditorProjectionCameraSettings,\n): any | null {\n const MeshBuilder = (babylon as any).MeshBuilder;\n const Vector3 = requireBabylonCtor(babylon.Vector3, 'Vector3');\n const Color3 = requireBabylonCtor(babylon.Color3, 'Color3');\n if (!MeshBuilder?.CreateLineSystem) return null;\n const distance = Math.max(0.4, settings.radius * 0.12);\n const aspect = 16 / 9;\n const nearDistance = 0.18;\n let lines: any[];\n\n if (settings.projection === 'perspective') {\n const halfHeight = Math.max(0.12, Math.tan((settings.fov ?? 0.85) / 2) * distance);\n const halfWidth = halfHeight * aspect;\n const origin = new Vector3(0, 0, nearDistance);\n const topLeft = new Vector3(-halfWidth, halfHeight, -distance);\n const topRight = new Vector3(halfWidth, halfHeight, -distance);\n const bottomRight = new Vector3(halfWidth, -halfHeight, -distance);\n const bottomLeft = new Vector3(-halfWidth, -halfHeight, -distance);\n lines = [\n [topLeft, topRight, bottomRight, bottomLeft, topLeft],\n [origin, topLeft],\n [origin, topRight],\n [origin, bottomRight],\n [origin, bottomLeft],\n ];\n } else {\n const halfHeight = Math.max(0.12, settings.orthoSize * 0.08);\n const halfWidth = halfHeight * aspect;\n const nearTopLeft = new Vector3(-halfWidth, halfHeight, nearDistance);\n const nearTopRight = new Vector3(halfWidth, halfHeight, nearDistance);\n const nearBottomRight = new Vector3(halfWidth, -halfHeight, nearDistance);\n const nearBottomLeft = new Vector3(-halfWidth, -halfHeight, nearDistance);\n const farTopLeft = new Vector3(-halfWidth, halfHeight, -distance);\n const farTopRight = new Vector3(halfWidth, halfHeight, -distance);\n const farBottomRight = new Vector3(halfWidth, -halfHeight, -distance);\n const farBottomLeft = new Vector3(-halfWidth, -halfHeight, -distance);\n lines = [\n [nearTopLeft, nearTopRight, nearBottomRight, nearBottomLeft, nearTopLeft],\n [farTopLeft, farTopRight, farBottomRight, farBottomLeft, farTopLeft],\n [nearTopLeft, farTopLeft],\n [nearTopRight, farTopRight],\n [nearBottomRight, farBottomRight],\n [nearBottomLeft, farBottomLeft],\n ];\n }\n\n const frustum = MeshBuilder.CreateLineSystem(`${node.id}.cameraFrustum`, {\n lines,\n }, scene);\n frustum.color = new Color3(0.45, 0.68, 1);\n frustum.metadata = createProjectionMetadata(node.id, {\n runtimeKind: 'camera',\n helper: 'frustum',\n projection: settings.projection,\n orthoSize: settings.orthoSize,\n fov: settings.fov,\n });\n return frustum;\n}\n\nfunction createLightDirectionLines(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n node: BabylonEditorProjectionNode,\n direction: BabylonEditorProjectionVec3,\n): any | null {\n const MeshBuilder = (babylon as any).MeshBuilder;\n const Vector3 = requireBabylonCtor(babylon.Vector3, 'Vector3');\n const Color3 = requireBabylonCtor(babylon.Color3, 'Color3');\n if (!MeshBuilder?.CreateLineSystem) return null;\n const normalized = normalizeProjectionVec3(direction, { x: -0.3, y: -1, z: -0.2 });\n const shaftEnd = new Vector3(normalized.x, normalized.y, normalized.z);\n const arrowLeft = new Vector3(\n shaftEnd.x - normalized.x * 0.22 + normalized.z * 0.12,\n shaftEnd.y - normalized.y * 0.22,\n shaftEnd.z - normalized.z * 0.22 - normalized.x * 0.12,\n );\n const arrowRight = new Vector3(\n shaftEnd.x - normalized.x * 0.22 - normalized.z * 0.12,\n shaftEnd.y - normalized.y * 0.22,\n shaftEnd.z - normalized.z * 0.22 + normalized.x * 0.12,\n );\n const arrow = MeshBuilder.CreateLineSystem(`${node.id}.lightDirection`, {\n lines: [\n [new Vector3(0, 0, 0), shaftEnd],\n [shaftEnd, arrowLeft],\n [shaftEnd, arrowRight],\n ],\n }, scene);\n arrow.color = new Color3(1, 0.92, 0.42);\n arrow.metadata = createProjectionMetadata(node.id, {\n runtimeKind: 'light',\n helper: 'direction',\n });\n return arrow;\n}\n\nfunction attachHemisphericLightProjection(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n node: BabylonEditorProjectionNode,\n projection: ProjectedBabylonEditorNode,\n): void {\n const MeshBuilder = (babylon as any).MeshBuilder;\n const StandardMaterial = (babylon as any).StandardMaterial;\n const HemisphericLight = (babylon as any).HemisphericLight;\n const Vector3 = requireBabylonCtor(babylon.Vector3, 'Vector3');\n const Color3 = requireBabylonCtor(babylon.Color3, 'Color3');\n if (!MeshBuilder || !StandardMaterial) return;\n const settings = readProjectionHemisphericLightSettings(\n node.light?.type === 'hemispheric' ? node.light : undefined,\n );\n\n if (HemisphericLight) {\n const light = new HemisphericLight(`${node.id}.hemisphericLight`, new Vector3(0, 1, 0), scene);\n light.intensity = settings.intensity;\n light.diffuse = new Color3(\n settings.diffuseColor?.r ?? 1,\n settings.diffuseColor?.g ?? 1,\n settings.diffuseColor?.b ?? 1,\n );\n light.groundColor = new Color3(\n settings.groundColor?.r ?? 0.48,\n settings.groundColor?.g ?? 0.52,\n settings.groundColor?.b ?? 0.62,\n );\n light.metadata = createProjectionMetadata(node.id, { runtimeKind: 'light', lightType: 'hemispheric' });\n light.setEnabled?.(node.active !== false);\n projection.runtimeObjects.push(light);\n resyncProjectionSceneLightSources(scene);\n }\n\n if (!settings.helperVisible) return;\n\n const helper = MeshBuilder.CreateSphere?.(`${node.id}.hemisphericLightHelper`, {\n diameter: 0.32,\n segments: 18,\n }, scene) ?? MeshBuilder.CreateBox?.(`${node.id}.hemisphericLightHelper`, {\n size: 0.28,\n }, scene);\n if (!helper) return;\n helper.parent = projection.root;\n helper.metadata = createProjectionMetadata(node.id, {\n runtimeKind: 'light',\n lightType: 'hemispheric',\n helper: 'body',\n });\n const material = new StandardMaterial(`${node.id}.hemisphericLightHelper.material`, scene);\n material.diffuseColor = new Color3(0.72, 0.82, 1);\n material.emissiveColor = new Color3(0.16, 0.28, 0.48);\n material.specularColor = new Color3(0.08, 0.1, 0.12);\n helper.material = material;\n projection.runtimeObjects.push(material);\n projection.outlineMeshes = [helper];\n}\n\nfunction syncRuntimeLightProjection(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n node: BabylonEditorProjectionNode,\n projection: ProjectedBabylonEditorNode,\n): boolean {\n if (node.light?.type === 'hemispheric') {\n return syncRuntimeHemisphericLightProjection(babylon, scene, node, projection);\n }\n return syncRuntimeDirectionalLightProjection(babylon, scene, node, projection);\n}\n\nfunction syncRuntimeDirectionalLightProjection(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n node: BabylonEditorProjectionNode,\n projection: ProjectedBabylonEditorNode,\n): boolean {\n const settings = readProjectionDirectionalLightSettings(\n node.light?.type === 'directional' ? node.light : undefined,\n );\n const light = findProjectionRuntimeLight(projection, node.id, 'directional');\n if (!light) return false;\n const hasHelper = !!(scene as any).getMeshByName?.(`${node.id}.lightHelper`);\n if (settings.helperVisible !== hasHelper) return false;\n\n const Vector3 = requireBabylonCtor(babylon.Vector3, 'Vector3');\n const Color3 = requireBabylonCtor(babylon.Color3, 'Color3');\n copyOrAssignBabylonVec3(light, 'direction', new Vector3(\n settings.direction.x,\n settings.direction.y,\n settings.direction.z,\n ));\n light.intensity = settings.intensity;\n copyOrAssignBabylonColor(light, 'diffuse', new Color3(\n settings.diffuseColor?.r ?? 1,\n settings.diffuseColor?.g ?? 1,\n settings.diffuseColor?.b ?? 1,\n ));\n light.setEnabled?.(node.active !== false);\n resyncProjectionSceneLightSources(scene);\n if (settings.helperVisible) refreshLightDirectionLines(babylon, scene, node, projection, settings.direction);\n return true;\n}\n\nfunction syncRuntimeHemisphericLightProjection(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n node: BabylonEditorProjectionNode,\n projection: ProjectedBabylonEditorNode,\n): boolean {\n const settings = readProjectionHemisphericLightSettings(\n node.light?.type === 'hemispheric' ? node.light : undefined,\n );\n const light = findProjectionRuntimeLight(projection, node.id, 'hemispheric');\n if (!light) return false;\n const hasHelper = !!(scene as any).getMeshByName?.(`${node.id}.hemisphericLightHelper`);\n if (settings.helperVisible !== hasHelper) return false;\n\n const Color3 = requireBabylonCtor(babylon.Color3, 'Color3');\n light.intensity = settings.intensity;\n copyOrAssignBabylonColor(light, 'diffuse', new Color3(\n settings.diffuseColor?.r ?? 1,\n settings.diffuseColor?.g ?? 1,\n settings.diffuseColor?.b ?? 1,\n ));\n copyOrAssignBabylonColor(light, 'groundColor', new Color3(\n settings.groundColor?.r ?? 0.48,\n settings.groundColor?.g ?? 0.52,\n settings.groundColor?.b ?? 0.62,\n ));\n light.setEnabled?.(node.active !== false);\n resyncProjectionSceneLightSources(scene);\n return true;\n}\n\nfunction findProjectionRuntimeLight(\n projection: ProjectedBabylonEditorNode,\n nodeId: string,\n lightType: 'directional' | 'hemispheric',\n): any | null {\n return projection.runtimeObjects.find(runtimeObject => {\n const metadata = runtimeObject?.metadata?.editorProjection;\n return metadata?.nodeId === nodeId\n && metadata?.runtimeKind === 'light'\n && metadata?.lightType === lightType;\n }) ?? null;\n}\n\nfunction isProjectionRuntimeLightObject(runtimeObject: any): boolean {\n const metadata = runtimeObject?.metadata?.editorProjection;\n return metadata?.runtimeKind === 'light'\n && (metadata?.lightType === 'directional' || metadata?.lightType === 'hemispheric');\n}\n\nfunction resyncProjectionSceneLightSources(scene: RuntimeScene): void {\n const meshes = Array.isArray((scene as any).meshes) ? (scene as any).meshes : [];\n resyncProjectionMeshLightSources(scene, meshes);\n}\n\ninterface ProjectionMeshLightSourceSyncSummary {\n importedMeshCount: number;\n instancedMeshCount: number;\n lightSourceOwnerCount: number;\n activeSceneLightCount: number;\n resolvedLightSourceOwnerCount: number;\n}\n\nfunction resyncProjectionMeshLightSources(\n scene: RuntimeScene,\n meshes: readonly any[],\n): ProjectionMeshLightSourceSyncSummary {\n const lightSourceOwners = new Set<any>();\n const sourceMeshes = new Set<any>();\n const instancedMeshes = new Set<any>();\n for (const mesh of meshes) {\n if (!mesh || typeof mesh !== 'object') continue;\n const sourceMesh = mesh.sourceMesh;\n if (sourceMesh && sourceMesh !== mesh) {\n sourceMeshes.add(sourceMesh);\n instancedMeshes.add(mesh);\n } else {\n lightSourceOwners.add(mesh);\n }\n }\n for (const sourceMesh of sourceMeshes) {\n if (sourceMesh?.isDisposed?.()) continue;\n lightSourceOwners.add(sourceMesh);\n }\n for (const lightSourceOwner of lightSourceOwners) {\n if (lightSourceOwner?.isDisposed?.()) continue;\n lightSourceOwner?._resyncLightSources?.();\n }\n for (const instancedMesh of instancedMeshes) {\n if (instancedMesh?.isDisposed?.()) continue;\n instancedMesh?._markSubMeshesAsLightDirty?.();\n }\n (scene as any).resetCachedMaterial?.();\n\n const activeSceneLights = (Array.isArray((scene as any).lights) ? (scene as any).lights : [])\n .filter((light: any) => light?.isEnabled?.() !== false);\n const resolvedLightSourceOwnerCount = [...lightSourceOwners].filter(owner => {\n if (owner?.isDisposed?.()) return false;\n const lightSources = owner?.lightSources ?? owner?._lightSources;\n return Array.isArray(lightSources) && lightSources.length > 0;\n }).length;\n return {\n importedMeshCount: meshes.length,\n instancedMeshCount: instancedMeshes.size,\n lightSourceOwnerCount: lightSourceOwners.size,\n activeSceneLightCount: activeSceneLights.length,\n resolvedLightSourceOwnerCount,\n };\n}\n\nfunction refreshLightDirectionLines(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n node: BabylonEditorProjectionNode,\n projection: ProjectedBabylonEditorNode,\n direction: BabylonEditorProjectionVec3,\n): void {\n const existing = (scene as any).getMeshByName?.(`${node.id}.lightDirection`);\n existing?.dispose?.();\n const arrow = createLightDirectionLines(babylon, scene, node, direction);\n if (!arrow) return;\n arrow.parent = projection.root;\n arrow.isPickable = false;\n}\n\nfunction copyOrAssignBabylonVec3(target: any, key: string, value: any): void {\n if (target?.[key]?.copyFrom) {\n target[key].copyFrom(value);\n return;\n }\n target[key] = value;\n}\n\nfunction copyOrAssignBabylonColor(target: any, key: string, value: any): void {\n if (target?.[key]?.copyFrom) {\n target[key].copyFrom(value);\n return;\n }\n target[key] = value;\n}\n\nexport function normalizeBabylonEditorProjectionCameraSettings(\n settings: BabylonEditorProjectionCameraSettings | undefined,\n): BabylonEditorProjectionCameraSettings {\n const targetOffset = readOptionalProjectionVec3(settings?.targetOffset);\n const targetScreenOffset = readOptionalProjectionVec2(settings?.targetScreenOffset);\n return {\n projection: readProjectionCameraMode(settings?.projection),\n alpha: readFiniteNumber(settings?.alpha, 3.9269908169872414),\n beta: readFiniteNumber(settings?.beta, 0.8),\n radius: Math.max(0.001, readFiniteNumber(settings?.radius, 14)),\n orthoSize: Math.max(0.001, readFiniteNumber(settings?.orthoSize, 6)),\n fov: Math.max(0.001, readFiniteNumber(settings?.fov, 0.85)),\n ...(targetOffset ? { targetOffset } : {}),\n minZ: Math.max(0.001, readFiniteNumber(settings?.minZ, 1)),\n maxZ: Math.max(0.001, readFiniteNumber(settings?.maxZ, 10000)),\n lowerBetaLimit: readFiniteNumber(settings?.lowerBetaLimit, settings?.beta ?? 0.8),\n upperBetaLimit: readFiniteNumber(settings?.upperBetaLimit, settings?.beta ?? 0.8),\n lowerRadiusLimit: Math.max(0.001, readFiniteNumber(settings?.lowerRadiusLimit, settings?.radius ?? 14)),\n upperRadiusLimit: Math.max(0.001, readFiniteNumber(settings?.upperRadiusLimit, settings?.radius ?? 14)),\n inertia: clampUnit(readFiniteNumber(settings?.inertia, 0.9)),\n ...(targetScreenOffset ? { targetScreenOffset } : {}),\n };\n}\n\nexport function applyBabylonEditorProjectionCameraRig(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n camera: RuntimeCamera,\n settings: BabylonEditorProjectionCameraSettings | undefined,\n options: BabylonEditorProjectionCameraRigApplyOptions = {},\n): BabylonEditorProjectionCameraSettings {\n const normalized = normalizeBabylonEditorProjectionCameraSettings(settings);\n const Vector3 = babylon.Vector3;\n const Vector2 = (babylon as any).Vector2;\n const targetInput = options.target ?? normalized.targetOffset ?? null;\n const target = targetInput && Vector3\n ? new Vector3(targetInput.x, targetInput.y, targetInput.z)\n : null;\n\n camera.minZ = normalized.minZ ?? 1;\n camera.maxZ = Math.max(camera.minZ + 0.001, normalized.maxZ ?? 10000);\n camera.inertia = normalized.inertia ?? camera.inertia;\n if (normalized.targetScreenOffset) {\n camera.targetScreenOffset = Vector2\n ? new Vector2(normalized.targetScreenOffset.x, normalized.targetScreenOffset.y)\n : { ...normalized.targetScreenOffset };\n }\n\n if (typeof camera.alpha === 'number') {\n clearBabylonArcRotateCameraOrbitLimits(camera);\n if (target) camera.target = target;\n camera.alpha = normalized.alpha;\n camera.beta = normalized.beta;\n camera.radius = normalized.radius;\n if (options.lockOrbit !== false) {\n camera.lowerAlphaLimit = normalized.alpha;\n camera.upperAlphaLimit = normalized.alpha;\n camera.lowerBetaLimit = normalized.lowerBetaLimit ?? normalized.beta;\n camera.upperBetaLimit = normalized.upperBetaLimit ?? normalized.beta;\n camera.lowerRadiusLimit = normalized.lowerRadiusLimit ?? normalized.radius;\n camera.upperRadiusLimit = normalized.upperRadiusLimit ?? normalized.radius;\n }\n } else if (target) {\n camera.setTarget?.(target);\n }\n\n if (normalized.projection === 'perspective') {\n camera.mode = babylon.Camera?.PERSPECTIVE_CAMERA ?? camera.mode ?? 0;\n camera.fov = normalized.fov ?? 0.85;\n return normalized;\n }\n\n camera.mode = babylon.Camera?.ORTHOGRAPHIC_CAMERA ?? camera.mode ?? 1;\n const aspect = readProjectionSceneAspect(scene);\n const halfHeight = normalized.orthoSize;\n const halfWidth = halfHeight * aspect;\n camera.orthoLeft = -halfWidth;\n camera.orthoRight = halfWidth;\n camera.orthoTop = halfHeight;\n camera.orthoBottom = -halfHeight;\n return normalized;\n}\n\nfunction clearBabylonArcRotateCameraOrbitLimits(camera: RuntimeCamera): void {\n camera.lowerAlphaLimit = null;\n camera.upperAlphaLimit = null;\n camera.lowerBetaLimit = null;\n camera.upperBetaLimit = null;\n camera.lowerRadiusLimit = null;\n camera.upperRadiusLimit = null;\n}\n\nfunction readProjectionCameraMode(value: unknown): BabylonEditorProjectionCameraMode {\n return value === 'perspective' ? 'perspective' : 'orthographic';\n}\n\nfunction readProjectionSceneAspect(scene: RuntimeScene): number {\n const engine = scene.getEngine?.();\n const width = Number(engine?.getRenderWidth?.() ?? engine?.getRenderingCanvas?.()?.width ?? 1);\n const height = Number(engine?.getRenderHeight?.() ?? engine?.getRenderingCanvas?.()?.height ?? 1);\n if (!Number.isFinite(width) || !Number.isFinite(height) || height <= 0) return 16 / 9;\n return Math.max(0.01, width / height);\n}\n\nfunction readOptionalProjectionVec2(value: unknown): BabylonEditorProjectionVec2 | null {\n if (!value || typeof value !== 'object') return null;\n const candidate = value as Partial<BabylonEditorProjectionVec2>;\n if (!Number.isFinite(candidate.x) || !Number.isFinite(candidate.y)) return null;\n return {\n x: Number(candidate.x),\n y: Number(candidate.y),\n };\n}\n\nfunction readOptionalProjectionVec3(value: unknown): BabylonEditorProjectionVec3 | null {\n if (!value || typeof value !== 'object') return null;\n const candidate = value as Partial<BabylonEditorProjectionVec3>;\n if (!Number.isFinite(candidate.x) || !Number.isFinite(candidate.y) || !Number.isFinite(candidate.z)) return null;\n return {\n x: Number(candidate.x),\n y: Number(candidate.y),\n z: Number(candidate.z),\n };\n}\n\nfunction clampUnit(value: number): number {\n if (!Number.isFinite(value)) return 0;\n return Math.min(1, Math.max(0, value));\n}\n\nfunction readProjectionDirectionalLightSettings(\n settings: BabylonEditorProjectionDirectionalLightSettings | undefined,\n): BabylonEditorProjectionDirectionalLightSettings {\n return {\n type: 'directional',\n intensity: Math.max(0, readFiniteNumber(settings?.intensity, 2)),\n direction: readVector3(settings?.direction, { x: -0.3, y: -1, z: -0.2 }),\n diffuseColor: readProjectionColor(settings?.diffuseColor, { r: 1, g: 1, b: 1 }),\n helperVisible: settings?.helperVisible !== false,\n };\n}\n\nfunction readProjectionHemisphericLightSettings(\n settings: BabylonEditorProjectionHemisphericLightSettings | undefined,\n): BabylonEditorProjectionHemisphericLightSettings {\n return {\n type: 'hemispheric',\n intensity: Math.max(0, readFiniteNumber(settings?.intensity, 0.8)),\n diffuseColor: readProjectionColor(settings?.diffuseColor, { r: 1, g: 1, b: 1 }),\n groundColor: readProjectionColor(settings?.groundColor, { r: 0.48, g: 0.52, b: 0.62 }),\n helperVisible: settings?.helperVisible !== false,\n };\n}\n\nfunction readProjectionColor(\n value: BabylonEditorProjectionColorRGB | undefined,\n fallback: BabylonEditorProjectionColorRGB,\n): BabylonEditorProjectionColorRGB {\n return {\n r: readFiniteNumber(value?.r, fallback.r),\n g: readFiniteNumber(value?.g, fallback.g),\n b: readFiniteNumber(value?.b, fallback.b),\n };\n}\n\nfunction readFiniteNumber(value: unknown, fallback: number): number {\n return typeof value === 'number' && Number.isFinite(value) ? value : fallback;\n}\n\nfunction normalizeProjectionVec3(\n value: BabylonEditorProjectionVec3,\n fallback: BabylonEditorProjectionVec3,\n): BabylonEditorProjectionVec3 {\n const length = Math.hypot(value.x, value.y, value.z);\n if (!Number.isFinite(length) || length <= 0.000001) return normalizeProjectionVec3(fallback, { x: 0, y: -1, z: 0 });\n return {\n x: value.x / length,\n y: value.y / length,\n z: value.z / length,\n };\n}\n\nfunction createProjectionMetadata(\n nodeId: string,\n extra: Record<string, unknown> = {},\n): Record<string, unknown> {\n const disableGeneratedShadow = extra.runtimeKind === 'camera'\n || extra.runtimeKind === 'light'\n || extra.helper != null;\n return {\n ...(disableGeneratedShadow ? {\n disablePlanarShadow: true,\n disableBlobShadow: true,\n disableStaticProjectedShadow: true,\n } : {}),\n editorProjection: {\n nodeId,\n ...extra,\n },\n };\n}\n\nfunction createProjectionShadowMetadata(node: BabylonEditorProjectionNode): Record<string, unknown> {\n return {\n ...(node.shadow ? { shadow: structuredClone(node.shadow) } : {}),\n ...(node.shadowPlan ? { shadowPlan: structuredClone(node.shadowPlan) } : {}),\n };\n}\n\nfunction syncProjectionNodeMetadata(\n projection: ProjectedBabylonEditorNode,\n node: BabylonEditorProjectionNode,\n): void {\n walkProjectionRuntimeNodes(projection.root, (runtimeNode) => {\n syncProjectionRuntimeNodeMetadata(runtimeNode, node);\n });\n}\n\nfunction walkProjectionRuntimeNodes(node: any, visit: (node: any) => void): void {\n if (!node) return;\n visit(node);\n const children = typeof node.getChildren === 'function' ? node.getChildren() : [];\n if (!Array.isArray(children)) return;\n for (const child of children) {\n walkProjectionRuntimeNodes(child, visit);\n }\n}\n\nfunction syncProjectionRuntimeNodeMetadata(\n runtimeNode: any,\n node: BabylonEditorProjectionNode,\n): void {\n const metadata = readProjectionObject(runtimeNode.metadata);\n const editorProjection = readProjectionObject(metadata?.editorProjection);\n if (!editorProjection) return;\n if (editorProjection.nodeId !== node.id && editorProjection.rootNodeId !== node.id) return;\n const nextEditorProjection = { ...editorProjection };\n if (node.shadow) nextEditorProjection.shadow = structuredClone(node.shadow);\n else delete nextEditorProjection.shadow;\n if (node.shadowPlan) nextEditorProjection.shadowPlan = structuredClone(node.shadowPlan);\n else delete nextEditorProjection.shadowPlan;\n runtimeNode.metadata = {\n ...(metadata ?? {}),\n editorProjection: nextEditorProjection,\n };\n}\n\nfunction readProjectionObject(value: unknown): Record<string, unknown> | null {\n return value && typeof value === 'object' && !Array.isArray(value)\n ? value as Record<string, unknown>\n : null;\n}\n\nexport function applyProjectionTransform(\n babylon: BabylonRuntimeGlobal,\n node: any,\n transform: BabylonEditorProjectionTransform,\n): void {\n const Vector3 = requireBabylonCtor(babylon.Vector3, 'Vector3');\n if (isEditorTransformMatrixSnapshot(transform)) {\n const Matrix = requireBabylonCtor(babylon.Matrix, 'Matrix');\n if (typeof Matrix.FromArray !== 'function' || typeof node?.setPreTransformMatrix !== 'function') {\n throw new Error('Babylon runtime missing matrix transform support.');\n }\n node.position = new Vector3(0, 0, 0);\n node.rotationQuaternion = null;\n node.rotation = new Vector3(0, 0, 0);\n node.scaling = new Vector3(1, 1, 1);\n node.setPreTransformMatrix(Matrix.FromArray(transform.matrix));\n writeProjectionLocalMatrixTransform(node, transform.matrix);\n return;\n }\n clearProjectionLocalMatrixTransform(babylon, node);\n node.position = new Vector3(transform.position.x, transform.position.y, transform.position.z);\n node.rotationQuaternion = null;\n node.rotation = new Vector3(transform.rotation.x, transform.rotation.y, transform.rotation.z);\n const scale = transform.scale ?? { x: 1, y: 1, z: 1 };\n node.scaling = new Vector3(scale.x, scale.y, scale.z);\n}\n\nfunction applyProjectionWorldTransform(\n babylon: BabylonRuntimeGlobal,\n node: any,\n transform: EditorTransformSnapshot,\n): boolean {\n const parent = node?.parent ?? null;\n const local = parent\n ? toEditorLocalTransformFromWorld(readProjectionWorldTransform(parent), transform, { allowMatrixFallback: true })\n : transform;\n if (!local) return false;\n applyProjectionTransform(babylon, node, local);\n return true;\n}\n\nfunction cloneProjectionTransformSnapshot(transform: EditorTransformSnapshot): EditorTransformSnapshot {\n return isEditorTransformMatrixSnapshot(transform)\n ? { mode: 'matrix', matrix: cloneEditorTransformMatrix(transform.matrix) }\n : {\n position: { ...transform.position },\n rotation: { ...transform.rotation },\n scale: { ...transform.scale },\n };\n}\n\nfunction writeProjectionLocalMatrixTransform(node: any, matrix: EditorTransformMatrix): void {\n node.metadata = {\n ...(readProjectionObject(node?.metadata) ?? {}),\n [PROJECTION_LOCAL_MATRIX_METADATA_KEY]: cloneEditorTransformMatrix(matrix),\n };\n}\n\nfunction clearProjectionLocalMatrixTransform(babylon: BabylonRuntimeGlobal, node: any): void {\n if (typeof node?.setPreTransformMatrix === 'function') {\n const Matrix = babylon.Matrix;\n if (typeof Matrix?.FromArray === 'function') {\n node.setPreTransformMatrix(Matrix.FromArray(createIdentityEditorTransformMatrix()));\n }\n }\n const metadata = readProjectionObject(node?.metadata);\n if (!metadata || !(PROJECTION_LOCAL_MATRIX_METADATA_KEY in metadata)) return;\n const nextMetadata = { ...metadata };\n delete nextMetadata[PROJECTION_LOCAL_MATRIX_METADATA_KEY];\n node.metadata = nextMetadata;\n}\n\nfunction applyAssetDefaultsTransform(\n babylon: BabylonRuntimeGlobal,\n node: any,\n transform: BabylonEditorProjectionAssetTransform | undefined,\n): void {\n if (!transform) return;\n const Vector3 = requireBabylonCtor(babylon.Vector3, 'Vector3');\n node.position = new Vector3(\n transform.position?.x ?? 0,\n transform.position?.y ?? 0,\n transform.position?.z ?? 0,\n );\n if (transform.rotationDeg) {\n node.rotation = new Vector3(\n (transform.rotationDeg.x * Math.PI) / 180,\n (transform.rotationDeg.y * Math.PI) / 180,\n (transform.rotationDeg.z * Math.PI) / 180,\n );\n } else {\n node.rotation = new Vector3(\n transform.rotation?.x ?? 0,\n transform.rotation?.y ?? 0,\n transform.rotation?.z ?? 0,\n );\n }\n if (typeof transform.scale === 'number') {\n node.scaling = new Vector3(transform.scale, transform.scale, transform.scale);\n } else {\n node.scaling = new Vector3(\n transform.scale?.x ?? 1,\n transform.scale?.y ?? 1,\n transform.scale?.z ?? 1,\n );\n }\n}\n\nfunction getProjectionNodeIdsInScreenRect(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n projections: Map<string, ProjectedBabylonEditorNode>,\n rect: BabylonEditorProjectionScreenRect,\n): string[] {\n const canvas = scene.getEngine?.().getRenderingCanvas?.() as HTMLCanvasElement | null | undefined;\n const camera = scene.activeCamera ?? (scene as any).cameraToUseForPointers ?? null;\n const Vector3 = babylon.Vector3 as any;\n const Matrix = (babylon as any).Matrix;\n if (!canvas || !camera || !Vector3?.Project || !Matrix?.Identity) return [];\n const canvasRect = canvas.getBoundingClientRect();\n const viewport = camera.viewport?.toGlobal?.(\n scene.getEngine?.().getRenderWidth?.() ?? canvas.width,\n scene.getEngine?.().getRenderHeight?.() ?? canvas.height,\n );\n const transformMatrix = scene.getTransformMatrix?.();\n const worldMatrix = Matrix.Identity();\n if (!viewport || !transformMatrix || !worldMatrix) return [];\n const selectedIds: string[] = [];\n for (const [nodeId, projection] of projections) {\n const bounds = projection.root?.getHierarchyBoundingVectors?.();\n if (!bounds?.min || !bounds?.max) continue;\n const corners = createBoundsCorners(Vector3, bounds.min, bounds.max);\n const projected = corners\n .map((corner: any) => Vector3.Project(corner, worldMatrix, transformMatrix, viewport))\n .map((point: any) => ({\n x: canvasRect.left + point.x,\n y: canvasRect.top + point.y,\n }));\n if (projected.length === 0) continue;\n const minX = Math.min(...projected.map(point => point.x));\n const maxX = Math.max(...projected.map(point => point.x));\n const minY = Math.min(...projected.map(point => point.y));\n const maxY = Math.max(...projected.map(point => point.y));\n if (rectsIntersect(rect, { left: minX, top: minY, right: maxX, bottom: maxY })) {\n selectedIds.push(nodeId);\n }\n }\n return selectedIds;\n}\n\nfunction createBoundsCorners(Vector3: any, min: any, max: any): any[] {\n return [\n new Vector3(min.x, min.y, min.z),\n new Vector3(min.x, min.y, max.z),\n new Vector3(min.x, max.y, min.z),\n new Vector3(min.x, max.y, max.z),\n new Vector3(max.x, min.y, min.z),\n new Vector3(max.x, min.y, max.z),\n new Vector3(max.x, max.y, min.z),\n new Vector3(max.x, max.y, max.z),\n ];\n}\n\nfunction rectsIntersect(\n left: BabylonEditorProjectionScreenRect,\n right: BabylonEditorProjectionScreenRect,\n): boolean {\n return left.left <= right.right\n && left.right >= right.left\n && left.top <= right.bottom\n && left.bottom >= right.top;\n}\n"]}
|