@grafana/scenes 6.7.0--canary.1091.14350229100.0 → 6.8.0

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 (331) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/dist/esm/components/layout/CSSGrid/SceneCSSGridItem.js +33 -0
  3. package/dist/esm/dist/esm/behaviors/CursorSync.js +76 -0
  4. package/dist/esm/dist/esm/behaviors/LiveNowTimer.js +44 -0
  5. package/dist/esm/dist/esm/behaviors/SceneQueryController.js +14 -0
  6. package/dist/esm/dist/esm/components/EmbeddedScene.js +59 -0
  7. package/dist/esm/dist/esm/components/NestedScene.js +95 -0
  8. package/dist/esm/dist/esm/components/SceneApp/SceneApp.js +27 -0
  9. package/dist/esm/dist/esm/components/SceneApp/SceneAppPage.js +176 -0
  10. package/dist/esm/dist/esm/components/SceneApp/SceneAppPageView.js +104 -0
  11. package/dist/esm/dist/esm/components/SceneApp/utils.js +42 -0
  12. package/dist/esm/dist/esm/components/SceneByFrameRepeater.js +41 -0
  13. package/dist/esm/dist/esm/components/SceneByVariableRepeater.js +55 -0
  14. package/dist/esm/dist/esm/components/SceneCanvasText.js +32 -0
  15. package/dist/esm/dist/esm/components/SceneControlsSpacer.js +17 -0
  16. package/dist/esm/dist/esm/components/SceneDebugger/DebugDetails.js +82 -0
  17. package/dist/esm/dist/esm/components/SceneDebugger/DebugTreeNode.js +72 -0
  18. package/dist/esm/dist/esm/components/SceneDebugger/SceneDebugger.js +77 -0
  19. package/dist/esm/dist/esm/components/SceneReactObject.js +34 -0
  20. package/dist/esm/dist/esm/components/SceneRefreshPicker.js +205 -0
  21. package/dist/esm/dist/esm/components/SceneTimePicker.js +139 -0
  22. package/dist/esm/dist/esm/components/SceneTimeRangeCompare.js +240 -0
  23. package/dist/esm/dist/esm/components/SceneToolbarButton.js +33 -0
  24. package/dist/esm/dist/esm/components/VizPanel/VizPanel.js +406 -0
  25. package/dist/esm/dist/esm/components/VizPanel/VizPanelExploreButton.js +44 -0
  26. package/dist/esm/dist/esm/components/VizPanel/VizPanelMenu.js +59 -0
  27. package/dist/esm/dist/esm/components/VizPanel/VizPanelRenderer.js +285 -0
  28. package/dist/esm/dist/esm/components/VizPanel/VizPanelSeriesLimit.js +45 -0
  29. package/dist/esm/dist/esm/components/VizPanel/colorSeriesConfigFactory.js +72 -0
  30. package/dist/esm/dist/esm/components/VizPanel/registerRuntimePanelPlugin.js +11 -0
  31. package/dist/esm/dist/esm/components/VizPanel/seriesVisibilityConfigFactory.js +164 -0
  32. package/dist/esm/dist/esm/components/layout/CSSGrid/SceneCSSGridLayout.js +124 -0
  33. package/dist/esm/dist/esm/components/layout/LazyLoader.js +103 -0
  34. package/dist/esm/dist/esm/components/layout/SceneFlexLayout.js +135 -0
  35. package/dist/esm/dist/esm/components/layout/grid/SceneGridItem.js +30 -0
  36. package/dist/esm/dist/esm/components/layout/grid/SceneGridLayout.js +283 -0
  37. package/dist/esm/dist/esm/components/layout/grid/SceneGridLayoutRenderer.js +178 -0
  38. package/dist/esm/dist/esm/components/layout/grid/SceneGridRow.js +190 -0
  39. package/dist/esm/dist/esm/components/layout/grid/constants.js +7 -0
  40. package/dist/esm/dist/esm/components/layout/grid/utils.js +36 -0
  41. package/dist/esm/dist/esm/components/layout/split/SplitLayout.js +17 -0
  42. package/dist/esm/dist/esm/components/layout/split/SplitLayoutRenderer.js +29 -0
  43. package/dist/esm/dist/esm/components/layout/split/Splitter.js +386 -0
  44. package/dist/esm/dist/esm/core/SceneComponentWrapper.js +57 -0
  45. package/dist/esm/dist/esm/core/SceneDataNode.js +43 -0
  46. package/dist/esm/dist/esm/core/SceneObjectBase.js +286 -0
  47. package/dist/esm/dist/esm/core/SceneObjectRef.js +32 -0
  48. package/dist/esm/dist/esm/core/SceneTimeRange.js +231 -0
  49. package/dist/esm/dist/esm/core/events.js +11 -0
  50. package/dist/esm/dist/esm/core/sceneGraph/getTimeRange.js +10 -0
  51. package/dist/esm/dist/esm/core/sceneGraph/index.js +25 -0
  52. package/dist/esm/dist/esm/core/sceneGraph/sceneGraph.js +178 -0
  53. package/dist/esm/dist/esm/core/sceneGraph/utils.js +64 -0
  54. package/dist/esm/dist/esm/core/types.js +15 -0
  55. package/dist/esm/dist/esm/querying/DataLayersMerger.js +46 -0
  56. package/dist/esm/dist/esm/querying/ExtraQueryProvider.js +6 -0
  57. package/dist/esm/dist/esm/querying/RuntimeDataSource.js +6 -0
  58. package/dist/esm/dist/esm/querying/SceneDataLayerSet.js +100 -0
  59. package/dist/esm/dist/esm/querying/SceneQueryRunner.js +468 -0
  60. package/dist/esm/dist/esm/querying/extraQueryProcessingOperator.js +46 -0
  61. package/dist/esm/dist/esm/querying/getEnrichedDataRequest.js +12 -0
  62. package/dist/esm/dist/esm/querying/layers/SceneDataLayerBase.js +112 -0
  63. package/dist/esm/dist/esm/querying/layers/SceneDataLayerControls.js +51 -0
  64. package/dist/esm/dist/esm/querying/layers/annotations/AnnotationsDataLayer.js +130 -0
  65. package/dist/esm/dist/esm/querying/layers/annotations/filterAnnotations.js +85 -0
  66. package/dist/esm/dist/esm/querying/layers/annotations/standardAnnotationQuery.js +121 -0
  67. package/dist/esm/dist/esm/querying/layers/annotations/standardAnnotationsSupport.js +211 -0
  68. package/dist/esm/dist/esm/querying/layers/annotations/utils.js +77 -0
  69. package/dist/esm/dist/esm/querying/registerQueryWithController.js +41 -0
  70. package/dist/esm/dist/esm/services/SceneObjectUrlSyncConfig.js +30 -0
  71. package/dist/esm/dist/esm/services/UniqueUrlKeyMapper.js +45 -0
  72. package/dist/esm/dist/esm/services/UrlSyncManager.js +167 -0
  73. package/dist/esm/dist/esm/services/useUrlSync.js +29 -0
  74. package/dist/esm/dist/esm/services/utils.js +71 -0
  75. package/dist/esm/dist/esm/utils/ControlsLabel.js +107 -0
  76. package/dist/esm/dist/esm/utils/LoadingIndicator.js +19 -0
  77. package/dist/esm/dist/esm/utils/SafeSerializableSceneObject.js +39 -0
  78. package/dist/esm/dist/esm/utils/compatibility/setWindowGrafanaSceneContext.js +16 -0
  79. package/dist/esm/dist/esm/utils/date.js +15 -0
  80. package/dist/esm/dist/esm/utils/evaluateTimeRange.js +16 -0
  81. package/dist/esm/dist/esm/utils/explore.js +47 -0
  82. package/dist/esm/dist/esm/utils/getCompareSeriesRefId.js +4 -0
  83. package/dist/esm/dist/esm/utils/getDataSource.js +18 -0
  84. package/dist/esm/dist/esm/utils/getMessageFromError.js +24 -0
  85. package/dist/esm/dist/esm/utils/metricTree.js +53 -0
  86. package/dist/esm/dist/esm/utils/parseUrlParam.js +41 -0
  87. package/dist/esm/dist/esm/utils/utils.js +11 -0
  88. package/dist/esm/dist/esm/utils/wrapInSafeSerializableSceneObject.js +30 -0
  89. package/dist/esm/dist/esm/utils/writeSceneLog.js +12 -0
  90. package/dist/esm/dist/esm/variables/VariableDependencyConfig.js +150 -0
  91. package/dist/esm/dist/esm/variables/VariableValueRecorder.js +71 -0
  92. package/dist/esm/dist/esm/variables/adhoc/AdHocFilterBuilder.js +24 -0
  93. package/dist/esm/dist/esm/variables/adhoc/AdHocFilterRenderer.js +303 -0
  94. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFilterPill.js +162 -0
  95. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersAlwaysWipCombobox.js +20 -0
  96. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersCombobox.js +640 -0
  97. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersComboboxRenderer.js +65 -0
  98. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/DropdownItem.js +146 -0
  99. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/MultiValuePill.js +114 -0
  100. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/useFloatingInteractions.js +68 -0
  101. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/utils.js +146 -0
  102. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersVariable.js +289 -0
  103. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersVariableUrlSyncHandler.js +76 -0
  104. package/dist/esm/dist/esm/variables/adhoc/getAdhocOptionSearcher.js +13 -0
  105. package/dist/esm/dist/esm/variables/adhoc/patchGetAdhocFilters.js +47 -0
  106. package/dist/esm/dist/esm/variables/components/VariableValueControl.js +23 -0
  107. package/dist/esm/dist/esm/variables/components/VariableValueInput.js +33 -0
  108. package/dist/esm/dist/esm/variables/components/VariableValueSelect.js +228 -0
  109. package/dist/esm/dist/esm/variables/components/VariableValueSelectors.js +72 -0
  110. package/dist/esm/dist/esm/variables/components/getOptionSearcher.js +15 -0
  111. package/dist/esm/dist/esm/variables/constants.js +9 -0
  112. package/dist/esm/dist/esm/variables/getEnrichedFiltersRequest.js +12 -0
  113. package/dist/esm/dist/esm/variables/groupby/GroupByVariable.js +259 -0
  114. package/dist/esm/dist/esm/variables/groupby/GroupByVariableUrlSyncHandler.js +63 -0
  115. package/dist/esm/dist/esm/variables/groupby/findActiveGroupByVariablesByUid.js +13 -0
  116. package/dist/esm/dist/esm/variables/interpolation/ScopedVarsVariable.js +40 -0
  117. package/dist/esm/dist/esm/variables/interpolation/defaults.js +21 -0
  118. package/dist/esm/dist/esm/variables/interpolation/fieldAccessorCache.js +13 -0
  119. package/dist/esm/dist/esm/variables/interpolation/formatRegistry.js +296 -0
  120. package/dist/esm/dist/esm/variables/interpolation/sceneInterpolator.js +87 -0
  121. package/dist/esm/dist/esm/variables/lookupVariable.js +20 -0
  122. package/dist/esm/dist/esm/variables/macros/AllVariablesMacro.js +57 -0
  123. package/dist/esm/dist/esm/variables/macros/contextMacros.js +43 -0
  124. package/dist/esm/dist/esm/variables/macros/dataMacros.js +134 -0
  125. package/dist/esm/dist/esm/variables/macros/index.js +26 -0
  126. package/dist/esm/dist/esm/variables/macros/templateProxies.js +51 -0
  127. package/dist/esm/dist/esm/variables/macros/timeMacros.js +86 -0
  128. package/dist/esm/dist/esm/variables/macros/types.js +11 -0
  129. package/dist/esm/dist/esm/variables/macros/urlMacros.js +56 -0
  130. package/dist/esm/dist/esm/variables/sets/SceneVariableSet.js +254 -0
  131. package/dist/esm/dist/esm/variables/types.js +11 -0
  132. package/dist/esm/dist/esm/variables/utils.js +172 -0
  133. package/dist/esm/dist/esm/variables/variants/ConstantVariable.js +38 -0
  134. package/dist/esm/dist/esm/variables/variants/CustomVariable.js +60 -0
  135. package/dist/esm/dist/esm/variables/variants/DataSourceVariable.js +88 -0
  136. package/dist/esm/dist/esm/variables/variants/IntervalVariable.js +117 -0
  137. package/dist/esm/dist/esm/variables/variants/MultiValueVariable.js +295 -0
  138. package/dist/esm/dist/esm/variables/variants/TestVariable.js +117 -0
  139. package/dist/esm/dist/esm/variables/variants/TextBoxVariable.js +61 -0
  140. package/dist/esm/dist/esm/variables/variants/query/QueryVariable.js +139 -0
  141. package/dist/esm/dist/esm/variables/variants/query/createQueryVariableRunner.js +129 -0
  142. package/dist/esm/dist/esm/variables/variants/query/guards.js +28 -0
  143. package/dist/esm/dist/esm/variables/variants/query/toMetricFindValues.js +96 -0
  144. package/dist/esm/dist/esm/variables/variants/query/utils.js +124 -0
  145. package/dist/esm/index.js +1 -1
  146. package/dist/esm/index.js.map +1 -1
  147. package/dist/esm/querying/DataProviderSharer.js +39 -0
  148. package/dist/esm/src/behaviors/ActWhenVariableChanged.js +27 -0
  149. package/dist/esm/src/behaviors/CursorSync.js +76 -0
  150. package/dist/esm/src/behaviors/LiveNowTimer.js +44 -0
  151. package/dist/esm/src/behaviors/SceneQueryController.js +60 -0
  152. package/dist/esm/src/behaviors/index.js +5 -0
  153. package/dist/esm/src/components/EmbeddedScene.js +59 -0
  154. package/dist/esm/src/components/NestedScene.js +95 -0
  155. package/dist/esm/src/components/SceneApp/SceneApp.js +37 -0
  156. package/dist/esm/src/components/SceneApp/SceneAppPage.js +176 -0
  157. package/dist/esm/src/components/SceneApp/SceneAppPageView.js +104 -0
  158. package/dist/esm/src/components/SceneApp/utils.js +42 -0
  159. package/dist/esm/src/components/SceneByFrameRepeater.js +41 -0
  160. package/dist/esm/src/components/SceneByVariableRepeater.js +55 -0
  161. package/dist/esm/src/components/SceneCanvasText.js +32 -0
  162. package/dist/esm/src/components/SceneControlsSpacer.js +17 -0
  163. package/dist/esm/src/components/SceneDebugger/DebugDetails.js +82 -0
  164. package/dist/esm/src/components/SceneDebugger/DebugTreeNode.js +72 -0
  165. package/dist/esm/src/components/SceneDebugger/SceneDebugger.js +77 -0
  166. package/dist/esm/src/components/SceneReactObject.js +34 -0
  167. package/dist/esm/src/components/SceneRefreshPicker.js +205 -0
  168. package/dist/esm/src/components/SceneTimePicker.js +139 -0
  169. package/dist/esm/src/components/SceneTimeRangeCompare.js +240 -0
  170. package/dist/esm/src/components/SceneToolbarButton.js +33 -0
  171. package/dist/esm/src/components/VizPanel/VizPanel.js +406 -0
  172. package/dist/esm/src/components/VizPanel/VizPanelExploreButton.js +44 -0
  173. package/dist/esm/src/components/VizPanel/VizPanelMenu.js +59 -0
  174. package/dist/esm/src/components/VizPanel/VizPanelRenderer.js +285 -0
  175. package/dist/esm/src/components/VizPanel/VizPanelSeriesLimit.js +45 -0
  176. package/dist/esm/src/components/VizPanel/colorSeriesConfigFactory.js +72 -0
  177. package/dist/esm/src/components/VizPanel/registerRuntimePanelPlugin.js +56 -0
  178. package/dist/esm/src/components/VizPanel/seriesVisibilityConfigFactory.js +164 -0
  179. package/dist/esm/src/components/layout/CSSGrid/SceneCSSGridLayout.js +124 -0
  180. package/dist/esm/src/components/layout/LazyLoader.js +103 -0
  181. package/dist/esm/src/components/layout/SceneFlexLayout.js +135 -0
  182. package/dist/esm/src/components/layout/grid/SceneGridItem.js +30 -0
  183. package/dist/esm/src/components/layout/grid/SceneGridLayout.js +283 -0
  184. package/dist/esm/src/components/layout/grid/SceneGridLayoutRenderer.js +178 -0
  185. package/dist/esm/src/components/layout/grid/SceneGridRow.js +190 -0
  186. package/dist/esm/src/components/layout/grid/constants.js +7 -0
  187. package/dist/esm/src/components/layout/grid/utils.js +36 -0
  188. package/dist/esm/src/components/layout/split/SplitLayout.js +17 -0
  189. package/dist/esm/src/components/layout/split/SplitLayoutRenderer.js +29 -0
  190. package/dist/esm/src/components/layout/split/Splitter.js +386 -0
  191. package/dist/esm/src/core/PanelBuilders/FieldConfigBuilder.js +100 -0
  192. package/dist/esm/src/core/PanelBuilders/FieldConfigBuilders.js +75 -0
  193. package/dist/esm/src/core/PanelBuilders/FieldConfigOverridesBuilder.js +75 -0
  194. package/dist/esm/src/core/PanelBuilders/PanelOptionsBuilder.js +22 -0
  195. package/dist/esm/src/core/PanelBuilders/PanelOptionsBuilders.js +85 -0
  196. package/dist/esm/src/core/PanelBuilders/StandardFieldConfigBuilders.js +52 -0
  197. package/dist/esm/src/core/PanelBuilders/VizConfigBuilder.js +78 -0
  198. package/dist/esm/src/core/PanelBuilders/VizConfigBuilders.js +114 -0
  199. package/dist/esm/src/core/PanelBuilders/VizPanelBuilder.js +162 -0
  200. package/dist/esm/src/core/PanelBuilders/index.js +116 -0
  201. package/dist/esm/src/core/SceneComponentWrapper.js +57 -0
  202. package/dist/esm/src/core/SceneDataNode.js +43 -0
  203. package/dist/esm/src/core/SceneObjectBase.js +286 -0
  204. package/dist/esm/src/core/SceneObjectRef.js +32 -0
  205. package/dist/esm/src/core/SceneTimeRange.js +231 -0
  206. package/dist/esm/src/core/SceneTimeRangeTransformerBase.js +35 -0
  207. package/dist/esm/src/core/SceneTimeZoneOverride.js +63 -0
  208. package/dist/esm/src/core/events.js +11 -0
  209. package/dist/esm/src/core/sceneGraph/getTimeRange.js +10 -0
  210. package/dist/esm/src/core/sceneGraph/index.js +25 -0
  211. package/dist/esm/src/core/sceneGraph/sceneGraph.js +178 -0
  212. package/dist/esm/src/core/sceneGraph/utils.js +64 -0
  213. package/dist/esm/src/core/types.js +15 -0
  214. package/dist/esm/src/index.js +108 -0
  215. package/dist/esm/src/querying/DataLayersMerger.js +46 -0
  216. package/dist/esm/src/querying/DataProviderProxy.js +37 -0
  217. package/dist/esm/src/querying/DataProviderSharer.js +108 -0
  218. package/dist/esm/src/querying/ExtraQueryProvider.js +6 -0
  219. package/dist/esm/src/querying/RuntimeDataSource.js +49 -0
  220. package/dist/esm/src/querying/SceneDataLayerSet.js +100 -0
  221. package/dist/esm/src/querying/SceneDataTransformer.js +178 -0
  222. package/dist/esm/src/querying/SceneQueryRunner.js +468 -0
  223. package/dist/esm/src/querying/extraQueryProcessingOperator.js +46 -0
  224. package/dist/esm/src/querying/getEnrichedDataRequest.js +12 -0
  225. package/dist/esm/src/querying/layers/SceneDataLayerBase.js +112 -0
  226. package/dist/esm/src/querying/layers/SceneDataLayerControls.js +51 -0
  227. package/dist/esm/src/querying/layers/annotations/AnnotationsDataLayer.js +130 -0
  228. package/dist/esm/src/querying/layers/annotations/filterAnnotations.js +85 -0
  229. package/dist/esm/src/querying/layers/annotations/standardAnnotationQuery.js +121 -0
  230. package/dist/esm/src/querying/layers/annotations/standardAnnotationsSupport.js +211 -0
  231. package/dist/esm/src/querying/layers/annotations/utils.js +77 -0
  232. package/dist/esm/src/querying/layers/index.js +2 -0
  233. package/dist/esm/src/querying/registerQueryWithController.js +41 -0
  234. package/dist/esm/src/services/SceneObjectUrlSyncConfig.js +30 -0
  235. package/dist/esm/src/services/UniqueUrlKeyMapper.js +45 -0
  236. package/dist/esm/src/services/UrlSyncContextProvider.js +17 -0
  237. package/dist/esm/src/services/UrlSyncManager.js +167 -0
  238. package/dist/esm/src/services/useUrlSync.js +29 -0
  239. package/dist/esm/src/services/utils.js +75 -0
  240. package/dist/esm/src/utils/ControlsLabel.js +107 -0
  241. package/dist/esm/src/utils/LoadingIndicator.js +19 -0
  242. package/dist/esm/src/utils/SafeSerializableSceneObject.js +39 -0
  243. package/dist/esm/src/utils/compatibility/setWindowGrafanaSceneContext.js +16 -0
  244. package/dist/esm/src/utils/date.js +15 -0
  245. package/dist/esm/src/utils/evaluateTimeRange.js +16 -0
  246. package/dist/esm/src/utils/explore.js +47 -0
  247. package/dist/esm/src/utils/getCompareSeriesRefId.js +4 -0
  248. package/dist/esm/src/utils/getDataSource.js +18 -0
  249. package/dist/esm/src/utils/getMessageFromError.js +24 -0
  250. package/dist/esm/src/utils/metricTree.js +53 -0
  251. package/dist/esm/src/utils/parseUrlParam.js +41 -0
  252. package/dist/esm/src/utils/utils.js +11 -0
  253. package/dist/esm/src/utils/wrapInSafeSerializableSceneObject.js +30 -0
  254. package/dist/esm/src/utils/writeSceneLog.js +12 -0
  255. package/dist/esm/src/variables/VariableDependencyConfig.js +150 -0
  256. package/dist/esm/src/variables/VariableValueRecorder.js +71 -0
  257. package/dist/esm/src/variables/adhoc/AdHocFilterBuilder.js +24 -0
  258. package/dist/esm/src/variables/adhoc/AdHocFilterRenderer.js +303 -0
  259. package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/AdHocFilterPill.js +162 -0
  260. package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersAlwaysWipCombobox.js +20 -0
  261. package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersCombobox.js +640 -0
  262. package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersComboboxRenderer.js +65 -0
  263. package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/DropdownItem.js +146 -0
  264. package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/MultiValuePill.js +114 -0
  265. package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/useFloatingInteractions.js +68 -0
  266. package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/utils.js +146 -0
  267. package/dist/esm/src/variables/adhoc/AdHocFiltersVariable.js +289 -0
  268. package/dist/esm/src/variables/adhoc/AdHocFiltersVariableUrlSyncHandler.js +76 -0
  269. package/dist/esm/src/variables/adhoc/getAdhocOptionSearcher.js +13 -0
  270. package/dist/esm/src/variables/adhoc/patchGetAdhocFilters.js +47 -0
  271. package/dist/esm/src/variables/components/VariableValueControl.js +23 -0
  272. package/dist/esm/src/variables/components/VariableValueInput.js +33 -0
  273. package/dist/esm/src/variables/components/VariableValueSelect.js +228 -0
  274. package/dist/esm/src/variables/components/VariableValueSelectors.js +72 -0
  275. package/dist/esm/src/variables/components/getOptionSearcher.js +15 -0
  276. package/dist/esm/src/variables/constants.js +9 -0
  277. package/dist/esm/src/variables/getEnrichedFiltersRequest.js +12 -0
  278. package/dist/esm/src/variables/groupby/GroupByVariable.js +259 -0
  279. package/dist/esm/src/variables/groupby/GroupByVariableUrlSyncHandler.js +63 -0
  280. package/dist/esm/src/variables/groupby/findActiveGroupByVariablesByUid.js +13 -0
  281. package/dist/esm/src/variables/interpolation/ScopedVarsVariable.js +40 -0
  282. package/dist/esm/src/variables/interpolation/defaults.js +21 -0
  283. package/dist/esm/src/variables/interpolation/fieldAccessorCache.js +13 -0
  284. package/dist/esm/src/variables/interpolation/formatRegistry.js +296 -0
  285. package/dist/esm/src/variables/interpolation/sceneInterpolator.js +87 -0
  286. package/dist/esm/src/variables/lookupVariable.js +20 -0
  287. package/dist/esm/src/variables/macros/AllVariablesMacro.js +57 -0
  288. package/dist/esm/src/variables/macros/contextMacros.js +43 -0
  289. package/dist/esm/src/variables/macros/dataMacros.js +134 -0
  290. package/dist/esm/src/variables/macros/index.js +35 -0
  291. package/dist/esm/src/variables/macros/templateProxies.js +51 -0
  292. package/dist/esm/src/variables/macros/timeMacros.js +86 -0
  293. package/dist/esm/src/variables/macros/types.js +11 -0
  294. package/dist/esm/src/variables/macros/urlMacros.js +56 -0
  295. package/dist/esm/src/variables/sets/SceneVariableSet.js +254 -0
  296. package/dist/esm/src/variables/types.js +11 -0
  297. package/dist/esm/src/variables/utils.js +172 -0
  298. package/dist/esm/src/variables/variants/ConstantVariable.js +38 -0
  299. package/dist/esm/src/variables/variants/CustomVariable.js +60 -0
  300. package/dist/esm/src/variables/variants/DataSourceVariable.js +88 -0
  301. package/dist/esm/src/variables/variants/IntervalVariable.js +117 -0
  302. package/dist/esm/src/variables/variants/JsonVariable.js +193 -0
  303. package/dist/esm/src/variables/variants/LocalValueVariable.js +56 -0
  304. package/dist/esm/src/variables/variants/MultiValueVariable.js +295 -0
  305. package/dist/esm/src/variables/variants/TestVariable.js +117 -0
  306. package/dist/esm/src/variables/variants/TextBoxVariable.js +61 -0
  307. package/dist/esm/src/variables/variants/guards.js +27 -0
  308. package/dist/esm/src/variables/variants/query/QueryVariable.js +139 -0
  309. package/dist/esm/src/variables/variants/query/createQueryVariableRunner.js +129 -0
  310. package/dist/esm/src/variables/variants/query/guards.js +28 -0
  311. package/dist/esm/src/variables/variants/query/toMetricFindValues.js +96 -0
  312. package/dist/esm/src/variables/variants/query/utils.js +124 -0
  313. package/dist/esm/variables/components/VariableValueSelect.js +13 -9
  314. package/dist/esm/variables/components/VariableValueSelect.js.map +1 -1
  315. package/dist/esm/variables/variants/ConstantVariable.js +22 -0
  316. package/dist/esm/variables/variants/ConstantVariable.js.map +1 -1
  317. package/dist/esm/variables/variants/CustomVariable.js +3 -2
  318. package/dist/esm/variables/variants/CustomVariable.js.map +1 -1
  319. package/dist/esm/variables/variants/DataSourceVariable.js +3 -2
  320. package/dist/esm/variables/variants/DataSourceVariable.js.map +1 -1
  321. package/dist/esm/variables/variants/JsonVariable.js +96 -0
  322. package/dist/esm/variables/variants/TestVariable.js +3 -2
  323. package/dist/esm/variables/variants/TestVariable.js.map +1 -1
  324. package/dist/esm/variables/variants/json/JsonVariable.js +95 -0
  325. package/dist/esm/variables/variants/json/JsonVariableOptionProviders.js +70 -0
  326. package/dist/esm/variables/variants/query/QueryVariable.js +3 -2
  327. package/dist/esm/variables/variants/query/QueryVariable.js.map +1 -1
  328. package/dist/index.d.ts +14 -6
  329. package/dist/index.js +35 -13
  330. package/dist/index.js.map +1 -1
  331. package/package.json +2 -2
@@ -0,0 +1,30 @@
1
+ class SceneObjectUrlSyncConfig {
2
+ constructor(_sceneObject, _options) {
3
+ this._sceneObject = _sceneObject;
4
+ this._nextChangeShouldAddHistoryStep = false;
5
+ this._keys = _options.keys;
6
+ }
7
+ getKeys() {
8
+ if (typeof this._keys === "function") {
9
+ return this._keys();
10
+ }
11
+ return this._keys;
12
+ }
13
+ getUrlState() {
14
+ return this._sceneObject.getUrlState();
15
+ }
16
+ updateFromUrl(values) {
17
+ this._sceneObject.updateFromUrl(values);
18
+ }
19
+ performBrowserHistoryAction(callback) {
20
+ this._nextChangeShouldAddHistoryStep = true;
21
+ callback();
22
+ this._nextChangeShouldAddHistoryStep = false;
23
+ }
24
+ shouldCreateHistoryStep(values) {
25
+ return this._nextChangeShouldAddHistoryStep;
26
+ }
27
+ }
28
+
29
+ export { SceneObjectUrlSyncConfig };
30
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2NlbmVPYmplY3RVcmxTeW5jQ29uZmlnLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi9zZXJ2aWNlcy9TY2VuZU9iamVjdFVybFN5bmNDb25maWcuanMiXSwic291cmNlc0NvbnRlbnQiOlsiY2xhc3MgU2NlbmVPYmplY3RVcmxTeW5jQ29uZmlnIHtcbiAgY29uc3RydWN0b3IoX3NjZW5lT2JqZWN0LCBfb3B0aW9ucykge1xuICAgIHRoaXMuX3NjZW5lT2JqZWN0ID0gX3NjZW5lT2JqZWN0O1xuICAgIHRoaXMuX25leHRDaGFuZ2VTaG91bGRBZGRIaXN0b3J5U3RlcCA9IGZhbHNlO1xuICAgIHRoaXMuX2tleXMgPSBfb3B0aW9ucy5rZXlzO1xuICB9XG4gIGdldEtleXMoKSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLl9rZXlzID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHJldHVybiB0aGlzLl9rZXlzKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9rZXlzO1xuICB9XG4gIGdldFVybFN0YXRlKCkge1xuICAgIHJldHVybiB0aGlzLl9zY2VuZU9iamVjdC5nZXRVcmxTdGF0ZSgpO1xuICB9XG4gIHVwZGF0ZUZyb21VcmwodmFsdWVzKSB7XG4gICAgdGhpcy5fc2NlbmVPYmplY3QudXBkYXRlRnJvbVVybCh2YWx1ZXMpO1xuICB9XG4gIHBlcmZvcm1Ccm93c2VySGlzdG9yeUFjdGlvbihjYWxsYmFjaykge1xuICAgIHRoaXMuX25leHRDaGFuZ2VTaG91bGRBZGRIaXN0b3J5U3RlcCA9IHRydWU7XG4gICAgY2FsbGJhY2soKTtcbiAgICB0aGlzLl9uZXh0Q2hhbmdlU2hvdWxkQWRkSGlzdG9yeVN0ZXAgPSBmYWxzZTtcbiAgfVxuICBzaG91bGRDcmVhdGVIaXN0b3J5U3RlcCh2YWx1ZXMpIHtcbiAgICByZXR1cm4gdGhpcy5fbmV4dENoYW5nZVNob3VsZEFkZEhpc3RvcnlTdGVwO1xuICB9XG59XG5cbmV4cG9ydCB7IFNjZW5lT2JqZWN0VXJsU3luY0NvbmZpZyB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lVMk5sYm1WUFltcGxZM1JWY214VGVXNWpRMjl1Wm1sbkxtcHpJaXdpYzI5MWNtTmxjeUk2V3lJdUxpOHVMaTh1TGk5emNtTXZjMlZ5ZG1salpYTXZVMk5sYm1WUFltcGxZM1JWY214VGVXNWpRMjl1Wm1sbkxuUnpJbDBzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSW1sdGNHOXlkQ0I3SUZOalpXNWxUMkpxWldOMFZYSnNVM2x1WTBoaGJtUnNaWElzSUZOalpXNWxUMkpxWldOMFYybDBhRlZ5YkZONWJtTXNJRk5qWlc1bFQySnFaV04wVlhKc1ZtRnNkV1Z6SUgwZ1puSnZiU0FuTGk0dlkyOXlaUzkwZVhCbGN5YzdYRzVjYm1sdWRHVnlabUZqWlNCVFkyVnVaVTlpYW1WamRGVnliRk41Ym1ORGIyNW1hV2RQY0hScGIyNXpJSHRjYmlBZ2EyVjVjem9nYzNSeWFXNW5XMTBnZkNBb0tDa2dQVDRnYzNSeWFXNW5XMTBwTzF4dWZWeHVYRzVsZUhCdmNuUWdZMnhoYzNNZ1UyTmxibVZQWW1wbFkzUlZjbXhUZVc1alEyOXVabWxuSUdsdGNHeGxiV1Z1ZEhNZ1UyTmxibVZQWW1wbFkzUlZjbXhUZVc1alNHRnVaR3hsY2lCN1hHNGdJSEJ5YVhaaGRHVWdYMnRsZVhNNklITjBjbWx1WjF0ZElId2dLQ2dwSUQwK0lITjBjbWx1WjF0ZEtUdGNiaUFnY0hKcGRtRjBaU0JmYm1WNGRFTm9ZVzVuWlZOb2IzVnNaRUZrWkVocGMzUnZjbmxUZEdWd0lEMGdabUZzYzJVN1hHNWNiaUFnY0hWaWJHbGpJR052Ym5OMGNuVmpkRzl5S0hCeWFYWmhkR1VnWDNOalpXNWxUMkpxWldOME9pQlRZMlZ1WlU5aWFtVmpkRmRwZEdoVmNteFRlVzVqTENCZmIzQjBhVzl1Y3pvZ1UyTmxibVZQWW1wbFkzUlZjbXhUZVc1alEyOXVabWxuVDNCMGFXOXVjeWtnZTF4dUlDQWdJSFJvYVhNdVgydGxlWE1nUFNCZmIzQjBhVzl1Y3k1clpYbHpPMXh1SUNCOVhHNWNiaUFnY0hWaWJHbGpJR2RsZEV0bGVYTW9LVG9nYzNSeWFXNW5XMTBnZTF4dUlDQWdJR2xtSUNoMGVYQmxiMllnZEdocGN5NWZhMlY1Y3lBOVBUMGdKMloxYm1OMGFXOXVKeWtnZTF4dUlDQWdJQ0FnY21WMGRYSnVJSFJvYVhNdVgydGxlWE1vS1R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0J5WlhSMWNtNGdkR2hwY3k1ZmEyVjVjenRjYmlBZ2ZWeHVYRzRnSUhCMVlteHBZeUJuWlhSVmNteFRkR0YwWlNncE9pQlRZMlZ1WlU5aWFtVmpkRlZ5YkZaaGJIVmxjeUI3WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE11WDNOalpXNWxUMkpxWldOMExtZGxkRlZ5YkZOMFlYUmxLQ2s3WEc0Z0lIMWNibHh1SUNCd2RXSnNhV01nZFhCa1lYUmxSbkp2YlZWeWJDaDJZV3gxWlhNNklGTmpaVzVsVDJKcVpXTjBWWEpzVm1Gc2RXVnpLVG9nZG05cFpDQjdYRzRnSUNBZ2RHaHBjeTVmYzJObGJtVlBZbXBsWTNRdWRYQmtZWFJsUm5KdmJWVnliQ2gyWVd4MVpYTXBPMXh1SUNCOVhHNWNiaUFnY0hWaWJHbGpJSEJsY21admNtMUNjbTkzYzJWeVNHbHpkRzl5ZVVGamRHbHZiaWhqWVd4c1ltRmphem9nS0NrZ1BUNGdkbTlwWkNrZ2UxeHVJQ0FnSUhSb2FYTXVYMjVsZUhSRGFHRnVaMlZUYUc5MWJHUkJaR1JJYVhOMGIzSjVVM1JsY0NBOUlIUnlkV1U3WEc0Z0lDQWdZMkZzYkdKaFkyc29LVHRjYmlBZ0lDQjBhR2x6TGw5dVpYaDBRMmhoYm1kbFUyaHZkV3hrUVdSa1NHbHpkRzl5ZVZOMFpYQWdQU0JtWVd4elpUdGNiaUFnZlZ4dVhHNGdJSEIxWW14cFl5QnphRzkxYkdSRGNtVmhkR1ZJYVhOMGIzSjVVM1JsY0NoMllXeDFaWE02SUZOalpXNWxUMkpxWldOMFZYSnNWbUZzZFdWektUb2dZbTl2YkdWaGJpQjdYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTXVYMjVsZUhSRGFHRnVaMlZUYUc5MWJHUkJaR1JJYVhOMGIzSjVVM1JsY0R0Y2JpQWdmVnh1ZlZ4dUlsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lKQlFVMVBMRTFCUVUwc2QwSkJRVGhFTEVOQlFVRTdRVUZCUVN4RlFVbHNSU3hYUVVGQkxFTkJRVzlDTEdOQlFYTkRMRkZCUVRKRExFVkJRVUU3UVVGQmFrWXNTVUZCUVN4SlFVRkJMRU5CUVVFc1dVRkJRU3hIUVVGQkxGbEJRVUVzUTBGQlFUdEJRVVl6UWl4SlFVRkJMRWxCUVVFc1EwRkJVU3dyUWtGQmEwTXNSMEZCUVN4TFFVRkJMRU5CUVVFN1FVRkhlRU1zU1VGQlFTeEpRVUZCTEVOQlFVc3NVVUZCVVN4UlFVRlRMRU5CUVVFc1NVRkJRU3hEUVVGQk8wRkJRVUVzUjBGRGVFSTdRVUZCUVN4RlFVVlBMRTlCUVc5Q0xFZEJRVUU3UVVGRGVrSXNTVUZCU1N4SlFVRkJMRTlCUVU4c1NVRkJTeXhEUVVGQkxFdEJRVUVzUzBGQlZTeFZRVUZaTEVWQlFVRTdRVUZEY0VNc1RVRkJRU3hQUVVGUExFdEJRVXNzUzBGQlRTeEZRVUZCTEVOQlFVRTdRVUZCUVN4TFFVTndRanRCUVVWQkxFbEJRVUVzVDBGQlR5eEpRVUZMTEVOQlFVRXNTMEZCUVN4RFFVRkJPMEZCUVVFc1IwRkRaRHRCUVVGQkxFVkJSVThzVjBGQmIwTXNSMEZCUVR0QlFVTjZReXhKUVVGUExFOUJRVUVzU1VGQlFTeERRVUZMTEdGQlFXRXNWMEZCV1N4RlFVRkJMRU5CUVVFN1FVRkJRU3hIUVVOMlF6dEJRVUZCTEVWQlJVOHNZMEZCWXl4TlFVRnZReXhGUVVGQk8wRkJRM1pFTEVsQlFVc3NTVUZCUVN4RFFVRkJMRmxCUVVFc1EwRkJZU3hqUVVGakxFMUJRVTBzUTBGQlFTeERRVUZCTzBGQlFVRXNSMEZEZUVNN1FVRkJRU3hGUVVWUExEUkNRVUUwUWl4UlFVRnpRaXhGUVVGQk8wRkJRM1pFTEVsQlFVRXNTVUZCUVN4RFFVRkxMQ3RDUVVGclF5eEhRVUZCTEVsQlFVRXNRMEZCUVR0QlFVTjJReXhKUVVGVExGRkJRVUVzUlVGQlFTeERRVUZCTzBGQlExUXNTVUZCUVN4SlFVRkJMRU5CUVVzc0swSkJRV3RETEVkQlFVRXNTMEZCUVN4RFFVRkJPMEZCUVVFc1IwRkRla003UVVGQlFTeEZRVVZQTEhkQ1FVRjNRaXhOUVVGMVF5eEZRVUZCTzBGQlEzQkZMRWxCUVVFc1QwRkJUeXhKUVVGTExFTkJRVUVzSzBKQlFVRXNRMEZCUVR0QlFVRkJMRWRCUTJRN1FVRkRSanM3T3pzaWZRPT1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFNTyxNQUFNLHdCQUE4RCxDQUFBO0FBSWxFLEVBQUEsV0FBQSxDQUFvQixjQUFzQyxRQUEyQyxFQUFBO0FBQWpGLElBQUEsSUFBQSxDQUFBLFlBQUEsR0FBQSxZQUFBLENBQUE7QUFGM0IsSUFBQSxJQUFBLENBQVEsK0JBQWtDLEdBQUEsS0FBQSxDQUFBO0FBR3hDLElBQUEsSUFBQSxDQUFLLFFBQVEsUUFBUyxDQUFBLElBQUEsQ0FBQTtBQUFBLEdBQUE7RUFHakIsT0FBb0IsR0FBQTtBQUNyQixJQUFBLElBQUEsT0FBTyxJQUFLLENBQUEsS0FBQSxLQUFVLFVBQVksRUFBQTtBQUNwQyxNQUFBLE9BQU8sS0FBSyxLQUFNLEVBQUEsQ0FBQTtBQUFBLEtBQUE7QUFHcEIsSUFBQSxPQUFPLElBQUssQ0FBQSxLQUFBLENBQUE7QUFBQSxHQUFBO0VBR1AsV0FBb0MsR0FBQTtBQUNsQyxJQUFBLE9BQUEsSUFBQSxDQUFLLGFBQWEsV0FBWSxFQUFBLENBQUE7QUFBQSxHQUFBO0FBR2hDLEVBQUEsYUFBQSxDQUFjLE1BQW9DLEVBQUE7QUFDbEQsSUFBQSxJQUFBLENBQUEsWUFBQSxDQUFhLGNBQWMsTUFBTSxDQUFBLENBQUE7QUFBQSxHQUFBO0FBR2pDLEVBQUEsMkJBQUEsQ0FBNEIsUUFBc0IsRUFBQTtBQUN2RCxJQUFBLElBQUEsQ0FBSywrQkFBa0MsR0FBQSxJQUFBLENBQUE7QUFDOUIsSUFBQSxRQUFBLEVBQUEsQ0FBQTtBQUNULElBQUEsSUFBQSxDQUFLLCtCQUFrQyxHQUFBLEtBQUEsQ0FBQTtBQUFBLEdBQUE7QUFHbEMsRUFBQSx1QkFBQSxDQUF3QixNQUF1QyxFQUFBO0FBQ3BFLElBQUEsT0FBTyxJQUFLLENBQUEsK0JBQUEsQ0FBQTtBQUFBLEdBQUE7QUFFaEI7Ozs7In0=
@@ -0,0 +1,45 @@
1
+ import { sceneGraph } from '../core/sceneGraph/index.js';
2
+
3
+ class UniqueUrlKeyMapper {
4
+ constructor() {
5
+ this.index = /* @__PURE__ */ new Map();
6
+ }
7
+ getUniqueKey(key, obj) {
8
+ const objectsWithKey = this.index.get(key);
9
+ if (!objectsWithKey) {
10
+ this.index.set(key, [obj]);
11
+ return key;
12
+ }
13
+ let address = objectsWithKey.findIndex((o) => o === obj);
14
+ if (address === -1) {
15
+ filterOutOrphanedObjects(objectsWithKey);
16
+ objectsWithKey.push(obj);
17
+ address = objectsWithKey.length - 1;
18
+ }
19
+ if (address > 0) {
20
+ return `${key}-${address + 1}`;
21
+ }
22
+ return key;
23
+ }
24
+ clear() {
25
+ this.index.clear();
26
+ }
27
+ }
28
+ function filterOutOrphanedObjects(sceneObjects) {
29
+ for (const obj of sceneObjects) {
30
+ if (isOrphanOrInActive(obj)) {
31
+ const index = sceneObjects.indexOf(obj);
32
+ sceneObjects.splice(index, 1);
33
+ }
34
+ }
35
+ }
36
+ function isOrphanOrInActive(obj) {
37
+ const root = obj.getRoot();
38
+ if (!sceneGraph.findObject(root, (child) => child === obj)) {
39
+ return true;
40
+ }
41
+ return false;
42
+ }
43
+
44
+ export { UniqueUrlKeyMapper };
45
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVW5pcXVlVXJsS2V5TWFwcGVyLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi9zZXJ2aWNlcy9VbmlxdWVVcmxLZXlNYXBwZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc2NlbmVHcmFwaCB9IGZyb20gJy4uL2NvcmUvc2NlbmVHcmFwaC9pbmRleC5qcyc7XG5cbmNsYXNzIFVuaXF1ZVVybEtleU1hcHBlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuaW5kZXggPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuICB9XG4gIGdldFVuaXF1ZUtleShrZXksIG9iaikge1xuICAgIGNvbnN0IG9iamVjdHNXaXRoS2V5ID0gdGhpcy5pbmRleC5nZXQoa2V5KTtcbiAgICBpZiAoIW9iamVjdHNXaXRoS2V5KSB7XG4gICAgICB0aGlzLmluZGV4LnNldChrZXksIFtvYmpdKTtcbiAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICAgIGxldCBhZGRyZXNzID0gb2JqZWN0c1dpdGhLZXkuZmluZEluZGV4KChvKSA9PiBvID09PSBvYmopO1xuICAgIGlmIChhZGRyZXNzID09PSAtMSkge1xuICAgICAgZmlsdGVyT3V0T3JwaGFuZWRPYmplY3RzKG9iamVjdHNXaXRoS2V5KTtcbiAgICAgIG9iamVjdHNXaXRoS2V5LnB1c2gob2JqKTtcbiAgICAgIGFkZHJlc3MgPSBvYmplY3RzV2l0aEtleS5sZW5ndGggLSAxO1xuICAgIH1cbiAgICBpZiAoYWRkcmVzcyA+IDApIHtcbiAgICAgIHJldHVybiBgJHtrZXl9LSR7YWRkcmVzcyArIDF9YDtcbiAgICB9XG4gICAgcmV0dXJuIGtleTtcbiAgfVxuICBjbGVhcigpIHtcbiAgICB0aGlzLmluZGV4LmNsZWFyKCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGZpbHRlck91dE9ycGhhbmVkT2JqZWN0cyhzY2VuZU9iamVjdHMpIHtcbiAgZm9yIChjb25zdCBvYmogb2Ygc2NlbmVPYmplY3RzKSB7XG4gICAgaWYgKGlzT3JwaGFuT3JJbkFjdGl2ZShvYmopKSB7XG4gICAgICBjb25zdCBpbmRleCA9IHNjZW5lT2JqZWN0cy5pbmRleE9mKG9iaik7XG4gICAgICBzY2VuZU9iamVjdHMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGlzT3JwaGFuT3JJbkFjdGl2ZShvYmopIHtcbiAgY29uc3Qgcm9vdCA9IG9iai5nZXRSb290KCk7XG4gIGlmICghc2NlbmVHcmFwaC5maW5kT2JqZWN0KHJvb3QsIChjaGlsZCkgPT4gY2hpbGQgPT09IG9iaikpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCB7IFVuaXF1ZVVybEtleU1hcHBlciB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lWVzVwY1hWbFZYSnNTMlY1VFdGd2NHVnlMbXB6SWl3aWMyOTFjbU5sY3lJNld5SXVMaTh1TGk4dUxpOXpjbU12YzJWeWRtbGpaWE12Vlc1cGNYVmxWWEpzUzJWNVRXRndjR1Z5TG5SeklsMHNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbWx0Y0c5eWRDQjdJSE5qWlc1bFIzSmhjR2dnZlNCbWNtOXRJQ2N1TGk5amIzSmxMM05qWlc1bFIzSmhjR2duTzF4dWFXMXdiM0owSUhzZ1UyTmxibVZQWW1wbFkzUWdmU0JtY205dElDY3VMaTlqYjNKbEwzUjVjR1Z6Snp0Y2JseHVaWGh3YjNKMElHbHVkR1Z5Wm1GalpTQlRZMlZ1WlU5aWFtVmpkRmRwZEdoRVpYQjBhQ0I3WEc0Z0lITmpaVzVsVDJKcVpXTjBPaUJUWTJWdVpVOWlhbVZqZER0Y2JpQWdaR1Z3ZEdnNklHNTFiV0psY2p0Y2JuMWNibHh1Wlhod2IzSjBJR05zWVhOeklGVnVhWEYxWlZWeWJFdGxlVTFoY0hCbGNpQjdYRzRnSUhCeWFYWmhkR1VnYVc1a1pYZ2dQU0J1WlhjZ1RXRndQSE4wY21sdVp5d2dVMk5sYm1WUFltcGxZM1JiWFQ0b0tUdGNibHh1SUNCd2RXSnNhV01nWjJWMFZXNXBjWFZsUzJWNUtHdGxlVG9nYzNSeWFXNW5MQ0J2WW1vNklGTmpaVzVsVDJKcVpXTjBLU0I3WEc0Z0lDQWdZMjl1YzNRZ2IySnFaV04wYzFkcGRHaExaWGtnUFNCMGFHbHpMbWx1WkdWNExtZGxkQ2hyWlhrcE8xeHVYRzRnSUNBZ2FXWWdLQ0Z2WW1wbFkzUnpWMmwwYUV0bGVTa2dlMXh1SUNBZ0lDQWdkR2hwY3k1cGJtUmxlQzV6WlhRb2EyVjVMQ0JiYjJKcVhTazdYRzRnSUNBZ0lDQnlaWFIxY200Z2EyVjVPMXh1SUNBZ0lIMWNibHh1SUNBZ0lHeGxkQ0JoWkdSeVpYTnpJRDBnYjJKcVpXTjBjMWRwZEdoTFpYa3VabWx1WkVsdVpHVjRLQ2h2S1NBOVBpQnZJRDA5UFNCdlltb3BPMXh1SUNBZ0lHbG1JQ2hoWkdSeVpYTnpJRDA5UFNBdE1Ta2dlMXh1SUNBZ0lDQWdabWxzZEdWeVQzVjBUM0p3YUdGdVpXUlBZbXBsWTNSektHOWlhbVZqZEhOWGFYUm9TMlY1S1R0Y2JpQWdJQ0FnSUc5aWFtVmpkSE5YYVhSb1MyVjVMbkIxYzJnb2IySnFLVHRjYmx4dUlDQWdJQ0FnWVdSa2NtVnpjeUE5SUc5aWFtVmpkSE5YYVhSb1MyVjVMbXhsYm1kMGFDQXRJREU3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdhV1lnS0dGa1pISmxjM01nUGlBd0tTQjdYRzRnSUNBZ0lDQnlaWFIxY200Z1lDUjdhMlY1ZlMwa2UyRmtaSEpsYzNNZ0t5QXhmV0E3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdjbVYwZFhKdUlHdGxlVHRjYmlBZ2ZWeHVYRzRnSUhCMVlteHBZeUJqYkdWaGNpZ3BJSHRjYmlBZ0lDQjBhR2x6TG1sdVpHVjRMbU5zWldGeUtDazdYRzRnSUgxY2JuMWNibHh1Wm5WdVkzUnBiMjRnWm1sc2RHVnlUM1YwVDNKd2FHRnVaV1JQWW1wbFkzUnpLSE5qWlc1bFQySnFaV04wY3pvZ1UyTmxibVZQWW1wbFkzUmJYU2tnZTF4dUlDQm1iM0lnS0dOdmJuTjBJRzlpYWlCdlppQnpZMlZ1WlU5aWFtVmpkSE1wSUh0Y2JpQWdJQ0JwWmlBb2FYTlBjbkJvWVc1UGNrbHVRV04wYVhabEtHOWlhaWtwSUh0Y2JpQWdJQ0FnSUdOdmJuTjBJR2x1WkdWNElEMGdjMk5sYm1WUFltcGxZM1J6TG1sdVpHVjRUMllvYjJKcUtUdGNiaUFnSUNBZ0lITmpaVzVsVDJKcVpXTjBjeTV6Y0d4cFkyVW9hVzVrWlhnc0lERXBPMXh1SUNBZ0lIMWNiaUFnZlZ4dWZWeHVYRzVtZFc1amRHbHZiaUJwYzA5eWNHaGhiazl5U1c1QlkzUnBkbVVvYjJKcU9pQlRZMlZ1WlU5aWFtVmpkQ2tnZTF4dUlDQmpiMjV6ZENCeWIyOTBJRDBnYjJKcUxtZGxkRkp2YjNRb0tUdGNibHh1SUNBdkx5QkpaaUIzWlNCallXNXViM1FnWm1sdVpDQnBkQ0JtY205dElIUm9aU0J5YjI5MElHbDBKM01nWVc0Z2IzSndhR0Z1WEc0Z0lHbG1JQ2doYzJObGJtVkhjbUZ3YUM1bWFXNWtUMkpxWldOMEtISnZiM1FzSUNoamFHbHNaQ2tnUFQ0Z1kyaHBiR1FnUFQwOUlHOWlhaWtwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdkSEoxWlR0Y2JpQWdmVnh1WEc0Z0lISmxkSFZ5YmlCbVlXeHpaVHRjYm4xY2JpSmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU96dEJRVkZQTEUxQlFVMHNhMEpCUVcxQ0xFTkJRVUU3UVVGQlFTeEZRVUY2UWl4WFFVRkJMRWRCUVVFN1FVRkRUQ3hKUVVGUkxFbEJRVUVzUTBGQlFTeExRVUZCTEhWQ1FVRlpMRWRCUVRKQ0xFVkJRVUVzUTBGQlFUdEJRVUZCTEVkQlFVRTdRVUZCUVN4RlFVVjRReXhaUVVGQkxFTkJRV0VzUzBGQllTeEhRVUZyUWl4RlFVRkJPMEZCUTJwRUxFbEJRVUVzVFVGQlRTeGpRVUZwUWl4SFFVRkJMRWxCUVVFc1EwRkJTeXhMUVVGTkxFTkJRVUVzUjBGQlFTeERRVUZKTEVkQlFVY3NRMEZCUVN4RFFVRkJPMEZCUlhwRExFbEJRVUVzU1VGQlNTeERRVUZETEdOQlFXZENMRVZCUVVFN1FVRkRia0lzVFVGQlFTeEpRVUZCTEVOQlFVc3NTMEZCVFN4RFFVRkJMRWRCUVVFc1EwRkJTU3hIUVVGTExFVkJRVUVzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUVN4RFFVRkJPMEZCUTNwQ0xFMUJRVThzVDBGQlFTeEhRVUZCTEVOQlFVRTdRVUZCUVN4TFFVTlVPMEZCUlVFc1NVRkJRU3hKUVVGSkxGVkJRVlVzWTBGQlpTeERRVUZCTEZOQlFVRXNRMEZCVlN4RFFVRkRMRU5CUVVFc1MwRkJUU3hOUVVGTkxFZEJRVWNzUTBGQlFTeERRVUZCTzBGQlEzWkVMRWxCUVVFc1NVRkJTU3haUVVGWkxFTkJRVWtzUTBGQlFTeEZRVUZCTzBGQlEyeENMRTFCUVVFc2QwSkJRVUVzUTBGQmVVSXNZMEZCWXl4RFFVRkJMRU5CUVVFN1FVRkRka01zVFVGQlFTeGpRVUZCTEVOQlFXVXNTMEZCU3l4SFFVRkhMRU5CUVVFc1EwRkJRVHRCUVVWMlFpeE5RVUZCTEU5QlFVRXNSMEZCVlN4bFFVRmxMRTFCUVZNc1IwRkJRU3hEUVVGQkxFTkJRVUU3UVVGQlFTeExRVU53UXp0QlFVVkJMRWxCUVVFc1NVRkJTU3hWUVVGVkxFTkJRVWNzUlVGQlFUdEJRVU5tTEUxQlFVOHNUMEZCUVN4RFFVRkJMRVZCUVVjc1QwRkJUeXhQUVVGVkxFZEJRVUVzUTBGQlFTeERRVUZCTEVOQlFVRXNRMEZCUVR0QlFVRkJMRXRCUXpkQ08wRkJSVUVzU1VGQlR5eFBRVUZCTEVkQlFVRXNRMEZCUVR0QlFVRkJMRWRCUTFRN1FVRkJRU3hGUVVWUExFdEJRVkVzUjBGQlFUdEJRVU5pTEVsQlFVRXNTVUZCUVN4RFFVRkxMRTFCUVUwc1MwRkJUU3hGUVVGQkxFTkJRVUU3UVVGQlFTeEhRVU51UWp0QlFVTkdMRU5CUVVFN1FVRkZRU3hUUVVGVExIbENRVUY1UWl4WlFVRTJRaXhGUVVGQk8wRkJRemRFTEVWQlFVRXNTMEZCUVN4TlFVRlhMRTlCUVU4c1dVRkJZeXhGUVVGQk8wRkJRemxDTEVsQlFVa3NTVUZCUVN4clFrRkJRU3hEUVVGdFFpeEhRVUZITEVOQlFVY3NSVUZCUVR0QlFVTXpRaXhOUVVGTkxFMUJRVUVzUzBGQlFTeEhRVUZSTEZsQlFXRXNRMEZCUVN4UFFVRkJMRU5CUVZFc1IwRkJSeXhEUVVGQkxFTkJRVUU3UVVGRGRFTXNUVUZCWVN4WlFVRkJMRU5CUVVFc1RVRkJRU3hEUVVGUExFOUJRVThzUTBGQlF5eERRVUZCTEVOQlFVRTdRVUZCUVN4TFFVTTVRanRCUVVGQkxFZEJRMFk3UVVGRFJpeERRVUZCTzBGQlJVRXNVMEZCVXl4dFFrRkJiVUlzUjBGQmEwSXNSVUZCUVR0QlFVTTFReXhGUVVGTkxFMUJRVUVzU1VGQlFTeEhRVUZQTEVsQlFVa3NUMEZCVVN4RlFVRkJMRU5CUVVFN1FVRkhla0lzUlVGQlNTeEpRVUZCTEVOQlFVTXNWMEZCVnl4VlFVRlhMRU5CUVVFc1NVRkJRU3hGUVVGTkxFTkJRVU1zUzBGQlZTeExRVUZCTEV0QlFVRXNTMEZCVlN4SFFVRkhMRU5CUVVjc1JVRkJRVHRCUVVNeFJDeEpRVUZQTEU5QlFVRXNTVUZCUVN4RFFVRkJPMEZCUVVFc1IwRkRWRHRCUVVWQkxFVkJRVThzVDBGQlFTeExRVUZCTEVOQlFVRTdRVUZEVkRzN096c2lmUT09XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFRTyxNQUFNLGtCQUFtQixDQUFBO0VBQXpCLFdBQUEsR0FBQTtBQUNHLElBQUEsSUFBQSxDQUFBLEtBQUEsdUJBQVksR0FBMkIsRUFBQSxDQUFBO0FBQUEsR0FBQTtBQUV4QyxFQUFBLFlBQUEsQ0FBYSxLQUFhLEdBQWtCLEVBQUE7QUFDakQsSUFBQSxNQUFNLGNBQWlCLEdBQUEsSUFBQSxDQUFLLEtBQU0sQ0FBQSxHQUFBLENBQUksR0FBRyxDQUFBLENBQUE7QUFFekMsSUFBQSxJQUFJLENBQUMsY0FBZ0IsRUFBQTtBQUNuQixNQUFBLElBQUEsQ0FBSyxLQUFNLENBQUEsR0FBQSxDQUFJLEdBQUssRUFBQSxDQUFDLEdBQUcsQ0FBQyxDQUFBLENBQUE7QUFDbEIsTUFBQSxPQUFBLEdBQUEsQ0FBQTtBQUFBLEtBQUE7QUFHVCxJQUFBLElBQUksVUFBVSxjQUFlLENBQUEsU0FBQSxDQUFVLENBQUMsQ0FBQSxLQUFNLE1BQU0sR0FBRyxDQUFBLENBQUE7QUFDdkQsSUFBQSxJQUFJLFlBQVksQ0FBSSxDQUFBLEVBQUE7QUFDbEIsTUFBQSx3QkFBQSxDQUF5QixjQUFjLENBQUEsQ0FBQTtBQUN2QyxNQUFBLGNBQUEsQ0FBZSxLQUFLLEdBQUcsQ0FBQSxDQUFBO0FBRXZCLE1BQUEsT0FBQSxHQUFVLGVBQWUsTUFBUyxHQUFBLENBQUEsQ0FBQTtBQUFBLEtBQUE7QUFHcEMsSUFBQSxJQUFJLFVBQVUsQ0FBRyxFQUFBO0FBQ1IsTUFBQSxPQUFBLENBQUEsRUFBRyxPQUFPLE9BQVUsR0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBO0FBQUEsS0FBQTtBQUd0QixJQUFBLE9BQUEsR0FBQSxDQUFBO0FBQUEsR0FBQTtFQUdGLEtBQVEsR0FBQTtBQUNiLElBQUEsSUFBQSxDQUFLLE1BQU0sS0FBTSxFQUFBLENBQUE7QUFBQSxHQUFBO0FBRXJCLENBQUE7QUFFQSxTQUFTLHlCQUF5QixZQUE2QixFQUFBO0FBQzdELEVBQUEsS0FBQSxNQUFXLE9BQU8sWUFBYyxFQUFBO0FBQzFCLElBQUEsSUFBQSxrQkFBQSxDQUFtQixHQUFHLENBQUcsRUFBQTtBQUNyQixNQUFBLE1BQUEsS0FBQSxHQUFRLFlBQWEsQ0FBQSxPQUFBLENBQVEsR0FBRyxDQUFBLENBQUE7QUFDekIsTUFBQSxZQUFBLENBQUEsTUFBQSxDQUFPLE9BQU8sQ0FBQyxDQUFBLENBQUE7QUFBQSxLQUFBO0FBQzlCLEdBQUE7QUFFSixDQUFBO0FBRUEsU0FBUyxtQkFBbUIsR0FBa0IsRUFBQTtBQUN0QyxFQUFBLE1BQUEsSUFBQSxHQUFPLElBQUksT0FBUSxFQUFBLENBQUE7QUFHckIsRUFBQSxJQUFBLENBQUMsV0FBVyxVQUFXLENBQUEsSUFBQSxFQUFNLENBQUMsS0FBVSxLQUFBLEtBQUEsS0FBVSxHQUFHLENBQUcsRUFBQTtBQUNuRCxJQUFBLE9BQUEsSUFBQSxDQUFBO0FBQUEsR0FBQTtBQUdGLEVBQUEsT0FBQSxLQUFBLENBQUE7QUFDVDs7OzsifQ==
@@ -0,0 +1,167 @@
1
+ import { locationService } from '@grafana/runtime';
2
+ import { SceneObjectStateChangedEvent } from '../core/events.js';
3
+ import { writeSceneLog } from '../utils/writeSceneLog.js';
4
+ import { Subscription } from 'rxjs';
5
+ import { UniqueUrlKeyMapper } from './UniqueUrlKeyMapper.js';
6
+ import { getUrlState, syncStateFromUrl, isUrlValueEqual } from './utils.js';
7
+ import { BusEventWithPayload } from '@grafana/data';
8
+ import { useMemo } from 'react';
9
+
10
+ var __accessCheck = (obj, member, msg) => {
11
+ if (!member.has(obj))
12
+ throw TypeError("Cannot " + msg);
13
+ };
14
+ var __privateGet = (obj, member, getter) => {
15
+ __accessCheck(obj, member, "read from private field");
16
+ return getter ? getter.call(obj) : member.get(obj);
17
+ };
18
+ var __privateAdd = (obj, member, value) => {
19
+ if (member.has(obj))
20
+ throw TypeError("Cannot add the same private member more than once");
21
+ member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
22
+ };
23
+ var __privateSet = (obj, member, value, setter) => {
24
+ __accessCheck(obj, member, "write to private field");
25
+ setter ? setter.call(obj, value) : member.set(obj, value);
26
+ return value;
27
+ };
28
+ var _cache, _location;
29
+ class NewSceneObjectAddedEvent extends BusEventWithPayload {
30
+ }
31
+ NewSceneObjectAddedEvent.type = "new-scene-object-added";
32
+ class UrlSyncManager {
33
+ constructor(_options = {}, locationService$1 = locationService) {
34
+ this._urlKeyMapper = new UniqueUrlKeyMapper();
35
+ this._options = _options;
36
+ this._locationService = locationService$1;
37
+ this._paramsCache = new UrlParamsCache(locationService$1);
38
+ }
39
+ initSync(root) {
40
+ var _a;
41
+ if (this._subs) {
42
+ writeSceneLog("UrlSyncManager", "Unregister previous scene state subscription", (_a = this._sceneRoot) == null ? void 0 : _a.state.key);
43
+ this._subs.unsubscribe();
44
+ }
45
+ writeSceneLog("UrlSyncManager", "init", root.state.key);
46
+ this._sceneRoot = root;
47
+ this._subs = new Subscription();
48
+ this._subs.add(
49
+ root.subscribeToEvent(SceneObjectStateChangedEvent, (evt) => {
50
+ this.handleSceneObjectStateChanged(evt.payload.changedObject);
51
+ })
52
+ );
53
+ this._subs.add(
54
+ root.subscribeToEvent(NewSceneObjectAddedEvent, (evt) => {
55
+ this.handleNewObject(evt.payload);
56
+ })
57
+ );
58
+ this._urlKeyMapper.clear();
59
+ this._lastLocation = this._locationService.getLocation();
60
+ this.handleNewObject(this._sceneRoot);
61
+ if (this._options.updateUrlOnInit) {
62
+ const urlState = getUrlState(root);
63
+ if (isUrlStateDifferent(urlState, this._paramsCache.getParams())) {
64
+ this._locationService.partial(urlState, true);
65
+ }
66
+ }
67
+ }
68
+ cleanUp(root) {
69
+ if (this._sceneRoot !== root) {
70
+ return;
71
+ }
72
+ writeSceneLog("UrlSyncManager", "Clean up");
73
+ if (this._subs) {
74
+ this._subs.unsubscribe();
75
+ this._subs = void 0;
76
+ writeSceneLog(
77
+ "UrlSyncManager",
78
+ "Root deactived, unsub to state",
79
+ "same key",
80
+ this._sceneRoot.state.key === root.state.key
81
+ );
82
+ }
83
+ this._sceneRoot = void 0;
84
+ this._lastLocation = void 0;
85
+ }
86
+ handleNewLocation(location) {
87
+ if (!this._sceneRoot || this._lastLocation === location) {
88
+ return;
89
+ }
90
+ writeSceneLog("UrlSyncManager", "handleNewLocation");
91
+ this._lastLocation = location;
92
+ syncStateFromUrl(this._sceneRoot, this._paramsCache.getParams(), this._urlKeyMapper);
93
+ }
94
+ handleNewObject(sceneObj) {
95
+ if (!this._sceneRoot) {
96
+ return;
97
+ }
98
+ syncStateFromUrl(sceneObj, this._paramsCache.getParams(), this._urlKeyMapper);
99
+ }
100
+ handleSceneObjectStateChanged(changedObject) {
101
+ var _a, _b;
102
+ if (!changedObject.urlSync) {
103
+ return;
104
+ }
105
+ const newUrlState = changedObject.urlSync.getUrlState();
106
+ const searchParams = this._locationService.getSearch();
107
+ const mappedUpdated = {};
108
+ for (const [key, newUrlValue] of Object.entries(newUrlState)) {
109
+ const uniqueKey = this._urlKeyMapper.getUniqueKey(key, changedObject);
110
+ const currentUrlValue = searchParams.getAll(uniqueKey);
111
+ if (!isUrlValueEqual(currentUrlValue, newUrlValue)) {
112
+ mappedUpdated[uniqueKey] = newUrlValue;
113
+ }
114
+ }
115
+ if (Object.keys(mappedUpdated).length > 0) {
116
+ const shouldCreateHistoryEntry = (_b = (_a = changedObject.urlSync).shouldCreateHistoryStep) == null ? void 0 : _b.call(_a, newUrlState);
117
+ const shouldReplace = shouldCreateHistoryEntry !== true;
118
+ writeSceneLog("UrlSyncManager", "onStateChange updating URL");
119
+ this._locationService.partial(mappedUpdated, shouldReplace);
120
+ this._lastLocation = this._locationService.getLocation();
121
+ }
122
+ }
123
+ getUrlState(root) {
124
+ return getUrlState(root);
125
+ }
126
+ }
127
+ class UrlParamsCache {
128
+ constructor(locationService2) {
129
+ this.locationService = locationService2;
130
+ __privateAdd(this, _cache, void 0);
131
+ __privateAdd(this, _location, void 0);
132
+ }
133
+ getParams() {
134
+ const location = this.locationService.getLocation();
135
+ if (__privateGet(this, _location) === location) {
136
+ return __privateGet(this, _cache);
137
+ }
138
+ __privateSet(this, _location, location);
139
+ __privateSet(this, _cache, new URLSearchParams(location.search));
140
+ return __privateGet(this, _cache);
141
+ }
142
+ }
143
+ _cache = /* @__PURE__ */ new WeakMap();
144
+ _location = /* @__PURE__ */ new WeakMap();
145
+ function isUrlStateDifferent(sceneUrlState, currentParams) {
146
+ for (let key in sceneUrlState) {
147
+ if (!isUrlValueEqual(currentParams.getAll(key), sceneUrlState[key])) {
148
+ return true;
149
+ }
150
+ }
151
+ return false;
152
+ }
153
+ function useUrlSyncManager(options, locationService2) {
154
+ return useMemo(
155
+ () => new UrlSyncManager(
156
+ {
157
+ updateUrlOnInit: options.updateUrlOnInit,
158
+ createBrowserHistorySteps: options.createBrowserHistorySteps
159
+ },
160
+ locationService2
161
+ ),
162
+ [options.updateUrlOnInit, options.createBrowserHistorySteps, locationService2]
163
+ );
164
+ }
165
+
166
+ export { NewSceneObjectAddedEvent, UrlSyncManager, useUrlSyncManager };
167
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVXJsU3luY01hbmFnZXIuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NlcnZpY2VzL1VybFN5bmNNYW5hZ2VyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGxvY2F0aW9uU2VydmljZSB9IGZyb20gJ0BncmFmYW5hL3J1bnRpbWUnO1xuaW1wb3J0IHsgU2NlbmVPYmplY3RTdGF0ZUNoYW5nZWRFdmVudCB9IGZyb20gJy4uL2NvcmUvZXZlbnRzLmpzJztcbmltcG9ydCB7IHdyaXRlU2NlbmVMb2cgfSBmcm9tICcuLi91dGlscy93cml0ZVNjZW5lTG9nLmpzJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVW5pcXVlVXJsS2V5TWFwcGVyIH0gZnJvbSAnLi9VbmlxdWVVcmxLZXlNYXBwZXIuanMnO1xuaW1wb3J0IHsgZ2V0VXJsU3RhdGUsIHN5bmNTdGF0ZUZyb21VcmwsIGlzVXJsVmFsdWVFcXVhbCB9IGZyb20gJy4vdXRpbHMuanMnO1xuaW1wb3J0IHsgQnVzRXZlbnRXaXRoUGF5bG9hZCB9IGZyb20gJ0BncmFmYW5hL2RhdGEnO1xuaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcblxudmFyIF9fYWNjZXNzQ2hlY2sgPSAob2JqLCBtZW1iZXIsIG1zZykgPT4ge1xuICBpZiAoIW1lbWJlci5oYXMob2JqKSlcbiAgICB0aHJvdyBUeXBlRXJyb3IoXCJDYW5ub3QgXCIgKyBtc2cpO1xufTtcbnZhciBfX3ByaXZhdGVHZXQgPSAob2JqLCBtZW1iZXIsIGdldHRlcikgPT4ge1xuICBfX2FjY2Vzc0NoZWNrKG9iaiwgbWVtYmVyLCBcInJlYWQgZnJvbSBwcml2YXRlIGZpZWxkXCIpO1xuICByZXR1cm4gZ2V0dGVyID8gZ2V0dGVyLmNhbGwob2JqKSA6IG1lbWJlci5nZXQob2JqKTtcbn07XG52YXIgX19wcml2YXRlQWRkID0gKG9iaiwgbWVtYmVyLCB2YWx1ZSkgPT4ge1xuICBpZiAobWVtYmVyLmhhcyhvYmopKVxuICAgIHRocm93IFR5cGVFcnJvcihcIkNhbm5vdCBhZGQgdGhlIHNhbWUgcHJpdmF0ZSBtZW1iZXIgbW9yZSB0aGFuIG9uY2VcIik7XG4gIG1lbWJlciBpbnN0YW5jZW9mIFdlYWtTZXQgPyBtZW1iZXIuYWRkKG9iaikgOiBtZW1iZXIuc2V0KG9iaiwgdmFsdWUpO1xufTtcbnZhciBfX3ByaXZhdGVTZXQgPSAob2JqLCBtZW1iZXIsIHZhbHVlLCBzZXR0ZXIpID0+IHtcbiAgX19hY2Nlc3NDaGVjayhvYmosIG1lbWJlciwgXCJ3cml0ZSB0byBwcml2YXRlIGZpZWxkXCIpO1xuICBzZXR0ZXIgPyBzZXR0ZXIuY2FsbChvYmosIHZhbHVlKSA6IG1lbWJlci5zZXQob2JqLCB2YWx1ZSk7XG4gIHJldHVybiB2YWx1ZTtcbn07XG52YXIgX2NhY2hlLCBfbG9jYXRpb247XG5jbGFzcyBOZXdTY2VuZU9iamVjdEFkZGVkRXZlbnQgZXh0ZW5kcyBCdXNFdmVudFdpdGhQYXlsb2FkIHtcbn1cbk5ld1NjZW5lT2JqZWN0QWRkZWRFdmVudC50eXBlID0gXCJuZXctc2NlbmUtb2JqZWN0LWFkZGVkXCI7XG5jbGFzcyBVcmxTeW5jTWFuYWdlciB7XG4gIGNvbnN0cnVjdG9yKF9vcHRpb25zID0ge30sIGxvY2F0aW9uU2VydmljZSQxID0gbG9jYXRpb25TZXJ2aWNlKSB7XG4gICAgdGhpcy5fdXJsS2V5TWFwcGVyID0gbmV3IFVuaXF1ZVVybEtleU1hcHBlcigpO1xuICAgIHRoaXMuX29wdGlvbnMgPSBfb3B0aW9ucztcbiAgICB0aGlzLl9sb2NhdGlvblNlcnZpY2UgPSBsb2NhdGlvblNlcnZpY2UkMTtcbiAgICB0aGlzLl9wYXJhbXNDYWNoZSA9IG5ldyBVcmxQYXJhbXNDYWNoZShsb2NhdGlvblNlcnZpY2UkMSk7XG4gIH1cbiAgaW5pdFN5bmMocm9vdCkge1xuICAgIHZhciBfYTtcbiAgICBpZiAodGhpcy5fc3Vicykge1xuICAgICAgd3JpdGVTY2VuZUxvZyhcIlVybFN5bmNNYW5hZ2VyXCIsIFwiVW5yZWdpc3RlciBwcmV2aW91cyBzY2VuZSBzdGF0ZSBzdWJzY3JpcHRpb25cIiwgKF9hID0gdGhpcy5fc2NlbmVSb290KSA9PSBudWxsID8gdm9pZCAwIDogX2Euc3RhdGUua2V5KTtcbiAgICAgIHRoaXMuX3N1YnMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgd3JpdGVTY2VuZUxvZyhcIlVybFN5bmNNYW5hZ2VyXCIsIFwiaW5pdFwiLCByb290LnN0YXRlLmtleSk7XG4gICAgdGhpcy5fc2NlbmVSb290ID0gcm9vdDtcbiAgICB0aGlzLl9zdWJzID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgIHRoaXMuX3N1YnMuYWRkKFxuICAgICAgcm9vdC5zdWJzY3JpYmVUb0V2ZW50KFNjZW5lT2JqZWN0U3RhdGVDaGFuZ2VkRXZlbnQsIChldnQpID0+IHtcbiAgICAgICAgdGhpcy5oYW5kbGVTY2VuZU9iamVjdFN0YXRlQ2hhbmdlZChldnQucGF5bG9hZC5jaGFuZ2VkT2JqZWN0KTtcbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLl9zdWJzLmFkZChcbiAgICAgIHJvb3Quc3Vic2NyaWJlVG9FdmVudChOZXdTY2VuZU9iamVjdEFkZGVkRXZlbnQsIChldnQpID0+IHtcbiAgICAgICAgdGhpcy5oYW5kbGVOZXdPYmplY3QoZXZ0LnBheWxvYWQpO1xuICAgICAgfSlcbiAgICApO1xuICAgIHRoaXMuX3VybEtleU1hcHBlci5jbGVhcigpO1xuICAgIHRoaXMuX2xhc3RMb2NhdGlvbiA9IHRoaXMuX2xvY2F0aW9uU2VydmljZS5nZXRMb2NhdGlvbigpO1xuICAgIHRoaXMuaGFuZGxlTmV3T2JqZWN0KHRoaXMuX3NjZW5lUm9vdCk7XG4gICAgaWYgKHRoaXMuX29wdGlvbnMudXBkYXRlVXJsT25Jbml0KSB7XG4gICAgICBjb25zdCB1cmxTdGF0ZSA9IGdldFVybFN0YXRlKHJvb3QpO1xuICAgICAgaWYgKGlzVXJsU3RhdGVEaWZmZXJlbnQodXJsU3RhdGUsIHRoaXMuX3BhcmFtc0NhY2hlLmdldFBhcmFtcygpKSkge1xuICAgICAgICB0aGlzLl9sb2NhdGlvblNlcnZpY2UucGFydGlhbCh1cmxTdGF0ZSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNsZWFuVXAocm9vdCkge1xuICAgIGlmICh0aGlzLl9zY2VuZVJvb3QgIT09IHJvb3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgd3JpdGVTY2VuZUxvZyhcIlVybFN5bmNNYW5hZ2VyXCIsIFwiQ2xlYW4gdXBcIik7XG4gICAgaWYgKHRoaXMuX3N1YnMpIHtcbiAgICAgIHRoaXMuX3N1YnMudW5zdWJzY3JpYmUoKTtcbiAgICAgIHRoaXMuX3N1YnMgPSB2b2lkIDA7XG4gICAgICB3cml0ZVNjZW5lTG9nKFxuICAgICAgICBcIlVybFN5bmNNYW5hZ2VyXCIsXG4gICAgICAgIFwiUm9vdCBkZWFjdGl2ZWQsIHVuc3ViIHRvIHN0YXRlXCIsXG4gICAgICAgIFwic2FtZSBrZXlcIixcbiAgICAgICAgdGhpcy5fc2NlbmVSb290LnN0YXRlLmtleSA9PT0gcm9vdC5zdGF0ZS5rZXlcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuX3NjZW5lUm9vdCA9IHZvaWQgMDtcbiAgICB0aGlzLl9sYXN0TG9jYXRpb24gPSB2b2lkIDA7XG4gIH1cbiAgaGFuZGxlTmV3TG9jYXRpb24obG9jYXRpb24pIHtcbiAgICBpZiAoIXRoaXMuX3NjZW5lUm9vdCB8fCB0aGlzLl9sYXN0TG9jYXRpb24gPT09IGxvY2F0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHdyaXRlU2NlbmVMb2coXCJVcmxTeW5jTWFuYWdlclwiLCBcImhhbmRsZU5ld0xvY2F0aW9uXCIpO1xuICAgIHRoaXMuX2xhc3RMb2NhdGlvbiA9IGxvY2F0aW9uO1xuICAgIHN5bmNTdGF0ZUZyb21VcmwodGhpcy5fc2NlbmVSb290LCB0aGlzLl9wYXJhbXNDYWNoZS5nZXRQYXJhbXMoKSwgdGhpcy5fdXJsS2V5TWFwcGVyKTtcbiAgfVxuICBoYW5kbGVOZXdPYmplY3Qoc2NlbmVPYmopIHtcbiAgICBpZiAoIXRoaXMuX3NjZW5lUm9vdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzeW5jU3RhdGVGcm9tVXJsKHNjZW5lT2JqLCB0aGlzLl9wYXJhbXNDYWNoZS5nZXRQYXJhbXMoKSwgdGhpcy5fdXJsS2V5TWFwcGVyKTtcbiAgfVxuICBoYW5kbGVTY2VuZU9iamVjdFN0YXRlQ2hhbmdlZChjaGFuZ2VkT2JqZWN0KSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICBpZiAoIWNoYW5nZWRPYmplY3QudXJsU3luYykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBuZXdVcmxTdGF0ZSA9IGNoYW5nZWRPYmplY3QudXJsU3luYy5nZXRVcmxTdGF0ZSgpO1xuICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IHRoaXMuX2xvY2F0aW9uU2VydmljZS5nZXRTZWFyY2goKTtcbiAgICBjb25zdCBtYXBwZWRVcGRhdGVkID0ge307XG4gICAgZm9yIChjb25zdCBba2V5LCBuZXdVcmxWYWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMobmV3VXJsU3RhdGUpKSB7XG4gICAgICBjb25zdCB1bmlxdWVLZXkgPSB0aGlzLl91cmxLZXlNYXBwZXIuZ2V0VW5pcXVlS2V5KGtleSwgY2hhbmdlZE9iamVjdCk7XG4gICAgICBjb25zdCBjdXJyZW50VXJsVmFsdWUgPSBzZWFyY2hQYXJhbXMuZ2V0QWxsKHVuaXF1ZUtleSk7XG4gICAgICBpZiAoIWlzVXJsVmFsdWVFcXVhbChjdXJyZW50VXJsVmFsdWUsIG5ld1VybFZhbHVlKSkge1xuICAgICAgICBtYXBwZWRVcGRhdGVkW3VuaXF1ZUtleV0gPSBuZXdVcmxWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKE9iamVjdC5rZXlzKG1hcHBlZFVwZGF0ZWQpLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHNob3VsZENyZWF0ZUhpc3RvcnlFbnRyeSA9IChfYiA9IChfYSA9IGNoYW5nZWRPYmplY3QudXJsU3luYykuc2hvdWxkQ3JlYXRlSGlzdG9yeVN0ZXApID09IG51bGwgPyB2b2lkIDAgOiBfYi5jYWxsKF9hLCBuZXdVcmxTdGF0ZSk7XG4gICAgICBjb25zdCBzaG91bGRSZXBsYWNlID0gc2hvdWxkQ3JlYXRlSGlzdG9yeUVudHJ5ICE9PSB0cnVlO1xuICAgICAgd3JpdGVTY2VuZUxvZyhcIlVybFN5bmNNYW5hZ2VyXCIsIFwib25TdGF0ZUNoYW5nZSB1cGRhdGluZyBVUkxcIik7XG4gICAgICB0aGlzLl9sb2NhdGlvblNlcnZpY2UucGFydGlhbChtYXBwZWRVcGRhdGVkLCBzaG91bGRSZXBsYWNlKTtcbiAgICAgIHRoaXMuX2xhc3RMb2NhdGlvbiA9IHRoaXMuX2xvY2F0aW9uU2VydmljZS5nZXRMb2NhdGlvbigpO1xuICAgIH1cbiAgfVxuICBnZXRVcmxTdGF0ZShyb290KSB7XG4gICAgcmV0dXJuIGdldFVybFN0YXRlKHJvb3QpO1xuICB9XG59XG5jbGFzcyBVcmxQYXJhbXNDYWNoZSB7XG4gIGNvbnN0cnVjdG9yKGxvY2F0aW9uU2VydmljZSkge1xuICAgIHRoaXMubG9jYXRpb25TZXJ2aWNlID0gbG9jYXRpb25TZXJ2aWNlO1xuICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfY2FjaGUsIHZvaWQgMCk7XG4gICAgX19wcml2YXRlQWRkKHRoaXMsIF9sb2NhdGlvbiwgdm9pZCAwKTtcbiAgfVxuICBnZXRQYXJhbXMoKSB7XG4gICAgY29uc3QgbG9jYXRpb24gPSB0aGlzLmxvY2F0aW9uU2VydmljZS5nZXRMb2NhdGlvbigpO1xuICAgIGlmIChfX3ByaXZhdGVHZXQodGhpcywgX2xvY2F0aW9uKSA9PT0gbG9jYXRpb24pIHtcbiAgICAgIHJldHVybiBfX3ByaXZhdGVHZXQodGhpcywgX2NhY2hlKTtcbiAgICB9XG4gICAgX19wcml2YXRlU2V0KHRoaXMsIF9sb2NhdGlvbiwgbG9jYXRpb24pO1xuICAgIF9fcHJpdmF0ZVNldCh0aGlzLCBfY2FjaGUsIG5ldyBVUkxTZWFyY2hQYXJhbXMobG9jYXRpb24uc2VhcmNoKSk7XG4gICAgcmV0dXJuIF9fcHJpdmF0ZUdldCh0aGlzLCBfY2FjaGUpO1xuICB9XG59XG5fY2FjaGUgPSBuZXcgV2Vha01hcCgpO1xuX2xvY2F0aW9uID0gbmV3IFdlYWtNYXAoKTtcbmZ1bmN0aW9uIGlzVXJsU3RhdGVEaWZmZXJlbnQoc2NlbmVVcmxTdGF0ZSwgY3VycmVudFBhcmFtcykge1xuICBmb3IgKGxldCBrZXkgaW4gc2NlbmVVcmxTdGF0ZSkge1xuICAgIGlmICghaXNVcmxWYWx1ZUVxdWFsKGN1cnJlbnRQYXJhbXMuZ2V0QWxsKGtleSksIHNjZW5lVXJsU3RhdGVba2V5XSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiB1c2VVcmxTeW5jTWFuYWdlcihvcHRpb25zLCBsb2NhdGlvblNlcnZpY2UpIHtcbiAgcmV0dXJuIHVzZU1lbW8oXG4gICAgKCkgPT4gbmV3IFVybFN5bmNNYW5hZ2VyKFxuICAgICAge1xuICAgICAgICB1cGRhdGVVcmxPbkluaXQ6IG9wdGlvbnMudXBkYXRlVXJsT25Jbml0LFxuICAgICAgICBjcmVhdGVCcm93c2VySGlzdG9yeVN0ZXBzOiBvcHRpb25zLmNyZWF0ZUJyb3dzZXJIaXN0b3J5U3RlcHNcbiAgICAgIH0sXG4gICAgICBsb2NhdGlvblNlcnZpY2VcbiAgICApLFxuICAgIFtvcHRpb25zLnVwZGF0ZVVybE9uSW5pdCwgb3B0aW9ucy5jcmVhdGVCcm93c2VySGlzdG9yeVN0ZXBzLCBsb2NhdGlvblNlcnZpY2VdXG4gICk7XG59XG5cbmV4cG9ydCB7IE5ld1NjZW5lT2JqZWN0QWRkZWRFdmVudCwgVXJsU3luY01hbmFnZXIsIHVzZVVybFN5bmNNYW5hZ2VyIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVZYSnNVM2x1WTAxaGJtRm5aWEl1YW5NaUxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUx5NHVMM055WXk5elpYSjJhV05sY3k5VmNteFRlVzVqVFdGdVlXZGxjaTUwY3lKZExDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SnBiWEJ2Y25RZ2V5Qk1iMk5oZEdsdmJpQjlJR1p5YjIwZ0oyaHBjM1J2Y25rbk8xeHVYRzVwYlhCdmNuUWdleUJNYjJOaGRHbHZibE5sY25acFkyVXNJR3h2WTJGMGFXOXVVMlZ5ZG1salpTQmhjeUJzYjJOaGRHbHZibE5sY25acFkyVlNkVzUwYVcxbElIMGdabkp2YlNBblFHZHlZV1poYm1FdmNuVnVkR2x0WlNjN1hHNWNibWx0Y0c5eWRDQjdJRk5qWlc1bFQySnFaV04wVTNSaGRHVkRhR0Z1WjJWa1JYWmxiblFnZlNCbWNtOXRJQ2N1TGk5amIzSmxMMlYyWlc1MGN5YzdYRzVwYlhCdmNuUWdleUJUWTJWdVpVOWlhbVZqZEN3Z1UyTmxibVZQWW1wbFkzUlZjbXhXWVd4MVpYTXNJRk5qWlc1bFZYSnNVM2x1WTA5d2RHbHZibk1nZlNCbWNtOXRJQ2N1TGk5amIzSmxMM1I1Y0dWekp6dGNibWx0Y0c5eWRDQjdJSGR5YVhSbFUyTmxibVZNYjJjZ2ZTQm1jbTl0SUNjdUxpOTFkR2xzY3k5M2NtbDBaVk5qWlc1bFRHOW5KenRjYm1sdGNHOXlkQ0I3SUZOMVluTmpjbWx3ZEdsdmJpQjlJR1p5YjIwZ0ozSjRhbk1uTzF4dWFXMXdiM0owSUhzZ1ZXNXBjWFZsVlhKc1MyVjVUV0Z3Y0dWeUlIMGdabkp2YlNBbkxpOVZibWx4ZFdWVmNteExaWGxOWVhCd1pYSW5PMXh1YVcxd2IzSjBJSHNnWjJWMFZYSnNVM1JoZEdVc0lHbHpWWEpzVm1Gc2RXVkZjWFZoYkN3Z2MzbHVZMU4wWVhSbFJuSnZiVlZ5YkNCOUlHWnliMjBnSnk0dmRYUnBiSE1uTzF4dWFXMXdiM0owSUhzZ1FuVnpSWFpsYm5SWGFYUm9VR0Y1Ykc5aFpDQjlJR1p5YjIwZ0owQm5jbUZtWVc1aEwyUmhkR0VuTzF4dWFXMXdiM0owSUhzZ2RYTmxUV1Z0YnlCOUlHWnliMjBnSjNKbFlXTjBKenRjYmx4dVpYaHdiM0owSUdsdWRHVnlabUZqWlNCVmNteFRlVzVqVFdGdVlXZGxja3hwYTJVZ2UxeHVJQ0JwYm1sMFUzbHVZeWh5YjI5ME9pQlRZMlZ1WlU5aWFtVmpkQ2s2SUhadmFXUTdYRzRnSUdOc1pXRnVWWEFvY205dmREb2dVMk5sYm1WUFltcGxZM1FwT2lCMmIybGtPMXh1SUNCb1lXNWtiR1ZPWlhkTWIyTmhkR2x2Ymloc2IyTmhkR2x2YmpvZ1RHOWpZWFJwYjI0cE9pQjJiMmxrTzF4dUlDQm9ZVzVrYkdWT1pYZFBZbXBsWTNRb2MyTmxibVZQWW1vNklGTmpaVzVsVDJKcVpXTjBLVG9nZG05cFpEdGNibjFjYmx4dUx5b3FYRzRnS2lCT2IzUnBabmtnZEdobElIVnliQ0J6ZVc1aklHMWhibUZuWlhJZ2IyWWdZU0J1WlhjZ2IySnFaV04wSUhSb1lYUWdhR0Z6SUdKbFpXNGdZV1JrWldRZ2RHOGdkR2hsSUhOalpXNWxYRzRnS2lCMGFHRjBJRzVsWldSeklIUnZJR2x1YVhRZ2MzUmhkR1VnWm5KdmJTQlZVa3d1WEc0Z0tpOWNibVY0Y0c5eWRDQmpiR0Z6Y3lCT1pYZFRZMlZ1WlU5aWFtVmpkRUZrWkdWa1JYWmxiblFnWlhoMFpXNWtjeUJDZFhORmRtVnVkRmRwZEdoUVlYbHNiMkZrUEZOalpXNWxUMkpxWldOMFBpQjdYRzRnSUhCMVlteHBZeUJ6ZEdGMGFXTWdjbVZoWkc5dWJIa2dkSGx3WlNBOUlDZHVaWGN0YzJObGJtVXRiMkpxWldOMExXRmtaR1ZrSnp0Y2JuMWNibHh1Wlhod2IzSjBJR05zWVhOeklGVnliRk41Ym1OTllXNWhaMlZ5SUdsdGNHeGxiV1Z1ZEhNZ1ZYSnNVM2x1WTAxaGJtRm5aWEpNYVd0bElIdGNiaUFnY0hKcGRtRjBaU0JmZFhKc1MyVjVUV0Z3Y0dWeUlEMGdibVYzSUZWdWFYRjFaVlZ5YkV0bGVVMWhjSEJsY2lncE8xeHVJQ0J3Y21sMllYUmxJRjl6WTJWdVpWSnZiM1EvT2lCVFkyVnVaVTlpYW1WamREdGNiaUFnY0hKcGRtRjBaU0JmYzNWaWN6b2dVM1ZpYzJOeWFYQjBhVzl1SUh3Z2RXNWtaV1pwYm1Wa08xeHVJQ0J3Y21sMllYUmxJRjlzWVhOMFRHOWpZWFJwYjI0NklFeHZZMkYwYVc5dUlId2dkVzVrWldacGJtVmtPMXh1SUNCd2NtbDJZWFJsSUY5c2IyTmhkR2x2YmxObGNuWnBZMlU2SUV4dlkyRjBhVzl1VTJWeWRtbGpaVHRjYmlBZ2NISnBkbUYwWlNCZmNHRnlZVzF6UTJGamFHVTZJRlZ5YkZCaGNtRnRjME5oWTJobE8xeHVJQ0J3Y21sMllYUmxJRjl2Y0hScGIyNXpPaUJUWTJWdVpWVnliRk41Ym1OUGNIUnBiMjV6TzF4dVhHNGdJSEIxWW14cFl5QmpiMjV6ZEhKMVkzUnZjaWhmYjNCMGFXOXVjem9nVTJObGJtVlZjbXhUZVc1alQzQjBhVzl1Y3lBOUlIdDlMQ0JzYjJOaGRHbHZibE5sY25acFkyVTZJRXh2WTJGMGFXOXVVMlZ5ZG1salpTQTlJR3h2WTJGMGFXOXVVMlZ5ZG1salpWSjFiblJwYldVcElIdGNiaUFnSUNCMGFHbHpMbDl2Y0hScGIyNXpJRDBnWDI5d2RHbHZibk03WEc0Z0lDQWdkR2hwY3k1ZmJHOWpZWFJwYjI1VFpYSjJhV05sSUQwZ2JHOWpZWFJwYjI1VFpYSjJhV05sTzF4dUlDQWdJSFJvYVhNdVgzQmhjbUZ0YzBOaFkyaGxJRDBnYm1WM0lGVnliRkJoY21GdGMwTmhZMmhsS0d4dlkyRjBhVzl1VTJWeWRtbGpaU2s3WEc0Z0lIMWNibHh1SUNBdktpcGNiaUFnSUNvZ1ZYQmtZWFJsY3lCMGFHVWdZM1Z5Y21WdWRDQnpZMlZ1WlNCemRHRjBaU0IwYnlCdFlYUmphQ0JWVWt3Z2MzUmhkR1V1WEc0Z0lDQXFMMXh1SUNCd2RXSnNhV01nYVc1cGRGTjVibU1vY205dmREb2dVMk5sYm1WUFltcGxZM1FwSUh0Y2JpQWdJQ0JwWmlBb2RHaHBjeTVmYzNWaWN5a2dlMXh1SUNBZ0lDQWdkM0pwZEdWVFkyVnVaVXh2WnlnblZYSnNVM2x1WTAxaGJtRm5aWEluTENBblZXNXlaV2RwYzNSbGNpQndjbVYyYVc5MWN5QnpZMlZ1WlNCemRHRjBaU0J6ZFdKelkzSnBjSFJwYjI0bkxDQjBhR2x6TGw5elkyVnVaVkp2YjNRL0xuTjBZWFJsTG10bGVTazdYRzRnSUNBZ0lDQjBhR2x6TGw5emRXSnpMblZ1YzNWaWMyTnlhV0psS0NrN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnZDNKcGRHVlRZMlZ1WlV4dlp5Z25WWEpzVTNsdVkwMWhibUZuWlhJbkxDQW5hVzVwZENjc0lISnZiM1F1YzNSaGRHVXVhMlY1S1R0Y2JseHVJQ0FnSUhSb2FYTXVYM05qWlc1bFVtOXZkQ0E5SUhKdmIzUTdYRzRnSUNBZ2RHaHBjeTVmYzNWaWN5QTlJRzVsZHlCVGRXSnpZM0pwY0hScGIyNG9LVHRjYmx4dUlDQWdJSFJvYVhNdVgzTjFZbk11WVdSa0tGeHVJQ0FnSUNBZ2NtOXZkQzV6ZFdKelkzSnBZbVZVYjBWMlpXNTBLRk5qWlc1bFQySnFaV04wVTNSaGRHVkRhR0Z1WjJWa1JYWmxiblFzSUNobGRuUXBJRDArSUh0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTVvWVc1a2JHVlRZMlZ1WlU5aWFtVmpkRk4wWVhSbFEyaGhibWRsWkNobGRuUXVjR0Y1Ykc5aFpDNWphR0Z1WjJWa1QySnFaV04wS1R0Y2JpQWdJQ0FnSUgwcFhHNGdJQ0FnS1R0Y2JseHVJQ0FnSUhSb2FYTXVYM04xWW5NdVlXUmtLRnh1SUNBZ0lDQWdjbTl2ZEM1emRXSnpZM0pwWW1WVWIwVjJaVzUwS0U1bGQxTmpaVzVsVDJKcVpXTjBRV1JrWldSRmRtVnVkQ3dnS0dWMmRDa2dQVDRnZTF4dUlDQWdJQ0FnSUNCMGFHbHpMbWhoYm1Sc1pVNWxkMDlpYW1WamRDaGxkblF1Y0dGNWJHOWhaQ2s3WEc0Z0lDQWdJQ0I5S1Z4dUlDQWdJQ2s3WEc1Y2JpQWdJQ0IwYUdsekxsOTFjbXhMWlhsTllYQndaWEl1WTJ4bFlYSW9LVHRjYmlBZ0lDQjBhR2x6TGw5c1lYTjBURzlqWVhScGIyNGdQU0IwYUdsekxsOXNiMk5oZEdsdmJsTmxjblpwWTJVdVoyVjBURzlqWVhScGIyNG9LVHRjYmx4dUlDQWdJQzh2SUZONWJtTWdZM1Z5Y21WdWRDQjFjbXdnZDJsMGFDQnpkR0YwWlZ4dUlDQWdJSFJvYVhNdWFHRnVaR3hsVG1WM1QySnFaV04wS0hSb2FYTXVYM05qWlc1bFVtOXZkQ2s3WEc1Y2JpQWdJQ0JwWmlBb2RHaHBjeTVmYjNCMGFXOXVjeTUxY0dSaGRHVlZjbXhQYmtsdWFYUXBJSHRjYmlBZ0lDQWdJQzh2SUVkbGRDQmpkWEp5Wlc1MElIVnliQ0J6ZEdGMFpTQmhibVFnZFhCa1lYUmxJSFZ5YkNCMGJ5QnRZWFJqYUZ4dUlDQWdJQ0FnWTI5dWMzUWdkWEpzVTNSaGRHVWdQU0JuWlhSVmNteFRkR0YwWlNoeWIyOTBLVHRjYmx4dUlDQWdJQ0FnYVdZZ0tHbHpWWEpzVTNSaGRHVkVhV1ptWlhKbGJuUW9kWEpzVTNSaGRHVXNJSFJvYVhNdVgzQmhjbUZ0YzBOaFkyaGxMbWRsZEZCaGNtRnRjeWdwS1NrZ2UxeHVJQ0FnSUNBZ0lDQjBhR2x6TGw5c2IyTmhkR2x2YmxObGNuWnBZMlV1Y0dGeWRHbGhiQ2gxY214VGRHRjBaU3dnZEhKMVpTazdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVJQ0I5WEc1Y2JpQWdjSFZpYkdsaklHTnNaV0Z1VlhBb2NtOXZkRG9nVTJObGJtVlBZbXBsWTNRcElIdGNiaUFnSUNBdkx5QkpaMjV2Y21VZ2RHaHBjeUJwWmlCM1pTQm9ZWFpsSUdFZ2JtVjNJRzl5SUdScFptWmxjbVZ1ZENCeWIyOTBYRzRnSUNBZ2FXWWdLSFJvYVhNdVgzTmpaVzVsVW05dmRDQWhQVDBnY205dmRDa2dlMXh1SUNBZ0lDQWdjbVYwZFhKdU8xeHVJQ0FnSUgxY2JseHVJQ0FnSUhkeWFYUmxVMk5sYm1WTWIyY29KMVZ5YkZONWJtTk5ZVzVoWjJWeUp5d2dKME5zWldGdUlIVndKeWs3WEc1Y2JpQWdJQ0JwWmlBb2RHaHBjeTVmYzNWaWN5a2dlMXh1SUNBZ0lDQWdkR2hwY3k1ZmMzVmljeTUxYm5OMVluTmpjbWxpWlNncE8xeHVJQ0FnSUNBZ2RHaHBjeTVmYzNWaWN5QTlJSFZ1WkdWbWFXNWxaRHRjYmx4dUlDQWdJQ0FnZDNKcGRHVlRZMlZ1WlV4dlp5aGNiaUFnSUNBZ0lDQWdKMVZ5YkZONWJtTk5ZVzVoWjJWeUp5eGNiaUFnSUNBZ0lDQWdKMUp2YjNRZ1pHVmhZM1JwZG1Wa0xDQjFibk4xWWlCMGJ5QnpkR0YwWlNjc1hHNGdJQ0FnSUNBZ0lDZHpZVzFsSUd0bGVTY3NYRzRnSUNBZ0lDQWdJSFJvYVhNdVgzTmpaVzVsVW05dmRDNXpkR0YwWlM1clpYa2dQVDA5SUhKdmIzUXVjM1JoZEdVdWEyVjVYRzRnSUNBZ0lDQXBPMXh1SUNBZ0lIMWNibHh1SUNBZ0lIUm9hWE11WDNOalpXNWxVbTl2ZENBOUlIVnVaR1ZtYVc1bFpEdGNiaUFnSUNCMGFHbHpMbDlzWVhOMFRHOWpZWFJwYjI0Z1BTQjFibVJsWm1sdVpXUTdYRzRnSUgxY2JseHVJQ0J3ZFdKc2FXTWdhR0Z1Wkd4bFRtVjNURzlqWVhScGIyNG9iRzlqWVhScGIyNDZJRXh2WTJGMGFXOXVLU0I3WEc0Z0lDQWdhV1lnS0NGMGFHbHpMbDl6WTJWdVpWSnZiM1FnZkh3Z2RHaHBjeTVmYkdGemRFeHZZMkYwYVc5dUlEMDlQU0JzYjJOaGRHbHZiaWtnZTF4dUlDQWdJQ0FnY21WMGRYSnVPMXh1SUNBZ0lIMWNibHh1SUNBZ0lIZHlhWFJsVTJObGJtVk1iMmNvSjFWeWJGTjVibU5OWVc1aFoyVnlKeXdnSjJoaGJtUnNaVTVsZDB4dlkyRjBhVzl1SnlrN1hHNWNiaUFnSUNCMGFHbHpMbDlzWVhOMFRHOWpZWFJwYjI0Z1BTQnNiMk5oZEdsdmJqdGNibHh1SUNBZ0lDOHZJRk41Ym1NZ2MyTmxibVVnYzNSaGRHVWdkSEpsWlNCbWNtOXRJSFZ5YkZ4dUlDQWdJSE41Ym1OVGRHRjBaVVp5YjIxVmNtd29kR2hwY3k1ZmMyTmxibVZTYjI5MElTd2dkR2hwY3k1ZmNHRnlZVzF6UTJGamFHVXVaMlYwVUdGeVlXMXpLQ2tzSUhSb2FYTXVYM1Z5YkV0bGVVMWhjSEJsY2lrN1hHNGdJSDFjYmx4dUlDQndkV0pzYVdNZ2FHRnVaR3hsVG1WM1QySnFaV04wS0hOalpXNWxUMkpxT2lCVFkyVnVaVTlpYW1WamRDa2dlMXh1SUNBZ0lHbG1JQ2doZEdocGN5NWZjMk5sYm1WU2IyOTBLU0I3WEc0Z0lDQWdJQ0J5WlhSMWNtNDdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2MzbHVZMU4wWVhSbFJuSnZiVlZ5YkNoelkyVnVaVTlpYWl3Z2RHaHBjeTVmY0dGeVlXMXpRMkZqYUdVdVoyVjBVR0Z5WVcxektDa3NJSFJvYVhNdVgzVnliRXRsZVUxaGNIQmxjaWs3WEc0Z0lIMWNibHh1SUNCd2NtbDJZWFJsSUdoaGJtUnNaVk5qWlc1bFQySnFaV04wVTNSaGRHVkRhR0Z1WjJWa0tHTm9ZVzVuWldSUFltcGxZM1E2SUZOalpXNWxUMkpxWldOMEtTQjdYRzRnSUNBZ2FXWWdLQ0ZqYUdGdVoyVmtUMkpxWldOMExuVnliRk41Ym1NcElIdGNiaUFnSUNBZ0lISmxkSFZ5Ymp0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0JqYjI1emRDQnVaWGRWY214VGRHRjBaU0E5SUdOb1lXNW5aV1JQWW1wbFkzUXVkWEpzVTNsdVl5NW5aWFJWY214VGRHRjBaU2dwTzF4dVhHNGdJQ0FnWTI5dWMzUWdjMlZoY21Ob1VHRnlZVzF6SUQwZ2RHaHBjeTVmYkc5allYUnBiMjVUWlhKMmFXTmxMbWRsZEZObFlYSmphQ2dwTzF4dUlDQWdJR052Ym5OMElHMWhjSEJsWkZWd1pHRjBaV1E2SUZOalpXNWxUMkpxWldOMFZYSnNWbUZzZFdWeklEMGdlMzA3WEc1Y2JpQWdJQ0JtYjNJZ0tHTnZibk4wSUZ0clpYa3NJRzVsZDFWeWJGWmhiSFZsWFNCdlppQlBZbXBsWTNRdVpXNTBjbWxsY3lodVpYZFZjbXhUZEdGMFpTa3BJSHRjYmlBZ0lDQWdJR052Ym5OMElIVnVhWEYxWlV0bGVTQTlJSFJvYVhNdVgzVnliRXRsZVUxaGNIQmxjaTVuWlhSVmJtbHhkV1ZMWlhrb2EyVjVMQ0JqYUdGdVoyVmtUMkpxWldOMEtUdGNiaUFnSUNBZ0lHTnZibk4wSUdOMWNuSmxiblJWY214V1lXeDFaU0E5SUhObFlYSmphRkJoY21GdGN5NW5aWFJCYkd3b2RXNXBjWFZsUzJWNUtUdGNibHh1SUNBZ0lDQWdhV1lnS0NGcGMxVnliRlpoYkhWbFJYRjFZV3dvWTNWeWNtVnVkRlZ5YkZaaGJIVmxMQ0J1WlhkVmNteFdZV3gxWlNrcElIdGNiaUFnSUNBZ0lDQWdiV0Z3Y0dWa1ZYQmtZWFJsWkZ0MWJtbHhkV1ZMWlhsZElEMGdibVYzVlhKc1ZtRnNkV1U3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1WEc0Z0lDQWdhV1lnS0U5aWFtVmpkQzVyWlhsektHMWhjSEJsWkZWd1pHRjBaV1FwTG14bGJtZDBhQ0ErSURBcElIdGNiaUFnSUNBZ0lHTnZibk4wSUhOb2IzVnNaRU55WldGMFpVaHBjM1J2Y25sRmJuUnllU0E5SUdOb1lXNW5aV1JQWW1wbFkzUXVkWEpzVTNsdVl5NXphRzkxYkdSRGNtVmhkR1ZJYVhOMGIzSjVVM1JsY0Q4dUtHNWxkMVZ5YkZOMFlYUmxLVHRjYmlBZ0lDQWdJR052Ym5OMElITm9iM1ZzWkZKbGNHeGhZMlVnUFNCemFHOTFiR1JEY21WaGRHVklhWE4wYjNKNVJXNTBjbmtnSVQwOUlIUnlkV1U3WEc1Y2JpQWdJQ0FnSUhkeWFYUmxVMk5sYm1WTWIyY29KMVZ5YkZONWJtTk5ZVzVoWjJWeUp5d2dKMjl1VTNSaGRHVkRhR0Z1WjJVZ2RYQmtZWFJwYm1jZ1ZWSk1KeWs3WEc0Z0lDQWdJQ0IwYUdsekxsOXNiMk5oZEdsdmJsTmxjblpwWTJVdWNHRnlkR2xoYkNodFlYQndaV1JWY0dSaGRHVmtMQ0J6YUc5MWJHUlNaWEJzWVdObEtUdGNibHh1SUNBZ0lDQWdMeTh2SUUxaGNtc2dkR2hsSUd4dlkyRjBhVzl1SUdGc2NtVmhaSGtnYUdGdVpHeGxaRnh1SUNBZ0lDQWdkR2hwY3k1ZmJHRnpkRXh2WTJGMGFXOXVJRDBnZEdocGN5NWZiRzlqWVhScGIyNVRaWEoyYVdObExtZGxkRXh2WTJGMGFXOXVLQ2s3WEc0Z0lDQWdmVnh1SUNCOVhHNWNiaUFnY0hWaWJHbGpJR2RsZEZWeWJGTjBZWFJsS0hKdmIzUTZJRk5qWlc1bFQySnFaV04wS1RvZ1UyTmxibVZQWW1wbFkzUlZjbXhXWVd4MVpYTWdlMXh1SUNBZ0lISmxkSFZ5YmlCblpYUlZjbXhUZEdGMFpTaHliMjkwS1R0Y2JpQWdmVnh1ZlZ4dVhHNWpiR0Z6Y3lCVmNteFFZWEpoYlhORFlXTm9aU0I3WEc0Z0lDTmpZV05vWlRvZ1ZWSk1VMlZoY21Ob1VHRnlZVzF6SUh3Z2RXNWtaV1pwYm1Wa08xeHVJQ0FqYkc5allYUnBiMjQ2SUV4dlkyRjBhVzl1SUh3Z2RXNWtaV1pwYm1Wa08xeHVYRzRnSUhCMVlteHBZeUJqYjI1emRISjFZM1J2Y2lod2NtbDJZWFJsSUd4dlkyRjBhVzl1VTJWeWRtbGpaVG9nVEc5allYUnBiMjVUWlhKMmFXTmxLU0I3ZlZ4dVhHNGdJSEIxWW14cFl5Qm5aWFJRWVhKaGJYTW9LVG9nVlZKTVUyVmhjbU5vVUdGeVlXMXpJSHRjYmlBZ0lDQmpiMjV6ZENCc2IyTmhkR2x2YmlBOUlIUm9hWE11Ykc5allYUnBiMjVUWlhKMmFXTmxMbWRsZEV4dlkyRjBhVzl1S0NrN1hHNWNiaUFnSUNCcFppQW9kR2hwY3k0amJHOWpZWFJwYjI0Z1BUMDlJR3h2WTJGMGFXOXVLU0I3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdkR2hwY3k0alkyRmphR1VoTzF4dUlDQWdJSDFjYmx4dUlDQWdJSFJvYVhNdUkyeHZZMkYwYVc5dUlEMGdiRzlqWVhScGIyNDdYRzRnSUNBZ2RHaHBjeTRqWTJGamFHVWdQU0J1WlhjZ1ZWSk1VMlZoY21Ob1VHRnlZVzF6S0d4dlkyRjBhVzl1TG5ObFlYSmphQ2s3WEc1Y2JpQWdJQ0J5WlhSMWNtNGdkR2hwY3k0alkyRmphR1U3WEc0Z0lIMWNibjFjYmx4dVpuVnVZM1JwYjI0Z2FYTlZjbXhUZEdGMFpVUnBabVpsY21WdWRDaHpZMlZ1WlZWeWJGTjBZWFJsT2lCVFkyVnVaVTlpYW1WamRGVnliRlpoYkhWbGN5d2dZM1Z5Y21WdWRGQmhjbUZ0Y3pvZ1ZWSk1VMlZoY21Ob1VHRnlZVzF6S1NCN1hHNGdJR1p2Y2lBb2JHVjBJR3RsZVNCcGJpQnpZMlZ1WlZWeWJGTjBZWFJsS1NCN1hHNGdJQ0FnYVdZZ0tDRnBjMVZ5YkZaaGJIVmxSWEYxWVd3b1kzVnljbVZ1ZEZCaGNtRnRjeTVuWlhSQmJHd29hMlY1S1N3Z2MyTmxibVZWY214VGRHRjBaVnRyWlhsZEtTa2dlMXh1SUNBZ0lDQWdjbVYwZFhKdUlIUnlkV1U3WEc0Z0lDQWdmVnh1SUNCOVhHNWNiaUFnY21WMGRYSnVJR1poYkhObE8xeHVmVnh1WEc0dktpcGNiaUFxSUVOeVpXRjBaWE1nWVNCdVpYY2diV1Z0YjJsNlpXUWdhVzV6ZEdGdVkyVWdiMllnZEdobElGVnliRk41Ym1OTllXNWhaMlZ5SUdKaGMyVmtJRzl1SUc5d2RHbHZibk5jYmlBcUwxeHVaWGh3YjNKMElHWjFibU4wYVc5dUlIVnpaVlZ5YkZONWJtTk5ZVzVoWjJWeUtHOXdkR2x2Ym5NNklGTmpaVzVsVlhKc1UzbHVZMDl3ZEdsdmJuTXNJR3h2WTJGMGFXOXVVMlZ5ZG1salpUb2dURzlqWVhScGIyNVRaWEoyYVdObEtUb2dWWEpzVTNsdVkwMWhibUZuWlhKTWFXdGxJSHRjYmlBZ2NtVjBkWEp1SUhWelpVMWxiVzhvWEc0Z0lDQWdLQ2tnUFQ1Y2JpQWdJQ0FnSUc1bGR5QlZjbXhUZVc1alRXRnVZV2RsY2loY2JpQWdJQ0FnSUNBZ2UxeHVJQ0FnSUNBZ0lDQWdJSFZ3WkdGMFpWVnliRTl1U1c1cGREb2diM0IwYVc5dWN5NTFjR1JoZEdWVmNteFBia2x1YVhRc1hHNGdJQ0FnSUNBZ0lDQWdZM0psWVhSbFFuSnZkM05sY2tocGMzUnZjbmxUZEdWd2N6b2diM0IwYVc5dWN5NWpjbVZoZEdWQ2NtOTNjMlZ5U0dsemRHOXllVk4wWlhCekxGeHVJQ0FnSUNBZ0lDQjlMRnh1SUNBZ0lDQWdJQ0JzYjJOaGRHbHZibE5sY25acFkyVmNiaUFnSUNBZ0lDa3NYRzRnSUNBZ1cyOXdkR2x2Ym5NdWRYQmtZWFJsVlhKc1QyNUpibWwwTENCdmNIUnBiMjV6TG1OeVpXRjBaVUp5YjNkelpYSklhWE4wYjNKNVUzUmxjSE1zSUd4dlkyRjBhVzl1VTJWeWRtbGpaVjFjYmlBZ0tUdGNibjFjYmlKZExDSnVZVzFsY3lJNld5SnNiMk5oZEdsdmJsTmxjblpwWTJVaUxDSnNiMk5oZEdsdmJsTmxjblpwWTJWU2RXNTBhVzFsSWwwc0ltMWhjSEJwYm1keklqb2lPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdRVUZCUVN4SlFVRkJMRTFCUVVFc1JVRkJRU3hUUVVGQkxFTkJRVUU3UVVGM1FrOHNUVUZCVFN4cFEwRkJhVU1zYlVKQlFXbERMRU5CUVVFN1FVRkZMMFVzUTBGQlFUdEJRVVpoTEhkQ1FVRkJMRU5CUTFrc1NVRkJUeXhIUVVGQkxIZENRVUZCTEVOQlFVRTdRVUZIZWtJc1RVRkJUU3hqUVVFMlF5eERRVUZCTzBGQlFVRXNSVUZUYWtRc1YwRkJXU3hEUVVGQkxGRkJRVUVzUjBGQlowTXNSVUZCUXl4RlFVRkhRU3h2UWtGQmJVTkRMR1ZCUVhkQ0xFVkJRVUU3UVVGU2JFZ3NTVUZCVVN4SlFVRkJMRU5CUVVFc1lVRkJRU3hIUVVGblFpeEpRVUZKTEd0Q1FVRnRRaXhGUVVGQkxFTkJRVUU3UVVGVE4wTXNTVUZCUVN4SlFVRkJMRU5CUVVzc1VVRkJWeXhIUVVGQkxGRkJRVUVzUTBGQlFUdEJRVU5vUWl4SlFVRkJMRWxCUVVFc1EwRkJTeXhuUWtGQmJVSXNSMEZCUVVRc2FVSkJRVUVzUTBGQlFUdEJRVU40UWl4SlFVRkxMRWxCUVVFc1EwRkJRU3haUVVGQkxFZEJRV1VzU1VGQlNTeGpRVUZCTEVOQlFXVkJMR2xDUVVGbExFTkJRVUVzUTBGQlFUdEJRVUZCTEVkQlEzaEVPMEZCUVVFc1JVRkxUeXhUUVVGVExFbEJRVzFDTEVWQlFVRTdRVUU1UTNKRExFbEJRVUVzU1VGQlFTeEZRVUZCTEVOQlFVRTdRVUVyUTBrc1NVRkJRU3hKUVVGSkxFdEJRVXNzUzBGQlR5eEZRVUZCTzBGQlEyUXNUVUZCUVN4aFFVRkJMRU5CUVdNc2EwSkJRV3RDTERoRFFVRm5SQ3hGUVVGQkxFTkJRVUVzUlVGQlFTeEhRVUZCTEVsQlFVRXNRMEZCU3l4VlFVRk1MRXRCUVVFc1NVRkJRU3hIUVVGQkxFdEJRVUVzUTBGQlFTeEhRVUZCTEVWQlFVRXNRMEZCYVVJc1RVRkJUU3hIUVVGSExFTkJRVUVzUTBGQlFUdEJRVU14Unl4TlFVRkJMRWxCUVVFc1EwRkJTeXhOUVVGTkxGZEJRVmtzUlVGQlFTeERRVUZCTzBGQlFVRXNTMEZEZWtJN1FVRkZRU3hKUVVGQkxHRkJRVUVzUTBGQll5eG5Ra0ZCYTBJc1JVRkJRU3hOUVVGQkxFVkJRVkVzU1VGQlN5eERRVUZCTEV0QlFVRXNRMEZCVFN4SFFVRkhMRU5CUVVFc1EwRkJRVHRCUVVWMFJDeEpRVUZCTEVsQlFVRXNRMEZCU3l4VlFVRmhMRWRCUVVFc1NVRkJRU3hEUVVGQk8wRkJRMnhDTEVsQlFVc3NTVUZCUVN4RFFVRkJMRXRCUVVFc1IwRkJVU3hKUVVGSkxGbEJRV0VzUlVGQlFTeERRVUZCTzBGQlJUbENMRWxCUVVFc1NVRkJRU3hEUVVGTExFdEJRVTBzUTBGQlFTeEhRVUZCTzBGQlFVRXNUVUZEVkN4SlFVRkxMRU5CUVVFc1owSkJRVUVzUTBGQmFVSXNORUpCUVRoQ0xFVkJRVUVzUTBGQlF5eEhRVUZSTEV0QlFVRTdRVUZETTBRc1VVRkJTeXhKUVVGQkxFTkJRVUVzTmtKQlFVRXNRMEZCT0VJc1IwRkJTU3hEUVVGQkxFOUJRVUVzUTBGQlVTeGhRVUZoTEVOQlFVRXNRMEZCUVR0QlFVRkJMRTlCUXpkRUxFTkJRVUU3UVVGQlFTeExRVU5JTEVOQlFVRTdRVUZGUVN4SlFVRkJMRWxCUVVFc1EwRkJTeXhMUVVGTkxFTkJRVUVzUjBGQlFUdEJRVUZCTEUxQlExUXNTVUZCU3l4RFFVRkJMR2RDUVVGQkxFTkJRV2xDTEhkQ1FVRXdRaXhGUVVGQkxFTkJRVU1zUjBGQlVTeExRVUZCTzBGQlEzWkVMRkZCUVVzc1NVRkJRU3hEUVVGQkxHVkJRVUVzUTBGQlowSXNTVUZCU1N4UFFVRlBMRU5CUVVFc1EwRkJRVHRCUVVGQkxFOUJRMnBETEVOQlFVRTdRVUZCUVN4TFFVTklMRU5CUVVFN1FVRkZRU3hKUVVGQkxFbEJRVUVzUTBGQlN5eGpRVUZqTEV0QlFVMHNSVUZCUVN4RFFVRkJPMEZCUTNwQ0xFbEJRVXNzU1VGQlFTeERRVUZCTEdGQlFVRXNSMEZCWjBJc1NVRkJTeXhEUVVGQkxHZENRVUZCTEVOQlFXbENMRmRCUVZrc1JVRkJRU3hEUVVGQk8wRkJSM1pFTEVsQlFVc3NTVUZCUVN4RFFVRkJMR1ZCUVVFc1EwRkJaMElzUzBGQlN5eFZRVUZWTEVOQlFVRXNRMEZCUVR0QlFVVndReXhKUVVGSkxFbEJRVUVzU1VGQlFTeERRVUZMTEZOQlFWTXNaVUZCYVVJc1JVRkJRVHRCUVVWcVF5eE5RVUZOTEUxQlFVRXNVVUZCUVN4SFFVRlhMRmxCUVZrc1NVRkJTU3hEUVVGQkxFTkJRVUU3UVVGRmFrTXNUVUZCUVN4SlFVRkpMRzlDUVVGdlFpeFJRVUZWTEVWQlFVRXNTVUZCUVN4RFFVRkxMRmxCUVdFc1EwRkJRU3hUUVVGQkxFVkJRVmNzUTBGQlJ5eEZRVUZCTzBGQlEyaEZMRkZCUVVzc1NVRkJRU3hEUVVGQkxHZENRVUZCTEVOQlFXbENMRTlCUVZFc1EwRkJRU3hSUVVGQkxFVkJRVlVzU1VGQlNTeERRVUZCTEVOQlFVRTdRVUZCUVN4UFFVTTVRenRCUVVGQkxFdEJRMFk3UVVGQlFTeEhRVU5HTzBGQlFVRXNSVUZGVHl4UlFVRlJMRWxCUVcxQ0xFVkJRVUU3UVVGRmFFTXNTVUZCU1N4SlFVRkJMRWxCUVVFc1EwRkJTeXhsUVVGbExFbEJRVTBzUlVGQlFUdEJRVU0xUWl4TlFVRkJMRTlCUVVFN1FVRkJRU3hMUVVOR08wRkJSVUVzU1VGQlFTeGhRVUZCTEVOQlFXTXNhMEpCUVd0Q0xGVkJRVlVzUTBGQlFTeERRVUZCTzBGQlJURkRMRWxCUVVFc1NVRkJTU3hMUVVGTExFdEJRVThzUlVGQlFUdEJRVU5rTEUxQlFVRXNTVUZCUVN4RFFVRkxMRTFCUVUwc1YwRkJXU3hGUVVGQkxFTkJRVUU3UVVGRGRrSXNUVUZCUVN4SlFVRkJMRU5CUVVzc1MwRkJVU3hIUVVGQkxFdEJRVUVzUTBGQlFTeERRVUZCTzBGQlJXSXNUVUZCUVN4aFFVRkJPMEZCUVVFc1VVRkRSU3huUWtGQlFUdEJRVUZCTEZGQlEwRXNaME5CUVVFN1FVRkJRU3hSUVVOQkxGVkJRVUU3UVVGQlFTeFJRVU5CTEVsQlFVc3NRMEZCUVN4VlFVRkJMRU5CUVZjc1MwRkJUU3hEUVVGQkxFZEJRVUVzUzBGQlVTeExRVUZMTEV0QlFVMHNRMEZCUVN4SFFVRkJPMEZCUVVFc1QwRkRNME1zUTBGQlFUdEJRVUZCTEV0QlEwWTdRVUZGUVN4SlFVRkJMRWxCUVVFc1EwRkJTeXhWUVVGaExFZEJRVUVzUzBGQlFTeERRVUZCTEVOQlFVRTdRVUZEYkVJc1NVRkJRU3hKUVVGQkxFTkJRVXNzWVVGQlowSXNSMEZCUVN4TFFVRkJMRU5CUVVFc1EwRkJRVHRCUVVGQkxFZEJRM1pDTzBGQlFVRXNSVUZGVHl4clFrRkJhMElzVVVGQmIwSXNSVUZCUVR0QlFVTXpReXhKUVVGQkxFbEJRVWtzUTBGQlF5eEpRVUZCTEVOQlFVc3NWVUZCWXl4SlFVRkJMRWxCUVVFc1EwRkJTeXhyUWtGQmEwSXNVVUZCVlN4RlFVRkJPMEZCUTNaRUxFMUJRVUVzVDBGQlFUdEJRVUZCTEV0QlEwWTdRVUZGUVN4SlFVRkJMR0ZCUVVFc1EwRkJZeXhyUWtGQmEwSXNiVUpCUVcxQ0xFTkJRVUVzUTBGQlFUdEJRVVZ1UkN4SlFVRkJMRWxCUVVFc1EwRkJTeXhoUVVGblFpeEhRVUZCTEZGQlFVRXNRMEZCUVR0QlFVZHlRaXhKUVVGQkxHZENRVUZCTEVOQlFXbENMRXRCUVVzc1ZVRkJZU3hGUVVGQkxFbEJRVUVzUTBGQlN5eGhRVUZoTEZOQlFWVXNSVUZCUVN4RlFVRkhMRXRCUVVzc1lVRkJZU3hEUVVGQkxFTkJRVUU3UVVGQlFTeEhRVU4wUmp0QlFVRkJMRVZCUlU4c1owSkJRV2RDTEZGQlFYVkNMRVZCUVVFN1FVRkROVU1zU1VGQlNTeEpRVUZCTEVOQlFVTXNTMEZCU3l4VlFVRlpMRVZCUVVFN1FVRkRjRUlzVFVGQlFTeFBRVUZCTzBGQlFVRXNTMEZEUmp0QlFVVkJMRWxCUVVFc1owSkJRVUVzUTBGQmFVSXNWVUZCVlN4SlFVRkxMRU5CUVVFc1dVRkJRU3hEUVVGaExGTkJRVlVzUlVGQlFTeEZRVUZITEV0QlFVc3NZVUZCWVN4RFFVRkJMRU5CUVVFN1FVRkJRU3hIUVVNNVJUdEJRVUZCTEVWQlJWRXNPRUpCUVRoQ0xHRkJRVFJDTEVWQlFVRTdRVUZzU1hCRkxFbEJRVUVzU1VGQlFTeEZRVUZCTEVWQlFVRXNSVUZCUVN4RFFVRkJPMEZCYlVsSkxFbEJRVWtzU1VGQlFTeERRVUZETEdOQlFXTXNUMEZCVXl4RlFVRkJPMEZCUXpGQ0xFMUJRVUVzVDBGQlFUdEJRVUZCTEV0QlEwWTdRVUZGUVN4SlFVRk5MRTFCUVVFc1YwRkJRU3hIUVVGakxHRkJRV01zUTBGQlFTeFBRVUZCTEVOQlFWRXNWMEZCV1N4RlFVRkJMRU5CUVVFN1FVRkZkRVFzU1VGQlRTeE5RVUZCTEZsQlFVRXNSMEZCWlN4SlFVRkxMRU5CUVVFc1owSkJRVUVzUTBGQmFVSXNVMEZCVlN4RlFVRkJMRU5CUVVFN1FVRkRja1FzU1VGQlFTeE5RVUZOTEdkQ1FVRnpReXhGUVVGRExFTkJRVUU3UVVGRk4wTXNTVUZCUVN4TFFVRkJMRTFCUVZjc1EwRkJReXhIUVVGTExFVkJRVUVzVjBGQlZ5eExRVUZMTEUxQlFVOHNRMEZCUVN4UFFVRkJMRU5CUVZFc1YwRkJWeXhEUVVGSExFVkJRVUU3UVVGRE5VUXNUVUZCUVN4TlFVRk5MRk5CUVZrc1IwRkJRU3hKUVVGQkxFTkJRVXNzWVVGQll5eERRVUZCTEZsQlFVRXNRMEZCWVN4TFFVRkxMR0ZCUVdFc1EwRkJRU3hEUVVGQk8wRkJRM0JGTEUxQlFVMHNUVUZCUVN4bFFVRkJMRWRCUVd0Q0xGbEJRV0VzUTBGQlFTeE5RVUZCTEVOQlFVOHNVMEZCVXl4RFFVRkJMRU5CUVVFN1FVRkZja1FzVFVGQlFTeEpRVUZKTEVOQlFVTXNaVUZCUVN4RFFVRm5RaXhsUVVGcFFpeEZRVUZCTEZkQlFWY3NRMEZCUnl4RlFVRkJPMEZCUTJ4RUxGRkJRVUVzWVVGQlFTeERRVUZqTEZOQlFXRXNRMEZCUVN4SFFVRkJMRmRCUVVFc1EwRkJRVHRCUVVGQkxFOUJRemRDTzBGQlFVRXNTMEZEUmp0QlFVVkJMRWxCUVVFc1NVRkJTU3hOUVVGUExFTkJRVUVzU1VGQlFTeERRVUZMTEdGQlFXRXNRMEZCUVN4RFFVRkZMRk5CUVZNc1EwRkJSeXhGUVVGQk8wRkJRM3BETEUxQlFVRXNUVUZCVFN4M1FrRkJNa0lzUjBGQlFTeERRVUZCTEVWQlFVRXNSMEZCUVN4RFFVRkJMRVZCUVVFc1IwRkJRU3hoUVVGQkxFTkJRV01zVDBGQlVTeEZRVUZCTEhWQ1FVRkJMRXRCUVhSQ0xFbEJRV2RFTEVkQlFVRXNTMEZCUVN4RFFVRkJMRWRCUVVFc1JVRkJRU3hEUVVGQkxFbEJRVUVzUTBGQlFTeEZRVUZCTEVWQlFVRXNWMEZCUVN4RFFVRkJMRU5CUVVFN1FVRkRha1lzVFVGQlFTeE5RVUZOTEdkQ1FVRm5RaXgzUWtGQk5rSXNTMEZCUVN4SlFVRkJMRU5CUVVFN1FVRkZia1FzVFVGQlFTeGhRVUZCTEVOQlFXTXNhMEpCUVd0Q0xEUkNRVUUwUWl4RFFVRkJMRU5CUVVFN1FVRkROVVFzVFVGQlN5eEpRVUZCTEVOQlFVRXNaMEpCUVVFc1EwRkJhVUlzVDBGQlVTeERRVUZCTEdGQlFVRXNSVUZCWlN4aFFVRmhMRU5CUVVFc1EwRkJRVHRCUVVjeFJDeE5RVUZMTEVsQlFVRXNRMEZCUVN4aFFVRkJMRWRCUVdkQ0xFbEJRVXNzUTBGQlFTeG5Ra0ZCUVN4RFFVRnBRaXhYUVVGWkxFVkJRVUVzUTBGQlFUdEJRVUZCTEV0QlEzcEVPMEZCUVVFc1IwRkRSanRCUVVGQkxFVkJSVThzV1VGQldTeEpRVUY1UXl4RlFVRkJPMEZCUXpGRUxFbEJRVUVzVDBGQlR5eFpRVUZaTEVsQlFVa3NRMEZCUVN4RFFVRkJPMEZCUVVFc1IwRkRla0k3UVVGRFJpeERRVUZCTzBGQlJVRXNUVUZCVFN4alFVRmxMRU5CUVVFN1FVRkJRU3hGUVVsYUxGbEJRVzlDTEdWQlFXdERMRVZCUVVFN1FVRkJiRU1zU1VGQlFTeEpRVUZCTEVOQlFVRXNaVUZCUVN4SFFVRkJMR1ZCUVVFc1EwRkJRVHRCUVVnelFpeEpRVUZCTEZsQlFVRXNRMEZCUVN4SlFVRkJMRVZCUVVFc1RVRkJRU3hGUVVGQkxFdEJRVUVzUTBGQlFTeERRVUZCTEVOQlFVRTdRVUZEUVN4SlFVRkJMRmxCUVVFc1EwRkJRU3hKUVVGQkxFVkJRVUVzVTBGQlFTeEZRVUZCTEV0QlFVRXNRMEZCUVN4RFFVRkJMRU5CUVVFN1FVRkJRU3hIUVVVNFJEdEJRVUZCTEVWQlJYWkVMRk5CUVRaQ0xFZEJRVUU3UVVGRGJFTXNTVUZCVFN4TlFVRkJMRkZCUVVFc1IwRkJWeXhKUVVGTExFTkJRVUVzWlVGQlFTeERRVUZuUWl4WFFVRlpMRVZCUVVFc1EwRkJRVHRCUVVWc1JDeEpRVUZKTEVsQlFVRXNXVUZCUVN4RFFVRkJMRWxCUVVFc1JVRkJTeXhsUVVGakxGRkJRVlVzUlVGQlFUdEJRVU12UWl4TlFVRkJMRTlCUVU4c1dVRkJTeXhEUVVGQkxFbEJRVUVzUlVGQlFTeE5RVUZCTEVOQlFVRXNRMEZCUVR0QlFVRkJMRXRCUTJRN1FVRkZRU3hKUVVGQkxGbEJRVUVzUTBGQlFTeEpRVUZCTEVWQlFVc3NVMEZCV1N4RlFVRkJMRkZCUVVFc1EwRkJRU3hEUVVGQk8wRkJRMnBDTEVsQlFVRXNXVUZCUVN4RFFVRkJMRWxCUVVFc1JVRkJTeXhOUVVGVExFVkJRVUVzU1VGQlNTeGxRVUZuUWl4RFFVRkJMRkZCUVVFc1EwRkJVeXhOUVVGTkxFTkJRVUVzUTBGQlFTeERRVUZCTzBGQlJXcEVMRWxCUVVFc1QwRkJUeXhaUVVGTExFTkJRVUVzU1VGQlFTeEZRVUZCTEUxQlFVRXNRMEZCUVN4RFFVRkJPMEZCUVVFc1IwRkRaRHRCUVVOR0xFTkJRVUU3UVVGcVFrVXNUVUZCUVN4SFFVRkJMRWxCUVVFc1QwRkJRU3hGUVVGQkxFTkJRVUU3UVVGRFFTeFRRVUZCTEVkQlFVRXNTVUZCUVN4UFFVRkJMRVZCUVVFc1EwRkJRVHRCUVd0Q1JpeFRRVUZUTEcxQ1FVRkJMRU5CUVc5Q0xHVkJRWEZETEdGQlFXZERMRVZCUVVFN1FVRkRhRWNzUlVGQlFTeExRVUZCTEVsQlFWTXNUMEZCVHl4aFFVRmxMRVZCUVVFN1FVRkROMElzU1VGQlNTeEpRVUZCTEVOQlFVTXNaMEpCUVdkQ0xHRkJRV01zUTBGQlFTeE5RVUZCTEVOQlFVOHNSMEZCUnl4RFFVRkhMRVZCUVVFc1lVRkJRU3hEUVVGakxFbEJRVWtzUTBGQlJ5eEZRVUZCTzBGQlEyNUZMRTFCUVU4c1QwRkJRU3hKUVVGQkxFTkJRVUU3UVVGQlFTeExRVU5VTzBGQlFVRXNSMEZEUmp0QlFVVkJMRVZCUVU4c1QwRkJRU3hMUVVGQkxFTkJRVUU3UVVGRFZDeERRVUZCTzBGQlMyZENMRk5CUVVFc2FVSkJRVUVzUTBGQmEwSXNVMEZCT0VJc1pVRkJjMFFzUlVGQlFUdEJRVU53U0N4RlFVRlBMRTlCUVVFc1QwRkJRVHRCUVVGQkxFbEJRMHdzVFVGRFJTeEpRVUZKTEdOQlFVRTdRVUZCUVN4TlFVTkdPMEZCUVVFc1VVRkRSU3hwUWtGQmFVSXNUMEZCVVN4RFFVRkJMR1ZCUVVFN1FVRkJRU3hSUVVONlFpd3lRa0ZCTWtJc1QwRkJVU3hEUVVGQkxIbENRVUZCTzBGQlFVRXNUMEZEY2tNN1FVRkJRU3hOUVVOQkxHVkJRVUU3UVVGQlFTeExRVU5HTzBGQlFVRXNTVUZEUml4RFFVRkRMRTlCUVVFc1EwRkJVU3hsUVVGcFFpeEZRVUZCTEU5QlFVRXNRMEZCVVN3eVFrRkJNa0lzWlVGQlpTeERRVUZCTzBGQlFVRXNSMEZET1VVc1EwRkJRVHRCUVVOR096czdPeUo5XG4iXSwibmFtZXMiOlsibG9jYXRpb25TZXJ2aWNlIiwibG9jYXRpb25TZXJ2aWNlUnVudGltZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsSUFBQSxNQUFBLEVBQUEsU0FBQSxDQUFBO0FBd0JPLE1BQU0saUNBQWlDLG1CQUFpQyxDQUFBO0FBRS9FLENBQUE7QUFGYSx3QkFBQSxDQUNZLElBQU8sR0FBQSx3QkFBQSxDQUFBO0FBR3pCLE1BQU0sY0FBNkMsQ0FBQTtBQVNqRCxFQUFBLFdBQUEsQ0FBWSxRQUFnQyxHQUFBLEVBQUlBLEVBQUFBLGlCQUFBQSxHQUFtQ0MsZUFBd0IsRUFBQTtBQVIxRyxJQUFBLElBQUEsQ0FBQSxhQUFBLEdBQWdCLElBQUksa0JBQW1CLEVBQUEsQ0FBQTtBQVM3QyxJQUFBLElBQUEsQ0FBSyxRQUFXLEdBQUEsUUFBQSxDQUFBO0FBQ2hCLElBQUEsSUFBQSxDQUFLLGdCQUFtQkQsR0FB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
@@ -0,0 +1,29 @@
1
+ import { useState, useEffect } from 'react';
2
+ import { useLocation } from 'react-router-dom';
3
+ import { writeSceneLog } from '../utils/writeSceneLog.js';
4
+ import { useUrlSyncManager } from './UrlSyncManager.js';
5
+ import { useLocationServiceSafe } from '../utils/utils.js';
6
+
7
+ function useUrlSync(sceneRoot, options = {}) {
8
+ const location = useLocation();
9
+ const locationService = useLocationServiceSafe();
10
+ const [isInitialized, setIsInitialized] = useState(false);
11
+ const urlSyncManager = useUrlSyncManager(options, locationService);
12
+ useEffect(() => {
13
+ urlSyncManager.initSync(sceneRoot);
14
+ setIsInitialized(true);
15
+ return () => urlSyncManager.cleanUp(sceneRoot);
16
+ }, [sceneRoot, urlSyncManager]);
17
+ useEffect(() => {
18
+ const latestLocation = locationService.getLocation();
19
+ const locationToHandle = latestLocation !== location ? latestLocation : location;
20
+ if (latestLocation !== location) {
21
+ writeSceneLog("useUrlSync", "latestLocation different from location");
22
+ }
23
+ urlSyncManager.handleNewLocation(locationToHandle);
24
+ }, [sceneRoot, urlSyncManager, location, locationService]);
25
+ return isInitialized;
26
+ }
27
+
28
+ export { useUrlSync };
29
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlVXJsU3luYy5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc2VydmljZXMvdXNlVXJsU3luYy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlTG9jYXRpb24gfSBmcm9tICdyZWFjdC1yb3V0ZXItZG9tJztcbmltcG9ydCB7IHdyaXRlU2NlbmVMb2cgfSBmcm9tICcuLi91dGlscy93cml0ZVNjZW5lTG9nLmpzJztcbmltcG9ydCB7IHVzZVVybFN5bmNNYW5hZ2VyIH0gZnJvbSAnLi9VcmxTeW5jTWFuYWdlci5qcyc7XG5pbXBvcnQgeyB1c2VMb2NhdGlvblNlcnZpY2VTYWZlIH0gZnJvbSAnLi4vdXRpbHMvdXRpbHMuanMnO1xuXG5mdW5jdGlvbiB1c2VVcmxTeW5jKHNjZW5lUm9vdCwgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gdXNlTG9jYXRpb24oKTtcbiAgY29uc3QgbG9jYXRpb25TZXJ2aWNlID0gdXNlTG9jYXRpb25TZXJ2aWNlU2FmZSgpO1xuICBjb25zdCBbaXNJbml0aWFsaXplZCwgc2V0SXNJbml0aWFsaXplZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IHVybFN5bmNNYW5hZ2VyID0gdXNlVXJsU3luY01hbmFnZXIob3B0aW9ucywgbG9jYXRpb25TZXJ2aWNlKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICB1cmxTeW5jTWFuYWdlci5pbml0U3luYyhzY2VuZVJvb3QpO1xuICAgIHNldElzSW5pdGlhbGl6ZWQodHJ1ZSk7XG4gICAgcmV0dXJuICgpID0+IHVybFN5bmNNYW5hZ2VyLmNsZWFuVXAoc2NlbmVSb290KTtcbiAgfSwgW3NjZW5lUm9vdCwgdXJsU3luY01hbmFnZXJdKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBsYXRlc3RMb2NhdGlvbiA9IGxvY2F0aW9uU2VydmljZS5nZXRMb2NhdGlvbigpO1xuICAgIGNvbnN0IGxvY2F0aW9uVG9IYW5kbGUgPSBsYXRlc3RMb2NhdGlvbiAhPT0gbG9jYXRpb24gPyBsYXRlc3RMb2NhdGlvbiA6IGxvY2F0aW9uO1xuICAgIGlmIChsYXRlc3RMb2NhdGlvbiAhPT0gbG9jYXRpb24pIHtcbiAgICAgIHdyaXRlU2NlbmVMb2coXCJ1c2VVcmxTeW5jXCIsIFwibGF0ZXN0TG9jYXRpb24gZGlmZmVyZW50IGZyb20gbG9jYXRpb25cIik7XG4gICAgfVxuICAgIHVybFN5bmNNYW5hZ2VyLmhhbmRsZU5ld0xvY2F0aW9uKGxvY2F0aW9uVG9IYW5kbGUpO1xuICB9LCBbc2NlbmVSb290LCB1cmxTeW5jTWFuYWdlciwgbG9jYXRpb24sIGxvY2F0aW9uU2VydmljZV0pO1xuICByZXR1cm4gaXNJbml0aWFsaXplZDtcbn1cblxuZXhwb3J0IHsgdXNlVXJsU3luYyB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lkWE5sVlhKc1UzbHVZeTVxY3lJc0luTnZkWEpqWlhNaU9sc2lMaTR2TGk0dkxpNHZjM0pqTDNObGNuWnBZMlZ6TDNWelpWVnliRk41Ym1NdWRITWlYU3dpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpYVcxd2IzSjBJSHNnVTJObGJtVlBZbXBsWTNRc0lGTmpaVzVsVlhKc1UzbHVZMDl3ZEdsdmJuTWdmU0JtY205dElDY3VMaTlqYjNKbEwzUjVjR1Z6Snp0Y2JtbHRjRzl5ZENCN0lIVnpaVVZtWm1WamRDd2dkWE5sVTNSaGRHVWdmU0JtY205dElDZHlaV0ZqZENjN1hHNXBiWEJ2Y25RZ2V5QjFjMlZNYjJOaGRHbHZiaUI5SUdaeWIyMGdKM0psWVdOMExYSnZkWFJsY2kxa2IyMG5PMXh1YVcxd2IzSjBJSHNnZDNKcGRHVlRZMlZ1WlV4dlp5QjlJR1p5YjIwZ0p5NHVMM1YwYVd4ekwzZHlhWFJsVTJObGJtVk1iMmNuTzF4dWFXMXdiM0owSUhzZ2RYTmxWWEpzVTNsdVkwMWhibUZuWlhJZ2ZTQm1jbTl0SUNjdUwxVnliRk41Ym1OTllXNWhaMlZ5Snp0Y2JtbHRjRzl5ZENCN0lIVnpaVXh2WTJGMGFXOXVVMlZ5ZG1salpWTmhabVVnZlNCbWNtOXRJQ2N1TGk5MWRHbHNjeTkxZEdsc2N5YzdYRzVjYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUIxYzJWVmNteFRlVzVqS0hOalpXNWxVbTl2ZERvZ1UyTmxibVZQWW1wbFkzUXNJRzl3ZEdsdmJuTTZJRk5qWlc1bFZYSnNVM2x1WTA5d2RHbHZibk1nUFNCN2ZTazZJR0p2YjJ4bFlXNGdlMXh1SUNCamIyNXpkQ0JzYjJOaGRHbHZiaUE5SUhWelpVeHZZMkYwYVc5dUtDazdYRzRnSUdOdmJuTjBJR3h2WTJGMGFXOXVVMlZ5ZG1salpTQTlJSFZ6WlV4dlkyRjBhVzl1VTJWeWRtbGpaVk5oWm1Vb0tUdGNiaUFnWTI5dWMzUWdXMmx6U1c1cGRHbGhiR2w2WldRc0lITmxkRWx6U1c1cGRHbGhiR2w2WldSZElEMGdkWE5sVTNSaGRHVW9abUZzYzJVcE8xeHVJQ0JqYjI1emRDQjFjbXhUZVc1alRXRnVZV2RsY2lBOUlIVnpaVlZ5YkZONWJtTk5ZVzVoWjJWeUtHOXdkR2x2Ym5Nc0lHeHZZMkYwYVc5dVUyVnlkbWxqWlNrN1hHNWNiaUFnZFhObFJXWm1aV04wS0NncElEMCtJSHRjYmlBZ0lDQjFjbXhUZVc1alRXRnVZV2RsY2k1cGJtbDBVM2x1WXloelkyVnVaVkp2YjNRcE8xeHVJQ0FnSUhObGRFbHpTVzVwZEdsaGJHbDZaV1FvZEhKMVpTazdYRzRnSUNBZ2NtVjBkWEp1SUNncElEMCtJSFZ5YkZONWJtTk5ZVzVoWjJWeUxtTnNaV0Z1VlhBb2MyTmxibVZTYjI5MEtUdGNiaUFnZlN3Z1czTmpaVzVsVW05dmRDd2dkWEpzVTNsdVkwMWhibUZuWlhKZEtUdGNibHh1SUNCMWMyVkZabVpsWTNRb0tDa2dQVDRnZTF4dUlDQWdJQzh2SUZWelpTQnNZWFJsYzNRZ2JHOWpZWFJwYjI0c0lHRnpJR0o1SUhSb1pTQjBhVzFsSUhSb2FYTWdaV1ptWldOMElISjFibk1zSUhSb1pTQnNiMk5oZEdsdmJpQnRhV2RvZENCb1lYWmxJR05vWVc1blpXUWdZV2RoYVc1Y2JpQWdJQ0JqYjI1emRDQnNZWFJsYzNSTWIyTmhkR2x2YmlBOUlHeHZZMkYwYVc5dVUyVnlkbWxqWlM1blpYUk1iMk5oZEdsdmJpZ3BPMXh1SUNBZ0lHTnZibk4wSUd4dlkyRjBhVzl1Vkc5SVlXNWtiR1VnUFNCc1lYUmxjM1JNYjJOaGRHbHZiaUFoUFQwZ2JHOWpZWFJwYjI0Z1B5QnNZWFJsYzNSTWIyTmhkR2x2YmlBNklHeHZZMkYwYVc5dU8xeHVYRzRnSUNBZ2FXWWdLR3hoZEdWemRFeHZZMkYwYVc5dUlDRTlQU0JzYjJOaGRHbHZiaWtnZTF4dUlDQWdJQ0FnZDNKcGRHVlRZMlZ1WlV4dlp5Z25kWE5sVlhKc1UzbHVZeWNzSUNkc1lYUmxjM1JNYjJOaGRHbHZiaUJrYVdabVpYSmxiblFnWm5KdmJTQnNiMk5oZEdsdmJpY3BPMXh1SUNBZ0lIMWNibHh1SUNBZ0lIVnliRk41Ym1OTllXNWhaMlZ5TG1oaGJtUnNaVTVsZDB4dlkyRjBhVzl1S0d4dlkyRjBhVzl1Vkc5SVlXNWtiR1VwTzF4dUlDQjlMQ0JiYzJObGJtVlNiMjkwTENCMWNteFRlVzVqVFdGdVlXZGxjaXdnYkc5allYUnBiMjRzSUd4dlkyRjBhVzl1VTJWeWRtbGpaVjBwTzF4dVhHNGdJSEpsZEhWeWJpQnBjMGx1YVhScFlXeHBlbVZrTzF4dWZWeHVYRzVsZUhCdmNuUWdhVzUwWlhKbVlXTmxJRlZ5YkZONWJtTkRiMjUwWlhoMFVISnZkbWxrWlhKUWNtOXdjeUI3WEc0Z0lITmpaVzVsT2lCVFkyVnVaVTlpYW1WamREdGNiaUFnWTJocGJHUnlaVzQ2SUZKbFlXTjBMbEpsWVdOMFRtOWtaVHRjYm4xY2JpSmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU96czdPenM3UVVGUFR5eFRRVUZUTEZWQlFWY3NRMEZCUVN4VFFVRkJMRVZCUVhkQ0xFOUJRU3RDTEVkQlFVRXNSVUZCWVN4RlFVRkJPMEZCUXpkR0xFVkJRVUVzVFVGQlRTeFhRVUZYTEZkQlFWa3NSVUZCUVN4RFFVRkJPMEZCUXpkQ0xFVkJRVUVzVFVGQlRTeHJRa0ZCYTBJc2MwSkJRWFZDTEVWQlFVRXNRMEZCUVR0QlFVTXZReXhGUVVGQkxFMUJRVTBzUTBGQlF5eGhRVUZCTEVWQlFXVXNaMEpCUVdkQ0xFTkJRVUVzUjBGQlNTeFRRVUZUTEV0QlFVc3NRMEZCUVN4RFFVRkJPMEZCUTNoRUxFVkJRVTBzVFVGQlFTeGpRVUZCTEVkQlFXbENMR2xDUVVGclFpeERRVUZCTEU5QlFVRXNSVUZCVXl4bFFVRmxMRU5CUVVFc1EwRkJRVHRCUVVWcVJTeEZRVUZCTEZOQlFVRXNRMEZCVlN4TlFVRk5PMEZCUTJRc1NVRkJRU3hqUVVGQkxFTkJRV1VzVTBGQlV5eFRRVUZUTEVOQlFVRXNRMEZCUVR0QlFVTnFReXhKUVVGQkxHZENRVUZCTEVOQlFXbENMRWxCUVVrc1EwRkJRU3hEUVVGQk8wRkJRM0pDTEVsQlFVOHNUMEZCUVN4TlFVRk5MR05CUVdVc1EwRkJRU3hQUVVGQkxFTkJRVkVzVTBGQlV5eERRVUZCTEVOQlFVRTdRVUZCUVN4SFFVTTFReXhGUVVGQkxFTkJRVU1zVTBGQlZ5eEZRVUZCTEdOQlFXTXNRMEZCUXl4RFFVRkJMRU5CUVVFN1FVRkZPVUlzUlVGQlFTeFRRVUZCTEVOQlFWVXNUVUZCVFR0QlFVVmtMRWxCUVUwc1RVRkJRU3hqUVVGQkxFZEJRV2xDTEdkQ1FVRm5RaXhYUVVGWkxFVkJRVUVzUTBGQlFUdEJRVU51UkN4SlFVRk5MRTFCUVVFc1owSkJRVUVzUjBGQmJVSXNZMEZCYlVJc1MwRkJRU3hSUVVGQkxFZEJRVmNzWTBGQmFVSXNSMEZCUVN4UlFVRkJMRU5CUVVFN1FVRkZlRVVzU1VGQlFTeEpRVUZKTEcxQ1FVRnRRaXhSUVVGVkxFVkJRVUU3UVVGREwwSXNUVUZCUVN4aFFVRkJMRU5CUVdNc1kwRkJZeXgzUTBGQmQwTXNRMEZCUVN4RFFVRkJPMEZCUVVFc1MwRkRkRVU3UVVGRlFTeEpRVUZCTEdOQlFVRXNRMEZCWlN4clFrRkJhMElzWjBKQlFXZENMRU5CUVVFc1EwRkJRVHRCUVVGQkxFdEJRMmhFTEVOQlFVTXNVMEZCUVN4RlFVRlhMR05CUVdkQ0xFVkJRVUVzVVVGQlFTeEZRVUZWTEdWQlFXVXNRMEZCUXl4RFFVRkJMRU5CUVVFN1FVRkZla1FzUlVGQlR5eFBRVUZCTEdGQlFVRXNRMEZCUVR0QlFVTlVPenM3T3lKOVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQU9PLFNBQVMsVUFBVyxDQUFBLFNBQUEsRUFBd0IsT0FBK0IsR0FBQSxFQUFhLEVBQUE7QUFDN0YsRUFBQSxNQUFNLFdBQVcsV0FBWSxFQUFBLENBQUE7QUFDN0IsRUFBQSxNQUFNLGtCQUFrQixzQkFBdUIsRUFBQSxDQUFBO0FBQy9DLEVBQUEsTUFBTSxDQUFDLGFBQUEsRUFBZSxnQkFBZ0IsQ0FBQSxHQUFJLFNBQVMsS0FBSyxDQUFBLENBQUE7QUFDbEQsRUFBQSxNQUFBLGNBQUEsR0FBaUIsaUJBQWtCLENBQUEsT0FBQSxFQUFTLGVBQWUsQ0FBQSxDQUFBO0FBRWpFLEVBQUEsU0FBQSxDQUFVLE1BQU07QUFDZCxJQUFBLGNBQUEsQ0FBZSxTQUFTLFNBQVMsQ0FBQSxDQUFBO0FBQ2pDLElBQUEsZ0JBQUEsQ0FBaUIsSUFBSSxDQUFBLENBQUE7QUFDZCxJQUFBLE9BQUEsTUFBTSxjQUFlLENBQUEsT0FBQSxDQUFRLFNBQVMsQ0FBQSxDQUFBO0dBQzVDLEVBQUEsQ0FBQyxTQUFXLEVBQUEsY0FBYyxDQUFDLENBQUEsQ0FBQTtBQUU5QixFQUFBLFNBQUEsQ0FBVSxNQUFNO0FBRVIsSUFBQSxNQUFBLGNBQUEsR0FBaUIsZ0JBQWdCLFdBQVksRUFBQSxDQUFBO0FBQzdDLElBQUEsTUFBQSxnQkFBQSxHQUFtQixjQUFtQixLQUFBLFFBQUEsR0FBVyxjQUFpQixHQUFBLFFBQUEsQ0FBQTtBQUV4RSxJQUFBLElBQUksbUJBQW1CLFFBQVUsRUFBQTtBQUMvQixNQUFBLGFBQUEsQ0FBYyxjQUFjLHdDQUF3QyxDQUFBLENBQUE7QUFBQSxLQUFBO0FBR3RFLElBQUEsY0FBQSxDQUFlLGtCQUFrQixnQkFBZ0IsQ0FBQSxDQUFBO0FBQUEsR0FBQSxFQUNoRCxDQUFDLFNBQUEsRUFBVyxjQUFnQixFQUFBLFFBQUEsRUFBVSxlQUFlLENBQUMsQ0FBQSxDQUFBO0FBRWxELEVBQUEsT0FBQSxhQUFBLENBQUE7QUFDVDs7OzsifQ==
@@ -0,0 +1,71 @@
1
+ import { isEqual } from 'lodash';
2
+ import { UniqueUrlKeyMapper } from './UniqueUrlKeyMapper.js';
3
+
4
+ function getUrlState(root) {
5
+ const urlKeyMapper = new UniqueUrlKeyMapper();
6
+ const result = {};
7
+ const visitNode = (obj) => {
8
+ if (obj.urlSync) {
9
+ const newUrlState = obj.urlSync.getUrlState();
10
+ for (const [key, value] of Object.entries(newUrlState)) {
11
+ if (value != null) {
12
+ const uniqueKey = urlKeyMapper.getUniqueKey(key, obj);
13
+ result[uniqueKey] = value;
14
+ }
15
+ }
16
+ }
17
+ obj.forEachChild(visitNode);
18
+ };
19
+ visitNode(root);
20
+ return result;
21
+ }
22
+ function syncStateFromUrl(root, urlParams, urlKeyMapper, onlyChildren) {
23
+ if (!onlyChildren) {
24
+ syncUrlStateToObject(root, urlParams, urlKeyMapper);
25
+ }
26
+ root.forEachChild((child) => {
27
+ syncUrlStateToObject(child, urlParams, urlKeyMapper);
28
+ });
29
+ root.forEachChild((child) => syncStateFromUrl(child, urlParams, urlKeyMapper, true));
30
+ }
31
+ function syncUrlStateToObject(sceneObject, urlParams, urlKeyMapper) {
32
+ if (sceneObject.urlSync) {
33
+ const urlState = {};
34
+ const currentState = sceneObject.urlSync.getUrlState();
35
+ for (const key of sceneObject.urlSync.getKeys()) {
36
+ const uniqueKey = urlKeyMapper.getUniqueKey(key, sceneObject);
37
+ const newValue = urlParams.getAll(uniqueKey);
38
+ const currentValue = currentState[key];
39
+ if (isUrlValueEqual(newValue, currentValue)) {
40
+ continue;
41
+ }
42
+ if (newValue.length > 0) {
43
+ if (Array.isArray(currentValue)) {
44
+ urlState[key] = newValue;
45
+ } else {
46
+ urlState[key] = newValue[0];
47
+ }
48
+ } else {
49
+ urlState[key] = null;
50
+ }
51
+ }
52
+ if (Object.keys(urlState).length > 0) {
53
+ sceneObject.urlSync.updateFromUrl(urlState);
54
+ }
55
+ }
56
+ }
57
+ function isUrlValueEqual(currentUrlValue, newUrlValue) {
58
+ if (currentUrlValue.length === 0 && newUrlValue == null) {
59
+ return true;
60
+ }
61
+ if (!Array.isArray(newUrlValue) && (currentUrlValue == null ? void 0 : currentUrlValue.length) === 1) {
62
+ return newUrlValue === currentUrlValue[0];
63
+ }
64
+ if ((newUrlValue == null ? void 0 : newUrlValue.length) === 0 && currentUrlValue === null) {
65
+ return true;
66
+ }
67
+ return isEqual(currentUrlValue, newUrlValue);
68
+ }
69
+
70
+ export { getUrlState, isUrlValueEqual, syncStateFromUrl };
71
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NlcnZpY2VzL3V0aWxzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzRXF1YWwgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgVW5pcXVlVXJsS2V5TWFwcGVyIH0gZnJvbSAnLi9VbmlxdWVVcmxLZXlNYXBwZXIuanMnO1xuXG5mdW5jdGlvbiBnZXRVcmxTdGF0ZShyb290KSB7XG4gIGNvbnN0IHVybEtleU1hcHBlciA9IG5ldyBVbmlxdWVVcmxLZXlNYXBwZXIoKTtcbiAgY29uc3QgcmVzdWx0ID0ge307XG4gIGNvbnN0IHZpc2l0Tm9kZSA9IChvYmopID0+IHtcbiAgICBpZiAob2JqLnVybFN5bmMpIHtcbiAgICAgIGNvbnN0IG5ld1VybFN0YXRlID0gb2JqLnVybFN5bmMuZ2V0VXJsU3RhdGUoKTtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG5ld1VybFN0YXRlKSkge1xuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgIGNvbnN0IHVuaXF1ZUtleSA9IHVybEtleU1hcHBlci5nZXRVbmlxdWVLZXkoa2V5LCBvYmopO1xuICAgICAgICAgIHJlc3VsdFt1bmlxdWVLZXldID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgb2JqLmZvckVhY2hDaGlsZCh2aXNpdE5vZGUpO1xuICB9O1xuICB2aXNpdE5vZGUocm9vdCk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBzeW5jU3RhdGVGcm9tU2VhcmNoUGFyYW1zKHJvb3QsIHVybFBhcmFtcykge1xuICBjb25zdCB1cmxLZXlNYXBwZXIgPSBuZXcgVW5pcXVlVXJsS2V5TWFwcGVyKCk7XG4gIHN5bmNTdGF0ZUZyb21Vcmwocm9vdCwgdXJsUGFyYW1zLCB1cmxLZXlNYXBwZXIpO1xufVxuZnVuY3Rpb24gc3luY1N0YXRlRnJvbVVybChyb290LCB1cmxQYXJhbXMsIHVybEtleU1hcHBlciwgb25seUNoaWxkcmVuKSB7XG4gIGlmICghb25seUNoaWxkcmVuKSB7XG4gICAgc3luY1VybFN0YXRlVG9PYmplY3Qocm9vdCwgdXJsUGFyYW1zLCB1cmxLZXlNYXBwZXIpO1xuICB9XG4gIHJvb3QuZm9yRWFjaENoaWxkKChjaGlsZCkgPT4ge1xuICAgIHN5bmNVcmxTdGF0ZVRvT2JqZWN0KGNoaWxkLCB1cmxQYXJhbXMsIHVybEtleU1hcHBlcik7XG4gIH0pO1xuICByb290LmZvckVhY2hDaGlsZCgoY2hpbGQpID0+IHN5bmNTdGF0ZUZyb21VcmwoY2hpbGQsIHVybFBhcmFtcywgdXJsS2V5TWFwcGVyLCB0cnVlKSk7XG59XG5mdW5jdGlvbiBzeW5jVXJsU3RhdGVUb09iamVjdChzY2VuZU9iamVjdCwgdXJsUGFyYW1zLCB1cmxLZXlNYXBwZXIpIHtcbiAgaWYgKHNjZW5lT2JqZWN0LnVybFN5bmMpIHtcbiAgICBjb25zdCB1cmxTdGF0ZSA9IHt9O1xuICAgIGNvbnN0IGN1cnJlbnRTdGF0ZSA9IHNjZW5lT2JqZWN0LnVybFN5bmMuZ2V0VXJsU3RhdGUoKTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBzY2VuZU9iamVjdC51cmxTeW5jLmdldEtleXMoKSkge1xuICAgICAgY29uc3QgdW5pcXVlS2V5ID0gdXJsS2V5TWFwcGVyLmdldFVuaXF1ZUtleShrZXksIHNjZW5lT2JqZWN0KTtcbiAgICAgIGNvbnN0IG5ld1ZhbHVlID0gdXJsUGFyYW1zLmdldEFsbCh1bmlxdWVLZXkpO1xuICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gY3VycmVudFN0YXRlW2tleV07XG4gICAgICBpZiAoaXNVcmxWYWx1ZUVxdWFsKG5ld1ZhbHVlLCBjdXJyZW50VmFsdWUpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKG5ld1ZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY3VycmVudFZhbHVlKSkge1xuICAgICAgICAgIHVybFN0YXRlW2tleV0gPSBuZXdWYWx1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB1cmxTdGF0ZVtrZXldID0gbmV3VmFsdWVbMF07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVybFN0YXRlW2tleV0gPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoT2JqZWN0LmtleXModXJsU3RhdGUpLmxlbmd0aCA+IDApIHtcbiAgICAgIHNjZW5lT2JqZWN0LnVybFN5bmMudXBkYXRlRnJvbVVybCh1cmxTdGF0ZSk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBpc1VybFZhbHVlRXF1YWwoY3VycmVudFVybFZhbHVlLCBuZXdVcmxWYWx1ZSkge1xuICBpZiAoY3VycmVudFVybFZhbHVlLmxlbmd0aCA9PT0gMCAmJiBuZXdVcmxWYWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKCFBcnJheS5pc0FycmF5KG5ld1VybFZhbHVlKSAmJiAoY3VycmVudFVybFZhbHVlID09IG51bGwgPyB2b2lkIDAgOiBjdXJyZW50VXJsVmFsdWUubGVuZ3RoKSA9PT0gMSkge1xuICAgIHJldHVybiBuZXdVcmxWYWx1ZSA9PT0gY3VycmVudFVybFZhbHVlWzBdO1xuICB9XG4gIGlmICgobmV3VXJsVmFsdWUgPT0gbnVsbCA/IHZvaWQgMCA6IG5ld1VybFZhbHVlLmxlbmd0aCkgPT09IDAgJiYgY3VycmVudFVybFZhbHVlID09PSBudWxsKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGlzRXF1YWwoY3VycmVudFVybFZhbHVlLCBuZXdVcmxWYWx1ZSk7XG59XG5cbmV4cG9ydCB7IGdldFVybFN0YXRlLCBpc1VybFZhbHVlRXF1YWwsIHN5bmNTdGF0ZUZyb21TZWFyY2hQYXJhbXMsIHN5bmNTdGF0ZUZyb21VcmwgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pZFhScGJITXVhbk1pTENKemIzVnlZMlZ6SWpwYklpNHVMeTR1THk0dUwzTnlZeTl6WlhKMmFXTmxjeTkxZEdsc2N5NTBjeUpkTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lKcGJYQnZjblFnZXlCcGMwVnhkV0ZzSUgwZ1puSnZiU0FuYkc5a1lYTm9KenRjYmx4dWFXMXdiM0owSUhzZ1UyTmxibVZQWW1wbFkzUXNJRk5qWlc1bFQySnFaV04wVlhKc1ZtRnNkV1VzSUZOalpXNWxUMkpxWldOMFZYSnNWbUZzZFdWeklIMGdabkp2YlNBbkxpNHZZMjl5WlM5MGVYQmxjeWM3WEc1cGJYQnZjblFnZXlCVmJtbHhkV1ZWY214TFpYbE5ZWEJ3WlhJZ2ZTQm1jbTl0SUNjdUwxVnVhWEYxWlZWeWJFdGxlVTFoY0hCbGNpYzdYRzVjYmk4cUtseHVJQ29nUUhCaGNtRnRJSEp2YjNSY2JpQXFJRUJ5WlhSMWNtNXpJSFJvWlNCbWRXeHNJSE5qWlc1bElIVnliQ0J6ZEdGMFpTQmhjeUJoSUc5aWFtVmpkQ0IzYVhSb0lHdGxlWE1nWVc1a0lIWmhiSFZsYzF4dUlDb3ZYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdaMlYwVlhKc1UzUmhkR1VvY205dmREb2dVMk5sYm1WUFltcGxZM1FwT2lCVFkyVnVaVTlpYW1WamRGVnliRlpoYkhWbGN5QjdYRzRnSUdOdmJuTjBJSFZ5YkV0bGVVMWhjSEJsY2lBOUlHNWxkeUJWYm1seGRXVlZjbXhMWlhsTllYQndaWElvS1R0Y2JpQWdZMjl1YzNRZ2NtVnpkV3gwT2lCVFkyVnVaVTlpYW1WamRGVnliRlpoYkhWbGN5QTlJSHQ5TzF4dVhHNGdJR052Ym5OMElIWnBjMmwwVG05a1pTQTlJQ2h2WW1vNklGTmpaVzVsVDJKcVpXTjBLU0E5UGlCN1hHNGdJQ0FnYVdZZ0tHOWlhaTUxY214VGVXNWpLU0I3WEc0Z0lDQWdJQ0JqYjI1emRDQnVaWGRWY214VGRHRjBaU0E5SUc5aWFpNTFjbXhUZVc1akxtZGxkRlZ5YkZOMFlYUmxLQ2s3WEc1Y2JpQWdJQ0FnSUdadmNpQW9ZMjl1YzNRZ1cydGxlU3dnZG1Gc2RXVmRJRzltSUU5aWFtVmpkQzVsYm5SeWFXVnpLRzVsZDFWeWJGTjBZWFJsS1NrZ2UxeHVJQ0FnSUNBZ0lDQnBaaUFvZG1Gc2RXVWdJVDBnYm5Wc2JDa2dlMXh1SUNBZ0lDQWdJQ0FnSUdOdmJuTjBJSFZ1YVhGMVpVdGxlU0E5SUhWeWJFdGxlVTFoY0hCbGNpNW5aWFJWYm1seGRXVkxaWGtvYTJWNUxDQnZZbW9wTzF4dUlDQWdJQ0FnSUNBZ0lISmxjM1ZzZEZ0MWJtbHhkV1ZMWlhsZElEMGdkbUZzZFdVN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNWNiaUFnSUNCdlltb3VabTl5UldGamFFTm9hV3hrS0hacGMybDBUbTlrWlNrN1hHNGdJSDA3WEc1Y2JpQWdkbWx6YVhST2IyUmxLSEp2YjNRcE8xeHVJQ0J5WlhSMWNtNGdjbVZ6ZFd4ME8xeHVmVnh1WEc0dktpcGNiaUFxSUVWNGNHOXlkR1ZrSUhWMGFXd2dablZ1WTNScGIyNGdkRzhnYzNsdVl5QnpkR0YwWlNCbWNtOXRJR0Z1SUdsdWFYUnBZV3dnZFhKc0lITjBZWFJsTGx4dUlDb2dWWE5sWm5Wc0lHWnZjaUJwYm1sMGFXRnNhWHBwYm1jZ1lXNGdaVzFpWldSa1pXUWdjMk5sYm1WeklIZHBkR2dnWVNCMWNtd2djM1JoZEdVZ2MzUnlhVzVuTGx4dUlDb3ZYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdjM2x1WTFOMFlYUmxSbkp2YlZObFlYSmphRkJoY21GdGN5aHliMjkwT2lCVFkyVnVaVTlpYW1WamRDd2dkWEpzVUdGeVlXMXpPaUJWVWt4VFpXRnlZMmhRWVhKaGJYTXBJSHRjYmlBZ1kyOXVjM1FnZFhKc1MyVjVUV0Z3Y0dWeUlEMGdibVYzSUZWdWFYRjFaVlZ5YkV0bGVVMWhjSEJsY2lncE8xeHVJQ0J6ZVc1alUzUmhkR1ZHY205dFZYSnNLSEp2YjNRc0lIVnliRkJoY21GdGN5d2dkWEpzUzJWNVRXRndjR1Z5S1R0Y2JuMWNibHh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJSE41Ym1OVGRHRjBaVVp5YjIxVmNtd29YRzRnSUhKdmIzUTZJRk5qWlc1bFQySnFaV04wTEZ4dUlDQjFjbXhRWVhKaGJYTTZJRlZTVEZObFlYSmphRkJoY21GdGN5eGNiaUFnZFhKc1MyVjVUV0Z3Y0dWeU9pQlZibWx4ZFdWVmNteExaWGxOWVhCd1pYSXNYRzRnSUc5dWJIbERhR2xzWkhKbGJqODZJR0p2YjJ4bFlXNWNiaWtnZTF4dUlDQnBaaUFvSVc5dWJIbERhR2xzWkhKbGJpa2dlMXh1SUNBZ0lITjVibU5WY214VGRHRjBaVlJ2VDJKcVpXTjBLSEp2YjNRc0lIVnliRkJoY21GdGN5d2dkWEpzUzJWNVRXRndjR1Z5S1R0Y2JpQWdmVnh1WEc0Z0lDOHZJRlJvWlhObElIUjNieUJtYjNKRllXTm9RMmhwYkdRZ2JHOXZjSE1nYldsbmFIUWdiRzl2YXlCemRISmhibWRsSUdKMWRDQnBkQ2R6SUhSdklHMWhhMlVnYzNWeVpTQjNaU0IzWVd4cklIUm9jbTkxWjJnZ2RHaGxJSE5qWlc1bElHZHlZWEJvSUc5dVpTQnNaWFpsYkNCaGRDQmhJSFJwYldVZ1lYTWdkWEpzSUd0bGVTQmpiMjVtYkdsamRITWdaR1Z3Wlc1a0lHUmxjSFJvSUdsdUlIUm9aU0J6WTJWdVpTQjBjbVZsWEc0Z0lISnZiM1F1Wm05eVJXRmphRU5vYVd4a0tDaGphR2xzWkNrZ1BUNGdlMXh1SUNBZ0lITjVibU5WY214VGRHRjBaVlJ2VDJKcVpXTjBLR05vYVd4a0xDQjFjbXhRWVhKaGJYTXNJSFZ5YkV0bGVVMWhjSEJsY2lrN1hHNGdJSDBwTzF4dVhHNGdJSEp2YjNRdVptOXlSV0ZqYUVOb2FXeGtLQ2hqYUdsc1pDa2dQVDRnYzNsdVkxTjBZWFJsUm5KdmJWVnliQ2hqYUdsc1pDd2dkWEpzVUdGeVlXMXpMQ0IxY214TFpYbE5ZWEJ3WlhJc0lIUnlkV1VwS1R0Y2JuMWNibHh1Wm5WdVkzUnBiMjRnYzNsdVkxVnliRk4wWVhSbFZHOVBZbXBsWTNRb2MyTmxibVZQWW1wbFkzUTZJRk5qWlc1bFQySnFaV04wTENCMWNteFFZWEpoYlhNNklGVlNURk5sWVhKamFGQmhjbUZ0Y3l3Z2RYSnNTMlY1VFdGd2NHVnlPaUJWYm1seGRXVlZjbXhMWlhsTllYQndaWElwSUh0Y2JpQWdhV1lnS0hOalpXNWxUMkpxWldOMExuVnliRk41Ym1NcElIdGNiaUFnSUNCamIyNXpkQ0IxY214VGRHRjBaVG9nVTJObGJtVlBZbXBsWTNSVmNteFdZV3gxWlhNZ1BTQjdmVHRjYmlBZ0lDQmpiMjV6ZENCamRYSnlaVzUwVTNSaGRHVWdQU0J6WTJWdVpVOWlhbVZqZEM1MWNteFRlVzVqTG1kbGRGVnliRk4wWVhSbEtDazdYRzVjYmlBZ0lDQm1iM0lnS0dOdmJuTjBJR3RsZVNCdlppQnpZMlZ1WlU5aWFtVmpkQzUxY214VGVXNWpMbWRsZEV0bGVYTW9LU2tnZTF4dUlDQWdJQ0FnWTI5dWMzUWdkVzVwY1hWbFMyVjVJRDBnZFhKc1MyVjVUV0Z3Y0dWeUxtZGxkRlZ1YVhGMVpVdGxlU2hyWlhrc0lITmpaVzVsVDJKcVpXTjBLVHRjYmlBZ0lDQWdJR052Ym5OMElHNWxkMVpoYkhWbElEMGdkWEpzVUdGeVlXMXpMbWRsZEVGc2JDaDFibWx4ZFdWTFpYa3BPMXh1SUNBZ0lDQWdZMjl1YzNRZ1kzVnljbVZ1ZEZaaGJIVmxJRDBnWTNWeWNtVnVkRk4wWVhSbFcydGxlVjA3WEc1Y2JpQWdJQ0FnSUdsbUlDaHBjMVZ5YkZaaGJIVmxSWEYxWVd3b2JtVjNWbUZzZFdVc0lHTjFjbkpsYm5SV1lXeDFaU2twSUh0Y2JpQWdJQ0FnSUNBZ1kyOXVkR2x1ZFdVN1hHNGdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lHbG1JQ2h1WlhkV1lXeDFaUzVzWlc1bmRHZ2dQaUF3S1NCN1hHNGdJQ0FnSUNBZ0lHbG1JQ2hCY25KaGVTNXBjMEZ5Y21GNUtHTjFjbkpsYm5SV1lXeDFaU2twSUh0Y2JpQWdJQ0FnSUNBZ0lDQjFjbXhUZEdGMFpWdHJaWGxkSUQwZ2JtVjNWbUZzZFdVN1hHNGdJQ0FnSUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lDQWdkWEpzVTNSaGRHVmJhMlY1WFNBOUlHNWxkMVpoYkhWbFd6QmRPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0F2THlCdFlYSnJJSFJvYVhNZ2EyVjVJR0Z6SUdoaGRtbHVaeUJ1YnlCMWNtd2djM1JoZEdWY2JpQWdJQ0FnSUNBZ2RYSnNVM1JoZEdWYmEyVjVYU0E5SUc1MWJHdzdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2FXWWdLRTlpYW1WamRDNXJaWGx6S0hWeWJGTjBZWFJsS1M1c1pXNW5kR2dnUGlBd0tTQjdYRzRnSUNBZ0lDQnpZMlZ1WlU5aWFtVmpkQzUxY214VGVXNWpMblZ3WkdGMFpVWnliMjFWY213b2RYSnNVM1JoZEdVcE8xeHVJQ0FnSUgxY2JpQWdmVnh1ZlZ4dVhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z2FYTlZjbXhXWVd4MVpVVnhkV0ZzS0dOMWNuSmxiblJWY214V1lXeDFaVG9nYzNSeWFXNW5XMTBzSUc1bGQxVnliRlpoYkhWbE9pQlRZMlZ1WlU5aWFtVmpkRlZ5YkZaaGJIVmxLVG9nWW05dmJHVmhiaUI3WEc0Z0lHbG1JQ2hqZFhKeVpXNTBWWEpzVm1Gc2RXVXViR1Z1WjNSb0lEMDlQU0F3SUNZbUlHNWxkMVZ5YkZaaGJIVmxJRDA5SUc1MWJHd3BJSHRjYmlBZ0lDQnlaWFIxY200Z2RISjFaVHRjYmlBZ2ZWeHVYRzRnSUdsbUlDZ2hRWEp5WVhrdWFYTkJjbkpoZVNodVpYZFZjbXhXWVd4MVpTa2dKaVlnWTNWeWNtVnVkRlZ5YkZaaGJIVmxQeTVzWlc1bmRHZ2dQVDA5SURFcElIdGNiaUFnSUNCeVpYUjFjbTRnYm1WM1ZYSnNWbUZzZFdVZ1BUMDlJR04xY25KbGJuUlZjbXhXWVd4MVpWc3dYVHRjYmlBZ2ZWeHVYRzRnSUdsbUlDaHVaWGRWY214V1lXeDFaVDh1YkdWdVozUm9JRDA5UFNBd0lDWW1JR04xY25KbGJuUlZjbXhXWVd4MVpTQTlQVDBnYm5Wc2JDa2dlMXh1SUNBZ0lISmxkSFZ5YmlCMGNuVmxPMXh1SUNCOVhHNWNiaUFnTHk4Z1YyVWdhR0YyWlNCMGQyOGdZWEp5WVhsekxDQnNaWFJ6SUdOdmJYQmhjbVVnZEdobGJWeHVJQ0J5WlhSMWNtNGdhWE5GY1hWaGJDaGpkWEp5Wlc1MFZYSnNWbUZzZFdVc0lHNWxkMVZ5YkZaaGJIVmxLVHRjYm4xY2JpSmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU96czdRVUZUVHl4VFFVRlRMRmxCUVZrc1NVRkJlVU1zUlVGQlFUdEJRVU51UlN4RlFVRk5MRTFCUVVFc1dVRkJRU3hIUVVGbExFbEJRVWtzYTBKQlFXMUNMRVZCUVVFc1EwRkJRVHRCUVVNMVF5eEZRVUZCTEUxQlFVMHNVMEZCSzBJc1JVRkJReXhEUVVGQk8wRkJSWFJETEVWQlFVMHNUVUZCUVN4VFFVRkJMRWRCUVZrc1EwRkJReXhIUVVGeFFpeExRVUZCTzBGQlEzUkRMRWxCUVVFc1NVRkJTU3hKUVVGSkxFOUJRVk1zUlVGQlFUdEJRVU5tTEUxQlFVMHNUVUZCUVN4WFFVRkJMRWRCUVdNc1IwRkJTU3hEUVVGQkxFOUJRVUVzUTBGQlVTeFhRVUZaTEVWQlFVRXNRMEZCUVR0QlFVVTFReXhOUVVGQkxFdEJRVUVzVFVGQlZ5eERRVUZETEVkQlFVc3NSVUZCUVN4TFFVRkxMRXRCUVVzc1RVRkJUeXhEUVVGQkxFOUJRVUVzUTBGQlVTeFhRVUZYTEVOQlFVY3NSVUZCUVR0QlFVTjBSQ3hSUVVGQkxFbEJRVWtzVTBGQlV5eEpRVUZOTEVWQlFVRTdRVUZEYWtJc1ZVRkJRU3hOUVVGTkxGTkJRVmtzUjBGQlFTeFpRVUZCTEVOQlFXRXNXVUZCWVN4RFFVRkJMRWRCUVVFc1JVRkJTeXhIUVVGSExFTkJRVUVzUTBGQlFUdEJRVU53UkN4VlFVRkJMRTFCUVVFc1EwRkJUeXhUUVVGaExFTkJRVUVzUjBGQlFTeExRVUZCTEVOQlFVRTdRVUZCUVN4VFFVTjBRanRCUVVGQkxFOUJRMFk3UVVGQlFTeExRVU5HTzBGQlJVRXNTVUZCUVN4SFFVRkJMRU5CUVVrc1lVRkJZU3hUUVVGVExFTkJRVUVzUTBGQlFUdEJRVUZCTEVkQlF6VkNMRU5CUVVFN1FVRkZRU3hGUVVGQkxGTkJRVUVzUTBGQlZTeEpRVUZKTEVOQlFVRXNRMEZCUVR0QlFVTmtMRVZCUVU4c1QwRkJRU3hOUVVGQkxFTkJRVUU3UVVGRFZDeERRVUZCTzBGQlRXZENMRk5CUVVFc2VVSkJRVUVzUTBGQk1FSXNUVUZCYlVJc1UwRkJORUlzUlVGQlFUdEJRVU4yUml4RlFVRk5MRTFCUVVFc1dVRkJRU3hIUVVGbExFbEJRVWtzYTBKQlFXMUNMRVZCUVVFc1EwRkJRVHRCUVVNMVF5eEZRVUZwUWl4blFrRkJRU3hEUVVGQkxFbEJRVUVzUlVGQlRTeFhRVUZYTEZsQlFWa3NRMEZCUVN4RFFVRkJPMEZCUTJoRUxFTkJRVUU3UVVGRlR5eFRRVUZUTEdkQ1FVTmtMRU5CUVVFc1NVRkJRU3hGUVVOQkxGTkJRMEVzUlVGQlFTeFpRVUZCTEVWQlEwRXNXVUZEUVN4RlFVRkJPMEZCUTBFc1JVRkJRU3hKUVVGSkxFTkJRVU1zV1VGQll5eEZRVUZCTzBGQlEycENMRWxCUVhGQ0xHOUNRVUZCTEVOQlFVRXNTVUZCUVN4RlFVRk5MRmRCUVZjc1dVRkJXU3hEUVVGQkxFTkJRVUU3UVVGQlFTeEhRVU53UkR0QlFVZEJMRVZCUVVzc1NVRkJRU3hEUVVGQkxGbEJRVUVzUTBGQllTeERRVUZETEV0QlFWVXNTMEZCUVR0QlFVTXpRaXhKUVVGeFFpeHZRa0ZCUVN4RFFVRkJMRXRCUVVFc1JVRkJUeXhYUVVGWExGbEJRVmtzUTBGQlFTeERRVUZCTzBGQlFVRXNSMEZEY0VRc1EwRkJRU3hEUVVGQk8wRkJSVVFzUlVGQlN5eEpRVUZCTEVOQlFVRXNXVUZCUVN4RFFVRmhMRU5CUVVNc1MwRkJWU3hMUVVGQkxHZENRVUZCTEVOQlFXbENMRTlCUVU4c1UwRkJWeXhGUVVGQkxGbEJRVUVzUlVGQll5eEpRVUZKTEVOQlFVTXNRMEZCUVN4RFFVRkJPMEZCUTNKR0xFTkJRVUU3UVVGRlFTeFRRVUZUTEc5Q1FVRkJMRU5CUVhGQ0xGZEJRVEJDTEVWQlFVRXNVMEZCUVN4RlFVRTBRaXhaUVVGclF5eEZRVUZCTzBGQlEzQklMRVZCUVVFc1NVRkJTU3haUVVGWkxFOUJRVk1zUlVGQlFUdEJRVU4yUWl4SlFVRkJMRTFCUVUwc1YwRkJhVU1zUlVGQlF5eERRVUZCTzBGQlEzaERMRWxCUVUwc1RVRkJRU3haUVVGQkxFZEJRV1VzVjBGQldTeERRVUZCTEU5QlFVRXNRMEZCVVN4WFFVRlpMRVZCUVVFc1EwRkJRVHRCUVVWeVJDeEpRVUZCTEV0QlFVRXNUVUZCVnl4SFFVRlBMRWxCUVVFc1YwRkJRU3hEUVVGWkxFOUJRVkVzUTBGQlFTeFBRVUZCTEVWQlFWY3NSVUZCUVR0QlFVTXZReXhOUVVGQkxFMUJRVTBzVTBGQldTeEhRVUZCTEZsQlFVRXNRMEZCWVN4WlFVRmhMRU5CUVVFc1IwRkJRU3hGUVVGTExGZEJRVmNzUTBGQlFTeERRVUZCTzBGQlF6VkVMRTFCUVUwc1RVRkJRU3hSUVVGQkxFZEJRVmNzVTBGQlZTeERRVUZCTEUxQlFVRXNRMEZCVHl4VFFVRlRMRU5CUVVFc1EwRkJRVHRCUVVNelF5eE5RVUZCTEUxQlFVMHNaVUZCWlN4WlFVRmhMRU5CUVVFc1IwRkJRU3hEUVVGQkxFTkJRVUU3UVVGRmJFTXNUVUZCU1N4SlFVRkJMR1ZCUVVFc1EwRkJaMElzVVVGQlZTeEZRVUZCTEZsQlFWa3NRMEZCUnl4RlFVRkJPMEZCUXpORExGRkJRVUVzVTBGQlFUdEJRVUZCTEU5QlEwWTdRVUZGUVN4TlFVRkpMRWxCUVVFc1VVRkJRU3hEUVVGVExGTkJRVk1zUTBGQlJ5eEZRVUZCTzBGQlEzWkNMRkZCUVVrc1NVRkJRU3hMUVVGQkxFTkJRVTBzVDBGQlVTeERRVUZCTEZsQlFWa3NRMEZCUnl4RlFVRkJPMEZCUXk5Q0xGVkJRVUVzVVVGQlFTeERRVUZUTEVkQlFVOHNRMEZCUVN4SFFVRkJMRkZCUVVFc1EwRkJRVHRCUVVGQkxGTkJRMWdzVFVGQlFUdEJRVU5NTEZWQlFVRXNVVUZCUVN4RFFVRlRMRTlCUVU4c1VVRkJVeXhEUVVGQkxFTkJRVUVzUTBGQlFTeERRVUZCTzBGQlFVRXNVMEZETTBJN1FVRkJRU3hQUVVOTExFMUJRVUU3UVVGRlRDeFJRVUZCTEZGQlFVRXNRMEZCVXl4SFFVRlBMRU5CUVVFc1IwRkJRU3hKUVVGQkxFTkJRVUU3UVVGQlFTeFBRVU5zUWp0QlFVRkJMRXRCUTBZN1FVRkZRU3hKUVVGQkxFbEJRVWtzVFVGQlR5eERRVUZCTEVsQlFVRXNRMEZCU3l4UlFVRlJMRU5CUVVFc1EwRkJSU3hUUVVGVExFTkJRVWNzUlVGQlFUdEJRVU53UXl4TlFVRlpMRmRCUVVFc1EwRkJRU3hQUVVGQkxFTkJRVkVzWTBGQll5eFJRVUZSTEVOQlFVRXNRMEZCUVR0QlFVRkJMRXRCUXpWRE8wRkJRVUVzUjBGRFJqdEJRVU5HTEVOQlFVRTdRVUZGWjBJc1UwRkJRU3hsUVVGQkxFTkJRV2RDTEdsQ1FVRXlRaXhYUVVFeVF5eEZRVUZCTzBGQlEzQkhMRVZCUVVFc1NVRkJTU3hsUVVGblFpeERRVUZCTEUxQlFVRXNTMEZCVnl4RFFVRkxMRWxCUVVFc1YwRkJRU3hKUVVGbExFbEJRVTBzUlVGQlFUdEJRVU4yUkN4SlFVRlBMRTlCUVVFc1NVRkJRU3hEUVVGQk8wRkJRVUVzUjBGRFZEdEJRVVZCTEVWQlFVRXNTVUZCU1N4RFFVRkRMRXRCUVUwc1EwRkJRU3hQUVVGQkxFTkJRVkVzVjBGQlZ5eERRVUZMTEVsQlFVRXNRMEZCUVN4bFFVRkJMRWxCUVVFc1NVRkJRU3hIUVVGQkxFdEJRVUVzUTBGQlFTeEhRVUZCTEdWQlFVRXNRMEZCYVVJc1dVRkJWeXhEUVVGSExFVkJRVUU3UVVGRGFFVXNTVUZCUVN4UFFVRlBMR2RDUVVGblFpeGxRVUZuUWl4RFFVRkJMRU5CUVVFc1EwRkJRU3hEUVVGQk8wRkJRVUVzUjBGRGVrTTdRVUZGUVN4RlFVRkJMRWxCUVVFc1EwRkJTU3hYUVVGaExFbEJRVUVzU1VGQlFTeEhRVUZCTEV0QlFVRXNRMEZCUVN4SFFVRkJMRmRCUVVFc1EwRkJRU3hOUVVGQkxFMUJRVmNzUTBGQlN5eEpRVUZCTEdWQlFVRXNTMEZCYjBJc1NVRkJUU3hGUVVGQk8wRkJRM3BFTEVsQlFVOHNUMEZCUVN4SlFVRkJMRU5CUVVFN1FVRkJRU3hIUVVOVU8wRkJSMEVzUlVGQlR5eFBRVUZCTEU5QlFVRXNRMEZCVVN4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