@sapui5/sap.fe.core 1.102.3 → 1.105.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (359) hide show
  1. package/package.json +6 -6
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/ActionRuntime.js +120 -0
  4. package/src/sap/fe/core/ActionRuntime.ts +108 -0
  5. package/src/sap/fe/core/AppComponent.js +81 -35
  6. package/src/sap/fe/core/AppComponent.ts +68 -44
  7. package/src/sap/fe/core/AppStateHandler.js +82 -70
  8. package/src/sap/fe/core/AppStateHandler.ts +32 -37
  9. package/src/sap/fe/core/BaseController.js +12 -10
  10. package/src/sap/fe/core/BaseController.ts +15 -13
  11. package/src/sap/fe/core/CommonUtils.js +291 -218
  12. package/src/sap/fe/core/CommonUtils.ts +315 -251
  13. package/src/sap/fe/core/ExtensionAPI.js +25 -28
  14. package/src/sap/fe/core/ExtensionAPI.ts +36 -38
  15. package/src/sap/fe/core/PageController.js +5 -5
  16. package/src/sap/fe/core/PageController.ts +4 -5
  17. package/src/sap/fe/core/TemplateComponent.js +21 -10
  18. package/src/sap/fe/core/TemplateComponent.ts +9 -6
  19. package/src/sap/fe/core/TemplateModel.js +2 -2
  20. package/src/sap/fe/core/TemplateModel.ts +1 -1
  21. package/src/sap/fe/core/buildingBlocks/AttributeModel.js +11 -3
  22. package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +8 -2
  23. package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +197 -43
  24. package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +164 -24
  25. package/src/sap/fe/core/buildingBlocks/BuildingBlockFormatter.js +14 -0
  26. package/src/sap/fe/core/buildingBlocks/BuildingBlockFormatter.ts +5 -0
  27. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +609 -230
  28. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +275 -128
  29. package/src/sap/fe/core/buildingBlocks/TraceInfo.js +30 -30
  30. package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +32 -29
  31. package/src/sap/fe/core/controllerextensions/BusyLocker.js +1 -1
  32. package/src/sap/fe/core/controllerextensions/EditFlow.js +761 -700
  33. package/src/sap/fe/core/controllerextensions/EditFlow.ts +478 -514
  34. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +10 -10
  35. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +10 -10
  36. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +104 -75
  37. package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +71 -79
  38. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +68 -68
  39. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +76 -76
  40. package/src/sap/fe/core/controllerextensions/InternalRouting.js +162 -102
  41. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +177 -121
  42. package/src/sap/fe/core/controllerextensions/KPIManagement.js +67 -69
  43. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +106 -123
  44. package/src/sap/fe/core/controllerextensions/MassEdit.js +10 -10
  45. package/src/sap/fe/core/controllerextensions/MassEdit.ts +20 -27
  46. package/src/sap/fe/core/controllerextensions/MessageHandler.js +21 -13
  47. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +21 -14
  48. package/src/sap/fe/core/controllerextensions/PageReady.js +98 -26
  49. package/src/sap/fe/core/controllerextensions/PageReady.ts +98 -34
  50. package/src/sap/fe/core/controllerextensions/Paginator.js +31 -32
  51. package/src/sap/fe/core/controllerextensions/Paginator.ts +33 -34
  52. package/src/sap/fe/core/controllerextensions/Placeholder.js +5 -7
  53. package/src/sap/fe/core/controllerextensions/Placeholder.ts +12 -14
  54. package/src/sap/fe/core/controllerextensions/Routing.js +11 -12
  55. package/src/sap/fe/core/controllerextensions/Routing.ts +12 -13
  56. package/src/sap/fe/core/controllerextensions/RoutingListener.js +1 -1
  57. package/src/sap/fe/core/controllerextensions/Share.js +171 -140
  58. package/src/sap/fe/core/controllerextensions/Share.ts +117 -118
  59. package/src/sap/fe/core/controllerextensions/SideEffects.js +47 -51
  60. package/src/sap/fe/core/controllerextensions/SideEffects.ts +56 -60
  61. package/src/sap/fe/core/controllerextensions/ViewState.js +201 -132
  62. package/src/sap/fe/core/controllerextensions/ViewState.ts +141 -148
  63. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +5 -5
  64. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +8 -7
  65. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +13 -12
  66. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.ts +17 -20
  67. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +13 -12
  68. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +15 -15
  69. package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +57 -18
  70. package/src/sap/fe/core/controllerextensions/collaboration/Manage.ts +60 -28
  71. package/src/sap/fe/core/controllerextensions/collaboration/ManageDialog.fragment.xml +29 -21
  72. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +1424 -940
  73. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +799 -836
  74. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +410 -377
  75. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +275 -358
  76. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +309 -0
  77. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +320 -0
  78. package/src/sap/fe/core/controllerextensions/editFlow/operations.js +752 -579
  79. package/src/sap/fe/core/controllerextensions/editFlow/operations.ts +631 -599
  80. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +92 -74
  81. package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +49 -52
  82. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +78 -41
  83. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +110 -84
  84. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +69 -81
  85. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +64 -73
  86. package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +18 -2
  87. package/src/sap/fe/core/controls/ActionParameterDialogFieldValueHelp.fragment.xml +35 -0
  88. package/src/sap/fe/core/controls/ActionParameterDialogValueHelp.fragment.xml +25 -24
  89. package/src/sap/fe/core/controls/Any.js +9 -5
  90. package/src/sap/fe/core/controls/Any.ts +10 -4
  91. package/src/sap/fe/core/controls/CommandExecution.js +12 -26
  92. package/src/sap/fe/core/controls/CommandExecution.ts +11 -25
  93. package/src/sap/fe/core/controls/ConditionalWrapper.js +3 -3
  94. package/src/sap/fe/core/controls/ConditionalWrapper.ts +3 -3
  95. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +26 -26
  96. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +25 -24
  97. package/src/sap/fe/core/controls/CustomQuickViewPage.js +3 -3
  98. package/src/sap/fe/core/controls/CustomQuickViewPage.ts +2 -2
  99. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +3 -3
  100. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +5 -5
  101. package/src/sap/fe/core/controls/FieldWrapper.js +3 -3
  102. package/src/sap/fe/core/controls/FieldWrapper.ts +3 -3
  103. package/src/sap/fe/core/controls/FileWrapper.js +9 -4
  104. package/src/sap/fe/core/controls/FileWrapper.ts +16 -12
  105. package/src/sap/fe/core/controls/FilterBar.js +7 -3
  106. package/src/sap/fe/core/controls/FilterBar.ts +13 -9
  107. package/src/sap/fe/core/controls/FormElementWrapper.js +2 -2
  108. package/src/sap/fe/core/controls/FormElementWrapper.ts +2 -2
  109. package/src/sap/fe/core/controls/MassEditSelect.js +1 -1
  110. package/src/sap/fe/core/controls/MassEditSelect.ts +0 -4
  111. package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +1 -1
  112. package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +44 -19
  113. package/src/sap/fe/core/controls/filterbar/FilterContainer.js +2 -2
  114. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +17 -13
  115. package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +20 -22
  116. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +4 -4
  117. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +8 -8
  118. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +49 -49
  119. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +54 -54
  120. package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +8 -2
  121. package/src/sap/fe/core/controls/massEdit/MassEditField.fragment.xml +22 -35
  122. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +89 -88
  123. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +107 -106
  124. package/src/sap/fe/core/converters/ConverterContext.js +48 -34
  125. package/src/sap/fe/core/converters/ConverterContext.ts +81 -67
  126. package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
  127. package/src/sap/fe/core/converters/ManifestSettings.ts +18 -15
  128. package/src/sap/fe/core/converters/ManifestWrapper.js +59 -45
  129. package/src/sap/fe/core/converters/ManifestWrapper.ts +55 -45
  130. package/src/sap/fe/core/converters/MetaModelConverter.js +74 -40
  131. package/src/sap/fe/core/converters/MetaModelConverter.ts +176 -140
  132. package/src/sap/fe/core/converters/TemplateConverter.js +21 -20
  133. package/src/sap/fe/core/converters/TemplateConverter.ts +27 -24
  134. package/src/sap/fe/core/converters/annotations/DataField.js +58 -35
  135. package/src/sap/fe/core/converters/annotations/DataField.ts +102 -76
  136. package/src/sap/fe/core/converters/common/AnnotationConverter.js +1956 -1494
  137. package/src/sap/fe/core/converters/controls/Common/Action.js +78 -51
  138. package/src/sap/fe/core/converters/controls/Common/Action.ts +87 -52
  139. package/src/sap/fe/core/converters/controls/Common/Chart.js +22 -16
  140. package/src/sap/fe/core/converters/controls/Common/Chart.ts +42 -43
  141. package/src/sap/fe/core/converters/controls/Common/Criticality.js +3 -3
  142. package/src/sap/fe/core/converters/controls/Common/Criticality.ts +4 -4
  143. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +65 -29
  144. package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +93 -62
  145. package/src/sap/fe/core/converters/controls/Common/Form.js +31 -31
  146. package/src/sap/fe/core/converters/controls/Common/Form.ts +46 -57
  147. package/src/sap/fe/core/converters/controls/Common/KPI.js +11 -11
  148. package/src/sap/fe/core/converters/controls/Common/KPI.ts +49 -52
  149. package/src/sap/fe/core/converters/controls/Common/Table.js +251 -264
  150. package/src/sap/fe/core/converters/controls/Common/Table.ts +344 -370
  151. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +119 -119
  152. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +147 -144
  153. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +89 -59
  154. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +118 -71
  155. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +28 -26
  156. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +46 -43
  157. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +9 -9
  158. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.ts +14 -13
  159. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +131 -95
  160. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +123 -87
  161. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +98 -87
  162. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +121 -117
  163. package/src/sap/fe/core/converters/helpers/Aggregation.js +2 -4
  164. package/src/sap/fe/core/converters/helpers/Aggregation.ts +12 -15
  165. package/src/sap/fe/core/converters/helpers/BindingHelper.js +31 -31
  166. package/src/sap/fe/core/converters/helpers/BindingHelper.ts +30 -29
  167. package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +8 -6
  168. package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +18 -10
  169. package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +136 -0
  170. package/src/sap/fe/core/converters/helpers/DataFieldHelper.ts +139 -0
  171. package/src/sap/fe/core/converters/helpers/ID.js +48 -46
  172. package/src/sap/fe/core/converters/helpers/ID.ts +26 -25
  173. package/src/sap/fe/core/converters/helpers/IssueManager.js +1 -1
  174. package/src/sap/fe/core/converters/helpers/Key.js +7 -7
  175. package/src/sap/fe/core/converters/helpers/Key.ts +7 -7
  176. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -1
  177. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +4 -5
  178. package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +6 -6
  179. package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +10 -10
  180. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +53 -75
  181. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +59 -90
  182. package/src/sap/fe/core/converters/templates/ListReportConverter.js +58 -57
  183. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +93 -86
  184. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +58 -44
  185. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +87 -80
  186. package/src/sap/fe/core/designtime/AppComponent.designtime.js +4 -4
  187. package/src/sap/fe/core/designtime/AppComponent.designtime.ts +4 -4
  188. package/src/sap/fe/core/formatters/CollaborationFormatter.js +2 -2
  189. package/src/sap/fe/core/formatters/CollaborationFormatter.ts +3 -3
  190. package/src/sap/fe/core/formatters/FPMFormatter.js +5 -5
  191. package/src/sap/fe/core/formatters/FPMFormatter.ts +10 -10
  192. package/src/sap/fe/core/formatters/KPIFormatter.js +7 -7
  193. package/src/sap/fe/core/formatters/KPIFormatter.ts +10 -10
  194. package/src/sap/fe/core/formatters/StandardFormatter.js +96 -0
  195. package/src/sap/fe/core/formatters/StandardFormatter.ts +70 -0
  196. package/src/sap/fe/core/formatters/TableFormatter.js +11 -11
  197. package/src/sap/fe/core/formatters/TableFormatter.ts +12 -12
  198. package/src/sap/fe/core/formatters/TableFormatterTypes.js +1 -1
  199. package/src/sap/fe/core/formatters/ValueFormatter.js +8 -8
  200. package/src/sap/fe/core/formatters/ValueFormatter.ts +9 -9
  201. package/src/sap/fe/core/fpm/Component.js +33 -7
  202. package/src/sap/fe/core/fpm/Component.ts +14 -0
  203. package/src/sap/fe/core/helpers/AnnotationEnum.js +1 -1
  204. package/src/sap/fe/core/helpers/AppStartupHelper.js +19 -18
  205. package/src/sap/fe/core/helpers/AppStartupHelper.ts +41 -43
  206. package/src/sap/fe/core/helpers/BindingToolkit.js +1836 -0
  207. package/src/sap/fe/core/helpers/{BindingExpression.ts → BindingToolkit.ts} +397 -270
  208. package/src/sap/fe/core/helpers/ClassSupport.js +49 -12
  209. package/src/sap/fe/core/helpers/ClassSupport.ts +37 -10
  210. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +2 -2
  211. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +1 -1
  212. package/src/sap/fe/core/helpers/EditState.js +1 -6
  213. package/src/sap/fe/core/helpers/EditState.ts +5 -10
  214. package/src/sap/fe/core/helpers/ExcelFormatHelper.js +2 -2
  215. package/src/sap/fe/core/helpers/ExcelFormatHelper.ts +4 -4
  216. package/src/sap/fe/core/helpers/FPMHelper.js +1 -1
  217. package/src/sap/fe/core/helpers/FPMHelper.ts +2 -2
  218. package/src/sap/fe/core/helpers/KeepAliveHelper.js +31 -31
  219. package/src/sap/fe/core/helpers/KeepAliveHelper.ts +52 -56
  220. package/src/sap/fe/core/helpers/KeepAliveRefreshTypes.js +1 -1
  221. package/src/sap/fe/core/helpers/MassEditHelper.js +306 -280
  222. package/src/sap/fe/core/helpers/MassEditHelper.ts +380 -360
  223. package/src/sap/fe/core/helpers/MessageStrip.js +81 -0
  224. package/src/sap/fe/core/helpers/MessageStrip.ts +79 -0
  225. package/src/sap/fe/core/helpers/ModelHelper.js +25 -25
  226. package/src/sap/fe/core/helpers/ModelHelper.ts +34 -32
  227. package/src/sap/fe/core/helpers/PasteHelper.js +3 -10
  228. package/src/sap/fe/core/helpers/PasteHelper.ts +20 -25
  229. package/src/sap/fe/core/helpers/SemanticDateOperators.js +1 -1
  230. package/src/sap/fe/core/helpers/SemanticDateOperators.ts +11 -11
  231. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +3 -3
  232. package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +8 -8
  233. package/src/sap/fe/core/helpers/StableIdHelper.js +12 -12
  234. package/src/sap/fe/core/helpers/StableIdHelper.ts +12 -12
  235. package/src/sap/fe/core/helpers/Synchronization.js +1 -1
  236. package/src/sap/fe/core/helpers/ToES6Promise.js +32 -0
  237. package/src/sap/fe/core/helpers/ToES6Promise.ts +19 -0
  238. package/src/sap/fe/core/jsx-runtime/Fragment.js +16 -0
  239. package/src/sap/fe/core/jsx-runtime/Fragment.ts +3 -0
  240. package/src/sap/fe/core/jsx-runtime/ViewLoader.js +109 -0
  241. package/src/sap/fe/core/jsx-runtime/ViewLoader.tsx +47 -0
  242. package/src/sap/fe/core/jsx-runtime/jsx-control.js +110 -0
  243. package/src/sap/fe/core/jsx-runtime/jsx-control.ts +92 -0
  244. package/src/sap/fe/core/jsx-runtime/jsx-xml.js +105 -0
  245. package/src/sap/fe/core/jsx-runtime/jsx-xml.ts +89 -0
  246. package/src/sap/fe/core/jsx-runtime/jsx.js +12 -90
  247. package/src/sap/fe/core/jsx-runtime/jsx.ts +24 -85
  248. package/src/sap/fe/core/jsx-runtime/jsxs.js +1 -1
  249. package/src/sap/fe/core/jsx-runtime/useMDXComponents.js +179 -0
  250. package/src/sap/fe/core/jsx-runtime/useMDXComponents.tsx +150 -0
  251. package/src/sap/fe/core/library.js +42 -3
  252. package/src/sap/fe/core/library.support.js +1 -1
  253. package/src/sap/fe/core/library.ts +38 -0
  254. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +3 -3
  255. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +2 -2
  256. package/src/sap/fe/core/messagebundle.properties +39 -67
  257. package/src/sap/fe/core/messagebundle_ar.properties +27 -44
  258. package/src/sap/fe/core/messagebundle_bg.properties +27 -44
  259. package/src/sap/fe/core/messagebundle_ca.properties +27 -44
  260. package/src/sap/fe/core/messagebundle_cs.properties +27 -44
  261. package/src/sap/fe/core/messagebundle_cy.properties +26 -43
  262. package/src/sap/fe/core/messagebundle_da.properties +27 -44
  263. package/src/sap/fe/core/messagebundle_de.properties +25 -42
  264. package/src/sap/fe/core/messagebundle_el.properties +28 -45
  265. package/src/sap/fe/core/messagebundle_en.properties +27 -44
  266. package/src/sap/fe/core/messagebundle_en_GB.properties +27 -44
  267. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +25 -42
  268. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +26 -40
  269. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +25 -42
  270. package/src/sap/fe/core/messagebundle_es.properties +27 -44
  271. package/src/sap/fe/core/messagebundle_es_MX.properties +27 -44
  272. package/src/sap/fe/core/messagebundle_et.properties +27 -44
  273. package/src/sap/fe/core/messagebundle_fi.properties +27 -44
  274. package/src/sap/fe/core/messagebundle_fr.properties +26 -43
  275. package/src/sap/fe/core/messagebundle_fr_CA.properties +25 -42
  276. package/src/sap/fe/core/messagebundle_hi.properties +27 -44
  277. package/src/sap/fe/core/messagebundle_hr.properties +27 -44
  278. package/src/sap/fe/core/messagebundle_hu.properties +27 -44
  279. package/src/sap/fe/core/messagebundle_id.properties +27 -44
  280. package/src/sap/fe/core/messagebundle_it.properties +43 -60
  281. package/src/sap/fe/core/messagebundle_iw.properties +27 -44
  282. package/src/sap/fe/core/messagebundle_ja.properties +27 -44
  283. package/src/sap/fe/core/messagebundle_kk.properties +27 -44
  284. package/src/sap/fe/core/messagebundle_ko.properties +30 -47
  285. package/src/sap/fe/core/messagebundle_lt.properties +27 -44
  286. package/src/sap/fe/core/messagebundle_lv.properties +27 -44
  287. package/src/sap/fe/core/messagebundle_ms.properties +27 -44
  288. package/src/sap/fe/core/messagebundle_nl.properties +29 -46
  289. package/src/sap/fe/core/messagebundle_no.properties +27 -44
  290. package/src/sap/fe/core/messagebundle_pl.properties +28 -45
  291. package/src/sap/fe/core/messagebundle_pt.properties +28 -45
  292. package/src/sap/fe/core/messagebundle_pt_PT.properties +27 -44
  293. package/src/sap/fe/core/messagebundle_ro.properties +27 -44
  294. package/src/sap/fe/core/messagebundle_ru.properties +27 -44
  295. package/src/sap/fe/core/messagebundle_sh.properties +27 -44
  296. package/src/sap/fe/core/messagebundle_sk.properties +27 -44
  297. package/src/sap/fe/core/messagebundle_sl.properties +27 -44
  298. package/src/sap/fe/core/messagebundle_sv.properties +27 -44
  299. package/src/sap/fe/core/messagebundle_th.properties +25 -42
  300. package/src/sap/fe/core/messagebundle_tr.properties +27 -44
  301. package/src/sap/fe/core/messagebundle_uk.properties +27 -44
  302. package/src/sap/fe/core/messagebundle_vi.properties +27 -44
  303. package/src/sap/fe/core/messagebundle_zh_CN.properties +27 -44
  304. package/src/sap/fe/core/messagebundle_zh_TW.properties +27 -44
  305. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +3 -3
  306. package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +5 -5
  307. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +103 -75
  308. package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +72 -73
  309. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +2 -2
  310. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +3 -2
  311. package/src/sap/fe/core/services/NavigationServiceFactory.js +62 -50
  312. package/src/sap/fe/core/services/NavigationServiceFactory.ts +63 -52
  313. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +3 -3
  314. package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +4 -4
  315. package/src/sap/fe/core/services/RoutingServiceFactory.js +56 -56
  316. package/src/sap/fe/core/services/RoutingServiceFactory.ts +67 -65
  317. package/src/sap/fe/core/services/ShellServicesFactory.js +93 -77
  318. package/src/sap/fe/core/services/ShellServicesFactory.ts +95 -82
  319. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +64 -64
  320. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +102 -92
  321. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +232 -200
  322. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +145 -142
  323. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +2 -2
  324. package/src/sap/fe/core/support/AnnotationIssue.support.js +1 -1
  325. package/src/sap/fe/core/support/CollectionFacetMissingID.support.js +1 -1
  326. package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.js +1 -1
  327. package/src/sap/fe/core/support/CommonHelper.js +3 -2
  328. package/src/sap/fe/core/support/CommonHelper.ts +9 -13
  329. package/src/sap/fe/core/support/Diagnostics.js +1 -1
  330. package/src/sap/fe/core/support/Diagnostics.ts +5 -5
  331. package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.js +1 -1
  332. package/src/sap/fe/core/templating/CommonFormatters.js +85 -0
  333. package/src/sap/fe/core/templating/CommonFormatters.ts +90 -0
  334. package/src/sap/fe/core/templating/CriticalityFormatters.js +31 -31
  335. package/src/sap/fe/core/templating/CriticalityFormatters.ts +42 -40
  336. package/src/sap/fe/core/templating/DataFieldFormatters.js +8 -8
  337. package/src/sap/fe/core/templating/DataFieldFormatters.ts +13 -10
  338. package/src/sap/fe/core/templating/DataModelPathHelper.js +23 -15
  339. package/src/sap/fe/core/templating/DataModelPathHelper.ts +47 -34
  340. package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
  341. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +2 -3
  342. package/src/sap/fe/core/templating/EntitySetHelper.js +7 -7
  343. package/src/sap/fe/core/templating/EntitySetHelper.ts +6 -8
  344. package/src/sap/fe/core/templating/FieldControlHelper.js +35 -34
  345. package/src/sap/fe/core/templating/FieldControlHelper.ts +29 -46
  346. package/src/sap/fe/core/templating/FilterHelper.js +18 -17
  347. package/src/sap/fe/core/templating/FilterHelper.ts +18 -18
  348. package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
  349. package/src/sap/fe/core/templating/FilterTemplating.ts +3 -3
  350. package/src/sap/fe/core/templating/PropertyFormatters.js +7 -7
  351. package/src/sap/fe/core/templating/PropertyFormatters.ts +21 -19
  352. package/src/sap/fe/core/templating/PropertyHelper.js +25 -25
  353. package/src/sap/fe/core/templating/PropertyHelper.ts +25 -26
  354. package/src/sap/fe/core/templating/UIFormatters.js +152 -95
  355. package/src/sap/fe/core/templating/UIFormatters.ts +202 -128
  356. package/src/sap/fe/core/type/DateTimeWithTimezone.js +2 -2
  357. package/src/sap/fe/core/type/Email.js +3 -3
  358. package/src/sap/fe/core/type/Email.ts +2 -2
  359. package/src/sap/fe/core/helpers/BindingExpression.js +0 -1732
@@ -2,7 +2,7 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * (c) Copyright 2009-2021 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/converters/controls/ObjectPage/HeaderFacet", "sap/fe/core/converters/helpers/IssueManager", "sap/fe/core/converters/helpers/Key", "sap/fe/core/helpers/BindingExpression", "../../helpers/ConfigurableObject", "../../helpers/ID", "../../ManifestSettings", "../../objectPage/FormMenuActions", "../Common/DataVisualization", "../Common/Form"], function (Action, HeaderFacet, IssueManager, Key, BindingExpression, ConfigurableObject, ID, ManifestSettings, FormMenuActions, DataVisualization, Form) {
5
+ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/converters/controls/ObjectPage/HeaderFacet", "sap/fe/core/converters/helpers/IssueManager", "sap/fe/core/converters/helpers/Key", "sap/fe/core/helpers/BindingToolkit", "../../helpers/ConfigurableObject", "../../helpers/ID", "../../ManifestSettings", "../../objectPage/FormMenuActions", "../Common/DataVisualization", "../Common/Form"], function (Action, HeaderFacet, IssueManager, Key, BindingToolkit, ConfigurableObject, ID, ManifestSettings, FormMenuActions, DataVisualization, Form) {
6
6
  "use strict";
7
7
 
8
8
  var _exports = {};
@@ -13,19 +13,20 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
13
13
  var getFormHiddenActions = FormMenuActions.getFormHiddenActions;
14
14
  var getFormActions = FormMenuActions.getFormActions;
15
15
  var ActionType = ManifestSettings.ActionType;
16
- var SubSectionID = ID.SubSectionID;
17
- var SideContentID = ID.SideContentID;
18
- var FormID = ID.FormID;
19
- var CustomSubSectionID = ID.CustomSubSectionID;
16
+ var getSubSectionID = ID.getSubSectionID;
17
+ var getSideContentID = ID.getSideContentID;
18
+ var getFormID = ID.getFormID;
19
+ var getCustomSubSectionID = ID.getCustomSubSectionID;
20
20
  var Placement = ConfigurableObject.Placement;
21
21
  var insertCustomElements = ConfigurableObject.insertCustomElements;
22
- var ref = BindingExpression.ref;
23
- var not = BindingExpression.not;
24
- var fn = BindingExpression.fn;
25
- var equal = BindingExpression.equal;
26
- var compileBinding = BindingExpression.compileBinding;
27
- var bindingExpression = BindingExpression.bindingExpression;
28
- var annotationExpression = BindingExpression.annotationExpression;
22
+ var ref = BindingToolkit.ref;
23
+ var pathInModel = BindingToolkit.pathInModel;
24
+ var not = BindingToolkit.not;
25
+ var ifElse = BindingToolkit.ifElse;
26
+ var getExpressionFromAnnotation = BindingToolkit.getExpressionFromAnnotation;
27
+ var fn = BindingToolkit.fn;
28
+ var equal = BindingToolkit.equal;
29
+ var compileExpression = BindingToolkit.compileExpression;
29
30
  var KeyHelper = Key.KeyHelper;
30
31
  var IssueType = IssueManager.IssueType;
31
32
  var IssueSeverity = IssueManager.IssueSeverity;
@@ -48,9 +49,9 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
48
49
 
49
50
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
50
51
 
51
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
52
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
52
53
 
53
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
54
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
54
55
 
55
56
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
56
57
 
@@ -78,7 +79,7 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
78
79
  })(SubSectionType || (SubSectionType = {}));
79
80
 
80
81
  _exports.SubSectionType = SubSectionType;
81
- var targetTerms = ["com.sap.vocabularies.UI.v1.LineItem", "com.sap.vocabularies.UI.v1.PresentationVariant", "com.sap.vocabularies.UI.v1.SelectionPresentationVariant"]; // TODO: Need to handle Table case inside createSubSection function if CollectionFacet has Table ReferenceFacet
82
+ var targetTerms = ["com.sap.vocabularies.UI.v1.LineItem", "com.sap.vocabularies.UI.v1.Chart", "com.sap.vocabularies.UI.v1.PresentationVariant", "com.sap.vocabularies.UI.v1.SelectionPresentationVariant"]; // TODO: Need to handle Table case inside createSubSection function if CollectionFacet has Table ReferenceFacet
82
83
 
83
84
  var hasTable = function () {
84
85
  var facets = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
@@ -91,10 +92,10 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
91
92
  /**
92
93
  * Create subsections based on facet definition.
93
94
  *
94
- * @param {FacetTypes[]} facetCollection Collection of facets
95
- * @param {ConverterContext} converterContext The converter context
96
- * @param {boolean} isHeaderSection True if header section is generated in this iteration
97
- * @returns {ObjectPageSubSection[]} The current subsections
95
+ * @param facetCollection Collection of facets
96
+ * @param converterContext The converter context
97
+ * @param isHeaderSection True if header section is generated in this iteration
98
+ * @returns The current subsections
98
99
  */
99
100
 
100
101
 
@@ -136,8 +137,8 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
136
137
  /**
137
138
  * Creates subsections based on the definition of the custom header facet.
138
139
  *
139
- * @param {ConverterContext} converterContext The converter context
140
- * @returns {ObjectPageSubSection[]} The current subsections
140
+ * @param converterContext The converter context
141
+ * @returns The current subsections
141
142
  */
142
143
 
143
144
 
@@ -165,15 +166,14 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
165
166
  * Creates a subsection based on a custom header facet.
166
167
  *
167
168
  * @param customHeaderFacet A custom header facet
168
- *
169
- * @returns {ObjectPageSubSection} A definition for a subsection
169
+ * @returns A definition for a subsection
170
170
  */
171
171
 
172
172
 
173
173
  _exports.createCustomHeaderFacetSubSections = createCustomHeaderFacetSubSections;
174
174
 
175
175
  function createCustomHeaderFacetSubSection(customHeaderFacet) {
176
- var subSectionID = CustomSubSectionID(customHeaderFacet.key);
176
+ var subSectionID = getCustomSubSectionID(customHeaderFacet.key);
177
177
  var subSection = {
178
178
  id: subSectionID,
179
179
  key: customHeaderFacet.key,
@@ -200,26 +200,32 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
200
200
  };
201
201
  /**
202
202
  * Adds Form menu action to all form actions, removes duplicate actions and hidden actions.
203
+ *
203
204
  * @param actions The actions involved
204
205
  * @param facetDefinition The definition for the facet
205
206
  * @param converterContext The converter context
206
- * @returns {BaseAction[] | ConverterAction[]}
207
+ * @returns The form menu actions
207
208
  */
208
209
 
209
210
 
210
211
  function addFormMenuActions(actions, facetDefinition, converterContext) {
211
212
  var hiddenActions = getFormHiddenActions(facetDefinition, converterContext) || [],
212
213
  formActions = getFormActions(facetDefinition, converterContext),
213
- formAllActions = insertCustomElements(actions, getActionsFromManifest(formActions, converterContext, actions, undefined, undefined, hiddenActions), {
214
+ manifestActions = getActionsFromManifest(formActions, converterContext, actions, undefined, undefined, hiddenActions),
215
+ formAllActions = insertCustomElements(actions, manifestActions.actions, {
214
216
  command: "overwrite"
215
217
  });
216
- return formAllActions ? getVisibilityEnablementFormMenuActions(removeDuplicateActions(formAllActions)) : actions;
218
+ return {
219
+ "actions": formAllActions ? getVisibilityEnablementFormMenuActions(removeDuplicateActions(formAllActions)) : actions,
220
+ "commandActions": manifestActions.commandActions
221
+ };
217
222
  }
218
223
  /**
219
224
  * Retrieves the action form a facet.
225
+ *
220
226
  * @param facetDefinition
221
227
  * @param converterContext
222
- * @returns {ConverterAction[] | BaseAction[]} The current facet actions
228
+ * @returns The current facet actions
223
229
  */
224
230
 
225
231
 
@@ -228,61 +234,60 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
228
234
 
229
235
  switch (facetDefinition.$Type) {
230
236
  case "com.sap.vocabularies.UI.v1.CollectionFacet":
231
- actions = facetDefinition.Facets.filter(function (facetDefinition) {
232
- return isReferenceFacet(facetDefinition);
233
- }).reduce(function (actions, facetDefinition) {
234
- return createFormActionReducer(actions, facetDefinition, converterContext);
237
+ actions = facetDefinition.Facets.filter(function (subFacetDefinition) {
238
+ return isReferenceFacet(subFacetDefinition);
239
+ }).reduce(function (actionReducer, referenceFacet) {
240
+ return createFormActionReducer(actionReducer, referenceFacet, converterContext);
235
241
  }, []);
236
242
  break;
237
243
 
238
244
  case "com.sap.vocabularies.UI.v1.ReferenceFacet":
239
245
  actions = createFormActionReducer([], facetDefinition, converterContext);
240
246
  break;
247
+
248
+ default:
249
+ break;
241
250
  }
242
251
 
243
252
  return addFormMenuActions(actions, facetDefinition, converterContext);
244
253
  }
245
254
  /**
246
- * Retruns the button type based on @UI.Emphasized annotation.
247
- * @param Emphasized Emphasized annotation value.
248
- * @returns {ButtonType | string} The button type or path based expression.
255
+ * Returns the button type based on @UI.Emphasized annotation.
256
+ *
257
+ * @param emphasized Emphasized annotation value.
258
+ * @returns The button type or path based expression.
249
259
  */
250
260
 
251
261
 
252
- function getButtonType(Emphasized) {
253
- var PathForButtonType = Emphasized === null || Emphasized === void 0 ? void 0 : Emphasized.path;
254
-
255
- if (PathForButtonType) {
256
- return "{= " + "!${" + PathForButtonType + "} ? '" + ButtonType.Transparent + "' : ${" + PathForButtonType + "}" + "}";
257
- } else if (Emphasized) {
258
- return ButtonType.Ghost;
259
- }
260
-
261
- return ButtonType.Transparent;
262
+ function getButtonType(emphasized) {
263
+ // Emphasized is a boolean so if it's equal to true we show the button as Ghost, otherwise as Transparent
264
+ var buttonTypeCondition = equal(getExpressionFromAnnotation(emphasized), true);
265
+ return compileExpression(ifElse(buttonTypeCondition, ButtonType.Ghost, ButtonType.Transparent));
262
266
  }
263
267
  /**
264
268
  * Create a subsection based on FacetTypes.
269
+ *
265
270
  * @param facetDefinition
266
271
  * @param facetsToCreate
267
272
  * @param converterContext
268
273
  * @param level
269
274
  * @param hasSingleContent
270
275
  * @param isHeaderSection
271
- * @returns {ObjectPageSubSection} A subsection definition
276
+ * @returns A subsection definition
272
277
  */
273
278
 
274
279
 
275
280
  function createSubSection(facetDefinition, facetsToCreate, converterContext, level, hasSingleContent, isHeaderSection) {
276
281
  var _facetDefinition$anno, _facetDefinition$anno2, _presentation$visuali, _presentation$visuali2, _presentation$visuali3;
277
282
 
278
- var subSectionID = SubSectionID({
283
+ var subSectionID = getSubSectionID({
279
284
  Facet: facetDefinition
280
285
  });
281
286
  var oHiddenAnnotation = (_facetDefinition$anno = facetDefinition.annotations) === null || _facetDefinition$anno === void 0 ? void 0 : (_facetDefinition$anno2 = _facetDefinition$anno.UI) === null || _facetDefinition$anno2 === void 0 ? void 0 : _facetDefinition$anno2.Hidden;
282
- var isVisible = compileBinding(not(equal(true, annotationExpression(oHiddenAnnotation))));
287
+ var isVisible = compileExpression(not(equal(true, getExpressionFromAnnotation(oHiddenAnnotation))));
283
288
  var isDynamicExpression = isVisible && typeof isVisible === "string" && isVisible.indexOf("{=") === 0 && (oHiddenAnnotation === null || oHiddenAnnotation === void 0 ? void 0 : oHiddenAnnotation.type) !== "Path";
284
289
  var isVisibleDynamicExpression = isVisible && isDynamicExpression ? isVisible.substring(isVisible.indexOf("{=") + 2, isVisible.lastIndexOf("}")) : false;
285
- var title = compileBinding(annotationExpression(facetDefinition.Label));
290
+ var title = compileExpression(getExpressionFromAnnotation(facetDefinition.Label));
286
291
  var subSection = {
287
292
  id: subSectionID,
288
293
  key: getSubSectionKey(facetDefinition, subSectionID),
@@ -345,14 +350,15 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
345
350
 
346
351
  return mixedSubSection;
347
352
  } else {
348
- var actions = getFacetActions(facetDefinition, converterContext),
353
+ var facetActions = getFacetActions(facetDefinition, converterContext),
349
354
  formCollectionSubSection = _objectSpread(_objectSpread({}, subSection), {}, {
350
355
  type: SubSectionType.Form,
351
- formDefinition: createFormDefinition(facetDefinition, isVisible, converterContext, actions),
356
+ formDefinition: createFormDefinition(facetDefinition, isVisible, converterContext, facetActions.actions),
352
357
  level: level,
353
- actions: actions.filter(function (action) {
358
+ actions: facetActions.actions.filter(function (action) {
354
359
  return action.facetName === undefined;
355
- })
360
+ }),
361
+ commandActions: facetActions.commandActions
356
362
  });
357
363
 
358
364
  return formCollectionSubSection;
@@ -388,14 +394,15 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
388
394
  case "com.sap.vocabularies.UI.v1.StatusInfo":
389
395
  case "com.sap.vocabularies.Communication.v1.Contact":
390
396
  // All those element belong to a form facet
391
- var _actions = getFacetActions(facetDefinition, converterContext),
397
+ var _facetActions = getFacetActions(facetDefinition, converterContext),
392
398
  formElementSubSection = _objectSpread(_objectSpread({}, subSection), {}, {
393
399
  type: SubSectionType.Form,
394
400
  level: level,
395
- formDefinition: createFormDefinition(facetDefinition, isVisible, converterContext, _actions),
396
- actions: _actions.filter(function (action) {
401
+ formDefinition: createFormDefinition(facetDefinition, isVisible, converterContext, _facetActions.actions),
402
+ actions: _facetActions.actions.filter(function (action) {
397
403
  return action.facetName === undefined;
398
- })
404
+ }),
405
+ commandActions: _facetActions.commandActions
399
406
  });
400
407
 
401
408
  return formElementSubSection;
@@ -456,7 +463,7 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
456
463
  switch (referenceTarget.term) {
457
464
  case "com.sap.vocabularies.UI.v1.FieldGroup":
458
465
  dataFieldCollection = referenceTarget.Data;
459
- manifestActions = getActionsFromManifest(converterContext.getManifestControlConfiguration(referenceTarget).actions, converterContext, undefined, undefined, undefined, undefined, facetDefinition.fullyQualifiedName);
466
+ manifestActions = getActionsFromManifest(converterContext.getManifestControlConfiguration(referenceTarget).actions, converterContext, undefined, undefined, undefined, undefined, facetDefinition.fullyQualifiedName).actions;
460
467
  break;
461
468
 
462
469
  case "com.sap.vocabularies.UI.v1.Identification":
@@ -466,13 +473,14 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
466
473
  }
467
474
 
468
475
  break;
476
+
477
+ default:
478
+ break;
469
479
  }
470
480
  }
471
481
 
472
- actions = dataFieldCollection.reduce(function (actions, dataField) {
473
- var _dataField$annotation, _dataField$RequiresCo, _dataField$Inline, _dataField$Determinin, _dataField$Label, _dataField$Navigation, _dataField$annotation2, _dataField$annotation3, _dataField$annotation4, _dataField$Label2, _dataField$annotation5, _dataField$annotation6, _dataField$annotation7;
474
-
475
- var UIAnnotation = dataField === null || dataField === void 0 ? void 0 : (_dataField$annotation = dataField.annotations) === null || _dataField$annotation === void 0 ? void 0 : _dataField$annotation.UI;
482
+ actions = dataFieldCollection.reduce(function (actionReducer, dataField) {
483
+ var _dataField$RequiresCo, _dataField$Inline, _dataField$Determinin, _dataField$Label, _dataField$Navigation, _dataField$annotation, _dataField$annotation2, _dataField$annotation3, _dataField$annotation4, _dataField$annotation5, _dataField$Label2, _dataField$annotation6, _dataField$annotation7, _dataField$annotation8, _dataField$annotation9, _dataField$annotation10;
476
484
 
477
485
  switch (dataField.$Type) {
478
486
  case "com.sap.vocabularies.UI.v1.DataFieldForIntentBasedNavigation":
@@ -494,21 +502,21 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
494
502
  mNavigationParameters.semanticObjectMapping = getSemanticObjectMapping(dataField.Mapping);
495
503
  }
496
504
 
497
- actions.push({
505
+ actionReducer.push({
498
506
  type: ActionType.DataFieldForIntentBasedNavigation,
499
- id: FormID({
507
+ id: getFormID({
500
508
  Facet: facetDefinition
501
509
  }, dataField),
502
510
  key: KeyHelper.generateKeyFromDataField(dataField),
503
511
  text: (_dataField$Label = dataField.Label) === null || _dataField$Label === void 0 ? void 0 : _dataField$Label.toString(),
504
512
  annotationPath: "",
505
- enabled: dataField.NavigationAvailable !== undefined ? compileBinding(equal(annotationExpression((_dataField$Navigation = dataField.NavigationAvailable) === null || _dataField$Navigation === void 0 ? void 0 : _dataField$Navigation.valueOf()), true)) : true,
506
- visible: compileBinding(not(equal(annotationExpression((_dataField$annotation2 = dataField.annotations) === null || _dataField$annotation2 === void 0 ? void 0 : (_dataField$annotation3 = _dataField$annotation2.UI) === null || _dataField$annotation3 === void 0 ? void 0 : (_dataField$annotation4 = _dataField$annotation3.Hidden) === null || _dataField$annotation4 === void 0 ? void 0 : _dataField$annotation4.valueOf()), true))),
507
- buttonType: getButtonType(UIAnnotation === null || UIAnnotation === void 0 ? void 0 : UIAnnotation.Emphasized),
508
- press: compileBinding(fn("._intentBasedNavigation.navigate", [annotationExpression(dataField.SemanticObject), annotationExpression(dataField.Action), mNavigationParameters])),
509
- customData: compileBinding({
510
- semanticObject: annotationExpression(dataField.SemanticObject),
511
- action: annotationExpression(dataField.Action)
513
+ enabled: dataField.NavigationAvailable !== undefined ? compileExpression(equal(getExpressionFromAnnotation((_dataField$Navigation = dataField.NavigationAvailable) === null || _dataField$Navigation === void 0 ? void 0 : _dataField$Navigation.valueOf()), true)) : "true",
514
+ visible: compileExpression(not(equal(getExpressionFromAnnotation((_dataField$annotation = dataField.annotations) === null || _dataField$annotation === void 0 ? void 0 : (_dataField$annotation2 = _dataField$annotation.UI) === null || _dataField$annotation2 === void 0 ? void 0 : (_dataField$annotation3 = _dataField$annotation2.Hidden) === null || _dataField$annotation3 === void 0 ? void 0 : _dataField$annotation3.valueOf()), true))),
515
+ buttonType: getButtonType((_dataField$annotation4 = dataField.annotations) === null || _dataField$annotation4 === void 0 ? void 0 : (_dataField$annotation5 = _dataField$annotation4.UI) === null || _dataField$annotation5 === void 0 ? void 0 : _dataField$annotation5.Emphasized),
516
+ press: compileExpression(fn("._intentBasedNavigation.navigate", [getExpressionFromAnnotation(dataField.SemanticObject), getExpressionFromAnnotation(dataField.Action), mNavigationParameters])),
517
+ customData: compileExpression({
518
+ semanticObject: getExpressionFromAnnotation(dataField.SemanticObject),
519
+ action: getExpressionFromAnnotation(dataField.Action)
512
520
  })
513
521
  });
514
522
  break;
@@ -516,32 +524,35 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
516
524
  case "com.sap.vocabularies.UI.v1.DataFieldForAction":
517
525
  var formManifestActionsConfiguration = converterContext.getManifestControlConfiguration(referenceTarget).actions;
518
526
  var key = KeyHelper.generateKeyFromDataField(dataField);
519
- actions.push({
527
+ actionReducer.push({
520
528
  type: ActionType.DataFieldForAction,
521
- id: FormID({
529
+ id: getFormID({
522
530
  Facet: facetDefinition
523
531
  }, dataField),
524
532
  key: key,
525
533
  text: (_dataField$Label2 = dataField.Label) === null || _dataField$Label2 === void 0 ? void 0 : _dataField$Label2.toString(),
526
534
  annotationPath: "",
527
535
  enabled: getEnabledForAnnotationAction(converterContext, dataField.ActionTarget),
528
- binding: navigationPropertyPath ? "{ 'path' : '" + navigationPropertyPath + "'}" : undefined,
529
- visible: compileBinding(not(equal(annotationExpression((_dataField$annotation5 = dataField.annotations) === null || _dataField$annotation5 === void 0 ? void 0 : (_dataField$annotation6 = _dataField$annotation5.UI) === null || _dataField$annotation6 === void 0 ? void 0 : (_dataField$annotation7 = _dataField$annotation6.Hidden) === null || _dataField$annotation7 === void 0 ? void 0 : _dataField$annotation7.valueOf()), true))),
536
+ binding: navigationPropertyPath ? "{ 'path' : '".concat(navigationPropertyPath, "'}") : undefined,
537
+ visible: compileExpression(not(equal(getExpressionFromAnnotation((_dataField$annotation6 = dataField.annotations) === null || _dataField$annotation6 === void 0 ? void 0 : (_dataField$annotation7 = _dataField$annotation6.UI) === null || _dataField$annotation7 === void 0 ? void 0 : (_dataField$annotation8 = _dataField$annotation7.Hidden) === null || _dataField$annotation8 === void 0 ? void 0 : _dataField$annotation8.valueOf()), true))),
530
538
  requiresDialog: isDialog(dataField.ActionTarget),
531
- buttonType: getButtonType(UIAnnotation === null || UIAnnotation === void 0 ? void 0 : UIAnnotation.Emphasized),
532
- press: compileBinding(fn("invokeAction", [dataField.Action, {
533
- contexts: fn("getBindingContext", [], bindingExpression("", "$source")),
539
+ buttonType: getButtonType((_dataField$annotation9 = dataField.annotations) === null || _dataField$annotation9 === void 0 ? void 0 : (_dataField$annotation10 = _dataField$annotation9.UI) === null || _dataField$annotation10 === void 0 ? void 0 : _dataField$annotation10.Emphasized),
540
+ press: compileExpression(fn("invokeAction", [dataField.Action, {
541
+ contexts: fn("getBindingContext", [], pathInModel("", "$source")),
534
542
  invocationGrouping: dataField.InvocationGrouping === "UI.OperationGroupingType/ChangeSet" ? "ChangeSet" : "Isolated",
535
- label: annotationExpression(dataField.Label),
536
- model: fn("getModel", [], bindingExpression("/", "$source")),
543
+ label: getExpressionFromAnnotation(dataField.Label),
544
+ model: fn("getModel", [], pathInModel("/", "$source")),
537
545
  isNavigable: isActionNavigable(formManifestActionsConfiguration && formManifestActionsConfiguration[key])
538
546
  }], ref(".editFlow"))),
539
547
  facetName: dataField.Inline ? facetDefinition.fullyQualifiedName : undefined
540
548
  });
541
549
  break;
550
+
551
+ default:
552
+ break;
542
553
  }
543
554
 
544
- return actions;
555
+ return actionReducer;
545
556
  }, actions);
546
557
  return insertCustomElements(actions, manifestActions);
547
558
  }
@@ -577,7 +588,7 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
577
588
  function createCustomSubSection(manifestSubSection, subSectionKey, converterContext) {
578
589
  var sideContent = manifestSubSection.sideContent ? {
579
590
  template: manifestSubSection.sideContent.template,
580
- id: SideContentID(subSectionKey),
591
+ id: getSideContentID(subSectionKey),
581
592
  visible: false,
582
593
  equalSplit: manifestSubSection.sideContent.equalSplit
583
594
  } : undefined;
@@ -591,10 +602,11 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
591
602
 
592
603
  var isVisible = manifestSubSection.visible !== undefined ? manifestSubSection.visible : true;
593
604
  var isDynamicExpression = isVisible && typeof isVisible === "string" && isVisible.indexOf("{=") === 0;
605
+ var manifestActions = getActionsFromManifest(manifestSubSection.actions, converterContext);
594
606
  var subSectionDefinition = {
595
607
  type: SubSectionType.Unknown,
596
- id: manifestSubSection.id || CustomSubSectionID(subSectionKey),
597
- actions: getActionsFromManifest(manifestSubSection.actions, converterContext),
608
+ id: manifestSubSection.id || getCustomSubSectionID(subSectionKey),
609
+ actions: manifestActions.actions,
598
610
  key: subSectionKey,
599
611
  title: manifestSubSection.title,
600
612
  level: 1,
@@ -619,8 +631,7 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
619
631
  * @param currentFacet
620
632
  * @param facetsToCreateInSection
621
633
  * @param converterContext
622
- *
623
- * @returns {boolean} `true` for compliant, false otherwise
634
+ * @returns `true` for compliant, false otherwise
624
635
  */
625
636
 
626
637
 
@@ -684,4 +695,4 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
684
695
 
685
696
  return _exports;
686
697
  }, false);
687
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlN1YlNlY3Rpb24udHMiXSwibmFtZXMiOlsiU3ViU2VjdGlvblR5cGUiLCJ0YXJnZXRUZXJtcyIsImhhc1RhYmxlIiwiZmFjZXRzIiwic29tZSIsImZhY2V0VHlwZSIsImluZGV4T2YiLCJUYXJnZXQiLCIkdGFyZ2V0IiwidGVybSIsImNyZWF0ZVN1YlNlY3Rpb25zIiwiZmFjZXRDb2xsZWN0aW9uIiwiY29udmVydGVyQ29udGV4dCIsImlzSGVhZGVyU2VjdGlvbiIsImZhY2V0c1RvQ3JlYXRlIiwicmVkdWNlIiwiZmFjZXREZWZpbml0aW9uIiwiJFR5cGUiLCJwdXNoIiwiRmFjZXRzIiwiZmluZCIsInNwbGljZSIsImxlbmd0aCIsIm1hcCIsImZhY2V0IiwiY3JlYXRlU3ViU2VjdGlvbiIsImNyZWF0ZUN1c3RvbUhlYWRlckZhY2V0U3ViU2VjdGlvbnMiLCJjdXN0b21IZWFkZXJGYWNldHMiLCJnZXRIZWFkZXJGYWNldHNGcm9tTWFuaWZlc3QiLCJnZXRNYW5pZmVzdFdyYXBwZXIiLCJnZXRIZWFkZXJGYWNldHMiLCJhQ3VzdG9tSGVhZGVyRmFjZXRzIiwiT2JqZWN0Iiwia2V5cyIsImZvckVhY2giLCJrZXkiLCJjdXN0b21IZWFkZXJGYWNldCIsInRlbXBsYXRlRWRpdCIsImNyZWF0ZUN1c3RvbUhlYWRlckZhY2V0U3ViU2VjdGlvbiIsInN1YlNlY3Rpb25JRCIsIkN1c3RvbVN1YlNlY3Rpb25JRCIsInN1YlNlY3Rpb24iLCJpZCIsInRpdGxlIiwidHlwZSIsIlhNTEZyYWdtZW50IiwidGVtcGxhdGUiLCJ2aXNpYmxlIiwibGV2ZWwiLCJzaWRlQ29udGVudCIsInVuZGVmaW5lZCIsInN0YXNoZWQiLCJmbGV4U2V0dGluZ3MiLCJhY3Rpb25zIiwiZ2V0U3ViU2VjdGlvbktleSIsImZhbGxiYWNrIiwiSUQiLCJ0b1N0cmluZyIsIkxhYmVsIiwiYWRkRm9ybU1lbnVBY3Rpb25zIiwiaGlkZGVuQWN0aW9ucyIsImdldEZvcm1IaWRkZW5BY3Rpb25zIiwiZm9ybUFjdGlvbnMiLCJnZXRGb3JtQWN0aW9ucyIsImZvcm1BbGxBY3Rpb25zIiwiaW5zZXJ0Q3VzdG9tRWxlbWVudHMiLCJnZXRBY3Rpb25zRnJvbU1hbmlmZXN0IiwiY29tbWFuZCIsImdldFZpc2liaWxpdHlFbmFibGVtZW50Rm9ybU1lbnVBY3Rpb25zIiwicmVtb3ZlRHVwbGljYXRlQWN0aW9ucyIsImdldEZhY2V0QWN0aW9ucyIsIkFycmF5IiwiZmlsdGVyIiwiaXNSZWZlcmVuY2VGYWNldCIsImNyZWF0ZUZvcm1BY3Rpb25SZWR1Y2VyIiwiZ2V0QnV0dG9uVHlwZSIsIkVtcGhhc2l6ZWQiLCJQYXRoRm9yQnV0dG9uVHlwZSIsInBhdGgiLCJCdXR0b25UeXBlIiwiVHJhbnNwYXJlbnQiLCJHaG9zdCIsImhhc1NpbmdsZUNvbnRlbnQiLCJTdWJTZWN0aW9uSUQiLCJGYWNldCIsIm9IaWRkZW5Bbm5vdGF0aW9uIiwiYW5ub3RhdGlvbnMiLCJVSSIsIkhpZGRlbiIsImlzVmlzaWJsZSIsImNvbXBpbGVCaW5kaW5nIiwibm90IiwiZXF1YWwiLCJhbm5vdGF0aW9uRXhwcmVzc2lvbiIsImlzRHluYW1pY0V4cHJlc3Npb24iLCJpc1Zpc2libGVEeW5hbWljRXhwcmVzc2lvbiIsInN1YnN0cmluZyIsImxhc3RJbmRleE9mIiwiVW5rbm93biIsImFubm90YXRpb25QYXRoIiwiZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImlzVmlzaWJpbGl0eUR5bmFtaWMiLCJnZXRTdGFzaGVkU2V0dGluZ3NGb3JIZWFkZXJGYWNldCIsImRlc2lnbnRpbWUiLCJnZXREZXNpZ25UaW1lTWV0YWRhdGFTZXR0aW5nc0ZvckhlYWRlckZhY2V0IiwiY29udGVudCIsInRhYmxlQ29udGVudCIsImluZGV4IiwidW5zdXBwb3J0ZWRUZXh0IiwiaSIsImNvbmNhdCIsIm1peGVkU3ViU2VjdGlvbiIsIk1peGVkIiwiZm9ybUNvbGxlY3Rpb25TdWJTZWN0aW9uIiwiRm9ybSIsImZvcm1EZWZpbml0aW9uIiwiY3JlYXRlRm9ybURlZmluaXRpb24iLCJhY3Rpb24iLCJmYWNldE5hbWUiLCJ2YWx1ZSIsInByZXNlbnRhdGlvbiIsImdldERhdGFWaXN1YWxpemF0aW9uQ29uZmlndXJhdGlvbiIsImdldENvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW5jZSIsImNvbnRyb2xUaXRsZSIsInZpc3VhbGl6YXRpb25zIiwiYW5ub3RhdGlvbiIsInNob3dUaXRsZSIsImlzU3Vic2VjdGlvblRpdGxlU2hvd24iLCJ0aXRsZVZpc2libGVFeHByZXNzaW9uIiwiZGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uIiwiRGF0YVZpc3VhbGl6YXRpb24iLCJ0aXRsZVZpc2libGUiLCJmb3JtRWxlbWVudFN1YlNlY3Rpb24iLCJ1bnN1cHBvcnRlZFN1YlNlY3Rpb24iLCJ0ZXh0Iiwic3ViU2VjdGlvblRpdGxlIiwicmVmZXJlbmNlVGFyZ2V0IiwidGFyZ2V0VmFsdWUiLCJtYW5pZmVzdEFjdGlvbnMiLCJkYXRhRmllbGRDb2xsZWN0aW9uIiwic3BsaXQiLCJuYXZpZ2F0aW9uUHJvcGVydHlQYXRoIiwic3Vic3RyIiwiRGF0YSIsImdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb24iLCJxdWFsaWZpZXIiLCJkYXRhRmllbGQiLCJVSUFubm90YXRpb24iLCJSZXF1aXJlc0NvbnRleHQiLCJ2YWx1ZU9mIiwiZ2V0RGlhZ25vc3RpY3MiLCJhZGRJc3N1ZSIsIklzc3VlQ2F0ZWdvcnkiLCJBbm5vdGF0aW9uIiwiSXNzdWVTZXZlcml0eSIsIkxvdyIsIklzc3VlVHlwZSIsIk1BTEZPUk1FRF9EQVRBRklFTERfRk9SX0lCTiIsIlJFUVVJUkVTQ09OVEVYVCIsIklubGluZSIsIklOTElORSIsIkRldGVybWluaW5nIiwiREVURVJNSU5JTkciLCJtTmF2aWdhdGlvblBhcmFtZXRlcnMiLCJNYXBwaW5nIiwic2VtYW50aWNPYmplY3RNYXBwaW5nIiwiZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nIiwiQWN0aW9uVHlwZSIsIkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiIsIkZvcm1JRCIsIktleUhlbHBlciIsImdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZCIsImVuYWJsZWQiLCJOYXZpZ2F0aW9uQXZhaWxhYmxlIiwiYnV0dG9uVHlwZSIsInByZXNzIiwiZm4iLCJTZW1hbnRpY09iamVjdCIsIkFjdGlvbiIsImN1c3RvbURhdGEiLCJzZW1hbnRpY09iamVjdCIsImZvcm1NYW5pZmVzdEFjdGlvbnNDb25maWd1cmF0aW9uIiwiRGF0YUZpZWxkRm9yQWN0aW9uIiwiZ2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb24iLCJBY3Rpb25UYXJnZXQiLCJiaW5kaW5nIiwicmVxdWlyZXNEaWFsb2ciLCJpc0RpYWxvZyIsImNvbnRleHRzIiwiYmluZGluZ0V4cHJlc3Npb24iLCJpbnZvY2F0aW9uR3JvdXBpbmciLCJJbnZvY2F0aW9uR3JvdXBpbmciLCJsYWJlbCIsIm1vZGVsIiwiaXNOYXZpZ2FibGUiLCJpc0FjdGlvbk5hdmlnYWJsZSIsInJlZiIsImFjdGlvbkRlZmluaXRpb24iLCJiQ3JpdGljYWwiLCJDb21tb24iLCJJc0FjdGlvbkNyaXRpY2FsIiwicGFyYW1ldGVycyIsImNyZWF0ZUN1c3RvbVN1YlNlY3Rpb25zIiwibWFuaWZlc3RTdWJTZWN0aW9ucyIsInN1YlNlY3Rpb25zIiwic3ViU2VjdGlvbktleSIsImNyZWF0ZUN1c3RvbVN1YlNlY3Rpb24iLCJtYW5pZmVzdFN1YlNlY3Rpb24iLCJTaWRlQ29udGVudElEIiwiZXF1YWxTcGxpdCIsInBvc2l0aW9uIiwicGxhY2VtZW50IiwiUGxhY2VtZW50IiwiQWZ0ZXIiLCJzdWJTZWN0aW9uRGVmaW5pdGlvbiIsIm5hbWUiLCJQbGFjZWhvbGRlciIsImN1cnJlbnRGYWNldCIsImZhY2V0c1RvQ3JlYXRlSW5TZWN0aW9uIiwibWFuaWZlc3RXcmFwcGVyIiwidXNlSWNvblRhYkJhciIsImhhc05vT3RoZXJWaXNpYmxlVGFibGVJblRhcmdldHMiLCJlbnRpdHlUeXBlIiwiZ2V0RW50aXR5VHlwZSIsImV2ZXJ5Iiwic3ViRmFjZXQiLCJyZWZGYWNldCIsInN1YkNvbGxlY3Rpb25GYWNldCIsInN1YlJlZkZhY2V0Il0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztNQWtEWUEsYzs7YUFBQUEsYztBQUFBQSxJQUFBQSxjO0FBQUFBLElBQUFBLGM7QUFBQUEsSUFBQUEsYztBQUFBQSxJQUFBQSxjO0FBQUFBLElBQUFBLGM7QUFBQUEsSUFBQUEsYztLQUFBQSxjLEtBQUFBLGM7OztBQTRGWixNQUFNQyxXQUFxQixHQUFHLG9KQUE5QixDLENBTUE7O0FBQ0EsTUFBTUMsUUFBUSxHQUFHLFlBQXdCO0FBQUEsUUFBdkJDLE1BQXVCLHVFQUFQLEVBQU87QUFDeEMsV0FBT0EsTUFBTSxDQUFDQyxJQUFQLENBQVksVUFBQ0MsU0FBRDtBQUFBOztBQUFBLGFBQWVKLFdBQVcsQ0FBQ0ssT0FBWixDQUFvQkQsU0FBcEIsYUFBb0JBLFNBQXBCLDRDQUFvQkEsU0FBUyxDQUFFRSxNQUEvQiwrRUFBb0Isa0JBQW1CQyxPQUF2QywwREFBb0Isc0JBQTRCQyxJQUFoRCxJQUF3RCxDQUFDLENBQXhFO0FBQUEsS0FBWixDQUFQO0FBQ0EsR0FGRDtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNPLFdBQVNDLGlCQUFULENBQ05DLGVBRE0sRUFFTkMsZ0JBRk0sRUFHTkMsZUFITSxFQUltQjtBQUN6QjtBQUNBLFFBQU1DLGNBQWMsR0FBR0gsZUFBZSxDQUFDSSxNQUFoQixDQUF1QixVQUFDRCxjQUFELEVBQStCRSxlQUEvQixFQUFtRDtBQUNoRyxjQUFRQSxlQUFlLENBQUNDLEtBQXhCO0FBQ0M7QUFDQ0gsVUFBQUEsY0FBYyxDQUFDSSxJQUFmLENBQW9CRixlQUFwQjtBQUNBOztBQUNEO0FBQ0M7QUFDQTtBQUNBLGNBQUlBLGVBQWUsQ0FBQ0cs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QUFwQixnRkFBNkJDLElBQTdCLCtEQUhELEVBSUU7QUFBQTs7QUFDRCxxQkFBTywwQkFBQTROLFdBQVcsQ0FBQy9JLFdBQVosMEdBQXlCQyxFQUF6QixrRkFBNkJDLE1BQTdCLE1BQXdDdEMsU0FBeEMsNkJBQW9EbUwsV0FBVyxDQUFDL0ksV0FBaEUscUZBQW9ELHVCQUF5QkMsRUFBN0UsMkRBQW9ELHVCQUE2QkMsTUFBakYsR0FBMEYsS0FBakc7QUFDQTs7QUFDRCxtQkFBTyxJQUFQO0FBQ0EsV0FWTSxDQUFQO0FBV0E7QUFDRDs7QUFDRCxhQUFPLElBQVA7QUFDQSxLQTVCTSxDQUFQO0FBNkJBIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRBbm5vdGF0aW9uVGVybSxcblx0Q29sbGVjdGlvbkZhY2V0VHlwZXMsXG5cdERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdEZhY2V0VHlwZXMsXG5cdEZpZWxkR3JvdXAsXG5cdElkZW50aWZpY2F0aW9uLFxuXHRPcGVyYXRpb25Hcm91cGluZ1R5cGUsXG5cdFJlZmVyZW5jZUZhY2V0VHlwZXMsXG5cdFN0YXR1c0luZm8sXG5cdFVJQW5ub3RhdGlvblRlcm1zLFxuXHRVSUFubm90YXRpb25UeXBlc1xufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB7IENvbW11bmljYXRpb25Bbm5vdGF0aW9uVGVybXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvZGlzdC9nZW5lcmF0ZWQvQ29tbXVuaWNhdGlvblwiO1xuaW1wb3J0IHtcblx0QmFzZUFjdGlvbixcblx0QnV0dG9uVHlwZSxcblx0Q29udmVydGVyQWN0aW9uLFxuXHRDdXN0b21BY3Rpb24sXG5cdGdldEFjdGlvbnNGcm9tTWFuaWZlc3QsXG5cdGdldEVuYWJsZWRGb3JBbm5vdGF0aW9uQWN0aW9uLFxuXHRnZXRTZW1hbnRpY09iamVjdE1hcHBpbmcsXG5cdGlzQWN0aW9uTmF2aWdhYmxlLFxuXHRyZW1vdmVEdXBsaWNhdGVBY3Rpb25zXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB7XG5cdEN1c3RvbU9iamVjdFBhZ2VIZWFkZXJGYWNldCxcblx0RmxleFNldHRpbmdzLFxuXHRnZXREZXNpZ25UaW1lTWV0YWRhdGFTZXR0aW5nc0ZvckhlYWRlckZhY2V0LFxuXHRnZXRIZWFkZXJGYWNldHNGcm9tTWFuaWZlc3QsXG5cdGdldFN0YXNoZWRTZXR0aW5nc0ZvckhlYWRlckZhY2V0XG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL09iamVjdFBhZ2UvSGVhZGVyRmFjZXRcIjtcbmltcG9ydCB7IElzc3VlQ2F0ZWdvcnksIElzc3VlU2V2ZXJpdHksIElzc3VlVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvSXNzdWVNYW5hZ2VyXCI7XG5pbXBvcnQgeyBLZXlIZWxwZXIgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0tleVwiO1xuaW1wb3J0IHtcblx0YW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdGJpbmRpbmdFeHByZXNzaW9uLFxuXHRCaW5kaW5nRXhwcmVzc2lvbixcblx0Y29tcGlsZUJpbmRpbmcsXG5cdGVxdWFsLFxuXHRmbixcblx0bm90LFxuXHRyZWZcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ0V4cHJlc3Npb25cIjtcbmltcG9ydCBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCIuLi8uLi9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgeyBDb25maWd1cmFibGVPYmplY3QsIENvbmZpZ3VyYWJsZVJlY29yZCwgQ3VzdG9tRWxlbWVudCwgaW5zZXJ0Q3VzdG9tRWxlbWVudHMsIFBsYWNlbWVudCB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHsgQ3VzdG9tU3ViU2VjdGlvbklELCBGb3JtSUQsIFNpZGVDb250ZW50SUQsIFN1YlNlY3Rpb25JRCB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0lEXCI7XG5pbXBvcnQgeyBBY3Rpb25UeXBlLCBNYW5pZmVzdEFjdGlvbiwgTWFuaWZlc3RTdWJTZWN0aW9uIH0gZnJvbSBcIi4uLy4uL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7IGdldEZvcm1BY3Rpb25zLCBnZXRGb3JtSGlkZGVuQWN0aW9ucywgZ2V0VmlzaWJpbGl0eUVuYWJsZW1lbnRGb3JtTWVudUFjdGlvbnMgfSBmcm9tIFwiLi4vLi4vb2JqZWN0UGFnZS9Gb3JtTWVudUFjdGlvbnNcIjtcbmltcG9ydCB7IERhdGFWaXN1YWxpemF0aW9uRGVmaW5pdGlvbiwgZ2V0RGF0YVZpc3VhbGl6YXRpb25Db25maWd1cmF0aW9uIH0gZnJvbSBcIi4uL0NvbW1vbi9EYXRhVmlzdWFsaXphdGlvblwiO1xuaW1wb3J0IHsgY3JlYXRlRm9ybURlZmluaXRpb24sIEZvcm1EZWZpbml0aW9uLCBpc1JlZmVyZW5jZUZhY2V0IH0gZnJvbSBcIi4uL0NvbW1vbi9Gb3JtXCI7XG5cbmV4cG9ydCBlbnVtIFN1YlNlY3Rpb25UeXBlIHtcblx0VW5rbm93biA9IFwiVW5rbm93blwiLCAvLyBEZWZhdWx0IFR5cGVcblx0Rm9ybSA9IFwiRm9ybVwiLFxuXHREYXRhVmlzdWFsaXphdGlvbiA9IFwiRGF0YVZpc3VhbGl6YXRpb25cIixcblx0WE1MRnJhZ21lbnQgPSBcIlhNTEZyYWdtZW50XCIsXG5cdFBsYWNlaG9sZGVyID0gXCJQbGFjZWhvbGRlclwiLFxuXHRNaXhlZCA9IFwiTWl4ZWRcIlxufVxuXG5leHBvcnQgdHlwZSBPYmplY3RQYWdlU3ViU2VjdGlvbiA9XG5cdHwgVW5zdXBwb3J0ZWRTdWJTZWN0aW9uXG5cdHwgRm9ybVN1YlNlY3Rpb25cblx0fCBEYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb25cblx0fCBDb250YWN0U3ViU2VjdGlvblxuXHR8IFhNTEZyYWdtZW50U3ViU2VjdGlvblxuXHR8IFBsYWNlaG9sZGVyRnJhZ21lbnRTdWJTZWN0aW9uXG5cdHwgTWl4ZWRTdWJTZWN0aW9uO1xuXG50eXBlIEJhc2VTdWJTZWN0aW9uID0ge1xuXHRpZDogc3RyaW5nO1xuXHRrZXk6IHN0cmluZztcblx0dGl0bGU6IEJpbmRpbmdFeHByZXNzaW9uPHN0cmluZz47XG5cdGFubm90YXRpb25QYXRoOiBzdHJpbmc7XG5cdHR5cGU6IFN1YlNlY3Rpb25UeXBlO1xuXHR2aXNpYmxlOiBCaW5kaW5nRXhwcmVzc2lvbjxib29sZWFuPjtcblx0aXNWaXNpYmlsaXR5RHluYW1pYz86IGJvb2xlYW4gfCBcIlwiO1xuXHRmbGV4U2V0dGluZ3M/OiBGbGV4U2V0dGluZ3M7XG5cdHN0YXNoZWQ/OiBib29sZWFuO1xuXHRsZXZlbDogbnVtYmVyO1xuXHRjb250ZW50PzogQXJyYXk8T2JqZWN0UGFnZVN1YlNlY3Rpb24+O1xuXHRzaWRlQ29udGVudD86IFNpZGVDb250ZW50RGVmO1xufTtcblxudHlwZSBVbnN1cHBvcnRlZFN1YlNlY3Rpb24gPSBCYXNlU3ViU2VjdGlvbiAmIHtcblx0dGV4dDogc3RyaW5nO1xufTtcblxudHlwZSBEYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb24gPSBCYXNlU3ViU2VjdGlvbiAmIHtcblx0dHlwZTogU3ViU2VjdGlvblR5cGUuRGF0YVZpc3VhbGl6YXRpb247XG5cdHByZXNlbnRhdGlvbjogRGF0YVZpc3VhbGl6YXRpb25EZWZpbml0aW9uO1xuXHRzaG93VGl0bGU6IGJvb2xlYW47XG5cdHRpdGxlVmlzaWJsZT86IHN0cmluZyB8IGJvb2xlYW47XG59O1xuXG50eXBlIENvbnRhY3RTdWJTZWN0aW9uID0gVW5zdXBwb3J0ZWRTdWJTZWN0aW9uO1xuXG50eXBlIFhNTEZyYWdtZW50U3ViU2VjdGlvbiA9IE9taXQ8QmFzZVN1YlNlY3Rpb24sIFwiYW5ub3RhdGlvblBhdGhcIj4gJiB7XG5cdHR5cGU6IFN1YlNlY3Rpb25UeXBlLlhNTEZyYWdtZW50O1xuXHR0ZW1wbGF0ZTogc3RyaW5nO1xuXHRhY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+O1xufTtcblxudHlwZSBFbXBoYXNpemVkID0ge1xuXHRwYXRoOiBzdHJpbmc7XG59O1xuXG50eXBlIFBsYWNlaG9sZGVyRnJhZ21lbnRTdWJTZWN0aW9uID0gT21pdDxCYXNlU3ViU2VjdGlvbiwgXCJhbm5vdGF0aW9uUGF0aFwiPiAmIHtcblx0dHlwZTogU3ViU2VjdGlvblR5cGUuUGxhY2Vob2xkZXI7XG5cdGFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUFjdGlvbj47XG59O1xuXG50eXBlIE1peGVkU3ViU2VjdGlvbiA9IEJhc2VTdWJTZWN0aW9uICYge1xuXHRjb250ZW50OiBBcnJheTxPYmplY3RQYWdlU3ViU2VjdGlvbj47XG59O1xuXG5leHBvcnQgdHlwZSBGb3JtU3ViU2VjdGlvbiA9IEJhc2VTdWJTZWN0aW9uICYge1xuXHR0eXBlOiBTdWJTZWN0aW9uVHlwZS5Gb3JtO1xuXHRmb3JtRGVmaW5pdGlvbjogRm9ybURlZmluaXRpb247XG5cdGFjdGlvbnM6IENvbnZlcnRlckFjdGlvbltdIHwgQmFzZUFjdGlvbltdO1xufTtcblxuZXhwb3J0IHR5cGUgT2JqZWN0UGFnZVNlY3Rpb24gPSBDb25maWd1cmFibGVPYmplY3QgJiB7XG5cdGlkOiBzdHJpbmc7XG5cdHRpdGxlOiBCaW5kaW5nRXhwcmVzc2lvbjxzdHJpbmc+O1xuXHRzaG93VGl0bGU/OiBCaW5kaW5nRXhwcmVzc2lvbjxib29sZWFuPjtcblx0dmlzaWJsZTogQmluZGluZ0V4cHJlc3Npb248Ym9vbGVhbj47XG5cdHN1YlNlY3Rpb25zOiBPYmplY3RQYWdlU3ViU2VjdGlvbltdO1xufTtcblxudHlwZSBTaWRlQ29udGVudERlZiA9IHtcblx0dGVtcGxhdGU/OiBzdHJpbmc7XG5cdGlkPzogc3RyaW5nO1xuXHRzaWRlQ29udGVudEZhbGxEb3duPzogc3RyaW5nO1xuXHRjb250YWluZXJRdWVyeT86IHN0cmluZztcblx0dmlzaWJsZT86IGJvb2xlYW47XG5cdGVxdWFsU3BsaXQ/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgQ3VzdG9tT2JqZWN0UGFnZVNlY3Rpb24gPSBDdXN0b21FbGVtZW50PE9iamVjdFBhZ2VTZWN0aW9uPjtcblxuZXhwb3J0IHR5cGUgQ3VzdG9tT2JqZWN0UGFnZVN1YlNlY3Rpb24gPSBDdXN0b21FbGVtZW50PE9iamVjdFBhZ2VTdWJTZWN0aW9uPjtcblxuY29uc3QgdGFyZ2V0VGVybXM6IHN0cmluZ1tdID0gW1xuXHRVSUFubm90YXRpb25UZXJtcy5MaW5lSXRlbSxcblx0VUlBbm5vdGF0aW9uVGVybXMuUHJlc2VudGF0aW9uVmFyaWFudCxcblx0VUlBbm5vdGF0aW9uVGVybXMuU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFxuXTtcblxuLy8gVE9ETzogTmVlZCB0byBoYW5kbGUgVGFibGUgY2FzZSBpbnNpZGUgY3JlYXRlU3ViU2VjdGlvbiBmdW5jdGlvbiBpZiBDb2xsZWN0aW9uRmFjZXQgaGFzIFRhYmxlIFJlZmVyZW5jZUZhY2V0XG5jb25zdCBoYXNUYWJsZSA9IChmYWNldHM6IGFueVtdID0gW10pID0+IHtcblx0cmV0dXJuIGZhY2V0cy5zb21lKChmYWNldFR5cGUpID0+IHRhcmdldFRlcm1zLmluZGV4T2YoZmFjZXRUeXBlPy5UYXJnZXQ/LiR0YXJnZXQ/LnRlcm0pID4gLTEpO1xufTtcblxuLyoqXG4gKiBDcmVhdGUgc3Vic2VjdGlvbnMgYmFzZWQgb24gZmFjZXQgZGVmaW5pdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0ZhY2V0VHlwZXNbXX0gZmFjZXRDb2xsZWN0aW9uIENvbGxlY3Rpb24gb2YgZmFjZXRzXG4gKiBAcGFyYW0ge0NvbnZlcnRlckNvbnRleHR9IGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzSGVhZGVyU2VjdGlvbiBUcnVlIGlmIGhlYWRlciBzZWN0aW9uIGlzIGdlbmVyYXRlZCBpbiB0aGlzIGl0ZXJhdGlvblxuICogQHJldHVybnMge09iamVjdFBhZ2VTdWJTZWN0aW9uW119IFRoZSBjdXJyZW50IHN1YnNlY3Rpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTdWJTZWN0aW9ucyhcblx0ZmFjZXRDb2xsZWN0aW9uOiBGYWNldFR5cGVzW10sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGlzSGVhZGVyU2VjdGlvbj86IGJvb2xlYW5cbik6IE9iamVjdFBhZ2VTdWJTZWN0aW9uW10ge1xuXHQvLyBGaXJzdCB3ZSBkZXRlcm1pbmUgd2hpY2ggc3ViIHNlY3Rpb24gd2UgbmVlZCB0byBjcmVhdGVcblx0Y29uc3QgZmFjZXRzVG9DcmVhdGUgPSBmYWNldENvbGxlY3Rpb24ucmVkdWNlKChmYWNldHNUb0NyZWF0ZTogRmFjZXRUeXBlc1tdLCBmYWNldERlZmluaXRpb24pID0+IHtcblx0XHRzd2l0Y2ggKGZhY2V0RGVmaW5pdGlvbi4kVHlwZSkge1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5SZWZlcmVuY2VGYWNldDpcblx0XHRcdFx0ZmFjZXRzVG9DcmVhdGUucHVzaChmYWNldERlZmluaXRpb24pO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuQ29sbGVjdGlvbkZhY2V0OlxuXHRcdFx0XHQvLyBUT0RPIElmIHRoZSBDb2xsZWN0aW9uIEZhY2V0IGhhcyBhIGNoaWxkIG9mIHR5cGUgQ29sbGVjdGlvbiBGYWNldCB3ZSBicmluZyB0aGVtIHVwIG9uZSBsZXZlbCAoRm9ybSArIFRhYmxlIHVzZSBjYXNlKSA/XG5cdFx0XHRcdC8vIGZpcnN0IGNhc2UgZmFjZXQgQ29sbGVjdGlvbiBpcyBjb21iaW5hdGlvbiBvZiBjb2xsZWN0aW9uIGFuZCByZWZlcmVuY2UgZmFjZXQgb3Igbm90IGFsbCBmYWNldHMgYXJlIHJlZmVyZW5jZSBmYWNldHMuXG5cdFx0XHRcdGlmIChmYWNldERlZmluaXRpb24uRmFjZXRzLmZpbmQoKGZhY2V0VHlwZSkgPT4gZmFjZXRUeXBlLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5Db2xsZWN0aW9uRmFjZXQpKSB7XG5cdFx0XHRcdFx0ZmFjZXRzVG9DcmVhdGUuc3BsaWNlKGZhY2V0c1RvQ3JlYXRlLmxlbmd0aCwgMCwgLi4uZmFjZXREZWZpbml0aW9uLkZhY2V0cyk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZmFjZXRzVG9DcmVhdGUucHVzaChmYWNldERlZmluaXRpb24pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5SZWZlcmVuY2VVUkxGYWNldDpcblx0XHRcdFx0Ly8gTm90IHN1cHBvcnRlZFxuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdFx0cmV0dXJuIGZhY2V0c1RvQ3JlYXRlO1xuXHR9LCBbXSk7XG5cblx0Ly8gVGhlbiB3ZSBjcmVhdGUgdGhlIGFjdHVhbCBzdWJzZWN0aW9uc1xuXHRyZXR1cm4gZmFjZXRzVG9DcmVhdGUubWFwKChmYWNldCkgPT5cblx0XHRjcmVhdGVTdWJTZWN0aW9uKGZhY2V0LCBmYWNldHNUb0NyZWF0ZSwgY29udmVydGVyQ29udGV4dCwgMCwgIShmYWNldCBhcyBhbnkpPy5GYWNldHM/Lmxlbmd0aCwgaXNIZWFkZXJTZWN0aW9uKVxuXHQpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgc3Vic2VjdGlvbnMgYmFzZWQgb24gdGhlIGRlZmluaXRpb24gb2YgdGhlIGN1c3RvbSBoZWFkZXIgZmFjZXQuXG4gKlxuICogQHBhcmFtIHtDb252ZXJ0ZXJDb250ZXh0fSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMge09iamVjdFBhZ2VTdWJTZWN0aW9uW119IFRoZSBjdXJyZW50IHN1YnNlY3Rpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDdXN0b21IZWFkZXJGYWNldFN1YlNlY3Rpb25zKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBPYmplY3RQYWdlU3ViU2VjdGlvbltdIHtcblx0Y29uc3QgY3VzdG9tSGVhZGVyRmFjZXRzOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21PYmplY3RQYWdlSGVhZGVyRmFjZXQ+ID0gZ2V0SGVhZGVyRmFjZXRzRnJvbU1hbmlmZXN0KFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuZ2V0SGVhZGVyRmFjZXRzKClcblx0KTtcblx0Y29uc3QgYUN1c3RvbUhlYWRlckZhY2V0czogQ3VzdG9tT2JqZWN0UGFnZUhlYWRlckZhY2V0W10gPSBbXTtcblx0T2JqZWN0LmtleXMoY3VzdG9tSGVhZGVyRmFjZXRzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcblx0XHRhQ3VzdG9tSGVhZGVyRmFjZXRzLnB1c2goY3VzdG9tSGVhZGVyRmFjZXRzW2tleV0pO1xuXHRcdHJldHVybiBhQ3VzdG9tSGVhZGVyRmFjZXRzO1xuXHR9KTtcblx0Y29uc3QgZmFjZXRzVG9DcmVhdGUgPSBhQ3VzdG9tSGVhZGVyRmFjZXRzLnJlZHVjZSgoZmFjZXRzVG9DcmVhdGU6IEN1c3RvbU9iamVjdFBhZ2VIZWFkZXJGYWNldFtdLCBjdXN0b21IZWFkZXJGYWNldCkgPT4ge1xuXHRcdGlmIChjdXN0b21IZWFkZXJGYWNldC50ZW1wbGF0ZUVkaXQpIHtcblx0XHRcdGZhY2V0c1RvQ3JlYXRlLnB1c2goY3VzdG9tSGVhZGVyRmFjZXQpO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFjZXRzVG9DcmVhdGU7XG5cdH0sIFtdKTtcblxuXHRyZXR1cm4gZmFjZXRzVG9DcmVhdGUubWFwKChjdXN0b21IZWFkZXJGYWNldCkgPT4gY3JlYXRlQ3VzdG9tSGVhZGVyRmFjZXRTdWJTZWN0aW9uKGN1c3RvbUhlYWRlckZhY2V0KSk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHN1YnNlY3Rpb24gYmFzZWQgb24gYSBjdXN0b20gaGVhZGVyIGZhY2V0LlxuICpcbiAqIEBwYXJhbSBjdXN0b21IZWFkZXJGYWNldCBBIGN1c3RvbSBoZWFkZXIgZmFjZXRcbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0UGFnZVN1YlNlY3Rpb259IEEgZGVmaW5pdGlvbiBmb3IgYSBzdWJzZWN0aW9uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUN1c3RvbUhlYWRlckZhY2V0U3ViU2VjdGlvbihjdXN0b21IZWFkZXJGYWNldDogQ3VzdG9tT2JqZWN0UGFnZUhlYWRlckZhY2V0KTogT2JqZWN0UGFnZVN1YlNlY3Rpb24ge1xuXHRjb25zdCBzdWJTZWN0aW9uSUQgPSBDdXN0b21TdWJTZWN0aW9uSUQoY3VzdG9tSGVhZGVyRmFjZXQua2V5KTtcblx0Y29uc3Qgc3ViU2VjdGlvbjogWE1MRnJhZ21lbnRTdWJTZWN0aW9uID0ge1xuXHRcdGlkOiBzdWJTZWN0aW9uSUQsXG5cdFx0a2V5OiBjdXN0b21IZWFkZXJGYWNldC5rZXksXG5cdFx0dGl0bGU6IGN1c3RvbUhlYWRlckZhY2V0LnRpdGxlLFxuXHRcdHR5cGU6IFN1YlNlY3Rpb25UeXBlLlhNTEZyYWdtZW50LFxuXHRcdHRlbXBsYXRlOiBjdXN0b21IZWFkZXJGYWNldC50ZW1wbGF0ZUVkaXQgfHwgXCJcIixcblx0XHR2aXNpYmxlOiBjdXN0b21IZWFkZXJGYWNldC52aXNpYmxlLFxuXHRcdGxldmVsOiAxLFxuXHRcdHNpZGVDb250ZW50OiB1bmRlZmluZWQsXG5cdFx0c3Rhc2hlZDogY3VzdG9tSGVhZGVyRmFjZXQuc3Rhc2hlZCxcblx0XHRmbGV4U2V0dGluZ3M6IGN1c3RvbUhlYWRlckZhY2V0LmZsZXhTZXR0aW5ncyxcblx0XHRhY3Rpb25zOiB7fVxuXHR9O1xuXHRyZXR1cm4gc3ViU2VjdGlvbjtcbn1cblxuLy8gZnVuY3Rpb24gaXNUYXJnZXRGb3JDb21wbGlhbnQoYW5ub3RhdGlvblBhdGg6IEFubm90YXRpb25QYXRoKSB7XG4vLyBcdHJldHVybiAvLipjb21cXC5zYXBcXC52b2NhYnVsYXJpZXNcXC5VSVxcLnYxXFwuKEZpZWxkR3JvdXB8SWRlbnRpZmljYXRpb258RGF0YVBvaW50fFN0YXR1c0luZm8pLiovLnRlc3QoYW5ub3RhdGlvblBhdGgudmFsdWUpO1xuLy8gfVxuY29uc3QgZ2V0U3ViU2VjdGlvbktleSA9IChmYWNldERlZmluaXRpb246IEZhY2V0VHlwZXMsIGZhbGxiYWNrOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuXHRyZXR1cm4gZmFjZXREZWZpbml0aW9uLklEPy50b1N0cmluZygpIHx8IGZhY2V0RGVmaW5pdGlvbi5MYWJlbD8udG9TdHJpbmcoKSB8fCBmYWxsYmFjaztcbn07XG4vKipcbiAqIEFkZHMgRm9ybSBtZW51IGFjdGlvbiB0byBhbGwgZm9ybSBhY3Rpb25zLCByZW1vdmVzIGR1cGxpY2F0ZSBhY3Rpb25zIGFuZCBoaWRkZW4gYWN0aW9ucy5cbiAqIEBwYXJhbSBhY3Rpb25zIFRoZSBhY3Rpb25zIGludm9sdmVkXG4gKiBAcGFyYW0gZmFjZXREZWZpbml0aW9uIFRoZSBkZWZpbml0aW9uIGZvciB0aGUgZmFjZXRcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMge0Jhc2VBY3Rpb25bXSB8IENvbnZlcnRlckFjdGlvbltdfVxuICovXG5mdW5jdGlvbiBhZGRGb3JtTWVudUFjdGlvbnMoXG5cdGFjdGlvbnM6IENvbnZlcnRlckFjdGlvbltdLFxuXHRmYWNldERlZmluaXRpb246IEZhY2V0VHlwZXMsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IEJhc2VBY3Rpb25bXSB8IENvbnZlcnRlckFjdGlvbltdIHtcblx0Y29uc3QgaGlkZGVuQWN0aW9uczogQmFzZUFjdGlvbltdID0gZ2V0Rm9ybUhpZGRlbkFjdGlvbnMoZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KSB8fCBbXSxcblx0XHRmb3JtQWN0aW9uczogQ29uZmlndXJhYmxlUmVjb3JkPE1hbmlmZXN0QWN0aW9uPiA9IGdldEZvcm1BY3Rpb25zKGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dCksXG5cdFx0Zm9ybUFsbEFjdGlvbnMgPSBpbnNlcnRDdXN0b21FbGVtZW50cyhcblx0XHRcdGFjdGlvbnMsXG5cdFx0XHRnZXRBY3Rpb25zRnJvbU1hbmlmZXN0KGZvcm1BY3Rpb25zLCBjb252ZXJ0ZXJDb250ZXh0LCBhY3Rpb25zLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgaGlkZGVuQWN0aW9ucyksXG5cdFx0XHR7IGNvbW1hbmQ6IFwib3ZlcndyaXRlXCIgfVxuXHRcdCk7XG5cdHJldHVybiBmb3JtQWxsQWN0aW9ucyA/IGdldFZpc2liaWxpdHlFbmFibGVtZW50Rm9ybU1lbnVBY3Rpb25zKHJlbW92ZUR1cGxpY2F0ZUFjdGlvbnMoZm9ybUFsbEFjdGlvbnMpKSA6IGFjdGlvbnM7XG59XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBhY3Rpb24gZm9ybSBhIGZhY2V0LlxuICogQHBhcmFtIGZhY2V0RGVmaW5pdGlvblxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIHtDb252ZXJ0ZXJBY3Rpb25bXSB8IEJhc2VBY3Rpb25bXX0gVGhlIGN1cnJlbnQgZmFjZXQgYWN0aW9uc1xuICovXG5mdW5jdGlvbiBnZXRGYWNldEFjdGlvbnMoZmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzLCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogQmFzZUFjdGlvbltdIHwgQ29udmVydGVyQWN0aW9uW10ge1xuXHRsZXQgYWN0aW9ucyA9IG5ldyBBcnJheTxDb252ZXJ0ZXJBY3Rpb24+KCk7XG5cdHN3aXRjaCAoZmFjZXREZWZpbml0aW9uLiRUeXBlKSB7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5Db2xsZWN0aW9uRmFjZXQ6XG5cdFx0XHRhY3Rpb25zID0gKFxuXHRcdFx0XHRmYWNldERlZmluaXRpb24uRmFjZXRzLmZpbHRlcigoZmFjZXREZWZpbml0aW9uKSA9PiBpc1JlZmVyZW5jZUZhY2V0KGZhY2V0RGVmaW5pdGlvbikpIGFzIFJlZmVyZW5jZUZhY2V0VHlwZXNbXVxuXHRcdFx0KS5yZWR1Y2UoXG5cdFx0XHRcdChhY3Rpb25zOiBDb252ZXJ0ZXJBY3Rpb25bXSwgZmFjZXREZWZpbml0aW9uKSA9PiBjcmVhdGVGb3JtQWN0aW9uUmVkdWNlcihhY3Rpb25zLCBmYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdFx0XHRbXVxuXHRcdFx0KTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuUmVmZXJlbmNlRmFjZXQ6XG5cdFx0XHRhY3Rpb25zID0gY3JlYXRlRm9ybUFjdGlvblJlZHVjZXIoW10sIGZhY2V0RGVmaW5pdGlvbiBhcyBSZWZlcmVuY2VGYWNldFR5cGVzLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRcdGJyZWFrO1xuXHR9XG5cdHJldHVybiBhZGRGb3JtTWVudUFjdGlvbnMoYWN0aW9ucywgZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KTtcbn1cbi8qKlxuICogUmV0cnVucyB0aGUgYnV0dG9uIHR5cGUgYmFzZWQgb24gQFVJLkVtcGhhc2l6ZWQgYW5ub3RhdGlvbi5cbiAqIEBwYXJhbSBFbXBoYXNpemVkIEVtcGhhc2l6ZWQgYW5ub3RhdGlvbiB2YWx1ZS5cbiAqIEByZXR1cm5zIHtCdXR0b25UeXBlIHwgc3RyaW5nfSBUaGUgYnV0dG9uIHR5cGUgb3IgcGF0aCBiYXNlZCBleHByZXNzaW9uLlxuICovXG5mdW5jdGlvbiBnZXRCdXR0b25UeXBlKEVtcGhhc2l6ZWQ6IEVtcGhhc2l6ZWQpOiBCdXR0b25UeXBlIHwgc3RyaW5nIHtcblx0Y29uc3QgUGF0aEZvckJ1dHRvblR5cGU6IHN0cmluZyA9IEVtcGhhc2l6ZWQ/LnBhdGg7XG5cdGlmIChQYXRoRm9yQnV0dG9uVHlwZSkge1xuXHRcdHJldHVybiBcIns9IFwiICsgXCIhJHtcIiArIFBhdGhGb3JCdXR0b25UeXBlICsgXCJ9ID8gJ1wiICsgQnV0dG9uVHlwZS5UcmFuc3BhcmVudCArIFwiJyA6ICR7XCIgKyBQYXRoRm9yQnV0dG9uVHlwZSArIFwifVwiICsgXCJ9XCI7XG5cdH0gZWxzZSBpZiAoRW1waGFzaXplZCkge1xuXHRcdHJldHVybiBCdXR0b25UeXBlLkdob3N0O1xuXHR9XG5cdHJldHVybiBCdXR0b25UeXBlLlRyYW5zcGFyZW50O1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIHN1YnNlY3Rpb24gYmFzZWQgb24gRmFjZXRUeXBlcy5cbiAqIEBwYXJhbSBmYWNldERlZmluaXRpb25cbiAqIEBwYXJhbSBmYWNldHNUb0NyZWF0ZVxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBsZXZlbFxuICogQHBhcmFtIGhhc1NpbmdsZUNvbnRlbnRcbiAqIEBwYXJhbSBpc0hlYWRlclNlY3Rpb25cbiAqIEByZXR1cm5zIHtPYmplY3RQYWdlU3ViU2VjdGlvbn0gQSBzdWJzZWN0aW9uIGRlZmluaXRpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVN1YlNlY3Rpb24oXG5cdGZhY2V0RGVmaW5pdGlvbjogRmFjZXRUeXBlcyxcblx0ZmFjZXRzVG9DcmVhdGU6IEZhY2V0VHlwZXNbXSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0bGV2ZWw6IG51bWJlcixcblx0aGFzU2luZ2xlQ29udGVudDogYm9vbGVhbixcblx0aXNIZWFkZXJTZWN0aW9uPzogYm9vbGVhblxuKTogT2JqZWN0UGFnZVN1YlNlY3Rpb24ge1xuXHRjb25zdCBzdWJTZWN0aW9uSUQgPSBTdWJTZWN0aW9uSUQoeyBGYWNldDogZmFjZXREZWZpbml0aW9uIH0pO1xuXHRjb25zdCBvSGlkZGVuQW5ub3RhdGlvbjogYW55ID0gZmFjZXREZWZpbml0aW9uLmFubm90YXRpb25zPy5VST8uSGlkZGVuO1xuXHRjb25zdCBpc1Zpc2libGUgPSBjb21waWxlQmluZGluZyhub3QoZXF1YWwodHJ1ZSwgYW5ub3RhdGlvbkV4cHJlc3Npb24ob0hpZGRlbkFubm90YXRpb24pKSkpO1xuXHRjb25zdCBpc0R5bmFtaWNFeHByZXNzaW9uID1cblx0XHRpc1Zpc2libGUgJiYgdHlwZW9mIGlzVmlzaWJsZSA9PT0gXCJzdHJpbmdcIiAmJiBpc1Zpc2libGUuaW5kZXhPZihcIns9XCIpID09PSAwICYmIG9IaWRkZW5Bbm5vdGF0aW9uPy50eXBlICE9PSBcIlBhdGhcIjtcblx0Y29uc3QgaXNWaXNpYmxlRHluYW1pY0V4cHJlc3Npb24gPVxuXHRcdGlzVmlzaWJsZSAmJiBpc0R5bmFtaWNFeHByZXNzaW9uID8gaXNWaXNpYmxlLnN1YnN0cmluZyhpc1Zpc2libGUuaW5kZXhPZihcIns9XCIpICsgMiwgaXNWaXNpYmxlLmxhc3RJbmRleE9mKFwifVwiKSkgOiBmYWxzZTtcblx0Y29uc3QgdGl0bGUgPSBjb21waWxlQmluZGluZyhhbm5vdGF0aW9uRXhwcmVzc2lvbihmYWNldERlZmluaXRpb24uTGFiZWwpKTtcblx0Y29uc3Qgc3ViU2VjdGlvbjogQmFzZVN1YlNlY3Rpb24gPSB7XG5cdFx0aWQ6IHN1YlNlY3Rpb25JRCxcblx0XHRrZXk6IGdldFN1YlNlY3Rpb25LZXkoZmFjZXREZWZpbml0aW9uLCBzdWJTZWN0aW9uSUQpLFxuXHRcdHRpdGxlOiB0aXRsZSxcblx0XHR0eXBlOiBTdWJTZWN0aW9uVHlwZS5Vbmtub3duLFxuXHRcdGFubm90YXRpb25QYXRoOiBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgoZmFjZXREZWZpbml0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSksXG5cdFx0dmlzaWJsZTogaXNWaXNpYmxlLFxuXHRcdGlzVmlzaWJpbGl0eUR5bmFtaWM6IGlzRHluYW1pY0V4cHJlc3Npb24sXG5cdFx0bGV2ZWw6IGxldmVsLFxuXHRcdHNpZGVDb250ZW50OiB1bmRlZmluZWRcblx0fTtcblx0aWYgKGlzSGVhZGVyU2VjdGlvbikge1xuXHRcdHN1YlNlY3Rpb24uc3Rhc2hlZCA9IGdldFN0YXNoZWRTZXR0aW5nc0ZvckhlYWRlckZhY2V0KGZhY2V0RGVmaW5pdGlvbiwgZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRzdWJTZWN0aW9uLmZsZXhTZXR0aW5ncyA9IHtcblx0XHRcdGRlc2lnbnRpbWU6IGdldERlc2lnblRpbWVNZXRhZGF0YVNldHRpbmdzRm9ySGVhZGVyRmFjZXQoZmFjZXREZWZpbml0aW9uLCBmYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpXG5cdFx0fTtcblx0fVxuXHRsZXQgY29udGVudDogQXJyYXk8T2JqZWN0UGFnZVN1YlNlY3Rpb24+ID0gW107XG5cdGNvbnN0IHRhYmxlQ29udGVudDogQXJyYXk8T2JqZWN0UGFnZVN1YlNlY3Rpb24+ID0gW107XG5cdGNvbnN0IGluZGV4OiBBcnJheTxudW1iZXI+ID0gW107XG5cdGxldCB1bnN1cHBvcnRlZFRleHQgPSBcIlwiO1xuXHRsZXZlbCsrO1xuXHRzd2l0Y2ggKGZhY2V0RGVmaW5pdGlvbi4kVHlwZSkge1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuQ29sbGVjdGlvbkZhY2V0OlxuXHRcdFx0Y29uc3QgZmFjZXRzID0gZmFjZXREZWZpbml0aW9uLkZhY2V0cztcblx0XHRcdGlmIChoYXNUYWJsZShmYWNldHMpKSB7XG5cdFx0XHRcdC8vIGlmIHdlIGhhdmUgdGFibGVzIGluIGEgY29sbGVjdGlvbiBmYWNldCB0aGVuIHdlIGNyZWF0ZSBzZXBhcmF0ZSBzdWJzZWN0aW9uIGZvciB0aGVtXG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgZmFjZXRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0aWYgKHRhcmdldFRlcm1zLmluZGV4T2YoKGZhY2V0c1tpXSBhcyBhbnkpLlRhcmdldD8uJHRhcmdldD8udGVybSkgPiAtMSkge1xuXHRcdFx0XHRcdFx0Ly9jcmVhdGluZyBzZXBhcmF0ZSBhcnJheSBmb3IgdGFibGVzXG5cdFx0XHRcdFx0XHR0YWJsZUNvbnRlbnQucHVzaChjcmVhdGVTdWJTZWN0aW9uKGZhY2V0c1tpXSwgW10sIGNvbnZlcnRlckNvbnRleHQsIGxldmVsLCBmYWNldHMubGVuZ3RoID09PSAxLCBpc0hlYWRlclNlY3Rpb24pKTtcblx0XHRcdFx0XHRcdGluZGV4LnB1c2goaSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGZvciAobGV0IGkgPSBpbmRleC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuXHRcdFx0XHRcdC8vcmVtb3ZlIHRhYmxlIGZhY2V0cyBmcm9tIGZhY2V0IGRlZmluaXRpb25cblx0XHRcdFx0XHRmYWNldHMuc3BsaWNlKGluZGV4W2ldLCAxKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZmFjZXRzLmxlbmd0aCkge1xuXHRcdFx0XHRcdGZhY2V0RGVmaW5pdGlvbi5GYWNldHMgPSBmYWNldHM7XG5cdFx0XHRcdFx0Ly9jcmVhdGUgYSBmb3JtIHN1YnNlY3Rpb24gZnJvbSB0aGUgcmVtYWluaW5nIGZhY2V0c1xuXHRcdFx0XHRcdGNvbnRlbnQucHVzaChjcmVhdGVTdWJTZWN0aW9uKGZhY2V0RGVmaW5pdGlvbiwgW10sIGNvbnZlcnRlckNvbnRleHQsIGxldmVsLCBoYXNTaW5nbGVDb250ZW50LCBpc0hlYWRlclNlY3Rpb24pKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb250ZW50ID0gY29udGVudC5jb25jYXQodGFibGVDb250ZW50KTtcblx0XHRcdFx0Y29uc3QgbWl4ZWRTdWJTZWN0aW9uOiBNaXhlZFN1YlNlY3Rpb24gPSB7XG5cdFx0XHRcdFx0Li4uc3ViU2VjdGlvbixcblx0XHRcdFx0XHR0eXBlOiBTdWJTZWN0aW9uVHlwZS5NaXhlZCxcblx0XHRcdFx0XHRsZXZlbDogbGV2ZWwsXG5cdFx0XHRcdFx0Y29udGVudDogY29udGVudFxuXHRcdFx0XHR9O1xuXHRcdFx0XHRyZXR1cm4gbWl4ZWRTdWJTZWN0aW9uO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgYWN0aW9ucyA9IGdldEZhY2V0QWN0aW9ucyhmYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdFx0XHRcdGZvcm1Db2xsZWN0aW9uU3ViU2VjdGlvbjogRm9ybVN1YlNlY3Rpb24gPSB7XG5cdFx0XHRcdFx0XHQuLi5zdWJTZWN0aW9uLFxuXHRcdFx0XHRcdFx0dHlwZTogU3ViU2VjdGlvblR5cGUuRm9ybSxcblx0XHRcdFx0XHRcdGZvcm1EZWZpbml0aW9uOiBjcmVhdGVGb3JtRGVmaW5pdGlvbihmYWNldERlZmluaXRpb24sIGlzVmlzaWJsZSwgY29udmVydGVyQ29udGV4dCwgYWN0aW9ucyksXG5cdFx0XHRcdFx0XHRsZXZlbDogbGV2ZWwsXG5cdFx0XHRcdFx0XHRhY3Rpb25zOiBhY3Rpb25zLmZpbHRlcigoYWN0aW9uKSA9PiBhY3Rpb24uZmFjZXROYW1lID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0cmV0dXJuIGZvcm1Db2xsZWN0aW9uU3ViU2VjdGlvbjtcblx0XHRcdH1cblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLlJlZmVyZW5jZUZhY2V0OlxuXHRcdFx0aWYgKCFmYWNldERlZmluaXRpb24uVGFyZ2V0LiR0YXJnZXQpIHtcblx0XHRcdFx0dW5zdXBwb3J0ZWRUZXh0ID0gYFVuYWJsZSB0byBmaW5kIGFubm90YXRpb25QYXRoICR7ZmFjZXREZWZpbml0aW9uLlRhcmdldC52YWx1ZX1gO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c3dpdGNoIChmYWNldERlZmluaXRpb24uVGFyZ2V0LiR0YXJnZXQudGVybSkge1xuXHRcdFx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVGVybXMuTGluZUl0ZW06XG5cdFx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5DaGFydDpcblx0XHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLlByZXNlbnRhdGlvblZhcmlhbnQ6XG5cdFx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50OlxuXHRcdFx0XHRcdFx0Y29uc3QgcHJlc2VudGF0aW9uID0gZ2V0RGF0YVZpc3VhbGl6YXRpb25Db25maWd1cmF0aW9uKFxuXHRcdFx0XHRcdFx0XHRmYWNldERlZmluaXRpb24uVGFyZ2V0LnZhbHVlLFxuXHRcdFx0XHRcdFx0XHRnZXRDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFuY2UoZmFjZXREZWZpbml0aW9uLCBmYWNldHNUb0NyZWF0ZSwgY29udmVydGVyQ29udGV4dCksXG5cdFx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdFx0aXNIZWFkZXJTZWN0aW9uXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0Y29uc3QgY29udHJvbFRpdGxlID1cblx0XHRcdFx0XHRcdFx0KHByZXNlbnRhdGlvbi52aXN1YWxpemF0aW9uc1swXSBhcyBhbnkpPy5hbm5vdGF0aW9uPy50aXRsZSB8fCAocHJlc2VudGF0aW9uLnZpc3VhbGl6YXRpb25zWzBdIGFzIGFueSk/LnRpdGxlO1xuXHRcdFx0XHRcdFx0Y29uc3Qgc2hvd1RpdGxlID0gaXNTdWJzZWN0aW9uVGl0bGVTaG93bihoYXNTaW5nbGVDb250ZW50LCBzdWJTZWN0aW9uLnRpdGxlLCBjb250cm9sVGl0bGUpO1xuXHRcdFx0XHRcdFx0Y29uc3QgdGl0bGVWaXNpYmxlRXhwcmVzc2lvbiA9IGlzVmlzaWJsZSAmJiB0aXRsZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiAodGl0bGUgPyBpc1Zpc2libGUgOiBmYWxzZSk7XG5cdFx0XHRcdFx0XHRjb25zdCBkYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb246IERhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvbiA9IHtcblx0XHRcdFx0XHRcdFx0Li4uc3ViU2VjdGlvbixcblx0XHRcdFx0XHRcdFx0dHlwZTogU3ViU2VjdGlvblR5cGUuRGF0YVZpc3VhbGl6YXRpb24sXG5cdFx0XHRcdFx0XHRcdGxldmVsOiBsZXZlbCxcblx0XHRcdFx0XHRcdFx0cHJlc2VudGF0aW9uOiBwcmVzZW50YXRpb24sXG5cdFx0XHRcdFx0XHRcdHNob3dUaXRsZTogc2hvd1RpdGxlLFxuXHRcdFx0XHRcdFx0XHR0aXRsZVZpc2libGU6IGlzRHluYW1pY0V4cHJlc3Npb25cblx0XHRcdFx0XHRcdFx0XHQ/IGB7PSAoJHtpc1Zpc2libGVEeW5hbWljRXhwcmVzc2lvbn0pICYmICgnJHt0aXRsZX0nICE9PSd1bmRlZmluZWQnKSAmJiAoJHtzaG93VGl0bGV9ID8gdHJ1ZSA6IGZhbHNlKSB9YFxuXHRcdFx0XHRcdFx0XHRcdDogdGl0bGVWaXNpYmxlRXhwcmVzc2lvblxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdHJldHVybiBkYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb247XG5cblx0XHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLkZpZWxkR3JvdXA6XG5cdFx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5JZGVudGlmaWNhdGlvbjpcblx0XHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLkRhdGFQb2ludDpcblx0XHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLlN0YXR1c0luZm86XG5cdFx0XHRcdFx0Y2FzZSBDb21tdW5pY2F0aW9uQW5ub3RhdGlvblRlcm1zLkNvbnRhY3Q6XG5cdFx0XHRcdFx0XHQvLyBBbGwgdGhvc2UgZWxlbWVudCBiZWxvbmcgdG8gYSBmb3JtIGZhY2V0XG5cdFx0XHRcdFx0XHRjb25zdCBhY3Rpb25zID0gZ2V0RmFjZXRBY3Rpb25zKGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dCksXG5cdFx0XHRcdFx0XHRcdGZvcm1FbGVtZW50U3ViU2VjdGlvbjogRm9ybVN1YlNlY3Rpb24gPSB7XG5cdFx0XHRcdFx0XHRcdFx0Li4uc3ViU2VjdGlvbixcblx0XHRcdFx0XHRcdFx0XHR0eXBlOiBTdWJTZWN0aW9uVHlwZS5Gb3JtLFxuXHRcdFx0XHRcdFx0XHRcdGxldmVsOiBsZXZlbCxcblx0XHRcdFx0XHRcdFx0XHRmb3JtRGVmaW5pdGlvbjogY3JlYXRlRm9ybURlZmluaXRpb24oZmFjZXREZWZpbml0aW9uLCBpc1Zpc2libGUsIGNvbnZlcnRlckNvbnRleHQsIGFjdGlvbnMpLFxuXHRcdFx0XHRcdFx0XHRcdGFjdGlvbnM6IGFjdGlvbnMuZmlsdGVyKChhY3Rpb24pID0+IGFjdGlvbi5mYWNldE5hbWUgPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdHJldHVybiBmb3JtRWxlbWVudFN1YlNlY3Rpb247XG5cblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0dW5zdXBwb3J0ZWRUZXh0ID0gYEZvciAke2ZhY2V0RGVmaW5pdGlvbi5UYXJnZXQuJHRhcmdldC50ZXJtfSBGcmFnbWVudGA7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5SZWZlcmVuY2VVUkxGYWNldDpcblx0XHRcdHVuc3VwcG9ydGVkVGV4dCA9IFwiRm9yIFJlZmVyZW5jZSBVUkwgRmFjZXRcIjtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRicmVhaztcblx0fVxuXHQvLyBJZiB3ZSByZWFjaCBoZXJlIHdlIGVuZGVkIHVwIHdpdGggYW4gdW5zdXBwb3J0ZWQgU3ViU2VjdGlvbiB0eXBlXG5cdGNvbnN0IHVuc3VwcG9ydGVkU3ViU2VjdGlvbjogVW5zdXBwb3J0ZWRTdWJTZWN0aW9uID0ge1xuXHRcdC4uLnN1YlNlY3Rpb24sXG5cdFx0dGV4dDogdW5zdXBwb3J0ZWRUZXh0XG5cdH07XG5cdHJldHVybiB1bnN1cHBvcnRlZFN1YlNlY3Rpb247XG59XG5mdW5jdGlvbiBpc1N1YnNlY3Rpb25UaXRsZVNob3duKGhhc1NpbmdsZUNvbnRlbnQ6IGJvb2xlYW4sIHN1YlNlY3Rpb25UaXRsZTogQmluZGluZ0V4cHJlc3Npb248c3RyaW5nPiwgY29udHJvbFRpdGxlOiBzdHJpbmcpOiBib29sZWFuIHtcblx0aWYgKGhhc1NpbmdsZUNvbnRlbnQgJiYgY29udHJvbFRpdGxlID09PSBzdWJTZWN0aW9uVGl0bGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0cmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiBjcmVhdGVGb3JtQWN0aW9uUmVkdWNlcihcblx0YWN0aW9uczogQ29udmVydGVyQWN0aW9uW10sXG5cdGZhY2V0RGVmaW5pdGlvbjogUmVmZXJlbmNlRmFjZXRUeXBlcyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogQ29udmVydGVyQWN0aW9uW10ge1xuXHRjb25zdCByZWZlcmVuY2VUYXJnZXQ6IEFubm90YXRpb25UZXJtPGFueT4gPSBmYWNldERlZmluaXRpb24uVGFyZ2V0LiR0YXJnZXQ7XG5cdGNvbnN0IHRhcmdldFZhbHVlID0gZmFjZXREZWZpbml0aW9uLlRhcmdldC52YWx1ZTtcblx0bGV0IG1hbmlmZXN0QWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPiA9IHt9O1xuXHRsZXQgZGF0YUZpZWxkQ29sbGVjdGlvbjogRGF0YUZpZWxkQWJzdHJhY3RUeXBlc1tdID0gW107XG5cdGxldCBbbmF2aWdhdGlvblByb3BlcnR5UGF0aF06IGFueSA9IHRhcmdldFZhbHVlLnNwbGl0KFwiQFwiKTtcblx0aWYgKG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgubGVuZ3RoID4gMCkge1xuXHRcdGlmIChuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxhc3RJbmRleE9mKFwiL1wiKSA9PT0gbmF2aWdhdGlvblByb3BlcnR5UGF0aC5sZW5ndGggLSAxKSB7XG5cdFx0XHRuYXZpZ2F0aW9uUHJvcGVydHlQYXRoID0gbmF2aWdhdGlvblByb3BlcnR5UGF0aC5zdWJzdHIoMCwgbmF2aWdhdGlvblByb3BlcnR5UGF0aC5sZW5ndGggLSAxKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0bmF2aWdhdGlvblByb3BlcnR5UGF0aCA9IHVuZGVmaW5lZDtcblx0fVxuXG5cdGlmIChyZWZlcmVuY2VUYXJnZXQpIHtcblx0XHRzd2l0Y2ggKHJlZmVyZW5jZVRhcmdldC50ZXJtKSB7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLkZpZWxkR3JvdXA6XG5cdFx0XHRcdGRhdGFGaWVsZENvbGxlY3Rpb24gPSAocmVmZXJlbmNlVGFyZ2V0IGFzIEZpZWxkR3JvdXApLkRhdGE7XG5cdFx0XHRcdG1hbmlmZXN0QWN0aW9ucyA9IGdldEFjdGlvbnNGcm9tTWFuaWZlc3QoXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHJlZmVyZW5jZVRhcmdldCkuYWN0aW9ucyxcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRmYWNldERlZmluaXRpb24uZnVsbHlRdWFsaWZpZWROYW1lIGFzIHN0cmluZ1xuXHRcdFx0XHQpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVGVybXMuSWRlbnRpZmljYXRpb246XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLlN0YXR1c0luZm86XG5cdFx0XHRcdGlmIChyZWZlcmVuY2VUYXJnZXQucXVhbGlmaWVyKSB7XG5cdFx0XHRcdFx0ZGF0YUZpZWxkQ29sbGVjdGlvbiA9IHJlZmVyZW5jZVRhcmdldCBhcyBJZGVudGlmaWNhdGlvbiB8IFN0YXR1c0luZm87XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cblx0YWN0aW9ucyA9IGRhdGFGaWVsZENvbGxlY3Rpb24ucmVkdWNlKChhY3Rpb25zLCBkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpID0+IHtcblx0XHRjb25zdCBVSUFubm90YXRpb246IGFueSA9IGRhdGFGaWVsZD8uYW5ub3RhdGlvbnM/LlVJO1xuXHRcdHN3aXRjaCAoZGF0YUZpZWxkLiRUeXBlKSB7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbjpcblx0XHRcdFx0aWYgKGRhdGFGaWVsZC5SZXF1aXJlc0NvbnRleHQ/LnZhbHVlT2YoKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0XHRcdC5nZXREaWFnbm9zdGljcygpXG5cdFx0XHRcdFx0XHQuYWRkSXNzdWUoSXNzdWVDYXRlZ29yeS5Bbm5vdGF0aW9uLCBJc3N1ZVNldmVyaXR5LkxvdywgSXNzdWVUeXBlLk1BTEZPUk1FRF9EQVRBRklFTERfRk9SX0lCTi5SRVFVSVJFU0NPTlRFWFQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChkYXRhRmllbGQuSW5saW5lPy52YWx1ZU9mKCkgPT09IHRydWUpIHtcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0XHQuZ2V0RGlhZ25vc3RpY3MoKVxuXHRcdFx0XHRcdFx0LmFkZElzc3VlKElzc3VlQ2F0ZWdvcnkuQW5ub3RhdGlvbiwgSXNzdWVTZXZlcml0eS5Mb3csIElzc3VlVHlwZS5NQUxGT1JNRURfREFUQUZJRUxEX0ZPUl9JQk4uSU5MSU5FKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZGF0YUZpZWxkLkRldGVybWluaW5nPy52YWx1ZU9mKCkgPT09IHRydWUpIHtcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0XHQuZ2V0RGlhZ25vc3RpY3MoKVxuXHRcdFx0XHRcdFx0LmFkZElzc3VlKElzc3VlQ2F0ZWdvcnkuQW5ub3RhdGlvbiwgSXNzdWVTZXZlcml0eS5Mb3csIElzc3VlVHlwZS5NQUxGT1JNRURfREFUQUZJRUxEX0ZPUl9JQk4uREVURVJNSU5JTkcpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IG1OYXZpZ2F0aW9uUGFyYW1ldGVyczogYW55ID0ge307XG5cdFx0XHRcdGlmIChkYXRhRmllbGQuTWFwcGluZykge1xuXHRcdFx0XHRcdG1OYXZpZ2F0aW9uUGFyYW1ldGVycy5zZW1hbnRpY09iamVjdE1hcHBpbmcgPSBnZXRTZW1hbnRpY09iamVjdE1hcHBpbmcoZGF0YUZpZWxkLk1hcHBpbmcpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGFjdGlvbnMucHVzaCh7XG5cdFx0XHRcdFx0dHlwZTogQWN0aW9uVHlwZS5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24sXG5cdFx0XHRcdFx0aWQ6IEZvcm1JRCh7IEZhY2V0OiBmYWNldERlZmluaXRpb24gfSwgZGF0YUZpZWxkKSxcblx0XHRcdFx0XHRrZXk6IEtleUhlbHBlci5nZW5lcmF0ZUtleUZyb21EYXRhRmllbGQoZGF0YUZpZWxkKSxcblx0XHRcdFx0XHR0ZXh0OiBkYXRhRmllbGQuTGFiZWw/LnRvU3RyaW5nKCksXG5cdFx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IFwiXCIsXG5cdFx0XHRcdFx0ZW5hYmxlZDpcblx0XHRcdFx0XHRcdGRhdGFGaWVsZC5OYXZpZ2F0aW9uQXZhaWxhYmxlICE9PSB1bmRlZmluZWRcblx0XHRcdFx0XHRcdFx0PyBjb21waWxlQmluZGluZyhlcXVhbChhbm5vdGF0aW9uRXhwcmVzc2lvbihkYXRhRmllbGQuTmF2aWdhdGlvbkF2YWlsYWJsZT8udmFsdWVPZigpKSwgdHJ1ZSkpXG5cdFx0XHRcdFx0XHRcdDogdHJ1ZSxcblx0XHRcdFx0XHR2aXNpYmxlOiBjb21waWxlQmluZGluZyhub3QoZXF1YWwoYW5ub3RhdGlvbkV4cHJlc3Npb24oZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkpLCB0cnVlKSkpLFxuXHRcdFx0XHRcdGJ1dHRvblR5cGU6IGdldEJ1dHRvblR5cGUoVUlBbm5vdGF0aW9uPy5FbXBoYXNpemVkKSxcblx0XHRcdFx0XHRwcmVzczogY29tcGlsZUJpbmRpbmcoXG5cdFx0XHRcdFx0XHRmbihcIi5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm5hdmlnYXRlXCIsIFtcblx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvbkV4cHJlc3Npb24oZGF0YUZpZWxkLlNlbWFudGljT2JqZWN0KSxcblx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvbkV4cHJlc3Npb24oZGF0YUZpZWxkLkFjdGlvbiksXG5cdFx0XHRcdFx0XHRcdG1OYXZpZ2F0aW9uUGFyYW1ldGVyc1xuXHRcdFx0XHRcdFx0XSlcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdGN1c3RvbURhdGE6IGNvbXBpbGVCaW5kaW5nKHtcblx0XHRcdFx0XHRcdHNlbWFudGljT2JqZWN0OiBhbm5vdGF0aW9uRXhwcmVzc2lvbihkYXRhRmllbGQuU2VtYW50aWNPYmplY3QpLFxuXHRcdFx0XHRcdFx0YWN0aW9uOiBhbm5vdGF0aW9uRXhwcmVzc2lvbihkYXRhRmllbGQuQWN0aW9uKVxuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uOlxuXHRcdFx0XHRjb25zdCBmb3JtTWFuaWZlc3RBY3Rpb25zQ29uZmlndXJhdGlvbjogYW55ID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHJlZmVyZW5jZVRhcmdldCkuYWN0aW9ucztcblx0XHRcdFx0Y29uc3Qga2V5OiBzdHJpbmcgPSBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCk7XG5cdFx0XHRcdGFjdGlvbnMucHVzaCh7XG5cdFx0XHRcdFx0dHlwZTogQWN0aW9uVHlwZS5EYXRhRmllbGRGb3JBY3Rpb24sXG5cdFx0XHRcdFx0aWQ6IEZvcm1JRCh7IEZhY2V0OiBmYWNldERlZmluaXRpb24gfSwgZGF0YUZpZWxkKSxcblx0XHRcdFx0XHRrZXk6IGtleSxcblx0XHRcdFx0XHR0ZXh0OiBkYXRhRmllbGQuTGFiZWw/LnRvU3RyaW5nKCksXG5cdFx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IFwiXCIsXG5cdFx0XHRcdFx0ZW5hYmxlZDogZ2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb24oY29udmVydGVyQ29udGV4dCwgZGF0YUZpZWxkLkFjdGlvblRhcmdldCksXG5cdFx0XHRcdFx0YmluZGluZzogbmF2aWdhdGlvblByb3BlcnR5UGF0aCA/IFwieyAncGF0aCcgOiAnXCIgKyBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoICsgXCInfVwiIDogdW5kZWZpbmVkLFxuXHRcdFx0XHRcdHZpc2libGU6IGNvbXBpbGVCaW5kaW5nKG5vdChlcXVhbChhbm5vdGF0aW9uRXhwcmVzc2lvbihkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSksIHRydWUpKSksXG5cdFx0XHRcdFx0cmVxdWlyZXNEaWFsb2c6IGlzRGlhbG9nKGRhdGFGaWVsZC5BY3Rpb25UYXJnZXQpLFxuXHRcdFx0XHRcdGJ1dHRvblR5cGU6IGdldEJ1dHRvblR5cGUoVUlBbm5vdGF0aW9uPy5FbXBoYXNpemVkKSxcblx0XHRcdFx0XHRwcmVzczogY29tcGlsZUJpbmRpbmcoXG5cdFx0XHRcdFx0XHRmbihcblx0XHRcdFx0XHRcdFx0XCJpbnZva2VBY3Rpb25cIixcblx0XHRcdFx0XHRcdFx0W1xuXHRcdFx0XHRcdFx0XHRcdGRhdGFGaWVsZC5BY3Rpb24sXG5cdFx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29udGV4dHM6IGZuKFwiZ2V0QmluZGluZ0NvbnRleHRcIiwgW10sIGJpbmRpbmdFeHByZXNzaW9uKFwiXCIsIFwiJHNvdXJjZVwiKSksXG5cdFx0XHRcdFx0XHRcdFx0XHRpbnZvY2F0aW9uR3JvdXBpbmc6IChkYXRhRmllbGQuSW52b2NhdGlvbkdyb3VwaW5nID09PSBcIlVJLk9wZXJhdGlvbkdyb3VwaW5nVHlwZS9DaGFuZ2VTZXRcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ/IFwiQ2hhbmdlU2V0XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0OiBcIklzb2xhdGVkXCIpIGFzIE9wZXJhdGlvbkdyb3VwaW5nVHlwZSxcblx0XHRcdFx0XHRcdFx0XHRcdGxhYmVsOiBhbm5vdGF0aW9uRXhwcmVzc2lvbihkYXRhRmllbGQuTGFiZWwpLFxuXHRcdFx0XHRcdFx0XHRcdFx0bW9kZWw6IGZuKFwiZ2V0TW9kZWxcIiwgW10sIGJpbmRpbmdFeHByZXNzaW9uKFwiL1wiLCBcIiRzb3VyY2VcIikpLFxuXHRcdFx0XHRcdFx0XHRcdFx0aXNOYXZpZ2FibGU6IGlzQWN0aW9uTmF2aWdhYmxlKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmb3JtTWFuaWZlc3RBY3Rpb25zQ29uZmlndXJhdGlvbiAmJiBmb3JtTWFuaWZlc3RBY3Rpb25zQ29uZmlndXJhdGlvbltrZXldXG5cdFx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRdLFxuXHRcdFx0XHRcdFx0XHRyZWYoXCIuZWRpdEZsb3dcIilcblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdGZhY2V0TmFtZTogZGF0YUZpZWxkLklubGluZSA/IChmYWNldERlZmluaXRpb24uZnVsbHlRdWFsaWZpZWROYW1lIGFzIHN0cmluZykgOiB1bmRlZmluZWRcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHRyZXR1cm4gYWN0aW9ucztcblx0fSwgYWN0aW9ucyk7XG5cdHJldHVybiBpbnNlcnRDdXN0b21FbGVtZW50cyhhY3Rpb25zLCBtYW5pZmVzdEFjdGlvbnMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEaWFsb2coYWN0aW9uRGVmaW5pdGlvbjogYW55IHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcblx0aWYgKGFjdGlvbkRlZmluaXRpb24pIHtcblx0XHRjb25zdCBiQ3JpdGljYWwgPSBhY3Rpb25EZWZpbml0aW9uLmFubm90YXRpb25zPy5Db21tb24/LklzQWN0aW9uQ3JpdGljYWw7XG5cdFx0aWYgKGFjdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycy5sZW5ndGggPiAxIHx8IGJDcml0aWNhbCkge1xuXHRcdFx0cmV0dXJuIFwiRGlhbG9nXCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBcIk5vbmVcIjtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIFwiTm9uZVwiO1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDdXN0b21TdWJTZWN0aW9ucyhcblx0bWFuaWZlc3RTdWJTZWN0aW9uczogUmVjb3JkPHN0cmluZywgTWFuaWZlc3RTdWJTZWN0aW9uPixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogUmVjb3JkPHN0cmluZywgQ3VzdG9tT2JqZWN0UGFnZVN1YlNlY3Rpb24+IHtcblx0Y29uc3Qgc3ViU2VjdGlvbnM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbU9iamVjdFBhZ2VTdWJTZWN0aW9uPiA9IHt9O1xuXHRPYmplY3Qua2V5cyhtYW5pZmVzdFN1YlNlY3Rpb25zKS5mb3JFYWNoKFxuXHRcdChzdWJTZWN0aW9uS2V5KSA9PlxuXHRcdFx0KHN1YlNlY3Rpb25zW3N1YlNlY3Rpb25LZXldID0gY3JlYXRlQ3VzdG9tU3ViU2VjdGlvbihtYW5pZmVzdFN1YlNlY3Rpb25zW3N1YlNlY3Rpb25LZXldLCBzdWJTZWN0aW9uS2V5LCBjb252ZXJ0ZXJDb250ZXh0KSlcblx0KTtcblx0cmV0dXJuIHN1YlNlY3Rpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ3VzdG9tU3ViU2VjdGlvbihcblx0bWFuaWZlc3RTdWJTZWN0aW9uOiBNYW5pZmVzdFN1YlNlY3Rpb24sXG5cdHN1YlNlY3Rpb25LZXk6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogQ3VzdG9tT2JqZWN0UGFnZVN1YlNlY3Rpb24ge1xuXHRjb25zdCBzaWRlQ29udGVudDogU2lkZUNvbnRlbnREZWYgfCB1bmRlZmluZWQgPSBtYW5pZmVzdFN1YlNlY3Rpb24uc2lkZUNvbnRlbnRcblx0XHQ/IHtcblx0XHRcdFx0dGVtcGxhdGU6IG1hbmlmZXN0U3ViU2VjdGlvbi5zaWRlQ29udGVudC50ZW1wbGF0ZSxcblx0XHRcdFx0aWQ6IFNpZGVDb250ZW50SUQoc3ViU2VjdGlvbktleSksXG5cdFx0XHRcdHZpc2libGU6IGZhbHNlLFxuXHRcdFx0XHRlcXVhbFNwbGl0OiBtYW5pZmVzdFN1YlNlY3Rpb24uc2lkZUNvbnRlbnQuZXF1YWxTcGxpdFxuXHRcdCAgfVxuXHRcdDogdW5kZWZpbmVkO1xuXHRsZXQgcG9zaXRpb24gPSBtYW5pZmVzdFN1YlNlY3Rpb24ucG9zaXRpb247XG5cdGlmICghcG9zaXRpb24pIHtcblx0XHRwb3NpdGlvbiA9IHtcblx0XHRcdHBsYWNlbWVudDogUGxhY2VtZW50LkFmdGVyXG5cdFx0fTtcblx0fVxuXHRjb25zdCBpc1Zpc2libGUgPSBtYW5pZmVzdFN1YlNlY3Rpb24udmlzaWJsZSAhPT0gdW5kZWZpbmVkID8gbWFuaWZlc3RTdWJTZWN0aW9uLnZpc2libGUgOiB0cnVlO1xuXHRjb25zdCBpc0R5bmFtaWNFeHByZXNzaW9uID0gaXNWaXNpYmxlICYmIHR5cGVvZiBpc1Zpc2libGUgPT09IFwic3RyaW5nXCIgJiYgaXNWaXNpYmxlLmluZGV4T2YoXCJ7PVwiKSA9PT0gMDtcblx0Y29uc3Qgc3ViU2VjdGlvbkRlZmluaXRpb24gPSB7XG5cdFx0dHlwZTogU3ViU2VjdGlvblR5cGUuVW5rbm93bixcblx0XHRpZDogbWFuaWZlc3RTdWJTZWN0aW9uLmlkIHx8IEN1c3RvbVN1YlNlY3Rpb25JRChzdWJTZWN0aW9uS2V5KSxcblx0XHRhY3Rpb25zOiBnZXRBY3Rpb25zRnJvbU1hbmlmZXN0KG1hbmlmZXN0U3ViU2VjdGlvbi5hY3Rpb25zLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRrZXk6IHN1YlNlY3Rpb25LZXksXG5cdFx0dGl0bGU6IG1hbmlmZXN0U3ViU2VjdGlvbi50aXRsZSxcblx0XHRsZXZlbDogMSxcblx0XHRwb3NpdGlvbjogcG9zaXRpb24sXG5cdFx0dmlzaWJsZTogbWFuaWZlc3RTdWJTZWN0aW9uLnZpc2libGUgIT09IHVuZGVmaW5lZCA/IG1hbmlmZXN0U3ViU2VjdGlvbi52aXNpYmxlIDogdHJ1ZSxcblx0XHRzaWRlQ29udGVudDogc2lkZUNvbnRlbnQsXG5cdFx0aXNWaXNpYmlsaXR5RHluYW1pYzogaXNEeW5hbWljRXhwcmVzc2lvblxuXHR9O1xuXHRpZiAobWFuaWZlc3RTdWJTZWN0aW9uLnRlbXBsYXRlIHx8IG1hbmlmZXN0U3ViU2VjdGlvbi5uYW1lKSB7XG5cdFx0c3ViU2VjdGlvbkRlZmluaXRpb24udHlwZSA9IFN1YlNlY3Rpb25UeXBlLlhNTEZyYWdtZW50O1xuXHRcdChzdWJTZWN0aW9uRGVmaW5pdGlvbiBhcyB1bmtub3duIGFzIFhNTEZyYWdtZW50U3ViU2VjdGlvbikudGVtcGxhdGUgPSBtYW5pZmVzdFN1YlNlY3Rpb24udGVtcGxhdGUgfHwgbWFuaWZlc3RTdWJTZWN0aW9uLm5hbWUgfHwgXCJcIjtcblx0fSBlbHNlIHtcblx0XHRzdWJTZWN0aW9uRGVmaW5pdGlvbi50eXBlID0gU3ViU2VjdGlvblR5cGUuUGxhY2Vob2xkZXI7XG5cdH1cblx0cmV0dXJuIHN1YlNlY3Rpb25EZWZpbml0aW9uIGFzIEN1c3RvbU9iamVjdFBhZ2VTdWJTZWN0aW9uO1xufVxuXG4vKipcbiAqIEV2YWx1YXRlIGlmIHRoZSBjb25kZW5zZWQgbW9kZSBjYW4gYmUgYXBwbGkzZWQgb24gdGhlIHRhYmxlLlxuICpcbiAqIEBwYXJhbSBjdXJyZW50RmFjZXRcbiAqIEBwYXJhbSBmYWNldHNUb0NyZWF0ZUluU2VjdGlvblxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGZvciBjb21wbGlhbnQsIGZhbHNlIG90aGVyd2lzZVxuICovXG5mdW5jdGlvbiBnZXRDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFuY2UoXG5cdGN1cnJlbnRGYWNldDogRmFjZXRUeXBlcyxcblx0ZmFjZXRzVG9DcmVhdGVJblNlY3Rpb246IEZhY2V0VHlwZXNbXSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogYm9vbGVhbiB7XG5cdGNvbnN0IG1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cdGlmIChtYW5pZmVzdFdyYXBwZXIudXNlSWNvblRhYkJhcigpKSB7XG5cdFx0Ly8gSWYgdGhlIE9QIHVzZSB0aGUgdGFiIGJhc2VkIHdlIGNoZWNrIGlmIHRoZSBmYWNldHMgdGhhdCB3aWxsIGJlIGNyZWF0ZWQgZm9yIHRoaXMgc2VjdGlvbiBhcmUgYWxsIG5vbiB2aXNpYmxlXG5cdFx0cmV0dXJuIGhhc05vT3RoZXJWaXNpYmxlVGFibGVJblRhcmdldHMoY3VycmVudEZhY2V0LCBmYWNldHNUb0NyZWF0ZUluU2VjdGlvbik7XG5cdH0gZWxzZSB7XG5cdFx0Y29uc3QgZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHRcdGlmIChlbnRpdHlUeXBlLmFubm90YXRpb25zPy5VST8uRmFjZXRzPy5sZW5ndGggJiYgZW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uVUk/LkZhY2V0cz8ubGVuZ3RoID4gMSkge1xuXHRcdFx0cmV0dXJuIGhhc05vT3RoZXJWaXNpYmxlVGFibGVJblRhcmdldHMoY3VycmVudEZhY2V0LCBmYWNldHNUb0NyZWF0ZUluU2VjdGlvbik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBoYXNOb090aGVyVmlzaWJsZVRhYmxlSW5UYXJnZXRzKGN1cnJlbnRGYWNldDogRmFjZXRUeXBlcywgZmFjZXRzVG9DcmVhdGVJblNlY3Rpb246IEZhY2V0VHlwZXNbXSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gZmFjZXRzVG9DcmVhdGVJblNlY3Rpb24uZXZlcnkoZnVuY3Rpb24gKHN1YkZhY2V0KSB7XG5cdFx0aWYgKHN1YkZhY2V0ICE9PSBjdXJyZW50RmFjZXQpIHtcblx0XHRcdGlmIChzdWJGYWNldC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuUmVmZXJlbmNlRmFjZXQpIHtcblx0XHRcdFx0Y29uc3QgcmVmRmFjZXQgPSBzdWJGYWNldCBhcyBSZWZlcmVuY2VGYWNldFR5cGVzO1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0cmVmRmFjZXQuVGFyZ2V0Py4kdGFyZ2V0Py50ZXJtID09PSBVSUFubm90YXRpb25UZXJtcy5MaW5lSXRlbSB8fFxuXHRcdFx0XHRcdHJlZkZhY2V0LlRhcmdldD8uJHRhcmdldD8udGVybSA9PT0gVUlBbm5vdGF0aW9uVGVybXMuUHJlc2VudGF0aW9uVmFyaWFudCB8fFxuXHRcdFx0XHRcdHJlZkZhY2V0LlRhcmdldC4kdGFyZ2V0Py50ZXJtID09PSBVSUFubm90YXRpb25UZXJtcy5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50XG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHJldHVybiByZWZGYWNldC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiAhPT0gdW5kZWZpbmVkID8gcmVmRmFjZXQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4gOiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IHN1YkNvbGxlY3Rpb25GYWNldCA9IHN1YkZhY2V0IGFzIENvbGxlY3Rpb25GYWNldFR5cGVzO1xuXHRcdFx0XHRyZXR1cm4gc3ViQ29sbGVjdGlvbkZhY2V0LkZhY2V0cy5ldmVyeShmdW5jdGlvbiAoZmFjZXQpIHtcblx0XHRcdFx0XHRjb25zdCBzdWJSZWZGYWNldCA9IGZhY2V0IGFzIFJlZmVyZW5jZUZhY2V0VHlwZXM7XG5cdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0c3ViUmVmRmFjZXQuVGFyZ2V0Py4kdGFyZ2V0Py50ZXJtID09PSBVSUFubm90YXRpb25UZXJtcy5MaW5lSXRlbSB8fFxuXHRcdFx0XHRcdFx0c3ViUmVmRmFjZXQuVGFyZ2V0Py4kdGFyZ2V0Py50ZXJtID09PSBVSUFubm90YXRpb25UZXJtcy5QcmVzZW50YXRpb25WYXJpYW50IHx8XG5cdFx0XHRcdFx0XHRzdWJSZWZGYWNldC5UYXJnZXQ/LiR0YXJnZXQ/LnRlcm0gPT09IFVJQW5ub3RhdGlvblRlcm1zLlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdHJldHVybiBzdWJSZWZGYWNldC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiAhPT0gdW5kZWZpbmVkID8gc3ViUmVmRmFjZXQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4gOiBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSk7XG59XG4iXX0=
698
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTdWJTZWN0aW9uVHlwZSIsInRhcmdldFRlcm1zIiwiaGFzVGFibGUiLCJmYWNldHMiLCJzb21lIiwiZmFjZXRUeXBlIiwiaW5kZXhPZiIsIlRhcmdldCIsIiR0YXJnZXQiLCJ0ZXJtIiwiY3JlYXRlU3ViU2VjdGlvbnMiLCJmYWNldENvbGxlY3Rpb24iLCJjb252ZXJ0ZXJDb250ZXh0IiwiaXNIZWFkZXJTZWN0aW9uIiwiZmFjZXRzVG9DcmVhdGUiLCJyZWR1Y2UiLCJmYWNldERlZmluaXRpb24iLCIkVHlwZSIsInB1c2giLCJGYWNldHMiLCJmaW5kIiwic3BsaWNlIiwibGVuZ3RoIiwibWFwIiwiZmFjZXQiLCJjcmVhdGVTdWJTZWN0aW9uIiwiY3JlYXRlQ3VzdG9tSGVhZGVyRmFjZXRTdWJTZWN0aW9ucyIsImN1c3RvbUhlYWRlckZhY2V0cyIsImdldEhlYWRlckZhY2V0c0Zyb21NYW5pZmVzdCIsImdldE1hbmlmZXN0V3JhcHBlciIsImdldEhlYWRlckZhY2V0cyIsImFDdXN0b21IZWFkZXJGYWNldHMiLCJPYmplY3QiLCJrZXlzIiwiZm9yRWFjaCIsImtleSIsImN1c3RvbUhlYWRlckZhY2V0IiwidGVtcGxhdGVFZGl0IiwiY3JlYXRlQ3VzdG9tSGVhZGVyRmFjZXRTdWJTZWN0aW9uIiwic3ViU2VjdGlvbklEIiwiZ2V0Q3VzdG9tU3ViU2VjdGlvbklEIiwic3ViU2VjdGlvbiIsImlkIiwidGl0bGUiLCJ0eXBlIiwiWE1MRnJhZ21lbnQiLCJ0ZW1wbGF0ZSIsInZpc2libGUiLCJsZXZlbCIsInNpZGVDb250ZW50IiwidW5kZWZpbmVkIiwic3Rhc2hlZCIsImZsZXhTZXR0aW5ncyIsImFjdGlvbnMiLCJnZXRTdWJTZWN0aW9uS2V5IiwiZmFsbGJhY2siLCJJRCIsInRvU3RyaW5nIiwiTGFiZWwiLCJhZGRGb3JtTWVudUFjdGlvbnMiLCJoaWRkZW5BY3Rpb25zIiwiZ2V0Rm9ybUhpZGRlbkFjdGlvbnMiLCJmb3JtQWN0aW9ucyIsImdldEZvcm1BY3Rpb25zIiwibWFuaWZlc3RBY3Rpb25zIiwiZ2V0QWN0aW9uc0Zyb21NYW5pZmVzdCIsImZvcm1BbGxBY3Rpb25zIiwiaW5zZXJ0Q3VzdG9tRWxlbWVudHMiLCJjb21tYW5kIiwiZ2V0VmlzaWJpbGl0eUVuYWJsZW1lbnRGb3JtTWVudUFjdGlvbnMiLCJyZW1vdmVEdXBsaWNhdGVBY3Rpb25zIiwiY29tbWFuZEFjdGlvbnMiLCJnZXRGYWNldEFjdGlvbnMiLCJBcnJheSIsImZpbHRlciIsInN1YkZhY2V0RGVmaW5pdGlvbiIsImlzUmVmZXJlbmNlRmFjZXQiLCJhY3Rpb25SZWR1Y2VyIiwicmVmZXJlbmNlRmFjZXQiLCJjcmVhdGVGb3JtQWN0aW9uUmVkdWNlciIsImdldEJ1dHRvblR5cGUiLCJlbXBoYXNpemVkIiwiYnV0dG9uVHlwZUNvbmRpdGlvbiIsImVxdWFsIiwiZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uIiwiY29tcGlsZUV4cHJlc3Npb24iLCJpZkVsc2UiLCJCdXR0b25UeXBlIiwiR2hvc3QiLCJUcmFuc3BhcmVudCIsImhhc1NpbmdsZUNvbnRlbnQiLCJnZXRTdWJTZWN0aW9uSUQiLCJGYWNldCIsIm9IaWRkZW5Bbm5vdGF0aW9uIiwiYW5ub3RhdGlvbnMiLCJVSSIsIkhpZGRlbiIsImlzVmlzaWJsZSIsIm5vdCIsImlzRHluYW1pY0V4cHJlc3Npb24iLCJpc1Zpc2libGVEeW5hbWljRXhwcmVzc2lvbiIsInN1YnN0cmluZyIsImxhc3RJbmRleE9mIiwiVW5rbm93biIsImFubm90YXRpb25QYXRoIiwiZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImlzVmlzaWJpbGl0eUR5bmFtaWMiLCJnZXRTdGFzaGVkU2V0dGluZ3NGb3JIZWFkZXJGYWNldCIsImRlc2lnbnRpbWUiLCJnZXREZXNpZ25UaW1lTWV0YWRhdGFTZXR0aW5nc0ZvckhlYWRlckZhY2V0IiwiY29udGVudCIsInRhYmxlQ29udGVudCIsImluZGV4IiwidW5zdXBwb3J0ZWRUZXh0IiwiaSIsImNvbmNhdCIsIm1peGVkU3ViU2VjdGlvbiIsIk1peGVkIiwiZmFjZXRBY3Rpb25zIiwiZm9ybUNvbGxlY3Rpb25TdWJTZWN0aW9uIiwiRm9ybSIsImZvcm1EZWZpbml0aW9uIiwiY3JlYXRlRm9ybURlZmluaXRpb24iLCJhY3Rpb24iLCJmYWNldE5hbWUiLCJ2YWx1ZSIsInByZXNlbnRhdGlvbiIsImdldERhdGFWaXN1YWxpemF0aW9uQ29uZmlndXJhdGlvbiIsImdldENvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW5jZSIsImNvbnRyb2xUaXRsZSIsInZpc3VhbGl6YXRpb25zIiwiYW5ub3RhdGlvbiIsInNob3dUaXRsZSIsImlzU3Vic2VjdGlvblRpdGxlU2hvd24iLCJ0aXRsZVZpc2libGVFeHByZXNzaW9uIiwiZGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uIiwiRGF0YVZpc3VhbGl6YXRpb24iLCJ0aXRsZVZpc2libGUiLCJmb3JtRWxlbWVudFN1YlNlY3Rpb24iLCJ1bnN1cHBvcnRlZFN1YlNlY3Rpb24iLCJ0ZXh0Iiwic3ViU2VjdGlvblRpdGxlIiwicmVmZXJlbmNlVGFyZ2V0IiwidGFyZ2V0VmFsdWUiLCJkYXRhRmllbGRDb2xsZWN0aW9uIiwic3BsaXQiLCJuYXZpZ2F0aW9uUHJvcGVydHlQYXRoIiwic3Vic3RyIiwiRGF0YSIsImdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb24iLCJxdWFsaWZpZXIiLCJkYXRhRmllbGQiLCJSZXF1aXJlc0NvbnRleHQiLCJ2YWx1ZU9mIiwiZ2V0RGlhZ25vc3RpY3MiLCJhZGRJc3N1ZSIsIklzc3VlQ2F0ZWdvcnkiLCJBbm5vdGF0aW9uIiwiSXNzdWVTZXZlcml0eSIsIkxvdyIsIklzc3VlVHlwZSIsIk1BTEZPUk1FRF9EQVRBRklFTERfRk9SX0lCTiIsIlJFUVVJUkVTQ09OVEVYVCIsIklubGluZSIsIklOTElORSIsIkRldGVybWluaW5nIiwiREVURVJNSU5JTkciLCJtTmF2aWdhdGlvblBhcmFtZXRlcnMiLCJNYXBwaW5nIiwic2VtYW50aWNPYmplY3RNYXBwaW5nIiwiZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nIiwiQWN0aW9uVHlwZSIsIkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiIsImdldEZvcm1JRCIsIktleUhlbHBlciIsImdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZCIsImVuYWJsZWQiLCJOYXZpZ2F0aW9uQXZhaWxhYmxlIiwiYnV0dG9uVHlwZSIsIkVtcGhhc2l6ZWQiLCJwcmVzcyIsImZuIiwiU2VtYW50aWNPYmplY3QiLCJBY3Rpb24iLCJjdXN0b21EYXRhIiwic2VtYW50aWNPYmplY3QiLCJmb3JtTWFuaWZlc3RBY3Rpb25zQ29uZmlndXJhdGlvbiIsIkRhdGFGaWVsZEZvckFjdGlvbiIsImdldEVuYWJsZWRGb3JBbm5vdGF0aW9uQWN0aW9uIiwiQWN0aW9uVGFyZ2V0IiwiYmluZGluZyIsInJlcXVpcmVzRGlhbG9nIiwiaXNEaWFsb2ciLCJjb250ZXh0cyIsInBhdGhJbk1vZGVsIiwiaW52b2NhdGlvbkdyb3VwaW5nIiwiSW52b2NhdGlvbkdyb3VwaW5nIiwibGFiZWwiLCJtb2RlbCIsImlzTmF2aWdhYmxlIiwiaXNBY3Rpb25OYXZpZ2FibGUiLCJyZWYiLCJhY3Rpb25EZWZpbml0aW9uIiwiYkNyaXRpY2FsIiwiQ29tbW9uIiwiSXNBY3Rpb25Dcml0aWNhbCIsInBhcmFtZXRlcnMiLCJjcmVhdGVDdXN0b21TdWJTZWN0aW9ucyIsIm1hbmlmZXN0U3ViU2VjdGlvbnMiLCJzdWJTZWN0aW9ucyIsInN1YlNlY3Rpb25LZXkiLCJjcmVhdGVDdXN0b21TdWJTZWN0aW9uIiwibWFuaWZlc3RTdWJTZWN0aW9uIiwiZ2V0U2lkZUNvbnRlbnRJRCIsImVxdWFsU3BsaXQiLCJwb3NpdGlvbiIsInBsYWNlbWVudCIsIlBsYWNlbWVudCIsIkFmdGVyIiwic3ViU2VjdGlvbkRlZmluaXRpb24iLCJuYW1lIiwiUGxhY2Vob2xkZXIiLCJjdXJyZW50RmFjZXQiLCJmYWNldHNUb0NyZWF0ZUluU2VjdGlvbiIsIm1hbmlmZXN0V3JhcHBlciIsInVzZUljb25UYWJCYXIiLCJoYXNOb090aGVyVmlzaWJsZVRhYmxlSW5UYXJnZXRzIiwiZW50aXR5VHlwZSIsImdldEVudGl0eVR5cGUiLCJldmVyeSIsInN1YkZhY2V0IiwicmVmRmFjZXQiLCJzdWJDb2xsZWN0aW9uRmFjZXQiLCJzdWJSZWZGYWNldCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiU3ViU2VjdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tdW5pY2F0aW9uQW5ub3RhdGlvblRlcm1zIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db21tdW5pY2F0aW9uXCI7XG5pbXBvcnQgdHlwZSB7XG5cdENvbGxlY3Rpb25GYWNldFR5cGVzLFxuXHREYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHRFbXBoYXNpemVkLFxuXHRGYWNldFR5cGVzLFxuXHRGaWVsZEdyb3VwLFxuXHRPcGVyYXRpb25Hcm91cGluZ1R5cGUsXG5cdFJlZmVyZW5jZUZhY2V0VHlwZXNcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgVUlBbm5vdGF0aW9uVGVybXMsIFVJQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHR5cGUgeyBCYXNlQWN0aW9uLCBDb21iaW5lZEFjdGlvbiwgQ29udmVydGVyQWN0aW9uLCBDdXN0b21BY3Rpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQge1xuXHRCdXR0b25UeXBlLFxuXHRnZXRBY3Rpb25zRnJvbU1hbmlmZXN0LFxuXHRnZXRFbmFibGVkRm9yQW5ub3RhdGlvbkFjdGlvbixcblx0Z2V0U2VtYW50aWNPYmplY3RNYXBwaW5nLFxuXHRpc0FjdGlvbk5hdmlnYWJsZSxcblx0cmVtb3ZlRHVwbGljYXRlQWN0aW9uc1xufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IEN1c3RvbU9iamVjdFBhZ2VIZWFkZXJGYWNldCwgRmxleFNldHRpbmdzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvT2JqZWN0UGFnZS9IZWFkZXJGYWNldFwiO1xuaW1wb3J0IHtcblx0Z2V0RGVzaWduVGltZU1ldGFkYXRhU2V0dGluZ3NGb3JIZWFkZXJGYWNldCxcblx0Z2V0SGVhZGVyRmFjZXRzRnJvbU1hbmlmZXN0LFxuXHRnZXRTdGFzaGVkU2V0dGluZ3NGb3JIZWFkZXJGYWNldFxufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9PYmplY3RQYWdlL0hlYWRlckZhY2V0XCI7XG5pbXBvcnQgeyBJc3N1ZUNhdGVnb3J5LCBJc3N1ZVNldmVyaXR5LCBJc3N1ZVR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0lzc3VlTWFuYWdlclwiO1xuaW1wb3J0IHsgS2V5SGVscGVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9LZXlcIjtcbmltcG9ydCB0eXBlIHsgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHtcblx0Y29tcGlsZUV4cHJlc3Npb24sXG5cdGVxdWFsLFxuXHRmbixcblx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uLFxuXHRpZkVsc2UsXG5cdG5vdCxcblx0cGF0aEluTW9kZWwsXG5cdHJlZlxufSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgQ29udmVydGVyQ29udGV4dCBmcm9tIFwiLi4vLi4vQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBDb25maWd1cmFibGVPYmplY3QsIENvbmZpZ3VyYWJsZVJlY29yZCwgQ3VzdG9tRWxlbWVudCB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHsgaW5zZXJ0Q3VzdG9tRWxlbWVudHMsIFBsYWNlbWVudCB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHsgZ2V0Q3VzdG9tU3ViU2VjdGlvbklELCBnZXRGb3JtSUQsIGdldFNpZGVDb250ZW50SUQsIGdldFN1YlNlY3Rpb25JRCB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0lEXCI7XG5pbXBvcnQgdHlwZSB7IE1hbmlmZXN0QWN0aW9uLCBNYW5pZmVzdFN1YlNlY3Rpb24gfSBmcm9tIFwiLi4vLi4vTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHsgQWN0aW9uVHlwZSB9IGZyb20gXCIuLi8uLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBnZXRGb3JtQWN0aW9ucywgZ2V0Rm9ybUhpZGRlbkFjdGlvbnMsIGdldFZpc2liaWxpdHlFbmFibGVtZW50Rm9ybU1lbnVBY3Rpb25zIH0gZnJvbSBcIi4uLy4uL29iamVjdFBhZ2UvRm9ybU1lbnVBY3Rpb25zXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFWaXN1YWxpemF0aW9uRGVmaW5pdGlvbiB9IGZyb20gXCIuLi9Db21tb24vRGF0YVZpc3VhbGl6YXRpb25cIjtcbmltcG9ydCB7IGdldERhdGFWaXN1YWxpemF0aW9uQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuLi9Db21tb24vRGF0YVZpc3VhbGl6YXRpb25cIjtcbmltcG9ydCB0eXBlIHsgRm9ybURlZmluaXRpb24gfSBmcm9tIFwiLi4vQ29tbW9uL0Zvcm1cIjtcbmltcG9ydCB7IGNyZWF0ZUZvcm1EZWZpbml0aW9uLCBpc1JlZmVyZW5jZUZhY2V0IH0gZnJvbSBcIi4uL0NvbW1vbi9Gb3JtXCI7XG5cbmV4cG9ydCBlbnVtIFN1YlNlY3Rpb25UeXBlIHtcblx0VW5rbm93biA9IFwiVW5rbm93blwiLCAvLyBEZWZhdWx0IFR5cGVcblx0Rm9ybSA9IFwiRm9ybVwiLFxuXHREYXRhVmlzdWFsaXphdGlvbiA9IFwiRGF0YVZpc3VhbGl6YXRpb25cIixcblx0WE1MRnJhZ21lbnQgPSBcIlhNTEZyYWdtZW50XCIsXG5cdFBsYWNlaG9sZGVyID0gXCJQbGFjZWhvbGRlclwiLFxuXHRNaXhlZCA9IFwiTWl4ZWRcIlxufVxuXG5leHBvcnQgdHlwZSBPYmplY3RQYWdlU3ViU2VjdGlvbiA9XG5cdHwgVW5zdXBwb3J0ZWRTdWJTZWN0aW9uXG5cdHwgRm9ybVN1YlNlY3Rpb25cblx0fCBEYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb25cblx0fCBDb250YWN0U3ViU2VjdGlvblxuXHR8IFhNTEZyYWdtZW50U3ViU2VjdGlvblxuXHR8IFBsYWNlaG9sZGVyRnJhZ21lbnRTdWJTZWN0aW9uXG5cdHwgTWl4ZWRTdWJTZWN0aW9uO1xuXG50eXBlIEJhc2VTdWJTZWN0aW9uID0ge1xuXHRpZDogc3RyaW5nO1xuXHRrZXk6IHN0cmluZztcblx0dGl0bGU6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRhbm5vdGF0aW9uUGF0aDogc3RyaW5nO1xuXHR0eXBlOiBTdWJTZWN0aW9uVHlwZTtcblx0dmlzaWJsZTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdGlzVmlzaWJpbGl0eUR5bmFtaWM/OiBib29sZWFuIHwgXCJcIjtcblx0ZmxleFNldHRpbmdzPzogRmxleFNldHRpbmdzO1xuXHRzdGFzaGVkPzogYm9vbGVhbjtcblx0bGV2ZWw6IG51bWJlcjtcblx0Y29udGVudD86IEFycmF5PE9iamVjdFBhZ2VTdWJTZWN0aW9uPjtcblx0c2lkZUNvbnRlbnQ/OiBTaWRlQ29udGVudERlZjtcbn07XG5cbnR5cGUgVW5zdXBwb3J0ZWRTdWJTZWN0aW9uID0gQmFzZVN1YlNlY3Rpb24gJiB7XG5cdHRleHQ6IHN0cmluZztcbn07XG5cbnR5cGUgRGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uID0gQmFzZVN1YlNlY3Rpb24gJiB7XG5cdHR5cGU6IFN1YlNlY3Rpb25UeXBlLkRhdGFWaXN1YWxpemF0aW9uO1xuXHRwcmVzZW50YXRpb246IERhdGFWaXN1YWxpemF0aW9uRGVmaW5pdGlvbjtcblx0c2hvd1RpdGxlOiBib29sZWFuO1xuXHR0aXRsZVZpc2libGU/OiBzdHJpbmcgfCBib29sZWFuO1xufTtcblxudHlwZSBDb250YWN0U3ViU2VjdGlvbiA9IFVuc3VwcG9ydGVkU3ViU2VjdGlvbjtcblxudHlwZSBYTUxGcmFnbWVudFN1YlNlY3Rpb24gPSBPbWl0PEJhc2VTdWJTZWN0aW9uLCBcImFubm90YXRpb25QYXRoXCI+ICYge1xuXHR0eXBlOiBTdWJTZWN0aW9uVHlwZS5YTUxGcmFnbWVudDtcblx0dGVtcGxhdGU6IHN0cmluZztcblx0YWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPjtcbn07XG5cbnR5cGUgUGxhY2Vob2xkZXJGcmFnbWVudFN1YlNlY3Rpb24gPSBPbWl0PEJhc2VTdWJTZWN0aW9uLCBcImFubm90YXRpb25QYXRoXCI+ICYge1xuXHR0eXBlOiBTdWJTZWN0aW9uVHlwZS5QbGFjZWhvbGRlcjtcblx0YWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPjtcbn07XG5cbnR5cGUgTWl4ZWRTdWJTZWN0aW9uID0gQmFzZVN1YlNlY3Rpb24gJiB7XG5cdGNvbnRlbnQ6IEFycmF5PE9iamVjdFBhZ2VTdWJTZWN0aW9uPjtcbn07XG5cbmV4cG9ydCB0eXBlIEZvcm1TdWJTZWN0aW9uID0gQmFzZVN1YlNlY3Rpb24gJiB7XG5cdHR5cGU6IFN1YlNlY3Rpb25UeXBlLkZvcm07XG5cdGZvcm1EZWZpbml0aW9uOiBGb3JtRGVmaW5pdGlvbjtcblx0YWN0aW9uczogQ29udmVydGVyQWN0aW9uW10gfCBCYXNlQWN0aW9uW107XG5cdGNvbW1hbmRBY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+O1xufTtcblxuZXhwb3J0IHR5cGUgT2JqZWN0UGFnZVNlY3Rpb24gPSBDb25maWd1cmFibGVPYmplY3QgJiB7XG5cdGlkOiBzdHJpbmc7XG5cdHRpdGxlOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0c2hvd1RpdGxlPzogYm9vbGVhbjtcblx0dmlzaWJsZTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdHN1YlNlY3Rpb25zOiBPYmplY3RQYWdlU3ViU2VjdGlvbltdO1xufTtcblxudHlwZSBTaWRlQ29udGVudERlZiA9IHtcblx0dGVtcGxhdGU/OiBzdHJpbmc7XG5cdGlkPzogc3RyaW5nO1xuXHRzaWRlQ29udGVudEZhbGxEb3duPzogc3RyaW5nO1xuXHRjb250YWluZXJRdWVyeT86IHN0cmluZztcblx0dmlzaWJsZT86IGJvb2xlYW47XG5cdGVxdWFsU3BsaXQ/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgQ3VzdG9tT2JqZWN0UGFnZVNlY3Rpb24gPSBDdXN0b21FbGVtZW50PE9iamVjdFBhZ2VTZWN0aW9uPjtcblxuZXhwb3J0IHR5cGUgQ3VzdG9tT2JqZWN0UGFnZVN1YlNlY3Rpb24gPSBDdXN0b21FbGVtZW50PE9iamVjdFBhZ2VTdWJTZWN0aW9uPjtcblxuY29uc3QgdGFyZ2V0VGVybXM6IHN0cmluZ1tdID0gW1xuXHRVSUFubm90YXRpb25UZXJtcy5MaW5lSXRlbSxcblx0VUlBbm5vdGF0aW9uVGVybXMuQ2hhcnQsXG5cdFVJQW5ub3RhdGlvblRlcm1zLlByZXNlbnRhdGlvblZhcmlhbnQsXG5cdFVJQW5ub3RhdGlvblRlcm1zLlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRcbl07XG5cbi8vIFRPRE86IE5lZWQgdG8gaGFuZGxlIFRhYmxlIGNhc2UgaW5zaWRlIGNyZWF0ZVN1YlNlY3Rpb24gZnVuY3Rpb24gaWYgQ29sbGVjdGlvbkZhY2V0IGhhcyBUYWJsZSBSZWZlcmVuY2VGYWNldFxuY29uc3QgaGFzVGFibGUgPSAoZmFjZXRzOiBhbnlbXSA9IFtdKSA9PiB7XG5cdHJldHVybiBmYWNldHMuc29tZSgoZmFjZXRUeXBlKSA9PiB0YXJnZXRUZXJtcy5pbmRleE9mKGZhY2V0VHlwZT8uVGFyZ2V0Py4kdGFyZ2V0Py50ZXJtKSA+IC0xKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlIHN1YnNlY3Rpb25zIGJhc2VkIG9uIGZhY2V0IGRlZmluaXRpb24uXG4gKlxuICogQHBhcmFtIGZhY2V0Q29sbGVjdGlvbiBDb2xsZWN0aW9uIG9mIGZhY2V0c1xuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gaXNIZWFkZXJTZWN0aW9uIFRydWUgaWYgaGVhZGVyIHNlY3Rpb24gaXMgZ2VuZXJhdGVkIGluIHRoaXMgaXRlcmF0aW9uXG4gKiBAcmV0dXJucyBUaGUgY3VycmVudCBzdWJzZWN0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU3ViU2VjdGlvbnMoXG5cdGZhY2V0Q29sbGVjdGlvbjogRmFjZXRUeXBlc1tdLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRpc0hlYWRlclNlY3Rpb24/OiBib29sZWFuXG4pOiBPYmplY3RQYWdlU3ViU2VjdGlvbltdIHtcblx0Ly8gRmlyc3Qgd2UgZGV0ZXJtaW5lIHdoaWNoIHN1YiBzZWN0aW9uIHdlIG5lZWQgdG8gY3JlYXRlXG5cdGNvbnN0IGZhY2V0c1RvQ3JlYXRlID0gZmFjZXRDb2xsZWN0aW9uLnJlZHVjZSgoZmFjZXRzVG9DcmVhdGU6IEZhY2V0VHlwZXNbXSwgZmFjZXREZWZpbml0aW9uKSA9PiB7XG5cdFx0c3dpdGNoIChmYWNldERlZmluaXRpb24uJFR5cGUpIHtcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuUmVmZXJlbmNlRmFjZXQ6XG5cdFx0XHRcdGZhY2V0c1RvQ3JlYXRlLnB1c2goZmFjZXREZWZpbml0aW9uKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkNvbGxlY3Rpb25GYWNldDpcblx0XHRcdFx0Ly8gVE9ETyBJZiB0aGUgQ29sbGVjdGlvbiBGYWNldCBoYXMgYSBjaGlsZCBvZiB0eXBlIENvbGxlY3Rpb24gRmFjZXQgd2UgYnJpbmcgdGhlbSB1cCBvbmUgbGV2ZWwgKEZvcm0gKyBUYWJsZSB1c2UgY2FzZSkgP1xuXHRcdFx0XHQvLyBmaXJzdCBjYXNlIGZhY2V0IENvbGxlY3Rpb24gaXMgY29tYmluYXRpb24gb2YgY29sbGVjdGlvbiBhbmQgcmVmZXJlbmNlIGZhY2V0IG9yIG5vdCBhbGwgZmFjZXRzIGFyZSByZWZlcmVuY2UgZmFjZXRzLlxuXHRcdFx0XHRpZiAoZmFjZXREZWZpbml0aW9uLkZhY2V0cy5maW5kKChmYWNldFR5cGUpID0+IGZhY2V0VHlwZS4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuQ29sbGVjdGlvbkZhY2V0KSkge1xuXHRcdFx0XHRcdGZhY2V0c1RvQ3JlYXRlLnNwbGljZShmYWNldHNUb0NyZWF0ZS5sZW5ndGgsIDAsIC4uLmZhY2V0RGVmaW5pdGlvbi5GYWNldHMpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGZhY2V0c1RvQ3JlYXRlLnB1c2goZmFjZXREZWZpbml0aW9uKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuUmVmZXJlbmNlVVJMRmFjZXQ6XG5cdFx0XHRcdC8vIE5vdCBzdXBwb3J0ZWRcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdHJldHVybiBmYWNldHNUb0NyZWF0ZTtcblx0fSwgW10pO1xuXG5cdC8vIFRoZW4gd2UgY3JlYXRlIHRoZSBhY3R1YWwgc3Vic2VjdGlvbnNcblx0cmV0dXJuIGZhY2V0c1RvQ3JlYXRlLm1hcCgoZmFjZXQpID0+XG5cdFx0Y3JlYXRlU3ViU2VjdGlvbihmYWNldCwgZmFjZXRzVG9DcmVhdGUsIGNvbnZlcnRlckNvbnRleHQsIDAsICEoZmFjZXQgYXMgYW55KT8uRmFjZXRzPy5sZW5ndGgsIGlzSGVhZGVyU2VjdGlvbilcblx0KTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIHN1YnNlY3Rpb25zIGJhc2VkIG9uIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBjdXN0b20gaGVhZGVyIGZhY2V0LlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgVGhlIGN1cnJlbnQgc3Vic2VjdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUN1c3RvbUhlYWRlckZhY2V0U3ViU2VjdGlvbnMoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IE9iamVjdFBhZ2VTdWJTZWN0aW9uW10ge1xuXHRjb25zdCBjdXN0b21IZWFkZXJGYWNldHM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbU9iamVjdFBhZ2VIZWFkZXJGYWNldD4gPSBnZXRIZWFkZXJGYWNldHNGcm9tTWFuaWZlc3QoXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5nZXRIZWFkZXJGYWNldHMoKVxuXHQpO1xuXHRjb25zdCBhQ3VzdG9tSGVhZGVyRmFjZXRzOiBDdXN0b21PYmplY3RQYWdlSGVhZGVyRmFjZXRbXSA9IFtdO1xuXHRPYmplY3Qua2V5cyhjdXN0b21IZWFkZXJGYWNldHMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuXHRcdGFDdXN0b21IZWFkZXJGYWNldHMucHVzaChjdXN0b21IZWFkZXJGYWNldHNba2V5XSk7XG5cdFx0cmV0dXJuIGFDdXN0b21IZWFkZXJGYWNldHM7XG5cdH0pO1xuXHRjb25zdCBmYWNldHNUb0NyZWF0ZSA9IGFDdXN0b21IZWFkZXJGYWNldHMucmVkdWNlKChmYWNldHNUb0NyZWF0ZTogQ3VzdG9tT2JqZWN0UGFnZUhlYWRlckZhY2V0W10sIGN1c3RvbUhlYWRlckZhY2V0KSA9PiB7XG5cdFx0aWYgKGN1c3RvbUhlYWRlckZhY2V0LnRlbXBsYXRlRWRpdCkge1xuXHRcdFx0ZmFjZXRzVG9DcmVhdGUucHVzaChjdXN0b21IZWFkZXJGYWNldCk7XG5cdFx0fVxuXHRcdHJldHVybiBmYWNldHNUb0NyZWF0ZTtcblx0fSwgW10pO1xuXG5cdHJldHVybiBmYWNldHNUb0NyZWF0ZS5tYXAoKGN1c3RvbUhlYWRlckZhY2V0KSA9PiBjcmVhdGVDdXN0b21IZWFkZXJGYWNldFN1YlNlY3Rpb24oY3VzdG9tSGVhZGVyRmFjZXQpKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgc3Vic2VjdGlvbiBiYXNlZCBvbiBhIGN1c3RvbSBoZWFkZXIgZmFjZXQuXG4gKlxuICogQHBhcmFtIGN1c3RvbUhlYWRlckZhY2V0IEEgY3VzdG9tIGhlYWRlciBmYWNldFxuICogQHJldHVybnMgQSBkZWZpbml0aW9uIGZvciBhIHN1YnNlY3Rpb25cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQ3VzdG9tSGVhZGVyRmFjZXRTdWJTZWN0aW9uKGN1c3RvbUhlYWRlckZhY2V0OiBDdXN0b21PYmplY3RQYWdlSGVhZGVyRmFjZXQpOiBPYmplY3RQYWdlU3ViU2VjdGlvbiB7XG5cdGNvbnN0IHN1YlNlY3Rpb25JRCA9IGdldEN1c3RvbVN1YlNlY3Rpb25JRChjdXN0b21IZWFkZXJGYWNldC5rZXkpO1xuXHRjb25zdCBzdWJTZWN0aW9uOiBYTUxGcmFnbWVudFN1YlNlY3Rpb24gPSB7XG5cdFx0aWQ6IHN1YlNlY3Rpb25JRCxcblx0XHRrZXk6IGN1c3RvbUhlYWRlckZhY2V0LmtleSxcblx0XHR0aXRsZTogY3VzdG9tSGVhZGVyRmFjZXQudGl0bGUsXG5cdFx0dHlwZTogU3ViU2VjdGlvblR5cGUuWE1MRnJhZ21lbnQsXG5cdFx0dGVtcGxhdGU6IGN1c3RvbUhlYWRlckZhY2V0LnRlbXBsYXRlRWRpdCB8fCBcIlwiLFxuXHRcdHZpc2libGU6IGN1c3RvbUhlYWRlckZhY2V0LnZpc2libGUsXG5cdFx0bGV2ZWw6IDEsXG5cdFx0c2lkZUNvbnRlbnQ6IHVuZGVmaW5lZCxcblx0XHRzdGFzaGVkOiBjdXN0b21IZWFkZXJGYWNldC5zdGFzaGVkLFxuXHRcdGZsZXhTZXR0aW5nczogY3VzdG9tSGVhZGVyRmFjZXQuZmxleFNldHRpbmdzLFxuXHRcdGFjdGlvbnM6IHt9XG5cdH07XG5cdHJldHVybiBzdWJTZWN0aW9uO1xufVxuXG4vLyBmdW5jdGlvbiBpc1RhcmdldEZvckNvbXBsaWFudChhbm5vdGF0aW9uUGF0aDogQW5ub3RhdGlvblBhdGgpIHtcbi8vIFx0cmV0dXJuIC8uKmNvbVxcLnNhcFxcLnZvY2FidWxhcmllc1xcLlVJXFwudjFcXC4oRmllbGRHcm91cHxJZGVudGlmaWNhdGlvbnxEYXRhUG9pbnR8U3RhdHVzSW5mbykuKi8udGVzdChhbm5vdGF0aW9uUGF0aC52YWx1ZSk7XG4vLyB9XG5jb25zdCBnZXRTdWJTZWN0aW9uS2V5ID0gKGZhY2V0RGVmaW5pdGlvbjogRmFjZXRUeXBlcywgZmFsbGJhY2s6IHN0cmluZyk6IHN0cmluZyA9PiB7XG5cdHJldHVybiBmYWNldERlZmluaXRpb24uSUQ/LnRvU3RyaW5nKCkgfHwgZmFjZXREZWZpbml0aW9uLkxhYmVsPy50b1N0cmluZygpIHx8IGZhbGxiYWNrO1xufTtcbi8qKlxuICogQWRkcyBGb3JtIG1lbnUgYWN0aW9uIHRvIGFsbCBmb3JtIGFjdGlvbnMsIHJlbW92ZXMgZHVwbGljYXRlIGFjdGlvbnMgYW5kIGhpZGRlbiBhY3Rpb25zLlxuICpcbiAqIEBwYXJhbSBhY3Rpb25zIFRoZSBhY3Rpb25zIGludm9sdmVkXG4gKiBAcGFyYW0gZmFjZXREZWZpbml0aW9uIFRoZSBkZWZpbml0aW9uIGZvciB0aGUgZmFjZXRcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgVGhlIGZvcm0gbWVudSBhY3Rpb25zXG4gKi9cbmZ1bmN0aW9uIGFkZEZvcm1NZW51QWN0aW9ucyhhY3Rpb25zOiBDb252ZXJ0ZXJBY3Rpb25bXSwgZmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzLCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogQ29tYmluZWRBY3Rpb24ge1xuXHRjb25zdCBoaWRkZW5BY3Rpb25zOiBCYXNlQWN0aW9uW10gPSBnZXRGb3JtSGlkZGVuQWN0aW9ucyhmYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpIHx8IFtdLFxuXHRcdGZvcm1BY3Rpb25zOiBDb25maWd1cmFibGVSZWNvcmQ8TWFuaWZlc3RBY3Rpb24+ID0gZ2V0Rm9ybUFjdGlvbnMoZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRtYW5pZmVzdEFjdGlvbnMgPSBnZXRBY3Rpb25zRnJvbU1hbmlmZXN0KGZvcm1BY3Rpb25zLCBjb252ZXJ0ZXJDb250ZXh0LCBhY3Rpb25zLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgaGlkZGVuQWN0aW9ucyksXG5cdFx0Zm9ybUFsbEFjdGlvbnMgPSBpbnNlcnRDdXN0b21FbGVtZW50cyhhY3Rpb25zLCBtYW5pZmVzdEFjdGlvbnMuYWN0aW9ucywgeyBjb21tYW5kOiBcIm92ZXJ3cml0ZVwiIH0pO1xuXHRyZXR1cm4ge1xuXHRcdFwiYWN0aW9uc1wiOiBmb3JtQWxsQWN0aW9ucyA/IGdldFZpc2liaWxpdHlFbmFibGVtZW50Rm9ybU1lbnVBY3Rpb25zKHJlbW92ZUR1cGxpY2F0ZUFjdGlvbnMoZm9ybUFsbEFjdGlvbnMpKSA6IGFjdGlvbnMsXG5cdFx0XCJjb21tYW5kQWN0aW9uc1wiOiBtYW5pZmVzdEFjdGlvbnMuY29tbWFuZEFjdGlvbnNcblx0fTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGFjdGlvbiBmb3JtIGEgZmFjZXQuXG4gKlxuICogQHBhcmFtIGZhY2V0RGVmaW5pdGlvblxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBjdXJyZW50IGZhY2V0IGFjdGlvbnNcbiAqL1xuZnVuY3Rpb24gZ2V0RmFjZXRBY3Rpb25zKGZhY2V0RGVmaW5pdGlvbjogRmFjZXRUeXBlcywgY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IENvbWJpbmVkQWN0aW9uIHtcblx0bGV0IGFjdGlvbnMgPSBuZXcgQXJyYXk8Q29udmVydGVyQWN0aW9uPigpO1xuXHRzd2l0Y2ggKGZhY2V0RGVmaW5pdGlvbi4kVHlwZSkge1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuQ29sbGVjdGlvbkZhY2V0OlxuXHRcdFx0YWN0aW9ucyA9IChcblx0XHRcdFx0ZmFjZXREZWZpbml0aW9uLkZhY2V0cy5maWx0ZXIoKHN1YkZhY2V0RGVmaW5pdGlvbikgPT4gaXNSZWZlcmVuY2VGYWNldChzdWJGYWNldERlZmluaXRpb24pKSBhcyBSZWZlcmVuY2VGYWNldFR5cGVzW11cblx0XHRcdCkucmVkdWNlKFxuXHRcdFx0XHQoYWN0aW9uUmVkdWNlcjogQ29udmVydGVyQWN0aW9uW10sIHJlZmVyZW5jZUZhY2V0KSA9PlxuXHRcdFx0XHRcdGNyZWF0ZUZvcm1BY3Rpb25SZWR1Y2VyKGFjdGlvblJlZHVjZXIsIHJlZmVyZW5jZUZhY2V0LCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdFx0W11cblx0XHRcdCk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLlJlZmVyZW5jZUZhY2V0OlxuXHRcdFx0YWN0aW9ucyA9IGNyZWF0ZUZvcm1BY3Rpb25SZWR1Y2VyKFtdLCBmYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpO1xuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdGJyZWFrO1xuXHR9XG5cdHJldHVybiBhZGRGb3JtTWVudUFjdGlvbnMoYWN0aW9ucywgZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KTtcbn1cbi8qKlxuICogUmV0dXJucyB0aGUgYnV0dG9uIHR5cGUgYmFzZWQgb24gQFVJLkVtcGhhc2l6ZWQgYW5ub3RhdGlvbi5cbiAqXG4gKiBAcGFyYW0gZW1waGFzaXplZCBFbXBoYXNpemVkIGFubm90YXRpb24gdmFsdWUuXG4gKiBAcmV0dXJucyBUaGUgYnV0dG9uIHR5cGUgb3IgcGF0aCBiYXNlZCBleHByZXNzaW9uLlxuICovXG5mdW5jdGlvbiBnZXRCdXR0b25UeXBlKGVtcGhhc2l6ZWQ6IEVtcGhhc2l6ZWQgfCB1bmRlZmluZWQpOiBCdXR0b25UeXBlIHtcblx0Ly8gRW1waGFzaXplZCBpcyBhIGJvb2xlYW4gc28gaWYgaXQncyBlcXVhbCB0byB0cnVlIHdlIHNob3cgdGhlIGJ1dHRvbiBhcyBHaG9zdCwgb3RoZXJ3aXNlIGFzIFRyYW5zcGFyZW50XG5cdGNvbnN0IGJ1dHRvblR5cGVDb25kaXRpb24gPSBlcXVhbChnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZW1waGFzaXplZCksIHRydWUpO1xuXHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oaWZFbHNlKGJ1dHRvblR5cGVDb25kaXRpb24sIEJ1dHRvblR5cGUuR2hvc3QsIEJ1dHRvblR5cGUuVHJhbnNwYXJlbnQpKSBhcyBCdXR0b25UeXBlO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIHN1YnNlY3Rpb24gYmFzZWQgb24gRmFjZXRUeXBlcy5cbiAqXG4gKiBAcGFyYW0gZmFjZXREZWZpbml0aW9uXG4gKiBAcGFyYW0gZmFjZXRzVG9DcmVhdGVcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gbGV2ZWxcbiAqIEBwYXJhbSBoYXNTaW5nbGVDb250ZW50XG4gKiBAcGFyYW0gaXNIZWFkZXJTZWN0aW9uXG4gKiBAcmV0dXJucyBBIHN1YnNlY3Rpb24gZGVmaW5pdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU3ViU2VjdGlvbihcblx0ZmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzLFxuXHRmYWNldHNUb0NyZWF0ZTogRmFjZXRUeXBlc1tdLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRsZXZlbDogbnVtYmVyLFxuXHRoYXNTaW5nbGVDb250ZW50OiBib29sZWFuLFxuXHRpc0hlYWRlclNlY3Rpb24/OiBib29sZWFuXG4pOiBPYmplY3RQYWdlU3ViU2VjdGlvbiB7XG5cdGNvbnN0IHN1YlNlY3Rpb25JRCA9IGdldFN1YlNlY3Rpb25JRCh7IEZhY2V0OiBmYWNldERlZmluaXRpb24gfSk7XG5cdGNvbnN0IG9IaWRkZW5Bbm5vdGF0aW9uOiBhbnkgPSBmYWNldERlZmluaXRpb24uYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW47XG5cdGNvbnN0IGlzVmlzaWJsZSA9IGNvbXBpbGVFeHByZXNzaW9uKG5vdChlcXVhbCh0cnVlLCBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24ob0hpZGRlbkFubm90YXRpb24pKSkpO1xuXHRjb25zdCBpc0R5bmFtaWNFeHByZXNzaW9uID1cblx0XHRpc1Zpc2libGUgJiYgdHlwZW9mIGlzVmlzaWJsZSA9PT0gXCJzdHJpbmdcIiAmJiBpc1Zpc2libGUuaW5kZXhPZihcIns9XCIpID09PSAwICYmIG9IaWRkZW5Bbm5vdGF0aW9uPy50eXBlICE9PSBcIlBhdGhcIjtcblx0Y29uc3QgaXNWaXNpYmxlRHluYW1pY0V4cHJlc3Npb24gPVxuXHRcdGlzVmlzaWJsZSAmJiBpc0R5bmFtaWNFeHByZXNzaW9uID8gaXNWaXNpYmxlLnN1YnN0cmluZyhpc1Zpc2libGUuaW5kZXhPZihcIns9XCIpICsgMiwgaXNWaXNpYmxlLmxhc3RJbmRleE9mKFwifVwiKSkgOiBmYWxzZTtcblx0Y29uc3QgdGl0bGUgPSBjb21waWxlRXhwcmVzc2lvbihnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZmFjZXREZWZpbml0aW9uLkxhYmVsKSk7XG5cdGNvbnN0IHN1YlNlY3Rpb246IEJhc2VTdWJTZWN0aW9uID0ge1xuXHRcdGlkOiBzdWJTZWN0aW9uSUQsXG5cdFx0a2V5OiBnZXRTdWJTZWN0aW9uS2V5KGZhY2V0RGVmaW5pdGlvbiwgc3ViU2VjdGlvbklEKSxcblx0XHR0aXRsZTogdGl0bGUsXG5cdFx0dHlwZTogU3ViU2VjdGlvblR5cGUuVW5rbm93bixcblx0XHRhbm5vdGF0aW9uUGF0aDogY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKGZhY2V0RGVmaW5pdGlvbi5mdWxseVF1YWxpZmllZE5hbWUpLFxuXHRcdHZpc2libGU6IGlzVmlzaWJsZSxcblx0XHRpc1Zpc2liaWxpdHlEeW5hbWljOiBpc0R5bmFtaWNFeHByZXNzaW9uLFxuXHRcdGxldmVsOiBsZXZlbCxcblx0XHRzaWRlQ29udGVudDogdW5kZWZpbmVkXG5cdH07XG5cdGlmIChpc0hlYWRlclNlY3Rpb24pIHtcblx0XHRzdWJTZWN0aW9uLnN0YXNoZWQgPSBnZXRTdGFzaGVkU2V0dGluZ3NGb3JIZWFkZXJGYWNldChmYWNldERlZmluaXRpb24sIGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0c3ViU2VjdGlvbi5mbGV4U2V0dGluZ3MgPSB7XG5cdFx0XHRkZXNpZ250aW1lOiBnZXREZXNpZ25UaW1lTWV0YWRhdGFTZXR0aW5nc0ZvckhlYWRlckZhY2V0KGZhY2V0RGVmaW5pdGlvbiwgZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KVxuXHRcdH07XG5cdH1cblx0bGV0IGNvbnRlbnQ6IEFycmF5PE9iamVjdFBhZ2VTdWJTZWN0aW9uPiA9IFtdO1xuXHRjb25zdCB0YWJsZUNvbnRlbnQ6IEFycmF5PE9iamVjdFBhZ2VTdWJTZWN0aW9uPiA9IFtdO1xuXHRjb25zdCBpbmRleDogQXJyYXk8bnVtYmVyPiA9IFtdO1xuXHRsZXQgdW5zdXBwb3J0ZWRUZXh0ID0gXCJcIjtcblx0bGV2ZWwrKztcblx0c3dpdGNoIChmYWNldERlZmluaXRpb24uJFR5cGUpIHtcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkNvbGxlY3Rpb25GYWNldDpcblx0XHRcdGNvbnN0IGZhY2V0cyA9IGZhY2V0RGVmaW5pdGlvbi5GYWNldHM7XG5cdFx0XHRpZiAoaGFzVGFibGUoZmFjZXRzKSkge1xuXHRcdFx0XHQvLyBpZiB3ZSBoYXZlIHRhYmxlcyBpbiBhIGNvbGxlY3Rpb24gZmFjZXQgdGhlbiB3ZSBjcmVhdGUgc2VwYXJhdGUgc3Vic2VjdGlvbiBmb3IgdGhlbVxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGZhY2V0cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdGlmICh0YXJnZXRUZXJtcy5pbmRleE9mKChmYWNldHNbaV0gYXMgYW55KS5UYXJnZXQ/LiR0YXJnZXQ/LnRlcm0pID4gLTEpIHtcblx0XHRcdFx0XHRcdC8vY3JlYXRpbmcgc2VwYXJhdGUgYXJyYXkgZm9yIHRhYmxlc1xuXHRcdFx0XHRcdFx0dGFibGVDb250ZW50LnB1c2goY3JlYXRlU3ViU2VjdGlvbihmYWNldHNbaV0sIFtdLCBjb252ZXJ0ZXJDb250ZXh0LCBsZXZlbCwgZmFjZXRzLmxlbmd0aCA9PT0gMSwgaXNIZWFkZXJTZWN0aW9uKSk7XG5cdFx0XHRcdFx0XHRpbmRleC5wdXNoKGkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRmb3IgKGxldCBpID0gaW5kZXgubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0XHRcdFx0XHQvL3JlbW92ZSB0YWJsZSBmYWNldHMgZnJvbSBmYWNldCBkZWZpbml0aW9uXG5cdFx0XHRcdFx0ZmFjZXRzLnNwbGljZShpbmRleFtpXSwgMSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGZhY2V0cy5sZW5ndGgpIHtcblx0XHRcdFx0XHRmYWNldERlZmluaXRpb24uRmFjZXRzID0gZmFjZXRzO1xuXHRcdFx0XHRcdC8vY3JlYXRlIGEgZm9ybSBzdWJzZWN0aW9uIGZyb20gdGhlIHJlbWFpbmluZyBmYWNldHNcblx0XHRcdFx0XHRjb250ZW50LnB1c2goY3JlYXRlU3ViU2VjdGlvbihmYWNldERlZmluaXRpb24sIFtdLCBjb252ZXJ0ZXJDb250ZXh0LCBsZXZlbCwgaGFzU2luZ2xlQ29udGVudCwgaXNIZWFkZXJTZWN0aW9uKSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29udGVudCA9IGNvbnRlbnQuY29uY2F0KHRhYmxlQ29udGVudCk7XG5cdFx0XHRcdGNvbnN0IG1peGVkU3ViU2VjdGlvbjogTWl4ZWRTdWJTZWN0aW9uID0ge1xuXHRcdFx0XHRcdC4uLnN1YlNlY3Rpb24sXG5cdFx0XHRcdFx0dHlwZTogU3ViU2VjdGlvblR5cGUuTWl4ZWQsXG5cdFx0XHRcdFx0bGV2ZWw6IGxldmVsLFxuXHRcdFx0XHRcdGNvbnRlbnQ6IGNvbnRlbnRcblx0XHRcdFx0fTtcblx0XHRcdFx0cmV0dXJuIG1peGVkU3ViU2VjdGlvbjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IGZhY2V0QWN0aW9ucyA9IGdldEZhY2V0QWN0aW9ucyhmYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdFx0XHRcdGZvcm1Db2xsZWN0aW9uU3ViU2VjdGlvbjogRm9ybVN1YlNlY3Rpb24gPSB7XG5cdFx0XHRcdFx0XHQuLi5zdWJTZWN0aW9uLFxuXHRcdFx0XHRcdFx0dHlwZTogU3ViU2VjdGlvblR5cGUuRm9ybSxcblx0XHRcdFx0XHRcdGZvcm1EZWZpbml0aW9uOiBjcmVhdGVGb3JtRGVmaW5pdGlvbihmYWNldERlZmluaXRpb24sIGlzVmlzaWJsZSwgY29udmVydGVyQ29udGV4dCwgZmFjZXRBY3Rpb25zLmFjdGlvbnMpLFxuXHRcdFx0XHRcdFx0bGV2ZWw6IGxldmVsLFxuXHRcdFx0XHRcdFx0YWN0aW9uczogZmFjZXRBY3Rpb25zLmFjdGlvbnMuZmlsdGVyKChhY3Rpb24pID0+IGFjdGlvbi5mYWNldE5hbWUgPT09IHVuZGVmaW5lZCksXG5cdFx0XHRcdFx0XHRjb21tYW5kQWN0aW9uczogZmFjZXRBY3Rpb25zLmNvbW1hbmRBY3Rpb25zXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0cmV0dXJuIGZvcm1Db2xsZWN0aW9uU3ViU2VjdGlvbjtcblx0XHRcdH1cblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLlJlZmVyZW5jZUZhY2V0OlxuXHRcdFx0aWYgKCFmYWNldERlZmluaXRpb24uVGFyZ2V0LiR0YXJnZXQpIHtcblx0XHRcdFx0dW5zdXBwb3J0ZWRUZXh0ID0gYFVuYWJsZSB0byBmaW5kIGFubm90YXRpb25QYXRoICR7ZmFjZXREZWZpbml0aW9uLlRhcmdldC52YWx1ZX1gO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c3dpdGNoIChmYWNldERlZmluaXRpb24uVGFyZ2V0LiR0YXJnZXQudGVybSkge1xuXHRcdFx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVGVybXMuTGluZUl0ZW06XG5cdFx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5DaGFydDpcblx0XHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLlByZXNlbnRhdGlvblZhcmlhbnQ6XG5cdFx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50OlxuXHRcdFx0XHRcdFx0Y29uc3QgcHJlc2VudGF0aW9uID0gZ2V0RGF0YVZpc3VhbGl6YXRpb25Db25maWd1cmF0aW9uKFxuXHRcdFx0XHRcdFx0XHRmYWNldERlZmluaXRpb24uVGFyZ2V0LnZhbHVlLFxuXHRcdFx0XHRcdFx0XHRnZXRDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFuY2UoZmFjZXREZWZpbml0aW9uLCBmYWNldHNUb0NyZWF0ZSwgY29udmVydGVyQ29udGV4dCksXG5cdFx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdFx0aXNIZWFkZXJTZWN0aW9uXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0Y29uc3QgY29udHJvbFRpdGxlID1cblx0XHRcdFx0XHRcdFx0KHByZXNlbnRhdGlvbi52aXN1YWxpemF0aW9uc1swXSBhcyBhbnkpPy5hbm5vdGF0aW9uPy50aXRsZSB8fCAocHJlc2VudGF0aW9uLnZpc3VhbGl6YXRpb25zWzBdIGFzIGFueSk/LnRpdGxlO1xuXHRcdFx0XHRcdFx0Y29uc3Qgc2hvd1RpdGxlID0gaXNTdWJzZWN0aW9uVGl0bGVTaG93bihoYXNTaW5nbGVDb250ZW50LCBzdWJTZWN0aW9uLnRpdGxlLCBjb250cm9sVGl0bGUpO1xuXHRcdFx0XHRcdFx0Y29uc3QgdGl0bGVWaXNpYmxlRXhwcmVzc2lvbiA9IGlzVmlzaWJsZSAmJiB0aXRsZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiAodGl0bGUgPyBpc1Zpc2libGUgOiBmYWxzZSk7XG5cdFx0XHRcdFx0XHRjb25zdCBkYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb246IERhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvbiA9IHtcblx0XHRcdFx0XHRcdFx0Li4uc3ViU2VjdGlvbixcblx0XHRcdFx0XHRcdFx0dHlwZTogU3ViU2VjdGlvblR5cGUuRGF0YVZpc3VhbGl6YXRpb24sXG5cdFx0XHRcdFx0XHRcdGxldmVsOiBsZXZlbCxcblx0XHRcdFx0XHRcdFx0cHJlc2VudGF0aW9uOiBwcmVzZW50YXRpb24sXG5cdFx0XHRcdFx0XHRcdHNob3dUaXRsZTogc2hvd1RpdGxlLFxuXHRcdFx0XHRcdFx0XHR0aXRsZVZpc2libGU6IGlzRHluYW1pY0V4cHJlc3Npb25cblx0XHRcdFx0XHRcdFx0XHQ/IGB7PSAoJHtpc1Zpc2libGVEeW5hbWljRXhwcmVzc2lvbn0pICYmICgnJHt0aXRsZX0nICE9PSd1bmRlZmluZWQnKSAmJiAoJHtzaG93VGl0bGV9ID8gdHJ1ZSA6IGZhbHNlKSB9YFxuXHRcdFx0XHRcdFx0XHRcdDogdGl0bGVWaXNpYmxlRXhwcmVzc2lvblxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdHJldHVybiBkYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb247XG5cblx0XHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLkZpZWxkR3JvdXA6XG5cdFx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5JZGVudGlmaWNhdGlvbjpcblx0XHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLkRhdGFQb2ludDpcblx0XHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLlN0YXR1c0luZm86XG5cdFx0XHRcdFx0Y2FzZSBDb21tdW5pY2F0aW9uQW5ub3RhdGlvblRlcm1zLkNvbnRhY3Q6XG5cdFx0XHRcdFx0XHQvLyBBbGwgdGhvc2UgZWxlbWVudCBiZWxvbmcgdG8gYSBmb3JtIGZhY2V0XG5cdFx0XHRcdFx0XHRjb25zdCBmYWNldEFjdGlvbnMgPSBnZXRGYWNldEFjdGlvbnMoZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdFx0XHRcdFx0Zm9ybUVsZW1lbnRTdWJTZWN0aW9uOiBGb3JtU3ViU2VjdGlvbiA9IHtcblx0XHRcdFx0XHRcdFx0XHQuLi5zdWJTZWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRcdHR5cGU6IFN1YlNlY3Rpb25UeXBlLkZvcm0sXG5cdFx0XHRcdFx0XHRcdFx0bGV2ZWw6IGxldmVsLFxuXHRcdFx0XHRcdFx0XHRcdGZvcm1EZWZpbml0aW9uOiBjcmVhdGVGb3JtRGVmaW5pdGlvbihmYWNldERlZmluaXRpb24sIGlzVmlzaWJsZSwgY29udmVydGVyQ29udGV4dCwgZmFjZXRBY3Rpb25zLmFjdGlvbnMpLFxuXHRcdFx0XHRcdFx0XHRcdGFjdGlvbnM6IGZhY2V0QWN0aW9ucy5hY3Rpb25zLmZpbHRlcigoYWN0aW9uKSA9PiBhY3Rpb24uZmFjZXROYW1lID09PSB1bmRlZmluZWQpLFxuXHRcdFx0XHRcdFx0XHRcdGNvbW1hbmRBY3Rpb25zOiBmYWNldEFjdGlvbnMuY29tbWFuZEFjdGlvbnNcblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdHJldHVybiBmb3JtRWxlbWVudFN1YlNlY3Rpb247XG5cblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0dW5zdXBwb3J0ZWRUZXh0ID0gYEZvciAke2ZhY2V0RGVmaW5pdGlvbi5UYXJnZXQuJHRhcmdldC50ZXJtfSBGcmFnbWVudGA7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5SZWZlcmVuY2VVUkxGYWNldDpcblx0XHRcdHVuc3VwcG9ydGVkVGV4dCA9IFwiRm9yIFJlZmVyZW5jZSBVUkwgRmFjZXRcIjtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRicmVhaztcblx0fVxuXHQvLyBJZiB3ZSByZWFjaCBoZXJlIHdlIGVuZGVkIHVwIHdpdGggYW4gdW5zdXBwb3J0ZWQgU3ViU2VjdGlvbiB0eXBlXG5cdGNvbnN0IHVuc3VwcG9ydGVkU3ViU2VjdGlvbjogVW5zdXBwb3J0ZWRTdWJTZWN0aW9uID0ge1xuXHRcdC4uLnN1YlNlY3Rpb24sXG5cdFx0dGV4dDogdW5zdXBwb3J0ZWRUZXh0XG5cdH07XG5cdHJldHVybiB1bnN1cHBvcnRlZFN1YlNlY3Rpb247XG59XG5mdW5jdGlvbiBpc1N1YnNlY3Rpb25UaXRsZVNob3duKFxuXHRoYXNTaW5nbGVDb250ZW50OiBib29sZWFuLFxuXHRzdWJTZWN0aW9uVGl0bGU6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLFxuXHRjb250cm9sVGl0bGU6IHN0cmluZ1xuKTogYm9vbGVhbiB7XG5cdGlmIChoYXNTaW5nbGVDb250ZW50ICYmIGNvbnRyb2xUaXRsZSA9PT0gc3ViU2VjdGlvblRpdGxlKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gY3JlYXRlRm9ybUFjdGlvblJlZHVjZXIoXG5cdGFjdGlvbnM6IENvbnZlcnRlckFjdGlvbltdLFxuXHRmYWNldERlZmluaXRpb246IFJlZmVyZW5jZUZhY2V0VHlwZXMsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IENvbnZlcnRlckFjdGlvbltdIHtcblx0Y29uc3QgcmVmZXJlbmNlVGFyZ2V0ID0gZmFjZXREZWZpbml0aW9uLlRhcmdldC4kdGFyZ2V0O1xuXHRjb25zdCB0YXJnZXRWYWx1ZSA9IGZhY2V0RGVmaW5pdGlvbi5UYXJnZXQudmFsdWU7XG5cdGxldCBtYW5pZmVzdEFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUFjdGlvbj4gPSB7fTtcblx0bGV0IGRhdGFGaWVsZENvbGxlY3Rpb246IERhdGFGaWVsZEFic3RyYWN0VHlwZXNbXSA9IFtdO1xuXHRsZXQgW25hdmlnYXRpb25Qcm9wZXJ0eVBhdGhdOiBhbnkgPSB0YXJnZXRWYWx1ZS5zcGxpdChcIkBcIik7XG5cdGlmIChuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxlbmd0aCA+IDApIHtcblx0XHRpZiAobmF2aWdhdGlvblByb3BlcnR5UGF0aC5sYXN0SW5kZXhPZihcIi9cIikgPT09IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgubGVuZ3RoIC0gMSkge1xuXHRcdFx0bmF2aWdhdGlvblByb3BlcnR5UGF0aCA9IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGguc3Vic3RyKDAsIG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgubGVuZ3RoIC0gMSk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPSB1bmRlZmluZWQ7XG5cdH1cblxuXHRpZiAocmVmZXJlbmNlVGFyZ2V0KSB7XG5cdFx0c3dpdGNoIChyZWZlcmVuY2VUYXJnZXQudGVybSkge1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5GaWVsZEdyb3VwOlxuXHRcdFx0XHRkYXRhRmllbGRDb2xsZWN0aW9uID0gKHJlZmVyZW5jZVRhcmdldCBhcyBGaWVsZEdyb3VwKS5EYXRhO1xuXHRcdFx0XHRtYW5pZmVzdEFjdGlvbnMgPSBnZXRBY3Rpb25zRnJvbU1hbmlmZXN0KFxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbihyZWZlcmVuY2VUYXJnZXQpLmFjdGlvbnMsXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0ZmFjZXREZWZpbml0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZVxuXHRcdFx0XHQpLmFjdGlvbnM7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5JZGVudGlmaWNhdGlvbjpcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVGVybXMuU3RhdHVzSW5mbzpcblx0XHRcdFx0aWYgKHJlZmVyZW5jZVRhcmdldC5xdWFsaWZpZXIpIHtcblx0XHRcdFx0XHRkYXRhRmllbGRDb2xsZWN0aW9uID0gcmVmZXJlbmNlVGFyZ2V0O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cblx0YWN0aW9ucyA9IGRhdGFGaWVsZENvbGxlY3Rpb24ucmVkdWNlKChhY3Rpb25SZWR1Y2VyLCBkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpID0+IHtcblx0XHRzd2l0Y2ggKGRhdGFGaWVsZC4kVHlwZSkge1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb246XG5cdFx0XHRcdGlmIChkYXRhRmllbGQuUmVxdWlyZXNDb250ZXh0Py52YWx1ZU9mKCkgPT09IHRydWUpIHtcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0XHQuZ2V0RGlhZ25vc3RpY3MoKVxuXHRcdFx0XHRcdFx0LmFkZElzc3VlKElzc3VlQ2F0ZWdvcnkuQW5ub3RhdGlvbiwgSXNzdWVTZXZlcml0eS5Mb3csIElzc3VlVHlwZS5NQUxGT1JNRURfREFUQUZJRUxEX0ZPUl9JQk4uUkVRVUlSRVNDT05URVhUKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZGF0YUZpZWxkLklubGluZT8udmFsdWVPZigpID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHRcdFx0LmdldERpYWdub3N0aWNzKClcblx0XHRcdFx0XHRcdC5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sIElzc3VlU2V2ZXJpdHkuTG93LCBJc3N1ZVR5cGUuTUFMRk9STUVEX0RBVEFGSUVMRF9GT1JfSUJOLklOTElORSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGRhdGFGaWVsZC5EZXRlcm1pbmluZz8udmFsdWVPZigpID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHRcdFx0LmdldERpYWdub3N0aWNzKClcblx0XHRcdFx0XHRcdC5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sIElzc3VlU2V2ZXJpdHkuTG93LCBJc3N1ZVR5cGUuTUFMRk9STUVEX0RBVEFGSUVMRF9GT1JfSUJOLkRFVEVSTUlOSU5HKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBtTmF2aWdhdGlvblBhcmFtZXRlcnM6IGFueSA9IHt9O1xuXHRcdFx0XHRpZiAoZGF0YUZpZWxkLk1hcHBpbmcpIHtcblx0XHRcdFx0XHRtTmF2aWdhdGlvblBhcmFtZXRlcnMuc2VtYW50aWNPYmplY3RNYXBwaW5nID0gZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nKGRhdGFGaWVsZC5NYXBwaW5nKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRhY3Rpb25SZWR1Y2VyLnB1c2goe1xuXHRcdFx0XHRcdHR5cGU6IEFjdGlvblR5cGUuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uLFxuXHRcdFx0XHRcdGlkOiBnZXRGb3JtSUQoeyBGYWNldDogZmFjZXREZWZpbml0aW9uIH0sIGRhdGFGaWVsZCksXG5cdFx0XHRcdFx0a2V5OiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCksXG5cdFx0XHRcdFx0dGV4dDogZGF0YUZpZWxkLkxhYmVsPy50b1N0cmluZygpLFxuXHRcdFx0XHRcdGFubm90YXRpb25QYXRoOiBcIlwiLFxuXHRcdFx0XHRcdGVuYWJsZWQ6XG5cdFx0XHRcdFx0XHRkYXRhRmllbGQuTmF2aWdhdGlvbkF2YWlsYWJsZSAhPT0gdW5kZWZpbmVkXG5cdFx0XHRcdFx0XHRcdD8gY29tcGlsZUV4cHJlc3Npb24oZXF1YWwoZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGFGaWVsZC5OYXZpZ2F0aW9uQXZhaWxhYmxlPy52YWx1ZU9mKCkpLCB0cnVlKSlcblx0XHRcdFx0XHRcdFx0OiBcInRydWVcIixcblx0XHRcdFx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihub3QoZXF1YWwoZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpKSwgdHJ1ZSkpKSxcblx0XHRcdFx0XHRidXR0b25UeXBlOiBnZXRCdXR0b25UeXBlKGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkVtcGhhc2l6ZWQpLFxuXHRcdFx0XHRcdHByZXNzOiBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdFx0XHRcdGZuKFwiLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ubmF2aWdhdGVcIiwgW1xuXHRcdFx0XHRcdFx0XHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZGF0YUZpZWxkLlNlbWFudGljT2JqZWN0KSxcblx0XHRcdFx0XHRcdFx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGFGaWVsZC5BY3Rpb24pLFxuXHRcdFx0XHRcdFx0XHRtTmF2aWdhdGlvblBhcmFtZXRlcnNcblx0XHRcdFx0XHRcdF0pXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRjdXN0b21EYXRhOiBjb21waWxlRXhwcmVzc2lvbih7XG5cdFx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGFGaWVsZC5TZW1hbnRpY09iamVjdCksXG5cdFx0XHRcdFx0XHRhY3Rpb246IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihkYXRhRmllbGQuQWN0aW9uKVxuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uOlxuXHRcdFx0XHRjb25zdCBmb3JtTWFuaWZlc3RBY3Rpb25zQ29uZmlndXJhdGlvbjogYW55ID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHJlZmVyZW5jZVRhcmdldCkuYWN0aW9ucztcblx0XHRcdFx0Y29uc3Qga2V5OiBzdHJpbmcgPSBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCk7XG5cdFx0XHRcdGFjdGlvblJlZHVjZXIucHVzaCh7XG5cdFx0XHRcdFx0dHlwZTogQWN0aW9uVHlwZS5EYXRhRmllbGRGb3JBY3Rpb24sXG5cdFx0XHRcdFx0aWQ6IGdldEZvcm1JRCh7IEZhY2V0OiBmYWNldERlZmluaXRpb24gfSwgZGF0YUZpZWxkKSxcblx0XHRcdFx0XHRrZXk6IGtleSxcblx0XHRcdFx0XHR0ZXh0OiBkYXRhRmllbGQuTGFiZWw/LnRvU3RyaW5nKCksXG5cdFx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IFwiXCIsXG5cdFx0XHRcdFx0ZW5hYmxlZDogZ2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb24oY29udmVydGVyQ29udGV4dCwgZGF0YUZpZWxkLkFjdGlvblRhcmdldCksXG5cdFx0XHRcdFx0YmluZGluZzogbmF2aWdhdGlvblByb3BlcnR5UGF0aCA/IGB7ICdwYXRoJyA6ICcke25hdmlnYXRpb25Qcm9wZXJ0eVBhdGh9J31gIDogdW5kZWZpbmVkLFxuXHRcdFx0XHRcdHZpc2libGU6IGNvbXBpbGVFeHByZXNzaW9uKG5vdChlcXVhbChnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkpLCB0cnVlKSkpLFxuXHRcdFx0XHRcdHJlcXVpcmVzRGlhbG9nOiBpc0RpYWxvZyhkYXRhRmllbGQuQWN0aW9uVGFyZ2V0KSxcblx0XHRcdFx0XHRidXR0b25UeXBlOiBnZXRCdXR0b25UeXBlKGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkVtcGhhc2l6ZWQpLFxuXHRcdFx0XHRcdHByZXNzOiBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdFx0XHRcdGZuKFxuXHRcdFx0XHRcdFx0XHRcImludm9rZUFjdGlvblwiLFxuXHRcdFx0XHRcdFx0XHRbXG5cdFx0XHRcdFx0XHRcdFx0ZGF0YUZpZWxkLkFjdGlvbixcblx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb250ZXh0czogZm4oXCJnZXRCaW5kaW5nQ29udGV4dFwiLCBbXSwgcGF0aEluTW9kZWwoXCJcIiwgXCIkc291cmNlXCIpKSxcblx0XHRcdFx0XHRcdFx0XHRcdGludm9jYXRpb25Hcm91cGluZzogKGRhdGFGaWVsZC5JbnZvY2F0aW9uR3JvdXBpbmcgPT09IFwiVUkuT3BlcmF0aW9uR3JvdXBpbmdUeXBlL0NoYW5nZVNldFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdD8gXCJDaGFuZ2VTZXRcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ6IFwiSXNvbGF0ZWRcIikgYXMgT3BlcmF0aW9uR3JvdXBpbmdUeXBlLFxuXHRcdFx0XHRcdFx0XHRcdFx0bGFiZWw6IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihkYXRhRmllbGQuTGFiZWwpLFxuXHRcdFx0XHRcdFx0XHRcdFx0bW9kZWw6IGZuKFwiZ2V0TW9kZWxcIiwgW10sIHBhdGhJbk1vZGVsKFwiL1wiLCBcIiRzb3VyY2VcIikpLFxuXHRcdFx0XHRcdFx0XHRcdFx0aXNOYXZpZ2FibGU6IGlzQWN0aW9uTmF2aWdhYmxlKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmb3JtTWFuaWZlc3RBY3Rpb25zQ29uZmlndXJhdGlvbiAmJiBmb3JtTWFuaWZlc3RBY3Rpb25zQ29uZmlndXJhdGlvbltrZXldXG5cdFx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRdLFxuXHRcdFx0XHRcdFx0XHRyZWYoXCIuZWRpdEZsb3dcIilcblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdGZhY2V0TmFtZTogZGF0YUZpZWxkLklubGluZSA/IGZhY2V0RGVmaW5pdGlvbi5mdWxseVF1YWxpZmllZE5hbWUgOiB1bmRlZmluZWRcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdHJldHVybiBhY3Rpb25SZWR1Y2VyO1xuXHR9LCBhY3Rpb25zKTtcblx0cmV0dXJuIGluc2VydEN1c3RvbUVsZW1lbnRzKGFjdGlvbnMsIG1hbmlmZXN0QWN0aW9ucyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0RpYWxvZyhhY3Rpb25EZWZpbml0aW9uOiBhbnkgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuXHRpZiAoYWN0aW9uRGVmaW5pdGlvbikge1xuXHRcdGNvbnN0IGJDcml0aWNhbCA9IGFjdGlvbkRlZmluaXRpb24uYW5ub3RhdGlvbnM/LkNvbW1vbj8uSXNBY3Rpb25Dcml0aWNhbDtcblx0XHRpZiAoYWN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzLmxlbmd0aCA+IDEgfHwgYkNyaXRpY2FsKSB7XG5cdFx0XHRyZXR1cm4gXCJEaWFsb2dcIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIFwiTm9uZVwiO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gXCJOb25lXCI7XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUN1c3RvbVN1YlNlY3Rpb25zKFxuXHRtYW5pZmVzdFN1YlNlY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBNYW5pZmVzdFN1YlNlY3Rpb24+LFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21PYmplY3RQYWdlU3ViU2VjdGlvbj4ge1xuXHRjb25zdCBzdWJTZWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tT2JqZWN0UGFnZVN1YlNlY3Rpb24+ID0ge307XG5cdE9iamVjdC5rZXlzKG1hbmlmZXN0U3ViU2VjdGlvbnMpLmZvckVhY2goXG5cdFx0KHN1YlNlY3Rpb25LZXkpID0+XG5cdFx0XHQoc3ViU2VjdGlvbnNbc3ViU2VjdGlvbktleV0gPSBjcmVhdGVDdXN0b21TdWJTZWN0aW9uKG1hbmlmZXN0U3ViU2VjdGlvbnNbc3ViU2VjdGlvbktleV0sIHN1YlNlY3Rpb25LZXksIGNvbnZlcnRlckNvbnRleHQpKVxuXHQpO1xuXHRyZXR1cm4gc3ViU2VjdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDdXN0b21TdWJTZWN0aW9uKFxuXHRtYW5pZmVzdFN1YlNlY3Rpb246IE1hbmlmZXN0U3ViU2VjdGlvbixcblx0c3ViU2VjdGlvbktleTogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiBDdXN0b21PYmplY3RQYWdlU3ViU2VjdGlvbiB7XG5cdGNvbnN0IHNpZGVDb250ZW50OiBTaWRlQ29udGVudERlZiB8IHVuZGVmaW5lZCA9IG1hbmlmZXN0U3ViU2VjdGlvbi5zaWRlQ29udGVudFxuXHRcdD8ge1xuXHRcdFx0XHR0ZW1wbGF0ZTogbWFuaWZlc3RTdWJTZWN0aW9uLnNpZGVDb250ZW50LnRlbXBsYXRlLFxuXHRcdFx0XHRpZDogZ2V0U2lkZUNvbnRlbnRJRChzdWJTZWN0aW9uS2V5KSxcblx0XHRcdFx0dmlzaWJsZTogZmFsc2UsXG5cdFx0XHRcdGVxdWFsU3BsaXQ6IG1hbmlmZXN0U3ViU2VjdGlvbi5zaWRlQ29udGVudC5lcXVhbFNwbGl0XG5cdFx0ICB9XG5cdFx0OiB1bmRlZmluZWQ7XG5cdGxldCBwb3NpdGlvbiA9IG1hbmlmZXN0U3ViU2VjdGlvbi5wb3NpdGlvbjtcblx0aWYgKCFwb3NpdGlvbikge1xuXHRcdHBvc2l0aW9uID0ge1xuXHRcdFx0cGxhY2VtZW50OiBQbGFjZW1lbnQuQWZ0ZXJcblx0XHR9O1xuXHR9XG5cdGNvbnN0IGlzVmlzaWJsZSA9IG1hbmlmZXN0U3ViU2VjdGlvbi52aXNpYmxlICE9PSB1bmRlZmluZWQgPyBtYW5pZmVzdFN1YlNlY3Rpb24udmlzaWJsZSA6IHRydWU7XG5cdGNvbnN0IGlzRHluYW1pY0V4cHJlc3Npb24gPSBpc1Zpc2libGUgJiYgdHlwZW9mIGlzVmlzaWJsZSA9PT0gXCJzdHJpbmdcIiAmJiBpc1Zpc2libGUuaW5kZXhPZihcIns9XCIpID09PSAwO1xuXHRjb25zdCBtYW5pZmVzdEFjdGlvbnMgPSBnZXRBY3Rpb25zRnJvbU1hbmlmZXN0KG1hbmlmZXN0U3ViU2VjdGlvbi5hY3Rpb25zLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3Qgc3ViU2VjdGlvbkRlZmluaXRpb24gPSB7XG5cdFx0dHlwZTogU3ViU2VjdGlvblR5cGUuVW5rbm93bixcblx0XHRpZDogbWFuaWZlc3RTdWJTZWN0aW9uLmlkIHx8IGdldEN1c3RvbVN1YlNlY3Rpb25JRChzdWJTZWN0aW9uS2V5KSxcblx0XHRhY3Rpb25zOiBtYW5pZmVzdEFjdGlvbnMuYWN0aW9ucyxcblx0XHRrZXk6IHN1YlNlY3Rpb25LZXksXG5cdFx0dGl0bGU6IG1hbmlmZXN0U3ViU2VjdGlvbi50aXRsZSxcblx0XHRsZXZlbDogMSxcblx0XHRwb3NpdGlvbjogcG9zaXRpb24sXG5cdFx0dmlzaWJsZTogbWFuaWZlc3RTdWJTZWN0aW9uLnZpc2libGUgIT09IHVuZGVmaW5lZCA/IG1hbmlmZXN0U3ViU2VjdGlvbi52aXNpYmxlIDogdHJ1ZSxcblx0XHRzaWRlQ29udGVudDogc2lkZUNvbnRlbnQsXG5cdFx0aXNWaXNpYmlsaXR5RHluYW1pYzogaXNEeW5hbWljRXhwcmVzc2lvblxuXHR9O1xuXHRpZiAobWFuaWZlc3RTdWJTZWN0aW9uLnRlbXBsYXRlIHx8IG1hbmlmZXN0U3ViU2VjdGlvbi5uYW1lKSB7XG5cdFx0c3ViU2VjdGlvbkRlZmluaXRpb24udHlwZSA9IFN1YlNlY3Rpb25UeXBlLlhNTEZyYWdtZW50O1xuXHRcdChzdWJTZWN0aW9uRGVmaW5pdGlvbiBhcyB1bmtub3duIGFzIFhNTEZyYWdtZW50U3ViU2VjdGlvbikudGVtcGxhdGUgPSBtYW5pZmVzdFN1YlNlY3Rpb24udGVtcGxhdGUgfHwgbWFuaWZlc3RTdWJTZWN0aW9uLm5hbWUgfHwgXCJcIjtcblx0fSBlbHNlIHtcblx0XHRzdWJTZWN0aW9uRGVmaW5pdGlvbi50eXBlID0gU3ViU2VjdGlvblR5cGUuUGxhY2Vob2xkZXI7XG5cdH1cblx0cmV0dXJuIHN1YlNlY3Rpb25EZWZpbml0aW9uIGFzIEN1c3RvbU9iamVjdFBhZ2VTdWJTZWN0aW9uO1xufVxuXG4vKipcbiAqIEV2YWx1YXRlIGlmIHRoZSBjb25kZW5zZWQgbW9kZSBjYW4gYmUgYXBwbGkzZWQgb24gdGhlIHRhYmxlLlxuICpcbiAqIEBwYXJhbSBjdXJyZW50RmFjZXRcbiAqIEBwYXJhbSBmYWNldHNUb0NyZWF0ZUluU2VjdGlvblxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIGB0cnVlYCBmb3IgY29tcGxpYW50LCBmYWxzZSBvdGhlcndpc2VcbiAqL1xuZnVuY3Rpb24gZ2V0Q29uZGVuc2VkVGFibGVMYXlvdXRDb21wbGlhbmNlKFxuXHRjdXJyZW50RmFjZXQ6IEZhY2V0VHlwZXMsXG5cdGZhY2V0c1RvQ3JlYXRlSW5TZWN0aW9uOiBGYWNldFR5cGVzW10sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IGJvb2xlYW4ge1xuXHRjb25zdCBtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRpZiAobWFuaWZlc3RXcmFwcGVyLnVzZUljb25UYWJCYXIoKSkge1xuXHRcdC8vIElmIHRoZSBPUCB1c2UgdGhlIHRhYiBiYXNlZCB3ZSBjaGVjayBpZiB0aGUgZmFjZXRzIHRoYXQgd2lsbCBiZSBjcmVhdGVkIGZvciB0aGlzIHNlY3Rpb24gYXJlIGFsbCBub24gdmlzaWJsZVxuXHRcdHJldHVybiBoYXNOb090aGVyVmlzaWJsZVRhYmxlSW5UYXJnZXRzKGN1cnJlbnRGYWNldCwgZmFjZXRzVG9DcmVhdGVJblNlY3Rpb24pO1xuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IGVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblx0XHRpZiAoZW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uVUk/LkZhY2V0cz8ubGVuZ3RoICYmIGVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LlVJPy5GYWNldHM/Lmxlbmd0aCA+IDEpIHtcblx0XHRcdHJldHVybiBoYXNOb090aGVyVmlzaWJsZVRhYmxlSW5UYXJnZXRzKGN1cnJlbnRGYWNldCwgZmFjZXRzVG9DcmVhdGVJblNlY3Rpb24pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gaGFzTm9PdGhlclZpc2libGVUYWJsZUluVGFyZ2V0cyhjdXJyZW50RmFjZXQ6IEZhY2V0VHlwZXMsIGZhY2V0c1RvQ3JlYXRlSW5TZWN0aW9uOiBGYWNldFR5cGVzW10pOiBib29sZWFuIHtcblx0cmV0dXJuIGZhY2V0c1RvQ3JlYXRlSW5TZWN0aW9uLmV2ZXJ5KGZ1bmN0aW9uIChzdWJGYWNldCkge1xuXHRcdGlmIChzdWJGYWNldCAhPT0gY3VycmVudEZhY2V0KSB7XG5cdFx0XHRpZiAoc3ViRmFjZXQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLlJlZmVyZW5jZUZhY2V0KSB7XG5cdFx0XHRcdGNvbnN0IHJlZkZhY2V0ID0gc3ViRmFjZXQ7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRyZWZGYWNldC5UYXJnZXQ/LiR0YXJnZXQ/LnRlcm0gPT09IFVJQW5ub3RhdGlvblRlcm1zLkxpbmVJdGVtIHx8XG5cdFx0XHRcdFx0cmVmRmFjZXQuVGFyZ2V0Py4kdGFyZ2V0Py50ZXJtID09PSBVSUFubm90YXRpb25UZXJtcy5QcmVzZW50YXRpb25WYXJpYW50IHx8XG5cdFx0XHRcdFx0cmVmRmFjZXQuVGFyZ2V0LiR0YXJnZXQ/LnRlcm0gPT09IFVJQW5ub3RhdGlvblRlcm1zLlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHJlZkZhY2V0LmFubm90YXRpb25zPy5VST8uSGlkZGVuICE9PSB1bmRlZmluZWQgPyByZWZGYWNldC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiA6IGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3Qgc3ViQ29sbGVjdGlvbkZhY2V0ID0gc3ViRmFjZXQgYXMgQ29sbGVjdGlvbkZhY2V0VHlwZXM7XG5cdFx0XHRcdHJldHVybiBzdWJDb2xsZWN0aW9uRmFjZXQuRmFjZXRzLmV2ZXJ5KGZ1bmN0aW9uIChmYWNldCkge1xuXHRcdFx0XHRcdGNvbnN0IHN1YlJlZkZhY2V0ID0gZmFjZXQgYXMgUmVmZXJlbmNlRmFjZXRUeXBlcztcblx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRzdWJSZWZGYWNldC5UYXJnZXQ/LiR0YXJnZXQ/LnRlcm0gPT09IFVJQW5ub3RhdGlvblRlcm1zLkxpbmVJdGVtIHx8XG5cdFx0XHRcdFx0XHRzdWJSZWZGYWNldC5UYXJnZXQ/LiR0YXJnZXQ/LnRlcm0gPT09IFVJQW5ub3RhdGlvblRlcm1zLlByZXNlbnRhdGlvblZhcmlhbnQgfHxcblx0XHRcdFx0XHRcdHN1YlJlZkZhY2V0LlRhcmdldD8uJHRhcmdldD8udGVybSA9PT0gVUlBbm5vdGF0aW9uVGVybXMuU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHN1YlJlZkZhY2V0LmFubm90YXRpb25zPy5VST8uSGlkZGVuICE9PSB1bmRlZmluZWQgPyBzdWJSZWZGYWNldC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiA6IGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fSk7XG5cdFx0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