@sapui5/sap.fe.core 1.127.2 → 1.129.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 (393) 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 +3 -9
  4. package/src/sap/fe/core/ActionRuntime.ts +3 -7
  5. package/src/sap/fe/core/AppComponent.js +9 -19
  6. package/src/sap/fe/core/AppComponent.ts +2 -12
  7. package/src/sap/fe/core/AppStateHandler.js +3 -11
  8. package/src/sap/fe/core/AppStateHandler.ts +0 -7
  9. package/src/sap/fe/core/BaseController.js +4 -8
  10. package/src/sap/fe/core/BaseController.ts +0 -5
  11. package/src/sap/fe/core/CommonUtils.js +1 -9
  12. package/src/sap/fe/core/CommonUtils.ts +4 -8
  13. package/src/sap/fe/core/ExtensionAPI.js +10 -25
  14. package/src/sap/fe/core/ExtensionAPI.ts +4 -19
  15. package/src/sap/fe/core/InsightsFormattersExtension.js +5 -3
  16. package/src/sap/fe/core/PageController.js +7 -10
  17. package/src/sap/fe/core/PageController.ts +0 -3
  18. package/src/sap/fe/core/ResourceModel.js +3 -5
  19. package/src/sap/fe/core/ResourceModel.ts +0 -2
  20. package/src/sap/fe/core/ReuseComponent.js +8 -14
  21. package/src/sap/fe/core/ReuseComponent.ts +0 -6
  22. package/src/sap/fe/core/TemplateComponent.js +37 -9
  23. package/src/sap/fe/core/TemplateComponent.ts +3 -2
  24. package/src/sap/fe/core/TemplateModel.js +5 -5
  25. package/src/sap/fe/core/TemplateModel.ts +0 -1
  26. package/src/sap/fe/core/UIProvider.js +1 -1
  27. package/src/sap/fe/core/UIProvider.ts +44 -1
  28. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js +7 -12
  29. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.ts +0 -5
  30. package/src/sap/fe/core/buildingBlocks/TraceInfo.js +61 -65
  31. package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +60 -63
  32. package/src/sap/fe/core/buildingBlocks/templating/AttributeModel.js +3 -3
  33. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockFormatter.js +1 -1
  34. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.js +21 -5
  35. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.ts +0 -4
  36. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +6 -18
  37. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +3 -20
  38. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.js +5 -11
  39. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.ts +0 -6
  40. package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlock.js +3 -3
  41. package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.js +11 -10
  42. package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.ts +0 -1
  43. package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +5 -7
  44. package/src/sap/fe/core/controllerextensions/BaseControllerExtension.ts +0 -1
  45. package/src/sap/fe/core/controllerextensions/BusyLocker.js +1 -1
  46. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.js +3 -10
  47. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +0 -7
  48. package/src/sap/fe/core/controllerextensions/ContextSharing.js +5 -8
  49. package/src/sap/fe/core/controllerextensions/ContextSharing.ts +0 -2
  50. package/src/sap/fe/core/controllerextensions/EditFlow.js +225 -155
  51. package/src/sap/fe/core/controllerextensions/EditFlow.ts +248 -164
  52. package/src/sap/fe/core/controllerextensions/Feedback.js +1 -3
  53. package/src/sap/fe/core/controllerextensions/Feedback.ts +0 -2
  54. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +4 -7
  55. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +0 -3
  56. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +8 -25
  57. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +2 -21
  58. package/src/sap/fe/core/controllerextensions/InternalRouting.js +22 -34
  59. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +25 -31
  60. package/src/sap/fe/core/controllerextensions/KPIManagement.js +8 -21
  61. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +4 -15
  62. package/src/sap/fe/core/controllerextensions/MessageHandler.js +68 -31
  63. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +78 -32
  64. package/src/sap/fe/core/controllerextensions/PageReady.js +4 -4
  65. package/src/sap/fe/core/controllerextensions/Paginator.js +4 -8
  66. package/src/sap/fe/core/controllerextensions/Paginator.ts +0 -4
  67. package/src/sap/fe/core/controllerextensions/Placeholder.js +4 -4
  68. package/src/sap/fe/core/controllerextensions/Recommendations.js +15 -24
  69. package/src/sap/fe/core/controllerextensions/Recommendations.ts +13 -20
  70. package/src/sap/fe/core/controllerextensions/Routing.js +4 -10
  71. package/src/sap/fe/core/controllerextensions/Routing.ts +0 -6
  72. package/src/sap/fe/core/controllerextensions/RoutingListener.js +1 -1
  73. package/src/sap/fe/core/controllerextensions/Share.js +17 -11
  74. package/src/sap/fe/core/controllerextensions/Share.ts +10 -5
  75. package/src/sap/fe/core/controllerextensions/SideEffects.js +49 -45
  76. package/src/sap/fe/core/controllerextensions/SideEffects.ts +54 -41
  77. package/src/sap/fe/core/controllerextensions/Telemetry.js +4 -4
  78. package/src/sap/fe/core/controllerextensions/ViewState.js +10 -34
  79. package/src/sap/fe/core/controllerextensions/ViewState.ts +3 -49
  80. package/src/sap/fe/core/controllerextensions/cards/CollaborationManager.js +6 -8
  81. package/src/sap/fe/core/controllerextensions/cards/CollaborationManager.ts +0 -1
  82. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +1 -2
  83. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +0 -1
  84. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +4 -3
  85. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +1 -1
  86. package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.js +16 -12
  87. package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.tsx +4 -1
  88. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +1 -1
  89. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +126 -74
  90. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +158 -91
  91. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +1 -22
  92. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +0 -20
  93. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +10 -20
  94. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +11 -17
  95. package/src/sap/fe/core/controllerextensions/editFlow/editFlowConstants.js +1 -1
  96. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +191 -767
  97. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +277 -1024
  98. package/src/sap/fe/core/controllerextensions/editFlow/operations.js +1 -1
  99. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +1 -6
  100. package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +0 -5
  101. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +381 -250
  102. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +467 -301
  103. package/src/sap/fe/core/controllerextensions/pageReady/DataQueryWatcher.js +2 -6
  104. package/src/sap/fe/core/controllerextensions/pageReady/DataQueryWatcher.ts +0 -5
  105. package/src/sap/fe/core/controllerextensions/recommendations/Telemetry.js +2 -6
  106. package/src/sap/fe/core/controllerextensions/recommendations/Telemetry.ts +4 -6
  107. package/src/sap/fe/core/controllerextensions/routing/ContextPathHelper.js +1 -6
  108. package/src/sap/fe/core/controllerextensions/routing/ContextPathHelper.ts +0 -4
  109. package/src/sap/fe/core/controllerextensions/routing/NavigationReason.js +1 -1
  110. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +4 -41
  111. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +1 -37
  112. package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.js +1 -1
  113. package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.ts +0 -1
  114. package/src/sap/fe/core/controls/Any.js +1 -2
  115. package/src/sap/fe/core/controls/Any.ts +0 -1
  116. package/src/sap/fe/core/controls/AnyElement.js +1 -2
  117. package/src/sap/fe/core/controls/AnyElement.ts +0 -1
  118. package/src/sap/fe/core/controls/CommandExecution.js +3 -3
  119. package/src/sap/fe/core/controls/ComponentLoader.js +23 -10
  120. package/src/sap/fe/core/controls/ComponentLoader.ts +0 -1
  121. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.js +10 -13
  122. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.tsx +0 -6
  123. package/src/sap/fe/core/controls/EventDelegateHook.js +8 -9
  124. package/src/sap/fe/core/controls/FormElementWrapper.js +7 -7
  125. package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +3 -1
  126. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.js +140 -24
  127. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.tsx +141 -10
  128. package/src/sap/fe/core/converters/ConverterContext.js +8 -30
  129. package/src/sap/fe/core/converters/ConverterContext.ts +7 -29
  130. package/src/sap/fe/core/converters/ManifestSettings.js +37 -1
  131. package/src/sap/fe/core/converters/ManifestSettings.ts +12 -3
  132. package/src/sap/fe/core/converters/ManifestWrapper.js +12 -40
  133. package/src/sap/fe/core/converters/ManifestWrapper.ts +13 -46
  134. package/src/sap/fe/core/converters/MetaModelConverter.js +44 -48
  135. package/src/sap/fe/core/converters/MetaModelConverter.ts +50 -48
  136. package/src/sap/fe/core/converters/TemplateConverter.js +3 -2
  137. package/src/sap/fe/core/converters/TemplateConverter.ts +0 -1
  138. package/src/sap/fe/core/converters/annotations/DataField.js +1 -28
  139. package/src/sap/fe/core/converters/annotations/DataField.ts +0 -26
  140. package/src/sap/fe/core/converters/common/AnnotationConverter.js +24 -19
  141. package/src/sap/fe/core/converters/controls/Common/Action.js +13 -26
  142. package/src/sap/fe/core/converters/controls/Common/Action.ts +13 -31
  143. package/src/sap/fe/core/converters/controls/Common/Chart.js +5 -6
  144. package/src/sap/fe/core/converters/controls/Common/Chart.ts +0 -5
  145. package/src/sap/fe/core/converters/controls/Common/Criticality.js +2 -4
  146. package/src/sap/fe/core/converters/controls/Common/Criticality.ts +1 -2
  147. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +1 -5
  148. package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +0 -4
  149. package/src/sap/fe/core/converters/controls/Common/Form.js +3 -2
  150. package/src/sap/fe/core/converters/controls/Common/Form.ts +2 -1
  151. package/src/sap/fe/core/converters/controls/Common/KPI.js +11 -7
  152. package/src/sap/fe/core/converters/controls/Common/KPI.ts +11 -6
  153. package/src/sap/fe/core/converters/controls/Common/Table.js +159 -141
  154. package/src/sap/fe/core/converters/controls/Common/Table.ts +166 -122
  155. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +5 -30
  156. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +3 -29
  157. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +43 -55
  158. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +43 -47
  159. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +1 -4
  160. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +0 -3
  161. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +1 -1
  162. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +3 -8
  163. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +2 -7
  164. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +1 -11
  165. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +0 -9
  166. package/src/sap/fe/core/converters/helpers/Aggregation.js +1 -10
  167. package/src/sap/fe/core/converters/helpers/Aggregation.ts +0 -9
  168. package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +1 -7
  169. package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +0 -6
  170. package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +1 -9
  171. package/src/sap/fe/core/converters/helpers/DataFieldHelper.ts +0 -8
  172. package/src/sap/fe/core/converters/helpers/ID.js +1 -2
  173. package/src/sap/fe/core/converters/helpers/ID.ts +0 -1
  174. package/src/sap/fe/core/converters/helpers/InsightsHelpers.js +1 -2
  175. package/src/sap/fe/core/converters/helpers/InsightsHelpers.ts +0 -1
  176. package/src/sap/fe/core/converters/helpers/IssueManager.js +1 -1
  177. package/src/sap/fe/core/converters/helpers/Key.js +1 -5
  178. package/src/sap/fe/core/converters/helpers/Key.ts +0 -4
  179. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -2
  180. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +0 -1
  181. package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +1 -1
  182. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +1 -7
  183. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +0 -6
  184. package/src/sap/fe/core/converters/templates/ListReportConverter.js +6 -27
  185. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +9 -26
  186. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +1 -16
  187. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +0 -15
  188. package/src/sap/fe/core/definition/FEDefinition.js +2550 -0
  189. package/src/sap/fe/core/designtime/AppComponent.designtime.js +11 -12
  190. package/src/sap/fe/core/designtime/AppComponent.designtime.ts +9 -10
  191. package/src/sap/fe/core/formatters/CollaborationFormatter.js +8 -2
  192. package/src/sap/fe/core/formatters/CollaborationFormatter.ts +0 -2
  193. package/src/sap/fe/core/formatters/CriticalityFormatter.js +1 -1
  194. package/src/sap/fe/core/formatters/FPMFormatter.js +1 -2
  195. package/src/sap/fe/core/formatters/FPMFormatter.ts +0 -1
  196. package/src/sap/fe/core/formatters/FiscalFormat.js +9 -14
  197. package/src/sap/fe/core/formatters/FiscalFormat.ts +0 -11
  198. package/src/sap/fe/core/formatters/KPIFormatter.js +1 -4
  199. package/src/sap/fe/core/formatters/KPIFormatter.ts +0 -3
  200. package/src/sap/fe/core/formatters/StandardFormatter.js +6 -3
  201. package/src/sap/fe/core/formatters/StandardFormatter.ts +6 -2
  202. package/src/sap/fe/core/formatters/ValueFormatter.js +1 -4
  203. package/src/sap/fe/core/formatters/ValueFormatter.ts +0 -3
  204. package/src/sap/fe/core/fpm/Component.js +14 -17
  205. package/src/sap/fe/core/fpm/Component.ts +7 -10
  206. package/src/sap/fe/core/fpm/manifest.json +1 -1
  207. package/src/sap/fe/core/helpers/AdaptiveCardExpressionCompiler.js +3 -10
  208. package/src/sap/fe/core/helpers/AdaptiveCardExpressionCompiler.ts +0 -9
  209. package/src/sap/fe/core/helpers/AppStartupHelper.js +1 -13
  210. package/src/sap/fe/core/helpers/AppStartupHelper.ts +0 -11
  211. package/src/sap/fe/core/helpers/BindingHelper.js +1 -4
  212. package/src/sap/fe/core/helpers/BindingHelper.ts +0 -3
  213. package/src/sap/fe/core/helpers/BindingToolkitEvaluator.js +1 -2
  214. package/src/sap/fe/core/helpers/BindingToolkitEvaluator.ts +0 -1
  215. package/src/sap/fe/core/helpers/DeleteHelper.js +61 -32
  216. package/src/sap/fe/core/helpers/DeleteHelper.ts +79 -33
  217. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +1 -2
  218. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +0 -1
  219. package/src/sap/fe/core/helpers/EditState.js +1 -1
  220. package/src/sap/fe/core/helpers/ExcelFormatHelper.js +1 -2
  221. package/src/sap/fe/core/helpers/ExcelFormatHelper.ts +0 -1
  222. package/src/sap/fe/core/helpers/FPMHelper.js +1 -2
  223. package/src/sap/fe/core/helpers/FPMHelper.ts +0 -1
  224. package/src/sap/fe/core/helpers/KeepAliveHelper.js +1 -8
  225. package/src/sap/fe/core/helpers/KeepAliveHelper.ts +0 -7
  226. package/src/sap/fe/core/helpers/KeepAliveRefreshTypes.js +7 -1
  227. package/src/sap/fe/core/helpers/LoaderUtils.js +1 -1
  228. package/src/sap/fe/core/helpers/ManifestHelper.js +1 -3
  229. package/src/sap/fe/core/helpers/ManifestHelper.ts +0 -2
  230. package/src/sap/fe/core/helpers/MessageStrip.js +1 -1
  231. package/src/sap/fe/core/helpers/MetaModelFunction.js +3 -8
  232. package/src/sap/fe/core/helpers/MetaModelFunction.ts +0 -5
  233. package/src/sap/fe/core/helpers/MetaPath.js +1 -7
  234. package/src/sap/fe/core/helpers/MetaPath.ts +0 -6
  235. package/src/sap/fe/core/helpers/ModelHelper.js +55 -35
  236. package/src/sap/fe/core/helpers/ModelHelper.ts +64 -38
  237. package/src/sap/fe/core/helpers/PasteHelper.js +77 -24
  238. package/src/sap/fe/core/helpers/PasteHelper.ts +105 -23
  239. package/src/sap/fe/core/helpers/PromiseKeeper.js +1 -3
  240. package/src/sap/fe/core/helpers/PromiseKeeper.ts +0 -2
  241. package/src/sap/fe/core/helpers/RecommendationHelper.js +1 -4
  242. package/src/sap/fe/core/helpers/RecommendationHelper.ts +0 -3
  243. package/src/sap/fe/core/helpers/ResourceModelHelper.js +1 -3
  244. package/src/sap/fe/core/helpers/ResourceModelHelper.ts +3 -4
  245. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +1 -2
  246. package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +0 -1
  247. package/src/sap/fe/core/helpers/SizeHelper.js +1 -2
  248. package/src/sap/fe/core/helpers/SizeHelper.ts +0 -1
  249. package/src/sap/fe/core/helpers/StableIdHelper.js +7 -17
  250. package/src/sap/fe/core/helpers/StableIdHelper.ts +7 -17
  251. package/src/sap/fe/core/helpers/StandardRecommendationHelper.js +1 -12
  252. package/src/sap/fe/core/helpers/StandardRecommendationHelper.ts +0 -11
  253. package/src/sap/fe/core/helpers/Synchronization.js +1 -1
  254. package/src/sap/fe/core/helpers/TitleHelper.js +1 -10
  255. package/src/sap/fe/core/helpers/TitleHelper.ts +0 -9
  256. package/src/sap/fe/core/helpers/ToES6Promise.js +1 -2
  257. package/src/sap/fe/core/helpers/ToES6Promise.ts +0 -1
  258. package/src/sap/fe/core/helpers/TypeGuards.js +1 -15
  259. package/src/sap/fe/core/helpers/TypeGuards.ts +0 -14
  260. package/src/sap/fe/core/helpers/WebSocket.js +1 -1
  261. package/src/sap/fe/core/library.js +10 -44
  262. package/src/sap/fe/core/library.support.js +1 -1
  263. package/src/sap/fe/core/library.ts +8 -45
  264. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +1 -6
  265. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +0 -5
  266. package/src/sap/fe/core/messagebundle.properties +12 -1
  267. package/src/sap/fe/core/messagebundle_ar.properties +8 -0
  268. package/src/sap/fe/core/messagebundle_bg.properties +8 -0
  269. package/src/sap/fe/core/messagebundle_ca.properties +8 -0
  270. package/src/sap/fe/core/messagebundle_cnr.properties +8 -0
  271. package/src/sap/fe/core/messagebundle_cs.properties +9 -1
  272. package/src/sap/fe/core/messagebundle_cy.properties +8 -0
  273. package/src/sap/fe/core/messagebundle_da.properties +8 -0
  274. package/src/sap/fe/core/messagebundle_de.properties +8 -0
  275. package/src/sap/fe/core/messagebundle_el.properties +8 -0
  276. package/src/sap/fe/core/messagebundle_en.properties +8 -0
  277. package/src/sap/fe/core/messagebundle_en_GB.properties +8 -0
  278. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +144 -65
  279. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +8 -0
  280. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +273 -194
  281. package/src/sap/fe/core/messagebundle_es.properties +9 -1
  282. package/src/sap/fe/core/messagebundle_es_MX.properties +8 -0
  283. package/src/sap/fe/core/messagebundle_et.properties +8 -0
  284. package/src/sap/fe/core/messagebundle_fi.properties +8 -0
  285. package/src/sap/fe/core/messagebundle_fr.properties +8 -0
  286. package/src/sap/fe/core/messagebundle_fr_CA.properties +8 -0
  287. package/src/sap/fe/core/messagebundle_hi.properties +9 -1
  288. package/src/sap/fe/core/messagebundle_hr.properties +8 -0
  289. package/src/sap/fe/core/messagebundle_hu.properties +8 -0
  290. package/src/sap/fe/core/messagebundle_id.properties +12 -4
  291. package/src/sap/fe/core/messagebundle_it.properties +8 -0
  292. package/src/sap/fe/core/messagebundle_iw.properties +8 -0
  293. package/src/sap/fe/core/messagebundle_ja.properties +8 -0
  294. package/src/sap/fe/core/messagebundle_kk.properties +8 -0
  295. package/src/sap/fe/core/messagebundle_ko.properties +8 -0
  296. package/src/sap/fe/core/messagebundle_lt.properties +8 -0
  297. package/src/sap/fe/core/messagebundle_lv.properties +8 -0
  298. package/src/sap/fe/core/messagebundle_mk.properties +8 -0
  299. package/src/sap/fe/core/messagebundle_ms.properties +8 -0
  300. package/src/sap/fe/core/messagebundle_nl.properties +16 -8
  301. package/src/sap/fe/core/messagebundle_no.properties +8 -0
  302. package/src/sap/fe/core/messagebundle_pl.properties +8 -0
  303. package/src/sap/fe/core/messagebundle_pt.properties +8 -0
  304. package/src/sap/fe/core/messagebundle_pt_PT.properties +8 -0
  305. package/src/sap/fe/core/messagebundle_ro.properties +8 -0
  306. package/src/sap/fe/core/messagebundle_ru.properties +8 -0
  307. package/src/sap/fe/core/messagebundle_sh.properties +8 -0
  308. package/src/sap/fe/core/messagebundle_sk.properties +8 -0
  309. package/src/sap/fe/core/messagebundle_sl.properties +8 -0
  310. package/src/sap/fe/core/messagebundle_sr.properties +8 -0
  311. package/src/sap/fe/core/messagebundle_sv.properties +8 -0
  312. package/src/sap/fe/core/messagebundle_th.properties +12 -4
  313. package/src/sap/fe/core/messagebundle_tr.properties +8 -0
  314. package/src/sap/fe/core/messagebundle_uk.properties +10 -2
  315. package/src/sap/fe/core/messagebundle_vi.properties +8 -0
  316. package/src/sap/fe/core/messagebundle_zh_CN.properties +8 -0
  317. package/src/sap/fe/core/messagebundle_zh_TW.properties +8 -0
  318. package/src/sap/fe/core/operationsHelper.js +22 -7
  319. package/src/sap/fe/core/operationsHelper.ts +24 -5
  320. package/src/sap/fe/core/rootView/Fcl.controller.js +7 -27
  321. package/src/sap/fe/core/rootView/Fcl.controller.ts +0 -18
  322. package/src/sap/fe/core/rootView/NavContainer.controller.js +7 -12
  323. package/src/sap/fe/core/rootView/NavContainer.controller.ts +0 -5
  324. package/src/sap/fe/core/rootView/RootViewBaseController.js +10 -24
  325. package/src/sap/fe/core/rootView/RootViewBaseController.ts +3 -16
  326. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +3 -3
  327. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +3 -3
  328. package/src/sap/fe/core/services/CollaborationManagerServiceFactory.js +4 -4
  329. package/src/sap/fe/core/services/CollaborativeToolsServiceFactory.js +3 -3
  330. package/src/sap/fe/core/services/ContextSharingServiceFactory.js +3 -4
  331. package/src/sap/fe/core/services/ContextSharingServiceFactory.ts +0 -1
  332. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +13 -20
  333. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +11 -17
  334. package/src/sap/fe/core/services/NavigationServiceFactory.js +11 -21
  335. package/src/sap/fe/core/services/NavigationServiceFactory.ts +4 -17
  336. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +3 -3
  337. package/src/sap/fe/core/services/RoutingServiceFactory.js +7 -19
  338. package/src/sap/fe/core/services/RoutingServiceFactory.ts +0 -12
  339. package/src/sap/fe/core/services/ShellServicesFactory.js +8 -44
  340. package/src/sap/fe/core/services/ShellServicesFactory.ts +1 -41
  341. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +19 -60
  342. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +14 -57
  343. package/src/sap/fe/core/services/TelemetryServiceFactory.js +6 -14
  344. package/src/sap/fe/core/services/TelemetryServiceFactory.ts +2 -10
  345. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +17 -7
  346. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +17 -3
  347. package/src/sap/fe/core/services/ValueHelpHistoryServiceFactory.js +11 -24
  348. package/src/sap/fe/core/services/ValueHelpHistoryServiceFactory.ts +0 -19
  349. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +3 -31
  350. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.ts +0 -27
  351. package/src/sap/fe/core/services/valueHelpService/HistoryOptOutProvider.js +1 -4
  352. package/src/sap/fe/core/services/valueHelpService/HistoryOptOutProvider.ts +0 -3
  353. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +7 -7
  354. package/src/sap/fe/core/support/AnnotationIssue.support.js +1 -1
  355. package/src/sap/fe/core/support/CollectionFacetMissingID.support.js +1 -1
  356. package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.js +1 -1
  357. package/src/sap/fe/core/support/CommonHelper.js +4 -1
  358. package/src/sap/fe/core/support/Diagnostics.js +1 -1
  359. package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.js +1 -1
  360. package/src/sap/fe/core/templating/ActionHelper.js +1 -2
  361. package/src/sap/fe/core/templating/ActionHelper.ts +0 -1
  362. package/src/sap/fe/core/templating/CommonFormatters.js +1 -2
  363. package/src/sap/fe/core/templating/CommonFormatters.ts +0 -1
  364. package/src/sap/fe/core/templating/CriticalityFormatters.js +1 -6
  365. package/src/sap/fe/core/templating/CriticalityFormatters.ts +0 -5
  366. package/src/sap/fe/core/templating/DataFieldFormatters.js +1 -2
  367. package/src/sap/fe/core/templating/DataFieldFormatters.ts +0 -1
  368. package/src/sap/fe/core/templating/DataModelPathHelper.js +1 -18
  369. package/src/sap/fe/core/templating/DataModelPathHelper.ts +0 -17
  370. package/src/sap/fe/core/templating/DisplayModeFormatter.js +6 -1
  371. package/src/sap/fe/core/templating/EntitySetHelper.js +1 -4
  372. package/src/sap/fe/core/templating/EntitySetHelper.ts +0 -3
  373. package/src/sap/fe/core/templating/EntityTypeHelper.js +4 -5
  374. package/src/sap/fe/core/templating/EntityTypeHelper.ts +3 -4
  375. package/src/sap/fe/core/templating/FieldControlHelper.js +4 -9
  376. package/src/sap/fe/core/templating/FieldControlHelper.ts +3 -9
  377. package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
  378. package/src/sap/fe/core/templating/PropertyFormatters.js +1 -1
  379. package/src/sap/fe/core/templating/PropertyHelper.js +1 -31
  380. package/src/sap/fe/core/templating/PropertyHelper.ts +0 -30
  381. package/src/sap/fe/core/templating/SemanticObjectHelper.js +1 -7
  382. package/src/sap/fe/core/templating/SemanticObjectHelper.ts +0 -6
  383. package/src/sap/fe/core/templating/UIFormatters.js +18 -14
  384. package/src/sap/fe/core/templating/UIFormatters.ts +30 -18
  385. package/src/sap/fe/core/type/Date.js +3 -6
  386. package/src/sap/fe/core/type/Date.ts +0 -3
  387. package/src/sap/fe/core/type/DateTimeWithTimezone.js +3 -3
  388. package/src/sap/fe/core/type/EDM.js +1 -1
  389. package/src/sap/fe/core/type/Email.js +3 -3
  390. package/src/sap/fe/core/type/FiscalDate.js +3 -9
  391. package/src/sap/fe/core/type/FiscalDate.ts +0 -6
  392. package/src/sap/fe/core/type/InputMask.js +3 -7
  393. package/src/sap/fe/core/type/InputMask.ts +0 -4
@@ -48,10 +48,8 @@ import type {
48
48
  AvailabilityType,
49
49
  FilterFieldManifestConfiguration,
50
50
  FilterManifestConfiguration,
51
- FilterSettings,
52
- SingleViewPathConfiguration
51
+ FilterSettings
53
52
  } from "../../ManifestSettings";
54
- import type ManifestWrapper from "../../ManifestWrapper";
55
53
 
56
54
  //import { hasValueHelp } from "sap/fe/core/templating/PropertyHelper";
57
55
 
@@ -65,6 +63,7 @@ export type FilterField = ConfigurableObject & {
65
63
  annotationPath: string;
66
64
  label?: string;
67
65
  template?: string;
66
+ documentRefText?: string;
68
67
  group?: string;
69
68
  menu?: string;
70
69
  groupLabel?: string;
@@ -96,7 +95,6 @@ export type CustomElementFilterField = CustomElement<ManifestFilterField>;
96
95
 
97
96
  /**
98
97
  * Enter all DataFields of a given FieldGroup into the filterFacetMap.
99
- *
100
98
  * @param fieldGroup
101
99
  * @returns The map of facets for the given FieldGroup
102
100
  */
@@ -115,7 +113,6 @@ function getFieldGroupFilterGroups(fieldGroup: FieldGroup): Record<string, Filte
115
113
 
116
114
  /**
117
115
  * Check that all the tables for a dedicated entity set are configured as analytical tables.
118
- *
119
116
  * @param listReportTables List report tables
120
117
  * @param contextPath
121
118
  * @returns Is FilterBar search field hidden or not
@@ -131,7 +128,6 @@ function checkAllTableForEntitySetAreAnalytical(listReportTables: TableVisualiza
131
128
 
132
129
  /**
133
130
  * Get the properties of the selection variants used in the different visualizations that should be excluded.
134
- *
135
131
  * @param lrTableVisualizations The list report tables
136
132
  * @param converterContext The converter context
137
133
  * @returns The excluded properties
@@ -180,7 +176,6 @@ function getExcludedFilterProperties(
180
176
  /**
181
177
  * Returns the condition path required for the condition model. It looks as follows:
182
178
  * <1:N-PropertyName>*\/<1:1-PropertyName>/<PropertyName>.
183
- *
184
179
  * @param entityType The root EntityType
185
180
  * @param propertyPath The full path to the target property
186
181
  * @returns The formatted condition path
@@ -229,7 +224,6 @@ const _createFilterSelectionField = function (
229
224
  /**
230
225
  * Retrieve the configuration for the technical property DraftAdministrativeData. Only relevant for CreationDateTime
231
226
  * and LastChangeDateTime, as they are displaying the timeframe related properties as a SemanticDateRange.
232
- *
233
227
  * @param filterField
234
228
  */
235
229
  const getSettingsOfDefaultFilterFields = function (filterField: FilterField): void {
@@ -412,7 +406,6 @@ const _getDefaultFilterFields = function (
412
406
 
413
407
  /**
414
408
  * Get all parameter filter fields in case of a parameterized service.
415
- *
416
409
  * @param converterContext
417
410
  * @returns An array of parameter FilterFields
418
411
  */
@@ -439,7 +432,6 @@ function _getParameterFields(converterContext: ConverterContext<PageContextPathT
439
432
 
440
433
  /**
441
434
  * Determines if the FilterBar search field is hidden or not.
442
- *
443
435
  * @param listReportTables The list report tables
444
436
  * @param charts The ALP charts
445
437
  * @param converterContext The converter context
@@ -469,26 +461,24 @@ export const getFilterBarHideBasicSearch = function (
469
461
 
470
462
  /**
471
463
  * Retrieves filter fields from the manifest.
472
- *
473
464
  * @param entityType The current entityType
474
465
  * @param converterContext The converter context
466
+ * @param annotationPath Annotation path of the selection fields
475
467
  * @returns The filter fields defined in the manifest
476
468
  */
477
469
  export const getManifestFilterFields = function (
478
470
  entityType: EntityType,
479
- converterContext: ConverterContext<PageContextPathTarget>
471
+ converterContext: ConverterContext<PageContextPathTarget>,
472
+ annotationPath?: string
480
473
  ): Record<string, CustomElementFilterField> {
481
474
  const manifestWrapper = converterContext.getManifestWrapper();
482
- //Check if multientity sets in manifest have the same entity type
483
- const entitySetInMultiView = manifestWrapper
484
- .getViewConfiguration()
485
- ?.paths.find((path) => (path as SingleViewPathConfiguration).entitySet === converterContext.getEntitySet()?.name);
486
-
487
- if (!entitySetInMultiView && !checkSameEntitySet(manifestWrapper, converterContext)) {
488
- //return if entity type does not match entity sets in manifest
489
- return {};
490
- }
491
- const fbConfig: FilterManifestConfiguration = converterContext.getManifestWrapper().getFilterConfiguration();
475
+
476
+ const settingsContextPath =
477
+ manifestWrapper.getContextPath() || (manifestWrapper.getEntitySet() ? `/${manifestWrapper.getEntitySet()}` : undefined);
478
+ const filterConfigurationPath = getFilterConfigurationPath(converterContext, settingsContextPath, annotationPath);
479
+ let fbConfig: FilterManifestConfiguration = {};
480
+ fbConfig = manifestWrapper.getFilterConfiguration(filterConfigurationPath);
481
+
492
482
  const definedFilterFields: Record<string, FilterFieldManifestConfiguration> = fbConfig?.filterFields || {};
493
483
  const selectionFields: Record<string, FilterField> = _getSelectionFieldsByPath(
494
484
  entityType,
@@ -524,6 +514,11 @@ export const getManifestFilterFields = function (
524
514
  conditionPath: filterField.property
525
515
  ? KeyHelper.getPathFromSelectionFieldKey(sKey)
526
516
  : selectionField?.conditionPath || propertyName,
517
+ documentRefText:
518
+ filterField.property &&
519
+ converterContext.fetchTextFromMetaModel(
520
+ "{metaModel>" + filterField.property + "@com.sap.vocabularies.Common.v1.DocumentationRef/String}"
521
+ ),
527
522
  template: filterField.template,
528
523
  label: converterContext.fetchTextFromMetaModel(filterField.label),
529
524
  position: filterField.position || { placement: Placement.After },
@@ -537,23 +532,26 @@ export const getManifestFilterFields = function (
537
532
  };
538
533
 
539
534
  /**
540
- * Returns true if the entity set is the same for both the manifest and converter context.
541
- *
542
- * @param manifestWrapper Manifest wrapper
535
+ * Returns configuration path to fetch the custom filter fields from manifest.
543
536
  * @param converterContext The converter context
544
- * @returns True if the manifest filters have the same entity set as the converter context
537
+ * @param settingsContextPath Manifest entity set path and context path
538
+ * @param annotationPath The annotation path
539
+ * @returns Path to fetch the custom filters from the manifest
545
540
  */
546
- const checkSameEntitySet = function (
547
- manifestWrapper: ManifestWrapper,
548
- converterContext: ConverterContext<PageContextPathTarget>
549
- ): boolean | undefined {
550
- let sameEntitySet;
551
- if (!(!manifestWrapper.getContextPath() || manifestWrapper.getContextPath()?.length === 0)) {
552
- sameEntitySet = manifestWrapper.getContextPath() === converterContext.getContextPath();
553
- } else if (!(!manifestWrapper.getEntitySet() || manifestWrapper.getEntitySet()?.length === 0)) {
554
- sameEntitySet = manifestWrapper.getEntitySet() === converterContext.getEntitySet()?.name;
541
+ const getFilterConfigurationPath = function (
542
+ converterContext: ConverterContext<PageContextPathTarget>,
543
+ settingsContextPath?: string,
544
+ annotationPath?: string
545
+ ): string | undefined {
546
+ let objectPath;
547
+ const filterBarContextPath = converterContext.getContextPath();
548
+ const metaPath = `${filterBarContextPath}/${annotationPath}`;
549
+ if (settingsContextPath && metaPath?.startsWith(settingsContextPath) && annotationPath) {
550
+ objectPath = metaPath.replace(`${settingsContextPath}/`, "");
551
+ } else {
552
+ objectPath = annotationPath;
555
553
  }
556
- return sameEntitySet;
554
+ return objectPath ? objectPath : undefined;
557
555
  };
558
556
 
559
557
  export const getFilterField = function (
@@ -807,13 +805,12 @@ const _isFilterableNavigationProperty = function (
807
805
  (entry.$Type === UIAnnotationTypes.DataField ||
808
806
  entry.$Type === UIAnnotationTypes.DataFieldWithUrl ||
809
807
  entry.$Type === UIAnnotationTypes.DataFieldWithNavigationPath) &&
810
- entry.Value.path.includes("/")
808
+ entry.Value.path?.includes("/")
811
809
  );
812
810
  };
813
811
 
814
812
  /**
815
813
  * Adds the additional property which references to the unit, timezone, textArrangement or currency from a data field.
816
- *
817
814
  * @param dataField The data field to be considered
818
815
  * @param converterContext The converter context
819
816
  * @param navProperties The list of navigation properties
@@ -844,7 +841,6 @@ const addChildNavigationProperties = function (
844
841
 
845
842
  /**
846
843
  * Gets used navigation properties for available dataField.
847
- *
848
844
  * @param navProperties The list of navigation properties
849
845
  * @param dataField The data field to be considered
850
846
  * @param converterContext The converter context
@@ -948,10 +944,10 @@ const getAnnotatedSelectionFieldData = function (
948
944
  const propertyPath = selectionField.value;
949
945
  if (!excludedFilterProperties.has(propertyPath)) {
950
946
  let navigationPath: string;
951
- if (annotationPath.startsWith("@com.sap.vocabularies.UI.v1.SelectionFields")) {
947
+ if (annotationPath?.startsWith("@com.sap.vocabularies.UI.v1.SelectionFields")) {
952
948
  navigationPath = "";
953
949
  } else {
954
- navigationPath = annotationPath.split("/@com.sap.vocabularies.UI.v1.SelectionFields")[0];
950
+ navigationPath = annotationPath?.split("/@com.sap.vocabularies.UI.v1.SelectionFields")[0];
955
951
  }
956
952
 
957
953
  const filterPropertyPath = navigationPath ? navigationPath + "/" + propertyPath : propertyPath;
@@ -1104,9 +1100,10 @@ export const processSelectionFields = function (
1104
1100
  export const insertCustomManifestElements = function (
1105
1101
  filterFields: ManifestFilterField[],
1106
1102
  entityType: EntityType,
1107
- converterContext: ConverterContext<PageContextPathTarget>
1103
+ converterContext: ConverterContext<PageContextPathTarget>,
1104
+ annotationPath: string
1108
1105
  ): ManifestFilterField[] {
1109
- const manifestFilterFields = getManifestFilterFields(entityType, converterContext);
1106
+ const manifestFilterFields = getManifestFilterFields(entityType, converterContext, annotationPath);
1110
1107
  _getMissingLabelForManifestFilterFields(filterFields, manifestFilterFields);
1111
1108
  return insertCustomElements(filterFields, manifestFilterFields, {
1112
1109
  availability: OverrideType.overwrite,
@@ -1114,6 +1111,7 @@ export const insertCustomManifestElements = function (
1114
1111
  type: OverrideType.overwrite,
1115
1112
  position: OverrideType.overwrite,
1116
1113
  slotName: OverrideType.overwrite,
1114
+ documentRefText: OverrideType.overwrite,
1117
1115
  template: OverrideType.overwrite,
1118
1116
  settings: OverrideType.overwrite,
1119
1117
  visualFilter: OverrideType.overwrite,
@@ -1141,7 +1139,6 @@ export const sortPropertyInfosByGroupLabel = (propertyInfos: PropertyInfo[]): vo
1141
1139
  /**
1142
1140
  * Retrieve the configuration for the selection fields that will be used within the filter bar
1143
1141
  * This configuration takes into account the annotation and the selection variants.
1144
- *
1145
1142
  * @param converterContext
1146
1143
  * @param lrTables
1147
1144
  * @param annotationPath
@@ -1169,7 +1166,7 @@ export const getSelectionFields = function (
1169
1166
 
1170
1167
  propertyInfoFields = parameterFields.concat(propertyInfoFields);
1171
1168
 
1172
- propertyInfoFields = insertCustomManifestElements(propertyInfoFields, entityType, converterContext);
1169
+ propertyInfoFields = insertCustomManifestElements(propertyInfoFields, entityType, converterContext, annotationPath);
1173
1170
 
1174
1171
  const aFetchedProperties = processSelectionFields(
1175
1172
  propertyInfoFields,
@@ -1243,7 +1240,7 @@ export const getSelectionFields = function (
1243
1240
  }
1244
1241
  }
1245
1242
 
1246
- const selectionFields = insertCustomManifestElements(allFilters, entityType, converterContext);
1243
+ const selectionFields = insertCustomManifestElements(allFilters, entityType, converterContext, annotationPath);
1247
1244
 
1248
1245
  // Add caseSensitive property to all selection fields.
1249
1246
  const isCaseSensitive = isFilteringCaseSensitive(converterContext);
@@ -1259,7 +1256,6 @@ export const getSelectionFields = function (
1259
1256
  * (1) a filter property is mandatory,
1260
1257
  * (2) no search field exists (entity isn't search enabled),
1261
1258
  * (3) when the data isn't loaded by default (annotation FetchValues = 2).
1262
- *
1263
1259
  * @param converterContext The converter context
1264
1260
  * @param filterRestrictionsAnnotation The FilterRestriction annotation
1265
1261
  * @param valueList The ValueList annotation
@@ -18,7 +18,6 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/helpers/Agg
18
18
  var compileExpression = BindingToolkit.compileExpression;
19
19
  /**
20
20
  * Checks that measures and dimensions of the visual filter chart can be aggregated and grouped.
21
- *
22
21
  * @param converterContext The converter context
23
22
  * @param chartAnnotation The chart annotation
24
23
  * @param aggregationHelper The aggregation helper
@@ -81,7 +80,6 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/helpers/Agg
81
80
  };
82
81
  /**
83
82
  * Method to get the visual filters object for a property.
84
- *
85
83
  * @param entityType The converter context
86
84
  * @param converterContext The chart annotation
87
85
  * @param sPropertyPath The aggregation helper
@@ -293,7 +291,6 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/helpers/Agg
293
291
 
294
292
  /**
295
293
  * Method to add inparameters from required properties and parameters.
296
- *
297
294
  * @param inParams An array containing existing inparams
298
295
  * @param properties An array containing either requiredproperties or parameters
299
296
  * @param isParam A boolean flag indicating whether passed properties are parameters
@@ -311,4 +308,4 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/helpers/Agg
311
308
  _exports._addInParameters = _addInParameters;
312
309
  return _exports;
313
310
  }, false);
314
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY2hlY2tWRkFnZ3JlZ2F0aW9uIiwiY29udmVydGVyQ29udGV4dCIsImNoYXJ0QW5ub3RhdGlvbiIsImFnZ3JlZ2F0aW9uSGVscGVyIiwic01lYXN1cmVQYXRoIiwiYkdyb3VwYWJsZSIsImJBZ2dyZWdhdGFibGUiLCJzTWVhc3VyZSIsImN1c3RvbUFnZ3JlZ2F0ZXMiLCJnZXRDdXN0b21BZ2dyZWdhdGVEZWZpbml0aW9ucyIsImFUcmFuc0FnZ3JlZ2F0aW9ucyIsImdldFRyYW5zQWdncmVnYXRpb25zIiwiYUN1c3RBZ2dNZWFzdXJlIiwiJHRhcmdldCIsIk1lYXN1cmVzIiwiZmlsdGVyIiwiY3VzdEFnZyIsInF1YWxpZmllciIsInZhbHVlIiwibGVuZ3RoIiwiRHluYW1pY01lYXN1cmVzIiwiZ2V0Q29udmVydGVyQ29udGV4dEZvciIsImdldEFic29sdXRlQW5ub3RhdGlvblBhdGgiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoIiwidGFyZ2V0T2JqZWN0IiwiTmFtZSIsInRvU3RyaW5nIiwiZ2V0QWdncmVnYXRlZFByb3BlcnR5IiwiZ2V0QWdncmVnYXRlZFByb3BlcnRpZXMiLCJzRGltZW5zaW9uIiwiRGltZW5zaW9ucyIsInNvbWUiLCJvQWdncmVnYXRlIiwiQWdncmVnYXRhYmxlUHJvcGVydHkiLCJhQWdncmVnYXRhYmxlUHJvcHNGcm9tQ29udGFpbmVyIiwiZ2V0QWdncmVnYXRhYmxlUHJvcGVydGllcyIsImFHcm91cGFibGVQcm9wc0Zyb21Db250YWluZXIiLCJnZXRHcm91cGFibGVQcm9wZXJ0aWVzIiwiYWdncmVnYXRhYmxlUHJvcCIsIlByb3BlcnR5IiwiZ3JvdXBhYmxlUHJvcCIsImdldFZpc3VhbEZpbHRlcnMiLCJlbnRpdHlUeXBlIiwic1Byb3BlcnR5UGF0aCIsIkZpbHRlckZpZWxkcyIsInZpc3VhbEZpbHRlciIsIm9WaXN1YWxGaWx0ZXIiLCJ2YWx1ZUxpc3QiLCJvVkZQYXRoIiwiYW5ub3RhdGlvblF1YWxpZmllclNwbGl0Iiwic3BsaXQiLCJxdWFsaWZpZXJWTCIsInByb3BlcnR5IiwicmVzb2x2ZVBhdGgiLCJhbm5vdGF0aW9ucyIsIkNvbW1vbiIsImlzVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzIiwiVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzIiwidmFsdWVPZiIsImNvbGxlY3Rpb25QYXRoIiwiQ29sbGVjdGlvblBhdGgiLCJjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQiLCJnZXRFbnRpdHlTZXQiLCJuYW1lIiwidmFsdWVMaXN0UGFyYW1zIiwiUGFyYW1ldGVycyIsIm91dFBhcmFtZXRlciIsImluUGFyYW1ldGVycyIsImFQYXJhbWV0ZXJzIiwicGFyYW1ldGVyRW50aXR5VHlwZSIsImdldFBhcmFtZXRlckVudGl0eVR5cGUiLCJrZXlzIiwibWFwIiwia2V5IiwiZ2V0Q29udGV4dFBhdGgiLCJfYWRkSW5QYXJhbWV0ZXJzIiwidmFsdWVMaXN0UGFyYW0iLCJsb2NhbERhdGFQcm9wZXJ0eSIsIkxvY2FsRGF0YVByb3BlcnR5IiwidmFsdWVMaXN0UHJvcGVydHkiLCJWYWx1ZUxpc3RQcm9wZXJ0eSIsIiRUeXBlIiwiYk5vdEZpbHRlcmFibGUiLCJpc1Byb3BlcnR5RmlsdGVyYWJsZSIsInB1c2giLCJmb3JFYWNoIiwib0luUGFyYW1ldGVyIiwibWFpbkVudGl0eVNldEluTWFwcGluZ0FsbG93ZWRFeHByZXNzaW9uIiwiY29tcGlsZUV4cHJlc3Npb24iLCJjaGVja0ZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMiLCJ2YWx1ZUxpc3RFbnRpdHlTZXRJbk1hcHBpbmdBbGxvd2VkRXhwcmVzc2lvbiIsIkVycm9yIiwicHZRdWFsaWZpZXIiLCJQcmVzZW50YXRpb25WYXJpYW50UXVhbGlmaWVyIiwic3ZRdWFsaWZpZXIiLCJTZWxlY3Rpb25WYXJpYW50UXVhbGlmaWVyIiwicHZBbm5vdGF0aW9uIiwiZ2V0RW50aXR5VHlwZSIsIlVJIiwiQWdncmVnYXRpb25IZWxwZXIiLCJpc0FuYWx5dGljc1N1cHBvcnRlZCIsInVuZGVmaW5lZCIsImFWaXN1YWxpemF0aW9ucyIsIlZpc3VhbGl6YXRpb25zIiwiY29udGV4dFBhdGgiLCJ2aXN1YWxpemF0aW9uIiwidGVybSIsIl9iZ2V0VkZBZ2dyZWdhdGlvbiIsImJEaW1lbnNpb25IaWRkZW4iLCJIaWRkZW4iLCJiRGltZW5zaW9uSGlkZGVuRmlsdGVyIiwiSGlkZGVuRmlsdGVyIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwiZW50aXR5U2V0TmFtZSIsInByZXNlbnRhdGlvbkFubm90YXRpb24iLCJyZWxhdGl2ZUFubm90YXRpb25QYXRoIiwiZ2V0UmVsYXRpdmVBbm5vdGF0aW9uUGF0aCIsInZhbHVlbGlzdFByb3BlcnR5IiwiYklzUmFuZ2UiLCJnZXREaWFnbm9zdGljcyIsImFkZElzc3VlIiwiSXNzdWVDYXRlZ29yeSIsIkFubm90YXRpb24iLCJJc3N1ZVNldmVyaXR5IiwiSGlnaCIsIklzc3VlVHlwZSIsIk1BTEZPUk1FRF9WSVNVQUxGSUxURVJTIiwiVkFMVUVMSVNUIiwiYklzTWFpbkVudGl0eVNldFNpbmdsZVNlbGVjdGlvbiIsIm11bHRpcGxlU2VsZWN0aW9uQWxsb3dlZCIsIm5vdCIsInJlcXVpcmVkIiwiZ2V0SXNSZXF1aXJlZCIsInN2QW5ub3RhdGlvbiIsImdldEVudGl0eVR5cGVBbm5vdGF0aW9uIiwiYW5ub3RhdGlvbiIsInNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uIiwicmVsYXRpdmVTZWxlY3Rpb25WYXJpYW50UGF0aCIsInJlcXVpcmVkUHJvcGVydGllcyIsInNFbnRpdHlTZXQiLCJzTmF2aWdhdGlvblByb3BlcnR5Iiwib0VudGl0eVNldENvbnZlcnRlckNvbnRleHQiLCJhUmVzdHJpY3RlZFByb3BlcnRpZXMiLCJzdGFydGluZ0VudGl0eVNldCIsIkNhcGFiaWxpdGllcyIsIk5hdmlnYXRpb25SZXN0cmljdGlvbnMiLCJSZXN0cmljdGVkUHJvcGVydGllcyIsIm9SZXN0cmljdGVkUHJvcGVydHkiLCJmaW5kIiwicmVzdHJpY3RlZE5hdlByb3AiLCJOYXZpZ2F0aW9uUHJvcGVydHkiLCJ0eXBlIiwiRmlsdGVyUmVzdHJpY3Rpb25zIiwiUmVxdWlyZWRQcm9wZXJ0aWVzIiwiZW50aXR5U2V0T3JTaW5nbGV0b24iLCJpc0VudGl0eVNldCIsInJlcXVpcmVkUHJvcGVydHlQYXRocyIsIm9SZXF1aXJlUHJvcGVydHkiLCJjb25jYXQiLCJzaG93T3ZlcmxheUluaXRpYWxseSIsInNlbGVjdE9wdGlvbnMiLCJTZWxlY3RPcHRpb25zIiwib1NlbGVjdE9wdGlvbiIsIlByb3BlcnR5TmFtZSIsInBhcmFtZXRlck9wdGlvbnMiLCJvUGFyYW1ldGVyT3B0aW9uIiwic29ydCIsInNQYXRoIiwiaW5jbHVkZXMiLCJzRGltZW5zaW9uVHlwZSIsInJlbmRlckxpbmVDaGFydCIsIkNoYXJ0VHlwZSIsIkNIQVJUIiwiUFJFU0VOVEFUSU9OVkFSSUFOVCIsIk1hbmlmZXN0IiwiaW5QYXJhbXMiLCJwcm9wZXJ0aWVzIiwiaXNQYXJhbSIsImVsZW1lbnQiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlZpc3VhbEZpbHRlcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBbm5vdGF0aW9uUGF0aCwgRW50aXR5U2V0LCBFbnRpdHlUeXBlLCBQcm9wZXJ0eSwgUHJvcGVydHlQYXRoIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IEFnZ3JlZ2F0YWJsZVByb3BlcnR5VHlwZSwgQ3VzdG9tQWdncmVnYXRlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9BZ2dyZWdhdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBBZ2dyZWdhdGVkUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0FuYWx5dGljc1wiO1xuaW1wb3J0IHR5cGUgeyBOYXZpZ2F0aW9uUHJvcGVydHlSZXN0cmljdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9DYXBhYmlsaXRpZXNcIjtcbmltcG9ydCB0eXBlIHtcblx0VmFsdWVMaXN0LFxuXHRWYWx1ZUxpc3RQYXJhbWV0ZXJJbixcblx0VmFsdWVMaXN0UGFyYW1ldGVySW5PdXQsXG5cdFZhbHVlTGlzdFBhcmFtZXRlck91dFxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW1vblwiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eUFubm90YXRpb25zX0NvbW1vbiB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uX0VkbVwiO1xuaW1wb3J0IHR5cGUgeyBDaGFydCwgUGFyYW1ldGVyVHlwZXMsIFNlbGVjdGlvblZhcmlhbnQgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgdHlwZSB7IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgeyBjb21waWxlRXhwcmVzc2lvbiwgbm90IH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgdHlwZSBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCB0eXBlIHsgRmlsdGVyRmllbGRNYW5pZmVzdENvbmZpZ3VyYXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgdHlwZSB7IFBhZ2VDb250ZXh0UGF0aFRhcmdldCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL1RlbXBsYXRlQ29udmVydGVyXCI7XG5pbXBvcnQgeyBBZ2dyZWdhdGlvbkhlbHBlciB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQWdncmVnYXRpb25cIjtcbmltcG9ydCB7IElzc3VlQ2F0ZWdvcnksIElzc3VlU2V2ZXJpdHksIElzc3VlVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvSXNzdWVNYW5hZ2VyXCI7XG5pbXBvcnQgeyBpc0VudGl0eVNldCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCB7IGNoZWNrRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucyB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGdldElzUmVxdWlyZWQsIGlzUHJvcGVydHlGaWx0ZXJhYmxlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRmlsdGVyVGVtcGxhdGluZ1wiO1xuXG5leHBvcnQgdHlwZSBWaXN1YWxGaWx0ZXJzID0ge1xuXHRkaW1lbnNpb25QYXRoPzogc3RyaW5nO1xuXHRtZWFzdXJlUGF0aD86IHN0cmluZztcblx0bGFiZWw/OiBzdHJpbmc7XG5cdGNoYXJ0QW5ub3RhdGlvbj86IHN0cmluZztcblx0cHJlc2VudGF0aW9uQW5ub3RhdGlvbj86IHN0cmluZztcblx0dmlzaWJsZT86IGJvb2xlYW47XG5cdG91dFBhcmFtZXRlcj86IHN0cmluZztcblx0aW5QYXJhbWV0ZXJzPzogb2JqZWN0W107XG5cdHZhbHVlbGlzdFByb3BlcnR5Pzogc3RyaW5nO1xuXHRjb250ZXh0UGF0aD86IHN0cmluZztcblx0c2VsZWN0aW9uVmFyaWFudEFubm90YXRpb24/OiBzdHJpbmc7XG5cdG11bHRpcGxlU2VsZWN0aW9uQWxsb3dlZD86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRyZXF1aXJlZD86IGJvb2xlYW47XG5cdHNob3dPdmVybGF5SW5pdGlhbGx5PzogYm9vbGVhbjtcblx0cmVuZGVyTGluZUNoYXJ0PzogYm9vbGVhbjtcblx0cmVxdWlyZWRQcm9wZXJ0aWVzPzogc3RyaW5nW107XG5cdGlzVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzPzogYm9vbGVhbjtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHRoYXQgbWVhc3VyZXMgYW5kIGRpbWVuc2lvbnMgb2YgdGhlIHZpc3VhbCBmaWx0ZXIgY2hhcnQgY2FuIGJlIGFnZ3JlZ2F0ZWQgYW5kIGdyb3VwZWQuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gY2hhcnRBbm5vdGF0aW9uIFRoZSBjaGFydCBhbm5vdGF0aW9uXG4gKiBAcGFyYW0gYWdncmVnYXRpb25IZWxwZXIgVGhlIGFnZ3JlZ2F0aW9uIGhlbHBlclxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBtZWFzdXJlIGNhbiBiZSBncm91cGVkIGFuZCBhZ2dyZWdhdGVkXG4gKi9cbmNvbnN0IF9jaGVja1ZGQWdncmVnYXRpb24gPSBmdW5jdGlvbiAoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0Y2hhcnRBbm5vdGF0aW9uOiBBbm5vdGF0aW9uUGF0aDxDaGFydD4sXG5cdGFnZ3JlZ2F0aW9uSGVscGVyOiBBZ2dyZWdhdGlvbkhlbHBlclxuKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG5cdGxldCBzTWVhc3VyZVBhdGgsIGJHcm91cGFibGUsIGJBZ2dyZWdhdGFibGU7XG5cdGxldCBzTWVhc3VyZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRjb25zdCBjdXN0b21BZ2dyZWdhdGVzID0gYWdncmVnYXRpb25IZWxwZXIuZ2V0Q3VzdG9tQWdncmVnYXRlRGVmaW5pdGlvbnMoKTtcblx0bGV0IGFUcmFuc0FnZ3JlZ2F0aW9ucyA9IGFnZ3JlZ2F0aW9uSGVscGVyLmdldFRyYW5zQWdncmVnYXRpb25zKCk7XG5cdGxldCBhQ3VzdEFnZ01lYXN1cmUgPSBbXSBhcyBBcnJheTxDdXN0b21BZ2dyZWdhdGU+O1xuXHQvLyBpZiB0aGUgY2hhcnQgZGVmaW5pdGlvbiBoYXMgY3VzdG9tIGFnZ3JlZ2F0ZXMsIHRoZW4gY29uc2lkZXIgdGhlbSwgZWxzZSBmYWxsIGJhY2sgdG8gdGhlIG1lYXN1cmVzIHdpdGggdHJhbnNmb3JtYXRpb24gYWdncmVnYXRlc1xuXHRpZiAoY2hhcnRBbm5vdGF0aW9uPy4kdGFyZ2V0Py5NZWFzdXJlcykge1xuXHRcdGFDdXN0QWdnTWVhc3VyZSA9IGN1c3RvbUFnZ3JlZ2F0ZXMuZmlsdGVyKGZ1bmN0aW9uIChjdXN0QWdnOiBDdXN0b21BZ2dyZWdhdGUpIHtcblx0XHRcdHJldHVybiBjdXN0QWdnLnF1YWxpZmllciA9PT0gY2hhcnRBbm5vdGF0aW9uPy4kdGFyZ2V0Py5NZWFzdXJlcz8uWzBdPy52YWx1ZTtcblx0XHR9KTtcblx0XHRzTWVhc3VyZSA9IGFDdXN0QWdnTWVhc3VyZS5sZW5ndGggPiAwID8gYUN1c3RBZ2dNZWFzdXJlWzBdLnF1YWxpZmllciA6IGNoYXJ0QW5ub3RhdGlvbj8uJHRhcmdldD8uTWVhc3VyZXM/LlswXT8udmFsdWU7XG5cdH1cblx0Ly8gY29uc2lkZXIgZHluYW1pYyBtZWFzdXJlcyBvbmx5IGlmIHRoZXJlIGFyZSBubyBtZWFzdXJlcyB3aXRoIGN1c3RvbSBhZ2dyZWdhdGVzXG5cdGlmICghYUN1c3RBZ2dNZWFzdXJlWzBdICYmIGNoYXJ0QW5ub3RhdGlvbj8uJHRhcmdldD8uRHluYW1pY01lYXN1cmVzKSB7XG5cdFx0c01lYXN1cmUgPSBjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHQuZ2V0Q29udmVydGVyQ29udGV4dEZvcjxBZ2dyZWdhdGVkUHJvcGVydHk+KFxuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldEFic29sdXRlQW5ub3RhdGlvblBhdGgoY2hhcnRBbm5vdGF0aW9uLiR0YXJnZXQuRHluYW1pY01lYXN1cmVzPy5bMF0/LnZhbHVlKVxuXHRcdFx0KVxuXHRcdFx0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKVxuXHRcdFx0LnRhcmdldE9iamVjdD8uTmFtZS50b1N0cmluZygpO1xuXHRcdGFUcmFuc0FnZ3JlZ2F0aW9ucyA9IGFnZ3JlZ2F0aW9uSGVscGVyLmdldEFnZ3JlZ2F0ZWRQcm9wZXJ0eSgpO1xuXHR9IGVsc2Uge1xuXHRcdGFUcmFuc0FnZ3JlZ2F0aW9ucyA9IGFnZ3JlZ2F0aW9uSGVscGVyLmdldEFnZ3JlZ2F0ZWRQcm9wZXJ0aWVzKClbMF0gYXMgdW5rbm93biBhcyBBZ2dyZWdhdGVkUHJvcGVydHlbXTtcblx0fVxuXG5cdGNvbnN0IHNEaW1lbnNpb24gPSBjaGFydEFubm90YXRpb24/LiR0YXJnZXQ/LkRpbWVuc2lvbnNbMF0/LnZhbHVlO1xuXG5cdGlmIChcblx0XHRjdXN0b21BZ2dyZWdhdGVzLnNvbWUoZnVuY3Rpb24gKGN1c3RBZ2c6IEN1c3RvbUFnZ3JlZ2F0ZSkge1xuXHRcdFx0cmV0dXJuIGN1c3RBZ2cucXVhbGlmaWVyID09PSBzTWVhc3VyZTtcblx0XHR9KVxuXHQpIHtcblx0XHRzTWVhc3VyZVBhdGggPSBzTWVhc3VyZTtcblx0fSBlbHNlIGlmIChhVHJhbnNBZ2dyZWdhdGlvbnMgJiYgYVRyYW5zQWdncmVnYXRpb25zWzBdKSB7XG5cdFx0YVRyYW5zQWdncmVnYXRpb25zLnNvbWUoZnVuY3Rpb24gKG9BZ2dyZWdhdGUpIHtcblx0XHRcdGlmIChvQWdncmVnYXRlLk5hbWUgPT09IHNNZWFzdXJlKSB7XG5cdFx0XHRcdHNNZWFzdXJlUGF0aCA9IG9BZ2dyZWdhdGU/LkFnZ3JlZ2F0YWJsZVByb3BlcnR5LnZhbHVlO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdGNvbnN0IGFBZ2dyZWdhdGFibGVQcm9wc0Zyb21Db250YWluZXIgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzKCk7XG5cdGNvbnN0IGFHcm91cGFibGVQcm9wc0Zyb21Db250YWluZXIgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRHcm91cGFibGVQcm9wZXJ0aWVzKCk7XG5cdGlmIChhQWdncmVnYXRhYmxlUHJvcHNGcm9tQ29udGFpbmVyICYmIGFBZ2dyZWdhdGFibGVQcm9wc0Zyb21Db250YWluZXIubGVuZ3RoKSB7XG5cdFx0Zm9yIChjb25zdCBhZ2dyZWdhdGFibGVQcm9wIG9mIGFBZ2dyZWdhdGFibGVQcm9wc0Zyb21Db250YWluZXIpIHtcblx0XHRcdGlmICgoYWdncmVnYXRhYmxlUHJvcCBhcyBBZ2dyZWdhdGFibGVQcm9wZXJ0eVR5cGUpPy5Qcm9wZXJ0eT8udmFsdWUgPT09IHNNZWFzdXJlUGF0aCkge1xuXHRcdFx0XHRiQWdncmVnYXRhYmxlID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0aWYgKGFHcm91cGFibGVQcm9wc0Zyb21Db250YWluZXIgJiYgYUdyb3VwYWJsZVByb3BzRnJvbUNvbnRhaW5lci5sZW5ndGgpIHtcblx0XHRmb3IgKGNvbnN0IGdyb3VwYWJsZVByb3Agb2YgYUdyb3VwYWJsZVByb3BzRnJvbUNvbnRhaW5lcikge1xuXHRcdFx0aWYgKGdyb3VwYWJsZVByb3A/LnZhbHVlID09PSBzRGltZW5zaW9uKSB7XG5cdFx0XHRcdGJHcm91cGFibGUgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gYkFnZ3JlZ2F0YWJsZSAmJiBiR3JvdXBhYmxlO1xufTtcblxuZXhwb3J0IHR5cGUgUGFyYW1ldGVyVHlwZSA9IHtcblx0bG9jYWxEYXRhUHJvcGVydHk6IHN0cmluZztcblx0dmFsdWVMaXN0UHJvcGVydHk6IHN0cmluZztcbn07XG5cbi8qKlxuICogTWV0aG9kIHRvIGdldCB0aGUgdmlzdWFsIGZpbHRlcnMgb2JqZWN0IGZvciBhIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSBlbnRpdHlUeXBlIFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNoYXJ0IGFubm90YXRpb25cbiAqIEBwYXJhbSBzUHJvcGVydHlQYXRoIFRoZSBhZ2dyZWdhdGlvbiBoZWxwZXJcbiAqIEBwYXJhbSBGaWx0ZXJGaWVsZHMgVGhlIGFnZ3JlZ2F0aW9uIGhlbHBlclxuICogQHJldHVybnMgVGhlIHZpc3VhbCBmaWx0ZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRWaXN1YWxGaWx0ZXJzKFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHNQcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0RmlsdGVyRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZE1hbmlmZXN0Q29uZmlndXJhdGlvbj5cbik6IFZpc3VhbEZpbHRlcnMgfCB1bmRlZmluZWQge1xuXHRsZXQgdmlzdWFsRmlsdGVyOiBWaXN1YWxGaWx0ZXJzIHwgdW5kZWZpbmVkO1xuXHRjb25zdCBvVmlzdWFsRmlsdGVyOiBGaWx0ZXJGaWVsZE1hbmlmZXN0Q29uZmlndXJhdGlvbiA9IEZpbHRlckZpZWxkc1tzUHJvcGVydHlQYXRoXTtcblx0aWYgKG9WaXN1YWxGaWx0ZXI/LnZpc3VhbEZpbHRlcj8udmFsdWVMaXN0KSB7XG5cdFx0Y29uc3Qgb1ZGUGF0aCA9IG9WaXN1YWxGaWx0ZXI/LnZpc3VhbEZpbHRlcj8udmFsdWVMaXN0O1xuXHRcdGNvbnN0IGFubm90YXRpb25RdWFsaWZpZXJTcGxpdCA9IG9WRlBhdGguc3BsaXQoXCIjXCIpO1xuXHRcdGNvbnN0IHF1YWxpZmllclZMID0gYW5ub3RhdGlvblF1YWxpZmllclNwbGl0Lmxlbmd0aCA+IDEgPyBgVmFsdWVMaXN0IyR7YW5ub3RhdGlvblF1YWxpZmllclNwbGl0WzFdfWAgOiBhbm5vdGF0aW9uUXVhbGlmaWVyU3BsaXRbMF07XG5cdFx0Y29uc3QgcHJvcGVydHkgPSBlbnRpdHlUeXBlLnJlc29sdmVQYXRoKHNQcm9wZXJ0eVBhdGgpIGFzIFByb3BlcnR5O1xuXHRcdGNvbnN0IHZhbHVlTGlzdCA9IHByb3BlcnR5Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5bcXVhbGlmaWVyVkwgYXMga2V5b2YgUHJvcGVydHlBbm5vdGF0aW9uc19Db21tb25dIGFzIFZhbHVlTGlzdCB8IHVuZGVmaW5lZDtcblx0XHRjb25zdCBpc1ZhbHVlTGlzdFdpdGhGaXhlZFZhbHVlcyA9IChwcm9wZXJ0eT8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzPy52YWx1ZU9mKCkgYXMgYm9vbGVhbikgfHwgZmFsc2U7XG5cdFx0aWYgKHZhbHVlTGlzdCkge1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvblBhdGggPSB2YWx1ZUxpc3Q/LkNvbGxlY3Rpb25QYXRoLnRvU3RyaW5nKCk7XG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlckNvbnRleHRGb3I8RW50aXR5U2V0Pihcblx0XHRcdFx0YC8ke2NvbGxlY3Rpb25QYXRoIHx8IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk/Lm5hbWV9YFxuXHRcdFx0KTtcblx0XHRcdGNvbnN0IHZhbHVlTGlzdFBhcmFtcyA9IHZhbHVlTGlzdD8uUGFyYW1ldGVycztcblx0XHRcdGxldCBvdXRQYXJhbWV0ZXI6IFZhbHVlTGlzdFBhcmFtZXRlck91dCB8IFZhbHVlTGlzdFBhcmFtZXRlckluT3V0IHwgdW5kZWZpbmVkO1xuXHRcdFx0Y29uc3QgaW5QYXJhbWV0ZXJzOiBQYXJhbWV0ZXJUeXBlW10gPSBbXTtcblx0XHRcdGxldCBhUGFyYW1ldGVyczogc3RyaW5nW10gPSBbXTtcblx0XHRcdGNvbnN0IHBhcmFtZXRlckVudGl0eVR5cGUgPSBjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQuZ2V0UGFyYW1ldGVyRW50aXR5VHlwZSgpO1xuXHRcdFx0YVBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJFbnRpdHlUeXBlXG5cdFx0XHRcdD8gcGFyYW1ldGVyRW50aXR5VHlwZS5rZXlzLm1hcChmdW5jdGlvbiAoa2V5KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4ga2V5Lm5hbWU7XG5cdFx0XHRcdCAgfSlcblx0XHRcdFx0OiBbXTtcblx0XHRcdGlmIChjb252ZXJ0ZXJDb250ZXh0LmdldENvbnRleHRQYXRoKCkgPT09IGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpKSB7XG5cdFx0XHRcdF9hZGRJblBhcmFtZXRlcnMoaW5QYXJhbWV0ZXJzLCBhUGFyYW1ldGVycywgdHJ1ZSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAodmFsdWVMaXN0UGFyYW1zKSB7XG5cdFx0XHRcdGZvciAoY29uc3QgdmFsdWVMaXN0UGFyYW0gb2YgdmFsdWVMaXN0UGFyYW1zKSB7XG5cdFx0XHRcdFx0Y29uc3QgbG9jYWxEYXRhUHJvcGVydHkgPSAodmFsdWVMaXN0UGFyYW0gYXMgVmFsdWVMaXN0UGFyYW1ldGVySW4pLkxvY2FsRGF0YVByb3BlcnR5Py52YWx1ZTtcblx0XHRcdFx0XHRjb25zdCB2YWx1ZUxpc3RQcm9wZXJ0eSA9IHZhbHVlTGlzdFBhcmFtLlZhbHVlTGlzdFByb3BlcnR5IGFzIHN0cmluZztcblx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHQodmFsdWVMaXN0UGFyYW0/LiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RQYXJhbWV0ZXJJbk91dFwiIHx8XG5cdFx0XHRcdFx0XHRcdHZhbHVlTGlzdFBhcmFtPy4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0UGFyYW1ldGVyT3V0XCIpICYmXG5cdFx0XHRcdFx0XHRzUHJvcGVydHlQYXRoID09PSBsb2NhbERhdGFQcm9wZXJ0eVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0b3V0UGFyYW1ldGVyID0gdmFsdWVMaXN0UGFyYW07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdCh2YWx1ZUxpc3RQYXJhbT8uJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFBhcmFtZXRlckluT3V0XCIgfHxcblx0XHRcdFx0XHRcdFx0dmFsdWVMaXN0UGFyYW0/LiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RQYXJhbWV0ZXJJblwiKSAmJlxuXHRcdFx0XHRcdFx0c1Byb3BlcnR5UGF0aCAhPT0gbG9jYWxEYXRhUHJvcGVydHlcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdGNvbnN0IGJOb3RGaWx0ZXJhYmxlID0gaXNQcm9wZXJ0eUZpbHRlcmFibGUoY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0LCB2YWx1ZUxpc3RQcm9wZXJ0eSk7XG5cdFx0XHRcdFx0XHRpZiAoIWJOb3RGaWx0ZXJhYmxlKSB7XG5cdFx0XHRcdFx0XHRcdGluUGFyYW1ldGVycy5wdXNoKHtcblx0XHRcdFx0XHRcdFx0XHRsb2NhbERhdGFQcm9wZXJ0eTogbG9jYWxEYXRhUHJvcGVydHksXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWVMaXN0UHJvcGVydHk6IHZhbHVlTGlzdFByb3BlcnR5XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKGluUGFyYW1ldGVycyAmJiBpblBhcmFtZXRlcnMubGVuZ3RoKSB7XG5cdFx0XHRcdGluUGFyYW1ldGVycy5mb3JFYWNoKGZ1bmN0aW9uIChvSW5QYXJhbWV0ZXIpIHtcblx0XHRcdFx0XHRjb25zdCBtYWluRW50aXR5U2V0SW5NYXBwaW5nQWxsb3dlZEV4cHJlc3Npb24gPSBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdFx0XHRcdGNoZWNrRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucyhcblx0XHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHRcdFx0XHRcdC5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yKGNvbnZlcnRlckNvbnRleHQuZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aChvSW5QYXJhbWV0ZXI/LmxvY2FsRGF0YVByb3BlcnR5KSlcblx0XHRcdFx0XHRcdFx0XHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLFxuXHRcdFx0XHRcdFx0XHRbXCJTaW5nbGVWYWx1ZVwiXVxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0Y29uc3QgdmFsdWVMaXN0RW50aXR5U2V0SW5NYXBwaW5nQWxsb3dlZEV4cHJlc3Npb24gPSBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdFx0XHRcdGNoZWNrRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucyhcblx0XHRcdFx0XHRcdFx0Y29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0XHRcdFx0LmdldENvbnZlcnRlckNvbnRleHRGb3IoXG5cdFx0XHRcdFx0XHRcdFx0XHRjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQuZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aChvSW5QYXJhbWV0ZXI/LnZhbHVlTGlzdFByb3BlcnR5KVxuXHRcdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0XHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLFxuXHRcdFx0XHRcdFx0XHRbXCJTaW5nbGVWYWx1ZVwiXVxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0aWYgKHZhbHVlTGlzdEVudGl0eVNldEluTWFwcGluZ0FsbG93ZWRFeHByZXNzaW9uID09PSBcInRydWVcIiAmJiBtYWluRW50aXR5U2V0SW5NYXBwaW5nQWxsb3dlZEV4cHJlc3Npb24gPT09IFwiZmFsc2VcIikge1xuXHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGBGaWx0ZXJSZXN0cmljdGlvbnMgb2YgJHtzUHJvcGVydHlQYXRofSBpbiBNYWluRW50aXR5U2V0IGFuZCBWYWx1ZUxpc3RFbnRpdHlTZXQgYXJlIGRpZmZlcmVudGApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBwdlF1YWxpZmllciA9IHZhbHVlTGlzdD8uUHJlc2VudGF0aW9uVmFyaWFudFF1YWxpZmllcjtcblx0XHRcdGNvbnN0IHN2UXVhbGlmaWVyID0gdmFsdWVMaXN0Py5TZWxlY3Rpb25WYXJpYW50UXVhbGlmaWVyO1xuXHRcdFx0Y29uc3QgcHZBbm5vdGF0aW9uID0gY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0Py5nZXRFbnRpdHlUeXBlKCkuYW5ub3RhdGlvbnMuVUk/LltgUHJlc2VudGF0aW9uVmFyaWFudCMke3B2UXVhbGlmaWVyfWBdO1xuXHRcdFx0Y29uc3QgYWdncmVnYXRpb25IZWxwZXIgPSBuZXcgQWdncmVnYXRpb25IZWxwZXIoY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSwgY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRcdGlmICghYWdncmVnYXRpb25IZWxwZXIuaXNBbmFseXRpY3NTdXBwb3J0ZWQoKSkge1xuXHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHB2QW5ub3RhdGlvbikge1xuXHRcdFx0XHRjb25zdCBhVmlzdWFsaXphdGlvbnMgPSBwdkFubm90YXRpb24/LlZpc3VhbGl6YXRpb25zO1xuXHRcdFx0XHRjb25zdCBjb250ZXh0UGF0aCA9IGAvJHt2YWx1ZUxpc3Q/LkNvbGxlY3Rpb25QYXRofWAgfHwgYC8ke2NvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dD8uZ2V0RW50aXR5U2V0KCk/Lm5hbWV9YDtcblx0XHRcdFx0dmlzdWFsRmlsdGVyID0ge307XG5cdFx0XHRcdHZpc3VhbEZpbHRlci5jb250ZXh0UGF0aCA9IGNvbnRleHRQYXRoO1xuXHRcdFx0XHR2aXN1YWxGaWx0ZXIuaXNWYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXMgPSBpc1ZhbHVlTGlzdFdpdGhGaXhlZFZhbHVlcztcblx0XHRcdFx0bGV0IGNoYXJ0QW5ub3RhdGlvbjogQW5ub3RhdGlvblBhdGg8Q2hhcnQ+IHwgdW5kZWZpbmVkO1xuXHRcdFx0XHRmb3IgKGNvbnN0IHZpc3VhbGl6YXRpb24gb2YgYVZpc3VhbGl6YXRpb25zKSB7XG5cdFx0XHRcdFx0aWYgKHZpc3VhbGl6YXRpb24uJHRhcmdldD8udGVybSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5DaGFydFwiKSB7XG5cdFx0XHRcdFx0XHRjaGFydEFubm90YXRpb24gPSB2aXN1YWxpemF0aW9uIGFzIEFubm90YXRpb25QYXRoPENoYXJ0Pjtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoY2hhcnRBbm5vdGF0aW9uKSB7XG5cdFx0XHRcdFx0Y29uc3QgX2JnZXRWRkFnZ3JlZ2F0aW9uOiBib29sZWFuIHwgdW5kZWZpbmVkID0gX2NoZWNrVkZBZ2dyZWdhdGlvbihcblx0XHRcdFx0XHRcdGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRcdGNoYXJ0QW5ub3RhdGlvbixcblx0XHRcdFx0XHRcdGFnZ3JlZ2F0aW9uSGVscGVyXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRpZiAoIV9iZ2V0VkZBZ2dyZWdhdGlvbikge1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb25zdCBiRGltZW5zaW9uSGlkZGVuID0gY2hhcnRBbm5vdGF0aW9uPy4kdGFyZ2V0Py5EaW1lbnNpb25zWzBdPy4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpO1xuXHRcdFx0XHRcdGNvbnN0IGJEaW1lbnNpb25IaWRkZW5GaWx0ZXIgPVxuXHRcdFx0XHRcdFx0Y2hhcnRBbm5vdGF0aW9uPy4kdGFyZ2V0Py5EaW1lbnNpb25zWzBdPy4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbkZpbHRlcj8udmFsdWVPZigpO1xuXHRcdFx0XHRcdGlmIChiRGltZW5zaW9uSGlkZGVuID09PSB0cnVlIHx8IGJEaW1lbnNpb25IaWRkZW5GaWx0ZXIgPT09IHRydWUpIHtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKGFWaXN1YWxpemF0aW9ucyAmJiBhVmlzdWFsaXphdGlvbnMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIuY2hhcnRBbm5vdGF0aW9uID0gY2hhcnRBbm5vdGF0aW9uLiR0YXJnZXRcblx0XHRcdFx0XHRcdFx0PyBjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQ/LmdldEFic29sdXRlQW5ub3RhdGlvblBhdGgoXG5cdFx0XHRcdFx0XHRcdFx0XHRgJHtjaGFydEFubm90YXRpb24uJHRhcmdldC5mdWxseVF1YWxpZmllZE5hbWV9LyRBbm5vdGF0aW9uUGF0aC9gXG5cdFx0XHRcdFx0XHRcdCAgKVxuXHRcdFx0XHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdC8vIFRoaXMgbmVlZHMgdG8gYmUgZG9uZSB0byBhdm9pZCByZXBldGl0aXZlIGVudGl0eSB0eXBlIGluIGNhc2Ugb2Ygbm9uLXBhcmFtZXRlcml6ZWQgZW50aXR5IHNldCBlLmcgL1NhbGVzT3JkZXJNYW5hZ2UvY29tLmNfc2FsZXNvcmRlcm1hbmFnZV9zZF9hZ2dyZWdhdGUuU2FsZXNPcmRlck1hbmFnZVxuXHRcdFx0XHRcdFx0Y29uc3QgZW50aXR5U2V0TmFtZSA9IGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKT8ubmFtZTtcblx0XHRcdFx0XHRcdGxldCBwcmVzZW50YXRpb25Bbm5vdGF0aW9uO1xuXHRcdFx0XHRcdFx0Y29uc3QgcmVsYXRpdmVBbm5vdGF0aW9uUGF0aCA9IGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dD8uZ2V0UmVsYXRpdmVBbm5vdGF0aW9uUGF0aChcblx0XHRcdFx0XHRcdFx0YCR7cHZBbm5vdGF0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZX0vYCxcblx0XHRcdFx0XHRcdFx0Y29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdGlmIChwYXJhbWV0ZXJFbnRpdHlUeXBlKSB7XG5cdFx0XHRcdFx0XHRcdHByZXNlbnRhdGlvbkFubm90YXRpb24gPSBjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQuZ2V0Q29udGV4dFBhdGgoKSArIFwiL1wiICsgcmVsYXRpdmVBbm5vdGF0aW9uUGF0aDtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHByZXNlbnRhdGlvbkFubm90YXRpb24gPSBcIi9cIiArIGVudGl0eVNldE5hbWUgKyBcIi9cIiArIHJlbGF0aXZlQW5ub3RhdGlvblBhdGg7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIucHJlc2VudGF0aW9uQW5ub3RhdGlvbiA9IHB2QW5ub3RhdGlvbiA/IHByZXNlbnRhdGlvbkFubm90YXRpb24gOiB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIub3V0UGFyYW1ldGVyID0gb3V0UGFyYW1ldGVyPy5Mb2NhbERhdGFQcm9wZXJ0eT8udmFsdWU7XG5cdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIuaW5QYXJhbWV0ZXJzID0gaW5QYXJhbWV0ZXJzO1xuXHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLnZhbHVlbGlzdFByb3BlcnR5ID0gb3V0UGFyYW1ldGVyPy5WYWx1ZUxpc3RQcm9wZXJ0eSBhcyBzdHJpbmc7XG5cdFx0XHRcdFx0XHRjb25zdCBiSXNSYW5nZSA9IGNoZWNrRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucyhcblx0XHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHRcdFx0XHRcdC5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yKGNvbnZlcnRlckNvbnRleHQuZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aChzUHJvcGVydHlQYXRoKSlcblx0XHRcdFx0XHRcdFx0XHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLFxuXHRcdFx0XHRcdFx0XHRbXCJTaW5nbGVSYW5nZVwiLCBcIk11bHRpUmFuZ2VcIl1cblx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdGlmIChjb21waWxlRXhwcmVzc2lvbihiSXNSYW5nZSkgPT09IFwidHJ1ZVwiKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0XHRcdFx0XHQuZ2V0RGlhZ25vc3RpY3MoKVxuXHRcdFx0XHRcdFx0XHRcdC5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sIElzc3VlU2V2ZXJpdHkuSGlnaCwgSXNzdWVUeXBlLk1BTEZPUk1FRF9WSVNVQUxGSUxURVJTLlZBTFVFTElTVCk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGNvbnN0IGJJc01haW5FbnRpdHlTZXRTaW5nbGVTZWxlY3Rpb24gPSBjaGVja0ZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMoXG5cdFx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0XHRcdFx0XHQuZ2V0Q29udmVydGVyQ29udGV4dEZvcihjb252ZXJ0ZXJDb250ZXh0LmdldEFic29sdXRlQW5ub3RhdGlvblBhdGgoc1Byb3BlcnR5UGF0aCkpXG5cdFx0XHRcdFx0XHRcdFx0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSxcblx0XHRcdFx0XHRcdFx0W1wiU2luZ2xlVmFsdWVcIl1cblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIubXVsdGlwbGVTZWxlY3Rpb25BbGxvd2VkID0gY29tcGlsZUV4cHJlc3Npb24obm90KGJJc01haW5FbnRpdHlTZXRTaW5nbGVTZWxlY3Rpb24pKTtcblx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci5yZXF1aXJlZCA9IGdldElzUmVxdWlyZWQoY29udmVydGVyQ29udGV4dCwgc1Byb3BlcnR5UGF0aCk7XG5cdFx0XHRcdFx0XHRsZXQgc3ZBbm5vdGF0aW9uOiBTZWxlY3Rpb25WYXJpYW50IHwgdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0aWYgKHN2UXVhbGlmaWVyKSB7XG5cdFx0XHRcdFx0XHRcdHN2QW5ub3RhdGlvbiA9IGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dD8uZ2V0RW50aXR5VHlwZUFubm90YXRpb248U2VsZWN0aW9uVmFyaWFudD4oXG5cdFx0XHRcdFx0XHRcdFx0YEBVSS5TZWxlY3Rpb25WYXJpYW50IyR7c3ZRdWFsaWZpZXJ9YFxuXHRcdFx0XHRcdFx0XHQpPy5hbm5vdGF0aW9uO1xuXHRcdFx0XHRcdFx0XHRsZXQgc2VsZWN0aW9uVmFyaWFudEFubm90YXRpb247XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHJlbGF0aXZlU2VsZWN0aW9uVmFyaWFudFBhdGggPSBjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQ/LmdldFJlbGF0aXZlQW5ub3RhdGlvblBhdGgoXG5cdFx0XHRcdFx0XHRcdFx0YCR7c3ZBbm5vdGF0aW9uPy5mdWxseVF1YWxpZmllZE5hbWV9L2AsXG5cdFx0XHRcdFx0XHRcdFx0Y29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRpZiAocGFyYW1ldGVyRW50aXR5VHlwZSkge1xuXHRcdFx0XHRcdFx0XHRcdHNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uID1cblx0XHRcdFx0XHRcdFx0XHRcdGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpICsgXCIvXCIgKyByZWxhdGl2ZVNlbGVjdGlvblZhcmlhbnRQYXRoO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uID0gXCIvXCIgKyBlbnRpdHlTZXROYW1lICsgXCIvXCIgKyByZWxhdGl2ZVNlbGVjdGlvblZhcmlhbnRQYXRoO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci5zZWxlY3Rpb25WYXJpYW50QW5ub3RhdGlvbiA9IHN2QW5ub3RhdGlvbiA/IHNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uIDogdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0bGV0IHJlcXVpcmVkUHJvcGVydGllczogUHJvcGVydHlQYXRoW10gPSBbXTtcblx0XHRcdFx0XHRcdGlmIChwYXJhbWV0ZXJFbnRpdHlUeXBlKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHNFbnRpdHlTZXQgPSBjb2xsZWN0aW9uUGF0aC5zcGxpdChcIi9cIilbMF07XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHNOYXZpZ2F0aW9uUHJvcGVydHkgPSBjb2xsZWN0aW9uUGF0aC5zcGxpdChcIi9cIilbMV07XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG9FbnRpdHlTZXRDb252ZXJ0ZXJDb250ZXh0ID0gY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yKGAvJHtzRW50aXR5U2V0fWApO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBhUmVzdHJpY3RlZFByb3BlcnRpZXMgPVxuXHRcdFx0XHRcdFx0XHRcdG9FbnRpdHlTZXRDb252ZXJ0ZXJDb250ZXh0Py5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkuc3RhcnRpbmdFbnRpdHlTZXQ/LmFubm90YXRpb25zPy5DYXBhYmlsaXRpZXNcblx0XHRcdFx0XHRcdFx0XHRcdD8uTmF2aWdhdGlvblJlc3RyaWN0aW9ucz8uUmVzdHJpY3RlZFByb3BlcnRpZXM7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG9SZXN0cmljdGVkUHJvcGVydHkgPSBhUmVzdHJpY3RlZFByb3BlcnRpZXM/LmZpbmQoXG5cdFx0XHRcdFx0XHRcdFx0KHJlc3RyaWN0ZWROYXZQcm9wOiBOYXZpZ2F0aW9uUHJvcGVydHlSZXN0cmljdGlvblR5cGVzKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAocmVzdHJpY3RlZE5hdlByb3AuTmF2aWdhdGlvblByb3BlcnR5Py50eXBlID09PSBcIk5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhcIikge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzdHJpY3RlZE5hdlByb3AuTmF2aWdhdGlvblByb3BlcnR5LnZhbHVlID09PSBzTmF2aWdhdGlvblByb3BlcnR5O1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0cmVxdWlyZWRQcm9wZXJ0aWVzID0gb1Jlc3RyaWN0ZWRQcm9wZXJ0eT8uRmlsdGVyUmVzdHJpY3Rpb25zPy5SZXF1aXJlZFByb3BlcnRpZXMgPz8gW107XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBlbnRpdHlTZXRPclNpbmdsZXRvbiA9IGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dD8uZ2V0RW50aXR5U2V0KCk7XG5cdFx0XHRcdFx0XHRcdGlmIChpc0VudGl0eVNldChlbnRpdHlTZXRPclNpbmdsZXRvbikpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXF1aXJlZFByb3BlcnRpZXMgPVxuXHRcdFx0XHRcdFx0XHRcdFx0ZW50aXR5U2V0T3JTaW5nbGV0b24uYW5ub3RhdGlvbnMuQ2FwYWJpbGl0aWVzPy5GaWx0ZXJSZXN0cmljdGlvbnM/LlJlcXVpcmVkUHJvcGVydGllcyA/PyBbXTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0bGV0IHJlcXVpcmVkUHJvcGVydHlQYXRoczogc3RyaW5nW10gPSBbXTtcblx0XHRcdFx0XHRcdGlmIChyZXF1aXJlZFByb3BlcnRpZXM/Lmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRyZXF1aXJlZFByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbiAob1JlcXVpcmVQcm9wZXJ0eSkge1xuXHRcdFx0XHRcdFx0XHRcdHJlcXVpcmVkUHJvcGVydHlQYXRocy5wdXNoKG9SZXF1aXJlUHJvcGVydHkudmFsdWUpO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHJlcXVpcmVkUHJvcGVydHlQYXRocyA9IHJlcXVpcmVkUHJvcGVydHlQYXRocy5jb25jYXQoYVBhcmFtZXRlcnMpO1xuXHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLnJlcXVpcmVkUHJvcGVydGllcyA9IHJlcXVpcmVkUHJvcGVydHlQYXRocztcblx0XHRcdFx0XHRcdGlmIChjb252ZXJ0ZXJDb250ZXh0LmdldENvbnRleHRQYXRoKCkgPT09IGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpKSB7XG5cdFx0XHRcdFx0XHRcdC8vIGlmIGNvbnRleHQgUGF0aCBmb3IgYm90aCB2aXN1YWwgZmlsdGVyIGFuZCBmaWx0ZXIgYmFyIGFyZSBzYW1lLCBjb25zaWRlciByZXF1aXJlZCBQcm9wZXJ0aWVzIGFzIHdlbGwgYWxvbmcgd2l0aCBpbiBQYXJhbWV0ZXJzXG5cdFx0XHRcdFx0XHRcdF9hZGRJblBhcmFtZXRlcnMoaW5QYXJhbWV0ZXJzLCByZXF1aXJlZFByb3BlcnRpZXMsIGZhbHNlKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmICh2aXN1YWxGaWx0ZXIucmVxdWlyZWRQcm9wZXJ0aWVzPy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0aWYgKCF2aXN1YWxGaWx0ZXIuaW5QYXJhbWV0ZXJzIHx8ICF2aXN1YWxGaWx0ZXIuaW5QYXJhbWV0ZXJzLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRcdGlmICghdmlzdWFsRmlsdGVyLnNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIuc2hvd092ZXJsYXlJbml0aWFsbHkgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRsZXQgc2VsZWN0T3B0aW9ucyA9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHN2QW5ub3RhdGlvbj8uU2VsZWN0T3B0aW9ucz8ubWFwKChvU2VsZWN0T3B0aW9uKSA9PiBvU2VsZWN0T3B0aW9uLlByb3BlcnR5TmFtZT8udmFsdWUpIHx8IFtdO1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgcGFyYW1ldGVyT3B0aW9ucyA9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHN2QW5ub3RhdGlvbj8uUGFyYW1ldGVycz8ubWFwKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdChvUGFyYW1ldGVyT3B0aW9uKSA9PiAob1BhcmFtZXRlck9wdGlvbiBhcyBQYXJhbWV0ZXJUeXBlcykuUHJvcGVydHlOYW1lPy52YWx1ZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpIHx8IFtdO1xuXHRcdFx0XHRcdFx0XHRcdFx0c2VsZWN0T3B0aW9ucyA9IHNlbGVjdE9wdGlvbnMuY29uY2F0KHBhcmFtZXRlck9wdGlvbnMpO1xuXHRcdFx0XHRcdFx0XHRcdFx0cmVxdWlyZWRQcm9wZXJ0eVBhdGhzID0gcmVxdWlyZWRQcm9wZXJ0eVBhdGhzLnNvcnQoKTtcblx0XHRcdFx0XHRcdFx0XHRcdHNlbGVjdE9wdGlvbnMgPSBzZWxlY3RPcHRpb25zLnNvcnQoKTtcblx0XHRcdFx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci5zaG93T3ZlcmxheUluaXRpYWxseSA9IHJlcXVpcmVkUHJvcGVydHlQYXRocy5zb21lKGZ1bmN0aW9uIChzUGF0aCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gIXNlbGVjdE9wdGlvbnMuaW5jbHVkZXMoc1BhdGgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci5zaG93T3ZlcmxheUluaXRpYWxseSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIuc2hvd092ZXJsYXlJbml0aWFsbHkgPSBmYWxzZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGNvbnN0IHNEaW1lbnNpb25UeXBlID0gY2hhcnRBbm5vdGF0aW9uPy4kdGFyZ2V0Py5EaW1lbnNpb25zWzBdPy4kdGFyZ2V0Py50eXBlO1xuXHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLnJlbmRlckxpbmVDaGFydCA9XG5cdFx0XHRcdFx0XHRcdHNEaW1lbnNpb25UeXBlID09PSBcIkVkbS5EYXRlVGltZU9mZnNldFwiIHx8XG5cdFx0XHRcdFx0XHRcdHNEaW1lbnNpb25UeXBlID09PSBcIkVkbS5EYXRlXCIgfHxcblx0XHRcdFx0XHRcdFx0c0RpbWVuc2lvblR5cGUgPT09IFwiRWRtLlRpbWVPZkRheVwiIHx8XG5cdFx0XHRcdFx0XHRcdGNoYXJ0QW5ub3RhdGlvbi4kdGFyZ2V0Py5DaGFydFR5cGUgIT09IFwiVUkuQ2hhcnRUeXBlL0xpbmVcIjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHRcdFx0LmdldERpYWdub3N0aWNzKClcblx0XHRcdFx0XHRcdC5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sIElzc3VlU2V2ZXJpdHkuSGlnaCwgSXNzdWVUeXBlLk1BTEZPUk1FRF9WSVNVQUxGSUxURVJTLkNIQVJUKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0XHQuZ2V0RGlhZ25vc3RpY3MoKVxuXHRcdFx0XHRcdC5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sIElzc3VlU2V2ZXJpdHkuSGlnaCwgSXNzdWVUeXBlLk1BTEZPUk1FRF9WSVNVQUxGSUxURVJTLlBSRVNFTlRBVElPTlZBUklBTlQpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdC5nZXREaWFnbm9zdGljcygpXG5cdFx0XHRcdC5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sIElzc3VlU2V2ZXJpdHkuSGlnaCwgSXNzdWVUeXBlLk1BTEZPUk1FRF9WSVNVQUxGSUxURVJTLlZBTFVFTElTVCk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RGlhZ25vc3RpY3MoKS5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5Lk1hbmlmZXN0LCBJc3N1ZVNldmVyaXR5LkhpZ2gsIElzc3VlVHlwZS5NQUxGT1JNRURfVklTVUFMRklMVEVSUy5WQUxVRUxJU1QpO1xuXHR9XG5cdHJldHVybiB2aXN1YWxGaWx0ZXI7XG59XG5cbi8qKlxuICogTWV0aG9kIHRvIGFkZCBpbnBhcmFtZXRlcnMgZnJvbSByZXF1aXJlZCBwcm9wZXJ0aWVzIGFuZCBwYXJhbWV0ZXJzLlxuICpcbiAqIEBwYXJhbSBpblBhcmFtcyBBbiBhcnJheSBjb250YWluaW5nIGV4aXN0aW5nIGlucGFyYW1zXG4gKiBAcGFyYW0gcHJvcGVydGllcyBBbiBhcnJheSBjb250YWluaW5nIGVpdGhlciByZXF1aXJlZHByb3BlcnRpZXMgb3IgcGFyYW1ldGVyc1xuICogQHBhcmFtIGlzUGFyYW0gQSBib29sZWFuIGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIHBhc3NlZCBwcm9wZXJ0aWVzIGFyZSBwYXJhbWV0ZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBfYWRkSW5QYXJhbWV0ZXJzKGluUGFyYW1zOiBQYXJhbWV0ZXJUeXBlW10sIHByb3BlcnRpZXM6IFByb3BlcnR5UGF0aFtdIHwgc3RyaW5nW10sIGlzUGFyYW06IGJvb2xlYW4pOiB2b2lkIHtcblx0cHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uIChlbGVtZW50KSB7XG5cdFx0Y29uc3QgcHJvcGVydHkgPSBpc1BhcmFtID8gZWxlbWVudCA6IChlbGVtZW50IGFzIFByb3BlcnR5UGF0aCkudmFsdWU7XG5cdFx0aW5QYXJhbXMucHVzaCh7XG5cdFx0XHRsb2NhbERhdGFQcm9wZXJ0eTogcHJvcGVydHkgYXMgc3RyaW5nLFxuXHRcdFx0dmFsdWVMaXN0UHJvcGVydHk6IHByb3BlcnR5IGFzIHN0cmluZ1xuXHRcdH0pO1xuXHR9KTtcbn1cbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7O0VBMkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxNQUFNQSxtQkFBbUIsR0FBRyxVQUMzQkMsZ0JBQXlELEVBQ3pEQyxlQUFzQyxFQUN0Q0MsaUJBQW9DLEVBQ2Q7SUFBQTtJQUN0QixJQUFJQyxZQUFZLEVBQUVDLFVBQVUsRUFBRUMsYUFBYTtJQUMzQyxJQUFJQyxRQUE0QjtJQUNoQyxNQUFNQyxnQkFBZ0IsR0FBR0wsaUJBQWlCLENBQUNNLDZCQUE2QixFQUFFO0lBQzFFLElBQUlDLGtCQUFrQixHQUFHUCxpQkFBaUIsQ0FBQ1Esb0JBQW9CLEVBQUU7SUFDakUsSUFBSUMsZUFBZSxHQUFHLEVBQTRCO0lBQ2xEO0lBQ0EsSUFBSVYsZUFBZSxhQUFmQSxlQUFlLHdDQUFmQSxlQUFlLENBQUVXLE9BQU8sa0RBQXhCLHNCQUEwQkMsUUFBUSxFQUFFO01BQUE7TUFDdkNGLGVBQWUsR0FBR0osZ0JBQWdCLENBQUNPLE1BQU0sQ0FBQyxVQUFVQyxPQUF3QixFQUFFO1FBQUE7UUFDN0UsT0FBT0EsT0FBTyxDQUFDQyxTQUFTLE1BQUtmLGVBQWUsYUFBZkEsZUFBZSxpREFBZkEsZUFBZSxDQUFFVyxPQUFPLHFGQUF4Qix1QkFBMEJDLFFBQVEscUZBQWxDLHVCQUFxQyxDQUFDLENBQUMsMkRBQXZDLHVCQUF5Q0ksS0FBSztNQUM1RSxDQUFDLENBQUM7TUFDRlgsUUFBUSxHQUFHSyxlQUFlLENBQUNPLE1BQU0sR0FBRyxDQUFDLEdBQUdQLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQ0ssU0FBUyxHQUFHZixlQUFlLGFBQWZBLGVBQWUsaURBQWZBLGVBQWUsQ0FBRVcsT0FBTyxxRkFBeEIsdUJBQTBCQyxRQUFRLHFGQUFsQyx1QkFBcUMsQ0FBQyxDQUFDLDJEQUF2Qyx1QkFBeUNJ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
311
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY2hlY2tWRkFnZ3JlZ2F0aW9uIiwiY29udmVydGVyQ29udGV4dCIsImNoYXJ0QW5ub3RhdGlvbiIsImFnZ3JlZ2F0aW9uSGVscGVyIiwiX2NoYXJ0QW5ub3RhdGlvbiQkdGFyIiwiX2NoYXJ0QW5ub3RhdGlvbiQkdGFyOCIsIl9jaGFydEFubm90YXRpb24kJHRhcjExIiwiX2NoYXJ0QW5ub3RhdGlvbiQkdGFyMTIiLCJzTWVhc3VyZVBhdGgiLCJiR3JvdXBhYmxlIiwiYkFnZ3JlZ2F0YWJsZSIsInNNZWFzdXJlIiwiY3VzdG9tQWdncmVnYXRlcyIsImdldEN1c3RvbUFnZ3JlZ2F0ZURlZmluaXRpb25zIiwiYVRyYW5zQWdncmVnYXRpb25zIiwiZ2V0VHJhbnNBZ2dyZWdhdGlvbnMiLCJhQ3VzdEFnZ01lYXN1cmUiLCIkdGFyZ2V0IiwiTWVhc3VyZXMiLCJfY2hhcnRBbm5vdGF0aW9uJCR0YXI1IiwiX2NoYXJ0QW5ub3RhdGlvbiQkdGFyNiIsIl9jaGFydEFubm90YXRpb24kJHRhcjciLCJmaWx0ZXIiLCJjdXN0QWdnIiwiX2NoYXJ0QW5ub3RhdGlvbiQkdGFyMiIsIl9jaGFydEFubm90YXRpb24kJHRhcjMiLCJfY2hhcnRBbm5vdGF0aW9uJCR0YXI0IiwicXVhbGlmaWVyIiwidmFsdWUiLCJsZW5ndGgiLCJEeW5hbWljTWVhc3VyZXMiLCJfY29udmVydGVyQ29udGV4dCRnZXQiLCJfY2hhcnRBbm5vdGF0aW9uJCR0YXI5IiwiX2NoYXJ0QW5ub3RhdGlvbiQkdGFyMTAiLCJnZXRDb252ZXJ0ZXJDb250ZXh0Rm9yIiwiZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aCIsImdldERhdGFNb2RlbE9iamVjdFBhdGgiLCJ0YXJnZXRPYmplY3QiLCJOYW1lIiwidG9TdHJpbmciLCJnZXRBZ2dyZWdhdGVkUHJvcGVydHkiLCJnZXRBZ2dyZWdhdGVkUHJvcGVydGllcyIsInNEaW1lbnNpb24iLCJEaW1lbnNpb25zIiwic29tZSIsIm9BZ2dyZWdhdGUiLCJBZ2dyZWdhdGFibGVQcm9wZXJ0eSIsImFBZ2dyZWdhdGFibGVQcm9wc0Zyb21Db250YWluZXIiLCJnZXRBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzIiwiYUdyb3VwYWJsZVByb3BzRnJvbUNvbnRhaW5lciIsImdldEdyb3VwYWJsZVByb3BlcnRpZXMiLCJhZ2dyZWdhdGFibGVQcm9wIiwiX1Byb3BlcnR5IiwiUHJvcGVydHkiLCJncm91cGFibGVQcm9wIiwiZ2V0VmlzdWFsRmlsdGVycyIsImVudGl0eVR5cGUiLCJzUHJvcGVydHlQYXRoIiwiRmlsdGVyRmllbGRzIiwiX29WaXN1YWxGaWx0ZXIkdmlzdWFsIiwidmlzdWFsRmlsdGVyIiwib1Zpc3VhbEZpbHRlciIsInZhbHVlTGlzdCIsIl9vVmlzdWFsRmlsdGVyJHZpc3VhbDIiLCJfcHJvcGVydHkkYW5ub3RhdGlvbnMiLCJfcHJvcGVydHkkYW5ub3RhdGlvbnMyIiwiX3Byb3BlcnR5JGFubm90YXRpb25zMyIsIl9wcm9wZXJ0eSRhbm5vdGF0aW9uczQiLCJfcHJvcGVydHkkYW5ub3RhdGlvbnM1Iiwib1ZGUGF0aCIsImFubm90YXRpb25RdWFsaWZpZXJTcGxpdCIsInNwbGl0IiwicXVhbGlmaWVyVkwiLCJwcm9wZXJ0eSIsInJlc29sdmVQYXRoIiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJpc1ZhbHVlTGlzdFdpdGhGaXhlZFZhbHVlcyIsIlZhbHVlTGlzdFdpdGhGaXhlZFZhbHVlcyIsInZhbHVlT2YiLCJfY29udmVydGVyQ29udGV4dCRnZXQyIiwiX2NvbGxlY3Rpb25QYXRoQ29udmVyIiwiY29sbGVjdGlvblBhdGgiLCJDb2xsZWN0aW9uUGF0aCIsImNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dCIsImdldEVudGl0eVNldCIsIm5hbWUiLCJ2YWx1ZUxpc3RQYXJhbXMiLCJQYXJhbWV0ZXJzIiwib3V0UGFyYW1ldGVyIiwiaW5QYXJhbWV0ZXJzIiwiYVBhcmFtZXRlcnMiLCJwYXJhbWV0ZXJFbnRpdHlUeXBlIiwiZ2V0UGFyYW1ldGVyRW50aXR5VHlwZSIsImtleXMiLCJtYXAiLCJrZXkiLCJnZXRDb250ZXh0UGF0aCIsIl9hZGRJblBhcmFtZXRlcnMiLCJ2YWx1ZUxpc3RQYXJhbSIsIl9Mb2NhbERhdGFQcm9wZXJ0eSIsImxvY2FsRGF0YVByb3BlcnR5IiwiTG9jYWxEYXRhUHJvcGVydHkiLCJ2YWx1ZUxpc3RQcm9wZXJ0eSIsIlZhbHVlTGlzdFByb3BlcnR5IiwiJFR5cGUiLCJiTm90RmlsdGVyYWJsZSIsImlzUHJvcGVydHlGaWx0ZXJhYmxlIiwicHVzaCIsImZvckVhY2giLCJvSW5QYXJhbWV0ZXIiLCJtYWluRW50aXR5U2V0SW5NYXBwaW5nQWxsb3dlZEV4cHJlc3Npb24iLCJjb21waWxlRXhwcmVzc2lvbiIsImNoZWNrRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucyIsInZhbHVlTGlzdEVudGl0eVNldEluTWFwcGluZ0FsbG93ZWRFeHByZXNzaW9uIiwiRXJyb3IiLCJwdlF1YWxpZmllciIsIlByZXNlbnRhdGlvblZhcmlhbnRRdWFsaWZpZXIiLCJzdlF1YWxpZmllciIsIlNlbGVjdGlvblZhcmlhbnRRdWFsaWZpZXIiLCJwdkFubm90YXRpb24iLCJnZXRFbnRpdHlUeXBlIiwiVUkiLCJBZ2dyZWdhdGlvbkhlbHBlciIsImlzQW5hbHl0aWNzU3VwcG9ydGVkIiwidW5kZWZpbmVkIiwiX2NvbGxlY3Rpb25QYXRoQ29udmVyMiIsImFWaXN1YWxpemF0aW9ucyIsIlZpc3VhbGl6YXRpb25zIiwiY29udGV4dFBhdGgiLCJ2aXN1YWxpemF0aW9uIiwiX3Zpc3VhbGl6YXRpb24kJHRhcmdlIiwidGVybSIsIl9jaGFydEFubm90YXRpb24iLCJfY2hhcnRBbm5vdGF0aW9uJCR0YXIxMyIsIl9jaGFydEFubm90YXRpb24kJHRhcjE0IiwiX2NoYXJ0QW5ub3RhdGlvbiQkdGFyMTUiLCJfY2hhcnRBbm5vdGF0aW9uJCR0YXIxNiIsIl9jaGFydEFubm90YXRpb24kJHRhcjE3IiwiX2NoYXJ0QW5ub3RhdGlvbiQkdGFyMTgiLCJfY2hhcnRBbm5vdGF0aW9uMiIsIl9jaGFydEFubm90YXRpb24yJCR0YSIsIl9jaGFydEFubm90YXRpb24yJCR0YTIiLCJfY2hhcnRBbm5vdGF0aW9uMiQkdGEzIiwiX2NoYXJ0QW5ub3RhdGlvbjIkJHRhNCIsIl9jaGFydEFubm90YXRpb24yJCR0YTUiLCJfY2hhcnRBbm5vdGF0aW9uMiQkdGE2IiwiX2JnZXRWRkFnZ3JlZ2F0aW9uIiwiYkRpbWVuc2lvbkhpZGRlbiIsIkhpZGRlbiIsImJEaW1lbnNpb25IaWRkZW5GaWx0ZXIiLCJIaWRkZW5GaWx0ZXIiLCJfY29sbGVjdGlvblBhdGhDb252ZXIzIiwiX291dFBhcmFtZXRlciIsIl9vdXRQYXJhbWV0ZXIkTG9jYWxEYSIsIl9vdXRQYXJhbWV0ZXIyIiwiX3JlcXVpcmVkUHJvcGVydGllcyIsIl92aXN1YWxGaWx0ZXIkcmVxdWlyZSIsIl9jaGFydEFubm90YXRpb24zIiwiX2NoYXJ0QW5ub3RhdGlvbjMkJHRhIiwiX2NoYXJ0QW5ub3RhdGlvbjMkJHRhMiIsIl9jaGFydEFubm90YXRpb24zJCR0YTMiLCJfY2hhcnRBbm5vdGF0aW9uJCR0YXIxOSIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImVudGl0eVNldE5hbWUiLCJwcmVzZW50YXRpb25Bbm5vdGF0aW9uIiwicmVsYXRpdmVBbm5vdGF0aW9uUGF0aCIsImdldFJlbGF0aXZlQW5ub3RhdGlvblBhdGgiLCJ2YWx1ZWxpc3RQcm9wZXJ0eSIsImJJc1JhbmdlIiwiZ2V0RGlhZ25vc3RpY3MiLCJhZGRJc3N1ZSIsIklzc3VlQ2F0ZWdvcnkiLCJBbm5vdGF0aW9uIiwiSXNzdWVTZXZlcml0eSIsIkhpZ2giLCJJc3N1ZVR5cGUiLCJNQUxGT1JNRURfVklTVUFMRklMVEVSUyIsIlZBTFVFTElTVCIsImJJc01haW5FbnRpdHlTZXRTaW5nbGVTZWxlY3Rpb24iLCJtdWx0aXBsZVNlbGVjdGlvbkFsbG93ZWQiLCJub3QiLCJyZXF1aXJlZCIsImdldElzUmVxdWlyZWQiLCJzdkFubm90YXRpb24iLCJfY29sbGVjdGlvblBhdGhDb252ZXI0IiwiX3N2QW5ub3RhdGlvbiIsImdldEVudGl0eVR5cGVBbm5vdGF0aW9uIiwiYW5ub3RhdGlvbiIsInNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uIiwicmVsYXRpdmVTZWxlY3Rpb25WYXJpYW50UGF0aCIsInJlcXVpcmVkUHJvcGVydGllcyIsIl9vRW50aXR5U2V0Q29udmVydGVyQyIsIl9vRW50aXR5U2V0Q29udmVydGVyQzIiLCJfb0VudGl0eVNldENvbnZlcnRlckMzIiwiX29FbnRpdHlTZXRDb252ZXJ0ZXJDNCIsIl9vUmVzdHJpY3RlZFByb3BlcnR5JCIsInNFbnRpdHlTZXQiLCJzTmF2aWdhdGlvblByb3BlcnR5Iiwib0VudGl0eVNldENvbnZlcnRlckNvbnRleHQiLCJhUmVzdHJpY3RlZFByb3BlcnRpZXMiLCJzdGFydGluZ0VudGl0eVNldCIsIkNhcGFiaWxpdGllcyIsIk5hdmlnYXRpb25SZXN0cmljdGlvbnMiLCJSZXN0cmljdGVkUHJvcGVydGllcyIsIm9SZXN0cmljdGVkUHJvcGVydHkiLCJmaW5kIiwicmVzdHJpY3RlZE5hdlByb3AiLCJfcmVzdHJpY3RlZE5hdlByb3AkTmEiLCJOYXZpZ2F0aW9uUHJvcGVydHkiLCJ0eXBlIiwiRmlsdGVyUmVzdHJpY3Rpb25zIiwiUmVxdWlyZWRQcm9wZXJ0aWVzIiwiZW50aXR5U2V0T3JTaW5nbGV0b24iLCJpc0VudGl0eVNldCIsIl9lbnRpdHlTZXRPclNpbmdsZXRvbiIsIl9lbnRpdHlTZXRPclNpbmdsZXRvbjIiLCJyZXF1aXJlZFByb3BlcnR5UGF0aHMiLCJvUmVxdWlyZVByb3BlcnR5IiwiY29uY2F0Iiwic2hvd092ZXJsYXlJbml0aWFsbHkiLCJfc3ZBbm5vdGF0aW9uMiIsIl9zdkFubm90YXRpb24yJFNlbGVjdCIsIl9zdkFubm90YXRpb24zIiwiX3N2QW5ub3RhdGlvbjMkUGFyYW1lIiwic2VsZWN0T3B0aW9ucyIsIlNlbGVjdE9wdGlvbnMiLCJvU2VsZWN0T3B0aW9uIiwiX29TZWxlY3RPcHRpb24kUHJvcGVyIiwiUHJvcGVydHlOYW1lIiwicGFyYW1ldGVyT3B0aW9ucyIsIm9QYXJhbWV0ZXJPcHRpb24iLCJfUHJvcGVydHlOYW1lIiwic29ydCIsInNQYXRoIiwiaW5jbHVkZXMiLCJzRGltZW5zaW9uVHlwZSIsInJlbmRlckxpbmVDaGFydCIsIkNoYXJ0VHlwZSIsIkNIQVJUIiwiUFJFU0VOVEFUSU9OVkFSSUFOVCIsIk1hbmlmZXN0IiwiX2V4cG9ydHMiLCJpblBhcmFtcyIsInByb3BlcnRpZXMiLCJpc1BhcmFtIiwiZWxlbWVudCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiVmlzdWFsRmlsdGVycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFubm90YXRpb25QYXRoLCBFbnRpdHlTZXQsIEVudGl0eVR5cGUsIFByb3BlcnR5LCBQcm9wZXJ0eVBhdGggfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgQWdncmVnYXRhYmxlUHJvcGVydHlUeXBlLCBDdXN0b21BZ2dyZWdhdGUgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0FnZ3JlZ2F0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IEFnZ3JlZ2F0ZWRQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQW5hbHl0aWNzXCI7XG5pbXBvcnQgdHlwZSB7IE5hdmlnYXRpb25Qcm9wZXJ0eVJlc3RyaWN0aW9uVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NhcGFiaWxpdGllc1wiO1xuaW1wb3J0IHR5cGUge1xuXHRWYWx1ZUxpc3QsXG5cdFZhbHVlTGlzdFBhcmFtZXRlckluLFxuXHRWYWx1ZUxpc3RQYXJhbWV0ZXJJbk91dCxcblx0VmFsdWVMaXN0UGFyYW1ldGVyT3V0XG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgdHlwZSB7IFByb3BlcnR5QW5ub3RhdGlvbnNfQ29tbW9uIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db21tb25fRWRtXCI7XG5pbXBvcnQgdHlwZSB7IENoYXJ0LCBQYXJhbWV0ZXJUeXBlcywgU2VsZWN0aW9uVmFyaWFudCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB0eXBlIHsgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGNvbXBpbGVFeHByZXNzaW9uLCBub3QgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB0eXBlIENvbnZlcnRlckNvbnRleHQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBGaWx0ZXJGaWVsZE1hbmlmZXN0Q29uZmlndXJhdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB0eXBlIHsgUGFnZUNvbnRleHRQYXRoVGFyZ2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvVGVtcGxhdGVDb252ZXJ0ZXJcIjtcbmltcG9ydCB7IEFnZ3JlZ2F0aW9uSGVscGVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9BZ2dyZWdhdGlvblwiO1xuaW1wb3J0IHsgSXNzdWVDYXRlZ29yeSwgSXNzdWVTZXZlcml0eSwgSXNzdWVUeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Jc3N1ZU1hbmFnZXJcIjtcbmltcG9ydCB7IGlzRW50aXR5U2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IHsgY2hlY2tGaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0SXNSZXF1aXJlZCwgaXNQcm9wZXJ0eUZpbHRlcmFibGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9GaWx0ZXJUZW1wbGF0aW5nXCI7XG5cbmV4cG9ydCB0eXBlIFZpc3VhbEZpbHRlcnMgPSB7XG5cdGRpbWVuc2lvblBhdGg/OiBzdHJpbmc7XG5cdG1lYXN1cmVQYXRoPzogc3RyaW5nO1xuXHRsYWJlbD86IHN0cmluZztcblx0Y2hhcnRBbm5vdGF0aW9uPzogc3RyaW5nO1xuXHRwcmVzZW50YXRpb25Bbm5vdGF0aW9uPzogc3RyaW5nO1xuXHR2aXNpYmxlPzogYm9vbGVhbjtcblx0b3V0UGFyYW1ldGVyPzogc3RyaW5nO1xuXHRpblBhcmFtZXRlcnM/OiBvYmplY3RbXTtcblx0dmFsdWVsaXN0UHJvcGVydHk/OiBzdHJpbmc7XG5cdGNvbnRleHRQYXRoPzogc3RyaW5nO1xuXHRzZWxlY3Rpb25WYXJpYW50QW5ub3RhdGlvbj86IHN0cmluZztcblx0bXVsdGlwbGVTZWxlY3Rpb25BbGxvd2VkPzogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdHJlcXVpcmVkPzogYm9vbGVhbjtcblx0c2hvd092ZXJsYXlJbml0aWFsbHk/OiBib29sZWFuO1xuXHRyZW5kZXJMaW5lQ2hhcnQ/OiBib29sZWFuO1xuXHRyZXF1aXJlZFByb3BlcnRpZXM/OiBzdHJpbmdbXTtcblx0aXNWYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXM/OiBib29sZWFuO1xufTtcblxuLyoqXG4gKiBDaGVja3MgdGhhdCBtZWFzdXJlcyBhbmQgZGltZW5zaW9ucyBvZiB0aGUgdmlzdWFsIGZpbHRlciBjaGFydCBjYW4gYmUgYWdncmVnYXRlZCBhbmQgZ3JvdXBlZC5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIGNoYXJ0QW5ub3RhdGlvbiBUaGUgY2hhcnQgYW5ub3RhdGlvblxuICogQHBhcmFtIGFnZ3JlZ2F0aW9uSGVscGVyIFRoZSBhZ2dyZWdhdGlvbiBoZWxwZXJcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgbWVhc3VyZSBjYW4gYmUgZ3JvdXBlZCBhbmQgYWdncmVnYXRlZFxuICovXG5jb25zdCBfY2hlY2tWRkFnZ3JlZ2F0aW9uID0gZnVuY3Rpb24gKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGNoYXJ0QW5ub3RhdGlvbjogQW5ub3RhdGlvblBhdGg8Q2hhcnQ+LFxuXHRhZ2dyZWdhdGlvbkhlbHBlcjogQWdncmVnYXRpb25IZWxwZXJcbik6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuXHRsZXQgc01lYXN1cmVQYXRoLCBiR3JvdXBhYmxlLCBiQWdncmVnYXRhYmxlO1xuXHRsZXQgc01lYXN1cmU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0Y29uc3QgY3VzdG9tQWdncmVnYXRlcyA9IGFnZ3JlZ2F0aW9uSGVscGVyLmdldEN1c3RvbUFnZ3JlZ2F0ZURlZmluaXRpb25zKCk7XG5cdGxldCBhVHJhbnNBZ2dyZWdhdGlvbnMgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRUcmFuc0FnZ3JlZ2F0aW9ucygpO1xuXHRsZXQgYUN1c3RBZ2dNZWFzdXJlID0gW10gYXMgQXJyYXk8Q3VzdG9tQWdncmVnYXRlPjtcblx0Ly8gaWYgdGhlIGNoYXJ0IGRlZmluaXRpb24gaGFzIGN1c3RvbSBhZ2dyZWdhdGVzLCB0aGVuIGNvbnNpZGVyIHRoZW0sIGVsc2UgZmFsbCBiYWNrIHRvIHRoZSBtZWFzdXJlcyB3aXRoIHRyYW5zZm9ybWF0aW9uIGFnZ3JlZ2F0ZXNcblx0aWYgKGNoYXJ0QW5ub3RhdGlvbj8uJHRhcmdldD8uTWVhc3VyZXMpIHtcblx0XHRhQ3VzdEFnZ01lYXN1cmUgPSBjdXN0b21BZ2dyZWdhdGVzLmZpbHRlcihmdW5jdGlvbiAoY3VzdEFnZzogQ3VzdG9tQWdncmVnYXRlKSB7XG5cdFx0XHRyZXR1cm4gY3VzdEFnZy5xdWFsaWZpZXIgPT09IGNoYXJ0QW5ub3RhdGlvbj8uJHRhcmdldD8uTWVhc3VyZXM/LlswXT8udmFsdWU7XG5cdFx0fSk7XG5cdFx0c01lYXN1cmUgPSBhQ3VzdEFnZ01lYXN1cmUubGVuZ3RoID4gMCA/IGFDdXN0QWdnTWVhc3VyZVswXS5xdWFsaWZpZXIgOiBjaGFydEFubm90YXRpb24/LiR0YXJnZXQ/Lk1lYXN1cmVzPy5bMF0/LnZhbHVlO1xuXHR9XG5cdC8vIGNvbnNpZGVyIGR5bmFtaWMgbWVhc3VyZXMgb25seSBpZiB0aGVyZSBhcmUgbm8gbWVhc3VyZXMgd2l0aCBjdXN0b20gYWdncmVnYXRlc1xuXHRpZiAoIWFDdXN0QWdnTWVhc3VyZVswXSAmJiBjaGFydEFubm90YXRpb24/LiR0YXJnZXQ/LkR5bmFtaWNNZWFzdXJlcykge1xuXHRcdHNNZWFzdXJlID0gY29udmVydGVyQ29udGV4dFxuXHRcdFx0LmdldENvbnZlcnRlckNvbnRleHRGb3I8QWdncmVnYXRlZFByb3BlcnR5Pihcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoKGNoYXJ0QW5ub3RhdGlvbi4kdGFyZ2V0LkR5bmFtaWNNZWFzdXJlcz8uWzBdPy52YWx1ZSlcblx0XHRcdClcblx0XHRcdC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKClcblx0XHRcdC50YXJnZXRPYmplY3Q/Lk5hbWUudG9TdHJpbmcoKTtcblx0XHRhVHJhbnNBZ2dyZWdhdGlvbnMgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRBZ2dyZWdhdGVkUHJvcGVydHkoKTtcblx0fSBlbHNlIHtcblx0XHRhVHJhbnNBZ2dyZWdhdGlvbnMgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRBZ2dyZWdhdGVkUHJvcGVydGllcygpWzBdIGFzIHVua25vd24gYXMgQWdncmVnYXRlZFByb3BlcnR5W107XG5cdH1cblxuXHRjb25zdCBzRGltZW5zaW9uID0gY2hhcnRBbm5vdGF0aW9uPy4kdGFyZ2V0Py5EaW1lbnNpb25zWzBdPy52YWx1ZTtcblxuXHRpZiAoXG5cdFx0Y3VzdG9tQWdncmVnYXRlcy5zb21lKGZ1bmN0aW9uIChjdXN0QWdnOiBDdXN0b21BZ2dyZWdhdGUpIHtcblx0XHRcdHJldHVybiBjdXN0QWdnLnF1YWxpZmllciA9PT0gc01lYXN1cmU7XG5cdFx0fSlcblx0KSB7XG5cdFx0c01lYXN1cmVQYXRoID0gc01lYXN1cmU7XG5cdH0gZWxzZSBpZiAoYVRyYW5zQWdncmVnYXRpb25zICYmIGFUcmFuc0FnZ3JlZ2F0aW9uc1swXSkge1xuXHRcdGFUcmFuc0FnZ3JlZ2F0aW9ucy5zb21lKGZ1bmN0aW9uIChvQWdncmVnYXRlKSB7XG5cdFx0XHRpZiAob0FnZ3JlZ2F0ZS5OYW1lID09PSBzTWVhc3VyZSkge1xuXHRcdFx0XHRzTWVhc3VyZVBhdGggPSBvQWdncmVnYXRlPy5BZ2dyZWdhdGFibGVQcm9wZXJ0eS52YWx1ZTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRjb25zdCBhQWdncmVnYXRhYmxlUHJvcHNGcm9tQ29udGFpbmVyID0gYWdncmVnYXRpb25IZWxwZXIuZ2V0QWdncmVnYXRhYmxlUHJvcGVydGllcygpO1xuXHRjb25zdCBhR3JvdXBhYmxlUHJvcHNGcm9tQ29udGFpbmVyID0gYWdncmVnYXRpb25IZWxwZXIuZ2V0R3JvdXBhYmxlUHJvcGVydGllcygpO1xuXHRpZiAoYUFnZ3JlZ2F0YWJsZVByb3BzRnJvbUNvbnRhaW5lciAmJiBhQWdncmVnYXRhYmxlUHJvcHNGcm9tQ29udGFpbmVyLmxlbmd0aCkge1xuXHRcdGZvciAoY29uc3QgYWdncmVnYXRhYmxlUHJvcCBvZiBhQWdncmVnYXRhYmxlUHJvcHNGcm9tQ29udGFpbmVyKSB7XG5cdFx0XHRpZiAoKGFnZ3JlZ2F0YWJsZVByb3AgYXMgQWdncmVnYXRhYmxlUHJvcGVydHlUeXBlKT8uUHJvcGVydHk/LnZhbHVlID09PSBzTWVhc3VyZVBhdGgpIHtcblx0XHRcdFx0YkFnZ3JlZ2F0YWJsZSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdGlmIChhR3JvdXBhYmxlUHJvcHNGcm9tQ29udGFpbmVyICYmIGFHcm91cGFibGVQcm9wc0Zyb21Db250YWluZXIubGVuZ3RoKSB7XG5cdFx0Zm9yIChjb25zdCBncm91cGFibGVQcm9wIG9mIGFHcm91cGFibGVQcm9wc0Zyb21Db250YWluZXIpIHtcblx0XHRcdGlmIChncm91cGFibGVQcm9wPy52YWx1ZSA9PT0gc0RpbWVuc2lvbikge1xuXHRcdFx0XHRiR3JvdXBhYmxlID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIGJBZ2dyZWdhdGFibGUgJiYgYkdyb3VwYWJsZTtcbn07XG5cbmV4cG9ydCB0eXBlIFBhcmFtZXRlclR5cGUgPSB7XG5cdGxvY2FsRGF0YVByb3BlcnR5OiBzdHJpbmc7XG5cdHZhbHVlTGlzdFByb3BlcnR5OiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIE1ldGhvZCB0byBnZXQgdGhlIHZpc3VhbCBmaWx0ZXJzIG9iamVjdCBmb3IgYSBwcm9wZXJ0eS5cbiAqIEBwYXJhbSBlbnRpdHlUeXBlIFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNoYXJ0IGFubm90YXRpb25cbiAqIEBwYXJhbSBzUHJvcGVydHlQYXRoIFRoZSBhZ2dyZWdhdGlvbiBoZWxwZXJcbiAqIEBwYXJhbSBGaWx0ZXJGaWVsZHMgVGhlIGFnZ3JlZ2F0aW9uIGhlbHBlclxuICogQHJldHVybnMgVGhlIHZpc3VhbCBmaWx0ZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRWaXN1YWxGaWx0ZXJzKFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHNQcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0RmlsdGVyRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZE1hbmlmZXN0Q29uZmlndXJhdGlvbj5cbik6IFZpc3VhbEZpbHRlcnMgfCB1bmRlZmluZWQge1xuXHRsZXQgdmlzdWFsRmlsdGVyOiBWaXN1YWxGaWx0ZXJzIHwgdW5kZWZpbmVkO1xuXHRjb25zdCBvVmlzdWFsRmlsdGVyOiBGaWx0ZXJGaWVsZE1hbmlmZXN0Q29uZmlndXJhdGlvbiA9IEZpbHRlckZpZWxkc1tzUHJvcGVydHlQYXRoXTtcblx0aWYgKG9WaXN1YWxGaWx0ZXI/LnZpc3VhbEZpbHRlcj8udmFsdWVMaXN0KSB7XG5cdFx0Y29uc3Qgb1ZGUGF0aCA9IG9WaXN1YWxGaWx0ZXI/LnZpc3VhbEZpbHRlcj8udmFsdWVMaXN0O1xuXHRcdGNvbnN0IGFubm90YXRpb25RdWFsaWZpZXJTcGxpdCA9IG9WRlBhdGguc3BsaXQoXCIjXCIpO1xuXHRcdGNvbnN0IHF1YWxpZmllclZMID0gYW5ub3RhdGlvblF1YWxpZmllclNwbGl0Lmxlbmd0aCA+IDEgPyBgVmFsdWVMaXN0IyR7YW5ub3RhdGlvblF1YWxpZmllclNwbGl0WzFdfWAgOiBhbm5vdGF0aW9uUXVhbGlmaWVyU3BsaXRbMF07XG5cdFx0Y29uc3QgcHJvcGVydHkgPSBlbnRpdHlUeXBlLnJlc29sdmVQYXRoKHNQcm9wZXJ0eVBhdGgpIGFzIFByb3BlcnR5O1xuXHRcdGNvbnN0IHZhbHVlTGlzdCA9IHByb3BlcnR5Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5bcXVhbGlmaWVyVkwgYXMga2V5b2YgUHJvcGVydHlBbm5vdGF0aW9uc19Db21tb25dIGFzIFZhbHVlTGlzdCB8IHVuZGVmaW5lZDtcblx0XHRjb25zdCBpc1ZhbHVlTGlzdFdpdGhGaXhlZFZhbHVlcyA9IChwcm9wZXJ0eT8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzPy52YWx1ZU9mKCkgYXMgYm9vbGVhbikgfHwgZmFsc2U7XG5cdFx0aWYgKHZhbHVlTGlzdCkge1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvblBhdGggPSB2YWx1ZUxpc3Q/LkNvbGxlY3Rpb25QYXRoLnRvU3RyaW5nKCk7XG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlckNvbnRleHRGb3I8RW50aXR5U2V0Pihcblx0XHRcdFx0YC8ke2NvbGxlY3Rpb25QYXRoIHx8IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk/Lm5hbWV9YFxuXHRcdFx0KTtcblx0XHRcdGNvbnN0IHZhbHVlTGlzdFBhcmFtcyA9IHZhbHVlTGlzdD8uUGFyYW1ldGVycztcblx0XHRcdGxldCBvdXRQYXJhbWV0ZXI6IFZhbHVlTGlzdFBhcmFtZXRlck91dCB8IFZhbHVlTGlzdFBhcmFtZXRlckluT3V0IHwgdW5kZWZpbmVkO1xuXHRcdFx0Y29uc3QgaW5QYXJhbWV0ZXJzOiBQYXJhbWV0ZXJUeXBlW10gPSBbXTtcblx0XHRcdGxldCBhUGFyYW1ldGVyczogc3RyaW5nW10gPSBbXTtcblx0XHRcdGNvbnN0IHBhcmFtZXRlckVudGl0eVR5cGUgPSBjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQuZ2V0UGFyYW1ldGVyRW50aXR5VHlwZSgpO1xuXHRcdFx0YVBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJFbnRpdHlUeXBlXG5cdFx0XHRcdD8gcGFyYW1ldGVyRW50aXR5VHlwZS5rZXlzLm1hcChmdW5jdGlvbiAoa2V5KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4ga2V5Lm5hbWU7XG5cdFx0XHRcdCAgfSlcblx0XHRcdFx0OiBbXTtcblx0XHRcdGlmIChjb252ZXJ0ZXJDb250ZXh0LmdldENvbnRleHRQYXRoKCkgPT09IGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpKSB7XG5cdFx0XHRcdF9hZGRJblBhcmFtZXRlcnMoaW5QYXJhbWV0ZXJzLCBhUGFyYW1ldGVycywgdHJ1ZSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAodmFsdWVMaXN0UGFyYW1zKSB7XG5cdFx0XHRcdGZvciAoY29uc3QgdmFsdWVMaXN0UGFyYW0gb2YgdmFsdWVMaXN0UGFyYW1zKSB7XG5cdFx0XHRcdFx0Y29uc3QgbG9jYWxEYXRhUHJvcGVydHkgPSAodmFsdWVMaXN0UGFyYW0gYXMgVmFsdWVMaXN0UGFyYW1ldGVySW4pLkxvY2FsRGF0YVByb3BlcnR5Py52YWx1ZTtcblx0XHRcdFx0XHRjb25zdCB2YWx1ZUxpc3RQcm9wZXJ0eSA9IHZhbHVlTGlzdFBhcmFtLlZhbHVlTGlzdFByb3BlcnR5IGFzIHN0cmluZztcblx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHQodmFsdWVMaXN0UGFyYW0/LiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RQYXJhbWV0ZXJJbk91dFwiIHx8XG5cdFx0XHRcdFx0XHRcdHZhbHVlTGlzdFBhcmFtPy4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0UGFyYW1ldGVyT3V0XCIpICYmXG5cdFx0XHRcdFx0XHRzUHJvcGVydHlQYXRoID09PSBsb2NhbERhdGFQcm9wZXJ0eVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0b3V0UGFyYW1ldGVyID0gdmFsdWVMaXN0UGFyYW07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdCh2YWx1ZUxpc3RQYXJhbT8uJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFBhcmFtZXRlckluT3V0XCIgfHxcblx0XHRcdFx0XHRcdFx0dmFsdWVMaXN0UGFyYW0/LiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RQYXJhbWV0ZXJJblwiKSAmJlxuXHRcdFx0XHRcdFx0c1Byb3BlcnR5UGF0aCAhPT0gbG9jYWxEYXRhUHJvcGVydHlcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdGNvbnN0IGJOb3RGaWx0ZXJhYmxlID0gaXNQcm9wZXJ0eUZpbHRlcmFibGUoY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0LCB2YWx1ZUxpc3RQcm9wZXJ0eSk7XG5cdFx0XHRcdFx0XHRpZiAoIWJOb3RGaWx0ZXJhYmxlKSB7XG5cdFx0XHRcdFx0XHRcdGluUGFyYW1ldGVycy5wdXNoKHtcblx0XHRcdFx0XHRcdFx0XHRsb2NhbERhdGFQcm9wZXJ0eTogbG9jYWxEYXRhUHJvcGVydHksXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWVMaXN0UHJvcGVydHk6IHZhbHVlTGlzdFByb3BlcnR5XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKGluUGFyYW1ldGVycyAmJiBpblBhcmFtZXRlcnMubGVuZ3RoKSB7XG5cdFx0XHRcdGluUGFyYW1ldGVycy5mb3JFYWNoKGZ1bmN0aW9uIChvSW5QYXJhbWV0ZXIpIHtcblx0XHRcdFx0XHRjb25zdCBtYWluRW50aXR5U2V0SW5NYXBwaW5nQWxsb3dlZEV4cHJlc3Npb24gPSBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdFx0XHRcdGNoZWNrRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucyhcblx0XHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHRcdFx0XHRcdC5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yKGNvbnZlcnRlckNvbnRleHQuZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aChvSW5QYXJhbWV0ZXI/LmxvY2FsRGF0YVByb3BlcnR5KSlcblx0XHRcdFx0XHRcdFx0XHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLFxuXHRcdFx0XHRcdFx0XHRbXCJTaW5nbGVWYWx1ZVwiXVxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0Y29uc3QgdmFsdWVMaXN0RW50aXR5U2V0SW5NYXBwaW5nQWxsb3dlZEV4cHJlc3Npb24gPSBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdFx0XHRcdGNoZWNrRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucyhcblx0XHRcdFx0XHRcdFx0Y29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0XHRcdFx0LmdldENvbnZlcnRlckNvbnRleHRGb3IoXG5cdFx0XHRcdFx0XHRcdFx0XHRjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQuZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aChvSW5QYXJhbWV0ZXI/LnZhbHVlTGlzdFByb3BlcnR5KVxuXHRcdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0XHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLFxuXHRcdFx0XHRcdFx0XHRbXCJTaW5nbGVWYWx1ZVwiXVxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0aWYgKHZhbHVlTGlzdEVudGl0eVNldEluTWFwcGluZ0FsbG93ZWRFeHByZXNzaW9uID09PSBcInRydWVcIiAmJiBtYWluRW50aXR5U2V0SW5NYXBwaW5nQWxsb3dlZEV4cHJlc3Npb24gPT09IFwiZmFsc2VcIikge1xuXHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGBGaWx0ZXJSZXN0cmljdGlvbnMgb2YgJHtzUHJvcGVydHlQYXRofSBpbiBNYWluRW50aXR5U2V0IGFuZCBWYWx1ZUxpc3RFbnRpdHlTZXQgYXJlIGRpZmZlcmVudGApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBwdlF1YWxpZmllciA9IHZhbHVlTGlzdD8uUHJlc2VudGF0aW9uVmFyaWFudFF1YWxpZmllcjtcblx0XHRcdGNvbnN0IHN2UXVhbGlmaWVyID0gdmFsdWVMaXN0Py5TZWxlY3Rpb25WYXJpYW50UXVhbGlmaWVyO1xuXHRcdFx0Y29uc3QgcHZBbm5vdGF0aW9uID0gY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0Py5nZXRFbnRpdHlUeXBlKCkuYW5ub3RhdGlvbnMuVUk/LltgUHJlc2VudGF0aW9uVmFyaWFudCMke3B2UXVhbGlmaWVyfWBdO1xuXHRcdFx0Y29uc3QgYWdncmVnYXRpb25IZWxwZXIgPSBuZXcgQWdncmVnYXRpb25IZWxwZXIoY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSwgY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRcdGlmICghYWdncmVnYXRpb25IZWxwZXIuaXNBbmFseXRpY3NTdXBwb3J0ZWQoKSkge1xuXHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHB2QW5ub3RhdGlvbikge1xuXHRcdFx0XHRjb25zdCBhVmlzdWFsaXphdGlvbnMgPSBwdkFubm90YXRpb24/LlZpc3VhbGl6YXRpb25zO1xuXHRcdFx0XHRjb25zdCBjb250ZXh0UGF0aCA9IGAvJHt2YWx1ZUxpc3Q/LkNvbGxlY3Rpb25QYXRofWAgfHwgYC8ke2NvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dD8uZ2V0RW50aXR5U2V0KCk/Lm5hbWV9YDtcblx0XHRcdFx0dmlzdWFsRmlsdGVyID0ge307XG5cdFx0XHRcdHZpc3VhbEZpbHRlci5jb250ZXh0UGF0aCA9IGNvbnRleHRQYXRoO1xuXHRcdFx0XHR2aXN1YWxGaWx0ZXIuaXNWYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXMgPSBpc1ZhbHVlTGlzdFdpdGhGaXhlZFZhbHVlcztcblx0XHRcdFx0bGV0IGNoYXJ0QW5ub3RhdGlvbjogQW5ub3RhdGlvblBhdGg8Q2hhcnQ+IHwgdW5kZWZpbmVkO1xuXHRcdFx0XHRmb3IgKGNvbnN0IHZpc3VhbGl6YXRpb24gb2YgYVZpc3VhbGl6YXRpb25zKSB7XG5cdFx0XHRcdFx0aWYgKHZpc3VhbGl6YXRpb24uJHRhcmdldD8udGVybSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5DaGFydFwiKSB7XG5cdFx0XHRcdFx0XHRjaGFydEFubm90YXRpb24gPSB2aXN1YWxpemF0aW9uIGFzIEFubm90YXRpb25QYXRoPENoYXJ0Pjtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoY2hhcnRBbm5vdGF0aW9uKSB7XG5cdFx0XHRcdFx0Y29uc3QgX2JnZXRWRkFnZ3JlZ2F0aW9uOiBib29sZWFuIHwgdW5kZWZpbmVkID0gX2NoZWNrVkZBZ2dyZWdhdGlvbihcblx0XHRcdFx0XHRcdGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRcdGNoYXJ0QW5ub3RhdGlvbixcblx0XHRcdFx0XHRcdGFnZ3JlZ2F0aW9uSGVscGVyXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRpZiAoIV9iZ2V0VkZBZ2dyZWdhdGlvbikge1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb25zdCBiRGltZW5zaW9uSGlkZGVuID0gY2hhcnRBbm5vdGF0aW9uPy4kdGFyZ2V0Py5EaW1lbnNpb25zWzBdPy4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpO1xuXHRcdFx0XHRcdGNvbnN0IGJEaW1lbnNpb25IaWRkZW5GaWx0ZXIgPVxuXHRcdFx0XHRcdFx0Y2hhcnRBbm5vdGF0aW9uPy4kdGFyZ2V0Py5EaW1lbnNpb25zWzBdPy4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbkZpbHRlcj8udmFsdWVPZigpO1xuXHRcdFx0XHRcdGlmIChiRGltZW5zaW9uSGlkZGVuID09PSB0cnVlIHx8IGJEaW1lbnNpb25IaWRkZW5GaWx0ZXIgPT09IHRydWUpIHtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKGFWaXN1YWxpemF0aW9ucyAmJiBhVmlzdWFsaXphdGlvbnMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIuY2hhcnRBbm5vdGF0aW9uID0gY2hhcnRBbm5vdGF0aW9uLiR0YXJnZXRcblx0XHRcdFx0XHRcdFx0PyBjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQ/LmdldEFic29sdXRlQW5ub3RhdGlvblBhdGgoXG5cdFx0XHRcdFx0XHRcdFx0XHRgJHtjaGFydEFubm90YXRpb24uJHRhcmdldC5mdWxseVF1YWxpZmllZE5hbWV9LyRBbm5vdGF0aW9uUGF0aC9gXG5cdFx0XHRcdFx0XHRcdCAgKVxuXHRcdFx0XHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdC8vIFRoaXMgbmVlZHMgdG8gYmUgZG9uZSB0byBhdm9pZCByZXBldGl0aXZlIGVudGl0eSB0eXBlIGluIGNhc2Ugb2Ygbm9uLXBhcmFtZXRlcml6ZWQgZW50aXR5IHNldCBlLmcgL1NhbGVzT3JkZXJNYW5hZ2UvY29tLmNfc2FsZXNvcmRlcm1hbmFnZV9zZF9hZ2dyZWdhdGUuU2FsZXNPcmRlck1hbmFnZVxuXHRcdFx0XHRcdFx0Y29uc3QgZW50aXR5U2V0TmFtZSA9IGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKT8ubmFtZTtcblx0XHRcdFx0XHRcdGxldCBwcmVzZW50YXRpb25Bbm5vdGF0aW9uO1xuXHRcdFx0XHRcdFx0Y29uc3QgcmVsYXRpdmVBbm5vdGF0aW9uUGF0aCA9IGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dD8uZ2V0UmVsYXRpdmVBbm5vdGF0aW9uUGF0aChcblx0XHRcdFx0XHRcdFx0YCR7cHZBbm5vdGF0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZX0vYCxcblx0XHRcdFx0XHRcdFx0Y29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdGlmIChwYXJhbWV0ZXJFbnRpdHlUeXBlKSB7XG5cdFx0XHRcdFx0XHRcdHByZXNlbnRhdGlvbkFubm90YXRpb24gPSBjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQuZ2V0Q29udGV4dFBhdGgoKSArIFwiL1wiICsgcmVsYXRpdmVBbm5vdGF0aW9uUGF0aDtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHByZXNlbnRhdGlvbkFubm90YXRpb24gPSBcIi9cIiArIGVudGl0eVNldE5hbWUgKyBcIi9cIiArIHJlbGF0aXZlQW5ub3RhdGlvblBhdGg7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIucHJlc2VudGF0aW9uQW5ub3RhdGlvbiA9IHB2QW5ub3RhdGlvbiA/IHByZXNlbnRhdGlvbkFubm90YXRpb24gOiB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIub3V0UGFyYW1ldGVyID0gb3V0UGFyYW1ldGVyPy5Mb2NhbERhdGFQcm9wZXJ0eT8udmFsdWU7XG5cdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIuaW5QYXJhbWV0ZXJzID0gaW5QYXJhbWV0ZXJzO1xuXHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLnZhbHVlbGlzdFByb3BlcnR5ID0gb3V0UGFyYW1ldGVyPy5WYWx1ZUxpc3RQcm9wZXJ0eSBhcyBzdHJpbmc7XG5cdFx0XHRcdFx0XHRjb25zdCBiSXNSYW5nZSA9IGNoZWNrRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucyhcblx0XHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHRcdFx0XHRcdC5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yKGNvbnZlcnRlckNvbnRleHQuZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aChzUHJvcGVydHlQYXRoKSlcblx0XHRcdFx0XHRcdFx0XHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLFxuXHRcdFx0XHRcdFx0XHRbXCJTaW5nbGVSYW5nZVwiLCBcIk11bHRpUmFuZ2VcIl1cblx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdGlmIChjb21waWxlRXhwcmVzc2lvbihiSXNSYW5nZSkgPT09IFwidHJ1ZVwiKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0XHRcdFx0XHQuZ2V0RGlhZ25vc3RpY3MoKVxuXHRcdFx0XHRcdFx0XHRcdC5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sIElzc3VlU2V2ZXJpdHkuSGlnaCwgSXNzdWVUeXBlLk1BTEZPUk1FRF9WSVNVQUxGSUxURVJTLlZBTFVFTElTVCk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGNvbnN0IGJJc01haW5FbnRpdHlTZXRTaW5nbGVTZWxlY3Rpb24gPSBjaGVja0ZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMoXG5cdFx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0XHRcdFx0XHQuZ2V0Q29udmVydGVyQ29udGV4dEZvcihjb252ZXJ0ZXJDb250ZXh0LmdldEFic29sdXRlQW5ub3RhdGlvblBhdGgoc1Byb3BlcnR5UGF0aCkpXG5cdFx0XHRcdFx0XHRcdFx0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSxcblx0XHRcdFx0XHRcdFx0W1wiU2luZ2xlVmFsdWVcIl1cblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIubXVsdGlwbGVTZWxlY3Rpb25BbGxvd2VkID0gY29tcGlsZUV4cHJlc3Npb24obm90KGJJc01haW5FbnRpdHlTZXRTaW5nbGVTZWxlY3Rpb24pKTtcblx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci5yZXF1aXJlZCA9IGdldElzUmVxdWlyZWQoY29udmVydGVyQ29udGV4dCwgc1Byb3BlcnR5UGF0aCk7XG5cdFx0XHRcdFx0XHRsZXQgc3ZBbm5vdGF0aW9uOiBTZWxlY3Rpb25WYXJpYW50IHwgdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0aWYgKHN2UXVhbGlmaWVyKSB7XG5cdFx0XHRcdFx0XHRcdHN2QW5ub3RhdGlvbiA9IGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dD8uZ2V0RW50aXR5VHlwZUFubm90YXRpb248U2VsZWN0aW9uVmFyaWFudD4oXG5cdFx0XHRcdFx0XHRcdFx0YEBVSS5TZWxlY3Rpb25WYXJpYW50IyR7c3ZRdWFsaWZpZXJ9YFxuXHRcdFx0XHRcdFx0XHQpPy5hbm5vdGF0aW9uO1xuXHRcdFx0XHRcdFx0XHRsZXQgc2VsZWN0aW9uVmFyaWFudEFubm90YXRpb247XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHJlbGF0aXZlU2VsZWN0aW9uVmFyaWFudFBhdGggPSBjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQ/LmdldFJlbGF0aXZlQW5ub3RhdGlvblBhdGgoXG5cdFx0XHRcdFx0XHRcdFx0YCR7c3ZBbm5vdGF0aW9uPy5mdWxseVF1YWxpZmllZE5hbWV9L2AsXG5cdFx0XHRcdFx0XHRcdFx0Y29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRpZiAocGFyYW1ldGVyRW50aXR5VHlwZSkge1xuXHRcdFx0XHRcdFx0XHRcdHNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uID1cblx0XHRcdFx0XHRcdFx0XHRcdGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpICsgXCIvXCIgKyByZWxhdGl2ZVNlbGVjdGlvblZhcmlhbnRQYXRoO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uID0gXCIvXCIgKyBlbnRpdHlTZXROYW1lICsgXCIvXCIgKyByZWxhdGl2ZVNlbGVjdGlvblZhcmlhbnRQYXRoO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci5zZWxlY3Rpb25WYXJpYW50QW5ub3RhdGlvbiA9IHN2QW5ub3RhdGlvbiA/IHNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uIDogdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0bGV0IHJlcXVpcmVkUHJvcGVydGllczogUHJvcGVydHlQYXRoW10gPSBbXTtcblx0XHRcdFx0XHRcdGlmIChwYXJhbWV0ZXJFbnRpdHlUeXBlKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHNFbnRpdHlTZXQgPSBjb2xsZWN0aW9uUGF0aC5zcGxpdChcIi9cIilbMF07XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHNOYXZpZ2F0aW9uUHJvcGVydHkgPSBjb2xsZWN0aW9uUGF0aC5zcGxpdChcIi9cIilbMV07XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG9FbnRpdHlTZXRDb252ZXJ0ZXJDb250ZXh0ID0gY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yKGAvJHtzRW50aXR5U2V0fWApO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBhUmVzdHJpY3RlZFByb3BlcnRpZXMgPVxuXHRcdFx0XHRcdFx0XHRcdG9FbnRpdHlTZXRDb252ZXJ0ZXJDb250ZXh0Py5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkuc3RhcnRpbmdFbnRpdHlTZXQ/LmFubm90YXRpb25zPy5DYXBhYmlsaXRpZXNcblx0XHRcdFx0XHRcdFx0XHRcdD8uTmF2aWdhdGlvblJlc3RyaWN0aW9ucz8uUmVzdHJpY3RlZFByb3BlcnRpZXM7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG9SZXN0cmljdGVkUHJvcGVydHkgPSBhUmVzdHJpY3RlZFByb3BlcnRpZXM/LmZpbmQoXG5cdFx0XHRcdFx0XHRcdFx0KHJlc3RyaWN0ZWROYXZQcm9wOiBOYXZpZ2F0aW9uUHJvcGVydHlSZXN0cmljdGlvblR5cGVzKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAocmVzdHJpY3RlZE5hdlByb3AuTmF2aWdhdGlvblByb3BlcnR5Py50eXBlID09PSBcIk5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhcIikge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzdHJpY3RlZE5hdlByb3AuTmF2aWdhdGlvblByb3BlcnR5LnZhbHVlID09PSBzTmF2aWdhdGlvblByb3BlcnR5O1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0cmVxdWlyZWRQcm9wZXJ0aWVzID0gb1Jlc3RyaWN0ZWRQcm9wZXJ0eT8uRmlsdGVyUmVzdHJpY3Rpb25zPy5SZXF1aXJlZFByb3BlcnRpZXMgPz8gW107XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBlbnRpdHlTZXRPclNpbmdsZXRvbiA9IGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dD8uZ2V0RW50aXR5U2V0KCk7XG5cdFx0XHRcdFx0XHRcdGlmIChpc0VudGl0eVNldChlbnRpdHlTZXRPclNpbmdsZXRvbikpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXF1aXJlZFByb3BlcnRpZXMgPVxuXHRcdFx0XHRcdFx0XHRcdFx0ZW50aXR5U2V0T3JTaW5nbGV0b24uYW5ub3RhdGlvbnMuQ2FwYWJpbGl0aWVzPy5GaWx0ZXJSZXN0cmljdGlvbnM/LlJlcXVpcmVkUHJvcGVydGllcyA/PyBbXTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0bGV0IHJlcXVpcmVkUHJvcGVydHlQYXRoczogc3RyaW5nW10gPSBbXTtcblx0XHRcdFx0XHRcdGlmIChyZXF1aXJlZFByb3BlcnRpZXM/Lmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRyZXF1aXJlZFByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbiAob1JlcXVpcmVQcm9wZXJ0eSkge1xuXHRcdFx0XHRcdFx0XHRcdHJlcXVpcmVkUHJvcGVydHlQYXRocy5wdXNoKG9SZXF1aXJlUHJvcGVydHkudmFsdWUpO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHJlcXVpcmVkUHJvcGVydHlQYXRocyA9IHJlcXVpcmVkUHJvcGVydHlQYXRocy5jb25jYXQoYVBhcmFtZXRlcnMpO1xuXHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLnJlcXVpcmVkUHJvcGVydGllcyA9IHJlcXVpcmVkUHJvcGVydHlQYXRocztcblx0XHRcdFx0XHRcdGlmIChjb252ZXJ0ZXJDb250ZXh0LmdldENvbnRleHRQYXRoKCkgPT09IGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpKSB7XG5cdFx0XHRcdFx0XHRcdC8vIGlmIGNvbnRleHQgUGF0aCBmb3IgYm90aCB2aXN1YWwgZmlsdGVyIGFuZCBmaWx0ZXIgYmFyIGFyZSBzYW1lLCBjb25zaWRlciByZXF1aXJlZCBQcm9wZXJ0aWVzIGFzIHdlbGwgYWxvbmcgd2l0aCBpbiBQYXJhbWV0ZXJzXG5cdFx0XHRcdFx0XHRcdF9hZGRJblBhcmFtZXRlcnMoaW5QYXJhbWV0ZXJzLCByZXF1aXJlZFByb3BlcnRpZXMsIGZhbHNlKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmICh2aXN1YWxGaWx0ZXIucmVxdWlyZWRQcm9wZXJ0aWVzPy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0aWYgKCF2aXN1YWxGaWx0ZXIuaW5QYXJhbWV0ZXJzIHx8ICF2aXN1YWxGaWx0ZXIuaW5QYXJhbWV0ZXJzLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRcdGlmICghdmlzdWFsRmlsdGVyLnNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIuc2hvd092ZXJsYXlJbml0aWFsbHkgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRsZXQgc2VsZWN0T3B0aW9ucyA9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHN2QW5ub3RhdGlvbj8uU2VsZWN0T3B0aW9ucz8ubWFwKChvU2VsZWN0T3B0aW9uKSA9PiBvU2VsZWN0T3B0aW9uLlByb3BlcnR5TmFtZT8udmFsdWUpIHx8IFtdO1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgcGFyYW1ldGVyT3B0aW9ucyA9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHN2QW5ub3RhdGlvbj8uUGFyYW1ldGVycz8ubWFwKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdChvUGFyYW1ldGVyT3B0aW9uKSA9PiAob1BhcmFtZXRlck9wdGlvbiBhcyBQYXJhbWV0ZXJUeXBlcykuUHJvcGVydHlOYW1lPy52YWx1ZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpIHx8IFtdO1xuXHRcdFx0XHRcdFx0XHRcdFx0c2VsZWN0T3B0aW9ucyA9IHNlbGVjdE9wdGlvbnMuY29uY2F0KHBhcmFtZXRlck9wdGlvbnMpO1xuXHRcdFx0XHRcdFx0XHRcdFx0cmVxdWlyZWRQcm9wZXJ0eVBhdGhzID0gcmVxdWlyZWRQcm9wZXJ0eVBhdGhzLnNvcnQoKTtcblx0XHRcdFx0XHRcdFx0XHRcdHNlbGVjdE9wdGlvbnMgPSBzZWxlY3RPcHRpb25zLnNvcnQoKTtcblx0XHRcdFx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci5zaG93T3ZlcmxheUluaXRpYWxseSA9IHJlcXVpcmVkUHJvcGVydHlQYXRocy5zb21lKGZ1bmN0aW9uIChzUGF0aCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gIXNlbGVjdE9wdGlvbnMuaW5jbHVkZXMoc1BhdGgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci5zaG93T3ZlcmxheUluaXRpYWxseSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIuc2hvd092ZXJsYXlJbml0aWFsbHkgPSBmYWxzZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGNvbnN0IHNEaW1lbnNpb25UeXBlID0gY2hhcnRBbm5vdGF0aW9uPy4kdGFyZ2V0Py5EaW1lbnNpb25zWzBdPy4kdGFyZ2V0Py50eXBlO1xuXHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLnJlbmRlckxpbmVDaGFydCA9XG5cdFx0XHRcdFx0XHRcdHNEaW1lbnNpb25UeXBlID09PSBcIkVkbS5EYXRlVGltZU9mZnNldFwiIHx8XG5cdFx0XHRcdFx0XHRcdHNEaW1lbnNpb25UeXBlID09PSBcIkVkbS5EYXRlXCIgfHxcblx0XHRcdFx0XHRcdFx0c0RpbWVuc2lvblR5cGUgPT09IFwiRWRtLlRpbWVPZkRheVwiIHx8XG5cdFx0XHRcdFx0XHRcdGNoYXJ0QW5ub3RhdGlvbi4kdGFyZ2V0Py5DaGFydFR5cGUgIT09IFwiVUkuQ2hhcnRUeXBlL0xpbmVcIjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHRcdFx0LmdldERpYWdub3N0aWNzKClcblx0XHRcdFx0XHRcdC5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sIElzc3VlU2V2ZXJpdHkuSGlnaCwgSXNzdWVUeXBlLk1BTEZPUk1FRF9WSVNVQUxGSUxURVJTLkNIQVJUKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0XHQuZ2V0RGlhZ25vc3RpY3MoKVxuXHRcdFx0XHRcdC5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sIElzc3VlU2V2ZXJpdHkuSGlnaCwgSXNzdWVUeXBlLk1BTEZPUk1FRF9WSVNVQUxGSUxURVJTLlBSRVNFTlRBVElPTlZBUklBTlQpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdC5nZXREaWFnbm9zdGljcygpXG5cdFx0XHRcdC5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sIElzc3VlU2V2ZXJpdHkuSGlnaCwgSXNzdWVUeXBlLk1BTEZPUk1FRF9WSVNVQUxGSUxURVJTLlZBTFVFTElTVCk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RGlhZ25vc3RpY3MoKS5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5Lk1hbmlmZXN0LCBJc3N1ZVNldmVyaXR5LkhpZ2gsIElzc3VlVHlwZS5NQUxGT1JNRURfVklTVUFMRklMVEVSUy5WQUxVRUxJU1QpO1xuXHR9XG5cdHJldHVybiB2aXN1YWxGaWx0ZXI7XG59XG5cbi8qKlxuICogTWV0aG9kIHRvIGFkZCBpbnBhcmFtZXRlcnMgZnJvbSByZXF1aXJlZCBwcm9wZXJ0aWVzIGFuZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIGluUGFyYW1zIEFuIGFycmF5IGNvbnRhaW5pbmcgZXhpc3RpbmcgaW5wYXJhbXNcbiAqIEBwYXJhbSBwcm9wZXJ0aWVzIEFuIGFycmF5IGNvbnRhaW5pbmcgZWl0aGVyIHJlcXVpcmVkcHJvcGVydGllcyBvciBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gaXNQYXJhbSBBIGJvb2xlYW4gZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgcGFzc2VkIHByb3BlcnRpZXMgYXJlIHBhcmFtZXRlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIF9hZGRJblBhcmFtZXRlcnMoaW5QYXJhbXM6IFBhcmFtZXRlclR5cGVbXSwgcHJvcGVydGllczogUHJvcGVydHlQYXRoW10gfCBzdHJpbmdbXSwgaXNQYXJhbTogYm9vbGVhbik6IHZvaWQge1xuXHRwcm9wZXJ0aWVzLmZvckVhY2goZnVuY3Rpb24gKGVsZW1lbnQpIHtcblx0XHRjb25zdCBwcm9wZXJ0eSA9IGlzUGFyYW0gPyBlbGVtZW50IDogKGVsZW1lbnQgYXMgUHJvcGVydHlQYXRoKS52YWx1ZTtcblx0XHRpblBhcmFtcy5wdXNoKHtcblx0XHRcdGxvY2FsRGF0YVByb3BlcnR5OiBwcm9wZXJ0eSBhcyBzdHJpbmcsXG5cdFx0XHR2YWx1ZUxpc3RQcm9wZXJ0eTogcHJvcGVydHkgYXMgc3RyaW5nXG5cdFx0fSk7XG5cdH0pO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7RUEyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxNQUFNQSxtQkFBbUIsR0FBRyxTQUFBQSxDQUMzQkMsZ0JBQXlELEVBQ3pEQyxlQUFzQyxFQUN0Q0MsaUJBQW9DLEVBQ2Q7SUFBQSxJ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
@@ -43,7 +43,6 @@ export type VisualFilters = {
43
43
 
44
44
  /**
45
45
  * Checks that measures and dimensions of the visual filter chart can be aggregated and grouped.
46
- *
47
46
  * @param converterContext The converter context
48
47
  * @param chartAnnotation The chart annotation
49
48
  * @param aggregationHelper The aggregation helper
@@ -120,7 +119,6 @@ export type ParameterType = {
120
119
 
121
120
  /**
122
121
  * Method to get the visual filters object for a property.
123
- *
124
122
  * @param entityType The converter context
125
123
  * @param converterContext The chart annotation
126
124
  * @param sPropertyPath The aggregation helper
@@ -397,7 +395,6 @@ export function getVisualFilters(
397
395
 
398
396
  /**
399
397
  * Method to add inparameters from required properties and parameters.
400
- *
401
398
  * @param inParams An array containing existing inparams
402
399
  * @param properties An array containing either requiredproperties or parameters
403
400
  * @param isParam A boolean flag indicating whether passed properties are parameters
@@ -60,4 +60,4 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/m/AvatarShape"], function (Bin
60
60
  _exports.getAvatar = getAvatar;
61
61
  return _exports;
62
62
  }, false);
63
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpc05hdHVyYWxQZXJzb25FeHByZXNzaW9uIiwiY29udmVydGVyQ29udGV4dCIsImdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiIsImdldEVudGl0eVR5cGUiLCJhbm5vdGF0aW9ucyIsIkNvbW1vbiIsIklzTmF0dXJhbFBlcnNvbiIsImNvbXBpbGVBdmF0YXJTaGFwZSIsImV4cHJlc3Npb24iLCJjb21waWxlRXhwcmVzc2lvbiIsImlmRWxzZSIsIkF2YXRhclNoYXBlIiwiQ2lyY2xlIiwiU3F1YXJlIiwiY29tcGlsZUZhbGxCYWNrSWNvbiIsImdldEZhbGxCYWNrSWNvbiIsImhlYWRlckluZm8iLCJVSSIsIkhlYWRlckluZm8iLCJJbWFnZVVybCIsIlR5cGVJbWFnZVVybCIsInVuZGVmaW5lZCIsImdldFNvdXJjZSIsImdldEF2YXRhciIsIm9Tb3VyY2UiLCJJbml0aWFscyIsInNyYyIsImluaXRpYWxzIiwiZmFsbGJhY2tJY29uIiwiZGlzcGxheVNoYXBlIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJBdmF0YXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiwgRXhwcmVzc2lvbk9yUHJpbWl0aXZlIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgeyBjb21waWxlRXhwcmVzc2lvbiwgZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uLCBpZkVsc2UgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB0eXBlIHsgUGFnZUNvbnRleHRQYXRoVGFyZ2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvVGVtcGxhdGVDb252ZXJ0ZXJcIjtcbmltcG9ydCBBdmF0YXJTaGFwZSBmcm9tIFwic2FwL20vQXZhdGFyU2hhcGVcIjtcbmltcG9ydCB0eXBlIENvbnZlcnRlckNvbnRleHQgZnJvbSBcIi4uLy4uL0NvbnZlcnRlckNvbnRleHRcIjtcblxuZXhwb3J0IHR5cGUgQXZhdGFyID0ge1xuXHRzcmM/OiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0aW5pdGlhbHM6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRmYWxsYmFja0ljb24/OiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0ZGlzcGxheVNoYXBlOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcbn07XG5cbmNvbnN0IGlzTmF0dXJhbFBlcnNvbkV4cHJlc3Npb24gPSAoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+KTogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPGJvb2xlYW4+ID0+IHtcblx0cmV0dXJuIGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKS5hbm5vdGF0aW9ucy5Db21tb24/LklzTmF0dXJhbFBlcnNvbik7XG59O1xuXG5jb25zdCBjb21waWxlQXZhdGFyU2hhcGUgPSAoZXhwcmVzc2lvbjogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPGJvb2xlYW4+KTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gPT4ge1xuXHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oaWZFbHNlKGV4cHJlc3Npb24sIEF2YXRhclNoYXBlLkNpcmNsZSwgQXZhdGFyU2hhcGUuU3F1YXJlKSk7XG59O1xuXG4vLyBUaGUgc2hhcGUgb2YgdGhlIEF2YXRhciBkZXBlbmRzIHVwb24gd2hldGhlciB0aGUgZW50aXR5IGluc3RhbmNlIHJlcHJlc2VudHMgYSBuYXR1cmFsIHBlcnNvbi5cbi8vIFRoaXMgY2FuIGRlcGVuZCB1cG9uIGEgcHJvcGVydHkgaW4gdGhlIGVudGl0eS4gVW5saWtlIHRoZSBzaGFwZSBvZiBhbiBhdmF0YXIgZGVmaW5lZCBpbiBhIGZpZWxkLCBpdFxuLy8gZG9lc24ndCBtYWtlIHNlbnNlIHRvIG1ha2UgdGhlIGltYWdlIGF0IHRoZSBvYmplY3QgcGFnZSBoZWFkZXIgZGVwZW5kZW50IHVwb24gdGhlIHByb3BlcnR5IGNvbnRhaW5nXG4vLyB0aGUgaW1hZ2Ugb3IgaW1hZ2VVUkwuXG5jb25zdCBjb21waWxlRmFsbEJhY2tJY29uID0gKGV4cHJlc3Npb246IEV4cHJlc3Npb25PclByaW1pdGl2ZTxib29sZWFuPik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uID0+IHtcblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGlmRWxzZShleHByZXNzaW9uLCBcInNhcC1pY29uOi8vcGVyc29uLXBsYWNlaG9sZGVyXCIsIFwic2FwLWljb246Ly9wcm9kdWN0XCIpKTtcbn07XG5cbmNvbnN0IGdldEZhbGxCYWNrSWNvbiA9IChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB8IHVuZGVmaW5lZCA9PiB7XG5cdGNvbnN0IGhlYWRlckluZm8gPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKS5hbm5vdGF0aW9ucz8uVUk/LkhlYWRlckluZm87XG5cdGlmICghaGVhZGVySW5mbyB8fCAoaGVhZGVySW5mbyAmJiAhaGVhZGVySW5mby5JbWFnZVVybCAmJiAhaGVhZGVySW5mby5UeXBlSW1hZ2VVcmwpKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXHRpZiAoaGVhZGVySW5mby5JbWFnZVVybCAmJiBoZWFkZXJJbmZvLlR5cGVJbWFnZVVybCkge1xuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oaGVhZGVySW5mby5UeXBlSW1hZ2VVcmwpKTtcblx0fVxuXHRyZXR1cm4gY29tcGlsZUZhbGxCYWNrSWNvbihpc05hdHVyYWxQZXJzb25FeHByZXNzaW9uKGNvbnZlcnRlckNvbnRleHQpKTtcbn07XG5cbmNvbnN0IGdldFNvdXJjZSA9IChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB8IHVuZGVmaW5lZCA9PiB7XG5cdGNvbnN0IGhlYWRlckluZm8gPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKS5hbm5vdGF0aW9ucz8uVUk/LkhlYWRlckluZm87XG5cdGlmICghaGVhZGVySW5mbyB8fCAhKGhlYWRlckluZm8uSW1hZ2VVcmwgfHwgaGVhZGVySW5mby5UeXBlSW1hZ2VVcmwpKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGhlYWRlckluZm8uSW1hZ2VVcmwgfHwgaGVhZGVySW5mby5UeXBlSW1hZ2VVcmwpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRBdmF0YXIgPSAoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+KTogQXZhdGFyIHwgdW5kZWZpbmVkID0+IHtcblx0Y29uc3QgaGVhZGVySW5mbyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLmFubm90YXRpb25zPy5VST8uSGVhZGVySW5mbztcblx0Y29uc3Qgb1NvdXJjZSA9IGhlYWRlckluZm8gJiYgKGhlYWRlckluZm8uSW1hZ2VVcmwgfHwgaGVhZGVySW5mby5UeXBlSW1hZ2VVcmwgfHwgaGVhZGVySW5mby5Jbml0aWFscyk7XG5cdGlmICghb1NvdXJjZSkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0cmV0dXJuIHtcblx0XHRzcmM6IGdldFNvdXJjZShjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRpbml0aWFsczogY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGhlYWRlckluZm8/LkluaXRpYWxzLCBbXSwgXCJcIikpLFxuXHRcdGZhbGxiYWNrSWNvbjogZ2V0RmFsbEJhY2tJY29uKGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdGRpc3BsYXlTaGFwZTogY29tcGlsZUF2YXRhclNoYXBlKGlzTmF0dXJhbFBlcnNvbkV4cHJlc3Npb24oY29udmVydGVyQ29udGV4dCkpXG5cdH07XG59O1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7OztFQWFBLE1BQU1BLHlCQUF5QixHQUFJQyxnQkFBeUQsSUFBcUM7SUFBQTtJQUNoSSxPQUFPQywyQkFBMkIsMEJBQUNELGdCQUFnQixDQUFDRSxhQUFhLEVBQUUsQ0FBQ0MsV0FBVyxDQUFDQyxNQUFNLDBEQUFuRCxzQkFBcURDLGVBQWUsQ0FBQztFQUN6RyxDQUFDO0VBRUQsTUFBTUMsa0JBQWtCLEdBQUlDLFVBQTBDLElBQXVDO0lBQzVHLE9BQU9DLGlCQUFpQixDQUFDQyxNQUFNLENBQUNGLFVBQVUsRUFBRUcsV0FBVyxDQUFDQyxNQUFNLEVBQUVELFdBQVcsQ0FBQ0UsTUFBTSxDQUFDLENBQUM7RUFDckYsQ0FBQzs7RUFFRDtFQUNBO0VBQ0E7RUFDQTtFQUNBLE1BQU1DLG1CQUFtQixHQUFJTixVQUEwQyxJQUF1QztJQUM3RyxPQUFPQyxpQkFBaUIsQ0FBQ0MsTUFBTSxDQUFDRixVQUFVLEVBQUUsK0JBQStCLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztFQUNwRyxDQUFDO0VBRUQsTUFBTU8sZUFBZSxHQUFJZCxnQkFBeUQsSUFBbUQ7SUFBQTtJQUNwSSxNQUFNZSxVQUFVLDZCQUFHZixnQkFBZ0IsQ0FBQ0UsYUFBYSxFQUFFLENBQUNDLFdBQVcscUZBQTVDLHVCQUE4Q2EsRUFBRSwyREFBaEQsdUJBQWtEQyxVQUFVO0lBQy9FLElBQUksQ0FBQ0YsVUFBVSxJQUFLQSxVQUFVLElBQUksQ0FBQ0EsVUFBVSxDQUFDRyxRQUFRLElBQUksQ0FBQ0gsVUFBVSxDQUFDSSxZQUFhLEVBQUU7TUFDcEYsT0FBT0MsU0FBUztJQUNqQjtJQUNBLElBQUlMLFVBQVUsQ0FBQ0csUUFBUSxJQUFJSCxVQUFVLENBQUNJLFlBQVksRUFBRTtNQUNuRCxPQUFPWCxpQkFBaUIsQ0FBQ1AsMkJBQTJCLENBQUNjLFVBQVUsQ0FBQ0ksWUFBWSxDQUFDLENBQUM7SUFDL0U7SUFDQSxPQUFPTixtQkFBbUIsQ0FBQ2QseUJBQXlCLENBQUNDLGdCQUFnQixDQUFDLENBQUM7RUFDeEUsQ0FBQztFQUVELE1BQU1xQixTQUFTLEdBQUlyQixnQkFBeUQsSUFBbUQ7SUFBQTtJQUM5SCxNQUFNZSxVQUFVLDZCQUFHZixnQkFBZ0IsQ0FBQ0UsYUFBYSxFQUFFLENBQUNDLFdBQVcscUZBQTVDLHVCQUE4Q2EsRUFBRSwyREFBaEQsdUJBQWtEQyxVQUFVO0lBQy9FLElBQUksQ0FBQ0YsVUFBVSxJQUFJLEVBQUVBLFVBQVUsQ0FBQ0csUUFBUSxJQUFJSCxVQUFVLENBQUNJLFlBQVksQ0FBQyxFQUFFO01BQ3JFLE9BQU9DLFNBQVM7SUFDakI7SUFDQSxPQUFPWixpQkFBaUIsQ0FBQ1AsMkJBQTJCLENBQUNjLFVBQVUsQ0FBQ0csUUFBUSxJQUFJSCxVQUFVLENBQUNJLFlBQVksQ0FBQyxDQUFDO0VBQ3RHLENBQUM7RUFFTSxNQUFNRyxTQUFTLEdBQUl0QixnQkFBeUQsSUFBeUI7SUFBQTtJQUMzRyxNQUFNZSxVQUFVLDZCQUFHZixnQkFBZ0IsQ0FBQ0UsYUFBYSxFQUFFLENBQUNDLFdBQVcscUZBQTVDLHVCQUE4Q2EsRUFBRSwyREFBaEQsdUJBQWtEQyxVQUFVO0lBQy9FLE1BQU1NLE9BQU8sR0FBR1IsVUFBVSxLQUFLQSxVQUFVLENBQUNHLFFBQVEsSUFBSUgsVUFBVSxDQUFDSSxZQUFZLElBQUlKLFVBQVUsQ0FBQ1MsUUFBUSxDQUFDO0lBQ3JHLElBQUksQ0FBQ0QsT0FBTyxFQUFFO01BQ2IsT0FBT0gsU0FBUztJQUNqQjtJQUNBLE9BQU87TUFDTkssR0FBRyxFQUFFSixTQUFTLENBQUNyQixnQkFBZ0IsQ0FBQztNQUNoQzBCLFFBQVEsRUFBRWxCLGlCQUFpQixDQUFDUCwyQkFBMkIsQ0FBQ2MsVUFBVSxhQUFWQSxVQUFVLHVCQUFWQSxVQUFVLENBQUVTLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7TUFDdEZHLFlBQVksRUFBRWIsZUFBZSxDQUFDZCxnQkFBZ0IsQ0FBQztNQUMvQzRCLFlBQVksRUFBRXRCLGtCQUFrQixDQUFDUCx5QkFBeUIsQ0FBQ0MsZ0JBQWdCLENBQUM7SUFDN0UsQ0FBQztFQUNGLENBQUM7RUFBQztFQUFBO0FBQUEifQ==
63
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpc05hdHVyYWxQZXJzb25FeHByZXNzaW9uIiwiY29udmVydGVyQ29udGV4dCIsIl9jb252ZXJ0ZXJDb250ZXh0JGdldCIsImdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiIsImdldEVudGl0eVR5cGUiLCJhbm5vdGF0aW9ucyIsIkNvbW1vbiIsIklzTmF0dXJhbFBlcnNvbiIsImNvbXBpbGVBdmF0YXJTaGFwZSIsImV4cHJlc3Npb24iLCJjb21waWxlRXhwcmVzc2lvbiIsImlmRWxzZSIsIkF2YXRhclNoYXBlIiwiQ2lyY2xlIiwiU3F1YXJlIiwiY29tcGlsZUZhbGxCYWNrSWNvbiIsImdldEZhbGxCYWNrSWNvbiIsIl9jb252ZXJ0ZXJDb250ZXh0JGdldDIiLCJfY29udmVydGVyQ29udGV4dCRnZXQzIiwiaGVhZGVySW5mbyIsIlVJIiwiSGVhZGVySW5mbyIsIkltYWdlVXJsIiwiVHlwZUltYWdlVXJsIiwidW5kZWZpbmVkIiwiZ2V0U291cmNlIiwiX2NvbnZlcnRlckNvbnRleHQkZ2V0NCIsIl9jb252ZXJ0ZXJDb250ZXh0JGdldDUiLCJnZXRBdmF0YXIiLCJfY29udmVydGVyQ29udGV4dCRnZXQ2IiwiX2NvbnZlcnRlckNvbnRleHQkZ2V0NyIsIm9Tb3VyY2UiLCJJbml0aWFscyIsInNyYyIsImluaXRpYWxzIiwiZmFsbGJhY2tJY29uIiwiZGlzcGxheVNoYXBlIiwiX2V4cG9ydHMiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkF2YXRhci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLCBFeHByZXNzaW9uT3JQcmltaXRpdmUgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGNvbXBpbGVFeHByZXNzaW9uLCBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24sIGlmRWxzZSB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBQYWdlQ29udGV4dFBhdGhUYXJnZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuaW1wb3J0IEF2YXRhclNoYXBlIGZyb20gXCJzYXAvbS9BdmF0YXJTaGFwZVwiO1xuaW1wb3J0IHR5cGUgQ29udmVydGVyQ29udGV4dCBmcm9tIFwiLi4vLi4vQ29udmVydGVyQ29udGV4dFwiO1xuXG5leHBvcnQgdHlwZSBBdmF0YXIgPSB7XG5cdHNyYz86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRpbml0aWFsczogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdGZhbGxiYWNrSWNvbj86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRkaXNwbGF5U2hhcGU6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xufTtcblxuY29uc3QgaXNOYXR1cmFsUGVyc29uRXhwcmVzc2lvbiA9IChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8Ym9vbGVhbj4gPT4ge1xuXHRyZXR1cm4gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLmFubm90YXRpb25zLkNvbW1vbj8uSXNOYXR1cmFsUGVyc29uKTtcbn07XG5cbmNvbnN0IGNvbXBpbGVBdmF0YXJTaGFwZSA9IChleHByZXNzaW9uOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8Ym9vbGVhbj4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiA9PiB7XG5cdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihpZkVsc2UoZXhwcmVzc2lvbiwgQXZhdGFyU2hhcGUuQ2lyY2xlLCBBdmF0YXJTaGFwZS5TcXVhcmUpKTtcbn07XG5cbi8vIFRoZSBzaGFwZSBvZiB0aGUgQXZhdGFyIGRlcGVuZHMgdXBvbiB3aGV0aGVyIHRoZSBlbnRpdHkgaW5zdGFuY2UgcmVwcmVzZW50cyBhIG5hdHVyYWwgcGVyc29uLlxuLy8gVGhpcyBjYW4gZGVwZW5kIHVwb24gYSBwcm9wZXJ0eSBpbiB0aGUgZW50aXR5LiBVbmxpa2UgdGhlIHNoYXBlIG9mIGFuIGF2YXRhciBkZWZpbmVkIGluIGEgZmllbGQsIGl0XG4vLyBkb2Vzbid0IG1ha2Ugc2Vuc2UgdG8gbWFrZSB0aGUgaW1hZ2UgYXQgdGhlIG9iamVjdCBwYWdlIGhlYWRlciBkZXBlbmRlbnQgdXBvbiB0aGUgcHJvcGVydHkgY29udGFpbmdcbi8vIHRoZSBpbWFnZSBvciBpbWFnZVVSTC5cbmNvbnN0IGNvbXBpbGVGYWxsQmFja0ljb24gPSAoZXhwcmVzc2lvbjogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPGJvb2xlYW4+KTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gPT4ge1xuXHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oaWZFbHNlKGV4cHJlc3Npb24sIFwic2FwLWljb246Ly9wZXJzb24tcGxhY2Vob2xkZXJcIiwgXCJzYXAtaWNvbjovL3Byb2R1Y3RcIikpO1xufTtcblxuY29uc3QgZ2V0RmFsbEJhY2tJY29uID0gKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHwgdW5kZWZpbmVkID0+IHtcblx0Y29uc3QgaGVhZGVySW5mbyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLmFubm90YXRpb25zPy5VST8uSGVhZGVySW5mbztcblx0aWYgKCFoZWFkZXJJbmZvIHx8IChoZWFkZXJJbmZvICYmICFoZWFkZXJJbmZvLkltYWdlVXJsICYmICFoZWFkZXJJbmZvLlR5cGVJbWFnZVVybCkpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdGlmIChoZWFkZXJJbmZvLkltYWdlVXJsICYmIGhlYWRlckluZm8uVHlwZUltYWdlVXJsKSB7XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihoZWFkZXJJbmZvLlR5cGVJbWFnZVVybCkpO1xuXHR9XG5cdHJldHVybiBjb21waWxlRmFsbEJhY2tJY29uKGlzTmF0dXJhbFBlcnNvbkV4cHJlc3Npb24oY29udmVydGVyQ29udGV4dCkpO1xufTtcblxuY29uc3QgZ2V0U291cmNlID0gKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHwgdW5kZWZpbmVkID0+IHtcblx0Y29uc3QgaGVhZGVySW5mbyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLmFubm90YXRpb25zPy5VST8uSGVhZGVySW5mbztcblx0aWYgKCFoZWFkZXJJbmZvIHx8ICEoaGVhZGVySW5mby5JbWFnZVVybCB8fCBoZWFkZXJJbmZvLlR5cGVJbWFnZVVybCkpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oaGVhZGVySW5mby5JbWFnZVVybCB8fCBoZWFkZXJJbmZvLlR5cGVJbWFnZVVybCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEF2YXRhciA9IChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiBBdmF0YXIgfCB1bmRlZmluZWQgPT4ge1xuXHRjb25zdCBoZWFkZXJJbmZvID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCkuYW5ub3RhdGlvbnM/LlVJPy5IZWFkZXJJbmZvO1xuXHRjb25zdCBvU291cmNlID0gaGVhZGVySW5mbyAmJiAoaGVhZGVySW5mby5JbWFnZVVybCB8fCBoZWFkZXJJbmZvLlR5cGVJbWFnZVVybCB8fCBoZWFkZXJJbmZvLkluaXRpYWxzKTtcblx0aWYgKCFvU291cmNlKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXHRyZXR1cm4ge1xuXHRcdHNyYzogZ2V0U291cmNlKGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdGluaXRpYWxzOiBjb21waWxlRXhwcmVzc2lvbihnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oaGVhZGVySW5mbz8uSW5pdGlhbHMsIFtdLCBcIlwiKSksXG5cdFx0ZmFsbGJhY2tJY29uOiBnZXRGYWxsQmFja0ljb24oY29udmVydGVyQ29udGV4dCksXG5cdFx0ZGlzcGxheVNoYXBlOiBjb21waWxlQXZhdGFyU2hhcGUoaXNOYXR1cmFsUGVyc29uRXhwcmVzc2lvbihjb252ZXJ0ZXJDb250ZXh0KSlcblx0fTtcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0VBYUEsTUFBTUEseUJBQXlCLEdBQUlDLGdCQUF5RCxJQUFxQztJQUFBLElBQUFDLHFCQUFBO0lBQ2hJLE9BQU9DLDJCQUEyQixFQUFBRCxxQkFBQSxHQUFDRCxnQkFBZ0IsQ0FBQ0csYUFBYSxDQUFDLENBQUMsQ0FBQ0MsV0FBVyxDQUFDQyxNQUFNLGNBQUFKLHFCQUFBLHVCQUFuREEscUJBQUEsQ0FBcURLLGVBQWUsQ0FBQztFQUN6RyxDQUFDO0VBRUQsTUFBTUMsa0JBQWtCLEdBQUlDLFVBQTBDLElBQXVDO0lBQzVHLE9BQU9DLGlCQUFpQixDQUFDQyxNQUFNLENBQUNGLFVBQVUsRUFBRUcsV0FBVyxDQUFDQyxNQUFNLEVBQUVELFdBQVcsQ0FBQ0UsTUFBTSxDQUFDLENBQUM7RUFDckYsQ0FBQzs7RUFFRDtFQUNBO0VBQ0E7RUFDQTtFQUNBLE1BQU1DLG1CQUFtQixHQUFJTixVQUEwQyxJQUF1QztJQUM3RyxPQUFPQyxpQkFBaUIsQ0FBQ0MsTUFBTSxDQUFDRixVQUFVLEVBQUUsK0JBQStCLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztFQUNwRyxDQUFDO0VBRUQsTUFBTU8sZUFBZSxHQUFJZixnQkFBeUQsSUFBbUQ7SUFBQSxJQUFBZ0Isc0JBQUEsRUFBQUMsc0JBQUE7SUFDcEksTUFBTUMsVUFBVSxJQUFBRixzQkFBQSxHQUFHaEIsZ0JBQWdCLENBQUNHLGFBQWEsQ0FBQyxDQUFDLENBQUNDLFdBQVcsY0FBQVksc0JBQUEsd0JBQUFDLHNCQUFBLEdBQTVDRCxzQkFBQSxDQUE4Q0csRUFBRSxjQUFBRixzQkFBQSx1QkFBaERBLHNCQUFBLENBQWtERyxVQUFVO0lBQy9FLElBQUksQ0FBQ0YsVUFBVSxJQUFLQSxVQUFVLElBQUksQ0FBQ0EsVUFBVSxDQUFDRyxRQUFRLElBQUksQ0FBQ0gsVUFBVSxDQUFDSSxZQUFhLEVBQUU7TUFDcEYsT0FBT0MsU0FBUztJQUNqQjtJQUNBLElBQUlMLFVBQVUsQ0FBQ0csUUFBUSxJQUFJSCxVQUFVLENBQUNJLFlBQVksRUFBRTtNQUNuRCxPQUFPYixpQkFBaUIsQ0FBQ1AsMkJBQTJCLENBQUNnQixVQUFVLENBQUNJLFlBQVksQ0FBQyxDQUFDO0lBQy9FO0lBQ0EsT0FBT1IsbUJBQW1CLENBQUNmLHlCQUF5QixDQUFDQyxnQkFBZ0IsQ0FBQyxDQUFDO0VBQ3hFLENBQUM7RUFFRCxNQUFNd0IsU0FBUyxHQUFJeEIsZ0JBQXlELElBQW1EO0lBQUEsSUFBQXlCLHNCQUFBLEVBQUFDLHNCQUFBO0lBQzlILE1BQU1SLFVBQVUsSUFBQU8sc0JBQUEsR0FBR3pCLGdCQUFnQixDQUFDRyxhQUFhLENBQUMsQ0FBQyxDQUFDQyxXQUFXLGNBQUFxQixzQkFBQSx3QkFBQUMsc0JBQUEsR0FBNUNELHNCQUFBLENBQThDTixFQUFFLGNBQUFPLHNCQUFBLHVCQUFoREEsc0JBQUEsQ0FBa0ROLFVBQVU7SUFDL0UsSUFBSSxDQUFDRixVQUFVLElBQUksRUFBRUEsVUFBVSxDQUFDRyxRQUFRLElBQUlILFVBQVUsQ0FBQ0ksWUFBWSxDQUFDLEVBQUU7TUFDckUsT0FBT0MsU0FBUztJQUNqQjtJQUNBLE9BQU9kLGlCQUFpQixDQUFDUCwyQkFBMkIsQ0FBQ2dCLFVBQVUsQ0FBQ0csUUFBUSxJQUFJSCxVQUFVLENBQUNJLFlBQVksQ0FBQyxDQUFDO0VBQ3RHLENBQUM7RUFFTSxNQUFNSyxTQUFTLEdBQUkzQixnQkFBeUQsSUFBeUI7SUFBQSxJQUFBNEIsc0JBQUEsRUFBQUMsc0JBQUE7SUFDM0csTUFBTVgsVUFBVSxJQUFBVSxzQkFBQSxHQUFHNUIsZ0JBQWdCLENBQUNHLGFBQWEsQ0FBQyxDQUFDLENBQUNDLFdBQVcsY0FBQXdCLHNCQUFBLHdCQUFBQyxzQkFBQSxHQUE1Q0Qsc0JBQUEsQ0FBOENULEVBQUUsY0FBQVUsc0JBQUEsdUJBQWhEQSxzQkFBQSxDQUFrRFQsVUFBVTtJQUMvRSxNQUFNVSxPQUFPLEdBQUdaLFVBQVUsS0FBS0EsVUFBVSxDQUFDRyxRQUFRLElBQUlILFVBQVUsQ0FBQ0ksWUFBWSxJQUFJSixVQUFVLENBQUNhLFFBQVEsQ0FBQztJQUNyRyxJQUFJLENBQUNELE9BQU8sRUFBRTtNQUNiLE9BQU9QLFNBQVM7SUFDakI7SUFDQSxPQUFPO01BQ05TLEdBQUcsRUFBRVIsU0FBUyxDQUFDeEIsZ0JBQWdCLENBQUM7TUFDaENpQyxRQUFRLEVBQUV4QixpQkFBaUIsQ0FBQ1AsMkJBQTJCLENBQUNnQixVQUFVLGFBQVZBLFVBQVUsdUJBQVZBLFVBQVUsQ0FBRWEsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztNQUN0RkcsWUFBWSxFQUFFbkIsZUFBZSxDQUFDZixnQkFBZ0IsQ0FBQztNQUMvQ21DLFlBQVksRUFBRTVCLGtCQUFrQixDQUFDUix5QkFBeUIsQ0FBQ0MsZ0JBQWdCLENBQUM7SUFDN0UsQ0FBQztFQUNGLENBQUM7RUFBQ29DLFFBQUEsQ0FBQVQsU0FBQSxHQUFBQSxTQUFBO0VBQUEsT0FBQVMsUUFBQTtBQUFBIiwiaWdub3JlTGlzdCI6W119