@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
@@ -23,6 +23,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/conver
23
23
  var isMenuAIOperation = Action.isMenuAIOperation;
24
24
  var isActionAIOperation = Action.isActionAIOperation;
25
25
  var getActionsFromManifest = Action.getActionsFromManifest;
26
+ var addSeparators = Action.addSeparators;
26
27
  var isDataFieldForActionAbstract = DataField.isDataFieldForActionAbstract;
27
28
  var not = BindingToolkit.not;
28
29
  var getExpressionFromAnnotation = BindingToolkit.getExpressionFromAnnotation;
@@ -116,9 +117,18 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/conver
116
117
  command: OverrideType.overwrite,
117
118
  position: OverrideType.overwrite,
118
119
  group: OverrideType.overwrite,
119
- priority: OverrideType.overwrite
120
+ overflowGroup: OverrideType.overwrite,
121
+ priority: OverrideType.overwrite,
122
+ disableStrictHandling: OverrideType.overwrite
120
123
  };
121
- const chartActions = insertCustomElements(aAnnotationActions, manifestActions.actions, actionOverwriteConfig);
124
+ let chartActions = insertCustomElements(aAnnotationActions, manifestActions.actions, actionOverwriteConfig);
125
+
126
+ // Add separators based on overflowGroups configuration from manifest
127
+ const chartManifestConfig = converterContext.getManifestControlConfiguration(visualizationPath);
128
+ const overflowGroupsConfig = chartManifestConfig.overflowGroups;
129
+ if (overflowGroupsConfig) {
130
+ chartActions = addSeparators(chartActions, overflowGroupsConfig);
131
+ }
122
132
  return {
123
133
  actions: chartActions,
124
134
  commandActions: manifestActions.commandActions
@@ -454,4 +464,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/conver
454
464
  _exports.createBlankChartVisualization = createBlankChartVisualization;
455
465
  return _exports;
456
466
  }, false);
457
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRDaGFydEFjdGlvbnNGcm9tQW5ub3RhdGlvbnMiLCJjaGFydEFubm90YXRpb24iLCJ2aXN1YWxpemF0aW9uUGF0aCIsImNvbnZlcnRlckNvbnRleHQiLCJjaGFydEFjdGlvbnMiLCJBY3Rpb25zIiwiZm9yRWFjaCIsImRhdGFGaWVsZCIsImtleSIsIktleUhlbHBlciIsImdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZCIsImlzRGF0YUZpZWxkRm9yQWN0aW9uQWJzdHJhY3QiLCJJbmxpbmUiLCJEZXRlcm1pbmluZyIsIiRUeXBlIiwiQWN0aW9uVGFyZ2V0IiwiaXNCb3VuZCIsInB1c2giLCJ0eXBlIiwiQWN0aW9uVHlwZSIsIkRhdGFGaWVsZEZvckFjdGlvbiIsImFubm90YXRpb25QYXRoIiwiZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsInZpc2libGUiLCJnZXRDb21waWxlRXhwcmVzc2lvbkZvckFjdGlvbiIsImlzQUlPcGVyYXRpb24iLCJpc0FjdGlvbkFJT3BlcmF0aW9uIiwidW5kZWZpbmVkIiwiRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiaXNOYXZpZ2FibGUiLCJpc0Fubm90YXRpb25BY3Rpb25Hcm91cCIsIk1lbnUiLCJ0ZXh0IiwiTGFiZWwiLCJ0b1N0cmluZyIsIm1lbnUiLCJtYXAiLCJhY3Rpb24iLCJnZXREYXRhRmllbGRBbm5vdGF0aW9uQWN0aW9uIiwiaXNNZW51QUlPcGVyYXRpb24iLCJnZXRDaGFydEFjdGlvbnMiLCJhQW5ub3RhdGlvbkFjdGlvbnMiLCJtYW5pZmVzdEFjdGlvbnMiLCJnZXRBY3Rpb25zRnJvbU1hbmlmZXN0IiwiZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbiIsImFjdGlvbnMiLCJhY3Rpb25PdmVyd3JpdGVDb25maWciLCJlbmFibGVkIiwiT3ZlcnJpZGVUeXBlIiwib3ZlcndyaXRlIiwiZW5hYmxlT25TZWxlY3QiLCJjb21tYW5kIiwicG9zaXRpb24iLCJncm91cCIsInByaW9yaXR5IiwiaW5zZXJ0Q3VzdG9tRWxlbWVudHMiLCJjb21tYW5kQWN0aW9ucyIsIl9leHBvcnRzIiwiZ2V0UDEzbk1vZGUiLCJtYW5pZmVzdFdyYXBwZXIiLCJnZXRNYW5pZmVzdFdyYXBwZXIiLCJjaGFydE1hbmlmZXN0U2V0dGluZ3MiLCJ2YXJpYW50TWFuYWdlbWVudCIsImdldFZhcmlhbnRNYW5hZ2VtZW50IiwiYVBlcnNvbmFsaXphdGlvbiIsInBlcnNvbmFsaXphdGlvbiIsImNoYXJ0U2V0dGluZ3MiLCJpc0NvbnRyb2xWYXJpYW50IiwiVmFyaWFudE1hbmFnZW1lbnRUeXBlIiwiQ29udHJvbCIsIml0ZW0iLCJzb3J0IiwiZmlsdGVyIiwiam9pbiIsImdldEhlYWRlckluZm8iLCJoZWFkZXIiLCJoZWFkZXJWaXNpYmxlIiwiZ2V0U2VsZWN0aW9uTW9kZSIsInNlbGVjdGlvbk1vZGUiLCJnZXRBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzT2JqZWN0IiwiYWdnUHJvcCIsIm9iaiIsIlByb3BlcnR5IiwiJFByb3BlcnR5UGF0aCIsInZhbHVlIiwibmFtZSIsImNyZWF0ZUNoYXJ0VmlzdWFsaXphdGlvbiIsImRvTm90Q2hlY2tBcHBseVN1cHBvcnRlZCIsInNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRQYXRoIiwiYWdncmVnYXRpb25IZWxwZXIiLCJBZ2dyZWdhdGlvbkhlbHBlciIsImdldEVudGl0eVR5cGUiLCJpc0FuYWx5dGljc1N1cHBvcnRlZCIsIkVycm9yIiwiYVRyYW5zQWdncmVnYXRpb25zIiwiZ2V0VHJhbnNBZ2dyZWdhdGlvbnMiLCJhQ3VzdG9tQWdncmVnYXRlcyIsImdldEN1c3RvbUFnZ3JlZ2F0ZURlZmluaXRpb25zIiwicGFnZU1hbmlmZXN0U2V0dGluZ3MiLCJwMTNuTW9kZSIsIkxvZyIsIndhcm5pbmciLCJtQ3VzdG9tQWdncmVnYXRlcyIsImVudGl0eVR5cGUiLCJjdXN0b21BZ2dyZWdhdGUiLCJhQ29udGV4dERlZmluaW5nUHJvcGVydGllcyIsImFubm90YXRpb25zIiwiQWdncmVnYXRpb24iLCJDb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzIiwicXVhbGlmaWVyIiwicmVsYXRlZEN1c3RvbUFnZ3JlZ2F0ZVByb3BlcnR5IiwiZW50aXR5UHJvcGVydGllcyIsImZpbmQiLCJwcm9wZXJ0eSIsImxhYmVsIiwiQ29tbW9uIiwic29ydGFibGUiLCJtVHJhbnNBZ2dyZWdhdGlvbnMiLCJvUmVzb3VyY2VCdW5kbGVDb3JlIiwiTGlicmFyeSIsImdldFJlc291cmNlQnVuZGxlRm9yIiwiZWxlbWVudCIsIk5hbWUiLCJwcm9wZXJ0eVBhdGgiLCJBZ2dyZWdhdGFibGVQcm9wZXJ0eSIsImFnZ3JlZ2F0aW9uTWV0aG9kIiwiQWdncmVnYXRpb25NZXRob2QiLCJnZXRUZXh0IiwiY3VzdG9tIiwiYUFnZ1Byb3BzIiwiZ2V0QWdncmVnYXRhYmxlUHJvcGVydGllcyIsImFHcnBQcm9wcyIsImdldEdyb3VwYWJsZVByb3BlcnRpZXMiLCJtQXBwbHlTdXBwb3J0ZWQiLCJBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzIiwiR3JvdXBhYmxlUHJvcGVydGllcyIsInByb3AiLCJuYXZpZ2F0aW9uUHJvcGVydHlQYXRoIiwic3BsaXQiLCJsYXN0SW5kZXhPZiIsImxlbmd0aCIsInN1YnN0cmluZyIsInRpdGxlIiwiVGl0bGUiLCJkYXRhTW9kZWxQYXRoIiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCIsImlzRW50aXR5U2V0IiwiZW50aXR5TmFtZSIsInRhcmdldEVudGl0eVNldCIsInN0YXJ0aW5nRW50aXR5U2V0Iiwic0ZpbHRlcmJhcklkIiwiZ2V0RmlsdGVyQmFySUQiLCJnZXRDb250ZXh0UGF0aCIsIm9WaXpQcm9wZXJ0aWVzIiwicGxvdEFyZWEiLCJ3aW5kb3ciLCJzdGFydCIsImVuZCIsImxlZ2VuZEdyb3VwIiwibGF5b3V0IiwidG9vbHRpcCIsImZvcm1hdFN0cmluZyIsImF1dG9CaW5kT25Jbml0IiwiZ2V0VGVtcGxhdGVUeXBlIiwiVGVtcGxhdGVUeXBlIiwiT2JqZWN0UGFnZSIsIkxpc3RSZXBvcnQiLCJBbmFseXRpY2FsTGlzdFBhZ2UiLCJoYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zIiwib25TZWdtZW50ZWRCdXR0b25QcmVzc2VkIiwiYWxsb3dlZFRyYW5zZm9ybWF0aW9ucyIsImdldEFsbG93ZWRUcmFuc2Zvcm1hdGlvbnMiLCJlbmFibGVTZWFyY2giLCJpbmNsdWRlcyIsImlzSW5zaWdodHNWaXNpYmxlIiwiZ2V0SW5zaWdodHNWaXNpYmlsaXR5IiwiaXNQYXJhbWV0ZXJpemVkRW50aXR5U2V0IiwiZ2V0UGFyYW1ldGVyRW50aXR5VHlwZSIsImlzSW5zaWdodHNFbmFibGVkIiwiYW5kIiwiZ2V0SW5zaWdodHNFbmFibGVtZW50IiwiY2hhcnREaW1lbnNpb25LZXlBbmRSb2xlIiwiRGltZW5zaW9uQXR0cmlidXRlcyIsImRpbWVuc2lvbkF0dHJpYnV0ZSIsIkRpbWVuc2lvbiIsIlJvbGUiLCJjaGFydE1lYXN1cmVLZXlBbmRSb2xlIiwiTWVhc3VyZUF0dHJpYnV0ZXMiLCJtZWFzdXJlQXR0cmlidXRlIiwiTWVhc3VyZSIsImNvbnRhaW5zVHJhbnNBZ2dJbk1lYXN1cmVzIiwiZ2V0QWdncmVnYXRlZFByb3BlcnRpZXMiLCJNZWFzdXJlcyIsInNvbWUiLCJtZWFzdXJlIiwiVmlzdWFsaXphdGlvblR5cGUiLCJDaGFydCIsImlkIiwiZ2V0Q2hhcnRJRCIsImNvbGxlY3Rpb24iLCJnZXRUYXJnZXRPYmplY3RQYXRoIiwiYXBpSWQiLCJnZW5lcmF0ZSIsIm5hdmlnYXRpb25QYXRoIiwiZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aCIsImZpbHRlcklkIiwidml6UHJvcGVydGllcyIsIkpTT04iLCJzdHJpbmdpZnkiLCJjdXN0b21BZ2ciLCJ0cmFuc0FnZyIsImFwcGx5U3VwcG9ydGVkIiwiZmluZFZhcmlhbnRNYW5hZ2VtZW50IiwiY29udGFpbnNBZ2dyZWdhdGVkUHJvcGVydHkiLCJnZXRBZ2dyZWdhdGVkUHJvcGVydHkiLCJOb25lIiwiY3JlYXRlQ2hhcnRWaXN1YWxpemF0aW9uRm9yVGVtcGxhdGluZyIsInZpc3VhbGl6YXRpb24iLCJjb21waWxlRXhwcmVzc2lvbiIsIm5vdCIsImVxdWFsIiwiZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uIiwiVUkiLCJIaWRkZW4iLCJnZXRSZWxhdGl2ZU1vZGVsUGF0aEZ1bmN0aW9uIiwiY3JlYXRlQmxhbmtDaGFydFZpc3VhbGl6YXRpb24iLCJtdWx0aVZpZXdzIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJDaGFydC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFByb3BlcnR5LCBQcm9wZXJ0eVBhdGggfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgQWdncmVnYXRhYmxlUHJvcGVydHlUeXBlLCBBZ2dyZWdhdGlvbk1ldGhvZCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQWdncmVnYXRpb25cIjtcbmltcG9ydCB7IEFnZ3JlZ2F0aW9uQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9BZ2dyZWdhdGlvblwiO1xuaW1wb3J0IHR5cGUge1xuXHRDaGFydCxcblx0RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0RGF0YUZpZWxkRm9yQWN0aW9uR3JvdXAsXG5cdERhdGFGaWVsZEZvckFjdGlvbkdyb3VwVHlwZXMsXG5cdERhdGFGaWVsZEZvckFjdGlvblR5cGVzXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB7IFVJQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSB7IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgeyBhbmQsIGNvbXBpbGVFeHByZXNzaW9uLCBlcXVhbCwgZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uLCBub3QsIHR5cGUgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgdHlwZSB7IFBhZ2VDb250ZXh0UGF0aFRhcmdldCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL1RlbXBsYXRlQ29udmVydGVyXCI7XG5pbXBvcnQgeyBpc0RhdGFGaWVsZEZvckFjdGlvbkFic3RyYWN0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvYW5ub3RhdGlvbnMvRGF0YUZpZWxkXCI7XG5pbXBvcnQgdHlwZSB7XG5cdEFubm90YXRpb25BY3Rpb24sXG5cdEFubm90YXRpb25BY3Rpb25BY3Rpb25Hcm91cCxcblx0QmFzZUFjdGlvbixcblx0Q29tYmluZWRBY3Rpb24sXG5cdEN1c3RvbUFjdGlvbixcblx0T3ZlcnJpZGVUeXBlQWN0aW9uXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB7IGdldEFjdGlvbnNGcm9tTWFuaWZlc3QsIGlzQWN0aW9uQUlPcGVyYXRpb24sIGlzTWVudUFJT3BlcmF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0FjdGlvblwiO1xuaW1wb3J0IHsgT3ZlcnJpZGVUeXBlLCBpbnNlcnRDdXN0b21FbGVtZW50cyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgeyBLZXlIZWxwZXIgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0tleVwiO1xuaW1wb3J0IHsgZ2VuZXJhdGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0VGFyZ2V0T2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCBMaWJyYXJ5IGZyb20gXCJzYXAvdWkvY29yZS9MaWJcIjtcbmltcG9ydCB0eXBlIHsgRXhwYW5kUGF0aFR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdHlwZXMvbWV0YW1vZGVsX3R5cGVzXCI7XG5pbXBvcnQgdHlwZSBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCIuLi8uLi9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IENoYXJ0TWFuaWZlc3RDb25maWd1cmF0aW9uLCBNYW5pZmVzdEFjdGlvbiB9IGZyb20gXCIuLi8uLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBBY3Rpb25UeXBlLCBUZW1wbGF0ZVR5cGUsIFZhcmlhbnRNYW5hZ2VtZW50VHlwZSwgVmlzdWFsaXphdGlvblR5cGUgfSBmcm9tIFwiLi4vLi4vTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHR5cGUgTWFuaWZlc3RXcmFwcGVyIGZyb20gXCIuLi8uLi9NYW5pZmVzdFdyYXBwZXJcIjtcbmltcG9ydCB7IEFnZ3JlZ2F0aW9uSGVscGVyIH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMvQWdncmVnYXRpb25cIjtcbmltcG9ydCB7IGdldENoYXJ0SUQsIGdldEZpbHRlckJhcklEIH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMvSURcIjtcbmltcG9ydCB7IGdldEluc2lnaHRzRW5hYmxlbWVudCwgZ2V0SW5zaWdodHNWaXNpYmlsaXR5IH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMvSW5zaWdodHNIZWxwZXJzXCI7XG5pbXBvcnQgdHlwZSB7IEFjdHVhbFZpc3VhbGl6YXRpb25Bbm5vdGF0aW9ucyB9IGZyb20gXCIuL0RhdGFWaXN1YWxpemF0aW9uXCI7XG5cbmV4cG9ydCB0eXBlIENoYXJ0QXBwbHlTdXBwb3J0ZWQgPSB7XG5cdCRUeXBlOiBzdHJpbmc7XG5cdGVuYWJsZVNlYXJjaD86IGJvb2xlYW47XG5cdEFnZ3JlZ2F0YWJsZVByb3BlcnRpZXM/OiAoRXhwYW5kUGF0aFR5cGU8UHJvcGVydHlQYXRoPiAmIHsgUHJvcGVydHk6IEV4cGFuZFBhdGhUeXBlPFByb3BlcnR5UGF0aD4gfSlbXTtcblx0R3JvdXBhYmxlUHJvcGVydGllcz86IChFeHBhbmRQYXRoVHlwZTxQcm9wZXJ0eVBhdGg+ICYgeyBQcm9wZXJ0eTogRXhwYW5kUGF0aFR5cGU8UHJvcGVydHlQYXRoPiB9KVtdO1xufTtcbmV4cG9ydCB0eXBlIENoYXJ0VGVtcGxhdGVWaXN1YWxpemF0aW9uID0ge1xuXHR0eXBlOiBWaXN1YWxpemF0aW9uVHlwZS5DaGFydDtcblx0aWQ6IHN0cmluZztcblx0YXBpSWQ6IHN0cmluZztcblx0ZW50aXR5TmFtZTogc3RyaW5nO1xuXHRjb2xsZWN0aW9uOiBzdHJpbmc7XG5cdGFubm90YXRpb25QYXRoOiBzdHJpbmc7XG5cdGFwcGx5U3VwcG9ydGVkOiBDaGFydEFwcGx5U3VwcG9ydGVkO1xuXHRpc1BhcmFtZXRlcml6ZWRFbnRpdHlTZXQ/OiBib29sZWFuO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiBDaGFydFZpc3VhbGl6YXRpb25cbiAqL1xuZXhwb3J0IHR5cGUgQ2hhcnRWaXN1YWxpemF0aW9uID0gQ2hhcnRUZW1wbGF0ZVZpc3VhbGl6YXRpb24gJiB7XG5cdGVudGl0eU5hbWU6IHN0cmluZztcblx0cGVyc29uYWxpemF0aW9uPzogc3RyaW5nIHwgYm9vbGVhbjtcblx0bmF2aWdhdGlvblBhdGg6IHN0cmluZztcblx0ZmlsdGVySWQ/OiBzdHJpbmc7XG5cdHZpelByb3BlcnRpZXM6IHN0cmluZztcblx0YWN0aW9uczogQmFzZUFjdGlvbltdO1xuXHRjb21tYW5kQWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPjtcblx0dGl0bGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0YXV0b0JpbmRPbkluaXQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cdG9uU2VnbWVudGVkQnV0dG9uUHJlc3NlZDogc3RyaW5nO1xuXHR2aXNpYmxlOiBzdHJpbmc7XG5cdGN1c3RvbUFnZzogb2JqZWN0O1xuXHR0cmFuc0FnZzogb2JqZWN0O1xuXHRtdWx0aVZpZXdzPzogYm9vbGVhbjtcblx0dmFyaWFudE1hbmFnZW1lbnQ6IFZhcmlhbnRNYW5hZ2VtZW50VHlwZTtcblx0c2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFBhdGg/OiBzdHJpbmc7XG5cdGlzSW5zaWdodHNFbmFibGVkPzogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRpc0luc2lnaHRzVmlzaWJsZT86IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPjtcblx0aGVhZGVyPzogc3RyaW5nO1xuXHRoZWFkZXJWaXNpYmxlPzogYm9vbGVhbjtcblx0c2VsZWN0aW9uTW9kZT86IHN0cmluZztcblx0Y2hhcnREaW1lbnNpb25LZXlBbmRSb2xlPzogb2JqZWN0O1xuXHRjaGFydE1lYXN1cmVLZXlBbmRSb2xlPzogb2JqZWN0O1xuXHRjb250YWluc0FnZ3JlZ2F0ZWRQcm9wZXJ0eT86IGJvb2xlYW47XG5cdGNvbnRhaW5zVHJhbnNBZ2dJbk1lYXN1cmVzPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIENoYXJ0UDEzblR5cGUgPSBzdHJpbmcgfCBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG4vKipcbiAqIE1ldGhvZCB0byByZXRyaWV2ZSBhbGwgY2hhcnQgYWN0aW9ucyBmcm9tIGFubm90YXRpb25zLlxuICogQHBhcmFtIGNoYXJ0QW5ub3RhdGlvblxuICogQHBhcmFtIHZpc3VhbGl6YXRpb25QYXRoXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMgVGhlIGNoYXJ0IGFjdGlvbnMgZnJvbSB0aGUgYW5ub3RhdGlvblxuICovXG5mdW5jdGlvbiBnZXRDaGFydEFjdGlvbnNGcm9tQW5ub3RhdGlvbnMoXG5cdGNoYXJ0QW5ub3RhdGlvbjogQ2hhcnQsXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogQXJyYXk8QW5ub3RhdGlvbkFjdGlvbiB8IEFubm90YXRpb25BY3Rpb25BY3Rpb25Hcm91cD4ge1xuXHRjb25zdCBjaGFydEFjdGlvbnM6IEFycmF5PEFubm90YXRpb25BY3Rpb24gfCBBbm5vdGF0aW9uQWN0aW9uQWN0aW9uR3JvdXA+ID0gW107XG5cdGlmIChjaGFydEFubm90YXRpb24/LkFjdGlvbnMpIHtcblx0XHRjaGFydEFubm90YXRpb24uQWN0aW9ucy5mb3JFYWNoKChkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhRmllbGRGb3JBY3Rpb25Hcm91cFR5cGVzKSA9PiB7XG5cdFx0XHRjb25zdCBrZXkgPSBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCk7XG5cdFx0XHRpZiAoaXNEYXRhRmllbGRGb3JBY3Rpb25BYnN0cmFjdChkYXRhRmllbGQpICYmICFkYXRhRmllbGQuSW5saW5lICYmICFkYXRhRmllbGQuRGV0ZXJtaW5pbmcpIHtcblx0XHRcdFx0c3dpdGNoIChkYXRhRmllbGQuJFR5cGUpIHtcblx0XHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbjpcblx0XHRcdFx0XHRcdGlmIChkYXRhRmllbGQuQWN0aW9uVGFyZ2V0ICYmICFkYXRhRmllbGQuQWN0aW9uVGFyZ2V0LmlzQm91bmQpIHtcblx0XHRcdFx0XHRcdFx0Y2hhcnRBY3Rpb25zLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRcdHR5cGU6IEFjdGlvblR5cGUuRGF0YUZpZWxkRm9yQWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRcdGFubm90YXRpb25QYXRoOiBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgoZGF0YUZpZWxkLmZ1bGx5UXVhbGlmaWVkTmFtZSksXG5cdFx0XHRcdFx0XHRcdFx0a2V5LFxuXHRcdFx0XHRcdFx0XHRcdHZpc2libGU6IGdldENvbXBpbGVFeHByZXNzaW9uRm9yQWN0aW9uKGRhdGFGaWVsZCwgY29udmVydGVyQ29udGV4dCksXG5cdFx0XHRcdFx0XHRcdFx0aXNBSU9wZXJhdGlvbjogaXNBY3Rpb25BSU9wZXJhdGlvbihkYXRhRmllbGQpID09PSB0cnVlIHx8IHVuZGVmaW5lZFxuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb246XG5cdFx0XHRcdFx0XHRjaGFydEFjdGlvbnMucHVzaCh7XG5cdFx0XHRcdFx0XHRcdHR5cGU6IEFjdGlvblR5cGUuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uLFxuXHRcdFx0XHRcdFx0XHRhbm5vdGF0aW9uUGF0aDogY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKGRhdGFGaWVsZC5mdWxseVF1YWxpZmllZE5hbWUpLFxuXHRcdFx0XHRcdFx0XHRrZXksXG5cdFx0XHRcdFx0XHRcdHZpc2libGU6IGdldENvbXBpbGVFeHByZXNzaW9uRm9yQWN0aW9uKGRhdGFGaWVsZCwgY29udmVydGVyQ29udGV4dCksXG5cdFx0XHRcdFx0XHRcdGlzTmF2aWdhYmxlOiB0cnVlXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc0Fubm90YXRpb25BY3Rpb25Hcm91cChkYXRhRmllbGQpKSB7XG5cdFx0XHRcdGNoYXJ0QWN0aW9ucy5wdXNoKHtcblx0XHRcdFx0XHR0eXBlOiBBY3Rpb25UeXBlLk1lbnUsXG5cdFx0XHRcdFx0dGV4dDogZGF0YUZpZWxkLkxhYmVsPy50b1N0cmluZygpLFxuXHRcdFx0XHRcdHZpc2libGU6IGdldENvbXBpbGVFeHByZXNzaW9uRm9yQWN0aW9uKGRhdGFGaWVsZCwgY29udmVydGVyQ29udGV4dCksXG5cdFx0XHRcdFx0bWVudTogZGF0YUZpZWxkLkFjdGlvbnMubWFwKChhY3Rpb24pID0+XG5cdFx0XHRcdFx0XHRnZXREYXRhRmllbGRBbm5vdGF0aW9uQWN0aW9uKGFjdGlvbiBhcyBEYXRhRmllbGRGb3JBY3Rpb25UeXBlcywgY29udmVydGVyQ29udGV4dClcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdGtleTogS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpLFxuXHRcdFx0XHRcdGlzQUlPcGVyYXRpb246IGlzTWVudUFJT3BlcmF0aW9uKGRhdGFGaWVsZC5BY3Rpb25zKSA9PT0gdHJ1ZSB8fCB1bmRlZmluZWRcblx0XHRcdFx0fSBhcyBBbm5vdGF0aW9uQWN0aW9uQWN0aW9uR3JvdXApO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBjaGFydEFjdGlvbnM7XG59XG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZGF0YUZpZWxkIGlzIGEgRGF0YUZpZWxkRm9yQWN0aW9uR3JvdXAuXG4gKiBAcGFyYW0gZGF0YUZpZWxkIFRoZSBkYXRhRmllbGQgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBUaGUgZGF0YUZpZWxkIGlmIGl0IG1hdGNoZXMgRGF0YUZpZWxkRm9yQWN0aW9uR3JvdXAuXG4gKi9cbmZ1bmN0aW9uIGlzQW5ub3RhdGlvbkFjdGlvbkdyb3VwKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyk6IGRhdGFGaWVsZCBpcyBEYXRhRmllbGRGb3JBY3Rpb25Hcm91cCB7XG5cdHJldHVybiBkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbkdyb3VwO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYW5kIHJldHVybnMgRGF0YUZpZWxkRm9yQWN0aW9uIGZvciBtZW51IG9mIERhdGFGaWVsZEZvckFjdGlvbkdyb3VwLlxuICogQHBhcmFtIGRhdGFGaWVsZCBUaGUgZGF0YWZpZWxkIHRvIGdldCB0aGUgYW5ub3RhdGlvbiBhY3Rpb24gZnJvbS5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dC5cbiAqIEByZXR1cm5zIEFuIGFubm90YXRpb24gYWN0aW9uLlxuICovXG5mdW5jdGlvbiBnZXREYXRhRmllbGRBbm5vdGF0aW9uQWN0aW9uKFxuXHRkYXRhRmllbGQ6IERhdGFGaWVsZEZvckFjdGlvblR5cGVzLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IEFubm90YXRpb25BY3Rpb24ge1xuXHRyZXR1cm4ge1xuXHRcdHR5cGU6IEFjdGlvblR5cGUuRGF0YUZpZWxkRm9yQWN0aW9uLFxuXHRcdGFubm90YXRpb25QYXRoOiBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgoZGF0YUZpZWxkLmZ1bGx5UXVhbGlmaWVkTmFtZSksXG5cdFx0a2V5OiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCksXG5cdFx0dmlzaWJsZTogZ2V0Q29tcGlsZUV4cHJlc3Npb25Gb3JBY3Rpb24oZGF0YUZpZWxkLCBjb252ZXJ0ZXJDb250ZXh0KVxuXHR9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2hhcnRBY3Rpb25zKFxuXHRjaGFydEFubm90YXRpb246IENoYXJ0LFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IENvbWJpbmVkQWN0aW9uIHtcblx0Y29uc3QgYUFubm90YXRpb25BY3Rpb25zID0gZ2V0Q2hhcnRBY3Rpb25zRnJvbUFubm90YXRpb25zKGNoYXJ0QW5ub3RhdGlvbiwgdmlzdWFsaXphdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBtYW5pZmVzdEFjdGlvbnMgPSBnZXRBY3Rpb25zRnJvbU1hbmlmZXN0KFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbjxDaGFydE1hbmlmZXN0Q29uZmlndXJhdGlvbj4odmlzdWFsaXphdGlvblBhdGgpLmFjdGlvbnMgYXMgUmVjb3JkPFxuXHRcdFx0c3RyaW5nLFxuXHRcdFx0TWFuaWZlc3RBY3Rpb25cblx0XHQ+LFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0YUFubm90YXRpb25BY3Rpb25zXG5cdCk7XG5cdGNvbnN0IGFjdGlvbk92ZXJ3cml0ZUNvbmZpZzogT3ZlcnJpZGVUeXBlQWN0aW9uID0ge1xuXHRcdGVuYWJsZWQ6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0ZW5hYmxlT25TZWxlY3Q6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0dmlzaWJsZTogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRjb21tYW5kOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdHBvc2l0aW9uOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdGdyb3VwOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdHByaW9yaXR5OiBPdmVycmlkZVR5cGUub3ZlcndyaXRlXG5cdH07XG5cdGNvbnN0IGNoYXJ0QWN0aW9ucyA9IGluc2VydEN1c3RvbUVsZW1lbnRzPEJhc2VBY3Rpb24+KGFBbm5vdGF0aW9uQWN0aW9ucywgbWFuaWZlc3RBY3Rpb25zLmFjdGlvbnMsIGFjdGlvbk92ZXJ3cml0ZUNvbmZpZyk7XG5cdHJldHVybiB7XG5cdFx0YWN0aW9uczogY2hhcnRBY3Rpb25zLFxuXHRcdGNvbW1hbmRBY3Rpb25zOiBtYW5pZmVzdEFjdGlvbnMuY29tbWFuZEFjdGlvbnNcblx0fTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFAxM25Nb2RlKFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IHN0cmluZyB8IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuXHRjb25zdCBtYW5pZmVzdFdyYXBwZXI6IE1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cdGNvbnN0IGNoYXJ0TWFuaWZlc3RTZXR0aW5nczogQ2hhcnRNYW5pZmVzdENvbmZpZ3VyYXRpb24gPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb24odmlzdWFsaXphdGlvblBhdGgpO1xuXHRjb25zdCB2YXJpYW50TWFuYWdlbWVudDogVmFyaWFudE1hbmFnZW1lbnRUeXBlID0gbWFuaWZlc3RXcmFwcGVyLmdldFZhcmlhbnRNYW5hZ2VtZW50KCk7XG5cdGNvbnN0IGFQZXJzb25hbGl6YXRpb246IHN0cmluZ1tdID0gW107XG5cdC8vIFBlcnNvbmFsaXphdGlvbiBjb25maWd1cmVkIGluIG1hbmlmZXN0LlxuXHRjb25zdCBwZXJzb25hbGl6YXRpb24gPSBjaGFydE1hbmlmZXN0U2V0dGluZ3M/LmNoYXJ0U2V0dGluZ3M/LnBlcnNvbmFsaXphdGlvbjtcblx0Y29uc3QgaXNDb250cm9sVmFyaWFudCA9IHZhcmlhbnRNYW5hZ2VtZW50ID09PSBWYXJpYW50TWFuYWdlbWVudFR5cGUuQ29udHJvbCA/IHRydWUgOiBmYWxzZTtcblx0Ly8gaWYgcGVyc29uYWxpemF0aW9uIGlzIHNldCB0byBmYWxzZSBkbyBub3Qgc2hvdyBhbnkgb3B0aW9uXG5cdGlmICgocGVyc29uYWxpemF0aW9uICE9PSB1bmRlZmluZWQgJiYgIXBlcnNvbmFsaXphdGlvbikgfHwgcGVyc29uYWxpemF0aW9uID09IFwiZmFsc2VcIikge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAodHlwZW9mIHBlcnNvbmFsaXphdGlvbiA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIFNwZWNpZmljIHBlcnNvbmFsaXphdGlvbiBvcHRpb25zIGVuYWJsZWQgaW4gbWFuaWZlc3QuIFVzZSB0aGVtIGFzIGlzLlxuXHRcdGlmIChwZXJzb25hbGl6YXRpb24udHlwZSkge1xuXHRcdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiVHlwZVwiKTtcblx0XHR9XG5cdFx0aWYgKHBlcnNvbmFsaXphdGlvbi5pdGVtKSB7XG5cdFx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJJdGVtXCIpO1xuXHRcdH1cblx0XHRpZiAocGVyc29uYWxpemF0aW9uLnNvcnQpIHtcblx0XHRcdGFQZXJzb25hbGl6YXRpb24ucHVzaChcIlNvcnRcIik7XG5cdFx0fVxuXHRcdGlmIChwZXJzb25hbGl6YXRpb24uZmlsdGVyKSB7XG5cdFx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJGaWx0ZXJcIik7XG5cdFx0fVxuXHRcdHJldHVybiBhUGVyc29uYWxpemF0aW9uLmpvaW4oXCIsXCIpO1xuXHR9IGVsc2UgaWYgKGlzQ29udHJvbFZhcmlhbnQgfHwgISFwZXJzb25hbGl6YXRpb24pIHtcblx0XHQvLyBtYW5pZmVzdCBoYXMgcGVyc29uYWxpemF0aW9uIGNvbmZpZ3VyZWQsIGNoZWNrIGlmIGl0J3MgdHJ1ZVxuXHRcdC8vIGlmIG1hbmlmZXN0IGRvZXNuJ3QgaGF2ZSBwZXJzb25hbGl6YXRpb24sIGNoZWNrIGZvciB2YXJpYW50IG1hbmFnZW1lbnQgaXMgc2V0IHRvIGNvbnRyb2xcblx0XHRyZXR1cm4gXCJTb3J0LFR5cGUsSXRlbSxGaWx0ZXJcIjtcblx0fSBlbHNlIHtcblx0XHQvLyBpZiBtYW5pZmVzdCBkb2Vzbid0IGhhdmUgcGVyc29uYWxpemF0aW9uLCBzaG93IGRlZmF1bHQgb3B0aW9ucyB3aXRob3V0IGZpbHRlclxuXHRcdHJldHVybiBcIlNvcnQsVHlwZSxJdGVtXCI7XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEhlYWRlckluZm8oXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogeyBoZWFkZXI6IHN0cmluZyB8IHVuZGVmaW5lZDsgaGVhZGVyVmlzaWJsZTogYm9vbGVhbiB8IHVuZGVmaW5lZCB9IHtcblx0Y29uc3QgY2hhcnRNYW5pZmVzdFNldHRpbmdzOiBDaGFydE1hbmlmZXN0Q29uZmlndXJhdGlvbiA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbih2aXN1YWxpemF0aW9uUGF0aCk7XG5cdHJldHVybiB7XG5cdFx0aGVhZGVyOiBjaGFydE1hbmlmZXN0U2V0dGluZ3MuY2hhcnRTZXR0aW5ncz8uaGVhZGVyLFxuXHRcdGhlYWRlclZpc2libGU6IGNoYXJ0TWFuaWZlc3RTZXR0aW5ncz8uY2hhcnRTZXR0aW5ncz8uaGVhZGVyVmlzaWJsZVxuXHR9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VsZWN0aW9uTW9kZShcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBcIk11bHRpcGxlXCIgfCBcIlNpbmdsZVwiIHwgXCJOb25lXCIgfCB1bmRlZmluZWQge1xuXHRjb25zdCBjaGFydE1hbmlmZXN0U2V0dGluZ3M6IENoYXJ0TWFuaWZlc3RDb25maWd1cmF0aW9uID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKTtcblx0cmV0dXJuIGNoYXJ0TWFuaWZlc3RTZXR0aW5ncy5jaGFydFNldHRpbmdzPy5zZWxlY3Rpb25Nb2RlO1xufVxuZXhwb3J0IHR5cGUgQ2hhcnRDdXN0b21BZ2dyZWdhdGUgPSB7XG5cdG5hbWU6IHN0cmluZztcblx0bGFiZWw6IHN0cmluZztcblx0c29ydGFibGU6IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBUcmFuc0FnZyA9IHtcblx0bmFtZTogc3RyaW5nO1xuXHRwcm9wZXJ0eVBhdGg6IHN0cmluZztcblx0YWdncmVnYXRpb25NZXRob2Q6IEFnZ3JlZ2F0aW9uTWV0aG9kO1xuXHRsYWJlbDogc3RyaW5nO1xuXHRzb3J0YWJsZTogYm9vbGVhbjtcblx0Y3VzdG9tOiBib29sZWFuO1xufTtcbmZ1bmN0aW9uIGdldEFnZ3JlZ2F0YWJsZVByb3BlcnRpZXNPYmplY3QoYWdnUHJvcDogQWdncmVnYXRhYmxlUHJvcGVydHlUeXBlIHwgUHJvcGVydHkpOiB7IFByb3BlcnR5OiB7ICRQcm9wZXJ0eVBhdGg6IHN0cmluZyB9IH0ge1xuXHRsZXQgb2JqO1xuXHRpZiAoKGFnZ1Byb3AgYXMgQWdncmVnYXRhYmxlUHJvcGVydHlUeXBlKT8uUHJvcGVydHkpIHtcblx0XHRvYmogPSB7XG5cdFx0XHRQcm9wZXJ0eToge1xuXHRcdFx0XHQkUHJvcGVydHlQYXRoOiAoYWdnUHJvcCBhcyBBZ2dyZWdhdGFibGVQcm9wZXJ0eVR5cGUpPy5Qcm9wZXJ0eT8udmFsdWVcblx0XHRcdH1cblx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdG9iaiA9IHtcblx0XHRcdFByb3BlcnR5OiB7XG5cdFx0XHRcdCRQcm9wZXJ0eVBhdGg6IChhZ2dQcm9wIGFzIFByb3BlcnR5KT8ubmFtZVxuXHRcdFx0fVxuXHRcdH07XG5cdH1cblx0cmV0dXJuIG9iajtcbn1cbi8qKlxuICogQ3JlYXRlIHRoZSBDaGFydFZpc3VhbGl6YXRpb24gY29uZmlndXJhdGlvbiB0aGF0IHdpbGwgYmUgdXNlZCB0byBkaXNwbGF5IGEgY2hhcnQgdXNpbmcgdGhlIENoYXJ0IGJ1aWxkaW5nIGJsb2NrLlxuICogQHBhcmFtIGNoYXJ0QW5ub3RhdGlvbiBUaGUgdGFyZ2V0ZWQgY2hhcnQgYW5ub3RhdGlvblxuICogQHBhcmFtIHZpc3VhbGl6YXRpb25QYXRoIFRoZSBwYXRoIG9mIHRoZSB2aXN1YWxpemF0aW9uIGFubm90YXRpb25cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIGRvTm90Q2hlY2tBcHBseVN1cHBvcnRlZCBGbGFnIHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgQXBwbHlTdXBwb3J0ZWQgbmVlZHMgdG8gYmUgY2hlY2tlZCBvciBub3RcbiAqIEBwYXJhbSBzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50UGF0aFxuICogQHJldHVybnMgVGhlIGNoYXJ0IHZpc3VhbGl6YXRpb24gYmFzZWQgb24gdGhlIGFubm90YXRpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNoYXJ0VmlzdWFsaXphdGlvbihcblx0Y2hhcnRBbm5vdGF0aW9uOiBDaGFydCxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRkb05vdENoZWNrQXBwbHlTdXBwb3J0ZWQ/OiBib29sZWFuLFxuXHRzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50UGF0aD86IHN0cmluZ1xuKTogQ2hhcnRWaXN1YWxpemF0aW9uIHtcblx0Y29uc3QgYWdncmVnYXRpb25IZWxwZXIgPSBuZXcgQWdncmVnYXRpb25IZWxwZXIoY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCksIGNvbnZlcnRlckNvbnRleHQsIHRydWUpOyAvLyBwYXNzaW5nIHRoZSBsYXN0IHBhcmFtZXRlciBhcyB0cnVlIHRvIGNvbnNpZGVyIHRoZSBvbGQgYW5ub3RhdGlvbnMgaS5lLiBBZ2dyZWdhdGlvbi5BZ2dyZWdhdGFibGUgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgaW4gY2FzZSBvZiBjaGFydFxuXHRpZiAoIWRvTm90Q2hlY2tBcHBseVN1cHBvcnRlZCAmJiAhYWdncmVnYXRpb25IZWxwZXIuaXNBbmFseXRpY3NTdXBwb3J0ZWQoKSkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIkFwcGx5U3VwcG9ydGVkIGlzIG5vdCBhZGRlZCB0byB0aGUgYW5ub3RhdGlvbnNcIik7XG5cdH1cblx0Y29uc3QgYVRyYW5zQWdncmVnYXRpb25zID0gYWdncmVnYXRpb25IZWxwZXIuZ2V0VHJhbnNBZ2dyZWdhdGlvbnMoKTtcblx0Y29uc3QgYUN1c3RvbUFnZ3JlZ2F0ZXMgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRDdXN0b21BZ2dyZWdhdGVEZWZpbml0aW9ucygpO1xuXHRjb25zdCBwYWdlTWFuaWZlc3RTZXR0aW5nczogTWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0Y29uc3QgdmFyaWFudE1hbmFnZW1lbnQ6IFZhcmlhbnRNYW5hZ2VtZW50VHlwZSA9IHBhZ2VNYW5pZmVzdFNldHRpbmdzLmdldFZhcmlhbnRNYW5hZ2VtZW50KCk7XG5cdGNvbnN0IHAxM25Nb2RlOiBDaGFydFAxM25UeXBlID0gZ2V0UDEzbk1vZGUodmlzdWFsaXphdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRpZiAocDEzbk1vZGUgPT09IHVuZGVmaW5lZCAmJiB2YXJpYW50TWFuYWdlbWVudCA9PT0gXCJDb250cm9sXCIpIHtcblx0XHRMb2cud2FybmluZyhcIlZhcmlhbnQgTWFuYWdlbWVudCBjYW5ub3QgYmUgZW5hYmxlZCB3aGVuIHBlcnNvbmFsaXphdGlvbiBpcyBkaXNhYmxlZFwiKTtcblx0fVxuXHRjb25zdCBtQ3VzdG9tQWdncmVnYXRlczogUmVjb3JkPHN0cmluZywgb2JqZWN0PiA9IHt9O1xuXHRpZiAoYUN1c3RvbUFnZ3JlZ2F0ZXMpIHtcblx0XHRjb25zdCBlbnRpdHlUeXBlID0gYWdncmVnYXRpb25IZWxwZXIuZ2V0RW50aXR5VHlwZSgpO1xuXHRcdGZvciAoY29uc3QgY3VzdG9tQWdncmVnYXRlIG9mIGFDdXN0b21BZ2dyZWdhdGVzKSB7XG5cdFx0XHRjb25zdCBhQ29udGV4dERlZmluaW5nUHJvcGVydGllcyA9IGN1c3RvbUFnZ3JlZ2F0ZT8uYW5ub3RhdGlvbnM/LkFnZ3JlZ2F0aW9uPy5Db250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzO1xuXHRcdFx0Y29uc3QgcXVhbGlmaWVyID0gY3VzdG9tQWdncmVnYXRlPy5xdWFsaWZpZXI7XG5cdFx0XHRjb25zdCByZWxhdGVkQ3VzdG9tQWdncmVnYXRlUHJvcGVydHkgPSBxdWFsaWZpZXIgJiYgZW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzLmZpbmQoKHByb3BlcnR5KSA9PiBwcm9wZXJ0eS5uYW1lID09PSBxdWFsaWZpZXIpO1xuXHRcdFx0Y29uc3QgbGFiZWwgPSByZWxhdGVkQ3VzdG9tQWdncmVnYXRlUHJvcGVydHkgJiYgcmVsYXRlZEN1c3RvbUFnZ3JlZ2F0ZVByb3BlcnR5Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5MYWJlbD8udG9TdHJpbmcoKTtcblx0XHRcdG1DdXN0b21BZ2dyZWdhdGVzW3F1YWxpZmllcl0gPSB7XG5cdFx0XHRcdG5hbWU6IHF1YWxpZmllcixcblx0XHRcdFx0bGFiZWw6IGxhYmVsIHx8IGBDdXN0b20gQWdncmVnYXRlICgke3F1YWxpZmllcn0pYCxcblx0XHRcdFx0c29ydGFibGU6IHRydWVcblx0XHRcdH07XG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgbVRyYW5zQWdncmVnYXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBUcmFuc0FnZz4gPSB7fTtcblx0Y29uc3Qgb1Jlc291cmNlQnVuZGxlQ29yZSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSE7XG5cdGlmIChhVHJhbnNBZ2dyZWdhdGlvbnMpIHtcblx0XHRmb3IgKGNvbnN0IGVsZW1lbnQgb2YgYVRyYW5zQWdncmVnYXRpb25zKSB7XG5cdFx0XHRtVHJhbnNBZ2dyZWdhdGlvbnNbZWxlbWVudC5OYW1lIGFzIHN0cmluZ10gPSB7XG5cdFx0XHRcdG5hbWU6IGVsZW1lbnQuTmFtZSBhcyBzdHJpbmcsXG5cdFx0XHRcdHByb3BlcnR5UGF0aDogZWxlbWVudC5BZ2dyZWdhdGFibGVQcm9wZXJ0eS52YWx1ZSxcblx0XHRcdFx0YWdncmVnYXRpb25NZXRob2Q6IGVsZW1lbnQuQWdncmVnYXRpb25NZXRob2QsXG5cdFx0XHRcdGxhYmVsOiBlbGVtZW50Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5MYWJlbFxuXHRcdFx0XHRcdD8gZWxlbWVudD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uTGFiZWw/LnRvU3RyaW5nKClcblx0XHRcdFx0XHQ6IGAke29SZXNvdXJjZUJ1bmRsZUNvcmUuZ2V0VGV4dChcIkFHR1JFR0FUQUJMRV9QUk9QRVJUWVwiKX0gKCR7ZWxlbWVudC5OYW1lfSlgLFxuXHRcdFx0XHRzb3J0YWJsZTogdHJ1ZSxcblx0XHRcdFx0Y3VzdG9tOiBmYWxzZVxuXHRcdFx0fTtcblx0XHR9XG5cdH1cblxuXHRjb25zdCBhQWdnUHJvcHMgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzKCk7XG5cdGNvbnN0IGFHcnBQcm9wcyA9IGFnZ3JlZ2F0aW9uSGVscGVyLmdldEdyb3VwYWJsZVByb3BlcnRpZXMoKTtcblx0Y29uc3QgbUFwcGx5U3VwcG9ydGVkID0ge30gYXMgQ2hhcnRBcHBseVN1cHBvcnRlZDtcblx0bUFwcGx5U3VwcG9ydGVkLiRUeXBlID0gQWdncmVnYXRpb25Bbm5vdGF0aW9uVHlwZXMuQXBwbHlTdXBwb3J0ZWRUeXBlO1xuXHRtQXBwbHlTdXBwb3J0ZWQuQWdncmVnYXRhYmxlUHJvcGVydGllcyA9IFtdO1xuXHRtQXBwbHlTdXBwb3J0ZWQuR3JvdXBhYmxlUHJvcGVydGllcyA9IFtdO1xuXG5cdGlmIChhQWdnUHJvcHMpIHtcblx0XHRtQXBwbHlTdXBwb3J0ZWQuQWdncmVnYXRhYmxlUHJvcGVydGllcyA9IGFBZ2dQcm9wcy5tYXAoKHByb3ApID0+XG5cdFx0XHRnZXRBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzT2JqZWN0KHByb3ApXG5cdFx0KSBhcyAoRXhwYW5kUGF0aFR5cGU8UHJvcGVydHlQYXRoPiAmIHsgUHJvcGVydHk6IEV4cGFuZFBhdGhUeXBlPFByb3BlcnR5UGF0aD4gfSlbXTtcblx0fVxuXG5cdGlmIChhR3JwUHJvcHMpIHtcblx0XHRtQXBwbHlTdXBwb3J0ZWQuR3JvdXBhYmxlUHJvcGVydGllcyA9IGFHcnBQcm9wcy5tYXAoKHByb3ApID0+ICh7XG5cdFx0XHRbXCIkUHJvcGVydHlQYXRoXCJdOiBwcm9wLnZhbHVlXG5cdFx0fSkpIGFzIChFeHBhbmRQYXRoVHlwZTxQcm9wZXJ0eVBhdGg+ICYgeyBQcm9wZXJ0eTogRXhwYW5kUGF0aFR5cGU8UHJvcGVydHlQYXRoPiB9KVtdO1xuXHR9XG5cblx0Y29uc3QgY2hhcnRBY3Rpb25zID0gZ2V0Q2hhcnRBY3Rpb25zKGNoYXJ0QW5ub3RhdGlvbiwgdmlzdWFsaXphdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRsZXQgW25hdmlnYXRpb25Qcm9wZXJ0eVBhdGggLyosIGFubm90YXRpb25QYXRoKi9dID0gdmlzdWFsaXphdGlvblBhdGguc3BsaXQoXCJAXCIpO1xuXHRpZiAobmF2aWdhdGlvblByb3BlcnR5UGF0aC5sYXN0SW5kZXhPZihcIi9cIikgPT09IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgubGVuZ3RoIC0gMSkge1xuXHRcdC8vIERyb3AgdHJhaWxpbmcgc2xhc2hcblx0XHRuYXZpZ2F0aW9uUHJvcGVydHlQYXRoID0gbmF2aWdhdGlvblByb3BlcnR5UGF0aC5zdWJzdHJpbmcoMCwgbmF2aWdhdGlvblByb3BlcnR5UGF0aC5sZW5ndGggLSAxKTtcblx0fVxuXHRjb25zdCB0aXRsZSA9IGNoYXJ0QW5ub3RhdGlvbi5UaXRsZT8udG9TdHJpbmcoKSB8fCBcIlwiOyAvLyByZWFkIHRpdGxlIGZyb20gY2hhcnQgYW5ub3RhdGlvblxuXHRjb25zdCBkYXRhTW9kZWxQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCk7XG5cdGNvbnN0IGlzRW50aXR5U2V0OiBib29sZWFuID0gbmF2aWdhdGlvblByb3BlcnR5UGF0aC5sZW5ndGggPT09IDA7XG5cdGNvbnN0IGVudGl0eU5hbWU6IHN0cmluZyA9IGRhdGFNb2RlbFBhdGgudGFyZ2V0RW50aXR5U2V0ID8gZGF0YU1vZGVsUGF0aC50YXJnZXRFbnRpdHlTZXQubmFtZSA6IGRhdGFNb2RlbFBhdGguc3RhcnRpbmdFbnRpdHlTZXQubmFtZTtcblx0Y29uc3Qgc0ZpbHRlcmJhcklkID0gaXNFbnRpdHlTZXQgPyBnZXRGaWx0ZXJCYXJJRChjb252ZXJ0ZXJDb250ZXh0LmdldENvbnRleHRQYXRoKCkpIDogdW5kZWZpbmVkO1xuXHRjb25zdCBvVml6UHJvcGVydGllcyA9IHtcblx0XHRwbG90QXJlYToge1xuXHRcdFx0d2luZG93OiB7XG5cdFx0XHRcdHN0YXJ0OiBcImZpcnN0RGF0YVBvaW50XCIsXG5cdFx0XHRcdGVuZDogXCJsYXN0RGF0YVBvaW50XCJcblx0XHRcdH1cblx0XHR9LFxuXHRcdGxlZ2VuZEdyb3VwOiB7XG5cdFx0XHRsYXlvdXQ6IHtcblx0XHRcdFx0cG9zaXRpb246IFwiYm90dG9tXCJcblx0XHRcdH1cblx0XHR9LFxuXHRcdHRvb2x0aXA6IHsgZm9ybWF0U3RyaW5nOiBcIlwiIH1cblx0fTtcblx0bGV0IGF1dG9CaW5kT25Jbml0OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXHQvLyBhdXRvQmluZE9uSW5pdCBpcyByZXNwb25zaWJsZSBmb3IgbG9hZCBvZiBkYXRhIGluIHRoZSBjaGFydHMuXG5cdC8vIEZvciBMaXN0UmVwb3J0IGFuZCBBbmFseXRpY2FsTGlzdFBhZ2Ugc2luY2UgdGhlcmUgaXMgZmlsdGVyYmFyIGFzc29jaWF0ZWQgdG8gaXQgc28gd2UgaGF2ZSB0byBzZXQgaXQgZmFsc2UuIEJ1dCB0aGVyZSBtYXkgYmUgY2FzZXMgd2hlcmUgd2Ugd2FudCB0b1xuXHQvLyBzaG93IGNoYXJ0cyBpbiBwb3BvdmVyIGluIExSIGFuZCBBTFAgbGlua3MgdGhlbiBpdCBtaWdodCBub3QgaGF2ZSBmaWx0ZXJiYXIgZXZlbnRob3VnaCB3ZSBhcmUgaW4gTFIgYW5kIEFMUC4gRm9yIHRoaXMgd2Ugc2V0IGl0IHRvIHRydWUuXG5cdC8vIEZvciBPUCB3ZSBzZXQgaXQgdG8gdHJ1ZSBhbHdheXMuXG5cdGlmICghc0ZpbHRlcmJhcklkIHx8IGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5PYmplY3RQYWdlKSB7XG5cdFx0YXV0b0JpbmRPbkluaXQgPSB0cnVlO1xuXHR9IGVsc2UgaWYgKFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0IHx8XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZVxuXHQpIHtcblx0XHRhdXRvQmluZE9uSW5pdCA9IGZhbHNlO1xuXHR9XG5cdGNvbnN0IGhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMgPVxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucygpIHx8XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZTtcblx0Y29uc3Qgb25TZWdtZW50ZWRCdXR0b25QcmVzc2VkID0gaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyA/IFwiLmhhbmRsZXJzLm9uU2VnbWVudGVkQnV0dG9uUHJlc3NlZFwiIDogXCJcIjtcblx0Y29uc3QgdmlzaWJsZSA9IGhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMgPyBcIns9ICR7cGFnZUludGVybmFsPmFscENvbnRlbnRWaWV3fSAhPT0gJ1RhYmxlJ31cIiA6IFwidHJ1ZVwiO1xuXHRjb25zdCBhbGxvd2VkVHJhbnNmb3JtYXRpb25zID0gYWdncmVnYXRpb25IZWxwZXIuZ2V0QWxsb3dlZFRyYW5zZm9ybWF0aW9ucygpO1xuXHRtQXBwbHlTdXBwb3J0ZWQuZW5hYmxlU2VhcmNoID0gYWxsb3dlZFRyYW5zZm9ybWF0aW9ucyA/IGFsbG93ZWRUcmFuc2Zvcm1hdGlvbnMuaW5jbHVkZXMoXCJzZWFyY2hcIikgOiB0cnVlO1xuXHRsZXQgcXVhbGlmaWVyID0gXCJcIjtcblx0aWYgKGNoYXJ0QW5ub3RhdGlvbi5mdWxseVF1YWxpZmllZE5hbWUuc3BsaXQoXCIjXCIpLmxlbmd0aCA+IDEpIHtcblx0XHRxdWFsaWZpZXIgPSBjaGFydEFubm90YXRpb24uZnVsbHlRdWFsaWZpZWROYW1lLnNwbGl0KFwiI1wiKVsxXTtcblx0fVxuXHRjb25zdCBpc0luc2lnaHRzVmlzaWJsZSA9IGdldEluc2lnaHRzVmlzaWJpbGl0eShcIkFuYWx5dGljYWxcIiwgY29udmVydGVyQ29udGV4dCwgdmlzdWFsaXphdGlvblBhdGgpO1xuXHRjb25zdCBpc1BhcmFtZXRlcml6ZWRFbnRpdHlTZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldFBhcmFtZXRlckVudGl0eVR5cGUoKSA/IHRydWUgOiBmYWxzZTtcblx0Y29uc3QgaXNJbnNpZ2h0c0VuYWJsZWQgPSBhbmQoZ2V0SW5zaWdodHNFbmFibGVtZW50KCksIGlzSW5zaWdodHNWaXNpYmxlKTtcblx0Y29uc3QgeyBoZWFkZXIsIGhlYWRlclZpc2libGUgfSA9IGdldEhlYWRlckluZm8odmlzdWFsaXphdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBzZWxlY3Rpb25Nb2RlID0gZ2V0U2VsZWN0aW9uTW9kZSh2aXN1YWxpemF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IGNoYXJ0RGltZW5zaW9uS2V5QW5kUm9sZTogUmVjb3JkPHN0cmluZywgc3RyaW5nPltdID0gW107XG5cdGNoYXJ0QW5ub3RhdGlvbj8uRGltZW5zaW9uQXR0cmlidXRlcz8uZm9yRWFjaCgoZGltZW5zaW9uQXR0cmlidXRlKSA9PiB7XG5cdFx0Y29uc3Qgb2JqOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cdFx0b2JqW2RpbWVuc2lvbkF0dHJpYnV0ZT8uRGltZW5zaW9uPy52YWx1ZSBhcyBzdHJpbmddID0gZGltZW5zaW9uQXR0cmlidXRlPy5Sb2xlIGFzIHN0cmluZztcblx0XHRjaGFydERpbWVuc2lvbktleUFuZFJvbGUucHVzaChvYmopO1xuXHR9KTtcblxuXHRjb25zdCBjaGFydE1lYXN1cmVLZXlBbmRSb2xlOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+W10gPSBbXTtcblx0Y2hhcnRBbm5vdGF0aW9uPy5NZWFzdXJlQXR0cmlidXRlcz8uZm9yRWFjaCgobWVhc3VyZUF0dHJpYnV0ZSkgPT4ge1xuXHRcdGNvbnN0IG9iajogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXHRcdG9ialttZWFzdXJlQXR0cmlidXRlPy5NZWFzdXJlPy52YWx1ZSBhcyBzdHJpbmddID0gbWVhc3VyZUF0dHJpYnV0ZT8uUm9sZSBhcyBzdHJpbmc7XG5cdFx0Y2hhcnRNZWFzdXJlS2V5QW5kUm9sZS5wdXNoKHt9KTtcblx0fSk7XG5cblx0Ly8gY2hlY2sgaWYgdGhlcmUgYXJlIG1lYXN1cmVzIHBvaW50aW5nIHRvIGFnZ3JlZ2F0ZWQgcHJvcGVydGllc1xuXHRjb25zdCBjb250YWluc1RyYW5zQWdnSW5NZWFzdXJlcyA9ICEhYWdncmVnYXRpb25IZWxwZXJcblx0XHQuZ2V0QWdncmVnYXRlZFByb3BlcnRpZXMoKVswXVxuXHRcdD8uZmlsdGVyKChwcm9wZXJ0eSkgPT4gY2hhcnRBbm5vdGF0aW9uLk1lYXN1cmVzPy5zb21lKChtZWFzdXJlKSA9PiBwcm9wZXJ0eS5OYW1lID09PSBtZWFzdXJlLnZhbHVlKSk/Lmxlbmd0aDtcblxuXHRyZXR1cm4ge1xuXHRcdHR5cGU6IFZpc3VhbGl6YXRpb25UeXBlLkNoYXJ0LFxuXHRcdGlkOiBxdWFsaWZpZXJcblx0XHRcdD8gZ2V0Q2hhcnRJRChpc0VudGl0eVNldCA/IGVudGl0eU5hbWUgOiBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLCBxdWFsaWZpZXIsIFZpc3VhbGl6YXRpb25UeXBlLkNoYXJ0KVxuXHRcdFx0OiBnZXRDaGFydElEKGlzRW50aXR5U2V0ID8gZW50aXR5TmFtZSA6IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgsIFZpc3VhbGl6YXRpb25UeXBlLkNoYXJ0KSxcblx0XHRjb2xsZWN0aW9uOiBnZXRUYXJnZXRPYmplY3RQYXRoKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpKSxcblx0XHRhcGlJZDogZ2VuZXJhdGUoW1xuXHRcdFx0cXVhbGlmaWVyXG5cdFx0XHRcdD8gZ2V0Q2hhcnRJRChpc0VudGl0eVNldCA/IGVudGl0eU5hbWUgOiBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLCBxdWFsaWZpZXIsIFZpc3VhbGl6YXRpb25UeXBlLkNoYXJ0KVxuXHRcdFx0XHQ6IGdldENoYXJ0SUQoaXNFbnRpdHlTZXQgPyBlbnRpdHlOYW1lIDogbmF2aWdhdGlvblByb3BlcnR5UGF0aCwgVmlzdWFsaXphdGlvblR5cGUuQ2hhcnQpLFxuXHRcdFx0XCJDaGFydFwiXG5cdFx0XSksXG5cdFx0ZW50aXR5TmFtZTogZW50aXR5TmFtZSxcblx0XHRwZXJzb25hbGl6YXRpb246IGdldFAxM25Nb2RlKHZpc3VhbGl6YXRpb25QYXRoLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRuYXZpZ2F0aW9uUGF0aDogbmF2aWdhdGlvblByb3BlcnR5UGF0aCxcblx0XHRhbm5vdGF0aW9uUGF0aDogY29udmVydGVyQ29udGV4dC5nZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoKHZpc3VhbGl6YXRpb25QYXRoKSxcblx0XHRmaWx0ZXJJZDogc0ZpbHRlcmJhcklkLFxuXHRcdHZpelByb3BlcnRpZXM6IEpTT04uc3RyaW5naWZ5KG9WaXpQcm9wZXJ0aWVzKSxcblx0XHRhY3Rpb25zOiBjaGFydEFjdGlvbnMuYWN0aW9ucyxcblx0XHRjb21tYW5kQWN0aW9uczogY2hhcnRBY3Rpb25zLmNvbW1hbmRBY3Rpb25zLFxuXHRcdHRpdGxlOiB0aXRsZSxcblx0XHRhdXRvQmluZE9uSW5pdDogYXV0b0JpbmRPbkluaXQsXG5cdFx0b25TZWdtZW50ZWRCdXR0b25QcmVzc2VkOiBvblNlZ21lbnRlZEJ1dHRvblByZXNzZWQsXG5cdFx0dmlzaWJsZTogdmlzaWJsZSxcblx0XHRjdXN0b21BZ2c6IG1DdXN0b21BZ2dyZWdhdGVzLFxuXHRcdHRyYW5zQWdnOiBtVHJhbnNBZ2dyZWdhdGlvbnMsXG5cdFx0YXBwbHlTdXBwb3J0ZWQ6IG1BcHBseVN1cHBvcnRlZCxcblx0XHRzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50UGF0aCxcblx0XHR2YXJpYW50TWFuYWdlbWVudDogZmluZFZhcmlhbnRNYW5hZ2VtZW50KHAxM25Nb2RlLCB2YXJpYW50TWFuYWdlbWVudCksXG5cdFx0aXNJbnNpZ2h0c0VuYWJsZWQ6IGlzSW5zaWdodHNFbmFibGVkLFxuXHRcdGlzSW5zaWdodHNWaXNpYmxlOiBpc0luc2lnaHRzVmlzaWJsZSxcblx0XHRpc1BhcmFtZXRlcml6ZWRFbnRpdHlTZXQ6IGlzUGFyYW1ldGVyaXplZEVudGl0eVNldCxcblx0XHRoZWFkZXI6IGhlYWRlcixcblx0XHRoZWFkZXJWaXNpYmxlOiBoZWFkZXJWaXNpYmxlLFxuXHRcdHNlbGVjdGlvbk1vZGU6IHNlbGVjdGlvbk1vZGUsXG5cdFx0Y2hhcnREaW1lbnNpb25LZXlBbmRSb2xlOiBjaGFydERpbWVuc2lvbktleUFuZFJvbGUsXG5cdFx0Y2hhcnRNZWFzdXJlS2V5QW5kUm9sZTogY2hhcnRNZWFzdXJlS2V5QW5kUm9sZSxcblx0XHRjb250YWluc0FnZ3JlZ2F0ZWRQcm9wZXJ0eTogYWdncmVnYXRpb25IZWxwZXIuZ2V0QWdncmVnYXRlZFByb3BlcnR5KCkubGVuZ3RoID4gMCxcblx0XHRjb250YWluc1RyYW5zQWdnSW5NZWFzdXJlc1xuXHR9O1xufVxuLyoqXG4gKiBNZXRob2QgdG8gZGV0ZXJtaW5lIHRoZSB2YXJpYW50IG1hbmFnZW1lbnQuXG4gKiBAcGFyYW0gcDEzbk1vZGVcbiAqIEBwYXJhbSB2YXJpYW50TWFuYWdlbWVudFxuICogQHJldHVybnMgVGhlIHZhcmlhbnQgbWFuYWdlbWVudCBmb3IgdGhlIGNoYXJ0XG4gKi9cbmZ1bmN0aW9uIGZpbmRWYXJpYW50TWFuYWdlbWVudChwMTNuTW9kZTogQ2hhcnRQMTNuVHlwZSwgdmFyaWFudE1hbmFnZW1lbnQ6IFZhcmlhbnRNYW5hZ2VtZW50VHlwZSk6IFZhcmlhbnRNYW5hZ2VtZW50VHlwZSB7XG5cdHJldHVybiB2YXJpYW50TWFuYWdlbWVudCA9PT0gXCJDb250cm9sXCIgJiYgIXAxM25Nb2RlID8gVmFyaWFudE1hbmFnZW1lbnRUeXBlLk5vbmUgOiB2YXJpYW50TWFuYWdlbWVudDtcbn1cblxuLyoqXG4gKiBDcmVhdGUgdGhlIENoYXJ0VmlzdWFsaXphdGlvbiBjb25maWd1cmF0aW9uIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGR1cmluZyB0ZW1wbGF0aW5nLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gdmlzdWFsaXphdGlvblBhdGggVGhlIHBhdGggb2YgdGhlIHZpc3VhbGl6YXRpb24gYW5ub3RhdGlvblxuICogQHBhcmFtIHZpc3VhbGl6YXRpb24gVGhlIHZpc3VhbGl6YXRpb24gYW5ub3RhdGlvblxuICogQHJldHVybnMgVGhlIGNoYXJ0IHZpc3VhbGl6YXRpb24gYmFzZWQgb24gdGhlIGFubm90YXRpb24gdXNlZCBmb3IgdGVtcGxhdGluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2hhcnRWaXN1YWxpemF0aW9uRm9yVGVtcGxhdGluZyhcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHR2aXN1YWxpemF0aW9uOiBBY3R1YWxWaXN1YWxpemF0aW9uQW5ub3RhdGlvbnNcbik6IENoYXJ0VGVtcGxhdGVWaXN1YWxpemF0aW9uIHtcblx0Y29uc3QgcXVhbGlmaWVyID0gdmlzdWFsaXphdGlvbi5mdWxseVF1YWxpZmllZE5hbWUuc3BsaXQoXCIjXCIpLmxlbmd0aCA+IDEgPyB2aXN1YWxpemF0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZS5zcGxpdChcIiNcIilbMV0gOiBcIlwiO1xuXHRjb25zdCBbbmF2aWdhdGlvblByb3BlcnR5UGF0aF0gPSB2aXN1YWxpemF0aW9uUGF0aC5zcGxpdChcIkBcIik7XG5cblx0Y29uc3QgZGF0YU1vZGVsUGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpO1xuXHRjb25zdCBpc0VudGl0eVNldDogYm9vbGVhbiA9IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgubGVuZ3RoID09PSAwO1xuXHRjb25zdCBlbnRpdHlOYW1lOiBzdHJpbmcgPSBkYXRhTW9kZWxQYXRoLnRhcmdldEVudGl0eVNldD8ubmFtZSA/PyBkYXRhTW9kZWxQYXRoLnN0YXJ0aW5nRW50aXR5U2V0Lm5hbWU7XG5cdGNvbnN0IGFnZ3JlZ2F0aW9uSGVscGVyID0gbmV3IEFnZ3JlZ2F0aW9uSGVscGVyKGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLCBjb252ZXJ0ZXJDb250ZXh0LCB0cnVlKTtcblx0Y29uc3QgYWxsb3dlZFRyYW5zZm9ybWF0aW9ucyA9IGFnZ3JlZ2F0aW9uSGVscGVyLmdldEFsbG93ZWRUcmFuc2Zvcm1hdGlvbnMoKTtcblx0Y29uc3QgaXNQYXJhbWV0ZXJpemVkRW50aXR5U2V0ID0gISFjb252ZXJ0ZXJDb250ZXh0LmdldFBhcmFtZXRlckVudGl0eVR5cGUoKTtcblx0cmV0dXJuIHtcblx0XHRhbm5vdGF0aW9uUGF0aDogY29udmVydGVyQ29udGV4dC5nZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoKHZpc3VhbGl6YXRpb25QYXRoKSxcblx0XHRpc1BhcmFtZXRlcml6ZWRFbnRpdHlTZXQsXG5cdFx0Y29sbGVjdGlvbjogZ2V0VGFyZ2V0T2JqZWN0UGF0aChjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSksXG5cdFx0dHlwZTogVmlzdWFsaXphdGlvblR5cGUuQ2hhcnQsXG5cdFx0ZW50aXR5TmFtZSxcblx0XHRpZDogcXVhbGlmaWVyXG5cdFx0XHQ/IGdldENoYXJ0SUQoaXNFbnRpdHlTZXQgPyBlbnRpdHlOYW1lIDogbmF2aWdhdGlvblByb3BlcnR5UGF0aCwgcXVhbGlmaWVyLCBWaXN1YWxpemF0aW9uVHlwZS5DaGFydClcblx0XHRcdDogZ2V0Q2hhcnRJRChpc0VudGl0eVNldCA/IGVudGl0eU5hbWUgOiBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLCBWaXN1YWxpemF0aW9uVHlwZS5DaGFydCksXG5cdFx0YXBpSWQ6IGdlbmVyYXRlKFtcblx0XHRcdHF1YWxpZmllclxuXHRcdFx0XHQ/IGdldENoYXJ0SUQoaXNFbnRpdHlTZXQgPyBlbnRpdHlOYW1lIDogbmF2aWdhdGlvblByb3BlcnR5UGF0aCwgcXVhbGlmaWVyLCBWaXN1YWxpemF0aW9uVHlwZS5DaGFydClcblx0XHRcdFx0OiBnZXRDaGFydElEKGlzRW50aXR5U2V0ID8gZW50aXR5TmFtZSA6IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgsIFZpc3VhbGl6YXRpb25UeXBlLkNoYXJ0KSxcblx0XHRcdFwiQ2hhcnRcIlxuXHRcdF0pLFxuXHRcdGFwcGx5U3VwcG9ydGVkOiB7XG5cdFx0XHQkVHlwZTogXCJPcmcuT0RhdGEuQWdncmVnYXRpb24uVjEuQXBwbHlTdXBwb3J0ZWRUeXBlXCIsXG5cdFx0XHRlbmFibGVTZWFyY2g6IGFsbG93ZWRUcmFuc2Zvcm1hdGlvbnM/LmluY2x1ZGVzKFwic2VhcmNoXCIpID8/IHRydWVcblx0XHR9XG5cdH07XG59XG5cbi8qKlxuICogTWV0aG9kIHRvIGdldCBjb21waWxlIGV4cHJlc3Npb24gZm9yIERhdGFGaWVsZEZvckFjdGlvbiBhbmQgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uLlxuICogQHBhcmFtIGRhdGFGaWVsZFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIENvbXBpbGUgZXhwcmVzc2lvbiBmb3IgRGF0YUZpZWxkRm9yQWN0aW9uIGFuZCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb25cbiAqL1xuZnVuY3Rpb24gZ2V0Q29tcGlsZUV4cHJlc3Npb25Gb3JBY3Rpb24oXG5cdGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihcblx0XHRub3QoXG5cdFx0XHRlcXVhbChcblx0XHRcdFx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKFxuXHRcdFx0XHRcdGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbixcblx0XHRcdFx0XHRbXSxcblx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRSZWxhdGl2ZU1vZGVsUGF0aEZ1bmN0aW9uKClcblx0XHRcdFx0KSxcblx0XHRcdFx0dHJ1ZVxuXHRcdFx0KVxuXHRcdClcblx0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUJsYW5rQ2hhcnRWaXN1YWxpemF0aW9uKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pik6IENoYXJ0VmlzdWFsaXphdGlvbiB7XG5cdGNvbnN0IGhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMgPVxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucygpIHx8XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZTtcblx0Y29uc3QgZGF0YU1vZGVsUGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpO1xuXHRjb25zdCBlbnRpdHlOYW1lID0gZGF0YU1vZGVsUGF0aC50YXJnZXRFbnRpdHlTZXQgPyBkYXRhTW9kZWxQYXRoLnRhcmdldEVudGl0eVNldC5uYW1lIDogZGF0YU1vZGVsUGF0aC5zdGFydGluZ0VudGl0eVNldC5uYW1lO1xuXG5cdGNvbnN0IHZpc3VhbGl6YXRpb246IENoYXJ0VmlzdWFsaXphdGlvbiA9IHtcblx0XHR0eXBlOiBWaXN1YWxpemF0aW9uVHlwZS5DaGFydCxcblx0XHRpZDogZ2V0Q2hhcnRJRChlbnRpdHlOYW1lLCBWaXN1YWxpemF0aW9uVHlwZS5DaGFydCksXG5cdFx0YXBpSWQ6IGdlbmVyYXRlKFtnZXRDaGFydElEKGVudGl0eU5hbWUsIFZpc3VhbGl6YXRpb25UeXBlLkNoYXJ0KSwgXCJDaGFydFwiXSksXG5cdFx0ZW50aXR5TmFtZTogZW50aXR5TmFtZSxcblx0XHR0aXRsZTogXCJcIixcblx0XHRjb2xsZWN0aW9uOiBcIlwiLFxuXHRcdHBlcnNvbmFsaXphdGlvbjogdW5kZWZpbmVkLFxuXHRcdG5hdmlnYXRpb25QYXRoOiBcIlwiLFxuXHRcdGFubm90YXRpb25QYXRoOiBcIlwiLFxuXHRcdHZpelByb3BlcnRpZXM6IEpTT04uc3RyaW5naWZ5KHtcblx0XHRcdGxlZ2VuZEdyb3VwOiB7XG5cdFx0XHRcdGxheW91dDoge1xuXHRcdFx0XHRcdHBvc2l0aW9uOiBcImJvdHRvbVwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KSxcblx0XHRhY3Rpb25zOiBbXSxcblx0XHRjb21tYW5kQWN0aW9uczoge30sXG5cdFx0YXV0b0JpbmRPbkluaXQ6IGZhbHNlLFxuXHRcdG9uU2VnbWVudGVkQnV0dG9uUHJlc3NlZDogXCJcIixcblx0XHR2aXNpYmxlOiBoYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zID8gXCJ7PSAke3BhZ2VJbnRlcm5hbD5hbHBDb250ZW50Vmlld30gIT09ICdUYWJsZSd9XCIgOiBcInRydWVcIixcblx0XHRjdXN0b21BZ2c6IHt9LFxuXHRcdHRyYW5zQWdnOiB7fSxcblx0XHRhcHBseVN1cHBvcnRlZDoge1xuXHRcdFx0JFR5cGU6IFwiT3JnLk9EYXRhLkFnZ3JlZ2F0aW9uLlYxLkFwcGx5U3VwcG9ydGVkVHlwZVwiLFxuXHRcdFx0QWdncmVnYXRhYmxlUHJvcGVydGllczogW10sXG5cdFx0XHRHcm91cGFibGVQcm9wZXJ0aWVzOiBbXSxcblx0XHRcdGVuYWJsZVNlYXJjaDogZmFsc2Vcblx0XHR9LFxuXHRcdG11bHRpVmlld3M6IGZhbHNlLFxuXHRcdHZhcmlhbnRNYW5hZ2VtZW50OiBWYXJpYW50TWFuYWdlbWVudFR5cGUuTm9uZVxuXHR9O1xuXG5cdHJldHVybiB2aXN1YWxpemF0aW9uO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBeURBO0FBQ0E7QUFDQTs7RUErQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTQSw4QkFBOEJBLENBQ3RDQyxlQUFzQixFQUN0QkMsaUJBQXlCLEVBQ3pCQyxnQkFBeUQsRUFDRDtJQUN4RCxNQUFNQyxZQUFtRSxHQUFHLEVBQUU7SUFDOUUsSUFBSUgsZUFBZSxFQUFFSSxPQUFPLEVBQUU7TUFDN0JKLGVBQWUsQ0FBQ0ksT0FBTyxDQUFDQyxPQUFPLENBQUVDLFNBQWdFLElBQUs7UUFDckcsTUFBTUMsR0FBRyxHQUFHQyxTQUFTLENBQUNDLHdCQUF3QixDQUFDSCxTQUFTLENBQUM7UUFDekQsSUFBSUksNEJBQTRCLENBQUNKLFNBQVMsQ0FBQyxJQUFJLENBQUNBLFNBQVMsQ0FBQ0ssTUFBTSxJQUFJLENBQUNMLFNBQVMsQ0FBQ00sV0FBVyxFQUFFO1VBQzNGLFFBQVFOLFNBQVMsQ0FBQ08sS0FBSztZQUN0QjtjQUNDLElBQUlQLFNBQVMsQ0FBQ1EsWUFBWSxJQUFJLENBQUNSLFNB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
467
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRDaGFydEFjdGlvbnNGcm9tQW5ub3RhdGlvbnMiLCJjaGFydEFubm90YXRpb24iLCJ2aXN1YWxpemF0aW9uUGF0aCIsImNvbnZlcnRlckNvbnRleHQiLCJjaGFydEFjdGlvbnMiLCJBY3Rpb25zIiwiZm9yRWFjaCIsImRhdGFGaWVsZCIsImtleSIsIktleUhlbHBlciIsImdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZCIsImlzRGF0YUZpZWxkRm9yQWN0aW9uQWJzdHJhY3QiLCJJbmxpbmUiLCJEZXRlcm1pbmluZyIsIiRUeXBlIiwiQWN0aW9uVGFyZ2V0IiwiaXNCb3VuZCIsInB1c2giLCJ0eXBlIiwiQWN0aW9uVHlwZSIsIkRhdGFGaWVsZEZvckFjdGlvbiIsImFubm90YXRpb25QYXRoIiwiZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsInZpc2libGUiLCJnZXRDb21waWxlRXhwcmVzc2lvbkZvckFjdGlvbiIsImlzQUlPcGVyYXRpb24iLCJpc0FjdGlvbkFJT3BlcmF0aW9uIiwidW5kZWZpbmVkIiwiRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiaXNOYXZpZ2FibGUiLCJpc0Fubm90YXRpb25BY3Rpb25Hcm91cCIsIk1lbnUiLCJ0ZXh0IiwiTGFiZWwiLCJ0b1N0cmluZyIsIm1lbnUiLCJtYXAiLCJhY3Rpb24iLCJnZXREYXRhRmllbGRBbm5vdGF0aW9uQWN0aW9uIiwiaXNNZW51QUlPcGVyYXRpb24iLCJnZXRDaGFydEFjdGlvbnMiLCJhQW5ub3RhdGlvbkFjdGlvbnMiLCJtYW5pZmVzdEFjdGlvbnMiLCJnZXRBY3Rpb25zRnJvbU1hbmlmZXN0IiwiZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbiIsImFjdGlvbnMiLCJhY3Rpb25PdmVyd3JpdGVDb25maWciLCJlbmFibGVkIiwiT3ZlcnJpZGVUeXBlIiwib3ZlcndyaXRlIiwiZW5hYmxlT25TZWxlY3QiLCJjb21tYW5kIiwicG9zaXRpb24iLCJncm91cCIsIm92ZXJmbG93R3JvdXAiLCJwcmlvcml0eSIsImRpc2FibGVTdHJpY3RIYW5kbGluZyIsImluc2VydEN1c3RvbUVsZW1lbnRzIiwiY2hhcnRNYW5pZmVzdENvbmZpZyIsIm92ZXJmbG93R3JvdXBzQ29uZmlnIiwib3ZlcmZsb3dHcm91cHMiLCJhZGRTZXBhcmF0b3JzIiwiY29tbWFuZEFjdGlvbnMiLCJfZXhwb3J0cyIsImdldFAxM25Nb2RlIiwibWFuaWZlc3RXcmFwcGVyIiwiZ2V0TWFuaWZlc3RXcmFwcGVyIiwiY2hhcnRNYW5pZmVzdFNldHRpbmdzIiwidmFyaWFudE1hbmFnZW1lbnQiLCJnZXRWYXJpYW50TWFuYWdlbWVudCIsImFQZXJzb25hbGl6YXRpb24iLCJwZXJzb25hbGl6YXRpb24iLCJjaGFydFNldHRpbmdzIiwiaXNDb250cm9sVmFyaWFudCIsIlZhcmlhbnRNYW5hZ2VtZW50VHlwZSIsIkNvbnRyb2wiLCJpdGVtIiwic29ydCIsImZpbHRlciIsImpvaW4iLCJnZXRIZWFkZXJJbmZvIiwiaGVhZGVyIiwiaGVhZGVyVmlzaWJsZSIsImdldFNlbGVjdGlvbk1vZGUiLCJzZWxlY3Rpb25Nb2RlIiwiZ2V0QWdncmVnYXRhYmxlUHJvcGVydGllc09iamVjdCIsImFnZ1Byb3AiLCJvYmoiLCJQcm9wZXJ0eSIsIiRQcm9wZXJ0eVBhdGgiLCJ2YWx1ZSIsIm5hbWUiLCJjcmVhdGVDaGFydFZpc3VhbGl6YXRpb24iLCJkb05vdENoZWNrQXBwbHlTdXBwb3J0ZWQiLCJzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50UGF0aCIsImFnZ3JlZ2F0aW9uSGVscGVyIiwiQWdncmVnYXRpb25IZWxwZXIiLCJnZXRFbnRpdHlUeXBlIiwiaXNBbmFseXRpY3NTdXBwb3J0ZWQiLCJFcnJvciIsImFUcmFuc0FnZ3JlZ2F0aW9ucyIsImdldFRyYW5zQWdncmVnYXRpb25zIiwiYUN1c3RvbUFnZ3JlZ2F0ZXMiLCJnZXRDdXN0b21BZ2dyZWdhdGVEZWZpbml0aW9ucyIsInBhZ2VNYW5pZmVzdFNldHRpbmdzIiwicDEzbk1vZGUiLCJMb2ciLCJ3YXJuaW5nIiwibUN1c3RvbUFnZ3JlZ2F0ZXMiLCJlbnRpdHlUeXBlIiwiY3VzdG9tQWdncmVnYXRlIiwiYUNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMiLCJhbm5vdGF0aW9ucyIsIkFnZ3JlZ2F0aW9uIiwiQ29udGV4dERlZmluaW5nUHJvcGVydGllcyIsInF1YWxpZmllciIsInJlbGF0ZWRDdXN0b21BZ2dyZWdhdGVQcm9wZXJ0eSIsImVudGl0eVByb3BlcnRpZXMiLCJmaW5kIiwicHJvcGVydHkiLCJsYWJlbCIsIkNvbW1vbiIsInNvcnRhYmxlIiwibVRyYW5zQWdncmVnYXRpb25zIiwib1Jlc291cmNlQnVuZGxlQ29yZSIsIkxpYnJhcnkiLCJnZXRSZXNvdXJjZUJ1bmRsZUZvciIsImVsZW1lbnQiLCJOYW1lIiwicHJvcGVydHlQYXRoIiwiQWdncmVnYXRhYmxlUHJvcGVydHkiLCJhZ2dyZWdhdGlvbk1ldGhvZCIsIkFnZ3JlZ2F0aW9uTWV0aG9kIiwiZ2V0VGV4dCIsImN1c3RvbSIsImFBZ2dQcm9wcyIsImdldEFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMiLCJhR3JwUHJvcHMiLCJnZXRHcm91cGFibGVQcm9wZXJ0aWVzIiwibUFwcGx5U3VwcG9ydGVkIiwiQWdncmVnYXRhYmxlUHJvcGVydGllcyIsIkdyb3VwYWJsZVByb3BlcnRpZXMiLCJwcm9wIiwibmF2aWdhdGlvblByb3BlcnR5UGF0aCIsInNwbGl0IiwibGFzdEluZGV4T2YiLCJsZW5ndGgiLCJzdWJzdHJpbmciLCJ0aXRsZSIsIlRpdGxlIiwiZGF0YU1vZGVsUGF0aCIsImdldERhdGFNb2RlbE9iamVjdFBhdGgiLCJpc0VudGl0eVNldCIsImVudGl0eU5hbWUiLCJ0YXJnZXRFbnRpdHlTZXQiLCJzdGFydGluZ0VudGl0eVNldCIsInNGaWx0ZXJiYXJJZCIsImdldEZpbHRlckJhcklEIiwiZ2V0Q29udGV4dFBhdGgiLCJvVml6UHJvcGVydGllcyIsInBsb3RBcmVhIiwid2luZG93Iiwic3RhcnQiLCJlbmQiLCJsZWdlbmRHcm91cCIsImxheW91dCIsInRvb2x0aXAiLCJmb3JtYXRTdHJpbmciLCJhdXRvQmluZE9uSW5pdCIsImdldFRlbXBsYXRlVHlwZSIsIlRlbXBsYXRlVHlwZSIsIk9iamVjdFBhZ2UiLCJMaXN0UmVwb3J0IiwiQW5hbHl0aWNhbExpc3RQYWdlIiwiaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyIsIm9uU2VnbWVudGVkQnV0dG9uUHJlc3NlZCIsImFsbG93ZWRUcmFuc2Zvcm1hdGlvbnMiLCJnZXRBbGxvd2VkVHJhbnNmb3JtYXRpb25zIiwiZW5hYmxlU2VhcmNoIiwiaW5jbHVkZXMiLCJpc0luc2lnaHRzVmlzaWJsZSIsImdldEluc2lnaHRzVmlzaWJpbGl0eSIsImlzUGFyYW1ldGVyaXplZEVudGl0eVNldCIsImdldFBhcmFtZXRlckVudGl0eVR5cGUiLCJpc0luc2lnaHRzRW5hYmxlZCIsImFuZCIsImdldEluc2lnaHRzRW5hYmxlbWVudCIsImNoYXJ0RGltZW5zaW9uS2V5QW5kUm9sZSIsIkRpbWVuc2lvbkF0dHJpYnV0ZXMiLCJkaW1lbnNpb25BdHRyaWJ1dGUiLCJEaW1lbnNpb24iLCJSb2xlIiwiY2hhcnRNZWFzdXJlS2V5QW5kUm9sZSIsIk1lYXN1cmVBdHRyaWJ1dGVzIiwibWVhc3VyZUF0dHJpYnV0ZSIsIk1lYXN1cmUiLCJjb250YWluc1RyYW5zQWdnSW5NZWFzdXJlcyIsImdldEFnZ3JlZ2F0ZWRQcm9wZXJ0aWVzIiwiTWVhc3VyZXMiLCJzb21lIiwibWVhc3VyZSIsIlZpc3VhbGl6YXRpb25UeXBlIiwiQ2hhcnQiLCJpZCIsImdldENoYXJ0SUQiLCJjb2xsZWN0aW9uIiwiZ2V0VGFyZ2V0T2JqZWN0UGF0aCIsImFwaUlkIiwiZ2VuZXJhdGUiLCJuYXZpZ2F0aW9uUGF0aCIsImdldEFic29sdXRlQW5ub3RhdGlvblBhdGgiLCJmaWx0ZXJJZCIsInZpelByb3BlcnRpZXMiLCJKU09OIiwic3RyaW5naWZ5IiwiY3VzdG9tQWdnIiwidHJhbnNBZ2ciLCJhcHBseVN1cHBvcnRlZCIsImZpbmRWYXJpYW50TWFuYWdlbWVudCIsImNvbnRhaW5zQWdncmVnYXRlZFByb3BlcnR5IiwiZ2V0QWdncmVnYXRlZFByb3BlcnR5IiwiTm9uZSIsImNyZWF0ZUNoYXJ0VmlzdWFsaXphdGlvbkZvclRlbXBsYXRpbmciLCJ2aXN1YWxpemF0aW9uIiwiY29tcGlsZUV4cHJlc3Npb24iLCJub3QiLCJlcXVhbCIsImdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiIsIlVJIiwiSGlkZGVuIiwiZ2V0UmVsYXRpdmVNb2RlbFBhdGhGdW5jdGlvbiIsImNyZWF0ZUJsYW5rQ2hhcnRWaXN1YWxpemF0aW9uIiwibXVsdGlWaWV3cyJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQ2hhcnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eSwgUHJvcGVydHlQYXRoIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IEFnZ3JlZ2F0YWJsZVByb3BlcnR5VHlwZSwgQWdncmVnYXRpb25NZXRob2QgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0FnZ3JlZ2F0aW9uXCI7XG5pbXBvcnQgeyBBZ2dyZWdhdGlvbkFubm90YXRpb25UeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQWdncmVnYXRpb25cIjtcbmltcG9ydCB0eXBlIHtcblx0Q2hhcnQsXG5cdERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdERhdGFGaWVsZEZvckFjdGlvbkdyb3VwLFxuXHREYXRhRmllbGRGb3JBY3Rpb25Hcm91cFR5cGVzLFxuXHREYXRhRmllbGRGb3JBY3Rpb25UeXBlc1xufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgeyBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgYW5kLCBjb21waWxlRXhwcmVzc2lvbiwgZXF1YWwsIGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiwgbm90LCB0eXBlIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBQYWdlQ29udGV4dFBhdGhUYXJnZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuaW1wb3J0IHsgaXNEYXRhRmllbGRGb3JBY3Rpb25BYnN0cmFjdCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2Fubm90YXRpb25zL0RhdGFGaWVsZFwiO1xuaW1wb3J0IHR5cGUge1xuXHRBbm5vdGF0aW9uQWN0aW9uLFxuXHRBbm5vdGF0aW9uQWN0aW9uQWN0aW9uR3JvdXAsXG5cdEJhc2VBY3Rpb24sXG5cdENvbWJpbmVkQWN0aW9uLFxuXHRDdXN0b21BY3Rpb24sXG5cdE92ZXJyaWRlVHlwZUFjdGlvblxufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQge1xuXHRhZGRTZXBhcmF0b3JzLFxuXHRnZXRBY3Rpb25zRnJvbU1hbmlmZXN0LFxuXHRpc0FjdGlvbkFJT3BlcmF0aW9uLFxuXHRpc01lbnVBSU9wZXJhdGlvblxufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgeyBPdmVycmlkZVR5cGUsIGluc2VydEN1c3RvbUVsZW1lbnRzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7IEtleUhlbHBlciB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvS2V5XCI7XG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRUYXJnZXRPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IExpYnJhcnkgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IHR5cGUgeyBFeHBhbmRQYXRoVHlwZSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi90eXBlcy9tZXRhbW9kZWxfdHlwZXNcIjtcbmltcG9ydCB0eXBlIENvbnZlcnRlckNvbnRleHQgZnJvbSBcIi4uLy4uL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCB0eXBlIHsgQ2hhcnRNYW5pZmVzdENvbmZpZ3VyYXRpb24sIE1hbmlmZXN0QWN0aW9uLCBPdmVyZmxvd0dyb3Vwc0NvbmZpZ3VyYXRpb24gfSBmcm9tIFwiLi4vLi4vTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHsgQWN0aW9uVHlwZSwgVGVtcGxhdGVUeXBlLCBWYXJpYW50TWFuYWdlbWVudFR5cGUsIFZpc3VhbGl6YXRpb25UeXBlIH0gZnJvbSBcIi4uLy4uL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB0eXBlIE1hbmlmZXN0V3JhcHBlciBmcm9tIFwiLi4vLi4vTWFuaWZlc3RXcmFwcGVyXCI7XG5pbXBvcnQgeyBBZ2dyZWdhdGlvbkhlbHBlciB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0FnZ3JlZ2F0aW9uXCI7XG5pbXBvcnQgeyBnZXRDaGFydElELCBnZXRGaWx0ZXJCYXJJRCB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0lEXCI7XG5pbXBvcnQgeyBnZXRJbnNpZ2h0c0VuYWJsZW1lbnQsIGdldEluc2lnaHRzVmlzaWJpbGl0eSB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0luc2lnaHRzSGVscGVyc1wiO1xuaW1wb3J0IHR5cGUgeyBBY3R1YWxWaXN1YWxpemF0aW9uQW5ub3RhdGlvbnMgfSBmcm9tIFwiLi9EYXRhVmlzdWFsaXphdGlvblwiO1xuXG5leHBvcnQgdHlwZSBDaGFydEFwcGx5U3VwcG9ydGVkID0ge1xuXHQkVHlwZTogc3RyaW5nO1xuXHRlbmFibGVTZWFyY2g/OiBib29sZWFuO1xuXHRBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzPzogKEV4cGFuZFBhdGhUeXBlPFByb3BlcnR5UGF0aD4gJiB7IFByb3BlcnR5OiBFeHBhbmRQYXRoVHlwZTxQcm9wZXJ0eVBhdGg+IH0pW107XG5cdEdyb3VwYWJsZVByb3BlcnRpZXM/OiAoRXhwYW5kUGF0aFR5cGU8UHJvcGVydHlQYXRoPiAmIHsgUHJvcGVydHk6IEV4cGFuZFBhdGhUeXBlPFByb3BlcnR5UGF0aD4gfSlbXTtcbn07XG5leHBvcnQgdHlwZSBDaGFydFRlbXBsYXRlVmlzdWFsaXphdGlvbiA9IHtcblx0dHlwZTogVmlzdWFsaXphdGlvblR5cGUuQ2hhcnQ7XG5cdGlkOiBzdHJpbmc7XG5cdGFwaUlkOiBzdHJpbmc7XG5cdGVudGl0eU5hbWU6IHN0cmluZztcblx0Y29sbGVjdGlvbjogc3RyaW5nO1xuXHRhbm5vdGF0aW9uUGF0aDogc3RyaW5nO1xuXHRhcHBseVN1cHBvcnRlZDogQ2hhcnRBcHBseVN1cHBvcnRlZDtcblx0aXNQYXJhbWV0ZXJpemVkRW50aXR5U2V0PzogYm9vbGVhbjtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYgQ2hhcnRWaXN1YWxpemF0aW9uXG4gKi9cbmV4cG9ydCB0eXBlIENoYXJ0VmlzdWFsaXphdGlvbiA9IENoYXJ0VGVtcGxhdGVWaXN1YWxpemF0aW9uICYge1xuXHRlbnRpdHlOYW1lOiBzdHJpbmc7XG5cdHBlcnNvbmFsaXphdGlvbj86IHN0cmluZyB8IGJvb2xlYW47XG5cdG5hdmlnYXRpb25QYXRoOiBzdHJpbmc7XG5cdGZpbHRlcklkPzogc3RyaW5nO1xuXHR2aXpQcm9wZXJ0aWVzOiBzdHJpbmc7XG5cdGFjdGlvbnM6IEJhc2VBY3Rpb25bXTtcblx0b3ZlcmZsb3dHcm91cHM/OiBPdmVyZmxvd0dyb3Vwc0NvbmZpZ3VyYXRpb247XG5cdGNvbW1hbmRBY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+O1xuXHR0aXRsZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRhdXRvQmluZE9uSW5pdDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblx0b25TZWdtZW50ZWRCdXR0b25QcmVzc2VkOiBzdHJpbmc7XG5cdHZpc2libGU6IHN0cmluZztcblx0Y3VzdG9tQWdnOiBvYmplY3Q7XG5cdHRyYW5zQWdnOiBvYmplY3Q7XG5cdG11bHRpVmlld3M/OiBib29sZWFuO1xuXHR2YXJpYW50TWFuYWdlbWVudDogVmFyaWFudE1hbmFnZW1lbnRUeXBlO1xuXHRzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50UGF0aD86IHN0cmluZztcblx0aXNJbnNpZ2h0c0VuYWJsZWQ/OiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj47XG5cdGlzSW5zaWdodHNWaXNpYmxlPzogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRoZWFkZXI/OiBzdHJpbmc7XG5cdGhlYWRlclZpc2libGU/OiBib29sZWFuO1xuXHRzZWxlY3Rpb25Nb2RlPzogc3RyaW5nO1xuXHRjaGFydERpbWVuc2lvbktleUFuZFJvbGU/OiBvYmplY3Q7XG5cdGNoYXJ0TWVhc3VyZUtleUFuZFJvbGU/OiBvYmplY3Q7XG5cdGNvbnRhaW5zQWdncmVnYXRlZFByb3BlcnR5PzogYm9vbGVhbjtcblx0Y29udGFpbnNUcmFuc0FnZ0luTWVhc3VyZXM/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgQ2hhcnRQMTNuVHlwZSA9IHN0cmluZyB8IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbi8qKlxuICogTWV0aG9kIHRvIHJldHJpZXZlIGFsbCBjaGFydCBhY3Rpb25zIGZyb20gYW5ub3RhdGlvbnMuXG4gKiBAcGFyYW0gY2hhcnRBbm5vdGF0aW9uXG4gKiBAcGFyYW0gdmlzdWFsaXphdGlvblBhdGhcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgY2hhcnQgYWN0aW9ucyBmcm9tIHRoZSBhbm5vdGF0aW9uXG4gKi9cbmZ1bmN0aW9uIGdldENoYXJ0QWN0aW9uc0Zyb21Bbm5vdGF0aW9ucyhcblx0Y2hhcnRBbm5vdGF0aW9uOiBDaGFydCxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBBcnJheTxBbm5vdGF0aW9uQWN0aW9uIHwgQW5ub3RhdGlvbkFjdGlvbkFjdGlvbkdyb3VwPiB7XG5cdGNvbnN0IGNoYXJ0QWN0aW9uczogQXJyYXk8QW5ub3RhdGlvbkFjdGlvbiB8IEFubm90YXRpb25BY3Rpb25BY3Rpb25Hcm91cD4gPSBbXTtcblx0aWYgKGNoYXJ0QW5ub3RhdGlvbj8uQWN0aW9ucykge1xuXHRcdGNoYXJ0QW5ub3RhdGlvbi5BY3Rpb25zLmZvckVhY2goKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFGaWVsZEZvckFjdGlvbkdyb3VwVHlwZXMpID0+IHtcblx0XHRcdGNvbnN0IGtleSA9IEtleUhlbHBlci5nZW5lcmF0ZUtleUZyb21EYXRhRmllbGQoZGF0YUZpZWxkKTtcblx0XHRcdGlmIChpc0RhdGFGaWVsZEZvckFjdGlvbkFic3RyYWN0KGRhdGFGaWVsZCkgJiYgIWRhdGFGaWVsZC5JbmxpbmUgJiYgIWRhdGFGaWVsZC5EZXRlcm1pbmluZykge1xuXHRcdFx0XHRzd2l0Y2ggKGRhdGFGaWVsZC4kVHlwZSkge1xuXHRcdFx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uOlxuXHRcdFx0XHRcdFx0aWYgKGRhdGFGaWVsZC5BY3Rpb25UYXJnZXQgJiYgIWRhdGFGaWVsZC5BY3Rpb25UYXJnZXQuaXNCb3VuZCkge1xuXHRcdFx0XHRcdFx0XHRjaGFydEFjdGlvbnMucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0dHlwZTogQWN0aW9uVHlwZS5EYXRhRmllbGRGb3JBY3Rpb24sXG5cdFx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChkYXRhRmllbGQuZnVsbHlRdWFsaWZpZWROYW1lKSxcblx0XHRcdFx0XHRcdFx0XHRrZXksXG5cdFx0XHRcdFx0XHRcdFx0dmlzaWJsZTogZ2V0Q29tcGlsZUV4cHJlc3Npb25Gb3JBY3Rpb24oZGF0YUZpZWxkLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdFx0XHRcdFx0XHRpc0FJT3BlcmF0aW9uOiBpc0FjdGlvbkFJT3BlcmF0aW9uKGRhdGFGaWVsZCkgPT09IHRydWUgfHwgdW5kZWZpbmVkXG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbjpcblx0XHRcdFx0XHRcdGNoYXJ0QWN0aW9ucy5wdXNoKHtcblx0XHRcdFx0XHRcdFx0dHlwZTogQWN0aW9uVHlwZS5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24sXG5cdFx0XHRcdFx0XHRcdGFubm90YXRpb25QYXRoOiBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgoZGF0YUZpZWxkLmZ1bGx5UXVhbGlmaWVkTmFtZSksXG5cdFx0XHRcdFx0XHRcdGtleSxcblx0XHRcdFx0XHRcdFx0dmlzaWJsZTogZ2V0Q29tcGlsZUV4cHJlc3Npb25Gb3JBY3Rpb24oZGF0YUZpZWxkLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdFx0XHRcdFx0aXNOYXZpZ2FibGU6IHRydWVcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKGlzQW5ub3RhdGlvbkFjdGlvbkdyb3VwKGRhdGFGaWVsZCkpIHtcblx0XHRcdFx0Y2hhcnRBY3Rpb25zLnB1c2goe1xuXHRcdFx0XHRcdHR5cGU6IEFjdGlvblR5cGUuTWVudSxcblx0XHRcdFx0XHR0ZXh0OiBkYXRhRmllbGQuTGFiZWw/LnRvU3RyaW5nKCksXG5cdFx0XHRcdFx0dmlzaWJsZTogZ2V0Q29tcGlsZUV4cHJlc3Npb25Gb3JBY3Rpb24oZGF0YUZpZWxkLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdFx0XHRtZW51OiBkYXRhRmllbGQuQWN0aW9ucy5tYXAoKGFjdGlvbikgPT5cblx0XHRcdFx0XHRcdGdldERhdGFGaWVsZEFubm90YXRpb25BY3Rpb24oYWN0aW9uIGFzIERhdGFGaWVsZEZvckFjdGlvblR5cGVzLCBjb252ZXJ0ZXJDb250ZXh0KVxuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0a2V5OiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCksXG5cdFx0XHRcdFx0aXNBSU9wZXJhdGlvbjogaXNNZW51QUlPcGVyYXRpb24oZGF0YUZpZWxkLkFjdGlvbnMpID09PSB0cnVlIHx8IHVuZGVmaW5lZFxuXHRcdFx0XHR9IGFzIEFubm90YXRpb25BY3Rpb25BY3Rpb25Hcm91cCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIGNoYXJ0QWN0aW9ucztcbn1cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBkYXRhRmllbGQgaXMgYSBEYXRhRmllbGRGb3JBY3Rpb25Hcm91cC5cbiAqIEBwYXJhbSBkYXRhRmllbGQgVGhlIGRhdGFGaWVsZCB0byBjaGVjay5cbiAqIEByZXR1cm5zIFRoZSBkYXRhRmllbGQgaWYgaXQgbWF0Y2hlcyBEYXRhRmllbGRGb3JBY3Rpb25Hcm91cC5cbiAqL1xuZnVuY3Rpb24gaXNBbm5vdGF0aW9uQWN0aW9uR3JvdXAoZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKTogZGF0YUZpZWxkIGlzIERhdGFGaWVsZEZvckFjdGlvbkdyb3VwIHtcblx0cmV0dXJuIGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uR3JvdXA7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhbmQgcmV0dXJucyBEYXRhRmllbGRGb3JBY3Rpb24gZm9yIG1lbnUgb2YgRGF0YUZpZWxkRm9yQWN0aW9uR3JvdXAuXG4gKiBAcGFyYW0gZGF0YUZpZWxkIFRoZSBkYXRhZmllbGQgdG8gZ2V0IHRoZSBhbm5vdGF0aW9uIGFjdGlvbiBmcm9tLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0LlxuICogQHJldHVybnMgQW4gYW5ub3RhdGlvbiBhY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGdldERhdGFGaWVsZEFubm90YXRpb25BY3Rpb24oXG5cdGRhdGFGaWVsZDogRGF0YUZpZWxkRm9yQWN0aW9uVHlwZXMsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogQW5ub3RhdGlvbkFjdGlvbiB7XG5cdHJldHVybiB7XG5cdFx0dHlwZTogQWN0aW9uVHlwZS5EYXRhRmllbGRGb3JBY3Rpb24sXG5cdFx0YW5ub3RhdGlvblBhdGg6IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChkYXRhRmllbGQuZnVsbHlRdWFsaWZpZWROYW1lKSxcblx0XHRrZXk6IEtleUhlbHBlci5nZW5lcmF0ZUtleUZyb21EYXRhRmllbGQoZGF0YUZpZWxkKSxcblx0XHR2aXNpYmxlOiBnZXRDb21waWxlRXhwcmVzc2lvbkZvckFjdGlvbihkYXRhRmllbGQsIGNvbnZlcnRlckNvbnRleHQpXG5cdH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDaGFydEFjdGlvbnMoXG5cdGNoYXJ0QW5ub3RhdGlvbjogQ2hhcnQsXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogQ29tYmluZWRBY3Rpb24ge1xuXHRjb25zdCBhQW5ub3RhdGlvbkFjdGlvbnMgPSBnZXRDaGFydEFjdGlvbnNGcm9tQW5ub3RhdGlvbnMoY2hhcnRBbm5vdGF0aW9uLCB2aXN1YWxpemF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IG1hbmlmZXN0QWN0aW9ucyA9IGdldEFjdGlvbnNGcm9tTWFuaWZlc3QoXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uPENoYXJ0TWFuaWZlc3RDb25maWd1cmF0aW9uPih2aXN1YWxpemF0aW9uUGF0aCkuYWN0aW9ucyBhcyBSZWNvcmQ8XG5cdFx0XHRzdHJpbmcsXG5cdFx0XHRNYW5pZmVzdEFjdGlvblxuXHRcdD4sXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRhQW5ub3RhdGlvbkFjdGlvbnNcblx0KTtcblx0Y29uc3QgYWN0aW9uT3ZlcndyaXRlQ29uZmlnOiBPdmVycmlkZVR5cGVBY3Rpb24gPSB7XG5cdFx0ZW5hYmxlZDogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRlbmFibGVPblNlbGVjdDogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHR2aXNpYmxlOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdGNvbW1hbmQ6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0cG9zaXRpb246IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0Z3JvdXA6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0b3ZlcmZsb3dHcm91cDogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRwcmlvcml0eTogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRkaXNhYmxlU3RyaWN0SGFuZGxpbmc6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGVcblx0fTtcblx0bGV0IGNoYXJ0QWN0aW9ucyA9IGluc2VydEN1c3RvbUVsZW1lbnRzPEJhc2VBY3Rpb24+KGFBbm5vdGF0aW9uQWN0aW9ucywgbWFuaWZlc3RBY3Rpb25zLmFjdGlvbnMsIGFjdGlvbk92ZXJ3cml0ZUNvbmZpZyk7XG5cblx0Ly8gQWRkIHNlcGFyYXRvcnMgYmFzZWQgb24gb3ZlcmZsb3dHcm91cHMgY29uZmlndXJhdGlvbiBmcm9tIG1hbmlmZXN0XG5cdGNvbnN0IGNoYXJ0TWFuaWZlc3RDb25maWcgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb248Q2hhcnRNYW5pZmVzdENvbmZpZ3VyYXRpb24+KHZpc3VhbGl6YXRpb25QYXRoKTtcblx0Y29uc3Qgb3ZlcmZsb3dHcm91cHNDb25maWcgPSBjaGFydE1hbmlmZXN0Q29uZmlnLm92ZXJmbG93R3JvdXBzO1xuXHRpZiAob3ZlcmZsb3dHcm91cHNDb25maWcpIHtcblx0XHRjaGFydEFjdGlvbnMgPSBhZGRTZXBhcmF0b3JzKGNoYXJ0QWN0aW9ucywgb3ZlcmZsb3dHcm91cHNDb25maWcpO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRhY3Rpb25zOiBjaGFydEFjdGlvbnMsXG5cdFx0Y29tbWFuZEFjdGlvbnM6IG1hbmlmZXN0QWN0aW9ucy5jb21tYW5kQWN0aW9uc1xuXHR9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UDEzbk1vZGUoXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogc3RyaW5nIHwgYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IG1hbmlmZXN0V3JhcHBlcjogTWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0Y29uc3QgY2hhcnRNYW5pZmVzdFNldHRpbmdzOiBDaGFydE1hbmlmZXN0Q29uZmlndXJhdGlvbiA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbih2aXN1YWxpemF0aW9uUGF0aCk7XG5cdGNvbnN0IHZhcmlhbnRNYW5hZ2VtZW50OiBWYXJpYW50TWFuYWdlbWVudFR5cGUgPSBtYW5pZmVzdFdyYXBwZXIuZ2V0VmFyaWFudE1hbmFnZW1lbnQoKTtcblx0Y29uc3QgYVBlcnNvbmFsaXphdGlvbjogc3RyaW5nW10gPSBbXTtcblx0Ly8gUGVyc29uYWxpemF0aW9uIGNvbmZpZ3VyZWQgaW4gbWFuaWZlc3QuXG5cdGNvbnN0IHBlcnNvbmFsaXphdGlvbiA9IGNoYXJ0TWFuaWZlc3RTZXR0aW5ncz8uY2hhcnRTZXR0aW5ncz8ucGVyc29uYWxpemF0aW9uO1xuXHRjb25zdCBpc0NvbnRyb2xWYXJpYW50ID0gdmFyaWFudE1hbmFnZW1lbnQgPT09IFZhcmlhbnRNYW5hZ2VtZW50VHlwZS5Db250cm9sID8gdHJ1ZSA6IGZhbHNlO1xuXHQvLyBpZiBwZXJzb25hbGl6YXRpb24gaXMgc2V0IHRvIGZhbHNlIGRvIG5vdCBzaG93IGFueSBvcHRpb25cblx0aWYgKChwZXJzb25hbGl6YXRpb24gIT09IHVuZGVmaW5lZCAmJiAhcGVyc29uYWxpemF0aW9uKSB8fCBwZXJzb25hbGl6YXRpb24gPT0gXCJmYWxzZVwiKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICh0eXBlb2YgcGVyc29uYWxpemF0aW9uID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gU3BlY2lmaWMgcGVyc29uYWxpemF0aW9uIG9wdGlvbnMgZW5hYmxlZCBpbiBtYW5pZmVzdC4gVXNlIHRoZW0gYXMgaXMuXG5cdFx0aWYgKHBlcnNvbmFsaXphdGlvbi50eXBlKSB7XG5cdFx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJUeXBlXCIpO1xuXHRcdH1cblx0XHRpZiAocGVyc29uYWxpemF0aW9uLml0ZW0pIHtcblx0XHRcdGFQZXJzb25hbGl6YXRpb24ucHVzaChcIkl0ZW1cIik7XG5cdFx0fVxuXHRcdGlmIChwZXJzb25hbGl6YXRpb24uc29ydCkge1xuXHRcdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiU29ydFwiKTtcblx0XHR9XG5cdFx0aWYgKHBlcnNvbmFsaXphdGlvbi5maWx0ZXIpIHtcblx0XHRcdGFQZXJzb25hbGl6YXRpb24ucHVzaChcIkZpbHRlclwiKTtcblx0XHR9XG5cdFx0cmV0dXJuIGFQZXJzb25hbGl6YXRpb24uam9pbihcIixcIik7XG5cdH0gZWxzZSBpZiAoaXNDb250cm9sVmFyaWFudCB8fCAhIXBlcnNvbmFsaXphdGlvbikge1xuXHRcdC8vIG1hbmlmZXN0IGhhcyBwZXJzb25hbGl6YXRpb24gY29uZmlndXJlZCwgY2hlY2sgaWYgaXQncyB0cnVlXG5cdFx0Ly8gaWYgbWFuaWZlc3QgZG9lc24ndCBoYXZlIHBlcnNvbmFsaXphdGlvbiwgY2hlY2sgZm9yIHZhcmlhbnQgbWFuYWdlbWVudCBpcyBzZXQgdG8gY29udHJvbFxuXHRcdHJldHVybiBcIlNvcnQsVHlwZSxJdGVtLEZpbHRlclwiO1xuXHR9IGVsc2Uge1xuXHRcdC8vIGlmIG1hbmlmZXN0IGRvZXNuJ3QgaGF2ZSBwZXJzb25hbGl6YXRpb24sIHNob3cgZGVmYXVsdCBvcHRpb25zIHdpdGhvdXQgZmlsdGVyXG5cdFx0cmV0dXJuIFwiU29ydCxUeXBlLEl0ZW1cIjtcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SGVhZGVySW5mbyhcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiB7IGhlYWRlcjogc3RyaW5nIHwgdW5kZWZpbmVkOyBoZWFkZXJWaXNpYmxlOiBib29sZWFuIHwgdW5kZWZpbmVkIH0ge1xuXHRjb25zdCBjaGFydE1hbmlmZXN0U2V0dGluZ3M6IENoYXJ0TWFuaWZlc3RDb25maWd1cmF0aW9uID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKTtcblx0cmV0dXJuIHtcblx0XHRoZWFkZXI6IGNoYXJ0TWFuaWZlc3RTZXR0aW5ncy5jaGFydFNldHRpbmdzPy5oZWFkZXIsXG5cdFx0aGVhZGVyVmlzaWJsZTogY2hhcnRNYW5pZmVzdFNldHRpbmdzPy5jaGFydFNldHRpbmdzPy5oZWFkZXJWaXNpYmxlXG5cdH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWxlY3Rpb25Nb2RlKFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IFwiTXVsdGlwbGVcIiB8IFwiU2luZ2xlXCIgfCBcIk5vbmVcIiB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IGNoYXJ0TWFuaWZlc3RTZXR0aW5nczogQ2hhcnRNYW5pZmVzdENvbmZpZ3VyYXRpb24gPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb24odmlzdWFsaXphdGlvblBhdGgpO1xuXHRyZXR1cm4gY2hhcnRNYW5pZmVzdFNldHRpbmdzLmNoYXJ0U2V0dGluZ3M/LnNlbGVjdGlvbk1vZGU7XG59XG5leHBvcnQgdHlwZSBDaGFydEN1c3RvbUFnZ3JlZ2F0ZSA9IHtcblx0bmFtZTogc3RyaW5nO1xuXHRsYWJlbDogc3RyaW5nO1xuXHRzb3J0YWJsZTogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIFRyYW5zQWdnID0ge1xuXHRuYW1lOiBzdHJpbmc7XG5cdHByb3BlcnR5UGF0aDogc3RyaW5nO1xuXHRhZ2dyZWdhdGlvbk1ldGhvZDogQWdncmVnYXRpb25NZXRob2Q7XG5cdGxhYmVsOiBzdHJpbmc7XG5cdHNvcnRhYmxlOiBib29sZWFuO1xuXHRjdXN0b206IGJvb2xlYW47XG59O1xuZnVuY3Rpb24gZ2V0QWdncmVnYXRhYmxlUHJvcGVydGllc09iamVjdChhZ2dQcm9wOiBBZ2dyZWdhdGFibGVQcm9wZXJ0eVR5cGUgfCBQcm9wZXJ0eSk6IHsgUHJvcGVydHk6IHsgJFByb3BlcnR5UGF0aDogc3RyaW5nIH0gfSB7XG5cdGxldCBvYmo7XG5cdGlmICgoYWdnUHJvcCBhcyBBZ2dyZWdhdGFibGVQcm9wZXJ0eVR5cGUpPy5Qcm9wZXJ0eSkge1xuXHRcdG9iaiA9IHtcblx0XHRcdFByb3BlcnR5OiB7XG5cdFx0XHRcdCRQcm9wZXJ0eVBhdGg6IChhZ2dQcm9wIGFzIEFnZ3JlZ2F0YWJsZVByb3BlcnR5VHlwZSk/LlByb3BlcnR5Py52YWx1ZVxuXHRcdFx0fVxuXHRcdH07XG5cdH0gZWxzZSB7XG5cdFx0b2JqID0ge1xuXHRcdFx0UHJvcGVydHk6IHtcblx0XHRcdFx0JFByb3BlcnR5UGF0aDogKGFnZ1Byb3AgYXMgUHJvcGVydHkpPy5uYW1lXG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXHRyZXR1cm4gb2JqO1xufVxuLyoqXG4gKiBDcmVhdGUgdGhlIENoYXJ0VmlzdWFsaXphdGlvbiBjb25maWd1cmF0aW9uIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGRpc3BsYXkgYSBjaGFydCB1c2luZyB0aGUgQ2hhcnQgYnVpbGRpbmcgYmxvY2suXG4gKiBAcGFyYW0gY2hhcnRBbm5vdGF0aW9uIFRoZSB0YXJnZXRlZCBjaGFydCBhbm5vdGF0aW9uXG4gKiBAcGFyYW0gdmlzdWFsaXphdGlvblBhdGggVGhlIHBhdGggb2YgdGhlIHZpc3VhbGl6YXRpb24gYW5ub3RhdGlvblxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gZG9Ob3RDaGVja0FwcGx5U3VwcG9ydGVkIEZsYWcgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciBBcHBseVN1cHBvcnRlZCBuZWVkcyB0byBiZSBjaGVja2VkIG9yIG5vdFxuICogQHBhcmFtIHNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRQYXRoXG4gKiBAcmV0dXJucyBUaGUgY2hhcnQgdmlzdWFsaXphdGlvbiBiYXNlZCBvbiB0aGUgYW5ub3RhdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2hhcnRWaXN1YWxpemF0aW9uKFxuXHRjaGFydEFubm90YXRpb246IENoYXJ0LFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGRvTm90Q2hlY2tBcHBseVN1cHBvcnRlZD86IGJvb2xlYW4sXG5cdHNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRQYXRoPzogc3RyaW5nXG4pOiBDaGFydFZpc3VhbGl6YXRpb24ge1xuXHRjb25zdCBhZ2dyZWdhdGlvbkhlbHBlciA9IG5ldyBBZ2dyZWdhdGlvbkhlbHBlcihjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSwgY29udmVydGVyQ29udGV4dCwgdHJ1ZSk7IC8vIHBhc3NpbmcgdGhlIGxhc3QgcGFyYW1ldGVyIGFzIHRydWUgdG8gY29uc2lkZXIgdGhlIG9sZCBhbm5vdGF0aW9ucyBpLmUuIEFnZ3JlZ2F0aW9uLkFnZ3JlZ2F0YWJsZSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBpbiBjYXNlIG9mIGNoYXJ0XG5cdGlmICghZG9Ob3RDaGVja0FwcGx5U3VwcG9ydGVkICYmICFhZ2dyZWdhdGlvbkhlbHBlci5pc0FuYWx5dGljc1N1cHBvcnRlZCgpKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiQXBwbHlTdXBwb3J0ZWQgaXMgbm90IGFkZGVkIHRvIHRoZSBhbm5vdGF0aW9uc1wiKTtcblx0fVxuXHRjb25zdCBhVHJhbnNBZ2dyZWdhdGlvbnMgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRUcmFuc0FnZ3JlZ2F0aW9ucygpO1xuXHRjb25zdCBhQ3VzdG9tQWdncmVnYXRlcyA9IGFnZ3JlZ2F0aW9uSGVscGVyLmdldEN1c3RvbUFnZ3JlZ2F0ZURlZmluaXRpb25zKCk7XG5cdGNvbnN0IHBhZ2VNYW5pZmVzdFNldHRpbmdzOiBNYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRjb25zdCB2YXJpYW50TWFuYWdlbWVudDogVmFyaWFudE1hbmFnZW1lbnRUeXBlID0gcGFnZU1hbmlmZXN0U2V0dGluZ3MuZ2V0VmFyaWFudE1hbmFnZW1lbnQoKTtcblx0Y29uc3QgcDEzbk1vZGU6IENoYXJ0UDEzblR5cGUgPSBnZXRQMTNuTW9kZSh2aXN1YWxpemF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCk7XG5cdGlmIChwMTNuTW9kZSA9PT0gdW5kZWZpbmVkICYmIHZhcmlhbnRNYW5hZ2VtZW50ID09PSBcIkNvbnRyb2xcIikge1xuXHRcdExvZy53YXJuaW5nKFwiVmFyaWFudCBNYW5hZ2VtZW50IGNhbm5vdCBiZSBlbmFibGVkIHdoZW4gcGVyc29uYWxpemF0aW9uIGlzIGRpc2FibGVkXCIpO1xuXHR9XG5cdGNvbnN0IG1DdXN0b21BZ2dyZWdhdGVzOiBSZWNvcmQ8c3RyaW5nLCBvYmplY3Q+ID0ge307XG5cdGlmIChhQ3VzdG9tQWdncmVnYXRlcykge1xuXHRcdGNvbnN0IGVudGl0eVR5cGUgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRFbnRpdHlUeXBlKCk7XG5cdFx0Zm9yIChjb25zdCBjdXN0b21BZ2dyZWdhdGUgb2YgYUN1c3RvbUFnZ3JlZ2F0ZXMpIHtcblx0XHRcdGNvbnN0IGFDb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzID0gY3VzdG9tQWdncmVnYXRlPy5hbm5vdGF0aW9ucz8uQWdncmVnYXRpb24/LkNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXM7XG5cdFx0XHRjb25zdCBxdWFsaWZpZXIgPSBjdXN0b21BZ2dyZWdhdGU/LnF1YWxpZmllcjtcblx0XHRcdGNvbnN0IHJlbGF0ZWRDdXN0b21BZ2dyZWdhdGVQcm9wZXJ0eSA9IHF1YWxpZmllciAmJiBlbnRpdHlUeXBlLmVudGl0eVByb3BlcnRpZXMuZmluZCgocHJvcGVydHkpID0+IHByb3BlcnR5Lm5hbWUgPT09IHF1YWxpZmllcik7XG5cdFx0XHRjb25zdCBsYWJlbCA9IHJlbGF0ZWRDdXN0b21BZ2dyZWdhdGVQcm9wZXJ0eSAmJiByZWxhdGVkQ3VzdG9tQWdncmVnYXRlUHJvcGVydHk/LmFubm90YXRpb25zPy5Db21tb24/LkxhYmVsPy50b1N0cmluZygpO1xuXHRcdFx0bUN1c3RvbUFnZ3JlZ2F0ZXNbcXVhbGlmaWVyXSA9IHtcblx0XHRcdFx0bmFtZTogcXVhbGlmaWVyLFxuXHRcdFx0XHRsYWJlbDogbGFiZWwgfHwgYEN1c3RvbSBBZ2dyZWdhdGUgKCR7cXVhbGlmaWVyfSlgLFxuXHRcdFx0XHRzb3J0YWJsZTogdHJ1ZVxuXHRcdFx0fTtcblx0XHR9XG5cdH1cblxuXHRjb25zdCBtVHJhbnNBZ2dyZWdhdGlvbnM6IFJlY29yZDxzdHJpbmcsIFRyYW5zQWdnPiA9IHt9O1xuXHRjb25zdCBvUmVzb3VyY2VCdW5kbGVDb3JlID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpITtcblx0aWYgKGFUcmFuc0FnZ3JlZ2F0aW9ucykge1xuXHRcdGZvciAoY29uc3QgZWxlbWVudCBvZiBhVHJhbnNBZ2dyZWdhdGlvbnMpIHtcblx0XHRcdG1UcmFuc0FnZ3JlZ2F0aW9uc1tlbGVtZW50Lk5hbWUgYXMgc3RyaW5nXSA9IHtcblx0XHRcdFx0bmFtZTogZWxlbWVudC5OYW1lIGFzIHN0cmluZyxcblx0XHRcdFx0cHJvcGVydHlQYXRoOiBlbGVtZW50LkFnZ3JlZ2F0YWJsZVByb3BlcnR5LnZhbHVlLFxuXHRcdFx0XHRhZ2dyZWdhdGlvbk1ldGhvZDogZWxlbWVudC5BZ2dyZWdhdGlvbk1ldGhvZCxcblx0XHRcdFx0bGFiZWw6IGVsZW1lbnQ/LmFubm90YXRpb25zPy5Db21tb24/LkxhYmVsXG5cdFx0XHRcdFx0PyBlbGVtZW50Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5MYWJlbD8udG9TdHJpbmcoKVxuXHRcdFx0XHRcdDogYCR7b1Jlc291cmNlQnVuZGxlQ29yZS5nZXRUZXh0KFwiQUdHUkVHQVRBQkxFX1BST1BFUlRZXCIpfSAoJHtlbGVtZW50Lk5hbWV9KWAsXG5cdFx0XHRcdHNvcnRhYmxlOiB0cnVlLFxuXHRcdFx0XHRjdXN0b206IGZhbHNlXG5cdFx0XHR9O1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IGFBZ2dQcm9wcyA9IGFnZ3JlZ2F0aW9uSGVscGVyLmdldEFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMoKTtcblx0Y29uc3QgYUdycFByb3BzID0gYWdncmVnYXRpb25IZWxwZXIuZ2V0R3JvdXBhYmxlUHJvcGVydGllcygpO1xuXHRjb25zdCBtQXBwbHlTdXBwb3J0ZWQgPSB7fSBhcyBDaGFydEFwcGx5U3VwcG9ydGVkO1xuXHRtQXBwbHlTdXBwb3J0ZWQuJFR5cGUgPSBBZ2dyZWdhdGlvbkFubm90YXRpb25UeXBlcy5BcHBseVN1cHBvcnRlZFR5cGU7XG5cdG1BcHBseVN1cHBvcnRlZC5BZ2dyZWdhdGFibGVQcm9wZXJ0aWVzID0gW107XG5cdG1BcHBseVN1cHBvcnRlZC5Hcm91cGFibGVQcm9wZXJ0aWVzID0gW107XG5cblx0aWYgKGFBZ2dQcm9wcykge1xuXHRcdG1BcHBseVN1cHBvcnRlZC5BZ2dyZWdhdGFibGVQcm9wZXJ0aWVzID0gYUFnZ1Byb3BzLm1hcCgocHJvcCkgPT5cblx0XHRcdGdldEFnZ3JlZ2F0YWJsZVByb3BlcnRpZXNPYmplY3QocHJvcClcblx0XHQpIGFzIChFeHBhbmRQYXRoVHlwZTxQcm9wZXJ0eVBhdGg+ICYgeyBQcm9wZXJ0eTogRXhwYW5kUGF0aFR5cGU8UHJvcGVydHlQYXRoPiB9KVtdO1xuXHR9XG5cblx0aWYgKGFHcnBQcm9wcykge1xuXHRcdG1BcHBseVN1cHBvcnRlZC5Hcm91cGFibGVQcm9wZXJ0aWVzID0gYUdycFByb3BzLm1hcCgocHJvcCkgPT4gKHtcblx0XHRcdFtcIiRQcm9wZXJ0eVBhdGhcIl06IHByb3AudmFsdWVcblx0XHR9KSkgYXMgKEV4cGFuZFBhdGhUeXBlPFByb3BlcnR5UGF0aD4gJiB7IFByb3BlcnR5OiBFeHBhbmRQYXRoVHlwZTxQcm9wZXJ0eVBhdGg+IH0pW107XG5cdH1cblxuXHRjb25zdCBjaGFydEFjdGlvbnMgPSBnZXRDaGFydEFjdGlvbnMoY2hhcnRBbm5vdGF0aW9uLCB2aXN1YWxpemF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCk7XG5cdGxldCBbbmF2aWdhdGlvblByb3BlcnR5UGF0aCAvKiwgYW5ub3RhdGlvblBhdGgqL10gPSB2aXN1YWxpemF0aW9uUGF0aC5zcGxpdChcIkBcIik7XG5cdGlmIChuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxhc3RJbmRleE9mKFwiL1wiKSA9PT0gbmF2aWdhdGlvblByb3BlcnR5UGF0aC5sZW5ndGggLSAxKSB7XG5cdFx0Ly8gRHJvcCB0cmFpbGluZyBzbGFzaFxuXHRcdG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPSBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLnN1YnN0cmluZygwLCBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxlbmd0aCAtIDEpO1xuXHR9XG5cdGNvbnN0IHRpdGxlID0gY2hhcnRBbm5vdGF0aW9uLlRpdGxlPy50b1N0cmluZygpIHx8IFwiXCI7IC8vIHJlYWQgdGl0bGUgZnJvbSBjaGFydCBhbm5vdGF0aW9uXG5cdGNvbnN0IGRhdGFNb2RlbFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKTtcblx0Y29uc3QgaXNFbnRpdHlTZXQ6IGJvb2xlYW4gPSBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxlbmd0aCA9PT0gMDtcblx0Y29uc3QgZW50aXR5TmFtZTogc3RyaW5nID0gZGF0YU1vZGVsUGF0aC50YXJnZXRFbnRpdHlTZXQgPyBkYXRhTW9kZWxQYXRoLnRhcmdldEVudGl0eVNldC5uYW1lIDogZGF0YU1vZGVsUGF0aC5zdGFydGluZ0VudGl0eVNldC5uYW1lO1xuXHRjb25zdCBzRmlsdGVyYmFySWQgPSBpc0VudGl0eVNldCA/IGdldEZpbHRlckJhcklEKGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udGV4dFBhdGgoKSkgOiB1bmRlZmluZWQ7XG5cdGNvbnN0IG9WaXpQcm9wZXJ0aWVzID0ge1xuXHRcdHBsb3RBcmVhOiB7XG5cdFx0XHR3aW5kb3c6IHtcblx0XHRcdFx0c3RhcnQ6IFwiZmlyc3REYXRhUG9pbnRcIixcblx0XHRcdFx0ZW5kOiBcImxhc3REYXRhUG9pbnRcIlxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0bGVnZW5kR3JvdXA6IHtcblx0XHRcdGxheW91dDoge1xuXHRcdFx0XHRwb3NpdGlvbjogXCJib3R0b21cIlxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0dG9vbHRpcDogeyBmb3JtYXRTdHJpbmc6IFwiXCIgfVxuXHR9O1xuXHRsZXQgYXV0b0JpbmRPbkluaXQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cdC8vIGF1dG9CaW5kT25Jbml0IGlzIHJlc3BvbnNpYmxlIGZvciBsb2FkIG9mIGRhdGEgaW4gdGhlIGNoYXJ0cy5cblx0Ly8gRm9yIExpc3RSZXBvcnQgYW5kIEFuYWx5dGljYWxMaXN0UGFnZSBzaW5jZSB0aGVyZSBpcyBmaWx0ZXJiYXIgYXNzb2NpYXRlZCB0byBpdCBzbyB3ZSBoYXZlIHRvIHNldCBpdCBmYWxzZS4gQnV0IHRoZXJlIG1heSBiZSBjYXNlcyB3aGVyZSB3ZSB3YW50IHRvXG5cdC8vIHNob3cgY2hhcnRzIGluIHBvcG92ZXIgaW4gTFIgYW5kIEFMUCBsaW5rcyB0aGVuIGl0IG1pZ2h0IG5vdCBoYXZlIGZpbHRlcmJhciBldmVudGhvdWdoIHdlIGFyZSBpbiBMUiBhbmQgQUxQLiBGb3IgdGhpcyB3ZSBzZXQgaXQgdG8gdHJ1ZS5cblx0Ly8gRm9yIE9QIHdlIHNldCBpdCB0byB0cnVlIGFsd2F5cy5cblx0aWYgKCFzRmlsdGVyYmFySWQgfHwgY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLk9iamVjdFBhZ2UpIHtcblx0XHRhdXRvQmluZE9uSW5pdCA9IHRydWU7XG5cdH0gZWxzZSBpZiAoXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQgfHxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlXG5cdCkge1xuXHRcdGF1dG9CaW5kT25Jbml0ID0gZmFsc2U7XG5cdH1cblx0Y29uc3QgaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyA9XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5oYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zKCkgfHxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlO1xuXHRjb25zdCBvblNlZ21lbnRlZEJ1dHRvblByZXNzZWQgPSBoYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zID8gXCIuaGFuZGxlcnMub25TZWdtZW50ZWRCdXR0b25QcmVzc2VkXCIgOiBcIlwiO1xuXHRjb25zdCB2aXNpYmxlID0gaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyA/IFwiez0gJHtwYWdlSW50ZXJuYWw+YWxwQ29udGVudFZpZXd9ICE9PSAnVGFibGUnfVwiIDogXCJ0cnVlXCI7XG5cdGNvbnN0IGFsbG93ZWRUcmFuc2Zvcm1hdGlvbnMgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRBbGxvd2VkVHJhbnNmb3JtYXRpb25zKCk7XG5cdG1BcHBseVN1cHBvcnRlZC5lbmFibGVTZWFyY2ggPSBhbGxvd2VkVHJhbnNmb3JtYXRpb25zID8gYWxsb3dlZFRyYW5zZm9ybWF0aW9ucy5pbmNsdWRlcyhcInNlYXJjaFwiKSA6IHRydWU7XG5cdGxldCBxdWFsaWZpZXIgPSBcIlwiO1xuXHRpZiAoY2hhcnRBbm5vdGF0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZS5zcGxpdChcIiNcIikubGVuZ3RoID4gMSkge1xuXHRcdHF1YWxpZmllciA9IGNoYXJ0QW5ub3RhdGlvbi5mdWxseVF1YWxpZmllZE5hbWUuc3BsaXQoXCIjXCIpWzFdO1xuXHR9XG5cdGNvbnN0IGlzSW5zaWdodHNWaXNpYmxlID0gZ2V0SW5zaWdodHNWaXNpYmlsaXR5KFwiQW5hbHl0aWNhbFwiLCBjb252ZXJ0ZXJDb250ZXh0LCB2aXN1YWxpemF0aW9uUGF0aCk7XG5cdGNvbnN0IGlzUGFyYW1ldGVyaXplZEVudGl0eVNldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0UGFyYW1ldGVyRW50aXR5VHlwZSgpID8gdHJ1ZSA6IGZhbHNlO1xuXHRjb25zdCBpc0luc2lnaHRzRW5hYmxlZCA9IGFuZChnZXRJbnNpZ2h0c0VuYWJsZW1lbnQoKSwgaXNJbnNpZ2h0c1Zpc2libGUpO1xuXHRjb25zdCB7IGhlYWRlciwgaGVhZGVyVmlzaWJsZSB9ID0gZ2V0SGVhZGVySW5mbyh2aXN1YWxpemF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IHNlbGVjdGlvbk1vZGUgPSBnZXRTZWxlY3Rpb25Nb2RlKHZpc3VhbGl6YXRpb25QYXRoLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgY2hhcnREaW1lbnNpb25LZXlBbmRSb2xlOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+W10gPSBbXTtcblx0Y2hhcnRBbm5vdGF0aW9uPy5EaW1lbnNpb25BdHRyaWJ1dGVzPy5mb3JFYWNoKChkaW1lbnNpb25BdHRyaWJ1dGUpID0+IHtcblx0XHRjb25zdCBvYmo6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblx0XHRvYmpbZGltZW5zaW9uQXR0cmlidXRlPy5EaW1lbnNpb24/LnZhbHVlIGFzIHN0cmluZ10gPSBkaW1lbnNpb25BdHRyaWJ1dGU/LlJvbGUgYXMgc3RyaW5nO1xuXHRcdGNoYXJ0RGltZW5zaW9uS2V5QW5kUm9sZS5wdXNoKG9iaik7XG5cdH0pO1xuXG5cdGNvbnN0IGNoYXJ0TWVhc3VyZUtleUFuZFJvbGU6IFJlY29yZDxzdHJpbmcsIHN0cmluZz5bXSA9IFtdO1xuXHRjaGFydEFubm90YXRpb24/Lk1lYXN1cmVBdHRyaWJ1dGVzPy5mb3JFYWNoKChtZWFzdXJlQXR0cmlidXRlKSA9PiB7XG5cdFx0Y29uc3Qgb2JqOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cdFx0b2JqW21lYXN1cmVBdHRyaWJ1dGU/Lk1lYXN1cmU/LnZhbHVlIGFzIHN0cmluZ10gPSBtZWFzdXJlQXR0cmlidXRlPy5Sb2xlIGFzIHN0cmluZztcblx0XHRjaGFydE1lYXN1cmVLZXlBbmRSb2xlLnB1c2goe30pO1xuXHR9KTtcblxuXHQvLyBjaGVjayBpZiB0aGVyZSBhcmUgbWVhc3VyZXMgcG9pbnRpbmcgdG8gYWdncmVnYXRlZCBwcm9wZXJ0aWVzXG5cdGNvbnN0IGNvbnRhaW5zVHJhbnNBZ2dJbk1lYXN1cmVzID0gISFhZ2dyZWdhdGlvbkhlbHBlclxuXHRcdC5nZXRBZ2dyZWdhdGVkUHJvcGVydGllcygpWzBdXG5cdFx0Py5maWx0ZXIoKHByb3BlcnR5KSA9PiBjaGFydEFubm90YXRpb24uTWVhc3VyZXM/LnNvbWUoKG1lYXN1cmUpID0+IHByb3BlcnR5Lk5hbWUgPT09IG1lYXN1cmUudmFsdWUpKT8ubGVuZ3RoO1xuXG5cdHJldHVybiB7XG5cdFx0dHlwZTogVmlzdWFsaXphdGlvblR5cGUuQ2hhcnQsXG5cdFx0aWQ6IHF1YWxpZmllclxuXHRcdFx0PyBnZXRDaGFydElEKGlzRW50aXR5U2V0ID8gZW50aXR5TmFtZSA6IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgsIHF1YWxpZmllciwgVmlzdWFsaXphdGlvblR5cGUuQ2hhcnQpXG5cdFx0XHQ6IGdldENoYXJ0SUQoaXNFbnRpdHlTZXQgPyBlbnRpdHlOYW1lIDogbmF2aWdhdGlvblByb3BlcnR5UGF0aCwgVmlzdWFsaXphdGlvblR5cGUuQ2hhcnQpLFxuXHRcdGNvbGxlY3Rpb246IGdldFRhcmdldE9iamVjdFBhdGgoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkpLFxuXHRcdGFwaUlkOiBnZW5lcmF0ZShbXG5cdFx0XHRxdWFsaWZpZXJcblx0XHRcdFx0PyBnZXRDaGFydElEKGlzRW50aXR5U2V0ID8gZW50aXR5TmFtZSA6IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgsIHF1YWxpZmllciwgVmlzdWFsaXphdGlvblR5cGUuQ2hhcnQpXG5cdFx0XHRcdDogZ2V0Q2hhcnRJRChpc0VudGl0eVNldCA/IGVudGl0eU5hbWUgOiBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLCBWaXN1YWxpemF0aW9uVHlwZS5DaGFydCksXG5cdFx0XHRcIkNoYXJ0XCJcblx0XHRdKSxcblx0XHRlbnRpdHlOYW1lOiBlbnRpdHlOYW1lLFxuXHRcdHBlcnNvbmFsaXphdGlvbjogZ2V0UDEzbk1vZGUodmlzdWFsaXphdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdG5hdmlnYXRpb25QYXRoOiBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLFxuXHRcdGFubm90YXRpb25QYXRoOiBjb252ZXJ0ZXJDb250ZXh0LmdldEFic29sdXRlQW5ub3RhdGlvblBhdGgodmlzdWFsaXphdGlvblBhdGgpLFxuXHRcdGZpbHRlcklkOiBzRmlsdGVyYmFySWQsXG5cdFx0dml6UHJvcGVydGllczogSlNPTi5zdHJpbmdpZnkob1ZpelByb3BlcnRpZXMpLFxuXHRcdGFjdGlvbnM6IGNoYXJ0QWN0aW9ucy5hY3Rpb25zLFxuXHRcdGNvbW1hbmRBY3Rpb25zOiBjaGFydEFjdGlvbnMuY29tbWFuZEFjdGlvbnMsXG5cdFx0dGl0bGU6IHRpdGxlLFxuXHRcdGF1dG9CaW5kT25Jbml0OiBhdXRvQmluZE9uSW5pdCxcblx0XHRvblNlZ21lbnRlZEJ1dHRvblByZXNzZWQ6IG9uU2VnbWVudGVkQnV0dG9uUHJlc3NlZCxcblx0XHR2aXNpYmxlOiB2aXNpYmxlLFxuXHRcdGN1c3RvbUFnZzogbUN1c3RvbUFnZ3JlZ2F0ZXMsXG5cdFx0dHJhbnNBZ2c6IG1UcmFuc0FnZ3JlZ2F0aW9ucyxcblx0XHRhcHBseVN1cHBvcnRlZDogbUFwcGx5U3VwcG9ydGVkLFxuXHRcdHNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRQYXRoLFxuXHRcdHZhcmlhbnRNYW5hZ2VtZW50OiBmaW5kVmFyaWFudE1hbmFnZW1lbnQocDEzbk1vZGUsIHZhcmlhbnRNYW5hZ2VtZW50KSxcblx0XHRpc0luc2lnaHRzRW5hYmxlZDogaXNJbnNpZ2h0c0VuYWJsZWQsXG5cdFx0aXNJbnNpZ2h0c1Zpc2libGU6IGlzSW5zaWdodHNWaXNpYmxlLFxuXHRcdGlzUGFyYW1ldGVyaXplZEVudGl0eVNldDogaXNQYXJhbWV0ZXJpemVkRW50aXR5U2V0LFxuXHRcdGhlYWRlcjogaGVhZGVyLFxuXHRcdGhlYWRlclZpc2libGU6IGhlYWRlclZpc2libGUsXG5cdFx0c2VsZWN0aW9uTW9kZTogc2VsZWN0aW9uTW9kZSxcblx0XHRjaGFydERpbWVuc2lvbktleUFuZFJvbGU6IGNoYXJ0RGltZW5zaW9uS2V5QW5kUm9sZSxcblx0XHRjaGFydE1lYXN1cmVLZXlBbmRSb2xlOiBjaGFydE1lYXN1cmVLZXlBbmRSb2xlLFxuXHRcdGNvbnRhaW5zQWdncmVnYXRlZFByb3BlcnR5OiBhZ2dyZWdhdGlvbkhlbHBlci5nZXRBZ2dyZWdhdGVkUHJvcGVydHkoKS5sZW5ndGggPiAwLFxuXHRcdGNvbnRhaW5zVHJhbnNBZ2dJbk1lYXN1cmVzXG5cdH07XG59XG4vKipcbiAqIE1ldGhvZCB0byBkZXRlcm1pbmUgdGhlIHZhcmlhbnQgbWFuYWdlbWVudC5cbiAqIEBwYXJhbSBwMTNuTW9kZVxuICogQHBhcmFtIHZhcmlhbnRNYW5hZ2VtZW50XG4gKiBAcmV0dXJucyBUaGUgdmFyaWFudCBtYW5hZ2VtZW50IGZvciB0aGUgY2hhcnRcbiAqL1xuZnVuY3Rpb24gZmluZFZhcmlhbnRNYW5hZ2VtZW50KHAxM25Nb2RlOiBDaGFydFAxM25UeXBlLCB2YXJpYW50TWFuYWdlbWVudDogVmFyaWFudE1hbmFnZW1lbnRUeXBlKTogVmFyaWFudE1hbmFnZW1lbnRUeXBlIHtcblx0cmV0dXJuIHZhcmlhbnRNYW5hZ2VtZW50ID09PSBcIkNvbnRyb2xcIiAmJiAhcDEzbk1vZGUgPyBWYXJpYW50TWFuYWdlbWVudFR5cGUuTm9uZSA6IHZhcmlhbnRNYW5hZ2VtZW50O1xufVxuXG4vKipcbiAqIENyZWF0ZSB0aGUgQ2hhcnRWaXN1YWxpemF0aW9uIGNvbmZpZ3VyYXRpb24gdGhhdCB3aWxsIGJlIHVzZWQgdG8gZHVyaW5nIHRlbXBsYXRpbmcuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSB2aXN1YWxpemF0aW9uUGF0aCBUaGUgcGF0aCBvZiB0aGUgdmlzdWFsaXphdGlvbiBhbm5vdGF0aW9uXG4gKiBAcGFyYW0gdmlzdWFsaXphdGlvbiBUaGUgdmlzdWFsaXphdGlvbiBhbm5vdGF0aW9uXG4gKiBAcmV0dXJucyBUaGUgY2hhcnQgdmlzdWFsaXphdGlvbiBiYXNlZCBvbiB0aGUgYW5ub3RhdGlvbiB1c2VkIGZvciB0ZW1wbGF0aW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDaGFydFZpc3VhbGl6YXRpb25Gb3JUZW1wbGF0aW5nKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdHZpc3VhbGl6YXRpb246IEFjdHVhbFZpc3VhbGl6YXRpb25Bbm5vdGF0aW9uc1xuKTogQ2hhcnRUZW1wbGF0ZVZpc3VhbGl6YXRpb24ge1xuXHRjb25zdCBxdWFsaWZpZXIgPSB2aXN1YWxpemF0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZS5zcGxpdChcIiNcIikubGVuZ3RoID4gMSA/IHZpc3VhbGl6YXRpb24uZnVsbHlRdWFsaWZpZWROYW1lLnNwbGl0KFwiI1wiKVsxXSA6IFwiXCI7XG5cdGNvbnN0IFtuYXZpZ2F0aW9uUHJvcGVydHlQYXRoXSA9IHZpc3VhbGl6YXRpb25QYXRoLnNwbGl0KFwiQFwiKTtcblxuXHRjb25zdCBkYXRhTW9kZWxQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCk7XG5cdGNvbnN0IGlzRW50aXR5U2V0OiBib29sZWFuID0gbmF2aWdhdGlvblByb3BlcnR5UGF0aC5sZW5ndGggPT09IDA7XG5cdGNvbnN0IGVudGl0eU5hbWU6IHN0cmluZyA9IGRhdGFNb2RlbFBhdGgudGFyZ2V0RW50aXR5U2V0Py5uYW1lID8/IGRhdGFNb2RlbFBhdGguc3RhcnRpbmdFbnRpdHlTZXQubmFtZTtcblx0Y29uc3QgYWdncmVnYXRpb25IZWxwZXIgPSBuZXcgQWdncmVnYXRpb25IZWxwZXIoY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCksIGNvbnZlcnRlckNvbnRleHQsIHRydWUpO1xuXHRjb25zdCBhbGxvd2VkVHJhbnNmb3JtYXRpb25zID0gYWdncmVnYXRpb25IZWxwZXIuZ2V0QWxsb3dlZFRyYW5zZm9ybWF0aW9ucygpO1xuXHRjb25zdCBpc1BhcmFtZXRlcml6ZWRFbnRpdHlTZXQgPSAhIWNvbnZlcnRlckNvbnRleHQuZ2V0UGFyYW1ldGVyRW50aXR5VHlwZSgpO1xuXHRyZXR1cm4ge1xuXHRcdGFubm90YXRpb25QYXRoOiBjb252ZXJ0ZXJDb250ZXh0LmdldEFic29sdXRlQW5ub3RhdGlvblBhdGgodmlzdWFsaXphdGlvblBhdGgpLFxuXHRcdGlzUGFyYW1ldGVyaXplZEVudGl0eVNldCxcblx0XHRjb2xsZWN0aW9uOiBnZXRUYXJnZXRPYmplY3RQYXRoKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpKSxcblx0XHR0eXBlOiBWaXN1YWxpemF0aW9uVHlwZS5DaGFydCxcblx0XHRlbnRpdHlOYW1lLFxuXHRcdGlkOiBxdWFsaWZpZXJcblx0XHRcdD8gZ2V0Q2hhcnRJRChpc0VudGl0eVNldCA/IGVudGl0eU5hbWUgOiBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLCBxdWFsaWZpZXIsIFZpc3VhbGl6YXRpb25UeXBlLkNoYXJ0KVxuXHRcdFx0OiBnZXRDaGFydElEKGlzRW50aXR5U2V0ID8gZW50aXR5TmFtZSA6IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgsIFZpc3VhbGl6YXRpb25UeXBlLkNoYXJ0KSxcblx0XHRhcGlJZDogZ2VuZXJhdGUoW1xuXHRcdFx0cXVhbGlmaWVyXG5cdFx0XHRcdD8gZ2V0Q2hhcnRJRChpc0VudGl0eVNldCA/IGVudGl0eU5hbWUgOiBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLCBxdWFsaWZpZXIsIFZpc3VhbGl6YXRpb25UeXBlLkNoYXJ0KVxuXHRcdFx0XHQ6IGdldENoYXJ0SUQoaXNFbnRpdHlTZXQgPyBlbnRpdHlOYW1lIDogbmF2aWdhdGlvblByb3BlcnR5UGF0aCwgVmlzdWFsaXphdGlvblR5cGUuQ2hhcnQpLFxuXHRcdFx0XCJDaGFydFwiXG5cdFx0XSksXG5cdFx0YXBwbHlTdXBwb3J0ZWQ6IHtcblx0XHRcdCRUeXBlOiBcIk9yZy5PRGF0YS5BZ2dyZWdhdGlvbi5WMS5BcHBseVN1cHBvcnRlZFR5cGVcIixcblx0XHRcdGVuYWJsZVNlYXJjaDogYWxsb3dlZFRyYW5zZm9ybWF0aW9ucz8uaW5jbHVkZXMoXCJzZWFyY2hcIikgPz8gdHJ1ZVxuXHRcdH1cblx0fTtcbn1cblxuLyoqXG4gKiBNZXRob2QgdG8gZ2V0IGNvbXBpbGUgZXhwcmVzc2lvbiBmb3IgRGF0YUZpZWxkRm9yQWN0aW9uIGFuZCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24uXG4gKiBAcGFyYW0gZGF0YUZpZWxkXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMgQ29tcGlsZSBleHByZXNzaW9uIGZvciBEYXRhRmllbGRGb3JBY3Rpb24gYW5kIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvblxuICovXG5mdW5jdGlvbiBnZXRDb21waWxlRXhwcmVzc2lvbkZvckFjdGlvbihcblx0ZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdG5vdChcblx0XHRcdGVxdWFsKFxuXHRcdFx0XHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oXG5cdFx0XHRcdFx0ZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuLFxuXHRcdFx0XHRcdFtdLFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFJlbGF0aXZlTW9kZWxQYXRoRnVuY3Rpb24oKVxuXHRcdFx0XHQpLFxuXHRcdFx0XHR0cnVlXG5cdFx0XHQpXG5cdFx0KVxuXHQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQmxhbmtDaGFydFZpc3VhbGl6YXRpb24oY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+KTogQ2hhcnRWaXN1YWxpemF0aW9uIHtcblx0Y29uc3QgaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyA9XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5oYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zKCkgfHxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlO1xuXHRjb25zdCBkYXRhTW9kZWxQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCk7XG5cdGNvbnN0IGVudGl0eU5hbWUgPSBkYXRhTW9kZWxQYXRoLnRhcmdldEVudGl0eVNldCA/IGRhdGFNb2RlbFBhdGgudGFyZ2V0RW50aXR5U2V0Lm5hbWUgOiBkYXRhTW9kZWxQYXRoLnN0YXJ0aW5nRW50aXR5U2V0Lm5hbWU7XG5cblx0Y29uc3QgdmlzdWFsaXphdGlvbjogQ2hhcnRWaXN1YWxpemF0aW9uID0ge1xuXHRcdHR5cGU6IFZpc3VhbGl6YXRpb25UeXBlLkNoYXJ0LFxuXHRcdGlkOiBnZXRDaGFydElEKGVudGl0eU5hbWUsIFZpc3VhbGl6YXRpb25UeXBlLkNoYXJ0KSxcblx0XHRhcGlJZDogZ2VuZXJhdGUoW2dldENoYXJ0SUQoZW50aXR5TmFtZSwgVmlzdWFsaXphdGlvblR5cGUuQ2hhcnQpLCBcIkNoYXJ0XCJdKSxcblx0XHRlbnRpdHlOYW1lOiBlbnRpdHlOYW1lLFxuXHRcdHRpdGxlOiBcIlwiLFxuXHRcdGNvbGxlY3Rpb246IFwiXCIsXG5cdFx0cGVyc29uYWxpemF0aW9uOiB1bmRlZmluZWQsXG5cdFx0bmF2aWdhdGlvblBhdGg6IFwiXCIsXG5cdFx0YW5ub3RhdGlvblBhdGg6IFwiXCIsXG5cdFx0dml6UHJvcGVydGllczogSlNPTi5zdHJpbmdpZnkoe1xuXHRcdFx0bGVnZW5kR3JvdXA6IHtcblx0XHRcdFx0bGF5b3V0OiB7XG5cdFx0XHRcdFx0cG9zaXRpb246IFwiYm90dG9tXCJcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pLFxuXHRcdGFjdGlvbnM6IFtdLFxuXHRcdGNvbW1hbmRBY3Rpb25zOiB7fSxcblx0XHRhdXRvQmluZE9uSW5pdDogZmFsc2UsXG5cdFx0b25TZWdtZW50ZWRCdXR0b25QcmVzc2VkOiBcIlwiLFxuXHRcdHZpc2libGU6IGhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMgPyBcIns9ICR7cGFnZUludGVybmFsPmFscENvbnRlbnRWaWV3fSAhPT0gJ1RhYmxlJ31cIiA6IFwidHJ1ZVwiLFxuXHRcdGN1c3RvbUFnZzoge30sXG5cdFx0dHJhbnNBZ2c6IHt9LFxuXHRcdGFwcGx5U3VwcG9ydGVkOiB7XG5cdFx0XHQkVHlwZTogXCJPcmcuT0RhdGEuQWdncmVnYXRpb24uVjEuQXBwbHlTdXBwb3J0ZWRUeXBlXCIsXG5cdFx0XHRBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzOiBbXSxcblx0XHRcdEdyb3VwYWJsZVByb3BlcnRpZXM6IFtdLFxuXHRcdFx0ZW5hYmxlU2VhcmNoOiBmYWxzZVxuXHRcdH0sXG5cdFx0bXVsdGlWaWV3czogZmFsc2UsXG5cdFx0dmFyaWFudE1hbmFnZW1lbnQ6IFZhcmlhbnRNYW5hZ2VtZW50VHlwZS5Ob25lXG5cdH07XG5cblx0cmV0dXJuIHZpc3VhbGl6YXRpb247XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBOERBO0FBQ0E7QUFDQTs7RUFnQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTQSw4QkFBOEJBLENBQ3RDQyxlQUFzQixFQUN0QkMsaUJBQXlCLEVBQ3pCQyxnQkFBeUQsRUFDRDtJQUN4RCxNQUFNQyxZQUFtRSxHQUFHLEVBQUU7SUFDOUUsSUFBSUgsZUFBZSxFQUFFSSxPQUFPLEVBQUU7TUFDN0JKLGVBQWUsQ0FBQ0ksT0FBTyxDQUFDQyxPQUFPLENBQUVDLFNBQWdFLElBQUs7UUFDckcsTUFBTUMsR0FBRyxHQUFHQyxTQUFTLENBQUNDLHdCQUF3QixDQUFDSCxTQUFTLENBQUM7UUFDekQsSUFBSUksNEJBQTRCLENBQUNKLFNBQVMsQ0FBQyxJQUFJLENBQUNBLFNBQVMsQ0FBQ0ssTUFBTSxJQUFJLENBQUNMLFNBQVMsQ0FBQ00sV0FBVyxFQUFFO1VBQzNGLFFBQVFOLFNBQVMsQ0FBQ08sS0FBSztZQUN0QjtjQUNDLElBQUlQLFNBQVMsQ0FBQ1EsWUFBWSxJQUFJLENBQUNSLFNBQVMsQ0FBQ1EsWUFBWSxDQUFDQyxPQUFPLEVBQUU7Z0JBQzlEWixZQUFZLENBQUNhLElBQUksQ0FBQztrQkFDakJDLElBQUksRUFBRUMsVUFBVSxDQUFDQyxrQkFBa0I7a0JBQ25DQyxjQUFjLEVBQUVsQixnQkFBZ0IsQ0FBQ21CLCtCQUErQixDQUFDZixTQUFTLENBQUNnQixrQkFBa0IsQ0FBQztrQkFDOUZmLEdBQUc7a0JBQ0hnQixPQUFPLEVBQUVDLDZC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
@@ -22,7 +22,12 @@ import type {
22
22
  CustomAction,
23
23
  OverrideTypeAction
24
24
  } from "sap/fe/core/converters/controls/Common/Action";
25
- import { getActionsFromManifest, isActionAIOperation, isMenuAIOperation } from "sap/fe/core/converters/controls/Common/Action";
25
+ import {
26
+ addSeparators,
27
+ getActionsFromManifest,
28
+ isActionAIOperation,
29
+ isMenuAIOperation
30
+ } from "sap/fe/core/converters/controls/Common/Action";
26
31
  import { OverrideType, insertCustomElements } from "sap/fe/core/converters/helpers/ConfigurableObject";
27
32
  import { KeyHelper } from "sap/fe/core/converters/helpers/Key";
28
33
  import { generate } from "sap/fe/core/helpers/StableIdHelper";
@@ -30,7 +35,7 @@ import { getTargetObjectPath } from "sap/fe/core/templating/DataModelPathHelper"
30
35
  import Library from "sap/ui/core/Lib";
31
36
  import type { ExpandPathType } from "../../../../../../../../../types/metamodel_types";
32
37
  import type ConverterContext from "../../ConverterContext";
33
- import type { ChartManifestConfiguration, ManifestAction } from "../../ManifestSettings";
38
+ import type { ChartManifestConfiguration, ManifestAction, OverflowGroupsConfiguration } from "../../ManifestSettings";
34
39
  import { ActionType, TemplateType, VariantManagementType, VisualizationType } from "../../ManifestSettings";
35
40
  import type ManifestWrapper from "../../ManifestWrapper";
36
41
  import { AggregationHelper } from "../../helpers/Aggregation";
@@ -65,6 +70,7 @@ export type ChartVisualization = ChartTemplateVisualization & {
65
70
  filterId?: string;
66
71
  vizProperties: string;
67
72
  actions: BaseAction[];
73
+ overflowGroups?: OverflowGroupsConfiguration;
68
74
  commandActions: Record<string, CustomAction>;
69
75
  title: string | undefined;
70
76
  autoBindOnInit: boolean | undefined;
@@ -194,9 +200,19 @@ export function getChartActions(
194
200
  command: OverrideType.overwrite,
195
201
  position: OverrideType.overwrite,
196
202
  group: OverrideType.overwrite,
197
- priority: OverrideType.overwrite
203
+ overflowGroup: OverrideType.overwrite,
204
+ priority: OverrideType.overwrite,
205
+ disableStrictHandling: OverrideType.overwrite
198
206
  };
199
- const chartActions = insertCustomElements<BaseAction>(aAnnotationActions, manifestActions.actions, actionOverwriteConfig);
207
+ let chartActions = insertCustomElements<BaseAction>(aAnnotationActions, manifestActions.actions, actionOverwriteConfig);
208
+
209
+ // Add separators based on overflowGroups configuration from manifest
210
+ const chartManifestConfig = converterContext.getManifestControlConfiguration<ChartManifestConfiguration>(visualizationPath);
211
+ const overflowGroupsConfig = chartManifestConfig.overflowGroups;
212
+ if (overflowGroupsConfig) {
213
+ chartActions = addSeparators(chartActions, overflowGroupsConfig);
214
+ }
215
+
200
216
  return {
201
217
  actions: chartActions,
202
218
  commandActions: manifestActions.commandActions