@sapui5/sap.fe.core 1.108.2 → 1.110.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 (359) hide show
  1. package/README.md +5 -1
  2. package/package.json +11 -9
  3. package/src/.eslintrc +7 -0
  4. package/src/sap/fe/core/.library +39 -37
  5. package/src/sap/fe/core/.supportrc +3 -3
  6. package/src/sap/fe/core/ActionRuntime.js +72 -27
  7. package/src/sap/fe/core/ActionRuntime.ts +104 -21
  8. package/src/sap/fe/core/AppComponent.js +102 -120
  9. package/src/sap/fe/core/AppComponent.ts +148 -45
  10. package/src/sap/fe/core/AppStateHandler.js +105 -91
  11. package/src/sap/fe/core/AppStateHandler.ts +85 -23
  12. package/src/sap/fe/core/BaseController.js +5 -20
  13. package/src/sap/fe/core/BaseController.ts +11 -2
  14. package/src/sap/fe/core/CommonUtils.js +770 -1079
  15. package/src/sap/fe/core/CommonUtils.ts +750 -491
  16. package/src/sap/fe/core/ExtensionAPI.js +69 -96
  17. package/src/sap/fe/core/ExtensionAPI.ts +15 -17
  18. package/src/sap/fe/core/PageController.js +21 -46
  19. package/src/sap/fe/core/PageController.ts +11 -2
  20. package/src/sap/fe/core/TemplateComponent.js +6 -51
  21. package/src/sap/fe/core/TemplateComponent.ts +27 -16
  22. package/src/sap/fe/core/TemplateModel.js +18 -24
  23. package/src/sap/fe/core/TemplateModel.ts +25 -6
  24. package/src/sap/fe/core/buildingBlocks/AttributeModel.js +8 -23
  25. package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +5 -4
  26. package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +146 -180
  27. package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +144 -57
  28. package/src/sap/fe/core/buildingBlocks/BuildingBlockFormatter.js +1 -1
  29. package/src/sap/fe/core/buildingBlocks/BuildingBlockFragment.js +43 -0
  30. package/src/sap/fe/core/buildingBlocks/BuildingBlockFragment.ts +11 -0
  31. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +436 -556
  32. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +288 -157
  33. package/src/sap/fe/core/buildingBlocks/TraceInfo.js +215 -202
  34. package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +93 -51
  35. package/src/sap/fe/core/controllerextensions/BusyLocker.js +11 -26
  36. package/src/sap/fe/core/controllerextensions/EditFlow.js +407 -596
  37. package/src/sap/fe/core/controllerextensions/EditFlow.ts +163 -56
  38. package/src/sap/fe/core/controllerextensions/Feedback.js +70 -0
  39. package/src/sap/fe/core/controllerextensions/Feedback.ts +64 -0
  40. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +12 -23
  41. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +1 -1
  42. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +127 -182
  43. package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +65 -32
  44. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +96 -198
  45. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +4 -5
  46. package/src/sap/fe/core/controllerextensions/InternalRouting.js +134 -291
  47. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +21 -12
  48. package/src/sap/fe/core/controllerextensions/KPIManagement.js +111 -214
  49. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +44 -44
  50. package/src/sap/fe/core/controllerextensions/MassEdit.js +24 -44
  51. package/src/sap/fe/core/controllerextensions/MassEdit.ts +3 -2
  52. package/src/sap/fe/core/controllerextensions/MessageHandler.js +39 -52
  53. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +26 -7
  54. package/src/sap/fe/core/controllerextensions/PageReady.js +81 -119
  55. package/src/sap/fe/core/controllerextensions/PageReady.ts +36 -15
  56. package/src/sap/fe/core/controllerextensions/Paginator.js +16 -51
  57. package/src/sap/fe/core/controllerextensions/Paginator.ts +1 -3
  58. package/src/sap/fe/core/controllerextensions/Placeholder.js +7 -33
  59. package/src/sap/fe/core/controllerextensions/Routing.js +24 -32
  60. package/src/sap/fe/core/controllerextensions/Routing.ts +6 -1
  61. package/src/sap/fe/core/controllerextensions/RoutingListener.js +1 -1
  62. package/src/sap/fe/core/controllerextensions/Share.js +53 -98
  63. package/src/sap/fe/core/controllerextensions/Share.ts +6 -3
  64. package/src/sap/fe/core/controllerextensions/SideEffects.js +103 -174
  65. package/src/sap/fe/core/controllerextensions/SideEffects.ts +37 -22
  66. package/src/sap/fe/core/controllerextensions/ViewState.js +341 -276
  67. package/src/sap/fe/core/controllerextensions/ViewState.ts +236 -84
  68. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +6 -22
  69. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +8 -2
  70. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +66 -88
  71. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.ts +64 -17
  72. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +28 -34
  73. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +22 -1
  74. package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +69 -65
  75. package/src/sap/fe/core/controllerextensions/collaboration/Manage.ts +31 -12
  76. package/src/sap/fe/core/controllerextensions/collaboration/ManageDialog.fragment.xml +15 -13
  77. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +273 -906
  78. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +142 -420
  79. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +49 -115
  80. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +12 -7
  81. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +70 -89
  82. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +313 -320
  83. package/src/sap/fe/core/controllerextensions/editFlow/operations.js +582 -683
  84. package/src/sap/fe/core/controllerextensions/editFlow/operations.ts +507 -386
  85. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +111 -102
  86. package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +102 -79
  87. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +689 -154
  88. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +866 -31
  89. package/src/sap/fe/core/controllerextensions/pageReady/DataQueryWatcher.js +24 -101
  90. package/src/sap/fe/core/controllerextensions/pageReady/DataQueryWatcher.ts +5 -5
  91. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +91 -217
  92. package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +3 -20
  93. package/src/sap/fe/core/controls/ActionParameterDialogValueHelp.fragment.xml +1 -0
  94. package/src/sap/fe/core/controls/ActionPartial.fragment.xml +46 -46
  95. package/src/sap/fe/core/controls/Any.js +1 -1
  96. package/src/sap/fe/core/controls/AnyElement.js +1 -1
  97. package/src/sap/fe/core/controls/CommandExecution.js +4 -26
  98. package/src/sap/fe/core/controls/ConditionalWrapper.js +16 -33
  99. package/src/sap/fe/core/controls/ConditionalWrapper.ts +16 -2
  100. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +41 -94
  101. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +1 -1
  102. package/src/sap/fe/core/controls/CustomQuickViewPage.js +5 -34
  103. package/src/sap/fe/core/controls/CustomQuickViewPage.ts +5 -7
  104. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossDraft.fragment.xml +7 -7
  105. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +56 -58
  106. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +53 -33
  107. package/src/sap/fe/core/controls/FieldWrapper.js +6 -49
  108. package/src/sap/fe/core/controls/FileWrapper.js +51 -136
  109. package/src/sap/fe/core/controls/FileWrapper.ts +25 -29
  110. package/src/sap/fe/core/controls/FilterBar.js +19 -54
  111. package/src/sap/fe/core/controls/FormElementWrapper.js +1 -22
  112. package/src/sap/fe/core/controls/MassEditSelect.js +1 -1
  113. package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +1 -5
  114. package/src/sap/fe/core/controls/MultiValueParameterDelegate.ts +2 -2
  115. package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +24 -46
  116. package/src/sap/fe/core/controls/filterbar/FilterContainer.js +14 -41
  117. package/src/sap/fe/core/controls/filterbar/FilterContainer.ts +4 -4
  118. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +26 -67
  119. package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +20 -20
  120. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +12 -48
  121. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +17 -46
  122. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +3 -3
  123. package/src/sap/fe/core/controls/massEdit/MassEditField.fragment.xml +1 -0
  124. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +6 -78
  125. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +4 -4
  126. package/src/sap/fe/core/converters/ConverterContext.js +44 -98
  127. package/src/sap/fe/core/converters/ConverterContext.ts +1 -1
  128. package/src/sap/fe/core/converters/ManifestSettings.js +1 -20
  129. package/src/sap/fe/core/converters/ManifestSettings.ts +16 -9
  130. package/src/sap/fe/core/converters/ManifestWrapper.js +97 -158
  131. package/src/sap/fe/core/converters/ManifestWrapper.ts +4 -0
  132. package/src/sap/fe/core/converters/MetaModelConverter.js +28 -167
  133. package/src/sap/fe/core/converters/MetaModelConverter.ts +9 -3
  134. package/src/sap/fe/core/converters/TemplateConverter.js +10 -22
  135. package/src/sap/fe/core/converters/TemplateConverter.ts +10 -7
  136. package/src/sap/fe/core/converters/annotations/DataField.js +88 -132
  137. package/src/sap/fe/core/converters/annotations/DataField.ts +90 -38
  138. package/src/sap/fe/core/converters/common/AnnotationConverter.js +57 -379
  139. package/src/sap/fe/core/converters/controls/Common/Action.js +45 -115
  140. package/src/sap/fe/core/converters/controls/Common/Action.ts +17 -5
  141. package/src/sap/fe/core/converters/controls/Common/Chart.js +20 -73
  142. package/src/sap/fe/core/converters/controls/Common/Chart.ts +21 -14
  143. package/src/sap/fe/core/converters/controls/Common/Criticality.js +1 -9
  144. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +40 -94
  145. package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +44 -31
  146. package/src/sap/fe/core/converters/controls/Common/Form.js +26 -63
  147. package/src/sap/fe/core/converters/controls/Common/Form.ts +24 -10
  148. package/src/sap/fe/core/converters/controls/Common/KPI.js +13 -63
  149. package/src/sap/fe/core/converters/controls/Common/Table.js +368 -707
  150. package/src/sap/fe/core/converters/controls/Common/Table.ts +308 -197
  151. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +54 -109
  152. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +15 -9
  153. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +69 -210
  154. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +23 -16
  155. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +12 -80
  156. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +3 -1
  157. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +1 -19
  158. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +45 -136
  159. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +10 -10
  160. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +82 -173
  161. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +48 -22
  162. package/src/sap/fe/core/converters/helpers/Aggregation.js +24 -66
  163. package/src/sap/fe/core/converters/helpers/Aggregation.ts +3 -7
  164. package/src/sap/fe/core/converters/helpers/BindingHelper.js +9 -19
  165. package/src/sap/fe/core/converters/helpers/BindingHelper.ts +0 -1
  166. package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +20 -48
  167. package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +5 -1
  168. package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +12 -51
  169. package/src/sap/fe/core/converters/helpers/DataFieldHelper.ts +13 -11
  170. package/src/sap/fe/core/converters/helpers/ID.js +3 -17
  171. package/src/sap/fe/core/converters/helpers/ID.ts +2 -3
  172. package/src/sap/fe/core/converters/helpers/IssueManager.js +1 -6
  173. package/src/sap/fe/core/converters/helpers/Key.js +10 -19
  174. package/src/sap/fe/core/converters/helpers/Key.ts +3 -3
  175. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +2 -20
  176. package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +2 -37
  177. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +126 -131
  178. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +112 -31
  179. package/src/sap/fe/core/converters/templates/ListReportConverter.js +67 -131
  180. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +58 -27
  181. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +106 -183
  182. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +73 -104
  183. package/src/sap/fe/core/designtime/AppComponent.designtime.js +74 -67
  184. package/src/sap/fe/core/designtime/AppComponent.designtime.ts +77 -69
  185. package/src/sap/fe/core/formatters/CollaborationFormatter.js +20 -29
  186. package/src/sap/fe/core/formatters/CollaborationFormatter.ts +21 -0
  187. package/src/sap/fe/core/formatters/FPMFormatter.js +3 -7
  188. package/src/sap/fe/core/formatters/KPIFormatter.js +5 -13
  189. package/src/sap/fe/core/formatters/StandardFormatter.js +3 -18
  190. package/src/sap/fe/core/formatters/StandardFormatter.ts +3 -2
  191. package/src/sap/fe/core/formatters/TableFormatter.js +87 -53
  192. package/src/sap/fe/core/formatters/TableFormatter.ts +96 -9
  193. package/src/sap/fe/core/formatters/TableFormatterTypes.js +1 -4
  194. package/src/sap/fe/core/formatters/ValueFormatter.js +1 -37
  195. package/src/sap/fe/core/fpm/Component.js +2 -17
  196. package/src/sap/fe/core/helpers/AnnotationEnum.js +10 -20
  197. package/src/sap/fe/core/helpers/AnnotationEnum.ts +6 -6
  198. package/src/sap/fe/core/helpers/AppStartupHelper.js +16 -52
  199. package/src/sap/fe/core/helpers/AppStartupHelper.ts +1 -1
  200. package/src/sap/fe/core/helpers/BindingToolkit.js +106 -364
  201. package/src/sap/fe/core/helpers/BindingToolkit.ts +30 -7
  202. package/src/sap/fe/core/helpers/ClassSupport.js +16 -97
  203. package/src/sap/fe/core/helpers/ClassSupport.ts +7 -4
  204. package/src/sap/fe/core/helpers/DeleteHelper.js +621 -0
  205. package/src/sap/fe/core/helpers/DeleteHelper.ts +796 -0
  206. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +1 -12
  207. package/src/sap/fe/core/helpers/EditState.js +2 -5
  208. package/src/sap/fe/core/helpers/ExcelFormatHelper.js +1 -10
  209. package/src/sap/fe/core/helpers/FPMHelper.js +3 -8
  210. package/src/sap/fe/core/helpers/FPMHelper.ts +2 -1
  211. package/src/sap/fe/core/helpers/KeepAliveHelper.js +8 -38
  212. package/src/sap/fe/core/helpers/KeepAliveRefreshTypes.js +1 -5
  213. package/src/sap/fe/core/helpers/LoaderUtils.js +1 -7
  214. package/src/sap/fe/core/helpers/MassEditHelper.js +177 -289
  215. package/src/sap/fe/core/helpers/MassEditHelper.ts +124 -91
  216. package/src/sap/fe/core/helpers/MessageStrip.js +12 -28
  217. package/src/sap/fe/core/helpers/MessageStrip.ts +7 -7
  218. package/src/sap/fe/core/helpers/ModelHelper.js +62 -103
  219. package/src/sap/fe/core/helpers/ModelHelper.ts +58 -20
  220. package/src/sap/fe/core/helpers/PasteHelper.js +28 -51
  221. package/src/sap/fe/core/helpers/PasteHelper.ts +10 -9
  222. package/src/sap/fe/core/helpers/SemanticDateOperators.js +112 -136
  223. package/src/sap/fe/core/helpers/SemanticDateOperators.ts +111 -111
  224. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +5 -11
  225. package/src/sap/fe/core/helpers/SideEffectsHelper.js +26 -32
  226. package/src/sap/fe/core/helpers/StableIdHelper.js +166 -218
  227. package/src/sap/fe/core/helpers/StableIdHelper.ts +175 -191
  228. package/src/sap/fe/core/helpers/Synchronization.js +1 -8
  229. package/src/sap/fe/core/helpers/ToES6Promise.js +1 -4
  230. package/src/sap/fe/core/helpers/TypeGuards.js +22 -0
  231. package/src/sap/fe/core/helpers/TypeGuards.ts +9 -0
  232. package/src/sap/fe/core/jsx-runtime/Fragment.js +1 -3
  233. package/src/sap/fe/core/jsx-runtime/ViewLoader.js +3 -23
  234. package/src/sap/fe/core/jsx-runtime/jsx-control.js +3 -23
  235. package/src/sap/fe/core/jsx-runtime/jsx-control.ts +2 -1
  236. package/src/sap/fe/core/jsx-runtime/jsx-xml.js +4 -16
  237. package/src/sap/fe/core/jsx-runtime/jsx-xml.ts +1 -1
  238. package/src/sap/fe/core/jsx-runtime/jsx.js +2 -5
  239. package/src/sap/fe/core/jsx-runtime/jsxs.js +1 -1
  240. package/src/sap/fe/core/jsx-runtime/useMDXComponents.js +4 -27
  241. package/src/sap/fe/core/jsx-runtime/useMDXComponents.tsx +1 -1
  242. package/src/sap/fe/core/library.js +9 -48
  243. package/src/sap/fe/core/library.support.js +3 -2
  244. package/src/sap/fe/core/library.support.ts +3 -1
  245. package/src/sap/fe/core/library.ts +3 -8
  246. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +74 -39
  247. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +71 -26
  248. package/src/sap/fe/core/messagebundle.properties +113 -67
  249. package/src/sap/fe/core/messagebundle_ar.properties +20 -3
  250. package/src/sap/fe/core/messagebundle_bg.properties +22 -5
  251. package/src/sap/fe/core/messagebundle_ca.properties +21 -4
  252. package/src/sap/fe/core/messagebundle_cs.properties +21 -4
  253. package/src/sap/fe/core/messagebundle_cy.properties +22 -5
  254. package/src/sap/fe/core/messagebundle_da.properties +20 -3
  255. package/src/sap/fe/core/messagebundle_de.properties +38 -21
  256. package/src/sap/fe/core/messagebundle_el.properties +20 -3
  257. package/src/sap/fe/core/messagebundle_en.properties +38 -21
  258. package/src/sap/fe/core/messagebundle_en_GB.properties +20 -3
  259. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +41 -28
  260. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +41 -24
  261. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +42 -29
  262. package/src/sap/fe/core/messagebundle_es.properties +40 -23
  263. package/src/sap/fe/core/messagebundle_es_MX.properties +20 -3
  264. package/src/sap/fe/core/messagebundle_et.properties +20 -3
  265. package/src/sap/fe/core/messagebundle_fi.properties +20 -3
  266. package/src/sap/fe/core/messagebundle_fr.properties +21 -4
  267. package/src/sap/fe/core/messagebundle_fr_CA.properties +22 -5
  268. package/src/sap/fe/core/messagebundle_hi.properties +20 -3
  269. package/src/sap/fe/core/messagebundle_hr.properties +22 -5
  270. package/src/sap/fe/core/messagebundle_hu.properties +20 -3
  271. package/src/sap/fe/core/messagebundle_id.properties +20 -3
  272. package/src/sap/fe/core/messagebundle_it.properties +23 -6
  273. package/src/sap/fe/core/messagebundle_iw.properties +20 -3
  274. package/src/sap/fe/core/messagebundle_ja.properties +22 -5
  275. package/src/sap/fe/core/messagebundle_kk.properties +21 -4
  276. package/src/sap/fe/core/messagebundle_ko.properties +20 -3
  277. package/src/sap/fe/core/messagebundle_lt.properties +20 -3
  278. package/src/sap/fe/core/messagebundle_lv.properties +20 -3
  279. package/src/sap/fe/core/messagebundle_ms.properties +20 -3
  280. package/src/sap/fe/core/messagebundle_nl.properties +20 -3
  281. package/src/sap/fe/core/messagebundle_no.properties +20 -3
  282. package/src/sap/fe/core/messagebundle_pl.properties +21 -4
  283. package/src/sap/fe/core/messagebundle_pt.properties +20 -3
  284. package/src/sap/fe/core/messagebundle_pt_PT.properties +20 -3
  285. package/src/sap/fe/core/messagebundle_ro.properties +20 -3
  286. package/src/sap/fe/core/messagebundle_ru.properties +20 -3
  287. package/src/sap/fe/core/messagebundle_sh.properties +20 -3
  288. package/src/sap/fe/core/messagebundle_sk.properties +20 -3
  289. package/src/sap/fe/core/messagebundle_sl.properties +26 -9
  290. package/src/sap/fe/core/messagebundle_sv.properties +20 -3
  291. package/src/sap/fe/core/messagebundle_th.properties +21 -4
  292. package/src/sap/fe/core/messagebundle_tr.properties +20 -3
  293. package/src/sap/fe/core/messagebundle_uk.properties +23 -6
  294. package/src/sap/fe/core/messagebundle_vi.properties +20 -3
  295. package/src/sap/fe/core/messagebundle_zh_CN.properties +20 -3
  296. package/src/sap/fe/core/messagebundle_zh_TW.properties +20 -3
  297. package/src/sap/fe/core/operationsHelper.js +74 -101
  298. package/src/sap/fe/core/operationsHelper.ts +113 -44
  299. package/src/sap/fe/core/rootView/Fcl.controller.js +151 -228
  300. package/src/sap/fe/core/rootView/Fcl.controller.ts +90 -15
  301. package/src/sap/fe/core/rootView/Fcl.view.xml +1 -8
  302. package/src/sap/fe/core/rootView/NavContainer.controller.js +41 -78
  303. package/src/sap/fe/core/rootView/NavContainer.controller.ts +32 -38
  304. package/src/sap/fe/core/rootView/RootViewBaseController.js +110 -181
  305. package/src/sap/fe/core/rootView/RootViewBaseController.ts +37 -17
  306. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +1 -18
  307. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +13 -52
  308. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +1 -22
  309. package/src/sap/fe/core/services/NavigationServiceFactory.js +45 -87
  310. package/src/sap/fe/core/services/NavigationServiceFactory.ts +17 -10
  311. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +4 -28
  312. package/src/sap/fe/core/services/RoutingServiceFactory.js +92 -250
  313. package/src/sap/fe/core/services/RoutingServiceFactory.ts +8 -12
  314. package/src/sap/fe/core/services/ShellServicesFactory.js +122 -251
  315. package/src/sap/fe/core/services/ShellServicesFactory.ts +19 -4
  316. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +188 -273
  317. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +143 -154
  318. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +37 -135
  319. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +59 -94
  320. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +2 -16
  321. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +1 -1
  322. package/src/sap/fe/core/support/AnnotationIssue.support.js +6 -9
  323. package/src/sap/fe/core/support/AnnotationIssue.support.ts +4 -4
  324. package/src/sap/fe/core/support/CollectionFacetMissingID.support.js +6 -9
  325. package/src/sap/fe/core/support/CollectionFacetMissingID.support.ts +3 -3
  326. package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.js +6 -9
  327. package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.ts +3 -3
  328. package/src/sap/fe/core/support/CommonHelper.js +7 -16
  329. package/src/sap/fe/core/support/Diagnostics.js +1 -10
  330. package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.js +6 -9
  331. package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.ts +3 -3
  332. package/src/sap/fe/core/templating/CommonFormatters.js +1 -15
  333. package/src/sap/fe/core/templating/CriticalityFormatters.js +4 -20
  334. package/src/sap/fe/core/templating/DataFieldFormatters.js +1 -20
  335. package/src/sap/fe/core/templating/DataModelPathHelper.js +49 -121
  336. package/src/sap/fe/core/templating/DataModelPathHelper.ts +41 -31
  337. package/src/sap/fe/core/templating/DisplayModeFormatter.js +8 -15
  338. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +7 -7
  339. package/src/sap/fe/core/templating/EntitySetHelper.js +6 -31
  340. package/src/sap/fe/core/templating/FieldControlHelper.js +4 -21
  341. package/src/sap/fe/core/templating/FieldControlHelper.ts +1 -1
  342. package/src/sap/fe/core/templating/FilterHelper.js +40 -111
  343. package/src/sap/fe/core/templating/FilterHelper.ts +20 -16
  344. package/src/sap/fe/core/templating/FilterTemplating.js +1 -19
  345. package/src/sap/fe/core/templating/FilterTemplating.ts +1 -1
  346. package/src/sap/fe/core/templating/PropertyFormatters.js +1 -34
  347. package/src/sap/fe/core/templating/PropertyHelper.js +120 -163
  348. package/src/sap/fe/core/templating/PropertyHelper.ts +69 -33
  349. package/src/sap/fe/core/templating/SemanticObjectHelper.js +46 -0
  350. package/src/sap/fe/core/templating/SemanticObjectHelper.ts +34 -0
  351. package/src/sap/fe/core/templating/UIFormatters.js +40 -180
  352. package/src/sap/fe/core/templating/UIFormatters.ts +37 -43
  353. package/src/sap/fe/core/type/DateTimeWithTimezone.js +3 -14
  354. package/src/sap/fe/core/type/Email.js +1 -10
  355. package/src/sap/fe/core/type/TypeUtil.js +1 -11
  356. package/ui5.yaml +0 -1
  357. package/src/sap/fe/core/controls/ActionParameterDialogFieldValueHelp.fragment.xml +0 -35
  358. package/src/sap/fe/core/helpers/LRMessageStrip.js +0 -234
  359. package/src/sap/fe/core/helpers/LRMessageStrip.ts +0 -216
@@ -11,16 +11,13 @@ sap.ui.define(["sap/fe/core/converters/helpers/IssueManager", "sap/fe/macros/Com
11
11
  var IssueType = IssueManager.IssueType;
12
12
  var IssueSeverity = IssueManager.IssueSeverity;
13
13
  var IssueCategory = IssueManager.IssueCategory;
14
-
15
- var getVisualizationsFromPresentationVariant = function (presentationVariantAnnotation, visualizationPath, converterContext) {
14
+ var getVisualizationsFromPresentationVariant = function (presentationVariantAnnotation, visualizationPath, converterContext, isMacroOrMultipleView) {
16
15
  var visualizationAnnotations = [];
17
16
  var bIsALP = converterContext.getManifestWrapper().hasMultipleVisualizations() || converterContext.getTemplateType() === TemplateType.AnalyticalListPage;
18
17
  var baseVisualizationPath = visualizationPath.split("@")[0];
19
-
20
- if (!isPresentationCompliant(presentationVariantAnnotation, bIsALP)) {
18
+ if (isMacroOrMultipleView && !isPresentationCompliant(presentationVariantAnnotation, bIsALP)) {
21
19
  var entityType = converterContext.getEntityType();
22
20
  var defaultLineItemAnnotation = getDefaultLineItem(entityType);
23
-
24
21
  if (defaultLineItemAnnotation) {
25
22
  visualizationAnnotations.push({
26
23
  visualization: defaultLineItemAnnotation,
@@ -28,43 +25,36 @@ sap.ui.define(["sap/fe/core/converters/helpers/IssueManager", "sap/fe/macros/Com
28
25
  converterContext: converterContext
29
26
  });
30
27
  }
31
- } else {
32
- var visualizations = presentationVariantAnnotation.Visualizations;
33
-
34
- var pushFirstVizOfType = function (allowedTerms) {
35
- var firstViz = visualizations.find(function (viz) {
36
- return allowedTerms.indexOf(viz.$target.term) >= 0;
28
+ }
29
+ var visualizations = presentationVariantAnnotation.Visualizations;
30
+ var pushFirstVizOfType = function (allowedTerms) {
31
+ var firstViz = visualizations === null || visualizations === void 0 ? void 0 : visualizations.find(function (viz) {
32
+ var _viz$$target;
33
+ return allowedTerms.indexOf((_viz$$target = viz.$target) === null || _viz$$target === void 0 ? void 0 : _viz$$target.term) >= 0;
34
+ });
35
+ if (firstViz) {
36
+ visualizationAnnotations.push({
37
+ visualization: firstViz.$target,
38
+ annotationPath: "".concat(baseVisualizationPath).concat(firstViz.value),
39
+ converterContext: converterContext
37
40
  });
38
-
39
- if (firstViz) {
40
- visualizationAnnotations.push({
41
- visualization: firstViz.$target,
42
- annotationPath: "".concat(baseVisualizationPath).concat(firstViz.value),
43
- converterContext: converterContext
44
- });
45
- }
46
- };
47
-
48
- if (bIsALP) {
49
- // In case of ALP, we use the first LineItem and the first Chart
50
- pushFirstVizOfType(["com.sap.vocabularies.UI.v1.LineItem"]);
51
- pushFirstVizOfType(["com.sap.vocabularies.UI.v1.Chart"]);
52
- } else {
53
- // Otherwise, we use the first viz only (Chart or LineItem)
54
- pushFirstVizOfType(["com.sap.vocabularies.UI.v1.LineItem", "com.sap.vocabularies.UI.v1.Chart"]);
55
41
  }
42
+ };
43
+ if (bIsALP) {
44
+ // In case of ALP, we use the first LineItem and the first Chart
45
+ pushFirstVizOfType(["com.sap.vocabularies.UI.v1.LineItem"]);
46
+ pushFirstVizOfType(["com.sap.vocabularies.UI.v1.Chart"]);
47
+ } else {
48
+ // Otherwise, we use the first viz only (Chart or LineItem)
49
+ pushFirstVizOfType(["com.sap.vocabularies.UI.v1.LineItem", "com.sap.vocabularies.UI.v1.Chart"]);
56
50
  }
57
-
58
51
  return visualizationAnnotations;
59
52
  };
60
-
61
53
  _exports.getVisualizationsFromPresentationVariant = getVisualizationsFromPresentationVariant;
62
-
63
54
  function getSelectionPresentationVariant(entityType, annotationPath, converterContext) {
64
55
  if (annotationPath) {
65
56
  var resolvedTarget = converterContext.getEntityTypeAnnotation(annotationPath);
66
57
  var selectionPresentationVariant = resolvedTarget.annotation;
67
-
68
58
  if (selectionPresentationVariant) {
69
59
  if (selectionPresentationVariant.term === "com.sap.vocabularies.UI.v1.SelectionPresentationVariant") {
70
60
  return selectionPresentationVariant;
@@ -74,94 +64,71 @@ sap.ui.define(["sap/fe/core/converters/helpers/IssueManager", "sap/fe/macros/Com
74
64
  }
75
65
  } else {
76
66
  var _entityType$annotatio, _entityType$annotatio2;
77
-
78
67
  return (_entityType$annotatio = entityType.annotations) === null || _entityType$annotatio === void 0 ? void 0 : (_entityType$annotatio2 = _entityType$annotatio.UI) === null || _entityType$annotatio2 === void 0 ? void 0 : _entityType$annotatio2.SelectionPresentationVariant;
79
68
  }
80
69
  }
81
-
82
70
  _exports.getSelectionPresentationVariant = getSelectionPresentationVariant;
83
-
84
71
  function isSelectionPresentationCompliant(SelectionPresentationVariant, bIsALP) {
85
72
  var presentationVariant = SelectionPresentationVariant && SelectionPresentationVariant.PresentationVariant;
86
-
87
73
  if (presentationVariant) {
88
74
  return isPresentationCompliant(presentationVariant, bIsALP);
89
75
  } else {
90
76
  throw new Error("Presentation Variant is not present in the SPV annotation");
91
77
  }
92
78
  }
93
-
94
79
  _exports.isSelectionPresentationCompliant = isSelectionPresentationCompliant;
95
-
96
80
  function isPresentationCompliant(presentationVariant) {
97
81
  var bIsALP = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
98
82
  var bHasTable = false,
99
- bHasChart = false;
100
-
83
+ bHasChart = false;
101
84
  if (bIsALP) {
102
85
  if (presentationVariant !== null && presentationVariant !== void 0 && presentationVariant.Visualizations) {
103
86
  var aVisualizations = presentationVariant.Visualizations;
104
87
  aVisualizations.forEach(function (oVisualization) {
105
- if (oVisualization.$target.term === "com.sap.vocabularies.UI.v1.LineItem") {
88
+ var _oVisualization$$targ, _oVisualization$$targ2;
89
+ if (((_oVisualization$$targ = oVisualization.$target) === null || _oVisualization$$targ === void 0 ? void 0 : _oVisualization$$targ.term) === "com.sap.vocabularies.UI.v1.LineItem") {
106
90
  bHasTable = true;
107
91
  }
108
-
109
- if (oVisualization.$target.term === "com.sap.vocabularies.UI.v1.Chart") {
92
+ if (((_oVisualization$$targ2 = oVisualization.$target) === null || _oVisualization$$targ2 === void 0 ? void 0 : _oVisualization$$targ2.term) === "com.sap.vocabularies.UI.v1.Chart") {
110
93
  bHasChart = true;
111
94
  }
112
95
  });
113
96
  }
114
-
115
97
  return bHasChart && bHasTable;
116
98
  } else {
117
99
  return (presentationVariant === null || presentationVariant === void 0 ? void 0 : presentationVariant.Visualizations) && !!presentationVariant.Visualizations.find(function (visualization) {
118
- return visualization.$target.term === "com.sap.vocabularies.UI.v1.LineItem" || visualization.$target.term === "com.sap.vocabularies.UI.v1.Chart";
100
+ var _visualization$$targe, _visualization$$targe2;
101
+ return ((_visualization$$targe = visualization.$target) === null || _visualization$$targe === void 0 ? void 0 : _visualization$$targe.term) === "com.sap.vocabularies.UI.v1.LineItem" || ((_visualization$$targe2 = visualization.$target) === null || _visualization$$targe2 === void 0 ? void 0 : _visualization$$targe2.term) === "com.sap.vocabularies.UI.v1.Chart";
119
102
  });
120
103
  }
121
104
  }
122
-
123
105
  _exports.isPresentationCompliant = isPresentationCompliant;
124
-
125
106
  function getDefaultLineItem(entityType) {
126
107
  var _entityType$annotatio3;
127
-
128
108
  return (_entityType$annotatio3 = entityType.annotations.UI) === null || _entityType$annotatio3 === void 0 ? void 0 : _entityType$annotatio3.LineItem;
129
109
  }
130
-
131
110
  _exports.getDefaultLineItem = getDefaultLineItem;
132
-
133
111
  function getDefaultChart(entityType) {
134
112
  var _entityType$annotatio4;
135
-
136
113
  return (_entityType$annotatio4 = entityType.annotations.UI) === null || _entityType$annotatio4 === void 0 ? void 0 : _entityType$annotatio4.Chart;
137
114
  }
138
-
139
115
  _exports.getDefaultChart = getDefaultChart;
140
-
141
116
  function getDefaultPresentationVariant(entityType) {
142
117
  var _entityType$annotatio5, _entityType$annotatio6;
143
-
144
118
  return (_entityType$annotatio5 = entityType.annotations) === null || _entityType$annotatio5 === void 0 ? void 0 : (_entityType$annotatio6 = _entityType$annotatio5.UI) === null || _entityType$annotatio6 === void 0 ? void 0 : _entityType$annotatio6.PresentationVariant;
145
119
  }
146
-
147
120
  _exports.getDefaultPresentationVariant = getDefaultPresentationVariant;
148
-
149
121
  function getDefaultSelectionVariant(entityType) {
150
122
  var _entityType$annotatio7, _entityType$annotatio8;
151
-
152
123
  return (_entityType$annotatio7 = entityType.annotations) === null || _entityType$annotatio7 === void 0 ? void 0 : (_entityType$annotatio8 = _entityType$annotatio7.UI) === null || _entityType$annotatio8 === void 0 ? void 0 : _entityType$annotatio8.SelectionVariant;
153
124
  }
154
-
155
125
  _exports.getDefaultSelectionVariant = getDefaultSelectionVariant;
156
-
157
126
  function getSelectionVariant(entityType, converterContext) {
158
127
  var annotationPath = converterContext.getManifestWrapper().getDefaultTemplateAnnotationPath();
159
128
  var selectionPresentationVariant = getSelectionPresentationVariant(entityType, annotationPath, converterContext);
160
129
  var selectionVariant;
161
-
162
130
  if (selectionPresentationVariant) {
163
131
  selectionVariant = selectionPresentationVariant.SelectionVariant;
164
-
165
132
  if (selectionVariant) {
166
133
  return selectionVariant;
167
134
  }
@@ -170,10 +137,8 @@ sap.ui.define(["sap/fe/core/converters/helpers/IssueManager", "sap/fe/macros/Com
170
137
  return selectionVariant;
171
138
  }
172
139
  }
173
-
174
140
  _exports.getSelectionVariant = getSelectionVariant;
175
-
176
- function getDataVisualizationConfiguration(visualizationPath, isCondensedTableLayoutCompliant, inConverterContext, viewConfiguration, doNotCheckApplySupported, associatedPresentationVariantPath) {
141
+ function getDataVisualizationConfiguration(visualizationPath, isCondensedTableLayoutCompliant, inConverterContext, viewConfiguration, doNotCheckApplySupported, associatedPresentationVariantPath, isMacroOrMultipleView) {
177
142
  var resolvedTarget = visualizationPath !== "" ? inConverterContext.getEntityTypeAnnotation(visualizationPath) : {
178
143
  annotation: undefined,
179
144
  converterContext: inConverterContext
@@ -186,7 +151,6 @@ sap.ui.define(["sap/fe/core/converters/helpers/IssueManager", "sap/fe/macros/Com
186
151
  var presentationPath = "";
187
152
  var chartVisualization, tableVisualization;
188
153
  var sTerm = resolvedVisualization === null || resolvedVisualization === void 0 ? void 0 : resolvedVisualization.term;
189
-
190
154
  if (sTerm) {
191
155
  switch (sTerm) {
192
156
  case "com.sap.vocabularies.UI.v1.LineItem":
@@ -198,33 +162,27 @@ sap.ui.define(["sap/fe/core/converters/helpers/IssueManager", "sap/fe/macros/Com
198
162
  converterContext: inConverterContext
199
163
  });
200
164
  break;
201
-
202
165
  case "com.sap.vocabularies.UI.v1.PresentationVariant":
203
166
  presentationVariantAnnotation = resolvedVisualization;
204
- visualizationAnnotations = visualizationAnnotations.concat(getVisualizationsFromPresentationVariant(resolvedVisualization, visualizationPath, inConverterContext));
167
+ visualizationAnnotations = visualizationAnnotations.concat(getVisualizationsFromPresentationVariant(resolvedVisualization, visualizationPath, inConverterContext, isMacroOrMultipleView));
205
168
  break;
206
-
207
169
  case "com.sap.vocabularies.UI.v1.SelectionPresentationVariant":
208
- presentationVariantAnnotation = resolvedVisualization.PresentationVariant; // Presentation can be inline or outside the SelectionPresentationVariant
209
-
170
+ presentationVariantAnnotation = resolvedVisualization.PresentationVariant;
171
+ // Presentation can be inline or outside the SelectionPresentationVariant
210
172
  presentationPath = presentationVariantAnnotation.fullyQualifiedName;
211
- visualizationAnnotations = visualizationAnnotations.concat(getVisualizationsFromPresentationVariant(presentationVariantAnnotation, visualizationPath, inConverterContext));
173
+ visualizationAnnotations = visualizationAnnotations.concat(getVisualizationsFromPresentationVariant(presentationVariantAnnotation, visualizationPath, inConverterContext, isMacroOrMultipleView));
212
174
  break;
213
-
214
175
  default:
215
176
  break;
216
177
  }
217
-
218
178
  visualizationAnnotations.forEach(function (visualizationAnnotation) {
219
179
  var visualization = visualizationAnnotation.visualization,
220
- annotationPath = visualizationAnnotation.annotationPath,
221
- converterContext = visualizationAnnotation.converterContext;
222
-
180
+ annotationPath = visualizationAnnotation.annotationPath,
181
+ converterContext = visualizationAnnotation.converterContext;
223
182
  switch (visualization.term) {
224
183
  case "com.sap.vocabularies.UI.v1.Chart":
225
184
  chartVisualization = createChartVisualization(visualization, annotationPath, converterContext, doNotCheckApplySupported);
226
185
  break;
227
-
228
186
  case "com.sap.vocabularies.UI.v1.LineItem":
229
187
  default:
230
188
  tableVisualization = Table.createTableVisualization(visualization, annotationPath, converterContext, presentationVariantAnnotation, isCondensedTableLayoutCompliant, viewConfiguration);
@@ -232,30 +190,26 @@ sap.ui.define(["sap/fe/core/converters/helpers/IssueManager", "sap/fe/macros/Com
232
190
  }
233
191
  });
234
192
  } else {
235
- tableVisualization = Table.createDefaultTableVisualization(inConverterContext);
193
+ tableVisualization = Table.createDefaultTableVisualization(inConverterContext, !isMacroOrMultipleView);
236
194
  inConverterContext.getDiagnostics().addIssue(IssueCategory.Annotation, IssueSeverity.Medium, IssueType.MISSING_LINEITEM);
237
195
  }
238
-
239
196
  var aVisualizations = [];
240
197
  var sPath = sTerm === "com.sap.vocabularies.UI.v1.SelectionPresentationVariant" ? presentationPath : resolvedVisualization && resolvedVisualization.fullyQualifiedName;
241
-
242
198
  if (sPath === undefined) {
243
199
  sPath = "/";
244
200
  }
245
-
246
201
  if (chartVisualization) {
247
202
  aVisualizations.push(chartVisualization);
248
203
  }
249
-
250
204
  if (tableVisualization) {
251
205
  aVisualizations.push(tableVisualization);
252
206
  }
253
-
254
207
  return {
255
208
  visualizations: aVisualizations,
256
209
  annotationPath: inConverterContext.getEntitySetBasedAnnotationPath(sPath)
257
210
  };
258
211
  }
212
+
259
213
  /**
260
214
  * Return UI Control (LineItem/Chart) Context.
261
215
  *
@@ -265,19 +219,14 @@ sap.ui.define(["sap/fe/core/converters/helpers/IssueManager", "sap/fe/macros/Com
265
219
  * @param sControlPath Control path
266
220
  * @returns The Control (LineItem/Chart) context
267
221
  */
268
-
269
-
270
222
  _exports.getDataVisualizationConfiguration = getDataVisualizationConfiguration;
271
-
272
223
  function getUiControl(oPresentationContext, sControlPath) {
273
224
  var oPresentation = oPresentationContext.getObject(oPresentationContext.getPath()),
274
- oPresentationVariantPath = CommonHelper.createPresentationPathContext(oPresentationContext),
275
- oModel = oPresentationContext.getModel();
276
-
225
+ oPresentationVariantPath = CommonHelper.createPresentationPathContext(oPresentationContext),
226
+ oModel = oPresentationContext.getModel();
277
227
  if (CommonHelper._isPresentationVariantAnnotation(oPresentationVariantPath.getPath())) {
278
228
  // Uncomplete PresentationVariant can be passed to macro via SelectionPresentationVariant
279
229
  var aVisualizations = oPresentation.Visualizations;
280
-
281
230
  if (Array.isArray(aVisualizations)) {
282
231
  for (var i = 0; i < aVisualizations.length; i++) {
283
232
  if (aVisualizations[i].$AnnotationPath.indexOf(sControlPath) !== -1) {
@@ -286,14 +235,11 @@ sap.ui.define(["sap/fe/core/converters/helpers/IssueManager", "sap/fe/macros/Com
286
235
  }
287
236
  }
288
237
  }
289
-
290
238
  return oModel.getMetaContext(oPresentationContext.getPath().split("@")[0] + sControlPath);
291
239
  }
292
-
293
240
  return oPresentationContext;
294
241
  }
295
-
296
242
  _exports.getUiControl = getUiControl;
297
243
  return _exports;
298
244
  }, false);
299
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRWaXN1YWxpemF0aW9uc0Zyb21QcmVzZW50YXRpb25WYXJpYW50IiwicHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24iLCJ2aXN1YWxpemF0aW9uUGF0aCIsImNvbnZlcnRlckNvbnRleHQiLCJ2aXN1YWxpemF0aW9uQW5ub3RhdGlvbnMiLCJiSXNBTFAiLCJnZXRNYW5pZmVzdFdyYXBwZXIiLCJoYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zIiwiZ2V0VGVtcGxhdGVUeXBlIiwiVGVtcGxhdGVUeXBlIiwiQW5hbHl0aWNhbExpc3RQYWdlIiwiYmFzZVZpc3VhbGl6YXRpb25QYXRoIiwic3BsaXQiLCJpc1ByZXNlbnRhdGlvbkNvbXBsaWFudCIsImVudGl0eVR5cGUiLCJnZXRFbnRpdHlUeXBlIiwiZGVmYXVsdExpbmVJdGVtQW5ub3RhdGlvbiIsImdldERlZmF1bHRMaW5lSXRlbSIsInB1c2giLCJ2aXN1YWxpemF0aW9uIiwiYW5ub3RhdGlvblBhdGgiLCJnZXRSZWxhdGl2ZUFubm90YXRpb25QYXRoIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwidmlzdWFsaXphdGlvbnMiLCJWaXN1YWxpemF0aW9ucyIsInB1c2hGaXJzdFZpek9mVHlwZSIsImFsbG93ZWRUZXJtcyIsImZpcnN0Vml6IiwiZmluZCIsInZpeiIsImluZGV4T2YiLCIkdGFyZ2V0IiwidGVybSIsInZhbHVlIiwiZ2V0U2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCIsInJlc29sdmVkVGFyZ2V0IiwiZ2V0RW50aXR5VHlwZUFubm90YXRpb24iLCJzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50IiwiYW5ub3RhdGlvbiIsIkVycm9yIiwiYW5ub3RhdGlvbnMiLCJVSSIsIlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQiLCJpc1NlbGVjdGlvblByZXNlbnRhdGlvbkNvbXBsaWFudCIsInByZXNlbnRhdGlvblZhcmlhbnQiLCJQcmVzZW50YXRpb25WYXJpYW50IiwiYkhhc1RhYmxlIiwiYkhhc0NoYXJ0IiwiYVZpc3VhbGl6YXRpb25zIiwiZm9yRWFjaCIsIm9WaXN1YWxpemF0aW9uIiwiTGluZUl0ZW0iLCJnZXREZWZhdWx0Q2hhcnQiLCJDaGFydCIsImdldERlZmF1bHRQcmVzZW50YXRpb25WYXJpYW50IiwiZ2V0RGVmYXVsdFNlbGVjdGlvblZhcmlhbnQiLCJTZWxlY3Rpb25WYXJpYW50IiwiZ2V0U2VsZWN0aW9uVmFyaWFudCIsImdldERlZmF1bHRUZW1wbGF0ZUFubm90YXRpb25QYXRoIiwic2VsZWN0aW9uVmFyaWFudCIsImdldERhdGFWaXN1YWxpemF0aW9uQ29uZmlndXJhdGlvbiIsImlzQ29uZGVuc2VkVGFibGVMYXlvdXRDb21wbGlhbnQiLCJpbkNvbnZlcnRlckNvbnRleHQiLCJ2aWV3Q29uZmlndXJhdGlvbiIsImRvTm90Q2hlY2tBcHBseVN1cHBvcnRlZCIsImFzc29jaWF0ZWRQcmVzZW50YXRpb25WYXJpYW50UGF0aCIsInVuZGVmaW5lZCIsInJlc29sdmVkQXNzb2NpYXRlZFByZXNlbnRhdGlvblZhcmlhbnQiLCJyZXNvbHZlZFZpc3VhbGl6YXRpb24iLCJwcmVzZW50YXRpb25QYXRoIiwiY2hhcnRWaXN1YWxpemF0aW9uIiwidGFibGVWaXN1YWxpemF0aW9uIiwic1Rlcm0iLCJjb25jYXQiLCJ2aXN1YWxpemF0aW9uQW5ub3RhdGlvbiIsImNyZWF0ZUNoYXJ0VmlzdWFsaXphdGlvbiIsIlRhYmxlIiwiY3JlYXRlVGFibGVWaXN1YWxpemF0aW9uIiwiY3JlYXRlRGVmYXVsdFRhYmxlVmlzdWFsaXphdGlvbiIsImdldERpYWdub3N0aWNzIiwiYWRkSXNzdWUiLCJJc3N1ZUNhdGVnb3J5IiwiQW5ub3RhdGlvbiIsIklzc3VlU2V2ZXJpdHkiLCJNZWRpdW0iLCJJc3N1ZVR5cGUiLCJNSVNTSU5HX0xJTkVJVEVNIiwic1BhdGgiLCJnZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoIiwiZ2V0VWlDb250cm9sIiwib1ByZXNlbnRhdGlvbkNvbnRleHQiLCJzQ29udHJvbFBhdGgiLCJvUHJlc2VudGF0aW9uIiwiZ2V0T2JqZWN0IiwiZ2V0UGF0aCIsIm9QcmVzZW50YXRpb25WYXJpYW50UGF0aCIsIkNvbW1vbkhlbHBlciIsImNyZWF0ZVByZXNlbnRhdGlvblBhdGhDb250ZXh0Iiwib01vZGVsIiwiZ2V0TW9kZWwiLCJfaXNQcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiIsIkFycmF5IiwiaXNBcnJheSIsImkiLCJsZW5ndGgiLCIkQW5ub3RhdGlvblBhdGgiLCJnZXRNZXRhQ29udGV4dCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRGF0YVZpc3VhbGl6YXRpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBFbnRpdHlUeXBlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7XG5cdENoYXJ0LFxuXHRMaW5lSXRlbSxcblx0UHJlc2VudGF0aW9uVmFyaWFudCxcblx0UHJlc2VudGF0aW9uVmFyaWFudFR5cGUsXG5cdFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQsXG5cdFNlbGVjdGlvblZhcmlhbnRcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgVUlBbm5vdGF0aW9uVGVybXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBJc3N1ZUNhdGVnb3J5LCBJc3N1ZVNldmVyaXR5LCBJc3N1ZVR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0lzc3VlTWFuYWdlclwiO1xuaW1wb3J0IENvbW1vbkhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9Db21tb25IZWxwZXJcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgQ29udmVydGVyQ29udGV4dCBmcm9tIFwiLi4vLi4vQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBWaWV3UGF0aENvbmZpZ3VyYXRpb24gfSBmcm9tIFwiLi4vLi4vTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHsgVGVtcGxhdGVUeXBlIH0gZnJvbSBcIi4uLy4uL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB0eXBlIHsgQ2hhcnRWaXN1YWxpemF0aW9uIH0gZnJvbSBcIi4vQ2hhcnRcIjtcbmltcG9ydCB7IGNyZWF0ZUNoYXJ0VmlzdWFsaXphdGlvbiB9IGZyb20gXCIuL0NoYXJ0XCI7XG5pbXBvcnQgdHlwZSB7IFRhYmxlVmlzdWFsaXphdGlvbiB9IGZyb20gXCIuL1RhYmxlXCI7XG5pbXBvcnQgVGFibGUgZnJvbSBcIi4vVGFibGVcIjtcblxuZXhwb3J0IHR5cGUgRGF0YVZpc3VhbGl6YXRpb25Bbm5vdGF0aW9ucyA9IExpbmVJdGVtIHwgQ2hhcnQgfCBQcmVzZW50YXRpb25WYXJpYW50IHwgU2VsZWN0aW9uVmFyaWFudCB8IFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQ7XG5cbmV4cG9ydCB0eXBlIEFjdHVhbFZpc3VhbGl6YXRpb25Bbm5vdGF0aW9ucyA9IExpbmVJdGVtIHwgQ2hhcnQ7XG5cbmV4cG9ydCB0eXBlIFZpc3VhbGl6YXRpb25BbmRQYXRoID0ge1xuXHR2aXN1YWxpemF0aW9uOiBBY3R1YWxWaXN1YWxpemF0aW9uQW5ub3RhdGlvbnM7XG5cdGFubm90YXRpb25QYXRoOiBzdHJpbmc7XG5cdHNlbGVjdGlvblZhcmlhbnRQYXRoPzogc3RyaW5nO1xuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0O1xufTtcblxuZXhwb3J0IHR5cGUgRGF0YVZpc3VhbGl6YXRpb25EZWZpbml0aW9uID0ge1xuXHR2aXN1YWxpemF0aW9uczogKFRhYmxlVmlzdWFsaXphdGlvbiB8IENoYXJ0VmlzdWFsaXphdGlvbilbXTtcblx0YW5ub3RhdGlvblBhdGg6IHN0cmluZztcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRWaXN1YWxpemF0aW9uc0Zyb21QcmVzZW50YXRpb25WYXJpYW50ID0gZnVuY3Rpb24gKFxuXHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbjogUHJlc2VudGF0aW9uVmFyaWFudFR5cGUsXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IFZpc3VhbGl6YXRpb25BbmRQYXRoW10ge1xuXHRjb25zdCB2aXN1YWxpemF0aW9uQW5ub3RhdGlvbnM6IFZpc3VhbGl6YXRpb25BbmRQYXRoW10gPSBbXTtcblxuXHRjb25zdCBiSXNBTFAgPVxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucygpIHx8XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZTtcblxuXHRjb25zdCBiYXNlVmlzdWFsaXphdGlvblBhdGggPSB2aXN1YWxpemF0aW9uUGF0aC5zcGxpdChcIkBcIilbMF07XG5cblx0aWYgKCFpc1ByZXNlbnRhdGlvbkNvbXBsaWFudChwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiwgYklzQUxQKSkge1xuXHRcdGNvbnN0IGVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblx0XHRjb25zdCBkZWZhdWx0TGluZUl0ZW1Bbm5vdGF0aW9uID0gZ2V0RGVmYXVsdExpbmVJdGVtKGVudGl0eVR5cGUpO1xuXHRcdGlmIChkZWZhdWx0TGluZUl0ZW1Bbm5vdGF0aW9uKSB7XG5cdFx0XHR2aXN1YWxpemF0aW9uQW5ub3RhdGlvbnMucHVzaCh7XG5cdFx0XHRcdHZpc3VhbGl6YXRpb246IGRlZmF1bHRMaW5lSXRlbUFubm90YXRpb24sXG5cdFx0XHRcdGFubm90YXRpb25QYXRoOiBgJHtiYXNlVmlzdWFsaXphdGlvblBhdGh9JHtjb252ZXJ0ZXJDb250ZXh0LmdldFJlbGF0aXZlQW5ub3RhdGlvblBhdGgoXG5cdFx0XHRcdFx0ZGVmYXVsdExpbmVJdGVtQW5ub3RhdGlvbi5mdWxseVF1YWxpZmllZE5hbWUsXG5cdFx0XHRcdFx0ZW50aXR5VHlwZVxuXHRcdFx0XHQpfWAsXG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHQ6IGNvbnZlcnRlckNvbnRleHRcblx0XHRcdH0pO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRjb25zdCB2aXN1YWxpemF0aW9ucyA9IHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLlZpc3VhbGl6YXRpb25zO1xuXG5cdFx0Y29uc3QgcHVzaEZpcnN0Vml6T2ZUeXBlID0gZnVuY3Rpb24gKGFsbG93ZWRUZXJtczogc3RyaW5nW10pIHtcblx0XHRcdGNvbnN0IGZpcnN0Vml6ID0gdmlzdWFsaXphdGlvbnMuZmluZCgodml6KSA9PiB7XG5cdFx0XHRcdHJldHVybiBhbGxvd2VkVGVybXMuaW5kZXhPZih2aXouJHRhcmdldC50ZXJtKSA+PSAwO1xuXHRcdFx0fSk7XG5cblx0XHRcdGlmIChmaXJzdFZpeikge1xuXHRcdFx0XHR2aXN1YWxpemF0aW9uQW5ub3RhdGlvbnMucHVzaCh7XG5cdFx0XHRcdFx0dmlzdWFsaXphdGlvbjogZmlyc3RWaXouJHRhcmdldCBhcyBBY3R1YWxWaXN1YWxpemF0aW9uQW5ub3RhdGlvbnMsXG5cdFx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IGAke2Jhc2VWaXN1YWxpemF0aW9uUGF0aH0ke2ZpcnN0Vml6LnZhbHVlfWAsXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dDogY29udmVydGVyQ29udGV4dFxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0aWYgKGJJc0FMUCkge1xuXHRcdFx0Ly8gSW4gY2FzZSBvZiBBTFAsIHdlIHVzZSB0aGUgZmlyc3QgTGluZUl0ZW0gYW5kIHRoZSBmaXJzdCBDaGFydFxuXHRcdFx0cHVzaEZpcnN0Vml6T2ZUeXBlKFtVSUFubm90YXRpb25UZXJtcy5MaW5lSXRlbV0pO1xuXHRcdFx0cHVzaEZpcnN0Vml6T2ZUeXBlKFtVSUFubm90YXRpb25UZXJtcy5DaGFydF0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBPdGhlcndpc2UsIHdlIHVzZSB0aGUgZmlyc3Qgdml6IG9ubHkgKENoYXJ0IG9yIExpbmVJdGVtKVxuXHRcdFx0cHVzaEZpcnN0Vml6T2ZUeXBlKFtVSUFubm90YXRpb25UZXJtcy5MaW5lSXRlbSwgVUlBbm5vdGF0aW9uVGVybXMuQ2hhcnRdKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHZpc3VhbGl6YXRpb25Bbm5vdGF0aW9ucztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50KFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRhbm5vdGF0aW9uUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiBhbnkge1xuXHRpZiAoYW5ub3RhdGlvblBhdGgpIHtcblx0XHRjb25zdCByZXNvbHZlZFRhcmdldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZUFubm90YXRpb24oYW5ub3RhdGlvblBhdGgpO1xuXHRcdGNvbnN0IHNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQgPSByZXNvbHZlZFRhcmdldC5hbm5vdGF0aW9uIGFzIFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQ7XG5cdFx0aWYgKHNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQpIHtcblx0XHRcdGlmIChzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50LnRlcm0gPT09IFVJQW5ub3RhdGlvblRlcm1zLlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQpIHtcblx0XHRcdFx0cmV0dXJuIHNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQ7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIkFubm90YXRpb24gUGF0aCBmb3IgdGhlIFNQViBtZW50aW9uZWQgaW4gdGhlIG1hbmlmZXN0IGlzIG5vdCBmb3VuZCwgUGxlYXNlIGFkZCB0aGUgU1BWIGluIHRoZSBhbm5vdGF0aW9uXCIpO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gZW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uVUk/LlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQ7XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU2VsZWN0aW9uUHJlc2VudGF0aW9uQ29tcGxpYW50KFxuXHRTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50OiBTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50LFxuXHRiSXNBTFA6IGJvb2xlYW5cbik6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuXHRjb25zdCBwcmVzZW50YXRpb25WYXJpYW50ID0gU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCAmJiBTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50LlByZXNlbnRhdGlvblZhcmlhbnQ7XG5cdGlmIChwcmVzZW50YXRpb25WYXJpYW50KSB7XG5cdFx0cmV0dXJuIGlzUHJlc2VudGF0aW9uQ29tcGxpYW50KHByZXNlbnRhdGlvblZhcmlhbnQsIGJJc0FMUCk7XG5cdH0gZWxzZSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiUHJlc2VudGF0aW9uIFZhcmlhbnQgaXMgbm90IHByZXNlbnQgaW4gdGhlIFNQViBhbm5vdGF0aW9uXCIpO1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1ByZXNlbnRhdGlvbkNvbXBsaWFudChwcmVzZW50YXRpb25WYXJpYW50OiBQcmVzZW50YXRpb25WYXJpYW50VHlwZSwgYklzQUxQID0gZmFsc2UpOiBib29sZWFuIHtcblx0bGV0IGJIYXNUYWJsZSA9IGZhbHNlLFxuXHRcdGJIYXNDaGFydCA9IGZhbHNlO1xuXHRpZiAoYklzQUxQKSB7XG5cdFx0aWYgKHByZXNlbnRhdGlvblZhcmlhbnQ/LlZpc3VhbGl6YXRpb25zKSB7XG5cdFx0XHRjb25zdCBhVmlzdWFsaXphdGlvbnMgPSBwcmVzZW50YXRpb25WYXJpYW50LlZpc3VhbGl6YXRpb25zO1xuXHRcdFx0YVZpc3VhbGl6YXRpb25zLmZvckVhY2goKG9WaXN1YWxpemF0aW9uKSA9PiB7XG5cdFx0XHRcdGlmIChvVmlzdWFsaXphdGlvbi4kdGFyZ2V0LnRlcm0gPT09IFVJQW5ub3RhdGlvblRlcm1zLkxpbmVJdGVtKSB7XG5cdFx0XHRcdFx0Ykhhc1RhYmxlID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAob1Zpc3VhbGl6YXRpb24uJHRhcmdldC50ZXJtID09PSBVSUFubm90YXRpb25UZXJtcy5DaGFydCkge1xuXHRcdFx0XHRcdGJIYXNDaGFydCA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gYkhhc0NoYXJ0ICYmIGJIYXNUYWJsZTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0cHJlc2VudGF0aW9uVmFyaWFudD8uVmlzdWFsaXphdGlvbnMgJiZcblx0XHRcdCEhcHJlc2VudGF0aW9uVmFyaWFudC5WaXN1YWxpemF0aW9ucy5maW5kKCh2aXN1YWxpemF0aW9uKSA9PiB7XG5cdFx0XHRcdHJldHVybiB2aXN1YWxpemF0aW9uLiR0YXJnZXQudGVybSA9PT0gVUlBbm5vdGF0aW9uVGVybXMuTGluZUl0ZW0gfHwgdmlzdWFsaXphdGlvbi4kdGFyZ2V0LnRlcm0gPT09IFVJQW5ub3RhdGlvblRlcm1zLkNoYXJ0O1xuXHRcdFx0fSlcblx0XHQpO1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0TGluZUl0ZW0oZW50aXR5VHlwZTogRW50aXR5VHlwZSk6IExpbmVJdGVtIHwgdW5kZWZpbmVkIHtcblx0cmV0dXJuIGVudGl0eVR5cGUuYW5ub3RhdGlvbnMuVUk/LkxpbmVJdGVtO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHRDaGFydChlbnRpdHlUeXBlOiBFbnRpdHlUeXBlKTogQ2hhcnQgfCB1bmRlZmluZWQge1xuXHRyZXR1cm4gZW50aXR5VHlwZS5hbm5vdGF0aW9ucy5VST8uQ2hhcnQ7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdFByZXNlbnRhdGlvblZhcmlhbnQoZW50aXR5VHlwZTogRW50aXR5VHlwZSk6IFByZXNlbnRhdGlvblZhcmlhbnQgfCB1bmRlZmluZWQge1xuXHRyZXR1cm4gZW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uVUk/LlByZXNlbnRhdGlvblZhcmlhbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0U2VsZWN0aW9uVmFyaWFudChlbnRpdHlUeXBlOiBFbnRpdHlUeXBlKTogU2VsZWN0aW9uVmFyaWFudCB8IHVuZGVmaW5lZCB7XG5cdHJldHVybiBlbnRpdHlUeXBlLmFubm90YXRpb25zPy5VST8uU2VsZWN0aW9uVmFyaWFudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbGVjdGlvblZhcmlhbnQoZW50aXR5VHlwZTogRW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IFNlbGVjdGlvblZhcmlhbnQgfCB1bmRlZmluZWQge1xuXHRjb25zdCBhbm5vdGF0aW9uUGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuZ2V0RGVmYXVsdFRlbXBsYXRlQW5ub3RhdGlvblBhdGgoKTtcblx0Y29uc3Qgc2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCA9IGdldFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQoZW50aXR5VHlwZSwgYW5ub3RhdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRsZXQgc2VsZWN0aW9uVmFyaWFudDtcblx0aWYgKHNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQpIHtcblx0XHRzZWxlY3Rpb25WYXJpYW50ID0gc2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudC5TZWxlY3Rpb25WYXJpYW50O1xuXHRcdGlmIChzZWxlY3Rpb25WYXJpYW50KSB7XG5cdFx0XHRyZXR1cm4gc2VsZWN0aW9uVmFyaWFudDtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0c2VsZWN0aW9uVmFyaWFudCA9IGdldERlZmF1bHRTZWxlY3Rpb25WYXJpYW50KGVudGl0eVR5cGUpO1xuXHRcdHJldHVybiBzZWxlY3Rpb25WYXJpYW50O1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREYXRhVmlzdWFsaXphdGlvbkNvbmZpZ3VyYXRpb24oXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGlzQ29uZGVuc2VkVGFibGVMYXlvdXRDb21wbGlhbnQ6IGJvb2xlYW4sXG5cdGluQ29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0dmlld0NvbmZpZ3VyYXRpb24/OiBWaWV3UGF0aENvbmZpZ3VyYXRpb24sXG5cdGRvTm90Q2hlY2tBcHBseVN1cHBvcnRlZD86IGJvb2xlYW4sXG5cdGFzc29jaWF0ZWRQcmVzZW50YXRpb25WYXJpYW50UGF0aD86IHN0cmluZ1xuKTogRGF0YVZpc3VhbGl6YXRpb25EZWZpbml0aW9uIHtcblx0Y29uc3QgcmVzb2x2ZWRUYXJnZXQgPVxuXHRcdHZpc3VhbGl6YXRpb25QYXRoICE9PSBcIlwiXG5cdFx0XHQ/IGluQ29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbih2aXN1YWxpemF0aW9uUGF0aClcblx0XHRcdDogeyBhbm5vdGF0aW9uOiB1bmRlZmluZWQsIGNvbnZlcnRlckNvbnRleHQ6IGluQ29udmVydGVyQ29udGV4dCB9O1xuXHRjb25zdCByZXNvbHZlZEFzc29jaWF0ZWRQcmVzZW50YXRpb25WYXJpYW50ID0gYXNzb2NpYXRlZFByZXNlbnRhdGlvblZhcmlhbnRQYXRoXG5cdFx0PyBpbkNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZUFubm90YXRpb24oYXNzb2NpYXRlZFByZXNlbnRhdGlvblZhcmlhbnRQYXRoKVxuXHRcdDogbnVsbDtcblx0Y29uc3QgcmVzb2x2ZWRWaXN1YWxpemF0aW9uID0gcmVzb2x2ZWRUYXJnZXQuYW5ub3RhdGlvbiBhcyBEYXRhVmlzdWFsaXphdGlvbkFubm90YXRpb25zO1xuXHRpbkNvbnZlcnRlckNvbnRleHQgPSByZXNvbHZlZFRhcmdldC5jb252ZXJ0ZXJDb250ZXh0O1xuXHRsZXQgdmlzdWFsaXphdGlvbkFubm90YXRpb25zOiBWaXN1YWxpemF0aW9uQW5kUGF0aFtdID0gW107XG5cdGxldCBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbjogUHJlc2VudGF0aW9uVmFyaWFudFR5cGU7XG5cdGxldCBwcmVzZW50YXRpb25QYXRoOiBzdHJpbmcgPSBcIlwiO1xuXHRsZXQgY2hhcnRWaXN1YWxpemF0aW9uLCB0YWJsZVZpc3VhbGl6YXRpb247XG5cdGNvbnN0IHNUZXJtID0gcmVzb2x2ZWRWaXN1YWxpemF0aW9uPy50ZXJtO1xuXHRpZiAoc1Rlcm0pIHtcblx0XHRzd2l0Y2ggKHNUZXJtKSB7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLkxpbmVJdGVtOlxuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5DaGFydDpcblx0XHRcdFx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24gPSByZXNvbHZlZEFzc29jaWF0ZWRQcmVzZW50YXRpb25WYXJpYW50Py5hbm5vdGF0aW9uO1xuXHRcdFx0XHR2aXN1YWxpemF0aW9uQW5ub3RhdGlvbnMucHVzaCh7XG5cdFx0XHRcdFx0dmlzdWFsaXphdGlvbjogcmVzb2x2ZWRWaXN1YWxpemF0aW9uIGFzIEFjdHVhbFZpc3VhbGl6YXRpb25Bbm5vdGF0aW9ucyxcblx0XHRcdFx0XHRhbm5vdGF0aW9uUGF0aDogdmlzdWFsaXphdGlvblBhdGgsXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dDogaW5Db252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVGVybXMuUHJlc2VudGF0aW9uVmFyaWFudDpcblx0XHRcdFx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24gPSByZXNvbHZlZFZpc3VhbGl6YXRpb247XG5cdFx0XHRcdHZpc3VhbGl6YXRpb25Bbm5vdGF0aW9ucyA9IHZpc3VhbGl6YXRpb25Bbm5vdGF0aW9ucy5jb25jYXQoXG5cdFx0XHRcdFx0Z2V0VmlzdWFsaXphdGlvbnNGcm9tUHJlc2VudGF0aW9uVmFyaWFudChyZXNvbHZlZFZpc3VhbGl6YXRpb24sIHZpc3VhbGl6YXRpb25QYXRoLCBpbkNvbnZlcnRlckNvbnRleHQpXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50OlxuXHRcdFx0XHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiA9IHJlc29sdmVkVmlzdWFsaXphdGlvbi5QcmVzZW50YXRpb25WYXJpYW50O1xuXHRcdFx0XHQvLyBQcmVzZW50YXRpb24gY2FuIGJlIGlubGluZSBvciBvdXRzaWRlIHRoZSBTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50XG5cdFx0XHRcdHByZXNlbnRhdGlvblBhdGggPSBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbi5mdWxseVF1YWxpZmllZE5hbWU7XG5cdFx0XHRcdHZpc3VhbGl6YXRpb25Bbm5vdGF0aW9ucyA9IHZpc3VhbGl6YXRpb25Bbm5vdGF0aW9ucy5jb25jYXQoXG5cdFx0XHRcdFx0Z2V0VmlzdWFsaXphdGlvbnNGcm9tUHJlc2VudGF0aW9uVmFyaWFudChwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiwgdmlzdWFsaXphdGlvblBhdGgsIGluQ29udmVydGVyQ29udGV4dClcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHR2aXN1YWxpemF0aW9uQW5ub3RhdGlvbnMuZm9yRWFjaCgodmlzdWFsaXphdGlvbkFubm90YXRpb24pID0+IHtcblx0XHRcdGNvbnN0IHsgdmlzdWFsaXphdGlvbiwgYW5ub3RhdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQgfSA9IHZpc3VhbGl6YXRpb25Bbm5vdGF0aW9uO1xuXHRcdFx0c3dpdGNoICh2aXN1YWxpemF0aW9uLnRlcm0pIHtcblx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5DaGFydDpcblx0XHRcdFx0XHRjaGFydFZpc3VhbGl6YXRpb24gPSBjcmVhdGVDaGFydFZpc3VhbGl6YXRpb24oXG5cdFx0XHRcdFx0XHR2aXN1YWxpemF0aW9uLFxuXHRcdFx0XHRcdFx0YW5ub3RhdGlvblBhdGgsXG5cdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdFx0ZG9Ob3RDaGVja0FwcGx5U3VwcG9ydGVkXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5MaW5lSXRlbTpcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24gPSBUYWJsZS5jcmVhdGVUYWJsZVZpc3VhbGl6YXRpb24oXG5cdFx0XHRcdFx0XHR2aXN1YWxpemF0aW9uLFxuXHRcdFx0XHRcdFx0YW5ub3RhdGlvblBhdGgsXG5cdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdFx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24sXG5cdFx0XHRcdFx0XHRpc0NvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW50LFxuXHRcdFx0XHRcdFx0dmlld0NvbmZpZ3VyYXRpb25cblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdHRhYmxlVmlzdWFsaXphdGlvbiA9IFRhYmxlLmNyZWF0ZURlZmF1bHRUYWJsZVZpc3VhbGl6YXRpb24oaW5Db252ZXJ0ZXJDb250ZXh0KTtcblx0XHRpbkNvbnZlcnRlckNvbnRleHQuZ2V0RGlhZ25vc3RpY3MoKS5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sIElzc3VlU2V2ZXJpdHkuTWVkaXVtLCBJc3N1ZVR5cGUuTUlTU0lOR19MSU5FSVRFTSk7XG5cdH1cblx0Y29uc3QgYVZpc3VhbGl6YXRpb25zOiBhbnkgPSBbXTtcblx0bGV0IHNQYXRoID1cblx0XHRzVGVybSA9PT0gVUlBbm5vdGF0aW9uVGVybXMuU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFxuXHRcdFx0PyBwcmVzZW50YXRpb25QYXRoXG5cdFx0XHQ6IHJlc29sdmVkVmlzdWFsaXphdGlvbiAmJiByZXNvbHZlZFZpc3VhbGl6YXRpb24uZnVsbHlRdWFsaWZpZWROYW1lO1xuXHRpZiAoc1BhdGggPT09IHVuZGVmaW5lZCkge1xuXHRcdHNQYXRoID0gXCIvXCI7XG5cdH1cblx0aWYgKGNoYXJ0VmlzdWFsaXphdGlvbikge1xuXHRcdGFWaXN1YWxpemF0aW9ucy5wdXNoKGNoYXJ0VmlzdWFsaXphdGlvbik7XG5cdH1cblx0aWYgKHRhYmxlVmlzdWFsaXphdGlvbikge1xuXHRcdGFWaXN1YWxpemF0aW9ucy5wdXNoKHRhYmxlVmlzdWFsaXphdGlvbik7XG5cdH1cblx0cmV0dXJuIHtcblx0XHR2aXN1YWxpemF0aW9uczogYVZpc3VhbGl6YXRpb25zLFxuXHRcdGFubm90YXRpb25QYXRoOiBpbkNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChzUGF0aClcblx0fTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gVUkgQ29udHJvbCAoTGluZUl0ZW0vQ2hhcnQpIENvbnRleHQuXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAbmFtZSBnZXRVaUNvbnRyb2xcbiAqIEBwYXJhbSBvUHJlc2VudGF0aW9uQ29udGV4dCBQcmVzZW50YXRpb24gY29udGV4dCBvYmplY3QgKFByZXNlbnRhdGlvbiB2YXJpYW50IG9yIFVJLkxpbmVJdGVtL0NoYXJ0KVxuICogQHBhcmFtIHNDb250cm9sUGF0aCBDb250cm9sIHBhdGhcbiAqIEByZXR1cm5zIFRoZSBDb250cm9sIChMaW5lSXRlbS9DaGFydCkgY29udGV4dFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VWlDb250cm9sKG9QcmVzZW50YXRpb25Db250ZXh0OiBDb250ZXh0LCBzQ29udHJvbFBhdGg6IFN0cmluZykge1xuXHRjb25zdCBvUHJlc2VudGF0aW9uID0gb1ByZXNlbnRhdGlvbkNvbnRleHQuZ2V0T2JqZWN0KG9QcmVzZW50YXRpb25Db250ZXh0LmdldFBhdGgoKSkgYXMgYW55LFxuXHRcdG9QcmVzZW50YXRpb25WYXJpYW50UGF0aCA9IENvbW1vbkhlbHBlci5jcmVhdGVQcmVzZW50YXRpb25QYXRoQ29udGV4dChvUHJlc2VudGF0aW9uQ29udGV4dCksXG5cdFx0b01vZGVsID0gb1ByZXNlbnRhdGlvbkNvbnRleHQuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsO1xuXHRpZiAoQ29tbW9uSGVscGVyLl9pc1ByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uKG9QcmVzZW50YXRpb25WYXJpYW50UGF0aC5nZXRQYXRoKCkpKSB7XG5cdFx0Ly8gVW5jb21wbGV0ZSBQcmVzZW50YXRpb25WYXJpYW50IGNhbiBiZSBwYXNzZWQgdG8gbWFjcm8gdmlhIFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRcblx0XHRjb25zdCBhVmlzdWFsaXphdGlvbnMgPSBvUHJlc2VudGF0aW9uLlZpc3VhbGl6YXRpb25zO1xuXHRcdGlmIChBcnJheS5pc0FycmF5KGFWaXN1YWxpemF0aW9ucykpIHtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYVZpc3VhbGl6YXRpb25zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGlmIChhVmlzdWFsaXphdGlvbnNbaV0uJEFubm90YXRpb25QYXRoLmluZGV4T2Yoc0NvbnRyb2xQYXRoKSAhPT0gLTEpIHtcblx0XHRcdFx0XHRzQ29udHJvbFBhdGggPSBhVmlzdWFsaXphdGlvbnNbaV0uJEFubm90YXRpb25QYXRoO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiAob01vZGVsIGFzIGFueSkuZ2V0TWV0YUNvbnRleHQob1ByZXNlbnRhdGlvbkNvbnRleHQuZ2V0UGF0aCgpLnNwbGl0KFwiQFwiKVswXSArIHNDb250cm9sUGF0aCk7XG5cdH1cblx0cmV0dXJuIG9QcmVzZW50YXRpb25Db250ZXh0O1xufVxuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7OztFQXNDTyxJQUFNQSx3Q0FBd0MsR0FBRyxVQUN2REMsNkJBRHVELEVBRXZEQyxpQkFGdUQsRUFHdkRDLGdCQUh1RCxFQUk5QjtJQUN6QixJQUFNQyx3QkFBZ0QsR0FBRyxFQUF6RDtJQUVBLElBQU1DLE1BQU0sR0FDWEYsZ0JBQWdCLENBQUNHLGtCQUFqQixHQUFzQ0MseUJBQXRDLE1BQ0FKLGdCQUFnQixDQUFDSyxlQUFqQixPQUF1Q0MsWUFBWSxDQUFDQyxrQkFGckQ7SUFJQSxJQUFNQyxxQkFBcUIsR0FBR1QsaUJBQWlCLENBQUNVLEtBQWxCLENBQXdCLEdBQXhCLEVBQTZCLENBQTdCLENBQTlCOztJQUVBLElBQUksQ0FBQ0MsdUJBQXVCLENBQUNaLDZCQUFELEVBQWdDSSxNQUFoQyxDQUE1QixFQUFxRTtNQUNwRSxJQUFNUyxVQUFVLEdBQUdYLGdCQUFnQixDQUFDWSxhQUFqQixFQUFuQjtNQUNBLElBQU1DLHlCQUF5QixHQUFHQyxrQkFBa0IsQ0FBQ0gsVUFBRCxDQUFwRDs7TUFDQSxJQUFJRSx5QkFBSixFQUErQjtRQUM5Qlosd0JBQXdCLENBQUNjLElBQXpCLENBQThCO1VBQzdCQyxhQUFhLEVBQUVILHlCQURjO1VBRTdCSSxjQUFjLFlBQUtULHFCQUFMLFNBQTZCUixnQkFBZ0IsQ0FBQ2tCLHlCQUFqQixDQUMxQ0wseUJB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
245
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRWaXN1YWxpemF0aW9uc0Zyb21QcmVzZW50YXRpb25WYXJpYW50IiwicHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24iLCJ2aXN1YWxpemF0aW9uUGF0aCIsImNvbnZlcnRlckNvbnRleHQiLCJpc01hY3JvT3JNdWx0aXBsZVZpZXciLCJ2aXN1YWxpemF0aW9uQW5ub3RhdGlvbnMiLCJiSXNBTFAiLCJnZXRNYW5pZmVzdFdyYXBwZXIiLCJoYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zIiwiZ2V0VGVtcGxhdGVUeXBlIiwiVGVtcGxhdGVUeXBlIiwiQW5hbHl0aWNhbExpc3RQYWdlIiwiYmFzZVZpc3VhbGl6YXRpb25QYXRoIiwic3BsaXQiLCJpc1ByZXNlbnRhdGlvbkNvbXBsaWFudCIsImVudGl0eVR5cGUiLCJnZXRFbnRpdHlUeXBlIiwiZGVmYXVsdExpbmVJdGVtQW5ub3RhdGlvbiIsImdldERlZmF1bHRMaW5lSXRlbSIsInB1c2giLCJ2aXN1YWxpemF0aW9uIiwiYW5ub3RhdGlvblBhdGgiLCJnZXRSZWxhdGl2ZUFubm90YXRpb25QYXRoIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwidmlzdWFsaXphdGlvbnMiLCJWaXN1YWxpemF0aW9ucyIsInB1c2hGaXJzdFZpek9mVHlwZSIsImFsbG93ZWRUZXJtcyIsImZpcnN0Vml6IiwiZmluZCIsInZpeiIsImluZGV4T2YiLCIkdGFyZ2V0IiwidGVybSIsInZhbHVlIiwiZ2V0U2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCIsInJlc29sdmVkVGFyZ2V0IiwiZ2V0RW50aXR5VHlwZUFubm90YXRpb24iLCJzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50IiwiYW5ub3RhdGlvbiIsIkVycm9yIiwiYW5ub3RhdGlvbnMiLCJVSSIsIlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQiLCJpc1NlbGVjdGlvblByZXNlbnRhdGlvbkNvbXBsaWFudCIsInByZXNlbnRhdGlvblZhcmlhbnQiLCJQcmVzZW50YXRpb25WYXJpYW50IiwiYkhhc1RhYmxlIiwiYkhhc0NoYXJ0IiwiYVZpc3VhbGl6YXRpb25zIiwiZm9yRWFjaCIsIm9WaXN1YWxpemF0aW9uIiwiTGluZUl0ZW0iLCJnZXREZWZhdWx0Q2hhcnQiLCJDaGFydCIsImdldERlZmF1bHRQcmVzZW50YXRpb25WYXJpYW50IiwiZ2V0RGVmYXVsdFNlbGVjdGlvblZhcmlhbnQiLCJTZWxlY3Rpb25WYXJpYW50IiwiZ2V0U2VsZWN0aW9uVmFyaWFudCIsImdldERlZmF1bHRUZW1wbGF0ZUFubm90YXRpb25QYXRoIiwic2VsZWN0aW9uVmFyaWFudCIsImdldERhdGFWaXN1YWxpemF0aW9uQ29uZmlndXJhdGlvbiIsImlzQ29uZGVuc2VkVGFibGVMYXlvdXRDb21wbGlhbnQiLCJpbkNvbnZlcnRlckNvbnRleHQiLCJ2aWV3Q29uZmlndXJhdGlvbiIsImRvTm90Q2hlY2tBcHBseVN1cHBvcnRlZCIsImFzc29jaWF0ZWRQcmVzZW50YXRpb25WYXJpYW50UGF0aCIsInVuZGVmaW5lZCIsInJlc29sdmVkQXNzb2NpYXRlZFByZXNlbnRhdGlvblZhcmlhbnQiLCJyZXNvbHZlZFZpc3VhbGl6YXRpb24iLCJwcmVzZW50YXRpb25QYXRoIiwiY2hhcnRWaXN1YWxpemF0aW9uIiwidGFibGVWaXN1YWxpemF0aW9uIiwic1Rlcm0iLCJjb25jYXQiLCJ2aXN1YWxpemF0aW9uQW5ub3RhdGlvbiIsImNyZWF0ZUNoYXJ0VmlzdWFsaXphdGlvbiIsIlRhYmxlIiwiY3JlYXRlVGFibGVWaXN1YWxpemF0aW9uIiwiY3JlYXRlRGVmYXVsdFRhYmxlVmlzdWFsaXphdGlvbiIsImdldERpYWdub3N0aWNzIiwiYWRkSXNzdWUiLCJJc3N1ZUNhdGVnb3J5IiwiQW5ub3RhdGlvbiIsIklzc3VlU2V2ZXJpdHkiLCJNZWRpdW0iLCJJc3N1ZVR5cGUiLCJNSVNTSU5HX0xJTkVJVEVNIiwic1BhdGgiLCJnZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoIiwiZ2V0VWlDb250cm9sIiwib1ByZXNlbnRhdGlvbkNvbnRleHQiLCJzQ29udHJvbFBhdGgiLCJvUHJlc2VudGF0aW9uIiwiZ2V0T2JqZWN0IiwiZ2V0UGF0aCIsIm9QcmVzZW50YXRpb25WYXJpYW50UGF0aCIsIkNvbW1vbkhlbHBlciIsImNyZWF0ZVByZXNlbnRhdGlvblBhdGhDb250ZXh0Iiwib01vZGVsIiwiZ2V0TW9kZWwiLCJfaXNQcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiIsIkFycmF5IiwiaXNBcnJheSIsImkiLCJsZW5ndGgiLCIkQW5ub3RhdGlvblBhdGgiLCJnZXRNZXRhQ29udGV4dCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRGF0YVZpc3VhbGl6YXRpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBFbnRpdHlUeXBlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7XG5cdENoYXJ0LFxuXHRMaW5lSXRlbSxcblx0UHJlc2VudGF0aW9uVmFyaWFudCxcblx0UHJlc2VudGF0aW9uVmFyaWFudFR5cGUsXG5cdFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQsXG5cdFNlbGVjdGlvblZhcmlhbnRcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgVUlBbm5vdGF0aW9uVGVybXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBJc3N1ZUNhdGVnb3J5LCBJc3N1ZVNldmVyaXR5LCBJc3N1ZVR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0lzc3VlTWFuYWdlclwiO1xuaW1wb3J0IENvbW1vbkhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9Db21tb25IZWxwZXJcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgQ29udmVydGVyQ29udGV4dCBmcm9tIFwiLi4vLi4vQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBWaWV3UGF0aENvbmZpZ3VyYXRpb24gfSBmcm9tIFwiLi4vLi4vTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHsgVGVtcGxhdGVUeXBlIH0gZnJvbSBcIi4uLy4uL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB0eXBlIHsgQ2hhcnRWaXN1YWxpemF0aW9uIH0gZnJvbSBcIi4vQ2hhcnRcIjtcbmltcG9ydCB7IGNyZWF0ZUNoYXJ0VmlzdWFsaXphdGlvbiB9IGZyb20gXCIuL0NoYXJ0XCI7XG5pbXBvcnQgdHlwZSB7IFRhYmxlVmlzdWFsaXphdGlvbiB9IGZyb20gXCIuL1RhYmxlXCI7XG5pbXBvcnQgVGFibGUgZnJvbSBcIi4vVGFibGVcIjtcblxuZXhwb3J0IHR5cGUgRGF0YVZpc3VhbGl6YXRpb25Bbm5vdGF0aW9ucyA9IExpbmVJdGVtIHwgQ2hhcnQgfCBQcmVzZW50YXRpb25WYXJpYW50IHwgU2VsZWN0aW9uVmFyaWFudCB8IFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQ7XG5cbmV4cG9ydCB0eXBlIEFjdHVhbFZpc3VhbGl6YXRpb25Bbm5vdGF0aW9ucyA9IExpbmVJdGVtIHwgQ2hhcnQ7XG5cbmV4cG9ydCB0eXBlIFZpc3VhbGl6YXRpb25BbmRQYXRoID0ge1xuXHR2aXN1YWxpemF0aW9uOiBBY3R1YWxWaXN1YWxpemF0aW9uQW5ub3RhdGlvbnM7XG5cdGFubm90YXRpb25QYXRoOiBzdHJpbmc7XG5cdHNlbGVjdGlvblZhcmlhbnRQYXRoPzogc3RyaW5nO1xuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0O1xufTtcblxuZXhwb3J0IHR5cGUgRGF0YVZpc3VhbGl6YXRpb25EZWZpbml0aW9uID0ge1xuXHR2aXN1YWxpemF0aW9uczogKFRhYmxlVmlzdWFsaXphdGlvbiB8IENoYXJ0VmlzdWFsaXphdGlvbilbXTtcblx0YW5ub3RhdGlvblBhdGg6IHN0cmluZztcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRWaXN1YWxpemF0aW9uc0Zyb21QcmVzZW50YXRpb25WYXJpYW50ID0gZnVuY3Rpb24gKFxuXHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbjogUHJlc2VudGF0aW9uVmFyaWFudFR5cGUsXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGlzTWFjcm9Pck11bHRpcGxlVmlldz86IGJvb2xlYW5cbik6IFZpc3VhbGl6YXRpb25BbmRQYXRoW10ge1xuXHRjb25zdCB2aXN1YWxpemF0aW9uQW5ub3RhdGlvbnM6IFZpc3VhbGl6YXRpb25BbmRQYXRoW10gPSBbXTtcblxuXHRjb25zdCBiSXNBTFAgPVxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucygpIHx8XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZTtcblxuXHRjb25zdCBiYXNlVmlzdWFsaXphdGlvblBhdGggPSB2aXN1YWxpemF0aW9uUGF0aC5zcGxpdChcIkBcIilbMF07XG5cblx0aWYgKGlzTWFjcm9Pck11bHRpcGxlVmlldyAmJiAhaXNQcmVzZW50YXRpb25Db21wbGlhbnQocHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24sIGJJc0FMUCkpIHtcblx0XHRjb25zdCBlbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cdFx0Y29uc3QgZGVmYXVsdExpbmVJdGVtQW5ub3RhdGlvbiA9IGdldERlZmF1bHRMaW5lSXRlbShlbnRpdHlUeXBlKTtcblx0XHRpZiAoZGVmYXVsdExpbmVJdGVtQW5ub3RhdGlvbikge1xuXHRcdFx0dmlzdWFsaXphdGlvbkFubm90YXRpb25zLnB1c2goe1xuXHRcdFx0XHR2aXN1YWxpemF0aW9uOiBkZWZhdWx0TGluZUl0ZW1Bbm5vdGF0aW9uLFxuXHRcdFx0XHRhbm5vdGF0aW9uUGF0aDogYCR7YmFzZVZpc3VhbGl6YXRpb25QYXRofSR7Y29udmVydGVyQ29udGV4dC5nZXRSZWxhdGl2ZUFubm90YXRpb25QYXRoKFxuXHRcdFx0XHRcdGRlZmF1bHRMaW5lSXRlbUFubm90YXRpb24uZnVsbHlRdWFsaWZpZWROYW1lLFxuXHRcdFx0XHRcdGVudGl0eVR5cGVcblx0XHRcdFx0KX1gLFxuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0OiBjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblx0Y29uc3QgdmlzdWFsaXphdGlvbnMgPSBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbi5WaXN1YWxpemF0aW9ucztcblxuXHRjb25zdCBwdXNoRmlyc3RWaXpPZlR5cGUgPSBmdW5jdGlvbiAoYWxsb3dlZFRlcm1zOiBzdHJpbmdbXSkge1xuXHRcdGNvbnN0IGZpcnN0Vml6ID0gdmlzdWFsaXphdGlvbnM/LmZpbmQoKHZpeikgPT4ge1xuXHRcdFx0cmV0dXJuIGFsbG93ZWRUZXJtcy5pbmRleE9mKHZpei4kdGFyZ2V0Py50ZXJtKSA+PSAwO1xuXHRcdH0pO1xuXG5cdFx0aWYgKGZpcnN0Vml6KSB7XG5cdFx0XHR2aXN1YWxpemF0aW9uQW5ub3RhdGlvbnMucHVzaCh7XG5cdFx0XHRcdHZpc3VhbGl6YXRpb246IGZpcnN0Vml6LiR0YXJnZXQgYXMgQWN0dWFsVmlzdWFsaXphdGlvbkFubm90YXRpb25zLFxuXHRcdFx0XHRhbm5vdGF0aW9uUGF0aDogYCR7YmFzZVZpc3VhbGl6YXRpb25QYXRofSR7Zmlyc3RWaXoudmFsdWV9YCxcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dDogY29udmVydGVyQ29udGV4dFxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9O1xuXG5cdGlmIChiSXNBTFApIHtcblx0XHQvLyBJbiBjYXNlIG9mIEFMUCwgd2UgdXNlIHRoZSBmaXJzdCBMaW5lSXRlbSBhbmQgdGhlIGZpcnN0IENoYXJ0XG5cdFx0cHVzaEZpcnN0Vml6T2ZUeXBlKFtVSUFubm90YXRpb25UZXJtcy5MaW5lSXRlbV0pO1xuXHRcdHB1c2hGaXJzdFZpek9mVHlwZShbVUlBbm5vdGF0aW9uVGVybXMuQ2hhcnRdKTtcblx0fSBlbHNlIHtcblx0XHQvLyBPdGhlcndpc2UsIHdlIHVzZSB0aGUgZmlyc3Qgdml6IG9ubHkgKENoYXJ0IG9yIExpbmVJdGVtKVxuXHRcdHB1c2hGaXJzdFZpek9mVHlwZShbVUlBbm5vdGF0aW9uVGVybXMuTGluZUl0ZW0sIFVJQW5ub3RhdGlvblRlcm1zLkNoYXJ0XSk7XG5cdH1cblx0cmV0dXJuIHZpc3VhbGl6YXRpb25Bbm5vdGF0aW9ucztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50KFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRhbm5vdGF0aW9uUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiBhbnkge1xuXHRpZiAoYW5ub3RhdGlvblBhdGgpIHtcblx0XHRjb25zdCByZXNvbHZlZFRhcmdldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZUFubm90YXRpb24oYW5ub3RhdGlvblBhdGgpO1xuXHRcdGNvbnN0IHNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQgPSByZXNvbHZlZFRhcmdldC5hbm5vdGF0aW9uIGFzIFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQ7XG5cdFx0aWYgKHNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQpIHtcblx0XHRcdGlmIChzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50LnRlcm0gPT09IFVJQW5ub3RhdGlvblRlcm1zLlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQpIHtcblx0XHRcdFx0cmV0dXJuIHNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQ7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIkFubm90YXRpb24gUGF0aCBmb3IgdGhlIFNQViBtZW50aW9uZWQgaW4gdGhlIG1hbmlmZXN0IGlzIG5vdCBmb3VuZCwgUGxlYXNlIGFkZCB0aGUgU1BWIGluIHRoZSBhbm5vdGF0aW9uXCIpO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gZW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uVUk/LlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQ7XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU2VsZWN0aW9uUHJlc2VudGF0aW9uQ29tcGxpYW50KFxuXHRTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50OiBTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50LFxuXHRiSXNBTFA6IGJvb2xlYW5cbik6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuXHRjb25zdCBwcmVzZW50YXRpb25WYXJpYW50ID0gU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCAmJiBTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50LlByZXNlbnRhdGlvblZhcmlhbnQ7XG5cdGlmIChwcmVzZW50YXRpb25WYXJpYW50KSB7XG5cdFx0cmV0dXJuIGlzUHJlc2VudGF0aW9uQ29tcGxpYW50KHByZXNlbnRhdGlvblZhcmlhbnQsIGJJc0FMUCk7XG5cdH0gZWxzZSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiUHJlc2VudGF0aW9uIFZhcmlhbnQgaXMgbm90IHByZXNlbnQgaW4gdGhlIFNQViBhbm5vdGF0aW9uXCIpO1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1ByZXNlbnRhdGlvbkNvbXBsaWFudChwcmVzZW50YXRpb25WYXJpYW50OiBQcmVzZW50YXRpb25WYXJpYW50VHlwZSwgYklzQUxQID0gZmFsc2UpOiBib29sZWFuIHtcblx0bGV0IGJIYXNUYWJsZSA9IGZhbHNlLFxuXHRcdGJIYXNDaGFydCA9IGZhbHNlO1xuXHRpZiAoYklzQUxQKSB7XG5cdFx0aWYgKHByZXNlbnRhdGlvblZhcmlhbnQ/LlZpc3VhbGl6YXRpb25zKSB7XG5cdFx0XHRjb25zdCBhVmlzdWFsaXphdGlvbnMgPSBwcmVzZW50YXRpb25WYXJpYW50LlZpc3VhbGl6YXRpb25zO1xuXHRcdFx0YVZpc3VhbGl6YXRpb25zLmZvckVhY2goKG9WaXN1YWxpemF0aW9uKSA9PiB7XG5cdFx0XHRcdGlmIChvVmlzdWFsaXphdGlvbi4kdGFyZ2V0Py50ZXJtID09PSBVSUFubm90YXRpb25UZXJtcy5MaW5lSXRlbSkge1xuXHRcdFx0XHRcdGJIYXNUYWJsZSA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKG9WaXN1YWxpemF0aW9uLiR0YXJnZXQ/LnRlcm0gPT09IFVJQW5ub3RhdGlvblRlcm1zLkNoYXJ0KSB7XG5cdFx0XHRcdFx0Ykhhc0NoYXJ0ID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBiSGFzQ2hhcnQgJiYgYkhhc1RhYmxlO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiAoXG5cdFx0XHRwcmVzZW50YXRpb25WYXJpYW50Py5WaXN1YWxpemF0aW9ucyAmJlxuXHRcdFx0ISFwcmVzZW50YXRpb25WYXJpYW50LlZpc3VhbGl6YXRpb25zLmZpbmQoKHZpc3VhbGl6YXRpb24pID0+IHtcblx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHR2aXN1YWxpemF0aW9uLiR0YXJnZXQ/LnRlcm0gPT09IFVJQW5ub3RhdGlvblRlcm1zLkxpbmVJdGVtIHx8IHZpc3VhbGl6YXRpb24uJHRhcmdldD8udGVybSA9PT0gVUlBbm5vdGF0aW9uVGVybXMuQ2hhcnRcblx0XHRcdFx0KTtcblx0XHRcdH0pXG5cdFx0KTtcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdExpbmVJdGVtKGVudGl0eVR5cGU6IEVudGl0eVR5cGUpOiBMaW5lSXRlbSB8IHVuZGVmaW5lZCB7XG5cdHJldHVybiBlbnRpdHlUeXBlLmFubm90YXRpb25zLlVJPy5MaW5lSXRlbTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0Q2hhcnQoZW50aXR5VHlwZTogRW50aXR5VHlwZSk6IENoYXJ0IHwgdW5kZWZpbmVkIHtcblx0cmV0dXJuIGVudGl0eVR5cGUuYW5ub3RhdGlvbnMuVUk/LkNoYXJ0O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHRQcmVzZW50YXRpb25WYXJpYW50KGVudGl0eVR5cGU6IEVudGl0eVR5cGUpOiBQcmVzZW50YXRpb25WYXJpYW50IHwgdW5kZWZpbmVkIHtcblx0cmV0dXJuIGVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LlVJPy5QcmVzZW50YXRpb25WYXJpYW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdFNlbGVjdGlvblZhcmlhbnQoZW50aXR5VHlwZTogRW50aXR5VHlwZSk6IFNlbGVjdGlvblZhcmlhbnQgfCB1bmRlZmluZWQge1xuXHRyZXR1cm4gZW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uVUk/LlNlbGVjdGlvblZhcmlhbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWxlY3Rpb25WYXJpYW50KGVudGl0eVR5cGU6IEVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBTZWxlY3Rpb25WYXJpYW50IHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgYW5ub3RhdGlvblBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmdldERlZmF1bHRUZW1wbGF0ZUFubm90YXRpb25QYXRoKCk7XG5cdGNvbnN0IHNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQgPSBnZXRTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50KGVudGl0eVR5cGUsIGFubm90YXRpb25QYXRoLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0bGV0IHNlbGVjdGlvblZhcmlhbnQ7XG5cdGlmIChzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50KSB7XG5cdFx0c2VsZWN0aW9uVmFyaWFudCA9IHNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQuU2VsZWN0aW9uVmFyaWFudDtcblx0XHRpZiAoc2VsZWN0aW9uVmFyaWFudCkge1xuXHRcdFx0cmV0dXJuIHNlbGVjdGlvblZhcmlhbnQ7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHNlbGVjdGlvblZhcmlhbnQgPSBnZXREZWZhdWx0U2VsZWN0aW9uVmFyaWFudChlbnRpdHlUeXBlKTtcblx0XHRyZXR1cm4gc2VsZWN0aW9uVmFyaWFudDtcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGF0YVZpc3VhbGl6YXRpb25Db25maWd1cmF0aW9uKFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRpc0NvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW50OiBib29sZWFuLFxuXHRpbkNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHZpZXdDb25maWd1cmF0aW9uPzogVmlld1BhdGhDb25maWd1cmF0aW9uLFxuXHRkb05vdENoZWNrQXBwbHlTdXBwb3J0ZWQ/OiBib29sZWFuLFxuXHRhc3NvY2lhdGVkUHJlc2VudGF0aW9uVmFyaWFudFBhdGg/OiBzdHJpbmcsXG5cdGlzTWFjcm9Pck11bHRpcGxlVmlldz86IGJvb2xlYW5cbik6IERhdGFWaXN1YWxpemF0aW9uRGVmaW5pdGlvbiB7XG5cdGNvbnN0IHJlc29sdmVkVGFyZ2V0ID1cblx0XHR2aXN1YWxpemF0aW9uUGF0aCAhPT0gXCJcIlxuXHRcdFx0PyBpbkNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZUFubm90YXRpb24odmlzdWFsaXphdGlvblBhdGgpXG5cdFx0XHQ6IHsgYW5ub3RhdGlvbjogdW5kZWZpbmVkLCBjb252ZXJ0ZXJDb250ZXh0OiBpbkNvbnZlcnRlckNvbnRleHQgfTtcblx0Y29uc3QgcmVzb2x2ZWRBc3NvY2lhdGVkUHJlc2VudGF0aW9uVmFyaWFudCA9IGFzc29jaWF0ZWRQcmVzZW50YXRpb25WYXJpYW50UGF0aFxuXHRcdD8gaW5Db252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGVBbm5vdGF0aW9uKGFzc29jaWF0ZWRQcmVzZW50YXRpb25WYXJpYW50UGF0aClcblx0XHQ6IG51bGw7XG5cdGNvbnN0IHJlc29sdmVkVmlzdWFsaXphdGlvbiA9IHJlc29sdmVkVGFyZ2V0LmFubm90YXRpb24gYXMgRGF0YVZpc3VhbGl6YXRpb25Bbm5vdGF0aW9ucztcblx0aW5Db252ZXJ0ZXJDb250ZXh0ID0gcmVzb2x2ZWRUYXJnZXQuY29udmVydGVyQ29udGV4dDtcblx0bGV0IHZpc3VhbGl6YXRpb25Bbm5vdGF0aW9uczogVmlzdWFsaXphdGlvbkFuZFBhdGhbXSA9IFtdO1xuXHRsZXQgcHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb246IFByZXNlbnRhdGlvblZhcmlhbnRUeXBlO1xuXHRsZXQgcHJlc2VudGF0aW9uUGF0aDogc3RyaW5nID0gXCJcIjtcblx0bGV0IGNoYXJ0VmlzdWFsaXphdGlvbiwgdGFibGVWaXN1YWxpemF0aW9uO1xuXHRjb25zdCBzVGVybSA9IHJlc29sdmVkVmlzdWFsaXphdGlvbj8udGVybTtcblx0aWYgKHNUZXJtKSB7XG5cdFx0c3dpdGNoIChzVGVybSkge1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5MaW5lSXRlbTpcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVGVybXMuQ2hhcnQ6XG5cdFx0XHRcdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uID0gcmVzb2x2ZWRBc3NvY2lhdGVkUHJlc2VudGF0aW9uVmFyaWFudD8uYW5ub3RhdGlvbjtcblx0XHRcdFx0dmlzdWFsaXphdGlvbkFubm90YXRpb25zLnB1c2goe1xuXHRcdFx0XHRcdHZpc3VhbGl6YXRpb246IHJlc29sdmVkVmlzdWFsaXphdGlvbiBhcyBBY3R1YWxWaXN1YWxpemF0aW9uQW5ub3RhdGlvbnMsXG5cdFx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IHZpc3VhbGl6YXRpb25QYXRoLFxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQ6IGluQ29udmVydGVyQ29udGV4dFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLlByZXNlbnRhdGlvblZhcmlhbnQ6XG5cdFx0XHRcdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uID0gcmVzb2x2ZWRWaXN1YWxpemF0aW9uO1xuXHRcdFx0XHR2aXN1YWxpemF0aW9uQW5ub3RhdGlvbnMgPSB2aXN1YWxpemF0aW9uQW5ub3RhdGlvbnMuY29uY2F0KFxuXHRcdFx0XHRcdGdldFZpc3VhbGl6YXRpb25zRnJvbVByZXNlbnRhdGlvblZhcmlhbnQoXG5cdFx0XHRcdFx0XHRyZXNvbHZlZFZpc3VhbGl6YXRpb24sXG5cdFx0XHRcdFx0XHR2aXN1YWxpemF0aW9uUGF0aCxcblx0XHRcdFx0XHRcdGluQ29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRcdGlzTWFjcm9Pck11bHRpcGxlVmlld1xuXHRcdFx0XHRcdClcblx0XHRcdFx0KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQ6XG5cdFx0XHRcdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uID0gcmVzb2x2ZWRWaXN1YWxpemF0aW9uLlByZXNlbnRhdGlvblZhcmlhbnQ7XG5cdFx0XHRcdC8vIFByZXNlbnRhdGlvbiBjYW4gYmUgaW5saW5lIG9yIG91dHNpZGUgdGhlIFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRcblx0XHRcdFx0cHJlc2VudGF0aW9uUGF0aCA9IHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZTtcblx0XHRcdFx0dmlzdWFsaXphdGlvbkFubm90YXRpb25zID0gdmlzdWFsaXphdGlvbkFubm90YXRpb25zLmNvbmNhdChcblx0XHRcdFx0XHRnZXRWaXN1YWxpemF0aW9uc0Zyb21QcmVzZW50YXRpb25WYXJpYW50KFxuXHRcdFx0XHRcdFx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24sXG5cdFx0XHRcdFx0XHR2aXN1YWxpemF0aW9uUGF0aCxcblx0XHRcdFx0XHRcdGluQ29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRcdGlzTWFjcm9Pck11bHRpcGxlVmlld1xuXHRcdFx0XHRcdClcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHR2aXN1YWxpemF0aW9uQW5ub3RhdGlvbnMuZm9yRWFjaCgodmlzdWFsaXphdGlvbkFubm90YXRpb24pID0+IHtcblx0XHRcdGNvbnN0IHsgdmlzdWFsaXphdGlvbiwgYW5ub3RhdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQgfSA9IHZpc3VhbGl6YXRpb25Bbm5vdGF0aW9uO1xuXHRcdFx0c3dpdGNoICh2aXN1YWxpemF0aW9uLnRlcm0pIHtcblx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5DaGFydDpcblx0XHRcdFx0XHRjaGFydFZpc3VhbGl6YXRpb24gPSBjcmVhdGVDaGFydFZpc3VhbGl6YXRpb24oXG5cdFx0XHRcdFx0XHR2aXN1YWxpemF0aW9uLFxuXHRcdFx0XHRcdFx0YW5ub3RhdGlvblBhdGgsXG5cdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdFx0ZG9Ob3RDaGVja0FwcGx5U3VwcG9ydGVkXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5MaW5lSXRlbTpcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24gPSBUYWJsZS5jcmVhdGVUYWJsZVZpc3VhbGl6YXRpb24oXG5cdFx0XHRcdFx0XHR2aXN1YWxpemF0aW9uLFxuXHRcdFx0XHRcdFx0YW5ub3RhdGlvblBhdGgsXG5cdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdFx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24sXG5cdFx0XHRcdFx0XHRpc0NvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW50LFxuXHRcdFx0XHRcdFx0dmlld0NvbmZpZ3VyYXRpb25cblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdHRhYmxlVmlzdWFsaXphdGlvbiA9IFRhYmxlLmNyZWF0ZURlZmF1bHRUYWJsZVZpc3VhbGl6YXRpb24oaW5Db252ZXJ0ZXJDb250ZXh0LCAhaXNNYWNyb09yTXVsdGlwbGVWaWV3KTtcblx0XHRpbkNvbnZlcnRlckNvbnRleHQuZ2V0RGlhZ25vc3RpY3MoKS5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sIElzc3VlU2V2ZXJpdHkuTWVkaXVtLCBJc3N1ZVR5cGUuTUlTU0lOR19MSU5FSVRFTSk7XG5cdH1cblx0Y29uc3QgYVZpc3VhbGl6YXRpb25zOiBhbnkgPSBbXTtcblx0bGV0IHNQYXRoID1cblx0XHRzVGVybSA9PT0gVUlBbm5vdGF0aW9uVGVybXMuU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFxuXHRcdFx0PyBwcmVzZW50YXRpb25QYXRoXG5cdFx0XHQ6IHJlc29sdmVkVmlzdWFsaXphdGlvbiAmJiByZXNvbHZlZFZpc3VhbGl6YXRpb24uZnVsbHlRdWFsaWZpZWROYW1lO1xuXHRpZiAoc1BhdGggPT09IHVuZGVmaW5lZCkge1xuXHRcdHNQYXRoID0gXCIvXCI7XG5cdH1cblx0aWYgKGNoYXJ0VmlzdWFsaXphdGlvbikge1xuXHRcdGFWaXN1YWxpemF0aW9ucy5wdXNoKGNoYXJ0VmlzdWFsaXphdGlvbik7XG5cdH1cblx0aWYgKHRhYmxlVmlzdWFsaXphdGlvbikge1xuXHRcdGFWaXN1YWxpemF0aW9ucy5wdXNoKHRhYmxlVmlzdWFsaXphdGlvbik7XG5cdH1cblx0cmV0dXJuIHtcblx0XHR2aXN1YWxpemF0aW9uczogYVZpc3VhbGl6YXRpb25zLFxuXHRcdGFubm90YXRpb25QYXRoOiBpbkNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChzUGF0aClcblx0fTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gVUkgQ29udHJvbCAoTGluZUl0ZW0vQ2hhcnQpIENvbnRleHQuXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAbmFtZSBnZXRVaUNvbnRyb2xcbiAqIEBwYXJhbSBvUHJlc2VudGF0aW9uQ29udGV4dCBQcmVzZW50YXRpb24gY29udGV4dCBvYmplY3QgKFByZXNlbnRhdGlvbiB2YXJpYW50IG9yIFVJLkxpbmVJdGVtL0NoYXJ0KVxuICogQHBhcmFtIHNDb250cm9sUGF0aCBDb250cm9sIHBhdGhcbiAqIEByZXR1cm5zIFRoZSBDb250cm9sIChMaW5lSXRlbS9DaGFydCkgY29udGV4dFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VWlDb250cm9sKG9QcmVzZW50YXRpb25Db250ZXh0OiBDb250ZXh0LCBzQ29udHJvbFBhdGg6IFN0cmluZykge1xuXHRjb25zdCBvUHJlc2VudGF0aW9uID0gb1ByZXNlbnRhdGlvbkNvbnRleHQuZ2V0T2JqZWN0KG9QcmVzZW50YXRpb25Db250ZXh0LmdldFBhdGgoKSkgYXMgYW55LFxuXHRcdG9QcmVzZW50YXRpb25WYXJpYW50UGF0aCA9IENvbW1vbkhlbHBlci5jcmVhdGVQcmVzZW50YXRpb25QYXRoQ29udGV4dChvUHJlc2VudGF0aW9uQ29udGV4dCksXG5cdFx0b01vZGVsID0gb1ByZXNlbnRhdGlvbkNvbnRleHQuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsO1xuXHRpZiAoQ29tbW9uSGVscGVyLl9pc1ByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uKG9QcmVzZW50YXRpb25WYXJpYW50UGF0aC5nZXRQYXRoKCkpKSB7XG5cdFx0Ly8gVW5jb21wbGV0ZSBQcmVzZW50YXRpb25WYXJpYW50IGNhbiBiZSBwYXNzZWQgdG8gbWFjcm8gdmlhIFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRcblx0XHRjb25zdCBhVmlzdWFsaXphdGlvbnMgPSBvUHJlc2VudGF0aW9uLlZpc3VhbGl6YXRpb25zO1xuXHRcdGlmIChBcnJheS5pc0FycmF5KGFWaXN1YWxpemF0aW9ucykpIHtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYVZpc3VhbGl6YXRpb25zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGlmIChhVmlzdWFsaXphdGlvbnNbaV0uJEFubm90YXRpb25QYXRoLmluZGV4T2Yoc0NvbnRyb2xQYXRoKSAhPT0gLTEpIHtcblx0XHRcdFx0XHRzQ29udHJvbFBhdGggPSBhVmlzdWFsaXphdGlvbnNbaV0uJEFubm90YXRpb25QYXRoO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiAob01vZGVsIGFzIGFueSkuZ2V0TWV0YUNvbnRleHQob1ByZXNlbnRhdGlvbkNvbnRleHQuZ2V0UGF0aCgpLnNwbGl0KFwiQFwiKVswXSArIHNDb250cm9sUGF0aCk7XG5cdH1cblx0cmV0dXJuIG9QcmVzZW50YXRpb25Db250ZXh0O1xufVxuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7O0VBc0NPLElBQU1BLHdDQUF3QyxHQUFHLFVBQ3ZEQyw2QkFBc0QsRUFDdERDLGlCQUF5QixFQUN6QkMsZ0JBQWtDLEVBQ2xDQyxxQkFBK0IsRUFDTjtJQUN6QixJQUFNQyx3QkFBZ0QsR0FBRyxFQUFFO0lBRTNELElBQU1DLE1BQU0sR0FDWEgsZ0JBQWdCLENBQUNJLGtCQUFrQixFQUFFLENBQUNDLHlCQUF5QixFQUFFLElBQ2pFTCxnQkFBZ0IsQ0FBQ00sZUFBZSxFQUFFLEtBQUtDLFlBQVksQ0FBQ0Msa0JBQWtCO0lBRXZFLElBQU1DLHFCQUFxQixHQUFHVixpQkFBaUIsQ0FBQ1csS0FBSyxDQUFDLEdB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
@@ -39,7 +39,8 @@ export type DataVisualizationDefinition = {
39
39
  export const getVisualizationsFromPresentationVariant = function (
40
40
  presentationVariantAnnotation: PresentationVariantType,
41
41
  visualizationPath: string,
42
- converterContext: ConverterContext
42
+ converterContext: ConverterContext,
43
+ isMacroOrMultipleView?: boolean
43
44
  ): VisualizationAndPath[] {
44
45
  const visualizationAnnotations: VisualizationAndPath[] = [];
45
46
 
@@ -49,7 +50,7 @@ export const getVisualizationsFromPresentationVariant = function (
49
50
 
50
51
  const baseVisualizationPath = visualizationPath.split("@")[0];
51
52
 
52
- if (!isPresentationCompliant(presentationVariantAnnotation, bIsALP)) {
53
+ if (isMacroOrMultipleView && !isPresentationCompliant(presentationVariantAnnotation, bIsALP)) {
53
54
  const entityType = converterContext.getEntityType();
54
55
  const defaultLineItemAnnotation = getDefaultLineItem(entityType);
55
56
  if (defaultLineItemAnnotation) {
@@ -62,31 +63,30 @@ export const getVisualizationsFromPresentationVariant = function (
62
63
  converterContext: converterContext
63
64
  });
64
65
  }
65
- } else {
66
- const visualizations = presentationVariantAnnotation.Visualizations;
67
-
68
- const pushFirstVizOfType = function (allowedTerms: string[]) {
69
- const firstViz = visualizations.find((viz) => {
70
- return allowedTerms.indexOf(viz.$target.term) >= 0;
71
- });
66
+ }
67
+ const visualizations = presentationVariantAnnotation.Visualizations;
72
68
 
73
- if (firstViz) {
74
- visualizationAnnotations.push({
75
- visualization: firstViz.$target as ActualVisualizationAnnotations,
76
- annotationPath: `${baseVisualizationPath}${firstViz.value}`,
77
- converterContext: converterContext
78
- });
79
- }
80
- };
69
+ const pushFirstVizOfType = function (allowedTerms: string[]) {
70
+ const firstViz = visualizations?.find((viz) => {
71
+ return allowedTerms.indexOf(viz.$target?.term) >= 0;
72
+ });
81
73
 
82
- if (bIsALP) {
83
- // In case of ALP, we use the first LineItem and the first Chart
84
- pushFirstVizOfType([UIAnnotationTerms.LineItem]);
85
- pushFirstVizOfType([UIAnnotationTerms.Chart]);
86
- } else {
87
- // Otherwise, we use the first viz only (Chart or LineItem)
88
- pushFirstVizOfType([UIAnnotationTerms.LineItem, UIAnnotationTerms.Chart]);
74
+ if (firstViz) {
75
+ visualizationAnnotations.push({
76
+ visualization: firstViz.$target as ActualVisualizationAnnotations,
77
+ annotationPath: `${baseVisualizationPath}${firstViz.value}`,
78
+ converterContext: converterContext
79
+ });
89
80
  }
81
+ };
82
+
83
+ if (bIsALP) {
84
+ // In case of ALP, we use the first LineItem and the first Chart
85
+ pushFirstVizOfType([UIAnnotationTerms.LineItem]);
86
+ pushFirstVizOfType([UIAnnotationTerms.Chart]);
87
+ } else {
88
+ // Otherwise, we use the first viz only (Chart or LineItem)
89
+ pushFirstVizOfType([UIAnnotationTerms.LineItem, UIAnnotationTerms.Chart]);
90
90
  }
91
91
  return visualizationAnnotations;
92
92
  };
@@ -130,10 +130,10 @@ export function isPresentationCompliant(presentationVariant: PresentationVariant
130
130
  if (presentationVariant?.Visualizations) {
131
131
  const aVisualizations = presentationVariant.Visualizations;
132
132
  aVisualizations.forEach((oVisualization) => {
133
- if (oVisualization.$target.term === UIAnnotationTerms.LineItem) {
133
+ if (oVisualization.$target?.term === UIAnnotationTerms.LineItem) {
134
134
  bHasTable = true;
135
135
  }
136
- if (oVisualization.$target.term === UIAnnotationTerms.Chart) {
136
+ if (oVisualization.$target?.term === UIAnnotationTerms.Chart) {
137
137
  bHasChart = true;
138
138
  }
139
139
  });
@@ -143,7 +143,9 @@ export function isPresentationCompliant(presentationVariant: PresentationVariant
143
143
  return (
144
144
  presentationVariant?.Visualizations &&
145
145
  !!presentationVariant.Visualizations.find((visualization) => {
146
- return visualization.$target.term === UIAnnotationTerms.LineItem || visualization.$target.term === UIAnnotationTerms.Chart;
146
+ return (
147
+ visualization.$target?.term === UIAnnotationTerms.LineItem || visualization.$target?.term === UIAnnotationTerms.Chart
148
+ );
147
149
  })
148
150
  );
149
151
  }
@@ -184,7 +186,8 @@ export function getDataVisualizationConfiguration(
184
186
  inConverterContext: ConverterContext,
185
187
  viewConfiguration?: ViewPathConfiguration,
186
188
  doNotCheckApplySupported?: boolean,
187
- associatedPresentationVariantPath?: string
189
+ associatedPresentationVariantPath?: string,
190
+ isMacroOrMultipleView?: boolean
188
191
  ): DataVisualizationDefinition {
189
192
  const resolvedTarget =
190
193
  visualizationPath !== ""
@@ -214,7 +217,12 @@ export function getDataVisualizationConfiguration(
214
217
  case UIAnnotationTerms.PresentationVariant:
215
218
  presentationVariantAnnotation = resolvedVisualization;
216
219
  visualizationAnnotations = visualizationAnnotations.concat(
217
- getVisualizationsFromPresentationVariant(resolvedVisualization, visualizationPath, inConverterContext)
220
+ getVisualizationsFromPresentationVariant(
221
+ resolvedVisualization,
222
+ visualizationPath,
223
+ inConverterContext,
224
+ isMacroOrMultipleView
225
+ )
218
226
  );
219
227
  break;
220
228
  case UIAnnotationTerms.SelectionPresentationVariant:
@@ -222,7 +230,12 @@ export function getDataVisualizationConfiguration(
222
230
  // Presentation can be inline or outside the SelectionPresentationVariant
223
231
  presentationPath = presentationVariantAnnotation.fullyQualifiedName;
224
232
  visualizationAnnotations = visualizationAnnotations.concat(
225
- getVisualizationsFromPresentationVariant(presentationVariantAnnotation, visualizationPath, inConverterContext)
233
+ getVisualizationsFromPresentationVariant(
234
+ presentationVariantAnnotation,
235
+ visualizationPath,
236
+ inConverterContext,
237
+ isMacroOrMultipleView
238
+ )
226
239
  );
227
240
 
228
241
  break;
@@ -254,7 +267,7 @@ export function getDataVisualizationConfiguration(
254
267
  }
255
268
  });
256
269
  } else {
257
- tableVisualization = Table.createDefaultTableVisualization(inConverterContext);
270
+ tableVisualization = Table.createDefaultTableVisualization(inConverterContext, !isMacroOrMultipleView);
258
271
  inConverterContext.getDiagnostics().addIssue(IssueCategory.Annotation, IssueSeverity.Medium, IssueType.MISSING_LINEITEM);
259
272
  }
260
273
  const aVisualizations: any = [];