@sapui5/sap.fe.core 1.134.0 → 1.136.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 (395) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/ActionRuntime.js +6 -62
  4. package/src/sap/fe/core/ActionRuntime.ts +14 -65
  5. package/src/sap/fe/core/AppComponent.js +10 -2
  6. package/src/sap/fe/core/AppComponent.ts +6 -0
  7. package/src/sap/fe/core/AppStateHandler.js +9 -7
  8. package/src/sap/fe/core/AppStateHandler.ts +7 -5
  9. package/src/sap/fe/core/BaseController.js +1 -1
  10. package/src/sap/fe/core/CommonUtils.js +8 -4
  11. package/src/sap/fe/core/CommonUtils.ts +19 -4
  12. package/src/sap/fe/core/ExtensionAPI.js +7 -5
  13. package/src/sap/fe/core/ExtensionAPI.ts +5 -3
  14. package/src/sap/fe/core/IRowBindingInterface.js +1 -1
  15. package/src/sap/fe/core/InsightsFormattersExtension.js +1 -1
  16. package/src/sap/fe/core/PageController.js +36 -6
  17. package/src/sap/fe/core/PageController.ts +30 -0
  18. package/src/sap/fe/core/ResourceModel.js +1 -1
  19. package/src/sap/fe/core/ReuseComponent.js +1 -1
  20. package/src/sap/fe/core/TemplateComponent.js +1 -1
  21. package/src/sap/fe/core/TemplateModel.js +1 -1
  22. package/src/sap/fe/core/UIProvider.js +2 -2
  23. package/src/sap/fe/core/UIProvider.ts +3 -32
  24. package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +34 -16
  25. package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +39 -18
  26. package/src/sap/fe/core/buildingBlocks/IBuildingBlockOwnerComponent.js +1 -1
  27. package/src/sap/fe/core/buildingBlocks/TraceInfo.js +1 -1
  28. package/src/sap/fe/core/buildingBlocks/templating/AttributeModel.js +1 -1
  29. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockFormatter.js +1 -1
  30. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.js +2 -2
  31. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.ts +1 -0
  32. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +7 -7
  33. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +9 -9
  34. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.js +1 -1
  35. package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +5 -3
  36. package/src/sap/fe/core/controllerextensions/BaseControllerExtension.ts +3 -1
  37. package/src/sap/fe/core/controllerextensions/BusyLocker.js +1 -1
  38. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.js +15 -15
  39. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +19 -19
  40. package/src/sap/fe/core/controllerextensions/ContextSharing.js +1 -1
  41. package/src/sap/fe/core/controllerextensions/EditFlow.js +74 -93
  42. package/src/sap/fe/core/controllerextensions/EditFlow.ts +89 -108
  43. package/src/sap/fe/core/controllerextensions/Feedback.js +1 -1
  44. package/src/sap/fe/core/controllerextensions/InlineEditFlow.js +355 -0
  45. package/src/sap/fe/core/controllerextensions/InlineEditFlow.ts +387 -0
  46. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +1 -1
  47. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +1 -1
  48. package/src/sap/fe/core/controllerextensions/InternalRouting.js +36 -11
  49. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +36 -10
  50. package/src/sap/fe/core/controllerextensions/KPIManagement.js +1 -1
  51. package/src/sap/fe/core/controllerextensions/MessageHandler.js +36 -6
  52. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +41 -1
  53. package/src/sap/fe/core/controllerextensions/PageReady.js +5 -2
  54. package/src/sap/fe/core/controllerextensions/PageReady.ts +3 -0
  55. package/src/sap/fe/core/controllerextensions/Paginator.js +1 -1
  56. package/src/sap/fe/core/controllerextensions/Placeholder.js +1 -1
  57. package/src/sap/fe/core/controllerextensions/Recommendations.js +1 -1
  58. package/src/sap/fe/core/controllerextensions/Routing.js +9 -9
  59. package/src/sap/fe/core/controllerextensions/Routing.ts +4 -4
  60. package/src/sap/fe/core/controllerextensions/RoutingListener.js +1 -1
  61. package/src/sap/fe/core/controllerextensions/Share.js +1 -1
  62. package/src/sap/fe/core/controllerextensions/SideEffects.js +13 -6
  63. package/src/sap/fe/core/controllerextensions/SideEffects.ts +13 -6
  64. package/src/sap/fe/core/controllerextensions/Telemetry.js +1 -1
  65. package/src/sap/fe/core/controllerextensions/ViewState.js +1 -1
  66. package/src/sap/fe/core/controllerextensions/cards/CollaborationManager.js +14 -11
  67. package/src/sap/fe/core/controllerextensions/cards/CollaborationManager.ts +20 -14
  68. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +4 -12
  69. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +2 -10
  70. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +12 -2
  71. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +12 -0
  72. package/src/sap/fe/core/controllerextensions/dialog/ODataStrictDialog.js +1 -1
  73. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +1 -1
  74. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +111 -89
  75. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +140 -105
  76. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +137 -79
  77. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +133 -120
  78. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +3 -3
  79. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +4 -1
  80. package/src/sap/fe/core/controllerextensions/editFlow/editFlowConstants.js +1 -1
  81. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.js +26 -17
  82. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.ts +32 -23
  83. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.js +3 -3
  84. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.ts +1 -1
  85. package/src/sap/fe/core/controllerextensions/editFlow/operations/Operation.js +103 -23
  86. package/src/sap/fe/core/controllerextensions/editFlow/operations/Operation.ts +144 -53
  87. package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationMessage.js +29 -11
  88. package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationMessage.ts +39 -15
  89. package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.js +24 -22
  90. package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.ts +28 -26
  91. package/src/sap/fe/core/controllerextensions/editFlow/operations/actionHelper.js +1 -1
  92. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +6 -572
  93. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +25 -873
  94. package/src/sap/fe/core/controllerextensions/editFlow/operations.js +1 -1
  95. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +98 -56
  96. package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +102 -80
  97. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +5 -3
  98. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +7 -4
  99. package/src/sap/fe/core/controllerextensions/pageReady/DataQueryWatcher.js +1 -1
  100. package/src/sap/fe/core/controllerextensions/recommendations/Telemetry.js +1 -1
  101. package/src/sap/fe/core/controllerextensions/routing/ContextPathHelper.js +1 -1
  102. package/src/sap/fe/core/controllerextensions/routing/NavigationReason.js +1 -1
  103. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +1 -1
  104. package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.js +1 -1
  105. package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributorMixin.js +1 -1
  106. package/src/sap/fe/core/controls/Any.js +1 -1
  107. package/src/sap/fe/core/controls/AnyElement.js +1 -1
  108. package/src/sap/fe/core/controls/CommandExecution.js +1 -1
  109. package/src/sap/fe/core/controls/ComponentLoader.js +1 -1
  110. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.js +3 -3
  111. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.tsx +8 -1
  112. package/src/sap/fe/core/controls/DataWatcher.js +4 -3
  113. package/src/sap/fe/core/controls/DataWatcher.tsx +4 -1
  114. package/src/sap/fe/core/controls/FormElementWrapper.js +1 -1
  115. package/src/sap/fe/core/controls/HideFormGroupAutomatically.js +10 -4
  116. package/src/sap/fe/core/controls/HideFormGroupAutomatically.ts +13 -2
  117. package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +1 -1
  118. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.js +1 -1
  119. package/src/sap/fe/core/controls/inlineEditFlow/BeforeActionDialog.js +68 -0
  120. package/src/sap/fe/core/controls/inlineEditFlow/BeforeActionDialog.tsx +52 -0
  121. package/src/sap/fe/core/controls/inlineEditFlow/BeforeNavigationDialog.js +144 -0
  122. package/src/sap/fe/core/controls/inlineEditFlow/BeforeNavigationDialog.tsx +128 -0
  123. package/src/sap/fe/core/controls/inlineEditFlow/DraftExistsDialog.js +53 -0
  124. package/src/sap/fe/core/controls/inlineEditFlow/DraftExistsDialog.tsx +39 -0
  125. package/src/sap/fe/core/converters/ConverterContext.js +1 -1
  126. package/src/sap/fe/core/converters/ManifestSettings.js +3 -2
  127. package/src/sap/fe/core/converters/ManifestSettings.ts +42 -20
  128. package/src/sap/fe/core/converters/ManifestWrapper.js +8 -2
  129. package/src/sap/fe/core/converters/ManifestWrapper.ts +8 -0
  130. package/src/sap/fe/core/converters/MetaModelConverter.js +1 -1
  131. package/src/sap/fe/core/converters/TemplateConverter.js +1 -1
  132. package/src/sap/fe/core/converters/annotations/DataField.js +2 -2
  133. package/src/sap/fe/core/converters/annotations/DataField.ts +2 -1
  134. package/src/sap/fe/core/converters/controls/Common/Action.js +55 -6
  135. package/src/sap/fe/core/converters/controls/Common/Action.ts +59 -3
  136. package/src/sap/fe/core/converters/controls/Common/Chart.js +45 -6
  137. package/src/sap/fe/core/converters/controls/Common/Chart.ts +60 -9
  138. package/src/sap/fe/core/converters/controls/Common/Criticality.js +1 -1
  139. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +1 -1
  140. package/src/sap/fe/core/converters/controls/Common/Form.js +21 -5
  141. package/src/sap/fe/core/converters/controls/Common/Form.ts +25 -5
  142. package/src/sap/fe/core/converters/controls/Common/KPI.js +1 -1
  143. package/src/sap/fe/core/converters/controls/Common/Table.js +89 -1686
  144. package/src/sap/fe/core/converters/controls/Common/Table.ts +254 -2513
  145. package/src/sap/fe/core/converters/controls/Common/table/Columns.js +1701 -0
  146. package/src/sap/fe/core/converters/controls/Common/table/Columns.ts +2377 -0
  147. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +64 -15
  148. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +76 -14
  149. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +7 -36
  150. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +8 -46
  151. package/src/sap/fe/core/converters/controls/ListReport/FilterField.js +106 -0
  152. package/src/sap/fe/core/converters/controls/ListReport/FilterField.ts +129 -0
  153. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +10 -5
  154. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +8 -3
  155. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +1 -1
  156. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +5 -3
  157. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +11 -4
  158. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +7 -2
  159. package/src/sap/fe/core/converters/helpers/Aggregation.js +1 -1
  160. package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +1 -1
  161. package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +1 -1
  162. package/src/sap/fe/core/converters/helpers/ID.js +1 -1
  163. package/src/sap/fe/core/converters/helpers/InsightsHelpers.js +1 -1
  164. package/src/sap/fe/core/converters/helpers/IssueManager.js +1 -1
  165. package/src/sap/fe/core/converters/helpers/Key.js +1 -1
  166. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -1
  167. package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +1 -1
  168. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +30 -8
  169. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +40 -16
  170. package/src/sap/fe/core/converters/templates/ListReportConverter.js +5 -3
  171. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +5 -1
  172. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +1 -1
  173. package/src/sap/fe/core/designtime/AnnotationBasedChanges.js +184 -0
  174. package/src/sap/fe/core/designtime/AnnotationBasedChanges.ts +240 -0
  175. package/src/sap/fe/core/designtime/AppComponent.designtime.js +1 -1
  176. package/src/sap/fe/core/designtime/messagebundle.properties +11 -0
  177. package/src/sap/fe/core/designtime/messagebundle_ar.properties +7 -0
  178. package/src/sap/fe/core/designtime/messagebundle_bg.properties +7 -0
  179. package/src/sap/fe/core/designtime/messagebundle_ca.properties +7 -0
  180. package/src/sap/fe/core/designtime/messagebundle_cnr.properties +7 -0
  181. package/src/sap/fe/core/designtime/messagebundle_cs.properties +7 -0
  182. package/src/sap/fe/core/designtime/messagebundle_cy.properties +7 -0
  183. package/src/sap/fe/core/designtime/messagebundle_da.properties +7 -0
  184. package/src/sap/fe/core/designtime/messagebundle_de.properties +7 -0
  185. package/src/sap/fe/core/designtime/messagebundle_el.properties +7 -0
  186. package/src/sap/fe/core/designtime/messagebundle_en.properties +7 -0
  187. package/src/sap/fe/core/designtime/messagebundle_en_GB.properties +7 -0
  188. package/src/sap/fe/core/designtime/messagebundle_es.properties +7 -0
  189. package/src/sap/fe/core/designtime/messagebundle_es_MX.properties +7 -0
  190. package/src/sap/fe/core/designtime/messagebundle_et.properties +7 -0
  191. package/src/sap/fe/core/designtime/messagebundle_fi.properties +7 -0
  192. package/src/sap/fe/core/designtime/messagebundle_fr.properties +7 -0
  193. package/src/sap/fe/core/designtime/messagebundle_fr_CA.properties +7 -0
  194. package/src/sap/fe/core/designtime/messagebundle_hi.properties +7 -0
  195. package/src/sap/fe/core/designtime/messagebundle_hr.properties +7 -0
  196. package/src/sap/fe/core/designtime/messagebundle_hu.properties +7 -0
  197. package/src/sap/fe/core/designtime/messagebundle_id.properties +7 -0
  198. package/src/sap/fe/core/designtime/messagebundle_it.properties +7 -0
  199. package/src/sap/fe/core/designtime/messagebundle_iw.properties +7 -0
  200. package/src/sap/fe/core/designtime/messagebundle_ja.properties +7 -0
  201. package/src/sap/fe/core/designtime/messagebundle_kk.properties +7 -0
  202. package/src/sap/fe/core/designtime/messagebundle_ko.properties +7 -0
  203. package/src/sap/fe/core/designtime/messagebundle_lt.properties +7 -0
  204. package/src/sap/fe/core/designtime/messagebundle_lv.properties +7 -0
  205. package/src/sap/fe/core/designtime/messagebundle_mk.properties +7 -0
  206. package/src/sap/fe/core/designtime/messagebundle_ms.properties +7 -0
  207. package/src/sap/fe/core/designtime/messagebundle_nl.properties +7 -0
  208. package/src/sap/fe/core/designtime/messagebundle_no.properties +7 -0
  209. package/src/sap/fe/core/designtime/messagebundle_pl.properties +7 -0
  210. package/src/sap/fe/core/designtime/messagebundle_pt.properties +7 -0
  211. package/src/sap/fe/core/designtime/messagebundle_pt_PT.properties +7 -0
  212. package/src/sap/fe/core/designtime/messagebundle_ro.properties +7 -0
  213. package/src/sap/fe/core/designtime/messagebundle_ru.properties +7 -0
  214. package/src/sap/fe/core/designtime/messagebundle_sh.properties +7 -0
  215. package/src/sap/fe/core/designtime/messagebundle_sk.properties +7 -0
  216. package/src/sap/fe/core/designtime/messagebundle_sl.properties +7 -0
  217. package/src/sap/fe/core/designtime/messagebundle_sr.properties +7 -0
  218. package/src/sap/fe/core/designtime/messagebundle_sv.properties +7 -0
  219. package/src/sap/fe/core/designtime/messagebundle_th.properties +7 -0
  220. package/src/sap/fe/core/designtime/messagebundle_tr.properties +7 -0
  221. package/src/sap/fe/core/designtime/messagebundle_uk.properties +7 -0
  222. package/src/sap/fe/core/designtime/messagebundle_vi.properties +7 -0
  223. package/src/sap/fe/core/designtime/messagebundle_zh_CN.properties +7 -0
  224. package/src/sap/fe/core/designtime/messagebundle_zh_TW.properties +7 -0
  225. package/src/sap/fe/core/formatters/CollaborationFormatter.js +1 -1
  226. package/src/sap/fe/core/formatters/CriticalityFormatter.js +1 -1
  227. package/src/sap/fe/core/formatters/FPMFormatter.js +1 -1
  228. package/src/sap/fe/core/formatters/FiscalFormat.js +1 -1
  229. package/src/sap/fe/core/formatters/KPIFormatter.js +1 -1
  230. package/src/sap/fe/core/formatters/StandardFormatter.js +1 -1
  231. package/src/sap/fe/core/formatters/ValueFormatter.js +27 -12
  232. package/src/sap/fe/core/formatters/ValueFormatter.ts +25 -11
  233. package/src/sap/fe/core/fpm/Component.js +1 -1
  234. package/src/sap/fe/core/fpm/manifest.json +1 -1
  235. package/src/sap/fe/core/helpers/AdaptiveCardExpressionCompiler.js +1 -1
  236. package/src/sap/fe/core/helpers/AppStartupHelper.js +25 -4
  237. package/src/sap/fe/core/helpers/AppStartupHelper.ts +28 -2
  238. package/src/sap/fe/core/helpers/BindingHelper.js +4 -3
  239. package/src/sap/fe/core/helpers/BindingHelper.ts +2 -1
  240. package/src/sap/fe/core/helpers/BindingToolkitEvaluator.js +1 -1
  241. package/src/sap/fe/core/helpers/DeleteHelper.js +6 -12
  242. package/src/sap/fe/core/helpers/DeleteHelper.ts +4 -9
  243. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +1 -1
  244. package/src/sap/fe/core/helpers/EditState.js +1 -1
  245. package/src/sap/fe/core/helpers/ExcelFormatHelper.js +1 -1
  246. package/src/sap/fe/core/helpers/FPMHelper.js +9 -3
  247. package/src/sap/fe/core/helpers/FPMHelper.ts +13 -1
  248. package/src/sap/fe/core/helpers/HTTP503Handler.js +1 -1
  249. package/src/sap/fe/core/helpers/KeepAliveHelper.js +1 -1
  250. package/src/sap/fe/core/helpers/KeepAliveRefreshTypes.js +1 -1
  251. package/src/sap/fe/core/helpers/LoaderUtils.js +1 -1
  252. package/src/sap/fe/core/helpers/ManifestHelper.js +1 -1
  253. package/src/sap/fe/core/helpers/MessageStrip.js +1 -1
  254. package/src/sap/fe/core/helpers/MetaModelFunction.js +1 -1
  255. package/src/sap/fe/core/helpers/MetaPath.js +1 -1
  256. package/src/sap/fe/core/helpers/ModelHelper.js +15 -5
  257. package/src/sap/fe/core/helpers/ModelHelper.ts +15 -4
  258. package/src/sap/fe/core/helpers/PasteHelper.js +39 -40
  259. package/src/sap/fe/core/helpers/PasteHelper.ts +49 -51
  260. package/src/sap/fe/core/helpers/PromiseKeeper.js +1 -1
  261. package/src/sap/fe/core/helpers/RecommendationHelper.js +1 -1
  262. package/src/sap/fe/core/helpers/ResourceModelHelper.js +1 -1
  263. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +1 -1
  264. package/src/sap/fe/core/helpers/SizeHelper.js +1 -1
  265. package/src/sap/fe/core/helpers/StableIdHelper.js +1 -1
  266. package/src/sap/fe/core/helpers/StandardRecommendationHelper.js +1 -1
  267. package/src/sap/fe/core/helpers/Synchronization.js +1 -1
  268. package/src/sap/fe/core/helpers/TitleHelper.js +1 -1
  269. package/src/sap/fe/core/helpers/ToES6Promise.js +1 -1
  270. package/src/sap/fe/core/helpers/TypeGuards.js +1 -1
  271. package/src/sap/fe/core/helpers/WebSocket.js +11 -2
  272. package/src/sap/fe/core/helpers/WebSocket.ts +8 -0
  273. package/src/sap/fe/core/library.js +16 -4
  274. package/src/sap/fe/core/library.support.js +1 -1
  275. package/src/sap/fe/core/library.ts +1 -0
  276. package/src/sap/fe/core/manifestMerger/AddNewPage.js +1 -1
  277. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +1 -1
  278. package/src/sap/fe/core/messagebundle.properties +41 -2
  279. package/src/sap/fe/core/messagebundle_ar.properties +25 -4
  280. package/src/sap/fe/core/messagebundle_bg.properties +25 -4
  281. package/src/sap/fe/core/messagebundle_ca.properties +24 -3
  282. package/src/sap/fe/core/messagebundle_cnr.properties +25 -4
  283. package/src/sap/fe/core/messagebundle_cs.properties +23 -2
  284. package/src/sap/fe/core/messagebundle_cy.properties +24 -3
  285. package/src/sap/fe/core/messagebundle_da.properties +25 -4
  286. package/src/sap/fe/core/messagebundle_de.properties +28 -7
  287. package/src/sap/fe/core/messagebundle_el.properties +23 -2
  288. package/src/sap/fe/core/messagebundle_en.properties +25 -4
  289. package/src/sap/fe/core/messagebundle_en_GB.properties +25 -4
  290. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +26 -5
  291. package/src/sap/fe/core/messagebundle_es.properties +23 -2
  292. package/src/sap/fe/core/messagebundle_es_MX.properties +23 -2
  293. package/src/sap/fe/core/messagebundle_et.properties +23 -2
  294. package/src/sap/fe/core/messagebundle_fi.properties +23 -2
  295. package/src/sap/fe/core/messagebundle_fr.properties +26 -5
  296. package/src/sap/fe/core/messagebundle_fr_CA.properties +23 -2
  297. package/src/sap/fe/core/messagebundle_hi.properties +24 -3
  298. package/src/sap/fe/core/messagebundle_hr.properties +27 -6
  299. package/src/sap/fe/core/messagebundle_hu.properties +23 -2
  300. package/src/sap/fe/core/messagebundle_id.properties +23 -2
  301. package/src/sap/fe/core/messagebundle_it.properties +25 -4
  302. package/src/sap/fe/core/messagebundle_iw.properties +24 -3
  303. package/src/sap/fe/core/messagebundle_ja.properties +24 -3
  304. package/src/sap/fe/core/messagebundle_kk.properties +23 -2
  305. package/src/sap/fe/core/messagebundle_ko.properties +25 -4
  306. package/src/sap/fe/core/messagebundle_lt.properties +23 -2
  307. package/src/sap/fe/core/messagebundle_lv.properties +25 -4
  308. package/src/sap/fe/core/messagebundle_mk.properties +23 -2
  309. package/src/sap/fe/core/messagebundle_ms.properties +24 -3
  310. package/src/sap/fe/core/messagebundle_nl.properties +23 -2
  311. package/src/sap/fe/core/messagebundle_no.properties +23 -2
  312. package/src/sap/fe/core/messagebundle_pl.properties +25 -4
  313. package/src/sap/fe/core/messagebundle_pt.properties +25 -4
  314. package/src/sap/fe/core/messagebundle_pt_PT.properties +24 -3
  315. package/src/sap/fe/core/messagebundle_ro.properties +25 -4
  316. package/src/sap/fe/core/messagebundle_ru.properties +24 -3
  317. package/src/sap/fe/core/messagebundle_sh.properties +25 -4
  318. package/src/sap/fe/core/messagebundle_sk.properties +24 -3
  319. package/src/sap/fe/core/messagebundle_sl.properties +28 -7
  320. package/src/sap/fe/core/messagebundle_sr.properties +25 -4
  321. package/src/sap/fe/core/messagebundle_sv.properties +23 -2
  322. package/src/sap/fe/core/messagebundle_th.properties +25 -4
  323. package/src/sap/fe/core/messagebundle_tr.properties +23 -2
  324. package/src/sap/fe/core/messagebundle_uk.properties +25 -4
  325. package/src/sap/fe/core/messagebundle_vi.properties +25 -4
  326. package/src/sap/fe/core/messagebundle_zh_CN.properties +26 -5
  327. package/src/sap/fe/core/messagebundle_zh_TW.properties +24 -3
  328. package/src/sap/fe/core/rootView/Fcl.controller.js +11 -7
  329. package/src/sap/fe/core/rootView/Fcl.controller.ts +16 -7
  330. package/src/sap/fe/core/rootView/NavContainer.controller.js +3 -3
  331. package/src/sap/fe/core/rootView/NavContainer.controller.ts +1 -1
  332. package/src/sap/fe/core/rootView/RootViewBaseController.js +87 -35
  333. package/src/sap/fe/core/rootView/RootViewBaseController.ts +113 -57
  334. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +1 -1
  335. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +1 -1
  336. package/src/sap/fe/core/services/CollaborationManagerServiceFactory.js +29 -13
  337. package/src/sap/fe/core/services/CollaborationManagerServiceFactory.ts +27 -13
  338. package/src/sap/fe/core/services/CollaborativeToolsServiceFactory.js +1 -1
  339. package/src/sap/fe/core/services/ContextSharingServiceFactory.js +1 -1
  340. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +8 -2
  341. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +6 -0
  342. package/src/sap/fe/core/services/InlineEditServiceFactory.js +11 -5
  343. package/src/sap/fe/core/services/InlineEditServiceFactory.ts +9 -3
  344. package/src/sap/fe/core/services/NavigationServiceFactory.js +1 -1
  345. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +1 -1
  346. package/src/sap/fe/core/services/RoutingServiceFactory.js +14 -7
  347. package/src/sap/fe/core/services/RoutingServiceFactory.ts +11 -5
  348. package/src/sap/fe/core/services/ShellServicesFactory.js +5 -4
  349. package/src/sap/fe/core/services/ShellServicesFactory.ts +5 -3
  350. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +28 -4
  351. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +32 -3
  352. package/src/sap/fe/core/services/TelemetryServiceFactory.js +1 -1
  353. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +1 -1
  354. package/src/sap/fe/core/services/ValueHelpHistoryServiceFactory.js +1 -1
  355. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +1 -1
  356. package/src/sap/fe/core/services/valueHelpService/HistoryOptOutProvider.js +1 -1
  357. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +1 -1
  358. package/src/sap/fe/core/services/view/TemplatingErrorPage.view.xml +1 -1
  359. package/src/sap/fe/core/support/AnnotationIssue.support.js +1 -1
  360. package/src/sap/fe/core/support/CollectionFacetMissingID.support.js +1 -1
  361. package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.js +1 -1
  362. package/src/sap/fe/core/support/CommonHelper.js +1 -1
  363. package/src/sap/fe/core/support/Diagnostics.js +1 -1
  364. package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.js +1 -1
  365. package/src/sap/fe/core/templating/ActionHelper.js +1 -1
  366. package/src/sap/fe/core/templating/CommonFormatters.js +1 -1
  367. package/src/sap/fe/core/templating/CriticalityFormatters.js +1 -1
  368. package/src/sap/fe/core/templating/DataFieldFormatters.js +1 -1
  369. package/src/sap/fe/core/templating/DataModelPathHelper.js +1 -1
  370. package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
  371. package/src/sap/fe/core/templating/EntitySetHelper.js +199 -59
  372. package/src/sap/fe/core/templating/EntitySetHelper.ts +221 -61
  373. package/src/sap/fe/core/templating/EntityTypeHelper.js +1 -1
  374. package/src/sap/fe/core/templating/FieldControlHelper.js +1 -1
  375. package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
  376. package/src/sap/fe/core/templating/PropertyFormatters.js +1 -1
  377. package/src/sap/fe/core/templating/PropertyHelper.js +1 -1
  378. package/src/sap/fe/core/templating/SemanticObjectHelper.js +8 -10
  379. package/src/sap/fe/core/templating/SemanticObjectHelper.ts +11 -10
  380. package/src/sap/fe/core/templating/UIFormatters.js +5 -2
  381. package/src/sap/fe/core/templating/UIFormatters.ts +3 -0
  382. package/src/sap/fe/core/type/Date.js +1 -1
  383. package/src/sap/fe/core/type/DateTimeWithTimezone.js +1 -1
  384. package/src/sap/fe/core/type/EDM.js +1 -1
  385. package/src/sap/fe/core/type/Email.js +1 -1
  386. package/src/sap/fe/core/type/FiscalDate.js +1 -1
  387. package/src/sap/fe/core/type/InputMask.js +1 -1
  388. package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.js +0 -288
  389. package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.tsx +0 -208
  390. package/src/sap/fe/core/controllerextensions/editFlow/ODataOperation.js +0 -404
  391. package/src/sap/fe/core/controllerextensions/editFlow/ODataOperation.ts +0 -502
  392. package/src/sap/fe/core/designtime/TextArrangementChangeAction.js +0 -100
  393. package/src/sap/fe/core/designtime/TextArrangementChangeAction.ts +0 -134
  394. package/src/sap/fe/core/operationsHelper.js +0 -192
  395. package/src/sap/fe/core/operationsHelper.ts +0 -277
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
- * (c) Copyright 2009-2024 SAP SE. All rights reserved
3
+ * (c) Copyright 2009-2025 SAP SE. All rights reserved
4
4
  */
5
5
  sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/converters/annotations/DataField", "sap/fe/core/converters/controls/Common/Action", "sap/fe/core/converters/helpers/ConfigurableObject", "sap/fe/core/converters/helpers/Key", "sap/fe/core/helpers/StableIdHelper", "sap/fe/core/templating/DataModelPathHelper", "sap/ui/core/Lib", "../../ManifestSettings", "../../helpers/Aggregation", "../../helpers/ID", "../../helpers/InsightsHelpers"], function (Log, BindingToolkit, DataField, Action, ConfigurableObject, Key, StableIdHelper, DataModelPathHelper, Library, ManifestSettings, Aggregation, ID, InsightsHelpers) {
6
6
  "use strict";
@@ -20,6 +20,8 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/conver
20
20
  var KeyHelper = Key.KeyHelper;
21
21
  var insertCustomElements = ConfigurableObject.insertCustomElements;
22
22
  var OverrideType = ConfigurableObject.OverrideType;
23
+ var isMenuAIOperation = Action.isMenuAIOperation;
24
+ var isActionAIOperation = Action.isActionAIOperation;
23
25
  var getActionsFromManifest = Action.getActionsFromManifest;
24
26
  var isDataFieldForActionAbstract = DataField.isDataFieldForActionAbstract;
25
27
  var not = BindingToolkit.not;
@@ -51,7 +53,8 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/conver
51
53
  type: ActionType.DataFieldForAction,
52
54
  annotationPath: converterContext.getEntitySetBasedAnnotationPath(dataField.fullyQualifiedName),
53
55
  key,
54
- visible: getCompileExpressionForAction(dataField, converterContext)
56
+ visible: getCompileExpressionForAction(dataField, converterContext),
57
+ isAIOperation: isActionAIOperation(dataField) === true || undefined
55
58
  });
56
59
  }
57
60
  break;
@@ -72,7 +75,8 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/conver
72
75
  text: dataField.Label?.toString(),
73
76
  visible: getCompileExpressionForAction(dataField, converterContext),
74
77
  menu: dataField.Actions.map(action => getDataFieldAnnotationAction(action, converterContext)),
75
- key: KeyHelper.generateKeyFromDataField(dataField)
78
+ key: KeyHelper.generateKeyFromDataField(dataField),
79
+ isAIOperation: isMenuAIOperation(dataField.Actions) === true || undefined
76
80
  });
77
81
  }
78
82
  });
@@ -129,7 +133,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/conver
129
133
  const isControlVariant = variantManagement === VariantManagementType.Control ? true : false;
130
134
  // if personalization is set to false do not show any option
131
135
  if (personalization !== undefined && !personalization || personalization == "false") {
132
- return undefined;
136
+ return false;
133
137
  }
134
138
  if (typeof personalization === "object") {
135
139
  // Specific personalization options enabled in manifest. Use them as is.
@@ -156,6 +160,19 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/conver
156
160
  }
157
161
  }
158
162
  _exports.getP13nMode = getP13nMode;
163
+ function getHeaderInfo(visualizationPath, converterContext) {
164
+ const chartManifestSettings = converterContext.getManifestControlConfiguration(visualizationPath);
165
+ return {
166
+ header: chartManifestSettings.chartSettings?.header,
167
+ headerVisible: chartManifestSettings?.chartSettings?.headerVisible
168
+ };
169
+ }
170
+ _exports.getHeaderInfo = getHeaderInfo;
171
+ function getSelectionMode(visualizationPath, converterContext) {
172
+ const chartManifestSettings = converterContext.getManifestControlConfiguration(visualizationPath);
173
+ return chartManifestSettings.chartSettings?.selectionMode;
174
+ }
175
+ _exports.getSelectionMode = getSelectionMode;
159
176
  function getAggregatablePropertiesObject(aggProp) {
160
177
  let obj;
161
178
  if (aggProp?.Property) {
@@ -285,6 +302,23 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/conver
285
302
  const isInsightsVisible = getInsightsVisibility("Analytical", converterContext, visualizationPath);
286
303
  const isParameterizedEntitySet = converterContext.getParameterEntityType() ? true : false;
287
304
  const isInsightsEnabled = and(getInsightsEnablement(), isInsightsVisible);
305
+ const {
306
+ header,
307
+ headerVisible
308
+ } = getHeaderInfo(visualizationPath, converterContext);
309
+ const selectionMode = getSelectionMode(visualizationPath, converterContext);
310
+ const chartDimensionKeyAndRole = [];
311
+ chartAnnotation?.DimensionAttributes?.forEach(dimensionAttribute => {
312
+ const obj = {};
313
+ obj[dimensionAttribute?.Dimension?.value] = dimensionAttribute?.Role;
314
+ chartDimensionKeyAndRole.push(obj);
315
+ });
316
+ const chartMeasureKeyAndRole = [];
317
+ chartAnnotation?.MeasureAttributes?.forEach(measureAttribute => {
318
+ const obj = {};
319
+ obj[measureAttribute?.Measure?.value] = measureAttribute?.Role;
320
+ chartMeasureKeyAndRole.push({});
321
+ });
288
322
  return {
289
323
  type: VisualizationType.Chart,
290
324
  id: qualifier ? getChartID(isEntitySet ? entityName : navigationPropertyPath, qualifier, VisualizationType.Chart) : getChartID(isEntitySet ? entityName : navigationPropertyPath, VisualizationType.Chart),
@@ -309,7 +343,12 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/conver
309
343
  variantManagement: findVariantManagement(p13nMode, variantManagement),
310
344
  isInsightsEnabled: isInsightsEnabled,
311
345
  isInsightsVisible: isInsightsVisible,
312
- isParameterizedEntitySet: isParameterizedEntitySet
346
+ isParameterizedEntitySet: isParameterizedEntitySet,
347
+ header: header,
348
+ headerVisible: headerVisible,
349
+ selectionMode: selectionMode,
350
+ chartDimensionKeyAndRole: chartDimensionKeyAndRole,
351
+ chartMeasureKeyAndRole: chartMeasureKeyAndRole
313
352
  };
314
353
  }
315
354
  /**
@@ -406,4 +445,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/conver
406
445
  _exports.createBlankChartVisualization = createBlankChartVisualization;
407
446
  return _exports;
408
447
  }, false);
409
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRDaGFydEFjdGlvbnNGcm9tQW5ub3RhdGlvbnMiLCJjaGFydEFubm90YXRpb24iLCJ2aXN1YWxpemF0aW9uUGF0aCIsImNvbnZlcnRlckNvbnRleHQiLCJjaGFydEFjdGlvbnMiLCJBY3Rpb25zIiwiZm9yRWFjaCIsImRhdGFGaWVsZCIsImtleSIsIktleUhlbHBlciIsImdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZCIsImlzRGF0YUZpZWxkRm9yQWN0aW9uQWJzdHJhY3QiLCJJbmxpbmUiLCJEZXRlcm1pbmluZyIsIiRUeXBlIiwiQWN0aW9uVGFyZ2V0IiwiaXNCb3VuZCIsInB1c2giLCJ0eXBlIiwiQWN0aW9uVHlwZSIsIkRhdGFGaWVsZEZvckFjdGlvbiIsImFubm90YXRpb25QYXRoIiwiZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsInZpc2libGUiLCJnZXRDb21waWxlRXhwcmVzc2lvbkZvckFjdGlvbiIsIkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiIsImlzTmF2aWdhYmxlIiwiaXNBbm5vdGF0aW9uQWN0aW9uR3JvdXAiLCJNZW51IiwidGV4dCIsIkxhYmVsIiwidG9TdHJpbmciLCJtZW51IiwibWFwIiwiYWN0aW9uIiwiZ2V0RGF0YUZpZWxkQW5ub3RhdGlvbkFjdGlvbiIsImdldENoYXJ0QWN0aW9ucyIsImFBbm5vdGF0aW9uQWN0aW9ucyIsIm1hbmlmZXN0QWN0aW9ucyIsImdldEFjdGlvbnNGcm9tTWFuaWZlc3QiLCJnZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uIiwiYWN0aW9ucyIsImFjdGlvbk92ZXJ3cml0ZUNvbmZpZyIsImVuYWJsZWQiLCJPdmVycmlkZVR5cGUiLCJvdmVyd3JpdGUiLCJlbmFibGVPblNlbGVjdCIsImNvbW1hbmQiLCJwb3NpdGlvbiIsImluc2VydEN1c3RvbUVsZW1lbnRzIiwiY29tbWFuZEFjdGlvbnMiLCJfZXhwb3J0cyIsImdldFAxM25Nb2RlIiwibWFuaWZlc3RXcmFwcGVyIiwiZ2V0TWFuaWZlc3RXcmFwcGVyIiwiY2hhcnRNYW5pZmVzdFNldHRpbmdzIiwidmFyaWFudE1hbmFnZW1lbnQiLCJnZXRWYXJpYW50TWFuYWdlbWVudCIsImFQZXJzb25hbGl6YXRpb24iLCJwZXJzb25hbGl6YXRpb24iLCJjaGFydFNldHRpbmdzIiwiaXNDb250cm9sVmFyaWFudCIsIlZhcmlhbnRNYW5hZ2VtZW50VHlwZSIsIkNvbnRyb2wiLCJ1bmRlZmluZWQiLCJpdGVtIiwic29ydCIsImZpbHRlciIsImpvaW4iLCJnZXRBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzT2JqZWN0IiwiYWdnUHJvcCIsIm9iaiIsIlByb3BlcnR5IiwiJFByb3BlcnR5UGF0aCIsInZhbHVlIiwibmFtZSIsImNyZWF0ZUNoYXJ0VmlzdWFsaXphdGlvbiIsImRvTm90Q2hlY2tBcHBseVN1cHBvcnRlZCIsInNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRQYXRoIiwiYWdncmVnYXRpb25IZWxwZXIiLCJBZ2dyZWdhdGlvbkhlbHBlciIsImdldEVudGl0eVR5cGUiLCJpc0FuYWx5dGljc1N1cHBvcnRlZCIsIkVycm9yIiwiYVRyYW5zQWdncmVnYXRpb25zIiwiZ2V0VHJhbnNBZ2dyZWdhdGlvbnMiLCJhQ3VzdG9tQWdncmVnYXRlcyIsImdldEN1c3RvbUFnZ3JlZ2F0ZURlZmluaXRpb25zIiwicGFnZU1hbmlmZXN0U2V0dGluZ3MiLCJwMTNuTW9kZSIsIkxvZyIsIndhcm5pbmciLCJtQ3VzdG9tQWdncmVnYXRlcyIsImVudGl0eVR5cGUiLCJjdXN0b21BZ2dyZWdhdGUiLCJhQ29udGV4dERlZmluaW5nUHJvcGVydGllcyIsImFubm90YXRpb25zIiwiQWdncmVnYXRpb24iLCJDb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzIiwicXVhbGlmaWVyIiwicmVsYXRlZEN1c3RvbUFnZ3JlZ2F0ZVByb3BlcnR5IiwiZW50aXR5UHJvcGVydGllcyIsImZpbmQiLCJwcm9wZXJ0eSIsImxhYmVsIiwiQ29tbW9uIiwic29ydGFibGUiLCJzb3J0T3JkZXIiLCJjb250ZXh0RGVmaW5pbmdQcm9wZXJ0eSIsIm9DdHhEZWZQcm9wZXJ0eSIsIm1UcmFuc0FnZ3JlZ2F0aW9ucyIsIm9SZXNvdXJjZUJ1bmRsZUNvcmUiLCJMaWJyYXJ5IiwiZ2V0UmVzb3VyY2VCdW5kbGVGb3IiLCJlbGVtZW50IiwiTmFtZSIsInByb3BlcnR5UGF0aCIsIkFnZ3JlZ2F0YWJsZVByb3BlcnR5IiwiYWdncmVnYXRpb25NZXRob2QiLCJBZ2dyZWdhdGlvbk1ldGhvZCIsImdldFRleHQiLCJjdXN0b20iLCJhQWdnUHJvcHMiLCJnZXRBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzIiwiYUdycFByb3BzIiwiZ2V0R3JvdXBhYmxlUHJvcGVydGllcyIsIm1BcHBseVN1cHBvcnRlZCIsIkFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMiLCJHcm91cGFibGVQcm9wZXJ0aWVzIiwicHJvcCIsIm5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgiLCJzcGxpdCIsImxhc3RJbmRleE9mIiwibGVuZ3RoIiwic3Vic3RyaW5nIiwidGl0bGUiLCJUaXRsZSIsImRhdGFNb2RlbFBhdGgiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoIiwiaXNFbnRpdHlTZXQiLCJlbnRpdHlOYW1lIiwidGFyZ2V0RW50aXR5U2V0Iiwic3RhcnRpbmdFbnRpdHlTZXQiLCJzRmlsdGVyYmFySWQiLCJnZXRGaWx0ZXJCYXJJRCIsImdldENvbnRleHRQYXRoIiwib1ZpelByb3BlcnRpZXMiLCJwbG90QXJlYSIsIndpbmRvdyIsInN0YXJ0IiwiZW5kIiwibGVnZW5kR3JvdXAiLCJsYXlvdXQiLCJhdXRvQmluZE9uSW5pdCIsImdldFRlbXBsYXRlVHlwZSIsIlRlbXBsYXRlVHlwZSIsIk9iamVjdFBhZ2UiLCJMaXN0UmVwb3J0IiwiQW5hbHl0aWNhbExpc3RQYWdlIiwiaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyIsIm9uU2VnbWVudGVkQnV0dG9uUHJlc3NlZCIsImFsbG93ZWRUcmFuc2Zvcm1hdGlvbnMiLCJnZXRBbGxvd2VkVHJhbnNmb3JtYXRpb25zIiwiZW5hYmxlU2VhcmNoIiwiaW5jbHVkZXMiLCJpc0luc2lnaHRzVmlzaWJsZSIsImdldEluc2lnaHRzVmlzaWJpbGl0eSIsImlzUGFyYW1ldGVyaXplZEVudGl0eVNldCIsImdldFBhcmFtZXRlckVudGl0eVR5cGUiLCJpc0luc2lnaHRzRW5hYmxlZCIsImFuZCIsImdldEluc2lnaHRzRW5hYmxlbWVudCIsIlZpc3VhbGl6YXRpb25UeXBlIiwiQ2hhcnQiLCJpZCIsImdldENoYXJ0SUQiLCJjb2xsZWN0aW9uIiwiZ2V0VGFyZ2V0T2JqZWN0UGF0aCIsImFwaUlkIiwiZ2VuZXJhdGUiLCJuYXZpZ2F0aW9uUGF0aCIsImdldEFic29sdXRlQW5ub3RhdGlvblBhdGgiLCJmaWx0ZXJJZCIsInZpelByb3BlcnRpZXMiLCJKU09OIiwic3RyaW5naWZ5IiwiY3VzdG9tQWdnIiwidHJhbnNBZ2ciLCJhcHBseVN1cHBvcnRlZCIsImZpbmRWYXJpYW50TWFuYWdlbWVudCIsIk5vbmUiLCJjcmVhdGVDaGFydFZpc3VhbGl6YXRpb25Gb3JUZW1wbGF0aW5nIiwidmlzdWFsaXphdGlvbiIsImNvbXBpbGVFeHByZXNzaW9uIiwibm90IiwiZXF1YWwiLCJnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24iLCJVSSIsIkhpZGRlbiIsImdldFJlbGF0aXZlTW9kZWxQYXRoRnVuY3Rpb24iLCJjcmVhdGVCbGFua0NoYXJ0VmlzdWFsaXphdGlvbiIsIm11bHRpVmlld3MiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkNoYXJ0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUHJvcGVydHksIFByb3BlcnR5UGF0aCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBBZ2dyZWdhdGFibGVQcm9wZXJ0eVR5cGUsIEFnZ3JlZ2F0aW9uTWV0aG9kIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9BZ2dyZWdhdGlvblwiO1xuaW1wb3J0IHsgQWdncmVnYXRpb25Bbm5vdGF0aW9uVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0FnZ3JlZ2F0aW9uXCI7XG5pbXBvcnQgdHlwZSB7XG5cdENoYXJ0LFxuXHREYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHREYXRhRmllbGRGb3JBY3Rpb25Hcm91cCxcblx0RGF0YUZpZWxkRm9yQWN0aW9uR3JvdXBUeXBlcyxcblx0RGF0YUZpZWxkRm9yQWN0aW9uVHlwZXNcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgVUlBbm5vdGF0aW9uVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIHsgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGFuZCwgY29tcGlsZUV4cHJlc3Npb24sIGVxdWFsLCBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24sIG5vdCwgdHlwZSBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB0eXBlIHsgUGFnZUNvbnRleHRQYXRoVGFyZ2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvVGVtcGxhdGVDb252ZXJ0ZXJcIjtcbmltcG9ydCB7IGlzRGF0YUZpZWxkRm9yQWN0aW9uQWJzdHJhY3QgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9hbm5vdGF0aW9ucy9EYXRhRmllbGRcIjtcbmltcG9ydCB0eXBlIHtcblx0QW5ub3RhdGlvbkFjdGlvbixcblx0QW5ub3RhdGlvbkFjdGlvbkFjdGlvbkdyb3VwLFxuXHRCYXNlQWN0aW9uLFxuXHRDb21iaW5lZEFjdGlvbixcblx0Q3VzdG9tQWN0aW9uLFxuXHRPdmVycmlkZVR5cGVBY3Rpb25cbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0FjdGlvblwiO1xuaW1wb3J0IHsgZ2V0QWN0aW9uc0Zyb21NYW5pZmVzdCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB7IE92ZXJyaWRlVHlwZSwgaW5zZXJ0Q3VzdG9tRWxlbWVudHMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHsgS2V5SGVscGVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9LZXlcIjtcbmltcG9ydCB7IGdlbmVyYXRlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCB7IGdldFRhcmdldE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgTGlicmFyeSBmcm9tIFwic2FwL3VpL2NvcmUvTGliXCI7XG5pbXBvcnQgdHlwZSB7IEV4cGFuZFBhdGhUeXBlIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3R5cGVzL21ldGFtb2RlbF90eXBlc1wiO1xuaW1wb3J0IHR5cGUgQ29udmVydGVyQ29udGV4dCBmcm9tIFwiLi4vLi4vQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBDaGFydE1hbmlmZXN0Q29uZmlndXJhdGlvbiwgTWFuaWZlc3RBY3Rpb24gfSBmcm9tIFwiLi4vLi4vTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHsgQWN0aW9uVHlwZSwgVGVtcGxhdGVUeXBlLCBWYXJpYW50TWFuYWdlbWVudFR5cGUsIFZpc3VhbGl6YXRpb25UeXBlIH0gZnJvbSBcIi4uLy4uL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB0eXBlIE1hbmlmZXN0V3JhcHBlciBmcm9tIFwiLi4vLi4vTWFuaWZlc3RXcmFwcGVyXCI7XG5pbXBvcnQgeyBBZ2dyZWdhdGlvbkhlbHBlciB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0FnZ3JlZ2F0aW9uXCI7XG5pbXBvcnQgeyBnZXRDaGFydElELCBnZXRGaWx0ZXJCYXJJRCB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0lEXCI7XG5pbXBvcnQgeyBnZXRJbnNpZ2h0c0VuYWJsZW1lbnQsIGdldEluc2lnaHRzVmlzaWJpbGl0eSB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0luc2lnaHRzSGVscGVyc1wiO1xuaW1wb3J0IHR5cGUgeyBBY3R1YWxWaXN1YWxpemF0aW9uQW5ub3RhdGlvbnMgfSBmcm9tIFwiLi9EYXRhVmlzdWFsaXphdGlvblwiO1xuXG5leHBvcnQgdHlwZSBDaGFydEFwcGx5U3VwcG9ydGVkID0ge1xuXHQkVHlwZTogc3RyaW5nO1xuXHRlbmFibGVTZWFyY2g/OiBib29sZWFuO1xuXHRBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzPzogKEV4cGFuZFBhdGhUeXBlPFByb3BlcnR5UGF0aD4gJiB7IFByb3BlcnR5OiBFeHBhbmRQYXRoVHlwZTxQcm9wZXJ0eVBhdGg+IH0pW107XG5cdEdyb3VwYWJsZVByb3BlcnRpZXM/OiAoRXhwYW5kUGF0aFR5cGU8UHJvcGVydHlQYXRoPiAmIHsgUHJvcGVydHk6IEV4cGFuZFBhdGhUeXBlPFByb3BlcnR5UGF0aD4gfSlbXTtcbn07XG5leHBvcnQgdHlwZSBDaGFydFRlbXBsYXRlVmlzdWFsaXphdGlvbiA9IHtcblx0dHlwZTogVmlzdWFsaXphdGlvblR5cGUuQ2hhcnQ7XG5cdGlkOiBzdHJpbmc7XG5cdGFwaUlkOiBzdHJpbmc7XG5cdGVudGl0eU5hbWU6IHN0cmluZztcblx0Y29sbGVjdGlvbjogc3RyaW5nO1xuXHRhbm5vdGF0aW9uUGF0aDogc3RyaW5nO1xuXHRhcHBseVN1cHBvcnRlZDogQ2hhcnRBcHBseVN1cHBvcnRlZDtcblx0aXNQYXJhbWV0ZXJpemVkRW50aXR5U2V0PzogYm9vbGVhbjtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYgQ2hhcnRWaXN1YWxpemF0aW9uXG4gKi9cbmV4cG9ydCB0eXBlIENoYXJ0VmlzdWFsaXphdGlvbiA9IENoYXJ0VGVtcGxhdGVWaXN1YWxpemF0aW9uICYge1xuXHRlbnRpdHlOYW1lOiBzdHJpbmc7XG5cdHBlcnNvbmFsaXphdGlvbj86IHN0cmluZztcblx0bmF2aWdhdGlvblBhdGg6IHN0cmluZztcblx0ZmlsdGVySWQ/OiBzdHJpbmc7XG5cdHZpelByb3BlcnRpZXM6IHN0cmluZztcblx0YWN0aW9uczogQmFzZUFjdGlvbltdO1xuXHRjb21tYW5kQWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPjtcblx0dGl0bGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0YXV0b0JpbmRPbkluaXQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cdG9uU2VnbWVudGVkQnV0dG9uUHJlc3NlZDogc3RyaW5nO1xuXHR2aXNpYmxlOiBzdHJpbmc7XG5cdGN1c3RvbUFnZzogb2JqZWN0O1xuXHR0cmFuc0FnZzogb2JqZWN0O1xuXHRtdWx0aVZpZXdzPzogYm9vbGVhbjtcblx0dmFyaWFudE1hbmFnZW1lbnQ6IFZhcmlhbnRNYW5hZ2VtZW50VHlwZTtcblx0c2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFBhdGg/OiBzdHJpbmc7XG5cdGlzSW5zaWdodHNFbmFibGVkPzogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRpc0luc2lnaHRzVmlzaWJsZT86IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPjtcbn07XG5cbi8qKlxuICogTWV0aG9kIHRvIHJldHJpZXZlIGFsbCBjaGFydCBhY3Rpb25zIGZyb20gYW5ub3RhdGlvbnMuXG4gKiBAcGFyYW0gY2hhcnRBbm5vdGF0aW9uXG4gKiBAcGFyYW0gdmlzdWFsaXphdGlvblBhdGhcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgY2hhcnQgYWN0aW9ucyBmcm9tIHRoZSBhbm5vdGF0aW9uXG4gKi9cbmZ1bmN0aW9uIGdldENoYXJ0QWN0aW9uc0Zyb21Bbm5vdGF0aW9ucyhcblx0Y2hhcnRBbm5vdGF0aW9uOiBDaGFydCxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBBcnJheTxBbm5vdGF0aW9uQWN0aW9uIHwgQW5ub3RhdGlvbkFjdGlvbkFjdGlvbkdyb3VwPiB7XG5cdGNvbnN0IGNoYXJ0QWN0aW9uczogQXJyYXk8QW5ub3RhdGlvbkFjdGlvbiB8IEFubm90YXRpb25BY3Rpb25BY3Rpb25Hcm91cD4gPSBbXTtcblx0aWYgKGNoYXJ0QW5ub3RhdGlvbj8uQWN0aW9ucykge1xuXHRcdGNoYXJ0QW5ub3RhdGlvbi5BY3Rpb25zLmZvckVhY2goKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFGaWVsZEZvckFjdGlvbkdyb3VwVHlwZXMpID0+IHtcblx0XHRcdGNvbnN0IGtleSA9IEtleUhlbHBlci5nZW5lcmF0ZUtleUZyb21EYXRhRmllbGQoZGF0YUZpZWxkKTtcblx0XHRcdGlmIChpc0RhdGFGaWVsZEZvckFjdGlvbkFic3RyYWN0KGRhdGFGaWVsZCkgJiYgIWRhdGFGaWVsZC5JbmxpbmUgJiYgIWRhdGFGaWVsZC5EZXRlcm1pbmluZykge1xuXHRcdFx0XHRzd2l0Y2ggKGRhdGFGaWVsZC4kVHlwZSkge1xuXHRcdFx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uOlxuXHRcdFx0XHRcdFx0aWYgKGRhdGFGaWVsZC5BY3Rpb25UYXJnZXQgJiYgIWRhdGFGaWVsZC5BY3Rpb25UYXJnZXQuaXNCb3VuZCkge1xuXHRcdFx0XHRcdFx0XHRjaGFydEFjdGlvbnMucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0dHlwZTogQWN0aW9uVHlwZS5EYXRhRmllbGRGb3JBY3Rpb24sXG5cdFx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChkYXRhRmllbGQuZnVsbHlRdWFsaWZpZWROYW1lKSxcblx0XHRcdFx0XHRcdFx0XHRrZXksXG5cdFx0XHRcdFx0XHRcdFx0dmlzaWJsZTogZ2V0Q29tcGlsZUV4cHJlc3Npb25Gb3JBY3Rpb24oZGF0YUZpZWxkLCBjb252ZXJ0ZXJDb250ZXh0KVxuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb246XG5cdFx0XHRcdFx0XHRjaGFydEFjdGlvbnMucHVzaCh7XG5cdFx0XHRcdFx0XHRcdHR5cGU6IEFjdGlvblR5cGUuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uLFxuXHRcdFx0XHRcdFx0XHRhbm5vdGF0aW9uUGF0aDogY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKGRhdGFGaWVsZC5mdWxseVF1YWxpZmllZE5hbWUpLFxuXHRcdFx0XHRcdFx0XHRrZXksXG5cdFx0XHRcdFx0XHRcdHZpc2libGU6IGdldENvbXBpbGVFeHByZXNzaW9uRm9yQWN0aW9uKGRhdGFGaWVsZCwgY29udmVydGVyQ29udGV4dCksXG5cdFx0XHRcdFx0XHRcdGlzTmF2aWdhYmxlOiB0cnVlXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc0Fubm90YXRpb25BY3Rpb25Hcm91cChkYXRhRmllbGQpKSB7XG5cdFx0XHRcdGNoYXJ0QWN0aW9ucy5wdXNoKHtcblx0XHRcdFx0XHR0eXBlOiBBY3Rpb25UeXBlLk1lbnUsXG5cdFx0XHRcdFx0dGV4dDogZGF0YUZpZWxkLkxhYmVsPy50b1N0cmluZygpLFxuXHRcdFx0XHRcdHZpc2libGU6IGdldENvbXBpbGVFeHByZXNzaW9uRm9yQWN0aW9uKGRhdGFGaWVsZCwgY29udmVydGVyQ29udGV4dCksXG5cdFx0XHRcdFx0bWVudTogZGF0YUZpZWxkLkFjdGlvbnMubWFwKChhY3Rpb24pID0+XG5cdFx0XHRcdFx0XHRnZXREYXRhRmllbGRBbm5vdGF0aW9uQWN0aW9uKGFjdGlvbiBhcyBEYXRhRmllbGRGb3JBY3Rpb25UeXBlcywgY29udmVydGVyQ29udGV4dClcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdGtleTogS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpXG5cdFx0XHRcdH0gYXMgQW5ub3RhdGlvbkFjdGlvbkFjdGlvbkdyb3VwKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gY2hhcnRBY3Rpb25zO1xufVxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIGRhdGFGaWVsZCBpcyBhIERhdGFGaWVsZEZvckFjdGlvbkdyb3VwLlxuICogQHBhcmFtIGRhdGFGaWVsZCBUaGUgZGF0YUZpZWxkIHRvIGNoZWNrLlxuICogQHJldHVybnMgVGhlIGRhdGFGaWVsZCBpZiBpdCBtYXRjaGVzIERhdGFGaWVsZEZvckFjdGlvbkdyb3VwLlxuICovXG5mdW5jdGlvbiBpc0Fubm90YXRpb25BY3Rpb25Hcm91cChkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpOiBkYXRhRmllbGQgaXMgRGF0YUZpZWxkRm9yQWN0aW9uR3JvdXAge1xuXHRyZXR1cm4gZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb25Hcm91cDtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGFuZCByZXR1cm5zIERhdGFGaWVsZEZvckFjdGlvbiBmb3IgbWVudSBvZiBEYXRhRmllbGRGb3JBY3Rpb25Hcm91cC5cbiAqIEBwYXJhbSBkYXRhRmllbGQgVGhlIGRhdGFmaWVsZCB0byBnZXQgdGhlIGFubm90YXRpb24gYWN0aW9uIGZyb20uXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHQuXG4gKiBAcmV0dXJucyBBbiBhbm5vdGF0aW9uIGFjdGlvbi5cbiAqL1xuZnVuY3Rpb24gZ2V0RGF0YUZpZWxkQW5ub3RhdGlvbkFjdGlvbihcblx0ZGF0YUZpZWxkOiBEYXRhRmllbGRGb3JBY3Rpb25UeXBlcyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBBbm5vdGF0aW9uQWN0aW9uIHtcblx0cmV0dXJuIHtcblx0XHR0eXBlOiBBY3Rpb25UeXBlLkRhdGFGaWVsZEZvckFjdGlvbixcblx0XHRhbm5vdGF0aW9uUGF0aDogY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKGRhdGFGaWVsZC5mdWxseVF1YWxpZmllZE5hbWUpLFxuXHRcdGtleTogS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpLFxuXHRcdHZpc2libGU6IGdldENvbXBpbGVFeHByZXNzaW9uRm9yQWN0aW9uKGRhdGFGaWVsZCwgY29udmVydGVyQ29udGV4dClcblx0fTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENoYXJ0QWN0aW9ucyhcblx0Y2hhcnRBbm5vdGF0aW9uOiBDaGFydCxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBDb21iaW5lZEFjdGlvbiB7XG5cdGNvbnN0IGFBbm5vdGF0aW9uQWN0aW9ucyA9IGdldENoYXJ0QWN0aW9uc0Zyb21Bbm5vdGF0aW9ucyhjaGFydEFubm90YXRpb24sIHZpc3VhbGl6YXRpb25QYXRoLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgbWFuaWZlc3RBY3Rpb25zID0gZ2V0QWN0aW9uc0Zyb21NYW5pZmVzdChcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb248Q2hhcnRNYW5pZmVzdENvbmZpZ3VyYXRpb24+KHZpc3VhbGl6YXRpb25QYXRoKS5hY3Rpb25zIGFzIFJlY29yZDxcblx0XHRcdHN0cmluZyxcblx0XHRcdE1hbmlmZXN0QWN0aW9uXG5cdFx0Pixcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdGFBbm5vdGF0aW9uQWN0aW9uc1xuXHQpO1xuXHRjb25zdCBhY3Rpb25PdmVyd3JpdGVDb25maWc6IE92ZXJyaWRlVHlwZUFjdGlvbiA9IHtcblx0XHRlbmFibGVkOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdGVuYWJsZU9uU2VsZWN0OiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdHZpc2libGU6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0Y29tbWFuZDogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRwb3NpdGlvbjogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZVxuXHR9O1xuXHRjb25zdCBjaGFydEFjdGlvbnMgPSBpbnNlcnRDdXN0b21FbGVtZW50czxCYXNlQWN0aW9uPihhQW5ub3RhdGlvbkFjdGlvbnMsIG1hbmlmZXN0QWN0aW9ucy5hY3Rpb25zLCBhY3Rpb25PdmVyd3JpdGVDb25maWcpO1xuXHRyZXR1cm4ge1xuXHRcdGFjdGlvbnM6IGNoYXJ0QWN0aW9ucyxcblx0XHRjb21tYW5kQWN0aW9uczogbWFuaWZlc3RBY3Rpb25zLmNvbW1hbmRBY3Rpb25zXG5cdH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQMTNuTW9kZSh2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRjb25zdCBtYW5pZmVzdFdyYXBwZXI6IE1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cdGNvbnN0IGNoYXJ0TWFuaWZlc3RTZXR0aW5nczogQ2hhcnRNYW5pZmVzdENvbmZpZ3VyYXRpb24gPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb24odmlzdWFsaXphdGlvblBhdGgpO1xuXHRjb25zdCB2YXJpYW50TWFuYWdlbWVudDogVmFyaWFudE1hbmFnZW1lbnRUeXBlID0gbWFuaWZlc3RXcmFwcGVyLmdldFZhcmlhbnRNYW5hZ2VtZW50KCk7XG5cdGNvbnN0IGFQZXJzb25hbGl6YXRpb246IHN0cmluZ1tdID0gW107XG5cdC8vIFBlcnNvbmFsaXphdGlvbiBjb25maWd1cmVkIGluIG1hbmlmZXN0LlxuXHRjb25zdCBwZXJzb25hbGl6YXRpb24gPSBjaGFydE1hbmlmZXN0U2V0dGluZ3M/LmNoYXJ0U2V0dGluZ3M/LnBlcnNvbmFsaXphdGlvbjtcblx0Y29uc3QgaXNDb250cm9sVmFyaWFudCA9IHZhcmlhbnRNYW5hZ2VtZW50ID09PSBWYXJpYW50TWFuYWdlbWVudFR5cGUuQ29udHJvbCA/IHRydWUgOiBmYWxzZTtcblx0Ly8gaWYgcGVyc29uYWxpemF0aW9uIGlzIHNldCB0byBmYWxzZSBkbyBub3Qgc2hvdyBhbnkgb3B0aW9uXG5cdGlmICgocGVyc29uYWxpemF0aW9uICE9PSB1bmRlZmluZWQgJiYgIXBlcnNvbmFsaXphdGlvbikgfHwgcGVyc29uYWxpemF0aW9uID09IFwiZmFsc2VcIikge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0aWYgKHR5cGVvZiBwZXJzb25hbGl6YXRpb24gPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBTcGVjaWZpYyBwZXJzb25hbGl6YXRpb24gb3B0aW9ucyBlbmFibGVkIGluIG1hbmlmZXN0LiBVc2UgdGhlbSBhcyBpcy5cblx0XHRpZiAocGVyc29uYWxpemF0aW9uLnR5cGUpIHtcblx0XHRcdGFQZXJzb25hbGl6YXRpb24ucHVzaChcIlR5cGVcIik7XG5cdFx0fVxuXHRcdGlmIChwZXJzb25hbGl6YXRpb24uaXRlbSkge1xuXHRcdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiSXRlbVwiKTtcblx0XHR9XG5cdFx0aWYgKHBlcnNvbmFsaXphdGlvbi5zb3J0KSB7XG5cdFx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJTb3J0XCIpO1xuXHRcdH1cblx0XHRpZiAocGVyc29uYWxpemF0aW9uLmZpbHRlcikge1xuXHRcdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiRmlsdGVyXCIpO1xuXHRcdH1cblx0XHRyZXR1cm4gYVBlcnNvbmFsaXphdGlvbi5qb2luKFwiLFwiKTtcblx0fSBlbHNlIGlmIChpc0NvbnRyb2xWYXJpYW50IHx8ICEhcGVyc29uYWxpemF0aW9uKSB7XG5cdFx0Ly8gbWFuaWZlc3QgaGFzIHBlcnNvbmFsaXphdGlvbiBjb25maWd1cmVkLCBjaGVjayBpZiBpdCdzIHRydWVcblx0XHQvLyBpZiBtYW5pZmVzdCBkb2Vzbid0IGhhdmUgcGVyc29uYWxpemF0aW9uLCBjaGVjayBmb3IgdmFyaWFudCBtYW5hZ2VtZW50IGlzIHNldCB0byBjb250cm9sXG5cdFx0cmV0dXJuIFwiU29ydCxUeXBlLEl0ZW0sRmlsdGVyXCI7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gaWYgbWFuaWZlc3QgZG9lc24ndCBoYXZlIHBlcnNvbmFsaXphdGlvbiwgc2hvdyBkZWZhdWx0IG9wdGlvbnMgd2l0aG91dCBmaWx0ZXJcblx0XHRyZXR1cm4gXCJTb3J0LFR5cGUsSXRlbVwiO1xuXHR9XG59XG5leHBvcnQgdHlwZSBDaGFydEN1c3RvbUFnZ3JlZ2F0ZSA9IHtcblx0bmFtZTogc3RyaW5nO1xuXHRsYWJlbDogc3RyaW5nO1xuXHRzb3J0YWJsZTogYm9vbGVhbjtcblx0c29ydE9yZGVyOiBcImJvdGhcIjtcblx0Y29udGV4dERlZmluaW5nUHJvcGVydHk6IHN0cmluZ1tdO1xufTtcblxuZXhwb3J0IHR5cGUgVHJhbnNBZ2cgPSB7XG5cdG5hbWU6IHN0cmluZztcblx0cHJvcGVydHlQYXRoOiBzdHJpbmc7XG5cdGFnZ3JlZ2F0aW9uTWV0aG9kOiBBZ2dyZWdhdGlvbk1ldGhvZDtcblx0bGFiZWw6IHN0cmluZztcblx0c29ydGFibGU6IGJvb2xlYW47XG5cdHNvcnRPcmRlcjogXCJib3RoXCI7XG5cdGN1c3RvbTogYm9vbGVhbjtcbn07XG5mdW5jdGlvbiBnZXRBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzT2JqZWN0KGFnZ1Byb3A6IEFnZ3JlZ2F0YWJsZVByb3BlcnR5VHlwZSB8IFByb3BlcnR5KTogeyBQcm9wZXJ0eTogeyAkUHJvcGVydHlQYXRoOiBzdHJpbmcgfSB9IHtcblx0bGV0IG9iajtcblx0aWYgKChhZ2dQcm9wIGFzIEFnZ3JlZ2F0YWJsZVByb3BlcnR5VHlwZSk/LlByb3BlcnR5KSB7XG5cdFx0b2JqID0ge1xuXHRcdFx0UHJvcGVydHk6IHtcblx0XHRcdFx0JFByb3BlcnR5UGF0aDogKGFnZ1Byb3AgYXMgQWdncmVnYXRhYmxlUHJvcGVydHlUeXBlKT8uUHJvcGVydHk/LnZhbHVlXG5cdFx0XHR9XG5cdFx0fTtcblx0fSBlbHNlIHtcblx0XHRvYmogPSB7XG5cdFx0XHRQcm9wZXJ0eToge1xuXHRcdFx0XHQkUHJvcGVydHlQYXRoOiAoYWdnUHJvcCBhcyBQcm9wZXJ0eSk/Lm5hbWVcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cdHJldHVybiBvYmo7XG59XG4vKipcbiAqIENyZWF0ZSB0aGUgQ2hhcnRWaXN1YWxpemF0aW9uIGNvbmZpZ3VyYXRpb24gdGhhdCB3aWxsIGJlIHVzZWQgdG8gZGlzcGxheSBhIGNoYXJ0IHVzaW5nIHRoZSBDaGFydCBidWlsZGluZyBibG9jay5cbiAqIEBwYXJhbSBjaGFydEFubm90YXRpb24gVGhlIHRhcmdldGVkIGNoYXJ0IGFubm90YXRpb25cbiAqIEBwYXJhbSB2aXN1YWxpemF0aW9uUGF0aCBUaGUgcGF0aCBvZiB0aGUgdmlzdWFsaXphdGlvbiBhbm5vdGF0aW9uXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSBkb05vdENoZWNrQXBwbHlTdXBwb3J0ZWQgRmxhZyB0aGF0IGluZGljYXRlcyB3aGV0aGVyIEFwcGx5U3VwcG9ydGVkIG5lZWRzIHRvIGJlIGNoZWNrZWQgb3Igbm90XG4gKiBAcGFyYW0gc2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFBhdGhcbiAqIEByZXR1cm5zIFRoZSBjaGFydCB2aXN1YWxpemF0aW9uIGJhc2VkIG9uIHRoZSBhbm5vdGF0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDaGFydFZpc3VhbGl6YXRpb24oXG5cdGNoYXJ0QW5ub3RhdGlvbjogQ2hhcnQsXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0ZG9Ob3RDaGVja0FwcGx5U3VwcG9ydGVkPzogYm9vbGVhbixcblx0c2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFBhdGg/OiBzdHJpbmdcbik6IENoYXJ0VmlzdWFsaXphdGlvbiB7XG5cdGNvbnN0IGFnZ3JlZ2F0aW9uSGVscGVyID0gbmV3IEFnZ3JlZ2F0aW9uSGVscGVyKGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLCBjb252ZXJ0ZXJDb250ZXh0LCB0cnVlKTsgLy8gcGFzc2luZyB0aGUgbGFzdCBwYXJhbWV0ZXIgYXMgdHJ1ZSB0byBjb25zaWRlciB0aGUgb2xkIGFubm90YXRpb25zIGkuZS4gQWdncmVnYXRpb24uQWdncmVnYXRhYmxlIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGluIGNhc2Ugb2YgY2hhcnRcblx0aWYgKCFkb05vdENoZWNrQXBwbHlTdXBwb3J0ZWQgJiYgIWFnZ3JlZ2F0aW9uSGVscGVyLmlzQW5hbHl0aWNzU3VwcG9ydGVkKCkpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJBcHBseVN1cHBvcnRlZCBpcyBub3QgYWRkZWQgdG8gdGhlIGFubm90YXRpb25zXCIpO1xuXHR9XG5cdGNvbnN0IGFUcmFuc0FnZ3JlZ2F0aW9ucyA9IGFnZ3JlZ2F0aW9uSGVscGVyLmdldFRyYW5zQWdncmVnYXRpb25zKCk7XG5cdGNvbnN0IGFDdXN0b21BZ2dyZWdhdGVzID0gYWdncmVnYXRpb25IZWxwZXIuZ2V0Q3VzdG9tQWdncmVnYXRlRGVmaW5pdGlvbnMoKTtcblx0Y29uc3QgcGFnZU1hbmlmZXN0U2V0dGluZ3M6IE1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cdGNvbnN0IHZhcmlhbnRNYW5hZ2VtZW50OiBWYXJpYW50TWFuYWdlbWVudFR5cGUgPSBwYWdlTWFuaWZlc3RTZXR0aW5ncy5nZXRWYXJpYW50TWFuYWdlbWVudCgpO1xuXHRjb25zdCBwMTNuTW9kZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gZ2V0UDEzbk1vZGUodmlzdWFsaXphdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRpZiAocDEzbk1vZGUgPT09IHVuZGVmaW5lZCAmJiB2YXJpYW50TWFuYWdlbWVudCA9PT0gXCJDb250cm9sXCIpIHtcblx0XHRMb2cud2FybmluZyhcIlZhcmlhbnQgTWFuYWdlbWVudCBjYW5ub3QgYmUgZW5hYmxlZCB3aGVuIHBlcnNvbmFsaXphdGlvbiBpcyBkaXNhYmxlZFwiKTtcblx0fVxuXHRjb25zdCBtQ3VzdG9tQWdncmVnYXRlczogUmVjb3JkPHN0cmluZywgb2JqZWN0PiA9IHt9O1xuXHRpZiAoYUN1c3RvbUFnZ3JlZ2F0ZXMpIHtcblx0XHRjb25zdCBlbnRpdHlUeXBlID0gYWdncmVnYXRpb25IZWxwZXIuZ2V0RW50aXR5VHlwZSgpO1xuXHRcdGZvciAoY29uc3QgY3VzdG9tQWdncmVnYXRlIG9mIGFDdXN0b21BZ2dyZWdhdGVzKSB7XG5cdFx0XHRjb25zdCBhQ29udGV4dERlZmluaW5nUHJvcGVydGllcyA9IGN1c3RvbUFnZ3JlZ2F0ZT8uYW5ub3RhdGlvbnM/LkFnZ3JlZ2F0aW9uPy5Db250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzO1xuXHRcdFx0Y29uc3QgcXVhbGlmaWVyID0gY3VzdG9tQWdncmVnYXRlPy5xdWFsaWZpZXI7XG5cdFx0XHRjb25zdCByZWxhdGVkQ3VzdG9tQWdncmVnYXRlUHJvcGVydHkgPSBxdWFsaWZpZXIgJiYgZW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzLmZpbmQoKHByb3BlcnR5KSA9PiBwcm9wZXJ0eS5uYW1lID09PSBxdWFsaWZpZXIpO1xuXHRcdFx0Y29uc3QgbGFiZWwgPSByZWxhdGVkQ3VzdG9tQWdncmVnYXRlUHJvcGVydHkgJiYgcmVsYXRlZEN1c3RvbUFnZ3JlZ2F0ZVByb3BlcnR5Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5MYWJlbD8udG9TdHJpbmcoKTtcblx0XHRcdG1DdXN0b21BZ2dyZWdhdGVzW3F1YWxpZmllcl0gPSB7XG5cdFx0XHRcdG5hbWU6IHF1YWxpZmllcixcblx0XHRcdFx0bGFiZWw6IGxhYmVsIHx8IGBDdXN0b20gQWdncmVnYXRlICgke3F1YWxpZmllcn0pYCxcblx0XHRcdFx0c29ydGFibGU6IHRydWUsXG5cdFx0XHRcdHNvcnRPcmRlcjogXCJib3RoXCIsXG5cdFx0XHRcdGNvbnRleHREZWZpbmluZ1Byb3BlcnR5OiBhQ29udGV4dERlZmluaW5nUHJvcGVydGllc1xuXHRcdFx0XHRcdD8gYUNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMubWFwKChvQ3R4RGVmUHJvcGVydHkpID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIG9DdHhEZWZQcm9wZXJ0eS52YWx1ZTtcblx0XHRcdFx0XHQgIH0pXG5cdFx0XHRcdFx0OiBbXVxuXHRcdFx0fTtcblx0XHR9XG5cdH1cblxuXHRjb25zdCBtVHJhbnNBZ2dyZWdhdGlvbnM6IFJlY29yZDxzdHJpbmcsIFRyYW5zQWdnPiA9IHt9O1xuXHRjb25zdCBvUmVzb3VyY2VCdW5kbGVDb3JlID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpITtcblx0aWYgKGFUcmFuc0FnZ3JlZ2F0aW9ucykge1xuXHRcdGZvciAoY29uc3QgZWxlbWVudCBvZiBhVHJhbnNBZ2dyZWdhdGlvbnMpIHtcblx0XHRcdG1UcmFuc0FnZ3JlZ2F0aW9uc1tlbGVtZW50Lk5hbWUgYXMgc3RyaW5nXSA9IHtcblx0XHRcdFx0bmFtZTogZWxlbWVudC5OYW1lIGFzIHN0cmluZyxcblx0XHRcdFx0cHJvcGVydHlQYXRoOiBlbGVtZW50LkFnZ3JlZ2F0YWJsZVByb3BlcnR5LnZhbHVlLFxuXHRcdFx0XHRhZ2dyZWdhdGlvbk1ldGhvZDogZWxlbWVudC5BZ2dyZWdhdGlvbk1ldGhvZCxcblx0XHRcdFx0bGFiZWw6IGVsZW1lbnQ/LmFubm90YXRpb25zPy5Db21tb24/LkxhYmVsXG5cdFx0XHRcdFx0PyBlbGVtZW50Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5MYWJlbD8udG9TdHJpbmcoKVxuXHRcdFx0XHRcdDogYCR7b1Jlc291cmNlQnVuZGxlQ29yZS5nZXRUZXh0KFwiQUdHUkVHQVRBQkxFX1BST1BFUlRZXCIpfSAoJHtlbGVtZW50Lk5hbWV9KWAsXG5cdFx0XHRcdHNvcnRhYmxlOiB0cnVlLFxuXHRcdFx0XHRzb3J0T3JkZXI6IFwiYm90aFwiLFxuXHRcdFx0XHRjdXN0b206IGZhbHNlXG5cdFx0XHR9O1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IGFBZ2dQcm9wcyA9IGFnZ3JlZ2F0aW9uSGVscGVyLmdldEFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMoKTtcblx0Y29uc3QgYUdycFByb3BzID0gYWdncmVnYXRpb25IZWxwZXIuZ2V0R3JvdXBhYmxlUHJvcGVydGllcygpO1xuXHRjb25zdCBtQXBwbHlTdXBwb3J0ZWQgPSB7fSBhcyBDaGFydEFwcGx5U3VwcG9ydGVkO1xuXHRtQXBwbHlTdXBwb3J0ZWQuJFR5cGUgPSBBZ2dyZWdhdGlvbkFubm90YXRpb25UeXBlcy5BcHBseVN1cHBvcnRlZFR5cGU7XG5cdG1BcHBseVN1cHBvcnRlZC5BZ2dyZWdhdGFibGVQcm9wZXJ0aWVzID0gW107XG5cdG1BcHBseVN1cHBvcnRlZC5Hcm91cGFibGVQcm9wZXJ0aWVzID0gW107XG5cblx0aWYgKGFBZ2dQcm9wcykge1xuXHRcdG1BcHBseVN1cHBvcnRlZC5BZ2dyZWdhdGFibGVQcm9wZXJ0aWVzID0gYUFnZ1Byb3BzLm1hcCgocHJvcCkgPT5cblx0XHRcdGdldEFnZ3JlZ2F0YWJsZVByb3BlcnRpZXNPYmplY3QocHJvcClcblx0XHQpIGFzIChFeHBhbmRQYXRoVHlwZTxQcm9wZXJ0eVBhdGg+ICYgeyBQcm9wZXJ0eTogRXhwYW5kUGF0aFR5cGU8UHJvcGVydHlQYXRoPiB9KVtdO1xuXHR9XG5cblx0aWYgKGFHcnBQcm9wcykge1xuXHRcdG1BcHBseVN1cHBvcnRlZC5Hcm91cGFibGVQcm9wZXJ0aWVzID0gYUdycFByb3BzLm1hcCgocHJvcCkgPT4gKHtcblx0XHRcdFtcIiRQcm9wZXJ0eVBhdGhcIl06IHByb3AudmFsdWVcblx0XHR9KSkgYXMgKEV4cGFuZFBhdGhUeXBlPFByb3BlcnR5UGF0aD4gJiB7IFByb3BlcnR5OiBFeHBhbmRQYXRoVHlwZTxQcm9wZXJ0eVBhdGg+IH0pW107XG5cdH1cblxuXHRjb25zdCBjaGFydEFjdGlvbnMgPSBnZXRDaGFydEFjdGlvbnMoY2hhcnRBbm5vdGF0aW9uLCB2aXN1YWxpemF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCk7XG5cdGxldCBbbmF2aWdhdGlvblByb3BlcnR5UGF0aCAvKiwgYW5ub3RhdGlvblBhdGgqL10gPSB2aXN1YWxpemF0aW9uUGF0aC5zcGxpdChcIkBcIik7XG5cdGlmIChuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxhc3RJbmRleE9mKFwiL1wiKSA9PT0gbmF2aWdhdGlvblByb3BlcnR5UGF0aC5sZW5ndGggLSAxKSB7XG5cdFx0Ly8gRHJvcCB0cmFpbGluZyBzbGFzaFxuXHRcdG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPSBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLnN1YnN0cmluZygwLCBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxlbmd0aCAtIDEpO1xuXHR9XG5cdGNvbnN0IHRpdGxlID0gY2hhcnRBbm5vdGF0aW9uLlRpdGxlPy50b1N0cmluZygpIHx8IFwiXCI7IC8vIHJlYWQgdGl0bGUgZnJvbSBjaGFydCBhbm5vdGF0aW9uXG5cdGNvbnN0IGRhdGFNb2RlbFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKTtcblx0Y29uc3QgaXNFbnRpdHlTZXQ6IGJvb2xlYW4gPSBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxlbmd0aCA9PT0gMDtcblx0Y29uc3QgZW50aXR5TmFtZTogc3RyaW5nID0gZGF0YU1vZGVsUGF0aC50YXJnZXRFbnRpdHlTZXQgPyBkYXRhTW9kZWxQYXRoLnRhcmdldEVudGl0eVNldC5uYW1lIDogZGF0YU1vZGVsUGF0aC5zdGFydGluZ0VudGl0eVNldC5uYW1lO1xuXHRjb25zdCBzRmlsdGVyYmFySWQgPSBpc0VudGl0eVNldCA/IGdldEZpbHRlckJhcklEKGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udGV4dFBhdGgoKSkgOiB1bmRlZmluZWQ7XG5cdGNvbnN0IG9WaXpQcm9wZXJ0aWVzID0ge1xuXHRcdHBsb3RBcmVhOiB7XG5cdFx0XHR3aW5kb3c6IHtcblx0XHRcdFx0c3RhcnQ6IFwiZmlyc3REYXRhUG9pbnRcIixcblx0XHRcdFx0ZW5kOiBcImxhc3REYXRhUG9pbnRcIlxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0bGVnZW5kR3JvdXA6IHtcblx0XHRcdGxheW91dDoge1xuXHRcdFx0XHRwb3NpdGlvbjogXCJib3R0b21cIlxuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0bGV0IGF1dG9CaW5kT25Jbml0OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXHRpZiAoY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLk9iamVjdFBhZ2UpIHtcblx0XHRhdXRvQmluZE9uSW5pdCA9IHRydWU7XG5cdH0gZWxzZSBpZiAoXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQgfHxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlXG5cdCkge1xuXHRcdGF1dG9CaW5kT25Jbml0ID0gZmFsc2U7XG5cdH1cblx0Y29uc3QgaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyA9XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5oYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zKCkgfHxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlO1xuXHRjb25zdCBvblNlZ21lbnRlZEJ1dHRvblByZXNzZWQgPSBoYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zID8gXCIuaGFuZGxlcnMub25TZWdtZW50ZWRCdXR0b25QcmVzc2VkXCIgOiBcIlwiO1xuXHRjb25zdCB2aXNpYmxlID0gaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyA/IFwiez0gJHtwYWdlSW50ZXJuYWw+YWxwQ29udGVudFZpZXd9ICE9PSAnVGFibGUnfVwiIDogXCJ0cnVlXCI7XG5cdGNvbnN0IGFsbG93ZWRUcmFuc2Zvcm1hdGlvbnMgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRBbGxvd2VkVHJhbnNmb3JtYXRpb25zKCk7XG5cdG1BcHBseVN1cHBvcnRlZC5lbmFibGVTZWFyY2ggPSBhbGxvd2VkVHJhbnNmb3JtYXRpb25zID8gYWxsb3dlZFRyYW5zZm9ybWF0aW9ucy5pbmNsdWRlcyhcInNlYXJjaFwiKSA6IHRydWU7XG5cdGxldCBxdWFsaWZpZXIgPSBcIlwiO1xuXHRpZiAoY2hhcnRBbm5vdGF0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZS5zcGxpdChcIiNcIikubGVuZ3RoID4gMSkge1xuXHRcdHF1YWxpZmllciA9IGNoYXJ0QW5ub3RhdGlvbi5mdWxseVF1YWxpZmllZE5hbWUuc3BsaXQoXCIjXCIpWzFdO1xuXHR9XG5cdGNvbnN0IGlzSW5zaWdodHNWaXNpYmxlID0gZ2V0SW5zaWdodHNWaXNpYmlsaXR5KFwiQW5hbHl0aWNhbFwiLCBjb252ZXJ0ZXJDb250ZXh0LCB2aXN1YWxpemF0aW9uUGF0aCk7XG5cdGNvbnN0IGlzUGFyYW1ldGVyaXplZEVudGl0eVNldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0UGFyYW1ldGVyRW50aXR5VHlwZSgpID8gdHJ1ZSA6IGZhbHNlO1xuXHRjb25zdCBpc0luc2lnaHRzRW5hYmxlZCA9IGFuZChnZXRJbnNpZ2h0c0VuYWJsZW1lbnQoKSwgaXNJbnNpZ2h0c1Zpc2libGUpO1xuXHRyZXR1cm4ge1xuXHRcdHR5cGU6IFZpc3VhbGl6YXRpb25UeXBlLkNoYXJ0LFxuXHRcdGlkOiBxdWFsaWZpZXJcblx0XHRcdD8gZ2V0Q2hhcnRJRChpc0VudGl0eVNldCA/IGVudGl0eU5hbWUgOiBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLCBxdWFsaWZpZXIsIFZpc3VhbGl6YXRpb25UeXBlLkNoYXJ0KVxuXHRcdFx0OiBnZXRDaGFydElEKGlzRW50aXR5U2V0ID8gZW50aXR5TmFtZSA6IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgsIFZpc3VhbGl6YXRpb25UeXBlLkNoYXJ0KSxcblx0XHRjb2xsZWN0aW9uOiBnZXRUYXJnZXRPYmplY3RQYXRoKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpKSxcblx0XHRhcGlJZDogZ2VuZXJhdGUoW1xuXHRcdFx0cXVhbGlmaWVyXG5cdFx0XHRcdD8gZ2V0Q2hhcnRJRChpc0VudGl0eVNldCA/IGVudGl0eU5hbWUgOiBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLCBxdWFsaWZpZXIsIFZpc3VhbGl6YXRpb25UeXBlLkNoYXJ0KVxuXHRcdFx0XHQ6IGdldENoYXJ0SUQoaXNFbnRpdHlTZXQgPyBlbnRpdHlOYW1lIDogbmF2aWdhdGlvblByb3BlcnR5UGF0aCwgVmlzdWFsaXphdGlvblR5cGUuQ2hhcnQpLFxuXHRcdFx0XCJDaGFydFwiXG5cdFx0XSksXG5cdFx0ZW50aXR5TmFtZTogZW50aXR5TmFtZSxcblx0XHRwZXJzb25hbGl6YXRpb246IGdldFAxM25Nb2RlKHZpc3VhbGl6YXRpb25QYXRoLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRuYXZpZ2F0aW9uUGF0aDogbmF2aWdhdGlvblByb3BlcnR5UGF0aCxcblx0XHRhbm5vdGF0aW9uUGF0aDogY29udmVydGVyQ29udGV4dC5nZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoKHZpc3VhbGl6YXRpb25QYXRoKSxcblx0XHRmaWx0ZXJJZDogc0ZpbHRlcmJhcklkLFxuXHRcdHZpelByb3BlcnRpZXM6IEpTT04uc3RyaW5naWZ5KG9WaXpQcm9wZXJ0aWVzKSxcblx0XHRhY3Rpb25zOiBjaGFydEFjdGlvbnMuYWN0aW9ucyxcblx0XHRjb21tYW5kQWN0aW9uczogY2hhcnRBY3Rpb25zLmNvbW1hbmRBY3Rpb25zLFxuXHRcdHRpdGxlOiB0aXRsZSxcblx0XHRhdXRvQmluZE9uSW5pdDogYXV0b0JpbmRPbkluaXQsXG5cdFx0b25TZWdtZW50ZWRCdXR0b25QcmVzc2VkOiBvblNlZ21lbnRlZEJ1dHRvblByZXNzZWQsXG5cdFx0dmlzaWJsZTogdmlzaWJsZSxcblx0XHRjdXN0b21BZ2c6IG1DdXN0b21BZ2dyZWdhdGVzLFxuXHRcdHRyYW5zQWdnOiBtVHJhbnNBZ2dyZWdhdGlvbnMsXG5cdFx0YXBwbHlTdXBwb3J0ZWQ6IG1BcHBseVN1cHBvcnRlZCxcblx0XHRzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50UGF0aCxcblx0XHR2YXJpYW50TWFuYWdlbWVudDogZmluZFZhcmlhbnRNYW5hZ2VtZW50KHAxM25Nb2RlLCB2YXJpYW50TWFuYWdlbWVudCksXG5cdFx0aXNJbnNpZ2h0c0VuYWJsZWQ6IGlzSW5zaWdodHNFbmFibGVkLFxuXHRcdGlzSW5zaWdodHNWaXNpYmxlOiBpc0luc2lnaHRzVmlzaWJsZSxcblx0XHRpc1BhcmFtZXRlcml6ZWRFbnRpdHlTZXQ6IGlzUGFyYW1ldGVyaXplZEVudGl0eVNldFxuXHR9O1xufVxuLyoqXG4gKiBNZXRob2QgdG8gZGV0ZXJtaW5lIHRoZSB2YXJpYW50IG1hbmFnZW1lbnQuXG4gKiBAcGFyYW0gcDEzbk1vZGVcbiAqIEBwYXJhbSB2YXJpYW50TWFuYWdlbWVudFxuICogQHJldHVybnMgVGhlIHZhcmlhbnQgbWFuYWdlbWVudCBmb3IgdGhlIGNoYXJ0XG4gKi9cbmZ1bmN0aW9uIGZpbmRWYXJpYW50TWFuYWdlbWVudChwMTNuTW9kZTogc3RyaW5nIHwgdW5kZWZpbmVkLCB2YXJpYW50TWFuYWdlbWVudDogVmFyaWFudE1hbmFnZW1lbnRUeXBlKTogVmFyaWFudE1hbmFnZW1lbnRUeXBlIHtcblx0cmV0dXJuIHZhcmlhbnRNYW5hZ2VtZW50ID09PSBcIkNvbnRyb2xcIiAmJiAhcDEzbk1vZGUgPyBWYXJpYW50TWFuYWdlbWVudFR5cGUuTm9uZSA6IHZhcmlhbnRNYW5hZ2VtZW50O1xufVxuXG4vKipcbiAqIENyZWF0ZSB0aGUgQ2hhcnRWaXN1YWxpemF0aW9uIGNvbmZpZ3VyYXRpb24gdGhhdCB3aWxsIGJlIHVzZWQgdG8gZHVyaW5nIHRlbXBsYXRpbmcuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSB2aXN1YWxpemF0aW9uUGF0aCBUaGUgcGF0aCBvZiB0aGUgdmlzdWFsaXphdGlvbiBhbm5vdGF0aW9uXG4gKiBAcGFyYW0gdmlzdWFsaXphdGlvbiBUaGUgdmlzdWFsaXphdGlvbiBhbm5vdGF0aW9uXG4gKiBAcmV0dXJucyBUaGUgY2hhcnQgdmlzdWFsaXphdGlvbiBiYXNlZCBvbiB0aGUgYW5ub3RhdGlvbiB1c2VkIGZvciB0ZW1wbGF0aW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDaGFydFZpc3VhbGl6YXRpb25Gb3JUZW1wbGF0aW5nKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdHZpc3VhbGl6YXRpb246IEFjdHVhbFZpc3VhbGl6YXRpb25Bbm5vdGF0aW9uc1xuKTogQ2hhcnRUZW1wbGF0ZVZpc3VhbGl6YXRpb24ge1xuXHRjb25zdCBxdWFsaWZpZXIgPSB2aXN1YWxpemF0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZS5zcGxpdChcIiNcIikubGVuZ3RoID4gMSA/IHZpc3VhbGl6YXRpb24uZnVsbHlRdWFsaWZpZWROYW1lLnNwbGl0KFwiI1wiKVsxXSA6IFwiXCI7XG5cdGNvbnN0IFtuYXZpZ2F0aW9uUHJvcGVydHlQYXRoXSA9IHZpc3VhbGl6YXRpb25QYXRoLnNwbGl0KFwiQFwiKTtcblxuXHRjb25zdCBkYXRhTW9kZWxQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCk7XG5cdGNvbnN0IGlzRW50aXR5U2V0OiBib29sZWFuID0gbmF2aWdhdGlvblByb3BlcnR5UGF0aC5sZW5ndGggPT09IDA7XG5cdGNvbnN0IGVudGl0eU5hbWU6IHN0cmluZyA9IGRhdGFNb2RlbFBhdGgudGFyZ2V0RW50aXR5U2V0Py5uYW1lID8/IGRhdGFNb2RlbFBhdGguc3RhcnRpbmdFbnRpdHlTZXQubmFtZTtcblx0Y29uc3QgYWdncmVnYXRpb25IZWxwZXIgPSBuZXcgQWdncmVnYXRpb25IZWxwZXIoY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCksIGNvbnZlcnRlckNvbnRleHQsIHRydWUpO1xuXHRjb25zdCBhbGxvd2VkVHJhbnNmb3JtYXRpb25zID0gYWdncmVnYXRpb25IZWxwZXIuZ2V0QWxsb3dlZFRyYW5zZm9ybWF0aW9ucygpO1xuXHRjb25zdCBpc1BhcmFtZXRlcml6ZWRFbnRpdHlTZXQgPSAhIWNvbnZlcnRlckNvbnRleHQuZ2V0UGFyYW1ldGVyRW50aXR5VHlwZSgpO1xuXHRyZXR1cm4ge1xuXHRcdGFubm90YXRpb25QYXRoOiBjb252ZXJ0ZXJDb250ZXh0LmdldEFic29sdXRlQW5ub3RhdGlvblBhdGgodmlzdWFsaXphdGlvblBhdGgpLFxuXHRcdGlzUGFyYW1ldGVyaXplZEVudGl0eVNldCxcblx0XHRjb2xsZWN0aW9uOiBnZXRUYXJnZXRPYmplY3RQYXRoKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpKSxcblx0XHR0eXBlOiBWaXN1YWxpemF0aW9uVHlwZS5DaGFydCxcblx0XHRlbnRpdHlOYW1lLFxuXHRcdGlkOiBxdWFsaWZpZXJcblx0XHRcdD8gZ2V0Q2hhcnRJRChpc0VudGl0eVNldCA/IGVudGl0eU5hbWUgOiBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLCBxdWFsaWZpZXIsIFZpc3VhbGl6YXRpb25UeXBlLkNoYXJ0KVxuXHRcdFx0OiBnZXRDaGFydElEKGlzRW50aXR5U2V0ID8gZW50aXR5TmFtZSA6IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgsIFZpc3VhbGl6YXRpb25UeXBlLkNoYXJ0KSxcblx0XHRhcGlJZDogZ2VuZXJhdGUoW1xuXHRcdFx0cXVhbGlmaWVyXG5cdFx0XHRcdD8gZ2V0Q2hhcnRJRChpc0VudGl0eVNldCA/IGVudGl0eU5hbWUgOiBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLCBxdWFsaWZpZXIsIFZpc3VhbGl6YXRpb25UeXBlLkNoYXJ0KVxuXHRcdFx0XHQ6IGdldENoYXJ0SUQoaXNFbnRpdHlTZXQgPyBlbnRpdHlOYW1lIDogbmF2aWdhdGlvblByb3BlcnR5UGF0aCwgVmlzdWFsaXphdGlvblR5cGUuQ2hhcnQpLFxuXHRcdFx0XCJDaGFydFwiXG5cdFx0XSksXG5cdFx0YXBwbHlTdXBwb3J0ZWQ6IHtcblx0XHRcdCRUeXBlOiBcIk9yZy5PRGF0YS5BZ2dyZWdhdGlvbi5WMS5BcHBseVN1cHBvcnRlZFR5cGVcIixcblx0XHRcdGVuYWJsZVNlYXJjaDogYWxsb3dlZFRyYW5zZm9ybWF0aW9ucz8uaW5jbHVkZXMoXCJzZWFyY2hcIikgPz8gdHJ1ZVxuXHRcdH1cblx0fTtcbn1cblxuLyoqXG4gKiBNZXRob2QgdG8gZ2V0IGNvbXBpbGUgZXhwcmVzc2lvbiBmb3IgRGF0YUZpZWxkRm9yQWN0aW9uIGFuZCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24uXG4gKiBAcGFyYW0gZGF0YUZpZWxkXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMgQ29tcGlsZSBleHByZXNzaW9uIGZvciBEYXRhRmllbGRGb3JBY3Rpb24gYW5kIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvblxuICovXG5mdW5jdGlvbiBnZXRDb21waWxlRXhwcmVzc2lvbkZvckFjdGlvbihcblx0ZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdG5vdChcblx0XHRcdGVxdWFsKFxuXHRcdFx0XHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oXG5cdFx0XHRcdFx0ZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuLFxuXHRcdFx0XHRcdFtdLFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFJlbGF0aXZlTW9kZWxQYXRoRnVuY3Rpb24oKVxuXHRcdFx0XHQpLFxuXHRcdFx0XHR0cnVlXG5cdFx0XHQpXG5cdFx0KVxuXHQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQmxhbmtDaGFydFZpc3VhbGl6YXRpb24oY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+KTogQ2hhcnRWaXN1YWxpemF0aW9uIHtcblx0Y29uc3QgaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyA9XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5oYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zKCkgfHxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlO1xuXHRjb25zdCBkYXRhTW9kZWxQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCk7XG5cdGNvbnN0IGVudGl0eU5hbWUgPSBkYXRhTW9kZWxQYXRoLnRhcmdldEVudGl0eVNldCA/IGRhdGFNb2RlbFBhdGgudGFyZ2V0RW50aXR5U2V0Lm5hbWUgOiBkYXRhTW9kZWxQYXRoLnN0YXJ0aW5nRW50aXR5U2V0Lm5hbWU7XG5cblx0Y29uc3QgdmlzdWFsaXphdGlvbjogQ2hhcnRWaXN1YWxpemF0aW9uID0ge1xuXHRcdHR5cGU6IFZpc3VhbGl6YXRpb25UeXBlLkNoYXJ0LFxuXHRcdGlkOiBnZXRDaGFydElEKGVudGl0eU5hbWUsIFZpc3VhbGl6YXRpb25UeXBlLkNoYXJ0KSxcblx0XHRhcGlJZDogZ2VuZXJhdGUoW2dldENoYXJ0SUQoZW50aXR5TmFtZSwgVmlzdWFsaXphdGlvblR5cGUuQ2hhcnQpLCBcIkNoYXJ0XCJdKSxcblx0XHRlbnRpdHlOYW1lOiBlbnRpdHlOYW1lLFxuXHRcdHRpdGxlOiBcIlwiLFxuXHRcdGNvbGxlY3Rpb246IFwiXCIsXG5cdFx0cGVyc29uYWxpemF0aW9uOiB1bmRlZmluZWQsXG5cdFx0bmF2aWdhdGlvblBhdGg6IFwiXCIsXG5cdFx0YW5ub3RhdGlvblBhdGg6IFwiXCIsXG5cdFx0dml6UHJvcGVydGllczogSlNPTi5zdHJpbmdpZnkoe1xuXHRcdFx0bGVnZW5kR3JvdXA6IHtcblx0XHRcdFx0bGF5b3V0OiB7XG5cdFx0XHRcdFx0cG9zaXRpb246IFwiYm90dG9tXCJcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pLFxuXHRcdGFjdGlvbnM6IFtdLFxuXHRcdGNvbW1hbmRBY3Rpb25zOiB7fSxcblx0XHRhdXRvQmluZE9uSW5pdDogZmFsc2UsXG5cdFx0b25TZWdtZW50ZWRCdXR0b25QcmVzc2VkOiBcIlwiLFxuXHRcdHZpc2libGU6IGhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMgPyBcIns9ICR7cGFnZUludGVybmFsPmFscENvbnRlbnRWaWV3fSAhPT0gJ1RhYmxlJ31cIiA6IFwidHJ1ZVwiLFxuXHRcdGN1c3RvbUFnZzoge30sXG5cdFx0dHJhbnNBZ2c6IHt9LFxuXHRcdGFwcGx5U3VwcG9ydGVkOiB7XG5cdFx0XHQkVHlwZTogXCJPcmcuT0RhdGEuQWdncmVnYXRpb24uVjEuQXBwbHlTdXBwb3J0ZWRUeXBlXCIsXG5cdFx0XHRBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzOiBbXSxcblx0XHRcdEdyb3VwYWJsZVByb3BlcnRpZXM6IFtdLFxuXHRcdFx0ZW5hYmxlU2VhcmNoOiBmYWxzZVxuXHRcdH0sXG5cdFx0bXVsdGlWaWV3czogZmFsc2UsXG5cdFx0dmFyaWFudE1hbmFnZW1lbnQ6IFZhcmlhbnRNYW5hZ2VtZW50VHlwZS5Ob25lXG5cdH07XG5cblx0cmV0dXJuIHZpc3VhbGl6YXRpb247XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBeURBO0FBQ0E7QUFDQTs7RUFzQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTQSw4QkFBOEJBLENBQ3RDQyxlQUFzQixFQUN0QkMsaUJBQXlCLEVBQ3pCQyxnQkFBeUQsRUFDRDtJQUN4RCxNQUFNQyxZQUFtRSxHQUFHLEVBQUU7SUFDOUUsSUFBSUgsZUFBZSxFQUFFSSxPQUFPLEVBQUU7TUFDN0JKLGVBQWUsQ0FBQ0ksT0FBTyxDQUFDQyxPQUFPLENBQUVDLFNBQWdFLElBQUs7UUFDckcsTUFBTUMsR0FBRyxHQUFH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Z0IsQ0FBQ3dJLHNCQUFzQixDQUFDLENBQUM7SUFDL0QsTUFBTUUsVUFBVSxHQUFHSCxhQUFhLENBQUNJLGVBQWUsR0FBR0osYUFBYSxDQUFDSSxlQUFlLENBQUNsRSxJQUFJLEdBQUc4RCxhQUFhLENBQUNLLGlCQUFpQixDQUFDbkUsSUFBSTtJQUU1SCxNQUFNcUgsYUFBaUMsR0FBRztNQUN6Qy9LLElBQUksRUFBRTJKLGlCQUFpQixDQUFDQyxLQUFLO01BQzdCQyxFQUFFLEVBQUVDLFVBQVUsQ0FBQ25DLFVBQVUsRUFBRWdDLGlCQUFpQixDQUFDQyxLQUFLLENBQUM7TUFDbkRLLEtBQUssRUFBRUMsUUFBUSxDQUFDLENBQUNKLFVBQVUsQ0FBQ25DLFVBQVUsRUFBRWdDLGlCQUFpQixDQUFDQyxLQUFLLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztNQUMzRWpDLFVBQVUsRUFBRUEsVUFBVTtNQUN0QkwsS0FBSyxFQUFFLEVBQUU7TUFDVHlDLFVBQVUsRUFBRSxFQUFFO01BQ2RySCxlQUFlLEVBQUVLLFNBQVM7TUFDMUJvSCxjQUFjLEVBQUUsRUFBRTtNQUNsQmhLLGNBQWMsRUFBRSxFQUFFO01BQ2xCbUssYUFBYSxFQUFFQyxJQUFJLENBQUNDLFNBQVMsQ0FBQztRQUM3QmxDLFdBQVcsRUFBRTtVQUNaQyxNQUFNLEVBQUU7WUFDUHhHLFFBQVEsRUFBRTtVQUNYO1FBQ0Q7TUFDRCxDQUFDLENBQUM7TUFDRlAsT0FBTyxFQUFFLEVBQUU7TUFDWFMsY0FBYyxFQUFFLENBQUMsQ0FBQztNQUNsQnVHLGNBQWMsRUFBRSxLQUFLO01BQ3JCTyx3QkFBd0IsRUFBRSxFQUFFO01BQzVCekksT0FBTyxFQUFFd0kseUJBQXlCLEdBQUcsZ0RBQWdELEdBQUcsTUFBTTtNQUM5RjJCLFNBQVMsRUFBRSxDQUFDLENBQUM7TUFDYkMsUUFBUSxFQUFFLENBQUMsQ0FBQztNQUNaQyxjQUFjLEVBQUU7UUFDZi9LLEtBQUssRUFBRSw2Q0FBNkM7UUFDcERrSCxzQkFBc0IsRUFBRSxFQUFFO1FBQzFCQyxtQkFBbUIsRUFBRSxFQUFFO1FBQ3ZCbUMsWUFBWSxFQUFFO01BQ2YsQ0FBQztNQUNEc0MsVUFBVSxFQUFFLEtBQUs7TUFDakJqSixpQkFBaUIsRUFBRU0scUJBQXFCLENBQUNnSTtJQUMxQyxDQUFDO0lBRUQsT0FBT0UsYUFBYTtFQUNyQjtFQUFDN0ksUUFBQSxDQUFBcUosNkJBQUEsR0FBQUEsNkJBQUE7RUFBQSxPQUFBckosUUFBQTtBQUFBIiwiaWdub3JlTGlzdCI6W119
448
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRDaGFydEFjdGlvbnNGcm9tQW5ub3RhdGlvbnMiLCJjaGFydEFubm90YXRpb24iLCJ2aXN1YWxpemF0aW9uUGF0aCIsImNvbnZlcnRlckNvbnRleHQiLCJjaGFydEFjdGlvbnMiLCJBY3Rpb25zIiwiZm9yRWFjaCIsImRhdGFGaWVsZCIsImtleSIsIktleUhlbHBlciIsImdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZCIsImlzRGF0YUZpZWxkRm9yQWN0aW9uQWJzdHJhY3QiLCJJbmxpbmUiLCJEZXRlcm1pbmluZyIsIiRUeXBlIiwiQWN0aW9uVGFyZ2V0IiwiaXNCb3VuZCIsInB1c2giLCJ0eXBlIiwiQWN0aW9uVHlwZSIsIkRhdGFGaWVsZEZvckFjdGlvbiIsImFubm90YXRpb25QYXRoIiwiZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsInZpc2libGUiLCJnZXRDb21waWxlRXhwcmVzc2lvbkZvckFjdGlvbiIsImlzQUlPcGVyYXRpb24iLCJpc0FjdGlvbkFJT3BlcmF0aW9uIiwidW5kZWZpbmVkIiwiRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiaXNOYXZpZ2FibGUiLCJpc0Fubm90YXRpb25BY3Rpb25Hcm91cCIsIk1lbnUiLCJ0ZXh0IiwiTGFiZWwiLCJ0b1N0cmluZyIsIm1lbnUiLCJtYXAiLCJhY3Rpb24iLCJnZXREYXRhRmllbGRBbm5vdGF0aW9uQWN0aW9uIiwiaXNNZW51QUlPcGVyYXRpb24iLCJnZXRDaGFydEFjdGlvbnMiLCJhQW5ub3RhdGlvbkFjdGlvbnMiLCJtYW5pZmVzdEFjdGlvbnMiLCJnZXRBY3Rpb25zRnJvbU1hbmlmZXN0IiwiZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbiIsImFjdGlvbnMiLCJhY3Rpb25PdmVyd3JpdGVDb25maWciLCJlbmFibGVkIiwiT3ZlcnJpZGVUeXBlIiwib3ZlcndyaXRlIiwiZW5hYmxlT25TZWxlY3QiLCJjb21tYW5kIiwicG9zaXRpb24iLCJpbnNlcnRDdXN0b21FbGVtZW50cyIsImNvbW1hbmRBY3Rpb25zIiwiX2V4cG9ydHMiLCJnZXRQMTNuTW9kZSIsIm1hbmlmZXN0V3JhcHBlciIsImdldE1hbmlmZXN0V3JhcHBlciIsImNoYXJ0TWFuaWZlc3RTZXR0aW5ncyIsInZhcmlhbnRNYW5hZ2VtZW50IiwiZ2V0VmFyaWFudE1hbmFnZW1lbnQiLCJhUGVyc29uYWxpemF0aW9uIiwicGVyc29uYWxpemF0aW9uIiwiY2hhcnRTZXR0aW5ncyIsImlzQ29udHJvbFZhcmlhbnQiLCJWYXJpYW50TWFuYWdlbWVudFR5cGUiLCJDb250cm9sIiwiaXRlbSIsInNvcnQiLCJmaWx0ZXIiLCJqb2luIiwiZ2V0SGVhZGVySW5mbyIsImhlYWRlciIsImhlYWRlclZpc2libGUiLCJnZXRTZWxlY3Rpb25Nb2RlIiwic2VsZWN0aW9uTW9kZSIsImdldEFnZ3JlZ2F0YWJsZVByb3BlcnRpZXNPYmplY3QiLCJhZ2dQcm9wIiwib2JqIiwiUHJvcGVydHkiLCIkUHJvcGVydHlQYXRoIiwidmFsdWUiLCJuYW1lIiwiY3JlYXRlQ2hhcnRWaXN1YWxpemF0aW9uIiwiZG9Ob3RDaGVja0FwcGx5U3VwcG9ydGVkIiwic2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFBhdGgiLCJhZ2dyZWdhdGlvbkhlbHBlciIsIkFnZ3JlZ2F0aW9uSGVscGVyIiwiZ2V0RW50aXR5VHlwZSIsImlzQW5hbHl0aWNzU3VwcG9ydGVkIiwiRXJyb3IiLCJhVHJhbnNBZ2dyZWdhdGlvbnMiLCJnZXRUcmFuc0FnZ3JlZ2F0aW9ucyIsImFDdXN0b21BZ2dyZWdhdGVzIiwiZ2V0Q3VzdG9tQWdncmVnYXRlRGVmaW5pdGlvbnMiLCJwYWdlTWFuaWZlc3RTZXR0aW5ncyIsInAxM25Nb2RlIiwiTG9nIiwid2FybmluZyIsIm1DdXN0b21BZ2dyZWdhdGVzIiwiZW50aXR5VHlwZSIsImN1c3RvbUFnZ3JlZ2F0ZSIsImFDb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzIiwiYW5ub3RhdGlvbnMiLCJBZ2dyZWdhdGlvbiIsIkNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMiLCJxdWFsaWZpZXIiLCJyZWxhdGVkQ3VzdG9tQWdncmVnYXRlUHJvcGVydHkiLCJlbnRpdHlQcm9wZXJ0aWVzIiwiZmluZCIsInByb3BlcnR5IiwibGFiZWwiLCJDb21tb24iLCJzb3J0YWJsZSIsInNvcnRPcmRlciIsImNvbnRleHREZWZpbmluZ1Byb3BlcnR5Iiwib0N0eERlZlByb3BlcnR5IiwibVRyYW5zQWdncmVnYXRpb25zIiwib1Jlc291cmNlQnVuZGxlQ29yZSIsIkxpYnJhcnkiLCJnZXRSZXNvdXJjZUJ1bmRsZUZvciIsImVsZW1lbnQiLCJOYW1lIiwicHJvcGVydHlQYXRoIiwiQWdncmVnYXRhYmxlUHJvcGVydHkiLCJhZ2dyZWdhdGlvbk1ldGhvZCIsIkFnZ3JlZ2F0aW9uTWV0aG9kIiwiZ2V0VGV4dCIsImN1c3RvbSIsImFBZ2dQcm9wcyIsImdldEFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMiLCJhR3JwUHJvcHMiLCJnZXRHcm91cGFibGVQcm9wZXJ0aWVzIiwibUFwcGx5U3VwcG9ydGVkIiwiQWdncmVnYXRhYmxlUHJvcGVydGllcyIsIkdyb3VwYWJsZVByb3BlcnRpZXMiLCJwcm9wIiwibmF2aWdhdGlvblByb3BlcnR5UGF0aCIsInNwbGl0IiwibGFzdEluZGV4T2YiLCJsZW5ndGgiLCJzdWJzdHJpbmciLCJ0aXRsZSIsIlRpdGxlIiwiZGF0YU1vZGVsUGF0aCIsImdldERhdGFNb2RlbE9iamVjdFBhdGgiLCJpc0VudGl0eVNldCIsImVudGl0eU5hbWUiLCJ0YXJnZXRFbnRpdHlTZXQiLCJzdGFydGluZ0VudGl0eVNldCIsInNGaWx0ZXJiYXJJZCIsImdldEZpbHRlckJhcklEIiwiZ2V0Q29udGV4dFBhdGgiLCJvVml6UHJvcGVydGllcyIsInBsb3RBcmVhIiwid2luZG93Iiwic3RhcnQiLCJlbmQiLCJsZWdlbmRHcm91cCIsImxheW91dCIsImF1dG9CaW5kT25Jbml0IiwiZ2V0VGVtcGxhdGVUeXBlIiwiVGVtcGxhdGVUeXBlIiwiT2JqZWN0UGFnZSIsIkxpc3RSZXBvcnQiLCJBbmFseXRpY2FsTGlzdFBhZ2UiLCJoYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zIiwib25TZWdtZW50ZWRCdXR0b25QcmVzc2VkIiwiYWxsb3dlZFRyYW5zZm9ybWF0aW9ucyIsImdldEFsbG93ZWRUcmFuc2Zvcm1hdGlvbnMiLCJlbmFibGVTZWFyY2giLCJpbmNsdWRlcyIsImlzSW5zaWdodHNWaXNpYmxlIiwiZ2V0SW5zaWdodHNWaXNpYmlsaXR5IiwiaXNQYXJhbWV0ZXJpemVkRW50aXR5U2V0IiwiZ2V0UGFyYW1ldGVyRW50aXR5VHlwZSIsImlzSW5zaWdodHNFbmFibGVkIiwiYW5kIiwiZ2V0SW5zaWdodHNFbmFibGVtZW50IiwiY2hhcnREaW1lbnNpb25LZXlBbmRSb2xlIiwiRGltZW5zaW9uQXR0cmlidXRlcyIsImRpbWVuc2lvbkF0dHJpYnV0ZSIsIkRpbWVuc2lvbiIsIlJvbGUiLCJjaGFydE1lYXN1cmVLZXlBbmRSb2xlIiwiTWVhc3VyZUF0dHJpYnV0ZXMiLCJtZWFzdXJlQXR0cmlidXRlIiwiTWVhc3VyZSIsIlZpc3VhbGl6YXRpb25UeXBlIiwiQ2hhcnQiLCJpZCIsImdldENoYXJ0SUQiLCJjb2xsZWN0aW9uIiwiZ2V0VGFyZ2V0T2JqZWN0UGF0aCIsImFwaUlkIiwiZ2VuZXJhdGUiLCJuYXZpZ2F0aW9uUGF0aCIsImdldEFic29sdXRlQW5ub3RhdGlvblBhdGgiLCJmaWx0ZXJJZCIsInZpelByb3BlcnRpZXMiLCJKU09OIiwic3RyaW5naWZ5IiwiY3VzdG9tQWdnIiwidHJhbnNBZ2ciLCJhcHBseVN1cHBvcnRlZCIsImZpbmRWYXJpYW50TWFuYWdlbWVudCIsIk5vbmUiLCJjcmVhdGVDaGFydFZpc3VhbGl6YXRpb25Gb3JUZW1wbGF0aW5nIiwidmlzdWFsaXphdGlvbiIsImNvbXBpbGVFeHByZXNzaW9uIiwibm90IiwiZXF1YWwiLCJnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24iLCJVSSIsIkhpZGRlbiIsImdldFJlbGF0aXZlTW9kZWxQYXRoRnVuY3Rpb24iLCJjcmVhdGVCbGFua0NoYXJ0VmlzdWFsaXphdGlvbiIsIm11bHRpVmlld3MiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkNoYXJ0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUHJvcGVydHksIFByb3BlcnR5UGF0aCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBBZ2dyZWdhdGFibGVQcm9wZXJ0eVR5cGUsIEFnZ3JlZ2F0aW9uTWV0aG9kIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9BZ2dyZWdhdGlvblwiO1xuaW1wb3J0IHsgQWdncmVnYXRpb25Bbm5vdGF0aW9uVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0FnZ3JlZ2F0aW9uXCI7XG5pbXBvcnQgdHlwZSB7XG5cdENoYXJ0LFxuXHREYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHREYXRhRmllbGRGb3JBY3Rpb25Hcm91cCxcblx0RGF0YUZpZWxkRm9yQWN0aW9uR3JvdXBUeXBlcyxcblx0RGF0YUZpZWxkRm9yQWN0aW9uVHlwZXNcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgVUlBbm5vdGF0aW9uVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIHsgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGFuZCwgY29tcGlsZUV4cHJlc3Npb24sIGVxdWFsLCBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24sIG5vdCwgdHlwZSBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB0eXBlIHsgUGFnZUNvbnRleHRQYXRoVGFyZ2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvVGVtcGxhdGVDb252ZXJ0ZXJcIjtcbmltcG9ydCB7IGlzRGF0YUZpZWxkRm9yQWN0aW9uQWJzdHJhY3QgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9hbm5vdGF0aW9ucy9EYXRhRmllbGRcIjtcbmltcG9ydCB0eXBlIHtcblx0QW5ub3RhdGlvbkFjdGlvbixcblx0QW5ub3RhdGlvbkFjdGlvbkFjdGlvbkdyb3VwLFxuXHRCYXNlQWN0aW9uLFxuXHRDb21iaW5lZEFjdGlvbixcblx0Q3VzdG9tQWN0aW9uLFxuXHRPdmVycmlkZVR5cGVBY3Rpb25cbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0FjdGlvblwiO1xuaW1wb3J0IHsgZ2V0QWN0aW9uc0Zyb21NYW5pZmVzdCwgaXNBY3Rpb25BSU9wZXJhdGlvbiwgaXNNZW51QUlPcGVyYXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgeyBPdmVycmlkZVR5cGUsIGluc2VydEN1c3RvbUVsZW1lbnRzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7IEtleUhlbHBlciB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvS2V5XCI7XG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRUYXJnZXRPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IExpYnJhcnkgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IHR5cGUgeyBFeHBhbmRQYXRoVHlwZSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi90eXBlcy9tZXRhbW9kZWxfdHlwZXNcIjtcbmltcG9ydCB0eXBlIENvbnZlcnRlckNvbnRleHQgZnJvbSBcIi4uLy4uL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCB0eXBlIHsgQ2hhcnRNYW5pZmVzdENvbmZpZ3VyYXRpb24sIE1hbmlmZXN0QWN0aW9uIH0gZnJvbSBcIi4uLy4uL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7IEFjdGlvblR5cGUsIFRlbXBsYXRlVHlwZSwgVmFyaWFudE1hbmFnZW1lbnRUeXBlLCBWaXN1YWxpemF0aW9uVHlwZSB9IGZyb20gXCIuLi8uLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgdHlwZSBNYW5pZmVzdFdyYXBwZXIgZnJvbSBcIi4uLy4uL01hbmlmZXN0V3JhcHBlclwiO1xuaW1wb3J0IHsgQWdncmVnYXRpb25IZWxwZXIgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9BZ2dyZWdhdGlvblwiO1xuaW1wb3J0IHsgZ2V0Q2hhcnRJRCwgZ2V0RmlsdGVyQmFySUQgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9JRFwiO1xuaW1wb3J0IHsgZ2V0SW5zaWdodHNFbmFibGVtZW50LCBnZXRJbnNpZ2h0c1Zpc2liaWxpdHkgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9JbnNpZ2h0c0hlbHBlcnNcIjtcbmltcG9ydCB0eXBlIHsgQWN0dWFsVmlzdWFsaXphdGlvbkFubm90YXRpb25zIH0gZnJvbSBcIi4vRGF0YVZpc3VhbGl6YXRpb25cIjtcblxuZXhwb3J0IHR5cGUgQ2hhcnRBcHBseVN1cHBvcnRlZCA9IHtcblx0JFR5cGU6IHN0cmluZztcblx0ZW5hYmxlU2VhcmNoPzogYm9vbGVhbjtcblx0QWdncmVnYXRhYmxlUHJvcGVydGllcz86IChFeHBhbmRQYXRoVHlwZTxQcm9wZXJ0eVBhdGg+ICYgeyBQcm9wZXJ0eTogRXhwYW5kUGF0aFR5cGU8UHJvcGVydHlQYXRoPiB9KVtdO1xuXHRHcm91cGFibGVQcm9wZXJ0aWVzPzogKEV4cGFuZFBhdGhUeXBlPFByb3BlcnR5UGF0aD4gJiB7IFByb3BlcnR5OiBFeHBhbmRQYXRoVHlwZTxQcm9wZXJ0eVBhdGg+IH0pW107XG59O1xuZXhwb3J0IHR5cGUgQ2hhcnRUZW1wbGF0ZVZpc3VhbGl6YXRpb24gPSB7XG5cdHR5cGU6IFZpc3VhbGl6YXRpb25UeXBlLkNoYXJ0O1xuXHRpZDogc3RyaW5nO1xuXHRhcGlJZDogc3RyaW5nO1xuXHRlbnRpdHlOYW1lOiBzdHJpbmc7XG5cdGNvbGxlY3Rpb246IHN0cmluZztcblx0YW5ub3RhdGlvblBhdGg6IHN0cmluZztcblx0YXBwbHlTdXBwb3J0ZWQ6IENoYXJ0QXBwbHlTdXBwb3J0ZWQ7XG5cdGlzUGFyYW1ldGVyaXplZEVudGl0eVNldD86IGJvb2xlYW47XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIENoYXJ0VmlzdWFsaXphdGlvblxuICovXG5leHBvcnQgdHlwZSBDaGFydFZpc3VhbGl6YXRpb24gPSBDaGFydFRlbXBsYXRlVmlzdWFsaXphdGlvbiAmIHtcblx0ZW50aXR5TmFtZTogc3RyaW5nO1xuXHRwZXJzb25hbGl6YXRpb24/OiBzdHJpbmcgfCBib29sZWFuO1xuXHRuYXZpZ2F0aW9uUGF0aDogc3RyaW5nO1xuXHRmaWx0ZXJJZD86IHN0cmluZztcblx0dml6UHJvcGVydGllczogc3RyaW5nO1xuXHRhY3Rpb25zOiBCYXNlQWN0aW9uW107XG5cdGNvbW1hbmRBY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+O1xuXHR0aXRsZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRhdXRvQmluZE9uSW5pdDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblx0b25TZWdtZW50ZWRCdXR0b25QcmVzc2VkOiBzdHJpbmc7XG5cdHZpc2libGU6IHN0cmluZztcblx0Y3VzdG9tQWdnOiBvYmplY3Q7XG5cdHRyYW5zQWdnOiBvYmplY3Q7XG5cdG11bHRpVmlld3M/OiBib29sZWFuO1xuXHR2YXJpYW50TWFuYWdlbWVudDogVmFyaWFudE1hbmFnZW1lbnRUeXBlO1xuXHRzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50UGF0aD86IHN0cmluZztcblx0aXNJbnNpZ2h0c0VuYWJsZWQ/OiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj47XG5cdGlzSW5zaWdodHNWaXNpYmxlPzogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRoZWFkZXI/OiBzdHJpbmc7XG5cdGhlYWRlclZpc2libGU/OiBib29sZWFuO1xuXHRzZWxlY3Rpb25Nb2RlPzogc3RyaW5nO1xuXHRjaGFydERpbWVuc2lvbktleUFuZFJvbGU/OiBvYmplY3Q7XG5cdGNoYXJ0TWVhc3VyZUtleUFuZFJvbGU/OiBvYmplY3Q7XG59O1xuXG5leHBvcnQgdHlwZSBDaGFydFAxM25UeXBlID0gc3RyaW5nIHwgYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBNZXRob2QgdG8gcmV0cmlldmUgYWxsIGNoYXJ0IGFjdGlvbnMgZnJvbSBhbm5vdGF0aW9ucy5cbiAqIEBwYXJhbSBjaGFydEFubm90YXRpb25cbiAqIEBwYXJhbSB2aXN1YWxpemF0aW9uUGF0aFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBjaGFydCBhY3Rpb25zIGZyb20gdGhlIGFubm90YXRpb25cbiAqL1xuZnVuY3Rpb24gZ2V0Q2hhcnRBY3Rpb25zRnJvbUFubm90YXRpb25zKFxuXHRjaGFydEFubm90YXRpb246IENoYXJ0LFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IEFycmF5PEFubm90YXRpb25BY3Rpb24gfCBBbm5vdGF0aW9uQWN0aW9uQWN0aW9uR3JvdXA+IHtcblx0Y29uc3QgY2hhcnRBY3Rpb25zOiBBcnJheTxBbm5vdGF0aW9uQWN0aW9uIHwgQW5ub3RhdGlvbkFjdGlvbkFjdGlvbkdyb3VwPiA9IFtdO1xuXHRpZiAoY2hhcnRBbm5vdGF0aW9uPy5BY3Rpb25zKSB7XG5cdFx0Y2hhcnRBbm5vdGF0aW9uLkFjdGlvbnMuZm9yRWFjaCgoZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YUZpZWxkRm9yQWN0aW9uR3JvdXBUeXBlcykgPT4ge1xuXHRcdFx0Y29uc3Qga2V5ID0gS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpO1xuXHRcdFx0aWYgKGlzRGF0YUZpZWxkRm9yQWN0aW9uQWJzdHJhY3QoZGF0YUZpZWxkKSAmJiAhZGF0YUZpZWxkLklubGluZSAmJiAhZGF0YUZpZWxkLkRldGVybWluaW5nKSB7XG5cdFx0XHRcdHN3aXRjaCAoZGF0YUZpZWxkLiRUeXBlKSB7XG5cdFx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb246XG5cdFx0XHRcdFx0XHRpZiAoZGF0YUZpZWxkLkFjdGlvblRhcmdldCAmJiAhZGF0YUZpZWxkLkFjdGlvblRhcmdldC5pc0JvdW5kKSB7XG5cdFx0XHRcdFx0XHRcdGNoYXJ0QWN0aW9ucy5wdXNoKHtcblx0XHRcdFx0XHRcdFx0XHR0eXBlOiBBY3Rpb25UeXBlLkRhdGFGaWVsZEZvckFjdGlvbixcblx0XHRcdFx0XHRcdFx0XHRhbm5vdGF0aW9uUGF0aDogY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKGRhdGFGaWVsZC5mdWxseVF1YWxpZmllZE5hbWUpLFxuXHRcdFx0XHRcdFx0XHRcdGtleSxcblx0XHRcdFx0XHRcdFx0XHR2aXNpYmxlOiBnZXRDb21waWxlRXhwcmVzc2lvbkZvckFjdGlvbihkYXRhRmllbGQsIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdFx0XHRcdFx0XHRcdGlzQUlPcGVyYXRpb246IGlzQWN0aW9uQUlPcGVyYXRpb24oZGF0YUZpZWxkKSA9PT0gdHJ1ZSB8fCB1bmRlZmluZWRcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uOlxuXHRcdFx0XHRcdFx0Y2hhcnRBY3Rpb25zLnB1c2goe1xuXHRcdFx0XHRcdFx0XHR0eXBlOiBBY3Rpb25UeXBlLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbixcblx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChkYXRhRmllbGQuZnVsbHlRdWFsaWZpZWROYW1lKSxcblx0XHRcdFx0XHRcdFx0a2V5LFxuXHRcdFx0XHRcdFx0XHR2aXNpYmxlOiBnZXRDb21waWxlRXhwcmVzc2lvbkZvckFjdGlvbihkYXRhRmllbGQsIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdFx0XHRcdFx0XHRpc05hdmlnYWJsZTogdHJ1ZVxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaXNBbm5vdGF0aW9uQWN0aW9uR3JvdXAoZGF0YUZpZWxkKSkge1xuXHRcdFx0XHRjaGFydEFjdGlvbnMucHVzaCh7XG5cdFx0XHRcdFx0dHlwZTogQWN0aW9uVHlwZS5NZW51LFxuXHRcdFx0XHRcdHRleHQ6IGRhdGFGaWVsZC5MYWJlbD8udG9TdHJpbmcoKSxcblx0XHRcdFx0XHR2aXNpYmxlOiBnZXRDb21waWxlRXhwcmVzc2lvbkZvckFjdGlvbihkYXRhRmllbGQsIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdFx0XHRcdG1lbnU6IGRhdGFGaWVsZC5BY3Rpb25zLm1hcCgoYWN0aW9uKSA9PlxuXHRcdFx0XHRcdFx0Z2V0RGF0YUZpZWxkQW5ub3RhdGlvbkFjdGlvbihhY3Rpb24gYXMgRGF0YUZpZWxkRm9yQWN0aW9uVHlwZXMsIGNvbnZlcnRlckNvbnRleHQpXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRrZXk6IEtleUhlbHBlci5nZW5lcmF0ZUtleUZyb21EYXRhRmllbGQoZGF0YUZpZWxkKSxcblx0XHRcdFx0XHRpc0FJT3BlcmF0aW9uOiBpc01lbnVBSU9wZXJhdGlvbihkYXRhRmllbGQuQWN0aW9ucykgPT09IHRydWUgfHwgdW5kZWZpbmVkXG5cdFx0XHRcdH0gYXMgQW5ub3RhdGlvbkFjdGlvbkFjdGlvbkdyb3VwKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gY2hhcnRBY3Rpb25zO1xufVxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIGRhdGFGaWVsZCBpcyBhIERhdGFGaWVsZEZvckFjdGlvbkdyb3VwLlxuICogQHBhcmFtIGRhdGFGaWVsZCBUaGUgZGF0YUZpZWxkIHRvIGNoZWNrLlxuICogQHJldHVybnMgVGhlIGRhdGFGaWVsZCBpZiBpdCBtYXRjaGVzIERhdGFGaWVsZEZvckFjdGlvbkdyb3VwLlxuICovXG5mdW5jdGlvbiBpc0Fubm90YXRpb25BY3Rpb25Hcm91cChkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpOiBkYXRhRmllbGQgaXMgRGF0YUZpZWxkRm9yQWN0aW9uR3JvdXAge1xuXHRyZXR1cm4gZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb25Hcm91cDtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGFuZCByZXR1cm5zIERhdGFGaWVsZEZvckFjdGlvbiBmb3IgbWVudSBvZiBEYXRhRmllbGRGb3JBY3Rpb25Hcm91cC5cbiAqIEBwYXJhbSBkYXRhRmllbGQgVGhlIGRhdGFmaWVsZCB0byBnZXQgdGhlIGFubm90YXRpb24gYWN0aW9uIGZyb20uXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHQuXG4gKiBAcmV0dXJucyBBbiBhbm5vdGF0aW9uIGFjdGlvbi5cbiAqL1xuZnVuY3Rpb24gZ2V0RGF0YUZpZWxkQW5ub3RhdGlvbkFjdGlvbihcblx0ZGF0YUZpZWxkOiBEYXRhRmllbGRGb3JBY3Rpb25UeXBlcyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBBbm5vdGF0aW9uQWN0aW9uIHtcblx0cmV0dXJuIHtcblx0XHR0eXBlOiBBY3Rpb25UeXBlLkRhdGFGaWVsZEZvckFjdGlvbixcblx0XHRhbm5vdGF0aW9uUGF0aDogY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKGRhdGFGaWVsZC5mdWxseVF1YWxpZmllZE5hbWUpLFxuXHRcdGtleTogS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpLFxuXHRcdHZpc2libGU6IGdldENvbXBpbGVFeHByZXNzaW9uRm9yQWN0aW9uKGRhdGFGaWVsZCwgY29udmVydGVyQ29udGV4dClcblx0fTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENoYXJ0QWN0aW9ucyhcblx0Y2hhcnRBbm5vdGF0aW9uOiBDaGFydCxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBDb21iaW5lZEFjdGlvbiB7XG5cdGNvbnN0IGFBbm5vdGF0aW9uQWN0aW9ucyA9IGdldENoYXJ0QWN0aW9uc0Zyb21Bbm5vdGF0aW9ucyhjaGFydEFubm90YXRpb24sIHZpc3VhbGl6YXRpb25QYXRoLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgbWFuaWZlc3RBY3Rpb25zID0gZ2V0QWN0aW9uc0Zyb21NYW5pZmVzdChcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb248Q2hhcnRNYW5pZmVzdENvbmZpZ3VyYXRpb24+KHZpc3VhbGl6YXRpb25QYXRoKS5hY3Rpb25zIGFzIFJlY29yZDxcblx0XHRcdHN0cmluZyxcblx0XHRcdE1hbmlmZXN0QWN0aW9uXG5cdFx0Pixcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdGFBbm5vdGF0aW9uQWN0aW9uc1xuXHQpO1xuXHRjb25zdCBhY3Rpb25PdmVyd3JpdGVDb25maWc6IE92ZXJyaWRlVHlwZUFjdGlvbiA9IHtcblx0XHRlbmFibGVkOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdGVuYWJsZU9uU2VsZWN0OiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdHZpc2libGU6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0Y29tbWFuZDogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRwb3NpdGlvbjogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZVxuXHR9O1xuXHRjb25zdCBjaGFydEFjdGlvbnMgPSBpbnNlcnRDdXN0b21FbGVtZW50czxCYXNlQWN0aW9uPihhQW5ub3RhdGlvbkFjdGlvbnMsIG1hbmlmZXN0QWN0aW9ucy5hY3Rpb25zLCBhY3Rpb25PdmVyd3JpdGVDb25maWcpO1xuXHRyZXR1cm4ge1xuXHRcdGFjdGlvbnM6IGNoYXJ0QWN0aW9ucyxcblx0XHRjb21tYW5kQWN0aW9uczogbWFuaWZlc3RBY3Rpb25zLmNvbW1hbmRBY3Rpb25zXG5cdH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQMTNuTW9kZShcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBzdHJpbmcgfCBib29sZWFuIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyOiBNYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRjb25zdCBjaGFydE1hbmlmZXN0U2V0dGluZ3M6IENoYXJ0TWFuaWZlc3RDb25maWd1cmF0aW9uID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKTtcblx0Y29uc3QgdmFyaWFudE1hbmFnZW1lbnQ6IFZhcmlhbnRNYW5hZ2VtZW50VHlwZSA9IG1hbmlmZXN0V3JhcHBlci5nZXRWYXJpYW50TWFuYWdlbWVudCgpO1xuXHRjb25zdCBhUGVyc29uYWxpemF0aW9uOiBzdHJpbmdbXSA9IFtdO1xuXHQvLyBQZXJzb25hbGl6YXRpb24gY29uZmlndXJlZCBpbiBtYW5pZmVzdC5cblx0Y29uc3QgcGVyc29uYWxpemF0aW9uID0gY2hhcnRNYW5pZmVzdFNldHRpbmdzPy5jaGFydFNldHRpbmdzPy5wZXJzb25hbGl6YXRpb247XG5cdGNvbnN0IGlzQ29udHJvbFZhcmlhbnQgPSB2YXJpYW50TWFuYWdlbWVudCA9PT0gVmFyaWFudE1hbmFnZW1lbnRUeXBlLkNvbnRyb2wgPyB0cnVlIDogZmFsc2U7XG5cdC8vIGlmIHBlcnNvbmFsaXphdGlvbiBpcyBzZXQgdG8gZmFsc2UgZG8gbm90IHNob3cgYW55IG9wdGlvblxuXHRpZiAoKHBlcnNvbmFsaXphdGlvbiAhPT0gdW5kZWZpbmVkICYmICFwZXJzb25hbGl6YXRpb24pIHx8IHBlcnNvbmFsaXphdGlvbiA9PSBcImZhbHNlXCIpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHR5cGVvZiBwZXJzb25hbGl6YXRpb24gPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBTcGVjaWZpYyBwZXJzb25hbGl6YXRpb24gb3B0aW9ucyBlbmFibGVkIGluIG1hbmlmZXN0LiBVc2UgdGhlbSBhcyBpcy5cblx0XHRpZiAocGVyc29uYWxpemF0aW9uLnR5cGUpIHtcblx0XHRcdGFQZXJzb25hbGl6YXRpb24ucHVzaChcIlR5cGVcIik7XG5cdFx0fVxuXHRcdGlmIChwZXJzb25hbGl6YXRpb24uaXRlbSkge1xuXHRcdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiSXRlbVwiKTtcblx0XHR9XG5cdFx0aWYgKHBlcnNvbmFsaXphdGlvbi5zb3J0KSB7XG5cdFx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJTb3J0XCIpO1xuXHRcdH1cblx0XHRpZiAocGVyc29uYWxpemF0aW9uLmZpbHRlcikge1xuXHRcdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiRmlsdGVyXCIpO1xuXHRcdH1cblx0XHRyZXR1cm4gYVBlcnNvbmFsaXphdGlvbi5qb2luKFwiLFwiKTtcblx0fSBlbHNlIGlmIChpc0NvbnRyb2xWYXJpYW50IHx8ICEhcGVyc29uYWxpemF0aW9uKSB7XG5cdFx0Ly8gbWFuaWZlc3QgaGFzIHBlcnNvbmFsaXphdGlvbiBjb25maWd1cmVkLCBjaGVjayBpZiBpdCdzIHRydWVcblx0XHQvLyBpZiBtYW5pZmVzdCBkb2Vzbid0IGhhdmUgcGVyc29uYWxpemF0aW9uLCBjaGVjayBmb3IgdmFyaWFudCBtYW5hZ2VtZW50IGlzIHNldCB0byBjb250cm9sXG5cdFx0cmV0dXJuIFwiU29ydCxUeXBlLEl0ZW0sRmlsdGVyXCI7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gaWYgbWFuaWZlc3QgZG9lc24ndCBoYXZlIHBlcnNvbmFsaXphdGlvbiwgc2hvdyBkZWZhdWx0IG9wdGlvbnMgd2l0aG91dCBmaWx0ZXJcblx0XHRyZXR1cm4gXCJTb3J0LFR5cGUsSXRlbVwiO1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRIZWFkZXJJbmZvKFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IHsgaGVhZGVyOiBzdHJpbmcgfCB1bmRlZmluZWQ7IGhlYWRlclZpc2libGU6IGJvb2xlYW4gfCB1bmRlZmluZWQgfSB7XG5cdGNvbnN0IGNoYXJ0TWFuaWZlc3RTZXR0aW5nczogQ2hhcnRNYW5pZmVzdENvbmZpZ3VyYXRpb24gPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb24odmlzdWFsaXphdGlvblBhdGgpO1xuXHRyZXR1cm4ge1xuXHRcdGhlYWRlcjogY2hhcnRNYW5pZmVzdFNldHRpbmdzLmNoYXJ0U2V0dGluZ3M/LmhlYWRlcixcblx0XHRoZWFkZXJWaXNpYmxlOiBjaGFydE1hbmlmZXN0U2V0dGluZ3M/LmNoYXJ0U2V0dGluZ3M/LmhlYWRlclZpc2libGVcblx0fTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbGVjdGlvbk1vZGUoXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogXCJNdWx0aXBsZVwiIHwgXCJTaW5nbGVcIiB8IFwiTm9uZVwiIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgY2hhcnRNYW5pZmVzdFNldHRpbmdzOiBDaGFydE1hbmlmZXN0Q29uZmlndXJhdGlvbiA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbih2aXN1YWxpemF0aW9uUGF0aCk7XG5cdHJldHVybiBjaGFydE1hbmlmZXN0U2V0dGluZ3MuY2hhcnRTZXR0aW5ncz8uc2VsZWN0aW9uTW9kZTtcbn1cbmV4cG9ydCB0eXBlIENoYXJ0Q3VzdG9tQWdncmVnYXRlID0ge1xuXHRuYW1lOiBzdHJpbmc7XG5cdGxhYmVsOiBzdHJpbmc7XG5cdHNvcnRhYmxlOiBib29sZWFuO1xuXHRzb3J0T3JkZXI6IFwiYm90aFwiO1xuXHRjb250ZXh0RGVmaW5pbmdQcm9wZXJ0eTogc3RyaW5nW107XG59O1xuXG5leHBvcnQgdHlwZSBUcmFuc0FnZyA9IHtcblx0bmFtZTogc3RyaW5nO1xuXHRwcm9wZXJ0eVBhdGg6IHN0cmluZztcblx0YWdncmVnYXRpb25NZXRob2Q6IEFnZ3JlZ2F0aW9uTWV0aG9kO1xuXHRsYWJlbDogc3RyaW5nO1xuXHRzb3J0YWJsZTogYm9vbGVhbjtcblx0c29ydE9yZGVyOiBcImJvdGhcIjtcblx0Y3VzdG9tOiBib29sZWFuO1xufTtcbmZ1bmN0aW9uIGdldEFnZ3JlZ2F0YWJsZVByb3BlcnRpZXNPYmplY3QoYWdnUHJvcDogQWdncmVnYXRhYmxlUHJvcGVydHlUeXBlIHwgUHJvcGVydHkpOiB7IFByb3BlcnR5OiB7ICRQcm9wZXJ0eVBhdGg6IHN0cmluZyB9IH0ge1xuXHRsZXQgb2JqO1xuXHRpZiAoKGFnZ1Byb3AgYXMgQWdncmVnYXRhYmxlUHJvcGVydHlUeXBlKT8uUHJvcGVydHkpIHtcblx0XHRvYmogPSB7XG5cdFx0XHRQcm9wZXJ0eToge1xuXHRcdFx0XHQkUHJvcGVydHlQYXRoOiAoYWdnUHJvcCBhcyBBZ2dyZWdhdGFibGVQcm9wZXJ0eVR5cGUpPy5Qcm9wZXJ0eT8udmFsdWVcblx0XHRcdH1cblx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdG9iaiA9IHtcblx0XHRcdFByb3BlcnR5OiB7XG5cdFx0XHRcdCRQcm9wZXJ0eVBhdGg6IChhZ2dQcm9wIGFzIFByb3BlcnR5KT8ubmFtZVxuXHRcdFx0fVxuXHRcdH07XG5cdH1cblx0cmV0dXJuIG9iajtcbn1cbi8qKlxuICogQ3JlYXRlIHRoZSBDaGFydFZpc3VhbGl6YXRpb24gY29uZmlndXJhdGlvbiB0aGF0IHdpbGwgYmUgdXNlZCB0byBkaXNwbGF5IGEgY2hhcnQgdXNpbmcgdGhlIENoYXJ0IGJ1aWxkaW5nIGJsb2NrLlxuICogQHBhcmFtIGNoYXJ0QW5ub3RhdGlvbiBUaGUgdGFyZ2V0ZWQgY2hhcnQgYW5ub3RhdGlvblxuICogQHBhcmFtIHZpc3VhbGl6YXRpb25QYXRoIFRoZSBwYXRoIG9mIHRoZSB2aXN1YWxpemF0aW9uIGFubm90YXRpb25cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIGRvTm90Q2hlY2tBcHBseVN1cHBvcnRlZCBGbGFnIHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgQXBwbHlTdXBwb3J0ZWQgbmVlZHMgdG8gYmUgY2hlY2tlZCBvciBub3RcbiAqIEBwYXJhbSBzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50UGF0aFxuICogQHJldHVybnMgVGhlIGNoYXJ0IHZpc3VhbGl6YXRpb24gYmFzZWQgb24gdGhlIGFubm90YXRpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNoYXJ0VmlzdWFsaXphdGlvbihcblx0Y2hhcnRBbm5vdGF0aW9uOiBDaGFydCxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRkb05vdENoZWNrQXBwbHlTdXBwb3J0ZWQ/OiBib29sZWFuLFxuXHRzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50UGF0aD86IHN0cmluZ1xuKTogQ2hhcnRWaXN1YWxpemF0aW9uIHtcblx0Y29uc3QgYWdncmVnYXRpb25IZWxwZXIgPSBuZXcgQWdncmVnYXRpb25IZWxwZXIoY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCksIGNvbnZlcnRlckNvbnRleHQsIHRydWUpOyAvLyBwYXNzaW5nIHRoZSBsYXN0IHBhcmFtZXRlciBhcyB0cnVlIHRvIGNvbnNpZGVyIHRoZSBvbGQgYW5ub3RhdGlvbnMgaS5lLiBBZ2dyZWdhdGlvbi5BZ2dyZWdhdGFibGUgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgaW4gY2FzZSBvZiBjaGFydFxuXHRpZiAoIWRvTm90Q2hlY2tBcHBseVN1cHBvcnRlZCAmJiAhYWdncmVnYXRpb25IZWxwZXIuaXNBbmFseXRpY3NTdXBwb3J0ZWQoKSkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIkFwcGx5U3VwcG9ydGVkIGlzIG5vdCBhZGRlZCB0byB0aGUgYW5ub3RhdGlvbnNcIik7XG5cdH1cblx0Y29uc3QgYVRyYW5zQWdncmVnYXRpb25zID0gYWdncmVnYXRpb25IZWxwZXIuZ2V0VHJhbnNBZ2dyZWdhdGlvbnMoKTtcblx0Y29uc3QgYUN1c3RvbUFnZ3JlZ2F0ZXMgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRDdXN0b21BZ2dyZWdhdGVEZWZpbml0aW9ucygpO1xuXHRjb25zdCBwYWdlTWFuaWZlc3RTZXR0aW5nczogTWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0Y29uc3QgdmFyaWFudE1hbmFnZW1lbnQ6IFZhcmlhbnRNYW5hZ2VtZW50VHlwZSA9IHBhZ2VNYW5pZmVzdFNldHRpbmdzLmdldFZhcmlhbnRNYW5hZ2VtZW50KCk7XG5cdGNvbnN0IHAxM25Nb2RlOiBDaGFydFAxM25UeXBlID0gZ2V0UDEzbk1vZGUodmlzdWFsaXphdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRpZiAocDEzbk1vZGUgPT09IHVuZGVmaW5lZCAmJiB2YXJpYW50TWFuYWdlbWVudCA9PT0gXCJDb250cm9sXCIpIHtcblx0XHRMb2cud2FybmluZyhcIlZhcmlhbnQgTWFuYWdlbWVudCBjYW5ub3QgYmUgZW5hYmxlZCB3aGVuIHBlcnNvbmFsaXphdGlvbiBpcyBkaXNhYmxlZFwiKTtcblx0fVxuXHRjb25zdCBtQ3VzdG9tQWdncmVnYXRlczogUmVjb3JkPHN0cmluZywgb2JqZWN0PiA9IHt9O1xuXHRpZiAoYUN1c3RvbUFnZ3JlZ2F0ZXMpIHtcblx0XHRjb25zdCBlbnRpdHlUeXBlID0gYWdncmVnYXRpb25IZWxwZXIuZ2V0RW50aXR5VHlwZSgpO1xuXHRcdGZvciAoY29uc3QgY3VzdG9tQWdncmVnYXRlIG9mIGFDdXN0b21BZ2dyZWdhdGVzKSB7XG5cdFx0XHRjb25zdCBhQ29udGV4dERlZmluaW5nUHJvcGVydGllcyA9IGN1c3RvbUFnZ3JlZ2F0ZT8uYW5ub3RhdGlvbnM/LkFnZ3JlZ2F0aW9uPy5Db250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzO1xuXHRcdFx0Y29uc3QgcXVhbGlmaWVyID0gY3VzdG9tQWdncmVnYXRlPy5xdWFsaWZpZXI7XG5cdFx0XHRjb25zdCByZWxhdGVkQ3VzdG9tQWdncmVnYXRlUHJvcGVydHkgPSBxdWFsaWZpZXIgJiYgZW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzLmZpbmQoKHByb3BlcnR5KSA9PiBwcm9wZXJ0eS5uYW1lID09PSBxdWFsaWZpZXIpO1xuXHRcdFx0Y29uc3QgbGFiZWwgPSByZWxhdGVkQ3VzdG9tQWdncmVnYXRlUHJvcGVydHkgJiYgcmVsYXRlZEN1c3RvbUFnZ3JlZ2F0ZVByb3BlcnR5Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5MYWJlbD8udG9TdHJpbmcoKTtcblx0XHRcdG1DdXN0b21BZ2dyZWdhdGVzW3F1YWxpZmllcl0gPSB7XG5cdFx0XHRcdG5hbWU6IHF1YWxpZmllcixcblx0XHRcdFx0bGFiZWw6IGxhYmVsIHx8IGBDdXN0b20gQWdncmVnYXRlICgke3F1YWxpZmllcn0pYCxcblx0XHRcdFx0c29ydGFibGU6IHRydWUsXG5cdFx0XHRcdHNvcnRPcmRlcjogXCJib3RoXCIsXG5cdFx0XHRcdGNvbnRleHREZWZpbmluZ1Byb3BlcnR5OiBhQ29udGV4dERlZmluaW5nUHJvcGVydGllc1xuXHRcdFx0XHRcdD8gYUNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMubWFwKChvQ3R4RGVmUHJvcGVydHkpID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIG9DdHhEZWZQcm9wZXJ0eS52YWx1ZTtcblx0XHRcdFx0XHQgIH0pXG5cdFx0XHRcdFx0OiBbXVxuXHRcdFx0fTtcblx0XHR9XG5cdH1cblxuXHRjb25zdCBtVHJhbnNBZ2dyZWdhdGlvbnM6IFJlY29yZDxzdHJpbmcsIFRyYW5zQWdnPiA9IHt9O1xuXHRjb25zdCBvUmVzb3VyY2VCdW5kbGVDb3JlID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpITtcblx0aWYgKGFUcmFuc0FnZ3JlZ2F0aW9ucykge1xuXHRcdGZvciAoY29uc3QgZWxlbWVudCBvZiBhVHJhbnNBZ2dyZWdhdGlvbnMpIHtcblx0XHRcdG1UcmFuc0FnZ3JlZ2F0aW9uc1tlbGVtZW50Lk5hbWUgYXMgc3RyaW5nXSA9IHtcblx0XHRcdFx0bmFtZTogZWxlbWVudC5OYW1lIGFzIHN0cmluZyxcblx0XHRcdFx0cHJvcGVydHlQYXRoOiBlbGVtZW50LkFnZ3JlZ2F0YWJsZVByb3BlcnR5LnZhbHVlLFxuXHRcdFx0XHRhZ2dyZWdhdGlvbk1ldGhvZDogZWxlbWVudC5BZ2dyZWdhdGlvbk1ldGhvZCxcblx0XHRcdFx0bGFiZWw6IGVsZW1lbnQ/LmFubm90YXRpb25zPy5Db21tb24/LkxhYmVsXG5cdFx0XHRcdFx0PyBlbGVtZW50Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5MYWJlbD8udG9TdHJpbmcoKVxuXHRcdFx0XHRcdDogYCR7b1Jlc291cmNlQnVuZGxlQ29yZS5nZXRUZXh0KFwiQUdHUkVHQVRBQkxFX1BST1BFUlRZXCIpfSAoJHtlbGVtZW50Lk5hbWV9KWAsXG5cdFx0XHRcdHNvcnRhYmxlOiB0cnVlLFxuXHRcdFx0XHRzb3J0T3JkZXI6IFwiYm90aFwiLFxuXHRcdFx0XHRjdXN0b206IGZhbHNlXG5cdFx0XHR9O1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IGFBZ2dQcm9wcyA9IGFnZ3JlZ2F0aW9uSGVscGVyLmdldEFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMoKTtcblx0Y29uc3QgYUdycFByb3BzID0gYWdncmVnYXRpb25IZWxwZXIuZ2V0R3JvdXBhYmxlUHJvcGVydGllcygpO1xuXHRjb25zdCBtQXBwbHlTdXBwb3J0ZWQgPSB7fSBhcyBDaGFydEFwcGx5U3VwcG9ydGVkO1xuXHRtQXBwbHlTdXBwb3J0ZWQuJFR5cGUgPSBBZ2dyZWdhdGlvbkFubm90YXRpb25UeXBlcy5BcHBseVN1cHBvcnRlZFR5cGU7XG5cdG1BcHBseVN1cHBvcnRlZC5BZ2dyZWdhdGFibGVQcm9wZXJ0aWVzID0gW107XG5cdG1BcHBseVN1cHBvcnRlZC5Hcm91cGFibGVQcm9wZXJ0aWVzID0gW107XG5cblx0aWYgKGFBZ2dQcm9wcykge1xuXHRcdG1BcHBseVN1cHBvcnRlZC5BZ2dyZWdhdGFibGVQcm9wZXJ0aWVzID0gYUFnZ1Byb3BzLm1hcCgocHJvcCkgPT5cblx0XHRcdGdldEFnZ3JlZ2F0YWJsZVByb3BlcnRpZXNPYmplY3QocHJvcClcblx0XHQpIGFzIChFeHBhbmRQYXRoVHlwZTxQcm9wZXJ0eVBhdGg+ICYgeyBQcm9wZXJ0eTogRXhwYW5kUGF0aFR5cGU8UHJvcGVydHlQYXRoPiB9KVtdO1xuXHR9XG5cblx0aWYgKGFHcnBQcm9wcykge1xuXHRcdG1BcHBseVN1cHBvcnRlZC5Hcm91cGFibGVQcm9wZXJ0aWVzID0gYUdycFByb3BzLm1hcCgocHJvcCkgPT4gKHtcblx0XHRcdFtcIiRQcm9wZXJ0eVBhdGhcIl06IHByb3AudmFsdWVcblx0XHR9KSkgYXMgKEV4cGFuZFBhdGhUeXBlPFByb3BlcnR5UGF0aD4gJiB7IFByb3BlcnR5OiBFeHBhbmRQYXRoVHlwZTxQcm9wZXJ0eVBhdGg+IH0pW107XG5cdH1cblxuXHRjb25zdCBjaGFydEFjdGlvbnMgPSBnZXRDaGFydEFjdGlvbnMoY2hhcnRBbm5vdGF0aW9uLCB2aXN1YWxpemF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCk7XG5cdGxldCBbbmF2aWdhdGlvblByb3BlcnR5UGF0aCAvKiwgYW5ub3RhdGlvblBhdGgqL10gPSB2aXN1YWxpemF0aW9uUGF0aC5zcGxpdChcIkBcIik7XG5cdGlmIChuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxhc3RJbmRleE9mKFwiL1wiKSA9PT0gbmF2aWdhdGlvblByb3BlcnR5UGF0aC5sZW5ndGggLSAxKSB7XG5cdFx0Ly8gRHJvcCB0cmFpbGluZyBzbGFzaFxuXHRcdG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPSBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLnN1YnN0cmluZygwLCBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxlbmd0aCAtIDEpO1xuXHR9XG5cdGNvbnN0IHRpdGxlID0gY2hhcnRBbm5vdGF0aW9uLlRpdGxlPy50b1N0cmluZygpIHx8IFwiXCI7IC8vIHJlYWQgdGl0bGUgZnJvbSBjaGFydCBhbm5vdGF0aW9uXG5cdGNvbnN0IGRhdGFNb2RlbFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKTtcblx0Y29uc3QgaXNFbnRpdHlTZXQ6IGJvb2xlYW4gPSBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxlbmd0aCA9PT0gMDtcblx0Y29uc3QgZW50aXR5TmFtZTogc3RyaW5nID0gZGF0YU1vZGVsUGF0aC50YXJnZXRFbnRpdHlTZXQgPyBkYXRhTW9kZWxQYXRoLnRhcmdldEVudGl0eVNldC5uYW1lIDogZGF0YU1vZGVsUGF0aC5zdGFydGluZ0VudGl0eVNldC5uYW1lO1xuXHRjb25zdCBzRmlsdGVyYmFySWQgPSBpc0VudGl0eVNldCA/IGdldEZpbHRlckJhcklEKGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udGV4dFBhdGgoKSkgOiB1bmRlZmluZWQ7XG5cdGNvbnN0IG9WaXpQcm9wZXJ0aWVzID0ge1xuXHRcdHBsb3RBcmVhOiB7XG5cdFx0XHR3aW5kb3c6IHtcblx0XHRcdFx0c3RhcnQ6IFwiZmlyc3REYXRhUG9pbnRcIixcblx0XHRcdFx0ZW5kOiBcImxhc3REYXRhUG9pbnRcIlxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0bGVnZW5kR3JvdXA6IHtcblx0XHRcdGxheW91dDoge1xuXHRcdFx0XHRwb3NpdGlvbjogXCJib3R0b21cIlxuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0bGV0IGF1dG9CaW5kT25Jbml0OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXHRpZiAoY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLk9iamVjdFBhZ2UpIHtcblx0XHRhdXRvQmluZE9uSW5pdCA9IHRydWU7XG5cdH0gZWxzZSBpZiAoXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQgfHxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlXG5cdCkge1xuXHRcdGF1dG9CaW5kT25Jbml0ID0gZmFsc2U7XG5cdH1cblx0Y29uc3QgaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyA9XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5oYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zKCkgfHxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlO1xuXHRjb25zdCBvblNlZ21lbnRlZEJ1dHRvblByZXNzZWQgPSBoYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zID8gXCIuaGFuZGxlcnMub25TZWdtZW50ZWRCdXR0b25QcmVzc2VkXCIgOiBcIlwiO1xuXHRjb25zdCB2aXNpYmxlID0gaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyA/IFwiez0gJHtwYWdlSW50ZXJuYWw+YWxwQ29udGVudFZpZXd9ICE9PSAnVGFibGUnfVwiIDogXCJ0cnVlXCI7XG5cdGNvbnN0IGFsbG93ZWRUcmFuc2Zvcm1hdGlvbnMgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRBbGxvd2VkVHJhbnNmb3JtYXRpb25zKCk7XG5cdG1BcHBseVN1cHBvcnRlZC5lbmFibGVTZWFyY2ggPSBhbGxvd2VkVHJhbnNmb3JtYXRpb25zID8gYWxsb3dlZFRyYW5zZm9ybWF0aW9ucy5pbmNsdWRlcyhcInNlYXJjaFwiKSA6IHRydWU7XG5cdGxldCBxdWFsaWZpZXIgPSBcIlwiO1xuXHRpZiAoY2hhcnRBbm5vdGF0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZS5zcGxpdChcIiNcIikubGVuZ3RoID4gMSkge1xuXHRcdHF1YWxpZmllciA9IGNoYXJ0QW5ub3RhdGlvbi5mdWxseVF1YWxpZmllZE5hbWUuc3BsaXQoXCIjXCIpWzFdO1xuXHR9XG5cdGNvbnN0IGlzSW5zaWdodHNWaXNpYmxlID0gZ2V0SW5zaWdodHNWaXNpYmlsaXR5KFwiQW5hbHl0aWNhbFwiLCBjb252ZXJ0ZXJDb250ZXh0LCB2aXN1YWxpemF0aW9uUGF0aCk7XG5cdGNvbnN0IGlzUGFyYW1ldGVyaXplZEVudGl0eVNldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0UGFyYW1ldGVyRW50aXR5VHlwZSgpID8gdHJ1ZSA6IGZhbHNlO1xuXHRjb25zdCBpc0luc2lnaHRzRW5hYmxlZCA9IGFuZChnZXRJbnNpZ2h0c0VuYWJsZW1lbnQoKSwgaXNJbnNpZ2h0c1Zpc2libGUpO1xuXHRjb25zdCB7IGhlYWRlciwgaGVhZGVyVmlzaWJsZSB9ID0gZ2V0SGVhZGVySW5mbyh2aXN1YWxpemF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IHNlbGVjdGlvbk1vZGUgPSBnZXRTZWxlY3Rpb25Nb2RlKHZpc3VhbGl6YXRpb25QYXRoLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgY2hhcnREaW1lbnNpb25LZXlBbmRSb2xlOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+W10gPSBbXTtcblx0Y2hhcnRBbm5vdGF0aW9uPy5EaW1lbnNpb25BdHRyaWJ1dGVzPy5mb3JFYWNoKChkaW1lbnNpb25BdHRyaWJ1dGUpID0+IHtcblx0XHRjb25zdCBvYmo6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblx0XHRvYmpbZGltZW5zaW9uQXR0cmlidXRlPy5EaW1lbnNpb24/LnZhbHVlIGFzIHN0cmluZ10gPSBkaW1lbnNpb25BdHRyaWJ1dGU/LlJvbGUgYXMgc3RyaW5nO1xuXHRcdGNoYXJ0RGltZW5zaW9uS2V5QW5kUm9sZS5wdXNoKG9iaik7XG5cdH0pO1xuXG5cdGNvbnN0IGNoYXJ0TWVhc3VyZUtleUFuZFJvbGU6IFJlY29yZDxzdHJpbmcsIHN0cmluZz5bXSA9IFtdO1xuXHRjaGFydEFubm90YXRpb24/Lk1lYXN1cmVBdHRyaWJ1dGVzPy5mb3JFYWNoKChtZWFzdXJlQXR0cmlidXRlKSA9PiB7XG5cdFx0Y29uc3Qgb2JqOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cdFx0b2JqW21lYXN1cmVBdHRyaWJ1dGU/Lk1lYXN1cmU/LnZhbHVlIGFzIHN0cmluZ10gPSBtZWFzdXJlQXR0cmlidXRlPy5Sb2xlIGFzIHN0cmluZztcblx0XHRjaGFydE1lYXN1cmVLZXlBbmRSb2xlLnB1c2goe30pO1xuXHR9KTtcblx0cmV0dXJuIHtcblx0XHR0eXBlOiBWaXN1YWxpemF0aW9uVHlwZS5DaGFydCxcblx0XHRpZDogcXVhbGlmaWVyXG5cdFx0XHQ/IGdldENoYXJ0SUQoaXNFbnRpdHlTZXQgPyBlbnRpdHlOYW1lIDogbmF2aWdhdGlvblByb3BlcnR5UGF0aCwgcXVhbGlmaWVyLCBWaXN1YWxpemF0aW9uVHlwZS5DaGFydClcblx0XHRcdDogZ2V0Q2hhcnRJRChpc0VudGl0eVNldCA/IGVudGl0eU5hbWUgOiBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLCBWaXN1YWxpemF0aW9uVHlwZS5DaGFydCksXG5cdFx0Y29sbGVjdGlvbjogZ2V0VGFyZ2V0T2JqZWN0UGF0aChjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSksXG5cdFx0YXBpSWQ6IGdlbmVyYXRlKFtcblx0XHRcdHF1YWxpZmllclxuXHRcdFx0XHQ/IGdldENoYXJ0SUQoaXNFbnRpdHlTZXQgPyBlbnRpdHlOYW1lIDogbmF2aWdhdGlvblByb3BlcnR5UGF0aCwgcXVhbGlmaWVyLCBWaXN1YWxpemF0aW9uVHlwZS5DaGFydClcblx0XHRcdFx0OiBnZXRDaGFydElEKGlzRW50aXR5U2V0ID8gZW50aXR5TmFtZSA6IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgsIFZpc3VhbGl6YXRpb25UeXBlLkNoYXJ0KSxcblx0XHRcdFwiQ2hhcnRcIlxuXHRcdF0pLFxuXHRcdGVudGl0eU5hbWU6IGVudGl0eU5hbWUsXG5cdFx0cGVyc29uYWxpemF0aW9uOiBnZXRQMTNuTW9kZSh2aXN1YWxpemF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCksXG5cdFx0bmF2aWdhdGlvblBhdGg6IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgsXG5cdFx0YW5ub3RhdGlvblBhdGg6IGNvbnZlcnRlckNvbnRleHQuZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aCh2aXN1YWxpemF0aW9uUGF0aCksXG5cdFx0ZmlsdGVySWQ6IHNGaWx0ZXJiYXJJZCxcblx0XHR2aXpQcm9wZXJ0aWVzOiBKU09OLnN0cmluZ2lmeShvVml6UHJvcGVydGllcyksXG5cdFx0YWN0aW9uczogY2hhcnRBY3Rpb25zLmFjdGlvbnMsXG5cdFx0Y29tbWFuZEFjdGlvbnM6IGNoYXJ0QWN0aW9ucy5jb21tYW5kQWN0aW9ucyxcblx0XHR0aXRsZTogdGl0bGUsXG5cdFx0YXV0b0JpbmRPbkluaXQ6IGF1dG9CaW5kT25Jbml0LFxuXHRcdG9uU2VnbWVudGVkQnV0dG9uUHJlc3NlZDogb25TZWdtZW50ZWRCdXR0b25QcmVzc2VkLFxuXHRcdHZpc2libGU6IHZpc2libGUsXG5cdFx0Y3VzdG9tQWdnOiBtQ3VzdG9tQWdncmVnYXRlcyxcblx0XHR0cmFuc0FnZzogbVRyYW5zQWdncmVnYXRpb25zLFxuXHRcdGFwcGx5U3VwcG9ydGVkOiBtQXBwbHlTdXBwb3J0ZWQsXG5cdFx0c2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFBhdGgsXG5cdFx0dmFyaWFudE1hbmFnZW1lbnQ6IGZpbmRWYXJpYW50TWFuYWdlbWVudChwMTNuTW9kZSwgdmFyaWFudE1hbmFnZW1lbnQpLFxuXHRcdGlzSW5zaWdodHNFbmFibGVkOiBpc0luc2lnaHRzRW5hYmxlZCxcblx0XHRpc0luc2lnaHRzVmlzaWJsZTogaXNJbnNpZ2h0c1Zpc2libGUsXG5cdFx0aXNQYXJhbWV0ZXJpemVkRW50aXR5U2V0OiBpc1BhcmFtZXRlcml6ZWRFbnRpdHlTZXQsXG5cdFx0aGVhZGVyOiBoZWFkZXIsXG5cdFx0aGVhZGVyVmlzaWJsZTogaGVhZGVyVmlzaWJsZSxcblx0XHRzZWxlY3Rpb25Nb2RlOiBzZWxlY3Rpb25Nb2RlLFxuXHRcdGNoYXJ0RGltZW5zaW9uS2V5QW5kUm9sZTogY2hhcnREaW1lbnNpb25LZXlBbmRSb2xlLFxuXHRcdGNoYXJ0TWVhc3VyZUtleUFuZFJvbGU6IGNoYXJ0TWVhc3VyZUtleUFuZFJvbGVcblx0fTtcbn1cbi8qKlxuICogTWV0aG9kIHRvIGRldGVybWluZSB0aGUgdmFyaWFudCBtYW5hZ2VtZW50LlxuICogQHBhcmFtIHAxM25Nb2RlXG4gKiBAcGFyYW0gdmFyaWFudE1hbmFnZW1lbnRcbiAqIEByZXR1cm5zIFRoZSB2YXJpYW50IG1hbmFnZW1lbnQgZm9yIHRoZSBjaGFydFxuICovXG5mdW5jdGlvbiBmaW5kVmFyaWFudE1hbmFnZW1lbnQocDEzbk1vZGU6IENoYXJ0UDEzblR5cGUsIHZhcmlhbnRNYW5hZ2VtZW50OiBWYXJpYW50TWFuYWdlbWVudFR5cGUpOiBWYXJpYW50TWFuYWdlbWVudFR5cGUge1xuXHRyZXR1cm4gdmFyaWFudE1hbmFnZW1lbnQgPT09IFwiQ29udHJvbFwiICYmICFwMTNuTW9kZSA/IFZhcmlhbnRNYW5hZ2VtZW50VHlwZS5Ob25lIDogdmFyaWFudE1hbmFnZW1lbnQ7XG59XG5cbi8qKlxuICogQ3JlYXRlIHRoZSBDaGFydFZpc3VhbGl6YXRpb24gY29uZmlndXJhdGlvbiB0aGF0IHdpbGwgYmUgdXNlZCB0byBkdXJpbmcgdGVtcGxhdGluZy5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIHZpc3VhbGl6YXRpb25QYXRoIFRoZSBwYXRoIG9mIHRoZSB2aXN1YWxpemF0aW9uIGFubm90YXRpb25cbiAqIEBwYXJhbSB2aXN1YWxpemF0aW9uIFRoZSB2aXN1YWxpemF0aW9uIGFubm90YXRpb25cbiAqIEByZXR1cm5zIFRoZSBjaGFydCB2aXN1YWxpemF0aW9uIGJhc2VkIG9uIHRoZSBhbm5vdGF0aW9uIHVzZWQgZm9yIHRlbXBsYXRpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNoYXJ0VmlzdWFsaXphdGlvbkZvclRlbXBsYXRpbmcoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0dmlzdWFsaXphdGlvbjogQWN0dWFsVmlzdWFsaXphdGlvbkFubm90YXRpb25zXG4pOiBDaGFydFRlbXBsYXRlVmlzdWFsaXphdGlvbiB7XG5cdGNvbnN0IHF1YWxpZmllciA9IHZpc3VhbGl6YXRpb24uZnVsbHlRdWFsaWZpZWROYW1lLnNwbGl0KFwiI1wiKS5sZW5ndGggPiAxID8gdmlzdWFsaXphdGlvbi5mdWxseVF1YWxpZmllZE5hbWUuc3BsaXQoXCIjXCIpWzFdIDogXCJcIjtcblx0Y29uc3QgW25hdmlnYXRpb25Qcm9wZXJ0eVBhdGhdID0gdmlzdWFsaXphdGlvblBhdGguc3BsaXQoXCJAXCIpO1xuXG5cdGNvbnN0IGRhdGFNb2RlbFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKTtcblx0Y29uc3QgaXNFbnRpdHlTZXQ6IGJvb2xlYW4gPSBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxlbmd0aCA9PT0gMDtcblx0Y29uc3QgZW50aXR5TmFtZTogc3RyaW5nID0gZGF0YU1vZGVsUGF0aC50YXJnZXRFbnRpdHlTZXQ/Lm5hbWUgPz8gZGF0YU1vZGVsUGF0aC5zdGFydGluZ0VudGl0eVNldC5uYW1lO1xuXHRjb25zdCBhZ2dyZWdhdGlvbkhlbHBlciA9IG5ldyBBZ2dyZWdhdGlvbkhlbHBlcihjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSwgY29udmVydGVyQ29udGV4dCwgdHJ1ZSk7XG5cdGNvbnN0IGFsbG93ZWRUcmFuc2Zvcm1hdGlvbnMgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRBbGxvd2VkVHJhbnNmb3JtYXRpb25zKCk7XG5cdGNvbnN0IGlzUGFyYW1ldGVyaXplZEVudGl0eVNldCA9ICEhY29udmVydGVyQ29udGV4dC5nZXRQYXJhbWV0ZXJFbnRpdHlUeXBlKCk7XG5cdHJldHVybiB7XG5cdFx0YW5ub3RhdGlvblBhdGg6IGNvbnZlcnRlckNvbnRleHQuZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aCh2aXN1YWxpemF0aW9uUGF0aCksXG5cdFx0aXNQYXJhbWV0ZXJpemVkRW50aXR5U2V0LFxuXHRcdGNvbGxlY3Rpb246IGdldFRhcmdldE9iamVjdFBhdGgoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkpLFxuXHRcdHR5cGU6IFZpc3VhbGl6YXRpb25UeXBlLkNoYXJ0LFxuXHRcdGVudGl0eU5hbWUsXG5cdFx0aWQ6IHF1YWxpZmllclxuXHRcdFx0PyBnZXRDaGFydElEKGlzRW50aXR5U2V0ID8gZW50aXR5TmFtZSA6IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgsIHF1YWxpZmllciwgVmlzdWFsaXphdGlvblR5cGUuQ2hhcnQpXG5cdFx0XHQ6IGdldENoYXJ0SUQoaXNFbnRpdHlTZXQgPyBlbnRpdHlOYW1lIDogbmF2aWdhdGlvblByb3BlcnR5UGF0aCwgVmlzdWFsaXphdGlvblR5cGUuQ2hhcnQpLFxuXHRcdGFwaUlkOiBnZW5lcmF0ZShbXG5cdFx0XHRxdWFsaWZpZXJcblx0XHRcdFx0PyBnZXRDaGFydElEKGlzRW50aXR5U2V0ID8gZW50aXR5TmFtZSA6IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgsIHF1YWxpZmllciwgVmlzdWFsaXphdGlvblR5cGUuQ2hhcnQpXG5cdFx0XHRcdDogZ2V0Q2hhcnRJRChpc0VudGl0eVNldCA/IGVudGl0eU5hbWUgOiBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLCBWaXN1YWxpemF0aW9uVHlwZS5DaGFydCksXG5cdFx0XHRcIkNoYXJ0XCJcblx0XHRdKSxcblx0XHRhcHBseVN1cHBvcnRlZDoge1xuXHRcdFx0JFR5cGU6IFwiT3JnLk9EYXRhLkFnZ3JlZ2F0aW9uLlYxLkFwcGx5U3VwcG9ydGVkVHlwZVwiLFxuXHRcdFx0ZW5hYmxlU2VhcmNoOiBhbGxvd2VkVHJhbnNmb3JtYXRpb25zPy5pbmNsdWRlcyhcInNlYXJjaFwiKSA/PyB0cnVlXG5cdFx0fVxuXHR9O1xufVxuXG4vKipcbiAqIE1ldGhvZCB0byBnZXQgY29tcGlsZSBleHByZXNzaW9uIGZvciBEYXRhRmllbGRGb3JBY3Rpb24gYW5kIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbi5cbiAqIEBwYXJhbSBkYXRhRmllbGRcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyBDb21waWxlIGV4cHJlc3Npb24gZm9yIERhdGFGaWVsZEZvckFjdGlvbiBhbmQgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uXG4gKi9cbmZ1bmN0aW9uIGdldENvbXBpbGVFeHByZXNzaW9uRm9yQWN0aW9uKFxuXHRkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0bm90KFxuXHRcdFx0ZXF1YWwoXG5cdFx0XHRcdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihcblx0XHRcdFx0XHRkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4sXG5cdFx0XHRcdFx0W10sXG5cdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0UmVsYXRpdmVNb2RlbFBhdGhGdW5jdGlvbigpXG5cdFx0XHRcdCksXG5cdFx0XHRcdHRydWVcblx0XHRcdClcblx0XHQpXG5cdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVCbGFua0NoYXJ0VmlzdWFsaXphdGlvbihjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiBDaGFydFZpc3VhbGl6YXRpb24ge1xuXHRjb25zdCBoYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zID1cblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMoKSB8fFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5BbmFseXRpY2FsTGlzdFBhZ2U7XG5cdGNvbnN0IGRhdGFNb2RlbFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKTtcblx0Y29uc3QgZW50aXR5TmFtZSA9IGRhdGFNb2RlbFBhdGgudGFyZ2V0RW50aXR5U2V0ID8gZGF0YU1vZGVsUGF0aC50YXJnZXRFbnRpdHlTZXQubmFtZSA6IGRhdGFNb2RlbFBhdGguc3RhcnRpbmdFbnRpdHlTZXQubmFtZTtcblxuXHRjb25zdCB2aXN1YWxpemF0aW9uOiBDaGFydFZpc3VhbGl6YXRpb24gPSB7XG5cdFx0dHlwZTogVmlzdWFsaXphdGlvblR5cGUuQ2hhcnQsXG5cdFx0aWQ6IGdldENoYXJ0SUQoZW50aXR5TmFtZSwgVmlzdWFsaXphdGlvblR5cGUuQ2hhcnQpLFxuXHRcdGFwaUlkOiBnZW5lcmF0ZShbZ2V0Q2hhcnRJRChlbnRpdHlOYW1lLCBWaXN1YWxpemF0aW9uVHlwZS5DaGFydCksIFwiQ2hhcnRcIl0pLFxuXHRcdGVudGl0eU5hbWU6IGVudGl0eU5hbWUsXG5cdFx0dGl0bGU6IFwiXCIsXG5cdFx0Y29sbGVjdGlvbjogXCJcIixcblx0XHRwZXJzb25hbGl6YXRpb246IHVuZGVmaW5lZCxcblx0XHRuYXZpZ2F0aW9uUGF0aDogXCJcIixcblx0XHRhbm5vdGF0aW9uUGF0aDogXCJcIixcblx0XHR2aXpQcm9wZXJ0aWVzOiBKU09OLnN0cmluZ2lmeSh7XG5cdFx0XHRsZWdlbmRHcm91cDoge1xuXHRcdFx0XHRsYXlvdXQ6IHtcblx0XHRcdFx0XHRwb3NpdGlvbjogXCJib3R0b21cIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSksXG5cdFx0YWN0aW9uczogW10sXG5cdFx0Y29tbWFuZEFjdGlvbnM6IHt9LFxuXHRcdGF1dG9CaW5kT25Jbml0OiBmYWxzZSxcblx0XHRvblNlZ21lbnRlZEJ1dHRvblByZXNzZWQ6IFwiXCIsXG5cdFx0dmlzaWJsZTogaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyA/IFwiez0gJHtwYWdlSW50ZXJuYWw+YWxwQ29udGVudFZpZXd9ICE9PSAnVGFibGUnfVwiIDogXCJ0cnVlXCIsXG5cdFx0Y3VzdG9tQWdnOiB7fSxcblx0XHR0cmFuc0FnZzoge30sXG5cdFx0YXBwbHlTdXBwb3J0ZWQ6IHtcblx0XHRcdCRUeXBlOiBcIk9yZy5PRGF0YS5BZ2dyZWdhdGlvbi5WMS5BcHBseVN1cHBvcnRlZFR5cGVcIixcblx0XHRcdEFnZ3JlZ2F0YWJsZVByb3BlcnRpZXM6IFtdLFxuXHRcdFx0R3JvdXBhYmxlUHJvcGVydGllczogW10sXG5cdFx0XHRlbmFibGVTZWFyY2g6IGZhbHNlXG5cdFx0fSxcblx0XHRtdWx0aVZpZXdzOiBmYWxzZSxcblx0XHR2YXJpYW50TWFuYWdlbWVudDogVmFyaWFudE1hbmFnZW1lbnRUeXBlLk5vbmVcblx0fTtcblxuXHRyZXR1cm4gdmlzdWFsaXphdGlvbjtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQXlEQTtBQUNBO0FBQ0E7O0VBNkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBU0EsOEJBQThCQSxDQUN0Q0MsZUFBc0IsRUFDdEJDLGlCQUF5QixFQUN6QkMsZ0JBQXlELEVBQ0Q7SUFDeEQsTUFBTUMsWUFBbUUsR0FBRyxFQUFFO0lBQzlFLElBQUlILGVBQWUsRUFBRUksT0FBTyxFQUFFO01BQzdCSixlQUFlLENBQUNJLE9BQU8sQ0FBQ0MsT0FBTyxDQUFFQyxTQUFnRSxJQUFLO1FBQ3JHLE1BQU1DLEdBQUcsR0FBR0MsU0FBUyxDQUFDQyx3QkFBd0IsQ0FBQ0gsU0FBUyxDQUFDO1FBQ3pELElBQUlJLDRCQUE0QixDQUFDSixTQUFTLENBQUMsSUFBSSxDQUFDQSxTQUFTLENBQUNL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
@@ -22,7 +22,7 @@ import type {
22
22
  CustomAction,
23
23
  OverrideTypeAction
24
24
  } from "sap/fe/core/converters/controls/Common/Action";
25
- import { getActionsFromManifest } from "sap/fe/core/converters/controls/Common/Action";
25
+ import { getActionsFromManifest, isActionAIOperation, isMenuAIOperation } from "sap/fe/core/converters/controls/Common/Action";
26
26
  import { OverrideType, insertCustomElements } from "sap/fe/core/converters/helpers/ConfigurableObject";
27
27
  import { KeyHelper } from "sap/fe/core/converters/helpers/Key";
28
28
  import { generate } from "sap/fe/core/helpers/StableIdHelper";
@@ -60,7 +60,7 @@ export type ChartTemplateVisualization = {
60
60
  */
61
61
  export type ChartVisualization = ChartTemplateVisualization & {
62
62
  entityName: string;
63
- personalization?: string;
63
+ personalization?: string | boolean;
64
64
  navigationPath: string;
65
65
  filterId?: string;
66
66
  vizProperties: string;
@@ -77,8 +77,15 @@ export type ChartVisualization = ChartTemplateVisualization & {
77
77
  selectionPresentationVariantPath?: string;
78
78
  isInsightsEnabled?: BindingToolkitExpression<boolean>;
79
79
  isInsightsVisible?: BindingToolkitExpression<boolean>;
80
+ header?: string;
81
+ headerVisible?: boolean;
82
+ selectionMode?: string;
83
+ chartDimensionKeyAndRole?: object;
84
+ chartMeasureKeyAndRole?: object;
80
85
  };
81
86
 
87
+ export type ChartP13nType = string | boolean | undefined;
88
+
82
89
  /**
83
90
  * Method to retrieve all chart actions from annotations.
84
91
  * @param chartAnnotation
@@ -103,7 +110,8 @@ function getChartActionsFromAnnotations(
103
110
  type: ActionType.DataFieldForAction,
104
111
  annotationPath: converterContext.getEntitySetBasedAnnotationPath(dataField.fullyQualifiedName),
105
112
  key,
106
- visible: getCompileExpressionForAction(dataField, converterContext)
113
+ visible: getCompileExpressionForAction(dataField, converterContext),
114
+ isAIOperation: isActionAIOperation(dataField) === true || undefined
107
115
  });
108
116
  }
109
117
  break;
@@ -128,7 +136,8 @@ function getChartActionsFromAnnotations(
128
136
  menu: dataField.Actions.map((action) =>
129
137
  getDataFieldAnnotationAction(action as DataFieldForActionTypes, converterContext)
130
138
  ),
131
- key: KeyHelper.generateKeyFromDataField(dataField)
139
+ key: KeyHelper.generateKeyFromDataField(dataField),
140
+ isAIOperation: isMenuAIOperation(dataField.Actions) === true || undefined
132
141
  } as AnnotationActionActionGroup);
133
142
  }
134
143
  });
@@ -190,7 +199,10 @@ export function getChartActions(
190
199
  };
191
200
  }
192
201
 
193
- export function getP13nMode(visualizationPath: string, converterContext: ConverterContext<PageContextPathTarget>): string | undefined {
202
+ export function getP13nMode(
203
+ visualizationPath: string,
204
+ converterContext: ConverterContext<PageContextPathTarget>
205
+ ): string | boolean | undefined {
194
206
  const manifestWrapper: ManifestWrapper = converterContext.getManifestWrapper();
195
207
  const chartManifestSettings: ChartManifestConfiguration = converterContext.getManifestControlConfiguration(visualizationPath);
196
208
  const variantManagement: VariantManagementType = manifestWrapper.getVariantManagement();
@@ -200,7 +212,7 @@ export function getP13nMode(visualizationPath: string, converterContext: Convert
200
212
  const isControlVariant = variantManagement === VariantManagementType.Control ? true : false;
201
213
  // if personalization is set to false do not show any option
202
214
  if ((personalization !== undefined && !personalization) || personalization == "false") {
203
- return undefined;
215
+ return false;
204
216
  }
205
217
  if (typeof personalization === "object") {
206
218
  // Specific personalization options enabled in manifest. Use them as is.
@@ -226,6 +238,25 @@ export function getP13nMode(visualizationPath: string, converterContext: Convert
226
238
  return "Sort,Type,Item";
227
239
  }
228
240
  }
241
+
242
+ export function getHeaderInfo(
243
+ visualizationPath: string,
244
+ converterContext: ConverterContext<PageContextPathTarget>
245
+ ): { header: string | undefined; headerVisible: boolean | undefined } {
246
+ const chartManifestSettings: ChartManifestConfiguration = converterContext.getManifestControlConfiguration(visualizationPath);
247
+ return {
248
+ header: chartManifestSettings.chartSettings?.header,
249
+ headerVisible: chartManifestSettings?.chartSettings?.headerVisible
250
+ };
251
+ }
252
+
253
+ export function getSelectionMode(
254
+ visualizationPath: string,
255
+ converterContext: ConverterContext<PageContextPathTarget>
256
+ ): "Multiple" | "Single" | "None" | undefined {
257
+ const chartManifestSettings: ChartManifestConfiguration = converterContext.getManifestControlConfiguration(visualizationPath);
258
+ return chartManifestSettings.chartSettings?.selectionMode;
259
+ }
229
260
  export type ChartCustomAggregate = {
230
261
  name: string;
231
262
  label: string;
@@ -284,7 +315,7 @@ export function createChartVisualization(
284
315
  const aCustomAggregates = aggregationHelper.getCustomAggregateDefinitions();
285
316
  const pageManifestSettings: ManifestWrapper = converterContext.getManifestWrapper();
286
317
  const variantManagement: VariantManagementType = pageManifestSettings.getVariantManagement();
287
- const p13nMode: string | undefined = getP13nMode(visualizationPath, converterContext);
318
+ const p13nMode: ChartP13nType = getP13nMode(visualizationPath, converterContext);
288
319
  if (p13nMode === undefined && variantManagement === "Control") {
289
320
  Log.warning("Variant Management cannot be enabled when personalization is disabled");
290
321
  }
@@ -394,6 +425,21 @@ export function createChartVisualization(
394
425
  const isInsightsVisible = getInsightsVisibility("Analytical", converterContext, visualizationPath);
395
426
  const isParameterizedEntitySet = converterContext.getParameterEntityType() ? true : false;
396
427
  const isInsightsEnabled = and(getInsightsEnablement(), isInsightsVisible);
428
+ const { header, headerVisible } = getHeaderInfo(visualizationPath, converterContext);
429
+ const selectionMode = getSelectionMode(visualizationPath, converterContext);
430
+ const chartDimensionKeyAndRole: Record<string, string>[] = [];
431
+ chartAnnotation?.DimensionAttributes?.forEach((dimensionAttribute) => {
432
+ const obj: Record<string, string> = {};
433
+ obj[dimensionAttribute?.Dimension?.value as string] = dimensionAttribute?.Role as string;
434
+ chartDimensionKeyAndRole.push(obj);
435
+ });
436
+
437
+ const chartMeasureKeyAndRole: Record<string, string>[] = [];
438
+ chartAnnotation?.MeasureAttributes?.forEach((measureAttribute) => {
439
+ const obj: Record<string, string> = {};
440
+ obj[measureAttribute?.Measure?.value as string] = measureAttribute?.Role as string;
441
+ chartMeasureKeyAndRole.push({});
442
+ });
397
443
  return {
398
444
  type: VisualizationType.Chart,
399
445
  id: qualifier
@@ -425,7 +471,12 @@ export function createChartVisualization(
425
471
  variantManagement: findVariantManagement(p13nMode, variantManagement),
426
472
  isInsightsEnabled: isInsightsEnabled,
427
473
  isInsightsVisible: isInsightsVisible,
428
- isParameterizedEntitySet: isParameterizedEntitySet
474
+ isParameterizedEntitySet: isParameterizedEntitySet,
475
+ header: header,
476
+ headerVisible: headerVisible,
477
+ selectionMode: selectionMode,
478
+ chartDimensionKeyAndRole: chartDimensionKeyAndRole,
479
+ chartMeasureKeyAndRole: chartMeasureKeyAndRole
429
480
  };
430
481
  }
431
482
  /**
@@ -434,7 +485,7 @@ export function createChartVisualization(
434
485
  * @param variantManagement
435
486
  * @returns The variant management for the chart
436
487
  */
437
- function findVariantManagement(p13nMode: string | undefined, variantManagement: VariantManagementType): VariantManagementType {
488
+ function findVariantManagement(p13nMode: ChartP13nType, variantManagement: VariantManagementType): VariantManagementType {
438
489
  return variantManagement === "Control" && !p13nMode ? VariantManagementType.None : variantManagement;
439
490
  }
440
491
 
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
- * (c) Copyright 2009-2024 SAP SE. All rights reserved
3
+ * (c) Copyright 2009-2025 SAP SE. All rights reserved
4
4
  */
5
5
  sap.ui.define(["sap/ui/core/message/MessageType"], function (MessageType) {
6
6
  "use strict";
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
- * (c) Copyright 2009-2024 SAP SE. All rights reserved
3
+ * (c) Copyright 2009-2025 SAP SE. All rights reserved
4
4
  */
5
5
  sap.ui.define(["sap/fe/core/converters/MetaModelConverter", "sap/fe/core/converters/helpers/IssueManager", "sap/fe/core/helpers/TypeGuards", "../../ManifestSettings", "./Chart", "./Table"], function (MetaModelConverter, IssueManager, TypeGuards, ManifestSettings, Chart, Table) {
6
6
  "use strict";