@sapui5/sap.fe.core 1.101.1 → 1.102.2

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 (217) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/AppComponent.js +5 -5
  4. package/src/sap/fe/core/AppComponent.ts +19 -18
  5. package/src/sap/fe/core/AppStateHandler.js +4 -4
  6. package/src/sap/fe/core/AppStateHandler.ts +9 -9
  7. package/src/sap/fe/core/CommonUtils.js +59 -93
  8. package/src/sap/fe/core/CommonUtils.ts +80 -99
  9. package/src/sap/fe/core/ExtensionAPI.js +2 -4
  10. package/src/sap/fe/core/ExtensionAPI.ts +1 -3
  11. package/src/sap/fe/core/PageController.js +14 -9
  12. package/src/sap/fe/core/PageController.ts +8 -2
  13. package/src/sap/fe/core/TemplateComponent.js +6 -6
  14. package/src/sap/fe/core/TemplateComponent.ts +5 -5
  15. package/src/sap/fe/core/TemplateModel.js +2 -2
  16. package/src/sap/fe/core/TemplateModel.ts +2 -2
  17. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +303 -75
  18. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +273 -64
  19. package/src/sap/fe/core/{BusyLocker.js → controllerextensions/BusyLocker.js} +1 -1
  20. package/src/sap/fe/core/{BusyLocker.ts → controllerextensions/BusyLocker.ts} +7 -7
  21. package/src/sap/fe/core/controllerextensions/EditFlow.js +234 -123
  22. package/src/sap/fe/core/controllerextensions/EditFlow.ts +176 -114
  23. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +34 -10
  24. package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +44 -12
  25. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +30 -28
  26. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +38 -31
  27. package/src/sap/fe/core/controllerextensions/InternalRouting.js +157 -102
  28. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +155 -103
  29. package/src/sap/fe/core/controllerextensions/MassEdit.js +4 -3
  30. package/src/sap/fe/core/controllerextensions/MassEdit.ts +15 -14
  31. package/src/sap/fe/core/controllerextensions/MessageHandler.js +3 -3
  32. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +10 -2
  33. package/src/sap/fe/core/controllerextensions/Paginator.js +12 -3
  34. package/src/sap/fe/core/controllerextensions/Paginator.ts +11 -2
  35. package/src/sap/fe/core/controllerextensions/Share.js +19 -1
  36. package/src/sap/fe/core/controllerextensions/Share.ts +18 -0
  37. package/src/sap/fe/core/controllerextensions/SideEffects.js +2 -2
  38. package/src/sap/fe/core/controllerextensions/SideEffects.ts +2 -2
  39. package/src/sap/fe/core/controllerextensions/ViewState.js +11 -1
  40. package/src/sap/fe/core/controllerextensions/ViewState.ts +10 -0
  41. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +105 -0
  42. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +98 -0
  43. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +360 -0
  44. package/src/sap/fe/core/{actions → controllerextensions}/collaboration/ActivitySync.ts +57 -106
  45. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +146 -0
  46. package/src/sap/fe/core/{actions → controllerextensions}/collaboration/CollaborationCommon.ts +6 -6
  47. package/src/sap/fe/core/{actions → controllerextensions}/collaboration/Manage.js +4 -4
  48. package/src/sap/fe/core/{actions → controllerextensions}/collaboration/Manage.ts +3 -3
  49. package/src/sap/fe/core/{actions → controllerextensions}/collaboration/ManageDialog.fragment.xml +0 -0
  50. package/src/sap/fe/core/{actions → controllerextensions}/collaboration/UserDetails.fragment.xml +5 -7
  51. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +1587 -0
  52. package/src/sap/fe/core/{TransactionHelper.ts → controllerextensions/editFlow/TransactionHelper.ts} +26 -13
  53. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +785 -0
  54. package/src/sap/fe/core/{actions → controllerextensions/editFlow}/draft.ts +179 -22
  55. package/src/sap/fe/core/controllerextensions/editFlow/operations.js +1175 -0
  56. package/src/sap/fe/core/{actions → controllerextensions/editFlow}/operations.ts +203 -98
  57. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +190 -0
  58. package/src/sap/fe/core/{actions → controllerextensions/editFlow}/sticky.ts +76 -12
  59. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +597 -0
  60. package/src/sap/fe/core/{actions → controllerextensions/messageHandler}/messageHandling.ts +46 -27
  61. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +940 -0
  62. package/src/sap/fe/core/{RouterProxy.ts → controllerextensions/routing/RouterProxy.ts} +20 -18
  63. package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +21 -18
  64. package/src/sap/fe/core/controls/CommandExecution.js +14 -3
  65. package/src/sap/fe/core/controls/CommandExecution.ts +11 -2
  66. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +34 -29
  67. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +33 -29
  68. package/src/sap/fe/core/controls/CustomQuickViewPage.js +2 -1
  69. package/src/sap/fe/core/controls/CustomQuickViewPage.ts +1 -0
  70. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossDraft.fragment.xml +11 -3
  71. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +17 -7
  72. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +9 -3
  73. package/src/sap/fe/core/controls/FileWrapper.js +49 -2
  74. package/src/sap/fe/core/controls/FileWrapper.ts +34 -1
  75. package/src/sap/fe/core/controls/FormElementWrapper.js +12 -2
  76. package/src/sap/fe/core/controls/FormElementWrapper.ts +12 -1
  77. package/src/sap/fe/core/controls/MassEditSelect.js +33 -0
  78. package/src/sap/fe/core/controls/MassEditSelect.ts +45 -0
  79. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +2 -2
  80. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +23 -28
  81. package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +28 -63
  82. package/src/sap/fe/core/controls/massEdit/MassEditField.fragment.xml +107 -0
  83. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +550 -36
  84. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +604 -36
  85. package/src/sap/fe/core/converters/ManifestSettings.js +2 -1
  86. package/src/sap/fe/core/converters/ManifestSettings.ts +4 -1
  87. package/src/sap/fe/core/converters/MetaModelConverter.js +11 -40
  88. package/src/sap/fe/core/converters/MetaModelConverter.ts +56 -84
  89. package/src/sap/fe/core/converters/annotations/DataField.js +20 -4
  90. package/src/sap/fe/core/converters/annotations/DataField.ts +24 -2
  91. package/src/sap/fe/core/converters/controls/Common/Action.js +5 -12
  92. package/src/sap/fe/core/converters/controls/Common/Action.ts +3 -9
  93. package/src/sap/fe/core/converters/controls/Common/Chart.js +10 -3
  94. package/src/sap/fe/core/converters/controls/Common/Chart.ts +8 -3
  95. package/src/sap/fe/core/converters/controls/Common/Form.js +12 -14
  96. package/src/sap/fe/core/converters/controls/Common/Form.ts +17 -19
  97. package/src/sap/fe/core/converters/controls/Common/Table.js +149 -66
  98. package/src/sap/fe/core/converters/controls/Common/Table.ts +136 -52
  99. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +22 -12
  100. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +23 -12
  101. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +7 -5
  102. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +15 -10
  103. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +26 -24
  104. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +35 -33
  105. package/src/sap/fe/core/converters/helpers/Aggregation.js +10 -2
  106. package/src/sap/fe/core/converters/helpers/Aggregation.ts +18 -13
  107. package/src/sap/fe/core/converters/helpers/BindingHelper.js +3 -2
  108. package/src/sap/fe/core/converters/helpers/BindingHelper.ts +6 -5
  109. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +25 -25
  110. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +35 -38
  111. package/src/sap/fe/core/designtime/AppComponent.designtime.js +3 -3
  112. package/src/sap/fe/core/designtime/AppComponent.designtime.ts +8 -6
  113. package/src/sap/fe/core/formatters/TableFormatter.js +73 -12
  114. package/src/sap/fe/core/formatters/TableFormatter.ts +70 -15
  115. package/src/sap/fe/core/fpm/Component.js +2 -2
  116. package/src/sap/fe/core/fpm/Component.ts +1 -1
  117. package/src/sap/fe/core/helpers/BindingExpression.js +10 -7
  118. package/src/sap/fe/core/helpers/BindingExpression.ts +37 -35
  119. package/src/sap/fe/core/helpers/ClassSupport.js +1 -1
  120. package/src/sap/fe/core/helpers/ClassSupport.ts +1 -0
  121. package/src/sap/fe/core/helpers/FPMHelper.js +3 -2
  122. package/src/sap/fe/core/helpers/FPMHelper.ts +9 -8
  123. package/src/sap/fe/core/helpers/MassEditHelper.js +399 -152
  124. package/src/sap/fe/core/helpers/MassEditHelper.ts +385 -163
  125. package/src/sap/fe/core/helpers/ModelHelper.js +1 -1
  126. package/src/sap/fe/core/helpers/ModelHelper.ts +20 -30
  127. package/src/sap/fe/core/helpers/StableIdHelper.js +5 -1
  128. package/src/sap/fe/core/helpers/StableIdHelper.ts +8 -4
  129. package/src/sap/fe/core/{Synchronization.js → helpers/Synchronization.js} +1 -1
  130. package/src/sap/fe/core/{Synchronization.ts → helpers/Synchronization.ts} +1 -1
  131. package/src/sap/fe/core/library.js +12 -3
  132. package/src/sap/fe/core/library.ts +9 -0
  133. package/src/sap/fe/core/messagebundle.properties +125 -180
  134. package/src/sap/fe/core/messagebundle_ar.properties +30 -63
  135. package/src/sap/fe/core/messagebundle_bg.properties +30 -63
  136. package/src/sap/fe/core/messagebundle_ca.properties +30 -63
  137. package/src/sap/fe/core/messagebundle_cs.properties +30 -63
  138. package/src/sap/fe/core/messagebundle_cy.properties +30 -63
  139. package/src/sap/fe/core/messagebundle_da.properties +31 -64
  140. package/src/sap/fe/core/messagebundle_de.properties +30 -63
  141. package/src/sap/fe/core/messagebundle_el.properties +31 -64
  142. package/src/sap/fe/core/messagebundle_en.properties +31 -64
  143. package/src/sap/fe/core/messagebundle_en_GB.properties +31 -64
  144. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +40 -73
  145. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +31 -64
  146. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +49 -82
  147. package/src/sap/fe/core/messagebundle_es.properties +30 -63
  148. package/src/sap/fe/core/messagebundle_es_MX.properties +30 -63
  149. package/src/sap/fe/core/messagebundle_et.properties +30 -63
  150. package/src/sap/fe/core/messagebundle_fi.properties +30 -63
  151. package/src/sap/fe/core/messagebundle_fr.properties +33 -66
  152. package/src/sap/fe/core/messagebundle_fr_CA.properties +30 -63
  153. package/src/sap/fe/core/messagebundle_hi.properties +30 -63
  154. package/src/sap/fe/core/messagebundle_hr.properties +30 -63
  155. package/src/sap/fe/core/messagebundle_hu.properties +29 -62
  156. package/src/sap/fe/core/messagebundle_id.properties +31 -64
  157. package/src/sap/fe/core/messagebundle_it.properties +30 -63
  158. package/src/sap/fe/core/messagebundle_iw.properties +30 -63
  159. package/src/sap/fe/core/messagebundle_ja.properties +30 -63
  160. package/src/sap/fe/core/messagebundle_kk.properties +30 -63
  161. package/src/sap/fe/core/messagebundle_ko.properties +30 -63
  162. package/src/sap/fe/core/messagebundle_lt.properties +30 -63
  163. package/src/sap/fe/core/messagebundle_lv.properties +30 -63
  164. package/src/sap/fe/core/messagebundle_ms.properties +31 -64
  165. package/src/sap/fe/core/messagebundle_nl.properties +31 -64
  166. package/src/sap/fe/core/messagebundle_no.properties +30 -63
  167. package/src/sap/fe/core/messagebundle_pl.properties +31 -64
  168. package/src/sap/fe/core/messagebundle_pt.properties +31 -64
  169. package/src/sap/fe/core/messagebundle_pt_PT.properties +30 -63
  170. package/src/sap/fe/core/messagebundle_ro.properties +30 -63
  171. package/src/sap/fe/core/messagebundle_ru.properties +30 -63
  172. package/src/sap/fe/core/messagebundle_sh.properties +30 -63
  173. package/src/sap/fe/core/messagebundle_sk.properties +30 -63
  174. package/src/sap/fe/core/messagebundle_sl.properties +32 -65
  175. package/src/sap/fe/core/messagebundle_sv.properties +30 -63
  176. package/src/sap/fe/core/messagebundle_th.properties +30 -63
  177. package/src/sap/fe/core/messagebundle_tr.properties +30 -63
  178. package/src/sap/fe/core/messagebundle_uk.properties +31 -64
  179. package/src/sap/fe/core/messagebundle_vi.properties +31 -64
  180. package/src/sap/fe/core/messagebundle_zh_CN.properties +30 -63
  181. package/src/sap/fe/core/messagebundle_zh_TW.properties +31 -64
  182. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +6 -3
  183. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +10 -9
  184. package/src/sap/fe/core/services/NavigationServiceFactory.js +2 -2
  185. package/src/sap/fe/core/services/NavigationServiceFactory.ts +8 -4
  186. package/src/sap/fe/core/services/RoutingServiceFactory.js +9 -6
  187. package/src/sap/fe/core/services/RoutingServiceFactory.ts +10 -9
  188. package/src/sap/fe/core/services/ShellServicesFactory.js +36 -1
  189. package/src/sap/fe/core/services/ShellServicesFactory.ts +38 -1
  190. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +5 -4
  191. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +34 -36
  192. package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
  193. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +1 -1
  194. package/src/sap/fe/core/templating/EntitySetHelper.js +1 -9
  195. package/src/sap/fe/core/templating/EntitySetHelper.ts +11 -13
  196. package/src/sap/fe/core/templating/FilterHelper.js +4 -4
  197. package/src/sap/fe/core/templating/FilterHelper.ts +6 -5
  198. package/src/sap/fe/core/templating/PropertyHelper.js +58 -35
  199. package/src/sap/fe/core/templating/PropertyHelper.ts +19 -4
  200. package/src/sap/fe/core/templating/UIFormatters.js +16 -5
  201. package/src/sap/fe/core/templating/UIFormatters.ts +14 -5
  202. package/src/sap/fe/core/type/DateTimeWithTimezone.js +47 -0
  203. package/src/sap/fe/core/type/DateTimeWithTimezone.ts +23 -0
  204. package/src/sap/fe/core/AnnotationHelper.js +0 -331
  205. package/src/sap/fe/core/AnnotationHelper.ts +0 -321
  206. package/src/sap/fe/core/RouterProxy.js +0 -938
  207. package/src/sap/fe/core/TransactionHelper.js +0 -1577
  208. package/src/sap/fe/core/actions/collaboration/ActivitySync.js +0 -406
  209. package/src/sap/fe/core/actions/collaboration/CollaborationCommon.js +0 -146
  210. package/src/sap/fe/core/actions/draft.js +0 -665
  211. package/src/sap/fe/core/actions/messageHandling.js +0 -579
  212. package/src/sap/fe/core/actions/nonDraft.js +0 -20
  213. package/src/sap/fe/core/actions/nonDraft.ts +0 -12
  214. package/src/sap/fe/core/actions/operations.js +0 -1096
  215. package/src/sap/fe/core/actions/sticky.js +0 -130
  216. package/src/sap/fe/core/formatters/CriticalityFormatter.js +0 -77
  217. package/src/sap/fe/core/formatters/CriticalityFormatter.ts +0 -58
@@ -2,19 +2,23 @@
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(["../../ManifestSettings", "../../helpers/ID", "../Common/Form", "../Common/DataVisualization", "../../helpers/ConfigurableObject", "sap/fe/core/converters/controls/Common/Action", "sap/fe/core/converters/helpers/Key", "sap/fe/core/helpers/BindingExpression", "sap/fe/core/converters/helpers/IssueManager", "sap/fe/core/converters/controls/ObjectPage/HeaderFacet", "../../objectPage/FormMenuActions"], function (ManifestSettings, ID, Form, DataVisualization, ConfigurableObject, Action, Key, BindingExpression, IssueManager, HeaderFacet, FormMenuActions) {
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) {
6
6
  "use strict";
7
7
 
8
8
  var _exports = {};
9
- var getFormActions = FormMenuActions.getFormActions;
10
- var getFormHiddenActions = FormMenuActions.getFormHiddenActions;
9
+ var isReferenceFacet = Form.isReferenceFacet;
10
+ var createFormDefinition = Form.createFormDefinition;
11
+ var getDataVisualizationConfiguration = DataVisualization.getDataVisualizationConfiguration;
11
12
  var getVisibilityEnablementFormMenuActions = FormMenuActions.getVisibilityEnablementFormMenuActions;
12
- var getHeaderFacetsFromManifest = HeaderFacet.getHeaderFacetsFromManifest;
13
- var getStashedSettingsForHeaderFacet = HeaderFacet.getStashedSettingsForHeaderFacet;
14
- var getDesignTimeMetadataSettingsForHeaderFacet = HeaderFacet.getDesignTimeMetadataSettingsForHeaderFacet;
15
- var IssueCategory = IssueManager.IssueCategory;
16
- var IssueSeverity = IssueManager.IssueSeverity;
17
- var IssueType = IssueManager.IssueType;
13
+ var getFormHiddenActions = FormMenuActions.getFormHiddenActions;
14
+ var getFormActions = FormMenuActions.getFormActions;
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;
20
+ var Placement = ConfigurableObject.Placement;
21
+ var insertCustomElements = ConfigurableObject.insertCustomElements;
18
22
  var ref = BindingExpression.ref;
19
23
  var not = BindingExpression.not;
20
24
  var fn = BindingExpression.fn;
@@ -23,22 +27,18 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "../Common/Form", "
23
27
  var bindingExpression = BindingExpression.bindingExpression;
24
28
  var annotationExpression = BindingExpression.annotationExpression;
25
29
  var KeyHelper = Key.KeyHelper;
26
- var getEnabledForAnnotationAction = Action.getEnabledForAnnotationAction;
30
+ var IssueType = IssueManager.IssueType;
31
+ var IssueSeverity = IssueManager.IssueSeverity;
32
+ var IssueCategory = IssueManager.IssueCategory;
33
+ var getStashedSettingsForHeaderFacet = HeaderFacet.getStashedSettingsForHeaderFacet;
34
+ var getHeaderFacetsFromManifest = HeaderFacet.getHeaderFacetsFromManifest;
35
+ var getDesignTimeMetadataSettingsForHeaderFacet = HeaderFacet.getDesignTimeMetadataSettingsForHeaderFacet;
27
36
  var removeDuplicateActions = Action.removeDuplicateActions;
28
- var getSemanticObjectMapping = Action.getSemanticObjectMapping;
29
- var ButtonType = Action.ButtonType;
30
37
  var isActionNavigable = Action.isActionNavigable;
38
+ var getSemanticObjectMapping = Action.getSemanticObjectMapping;
39
+ var getEnabledForAnnotationAction = Action.getEnabledForAnnotationAction;
31
40
  var getActionsFromManifest = Action.getActionsFromManifest;
32
- var Placement = ConfigurableObject.Placement;
33
- var insertCustomElements = ConfigurableObject.insertCustomElements;
34
- var getDataVisualizationConfiguration = DataVisualization.getDataVisualizationConfiguration;
35
- var isReferenceFacet = Form.isReferenceFacet;
36
- var createFormDefinition = Form.createFormDefinition;
37
- var SideContentID = ID.SideContentID;
38
- var SubSectionID = ID.SubSectionID;
39
- var FormID = ID.FormID;
40
- var CustomSubSectionID = ID.CustomSubSectionID;
41
- var ActionType = ManifestSettings.ActionType;
41
+ var ButtonType = Action.ButtonType;
42
42
 
43
43
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
44
44
 
@@ -210,7 +210,9 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "../Common/Form", "
210
210
  function addFormMenuActions(actions, facetDefinition, converterContext) {
211
211
  var hiddenActions = getFormHiddenActions(facetDefinition, converterContext) || [],
212
212
  formActions = getFormActions(facetDefinition, converterContext),
213
- formAllActions = insertCustomElements(actions, getActionsFromManifest(formActions, converterContext, actions, undefined, undefined, hiddenActions));
213
+ formAllActions = insertCustomElements(actions, getActionsFromManifest(formActions, converterContext, actions, undefined, undefined, hiddenActions), {
214
+ command: "overwrite"
215
+ });
214
216
  return formAllActions ? getVisibilityEnablementFormMenuActions(removeDuplicateActions(formAllActions)) : actions;
215
217
  }
216
218
  /**
@@ -682,4 +684,4 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "../Common/Form", "
682
684
 
683
685
  return _exports;
684
686
  }, false);
685
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlN1YlNlY3Rpb24udHMiXSwibmFtZXMiOlsiU3ViU2VjdGlvblR5cGUiLCJ0YXJnZXRUZXJtcyIsImhhc1RhYmxlIiwiZmFjZXRzIiwic29tZSIsImZhY2V0VHlwZSIsImluZGV4T2YiLCJUYXJnZXQiLCIkdGFyZ2V0IiwidGVybSIsImNyZWF0ZVN1YlNlY3Rpb25zIiwiZmFjZXRDb2xsZWN0aW9uIiwiY29udmVydGVyQ29udGV4dCIsImlzSGVhZGVyU2VjdGlvbiIsImZhY2V0c1RvQ3JlYXRlIiwicmVkdWNlIiwiZmFjZXREZWZpbml0aW9uIiwiJFR5cGUiLCJwdXNoIiwiRmFjZXRzIiwiZmluZCIsInNwbGljZSIsImxlbmd0aCIsIm1hcCIsImZhY2V0IiwiY3JlYXRlU3ViU2VjdGlvbiIsImNyZWF0ZUN1c3RvbUhlYWRlckZhY2V0U3ViU2VjdGlvbnMiLCJjdXN0b21IZWFkZXJGYWNldHMiLCJnZXRIZWFkZXJGYWNldHNGcm9tTWFuaWZlc3QiLCJnZXRNYW5pZmVzdFdyYXBwZXIiLCJnZXRIZWFkZXJGYWNldHMiLCJhQ3VzdG9tSGVhZGVyRmFjZXRzIiwiT2JqZWN0Iiwia2V5cyIsImZvckVhY2giLCJrZXkiLCJjdXN0b21IZWFkZXJGYWNldCIsInRlbXBsYXRlRWRpdCIsImNyZWF0ZUN1c3RvbUhlYWRlckZhY2V0U3ViU2VjdGlvbiIsInN1YlNlY3Rpb25JRCIsIkN1c3RvbVN1YlNlY3Rpb25JRCIsInN1YlNlY3Rpb24iLCJpZCIsInRpdGxlIiwidHlwZSIsIlhNTEZyYWdtZW50IiwidGVtcGxhdGUiLCJ2aXNpYmxlIiwibGV2ZWwiLCJzaWRlQ29udGVudCIsInVuZGVmaW5lZCIsInN0YXNoZWQiLCJmbGV4U2V0dGluZ3MiLCJhY3Rpb25zIiwiZ2V0U3ViU2VjdGlvbktleSIsImZhbGxiYWNrIiwiSUQiLCJ0b1N0cmluZyIsIkxhYmVsIiwiYWRkRm9ybU1lbnVBY3Rpb25zIiwiaGlkZGVuQWN0aW9ucyIsImdldEZvcm1IaWRkZW5BY3Rpb25zIiwiZm9ybUFjdGlvbnMiLCJnZXRGb3JtQWN0aW9ucyIsImZvcm1BbGxBY3Rpb25zIiwiaW5zZXJ0Q3VzdG9tRWxlbWVudHMiLCJnZXRBY3Rpb25zRnJvbU1hbmlmZXN0IiwiZ2V0VmlzaWJpbGl0eUVuYWJsZW1lbnRGb3JtTWVudUFjdGlvbnMiLCJyZW1vdmVEdXBsaWNhdGVBY3Rpb25zIiwiZ2V0RmFjZXRBY3Rpb25zIiwiQXJyYXkiLCJmaWx0ZXIiLCJpc1JlZmVyZW5jZUZhY2V0IiwiY3JlYXRlRm9ybUFjdGlvblJlZHVjZXIiLCJnZXRCdXR0b25UeXBlIiwiRW1waGFzaXplZCIsIlBhdGhGb3JCdXR0b25UeXBlIiwicGF0aCIsIkJ1dHRvblR5cGUiLCJUcmFuc3BhcmVudCIsIkdob3N0IiwiaGFzU2luZ2xlQ29udGVudCIsIlN1YlNlY3Rpb25JRCIsIkZhY2V0Iiwib0hpZGRlbkFubm90YXRpb24iLCJhbm5vdGF0aW9ucyIsIlVJIiwiSGlkZGVuIiwiaXNWaXNpYmxlIiwiY29tcGlsZUJpbmRpbmciLCJub3QiLCJlcXVhbCIsImFubm90YXRpb25FeHByZXNzaW9uIiwiaXNEeW5hbWljRXhwcmVzc2lvbiIsImlzVmlzaWJsZUR5bmFtaWNFeHByZXNzaW9uIiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJVbmtub3duIiwiYW5ub3RhdGlvblBhdGgiLCJnZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwiaXNWaXNpYmlsaXR5RHluYW1pYyIsImdldFN0YXNoZWRTZXR0aW5nc0ZvckhlYWRlckZhY2V0IiwiZGVzaWdudGltZSIsImdldERlc2lnblRpbWVNZXRhZGF0YVNldHRpbmdzRm9ySGVhZGVyRmFjZXQiLCJjb250ZW50IiwidGFibGVDb250ZW50IiwiaW5kZXgiLCJ1bnN1cHBvcnRlZFRleHQiLCJpIiwiY29uY2F0IiwibWl4ZWRTdWJTZWN0aW9uIiwiTWl4ZWQiLCJmb3JtQ29sbGVjdGlvblN1YlNlY3Rpb24iLCJGb3JtIiwiZm9ybURlZmluaXRpb24iLCJjcmVhdGVGb3JtRGVmaW5pdGlvbiIsImFjdGlvbiIsImZhY2V0TmFtZSIsInZhbHVlIiwicHJlc2VudGF0aW9uIiwiZ2V0RGF0YVZpc3VhbGl6YXRpb25Db25maWd1cmF0aW9uIiwiZ2V0Q29uZGVuc2VkVGFibGVMYXlvdXRDb21wbGlhbmNlIiwiY29udHJvbFRpdGxlIiwidmlzdWFsaXphdGlvbnMiLCJhbm5vdGF0aW9uIiwic2hvd1RpdGxlIiwiaXNTdWJzZWN0aW9uVGl0bGVTaG93biIsInRpdGxlVmlzaWJsZUV4cHJlc3Npb24iLCJkYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb24iLCJEYXRhVmlzdWFsaXphdGlvbiIsInRpdGxlVmlzaWJsZSIsImZvcm1FbGVtZW50U3ViU2VjdGlvbiIsInVuc3VwcG9ydGVkU3ViU2VjdGlvbiIsInRleHQiLCJzdWJTZWN0aW9uVGl0bGUiLCJyZWZlcmVuY2VUYXJnZXQiLCJ0YXJnZXRWYWx1ZSIsIm1hbmlmZXN0QWN0aW9ucyIsImRhdGFGaWVsZENvbGxlY3Rpb24iLCJzcGxpdCIsIm5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgiLCJzdWJzdHIiLCJEYXRhIiwiZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbiIsInF1YWxpZmllciIsImRhdGFGaWVsZCIsIlVJQW5ub3RhdGlvbiIsIlJlcXVpcmVzQ29udGV4dCIsInZhbHVlT2YiLCJnZXREaWFnbm9zdGljcyIsImFkZElzc3VlIiwiSXNzdWVDYXRlZ29yeSIsIkFubm90YXRpb24iLCJJc3N1ZVNldmVyaXR5IiwiTG93IiwiSXNzdWVUeXBlIiwiTUFMRk9STUVEX0RBVEFGSUVMRF9GT1JfSUJOIiwiUkVRVUlSRVNDT05URVhUIiwiSW5saW5lIiwiSU5MSU5FIiwiRGV0ZXJtaW5pbmciLCJERVRFUk1JTklORyIsIm1OYXZpZ2F0aW9uUGFyYW1ldGVycyIsIk1hcHBpbmciLCJzZW1hbnRpY09iamVjdE1hcHBpbmciLCJnZXRTZW1hbnRpY09iamVjdE1hcHBpbmciLCJBY3Rpb25UeXBlIiwiRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiRm9ybUlEIiwiS2V5SGVscGVyIiwiZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkIiwiZW5hYmxlZCIsIk5hdmlnYXRpb25BdmFpbGFibGUiLCJidXR0b25UeXBlIiwicHJlc3MiLCJmbiIsIlNlbWFudGljT2JqZWN0IiwiQWN0aW9uIiwiY3VzdG9tRGF0YSIsInNlbWFudGljT2JqZWN0IiwiZm9ybU1hbmlmZXN0QWN0aW9uc0NvbmZpZ3VyYXRpb24iLCJEYXRhRmllbGRGb3JBY3Rpb24iLCJnZXRFbmFibGVkRm9yQW5ub3RhdGlvbkFjdGlvbiIsIkFjdGlvblRhcmdldCIsImJpbmRpbmciLCJyZXF1aXJlc0RpYWxvZyIsImlzRGlhbG9nIiwiY29udGV4dHMiLCJiaW5kaW5nRXhwcmVzc2lvbiIsImludm9jYXRpb25Hcm91cGluZyIsIkludm9jYXRpb25Hcm91cGluZyIsImxhYmVsIiwibW9kZWwiLCJpc05hdmlnYWJsZSIsImlzQWN0aW9uTmF2aWdhYmxlIiwicmVmIiwiYWN0aW9uRGVmaW5pdGlvbiIsImJDcml0aWNhbCIsIkNvbW1vbiIsIklzQWN0aW9uQ3JpdGljYWwiLCJwYXJhbWV0ZXJzIiwiY3JlYXRlQ3VzdG9tU3ViU2VjdGlvbnMiLCJtYW5pZmVzdFN1YlNlY3Rpb25zIiwic3ViU2VjdGlvbnMiLCJzdWJTZWN0aW9uS2V5IiwiY3JlYXRlQ3VzdG9tU3ViU2VjdGlvbiIsIm1hbmlmZXN0U3ViU2VjdGlvbiIsIlNpZGVDb250ZW50SUQiLCJlcXVhbFNwbGl0IiwicG9zaXRpb24iLCJwbGFjZW1lbnQiLCJQbGFjZW1lbnQiLCJBZnRlciIsInN1YlNlY3Rpb25EZWZpbml0aW9uIiwibmFtZSIsIlBsYWNlaG9sZGVyIiwiY3VycmVudEZhY2V0IiwiZmFjZXRzVG9DcmVhdGVJblNlY3Rpb24iLCJtYW5pZmVzdFdyYXBwZXIiLCJ1c2VJY29uVGFiQmFyIiwiaGFzTm9PdGhlclZpc2libGVUYWJsZUluVGFyZ2V0cyIsImVudGl0eVR5cGUiLCJnZXRFbnRpdHlUeXBlIiwiZXZlcnkiLCJzdWJGYWNldCIsInJlZkZhY2V0Iiwic3ViQ29sbGVjdGlvbkZhY2V0Iiwic3ViUmVmRmFjZXQiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O01Ba0RZQSxjOzthQUFBQSxjO0FBQUFBLElBQUFBLGM7QUFBQUEsSUFBQUEsYztBQUFBQSxJQUFBQSxjO0FBQUFBLElBQUFBLGM7QUFBQUEsSUFBQUEsYztBQUFBQSxJQUFBQSxjO0tBQUFBLGMsS0FBQUEsYzs7O0FBNEZaLE1BQU1DLFdBQXFCLEdBQUcsb0pBQTlCLEMsQ0FNQTs7QUFDQSxNQUFNQyxRQUFRLEdBQUcsWUFBd0I7QUFBQSxRQUF2QkMsTUFBdUIsdUVBQVAsRUFBTztBQUN4QyxXQUFPQSxNQUFNLENBQUNDLElBQVAsQ0FBWSxVQUFBQyxTQUFTO0FBQUE7O0FBQUEsYUFBSUosV0FBVyxDQUFDSyxPQUFaLENBQW9CRCxTQUFwQixhQUFvQkEsU0FBcEIsNENBQW9CQSxTQUFTLENBQUVFLE1BQS9CLCtFQUFvQixrQkFBbUJDLE9BQXZDLDBEQUFvQixzQkFBNEJDLElBQWhELElBQXdELENBQUMsQ0FBN0Q7QUFBQSxLQUFyQixDQUFQO0FBQ0EsR0FGRDtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNPLFdBQVNDLGlCQUFULENBQ05DLGVBRE0sRUFFTkMsZ0JBRk0sRUFHTkMsZUFITSxFQUltQjtBQUN6QjtBQUNBLFFBQU1DLGNBQWMsR0FBR0gsZUFBZSxDQUFDSSxNQUFoQixDQUF1QixVQUFDRCxjQUFELEVBQStCRSxlQUEvQixFQUFtRDtBQUNoRyxjQUFRQSxlQUFlLENBQUNDLEtBQXhCO0FBQ0M7QUFDQ0gsVUFBQUEsY0FBYyxDQUFDSSxJQUFmLENBQW9CRixlQUFwQjtBQUNBOztBQUNEO0FBQ0M7QUFDQTtBQUNBLGNBQUlBLGVBQWUsQ0FBQ0csTUFBaEIsQ0FB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LDBCQUFBMk4sV0FBVyxDQUFDL0ksV0FBWiwwR0FBeUJDLEVBQXpCLGtGQUE2QkMsTUFBN0IsTUFBd0NyQyxTQUF4Qyw2QkFBb0RrTCxXQUFXLENBQUMvSSxXQUFoRSxxRkFBb0QsdUJBQXlCQyxFQUE3RSwyREFBb0QsdUJBQTZCQyxNQUFqRixHQUEwRixLQUFqRztBQUNBOztBQUNELG1CQUFPLElBQVA7QUFDQSxXQVZNLENBQVA7QUFXQTtBQUNEOztBQUNELGFBQU8sSUFBUDtBQUNBLEtBNUJNLENBQVA7QUE2QkEiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFjdGlvblR5cGUsIE1hbmlmZXN0U3ViU2VjdGlvbiwgTWFuaWZlc3RBY3Rpb24gfSBmcm9tIFwiLi4vLi4vTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHtcblx0QW5ub3RhdGlvblRlcm0sXG5cdENvbGxlY3Rpb25GYWNldFR5cGVzLFxuXHREYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHRGYWNldFR5cGVzLFxuXHRGaWVsZEdyb3VwLFxuXHRJZGVudGlmaWNhdGlvbixcblx0T3BlcmF0aW9uR3JvdXBpbmdUeXBlLFxuXHRSZWZlcmVuY2VGYWNldFR5cGVzLFxuXHRTdGF0dXNJbmZvLFxuXHRVSUFubm90YXRpb25UZXJtcyxcblx0VUlBbm5vdGF0aW9uVHlwZXNcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgeyBDb21tdW5pY2F0aW9uQW5ub3RhdGlvblRlcm1zIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL2Rpc3QvZ2VuZXJhdGVkL0NvbW11bmljYXRpb25cIjtcbmltcG9ydCB7IEN1c3RvbVN1YlNlY3Rpb25JRCwgRm9ybUlELCBTdWJTZWN0aW9uSUQsIFNpZGVDb250ZW50SUQgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9JRFwiO1xuaW1wb3J0IHsgY3JlYXRlRm9ybURlZmluaXRpb24sIEZvcm1EZWZpbml0aW9uLCBpc1JlZmVyZW5jZUZhY2V0IH0gZnJvbSBcIi4uL0NvbW1vbi9Gb3JtXCI7XG5pbXBvcnQgeyBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb24sIGdldERhdGFWaXN1YWxpemF0aW9uQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuLi9Db21tb24vRGF0YVZpc3VhbGl6YXRpb25cIjtcbmltcG9ydCB7IENvbmZpZ3VyYWJsZU9iamVjdCwgQ29uZmlndXJhYmxlUmVjb3JkLCBDdXN0b21FbGVtZW50LCBpbnNlcnRDdXN0b21FbGVtZW50cywgUGxhY2VtZW50IH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQge1xuXHRDb252ZXJ0ZXJBY3Rpb24sXG5cdEN1c3RvbUFjdGlvbixcblx0Z2V0QWN0aW9uc0Zyb21NYW5pZmVzdCxcblx0aXNBY3Rpb25OYXZpZ2FibGUsXG5cdEJ1dHRvblR5cGUsXG5cdGdldFNlbWFudGljT2JqZWN0TWFwcGluZyxcblx0cmVtb3ZlRHVwbGljYXRlQWN0aW9ucyxcblx0QmFzZUFjdGlvbixcblx0Z2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb25cbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0FjdGlvblwiO1xuaW1wb3J0IHsgS2V5SGVscGVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9LZXlcIjtcbmltcG9ydCB7XG5cdGFubm90YXRpb25FeHByZXNzaW9uLFxuXHRiaW5kaW5nRXhwcmVzc2lvbixcblx0QmluZGluZ0V4cHJlc3Npb24sXG5cdGNvbXBpbGVCaW5kaW5nLFxuXHRlcXVhbCxcblx0Zm4sXG5cdG5vdCxcblx0cmVmXG59IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdFeHByZXNzaW9uXCI7XG5pbXBvcnQgeyBJc3N1ZVR5cGUsIElzc3VlU2V2ZXJpdHksIElzc3VlQ2F0ZWdvcnkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0lzc3VlTWFuYWdlclwiO1xuaW1wb3J0IHtcblx0RmxleFNldHRpbmdzLFxuXHRnZXREZXNpZ25UaW1lTWV0YWRhdGFTZXR0aW5nc0ZvckhlYWRlckZhY2V0LFxuXHRnZXRTdGFzaGVkU2V0dGluZ3NGb3JIZWFkZXJGYWNldCxcblx0Q3VzdG9tT2JqZWN0UGFnZUhlYWRlckZhY2V0LFxuXHRnZXRIZWFkZXJGYWNldHNGcm9tTWFuaWZlc3Rcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvT2JqZWN0UGFnZS9IZWFkZXJGYWNldFwiO1xuaW1wb3J0IHsgZ2V0VmlzaWJpbGl0eUVuYWJsZW1lbnRGb3JtTWVudUFjdGlvbnMsIGdldEZvcm1IaWRkZW5BY3Rpb25zLCBnZXRGb3JtQWN0aW9ucyB9IGZyb20gXCIuLi8uLi9vYmplY3RQYWdlL0Zvcm1NZW51QWN0aW9uc1wiO1xuaW1wb3J0IENvbnZlcnRlckNvbnRleHQgZnJvbSBcIi4uLy4uL0NvbnZlcnRlckNvbnRleHRcIjtcblxuZXhwb3J0IGVudW0gU3ViU2VjdGlvblR5cGUge1xuXHRVbmtub3duID0gXCJVbmtub3duXCIsIC8vIERlZmF1bHQgVHlwZVxuXHRGb3JtID0gXCJGb3JtXCIsXG5cdERhdGFWaXN1YWxpemF0aW9uID0gXCJEYXRhVmlzdWFsaXphdGlvblwiLFxuXHRYTUxGcmFnbWVudCA9IFwiWE1MRnJhZ21lbnRcIixcblx0UGxhY2Vob2xkZXIgPSBcIlBsYWNlaG9sZGVyXCIsXG5cdE1peGVkID0gXCJNaXhlZFwiXG59XG5cbmV4cG9ydCB0eXBlIE9iamVjdFBhZ2VTdWJTZWN0aW9uID1cblx0fCBVbnN1cHBvcnRlZFN1YlNlY3Rpb25cblx0fCBGb3JtU3ViU2VjdGlvblxuXHR8IERhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvblxuXHR8IENvbnRhY3RTdWJTZWN0aW9uXG5cdHwgWE1MRnJhZ21lbnRTdWJTZWN0aW9uXG5cdHwgUGxhY2Vob2xkZXJGcmFnbWVudFN1YlNlY3Rpb25cblx0fCBNaXhlZFN1YlNlY3Rpb247XG5cbnR5cGUgQmFzZVN1YlNlY3Rpb24gPSB7XG5cdGlkOiBzdHJpbmc7XG5cdGtleTogc3RyaW5nO1xuXHR0aXRsZTogQmluZGluZ0V4cHJlc3Npb248c3RyaW5nPjtcblx0YW5ub3RhdGlvblBhdGg6IHN0cmluZztcblx0dHlwZTogU3ViU2VjdGlvblR5cGU7XG5cdHZpc2libGU6IEJpbmRpbmdFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRpc1Zpc2liaWxpdHlEeW5hbWljPzogYm9vbGVhbiB8IFwiXCI7XG5cdGZsZXhTZXR0aW5ncz86IEZsZXhTZXR0aW5ncztcblx0c3Rhc2hlZD86IGJvb2xlYW47XG5cdGxldmVsOiBudW1iZXI7XG5cdGNvbnRlbnQ/OiBBcnJheTxPYmplY3RQYWdlU3ViU2VjdGlvbj47XG5cdHNpZGVDb250ZW50PzogU2lkZUNvbnRlbnREZWY7XG59O1xuXG50eXBlIFVuc3VwcG9ydGVkU3ViU2VjdGlvbiA9IEJhc2VTdWJTZWN0aW9uICYge1xuXHR0ZXh0OiBzdHJpbmc7XG59O1xuXG50eXBlIERhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvbiA9IEJhc2VTdWJTZWN0aW9uICYge1xuXHR0eXBlOiBTdWJTZWN0aW9uVHlwZS5EYXRhVmlzdWFsaXphdGlvbjtcblx0cHJlc2VudGF0aW9uOiBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb247XG5cdHNob3dUaXRsZTogYm9vbGVhbjtcblx0dGl0bGVWaXNpYmxlPzogc3RyaW5nIHwgYm9vbGVhbjtcbn07XG5cbnR5cGUgQ29udGFjdFN1YlNlY3Rpb24gPSBVbnN1cHBvcnRlZFN1YlNlY3Rpb247XG5cbnR5cGUgWE1MRnJhZ21lbnRTdWJTZWN0aW9uID0gT21pdDxCYXNlU3ViU2VjdGlvbiwgXCJhbm5vdGF0aW9uUGF0aFwiPiAmIHtcblx0dHlwZTogU3ViU2VjdGlvblR5cGUuWE1MRnJhZ21lbnQ7XG5cdHRlbXBsYXRlOiBzdHJpbmc7XG5cdGFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUFjdGlvbj47XG59O1xuXG50eXBlIEVtcGhhc2l6ZWQgPSB7XG5cdHBhdGg6IHN0cmluZztcbn07XG5cbnR5cGUgUGxhY2Vob2xkZXJGcmFnbWVudFN1YlNlY3Rpb24gPSBPbWl0PEJhc2VTdWJTZWN0aW9uLCBcImFubm90YXRpb25QYXRoXCI+ICYge1xuXHR0eXBlOiBTdWJTZWN0aW9uVHlwZS5QbGFjZWhvbGRlcjtcblx0YWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPjtcbn07XG5cbnR5cGUgTWl4ZWRTdWJTZWN0aW9uID0gQmFzZVN1YlNlY3Rpb24gJiB7XG5cdGNvbnRlbnQ6IEFycmF5PE9iamVjdFBhZ2VTdWJTZWN0aW9uPjtcbn07XG5cbmV4cG9ydCB0eXBlIEZvcm1TdWJTZWN0aW9uID0gQmFzZVN1YlNlY3Rpb24gJiB7XG5cdHR5cGU6IFN1YlNlY3Rpb25UeXBlLkZvcm07XG5cdGZvcm1EZWZpbml0aW9uOiBGb3JtRGVmaW5pdGlvbjtcblx0YWN0aW9uczogQ29udmVydGVyQWN0aW9uW10gfCBCYXNlQWN0aW9uW107XG59O1xuXG5leHBvcnQgdHlwZSBPYmplY3RQYWdlU2VjdGlvbiA9IENvbmZpZ3VyYWJsZU9iamVjdCAmIHtcblx0aWQ6IHN0cmluZztcblx0dGl0bGU6IEJpbmRpbmdFeHByZXNzaW9uPHN0cmluZz47XG5cdHNob3dUaXRsZT86IEJpbmRpbmdFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHR2aXNpYmxlOiBCaW5kaW5nRXhwcmVzc2lvbjxib29sZWFuPjtcblx0c3ViU2VjdGlvbnM6IE9iamVjdFBhZ2VTdWJTZWN0aW9uW107XG59O1xuXG50eXBlIFNpZGVDb250ZW50RGVmID0ge1xuXHR0ZW1wbGF0ZT86IHN0cmluZztcblx0aWQ/OiBzdHJpbmc7XG5cdHNpZGVDb250ZW50RmFsbERvd24/OiBzdHJpbmc7XG5cdGNvbnRhaW5lclF1ZXJ5Pzogc3RyaW5nO1xuXHR2aXNpYmxlPzogYm9vbGVhbjtcblx0ZXF1YWxTcGxpdD86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBDdXN0b21PYmplY3RQYWdlU2VjdGlvbiA9IEN1c3RvbUVsZW1lbnQ8T2JqZWN0UGFnZVNlY3Rpb24+O1xuXG5leHBvcnQgdHlwZSBDdXN0b21PYmplY3RQYWdlU3ViU2VjdGlvbiA9IEN1c3RvbUVsZW1lbnQ8T2JqZWN0UGFnZVN1YlNlY3Rpb24+O1xuXG5jb25zdCB0YXJnZXRUZXJtczogc3RyaW5nW10gPSBbXG5cdFVJQW5ub3RhdGlvblRlcm1zLkxpbmVJdGVtLFxuXHRVSUFubm90YXRpb25UZXJtcy5QcmVzZW50YXRpb25WYXJpYW50LFxuXHRVSUFubm90YXRpb25UZXJtcy5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50XG5dO1xuXG4vLyBUT0RPOiBOZWVkIHRvIGhhbmRsZSBUYWJsZSBjYXNlIGluc2lkZSBjcmVhdGVTdWJTZWN0aW9uIGZ1bmN0aW9uIGlmIENvbGxlY3Rpb25GYWNldCBoYXMgVGFibGUgUmVmZXJlbmNlRmFjZXRcbmNvbnN0IGhhc1RhYmxlID0gKGZhY2V0czogYW55W10gPSBbXSkgPT4ge1xuXHRyZXR1cm4gZmFjZXRzLnNvbWUoZmFjZXRUeXBlID0+IHRhcmdldFRlcm1zLmluZGV4T2YoZmFjZXRUeXBlPy5UYXJnZXQ/LiR0YXJnZXQ/LnRlcm0pID4gLTEpO1xufTtcblxuLyoqXG4gKiBDcmVhdGUgc3Vic2VjdGlvbnMgYmFzZWQgb24gZmFjZXQgZGVmaW5pdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0ZhY2V0VHlwZXNbXX0gZmFjZXRDb2xsZWN0aW9uIENvbGxlY3Rpb24gb2YgZmFjZXRzXG4gKiBAcGFyYW0ge0NvbnZlcnRlckNvbnRleHR9IGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzSGVhZGVyU2VjdGlvbiBUcnVlIGlmIGhlYWRlciBzZWN0aW9uIGlzIGdlbmVyYXRlZCBpbiB0aGlzIGl0ZXJhdGlvblxuICogQHJldHVybnMge09iamVjdFBhZ2VTdWJTZWN0aW9uW119IFRoZSBjdXJyZW50IHN1YnNlY3Rpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTdWJTZWN0aW9ucyhcblx0ZmFjZXRDb2xsZWN0aW9uOiBGYWNldFR5cGVzW10sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGlzSGVhZGVyU2VjdGlvbj86IGJvb2xlYW5cbik6IE9iamVjdFBhZ2VTdWJTZWN0aW9uW10ge1xuXHQvLyBGaXJzdCB3ZSBkZXRlcm1pbmUgd2hpY2ggc3ViIHNlY3Rpb24gd2UgbmVlZCB0byBjcmVhdGVcblx0Y29uc3QgZmFjZXRzVG9DcmVhdGUgPSBmYWNldENvbGxlY3Rpb24ucmVkdWNlKChmYWNldHNUb0NyZWF0ZTogRmFjZXRUeXBlc1tdLCBmYWNldERlZmluaXRpb24pID0+IHtcblx0XHRzd2l0Y2ggKGZhY2V0RGVmaW5pdGlvbi4kVHlwZSkge1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5SZWZlcmVuY2VGYWNldDpcblx0XHRcdFx0ZmFjZXRzVG9DcmVhdGUucHVzaChmYWNldERlZmluaXRpb24pO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuQ29sbGVjdGlvbkZhY2V0OlxuXHRcdFx0XHQvLyBUT0RPIElmIHRoZSBDb2xsZWN0aW9uIEZhY2V0IGhhcyBhIGNoaWxkIG9mIHR5cGUgQ29sbGVjdGlvbiBGYWNldCB3ZSBicmluZyB0aGVtIHVwIG9uZSBsZXZlbCAoRm9ybSArIFRhYmxlIHVzZSBjYXNlKSA/XG5cdFx0XHRcdC8vIGZpcnN0IGNhc2UgZmFjZXQgQ29sbGVjdGlvbiBpcyBjb21iaW5hdGlvbiBvZiBjb2xsZWN0aW9uIGFuZCByZWZlcmVuY2UgZmFjZXQgb3Igbm90IGFsbCBmYWNldHMgYXJlIHJlZmVyZW5jZSBmYWNldHMuXG5cdFx0XHRcdGlmIChmYWNldERlZmluaXRpb24uRmFjZXRzLmZpbmQoZmFjZXRUeXBlID0+IGZhY2V0VHlwZS4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuQ29sbGVjdGlvbkZhY2V0KSkge1xuXHRcdFx0XHRcdGZhY2V0c1RvQ3JlYXRlLnNwbGljZShmYWNldHNUb0NyZWF0ZS5sZW5ndGgsIDAsIC4uLmZhY2V0RGVmaW5pdGlvbi5GYWNldHMpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGZhY2V0c1RvQ3JlYXRlLnB1c2goZmFjZXREZWZpbml0aW9uKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuUmVmZXJlbmNlVVJMRmFjZXQ6XG5cdFx0XHRcdC8vIE5vdCBzdXBwb3J0ZWRcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdHJldHVybiBmYWNldHNUb0NyZWF0ZTtcblx0fSwgW10pO1xuXG5cdC8vIFRoZW4gd2UgY3JlYXRlIHRoZSBhY3R1YWwgc3Vic2VjdGlvbnNcblx0cmV0dXJuIGZhY2V0c1RvQ3JlYXRlLm1hcChmYWNldCA9PlxuXHRcdGNyZWF0ZVN1YlNlY3Rpb24oZmFjZXQsIGZhY2V0c1RvQ3JlYXRlLCBjb252ZXJ0ZXJDb250ZXh0LCAwLCAhKGZhY2V0IGFzIGFueSk/LkZhY2V0cz8ubGVuZ3RoLCBpc0hlYWRlclNlY3Rpb24pXG5cdCk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBzdWJzZWN0aW9ucyBiYXNlZCBvbiB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgY3VzdG9tIGhlYWRlciBmYWNldC5cbiAqXG4gKiBAcGFyYW0ge0NvbnZlcnRlckNvbnRleHR9IGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyB7T2JqZWN0UGFnZVN1YlNlY3Rpb25bXX0gVGhlIGN1cnJlbnQgc3Vic2VjdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUN1c3RvbUhlYWRlckZhY2V0U3ViU2VjdGlvbnMoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IE9iamVjdFBhZ2VTdWJTZWN0aW9uW10ge1xuXHRjb25zdCBjdXN0b21IZWFkZXJGYWNldHM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbU9iamVjdFBhZ2VIZWFkZXJGYWNldD4gPSBnZXRIZWFkZXJGYWNldHNGcm9tTWFuaWZlc3QoXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5nZXRIZWFkZXJGYWNldHMoKVxuXHQpO1xuXHRjb25zdCBhQ3VzdG9tSGVhZGVyRmFjZXRzOiBDdXN0b21PYmplY3RQYWdlSGVhZGVyRmFjZXRbXSA9IFtdO1xuXHRPYmplY3Qua2V5cyhjdXN0b21IZWFkZXJGYWNldHMpLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XG5cdFx0YUN1c3RvbUhlYWRlckZhY2V0cy5wdXNoKGN1c3RvbUhlYWRlckZhY2V0c1trZXldKTtcblx0XHRyZXR1cm4gYUN1c3RvbUhlYWRlckZhY2V0cztcblx0fSk7XG5cdGNvbnN0IGZhY2V0c1RvQ3JlYXRlID0gYUN1c3RvbUhlYWRlckZhY2V0cy5yZWR1Y2UoKGZhY2V0c1RvQ3JlYXRlOiBDdXN0b21PYmplY3RQYWdlSGVhZGVyRmFjZXRbXSwgY3VzdG9tSGVhZGVyRmFjZXQpID0+IHtcblx0XHRpZiAoY3VzdG9tSGVhZGVyRmFjZXQudGVtcGxhdGVFZGl0KSB7XG5cdFx0XHRmYWNldHNUb0NyZWF0ZS5wdXNoKGN1c3RvbUhlYWRlckZhY2V0KTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhY2V0c1RvQ3JlYXRlO1xuXHR9LCBbXSk7XG5cblx0cmV0dXJuIGZhY2V0c1RvQ3JlYXRlLm1hcChjdXN0b21IZWFkZXJGYWNldCA9PiBjcmVhdGVDdXN0b21IZWFkZXJGYWNldFN1YlNlY3Rpb24oY3VzdG9tSGVhZGVyRmFjZXQpKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgc3Vic2VjdGlvbiBiYXNlZCBvbiBhIGN1c3RvbSBoZWFkZXIgZmFjZXQuXG4gKlxuICogQHBhcmFtIGN1c3RvbUhlYWRlckZhY2V0IEEgY3VzdG9tIGhlYWRlciBmYWNldFxuICpcbiAqIEByZXR1cm5zIHtPYmplY3RQYWdlU3ViU2VjdGlvbn0gQSBkZWZpbml0aW9uIGZvciBhIHN1YnNlY3Rpb25cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQ3VzdG9tSGVhZGVyRmFjZXRTdWJTZWN0aW9uKGN1c3RvbUhlYWRlckZhY2V0OiBDdXN0b21PYmplY3RQYWdlSGVhZGVyRmFjZXQpOiBPYmplY3RQYWdlU3ViU2VjdGlvbiB7XG5cdGNvbnN0IHN1YlNlY3Rpb25JRCA9IEN1c3RvbVN1YlNlY3Rpb25JRChjdXN0b21IZWFkZXJGYWNldC5rZXkpO1xuXHRjb25zdCBzdWJTZWN0aW9uOiBYTUxGcmFnbWVudFN1YlNlY3Rpb24gPSB7XG5cdFx0aWQ6IHN1YlNlY3Rpb25JRCxcblx0XHRrZXk6IGN1c3RvbUhlYWRlckZhY2V0LmtleSxcblx0XHR0aXRsZTogY3VzdG9tSGVhZGVyRmFjZXQudGl0bGUsXG5cdFx0dHlwZTogU3ViU2VjdGlvblR5cGUuWE1MRnJhZ21lbnQsXG5cdFx0dGVtcGxhdGU6IGN1c3RvbUhlYWRlckZhY2V0LnRlbXBsYXRlRWRpdCB8fCBcIlwiLFxuXHRcdHZpc2libGU6IGN1c3RvbUhlYWRlckZhY2V0LnZpc2libGUsXG5cdFx0bGV2ZWw6IDEsXG5cdFx0c2lkZUNvbnRlbnQ6IHVuZGVmaW5lZCxcblx0XHRzdGFzaGVkOiBjdXN0b21IZWFkZXJGYWNldC5zdGFzaGVkLFxuXHRcdGZsZXhTZXR0aW5nczogY3VzdG9tSGVhZGVyRmFjZXQuZmxleFNldHRpbmdzLFxuXHRcdGFjdGlvbnM6IHt9XG5cdH07XG5cdHJldHVybiBzdWJTZWN0aW9uO1xufVxuXG4vLyBmdW5jdGlvbiBpc1RhcmdldEZvckNvbXBsaWFudChhbm5vdGF0aW9uUGF0aDogQW5ub3RhdGlvblBhdGgpIHtcbi8vIFx0cmV0dXJuIC8uKmNvbVxcLnNhcFxcLnZvY2FidWxhcmllc1xcLlVJXFwudjFcXC4oRmllbGRHcm91cHxJZGVudGlmaWNhdGlvbnxEYXRhUG9pbnR8U3RhdHVzSW5mbykuKi8udGVzdChhbm5vdGF0aW9uUGF0aC52YWx1ZSk7XG4vLyB9XG5jb25zdCBnZXRTdWJTZWN0aW9uS2V5ID0gKGZhY2V0RGVmaW5pdGlvbjogRmFjZXRUeXBlcywgZmFsbGJhY2s6IHN0cmluZyk6IHN0cmluZyA9PiB7XG5cdHJldHVybiBmYWNldERlZmluaXRpb24uSUQ/LnRvU3RyaW5nKCkgfHwgZmFjZXREZWZpbml0aW9uLkxhYmVsPy50b1N0cmluZygpIHx8IGZhbGxiYWNrO1xufTtcbi8qKlxuICogQWRkcyBGb3JtIG1lbnUgYWN0aW9uIHRvIGFsbCBmb3JtIGFjdGlvbnMsIHJlbW92ZXMgZHVwbGljYXRlIGFjdGlvbnMgYW5kIGhpZGRlbiBhY3Rpb25zLlxuICogQHBhcmFtIGFjdGlvbnMgVGhlIGFjdGlvbnMgaW52b2x2ZWRcbiAqIEBwYXJhbSBmYWNldERlZmluaXRpb24gVGhlIGRlZmluaXRpb24gZm9yIHRoZSBmYWNldFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyB7QmFzZUFjdGlvbltdIHwgQ29udmVydGVyQWN0aW9uW119XG4gKi9cbmZ1bmN0aW9uIGFkZEZvcm1NZW51QWN0aW9ucyhcblx0YWN0aW9uczogQ29udmVydGVyQWN0aW9uW10sXG5cdGZhY2V0RGVmaW5pdGlvbjogRmFjZXRUeXBlcyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogQmFzZUFjdGlvbltdIHwgQ29udmVydGVyQWN0aW9uW10ge1xuXHRjb25zdCBoaWRkZW5BY3Rpb25zOiBCYXNlQWN0aW9uW10gPSBnZXRGb3JtSGlkZGVuQWN0aW9ucyhmYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpIHx8IFtdLFxuXHRcdGZvcm1BY3Rpb25zOiBDb25maWd1cmFibGVSZWNvcmQ8TWFuaWZlc3RBY3Rpb24+ID0gZ2V0Rm9ybUFjdGlvbnMoZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRmb3JtQWxsQWN0aW9ucyA9IGluc2VydEN1c3RvbUVsZW1lbnRzKFxuXHRcdFx0YWN0aW9ucyxcblx0XHRcdGdldEFjdGlvbnNGcm9tTWFuaWZlc3QoZm9ybUFjdGlvbnMsIGNvbnZlcnRlckNvbnRleHQsIGFjdGlvbnMsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBoaWRkZW5BY3Rpb25zKVxuXHRcdCk7XG5cdHJldHVybiBmb3JtQWxsQWN0aW9ucyA/IGdldFZpc2liaWxpdHlFbmFibGVtZW50Rm9ybU1lbnVBY3Rpb25zKHJlbW92ZUR1cGxpY2F0ZUFjdGlvbnMoZm9ybUFsbEFjdGlvbnMpKSA6IGFjdGlvbnM7XG59XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBhY3Rpb24gZm9ybSBhIGZhY2V0LlxuICogQHBhcmFtIGZhY2V0RGVmaW5pdGlvblxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIHtDb252ZXJ0ZXJBY3Rpb25bXSB8IEJhc2VBY3Rpb25bXX0gVGhlIGN1cnJlbnQgZmFjZXQgYWN0aW9uc1xuICovXG5mdW5jdGlvbiBnZXRGYWNldEFjdGlvbnMoZmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzLCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogQmFzZUFjdGlvbltdIHwgQ29udmVydGVyQWN0aW9uW10ge1xuXHRsZXQgYWN0aW9ucyA9IG5ldyBBcnJheTxDb252ZXJ0ZXJBY3Rpb24+KCk7XG5cdHN3aXRjaCAoZmFjZXREZWZpbml0aW9uLiRUeXBlKSB7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5Db2xsZWN0aW9uRmFjZXQ6XG5cdFx0XHRhY3Rpb25zID0gKGZhY2V0RGVmaW5pdGlvbi5GYWNldHMuZmlsdGVyKGZhY2V0RGVmaW5pdGlvbiA9PiBpc1JlZmVyZW5jZUZhY2V0KGZhY2V0RGVmaW5pdGlvbikpIGFzIFJlZmVyZW5jZUZhY2V0VHlwZXNbXSkucmVkdWNlKFxuXHRcdFx0XHQoYWN0aW9uczogQ29udmVydGVyQWN0aW9uW10sIGZhY2V0RGVmaW5pdGlvbikgPT4gY3JlYXRlRm9ybUFjdGlvblJlZHVjZXIoYWN0aW9ucywgZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdFx0W11cblx0XHRcdCk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLlJlZmVyZW5jZUZhY2V0OlxuXHRcdFx0YWN0aW9ucyA9IGNyZWF0ZUZvcm1BY3Rpb25SZWR1Y2VyKFtdLCBmYWNldERlZmluaXRpb24gYXMgUmVmZXJlbmNlRmFjZXRUeXBlcywgY29udmVydGVyQ29udGV4dCk7XG5cdFx0XHRicmVhaztcblx0fVxuXHRyZXR1cm4gYWRkRm9ybU1lbnVBY3Rpb25zKGFjdGlvbnMsIGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dCk7XG59XG4vKipcbiAqIFJldHJ1bnMgdGhlIGJ1dHRvbiB0eXBlIGJhc2VkIG9uIEBVSS5FbXBoYXNpemVkIGFubm90YXRpb24uXG4gKiBAcGFyYW0gRW1waGFzaXplZCBFbXBoYXNpemVkIGFubm90YXRpb24gdmFsdWUuXG4gKiBAcmV0dXJucyB7QnV0dG9uVHlwZSB8IHN0cmluZ30gVGhlIGJ1dHRvbiB0eXBlIG9yIHBhdGggYmFzZWQgZXhwcmVzc2lvbi5cbiAqL1xuZnVuY3Rpb24gZ2V0QnV0dG9uVHlwZShFbXBoYXNpemVkOiBFbXBoYXNpemVkKTogQnV0dG9uVHlwZSB8IHN0cmluZyB7XG5cdGNvbnN0IFBhdGhGb3JCdXR0b25UeXBlOiBzdHJpbmcgPSBFbXBoYXNpemVkPy5wYXRoO1xuXHRpZiAoUGF0aEZvckJ1dHRvblR5cGUpIHtcblx0XHRyZXR1cm4gXCJ7PSBcIiArIFwiISR7XCIgKyBQYXRoRm9yQnV0dG9uVHlwZSArIFwifSA/ICdcIiArIEJ1dHRvblR5cGUuVHJhbnNwYXJlbnQgKyBcIicgOiAke1wiICsgUGF0aEZvckJ1dHRvblR5cGUgKyBcIn1cIiArIFwifVwiO1xuXHR9IGVsc2UgaWYgKEVtcGhhc2l6ZWQpIHtcblx0XHRyZXR1cm4gQnV0dG9uVHlwZS5HaG9zdDtcblx0fVxuXHRyZXR1cm4gQnV0dG9uVHlwZS5UcmFuc3BhcmVudDtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBzdWJzZWN0aW9uIGJhc2VkIG9uIEZhY2V0VHlwZXMuXG4gKiBAcGFyYW0gZmFjZXREZWZpbml0aW9uXG4gKiBAcGFyYW0gZmFjZXRzVG9DcmVhdGVcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gbGV2ZWxcbiAqIEBwYXJhbSBoYXNTaW5nbGVDb250ZW50XG4gKiBAcGFyYW0gaXNIZWFkZXJTZWN0aW9uXG4gKiBAcmV0dXJucyB7T2JqZWN0UGFnZVN1YlNlY3Rpb259IEEgc3Vic2VjdGlvbiBkZWZpbml0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTdWJTZWN0aW9uKFxuXHRmYWNldERlZmluaXRpb246IEZhY2V0VHlwZXMsXG5cdGZhY2V0c1RvQ3JlYXRlOiBGYWNldFR5cGVzW10sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGxldmVsOiBudW1iZXIsXG5cdGhhc1NpbmdsZUNvbnRlbnQ6IGJvb2xlYW4sXG5cdGlzSGVhZGVyU2VjdGlvbj86IGJvb2xlYW5cbik6IE9iamVjdFBhZ2VTdWJTZWN0aW9uIHtcblx0Y29uc3Qgc3ViU2VjdGlvbklEID0gU3ViU2VjdGlvbklEKHsgRmFjZXQ6IGZhY2V0RGVmaW5pdGlvbiB9KTtcblx0Y29uc3Qgb0hpZGRlbkFubm90YXRpb246IGFueSA9IGZhY2V0RGVmaW5pdGlvbi5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbjtcblx0Y29uc3QgaXNWaXNpYmxlID0gY29tcGlsZUJpbmRpbmcobm90KGVxdWFsKHRydWUsIGFubm90YXRpb25FeHByZXNzaW9uKG9IaWRkZW5Bbm5vdGF0aW9uKSkpKTtcblx0Y29uc3QgaXNEeW5hbWljRXhwcmVzc2lvbiA9XG5cdFx0aXNWaXNpYmxlICYmIHR5cGVvZiBpc1Zpc2libGUgPT09IFwic3RyaW5nXCIgJiYgaXNWaXNpYmxlLmluZGV4T2YoXCJ7PVwiKSA9PT0gMCAmJiBvSGlkZGVuQW5ub3RhdGlvbj8udHlwZSAhPT0gXCJQYXRoXCI7XG5cdGNvbnN0IGlzVmlzaWJsZUR5bmFtaWNFeHByZXNzaW9uID1cblx0XHRpc1Zpc2libGUgJiYgaXNEeW5hbWljRXhwcmVzc2lvbiA/IGlzVmlzaWJsZS5zdWJzdHJpbmcoaXNWaXNpYmxlLmluZGV4T2YoXCJ7PVwiKSArIDIsIGlzVmlzaWJsZS5sYXN0SW5kZXhPZihcIn1cIikpIDogZmFsc2U7XG5cdGNvbnN0IHRpdGxlID0gY29tcGlsZUJpbmRpbmcoYW5ub3RhdGlvbkV4cHJlc3Npb24oZmFjZXREZWZpbml0aW9uLkxhYmVsKSk7XG5cdGNvbnN0IHN1YlNlY3Rpb246IEJhc2VTdWJTZWN0aW9uID0ge1xuXHRcdGlkOiBzdWJTZWN0aW9uSUQsXG5cdFx0a2V5OiBnZXRTdWJTZWN0aW9uS2V5KGZhY2V0RGVmaW5pdGlvbiwgc3ViU2VjdGlvbklEKSxcblx0XHR0aXRsZTogdGl0bGUsXG5cdFx0dHlwZTogU3ViU2VjdGlvblR5cGUuVW5rbm93bixcblx0XHRhbm5vdGF0aW9uUGF0aDogY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKGZhY2V0RGVmaW5pdGlvbi5mdWxseVF1YWxpZmllZE5hbWUpLFxuXHRcdHZpc2libGU6IGlzVmlzaWJsZSxcblx0XHRpc1Zpc2liaWxpdHlEeW5hbWljOiBpc0R5bmFtaWNFeHByZXNzaW9uLFxuXHRcdGxldmVsOiBsZXZlbCxcblx0XHRzaWRlQ29udGVudDogdW5kZWZpbmVkXG5cdH07XG5cdGlmIChpc0hlYWRlclNlY3Rpb24pIHtcblx0XHRzdWJTZWN0aW9uLnN0YXNoZWQgPSBnZXRTdGFzaGVkU2V0dGluZ3NGb3JIZWFkZXJGYWNldChmYWNldERlZmluaXRpb24sIGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0c3ViU2VjdGlvbi5mbGV4U2V0dGluZ3MgPSB7XG5cdFx0XHRkZXNpZ250aW1lOiBnZXREZXNpZ25UaW1lTWV0YWRhdGFTZXR0aW5nc0ZvckhlYWRlckZhY2V0KGZhY2V0RGVmaW5pdGlvbiwgZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KVxuXHRcdH07XG5cdH1cblx0bGV0IGNvbnRlbnQ6IEFycmF5PE9iamVjdFBhZ2VTdWJTZWN0aW9uPiA9IFtdO1xuXHRjb25zdCB0YWJsZUNvbnRlbnQ6IEFycmF5PE9iamVjdFBhZ2VTdWJTZWN0aW9uPiA9IFtdO1xuXHRjb25zdCBpbmRleDogQXJyYXk8bnVtYmVyPiA9IFtdO1xuXHRsZXQgdW5zdXBwb3J0ZWRUZXh0ID0gXCJcIjtcblx0bGV2ZWwrKztcblx0c3dpdGNoIChmYWNldERlZmluaXRpb24uJFR5cGUpIHtcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkNvbGxlY3Rpb25GYWNldDpcblx0XHRcdGNvbnN0IGZhY2V0cyA9IGZhY2V0RGVmaW5pdGlvbi5GYWNldHM7XG5cdFx0XHRpZiAoaGFzVGFibGUoZmFjZXRzKSkge1xuXHRcdFx0XHQvLyBpZiB3ZSBoYXZlIHRhYmxlcyBpbiBhIGNvbGxlY3Rpb24gZmFjZXQgdGhlbiB3ZSBjcmVhdGUgc2VwYXJhdGUgc3Vic2VjdGlvbiBmb3IgdGhlbVxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGZhY2V0cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdGlmICh0YXJnZXRUZXJtcy5pbmRleE9mKChmYWNldHNbaV0gYXMgYW55KS5UYXJnZXQ/LiR0YXJnZXQ/LnRlcm0pID4gLTEpIHtcblx0XHRcdFx0XHRcdC8vY3JlYXRpbmcgc2VwYXJhdGUgYXJyYXkgZm9yIHRhYmxlc1xuXHRcdFx0XHRcdFx0dGFibGVDb250ZW50LnB1c2goY3JlYXRlU3ViU2VjdGlvbihmYWNldHNbaV0sIFtdLCBjb252ZXJ0ZXJDb250ZXh0LCBsZXZlbCwgZmFjZXRzLmxlbmd0aCA9PT0gMSwgaXNIZWFkZXJTZWN0aW9uKSk7XG5cdFx0XHRcdFx0XHRpbmRleC5wdXNoKGkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRmb3IgKGxldCBpID0gaW5kZXgubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0XHRcdFx0XHQvL3JlbW92ZSB0YWJsZSBmYWNldHMgZnJvbSBmYWNldCBkZWZpbml0aW9uXG5cdFx0XHRcdFx0ZmFjZXRzLnNwbGljZShpbmRleFtpXSwgMSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGZhY2V0cy5sZW5ndGgpIHtcblx0XHRcdFx0XHRmYWNldERlZmluaXRpb24uRmFjZXRzID0gZmFjZXRzO1xuXHRcdFx0XHRcdC8vY3JlYXRlIGEgZm9ybSBzdWJzZWN0aW9uIGZyb20gdGhlIHJlbWFpbmluZyBmYWNldHNcblx0XHRcdFx0XHRjb250ZW50LnB1c2goY3JlYXRlU3ViU2VjdGlvbihmYWNldERlZmluaXRpb24sIFtdLCBjb252ZXJ0ZXJDb250ZXh0LCBsZXZlbCwgaGFzU2luZ2xlQ29udGVudCwgaXNIZWFkZXJTZWN0aW9uKSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29udGVudCA9IGNvbnRlbnQuY29uY2F0KHRhYmxlQ29udGVudCk7XG5cdFx0XHRcdGNvbnN0IG1peGVkU3ViU2VjdGlvbjogTWl4ZWRTdWJTZWN0aW9uID0ge1xuXHRcdFx0XHRcdC4uLnN1YlNlY3Rpb24sXG5cdFx0XHRcdFx0dHlwZTogU3ViU2VjdGlvblR5cGUuTWl4ZWQsXG5cdFx0XHRcdFx0bGV2ZWw6IGxldmVsLFxuXHRcdFx0XHRcdGNvbnRlbnQ6IGNvbnRlbnRcblx0XHRcdFx0fTtcblx0XHRcdFx0cmV0dXJuIG1peGVkU3ViU2VjdGlvbjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IGFjdGlvbnMgPSBnZXRGYWNldEFjdGlvbnMoZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdFx0XHRmb3JtQ29sbGVjdGlvblN1YlNlY3Rpb246IEZvcm1TdWJTZWN0aW9uID0ge1xuXHRcdFx0XHRcdFx0Li4uc3ViU2VjdGlvbixcblx0XHRcdFx0XHRcdHR5cGU6IFN1YlNlY3Rpb25UeXBlLkZvcm0sXG5cdFx0XHRcdFx0XHRmb3JtRGVmaW5pdGlvbjogY3JlYXRlRm9ybURlZmluaXRpb24oZmFjZXREZWZpbml0aW9uLCBpc1Zpc2libGUsIGNvbnZlcnRlckNvbnRleHQsIGFjdGlvbnMpLFxuXHRcdFx0XHRcdFx0bGV2ZWw6IGxldmVsLFxuXHRcdFx0XHRcdFx0YWN0aW9uczogYWN0aW9ucy5maWx0ZXIoYWN0aW9uID0+IGFjdGlvbi5mYWNldE5hbWUgPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRyZXR1cm4gZm9ybUNvbGxlY3Rpb25TdWJTZWN0aW9uO1xuXHRcdFx0fVxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuUmVmZXJlbmNlRmFjZXQ6XG5cdFx0XHRpZiAoIWZhY2V0RGVmaW5pdGlvbi5UYXJnZXQuJHRhcmdldCkge1xuXHRcdFx0XHR1bnN1cHBvcnRlZFRleHQgPSBgVW5hYmxlIHRvIGZpbmQgYW5ub3RhdGlvblBhdGggJHtmYWNldERlZmluaXRpb24uVGFyZ2V0LnZhbHVlfWA7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzd2l0Y2ggKGZhY2V0RGVmaW5pdGlvbi5UYXJnZXQuJHRhcmdldC50ZXJtKSB7XG5cdFx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5MaW5lSXRlbTpcblx0XHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLkNoYXJ0OlxuXHRcdFx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVGVybXMuUHJlc2VudGF0aW9uVmFyaWFudDpcblx0XHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQ6XG5cdFx0XHRcdFx0XHRjb25zdCBwcmVzZW50YXRpb24gPSBnZXREYXRhVmlzdWFsaXphdGlvbkNvbmZpZ3VyYXRpb24oXG5cdFx0XHRcdFx0XHRcdGZhY2V0RGVmaW5pdGlvbi5UYXJnZXQudmFsdWUsXG5cdFx0XHRcdFx0XHRcdGdldENvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW5jZShmYWNldERlZmluaXRpb24sIGZhY2V0c1RvQ3JlYXRlLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0XHRpc0hlYWRlclNlY3Rpb25cblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRjb25zdCBjb250cm9sVGl0bGUgPVxuXHRcdFx0XHRcdFx0XHQocHJlc2VudGF0aW9uLnZpc3VhbGl6YXRpb25zWzBdIGFzIGFueSk/LmFubm90YXRpb24/LnRpdGxlIHx8IChwcmVzZW50YXRpb24udmlzdWFsaXphdGlvbnNbMF0gYXMgYW55KT8udGl0bGU7XG5cdFx0XHRcdFx0XHRjb25zdCBzaG93VGl0bGUgPSBpc1N1YnNlY3Rpb25UaXRsZVNob3duKGhhc1NpbmdsZUNvbnRlbnQsIHN1YlNlY3Rpb24udGl0bGUsIGNvbnRyb2xUaXRsZSk7XG5cdFx0XHRcdFx0XHRjb25zdCB0aXRsZVZpc2libGVFeHByZXNzaW9uID0gaXNWaXNpYmxlICYmIHRpdGxlICE9PSBcInVuZGVmaW5lZFwiICYmICh0aXRsZSA/IGlzVmlzaWJsZSA6IGZhbHNlKTtcblx0XHRcdFx0XHRcdGNvbnN0IGRhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvbjogRGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uID0ge1xuXHRcdFx0XHRcdFx0XHQuLi5zdWJTZWN0aW9uLFxuXHRcdFx0XHRcdFx0XHR0eXBlOiBTdWJTZWN0aW9uVHlwZS5EYXRhVmlzdWFsaXphdGlvbixcblx0XHRcdFx0XHRcdFx0bGV2ZWw6IGxldmVsLFxuXHRcdFx0XHRcdFx0XHRwcmVzZW50YXRpb246IHByZXNlbnRhdGlvbixcblx0XHRcdFx0XHRcdFx0c2hvd1RpdGxlOiBzaG93VGl0bGUsXG5cdFx0XHRcdFx0XHRcdHRpdGxlVmlzaWJsZTogaXNEeW5hbWljRXhwcmVzc2lvblxuXHRcdFx0XHRcdFx0XHRcdD8gYHs9ICgke2lzVmlzaWJsZUR5bmFtaWNFeHByZXNzaW9ufSkgJiYgKCcke3RpdGxlfScgIT09J3VuZGVmaW5lZCcpICYmICgke3Nob3dUaXRsZX0gPyB0cnVlIDogZmFsc2UpIH1gXG5cdFx0XHRcdFx0XHRcdFx0OiB0aXRsZVZpc2libGVFeHByZXNzaW9uXG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0cmV0dXJuIGRhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvbjtcblxuXHRcdFx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVGVybXMuRmllbGRHcm91cDpcblx0XHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLklkZW50aWZpY2F0aW9uOlxuXHRcdFx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVGVybXMuRGF0YVBvaW50OlxuXHRcdFx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVGVybXMuU3RhdHVzSW5mbzpcblx0XHRcdFx0XHRjYXNlIENvbW11bmljYXRpb25Bbm5vdGF0aW9uVGVybXMuQ29udGFjdDpcblx0XHRcdFx0XHRcdC8vIEFsbCB0aG9zZSBlbGVtZW50IGJlbG9uZyB0byBhIGZvcm0gZmFjZXRcblx0XHRcdFx0XHRcdGNvbnN0IGFjdGlvbnMgPSBnZXRGYWNldEFjdGlvbnMoZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdFx0XHRcdFx0Zm9ybUVsZW1lbnRTdWJTZWN0aW9uOiBGb3JtU3ViU2VjdGlvbiA9IHtcblx0XHRcdFx0XHRcdFx0XHQuLi5zdWJTZWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRcdHR5cGU6IFN1YlNlY3Rpb25UeXBlLkZvcm0sXG5cdFx0XHRcdFx0XHRcdFx0bGV2ZWw6IGxldmVsLFxuXHRcdFx0XHRcdFx0XHRcdGZvcm1EZWZpbml0aW9uOiBjcmVhdGVGb3JtRGVmaW5pdGlvbihmYWNldERlZmluaXRpb24sIGlzVmlzaWJsZSwgY29udmVydGVyQ29udGV4dCwgYWN0aW9ucyksXG5cdFx0XHRcdFx0XHRcdFx0YWN0aW9uczogYWN0aW9ucy5maWx0ZXIoYWN0aW9uID0+IGFjdGlvbi5mYWNldE5hbWUgPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdHJldHVybiBmb3JtRWxlbWVudFN1YlNlY3Rpb247XG5cblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0dW5zdXBwb3J0ZWRUZXh0ID0gYEZvciAke2ZhY2V0RGVmaW5pdGlvbi5UYXJnZXQuJHRhcmdldC50ZXJtfSBGcmFnbWVudGA7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5SZWZlcmVuY2VVUkxGYWNldDpcblx0XHRcdHVuc3VwcG9ydGVkVGV4dCA9IFwiRm9yIFJlZmVyZW5jZSBVUkwgRmFjZXRcIjtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRicmVhaztcblx0fVxuXHQvLyBJZiB3ZSByZWFjaCBoZXJlIHdlIGVuZGVkIHVwIHdpdGggYW4gdW5zdXBwb3J0ZWQgU3ViU2VjdGlvbiB0eXBlXG5cdGNvbnN0IHVuc3VwcG9ydGVkU3ViU2VjdGlvbjogVW5zdXBwb3J0ZWRTdWJTZWN0aW9uID0ge1xuXHRcdC4uLnN1YlNlY3Rpb24sXG5cdFx0dGV4dDogdW5zdXBwb3J0ZWRUZXh0XG5cdH07XG5cdHJldHVybiB1bnN1cHBvcnRlZFN1YlNlY3Rpb247XG59XG5mdW5jdGlvbiBpc1N1YnNlY3Rpb25UaXRsZVNob3duKGhhc1NpbmdsZUNvbnRlbnQ6IGJvb2xlYW4sIHN1YlNlY3Rpb25UaXRsZTogQmluZGluZ0V4cHJlc3Npb248c3RyaW5nPiwgY29udHJvbFRpdGxlOiBzdHJpbmcpOiBib29sZWFuIHtcblx0aWYgKGhhc1NpbmdsZUNvbnRlbnQgJiYgY29udHJvbFRpdGxlID09PSBzdWJTZWN0aW9uVGl0bGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0cmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiBjcmVhdGVGb3JtQWN0aW9uUmVkdWNlcihcblx0YWN0aW9uczogQ29udmVydGVyQWN0aW9uW10sXG5cdGZhY2V0RGVmaW5pdGlvbjogUmVmZXJlbmNlRmFjZXRUeXBlcyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogQ29udmVydGVyQWN0aW9uW10ge1xuXHRjb25zdCByZWZlcmVuY2VUYXJnZXQ6IEFubm90YXRpb25UZXJtPGFueT4gPSBmYWNldERlZmluaXRpb24uVGFyZ2V0LiR0YXJnZXQ7XG5cdGNvbnN0IHRhcmdldFZhbHVlID0gZmFjZXREZWZpbml0aW9uLlRhcmdldC52YWx1ZTtcblx0bGV0IG1hbmlmZXN0QWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPiA9IHt9O1xuXHRsZXQgZGF0YUZpZWxkQ29sbGVjdGlvbjogRGF0YUZpZWxkQWJzdHJhY3RUeXBlc1tdID0gW107XG5cdGxldCBbbmF2aWdhdGlvblByb3BlcnR5UGF0aF06IGFueSA9IHRhcmdldFZhbHVlLnNwbGl0KFwiQFwiKTtcblx0aWYgKG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgubGVuZ3RoID4gMCkge1xuXHRcdGlmIChuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxhc3RJbmRleE9mKFwiL1wiKSA9PT0gbmF2aWdhdGlvblByb3BlcnR5UGF0aC5sZW5ndGggLSAxKSB7XG5cdFx0XHRuYXZpZ2F0aW9uUHJvcGVydHlQYXRoID0gbmF2aWdhdGlvblByb3BlcnR5UGF0aC5zdWJzdHIoMCwgbmF2aWdhdGlvblByb3BlcnR5UGF0aC5sZW5ndGggLSAxKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0bmF2aWdhdGlvblByb3BlcnR5UGF0aCA9IHVuZGVmaW5lZDtcblx0fVxuXG5cdGlmIChyZWZlcmVuY2VUYXJnZXQpIHtcblx0XHRzd2l0Y2ggKHJlZmVyZW5jZVRhcmdldC50ZXJtKSB7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLkZpZWxkR3JvdXA6XG5cdFx0XHRcdGRhdGFGaWVsZENvbGxlY3Rpb24gPSAocmVmZXJlbmNlVGFyZ2V0IGFzIEZpZWxkR3JvdXApLkRhdGE7XG5cdFx0XHRcdG1hbmlmZXN0QWN0aW9ucyA9IGdldEFjdGlvbnNGcm9tTWFuaWZlc3QoXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHJlZmVyZW5jZVRhcmdldCkuYWN0aW9ucyxcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRmYWNldERlZmluaXRpb24uZnVsbHlRdWFsaWZpZWROYW1lIGFzIHN0cmluZ1xuXHRcdFx0XHQpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVGVybXMuSWRlbnRpZmljYXRpb246XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLlN0YXR1c0luZm86XG5cdFx0XHRcdGlmIChyZWZlcmVuY2VUYXJnZXQucXVhbGlmaWVyKSB7XG5cdFx0XHRcdFx0ZGF0YUZpZWxkQ29sbGVjdGlvbiA9IHJlZmVyZW5jZVRhcmdldCBhcyBJZGVudGlmaWNhdGlvbiB8IFN0YXR1c0luZm87XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cblx0YWN0aW9ucyA9IGRhdGFGaWVsZENvbGxlY3Rpb24ucmVkdWNlKChhY3Rpb25zLCBkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpID0+IHtcblx0XHRjb25zdCBVSUFubm90YXRpb246IGFueSA9IGRhdGFGaWVsZD8uYW5ub3RhdGlvbnM/LlVJO1xuXHRcdHN3aXRjaCAoZGF0YUZpZWxkLiRUeXBlKSB7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbjpcblx0XHRcdFx0aWYgKGRhdGFGaWVsZC5SZXF1aXJlc0NvbnRleHQ/LnZhbHVlT2YoKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0XHRcdC5nZXREaWFnbm9zdGljcygpXG5cdFx0XHRcdFx0XHQuYWRkSXNzdWUoSXNzdWVDYXRlZ29yeS5Bbm5vdGF0aW9uLCBJc3N1ZVNldmVyaXR5LkxvdywgSXNzdWVUeXBlLk1BTEZPUk1FRF9EQVRBRklFTERfRk9SX0lCTi5SRVFVSVJFU0NPTlRFWFQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChkYXRhRmllbGQuSW5saW5lPy52YWx1ZU9mKCkgPT09IHRydWUpIHtcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0XHQuZ2V0RGlhZ25vc3RpY3MoKVxuXHRcdFx0XHRcdFx0LmFkZElzc3VlKElzc3VlQ2F0ZWdvcnkuQW5ub3RhdGlvbiwgSXNzdWVTZXZlcml0eS5Mb3csIElzc3VlVHlwZS5NQUxGT1JNRURfREFUQUZJRUxEX0ZPUl9JQk4uSU5MSU5FKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZGF0YUZpZWxkLkRldGVybWluaW5nPy52YWx1ZU9mKCkgPT09IHRydWUpIHtcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0XHQuZ2V0RGlhZ25vc3RpY3MoKVxuXHRcdFx0XHRcdFx0LmFkZElzc3VlKElzc3VlQ2F0ZWdvcnkuQW5ub3RhdGlvbiwgSXNzdWVTZXZlcml0eS5Mb3csIElzc3VlVHlwZS5NQUxGT1JNRURfREFUQUZJRUxEX0ZPUl9JQk4uREVURVJNSU5JTkcpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IG1OYXZpZ2F0aW9uUGFyYW1ldGVyczogYW55ID0ge307XG5cdFx0XHRcdGlmIChkYXRhRmllbGQuTWFwcGluZykge1xuXHRcdFx0XHRcdG1OYXZpZ2F0aW9uUGFyYW1ldGVycy5zZW1hbnRpY09iamVjdE1hcHBpbmcgPSBnZXRTZW1hbnRpY09iamVjdE1hcHBpbmcoZGF0YUZpZWxkLk1hcHBpbmcpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGFjdGlvbnMucHVzaCh7XG5cdFx0XHRcdFx0dHlwZTogQWN0aW9uVHlwZS5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24sXG5cdFx0XHRcdFx0aWQ6IEZvcm1JRCh7IEZhY2V0OiBmYWNldERlZmluaXRpb24gfSwgZGF0YUZpZWxkKSxcblx0XHRcdFx0XHRrZXk6IEtleUhlbHBlci5nZW5lcmF0ZUtleUZyb21EYXRhRmllbGQoZGF0YUZpZWxkKSxcblx0XHRcdFx0XHR0ZXh0OiBkYXRhRmllbGQuTGFiZWw/LnRvU3RyaW5nKCksXG5cdFx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IFwiXCIsXG5cdFx0XHRcdFx0ZW5hYmxlZDpcblx0XHRcdFx0XHRcdGRhdGFGaWVsZC5OYXZpZ2F0aW9uQXZhaWxhYmxlICE9PSB1bmRlZmluZWRcblx0XHRcdFx0XHRcdFx0PyBjb21waWxlQmluZGluZyhlcXVhbChhbm5vdGF0aW9uRXhwcmVzc2lvbihkYXRhRmllbGQuTmF2aWdhdGlvbkF2YWlsYWJsZT8udmFsdWVPZigpKSwgdHJ1ZSkpXG5cdFx0XHRcdFx0XHRcdDogdHJ1ZSxcblx0XHRcdFx0XHR2aXNpYmxlOiBjb21waWxlQmluZGluZyhub3QoZXF1YWwoYW5ub3RhdGlvbkV4cHJlc3Npb24oZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkpLCB0cnVlKSkpLFxuXHRcdFx0XHRcdGJ1dHRvblR5cGU6IGdldEJ1dHRvblR5cGUoVUlBbm5vdGF0aW9uPy5FbXBoYXNpemVkKSxcblx0XHRcdFx0XHRwcmVzczogY29tcGlsZUJpbmRpbmcoXG5cdFx0XHRcdFx0XHRmbihcIi5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm5hdmlnYXRlXCIsIFtcblx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvbkV4cHJlc3Npb24oZGF0YUZpZWxkLlNlbWFudGljT2JqZWN0KSxcblx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvbkV4cHJlc3Npb24oZGF0YUZpZWxkLkFjdGlvbiksXG5cdFx0XHRcdFx0XHRcdG1OYXZpZ2F0aW9uUGFyYW1ldGVyc1xuXHRcdFx0XHRcdFx0XSlcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdGN1c3RvbURhdGE6IGNvbXBpbGVCaW5kaW5nKHtcblx0XHRcdFx0XHRcdHNlbWFudGljT2JqZWN0OiBhbm5vdGF0aW9uRXhwcmVzc2lvbihkYXRhRmllbGQuU2VtYW50aWNPYmplY3QpLFxuXHRcdFx0XHRcdFx0YWN0aW9uOiBhbm5vdGF0aW9uRXhwcmVzc2lvbihkYXRhRmllbGQuQWN0aW9uKVxuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uOlxuXHRcdFx0XHRjb25zdCBmb3JtTWFuaWZlc3RBY3Rpb25zQ29uZmlndXJhdGlvbjogYW55ID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHJlZmVyZW5jZVRhcmdldCkuYWN0aW9ucztcblx0XHRcdFx0Y29uc3Qga2V5OiBzdHJpbmcgPSBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCk7XG5cdFx0XHRcdGFjdGlvbnMucHVzaCh7XG5cdFx0XHRcdFx0dHlwZTogQWN0aW9uVHlwZS5EYXRhRmllbGRGb3JBY3Rpb24sXG5cdFx0XHRcdFx0aWQ6IEZvcm1JRCh7IEZhY2V0OiBmYWNldERlZmluaXRpb24gfSwgZGF0YUZpZWxkKSxcblx0XHRcdFx0XHRrZXk6IGtleSxcblx0XHRcdFx0XHR0ZXh0OiBkYXRhRmllbGQuTGFiZWw/LnRvU3RyaW5nKCksXG5cdFx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IFwiXCIsXG5cdFx0XHRcdFx0ZW5hYmxlZDogZ2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb24oY29udmVydGVyQ29udGV4dCwgZGF0YUZpZWxkLkFjdGlvblRhcmdldCksXG5cdFx0XHRcdFx0YmluZGluZzogbmF2aWdhdGlvblByb3BlcnR5UGF0aCA/IFwieyAncGF0aCcgOiAnXCIgKyBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoICsgXCInfVwiIDogdW5kZWZpbmVkLFxuXHRcdFx0XHRcdHZpc2libGU6IGNvbXBpbGVCaW5kaW5nKG5vdChlcXVhbChhbm5vdGF0aW9uRXhwcmVzc2lvbihkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSksIHRydWUpKSksXG5cdFx0XHRcdFx0cmVxdWlyZXNEaWFsb2c6IGlzRGlhbG9nKGRhdGFGaWVsZC5BY3Rpb25UYXJnZXQpLFxuXHRcdFx0XHRcdGJ1dHRvblR5cGU6IGdldEJ1dHRvblR5cGUoVUlBbm5vdGF0aW9uPy5FbXBoYXNpemVkKSxcblx0XHRcdFx0XHRwcmVzczogY29tcGlsZUJpbmRpbmcoXG5cdFx0XHRcdFx0XHRmbihcblx0XHRcdFx0XHRcdFx0XCJpbnZva2VBY3Rpb25cIixcblx0XHRcdFx0XHRcdFx0W1xuXHRcdFx0XHRcdFx0XHRcdGRhdGFGaWVsZC5BY3Rpb24sXG5cdFx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29udGV4dHM6IGZuKFwiZ2V0QmluZGluZ0NvbnRleHRcIiwgW10sIGJpbmRpbmdFeHByZXNzaW9uKFwiXCIsIFwiJHNvdXJjZVwiKSksXG5cdFx0XHRcdFx0XHRcdFx0XHRpbnZvY2F0aW9uR3JvdXBpbmc6IChkYXRhRmllbGQuSW52b2NhdGlvbkdyb3VwaW5nID09PSBcIlVJLk9wZXJhdGlvbkdyb3VwaW5nVHlwZS9DaGFuZ2VTZXRcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ/IFwiQ2hhbmdlU2V0XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0OiBcIklzb2xhdGVkXCIpIGFzIE9wZXJhdGlvbkdyb3VwaW5nVHlwZSxcblx0XHRcdFx0XHRcdFx0XHRcdGxhYmVsOiBhbm5vdGF0aW9uRXhwcmVzc2lvbihkYXRhRmllbGQuTGFiZWwpLFxuXHRcdFx0XHRcdFx0XHRcdFx0bW9kZWw6IGZuKFwiZ2V0TW9kZWxcIiwgW10sIGJpbmRpbmdFeHByZXNzaW9uKFwiL1wiLCBcIiRzb3VyY2VcIikpLFxuXHRcdFx0XHRcdFx0XHRcdFx0aXNOYXZpZ2FibGU6IGlzQWN0aW9uTmF2aWdhYmxlKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmb3JtTWFuaWZlc3RBY3Rpb25zQ29uZmlndXJhdGlvbiAmJiBmb3JtTWFuaWZlc3RBY3Rpb25zQ29uZmlndXJhdGlvbltrZXldXG5cdFx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRdLFxuXHRcdFx0XHRcdFx0XHRyZWYoXCIuZWRpdEZsb3dcIilcblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdGZhY2V0TmFtZTogZGF0YUZpZWxkLklubGluZSA/IChmYWNldERlZmluaXRpb24uZnVsbHlRdWFsaWZpZWROYW1lIGFzIHN0cmluZykgOiB1bmRlZmluZWRcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHRyZXR1cm4gYWN0aW9ucztcblx0fSwgYWN0aW9ucyk7XG5cdHJldHVybiBpbnNlcnRDdXN0b21FbGVtZW50cyhhY3Rpb25zLCBtYW5pZmVzdEFjdGlvbnMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEaWFsb2coYWN0aW9uRGVmaW5pdGlvbjogYW55IHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcblx0aWYgKGFjdGlvbkRlZmluaXRpb24pIHtcblx0XHRjb25zdCBiQ3JpdGljYWwgPSBhY3Rpb25EZWZpbml0aW9uLmFubm90YXRpb25zPy5Db21tb24/LklzQWN0aW9uQ3JpdGljYWw7XG5cdFx0aWYgKGFjdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycy5sZW5ndGggPiAxIHx8IGJDcml0aWNhbCkge1xuXHRcdFx0cmV0dXJuIFwiRGlhbG9nXCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBcIk5vbmVcIjtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIFwiTm9uZVwiO1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDdXN0b21TdWJTZWN0aW9ucyhcblx0bWFuaWZlc3RTdWJTZWN0aW9uczogUmVjb3JkPHN0cmluZywgTWFuaWZlc3RTdWJTZWN0aW9uPixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogUmVjb3JkPHN0cmluZywgQ3VzdG9tT2JqZWN0UGFnZVN1YlNlY3Rpb24+IHtcblx0Y29uc3Qgc3ViU2VjdGlvbnM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbU9iamVjdFBhZ2VTdWJTZWN0aW9uPiA9IHt9O1xuXHRPYmplY3Qua2V5cyhtYW5pZmVzdFN1YlNlY3Rpb25zKS5mb3JFYWNoKFxuXHRcdHN1YlNlY3Rpb25LZXkgPT5cblx0XHRcdChzdWJTZWN0aW9uc1tzdWJTZWN0aW9uS2V5XSA9IGNyZWF0ZUN1c3RvbVN1YlNlY3Rpb24obWFuaWZlc3RTdWJTZWN0aW9uc1tzdWJTZWN0aW9uS2V5XSwgc3ViU2VjdGlvbktleSwgY29udmVydGVyQ29udGV4dCkpXG5cdCk7XG5cdHJldHVybiBzdWJTZWN0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUN1c3RvbVN1YlNlY3Rpb24oXG5cdG1hbmlmZXN0U3ViU2VjdGlvbjogTWFuaWZlc3RTdWJTZWN0aW9uLFxuXHRzdWJTZWN0aW9uS2V5OiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IEN1c3RvbU9iamVjdFBhZ2VTdWJTZWN0aW9uIHtcblx0Y29uc3Qgc2lkZUNvbnRlbnQ6IFNpZGVDb250ZW50RGVmIHwgdW5kZWZpbmVkID0gbWFuaWZlc3RTdWJTZWN0aW9uLnNpZGVDb250ZW50XG5cdFx0PyB7XG5cdFx0XHRcdHRlbXBsYXRlOiBtYW5pZmVzdFN1YlNlY3Rpb24uc2lkZUNvbnRlbnQudGVtcGxhdGUsXG5cdFx0XHRcdGlkOiBTaWRlQ29udGVudElEKHN1YlNlY3Rpb25LZXkpLFxuXHRcdFx0XHR2aXNpYmxlOiBmYWxzZSxcblx0XHRcdFx0ZXF1YWxTcGxpdDogbWFuaWZlc3RTdWJTZWN0aW9uLnNpZGVDb250ZW50LmVxdWFsU3BsaXRcblx0XHQgIH1cblx0XHQ6IHVuZGVmaW5lZDtcblx0bGV0IHBvc2l0aW9uID0gbWFuaWZlc3RTdWJTZWN0aW9uLnBvc2l0aW9uO1xuXHRpZiAoIXBvc2l0aW9uKSB7XG5cdFx0cG9zaXRpb24gPSB7XG5cdFx0XHRwbGFjZW1lbnQ6IFBsYWNlbWVudC5BZnRlclxuXHRcdH07XG5cdH1cblx0Y29uc3QgaXNWaXNpYmxlID0gbWFuaWZlc3RTdWJTZWN0aW9uLnZpc2libGUgIT09IHVuZGVmaW5lZCA/IG1hbmlmZXN0U3ViU2VjdGlvbi52aXNpYmxlIDogdHJ1ZTtcblx0Y29uc3QgaXNEeW5hbWljRXhwcmVzc2lvbiA9IGlzVmlzaWJsZSAmJiB0eXBlb2YgaXNWaXNpYmxlID09PSBcInN0cmluZ1wiICYmIGlzVmlzaWJsZS5pbmRleE9mKFwiez1cIikgPT09IDA7XG5cdGNvbnN0IHN1YlNlY3Rpb25EZWZpbml0aW9uID0ge1xuXHRcdHR5cGU6IFN1YlNlY3Rpb25UeXBlLlVua25vd24sXG5cdFx0aWQ6IG1hbmlmZXN0U3ViU2VjdGlvbi5pZCB8fCBDdXN0b21TdWJTZWN0aW9uSUQoc3ViU2VjdGlvbktleSksXG5cdFx0YWN0aW9uczogZ2V0QWN0aW9uc0Zyb21NYW5pZmVzdChtYW5pZmVzdFN1YlNlY3Rpb24uYWN0aW9ucywgY29udmVydGVyQ29udGV4dCksXG5cdFx0a2V5OiBzdWJTZWN0aW9uS2V5LFxuXHRcdHRpdGxlOiBtYW5pZmVzdFN1YlNlY3Rpb24udGl0bGUsXG5cdFx0bGV2ZWw6IDEsXG5cdFx0cG9zaXRpb246IHBvc2l0aW9uLFxuXHRcdHZpc2libGU6IG1hbmlmZXN0U3ViU2VjdGlvbi52aXNpYmxlICE9PSB1bmRlZmluZWQgPyBtYW5pZmVzdFN1YlNlY3Rpb24udmlzaWJsZSA6IHRydWUsXG5cdFx0c2lkZUNvbnRlbnQ6IHNpZGVDb250ZW50LFxuXHRcdGlzVmlzaWJpbGl0eUR5bmFtaWM6IGlzRHluYW1pY0V4cHJlc3Npb25cblx0fTtcblx0aWYgKG1hbmlmZXN0U3ViU2VjdGlvbi50ZW1wbGF0ZSB8fCBtYW5pZmVzdFN1YlNlY3Rpb24ubmFtZSkge1xuXHRcdHN1YlNlY3Rpb25EZWZpbml0aW9uLnR5cGUgPSBTdWJTZWN0aW9uVHlwZS5YTUxGcmFnbWVudDtcblx0XHQoKHN1YlNlY3Rpb25EZWZpbml0aW9uIGFzIHVua25vd24pIGFzIFhNTEZyYWdtZW50U3ViU2VjdGlvbikudGVtcGxhdGUgPVxuXHRcdFx0bWFuaWZlc3RTdWJTZWN0aW9uLnRlbXBsYXRlIHx8IG1hbmlmZXN0U3ViU2VjdGlvbi5uYW1lIHx8IFwiXCI7XG5cdH0gZWxzZSB7XG5cdFx0c3ViU2VjdGlvbkRlZmluaXRpb24udHlwZSA9IFN1YlNlY3Rpb25UeXBlLlBsYWNlaG9sZGVyO1xuXHR9XG5cdHJldHVybiBzdWJTZWN0aW9uRGVmaW5pdGlvbiBhcyBDdXN0b21PYmplY3RQYWdlU3ViU2VjdGlvbjtcbn1cblxuLyoqXG4gKiBFdmFsdWF0ZSBpZiB0aGUgY29uZGVuc2VkIG1vZGUgY2FuIGJlIGFwcGxpM2VkIG9uIHRoZSB0YWJsZS5cbiAqXG4gKiBAcGFyYW0gY3VycmVudEZhY2V0XG4gKiBAcGFyYW0gZmFjZXRzVG9DcmVhdGVJblNlY3Rpb25cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBmb3IgY29tcGxpYW50LCBmYWxzZSBvdGhlcndpc2VcbiAqL1xuZnVuY3Rpb24gZ2V0Q29uZGVuc2VkVGFibGVMYXlvdXRDb21wbGlhbmNlKFxuXHRjdXJyZW50RmFjZXQ6IEZhY2V0VHlwZXMsXG5cdGZhY2V0c1RvQ3JlYXRlSW5TZWN0aW9uOiBGYWNldFR5cGVzW10sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IGJvb2xlYW4ge1xuXHRjb25zdCBtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRpZiAobWFuaWZlc3RXcmFwcGVyLnVzZUljb25UYWJCYXIoKSkge1xuXHRcdC8vIElmIHRoZSBPUCB1c2UgdGhlIHRhYiBiYXNlZCB3ZSBjaGVjayBpZiB0aGUgZmFjZXRzIHRoYXQgd2lsbCBiZSBjcmVhdGVkIGZvciB0aGlzIHNlY3Rpb24gYXJlIGFsbCBub24gdmlzaWJsZVxuXHRcdHJldHVybiBoYXNOb090aGVyVmlzaWJsZVRhYmxlSW5UYXJnZXRzKGN1cnJlbnRGYWNldCwgZmFjZXRzVG9DcmVhdGVJblNlY3Rpb24pO1xuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IGVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblx0XHRpZiAoZW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uVUk/LkZhY2V0cz8ubGVuZ3RoICYmIGVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LlVJPy5GYWNldHM/Lmxlbmd0aCA+IDEpIHtcblx0XHRcdHJldHVybiBoYXNOb090aGVyVmlzaWJsZVRhYmxlSW5UYXJnZXRzKGN1cnJlbnRGYWNldCwgZmFjZXRzVG9DcmVhdGVJblNlY3Rpb24pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gaGFzTm9PdGhlclZpc2libGVUYWJsZUluVGFyZ2V0cyhjdXJyZW50RmFjZXQ6IEZhY2V0VHlwZXMsIGZhY2V0c1RvQ3JlYXRlSW5TZWN0aW9uOiBGYWNldFR5cGVzW10pOiBib29sZWFuIHtcblx0cmV0dXJuIGZhY2V0c1RvQ3JlYXRlSW5TZWN0aW9uLmV2ZXJ5KGZ1bmN0aW9uKHN1YkZhY2V0KSB7XG5cdFx0aWYgKHN1YkZhY2V0ICE9PSBjdXJyZW50RmFjZXQpIHtcblx0XHRcdGlmIChzdWJGYWNldC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuUmVmZXJlbmNlRmFjZXQpIHtcblx0XHRcdFx0Y29uc3QgcmVmRmFjZXQgPSBzdWJGYWNldCBhcyBSZWZlcmVuY2VGYWNldFR5cGVzO1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0cmVmRmFjZXQuVGFyZ2V0Py4kdGFyZ2V0Py50ZXJtID09PSBVSUFubm90YXRpb25UZXJtcy5MaW5lSXRlbSB8fFxuXHRcdFx0XHRcdHJlZkZhY2V0LlRhcmdldD8uJHRhcmdldD8udGVybSA9PT0gVUlBbm5vdGF0aW9uVGVybXMuUHJlc2VudGF0aW9uVmFyaWFudCB8fFxuXHRcdFx0XHRcdHJlZkZhY2V0LlRhcmdldC4kdGFyZ2V0Py50ZXJtID09PSBVSUFubm90YXRpb25UZXJtcy5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50XG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHJldHVybiByZWZGYWNldC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiAhPT0gdW5kZWZpbmVkID8gcmVmRmFjZXQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4gOiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IHN1YkNvbGxlY3Rpb25GYWNldCA9IHN1YkZhY2V0IGFzIENvbGxlY3Rpb25GYWNldFR5cGVzO1xuXHRcdFx0XHRyZXR1cm4gc3ViQ29sbGVjdGlvbkZhY2V0LkZhY2V0cy5ldmVyeShmdW5jdGlvbihmYWNldCkge1xuXHRcdFx0XHRcdGNvbnN0IHN1YlJlZkZhY2V0ID0gZmFjZXQgYXMgUmVmZXJlbmNlRmFjZXRUeXBlcztcblx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRzdWJSZWZGYWNldC5UYXJnZXQ/LiR0YXJnZXQ/LnRlcm0gPT09IFVJQW5ub3RhdGlvblRlcm1zLkxpbmVJdGVtIHx8XG5cdFx0XHRcdFx0XHRzdWJSZWZGYWNldC5UYXJnZXQ/LiR0YXJnZXQ/LnRlcm0gPT09IFVJQW5ub3RhdGlvblRlcm1zLlByZXNlbnRhdGlvblZhcmlhbnQgfHxcblx0XHRcdFx0XHRcdHN1YlJlZkZhY2V0LlRhcmdldD8uJHRhcmdldD8udGVybSA9PT0gVUlBbm5vdGF0aW9uVGVybXMuU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHN1YlJlZkZhY2V0LmFubm90YXRpb25zPy5VST8uSGlkZGVuICE9PSB1bmRlZmluZWQgPyBzdWJSZWZGYWNldC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiA6IGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9KTtcbn1cbiJdfQ==
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=
@@ -1,4 +1,3 @@
1
- import { ActionType, ManifestSubSection, ManifestAction } from "../../ManifestSettings";
2
1
  import {
3
2
  AnnotationTerm,
4
3
  CollectionFacetTypes,
@@ -13,21 +12,25 @@ import {
13
12
  UIAnnotationTypes
14
13
  } from "@sap-ux/vocabularies-types";
15
14
  import { CommunicationAnnotationTerms } from "@sap-ux/vocabularies-types/dist/generated/Communication";
16
- import { CustomSubSectionID, FormID, SubSectionID, SideContentID } from "../../helpers/ID";
17
- import { createFormDefinition, FormDefinition, isReferenceFacet } from "../Common/Form";
18
- import { DataVisualizationDefinition, getDataVisualizationConfiguration } from "../Common/DataVisualization";
19
- import { ConfigurableObject, ConfigurableRecord, CustomElement, insertCustomElements, Placement } from "../../helpers/ConfigurableObject";
20
15
  import {
16
+ BaseAction,
17
+ ButtonType,
21
18
  ConverterAction,
22
19
  CustomAction,
23
20
  getActionsFromManifest,
24
- isActionNavigable,
25
- ButtonType,
21
+ getEnabledForAnnotationAction,
26
22
  getSemanticObjectMapping,
27
- removeDuplicateActions,
28
- BaseAction,
29
- getEnabledForAnnotationAction
23
+ isActionNavigable,
24
+ removeDuplicateActions
30
25
  } from "sap/fe/core/converters/controls/Common/Action";
26
+ import {
27
+ CustomObjectPageHeaderFacet,
28
+ FlexSettings,
29
+ getDesignTimeMetadataSettingsForHeaderFacet,
30
+ getHeaderFacetsFromManifest,
31
+ getStashedSettingsForHeaderFacet
32
+ } from "sap/fe/core/converters/controls/ObjectPage/HeaderFacet";
33
+ import { IssueCategory, IssueSeverity, IssueType } from "sap/fe/core/converters/helpers/IssueManager";
31
34
  import { KeyHelper } from "sap/fe/core/converters/helpers/Key";
32
35
  import {
33
36
  annotationExpression,
@@ -39,16 +42,13 @@ import {
39
42
  not,
40
43
  ref
41
44
  } from "sap/fe/core/helpers/BindingExpression";
42
- import { IssueType, IssueSeverity, IssueCategory } from "sap/fe/core/converters/helpers/IssueManager";
43
- import {
44
- FlexSettings,
45
- getDesignTimeMetadataSettingsForHeaderFacet,
46
- getStashedSettingsForHeaderFacet,
47
- CustomObjectPageHeaderFacet,
48
- getHeaderFacetsFromManifest
49
- } from "sap/fe/core/converters/controls/ObjectPage/HeaderFacet";
50
- import { getVisibilityEnablementFormMenuActions, getFormHiddenActions, getFormActions } from "../../objectPage/FormMenuActions";
51
45
  import ConverterContext from "../../ConverterContext";
46
+ import { ConfigurableObject, ConfigurableRecord, CustomElement, insertCustomElements, Placement } from "../../helpers/ConfigurableObject";
47
+ import { CustomSubSectionID, FormID, SideContentID, SubSectionID } from "../../helpers/ID";
48
+ import { ActionType, ManifestAction, ManifestSubSection } from "../../ManifestSettings";
49
+ import { getFormActions, getFormHiddenActions, getVisibilityEnablementFormMenuActions } from "../../objectPage/FormMenuActions";
50
+ import { DataVisualizationDefinition, getDataVisualizationConfiguration } from "../Common/DataVisualization";
51
+ import { createFormDefinition, FormDefinition, isReferenceFacet } from "../Common/Form";
52
52
 
53
53
  export enum SubSectionType {
54
54
  Unknown = "Unknown", // Default Type
@@ -150,7 +150,7 @@ const targetTerms: string[] = [
150
150
 
151
151
  // TODO: Need to handle Table case inside createSubSection function if CollectionFacet has Table ReferenceFacet
152
152
  const hasTable = (facets: any[] = []) => {
153
- return facets.some(facetType => targetTerms.indexOf(facetType?.Target?.$target?.term) > -1);
153
+ return facets.some((facetType) => targetTerms.indexOf(facetType?.Target?.$target?.term) > -1);
154
154
  };
155
155
 
156
156
  /**
@@ -175,7 +175,7 @@ export function createSubSections(
175
175
  case UIAnnotationTypes.CollectionFacet:
176
176
  // TODO If the Collection Facet has a child of type Collection Facet we bring them up one level (Form + Table use case) ?
177
177
  // first case facet Collection is combination of collection and reference facet or not all facets are reference facets.
178
- if (facetDefinition.Facets.find(facetType => facetType.$Type === UIAnnotationTypes.CollectionFacet)) {
178
+ if (facetDefinition.Facets.find((facetType) => facetType.$Type === UIAnnotationTypes.CollectionFacet)) {
179
179
  facetsToCreate.splice(facetsToCreate.length, 0, ...facetDefinition.Facets);
180
180
  } else {
181
181
  facetsToCreate.push(facetDefinition);
@@ -189,7 +189,7 @@ export function createSubSections(
189
189
  }, []);
190
190
 
191
191
  // Then we create the actual subsections
192
- return facetsToCreate.map(facet =>
192
+ return facetsToCreate.map((facet) =>
193
193
  createSubSection(facet, facetsToCreate, converterContext, 0, !(facet as any)?.Facets?.length, isHeaderSection)
194
194
  );
195
195
  }
@@ -205,7 +205,7 @@ export function createCustomHeaderFacetSubSections(converterContext: ConverterCo
205
205
  converterContext.getManifestWrapper().getHeaderFacets()
206
206
  );
207
207
  const aCustomHeaderFacets: CustomObjectPageHeaderFacet[] = [];
208
- Object.keys(customHeaderFacets).forEach(function(key) {
208
+ Object.keys(customHeaderFacets).forEach(function (key) {
209
209
  aCustomHeaderFacets.push(customHeaderFacets[key]);
210
210
  return aCustomHeaderFacets;
211
211
  });
@@ -216,7 +216,7 @@ export function createCustomHeaderFacetSubSections(converterContext: ConverterCo
216
216
  return facetsToCreate;
217
217
  }, []);
218
218
 
219
- return facetsToCreate.map(customHeaderFacet => createCustomHeaderFacetSubSection(customHeaderFacet));
219
+ return facetsToCreate.map((customHeaderFacet) => createCustomHeaderFacetSubSection(customHeaderFacet));
220
220
  }
221
221
 
222
222
  /**
@@ -266,7 +266,8 @@ function addFormMenuActions(
266
266
  formActions: ConfigurableRecord<ManifestAction> = getFormActions(facetDefinition, converterContext),
267
267
  formAllActions = insertCustomElements(
268
268
  actions,
269
- getActionsFromManifest(formActions, converterContext, actions, undefined, undefined, hiddenActions)
269
+ getActionsFromManifest(formActions, converterContext, actions, undefined, undefined, hiddenActions),
270
+ { command: "overwrite" }
270
271
  );
271
272
  return formAllActions ? getVisibilityEnablementFormMenuActions(removeDuplicateActions(formAllActions)) : actions;
272
273
  }
@@ -281,7 +282,9 @@ function getFacetActions(facetDefinition: FacetTypes, converterContext: Converte
281
282
  let actions = new Array<ConverterAction>();
282
283
  switch (facetDefinition.$Type) {
283
284
  case UIAnnotationTypes.CollectionFacet:
284
- actions = (facetDefinition.Facets.filter(facetDefinition => isReferenceFacet(facetDefinition)) as ReferenceFacetTypes[]).reduce(
285
+ actions = (
286
+ facetDefinition.Facets.filter((facetDefinition) => isReferenceFacet(facetDefinition)) as ReferenceFacetTypes[]
287
+ ).reduce(
285
288
  (actions: ConverterAction[], facetDefinition) => createFormActionReducer(actions, facetDefinition, converterContext),
286
289
  []
287
290
  );
@@ -391,7 +394,7 @@ export function createSubSection(
391
394
  type: SubSectionType.Form,
392
395
  formDefinition: createFormDefinition(facetDefinition, isVisible, converterContext, actions),
393
396
  level: level,
394
- actions: actions.filter(action => action.facetName === undefined)
397
+ actions: actions.filter((action) => action.facetName === undefined)
395
398
  };
396
399
  return formCollectionSubSection;
397
400
  }
@@ -439,7 +442,7 @@ export function createSubSection(
439
442
  type: SubSectionType.Form,
440
443
  level: level,
441
444
  formDefinition: createFormDefinition(facetDefinition, isVisible, converterContext, actions),
442
- actions: actions.filter(action => action.facetName === undefined)
445
+ actions: actions.filter((action) => action.facetName === undefined)
443
446
  };
444
447
  return formElementSubSection;
445
448
 
@@ -619,7 +622,7 @@ export function createCustomSubSections(
619
622
  ): Record<string, CustomObjectPageSubSection> {
620
623
  const subSections: Record<string, CustomObjectPageSubSection> = {};
621
624
  Object.keys(manifestSubSections).forEach(
622
- subSectionKey =>
625
+ (subSectionKey) =>
623
626
  (subSections[subSectionKey] = createCustomSubSection(manifestSubSections[subSectionKey], subSectionKey, converterContext))
624
627
  );
625
628
  return subSections;
@@ -660,8 +663,7 @@ export function createCustomSubSection(
660
663
  };
661
664
  if (manifestSubSection.template || manifestSubSection.name) {
662
665
  subSectionDefinition.type = SubSectionType.XMLFragment;
663
- ((subSectionDefinition as unknown) as XMLFragmentSubSection).template =
664
- manifestSubSection.template || manifestSubSection.name || "";
666
+ (subSectionDefinition as unknown as XMLFragmentSubSection).template = manifestSubSection.template || manifestSubSection.name || "";
665
667
  } else {
666
668
  subSectionDefinition.type = SubSectionType.Placeholder;
667
669
  }
@@ -697,7 +699,7 @@ function getCondensedTableLayoutCompliance(
697
699
  }
698
700
 
699
701
  function hasNoOtherVisibleTableInTargets(currentFacet: FacetTypes, facetsToCreateInSection: FacetTypes[]): boolean {
700
- return facetsToCreateInSection.every(function(subFacet) {
702
+ return facetsToCreateInSection.every(function (subFacet) {
701
703
  if (subFacet !== currentFacet) {
702
704
  if (subFacet.$Type === UIAnnotationTypes.ReferenceFacet) {
703
705
  const refFacet = subFacet as ReferenceFacetTypes;
@@ -711,7 +713,7 @@ function hasNoOtherVisibleTableInTargets(currentFacet: FacetTypes, facetsToCreat
711
713
  return true;
712
714
  } else {
713
715
  const subCollectionFacet = subFacet as CollectionFacetTypes;
714
- return subCollectionFacet.Facets.every(function(facet) {
716
+ return subCollectionFacet.Facets.every(function (facet) {
715
717
  const subRefFacet = facet as ReferenceFacetTypes;
716
718
  if (
717
719
  subRefFacet.Target?.$target?.term === UIAnnotationTerms.LineItem ||