@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":"IModelWrite.test.js","sourceRoot":"","sources":["../../../../src/test/standalone/IModelWrite.test.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F,OAAO,EAAe,QAAQ,EAAc,IAAI,EAAc,MAAM,qBAAqB,CAAC;AAC1F,OAAO,EACiB,IAAI,EAAE,QAAQ,EACU,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,cAAc,EAA4B,WAAW,EAAE,qBAAqB,GAC7J,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC3E,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,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AACjC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,KAAK,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EACL,SAAS,EACT,WAAW,EACX,gBAAgB,EAChB,cAAc,EACd,WAAW,EAAE,eAAe,EAAmB,iBAAiB,EAAE,OAAO,EAAE,cAAc,EAAqB,eAAe,EAAE,OAAO,GACvI,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGnE,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;AAEzB,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,QAAqB,EAAE,MAAmB;IACxF,+BAA+B;IAC/B,MAAM,CAAC,EAAE,OAAO,CAAC,GAAG,MAAM,eAAe,CAAC,6CAA6C,CAAC,QAAQ,EAAE,eAAe,CAAC,kBAAkB,CAAC,QAAQ,EAAE,kBAAkB,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAElL,oCAAoC;IACpC,MAAM,UAAU,GAAoB,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAkB,MAAM,CAAC,YAAY,CAAC,CAAC;IACnG,MAAM,eAAe,GAAG,eAAe,CAAC,4BAA4B,CAAC,UAAU,EAAE,yBAAyB,CAAC,CAAC;IAC5G,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC;IAC9F,MAAM,iBAAiB,GAAG,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7E,QAAQ,CAAC,oBAAoB,CAAC,IAAI,qBAAqB,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;IAC9E,uKAAuK;IAEvK,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC;AACxC,CAAC;AAED,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,IAAI,kBAA+B,CAAC;IACpC,IAAI,gBAA6B,CAAC;IAClC,IAAI,OAAmB,CAAC;IAExB,MAAM,CAAC,GAAG,EAAE;QACV,OAAO,CAAC,OAAO,CAAC,iBAAiB,EAAE,kBAAkB,CAAC,SAAS,CAAC,CAAC;QACjE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAC5B,CAAC,CAAC,CAAC;IACH,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IAEhC,EAAE,CAAC,0BAA0B,EAAE,KAAK,IAAI,EAAE;QACxC,MAAM,WAAW,GAAG;YAClB,UAAU,EAAE,eAAe;YAC3B,OAAO;SACR,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;QAC5D,MAAM,cAAc,GAAG,MAAM,gBAAgB,CAAC,iBAAiB,CAAC,EAAE,WAAW,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QAElH,MAAM,OAAO,GAAG,KAAK,EAAE,IAAuB,EAAE,EAAE;YAChD,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;YAChC,IAAI,QAAQ,GAAG,KAAK,CAAC;YACrB,IAAI,CAAC;gBACH,MAAM,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAE/B,CAAC;YAAC,OAAO,CAAM,EAAE,CAAC;gBAChB,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,EAAE,QAAQ,CAAC,cAAc,EAAE,2BAA2B,CAAC,CAAC;gBACxF,QAAQ,GAAG,IAAI,CAAC;YAClB,CAAC;YACD,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACxB,OAAO,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;QACnC,CAAC,CAAC;QACF,MAAM,OAAO,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;QAExC,MAAM,EAAE,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC;QACzE,EAAE,CAAC,WAAW,EAAE,CAAC;QACjB,oDAAoD;QACpD,EAAE,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;QAE7D,MAAM,CAAC,QAAQ,CAAC,MAAM,OAAO,CAAC,EAAE,QAAQ,EAAE,cAAc,CAAC,QAAQ,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,4CAA4C,CAAC,CAAC;QACzJ,MAAM,CAAC,SAAS,CAAC,MAAM,OAAO,CAAC,EAAE,QAAQ,EAAE,cAAc,CAAC,QAAQ,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,wDAAwD,CAAC,CAAC;QACtK,MAAM,CAAC,SAAS,CAAC,MAAM,OAAO,CAAC,EAAE,QAAQ,EAAE,cAAc,CAAC,QAAQ,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,wDAAwD,CAAC,CAAC;QACtK,MAAM,CAAC,SAAS,CAAC,MAAM,OAAO,CAAC,EAAE,QAAQ,EAAE,cAAc,CAAC,QAAQ,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,wDAAwD,CAAC,CAAC;QAEtK,EAAE,CAAC,cAAc,EAAE,CAAC;QACpB,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iBAAiB,EAAE,KAAK,IAAI,EAAE;QAC/B,MAAM,WAAW,GAAG;YAClB,UAAU,EAAE,eAAe;YAC3B,OAAO;SACR,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;QAC5D,MAAM,cAAc,GAAG,MAAM,gBAAgB,CAAC,iBAAiB,CAAC,EAAE,WAAW,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QAElH,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,MAAM,SAAS,GAAG;YAChB,QAAQ,EAAE,GAAG,EAAE,GAAG,CAAC;YACnB,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO;SACvB,CAAC;QACF,MAAM,SAAS,GAAQ,CAAC,SAAsB,EAAE,KAAsB,EAAE,EAAc,EAAE,EAAE;YACxF,SAAS,CAAC,QAAQ,GAAG,EAAE,CAAC;YACxB,OAAO,SAAS,CAAC;QACnB,CAAC,CAAC;QACF,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAErE,MAAM,EAAE,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC;QACzE,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;QAChE,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,cAAc,CAAC,QAAQ,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC;QAElG,MAAM,KAAK,GAAG,eAAe,CAAC,kBAAkB,CAAC,EAAE,EAAE,mBAAmB,CAAC,CAAC;QAC1E,MAAM,eAAe,CAAC,6CAA6C,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QACrF,EAAE,CAAC,WAAW,EAAE,CAAC;QAEjB,8GAA8G;QAC9G,0DAA0D;QAC1D,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;QAErF,2BAA2B;QAC3B,SAAS,CAAC,QAAQ,EAAE,CAAC;QAErB,4HAA4H;QAC5H,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;QAEjF,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAEzB,EAAE,CAAC,KAAK,EAAE,CAAC;QACX,gGAAgG;QAChG,wFAAwF;QACxF,mDAAmD;QACnD,eAAe,CAAC,OAAO,EAAE,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,SAAS,qBAAqB,CAAC,CAAuB,EAAE,CAAuB;QAC7E,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC5B,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IAED,EAAE,CAAC,wBAAwB,EAAE,KAAK,IAAI,EAAE;QACtC,MAAM,gBAAgB,GAAG,MAAM,WAAW,CAAC,cAAc,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;QACrF,MAAM,WAAW,GAAG;YAClB,UAAU,EAAE,eAAe;YAC3B,OAAO;SACR,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;QAC5D,MAAM,cAAc,GAAG,MAAM,gBAAgB,CAAC,iBAAiB,CAAC,EAAE,WAAW,EAAE,gBAAgB,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QAEtH,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,MAAM,SAAS,GAAG;YAChB,QAAQ,EAAE,GAAG,EAAE,GAAG,CAAC;YACnB,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO;SACvB,CAAC;QACF,MAAM,SAAS,GAAQ,CAAC,SAAsB,EAAE,KAAsB,EAAE,EAAc,EAAE,EAAE;YACxF,SAAS,CAAC,QAAQ,GAAG,EAAE,CAAC;YACxB,OAAO,SAAS,CAAC;QACnB,CAAC,CAAC;QACF,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAErE,MAAM,EAAE,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC;QACzE,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;QAChE,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,cAAc,CAAC,QAAQ,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC;QAElG,MAAM,KAAK,GAAG,eAAe,CAAC,kBAAkB,CAAC,EAAE,EAAE,mBAAmB,CAAC,CAAC;QAC1E,MAAM,eAAe,CAAC,6CAA6C,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QACrF,EAAE,CAAC,WAAW,EAAE,CAAC;QAEjB,8GAA8G;QAC9G,0DAA0D;QAC1D,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;QAErF,2BAA2B;QAC3B,SAAS,CAAC,QAAQ,EAAE,CAAC;QAErB,4HAA4H;QAC5H,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;QAEjF,8BAA8B;QAE9B,MAAM,gBAAgB,GAAG,EAAE,CAAC,SAAS,CAAC;QACtC,IAAI,WAAW,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YACzC,qBAAqB,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;YAChD,WAAW,GAAG,IAAI,CAAC;QACrB,CAAC,CAAC,CAAC;QAEH,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;QAC7E,MAAM,iBAAiB,GAAG,EAAE,CAAC,SAAS,CAAC;QACvC,MAAM,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC;QAC5B,MAAM,CAAC,gBAAgB,KAAK,iBAAiB,EAAE,0BAA0B,CAAC,CAAC;QAE3E,2BAA2B;QAC3B,SAAS,CAAC,QAAQ,EAAE,CAAC;QAErB,qBAAqB,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;QACzD,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,eAAe,EAAE,EAAE,uBAAuB,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;QAC1G,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAE/B,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAEzB,EAAE,CAAC,KAAK,EAAE,CAAC;QACX,gGAAgG;QAChG,wFAAwF;QACxF,mDAAmD;QACnD,eAAe,CAAC,OAAO,EAAE,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wBAAwB,EAAE,KAAK,IAAI,EAAE;QACtC,MAAM,gBAAgB,GAAG,MAAM,WAAW,CAAC,cAAc,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;QAErF,MAAM,QAAQ,GAAG,eAAe,CAAC,gBAAgB,CAAC,2BAA2B,CAAC,CAAC;QAC/E,MAAM,OAAO,GAAG,mBAAmB,CAAC;QACpC,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,UAAU,CAAC,kBAAkB,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QAEpG,2DAA2D;QAC3D,MAAM,IAAI,GAA6B,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;QAC7D,MAAM,SAAS,GAAG,MAAM,gBAAgB,CAAC,iBAAiB,CAAC,EAAE,WAAW,EAAE,gBAAgB,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;QACvG,MAAM,cAAc,GAAG,MAAM,gBAAgB,CAAC,iBAAiB,CAAC,EAAE,WAAW,EAAE,gBAAgB,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;QAE5G,8CAA8C;QAC9C,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;QACrE,GAAG,CAAC,QAAQ,CAAC,iBAAiB,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;QACjE,MAAM,KAAK,GAAG,eAAe,CAAC,kBAAkB,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC;QAC3E,MAAM,eAAe,CAAC,6CAA6C,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QACtF,MAAM,gBAAgB,GAAG,GAAG,CAAC,SAAS,CAAC;QACvC,GAAG,CAAC,WAAW,EAAE,CAAC;QAClB,MAAM,GAAG,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;QAC9E,MAAM,iBAAiB,GAAG,GAAG,CAAC,SAAS,CAAC;QACxC,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;QAC3B,MAAM,CAAC,gBAAgB,KAAK,iBAAiB,EAAE,0BAA0B,CAAC,CAAC;QAE3E,GAAG,CAAC,KAAK,EAAE,CAAC;QAEZ,+BAA+B;QAC/B,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,MAAM,SAAS,GAAG;YAChB,QAAQ,EAAE,GAAG,EAAE,GAAG,CAAC;YACnB,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO;SACvB,CAAC;QACF,MAAM,SAAS,GAAQ,CAAC,SAAsB,EAAE,KAAsB,EAAE,EAAc,EAAE,EAAE;YACxF,SAAS,CAAC,QAAQ,GAAG,EAAE,CAAC;YACxB,OAAO,SAAS,CAAC;QACnB,CAAC,CAAC;QACF,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAErE,MAAM,EAAE,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC;QACzE,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;QAChE,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,cAAc,CAAC,QAAQ,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC;QAElG,MAAM,gBAAgB,GAAG,EAAE,CAAC,SAAS,CAAC;QACtC,IAAI,WAAW,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YACzC,qBAAqB,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;YAChD,WAAW,GAAG,IAAI,CAAC;QACrB,CAAC,CAAC,CAAC;QAEH,MAAM,EAAE,CAAC,WAAW,EAAE,CAAC;QAEvB,MAAM,iBAAiB,GAAG,EAAE,CAAC,SAAS,CAAC;QACvC,MAAM,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC;QAC5B,MAAM,CAAC,gBAAgB,KAAK,iBAAiB,EAAE,0BAA0B,CAAC,CAAC;QAE3E,2BAA2B;QAC3B,SAAS,CAAC,QAAQ,EAAE,CAAC;QAErB,qBAAqB,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;QACzD,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,eAAe,EAAE,EAAE,uBAAuB,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;QAC1G,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAE/B,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAEzB,EAAE,CAAC,KAAK,EAAE,CAAC;QACX,gGAAgG;QAChG,wFAAwF;QACxF,mDAAmD;QACnD,eAAe,CAAC,OAAO,EAAE,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yBAAyB,EAAE,KAAK,IAAI,EAAE;QACvC,MAAM,gBAAgB,GAAG,MAAM,WAAW,CAAC,cAAc,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;QACrF,+EAA+E;QAC/E,MAAM,UAAU,GAAG,uBAAuB,CAAC;QAE3C,4DAA4D;QAC5D,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,eAAe,CAAC,EAAE,WAAW,EAAE,gBAAgB,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC,CAAC;QACrI,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAC9B,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,wBAAwB,CAAC,EAAE,WAAW,EAAE,gBAAgB,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC;QAC9H,QAAQ,CAAC,QAAQ,CAAC,iBAAiB,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;QAEtE,2CAA2C;QAC3C,MAAM,KAAK,GAAG,eAAe,CAAC,kBAAkB,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;QAChF,MAAM,eAAe,CAAC,6CAA6C,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QAC3F,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,iCAAiC;QAEnG,sCAAsC;QACtC,QAAQ,CAAC,WAAW,CAAC,2BAA2B,CAAC,CAAC;QAElD,yBAAyB;QACzB,QAAQ,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAEjC,IAAI,CAAC;YACH,uEAAuE;YACvE,MAAM,WAAW,GAAG,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,iCAAiC;YAC1F,MAAM,CAAC,MAAM,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,6BAA6B;YACvE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,sBAAsB;QACvC,CAAC;QAAC,MAAM,CAAC;YACP,wBAAwB;QAC1B,CAAC;QAED,uCAAuC;QACvC,MAAM,KAAK,GAAG,eAAe,CAAC,kBAAkB,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;QAChF,MAAM,eAAe,CAAC,6CAA6C,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QAC3F,QAAQ,CAAC,WAAW,CAAC,0BAA0B,CAAC,CAAC;QAEjD,0DAA0D;QAC1D,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,iCAAiC;QAEnG,8BAA8B;QAC9B,MAAM,gBAAgB,GAAG,QAAQ,CAAC,SAAS,CAAC;QAC5C,MAAM,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;QACnF,MAAM,iBAAiB,GAAG,QAAQ,CAAC,SAAS,CAAC;QAC7C,MAAM,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC;QAC5B,MAAM,CAAC,gBAAgB,KAAK,iBAAiB,CAAC,CAAC;QAE/C,QAAQ,CAAC,KAAK,EAAE,CAAC;IACnB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;QAC1E;;;;WAIG;QAEH,0EAA0E;QAC1E,MAAM,QAAQ,GAAG,eAAe,CAAC,gBAAgB,CAAC,2BAA2B,CAAC,CAAC;QAC/E,MAAM,OAAO,GAAG,mBAAmB,CAAC;QACpC,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,UAAU,CAAC,kBAAkB,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QAEpG,2DAA2D;QAC3D,MAAM,IAAI,GAA6B,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;QAC7D,MAAM,qBAAqB,GAAG,MAAM,gBAAgB,CAAC,iBAAiB,CAAC,EAAE,WAAW,EAAE,kBAAkB,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;QACrH,MAAM,mBAAmB,GAAG,MAAM,gBAAgB,CAAC,iBAAiB,CAAC,EAAE,WAAW,EAAE,gBAAgB,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;QAEjH,2CAA2C;QAE3C,qEAAqE;QACrE,IAAI,MAAM,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,qBAAqB,CAAC,QAAQ,EAAE,CAAC,CAAC;QAClF,MAAM,aAAa,GAAG,MAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;QAC3D,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,aAAc,EAAE,SAAS,CAAC,CAAC,CAAC;QAC3D,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QACnD,MAAM,CAAC,KAAK,EAAE,CAAC;QAEf,0EAA0E;QAC1E,IAAI,WAAW,GAAG,WAAW,CAAC,eAAe,CAAC,qBAAqB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACpF,MAAM,CAAC,WAAW,CAAC,WAAW,EAAE,WAAW,CAAC,kBAAkB,CAAC,CAAC;QAEhE,sBAAsB;QACtB,MAAM,WAAW,CAAC,cAAc,CAAC,qBAAqB,CAAC,CAAC;QAExD,+BAA+B;QAC/B,MAAM,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,qBAAqB,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC9E,MAAM,YAAY,GAAG,MAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;QAC1D,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,YAAa,EAAE,WAAW,CAAC,CAAC,CAAC;QAC5D,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QACnD,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QACvC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,iBAAiB,EAAE,CAAC,CAAC;QACtD,MAAM,CAAC,KAAK,EAAE,CAAC;QAEf,qDAAqD;QAErD,0EAA0E;QAC1E,WAAW,GAAG,WAAW,CAAC,eAAe,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC9E,MAAM,CAAC,WAAW,CAAC,WAAW,EAAE,WAAW,CAAC,kBAAkB,CAAC,CAAC;QAEhE,iDAAiD;QACjD,MAAM,WAAW,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,mBAAmB,CAAC,QAAQ,EAAE,CAAC,CAAC;QACtF,mBAAmB,CAAC,SAAiB,GAAG,MAAM,WAAW,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAAC,CAAC;QAC1G,MAAM,YAAY,GAAG,WAAW,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;QAC/D,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,YAAa,EAAE,WAAW,CAAC,CAAC,CAAC;QAC5D,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,gCAAgC;QAC5F,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,gCAAgC;QACzF,WAAW,CAAC,KAAK,EAAE,CAAC;QAEpB,+CAA+C;QAC/C,WAAW,GAAG,WAAW,CAAC,eAAe,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC9E,MAAM,CAAC,WAAW,CAAC,WAAW,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;QAEtD,+CAA+C;QAC/C,MAAM,WAAW,CAAC,cAAc,CAAC,mBAAmB,CAAC,CAAC;QACtD,MAAM,OAAO,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,kBAAkB,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;IACrF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QAC3D,MAAM,UAAU,GAAG,qBAAqB,CAAC;QACzC,MAAM,UAAU,GAAG,gBAAgB,CAAC;QACpC,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,eAAe,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,CAAC;QAC/H,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAC9B,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,wBAAwB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,CAAC;QACxH,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;QACxF,MAAM,MAAM,GAAG;;;;;;;gBAOH,CAAC;QACb,MAAM,QAAQ,CAAC,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QAC7C,QAAQ,CAAC,QAAQ,CAAC,iBAAiB,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;QACtE,QAAQ,CAAC,WAAW,CAAC,0BAA0B,CAAC,CAAC;QACjD,IAAI,IAAI,IAAI,cAAc,EAAE,CAAC;YAC3B,8BAA8B;YAC9B,MAAM,kBAAkB,GAAG,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YACjD,MAAM,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,uBAAuB,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,CAAC;YAC9F,MAAM,mBAAmB,GAAG,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAClD,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC;YAC9B,MAAM,CAAC,kBAAkB,KAAK,mBAAmB,CAAC,CAAC;YACnD,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,eAAe,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAAC,CAAC;YAC1G,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACrC,CAAC;QACD,MAAM,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;QACnE,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACrC,SAAS,CAAC,KAAK,GAAG,cAAc,CAAC;QACjC,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,MAAM,CAAC,EAAE,cAAc,CAAC,GAAG,eAAe,CAAC,uCAAuC,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;QAC9G,IAAI,iBAAiB,GAAG,eAAe,CAAC,qBAAqB,CAAC,QAAQ,EAAE,MAAM,CAAC,YAAY,EAAE,mBAAmB,CAAC,CAAC;QAClH,IAAI,SAAS,KAAK,iBAAiB;YACjC,iBAAiB,GAAG,eAAe,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,YAAY,EAAE,mBAAmB,EAAE,IAAI,qBAAqB,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;QAErL,MAAM,cAAc,GAAG,CAAC,MAAmB,EAAE,YAAoB,eAAe,EAAE,eAAuB,EAAE,EAAE,QAA+B,EAAE,EAAE;YAC9I,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,EAAE,EAAE,CAAC,EAAE,CAAC;gBACtC,MAAM,SAAS,GAAY;oBACzB,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;oBACvC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;oBACvC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;iBAC3C,CAAC;gBACF,MAAM,cAAc,GAAwB,EAAE,CAAC;gBAC/C,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;oBAC7B,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;oBACrD,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC/B,CAAC;gBACD,MAAM,IAAI,GAAG,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;gBACjC,eAAe;gBACf,MAAM,WAAW,GAAG;oBAClB,aAAa,EAAE,cAAc,SAAS,EAAE;oBACxC,KAAK,EAAE,cAAc;oBACrB,QAAQ,EAAE,iBAAiB;oBAC3B,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE;oBACxB,IAAI,EAAE,cAAc;oBACpB,GAAG,IAAI;iBACR,CAAC;gBACF,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;gBACtD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,eAAe,CAAC,CAAC;YACvD,CAAC;QACH,CAAC,CAAC;QACF,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACtC,cAAc,CAAC,QAAQ,EAAE,eAAe,EAAE,IAAI,EAAE,GAAG,EAAE;YACnD,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC;QACpB,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC;QAE9D,QAAQ,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;QACrC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC;QACxD,MAAM,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,kBAAkB,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,CAAC;QACzF,QAAQ,CAAC,KAAK,EAAE,CAAC;IACnB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gIAAgI,EAAE,KAAK,IAAI,EAAE;QAC9I,MAAM,WAAW,GAAG;YAClB,UAAU,EAAE,iBAAiB;YAC7B,OAAO;SACR,CAAC;QACF,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;QAC5D,MAAM,cAAc,GAAG,MAAM,gBAAgB,CAAC,iBAAiB,CAAC,EAAE,WAAW,EAAE,iBAAiB,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QACvH,MAAM,uBAAuB,GAAG,WAAW,CAAC,eAAe,CAAC;QAC5D,yCAAyC;QACzC,WAAW,CAAC,eAAe,GAAG,KAAK,IAAI,EAAE;YACvC,MAAM,IAAI,WAAW,CAAC,KAAK,CAAC,aAAa,EAAE,OAAO,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;QAC/D,CAAC,CAAC;QACF,MAAM,WAAW,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC;QAClF,WAAW,CAAC,QAAQ,CAAC,iBAAiB,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;QACzE,IAAI,mBAAmB,GAAG,EAAE,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;QAC/D,4DAA4D;QAC5D,WAAW,CAAC,qBAAqB,CAAC,4CAA4C,EAAE,CAAC,IAAoB,EAAE,EAAE;YACvG,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,QAAQ,CAAC,aAAa,EAAE,CAAC;gBAC3C,mBAAmB,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YACtC,CAAC;QACH,CAAC,CAAC,CAAC;QACH,qFAAqF;QACrF,kCAAkC;QAClC,MAAM,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,SAAS,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;QACtJ,6HAA6H;QAC7H,+BAA+B;QAC/B,IAAI,QAAQ,GAAG,EAAE,EAAE,EAAE,mBAAmB,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,mBAAmB,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QACjK,MAAM,WAAW,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,mBAAmB,CAAC,EAAE,EAAE,CAAC,CAAC;QAC5E,MAAM,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACvF,sIAAsI;QACtI,kCAAkC;QAClC,QAAQ,GAAG,EAAE,EAAE,EAAE,mBAAmB,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,aAAa,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QAChH,MAAM,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;QAC1E,WAAW,CAAC,KAAK,EAAE,CAAC;QACpB,+LAA+L;QAC/L,WAAW,CAAC,eAAe,GAAG,KAAK,IAAI,EAAE;YACvC,MAAM,IAAI,WAAW,CAAC,KAAK,CAAC,aAAa,EAAE,OAAO,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;QAC/D,CAAC,CAAC;QACF,MAAM,YAAY,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC;QACnF,YAAY,CAAC,QAAQ,CAAC,iBAAiB,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;QAC1E,MAAM,YAAY,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,mBAAmB,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7E,iDAAiD;QACjD,MAAM,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;QAC3E,QAAQ,GAAG,EAAE,EAAE,EAAE,mBAAmB,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,mBAAmB,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QAC7J,6HAA6H;QAC7H,kCAAkC;QAClC,MAAM,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;QAC3E,WAAW;QACX,WAAW,CAAC,eAAe,GAAG,uBAAuB,CAAC;QACtD,YAAY,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,KAAK,IAAI,EAAE;QAC7C,MAAM,UAAU,GAAG,MAAM,WAAW,CAAC,cAAc,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;QAC/E,MAAM,SAAS,GAAG,MAAM,WAAW,CAAC,cAAc,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QACvE,yFAAyF;QACzF,MAAM,UAAU,GAAG,eAAe,CAAC;QAEnC,4DAA4D;QAC5D,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,eAAe,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC,CAAC;QACtG,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAC9B,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,wBAAwB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,CAAC;QAExH,MAAM,SAAS,GAAG,MAAM,WAAW,CAAC,wBAAwB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,CAAC;QAExH,yBAAyB;QACzB,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;QACxF,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;QAEzF,MAAM,MAAM,GAAG;;;;;;;gBAOH,CAAC;QACb,MAAM,QAAQ,CAAC,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QAC7C,QAAQ,CAAC,QAAQ,CAAC,iBAAiB,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;QACtE,SAAS,CAAC,QAAQ,CAAC,iBAAiB,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;QAEvE,QAAQ,CAAC,WAAW,CAAC,0BAA0B,CAAC,CAAC;QACjD,IAAI,IAAI,IAAI,cAAc,EAAE,CAAC;YAC3B,8BAA8B;YAC9B,MAAM,kBAAkB,GAAG,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YACjD,MAAM,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,kBAAkB,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,CAAC;YACzF,MAAM,mBAAmB,GAAG,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAClD,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC;YAC9B,MAAM,CAAC,kBAAkB,KAAK,mBAAmB,CAAC,CAAC;YACnD,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,eAAe,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAAC,CAAC;YAC1G,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACrC,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACrC,SAAS,CAAC,KAAK,GAAG,cAAc,CAAC;QACjC,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,MAAM,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;QACnE,MAAM,CAAC,EAAE,cAAc,CAAC,GAAG,eAAe,CAAC,uCAAuC,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;QAC9G,IAAI,iBAAiB,GAAG,eAAe,CAAC,qBAAqB,CAAC,QAAQ,EAAE,MAAM,CAAC,YAAY,EAAE,mBAAmB,CAAC,CAAC;QAClH,IAAI,SAAS,KAAK,iBAAiB;YACjC,iBAAiB,GAAG,eAAe,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,YAAY,EAAE,mBAAmB,EAAE,IAAI,qBAAqB,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;QAErL,MAAM,cAAc,GAAG,CAAC,MAAmB,EAAE,YAAoB,eAAe,EAAE,eAAuB,EAAE,EAAE,QAA+B,EAAE,EAAE;YAC9I,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,EAAE,EAAE,CAAC,EAAE,CAAC;gBACtC,MAAM,SAAS,GAAY;oBACzB,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;oBACvC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;oBACvC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;iBAC3C,CAAC;gBACF,MAAM,cAAc,GAAwB,EAAE,CAAC;gBAC/C,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;oBAC7B,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;oBACrD,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC/B,CAAC;gBACD,MAAM,IAAI,GAAG,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;gBACjC,eAAe;gBACf,MAAM,WAAW,GAAG;oBAClB,aAAa,EAAE,cAAc,SAAS,EAAE;oBACxC,KAAK,EAAE,cAAc;oBACrB,QAAQ,EAAE,iBAAiB;oBAC3B,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE;oBACxB,IAAI,EAAE,cAAc;oBACpB,GAAG,IAAI;iBACR,CAAC;gBACF,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;gBACtD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,eAAe,CAAC,CAAC;YACvD,CAAC;QACH,CAAC,CAAC;QAEF,cAAc,CAAC,QAAQ,EAAE,eAAe,EAAE,EAAE,EAAE,CAAC,CAAS,EAAE,EAAE;YAC1D,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;QACzB,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC;QAC3D,QAAQ,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;QAE/C,IAAI,IAAI,IAAI,cAAc,EAAE,CAAC;YAC3B,8BAA8B;YAC9B,MAAM,kBAAkB,GAAG,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YACjD,MAAM,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,+BAA+B,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,CAAC;YACtG,MAAM,mBAAmB,GAAG,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAClD,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC;YAC9B,MAAM,CAAC,kBAAkB,KAAK,mBAAmB,CAAC,CAAC;YACnD,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,eAAe,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAAC,CAAC;YAC1G,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACrC,CAAC;QACD,IAAI,IAAI,GAAU,EAAE,CAAC;QACrB,4DAA4D;QAC5D,QAAQ,CAAC,qBAAqB,CAAC,wCAAwC,EAAE,CAAC,IAAoB,EAAE,EAAE;YAChG,OAAO,IAAI,CAAC,IAAI,EAAE,KAAK,QAAQ,CAAC,aAAa,EAAE,CAAC;gBAC9C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YAC3B,CAAC;QACH,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC9B,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC/D,IAAI,GAAG,EAAE,CAAC;QACV,IAAI,KAAK,EAAE,MAAM,QAAQ,IAAI,QAAQ,CAAC,iBAAiB,CAAC,wCAAwC,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,cAAc,CAAC,kBAAkB,EAAE,CAAC,EAAE,CAAC;YAC/J,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;QAC9B,CAAC;QACD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC9B,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC/D,IAAI,IAAI,IAAI,iBAAiB,EAAE,CAAC;YAC9B,yBAAyB;YACzB,MAAM,SAAS,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,CAAC;YACxD,IAAI,GAAG,EAAE,CAAC;YACZ,4DAA4D;YAC1D,SAAS,CAAC,qBAAqB,CAAC,wCAAwC,EAAE,CAAC,IAAoB,EAAE,EAAE;gBACjG,OAAO,IAAI,CAAC,IAAI,EAAE,KAAK,QAAQ,CAAC,aAAa,EAAE,CAAC;oBAC9C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC3B,CAAC;YACH,CAAC,CAAC,CAAC;YACH,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAC9B,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAC/D,IAAI,GAAG,EAAE,CAAC;YACV,IAAI,KAAK,EAAE,MAAM,QAAQ,IAAI,SAAS,CAAC,iBAAiB,CAAC,wCAAwC,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,cAAc,CAAC,kBAAkB,EAAE,CAAC,EAAE,CAAC;gBAChK,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;YAC9B,CAAC;YACD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAC9B,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAC/D,6CAA6C;YAC7C,MAAM,SAAS,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC;YAC/D,cAAc,CAAC,SAAS,EAAE,eAAe,EAAE,EAAE,EAAE,CAAC,CAAS,EAAE,EAAE;gBAC3D,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;YACzB,CAAC,CAAC,CAAC;YACH,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC;YACxD,SAAS,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;YAEhD,IAAI,IAAI,IAAI,cAAc,EAAE,CAAC;gBAC3B,8BAA8B;gBAC9B,MAAM,kBAAkB,GAAG,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC;gBAClD,MAAM,SAAS,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,+BAA+B,EAAE,CAAC,CAAC;gBACtG,MAAM,mBAAmB,GAAG,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC;gBACnD,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC;gBAC9B,MAAM,CAAC,kBAAkB,KAAK,mBAAmB,CAAC,CAAC;gBACnD,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,eAAe,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,CAAC;gBACnG,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YACrC,CAAC;QACH,CAAC;QACD,MAAM,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,CAAC;QACxD,sFAAsF;QACtF,MAAM,QAAQ,GAAG;;;;;;;;;;;;;gBAaL,CAAC;QACb,MAAM,QAAQ,CAAC,mBAAmB,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC/C,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC;QACxD,QAAQ,CAAC,WAAW,CAAC,2BAA2B,CAAC,CAAC;QAClD,IAAI,IAAI,IAAI,cAAc,EAAE,CAAC;YAC3B,8BAA8B;YAC9B,MAAM,kBAAkB,GAAG,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YACjD,MAAM,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,kBAAkB,EAAE,CAAC,CAAC;YACzF,MAAM,mBAAmB,GAAG,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAClD,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC;YAC9B,MAAM,CAAC,kBAAkB,KAAK,mBAAmB,CAAC,CAAC;YACnD,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,eAAe,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAAC,CAAC;YAC1G,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACrC,CAAC;QACD,6CAA6C;QAC7C,MAAM,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC;QAC9D,cAAc,CAAC,QAAQ,EAAE,eAAe,EAAE,EAAE,EAAE,CAAC,CAAS,EAAE,EAAE;YAC1D,OAAO;gBACL,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE;aACzB,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,6CAA6C;QAC7C,cAAc,CAAC,QAAQ,EAAE,kBAAkB,EAAE,EAAE,EAAE,CAAC,CAAS,EAAE,EAAE;YAC7D,OAAO;gBACL,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE;aACzB,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC;QAC3D,QAAQ,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;QAE/C,IAAI,IAAI,IAAI,cAAc,EAAE,CAAC;YAC3B,8BAA8B;YAC9B,MAAM,kBAAkB,GAAG,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YACjD,MAAM,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,+BAA+B,EAAE,CAAC,CAAC;YACtG,MAAM,mBAAmB,GAAG,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAClD,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC;YAC9B,MAAM,CAAC,kBAAkB,KAAK,mBAAmB,CAAC,CAAC;YACnD,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,eAAe,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAAC,CAAC;YAC1G,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACrC,CAAC;QACD,IAAI,GAAG,EAAE,CAAC;QACV,4DAA4D;QAC5D,QAAQ,CAAC,qBAAqB,CAAC,wCAAwC,EAAE,CAAC,IAAoB,EAAE,EAAE;YAChG,OAAO,IAAI,CAAC,IAAI,EAAE,KAAK,QAAQ,CAAC,aAAa,EAAE,CAAC;gBAC9C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YAC3B,CAAC;QACH,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC9B,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC/D,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC/D,IAAI,GAAG,EAAE,CAAC;QACV,IAAI,KAAK,EAAE,MAAM,QAAQ,IAAI,QAAQ,CAAC,iBAAiB,CAAC,wCAAwC,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,cAAc,CAAC,kBAAkB,EAAE,CAAC,EAAE,CAAC;YAC/J,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;QAC9B,CAAC;QACD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC9B,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC/D,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAE/D,IAAI,GAAG,EAAE,CAAC;QACV,4DAA4D;QAC5D,QAAQ,CAAC,qBAAqB,CAAC,2CAA2C,EAAE,CAAC,IAAoB,EAAE,EAAE;YACnG,OAAO,IAAI,CAAC,IAAI,EAAE,KAAK,QAAQ,CAAC,aAAa,EAAE,CAAC;gBAC9C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YAC3B,CAAC;QACH,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC9B,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC/D,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC/D,IAAI,GAAG,EAAE,CAAC;QACV,IAAI,KAAK,EAAE,MAAM,QAAQ,IAAI,QAAQ,CAAC,iBAAiB,CAAC,2CAA2C,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,cAAc,CAAC,kBAAkB,EAAE,CAAC,EAAE,CAAC;YAClK,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;QAC9B,CAAC;QACD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC9B,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC/D,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAE/D,IAAI,IAAI,IAAI,iBAAiB,EAAE,CAAC;YAC9B,yBAAyB;YACzB,MAAM,SAAS,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,CAAC;YACxD,IAAI,GAAG,EAAE,CAAC;YACV,+GAA+G;YAC/G,4DAA4D;YAC5D,SAAS,CAAC,qBAAqB,CAAC,wCAAwC,EAAE,CAAC,IAAoB,EAAE,EAAE;gBACjG,OAAO,IAAI,CAAC,IAAI,EAAE,KAAK,QAAQ,CAAC,aAAa,EAAE,CAAC;oBAC9C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC3B,CAAC;YACH,CAAC,CAAC,CAAC;YACH,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAC9B,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAC/D,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAC/D,IAAI,GAAG,EAAE,CAAC;YACV,yGAAyG;YACzG,IAAI,KAAK,EAAE,MAAM,QAAQ,IAAI,SAAS,CAAC,iBAAiB,CAAC,wCAAwC,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,cAAc,CAAC,kBAAkB,EAAE,CAAC,EAAE,CAAC;gBAChK,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;YAC9B,CAAC;YACD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAC9B,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAC/D,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAC/D,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACvB,MAAM,EAAE,GAAQ,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAC3D,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;gBACrB,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC;oBACV,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC5B,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC3B,CAAC;gBACD,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC;oBACV,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC5B,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC3B,CAAC;YACH,CAAC;YACD,IAAI,GAAG,EAAE,CAAC;YACV,4DAA4D;YAC5D,SAAS,CAAC,qBAAqB,CAAC,2CAA2C,EAAE,CAAC,IAAoB,EAAE,EAAE;gBACpG,OAAO,IAAI,CAAC,IAAI,EAAE,KAAK,QAAQ,CAAC,aAAa,EAAE,CAAC;oBAC9C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC3B,CAAC;YACH,CAAC,CAAC,CAAC;YACH,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAC9B,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAC/D,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAC/D,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACvB,MAAM,EAAE,GAAQ,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAC3D,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;gBACrB,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC;oBACV,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC5B,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC3B,CAAC;gBACD,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC;oBACV,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC5B,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC3B,CAAC;YACH,CAAC;YACD,IAAI,GAAG,EAAE,CAAC;YACV,IAAI,KAAK,EAAE,MAAM,QAAQ,IAAI,SAAS,CAAC,iBAAiB,CAAC,2CAA2C,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,cAAc,CAAC,kBAAkB,EAAE,CAAC,EAAE,CAAC;gBACnK,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;YAC9B,CAAC;YACD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAC9B,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAC/D,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAC/D,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACvB,MAAM,EAAE,GAAQ,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAC3D,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;gBACrB,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC;oBACV,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC5B,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC3B,CAAC;gBACD,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC;oBACV,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC5B,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC3B,CAAC;YACH,CAAC;QACH,CAAC;QACD,QAAQ,CAAC,KAAK,EAAE,CAAC;QACjB,SAAS,CAAC,KAAK,EAAE,CAAC;IACpB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yFAAyF,EAAE,KAAK,IAAI,EAAE;QACvG,MAAM,WAAW,GAAG,MAAM,WAAW,CAAC,cAAc,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAC3E,MAAM,QAAQ,GAAG,eAAe,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC;QACnE,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,eAAe,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,QAAQ,EAAE,CAAC,CAAC;QACxG,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,wBAAwB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QACjF,MAAM,8BAA8B,GAAG,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3D,MAAM,OAAO,GAAG,MAAM,CAAC,cAAc,CAAC;QACtC,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;QACnC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC;QACxB,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC;QACxB,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC;QACzB,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC;QACzB,MAAM,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC;QACxC,MAAM,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;QAC7C,MAAM,MAAM,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,wBAAwB,EAAE,CAAC,CAAC;QACpE,MAAM,WAAW,CAAC,yBAAyB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QACjE,MAAM,yBAAyB,GAAG,MAAM,WAAW,CAAC,wBAAwB,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,CAAC,aAAa,CAAC,8BAA8B,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC7L,MAAM,iBAAiB,GAAG,yBAAyB,CAAC,cAAc,CAAC;QACnE,iCAAiC;QACjC,MAAM,oBAAoB,GAAG,yBAAyB,CAAC,uBAAuB,CAAC,EAAC,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAC,CAAC,CAAC;QACvH,MAAM,+BAA+B,GAAG,yBAAyB,CAAC,YAAY,CAAC;QAC/E,MAAM,yBAAyB,CAAC,WAAW,EAAE,CAAC,CAAC,4BAA4B;QAC3E,MAAM,gBAAgB,GAAG,yBAAyB,CAAC,cAAc,CAAC;QAClE,MAAM,mBAAmB,GAAG,yBAAyB,CAAC,uBAAuB,CAAC,EAAC,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAC,CAAC,CAAC;QACtH,MAAM,8BAA8B,GAAG,yBAAyB,CAAC,YAAY,CAAC;QAE9E,MAAM,CAAC,+BAA+B,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QAC5D,MAAM,CAAC,8BAA8B,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QAC3D,MAAM,CAAC,+BAA+B,EAAE,aAAa,CAAC,8BAA+B,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QACpG,MAAM,CAAC,mBAAmB,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;QAC/D,MAAM,CAAC,gBAAgB,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QACtE,MAAM,WAAW,CAAC,yBAAyB,CAAC,WAAW,EAAE,yBAAyB,CAAC,CAAC;IACtF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wEAAwE,EAAE,KAAK,IAAI,EAAE;QACtF,MAAM,QAAQ,GAAG,eAAe,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAC9D,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,eAAe,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,iCAAiC,EAAE,QAAQ,EAAE,CAAC,CAAC;QACrH,IAAI,MAAM,GAAG,MAAM,WAAW,CAAC,wBAAwB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC/E,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;QAEpE;;;QAGA;QAEA,MAAM,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAC;QACtE,MAAM,YAAY,GAAG,eAAe,CAAC,uBAAuB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,MAAM,EAAE,CAAC;QAC5F,MAAM,iBAAiB,GAAG,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;QAErF,MAAM,CAAC,WAAW,EAAE,CAAC;QACrB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC3B,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC;QACjC,MAAM,MAAM,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,cAAc,EAAE,CAAC,CAAC;QAC1D,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,uCAAuC;QAE1E;;;;;QAKA;QACA,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC,CAAC;QAC9D,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACnE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAChE,MAAM,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC;QAC7D,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,YAAY,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACtD,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,YAAY,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACnD,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,iBAAiB,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACxD,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,iBAAiB,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAE3D,MAAM,iBAAiB,GAAG,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,IAAI,qBAAqB,EAAE,CAAC,CAAC,CAAC,iCAAiC;QAC9J,MAAM,iBAAiB,GAAG,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,IAAI,qBAAqB,EAAE,CAAC,CAAC;QAE5H,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,KAAK,KAAK,iBAAiB,CAAC,CAAC;QACzF,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,KAAK,KAAK,iBAAiB,CAAC,CAAC;QAEzF,MAAM,CAAC,WAAW,EAAE,CAAC;QACrB,MAAM,MAAM,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,iBAAiB,EAAE,CAAC,CAAC;QAE7D;;;;;;;;;QASA;QACA,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC,CAAC;QAC9D,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACnE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAChE,MAAM,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC;QAC7D,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,YAAY,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACtD,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,iBAAiB,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAE/D,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC;QAE7E,MAAM,mBAAmB,GAAG,iBAAiB,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,EAAE,UAAU,CAAC,CAAC,CAAC,6CAA6C;QACvI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC,CAAC;QACrD,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,mBAAmB,EAAE,SAAS,CAAC,CAAC,CAAC,mCAAmC;QAElH,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,MAAM,EAAE,EAAE,KAAK,YAAY,CAAC,CAAC;QACtF,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,iBAAiB,CAAC,CAAC;QAC7F,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC,MAAM,EAAE,EAAE,KAAK,cAAc,CAAC,CAAC;QAC7F,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,iBAAiB,CAAC,CAAC;QAClG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,KAAK,KAAK,mBAAmB,CAAC,CAAC;QAExF,MAAM,CAAC,WAAW,EAAE,CAAC;QACrB,MAAM,MAAM,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,2CAA2C,EAAE,CAAC,CAAC;QAEvF;;;;;;;;;;QAUA;QACA,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC,CAAC;QAC9D,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACnE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAChE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,mBAAmB,CAAC,CAAC,CAAC;QAClE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,CAAC;QAC7D,MAAM,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC;QAC7D,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,YAAY,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACtD,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,iBAAiB,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAC/D,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,mBAAmB,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAC1D,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,cAAc,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAErD,MAAM,oBAAoB,GAA4B;YACpD,aAAa,EAAE,cAAc,CAAC,aAAa;YAC3C,KAAK,EAAE,cAAc;YACrB,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,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,oBAAoB,CAAC,CAAC;QAE9E,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,KAAK,KAAK,cAAc,CAAC,CAAC;QACtF,MAAM,CAAC,WAAW,EAAE,CAAC;QACrB,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC;QAE7D,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC;QACjD,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,WAAW;QAC3B,MAAM,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,kBAAkB;QACjF,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,CAAC,uDAAuD;QAEjG,uDAAuD;QACvD,MAAM,MAAM,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,sCAAsC,EAAE,CAAC,CAAC;QAElF,+DAA+D;QAC/D,MAAM,MAAM,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,mBAAmB,EAAE,CAAC,CAAC;QAC/D,MAAM,CAAC,KAAK,EAAE,CAAC;QAEf,2EAA2E;QAC3E,MAAM,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC9C,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC;QACxC,MAAM,WAAW,GAAG,MAAM,CAAC,KAAyB,CAAC;QACrD,MAAM,CAAC,WAAW,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC;QAC7D,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC5D,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC/D,MAAM,CAAC,KAAK,EAAE,CAAC;IAEjB,CAAC,CAAC,CAAC;AAEL,CAAC,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nimport { AccessToken, DbResult, GuidString, Id64, Id64String } from \"@itwin/core-bentley\";\nimport {\n ChangesetIdWithIndex, Code, ColorDef,\n GeometricElement2dProps, GeometryStreamProps, IModel, IModelVersion, LockState, QueryRowFormat, RequestNewBriefcaseProps, SchemaState, SubCategoryAppearance,\n} from \"@itwin/core-common\";\nimport { Arc3d, IModelJson, Point2d, Point3d } from \"@itwin/core-geometry\";\nimport * as chai from \"chai\";\nimport { assert, expect } from \"chai\";\nimport * as chaiAsPromised from \"chai-as-promised\";\nimport * as fs from \"fs\";\nimport * as semver from \"semver\";\nimport * as sinon from \"sinon\";\nimport { HubWrappers, KnownTestLocations } from \"../\";\nimport { DrawingCategory } from \"../../Category\";\nimport { ECSqlStatement } from \"../../ECSqlStatement\";\nimport { HubMock } from \"../../internal/HubMock\";\nimport {\n _nativeDb,\n BriefcaseDb,\n BriefcaseManager,\n ChannelControl,\n CodeService, DefinitionModel, DictionaryModel, DocumentListModel, Drawing, DrawingGraphic, OpenBriefcaseArgs, SpatialCategory, Subject,\n} from \"../../core-backend\";\nimport { IModelTestUtils, TestUserType } from \"../IModelTestUtils\";\nimport { ServerBasedLocks } from \"../../internal/ServerBasedLocks\";\n\nchai.use(chaiAsPromised);\n\nexport async function createNewModelAndCategory(rwIModel: BriefcaseDb, parent?: Id64String) {\n // Create a new physical model.\n const [, modelId] = await IModelTestUtils.createAndInsertPhysicalPartitionAndModelAsync(rwIModel, IModelTestUtils.getUniqueModelCode(rwIModel, \"newPhysicalModel\"), true, parent);\n\n // Find or create a SpatialCategory.\n const dictionary: DictionaryModel = rwIModel.models.getModel<DictionaryModel>(IModel.dictionaryId);\n const newCategoryCode = IModelTestUtils.getUniqueSpatialCategoryCode(dictionary, \"ThisTestSpatialCategory\");\n const category = SpatialCategory.create(rwIModel, IModel.dictionaryId, newCategoryCode.value);\n const spatialCategoryId = rwIModel.elements.insertElement(category.toJSON());\n category.setDefaultAppearance(new SubCategoryAppearance({ color: 0xff0000 }));\n // const spatialCategoryId: Id64String = SpatialCategory.insert(rwIModel, IModel.dictionaryId, newCategoryCode.value!, new SubCategoryAppearance({ color: 0xff0000 }));\n\n return { modelId, spatialCategoryId };\n}\n\ndescribe(\"IModelWriteTest\", () => {\n let managerAccessToken: AccessToken;\n let superAccessToken: AccessToken;\n let iTwinId: GuidString;\n\n before(() => {\n HubMock.startup(\"IModelWriteTest\", KnownTestLocations.outputDir);\n iTwinId = HubMock.iTwinId;\n });\n after(() => HubMock.shutdown());\n\n it(\"Check busyTimeout option\", async () => {\n const iModelProps = {\n iModelName: \"ReadWriteTest\",\n iTwinId,\n };\n\n const iModelId = await HubMock.createNewIModel(iModelProps);\n const briefcaseProps = await BriefcaseManager.downloadBriefcase({ accessToken: \"test token\", iTwinId, iModelId });\n\n const tryOpen = async (args: OpenBriefcaseArgs) => {\n const start = performance.now();\n let didThrow = false;\n try {\n await BriefcaseDb.open(args);\n\n } catch (e: any) {\n assert.strictEqual(e.errorNumber, DbResult.BE_SQLITE_BUSY, \"Expect error 'Db is busy'\");\n didThrow = true;\n }\n assert.isTrue(didThrow);\n return performance.now() - start;\n };\n const seconds = (s: number) => s * 1000;\n\n const db = await BriefcaseDb.open({ fileName: briefcaseProps.fileName });\n db.saveChanges();\n // lock db so another connection cannot write to it.\n db.saveFileProperty({ name: \"test\", namespace: \"test\" }, \"\");\n\n assert.isAtMost(await tryOpen({ fileName: briefcaseProps.fileName, busyTimeout: seconds(0) }), seconds(1), \"open should fail with busy error instantly\");\n assert.isAtLeast(await tryOpen({ fileName: briefcaseProps.fileName, busyTimeout: seconds(1) }), seconds(1), \"open should fail with atleast 1 sec delay due to retry\");\n assert.isAtLeast(await tryOpen({ fileName: briefcaseProps.fileName, busyTimeout: seconds(2) }), seconds(2), \"open should fail with atleast 2 sec delay due to retry\");\n assert.isAtLeast(await tryOpen({ fileName: briefcaseProps.fileName, busyTimeout: seconds(3) }), seconds(3), \"open should fail with atleast 3 sec delay due to retry\");\n\n db.abandonChanges();\n db.close();\n });\n\n it(\"WatchForChanges\", async () => {\n const iModelProps = {\n iModelName: \"ReadWriteTest\",\n iTwinId,\n };\n\n const iModelId = await HubMock.createNewIModel(iModelProps);\n const briefcaseProps = await BriefcaseManager.downloadBriefcase({ accessToken: \"test token\", iTwinId, iModelId });\n\n let nClosed = 0;\n const fsWatcher = {\n callback: () => { },\n close: () => ++nClosed,\n };\n const watchStub: any = (_filename: fs.PathLike, _opts: fs.WatchOptions, fn: () => void) => {\n fsWatcher.callback = fn;\n return fsWatcher;\n };\n const watchStubResult = sinon.stub(fs, \"watch\").callsFake(watchStub);\n\n const bc = await BriefcaseDb.open({ fileName: briefcaseProps.fileName });\n bc.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n const roBC = await BriefcaseDb.open({ fileName: briefcaseProps.fileName, watchForChanges: true });\n\n const code1 = IModelTestUtils.getUniqueModelCode(bc, \"newPhysicalModel1\");\n await IModelTestUtils.createAndInsertPhysicalPartitionAndModelAsync(bc, code1, true);\n bc.saveChanges();\n\n // immediately after save changes the current txnId in the writeable briefcase changes, but it isn't reflected\n // in the readonly briefcase until the file watcher fires.\n expect(bc[_nativeDb].getCurrentTxnId()).not.equal(roBC[_nativeDb].getCurrentTxnId());\n\n // trigger watcher via stub\n fsWatcher.callback();\n\n // now they should match because restartDefaultTxn in the readonly briefcase reads the changes from the writeable connection\n expect(bc[_nativeDb].getCurrentTxnId()).equal(roBC[_nativeDb].getCurrentTxnId());\n\n roBC.close();\n expect(nClosed).equal(1);\n\n bc.close();\n // NOTE: Since HubMock.startup() is called in the before() block and not beforeEach(), we CANNOT\n // call sinon.restore() here. This is because sinon.restore() will restore the stubs for\n // CloudSqlite that HubMock.startup() put in place.\n watchStubResult.restore();\n });\n\n function expectEqualChangesets(a: ChangesetIdWithIndex, b: ChangesetIdWithIndex): void {\n expect(a.id).to.equal(b.id);\n expect(a.index).to.equal(b.index);\n }\n\n it(\"WatchForChanges - push\", async () => {\n const adminAccessToken = await HubWrappers.getAccessToken(TestUserType.SuperManager);\n const iModelProps = {\n iModelName: \"ReadWriteTest\",\n iTwinId,\n };\n\n const iModelId = await HubMock.createNewIModel(iModelProps);\n const briefcaseProps = await BriefcaseManager.downloadBriefcase({ accessToken: adminAccessToken, iTwinId, iModelId });\n\n let nClosed = 0;\n const fsWatcher = {\n callback: () => { },\n close: () => ++nClosed,\n };\n const watchStub: any = (_filename: fs.PathLike, _opts: fs.WatchOptions, fn: () => void) => {\n fsWatcher.callback = fn;\n return fsWatcher;\n };\n const watchStubResult = sinon.stub(fs, \"watch\").callsFake(watchStub);\n\n const bc = await BriefcaseDb.open({ fileName: briefcaseProps.fileName });\n bc.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n const roBC = await BriefcaseDb.open({ fileName: briefcaseProps.fileName, watchForChanges: true });\n\n const code1 = IModelTestUtils.getUniqueModelCode(bc, \"newPhysicalModel1\");\n await IModelTestUtils.createAndInsertPhysicalPartitionAndModelAsync(bc, code1, true);\n bc.saveChanges();\n\n // immediately after save changes the current txnId in the writeable briefcase changes, but it isn't reflected\n // in the readonly briefcase until the file watcher fires.\n expect(bc[_nativeDb].getCurrentTxnId()).not.equal(roBC[_nativeDb].getCurrentTxnId());\n\n // trigger watcher via stub\n fsWatcher.callback();\n\n // now they should match because restartDefaultTxn in the readonly briefcase reads the changes from the writeable connection\n expect(bc[_nativeDb].getCurrentTxnId()).equal(roBC[_nativeDb].getCurrentTxnId());\n\n // Push the changes to the hub\n\n const prePushChangeset = bc.changeset;\n let eventRaised = false;\n roBC.onChangesetChanged.addOnce((prevCS) => {\n expectEqualChangesets(prevCS, prePushChangeset);\n eventRaised = true;\n });\n\n await bc.pushChanges({ accessToken: adminAccessToken, description: \"test\" });\n const postPushChangeset = bc.changeset;\n assert(!!postPushChangeset);\n expect(prePushChangeset !== postPushChangeset, \"changes should be pushed\");\n\n // trigger watcher via stub\n fsWatcher.callback();\n\n expectEqualChangesets(roBC.changeset, postPushChangeset);\n expect(roBC[_nativeDb].getCurrentTxnId(), \"txn should be updated\").equal(bc[_nativeDb].getCurrentTxnId());\n expect(eventRaised).to.be.true;\n\n roBC.close();\n expect(nClosed).equal(1);\n\n bc.close();\n // NOTE: Since HubMock.startup() is called in the before() block and not beforeEach(), we CANNOT\n // call sinon.restore() here. This is because sinon.restore() will restore the stubs for\n // CloudSqlite that HubMock.startup() put in place.\n watchStubResult.restore();\n });\n\n it(\"WatchForChanges - pull\", async () => {\n const adminAccessToken = await HubWrappers.getAccessToken(TestUserType.SuperManager);\n\n const pathname = IModelTestUtils.resolveAssetFile(\"CompatibilityTestSeed.bim\");\n const hubName = \"CompatibilityTest\";\n const iModelId = await HubWrappers.pushIModel(managerAccessToken, iTwinId, pathname, hubName, true);\n\n // Download two copies of the briefcase - manager and super\n const args: RequestNewBriefcaseProps = { iTwinId, iModelId };\n const initialDb = await BriefcaseManager.downloadBriefcase({ accessToken: adminAccessToken, ...args });\n const briefcaseProps = await BriefcaseManager.downloadBriefcase({ accessToken: adminAccessToken, ...args });\n\n // Push some changes - prep for pull workflow.\n const bc1 = await BriefcaseDb.open({ fileName: initialDb.fileName });\n bc1.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n const code2 = IModelTestUtils.getUniqueModelCode(bc1, \"newPhysicalModel2\");\n await IModelTestUtils.createAndInsertPhysicalPartitionAndModelAsync(bc1, code2, true);\n const prePushChangeset = bc1.changeset;\n bc1.saveChanges();\n await bc1.pushChanges({ accessToken: adminAccessToken, description: \"test\" });\n const postPushChangeset = bc1.changeset;\n assert(!!prePushChangeset);\n expect(prePushChangeset !== postPushChangeset, \"changes should be pushed\");\n\n bc1.close();\n\n // Writer that pulls + watcher.\n let nClosed = 0;\n const fsWatcher = {\n callback: () => { },\n close: () => ++nClosed,\n };\n const watchStub: any = (_filename: fs.PathLike, _opts: fs.WatchOptions, fn: () => void) => {\n fsWatcher.callback = fn;\n return fsWatcher;\n };\n const watchStubResult = sinon.stub(fs, \"watch\").callsFake(watchStub);\n\n const bc = await BriefcaseDb.open({ fileName: briefcaseProps.fileName });\n bc.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n const roBC = await BriefcaseDb.open({ fileName: briefcaseProps.fileName, watchForChanges: true });\n\n const prePullChangeset = bc.changeset;\n let eventRaised = false;\n roBC.onChangesetChanged.addOnce((prevCS) => {\n expectEqualChangesets(prevCS, prePushChangeset);\n eventRaised = true;\n });\n\n await bc.pullChanges();\n\n const postPullChangeset = bc.changeset;\n assert(!!postPullChangeset);\n expect(prePullChangeset !== postPullChangeset, \"changes should be pulled\");\n\n // trigger watcher via stub\n fsWatcher.callback();\n\n expectEqualChangesets(roBC.changeset, postPullChangeset);\n expect(roBC[_nativeDb].getCurrentTxnId(), \"txn should be updated\").equal(bc[_nativeDb].getCurrentTxnId());\n expect(eventRaised).to.be.true;\n\n roBC.close();\n expect(nClosed).equal(1);\n\n bc.close();\n // NOTE: Since HubMock.startup() is called in the before() block and not beforeEach(), we CANNOT\n // call sinon.restore() here. This is because sinon.restore() will restore the stubs for\n // CloudSqlite that HubMock.startup() put in place.\n watchStubResult.restore();\n });\n\n it(\"should handle undo/redo\", async () => {\n const adminAccessToken = await HubWrappers.getAccessToken(TestUserType.SuperManager);\n // Delete any existing iModels with the same name as the read-write test iModel\n const iModelName = \"CodesUndoRedoPushTest\";\n\n // Create a new empty iModel on the Hub & obtain a briefcase\n const rwIModelId = await HubMock.createNewIModel({ accessToken: adminAccessToken, iTwinId, iModelName, description: \"TestSubject\" });\n assert.isNotEmpty(rwIModelId);\n const rwIModel = await HubWrappers.downloadAndOpenBriefcase({ accessToken: adminAccessToken, iTwinId, iModelId: rwIModelId });\n rwIModel.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n\n // create and insert a new model with code1\n const code1 = IModelTestUtils.getUniqueModelCode(rwIModel, \"newPhysicalModel1\");\n await IModelTestUtils.createAndInsertPhysicalPartitionAndModelAsync(rwIModel, code1, true);\n assert.isTrue(rwIModel.elements.getElement(code1) !== undefined); // throws if element is not found\n\n // create a local txn with that change\n rwIModel.saveChanges(\"inserted newPhysicalModel\");\n\n // Reverse that local txn\n rwIModel.txns.reverseSingleTxn();\n\n try {\n // The model that I just created with code1 should no longer be there.\n const theNewModel = rwIModel.elements.getElement(code1); // throws if element is not found\n assert.isTrue(theNewModel === undefined); // really should not be here.\n assert.fail(); // should not be here.\n } catch {\n // this is what I expect\n }\n\n // Create and insert a model with code2\n const code2 = IModelTestUtils.getUniqueModelCode(rwIModel, \"newPhysicalModel2\");\n await IModelTestUtils.createAndInsertPhysicalPartitionAndModelAsync(rwIModel, code2, true);\n rwIModel.saveChanges(\"inserted generic objects\");\n\n // The iModel should have a model with code1 and not code2\n assert.isTrue(rwIModel.elements.getElement(code2) !== undefined); // throws if element is not found\n\n // Push the changes to the hub\n const prePushChangeset = rwIModel.changeset;\n await rwIModel.pushChanges({ accessToken: adminAccessToken, description: \"test\" });\n const postPushChangeset = rwIModel.changeset;\n assert(!!postPushChangeset);\n expect(prePushChangeset !== postPushChangeset);\n\n rwIModel.close();\n });\n\n it(\"should be able to upgrade a briefcase with an older schema\", async () => {\n /**\n * Test validates that -\n * - User \"manager\" upgrades the BisCore schema in the briefcase from version 1.0.0 to 1.0.10+\n * - User \"super\" can get the upgrade \"manager\" made\n */\n\n /* Setup test - Push an iModel with an old BisCore schema up to the Hub */\n const pathname = IModelTestUtils.resolveAssetFile(\"CompatibilityTestSeed.bim\");\n const hubName = \"CompatibilityTest\";\n const iModelId = await HubWrappers.pushIModel(managerAccessToken, iTwinId, pathname, hubName, true);\n\n // Download two copies of the briefcase - manager and super\n const args: RequestNewBriefcaseProps = { iTwinId, iModelId };\n const managerBriefcaseProps = await BriefcaseManager.downloadBriefcase({ accessToken: managerAccessToken, ...args });\n const superBriefcaseProps = await BriefcaseManager.downloadBriefcase({ accessToken: superAccessToken, ...args });\n\n /* User \"manager\" upgrades the briefcase */\n\n // Validate the original state of the BisCore schema in the briefcase\n let iModel = await BriefcaseDb.open({ fileName: managerBriefcaseProps.fileName });\n const beforeVersion = iModel.querySchemaVersion(\"BisCore\");\n assert.isTrue(semver.satisfies(beforeVersion!, \"= 1.0.0\"));\n assert.isFalse(iModel[_nativeDb].hasPendingTxns());\n iModel.close();\n\n // Validate that the BisCore schema is recognized as a recommended upgrade\n let schemaState = BriefcaseDb.validateSchemas(managerBriefcaseProps.fileName, true);\n assert.strictEqual(schemaState, SchemaState.UpgradeRecommended);\n\n // Upgrade the schemas\n await BriefcaseDb.upgradeSchemas(managerBriefcaseProps);\n\n // Validate state after upgrade\n iModel = await BriefcaseDb.open({ fileName: managerBriefcaseProps.fileName });\n const afterVersion = iModel.querySchemaVersion(\"BisCore\");\n assert.isTrue(semver.satisfies(afterVersion!, \">= 1.0.10\"));\n assert.isFalse(iModel[_nativeDb].hasPendingTxns());\n assert.isFalse(iModel.holdsSchemaLock);\n assert.isFalse(iModel[_nativeDb].hasUnsavedChanges());\n iModel.close();\n\n /* User \"super\" can get the upgrade \"manager\" made */\n\n // Validate that the BisCore schema is recognized as a recommended upgrade\n schemaState = BriefcaseDb.validateSchemas(superBriefcaseProps.fileName, true);\n assert.strictEqual(schemaState, SchemaState.UpgradeRecommended);\n\n // Open briefcase and pull change sets to upgrade\n const superIModel = await BriefcaseDb.open({ fileName: superBriefcaseProps.fileName });\n (superBriefcaseProps.changeset as any) = await superIModel.pullChanges({ accessToken: superAccessToken });\n const superVersion = superIModel.querySchemaVersion(\"BisCore\");\n assert.isTrue(semver.satisfies(superVersion!, \">= 1.0.10\"));\n assert.isFalse(superIModel[_nativeDb].hasUnsavedChanges()); // Validate no changes were made\n assert.isFalse(superIModel[_nativeDb].hasPendingTxns()); // Validate no changes were made\n superIModel.close();\n\n // Validate that there are no upgrades required\n schemaState = BriefcaseDb.validateSchemas(superBriefcaseProps.fileName, true);\n assert.strictEqual(schemaState, SchemaState.UpToDate);\n\n // Upgrade the schemas - ensure this is a no-op\n await BriefcaseDb.upgradeSchemas(superBriefcaseProps);\n await HubMock.deleteIModel({ accessToken: managerAccessToken, iTwinId, iModelId });\n });\n\n it(\"changeset size and ec schema version change\", async () => {\n const adminToken = \"super manager token\";\n const iModelName = \"changeset_size\";\n const rwIModelId = await HubMock.createNewIModel({ iTwinId, iModelName, description: \"TestSubject\", accessToken: adminToken });\n assert.isNotEmpty(rwIModelId);\n const rwIModel = await HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken });\n assert.equal(rwIModel[_nativeDb].enableChangesetSizeStats(true), DbResult.BE_SQLITE_OK);\n const schema = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"ts\" version=\"01.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\n <ECEntityClass typeName=\"Test2dElement\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"s\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`;\n await rwIModel.importSchemaStrings([schema]);\n rwIModel.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n rwIModel.saveChanges(\"user 1: schema changeset\");\n if (true || \"push changes\") {\n // Push the changes to the hub\n const prePushChangeSetId = rwIModel.changeset.id;\n await rwIModel.pushChanges({ description: \"push schema changeset\", accessToken: adminToken });\n const postPushChangeSetId = rwIModel.changeset.id;\n assert(!!postPushChangeSetId);\n expect(prePushChangeSetId !== postPushChangeSetId);\n const changesets = await HubMock.queryChangesets({ iModelId: rwIModelId, accessToken: superAccessToken });\n assert.equal(changesets.length, 1);\n }\n await rwIModel.locks.acquireLocks({ shared: IModel.dictionaryId });\n const codeProps = Code.createEmpty();\n codeProps.value = \"DrawingModel\";\n let totalEl = 0;\n const [, drawingModelId] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(rwIModel, codeProps, true);\n let drawingCategoryId = DrawingCategory.queryCategoryIdByName(rwIModel, IModel.dictionaryId, \"MyDrawingCategory\");\n if (undefined === drawingCategoryId)\n drawingCategoryId = DrawingCategory.insert(rwIModel, IModel.dictionaryId, \"MyDrawingCategory\", new SubCategoryAppearance({ color: ColorDef.fromString(\"rgb(255,0,0)\").toJSON() }));\n\n const insertElements = (imodel: BriefcaseDb, className: string = \"Test2dElement\", noOfElements: number = 10, userProp: (n: number) => object) => {\n for (let m = 0; m < noOfElements; ++m) {\n const geomArray: Arc3d[] = [\n Arc3d.createXY(Point3d.create(0, 0), 5),\n Arc3d.createXY(Point3d.create(5, 5), 2),\n Arc3d.createXY(Point3d.create(-5, -5), 20),\n ];\n const geometryStream: GeometryStreamProps = [];\n for (const geom of geomArray) {\n const arcData = IModelJson.Writer.toIModelJson(geom);\n geometryStream.push(arcData);\n }\n const prop = userProp(++totalEl);\n // Create props\n const geomElement = {\n classFullName: `TestDomain:${className}`,\n model: drawingModelId,\n category: drawingCategoryId,\n code: Code.createEmpty(),\n geom: geometryStream,\n ...prop,\n };\n const id = imodel.elements.insertElement(geomElement);\n assert.isTrue(Id64.isValidId64(id), \"insert worked\");\n }\n };\n const str = new Array(1024).join(\"x\");\n insertElements(rwIModel, \"Test2dElement\", 1024, () => {\n return { s: str };\n });\n assert.equal(1357648, rwIModel[_nativeDb].getChangesetSize());\n\n rwIModel.saveChanges(\"user 1: data\");\n assert.equal(0, rwIModel[_nativeDb].getChangesetSize());\n await rwIModel.pushChanges({ description: \"schema changeset\", accessToken: adminToken });\n rwIModel.close();\n });\n\n it(\"should set a fake verifyCode for codeService that throws error for operations that affect code, if failed to open codeService \", async () => {\n const iModelProps = {\n iModelName: \"codeServiceTest\",\n iTwinId,\n };\n const iModelId = await HubMock.createNewIModel(iModelProps);\n const briefcaseProps = await BriefcaseManager.downloadBriefcase({ accessToken: \"codeServiceTest\", iTwinId, iModelId });\n const originalCreateForIModel = CodeService.createForIModel;\n // can be any errors except 'NoCodeIndex'\n CodeService.createForIModel = async () => {\n throw new CodeService.Error(\"MissingCode\", 0x10000 + 1, \" \");\n };\n const briefcaseDb = await BriefcaseDb.open({ fileName: briefcaseProps.fileName });\n briefcaseDb.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n let firstNonRootElement = { id: undefined, codeValue: \"test\" };\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n briefcaseDb.withPreparedStatement(\"SELECT * from Bis.Element LIMIT 1 OFFSET 1\", (stmt: ECSqlStatement) => {\n if (stmt.step() === DbResult.BE_SQLITE_ROW) {\n firstNonRootElement = stmt.getRow();\n }\n });\n // make change to the briefcaseDb that does not affect code, e.g., save file property\n // expect no error from verifyCode\n expect(() => briefcaseDb.saveFileProperty({ name: \"codeServiceProp\", namespace: \"codeService\", id: 1, subId: 1 }, \"codeService test\")).to.not.throw();\n // make change to the briefcaseDb that affects code that will invoke verifyCode, e.g., update an element with a non-null code\n // expect error from verifyCode\n let newProps = { id: firstNonRootElement.id, code: { ...Code.createEmpty(), value: firstNonRootElement.codeValue }, classFullName: undefined, model: undefined };\n await briefcaseDb.locks.acquireLocks({ exclusive: firstNonRootElement.id });\n expect(() => briefcaseDb.elements.updateElement(newProps)).to.throw(CodeService.Error);\n // make change to the briefcaseDb that will invoke verifyCode with a null(empty) code, e.g., update an element with a null(empty) code\n // expect no error from verifyCode\n newProps = { id: firstNonRootElement.id, code: Code.createEmpty(), classFullName: undefined, model: undefined };\n expect(() => briefcaseDb.elements.updateElement(newProps)).to.not.throw();\n briefcaseDb.close();\n // throw \"NoCodeIndex\", this error should get ignored because it means the iModel isn't enforcing codes. updating an element with an empty code and a non empty code should work without issue.\n CodeService.createForIModel = async () => {\n throw new CodeService.Error(\"NoCodeIndex\", 0x10000 + 1, \" \");\n };\n const briefcaseDb2 = await BriefcaseDb.open({ fileName: briefcaseProps.fileName });\n briefcaseDb2.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n await briefcaseDb2.locks.acquireLocks({ exclusive: firstNonRootElement.id });\n // expect no error from verifyCode for empty code\n expect(() => briefcaseDb2.elements.updateElement(newProps)).to.not.throw();\n newProps = { id: firstNonRootElement.id, code: { ...Code.createEmpty(), value: firstNonRootElement.codeValue }, classFullName: undefined, model: undefined };\n // make change to the briefcaseDb that affects code that will invoke verifyCode, e.g., update an element with a non-null code\n // expect no error from verifyCode\n expect(() => briefcaseDb2.elements.updateElement(newProps)).to.not.throw();\n // clean up\n CodeService.createForIModel = originalCreateForIModel;\n briefcaseDb2.close();\n });\n\n it(\"clear cache on schema changes\", async () => {\n const adminToken = await HubWrappers.getAccessToken(TestUserType.SuperManager);\n const userToken = await HubWrappers.getAccessToken(TestUserType.Super);\n // Delete any existing iModels with the same name as the OptimisticConcurrencyTest iModel\n const iModelName = \"SchemaChanges\";\n\n // Create a new empty iModel on the Hub & obtain a briefcase\n const rwIModelId = await HubMock.createNewIModel({ iTwinId, iModelName, description: \"TestSubject\" });\n assert.isNotEmpty(rwIModelId);\n const rwIModel = await HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken });\n\n const rwIModel2 = await HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: userToken });\n\n // enable change tracking\n assert.equal(rwIModel[_nativeDb].enableChangesetSizeStats(true), DbResult.BE_SQLITE_OK);\n assert.equal(rwIModel2[_nativeDb].enableChangesetSizeStats(true), DbResult.BE_SQLITE_OK);\n\n const schema = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"ts\" version=\"01.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\n <ECEntityClass typeName=\"Test2dElement\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"s\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`;\n await rwIModel.importSchemaStrings([schema]);\n rwIModel.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n rwIModel2.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n\n rwIModel.saveChanges(\"user 1: schema changeset\");\n if (true || \"push changes\") {\n // Push the changes to the hub\n const prePushChangeSetId = rwIModel.changeset.id;\n await rwIModel.pushChanges({ description: \"schema changeset\", accessToken: adminToken });\n const postPushChangeSetId = rwIModel.changeset.id;\n assert(!!postPushChangeSetId);\n expect(prePushChangeSetId !== postPushChangeSetId);\n const changesets = await HubMock.queryChangesets({ iModelId: rwIModelId, accessToken: superAccessToken });\n assert.equal(changesets.length, 1);\n }\n const codeProps = Code.createEmpty();\n codeProps.value = \"DrawingModel\";\n let totalEl = 0;\n await rwIModel.locks.acquireLocks({ shared: IModel.dictionaryId });\n const [, drawingModelId] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(rwIModel, codeProps, true);\n let drawingCategoryId = DrawingCategory.queryCategoryIdByName(rwIModel, IModel.dictionaryId, \"MyDrawingCategory\");\n if (undefined === drawingCategoryId)\n drawingCategoryId = DrawingCategory.insert(rwIModel, IModel.dictionaryId, \"MyDrawingCategory\", new SubCategoryAppearance({ color: ColorDef.fromString(\"rgb(255,0,0)\").toJSON() }));\n\n const insertElements = (imodel: BriefcaseDb, className: string = \"Test2dElement\", noOfElements: number = 10, userProp: (n: number) => object) => {\n for (let m = 0; m < noOfElements; ++m) {\n const geomArray: Arc3d[] = [\n Arc3d.createXY(Point3d.create(0, 0), 5),\n Arc3d.createXY(Point3d.create(5, 5), 2),\n Arc3d.createXY(Point3d.create(-5, -5), 20),\n ];\n const geometryStream: GeometryStreamProps = [];\n for (const geom of geomArray) {\n const arcData = IModelJson.Writer.toIModelJson(geom);\n geometryStream.push(arcData);\n }\n const prop = userProp(++totalEl);\n // Create props\n const geomElement = {\n classFullName: `TestDomain:${className}`,\n model: drawingModelId,\n category: drawingCategoryId,\n code: Code.createEmpty(),\n geom: geometryStream,\n ...prop,\n };\n const id = imodel.elements.insertElement(geomElement);\n assert.isTrue(Id64.isValidId64(id), \"insert worked\");\n }\n };\n\n insertElements(rwIModel, \"Test2dElement\", 10, (n: number) => {\n return { s: `s-${n}` };\n });\n\n assert.equal(3889, rwIModel[_nativeDb].getChangesetSize());\n rwIModel.saveChanges(\"user 1: data changeset\");\n\n if (true || \"push changes\") {\n // Push the changes to the hub\n const prePushChangeSetId = rwIModel.changeset.id;\n await rwIModel.pushChanges({ description: \"10 instances of test2dElement\", accessToken: adminToken });\n const postPushChangeSetId = rwIModel.changeset.id;\n assert(!!postPushChangeSetId);\n expect(prePushChangeSetId !== postPushChangeSetId);\n const changesets = await HubMock.queryChangesets({ iModelId: rwIModelId, accessToken: superAccessToken });\n assert.equal(changesets.length, 2);\n }\n let rows: any[] = [];\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n rwIModel.withPreparedStatement(\"SELECT * FROM TestDomain.Test2dElement\", (stmt: ECSqlStatement) => {\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\n rows.push(stmt.getRow());\n }\n });\n assert.equal(rows.length, 10);\n assert.equal(rows.map((r) => r.s).filter((v) => v).length, 10);\n rows = [];\n for await (const queryRow of rwIModel.createQueryReader(\"SELECT * FROM TestDomain.Test2dElement\", undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames })) {\n rows.push(queryRow.toRow());\n }\n assert.equal(rows.length, 10);\n assert.equal(rows.map((r) => r.s).filter((v) => v).length, 10);\n if (true || \"user pull/merge\") {\n // pull and merge changes\n await rwIModel2.pullChanges({ accessToken: userToken });\n rows = [];\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n rwIModel2.withPreparedStatement(\"SELECT * FROM TestDomain.Test2dElement\", (stmt: ECSqlStatement) => {\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\n rows.push(stmt.getRow());\n }\n });\n assert.equal(rows.length, 10);\n assert.equal(rows.map((r) => r.s).filter((v) => v).length, 10);\n rows = [];\n for await (const queryRow of rwIModel2.createQueryReader(\"SELECT * FROM TestDomain.Test2dElement\", undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames })) {\n rows.push(queryRow.toRow());\n }\n assert.equal(rows.length, 10);\n assert.equal(rows.map((r) => r.s).filter((v) => v).length, 10);\n // create some element and push those changes\n await rwIModel2.locks.acquireLocks({ shared: drawingModelId });\n insertElements(rwIModel2, \"Test2dElement\", 10, (n: number) => {\n return { s: `s-${n}` };\n });\n assert.equal(0, rwIModel[_nativeDb].getChangesetSize());\n rwIModel2.saveChanges(\"user 2: data changeset\");\n\n if (true || \"push changes\") {\n // Push the changes to the hub\n const prePushChangeSetId = rwIModel2.changeset.id;\n await rwIModel2.pushChanges({ accessToken: userToken, description: \"10 instances of test2dElement\" });\n const postPushChangeSetId = rwIModel2.changeset.id;\n assert(!!postPushChangeSetId);\n expect(prePushChangeSetId !== postPushChangeSetId);\n const changesets = await HubMock.queryChangesets({ iModelId: rwIModelId, accessToken: userToken });\n assert.equal(changesets.length, 3);\n }\n }\n await rwIModel.pullChanges({ accessToken: adminToken });\n // second schema import ==============================================================\n const schemaV2 = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"ts\" version=\"01.01\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\n <ECEntityClass typeName=\"Test2dElement\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"s\" typeName=\"string\"/>\n <ECProperty propertyName=\"v\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"Test2dElement2nd\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"t\" typeName=\"string\"/>\n <ECProperty propertyName=\"r\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`;\n await rwIModel.importSchemaStrings([schemaV2]);\n assert.equal(0, rwIModel[_nativeDb].getChangesetSize());\n rwIModel.saveChanges(\"user 1: schema changeset2\");\n if (true || \"push changes\") {\n // Push the changes to the hub\n const prePushChangeSetId = rwIModel.changeset.id;\n await rwIModel.pushChanges({ accessToken: adminToken, description: \"schema changeset\" });\n const postPushChangeSetId = rwIModel.changeset.id;\n assert(!!postPushChangeSetId);\n expect(prePushChangeSetId !== postPushChangeSetId);\n const changesets = await HubMock.queryChangesets({ iModelId: rwIModelId, accessToken: superAccessToken });\n assert.equal(changesets.length, 4);\n }\n // create some element and push those changes\n await rwIModel.locks.acquireLocks({ shared: drawingModelId });\n insertElements(rwIModel, \"Test2dElement\", 10, (n: number) => {\n return {\n s: `s-${n}`, v: `v-${n}`,\n };\n });\n\n // create some element and push those changes\n insertElements(rwIModel, \"Test2dElement2nd\", 10, (n: number) => {\n return {\n t: `t-${n}`, r: `r-${n}`,\n };\n });\n assert.equal(6266, rwIModel[_nativeDb].getChangesetSize());\n rwIModel.saveChanges(\"user 1: data changeset\");\n\n if (true || \"push changes\") {\n // Push the changes to the hub\n const prePushChangeSetId = rwIModel.changeset.id;\n await rwIModel.pushChanges({ accessToken: adminToken, description: \"10 instances of test2dElement\" });\n const postPushChangeSetId = rwIModel.changeset.id;\n assert(!!postPushChangeSetId);\n expect(prePushChangeSetId !== postPushChangeSetId);\n const changesets = await HubMock.queryChangesets({ iModelId: rwIModelId, accessToken: superAccessToken });\n assert.equal(changesets.length, 5);\n }\n rows = [];\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n rwIModel.withPreparedStatement(\"SELECT * FROM TestDomain.Test2dElement\", (stmt: ECSqlStatement) => {\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\n rows.push(stmt.getRow());\n }\n });\n assert.equal(rows.length, 30);\n assert.equal(rows.map((r) => r.s).filter((v) => v).length, 30);\n assert.equal(rows.map((r) => r.v).filter((v) => v).length, 10);\n rows = [];\n for await (const queryRow of rwIModel.createQueryReader(\"SELECT * FROM TestDomain.Test2dElement\", undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames })) {\n rows.push(queryRow.toRow());\n }\n assert.equal(rows.length, 30);\n assert.equal(rows.map((r) => r.s).filter((v) => v).length, 30);\n assert.equal(rows.map((r) => r.v).filter((v) => v).length, 10);\n\n rows = [];\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n rwIModel.withPreparedStatement(\"SELECT * FROM TestDomain.Test2dElement2nd\", (stmt: ECSqlStatement) => {\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\n rows.push(stmt.getRow());\n }\n });\n assert.equal(rows.length, 10);\n assert.equal(rows.map((r) => r.t).filter((v) => v).length, 10);\n assert.equal(rows.map((r) => r.r).filter((v) => v).length, 10);\n rows = [];\n for await (const queryRow of rwIModel.createQueryReader(\"SELECT * FROM TestDomain.Test2dElement2nd\", undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames })) {\n rows.push(queryRow.toRow());\n }\n assert.equal(rows.length, 10);\n assert.equal(rows.map((r) => r.t).filter((v) => v).length, 10);\n assert.equal(rows.map((r) => r.r).filter((v) => v).length, 10);\n\n if (true || \"user pull/merge\") {\n // pull and merge changes\n await rwIModel2.pullChanges({ accessToken: userToken });\n rows = [];\n // Following fail without the fix in briefcase manager where we clear statement cache on schema changeset apply\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n rwIModel2.withPreparedStatement(\"SELECT * FROM TestDomain.Test2dElement\", (stmt: ECSqlStatement) => {\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\n rows.push(stmt.getRow());\n }\n });\n assert.equal(rows.length, 30);\n assert.equal(rows.map((r) => r.s).filter((v) => v).length, 30);\n assert.equal(rows.map((r) => r.v).filter((v) => v).length, 10);\n rows = [];\n // Following fail without native side fix where we clear concurrent query cache on schema changeset apply\n for await (const queryRow of rwIModel2.createQueryReader(\"SELECT * FROM TestDomain.Test2dElement\", undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames })) {\n rows.push(queryRow.toRow());\n }\n assert.equal(rows.length, 30);\n assert.equal(rows.map((r) => r.s).filter((v) => v).length, 30);\n assert.equal(rows.map((r) => r.v).filter((v) => v).length, 10);\n for (const row of rows) {\n const el: any = rwIModel2.elements.getElementProps(row.id);\n assert.isDefined(el);\n if (row.s) {\n assert.equal(row.s, el.s);\n } else {\n assert.isUndefined(el.s);\n }\n if (row.v) {\n assert.equal(row.v, el.v);\n } else {\n assert.isUndefined(el.v);\n }\n }\n rows = [];\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n rwIModel2.withPreparedStatement(\"SELECT * FROM TestDomain.Test2dElement2nd\", (stmt: ECSqlStatement) => {\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\n rows.push(stmt.getRow());\n }\n });\n assert.equal(rows.length, 10);\n assert.equal(rows.map((r) => r.t).filter((v) => v).length, 10);\n assert.equal(rows.map((r) => r.r).filter((v) => v).length, 10);\n for (const row of rows) {\n const el: any = rwIModel2.elements.getElementProps(row.id);\n assert.isDefined(el);\n if (row.s) {\n assert.equal(row.s, el.s);\n } else {\n assert.isUndefined(el.s);\n }\n if (row.v) {\n assert.equal(row.v, el.v);\n } else {\n assert.isUndefined(el.v);\n }\n }\n rows = [];\n for await (const queryRow of rwIModel2.createQueryReader(\"SELECT * FROM TestDomain.Test2dElement2nd\", undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames })) {\n rows.push(queryRow.toRow());\n }\n assert.equal(rows.length, 10);\n assert.equal(rows.map((r) => r.t).filter((v) => v).length, 10);\n assert.equal(rows.map((r) => r.r).filter((v) => v).length, 10);\n for (const row of rows) {\n const el: any = rwIModel2.elements.getElementProps(row.id);\n assert.isDefined(el);\n if (row.t) {\n assert.equal(row.t, el.t);\n } else {\n assert.isUndefined(el.t);\n }\n if (row.r) {\n assert.equal(row.r, el.r);\n } else {\n assert.isUndefined(el.r);\n }\n }\n }\n rwIModel.close();\n rwIModel2.close();\n });\n\n it(\"pulling a changeset with extents changes should update the extents of the opened imodel\", async () => {\n const accessToken = await HubWrappers.getAccessToken(TestUserType.Regular);\n const version0 = IModelTestUtils.resolveAssetFile(\"mirukuru.ibim\");\n const iModelId = await HubMock.createNewIModel({ iTwinId, iModelName: \"projectExtentsTest\", version0 });\n const iModel = await HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId });\n const changesetIdBeforeExtentsChange = iModel.changeset.id;\n const extents = iModel.projectExtents;\n const newExtents = extents.clone();\n newExtents.low.x += 100;\n newExtents.low.y += 100;\n newExtents.high.x += 100;\n newExtents.high.y += 100;\n iModel.updateProjectExtents(newExtents);\n iModel.saveChanges(\"update project extents\");\n await iModel.pushChanges({ description: \"update project extents\" });\n await HubWrappers.closeAndDeleteBriefcaseDb(accessToken, iModel);\n const iModelBeforeExtentsChange = await HubWrappers.downloadAndOpenBriefcase({ accessToken, iTwinId, iModelId, asOf: IModelVersion.asOfChangeSet(changesetIdBeforeExtentsChange).toJSON() });\n const extentsBeforePull = iModelBeforeExtentsChange.projectExtents;\n // Read the extents fileProperty.\n const extentsStrBeforePull = iModelBeforeExtentsChange.queryFilePropertyString({name: \"Extents\", namespace: \"dgn_Db\"});\n const ecefLocationBeforeExtentsChange = iModelBeforeExtentsChange.ecefLocation;\n await iModelBeforeExtentsChange.pullChanges(); // Pulls the extents change.\n const extentsAfterPull = iModelBeforeExtentsChange.projectExtents;\n const extentsStrAfterPull = iModelBeforeExtentsChange.queryFilePropertyString({name: \"Extents\", namespace: \"dgn_Db\"});\n const ecefLocationAfterExtentsChange = iModelBeforeExtentsChange.ecefLocation;\n\n expect(ecefLocationBeforeExtentsChange).to.not.be.undefined;\n expect(ecefLocationAfterExtentsChange).to.not.be.undefined;\n expect(ecefLocationBeforeExtentsChange?.isAlmostEqual(ecefLocationAfterExtentsChange!)).to.be.false;\n expect(extentsStrAfterPull).to.not.equal(extentsStrBeforePull);\n expect(extentsAfterPull.isAlmostEqual(extentsBeforePull)).to.be.false;\n await HubWrappers.closeAndDeleteBriefcaseDb(accessToken, iModelBeforeExtentsChange);\n });\n\n it(\"parent lock should suffice when inserting into deeply nested sub-model\", async () => {\n const version0 = IModelTestUtils.resolveAssetFile(\"test.bim\");\n const iModelId = await HubMock.createNewIModel({ iTwinId, iModelName: \"subModelCoveredByParentLockTest\", version0 });\n let iModel = await HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId });\n iModel.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n\n /*\n Job Subject\n +- DefinitionPartition -- [DefinitionModel]\n */\n\n await iModel.locks.acquireLocks({ shared: IModel.repositoryModelId });\n const jobSubjectId = IModelTestUtils.createJobSubjectElement(iModel, \"JobSubject\").insert();\n const definitionModelId = DefinitionModel.insert(iModel, jobSubjectId, \"Definition\");\n\n iModel.saveChanges();\n const locks = iModel.locks;\n expect(locks.isServerBased).true;\n await iModel.pushChanges({ description: \"create model\" });\n expect(iModel.locks).equal(locks); // pushing should not change your locks\n\n /*\n Job Subject <--- Lock this\n +- DefinitionPartition -- [DefinitionModel]\n SpatialCategory <=== insert this\n DrawingCategory \"\n */\n assert.isFalse(iModel.locks.holdsExclusiveLock(jobSubjectId));\n assert.isFalse(iModel.locks.holdsExclusiveLock(definitionModelId));\n assert.isFalse(iModel.locks.holdsSharedLock(definitionModelId));\n await iModel.locks.acquireLocks({ exclusive: jobSubjectId });\n iModel.locks.checkExclusiveLock(jobSubjectId, \"\", \"\");\n iModel.locks.checkSharedLock(jobSubjectId, \"\", \"\");\n iModel.locks.checkSharedLock(definitionModelId, \"\", \"\");\n iModel.locks.checkExclusiveLock(definitionModelId, \"\", \"\");\n\n const spatialCategoryId = SpatialCategory.insert(iModel, definitionModelId, \"SpatialCategory\", new SubCategoryAppearance()); // throws if we get locking error\n const drawingCategoryId = DrawingCategory.insert(iModel, definitionModelId, \"DrawingCategory\", new SubCategoryAppearance());\n\n assert.isTrue(iModel.elements.getElement(spatialCategoryId).model === definitionModelId);\n assert.isTrue(iModel.elements.getElement(drawingCategoryId).model === definitionModelId);\n\n iModel.saveChanges();\n await iModel.pushChanges({ description: \"insert category\" });\n\n /*\n Create some more nesting.\n\n Job Subject <--- Lock this\n +- DefinitionPartition -- [DefinitionModel]\n | SpatialCategory\n +- Child Subject <== Insert\n +- DocumentList -- [DocumentListModel] \"\n Drawing -- [DrawingModel] \"\n */\n assert.isFalse(iModel.locks.holdsExclusiveLock(jobSubjectId));\n assert.isFalse(iModel.locks.holdsExclusiveLock(definitionModelId));\n assert.isFalse(iModel.locks.holdsSharedLock(definitionModelId));\n await iModel.locks.acquireLocks({ exclusive: jobSubjectId });\n iModel.locks.checkExclusiveLock(jobSubjectId, \"\", \"\");\n iModel.locks.checkSharedLock(IModel.repositoryModelId, \"\", \"\");\n\n const childSubjectId = Subject.insert(iModel, jobSubjectId, \"Child Subject\");\n\n const documentListModelId = DocumentListModel.insert(iModel, childSubjectId, \"Document\"); // creates DocumentList and DocumentListModel\n assert.isTrue(Id64.isValidId64(documentListModelId));\n const drawingModelId = Drawing.insert(iModel, documentListModelId, \"Drawing\"); // creates Drawing and DrawingModel\n\n assert.isTrue(iModel.elements.getElement(childSubjectId).parent?.id === jobSubjectId);\n assert.isTrue(iModel.elements.getElement(childSubjectId).model === IModel.repositoryModelId);\n assert.isTrue(iModel.elements.getElement(documentListModelId).parent?.id === childSubjectId);\n assert.isTrue(iModel.elements.getElement(documentListModelId).model === IModel.repositoryModelId);\n assert.isTrue(iModel.elements.getElement(drawingModelId).model === documentListModelId);\n\n iModel.saveChanges();\n await iModel.pushChanges({ description: \"insert doc list with nested drawing model\" });\n\n /*\n Verify that even a deeply nested insertion is covered by the exclusive lock on the top-level parent.\n\n Job Subject <--- Lock this\n +- DefinitionPartition -- DefinitionModel\n | SpatialCategory\n +- Child Subject\n +- DocumentList -- [DocumentListModel]\n Drawing -- [DrawingModel]\n DrawingGraphic <== Insert this\n */\n assert.isFalse(iModel.locks.holdsExclusiveLock(jobSubjectId));\n assert.isFalse(iModel.locks.holdsExclusiveLock(definitionModelId));\n assert.isFalse(iModel.locks.holdsSharedLock(definitionModelId));\n assert.isFalse(iModel.locks.holdsSharedLock(documentListModelId));\n assert.isFalse(iModel.locks.holdsSharedLock(drawingModelId));\n await iModel.locks.acquireLocks({ exclusive: jobSubjectId });\n iModel.locks.checkExclusiveLock(jobSubjectId, \"\", \"\");\n iModel.locks.checkSharedLock(IModel.repositoryModelId, \"\", \"\");\n iModel.locks.checkSharedLock(documentListModelId, \"\", \"\");\n iModel.locks.checkSharedLock(drawingModelId, \"\", \"\");\n\n const drawingGraphicProps1: GeometricElement2dProps = {\n classFullName: DrawingGraphic.classFullName,\n model: drawingModelId,\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 = iModel.elements.insertElement(drawingGraphicProps1);\n\n assert.isTrue(iModel.elements.getElement(drawingGraphicId1).model === drawingModelId);\n iModel.saveChanges();\n expect(iModel.locks.holdsExclusiveLock(drawingModelId)).true;\n\n const fileName = iModel[_nativeDb].getFilePath();\n iModel.close(); // close rw\n iModel = await BriefcaseDb.open({ fileName, readonly: true }); // reopen readonly\n expect(iModel.locks.isServerBased).false; // readonly sessions should not have server based locks\n\n // verify we can push changes from a readonly briefcase\n await iModel.pushChanges({ description: \"insert graphic into nested sub-model\" });\n\n // try it again to verify we can get the ServerBasedLocks again\n await iModel.pushChanges({ description: \"should do nothing\" });\n iModel.close();\n\n // reopen readwrite to verify we released all locks from readonly briefcase\n iModel = await BriefcaseDb.open({ fileName });\n expect(iModel.locks.isServerBased).true;\n const serverLocks = iModel.locks as ServerBasedLocks;\n expect(serverLocks.holdsExclusiveLock(drawingModelId)).false;\n expect(serverLocks.getLockCount(LockState.Shared)).equal(0);\n expect(serverLocks.getLockCount(LockState.Exclusive)).equal(0);\n iModel.close();\n\n });\n\n});\n"]}
1
+ {"version":3,"file":"IModelWrite.test.js","sourceRoot":"","sources":["../../../../src/test/standalone/IModelWrite.test.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 { AccessToken, DbResult, GuidString, Id64, Id64String } from \"@itwin/core-bentley\";\r\nimport {\r\n ChangesetIdWithIndex, Code, ColorDef,\r\n GeometricElement2dProps, GeometryStreamProps, IModel, IModelVersion, LockState, QueryRowFormat, RequestNewBriefcaseProps, SchemaState, SubCategoryAppearance,\r\n} from \"@itwin/core-common\";\r\nimport { Arc3d, IModelJson, Point2d, Point3d } from \"@itwin/core-geometry\";\r\nimport * as chai from \"chai\";\r\nimport { assert, expect } from \"chai\";\r\nimport * as chaiAsPromised from \"chai-as-promised\";\r\nimport * as fs from \"fs\";\r\nimport * as semver from \"semver\";\r\nimport * as sinon from \"sinon\";\r\nimport { HubWrappers, KnownTestLocations } from \"../\";\r\nimport { DrawingCategory } from \"../../Category\";\r\nimport { ECSqlStatement } from \"../../ECSqlStatement\";\r\nimport { HubMock } from \"../../internal/HubMock\";\r\nimport {\r\n _nativeDb,\r\n BriefcaseDb,\r\n BriefcaseManager,\r\n ChannelControl,\r\n CodeService, DefinitionModel, DictionaryModel, DocumentListModel, Drawing, DrawingGraphic, OpenBriefcaseArgs, SpatialCategory, Subject,\r\n} from \"../../core-backend\";\r\nimport { IModelTestUtils, TestUserType } from \"../IModelTestUtils\";\r\nimport { ServerBasedLocks } from \"../../internal/ServerBasedLocks\";\r\n\r\nchai.use(chaiAsPromised);\r\n\r\nexport async function createNewModelAndCategory(rwIModel: BriefcaseDb, parent?: Id64String) {\r\n // Create a new physical model.\r\n const [, modelId] = await IModelTestUtils.createAndInsertPhysicalPartitionAndModelAsync(rwIModel, IModelTestUtils.getUniqueModelCode(rwIModel, \"newPhysicalModel\"), true, parent);\r\n\r\n // Find or create a SpatialCategory.\r\n const dictionary: DictionaryModel = rwIModel.models.getModel<DictionaryModel>(IModel.dictionaryId);\r\n const newCategoryCode = IModelTestUtils.getUniqueSpatialCategoryCode(dictionary, \"ThisTestSpatialCategory\");\r\n const category = SpatialCategory.create(rwIModel, IModel.dictionaryId, newCategoryCode.value);\r\n const spatialCategoryId = rwIModel.elements.insertElement(category.toJSON());\r\n category.setDefaultAppearance(new SubCategoryAppearance({ color: 0xff0000 }));\r\n // const spatialCategoryId: Id64String = SpatialCategory.insert(rwIModel, IModel.dictionaryId, newCategoryCode.value!, new SubCategoryAppearance({ color: 0xff0000 }));\r\n\r\n return { modelId, spatialCategoryId };\r\n}\r\n\r\ndescribe(\"IModelWriteTest\", () => {\r\n let managerAccessToken: AccessToken;\r\n let superAccessToken: AccessToken;\r\n let iTwinId: GuidString;\r\n\r\n before(() => {\r\n HubMock.startup(\"IModelWriteTest\", KnownTestLocations.outputDir);\r\n iTwinId = HubMock.iTwinId;\r\n });\r\n after(() => HubMock.shutdown());\r\n\r\n it(\"Check busyTimeout option\", async () => {\r\n const iModelProps = {\r\n iModelName: \"ReadWriteTest\",\r\n iTwinId,\r\n };\r\n\r\n const iModelId = await HubMock.createNewIModel(iModelProps);\r\n const briefcaseProps = await BriefcaseManager.downloadBriefcase({ accessToken: \"test token\", iTwinId, iModelId });\r\n\r\n const tryOpen = async (args: OpenBriefcaseArgs) => {\r\n const start = performance.now();\r\n let didThrow = false;\r\n try {\r\n await BriefcaseDb.open(args);\r\n\r\n } catch (e: any) {\r\n assert.strictEqual(e.errorNumber, DbResult.BE_SQLITE_BUSY, \"Expect error 'Db is busy'\");\r\n didThrow = true;\r\n }\r\n assert.isTrue(didThrow);\r\n return performance.now() - start;\r\n };\r\n const seconds = (s: number) => s * 1000;\r\n\r\n const db = await BriefcaseDb.open({ fileName: briefcaseProps.fileName });\r\n db.saveChanges();\r\n // lock db so another connection cannot write to it.\r\n db.saveFileProperty({ name: \"test\", namespace: \"test\" }, \"\");\r\n\r\n assert.isAtMost(await tryOpen({ fileName: briefcaseProps.fileName, busyTimeout: seconds(0) }), seconds(1), \"open should fail with busy error instantly\");\r\n assert.isAtLeast(await tryOpen({ fileName: briefcaseProps.fileName, busyTimeout: seconds(1) }), seconds(1), \"open should fail with atleast 1 sec delay due to retry\");\r\n assert.isAtLeast(await tryOpen({ fileName: briefcaseProps.fileName, busyTimeout: seconds(2) }), seconds(2), \"open should fail with atleast 2 sec delay due to retry\");\r\n assert.isAtLeast(await tryOpen({ fileName: briefcaseProps.fileName, busyTimeout: seconds(3) }), seconds(3), \"open should fail with atleast 3 sec delay due to retry\");\r\n\r\n db.abandonChanges();\r\n db.close();\r\n });\r\n\r\n it(\"WatchForChanges\", async () => {\r\n const iModelProps = {\r\n iModelName: \"ReadWriteTest\",\r\n iTwinId,\r\n };\r\n\r\n const iModelId = await HubMock.createNewIModel(iModelProps);\r\n const briefcaseProps = await BriefcaseManager.downloadBriefcase({ accessToken: \"test token\", iTwinId, iModelId });\r\n\r\n let nClosed = 0;\r\n const fsWatcher = {\r\n callback: () => { },\r\n close: () => ++nClosed,\r\n };\r\n const watchStub: any = (_filename: fs.PathLike, _opts: fs.WatchOptions, fn: () => void) => {\r\n fsWatcher.callback = fn;\r\n return fsWatcher;\r\n };\r\n const watchStubResult = sinon.stub(fs, \"watch\").callsFake(watchStub);\r\n\r\n const bc = await BriefcaseDb.open({ fileName: briefcaseProps.fileName });\r\n bc.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n const roBC = await BriefcaseDb.open({ fileName: briefcaseProps.fileName, watchForChanges: true });\r\n\r\n const code1 = IModelTestUtils.getUniqueModelCode(bc, \"newPhysicalModel1\");\r\n await IModelTestUtils.createAndInsertPhysicalPartitionAndModelAsync(bc, code1, true);\r\n bc.saveChanges();\r\n\r\n // immediately after save changes the current txnId in the writeable briefcase changes, but it isn't reflected\r\n // in the readonly briefcase until the file watcher fires.\r\n expect(bc[_nativeDb].getCurrentTxnId()).not.equal(roBC[_nativeDb].getCurrentTxnId());\r\n\r\n // trigger watcher via stub\r\n fsWatcher.callback();\r\n\r\n // now they should match because restartDefaultTxn in the readonly briefcase reads the changes from the writeable connection\r\n expect(bc[_nativeDb].getCurrentTxnId()).equal(roBC[_nativeDb].getCurrentTxnId());\r\n\r\n roBC.close();\r\n expect(nClosed).equal(1);\r\n\r\n bc.close();\r\n // NOTE: Since HubMock.startup() is called in the before() block and not beforeEach(), we CANNOT\r\n // call sinon.restore() here. This is because sinon.restore() will restore the stubs for\r\n // CloudSqlite that HubMock.startup() put in place.\r\n watchStubResult.restore();\r\n });\r\n\r\n function expectEqualChangesets(a: ChangesetIdWithIndex, b: ChangesetIdWithIndex): void {\r\n expect(a.id).to.equal(b.id);\r\n expect(a.index).to.equal(b.index);\r\n }\r\n\r\n it(\"WatchForChanges - push\", async () => {\r\n const adminAccessToken = await HubWrappers.getAccessToken(TestUserType.SuperManager);\r\n const iModelProps = {\r\n iModelName: \"ReadWriteTest\",\r\n iTwinId,\r\n };\r\n\r\n const iModelId = await HubMock.createNewIModel(iModelProps);\r\n const briefcaseProps = await BriefcaseManager.downloadBriefcase({ accessToken: adminAccessToken, iTwinId, iModelId });\r\n\r\n let nClosed = 0;\r\n const fsWatcher = {\r\n callback: () => { },\r\n close: () => ++nClosed,\r\n };\r\n const watchStub: any = (_filename: fs.PathLike, _opts: fs.WatchOptions, fn: () => void) => {\r\n fsWatcher.callback = fn;\r\n return fsWatcher;\r\n };\r\n const watchStubResult = sinon.stub(fs, \"watch\").callsFake(watchStub);\r\n\r\n const bc = await BriefcaseDb.open({ fileName: briefcaseProps.fileName });\r\n bc.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n const roBC = await BriefcaseDb.open({ fileName: briefcaseProps.fileName, watchForChanges: true });\r\n\r\n const code1 = IModelTestUtils.getUniqueModelCode(bc, \"newPhysicalModel1\");\r\n await IModelTestUtils.createAndInsertPhysicalPartitionAndModelAsync(bc, code1, true);\r\n bc.saveChanges();\r\n\r\n // immediately after save changes the current txnId in the writeable briefcase changes, but it isn't reflected\r\n // in the readonly briefcase until the file watcher fires.\r\n expect(bc[_nativeDb].getCurrentTxnId()).not.equal(roBC[_nativeDb].getCurrentTxnId());\r\n\r\n // trigger watcher via stub\r\n fsWatcher.callback();\r\n\r\n // now they should match because restartDefaultTxn in the readonly briefcase reads the changes from the writeable connection\r\n expect(bc[_nativeDb].getCurrentTxnId()).equal(roBC[_nativeDb].getCurrentTxnId());\r\n\r\n // Push the changes to the hub\r\n\r\n const prePushChangeset = bc.changeset;\r\n let eventRaised = false;\r\n roBC.onChangesetChanged.addOnce((prevCS) => {\r\n expectEqualChangesets(prevCS, prePushChangeset);\r\n eventRaised = true;\r\n });\r\n\r\n await bc.pushChanges({ accessToken: adminAccessToken, description: \"test\" });\r\n const postPushChangeset = bc.changeset;\r\n assert(!!postPushChangeset);\r\n expect(prePushChangeset !== postPushChangeset, \"changes should be pushed\");\r\n\r\n // trigger watcher via stub\r\n fsWatcher.callback();\r\n\r\n expectEqualChangesets(roBC.changeset, postPushChangeset);\r\n expect(roBC[_nativeDb].getCurrentTxnId(), \"txn should be updated\").equal(bc[_nativeDb].getCurrentTxnId());\r\n expect(eventRaised).to.be.true;\r\n\r\n roBC.close();\r\n expect(nClosed).equal(1);\r\n\r\n bc.close();\r\n // NOTE: Since HubMock.startup() is called in the before() block and not beforeEach(), we CANNOT\r\n // call sinon.restore() here. This is because sinon.restore() will restore the stubs for\r\n // CloudSqlite that HubMock.startup() put in place.\r\n watchStubResult.restore();\r\n });\r\n\r\n it(\"WatchForChanges - pull\", async () => {\r\n const adminAccessToken = await HubWrappers.getAccessToken(TestUserType.SuperManager);\r\n\r\n const pathname = IModelTestUtils.resolveAssetFile(\"CompatibilityTestSeed.bim\");\r\n const hubName = \"CompatibilityTest\";\r\n const iModelId = await HubWrappers.pushIModel(managerAccessToken, iTwinId, pathname, hubName, true);\r\n\r\n // Download two copies of the briefcase - manager and super\r\n const args: RequestNewBriefcaseProps = { iTwinId, iModelId };\r\n const initialDb = await BriefcaseManager.downloadBriefcase({ accessToken: adminAccessToken, ...args });\r\n const briefcaseProps = await BriefcaseManager.downloadBriefcase({ accessToken: adminAccessToken, ...args });\r\n\r\n // Push some changes - prep for pull workflow.\r\n const bc1 = await BriefcaseDb.open({ fileName: initialDb.fileName });\r\n bc1.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n const code2 = IModelTestUtils.getUniqueModelCode(bc1, \"newPhysicalModel2\");\r\n await IModelTestUtils.createAndInsertPhysicalPartitionAndModelAsync(bc1, code2, true);\r\n const prePushChangeset = bc1.changeset;\r\n bc1.saveChanges();\r\n await bc1.pushChanges({ accessToken: adminAccessToken, description: \"test\" });\r\n const postPushChangeset = bc1.changeset;\r\n assert(!!prePushChangeset);\r\n expect(prePushChangeset !== postPushChangeset, \"changes should be pushed\");\r\n\r\n bc1.close();\r\n\r\n // Writer that pulls + watcher.\r\n let nClosed = 0;\r\n const fsWatcher = {\r\n callback: () => { },\r\n close: () => ++nClosed,\r\n };\r\n const watchStub: any = (_filename: fs.PathLike, _opts: fs.WatchOptions, fn: () => void) => {\r\n fsWatcher.callback = fn;\r\n return fsWatcher;\r\n };\r\n const watchStubResult = sinon.stub(fs, \"watch\").callsFake(watchStub);\r\n\r\n const bc = await BriefcaseDb.open({ fileName: briefcaseProps.fileName });\r\n bc.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n const roBC = await BriefcaseDb.open({ fileName: briefcaseProps.fileName, watchForChanges: true });\r\n\r\n const prePullChangeset = bc.changeset;\r\n let eventRaised = false;\r\n roBC.onChangesetChanged.addOnce((prevCS) => {\r\n expectEqualChangesets(prevCS, prePushChangeset);\r\n eventRaised = true;\r\n });\r\n\r\n await bc.pullChanges();\r\n\r\n const postPullChangeset = bc.changeset;\r\n assert(!!postPullChangeset);\r\n expect(prePullChangeset !== postPullChangeset, \"changes should be pulled\");\r\n\r\n // trigger watcher via stub\r\n fsWatcher.callback();\r\n\r\n expectEqualChangesets(roBC.changeset, postPullChangeset);\r\n expect(roBC[_nativeDb].getCurrentTxnId(), \"txn should be updated\").equal(bc[_nativeDb].getCurrentTxnId());\r\n expect(eventRaised).to.be.true;\r\n\r\n roBC.close();\r\n expect(nClosed).equal(1);\r\n\r\n bc.close();\r\n // NOTE: Since HubMock.startup() is called in the before() block and not beforeEach(), we CANNOT\r\n // call sinon.restore() here. This is because sinon.restore() will restore the stubs for\r\n // CloudSqlite that HubMock.startup() put in place.\r\n watchStubResult.restore();\r\n });\r\n\r\n it(\"should handle undo/redo\", async () => {\r\n const adminAccessToken = await HubWrappers.getAccessToken(TestUserType.SuperManager);\r\n // Delete any existing iModels with the same name as the read-write test iModel\r\n const iModelName = \"CodesUndoRedoPushTest\";\r\n\r\n // Create a new empty iModel on the Hub & obtain a briefcase\r\n const rwIModelId = await HubMock.createNewIModel({ accessToken: adminAccessToken, iTwinId, iModelName, description: \"TestSubject\" });\r\n assert.isNotEmpty(rwIModelId);\r\n const rwIModel = await HubWrappers.downloadAndOpenBriefcase({ accessToken: adminAccessToken, iTwinId, iModelId: rwIModelId });\r\n rwIModel.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n\r\n // create and insert a new model with code1\r\n const code1 = IModelTestUtils.getUniqueModelCode(rwIModel, \"newPhysicalModel1\");\r\n await IModelTestUtils.createAndInsertPhysicalPartitionAndModelAsync(rwIModel, code1, true);\r\n assert.isTrue(rwIModel.elements.getElement(code1) !== undefined); // throws if element is not found\r\n\r\n // create a local txn with that change\r\n rwIModel.saveChanges(\"inserted newPhysicalModel\");\r\n\r\n // Reverse that local txn\r\n rwIModel.txns.reverseSingleTxn();\r\n\r\n try {\r\n // The model that I just created with code1 should no longer be there.\r\n const theNewModel = rwIModel.elements.getElement(code1); // throws if element is not found\r\n assert.isTrue(theNewModel === undefined); // really should not be here.\r\n assert.fail(); // should not be here.\r\n } catch {\r\n // this is what I expect\r\n }\r\n\r\n // Create and insert a model with code2\r\n const code2 = IModelTestUtils.getUniqueModelCode(rwIModel, \"newPhysicalModel2\");\r\n await IModelTestUtils.createAndInsertPhysicalPartitionAndModelAsync(rwIModel, code2, true);\r\n rwIModel.saveChanges(\"inserted generic objects\");\r\n\r\n // The iModel should have a model with code1 and not code2\r\n assert.isTrue(rwIModel.elements.getElement(code2) !== undefined); // throws if element is not found\r\n\r\n // Push the changes to the hub\r\n const prePushChangeset = rwIModel.changeset;\r\n await rwIModel.pushChanges({ accessToken: adminAccessToken, description: \"test\" });\r\n const postPushChangeset = rwIModel.changeset;\r\n assert(!!postPushChangeset);\r\n expect(prePushChangeset !== postPushChangeset);\r\n\r\n rwIModel.close();\r\n });\r\n\r\n it(\"should be able to upgrade a briefcase with an older schema\", async () => {\r\n /**\r\n * Test validates that -\r\n * - User \"manager\" upgrades the BisCore schema in the briefcase from version 1.0.0 to 1.0.10+\r\n * - User \"super\" can get the upgrade \"manager\" made\r\n */\r\n\r\n /* Setup test - Push an iModel with an old BisCore schema up to the Hub */\r\n const pathname = IModelTestUtils.resolveAssetFile(\"CompatibilityTestSeed.bim\");\r\n const hubName = \"CompatibilityTest\";\r\n const iModelId = await HubWrappers.pushIModel(managerAccessToken, iTwinId, pathname, hubName, true);\r\n\r\n // Download two copies of the briefcase - manager and super\r\n const args: RequestNewBriefcaseProps = { iTwinId, iModelId };\r\n const managerBriefcaseProps = await BriefcaseManager.downloadBriefcase({ accessToken: managerAccessToken, ...args });\r\n const superBriefcaseProps = await BriefcaseManager.downloadBriefcase({ accessToken: superAccessToken, ...args });\r\n\r\n /* User \"manager\" upgrades the briefcase */\r\n\r\n // Validate the original state of the BisCore schema in the briefcase\r\n let iModel = await BriefcaseDb.open({ fileName: managerBriefcaseProps.fileName });\r\n const beforeVersion = iModel.querySchemaVersion(\"BisCore\");\r\n assert.isTrue(semver.satisfies(beforeVersion!, \"= 1.0.0\"));\r\n assert.isFalse(iModel[_nativeDb].hasPendingTxns());\r\n iModel.close();\r\n\r\n // Validate that the BisCore schema is recognized as a recommended upgrade\r\n let schemaState = BriefcaseDb.validateSchemas(managerBriefcaseProps.fileName, true);\r\n assert.strictEqual(schemaState, SchemaState.UpgradeRecommended);\r\n\r\n // Upgrade the schemas\r\n await BriefcaseDb.upgradeSchemas(managerBriefcaseProps);\r\n\r\n // Validate state after upgrade\r\n iModel = await BriefcaseDb.open({ fileName: managerBriefcaseProps.fileName });\r\n const afterVersion = iModel.querySchemaVersion(\"BisCore\");\r\n assert.isTrue(semver.satisfies(afterVersion!, \">= 1.0.10\"));\r\n assert.isFalse(iModel[_nativeDb].hasPendingTxns());\r\n assert.isFalse(iModel.holdsSchemaLock);\r\n assert.isFalse(iModel[_nativeDb].hasUnsavedChanges());\r\n iModel.close();\r\n\r\n /* User \"super\" can get the upgrade \"manager\" made */\r\n\r\n // Validate that the BisCore schema is recognized as a recommended upgrade\r\n schemaState = BriefcaseDb.validateSchemas(superBriefcaseProps.fileName, true);\r\n assert.strictEqual(schemaState, SchemaState.UpgradeRecommended);\r\n\r\n // Open briefcase and pull change sets to upgrade\r\n const superIModel = await BriefcaseDb.open({ fileName: superBriefcaseProps.fileName });\r\n (superBriefcaseProps.changeset as any) = await superIModel.pullChanges({ accessToken: superAccessToken });\r\n const superVersion = superIModel.querySchemaVersion(\"BisCore\");\r\n assert.isTrue(semver.satisfies(superVersion!, \">= 1.0.10\"));\r\n assert.isFalse(superIModel[_nativeDb].hasUnsavedChanges()); // Validate no changes were made\r\n assert.isFalse(superIModel[_nativeDb].hasPendingTxns()); // Validate no changes were made\r\n superIModel.close();\r\n\r\n // Validate that there are no upgrades required\r\n schemaState = BriefcaseDb.validateSchemas(superBriefcaseProps.fileName, true);\r\n assert.strictEqual(schemaState, SchemaState.UpToDate);\r\n\r\n // Upgrade the schemas - ensure this is a no-op\r\n await BriefcaseDb.upgradeSchemas(superBriefcaseProps);\r\n await HubMock.deleteIModel({ accessToken: managerAccessToken, iTwinId, iModelId });\r\n });\r\n\r\n it(\"changeset size and ec schema version change\", async () => {\r\n const adminToken = \"super manager token\";\r\n const iModelName = \"changeset_size\";\r\n const rwIModelId = await HubMock.createNewIModel({ iTwinId, iModelName, description: \"TestSubject\", accessToken: adminToken });\r\n assert.isNotEmpty(rwIModelId);\r\n const rwIModel = await HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken });\r\n assert.equal(rwIModel[_nativeDb].enableChangesetSizeStats(true), DbResult.BE_SQLITE_OK);\r\n const schema = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"TestDomain\" alias=\"ts\" version=\"01.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\r\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\r\n <ECEntityClass typeName=\"Test2dElement\">\r\n <BaseClass>bis:GraphicalElement2d</BaseClass>\r\n <ECProperty propertyName=\"s\" typeName=\"string\"/>\r\n </ECEntityClass>\r\n </ECSchema>`;\r\n await rwIModel.importSchemaStrings([schema]);\r\n rwIModel.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n rwIModel.saveChanges(\"user 1: schema changeset\");\r\n if (true || \"push changes\") {\r\n // Push the changes to the hub\r\n const prePushChangeSetId = rwIModel.changeset.id;\r\n await rwIModel.pushChanges({ description: \"push schema changeset\", accessToken: adminToken });\r\n const postPushChangeSetId = rwIModel.changeset.id;\r\n assert(!!postPushChangeSetId);\r\n expect(prePushChangeSetId !== postPushChangeSetId);\r\n const changesets = await HubMock.queryChangesets({ iModelId: rwIModelId, accessToken: superAccessToken });\r\n assert.equal(changesets.length, 1);\r\n }\r\n await rwIModel.locks.acquireLocks({ shared: IModel.dictionaryId });\r\n const codeProps = Code.createEmpty();\r\n codeProps.value = \"DrawingModel\";\r\n let totalEl = 0;\r\n const [, drawingModelId] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(rwIModel, codeProps, true);\r\n let drawingCategoryId = DrawingCategory.queryCategoryIdByName(rwIModel, IModel.dictionaryId, \"MyDrawingCategory\");\r\n if (undefined === drawingCategoryId)\r\n drawingCategoryId = DrawingCategory.insert(rwIModel, IModel.dictionaryId, \"MyDrawingCategory\", new SubCategoryAppearance({ color: ColorDef.fromString(\"rgb(255,0,0)\").toJSON() }));\r\n\r\n const insertElements = (imodel: BriefcaseDb, className: string = \"Test2dElement\", noOfElements: number = 10, userProp: (n: number) => object) => {\r\n for (let m = 0; m < noOfElements; ++m) {\r\n const geomArray: Arc3d[] = [\r\n Arc3d.createXY(Point3d.create(0, 0), 5),\r\n Arc3d.createXY(Point3d.create(5, 5), 2),\r\n Arc3d.createXY(Point3d.create(-5, -5), 20),\r\n ];\r\n const geometryStream: GeometryStreamProps = [];\r\n for (const geom of geomArray) {\r\n const arcData = IModelJson.Writer.toIModelJson(geom);\r\n geometryStream.push(arcData);\r\n }\r\n const prop = userProp(++totalEl);\r\n // Create props\r\n const geomElement = {\r\n classFullName: `TestDomain:${className}`,\r\n model: drawingModelId,\r\n category: drawingCategoryId,\r\n code: Code.createEmpty(),\r\n geom: geometryStream,\r\n ...prop,\r\n };\r\n const id = imodel.elements.insertElement(geomElement);\r\n assert.isTrue(Id64.isValidId64(id), \"insert worked\");\r\n }\r\n };\r\n const str = new Array(1024).join(\"x\");\r\n insertElements(rwIModel, \"Test2dElement\", 1024, () => {\r\n return { s: str };\r\n });\r\n assert.equal(1357648, rwIModel[_nativeDb].getChangesetSize());\r\n\r\n rwIModel.saveChanges(\"user 1: data\");\r\n assert.equal(0, rwIModel[_nativeDb].getChangesetSize());\r\n await rwIModel.pushChanges({ description: \"schema changeset\", accessToken: adminToken });\r\n rwIModel.close();\r\n });\r\n\r\n it(\"should set a fake verifyCode for codeService that throws error for operations that affect code, if failed to open codeService \", async () => {\r\n const iModelProps = {\r\n iModelName: \"codeServiceTest\",\r\n iTwinId,\r\n };\r\n const iModelId = await HubMock.createNewIModel(iModelProps);\r\n const briefcaseProps = await BriefcaseManager.downloadBriefcase({ accessToken: \"codeServiceTest\", iTwinId, iModelId });\r\n const originalCreateForIModel = CodeService.createForIModel;\r\n // can be any errors except 'NoCodeIndex'\r\n CodeService.createForIModel = async () => {\r\n throw new CodeService.Error(\"MissingCode\", 0x10000 + 1, \" \");\r\n };\r\n const briefcaseDb = await BriefcaseDb.open({ fileName: briefcaseProps.fileName });\r\n briefcaseDb.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n let firstNonRootElement = { id: undefined, codeValue: \"test\" };\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n briefcaseDb.withPreparedStatement(\"SELECT * from Bis.Element LIMIT 1 OFFSET 1\", (stmt: ECSqlStatement) => {\r\n if (stmt.step() === DbResult.BE_SQLITE_ROW) {\r\n firstNonRootElement = stmt.getRow();\r\n }\r\n });\r\n // make change to the briefcaseDb that does not affect code, e.g., save file property\r\n // expect no error from verifyCode\r\n expect(() => briefcaseDb.saveFileProperty({ name: \"codeServiceProp\", namespace: \"codeService\", id: 1, subId: 1 }, \"codeService test\")).to.not.throw();\r\n // make change to the briefcaseDb that affects code that will invoke verifyCode, e.g., update an element with a non-null code\r\n // expect error from verifyCode\r\n let newProps = { id: firstNonRootElement.id, code: { ...Code.createEmpty(), value: firstNonRootElement.codeValue }, classFullName: undefined, model: undefined };\r\n await briefcaseDb.locks.acquireLocks({ exclusive: firstNonRootElement.id });\r\n expect(() => briefcaseDb.elements.updateElement(newProps)).to.throw(CodeService.Error);\r\n // make change to the briefcaseDb that will invoke verifyCode with a null(empty) code, e.g., update an element with a null(empty) code\r\n // expect no error from verifyCode\r\n newProps = { id: firstNonRootElement.id, code: Code.createEmpty(), classFullName: undefined, model: undefined };\r\n expect(() => briefcaseDb.elements.updateElement(newProps)).to.not.throw();\r\n briefcaseDb.close();\r\n // throw \"NoCodeIndex\", this error should get ignored because it means the iModel isn't enforcing codes. updating an element with an empty code and a non empty code should work without issue.\r\n CodeService.createForIModel = async () => {\r\n throw new CodeService.Error(\"NoCodeIndex\", 0x10000 + 1, \" \");\r\n };\r\n const briefcaseDb2 = await BriefcaseDb.open({ fileName: briefcaseProps.fileName });\r\n briefcaseDb2.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n await briefcaseDb2.locks.acquireLocks({ exclusive: firstNonRootElement.id });\r\n // expect no error from verifyCode for empty code\r\n expect(() => briefcaseDb2.elements.updateElement(newProps)).to.not.throw();\r\n newProps = { id: firstNonRootElement.id, code: { ...Code.createEmpty(), value: firstNonRootElement.codeValue }, classFullName: undefined, model: undefined };\r\n // make change to the briefcaseDb that affects code that will invoke verifyCode, e.g., update an element with a non-null code\r\n // expect no error from verifyCode\r\n expect(() => briefcaseDb2.elements.updateElement(newProps)).to.not.throw();\r\n // clean up\r\n CodeService.createForIModel = originalCreateForIModel;\r\n briefcaseDb2.close();\r\n });\r\n\r\n it(\"clear cache on schema changes\", async () => {\r\n const adminToken = await HubWrappers.getAccessToken(TestUserType.SuperManager);\r\n const userToken = await HubWrappers.getAccessToken(TestUserType.Super);\r\n // Delete any existing iModels with the same name as the OptimisticConcurrencyTest iModel\r\n const iModelName = \"SchemaChanges\";\r\n\r\n // Create a new empty iModel on the Hub & obtain a briefcase\r\n const rwIModelId = await HubMock.createNewIModel({ iTwinId, iModelName, description: \"TestSubject\" });\r\n assert.isNotEmpty(rwIModelId);\r\n const rwIModel = await HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken });\r\n\r\n const rwIModel2 = await HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: userToken });\r\n\r\n // enable change tracking\r\n assert.equal(rwIModel[_nativeDb].enableChangesetSizeStats(true), DbResult.BE_SQLITE_OK);\r\n assert.equal(rwIModel2[_nativeDb].enableChangesetSizeStats(true), DbResult.BE_SQLITE_OK);\r\n\r\n const schema = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"TestDomain\" alias=\"ts\" version=\"01.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\r\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\r\n <ECEntityClass typeName=\"Test2dElement\">\r\n <BaseClass>bis:GraphicalElement2d</BaseClass>\r\n <ECProperty propertyName=\"s\" typeName=\"string\"/>\r\n </ECEntityClass>\r\n </ECSchema>`;\r\n await rwIModel.importSchemaStrings([schema]);\r\n rwIModel.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n rwIModel2.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n\r\n rwIModel.saveChanges(\"user 1: schema changeset\");\r\n if (true || \"push changes\") {\r\n // Push the changes to the hub\r\n const prePushChangeSetId = rwIModel.changeset.id;\r\n await rwIModel.pushChanges({ description: \"schema changeset\", accessToken: adminToken });\r\n const postPushChangeSetId = rwIModel.changeset.id;\r\n assert(!!postPushChangeSetId);\r\n expect(prePushChangeSetId !== postPushChangeSetId);\r\n const changesets = await HubMock.queryChangesets({ iModelId: rwIModelId, accessToken: superAccessToken });\r\n assert.equal(changesets.length, 1);\r\n }\r\n const codeProps = Code.createEmpty();\r\n codeProps.value = \"DrawingModel\";\r\n let totalEl = 0;\r\n await rwIModel.locks.acquireLocks({ shared: IModel.dictionaryId });\r\n const [, drawingModelId] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(rwIModel, codeProps, true);\r\n let drawingCategoryId = DrawingCategory.queryCategoryIdByName(rwIModel, IModel.dictionaryId, \"MyDrawingCategory\");\r\n if (undefined === drawingCategoryId)\r\n drawingCategoryId = DrawingCategory.insert(rwIModel, IModel.dictionaryId, \"MyDrawingCategory\", new SubCategoryAppearance({ color: ColorDef.fromString(\"rgb(255,0,0)\").toJSON() }));\r\n\r\n const insertElements = (imodel: BriefcaseDb, className: string = \"Test2dElement\", noOfElements: number = 10, userProp: (n: number) => object) => {\r\n for (let m = 0; m < noOfElements; ++m) {\r\n const geomArray: Arc3d[] = [\r\n Arc3d.createXY(Point3d.create(0, 0), 5),\r\n Arc3d.createXY(Point3d.create(5, 5), 2),\r\n Arc3d.createXY(Point3d.create(-5, -5), 20),\r\n ];\r\n const geometryStream: GeometryStreamProps = [];\r\n for (const geom of geomArray) {\r\n const arcData = IModelJson.Writer.toIModelJson(geom);\r\n geometryStream.push(arcData);\r\n }\r\n const prop = userProp(++totalEl);\r\n // Create props\r\n const geomElement = {\r\n classFullName: `TestDomain:${className}`,\r\n model: drawingModelId,\r\n category: drawingCategoryId,\r\n code: Code.createEmpty(),\r\n geom: geometryStream,\r\n ...prop,\r\n };\r\n const id = imodel.elements.insertElement(geomElement);\r\n assert.isTrue(Id64.isValidId64(id), \"insert worked\");\r\n }\r\n };\r\n\r\n insertElements(rwIModel, \"Test2dElement\", 10, (n: number) => {\r\n return { s: `s-${n}` };\r\n });\r\n\r\n assert.equal(3889, rwIModel[_nativeDb].getChangesetSize());\r\n rwIModel.saveChanges(\"user 1: data changeset\");\r\n\r\n if (true || \"push changes\") {\r\n // Push the changes to the hub\r\n const prePushChangeSetId = rwIModel.changeset.id;\r\n await rwIModel.pushChanges({ description: \"10 instances of test2dElement\", accessToken: adminToken });\r\n const postPushChangeSetId = rwIModel.changeset.id;\r\n assert(!!postPushChangeSetId);\r\n expect(prePushChangeSetId !== postPushChangeSetId);\r\n const changesets = await HubMock.queryChangesets({ iModelId: rwIModelId, accessToken: superAccessToken });\r\n assert.equal(changesets.length, 2);\r\n }\r\n let rows: any[] = [];\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n rwIModel.withPreparedStatement(\"SELECT * FROM TestDomain.Test2dElement\", (stmt: ECSqlStatement) => {\r\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\r\n rows.push(stmt.getRow());\r\n }\r\n });\r\n assert.equal(rows.length, 10);\r\n assert.equal(rows.map((r) => r.s).filter((v) => v).length, 10);\r\n rows = [];\r\n for await (const queryRow of rwIModel.createQueryReader(\"SELECT * FROM TestDomain.Test2dElement\", undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames })) {\r\n rows.push(queryRow.toRow());\r\n }\r\n assert.equal(rows.length, 10);\r\n assert.equal(rows.map((r) => r.s).filter((v) => v).length, 10);\r\n if (true || \"user pull/merge\") {\r\n // pull and merge changes\r\n await rwIModel2.pullChanges({ accessToken: userToken });\r\n rows = [];\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n rwIModel2.withPreparedStatement(\"SELECT * FROM TestDomain.Test2dElement\", (stmt: ECSqlStatement) => {\r\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\r\n rows.push(stmt.getRow());\r\n }\r\n });\r\n assert.equal(rows.length, 10);\r\n assert.equal(rows.map((r) => r.s).filter((v) => v).length, 10);\r\n rows = [];\r\n for await (const queryRow of rwIModel2.createQueryReader(\"SELECT * FROM TestDomain.Test2dElement\", undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames })) {\r\n rows.push(queryRow.toRow());\r\n }\r\n assert.equal(rows.length, 10);\r\n assert.equal(rows.map((r) => r.s).filter((v) => v).length, 10);\r\n // create some element and push those changes\r\n await rwIModel2.locks.acquireLocks({ shared: drawingModelId });\r\n insertElements(rwIModel2, \"Test2dElement\", 10, (n: number) => {\r\n return { s: `s-${n}` };\r\n });\r\n assert.equal(0, rwIModel[_nativeDb].getChangesetSize());\r\n rwIModel2.saveChanges(\"user 2: data changeset\");\r\n\r\n if (true || \"push changes\") {\r\n // Push the changes to the hub\r\n const prePushChangeSetId = rwIModel2.changeset.id;\r\n await rwIModel2.pushChanges({ accessToken: userToken, description: \"10 instances of test2dElement\" });\r\n const postPushChangeSetId = rwIModel2.changeset.id;\r\n assert(!!postPushChangeSetId);\r\n expect(prePushChangeSetId !== postPushChangeSetId);\r\n const changesets = await HubMock.queryChangesets({ iModelId: rwIModelId, accessToken: userToken });\r\n assert.equal(changesets.length, 3);\r\n }\r\n }\r\n await rwIModel.pullChanges({ accessToken: adminToken });\r\n // second schema import ==============================================================\r\n const schemaV2 = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"TestDomain\" alias=\"ts\" version=\"01.01\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\r\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\r\n <ECEntityClass typeName=\"Test2dElement\">\r\n <BaseClass>bis:GraphicalElement2d</BaseClass>\r\n <ECProperty propertyName=\"s\" typeName=\"string\"/>\r\n <ECProperty propertyName=\"v\" typeName=\"string\"/>\r\n </ECEntityClass>\r\n <ECEntityClass typeName=\"Test2dElement2nd\">\r\n <BaseClass>bis:GraphicalElement2d</BaseClass>\r\n <ECProperty propertyName=\"t\" typeName=\"string\"/>\r\n <ECProperty propertyName=\"r\" typeName=\"string\"/>\r\n </ECEntityClass>\r\n </ECSchema>`;\r\n await rwIModel.importSchemaStrings([schemaV2]);\r\n assert.equal(0, rwIModel[_nativeDb].getChangesetSize());\r\n rwIModel.saveChanges(\"user 1: schema changeset2\");\r\n if (true || \"push changes\") {\r\n // Push the changes to the hub\r\n const prePushChangeSetId = rwIModel.changeset.id;\r\n await rwIModel.pushChanges({ accessToken: adminToken, description: \"schema changeset\" });\r\n const postPushChangeSetId = rwIModel.changeset.id;\r\n assert(!!postPushChangeSetId);\r\n expect(prePushChangeSetId !== postPushChangeSetId);\r\n const changesets = await HubMock.queryChangesets({ iModelId: rwIModelId, accessToken: superAccessToken });\r\n assert.equal(changesets.length, 4);\r\n }\r\n // create some element and push those changes\r\n await rwIModel.locks.acquireLocks({ shared: drawingModelId });\r\n insertElements(rwIModel, \"Test2dElement\", 10, (n: number) => {\r\n return {\r\n s: `s-${n}`, v: `v-${n}`,\r\n };\r\n });\r\n\r\n // create some element and push those changes\r\n insertElements(rwIModel, \"Test2dElement2nd\", 10, (n: number) => {\r\n return {\r\n t: `t-${n}`, r: `r-${n}`,\r\n };\r\n });\r\n assert.equal(6266, rwIModel[_nativeDb].getChangesetSize());\r\n rwIModel.saveChanges(\"user 1: data changeset\");\r\n\r\n if (true || \"push changes\") {\r\n // Push the changes to the hub\r\n const prePushChangeSetId = rwIModel.changeset.id;\r\n await rwIModel.pushChanges({ accessToken: adminToken, description: \"10 instances of test2dElement\" });\r\n const postPushChangeSetId = rwIModel.changeset.id;\r\n assert(!!postPushChangeSetId);\r\n expect(prePushChangeSetId !== postPushChangeSetId);\r\n const changesets = await HubMock.queryChangesets({ iModelId: rwIModelId, accessToken: superAccessToken });\r\n assert.equal(changesets.length, 5);\r\n }\r\n rows = [];\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n rwIModel.withPreparedStatement(\"SELECT * FROM TestDomain.Test2dElement\", (stmt: ECSqlStatement) => {\r\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\r\n rows.push(stmt.getRow());\r\n }\r\n });\r\n assert.equal(rows.length, 30);\r\n assert.equal(rows.map((r) => r.s).filter((v) => v).length, 30);\r\n assert.equal(rows.map((r) => r.v).filter((v) => v).length, 10);\r\n rows = [];\r\n for await (const queryRow of rwIModel.createQueryReader(\"SELECT * FROM TestDomain.Test2dElement\", undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames })) {\r\n rows.push(queryRow.toRow());\r\n }\r\n assert.equal(rows.length, 30);\r\n assert.equal(rows.map((r) => r.s).filter((v) => v).length, 30);\r\n assert.equal(rows.map((r) => r.v).filter((v) => v).length, 10);\r\n\r\n rows = [];\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n rwIModel.withPreparedStatement(\"SELECT * FROM TestDomain.Test2dElement2nd\", (stmt: ECSqlStatement) => {\r\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\r\n rows.push(stmt.getRow());\r\n }\r\n });\r\n assert.equal(rows.length, 10);\r\n assert.equal(rows.map((r) => r.t).filter((v) => v).length, 10);\r\n assert.equal(rows.map((r) => r.r).filter((v) => v).length, 10);\r\n rows = [];\r\n for await (const queryRow of rwIModel.createQueryReader(\"SELECT * FROM TestDomain.Test2dElement2nd\", undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames })) {\r\n rows.push(queryRow.toRow());\r\n }\r\n assert.equal(rows.length, 10);\r\n assert.equal(rows.map((r) => r.t).filter((v) => v).length, 10);\r\n assert.equal(rows.map((r) => r.r).filter((v) => v).length, 10);\r\n\r\n if (true || \"user pull/merge\") {\r\n // pull and merge changes\r\n await rwIModel2.pullChanges({ accessToken: userToken });\r\n rows = [];\r\n // Following fail without the fix in briefcase manager where we clear statement cache on schema changeset apply\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n rwIModel2.withPreparedStatement(\"SELECT * FROM TestDomain.Test2dElement\", (stmt: ECSqlStatement) => {\r\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\r\n rows.push(stmt.getRow());\r\n }\r\n });\r\n assert.equal(rows.length, 30);\r\n assert.equal(rows.map((r) => r.s).filter((v) => v).length, 30);\r\n assert.equal(rows.map((r) => r.v).filter((v) => v).length, 10);\r\n rows = [];\r\n // Following fail without native side fix where we clear concurrent query cache on schema changeset apply\r\n for await (const queryRow of rwIModel2.createQueryReader(\"SELECT * FROM TestDomain.Test2dElement\", undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames })) {\r\n rows.push(queryRow.toRow());\r\n }\r\n assert.equal(rows.length, 30);\r\n assert.equal(rows.map((r) => r.s).filter((v) => v).length, 30);\r\n assert.equal(rows.map((r) => r.v).filter((v) => v).length, 10);\r\n for (const row of rows) {\r\n const el: any = rwIModel2.elements.getElementProps(row.id);\r\n assert.isDefined(el);\r\n if (row.s) {\r\n assert.equal(row.s, el.s);\r\n } else {\r\n assert.isUndefined(el.s);\r\n }\r\n if (row.v) {\r\n assert.equal(row.v, el.v);\r\n } else {\r\n assert.isUndefined(el.v);\r\n }\r\n }\r\n rows = [];\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n rwIModel2.withPreparedStatement(\"SELECT * FROM TestDomain.Test2dElement2nd\", (stmt: ECSqlStatement) => {\r\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\r\n rows.push(stmt.getRow());\r\n }\r\n });\r\n assert.equal(rows.length, 10);\r\n assert.equal(rows.map((r) => r.t).filter((v) => v).length, 10);\r\n assert.equal(rows.map((r) => r.r).filter((v) => v).length, 10);\r\n for (const row of rows) {\r\n const el: any = rwIModel2.elements.getElementProps(row.id);\r\n assert.isDefined(el);\r\n if (row.s) {\r\n assert.equal(row.s, el.s);\r\n } else {\r\n assert.isUndefined(el.s);\r\n }\r\n if (row.v) {\r\n assert.equal(row.v, el.v);\r\n } else {\r\n assert.isUndefined(el.v);\r\n }\r\n }\r\n rows = [];\r\n for await (const queryRow of rwIModel2.createQueryReader(\"SELECT * FROM TestDomain.Test2dElement2nd\", undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames })) {\r\n rows.push(queryRow.toRow());\r\n }\r\n assert.equal(rows.length, 10);\r\n assert.equal(rows.map((r) => r.t).filter((v) => v).length, 10);\r\n assert.equal(rows.map((r) => r.r).filter((v) => v).length, 10);\r\n for (const row of rows) {\r\n const el: any = rwIModel2.elements.getElementProps(row.id);\r\n assert.isDefined(el);\r\n if (row.t) {\r\n assert.equal(row.t, el.t);\r\n } else {\r\n assert.isUndefined(el.t);\r\n }\r\n if (row.r) {\r\n assert.equal(row.r, el.r);\r\n } else {\r\n assert.isUndefined(el.r);\r\n }\r\n }\r\n }\r\n rwIModel.close();\r\n rwIModel2.close();\r\n });\r\n\r\n it(\"pulling a changeset with extents changes should update the extents of the opened imodel\", async () => {\r\n const accessToken = await HubWrappers.getAccessToken(TestUserType.Regular);\r\n const version0 = IModelTestUtils.resolveAssetFile(\"mirukuru.ibim\");\r\n const iModelId = await HubMock.createNewIModel({ iTwinId, iModelName: \"projectExtentsTest\", version0 });\r\n const iModel = await HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId });\r\n const changesetIdBeforeExtentsChange = iModel.changeset.id;\r\n const extents = iModel.projectExtents;\r\n const newExtents = extents.clone();\r\n newExtents.low.x += 100;\r\n newExtents.low.y += 100;\r\n newExtents.high.x += 100;\r\n newExtents.high.y += 100;\r\n iModel.updateProjectExtents(newExtents);\r\n iModel.saveChanges(\"update project extents\");\r\n await iModel.pushChanges({ description: \"update project extents\" });\r\n await HubWrappers.closeAndDeleteBriefcaseDb(accessToken, iModel);\r\n const iModelBeforeExtentsChange = await HubWrappers.downloadAndOpenBriefcase({ accessToken, iTwinId, iModelId, asOf: IModelVersion.asOfChangeSet(changesetIdBeforeExtentsChange).toJSON() });\r\n const extentsBeforePull = iModelBeforeExtentsChange.projectExtents;\r\n // Read the extents fileProperty.\r\n const extentsStrBeforePull = iModelBeforeExtentsChange.queryFilePropertyString({name: \"Extents\", namespace: \"dgn_Db\"});\r\n const ecefLocationBeforeExtentsChange = iModelBeforeExtentsChange.ecefLocation;\r\n await iModelBeforeExtentsChange.pullChanges(); // Pulls the extents change.\r\n const extentsAfterPull = iModelBeforeExtentsChange.projectExtents;\r\n const extentsStrAfterPull = iModelBeforeExtentsChange.queryFilePropertyString({name: \"Extents\", namespace: \"dgn_Db\"});\r\n const ecefLocationAfterExtentsChange = iModelBeforeExtentsChange.ecefLocation;\r\n\r\n expect(ecefLocationBeforeExtentsChange).to.not.be.undefined;\r\n expect(ecefLocationAfterExtentsChange).to.not.be.undefined;\r\n expect(ecefLocationBeforeExtentsChange?.isAlmostEqual(ecefLocationAfterExtentsChange!)).to.be.false;\r\n expect(extentsStrAfterPull).to.not.equal(extentsStrBeforePull);\r\n expect(extentsAfterPull.isAlmostEqual(extentsBeforePull)).to.be.false;\r\n await HubWrappers.closeAndDeleteBriefcaseDb(accessToken, iModelBeforeExtentsChange);\r\n });\r\n\r\n it(\"parent lock should suffice when inserting into deeply nested sub-model\", async () => {\r\n const version0 = IModelTestUtils.resolveAssetFile(\"test.bim\");\r\n const iModelId = await HubMock.createNewIModel({ iTwinId, iModelName: \"subModelCoveredByParentLockTest\", version0 });\r\n let iModel = await HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId });\r\n iModel.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n\r\n /*\r\n Job Subject\r\n +- DefinitionPartition -- [DefinitionModel]\r\n */\r\n\r\n await iModel.locks.acquireLocks({ shared: IModel.repositoryModelId });\r\n const jobSubjectId = IModelTestUtils.createJobSubjectElement(iModel, \"JobSubject\").insert();\r\n const definitionModelId = DefinitionModel.insert(iModel, jobSubjectId, \"Definition\");\r\n\r\n iModel.saveChanges();\r\n const locks = iModel.locks;\r\n expect(locks.isServerBased).true;\r\n await iModel.pushChanges({ description: \"create model\" });\r\n expect(iModel.locks).equal(locks); // pushing should not change your locks\r\n\r\n /*\r\n Job Subject <--- Lock this\r\n +- DefinitionPartition -- [DefinitionModel]\r\n SpatialCategory <=== insert this\r\n DrawingCategory \"\r\n */\r\n assert.isFalse(iModel.locks.holdsExclusiveLock(jobSubjectId));\r\n assert.isFalse(iModel.locks.holdsExclusiveLock(definitionModelId));\r\n assert.isFalse(iModel.locks.holdsSharedLock(definitionModelId));\r\n await iModel.locks.acquireLocks({ exclusive: jobSubjectId });\r\n iModel.locks.checkExclusiveLock(jobSubjectId, \"\", \"\");\r\n iModel.locks.checkSharedLock(jobSubjectId, \"\", \"\");\r\n iModel.locks.checkSharedLock(definitionModelId, \"\", \"\");\r\n iModel.locks.checkExclusiveLock(definitionModelId, \"\", \"\");\r\n\r\n const spatialCategoryId = SpatialCategory.insert(iModel, definitionModelId, \"SpatialCategory\", new SubCategoryAppearance()); // throws if we get locking error\r\n const drawingCategoryId = DrawingCategory.insert(iModel, definitionModelId, \"DrawingCategory\", new SubCategoryAppearance());\r\n\r\n assert.isTrue(iModel.elements.getElement(spatialCategoryId).model === definitionModelId);\r\n assert.isTrue(iModel.elements.getElement(drawingCategoryId).model === definitionModelId);\r\n\r\n iModel.saveChanges();\r\n await iModel.pushChanges({ description: \"insert category\" });\r\n\r\n /*\r\n Create some more nesting.\r\n\r\n Job Subject <--- Lock this\r\n +- DefinitionPartition -- [DefinitionModel]\r\n | SpatialCategory\r\n +- Child Subject <== Insert\r\n +- DocumentList -- [DocumentListModel] \"\r\n Drawing -- [DrawingModel] \"\r\n */\r\n assert.isFalse(iModel.locks.holdsExclusiveLock(jobSubjectId));\r\n assert.isFalse(iModel.locks.holdsExclusiveLock(definitionModelId));\r\n assert.isFalse(iModel.locks.holdsSharedLock(definitionModelId));\r\n await iModel.locks.acquireLocks({ exclusive: jobSubjectId });\r\n iModel.locks.checkExclusiveLock(jobSubjectId, \"\", \"\");\r\n iModel.locks.checkSharedLock(IModel.repositoryModelId, \"\", \"\");\r\n\r\n const childSubjectId = Subject.insert(iModel, jobSubjectId, \"Child Subject\");\r\n\r\n const documentListModelId = DocumentListModel.insert(iModel, childSubjectId, \"Document\"); // creates DocumentList and DocumentListModel\r\n assert.isTrue(Id64.isValidId64(documentListModelId));\r\n const drawingModelId = Drawing.insert(iModel, documentListModelId, \"Drawing\"); // creates Drawing and DrawingModel\r\n\r\n assert.isTrue(iModel.elements.getElement(childSubjectId).parent?.id === jobSubjectId);\r\n assert.isTrue(iModel.elements.getElement(childSubjectId).model === IModel.repositoryModelId);\r\n assert.isTrue(iModel.elements.getElement(documentListModelId).parent?.id === childSubjectId);\r\n assert.isTrue(iModel.elements.getElement(documentListModelId).model === IModel.repositoryModelId);\r\n assert.isTrue(iModel.elements.getElement(drawingModelId).model === documentListModelId);\r\n\r\n iModel.saveChanges();\r\n await iModel.pushChanges({ description: \"insert doc list with nested drawing model\" });\r\n\r\n /*\r\n Verify that even a deeply nested insertion is covered by the exclusive lock on the top-level parent.\r\n\r\n Job Subject <--- Lock this\r\n +- DefinitionPartition -- DefinitionModel\r\n | SpatialCategory\r\n +- Child Subject\r\n +- DocumentList -- [DocumentListModel]\r\n Drawing -- [DrawingModel]\r\n DrawingGraphic <== Insert this\r\n */\r\n assert.isFalse(iModel.locks.holdsExclusiveLock(jobSubjectId));\r\n assert.isFalse(iModel.locks.holdsExclusiveLock(definitionModelId));\r\n assert.isFalse(iModel.locks.holdsSharedLock(definitionModelId));\r\n assert.isFalse(iModel.locks.holdsSharedLock(documentListModelId));\r\n assert.isFalse(iModel.locks.holdsSharedLock(drawingModelId));\r\n await iModel.locks.acquireLocks({ exclusive: jobSubjectId });\r\n iModel.locks.checkExclusiveLock(jobSubjectId, \"\", \"\");\r\n iModel.locks.checkSharedLock(IModel.repositoryModelId, \"\", \"\");\r\n iModel.locks.checkSharedLock(documentListModelId, \"\", \"\");\r\n iModel.locks.checkSharedLock(drawingModelId, \"\", \"\");\r\n\r\n const drawingGraphicProps1: GeometricElement2dProps = {\r\n classFullName: DrawingGraphic.classFullName,\r\n model: drawingModelId,\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 = iModel.elements.insertElement(drawingGraphicProps1);\r\n\r\n assert.isTrue(iModel.elements.getElement(drawingGraphicId1).model === drawingModelId);\r\n iModel.saveChanges();\r\n expect(iModel.locks.holdsExclusiveLock(drawingModelId)).true;\r\n\r\n const fileName = iModel[_nativeDb].getFilePath();\r\n iModel.close(); // close rw\r\n iModel = await BriefcaseDb.open({ fileName, readonly: true }); // reopen readonly\r\n expect(iModel.locks.isServerBased).false; // readonly sessions should not have server based locks\r\n\r\n // verify we can push changes from a readonly briefcase\r\n await iModel.pushChanges({ description: \"insert graphic into nested sub-model\" });\r\n\r\n // try it again to verify we can get the ServerBasedLocks again\r\n await iModel.pushChanges({ description: \"should do nothing\" });\r\n iModel.close();\r\n\r\n // reopen readwrite to verify we released all locks from readonly briefcase\r\n iModel = await BriefcaseDb.open({ fileName });\r\n expect(iModel.locks.isServerBased).true;\r\n const serverLocks = iModel.locks as ServerBasedLocks;\r\n expect(serverLocks.holdsExclusiveLock(drawingModelId)).false;\r\n expect(serverLocks.getLockCount(LockState.Shared)).equal(0);\r\n expect(serverLocks.getLockCount(LockState.Exclusive)).equal(0);\r\n iModel.close();\r\n\r\n });\r\n\r\n});\r\n"]}