@itwin/core-backend 5.5.0-dev.1 → 5.5.0-dev.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/lib/cjs/BackendHubAccess.js.map +1 -1
- package/lib/cjs/BackendLoggerCategory.js.map +1 -1
- package/lib/cjs/BisCoreSchema.js.map +1 -1
- package/lib/cjs/BlobContainerService.js.map +1 -1
- package/lib/cjs/BriefcaseManager.js.map +1 -1
- package/lib/cjs/CatalogDb.js.map +1 -1
- package/lib/cjs/Category.js.map +1 -1
- package/lib/cjs/ChangeSummaryManager.js +2 -2
- package/lib/cjs/ChangeSummaryManager.js.map +1 -1
- package/lib/cjs/ChangedElementsDb.js.map +1 -1
- package/lib/cjs/ChangesetECAdaptor.js +248 -248
- package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
- package/lib/cjs/ChannelControl.js.map +1 -1
- package/lib/cjs/CheckpointManager.js.map +1 -1
- package/lib/cjs/ClassRegistry.js +5 -5
- package/lib/cjs/ClassRegistry.js.map +1 -1
- package/lib/cjs/CloudSqlite.js.map +1 -1
- package/lib/cjs/CodeService.js.map +1 -1
- package/lib/cjs/CodeSpecs.js.map +1 -1
- package/lib/cjs/ConcurrentQuery.js.map +1 -1
- package/lib/cjs/CustomViewState3dCreator.js.map +1 -1
- package/lib/cjs/DevTools.js.map +1 -1
- package/lib/cjs/DisplayStyle.js.map +1 -1
- package/lib/cjs/ECDb.js.map +1 -1
- package/lib/cjs/ECSchemaXmlContext.js.map +1 -1
- package/lib/cjs/ECSqlStatement.js.map +1 -1
- package/lib/cjs/Element.js.map +1 -1
- package/lib/cjs/ElementAspect.js.map +1 -1
- package/lib/cjs/ElementGraphics.js.map +1 -1
- package/lib/cjs/ElementTreeWalker.js.map +1 -1
- package/lib/cjs/Entity.js.map +1 -1
- package/lib/cjs/EntityReferences.js.map +1 -1
- package/lib/cjs/ExportGraphics.js.map +1 -1
- package/lib/cjs/ExternalSource.js.map +1 -1
- package/lib/cjs/FontFile.js.map +1 -1
- package/lib/cjs/GeoCoordConfig.js.map +1 -1
- package/lib/cjs/GeographicCRSServices.js.map +1 -1
- package/lib/cjs/GeometrySummary.js +47 -47
- package/lib/cjs/GeometrySummary.js.map +1 -1
- package/lib/cjs/IModelDb.js +8 -8
- package/lib/cjs/IModelDb.js.map +1 -1
- package/lib/cjs/IModelDbFonts.js.map +1 -1
- package/lib/cjs/IModelElementCloneContext.js.map +1 -1
- package/lib/cjs/IModelHost.js.map +1 -1
- package/lib/cjs/IModelIncrementalSchemaLocater.js.map +1 -1
- package/lib/cjs/IModelJsFs.js.map +1 -1
- package/lib/cjs/ImageSourceConversion.js.map +1 -1
- package/lib/cjs/IpcHost.js.map +1 -1
- package/lib/cjs/LineStyle.js.map +1 -1
- package/lib/cjs/LocalHub.js +1 -1
- package/lib/cjs/LocalHub.js.map +1 -1
- package/lib/cjs/LocalhostIpcHost.js.map +1 -1
- package/lib/cjs/LockControl.js.map +1 -1
- package/lib/cjs/Material.js.map +1 -1
- package/lib/cjs/Model.js.map +1 -1
- package/lib/cjs/NativeAppStorage.js.map +1 -1
- package/lib/cjs/NativeHost.js.map +1 -1
- package/lib/cjs/NavigationRelationship.js.map +1 -1
- package/lib/cjs/PromiseMemoizer.js.map +1 -1
- package/lib/cjs/PropertyStore.js.map +1 -1
- package/lib/cjs/Relationship.js.map +1 -1
- package/lib/cjs/RpcBackend.js.map +1 -1
- package/lib/cjs/SQLiteDb.js.map +1 -1
- package/lib/cjs/Schema.js.map +1 -1
- package/lib/cjs/SchemaSync.js.map +1 -1
- package/lib/cjs/SchemaUtils.js.map +1 -1
- package/lib/cjs/SheetIndex.js.map +1 -1
- package/lib/cjs/SqliteChangesetReader.js.map +1 -1
- package/lib/cjs/SqliteStatement.js.map +1 -1
- package/lib/cjs/StashManager.js.map +1 -1
- package/lib/cjs/Texture.js.map +1 -1
- package/lib/cjs/TileStorage.js.map +1 -1
- package/lib/cjs/TxnManager.js.map +1 -1
- package/lib/cjs/ViewDefinition.js.map +1 -1
- package/lib/cjs/ViewStateHydrator.js.map +1 -1
- package/lib/cjs/ViewStore.js.map +1 -1
- package/lib/cjs/annotations/ElementDrivesTextAnnotation.js.map +1 -1
- package/lib/cjs/annotations/FrameGeometry.js.map +1 -1
- package/lib/cjs/annotations/LeaderGeometry.js.map +1 -1
- package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -1
- package/lib/cjs/annotations/TextAnnotationGeometry.js.map +1 -1
- package/lib/cjs/annotations/TextBlockGeometry.js.map +1 -1
- package/lib/cjs/annotations/TextBlockLayout.js.map +1 -1
- package/lib/cjs/assets/IModelChange.02.00.00.ecschema.xml +90 -90
- package/lib/cjs/assets/Settings/Schemas/Base.Schema.json +32 -32
- package/lib/cjs/assets/Settings/Schemas/Gcs.schema.json +27 -27
- package/lib/cjs/assets/Settings/Schemas/Workspace.Schema.json +94 -94
- package/lib/cjs/assets/Settings/backend.setting.json5 +21 -21
- package/lib/cjs/core-backend.js.map +1 -1
- package/lib/cjs/domains/FunctionalElements.js.map +1 -1
- package/lib/cjs/domains/FunctionalSchema.js.map +1 -1
- package/lib/cjs/domains/GenericElements.js.map +1 -1
- package/lib/cjs/domains/GenericSchema.js.map +1 -1
- package/lib/cjs/internal/ChangesetConflictArgs.js.map +1 -1
- package/lib/cjs/internal/ChannelAdmin.js.map +1 -1
- package/lib/cjs/internal/ElementLRUCache.js.map +1 -1
- package/lib/cjs/internal/FontFileImpl.js.map +1 -1
- package/lib/cjs/internal/HubMock.js.map +1 -1
- package/lib/cjs/internal/IModelDbFontsImpl.js.map +1 -1
- package/lib/cjs/internal/NativePlatform.js.map +1 -1
- package/lib/cjs/internal/NoLocks.js.map +1 -1
- package/lib/cjs/internal/OnlineStatus.js.map +1 -1
- package/lib/cjs/internal/ServerBasedLocks.js.map +1 -1
- package/lib/cjs/internal/Symbols.js.map +1 -1
- package/lib/cjs/internal/annotations/fields.js.map +1 -1
- package/lib/cjs/internal/cross-package.js.map +1 -1
- package/lib/cjs/internal/workspace/SettingsImpl.js.map +1 -1
- package/lib/cjs/internal/workspace/SettingsSchemasImpl.js.map +1 -1
- package/lib/cjs/internal/workspace/WorkspaceImpl.js.map +1 -1
- package/lib/cjs/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
- package/lib/cjs/rpc/multipart.js.map +1 -1
- package/lib/cjs/rpc/tracing.js.map +1 -1
- package/lib/cjs/rpc/web/logging.js.map +1 -1
- package/lib/cjs/rpc/web/request.js.map +1 -1
- package/lib/cjs/rpc/web/response.js.map +1 -1
- package/lib/cjs/rpc-impl/DevToolsRpcImpl.js.map +1 -1
- package/lib/cjs/rpc-impl/IModelReadRpcImpl.js.map +1 -1
- package/lib/cjs/rpc-impl/IModelTileRpcImpl.js.map +1 -1
- package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
- package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
- package/lib/cjs/workspace/Settings.js.map +1 -1
- package/lib/cjs/workspace/SettingsSchemas.js.map +1 -1
- package/lib/cjs/workspace/Workspace.js.map +1 -1
- package/lib/cjs/workspace/WorkspaceEditor.js.map +1 -1
- package/lib/esm/BackendHubAccess.js.map +1 -1
- package/lib/esm/BackendLoggerCategory.js.map +1 -1
- package/lib/esm/BisCoreSchema.js.map +1 -1
- package/lib/esm/BlobContainerService.js.map +1 -1
- package/lib/esm/BriefcaseManager.js.map +1 -1
- package/lib/esm/CatalogDb.js.map +1 -1
- package/lib/esm/Category.js.map +1 -1
- package/lib/esm/ChangeSummaryManager.js +2 -2
- package/lib/esm/ChangeSummaryManager.js.map +1 -1
- package/lib/esm/ChangedElementsDb.js.map +1 -1
- package/lib/esm/ChangesetECAdaptor.js +248 -248
- package/lib/esm/ChangesetECAdaptor.js.map +1 -1
- package/lib/esm/ChannelControl.js.map +1 -1
- package/lib/esm/CheckpointManager.js.map +1 -1
- package/lib/esm/ClassRegistry.js +5 -5
- package/lib/esm/ClassRegistry.js.map +1 -1
- package/lib/esm/CloudSqlite.js.map +1 -1
- package/lib/esm/CodeService.js.map +1 -1
- package/lib/esm/CodeSpecs.js.map +1 -1
- package/lib/esm/ConcurrentQuery.js.map +1 -1
- package/lib/esm/CustomViewState3dCreator.js.map +1 -1
- package/lib/esm/DevTools.js.map +1 -1
- package/lib/esm/DisplayStyle.js.map +1 -1
- package/lib/esm/ECDb.js.map +1 -1
- package/lib/esm/ECSchemaXmlContext.js.map +1 -1
- package/lib/esm/ECSqlStatement.js.map +1 -1
- package/lib/esm/Element.js.map +1 -1
- package/lib/esm/ElementAspect.js.map +1 -1
- package/lib/esm/ElementGraphics.js.map +1 -1
- package/lib/esm/ElementTreeWalker.js.map +1 -1
- package/lib/esm/Entity.js.map +1 -1
- package/lib/esm/EntityReferences.js.map +1 -1
- package/lib/esm/ExportGraphics.js.map +1 -1
- package/lib/esm/ExternalSource.js.map +1 -1
- package/lib/esm/FontFile.js.map +1 -1
- package/lib/esm/GeoCoordConfig.js.map +1 -1
- package/lib/esm/GeographicCRSServices.js.map +1 -1
- package/lib/esm/GeometrySummary.js +47 -47
- package/lib/esm/GeometrySummary.js.map +1 -1
- package/lib/esm/IModelDb.js +8 -8
- package/lib/esm/IModelDb.js.map +1 -1
- package/lib/esm/IModelDbFonts.js.map +1 -1
- package/lib/esm/IModelElementCloneContext.js.map +1 -1
- package/lib/esm/IModelHost.js.map +1 -1
- package/lib/esm/IModelIncrementalSchemaLocater.js.map +1 -1
- package/lib/esm/IModelJsFs.js.map +1 -1
- package/lib/esm/ImageSourceConversion.js.map +1 -1
- package/lib/esm/IpcHost.js.map +1 -1
- package/lib/esm/LineStyle.js.map +1 -1
- package/lib/esm/LocalHub.js +1 -1
- package/lib/esm/LocalHub.js.map +1 -1
- package/lib/esm/LocalhostIpcHost.js.map +1 -1
- package/lib/esm/LockControl.js.map +1 -1
- package/lib/esm/Material.js.map +1 -1
- package/lib/esm/Model.js.map +1 -1
- package/lib/esm/NativeAppStorage.js.map +1 -1
- package/lib/esm/NativeHost.js.map +1 -1
- package/lib/esm/NavigationRelationship.js.map +1 -1
- package/lib/esm/PromiseMemoizer.js.map +1 -1
- package/lib/esm/PropertyStore.js.map +1 -1
- package/lib/esm/Relationship.js.map +1 -1
- package/lib/esm/RpcBackend.js.map +1 -1
- package/lib/esm/SQLiteDb.js.map +1 -1
- package/lib/esm/Schema.js.map +1 -1
- package/lib/esm/SchemaSync.js.map +1 -1
- package/lib/esm/SchemaUtils.js.map +1 -1
- package/lib/esm/SheetIndex.js.map +1 -1
- package/lib/esm/SqliteChangesetReader.js.map +1 -1
- package/lib/esm/SqliteStatement.js.map +1 -1
- package/lib/esm/StashManager.js.map +1 -1
- package/lib/esm/Texture.js.map +1 -1
- package/lib/esm/TileStorage.js.map +1 -1
- package/lib/esm/TxnManager.js.map +1 -1
- package/lib/esm/ViewDefinition.js.map +1 -1
- package/lib/esm/ViewStateHydrator.js.map +1 -1
- package/lib/esm/ViewStore.js.map +1 -1
- package/lib/esm/annotations/ElementDrivesTextAnnotation.js.map +1 -1
- package/lib/esm/annotations/FrameGeometry.js.map +1 -1
- package/lib/esm/annotations/LeaderGeometry.js.map +1 -1
- package/lib/esm/annotations/TextAnnotationElement.js.map +1 -1
- package/lib/esm/annotations/TextAnnotationGeometry.js.map +1 -1
- package/lib/esm/annotations/TextBlockGeometry.js.map +1 -1
- package/lib/esm/annotations/TextBlockLayout.js.map +1 -1
- package/lib/esm/core-backend.js.map +1 -1
- package/lib/esm/domains/FunctionalElements.js.map +1 -1
- package/lib/esm/domains/FunctionalSchema.js.map +1 -1
- package/lib/esm/domains/GenericElements.js.map +1 -1
- package/lib/esm/domains/GenericSchema.js.map +1 -1
- package/lib/esm/internal/ChangesetConflictArgs.js.map +1 -1
- package/lib/esm/internal/ChannelAdmin.js.map +1 -1
- package/lib/esm/internal/ElementLRUCache.js.map +1 -1
- package/lib/esm/internal/FontFileImpl.js.map +1 -1
- package/lib/esm/internal/HubMock.js.map +1 -1
- package/lib/esm/internal/IModelDbFontsImpl.js.map +1 -1
- package/lib/esm/internal/NativePlatform.js.map +1 -1
- package/lib/esm/internal/NoLocks.js.map +1 -1
- package/lib/esm/internal/OnlineStatus.js.map +1 -1
- package/lib/esm/internal/ServerBasedLocks.js.map +1 -1
- package/lib/esm/internal/Symbols.js.map +1 -1
- package/lib/esm/internal/annotations/fields.js.map +1 -1
- package/lib/esm/internal/cross-package.js.map +1 -1
- package/lib/esm/internal/workspace/SettingsImpl.js.map +1 -1
- package/lib/esm/internal/workspace/SettingsSchemasImpl.js.map +1 -1
- package/lib/esm/internal/workspace/WorkspaceImpl.js.map +1 -1
- package/lib/esm/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
- package/lib/esm/rpc/multipart.js.map +1 -1
- package/lib/esm/rpc/tracing.js.map +1 -1
- package/lib/esm/rpc/web/logging.js.map +1 -1
- package/lib/esm/rpc/web/request.js.map +1 -1
- package/lib/esm/rpc/web/response.js.map +1 -1
- package/lib/esm/rpc-impl/DevToolsRpcImpl.js.map +1 -1
- package/lib/esm/rpc-impl/IModelReadRpcImpl.js.map +1 -1
- package/lib/esm/rpc-impl/IModelTileRpcImpl.js.map +1 -1
- package/lib/esm/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
- package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
- package/lib/esm/test/AdvancedEqual.js.map +1 -1
- package/lib/esm/test/AnnotationTestUtils.js.map +1 -1
- package/lib/esm/test/AttachDb.test.js +11 -11
- package/lib/esm/test/AttachDb.test.js.map +1 -1
- package/lib/esm/test/ElementDrivesElement.test.js +23 -23
- package/lib/esm/test/ElementDrivesElement.test.js.map +1 -1
- package/lib/esm/test/ElementLRUCache.test.js.map +1 -1
- package/lib/esm/test/GeometryTestUtil.js.map +1 -1
- package/lib/esm/test/IModelHost.test.js.map +1 -1
- package/lib/esm/test/IModelTestUtils.js.map +1 -1
- package/lib/esm/test/ImageSourceConversion.test.js.map +1 -1
- package/lib/esm/test/IpcHost.test.js.map +1 -1
- package/lib/esm/test/KnownTestLocations.js.map +1 -1
- package/lib/esm/test/PrintElementTree.js.map +1 -1
- package/lib/esm/test/PropertyDb.test.js.map +1 -1
- package/lib/esm/test/RevisionUtility.js.map +1 -1
- package/lib/esm/test/SchemaUtils.test.js +25 -25
- package/lib/esm/test/SchemaUtils.test.js.map +1 -1
- package/lib/esm/test/SequentialLogMatcher.js.map +1 -1
- package/lib/esm/test/TestChangeSetUtility.js.map +1 -1
- package/lib/esm/test/TestUtils.js.map +1 -1
- package/lib/esm/test/annotations/Fields.test.js +53 -53
- package/lib/esm/test/annotations/Fields.test.js.map +1 -1
- package/lib/esm/test/annotations/FrameGeometry.test.js.map +1 -1
- package/lib/esm/test/annotations/LeaderGeometry.test.js.map +1 -1
- package/lib/esm/test/annotations/TextAnnotation.test.js.map +1 -1
- package/lib/esm/test/annotations/TextBlock.test.js.map +1 -1
- package/lib/esm/test/assets/IncrementalSchemaLocater/configs/old.config.js.map +1 -1
- package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.js.map +1 -1
- package/lib/esm/test/categories/Category.test.js.map +1 -1
- package/lib/esm/test/codespec/CodeSpec.test.js.map +1 -1
- package/lib/esm/test/ecdb/CTE.test.js +88 -88
- package/lib/esm/test/ecdb/CTE.test.js.map +1 -1
- package/lib/esm/test/ecdb/ConcurrentQuery.test.js +15 -15
- package/lib/esm/test/ecdb/ConcurrentQuery.test.js.map +1 -1
- package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js +15 -15
- package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECDb.test.js +72 -72
- package/lib/esm/test/ecdb/ECDb.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECDbTestHelper.js.map +1 -1
- package/lib/esm/test/ecdb/ECSchemaXmlContext.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlAst.test.js +65 -65
- package/lib/esm/test/ecdb/ECSqlAst.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlQuery.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlReader.test.js +16 -16
- package/lib/esm/test/ecdb/ECSqlReader.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlStatement.test.js +332 -332
- package/lib/esm/test/ecdb/ECSqlStatement.test.js.map +1 -1
- package/lib/esm/test/ecdb/SqliteStatement.test.js.map +1 -1
- package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js.map +1 -1
- package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js +21 -21
- package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js.map +1 -1
- package/lib/esm/test/ecsql/src/ECSqlTestParser.js.map +1 -1
- package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -1
- package/lib/esm/test/element/DeleteDefinitionElements.test.js.map +1 -1
- package/lib/esm/test/element/ElementAspect.test.js +22 -22
- package/lib/esm/test/element/ElementAspect.test.js.map +1 -1
- package/lib/esm/test/element/ElementDependencyGraph.test.js.map +1 -1
- package/lib/esm/test/element/ElementRoundTrip.test.js +139 -139
- package/lib/esm/test/element/ElementRoundTrip.test.js.map +1 -1
- package/lib/esm/test/element/ExcludedElements.test.js.map +1 -1
- package/lib/esm/test/element/ExternalSource.test.js.map +1 -1
- package/lib/esm/test/element/NullStructArray.test.js +13 -13
- package/lib/esm/test/element/NullStructArray.test.js.map +1 -1
- package/lib/esm/test/element/ProjectInformationRecord.test.js.map +1 -1
- package/lib/esm/test/element/SheetInformationAspect.test.js.map +1 -1
- package/lib/esm/test/element/UrlLink.test.js.map +1 -1
- package/lib/esm/test/font/FontFile.test.js.map +1 -1
- package/lib/esm/test/font/IModelDbFonts.test.js.map +1 -1
- package/lib/esm/test/hubaccess/ApplyChangeset.test.js +32 -32
- package/lib/esm/test/hubaccess/ApplyChangeset.test.js.map +1 -1
- package/lib/esm/test/hubaccess/BriefcaseManager.test.js.map +1 -1
- package/lib/esm/test/hubaccess/CheckpointManager.test.js.map +1 -1
- package/lib/esm/test/hubaccess/Rebase.test.js +40 -40
- package/lib/esm/test/hubaccess/Rebase.test.js.map +1 -1
- package/lib/esm/test/imageData.js.map +1 -1
- package/lib/esm/test/imodel/Code.test.js.map +1 -1
- package/lib/esm/test/imodel/ElementTreeWalker.test.js.map +1 -1
- package/lib/esm/test/imodel/GetTextureImage.test.js.map +1 -1
- package/lib/esm/test/imodel/IModel.test.js +44 -44
- package/lib/esm/test/imodel/IModel.test.js.map +1 -1
- package/lib/esm/test/imodel/ProjectExtents.test.js.map +1 -1
- package/lib/esm/test/imodel/SchemaXmlImport.test.js.map +1 -1
- package/lib/esm/test/incrementalSchemaLocater/ECSqlQueries.test.js.map +1 -1
- package/lib/esm/test/incrementalSchemaLocater/IncrementalLoading.test.js.map +1 -1
- package/lib/esm/test/incrementalSchemaLocater/utils/IModelSchemaLocater.js.map +1 -1
- package/lib/esm/test/incrementalSchemaLocater/utils/IncrementalTestHelper.js.map +1 -1
- package/lib/esm/test/incrementalSchemaLocater/utils/TestSqlSchemaLocater.js.map +1 -1
- package/lib/esm/test/index.js.map +1 -1
- package/lib/esm/test/misc/DevTools.test.js.map +1 -1
- package/lib/esm/test/misc/EntitySubClasses.test.js.map +1 -1
- package/lib/esm/test/misc/GeoServices.test.js.map +1 -1
- package/lib/esm/test/misc/PromiseMemoizer.test.js.map +1 -1
- package/lib/esm/test/native/DgnDbWorker.test.js.map +1 -1
- package/lib/esm/test/rpc/response.test.js.map +1 -1
- package/lib/esm/test/schema/ClassRegistry.test.js +99 -99
- package/lib/esm/test/schema/ClassRegistry.test.js.map +1 -1
- package/lib/esm/test/schema/FunctionalDomain.test.js.map +1 -1
- package/lib/esm/test/schema/GenericDomain.test.js.map +1 -1
- package/lib/esm/test/schema/IModelSchemaContext.test.js.map +1 -1
- package/lib/esm/test/sheetindex/SheetIndex.test.js.map +1 -1
- package/lib/esm/test/standalone/ChangeMerge.test.js.map +1 -1
- package/lib/esm/test/standalone/ChangesetReader.test.js +124 -124
- package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
- package/lib/esm/test/standalone/CustomViewState3dCreator.test.js.map +1 -1
- package/lib/esm/test/standalone/DisplayStyle.test.js.map +1 -1
- package/lib/esm/test/standalone/Drawing.test.js.map +1 -1
- package/lib/esm/test/standalone/ElementGraphics.test.js.map +1 -1
- package/lib/esm/test/standalone/ElementMesh.test.js.map +1 -1
- package/lib/esm/test/standalone/ExportGraphics.test.js +14 -14
- package/lib/esm/test/standalone/ExportGraphics.test.js.map +1 -1
- package/lib/esm/test/standalone/GeometryChangeEvents.test.js.map +1 -1
- package/lib/esm/test/standalone/GeometryStream.test.js.map +1 -1
- package/lib/esm/test/standalone/HubMock.test.js.map +1 -1
- package/lib/esm/test/standalone/IModelLimits.test.js.map +1 -1
- package/lib/esm/test/standalone/IModelWrite.test.js +27 -27
- package/lib/esm/test/standalone/IModelWrite.test.js.map +1 -1
- package/lib/esm/test/standalone/InlineGeometryPartReferences.test.js.map +1 -1
- package/lib/esm/test/standalone/MergeConflict.test.js.map +1 -1
- package/lib/esm/test/standalone/NativeAppStorage.test.js.map +1 -1
- package/lib/esm/test/standalone/RenderMaterialElement.test.js.map +1 -1
- package/lib/esm/test/standalone/RenderTimeline.test.js.map +1 -1
- package/lib/esm/test/standalone/SQLiteDb.test.js.map +1 -1
- package/lib/esm/test/standalone/SchemaUtils.test.js.map +1 -1
- package/lib/esm/test/standalone/SectionDrawing.test.js.map +1 -1
- package/lib/esm/test/standalone/ServerBasedLocks.test.js.map +1 -1
- package/lib/esm/test/standalone/Setting.test.js.map +1 -1
- package/lib/esm/test/standalone/Settings.test.js.map +1 -1
- package/lib/esm/test/standalone/SettingsSchemas.test.js.map +1 -1
- package/lib/esm/test/standalone/SnapshotDb.test.js.map +1 -1
- package/lib/esm/test/standalone/Texture.test.js.map +1 -1
- package/lib/esm/test/standalone/TileCache.test.js.map +1 -1
- package/lib/esm/test/standalone/TileTree.test.js.map +1 -1
- package/lib/esm/test/standalone/TxnManager.test.js.map +1 -1
- package/lib/esm/test/standalone/ViewDefinition.test.js.map +1 -1
- package/lib/esm/test/standalone/ViewStoreDb.test.js.map +1 -1
- package/lib/esm/test/standalone/Workspace.test.js.map +1 -1
- package/lib/esm/workspace/Settings.js.map +1 -1
- package/lib/esm/workspace/SettingsSchemas.js.map +1 -1
- package/lib/esm/workspace/Workspace.js.map +1 -1
- package/lib/esm/workspace/WorkspaceEditor.js.map +1 -1
- package/package.json +14 -14
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExportGraphics.test.js","sourceRoot":"","sources":["../../../../src/test/standalone/ExportGraphics.test.ts"],"names":[],"mappings":"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,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG;YACtI,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG;YACpH,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;YACjH,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;YAC3H,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,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AC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/R,MAAM,WAAW,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3Q,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;QACtU,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { assert } from \"chai\";\r\nimport * as fs from \"fs\";\r\nimport { DbResult, Id64, Id64Array, Id64String } from \"@itwin/core-bentley\";\r\nimport {\r\n Code, ColorDef, FillDisplay, GeometryClass, GeometryParams, GeometryPartProps, GeometryStreamBuilder, GeometryStreamProps, ImageSourceFormat,\r\n IModel, LineStyle, PhysicalElementProps, Point2dProps, TextureMapProps, TextureMapUnits,\r\n} from \"@itwin/core-common\";\r\nimport {\r\n Angle, Box, Geometry, GeometryQuery, GrowableXYArray, GrowableXYZArray, LineSegment3d, LineString3d, Loop, NumberArray, Point2dArray, Point3d,\r\n Point3dArray, PolyfaceBuilder, Range3d, Sphere, StrokeOptions, Vector3d, Vector3dArray,\r\n} from \"@itwin/core-geometry\";\r\nimport {\r\n ExportGraphics, ExportGraphicsInfo, ExportGraphicsMeshVisitor, ExportGraphicsOptions, GeometricElement, LineStyleDefinition, PhysicalObject,\r\n RenderMaterialElement, SnapshotDb, Texture,\r\n} from \"../../core-backend\";\r\nimport { GeometryPart } from \"../../Element\";\r\nimport {\r\n ExportGraphicsFunction, ExportGraphicsMesh, ExportLinesInfo, ExportPartInfo, ExportPartInstanceInfo, ExportPartLinesInfo,\r\n} from \"../../ExportGraphics\";\r\nimport { IModelTestUtils } from \"../IModelTestUtils\";\r\n\r\ndescribe(\"exportGraphics\", () => {\r\n let iModel: SnapshotDb;\r\n let seedModel: Id64String;\r\n let seedCategory: Id64String;\r\n\r\n function insertPhysicalElement(geometryStream: GeometryStreamProps): Id64String {\r\n const elementProps: PhysicalElementProps = {\r\n classFullName: PhysicalObject.classFullName,\r\n model: seedModel,\r\n category: seedCategory,\r\n code: Code.createEmpty(),\r\n geom: geometryStream,\r\n };\r\n return iModel.elements.insertElement(elementProps);\r\n }\r\n\r\n function insertRenderMaterialWithTexture(name: string, textureId: Id64String, patternScale?: Point2dProps, patternScaleMode?: TextureMapUnits): Id64String {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n const props: TextureMapProps = { TextureId: textureId, pattern_offset: [0.0, 0.0] };\r\n if (patternScale)\r\n props.pattern_scale = patternScale;\r\n if (patternScaleMode)\r\n props.pattern_scalemode = patternScaleMode;\r\n return RenderMaterialElement.insert(iModel, IModel.dictionaryId, name, { paletteName: \"test-palette\", patternMap: props });\r\n }\r\n\r\n function insertRenderMaterial(name: string, colorDef: ColorDef): Id64String {\r\n const colors = colorDef.colors;\r\n return RenderMaterialElement.insert(iModel, IModel.dictionaryId, name, {\r\n paletteName: \"test-palette\",\r\n color: [colors.r / 255, colors.g / 255, colors.b / 255],\r\n transmit: colors.t / 255,\r\n });\r\n }\r\n\r\n before(() => {\r\n const seedFileName = IModelTestUtils.resolveAssetFile(\"CompatibilityTestSeed.bim\");\r\n const testFileName = IModelTestUtils.prepareOutputFile(\"ExportGraphics\", \"ExportGraphicsTest.bim\");\r\n iModel = IModelTestUtils.createSnapshotFromSeed(testFileName, seedFileName);\r\n\r\n // Get known model/category from seed element a la GeometryStream.test.ts\r\n const seedElement = iModel.elements.getElement<GeometricElement>(\"0x1d\");\r\n assert.exists(seedElement);\r\n assert.isTrue(seedElement.federationGuid === \"18eb4650-b074-414f-b961-d9cfaa6c8746\");\r\n seedModel = seedElement.model;\r\n seedCategory = seedElement.category;\r\n });\r\n\r\n after(() => {\r\n iModel.close();\r\n });\r\n\r\n it(\"resolves element color correctly\", () => {\r\n const elementColor = ColorDef.fromString(\"cadetBlue\");\r\n\r\n const builder = new GeometryStreamBuilder();\r\n const geometryParams = new GeometryParams(seedCategory);\r\n geometryParams.lineColor = elementColor;\r\n builder.appendGeometryParamsChange(geometryParams);\r\n builder.appendGeometry(Sphere.createCenterRadius(Point3d.createZero(), 1));\r\n const geometricElementId = insertPhysicalElement(builder.geometryStream);\r\n\r\n const infos: ExportGraphicsInfo[] = [];\r\n const exportGraphicsOptions: ExportGraphicsOptions = {\r\n elementIdArray: [geometricElementId],\r\n onGraphics: (info: ExportGraphicsInfo) => infos.push(info),\r\n };\r\n\r\n const exportStatus = iModel.exportGraphics(exportGraphicsOptions);\r\n assert.strictEqual(exportStatus, DbResult.BE_SQLITE_OK);\r\n assert.strictEqual(infos.length, 1);\r\n assert.strictEqual(infos[0].elementId, geometricElementId);\r\n assert.strictEqual(infos[0].color, elementColor.tbgr);\r\n });\r\n\r\n it(\"resolves material color and transparency correctly\", () => {\r\n const materialColor = ColorDef.fromString(\"honeydew\").withTransparency(80);\r\n const materialId = insertRenderMaterial(\"test-material\", materialColor);\r\n\r\n const builder = new GeometryStreamBuilder();\r\n const geometryParams = new GeometryParams(seedCategory);\r\n geometryParams.lineColor = ColorDef.fromString(\"rebeccaPurple\"); // line color should be superceded by material color\r\n geometryParams.materialId = materialId;\r\n builder.appendGeometryParamsChange(geometryParams);\r\n builder.appendGeometry(Sphere.createCenterRadius(Point3d.createZero(), 1));\r\n const geometricElementId = insertPhysicalElement(builder.geometryStream);\r\n\r\n const infos: ExportGraphicsInfo[] = [];\r\n const exportGraphicsOptions: ExportGraphicsOptions = {\r\n elementIdArray: [geometricElementId],\r\n onGraphics: (info: ExportGraphicsInfo) => infos.push(info),\r\n };\r\n\r\n const exportStatus = iModel.exportGraphics(exportGraphicsOptions);\r\n assert.strictEqual(exportStatus, DbResult.BE_SQLITE_OK);\r\n assert.strictEqual(infos.length, 1);\r\n assert.strictEqual(infos[0].elementId, geometricElementId);\r\n assert.strictEqual(infos[0].materialId, materialId);\r\n assert.strictEqual(infos[0].color, materialColor.tbgr);\r\n assert.isUndefined(infos[0].textureId);\r\n });\r\n\r\n it(\"resolves color face symbology correctly\", () => {\r\n const color0 = ColorDef.fromString(\"sienna\");\r\n const color1 = ColorDef.fromString(\"plum\");\r\n\r\n const builder = new GeometryStreamBuilder();\r\n const geometryParams = new GeometryParams(seedCategory);\r\n geometryParams.lineColor = ColorDef.fromString(\"peachPuff\"); // line color should be superceded by face color\r\n builder.appendGeometryParamsChange(geometryParams);\r\n // Cube with one material attached to two faces and another material attached to other four faces\r\n const testBrepData: string = JSON.parse(\r\n fs.readFileSync(IModelTestUtils.resolveAssetFile(\"brep-face-symb.json\"), { encoding: \"utf8\" }),\r\n ).data;\r\n builder.appendBRepData({\r\n data: testBrepData,\r\n faceSymbology: [\r\n { color: color0.toJSON() },\r\n { color: color1.toJSON() },\r\n ],\r\n });\r\n const geometricElementId = insertPhysicalElement(builder.geometryStream);\r\n\r\n const infos: ExportGraphicsInfo[] = [];\r\n const exportGraphicsOptions: ExportGraphicsOptions = {\r\n elementIdArray: [geometricElementId],\r\n onGraphics: (info: ExportGraphicsInfo) => infos.push(info),\r\n };\r\n\r\n const exportStatus = iModel.exportGraphics(exportGraphicsOptions);\r\n assert.strictEqual(exportStatus, DbResult.BE_SQLITE_OK);\r\n // 4 faces of slab have color1, 2 faces have color0.\r\n // Triangulated, should split into info with 24 indices and info with 12 indices.\r\n assert.strictEqual(infos.length, 2);\r\n assert.strictEqual(infos[0].elementId, geometricElementId);\r\n assert.strictEqual(infos[0].mesh.indices.length, 24);\r\n assert.strictEqual(infos[0].color, color1.tbgr);\r\n assert.strictEqual(infos[1].elementId, geometricElementId);\r\n assert.strictEqual(infos[1].mesh.indices.length, 12);\r\n assert.strictEqual(infos[1].color, color0.tbgr);\r\n });\r\n\r\n it(\"resolves material face symbology correctly\", () => {\r\n const materialColor0 = ColorDef.fromString(\"honeydew\").withTransparency(80);\r\n const materialId0 = insertRenderMaterial(\"test-material-0\", materialColor0);\r\n\r\n const materialColor1 = ColorDef.fromString(\"wheat\").withTransparency(240);\r\n const materialId1 = insertRenderMaterial(\"test-material-1\", materialColor1);\r\n\r\n const builder = new GeometryStreamBuilder();\r\n const geometryParams = new GeometryParams(seedCategory);\r\n geometryParams.lineColor = ColorDef.fromString(\"peachPuff\"); // line color should be superceded by material color\r\n builder.appendGeometryParamsChange(geometryParams);\r\n const testBrepData: string = JSON.parse(\r\n fs.readFileSync(IModelTestUtils.resolveAssetFile(\"brep-face-symb.json\"), { encoding: \"utf8\" }),\r\n ).data;\r\n builder.appendBRepData({\r\n // Cube with one material attached to two faces and another material attached to other four faces\r\n data: testBrepData,\r\n faceSymbology: [\r\n { materialId: materialId0 },\r\n { materialId: materialId1 },\r\n ],\r\n });\r\n const geometricElementId = insertPhysicalElement(builder.geometryStream);\r\n\r\n const infos: ExportGraphicsInfo[] = [];\r\n const exportGraphicsOptions: ExportGraphicsOptions = {\r\n elementIdArray: [geometricElementId],\r\n onGraphics: (info: ExportGraphicsInfo) => infos.push(info),\r\n };\r\n\r\n const exportStatus = iModel.exportGraphics(exportGraphicsOptions);\r\n assert.strictEqual(exportStatus, DbResult.BE_SQLITE_OK);\r\n assert.strictEqual(infos.length, 2);\r\n // 4 faces of slab have material1, 2 faces have material0.\r\n // Triangulated, should split into info with 24 indices and info with 12 indices.\r\n assert.strictEqual(infos.length, 2);\r\n assert.strictEqual(infos[0].elementId, geometricElementId);\r\n assert.strictEqual(infos[0].mesh.indices.length, 24);\r\n assert.strictEqual(infos[0].color, materialColor1.tbgr);\r\n assert.strictEqual(infos[1].elementId, geometricElementId);\r\n assert.strictEqual(infos[1].mesh.indices.length, 12);\r\n assert.strictEqual(infos[1].color, materialColor0.tbgr);\r\n });\r\n\r\n let textureIdString: undefined | string;\r\n function getTextureId(): string {\r\n if (textureIdString !== undefined)\r\n return textureIdString;\r\n // This is an encoded png containing a 3x3 square with white in top left pixel, blue in middle pixel, and green in\r\n // bottom right pixel. The rest of the square is red.\r\n const pngData = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 3, 0, 0, 0, 3, 8, 2, 0, 0, 0, 217,\r\n 74, 34, 232, 0, 0, 0, 1, 115, 82, 71, 66, 0, 174, 206, 28, 233, 0, 0, 0, 4, 103, 65, 77, 65, 0, 0, 177, 143, 11, 252,\r\n 97, 5, 0, 0, 0, 9, 112, 72, 89, 115, 0, 0, 14, 195, 0, 0, 14, 195, 1, 199, 111, 168, 100, 0, 0, 0, 24, 73, 68, 65,\r\n 84, 24, 87, 99, 248, 15, 4, 12, 12, 64, 4, 198, 64, 46, 132, 5, 162, 254, 51, 0, 0, 195, 90, 10, 246, 127, 175, 154, 145, 0,\r\n 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130,\r\n ]);\r\n return textureIdString = Texture.insertTexture(iModel, IModel.dictionaryId, \"test-texture\", ImageSourceFormat.Png, pngData);\r\n }\r\n\r\n it(\"handles materials with textures\", () => {\r\n const textureId = getTextureId();\r\n const materialId = insertRenderMaterialWithTexture(\"test-material-2\", textureId);\r\n const elementColor = ColorDef.fromString(\"aquamarine\");\r\n\r\n const builder = new GeometryStreamBuilder();\r\n const geometryParams = new GeometryParams(seedCategory);\r\n geometryParams.materialId = materialId;\r\n geometryParams.lineColor = elementColor; // element color should still come through with no material color set\r\n builder.appendGeometryParamsChange(geometryParams);\r\n builder.appendGeometry(Sphere.createCenterRadius(Point3d.createZero(), 1));\r\n const geometricElementId = insertPhysicalElement(builder.geometryStream);\r\n\r\n const infos: ExportGraphicsInfo[] = [];\r\n const exportGraphicsOptions: ExportGraphicsOptions = {\r\n elementIdArray: [geometricElementId],\r\n onGraphics: (info: ExportGraphicsInfo) => infos.push(info),\r\n };\r\n\r\n const exportStatus = iModel.exportGraphics(exportGraphicsOptions);\r\n assert.strictEqual(exportStatus, DbResult.BE_SQLITE_OK);\r\n assert.strictEqual(infos.length, 1);\r\n assert.strictEqual(infos[0].elementId, geometricElementId);\r\n assert.strictEqual(infos[0].materialId, materialId);\r\n assert.strictEqual(infos[0].textureId, textureId);\r\n assert.strictEqual(infos[0].color, elementColor.tbgr);\r\n });\r\n\r\n it(\"creates meshes with expected parameters\", () => {\r\n const makeTriangle = (data: Float32Array, i0: number, i1: number, i2: number, dim: 2 | 3): number[] => {\r\n const tri: number[] = [];\r\n for (const i of [i0, i1, i2])\r\n for (let j = 0; j < dim; ++j)\r\n tri.push(data[dim * i + j]);\r\n return tri;\r\n };\r\n\r\n const makeFacet = (builder: PolyfaceBuilder, xyz: Float32Array, normals: Float32Array, uv: Float32Array, i0: number, i1: number, i2: number) => {\r\n builder.addFacetFromGrowableArrays(\r\n GrowableXYZArray.create(makeTriangle(xyz, i0, i1, i2, 3)),\r\n GrowableXYZArray.create(makeTriangle(normals, i0, i1, i2, 3)),\r\n GrowableXYArray.create(makeTriangle(uv, i0, i1, i2, 2)),\r\n undefined, // no colors\r\n );\r\n };\r\n\r\n const negateV = (param: number, index: number): number => {\r\n return (index % 2) ? 1 - param : param;\r\n };\r\n\r\n const unNegateV = (param: number, index: number): number => {\r\n return (index % 2) ? 2 - param : param;\r\n };\r\n\r\n /** return 2x2 array of uvParams: [vNegate][meters] given raw uv and the [1][1] entry */\r\n const mutateUV = (uvRaw: Float32Array, uvVNegatedMeters: Float32Array): Float32Array[][] => {\r\n const uvArray: Float32Array[][] = [[],[]];\r\n uvArray[1].push(Float32Array.from(uvRaw, negateV));\r\n uvArray[1].push(uvVNegatedMeters);\r\n for (let i = 0; i < 2; ++i)\r\n uvArray[0].push(Float32Array.from(uvArray[1][i], unNegateV));\r\n return uvArray;\r\n };\r\n\r\n const materials: Id64String[][] = [[\"\",\"\"], [\"\",\"\"]];\r\n const getMaterial = (vNegate: boolean, meters: boolean): Id64String => {\r\n const i = vNegate ? 1 : 0;\r\n const j = meters ? 1 : 0;\r\n if (materials[i][j] !== \"\")\r\n return materials[i][j];\r\n const matName = `test-material-${vNegate ? `vScaleMinus1` : `vScale1`}-${meters ? `meters` : `relative`}`;\r\n const matScale = vNegate ? [1, -1] : [1, 1];\r\n const matUnits = meters ? TextureMapUnits.Meters : TextureMapUnits.Relative;\r\n return materials[i][j] = insertRenderMaterialWithTexture(matName, getTextureId(), matScale, matUnits);\r\n };\r\n\r\n const triangleBuilder = PolyfaceBuilder.create();\r\n triangleBuilder.options.needParams = triangleBuilder.options.needNormals = true;\r\n const triangleIndices = new Int32Array([0, 1, 2]);\r\n const triangleXYZ = new Float32Array([1, 0, 1, 0, 0, -1, -1, 0, 1]);\r\n const triangleNormals = new Float32Array([0, 1, 0, 0, 1, 0, 0, 1, 0]);\r\n const triangleUV = new Float32Array([1, 1, 0, 0, 0, 1]);\r\n const triangleUVScaled = new Float32Array([2, 1 - Math.sqrt(5), 0, 1, 0, 1 - Math.sqrt(5)]);\r\n for (let i = 0; i < triangleIndices.length; i += 3)\r\n makeFacet(triangleBuilder, triangleXYZ, triangleNormals, triangleUV, triangleIndices[i], triangleIndices[i + 1], triangleIndices[i + 2]);\r\n const triangle = triangleBuilder.claimPolyface();\r\n const triangleParams = mutateUV(triangleUV, triangleUVScaled);\r\n\r\n const cubeBuilder = PolyfaceBuilder.create();\r\n cubeBuilder.options.needParams = cubeBuilder.options.needNormals = true;\r\n const cubeIndices = new Int32Array([0, 1, 2, 2, 1, 3, 4, 5, 6, 6, 5, 7, 8, 9, 10, 10, 9, 11, 12, 13, 14, 14, 13, 15, 16, 17, 18, 18, 17, 19, 20, 21, 22, 22, 21, 23]);\r\n const cubeXYZ = new Float32Array([-1, 1, -1, -1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, -1, 1, -1, -1, 1, -1, 1, 1, -1, 1, -1, -1, -1, 1, -1, -1, -1, 1, -1, -1, 1, -1, 1, -1, -1, -1, -1, -1, 1, 1, 1, -1, 1, 1, 1, 1, -1, -1, 1, -1, 1, -1, 1, -1, 1, 1, -1, -1, -1, -1, 1, -1, -1]);\r\n const cubeNormals = new Float32Array([0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1]);\r\n const cubeUV = new Float32Array([0.875, 0.5, 0.875, 0.25, 0.625, 0.5, 0.625, 0.25, 0.625, 0.25, 0.625, 0, 0.375, 0.25, 0.375, 0, 0.625, 1, 0.625, 0.75, 0.375, 1, 0.375, 0.75, 0.375, 0.5, 0.375, 0.25, 0.125, 0.5, 0.125, 0.25, 0.625, 0.5, 0.625, 0.25, 0.375, 0.5, 0.375, 0.25, 0.625, 0.75, 0.625, 0.5, 0.375, 0.75, 0.375, 0.5]);\r\n const cubeUVScaled = new Float32Array([5.25, -3, 5.25, -1, 3.75, -3, 3.75, -1, 3.75, -1, 3.75, 1, 2.25, -1, 2.25, 1, 3.75, -7, 3.75, -5, 2.25, -7, 2.25, -5, 2.25, -3, 2.25, -1, 0.75, -3, 0.75, -1, 3.75, -3, 3.75, -1, 2.25, -3, 2.25, -1, 3.75, -5, 3.75, -3, 2.25, -5, 2.25, -3]);\r\n for (let i = 0; i < cubeIndices.length; i += 3)\r\n makeFacet(cubeBuilder, cubeXYZ, cubeNormals, cubeUV, cubeIndices[i], cubeIndices[i + 1], cubeIndices[i + 2]);\r\n const cube = cubeBuilder.claimPolyface();\r\n const cubeParams = mutateUV(cubeUV, cubeUVScaled);\r\n\r\n const testUVParamExport = (geomId: Id64String, expectedParams: Float32Array) => {\r\n const infos: ExportGraphicsInfo[] = [];\r\n const exportGraphicsOptions: ExportGraphicsOptions = {\r\n elementIdArray: [geomId],\r\n onGraphics: (info: ExportGraphicsInfo) => infos.push(info),\r\n };\r\n const exportStatus = iModel.exportGraphics(exportGraphicsOptions);\r\n assert.strictEqual(exportStatus, DbResult.BE_SQLITE_OK);\r\n assert.strictEqual(infos.length, 1);\r\n assert.strictEqual(infos[0].mesh.params.length, expectedParams.length);\r\n assert.deepStrictEqual(infos[0].mesh.params, expectedParams, \"exported params as expected\");\r\n };\r\n\r\n const testMeshWithTexture = (geom: GeometryQuery, expectedUV: Float32Array, material: string) => {\r\n const streamBuilder = new GeometryStreamBuilder();\r\n const geometryParams = new GeometryParams(seedCategory);\r\n geometryParams.materialId = material;\r\n streamBuilder.appendGeometryParamsChange(geometryParams);\r\n streamBuilder.appendGeometry(geom);\r\n const geomId = insertPhysicalElement(streamBuilder.geometryStream);\r\n testUVParamExport(geomId, expectedUV);\r\n };\r\n\r\n const testMesh = (geom: GeometryQuery, expectedParams: Float32Array[][]) => {\r\n for (const vNegate of [false, true])\r\n for (const meters of [false, true])\r\n testMeshWithTexture(geom, expectedParams[vNegate ? 1 : 0][meters ? 1 : 0], getMaterial(vNegate, meters));\r\n };\r\n\r\n testMesh(triangle, triangleParams);\r\n testMesh(cube, cubeParams);\r\n });\r\n\r\n it(\"verifies export of 3d linestyle as parts\", () => {\r\n const resolvedBimFile = IModelTestUtils.resolveAssetFile(\"3dLinestyle.bim\");\r\n assert.isNotEmpty(resolvedBimFile);\r\n const myIModel = SnapshotDb.openFile(resolvedBimFile);\r\n\r\n const elementIdArray: Id64Array = [\"0x5a\"];\r\n const infos: ExportGraphicsInfo[] = [];\r\n const partInstanceArray: ExportPartInstanceInfo[] = [];\r\n const onGraphics: ExportGraphicsFunction = info => infos.push(info);\r\n const countPartIds = (partId: string) => partInstanceArray.reduce((sum, instance) => sum + (instance.partId === partId ? 1 : 0), 0);\r\n\r\n // exportGraphics populates partInstanceArray with any part instances found; onGraphics gets non-part meshes\r\n assert.strictEqual(DbResult.BE_SQLITE_OK, myIModel.exportGraphics({elementIdArray, onGraphics, partInstanceArray}), \"export with instancing successful\");\r\n assert.strictEqual(infos.length, 2); // TODO: infos looks like the part 0x4c transformed. Why isn't this geometry instanced and infos empty?\r\n assert.strictEqual(partInstanceArray.length, 144, \"export with instancing returned expected # part instances\");\r\n assert.strictEqual(142, countPartIds('0x4c'), \"guardrail geometry has expected # post assembly instances\");\r\n assert.strictEqual(1, countPartIds('0x4d'), \"guardrail geometry has expected # start assembly instances\");\r\n assert.strictEqual(1, countPartIds('0x4e'), \"guardrail geometry has expected # end assembly instances\");\r\n // TODO: why do parts 0x4d and 0x4e look identical?\r\n\r\n myIModel.close();\r\n });\r\n\r\n it(\"creates meshes with vertices shared as expected\", () => {\r\n const builder = new GeometryStreamBuilder();\r\n // 1, 1, 1 box\r\n const box = Box.createDgnBox(Point3d.createZero(), Vector3d.create(1, 0, 0), Vector3d.create(0, 1, 0), Point3d.create(0, 0, 1), 1, 1, 1, 1, true);\r\n assert.isDefined(box);\r\n builder.appendGeometry(box!);\r\n const newId = insertPhysicalElement(builder.geometryStream);\r\n\r\n const infos: ExportGraphicsInfo[] = [];\r\n const exportGraphicsOptions: ExportGraphicsOptions = {\r\n elementIdArray: [newId],\r\n onGraphics: (info: ExportGraphicsInfo) => infos.push(info),\r\n };\r\n\r\n // exportGraphics is expected to compress vertices to share them where point, normal and param are all equal.\r\n // So, given a triangulated box, the two vertices along the diagonal should be shared inside the face (where the normal matches)\r\n // but not across any of the neighboring perpendicular faces.\r\n // For a box, 6 faces with 4 unique vertices each made up of 3 (xyz) values means we should expect points.length === 72\r\n // Without compression, we'd expect to see points.length === 108\r\n const exportStatus = iModel.exportGraphics(exportGraphicsOptions);\r\n assert.strictEqual(exportStatus, DbResult.BE_SQLITE_OK);\r\n assert.strictEqual(infos.length, 1);\r\n const numUniqueVertices = 24;\r\n assert.strictEqual(infos[0].mesh.points.length, numUniqueVertices * 3);\r\n assert.strictEqual(infos[0].mesh.normals.length, numUniqueVertices * 3);\r\n assert.strictEqual(infos[0].mesh.params.length, numUniqueVertices * 2);\r\n });\r\n\r\n it(\"creates line graphics as expected\", () => {\r\n const elementColor = ColorDef.fromString(\"blanchedAlmond\");\r\n const builder = new GeometryStreamBuilder();\r\n const geometryParams = new GeometryParams(seedCategory);\r\n geometryParams.lineColor = elementColor;\r\n builder.appendGeometryParamsChange(geometryParams);\r\n builder.appendGeometry(LineString3d.createPoints([Point3d.createZero(), Point3d.create(1, 0, 0)]));\r\n\r\n const newId = insertPhysicalElement(builder.geometryStream);\r\n\r\n const infos: ExportGraphicsInfo[] = [];\r\n const lineInfos: ExportLinesInfo[] = [];\r\n const exportGraphicsOptions: ExportGraphicsOptions = {\r\n elementIdArray: [newId],\r\n onGraphics: (info: ExportGraphicsInfo) => infos.push(info),\r\n onLineGraphics: (lineInfo: ExportLinesInfo) => lineInfos.push(lineInfo),\r\n };\r\n\r\n const exportStatus = iModel.exportGraphics(exportGraphicsOptions);\r\n assert.strictEqual(exportStatus, DbResult.BE_SQLITE_OK);\r\n assert.strictEqual(infos.length, 0);\r\n assert.strictEqual(lineInfos.length, 1);\r\n assert.strictEqual(lineInfos[0].color, elementColor.tbgr);\r\n assert.deepStrictEqual(Array.from(lineInfos[0].lines.indices), [0, 1]);\r\n assert.deepStrictEqual(Array.from(lineInfos[0].lines.points), [0, 0, 0, 1, 0, 0]);\r\n });\r\n\r\n it(\"process multiple elements in one call\", () => {\r\n const builder0 = new GeometryStreamBuilder();\r\n builder0.appendGeometry(Loop.createPolygon([Point3d.createZero(), Point3d.create(1, 0, 0), Point3d.create(1, 1, 0), Point3d.create(0, 1, 0)]));\r\n const id0 = insertPhysicalElement(builder0.geometryStream);\r\n\r\n const builder1 = new GeometryStreamBuilder();\r\n builder1.appendGeometry(Loop.createPolygon([Point3d.createZero(), Point3d.create(-1, 0, 0), Point3d.create(-1, -1, 0), Point3d.create(0, -1, 0)]));\r\n const id1 = insertPhysicalElement(builder1.geometryStream);\r\n\r\n const infos: ExportGraphicsInfo[] = [];\r\n const exportGraphicsOptions: ExportGraphicsOptions = {\r\n elementIdArray: [id0, id1],\r\n onGraphics: (info: ExportGraphicsInfo) => infos.push(info),\r\n };\r\n\r\n const exportStatus = iModel.exportGraphics(exportGraphicsOptions);\r\n assert.strictEqual(exportStatus, DbResult.BE_SQLITE_OK);\r\n assert.strictEqual(infos.length, 2);\r\n // Sorting since output order is arbitrary\r\n assert.deepStrictEqual([infos[0].elementId, infos[1].elementId].sort(), [id0, id1].sort());\r\n });\r\n\r\n it(\"produces expected indices, points, normals, params in smoketest\", () => {\r\n const builder = new GeometryStreamBuilder();\r\n builder.appendGeometry(Loop.createPolygon([Point3d.createZero(), Point3d.create(1, 0, 0), Point3d.create(1, 1, 0), Point3d.create(0, 1, 0)]));\r\n const newId = insertPhysicalElement(builder.geometryStream);\r\n\r\n const infos: ExportGraphicsInfo[] = [];\r\n const exportGraphicsOptions: ExportGraphicsOptions = {\r\n elementIdArray: [newId],\r\n onGraphics: (info: ExportGraphicsInfo) => infos.push(info),\r\n };\r\n\r\n const exportStatus = iModel.exportGraphics(exportGraphicsOptions);\r\n assert.strictEqual(exportStatus, DbResult.BE_SQLITE_OK);\r\n assert.strictEqual(infos.length, 1);\r\n\r\n // The ordering of these values is arbitrary, but should be consistent between runs.\r\n // Baselines may need to be updated if native GeomLibs is refactored, but:\r\n // * Lengths of all fields should remain the same\r\n // * Actual point, normal and param values should remain the same\r\n assert.strictEqual(infos[0].mesh.indices.length, 6);\r\n assert.strictEqual(infos[0].mesh.points.length, 12);\r\n assert.strictEqual(infos[0].mesh.normals.length, 12);\r\n assert.strictEqual(infos[0].mesh.params.length, 8);\r\n\r\n assert.deepStrictEqual(Array.from(infos[0].mesh.indices), [0, 1, 2, 1, 0, 3]);\r\n assert.deepStrictEqual(Array.from(infos[0].mesh.points), [1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0]);\r\n assert.deepStrictEqual(Array.from(infos[0].mesh.normals), [0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1]);\r\n assert.deepStrictEqual(Array.from(infos[0].mesh.params), [1, 0, 0, 1, 0, 0, 1, 1]);\r\n });\r\n\r\n it(\"sets two-sided flag correctly for closed geometry\", () => {\r\n const builder = new GeometryStreamBuilder();\r\n const box = Box.createDgnBox(Point3d.createZero(), Vector3d.create(1, 0, 0), Vector3d.create(0, 1, 0), Point3d.create(0, 0, 1), 1, 1, 1, 1, true);\r\n assert.isDefined(box);\r\n builder.appendGeometry(box!);\r\n const newId = insertPhysicalElement(builder.geometryStream);\r\n\r\n const infos: ExportGraphicsInfo[] = [];\r\n const exportGraphicsOptions: ExportGraphicsOptions = {\r\n elementIdArray: [newId],\r\n onGraphics: (info: ExportGraphicsInfo) => infos.push(info),\r\n };\r\n\r\n const exportStatus = iModel.exportGraphics(exportGraphicsOptions);\r\n assert.strictEqual(exportStatus, DbResult.BE_SQLITE_OK);\r\n assert.strictEqual(infos.length, 1);\r\n assert.isFalse(infos[0].mesh.isTwoSided);\r\n });\r\n\r\n it(\"sets two-sided flag correctly for open geometry\", () => {\r\n const builder = new GeometryStreamBuilder();\r\n const quad = Loop.createPolygon([Point3d.createZero(), Point3d.create(2, 0, 0), Point3d.create(2, 2, 0), Point3d.create(0, 2, 0)]);\r\n builder.appendGeometry(quad);\r\n const newId = insertPhysicalElement(builder.geometryStream);\r\n\r\n const infos: ExportGraphicsInfo[] = [];\r\n const exportGraphicsOptions: ExportGraphicsOptions = {\r\n elementIdArray: [newId],\r\n onGraphics: (info: ExportGraphicsInfo) => infos.push(info),\r\n };\r\n\r\n const exportStatus = iModel.exportGraphics(exportGraphicsOptions);\r\n assert.strictEqual(exportStatus, DbResult.BE_SQLITE_OK);\r\n assert.strictEqual(infos.length, 1);\r\n assert.isTrue(infos[0].mesh.isTwoSided);\r\n });\r\n\r\n it(\"applies chordTol\", () => {\r\n const builder = new GeometryStreamBuilder();\r\n builder.appendGeometry(Sphere.createCenterRadius(Point3d.createZero(), 1));\r\n const newId = insertPhysicalElement(builder.geometryStream);\r\n\r\n const coarseInfos: ExportGraphicsInfo[] = [];\r\n iModel.exportGraphics({\r\n elementIdArray: [newId],\r\n onGraphics: (info: ExportGraphicsInfo) => coarseInfos.push(info),\r\n chordTol: 1,\r\n });\r\n\r\n const fineInfos: ExportGraphicsInfo[] = [];\r\n iModel.exportGraphics({\r\n elementIdArray: [newId],\r\n onGraphics: (info: ExportGraphicsInfo) => fineInfos.push(info),\r\n chordTol: 0.001,\r\n });\r\n\r\n assert.strictEqual(coarseInfos.length, 1);\r\n assert.strictEqual(fineInfos.length, 1);\r\n assert.isTrue(coarseInfos[0].mesh.indices.length < fineInfos[0].mesh.indices.length);\r\n });\r\n\r\n it(\"applies angleTol\", () => {\r\n const builder = new GeometryStreamBuilder();\r\n builder.appendGeometry(Sphere.createCenterRadius(Point3d.createZero(), 1));\r\n const newId = insertPhysicalElement(builder.geometryStream);\r\n\r\n const coarseInfos: ExportGraphicsInfo[] = [];\r\n iModel.exportGraphics({\r\n elementIdArray: [newId],\r\n onGraphics: (info: ExportGraphicsInfo) => coarseInfos.push(info),\r\n angleTol: 30 * Angle.radiansPerDegree,\r\n });\r\n\r\n const fineInfos: ExportGraphicsInfo[] = [];\r\n iModel.exportGraphics({\r\n elementIdArray: [newId],\r\n onGraphics: (info: ExportGraphicsInfo) => fineInfos.push(info),\r\n angleTol: 15 * Angle.radiansPerDegree,\r\n });\r\n\r\n assert.strictEqual(coarseInfos.length, 1);\r\n assert.strictEqual(fineInfos.length, 1);\r\n assert.isTrue(coarseInfos[0].mesh.indices.length < fineInfos[0].mesh.indices.length);\r\n });\r\n\r\n it(\"applies decimationTol\", () => {\r\n const strokeOptions = StrokeOptions.createForCurves();\r\n strokeOptions.chordTol = 0.001;\r\n const polyfaceBuilder = PolyfaceBuilder.create(strokeOptions);\r\n polyfaceBuilder.addSphere(Sphere.createCenterRadius(Point3d.createZero(), 1));\r\n\r\n const gsBuilder = new GeometryStreamBuilder();\r\n gsBuilder.appendGeometry(polyfaceBuilder.claimPolyface());\r\n const newId = insertPhysicalElement(gsBuilder.geometryStream);\r\n\r\n const noDecimationInfos: ExportGraphicsInfo[] = [];\r\n const noDecimationStatus = iModel.exportGraphics({\r\n elementIdArray: [newId],\r\n onGraphics: (info: ExportGraphicsInfo) => noDecimationInfos.push(info),\r\n });\r\n\r\n assert.strictEqual(noDecimationStatus, DbResult.BE_SQLITE_OK);\r\n assert.strictEqual(noDecimationInfos.length, 1);\r\n\r\n const decimationInfos: ExportGraphicsInfo[] = [];\r\n const decimationStatus = iModel.exportGraphics({\r\n elementIdArray: [newId],\r\n onGraphics: (info: ExportGraphicsInfo) => decimationInfos.push(info),\r\n decimationTol: 0.1,\r\n });\r\n\r\n assert.strictEqual(decimationStatus, DbResult.BE_SQLITE_OK);\r\n assert.strictEqual(decimationInfos.length, 1);\r\n assert.isTrue(decimationInfos[0].mesh.indices < noDecimationInfos[0].mesh.indices);\r\n });\r\n\r\n it(\"applies maxEdgeLength\", () => {\r\n const builder = new GeometryStreamBuilder();\r\n const quad = Loop.createPolygon([Point3d.createZero(), Point3d.create(2, 0, 0), Point3d.create(2, 2, 0), Point3d.create(0, 2, 0)]);\r\n builder.appendGeometry(quad);\r\n const newId = insertPhysicalElement(builder.geometryStream);\r\n\r\n const infos: ExportGraphicsInfo[] = [];\r\n const exportGraphicsOptions: ExportGraphicsOptions = {\r\n elementIdArray: [newId],\r\n onGraphics: (info: ExportGraphicsInfo) => infos.push(info),\r\n maxEdgeLength: 1,\r\n };\r\n\r\n const exportStatus = iModel.exportGraphics(exportGraphicsOptions);\r\n assert.strictEqual(exportStatus, DbResult.BE_SQLITE_OK);\r\n assert.strictEqual(infos.length, 1);\r\n assert.isTrue(infos[0].mesh.indices.length > 6); // not validating particulars of subdivision, just that the option is applied\r\n });\r\n\r\n it(\"applies minBRepFeatureSize\", () => {\r\n const builder = new GeometryStreamBuilder();\r\n // 4x4x4m slab with a ~1x1x1cm slab cut out of it.\r\n const testBrep: { data: string } = JSON.parse(\r\n fs.readFileSync(IModelTestUtils.resolveAssetFile(\"brep-small-feature.json\"), { encoding: \"utf8\" }),\r\n );\r\n builder.appendBRepData(testBrep);\r\n const newId = insertPhysicalElement(builder.geometryStream);\r\n\r\n const noMinSizeInfos: ExportGraphicsInfo[] = [];\r\n const noMinSizeStatus = iModel.exportGraphics({\r\n elementIdArray: [newId],\r\n onGraphics: (info: ExportGraphicsInfo) => noMinSizeInfos.push(info),\r\n });\r\n assert.strictEqual(noMinSizeStatus, DbResult.BE_SQLITE_OK);\r\n assert.strictEqual(noMinSizeInfos.length, 1);\r\n\r\n const minSizeInfos: ExportGraphicsInfo[] = [];\r\n const minSizeStatus = iModel.exportGraphics({\r\n elementIdArray: [newId],\r\n onGraphics: (info: ExportGraphicsInfo) => minSizeInfos.push(info),\r\n minBRepFeatureSize: 0.1,\r\n });\r\n assert.strictEqual(minSizeStatus, DbResult.BE_SQLITE_OK);\r\n assert.strictEqual(minSizeInfos.length, 1);\r\n\r\n assert.strictEqual(minSizeInfos[0].mesh.indices.length, 36); // should be a simple cube\r\n assert.isTrue(minSizeInfos[0].mesh.indices.length < noMinSizeInfos[0].mesh.indices.length);\r\n });\r\n\r\n it(\"applies minLineStyleComponentSize\", () => {\r\n const partBuilder = new GeometryStreamBuilder();\r\n const partParams = new GeometryParams(Id64.invalid); // category won't be used\r\n\r\n // Create line style with small component - logic copied from line style tests in GeometryStream.test.ts\r\n partParams.fillDisplay = FillDisplay.Always;\r\n partBuilder.appendGeometryParamsChange(partParams);\r\n partBuilder.appendGeometry(Loop.create(LineString3d.create(Point3d.create(0.1, 0, 0), Point3d.create(0, -0.05, 0), Point3d.create(0, 0.05, 0), Point3d.create(0.1, 0, 0))));\r\n const partProps: GeometryPartProps = {\r\n classFullName: GeometryPart.classFullName,\r\n model: IModel.dictionaryId,\r\n code: Code.createEmpty(),\r\n geom: partBuilder.geometryStream,\r\n };\r\n const geomPartId = iModel.elements.insertElement(partProps);\r\n\r\n const pointSymbolData = LineStyleDefinition.Utils.createPointSymbolComponent(iModel, { geomPartId }); // base and size will be set automatically...\r\n assert.isTrue(undefined !== pointSymbolData);\r\n\r\n const strokePointData = LineStyleDefinition.Utils.createStrokePointComponent(iModel, { descr: \"TestArrowHead\", lcId: 0, lcType: LineStyleDefinition.ComponentType.Internal, symbols: [{ symId: pointSymbolData!.compId, strokeNum: -1, mod1: LineStyleDefinition.SymbolOptions.CurveEnd }] });\r\n assert.isTrue(undefined !== strokePointData);\r\n\r\n const compoundData = LineStyleDefinition.Utils.createCompoundComponent(iModel, { comps: [{ id: strokePointData.compId, type: strokePointData.compType }, { id: 0, type: LineStyleDefinition.ComponentType.Internal }] });\r\n assert.isTrue(undefined !== compoundData);\r\n\r\n const styleId = LineStyleDefinition.Utils.createStyle(iModel, IModel.dictionaryId, \"TestArrowStyle\", compoundData);\r\n assert.isTrue(Id64.isValidId64(styleId));\r\n\r\n const builder = new GeometryStreamBuilder();\r\n const geometryParams = new GeometryParams(seedCategory);\r\n geometryParams.styleInfo = new LineStyle.Info(styleId);\r\n builder.appendGeometryParamsChange(geometryParams);\r\n builder.appendGeometry(LineSegment3d.create(Point3d.createZero(), Point3d.create(10, 10, 0)));\r\n const elementId = insertPhysicalElement(builder.geometryStream);\r\n\r\n // Should include everything with no minimum component size\r\n const noMinInfos: ExportGraphicsInfo[] = [];\r\n const noMinLineInfos: ExportLinesInfo[] = [];\r\n let exportStatus = iModel.exportGraphics({\r\n elementIdArray: [elementId],\r\n onGraphics: (info: ExportGraphicsInfo) => noMinInfos.push(info),\r\n onLineGraphics: (lineInfo: ExportLinesInfo) => noMinLineInfos.push(lineInfo),\r\n });\r\n assert.strictEqual(exportStatus, DbResult.BE_SQLITE_OK);\r\n assert.strictEqual(noMinInfos.length, 1);\r\n assert.strictEqual(noMinLineInfos.length, 1);\r\n assert.strictEqual(noMinInfos[0].mesh.indices.length, 3);\r\n assert.strictEqual(noMinLineInfos[0].lines.indices.length, 2);\r\n\r\n // Should filter out arrow shape with large minimum component size\r\n const largeMinInfos: ExportGraphicsInfo[] = [];\r\n const largeMinLineInfos: ExportLinesInfo[] = [];\r\n exportStatus = iModel.exportGraphics({\r\n elementIdArray: [elementId],\r\n onGraphics: (info: ExportGraphicsInfo) => largeMinInfos.push(info),\r\n onLineGraphics: (lineInfo: ExportLinesInfo) => largeMinLineInfos.push(lineInfo),\r\n minLineStyleComponentSize: 0.5,\r\n });\r\n assert.strictEqual(exportStatus, DbResult.BE_SQLITE_OK);\r\n assert.strictEqual(largeMinInfos.length, 0);\r\n assert.strictEqual(largeMinLineInfos.length, 1);\r\n assert.strictEqual(largeMinLineInfos[0].lines.indices.length, 2);\r\n\r\n // Should include arrow shape with small minimum component size\r\n const smallMinInfos: ExportGraphicsInfo[] = [];\r\n const smallMinLineInfos: ExportLinesInfo[] = [];\r\n exportStatus = iModel.exportGraphics({\r\n elementIdArray: [elementId],\r\n onGraphics: (info: ExportGraphicsInfo) => smallMinInfos.push(info),\r\n onLineGraphics: (lineInfo: ExportLinesInfo) => smallMinLineInfos.push(lineInfo),\r\n minLineStyleComponentSize: 0.01,\r\n });\r\n assert.strictEqual(exportStatus, DbResult.BE_SQLITE_OK);\r\n assert.strictEqual(smallMinInfos.length, 1);\r\n assert.strictEqual(smallMinLineInfos.length, 1);\r\n assert.strictEqual(smallMinInfos[0].mesh.indices.length, 3);\r\n assert.strictEqual(smallMinLineInfos[0].lines.indices.length, 2);\r\n });\r\n\r\n it(\"applies GeometryPart transforms as expected\", () => {\r\n const partBuilder = new GeometryStreamBuilder();\r\n partBuilder.appendGeometry(Loop.createPolygon([Point3d.createZero(), Point3d.create(1, 0, 0), Point3d.create(1, 1, 0), Point3d.create(0, 1, 0)]));\r\n const partProps: GeometryPartProps = {\r\n classFullName: GeometryPart.classFullName,\r\n model: IModel.dictionaryId,\r\n code: Code.createEmpty(),\r\n geom: partBuilder.geometryStream,\r\n };\r\n const partId = iModel.elements.insertElement(partProps);\r\n\r\n const partInstanceBuilder = new GeometryStreamBuilder();\r\n partInstanceBuilder.appendGeometryPart3d(partId, Point3d.create(7, 8, 9));\r\n const partInstanceId = insertPhysicalElement(partInstanceBuilder.geometryStream);\r\n\r\n const infos: ExportGraphicsInfo[] = [];\r\n const exportGraphicsOptions: ExportGraphicsOptions = {\r\n elementIdArray: [partInstanceId],\r\n onGraphics: (info: ExportGraphicsInfo) => infos.push(info),\r\n };\r\n\r\n const exportStatus = iModel.exportGraphics(exportGraphicsOptions);\r\n assert.strictEqual(exportStatus, DbResult.BE_SQLITE_OK);\r\n assert.strictEqual(infos.length, 1);\r\n\r\n // The ordering of these values is arbitrary, but should be consistent between runs.\r\n // Baselines may need to be updated if native GeomLibs is refactored, but:\r\n // * Lengths of all fields should remain the same\r\n // * Actual point, normal and param values should remain the same\r\n assert.strictEqual(infos[0].mesh.indices.length, 6);\r\n assert.strictEqual(infos[0].mesh.points.length, 12);\r\n assert.strictEqual(infos[0].mesh.normals.length, 12);\r\n assert.strictEqual(infos[0].mesh.params.length, 8);\r\n\r\n assert.deepStrictEqual(Array.from(infos[0].mesh.indices), [0, 1, 2, 1, 0, 3]);\r\n assert.deepStrictEqual(Array.from(infos[0].mesh.points), [8, 8, 9, 7, 9, 9, 7, 8, 9, 8, 9, 9]);\r\n assert.deepStrictEqual(Array.from(infos[0].mesh.normals), [0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1]);\r\n assert.deepStrictEqual(Array.from(infos[0].mesh.params), [1, 0, 0, 1, 0, 0, 1, 1]);\r\n });\r\n\r\n it(\"exposes instances through partInstanceArray and exportPartGraphics\", () => {\r\n const partBuilder = new GeometryStreamBuilder();\r\n partBuilder.appendGeometry(Loop.createPolygon([Point3d.createZero(), Point3d.create(1, 0, 0), Point3d.create(1, 1, 0), Point3d.create(0, 1, 0)]));\r\n const partProps: GeometryPartProps = {\r\n classFullName: GeometryPart.classFullName,\r\n model: IModel.dictionaryId,\r\n code: Code.createEmpty(),\r\n geom: partBuilder.geometryStream,\r\n };\r\n const partId = iModel.elements.insertElement(partProps);\r\n\r\n const partInstanceBuilder = new GeometryStreamBuilder();\r\n partInstanceBuilder.appendGeometryPart3d(partId, Point3d.create(7, 8, 9));\r\n const partInstanceId = insertPhysicalElement(partInstanceBuilder.geometryStream);\r\n\r\n const infos: ExportGraphicsInfo[] = [];\r\n const partInstanceArray: ExportPartInstanceInfo[] = [];\r\n const exportGraphicsOptions: ExportGraphicsOptions = {\r\n elementIdArray: [partInstanceId],\r\n onGraphics: (info: ExportGraphicsInfo) => infos.push(info),\r\n partInstanceArray,\r\n };\r\n\r\n const exportStatus = iModel.exportGraphics(exportGraphicsOptions);\r\n assert.strictEqual(exportStatus, DbResult.BE_SQLITE_OK);\r\n assert.strictEqual(infos.length, 0);\r\n assert.strictEqual(partInstanceArray.length, 1);\r\n\r\n assert.strictEqual(partInstanceArray[0].partId, partId);\r\n assert.strictEqual(partInstanceArray[0].partInstanceId, partInstanceId);\r\n assert.isDefined(partInstanceArray[0].transform);\r\n assert.deepStrictEqual(Array.from(partInstanceArray[0].transform!), [1, 0, 0, 7, 0, 1, 0, 8, 0, 0, 1, 9]);\r\n\r\n const partInfos: ExportPartInfo[] = [];\r\n const exportPartStatus = iModel.exportPartGraphics({\r\n elementId: partInstanceArray[0].partId,\r\n displayProps: partInstanceArray[0].displayProps,\r\n onPartGraphics: (partInfo) => partInfos.push(partInfo),\r\n });\r\n\r\n assert.strictEqual(exportPartStatus, DbResult.BE_SQLITE_OK);\r\n assert.strictEqual(partInfos.length, 1);\r\n\r\n // The ordering of these values is arbitrary, but should be consistent between runs.\r\n // Baselines may need to be updated if native GeomLibs is refactored, but:\r\n // * Lengths of all fields should remain the same\r\n // * Actual point, normal and param values should remain the same\r\n assert.strictEqual(partInfos[0].mesh.indices.length, 6);\r\n assert.strictEqual(partInfos[0].mesh.points.length, 12);\r\n assert.strictEqual(partInfos[0].mesh.normals.length, 12);\r\n assert.strictEqual(partInfos[0].mesh.params.length, 8);\r\n\r\n assert.deepStrictEqual(Array.from(partInfos[0].mesh.indices), [0, 1, 2, 1, 0, 3]);\r\n assert.deepStrictEqual(Array.from(partInfos[0].mesh.points), [1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0]);\r\n assert.deepStrictEqual(Array.from(partInfos[0].mesh.normals), [0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1]);\r\n assert.deepStrictEqual(Array.from(partInfos[0].mesh.params), [1, 0, 0, 1, 0, 0, 1, 1]);\r\n });\r\n\r\n it(\"handles single geometryClass in GeometryStream\", () => {\r\n const builder = new GeometryStreamBuilder();\r\n const geometryParams = new GeometryParams(seedCategory);\r\n geometryParams.geometryClass = GeometryClass.Construction;\r\n builder.appendGeometryParamsChange(geometryParams);\r\n builder.appendGeometry(Sphere.createCenterRadius(Point3d.createZero(), 1));\r\n const newId = insertPhysicalElement(builder.geometryStream);\r\n\r\n const infos: ExportGraphicsInfo[] = [];\r\n const exportGraphicsOptions: ExportGraphicsOptions = {\r\n elementIdArray: [newId],\r\n onGraphics: (info: ExportGraphicsInfo) => infos.push(info),\r\n };\r\n\r\n const exportStatus = iModel.exportGraphics(exportGraphicsOptions);\r\n assert.strictEqual(exportStatus, DbResult.BE_SQLITE_OK);\r\n assert.strictEqual(infos.length, 1);\r\n assert.strictEqual(infos[0].geometryClass, GeometryClass.Construction);\r\n });\r\n\r\n it(\"handles multiple geometryClass in GeometryStream\", () => {\r\n const builder = new GeometryStreamBuilder();\r\n const geometryParams = new GeometryParams(seedCategory);\r\n\r\n geometryParams.geometryClass = GeometryClass.Construction;\r\n builder.appendGeometryParamsChange(geometryParams);\r\n builder.appendGeometry(Sphere.createCenterRadius(Point3d.createZero(), 1));\r\n\r\n geometryParams.geometryClass = GeometryClass.Primary;\r\n builder.appendGeometryParamsChange(geometryParams);\r\n builder.appendGeometry(Box.createRange(Range3d.create(Point3d.createZero(), Point3d.create(1.0, 1.0, 1.0)), true)!);\r\n\r\n const newId = insertPhysicalElement(builder.geometryStream);\r\n\r\n const infos: ExportGraphicsInfo[] = [];\r\n const exportGraphicsOptions: ExportGraphicsOptions = {\r\n elementIdArray: [newId],\r\n onGraphics: (info: ExportGraphicsInfo) => infos.push(info),\r\n chordTol: 0.01,\r\n };\r\n\r\n const exportStatus = iModel.exportGraphics(exportGraphicsOptions);\r\n assert.strictEqual(exportStatus, DbResult.BE_SQLITE_OK);\r\n assert.strictEqual(infos.length, 2);\r\n\r\n // Sphere is construction, box is primary. Output order is arbitrary, use mesh size to figure out which is which.\r\n if (infos[0].mesh.indices.length > 36) {\r\n assert.strictEqual(infos[0].geometryClass, GeometryClass.Construction);\r\n assert.strictEqual(infos[1].geometryClass, GeometryClass.Primary);\r\n } else {\r\n assert.strictEqual(infos[0].geometryClass, GeometryClass.Primary);\r\n assert.strictEqual(infos[1].geometryClass, GeometryClass.Construction);\r\n }\r\n });\r\n\r\n it(\"handles geometryClass in lines\", () => {\r\n const builder = new GeometryStreamBuilder();\r\n const geometryParams = new GeometryParams(seedCategory);\r\n\r\n geometryParams.geometryClass = GeometryClass.Construction;\r\n builder.appendGeometryParamsChange(geometryParams);\r\n builder.appendGeometry(LineString3d.createPoints([Point3d.createZero(), Point3d.create(1, 0, 0)]));\r\n\r\n const newId = insertPhysicalElement(builder.geometryStream);\r\n\r\n const infos: ExportGraphicsInfo[] = [];\r\n const lineInfos: ExportLinesInfo[] = [];\r\n const exportGraphicsOptions: ExportGraphicsOptions = {\r\n elementIdArray: [newId],\r\n onGraphics: (info: ExportGraphicsInfo) => infos.push(info),\r\n onLineGraphics: (lineInfo: ExportLinesInfo) => lineInfos.push(lineInfo),\r\n chordTol: 0.01,\r\n };\r\n\r\n const exportStatus = iModel.exportGraphics(exportGraphicsOptions);\r\n assert.strictEqual(exportStatus, DbResult.BE_SQLITE_OK);\r\n assert.strictEqual(infos.length, 0);\r\n assert.strictEqual(lineInfos.length, 1);\r\n assert.strictEqual(lineInfos[0].geometryClass, GeometryClass.Construction);\r\n });\r\n\r\n it(\"handles geometryClass defined in parts\", () => {\r\n const partBuilder = new GeometryStreamBuilder();\r\n const partGeometryParams = new GeometryParams(Id64.invalid); // category unused for GeometryPart\r\n partGeometryParams.geometryClass = GeometryClass.Construction;\r\n partBuilder.appendGeometryParamsChange(partGeometryParams);\r\n partBuilder.appendGeometry(Sphere.createCenterRadius(Point3d.createZero(), 1));\r\n\r\n const partProps: GeometryPartProps = {\r\n classFullName: GeometryPart.classFullName,\r\n model: IModel.dictionaryId,\r\n code: Code.createEmpty(),\r\n geom: partBuilder.geometryStream,\r\n };\r\n const partId = iModel.elements.insertElement(partProps);\r\n\r\n const partInstanceBuilder = new GeometryStreamBuilder();\r\n partInstanceBuilder.appendGeometryPart3d(partId);\r\n const partInstanceId = insertPhysicalElement(partInstanceBuilder.geometryStream);\r\n\r\n const infos: ExportGraphicsInfo[] = [];\r\n const partInstanceArray: ExportPartInstanceInfo[] = [];\r\n const exportGraphicsOptions: ExportGraphicsOptions = {\r\n elementIdArray: [partInstanceId],\r\n onGraphics: (info: ExportGraphicsInfo) => infos.push(info),\r\n partInstanceArray,\r\n };\r\n\r\n const exportStatus = iModel.exportGraphics(exportGraphicsOptions);\r\n assert.strictEqual(exportStatus, DbResult.BE_SQLITE_OK);\r\n assert.strictEqual(infos.length, 0);\r\n assert.strictEqual(partInstanceArray.length, 1);\r\n\r\n const partInfos: ExportPartInfo[] = [];\r\n const exportPartStatus = iModel.exportPartGraphics({\r\n elementId: partInstanceArray[0].partId,\r\n displayProps: partInstanceArray[0].displayProps,\r\n onPartGraphics: (info: ExportPartInfo) => partInfos.push(info),\r\n });\r\n assert.strictEqual(exportPartStatus, DbResult.BE_SQLITE_OK);\r\n assert.strictEqual(partInfos.length, 1);\r\n assert.strictEqual(partInfos[0].geometryClass, GeometryClass.Construction);\r\n });\r\n\r\n it(\"handles geometryClass defined outside parts\", () => {\r\n const partBuilder = new GeometryStreamBuilder();\r\n partBuilder.appendGeometry(Sphere.createCenterRadius(Point3d.createZero(), 1));\r\n const partProps: GeometryPartProps = {\r\n classFullName: GeometryPart.classFullName,\r\n model: IModel.dictionaryId,\r\n code: Code.createEmpty(),\r\n geom: partBuilder.geometryStream,\r\n };\r\n const partId = iModel.elements.insertElement(partProps);\r\n\r\n const partInstanceBuilder = new GeometryStreamBuilder();\r\n const partInstanceGeometryParams = new GeometryParams(seedCategory);\r\n partInstanceGeometryParams.geometryClass = GeometryClass.Construction;\r\n partInstanceBuilder.appendGeometryParamsChange(partInstanceGeometryParams);\r\n partInstanceBuilder.appendGeometryPart3d(partId);\r\n const partInstanceId = insertPhysicalElement(partInstanceBuilder.geometryStream);\r\n\r\n const infos: ExportGraphicsInfo[] = [];\r\n const partInstanceArray: ExportPartInstanceInfo[] = [];\r\n const exportGraphicsOptions: ExportGraphicsOptions = {\r\n elementIdArray: [partInstanceId],\r\n onGraphics: (info: ExportGraphicsInfo) => infos.push(info),\r\n partInstanceArray,\r\n };\r\n\r\n const exportStatus = iModel.exportGraphics(exportGraphicsOptions);\r\n assert.strictEqual(exportStatus, DbResult.BE_SQLITE_OK);\r\n assert.strictEqual(infos.length, 0);\r\n assert.strictEqual(partInstanceArray.length, 1);\r\n assert.strictEqual(partInstanceArray[0].displayProps.geometryClass, GeometryClass.Construction);\r\n\r\n const partInfos: ExportPartInfo[] = [];\r\n const exportPartStatus = iModel.exportPartGraphics({\r\n elementId: partInstanceArray[0].partId,\r\n displayProps: partInstanceArray[0].displayProps,\r\n onPartGraphics: (info: ExportPartInfo) => partInfos.push(info),\r\n });\r\n assert.strictEqual(exportPartStatus, DbResult.BE_SQLITE_OK);\r\n assert.strictEqual(partInfos.length, 1);\r\n assert.strictEqual(partInfos[0].geometryClass, GeometryClass.Construction);\r\n });\r\n\r\n it(\"handles geometryClass for lines in parts\", () => {\r\n const partBuilder = new GeometryStreamBuilder();\r\n const partGeometryParams = new GeometryParams(Id64.invalid); // category unused for GeometryPart\r\n partGeometryParams.geometryClass = GeometryClass.Construction;\r\n partBuilder.appendGeometryParamsChange(partGeometryParams);\r\n partBuilder.appendGeometry(LineString3d.createPoints([Point3d.createZero(), Point3d.create(1, 0, 0)]));\r\n\r\n const partProps: GeometryPartProps = {\r\n classFullName: GeometryPart.classFullName,\r\n model: IModel.dictionaryId,\r\n code: Code.createEmpty(),\r\n geom: partBuilder.geometryStream,\r\n };\r\n const partId = iModel.elements.insertElement(partProps);\r\n\r\n const partInstanceBuilder = new GeometryStreamBuilder();\r\n partInstanceBuilder.appendGeometryPart3d(partId);\r\n const partInstanceId = insertPhysicalElement(partInstanceBuilder.geometryStream);\r\n\r\n const infos: ExportGraphicsInfo[] = [];\r\n const partInstanceArray: ExportPartInstanceInfo[] = [];\r\n const exportGraphicsOptions: ExportGraphicsOptions = {\r\n elementIdArray: [partInstanceId],\r\n onGraphics: (info: ExportGraphicsInfo) => infos.push(info),\r\n partInstanceArray,\r\n };\r\n\r\n const exportStatus = iModel.exportGraphics(exportGraphicsOptions);\r\n assert.strictEqual(exportStatus, DbResult.BE_SQLITE_OK);\r\n assert.strictEqual(infos.length, 0);\r\n assert.strictEqual(partInstanceArray.length, 1);\r\n\r\n const partInfos: ExportPartInfo[] = [];\r\n const partLineInfos: ExportPartLinesInfo[] = [];\r\n const exportPartStatus = iModel.exportPartGraphics({\r\n elementId: partInstanceArray[0].partId,\r\n displayProps: partInstanceArray[0].displayProps,\r\n onPartGraphics: (info: ExportPartInfo) => partInfos.push(info),\r\n onPartLineGraphics: (info: ExportPartLinesInfo) => partLineInfos.push(info),\r\n });\r\n assert.strictEqual(exportPartStatus, DbResult.BE_SQLITE_OK);\r\n assert.strictEqual(partInfos.length, 0);\r\n assert.strictEqual(partLineInfos.length, 1);\r\n assert.strictEqual(partLineInfos[0].geometryClass, GeometryClass.Construction);\r\n });\r\n\r\n it(\"converts to IndexedPolyface\", () => {\r\n const box = Box.createRange(Range3d.create(Point3d.createZero(), Point3d.create(1.0, 1.0, 1.0)), true);\r\n assert.isFalse(undefined === box);\r\n\r\n const builder = new GeometryStreamBuilder();\r\n builder.appendGeometry(box!);\r\n\r\n const newId = insertPhysicalElement(builder.geometryStream);\r\n\r\n const infos: ExportGraphicsInfo[] = [];\r\n const onGraphics = (info: ExportGraphicsInfo) => {\r\n infos.push(info);\r\n };\r\n const exportGraphicsOptions: ExportGraphicsOptions = {\r\n elementIdArray: [newId],\r\n onGraphics,\r\n };\r\n\r\n const exportStatus = iModel.exportGraphics(exportGraphicsOptions);\r\n assert.strictEqual(exportStatus, DbResult.BE_SQLITE_OK);\r\n assert.strictEqual(infos.length, 1);\r\n assert.strictEqual(infos[0].color, ColorDef.white.tbgr);\r\n assert.strictEqual(infos[0].mesh.indices.length, 36);\r\n assert.strictEqual(infos[0].elementId, newId);\r\n assert.strictEqual(infos[0].geometryClass, GeometryClass.Primary);\r\n const polyface = ExportGraphics.convertToIndexedPolyface(infos[0].mesh);\r\n assert.strictEqual(polyface.facetCount, 12);\r\n assert.strictEqual(polyface.data.pointCount, 24);\r\n assert.strictEqual(polyface.data.normalCount, 24);\r\n assert.strictEqual(polyface.data.paramCount, 24);\r\n });\r\n\r\n //\r\n //\r\n // 2---3 6\r\n // | \\ | | \\\r\n // 0---1 4---5\r\n //\r\n it(\"ExportMeshGraphicsVisitor\", () => {\r\n const numPoints = 7;\r\n const numFacets = 3;\r\n const pointData = [0, 0, 0, 1, 0, 0, 0, 2, 0, 1, 2, 0, 2, 0, 0, 4, 0, 0, 3, 2, 0];\r\n const paramData = [0, 0, 1, 0, 0, 2, 1, 2, 2, 0, 4, 0, 3, 2];\r\n const normalData = new Float32Array(pointData.length);\r\n const a0 = 2.0;\r\n const a1 = 3.0;\r\n const b0 = -2.0;\r\n const b1 = 5.0;\r\n // make normals functionally related to point coordinates . . . not good normals, but good for tests\r\n let paramCursor = 0;\r\n for (let i = 0; i < pointData.length; i++) {\r\n normalData[i] = a1 * pointData[i] + a0;\r\n if ((i + 1) % 3 !== 0)\r\n paramData[paramCursor++] = b0 + b1 * pointData[i];\r\n }\r\n const smallMesh = {\r\n points: new Float64Array(pointData),\r\n params: new Float32Array(paramData),\r\n // normals have one-based index as z ..\r\n normals: new Float32Array(normalData),\r\n indices: new Int32Array([0, 1, 2, 2, 1, 3, 4, 5, 6]),\r\n isTwoSided: true,\r\n };\r\n const knownArea = 4.0;\r\n assert.isTrue(smallMesh.points.length === 3 * numPoints);\r\n assert.isTrue(smallMesh.normals.length === 3 * numPoints);\r\n assert.isTrue(smallMesh.params.length === 2 * numPoints);\r\n assert.isTrue(smallMesh.indices.length === 3 * numFacets);\r\n const visitor = ExportGraphicsMeshVisitor.create(smallMesh, 0);\r\n assert.isDefined(visitor.paramIndex, \"paramIndex defined\");\r\n assert.isDefined(visitor.paramIndex, \"paramIndex defined\");\r\n let numFacetsA = 0;\r\n let indexCursor = 0;\r\n let areaSum = 0.0;\r\n while (visitor.moveToNextFacet()) {\r\n numFacetsA++;\r\n assert.isTrue(visitor.point.length === 3);\r\n assert.isTrue(smallMesh.indices[indexCursor] === visitor.pointIndex[0]);\r\n assert.isTrue(smallMesh.indices[indexCursor + 1] === visitor.pointIndex[1]);\r\n assert.isTrue(smallMesh.indices[indexCursor + 2] === visitor.pointIndex[2]);\r\n const areaVector = visitor.point.crossProductIndexIndexIndex(0, 1, 2)!;\r\n areaSum += areaVector.magnitude() * 0.5;\r\n assert.isTrue(smallMesh.indices[indexCursor] === visitor.paramIndex![0]);\r\n assert.isTrue(smallMesh.indices[indexCursor + 1] === visitor.paramIndex![1]);\r\n assert.isTrue(smallMesh.indices[indexCursor + 2] === visitor.paramIndex![2]);\r\n assert.isTrue(smallMesh.indices[indexCursor] === visitor.normalIndex![0]);\r\n assert.isTrue(smallMesh.indices[indexCursor + 1] === visitor.normalIndex![1]);\r\n assert.isTrue(smallMesh.indices[indexCursor + 2] === visitor.normalIndex![2]);\r\n for (let k = 0; k < 3; k++) {\r\n const point = visitor.point.getPoint3dAtUncheckedPointIndex(k);\r\n const normal = visitor.normal!.getPoint3dAtUncheckedPointIndex(k);\r\n const param = visitor.param!.getPoint2dAtUncheckedPointIndex(k);\r\n for (let j = 0; j < 3; j++) {\r\n assert.isTrue(a0 + a1 * point.at(j) === normal.at(j));\r\n }\r\n for (let j = 0; j < 2; j++) {\r\n assert.isTrue(b0 + b1 * point.at(j) === (j === 0 ? param.x : param.y));\r\n }\r\n }\r\n indexCursor += 3;\r\n }\r\n assert.isTrue(Math.abs(knownArea - areaSum) < 1.0e-13);\r\n assert.isTrue(numFacetsA === numFacets, \"facet count\");\r\n });\r\n\r\n it(\"creates output for mesh without zero blocking\", () => {\r\n const meshWithoutBlocking: GeometryStreamProps = JSON.parse(`[{\r\n \"indexedMesh\": {\r\n \"numPerFace\": 3,\r\n \"expectedClosure\": 0,\r\n \"point\": [\r\n [0, 0, 0],\r\n [1, 0, 0],\r\n [1, 1, 0],\r\n [0, 1, 0]\r\n ],\r\n \"pointIndex\": [1, 2, 3, 1, 3, 4],\r\n \"normal\": [[0, 0, 1]],\r\n \"normalIndex\": [1, 1, 1, 1, 1, 1]\r\n }\r\n }]`);\r\n const newId = insertPhysicalElement(meshWithoutBlocking);\r\n\r\n const infos: ExportGraphicsInfo[] = [];\r\n const exportGraphicsOptions: ExportGraphicsOptions = {\r\n elementIdArray: [newId],\r\n onGraphics: (info: ExportGraphicsInfo) => infos.push(info),\r\n };\r\n\r\n const exportStatus = iModel.exportGraphics(exportGraphicsOptions);\r\n assert.strictEqual(exportStatus, DbResult.BE_SQLITE_OK);\r\n assert.strictEqual(infos.length, 1);\r\n assert.strictEqual(infos[0].elementId, newId);\r\n assert.strictEqual(infos[0].mesh.indices.length, 6);\r\n });\r\n\r\n it(\"verifies subset visitor\", () => {\r\n const options = StrokeOptions.createForFacets();\r\n options.needNormals = options.needParams = options.shouldTriangulate = true;\r\n const builder = PolyfaceBuilder.create(options);\r\n builder.addSphere(Sphere.createCenterRadius(Point3d.createZero(), 1), 5);\r\n const polyface = builder.claimPolyface();\r\n assert.isDefined(polyface.data.param);\r\n assert.isDefined(polyface.data.paramIndex);\r\n assert.strictEqual(polyface.data.paramIndex!.length, polyface.data.pointIndex.length);\r\n assert.isDefined(polyface.data.normal);\r\n assert.isDefined(polyface.data.normalIndex);\r\n assert.strictEqual(polyface.data.normalIndex!.length, polyface.data.pointIndex.length);\r\n // compress by-sector uv/normals to by-vertex; last datum wins\r\n const paramData = Array<number>(2 * polyface.data.point.length);\r\n const normalData = Array<number>(3 * polyface.data.point.length);\r\n for (let i = 0; i < polyface.data.pointIndex.length; i++) {\r\n const pointIndex = polyface.data.pointIndex[i];\r\n const param = polyface.data.getParam(polyface.data.paramIndex![i]);\r\n if (param) {\r\n paramData[2 * pointIndex] = param.x;\r\n paramData[2 * pointIndex + 1] = param.y;\r\n }\r\n const normal = polyface.data.getNormal(polyface.data.normalIndex![i]);\r\n if (normal) {\r\n normalData[3 * pointIndex] = normal.x;\r\n normalData[3 * pointIndex + 1] = normal.y;\r\n normalData[3 * pointIndex + 2] = normal.z;\r\n }\r\n }\r\n const mesh: ExportGraphicsMesh = {\r\n points: polyface.data.point.float64Data(),\r\n params: new Float32Array(paramData),\r\n normals: new Float32Array(normalData),\r\n indices: new Int32Array(polyface.data.pointIndex),\r\n isTwoSided: false,\r\n };\r\n const visitor = ExportGraphicsMeshVisitor.create(mesh);\r\n const numFacets = polyface.facetCount;\r\n const numSubset = Math.floor(numFacets / 2);\r\n const subset = Array<number>(numSubset).fill(0).map((_v: number, i: number) => Math.floor(numFacets * Math.log2(1 + i / numSubset)));\r\n const subVisitor = visitor.createSubsetVisitor(subset);\r\n while (subVisitor.moveToNextFacet()) {\r\n const facetIndex = subVisitor.parentFacetIndex();\r\n assert.isDefined(facetIndex);\r\n const result = visitor.moveToReadIndex(facetIndex!);\r\n assert.isTrue(result);\r\n assert.isTrue(NumberArray.isAlmostEqual(subVisitor.pointIndex, visitor.pointIndex, Geometry.smallFloatingPoint));\r\n assert.isTrue(Point3dArray.isAlmostEqual(subVisitor.point.float64Data(), visitor.point.float64Data(), Geometry.smallFloatingPoint));\r\n assert.isTrue(Point2dArray.isAlmostEqual(subVisitor.param?.getPoint2dArray(), visitor.param?.getPoint2dArray(), Geometry.smallFloatingPoint));\r\n assert.isTrue(Vector3dArray.isAlmostEqual(subVisitor.normal?.float64Data(), visitor.normal?.float64Data(), Geometry.smallFloatingPoint));\r\n }\r\n });\r\n});\r\n"]}
|
|
1
|
+
{"version":3,"file":"ExportGraphics.test.js","sourceRoot":"","sources":["../../../../src/test/standalone/ExportGraphics.test.ts"],"names":[],"mappings":"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,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG;YACtI,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG;YACpH,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;YACjH,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;YAC3H,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,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AC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/R,MAAM,WAAW,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3Q,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;QACtU,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACtR,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC;YAC5C,SAAS,CAAC,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC/G,MAAM,IAAI,GAAG,WAAW,CAAC,aAAa,EAAE,CAAC;QACzC,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QAElD,MAAM,iBAAiB,GAAG,CAAC,MAAkB,EAAE,cAA4B,EAAE,EAAE;YAC7E,MAAM,KAAK,GAAyB,EAAE,CAAC;YACvC,MAAM,qBAAqB,GAA0B;gBACnD,cAAc,EAAE,CAAC,MAAM,CAAC;gBACxB,UAAU,EAAE,CAAC,IAAwB,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;aAC3D,CAAC;YACF,MAAM,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC,qBAAqB,CAAC,CAAC;YAClE,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;YACxD,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YACpC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;YACvE,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,EAAE,6BAA6B,CAAC,CAAC;QAC9F,CAAC,CAAC;QAEF,MAAM,mBAAmB,GAAG,CAAC,IAAmB,EAAE,UAAwB,EAAE,QAAgB,EAAE,EAAE;YAC9F,MAAM,aAAa,GAAG,IAAI,qBAAqB,EAAE,CAAC;YAClD,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,YAAY,CAAC,CAAC;YACxD,cAAc,CAAC,UAAU,GAAG,QAAQ,CAAC;YACrC,aAAa,CAAC,0BAA0B,CAAC,cAAc,CAAC,CAAC;YACzD,aAAa,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YACnC,MAAM,MAAM,GAAG,qBAAqB,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;YACnE,iBAAiB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QACxC,CAAC,CAAC;QAEF,MAAM,QAAQ,GAAG,CAAC,IAAmB,EAAE,cAAgC,EAAE,EAAE;YACzE,KAAK,MAAM,OAAO,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC;gBACjC,KAAK,MAAM,MAAM,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC;oBAChC,mBAAmB,CAAC,IAAI,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;QAC/G,CAAC,CAAC;QAEF,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;QACnC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,eAAe,GAAG,eAAe,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,CAAC;QAC5E,MAAM,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;QACnC,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;QAEtD,MAAM,cAAc,GAAc,CAAC,MAAM,CAAC,CAAC;QAC3C,MAAM,KAAK,GAAyB,EAAE,CAAC;QACvC,MAAM,iBAAiB,GAA6B,EAAE,CAAC;QACvD,MAAM,UAAU,GAA2B,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpE,MAAM,YAAY,GAAG,CAAC,MAAc,EAAE,EAAE,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAEpI,4GAA4G;QAC5G,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,cAAc,CAAC,EAAC,cAAc,EAAE,UAAU,EAAE,iBAAiB,EAAC,CAAC,EAAE,mCAAmC,CAAC,CAAC;QACzJ,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,uGAAuG;QAC5I,MAAM,CAAC,WAAW,CAAC,iBAAiB,CAAC,MAAM,EAAE,GAAG,EAAE,2DAA2D,CAAC,CAAC;QAC/G,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,YAAY,CAAC,MAAM,CAAC,EAAE,2DAA2D,CAAC,CAAC;QAC3G,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,EAAE,4DAA4D,CAAC,CAAC;QAC1G,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,EAAE,0DAA0D,CAAC,CAAC;QACxG,mDAAmD;QAEnD,QAAQ,CAAC,KAAK,EAAE,CAAC;IACnB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,OAAO,GAAG,IAAI,qBAAqB,EAAE,CAAC;QAC5C,cAAc;QACd,MAAM,GAAG,GAAG,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QAClJ,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACtB,OAAO,CAAC,cAAc,CAAC,GAAI,CAAC,CAAC;QAC7B,MAAM,KAAK,GAAG,qBAAqB,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAE5D,MAAM,KAAK,GAAyB,EAAE,CAAC;QACvC,MAAM,qBAAqB,GAA0B;YACnD,cAAc,EAAE,CAAC,KAAK,CAAC;YACvB,UAAU,EAAE,CAAC,IAAwB,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;SAC3D,CAAC;QAEF,6GAA6G;QAC7G,gIAAgI;QAChI,6DAA6D;QAC7D,uHAAuH;QACvH,gEAAgE;QAChE,MAAM,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC,qBAAqB,CAAC,CAAC;QAClE,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;QACxD,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACpC,MAAM,iBAAiB,GAAG,EAAE,CAAC;QAC7B,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,GAAG,CAAC,CAAC,CAAC;QACvE,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,iBAAiB,GAAG,CAAC,CAAC,CAAC;QACxE,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,GAAG,CAAC,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,YAAY,GAAG,QAAQ,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;QAC3D,MAAM,OAAO,GAAG,IAAI,qBAAqB,EAAE,CAAC;QAC5C,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,YAAY,CAAC,CAAC;QACxD,cAAc,CAAC,SAAS,GAAG,YAAY,CAAC;QACxC,OAAO,CAAC,0BAA0B,CAAC,cAAc,CAAC,CAAC;QACnD,OAAO,CAAC,cAAc,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEnG,MAAM,KAAK,GAAG,qBAAqB,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAE5D,MAAM,KAAK,GAAyB,EAAE,CAAC;QACvC,MAAM,SAAS,GAAsB,EAAE,CAAC;QACxC,MAAM,qBAAqB,GAA0B;YACnD,cAAc,EAAE,CAAC,KAAK,CAAC;YACvB,UAAU,EAAE,CAAC,IAAwB,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;YAC1D,cAAc,EAAE,CAAC,QAAyB,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;SACxE,CAAC;QAEF,MAAM,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC,qBAAqB,CAAC,CAAC;QAClE,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;QACxD,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACpC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACxC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC;QAC1D,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACvE,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACpF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,QAAQ,GAAG,IAAI,qBAAqB,EAAE,CAAC;QAC7C,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/I,MAAM,GAAG,GAAG,qBAAqB,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;QAE3D,MAAM,QAAQ,GAAG,IAAI,qBAAqB,EAAE,CAAC;QAC7C,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnJ,MAAM,GAAG,GAAG,qBAAqB,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;QAE3D,MAAM,KAAK,GAAyB,EAAE,CAAC;QACvC,MAAM,qBAAqB,GAA0B;YACnD,cAAc,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC;YAC1B,UAAU,EAAE,CAAC,IAAwB,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;SAC3D,CAAC;QAEF,MAAM,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC,qBAAqB,CAAC,CAAC;QAClE,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;QACxD,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACpC,0CAA0C;QAC1C,MAAM,CAAC,eAAe,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC7F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;QACzE,MAAM,OAAO,GAAG,IAAI,qBAAqB,EAAE,CAAC;QAC5C,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9I,MAAM,KAAK,GAAG,qBAAqB,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAE5D,MAAM,KAAK,GAAyB,EAAE,CAAC;QACvC,MAAM,qBAAqB,GAA0B;YACnD,cAAc,EAAE,CAAC,KAAK,CAAC;YACvB,UAAU,EAAE,CAAC,IAAwB,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;SAC3D,CAAC;QAEF,MAAM,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC,qBAAqB,CAAC,CAAC;QAClE,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;QACxD,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAEpC,oFAAoF;QACpF,0EAA0E;QAC1E,mDAAmD;QACnD,mEAAmE;QACnE,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACpD,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACpD,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACrD,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAEnD,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC9E,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/F,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAChG,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACrF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,OAAO,GAAG,IAAI,qBAAqB,EAAE,CAAC;QAC5C,MAAM,GAAG,GAAG,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QAClJ,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACtB,OAAO,CAAC,cAAc,CAAC,GAAI,CAAC,CAAC;QAC7B,MAAM,KAAK,GAAG,qBAAqB,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAE5D,MAAM,KAAK,GAAyB,EAAE,CAAC;QACvC,MAAM,qBAAqB,GAA0B;YACnD,cAAc,EAAE,CAAC,KAAK,CAAC;YACvB,UAAU,EAAE,CAAC,IAAwB,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;SAC3D,CAAC;QAEF,MAAM,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC,qBAAqB,CAAC,CAAC;QAClE,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;QACxD,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACpC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,OAAO,GAAG,IAAI,qBAAqB,EAAE,CAAC;QAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACnI,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAC7B,MAAM,KAAK,GAAG,qBAAqB,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAE5D,MAAM,KAAK,GAAyB,EAAE,CAAC;QACvC,MAAM,qBAAqB,GAA0B;YACnD,cAAc,EAAE,CAAC,KAAK,CAAC;YACvB,UAAU,EAAE,CAAC,IAAwB,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;SAC3D,CAAC;QAEF,MAAM,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC,qBAAqB,CAAC,CAAC;QAClE,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;QACxD,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACpC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAC1B,MAAM,OAAO,GAAG,IAAI,qBAAqB,EAAE,CAAC;QAC5C,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,kBAAkB,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QAC3E,MAAM,KAAK,GAAG,qBAAqB,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAE5D,MAAM,WAAW,GAAyB,EAAE,CAAC;QAC7C,MAAM,CAAC,cAAc,CAAC;YACpB,cAAc,EAAE,CAAC,KAAK,CAAC;YACvB,UAAU,EAAE,CAAC,IAAwB,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;YAChE,QAAQ,EAAE,CAAC;SACZ,CAAC,CAAC;QAEH,MAAM,SAAS,GAAyB,EAAE,CAAC;QAC3C,MAAM,CAAC,cAAc,CAAC;YACpB,cAAc,EAAE,CAAC,KAAK,CAAC;YACvB,UAAU,EAAE,CAAC,IAAwB,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;YAC9D,QAAQ,EAAE,KAAK;SAChB,CAAC,CAAC;QAEH,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC1C,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACxC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACvF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAC1B,MAAM,OAAO,GAAG,IAAI,qBAAqB,EAAE,CAAC;QAC5C,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,kBAAkB,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QAC3E,MAAM,KAAK,GAAG,qBAAqB,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAE5D,MAAM,WAAW,GAAyB,EAAE,CAAC;QAC7C,MAAM,CAAC,cAAc,CAAC;YACpB,cAAc,EAAE,CAAC,KAAK,CAAC;YACvB,UAAU,EAAE,CAAC,IAAwB,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;YAChE,QAAQ,EAAE,EAAE,GAAG,KAAK,CAAC,gBAAgB;SACtC,CAAC,CAAC;QAEH,MAAM,SAAS,GAAyB,EAAE,CAAC;QAC3C,MAAM,CAAC,cAAc,CAAC;YACpB,cAAc,EAAE,CAAC,KAAK,CAAC;YACvB,UAAU,EAAE,CAAC,IAAwB,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;YAC9D,QAAQ,EAAE,EAAE,GAAG,KAAK,CAAC,gBAAgB;SACtC,CAAC,CAAC;QAEH,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC1C,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACxC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACvF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;QAC/B,MAAM,aAAa,GAAG,aAAa,CAAC,eAAe,EAAE,CAAC;QACtD,aAAa,CAAC,QAAQ,GAAG,KAAK,CAAC;QAC/B,MAAM,eAAe,GAAG,eAAe,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QAC9D,eAAe,CAAC,SAAS,CAAC,MAAM,CAAC,kBAAkB,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QAE9E,MAAM,SAAS,GAAG,IAAI,qBAAqB,EAAE,CAAC;QAC9C,SAAS,CAAC,cAAc,CAAC,eAAe,CAAC,aAAa,EAAE,CAAC,CAAC;QAC1D,MAAM,KAAK,GAAG,qBAAqB,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QAE9D,MAAM,iBAAiB,GAAyB,EAAE,CAAC;QACnD,MAAM,kBAAkB,GAAG,MAAM,CAAC,cAAc,CAAC;YAC/C,cAAc,EAAE,CAAC,KAAK,CAAC;YACvB,UAAU,EAAE,CAAC,IAAwB,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;SACvE,CAAC,CAAC;QAEH,MAAM,CAAC,WAAW,CAAC,kBAAkB,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;QAC9D,MAAM,CAAC,WAAW,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAEhD,MAAM,eAAe,GAAyB,EAAE,CAAC;QACjD,MAAM,gBAAgB,GAAG,MAAM,CAAC,cAAc,CAAC;YAC7C,cAAc,EAAE,CAAC,KAAK,CAAC;YACvB,UAAU,EAAE,CAAC,IAAwB,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;YACpE,aAAa,EAAE,GAAG;SACnB,CAAC,CAAC;QAEH,MAAM,CAAC,WAAW,CAAC,gBAAgB,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;QAC5D,MAAM,CAAC,WAAW,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC9C,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;QAC/B,MAAM,OAAO,GAAG,IAAI,qBAAqB,EAAE,CAAC;QAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACnI,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAC7B,MAAM,KAAK,GAAG,qBAAqB,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAE5D,MAAM,KAAK,GAAyB,EAAE,CAAC;QACvC,MAAM,qBAAqB,GAA0B;YACnD,cAAc,EAAE,CAAC,KAAK,CAAC;YACvB,UAAU,EAAE,CAAC,IAAwB,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;YAC1D,aAAa,EAAE,CAAC;SACjB,CAAC;QAEF,MAAM,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC,qBAAqB,CAAC,CAAC;QAClE,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;QACxD,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACpC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,6EAA6E;IAChI,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACpC,MAAM,OAAO,GAAG,IAAI,qBAAqB,EAAE,CAAC;QAC5C,kDAAkD;QAClD,MAAM,QAAQ,GAAqB,IAAI,CAAC,KAAK,CAC3C,EAAE,CAAC,YAAY,CAAC,eAAe,CAAC,gBAAgB,CAAC,yBAAyB,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CACnG,CAAC;QACF,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QACjC,MAAM,KAAK,GAAG,qBAAqB,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAE5D,MAAM,cAAc,GAAyB,EAAE,CAAC;QAChD,MAAM,eAAe,GAAG,MAAM,CAAC,cAAc,CAAC;YAC5C,cAAc,EAAE,CAAC,KAAK,CAAC;YACvB,UAAU,EAAE,CAAC,IAAwB,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;SACpE,CAAC,CAAC;QACH,MAAM,CAAC,WAAW,CAAC,eAAe,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;QAC3D,MAAM,CAAC,WAAW,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAE7C,MAAM,YAAY,GAAyB,EAAE,CAAC;QAC9C,MAAM,aAAa,GAAG,MAAM,CAAC,cAAc,CAAC;YAC1C,cAAc,EAAE,CAAC,KAAK,CAAC;YACvB,UAAU,EAAE,CAAC,IAAwB,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;YACjE,kBAAkB,EAAE,GAAG;SACxB,CAAC,CAAC;QACH,MAAM,CAAC,WAAW,CAAC,aAAa,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;QACzD,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAE3C,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,0BAA0B;QACvF,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,WAAW,GAAG,IAAI,qBAAqB,EAAE,CAAC;QAChD,MAAM,UAAU,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,yBAAyB;QAE9E,wGAAwG;QACxG,UAAU,CAAC,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC;QAC5C,WAAW,CAAC,0BAA0B,CAAC,UAAU,CAAC,CAAC;QACnD,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5K,MAAM,SAAS,GAAsB;YACnC,aAAa,EAAE,YAAY,CAAC,aAAa;YACzC,KAAK,EAAE,MAAM,CAAC,YAAY;YAC1B,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE;YACxB,IAAI,EAAE,WAAW,CAAC,cAAc;SACjC,CAAC;QACF,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QAE5D,MAAM,eAAe,GAAG,mBAAmB,CAAC,KAAK,CAAC,0BAA0B,CAAC,MAAM,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,6CAA6C;QACnJ,MAAM,CAAC,MAAM,CAAC,SAAS,KAAK,eAAe,CAAC,CAAC;QAE7C,MAAM,eAAe,GAAG,mBAAmB,CAAC,KAAK,CAAC,0BAA0B,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,mBAAmB,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,eAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,mBAAmB,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;QAC9R,MAAM,CAAC,MAAM,CAAC,SAAS,KAAK,eAAe,CAAC,CAAC;QAE7C,MAAM,YAAY,GAAG,mBAAmB,CAAC,KAAK,CAAC,uBAAuB,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,eAAe,CAAC,MAAM,EAAE,IAAI,EAAE,eAAe,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,mBAAmB,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;QACzN,MAAM,CAAC,MAAM,CAAC,SAAS,KAAK,YAAY,CAAC,CAAC;QAE1C,MAAM,OAAO,GAAG,mBAAmB,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,YAAY,EAAE,gBAAgB,EAAE,YAAY,CAAC,CAAC;QACnH,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;QAEzC,MAAM,OAAO,GAAG,IAAI,qBAAqB,EAAE,CAAC;QAC5C,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,YAAY,CAAC,CAAC;QACxD,cAAc,CAAC,SAAS,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvD,OAAO,CAAC,0BAA0B,CAAC,cAAc,CAAC,CAAC;QACnD,OAAO,CAAC,cAAc,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9F,MAAM,SAAS,GAAG,qBAAqB,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAEhE,2DAA2D;QAC3D,MAAM,UAAU,GAAyB,EAAE,CAAC;QAC5C,MAAM,cAAc,GAAsB,EAAE,CAAC;QAC7C,IAAI,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC;YACvC,cAAc,EAAE,CAAC,SAAS,CAAC;YAC3B,UAAU,EAAE,CAAC,IAAwB,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;YAC/D,cAAc,EAAE,CAAC,QAAyB,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC;SAC7E,CAAC,CAAC;QACH,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;QACxD,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACzC,MAAM,CAAC,WAAW,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC7C,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACzD,MAAM,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAE9D,kEAAkE;QAClE,MAAM,aAAa,GAAyB,EAAE,CAAC;QAC/C,MAAM,iBAAiB,GAAsB,EAAE,CAAC;QAChD,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC;YACnC,cAAc,EAAE,CAAC,SAAS,CAAC;YAC3B,UAAU,EAAE,CAAC,IAAwB,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;YAClE,cAAc,EAAE,CAAC,QAAyB,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC;YAC/E,yBAAyB,EAAE,GAAG;SAC/B,CAAC,CAAC;QACH,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;QACxD,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC5C,MAAM,CAAC,WAAW,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAChD,MAAM,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAEjE,+DAA+D;QAC/D,MAAM,aAAa,GAAyB,EAAE,CAAC;QAC/C,MAAM,iBAAiB,GAAsB,EAAE,CAAC;QAChD,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC;YACnC,cAAc,EAAE,CAAC,SAAS,CAAC;YAC3B,UAAU,EAAE,CAAC,IAAwB,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;YAClE,cAAc,EAAE,CAAC,QAAyB,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC;YAC/E,yBAAyB,EAAE,IAAI;SAChC,CAAC,CAAC;QACH,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;QACxD,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC5C,MAAM,CAAC,WAAW,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAChD,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC5D,MAAM,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,WAAW,GAAG,IAAI,qBAAqB,EAAE,CAAC;QAChD,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClJ,MAAM,SAAS,GAAsB;YACnC,aAAa,EAAE,YAAY,CAAC,aAAa;YACzC,KAAK,EAAE,MAAM,CAAC,YAAY;YAC1B,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE;YACxB,IAAI,EAAE,WAAW,CAAC,cAAc;SACjC,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QAExD,MAAM,mBAAmB,GAAG,IAAI,qBAAqB,EAAE,CAAC;QACxD,mBAAmB,CAAC,oBAAoB,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC1E,MAAM,cAAc,GAAG,qBAAqB,CAAC,mBAAmB,CAAC,cAAc,CAAC,CAAC;QAEjF,MAAM,KAAK,GAAyB,EAAE,CAAC;QACvC,MAAM,qBAAqB,GAA0B;YACnD,cAAc,EAAE,CAAC,cAAc,CAAC;YAChC,UAAU,EAAE,CAAC,IAAwB,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;SAC3D,CAAC;QAEF,MAAM,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC,qBAAqB,CAAC,CAAC;QAClE,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;QACxD,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAEpC,oFAAoF;QACpF,0EAA0E;QAC1E,mDAAmD;QACnD,mEAAmE;QACnE,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACpD,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACpD,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACrD,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAEnD,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC9E,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/F,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAChG,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACrF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oEAAoE,EAAE,GAAG,EAAE;QAC5E,MAAM,WAAW,GAAG,IAAI,qBAAqB,EAAE,CAAC;QAChD,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClJ,MAAM,SAAS,GAAsB;YACnC,aAAa,EAAE,YAAY,CAAC,aAAa;YACzC,KAAK,EAAE,MAAM,CAAC,YAAY;YAC1B,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE;YACxB,IAAI,EAAE,WAAW,CAAC,cAAc;SACjC,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QAExD,MAAM,mBAAmB,GAAG,IAAI,qBAAqB,EAAE,CAAC;QACxD,mBAAmB,CAAC,oBAAoB,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC1E,MAAM,cAAc,GAAG,qBAAqB,CAAC,mBAAmB,CAAC,cAAc,CAAC,CAAC;QAEjF,MAAM,KAAK,GAAyB,EAAE,CAAC;QACvC,MAAM,iBAAiB,GAA6B,EAAE,CAAC;QACvD,MAAM,qBAAqB,GAA0B;YACnD,cAAc,EAAE,CAAC,cAAc,CAAC;YAChC,UAAU,EAAE,CAAC,IAAwB,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;YAC1D,iBAAiB;SAClB,CAAC;QAEF,MAAM,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC,qBAAqB,CAAC,CAAC;QAClE,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;QACxD,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACpC,MAAM,CAAC,WAAW,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAEhD,MAAM,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACxD,MAAM,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;QACxE,MAAM,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACjD,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,SAAU,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAE1G,MAAM,SAAS,GAAqB,EAAE,CAAC;QACvC,MAAM,gBAAgB,GAAG,MAAM,CAAC,kBAAkB,CAAC;YACjD,SAAS,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC,MAAM;YACtC,YAAY,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC,YAAY;YAC/C,cAAc,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;SACvD,CAAC,CAAC;QAEH,MAAM,CAAC,WAAW,CAAC,gBAAgB,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;QAC5D,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAExC,oFAAoF;QACpF,0EAA0E;QAC1E,mDAAmD;QACnD,mEAAmE;QACnE,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACxD,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACxD,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACzD,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAEvD,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAClF,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACnG,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACpG,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACzF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,OAAO,GAAG,IAAI,qBAAqB,EAAE,CAAC;QAC5C,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,YAAY,CAAC,CAAC;QACxD,cAAc,CAAC,aAAa,GAAG,aAAa,CAAC,YAAY,CAAC;QAC1D,OAAO,CAAC,0BAA0B,CAAC,cAAc,CAAC,CAAC;QACnD,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,kBAAkB,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QAC3E,MAAM,KAAK,GAAG,qBAAqB,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAE5D,MAAM,KAAK,GAAyB,EAAE,CAAC;QACvC,MAAM,qBAAqB,GAA0B;YACnD,cAAc,EAAE,CAAC,KAAK,CAAC;YACvB,UAAU,EAAE,CAAC,IAAwB,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;SAC3D,CAAC;QAEF,MAAM,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC,qBAAqB,CAAC,CAAC;QAClE,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;QACxD,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACpC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,OAAO,GAAG,IAAI,qBAAqB,EAAE,CAAC;QAC5C,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,YAAY,CAAC,CAAC;QAExD,cAAc,CAAC,aAAa,GAAG,aAAa,CAAC,YAAY,CAAC;QAC1D,OAAO,CAAC,0BAA0B,CAAC,cAAc,CAAC,CAAC;QACnD,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,kBAAkB,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QAE3E,cAAc,CAAC,aAAa,GAAG,aAAa,CAAC,OAAO,CAAC;QACrD,OAAO,CAAC,0BAA0B,CAAC,cAAc,CAAC,CAAC;QACnD,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,CAAE,CAAC,CAAC;QAEpH,MAAM,KAAK,GAAG,qBAAqB,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAE5D,MAAM,KAAK,GAAyB,EAAE,CAAC;QACvC,MAAM,qBAAqB,GAA0B;YACnD,cAAc,EAAE,CAAC,KAAK,CAAC;YACvB,UAAU,EAAE,CAAC,IAAwB,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;YAC1D,QAAQ,EAAE,IAAI;SACf,CAAC;QAEF,MAAM,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC,qBAAqB,CAAC,CAAC;QAClE,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;QACxD,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAEpC,iHAAiH;QACjH,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;YACtC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC;YACvE,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;QACpE,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;YAClE,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC;QACzE,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,OAAO,GAAG,IAAI,qBAAqB,EAAE,CAAC;QAC5C,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,YAAY,CAAC,CAAC;QAExD,cAAc,CAAC,aAAa,GAAG,aAAa,CAAC,YAAY,CAAC;QAC1D,OAAO,CAAC,0BAA0B,CAAC,cAAc,CAAC,CAAC;QACnD,OAAO,CAAC,cAAc,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEnG,MAAM,KAAK,GAAG,qBAAqB,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAE5D,MAAM,KAAK,GAAyB,EAAE,CAAC;QACvC,MAAM,SAAS,GAAsB,EAAE,CAAC;QACxC,MAAM,qBAAqB,GAA0B;YACnD,cAAc,EAAE,CAAC,KAAK,CAAC;YACvB,UAAU,EAAE,CAAC,IAAwB,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;YAC1D,cAAc,EAAE,CAAC,QAAyB,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;YACvE,QAAQ,EAAE,IAAI;SACf,CAAC;QAEF,MAAM,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC,qBAAqB,CAAC,CAAC;QAClE,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;QACxD,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACpC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACxC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC;IAC7E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,WAAW,GAAG,IAAI,qBAAqB,EAAE,CAAC;QAChD,MAAM,kBAAkB,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,mCAAmC;QAChG,kBAAkB,CAAC,aAAa,GAAG,aAAa,CAAC,YAAY,CAAC;QAC9D,WAAW,CAAC,0BAA0B,CAAC,kBAAkB,CAAC,CAAC;QAC3D,WAAW,CAAC,cAAc,CAAC,MAAM,CAAC,kBAAkB,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QAE/E,MAAM,SAAS,GAAsB;YACnC,aAAa,EAAE,YAAY,CAAC,aAAa;YACzC,KAAK,EAAE,MAAM,CAAC,YAAY;YAC1B,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE;YACxB,IAAI,EAAE,WAAW,CAAC,cAAc;SACjC,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QAExD,MAAM,mBAAmB,GAAG,IAAI,qBAAqB,EAAE,CAAC;QACxD,mBAAmB,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;QACjD,MAAM,cAAc,GAAG,qBAAqB,CAAC,mBAAmB,CAAC,cAAc,CAAC,CAAC;QAEjF,MAAM,KAAK,GAAyB,EAAE,CAAC;QACvC,MAAM,iBAAiB,GAA6B,EAAE,CAAC;QACvD,MAAM,qBAAqB,GAA0B;YACnD,cAAc,EAAE,CAAC,cAAc,CAAC;YAChC,UAAU,EAAE,CAAC,IAAwB,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;YAC1D,iBAAiB;SAClB,CAAC;QAEF,MAAM,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC,qBAAqB,CAAC,CAAC;QAClE,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;QACxD,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACpC,MAAM,CAAC,WAAW,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAEhD,MAAM,SAAS,GAAqB,EAAE,CAAC;QACvC,MAAM,gBAAgB,GAAG,MAAM,CAAC,kBAAkB,CAAC;YACjD,SAAS,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC,MAAM;YACtC,YAAY,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC,YAAY;YAC/C,cAAc,EAAE,CAAC,IAAoB,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;SAC/D,CAAC,CAAC;QACH,MAAM,CAAC,WAAW,CAAC,gBAAgB,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;QAC5D,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACxC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC;IAC7E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,WAAW,GAAG,IAAI,qBAAqB,EAAE,CAAC;QAChD,WAAW,CAAC,cAAc,CAAC,MAAM,CAAC,kBAAkB,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/E,MAAM,SAAS,GAAsB;YACnC,aAAa,EAAE,YAAY,CAAC,aAAa;YACzC,KAAK,EAAE,MAAM,CAAC,YAAY;YAC1B,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE;YACxB,IAAI,EAAE,WAAW,CAAC,cAAc;SACjC,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QAExD,MAAM,mBAAmB,GAAG,IAAI,qBAAqB,EAAE,CAAC;QACxD,MAAM,0BAA0B,GAAG,IAAI,cAAc,CAAC,YAAY,CAAC,CAAC;QACpE,0BAA0B,CAAC,aAAa,GAAG,aAAa,CAAC,YAAY,CAAC;QACtE,mBAAmB,CAAC,0BAA0B,CAAC,0BAA0B,CAAC,CAAC;QAC3E,mBAAmB,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;QACjD,MAAM,cAAc,GAAG,qBAAqB,CAAC,mBAAmB,CAAC,cAAc,CAAC,CAAC;QAEjF,MAAM,KAAK,GAAyB,EAAE,CAAC;QACvC,MAAM,iBAAiB,GAA6B,EAAE,CAAC;QACvD,MAAM,qBAAqB,GAA0B;YACnD,cAAc,EAAE,CAAC,cAAc,CAAC;YAChC,UAAU,EAAE,CAAC,IAAwB,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;YAC1D,iBAAiB;SAClB,CAAC;QAEF,MAAM,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC,qBAAqB,CAAC,CAAC;QAClE,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;QACxD,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACpC,MAAM,CAAC,WAAW,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAChD,MAAM,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,aAAa,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC;QAEhG,MAAM,SAAS,GAAqB,EAAE,CAAC;QACvC,MAAM,gBAAgB,GAAG,MAAM,CAAC,kBAAkB,CAAC;YACjD,SAAS,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC,MAAM;YACtC,YAAY,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC,YAAY;YAC/C,cAAc,EAAE,CAAC,IAAoB,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;SAC/D,CAAC,CAAC;QACH,MAAM,CAAC,WAAW,CAAC,gBAAgB,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;QAC5D,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACxC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC;IAC7E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,WAAW,GAAG,IAAI,qBAAqB,EAAE,CAAC;QAChD,MAAM,kBAAkB,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,mCAAmC;QAChG,kBAAkB,CAAC,aAAa,GAAG,aAAa,CAAC,YAAY,CAAC;QAC9D,WAAW,CAAC,0BAA0B,CAAC,kBAAkB,CAAC,CAAC;QAC3D,WAAW,CAAC,cAAc,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEvG,MAAM,SAAS,GAAsB;YACnC,aAAa,EAAE,YAAY,CAAC,aAAa;YACzC,KAAK,EAAE,MAAM,CAAC,YAAY;YAC1B,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE;YACxB,IAAI,EAAE,WAAW,CAAC,cAAc;SACjC,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QAExD,MAAM,mBAAmB,GAAG,IAAI,qBAAqB,EAAE,CAAC;QACxD,mBAAmB,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;QACjD,MAAM,cAAc,GAAG,qBAAqB,CAAC,mBAAmB,CAAC,cAAc,CAAC,CAAC;QAEjF,MAAM,KAAK,GAAyB,EAAE,CAAC;QACvC,MAAM,iBAAiB,GAA6B,EAAE,CAAC;QACvD,MAAM,qBAAqB,GAA0B;YACnD,cAAc,EAAE,CAAC,cAAc,CAAC;YAChC,UAAU,EAAE,CAAC,IAAwB,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;YAC1D,iBAAiB;SAClB,CAAC;QAEF,MAAM,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC,qBAAqB,CAAC,CAAC;QAClE,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;QACxD,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACpC,MAAM,CAAC,WAAW,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAEhD,MAAM,SAAS,GAAqB,EAAE,CAAC;QACvC,MAAM,aAAa,GAA0B,EAAE,CAAC;QAChD,MAAM,gBAAgB,GAAG,MAAM,CAAC,kBAAkB,CAAC;YACjD,SAAS,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC,MAAM;YACtC,YAAY,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC,YAAY;YAC/C,cAAc,EAAE,CAAC,IAAoB,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;YAC9D,kBAAkB,EAAE,CAAC,IAAyB,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;SAC5E,CAAC,CAAC;QACH,MAAM,CAAC,WAAW,CAAC,gBAAgB,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;QAC5D,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACxC,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC5C,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC;IACjF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,GAAG,GAAG,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QACvG,MAAM,CAAC,OAAO,CAAC,SAAS,KAAK,GAAG,CAAC,CAAC;QAElC,MAAM,OAAO,GAAG,IAAI,qBAAqB,EAAE,CAAC;QAC5C,OAAO,CAAC,cAAc,CAAC,GAAI,CAAC,CAAC;QAE7B,MAAM,KAAK,GAAG,qBAAqB,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAE5D,MAAM,KAAK,GAAyB,EAAE,CAAC;QACvC,MAAM,UAAU,GAAG,CAAC,IAAwB,EAAE,EAAE;YAC9C,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC,CAAC;QACF,MAAM,qBAAqB,GAA0B;YACnD,cAAc,EAAE,CAAC,KAAK,CAAC;YACvB,UAAU;SACX,CAAC;QAEF,MAAM,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC,qBAAqB,CAAC,CAAC;QAClE,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;QACxD,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACpC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACxD,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACrD,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAC9C,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;QAClE,MAAM,QAAQ,GAAG,cAAc,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACxE,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QAC5C,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QACjD,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QAClD,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE;IACF,EAAE;IACF,kBAAkB;IAClB,mBAAmB;IACnB,oBAAoB;IACpB,EAAE;IACF,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACnC,MAAM,SAAS,GAAG,CAAC,CAAC;QACpB,MAAM,SAAS,GAAG,CAAC,CAAC;QACpB,MAAM,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAClF,MAAM,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7D,MAAM,UAAU,GAAG,IAAI,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACtD,MAAM,EAAE,GAAG,GAAG,CAAC;QACf,MAAM,EAAE,GAAG,GAAG,CAAC;QACf,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC;QAChB,MAAM,EAAE,GAAG,GAAG,CAAC;QACf,oGAAoG;QACpG,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1C,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;YACvC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC;gBACnB,SAAS,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QACtD,CAAC;QACD,MAAM,SAAS,GAAG;YAChB,MAAM,EAAE,IAAI,YAAY,CAAC,SAAS,CAAC;YACnC,MAAM,EAAE,IAAI,YAAY,CAAC,SAAS,CAAC;YACnC,uCAAuC;YACvC,OAAO,EAAE,IAAI,YAAY,CAAC,UAAU,CAAC;YACrC,OAAO,EAAE,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACpD,UAAU,EAAE,IAAI;SACjB,CAAC;QACF,MAAM,SAAS,GAAG,GAAG,CAAC;QACtB,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,GAAG,SAAS,CAAC,CAAC;QACzD,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,GAAG,SAAS,CAAC,CAAC;QAC1D,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,GAAG,SAAS,CAAC,CAAC;QACzD,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,GAAG,SAAS,CAAC,CAAC;QAC1D,MAAM,OAAO,GAAG,yBAAyB,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QAC/D,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,EAAE,oBAAoB,CAAC,CAAC;QAC3D,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,EAAE,oBAAoB,CAAC,CAAC;QAC3D,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,IAAI,OAAO,GAAG,GAAG,CAAC;QAClB,OAAO,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC;YACjC,UAAU,EAAE,CAAC;YACb,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;YAC1C,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;YACxE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,GAAG,CAAC,CAAC,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5E,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,GAAG,CAAC,CAAC,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5E,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAE,CAAC;YACvE,OAAO,IAAI,UAAU,CAAC,SAAS,EAAE,GAAG,GAAG,CAAC;YACxC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,OAAO,CAAC,UAAW,CAAC,CAAC,CAAC,CAAC,CAAC;YACzE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,GAAG,CAAC,CAAC,KAAK,OAAO,CAAC,UAAW,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7E,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,GAAG,CAAC,CAAC,KAAK,OAAO,CAAC,UAAW,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7E,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,OAAO,CAAC,WAAY,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1E,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,GAAG,CAAC,CAAC,KAAK,OAAO,CAAC,WAAY,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9E,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,GAAG,CAAC,CAAC,KAAK,OAAO,CAAC,WAAY,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC,CAAC,CAAC;gBAC/D,MAAM,MAAM,GAAG,OAAO,CAAC,MAAO,CAAC,+BAA+B,CAAC,CAAC,CAAC,CAAC;gBAClE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAM,CAAC,+BAA+B,CAAC,CAAC,CAAC,CAAC;gBAChE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC3B,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBACxD,CAAC;gBACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC3B,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBACzE,CAAC;YACH,CAAC;YACD,WAAW,IAAI,CAAC,CAAC;QACnB,CAAC;QACD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC;QACvD,MAAM,CAAC,MAAM,CAAC,UAAU,KAAK,SAAS,EAAE,aAAa,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,mBAAmB,GAAwB,IAAI,CAAC,KAAK,CAAC;;;;;;;;;;;;;;OAczD,CAAC,CAAC;QACL,MAAM,KAAK,GAAG,qBAAqB,CAAC,mBAAmB,CAAC,CAAC;QAEzD,MAAM,KAAK,GAAyB,EAAE,CAAC;QACvC,MAAM,qBAAqB,GAA0B;YACnD,cAAc,EAAE,CAAC,KAAK,CAAC;YACvB,UAAU,EAAE,CAAC,IAAwB,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;SAC3D,CAAC;QAEF,MAAM,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC,qBAAqB,CAAC,CAAC;QAClE,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;QACxD,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACpC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAC9C,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACjC,MAAM,OAAO,GAAG,aAAa,CAAC,eAAe,EAAE,CAAC;QAChD,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAC5E,MAAM,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAChD,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,kBAAkB,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACzE,MAAM,QAAQ,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;QACzC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC3C,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACtF,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC5C,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACvF,8DAA8D;QAC9D,MAAM,SAAS,GAAG,KAAK,CAAS,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAChE,MAAM,UAAU,GAAG,KAAK,CAAS,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACjE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACzD,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YAC/C,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAW,CAAC,CAAC,CAAC,CAAC,CAAC;YACnE,IAAI,KAAK,EAAE,CAAC;gBACV,SAAS,CAAC,CAAC,GAAG,UAAU,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBACpC,SAAS,CAAC,CAAC,GAAG,UAAU,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;YAC1C,CAAC;YACD,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAY,CAAC,CAAC,CAAC,CAAC,CAAC;YACtE,IAAI,MAAM,EAAE,CAAC;gBACX,UAAU,CAAC,CAAC,GAAG,UAAU,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;gBACtC,UAAU,CAAC,CAAC,GAAG,UAAU,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;gBAC1C,UAAU,CAAC,CAAC,GAAG,UAAU,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;QACD,MAAM,IAAI,GAAuB;YAC/B,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;YACzC,MAAM,EAAE,IAAI,YAAY,CAAC,SAAS,CAAC;YACnC,OAAO,EAAE,IAAI,YAAY,CAAC,UAAU,CAAC;YACrC,OAAO,EAAE,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC;YACjD,UAAU,EAAE,KAAK;SAClB,CAAC;QACF,MAAM,OAAO,GAAG,yBAAyB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACvD,MAAM,SAAS,GAAG,QAAQ,CAAC,UAAU,CAAC;QACtC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,KAAK,CAAS,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAU,EAAE,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QACrI,MAAM,UAAU,GAAG,OAAO,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;QACvD,OAAO,UAAU,CAAC,eAAe,EAAE,EAAE,CAAC;YACpC,MAAM,UAAU,GAAG,UAAU,CAAC,gBAAgB,EAAE,CAAC;YACjD,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;YAC7B,MAAM,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,UAAW,CAAC,CAAC;YACpD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACtB,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC;YACjH,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,aAAa,CAAC,UAAU,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC;YACpI,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,aAAa,CAAC,UAAU,CAAC,KAAK,EAAE,eAAe,EAAE,EAAE,OAAO,CAAC,KAAK,EAAE,eAAe,EAAE,EAAE,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC;YAC9I,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,aAAa,CAAC,UAAU,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC3I,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nimport { assert } from \"chai\";\nimport * as fs from \"fs\";\nimport { DbResult, Id64, Id64Array, Id64String } from \"@itwin/core-bentley\";\nimport {\n Code, ColorDef, FillDisplay, GeometryClass, GeometryParams, GeometryPartProps, GeometryStreamBuilder, GeometryStreamProps, ImageSourceFormat,\n IModel, LineStyle, PhysicalElementProps, Point2dProps, TextureMapProps, TextureMapUnits,\n} from \"@itwin/core-common\";\nimport {\n Angle, Box, Geometry, GeometryQuery, GrowableXYArray, GrowableXYZArray, LineSegment3d, LineString3d, Loop, NumberArray, Point2dArray, Point3d,\n Point3dArray, PolyfaceBuilder, Range3d, Sphere, StrokeOptions, Vector3d, Vector3dArray,\n} from \"@itwin/core-geometry\";\nimport {\n ExportGraphics, ExportGraphicsInfo, ExportGraphicsMeshVisitor, ExportGraphicsOptions, GeometricElement, LineStyleDefinition, PhysicalObject,\n RenderMaterialElement, SnapshotDb, Texture,\n} from \"../../core-backend\";\nimport { GeometryPart } from \"../../Element\";\nimport {\n ExportGraphicsFunction, ExportGraphicsMesh, ExportLinesInfo, ExportPartInfo, ExportPartInstanceInfo, ExportPartLinesInfo,\n} from \"../../ExportGraphics\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\n\ndescribe(\"exportGraphics\", () => {\n let iModel: SnapshotDb;\n let seedModel: Id64String;\n let seedCategory: Id64String;\n\n function insertPhysicalElement(geometryStream: GeometryStreamProps): Id64String {\n const elementProps: PhysicalElementProps = {\n classFullName: PhysicalObject.classFullName,\n model: seedModel,\n category: seedCategory,\n code: Code.createEmpty(),\n geom: geometryStream,\n };\n return iModel.elements.insertElement(elementProps);\n }\n\n function insertRenderMaterialWithTexture(name: string, textureId: Id64String, patternScale?: Point2dProps, patternScaleMode?: TextureMapUnits): Id64String {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n const props: TextureMapProps = { TextureId: textureId, pattern_offset: [0.0, 0.0] };\n if (patternScale)\n props.pattern_scale = patternScale;\n if (patternScaleMode)\n props.pattern_scalemode = patternScaleMode;\n return RenderMaterialElement.insert(iModel, IModel.dictionaryId, name, { paletteName: \"test-palette\", patternMap: props });\n }\n\n function insertRenderMaterial(name: string, colorDef: ColorDef): Id64String {\n const colors = colorDef.colors;\n return RenderMaterialElement.insert(iModel, IModel.dictionaryId, name, {\n paletteName: \"test-palette\",\n color: [colors.r / 255, colors.g / 255, colors.b / 255],\n transmit: colors.t / 255,\n });\n }\n\n before(() => {\n const seedFileName = IModelTestUtils.resolveAssetFile(\"CompatibilityTestSeed.bim\");\n const testFileName = IModelTestUtils.prepareOutputFile(\"ExportGraphics\", \"ExportGraphicsTest.bim\");\n iModel = IModelTestUtils.createSnapshotFromSeed(testFileName, seedFileName);\n\n // Get known model/category from seed element a la GeometryStream.test.ts\n const seedElement = iModel.elements.getElement<GeometricElement>(\"0x1d\");\n assert.exists(seedElement);\n assert.isTrue(seedElement.federationGuid === \"18eb4650-b074-414f-b961-d9cfaa6c8746\");\n seedModel = seedElement.model;\n seedCategory = seedElement.category;\n });\n\n after(() => {\n iModel.close();\n });\n\n it(\"resolves element color correctly\", () => {\n const elementColor = ColorDef.fromString(\"cadetBlue\");\n\n const builder = new GeometryStreamBuilder();\n const geometryParams = new GeometryParams(seedCategory);\n geometryParams.lineColor = elementColor;\n builder.appendGeometryParamsChange(geometryParams);\n builder.appendGeometry(Sphere.createCenterRadius(Point3d.createZero(), 1));\n const geometricElementId = insertPhysicalElement(builder.geometryStream);\n\n const infos: ExportGraphicsInfo[] = [];\n const exportGraphicsOptions: ExportGraphicsOptions = {\n elementIdArray: [geometricElementId],\n onGraphics: (info: ExportGraphicsInfo) => infos.push(info),\n };\n\n const exportStatus = iModel.exportGraphics(exportGraphicsOptions);\n assert.strictEqual(exportStatus, DbResult.BE_SQLITE_OK);\n assert.strictEqual(infos.length, 1);\n assert.strictEqual(infos[0].elementId, geometricElementId);\n assert.strictEqual(infos[0].color, elementColor.tbgr);\n });\n\n it(\"resolves material color and transparency correctly\", () => {\n const materialColor = ColorDef.fromString(\"honeydew\").withTransparency(80);\n const materialId = insertRenderMaterial(\"test-material\", materialColor);\n\n const builder = new GeometryStreamBuilder();\n const geometryParams = new GeometryParams(seedCategory);\n geometryParams.lineColor = ColorDef.fromString(\"rebeccaPurple\"); // line color should be superceded by material color\n geometryParams.materialId = materialId;\n builder.appendGeometryParamsChange(geometryParams);\n builder.appendGeometry(Sphere.createCenterRadius(Point3d.createZero(), 1));\n const geometricElementId = insertPhysicalElement(builder.geometryStream);\n\n const infos: ExportGraphicsInfo[] = [];\n const exportGraphicsOptions: ExportGraphicsOptions = {\n elementIdArray: [geometricElementId],\n onGraphics: (info: ExportGraphicsInfo) => infos.push(info),\n };\n\n const exportStatus = iModel.exportGraphics(exportGraphicsOptions);\n assert.strictEqual(exportStatus, DbResult.BE_SQLITE_OK);\n assert.strictEqual(infos.length, 1);\n assert.strictEqual(infos[0].elementId, geometricElementId);\n assert.strictEqual(infos[0].materialId, materialId);\n assert.strictEqual(infos[0].color, materialColor.tbgr);\n assert.isUndefined(infos[0].textureId);\n });\n\n it(\"resolves color face symbology correctly\", () => {\n const color0 = ColorDef.fromString(\"sienna\");\n const color1 = ColorDef.fromString(\"plum\");\n\n const builder = new GeometryStreamBuilder();\n const geometryParams = new GeometryParams(seedCategory);\n geometryParams.lineColor = ColorDef.fromString(\"peachPuff\"); // line color should be superceded by face color\n builder.appendGeometryParamsChange(geometryParams);\n // Cube with one material attached to two faces and another material attached to other four faces\n const testBrepData: string = JSON.parse(\n fs.readFileSync(IModelTestUtils.resolveAssetFile(\"brep-face-symb.json\"), { encoding: \"utf8\" }),\n ).data;\n builder.appendBRepData({\n data: testBrepData,\n faceSymbology: [\n { color: color0.toJSON() },\n { color: color1.toJSON() },\n ],\n });\n const geometricElementId = insertPhysicalElement(builder.geometryStream);\n\n const infos: ExportGraphicsInfo[] = [];\n const exportGraphicsOptions: ExportGraphicsOptions = {\n elementIdArray: [geometricElementId],\n onGraphics: (info: ExportGraphicsInfo) => infos.push(info),\n };\n\n const exportStatus = iModel.exportGraphics(exportGraphicsOptions);\n assert.strictEqual(exportStatus, DbResult.BE_SQLITE_OK);\n // 4 faces of slab have color1, 2 faces have color0.\n // Triangulated, should split into info with 24 indices and info with 12 indices.\n assert.strictEqual(infos.length, 2);\n assert.strictEqual(infos[0].elementId, geometricElementId);\n assert.strictEqual(infos[0].mesh.indices.length, 24);\n assert.strictEqual(infos[0].color, color1.tbgr);\n assert.strictEqual(infos[1].elementId, geometricElementId);\n assert.strictEqual(infos[1].mesh.indices.length, 12);\n assert.strictEqual(infos[1].color, color0.tbgr);\n });\n\n it(\"resolves material face symbology correctly\", () => {\n const materialColor0 = ColorDef.fromString(\"honeydew\").withTransparency(80);\n const materialId0 = insertRenderMaterial(\"test-material-0\", materialColor0);\n\n const materialColor1 = ColorDef.fromString(\"wheat\").withTransparency(240);\n const materialId1 = insertRenderMaterial(\"test-material-1\", materialColor1);\n\n const builder = new GeometryStreamBuilder();\n const geometryParams = new GeometryParams(seedCategory);\n geometryParams.lineColor = ColorDef.fromString(\"peachPuff\"); // line color should be superceded by material color\n builder.appendGeometryParamsChange(geometryParams);\n const testBrepData: string = JSON.parse(\n fs.readFileSync(IModelTestUtils.resolveAssetFile(\"brep-face-symb.json\"), { encoding: \"utf8\" }),\n ).data;\n builder.appendBRepData({\n // Cube with one material attached to two faces and another material attached to other four faces\n data: testBrepData,\n faceSymbology: [\n { materialId: materialId0 },\n { materialId: materialId1 },\n ],\n });\n const geometricElementId = insertPhysicalElement(builder.geometryStream);\n\n const infos: ExportGraphicsInfo[] = [];\n const exportGraphicsOptions: ExportGraphicsOptions = {\n elementIdArray: [geometricElementId],\n onGraphics: (info: ExportGraphicsInfo) => infos.push(info),\n };\n\n const exportStatus = iModel.exportGraphics(exportGraphicsOptions);\n assert.strictEqual(exportStatus, DbResult.BE_SQLITE_OK);\n assert.strictEqual(infos.length, 2);\n // 4 faces of slab have material1, 2 faces have material0.\n // Triangulated, should split into info with 24 indices and info with 12 indices.\n assert.strictEqual(infos.length, 2);\n assert.strictEqual(infos[0].elementId, geometricElementId);\n assert.strictEqual(infos[0].mesh.indices.length, 24);\n assert.strictEqual(infos[0].color, materialColor1.tbgr);\n assert.strictEqual(infos[1].elementId, geometricElementId);\n assert.strictEqual(infos[1].mesh.indices.length, 12);\n assert.strictEqual(infos[1].color, materialColor0.tbgr);\n });\n\n let textureIdString: undefined | string;\n function getTextureId(): string {\n if (textureIdString !== undefined)\n return textureIdString;\n // This is an encoded png containing a 3x3 square with white in top left pixel, blue in middle pixel, and green in\n // bottom right pixel. The rest of the square is red.\n const pngData = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 3, 0, 0, 0, 3, 8, 2, 0, 0, 0, 217,\n 74, 34, 232, 0, 0, 0, 1, 115, 82, 71, 66, 0, 174, 206, 28, 233, 0, 0, 0, 4, 103, 65, 77, 65, 0, 0, 177, 143, 11, 252,\n 97, 5, 0, 0, 0, 9, 112, 72, 89, 115, 0, 0, 14, 195, 0, 0, 14, 195, 1, 199, 111, 168, 100, 0, 0, 0, 24, 73, 68, 65,\n 84, 24, 87, 99, 248, 15, 4, 12, 12, 64, 4, 198, 64, 46, 132, 5, 162, 254, 51, 0, 0, 195, 90, 10, 246, 127, 175, 154, 145, 0,\n 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130,\n ]);\n return textureIdString = Texture.insertTexture(iModel, IModel.dictionaryId, \"test-texture\", ImageSourceFormat.Png, pngData);\n }\n\n it(\"handles materials with textures\", () => {\n const textureId = getTextureId();\n const materialId = insertRenderMaterialWithTexture(\"test-material-2\", textureId);\n const elementColor = ColorDef.fromString(\"aquamarine\");\n\n const builder = new GeometryStreamBuilder();\n const geometryParams = new GeometryParams(seedCategory);\n geometryParams.materialId = materialId;\n geometryParams.lineColor = elementColor; // element color should still come through with no material color set\n builder.appendGeometryParamsChange(geometryParams);\n builder.appendGeometry(Sphere.createCenterRadius(Point3d.createZero(), 1));\n const geometricElementId = insertPhysicalElement(builder.geometryStream);\n\n const infos: ExportGraphicsInfo[] = [];\n const exportGraphicsOptions: ExportGraphicsOptions = {\n elementIdArray: [geometricElementId],\n onGraphics: (info: ExportGraphicsInfo) => infos.push(info),\n };\n\n const exportStatus = iModel.exportGraphics(exportGraphicsOptions);\n assert.strictEqual(exportStatus, DbResult.BE_SQLITE_OK);\n assert.strictEqual(infos.length, 1);\n assert.strictEqual(infos[0].elementId, geometricElementId);\n assert.strictEqual(infos[0].materialId, materialId);\n assert.strictEqual(infos[0].textureId, textureId);\n assert.strictEqual(infos[0].color, elementColor.tbgr);\n });\n\n it(\"creates meshes with expected parameters\", () => {\n const makeTriangle = (data: Float32Array, i0: number, i1: number, i2: number, dim: 2 | 3): number[] => {\n const tri: number[] = [];\n for (const i of [i0, i1, i2])\n for (let j = 0; j < dim; ++j)\n tri.push(data[dim * i + j]);\n return tri;\n };\n\n const makeFacet = (builder: PolyfaceBuilder, xyz: Float32Array, normals: Float32Array, uv: Float32Array, i0: number, i1: number, i2: number) => {\n builder.addFacetFromGrowableArrays(\n GrowableXYZArray.create(makeTriangle(xyz, i0, i1, i2, 3)),\n GrowableXYZArray.create(makeTriangle(normals, i0, i1, i2, 3)),\n GrowableXYArray.create(makeTriangle(uv, i0, i1, i2, 2)),\n undefined, // no colors\n );\n };\n\n const negateV = (param: number, index: number): number => {\n return (index % 2) ? 1 - param : param;\n };\n\n const unNegateV = (param: number, index: number): number => {\n return (index % 2) ? 2 - param : param;\n };\n\n /** return 2x2 array of uvParams: [vNegate][meters] given raw uv and the [1][1] entry */\n const mutateUV = (uvRaw: Float32Array, uvVNegatedMeters: Float32Array): Float32Array[][] => {\n const uvArray: Float32Array[][] = [[],[]];\n uvArray[1].push(Float32Array.from(uvRaw, negateV));\n uvArray[1].push(uvVNegatedMeters);\n for (let i = 0; i < 2; ++i)\n uvArray[0].push(Float32Array.from(uvArray[1][i], unNegateV));\n return uvArray;\n };\n\n const materials: Id64String[][] = [[\"\",\"\"], [\"\",\"\"]];\n const getMaterial = (vNegate: boolean, meters: boolean): Id64String => {\n const i = vNegate ? 1 : 0;\n const j = meters ? 1 : 0;\n if (materials[i][j] !== \"\")\n return materials[i][j];\n const matName = `test-material-${vNegate ? `vScaleMinus1` : `vScale1`}-${meters ? `meters` : `relative`}`;\n const matScale = vNegate ? [1, -1] : [1, 1];\n const matUnits = meters ? TextureMapUnits.Meters : TextureMapUnits.Relative;\n return materials[i][j] = insertRenderMaterialWithTexture(matName, getTextureId(), matScale, matUnits);\n };\n\n const triangleBuilder = PolyfaceBuilder.create();\n triangleBuilder.options.needParams = triangleBuilder.options.needNormals = true;\n const triangleIndices = new Int32Array([0, 1, 2]);\n const triangleXYZ = new Float32Array([1, 0, 1, 0, 0, -1, -1, 0, 1]);\n const triangleNormals = new Float32Array([0, 1, 0, 0, 1, 0, 0, 1, 0]);\n const triangleUV = new Float32Array([1, 1, 0, 0, 0, 1]);\n const triangleUVScaled = new Float32Array([2, 1 - Math.sqrt(5), 0, 1, 0, 1 - Math.sqrt(5)]);\n for (let i = 0; i < triangleIndices.length; i += 3)\n makeFacet(triangleBuilder, triangleXYZ, triangleNormals, triangleUV, triangleIndices[i], triangleIndices[i + 1], triangleIndices[i + 2]);\n const triangle = triangleBuilder.claimPolyface();\n const triangleParams = mutateUV(triangleUV, triangleUVScaled);\n\n const cubeBuilder = PolyfaceBuilder.create();\n cubeBuilder.options.needParams = cubeBuilder.options.needNormals = true;\n const cubeIndices = new Int32Array([0, 1, 2, 2, 1, 3, 4, 5, 6, 6, 5, 7, 8, 9, 10, 10, 9, 11, 12, 13, 14, 14, 13, 15, 16, 17, 18, 18, 17, 19, 20, 21, 22, 22, 21, 23]);\n const cubeXYZ = new Float32Array([-1, 1, -1, -1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, -1, 1, -1, -1, 1, -1, 1, 1, -1, 1, -1, -1, -1, 1, -1, -1, -1, 1, -1, -1, 1, -1, 1, -1, -1, -1, -1, -1, 1, 1, 1, -1, 1, 1, 1, 1, -1, -1, 1, -1, 1, -1, 1, -1, 1, 1, -1, -1, -1, -1, 1, -1, -1]);\n const cubeNormals = new Float32Array([0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1]);\n const cubeUV = new Float32Array([0.875, 0.5, 0.875, 0.25, 0.625, 0.5, 0.625, 0.25, 0.625, 0.25, 0.625, 0, 0.375, 0.25, 0.375, 0, 0.625, 1, 0.625, 0.75, 0.375, 1, 0.375, 0.75, 0.375, 0.5, 0.375, 0.25, 0.125, 0.5, 0.125, 0.25, 0.625, 0.5, 0.625, 0.25, 0.375, 0.5, 0.375, 0.25, 0.625, 0.75, 0.625, 0.5, 0.375, 0.75, 0.375, 0.5]);\n const cubeUVScaled = new Float32Array([5.25, -3, 5.25, -1, 3.75, -3, 3.75, -1, 3.75, -1, 3.75, 1, 2.25, -1, 2.25, 1, 3.75, -7, 3.75, -5, 2.25, -7, 2.25, -5, 2.25, -3, 2.25, -1, 0.75, -3, 0.75, -1, 3.75, -3, 3.75, -1, 2.25, -3, 2.25, -1, 3.75, -5, 3.75, -3, 2.25, -5, 2.25, -3]);\n for (let i = 0; i < cubeIndices.length; i += 3)\n makeFacet(cubeBuilder, cubeXYZ, cubeNormals, cubeUV, cubeIndices[i], cubeIndices[i + 1], cubeIndices[i + 2]);\n const cube = cubeBuilder.claimPolyface();\n const cubeParams = mutateUV(cubeUV, cubeUVScaled);\n\n const testUVParamExport = (geomId: Id64String, expectedParams: Float32Array) => {\n const infos: ExportGraphicsInfo[] = [];\n const exportGraphicsOptions: ExportGraphicsOptions = {\n elementIdArray: [geomId],\n onGraphics: (info: ExportGraphicsInfo) => infos.push(info),\n };\n const exportStatus = iModel.exportGraphics(exportGraphicsOptions);\n assert.strictEqual(exportStatus, DbResult.BE_SQLITE_OK);\n assert.strictEqual(infos.length, 1);\n assert.strictEqual(infos[0].mesh.params.length, expectedParams.length);\n assert.deepStrictEqual(infos[0].mesh.params, expectedParams, \"exported params as expected\");\n };\n\n const testMeshWithTexture = (geom: GeometryQuery, expectedUV: Float32Array, material: string) => {\n const streamBuilder = new GeometryStreamBuilder();\n const geometryParams = new GeometryParams(seedCategory);\n geometryParams.materialId = material;\n streamBuilder.appendGeometryParamsChange(geometryParams);\n streamBuilder.appendGeometry(geom);\n const geomId = insertPhysicalElement(streamBuilder.geometryStream);\n testUVParamExport(geomId, expectedUV);\n };\n\n const testMesh = (geom: GeometryQuery, expectedParams: Float32Array[][]) => {\n for (const vNegate of [false, true])\n for (const meters of [false, true])\n testMeshWithTexture(geom, expectedParams[vNegate ? 1 : 0][meters ? 1 : 0], getMaterial(vNegate, meters));\n };\n\n testMesh(triangle, triangleParams);\n testMesh(cube, cubeParams);\n });\n\n it(\"verifies export of 3d linestyle as parts\", () => {\n const resolvedBimFile = IModelTestUtils.resolveAssetFile(\"3dLinestyle.bim\");\n assert.isNotEmpty(resolvedBimFile);\n const myIModel = SnapshotDb.openFile(resolvedBimFile);\n\n const elementIdArray: Id64Array = [\"0x5a\"];\n const infos: ExportGraphicsInfo[] = [];\n const partInstanceArray: ExportPartInstanceInfo[] = [];\n const onGraphics: ExportGraphicsFunction = info => infos.push(info);\n const countPartIds = (partId: string) => partInstanceArray.reduce((sum, instance) => sum + (instance.partId === partId ? 1 : 0), 0);\n\n // exportGraphics populates partInstanceArray with any part instances found; onGraphics gets non-part meshes\n assert.strictEqual(DbResult.BE_SQLITE_OK, myIModel.exportGraphics({elementIdArray, onGraphics, partInstanceArray}), \"export with instancing successful\");\n assert.strictEqual(infos.length, 2); // TODO: infos looks like the part 0x4c transformed. Why isn't this geometry instanced and infos empty?\n assert.strictEqual(partInstanceArray.length, 144, \"export with instancing returned expected # part instances\");\n assert.strictEqual(142, countPartIds('0x4c'), \"guardrail geometry has expected # post assembly instances\");\n assert.strictEqual(1, countPartIds('0x4d'), \"guardrail geometry has expected # start assembly instances\");\n assert.strictEqual(1, countPartIds('0x4e'), \"guardrail geometry has expected # end assembly instances\");\n // TODO: why do parts 0x4d and 0x4e look identical?\n\n myIModel.close();\n });\n\n it(\"creates meshes with vertices shared as expected\", () => {\n const builder = new GeometryStreamBuilder();\n // 1, 1, 1 box\n const box = Box.createDgnBox(Point3d.createZero(), Vector3d.create(1, 0, 0), Vector3d.create(0, 1, 0), Point3d.create(0, 0, 1), 1, 1, 1, 1, true);\n assert.isDefined(box);\n builder.appendGeometry(box!);\n const newId = insertPhysicalElement(builder.geometryStream);\n\n const infos: ExportGraphicsInfo[] = [];\n const exportGraphicsOptions: ExportGraphicsOptions = {\n elementIdArray: [newId],\n onGraphics: (info: ExportGraphicsInfo) => infos.push(info),\n };\n\n // exportGraphics is expected to compress vertices to share them where point, normal and param are all equal.\n // So, given a triangulated box, the two vertices along the diagonal should be shared inside the face (where the normal matches)\n // but not across any of the neighboring perpendicular faces.\n // For a box, 6 faces with 4 unique vertices each made up of 3 (xyz) values means we should expect points.length === 72\n // Without compression, we'd expect to see points.length === 108\n const exportStatus = iModel.exportGraphics(exportGraphicsOptions);\n assert.strictEqual(exportStatus, DbResult.BE_SQLITE_OK);\n assert.strictEqual(infos.length, 1);\n const numUniqueVertices = 24;\n assert.strictEqual(infos[0].mesh.points.length, numUniqueVertices * 3);\n assert.strictEqual(infos[0].mesh.normals.length, numUniqueVertices * 3);\n assert.strictEqual(infos[0].mesh.params.length, numUniqueVertices * 2);\n });\n\n it(\"creates line graphics as expected\", () => {\n const elementColor = ColorDef.fromString(\"blanchedAlmond\");\n const builder = new GeometryStreamBuilder();\n const geometryParams = new GeometryParams(seedCategory);\n geometryParams.lineColor = elementColor;\n builder.appendGeometryParamsChange(geometryParams);\n builder.appendGeometry(LineString3d.createPoints([Point3d.createZero(), Point3d.create(1, 0, 0)]));\n\n const newId = insertPhysicalElement(builder.geometryStream);\n\n const infos: ExportGraphicsInfo[] = [];\n const lineInfos: ExportLinesInfo[] = [];\n const exportGraphicsOptions: ExportGraphicsOptions = {\n elementIdArray: [newId],\n onGraphics: (info: ExportGraphicsInfo) => infos.push(info),\n onLineGraphics: (lineInfo: ExportLinesInfo) => lineInfos.push(lineInfo),\n };\n\n const exportStatus = iModel.exportGraphics(exportGraphicsOptions);\n assert.strictEqual(exportStatus, DbResult.BE_SQLITE_OK);\n assert.strictEqual(infos.length, 0);\n assert.strictEqual(lineInfos.length, 1);\n assert.strictEqual(lineInfos[0].color, elementColor.tbgr);\n assert.deepStrictEqual(Array.from(lineInfos[0].lines.indices), [0, 1]);\n assert.deepStrictEqual(Array.from(lineInfos[0].lines.points), [0, 0, 0, 1, 0, 0]);\n });\n\n it(\"process multiple elements in one call\", () => {\n const builder0 = new GeometryStreamBuilder();\n builder0.appendGeometry(Loop.createPolygon([Point3d.createZero(), Point3d.create(1, 0, 0), Point3d.create(1, 1, 0), Point3d.create(0, 1, 0)]));\n const id0 = insertPhysicalElement(builder0.geometryStream);\n\n const builder1 = new GeometryStreamBuilder();\n builder1.appendGeometry(Loop.createPolygon([Point3d.createZero(), Point3d.create(-1, 0, 0), Point3d.create(-1, -1, 0), Point3d.create(0, -1, 0)]));\n const id1 = insertPhysicalElement(builder1.geometryStream);\n\n const infos: ExportGraphicsInfo[] = [];\n const exportGraphicsOptions: ExportGraphicsOptions = {\n elementIdArray: [id0, id1],\n onGraphics: (info: ExportGraphicsInfo) => infos.push(info),\n };\n\n const exportStatus = iModel.exportGraphics(exportGraphicsOptions);\n assert.strictEqual(exportStatus, DbResult.BE_SQLITE_OK);\n assert.strictEqual(infos.length, 2);\n // Sorting since output order is arbitrary\n assert.deepStrictEqual([infos[0].elementId, infos[1].elementId].sort(), [id0, id1].sort());\n });\n\n it(\"produces expected indices, points, normals, params in smoketest\", () => {\n const builder = new GeometryStreamBuilder();\n builder.appendGeometry(Loop.createPolygon([Point3d.createZero(), Point3d.create(1, 0, 0), Point3d.create(1, 1, 0), Point3d.create(0, 1, 0)]));\n const newId = insertPhysicalElement(builder.geometryStream);\n\n const infos: ExportGraphicsInfo[] = [];\n const exportGraphicsOptions: ExportGraphicsOptions = {\n elementIdArray: [newId],\n onGraphics: (info: ExportGraphicsInfo) => infos.push(info),\n };\n\n const exportStatus = iModel.exportGraphics(exportGraphicsOptions);\n assert.strictEqual(exportStatus, DbResult.BE_SQLITE_OK);\n assert.strictEqual(infos.length, 1);\n\n // The ordering of these values is arbitrary, but should be consistent between runs.\n // Baselines may need to be updated if native GeomLibs is refactored, but:\n // * Lengths of all fields should remain the same\n // * Actual point, normal and param values should remain the same\n assert.strictEqual(infos[0].mesh.indices.length, 6);\n assert.strictEqual(infos[0].mesh.points.length, 12);\n assert.strictEqual(infos[0].mesh.normals.length, 12);\n assert.strictEqual(infos[0].mesh.params.length, 8);\n\n assert.deepStrictEqual(Array.from(infos[0].mesh.indices), [0, 1, 2, 1, 0, 3]);\n assert.deepStrictEqual(Array.from(infos[0].mesh.points), [1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0]);\n assert.deepStrictEqual(Array.from(infos[0].mesh.normals), [0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1]);\n assert.deepStrictEqual(Array.from(infos[0].mesh.params), [1, 0, 0, 1, 0, 0, 1, 1]);\n });\n\n it(\"sets two-sided flag correctly for closed geometry\", () => {\n const builder = new GeometryStreamBuilder();\n const box = Box.createDgnBox(Point3d.createZero(), Vector3d.create(1, 0, 0), Vector3d.create(0, 1, 0), Point3d.create(0, 0, 1), 1, 1, 1, 1, true);\n assert.isDefined(box);\n builder.appendGeometry(box!);\n const newId = insertPhysicalElement(builder.geometryStream);\n\n const infos: ExportGraphicsInfo[] = [];\n const exportGraphicsOptions: ExportGraphicsOptions = {\n elementIdArray: [newId],\n onGraphics: (info: ExportGraphicsInfo) => infos.push(info),\n };\n\n const exportStatus = iModel.exportGraphics(exportGraphicsOptions);\n assert.strictEqual(exportStatus, DbResult.BE_SQLITE_OK);\n assert.strictEqual(infos.length, 1);\n assert.isFalse(infos[0].mesh.isTwoSided);\n });\n\n it(\"sets two-sided flag correctly for open geometry\", () => {\n const builder = new GeometryStreamBuilder();\n const quad = Loop.createPolygon([Point3d.createZero(), Point3d.create(2, 0, 0), Point3d.create(2, 2, 0), Point3d.create(0, 2, 0)]);\n builder.appendGeometry(quad);\n const newId = insertPhysicalElement(builder.geometryStream);\n\n const infos: ExportGraphicsInfo[] = [];\n const exportGraphicsOptions: ExportGraphicsOptions = {\n elementIdArray: [newId],\n onGraphics: (info: ExportGraphicsInfo) => infos.push(info),\n };\n\n const exportStatus = iModel.exportGraphics(exportGraphicsOptions);\n assert.strictEqual(exportStatus, DbResult.BE_SQLITE_OK);\n assert.strictEqual(infos.length, 1);\n assert.isTrue(infos[0].mesh.isTwoSided);\n });\n\n it(\"applies chordTol\", () => {\n const builder = new GeometryStreamBuilder();\n builder.appendGeometry(Sphere.createCenterRadius(Point3d.createZero(), 1));\n const newId = insertPhysicalElement(builder.geometryStream);\n\n const coarseInfos: ExportGraphicsInfo[] = [];\n iModel.exportGraphics({\n elementIdArray: [newId],\n onGraphics: (info: ExportGraphicsInfo) => coarseInfos.push(info),\n chordTol: 1,\n });\n\n const fineInfos: ExportGraphicsInfo[] = [];\n iModel.exportGraphics({\n elementIdArray: [newId],\n onGraphics: (info: ExportGraphicsInfo) => fineInfos.push(info),\n chordTol: 0.001,\n });\n\n assert.strictEqual(coarseInfos.length, 1);\n assert.strictEqual(fineInfos.length, 1);\n assert.isTrue(coarseInfos[0].mesh.indices.length < fineInfos[0].mesh.indices.length);\n });\n\n it(\"applies angleTol\", () => {\n const builder = new GeometryStreamBuilder();\n builder.appendGeometry(Sphere.createCenterRadius(Point3d.createZero(), 1));\n const newId = insertPhysicalElement(builder.geometryStream);\n\n const coarseInfos: ExportGraphicsInfo[] = [];\n iModel.exportGraphics({\n elementIdArray: [newId],\n onGraphics: (info: ExportGraphicsInfo) => coarseInfos.push(info),\n angleTol: 30 * Angle.radiansPerDegree,\n });\n\n const fineInfos: ExportGraphicsInfo[] = [];\n iModel.exportGraphics({\n elementIdArray: [newId],\n onGraphics: (info: ExportGraphicsInfo) => fineInfos.push(info),\n angleTol: 15 * Angle.radiansPerDegree,\n });\n\n assert.strictEqual(coarseInfos.length, 1);\n assert.strictEqual(fineInfos.length, 1);\n assert.isTrue(coarseInfos[0].mesh.indices.length < fineInfos[0].mesh.indices.length);\n });\n\n it(\"applies decimationTol\", () => {\n const strokeOptions = StrokeOptions.createForCurves();\n strokeOptions.chordTol = 0.001;\n const polyfaceBuilder = PolyfaceBuilder.create(strokeOptions);\n polyfaceBuilder.addSphere(Sphere.createCenterRadius(Point3d.createZero(), 1));\n\n const gsBuilder = new GeometryStreamBuilder();\n gsBuilder.appendGeometry(polyfaceBuilder.claimPolyface());\n const newId = insertPhysicalElement(gsBuilder.geometryStream);\n\n const noDecimationInfos: ExportGraphicsInfo[] = [];\n const noDecimationStatus = iModel.exportGraphics({\n elementIdArray: [newId],\n onGraphics: (info: ExportGraphicsInfo) => noDecimationInfos.push(info),\n });\n\n assert.strictEqual(noDecimationStatus, DbResult.BE_SQLITE_OK);\n assert.strictEqual(noDecimationInfos.length, 1);\n\n const decimationInfos: ExportGraphicsInfo[] = [];\n const decimationStatus = iModel.exportGraphics({\n elementIdArray: [newId],\n onGraphics: (info: ExportGraphicsInfo) => decimationInfos.push(info),\n decimationTol: 0.1,\n });\n\n assert.strictEqual(decimationStatus, DbResult.BE_SQLITE_OK);\n assert.strictEqual(decimationInfos.length, 1);\n assert.isTrue(decimationInfos[0].mesh.indices < noDecimationInfos[0].mesh.indices);\n });\n\n it(\"applies maxEdgeLength\", () => {\n const builder = new GeometryStreamBuilder();\n const quad = Loop.createPolygon([Point3d.createZero(), Point3d.create(2, 0, 0), Point3d.create(2, 2, 0), Point3d.create(0, 2, 0)]);\n builder.appendGeometry(quad);\n const newId = insertPhysicalElement(builder.geometryStream);\n\n const infos: ExportGraphicsInfo[] = [];\n const exportGraphicsOptions: ExportGraphicsOptions = {\n elementIdArray: [newId],\n onGraphics: (info: ExportGraphicsInfo) => infos.push(info),\n maxEdgeLength: 1,\n };\n\n const exportStatus = iModel.exportGraphics(exportGraphicsOptions);\n assert.strictEqual(exportStatus, DbResult.BE_SQLITE_OK);\n assert.strictEqual(infos.length, 1);\n assert.isTrue(infos[0].mesh.indices.length > 6); // not validating particulars of subdivision, just that the option is applied\n });\n\n it(\"applies minBRepFeatureSize\", () => {\n const builder = new GeometryStreamBuilder();\n // 4x4x4m slab with a ~1x1x1cm slab cut out of it.\n const testBrep: { data: string } = JSON.parse(\n fs.readFileSync(IModelTestUtils.resolveAssetFile(\"brep-small-feature.json\"), { encoding: \"utf8\" }),\n );\n builder.appendBRepData(testBrep);\n const newId = insertPhysicalElement(builder.geometryStream);\n\n const noMinSizeInfos: ExportGraphicsInfo[] = [];\n const noMinSizeStatus = iModel.exportGraphics({\n elementIdArray: [newId],\n onGraphics: (info: ExportGraphicsInfo) => noMinSizeInfos.push(info),\n });\n assert.strictEqual(noMinSizeStatus, DbResult.BE_SQLITE_OK);\n assert.strictEqual(noMinSizeInfos.length, 1);\n\n const minSizeInfos: ExportGraphicsInfo[] = [];\n const minSizeStatus = iModel.exportGraphics({\n elementIdArray: [newId],\n onGraphics: (info: ExportGraphicsInfo) => minSizeInfos.push(info),\n minBRepFeatureSize: 0.1,\n });\n assert.strictEqual(minSizeStatus, DbResult.BE_SQLITE_OK);\n assert.strictEqual(minSizeInfos.length, 1);\n\n assert.strictEqual(minSizeInfos[0].mesh.indices.length, 36); // should be a simple cube\n assert.isTrue(minSizeInfos[0].mesh.indices.length < noMinSizeInfos[0].mesh.indices.length);\n });\n\n it(\"applies minLineStyleComponentSize\", () => {\n const partBuilder = new GeometryStreamBuilder();\n const partParams = new GeometryParams(Id64.invalid); // category won't be used\n\n // Create line style with small component - logic copied from line style tests in GeometryStream.test.ts\n partParams.fillDisplay = FillDisplay.Always;\n partBuilder.appendGeometryParamsChange(partParams);\n partBuilder.appendGeometry(Loop.create(LineString3d.create(Point3d.create(0.1, 0, 0), Point3d.create(0, -0.05, 0), Point3d.create(0, 0.05, 0), Point3d.create(0.1, 0, 0))));\n const partProps: GeometryPartProps = {\n classFullName: GeometryPart.classFullName,\n model: IModel.dictionaryId,\n code: Code.createEmpty(),\n geom: partBuilder.geometryStream,\n };\n const geomPartId = iModel.elements.insertElement(partProps);\n\n const pointSymbolData = LineStyleDefinition.Utils.createPointSymbolComponent(iModel, { geomPartId }); // base and size will be set automatically...\n assert.isTrue(undefined !== pointSymbolData);\n\n const strokePointData = LineStyleDefinition.Utils.createStrokePointComponent(iModel, { descr: \"TestArrowHead\", lcId: 0, lcType: LineStyleDefinition.ComponentType.Internal, symbols: [{ symId: pointSymbolData!.compId, strokeNum: -1, mod1: LineStyleDefinition.SymbolOptions.CurveEnd }] });\n assert.isTrue(undefined !== strokePointData);\n\n const compoundData = LineStyleDefinition.Utils.createCompoundComponent(iModel, { comps: [{ id: strokePointData.compId, type: strokePointData.compType }, { id: 0, type: LineStyleDefinition.ComponentType.Internal }] });\n assert.isTrue(undefined !== compoundData);\n\n const styleId = LineStyleDefinition.Utils.createStyle(iModel, IModel.dictionaryId, \"TestArrowStyle\", compoundData);\n assert.isTrue(Id64.isValidId64(styleId));\n\n const builder = new GeometryStreamBuilder();\n const geometryParams = new GeometryParams(seedCategory);\n geometryParams.styleInfo = new LineStyle.Info(styleId);\n builder.appendGeometryParamsChange(geometryParams);\n builder.appendGeometry(LineSegment3d.create(Point3d.createZero(), Point3d.create(10, 10, 0)));\n const elementId = insertPhysicalElement(builder.geometryStream);\n\n // Should include everything with no minimum component size\n const noMinInfos: ExportGraphicsInfo[] = [];\n const noMinLineInfos: ExportLinesInfo[] = [];\n let exportStatus = iModel.exportGraphics({\n elementIdArray: [elementId],\n onGraphics: (info: ExportGraphicsInfo) => noMinInfos.push(info),\n onLineGraphics: (lineInfo: ExportLinesInfo) => noMinLineInfos.push(lineInfo),\n });\n assert.strictEqual(exportStatus, DbResult.BE_SQLITE_OK);\n assert.strictEqual(noMinInfos.length, 1);\n assert.strictEqual(noMinLineInfos.length, 1);\n assert.strictEqual(noMinInfos[0].mesh.indices.length, 3);\n assert.strictEqual(noMinLineInfos[0].lines.indices.length, 2);\n\n // Should filter out arrow shape with large minimum component size\n const largeMinInfos: ExportGraphicsInfo[] = [];\n const largeMinLineInfos: ExportLinesInfo[] = [];\n exportStatus = iModel.exportGraphics({\n elementIdArray: [elementId],\n onGraphics: (info: ExportGraphicsInfo) => largeMinInfos.push(info),\n onLineGraphics: (lineInfo: ExportLinesInfo) => largeMinLineInfos.push(lineInfo),\n minLineStyleComponentSize: 0.5,\n });\n assert.strictEqual(exportStatus, DbResult.BE_SQLITE_OK);\n assert.strictEqual(largeMinInfos.length, 0);\n assert.strictEqual(largeMinLineInfos.length, 1);\n assert.strictEqual(largeMinLineInfos[0].lines.indices.length, 2);\n\n // Should include arrow shape with small minimum component size\n const smallMinInfos: ExportGraphicsInfo[] = [];\n const smallMinLineInfos: ExportLinesInfo[] = [];\n exportStatus = iModel.exportGraphics({\n elementIdArray: [elementId],\n onGraphics: (info: ExportGraphicsInfo) => smallMinInfos.push(info),\n onLineGraphics: (lineInfo: ExportLinesInfo) => smallMinLineInfos.push(lineInfo),\n minLineStyleComponentSize: 0.01,\n });\n assert.strictEqual(exportStatus, DbResult.BE_SQLITE_OK);\n assert.strictEqual(smallMinInfos.length, 1);\n assert.strictEqual(smallMinLineInfos.length, 1);\n assert.strictEqual(smallMinInfos[0].mesh.indices.length, 3);\n assert.strictEqual(smallMinLineInfos[0].lines.indices.length, 2);\n });\n\n it(\"applies GeometryPart transforms as expected\", () => {\n const partBuilder = new GeometryStreamBuilder();\n partBuilder.appendGeometry(Loop.createPolygon([Point3d.createZero(), Point3d.create(1, 0, 0), Point3d.create(1, 1, 0), Point3d.create(0, 1, 0)]));\n const partProps: GeometryPartProps = {\n classFullName: GeometryPart.classFullName,\n model: IModel.dictionaryId,\n code: Code.createEmpty(),\n geom: partBuilder.geometryStream,\n };\n const partId = iModel.elements.insertElement(partProps);\n\n const partInstanceBuilder = new GeometryStreamBuilder();\n partInstanceBuilder.appendGeometryPart3d(partId, Point3d.create(7, 8, 9));\n const partInstanceId = insertPhysicalElement(partInstanceBuilder.geometryStream);\n\n const infos: ExportGraphicsInfo[] = [];\n const exportGraphicsOptions: ExportGraphicsOptions = {\n elementIdArray: [partInstanceId],\n onGraphics: (info: ExportGraphicsInfo) => infos.push(info),\n };\n\n const exportStatus = iModel.exportGraphics(exportGraphicsOptions);\n assert.strictEqual(exportStatus, DbResult.BE_SQLITE_OK);\n assert.strictEqual(infos.length, 1);\n\n // The ordering of these values is arbitrary, but should be consistent between runs.\n // Baselines may need to be updated if native GeomLibs is refactored, but:\n // * Lengths of all fields should remain the same\n // * Actual point, normal and param values should remain the same\n assert.strictEqual(infos[0].mesh.indices.length, 6);\n assert.strictEqual(infos[0].mesh.points.length, 12);\n assert.strictEqual(infos[0].mesh.normals.length, 12);\n assert.strictEqual(infos[0].mesh.params.length, 8);\n\n assert.deepStrictEqual(Array.from(infos[0].mesh.indices), [0, 1, 2, 1, 0, 3]);\n assert.deepStrictEqual(Array.from(infos[0].mesh.points), [8, 8, 9, 7, 9, 9, 7, 8, 9, 8, 9, 9]);\n assert.deepStrictEqual(Array.from(infos[0].mesh.normals), [0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1]);\n assert.deepStrictEqual(Array.from(infos[0].mesh.params), [1, 0, 0, 1, 0, 0, 1, 1]);\n });\n\n it(\"exposes instances through partInstanceArray and exportPartGraphics\", () => {\n const partBuilder = new GeometryStreamBuilder();\n partBuilder.appendGeometry(Loop.createPolygon([Point3d.createZero(), Point3d.create(1, 0, 0), Point3d.create(1, 1, 0), Point3d.create(0, 1, 0)]));\n const partProps: GeometryPartProps = {\n classFullName: GeometryPart.classFullName,\n model: IModel.dictionaryId,\n code: Code.createEmpty(),\n geom: partBuilder.geometryStream,\n };\n const partId = iModel.elements.insertElement(partProps);\n\n const partInstanceBuilder = new GeometryStreamBuilder();\n partInstanceBuilder.appendGeometryPart3d(partId, Point3d.create(7, 8, 9));\n const partInstanceId = insertPhysicalElement(partInstanceBuilder.geometryStream);\n\n const infos: ExportGraphicsInfo[] = [];\n const partInstanceArray: ExportPartInstanceInfo[] = [];\n const exportGraphicsOptions: ExportGraphicsOptions = {\n elementIdArray: [partInstanceId],\n onGraphics: (info: ExportGraphicsInfo) => infos.push(info),\n partInstanceArray,\n };\n\n const exportStatus = iModel.exportGraphics(exportGraphicsOptions);\n assert.strictEqual(exportStatus, DbResult.BE_SQLITE_OK);\n assert.strictEqual(infos.length, 0);\n assert.strictEqual(partInstanceArray.length, 1);\n\n assert.strictEqual(partInstanceArray[0].partId, partId);\n assert.strictEqual(partInstanceArray[0].partInstanceId, partInstanceId);\n assert.isDefined(partInstanceArray[0].transform);\n assert.deepStrictEqual(Array.from(partInstanceArray[0].transform!), [1, 0, 0, 7, 0, 1, 0, 8, 0, 0, 1, 9]);\n\n const partInfos: ExportPartInfo[] = [];\n const exportPartStatus = iModel.exportPartGraphics({\n elementId: partInstanceArray[0].partId,\n displayProps: partInstanceArray[0].displayProps,\n onPartGraphics: (partInfo) => partInfos.push(partInfo),\n });\n\n assert.strictEqual(exportPartStatus, DbResult.BE_SQLITE_OK);\n assert.strictEqual(partInfos.length, 1);\n\n // The ordering of these values is arbitrary, but should be consistent between runs.\n // Baselines may need to be updated if native GeomLibs is refactored, but:\n // * Lengths of all fields should remain the same\n // * Actual point, normal and param values should remain the same\n assert.strictEqual(partInfos[0].mesh.indices.length, 6);\n assert.strictEqual(partInfos[0].mesh.points.length, 12);\n assert.strictEqual(partInfos[0].mesh.normals.length, 12);\n assert.strictEqual(partInfos[0].mesh.params.length, 8);\n\n assert.deepStrictEqual(Array.from(partInfos[0].mesh.indices), [0, 1, 2, 1, 0, 3]);\n assert.deepStrictEqual(Array.from(partInfos[0].mesh.points), [1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0]);\n assert.deepStrictEqual(Array.from(partInfos[0].mesh.normals), [0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1]);\n assert.deepStrictEqual(Array.from(partInfos[0].mesh.params), [1, 0, 0, 1, 0, 0, 1, 1]);\n });\n\n it(\"handles single geometryClass in GeometryStream\", () => {\n const builder = new GeometryStreamBuilder();\n const geometryParams = new GeometryParams(seedCategory);\n geometryParams.geometryClass = GeometryClass.Construction;\n builder.appendGeometryParamsChange(geometryParams);\n builder.appendGeometry(Sphere.createCenterRadius(Point3d.createZero(), 1));\n const newId = insertPhysicalElement(builder.geometryStream);\n\n const infos: ExportGraphicsInfo[] = [];\n const exportGraphicsOptions: ExportGraphicsOptions = {\n elementIdArray: [newId],\n onGraphics: (info: ExportGraphicsInfo) => infos.push(info),\n };\n\n const exportStatus = iModel.exportGraphics(exportGraphicsOptions);\n assert.strictEqual(exportStatus, DbResult.BE_SQLITE_OK);\n assert.strictEqual(infos.length, 1);\n assert.strictEqual(infos[0].geometryClass, GeometryClass.Construction);\n });\n\n it(\"handles multiple geometryClass in GeometryStream\", () => {\n const builder = new GeometryStreamBuilder();\n const geometryParams = new GeometryParams(seedCategory);\n\n geometryParams.geometryClass = GeometryClass.Construction;\n builder.appendGeometryParamsChange(geometryParams);\n builder.appendGeometry(Sphere.createCenterRadius(Point3d.createZero(), 1));\n\n geometryParams.geometryClass = GeometryClass.Primary;\n builder.appendGeometryParamsChange(geometryParams);\n builder.appendGeometry(Box.createRange(Range3d.create(Point3d.createZero(), Point3d.create(1.0, 1.0, 1.0)), true)!);\n\n const newId = insertPhysicalElement(builder.geometryStream);\n\n const infos: ExportGraphicsInfo[] = [];\n const exportGraphicsOptions: ExportGraphicsOptions = {\n elementIdArray: [newId],\n onGraphics: (info: ExportGraphicsInfo) => infos.push(info),\n chordTol: 0.01,\n };\n\n const exportStatus = iModel.exportGraphics(exportGraphicsOptions);\n assert.strictEqual(exportStatus, DbResult.BE_SQLITE_OK);\n assert.strictEqual(infos.length, 2);\n\n // Sphere is construction, box is primary. Output order is arbitrary, use mesh size to figure out which is which.\n if (infos[0].mesh.indices.length > 36) {\n assert.strictEqual(infos[0].geometryClass, GeometryClass.Construction);\n assert.strictEqual(infos[1].geometryClass, GeometryClass.Primary);\n } else {\n assert.strictEqual(infos[0].geometryClass, GeometryClass.Primary);\n assert.strictEqual(infos[1].geometryClass, GeometryClass.Construction);\n }\n });\n\n it(\"handles geometryClass in lines\", () => {\n const builder = new GeometryStreamBuilder();\n const geometryParams = new GeometryParams(seedCategory);\n\n geometryParams.geometryClass = GeometryClass.Construction;\n builder.appendGeometryParamsChange(geometryParams);\n builder.appendGeometry(LineString3d.createPoints([Point3d.createZero(), Point3d.create(1, 0, 0)]));\n\n const newId = insertPhysicalElement(builder.geometryStream);\n\n const infos: ExportGraphicsInfo[] = [];\n const lineInfos: ExportLinesInfo[] = [];\n const exportGraphicsOptions: ExportGraphicsOptions = {\n elementIdArray: [newId],\n onGraphics: (info: ExportGraphicsInfo) => infos.push(info),\n onLineGraphics: (lineInfo: ExportLinesInfo) => lineInfos.push(lineInfo),\n chordTol: 0.01,\n };\n\n const exportStatus = iModel.exportGraphics(exportGraphicsOptions);\n assert.strictEqual(exportStatus, DbResult.BE_SQLITE_OK);\n assert.strictEqual(infos.length, 0);\n assert.strictEqual(lineInfos.length, 1);\n assert.strictEqual(lineInfos[0].geometryClass, GeometryClass.Construction);\n });\n\n it(\"handles geometryClass defined in parts\", () => {\n const partBuilder = new GeometryStreamBuilder();\n const partGeometryParams = new GeometryParams(Id64.invalid); // category unused for GeometryPart\n partGeometryParams.geometryClass = GeometryClass.Construction;\n partBuilder.appendGeometryParamsChange(partGeometryParams);\n partBuilder.appendGeometry(Sphere.createCenterRadius(Point3d.createZero(), 1));\n\n const partProps: GeometryPartProps = {\n classFullName: GeometryPart.classFullName,\n model: IModel.dictionaryId,\n code: Code.createEmpty(),\n geom: partBuilder.geometryStream,\n };\n const partId = iModel.elements.insertElement(partProps);\n\n const partInstanceBuilder = new GeometryStreamBuilder();\n partInstanceBuilder.appendGeometryPart3d(partId);\n const partInstanceId = insertPhysicalElement(partInstanceBuilder.geometryStream);\n\n const infos: ExportGraphicsInfo[] = [];\n const partInstanceArray: ExportPartInstanceInfo[] = [];\n const exportGraphicsOptions: ExportGraphicsOptions = {\n elementIdArray: [partInstanceId],\n onGraphics: (info: ExportGraphicsInfo) => infos.push(info),\n partInstanceArray,\n };\n\n const exportStatus = iModel.exportGraphics(exportGraphicsOptions);\n assert.strictEqual(exportStatus, DbResult.BE_SQLITE_OK);\n assert.strictEqual(infos.length, 0);\n assert.strictEqual(partInstanceArray.length, 1);\n\n const partInfos: ExportPartInfo[] = [];\n const exportPartStatus = iModel.exportPartGraphics({\n elementId: partInstanceArray[0].partId,\n displayProps: partInstanceArray[0].displayProps,\n onPartGraphics: (info: ExportPartInfo) => partInfos.push(info),\n });\n assert.strictEqual(exportPartStatus, DbResult.BE_SQLITE_OK);\n assert.strictEqual(partInfos.length, 1);\n assert.strictEqual(partInfos[0].geometryClass, GeometryClass.Construction);\n });\n\n it(\"handles geometryClass defined outside parts\", () => {\n const partBuilder = new GeometryStreamBuilder();\n partBuilder.appendGeometry(Sphere.createCenterRadius(Point3d.createZero(), 1));\n const partProps: GeometryPartProps = {\n classFullName: GeometryPart.classFullName,\n model: IModel.dictionaryId,\n code: Code.createEmpty(),\n geom: partBuilder.geometryStream,\n };\n const partId = iModel.elements.insertElement(partProps);\n\n const partInstanceBuilder = new GeometryStreamBuilder();\n const partInstanceGeometryParams = new GeometryParams(seedCategory);\n partInstanceGeometryParams.geometryClass = GeometryClass.Construction;\n partInstanceBuilder.appendGeometryParamsChange(partInstanceGeometryParams);\n partInstanceBuilder.appendGeometryPart3d(partId);\n const partInstanceId = insertPhysicalElement(partInstanceBuilder.geometryStream);\n\n const infos: ExportGraphicsInfo[] = [];\n const partInstanceArray: ExportPartInstanceInfo[] = [];\n const exportGraphicsOptions: ExportGraphicsOptions = {\n elementIdArray: [partInstanceId],\n onGraphics: (info: ExportGraphicsInfo) => infos.push(info),\n partInstanceArray,\n };\n\n const exportStatus = iModel.exportGraphics(exportGraphicsOptions);\n assert.strictEqual(exportStatus, DbResult.BE_SQLITE_OK);\n assert.strictEqual(infos.length, 0);\n assert.strictEqual(partInstanceArray.length, 1);\n assert.strictEqual(partInstanceArray[0].displayProps.geometryClass, GeometryClass.Construction);\n\n const partInfos: ExportPartInfo[] = [];\n const exportPartStatus = iModel.exportPartGraphics({\n elementId: partInstanceArray[0].partId,\n displayProps: partInstanceArray[0].displayProps,\n onPartGraphics: (info: ExportPartInfo) => partInfos.push(info),\n });\n assert.strictEqual(exportPartStatus, DbResult.BE_SQLITE_OK);\n assert.strictEqual(partInfos.length, 1);\n assert.strictEqual(partInfos[0].geometryClass, GeometryClass.Construction);\n });\n\n it(\"handles geometryClass for lines in parts\", () => {\n const partBuilder = new GeometryStreamBuilder();\n const partGeometryParams = new GeometryParams(Id64.invalid); // category unused for GeometryPart\n partGeometryParams.geometryClass = GeometryClass.Construction;\n partBuilder.appendGeometryParamsChange(partGeometryParams);\n partBuilder.appendGeometry(LineString3d.createPoints([Point3d.createZero(), Point3d.create(1, 0, 0)]));\n\n const partProps: GeometryPartProps = {\n classFullName: GeometryPart.classFullName,\n model: IModel.dictionaryId,\n code: Code.createEmpty(),\n geom: partBuilder.geometryStream,\n };\n const partId = iModel.elements.insertElement(partProps);\n\n const partInstanceBuilder = new GeometryStreamBuilder();\n partInstanceBuilder.appendGeometryPart3d(partId);\n const partInstanceId = insertPhysicalElement(partInstanceBuilder.geometryStream);\n\n const infos: ExportGraphicsInfo[] = [];\n const partInstanceArray: ExportPartInstanceInfo[] = [];\n const exportGraphicsOptions: ExportGraphicsOptions = {\n elementIdArray: [partInstanceId],\n onGraphics: (info: ExportGraphicsInfo) => infos.push(info),\n partInstanceArray,\n };\n\n const exportStatus = iModel.exportGraphics(exportGraphicsOptions);\n assert.strictEqual(exportStatus, DbResult.BE_SQLITE_OK);\n assert.strictEqual(infos.length, 0);\n assert.strictEqual(partInstanceArray.length, 1);\n\n const partInfos: ExportPartInfo[] = [];\n const partLineInfos: ExportPartLinesInfo[] = [];\n const exportPartStatus = iModel.exportPartGraphics({\n elementId: partInstanceArray[0].partId,\n displayProps: partInstanceArray[0].displayProps,\n onPartGraphics: (info: ExportPartInfo) => partInfos.push(info),\n onPartLineGraphics: (info: ExportPartLinesInfo) => partLineInfos.push(info),\n });\n assert.strictEqual(exportPartStatus, DbResult.BE_SQLITE_OK);\n assert.strictEqual(partInfos.length, 0);\n assert.strictEqual(partLineInfos.length, 1);\n assert.strictEqual(partLineInfos[0].geometryClass, GeometryClass.Construction);\n });\n\n it(\"converts to IndexedPolyface\", () => {\n const box = Box.createRange(Range3d.create(Point3d.createZero(), Point3d.create(1.0, 1.0, 1.0)), true);\n assert.isFalse(undefined === box);\n\n const builder = new GeometryStreamBuilder();\n builder.appendGeometry(box!);\n\n const newId = insertPhysicalElement(builder.geometryStream);\n\n const infos: ExportGraphicsInfo[] = [];\n const onGraphics = (info: ExportGraphicsInfo) => {\n infos.push(info);\n };\n const exportGraphicsOptions: ExportGraphicsOptions = {\n elementIdArray: [newId],\n onGraphics,\n };\n\n const exportStatus = iModel.exportGraphics(exportGraphicsOptions);\n assert.strictEqual(exportStatus, DbResult.BE_SQLITE_OK);\n assert.strictEqual(infos.length, 1);\n assert.strictEqual(infos[0].color, ColorDef.white.tbgr);\n assert.strictEqual(infos[0].mesh.indices.length, 36);\n assert.strictEqual(infos[0].elementId, newId);\n assert.strictEqual(infos[0].geometryClass, GeometryClass.Primary);\n const polyface = ExportGraphics.convertToIndexedPolyface(infos[0].mesh);\n assert.strictEqual(polyface.facetCount, 12);\n assert.strictEqual(polyface.data.pointCount, 24);\n assert.strictEqual(polyface.data.normalCount, 24);\n assert.strictEqual(polyface.data.paramCount, 24);\n });\n\n //\n //\n // 2---3 6\n // | \\ | | \\\n // 0---1 4---5\n //\n it(\"ExportMeshGraphicsVisitor\", () => {\n const numPoints = 7;\n const numFacets = 3;\n const pointData = [0, 0, 0, 1, 0, 0, 0, 2, 0, 1, 2, 0, 2, 0, 0, 4, 0, 0, 3, 2, 0];\n const paramData = [0, 0, 1, 0, 0, 2, 1, 2, 2, 0, 4, 0, 3, 2];\n const normalData = new Float32Array(pointData.length);\n const a0 = 2.0;\n const a1 = 3.0;\n const b0 = -2.0;\n const b1 = 5.0;\n // make normals functionally related to point coordinates . . . not good normals, but good for tests\n let paramCursor = 0;\n for (let i = 0; i < pointData.length; i++) {\n normalData[i] = a1 * pointData[i] + a0;\n if ((i + 1) % 3 !== 0)\n paramData[paramCursor++] = b0 + b1 * pointData[i];\n }\n const smallMesh = {\n points: new Float64Array(pointData),\n params: new Float32Array(paramData),\n // normals have one-based index as z ..\n normals: new Float32Array(normalData),\n indices: new Int32Array([0, 1, 2, 2, 1, 3, 4, 5, 6]),\n isTwoSided: true,\n };\n const knownArea = 4.0;\n assert.isTrue(smallMesh.points.length === 3 * numPoints);\n assert.isTrue(smallMesh.normals.length === 3 * numPoints);\n assert.isTrue(smallMesh.params.length === 2 * numPoints);\n assert.isTrue(smallMesh.indices.length === 3 * numFacets);\n const visitor = ExportGraphicsMeshVisitor.create(smallMesh, 0);\n assert.isDefined(visitor.paramIndex, \"paramIndex defined\");\n assert.isDefined(visitor.paramIndex, \"paramIndex defined\");\n let numFacetsA = 0;\n let indexCursor = 0;\n let areaSum = 0.0;\n while (visitor.moveToNextFacet()) {\n numFacetsA++;\n assert.isTrue(visitor.point.length === 3);\n assert.isTrue(smallMesh.indices[indexCursor] === visitor.pointIndex[0]);\n assert.isTrue(smallMesh.indices[indexCursor + 1] === visitor.pointIndex[1]);\n assert.isTrue(smallMesh.indices[indexCursor + 2] === visitor.pointIndex[2]);\n const areaVector = visitor.point.crossProductIndexIndexIndex(0, 1, 2)!;\n areaSum += areaVector.magnitude() * 0.5;\n assert.isTrue(smallMesh.indices[indexCursor] === visitor.paramIndex![0]);\n assert.isTrue(smallMesh.indices[indexCursor + 1] === visitor.paramIndex![1]);\n assert.isTrue(smallMesh.indices[indexCursor + 2] === visitor.paramIndex![2]);\n assert.isTrue(smallMesh.indices[indexCursor] === visitor.normalIndex![0]);\n assert.isTrue(smallMesh.indices[indexCursor + 1] === visitor.normalIndex![1]);\n assert.isTrue(smallMesh.indices[indexCursor + 2] === visitor.normalIndex![2]);\n for (let k = 0; k < 3; k++) {\n const point = visitor.point.getPoint3dAtUncheckedPointIndex(k);\n const normal = visitor.normal!.getPoint3dAtUncheckedPointIndex(k);\n const param = visitor.param!.getPoint2dAtUncheckedPointIndex(k);\n for (let j = 0; j < 3; j++) {\n assert.isTrue(a0 + a1 * point.at(j) === normal.at(j));\n }\n for (let j = 0; j < 2; j++) {\n assert.isTrue(b0 + b1 * point.at(j) === (j === 0 ? param.x : param.y));\n }\n }\n indexCursor += 3;\n }\n assert.isTrue(Math.abs(knownArea - areaSum) < 1.0e-13);\n assert.isTrue(numFacetsA === numFacets, \"facet count\");\n });\n\n it(\"creates output for mesh without zero blocking\", () => {\n const meshWithoutBlocking: GeometryStreamProps = JSON.parse(`[{\n \"indexedMesh\": {\n \"numPerFace\": 3,\n \"expectedClosure\": 0,\n \"point\": [\n [0, 0, 0],\n [1, 0, 0],\n [1, 1, 0],\n [0, 1, 0]\n ],\n \"pointIndex\": [1, 2, 3, 1, 3, 4],\n \"normal\": [[0, 0, 1]],\n \"normalIndex\": [1, 1, 1, 1, 1, 1]\n }\n }]`);\n const newId = insertPhysicalElement(meshWithoutBlocking);\n\n const infos: ExportGraphicsInfo[] = [];\n const exportGraphicsOptions: ExportGraphicsOptions = {\n elementIdArray: [newId],\n onGraphics: (info: ExportGraphicsInfo) => infos.push(info),\n };\n\n const exportStatus = iModel.exportGraphics(exportGraphicsOptions);\n assert.strictEqual(exportStatus, DbResult.BE_SQLITE_OK);\n assert.strictEqual(infos.length, 1);\n assert.strictEqual(infos[0].elementId, newId);\n assert.strictEqual(infos[0].mesh.indices.length, 6);\n });\n\n it(\"verifies subset visitor\", () => {\n const options = StrokeOptions.createForFacets();\n options.needNormals = options.needParams = options.shouldTriangulate = true;\n const builder = PolyfaceBuilder.create(options);\n builder.addSphere(Sphere.createCenterRadius(Point3d.createZero(), 1), 5);\n const polyface = builder.claimPolyface();\n assert.isDefined(polyface.data.param);\n assert.isDefined(polyface.data.paramIndex);\n assert.strictEqual(polyface.data.paramIndex!.length, polyface.data.pointIndex.length);\n assert.isDefined(polyface.data.normal);\n assert.isDefined(polyface.data.normalIndex);\n assert.strictEqual(polyface.data.normalIndex!.length, polyface.data.pointIndex.length);\n // compress by-sector uv/normals to by-vertex; last datum wins\n const paramData = Array<number>(2 * polyface.data.point.length);\n const normalData = Array<number>(3 * polyface.data.point.length);\n for (let i = 0; i < polyface.data.pointIndex.length; i++) {\n const pointIndex = polyface.data.pointIndex[i];\n const param = polyface.data.getParam(polyface.data.paramIndex![i]);\n if (param) {\n paramData[2 * pointIndex] = param.x;\n paramData[2 * pointIndex + 1] = param.y;\n }\n const normal = polyface.data.getNormal(polyface.data.normalIndex![i]);\n if (normal) {\n normalData[3 * pointIndex] = normal.x;\n normalData[3 * pointIndex + 1] = normal.y;\n normalData[3 * pointIndex + 2] = normal.z;\n }\n }\n const mesh: ExportGraphicsMesh = {\n points: polyface.data.point.float64Data(),\n params: new Float32Array(paramData),\n normals: new Float32Array(normalData),\n indices: new Int32Array(polyface.data.pointIndex),\n isTwoSided: false,\n };\n const visitor = ExportGraphicsMeshVisitor.create(mesh);\n const numFacets = polyface.facetCount;\n const numSubset = Math.floor(numFacets / 2);\n const subset = Array<number>(numSubset).fill(0).map((_v: number, i: number) => Math.floor(numFacets * Math.log2(1 + i / numSubset)));\n const subVisitor = visitor.createSubsetVisitor(subset);\n while (subVisitor.moveToNextFacet()) {\n const facetIndex = subVisitor.parentFacetIndex();\n assert.isDefined(facetIndex);\n const result = visitor.moveToReadIndex(facetIndex!);\n assert.isTrue(result);\n assert.isTrue(NumberArray.isAlmostEqual(subVisitor.pointIndex, visitor.pointIndex, Geometry.smallFloatingPoint));\n assert.isTrue(Point3dArray.isAlmostEqual(subVisitor.point.float64Data(), visitor.point.float64Data(), Geometry.smallFloatingPoint));\n assert.isTrue(Point2dArray.isAlmostEqual(subVisitor.param?.getPoint2dArray(), visitor.param?.getPoint2dArray(), Geometry.smallFloatingPoint));\n assert.isTrue(Vector3dArray.isAlmostEqual(subVisitor.normal?.float64Data(), visitor.normal?.float64Data(), Geometry.smallFloatingPoint));\n }\n });\n});\n"]}
|