@sapui5/sap.fe.core 1.141.2 → 1.142.1

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 (207) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/core/.library +4 -1
  3. package/src/sap/fe/core/ActionRuntime.js +48 -23
  4. package/src/sap/fe/core/ActionRuntime.ts +61 -35
  5. package/src/sap/fe/core/AppComponent.js +76 -6
  6. package/src/sap/fe/core/AppComponent.ts +94 -8
  7. package/src/sap/fe/core/AppStateHandler.js +9 -8
  8. package/src/sap/fe/core/AppStateHandler.ts +13 -9
  9. package/src/sap/fe/core/BaseController.js +8 -5
  10. package/src/sap/fe/core/BaseController.ts +6 -1
  11. package/src/sap/fe/core/CommonUtils.js +4 -123
  12. package/src/sap/fe/core/CommonUtils.ts +3 -172
  13. package/src/sap/fe/core/ExtensionAPI.js +3 -10
  14. package/src/sap/fe/core/ExtensionAPI.ts +2 -14
  15. package/src/sap/fe/core/PageController.js +64 -43
  16. package/src/sap/fe/core/PageController.ts +62 -47
  17. package/src/sap/fe/core/TemplateComponent.js +20 -1
  18. package/src/sap/fe/core/TemplateComponent.ts +24 -2
  19. package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +37 -24
  20. package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +47 -31
  21. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.js +1 -1
  22. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.ts +4 -0
  23. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +4 -1
  24. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +3 -0
  25. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.js +4 -1
  26. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.ts +4 -0
  27. package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +7 -5
  28. package/src/sap/fe/core/controllerextensions/BaseControllerExtension.ts +22 -2
  29. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.js +82 -39
  30. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +91 -54
  31. package/src/sap/fe/core/controllerextensions/EditFlow.js +25 -3
  32. package/src/sap/fe/core/controllerextensions/EditFlow.ts +27 -3
  33. package/src/sap/fe/core/controllerextensions/InlineEditFlow.js +9 -7
  34. package/src/sap/fe/core/controllerextensions/InlineEditFlow.ts +17 -5
  35. package/src/sap/fe/core/controllerextensions/InternalRouting.js +37 -18
  36. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +49 -17
  37. package/src/sap/fe/core/controllerextensions/KPIManagement.js +30 -15
  38. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +32 -14
  39. package/src/sap/fe/core/controllerextensions/MessageHandler.js +9 -10
  40. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +8 -9
  41. package/src/sap/fe/core/controllerextensions/Paginator.js +2 -2
  42. package/src/sap/fe/core/controllerextensions/Paginator.ts +1 -1
  43. package/src/sap/fe/core/controllerextensions/Placeholder.js +10 -2
  44. package/src/sap/fe/core/controllerextensions/Placeholder.ts +5 -1
  45. package/src/sap/fe/core/controllerextensions/Recommendations.js +3 -3
  46. package/src/sap/fe/core/controllerextensions/Recommendations.ts +2 -2
  47. package/src/sap/fe/core/controllerextensions/Routing.js +9 -5
  48. package/src/sap/fe/core/controllerextensions/Routing.ts +7 -7
  49. package/src/sap/fe/core/controllerextensions/Share.js +5 -5
  50. package/src/sap/fe/core/controllerextensions/Share.ts +4 -4
  51. package/src/sap/fe/core/controllerextensions/SideEffects.js +1 -1
  52. package/src/sap/fe/core/controllerextensions/SideEffects.ts +17 -2
  53. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +2 -2
  54. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +1 -1
  55. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +3 -3
  56. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.tsx +3 -2
  57. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +33 -11
  58. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +45 -14
  59. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +37 -3
  60. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +41 -8
  61. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +10 -4
  62. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +6 -1
  63. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.js +7 -7
  64. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.ts +6 -5
  65. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.js +2 -2
  66. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.ts +1 -1
  67. package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.js +2 -1
  68. package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.ts +1 -0
  69. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +10 -6
  70. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +6 -5
  71. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +11 -9
  72. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +22 -9
  73. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.js +9 -4
  74. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.tsx +10 -4
  75. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.js +31 -2
  76. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.tsx +34 -1
  77. package/src/sap/fe/core/converters/ManifestSettings.js +7 -1
  78. package/src/sap/fe/core/converters/ManifestSettings.ts +37 -0
  79. package/src/sap/fe/core/converters/ManifestWrapper.js +29 -9
  80. package/src/sap/fe/core/converters/ManifestWrapper.ts +29 -11
  81. package/src/sap/fe/core/converters/annotations/DataField.js +46 -19
  82. package/src/sap/fe/core/converters/annotations/DataField.ts +93 -19
  83. package/src/sap/fe/core/converters/common/AnnotationConverter.js +88 -35
  84. package/src/sap/fe/core/converters/controls/Common/Action.js +57 -20
  85. package/src/sap/fe/core/converters/controls/Common/Action.ts +71 -21
  86. package/src/sap/fe/core/converters/controls/Common/Chart.js +13 -3
  87. package/src/sap/fe/core/converters/controls/Common/Chart.ts +20 -4
  88. package/src/sap/fe/core/converters/controls/Common/Form.js +18 -3
  89. package/src/sap/fe/core/converters/controls/Common/Form.ts +23 -1
  90. package/src/sap/fe/core/converters/controls/Common/Table.js +89 -57
  91. package/src/sap/fe/core/converters/controls/Common/Table.ts +110 -56
  92. package/src/sap/fe/core/converters/controls/Common/filter/FilterRestrictions.js +243 -0
  93. package/src/sap/fe/core/converters/controls/Common/filter/FilterRestrictions.ts +309 -0
  94. package/src/sap/fe/core/converters/controls/Common/table/Columns.js +142 -58
  95. package/src/sap/fe/core/converters/controls/Common/table/Columns.ts +172 -78
  96. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +12 -18
  97. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +13 -27
  98. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +7 -16
  99. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +6 -17
  100. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +16 -5
  101. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +16 -5
  102. package/src/sap/fe/core/converters/helpers/Aggregation.js +12 -2
  103. package/src/sap/fe/core/converters/helpers/Aggregation.ts +11 -1
  104. package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +27 -3
  105. package/src/sap/fe/core/converters/helpers/DataFieldHelper.ts +28 -1
  106. package/src/sap/fe/core/converters/helpers/ID.js +3 -1
  107. package/src/sap/fe/core/converters/helpers/ID.ts +1 -0
  108. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +5 -2
  109. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +7 -1
  110. package/src/sap/fe/core/converters/templates/ListReportConverter.js +11 -3
  111. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +12 -4
  112. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +19 -8
  113. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +18 -7
  114. package/src/sap/fe/core/designtime/AnnotationBasedChanges.js +8 -3
  115. package/src/sap/fe/core/designtime/AnnotationBasedChanges.ts +7 -2
  116. package/src/sap/fe/core/formatters/FPMFormatter.js +2 -2
  117. package/src/sap/fe/core/formatters/FPMFormatter.ts +1 -1
  118. package/src/sap/fe/core/fpm/Component.js +8 -1
  119. package/src/sap/fe/core/fpm/Component.ts +8 -0
  120. package/src/sap/fe/core/fpm/manifest.json +1 -1
  121. package/src/sap/fe/core/helpers/AppStartupHelper.js +79 -25
  122. package/src/sap/fe/core/helpers/AppStartupHelper.ts +91 -32
  123. package/src/sap/fe/core/helpers/ManifestHelper.js +6 -3
  124. package/src/sap/fe/core/helpers/ManifestHelper.ts +3 -0
  125. package/src/sap/fe/core/helpers/MetaModelFunction.js +12 -3
  126. package/src/sap/fe/core/helpers/MetaModelFunction.ts +11 -3
  127. package/src/sap/fe/core/helpers/ModelHelper.js +48 -9
  128. package/src/sap/fe/core/helpers/ModelHelper.ts +55 -10
  129. package/src/sap/fe/core/helpers/TypeGuards.js +12 -2
  130. package/src/sap/fe/core/helpers/TypeGuards.ts +10 -1
  131. package/src/sap/fe/core/helpers/WebSocket.js +6 -7
  132. package/src/sap/fe/core/helpers/WebSocket.ts +10 -6
  133. package/src/sap/fe/core/library.js +30 -3
  134. package/src/sap/fe/core/library.ts +28 -1
  135. package/src/sap/fe/core/messagebundle.properties +8 -1
  136. package/src/sap/fe/core/messagebundle_ar.properties +7 -0
  137. package/src/sap/fe/core/messagebundle_bg.properties +10 -3
  138. package/src/sap/fe/core/messagebundle_ca.properties +7 -0
  139. package/src/sap/fe/core/messagebundle_cnr.properties +7 -0
  140. package/src/sap/fe/core/messagebundle_cs.properties +7 -0
  141. package/src/sap/fe/core/messagebundle_cy.properties +8 -1
  142. package/src/sap/fe/core/messagebundle_da.properties +7 -0
  143. package/src/sap/fe/core/messagebundle_de.properties +7 -0
  144. package/src/sap/fe/core/messagebundle_el.properties +7 -0
  145. package/src/sap/fe/core/messagebundle_en.properties +8 -1
  146. package/src/sap/fe/core/messagebundle_en_GB.properties +7 -0
  147. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +5 -0
  148. package/src/sap/fe/core/messagebundle_es.properties +8 -1
  149. package/src/sap/fe/core/messagebundle_es_MX.properties +7 -0
  150. package/src/sap/fe/core/messagebundle_et.properties +7 -0
  151. package/src/sap/fe/core/messagebundle_fi.properties +7 -0
  152. package/src/sap/fe/core/messagebundle_fr.properties +16 -9
  153. package/src/sap/fe/core/messagebundle_fr_CA.properties +7 -0
  154. package/src/sap/fe/core/messagebundle_hi.properties +8 -1
  155. package/src/sap/fe/core/messagebundle_hr.properties +7 -0
  156. package/src/sap/fe/core/messagebundle_hu.properties +7 -0
  157. package/src/sap/fe/core/messagebundle_id.properties +7 -0
  158. package/src/sap/fe/core/messagebundle_it.properties +7 -0
  159. package/src/sap/fe/core/messagebundle_iw.properties +7 -0
  160. package/src/sap/fe/core/messagebundle_ja.properties +8 -1
  161. package/src/sap/fe/core/messagebundle_kk.properties +7 -0
  162. package/src/sap/fe/core/messagebundle_ko.properties +7 -0
  163. package/src/sap/fe/core/messagebundle_lt.properties +7 -0
  164. package/src/sap/fe/core/messagebundle_lv.properties +7 -0
  165. package/src/sap/fe/core/messagebundle_mk.properties +7 -0
  166. package/src/sap/fe/core/messagebundle_ms.properties +7 -0
  167. package/src/sap/fe/core/messagebundle_nl.properties +7 -0
  168. package/src/sap/fe/core/messagebundle_no.properties +7 -0
  169. package/src/sap/fe/core/messagebundle_pl.properties +7 -0
  170. package/src/sap/fe/core/messagebundle_pt.properties +7 -0
  171. package/src/sap/fe/core/messagebundle_pt_PT.properties +7 -0
  172. package/src/sap/fe/core/messagebundle_ro.properties +7 -0
  173. package/src/sap/fe/core/messagebundle_ru.properties +7 -0
  174. package/src/sap/fe/core/messagebundle_sh.properties +7 -0
  175. package/src/sap/fe/core/messagebundle_sk.properties +7 -0
  176. package/src/sap/fe/core/messagebundle_sl.properties +7 -0
  177. package/src/sap/fe/core/messagebundle_sr.properties +7 -0
  178. package/src/sap/fe/core/messagebundle_sv.properties +7 -0
  179. package/src/sap/fe/core/messagebundle_th.properties +7 -0
  180. package/src/sap/fe/core/messagebundle_tr.properties +7 -0
  181. package/src/sap/fe/core/messagebundle_uk.properties +7 -0
  182. package/src/sap/fe/core/messagebundle_vi.properties +7 -0
  183. package/src/sap/fe/core/messagebundle_zh_CN.properties +8 -1
  184. package/src/sap/fe/core/messagebundle_zh_TW.properties +7 -0
  185. package/src/sap/fe/core/rootView/Fcl.controller.js +21 -7
  186. package/src/sap/fe/core/rootView/Fcl.controller.ts +28 -6
  187. package/src/sap/fe/core/rootView/RootViewBaseController.js +96 -88
  188. package/src/sap/fe/core/rootView/RootViewBaseController.ts +106 -96
  189. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +14 -10
  190. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +15 -10
  191. package/src/sap/fe/core/services/RoutingServiceFactory.js +16 -7
  192. package/src/sap/fe/core/services/RoutingServiceFactory.ts +23 -10
  193. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +9 -7
  194. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +13 -8
  195. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +62 -6
  196. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +74 -11
  197. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +33 -15
  198. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.ts +31 -11
  199. package/src/sap/fe/core/templating/DisplayModeFormatter.js +4 -5
  200. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +4 -6
  201. package/src/sap/fe/core/templating/UIFormatters.js +17 -2
  202. package/src/sap/fe/core/templating/UIFormatters.ts +25 -1
  203. package/src/sap/fe/core/types/sap.fe.core-auto-ext.d.js +10 -0
  204. package/src/sap/fe/core/types/sap.fe.core-auto-ext.d.ts +369 -0
  205. package/src/sap/fe/core/types/sap.fe.core-manual-ext.d.js +9 -0
  206. package/src/sap/fe/core/types/sap.fe.core-manual-ext.d.ts +49 -0
  207. package/ui5.yaml +2 -0
@@ -54,6 +54,7 @@ import type {
54
54
  FilterManifestConfiguration,
55
55
  FilterSettings
56
56
  } from "../../ManifestSettings";
57
+ import fetchFilterRestrictions from "../Common/filter/FilterRestrictions";
57
58
 
58
59
  //import { hasValueHelp } from "sap/fe/core/templating/PropertyHelper";
59
60
 
@@ -1014,30 +1015,18 @@ export const processSelectionFields = function (
1014
1015
  }
1015
1016
  });
1016
1017
 
1017
- // filterRestrictions
1018
- const entitySet = converterContext.getEntitySet();
1019
- const oFilterRestrictions = isEntitySet(entitySet) ? entitySet.annotations.Capabilities?.FilterRestrictions : undefined;
1020
1018
  const oRet: {
1021
1019
  RequiredProperties?: string[];
1022
1020
  NonFilterableProperties?: string[];
1023
1021
  } = {};
1024
- oRet.RequiredProperties = getFilterRestrictions(oFilterRestrictions, "RequiredProperties") || [];
1025
- oRet.NonFilterableProperties = getFilterRestrictions(oFilterRestrictions, "NonFilterableProperties") || [];
1026
1022
 
1027
1023
  const sEntitySetPath = converterContext.getContextPath();
1028
- const aPathParts = sEntitySetPath.split("/");
1029
- if (aPathParts.length > 2) {
1030
- const sNavigationPath = aPathParts[aPathParts.length - 1];
1031
- aPathParts.splice(-1, 1);
1032
- const oNavigationRestrictions = getNavigationRestrictions(converterContext, sNavigationPath);
1033
- const oNavigationFilterRestrictions = oNavigationRestrictions && oNavigationRestrictions.FilterRestrictions;
1034
- oRet.RequiredProperties = oRet.RequiredProperties.concat(
1035
- getFilterRestrictions(oNavigationFilterRestrictions, "RequiredProperties") || []
1036
- );
1037
- oRet.NonFilterableProperties = oRet.NonFilterableProperties.concat(
1038
- getFilterRestrictions(oNavigationFilterRestrictions, "NonFilterableProperties") || []
1039
- );
1024
+ let allFilterRestrictions;
1025
+ if (sEntitySetPath) {
1026
+ allFilterRestrictions = fetchFilterRestrictions.getFilterRestrictionsByDataModel(converterContext.getDataModelObjectPath());
1040
1027
  }
1028
+ oRet.RequiredProperties = allFilterRestrictions ? allFilterRestrictions.RequiredProperties : [];
1029
+ oRet.NonFilterableProperties = allFilterRestrictions ? allFilterRestrictions.NonFilterableProperties : [];
1041
1030
  const aRequiredProps = oRet.RequiredProperties;
1042
1031
  const aNonFilterableProps = oRet.NonFilterableProperties;
1043
1032
  const aFetchedProperties: PropertyInfo[] = [];
@@ -40,6 +40,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/conver
40
40
  var getEnabledForAnnotationAction = Action.getEnabledForAnnotationAction;
41
41
  var getAnnotationMenuActionItems = Action.getAnnotationMenuActionItems;
42
42
  var getActionsFromManifest = Action.getActionsFromManifest;
43
+ var addSeparators = Action.addSeparators;
43
44
  var ButtonType = Action.ButtonType;
44
45
  var resolveBindingString = BindingToolkit.resolveBindingString;
45
46
  var ref = BindingToolkit.ref;
@@ -176,7 +177,9 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/conver
176
177
  position: OverrideType.overwrite,
177
178
  menu: OverrideType.overwrite,
178
179
  priority: OverrideType.overwrite,
179
- group: OverrideType.overwrite
180
+ group: OverrideType.overwrite,
181
+ overflowGroup: OverrideType.overwrite,
182
+ disableStrictHandling: OverrideType.overwrite
180
183
  },
181
184
  formActions = getFormActions(facetDefinition, converterContext),
182
185
  // 1. Get actions from annotations -> actions are passed to this method
@@ -240,7 +243,11 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/conver
240
243
  default:
241
244
  break;
242
245
  }
243
- return addFormMenuActions(actions, facetDefinition, converterContext);
246
+ const combinedActions = addFormMenuActions(actions, facetDefinition, converterContext);
247
+ const sectionsInManifest = converterContext.getManifestWrapper().getSections();
248
+ const facetOverflowGroupsConfig = sectionsInManifest?.[facetDefinition.ID]?.overflowGroups;
249
+ combinedActions.actions = addSeparators(combinedActions.actions, facetOverflowGroupsConfig);
250
+ return combinedActions;
244
251
  }
245
252
  /**
246
253
  * Returns the button type based on @UI.Emphasized annotation.
@@ -569,7 +576,8 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/conver
569
576
  invocationGrouping: dataField.InvocationGrouping === "UI.OperationGroupingType/ChangeSet" ? "ChangeSet" : "Isolated",
570
577
  label: dataField.Label?.toString(),
571
578
  model: fn("getModel", [], pathInModel("/", "$source")),
572
- isNavigable: isActionNavigable(formManifestActionsConfiguration && formManifestActionsConfiguration[key])
579
+ isNavigable: isActionNavigable(formManifestActionsConfiguration && formManifestActionsConfiguration[key]),
580
+ disableStrictHandling: formManifestActionsConfiguration?.[key]?.disableStrictHandling
573
581
  }], ref(".editFlow"))),
574
582
  facetName: dataField.Inline ? facetDefinition.fullyQualifiedName : undefined
575
583
  };
@@ -609,7 +617,10 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/conver
609
617
  const isVisible = manifestSubSection.visible !== undefined ? manifestSubSection.visible : true;
610
618
  const isDynamicExpression = isVisible && typeof isVisible === "string" && isVisible.indexOf("{=") === 0;
611
619
  const manifestActions = getActionsFromManifest(manifestSubSection.actions, converterContext);
612
- manifestActions.actions = removeDuplicateActions(Object.values(manifestActions.actions))?.reduce((previousAction, currentAction) => ({
620
+ let actions = Object.values(manifestActions.actions);
621
+ actions = removeDuplicateActions(actions);
622
+ actions = addSeparators(actions, manifestSubSection.overflowGroups);
623
+ manifestActions.actions = actions?.reduce((previousAction, currentAction) => ({
613
624
  ...previousAction,
614
625
  [currentAction.key]: currentAction
615
626
  }), {});
@@ -692,4 +703,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/conver
692
703
  }
693
704
  return _exports;
694
705
  }, false);
695
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTdWJTZWN0aW9uVHlwZSIsIl9leHBvcnRzIiwidmlzdWFsaXphdGlvblRlcm1zIiwiY3JlYXRlU3ViU2VjdGlvbnMiLCJmYWNldENvbGxlY3Rpb24iLCJjb252ZXJ0ZXJDb250ZXh0IiwiaXNIZWFkZXJTZWN0aW9uIiwidXNlU2luZ2xlVGV4dEFyZWFGaWVsZEFzTm90ZXMiLCJmYWNldHNUb0NyZWF0ZSIsInJlZHVjZSIsImZhY2V0RGVmaW5pdGlvbiIsIiRUeXBlIiwicHVzaCIsIkZhY2V0cyIsImZpbmQiLCJmYWNldFR5cGUiLCJzcGxpY2UiLCJsZW5ndGgiLCJtYXAiLCJmYWNldCIsImNyZWF0ZVN1YlNlY3Rpb24iLCJjcmVhdGVDdXN0b21IZWFkZXJGYWNldFN1YlNlY3Rpb25zIiwiY3VzdG9tSGVhZGVyRmFjZXRzIiwiZ2V0SGVhZGVyRmFjZXRzRnJvbU1hbmlmZXN0IiwiZ2V0TWFuaWZlc3RXcmFwcGVyIiwiZ2V0SGVhZGVyRmFjZXRzIiwiYUN1c3RvbUhlYWRlckZhY2V0cyIsIk9iamVjdCIsImtleXMiLCJmb3JFYWNoIiwia2V5IiwiY3VzdG9tSGVhZGVyRmFjZXQiLCJ0ZW1wbGF0ZUVkaXQiLCJjcmVhdGVDdXN0b21IZWFkZXJGYWNldFN1YlNlY3Rpb24iLCJzdWJTZWN0aW9uSUQiLCJnZXRDdXN0b21TdWJTZWN0aW9uSUQiLCJzdWJTZWN0aW9uIiwiaWQiLCJ0aXRsZSIsInR5cGUiLCJYTUxGcmFnbWVudCIsInRlbXBsYXRlIiwidmlzaWJsZSIsImxldmVsIiwic2lkZUNvbnRlbnQiLCJ1bmRlZmluZWQiLCJzdGFzaGVkIiwiZmxleFNldHRpbmdzIiwiYWN0aW9ucyIsIm9iamVjdFBhZ2VMYXp5TG9hZGVyRW5hYmxlZCIsImdldFN1YlNlY3Rpb25LZXkiLCJmYWxsYmFjayIsIklEIiwidG9TdHJpbmciLCJMYWJlbCIsImFkZEZvcm1NZW51QWN0aW9ucyIsInJldmVyc2VJbmRleCIsInN0YXJ0c1dpdGgiLCJoaWRkZW5BY3Rpb25zIiwiZ2V0Rm9ybUhpZGRlbkFjdGlvbnMiLCJhY3Rpb25PdmVyd3JpdGVDb25maWciLCJlbmFibGVkIiwiT3ZlcnJpZGVUeXBlIiwib3ZlcndyaXRlIiwiY29tbWFuZCIsInBvc2l0aW9uIiwibWVudSIsInByaW9yaXR5IiwiZ3JvdXAiLCJmb3JtQWN0aW9ucyIsImdldEZvcm1BY3Rpb25zIiwibWFuaWZlc3RBY3Rpb25zIiwiZ2V0QWN0aW9uc0Zyb21NYW5pZmVzdCIsImFubm90YXRpb25NZW51QWN0aW9uSXRlbXMiLCJnZXRBbm5vdGF0aW9uTWVudUFjdGlvbkl0ZW1zIiwibWF0Y2hpbmdNYW5pZmVzdEFjdGlvbnMiLCJnZXRNYXRjaGluZ01hbmlmZXN0QWN0aW9uIiwib3ZlcndyaXR0ZW5NZW51QWN0aW9uSXRlbXMiLCJpbnNlcnRDdXN0b21FbGVtZW50cyIsIm1hbmlmZXN0QWN0aW9uIiwiZm9ybUFsbEFjdGlvbnMiLCJwcmVwYXJlTWVudUFjdGlvbnMiLCJyZW1vdmVEdXBsaWNhdGVBY3Rpb25zIiwiZ2V0VmlzaWJpbGl0eUVuYWJsZW1lbnRNZW51QWN0aW9ucyIsIkFjdGlvblV0aWxpdGllcyIsImVuc3VyZVByaW1hcnlBY3Rpb25OZXZlck92ZXJmbG93cyIsImFjdGlvbiIsIkFjdGlvblR5cGUiLCJNZW51IiwiZGVmYXVsdEFjdGlvbiIsIkRlZmF1bHQiLCJjb21tYW5kQWN0aW9ucyIsImdldEZhY2V0QWN0aW9ucyIsImZpbHRlciIsInN1YkZhY2V0RGVmaW5pdGlvbiIsImlzUmVmZXJlbmNlRmFjZXQiLCJhY3Rpb25SZWR1Y2VyIiwicmVmZXJlbmNlRmFjZXQiLCJjcmVhdGVGb3JtQWN0aW9uUmVkdWNlciIsImdldEJ1dHRvblR5cGUiLCJlbXBoYXNpemVkIiwiYnV0dG9uVHlwZUNvbmRpdGlvbiIsImVxdWFsIiwiZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uIiwiY29tcGlsZUV4cHJlc3Npb24iLCJpZkVsc2UiLCJCdXR0b25UeXBlIiwiR2hvc3QiLCJUcmFuc3BhcmVudCIsImhhc1NpbmdsZUNvbnRlbnQiLCJnZXRTdWJTZWN0aW9uSUQiLCJoaWRkZW5Bbm5vdGF0aW9uIiwiYW5ub3RhdGlvbnMiLCJVSSIsIkhpZGRlbiIsImlzVmlzaWJsZUV4cHJlc3Npb24iLCJub3QiLCJwYXRoIiwic2luZ2xldG9uUGF0aFZpc2l0b3IiLCJnZXRDb252ZXJ0ZWRUeXBlcyIsImlzVmlzaWJpbGl0eUR5bmFtaWMiLCJpc0NvbnN0YW50IiwiaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24iLCJVbmtub3duIiwiYW5ub3RhdGlvblBhdGgiLCJnZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwiZ2V0RW5hYmxlTGF6eUxvYWRpbmciLCJnZXRTdGFzaGVkU2V0dGluZ3NGb3JIZWFkZXJGYWNldCIsImRlc2lnbnRpbWUiLCJnZXREZXNpZ25UaW1lTWV0YWRhdGFTZXR0aW5nc0ZvckhlYWRlckZhY2V0IiwidW5zdXBwb3J0ZWRUZXh0IiwiZmFjZXRzIiwidmlzdWFsaXphdGlvbkZhY2V0cyIsImluZGV4IiwiX3JlZiIsIlRhcmdldCIsIiR0YXJnZXQiLCJpbmNsdWRlcyIsInRlcm0iLCJub25WaXN1YWxpemF0aW9uRmFjZXRzIiwidmlzdWFsaXphdGlvbiIsInZpc3VhbGl6YXRpb25Db250ZW50IiwiZm9ybUNvbnRlbnQiLCJtaXhlZENvbnRlbnQiLCJMb2ciLCJ3YXJuaW5nIiwiZmFrZUZvcm1GYWNldCIsIl9yZWYyIiwibWl4ZWRTdWJTZWN0aW9uIiwiTWl4ZWQiLCJjb250ZW50IiwiZmFjZXRBY3Rpb25zIiwiZm9ybUNvbGxlY3Rpb25TdWJTZWN0aW9uIiwiRm9ybSIsImZvcm1EZWZpbml0aW9uIiwiY3JlYXRlRm9ybURlZmluaXRpb24iLCJmYWNldE5hbWUiLCJ2YWx1ZSIsInByZXNlbnRhdGlvbiIsImdldERhdGFWaXN1YWxpemF0aW9uQ29uZmlndXJhdGlvbiIsImlzQ29uZGVuc2VkVGFibGVMYXlvdXRDb21wbGlhbnQiLCJnZXRDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFuY2UiLCJkb05vdENoZWNrQXBwbHlTdXBwb3J0ZWQiLCJzaG91bGRDcmVhdGVUZW1wbGF0ZUNoYXJ0VmlzdWFsaXphdGlvbiIsInN1YlNlY3Rpb25UaXRsZSIsImNvbnRyb2xUaXRsZSIsInZpc3VhbGl6YXRpb25zIiwiYW5ub3RhdGlvbiIsImlzUGFydE9mUHJldmlldyIsIlBhcnRPZlByZXZpZXciLCJ2YWx1ZU9mIiwic2hvd1N1YlNlY3Rpb25UaXRsZSIsImdldFNob3dTdWJTZWN0aW9uVGl0bGUiLCJkYXRhVmlzdWFsaXphdGlvblRpdGxlVmlzaWJsZSIsImFuZCIsImRhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvbiIsIkRhdGFWaXN1YWxpemF0aW9uIiwiZm9ybUVsZW1lbnRTdWJTZWN0aW9uIiwiTm90ZXMiLCJ1bnN1cHBvcnRlZFN1YlNlY3Rpb24iLCJ0ZXh0Iiwib3IiLCJub3RFcXVhbCIsInJlc29sdmVCaW5kaW5nU3RyaW5nIiwicmVmZXJlbmNlVGFyZ2V0IiwidGFyZ2V0VmFsdWUiLCJkYXRhRmllbGRDb2xsZWN0aW9uIiwibmF2aWdhdGlvblByb3BlcnR5UGF0aCIsInNwbGl0IiwibGFzdEluZGV4T2YiLCJzdWJzdHJpbmciLCJEYXRhIiwiZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbiIsInF1YWxpZmllciIsImRhdGFGaWVsZCIsIlJlcXVpcmVzQ29udGV4dCIsImdldERpYWdub3N0aWNzIiwiYWRkSXNzdWUiLCJJc3N1ZUNhdGVnb3J5IiwiQW5ub3RhdGlvbiIsIklzc3VlU2V2ZXJpdHkiLCJMb3ciLCJJc3N1ZVR5cGUiLCJNQUxGT1JNRURfREFUQUZJRUxEX0ZPUl9JQk4iLCJSRVFVSVJFU0NPTlRFWFQiLCJJbmxpbmUiLCJJTkxJTkUiLCJEZXRlcm1pbmluZyIsIkRFVEVSTUlOSU5HIiwibU5hdmlnYXRpb25QYXJhbWV0ZXJzIiwiTWFwcGluZyIsInNlbWFudGljT2JqZWN0TWFwcGluZyIsImdldFNlbWFudGljT2JqZWN0TWFwcGluZyIsIkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiIsImdldEZvcm1JRCIsIktleUhlbHBlciIsImdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZCIsIk5hdmlnYXRpb25BdmFpbGFibGUiLCJidXR0b25UeXBlIiwiRW1waGFzaXplZCIsInByZXNzIiwiZm4iLCJTZW1hbnRpY09iamVjdCIsIkFjdGlvbiIsImN1c3RvbURhdGEiLCJzZW1hbnRpY09iamVjdCIsImZvcm1NYW5pZmVzdEFjdGlvbnNDb25maWd1cmF0aW9uIiwiZ2V0RGF0YUZpZWxkQW5ub3RhdGlvbkFjdGlvbiIsImlzQUlPcGVyYXRpb24iLCJpc01lbnVBSU9wZXJhdGlvbiIsIkFjdGlvbnMiLCJmb3JtTWFuaWZlc3RNZW51QWN0aW9uc0NvbmZpZ3VyYXRpb24iLCJEYXRhRmllbGRGb3JBY3Rpb24iLCJnZXRFbmFibGVkRm9yQW5ub3RhdGlvbkFjdGlvbiIsIkFjdGlvblRhcmdldCIsImJpbmRpbmciLCJyZXF1aXJlc0RpYWxvZyIsImlzQWN0aW9uV2l0aERpYWxvZyIsImlzQWN0aW9uQUlPcGVyYXRpb24iLCJjb250ZXh0cyIsInBhdGhJbk1vZGVsIiwiaW52b2NhdGlvbkdyb3VwaW5nIiwiSW52b2NhdGlvbkdyb3VwaW5nIiwibGFiZWwiLCJtb2RlbCIsImlzTmF2aWdhYmxlIiwiaXNBY3Rpb25OYXZpZ2FibGUiLCJyZWYiLCJpc0RpYWxvZyIsImFjdGlvbkRlZmluaXRpb24iLCJiQ3JpdGljYWwiLCJDb21tb24iLCJJc0FjdGlvbkNyaXRpY2FsIiwicGFyYW1ldGVycyIsImNyZWF0ZUN1c3RvbVN1YlNlY3Rpb25zIiwibWFuaWZlc3RTdWJTZWN0aW9ucyIsInN1YlNlY3Rpb25zIiwic3ViU2VjdGlvbktleSIsImNyZWF0ZUN1c3RvbVN1YlNlY3Rpb24iLCJtYW5pZmVzdFN1YlNlY3Rpb24iLCJnZXRTaWRlQ29udGVudElEIiwiZXF1YWxTcGxpdCIsInBsYWNlbWVudCIsIlBsYWNlbWVudCIsIkFmdGVyIiwiaXNWaXNpYmxlIiwiaXNEeW5hbWljRXhwcmVzc2lvbiIsImluZGV4T2YiLCJ2YWx1ZXMiLCJwcmV2aW91c0FjdGlvbiIsImN1cnJlbnRBY3Rpb24iLCJzdWJTZWN0aW9uRGVmaW5pdGlvbiIsImVuYWJsZUxhenlMb2FkaW5nIiwiY29tcG9uZW50TmFtZSIsInNldHRpbmdzIiwiYXBwbHlTdGF0ZSIsInJldHJpZXZlU3RhdGUiLCJuYW1lIiwiZW1iZWRkZWRDb21wb25lbnQiLCJFbWJlZGRlZENvbXBvbmVudCIsIkpTT04iLCJzdHJpbmdpZnkiLCJQbGFjZWhvbGRlciIsImN1cnJlbnRGYWNldCIsImZhY2V0c1RvQ3JlYXRlSW5TZWN0aW9uIiwibWFuaWZlc3RXcmFwcGVyIiwidXNlSWNvblRhYkJhciIsImhhc05vT3RoZXJWaXNpYmxlVGFibGVJblRhcmdldHMiLCJlbnRpdHlUeXBlIiwiZ2V0RW50aXR5VHlwZSIsImV2ZXJ5Iiwic3ViRmFjZXQiLCJyZWZGYWNldCIsInN1YkNvbGxlY3Rpb25GYWNldCIsInN1YlJlZkZhY2V0Il0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJTdWJTZWN0aW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQWN0aW9uIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL0VkbVwiO1xuaW1wb3J0IHsgQ29tbXVuaWNhdGlvbkFubm90YXRpb25UZXJtcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbXVuaWNhdGlvblwiO1xuaW1wb3J0IHR5cGUge1xuXHRDb2xsZWN0aW9uRmFjZXQsXG5cdENvbGxlY3Rpb25GYWNldFR5cGVzLFxuXHREYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHREYXRhRmllbGRGb3JBY3Rpb25UeXBlcyxcblx0RW1waGFzaXplZCxcblx0RmFjZXRUeXBlcyxcblx0RmllbGRHcm91cCxcblx0T3BlcmF0aW9uR3JvdXBpbmdUeXBlLFxuXHRSZWZlcmVuY2VGYWNldFR5cGVzXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB7IFVJQW5ub3RhdGlvblRlcm1zLCBVSUFubm90YXRpb25UeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgeyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sIENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQge1xuXHRhbmQsXG5cdGNvbXBpbGVFeHByZXNzaW9uLFxuXHRlcXVhbCxcblx0Zm4sXG5cdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbixcblx0aWZFbHNlLFxuXHRpc0NvbnN0YW50LFxuXHRub3QsXG5cdG5vdEVxdWFsLFxuXHRvcixcblx0cGF0aEluTW9kZWwsXG5cdHJlZixcblx0cmVzb2x2ZUJpbmRpbmdTdHJpbmdcbn0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgdHlwZSB7IE5hdmlnYXRpb25QYXJhbWV0ZXJzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IFBhZ2VDb250ZXh0UGF0aFRhcmdldCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL1RlbXBsYXRlQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSB7XG5cdEFubm90YXRpb25BY3Rpb24sXG5cdEJhc2VBY3Rpb24sXG5cdENvbWJpbmVkQWN0aW9uLFxuXHRDdXN0b21BY3Rpb24sXG5cdE92ZXJyaWRlVHlwZUFjdGlvblxufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQge1xuXHRCdXR0b25UeXBlLFxuXHRnZXRBY3Rpb25zRnJvbU1hbmlmZXN0LFxuXHRnZXRBbm5vdGF0aW9uTWVudUFjdGlvbkl0ZW1zLFxuXHRnZXRFbmFibGVkRm9yQW5ub3RhdGlvbkFjdGlvbixcblx0Z2V0TWF0Y2hpbmdNYW5pZmVzdEFjdGlvbixcblx0Z2V0U2VtYW50aWNPYmplY3RNYXBwaW5nLFxuXHRnZXRWaXNpYmlsaXR5RW5hYmxlbWVudE1lbnVBY3Rpb25zLFxuXHRpc0FjdGlvbkFJT3BlcmF0aW9uLFxuXHRpc0FjdGlvbk5hdmlnYWJsZSxcblx0aXNNZW51QUlPcGVyYXRpb24sXG5cdHByZXBhcmVNZW51QWN0aW9ucyxcblx0cmVtb3ZlRHVwbGljYXRlQWN0aW9uc1xufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IENoYXJ0VmlzdWFsaXphdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9DaGFydFwiO1xuaW1wb3J0IHR5cGUgeyBUYWJsZVZpc3VhbGl6YXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vVGFibGVcIjtcbmltcG9ydCB0eXBlIHsgQ3VzdG9tT2JqZWN0UGFnZUhlYWRlckZhY2V0LCBGbGV4U2V0dGluZ3MgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9PYmplY3RQYWdlL0hlYWRlckZhY2V0XCI7XG5pbXBvcnQge1xuXHRnZXREZXNpZ25UaW1lTWV0YWRhdGFTZXR0aW5nc0ZvckhlYWRlckZhY2V0LFxuXHRnZXRIZWFkZXJGYWNldHNGcm9tTWFuaWZlc3QsXG5cdGdldFN0YXNoZWRTZXR0aW5nc0ZvckhlYWRlckZhY2V0XG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL09iamVjdFBhZ2UvSGVhZGVyRmFjZXRcIjtcbmltcG9ydCB7IElzc3VlQ2F0ZWdvcnksIElzc3VlU2V2ZXJpdHksIElzc3VlVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvSXNzdWVNYW5hZ2VyXCI7XG5pbXBvcnQgeyBLZXlIZWxwZXIgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0tleVwiO1xuaW1wb3J0IEFjdGlvblV0aWxpdGllcyBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9BY3Rpb25VdGlsaXRpZXNcIjtcbmltcG9ydCB7IHNpbmdsZXRvblBhdGhWaXNpdG9yIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ0hlbHBlclwiO1xuaW1wb3J0IHsgaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgdHlwZSBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCIuLi8uLi9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1NYW5pZmVzdENvbmZpZ3VyYXRpb24sIE1hbmlmZXN0QWN0aW9uLCBNYW5pZmVzdFN1YlNlY3Rpb24gfSBmcm9tIFwiLi4vLi4vTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHsgQWN0aW9uVHlwZSB9IGZyb20gXCIuLi8uLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBpc0FjdGlvbldpdGhEaWFsb2cgfSBmcm9tIFwiLi4vLi4vYW5ub3RhdGlvbnMvRGF0YUZpZWxkXCI7XG5pbXBvcnQgdHlwZSB7IENvbmZpZ3VyYWJsZU9iamVjdCwgQ29uZmlndXJhYmxlUmVjb3JkLCBDdXN0b21FbGVtZW50IH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgeyBPdmVycmlkZVR5cGUsIFBsYWNlbWVudCwgaW5zZXJ0Q3VzdG9tRWxlbWVudHMgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7IGdldEN1c3RvbVN1YlNlY3Rpb25JRCwgZ2V0Rm9ybUlELCBnZXRTaWRlQ29udGVudElELCBnZXRTdWJTZWN0aW9uSUQgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9JRFwiO1xuaW1wb3J0IHsgZ2V0Rm9ybUFjdGlvbnMsIGdldEZvcm1IaWRkZW5BY3Rpb25zIH0gZnJvbSBcIi4uLy4uL29iamVjdFBhZ2UvRm9ybU1lbnVBY3Rpb25zXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFWaXN1YWxpemF0aW9uRGVmaW5pdGlvbiB9IGZyb20gXCIuLi9Db21tb24vRGF0YVZpc3VhbGl6YXRpb25cIjtcbmltcG9ydCB7IGdldERhdGFWaXN1YWxpemF0aW9uQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuLi9Db21tb24vRGF0YVZpc3VhbGl6YXRpb25cIjtcbmltcG9ydCB0eXBlIHsgRm9ybURlZmluaXRpb24gfSBmcm9tIFwiLi4vQ29tbW9uL0Zvcm1cIjtcbmltcG9ydCB7IGNyZWF0ZUZvcm1EZWZpbml0aW9uLCBpc1JlZmVyZW5jZUZhY2V0IH0gZnJvbSBcIi4uL0NvbW1vbi9Gb3JtXCI7XG5cbmV4cG9ydCBlbnVtIFN1YlNlY3Rpb25UeXBlIHtcblx0VW5rbm93biA9IFwiVW5rbm93blwiLCAvLyBEZWZhdWx0IFR5cGVcblx0Rm9ybSA9IFwiRm9ybVwiLFxuXHROb3RlcyA9IFwiTm90ZXNcIixcblx0RGF0YVZpc3VhbGl6YXRpb24gPSBcIkRhdGFWaXN1YWxpemF0aW9uXCIsXG5cdFhNTEZyYWdtZW50ID0gXCJYTUxGcmFnbWVudFwiLFxuXHRQbGFjZWhvbGRlciA9IFwiUGxhY2Vob2xkZXJcIixcblx0TWl4ZWQgPSBcIk1peGVkXCIsXG5cdEVtYmVkZGVkQ29tcG9uZW50ID0gXCJFbWJlZGRlZENvbXBvbmVudFwiXG59XG5cbmV4cG9ydCB0eXBlIE9iamVjdFBhZ2VTdWJTZWN0aW9uID1cblx0fCBVbnN1cHBvcnRlZFN1YlNlY3Rpb25cblx0fCBGb3JtU3ViU2VjdGlvblxuXHR8IERhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvblxuXHR8IENvbnRhY3RTdWJTZWN0aW9uXG5cdHwgWE1MRnJhZ21lbnRTdWJTZWN0aW9uXG5cdHwgUGxhY2Vob2xkZXJGcmFnbWVudFN1YlNlY3Rpb25cblx0fCBNaXhlZFN1YlNlY3Rpb25cblx0fCBSZXVzZUNvbXBvbmVudFN1YlNlY3Rpb25cblx0fCBOb3RlU3ViU2VjdGlvbjtcblxudHlwZSBCYXNlU3ViU2VjdGlvbiA9IHtcblx0aWQ6IHN0cmluZztcblx0a2V5OiBzdHJpbmc7XG5cdHRpdGxlOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0YW5ub3RhdGlvblBhdGg6IHN0cmluZztcblx0dHlwZTogU3ViU2VjdGlvblR5cGU7XG5cdHZpc2libGU6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRpc1Zpc2liaWxpdHlEeW5hbWljPzogYm9vbGVhbiB8IFwiXCI7XG5cdGZsZXhTZXR0aW5ncz86IEZsZXhTZXR0aW5ncztcblx0c3Rhc2hlZD86IGJvb2xlYW47XG5cdGxldmVsOiBudW1iZXI7XG5cdGNvbnRlbnQ/OiBBcnJheTxPYmplY3RQYWdlU3ViU2VjdGlvbj47XG5cdHNpZGVDb250ZW50PzogU2lkZUNvbnRlbnREZWY7XG5cdG9iamVjdFBhZ2VMYXp5TG9hZGVyRW5hYmxlZDogYm9vbGVhbjtcblx0Y2xhc3M/OiBzdHJpbmc7XG5cdGFwcGx5U3RhdGU/OiBzdHJpbmc7XG5cdHJldHJpZXZlU3RhdGU/OiBzdHJpbmc7XG59O1xuXG50eXBlIFVuc3VwcG9ydGVkU3ViU2VjdGlvbiA9IEJhc2VTdWJTZWN0aW9uICYge1xuXHR0eXBlOiBTdWJTZWN0aW9uVHlwZS5Vbmtub3duO1xuXHR0ZXh0OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBEYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb24gPSBCYXNlU3ViU2VjdGlvbiAmIHtcblx0dHlwZTogU3ViU2VjdGlvblR5cGUuRGF0YVZpc3VhbGl6YXRpb247XG5cdHByZXNlbnRhdGlvbjogRGF0YVZpc3VhbGl6YXRpb25EZWZpbml0aW9uO1xuXHRpc1BhcnRPZlByZXZpZXc/OiBib29sZWFuO1xuXHRzaG93U3ViU2VjdGlvblRpdGxlOiBib29sZWFuIHwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdGRhdGFWaXN1YWxpemF0aW9uVGl0bGVWaXNpYmxlPzogc3RyaW5nIHwgYm9vbGVhbjtcblx0ZGF0YVZpc3VhbGl6YXRpb25PcHRpb25zPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59O1xuXG50eXBlIENvbnRhY3RTdWJTZWN0aW9uID0gVW5zdXBwb3J0ZWRTdWJTZWN0aW9uO1xudHlwZSBOb3RlU3ViU2VjdGlvbiA9IEJhc2VTdWJTZWN0aW9uICYge1xuXHR0eXBlOiBTdWJTZWN0aW9uVHlwZS5Ob3Rlcztcbn07XG50eXBlIFhNTEZyYWdtZW50U3ViU2VjdGlvbiA9IE9taXQ8QmFzZVN1YlNlY3Rpb24sIFwiYW5ub3RhdGlvblBhdGhcIj4gJiB7XG5cdHR5cGU6IFN1YlNlY3Rpb25UeXBlLlhNTEZyYWdtZW50O1xuXHR0ZW1wbGF0ZTogc3RyaW5nO1xuXHRhY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+O1xufTtcblxudHlwZSBSZXVzZUNvbXBvbmVudFN1YlNlY3Rpb24gPSBCYXNlU3ViU2VjdGlvbiAmIHtcblx0dHlwZTogU3ViU2VjdGlvblR5cGUuRW1iZWRkZWRDb21wb25lbnQ7XG5cdGNvbXBvbmVudE5hbWU6IHN0cmluZztcblx0c2V0dGluZ3M6IHN0cmluZztcbn07XG5cbnR5cGUgUGxhY2Vob2xkZXJGcmFnbWVudFN1YlNlY3Rpb24gPSBPbWl0PEJhc2VTdWJTZWN0aW9uLCBcImFubm90YXRpb25QYXRoXCI+ICYge1xuXHR0eXBlOiBTdWJTZWN0aW9uVHlwZS5QbGFjZWhvbGRlcjtcblx0YWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPjtcbn07XG5cbmV4cG9ydCB0eXBlIE1peGVkU3ViU2VjdGlvbiA9IEJhc2VTdWJTZWN0aW9uICYge1xuXHR0eXBlOiBTdWJTZWN0aW9uVHlwZS5NaXhlZDtcblx0Y29udGVudDogQXJyYXk8T2JqZWN0UGFnZVN1YlNlY3Rpb24+O1xufTtcblxuZXhwb3J0IHR5cGUgRm9ybVN1YlNlY3Rpb24gPSBCYXNlU3ViU2VjdGlvbiAmIHtcblx0dHlwZTogU3ViU2VjdGlvblR5cGUuRm9ybTtcblx0Zm9ybURlZmluaXRpb246IEZvcm1EZWZpbml0aW9uO1xuXHRhY3Rpb25zOiBCYXNlQWN0aW9uW107XG5cdGNvbW1hbmRBY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+O1xufTtcblxuZXhwb3J0IHR5cGUgT2JqZWN0UGFnZVNlY3Rpb24gPSBDb25maWd1cmFibGVPYmplY3QgJiB7XG5cdGlkOiBzdHJpbmc7XG5cdHRpdGxlOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0c2hvd1RpdGxlPzogYm9vbGVhbjtcblx0dmlzaWJsZTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdHN1YlNlY3Rpb25zOiBPYmplY3RQYWdlU3ViU2VjdGlvbltdO1xuXHR1c2VTaW5nbGVUZXh0QXJlYUZpZWxkQXNOb3Rlcz86IGJvb2xlYW47XG5cdGFwcGx5U3RhdGU/OiBzdHJpbmc7XG5cdHJldHJpZXZlU3RhdGU/OiBzdHJpbmc7XG59O1xuXG50eXBlIFNpZGVDb250ZW50RGVmID0ge1xuXHR0ZW1wbGF0ZT86IHN0cmluZztcblx0aWQ/OiBzdHJpbmc7XG5cdHNpZGVDb250ZW50RmFsbERvd24/OiBzdHJpbmc7XG5cdGNvbnRhaW5lclF1ZXJ5Pzogc3RyaW5nO1xuXHR2aXNpYmxlPzogYm9vbGVhbjtcblx0ZXF1YWxTcGxpdD86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBDdXN0b21PYmplY3RQYWdlU2VjdGlvbiA9IEN1c3RvbUVsZW1lbnQ8T2JqZWN0UGFnZVNlY3Rpb24+ICYge1xuXHRvblNlY3Rpb25Mb2FkZWQ/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBDdXN0b21PYmplY3RQYWdlU3ViU2VjdGlvbiA9IEN1c3RvbUVsZW1lbnQ8T2JqZWN0UGFnZVN1YlNlY3Rpb24+O1xuXG5jb25zdCB2aXN1YWxpemF0aW9uVGVybXM6IHN0cmluZ1tdID0gW1xuXHRVSUFubm90YXRpb25UZXJtcy5MaW5lSXRlbSxcblx0VUlBbm5vdGF0aW9uVGVybXMuQ2hhcnQsXG5cdFVJQW5ub3RhdGlvblRlcm1zLlByZXNlbnRhdGlvblZhcmlhbnQsXG5cdFVJQW5ub3RhdGlvblRlcm1zLlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQsXG5cdFVJQW5ub3RhdGlvblRlcm1zLk5vdGVcbl07XG5cbi8qKlxuICogQ3JlYXRlIHN1YnNlY3Rpb25zIGJhc2VkIG9uIGZhY2V0IGRlZmluaXRpb24uXG4gKiBAcGFyYW0gZmFjZXRDb2xsZWN0aW9uIENvbGxlY3Rpb24gb2YgZmFjZXRzXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSBpc0hlYWRlclNlY3Rpb24gVHJ1ZSBpZiBoZWFkZXIgc2VjdGlvbiBpcyBnZW5lcmF0ZWQgaW4gdGhpcyBpdGVyYXRpb25cbiAqIEBwYXJhbSB1c2VTaW5nbGVUZXh0QXJlYUZpZWxkQXNOb3RlcyBJZiB0aGUgb25seSBmaWVsZCB3aXRoaW4gYSBmb3JtIGNvbnRhaW5lciBpcyBhIHRleHQtYXJlYSBmaWVsZCwgdGhlIGxhYmVsIGlzIGhpZGRlblxuICogQHJldHVybnMgVGhlIGN1cnJlbnQgc3Vic2VjdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVN1YlNlY3Rpb25zKFxuXHRmYWNldENvbGxlY3Rpb246IEZhY2V0VHlwZXNbXSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRpc0hlYWRlclNlY3Rpb24/OiBib29sZWFuLFxuXHR1c2VTaW5nbGVUZXh0QXJlYUZpZWxkQXNOb3Rlcz86IGJvb2xlYW5cbik6IE9iamVjdFBhZ2VTdWJTZWN0aW9uW10ge1xuXHQvLyBGaXJzdCB3ZSBkZXRlcm1pbmUgd2hpY2ggc3ViIHNlY3Rpb24gd2UgbmVlZCB0byBjcmVhdGVcblx0Y29uc3QgZmFjZXRzVG9DcmVhdGUgPSBmYWNldENvbGxlY3Rpb24ucmVkdWNlKChmYWNldHNUb0NyZWF0ZTogRmFjZXRUeXBlc1tdLCBmYWNldERlZmluaXRpb24pID0+IHtcblx0XHRzd2l0Y2ggKGZhY2V0RGVmaW5pdGlvbi4kVHlwZSkge1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5SZWZlcmVuY2VGYWNldDpcblx0XHRcdFx0ZmFjZXRzVG9DcmVhdGUucHVzaChmYWNldERlZmluaXRpb24pO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuQ29sbGVjdGlvbkZhY2V0OlxuXHRcdFx0XHQvLyBUT0RPIElmIHRoZSBDb2xsZWN0aW9uIEZhY2V0IGhhcyBhIGNoaWxkIG9mIHR5cGUgQ29sbGVjdGlvbiBGYWNldCB3ZSBicmluZyB0aGVtIHVwIG9uZSBsZXZlbCAoRm9ybSArIFRhYmxlIHVzZSBjYXNlKSA/XG5cdFx0XHRcdC8vIGZpcnN0IGNhc2UgZmFjZXQgQ29sbGVjdGlvbiBpcyBjb21iaW5hdGlvbiBvZiBjb2xsZWN0aW9uIGFuZCByZWZlcmVuY2UgZmFjZXQgb3Igbm90IGFsbCBmYWNldHMgYXJlIHJlZmVyZW5jZSBmYWNldHMuXG5cdFx0XHRcdGlmIChmYWNldERlZmluaXRpb24uRmFjZXRzLmZpbmQoKGZhY2V0VHlwZSkgPT4gZmFjZXRUeXBlLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5Db2xsZWN0aW9uRmFjZXQpKSB7XG5cdFx0XHRcdFx0ZmFjZXRzVG9DcmVhdGUuc3BsaWNlKGZhY2V0c1RvQ3JlYXRlLmxlbmd0aCwgMCwgLi4uZmFjZXREZWZpbml0aW9uLkZhY2V0cyk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZmFjZXRzVG9DcmVhdGUucHVzaChmYWNldERlZmluaXRpb24pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5SZWZlcmVuY2VVUkxGYWNldDpcblx0XHRcdFx0Ly8gTm90IHN1cHBvcnRlZFxuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdFx0cmV0dXJuIGZhY2V0c1RvQ3JlYXRlO1xuXHR9LCBbXSk7XG5cblx0Ly8gVGhlbiB3ZSBjcmVhdGUgdGhlIGFjdHVhbCBzdWJzZWN0aW9uc1xuXHRyZXR1cm4gZmFjZXRzVG9DcmVhdGUubWFwKChmYWNldCkgPT5cblx0XHRjcmVhdGVTdWJTZWN0aW9uKFxuXHRcdFx0ZmFjZXQsXG5cdFx0XHRmYWNldHNUb0NyZWF0ZSxcblx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHQwLFxuXHRcdFx0IShmYWNldCBhcyBDb2xsZWN0aW9uRmFjZXQpPy5GYWNldHM/Lmxlbmd0aCxcblx0XHRcdGlzSGVhZGVyU2VjdGlvbixcblx0XHRcdHVzZVNpbmdsZVRleHRBcmVhRmllbGRBc05vdGVzXG5cdFx0KVxuXHQpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgc3Vic2VjdGlvbnMgYmFzZWQgb24gdGhlIGRlZmluaXRpb24gb2YgdGhlIGN1c3RvbSBoZWFkZXIgZmFjZXQuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBjdXJyZW50IHN1YnNlY3Rpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDdXN0b21IZWFkZXJGYWNldFN1YlNlY3Rpb25zKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pik6IE9iamVjdFBhZ2VTdWJTZWN0aW9uW10ge1xuXHRjb25zdCBjdXN0b21IZWFkZXJGYWNldHM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbU9iamVjdFBhZ2VIZWFkZXJGYWNldD4gPSBnZXRIZWFkZXJGYWNldHNGcm9tTWFuaWZlc3QoXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5nZXRIZWFkZXJGYWNldHMoKVxuXHQpO1xuXHRjb25zdCBhQ3VzdG9tSGVhZGVyRmFjZXRzOiBDdXN0b21PYmplY3RQYWdlSGVhZGVyRmFjZXRbXSA9IFtdO1xuXHRPYmplY3Qua2V5cyhjdXN0b21IZWFkZXJGYWNldHMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuXHRcdGFDdXN0b21IZWFkZXJGYWNldHMucHVzaChjdXN0b21IZWFkZXJGYWNldHNba2V5XSk7XG5cdFx0cmV0dXJuIGFDdXN0b21IZWFkZXJGYWNldHM7XG5cdH0pO1xuXHRjb25zdCBmYWNldHNUb0NyZWF0ZSA9IGFDdXN0b21IZWFkZXJGYWNldHMucmVkdWNlKChmYWNldHNUb0NyZWF0ZTogQ3VzdG9tT2JqZWN0UGFnZUhlYWRlckZhY2V0W10sIGN1c3RvbUhlYWRlckZhY2V0KSA9PiB7XG5cdFx0aWYgKGN1c3RvbUhlYWRlckZhY2V0LnRlbXBsYXRlRWRpdCkge1xuXHRcdFx0ZmFjZXRzVG9DcmVhdGUucHVzaChjdXN0b21IZWFkZXJGYWNldCk7XG5cdFx0fVxuXHRcdHJldHVybiBmYWNldHNUb0NyZWF0ZTtcblx0fSwgW10pO1xuXG5cdHJldHVybiBmYWNldHNUb0NyZWF0ZS5tYXAoKGN1c3RvbUhlYWRlckZhY2V0KSA9PiBjcmVhdGVDdXN0b21IZWFkZXJGYWNldFN1YlNlY3Rpb24oY3VzdG9tSGVhZGVyRmFjZXQpKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgc3Vic2VjdGlvbiBiYXNlZCBvbiBhIGN1c3RvbSBoZWFkZXIgZmFjZXQuXG4gKiBAcGFyYW0gY3VzdG9tSGVhZGVyRmFjZXQgQSBjdXN0b20gaGVhZGVyIGZhY2V0XG4gKiBAcmV0dXJucyBBIGRlZmluaXRpb24gZm9yIGEgc3Vic2VjdGlvblxuICovXG5mdW5jdGlvbiBjcmVhdGVDdXN0b21IZWFkZXJGYWNldFN1YlNlY3Rpb24oY3VzdG9tSGVhZGVyRmFjZXQ6IEN1c3RvbU9iamVjdFBhZ2VIZWFkZXJGYWNldCk6IE9iamVjdFBhZ2VTdWJTZWN0aW9uIHtcblx0Y29uc3Qgc3ViU2VjdGlvbklEID0gZ2V0Q3VzdG9tU3ViU2VjdGlvbklEKGN1c3RvbUhlYWRlckZhY2V0LmtleSk7XG5cdGNvbnN0IHN1YlNlY3Rpb246IFhNTEZyYWdtZW50U3ViU2VjdGlvbiA9IHtcblx0XHRpZDogc3ViU2VjdGlvbklELFxuXHRcdGtleTogY3VzdG9tSGVhZGVyRmFjZXQua2V5LFxuXHRcdHRpdGxlOiBjdXN0b21IZWFkZXJGYWNldC50aXRsZSxcblx0XHR0eXBlOiBTdWJTZWN0aW9uVHlwZS5YTUxGcmFnbWVudCxcblx0XHR0ZW1wbGF0ZTogY3VzdG9tSGVhZGVyRmFjZXQudGVtcGxhdGVFZGl0IHx8IFwiXCIsXG5cdFx0dmlzaWJsZTogY3VzdG9tSGVhZGVyRmFjZXQudmlzaWJsZSxcblx0XHRsZXZlbDogMSxcblx0XHRzaWRlQ29udGVudDogdW5kZWZpbmVkLFxuXHRcdHN0YXNoZWQ6IGN1c3RvbUhlYWRlckZhY2V0LnN0YXNoZWQsXG5cdFx0ZmxleFNldHRpbmdzOiBjdXN0b21IZWFkZXJGYWNldC5mbGV4U2V0dGluZ3MsXG5cdFx0YWN0aW9uczoge30sXG5cdFx0b2JqZWN0UGFnZUxhenlMb2FkZXJFbmFibGVkOiBmYWxzZVxuXHR9O1xuXHRyZXR1cm4gc3ViU2VjdGlvbjtcbn1cblxuY29uc3QgZ2V0U3ViU2VjdGlvbktleSA9IChmYWNldERlZmluaXRpb246IEZhY2V0VHlwZXMsIGZhbGxiYWNrOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuXHRyZXR1cm4gZmFjZXREZWZpbml0aW9uLklEPy50b1N0cmluZygpIHx8IGZhY2V0RGVmaW5pdGlvbi5MYWJlbD8udG9TdHJpbmcoKSB8fCBmYWxsYmFjaztcbn07XG4vKipcbiAqIEFkZHMgRm9ybSBtZW51IGFjdGlvbiB0byBhbGwgZm9ybSBhY3Rpb25zLCByZW1vdmVzIGR1cGxpY2F0ZSBhY3Rpb25zIGFuZCBoaWRkZW4gYWN0aW9ucy5cbiAqIEBwYXJhbSBhY3Rpb25zIFRoZSBhY3Rpb25zIGludm9sdmVkXG4gKiBAcGFyYW0gZmFjZXREZWZpbml0aW9uIFRoZSBkZWZpbml0aW9uIGZvciB0aGUgZmFjZXRcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgVGhlIGZvcm0gbWVudSBhY3Rpb25zXG4gKi9cbmZ1bmN0aW9uIGFkZEZvcm1NZW51QWN0aW9ucyhcblx0YWN0aW9uczogQmFzZUFjdGlvbltdLFxuXHRmYWNldERlZmluaXRpb246IEZhY2V0VHlwZXMsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogQ29tYmluZWRBY3Rpb24ge1xuXHQvLyBhbm5vdGF0aW9uIGFjdGlvbnMgcG9zc2libHkgaGFzIEN1c3RvbUFjdGlvbnMsIHdoaWNoIGFyZSBhZGRlZCBhdCBTdWJzZWN0aW9uLnRzI2NyZWF0ZUZvcm1BY3Rpb25SZWR1Y2VyXG5cdC8vIHRob3NlIGFjdGlvbiBhcmUgaW5jb3JyZWN0IGFuZCBjYXVzZSB1bndhbnRlZCByZXN1bHRzLCBzbyB3ZSBuZWVkIHRvIGNhcmVmdWxseSByZW1vdmUgaW5jb3JyZWN0IG9uZXMgaGVyZVxuXHRmb3IgKGxldCByZXZlcnNlSW5kZXggPSBhY3Rpb25zLmxlbmd0aCAtIDE7IHJldmVyc2VJbmRleCA+PSAwOyByZXZlcnNlSW5kZXgtLSkge1xuXHRcdGlmIChcblx0XHRcdGFjdGlvbnNbcmV2ZXJzZUluZGV4XS5pZD8uc3RhcnRzV2l0aChcIkN1c3RvbUFjdGlvbjo6XCIpICYmXG5cdFx0XHQoYWN0aW9uc1tyZXZlcnNlSW5kZXhdLmtleS5zdGFydHNXaXRoKFwiRGF0YUZpZWxkRm9yQWN0aW9uOjpcIikgfHxcblx0XHRcdFx0YWN0aW9uc1tyZXZlcnNlSW5kZXhdLmtleS5zdGFydHNXaXRoKFwiRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uOjpcIikpXG5cdFx0KSB7XG5cdFx0XHRhY3Rpb25zLnNwbGljZShyZXZlcnNlSW5kZXgsIDEpO1xuXHRcdH1cblx0fVxuXHRjb25zdCBoaWRkZW5BY3Rpb25zOiBCYXNlQWN0aW9uW10gPSBnZXRGb3JtSGlkZGVuQWN0aW9ucyhmYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpIHx8IFtdLFxuXHRcdGFjdGlvbk92ZXJ3cml0ZUNvbmZpZzogT3ZlcnJpZGVUeXBlQWN0aW9uID0ge1xuXHRcdFx0ZW5hYmxlZDogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRcdHZpc2libGU6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0XHRjb21tYW5kOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdFx0cG9zaXRpb246IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0XHRtZW51OiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdFx0cHJpb3JpdHk6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0XHRncm91cDogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZVxuXHRcdH0sXG5cdFx0Zm9ybUFjdGlvbnM6IENvbmZpZ3VyYWJsZVJlY29yZDxNYW5pZmVzdEFjdGlvbj4gPSBnZXRGb3JtQWN0aW9ucyhmYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdC8vIDEuIEdldCBhY3Rpb25zIGZyb20gYW5ub3RhdGlvbnMgLT4gYWN0aW9ucyBhcmUgcGFzc2VkIHRvIHRoaXMgbWV0aG9kXG5cdFx0Ly8gMi4gR2V0IGFjdGlvbnMgZnJvbSBtYW5pZmVzdFxuXHRcdG1hbmlmZXN0QWN0aW9ucyA9IGdldEFjdGlvbnNGcm9tTWFuaWZlc3QoZm9ybUFjdGlvbnMsIGNvbnZlcnRlckNvbnRleHQsIGFjdGlvbnMsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBoaWRkZW5BY3Rpb25zKSxcblx0XHQvLyAzLiBHZXQgYWxsIGFubm90YXRpb24gbWVudSBpdGVtc1xuXHRcdGFubm90YXRpb25NZW51QWN0aW9uSXRlbXMgPSBnZXRBbm5vdGF0aW9uTWVudUFjdGlvbkl0ZW1zKGFjdGlvbnMpLFxuXHRcdC8vIDQuIEZpbmQgbWFuaWZlc3QgYWN0aW9ucyB3aGljaCBvdmVycmlkZSBhbnkgYW5ub3RhdGlvbiBtZW51IGl0ZW1zXG5cdFx0bWF0Y2hpbmdNYW5pZmVzdEFjdGlvbnMgPSBnZXRNYXRjaGluZ01hbmlmZXN0QWN0aW9uKGFubm90YXRpb25NZW51QWN0aW9uSXRlbXMsIG1hbmlmZXN0QWN0aW9ucy5hY3Rpb25zKSxcblx0XHQvLyA1LiBHZXQgb3ZlcnJpZGRlbiBhbm5vdGF0aW9uIG1lbnUgaXRlbXNcblx0XHRvdmVyd3JpdHRlbk1lbnVBY3Rpb25JdGVtcyA9IGluc2VydEN1c3RvbUVsZW1lbnRzKFxuXHRcdFx0YW5ub3RhdGlvbk1lbnVBY3Rpb25JdGVtcyxcblx0XHRcdG1hdGNoaW5nTWFuaWZlc3RBY3Rpb25zLFxuXHRcdFx0YWN0aW9uT3ZlcndyaXRlQ29uZmlnXG5cdFx0KSBhcyBDdXN0b21BY3Rpb25bXTtcblx0Ly8gSWYgdGhlcmUgaXMgYSBtYW5pZmVzdCBhY3Rpb24gZGVmaW5lZCBmb3IgYSBuZWlnaGJvdXJpbmcgcmVmZXJlbmNlIGZhY2V0LCBpdCB3b3VsZCBub3QgYmUgcGFydCBvZiBtYW5pZmVzdCBhY3Rpb25zIGhlcmVcblx0Ly8gSW4gdGhpcyBmb3ItbG9vcCwgZW5zdXJpbmcgYSBwdXJlIG1hbmlmZXN0IGFjdGlvbiBjb21pbmcgZnJvbSBhbm90aGVyIHJlZmVyZW5jZSBmYWNldCBpcyBub3QgbG9zdFxuXHRmb3IgKGxldCByZXZlcnNlSW5kZXggPSBhY3Rpb25zLmxlbmd0aCAtIDE7IHJldmVyc2VJbmRleCA+PSAwOyByZXZlcnNlSW5kZXgtLSkge1xuXHRcdGlmIChhY3Rpb25zW3JldmVyc2VJbmRleF0uaWQ/LnN0YXJ0c1dpdGgoXCJDdXN0b21BY3Rpb246OlwiKSkge1xuXHRcdFx0Zm9yIChjb25zdCBtYW5pZmVzdEFjdGlvbiBpbiBtYW5pZmVzdEFjdGlvbnMuYWN0aW9ucykge1xuXHRcdFx0XHRpZiAobWFuaWZlc3RBY3Rpb24gPT09IGFjdGlvbnNbcmV2ZXJzZUluZGV4XS5rZXkpIHtcblx0XHRcdFx0XHRhY3Rpb25zLnNwbGljZShyZXZlcnNlSW5kZXgsIDEpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdC8vIDYuIE92ZXJyaWRlIGFsbCBhY3Rpb25zXG5cdGxldCBmb3JtQWxsQWN0aW9ucyA9IGluc2VydEN1c3RvbUVsZW1lbnRzKGFjdGlvbnMsIG1hbmlmZXN0QWN0aW9ucy5hY3Rpb25zLCBhY3Rpb25PdmVyd3JpdGVDb25maWcpIGFzIEN1c3RvbUFjdGlvbltdO1xuXHQvLyA3LiBSZXBsYWNlIG9yaWdpbmFsIG1lbnUgaXRlbXMgd2l0aCB0aGVpciBjb3JyZXNwb25kaW5nIG92ZXJyaWRkZW4gbWVudSBpdGVtc1xuXHRwcmVwYXJlTWVudUFjdGlvbnMoZm9ybUFsbEFjdGlvbnMsIG92ZXJ3cml0dGVuTWVudUFjdGlvbkl0ZW1zKTtcblx0Ly8gOC4gUmVtb3ZlIGR1cGxpY2F0ZSBhY3Rpb25zIHdoaWNoIGFyZSBtZW51IGl0ZW1zXG5cdGZvcm1BbGxBY3Rpb25zID0gcmVtb3ZlRHVwbGljYXRlQWN0aW9ucyhmb3JtQWxsQWN0aW9ucyk7XG5cdC8vIDkuIEhpZGUgbWVudXMgd2hlcmUgYWxsIG1lbnUgaXRlbXMgYXJlIGhpZGRlblxuXHRmb3JtQWxsQWN0aW9ucyA9IGdldFZpc2liaWxpdHlFbmFibGVtZW50TWVudUFjdGlvbnMoZm9ybUFsbEFjdGlvbnMpO1xuXHQvLyAxMC4gQXBwbHkgcHJpbWFyeSBhY3Rpb24gb3ZlcmZsb3cgcHJvdGVjdGlvblxuXHRmb3JtQWxsQWN0aW9ucyA9IEFjdGlvblV0aWxpdGllcy5lbnN1cmVQcmltYXJ5QWN0aW9uTmV2ZXJPdmVyZmxvd3MoZm9ybUFsbEFjdGlvbnMpIGFzIEN1c3RvbUFjdGlvbltdO1xuXHQvLyAxMS4gKE9ubHkgZm9yIHRoaXMgc3Vic2VjdGlvbiBVSSBhcmVhKSBkZWZhdWx0QWN0aW9uIG9mIGEgbWVudSBtdXN0IGJlIG9mIHR5cGUgQWN0aW9uVHlwZS5EZWZhdWx0XG5cdGZvcm1BbGxBY3Rpb25zLmZvckVhY2goKGFjdGlvbikgPT4ge1xuXHRcdGlmIChhY3Rpb24udHlwZSA9PT0gQWN0aW9uVHlwZS5NZW51ICYmICEhYWN0aW9uLmRlZmF1bHRBY3Rpb24pIHtcblx0XHRcdChhY3Rpb24uZGVmYXVsdEFjdGlvbiBhcyBDdXN0b21BY3Rpb24pLnR5cGUgPSBBY3Rpb25UeXBlLkRlZmF1bHQ7XG5cdFx0fVxuXHR9KTtcblxuXHRyZXR1cm4ge1xuXHRcdGFjdGlvbnM6IGZvcm1BbGxBY3Rpb25zID8/IGFjdGlvbnMsXG5cdFx0Y29tbWFuZEFjdGlvbnM6IG1hbmlmZXN0QWN0aW9ucy5jb21tYW5kQWN0aW9uc1xuXHR9O1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgYWN0aW9uIGZvcm0gYSBmYWNldC5cbiAqIEBwYXJhbSBmYWNldERlZmluaXRpb25cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgY3VycmVudCBmYWNldCBhY3Rpb25zXG4gKi9cbmZ1bmN0aW9uIGdldEZhY2V0QWN0aW9ucyhmYWNldERlZmluaXRpb246IEZhY2V0VHlwZXMsIGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pik6IENvbWJpbmVkQWN0aW9uIHtcblx0bGV0IGFjdGlvbnM6IEJhc2VBY3Rpb25bXSA9IFtdO1xuXHRzd2l0Y2ggKGZhY2V0RGVmaW5pdGlvbi4kVHlwZSkge1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuQ29sbGVjdGlvbkZhY2V0OlxuXHRcdFx0YWN0aW9ucyA9IChcblx0XHRcdFx0ZmFjZXREZWZpbml0aW9uLkZhY2V0cy5maWx0ZXIoKHN1YkZhY2V0RGVmaW5pdGlvbikgPT4gaXNSZWZlcmVuY2VGYWNldChzdWJGYWNldERlZmluaXRpb24pKSBhcyBSZWZlcmVuY2VGYWNldFR5cGVzW11cblx0XHRcdCkucmVkdWNlKFxuXHRcdFx0XHQoYWN0aW9uUmVkdWNlcjogQmFzZUFjdGlvbltdLCByZWZlcmVuY2VGYWNldCkgPT4gY3JlYXRlRm9ybUFjdGlvblJlZHVjZXIoYWN0aW9uUmVkdWNlciwgcmVmZXJlbmNlRmFjZXQsIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdFx0XHRbXVxuXHRcdFx0KTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuUmVmZXJlbmNlRmFjZXQ6XG5cdFx0XHRhY3Rpb25zID0gY3JlYXRlRm9ybUFjdGlvblJlZHVjZXIoW10sIGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0YnJlYWs7XG5cdH1cblx0cmV0dXJuIGFkZEZvcm1NZW51QWN0aW9ucyhhY3Rpb25zLCBmYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSBidXR0b24gdHlwZSBiYXNlZCBvbiBAVUkuRW1waGFzaXplZCBhbm5vdGF0aW9uLlxuICogQHBhcmFtIGVtcGhhc2l6ZWQgRW1waGFzaXplZCBhbm5vdGF0aW9uIHZhbHVlLlxuICogQHJldHVybnMgVGhlIGJ1dHRvbiB0eXBlIG9yIHBhdGggYmFzZWQgZXhwcmVzc2lvbi5cbiAqL1xuZnVuY3Rpb24gZ2V0QnV0dG9uVHlwZShlbXBoYXNpemVkOiBFbXBoYXNpemVkIHwgdW5kZWZpbmVkKTogQnV0dG9uVHlwZSB7XG5cdC8vIEVtcGhhc2l6ZWQgaXMgYSBib29sZWFuIHNvIGlmIGl0J3MgZXF1YWwgdG8gdHJ1ZSB3ZSBzaG93IHRoZSBidXR0b24gYXMgR2hvc3QsIG90aGVyd2lzZSBhcyBUcmFuc3BhcmVudFxuXHRjb25zdCBidXR0b25UeXBlQ29uZGl0aW9uID0gZXF1YWwoZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGVtcGhhc2l6ZWQpLCB0cnVlKTtcblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGlmRWxzZShidXR0b25UeXBlQ29uZGl0aW9uLCBCdXR0b25UeXBlLkdob3N0LCBCdXR0b25UeXBlLlRyYW5zcGFyZW50KSkgYXMgQnV0dG9uVHlwZTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBzdWJzZWN0aW9uIGJhc2VkIG9uIEZhY2V0VHlwZXMuXG4gKiBAcGFyYW0gZmFjZXREZWZpbml0aW9uXG4gKiBAcGFyYW0gZmFjZXRzVG9DcmVhdGVcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gbGV2ZWxcbiAqIEBwYXJhbSBoYXNTaW5nbGVDb250ZW50XG4gKiBAcGFyYW0gaXNIZWFkZXJTZWN0aW9uXG4gKiBAcGFyYW0gdXNlU2luZ2xlVGV4dEFyZWFGaWVsZEFzTm90ZXMgSWYgdGhlIG9ubHkgZmllbGQgd2l0aGluIGEgZm9ybSBjb250YWluZXIgaXMgYSB0ZXh0LWFyZWEgZmllbGQsIHRoZSBsYWJlbCBpcyBoaWRkZW5cbiAqIEByZXR1cm5zIEEgc3Vic2VjdGlvbiBkZWZpbml0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTdWJTZWN0aW9uKFxuXHRmYWNldERlZmluaXRpb246IEZhY2V0VHlwZXMsXG5cdGZhY2V0c1RvQ3JlYXRlOiBGYWNldFR5cGVzW10sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0bGV2ZWw6IG51bWJlcixcblx0aGFzU2luZ2xlQ29udGVudDogYm9vbGVhbixcblx0aXNIZWFkZXJTZWN0aW9uPzogYm9vbGVhbixcblx0dXNlU2luZ2xlVGV4dEFyZWFGaWVsZEFzTm90ZXM/OiBib29sZWFuXG4pOiBPYmplY3RQYWdlU3ViU2VjdGlvbiB7XG5cdGNvbnN0IHN1YlNlY3Rpb25JRCA9IGdldFN1YlNlY3Rpb25JRChmYWNldERlZmluaXRpb24pO1xuXHRjb25zdCBoaWRkZW5Bbm5vdGF0aW9uID0gZmFjZXREZWZpbml0aW9uLmFubm90YXRpb25zPy5VST8uSGlkZGVuO1xuXHRjb25zdCBpc1Zpc2libGVFeHByZXNzaW9uID0gbm90KFxuXHRcdGVxdWFsKFxuXHRcdFx0dHJ1ZSxcblx0XHRcdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihoaWRkZW5Bbm5vdGF0aW9uLCBbXSwgZmFsc2UsIChwYXRoOiBzdHJpbmcpID0+XG5cdFx0XHRcdHNpbmdsZXRvblBhdGhWaXNpdG9yKHBhdGgsIGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVkVHlwZXMoKSwgW10pXG5cdFx0XHQpXG5cdFx0KVxuXHQpO1xuXHRjb25zdCBpc1Zpc2liaWxpdHlEeW5hbWljID0gIWlzQ29uc3RhbnQoaXNWaXNpYmxlRXhwcmVzc2lvbikgJiYgIWlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKGhpZGRlbkFubm90YXRpb24pO1xuXHRjb25zdCB0aXRsZSA9IGZhY2V0RGVmaW5pdGlvbi5MYWJlbCAhPT0gdW5kZWZpbmVkID8gY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGZhY2V0RGVmaW5pdGlvbi5MYWJlbCkpIDogdW5kZWZpbmVkO1xuXHRjb25zdCBzdWJTZWN0aW9uOiBCYXNlU3ViU2VjdGlvbiA9IHtcblx0XHRpZDogc3ViU2VjdGlvbklELFxuXHRcdGtleTogZ2V0U3ViU2VjdGlvbktleShmYWNldERlZmluaXRpb24sIHN1YlNlY3Rpb25JRCksXG5cdFx0dGl0bGU6IHRpdGxlLFxuXHRcdHR5cGU6IFN1YlNlY3Rpb25UeXBlLlVua25vd24sXG5cdFx0YW5ub3RhdGlvblBhdGg6IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChmYWNldERlZmluaXRpb24uZnVsbHlRdWFsaWZpZWROYW1lKSxcblx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihpc1Zpc2libGVFeHByZXNzaW9uKSxcblx0XHRpc1Zpc2liaWxpdHlEeW5hbWljOiBpc1Zpc2liaWxpdHlEeW5hbWljLFxuXHRcdGxldmVsOiBsZXZlbCxcblx0XHRzaWRlQ29udGVudDogdW5kZWZpbmVkLFxuXHRcdG9iamVjdFBhZ2VMYXp5TG9hZGVyRW5hYmxlZDogY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5nZXRFbmFibGVMYXp5TG9hZGluZygpXG5cdH07XG5cdGlmIChpc0hlYWRlclNlY3Rpb24pIHtcblx0XHRzdWJTZWN0aW9uLnN0YXNoZWQgPSBnZXRTdGFzaGVkU2V0dGluZ3NGb3JIZWFkZXJGYWNldChmYWNldERlZmluaXRpb24sIGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0c3ViU2VjdGlvbi5mbGV4U2V0dGluZ3MgPSB7XG5cdFx0XHRkZXNpZ250aW1lOiBnZXREZXNpZ25UaW1lTWV0YWRhdGFTZXR0aW5nc0ZvckhlYWRlckZhY2V0KGZhY2V0RGVmaW5pdGlvbiwgZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KVxuXHRcdH07XG5cdH1cblx0bGV0IHVuc3VwcG9ydGVkVGV4dCA9IFwiXCI7XG5cdGxldmVsKys7XG5cdHN3aXRjaCAoZmFjZXREZWZpbml0aW9uLiRUeXBlKSB7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5Db2xsZWN0aW9uRmFjZXQ6XG5cdFx0XHRjb25zdCBmYWNldHMgPSBmYWNldERlZmluaXRpb24uRmFjZXRzO1xuXG5cdFx0XHQvLyBGaWx0ZXIgZm9yIGFsbCBmYWNldHMgb2YgdGhpcyBzdWJzZWN0aW9uIHRoYXQgYXJlIHJlZmVycmluZyB0byBhbiBhbm5vdGF0aW9uIGRlc2NyaWJpbmcgYSB2aXN1YWxpemF0aW9uIChlLmcuIHRhYmxlIG9yIGNoYXJ0KVxuXHRcdFx0Y29uc3QgdmlzdWFsaXphdGlvbkZhY2V0cyA9IGZhY2V0c1xuXHRcdFx0XHQubWFwKChmYWNldCwgaW5kZXgpID0+ICh7IGluZGV4LCBmYWNldCB9KSkgLy8gUmVtZW1iZXIgdGhlIGluZGV4IGFzc2lnbmVkIHRvIGVhY2ggZmFjZXRcblx0XHRcdFx0LmZpbHRlcigoeyBmYWNldCB9KSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIGlzUmVmZXJlbmNlRmFjZXQoZmFjZXQpICYmIGZhY2V0LlRhcmdldC4kdGFyZ2V0ICYmIHZpc3VhbGl6YXRpb25UZXJtcy5pbmNsdWRlcyhmYWNldC5UYXJnZXQuJHRhcmdldC50ZXJtKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdC8vIEZpbHRlciBvdXQgYWxsIHZpc3VhbGl6YXRpb24gZmFjZXRzOyBcInZpc3VhbGl6YXRpb25GYWNldHNcIiBhbmQgXCJub25WaXN1YWxpemF0aW9uRmFjZXRzXCIgYXJlIGRpc2pvaW50XG5cdFx0XHRjb25zdCBub25WaXN1YWxpemF0aW9uRmFjZXRzID0gZmFjZXRzLmZpbHRlcihcblx0XHRcdFx0KGZhY2V0KSA9PiAhdmlzdWFsaXphdGlvbkZhY2V0cy5maW5kKCh2aXN1YWxpemF0aW9uKSA9PiB2aXN1YWxpemF0aW9uLmZhY2V0ID09PSBmYWNldClcblx0XHRcdCk7XG5cblx0XHRcdGlmICh2aXN1YWxpemF0aW9uRmFjZXRzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Ly8gQ29sbGVjdGlvbkZhY2V0cyB3aXRoIHZpc3VhbGl6YXRpb25zIG11c3QgYmUgaGFuZGxlZCBzZXBhcmF0ZWx5IGFzIHRoZXkgY2Fubm90IGJlIGluY2x1ZGVkIGluIGZvcm1zXG5cdFx0XHRcdGNvbnN0IHZpc3VhbGl6YXRpb25Db250ZW50OiBPYmplY3RQYWdlU3ViU2VjdGlvbltdID0gW107XG5cdFx0XHRcdGNvbnN0IGZvcm1Db250ZW50OiBPYmplY3RQYWdlU3ViU2VjdGlvbltdID0gW107XG5cdFx0XHRcdGNvbnN0IG1peGVkQ29udGVudDogT2JqZWN0UGFnZVN1YlNlY3Rpb25bXSA9IFtdO1xuXG5cdFx0XHRcdC8vIENyZWF0ZSBlYWNoIHZpc3VhbGl6YXRpb24gZmFjZXQgYXMgaWYgaXQgd2FzIGl0cyBvd24gc3Vic2VjdGlvbiAodmlhIHJlY3Vyc2lvbiksIGFuZCBrZWVwIHRoZWlyIHJlbGF0aXZlIG9yZGVyaW5nXG5cdFx0XHRcdGZvciAoY29uc3QgeyBmYWNldCB9IG9mIHZpc3VhbGl6YXRpb25GYWNldHMpIHtcblx0XHRcdFx0XHR2aXN1YWxpemF0aW9uQ29udGVudC5wdXNoKGNyZWF0ZVN1YlNlY3Rpb24oZmFjZXQsIFtdLCBjb252ZXJ0ZXJDb250ZXh0LCBsZXZlbCwgdHJ1ZSwgaXNIZWFkZXJTZWN0aW9uKSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAobm9uVmlzdWFsaXphdGlvbkZhY2V0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0Ly8gVGhpcyBzdWJzZWN0aW9uIGluY2x1ZGVzIHZpc3VhbGl6YXRpb25zIGFuZCBvdGhlciBjb250ZW50LCBzbyBpdCBpcyBhIFwiTWl4ZWRcIiBzdWJzZWN0aW9uXG5cdFx0XHRcdFx0TG9nLndhcm5pbmcoXG5cdFx0XHRcdFx0XHRgV2FybmluZzogQ29sbGVjdGlvbkZhY2V0ICcke2ZhY2V0RGVmaW5pdGlvbi5JRH0nIGluY2x1ZGVzIGEgY29tYmluYXRpb24gb2YgZWl0aGVyIGEgY2hhcnQgb3IgYSB0YWJsZSBhbmQgb3RoZXIgY29udGVudC4gVGhpcyBjYW4gbGVhZCB0byByZW5kZXJpbmcgaXNzdWVzLiBDb25zaWRlciBtb3ZpbmcgdGhlIGNoYXJ0IG9yIHRhYmxlIGludG8gYSBzZXBhcmF0ZSBDb2xsZWN0aW9uRmFjZXQuYFxuXHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRjb25zdCBmYWtlRm9ybUZhY2V0ID0geyAuLi5mYWNldERlZmluaXRpb24gfTtcblx0XHRcdFx0XHRmYWtlRm9ybUZhY2V0LkZhY2V0cyA9IG5vblZpc3VhbGl6YXRpb25GYWNldHM7XG5cdFx0XHRcdFx0Ly8gQ3JlYXRlIGEgam9pbmVkIGZvcm0gb2YgYWxsIGZhY2V0cyB0aGF0IGFyZSBub3QgcmVmZXJyaW5nIHRvIHZpc3VhbGl6YXRpb25zXG5cdFx0XHRcdFx0Zm9ybUNvbnRlbnQucHVzaChjcmVhdGVTdWJTZWN0aW9uKGZha2VGb3JtRmFjZXQsIFtdLCBjb252ZXJ0ZXJDb250ZXh0LCBsZXZlbCwgaGFzU2luZ2xlQ29udGVudCwgaXNIZWFkZXJTZWN0aW9uKSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBNZXJnZSB0aGUgdmlzdWFsaXphdGlvbiBjb250ZW50IHdpdGggdGhlIGZvcm0gY29udGVudFxuXHRcdFx0XHRpZiAodmlzdWFsaXphdGlvbkZhY2V0cy5maW5kKCh7IGluZGV4IH0pID0+IGluZGV4ID09PSAwKSkge1xuXHRcdFx0XHRcdC8vIElmIHRoZSBmaXJzdCBmYWNldCBpcyBhIHZpc3VhbGl6YXRpb24sIGRpc3BsYXkgdGhlIHZpc3VhbGl6YXRpb25zIGZpcnN0XG5cdFx0XHRcdFx0bWl4ZWRDb250ZW50LnB1c2goLi4udmlzdWFsaXphdGlvbkNvbnRlbnQpO1xuXHRcdFx0XHRcdG1peGVkQ29udGVudC5wdXNoKC4uLmZvcm1Db250ZW50KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBPdGhlcndpc2UsIGRpc3BsYXkgdGhlIGZvcm0gZmlyc3Rcblx0XHRcdFx0XHRtaXhlZENvbnRlbnQucHVzaCguLi5mb3JtQ29udGVudCk7XG5cdFx0XHRcdFx0bWl4ZWRDb250ZW50LnB1c2goLi4udmlzdWFsaXphdGlvbkNvbnRlbnQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgbWl4ZWRTdWJTZWN0aW9uOiBNaXhlZFN1YlNlY3Rpb24gPSB7XG5cdFx0XHRcdFx0Li4uc3ViU2VjdGlvbixcblx0XHRcdFx0XHR0eXBlOiBTdWJTZWN0aW9uVHlwZS5NaXhlZCxcblx0XHRcdFx0XHRsZXZlbDogbGV2ZWwsXG5cdFx0XHRcdFx0Y29udGVudDogbWl4ZWRDb250ZW50XG5cdFx0XHRcdH07XG5cdFx0XHRcdHJldHVybiBtaXhlZFN1YlNlY3Rpb247XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBUaGlzIENvbGxlY3Rpb25GYWNldCBvbmx5IGluY2x1ZGVzIGNvbnRlbnQgdGhhdCBjYW4gYmUgcmVuZGVyZWQgaW4gYSBtZXJnZWQgZm9ybVxuXHRcdFx0XHRjb25zdCBmYWNldEFjdGlvbnMgPSBnZXRGYWNldEFjdGlvbnMoZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdFx0XHRmb3JtQ29sbGVjdGlvblN1YlNlY3Rpb246IEZvcm1TdWJTZWN0aW9uID0ge1xuXHRcdFx0XHRcdFx0Li4uc3ViU2VjdGlvbixcblx0XHRcdFx0XHRcdHR5cGU6IFN1YlNlY3Rpb25UeXBlLkZvcm0sXG5cdFx0XHRcdFx0XHRmb3JtRGVmaW5pdGlvbjogY3JlYXRlRm9ybURlZmluaXRpb24oXG5cdFx0XHRcdFx0XHRcdGZhY2V0RGVmaW5pdGlvbixcblx0XHRcdFx0XHRcdFx0Y29tcGlsZUV4cHJlc3Npb24oaXNWaXNpYmxlRXhwcmVzc2lvbiksXG5cdFx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdFx0XHRcdGZhY2V0QWN0aW9ucy5hY3Rpb25zLFxuXHRcdFx0XHRcdFx0XHR7IHVzZVNpbmdsZVRleHRBcmVhRmllbGRBc05vdGVzIH1cblx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHRsZXZlbDogbGV2ZWwsXG5cdFx0XHRcdFx0XHRhY3Rpb25zOiBmYWNldEFjdGlvbnMuYWN0aW9ucy5maWx0ZXIoKGFjdGlvbikgPT4gYWN0aW9uLmZhY2V0TmFtZSA9PT0gdW5kZWZpbmVkKSxcblx0XHRcdFx0XHRcdGNvbW1hbmRBY3Rpb25zOiBmYWNldEFjdGlvbnMuY29tbWFuZEFjdGlvbnNcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRyZXR1cm4gZm9ybUNvbGxlY3Rpb25TdWJTZWN0aW9uO1xuXHRcdFx0fVxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuUmVmZXJlbmNlRmFjZXQ6XG5cdFx0XHRpZiAoIWZhY2V0RGVmaW5pdGlvbi5UYXJnZXQuJHRhcmdldCkge1xuXHRcdFx0XHR1bnN1cHBvcnRlZFRleHQgPSBgVW5hYmxlIHRvIGZpbmQgYW5ub3RhdGlvblBhdGggJHtmYWNldERlZmluaXRpb24uVGFyZ2V0LnZhbHVlfWA7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzd2l0Y2ggKGZhY2V0RGVmaW5pdGlvbi5UYXJnZXQuJHRhcmdldC50ZXJtKSB7XG5cdFx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5MaW5lSXRlbTpcblx0XHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLkNoYXJ0OlxuXHRcdFx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVGVybXMuUHJlc2VudGF0aW9uVmFyaWFudDpcblx0XHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQ6XG5cdFx0XHRcdFx0XHRjb25zdCBwcmVzZW50YXRpb24gPSBnZXREYXRhVmlzdWFsaXphdGlvbkNvbmZpZ3VyYXRpb24oZmFjZXREZWZpbml0aW9uLlRhcmdldC52YWx1ZSwgY29udmVydGVyQ29udGV4dCwge1xuXHRcdFx0XHRcdFx0XHRpc0NvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW50OiBnZXRDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFuY2UoXG5cdFx0XHRcdFx0XHRcdFx0ZmFjZXREZWZpbml0aW9uLFxuXHRcdFx0XHRcdFx0XHRcdGZhY2V0c1RvQ3JlYXRlLFxuXHRcdFx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFx0ZG9Ob3RDaGVja0FwcGx5U3VwcG9ydGVkOiBpc0hlYWRlclNlY3Rpb24sXG5cdFx0XHRcdFx0XHRcdHNob3VsZENyZWF0ZVRlbXBsYXRlQ2hhcnRWaXN1YWxpemF0aW9uOiB0cnVlXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdGNvbnN0IHN1YlNlY3Rpb25UaXRsZTogc3RyaW5nID0gc3ViU2VjdGlvbi50aXRsZSA/IHN1YlNlY3Rpb24udGl0bGUgOiBcIlwiO1xuXHRcdFx0XHRcdFx0Y29uc3QgY29udHJvbFRpdGxlID1cblx0XHRcdFx0XHRcdFx0KHByZXNlbnRhdGlvbi52aXN1YWxpemF0aW9uc1swXSBhcyBUYWJsZVZpc3VhbGl6YXRpb24pPy5hbm5vdGF0aW9uPy50aXRsZSB8fFxuXHRcdFx0XHRcdFx0XHQocHJlc2VudGF0aW9uLnZpc3VhbGl6YXRpb25zWzBdIGFzIENoYXJ0VmlzdWFsaXphdGlvbik/LnRpdGxlO1xuXHRcdFx0XHRcdFx0Y29uc3QgaXNQYXJ0T2ZQcmV2aWV3ID0gZmFjZXREZWZpbml0aW9uLmFubm90YXRpb25zPy5VST8uUGFydE9mUHJldmlldz8udmFsdWVPZigpICE9PSBmYWxzZTtcblx0XHRcdFx0XHRcdGNvbnN0IHNob3dTdWJTZWN0aW9uVGl0bGUgPSBnZXRTaG93U3ViU2VjdGlvblRpdGxlKGNvbnRyb2xUaXRsZSA/PyBcIlwiLCBzdWJTZWN0aW9uVGl0bGUsIGhhc1NpbmdsZUNvbnRlbnQpO1xuXG5cdFx0XHRcdFx0XHQvLyBFaXRoZXIgY2FsY3VsYXRlIHRoZSB0aXRsZSB2aXNpYmlsaXR5IHN0YXRpY2FsbHkgb3IgZHluYW1pY2FsbHlcblx0XHRcdFx0XHRcdC8vIEFkZGl0aW9uYWxseSB0byBjaGVja2luZyB3aGV0aGVyIGEgdGl0bGUgZXhpc3RzLFxuXHRcdFx0XHRcdFx0Ly8gd2UgYWxzbyBuZWVkIHRvIGNoZWNrIHRoYXQgdGhlIGZhY2V0IHRpdGxlIGlzIG5vdCB0aGUgc2FtZSBhcyB0aGUgY29udHJvbCAoaS5lLiB2aXN1YWxpemF0aW9uKSB0aXRsZTtcblx0XHRcdFx0XHRcdC8vIHRoaXMgaXMgZG9uZSBieSBpbmNsdWRpbmcgXCJzaG93U3ViU2VjdGlvblRpdGxlXCIgaW4gdGhlIGFuZCBleHByZXNzaW9uXG5cdFx0XHRcdFx0XHRjb25zdCBkYXRhVmlzdWFsaXphdGlvblRpdGxlVmlzaWJsZSA9IGlmRWxzZShcblx0XHRcdFx0XHRcdFx0aXNWaXNpYmlsaXR5RHluYW1pYyxcblx0XHRcdFx0XHRcdFx0YW5kKGlzVmlzaWJsZUV4cHJlc3Npb24sIG5vdChlcXVhbCh0aXRsZSwgXCJ1bmRlZmluZWRcIikpLCBzaG93U3ViU2VjdGlvblRpdGxlKSxcblx0XHRcdFx0XHRcdFx0YW5kKFxuXHRcdFx0XHRcdFx0XHRcdGNvbXBpbGVFeHByZXNzaW9uKGlzVmlzaWJsZUV4cHJlc3Npb24pICE9PSB1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRcdFx0dGl0bGUgIT09IFwidW5kZWZpbmVkXCIsXG5cdFx0XHRcdFx0XHRcdFx0dGl0bGUgIT09IHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdFx0XHRpc1Zpc2libGVFeHByZXNzaW9uLFxuXHRcdFx0XHRcdFx0XHRcdHNob3dTdWJTZWN0aW9uVGl0bGVcblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0Y29uc3QgZGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uOiBEYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb24gPSB7XG5cdFx0XHRcdFx0XHRcdC4uLnN1YlNlY3Rpb24sXG5cdFx0XHRcdFx0XHRcdHR5cGU6IFN1YlNlY3Rpb25UeXBlLkRhdGFWaXN1YWxpemF0aW9uLFxuXHRcdFx0XHRcdFx0XHRsZXZlbDogbGV2ZWwsXG5cdFx0XHRcdFx0XHRcdHByZXNlbnRhdGlvbjogcHJlc2VudGF0aW9uLFxuXHRcdFx0XHRcdFx0XHRpc1BhcnRPZlByZXZpZXcsXG5cdFx0XHRcdFx0XHRcdHNob3dTdWJTZWN0aW9uVGl0bGU6IGNvbXBpbGVFeHByZXNzaW9uKHNob3dTdWJTZWN0aW9uVGl0bGUpLCAvLyBUaGlzIGlzIHVzZWQgb24gdGhlIE9iamVjdFBhZ2VTdWJTZWN0aW9uXG5cdFx0XHRcdFx0XHRcdGRhdGFWaXN1YWxpemF0aW9uVGl0bGVWaXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihkYXRhVmlzdWFsaXphdGlvblRpdGxlVmlzaWJsZSkgLy8gVGhpcyBpcyB1c2VkIHRvIGhpZGUgdGhlIFRpdGxlIGNvbnRyb2wgYWJvdmUgZGF0YSB2aXN1YWxpemF0aW9uc1xuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdHJldHVybiBkYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb247XG5cblx0XHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLkZpZWxkR3JvdXA6XG5cdFx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5JZGVudGlmaWNhdGlvbjpcblx0XHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLkRhdGFQb2ludDpcblx0XHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLlN0YXR1c0luZm86XG5cdFx0XHRcdFx0Y2FzZSBDb21tdW5pY2F0aW9uQW5ub3RhdGlvblRlcm1zLkNvbnRhY3Q6XG5cdFx0XHRcdFx0XHQvLyBBbGwgdGhvc2UgZWxlbWVudCBiZWxvbmcgdG8gYSBmcm9tIGZhY2V0XG5cdFx0XHRcdFx0XHRjb25zdCBmYWNldEFjdGlvbnMgPSBnZXRGYWNldEFjdGlvbnMoZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdFx0XHRcdFx0Zm9ybUVsZW1lbnRTdWJTZWN0aW9uOiBGb3JtU3ViU2VjdGlvbiA9IHtcblx0XHRcdFx0XHRcdFx0XHQuLi5zdWJTZWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRcdHR5cGU6IFN1YlNlY3Rpb25UeXBlLkZvcm0sXG5cdFx0XHRcdFx0XHRcdFx0bGV2ZWw6IGxldmVsLFxuXHRcdFx0XHRcdFx0XHRcdGZvcm1EZWZpbml0aW9uOiBjcmVhdGVGb3JtRGVmaW5pdGlvbihcblx0XHRcdFx0XHRcdFx0XHRcdGZhY2V0RGVmaW5pdGlvbixcblx0XHRcdFx0XHRcdFx0XHRcdGNvbXBpbGVFeHByZXNzaW9uKGlzVmlzaWJsZUV4cHJlc3Npb24pLFxuXHRcdFx0XHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRcdFx0XHRcdGZhY2V0QWN0aW9ucy5hY3Rpb25zLFxuXHRcdFx0XHRcdFx0XHRcdFx0eyB1c2VTaW5nbGVUZXh0QXJlYUZpZWxkQXNOb3RlcyB9XG5cdFx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFx0XHRhY3Rpb25zOiBmYWNldEFjdGlvbnMuYWN0aW9ucy5maWx0ZXIoKGFjdGlvbikgPT4gYWN0aW9uLmZhY2V0TmFtZSA9PT0gdW5kZWZpbmVkKSxcblx0XHRcdFx0XHRcdFx0XHRjb21tYW5kQWN0aW9uczogZmFjZXRBY3Rpb25zLmNvbW1hbmRBY3Rpb25zXG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRyZXR1cm4gZm9ybUVsZW1lbnRTdWJTZWN0aW9uO1xuXG5cdFx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5Ob3RlOlxuXHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0Li4uc3ViU2VjdGlvbixcblx0XHRcdFx0XHRcdFx0dHlwZTogU3ViU2VjdGlvblR5cGUuTm90ZXNcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdHVuc3VwcG9ydGVkVGV4dCA9IGBGb3IgJHtmYWNldERlZmluaXRpb24uVGFyZ2V0LiR0YXJnZXQudGVybX0gRnJhZ21lbnRgO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuUmVmZXJlbmNlVVJMRmFjZXQ6XG5cdFx0XHR1bnN1cHBvcnRlZFRleHQgPSBcIkZvciBSZWZlcmVuY2UgVVJMIEZhY2V0XCI7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0YnJlYWs7XG5cdH1cblx0Ly8gSWYgd2UgcmVhY2ggaGVyZSB3ZSBlbmRlZCB1cCB3aXRoIGFuIHVuc3VwcG9ydGVkIFN1YlNlY3Rpb24gdHlwZVxuXHRjb25zdCB1bnN1cHBvcnRlZFN1YlNlY3Rpb246IFVuc3VwcG9ydGVkU3ViU2VjdGlvbiA9IHtcblx0XHQuLi5zdWJTZWN0aW9uLFxuXHRcdHR5cGU6IFN1YlNlY3Rpb25UeXBlLlVua25vd24sXG5cdFx0dGV4dDogdW5zdXBwb3J0ZWRUZXh0XG5cdH07XG5cdHJldHVybiB1bnN1cHBvcnRlZFN1YlNlY3Rpb247XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdG8gaGlkZSBvciBzaG93IHRoZSBzdWJzZWN0aW9uIHRpdGxlLlxuICogQHBhcmFtIGNvbnRyb2xUaXRsZVxuICogQHBhcmFtIHN1YlNlY3Rpb25UaXRsZVxuICogQHBhcmFtIGhhc1NpbmdsZUNvbnRlbnRcbiAqIEByZXR1cm5zIEJvb2xlYW4gdmFsdWUgb3IgZXhwcmVzc2lvbiBmb3Igc2hvd1N1YlNlY3Rpb25UaXRsZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2hvd1N1YlNlY3Rpb25UaXRsZShcblx0Y29udHJvbFRpdGxlOiBzdHJpbmcsXG5cdHN1YlNlY3Rpb25UaXRsZTogc3RyaW5nLFxuXHRoYXNTaW5nbGVDb250ZW50OiBib29sZWFuXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHQvLyB2aXNpYmxlIHNoYWxsIGJlIHRydWUgaWYgdGhlcmUgYXJlIG11bHRpcGxlIGNvbnRlbnQgb3IgaWYgdGhlIGNvbnRyb2wgYW5kIHN1YnNlY3Rpb24gdGl0bGUgYXJlIGRpZmZlcmVudFxuXHRyZXR1cm4gb3Iobm90KGhhc1NpbmdsZUNvbnRlbnQpLCBub3RFcXVhbChyZXNvbHZlQmluZGluZ1N0cmluZyhjb250cm9sVGl0bGUpLCByZXNvbHZlQmluZGluZ1N0cmluZyhzdWJTZWN0aW9uVGl0bGUpKSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUZvcm1BY3Rpb25SZWR1Y2VyKFxuXHRhY3Rpb25zOiBCYXNlQWN0aW9uW10sXG5cdGZhY2V0RGVmaW5pdGlvbjogUmVmZXJlbmNlRmFjZXRUeXBlcyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBCYXNlQWN0aW9uW10ge1xuXHRjb25zdCByZWZlcmVuY2VUYXJnZXQgPSBmYWNldERlZmluaXRpb24uVGFyZ2V0LiR0YXJnZXQ7XG5cdGNvbnN0IHRhcmdldFZhbHVlID0gZmFjZXREZWZpbml0aW9uLlRhcmdldC52YWx1ZTtcblx0bGV0IG1hbmlmZXN0QWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPiA9IHt9O1xuXHRsZXQgZGF0YUZpZWxkQ29sbGVjdGlvbjogRGF0YUZpZWxkQWJzdHJhY3RUeXBlc1tdID0gW107XG5cdGxldCBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdFtuYXZpZ2F0aW9uUHJvcGVydHlQYXRoXSA9IHRhcmdldFZhbHVlLnNwbGl0KFwiQFwiKTtcblx0aWYgKG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgubGVuZ3RoID4gMCkge1xuXHRcdGlmIChuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxhc3RJbmRleE9mKFwiL1wiKSA9PT0gbmF2aWdhdGlvblByb3BlcnR5UGF0aC5sZW5ndGggLSAxKSB7XG5cdFx0XHRuYXZpZ2F0aW9uUHJvcGVydHlQYXRoID0gbmF2aWdhdGlvblByb3BlcnR5UGF0aC5zdWJzdHJpbmcoMCwgbmF2aWdhdGlvblByb3BlcnR5UGF0aC5sZW5ndGggLSAxKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0bmF2aWdhdGlvblByb3BlcnR5UGF0aCA9IHVuZGVmaW5lZDtcblx0fVxuXG5cdGlmIChyZWZlcmVuY2VUYXJnZXQpIHtcblx0XHRzd2l0Y2ggKHJlZmVyZW5jZVRhcmdldC50ZXJtKSB7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLkZpZWxkR3JvdXA6XG5cdFx0XHRcdGRhdGFGaWVsZENvbGxlY3Rpb24gPSAocmVmZXJlbmNlVGFyZ2V0IGFzIEZpZWxkR3JvdXApLkRhdGE7XG5cdFx0XHRcdG1hbmlmZXN0QWN0aW9ucyA9IGdldEFjdGlvbnNGcm9tTWFuaWZlc3QoXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uPEZvcm1NYW5pZmVzdENvbmZpZ3VyYXRpb24+KHJlZmVyZW5jZVRhcmdldCkuYWN0aW9ucyBhc1xuXHRcdFx0XHRcdFx0fCBSZWNvcmQ8c3RyaW5nLCBNYW5pZmVzdEFjdGlvbj5cblx0XHRcdFx0XHRcdHwgdW5kZWZpbmVkLFxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdFx0W10sXG5cdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0ZmFjZXREZWZpbml0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZVxuXHRcdFx0XHQpLmFjdGlvbnM7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5JZGVudGlmaWNhdGlvbjpcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVGVybXMuU3RhdHVzSW5mbzpcblx0XHRcdFx0aWYgKHJlZmVyZW5jZVRhcmdldC5xdWFsaWZpZXIpIHtcblx0XHRcdFx0XHRkYXRhRmllbGRDb2xsZWN0aW9uID0gcmVmZXJlbmNlVGFyZ2V0O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdGFjdGlvbnMgPSBkYXRhRmllbGRDb2xsZWN0aW9uLnJlZHVjZSgoYWN0aW9uUmVkdWNlciwgZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKSA9PiB7XG5cdFx0XHRzd2l0Y2ggKGRhdGFGaWVsZC4kVHlwZSkge1xuXHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbjpcblx0XHRcdFx0XHRpZiAoZGF0YUZpZWxkLlJlcXVpcmVzQ29udGV4dD8udmFsdWVPZigpID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0XHRcdC5nZXREaWFnbm9zdGljcygpXG5cdFx0XHRcdFx0XHRcdC5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sIElzc3VlU2V2ZXJpdHkuTG93LCBJc3N1ZVR5cGUuTUFMRk9STUVEX0RBVEFGSUVMRF9GT1JfSUJOLlJFUVVJUkVTQ09OVEVYVCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChkYXRhRmllbGQuSW5saW5lPy52YWx1ZU9mKCkgPT09IHRydWUpIHtcblx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0XHRcdFx0LmdldERpYWdub3N0aWNzKClcblx0XHRcdFx0XHRcdFx0LmFkZElzc3VlKElzc3VlQ2F0ZWdvcnkuQW5ub3RhdGlvbiwgSXNzdWVTZXZlcml0eS5Mb3csIElzc3VlVHlwZS5NQUxGT1JNRURfREFUQUZJRUxEX0ZPUl9JQk4uSU5MSU5FKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKGRhdGFGaWVsZC5EZXRlcm1pbmluZz8udmFsdWVPZigpID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0XHRcdC5nZXREaWFnbm9zdGljcygpXG5cdFx0XHRcdFx0XHRcdC5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sIElzc3VlU2V2ZXJpdHkuTG93LCBJc3N1ZVR5cGUuTUFMRk9STUVEX0RBVEFGSUVMRF9GT1JfSUJOLkRFVEVSTUlOSU5HKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29uc3QgbU5hdmlnYXRpb25QYXJhbWV0ZXJzOiBOYXZpZ2F0aW9uUGFyYW1ldGVycyA9IHt9O1xuXHRcdFx0XHRcdGlmIChkYXRhRmllbGQuTWFwcGluZykge1xuXHRcdFx0XHRcdFx0bU5hdmlnYXRpb25QYXJhbWV0ZXJzLnNlbWFudGljT2JqZWN0TWFwcGluZyA9IGdldFNlbWFudGljT2JqZWN0TWFwcGluZyhkYXRhRmllbGQuTWFwcGluZyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGFjdGlvblJlZHVjZXIucHVzaCh7XG5cdFx0XHRcdFx0XHR0eXBlOiBBY3Rpb25UeXBlLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbixcblx0XHRcdFx0XHRcdGlkOiBnZXRGb3JtSUQoZmFjZXREZWZpbml0aW9uLCBkYXRhRmllbGQpLFxuXHRcdFx0XHRcdFx0a2V5OiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCksXG5cdFx0XHRcdFx0XHR0ZXh0OiBkYXRhRmllbGQuTGFiZWw/LnRvU3RyaW5nKCksXG5cdFx0XHRcdFx0XHRhbm5vdGF0aW9uUGF0aDogXCJcIixcblx0XHRcdFx0XHRcdGVuYWJsZWQ6XG5cdFx0XHRcdFx0XHRcdGRhdGFGaWVsZC5OYXZpZ2F0aW9uQXZhaWxhYmxlICE9PSB1bmRlZmluZWRcblx0XHRcdFx0XHRcdFx0XHQ/IGNvbXBpbGVFeHByZXNzaW9uKGVxdWFsKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihkYXRhRmllbGQuTmF2aWdhdGlvbkF2YWlsYWJsZSksIHRydWUpKVxuXHRcdFx0XHRcdFx0XHRcdDogXCJ0cnVlXCIsXG5cdFx0XHRcdFx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihub3QoZXF1YWwoZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiksIHRydWUpKSksXG5cdFx0XHRcdFx0XHRidXR0b25UeXBlOiBnZXRCdXR0b25UeXBlKGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkVtcGhhc2l6ZWQpLFxuXHRcdFx0XHRcdFx0cHJlc3M6IGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRcdFx0XHRmbihcIi5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm5hdmlnYXRlXCIsIFtcblx0XHRcdFx0XHRcdFx0XHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZGF0YUZpZWxkLlNlbWFudGljT2JqZWN0KSxcblx0XHRcdFx0XHRcdFx0XHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZGF0YUZpZWxkLkFjdGlvbiksXG5cdFx0XHRcdFx0XHRcdFx0bU5hdmlnYXRpb25QYXJhbWV0ZXJzXG5cdFx0XHRcdFx0XHRcdF0pXG5cdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0Y3VzdG9tRGF0YTogY29tcGlsZUV4cHJlc3Npb24oe1xuXHRcdFx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGFGaWVsZC5TZW1hbnRpY09iamVjdCksXG5cdFx0XHRcdFx0XHRcdGFjdGlvbjogZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGFGaWVsZC5BY3Rpb24pXG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdH0gYXMgQW5ub3RhdGlvbkFjdGlvbik7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uOlxuXHRcdFx0XHRcdGNvbnN0IGZvcm1NYW5pZmVzdEFjdGlvbnNDb25maWd1cmF0aW9uID1cblx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbjxGb3JtTWFuaWZlc3RDb25maWd1cmF0aW9uPihyZWZlcmVuY2VUYXJnZXQpLmFjdGlvbnM7XG5cdFx0XHRcdFx0YWN0aW9uUmVkdWNlci5wdXNoKFxuXHRcdFx0XHRcdFx0Z2V0RGF0YUZpZWxkQW5ub3RhdGlvbkFjdGlvbihcblx0XHRcdFx0XHRcdFx0ZGF0YUZpZWxkLFxuXHRcdFx0XHRcdFx0XHRmYWNldERlZmluaXRpb24sXG5cdFx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdFx0XHRcdGZvcm1NYW5pZmVzdEFjdGlvbnNDb25maWd1cmF0aW9uLFxuXHRcdFx0XHRcdFx0XHRuYXZpZ2F0aW9uUHJvcGVydHlQYXRoXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb25Hcm91cDpcblx0XHRcdFx0XHRhY3Rpb25SZWR1Y2VyLnB1c2goe1xuXHRcdFx0XHRcdFx0dHlwZTogQWN0aW9uVHlwZS5NZW51LFxuXHRcdFx0XHRcdFx0dGV4dDogZGF0YUZpZWxkLkxhYmVsPy50b1N0cmluZygpLFxuXHRcdFx0XHRcdFx0a2V5OiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCksXG5cdFx0XHRcdFx0XHRpZDogZ2V0Rm9ybUlEKGZhY2V0RGVmaW5pdGlvbiwgZGF0YUZpZWxkKSxcblx0XHRcdFx0XHRcdHZpc2libGU6IGNvbXBpbGVFeHByZXNzaW9uKG5vdChlcXVhbChnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuKSwgdHJ1ZSkpKSxcblx0XHRcdFx0XHRcdGlzQUlPcGVyYXRpb246IGlzTWVudUFJT3BlcmF0aW9uKGRhdGFGaWVsZC5BY3Rpb25zKSA9PT0gdHJ1ZSB8fCB1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRtZW51OiBkYXRhRmllbGQuQWN0aW9ucy5tYXAoKGFjdGlvbikgPT4ge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBmb3JtTWFuaWZlc3RNZW51QWN0aW9uc0NvbmZpZ3VyYXRpb24gPVxuXHRcdFx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbjxGb3JtTWFuaWZlc3RDb25maWd1cmF0aW9uPihyZWZlcmVuY2VUYXJnZXQpLmFjdGlvbnM7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBnZXREYXRhRmllbGRBbm5vdGF0aW9uQWN0aW9uKFxuXHRcdFx0XHRcdFx0XHRcdGFjdGlvbiBhcyBEYXRhRmllbGRGb3JBY3Rpb25UeXBlcyxcblx0XHRcdFx0XHRcdFx0XHRmYWNldERlZmluaXRpb24sXG5cdFx0XHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRcdFx0XHRmb3JtTWFuaWZlc3RNZW51QWN0aW9uc0NvbmZpZ3VyYXRpb24sXG5cdFx0XHRcdFx0XHRcdFx0bmF2aWdhdGlvblByb3BlcnR5UGF0aFxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdHJldHVybiBhY3Rpb25SZWR1Y2VyO1xuXHRcdH0sIGFjdGlvbnMpO1xuXHR9XG5cblx0Ly8gbm8gb3ZlcnJpZGVzIGhlcmUsIHRoZXkgYXJlIGRvbmUgaW4gYSBsYXRlciBzdGVwIGluIGFkZEZvcm1NZW51QWN0aW9uc1xuXHRyZXR1cm4gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoYWN0aW9ucywgbWFuaWZlc3RBY3Rpb25zKTtcbn1cblxuZnVuY3Rpb24gZ2V0RGF0YUZpZWxkQW5ub3RhdGlvbkFjdGlvbihcblx0ZGF0YUZpZWxkOiBEYXRhRmllbGRGb3JBY3Rpb25UeXBlcyxcblx0ZmFjZXREZWZpbml0aW9uOiBSZWZlcmVuY2VGYWNldFR5cGVzLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGZvcm1NYW5pZmVzdEFjdGlvbnNDb25maWd1cmF0aW9uOiBSZWNvcmQ8c3RyaW5nLCBNYW5pZmVzdEFjdGlvbj4gfCB1bmRlZmluZWQsXG5cdG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg/OiBzdHJpbmdcbik6IEFubm90YXRpb25BY3Rpb24ge1xuXHRjb25zdCBrZXkgPSBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCk7XG5cdHJldHVybiB7XG5cdFx0dHlwZTogQWN0aW9uVHlwZS5EYXRhRmllbGRGb3JBY3Rpb24sXG5cdFx0aWQ6IGdldEZvcm1JRChmYWNldERlZmluaXRpb24sIGRhdGFGaWVsZCksXG5cdFx0a2V5OiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCksXG5cdFx0dGV4dDogZGF0YUZpZWxkLkxhYmVsPy50b1N0cmluZygpLFxuXHRcdGFubm90YXRpb25QYXRoOiBcIlwiLFxuXHRcdGVuYWJsZWQ6IGdldEVuYWJsZWRGb3JBbm5vdGF0aW9uQWN0aW9uKGNvbnZlcnRlckNvbnRleHQsIGRhdGFGaWVsZC5BY3Rpb25UYXJnZXQpLFxuXHRcdGJpbmRpbmc6IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggJiYgIWRhdGFGaWVsZC5JbmxpbmUgPyBgeyAncGF0aCcgOiAnJHtuYXZpZ2F0aW9uUHJvcGVydHlQYXRofSd9YCA6IHVuZGVmaW5lZCwgLy8gSW5saW5lIEFjdGlvbnMgZG9uJ3QgbmVlZCB0aGUgYmluZGluZyBhcyB0aGV5IGFyZSBpbnNpZGUgdGhlIEZvcm1cblx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihub3QoZXF1YWwoZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiksIHRydWUpKSksXG5cdFx0cmVxdWlyZXNEaWFsb2c6IGlzQWN0aW9uV2l0aERpYWxvZyhkYXRhRmllbGQpLFxuXHRcdGJ1dHRvblR5cGU6IGdldEJ1dHRvblR5cGUoZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uRW1waGFzaXplZCksXG5cdFx0aXNBSU9wZXJhdGlvbjogaXNBY3Rpb25BSU9wZXJhdGlvbihkYXRhRmllbGQpID09PSB0cnVlIHx8IHVuZGVmaW5lZCxcblx0XHRwcmVzczogY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRmbihcblx0XHRcdFx0XCJpbnZva2VBY3Rpb25cIixcblx0XHRcdFx0W1xuXHRcdFx0XHRcdGRhdGFGaWVsZC5BY3Rpb24sXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0Y29udGV4dHM6IGZuKFwiZ2V0QmluZGluZ0NvbnRleHRcIiwgW10sIHBhdGhJbk1vZGVsKFwiXCIsIFwiJHNvdXJjZVwiKSksXG5cdFx0XHRcdFx0XHRpbnZvY2F0aW9uR3JvdXBpbmc6IChkYXRhRmllbGQuSW52b2NhdGlvbkdyb3VwaW5nID09PSBcIlVJLk9wZXJhdGlvbkdyb3VwaW5nVHlwZS9DaGFuZ2VTZXRcIlxuXHRcdFx0XHRcdFx0XHQ/IFwiQ2hhbmdlU2V0XCJcblx0XHRcdFx0XHRcdFx0OiBcIklzb2xhdGVkXCIpIGFzIE9wZXJhdGlvbkdyb3VwaW5nVHlwZSxcblx0XHRcdFx0XHRcdGxhYmVsOiBkYXRhRmllbGQuTGFiZWw/LnRvU3RyaW5nKCksXG5cdFx0XHRcdFx0XHRtb2RlbDogZm4oXCJnZXRNb2RlbFwiLCBbXSwgcGF0aEluTW9kZWwoXCIvXCIsIFwiJHNvdXJjZVwiKSksXG5cdFx0XHRcdFx0XHRpc05hdmlnYWJsZTogaXNBY3Rpb25OYXZpZ2FibGUoZm9ybU1hbmlmZXN0QWN0aW9uc0NvbmZpZ3VyYXRpb24gJiYgZm9ybU1hbmlmZXN0QWN0aW9uc0NvbmZpZ3VyYXRpb25ba2V5XSlcblx0XHRcdFx0XHR9XG5cdFx0XHRcdF0sXG5cdFx0XHRcdHJlZihcIi5lZGl0Rmxvd1wiKVxuXHRcdFx0KVxuXHRcdCksXG5cdFx0ZmFjZXROYW1lOiBkYXRhRmllbGQuSW5saW5lID8gZmFjZXREZWZpbml0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSA6IHVuZGVmaW5lZFxuXHR9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEaWFsb2coYWN0aW9uRGVmaW5pdGlvbjogQWN0aW9uIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcblx0aWYgKGFjdGlvbkRlZmluaXRpb24pIHtcblx0XHRjb25zdCBiQ3JpdGljYWwgPSBhY3Rpb25EZWZpbml0aW9uLmFubm90YXRpb25zPy5Db21tb24/LklzQWN0aW9uQ3JpdGljYWw7XG5cdFx0aWYgKGFjdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycy5sZW5ndGggPiAxIHx8IGJDcml0aWNhbCkge1xuXHRcdFx0cmV0dXJuIFwiRGlhbG9nXCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBcIk5vbmVcIjtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIFwiTm9uZVwiO1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDdXN0b21TdWJTZWN0aW9ucyhcblx0bWFuaWZlc3RTdWJTZWN0aW9uczogUmVjb3JkPHN0cmluZywgTWFuaWZlc3RTdWJTZWN0aW9uPixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21PYmplY3RQYWdlU3ViU2VjdGlvbj4ge1xuXHRjb25zdCBzdWJTZWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tT2JqZWN0UGFnZVN1YlNlY3Rpb24+ID0ge307XG5cdE9iamVjdC5rZXlzKG1hbmlmZXN0U3ViU2VjdGlvbnMpLmZvckVhY2goXG5cdFx0KHN1YlNlY3Rpb25LZXkpID0+XG5cdFx0XHQoc3ViU2VjdGlvbnNbc3ViU2VjdGlvbktleV0gPSBjcmVhdGVDdXN0b21TdWJTZWN0aW9uKG1hbmlmZXN0U3ViU2VjdGlvbnNbc3ViU2VjdGlvbktleV0sIHN1YlNlY3Rpb25LZXksIGNvbnZlcnRlckNvbnRleHQpKVxuXHQpO1xuXHRyZXR1cm4gc3ViU2VjdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDdXN0b21TdWJTZWN0aW9uKFxuXHRtYW5pZmVzdFN1YlNlY3Rpb246IE1hbmlmZXN0U3ViU2VjdGlvbixcblx0c3ViU2VjdGlvbktleTogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IEN1c3RvbU9iamVjdFBhZ2VTdWJTZWN0aW9uIHtcblx0Y29uc3Qgc2lkZUNvbnRlbnQ6IFNpZGVDb250ZW50RGVmIHwgdW5kZWZpbmVkID0gbWFuaWZlc3RTdWJTZWN0aW9uLnNpZGVDb250ZW50XG5cdFx0PyB7XG5cdFx0XHRcdHRlbXBsYXRlOiBtYW5pZmVzdFN1YlNlY3Rpb24uc2lkZUNvbnRlbnQudGVtcGxhdGUsXG5cdFx0XHRcdGlkOiBnZXRTaWRlQ29udGVudElEKHN1YlNlY3Rpb25LZXkpLFxuXHRcdFx0XHR2aXNpYmxlOiBmYWxzZSxcblx0XHRcdFx0ZXF1YWxTcGxpdDogbWFuaWZlc3RTdWJTZWN0aW9uLnNpZGVDb250ZW50LmVxdWFsU3BsaXRcblx0XHQgIH1cblx0XHQ6IHVuZGVmaW5lZDtcblx0bGV0IHBvc2l0aW9uID0gbWFuaWZlc3RTdWJTZWN0aW9uLnBvc2l0aW9uO1xuXHRpZiAoIXBvc2l0aW9uKSB7XG5cdFx0cG9zaXRpb24gPSB7XG5cdFx0XHRwbGFjZW1lbnQ6IFBsYWNlbWVudC5BZnRlclxuXHRcdH07XG5cdH1cblx0Y29uc3QgaXNWaXNpYmxlID0gbWFuaWZlc3RTdWJTZWN0aW9uLnZpc2libGUgIT09IHVuZGVmaW5lZCA/IG1hbmlmZXN0U3ViU2VjdGlvbi52aXNpYmxlIDogdHJ1ZTtcblx0Y29uc3QgaXNEeW5hbWljRXhwcmVzc2lvbiA9IGlzVmlzaWJsZSAmJiB0eXBlb2YgaXNWaXNpYmxlID09PSBcInN0cmluZ1wiICYmIGlzVmlzaWJsZS5pbmRleE9mKFwiez1cIikgPT09IDA7XG5cdGNvbnN0IG1hbmlmZXN0QWN0aW9ucyA9IGdldEFjdGlvbnNGcm9tTWFuaWZlc3QobWFuaWZlc3RTdWJTZWN0aW9uLmFjdGlvbnMsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRtYW5pZmVzdEFjdGlvbnMuYWN0aW9ucyA9IHJlbW92ZUR1cGxpY2F0ZUFjdGlvbnMoT2JqZWN0LnZhbHVlcyhtYW5pZmVzdEFjdGlvbnMuYWN0aW9ucykpPy5yZWR1Y2UoXG5cdFx0KHByZXZpb3VzQWN0aW9uLCBjdXJyZW50QWN0aW9uKSA9PiAoeyAuLi5wcmV2aW91c0FjdGlvbiwgW2N1cnJlbnRBY3Rpb24ua2V5XTogY3VycmVudEFjdGlvbiB9KSxcblx0XHR7fVxuXHQpO1xuXHRjb25zdCBzdWJTZWN0aW9uRGVmaW5pdGlvbiA9IHtcblx0XHR0eXBlOiBTdWJTZWN0aW9uVHlwZS5Vbmtub3duLFxuXHRcdGlkOiBtYW5pZmVzdFN1YlNlY3Rpb24uaWQgfHwgZ2V0Q3VzdG9tU3ViU2VjdGlvbklEKHN1YlNlY3Rpb25LZXkpLFxuXHRcdGFjdGlvbnM6IG1hbmlmZXN0QWN0aW9ucy5hY3Rpb25zLFxuXHRcdGtleTogc3ViU2VjdGlvbktleSxcblx0XHR0aXRsZTogbWFuaWZlc3RTdWJTZWN0aW9uLnRpdGxlLFxuXHRcdGxldmVsOiAxLFxuXHRcdHBvc2l0aW9uOiBwb3NpdGlvbixcblx0XHR2aXNpYmxlOiBtYW5pZmVzdFN1YlNlY3Rpb24udmlzaWJsZSAhPT0gdW5kZWZpbmVkID8gbWFuaWZlc3RTdWJTZWN0aW9uLnZpc2libGUgOiBcInRydWVcIixcblx0XHRzaWRlQ29udGVudDogc2lkZUNvbnRlbnQsXG5cdFx0aXNWaXNpYmlsaXR5RHluYW1pYzogaXNEeW5hbWljRXhwcmVzc2lvbixcblx0XHRvYmplY3RQYWdlTGF6eUxvYWRlckVuYWJsZWQ6IG1hbmlmZXN0U3ViU2VjdGlvbi5lbmFibGVMYXp5TG9hZGluZyA/PyBmYWxzZSxcblx0XHRjb21wb25lbnROYW1lOiBcIlwiLFxuXHRcdHNldHRpbmdzOiBcIlwiLFxuXHRcdGFwcGx5U3RhdGU6IG1hbmlmZXN0U3ViU2VjdGlvbi5hcHBseVN0YXRlLFxuXHRcdHJldHJpZXZlU3RhdGU6IG1hbmlmZXN0U3ViU2VjdGlvbi5yZXRyaWV2ZVN0YXRlXG5cdH07XG5cdGlmIChtYW5pZmVzdFN1YlNlY3Rpb24udGVtcGxhdGUgfHwgbWFuaWZlc3RTdWJTZWN0aW9uLm5hbWUpIHtcblx0XHRzdWJTZWN0aW9uRGVmaW5pdGlvbi50eXBlID0gU3ViU2VjdGlvblR5cGUuWE1MRnJhZ21lbnQ7XG5cdFx0KHN1YlNlY3Rpb25EZWZpbml0aW9uIGFzIHVua25vd24gYXMgWE1MRnJhZ21lbnRTdWJTZWN0aW9uKS50ZW1wbGF0ZSA9IG1hbmlmZXN0U3ViU2VjdGlvbi50ZW1wbGF0ZSB8fCBtYW5pZmVzdFN1YlNlY3Rpb24ubmFtZSB8fCBcIlwiO1xuXHR9IGVsc2UgaWYgKG1hbmlmZXN0U3ViU2VjdGlvbi5lbWJlZGRlZENvbXBvbmVudCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0c3ViU2VjdGlvbkRlZmluaXRpb24udHlwZSA9IFN1YlNlY3Rpb25UeXBlLkVtYmVkZGVkQ29tcG9uZW50O1xuXHRcdHN1YlNlY3Rpb25EZWZpbml0aW9uLmNvbXBvbmVudE5hbWUgPSBtYW5pZmVzdFN1YlNlY3Rpb24uZW1iZWRkZWRDb21wb25lbnQubmFtZTtcblx0XHRpZiAobWFuaWZlc3RTdWJTZWN0aW9uLmVtYmVkZGVkQ29tcG9uZW50LnNldHRpbmdzICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHN1YlNlY3Rpb25EZWZpbml0aW9uLnNldHRpbmdzID0gSlNPTi5zdHJpbmdpZnkobWFuaWZlc3RTdWJTZWN0aW9uLmVtYmVkZGVkQ29tcG9uZW50LnNldHRpbmdzKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0c3ViU2VjdGlvbkRlZmluaXRpb24udHlwZSA9IFN1YlNlY3Rpb25UeXBlLlBsYWNlaG9sZGVyO1xuXHR9XG5cdHJldHVybiBzdWJTZWN0aW9uRGVmaW5pdGlvbiBhcyBDdXN0b21PYmplY3RQYWdlU3ViU2VjdGlvbjtcbn1cblxuLyoqXG4gKiBFdmFsdWF0ZSBpZiB0aGUgY29uZGVuc2VkIG1vZGUgY2FuIGJlIGFwcGxpZWQgb24gdGhlIHRhYmxlLlxuICogQHBhcmFtIGN1cnJlbnRGYWNldFxuICogQHBhcmFtIGZhY2V0c1RvQ3JlYXRlSW5TZWN0aW9uXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMgYHRydWVgIGZvciBjb21wbGlhbnQsIGZhbHNlIG90aGVyd2lzZVxuICovXG5mdW5jdGlvbiBnZXRDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFuY2UoXG5cdGN1cnJlbnRGYWNldDogRmFjZXRUeXBlcyxcblx0ZmFjZXRzVG9DcmVhdGVJblNlY3Rpb246IEZhY2V0VHlwZXNbXSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBib29sZWFuIHtcblx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0aWYgKG1hbmlmZXN0V3JhcHBlci51c2VJY29uVGFiQmFyKCkpIHtcblx0XHQvLyBJZiB0aGUgT1AgdXNlIHRoZSB0YWIgYmFzZWQgd2UgY2hlY2sgaWYgdGhlIGZhY2V0cyB0aGF0IHdpbGwgYmUgY3JlYXRlZCBmb3IgdGhpcyBzZWN0aW9uIGFyZSBhbGwgbm9uIHZpc2libGVcblx0XHRyZXR1cm4gaGFzTm9PdGhlclZpc2libGVUYWJsZUluVGFyZ2V0cyhjdXJyZW50RmFjZXQsIGZhY2V0c1RvQ3JlYXRlSW5TZWN0aW9uKTtcblx0fSBlbHNlIHtcblx0XHRjb25zdCBlbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cdFx0aWYgKGVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LlVJPy5GYWNldHM/Lmxlbmd0aCAmJiBlbnRpdHlUeXBlLmFubm90YXRpb25zPy5VST8uRmFjZXRzPy5sZW5ndGggPiAxKSB7XG5cdFx0XHRyZXR1cm4gaGFzTm9PdGhlclZpc2libGVUYWJsZUluVGFyZ2V0cyhjdXJyZW50RmFjZXQsIGZhY2V0c1RvQ3JlYXRlSW5TZWN0aW9uKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIGhhc05vT3RoZXJWaXNpYmxlVGFibGVJblRhcmdldHMoY3VycmVudEZhY2V0OiBGYWNldFR5cGVzLCBmYWNldHNUb0NyZWF0ZUluU2VjdGlvbjogRmFjZXRUeXBlc1tdKTogYm9vbGVhbiB7XG5cdHJldHVybiBmYWNldHNUb0NyZWF0ZUluU2VjdGlvbi5ldmVyeShmdW5jdGlvbiAoc3ViRmFjZXQpIHtcblx0XHRpZiAoc3ViRmFjZXQgIT09IGN1cnJlbnRGYWNldCkge1xuXHRcdFx0aWYgKHN1YkZhY2V0LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5SZWZlcmVuY2VGYWNldCkge1xuXHRcdFx0XHRjb25zdCByZWZGYWNldCA9IHN1YkZhY2V0O1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0cmVmRmFjZXQuVGFyZ2V0Py4kdGFyZ2V0Py50ZXJtID09PSBVSUFubm90YXRpb25UZXJtcy5MaW5lSXRlbSB8fFxuXHRcdFx0XHRcdHJlZkZhY2V0LlRhcmdldD8uJHRhcmdldD8udGVybSA9PT0gVUlBbm5vdGF0aW9uVGVybXMuUHJlc2VudGF0aW9uVmFyaWFudCB8fFxuXHRcdFx0XHRcdHJlZkZhY2V0LlRhcmdldC4kdGFyZ2V0Py50ZXJtID09PSBVSUFubm90YXRpb25UZXJtcy5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50XG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHJldHVybiByZWZGYWNldC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiAhPT0gdW5kZWZpbmVkID8gcmVmRmFjZXQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4gOiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IHN1YkNvbGxlY3Rpb25GYWNldCA9IHN1YkZhY2V0IGFzIENvbGxlY3Rpb25GYWNldFR5cGVzO1xuXHRcdFx0XHRyZXR1cm4gc3ViQ29sbGVjdGlvbkZhY2V0LkZhY2V0cy5ldmVyeShmdW5jdGlvbiAoZmFjZXQpIHtcblx0XHRcdFx0XHRjb25zdCBzdWJSZWZGYWNldCA9IGZhY2V0IGFzIFJlZmVyZW5jZUZhY2V0VHlwZXM7XG5cdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0c3ViUmVmRmFjZXQuVGFyZ2V0Py4kdGFyZ2V0Py50ZXJtID09PSBVSUFubm90YXRpb25UZXJtcy5MaW5lSXRlbSB8fFxuXHRcdFx0XHRcdFx0c3ViUmVmRmFjZXQuVGFyZ2V0Py4kdGFyZ2V0Py50ZXJtID09PSBVSUFubm90YXRpb25UZXJtcy5QcmVzZW50YXRpb25WYXJpYW50IHx8XG5cdFx0XHRcdFx0XHRzdWJSZWZGYWNldC5UYXJnZXQ/LiR0YXJnZXQ/LnRlcm0gPT09IFVJQW5ub3RhdGlvblRlcm1zLlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdHJldHVybiBzdWJSZWZGYWNldC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiAhPT0gdW5kZWZpbmVkID8gc3ViUmVmRmFjZXQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4gOiBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O01BZ0ZZQSxjQUFjLDBCQUFkQSxjQUFjO0lBQWRBLGNBQWM7SUFDSjtJQURWQSxjQUFjO0lBQWRBLGNBQWM7SUFBZEEsY0FBYztJQUFkQSxjQUFjO0lBQWRBLGNBQWM7SUFBZEEsY0FBYztJQUFkQSxjQUFjO0lBQUEsT0FBZEEsY0FBYztFQUFBO0VBQUFDLFFBQUEsQ0FBQUQsY0FBQSxHQUFBQSxjQUFBO0VBa0gxQixNQUFNRSxrQkFBNEIsR0FBRywyTkFNcEM7O0VBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNPLFNBQVNDLGlCQUFpQkEsQ0FDaENDLGVBQTZCLEVBQzdCQyxnQkFBeUQsRUFDekRDLGVBQXlCLEVBQ3pCQyw2QkFBdUMsRUFDZDtJQUN6QjtJQUNBLE1BQU1DLGNBQWMsR0FBR0osZUFBZSxDQUFDSyxNQUFNLENBQUMsQ0FBQ0QsY0FBNEIsRUFBRUUsZUFBZSxLQUFLO01BQ2hHLFFBQVFBLGVBQWUsQ0FBQ0MsS0FBSztRQUM1QjtVQUNDSCxjQUFjLENBQUNJLElBQUksQ0FBQ0YsZUFBZSxDQUFDO1VBQ3BDO1FBQ0Q7VUFDQztVQUNBO1VBQ0EsSUFBSUEsZUFBZSxDQUFDRyxNQUFNLENBQUNDLElBQUksQ0FBRUMsU0FBUyxJQUFLQSxTQUFTLENBQUNKLEtBQUssaURB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
706
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTdWJTZWN0aW9uVHlwZSIsIl9leHBvcnRzIiwidmlzdWFsaXphdGlvblRlcm1zIiwiY3JlYXRlU3ViU2VjdGlvbnMiLCJmYWNldENvbGxlY3Rpb24iLCJjb252ZXJ0ZXJDb250ZXh0IiwiaXNIZWFkZXJTZWN0aW9uIiwidXNlU2luZ2xlVGV4dEFyZWFGaWVsZEFzTm90ZXMiLCJmYWNldHNUb0NyZWF0ZSIsInJlZHVjZSIsImZhY2V0RGVmaW5pdGlvbiIsIiRUeXBlIiwicHVzaCIsIkZhY2V0cyIsImZpbmQiLCJmYWNldFR5cGUiLCJzcGxpY2UiLCJsZW5ndGgiLCJtYXAiLCJmYWNldCIsImNyZWF0ZVN1YlNlY3Rpb24iLCJjcmVhdGVDdXN0b21IZWFkZXJGYWNldFN1YlNlY3Rpb25zIiwiY3VzdG9tSGVhZGVyRmFjZXRzIiwiZ2V0SGVhZGVyRmFjZXRzRnJvbU1hbmlmZXN0IiwiZ2V0TWFuaWZlc3RXcmFwcGVyIiwiZ2V0SGVhZGVyRmFjZXRzIiwiYUN1c3RvbUhlYWRlckZhY2V0cyIsIk9iamVjdCIsImtleXMiLCJmb3JFYWNoIiwia2V5IiwiY3VzdG9tSGVhZGVyRmFjZXQiLCJ0ZW1wbGF0ZUVkaXQiLCJjcmVhdGVDdXN0b21IZWFkZXJGYWNldFN1YlNlY3Rpb24iLCJzdWJTZWN0aW9uSUQiLCJnZXRDdXN0b21TdWJTZWN0aW9uSUQiLCJzdWJTZWN0aW9uIiwiaWQiLCJ0aXRsZSIsInR5cGUiLCJYTUxGcmFnbWVudCIsInRlbXBsYXRlIiwidmlzaWJsZSIsImxldmVsIiwic2lkZUNvbnRlbnQiLCJ1bmRlZmluZWQiLCJzdGFzaGVkIiwiZmxleFNldHRpbmdzIiwiYWN0aW9ucyIsIm9iamVjdFBhZ2VMYXp5TG9hZGVyRW5hYmxlZCIsImdldFN1YlNlY3Rpb25LZXkiLCJmYWxsYmFjayIsIklEIiwidG9TdHJpbmciLCJMYWJlbCIsImFkZEZvcm1NZW51QWN0aW9ucyIsInJldmVyc2VJbmRleCIsInN0YXJ0c1dpdGgiLCJoaWRkZW5BY3Rpb25zIiwiZ2V0Rm9ybUhpZGRlbkFjdGlvbnMiLCJhY3Rpb25PdmVyd3JpdGVDb25maWciLCJlbmFibGVkIiwiT3ZlcnJpZGVUeXBlIiwib3ZlcndyaXRlIiwiY29tbWFuZCIsInBvc2l0aW9uIiwibWVudSIsInByaW9yaXR5IiwiZ3JvdXAiLCJvdmVyZmxvd0dyb3VwIiwiZGlzYWJsZVN0cmljdEhhbmRsaW5nIiwiZm9ybUFjdGlvbnMiLCJnZXRGb3JtQWN0aW9ucyIsIm1hbmlmZXN0QWN0aW9ucyIsImdldEFjdGlvbnNGcm9tTWFuaWZlc3QiLCJhbm5vdGF0aW9uTWVudUFjdGlvbkl0ZW1zIiwiZ2V0QW5ub3RhdGlvbk1lbnVBY3Rpb25JdGVtcyIsIm1hdGNoaW5nTWFuaWZlc3RBY3Rpb25zIiwiZ2V0TWF0Y2hpbmdNYW5pZmVzdEFjdGlvbiIsIm92ZXJ3cml0dGVuTWVudUFjdGlvbkl0ZW1zIiwiaW5zZXJ0Q3VzdG9tRWxlbWVudHMiLCJtYW5pZmVzdEFjdGlvbiIsImZvcm1BbGxBY3Rpb25zIiwicHJlcGFyZU1lbnVBY3Rpb25zIiwicmVtb3ZlRHVwbGljYXRlQWN0aW9ucyIsImdldFZpc2liaWxpdHlFbmFibGVtZW50TWVudUFjdGlvbnMiLCJBY3Rpb25VdGlsaXRpZXMiLCJlbnN1cmVQcmltYXJ5QWN0aW9uTmV2ZXJPdmVyZmxvd3MiLCJhY3Rpb24iLCJBY3Rpb25UeXBlIiwiTWVudSIsImRlZmF1bHRBY3Rpb24iLCJEZWZhdWx0IiwiY29tbWFuZEFjdGlvbnMiLCJnZXRGYWNldEFjdGlvbnMiLCJmaWx0ZXIiLCJzdWJGYWNldERlZmluaXRpb24iLCJpc1JlZmVyZW5jZUZhY2V0IiwiYWN0aW9uUmVkdWNlciIsInJlZmVyZW5jZUZhY2V0IiwiY3JlYXRlRm9ybUFjdGlvblJlZHVjZXIiLCJjb21iaW5lZEFjdGlvbnMiLCJzZWN0aW9uc0luTWFuaWZlc3QiLCJnZXRTZWN0aW9ucyIsImZhY2V0T3ZlcmZsb3dHcm91cHNDb25maWciLCJvdmVyZmxvd0dyb3VwcyIsImFkZFNlcGFyYXRvcnMiLCJnZXRCdXR0b25UeXBlIiwiZW1waGFzaXplZCIsImJ1dHRvblR5cGVDb25kaXRpb24iLCJlcXVhbCIsImdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiIsImNvbXBpbGVFeHByZXNzaW9uIiwiaWZFbHNlIiwiQnV0dG9uVHlwZSIsIkdob3N0IiwiVHJhbnNwYXJlbnQiLCJoYXNTaW5nbGVDb250ZW50IiwiZ2V0U3ViU2VjdGlvbklEIiwiaGlkZGVuQW5ub3RhdGlvbiIsImFubm90YXRpb25zIiwiVUkiLCJIaWRkZW4iLCJpc1Zpc2libGVFeHByZXNzaW9uIiwibm90IiwicGF0aCIsInNpbmdsZXRvblBhdGhWaXNpdG9yIiwiZ2V0Q29udmVydGVkVHlwZXMiLCJpc1Zpc2liaWxpdHlEeW5hbWljIiwiaXNDb25zdGFudCIsImlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uIiwiVW5rbm93biIsImFubm90YXRpb25QYXRoIiwiZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImdldEVuYWJsZUxhenlMb2FkaW5nIiwiZ2V0U3Rhc2hlZFNldHRpbmdzRm9ySGVhZGVyRmFjZXQiLCJkZXNpZ250aW1lIiwiZ2V0RGVzaWduVGltZU1ldGFkYXRhU2V0dGluZ3NGb3JIZWFkZXJGYWNldCIsInVuc3VwcG9ydGVkVGV4dCIsImZhY2V0cyIsInZpc3VhbGl6YXRpb25GYWNldHMiLCJpbmRleCIsIl9yZWYiLCJUYXJnZXQiLCIkdGFyZ2V0IiwiaW5jbHVkZXMiLCJ0ZXJtIiwibm9uVmlzdWFsaXphdGlvbkZhY2V0cyIsInZpc3VhbGl6YXRpb24iLCJ2aXN1YWxpemF0aW9uQ29udGVudCIsImZvcm1Db250ZW50IiwibWl4ZWRDb250ZW50IiwiTG9nIiwid2FybmluZyIsImZha2VGb3JtRmFjZXQiLCJfcmVmMiIsIm1peGVkU3ViU2VjdGlvbiIsIk1peGVkIiwiY29udGVudCIsImZhY2V0QWN0aW9ucyIsImZvcm1Db2xsZWN0aW9uU3ViU2VjdGlvbiIsIkZvcm0iLCJmb3JtRGVmaW5pdGlvbiIsImNyZWF0ZUZvcm1EZWZpbml0aW9uIiwiZmFjZXROYW1lIiwidmFsdWUiLCJwcmVzZW50YXRpb24iLCJnZXREYXRhVmlzdWFsaXphdGlvbkNvbmZpZ3VyYXRpb24iLCJpc0NvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW50IiwiZ2V0Q29uZGVuc2VkVGFibGVMYXlvdXRDb21wbGlhbmNlIiwiZG9Ob3RDaGVja0FwcGx5U3VwcG9ydGVkIiwic2hvdWxkQ3JlYXRlVGVtcGxhdGVDaGFydFZpc3VhbGl6YXRpb24iLCJzdWJTZWN0aW9uVGl0bGUiLCJjb250cm9sVGl0bGUiLCJ2aXN1YWxpemF0aW9ucyIsImFubm90YXRpb24iLCJpc1BhcnRPZlByZXZpZXciLCJQYXJ0T2ZQcmV2aWV3IiwidmFsdWVPZiIsInNob3dTdWJTZWN0aW9uVGl0bGUiLCJnZXRTaG93U3ViU2VjdGlvblRpdGxlIiwiZGF0YVZpc3VhbGl6YXRpb25UaXRsZVZpc2libGUiLCJhbmQiLCJkYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb24iLCJEYXRhVmlzdWFsaXphdGlvbiIsImZvcm1FbGVtZW50U3ViU2VjdGlvbiIsIk5vdGVzIiwidW5zdXBwb3J0ZWRTdWJTZWN0aW9uIiwidGV4dCIsIm9yIiwibm90RXF1YWwiLCJyZXNvbHZlQmluZGluZ1N0cmluZyIsInJlZmVyZW5jZVRhcmdldCIsInRhcmdldFZhbHVlIiwiZGF0YUZpZWxkQ29sbGVjdGlvbiIsIm5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgiLCJzcGxpdCIsImxhc3RJbmRleE9mIiwic3Vic3RyaW5nIiwiRGF0YSIsImdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb24iLCJxdWFsaWZpZXIiLCJkYXRhRmllbGQiLCJSZXF1aXJlc0NvbnRleHQiLCJnZXREaWFnbm9zdGljcyIsImFkZElzc3VlIiwiSXNzdWVDYXRlZ29yeSIsIkFubm90YXRpb24iLCJJc3N1ZVNldmVyaXR5IiwiTG93IiwiSXNzdWVUeXBlIiwiTUFMRk9STUVEX0RBVEFGSUVMRF9GT1JfSUJOIiwiUkVRVUlSRVNDT05URVhUIiwiSW5saW5lIiwiSU5MSU5FIiwiRGV0ZXJtaW5pbmciLCJERVRFUk1JTklORyIsIm1OYXZpZ2F0aW9uUGFyYW1ldGVycyIsIk1hcHBpbmciLCJzZW1hbnRpY09iamVjdE1hcHBpbmciLCJnZXRTZW1hbnRpY09iamVjdE1hcHBpbmciLCJEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJnZXRGb3JtSUQiLCJLZXlIZWxwZXIiLCJnZW5lcmF0ZUtleUZyb21EYXRhRmllbGQiLCJOYXZpZ2F0aW9uQXZhaWxhYmxlIiwiYnV0dG9uVHlwZSIsIkVtcGhhc2l6ZWQiLCJwcmVzcyIsImZuIiwiU2VtYW50aWNPYmplY3QiLCJBY3Rpb24iLCJjdXN0b21EYXRhIiwic2VtYW50aWNPYmplY3QiLCJmb3JtTWFuaWZlc3RBY3Rpb25zQ29uZmlndXJhdGlvbiIsImdldERhdGFGaWVsZEFubm90YXRpb25BY3Rpb24iLCJpc0FJT3BlcmF0aW9uIiwiaXNNZW51QUlPcGVyYXRpb24iLCJBY3Rpb25zIiwiZm9ybU1hbmlmZXN0TWVudUFjdGlvbnNDb25maWd1cmF0aW9uIiwiRGF0YUZpZWxkRm9yQWN0aW9uIiwiZ2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb24iLCJBY3Rpb25UYXJnZXQiLCJiaW5kaW5nIiwicmVxdWlyZXNEaWFsb2ciLCJpc0FjdGlvbldpdGhEaWFsb2ciLCJpc0FjdGlvbkFJT3BlcmF0aW9uIiwiY29udGV4dHMiLCJwYXRoSW5Nb2RlbCIsImludm9jYXRpb25Hcm91cGluZyIsIkludm9jYXRpb25Hcm91cGluZyIsImxhYmVsIiwibW9kZWwiLCJpc05hdmlnYWJsZSIsImlzQWN0aW9uTmF2aWdhYmxlIiwicmVmIiwiaXNEaWFsb2ciLCJhY3Rpb25EZWZpbml0aW9uIiwiYkNyaXRpY2FsIiwiQ29tbW9uIiwiSXNBY3Rpb25Dcml0aWNhbCIsInBhcmFtZXRlcnMiLCJjcmVhdGVDdXN0b21TdWJTZWN0aW9ucyIsIm1hbmlmZXN0U3ViU2VjdGlvbnMiLCJzdWJTZWN0aW9ucyIsInN1YlNlY3Rpb25LZXkiLCJjcmVhdGVDdXN0b21TdWJTZWN0aW9uIiwibWFuaWZlc3RTdWJTZWN0aW9uIiwiZ2V0U2lkZUNvbnRlbnRJRCIsImVxdWFsU3BsaXQiLCJwbGFjZW1lbnQiLCJQbGFjZW1lbnQiLCJBZnRlciIsImlzVmlzaWJsZSIsImlzRHluYW1pY0V4cHJlc3Npb24iLCJpbmRleE9mIiwidmFsdWVzIiwicHJldmlvdXNBY3Rpb24iLCJjdXJyZW50QWN0aW9uIiwic3ViU2VjdGlvbkRlZmluaXRpb24iLCJlbmFibGVMYXp5TG9hZGluZyIsImNvbXBvbmVudE5hbWUiLCJzZXR0aW5ncyIsImFwcGx5U3RhdGUiLCJyZXRyaWV2ZVN0YXRlIiwibmFtZSIsImVtYmVkZGVkQ29tcG9uZW50IiwiRW1iZWRkZWRDb21wb25lbnQiLCJKU09OIiwic3RyaW5naWZ5IiwiUGxhY2Vob2xkZXIiLCJjdXJyZW50RmFjZXQiLCJmYWNldHNUb0NyZWF0ZUluU2VjdGlvbiIsIm1hbmlmZXN0V3JhcHBlciIsInVzZUljb25UYWJCYXIiLCJoYXNOb090aGVyVmlzaWJsZVRhYmxlSW5UYXJnZXRzIiwiZW50aXR5VHlwZSIsImdldEVudGl0eVR5cGUiLCJldmVyeSIsInN1YkZhY2V0IiwicmVmRmFjZXQiLCJzdWJDb2xsZWN0aW9uRmFjZXQiLCJzdWJSZWZGYWNldCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiU3ViU2VjdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFjdGlvbiB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy9FZG1cIjtcbmltcG9ydCB7IENvbW11bmljYXRpb25Bbm5vdGF0aW9uVGVybXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW11bmljYXRpb25cIjtcbmltcG9ydCB0eXBlIHtcblx0Q29sbGVjdGlvbkZhY2V0LFxuXHRDb2xsZWN0aW9uRmFjZXRUeXBlcyxcblx0RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0RGF0YUZpZWxkRm9yQWN0aW9uVHlwZXMsXG5cdEVtcGhhc2l6ZWQsXG5cdEZhY2V0VHlwZXMsXG5cdEZpZWxkR3JvdXAsXG5cdE9wZXJhdGlvbkdyb3VwaW5nVHlwZSxcblx0UmVmZXJlbmNlRmFjZXRUeXBlc1xufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UZXJtcywgVUlBbm5vdGF0aW9uVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIHsgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHtcblx0YW5kLFxuXHRjb21waWxlRXhwcmVzc2lvbixcblx0ZXF1YWwsXG5cdGZuLFxuXHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24sXG5cdGlmRWxzZSxcblx0aXNDb25zdGFudCxcblx0bm90LFxuXHRub3RFcXVhbCxcblx0b3IsXG5cdHBhdGhJbk1vZGVsLFxuXHRyZWYsXG5cdHJlc29sdmVCaW5kaW5nU3RyaW5nXG59IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBOYXZpZ2F0aW9uUGFyYW1ldGVycyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9JbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBQYWdlQ29udGV4dFBhdGhUYXJnZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUge1xuXHRBbm5vdGF0aW9uQWN0aW9uLFxuXHRCYXNlQWN0aW9uLFxuXHRDb21iaW5lZEFjdGlvbixcblx0Q3VzdG9tQWN0aW9uLFxuXHRPdmVycmlkZVR5cGVBY3Rpb25cbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0FjdGlvblwiO1xuaW1wb3J0IHtcblx0QnV0dG9uVHlwZSxcblx0YWRkU2VwYXJhdG9ycyxcblx0Z2V0QWN0aW9uc0Zyb21NYW5pZmVzdCxcblx0Z2V0QW5ub3RhdGlvbk1lbnVBY3Rpb25JdGVtcyxcblx0Z2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb24sXG5cdGdldE1hdGNoaW5nTWFuaWZlc3RBY3Rpb24sXG5cdGdldFNlbWFudGljT2JqZWN0TWFwcGluZyxcblx0Z2V0VmlzaWJpbGl0eUVuYWJsZW1lbnRNZW51QWN0aW9ucyxcblx0aXNBY3Rpb25BSU9wZXJhdGlvbixcblx0aXNBY3Rpb25OYXZpZ2FibGUsXG5cdGlzTWVudUFJT3BlcmF0aW9uLFxuXHRwcmVwYXJlTWVudUFjdGlvbnMsXG5cdHJlbW92ZUR1cGxpY2F0ZUFjdGlvbnNcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0FjdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBDaGFydFZpc3VhbGl6YXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQ2hhcnRcIjtcbmltcG9ydCB0eXBlIHsgVGFibGVWaXN1YWxpemF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSB7IEN1c3RvbU9iamVjdFBhZ2VIZWFkZXJGYWNldCwgRmxleFNldHRpbmdzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvT2JqZWN0UGFnZS9IZWFkZXJGYWNldFwiO1xuaW1wb3J0IHtcblx0Z2V0RGVzaWduVGltZU1ldGFkYXRhU2V0dGluZ3NGb3JIZWFkZXJGYWNldCxcblx0Z2V0SGVhZGVyRmFjZXRzRnJvbU1hbmlmZXN0LFxuXHRnZXRTdGFzaGVkU2V0dGluZ3NGb3JIZWFkZXJGYWNldFxufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9PYmplY3RQYWdlL0hlYWRlckZhY2V0XCI7XG5pbXBvcnQgeyBJc3N1ZUNhdGVnb3J5LCBJc3N1ZVNldmVyaXR5LCBJc3N1ZVR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0lzc3VlTWFuYWdlclwiO1xuaW1wb3J0IHsgS2V5SGVscGVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9LZXlcIjtcbmltcG9ydCBBY3Rpb25VdGlsaXRpZXMgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQWN0aW9uVXRpbGl0aWVzXCI7XG5pbXBvcnQgeyBzaW5nbGV0b25QYXRoVmlzaXRvciB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdIZWxwZXJcIjtcbmltcG9ydCB7IGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IHR5cGUgQ29udmVydGVyQ29udGV4dCBmcm9tIFwiLi4vLi4vQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBGb3JtTWFuaWZlc3RDb25maWd1cmF0aW9uLCBNYW5pZmVzdEFjdGlvbiwgTWFuaWZlc3RTdWJTZWN0aW9uLCBPdmVyZmxvd0dyb3Vwc0NvbmZpZ3VyYXRpb24gfSBmcm9tIFwiLi4vLi4vTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHsgQWN0aW9uVHlwZSB9IGZyb20gXCIuLi8uLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBpc0FjdGlvbldpdGhEaWFsb2cgfSBmcm9tIFwiLi4vLi4vYW5ub3RhdGlvbnMvRGF0YUZpZWxkXCI7XG5pbXBvcnQgdHlwZSB7IENvbmZpZ3VyYWJsZU9iamVjdCwgQ29uZmlndXJhYmxlUmVjb3JkLCBDdXN0b21FbGVtZW50IH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgeyBPdmVycmlkZVR5cGUsIFBsYWNlbWVudCwgaW5zZXJ0Q3VzdG9tRWxlbWVudHMgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7IGdldEN1c3RvbVN1YlNlY3Rpb25JRCwgZ2V0Rm9ybUlELCBnZXRTaWRlQ29udGVudElELCBnZXRTdWJTZWN0aW9uSUQgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9JRFwiO1xuaW1wb3J0IHsgZ2V0Rm9ybUFjdGlvbnMsIGdldEZvcm1IaWRkZW5BY3Rpb25zIH0gZnJvbSBcIi4uLy4uL29iamVjdFBhZ2UvRm9ybU1lbnVBY3Rpb25zXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFWaXN1YWxpemF0aW9uRGVmaW5pdGlvbiB9IGZyb20gXCIuLi9Db21tb24vRGF0YVZpc3VhbGl6YXRpb25cIjtcbmltcG9ydCB7IGdldERhdGFWaXN1YWxpemF0aW9uQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuLi9Db21tb24vRGF0YVZpc3VhbGl6YXRpb25cIjtcbmltcG9ydCB0eXBlIHsgRm9ybURlZmluaXRpb24gfSBmcm9tIFwiLi4vQ29tbW9uL0Zvcm1cIjtcbmltcG9ydCB7IGNyZWF0ZUZvcm1EZWZpbml0aW9uLCBpc1JlZmVyZW5jZUZhY2V0IH0gZnJvbSBcIi4uL0NvbW1vbi9Gb3JtXCI7XG5cbmV4cG9ydCBlbnVtIFN1YlNlY3Rpb25UeXBlIHtcblx0VW5rbm93biA9IFwiVW5rbm93blwiLCAvLyBEZWZhdWx0IFR5cGVcblx0Rm9ybSA9IFwiRm9ybVwiLFxuXHROb3RlcyA9IFwiTm90ZXNcIixcblx0RGF0YVZpc3VhbGl6YXRpb24gPSBcIkRhdGFWaXN1YWxpemF0aW9uXCIsXG5cdFhNTEZyYWdtZW50ID0gXCJYTUxGcmFnbWVudFwiLFxuXHRQbGFjZWhvbGRlciA9IFwiUGxhY2Vob2xkZXJcIixcblx0TWl4ZWQgPSBcIk1peGVkXCIsXG5cdEVtYmVkZGVkQ29tcG9uZW50ID0gXCJFbWJlZGRlZENvbXBvbmVudFwiXG59XG5cbmV4cG9ydCB0eXBlIE9iamVjdFBhZ2VTdWJTZWN0aW9uID1cblx0fCBVbnN1cHBvcnRlZFN1YlNlY3Rpb25cblx0fCBGb3JtU3ViU2VjdGlvblxuXHR8IERhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvblxuXHR8IENvbnRhY3RTdWJTZWN0aW9uXG5cdHwgWE1MRnJhZ21lbnRTdWJTZWN0aW9uXG5cdHwgUGxhY2Vob2xkZXJGcmFnbWVudFN1YlNlY3Rpb25cblx0fCBNaXhlZFN1YlNlY3Rpb25cblx0fCBSZXVzZUNvbXBvbmVudFN1YlNlY3Rpb25cblx0fCBOb3RlU3ViU2VjdGlvbjtcblxudHlwZSBCYXNlU3ViU2VjdGlvbiA9IHtcblx0aWQ6IHN0cmluZztcblx0a2V5OiBzdHJpbmc7XG5cdHRpdGxlOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0YW5ub3RhdGlvblBhdGg6IHN0cmluZztcblx0dHlwZTogU3ViU2VjdGlvblR5cGU7XG5cdHZpc2libGU6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRpc1Zpc2liaWxpdHlEeW5hbWljPzogYm9vbGVhbiB8IFwiXCI7XG5cdGZsZXhTZXR0aW5ncz86IEZsZXhTZXR0aW5ncztcblx0c3Rhc2hlZD86IGJvb2xlYW47XG5cdGxldmVsOiBudW1iZXI7XG5cdGNvbnRlbnQ/OiBBcnJheTxPYmplY3RQYWdlU3ViU2VjdGlvbj47XG5cdHNpZGVDb250ZW50PzogU2lkZUNvbnRlbnREZWY7XG5cdG9iamVjdFBhZ2VMYXp5TG9hZGVyRW5hYmxlZDogYm9vbGVhbjtcblx0Y2xhc3M/OiBzdHJpbmc7XG5cdGFwcGx5U3RhdGU/OiBzdHJpbmc7XG5cdHJldHJpZXZlU3RhdGU/OiBzdHJpbmc7XG59O1xuXG50eXBlIFVuc3VwcG9ydGVkU3ViU2VjdGlvbiA9IEJhc2VTdWJTZWN0aW9uICYge1xuXHR0eXBlOiBTdWJTZWN0aW9uVHlwZS5Vbmtub3duO1xuXHR0ZXh0OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBEYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb24gPSBCYXNlU3ViU2VjdGlvbiAmIHtcblx0dHlwZTogU3ViU2VjdGlvblR5cGUuRGF0YVZpc3VhbGl6YXRpb247XG5cdHByZXNlbnRhdGlvbjogRGF0YVZpc3VhbGl6YXRpb25EZWZpbml0aW9uO1xuXHRpc1BhcnRPZlByZXZpZXc/OiBib29sZWFuO1xuXHRzaG93U3ViU2VjdGlvblRpdGxlOiBib29sZWFuIHwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdGRhdGFWaXN1YWxpemF0aW9uVGl0bGVWaXNpYmxlPzogc3RyaW5nIHwgYm9vbGVhbjtcblx0ZGF0YVZpc3VhbGl6YXRpb25PcHRpb25zPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59O1xuXG50eXBlIENvbnRhY3RTdWJTZWN0aW9uID0gVW5zdXBwb3J0ZWRTdWJTZWN0aW9uO1xudHlwZSBOb3RlU3ViU2VjdGlvbiA9IEJhc2VTdWJTZWN0aW9uICYge1xuXHR0eXBlOiBTdWJTZWN0aW9uVHlwZS5Ob3Rlcztcbn07XG50eXBlIFhNTEZyYWdtZW50U3ViU2VjdGlvbiA9IE9taXQ8QmFzZVN1YlNlY3Rpb24sIFwiYW5ub3RhdGlvblBhdGhcIj4gJiB7XG5cdHR5cGU6IFN1YlNlY3Rpb25UeXBlLlhNTEZyYWdtZW50O1xuXHR0ZW1wbGF0ZTogc3RyaW5nO1xuXHRhY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+O1xufTtcblxudHlwZSBSZXVzZUNvbXBvbmVudFN1YlNlY3Rpb24gPSBCYXNlU3ViU2VjdGlvbiAmIHtcblx0dHlwZTogU3ViU2VjdGlvblR5cGUuRW1iZWRkZWRDb21wb25lbnQ7XG5cdGNvbXBvbmVudE5hbWU6IHN0cmluZztcblx0c2V0dGluZ3M6IHN0cmluZztcbn07XG5cbnR5cGUgUGxhY2Vob2xkZXJGcmFnbWVudFN1YlNlY3Rpb24gPSBPbWl0PEJhc2VTdWJTZWN0aW9uLCBcImFubm90YXRpb25QYXRoXCI+ICYge1xuXHR0eXBlOiBTdWJTZWN0aW9uVHlwZS5QbGFjZWhvbGRlcjtcblx0YWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPjtcbn07XG5cbmV4cG9ydCB0eXBlIE1peGVkU3ViU2VjdGlvbiA9IEJhc2VTdWJTZWN0aW9uICYge1xuXHR0eXBlOiBTdWJTZWN0aW9uVHlwZS5NaXhlZDtcblx0Y29udGVudDogQXJyYXk8T2JqZWN0UGFnZVN1YlNlY3Rpb24+O1xufTtcblxuZXhwb3J0IHR5cGUgRm9ybVN1YlNlY3Rpb24gPSBCYXNlU3ViU2VjdGlvbiAmIHtcblx0dHlwZTogU3ViU2VjdGlvblR5cGUuRm9ybTtcblx0Zm9ybURlZmluaXRpb246IEZvcm1EZWZpbml0aW9uO1xuXHRhY3Rpb25zOiBCYXNlQWN0aW9uW107XG5cdGNvbW1hbmRBY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+O1xufTtcblxuZXhwb3J0IHR5cGUgT2JqZWN0UGFnZVNlY3Rpb24gPSBDb25maWd1cmFibGVPYmplY3QgJiB7XG5cdGlkOiBzdHJpbmc7XG5cdHRpdGxlOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0c2hvd1RpdGxlPzogYm9vbGVhbjtcblx0dmlzaWJsZTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdHN1YlNlY3Rpb25zOiBPYmplY3RQYWdlU3ViU2VjdGlvbltdO1xuXHR1c2VTaW5nbGVUZXh0QXJlYUZpZWxkQXNOb3Rlcz86IGJvb2xlYW47XG5cdGFwcGx5U3RhdGU/OiBzdHJpbmc7XG5cdHJldHJpZXZlU3RhdGU/OiBzdHJpbmc7XG59O1xuXG50eXBlIFNpZGVDb250ZW50RGVmID0ge1xuXHR0ZW1wbGF0ZT86IHN0cmluZztcblx0aWQ/OiBzdHJpbmc7XG5cdHNpZGVDb250ZW50RmFsbERvd24/OiBzdHJpbmc7XG5cdGNvbnRhaW5lclF1ZXJ5Pzogc3RyaW5nO1xuXHR2aXNpYmxlPzogYm9vbGVhbjtcblx0ZXF1YWxTcGxpdD86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBDdXN0b21PYmplY3RQYWdlU2VjdGlvbiA9IEN1c3RvbUVsZW1lbnQ8T2JqZWN0UGFnZVNlY3Rpb24+ICYge1xuXHRvblNlY3Rpb25Mb2FkZWQ/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBDdXN0b21PYmplY3RQYWdlU3ViU2VjdGlvbiA9IEN1c3RvbUVsZW1lbnQ8T2JqZWN0UGFnZVN1YlNlY3Rpb24+O1xuXG5jb25zdCB2aXN1YWxpemF0aW9uVGVybXM6IHN0cmluZ1tdID0gW1xuXHRVSUFubm90YXRpb25UZXJtcy5MaW5lSXRlbSxcblx0VUlBbm5vdGF0aW9uVGVybXMuQ2hhcnQsXG5cdFVJQW5ub3RhdGlvblRlcm1zLlByZXNlbnRhdGlvblZhcmlhbnQsXG5cdFVJQW5ub3RhdGlvblRlcm1zLlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQsXG5cdFVJQW5ub3RhdGlvblRlcm1zLk5vdGVcbl07XG5cbi8qKlxuICogQ3JlYXRlIHN1YnNlY3Rpb25zIGJhc2VkIG9uIGZhY2V0IGRlZmluaXRpb24uXG4gKiBAcGFyYW0gZmFjZXRDb2xsZWN0aW9uIENvbGxlY3Rpb24gb2YgZmFjZXRzXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSBpc0hlYWRlclNlY3Rpb24gVHJ1ZSBpZiBoZWFkZXIgc2VjdGlvbiBpcyBnZW5lcmF0ZWQgaW4gdGhpcyBpdGVyYXRpb25cbiAqIEBwYXJhbSB1c2VTaW5nbGVUZXh0QXJlYUZpZWxkQXNOb3RlcyBJZiB0aGUgb25seSBmaWVsZCB3aXRoaW4gYSBmb3JtIGNvbnRhaW5lciBpcyBhIHRleHQtYXJlYSBmaWVsZCwgdGhlIGxhYmVsIGlzIGhpZGRlblxuICogQHJldHVybnMgVGhlIGN1cnJlbnQgc3Vic2VjdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVN1YlNlY3Rpb25zKFxuXHRmYWNldENvbGxlY3Rpb246IEZhY2V0VHlwZXNbXSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRpc0hlYWRlclNlY3Rpb24/OiBib29sZWFuLFxuXHR1c2VTaW5nbGVUZXh0QXJlYUZpZWxkQXNOb3Rlcz86IGJvb2xlYW5cbik6IE9iamVjdFBhZ2VTdWJTZWN0aW9uW10ge1xuXHQvLyBGaXJzdCB3ZSBkZXRlcm1pbmUgd2hpY2ggc3ViIHNlY3Rpb24gd2UgbmVlZCB0byBjcmVhdGVcblx0Y29uc3QgZmFjZXRzVG9DcmVhdGUgPSBmYWNldENvbGxlY3Rpb24ucmVkdWNlKChmYWNldHNUb0NyZWF0ZTogRmFjZXRUeXBlc1tdLCBmYWNldERlZmluaXRpb24pID0+IHtcblx0XHRzd2l0Y2ggKGZhY2V0RGVmaW5pdGlvbi4kVHlwZSkge1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5SZWZlcmVuY2VGYWNldDpcblx0XHRcdFx0ZmFjZXRzVG9DcmVhdGUucHVzaChmYWNldERlZmluaXRpb24pO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuQ29sbGVjdGlvbkZhY2V0OlxuXHRcdFx0XHQvLyBUT0RPIElmIHRoZSBDb2xsZWN0aW9uIEZhY2V0IGhhcyBhIGNoaWxkIG9mIHR5cGUgQ29sbGVjdGlvbiBGYWNldCB3ZSBicmluZyB0aGVtIHVwIG9uZSBsZXZlbCAoRm9ybSArIFRhYmxlIHVzZSBjYXNlKSA/XG5cdFx0XHRcdC8vIGZpcnN0IGNhc2UgZmFjZXQgQ29sbGVjdGlvbiBpcyBjb21iaW5hdGlvbiBvZiBjb2xsZWN0aW9uIGFuZCByZWZlcmVuY2UgZmFjZXQgb3Igbm90IGFsbCBmYWNldHMgYXJlIHJlZmVyZW5jZSBmYWNldHMuXG5cdFx0XHRcdGlmIChmYWNldERlZmluaXRpb24uRmFjZXRzLmZpbmQoKGZhY2V0VHlwZSkgPT4gZmFjZXRUeXBlLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5Db2xsZWN0aW9uRmFjZXQpKSB7XG5cdFx0XHRcdFx0ZmFjZXRzVG9DcmVhdGUuc3BsaWNlKGZhY2V0c1RvQ3JlYXRlLmxlbmd0aCwgMCwgLi4uZmFjZXREZWZpbml0aW9uLkZhY2V0cyk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZmFjZXRzVG9DcmVhdGUucHVzaChmYWNldERlZmluaXRpb24pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5SZWZlcmVuY2VVUkxGYWNldDpcblx0XHRcdFx0Ly8gTm90IHN1cHBvcnRlZFxuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdFx0cmV0dXJuIGZhY2V0c1RvQ3JlYXRlO1xuXHR9LCBbXSk7XG5cblx0Ly8gVGhlbiB3ZSBjcmVhdGUgdGhlIGFjdHVhbCBzdWJzZWN0aW9uc1xuXHRyZXR1cm4gZmFjZXRzVG9DcmVhdGUubWFwKChmYWNldCkgPT5cblx0XHRjcmVhdGVTdWJTZWN0aW9uKFxuXHRcdFx0ZmFjZXQsXG5cdFx0XHRmYWNldHNUb0NyZWF0ZSxcblx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHQwLFxuXHRcdFx0IShmYWNldCBhcyBDb2xsZWN0aW9uRmFjZXQpPy5GYWNldHM/Lmxlbmd0aCxcblx0XHRcdGlzSGVhZGVyU2VjdGlvbixcblx0XHRcdHVzZVNpbmdsZVRleHRBcmVhRmllbGRBc05vdGVzXG5cdFx0KVxuXHQpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgc3Vic2VjdGlvbnMgYmFzZWQgb24gdGhlIGRlZmluaXRpb24gb2YgdGhlIGN1c3RvbSBoZWFkZXIgZmFjZXQuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBjdXJyZW50IHN1YnNlY3Rpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDdXN0b21IZWFkZXJGYWNldFN1YlNlY3Rpb25zKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pik6IE9iamVjdFBhZ2VTdWJTZWN0aW9uW10ge1xuXHRjb25zdCBjdXN0b21IZWFkZXJGYWNldHM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbU9iamVjdFBhZ2VIZWFkZXJGYWNldD4gPSBnZXRIZWFkZXJGYWNldHNGcm9tTWFuaWZlc3QoXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5nZXRIZWFkZXJGYWNldHMoKVxuXHQpO1xuXHRjb25zdCBhQ3VzdG9tSGVhZGVyRmFjZXRzOiBDdXN0b21PYmplY3RQYWdlSGVhZGVyRmFjZXRbXSA9IFtdO1xuXHRPYmplY3Qua2V5cyhjdXN0b21IZWFkZXJGYWNldHMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuXHRcdGFDdXN0b21IZWFkZXJGYWNldHMucHVzaChjdXN0b21IZWFkZXJGYWNldHNba2V5XSk7XG5cdFx0cmV0dXJuIGFDdXN0b21IZWFkZXJGYWNldHM7XG5cdH0pO1xuXHRjb25zdCBmYWNldHNUb0NyZWF0ZSA9IGFDdXN0b21IZWFkZXJGYWNldHMucmVkdWNlKChmYWNldHNUb0NyZWF0ZTogQ3VzdG9tT2JqZWN0UGFnZUhlYWRlckZhY2V0W10sIGN1c3RvbUhlYWRlckZhY2V0KSA9PiB7XG5cdFx0aWYgKGN1c3RvbUhlYWRlckZhY2V0LnRlbXBsYXRlRWRpdCkge1xuXHRcdFx0ZmFjZXRzVG9DcmVhdGUucHVzaChjdXN0b21IZWFkZXJGYWNldCk7XG5cdFx0fVxuXHRcdHJldHVybiBmYWNldHNUb0NyZWF0ZTtcblx0fSwgW10pO1xuXG5cdHJldHVybiBmYWNldHNUb0NyZWF0ZS5tYXAoKGN1c3RvbUhlYWRlckZhY2V0KSA9PiBjcmVhdGVDdXN0b21IZWFkZXJGYWNldFN1YlNlY3Rpb24oY3VzdG9tSGVhZGVyRmFjZXQpKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgc3Vic2VjdGlvbiBiYXNlZCBvbiBhIGN1c3RvbSBoZWFkZXIgZmFjZXQuXG4gKiBAcGFyYW0gY3VzdG9tSGVhZGVyRmFjZXQgQSBjdXN0b20gaGVhZGVyIGZhY2V0XG4gKiBAcmV0dXJucyBBIGRlZmluaXRpb24gZm9yIGEgc3Vic2VjdGlvblxuICovXG5mdW5jdGlvbiBjcmVhdGVDdXN0b21IZWFkZXJGYWNldFN1YlNlY3Rpb24oY3VzdG9tSGVhZGVyRmFjZXQ6IEN1c3RvbU9iamVjdFBhZ2VIZWFkZXJGYWNldCk6IE9iamVjdFBhZ2VTdWJTZWN0aW9uIHtcblx0Y29uc3Qgc3ViU2VjdGlvbklEID0gZ2V0Q3VzdG9tU3ViU2VjdGlvbklEKGN1c3RvbUhlYWRlckZhY2V0LmtleSk7XG5cdGNvbnN0IHN1YlNlY3Rpb246IFhNTEZyYWdtZW50U3ViU2VjdGlvbiA9IHtcblx0XHRpZDogc3ViU2VjdGlvbklELFxuXHRcdGtleTogY3VzdG9tSGVhZGVyRmFjZXQua2V5LFxuXHRcdHRpdGxlOiBjdXN0b21IZWFkZXJGYWNldC50aXRsZSxcblx0XHR0eXBlOiBTdWJTZWN0aW9uVHlwZS5YTUxGcmFnbWVudCxcblx0XHR0ZW1wbGF0ZTogY3VzdG9tSGVhZGVyRmFjZXQudGVtcGxhdGVFZGl0IHx8IFwiXCIsXG5cdFx0dmlzaWJsZTogY3VzdG9tSGVhZGVyRmFjZXQudmlzaWJsZSxcblx0XHRsZXZlbDogMSxcblx0XHRzaWRlQ29udGVudDogdW5kZWZpbmVkLFxuXHRcdHN0YXNoZWQ6IGN1c3RvbUhlYWRlckZhY2V0LnN0YXNoZWQsXG5cdFx0ZmxleFNldHRpbmdzOiBjdXN0b21IZWFkZXJGYWNldC5mbGV4U2V0dGluZ3MsXG5cdFx0YWN0aW9uczoge30sXG5cdFx0b2JqZWN0UGFnZUxhenlMb2FkZXJFbmFibGVkOiBmYWxzZVxuXHR9O1xuXHRyZXR1cm4gc3ViU2VjdGlvbjtcbn1cblxuY29uc3QgZ2V0U3ViU2VjdGlvbktleSA9IChmYWNldERlZmluaXRpb246IEZhY2V0VHlwZXMsIGZhbGxiYWNrOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuXHRyZXR1cm4gZmFjZXREZWZpbml0aW9uLklEPy50b1N0cmluZygpIHx8IGZhY2V0RGVmaW5pdGlvbi5MYWJlbD8udG9TdHJpbmcoKSB8fCBmYWxsYmFjaztcbn07XG4vKipcbiAqIEFkZHMgRm9ybSBtZW51IGFjdGlvbiB0byBhbGwgZm9ybSBhY3Rpb25zLCByZW1vdmVzIGR1cGxpY2F0ZSBhY3Rpb25zIGFuZCBoaWRkZW4gYWN0aW9ucy5cbiAqIEBwYXJhbSBhY3Rpb25zIFRoZSBhY3Rpb25zIGludm9sdmVkXG4gKiBAcGFyYW0gZmFjZXREZWZpbml0aW9uIFRoZSBkZWZpbml0aW9uIGZvciB0aGUgZmFjZXRcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgVGhlIGZvcm0gbWVudSBhY3Rpb25zXG4gKi9cbmZ1bmN0aW9uIGFkZEZvcm1NZW51QWN0aW9ucyhcblx0YWN0aW9uczogQmFzZUFjdGlvbltdLFxuXHRmYWNldERlZmluaXRpb246IEZhY2V0VHlwZXMsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogQ29tYmluZWRBY3Rpb24ge1xuXHQvLyBhbm5vdGF0aW9uIGFjdGlvbnMgcG9zc2libHkgaGFzIEN1c3RvbUFjdGlvbnMsIHdoaWNoIGFyZSBhZGRlZCBhdCBTdWJzZWN0aW9uLnRzI2NyZWF0ZUZvcm1BY3Rpb25SZWR1Y2VyXG5cdC8vIHRob3NlIGFjdGlvbiBhcmUgaW5jb3JyZWN0IGFuZCBjYXVzZSB1bndhbnRlZCByZXN1bHRzLCBzbyB3ZSBuZWVkIHRvIGNhcmVmdWxseSByZW1vdmUgaW5jb3JyZWN0IG9uZXMgaGVyZVxuXHRmb3IgKGxldCByZXZlcnNlSW5kZXggPSBhY3Rpb25zLmxlbmd0aCAtIDE7IHJldmVyc2VJbmRleCA+PSAwOyByZXZlcnNlSW5kZXgtLSkge1xuXHRcdGlmIChcblx0XHRcdGFjdGlvbnNbcmV2ZXJzZUluZGV4XS5pZD8uc3RhcnRzV2l0aChcIkN1c3RvbUFjdGlvbjo6XCIpICYmXG5cdFx0XHQoYWN0aW9uc1tyZXZlcnNlSW5kZXhdLmtleS5zdGFydHNXaXRoKFwiRGF0YUZpZWxkRm9yQWN0aW9uOjpcIikgfHxcblx0XHRcdFx0YWN0aW9uc1tyZXZlcnNlSW5kZXhdLmtleS5zdGFydHNXaXRoKFwiRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uOjpcIikpXG5cdFx0KSB7XG5cdFx0XHRhY3Rpb25zLnNwbGljZShyZXZlcnNlSW5kZXgsIDEpO1xuXHRcdH1cblx0fVxuXHRjb25zdCBoaWRkZW5BY3Rpb25zOiBCYXNlQWN0aW9uW10gPSBnZXRGb3JtSGlkZGVuQWN0aW9ucyhmYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpIHx8IFtdLFxuXHRcdGFjdGlvbk92ZXJ3cml0ZUNvbmZpZzogT3ZlcnJpZGVUeXBlQWN0aW9uID0ge1xuXHRcdFx0ZW5hYmxlZDogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRcdHZpc2libGU6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0XHRjb21tYW5kOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdFx0cG9zaXRpb246IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0XHRtZW51OiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdFx0cHJpb3JpdHk6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0XHRncm91cDogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRcdG92ZXJmbG93R3JvdXA6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0XHRkaXNhYmxlU3RyaWN0SGFuZGxpbmc6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGVcblx0XHR9LFxuXHRcdGZvcm1BY3Rpb25zOiBDb25maWd1cmFibGVSZWNvcmQ8TWFuaWZlc3RBY3Rpb24+ID0gZ2V0Rm9ybUFjdGlvbnMoZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHQvLyAxLiBHZXQgYWN0aW9ucyBmcm9tIGFubm90YXRpb25zIC0+IGFjdGlvbnMgYXJlIHBhc3NlZCB0byB0aGlzIG1ldGhvZFxuXHRcdC8vIDIuIEdldCBhY3Rpb25zIGZyb20gbWFuaWZlc3Rcblx0XHRtYW5pZmVzdEFjdGlvbnMgPSBnZXRBY3Rpb25zRnJvbU1hbmlmZXN0KGZvcm1BY3Rpb25zLCBjb252ZXJ0ZXJDb250ZXh0LCBhY3Rpb25zLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgaGlkZGVuQWN0aW9ucyksXG5cdFx0Ly8gMy4gR2V0IGFsbCBhbm5vdGF0aW9uIG1lbnUgaXRlbXNcblx0XHRhbm5vdGF0aW9uTWVudUFjdGlvbkl0ZW1zID0gZ2V0QW5ub3RhdGlvbk1lbnVBY3Rpb25JdGVtcyhhY3Rpb25zKSxcblx0XHQvLyA0LiBGaW5kIG1hbmlmZXN0IGFjdGlvbnMgd2hpY2ggb3ZlcnJpZGUgYW55IGFubm90YXRpb24gbWVudSBpdGVtc1xuXHRcdG1hdGNoaW5nTWFuaWZlc3RBY3Rpb25zID0gZ2V0TWF0Y2hpbmdNYW5pZmVzdEFjdGlvbihhbm5vdGF0aW9uTWVudUFjdGlvbkl0ZW1zLCBtYW5pZmVzdEFjdGlvbnMuYWN0aW9ucyksXG5cdFx0Ly8gNS4gR2V0IG92ZXJyaWRkZW4gYW5ub3RhdGlvbiBtZW51IGl0ZW1zXG5cdFx0b3ZlcndyaXR0ZW5NZW51QWN0aW9uSXRlbXMgPSBpbnNlcnRDdXN0b21FbGVtZW50cyhcblx0XHRcdGFubm90YXRpb25NZW51QWN0aW9uSXRlbXMsXG5cdFx0XHRtYXRjaGluZ01hbmlmZXN0QWN0aW9ucyxcblx0XHRcdGFjdGlvbk92ZXJ3cml0ZUNvbmZpZ1xuXHRcdCkgYXMgQ3VzdG9tQWN0aW9uW107XG5cdC8vIElmIHRoZXJlIGlzIGEgbWFuaWZlc3QgYWN0aW9uIGRlZmluZWQgZm9yIGEgbmVpZ2hib3VyaW5nIHJlZmVyZW5jZSBmYWNldCwgaXQgd291bGQgbm90IGJlIHBhcnQgb2YgbWFuaWZlc3QgYWN0aW9ucyBoZXJlXG5cdC8vIEluIHRoaXMgZm9yLWxvb3AsIGVuc3VyaW5nIGEgcHVyZSBtYW5pZmVzdCBhY3Rpb24gY29taW5nIGZyb20gYW5vdGhlciByZWZlcmVuY2UgZmFjZXQgaXMgbm90IGxvc3Rcblx0Zm9yIChsZXQgcmV2ZXJzZUluZGV4ID0gYWN0aW9ucy5sZW5ndGggLSAxOyByZXZlcnNlSW5kZXggPj0gMDsgcmV2ZXJzZUluZGV4LS0pIHtcblx0XHRpZiAoYWN0aW9uc1tyZXZlcnNlSW5kZXhdLmlkPy5zdGFydHNXaXRoKFwiQ3VzdG9tQWN0aW9uOjpcIikpIHtcblx0XHRcdGZvciAoY29uc3QgbWFuaWZlc3RBY3Rpb24gaW4gbWFuaWZlc3RBY3Rpb25zLmFjdGlvbnMpIHtcblx0XHRcdFx0aWYgKG1hbmlmZXN0QWN0aW9uID09PSBhY3Rpb25zW3JldmVyc2VJbmRleF0ua2V5KSB7XG5cdFx0XHRcdFx0YWN0aW9ucy5zcGxpY2UocmV2ZXJzZUluZGV4LCAxKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHQvLyA2LiBPdmVycmlkZSBhbGwgYWN0aW9uc1xuXHRsZXQgZm9ybUFsbEFjdGlvbnMgPSBpbnNlcnRDdXN0b21FbGVtZW50cyhhY3Rpb25zLCBtYW5pZmVzdEFjdGlvbnMuYWN0aW9ucywgYWN0aW9uT3ZlcndyaXRlQ29uZmlnKSBhcyBDdXN0b21BY3Rpb25bXTtcblx0Ly8gNy4gUmVwbGFjZSBvcmlnaW5hbCBtZW51IGl0ZW1zIHdpdGggdGhlaXIgY29ycmVzcG9uZGluZyBvdmVycmlkZGVuIG1lbnUgaXRlbXNcblx0cHJlcGFyZU1lbnVBY3Rpb25zKGZvcm1BbGxBY3Rpb25zLCBvdmVyd3JpdHRlbk1lbnVBY3Rpb25JdGVtcyk7XG5cdC8vIDguIFJlbW92ZSBkdXBsaWNhdGUgYWN0aW9ucyB3aGljaCBhcmUgbWVudSBpdGVtc1xuXHRmb3JtQWxsQWN0aW9ucyA9IHJlbW92ZUR1cGxpY2F0ZUFjdGlvbnMoZm9ybUFsbEFjdGlvbnMpO1xuXHQvLyA5LiBIaWRlIG1lbnVzIHdoZXJlIGFsbCBtZW51IGl0ZW1zIGFyZSBoaWRkZW5cblx0Zm9ybUFsbEFjdGlvbnMgPSBnZXRWaXNpYmlsaXR5RW5hYmxlbWVudE1lbnVBY3Rpb25zKGZvcm1BbGxBY3Rpb25zKTtcblx0Ly8gMTAuIEFwcGx5IHByaW1hcnkgYWN0aW9uIG92ZXJmbG93IHByb3RlY3Rpb25cblx0Zm9ybUFsbEFjdGlvbnMgPSBBY3Rpb25VdGlsaXRpZXMuZW5zdXJlUHJpbWFyeUFjdGlvbk5ldmVyT3ZlcmZsb3dzKGZvcm1BbGxBY3Rpb25zKSBhcyBDdXN0b21BY3Rpb25bXTtcblx0Ly8gMTEuIChPbmx5IGZvciB0aGlzIHN1YnNlY3Rpb24gVUkgYXJlYSkgZGVmYXVsdEFjdGlvbiBvZiBhIG1lbnUgbXVzdCBiZSBvZiB0eXBlIEFjdGlvblR5cGUuRGVmYXVsdFxuXHRmb3JtQWxsQWN0aW9ucy5mb3JFYWNoKChhY3Rpb24pID0+IHtcblx0XHRpZiAoYWN0aW9uLnR5cGUgPT09IEFjdGlvblR5cGUuTWVudSAmJiAhIWFjdGlvbi5kZWZhdWx0QWN0aW9uKSB7XG5cdFx0XHQoYWN0aW9uLmRlZmF1bHRBY3Rpb24gYXMgQ3VzdG9tQWN0aW9uKS50eXBlID0gQWN0aW9uVHlwZS5EZWZhdWx0O1xuXHRcdH1cblx0fSk7XG5cblx0cmV0dXJuIHtcblx0XHRhY3Rpb25zOiBmb3JtQWxsQWN0aW9ucyA/PyBhY3Rpb25zLFxuXHRcdGNvbW1hbmRBY3Rpb25zOiBtYW5pZmVzdEFjdGlvbnMuY29tbWFuZEFjdGlvbnNcblx0fTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGFjdGlvbiBmb3JtIGEgZmFjZXQuXG4gKiBAcGFyYW0gZmFjZXREZWZpbml0aW9uXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMgVGhlIGN1cnJlbnQgZmFjZXQgYWN0aW9uc1xuICovXG5mdW5jdGlvbiBnZXRGYWNldEFjdGlvbnMoZmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzLCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiBDb21iaW5lZEFjdGlvbiB7XG5cdGxldCBhY3Rpb25zOiBCYXNlQWN0aW9uW10gPSBbXTtcblx0c3dpdGNoIChmYWNldERlZmluaXRpb24uJFR5cGUpIHtcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkNvbGxlY3Rpb25GYWNldDpcblx0XHRcdGFjdGlvbnMgPSAoXG5cdFx0XHRcdGZhY2V0RGVmaW5pdGlvbi5GYWNldHMuZmlsdGVyKChzdWJGYWNldERlZmluaXRpb24pID0+IGlzUmVmZXJlbmNlRmFjZXQoc3ViRmFjZXREZWZpbml0aW9uKSkgYXMgUmVmZXJlbmNlRmFjZXRUeXBlc1tdXG5cdFx0XHQpLnJlZHVjZShcblx0XHRcdFx0KGFjdGlvblJlZHVjZXI6IEJhc2VBY3Rpb25bXSwgcmVmZXJlbmNlRmFjZXQpID0+IGNyZWF0ZUZvcm1BY3Rpb25SZWR1Y2VyKGFjdGlvblJlZHVjZXIsIHJlZmVyZW5jZUZhY2V0LCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdFx0W11cblx0XHRcdCk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLlJlZmVyZW5jZUZhY2V0OlxuXHRcdFx0YWN0aW9ucyA9IGNyZWF0ZUZvcm1BY3Rpb25SZWR1Y2VyKFtdLCBmYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpO1xuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdGJyZWFrO1xuXHR9XG5cdGNvbnN0IGNvbWJpbmVkQWN0aW9ucyA9IGFkZEZvcm1NZW51QWN0aW9ucyhhY3Rpb25zLCBmYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBzZWN0aW9uc0luTWFuaWZlc3QgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmdldFNlY3Rpb25zKCk7XG5cdGNvbnN0IGZhY2V0T3ZlcmZsb3dHcm91cHNDb25maWcgPSBzZWN0aW9uc0luTWFuaWZlc3Q/LltmYWNldERlZmluaXRpb24uSUQgYXMgc3RyaW5nXT8ub3ZlcmZsb3dHcm91cHMgYXMgT3ZlcmZsb3dHcm91cHNDb25maWd1cmF0aW9uO1xuXHRjb21iaW5lZEFjdGlvbnMuYWN0aW9ucyA9IGFkZFNlcGFyYXRvcnMoY29tYmluZWRBY3Rpb25zLmFjdGlvbnMsIGZhY2V0T3ZlcmZsb3dHcm91cHNDb25maWcpO1xuXHRyZXR1cm4gY29tYmluZWRBY3Rpb25zO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSBidXR0b24gdHlwZSBiYXNlZCBvbiBAVUkuRW1waGFzaXplZCBhbm5vdGF0aW9uLlxuICogQHBhcmFtIGVtcGhhc2l6ZWQgRW1waGFzaXplZCBhbm5vdGF0aW9uIHZhbHVlLlxuICogQHJldHVybnMgVGhlIGJ1dHRvbiB0eXBlIG9yIHBhdGggYmFzZWQgZXhwcmVzc2lvbi5cbiAqL1xuZnVuY3Rpb24gZ2V0QnV0dG9uVHlwZShlbXBoYXNpemVkOiBFbXBoYXNpemVkIHwgdW5kZWZpbmVkKTogQnV0dG9uVHlwZSB7XG5cdC8vIEVtcGhhc2l6ZWQgaXMgYSBib29sZWFuIHNvIGlmIGl0J3MgZXF1YWwgdG8gdHJ1ZSB3ZSBzaG93IHRoZSBidXR0b24gYXMgR2hvc3QsIG90aGVyd2lzZSBhcyBUcmFuc3BhcmVudFxuXHRjb25zdCBidXR0b25UeXBlQ29uZGl0aW9uID0gZXF1YWwoZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGVtcGhhc2l6ZWQpLCB0cnVlKTtcblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGlmRWxzZShidXR0b25UeXBlQ29uZGl0aW9uLCBCdXR0b25UeXBlLkdob3N0LCBCdXR0b25UeXBlLlRyYW5zcGFyZW50KSkgYXMgQnV0dG9uVHlwZTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBzdWJzZWN0aW9uIGJhc2VkIG9uIEZhY2V0VHlwZXMuXG4gKiBAcGFyYW0gZmFjZXREZWZpbml0aW9uXG4gKiBAcGFyYW0gZmFjZXRzVG9DcmVhdGVcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gbGV2ZWxcbiAqIEBwYXJhbSBoYXNTaW5nbGVDb250ZW50XG4gKiBAcGFyYW0gaXNIZWFkZXJTZWN0aW9uXG4gKiBAcGFyYW0gdXNlU2luZ2xlVGV4dEFyZWFGaWVsZEFzTm90ZXMgSWYgdGhlIG9ubHkgZmllbGQgd2l0aGluIGEgZm9ybSBjb250YWluZXIgaXMgYSB0ZXh0LWFyZWEgZmllbGQsIHRoZSBsYWJlbCBpcyBoaWRkZW5cbiAqIEByZXR1cm5zIEEgc3Vic2VjdGlvbiBkZWZpbml0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTdWJTZWN0aW9uKFxuXHRmYWNldERlZmluaXRpb246IEZhY2V0VHlwZXMsXG5cdGZhY2V0c1RvQ3JlYXRlOiBGYWNldFR5cGVzW10sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0bGV2ZWw6IG51bWJlcixcblx0aGFzU2luZ2xlQ29udGVudDogYm9vbGVhbixcblx0aXNIZWFkZXJTZWN0aW9uPzogYm9vbGVhbixcblx0dXNlU2luZ2xlVGV4dEFyZWFGaWVsZEFzTm90ZXM/OiBib29sZWFuXG4pOiBPYmplY3RQYWdlU3ViU2VjdGlvbiB7XG5cdGNvbnN0IHN1YlNlY3Rpb25JRCA9IGdldFN1YlNlY3Rpb25JRChmYWNldERlZmluaXRpb24pO1xuXHRjb25zdCBoaWRkZW5Bbm5vdGF0aW9uID0gZmFjZXREZWZpbml0aW9uLmFubm90YXRpb25zPy5VST8uSGlkZGVuO1xuXHRjb25zdCBpc1Zpc2libGVFeHByZXNzaW9uID0gbm90KFxuXHRcdGVxdWFsKFxuXHRcdFx0dHJ1ZSxcblx0XHRcdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihoaWRkZW5Bbm5vdGF0aW9uLCBbXSwgZmFsc2UsIChwYXRoOiBzdHJpbmcpID0+XG5cdFx0XHRcdHNpbmdsZXRvblBhdGhWaXNpdG9yKHBhdGgsIGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVkVHlwZXMoKSwgW10pXG5cdFx0XHQpXG5cdFx0KVxuXHQpO1xuXHRjb25zdCBpc1Zpc2liaWxpdHlEeW5hbWljID0gIWlzQ29uc3RhbnQoaXNWaXNpYmxlRXhwcmVzc2lvbikgJiYgIWlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKGhpZGRlbkFubm90YXRpb24pO1xuXHRjb25zdCB0aXRsZSA9IGZhY2V0RGVmaW5pdGlvbi5MYWJlbCAhPT0gdW5kZWZpbmVkID8gY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGZhY2V0RGVmaW5pdGlvbi5MYWJlbCkpIDogdW5kZWZpbmVkO1xuXHRjb25zdCBzdWJTZWN0aW9uOiBCYXNlU3ViU2VjdGlvbiA9IHtcblx0XHRpZDogc3ViU2VjdGlvbklELFxuXHRcdGtleTogZ2V0U3ViU2VjdGlvbktleShmYWNldERlZmluaXRpb24sIHN1YlNlY3Rpb25JRCksXG5cdFx0dGl0bGU6IHRpdGxlLFxuXHRcdHR5cGU6IFN1YlNlY3Rpb25UeXBlLlVua25vd24sXG5cdFx0YW5ub3RhdGlvblBhdGg6IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChmYWNldERlZmluaXRpb24uZnVsbHlRdWFsaWZpZWROYW1lKSxcblx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihpc1Zpc2libGVFeHByZXNzaW9uKSxcblx0XHRpc1Zpc2liaWxpdHlEeW5hbWljOiBpc1Zpc2liaWxpdHlEeW5hbWljLFxuXHRcdGxldmVsOiBsZXZlbCxcblx0XHRzaWRlQ29udGVudDogdW5kZWZpbmVkLFxuXHRcdG9iamVjdFBhZ2VMYXp5TG9hZGVyRW5hYmxlZDogY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5nZXRFbmFibGVMYXp5TG9hZGluZygpXG5cdH07XG5cdGlmIChpc0hlYWRlclNlY3Rpb24pIHtcblx0XHRzdWJTZWN0aW9uLnN0YXNoZWQgPSBnZXRTdGFzaGVkU2V0dGluZ3NGb3JIZWFkZXJGYWNldChmYWNldERlZmluaXRpb24sIGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0c3ViU2VjdGlvbi5mbGV4U2V0dGluZ3MgPSB7XG5cdFx0XHRkZXNpZ250aW1lOiBnZXREZXNpZ25UaW1lTWV0YWRhdGFTZXR0aW5nc0ZvckhlYWRlckZhY2V0KGZhY2V0RGVmaW5pdGlvbiwgZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KVxuXHRcdH07XG5cdH1cblx0bGV0IHVuc3VwcG9ydGVkVGV4dCA9IFwiXCI7XG5cdGxldmVsKys7XG5cdHN3aXRjaCAoZmFjZXREZWZpbml0aW9uLiRUeXBlKSB7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5Db2xsZWN0aW9uRmFjZXQ6XG5cdFx0XHRjb25zdCBmYWNldHMgPSBmYWNldERlZmluaXRpb24uRmFjZXRzO1xuXG5cdFx0XHQvLyBGaWx0ZXIgZm9yIGFsbCBmYWNldHMgb2YgdGhpcyBzdWJzZWN0aW9uIHRoYXQgYXJlIHJlZmVycmluZyB0byBhbiBhbm5vdGF0aW9uIGRlc2NyaWJpbmcgYSB2aXN1YWxpemF0aW9uIChlLmcuIHRhYmxlIG9yIGNoYXJ0KVxuXHRcdFx0Y29uc3QgdmlzdWFsaXphdGlvbkZhY2V0cyA9IGZhY2V0c1xuXHRcdFx0XHQubWFwKChmYWNldCwgaW5kZXgpID0+ICh7IGluZGV4LCBmYWNldCB9KSkgLy8gUmVtZW1iZXIgdGhlIGluZGV4IGFzc2lnbmVkIHRvIGVhY2ggZmFjZXRcblx0XHRcdFx0LmZpbHRlcigoeyBmYWNldCB9KSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIGlzUmVmZXJlbmNlRmFjZXQoZmFjZXQpICYmIGZhY2V0LlRhcmdldC4kdGFyZ2V0ICYmIHZpc3VhbGl6YXRpb25UZXJtcy5pbmNsdWRlcyhmYWNldC5UYXJnZXQuJHRhcmdldC50ZXJtKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdC8vIEZpbHRlciBvdXQgYWxsIHZpc3VhbGl6YXRpb24gZmFjZXRzOyBcInZpc3VhbGl6YXRpb25GYWNldHNcIiBhbmQgXCJub25WaXN1YWxpemF0aW9uRmFjZXRzXCIgYXJlIGRpc2pvaW50XG5cdFx0XHRjb25zdCBub25WaXN1YWxpemF0aW9uRmFjZXRzID0gZmFjZXRzLmZpbHRlcihcblx0XHRcdFx0KGZhY2V0KSA9PiAhdmlzdWFsaXphdGlvbkZhY2V0cy5maW5kKCh2aXN1YWxpemF0aW9uKSA9PiB2aXN1YWxpemF0aW9uLmZhY2V0ID09PSBmYWNldClcblx0XHRcdCk7XG5cblx0XHRcdGlmICh2aXN1YWxpemF0aW9uRmFjZXRzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Ly8gQ29sbGVjdGlvbkZhY2V0cyB3aXRoIHZpc3VhbGl6YXRpb25zIG11c3QgYmUgaGFuZGxlZCBzZXBhcmF0ZWx5IGFzIHRoZXkgY2Fubm90IGJlIGluY2x1ZGVkIGluIGZvcm1zXG5cdFx0XHRcdGNvbnN0IHZpc3VhbGl6YXRpb25Db250ZW50OiBPYmplY3RQYWdlU3ViU2VjdGlvbltdID0gW107XG5cdFx0XHRcdGNvbnN0IGZvcm1Db250ZW50OiBPYmplY3RQYWdlU3ViU2VjdGlvbltdID0gW107XG5cdFx0XHRcdGNvbnN0IG1peGVkQ29udGVudDogT2JqZWN0UGFnZVN1YlNlY3Rpb25bXSA9IFtdO1xuXG5cdFx0XHRcdC8vIENyZWF0ZSBlYWNoIHZpc3VhbGl6YXRpb24gZmFjZXQgYXMgaWYgaXQgd2FzIGl0cyBvd24gc3Vic2VjdGlvbiAodmlhIHJlY3Vyc2lvbiksIGFuZCBrZWVwIHRoZWlyIHJlbGF0aXZlIG9yZGVyaW5nXG5cdFx0XHRcdGZvciAoY29uc3QgeyBmYWNldCB9IG9mIHZpc3VhbGl6YXRpb25GYWNldHMpIHtcblx0XHRcdFx0XHR2aXN1YWxpemF0aW9uQ29udGVudC5wdXNoKGNyZWF0ZVN1YlNlY3Rpb24oZmFjZXQsIFtdLCBjb252ZXJ0ZXJDb250ZXh0LCBsZXZlbCwgdHJ1ZSwgaXNIZWFkZXJTZWN0aW9uKSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAobm9uVmlzdWFsaXphdGlvbkZhY2V0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0Ly8gVGhpcyBzdWJzZWN0aW9uIGluY2x1ZGVzIHZpc3VhbGl6YXRpb25zIGFuZCBvdGhlciBjb250ZW50LCBzbyBpdCBpcyBhIFwiTWl4ZWRcIiBzdWJzZWN0aW9uXG5cdFx0XHRcdFx0TG9nLndhcm5pbmcoXG5cdFx0XHRcdFx0XHRgV2FybmluZzogQ29sbGVjdGlvbkZhY2V0ICcke2ZhY2V0RGVmaW5pdGlvbi5JRH0nIGluY2x1ZGVzIGEgY29tYmluYXRpb24gb2YgZWl0aGVyIGEgY2hhcnQgb3IgYSB0YWJsZSBhbmQgb3RoZXIgY29udGVudC4gVGhpcyBjYW4gbGVhZCB0byByZW5kZXJpbmcgaXNzdWVzLiBDb25zaWRlciBtb3ZpbmcgdGhlIGNoYXJ0IG9yIHRhYmxlIGludG8gYSBzZXBhcmF0ZSBDb2xsZWN0aW9uRmFjZXQuYFxuXHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRjb25zdCBmYWtlRm9ybUZhY2V0ID0geyAuLi5mYWNldERlZmluaXRpb24gfTtcblx0XHRcdFx0XHRmYWtlRm9ybUZhY2V0LkZhY2V0cyA9IG5vblZpc3VhbGl6YXRpb25GYWNldHM7XG5cdFx0XHRcdFx0Ly8gQ3JlYXRlIGEgam9pbmVkIGZvcm0gb2YgYWxsIGZhY2V0cyB0aGF0IGFyZSBub3QgcmVmZXJyaW5nIHRvIHZpc3VhbGl6YXRpb25zXG5cdFx0XHRcdFx0Zm9ybUNvbnRlbnQucHVzaChjcmVhdGVTdWJTZWN0aW9uKGZha2VGb3JtRmFjZXQsIFtdLCBjb252ZXJ0ZXJDb250ZXh0LCBsZXZlbCwgaGFzU2luZ2xlQ29udGVudCwgaXNIZWFkZXJTZWN0aW9uKSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBNZXJnZSB0aGUgdmlzdWFsaXphdGlvbiBjb250ZW50IHdpdGggdGhlIGZvcm0gY29udGVudFxuXHRcdFx0XHRpZiAodmlzdWFsaXphdGlvbkZhY2V0cy5maW5kKCh7IGluZGV4IH0pID0+IGluZGV4ID09PSAwKSkge1xuXHRcdFx0XHRcdC8vIElmIHRoZSBmaXJzdCBmYWNldCBpcyBhIHZpc3VhbGl6YXRpb24sIGRpc3BsYXkgdGhlIHZpc3VhbGl6YXRpb25zIGZpcnN0XG5cdFx0XHRcdFx0bWl4ZWRDb250ZW50LnB1c2goLi4udmlzdWFsaXphdGlvbkNvbnRlbnQpO1xuXHRcdFx0XHRcdG1peGVkQ29udGVudC5wdXNoKC4uLmZvcm1Db250ZW50KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBPdGhlcndpc2UsIGRpc3BsYXkgdGhlIGZvcm0gZmlyc3Rcblx0XHRcdFx0XHRtaXhlZENvbnRlbnQucHVzaCguLi5mb3JtQ29udGVudCk7XG5cdFx0XHRcdFx0bWl4ZWRDb250ZW50LnB1c2goLi4udmlzdWFsaXphdGlvbkNvbnRlbnQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgbWl4ZWRTdWJTZWN0aW9uOiBNaXhlZFN1YlNlY3Rpb24gPSB7XG5cdFx0XHRcdFx0Li4uc3ViU2VjdGlvbixcblx0XHRcdFx0XHR0eXBlOiBTdWJTZWN0aW9uVHlwZS5NaXhlZCxcblx0XHRcdFx0XHRsZXZlbDogbGV2ZWwsXG5cdFx0XHRcdFx0Y29udGVudDogbWl4ZWRDb250ZW50XG5cdFx0XHRcdH07XG5cdFx0XHRcdHJldHVybiBtaXhlZFN1YlNlY3Rpb247XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBUaGlzIENvbGxlY3Rpb25GYWNldCBvbmx5IGluY2x1ZGVzIGNvbnRlbnQgdGhhdCBjYW4gYmUgcmVuZGVyZWQgaW4gYSBtZXJnZWQgZm9ybVxuXHRcdFx0XHRjb25zdCBmYWNldEFjdGlvbnMgPSBnZXRGYWNldEFjdGlvbnMoZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdFx0XHRmb3JtQ29sbGVjdGlvblN1YlNlY3Rpb246IEZvcm1TdWJTZWN0aW9uID0ge1xuXHRcdFx0XHRcdFx0Li4uc3ViU2VjdGlvbixcblx0XHRcdFx0XHRcdHR5cGU6IFN1YlNlY3Rpb25UeXBlLkZvcm0sXG5cdFx0XHRcdFx0XHRmb3JtRGVmaW5pdGlvbjogY3JlYXRlRm9ybURlZmluaXRpb24oXG5cdFx0XHRcdFx0XHRcdGZhY2V0RGVmaW5pdGlvbixcblx0XHRcdFx0XHRcdFx0Y29tcGlsZUV4cHJlc3Npb24oaXNWaXNpYmxlRXhwcmVzc2lvbiksXG5cdFx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdFx0XHRcdGZhY2V0QWN0aW9ucy5hY3Rpb25zLFxuXHRcdFx0XHRcdFx0XHR7IHVzZVNpbmdsZVRleHRBcmVhRmllbGRBc05vdGVzIH1cblx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHRsZXZlbDogbGV2ZWwsXG5cdFx0XHRcdFx0XHRhY3Rpb25zOiBmYWNldEFjdGlvbnMuYWN0aW9ucy5maWx0ZXIoKGFjdGlvbikgPT4gYWN0aW9uLmZhY2V0TmFtZSA9PT0gdW5kZWZpbmVkKSxcblx0XHRcdFx0XHRcdGNvbW1hbmRBY3Rpb25zOiBmYWNldEFjdGlvbnMuY29tbWFuZEFjdGlvbnNcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRyZXR1cm4gZm9ybUNvbGxlY3Rpb25TdWJTZWN0aW9uO1xuXHRcdFx0fVxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuUmVmZXJlbmNlRmFjZXQ6XG5cdFx0XHRpZiAoIWZhY2V0RGVmaW5pdGlvbi5UYXJnZXQuJHRhcmdldCkge1xuXHRcdFx0XHR1bnN1cHBvcnRlZFRleHQgPSBgVW5hYmxlIHRvIGZpbmQgYW5ub3RhdGlvblBhdGggJHtmYWNldERlZmluaXRpb24uVGFyZ2V0LnZhbHVlfWA7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzd2l0Y2ggKGZhY2V0RGVmaW5pdGlvbi5UYXJnZXQuJHRhcmdldC50ZXJtKSB7XG5cdFx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5MaW5lSXRlbTpcblx0XHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLkNoYXJ0OlxuXHRcdFx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVGVybXMuUHJlc2VudGF0aW9uVmFyaWFudDpcblx0XHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQ6XG5cdFx0XHRcdFx0XHRjb25zdCBwcmVzZW50YXRpb24gPSBnZXREYXRhVmlzdWFsaXphdGlvbkNvbmZpZ3VyYXRpb24oZmFjZXREZWZpbml0aW9uLlRhcmdldC52YWx1ZSwgY29udmVydGVyQ29udGV4dCwge1xuXHRcdFx0XHRcdFx0XHRpc0NvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW50OiBnZXRDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFuY2UoXG5cdFx0XHRcdFx0XHRcdFx0ZmFjZXREZWZpbml0aW9uLFxuXHRcdFx0XHRcdFx0XHRcdGZhY2V0c1RvQ3JlYXRlLFxuXHRcdFx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFx0ZG9Ob3RDaGVja0FwcGx5U3VwcG9ydGVkOiBpc0hlYWRlclNlY3Rpb24sXG5cdFx0XHRcdFx0XHRcdHNob3VsZENyZWF0ZVRlbXBsYXRlQ2hhcnRWaXN1YWxpemF0aW9uOiB0cnVlXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdGNvbnN0IHN1YlNlY3Rpb25UaXRsZTogc3RyaW5nID0gc3ViU2VjdGlvbi50aXRsZSA/IHN1YlNlY3Rpb24udGl0bGUgOiBcIlwiO1xuXHRcdFx0XHRcdFx0Y29uc3QgY29udHJvbFRpdGxlID1cblx0XHRcdFx0XHRcdFx0KHByZXNlbnRhdGlvbi52aXN1YWxpemF0aW9uc1swXSBhcyBUYWJsZVZpc3VhbGl6YXRpb24pPy5hbm5vdGF0aW9uPy50aXRsZSB8fFxuXHRcdFx0XHRcdFx0XHQocHJlc2VudGF0aW9uLnZpc3VhbGl6YXRpb25zWzBdIGFzIENoYXJ0VmlzdWFsaXphdGlvbik/LnRpdGxlO1xuXHRcdFx0XHRcdFx0Y29uc3QgaXNQYXJ0T2ZQcmV2aWV3ID0gZmFjZXREZWZpbml0aW9uLmFubm90YXRpb25zPy5VST8uUGFydE9mUHJldmlldz8udmFsdWVPZigpICE9PSBmYWxzZTtcblx0XHRcdFx0XHRcdGNvbnN0IHNob3dTdWJTZWN0aW9uVGl0bGUgPSBnZXRTaG93U3ViU2VjdGlvblRpdGxlKGNvbnRyb2xUaXRsZSA/PyBcIlwiLCBzdWJTZWN0aW9uVGl0bGUsIGhhc1NpbmdsZUNvbnRlbnQpO1xuXG5cdFx0XHRcdFx0XHQvLyBFaXRoZXIgY2FsY3VsYXRlIHRoZSB0aXRsZSB2aXNpYmlsaXR5IHN0YXRpY2FsbHkgb3IgZHluYW1pY2FsbHlcblx0XHRcdFx0XHRcdC8vIEFkZGl0aW9uYWxseSB0byBjaGVja2luZyB3aGV0aGVyIGEgdGl0bGUgZXhpc3RzLFxuXHRcdFx0XHRcdFx0Ly8gd2UgYWxzbyBuZWVkIHRvIGNoZWNrIHRoYXQgdGhlIGZhY2V0IHRpdGxlIGlzIG5vdCB0aGUgc2FtZSBhcyB0aGUgY29udHJvbCAoaS5lLiB2aXN1YWxpemF0aW9uKSB0aXRsZTtcblx0XHRcdFx0XHRcdC8vIHRoaXMgaXMgZG9uZSBieSBpbmNsdWRpbmcgXCJzaG93U3ViU2VjdGlvblRpdGxlXCIgaW4gdGhlIGFuZCBleHByZXNzaW9uXG5cdFx0XHRcdFx0XHRjb25zdCBkYXRhVmlzdWFsaXphdGlvblRpdGxlVmlzaWJsZSA9IGlmRWxzZShcblx0XHRcdFx0XHRcdFx0aXNWaXNpYmlsaXR5RHluYW1pYyxcblx0XHRcdFx0XHRcdFx0YW5kKGlzVmlzaWJsZUV4cHJlc3Npb24sIG5vdChlcXVhbCh0aXRsZSwgXCJ1bmRlZmluZWRcIikpLCBzaG93U3ViU2VjdGlvblRpdGxlKSxcblx0XHRcdFx0XHRcdFx0YW5kKFxuXHRcdFx0XHRcdFx0XHRcdGNvbXBpbGVFeHByZXNzaW9uKGlzVmlzaWJsZUV4cHJlc3Npb24pICE9PSB1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRcdFx0dGl0bGUgIT09IFwidW5kZWZpbmVkXCIsXG5cdFx0XHRcdFx0XHRcdFx0dGl0bGUgIT09IHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdFx0XHRpc1Zpc2libGVFeHByZXNzaW9uLFxuXHRcdFx0XHRcdFx0XHRcdHNob3dTdWJTZWN0aW9uVGl0bGVcblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0Y29uc3QgZGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uOiBEYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb24gPSB7XG5cdFx0XHRcdFx0XHRcdC4uLnN1YlNlY3Rpb24sXG5cdFx0XHRcdFx0XHRcdHR5cGU6IFN1YlNlY3Rpb25UeXBlLkRhdGFWaXN1YWxpemF0aW9uLFxuXHRcdFx0XHRcdFx0XHRsZXZlbDogbGV2ZWwsXG5cdFx0XHRcdFx0XHRcdHByZXNlbnRhdGlvbjogcHJlc2VudGF0aW9uLFxuXHRcdFx0XHRcdFx0XHRpc1BhcnRPZlByZXZpZXcsXG5cdFx0XHRcdFx0XHRcdHNob3dTdWJTZWN0aW9uVGl0bGU6IGNvbXBpbGVFeHByZXNzaW9uKHNob3dTdWJTZWN0aW9uVGl0bGUpLCAvLyBUaGlzIGlzIHVzZWQgb24gdGhlIE9iamVjdFBhZ2VTdWJTZWN0aW9uXG5cdFx0XHRcdFx0XHRcdGRhdGFWaXN1YWxpemF0aW9uVGl0bGVWaXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihkYXRhVmlzdWFsaXphdGlvblRpdGxlVmlzaWJsZSkgLy8gVGhpcyBpcyB1c2VkIHRvIGhpZGUgdGhlIFRpdGxlIGNvbnRyb2wgYWJvdmUgZGF0YSB2aXN1YWxpemF0aW9uc1xuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdHJldHVybiBkYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb247XG5cblx0XHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLkZpZWxkR3JvdXA6XG5cdFx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5JZGVudGlmaWNhdGlvbjpcblx0XHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLkRhdGFQb2ludDpcblx0XHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLlN0YXR1c0luZm86XG5cdFx0XHRcdFx0Y2FzZSBDb21tdW5pY2F0aW9uQW5ub3RhdGlvblRlcm1zLkNvbnRhY3Q6XG5cdFx0XHRcdFx0XHQvLyBBbGwgdGhvc2UgZWxlbWVudCBiZWxvbmcgdG8gYSBmcm9tIGZhY2V0XG5cdFx0XHRcdFx0XHRjb25zdCBmYWNldEFjdGlvbnMgPSBnZXRGYWNldEFjdGlvbnMoZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdFx0XHRcdFx0Zm9ybUVsZW1lbnRTdWJTZWN0aW9uOiBGb3JtU3ViU2VjdGlvbiA9IHtcblx0XHRcdFx0XHRcdFx0XHQuLi5zdWJTZWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRcdHR5cGU6IFN1YlNlY3Rpb25UeXBlLkZvcm0sXG5cdFx0XHRcdFx0XHRcdFx0bGV2ZWw6IGxldmVsLFxuXHRcdFx0XHRcdFx0XHRcdGZvcm1EZWZpbml0aW9uOiBjcmVhdGVGb3JtRGVmaW5pdGlvbihcblx0XHRcdFx0XHRcdFx0XHRcdGZhY2V0RGVmaW5pdGlvbixcblx0XHRcdFx0XHRcdFx0XHRcdGNvbXBpbGVFeHByZXNzaW9uKGlzVmlzaWJsZUV4cHJlc3Npb24pLFxuXHRcdFx0XHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRcdFx0XHRcdGZhY2V0QWN0aW9ucy5hY3Rpb25zLFxuXHRcdFx0XHRcdFx0XHRcdFx0eyB1c2VTaW5nbGVUZXh0QXJlYUZpZWxkQXNOb3RlcyB9XG5cdFx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFx0XHRhY3Rpb25zOiBmYWNldEFjdGlvbnMuYWN0aW9ucy5maWx0ZXIoKGFjdGlvbikgPT4gYWN0aW9uLmZhY2V0TmFtZSA9PT0gdW5kZWZpbmVkKSxcblx0XHRcdFx0XHRcdFx0XHRjb21tYW5kQWN0aW9uczogZmFjZXRBY3Rpb25zLmNvbW1hbmRBY3Rpb25zXG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRyZXR1cm4gZm9ybUVsZW1lbnRTdWJTZWN0aW9uO1xuXG5cdFx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5Ob3RlOlxuXHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0Li4uc3ViU2VjdGlvbixcblx0XHRcdFx0XHRcdFx0dHlwZTogU3ViU2VjdGlvblR5cGUuTm90ZXNcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdHVuc3VwcG9ydGVkVGV4dCA9IGBGb3IgJHtmYWNldERlZmluaXRpb24uVGFyZ2V0LiR0YXJnZXQudGVybX0gRnJhZ21lbnRgO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuUmVmZXJlbmNlVVJMRmFjZXQ6XG5cdFx0XHR1bnN1cHBvcnRlZFRleHQgPSBcIkZvciBSZWZlcmVuY2UgVVJMIEZhY2V0XCI7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0YnJlYWs7XG5cdH1cblx0Ly8gSWYgd2UgcmVhY2ggaGVyZSB3ZSBlbmRlZCB1cCB3aXRoIGFuIHVuc3VwcG9ydGVkIFN1YlNlY3Rpb24gdHlwZVxuXHRjb25zdCB1bnN1cHBvcnRlZFN1YlNlY3Rpb246IFVuc3VwcG9ydGVkU3ViU2VjdGlvbiA9IHtcblx0XHQuLi5zdWJTZWN0aW9uLFxuXHRcdHR5cGU6IFN1YlNlY3Rpb25UeXBlLlVua25vd24sXG5cdFx0dGV4dDogdW5zdXBwb3J0ZWRUZXh0XG5cdH07XG5cdHJldHVybiB1bnN1cHBvcnRlZFN1YlNlY3Rpb247XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdG8gaGlkZSBvciBzaG93IHRoZSBzdWJzZWN0aW9uIHRpdGxlLlxuICogQHBhcmFtIGNvbnRyb2xUaXRsZVxuICogQHBhcmFtIHN1YlNlY3Rpb25UaXRsZVxuICogQHBhcmFtIGhhc1NpbmdsZUNvbnRlbnRcbiAqIEByZXR1cm5zIEJvb2xlYW4gdmFsdWUgb3IgZXhwcmVzc2lvbiBmb3Igc2hvd1N1YlNlY3Rpb25UaXRsZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2hvd1N1YlNlY3Rpb25UaXRsZShcblx0Y29udHJvbFRpdGxlOiBzdHJpbmcsXG5cdHN1YlNlY3Rpb25UaXRsZTogc3RyaW5nLFxuXHRoYXNTaW5nbGVDb250ZW50OiBib29sZWFuXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHQvLyB2aXNpYmxlIHNoYWxsIGJlIHRydWUgaWYgdGhlcmUgYXJlIG11bHRpcGxlIGNvbnRlbnQgb3IgaWYgdGhlIGNvbnRyb2wgYW5kIHN1YnNlY3Rpb24gdGl0bGUgYXJlIGRpZmZlcmVudFxuXHRyZXR1cm4gb3Iobm90KGhhc1NpbmdsZUNvbnRlbnQpLCBub3RFcXVhbChyZXNvbHZlQmluZGluZ1N0cmluZyhjb250cm9sVGl0bGUpLCByZXNvbHZlQmluZGluZ1N0cmluZyhzdWJTZWN0aW9uVGl0bGUpKSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUZvcm1BY3Rpb25SZWR1Y2VyKFxuXHRhY3Rpb25zOiBCYXNlQWN0aW9uW10sXG5cdGZhY2V0RGVmaW5pdGlvbjogUmVmZXJlbmNlRmFjZXRUeXBlcyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBCYXNlQWN0aW9uW10ge1xuXHRjb25zdCByZWZlcmVuY2VUYXJnZXQgPSBmYWNldERlZmluaXRpb24uVGFyZ2V0LiR0YXJnZXQ7XG5cdGNvbnN0IHRhcmdldFZhbHVlID0gZmFjZXREZWZpbml0aW9uLlRhcmdldC52YWx1ZTtcblx0bGV0IG1hbmlmZXN0QWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPiA9IHt9O1xuXHRsZXQgZGF0YUZpZWxkQ29sbGVjdGlvbjogRGF0YUZpZWxkQWJzdHJhY3RUeXBlc1tdID0gW107XG5cdGxldCBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdFtuYXZpZ2F0aW9uUHJvcGVydHlQYXRoXSA9IHRhcmdldFZhbHVlLnNwbGl0KFwiQFwiKTtcblx0aWYgKG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgubGVuZ3RoID4gMCkge1xuXHRcdGlmIChuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxhc3RJbmRleE9mKFwiL1wiKSA9PT0gbmF2aWdhdGlvblByb3BlcnR5UGF0aC5sZW5ndGggLSAxKSB7XG5cdFx0XHRuYXZpZ2F0aW9uUHJvcGVydHlQYXRoID0gbmF2aWdhdGlvblByb3BlcnR5UGF0aC5zdWJzdHJpbmcoMCwgbmF2aWdhdGlvblByb3BlcnR5UGF0aC5sZW5ndGggLSAxKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0bmF2aWdhdGlvblByb3BlcnR5UGF0aCA9IHVuZGVmaW5lZDtcblx0fVxuXG5cdGlmIChyZWZlcmVuY2VUYXJnZXQpIHtcblx0XHRzd2l0Y2ggKHJlZmVyZW5jZVRhcmdldC50ZXJtKSB7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLkZpZWxkR3JvdXA6XG5cdFx0XHRcdGRhdGFGaWVsZENvbGxlY3Rpb24gPSAocmVmZXJlbmNlVGFyZ2V0IGFzIEZpZWxkR3JvdXApLkRhdGE7XG5cdFx0XHRcdG1hbmlmZXN0QWN0aW9ucyA9IGdldEFjdGlvbnNGcm9tTWFuaWZlc3QoXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uPEZvcm1NYW5pZmVzdENvbmZpZ3VyYXRpb24+KHJlZmVyZW5jZVRhcmdldCkuYWN0aW9ucyBhc1xuXHRcdFx0XHRcdFx0fCBSZWNvcmQ8c3RyaW5nLCBNYW5pZmVzdEFjdGlvbj5cblx0XHRcdFx0XHRcdHwgdW5kZWZpbmVkLFxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdFx0W10sXG5cdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0ZmFjZXREZWZpbml0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZVxuXHRcdFx0XHQpLmFjdGlvbnM7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5JZGVudGlmaWNhdGlvbjpcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVGVybXMuU3RhdHVzSW5mbzpcblx0XHRcdFx0aWYgKHJlZmVyZW5jZVRhcmdldC5xdWFsaWZpZXIpIHtcblx0XHRcdFx0XHRkYXRhRmllbGRDb2xsZWN0aW9uID0gcmVmZXJlbmNlVGFyZ2V0O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdGFjdGlvbnMgPSBkYXRhRmllbGRDb2xsZWN0aW9uLnJlZHVjZSgoYWN0aW9uUmVkdWNlciwgZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKSA9PiB7XG5cdFx0XHRzd2l0Y2ggKGRhdGFGaWVsZC4kVHlwZSkge1xuXHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbjpcblx0XHRcdFx0XHRpZiAoZGF0YUZpZWxkLlJlcXVpcmVzQ29udGV4dD8udmFsdWVPZigpID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0XHRcdC5nZXREaWFnbm9zdGljcygpXG5cdFx0XHRcdFx0XHRcdC5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sIElzc3VlU2V2ZXJpdHkuTG93LCBJc3N1ZVR5cGUuTUFMRk9STUVEX0RBVEFGSUVMRF9GT1JfSUJOLlJFUVVJUkVTQ09OVEVYVCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChkYXRhRmllbGQuSW5saW5lPy52YWx1ZU9mKCkgPT09IHRydWUpIHtcblx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0XHRcdFx0LmdldERpYWdub3N0aWNzKClcblx0XHRcdFx0XHRcdFx0LmFkZElzc3VlKElzc3VlQ2F0ZWdvcnkuQW5ub3RhdGlvbiwgSXNzdWVTZXZlcml0eS5Mb3csIElzc3VlVHlwZS5NQUxGT1JNRURfREFUQUZJRUxEX0ZPUl9JQk4uSU5MSU5FKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKGRhdGFGaWVsZC5EZXRlcm1pbmluZz8udmFsdWVPZigpID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0XHRcdC5nZXREaWFnbm9zdGljcygpXG5cdFx0XHRcdFx0XHRcdC5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sIElzc3VlU2V2ZXJpdHkuTG93LCBJc3N1ZVR5cGUuTUFMRk9STUVEX0RBVEFGSUVMRF9GT1JfSUJOLkRFVEVSTUlOSU5HKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29uc3QgbU5hdmlnYXRpb25QYXJhbWV0ZXJzOiBOYXZpZ2F0aW9uUGFyYW1ldGVycyA9IHt9O1xuXHRcdFx0XHRcdGlmIChkYXRhRmllbGQuTWFwcGluZykge1xuXHRcdFx0XHRcdFx0bU5hdmlnYXRpb25QYXJhbWV0ZXJzLnNlbWFudGljT2JqZWN0TWFwcGluZyA9IGdldFNlbWFudGljT2JqZWN0TWFwcGluZyhkYXRhRmllbGQuTWFwcGluZyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGFjdGlvblJlZHVjZXIucHVzaCh7XG5cdFx0XHRcdFx0XHR0eXBlOiBBY3Rpb25UeXBlLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbixcblx0XHRcdFx0XHRcdGlkOiBnZXRGb3JtSUQoZmFjZXREZWZpbml0aW9uLCBkYXRhRmllbGQpLFxuXHRcdFx0XHRcdFx0a2V5OiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCksXG5cdFx0XHRcdFx0XHR0ZXh0OiBkYXRhRmllbGQuTGFiZWw/LnRvU3RyaW5nKCksXG5cdFx0XHRcdFx0XHRhbm5vdGF0aW9uUGF0aDogXCJcIixcblx0XHRcdFx0XHRcdGVuYWJsZWQ6XG5cdFx0XHRcdFx0XHRcdGRhdGFGaWVsZC5OYXZpZ2F0aW9uQXZhaWxhYmxlICE9PSB1bmRlZmluZWRcblx0XHRcdFx0XHRcdFx0XHQ/IGNvbXBpbGVFeHByZXNzaW9uKGVxdWFsKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihkYXRhRmllbGQuTmF2aWdhdGlvbkF2YWlsYWJsZSksIHRydWUpKVxuXHRcdFx0XHRcdFx0XHRcdDogXCJ0cnVlXCIsXG5cdFx0XHRcdFx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihub3QoZXF1YWwoZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiksIHRydWUpKSksXG5cdFx0XHRcdFx0XHRidXR0b25UeXBlOiBnZXRCdXR0b25UeXBlKGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkVtcGhhc2l6ZWQpLFxuXHRcdFx0XHRcdFx0cHJlc3M6IGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRcdFx0XHRmbihcIi5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm5hdmlnYXRlXCIsIFtcblx0XHRcdFx0XHRcdFx0XHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZGF0YUZpZWxkLlNlbWFudGljT2JqZWN0KSxcblx0XHRcdFx0XHRcdFx0XHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZGF0YUZpZWxkLkFjdGlvbiksXG5cdFx0XHRcdFx0XHRcdFx0bU5hdmlnYXRpb25QYXJhbWV0ZXJzXG5cdFx0XHRcdFx0XHRcdF0pXG5cdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0Y3VzdG9tRGF0YTogY29tcGlsZUV4cHJlc3Npb24oe1xuXHRcdFx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGFGaWVsZC5TZW1hbnRpY09iamVjdCksXG5cdFx0XHRcdFx0XHRcdGFjdGlvbjogZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGFGaWVsZC5BY3Rpb24pXG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdH0gYXMgQW5ub3RhdGlvbkFjdGlvbik7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uOlxuXHRcdFx0XHRcdGNvbnN0IGZvcm1NYW5pZmVzdEFjdGlvbnNDb25maWd1cmF0aW9uID1cblx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbjxGb3JtTWFuaWZlc3RDb25maWd1cmF0aW9uPihyZWZlcmVuY2VUYXJnZXQpLmFjdGlvbnM7XG5cdFx0XHRcdFx0YWN0aW9uUmVkdWNlci5wdXNoKFxuXHRcdFx0XHRcdFx0Z2V0RGF0YUZpZWxkQW5ub3RhdGlvbkFjdGlvbihcblx0XHRcdFx0XHRcdFx0ZGF0YUZpZWxkLFxuXHRcdFx0XHRcdFx0XHRmYWNldERlZmluaXRpb24sXG5cdFx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdFx0XHRcdGZvcm1NYW5pZmVzdEFjdGlvbnNDb25maWd1cmF0aW9uLFxuXHRcdFx0XHRcdFx0XHRuYXZpZ2F0aW9uUHJvcGVydHlQYXRoXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb25Hcm91cDpcblx0XHRcdFx0XHRhY3Rpb25SZWR1Y2VyLnB1c2goe1xuXHRcdFx0XHRcdFx0dHlwZTogQWN0aW9uVHlwZS5NZW51LFxuXHRcdFx0XHRcdFx0dGV4dDogZGF0YUZpZWxkLkxhYmVsPy50b1N0cmluZygpLFxuXHRcdFx0XHRcdFx0a2V5OiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCksXG5cdFx0XHRcdFx0XHRpZDogZ2V0Rm9ybUlEKGZhY2V0RGVmaW5pdGlvbiwgZGF0YUZpZWxkKSxcblx0XHRcdFx0XHRcdHZpc2libGU6IGNvbXBpbGVFeHByZXNzaW9uKG5vdChlcXVhbChnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuKSwgdHJ1ZSkpKSxcblx0XHRcdFx0XHRcdGlzQUlPcGVyYXRpb246IGlzTWVudUFJT3BlcmF0aW9uKGRhdGFGaWVsZC5BY3Rpb25zKSA9PT0gdHJ1ZSB8fCB1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRtZW51OiBkYXRhRmllbGQuQWN0aW9ucy5tYXAoKGFjdGlvbikgPT4ge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBmb3JtTWFuaWZlc3RNZW51QWN0aW9uc0NvbmZpZ3VyYXRpb24gPVxuXHRcdFx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbjxGb3JtTWFuaWZlc3RDb25maWd1cmF0aW9uPihyZWZlcmVuY2VUYXJnZXQpLmFjdGlvbnM7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBnZXREYXRhRmllbGRBbm5vdGF0aW9uQWN0aW9uKFxuXHRcdFx0XHRcdFx0XHRcdGFjdGlvbiBhcyBEYXRhRmllbGRGb3JBY3Rpb25UeXBlcyxcblx0XHRcdFx0XHRcdFx0XHRmYWNldERlZmluaXRpb24sXG5cdFx0XHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRcdFx0XHRmb3JtTWFuaWZlc3RNZW51QWN0aW9uc0NvbmZpZ3VyYXRpb24sXG5cdFx0XHRcdFx0XHRcdFx0bmF2aWdhdGlvblByb3BlcnR5UGF0aFxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdHJldHVybiBhY3Rpb25SZWR1Y2VyO1xuXHRcdH0sIGFjdGlvbnMpO1xuXHR9XG5cblx0Ly8gbm8gb3ZlcnJpZGVzIGhlcmUsIHRoZXkgYXJlIGRvbmUgaW4gYSBsYXRlciBzdGVwIGluIGFkZEZvcm1NZW51QWN0aW9uc1xuXHRyZXR1cm4gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoYWN0aW9ucywgbWFuaWZlc3RBY3Rpb25zKTtcbn1cblxuZnVuY3Rpb24gZ2V0RGF0YUZpZWxkQW5ub3RhdGlvbkFjdGlvbihcblx0ZGF0YUZpZWxkOiBEYXRhRmllbGRGb3JBY3Rpb25UeXBlcyxcblx0ZmFjZXREZWZpbml0aW9uOiBSZWZlcmVuY2VGYWNldFR5cGVzLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGZvcm1NYW5pZmVzdEFjdGlvbnNDb25maWd1cmF0aW9uOiBSZWNvcmQ8c3RyaW5nLCBNYW5pZmVzdEFjdGlvbj4gfCB1bmRlZmluZWQsXG5cdG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg/OiBzdHJpbmdcbik6IEFubm90YXRpb25BY3Rpb24ge1xuXHRjb25zdCBrZXkgPSBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCk7XG5cdHJldHVybiB7XG5cdFx0dHlwZTogQWN0aW9uVHlwZS5EYXRhRmllbGRGb3JBY3Rpb24sXG5cdFx0aWQ6IGdldEZvcm1JRChmYWNldERlZmluaXRpb24sIGRhdGFGaWVsZCksXG5cdFx0a2V5OiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCksXG5cdFx0dGV4dDogZGF0YUZpZWxkLkxhYmVsPy50b1N0cmluZygpLFxuXHRcdGFubm90YXRpb25QYXRoOiBcIlwiLFxuXHRcdGVuYWJsZWQ6IGdldEVuYWJsZWRGb3JBbm5vdGF0aW9uQWN0aW9uKGNvbnZlcnRlckNvbnRleHQsIGRhdGFGaWVsZC5BY3Rpb25UYXJnZXQpLFxuXHRcdGJpbmRpbmc6IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggJiYgIWRhdGFGaWVsZC5JbmxpbmUgPyBgeyAncGF0aCcgOiAnJHtuYXZpZ2F0aW9uUHJvcGVydHlQYXRofSd9YCA6IHVuZGVmaW5lZCwgLy8gSW5saW5lIEFjdGlvbnMgZG9uJ3QgbmVlZCB0aGUgYmluZGluZyBhcyB0aGV5IGFyZSBpbnNpZGUgdGhlIEZvcm1cblx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihub3QoZXF1YWwoZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiksIHRydWUpKSksXG5cdFx0cmVxdWlyZXNEaWFsb2c6IGlzQWN0aW9uV2l0aERpYWxvZyhkYXRhRmllbGQpLFxuXHRcdGJ1dHRvblR5cGU6IGdldEJ1dHRvblR5cGUoZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uRW1waGFzaXplZCksXG5cdFx0aXNBSU9wZXJhdGlvbjogaXNBY3Rpb25BSU9wZXJhdGlvbihkYXRhRmllbGQpID09PSB0cnVlIHx8IHVuZGVmaW5lZCxcblx0XHRwcmVzczogY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRmbihcblx0XHRcdFx0XCJpbnZva2VBY3Rpb25cIixcblx0XHRcdFx0W1xuXHRcdFx0XHRcdGRhdGFGaWVsZC5BY3Rpb24sXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0Y29udGV4dHM6IGZuKFwiZ2V0QmluZGluZ0NvbnRleHRcIiwgW10sIHBhdGhJbk1vZGVsKFwiXCIsIFwiJHNvdXJjZVwiKSksXG5cdFx0XHRcdFx0XHRpbnZvY2F0aW9uR3JvdXBpbmc6IChkYXRhRmllbGQuSW52b2NhdGlvbkdyb3VwaW5nID09PSBcIlVJLk9wZXJhdGlvbkdyb3VwaW5nVHlwZS9DaGFuZ2VTZXRcIlxuXHRcdFx0XHRcdFx0XHQ/IFwiQ2hhbmdlU2V0XCJcblx0XHRcdFx0XHRcdFx0OiBcIklzb2xhdGVkXCIpIGFzIE9wZXJhdGlvbkdyb3VwaW5nVHlwZSxcblx0XHRcdFx0XHRcdGxhYmVsOiBkYXRhRmllbGQuTGFiZWw/LnRvU3RyaW5nKCksXG5cdFx0XHRcdFx0XHRtb2RlbDogZm4oXCJnZXRNb2RlbFwiLCBbXSwgcGF0aEluTW9kZWwoXCIvXCIsIFwiJHNvdXJjZVwiKSksXG5cdFx0XHRcdFx0XHRpc05hdmlnYWJsZTogaXNBY3Rpb25OYXZpZ2FibGUoZm9ybU1hbmlmZXN0QWN0aW9uc0NvbmZpZ3VyYXRpb24gJiYgZm9ybU1hbmlmZXN0QWN0aW9uc0NvbmZpZ3VyYXRpb25ba2V5XSksXG5cdFx0XHRcdFx0XHRkaXNhYmxlU3RyaWN0SGFuZGxpbmc6IGZvcm1NYW5pZmVzdEFjdGlvbnNDb25maWd1cmF0aW9uPy5ba2V5XT8uZGlzYWJsZVN0cmljdEhhbmRsaW5nXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRdLFxuXHRcdFx0XHRyZWYoXCIuZWRpdEZsb3dcIilcblx0XHRcdClcblx0XHQpLFxuXHRcdGZhY2V0TmFtZTogZGF0YUZpZWxkLklubGluZSA/IGZhY2V0RGVmaW5pdGlvbi5mdWxseVF1YWxpZmllZE5hbWUgOiB1bmRlZmluZWRcblx0fTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGlhbG9nKGFjdGlvbkRlZmluaXRpb246IEFjdGlvbiB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG5cdGlmIChhY3Rpb25EZWZpbml0aW9uKSB7XG5cdFx0Y29uc3QgYkNyaXRpY2FsID0gYWN0aW9uRGVmaW5pdGlvbi5hbm5vdGF0aW9ucz8uQ29tbW9uPy5Jc0FjdGlvbkNyaXRpY2FsO1xuXHRcdGlmIChhY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMubGVuZ3RoID4gMSB8fCBiQ3JpdGljYWwpIHtcblx0XHRcdHJldHVybiBcIkRpYWxvZ1wiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gXCJOb25lXCI7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBcIk5vbmVcIjtcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ3VzdG9tU3ViU2VjdGlvbnMoXG5cdG1hbmlmZXN0U3ViU2VjdGlvbnM6IFJlY29yZDxzdHJpbmcsIE1hbmlmZXN0U3ViU2VjdGlvbj4sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogUmVjb3JkPHN0cmluZywgQ3VzdG9tT2JqZWN0UGFnZVN1YlNlY3Rpb24+IHtcblx0Y29uc3Qgc3ViU2VjdGlvbnM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbU9iamVjdFBhZ2VTdWJTZWN0aW9uPiA9IHt9O1xuXHRPYmplY3Qua2V5cyhtYW5pZmVzdFN1YlNlY3Rpb25zKS5mb3JFYWNoKFxuXHRcdChzdWJTZWN0aW9uS2V5KSA9PlxuXHRcdFx0KHN1YlNlY3Rpb25zW3N1YlNlY3Rpb25LZXldID0gY3JlYXRlQ3VzdG9tU3ViU2VjdGlvbihtYW5pZmVzdFN1YlNlY3Rpb25zW3N1YlNlY3Rpb25LZXldLCBzdWJTZWN0aW9uS2V5LCBjb252ZXJ0ZXJDb250ZXh0KSlcblx0KTtcblx0cmV0dXJuIHN1YlNlY3Rpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ3VzdG9tU3ViU2VjdGlvbihcblx0bWFuaWZlc3RTdWJTZWN0aW9uOiBNYW5pZmVzdFN1YlNlY3Rpb24sXG5cdHN1YlNlY3Rpb25LZXk6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBDdXN0b21PYmplY3RQYWdlU3ViU2VjdGlvbiB7XG5cdGNvbnN0IHNpZGVDb250ZW50OiBTaWRlQ29udGVudERlZiB8IHVuZGVmaW5lZCA9IG1hbmlmZXN0U3ViU2VjdGlvbi5zaWRlQ29udGVudFxuXHRcdD8ge1xuXHRcdFx0XHR0ZW1wbGF0ZTogbWFuaWZlc3RTdWJTZWN0aW9uLnNpZGVDb250ZW50LnRlbXBsYXRlLFxuXHRcdFx0XHRpZDogZ2V0U2lkZUNvbnRlbnRJRChzdWJTZWN0aW9uS2V5KSxcblx0XHRcdFx0dmlzaWJsZTogZmFsc2UsXG5cdFx0XHRcdGVxdWFsU3BsaXQ6IG1hbmlmZXN0U3ViU2VjdGlvbi5zaWRlQ29udGVudC5lcXVhbFNwbGl0XG5cdFx0ICB9XG5cdFx0OiB1bmRlZmluZWQ7XG5cdGxldCBwb3NpdGlvbiA9IG1hbmlmZXN0U3ViU2VjdGlvbi5wb3NpdGlvbjtcblx0aWYgKCFwb3NpdGlvbikge1xuXHRcdHBvc2l0aW9uID0ge1xuXHRcdFx0cGxhY2VtZW50OiBQbGFjZW1lbnQuQWZ0ZXJcblx0XHR9O1xuXHR9XG5cdGNvbnN0IGlzVmlzaWJsZSA9IG1hbmlmZXN0U3ViU2VjdGlvbi52aXNpYmxlICE9PSB1bmRlZmluZWQgPyBtYW5pZmVzdFN1YlNlY3Rpb24udmlzaWJsZSA6IHRydWU7XG5cdGNvbnN0IGlzRHluYW1pY0V4cHJlc3Npb24gPSBpc1Zpc2libGUgJiYgdHlwZW9mIGlzVmlzaWJsZSA9PT0gXCJzdHJpbmdcIiAmJiBpc1Zpc2libGUuaW5kZXhPZihcIns9XCIpID09PSAwO1xuXHRjb25zdCBtYW5pZmVzdEFjdGlvbnMgPSBnZXRBY3Rpb25zRnJvbU1hbmlmZXN0KG1hbmlmZXN0U3ViU2VjdGlvbi5hY3Rpb25zLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0bGV0IGFjdGlvbnMgPSBPYmplY3QudmFsdWVzKG1hbmlmZXN0QWN0aW9ucy5hY3Rpb25zKTtcblx0YWN0aW9ucyA9IHJlbW92ZUR1cGxpY2F0ZUFjdGlvbnMoYWN0aW9ucyk7XG5cdGFjdGlvbnMgPSBhZGRTZXBhcmF0b3JzKGFjdGlvbnMsIG1hbmlmZXN0U3ViU2VjdGlvbi5vdmVyZmxvd0dyb3VwcykgYXMgQ3VzdG9tQWN0aW9uW107XG5cdG1hbmlmZXN0QWN0aW9ucy5hY3Rpb25zID0gYWN0aW9ucz8ucmVkdWNlKFxuXHRcdChwcmV2aW91c0FjdGlvbiwgY3VycmVudEFjdGlvbikgPT4gKHsgLi4ucHJldmlvdXNBY3Rpb24sIFtjdXJyZW50QWN0aW9uLmtleV06IGN1cnJlbnRBY3Rpb24gfSksXG5cdFx0e31cblx0KTtcblx0Y29uc3Qgc3ViU2VjdGlvbkRlZmluaXRpb24gPSB7XG5cdFx0dHlwZTogU3ViU2VjdGlvblR5cGUuVW5rbm93bixcblx0XHRpZDogbWFuaWZlc3RTdWJTZWN0aW9uLmlkIHx8IGdldEN1c3RvbVN1YlNlY3Rpb25JRChzdWJTZWN0aW9uS2V5KSxcblx0XHRhY3Rpb25zOiBtYW5pZmVzdEFjdGlvbnMuYWN0aW9ucyxcblx0XHRrZXk6IHN1YlNlY3Rpb25LZXksXG5cdFx0dGl0bGU6IG1hbmlmZXN0U3ViU2VjdGlvbi50aXRsZSxcblx0XHRsZXZlbDogMSxcblx0XHRwb3NpdGlvbjogcG9zaXRpb24sXG5cdFx0dmlzaWJsZTogbWFuaWZlc3RTdWJTZWN0aW9uLnZpc2libGUgIT09IHVuZGVmaW5lZCA/IG1hbmlmZXN0U3ViU2VjdGlvbi52aXNpYmxlIDogXCJ0cnVlXCIsXG5cdFx0c2lkZUNvbnRlbnQ6IHNpZGVDb250ZW50LFxuXHRcdGlzVmlzaWJpbGl0eUR5bmFtaWM6IGlzRHluYW1pY0V4cHJlc3Npb24sXG5cdFx0b2JqZWN0UGFnZUxhenlMb2FkZXJFbmFibGVkOiBtYW5pZmVzdFN1YlNlY3Rpb24uZW5hYmxlTGF6eUxvYWRpbmcgPz8gZmFsc2UsXG5cdFx0Y29tcG9uZW50TmFtZTogXCJcIixcblx0XHRzZXR0aW5nczogXCJcIixcblx0XHRhcHBseVN0YXRlOiBtYW5pZmVzdFN1YlNlY3Rpb24uYXBwbHlTdGF0ZSxcblx0XHRyZXRyaWV2ZVN0YXRlOiBtYW5pZmVzdFN1YlNlY3Rpb24ucmV0cmlldmVTdGF0ZVxuXHR9O1xuXHRpZiAobWFuaWZlc3RTdWJTZWN0aW9uLnRlbXBsYXRlIHx8IG1hbmlmZXN0U3ViU2VjdGlvbi5uYW1lKSB7XG5cdFx0c3ViU2VjdGlvbkRlZmluaXRpb24udHlwZSA9IFN1YlNlY3Rpb25UeXBlLlhNTEZyYWdtZW50O1xuXHRcdChzdWJTZWN0aW9uRGVmaW5pdGlvbiBhcyB1bmtub3duIGFzIFhNTEZyYWdtZW50U3ViU2VjdGlvbikudGVtcGxhdGUgPSBtYW5pZmVzdFN1YlNlY3Rpb24udGVtcGxhdGUgfHwgbWFuaWZlc3RTdWJTZWN0aW9uLm5hbWUgfHwgXCJcIjtcblx0fSBlbHNlIGlmIChtYW5pZmVzdFN1YlNlY3Rpb24uZW1iZWRkZWRDb21wb25lbnQgIT09IHVuZGVmaW5lZCkge1xuXHRcdHN1YlNlY3Rpb25EZWZpbml0aW9uLnR5cGUgPSBTdWJTZWN0aW9uVHlwZS5FbWJlZGRlZENvbXBvbmVudDtcblx0XHRzdWJTZWN0aW9uRGVmaW5pdGlvbi5jb21wb25lbnROYW1lID0gbWFuaWZlc3RTdWJTZWN0aW9uLmVtYmVkZGVkQ29tcG9uZW50Lm5hbWU7XG5cdFx0aWYgKG1hbmlmZXN0U3ViU2VjdGlvbi5lbWJlZGRlZENvbXBvbmVudC5zZXR0aW5ncyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRzdWJTZWN0aW9uRGVmaW5pdGlvbi5zZXR0aW5ncyA9IEpTT04uc3RyaW5naWZ5KG1hbmlmZXN0U3ViU2VjdGlvbi5lbWJlZGRlZENvbXBvbmVudC5zZXR0aW5ncyk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHN1YlNlY3Rpb25EZWZpbml0aW9uLnR5cGUgPSBTdWJTZWN0aW9uVHlwZS5QbGFjZWhvbGRlcjtcblx0fVxuXHRyZXR1cm4gc3ViU2VjdGlvbkRlZmluaXRpb24gYXMgQ3VzdG9tT2JqZWN0UGFnZVN1YlNlY3Rpb247XG59XG5cbi8qKlxuICogRXZhbHVhdGUgaWYgdGhlIGNvbmRlbnNlZCBtb2RlIGNhbiBiZSBhcHBsaWVkIG9uIHRoZSB0YWJsZS5cbiAqIEBwYXJhbSBjdXJyZW50RmFjZXRcbiAqIEBwYXJhbSBmYWNldHNUb0NyZWF0ZUluU2VjdGlvblxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIGB0cnVlYCBmb3IgY29tcGxpYW50LCBmYWxzZSBvdGhlcndpc2VcbiAqL1xuZnVuY3Rpb24gZ2V0Q29uZGVuc2VkVGFibGVMYXlvdXRDb21wbGlhbmNlKFxuXHRjdXJyZW50RmFjZXQ6IEZhY2V0VHlwZXMsXG5cdGZhY2V0c1RvQ3JlYXRlSW5TZWN0aW9uOiBGYWNldFR5cGVzW10sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogYm9vbGVhbiB7XG5cdGNvbnN0IG1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cdGlmIChtYW5pZmVzdFdyYXBwZXIudXNlSWNvblRhYkJhcigpKSB7XG5cdFx0Ly8gSWYgdGhlIE9QIHVzZSB0aGUgdGFiIGJhc2VkIHdlIGNoZWNrIGlmIHRoZSBmYWNldHMgdGhhdCB3aWxsIGJlIGNyZWF0ZWQgZm9yIHRoaXMgc2VjdGlvbiBhcmUgYWxsIG5vbiB2aXNpYmxlXG5cdFx0cmV0dXJuIGhhc05vT3RoZXJWaXNpYmxlVGFibGVJblRhcmdldHMoY3VycmVudEZhY2V0LCBmYWNldHNUb0NyZWF0ZUluU2VjdGlvbik7XG5cdH0gZWxzZSB7XG5cdFx0Y29uc3QgZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHRcdGlmIChlbnRpdHlUeXBlLmFubm90YXRpb25zPy5VST8uRmFjZXRzPy5sZW5ndGggJiYgZW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uVUk/LkZhY2V0cz8ubGVuZ3RoID4gMSkge1xuXHRcdFx0cmV0dXJuIGhhc05vT3RoZXJWaXNpYmxlVGFibGVJblRhcmdldHMoY3VycmVudEZhY2V0LCBmYWNldHNUb0NyZWF0ZUluU2VjdGlvbik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBoYXNOb090aGVyVmlzaWJsZVRhYmxlSW5UYXJnZXRzKGN1cnJlbnRGYWNldDogRmFjZXRUeXBlcywgZmFjZXRzVG9DcmVhdGVJblNlY3Rpb246IEZhY2V0VHlwZXNbXSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gZmFjZXRzVG9DcmVhdGVJblNlY3Rpb24uZXZlcnkoZnVuY3Rpb24gKHN1YkZhY2V0KSB7XG5cdFx0aWYgKHN1YkZhY2V0ICE9PSBjdXJyZW50RmFjZXQpIHtcblx0XHRcdGlmIChzdWJGYWNldC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuUmVmZXJlbmNlRmFjZXQpIHtcblx0XHRcdFx0Y29uc3QgcmVmRmFjZXQgPSBzdWJGYWNldDtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHJlZkZhY2V0LlRhcmdldD8uJHRhcmdldD8udGVybSA9PT0gVUlBbm5vdGF0aW9uVGVybXMuTGluZUl0ZW0gfHxcblx0XHRcdFx0XHRyZWZGYWNldC5UYXJnZXQ/LiR0YXJnZXQ/LnRlcm0gPT09IFVJQW5ub3RhdGlvblRlcm1zLlByZXNlbnRhdGlvblZhcmlhbnQgfHxcblx0XHRcdFx0XHRyZWZGYWNldC5UYXJnZXQuJHRhcmdldD8udGVybSA9PT0gVUlBbm5vdGF0aW9uVGVybXMuU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gcmVmRmFjZXQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4gIT09IHVuZGVmaW5lZCA/IHJlZkZhY2V0LmFubm90YXRpb25zPy5VST8uSGlkZGVuIDogZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBzdWJDb2xsZWN0aW9uRmFjZXQgPSBzdWJGYWNldCBhcyBDb2xsZWN0aW9uRmFjZXRUeXBlcztcblx0XHRcdFx0cmV0dXJuIHN1YkNvbGxlY3Rpb25GYWNldC5GYWNldHMuZXZlcnkoZnVuY3Rpb24gKGZhY2V0KSB7XG5cdFx0XHRcdFx0Y29uc3Qgc3ViUmVmRmFjZXQgPSBmYWNldCBhcyBSZWZlcmVuY2VGYWNldFR5cGVzO1xuXHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdHN1YlJlZkZhY2V0LlRhcmdldD8uJHRhcmdldD8udGVybSA9PT0gVUlBbm5vdGF0aW9uVGVybXMuTGluZUl0ZW0gfHxcblx0XHRcdFx0XHRcdHN1YlJlZkZhY2V0LlRhcmdldD8uJHRhcmdldD8udGVybSA9PT0gVUlBbm5vdGF0aW9uVGVybXMuUHJlc2VudGF0aW9uVmFyaWFudCB8fFxuXHRcdFx0XHRcdFx0c3ViUmVmRmFjZXQuVGFyZ2V0Py4kdGFyZ2V0Py50ZXJtID09PSBVSUFubm90YXRpb25UZXJtcy5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50XG5cdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gc3ViUmVmRmFjZXQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4gIT09IHVuZGVmaW5lZCA/IHN1YlJlZkZhY2V0LmFubm90YXRpb25zPy5VST8uSGlkZGVuIDogZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0pO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7TUFpRllBLGNBQWMsMEJBQWRBLGNBQWM7SUFBZEEsY0FBYztJQUNKO0lBRFZBLGNBQWM7SUFBZEEsY0FBYztJQUFkQSxjQUFjO0lBQWRBLGNBQWM7SUFBZEEsY0FBYztJQUFkQSxjQUFjO0lBQWRBLGNBQWM7SUFBQSxPQUFkQSxjQUFjO0VBQUE7RUFBQUMsUUFBQSxDQUFBRCxjQUFBLEdBQUFBLGNBQUE7RUFrSDFCLE1BQU1FLGtCQUE0QixHQUFHLDJOQU1wQzs7RUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ08sU0FBU0MsaUJBQWlCQSxDQUNoQ0MsZUFBNkIsRUFDN0JDLGdCQUF5RCxFQUN6REMsZUFBeUIsRUFDekJDLDZCQUF1QyxFQUNkO0lBQ3pCO0lBQ0EsTUFBTUMsY0FBYyxHQUFHSixlQUFlLENBQUNLLE1BQU0sQ0FBQyxDQUFDRCxjQUE0QixFQUFFRSxlQUFlLEtBQUs7TUFDaEcsUUFBUUEsZUFBZSxDQUFDQyxLQUFLO1FBQzVCO1VBQ0NILGNBQWMsQ0FBQ0ksSUFBSSxDQUFDRixlQUFlLENBQUM7VUFDcEM7UUFDRDtVQUNDO1VBQ0E7VUFDQSxJQUFJQSxlQUFlLENBQUNHLE1BQU0sQ0FBQ0MsSUFBSSxDQUFFQyxTQUFTLElBQUtBLFNBQVMsQ0FBQ0osS0FBSyxpREFB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
@@ -40,6 +40,7 @@ import type {
40
40
  } from "sap/fe/core/converters/controls/Common/Action";
41
41
  import {
42
42
  ButtonType,
43
+ addSeparators,
43
44
  getActionsFromManifest,
44
45
  getAnnotationMenuActionItems,
45
46
  getEnabledForAnnotationAction,
@@ -66,7 +67,7 @@ import ActionUtilities from "sap/fe/core/helpers/ActionUtilities";
66
67
  import { singletonPathVisitor } from "sap/fe/core/helpers/BindingHelper";
67
68
  import { isPathAnnotationExpression } from "sap/fe/core/helpers/TypeGuards";
68
69
  import type ConverterContext from "../../ConverterContext";
69
- import type { FormManifestConfiguration, ManifestAction, ManifestSubSection } from "../../ManifestSettings";
70
+ import type { FormManifestConfiguration, ManifestAction, ManifestSubSection, OverflowGroupsConfiguration } from "../../ManifestSettings";
70
71
  import { ActionType } from "../../ManifestSettings";
71
72
  import { isActionWithDialog } from "../../annotations/DataField";
72
73
  import type { ConfigurableObject, ConfigurableRecord, CustomElement } from "../../helpers/ConfigurableObject";
@@ -332,7 +333,9 @@ function addFormMenuActions(
332
333
  position: OverrideType.overwrite,
333
334
  menu: OverrideType.overwrite,
334
335
  priority: OverrideType.overwrite,
335
- group: OverrideType.overwrite
336
+ group: OverrideType.overwrite,
337
+ overflowGroup: OverrideType.overwrite,
338
+ disableStrictHandling: OverrideType.overwrite
336
339
  },
337
340
  formActions: ConfigurableRecord<ManifestAction> = getFormActions(facetDefinition, converterContext),
338
341
  // 1. Get actions from annotations -> actions are passed to this method
@@ -406,7 +409,11 @@ function getFacetActions(facetDefinition: FacetTypes, converterContext: Converte
406
409
  default:
407
410
  break;
408
411
  }
409
- return addFormMenuActions(actions, facetDefinition, converterContext);
412
+ const combinedActions = addFormMenuActions(actions, facetDefinition, converterContext);
413
+ const sectionsInManifest = converterContext.getManifestWrapper().getSections();
414
+ const facetOverflowGroupsConfig = sectionsInManifest?.[facetDefinition.ID as string]?.overflowGroups as OverflowGroupsConfiguration;
415
+ combinedActions.actions = addSeparators(combinedActions.actions, facetOverflowGroupsConfig);
416
+ return combinedActions;
410
417
  }
411
418
  /**
412
419
  * Returns the button type based on @UI.Emphasized annotation.
@@ -832,7 +839,8 @@ function getDataFieldAnnotationAction(
832
839
  : "Isolated") as OperationGroupingType,
833
840
  label: dataField.Label?.toString(),
834
841
  model: fn("getModel", [], pathInModel("/", "$source")),
835
- isNavigable: isActionNavigable(formManifestActionsConfiguration && formManifestActionsConfiguration[key])
842
+ isNavigable: isActionNavigable(formManifestActionsConfiguration && formManifestActionsConfiguration[key]),
843
+ disableStrictHandling: formManifestActionsConfiguration?.[key]?.disableStrictHandling
836
844
  }
837
845
  ],
838
846
  ref(".editFlow")
@@ -889,7 +897,10 @@ export function createCustomSubSection(
889
897
  const isVisible = manifestSubSection.visible !== undefined ? manifestSubSection.visible : true;
890
898
  const isDynamicExpression = isVisible && typeof isVisible === "string" && isVisible.indexOf("{=") === 0;
891
899
  const manifestActions = getActionsFromManifest(manifestSubSection.actions, converterContext);
892
- manifestActions.actions = removeDuplicateActions(Object.values(manifestActions.actions))?.reduce(
900
+ let actions = Object.values(manifestActions.actions);
901
+ actions = removeDuplicateActions(actions);
902
+ actions = addSeparators(actions, manifestSubSection.overflowGroups) as CustomAction[];
903
+ manifestActions.actions = actions?.reduce(
893
904
  (previousAction, currentAction) => ({ ...previousAction, [currentAction.key]: currentAction }),
894
905
  {}
895
906
  );