@itwin/core-backend 5.5.0-dev.2 → 5.5.0-dev.5

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.
Files changed (398) hide show
  1. package/CHANGELOG.md +19 -1
  2. package/lib/cjs/BackendHubAccess.js.map +1 -1
  3. package/lib/cjs/BackendLoggerCategory.js.map +1 -1
  4. package/lib/cjs/BisCoreSchema.js.map +1 -1
  5. package/lib/cjs/BlobContainerService.js.map +1 -1
  6. package/lib/cjs/BriefcaseManager.js.map +1 -1
  7. package/lib/cjs/CatalogDb.js.map +1 -1
  8. package/lib/cjs/Category.js.map +1 -1
  9. package/lib/cjs/ChangeSummaryManager.js +2 -2
  10. package/lib/cjs/ChangeSummaryManager.js.map +1 -1
  11. package/lib/cjs/ChangedElementsDb.js.map +1 -1
  12. package/lib/cjs/ChangesetECAdaptor.js +248 -248
  13. package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
  14. package/lib/cjs/ChannelControl.js.map +1 -1
  15. package/lib/cjs/CheckpointManager.js.map +1 -1
  16. package/lib/cjs/ClassRegistry.js +5 -5
  17. package/lib/cjs/ClassRegistry.js.map +1 -1
  18. package/lib/cjs/CloudSqlite.js.map +1 -1
  19. package/lib/cjs/CodeService.js.map +1 -1
  20. package/lib/cjs/CodeSpecs.js.map +1 -1
  21. package/lib/cjs/ConcurrentQuery.js.map +1 -1
  22. package/lib/cjs/CustomViewState3dCreator.js.map +1 -1
  23. package/lib/cjs/DevTools.js.map +1 -1
  24. package/lib/cjs/DisplayStyle.js.map +1 -1
  25. package/lib/cjs/ECDb.js.map +1 -1
  26. package/lib/cjs/ECSchemaXmlContext.js.map +1 -1
  27. package/lib/cjs/ECSqlStatement.js.map +1 -1
  28. package/lib/cjs/Element.js.map +1 -1
  29. package/lib/cjs/ElementAspect.js.map +1 -1
  30. package/lib/cjs/ElementGraphics.js.map +1 -1
  31. package/lib/cjs/ElementTreeWalker.js.map +1 -1
  32. package/lib/cjs/Entity.js.map +1 -1
  33. package/lib/cjs/EntityReferences.js.map +1 -1
  34. package/lib/cjs/ExportGraphics.js.map +1 -1
  35. package/lib/cjs/ExternalSource.js.map +1 -1
  36. package/lib/cjs/FontFile.js.map +1 -1
  37. package/lib/cjs/GeoCoordConfig.js.map +1 -1
  38. package/lib/cjs/GeographicCRSServices.js.map +1 -1
  39. package/lib/cjs/GeometrySummary.js +47 -47
  40. package/lib/cjs/GeometrySummary.js.map +1 -1
  41. package/lib/cjs/IModelDb.js +8 -8
  42. package/lib/cjs/IModelDb.js.map +1 -1
  43. package/lib/cjs/IModelDbFonts.js.map +1 -1
  44. package/lib/cjs/IModelElementCloneContext.js.map +1 -1
  45. package/lib/cjs/IModelHost.js.map +1 -1
  46. package/lib/cjs/IModelIncrementalSchemaLocater.js.map +1 -1
  47. package/lib/cjs/IModelJsFs.js.map +1 -1
  48. package/lib/cjs/ImageSourceConversion.js.map +1 -1
  49. package/lib/cjs/IpcHost.js.map +1 -1
  50. package/lib/cjs/LineStyle.js.map +1 -1
  51. package/lib/cjs/LocalHub.js +1 -1
  52. package/lib/cjs/LocalHub.js.map +1 -1
  53. package/lib/cjs/LocalhostIpcHost.js.map +1 -1
  54. package/lib/cjs/LockControl.js.map +1 -1
  55. package/lib/cjs/Material.js.map +1 -1
  56. package/lib/cjs/Model.js.map +1 -1
  57. package/lib/cjs/NativeAppStorage.js.map +1 -1
  58. package/lib/cjs/NativeHost.js.map +1 -1
  59. package/lib/cjs/NavigationRelationship.js.map +1 -1
  60. package/lib/cjs/PromiseMemoizer.js.map +1 -1
  61. package/lib/cjs/PropertyStore.js.map +1 -1
  62. package/lib/cjs/Relationship.js.map +1 -1
  63. package/lib/cjs/RpcBackend.js.map +1 -1
  64. package/lib/cjs/SQLiteDb.js.map +1 -1
  65. package/lib/cjs/Schema.js.map +1 -1
  66. package/lib/cjs/SchemaSync.js.map +1 -1
  67. package/lib/cjs/SchemaUtils.js.map +1 -1
  68. package/lib/cjs/SheetIndex.js.map +1 -1
  69. package/lib/cjs/SqliteChangesetReader.js.map +1 -1
  70. package/lib/cjs/SqliteStatement.js.map +1 -1
  71. package/lib/cjs/StashManager.js.map +1 -1
  72. package/lib/cjs/Texture.js.map +1 -1
  73. package/lib/cjs/TileStorage.js.map +1 -1
  74. package/lib/cjs/TxnManager.js.map +1 -1
  75. package/lib/cjs/ViewDefinition.js.map +1 -1
  76. package/lib/cjs/ViewStateHydrator.js.map +1 -1
  77. package/lib/cjs/ViewStore.js.map +1 -1
  78. package/lib/cjs/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  79. package/lib/cjs/annotations/FrameGeometry.js.map +1 -1
  80. package/lib/cjs/annotations/LeaderGeometry.js.map +1 -1
  81. package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -1
  82. package/lib/cjs/annotations/TextAnnotationGeometry.js.map +1 -1
  83. package/lib/cjs/annotations/TextBlockGeometry.js.map +1 -1
  84. package/lib/cjs/annotations/TextBlockLayout.js.map +1 -1
  85. package/lib/cjs/assets/IModelChange.02.00.00.ecschema.xml +90 -90
  86. package/lib/cjs/assets/Settings/Schemas/Base.Schema.json +32 -32
  87. package/lib/cjs/assets/Settings/Schemas/Gcs.schema.json +27 -27
  88. package/lib/cjs/assets/Settings/Schemas/Workspace.Schema.json +94 -94
  89. package/lib/cjs/assets/Settings/backend.setting.json5 +21 -21
  90. package/lib/cjs/core-backend.js.map +1 -1
  91. package/lib/cjs/domains/FunctionalElements.js.map +1 -1
  92. package/lib/cjs/domains/FunctionalSchema.js.map +1 -1
  93. package/lib/cjs/domains/GenericElements.js.map +1 -1
  94. package/lib/cjs/domains/GenericSchema.js.map +1 -1
  95. package/lib/cjs/internal/ChangesetConflictArgs.js.map +1 -1
  96. package/lib/cjs/internal/ChannelAdmin.js.map +1 -1
  97. package/lib/cjs/internal/ElementLRUCache.js.map +1 -1
  98. package/lib/cjs/internal/FontFileImpl.js.map +1 -1
  99. package/lib/cjs/internal/HubMock.js.map +1 -1
  100. package/lib/cjs/internal/IModelDbFontsImpl.js.map +1 -1
  101. package/lib/cjs/internal/NativePlatform.js.map +1 -1
  102. package/lib/cjs/internal/NoLocks.js.map +1 -1
  103. package/lib/cjs/internal/OnlineStatus.js.map +1 -1
  104. package/lib/cjs/internal/ServerBasedLocks.js.map +1 -1
  105. package/lib/cjs/internal/Symbols.js.map +1 -1
  106. package/lib/cjs/internal/annotations/fields.js.map +1 -1
  107. package/lib/cjs/internal/cross-package.js.map +1 -1
  108. package/lib/cjs/internal/workspace/SettingsImpl.js.map +1 -1
  109. package/lib/cjs/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  110. package/lib/cjs/internal/workspace/WorkspaceImpl.js.map +1 -1
  111. package/lib/cjs/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  112. package/lib/cjs/rpc/multipart.js.map +1 -1
  113. package/lib/cjs/rpc/tracing.js.map +1 -1
  114. package/lib/cjs/rpc/web/logging.js.map +1 -1
  115. package/lib/cjs/rpc/web/request.js.map +1 -1
  116. package/lib/cjs/rpc/web/response.js.map +1 -1
  117. package/lib/cjs/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  118. package/lib/cjs/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  119. package/lib/cjs/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  120. package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  121. package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  122. package/lib/cjs/workspace/Settings.js.map +1 -1
  123. package/lib/cjs/workspace/SettingsSchemas.js.map +1 -1
  124. package/lib/cjs/workspace/Workspace.js.map +1 -1
  125. package/lib/cjs/workspace/WorkspaceEditor.js.map +1 -1
  126. package/lib/esm/BackendHubAccess.js.map +1 -1
  127. package/lib/esm/BackendLoggerCategory.js.map +1 -1
  128. package/lib/esm/BisCoreSchema.js.map +1 -1
  129. package/lib/esm/BlobContainerService.js.map +1 -1
  130. package/lib/esm/BriefcaseManager.js.map +1 -1
  131. package/lib/esm/CatalogDb.js.map +1 -1
  132. package/lib/esm/Category.js.map +1 -1
  133. package/lib/esm/ChangeSummaryManager.js +2 -2
  134. package/lib/esm/ChangeSummaryManager.js.map +1 -1
  135. package/lib/esm/ChangedElementsDb.js.map +1 -1
  136. package/lib/esm/ChangesetECAdaptor.js +248 -248
  137. package/lib/esm/ChangesetECAdaptor.js.map +1 -1
  138. package/lib/esm/ChannelControl.js.map +1 -1
  139. package/lib/esm/CheckpointManager.js.map +1 -1
  140. package/lib/esm/ClassRegistry.js +5 -5
  141. package/lib/esm/ClassRegistry.js.map +1 -1
  142. package/lib/esm/CloudSqlite.js.map +1 -1
  143. package/lib/esm/CodeService.js.map +1 -1
  144. package/lib/esm/CodeSpecs.js.map +1 -1
  145. package/lib/esm/ConcurrentQuery.js.map +1 -1
  146. package/lib/esm/CustomViewState3dCreator.js.map +1 -1
  147. package/lib/esm/DevTools.js.map +1 -1
  148. package/lib/esm/DisplayStyle.js.map +1 -1
  149. package/lib/esm/ECDb.js.map +1 -1
  150. package/lib/esm/ECSchemaXmlContext.js.map +1 -1
  151. package/lib/esm/ECSqlStatement.js.map +1 -1
  152. package/lib/esm/Element.js.map +1 -1
  153. package/lib/esm/ElementAspect.js.map +1 -1
  154. package/lib/esm/ElementGraphics.js.map +1 -1
  155. package/lib/esm/ElementTreeWalker.js.map +1 -1
  156. package/lib/esm/Entity.js.map +1 -1
  157. package/lib/esm/EntityReferences.js.map +1 -1
  158. package/lib/esm/ExportGraphics.js.map +1 -1
  159. package/lib/esm/ExternalSource.js.map +1 -1
  160. package/lib/esm/FontFile.js.map +1 -1
  161. package/lib/esm/GeoCoordConfig.js.map +1 -1
  162. package/lib/esm/GeographicCRSServices.js.map +1 -1
  163. package/lib/esm/GeometrySummary.js +47 -47
  164. package/lib/esm/GeometrySummary.js.map +1 -1
  165. package/lib/esm/IModelDb.js +8 -8
  166. package/lib/esm/IModelDb.js.map +1 -1
  167. package/lib/esm/IModelDbFonts.js.map +1 -1
  168. package/lib/esm/IModelElementCloneContext.js.map +1 -1
  169. package/lib/esm/IModelHost.js.map +1 -1
  170. package/lib/esm/IModelIncrementalSchemaLocater.js.map +1 -1
  171. package/lib/esm/IModelJsFs.js.map +1 -1
  172. package/lib/esm/ImageSourceConversion.js.map +1 -1
  173. package/lib/esm/IpcHost.js.map +1 -1
  174. package/lib/esm/LineStyle.js.map +1 -1
  175. package/lib/esm/LocalHub.js +1 -1
  176. package/lib/esm/LocalHub.js.map +1 -1
  177. package/lib/esm/LocalhostIpcHost.js.map +1 -1
  178. package/lib/esm/LockControl.js.map +1 -1
  179. package/lib/esm/Material.js.map +1 -1
  180. package/lib/esm/Model.js.map +1 -1
  181. package/lib/esm/NativeAppStorage.js.map +1 -1
  182. package/lib/esm/NativeHost.js.map +1 -1
  183. package/lib/esm/NavigationRelationship.js.map +1 -1
  184. package/lib/esm/PromiseMemoizer.js.map +1 -1
  185. package/lib/esm/PropertyStore.js.map +1 -1
  186. package/lib/esm/Relationship.js.map +1 -1
  187. package/lib/esm/RpcBackend.js.map +1 -1
  188. package/lib/esm/SQLiteDb.js.map +1 -1
  189. package/lib/esm/Schema.js.map +1 -1
  190. package/lib/esm/SchemaSync.js.map +1 -1
  191. package/lib/esm/SchemaUtils.js.map +1 -1
  192. package/lib/esm/SheetIndex.js.map +1 -1
  193. package/lib/esm/SqliteChangesetReader.js.map +1 -1
  194. package/lib/esm/SqliteStatement.js.map +1 -1
  195. package/lib/esm/StashManager.js.map +1 -1
  196. package/lib/esm/Texture.js.map +1 -1
  197. package/lib/esm/TileStorage.js.map +1 -1
  198. package/lib/esm/TxnManager.js.map +1 -1
  199. package/lib/esm/ViewDefinition.js.map +1 -1
  200. package/lib/esm/ViewStateHydrator.js.map +1 -1
  201. package/lib/esm/ViewStore.js.map +1 -1
  202. package/lib/esm/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  203. package/lib/esm/annotations/FrameGeometry.js.map +1 -1
  204. package/lib/esm/annotations/LeaderGeometry.js.map +1 -1
  205. package/lib/esm/annotations/TextAnnotationElement.js.map +1 -1
  206. package/lib/esm/annotations/TextAnnotationGeometry.js.map +1 -1
  207. package/lib/esm/annotations/TextBlockGeometry.js.map +1 -1
  208. package/lib/esm/annotations/TextBlockLayout.js.map +1 -1
  209. package/lib/esm/core-backend.js.map +1 -1
  210. package/lib/esm/domains/FunctionalElements.js.map +1 -1
  211. package/lib/esm/domains/FunctionalSchema.js.map +1 -1
  212. package/lib/esm/domains/GenericElements.js.map +1 -1
  213. package/lib/esm/domains/GenericSchema.js.map +1 -1
  214. package/lib/esm/internal/ChangesetConflictArgs.js.map +1 -1
  215. package/lib/esm/internal/ChannelAdmin.js.map +1 -1
  216. package/lib/esm/internal/ElementLRUCache.js.map +1 -1
  217. package/lib/esm/internal/FontFileImpl.js.map +1 -1
  218. package/lib/esm/internal/HubMock.js.map +1 -1
  219. package/lib/esm/internal/IModelDbFontsImpl.js.map +1 -1
  220. package/lib/esm/internal/NativePlatform.js.map +1 -1
  221. package/lib/esm/internal/NoLocks.js.map +1 -1
  222. package/lib/esm/internal/OnlineStatus.js.map +1 -1
  223. package/lib/esm/internal/ServerBasedLocks.js.map +1 -1
  224. package/lib/esm/internal/Symbols.js.map +1 -1
  225. package/lib/esm/internal/annotations/fields.js.map +1 -1
  226. package/lib/esm/internal/cross-package.js.map +1 -1
  227. package/lib/esm/internal/workspace/SettingsImpl.js.map +1 -1
  228. package/lib/esm/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  229. package/lib/esm/internal/workspace/WorkspaceImpl.js.map +1 -1
  230. package/lib/esm/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  231. package/lib/esm/rpc/multipart.js.map +1 -1
  232. package/lib/esm/rpc/tracing.js.map +1 -1
  233. package/lib/esm/rpc/web/logging.js.map +1 -1
  234. package/lib/esm/rpc/web/request.js.map +1 -1
  235. package/lib/esm/rpc/web/response.js.map +1 -1
  236. package/lib/esm/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  237. package/lib/esm/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  238. package/lib/esm/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  239. package/lib/esm/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  240. package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  241. package/lib/esm/test/AdvancedEqual.js.map +1 -1
  242. package/lib/esm/test/AnnotationTestUtils.js.map +1 -1
  243. package/lib/esm/test/AttachDb.test.js +11 -11
  244. package/lib/esm/test/AttachDb.test.js.map +1 -1
  245. package/lib/esm/test/ElementDrivesElement.test.js +23 -23
  246. package/lib/esm/test/ElementDrivesElement.test.js.map +1 -1
  247. package/lib/esm/test/ElementLRUCache.test.js.map +1 -1
  248. package/lib/esm/test/GeometryTestUtil.js.map +1 -1
  249. package/lib/esm/test/IModelHost.test.js.map +1 -1
  250. package/lib/esm/test/IModelTestUtils.js.map +1 -1
  251. package/lib/esm/test/ImageSourceConversion.test.js.map +1 -1
  252. package/lib/esm/test/IpcHost.test.js.map +1 -1
  253. package/lib/esm/test/KnownTestLocations.js.map +1 -1
  254. package/lib/esm/test/PrintElementTree.js.map +1 -1
  255. package/lib/esm/test/PropertyDb.test.js.map +1 -1
  256. package/lib/esm/test/RevisionUtility.js.map +1 -1
  257. package/lib/esm/test/SchemaUtils.test.js +25 -25
  258. package/lib/esm/test/SchemaUtils.test.js.map +1 -1
  259. package/lib/esm/test/SequentialLogMatcher.js.map +1 -1
  260. package/lib/esm/test/TestChangeSetUtility.js.map +1 -1
  261. package/lib/esm/test/TestUtils.js.map +1 -1
  262. package/lib/esm/test/annotations/Fields.test.js +53 -53
  263. package/lib/esm/test/annotations/Fields.test.js.map +1 -1
  264. package/lib/esm/test/annotations/FrameGeometry.test.js.map +1 -1
  265. package/lib/esm/test/annotations/LeaderGeometry.test.js.map +1 -1
  266. package/lib/esm/test/annotations/TextAnnotation.test.js.map +1 -1
  267. package/lib/esm/test/annotations/TextBlock.test.js.map +1 -1
  268. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/old.config.js.map +1 -1
  269. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.js +5 -5
  270. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.js.map +1 -1
  271. package/lib/esm/test/categories/Category.test.js.map +1 -1
  272. package/lib/esm/test/codespec/CodeSpec.test.js.map +1 -1
  273. package/lib/esm/test/ecdb/CTE.test.js +88 -88
  274. package/lib/esm/test/ecdb/CTE.test.js.map +1 -1
  275. package/lib/esm/test/ecdb/ConcurrentQuery.test.js +15 -15
  276. package/lib/esm/test/ecdb/ConcurrentQuery.test.js.map +1 -1
  277. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js +15 -15
  278. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js.map +1 -1
  279. package/lib/esm/test/ecdb/ECDb.test.js +72 -72
  280. package/lib/esm/test/ecdb/ECDb.test.js.map +1 -1
  281. package/lib/esm/test/ecdb/ECDbTestHelper.js.map +1 -1
  282. package/lib/esm/test/ecdb/ECSchemaXmlContext.test.js.map +1 -1
  283. package/lib/esm/test/ecdb/ECSqlAst.test.js +65 -65
  284. package/lib/esm/test/ecdb/ECSqlAst.test.js.map +1 -1
  285. package/lib/esm/test/ecdb/ECSqlQuery.test.js.map +1 -1
  286. package/lib/esm/test/ecdb/ECSqlReader.test.js +16 -16
  287. package/lib/esm/test/ecdb/ECSqlReader.test.js.map +1 -1
  288. package/lib/esm/test/ecdb/ECSqlStatement.test.js +332 -332
  289. package/lib/esm/test/ecdb/ECSqlStatement.test.js.map +1 -1
  290. package/lib/esm/test/ecdb/SqliteStatement.test.js.map +1 -1
  291. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js.map +1 -1
  292. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js +21 -21
  293. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js.map +1 -1
  294. package/lib/esm/test/ecsql/src/ECSqlTestParser.js.map +1 -1
  295. package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -1
  296. package/lib/esm/test/element/DeleteDefinitionElements.test.js.map +1 -1
  297. package/lib/esm/test/element/ElementAspect.test.js +22 -22
  298. package/lib/esm/test/element/ElementAspect.test.js.map +1 -1
  299. package/lib/esm/test/element/ElementDependencyGraph.test.js.map +1 -1
  300. package/lib/esm/test/element/ElementRoundTrip.test.js +139 -139
  301. package/lib/esm/test/element/ElementRoundTrip.test.js.map +1 -1
  302. package/lib/esm/test/element/ExcludedElements.test.js.map +1 -1
  303. package/lib/esm/test/element/ExternalSource.test.js.map +1 -1
  304. package/lib/esm/test/element/NullStructArray.test.js +13 -13
  305. package/lib/esm/test/element/NullStructArray.test.js.map +1 -1
  306. package/lib/esm/test/element/ProjectInformationRecord.test.js.map +1 -1
  307. package/lib/esm/test/element/SheetInformationAspect.test.js.map +1 -1
  308. package/lib/esm/test/element/UrlLink.test.js.map +1 -1
  309. package/lib/esm/test/font/FontFile.test.js.map +1 -1
  310. package/lib/esm/test/font/IModelDbFonts.test.js.map +1 -1
  311. package/lib/esm/test/hubaccess/ApplyChangeset.test.js +32 -32
  312. package/lib/esm/test/hubaccess/ApplyChangeset.test.js.map +1 -1
  313. package/lib/esm/test/hubaccess/BriefcaseManager.test.js.map +1 -1
  314. package/lib/esm/test/hubaccess/CheckpointManager.test.js.map +1 -1
  315. package/lib/esm/test/hubaccess/Rebase.test.js +40 -40
  316. package/lib/esm/test/hubaccess/Rebase.test.js.map +1 -1
  317. package/lib/esm/test/imageData.js.map +1 -1
  318. package/lib/esm/test/imodel/Code.test.js.map +1 -1
  319. package/lib/esm/test/imodel/ElementTreeWalker.test.js.map +1 -1
  320. package/lib/esm/test/imodel/GetTextureImage.test.js.map +1 -1
  321. package/lib/esm/test/imodel/IModel.test.js +44 -44
  322. package/lib/esm/test/imodel/IModel.test.js.map +1 -1
  323. package/lib/esm/test/imodel/ProjectExtents.test.js.map +1 -1
  324. package/lib/esm/test/imodel/SchemaXmlImport.test.js.map +1 -1
  325. package/lib/esm/test/incrementalSchemaLocater/ECSqlQueries.test.js +432 -198
  326. package/lib/esm/test/incrementalSchemaLocater/ECSqlQueries.test.js.map +1 -1
  327. package/lib/esm/test/incrementalSchemaLocater/IncrementalLoading.test.js +272 -190
  328. package/lib/esm/test/incrementalSchemaLocater/IncrementalLoading.test.js.map +1 -1
  329. package/lib/esm/test/incrementalSchemaLocater/TestContext.d.ts +27 -0
  330. package/lib/esm/test/incrementalSchemaLocater/TestContext.d.ts.map +1 -0
  331. package/lib/esm/test/incrementalSchemaLocater/TestContext.js +136 -0
  332. package/lib/esm/test/incrementalSchemaLocater/TestContext.js.map +1 -0
  333. package/lib/esm/test/index.js.map +1 -1
  334. package/lib/esm/test/misc/DevTools.test.js.map +1 -1
  335. package/lib/esm/test/misc/EntitySubClasses.test.js.map +1 -1
  336. package/lib/esm/test/misc/GeoServices.test.js.map +1 -1
  337. package/lib/esm/test/misc/PromiseMemoizer.test.js.map +1 -1
  338. package/lib/esm/test/native/DgnDbWorker.test.js.map +1 -1
  339. package/lib/esm/test/rpc/response.test.js.map +1 -1
  340. package/lib/esm/test/schema/ClassRegistry.test.js +99 -99
  341. package/lib/esm/test/schema/ClassRegistry.test.js.map +1 -1
  342. package/lib/esm/test/schema/FunctionalDomain.test.js.map +1 -1
  343. package/lib/esm/test/schema/GenericDomain.test.js.map +1 -1
  344. package/lib/esm/test/schema/IModelSchemaContext.test.js.map +1 -1
  345. package/lib/esm/test/sheetindex/SheetIndex.test.js.map +1 -1
  346. package/lib/esm/test/standalone/ChangeMerge.test.js.map +1 -1
  347. package/lib/esm/test/standalone/ChangesetReader.test.js +346 -127
  348. package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
  349. package/lib/esm/test/standalone/CustomViewState3dCreator.test.js.map +1 -1
  350. package/lib/esm/test/standalone/DisplayStyle.test.js.map +1 -1
  351. package/lib/esm/test/standalone/Drawing.test.js.map +1 -1
  352. package/lib/esm/test/standalone/ElementGraphics.test.js.map +1 -1
  353. package/lib/esm/test/standalone/ElementMesh.test.js.map +1 -1
  354. package/lib/esm/test/standalone/ExportGraphics.test.js +14 -14
  355. package/lib/esm/test/standalone/ExportGraphics.test.js.map +1 -1
  356. package/lib/esm/test/standalone/GeometryChangeEvents.test.js.map +1 -1
  357. package/lib/esm/test/standalone/GeometryStream.test.js.map +1 -1
  358. package/lib/esm/test/standalone/HubMock.test.js.map +1 -1
  359. package/lib/esm/test/standalone/IModelLimits.test.js.map +1 -1
  360. package/lib/esm/test/standalone/IModelWrite.test.js +27 -27
  361. package/lib/esm/test/standalone/IModelWrite.test.js.map +1 -1
  362. package/lib/esm/test/standalone/InlineGeometryPartReferences.test.js.map +1 -1
  363. package/lib/esm/test/standalone/MergeConflict.test.js.map +1 -1
  364. package/lib/esm/test/standalone/NativeAppStorage.test.js.map +1 -1
  365. package/lib/esm/test/standalone/RenderMaterialElement.test.js.map +1 -1
  366. package/lib/esm/test/standalone/RenderTimeline.test.js.map +1 -1
  367. package/lib/esm/test/standalone/SQLiteDb.test.js.map +1 -1
  368. package/lib/esm/test/standalone/SchemaUtils.test.js.map +1 -1
  369. package/lib/esm/test/standalone/SectionDrawing.test.js.map +1 -1
  370. package/lib/esm/test/standalone/ServerBasedLocks.test.js.map +1 -1
  371. package/lib/esm/test/standalone/Setting.test.js.map +1 -1
  372. package/lib/esm/test/standalone/Settings.test.js.map +1 -1
  373. package/lib/esm/test/standalone/SettingsSchemas.test.js.map +1 -1
  374. package/lib/esm/test/standalone/SnapshotDb.test.js.map +1 -1
  375. package/lib/esm/test/standalone/Texture.test.js.map +1 -1
  376. package/lib/esm/test/standalone/TileCache.test.js.map +1 -1
  377. package/lib/esm/test/standalone/TileTree.test.js.map +1 -1
  378. package/lib/esm/test/standalone/TxnManager.test.js.map +1 -1
  379. package/lib/esm/test/standalone/ViewDefinition.test.js.map +1 -1
  380. package/lib/esm/test/standalone/ViewStoreDb.test.js.map +1 -1
  381. package/lib/esm/test/standalone/Workspace.test.js.map +1 -1
  382. package/lib/esm/workspace/Settings.js.map +1 -1
  383. package/lib/esm/workspace/SettingsSchemas.js.map +1 -1
  384. package/lib/esm/workspace/Workspace.js.map +1 -1
  385. package/lib/esm/workspace/WorkspaceEditor.js.map +1 -1
  386. package/package.json +14 -14
  387. package/lib/esm/test/incrementalSchemaLocater/utils/IModelSchemaLocater.d.ts +0 -11
  388. package/lib/esm/test/incrementalSchemaLocater/utils/IModelSchemaLocater.d.ts.map +0 -1
  389. package/lib/esm/test/incrementalSchemaLocater/utils/IModelSchemaLocater.js +0 -36
  390. package/lib/esm/test/incrementalSchemaLocater/utils/IModelSchemaLocater.js.map +0 -1
  391. package/lib/esm/test/incrementalSchemaLocater/utils/IncrementalTestHelper.d.ts +0 -20
  392. package/lib/esm/test/incrementalSchemaLocater/utils/IncrementalTestHelper.d.ts.map +0 -1
  393. package/lib/esm/test/incrementalSchemaLocater/utils/IncrementalTestHelper.js +0 -126
  394. package/lib/esm/test/incrementalSchemaLocater/utils/IncrementalTestHelper.js.map +0 -1
  395. package/lib/esm/test/incrementalSchemaLocater/utils/TestSqlSchemaLocater.d.ts +0 -24
  396. package/lib/esm/test/incrementalSchemaLocater/utils/TestSqlSchemaLocater.d.ts.map +0 -1
  397. package/lib/esm/test/incrementalSchemaLocater/utils/TestSqlSchemaLocater.js +0 -67
  398. package/lib/esm/test/incrementalSchemaLocater/utils/TestSqlSchemaLocater.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"IModelTestUtils.js","sourceRoot":"","sources":["../../../src/test/IModelTestUtils.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACtC,OAAO,KAAK,cAAc,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAe,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAc,IAAI,EAAc,YAAY,EAAE,IAAI,EAAY,MAAM,qBAAqB,CAAC;AACvI,OAAO,EACkB,mBAAmB,EAAwB,IAAI,EAAa,aAAa,EAAY,QAAQ,EACtG,WAAW,EAAuB,QAAQ,EAA2B,cAAc,EAAqB,qBAAqB,EACtH,iBAAiB,EAAE,MAAM,EAAE,WAAW,EAAE,sBAAsB,EAAE,aAAa,EAC5E,sBAAsB,EAAE,cAAc,EAAiD,gBAAgB,EAAE,UAAU,EACzI,kBAAkB,EAAE,eAAe,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,QAAQ,GAC1F,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAEpJ,OAAO,EAAE,iBAAiB,EAAoC,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAChH,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EACL,SAAS,EAAE,gBAAgB,EAAE,WAAW,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EAClK,qBAAqB,EAAkB,OAAO,EAAiB,wBAAwB,EAAE,uBAAuB,EAAE,uBAAuB,EACpH,cAAc,EAAE,4BAA4B,EAAE,eAAe,EAAE,gBAAgB,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EACtI,UAAU,EAAE,2BAA2B,EAAE,KAAK,EAAE,aAAa,EAAE,0BAA0B,EAAE,aAAa,EAAE,cAAc,EACxH,iBAAiB,EAAE,qBAAqB,EAAE,UAAU,EAAE,eAAe,EAAE,WAAW,EAAE,4BAA4B,EAAE,OAAO,EAAE,cAAc,GAC1I,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,mBAAmB,EAAE,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC/I,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,YAAY,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAC1H,OAAO,EAAE,+BAA+B,EAAE,oBAAoB,EAAmC,MAAM,iBAAiB,CAAC;AACzH,OAAO,EAAuB,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAC3F,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;AAEzB,qEAAqE;AACrE,6DAA6D;AAE7D,gBAAgB,CAAC,eAAe,GAAG,IAAI,CAAC;AAExC,qDAAqD;AACrD,UAAU,CAAC,mBAAmB,CAAC,sBAAsB,CAAC,CAAC;AAQvD,MAAM,OAAO,OAAQ,SAAQ,MAAM;IAC1B,MAAM,KAAc,UAAU,KAAa,OAAO,SAAS,CAAC,CAAC,CAAC;CAEtE;AAID,MAAM,OAAO,wBAAyB,SAAQ,oBAAoB;IACzD,MAAM,KAAc,SAAS,KAAa,OAAO,0BAA0B,CAAC,CAAC,CAAC;IAE9E,MAAM,CAAC,WAAW,GAAG,IAAI,OAAO,EAAwD,CAAC;IACzF,MAAM,CAAC,iBAAiB,GAAG,IAAI,OAAO,EAAwD,CAAC;IAC/F,MAAM,CAAU,aAAa,CAAC,KAAwB,EAAE,MAAgB,IAAU,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAC/H,MAAM,CAAU,mBAAmB,CAAC,KAAwB,EAAE,MAAgB,IAAU,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;;AAKpJ,MAAM,OAAO,kBAAmB,SAAQ,eAAe;IAC9C,MAAM,KAAc,SAAS,KAAa,OAAO,oBAAoB,CAAC,CAAC,CAAC;IAExE,MAAM,CAAC,oBAAoB,GAAG,IAAI,OAAO,EAA8C,CAAC;IACxF,MAAM,CAAC,gBAAgB,GAAG,IAAI,OAAO,EAA8C,CAAC;IACpF,MAAM,CAAU,sBAAsB,CAAC,EAAc,EAAE,MAAgB,IAAU,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IACpI,MAAM,CAAU,kBAAkB,CAAC,EAAc,EAAE,MAAgB,IAAU,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;;AAGrI,6CAA6C;AAC7C,MAAM,CAAN,IAAY,YAKX;AALD,WAAY,YAAY;IACtB,qDAAO,CAAA;IACP,qDAAO,CAAA;IACP,iDAAK,CAAA;IACL,+DAAY,CAAA;AACd,CAAC,EALW,YAAY,KAAZ,YAAY,QAKvB;AAED;;;GAGG;AACH,MAAM,OAAO,WAAW;IACZ,MAAM,KAAK,OAAO,KAAK,OAAO,OAAO,CAAC,CAAC,CAAC;IAE3C,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,IAAkB;QACnD,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAED,wHAAwH;IACjH,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,WAAwB,EAAE,OAAmB,EAAE,UAAkB;QAChG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,gDAAgD,CAAC,CAAC;QACtF,IAAI,QAAQ,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,CAAC,iBAAiB,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;QACpG,IAAI,CAAC,QAAQ;YACX,QAAQ,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,CAAC,eAAe,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,wBAAwB,EAAE,CAAC,CAAC;QACvI,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;MAEE;IACK,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAkD;QAC1F,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,gDAAgD,CAAC,CAAC;QACtF,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;QACzE,IAAI,SAAS,KAAK,YAAY;YAC5B,MAAM,UAAU,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC;QAE5H,sBAAsB;QACtB,OAAO,UAAU,CAAC,UAAU,CAAC,CAAC,eAAe,CAAC,EAAE,WAAW,EAAE,mBAAmB,GAAG,CAAC,UAAU,EAAE,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC;IAC9G,CAAC;IAED,oCAAoC;IAC7B,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,WAAwB,EAAE,OAAe,EAAE,UAAkB;QAC5F,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,CAAC,iBAAiB,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;QACtG,IAAI,SAAS,KAAK,QAAQ;YACxB,OAAO;QAET,MAAM,UAAU,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;IAChF,CAAC;IAED,gCAAgC;IACzB,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,WAAwB,EAAE,OAAe,EAAE,QAAgB,EAAE,UAAmB,EAAE,SAAmB;QAClI,wEAAwE;QACxE,MAAM,aAAa,GAAG,UAAU,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACpE,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,CAAC,iBAAiB,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,CAAC,CAAC;QACrH,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC,SAAS;gBACZ,OAAO,QAAQ,CAAC;YAClB,MAAM,UAAU,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QAChF,CAAC;QAED,sBAAsB;QACtB,OAAO,UAAU,CAAC,UAAU,CAAC,CAAC,eAAe,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;IACzH,CAAC;IAED,2EAA2E;IACpE,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,IAAgD;QAC3F,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAC7D,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,SAAS,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;YACvE,SAAS,CAAC,SAAS,CAAC,CAAC,cAAc,CAAC,mBAAmB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YAC3E,SAAS,CAAC,WAAW,EAAE,CAAC;YACxB,SAAS,CAAC,KAAK,EAAE,CAAC;QACpB,CAAC;QACD,OAAO,WAAW,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,oLAAoL;IAC7K,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,IAAoF;QAC5H,IAAI,SAAS,KAAK,IAAI,CAAC,IAAI;YACzB,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC;QAE9C,MAAM,QAAQ,GAAwB;YACpC,UAAU,EAAE;gBACV,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,SAAS,EAAE,CAAC,MAAM,UAAU,CAAC,UAAU,CAAC,CAAC,uBAAuB,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;aAC1K;YACD,QAAQ,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;YACrH,QAAQ,EAAE,IAAI,CAAC,WAAW,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW;YAC3E,aAAa,EAAE,IAAI,CAAC,WAAW;SAChC,CAAC;QAEF,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,QAAQ,CAAC,QAAQ,KAAK,QAAQ,CAAC,QAAQ,EAAE,mCAAmC,CAAC,CAAC;QACpH,OAAO,IAAI,EAAE,CAAC;YACZ,IAAI,CAAC;gBACH,4DAA4D;gBAC5D,OAAO,CAAC,MAAM,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAgB,CAAC;YACnE,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,CAAC,KAAK,YAAY,kBAAkB,CAAC;oBACxC,MAAM,KAAK,CAAC;YAChB,CAAC;QACH,CAAC;IACH,CAAC;IAED,0DAA0D;IACnD,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,IAAwG;QACpJ,IAAI,SAAS,KAAK,IAAI,CAAC,IAAI;YACzB,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC;QAE9C,MAAM,UAAU,GAAoB;YAClC,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,SAAS,EAAE,CAAC,MAAM,UAAU,CAAC,UAAU,CAAC,CAAC,uBAAuB,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;SAC1K,CAAC;QAEF,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC/E,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,UAAU,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,CAAC;QAChH,MAAM,OAAO,GAAoB,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;QACrE,IAAI,EAAE,GAAG,UAAU,CAAC,YAAY,CAAC,iBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;QAC/E,IAAI,SAAS,KAAK,EAAE;YAClB,OAAO,EAAE,CAAC;QACZ,EAAE,GAAG,eAAe,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAC/C,IAAI,EAAE;YACJ,OAAO,EAAE,CAAC;QACZ,MAAM,mBAAmB,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;QACtD,MAAM,iBAAiB,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC;QAC1D,OAAO,eAAe,CAAC,cAAc,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IAC/E,CAAC;IAED,0MAA0M;IACnM,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,IAAoF;QAC7H,IAAI,SAAS,KAAK,IAAI,CAAC,IAAI;YACzB,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC;QAE9C,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,CAAC,uBAAuB,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC/K,MAAM,QAAQ,GAAG;YACf,UAAU,EAAE;gBACV,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,SAAS;aACV;YACD,QAAQ,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;YACrH,QAAQ,EAAE,QAAQ,CAAC,YAAqB;YACxC,aAAa,EAAE,IAAI,CAAC,WAAW;SAChC,CAAC;QAEF,OAAO,IAAI,EAAE,CAAC;YACZ,IAAI,CAAC;gBACH,OAAO,CAAC,MAAM,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YACpD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,CAAC,KAAK,YAAY,kBAAkB,CAAC;oBACxC,MAAM,KAAK,CAAC;YAChB,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,KAAK,CAAC,2BAA2B,CAAC,WAAwB,EAAE,QAAoB,EAAE,mBAA+B,GAAG,EAAE,GAAG,CAAC,EAAE,mBAA2B,EAAE;QACrK,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,CAAC,iBAAiB,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC7F,IAAI,UAAU,CAAC,MAAM,GAAG,gBAAgB,EAAE,CAAC;YACzC,IAAI,SAAS,KAAK,gBAAgB;gBAChC,gBAAgB,EAAE,CAAC;YAErB,MAAM,QAAQ,GAAoB,EAAE,CAAC;YACrC,UAAU,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,EAAE;gBACjC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,gBAAgB,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;YACjG,CAAC,CAAC,CAAC;YACH,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,WAAwB,EAAE,WAAqB;QAC3F,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC;QACtC,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC;QACtC,WAAW,CAAC,KAAK,EAAE,CAAC;QAEpB,MAAM,gBAAgB,CAAC,oBAAoB,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QAEnE,6EAA6E;QAC7E,IAAI,CAAC,KAAK,gBAAgB,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAC;YAChE,UAAU,CAAC,UAAU,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC,CAAC;YACvE,MAAM,UAAU,GAAG,gBAAgB,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YAC5D,IAAI,CAAC,KAAK,UAAU,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,CAAC;gBACpD,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;IACH,CAAC;CACF;AAED,MAAM,OAAO,eAAe;IAGhB,MAAM,KAAK,kBAAkB,KAA+C,OAAO,kBAAkB,CAAC,CAAC,CAAC;IAElH,yGAAyG;IAClG,MAAM,CAAC,kBAAkB,CAAC,QAAgB;QAC/C,OAAO,GAAG,QAAQ,MAAM,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;IAC/C,CAAC;IAGM,MAAM,CAAC,cAAc,CAAC,QAAuB,EAAE,UAA2B;QAC/E,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,iBAAiB,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAC7F,QAAgB,CAAC,QAAQ,GAAG,UAAU,CAAC,OAAO,CAAC;QAChD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,uEAAuE;IAChE,MAAM,CAAC,gBAAgB,CAAC,OAAwB;QACrD,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QACtC,IAAI,iBAAiB,CAAC,gBAAgB,CAAC,UAAU,EAAE,OAAO,CAAC,SAAS,CAAC;YACnE,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QAE5D,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;;;;;OAMG;IACI,MAAM,CAAC,iBAAiB,CAAC,UAAkB,EAAE,QAAgB;QAClE,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC;YAC3D,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;QAE1D,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QAC3E,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC;YACnC,UAAU,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAElC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAClD,IAAI,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC;YACnC,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAEpC,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,8FAA8F;IACvF,MAAM,CAAC,gBAAgB,CAAC,SAAiB;QAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAC1E,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;QAChD,OAAO,SAAS,CAAC;IACnB,CAAC;IAEM,MAAM,CAAC,eAAe,CAAC,QAAgB;QAC5C,MAAM,OAAO,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC7C,MAAM,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QAErE,QAAQ,GAAG,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC/E,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAC1C,CAAC;IAED,yFAAyF;IAClF,MAAM,CAAC,sBAAsB,CAAC,YAAoB,EAAE,YAA2B;QACpF,MAAM,MAAM,GAAe,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QAC7D,MAAM,MAAM,GAAe,UAAU,CAAC,UAAU,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QACvE,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;QACpE,OAAO,MAAM,CAAC;IAChB,CAAC;IAEM,MAAM,CAAC,kBAAkB,CAAC,MAAgB,EAAE,gBAAwB;QACzE,IAAI,YAAY,GAAW,gBAAgB,CAAC;QAC5C,IAAI,IAAI,GAAW,CAAC,CAAC;QACrB,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,SAAS,GAAG,2BAA2B,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;YACrG,IAAI,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAC,SAAS,CAAC,KAAK,SAAS;gBAC/D,OAAO,SAAS,CAAC;YAEnB,YAAY,GAAG,gBAAgB,GAAG,IAAI,CAAC;YACvC,EAAE,IAAI,CAAC;QACT,CAAC;IACH,CAAC;IAEM,MAAM,CAAC,mBAAmB;QAC/B,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAC1E,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC;IACxB,CAAC;IAED,8GAA8G;IACvG,MAAM,CAAC,gCAAgC,CAAC,MAAgB,EAAE,YAAuB,EAAE,QAAqB;QAC7G,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC;QAC/F,MAAM,MAAM,GAAG,IAAI,4BAA4B,CAAC,QAAQ,IAAI,MAAM,CAAC,aAAa,CAAC,CAAC;QAElF,MAAM,mBAAmB,GAAiB;YACxC,aAAa,EAAE,iBAAiB,CAAC,aAAa;YAC9C,MAAM;YACN,KAAK;YACL,IAAI,EAAE,YAAY;SACnB,CAAC;QACF,MAAM,cAAc,GAAY,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC;QACnF,OAAO,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC;IAChE,CAAC;IAED,8GAA8G;IACvG,MAAM,CAAC,KAAK,CAAC,qCAAqC,CAAC,MAAgB,EAAE,YAAuB,EAAE,QAAqB;QACxH,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC;QAC/F,MAAM,MAAM,GAAG,IAAI,4BAA4B,CAAC,QAAQ,IAAI,MAAM,CAAC,aAAa,CAAC,CAAC;QAElF,MAAM,mBAAmB,GAAiB;YACxC,aAAa,EAAE,iBAAiB,CAAC,aAAa;YAC9C,MAAM;YACN,KAAK;YACL,IAAI,EAAE,YAAY;SACnB,CAAC;QACF,MAAM,cAAc,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC;QAC1E,MAAM,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QACnD,OAAO,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC;IAChE,CAAC;IAED,8GAA8G;IACvG,MAAM,CAAC,4BAA4B,CAAC,MAAgB,EAAE,iBAAiC,EAAE,eAAwB,KAAK;QAC3H,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,cAAc,EAAE,iBAAiB,EAAE,aAAa,EAAE,aAAa,CAAC,aAAa,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC;QACvJ,MAAM,UAAU,GAAG,QAAQ,CAAC,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QAC9E,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC;QAC5C,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7C,MAAM,CAAC,SAAS,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC1C,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,8GAA8G;IACvG,MAAM,CAAC,KAAK,CAAC,iCAAiC,CAAC,MAAgB,EAAE,iBAAiC,EAAE,eAAwB,KAAK;QACtI,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,cAAc,EAAE,iBAAiB,EAAE,aAAa,EAAE,aAAa,CAAC,aAAa,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC;QACvJ,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;QACrC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC;QAC5C,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7C,MAAM,CAAC,SAAS,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC1C,OAAO,UAAU,CAAC;IACpB,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,wCAAwC,CAAC,UAAoB,EAAE,YAAuB,EAAE,eAAwB,KAAK,EAAE,MAAmB;QACtJ,MAAM,GAAG,GAAG,eAAe,CAAC,gCAAgC,CAAC,UAAU,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;QAC/F,MAAM,iBAAiB,GAAG,IAAI,cAAc,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QAC1D,MAAM,GAAG,GAAG,eAAe,CAAC,4BAA4B,CAAC,UAAU,EAAE,iBAAiB,EAAE,YAAY,CAAC,CAAC;QACtG,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACpB,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,KAAK,CAAC,6CAA6C,CAAC,UAAoB,EAAE,YAAuB,EAAE,eAAwB,KAAK,EAAE,QAAqB;QACnK,MAAM,GAAG,GAAG,MAAM,eAAe,CAAC,qCAAqC,CAAC,UAAU,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;QAC5G,MAAM,iBAAiB,GAAG,IAAI,cAAc,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QAC1D,MAAM,GAAG,GAAG,MAAM,eAAe,CAAC,iCAAiC,CAAC,UAAU,EAAE,iBAAiB,EAAE,YAAY,CAAC,CAAC;QACjH,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACpB,CAAC;IAED,8EAA8E;IACvE,MAAM,CAAC,+BAA+B,CAAC,MAAgB,EAAE,YAAuB,EAAE,QAAqB;QAC5G,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC;QAC/F,MAAM,MAAM,GAAG,IAAI,4BAA4B,CAAC,QAAQ,IAAI,MAAM,CAAC,aAAa,CAAC,CAAC;QAElF,MAAM,mBAAmB,GAAiB;YACxC,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,MAAM;YACN,KAAK;YACL,IAAI,EAAE,YAAY;SACnB,CAAC;QACF,MAAM,cAAc,GAAY,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC;QACnF,OAAO,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC;IAChE,CAAC;IAED,0EAA0E;IACnE,MAAM,CAAC,2BAA2B,CAAC,MAAgB,EAAE,iBAAiC,EAAE,eAAwB,KAAK;QAC1H,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,cAAc,EAAE,iBAAiB,EAAE,aAAa,EAAE,YAAY,CAAC,aAAa,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC;QACtJ,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;QACrC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC;QAC5C,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7C,MAAM,CAAC,SAAS,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC1C,OAAO,UAAU,CAAC;IACpB,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,uCAAuC,CAAC,UAAoB,EAAE,YAAuB,EAAE,eAAwB,KAAK,EAAE,MAAmB;QACrJ,MAAM,GAAG,GAAG,eAAe,CAAC,+BAA+B,CAAC,UAAU,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;QAC9F,MAAM,iBAAiB,GAAG,IAAI,cAAc,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QAC1D,MAAM,GAAG,GAAG,eAAe,CAAC,2BAA2B,CAAC,UAAU,EAAE,iBAAiB,EAAE,YAAY,CAAC,CAAC;QACrG,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACpB,CAAC;IAEM,MAAM,CAAC,4BAA4B,CAAC,UAAiB,EAAE,gBAAwB;QACpF,IAAI,YAAY,GAAW,gBAAgB,CAAC;QAC5C,IAAI,IAAI,GAAW,CAAC,CAAC;QACrB,OAAO,IAAI,EAAE,CAAC;YACZ,IAAI,eAAe,CAAC,qBAAqB,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,EAAE,YAAY,CAAC,KAAK,SAAS;gBACrG,OAAO,eAAe,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC;YAEpF,YAAY,GAAG,gBAAgB,GAAG,IAAI,CAAC;YACvC,EAAE,IAAI,CAAC;QACT,CAAC;IACH,CAAC;IAED,iDAAiD;IAC1C,MAAM,CAAC,oBAAoB,CAAC,UAAoB,EAAE,OAAmB,EAAE,UAAsB,EAAE,QAAe;QACnH,MAAM,YAAY,GAAyB;YACzC,aAAa,EAAE,wBAAwB;YACvC,KAAK,EAAE,OAAO;YACd,QAAQ,EAAE,UAAU;YACpB,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE;SAC/C,CAAC;QACF,OAAO,UAAU,CAAC,QAAQ,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;IACzD,CAAC;IAEM,MAAM,CAAC,qBAAqB;QACjC,IAAI,SAAS,KAAK,OAAO,CAAC,mBAAmB,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;YAClE,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;YAChC,aAAa,CAAC,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;YACpD,aAAa,CAAC,QAAQ,CAAC,wBAAwB,EAAE,OAAO,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAEM,MAAM,CAAC,YAAY,CAAC,EAAY,EAAE,KAAa,EAAE,QAAyB;QAC/E,4DAA4D;QAC5D,OAAO,EAAE,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE;YAC9C,IAAI,QAAQ;gBACV,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YAE5B,MAAM,IAAI,GAAU,EAAE,CAAC;YACvB,OAAO,QAAQ,CAAC,aAAa,KAAK,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;gBAC9C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;gBACzB,IAAI,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,QAAQ;oBACjC,MAAM,IAAI,WAAW,CAAC,YAAY,CAAC,UAAU,EAAE,wCAAwC,CAAC,CAAC;YAC7F,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,MAAM,CAAC,uBAAuB,CAAC,MAAgB,EAAE,IAAY;QAClE,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAC/E,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,2DAA2D;QAC3G,OAAO,IAAI,CAAC;IACd,CAAC;IAED,0EAA0E;IACnE,MAAM,CAAC,SAAS,CAAC,QAAkB;QACxC,QAAQ,CAAC,SAAS,CAAC,CAAC,aAAa,EAAE,CAAC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,MAAM,CAAC,cAAc,CAAC,QAAkB,EAAE,gBAAwB;QACvE,MAAM,SAAS,GAAG,QAAQ,CAAC,QAAQ,CAAC,oBAAoB,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAE,CAAC;QAChI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC;QAC3C,OAAO,SAAS,CAAC;IACnB,CAAC;IAEM,MAAM,CAAC,0BAA0B,CAAC,QAAkB,EAAE,eAA2B,EAAE,MAAc;QACtG,MAAM,aAAa,GAAS,mBAAmB,CAAC,UAAU,CAAC,QAAQ,EAAE,eAAe,EAAE,aAAa,MAAM,EAAE,CAAC,CAAC;QAC7G,MAAM,WAAW,GAAG,QAAQ,CAAC,QAAQ,CAAC,oBAAoB,CAAC,aAAa,CAAE,CAAC;QAC3E,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC;QAC7C,OAAO,WAAW,CAAC;IACrB,CAAC;IAEM,MAAM,CAAC,sBAAsB,CAAC,QAAkB,EAAE,OAAmB,EAAE,MAAc;QAC1F,MAAM,YAAY,GAAS,eAAe,CAAC,UAAU,CAAC,QAAQ,EAAE,OAAO,EAAE,kBAAkB,MAAM,EAAE,CAAC,CAAC;QACrG,MAAM,UAAU,GAAG,QAAQ,CAAC,QAAQ,CAAC,oBAAoB,CAAC,YAAY,CAAE,CAAC;QACzE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC;QAC5C,OAAO,UAAU,CAAC;IACpB,CAAC;IAEM,MAAM,CAAC,wBAAwB,CAAC,QAAkB,EAAE,eAA2B,EAAE,MAAc;QACpG,MAAM,aAAa,GAAS,iBAAiB,CAAC,UAAU,CAAC,QAAQ,EAAE,eAAe,EAAE,WAAW,MAAM,EAAE,CAAC,CAAC;QACzG,MAAM,WAAW,GAAG,QAAQ,CAAC,QAAQ,CAAC,oBAAoB,CAAC,aAAa,CAAE,CAAC;QAC3E,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC;QAC7C,OAAO,WAAW,CAAC;IACrB,CAAC;IAEM,MAAM,CAAC,sBAAsB,CAAC,QAAkB,EAAE,OAAmB,EAAE,UAAsB,EAAE,MAAc;QAClH,MAAM,SAAS,GAAG,eAAe,CAAC,gBAAgB,CAAC,QAAQ,EAAE,iBAAiB,MAAM,EAAE,CAAC,CAAC;QACxF,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC;QAC3C,MAAM,OAAO,GAAoB,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAkB,SAAS,CAAC,CAAC;QAC1F,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACrC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAC3C,OAAO,SAAS,CAAC;IACnB,CAAC;IAEM,MAAM,CAAC,qBAAqB,CAAC,QAAkB,EAAE,OAAmB,EAAE,YAAoB,EAAE,KAAe;QAChH,MAAM,UAAU,GAAgC;YAC9C,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE;YACrB,MAAM,EAAE,CAAC;YACT,SAAS,EAAE,KAAK;SACjB,CAAC;QACF,OAAO,eAAe,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;IAC7E,CAAC;IAEM,MAAM,CAAC,WAAW,CAAC,cAA4B;QACpD,MAAM,MAAM,GAAG,GAAG,CAAC;QACnB,MAAM,WAAW,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;QACzC,MAAM,qBAAqB,GAAG,IAAI,qBAAqB,EAAE,CAAC;QAC1D,qBAAqB,CAAC,cAAc,CAAC,GAAG,CAAC,YAAY,CACnD,WAAW,EAAE,QAAQ,CAAC,KAAK,EAAE,EAAE,QAAQ,CAAC,KAAK,EAAE,EAAE,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,EAC1E,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CACpC,CAAC,CAAC;QACJ,KAAK,MAAM,aAAa,IAAI,cAAc,EAAE,CAAC;YAC3C,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YAC7C,qBAAqB,CAAC,uBAAuB,CAAC,aAAa,CAAC,CAAC;YAC7D,qBAAqB,CAAC,cAAc,CAAC,GAAG,CAAC,YAAY,CACnD,WAAW,EAAE,QAAQ,CAAC,KAAK,EAAE,EAAE,QAAQ,CAAC,KAAK,EAAE,EAAE,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,EAC1E,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CACpC,CAAC,CAAC;QACN,CAAC;QACD,OAAO,qBAAqB,CAAC,cAAc,CAAC;IAC9C,CAAC;IAEM,MAAM,CAAC,SAAS,CAAC,IAAa,EAAE,UAAuB,EAAE,aAA0B,EAAE,gBAA6B,EAAE,cAA2B;QACpJ,MAAM,qBAAqB,GAAG,IAAI,qBAAqB,EAAE,CAAC;QAC1D,IAAI,CAAC,SAAS,KAAK,UAAU,CAAC,IAAI,CAAC,SAAS,KAAK,aAAa,CAAC,EAAE,CAAC;YAChE,qBAAqB,CAAC,uBAAuB,CAAC,aAAa,CAAC,CAAC;YAC7D,IAAI,SAAS,KAAK,gBAAgB,EAAE,CAAC;gBACnC,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;gBACrE,cAAc,CAAC,UAAU,GAAG,gBAAgB,CAAC;gBAC7C,qBAAqB,CAAC,0BAA0B,CAAC,cAAc,CAAC,CAAC;YACnE,CAAC;QACH,CAAC;QACD,qBAAqB,CAAC,cAAc,CAAC,GAAG,CAAC,YAAY,CACnD,OAAO,CAAC,UAAU,EAAE,EAAE,QAAQ,CAAC,KAAK,EAAE,EAAE,QAAQ,CAAC,KAAK,EAAE,EAAE,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EACnF,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CACpC,CAAC,CAAC;QACJ,IAAI,SAAS,KAAK,cAAc,EAAE,CAAC;YACjC,qBAAqB,CAAC,oBAAoB,CAAC,cAAc,CAAC,CAAC;QAC7D,CAAC;QACD,OAAO,qBAAqB,CAAC,cAAc,CAAC;IAC9C,CAAC;IAEM,MAAM,CAAC,cAAc,CAAC,MAAc;QACzC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACvC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC;QAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,KAAK,EAAE,EAAE,QAAQ,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QACpH,MAAM,qBAAqB,GAAG,IAAI,qBAAqB,EAAE,CAAC;QAC1D,qBAAqB,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAC/C,OAAO,qBAAqB,CAAC,cAAc,CAAC;IAC9C,CAAC;IAEM,MAAM,CAAC,eAAe,CAAC,IAAa;QACzC,MAAM,qBAAqB,GAAG,IAAI,qBAAqB,EAAE,CAAC;QAC1D,qBAAqB,CAAC,cAAc,CAAC,YAAY,CAAC,YAAY,CAAC;YAC7D,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;YACjB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;YACtB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;YAC3B,IAAI,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;YACtB,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;SAClB,CAAC,CAAC,CAAC;QACJ,OAAO,qBAAqB,CAAC,cAAc,CAAC;IAC9C,CAAC;IAEM,MAAM,CAAC,oBAAoB,CAAC,QAAkB,EAAE,OAAmB,EAAE,WAAmB;QAC7F,qKAAqK;QACrK,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,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,EAAE,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,EAAE,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,EAAE,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,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;QAC5gB,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC5D,OAAO,OAAO,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,iBAAiB,CAAC,GAAG,EAAE,WAAW,EAAE,mBAAmB,WAAW,EAAE,CAAC,CAAC;IACrI,CAAC;IAEM,MAAM,CAAC,gBAAgB,CAAC,QAAkB,EAAE,SAAiB;QAClE,4DAA4D;QAC5D,OAAO,QAAQ,CAAC,qBAAqB,CAAC,4BAA4B,OAAO,CAAC,aAAa,6BAA6B,EAAE,CAAC,SAAyB,EAAc,EAAE;YAC9J,SAAS,CAAC,UAAU,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;YAC7C,OAAO,QAAQ,CAAC,aAAa,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;QACpG,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,MAAM,CAAC,gBAAgB,CAAC,QAAkB,EAAE,SAAiB;QAClE,4DAA4D;QAC5D,OAAO,QAAQ,CAAC,qBAAqB,CAAC,4BAA4B,OAAO,CAAC,aAAa,6BAA6B,EAAE,CAAC,SAAyB,EAAc,EAAE;YAC9J,SAAS,CAAC,UAAU,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;YAC7C,OAAO,QAAQ,CAAC,aAAa,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;QACpG,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,MAAM,CAAC,oBAAoB,CAAC,QAAkB,EAAE,SAAiB,EAAE,GAAW,EAAE,MAAc;QACnG,MAAM,mBAAmB,GAAwB;YAC/C,aAAa,EAAE,cAAc,CAAC,aAAa;YAC3C,KAAK,EAAE,MAAM,CAAC,iBAAiB;YAC/B,IAAI,EAAE,WAAW,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,iBAAiB,EAAE,SAAS,CAAC;YAC3E,GAAG;YACH,MAAM;SACP,CAAC;QACF,OAAO,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC;IAC9D,CAAC;IAEM,MAAM,CAAC,oBAAoB,CAAC,QAAkB,EAAE,YAAwB,EAAE,SAAiB;QAChG,MAAM,mBAAmB,GAAwB;YAC/C,aAAa,EAAE,cAAc,CAAC,aAAa;YAC3C,KAAK,EAAE,MAAM,CAAC,iBAAiB;YAC/B,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE;YACxB,SAAS;YACT,UAAU,EAAE,IAAI,4BAA4B,CAAC,YAAY,CAAC;YAC1D,aAAa,EAAE,WAAW;YAC1B,gBAAgB,EAAE,OAAO;SAC1B,CAAC;QACF,OAAO,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC;IAC9D,CAAC;IAEM,MAAM,CAAC,cAAc,CAAC,QAAkB;QAC7C,MAAM,cAAc,GAAW,GAAG,QAAQ,CAAC,QAAQ,WAAW,CAAC;QAC/D,IAAI,UAAU,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;YAC1C,UAAU,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;QACxC,CAAC;QACD,UAAU,CAAC,cAAc,CAAC,cAAc,EAAE,GAAG,QAAQ,CAAC,QAAQ,IAAI,CAAC,CAAC;QACpE,UAAU,CAAC,cAAc,CAAC,cAAc,EAAE,uBAAuB,CAAC,CAAC;QACnE,4DAA4D;QAC5D,QAAQ,CAAC,qBAAqB,CAAC,sEAAsE,EAAE,CAAC,SAAyB,EAAQ,EAAE;YACzI,OAAO,QAAQ,CAAC,aAAa,KAAK,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC;gBACnD,MAAM,UAAU,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;gBACjD,MAAM,YAAY,GAAW,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;gBAC/D,UAAU,CAAC,cAAc,CAAC,cAAc,EAAE,GAAG,UAAU,KAAK,YAAY,IAAI,CAAC,CAAC;YAChF,CAAC;QACH,CAAC,CAAC,CAAC;QACH,UAAU,CAAC,cAAc,CAAC,cAAc,EAAE,qBAAqB,CAAC,CAAC;QACjE,4DAA4D;QAC5D,QAAQ,CAAC,qBAAqB,CAAC,6DAA6D,EAAE,CAAC,SAAyB,EAAQ,EAAE;YAChI,OAAO,QAAQ,CAAC,aAAa,KAAK,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC;gBACnD,MAAM,UAAU,GAAW,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;gBAC7D,UAAU,CAAC,cAAc,CAAC,cAAc,EAAE,GAAG,UAAU,IAAI,CAAC,CAAC;YAC/D,CAAC;QACH,CAAC,CAAC,CAAC;QACH,UAAU,CAAC,cAAc,CAAC,cAAc,EAAE,oBAAoB,CAAC,CAAC;QAChE,4DAA4D;QAC5D,QAAQ,CAAC,qBAAqB,CAAC,4BAA4B,KAAK,CAAC,aAAa,wBAAwB,EAAE,CAAC,SAAyB,EAAQ,EAAE;YAC1I,OAAO,QAAQ,CAAC,aAAa,KAAK,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC;gBACnD,MAAM,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;gBAC9C,MAAM,KAAK,GAAU,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;gBACvD,UAAU,CAAC,cAAc,CAAC,cAAc,EAAE,GAAG,OAAO,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,WAAW,KAAK,KAAK,CAAC,aAAa,IAAI,CAAC,CAAC;YACzH,CAAC;QACH,CAAC,CAAC,CAAC;QACH,UAAU,CAAC,cAAc,CAAC,cAAc,EAAE,6BAA6B,CAAC,CAAC;QACzE,4DAA4D;QAC5D,QAAQ,CAAC,qBAAqB,CAAC,4BAA4B,cAAc,CAAC,aAAa,wBAAwB,EAAE,CAAC,SAAyB,EAAQ,EAAE;YACnJ,OAAO,QAAQ,CAAC,aAAa,KAAK,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC;gBACnD,MAAM,gBAAgB,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;gBACvD,MAAM,cAAc,GAAmB,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAiB,gBAAgB,CAAC,CAAC;gBACtG,UAAU,CAAC,cAAc,CAAC,cAAc,EAAE,GAAG,gBAAgB,KAAK,cAAc,CAAC,IAAI,CAAC,KAAK,KAAK,cAAc,CAAC,aAAa,IAAI,CAAC,CAAC;YACpI,CAAC;QACH,CAAC,CAAC,CAAC;QACH,UAAU,CAAC,cAAc,CAAC,cAAc,EAAE,sBAAsB,CAAC,CAAC;QAClE,4DAA4D;QAC5D,QAAQ,CAAC,qBAAqB,CAAC,wBAAwB,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,SAAyB,EAAQ,EAAE;YAClH,IAAI,QAAQ,CAAC,aAAa,KAAK,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC;gBAChD,MAAM,KAAK,GAAW,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;gBACzD,UAAU,CAAC,cAAc,CAAC,cAAc,EAAE,YAAY,OAAO,CAAC,aAAa,IAAI,KAAK,IAAI,CAAC,CAAC;YAC5F,CAAC;QACH,CAAC,CAAC,CAAC;QACH,4DAA4D;QAC5D,QAAQ,CAAC,qBAAqB,CAAC,wBAAwB,cAAc,CAAC,aAAa,EAAE,EAAE,CAAC,SAAyB,EAAQ,EAAE;YACzH,IAAI,QAAQ,CAAC,aAAa,KAAK,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC;gBAChD,MAAM,KAAK,GAAW,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;gBACzD,UAAU,CAAC,cAAc,CAAC,cAAc,EAAE,YAAY,cAAc,CAAC,aAAa,IAAI,KAAK,IAAI,CAAC,CAAC;YACnG,CAAC;QACH,CAAC,CAAC,CAAC;QACH,4DAA4D;QAC5D,QAAQ,CAAC,qBAAqB,CAAC,wBAAwB,YAAY,CAAC,aAAa,EAAE,EAAE,CAAC,SAAyB,EAAQ,EAAE;YACvH,IAAI,QAAQ,CAAC,aAAa,KAAK,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC;gBAChD,MAAM,KAAK,GAAW,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;gBACzD,UAAU,CAAC,cAAc,CAAC,cAAc,EAAE,YAAY,YAAY,CAAC,aAAa,IAAI,KAAK,IAAI,CAAC,CAAC;YACjG,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAED,MAAM,OAAO,qBAAqB;IAChC,MAAM,CAAC,gBAAgB,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IAC7C,MAAM,CAAC,eAAe,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IAErC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,QAAkB;QAC9C,yBAAyB;QACzB,MAAM,oBAAoB,GAAG,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,oCAAoC,CAAC,CAAC;QAC3G,MAAM,QAAQ,CAAC,aAAa,CAAC,CAAC,gBAAgB,CAAC,cAAc,EAAE,oBAAoB,CAAC,CAAC,CAAC;QACtF,gBAAgB,CAAC,cAAc,EAAE,CAAC;IACpC,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,QAAkB;QAC/C,uCAAuC;QACvC,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC/F,MAAM,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;QACxC,MAAM,CAAC,WAAW,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QAEnC,6BAA6B;QAC7B,MAAM,cAAc,GAAG,IAAI,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAC1E,QAAQ,CAAC,oBAAoB,CAAC,cAAc,CAAC,CAAC;QAC9C,mBAAmB;QACnB,MAAM,WAAW,GAAG,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,gBAAgB,EAAE,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1F,MAAM,WAAW,GAAG,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,eAAe,EAAE,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACjG,MAAM,WAAW,GAAG,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,oBAAoB,EAAE,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9F,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC;QAC7C,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC;QAC7C,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC;QAC7C,mCAAmC;QACnC,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,aAAa,EAAE,SAAS,EAAE,qBAAqB,CAAC,CAAC;QACnG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC;QAC3C,MAAM,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC;QAC7F,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC,CAAC;QACrD,MAAM,iBAAiB,GAAG,eAAe,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;QACpF,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACnD,MAAM,kBAAkB,GAAG,sBAAsB,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;QAC7F,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC,CAAC;QACpD,MAAM,YAAY,GAAG,UAAU,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QACrE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC;QAC9C,MAAM,eAAe,GAAG,aAAa,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;QAC9E,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,CAAC;QACjD,MAAM,sBAAsB,GAAG,oBAAoB,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,EAAE,iBAAiB,EAAE,IAAI,CAAC,CAAC;QACzG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC,CAAC;QACxD,MAAM,iBAAiB,GAAG,eAAe,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;QACpF,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACnD,MAAM,mBAAmB,GAAG,iBAAiB,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;QACtF,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC,CAAC;QACrD,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,mBAAmB,EAAE,SAAS,CAAC,CAAC;QAC3E,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC;QAC3C,4BAA4B;QAC5B,MAAM,eAAe,GAAG,aAAa,CAAC,MAAM,CAAC,QAAQ,EAAE,iBAAiB,EAAE,eAAe,EAAE,CAAC,eAAe,EAAE,sBAAsB,CAAC,CAAC,CAAC;QACtI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,CAAC;QACjD,MAAM,iBAAiB,GAAG,eAAe,CAAC,qBAAqB,CAAC,QAAQ,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;QAChI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACnD,MAAM,wBAAwB,GAAG,eAAe,CAAC,qBAAqB,CAAC,QAAQ,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC7I,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC,CAAC;QAC1D,MAAM,aAAa,GAAG,WAAW,CAAC,MAAM,CAAC,QAAQ,EAAE,iBAAiB,EAAE,aAAa,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACxH,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC;QAC/C,MAAM,qBAAqB,GAAG,WAAW,CAAC,MAAM,CAAC,QAAQ,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACzI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC,CAAC;QACvD,MAAM,iBAAiB,GAAG,eAAe,CAAC,MAAM,CAAC,QAAQ,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,IAAI,qBAAqB,EAAE,CAAC,CAAC;QAC9H,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACnD,MAAM,yBAAyB,GAAG,gBAAgB,CAAC,MAAM,CAAC,QAAQ,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,CAAC,iBAAiB,EAAE,wBAAwB,CAAC,CAAC,CAAC;QAC3J,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,yBAAyB,CAAC,CAAC,CAAC;QAC3D,MAAM,yBAAyB,GAAG,gBAAgB,CAAC,MAAM,CAAC,QAAQ,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACjI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,yBAAyB,CAAC,CAAC,CAAC;QAC3D,MAAM,mBAAmB,GAA0B;YACjD,aAAa,EAAE,gBAAgB,CAAC,aAAa;YAC7C,KAAK,EAAE,iBAAiB;YACxB,IAAI,EAAE,gBAAgB,CAAC,UAAU,CAAC,QAAQ,EAAE,iBAAiB,EAAE,kBAAkB,CAAC;SACnF,CAAC;QACF,MAAM,gBAAgB,GAAG,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC;QAC9E,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAClD,MAAM,SAAS,GAAG,eAAe,CAAC,oBAAoB,CAAC,QAAQ,EAAE,iBAAiB,EAAE,SAAS,CAAC,CAAC;QAC/F,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC;QAC3C,MAAM,gBAAgB,GAAG,qBAAqB,CAAC,MAAM,CAAC,QAAQ,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC,CAAC;QACrI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAClD,MAAM,iBAAiB,GAAsB;YAC3C,aAAa,EAAE,YAAY,CAAC,aAAa;YACzC,KAAK,EAAE,iBAAiB;YACxB,IAAI,EAAE,YAAY,CAAC,UAAU,CAAC,QAAQ,EAAE,iBAAiB,EAAE,cAAc,CAAC;YAC1E,IAAI,EAAE,eAAe,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;SACzD,CAAC;QACF,MAAM,cAAc,GAAG,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC;QAC1E,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC;QAChD,4BAA4B;QAC5B,MAAM,uBAAuB,GAAG;YAC9B,aAAa,EAAE,+CAA+C;YAC9D,KAAK,EAAE,kBAAkB;YACzB,IAAI,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,oBAAoB,EAAE;YACnF,YAAY,EAAE,SAAS;YACvB,YAAY,EAAE,KAAK;SACpB,CAAC;QACF,MAAM,oBAAoB,GAAG,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,uBAAuB,CAAC,CAAC;QACtF,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC,CAAC;QACtD,MAAM,uBAAuB,GAAQ;YACnC,aAAa,EAAE,+CAA+C;YAC9D,KAAK,EAAE,kBAAkB;YACzB,IAAI,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,oBAAoB,EAAE;YACnF,YAAY,EAAE,SAAS;YACvB,YAAY,EAAE,KAAK;SACpB,CAAC;QACF,MAAM,oBAAoB,GAAG,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,uBAAuB,CAAC,CAAC;QACtF,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC,CAAC;QACtD,MAAM,uBAAuB,GAAG;YAC9B,aAAa,EAAE,+CAA+C;YAC9D,KAAK,EAAE,kBAAkB;YACzB,IAAI,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,oBAAoB,EAAE;YACnF,YAAY,EAAE,SAAS;YACvB,YAAY,EAAE,OAAO;SACtB,CAAC;QACF,MAAM,oBAAoB,GAAG,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,uBAAuB,CAAC,CAAC;QACtF,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC,CAAC;QACtD,yBAAyB;QACzB,MAAM,oBAAoB,GAAyB;YACjD,aAAa,EAAE,cAAc,CAAC,aAAa;YAC3C,KAAK,EAAE,eAAe;YACtB,QAAQ,EAAE,iBAAiB;YAC3B,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE;YACxB,SAAS,EAAE,iBAAiB;YAC5B,IAAI,EAAE,eAAe,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,iBAAiB,EAAE,aAAa,EAAE,gBAAgB,EAAE,cAAc,CAAC;YAC5H,SAAS,EAAE;gBACT,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;gBAC/B,MAAM,EAAE,kBAAkB,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;aAClD;SACF,CAAC;QACF,MAAM,iBAAiB,GAAG,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,oBAAoB,CAAC,CAAC;QAChF,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACnD,kCAAkC;QAClC,MAAM,kBAAkB,GAAyB,oBAAoB,CAAC;QACtE,kBAAkB,CAAC,SAAS,GAAG,eAAe,CAAC;QAC/C,kBAAkB,CAAC,MAAM,GAAG,IAAI,wBAAwB,CAAC,iBAAiB,CAAC,CAAC;QAC5E,kBAAkB,CAAC,SAAU,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/D,MAAM,eAAe,GAAG,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC;QAC5E,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,CAAC;QACjD,MAAM,kBAAkB,GAAyB,kBAAkB,CAAC;QACpE,kBAAkB,CAAC,SAAS,GAAG,eAAe,CAAC;QAC/C,kBAAkB,CAAC,SAAU,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/D,MAAM,eAAe,GAAG,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC;QAC5E,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,CAAC;QACjD,yBAAyB;QACzB,MAAM,oBAAoB,GAAyB;YACjD,aAAa,EAAE,cAAc,CAAC,aAAa;YAC3C,KAAK,EAAE,eAAe;YACtB,QAAQ,EAAE,wBAAwB;YAClC,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE;YACxB,SAAS,EAAE,iBAAiB;YAC5B,IAAI,EAAE,eAAe,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACxD,SAAS,EAAE;gBACT,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;gBAC/B,MAAM,EAAE,kBAAkB,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;aAClD;SACF,CAAC;QACF,MAAM,iBAAiB,GAAG,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,oBAAoB,CAAC,CAAC;QAChF,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACnD,yBAAyB;QACzB,MAAM,oBAAoB,GAAyB;YACjD,aAAa,EAAE,cAAc,CAAC,aAAa;YAC3C,KAAK,EAAE,eAAe;YACtB,QAAQ,EAAE,wBAAwB;YAClC,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE;YACxB,cAAc,EAAE,qBAAqB,CAAC,eAAe;YACrD,SAAS,EAAE,iBAAiB;SAC7B,CAAC;QACF,MAAM,iBAAiB,GAAG,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,oBAAoB,CAAC,CAAC;QAChF,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACnD,yBAAyB;QACzB,MAAM,oBAAoB,GAAyB;YACjD,aAAa,EAAE,cAAc,CAAC,aAAa;YAC3C,KAAK,EAAE,eAAe;YACtB,QAAQ,EAAE,iBAAiB;YAC3B,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE;YACxB,SAAS,EAAE,iBAAiB;YAC5B,IAAI,EAAE,eAAe,CAAC,WAAW,CAAC,CAAC,aAAa,EAAE,qBAAqB,CAAC,CAAC;YACzE,SAAS,EAAE;gBACT,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;gBAC/B,MAAM,EAAE,kBAAkB,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;aAClD;SACF,CAAC;QACF,MAAM,iBAAiB,GAAG,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,oBAAoB,CAAC,CAAC;QAChF,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACnD,0BAA0B;QAC1B,MAAM,0BAA0B,GAAyB;YACvD,aAAa,EAAE,6CAA6C;YAC5D,KAAK,EAAE,eAAe;YACtB,QAAQ,EAAE,wBAAwB;YAClC,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE;YACxB,SAAS,EAAE,kBAAkB;YAC7B,IAAI,EAAE,eAAe,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACxD,SAAS,EAAE;gBACT,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;gBAC/B,MAAM,EAAE,kBAAkB,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;aAClD;YACD,YAAY,EAAE,IAAI;YAClB,YAAY,EAAE,GAAG;YACjB,gBAAgB,EAAE,EAAE,EAAE,EAAE,wBAAwB,EAAE,YAAY,EAAE,iEAAiE,EAAE;YACnI,gBAAgB,EAAE,EAAE,EAAE,EAAE,wBAAwB,EAAE;YAClD,YAAY,EAAE,QAAQ;YACtB,YAAY,EAAE,GAAG;YACjB,YAAY,EAAE,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC1C,YAAY,EAAE,mBAAmB,CAAC,cAAc,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC9E,WAAW,EAAE,OAAO;SACG,CAAC;QAC1B,MAAM,uBAAuB,GAAG,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,0BAA0B,CAAC,CAAC;QAC5F,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC,CAAC;QACzD,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,uBAAuB,CAAC,CAAC,CAAC;QACjF,wBAAwB;QACxB,MAAM,WAAW,GAAG;YAClB,aAAa,EAAE,0CAA0C;YACzD,OAAO,EAAE,IAAI,uBAAuB,CAAC,iBAAiB,CAAC;YACvD,YAAY,EAAE,GAAG;YACjB,YAAY,EAAE,QAAQ;YACtB,UAAU,EAAE,iBAAiB;YAC7B,YAAY,EAAE,mBAAmB,CAAC,cAAc,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC9E,YAAY,EAAE,IAAI;YAClB,YAAY,EAAE,cAAc;YAC5B,UAAU,EAAE,iBAAiB;YAC7B,UAAU,EAAE,qBAAqB,CAAC,gBAAgB;YAClD,WAAW,EAAE,OAAO;SACZ,CAAC;QACX,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;QAC5C,MAAM,kBAAkB,GAAwB,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,iBAAiB,EAAE,0CAA0C,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/I,MAAM,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,cAAc,CAAC,CAAC,EAAE,EAAE,uBAAuB,EAAE,IAAI,EAAE,CAAC,CAAC;QACvH,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC;YAC7B,aAAa,EAAE,yCAAyC;YACxD,OAAO,EAAE,IAAI,uBAAuB,CAAC,iBAAiB,CAAC;YACvD,YAAY,EAAE,GAAG;YACjB,YAAY,EAAE,OAAO;YACrB,UAAU,EAAE,iBAAiB;YAC7B,YAAY,EAAE,IAAI;YAClB,YAAY,EAAE,aAAa;YAC3B,UAAU,EAAE,iBAAiB;YAC7B,UAAU,EAAE,IAAI,CAAC,WAAW,EAAE;YAC9B,WAAW,EAAE,OAAO;SACC,CAAC,CAAC;QACzB,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC;YAC7B,aAAa,EAAE,yCAAyC;YACxD,OAAO,EAAE,IAAI,uBAAuB,CAAC,iBAAiB,CAAC;YACvD,YAAY,EAAE,GAAG;YACjB,YAAY,EAAE,OAAO;YACrB,UAAU,EAAE,iBAAiB;YAC7B,YAAY,EAAE,IAAI;YAClB,YAAY,EAAE,aAAa;YAC3B,UAAU,EAAE,iBAAiB;YAC7B,UAAU,EAAE,IAAI,CAAC,WAAW,EAAE;YAC9B,WAAW,EAAE,OAAO;SACC,CAAC,CAAC;QACzB,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC;YAC7B,aAAa,EAAE,mDAAmD;YAClE,OAAO,EAAE,IAAI,uBAAuB,CAAC,iBAAiB,CAAC;YACvD,WAAW,EAAE,qBAAqB;SACb,CAAC,CAAC;QACzB,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC;YAC7B,aAAa,EAAE,kDAAkD;YACjE,OAAO,EAAE,IAAI,uBAAuB,CAAC,iBAAiB,CAAC;YACvD,WAAW,EAAE,oBAAoB;SACZ,CAAC,CAAC;QACzB,yBAAyB;QACzB,MAAM,oBAAoB,GAA4B;YACpD,aAAa,EAAE,cAAc,CAAC,aAAa;YAC3C,KAAK,EAAE,SAAS;YAChB,QAAQ,EAAE,iBAAiB;YAC3B,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE;YACxB,SAAS,EAAE,iBAAiB;YAC5B,IAAI,EAAE,eAAe,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC3D,SAAS,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;SACtD,CAAC;QACF,MAAM,iBAAiB,GAAG,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,oBAAoB,CAAC,CAAC;QAChF,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACnD,MAAM,2BAA2B,GAAG,+BAA+B,CAAC,MAAM,CAAC,QAAQ,EAAE,iBAAiB,EAAE,iBAAiB,CAAC,CAAC;QAC3H,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,2BAA2B,CAAC,CAAC,CAAC;QAC7D,MAAM,oBAAoB,GAA4B;YACpD,aAAa,EAAE,cAAc,CAAC,aAAa;YAC3C,KAAK,EAAE,SAAS;YAChB,QAAQ,EAAE,iBAAiB;YAC3B,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE;YACxB,SAAS,EAAE,iBAAiB;YAC5B,IAAI,EAAE,eAAe,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC3D,SAAS,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;SACtD,CAAC;QACF,MAAM,iBAAiB,GAAG,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,oBAAoB,CAAC,CAAC;QAChF,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACnD,MAAM,2BAA2B,GAAG,+BAA+B,CAAC,MAAM,CAAC,QAAQ,EAAE,iBAAiB,EAAE,iBAAiB,CAAC,CAAC;QAC3H,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,2BAA2B,CAAC,CAAC,CAAC;QAC7D,uBAAuB;QACvB,MAAM,gBAAgB,GAAG,cAAc,CAAC,MAAM,CAAC,QAAQ,EAAE,iBAAiB,EAAE,gBAAgB,CAAC,CAAC;QAC9F,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAClD,MAAM,cAAc,GAAmB,cAAc,CAAC,MAAM,CAAC,QAAQ,EAAE,iBAAiB,EAAE,gBAAgB,CAAC,CAAC;QAC5G,MAAM,mBAAmB,GAAwB,mBAAmB,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC1H,cAAc,CAAC,QAAQ,CAAC,mBAAmB,CAAC,aAAa,EAAE,mBAAmB,CAAC,CAAC;QAChF,cAAc,CAAC,QAAQ,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,CAAC;QAC/D,cAAc,CAAC,QAAQ,CAAC,yBAAyB,CAAC,sBAAsB,EAAE,sBAAsB,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAChI,cAAc,CAAC,QAAQ,CAAC,WAAW,GAAG,WAAW,CAAC,QAAQ,CAAC;YACzD,GAAG,EAAE;gBACH,KAAK,EAAE;oBACL,IAAI,EAAE,eAAe,CAAC,SAAS;oBAC/B,OAAO,EAAE,SAAS;iBACnB;aACF;SACF,CAAC,CAAC;QACH,MAAM,gBAAgB,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC;QACjD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAClD,yBAAyB;QACzB,MAAM,MAAM,GAAG,0BAA0B,CAAC,MAAM,CAAC,QAAQ,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,eAAe,EAAE,yBAAyB,EAAE,gBAAgB,EAAE,cAAc,EAAE,iBAAiB,CAAC,GAAG,CAAC,CAAC;QACxM,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;QACxC,MAAM,gBAAgB,GAAG,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QACrD,MAAM,aAAa,GAAG,qBAAqB,CAAC,MAAM,CAAC,QAAQ,EAAE,iBAAiB,EAAE,cAAc,EAAE,SAAS,EAAE,yBAAyB,EAAE,gBAAgB,EAAE,gBAAgB,CAAC,CAAC;QAC1K,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC;QAC/C,gFAAgF;QAChF,MAAM,aAAa,GAAiB,QAAQ,CAAC,aAAa,CAAC,cAAc,CAAC;YACxE,aAAa,EAAE,0CAA0C;YACzD,QAAQ,EAAE,yBAAyB;YACnC,QAAQ,EAAE,yBAAyB;SACpC,CAAC,CAAC;QACH,MAAM,eAAe,GAAG,QAAQ,CAAC,aAAa,CAAC,cAAc,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC;QACtF,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,CAAC;QACjD,0EAA0E;QAC1E,MAAM,aAAa,GAAiB,QAAQ,CAAC,aAAa,CAAC,cAAc,CAAC;YACxE,aAAa,EAAE,0CAA0C;YACzD,QAAQ,EAAE,yBAAyB;YACnC,QAAQ,EAAE,yBAAyB;YACnC,YAAY,EAAE,KAAK;YACnB,YAAY,EAAE,GAAG;YACjB,UAAU,EAAE,iBAAiB;YAC7B,UAAU,EAAE,IAAI,CAAC,WAAW,EAAE;SACxB,CAAC,CAAC;QACV,MAAM,eAAe,GAAG,QAAQ,CAAC,aAAa,CAAC,cAAc,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC;QACtF,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,CAAC;IACnD,CAAC;IAEM,MAAM,CAAC,QAAQ,CAAC,QAAkB;QACvC,yBAAyB;QACzB,MAAM,SAAS,GAAG,QAAQ,CAAC,QAAQ,CAAC,oBAAoB,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,aAAa,EAAE,SAAS,CAAC,CAAE,CAAC;QACzH,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC;QAC3C,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAU,SAAS,CAAC,CAAC;QACjE,OAAO,CAAC,WAAW,GAAG,+BAA+B,CAAC;QACtD,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAClD,iCAAiC;QACjC,MAAM,iBAAiB,GAAG,QAAQ,CAAC,QAAQ,CAAC,oBAAoB,CAAC,2BAA2B,CAAC,UAAU,CAAC,QAAQ,EAAE,SAAS,EAAE,YAAY,CAAC,CAAE,CAAC;QAC7I,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACnD,MAAM,iBAAiB,GAAG,QAAQ,CAAC,QAAQ,CAAC,oBAAoB,CAAC,eAAe,CAAC,UAAU,CAAC,QAAQ,EAAE,iBAAiB,EAAE,iBAAiB,CAAC,CAAE,CAAC;QAC9I,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACnD,MAAM,eAAe,GAAoB,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAkB,iBAAiB,CAAC,CAAC;QAC1G,eAAe,CAAC,cAAc,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACpD,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC;QAC1D,iCAAiC;QACjC,MAAM,yBAAyB,GAAG,QAAQ,CAAC,QAAQ,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,UAAU,CAAC,QAAQ,EAAE,iBAAiB,EAAE,mBAAmB,CAAC,CAAE,CAAC;QACzJ,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,yBAAyB,CAAC,CAAC,CAAC;QAC3D,MAAM,yBAAyB,GAAG,QAAQ,CAAC,QAAQ,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,UAAU,CAAC,QAAQ,EAAE,iBAAiB,EAAE,mBAAmB,CAAC,CAAE,CAAC;QACzJ,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,yBAAyB,CAAC,CAAC,CAAC;QAC3D,MAAM,YAAY,GAAQ,QAAQ,CAAC,aAAa,CAAC,gBAAgB,CAC/D,0CAA0C,EAC1C,EAAE,QAAQ,EAAE,yBAAyB,EAAE,QAAQ,EAAE,yBAAyB,EAAE,CAC7E,CAAC;QACF,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QAC/C,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;QAC7C,YAAY,CAAC,YAAY,IAAI,UAAU,CAAC;QACxC,YAAY,CAAC,YAAY,GAAG,GAAG,CAAC;QAChC,QAAQ,CAAC,aAAa,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACpD,kCAAkC;QAClC,MAAM,iBAAiB,GAAG,eAAe,CAAC,gBAAgB,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;QACxF,MAAM,mBAAmB,GAAoB,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,iBAAiB,EAAE,0CAA0C,CAAC,CAAC;QACzI,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC5C,mBAAmB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,IAAI,UAAU,CAAC;QACxD,mBAAmB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,IAAI,UAAU,CAAC;QACxD,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QAChE,MAAM,kBAAkB,GAAoB,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,iBAAiB,EAAE,yCAAyC,CAAC,CAAC;QACvI,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC3C,kBAAkB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,IAAI,UAAU,CAAC;QACvD,kBAAkB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,IAAI,UAAU,CAAC;QACvD,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QAC/D,+CAA+C;QAC/C,MAAM,kBAAkB,GAAG,eAAe,CAAC,gBAAgB,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC;QAC1F,IAAI,gBAAgB,GAAoB,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC;QACzF,gBAAgB,CAAC,KAAK,CAAC,gBAAgB,GAAG,cAAc,CAAC,IAAI,CAAC;QAC9D,gBAAgB,CAAC,MAAM,EAAE,CAAC;QAC1B,gBAAgB,GAAG,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC;QACpE,MAAM,CAAC,WAAW,CAAC,gBAAgB,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAC5D,yBAAyB;QACzB,MAAM,iBAAiB,GAAG,eAAe,CAAC,gBAAgB,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;QACxF,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACnD,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC;QACnD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC,gBAAgB,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC,CAAC;QAC1F,yBAAyB;QACzB,MAAM,oBAAoB,GAAyB;YACjD,aAAa,EAAE,cAAc,CAAC,aAAa;YAC3C,KAAK,EAAE,gBAAgB,CAAC,KAAK;YAC7B,QAAQ,EAAE,iBAAiB;YAC3B,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE;YACxB,SAAS,EAAE,iBAAiB;YAC5B,IAAI,EAAE,eAAe,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACxD,SAAS,EAAE;gBACT,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;gBAC/B,MAAM,EAAE,kBAAkB,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;aAClD;SACF,CAAC;QACF,MAAM,iBAAiB,GAAG,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,oBAAoB,CAAC,CAAC;QAChF,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACnD,sBAAsB;QACtB,MAAM,iBAAiB,GAAG,eAAe,CAAC,gBAAgB,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;QACxF,MAAM,iBAAiB,GAAG,eAAe,CAAC,gBAAgB,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;QACxF,MAAM,YAAY,GAAiB,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC,+BAA+B,CAAC,aAAa,EAAE,EAAE,QAAQ,EAAE,iBAAiB,EAAE,QAAQ,EAAE,iBAAiB,EAAE,CAAC,CAAC;QACnL,YAAY,CAAC,MAAM,EAAE,CAAC;QACtB,uBAAuB;QACvB,+BAA+B,CAAC,MAAM,CAAC,QAAQ,EAAE,iBAAiB,EAAE,iBAAiB,CAAC,CAAC;QACvF,+BAA+B,CAAC,MAAM,CAAC,QAAQ,EAAE,iBAAiB,EAAE,iBAAiB,CAAC,CAAC;QACvF,4BAA4B;QAC5B,MAAM,yBAAyB,GAAa,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;QAC/F,MAAM,kBAAkB,GAAG,QAAQ,CAAC,QAAQ,CAAC,oBAAoB,CAAC,2BAA2B,CAAC,UAAU,CAAC,QAAQ,EAAE,SAAS,EAAE,aAAa,CAAC,CAAE,CAAC;QAC/I,MAAM,sBAAsB,GAAS,IAAI,IAAI,CAAC,EAAE,IAAI,EAAE,yBAAyB,CAAC,EAAE,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC,CAAC;QAC9I,MAAM,oBAAoB,GAAG,QAAQ,CAAC,QAAQ,CAAC,oBAAoB,CAAC,sBAAsB,CAAE,CAAC;QAC7F,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC,CAAC;QACtD,MAAM,kBAAkB,GAAQ,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;QACnF,kBAAkB,CAAC,YAAY,GAAG,GAAG,kBAAkB,CAAC,YAAY,UAAU,CAAC;QAC/E,kBAAkB,CAAC,YAAY,GAAG,GAAG,kBAAkB,CAAC,YAAY,UAAU,CAAC;QAC/E,kBAAkB,CAAC,MAAM,EAAE,CAAC;QAC5B,4BAA4B;QAC5B,MAAM,sBAAsB,GAAS,IAAI,IAAI,CAAC,EAAE,IAAI,EAAE,yBAAyB,CAAC,EAAE,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC,CAAC;QAC9I,MAAM,oBAAoB,GAAG,QAAQ,CAAC,QAAQ,CAAC,oBAAoB,CAAC,sBAAsB,CAAE,CAAC;QAC7F,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC,CAAC;QACtD,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,oBAAoB,CAAC,CAAC;IACxD,CAAC;IAEM,MAAM,CAAC,iBAAiB,CAAC,QAAkB,EAAE,gBAAyB,IAAI;QAC/E,sCAAsC;QACtC,MAAM,gBAAgB,GAAG,QAAQ,CAAC,kBAAkB,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;QAC7F,MAAM,gBAAgB,GAAG,QAAQ,CAAC,kBAAkB,CAAC,6BAA6B,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;QACnG,MAAM,CAAC,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,CAAC;QACpD,6BAA6B;QAC7B,MAAM,SAAS,GAAG,QAAQ,CAAC,QAAQ,CAAC,oBAAoB,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,aAAa,EAAE,SAAS,CAAC,CAAE,CAAC;QACzH,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC;QAC3C,MAAM,OAAO,GAAY,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAU,SAAS,CAAC,CAAC;QAC1E,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,+BAA+B,CAAC,CAAC;QACnE,qCAAqC;QACrC,MAAM,iBAAiB,GAAG,QAAQ,CAAC,QAAQ,CAAC,oBAAoB,CAAC,2BAA2B,CAAC,UAAU,CAAC,QAAQ,EAAE,SAAS,EAAE,YAAY,CAAC,CAAE,CAAC;QAC7I,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACnD,MAAM,iBAAiB,GAAG,QAAQ,CAAC,QAAQ,CAAC,oBAAoB,CAAC,eAAe,CAAC,UAAU,CAAC,QAAQ,EAAE,iBAAiB,EAAE,iBAAiB,CAAC,CAAE,CAAC;QAC9I,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACnD,MAAM,eAAe,GAAoB,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAkB,iBAAiB,CAAC,CAAC;QAC1G,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC;QAC9C,wCAAwC;QACxC,MAAM,yBAAyB,GAAG,QAAQ,CAAC,QAAQ,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,UAAU,CAAC,QAAQ,EAAE,iBAAiB,EAAE,mBAAmB,CAAC,CAAE,CAAC;QACzJ,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,yBAAyB,CAAC,CAAC,CAAC;QAC3D,MAAM,yBAAyB,GAAG,QAAQ,CAAC,QAAQ,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,UAAU,CAAC,QAAQ,EAAE,iBAAiB,EAAE,mBAAmB,CAAC,CAAE,CAAC;QACzJ,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,yBAAyB,CAAC,CAAC,CAAC;QAC3D,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,CAAC,CAAC,gDAAgD,CAAC,CAAC,CAAC,0CAA0C,CAAC;QAC1I,MAAM,YAAY,GAAQ,QAAQ,CAAC,aAAa,CAAC,gBAAgB,CAC/D,gBAAgB,EAChB,EAAE,QAAQ,EAAE,yBAAyB,EAAE,QAAQ,EAAE,yBAAyB,EAAE,CAC7E,CAAC;QACF,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;QACtG,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;QAC5F,kCAAkC;QAClC,MAAM,iBAAiB,GAAG,eAAe,CAAC,gBAAgB,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;QACxF,MAAM,yBAAyB,GAAG,gBAAgB,CAAC,CAAC,CAAC,gDAAgD,CAAC,CAAC,CAAC,0CAA0C,CAAC;QACnJ,MAAM,aAAa,GAAoB,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,iBAAiB,EAAE,yBAAyB,CAAC,CAAC;QAClH,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACtC,MAAM,YAAY,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAC5C,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC;YACvC,YAAY,EAAE,GAAG;YACjB,YAAY,EAAE,gBAAgB;YAC9B,UAAU,EAAE,iBAAiB;SAC9B,CAAC,CAAC;QACH,IAAI,gBAAgB,EAAE,CAAC;YACrB,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC;gBACvC,YAAY,EAAE,IAAI;gBAClB,YAAY,EAAE,sBAAsB;gBACpC,UAAU,EAAE,iBAAiB;aAC9B,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC;gBACvC,YAAY,EAAE,IAAI;gBAClB,YAAY,EAAE,sBAAsB;gBACpC,UAAU,EAAE,iBAAiB;aAC9B,CAAC,CAAC;QACL,CAAC;QACD,MAAM,wBAAwB,GAAG,gBAAgB,CAAC,CAAC,CAAC,+CAA+C,CAAC,CAAC,CAAC,yCAAyC,CAAC;QAChJ,MAAM,YAAY,GAAoB,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,iBAAiB,EAAE,wBAAwB,CAAC,CAAC;QAChH,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACrC,MAAM,YAAY,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAC3C,MAAM,YAAY,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAC3C,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;QAC7C,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACjD,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;QACzD,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;QAC7F,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;QACtG,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;QACtG,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;QAC7C,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;QACzD,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;QACzD,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;QAC7F,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,YAAY,EAAE,qBAAqB,CAAC,CAAC;QAC9G,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;QACtG,4DAA4D;QAC5D,MAAM,iBAAiB,GAAG,eAAe,CAAC,gBAAgB,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC;QACzF,MAAM,eAAe,GAAoB,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;QACzF,MAAM,CAAC,WAAW,CAAC,eAAe,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAC3D,sCAAsC;QACtC,MAAM,iBAAiB,GAAG,eAAe,CAAC,gBAAgB,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;QACxF,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACnD,qCAAqC;QACrC,MAAM,iBAAiB,GAAG,eAAe,CAAC,gBAAgB,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;QACxF,MAAM,iBAAiB,GAAG,eAAe,CAAC,gBAAgB,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;QACxF,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC,+BAA+B,CAAC,aAAa,EAAE,EAAE,QAAQ,EAAE,iBAAiB,EAAE,QAAQ,EAAE,iBAAiB,EAAE,CAAC,CAAC;QAChJ,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC,+BAA+B,CAAC,aAAa,EAAE,EAAE,QAAQ,EAAE,iBAAiB,EAAE,QAAQ,EAAE,iBAAiB,EAAE,CAAC,CAAC;QAChJ,wCAAwC;QACxC,MAAM,yBAAyB,GAAa,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;QAC/F,MAAM,kBAAkB,GAAG,QAAQ,CAAC,QAAQ,CAAC,oBAAoB,CAAC,2BAA2B,CAAC,UAAU,CAAC,QAAQ,EAAE,SAAS,EAAE,aAAa,CAAC,CAAE,CAAC;QAC/I,MAAM,oBAAoB,GAAG,QAAQ,CAAC,QAAQ,CAAC,oBAAoB,CAAC,IAAI,IAAI,CAAC,EAAE,IAAI,EAAE,yBAAyB,CAAC,EAAE,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC,CAAC,CAAC;QAC9K,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,oBAAqB,CAAC,CAAC,CAAC;QACvD,MAAM,kBAAkB,GAAQ,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,oBAAqB,CAAC,CAAC;QACpF,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;QACjE,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC,CAAC,kBAAkB,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;QAClH,wCAAwC;QACxC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,oBAAoB,CAAC,IAAI,IAAI,CAAC,EAAE,IAAI,EAAE,yBAAyB,CAAC,EAAE,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC,CAAC,CAAC,CAAC;QACnK,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,oBAAoB,CAAC,IAAI,IAAI,CAAC,EAAE,IAAI,EAAE,yBAAyB,CAAC,EAAE,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC,CAAC,CAAC,CAAC;QACnK,qGAAqG;QACrG,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC,gBAAgB,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC,CAAC;YAC1F,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,gBAAgB,CAAC,+BAA+B,CAAC,aAAa,EAAE,EAAE,QAAQ,EAAE,iBAAiB,EAAE,QAAQ,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC;YAC1K,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,oBAAoB,CAAC,IAAI,IAAI,CAAC,EAAE,IAAI,EAAE,yBAAyB,CAAC,EAAE,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC,CAAC,CAAC,CAAC;QACvK,CAAC;IACH,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 { Buffer } from \"node:buffer\";\nimport * as chai from \"chai\";\nimport { assert, expect } from \"chai\";\nimport * as chaiAsPromised from \"chai-as-promised\";\nimport * as path from \"path\";\nimport { AccessToken, BeEvent, DbResult, Guid, GuidString, Id64, Id64String, IModelStatus, omit, OpenMode } from \"@itwin/core-bentley\";\nimport {\n AuxCoordSystem2dProps, Base64EncodedString, ChangesetIdWithIndex, Code, CodeProps, CodeScopeSpec, CodeSpec, ColorDef, ElementAspectProps,\n ElementProps, Environment, ExternalSourceProps, FontType, GeometricElement2dProps, GeometryParams, GeometryPartProps, GeometryStreamBuilder,\n GeometryStreamProps, ImageSourceFormat, IModel, IModelError, IModelReadRpcInterface, IModelVersion, IModelVersionProps, LocalFileName,\n PhysicalElementProps, PlanProjectionSettings, RelatedElement, RepositoryLinkProps, RequestNewBriefcaseProps, RpcConfiguration, RpcManager,\n RpcPendingResponse, SkyBoxImageType, SubCategoryAppearance, SubCategoryOverride, SyncMode,\n} from \"@itwin/core-common\";\nimport { Box, Cone, LineString3d, Point2d, Point3d, Range2d, Range3d, StandardViewIndex, Vector3d, YawPitchRollAngles } from \"@itwin/core-geometry\";\nimport { RequestNewBriefcaseArg } from \"../BriefcaseManager\";\nimport { CheckpointManager, CheckpointProps, DownloadRequest, V2CheckpointManager } from \"../CheckpointManager\";\nimport { ClassRegistry } from \"../ClassRegistry\";\nimport {\n _nativeDb, AuxCoordSystem2d, BriefcaseDb, BriefcaseLocalValue, BriefcaseManager, CategorySelector, ChannelControl, DisplayStyle2d, DisplayStyle3d, DrawingCategory,\n DrawingViewDefinition, ECSqlStatement, Element, ElementAspect, ElementOwnsChildElements, ElementOwnsMultiAspects, ElementOwnsUniqueAspect,\n ElementUniqueAspect, ExternalSource, ExternalSourceIsInRepository, FunctionalModel, FunctionalSchema, GroupModel, IModelDb, IModelHost,\n IModelJsFs, InformationPartitionElement, Model, ModelSelector, OrthographicViewDefinition, PhysicalModel, PhysicalObject,\n PhysicalPartition, RenderMaterialElement, SnapshotDb, SpatialCategory, SubCategory, SubjectOwnsPartitionElements, Texture, ViewDefinition,\n} from \"../core-backend\";\nimport { DefinitionPartition, Drawing, DrawingGraphic, GeometryPart, LinkElement, PhysicalElement, RepositoryLink, Subject } from \"../Element\";\nimport { DefinitionModel, DocumentListModel, DrawingModel, InformationRecordModel, SpatialLocationModel } from \"../Model\";\nimport { DrawingGraphicRepresentsElement, ElementDrivesElement, Relationship, RelationshipProps } from \"../Relationship\";\nimport { DownloadAndOpenArgs, RpcBriefcaseUtility } from \"../rpc-impl/RpcBriefcaseUtility\";\nimport { Schema, Schemas } from \"../Schema\";\nimport { HubMock } from \"../internal/HubMock\";\nimport { KnownTestLocations } from \"./KnownTestLocations\";\nimport { BackendHubAccess } from \"../BackendHubAccess\";\nimport { _hubAccess } from \"../internal/Symbols\";\n\nchai.use(chaiAsPromised);\n\n/* eslint-disable @typescript-eslint/explicit-member-accessibility */\n/* eslint-disable @typescript-eslint/no-non-null-assertion */\n\nRpcConfiguration.developmentMode = true;\n\n// Initialize the RPC interface classes used by tests\nRpcManager.initializeInterface(IModelReadRpcInterface);\n\nexport interface IModelTestUtilsOpenOptions {\n copyFilename?: string;\n enableTransactions?: boolean;\n openMode?: OpenMode;\n}\n\nexport class TestBim extends Schema {\n public static override get schemaName(): string { return \"TestBim\"; }\n\n}\nexport interface TestRelationshipProps extends RelationshipProps {\n property1: string;\n}\nexport class TestElementDrivesElement extends ElementDrivesElement {\n public static override get className(): string { return \"TestElementDrivesElement\"; }\n declare public property1: string;\n public static rootChanged = new BeEvent<(props: RelationshipProps, imodel: IModelDb) => void>();\n public static deletedDependency = new BeEvent<(props: RelationshipProps, imodel: IModelDb) => void>();\n public static override onRootChanged(props: RelationshipProps, imodel: IModelDb): void { this.rootChanged.raiseEvent(props, imodel); }\n public static override onDeletedDependency(props: RelationshipProps, imodel: IModelDb): void { this.deletedDependency.raiseEvent(props, imodel); }\n}\nexport interface TestPhysicalObjectProps extends PhysicalElementProps {\n intProperty: number;\n}\nexport class TestPhysicalObject extends PhysicalElement {\n public static override get className(): string { return \"TestPhysicalObject\"; }\n declare public intProperty: number;\n public static beforeOutputsHandled = new BeEvent<(id: Id64String, imodel: IModelDb) => void>();\n public static allInputsHandled = new BeEvent<(id: Id64String, imodel: IModelDb) => void>();\n public static override onBeforeOutputsHandled(id: Id64String, imodel: IModelDb): void { this.beforeOutputsHandled.raiseEvent(id, imodel); }\n public static override onAllInputsHandled(id: Id64String, imodel: IModelDb): void { this.allInputsHandled.raiseEvent(id, imodel); }\n}\n\n/** the types of users available for tests */\nexport enum TestUserType {\n Regular,\n Manager,\n Super,\n SuperManager\n}\n\n/** A wrapper around the BackendHubAccess API through IModelHost[_hubAccess].\n *\n * All methods in this class should be usable with any BackendHubAccess implementation (i.e. HubMock and IModelHubBackend).\n */\nexport class HubWrappers {\n protected static get hubMock() { return HubMock; }\n\n public static async getAccessToken(user: TestUserType) {\n return TestUserType[user];\n }\n\n /** Create an iModel with the name provided if it does not already exist. If it does exist, the iModelId is returned. */\n public static async createIModel(accessToken: AccessToken, iTwinId: GuidString, iModelName: string): Promise<GuidString> {\n assert.isTrue(this.hubMock.isValid, \"Must use HubMock for tests that modify iModels\");\n let iModelId = await IModelHost[_hubAccess].queryIModelByName({ accessToken, iTwinId, iModelName });\n if (!iModelId)\n iModelId = await IModelHost[_hubAccess].createNewIModel({ accessToken, iTwinId, iModelName, description: `Description for iModel` });\n return iModelId;\n }\n\n /** Deletes and re-creates an iModel with the provided name in the iTwin.\n * @returns the iModelId of the newly created iModel.\n */\n public static async recreateIModel(...[arg]: Parameters<BackendHubAccess[\"createNewIModel\"]>): Promise<GuidString> {\n assert.isTrue(this.hubMock.isValid, \"Must use HubMock for tests that modify iModels\");\n const deleteIModel = await IModelHost[_hubAccess].queryIModelByName(arg);\n if (undefined !== deleteIModel)\n await IModelHost[_hubAccess].deleteIModel({ accessToken: arg.accessToken, iTwinId: arg.iTwinId, iModelId: deleteIModel });\n\n // Create a new iModel\n return IModelHost[_hubAccess].createNewIModel({ description: `Description for ${arg.iModelName}`, ...arg });\n }\n\n /** Delete an IModel from the hub */\n public static async deleteIModel(accessToken: AccessToken, iTwinId: string, iModelName: string): Promise<void> {\n const iModelId = await IModelHost[_hubAccess].queryIModelByName({ accessToken, iTwinId, iModelName });\n if (undefined === iModelId)\n return;\n\n await IModelHost[_hubAccess].deleteIModel({ accessToken, iTwinId, iModelId });\n }\n\n /** Push an iModel to the Hub */\n public static async pushIModel(accessToken: AccessToken, iTwinId: string, pathname: string, iModelName?: string, overwrite?: boolean): Promise<GuidString> {\n // Delete any existing iModels with the same name as the required iModel\n const locIModelName = iModelName || path.basename(pathname, \".bim\");\n const iModelId = await IModelHost[_hubAccess].queryIModelByName({ accessToken, iTwinId, iModelName: locIModelName });\n if (iModelId) {\n if (!overwrite)\n return iModelId;\n await IModelHost[_hubAccess].deleteIModel({ accessToken, iTwinId, iModelId });\n }\n\n // Upload a new iModel\n return IModelHost[_hubAccess].createNewIModel({ accessToken, iTwinId, iModelName: locIModelName, version0: pathname });\n }\n\n /** Helper to open a briefcase db directly with the BriefcaseManager API */\n public static async downloadAndOpenBriefcase(args: RequestNewBriefcaseArg & { noLock?: true }): Promise<BriefcaseDb> {\n const props = await BriefcaseManager.downloadBriefcase(args);\n if (args.noLock) {\n const briefcase = await BriefcaseDb.open({ fileName: props.fileName });\n briefcase[_nativeDb].saveLocalValue(BriefcaseLocalValue.NoLocking, \"true\");\n briefcase.saveChanges();\n briefcase.close();\n }\n return BriefcaseDb.open({ fileName: props.fileName });\n }\n\n /** Opens the specific iModel as a Briefcase through the same workflow the IModelReadRpc.getConnectionProps method will use. Replicates the way a frontend would open the iModel. */\n public static async openBriefcaseUsingRpc(args: RequestNewBriefcaseProps & { accessToken: AccessToken, deleteFirst?: boolean }): Promise<BriefcaseDb> {\n if (undefined === args.asOf)\n args.asOf = IModelVersion.latest().toJSON();\n\n const openArgs: DownloadAndOpenArgs = {\n tokenProps: {\n iTwinId: args.iTwinId,\n iModelId: args.iModelId,\n changeset: (await IModelHost[_hubAccess].getChangesetFromVersion({ accessToken: args.accessToken, version: IModelVersion.fromJSON(args.asOf), iModelId: args.iModelId })),\n },\n activity: { accessToken: args.accessToken, activityId: \"\", applicationId: \"\", applicationVersion: \"\", sessionId: \"\" },\n syncMode: args.briefcaseId === 0 ? SyncMode.PullOnly : SyncMode.PullAndPush,\n forceDownload: args.deleteFirst,\n };\n\n assert.isTrue(this.hubMock.isValid || openArgs.syncMode === SyncMode.PullOnly, \"use HubMock to acquire briefcases\");\n while (true) {\n try {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n return (await RpcBriefcaseUtility.open(openArgs)) as BriefcaseDb;\n } catch (error) {\n if (!(error instanceof RpcPendingResponse))\n throw error;\n }\n }\n }\n\n /** Downloads a checkpoint and opens it as a SnapShotDb */\n public static async downloadAndOpenCheckpoint(args: { accessToken: AccessToken, iTwinId: GuidString, iModelId: GuidString, asOf?: IModelVersionProps }): Promise<SnapshotDb> {\n if (undefined === args.asOf)\n args.asOf = IModelVersion.latest().toJSON();\n\n const checkpoint: CheckpointProps = {\n iTwinId: args.iTwinId,\n iModelId: args.iModelId,\n accessToken: args.accessToken,\n changeset: (await IModelHost[_hubAccess].getChangesetFromVersion({ accessToken: args.accessToken, version: IModelVersion.fromJSON(args.asOf), iModelId: args.iModelId })),\n };\n\n const folder = path.join(V2CheckpointManager.getFolder(), checkpoint.iModelId);\n const filename = path.join(folder, `${checkpoint.changeset.id === \"\" ? \"first\" : checkpoint.changeset.id}.bim`);\n const request: DownloadRequest = { checkpoint, localFile: filename };\n let db = SnapshotDb.tryFindByKey(CheckpointManager.getKey(request.checkpoint));\n if (undefined !== db)\n return db;\n db = IModelTestUtils.tryOpenLocalFile(request);\n if (db)\n return db;\n await V2CheckpointManager.downloadCheckpoint(request);\n await CheckpointManager.updateToRequestedVersion(request);\n return IModelTestUtils.openCheckpoint(request.localFile, request.checkpoint);\n }\n\n /** Opens the specific Checkpoint iModel, `SyncMode.FixedVersion`, through the same workflow the IModelReadRpc.getConnectionProps method will use. Replicates the way a frontend would open the iModel. */\n public static async openCheckpointUsingRpc(args: RequestNewBriefcaseProps & { accessToken: AccessToken, deleteFirst?: boolean }): Promise<IModelDb> {\n if (undefined === args.asOf)\n args.asOf = IModelVersion.latest().toJSON();\n\n const changeset = await IModelHost[_hubAccess].getChangesetFromVersion({ accessToken: args.accessToken, version: IModelVersion.fromJSON(args.asOf), iModelId: args.iModelId });\n const openArgs = {\n tokenProps: {\n iTwinId: args.iTwinId,\n iModelId: args.iModelId,\n changeset,\n },\n activity: { accessToken: args.accessToken, activityId: \"\", applicationId: \"\", applicationVersion: \"\", sessionId: \"\" },\n syncMode: SyncMode.FixedVersion as const,\n forceDownload: args.deleteFirst,\n };\n\n while (true) {\n try {\n return (await RpcBriefcaseUtility.open(openArgs));\n } catch (error) {\n if (!(error instanceof RpcPendingResponse))\n throw error;\n }\n }\n }\n\n /**\n * Purges all acquired briefcases for the specified iModel (and user), if the specified threshold of acquired briefcases is exceeded\n */\n public static async purgeAcquiredBriefcasesById(accessToken: AccessToken, iModelId: GuidString, onReachThreshold: () => void = () => { }, acquireThreshold: number = 16): Promise<void> {\n const briefcases = await IModelHost[_hubAccess].getMyBriefcaseIds({ accessToken, iModelId });\n if (briefcases.length > acquireThreshold) {\n if (undefined !== onReachThreshold)\n onReachThreshold();\n\n const promises: Promise<void>[] = [];\n briefcases.forEach((briefcaseId) => {\n promises.push(IModelHost[_hubAccess].releaseBriefcase({ accessToken, iModelId, briefcaseId }));\n });\n await Promise.all(promises);\n }\n }\n\n public static async closeAndDeleteBriefcaseDb(accessToken: AccessToken, briefcaseDb: IModelDb) {\n const fileName = briefcaseDb.pathName;\n const iModelId = briefcaseDb.iModelId;\n briefcaseDb.close();\n\n await BriefcaseManager.deleteBriefcaseFiles(fileName, accessToken);\n\n // try to clean up empty briefcase directories, and empty iModel directories.\n if (0 === BriefcaseManager.getCachedBriefcases(iModelId).length) {\n IModelJsFs.removeSync(BriefcaseManager.getBriefcaseBasePath(iModelId));\n const imodelPath = BriefcaseManager.getIModelPath(iModelId);\n if (0 === IModelJsFs.readdirSync(imodelPath).length) {\n IModelJsFs.removeSync(imodelPath);\n }\n }\n }\n}\n\nexport class IModelTestUtils {\n\n\n protected static get knownTestLocations(): { outputDir: string, assetsDir: string } { return KnownTestLocations; }\n\n /** Generate a name for an iModel that's unique using the baseName provided and appending a new GUID. */\n public static generateUniqueName(baseName: string) {\n return `${baseName} - ${Guid.createValue()}`;\n }\n\n\n public static openCheckpoint(fileName: LocalFileName, checkpoint: CheckpointProps) {\n const snapshot = SnapshotDb.openFile(fileName, { key: CheckpointManager.getKey(checkpoint) });\n (snapshot as any)._iTwinId = checkpoint.iTwinId;\n return snapshot;\n }\n\n /** try to open an existing local file to satisfy a download request */\n public static tryOpenLocalFile(request: DownloadRequest): SnapshotDb | undefined {\n const checkpoint = request.checkpoint;\n if (CheckpointManager.verifyCheckpoint(checkpoint, request.localFile))\n return this.openCheckpoint(request.localFile, checkpoint);\n\n return undefined;\n }\n\n /** Prepare for an output file by:\n * - Resolving the output file name under the known test output directory\n * - Making directories as necessary\n * - Removing a previous copy of the output file\n * @param subDirName Sub-directory under known test output directory. Should match the name of the test file minus the .test.ts file extension.\n * @param fileName Name of output fille\n */\n public static prepareOutputFile(subDirName: string, fileName: string): LocalFileName {\n if (!IModelJsFs.existsSync(this.knownTestLocations.outputDir))\n IModelJsFs.mkdirSync(this.knownTestLocations.outputDir);\n\n const outputDir = path.join(this.knownTestLocations.outputDir, subDirName);\n if (!IModelJsFs.existsSync(outputDir))\n IModelJsFs.mkdirSync(outputDir);\n\n const outputFile = path.join(outputDir, fileName);\n if (IModelJsFs.existsSync(outputFile))\n IModelJsFs.unlinkSync(outputFile);\n\n return outputFile;\n }\n\n /** Resolve an asset file path from the asset name by looking in the known assets directory */\n public static resolveAssetFile(assetName: string): LocalFileName {\n const assetFile = path.join(this.knownTestLocations.assetsDir, assetName);\n assert.isTrue(IModelJsFs.existsSync(assetFile));\n return assetFile;\n }\n\n public static resolveFontFile(fontName: string): LocalFileName {\n const subDirs = [\"Karla\", \"DejaVu\", \"Sitka\"];\n const fontSubDirectory = subDirs.find((x) => fontName.startsWith(x));\n\n fontName = fontSubDirectory ? path.join(fontSubDirectory, fontName) : fontName;\n const assetName = path.join(\"Fonts\", fontName);\n return this.resolveAssetFile(assetName);\n }\n\n /** Orchestrates the steps necessary to create a new snapshot iModel from a seed file. */\n public static createSnapshotFromSeed(testFileName: string, seedFileName: LocalFileName): SnapshotDb {\n const seedDb: SnapshotDb = SnapshotDb.openFile(seedFileName);\n const testDb: SnapshotDb = SnapshotDb.createFrom(seedDb, testFileName);\n seedDb.close();\n testDb.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n return testDb;\n }\n\n public static getUniqueModelCode(testDb: IModelDb, newModelCodeBase: string): Code {\n let newModelCode: string = newModelCodeBase;\n let iter: number = 0;\n while (true) {\n const modelCode = InformationPartitionElement.createCode(testDb, IModel.rootSubjectId, newModelCode);\n if (testDb.elements.queryElementIdByCode(modelCode) === undefined)\n return modelCode;\n\n newModelCode = newModelCodeBase + iter;\n ++iter;\n }\n }\n\n public static generateChangeSetId(): ChangesetIdWithIndex {\n let result = \"\";\n for (let i = 0; i < 20; ++i) {\n result += Math.floor(Math.random() * 256).toString(16).padStart(2, \"0\");\n }\n return { id: result };\n }\n\n /** Create and insert a PhysicalPartition element (in the repositoryModel) and an associated PhysicalModel. */\n public static createAndInsertPhysicalPartition(testDb: IModelDb, newModelCode: CodeProps, parentId?: Id64String): Id64String {\n const model = parentId ? testDb.elements.getElement(parentId).model : IModel.repositoryModelId;\n const parent = new SubjectOwnsPartitionElements(parentId || IModel.rootSubjectId);\n\n const modeledElementProps: ElementProps = {\n classFullName: PhysicalPartition.classFullName,\n parent,\n model,\n code: newModelCode,\n };\n const modeledElement: Element = testDb.elements.createElement(modeledElementProps);\n return testDb.elements.insertElement(modeledElement.toJSON());\n }\n\n /** Create and insert a PhysicalPartition element (in the repositoryModel) and an associated PhysicalModel. */\n public static async createAndInsertPhysicalPartitionAsync(testDb: IModelDb, newModelCode: CodeProps, parentId?: Id64String): Promise<Id64String> {\n const model = parentId ? testDb.elements.getElement(parentId).model : IModel.repositoryModelId;\n const parent = new SubjectOwnsPartitionElements(parentId || IModel.rootSubjectId);\n\n const modeledElementProps: ElementProps = {\n classFullName: PhysicalPartition.classFullName,\n parent,\n model,\n code: newModelCode,\n };\n const modeledElement = testDb.elements.createElement(modeledElementProps);\n await testDb.locks.acquireLocks({ shared: model });\n return testDb.elements.insertElement(modeledElement.toJSON());\n }\n\n /** Create and insert a PhysicalPartition element (in the repositoryModel) and an associated PhysicalModel. */\n public static createAndInsertPhysicalModel(testDb: IModelDb, modeledElementRef: RelatedElement, privateModel: boolean = false): Id64String {\n const newModel = testDb.models.createModel({ modeledElement: modeledElementRef, classFullName: PhysicalModel.classFullName, isPrivate: privateModel });\n const newModelId = newModel.id = testDb.models.insertModel(newModel.toJSON());\n assert.isTrue(Id64.isValidId64(newModelId));\n assert.isTrue(Id64.isValidId64(newModel.id));\n assert.deepEqual(newModelId, newModel.id);\n return newModelId;\n }\n\n /** Create and insert a PhysicalPartition element (in the repositoryModel) and an associated PhysicalModel. */\n public static async createAndInsertPhysicalModelAsync(testDb: IModelDb, modeledElementRef: RelatedElement, privateModel: boolean = false): Promise<Id64String> {\n const newModel = testDb.models.createModel({ modeledElement: modeledElementRef, classFullName: PhysicalModel.classFullName, isPrivate: privateModel });\n const newModelId = newModel.insert();\n assert.isTrue(Id64.isValidId64(newModelId));\n assert.isTrue(Id64.isValidId64(newModel.id));\n assert.deepEqual(newModelId, newModel.id);\n return newModelId;\n }\n\n /**\n * Create and insert a PhysicalPartition element (in the repositoryModel) and an associated PhysicalModel.\n * @return [modeledElementId, modelId]\n */\n public static createAndInsertPhysicalPartitionAndModel(testImodel: IModelDb, newModelCode: CodeProps, privateModel: boolean = false, parent?: Id64String): Id64String[] {\n const eid = IModelTestUtils.createAndInsertPhysicalPartition(testImodel, newModelCode, parent);\n const modeledElementRef = new RelatedElement({ id: eid });\n const mid = IModelTestUtils.createAndInsertPhysicalModel(testImodel, modeledElementRef, privateModel);\n return [eid, mid];\n }\n\n /**\n * Create and insert a PhysicalPartition element (in the repositoryModel) and an associated PhysicalModel.\n * @return [modeledElementId, modelId]\n */\n public static async createAndInsertPhysicalPartitionAndModelAsync(testImodel: IModelDb, newModelCode: CodeProps, privateModel: boolean = false, parentId?: Id64String): Promise<Id64String[]> {\n const eid = await IModelTestUtils.createAndInsertPhysicalPartitionAsync(testImodel, newModelCode, parentId);\n const modeledElementRef = new RelatedElement({ id: eid });\n const mid = await IModelTestUtils.createAndInsertPhysicalModelAsync(testImodel, modeledElementRef, privateModel);\n return [eid, mid];\n }\n\n /** Create and insert a Drawing Partition element (in the repositoryModel). */\n public static createAndInsertDrawingPartition(testDb: IModelDb, newModelCode: CodeProps, parentId?: Id64String): Id64String {\n const model = parentId ? testDb.elements.getElement(parentId).model : IModel.repositoryModelId;\n const parent = new SubjectOwnsPartitionElements(parentId || IModel.rootSubjectId);\n\n const modeledElementProps: ElementProps = {\n classFullName: Drawing.classFullName,\n parent,\n model,\n code: newModelCode,\n };\n const modeledElement: Element = testDb.elements.createElement(modeledElementProps);\n return testDb.elements.insertElement(modeledElement.toJSON());\n }\n\n /** Create and insert a DrawingModel associated with Drawing Partition. */\n public static createAndInsertDrawingModel(testDb: IModelDb, modeledElementRef: RelatedElement, privateModel: boolean = false): Id64String {\n const newModel = testDb.models.createModel({ modeledElement: modeledElementRef, classFullName: DrawingModel.classFullName, isPrivate: privateModel });\n const newModelId = newModel.insert();\n assert.isTrue(Id64.isValidId64(newModelId));\n assert.isTrue(Id64.isValidId64(newModel.id));\n assert.deepEqual(newModelId, newModel.id);\n return newModelId;\n }\n\n /**\n * Create and insert a Drawing Partition element (in the repositoryModel) and an associated DrawingModel.\n * @return [modeledElementId, modelId]\n */\n public static createAndInsertDrawingPartitionAndModel(testImodel: IModelDb, newModelCode: CodeProps, privateModel: boolean = false, parent?: Id64String): Id64String[] {\n const eid = IModelTestUtils.createAndInsertDrawingPartition(testImodel, newModelCode, parent);\n const modeledElementRef = new RelatedElement({ id: eid });\n const mid = IModelTestUtils.createAndInsertDrawingModel(testImodel, modeledElementRef, privateModel);\n return [eid, mid];\n }\n\n public static getUniqueSpatialCategoryCode(scopeModel: Model, newCodeBaseValue: string): Code {\n let newCodeValue: string = newCodeBaseValue;\n let iter: number = 0;\n while (true) {\n if (SpatialCategory.queryCategoryIdByName(scopeModel.iModel, scopeModel.id, newCodeValue) === undefined)\n return SpatialCategory.createCode(scopeModel.iModel, scopeModel.id, newCodeValue);\n\n newCodeValue = newCodeBaseValue + iter;\n ++iter;\n }\n }\n\n // Create a PhysicalObject. (Does not insert it.)\n public static createPhysicalObject(testImodel: IModelDb, modelId: Id64String, categoryId: Id64String, elemCode?: Code): Element {\n const elementProps: PhysicalElementProps = {\n classFullName: \"Generic:PhysicalObject\",\n model: modelId,\n category: categoryId,\n code: elemCode ? elemCode : Code.createEmpty(),\n };\n return testImodel.elements.createElement(elementProps);\n }\n\n public static registerTestBimSchema() {\n if (undefined === Schemas.getRegisteredSchema(TestBim.schemaName)) {\n Schemas.registerSchema(TestBim);\n ClassRegistry.register(TestPhysicalObject, TestBim);\n ClassRegistry.register(TestElementDrivesElement, TestBim);\n }\n }\n\n public static executeQuery(db: IModelDb, ecsql: string, bindings?: any[] | object): any[] {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n return db.withPreparedStatement(ecsql, (stmt) => {\n if (bindings)\n stmt.bindValues(bindings);\n\n const rows: any[] = [];\n while (DbResult.BE_SQLITE_ROW === stmt.step()) {\n rows.push(stmt.getRow());\n if (rows.length > IModelDb.maxLimit)\n throw new IModelError(IModelStatus.BadRequest, \"Max LIMIT exceeded in SELECT statement\");\n }\n\n return rows;\n });\n }\n\n public static createJobSubjectElement(iModel: IModelDb, name: string): Subject {\n const subj = Subject.create(iModel, iModel.elements.getRootSubject().id, name);\n subj.setJsonProperty(\"Subject\", { Job: name }); // eslint-disable-line @typescript-eslint/naming-convention\n return subj;\n }\n\n /** Flushes the Txns in the TxnTable - this allows importing of schemas */\n public static flushTxns(iModelDb: IModelDb): boolean {\n iModelDb[_nativeDb].deleteAllTxns();\n return true;\n }\n\n public static querySubjectId(iModelDb: IModelDb, subjectCodeValue: string): Id64String {\n const subjectId = iModelDb.elements.queryElementIdByCode(Subject.createCode(iModelDb, IModel.rootSubjectId, subjectCodeValue))!;\n assert.isTrue(Id64.isValidId64(subjectId));\n return subjectId;\n }\n\n public static queryDefinitionPartitionId(iModelDb: IModelDb, parentSubjectId: Id64String, suffix: string): Id64String {\n const partitionCode: Code = DefinitionPartition.createCode(iModelDb, parentSubjectId, `Definition${suffix}`);\n const partitionId = iModelDb.elements.queryElementIdByCode(partitionCode)!;\n assert.isTrue(Id64.isValidId64(partitionId));\n return partitionId;\n }\n\n public static querySpatialCategoryId(iModelDb: IModelDb, modelId: Id64String, suffix: string): Id64String {\n const categoryCode: Code = SpatialCategory.createCode(iModelDb, modelId, `SpatialCategory${suffix}`);\n const categoryId = iModelDb.elements.queryElementIdByCode(categoryCode)!;\n assert.isTrue(Id64.isValidId64(categoryId));\n return categoryId;\n }\n\n public static queryPhysicalPartitionId(iModelDb: IModelDb, parentSubjectId: Id64String, suffix: string): Id64String {\n const partitionCode: Code = PhysicalPartition.createCode(iModelDb, parentSubjectId, `Physical${suffix}`);\n const partitionId = iModelDb.elements.queryElementIdByCode(partitionCode)!;\n assert.isTrue(Id64.isValidId64(partitionId));\n return partitionId;\n }\n\n public static queryPhysicalElementId(iModelDb: IModelDb, modelId: Id64String, categoryId: Id64String, suffix: string): Id64String {\n const elementId = IModelTestUtils.queryByUserLabel(iModelDb, `PhysicalObject${suffix}`);\n assert.isTrue(Id64.isValidId64(elementId));\n const element: PhysicalElement = iModelDb.elements.getElement<PhysicalElement>(elementId);\n assert.equal(element.model, modelId);\n assert.equal(element.category, categoryId);\n return elementId;\n }\n\n public static insertSpatialCategory(iModelDb: IModelDb, modelId: Id64String, categoryName: string, color: ColorDef): Id64String {\n const appearance: SubCategoryAppearance.Props = {\n color: color.toJSON(),\n transp: 0,\n invisible: false,\n };\n return SpatialCategory.insert(iModelDb, modelId, categoryName, appearance);\n }\n\n public static createBoxes(subCategoryIds: Id64String[]): GeometryStreamProps {\n const length = 1.0;\n const entryOrigin = Point3d.createZero();\n const geometryStreamBuilder = new GeometryStreamBuilder();\n geometryStreamBuilder.appendGeometry(Box.createDgnBox(\n entryOrigin, Vector3d.unitX(), Vector3d.unitY(), new Point3d(0, 0, length),\n length, length, length, length, true,\n )!);\n for (const subCategoryId of subCategoryIds) {\n entryOrigin.addInPlace({ x: 1, y: 1, z: 1 });\n geometryStreamBuilder.appendSubCategoryChange(subCategoryId);\n geometryStreamBuilder.appendGeometry(Box.createDgnBox(\n entryOrigin, Vector3d.unitX(), Vector3d.unitY(), new Point3d(0, 0, length),\n length, length, length, length, true,\n )!);\n }\n return geometryStreamBuilder.geometryStream;\n }\n\n public static createBox(size: Point3d, categoryId?: Id64String, subCategoryId?: Id64String, renderMaterialId?: Id64String, geometryPartId?: Id64String): GeometryStreamProps {\n const geometryStreamBuilder = new GeometryStreamBuilder();\n if ((undefined !== categoryId) && (undefined !== subCategoryId)) {\n geometryStreamBuilder.appendSubCategoryChange(subCategoryId);\n if (undefined !== renderMaterialId) {\n const geometryParams = new GeometryParams(categoryId, subCategoryId);\n geometryParams.materialId = renderMaterialId;\n geometryStreamBuilder.appendGeometryParamsChange(geometryParams);\n }\n }\n geometryStreamBuilder.appendGeometry(Box.createDgnBox(\n Point3d.createZero(), Vector3d.unitX(), Vector3d.unitY(), new Point3d(0, 0, size.z),\n size.x, size.y, size.x, size.y, true,\n )!);\n if (undefined !== geometryPartId) {\n geometryStreamBuilder.appendGeometryPart3d(geometryPartId);\n }\n return geometryStreamBuilder.geometryStream;\n }\n\n public static createCylinder(radius: number): GeometryStreamProps {\n const pointA = Point3d.create(0, 0, 0);\n const pointB = Point3d.create(0, 0, 2 * radius);\n const cylinder = Cone.createBaseAndTarget(pointA, pointB, Vector3d.unitX(), Vector3d.unitY(), radius, radius, true);\n const geometryStreamBuilder = new GeometryStreamBuilder();\n geometryStreamBuilder.appendGeometry(cylinder);\n return geometryStreamBuilder.geometryStream;\n }\n\n public static createRectangle(size: Point2d): GeometryStreamProps {\n const geometryStreamBuilder = new GeometryStreamBuilder();\n geometryStreamBuilder.appendGeometry(LineString3d.createPoints([\n new Point3d(0, 0),\n new Point3d(size.x, 0),\n new Point3d(size.x, size.y),\n new Point3d(0, size.y),\n new Point3d(0, 0),\n ]));\n return geometryStreamBuilder.geometryStream;\n }\n\n public static insertTextureElement(iModelDb: IModelDb, modelId: Id64String, textureName: string): Id64String {\n // This is an encoded png containing a 3x3 square with white in top left pixel, blue in middle pixel, and green in bottom right pixel. The rest of the square is red.\n const pngData = [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, 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, 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, 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, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130];\n const textureData = Buffer.from(pngData).toString(\"base64\");\n return Texture.insertTexture(iModelDb, modelId, textureName, ImageSourceFormat.Png, textureData, `Description for ${textureName}`);\n }\n\n public static queryByUserLabel(iModelDb: IModelDb, userLabel: string): Id64String {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n return iModelDb.withPreparedStatement(`SELECT ECInstanceId FROM ${Element.classFullName} WHERE UserLabel=:userLabel`, (statement: ECSqlStatement): Id64String => {\n statement.bindString(\"userLabel\", userLabel);\n return DbResult.BE_SQLITE_ROW === statement.step() ? statement.getValue(0).getId() : Id64.invalid;\n });\n }\n\n public static queryByCodeValue(iModelDb: IModelDb, codeValue: string): Id64String {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n return iModelDb.withPreparedStatement(`SELECT ECInstanceId FROM ${Element.classFullName} WHERE CodeValue=:codeValue`, (statement: ECSqlStatement): Id64String => {\n statement.bindString(\"codeValue\", codeValue);\n return DbResult.BE_SQLITE_ROW === statement.step() ? statement.getValue(0).getId() : Id64.invalid;\n });\n }\n\n public static insertRepositoryLink(iModelDb: IModelDb, codeValue: string, url: string, format: string): Id64String {\n const repositoryLinkProps: RepositoryLinkProps = {\n classFullName: RepositoryLink.classFullName,\n model: IModel.repositoryModelId,\n code: LinkElement.createCode(iModelDb, IModel.repositoryModelId, codeValue),\n url,\n format,\n };\n return iModelDb.elements.insertElement(repositoryLinkProps);\n }\n\n public static insertExternalSource(iModelDb: IModelDb, repositoryId: Id64String, userLabel: string): Id64String {\n const externalSourceProps: ExternalSourceProps = {\n classFullName: ExternalSource.classFullName,\n model: IModel.repositoryModelId,\n code: Code.createEmpty(),\n userLabel,\n repository: new ExternalSourceIsInRepository(repositoryId),\n connectorName: \"Connector\",\n connectorVersion: \"0.0.1\",\n };\n return iModelDb.elements.insertElement(externalSourceProps);\n }\n\n public static dumpIModelInfo(iModelDb: IModelDb): void {\n const outputFileName: string = `${iModelDb.pathName}.info.txt`;\n if (IModelJsFs.existsSync(outputFileName)) {\n IModelJsFs.removeSync(outputFileName);\n }\n IModelJsFs.appendFileSync(outputFileName, `${iModelDb.pathName}\\n`);\n IModelJsFs.appendFileSync(outputFileName, \"\\n=== CodeSpecs ===\\n\");\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n iModelDb.withPreparedStatement(`SELECT ECInstanceId,Name FROM BisCore:CodeSpec ORDER BY ECInstanceId`, (statement: ECSqlStatement): void => {\n while (DbResult.BE_SQLITE_ROW === statement.step()) {\n const codeSpecId = statement.getValue(0).getId();\n const codeSpecName: string = statement.getValue(1).getString();\n IModelJsFs.appendFileSync(outputFileName, `${codeSpecId}, ${codeSpecName}\\n`);\n }\n });\n IModelJsFs.appendFileSync(outputFileName, \"\\n=== Schemas ===\\n\");\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n iModelDb.withPreparedStatement(`SELECT Name FROM ECDbMeta.ECSchemaDef ORDER BY ECInstanceId`, (statement: ECSqlStatement): void => {\n while (DbResult.BE_SQLITE_ROW === statement.step()) {\n const schemaName: string = statement.getValue(0).getString();\n IModelJsFs.appendFileSync(outputFileName, `${schemaName}\\n`);\n }\n });\n IModelJsFs.appendFileSync(outputFileName, \"\\n=== Models ===\\n\");\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n iModelDb.withPreparedStatement(`SELECT ECInstanceId FROM ${Model.classFullName} ORDER BY ECInstanceId`, (statement: ECSqlStatement): void => {\n while (DbResult.BE_SQLITE_ROW === statement.step()) {\n const modelId = statement.getValue(0).getId();\n const model: Model = iModelDb.models.getModel(modelId);\n IModelJsFs.appendFileSync(outputFileName, `${modelId}, ${model.name}, ${model.parentModel}, ${model.classFullName}\\n`);\n }\n });\n IModelJsFs.appendFileSync(outputFileName, \"\\n=== ViewDefinitions ===\\n\");\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n iModelDb.withPreparedStatement(`SELECT ECInstanceId FROM ${ViewDefinition.classFullName} ORDER BY ECInstanceId`, (statement: ECSqlStatement): void => {\n while (DbResult.BE_SQLITE_ROW === statement.step()) {\n const viewDefinitionId = statement.getValue(0).getId();\n const viewDefinition: ViewDefinition = iModelDb.elements.getElement<ViewDefinition>(viewDefinitionId);\n IModelJsFs.appendFileSync(outputFileName, `${viewDefinitionId}, ${viewDefinition.code.value}, ${viewDefinition.classFullName}\\n`);\n }\n });\n IModelJsFs.appendFileSync(outputFileName, \"\\n=== Elements ===\\n\");\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n iModelDb.withPreparedStatement(`SELECT COUNT(*) FROM ${Element.classFullName}`, (statement: ECSqlStatement): void => {\n if (DbResult.BE_SQLITE_ROW === statement.step()) {\n const count: number = statement.getValue(0).getInteger();\n IModelJsFs.appendFileSync(outputFileName, `Count of ${Element.classFullName}=${count}\\n`);\n }\n });\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n iModelDb.withPreparedStatement(`SELECT COUNT(*) FROM ${PhysicalObject.classFullName}`, (statement: ECSqlStatement): void => {\n if (DbResult.BE_SQLITE_ROW === statement.step()) {\n const count: number = statement.getValue(0).getInteger();\n IModelJsFs.appendFileSync(outputFileName, `Count of ${PhysicalObject.classFullName}=${count}\\n`);\n }\n });\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n iModelDb.withPreparedStatement(`SELECT COUNT(*) FROM ${GeometryPart.classFullName}`, (statement: ECSqlStatement): void => {\n if (DbResult.BE_SQLITE_ROW === statement.step()) {\n const count: number = statement.getValue(0).getInteger();\n IModelJsFs.appendFileSync(outputFileName, `Count of ${GeometryPart.classFullName}=${count}\\n`);\n }\n });\n }\n}\n\nexport class ExtensiveTestScenario {\n static uniqueAspectGuid = Guid.createValue();\n static federationGuid3 = Guid.createValue();\n\n public static async prepareDb(sourceDb: IModelDb): Promise<void> {\n // Import desired schemas\n const sourceSchemaFileName = path.join(KnownTestLocations.assetsDir, \"ExtensiveTestScenario.ecschema.xml\");\n await sourceDb.importSchemas([FunctionalSchema.schemaFilePath, sourceSchemaFileName]);\n FunctionalSchema.registerSchema();\n }\n\n public static async populateDb(sourceDb: IModelDb): Promise<void> {\n // make sure Arial is in the font table\n const arialFontId = await sourceDb.fonts.acquireId({ name: \"Arial\", type: FontType.TrueType });\n expect(arialFontId).not.to.be.undefined;\n expect(arialFontId).greaterThan(0);\n\n // Initialize project extents\n const projectExtents = new Range3d(-1000, -1000, -1000, 1000, 1000, 1000);\n sourceDb.updateProjectExtents(projectExtents);\n // Insert CodeSpecs\n const codeSpecId1 = sourceDb.codeSpecs.insert(\"SourceCodeSpec\", CodeScopeSpec.Type.Model);\n const codeSpecId2 = sourceDb.codeSpecs.insert(\"ExtraCodeSpec\", CodeScopeSpec.Type.ParentElement);\n const codeSpecId3 = sourceDb.codeSpecs.insert(\"InformationRecords\", CodeScopeSpec.Type.Model);\n assert.isTrue(Id64.isValidId64(codeSpecId1));\n assert.isTrue(Id64.isValidId64(codeSpecId2));\n assert.isTrue(Id64.isValidId64(codeSpecId3));\n // Insert RepositoryModel structure\n const subjectId = Subject.insert(sourceDb, IModel.rootSubjectId, \"Subject\", \"Subject Description\");\n assert.isTrue(Id64.isValidId64(subjectId));\n const sourceOnlySubjectId = Subject.insert(sourceDb, IModel.rootSubjectId, \"Only in Source\");\n assert.isTrue(Id64.isValidId64(sourceOnlySubjectId));\n const definitionModelId = DefinitionModel.insert(sourceDb, subjectId, \"Definition\");\n assert.isTrue(Id64.isValidId64(definitionModelId));\n const informationModelId = InformationRecordModel.insert(sourceDb, subjectId, \"Information\");\n assert.isTrue(Id64.isValidId64(informationModelId));\n const groupModelId = GroupModel.insert(sourceDb, subjectId, \"Group\");\n assert.isTrue(Id64.isValidId64(groupModelId));\n const physicalModelId = PhysicalModel.insert(sourceDb, subjectId, \"Physical\");\n assert.isTrue(Id64.isValidId64(physicalModelId));\n const spatialLocationModelId = SpatialLocationModel.insert(sourceDb, subjectId, \"SpatialLocation\", true);\n assert.isTrue(Id64.isValidId64(spatialLocationModelId));\n const functionalModelId = FunctionalModel.insert(sourceDb, subjectId, \"Functional\");\n assert.isTrue(Id64.isValidId64(functionalModelId));\n const documentListModelId = DocumentListModel.insert(sourceDb, subjectId, \"Document\");\n assert.isTrue(Id64.isValidId64(documentListModelId));\n const drawingId = Drawing.insert(sourceDb, documentListModelId, \"Drawing\");\n assert.isTrue(Id64.isValidId64(drawingId));\n // Insert DefinitionElements\n const modelSelectorId = ModelSelector.insert(sourceDb, definitionModelId, \"SpatialModels\", [physicalModelId, spatialLocationModelId]);\n assert.isTrue(Id64.isValidId64(modelSelectorId));\n const spatialCategoryId = IModelTestUtils.insertSpatialCategory(sourceDb, definitionModelId, \"SpatialCategory\", ColorDef.green);\n assert.isTrue(Id64.isValidId64(spatialCategoryId));\n const sourcePhysicalCategoryId = IModelTestUtils.insertSpatialCategory(sourceDb, definitionModelId, \"SourcePhysicalCategory\", ColorDef.blue);\n assert.isTrue(Id64.isValidId64(sourcePhysicalCategoryId));\n const subCategoryId = SubCategory.insert(sourceDb, spatialCategoryId, \"SubCategory\", { color: ColorDef.blue.toJSON() });\n assert.isTrue(Id64.isValidId64(subCategoryId));\n const filteredSubCategoryId = SubCategory.insert(sourceDb, spatialCategoryId, \"FilteredSubCategory\", { color: ColorDef.green.toJSON() });\n assert.isTrue(Id64.isValidId64(filteredSubCategoryId));\n const drawingCategoryId = DrawingCategory.insert(sourceDb, definitionModelId, \"DrawingCategory\", new SubCategoryAppearance());\n assert.isTrue(Id64.isValidId64(drawingCategoryId));\n const spatialCategorySelectorId = CategorySelector.insert(sourceDb, definitionModelId, \"SpatialCategories\", [spatialCategoryId, sourcePhysicalCategoryId]);\n assert.isTrue(Id64.isValidId64(spatialCategorySelectorId));\n const drawingCategorySelectorId = CategorySelector.insert(sourceDb, definitionModelId, \"DrawingCategories\", [drawingCategoryId]);\n assert.isTrue(Id64.isValidId64(drawingCategorySelectorId));\n const auxCoordSystemProps: AuxCoordSystem2dProps = {\n classFullName: AuxCoordSystem2d.classFullName,\n model: definitionModelId,\n code: AuxCoordSystem2d.createCode(sourceDb, definitionModelId, \"AuxCoordSystem2d\"),\n };\n const auxCoordSystemId = sourceDb.elements.insertElement(auxCoordSystemProps);\n assert.isTrue(Id64.isValidId64(auxCoordSystemId));\n const textureId = IModelTestUtils.insertTextureElement(sourceDb, definitionModelId, \"Texture\");\n assert.isTrue(Id64.isValidId64(textureId));\n const renderMaterialId = RenderMaterialElement.insert(sourceDb, definitionModelId, \"RenderMaterial\", { paletteName: \"PaletteName\" });\n assert.isTrue(Id64.isValidId64(renderMaterialId));\n const geometryPartProps: GeometryPartProps = {\n classFullName: GeometryPart.classFullName,\n model: definitionModelId,\n code: GeometryPart.createCode(sourceDb, definitionModelId, \"GeometryPart\"),\n geom: IModelTestUtils.createBox(Point3d.create(3, 3, 3)),\n };\n const geometryPartId = sourceDb.elements.insertElement(geometryPartProps);\n assert.isTrue(Id64.isValidId64(geometryPartId));\n // Insert InformationRecords\n const informationRecordProps1 = {\n classFullName: \"ExtensiveTestScenario:SourceInformationRecord\",\n model: informationModelId,\n code: { spec: codeSpecId3, scope: informationModelId, value: \"InformationRecord1\" },\n commonString: \"Common1\",\n sourceString: \"One\",\n };\n const informationRecordId1 = sourceDb.elements.insertElement(informationRecordProps1);\n assert.isTrue(Id64.isValidId64(informationRecordId1));\n const informationRecordProps2: any = {\n classFullName: \"ExtensiveTestScenario:SourceInformationRecord\",\n model: informationModelId,\n code: { spec: codeSpecId3, scope: informationModelId, value: \"InformationRecord2\" },\n commonString: \"Common2\",\n sourceString: \"Two\",\n };\n const informationRecordId2 = sourceDb.elements.insertElement(informationRecordProps2);\n assert.isTrue(Id64.isValidId64(informationRecordId2));\n const informationRecordProps3 = {\n classFullName: \"ExtensiveTestScenario:SourceInformationRecord\",\n model: informationModelId,\n code: { spec: codeSpecId3, scope: informationModelId, value: \"InformationRecord3\" },\n commonString: \"Common3\",\n sourceString: \"Three\",\n };\n const informationRecordId3 = sourceDb.elements.insertElement(informationRecordProps3);\n assert.isTrue(Id64.isValidId64(informationRecordId3));\n // Insert PhysicalObject1\n const physicalObjectProps1: PhysicalElementProps = {\n classFullName: PhysicalObject.classFullName,\n model: physicalModelId,\n category: spatialCategoryId,\n code: Code.createEmpty(),\n userLabel: \"PhysicalObject1\",\n geom: IModelTestUtils.createBox(Point3d.create(1, 1, 1), spatialCategoryId, subCategoryId, renderMaterialId, geometryPartId),\n placement: {\n origin: Point3d.create(1, 1, 1),\n angles: YawPitchRollAngles.createDegrees(0, 0, 0),\n },\n };\n const physicalObjectId1 = sourceDb.elements.insertElement(physicalObjectProps1);\n assert.isTrue(Id64.isValidId64(physicalObjectId1));\n // Insert PhysicalObject1 children\n const childObjectProps1A: PhysicalElementProps = physicalObjectProps1;\n childObjectProps1A.userLabel = \"ChildObject1A\";\n childObjectProps1A.parent = new ElementOwnsChildElements(physicalObjectId1);\n childObjectProps1A.placement!.origin = Point3d.create(0, 1, 1);\n const childObjectId1A = sourceDb.elements.insertElement(childObjectProps1A);\n assert.isTrue(Id64.isValidId64(childObjectId1A));\n const childObjectProps1B: PhysicalElementProps = childObjectProps1A;\n childObjectProps1B.userLabel = \"ChildObject1B\";\n childObjectProps1B.placement!.origin = Point3d.create(1, 0, 1);\n const childObjectId1B = sourceDb.elements.insertElement(childObjectProps1B);\n assert.isTrue(Id64.isValidId64(childObjectId1B));\n // Insert PhysicalObject2\n const physicalObjectProps2: PhysicalElementProps = {\n classFullName: PhysicalObject.classFullName,\n model: physicalModelId,\n category: sourcePhysicalCategoryId,\n code: Code.createEmpty(),\n userLabel: \"PhysicalObject2\",\n geom: IModelTestUtils.createBox(Point3d.create(2, 2, 2)),\n placement: {\n origin: Point3d.create(2, 2, 2),\n angles: YawPitchRollAngles.createDegrees(0, 0, 0),\n },\n };\n const physicalObjectId2 = sourceDb.elements.insertElement(physicalObjectProps2);\n assert.isTrue(Id64.isValidId64(physicalObjectId2));\n // Insert PhysicalObject3\n const physicalObjectProps3: PhysicalElementProps = {\n classFullName: PhysicalObject.classFullName,\n model: physicalModelId,\n category: sourcePhysicalCategoryId,\n code: Code.createEmpty(),\n federationGuid: ExtensiveTestScenario.federationGuid3,\n userLabel: \"PhysicalObject3\",\n };\n const physicalObjectId3 = sourceDb.elements.insertElement(physicalObjectProps3);\n assert.isTrue(Id64.isValidId64(physicalObjectId3));\n // Insert PhysicalObject4\n const physicalObjectProps4: PhysicalElementProps = {\n classFullName: PhysicalObject.classFullName,\n model: physicalModelId,\n category: spatialCategoryId,\n code: Code.createEmpty(),\n userLabel: \"PhysicalObject4\",\n geom: IModelTestUtils.createBoxes([subCategoryId, filteredSubCategoryId]),\n placement: {\n origin: Point3d.create(4, 4, 4),\n angles: YawPitchRollAngles.createDegrees(0, 0, 0),\n },\n };\n const physicalObjectId4 = sourceDb.elements.insertElement(physicalObjectProps4);\n assert.isTrue(Id64.isValidId64(physicalObjectId4));\n // Insert PhysicalElement1\n const sourcePhysicalElementProps: PhysicalElementProps = {\n classFullName: \"ExtensiveTestScenario:SourcePhysicalElement\",\n model: physicalModelId,\n category: sourcePhysicalCategoryId,\n code: Code.createEmpty(),\n userLabel: \"PhysicalElement1\",\n geom: IModelTestUtils.createBox(Point3d.create(2, 2, 2)),\n placement: {\n origin: Point3d.create(4, 4, 4),\n angles: YawPitchRollAngles.createDegrees(0, 0, 0),\n },\n sourceString: \"S1\",\n sourceDouble: 1.1,\n sourceNavigation: { id: sourcePhysicalCategoryId, relClassName: \"ExtensiveTestScenario:SourcePhysicalElementUsesSourceDefinition\" },\n commonNavigation: { id: sourcePhysicalCategoryId },\n commonString: \"Common\",\n commonDouble: 7.3,\n sourceBinary: new Uint8Array([1, 3, 5, 7]),\n commonBinary: Base64EncodedString.fromUint8Array(new Uint8Array([2, 4, 6, 8])),\n extraString: \"Extra\",\n } as PhysicalElementProps;\n const sourcePhysicalElementId = sourceDb.elements.insertElement(sourcePhysicalElementProps);\n assert.isTrue(Id64.isValidId64(sourcePhysicalElementId));\n assert.doesNotThrow(() => sourceDb.elements.getElement(sourcePhysicalElementId));\n // Insert ElementAspects\n const aspectProps = {\n classFullName: \"ExtensiveTestScenario:SourceUniqueAspect\",\n element: new ElementOwnsUniqueAspect(physicalObjectId1),\n commonDouble: 1.1,\n commonString: \"Unique\",\n commonLong: physicalObjectId1,\n commonBinary: Base64EncodedString.fromUint8Array(new Uint8Array([2, 4, 6, 8])),\n sourceDouble: 11.1,\n sourceString: \"UniqueAspect\",\n sourceLong: physicalObjectId1,\n sourceGuid: ExtensiveTestScenario.uniqueAspectGuid,\n extraString: \"Extra\",\n } as const;\n sourceDb.elements.insertAspect(aspectProps);\n const sourceUniqueAspect: ElementUniqueAspect = sourceDb.elements.getAspects(physicalObjectId1, \"ExtensiveTestScenario:SourceUniqueAspect\")[0];\n expect(sourceUniqueAspect).to.deep.subsetEqual(omit(aspectProps, [\"commonBinary\"]), { normalizeClassNameProps: true });\n sourceDb.elements.insertAspect({\n classFullName: \"ExtensiveTestScenario:SourceMultiAspect\",\n element: new ElementOwnsMultiAspects(physicalObjectId1),\n commonDouble: 2.2,\n commonString: \"Multi\",\n commonLong: physicalObjectId1,\n sourceDouble: 22.2,\n sourceString: \"MultiAspect\",\n sourceLong: physicalObjectId1,\n sourceGuid: Guid.createValue(),\n extraString: \"Extra\",\n } as ElementAspectProps);\n sourceDb.elements.insertAspect({\n classFullName: \"ExtensiveTestScenario:SourceMultiAspect\",\n element: new ElementOwnsMultiAspects(physicalObjectId1),\n commonDouble: 3.3,\n commonString: \"Multi\",\n commonLong: physicalObjectId1,\n sourceDouble: 33.3,\n sourceString: \"MultiAspect\",\n sourceLong: physicalObjectId1,\n sourceGuid: Guid.createValue(),\n extraString: \"Extra\",\n } as ElementAspectProps);\n sourceDb.elements.insertAspect({\n classFullName: \"ExtensiveTestScenario:SourceUniqueAspectToExclude\",\n element: new ElementOwnsUniqueAspect(physicalObjectId1),\n description: \"SourceUniqueAspect1\",\n } as ElementAspectProps);\n sourceDb.elements.insertAspect({\n classFullName: \"ExtensiveTestScenario:SourceMultiAspectToExclude\",\n element: new ElementOwnsMultiAspects(physicalObjectId1),\n description: \"SourceMultiAspect1\",\n } as ElementAspectProps);\n // Insert DrawingGraphics\n const drawingGraphicProps1: GeometricElement2dProps = {\n classFullName: DrawingGraphic.classFullName,\n model: drawingId,\n category: drawingCategoryId,\n code: Code.createEmpty(),\n userLabel: \"DrawingGraphic1\",\n geom: IModelTestUtils.createRectangle(Point2d.create(1, 1)),\n placement: { origin: Point2d.create(2, 2), angle: 0 },\n };\n const drawingGraphicId1 = sourceDb.elements.insertElement(drawingGraphicProps1);\n assert.isTrue(Id64.isValidId64(drawingGraphicId1));\n const drawingGraphicRepresentsId1 = DrawingGraphicRepresentsElement.insert(sourceDb, drawingGraphicId1, physicalObjectId1);\n assert.isTrue(Id64.isValidId64(drawingGraphicRepresentsId1));\n const drawingGraphicProps2: GeometricElement2dProps = {\n classFullName: DrawingGraphic.classFullName,\n model: drawingId,\n category: drawingCategoryId,\n code: Code.createEmpty(),\n userLabel: \"DrawingGraphic2\",\n geom: IModelTestUtils.createRectangle(Point2d.create(1, 1)),\n placement: { origin: Point2d.create(3, 3), angle: 0 },\n };\n const drawingGraphicId2 = sourceDb.elements.insertElement(drawingGraphicProps2);\n assert.isTrue(Id64.isValidId64(drawingGraphicId2));\n const drawingGraphicRepresentsId2 = DrawingGraphicRepresentsElement.insert(sourceDb, drawingGraphicId2, physicalObjectId1);\n assert.isTrue(Id64.isValidId64(drawingGraphicRepresentsId2));\n // Insert DisplayStyles\n const displayStyle2dId = DisplayStyle2d.insert(sourceDb, definitionModelId, \"DisplayStyle2d\");\n assert.isTrue(Id64.isValidId64(displayStyle2dId));\n const displayStyle3d: DisplayStyle3d = DisplayStyle3d.create(sourceDb, definitionModelId, \"DisplayStyle3d\");\n const subCategoryOverride: SubCategoryOverride = SubCategoryOverride.fromJSON({ color: ColorDef.from(1, 2, 3).toJSON() });\n displayStyle3d.settings.overrideSubCategory(subCategoryId, subCategoryOverride);\n displayStyle3d.settings.addExcludedElements(physicalObjectId1);\n displayStyle3d.settings.setPlanProjectionSettings(spatialLocationModelId, PlanProjectionSettings.fromJSON({ elevation: 10.0 }));\n displayStyle3d.settings.environment = Environment.fromJSON({\n sky: {\n image: {\n type: SkyBoxImageType.Spherical,\n texture: textureId,\n },\n },\n });\n const displayStyle3dId = displayStyle3d.insert();\n assert.isTrue(Id64.isValidId64(displayStyle3dId));\n // Insert ViewDefinitions\n const viewId = OrthographicViewDefinition.insert(sourceDb, definitionModelId, \"Orthographic View\", modelSelectorId, spatialCategorySelectorId, displayStyle3dId, projectExtents, StandardViewIndex.Iso);\n assert.isTrue(Id64.isValidId64(viewId));\n const drawingViewRange = new Range2d(0, 0, 100, 100);\n const drawingViewId = DrawingViewDefinition.insert(sourceDb, definitionModelId, \"Drawing View\", drawingId, drawingCategorySelectorId, displayStyle2dId, drawingViewRange);\n assert.isTrue(Id64.isValidId64(drawingViewId));\n // Insert instance of SourceRelToExclude to test relationship exclusion by class\n const relationship1: Relationship = sourceDb.relationships.createInstance({\n classFullName: \"ExtensiveTestScenario:SourceRelToExclude\",\n sourceId: spatialCategorySelectorId,\n targetId: drawingCategorySelectorId,\n });\n const relationshipId1 = sourceDb.relationships.insertInstance(relationship1.toJSON());\n assert.isTrue(Id64.isValidId64(relationshipId1));\n // Insert instance of RelWithProps to test relationship property remapping\n const relationship2: Relationship = sourceDb.relationships.createInstance({\n classFullName: \"ExtensiveTestScenario:SourceRelWithProps\",\n sourceId: spatialCategorySelectorId,\n targetId: drawingCategorySelectorId,\n sourceString: \"One\",\n sourceDouble: 1.1,\n sourceLong: spatialCategoryId,\n sourceGuid: Guid.createValue(),\n } as any);\n const relationshipId2 = sourceDb.relationships.insertInstance(relationship2.toJSON());\n assert.isTrue(Id64.isValidId64(relationshipId2));\n }\n\n public static updateDb(sourceDb: IModelDb): void {\n // Update Subject element\n const subjectId = sourceDb.elements.queryElementIdByCode(Subject.createCode(sourceDb, IModel.rootSubjectId, \"Subject\"))!;\n assert.isTrue(Id64.isValidId64(subjectId));\n const subject = sourceDb.elements.getElement<Subject>(subjectId);\n subject.description = \"Subject description (Updated)\";\n sourceDb.elements.updateElement(subject.toJSON());\n // Update spatialCategory element\n const definitionModelId = sourceDb.elements.queryElementIdByCode(InformationPartitionElement.createCode(sourceDb, subjectId, \"Definition\"))!;\n assert.isTrue(Id64.isValidId64(definitionModelId));\n const spatialCategoryId = sourceDb.elements.queryElementIdByCode(SpatialCategory.createCode(sourceDb, definitionModelId, \"SpatialCategory\"))!;\n assert.isTrue(Id64.isValidId64(spatialCategoryId));\n const spatialCategory: SpatialCategory = sourceDb.elements.getElement<SpatialCategory>(spatialCategoryId);\n spatialCategory.federationGuid = Guid.createValue();\n sourceDb.elements.updateElement(spatialCategory.toJSON());\n // Update relationship properties\n const spatialCategorySelectorId = sourceDb.elements.queryElementIdByCode(CategorySelector.createCode(sourceDb, definitionModelId, \"SpatialCategories\"))!;\n assert.isTrue(Id64.isValidId64(spatialCategorySelectorId));\n const drawingCategorySelectorId = sourceDb.elements.queryElementIdByCode(CategorySelector.createCode(sourceDb, definitionModelId, \"DrawingCategories\"))!;\n assert.isTrue(Id64.isValidId64(drawingCategorySelectorId));\n const relWithProps: any = sourceDb.relationships.getInstanceProps(\n \"ExtensiveTestScenario:SourceRelWithProps\",\n { sourceId: spatialCategorySelectorId, targetId: drawingCategorySelectorId },\n );\n assert.equal(relWithProps.sourceString, \"One\");\n assert.equal(relWithProps.sourceDouble, 1.1);\n relWithProps.sourceString += \"-Updated\";\n relWithProps.sourceDouble = 1.2;\n sourceDb.relationships.updateInstance(relWithProps);\n // Update ElementAspect properties\n const physicalObjectId1 = IModelTestUtils.queryByUserLabel(sourceDb, \"PhysicalObject1\");\n const sourceUniqueAspects: ElementAspect[] = sourceDb.elements.getAspects(physicalObjectId1, \"ExtensiveTestScenario:SourceUniqueAspect\");\n assert.equal(sourceUniqueAspects.length, 1);\n sourceUniqueAspects[0].asAny.commonString += \"-Updated\";\n sourceUniqueAspects[0].asAny.sourceString += \"-Updated\";\n sourceDb.elements.updateAspect(sourceUniqueAspects[0].toJSON());\n const sourceMultiAspects: ElementAspect[] = sourceDb.elements.getAspects(physicalObjectId1, \"ExtensiveTestScenario:SourceMultiAspect\");\n assert.equal(sourceMultiAspects.length, 2);\n sourceMultiAspects[1].asAny.commonString += \"-Updated\";\n sourceMultiAspects[1].asAny.sourceString += \"-Updated\";\n sourceDb.elements.updateAspect(sourceMultiAspects[1].toJSON());\n // clear NavigationProperty of PhysicalElement1\n const physicalElementId1 = IModelTestUtils.queryByUserLabel(sourceDb, \"PhysicalElement1\");\n let physicalElement1: PhysicalElement = sourceDb.elements.getElement(physicalElementId1);\n physicalElement1.asAny.commonNavigation = RelatedElement.none;\n physicalElement1.update();\n physicalElement1 = sourceDb.elements.getElement(physicalElementId1);\n assert.isUndefined(physicalElement1.asAny.commonNavigation);\n // delete PhysicalObject3\n const physicalObjectId3 = IModelTestUtils.queryByUserLabel(sourceDb, \"PhysicalObject3\");\n assert.isTrue(Id64.isValidId64(physicalObjectId3));\n sourceDb.elements.deleteElement(physicalObjectId3);\n assert.equal(Id64.invalid, IModelTestUtils.queryByUserLabel(sourceDb, \"PhysicalObject3\"));\n // Insert PhysicalObject5\n const physicalObjectProps5: PhysicalElementProps = {\n classFullName: PhysicalObject.classFullName,\n model: physicalElement1.model,\n category: spatialCategoryId,\n code: Code.createEmpty(),\n userLabel: \"PhysicalObject5\",\n geom: IModelTestUtils.createBox(Point3d.create(1, 1, 1)),\n placement: {\n origin: Point3d.create(5, 5, 5),\n angles: YawPitchRollAngles.createDegrees(0, 0, 0),\n },\n };\n const physicalObjectId5 = sourceDb.elements.insertElement(physicalObjectProps5);\n assert.isTrue(Id64.isValidId64(physicalObjectId5));\n // delete relationship\n const drawingGraphicId1 = IModelTestUtils.queryByUserLabel(sourceDb, \"DrawingGraphic1\");\n const drawingGraphicId2 = IModelTestUtils.queryByUserLabel(sourceDb, \"DrawingGraphic2\");\n const relationship: Relationship = sourceDb.relationships.getInstance(DrawingGraphicRepresentsElement.classFullName, { sourceId: drawingGraphicId2, targetId: physicalObjectId1 });\n relationship.delete();\n // insert relationships\n DrawingGraphicRepresentsElement.insert(sourceDb, drawingGraphicId1, physicalObjectId5);\n DrawingGraphicRepresentsElement.insert(sourceDb, drawingGraphicId2, physicalObjectId5);\n // update InformationRecord2\n const informationRecordCodeSpec: CodeSpec = sourceDb.codeSpecs.getByName(\"InformationRecords\");\n const informationModelId = sourceDb.elements.queryElementIdByCode(InformationPartitionElement.createCode(sourceDb, subjectId, \"Information\"))!;\n const informationRecodeCode2: Code = new Code({ spec: informationRecordCodeSpec.id, scope: informationModelId, value: \"InformationRecord2\" });\n const informationRecordId2 = sourceDb.elements.queryElementIdByCode(informationRecodeCode2)!;\n assert.isTrue(Id64.isValidId64(informationRecordId2));\n const informationRecord2: any = sourceDb.elements.getElement(informationRecordId2);\n informationRecord2.commonString = `${informationRecord2.commonString}-Updated`;\n informationRecord2.sourceString = `${informationRecord2.sourceString}-Updated`;\n informationRecord2.update();\n // delete InformationRecord3\n const informationRecodeCode3: Code = new Code({ spec: informationRecordCodeSpec.id, scope: informationModelId, value: \"InformationRecord3\" });\n const informationRecordId3 = sourceDb.elements.queryElementIdByCode(informationRecodeCode3)!;\n assert.isTrue(Id64.isValidId64(informationRecordId3));\n sourceDb.elements.deleteElement(informationRecordId3);\n }\n\n public static assertUpdatesInDb(iModelDb: IModelDb, assertDeletes: boolean = true): void {\n // determine which schema was imported\n const testSourceSchema = iModelDb.querySchemaVersion(\"ExtensiveTestScenario\") ? true : false;\n const testTargetSchema = iModelDb.querySchemaVersion(\"ExtensiveTestScenarioTarget\") ? true : false;\n assert.notEqual(testSourceSchema, testTargetSchema);\n // assert Subject was updated\n const subjectId = iModelDb.elements.queryElementIdByCode(Subject.createCode(iModelDb, IModel.rootSubjectId, \"Subject\"))!;\n assert.isTrue(Id64.isValidId64(subjectId));\n const subject: Subject = iModelDb.elements.getElement<Subject>(subjectId);\n assert.equal(subject.description, \"Subject description (Updated)\");\n // assert SpatialCategory was updated\n const definitionModelId = iModelDb.elements.queryElementIdByCode(InformationPartitionElement.createCode(iModelDb, subjectId, \"Definition\"))!;\n assert.isTrue(Id64.isValidId64(definitionModelId));\n const spatialCategoryId = iModelDb.elements.queryElementIdByCode(SpatialCategory.createCode(iModelDb, definitionModelId, \"SpatialCategory\"))!;\n assert.isTrue(Id64.isValidId64(spatialCategoryId));\n const spatialCategory: SpatialCategory = iModelDb.elements.getElement<SpatialCategory>(spatialCategoryId);\n assert.exists(spatialCategory.federationGuid);\n // assert TargetRelWithProps was updated\n const spatialCategorySelectorId = iModelDb.elements.queryElementIdByCode(CategorySelector.createCode(iModelDb, definitionModelId, \"SpatialCategories\"))!;\n assert.isTrue(Id64.isValidId64(spatialCategorySelectorId));\n const drawingCategorySelectorId = iModelDb.elements.queryElementIdByCode(CategorySelector.createCode(iModelDb, definitionModelId, \"DrawingCategories\"))!;\n assert.isTrue(Id64.isValidId64(drawingCategorySelectorId));\n const relClassFullName = testTargetSchema ? \"ExtensiveTestScenarioTarget:TargetRelWithProps\" : \"ExtensiveTestScenario:SourceRelWithProps\";\n const relWithProps: any = iModelDb.relationships.getInstanceProps(\n relClassFullName,\n { sourceId: spatialCategorySelectorId, targetId: drawingCategorySelectorId },\n );\n assert.equal(testTargetSchema ? relWithProps.targetString : relWithProps.sourceString, \"One-Updated\");\n assert.equal(testTargetSchema ? relWithProps.targetDouble : relWithProps.sourceDouble, 1.2);\n // assert ElementAspect properties\n const physicalObjectId1 = IModelTestUtils.queryByUserLabel(iModelDb, \"PhysicalObject1\");\n const uniqueAspectClassFullName = testTargetSchema ? \"ExtensiveTestScenarioTarget:TargetUniqueAspect\" : \"ExtensiveTestScenario:SourceUniqueAspect\";\n const uniqueAspects: ElementAspect[] = iModelDb.elements.getAspects(physicalObjectId1, uniqueAspectClassFullName);\n assert.equal(uniqueAspects.length, 1);\n const uniqueAspect = uniqueAspects[0].asAny;\n expect(uniqueAspect).to.deep.subsetEqual({\n commonDouble: 1.1,\n commonString: \"Unique-Updated\",\n commonLong: physicalObjectId1,\n });\n if (testTargetSchema) {\n expect(uniqueAspect).to.deep.subsetEqual({\n targetDouble: 11.1,\n targetString: \"UniqueAspect-Updated\",\n targetLong: physicalObjectId1,\n });\n } else {\n expect(uniqueAspect).to.deep.subsetEqual({\n sourceDouble: 11.1,\n sourceString: \"UniqueAspect-Updated\",\n sourceLong: physicalObjectId1,\n });\n }\n const multiAspectClassFullName = testTargetSchema ? \"ExtensiveTestScenarioTarget:TargetMultiAspect\" : \"ExtensiveTestScenario:SourceMultiAspect\";\n const multiAspects: ElementAspect[] = iModelDb.elements.getAspects(physicalObjectId1, multiAspectClassFullName);\n assert.equal(multiAspects.length, 2);\n const multiAspect0 = multiAspects[0].asAny;\n const multiAspect1 = multiAspects[1].asAny;\n assert.equal(multiAspect0.commonDouble, 2.2);\n assert.equal(multiAspect0.commonString, \"Multi\");\n assert.equal(multiAspect0.commonLong, physicalObjectId1);\n assert.equal(testTargetSchema ? multiAspect0.targetDouble : multiAspect0.sourceDouble, 22.2);\n assert.equal(testTargetSchema ? multiAspect0.targetString : multiAspect0.sourceString, \"MultiAspect\");\n assert.equal(testTargetSchema ? multiAspect0.targetLong : multiAspect0.sourceLong, physicalObjectId1);\n assert.equal(multiAspect1.commonDouble, 3.3);\n assert.equal(multiAspect1.commonString, \"Multi-Updated\");\n assert.equal(multiAspect1.commonLong, physicalObjectId1);\n assert.equal(testTargetSchema ? multiAspect1.targetDouble : multiAspect1.sourceDouble, 33.3);\n assert.equal(testTargetSchema ? multiAspect1.targetString : multiAspect1.sourceString, \"MultiAspect-Updated\");\n assert.equal(testTargetSchema ? multiAspect1.targetLong : multiAspect1.sourceLong, physicalObjectId1);\n // assert NavigationProperty of PhysicalElement1 was cleared\n const physicalElementId = IModelTestUtils.queryByUserLabel(iModelDb, \"PhysicalElement1\");\n const physicalElement: PhysicalElement = iModelDb.elements.getElement(physicalElementId);\n assert.isUndefined(physicalElement.asAny.commonNavigation);\n // assert PhysicalObject5 was inserted\n const physicalObjectId5 = IModelTestUtils.queryByUserLabel(iModelDb, \"PhysicalObject5\");\n assert.isTrue(Id64.isValidId64(physicalObjectId5));\n // assert relationships were inserted\n const drawingGraphicId1 = IModelTestUtils.queryByUserLabel(iModelDb, \"DrawingGraphic1\");\n const drawingGraphicId2 = IModelTestUtils.queryByUserLabel(iModelDb, \"DrawingGraphic2\");\n iModelDb.relationships.getInstance(DrawingGraphicRepresentsElement.classFullName, { sourceId: drawingGraphicId1, targetId: physicalObjectId5 });\n iModelDb.relationships.getInstance(DrawingGraphicRepresentsElement.classFullName, { sourceId: drawingGraphicId2, targetId: physicalObjectId5 });\n // assert InformationRecord2 was updated\n const informationRecordCodeSpec: CodeSpec = iModelDb.codeSpecs.getByName(\"InformationRecords\");\n const informationModelId = iModelDb.elements.queryElementIdByCode(InformationPartitionElement.createCode(iModelDb, subjectId, \"Information\"))!;\n const informationRecordId2 = iModelDb.elements.queryElementIdByCode(new Code({ spec: informationRecordCodeSpec.id, scope: informationModelId, value: \"InformationRecord2\" }));\n assert.isTrue(Id64.isValidId64(informationRecordId2!));\n const informationRecord2: any = iModelDb.elements.getElement(informationRecordId2!);\n assert.equal(informationRecord2.commonString, \"Common2-Updated\");\n assert.equal(testTargetSchema ? informationRecord2.targetString : informationRecord2.sourceString, \"Two-Updated\");\n // assert InformationRecord3 was deleted\n assert.isDefined(iModelDb.elements.queryElementIdByCode(new Code({ spec: informationRecordCodeSpec.id, scope: informationModelId, value: \"InformationRecord1\" })));\n assert.isDefined(iModelDb.elements.queryElementIdByCode(new Code({ spec: informationRecordCodeSpec.id, scope: informationModelId, value: \"InformationRecord2\" })));\n // detect deletes if possible - cannot detect during processAll when isReverseSynchronization is true\n if (assertDeletes) {\n assert.equal(Id64.invalid, IModelTestUtils.queryByUserLabel(iModelDb, \"PhysicalObject3\"));\n assert.throws(() => iModelDb.relationships.getInstanceProps(DrawingGraphicRepresentsElement.classFullName, { sourceId: drawingGraphicId2, targetId: physicalObjectId1 }));\n assert.isUndefined(iModelDb.elements.queryElementIdByCode(new Code({ spec: informationRecordCodeSpec.id, scope: informationModelId, value: \"InformationRecord3\" })));\n }\n }\n}\n"]}
1
+ {"version":3,"file":"IModelTestUtils.js","sourceRoot":"","sources":["../../../src/test/IModelTestUtils.ts"],"names":[],"mappings":"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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 { Buffer } from \"node:buffer\";\r\nimport * as chai from \"chai\";\r\nimport { assert, expect } from \"chai\";\r\nimport * as chaiAsPromised from \"chai-as-promised\";\r\nimport * as path from \"path\";\r\nimport { AccessToken, BeEvent, DbResult, Guid, GuidString, Id64, Id64String, IModelStatus, omit, OpenMode } from \"@itwin/core-bentley\";\r\nimport {\r\n AuxCoordSystem2dProps, Base64EncodedString, ChangesetIdWithIndex, Code, CodeProps, CodeScopeSpec, CodeSpec, ColorDef, ElementAspectProps,\r\n ElementProps, Environment, ExternalSourceProps, FontType, GeometricElement2dProps, GeometryParams, GeometryPartProps, GeometryStreamBuilder,\r\n GeometryStreamProps, ImageSourceFormat, IModel, IModelError, IModelReadRpcInterface, IModelVersion, IModelVersionProps, LocalFileName,\r\n PhysicalElementProps, PlanProjectionSettings, RelatedElement, RepositoryLinkProps, RequestNewBriefcaseProps, RpcConfiguration, RpcManager,\r\n RpcPendingResponse, SkyBoxImageType, SubCategoryAppearance, SubCategoryOverride, SyncMode,\r\n} from \"@itwin/core-common\";\r\nimport { Box, Cone, LineString3d, Point2d, Point3d, Range2d, Range3d, StandardViewIndex, Vector3d, YawPitchRollAngles } from \"@itwin/core-geometry\";\r\nimport { RequestNewBriefcaseArg } from \"../BriefcaseManager\";\r\nimport { CheckpointManager, CheckpointProps, DownloadRequest, V2CheckpointManager } from \"../CheckpointManager\";\r\nimport { ClassRegistry } from \"../ClassRegistry\";\r\nimport {\r\n _nativeDb, AuxCoordSystem2d, BriefcaseDb, BriefcaseLocalValue, BriefcaseManager, CategorySelector, ChannelControl, DisplayStyle2d, DisplayStyle3d, DrawingCategory,\r\n DrawingViewDefinition, ECSqlStatement, Element, ElementAspect, ElementOwnsChildElements, ElementOwnsMultiAspects, ElementOwnsUniqueAspect,\r\n ElementUniqueAspect, ExternalSource, ExternalSourceIsInRepository, FunctionalModel, FunctionalSchema, GroupModel, IModelDb, IModelHost,\r\n IModelJsFs, InformationPartitionElement, Model, ModelSelector, OrthographicViewDefinition, PhysicalModel, PhysicalObject,\r\n PhysicalPartition, RenderMaterialElement, SnapshotDb, SpatialCategory, SubCategory, SubjectOwnsPartitionElements, Texture, ViewDefinition,\r\n} from \"../core-backend\";\r\nimport { DefinitionPartition, Drawing, DrawingGraphic, GeometryPart, LinkElement, PhysicalElement, RepositoryLink, Subject } from \"../Element\";\r\nimport { DefinitionModel, DocumentListModel, DrawingModel, InformationRecordModel, SpatialLocationModel } from \"../Model\";\r\nimport { DrawingGraphicRepresentsElement, ElementDrivesElement, Relationship, RelationshipProps } from \"../Relationship\";\r\nimport { DownloadAndOpenArgs, RpcBriefcaseUtility } from \"../rpc-impl/RpcBriefcaseUtility\";\r\nimport { Schema, Schemas } from \"../Schema\";\r\nimport { HubMock } from \"../internal/HubMock\";\r\nimport { KnownTestLocations } from \"./KnownTestLocations\";\r\nimport { BackendHubAccess } from \"../BackendHubAccess\";\r\nimport { _hubAccess } from \"../internal/Symbols\";\r\n\r\nchai.use(chaiAsPromised);\r\n\r\n/* eslint-disable @typescript-eslint/explicit-member-accessibility */\r\n/* eslint-disable @typescript-eslint/no-non-null-assertion */\r\n\r\nRpcConfiguration.developmentMode = true;\r\n\r\n// Initialize the RPC interface classes used by tests\r\nRpcManager.initializeInterface(IModelReadRpcInterface);\r\n\r\nexport interface IModelTestUtilsOpenOptions {\r\n copyFilename?: string;\r\n enableTransactions?: boolean;\r\n openMode?: OpenMode;\r\n}\r\n\r\nexport class TestBim extends Schema {\r\n public static override get schemaName(): string { return \"TestBim\"; }\r\n\r\n}\r\nexport interface TestRelationshipProps extends RelationshipProps {\r\n property1: string;\r\n}\r\nexport class TestElementDrivesElement extends ElementDrivesElement {\r\n public static override get className(): string { return \"TestElementDrivesElement\"; }\r\n declare public property1: string;\r\n public static rootChanged = new BeEvent<(props: RelationshipProps, imodel: IModelDb) => void>();\r\n public static deletedDependency = new BeEvent<(props: RelationshipProps, imodel: IModelDb) => void>();\r\n public static override onRootChanged(props: RelationshipProps, imodel: IModelDb): void { this.rootChanged.raiseEvent(props, imodel); }\r\n public static override onDeletedDependency(props: RelationshipProps, imodel: IModelDb): void { this.deletedDependency.raiseEvent(props, imodel); }\r\n}\r\nexport interface TestPhysicalObjectProps extends PhysicalElementProps {\r\n intProperty: number;\r\n}\r\nexport class TestPhysicalObject extends PhysicalElement {\r\n public static override get className(): string { return \"TestPhysicalObject\"; }\r\n declare public intProperty: number;\r\n public static beforeOutputsHandled = new BeEvent<(id: Id64String, imodel: IModelDb) => void>();\r\n public static allInputsHandled = new BeEvent<(id: Id64String, imodel: IModelDb) => void>();\r\n public static override onBeforeOutputsHandled(id: Id64String, imodel: IModelDb): void { this.beforeOutputsHandled.raiseEvent(id, imodel); }\r\n public static override onAllInputsHandled(id: Id64String, imodel: IModelDb): void { this.allInputsHandled.raiseEvent(id, imodel); }\r\n}\r\n\r\n/** the types of users available for tests */\r\nexport enum TestUserType {\r\n Regular,\r\n Manager,\r\n Super,\r\n SuperManager\r\n}\r\n\r\n/** A wrapper around the BackendHubAccess API through IModelHost[_hubAccess].\r\n *\r\n * All methods in this class should be usable with any BackendHubAccess implementation (i.e. HubMock and IModelHubBackend).\r\n */\r\nexport class HubWrappers {\r\n protected static get hubMock() { return HubMock; }\r\n\r\n public static async getAccessToken(user: TestUserType) {\r\n return TestUserType[user];\r\n }\r\n\r\n /** Create an iModel with the name provided if it does not already exist. If it does exist, the iModelId is returned. */\r\n public static async createIModel(accessToken: AccessToken, iTwinId: GuidString, iModelName: string): Promise<GuidString> {\r\n assert.isTrue(this.hubMock.isValid, \"Must use HubMock for tests that modify iModels\");\r\n let iModelId = await IModelHost[_hubAccess].queryIModelByName({ accessToken, iTwinId, iModelName });\r\n if (!iModelId)\r\n iModelId = await IModelHost[_hubAccess].createNewIModel({ accessToken, iTwinId, iModelName, description: `Description for iModel` });\r\n return iModelId;\r\n }\r\n\r\n /** Deletes and re-creates an iModel with the provided name in the iTwin.\r\n * @returns the iModelId of the newly created iModel.\r\n */\r\n public static async recreateIModel(...[arg]: Parameters<BackendHubAccess[\"createNewIModel\"]>): Promise<GuidString> {\r\n assert.isTrue(this.hubMock.isValid, \"Must use HubMock for tests that modify iModels\");\r\n const deleteIModel = await IModelHost[_hubAccess].queryIModelByName(arg);\r\n if (undefined !== deleteIModel)\r\n await IModelHost[_hubAccess].deleteIModel({ accessToken: arg.accessToken, iTwinId: arg.iTwinId, iModelId: deleteIModel });\r\n\r\n // Create a new iModel\r\n return IModelHost[_hubAccess].createNewIModel({ description: `Description for ${arg.iModelName}`, ...arg });\r\n }\r\n\r\n /** Delete an IModel from the hub */\r\n public static async deleteIModel(accessToken: AccessToken, iTwinId: string, iModelName: string): Promise<void> {\r\n const iModelId = await IModelHost[_hubAccess].queryIModelByName({ accessToken, iTwinId, iModelName });\r\n if (undefined === iModelId)\r\n return;\r\n\r\n await IModelHost[_hubAccess].deleteIModel({ accessToken, iTwinId, iModelId });\r\n }\r\n\r\n /** Push an iModel to the Hub */\r\n public static async pushIModel(accessToken: AccessToken, iTwinId: string, pathname: string, iModelName?: string, overwrite?: boolean): Promise<GuidString> {\r\n // Delete any existing iModels with the same name as the required iModel\r\n const locIModelName = iModelName || path.basename(pathname, \".bim\");\r\n const iModelId = await IModelHost[_hubAccess].queryIModelByName({ accessToken, iTwinId, iModelName: locIModelName });\r\n if (iModelId) {\r\n if (!overwrite)\r\n return iModelId;\r\n await IModelHost[_hubAccess].deleteIModel({ accessToken, iTwinId, iModelId });\r\n }\r\n\r\n // Upload a new iModel\r\n return IModelHost[_hubAccess].createNewIModel({ accessToken, iTwinId, iModelName: locIModelName, version0: pathname });\r\n }\r\n\r\n /** Helper to open a briefcase db directly with the BriefcaseManager API */\r\n public static async downloadAndOpenBriefcase(args: RequestNewBriefcaseArg & { noLock?: true }): Promise<BriefcaseDb> {\r\n const props = await BriefcaseManager.downloadBriefcase(args);\r\n if (args.noLock) {\r\n const briefcase = await BriefcaseDb.open({ fileName: props.fileName });\r\n briefcase[_nativeDb].saveLocalValue(BriefcaseLocalValue.NoLocking, \"true\");\r\n briefcase.saveChanges();\r\n briefcase.close();\r\n }\r\n return BriefcaseDb.open({ fileName: props.fileName });\r\n }\r\n\r\n /** Opens the specific iModel as a Briefcase through the same workflow the IModelReadRpc.getConnectionProps method will use. Replicates the way a frontend would open the iModel. */\r\n public static async openBriefcaseUsingRpc(args: RequestNewBriefcaseProps & { accessToken: AccessToken, deleteFirst?: boolean }): Promise<BriefcaseDb> {\r\n if (undefined === args.asOf)\r\n args.asOf = IModelVersion.latest().toJSON();\r\n\r\n const openArgs: DownloadAndOpenArgs = {\r\n tokenProps: {\r\n iTwinId: args.iTwinId,\r\n iModelId: args.iModelId,\r\n changeset: (await IModelHost[_hubAccess].getChangesetFromVersion({ accessToken: args.accessToken, version: IModelVersion.fromJSON(args.asOf), iModelId: args.iModelId })),\r\n },\r\n activity: { accessToken: args.accessToken, activityId: \"\", applicationId: \"\", applicationVersion: \"\", sessionId: \"\" },\r\n syncMode: args.briefcaseId === 0 ? SyncMode.PullOnly : SyncMode.PullAndPush,\r\n forceDownload: args.deleteFirst,\r\n };\r\n\r\n assert.isTrue(this.hubMock.isValid || openArgs.syncMode === SyncMode.PullOnly, \"use HubMock to acquire briefcases\");\r\n while (true) {\r\n try {\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n return (await RpcBriefcaseUtility.open(openArgs)) as BriefcaseDb;\r\n } catch (error) {\r\n if (!(error instanceof RpcPendingResponse))\r\n throw error;\r\n }\r\n }\r\n }\r\n\r\n /** Downloads a checkpoint and opens it as a SnapShotDb */\r\n public static async downloadAndOpenCheckpoint(args: { accessToken: AccessToken, iTwinId: GuidString, iModelId: GuidString, asOf?: IModelVersionProps }): Promise<SnapshotDb> {\r\n if (undefined === args.asOf)\r\n args.asOf = IModelVersion.latest().toJSON();\r\n\r\n const checkpoint: CheckpointProps = {\r\n iTwinId: args.iTwinId,\r\n iModelId: args.iModelId,\r\n accessToken: args.accessToken,\r\n changeset: (await IModelHost[_hubAccess].getChangesetFromVersion({ accessToken: args.accessToken, version: IModelVersion.fromJSON(args.asOf), iModelId: args.iModelId })),\r\n };\r\n\r\n const folder = path.join(V2CheckpointManager.getFolder(), checkpoint.iModelId);\r\n const filename = path.join(folder, `${checkpoint.changeset.id === \"\" ? \"first\" : checkpoint.changeset.id}.bim`);\r\n const request: DownloadRequest = { checkpoint, localFile: filename };\r\n let db = SnapshotDb.tryFindByKey(CheckpointManager.getKey(request.checkpoint));\r\n if (undefined !== db)\r\n return db;\r\n db = IModelTestUtils.tryOpenLocalFile(request);\r\n if (db)\r\n return db;\r\n await V2CheckpointManager.downloadCheckpoint(request);\r\n await CheckpointManager.updateToRequestedVersion(request);\r\n return IModelTestUtils.openCheckpoint(request.localFile, request.checkpoint);\r\n }\r\n\r\n /** Opens the specific Checkpoint iModel, `SyncMode.FixedVersion`, through the same workflow the IModelReadRpc.getConnectionProps method will use. Replicates the way a frontend would open the iModel. */\r\n public static async openCheckpointUsingRpc(args: RequestNewBriefcaseProps & { accessToken: AccessToken, deleteFirst?: boolean }): Promise<IModelDb> {\r\n if (undefined === args.asOf)\r\n args.asOf = IModelVersion.latest().toJSON();\r\n\r\n const changeset = await IModelHost[_hubAccess].getChangesetFromVersion({ accessToken: args.accessToken, version: IModelVersion.fromJSON(args.asOf), iModelId: args.iModelId });\r\n const openArgs = {\r\n tokenProps: {\r\n iTwinId: args.iTwinId,\r\n iModelId: args.iModelId,\r\n changeset,\r\n },\r\n activity: { accessToken: args.accessToken, activityId: \"\", applicationId: \"\", applicationVersion: \"\", sessionId: \"\" },\r\n syncMode: SyncMode.FixedVersion as const,\r\n forceDownload: args.deleteFirst,\r\n };\r\n\r\n while (true) {\r\n try {\r\n return (await RpcBriefcaseUtility.open(openArgs));\r\n } catch (error) {\r\n if (!(error instanceof RpcPendingResponse))\r\n throw error;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Purges all acquired briefcases for the specified iModel (and user), if the specified threshold of acquired briefcases is exceeded\r\n */\r\n public static async purgeAcquiredBriefcasesById(accessToken: AccessToken, iModelId: GuidString, onReachThreshold: () => void = () => { }, acquireThreshold: number = 16): Promise<void> {\r\n const briefcases = await IModelHost[_hubAccess].getMyBriefcaseIds({ accessToken, iModelId });\r\n if (briefcases.length > acquireThreshold) {\r\n if (undefined !== onReachThreshold)\r\n onReachThreshold();\r\n\r\n const promises: Promise<void>[] = [];\r\n briefcases.forEach((briefcaseId) => {\r\n promises.push(IModelHost[_hubAccess].releaseBriefcase({ accessToken, iModelId, briefcaseId }));\r\n });\r\n await Promise.all(promises);\r\n }\r\n }\r\n\r\n public static async closeAndDeleteBriefcaseDb(accessToken: AccessToken, briefcaseDb: IModelDb) {\r\n const fileName = briefcaseDb.pathName;\r\n const iModelId = briefcaseDb.iModelId;\r\n briefcaseDb.close();\r\n\r\n await BriefcaseManager.deleteBriefcaseFiles(fileName, accessToken);\r\n\r\n // try to clean up empty briefcase directories, and empty iModel directories.\r\n if (0 === BriefcaseManager.getCachedBriefcases(iModelId).length) {\r\n IModelJsFs.removeSync(BriefcaseManager.getBriefcaseBasePath(iModelId));\r\n const imodelPath = BriefcaseManager.getIModelPath(iModelId);\r\n if (0 === IModelJsFs.readdirSync(imodelPath).length) {\r\n IModelJsFs.removeSync(imodelPath);\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport class IModelTestUtils {\r\n\r\n\r\n protected static get knownTestLocations(): { outputDir: string, assetsDir: string } { return KnownTestLocations; }\r\n\r\n /** Generate a name for an iModel that's unique using the baseName provided and appending a new GUID. */\r\n public static generateUniqueName(baseName: string) {\r\n return `${baseName} - ${Guid.createValue()}`;\r\n }\r\n\r\n\r\n public static openCheckpoint(fileName: LocalFileName, checkpoint: CheckpointProps) {\r\n const snapshot = SnapshotDb.openFile(fileName, { key: CheckpointManager.getKey(checkpoint) });\r\n (snapshot as any)._iTwinId = checkpoint.iTwinId;\r\n return snapshot;\r\n }\r\n\r\n /** try to open an existing local file to satisfy a download request */\r\n public static tryOpenLocalFile(request: DownloadRequest): SnapshotDb | undefined {\r\n const checkpoint = request.checkpoint;\r\n if (CheckpointManager.verifyCheckpoint(checkpoint, request.localFile))\r\n return this.openCheckpoint(request.localFile, checkpoint);\r\n\r\n return undefined;\r\n }\r\n\r\n /** Prepare for an output file by:\r\n * - Resolving the output file name under the known test output directory\r\n * - Making directories as necessary\r\n * - Removing a previous copy of the output file\r\n * @param subDirName Sub-directory under known test output directory. Should match the name of the test file minus the .test.ts file extension.\r\n * @param fileName Name of output fille\r\n */\r\n public static prepareOutputFile(subDirName: string, fileName: string): LocalFileName {\r\n if (!IModelJsFs.existsSync(this.knownTestLocations.outputDir))\r\n IModelJsFs.mkdirSync(this.knownTestLocations.outputDir);\r\n\r\n const outputDir = path.join(this.knownTestLocations.outputDir, subDirName);\r\n if (!IModelJsFs.existsSync(outputDir))\r\n IModelJsFs.mkdirSync(outputDir);\r\n\r\n const outputFile = path.join(outputDir, fileName);\r\n if (IModelJsFs.existsSync(outputFile))\r\n IModelJsFs.unlinkSync(outputFile);\r\n\r\n return outputFile;\r\n }\r\n\r\n /** Resolve an asset file path from the asset name by looking in the known assets directory */\r\n public static resolveAssetFile(assetName: string): LocalFileName {\r\n const assetFile = path.join(this.knownTestLocations.assetsDir, assetName);\r\n assert.isTrue(IModelJsFs.existsSync(assetFile));\r\n return assetFile;\r\n }\r\n\r\n public static resolveFontFile(fontName: string): LocalFileName {\r\n const subDirs = [\"Karla\", \"DejaVu\", \"Sitka\"];\r\n const fontSubDirectory = subDirs.find((x) => fontName.startsWith(x));\r\n\r\n fontName = fontSubDirectory ? path.join(fontSubDirectory, fontName) : fontName;\r\n const assetName = path.join(\"Fonts\", fontName);\r\n return this.resolveAssetFile(assetName);\r\n }\r\n\r\n /** Orchestrates the steps necessary to create a new snapshot iModel from a seed file. */\r\n public static createSnapshotFromSeed(testFileName: string, seedFileName: LocalFileName): SnapshotDb {\r\n const seedDb: SnapshotDb = SnapshotDb.openFile(seedFileName);\r\n const testDb: SnapshotDb = SnapshotDb.createFrom(seedDb, testFileName);\r\n seedDb.close();\r\n testDb.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n return testDb;\r\n }\r\n\r\n public static getUniqueModelCode(testDb: IModelDb, newModelCodeBase: string): Code {\r\n let newModelCode: string = newModelCodeBase;\r\n let iter: number = 0;\r\n while (true) {\r\n const modelCode = InformationPartitionElement.createCode(testDb, IModel.rootSubjectId, newModelCode);\r\n if (testDb.elements.queryElementIdByCode(modelCode) === undefined)\r\n return modelCode;\r\n\r\n newModelCode = newModelCodeBase + iter;\r\n ++iter;\r\n }\r\n }\r\n\r\n public static generateChangeSetId(): ChangesetIdWithIndex {\r\n let result = \"\";\r\n for (let i = 0; i < 20; ++i) {\r\n result += Math.floor(Math.random() * 256).toString(16).padStart(2, \"0\");\r\n }\r\n return { id: result };\r\n }\r\n\r\n /** Create and insert a PhysicalPartition element (in the repositoryModel) and an associated PhysicalModel. */\r\n public static createAndInsertPhysicalPartition(testDb: IModelDb, newModelCode: CodeProps, parentId?: Id64String): Id64String {\r\n const model = parentId ? testDb.elements.getElement(parentId).model : IModel.repositoryModelId;\r\n const parent = new SubjectOwnsPartitionElements(parentId || IModel.rootSubjectId);\r\n\r\n const modeledElementProps: ElementProps = {\r\n classFullName: PhysicalPartition.classFullName,\r\n parent,\r\n model,\r\n code: newModelCode,\r\n };\r\n const modeledElement: Element = testDb.elements.createElement(modeledElementProps);\r\n return testDb.elements.insertElement(modeledElement.toJSON());\r\n }\r\n\r\n /** Create and insert a PhysicalPartition element (in the repositoryModel) and an associated PhysicalModel. */\r\n public static async createAndInsertPhysicalPartitionAsync(testDb: IModelDb, newModelCode: CodeProps, parentId?: Id64String): Promise<Id64String> {\r\n const model = parentId ? testDb.elements.getElement(parentId).model : IModel.repositoryModelId;\r\n const parent = new SubjectOwnsPartitionElements(parentId || IModel.rootSubjectId);\r\n\r\n const modeledElementProps: ElementProps = {\r\n classFullName: PhysicalPartition.classFullName,\r\n parent,\r\n model,\r\n code: newModelCode,\r\n };\r\n const modeledElement = testDb.elements.createElement(modeledElementProps);\r\n await testDb.locks.acquireLocks({ shared: model });\r\n return testDb.elements.insertElement(modeledElement.toJSON());\r\n }\r\n\r\n /** Create and insert a PhysicalPartition element (in the repositoryModel) and an associated PhysicalModel. */\r\n public static createAndInsertPhysicalModel(testDb: IModelDb, modeledElementRef: RelatedElement, privateModel: boolean = false): Id64String {\r\n const newModel = testDb.models.createModel({ modeledElement: modeledElementRef, classFullName: PhysicalModel.classFullName, isPrivate: privateModel });\r\n const newModelId = newModel.id = testDb.models.insertModel(newModel.toJSON());\r\n assert.isTrue(Id64.isValidId64(newModelId));\r\n assert.isTrue(Id64.isValidId64(newModel.id));\r\n assert.deepEqual(newModelId, newModel.id);\r\n return newModelId;\r\n }\r\n\r\n /** Create and insert a PhysicalPartition element (in the repositoryModel) and an associated PhysicalModel. */\r\n public static async createAndInsertPhysicalModelAsync(testDb: IModelDb, modeledElementRef: RelatedElement, privateModel: boolean = false): Promise<Id64String> {\r\n const newModel = testDb.models.createModel({ modeledElement: modeledElementRef, classFullName: PhysicalModel.classFullName, isPrivate: privateModel });\r\n const newModelId = newModel.insert();\r\n assert.isTrue(Id64.isValidId64(newModelId));\r\n assert.isTrue(Id64.isValidId64(newModel.id));\r\n assert.deepEqual(newModelId, newModel.id);\r\n return newModelId;\r\n }\r\n\r\n /**\r\n * Create and insert a PhysicalPartition element (in the repositoryModel) and an associated PhysicalModel.\r\n * @return [modeledElementId, modelId]\r\n */\r\n public static createAndInsertPhysicalPartitionAndModel(testImodel: IModelDb, newModelCode: CodeProps, privateModel: boolean = false, parent?: Id64String): Id64String[] {\r\n const eid = IModelTestUtils.createAndInsertPhysicalPartition(testImodel, newModelCode, parent);\r\n const modeledElementRef = new RelatedElement({ id: eid });\r\n const mid = IModelTestUtils.createAndInsertPhysicalModel(testImodel, modeledElementRef, privateModel);\r\n return [eid, mid];\r\n }\r\n\r\n /**\r\n * Create and insert a PhysicalPartition element (in the repositoryModel) and an associated PhysicalModel.\r\n * @return [modeledElementId, modelId]\r\n */\r\n public static async createAndInsertPhysicalPartitionAndModelAsync(testImodel: IModelDb, newModelCode: CodeProps, privateModel: boolean = false, parentId?: Id64String): Promise<Id64String[]> {\r\n const eid = await IModelTestUtils.createAndInsertPhysicalPartitionAsync(testImodel, newModelCode, parentId);\r\n const modeledElementRef = new RelatedElement({ id: eid });\r\n const mid = await IModelTestUtils.createAndInsertPhysicalModelAsync(testImodel, modeledElementRef, privateModel);\r\n return [eid, mid];\r\n }\r\n\r\n /** Create and insert a Drawing Partition element (in the repositoryModel). */\r\n public static createAndInsertDrawingPartition(testDb: IModelDb, newModelCode: CodeProps, parentId?: Id64String): Id64String {\r\n const model = parentId ? testDb.elements.getElement(parentId).model : IModel.repositoryModelId;\r\n const parent = new SubjectOwnsPartitionElements(parentId || IModel.rootSubjectId);\r\n\r\n const modeledElementProps: ElementProps = {\r\n classFullName: Drawing.classFullName,\r\n parent,\r\n model,\r\n code: newModelCode,\r\n };\r\n const modeledElement: Element = testDb.elements.createElement(modeledElementProps);\r\n return testDb.elements.insertElement(modeledElement.toJSON());\r\n }\r\n\r\n /** Create and insert a DrawingModel associated with Drawing Partition. */\r\n public static createAndInsertDrawingModel(testDb: IModelDb, modeledElementRef: RelatedElement, privateModel: boolean = false): Id64String {\r\n const newModel = testDb.models.createModel({ modeledElement: modeledElementRef, classFullName: DrawingModel.classFullName, isPrivate: privateModel });\r\n const newModelId = newModel.insert();\r\n assert.isTrue(Id64.isValidId64(newModelId));\r\n assert.isTrue(Id64.isValidId64(newModel.id));\r\n assert.deepEqual(newModelId, newModel.id);\r\n return newModelId;\r\n }\r\n\r\n /**\r\n * Create and insert a Drawing Partition element (in the repositoryModel) and an associated DrawingModel.\r\n * @return [modeledElementId, modelId]\r\n */\r\n public static createAndInsertDrawingPartitionAndModel(testImodel: IModelDb, newModelCode: CodeProps, privateModel: boolean = false, parent?: Id64String): Id64String[] {\r\n const eid = IModelTestUtils.createAndInsertDrawingPartition(testImodel, newModelCode, parent);\r\n const modeledElementRef = new RelatedElement({ id: eid });\r\n const mid = IModelTestUtils.createAndInsertDrawingModel(testImodel, modeledElementRef, privateModel);\r\n return [eid, mid];\r\n }\r\n\r\n public static getUniqueSpatialCategoryCode(scopeModel: Model, newCodeBaseValue: string): Code {\r\n let newCodeValue: string = newCodeBaseValue;\r\n let iter: number = 0;\r\n while (true) {\r\n if (SpatialCategory.queryCategoryIdByName(scopeModel.iModel, scopeModel.id, newCodeValue) === undefined)\r\n return SpatialCategory.createCode(scopeModel.iModel, scopeModel.id, newCodeValue);\r\n\r\n newCodeValue = newCodeBaseValue + iter;\r\n ++iter;\r\n }\r\n }\r\n\r\n // Create a PhysicalObject. (Does not insert it.)\r\n public static createPhysicalObject(testImodel: IModelDb, modelId: Id64String, categoryId: Id64String, elemCode?: Code): Element {\r\n const elementProps: PhysicalElementProps = {\r\n classFullName: \"Generic:PhysicalObject\",\r\n model: modelId,\r\n category: categoryId,\r\n code: elemCode ? elemCode : Code.createEmpty(),\r\n };\r\n return testImodel.elements.createElement(elementProps);\r\n }\r\n\r\n public static registerTestBimSchema() {\r\n if (undefined === Schemas.getRegisteredSchema(TestBim.schemaName)) {\r\n Schemas.registerSchema(TestBim);\r\n ClassRegistry.register(TestPhysicalObject, TestBim);\r\n ClassRegistry.register(TestElementDrivesElement, TestBim);\r\n }\r\n }\r\n\r\n public static executeQuery(db: IModelDb, ecsql: string, bindings?: any[] | object): any[] {\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n return db.withPreparedStatement(ecsql, (stmt) => {\r\n if (bindings)\r\n stmt.bindValues(bindings);\r\n\r\n const rows: any[] = [];\r\n while (DbResult.BE_SQLITE_ROW === stmt.step()) {\r\n rows.push(stmt.getRow());\r\n if (rows.length > IModelDb.maxLimit)\r\n throw new IModelError(IModelStatus.BadRequest, \"Max LIMIT exceeded in SELECT statement\");\r\n }\r\n\r\n return rows;\r\n });\r\n }\r\n\r\n public static createJobSubjectElement(iModel: IModelDb, name: string): Subject {\r\n const subj = Subject.create(iModel, iModel.elements.getRootSubject().id, name);\r\n subj.setJsonProperty(\"Subject\", { Job: name }); // eslint-disable-line @typescript-eslint/naming-convention\r\n return subj;\r\n }\r\n\r\n /** Flushes the Txns in the TxnTable - this allows importing of schemas */\r\n public static flushTxns(iModelDb: IModelDb): boolean {\r\n iModelDb[_nativeDb].deleteAllTxns();\r\n return true;\r\n }\r\n\r\n public static querySubjectId(iModelDb: IModelDb, subjectCodeValue: string): Id64String {\r\n const subjectId = iModelDb.elements.queryElementIdByCode(Subject.createCode(iModelDb, IModel.rootSubjectId, subjectCodeValue))!;\r\n assert.isTrue(Id64.isValidId64(subjectId));\r\n return subjectId;\r\n }\r\n\r\n public static queryDefinitionPartitionId(iModelDb: IModelDb, parentSubjectId: Id64String, suffix: string): Id64String {\r\n const partitionCode: Code = DefinitionPartition.createCode(iModelDb, parentSubjectId, `Definition${suffix}`);\r\n const partitionId = iModelDb.elements.queryElementIdByCode(partitionCode)!;\r\n assert.isTrue(Id64.isValidId64(partitionId));\r\n return partitionId;\r\n }\r\n\r\n public static querySpatialCategoryId(iModelDb: IModelDb, modelId: Id64String, suffix: string): Id64String {\r\n const categoryCode: Code = SpatialCategory.createCode(iModelDb, modelId, `SpatialCategory${suffix}`);\r\n const categoryId = iModelDb.elements.queryElementIdByCode(categoryCode)!;\r\n assert.isTrue(Id64.isValidId64(categoryId));\r\n return categoryId;\r\n }\r\n\r\n public static queryPhysicalPartitionId(iModelDb: IModelDb, parentSubjectId: Id64String, suffix: string): Id64String {\r\n const partitionCode: Code = PhysicalPartition.createCode(iModelDb, parentSubjectId, `Physical${suffix}`);\r\n const partitionId = iModelDb.elements.queryElementIdByCode(partitionCode)!;\r\n assert.isTrue(Id64.isValidId64(partitionId));\r\n return partitionId;\r\n }\r\n\r\n public static queryPhysicalElementId(iModelDb: IModelDb, modelId: Id64String, categoryId: Id64String, suffix: string): Id64String {\r\n const elementId = IModelTestUtils.queryByUserLabel(iModelDb, `PhysicalObject${suffix}`);\r\n assert.isTrue(Id64.isValidId64(elementId));\r\n const element: PhysicalElement = iModelDb.elements.getElement<PhysicalElement>(elementId);\r\n assert.equal(element.model, modelId);\r\n assert.equal(element.category, categoryId);\r\n return elementId;\r\n }\r\n\r\n public static insertSpatialCategory(iModelDb: IModelDb, modelId: Id64String, categoryName: string, color: ColorDef): Id64String {\r\n const appearance: SubCategoryAppearance.Props = {\r\n color: color.toJSON(),\r\n transp: 0,\r\n invisible: false,\r\n };\r\n return SpatialCategory.insert(iModelDb, modelId, categoryName, appearance);\r\n }\r\n\r\n public static createBoxes(subCategoryIds: Id64String[]): GeometryStreamProps {\r\n const length = 1.0;\r\n const entryOrigin = Point3d.createZero();\r\n const geometryStreamBuilder = new GeometryStreamBuilder();\r\n geometryStreamBuilder.appendGeometry(Box.createDgnBox(\r\n entryOrigin, Vector3d.unitX(), Vector3d.unitY(), new Point3d(0, 0, length),\r\n length, length, length, length, true,\r\n )!);\r\n for (const subCategoryId of subCategoryIds) {\r\n entryOrigin.addInPlace({ x: 1, y: 1, z: 1 });\r\n geometryStreamBuilder.appendSubCategoryChange(subCategoryId);\r\n geometryStreamBuilder.appendGeometry(Box.createDgnBox(\r\n entryOrigin, Vector3d.unitX(), Vector3d.unitY(), new Point3d(0, 0, length),\r\n length, length, length, length, true,\r\n )!);\r\n }\r\n return geometryStreamBuilder.geometryStream;\r\n }\r\n\r\n public static createBox(size: Point3d, categoryId?: Id64String, subCategoryId?: Id64String, renderMaterialId?: Id64String, geometryPartId?: Id64String): GeometryStreamProps {\r\n const geometryStreamBuilder = new GeometryStreamBuilder();\r\n if ((undefined !== categoryId) && (undefined !== subCategoryId)) {\r\n geometryStreamBuilder.appendSubCategoryChange(subCategoryId);\r\n if (undefined !== renderMaterialId) {\r\n const geometryParams = new GeometryParams(categoryId, subCategoryId);\r\n geometryParams.materialId = renderMaterialId;\r\n geometryStreamBuilder.appendGeometryParamsChange(geometryParams);\r\n }\r\n }\r\n geometryStreamBuilder.appendGeometry(Box.createDgnBox(\r\n Point3d.createZero(), Vector3d.unitX(), Vector3d.unitY(), new Point3d(0, 0, size.z),\r\n size.x, size.y, size.x, size.y, true,\r\n )!);\r\n if (undefined !== geometryPartId) {\r\n geometryStreamBuilder.appendGeometryPart3d(geometryPartId);\r\n }\r\n return geometryStreamBuilder.geometryStream;\r\n }\r\n\r\n public static createCylinder(radius: number): GeometryStreamProps {\r\n const pointA = Point3d.create(0, 0, 0);\r\n const pointB = Point3d.create(0, 0, 2 * radius);\r\n const cylinder = Cone.createBaseAndTarget(pointA, pointB, Vector3d.unitX(), Vector3d.unitY(), radius, radius, true);\r\n const geometryStreamBuilder = new GeometryStreamBuilder();\r\n geometryStreamBuilder.appendGeometry(cylinder);\r\n return geometryStreamBuilder.geometryStream;\r\n }\r\n\r\n public static createRectangle(size: Point2d): GeometryStreamProps {\r\n const geometryStreamBuilder = new GeometryStreamBuilder();\r\n geometryStreamBuilder.appendGeometry(LineString3d.createPoints([\r\n new Point3d(0, 0),\r\n new Point3d(size.x, 0),\r\n new Point3d(size.x, size.y),\r\n new Point3d(0, size.y),\r\n new Point3d(0, 0),\r\n ]));\r\n return geometryStreamBuilder.geometryStream;\r\n }\r\n\r\n public static insertTextureElement(iModelDb: IModelDb, modelId: Id64String, textureName: string): Id64String {\r\n // This is an encoded png containing a 3x3 square with white in top left pixel, blue in middle pixel, and green in bottom right pixel. The rest of the square is red.\r\n const pngData = [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, 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, 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, 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, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130];\r\n const textureData = Buffer.from(pngData).toString(\"base64\");\r\n return Texture.insertTexture(iModelDb, modelId, textureName, ImageSourceFormat.Png, textureData, `Description for ${textureName}`);\r\n }\r\n\r\n public static queryByUserLabel(iModelDb: IModelDb, userLabel: string): Id64String {\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n return iModelDb.withPreparedStatement(`SELECT ECInstanceId FROM ${Element.classFullName} WHERE UserLabel=:userLabel`, (statement: ECSqlStatement): Id64String => {\r\n statement.bindString(\"userLabel\", userLabel);\r\n return DbResult.BE_SQLITE_ROW === statement.step() ? statement.getValue(0).getId() : Id64.invalid;\r\n });\r\n }\r\n\r\n public static queryByCodeValue(iModelDb: IModelDb, codeValue: string): Id64String {\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n return iModelDb.withPreparedStatement(`SELECT ECInstanceId FROM ${Element.classFullName} WHERE CodeValue=:codeValue`, (statement: ECSqlStatement): Id64String => {\r\n statement.bindString(\"codeValue\", codeValue);\r\n return DbResult.BE_SQLITE_ROW === statement.step() ? statement.getValue(0).getId() : Id64.invalid;\r\n });\r\n }\r\n\r\n public static insertRepositoryLink(iModelDb: IModelDb, codeValue: string, url: string, format: string): Id64String {\r\n const repositoryLinkProps: RepositoryLinkProps = {\r\n classFullName: RepositoryLink.classFullName,\r\n model: IModel.repositoryModelId,\r\n code: LinkElement.createCode(iModelDb, IModel.repositoryModelId, codeValue),\r\n url,\r\n format,\r\n };\r\n return iModelDb.elements.insertElement(repositoryLinkProps);\r\n }\r\n\r\n public static insertExternalSource(iModelDb: IModelDb, repositoryId: Id64String, userLabel: string): Id64String {\r\n const externalSourceProps: ExternalSourceProps = {\r\n classFullName: ExternalSource.classFullName,\r\n model: IModel.repositoryModelId,\r\n code: Code.createEmpty(),\r\n userLabel,\r\n repository: new ExternalSourceIsInRepository(repositoryId),\r\n connectorName: \"Connector\",\r\n connectorVersion: \"0.0.1\",\r\n };\r\n return iModelDb.elements.insertElement(externalSourceProps);\r\n }\r\n\r\n public static dumpIModelInfo(iModelDb: IModelDb): void {\r\n const outputFileName: string = `${iModelDb.pathName}.info.txt`;\r\n if (IModelJsFs.existsSync(outputFileName)) {\r\n IModelJsFs.removeSync(outputFileName);\r\n }\r\n IModelJsFs.appendFileSync(outputFileName, `${iModelDb.pathName}\\n`);\r\n IModelJsFs.appendFileSync(outputFileName, \"\\n=== CodeSpecs ===\\n\");\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n iModelDb.withPreparedStatement(`SELECT ECInstanceId,Name FROM BisCore:CodeSpec ORDER BY ECInstanceId`, (statement: ECSqlStatement): void => {\r\n while (DbResult.BE_SQLITE_ROW === statement.step()) {\r\n const codeSpecId = statement.getValue(0).getId();\r\n const codeSpecName: string = statement.getValue(1).getString();\r\n IModelJsFs.appendFileSync(outputFileName, `${codeSpecId}, ${codeSpecName}\\n`);\r\n }\r\n });\r\n IModelJsFs.appendFileSync(outputFileName, \"\\n=== Schemas ===\\n\");\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n iModelDb.withPreparedStatement(`SELECT Name FROM ECDbMeta.ECSchemaDef ORDER BY ECInstanceId`, (statement: ECSqlStatement): void => {\r\n while (DbResult.BE_SQLITE_ROW === statement.step()) {\r\n const schemaName: string = statement.getValue(0).getString();\r\n IModelJsFs.appendFileSync(outputFileName, `${schemaName}\\n`);\r\n }\r\n });\r\n IModelJsFs.appendFileSync(outputFileName, \"\\n=== Models ===\\n\");\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n iModelDb.withPreparedStatement(`SELECT ECInstanceId FROM ${Model.classFullName} ORDER BY ECInstanceId`, (statement: ECSqlStatement): void => {\r\n while (DbResult.BE_SQLITE_ROW === statement.step()) {\r\n const modelId = statement.getValue(0).getId();\r\n const model: Model = iModelDb.models.getModel(modelId);\r\n IModelJsFs.appendFileSync(outputFileName, `${modelId}, ${model.name}, ${model.parentModel}, ${model.classFullName}\\n`);\r\n }\r\n });\r\n IModelJsFs.appendFileSync(outputFileName, \"\\n=== ViewDefinitions ===\\n\");\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n iModelDb.withPreparedStatement(`SELECT ECInstanceId FROM ${ViewDefinition.classFullName} ORDER BY ECInstanceId`, (statement: ECSqlStatement): void => {\r\n while (DbResult.BE_SQLITE_ROW === statement.step()) {\r\n const viewDefinitionId = statement.getValue(0).getId();\r\n const viewDefinition: ViewDefinition = iModelDb.elements.getElement<ViewDefinition>(viewDefinitionId);\r\n IModelJsFs.appendFileSync(outputFileName, `${viewDefinitionId}, ${viewDefinition.code.value}, ${viewDefinition.classFullName}\\n`);\r\n }\r\n });\r\n IModelJsFs.appendFileSync(outputFileName, \"\\n=== Elements ===\\n\");\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n iModelDb.withPreparedStatement(`SELECT COUNT(*) FROM ${Element.classFullName}`, (statement: ECSqlStatement): void => {\r\n if (DbResult.BE_SQLITE_ROW === statement.step()) {\r\n const count: number = statement.getValue(0).getInteger();\r\n IModelJsFs.appendFileSync(outputFileName, `Count of ${Element.classFullName}=${count}\\n`);\r\n }\r\n });\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n iModelDb.withPreparedStatement(`SELECT COUNT(*) FROM ${PhysicalObject.classFullName}`, (statement: ECSqlStatement): void => {\r\n if (DbResult.BE_SQLITE_ROW === statement.step()) {\r\n const count: number = statement.getValue(0).getInteger();\r\n IModelJsFs.appendFileSync(outputFileName, `Count of ${PhysicalObject.classFullName}=${count}\\n`);\r\n }\r\n });\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n iModelDb.withPreparedStatement(`SELECT COUNT(*) FROM ${GeometryPart.classFullName}`, (statement: ECSqlStatement): void => {\r\n if (DbResult.BE_SQLITE_ROW === statement.step()) {\r\n const count: number = statement.getValue(0).getInteger();\r\n IModelJsFs.appendFileSync(outputFileName, `Count of ${GeometryPart.classFullName}=${count}\\n`);\r\n }\r\n });\r\n }\r\n}\r\n\r\nexport class ExtensiveTestScenario {\r\n static uniqueAspectGuid = Guid.createValue();\r\n static federationGuid3 = Guid.createValue();\r\n\r\n public static async prepareDb(sourceDb: IModelDb): Promise<void> {\r\n // Import desired schemas\r\n const sourceSchemaFileName = path.join(KnownTestLocations.assetsDir, \"ExtensiveTestScenario.ecschema.xml\");\r\n await sourceDb.importSchemas([FunctionalSchema.schemaFilePath, sourceSchemaFileName]);\r\n FunctionalSchema.registerSchema();\r\n }\r\n\r\n public static async populateDb(sourceDb: IModelDb): Promise<void> {\r\n // make sure Arial is in the font table\r\n const arialFontId = await sourceDb.fonts.acquireId({ name: \"Arial\", type: FontType.TrueType });\r\n expect(arialFontId).not.to.be.undefined;\r\n expect(arialFontId).greaterThan(0);\r\n\r\n // Initialize project extents\r\n const projectExtents = new Range3d(-1000, -1000, -1000, 1000, 1000, 1000);\r\n sourceDb.updateProjectExtents(projectExtents);\r\n // Insert CodeSpecs\r\n const codeSpecId1 = sourceDb.codeSpecs.insert(\"SourceCodeSpec\", CodeScopeSpec.Type.Model);\r\n const codeSpecId2 = sourceDb.codeSpecs.insert(\"ExtraCodeSpec\", CodeScopeSpec.Type.ParentElement);\r\n const codeSpecId3 = sourceDb.codeSpecs.insert(\"InformationRecords\", CodeScopeSpec.Type.Model);\r\n assert.isTrue(Id64.isValidId64(codeSpecId1));\r\n assert.isTrue(Id64.isValidId64(codeSpecId2));\r\n assert.isTrue(Id64.isValidId64(codeSpecId3));\r\n // Insert RepositoryModel structure\r\n const subjectId = Subject.insert(sourceDb, IModel.rootSubjectId, \"Subject\", \"Subject Description\");\r\n assert.isTrue(Id64.isValidId64(subjectId));\r\n const sourceOnlySubjectId = Subject.insert(sourceDb, IModel.rootSubjectId, \"Only in Source\");\r\n assert.isTrue(Id64.isValidId64(sourceOnlySubjectId));\r\n const definitionModelId = DefinitionModel.insert(sourceDb, subjectId, \"Definition\");\r\n assert.isTrue(Id64.isValidId64(definitionModelId));\r\n const informationModelId = InformationRecordModel.insert(sourceDb, subjectId, \"Information\");\r\n assert.isTrue(Id64.isValidId64(informationModelId));\r\n const groupModelId = GroupModel.insert(sourceDb, subjectId, \"Group\");\r\n assert.isTrue(Id64.isValidId64(groupModelId));\r\n const physicalModelId = PhysicalModel.insert(sourceDb, subjectId, \"Physical\");\r\n assert.isTrue(Id64.isValidId64(physicalModelId));\r\n const spatialLocationModelId = SpatialLocationModel.insert(sourceDb, subjectId, \"SpatialLocation\", true);\r\n assert.isTrue(Id64.isValidId64(spatialLocationModelId));\r\n const functionalModelId = FunctionalModel.insert(sourceDb, subjectId, \"Functional\");\r\n assert.isTrue(Id64.isValidId64(functionalModelId));\r\n const documentListModelId = DocumentListModel.insert(sourceDb, subjectId, \"Document\");\r\n assert.isTrue(Id64.isValidId64(documentListModelId));\r\n const drawingId = Drawing.insert(sourceDb, documentListModelId, \"Drawing\");\r\n assert.isTrue(Id64.isValidId64(drawingId));\r\n // Insert DefinitionElements\r\n const modelSelectorId = ModelSelector.insert(sourceDb, definitionModelId, \"SpatialModels\", [physicalModelId, spatialLocationModelId]);\r\n assert.isTrue(Id64.isValidId64(modelSelectorId));\r\n const spatialCategoryId = IModelTestUtils.insertSpatialCategory(sourceDb, definitionModelId, \"SpatialCategory\", ColorDef.green);\r\n assert.isTrue(Id64.isValidId64(spatialCategoryId));\r\n const sourcePhysicalCategoryId = IModelTestUtils.insertSpatialCategory(sourceDb, definitionModelId, \"SourcePhysicalCategory\", ColorDef.blue);\r\n assert.isTrue(Id64.isValidId64(sourcePhysicalCategoryId));\r\n const subCategoryId = SubCategory.insert(sourceDb, spatialCategoryId, \"SubCategory\", { color: ColorDef.blue.toJSON() });\r\n assert.isTrue(Id64.isValidId64(subCategoryId));\r\n const filteredSubCategoryId = SubCategory.insert(sourceDb, spatialCategoryId, \"FilteredSubCategory\", { color: ColorDef.green.toJSON() });\r\n assert.isTrue(Id64.isValidId64(filteredSubCategoryId));\r\n const drawingCategoryId = DrawingCategory.insert(sourceDb, definitionModelId, \"DrawingCategory\", new SubCategoryAppearance());\r\n assert.isTrue(Id64.isValidId64(drawingCategoryId));\r\n const spatialCategorySelectorId = CategorySelector.insert(sourceDb, definitionModelId, \"SpatialCategories\", [spatialCategoryId, sourcePhysicalCategoryId]);\r\n assert.isTrue(Id64.isValidId64(spatialCategorySelectorId));\r\n const drawingCategorySelectorId = CategorySelector.insert(sourceDb, definitionModelId, \"DrawingCategories\", [drawingCategoryId]);\r\n assert.isTrue(Id64.isValidId64(drawingCategorySelectorId));\r\n const auxCoordSystemProps: AuxCoordSystem2dProps = {\r\n classFullName: AuxCoordSystem2d.classFullName,\r\n model: definitionModelId,\r\n code: AuxCoordSystem2d.createCode(sourceDb, definitionModelId, \"AuxCoordSystem2d\"),\r\n };\r\n const auxCoordSystemId = sourceDb.elements.insertElement(auxCoordSystemProps);\r\n assert.isTrue(Id64.isValidId64(auxCoordSystemId));\r\n const textureId = IModelTestUtils.insertTextureElement(sourceDb, definitionModelId, \"Texture\");\r\n assert.isTrue(Id64.isValidId64(textureId));\r\n const renderMaterialId = RenderMaterialElement.insert(sourceDb, definitionModelId, \"RenderMaterial\", { paletteName: \"PaletteName\" });\r\n assert.isTrue(Id64.isValidId64(renderMaterialId));\r\n const geometryPartProps: GeometryPartProps = {\r\n classFullName: GeometryPart.classFullName,\r\n model: definitionModelId,\r\n code: GeometryPart.createCode(sourceDb, definitionModelId, \"GeometryPart\"),\r\n geom: IModelTestUtils.createBox(Point3d.create(3, 3, 3)),\r\n };\r\n const geometryPartId = sourceDb.elements.insertElement(geometryPartProps);\r\n assert.isTrue(Id64.isValidId64(geometryPartId));\r\n // Insert InformationRecords\r\n const informationRecordProps1 = {\r\n classFullName: \"ExtensiveTestScenario:SourceInformationRecord\",\r\n model: informationModelId,\r\n code: { spec: codeSpecId3, scope: informationModelId, value: \"InformationRecord1\" },\r\n commonString: \"Common1\",\r\n sourceString: \"One\",\r\n };\r\n const informationRecordId1 = sourceDb.elements.insertElement(informationRecordProps1);\r\n assert.isTrue(Id64.isValidId64(informationRecordId1));\r\n const informationRecordProps2: any = {\r\n classFullName: \"ExtensiveTestScenario:SourceInformationRecord\",\r\n model: informationModelId,\r\n code: { spec: codeSpecId3, scope: informationModelId, value: \"InformationRecord2\" },\r\n commonString: \"Common2\",\r\n sourceString: \"Two\",\r\n };\r\n const informationRecordId2 = sourceDb.elements.insertElement(informationRecordProps2);\r\n assert.isTrue(Id64.isValidId64(informationRecordId2));\r\n const informationRecordProps3 = {\r\n classFullName: \"ExtensiveTestScenario:SourceInformationRecord\",\r\n model: informationModelId,\r\n code: { spec: codeSpecId3, scope: informationModelId, value: \"InformationRecord3\" },\r\n commonString: \"Common3\",\r\n sourceString: \"Three\",\r\n };\r\n const informationRecordId3 = sourceDb.elements.insertElement(informationRecordProps3);\r\n assert.isTrue(Id64.isValidId64(informationRecordId3));\r\n // Insert PhysicalObject1\r\n const physicalObjectProps1: PhysicalElementProps = {\r\n classFullName: PhysicalObject.classFullName,\r\n model: physicalModelId,\r\n category: spatialCategoryId,\r\n code: Code.createEmpty(),\r\n userLabel: \"PhysicalObject1\",\r\n geom: IModelTestUtils.createBox(Point3d.create(1, 1, 1), spatialCategoryId, subCategoryId, renderMaterialId, geometryPartId),\r\n placement: {\r\n origin: Point3d.create(1, 1, 1),\r\n angles: YawPitchRollAngles.createDegrees(0, 0, 0),\r\n },\r\n };\r\n const physicalObjectId1 = sourceDb.elements.insertElement(physicalObjectProps1);\r\n assert.isTrue(Id64.isValidId64(physicalObjectId1));\r\n // Insert PhysicalObject1 children\r\n const childObjectProps1A: PhysicalElementProps = physicalObjectProps1;\r\n childObjectProps1A.userLabel = \"ChildObject1A\";\r\n childObjectProps1A.parent = new ElementOwnsChildElements(physicalObjectId1);\r\n childObjectProps1A.placement!.origin = Point3d.create(0, 1, 1);\r\n const childObjectId1A = sourceDb.elements.insertElement(childObjectProps1A);\r\n assert.isTrue(Id64.isValidId64(childObjectId1A));\r\n const childObjectProps1B: PhysicalElementProps = childObjectProps1A;\r\n childObjectProps1B.userLabel = \"ChildObject1B\";\r\n childObjectProps1B.placement!.origin = Point3d.create(1, 0, 1);\r\n const childObjectId1B = sourceDb.elements.insertElement(childObjectProps1B);\r\n assert.isTrue(Id64.isValidId64(childObjectId1B));\r\n // Insert PhysicalObject2\r\n const physicalObjectProps2: PhysicalElementProps = {\r\n classFullName: PhysicalObject.classFullName,\r\n model: physicalModelId,\r\n category: sourcePhysicalCategoryId,\r\n code: Code.createEmpty(),\r\n userLabel: \"PhysicalObject2\",\r\n geom: IModelTestUtils.createBox(Point3d.create(2, 2, 2)),\r\n placement: {\r\n origin: Point3d.create(2, 2, 2),\r\n angles: YawPitchRollAngles.createDegrees(0, 0, 0),\r\n },\r\n };\r\n const physicalObjectId2 = sourceDb.elements.insertElement(physicalObjectProps2);\r\n assert.isTrue(Id64.isValidId64(physicalObjectId2));\r\n // Insert PhysicalObject3\r\n const physicalObjectProps3: PhysicalElementProps = {\r\n classFullName: PhysicalObject.classFullName,\r\n model: physicalModelId,\r\n category: sourcePhysicalCategoryId,\r\n code: Code.createEmpty(),\r\n federationGuid: ExtensiveTestScenario.federationGuid3,\r\n userLabel: \"PhysicalObject3\",\r\n };\r\n const physicalObjectId3 = sourceDb.elements.insertElement(physicalObjectProps3);\r\n assert.isTrue(Id64.isValidId64(physicalObjectId3));\r\n // Insert PhysicalObject4\r\n const physicalObjectProps4: PhysicalElementProps = {\r\n classFullName: PhysicalObject.classFullName,\r\n model: physicalModelId,\r\n category: spatialCategoryId,\r\n code: Code.createEmpty(),\r\n userLabel: \"PhysicalObject4\",\r\n geom: IModelTestUtils.createBoxes([subCategoryId, filteredSubCategoryId]),\r\n placement: {\r\n origin: Point3d.create(4, 4, 4),\r\n angles: YawPitchRollAngles.createDegrees(0, 0, 0),\r\n },\r\n };\r\n const physicalObjectId4 = sourceDb.elements.insertElement(physicalObjectProps4);\r\n assert.isTrue(Id64.isValidId64(physicalObjectId4));\r\n // Insert PhysicalElement1\r\n const sourcePhysicalElementProps: PhysicalElementProps = {\r\n classFullName: \"ExtensiveTestScenario:SourcePhysicalElement\",\r\n model: physicalModelId,\r\n category: sourcePhysicalCategoryId,\r\n code: Code.createEmpty(),\r\n userLabel: \"PhysicalElement1\",\r\n geom: IModelTestUtils.createBox(Point3d.create(2, 2, 2)),\r\n placement: {\r\n origin: Point3d.create(4, 4, 4),\r\n angles: YawPitchRollAngles.createDegrees(0, 0, 0),\r\n },\r\n sourceString: \"S1\",\r\n sourceDouble: 1.1,\r\n sourceNavigation: { id: sourcePhysicalCategoryId, relClassName: \"ExtensiveTestScenario:SourcePhysicalElementUsesSourceDefinition\" },\r\n commonNavigation: { id: sourcePhysicalCategoryId },\r\n commonString: \"Common\",\r\n commonDouble: 7.3,\r\n sourceBinary: new Uint8Array([1, 3, 5, 7]),\r\n commonBinary: Base64EncodedString.fromUint8Array(new Uint8Array([2, 4, 6, 8])),\r\n extraString: \"Extra\",\r\n } as PhysicalElementProps;\r\n const sourcePhysicalElementId = sourceDb.elements.insertElement(sourcePhysicalElementProps);\r\n assert.isTrue(Id64.isValidId64(sourcePhysicalElementId));\r\n assert.doesNotThrow(() => sourceDb.elements.getElement(sourcePhysicalElementId));\r\n // Insert ElementAspects\r\n const aspectProps = {\r\n classFullName: \"ExtensiveTestScenario:SourceUniqueAspect\",\r\n element: new ElementOwnsUniqueAspect(physicalObjectId1),\r\n commonDouble: 1.1,\r\n commonString: \"Unique\",\r\n commonLong: physicalObjectId1,\r\n commonBinary: Base64EncodedString.fromUint8Array(new Uint8Array([2, 4, 6, 8])),\r\n sourceDouble: 11.1,\r\n sourceString: \"UniqueAspect\",\r\n sourceLong: physicalObjectId1,\r\n sourceGuid: ExtensiveTestScenario.uniqueAspectGuid,\r\n extraString: \"Extra\",\r\n } as const;\r\n sourceDb.elements.insertAspect(aspectProps);\r\n const sourceUniqueAspect: ElementUniqueAspect = sourceDb.elements.getAspects(physicalObjectId1, \"ExtensiveTestScenario:SourceUniqueAspect\")[0];\r\n expect(sourceUniqueAspect).to.deep.subsetEqual(omit(aspectProps, [\"commonBinary\"]), { normalizeClassNameProps: true });\r\n sourceDb.elements.insertAspect({\r\n classFullName: \"ExtensiveTestScenario:SourceMultiAspect\",\r\n element: new ElementOwnsMultiAspects(physicalObjectId1),\r\n commonDouble: 2.2,\r\n commonString: \"Multi\",\r\n commonLong: physicalObjectId1,\r\n sourceDouble: 22.2,\r\n sourceString: \"MultiAspect\",\r\n sourceLong: physicalObjectId1,\r\n sourceGuid: Guid.createValue(),\r\n extraString: \"Extra\",\r\n } as ElementAspectProps);\r\n sourceDb.elements.insertAspect({\r\n classFullName: \"ExtensiveTestScenario:SourceMultiAspect\",\r\n element: new ElementOwnsMultiAspects(physicalObjectId1),\r\n commonDouble: 3.3,\r\n commonString: \"Multi\",\r\n commonLong: physicalObjectId1,\r\n sourceDouble: 33.3,\r\n sourceString: \"MultiAspect\",\r\n sourceLong: physicalObjectId1,\r\n sourceGuid: Guid.createValue(),\r\n extraString: \"Extra\",\r\n } as ElementAspectProps);\r\n sourceDb.elements.insertAspect({\r\n classFullName: \"ExtensiveTestScenario:SourceUniqueAspectToExclude\",\r\n element: new ElementOwnsUniqueAspect(physicalObjectId1),\r\n description: \"SourceUniqueAspect1\",\r\n } as ElementAspectProps);\r\n sourceDb.elements.insertAspect({\r\n classFullName: \"ExtensiveTestScenario:SourceMultiAspectToExclude\",\r\n element: new ElementOwnsMultiAspects(physicalObjectId1),\r\n description: \"SourceMultiAspect1\",\r\n } as ElementAspectProps);\r\n // Insert DrawingGraphics\r\n const drawingGraphicProps1: GeometricElement2dProps = {\r\n classFullName: DrawingGraphic.classFullName,\r\n model: drawingId,\r\n category: drawingCategoryId,\r\n code: Code.createEmpty(),\r\n userLabel: \"DrawingGraphic1\",\r\n geom: IModelTestUtils.createRectangle(Point2d.create(1, 1)),\r\n placement: { origin: Point2d.create(2, 2), angle: 0 },\r\n };\r\n const drawingGraphicId1 = sourceDb.elements.insertElement(drawingGraphicProps1);\r\n assert.isTrue(Id64.isValidId64(drawingGraphicId1));\r\n const drawingGraphicRepresentsId1 = DrawingGraphicRepresentsElement.insert(sourceDb, drawingGraphicId1, physicalObjectId1);\r\n assert.isTrue(Id64.isValidId64(drawingGraphicRepresentsId1));\r\n const drawingGraphicProps2: GeometricElement2dProps = {\r\n classFullName: DrawingGraphic.classFullName,\r\n model: drawingId,\r\n category: drawingCategoryId,\r\n code: Code.createEmpty(),\r\n userLabel: \"DrawingGraphic2\",\r\n geom: IModelTestUtils.createRectangle(Point2d.create(1, 1)),\r\n placement: { origin: Point2d.create(3, 3), angle: 0 },\r\n };\r\n const drawingGraphicId2 = sourceDb.elements.insertElement(drawingGraphicProps2);\r\n assert.isTrue(Id64.isValidId64(drawingGraphicId2));\r\n const drawingGraphicRepresentsId2 = DrawingGraphicRepresentsElement.insert(sourceDb, drawingGraphicId2, physicalObjectId1);\r\n assert.isTrue(Id64.isValidId64(drawingGraphicRepresentsId2));\r\n // Insert DisplayStyles\r\n const displayStyle2dId = DisplayStyle2d.insert(sourceDb, definitionModelId, \"DisplayStyle2d\");\r\n assert.isTrue(Id64.isValidId64(displayStyle2dId));\r\n const displayStyle3d: DisplayStyle3d = DisplayStyle3d.create(sourceDb, definitionModelId, \"DisplayStyle3d\");\r\n const subCategoryOverride: SubCategoryOverride = SubCategoryOverride.fromJSON({ color: ColorDef.from(1, 2, 3).toJSON() });\r\n displayStyle3d.settings.overrideSubCategory(subCategoryId, subCategoryOverride);\r\n displayStyle3d.settings.addExcludedElements(physicalObjectId1);\r\n displayStyle3d.settings.setPlanProjectionSettings(spatialLocationModelId, PlanProjectionSettings.fromJSON({ elevation: 10.0 }));\r\n displayStyle3d.settings.environment = Environment.fromJSON({\r\n sky: {\r\n image: {\r\n type: SkyBoxImageType.Spherical,\r\n texture: textureId,\r\n },\r\n },\r\n });\r\n const displayStyle3dId = displayStyle3d.insert();\r\n assert.isTrue(Id64.isValidId64(displayStyle3dId));\r\n // Insert ViewDefinitions\r\n const viewId = OrthographicViewDefinition.insert(sourceDb, definitionModelId, \"Orthographic View\", modelSelectorId, spatialCategorySelectorId, displayStyle3dId, projectExtents, StandardViewIndex.Iso);\r\n assert.isTrue(Id64.isValidId64(viewId));\r\n const drawingViewRange = new Range2d(0, 0, 100, 100);\r\n const drawingViewId = DrawingViewDefinition.insert(sourceDb, definitionModelId, \"Drawing View\", drawingId, drawingCategorySelectorId, displayStyle2dId, drawingViewRange);\r\n assert.isTrue(Id64.isValidId64(drawingViewId));\r\n // Insert instance of SourceRelToExclude to test relationship exclusion by class\r\n const relationship1: Relationship = sourceDb.relationships.createInstance({\r\n classFullName: \"ExtensiveTestScenario:SourceRelToExclude\",\r\n sourceId: spatialCategorySelectorId,\r\n targetId: drawingCategorySelectorId,\r\n });\r\n const relationshipId1 = sourceDb.relationships.insertInstance(relationship1.toJSON());\r\n assert.isTrue(Id64.isValidId64(relationshipId1));\r\n // Insert instance of RelWithProps to test relationship property remapping\r\n const relationship2: Relationship = sourceDb.relationships.createInstance({\r\n classFullName: \"ExtensiveTestScenario:SourceRelWithProps\",\r\n sourceId: spatialCategorySelectorId,\r\n targetId: drawingCategorySelectorId,\r\n sourceString: \"One\",\r\n sourceDouble: 1.1,\r\n sourceLong: spatialCategoryId,\r\n sourceGuid: Guid.createValue(),\r\n } as any);\r\n const relationshipId2 = sourceDb.relationships.insertInstance(relationship2.toJSON());\r\n assert.isTrue(Id64.isValidId64(relationshipId2));\r\n }\r\n\r\n public static updateDb(sourceDb: IModelDb): void {\r\n // Update Subject element\r\n const subjectId = sourceDb.elements.queryElementIdByCode(Subject.createCode(sourceDb, IModel.rootSubjectId, \"Subject\"))!;\r\n assert.isTrue(Id64.isValidId64(subjectId));\r\n const subject = sourceDb.elements.getElement<Subject>(subjectId);\r\n subject.description = \"Subject description (Updated)\";\r\n sourceDb.elements.updateElement(subject.toJSON());\r\n // Update spatialCategory element\r\n const definitionModelId = sourceDb.elements.queryElementIdByCode(InformationPartitionElement.createCode(sourceDb, subjectId, \"Definition\"))!;\r\n assert.isTrue(Id64.isValidId64(definitionModelId));\r\n const spatialCategoryId = sourceDb.elements.queryElementIdByCode(SpatialCategory.createCode(sourceDb, definitionModelId, \"SpatialCategory\"))!;\r\n assert.isTrue(Id64.isValidId64(spatialCategoryId));\r\n const spatialCategory: SpatialCategory = sourceDb.elements.getElement<SpatialCategory>(spatialCategoryId);\r\n spatialCategory.federationGuid = Guid.createValue();\r\n sourceDb.elements.updateElement(spatialCategory.toJSON());\r\n // Update relationship properties\r\n const spatialCategorySelectorId = sourceDb.elements.queryElementIdByCode(CategorySelector.createCode(sourceDb, definitionModelId, \"SpatialCategories\"))!;\r\n assert.isTrue(Id64.isValidId64(spatialCategorySelectorId));\r\n const drawingCategorySelectorId = sourceDb.elements.queryElementIdByCode(CategorySelector.createCode(sourceDb, definitionModelId, \"DrawingCategories\"))!;\r\n assert.isTrue(Id64.isValidId64(drawingCategorySelectorId));\r\n const relWithProps: any = sourceDb.relationships.getInstanceProps(\r\n \"ExtensiveTestScenario:SourceRelWithProps\",\r\n { sourceId: spatialCategorySelectorId, targetId: drawingCategorySelectorId },\r\n );\r\n assert.equal(relWithProps.sourceString, \"One\");\r\n assert.equal(relWithProps.sourceDouble, 1.1);\r\n relWithProps.sourceString += \"-Updated\";\r\n relWithProps.sourceDouble = 1.2;\r\n sourceDb.relationships.updateInstance(relWithProps);\r\n // Update ElementAspect properties\r\n const physicalObjectId1 = IModelTestUtils.queryByUserLabel(sourceDb, \"PhysicalObject1\");\r\n const sourceUniqueAspects: ElementAspect[] = sourceDb.elements.getAspects(physicalObjectId1, \"ExtensiveTestScenario:SourceUniqueAspect\");\r\n assert.equal(sourceUniqueAspects.length, 1);\r\n sourceUniqueAspects[0].asAny.commonString += \"-Updated\";\r\n sourceUniqueAspects[0].asAny.sourceString += \"-Updated\";\r\n sourceDb.elements.updateAspect(sourceUniqueAspects[0].toJSON());\r\n const sourceMultiAspects: ElementAspect[] = sourceDb.elements.getAspects(physicalObjectId1, \"ExtensiveTestScenario:SourceMultiAspect\");\r\n assert.equal(sourceMultiAspects.length, 2);\r\n sourceMultiAspects[1].asAny.commonString += \"-Updated\";\r\n sourceMultiAspects[1].asAny.sourceString += \"-Updated\";\r\n sourceDb.elements.updateAspect(sourceMultiAspects[1].toJSON());\r\n // clear NavigationProperty of PhysicalElement1\r\n const physicalElementId1 = IModelTestUtils.queryByUserLabel(sourceDb, \"PhysicalElement1\");\r\n let physicalElement1: PhysicalElement = sourceDb.elements.getElement(physicalElementId1);\r\n physicalElement1.asAny.commonNavigation = RelatedElement.none;\r\n physicalElement1.update();\r\n physicalElement1 = sourceDb.elements.getElement(physicalElementId1);\r\n assert.isUndefined(physicalElement1.asAny.commonNavigation);\r\n // delete PhysicalObject3\r\n const physicalObjectId3 = IModelTestUtils.queryByUserLabel(sourceDb, \"PhysicalObject3\");\r\n assert.isTrue(Id64.isValidId64(physicalObjectId3));\r\n sourceDb.elements.deleteElement(physicalObjectId3);\r\n assert.equal(Id64.invalid, IModelTestUtils.queryByUserLabel(sourceDb, \"PhysicalObject3\"));\r\n // Insert PhysicalObject5\r\n const physicalObjectProps5: PhysicalElementProps = {\r\n classFullName: PhysicalObject.classFullName,\r\n model: physicalElement1.model,\r\n category: spatialCategoryId,\r\n code: Code.createEmpty(),\r\n userLabel: \"PhysicalObject5\",\r\n geom: IModelTestUtils.createBox(Point3d.create(1, 1, 1)),\r\n placement: {\r\n origin: Point3d.create(5, 5, 5),\r\n angles: YawPitchRollAngles.createDegrees(0, 0, 0),\r\n },\r\n };\r\n const physicalObjectId5 = sourceDb.elements.insertElement(physicalObjectProps5);\r\n assert.isTrue(Id64.isValidId64(physicalObjectId5));\r\n // delete relationship\r\n const drawingGraphicId1 = IModelTestUtils.queryByUserLabel(sourceDb, \"DrawingGraphic1\");\r\n const drawingGraphicId2 = IModelTestUtils.queryByUserLabel(sourceDb, \"DrawingGraphic2\");\r\n const relationship: Relationship = sourceDb.relationships.getInstance(DrawingGraphicRepresentsElement.classFullName, { sourceId: drawingGraphicId2, targetId: physicalObjectId1 });\r\n relationship.delete();\r\n // insert relationships\r\n DrawingGraphicRepresentsElement.insert(sourceDb, drawingGraphicId1, physicalObjectId5);\r\n DrawingGraphicRepresentsElement.insert(sourceDb, drawingGraphicId2, physicalObjectId5);\r\n // update InformationRecord2\r\n const informationRecordCodeSpec: CodeSpec = sourceDb.codeSpecs.getByName(\"InformationRecords\");\r\n const informationModelId = sourceDb.elements.queryElementIdByCode(InformationPartitionElement.createCode(sourceDb, subjectId, \"Information\"))!;\r\n const informationRecodeCode2: Code = new Code({ spec: informationRecordCodeSpec.id, scope: informationModelId, value: \"InformationRecord2\" });\r\n const informationRecordId2 = sourceDb.elements.queryElementIdByCode(informationRecodeCode2)!;\r\n assert.isTrue(Id64.isValidId64(informationRecordId2));\r\n const informationRecord2: any = sourceDb.elements.getElement(informationRecordId2);\r\n informationRecord2.commonString = `${informationRecord2.commonString}-Updated`;\r\n informationRecord2.sourceString = `${informationRecord2.sourceString}-Updated`;\r\n informationRecord2.update();\r\n // delete InformationRecord3\r\n const informationRecodeCode3: Code = new Code({ spec: informationRecordCodeSpec.id, scope: informationModelId, value: \"InformationRecord3\" });\r\n const informationRecordId3 = sourceDb.elements.queryElementIdByCode(informationRecodeCode3)!;\r\n assert.isTrue(Id64.isValidId64(informationRecordId3));\r\n sourceDb.elements.deleteElement(informationRecordId3);\r\n }\r\n\r\n public static assertUpdatesInDb(iModelDb: IModelDb, assertDeletes: boolean = true): void {\r\n // determine which schema was imported\r\n const testSourceSchema = iModelDb.querySchemaVersion(\"ExtensiveTestScenario\") ? true : false;\r\n const testTargetSchema = iModelDb.querySchemaVersion(\"ExtensiveTestScenarioTarget\") ? true : false;\r\n assert.notEqual(testSourceSchema, testTargetSchema);\r\n // assert Subject was updated\r\n const subjectId = iModelDb.elements.queryElementIdByCode(Subject.createCode(iModelDb, IModel.rootSubjectId, \"Subject\"))!;\r\n assert.isTrue(Id64.isValidId64(subjectId));\r\n const subject: Subject = iModelDb.elements.getElement<Subject>(subjectId);\r\n assert.equal(subject.description, \"Subject description (Updated)\");\r\n // assert SpatialCategory was updated\r\n const definitionModelId = iModelDb.elements.queryElementIdByCode(InformationPartitionElement.createCode(iModelDb, subjectId, \"Definition\"))!;\r\n assert.isTrue(Id64.isValidId64(definitionModelId));\r\n const spatialCategoryId = iModelDb.elements.queryElementIdByCode(SpatialCategory.createCode(iModelDb, definitionModelId, \"SpatialCategory\"))!;\r\n assert.isTrue(Id64.isValidId64(spatialCategoryId));\r\n const spatialCategory: SpatialCategory = iModelDb.elements.getElement<SpatialCategory>(spatialCategoryId);\r\n assert.exists(spatialCategory.federationGuid);\r\n // assert TargetRelWithProps was updated\r\n const spatialCategorySelectorId = iModelDb.elements.queryElementIdByCode(CategorySelector.createCode(iModelDb, definitionModelId, \"SpatialCategories\"))!;\r\n assert.isTrue(Id64.isValidId64(spatialCategorySelectorId));\r\n const drawingCategorySelectorId = iModelDb.elements.queryElementIdByCode(CategorySelector.createCode(iModelDb, definitionModelId, \"DrawingCategories\"))!;\r\n assert.isTrue(Id64.isValidId64(drawingCategorySelectorId));\r\n const relClassFullName = testTargetSchema ? \"ExtensiveTestScenarioTarget:TargetRelWithProps\" : \"ExtensiveTestScenario:SourceRelWithProps\";\r\n const relWithProps: any = iModelDb.relationships.getInstanceProps(\r\n relClassFullName,\r\n { sourceId: spatialCategorySelectorId, targetId: drawingCategorySelectorId },\r\n );\r\n assert.equal(testTargetSchema ? relWithProps.targetString : relWithProps.sourceString, \"One-Updated\");\r\n assert.equal(testTargetSchema ? relWithProps.targetDouble : relWithProps.sourceDouble, 1.2);\r\n // assert ElementAspect properties\r\n const physicalObjectId1 = IModelTestUtils.queryByUserLabel(iModelDb, \"PhysicalObject1\");\r\n const uniqueAspectClassFullName = testTargetSchema ? \"ExtensiveTestScenarioTarget:TargetUniqueAspect\" : \"ExtensiveTestScenario:SourceUniqueAspect\";\r\n const uniqueAspects: ElementAspect[] = iModelDb.elements.getAspects(physicalObjectId1, uniqueAspectClassFullName);\r\n assert.equal(uniqueAspects.length, 1);\r\n const uniqueAspect = uniqueAspects[0].asAny;\r\n expect(uniqueAspect).to.deep.subsetEqual({\r\n commonDouble: 1.1,\r\n commonString: \"Unique-Updated\",\r\n commonLong: physicalObjectId1,\r\n });\r\n if (testTargetSchema) {\r\n expect(uniqueAspect).to.deep.subsetEqual({\r\n targetDouble: 11.1,\r\n targetString: \"UniqueAspect-Updated\",\r\n targetLong: physicalObjectId1,\r\n });\r\n } else {\r\n expect(uniqueAspect).to.deep.subsetEqual({\r\n sourceDouble: 11.1,\r\n sourceString: \"UniqueAspect-Updated\",\r\n sourceLong: physicalObjectId1,\r\n });\r\n }\r\n const multiAspectClassFullName = testTargetSchema ? \"ExtensiveTestScenarioTarget:TargetMultiAspect\" : \"ExtensiveTestScenario:SourceMultiAspect\";\r\n const multiAspects: ElementAspect[] = iModelDb.elements.getAspects(physicalObjectId1, multiAspectClassFullName);\r\n assert.equal(multiAspects.length, 2);\r\n const multiAspect0 = multiAspects[0].asAny;\r\n const multiAspect1 = multiAspects[1].asAny;\r\n assert.equal(multiAspect0.commonDouble, 2.2);\r\n assert.equal(multiAspect0.commonString, \"Multi\");\r\n assert.equal(multiAspect0.commonLong, physicalObjectId1);\r\n assert.equal(testTargetSchema ? multiAspect0.targetDouble : multiAspect0.sourceDouble, 22.2);\r\n assert.equal(testTargetSchema ? multiAspect0.targetString : multiAspect0.sourceString, \"MultiAspect\");\r\n assert.equal(testTargetSchema ? multiAspect0.targetLong : multiAspect0.sourceLong, physicalObjectId1);\r\n assert.equal(multiAspect1.commonDouble, 3.3);\r\n assert.equal(multiAspect1.commonString, \"Multi-Updated\");\r\n assert.equal(multiAspect1.commonLong, physicalObjectId1);\r\n assert.equal(testTargetSchema ? multiAspect1.targetDouble : multiAspect1.sourceDouble, 33.3);\r\n assert.equal(testTargetSchema ? multiAspect1.targetString : multiAspect1.sourceString, \"MultiAspect-Updated\");\r\n assert.equal(testTargetSchema ? multiAspect1.targetLong : multiAspect1.sourceLong, physicalObjectId1);\r\n // assert NavigationProperty of PhysicalElement1 was cleared\r\n const physicalElementId = IModelTestUtils.queryByUserLabel(iModelDb, \"PhysicalElement1\");\r\n const physicalElement: PhysicalElement = iModelDb.elements.getElement(physicalElementId);\r\n assert.isUndefined(physicalElement.asAny.commonNavigation);\r\n // assert PhysicalObject5 was inserted\r\n const physicalObjectId5 = IModelTestUtils.queryByUserLabel(iModelDb, \"PhysicalObject5\");\r\n assert.isTrue(Id64.isValidId64(physicalObjectId5));\r\n // assert relationships were inserted\r\n const drawingGraphicId1 = IModelTestUtils.queryByUserLabel(iModelDb, \"DrawingGraphic1\");\r\n const drawingGraphicId2 = IModelTestUtils.queryByUserLabel(iModelDb, \"DrawingGraphic2\");\r\n iModelDb.relationships.getInstance(DrawingGraphicRepresentsElement.classFullName, { sourceId: drawingGraphicId1, targetId: physicalObjectId5 });\r\n iModelDb.relationships.getInstance(DrawingGraphicRepresentsElement.classFullName, { sourceId: drawingGraphicId2, targetId: physicalObjectId5 });\r\n // assert InformationRecord2 was updated\r\n const informationRecordCodeSpec: CodeSpec = iModelDb.codeSpecs.getByName(\"InformationRecords\");\r\n const informationModelId = iModelDb.elements.queryElementIdByCode(InformationPartitionElement.createCode(iModelDb, subjectId, \"Information\"))!;\r\n const informationRecordId2 = iModelDb.elements.queryElementIdByCode(new Code({ spec: informationRecordCodeSpec.id, scope: informationModelId, value: \"InformationRecord2\" }));\r\n assert.isTrue(Id64.isValidId64(informationRecordId2!));\r\n const informationRecord2: any = iModelDb.elements.getElement(informationRecordId2!);\r\n assert.equal(informationRecord2.commonString, \"Common2-Updated\");\r\n assert.equal(testTargetSchema ? informationRecord2.targetString : informationRecord2.sourceString, \"Two-Updated\");\r\n // assert InformationRecord3 was deleted\r\n assert.isDefined(iModelDb.elements.queryElementIdByCode(new Code({ spec: informationRecordCodeSpec.id, scope: informationModelId, value: \"InformationRecord1\" })));\r\n assert.isDefined(iModelDb.elements.queryElementIdByCode(new Code({ spec: informationRecordCodeSpec.id, scope: informationModelId, value: \"InformationRecord2\" })));\r\n // detect deletes if possible - cannot detect during processAll when isReverseSynchronization is true\r\n if (assertDeletes) {\r\n assert.equal(Id64.invalid, IModelTestUtils.queryByUserLabel(iModelDb, \"PhysicalObject3\"));\r\n assert.throws(() => iModelDb.relationships.getInstanceProps(DrawingGraphicRepresentsElement.classFullName, { sourceId: drawingGraphicId2, targetId: physicalObjectId1 }));\r\n assert.isUndefined(iModelDb.elements.queryElementIdByCode(new Code({ spec: informationRecordCodeSpec.id, scope: informationModelId, value: \"InformationRecord3\" })));\r\n }\r\n }\r\n}\r\n"]}