@sapui5/sap.fe.core 1.121.2 → 1.123.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (241) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/ActionRuntime.js +2 -2
  4. package/src/sap/fe/core/ActionRuntime.ts +1 -2
  5. package/src/sap/fe/core/CommonUtils.js +14 -171
  6. package/src/sap/fe/core/CommonUtils.ts +15 -221
  7. package/src/sap/fe/core/PageController.js +13 -1
  8. package/src/sap/fe/core/PageController.ts +16 -0
  9. package/src/sap/fe/core/TemplateComponent.js +6 -1
  10. package/src/sap/fe/core/TemplateComponent.ts +8 -0
  11. package/src/sap/fe/core/UIProvider.js +23 -0
  12. package/src/sap/fe/core/UIProvider.ts +38 -0
  13. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js +97 -43
  14. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.ts +120 -50
  15. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.js +6 -3
  16. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.ts +12 -18
  17. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +2 -2
  18. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +1 -1
  19. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.js +1 -1
  20. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.ts +4 -3
  21. package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.js +1 -1
  22. package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.ts +1 -0
  23. package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +42 -1
  24. package/src/sap/fe/core/controllerextensions/BaseControllerExtension.ts +40 -0
  25. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.js +5 -2
  26. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +5 -3
  27. package/src/sap/fe/core/controllerextensions/EditFlow.js +151 -60
  28. package/src/sap/fe/core/controllerextensions/EditFlow.ts +165 -68
  29. package/src/sap/fe/core/controllerextensions/HookSupport.js +32 -14
  30. package/src/sap/fe/core/controllerextensions/HookSupport.ts +35 -14
  31. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +5 -17
  32. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +0 -12
  33. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +6 -6
  34. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +15 -10
  35. package/src/sap/fe/core/controllerextensions/InternalRouting.js +108 -287
  36. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +117 -309
  37. package/src/sap/fe/core/controllerextensions/KPIManagement.js +2 -2
  38. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +6 -2
  39. package/src/sap/fe/core/controllerextensions/MessageHandler.js +2 -2
  40. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +1 -1
  41. package/src/sap/fe/core/controllerextensions/PageReady.js +6 -6
  42. package/src/sap/fe/core/controllerextensions/PageReady.ts +5 -4
  43. package/src/sap/fe/core/controllerextensions/Paginator.js +17 -110
  44. package/src/sap/fe/core/controllerextensions/Paginator.ts +13 -130
  45. package/src/sap/fe/core/controllerextensions/Placeholder.js +3 -3
  46. package/src/sap/fe/core/controllerextensions/Placeholder.ts +1 -2
  47. package/src/sap/fe/core/controllerextensions/Recommendations.js +36 -31
  48. package/src/sap/fe/core/controllerextensions/Recommendations.ts +32 -37
  49. package/src/sap/fe/core/controllerextensions/Share.js +7 -7
  50. package/src/sap/fe/core/controllerextensions/Share.ts +6 -6
  51. package/src/sap/fe/core/controllerextensions/SideEffects.js +52 -6
  52. package/src/sap/fe/core/controllerextensions/SideEffects.ts +56 -4
  53. package/src/sap/fe/core/controllerextensions/ViewState.js +32 -46
  54. package/src/sap/fe/core/controllerextensions/ViewState.ts +24 -31
  55. package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.js +42 -31
  56. package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.tsx +6 -0
  57. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +168 -276
  58. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +182 -310
  59. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +3 -3
  60. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +2 -2
  61. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +4 -3
  62. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +3 -2
  63. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +74 -52
  64. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +95 -55
  65. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +3 -17
  66. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +10 -23
  67. package/src/sap/fe/core/controllerextensions/recommendations/Telemetry.js +3 -3
  68. package/src/sap/fe/core/controllerextensions/recommendations/Telemetry.ts +2 -2
  69. package/src/sap/fe/core/controllerextensions/routing/ContextPathHelper.js +225 -0
  70. package/src/sap/fe/core/controllerextensions/routing/ContextPathHelper.ts +241 -0
  71. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.js +69 -48
  72. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.tsx +56 -33
  73. package/src/sap/fe/core/controls/FormElementWrapper.js +8 -11
  74. package/src/sap/fe/core/controls/FormElementWrapper.ts +9 -0
  75. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.js +6 -14
  76. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.tsx +12 -23
  77. package/src/sap/fe/core/converters/ConverterContext.js +17 -9
  78. package/src/sap/fe/core/converters/ConverterContext.ts +55 -41
  79. package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
  80. package/src/sap/fe/core/converters/ManifestSettings.ts +19 -5
  81. package/src/sap/fe/core/converters/ManifestWrapper.js +14 -4
  82. package/src/sap/fe/core/converters/ManifestWrapper.ts +21 -10
  83. package/src/sap/fe/core/converters/MetaModelConverter.js +402 -383
  84. package/src/sap/fe/core/converters/MetaModelConverter.ts +538 -338
  85. package/src/sap/fe/core/converters/TemplateConverter.js +4 -2
  86. package/src/sap/fe/core/converters/TemplateConverter.ts +18 -13
  87. package/src/sap/fe/core/converters/annotations/DataField.js +30 -28
  88. package/src/sap/fe/core/converters/annotations/DataField.ts +58 -35
  89. package/src/sap/fe/core/converters/common/AnnotationConverter.js +24 -23
  90. package/src/sap/fe/core/converters/controls/Common/Action.js +5 -4
  91. package/src/sap/fe/core/converters/controls/Common/Action.ts +34 -28
  92. package/src/sap/fe/core/converters/controls/Common/Chart.js +37 -33
  93. package/src/sap/fe/core/converters/controls/Common/Chart.ts +64 -46
  94. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +15 -4
  95. package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +31 -15
  96. package/src/sap/fe/core/converters/controls/Common/Form.js +6 -4
  97. package/src/sap/fe/core/converters/controls/Common/Form.ts +23 -11
  98. package/src/sap/fe/core/converters/controls/Common/KPI.js +5 -3
  99. package/src/sap/fe/core/converters/controls/Common/KPI.ts +17 -11
  100. package/src/sap/fe/core/converters/controls/Common/Table.js +197 -101
  101. package/src/sap/fe/core/converters/controls/Common/Table.ts +393 -182
  102. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +4 -5
  103. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +38 -27
  104. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +41 -11
  105. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +112 -45
  106. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +7 -7
  107. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +18 -12
  108. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +1 -1
  109. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.ts +5 -4
  110. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +1 -1
  111. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +19 -9
  112. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +64 -63
  113. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +109 -100
  114. package/src/sap/fe/core/converters/helpers/Aggregation.js +12 -11
  115. package/src/sap/fe/core/converters/helpers/Aggregation.ts +35 -30
  116. package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +4 -1
  117. package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +12 -9
  118. package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +1 -1
  119. package/src/sap/fe/core/converters/helpers/DataFieldHelper.ts +1 -1
  120. package/src/sap/fe/core/converters/helpers/ID.js +1 -1
  121. package/src/sap/fe/core/converters/helpers/ID.ts +6 -6
  122. package/src/sap/fe/core/converters/helpers/InsightsHelpers.js +3 -3
  123. package/src/sap/fe/core/converters/helpers/InsightsHelpers.ts +11 -6
  124. package/src/sap/fe/core/converters/helpers/Key.js +2 -2
  125. package/src/sap/fe/core/converters/helpers/Key.ts +4 -4
  126. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -1
  127. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +2 -2
  128. package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +21 -19
  129. package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +43 -31
  130. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +1 -1
  131. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +16 -12
  132. package/src/sap/fe/core/converters/templates/ListReportConverter.js +8 -3
  133. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +41 -21
  134. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +5 -3
  135. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +24 -19
  136. package/src/sap/fe/core/designtime/AppComponent.designtime.js +3 -2
  137. package/src/sap/fe/core/designtime/AppComponent.designtime.ts +2 -1
  138. package/src/sap/fe/core/filter/DraftEditState.fragment.xml +1 -1
  139. package/src/sap/fe/core/formatters/CollaborationFormatter.js +4 -6
  140. package/src/sap/fe/core/formatters/CollaborationFormatter.ts +5 -4
  141. package/src/sap/fe/core/formatters/FPMFormatter.js +5 -13
  142. package/src/sap/fe/core/formatters/FPMFormatter.ts +11 -10
  143. package/src/sap/fe/core/formatters/FiscalFormat.js +1 -1
  144. package/src/sap/fe/core/formatters/FiscalFormat.ts +1 -1
  145. package/src/sap/fe/core/formatters/KPIFormatter.js +4 -7
  146. package/src/sap/fe/core/formatters/KPIFormatter.ts +3 -3
  147. package/src/sap/fe/core/formatters/StandardFormatter.js +4 -7
  148. package/src/sap/fe/core/formatters/StandardFormatter.ts +3 -3
  149. package/src/sap/fe/core/formatters/ValueFormatter.js +35 -6
  150. package/src/sap/fe/core/formatters/ValueFormatter.ts +31 -3
  151. package/src/sap/fe/core/fpm/manifest.json +1 -1
  152. package/src/sap/fe/core/helpers/AppStartupHelper.js +54 -33
  153. package/src/sap/fe/core/helpers/AppStartupHelper.ts +62 -41
  154. package/src/sap/fe/core/helpers/BindingToolkit.js +17 -3
  155. package/src/sap/fe/core/helpers/BindingToolkit.ts +28 -6
  156. package/src/sap/fe/core/helpers/ClassSupport.js +32 -13
  157. package/src/sap/fe/core/helpers/ClassSupport.ts +35 -15
  158. package/src/sap/fe/core/helpers/DeleteHelper.js +71 -61
  159. package/src/sap/fe/core/helpers/DeleteHelper.ts +125 -103
  160. package/src/sap/fe/core/helpers/DraftEditState.js +5 -3
  161. package/src/sap/fe/core/helpers/DraftEditState.ts +3 -1
  162. package/src/sap/fe/core/helpers/FPMHelper.js +43 -46
  163. package/src/sap/fe/core/helpers/FPMHelper.ts +50 -56
  164. package/src/sap/fe/core/helpers/MetaModelFunction.js +77 -53
  165. package/src/sap/fe/core/helpers/MetaModelFunction.ts +78 -57
  166. package/src/sap/fe/core/helpers/ModelHelper.js +10 -4
  167. package/src/sap/fe/core/helpers/ModelHelper.ts +12 -6
  168. package/src/sap/fe/core/helpers/PasteHelper.js +194 -7
  169. package/src/sap/fe/core/helpers/PasteHelper.ts +265 -13
  170. package/src/sap/fe/core/helpers/PromiseKeeper.js +66 -0
  171. package/src/sap/fe/core/helpers/PromiseKeeper.ts +56 -0
  172. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +30 -19
  173. package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +34 -22
  174. package/src/sap/fe/core/helpers/StableIdHelper.js +1 -1
  175. package/src/sap/fe/core/helpers/StableIdHelper.ts +7 -2
  176. package/src/sap/fe/core/helpers/StandardRecommendationHelper.js +26 -52
  177. package/src/sap/fe/core/helpers/StandardRecommendationHelper.ts +37 -63
  178. package/src/sap/fe/core/helpers/TitleHelper.js +1 -1
  179. package/src/sap/fe/core/helpers/TitleHelper.ts +17 -14
  180. package/src/sap/fe/core/helpers/TypeGuards.js +27 -3
  181. package/src/sap/fe/core/helpers/TypeGuards.ts +37 -7
  182. package/src/sap/fe/core/jsx-runtime/jsx-xml.js +48 -8
  183. package/src/sap/fe/core/jsx-runtime/jsx-xml.ts +40 -9
  184. package/src/sap/fe/core/library.js +1 -1
  185. package/src/sap/fe/core/messagebundle.properties +5 -2
  186. package/src/sap/fe/core/messagebundle_da.properties +1 -1
  187. package/src/sap/fe/core/messagebundle_en.properties +267 -2
  188. package/src/sap/fe/core/messagebundle_sl.properties +1 -1
  189. package/src/sap/fe/core/operationsHelper.js +2 -1
  190. package/src/sap/fe/core/operationsHelper.ts +1 -0
  191. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +3 -3
  192. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +2 -2
  193. package/src/sap/fe/core/services/NavigationServiceFactory.js +2 -2
  194. package/src/sap/fe/core/services/NavigationServiceFactory.ts +3 -2
  195. package/src/sap/fe/core/services/RoutingServiceFactory.js +27 -14
  196. package/src/sap/fe/core/services/RoutingServiceFactory.ts +27 -14
  197. package/src/sap/fe/core/services/ShellServicesFactory.js +49 -12
  198. package/src/sap/fe/core/services/ShellServicesFactory.ts +62 -13
  199. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +156 -82
  200. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +218 -100
  201. package/src/sap/fe/core/services/TelemetryServiceFactory.js +3 -3
  202. package/src/sap/fe/core/services/TelemetryServiceFactory.ts +6 -6
  203. package/src/sap/fe/core/services/ValueHelpHistoryServiceFactory.js +3 -2
  204. package/src/sap/fe/core/services/ValueHelpHistoryServiceFactory.ts +1 -1
  205. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +1 -1
  206. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.ts +2 -2
  207. package/src/sap/fe/core/services/view/TemplatingErrorPage.view.xml +1 -1
  208. package/src/sap/fe/core/templating/CommonFormatters.js +6 -3
  209. package/src/sap/fe/core/templating/CommonFormatters.ts +13 -12
  210. package/src/sap/fe/core/templating/CriticalityFormatters.js +2 -2
  211. package/src/sap/fe/core/templating/CriticalityFormatters.ts +37 -14
  212. package/src/sap/fe/core/templating/DataFieldFormatters.js +12 -11
  213. package/src/sap/fe/core/templating/DataFieldFormatters.ts +35 -24
  214. package/src/sap/fe/core/templating/DataModelPathHelper.js +22 -18
  215. package/src/sap/fe/core/templating/DataModelPathHelper.ts +61 -51
  216. package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
  217. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +8 -3
  218. package/src/sap/fe/core/templating/EntityTypeHelper.js +1 -1
  219. package/src/sap/fe/core/templating/EntityTypeHelper.ts +1 -1
  220. package/src/sap/fe/core/templating/FieldControlHelper.js +3 -3
  221. package/src/sap/fe/core/templating/FieldControlHelper.ts +27 -8
  222. package/src/sap/fe/core/templating/FilterHelper.js +13 -10
  223. package/src/sap/fe/core/templating/FilterHelper.ts +80 -46
  224. package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
  225. package/src/sap/fe/core/templating/FilterTemplating.ts +2 -2
  226. package/src/sap/fe/core/templating/PropertyFormatters.js +6 -8
  227. package/src/sap/fe/core/templating/PropertyFormatters.ts +11 -11
  228. package/src/sap/fe/core/templating/PropertyHelper.js +3 -3
  229. package/src/sap/fe/core/templating/PropertyHelper.ts +4 -4
  230. package/src/sap/fe/core/templating/SemanticObjectHelper.js +157 -13
  231. package/src/sap/fe/core/templating/SemanticObjectHelper.ts +182 -16
  232. package/src/sap/fe/core/templating/UIFormatters.js +23 -22
  233. package/src/sap/fe/core/templating/UIFormatters.ts +94 -66
  234. package/src/sap/fe/core/type/DateTimeWithTimezone.js +1 -1
  235. package/src/sap/fe/core/type/DateTimeWithTimezone.ts +2 -2
  236. package/src/sap/fe/core/type/EDM.js +1 -1
  237. package/src/sap/fe/core/type/EDM.ts +2 -2
  238. package/src/sap/fe/core/type/Email.js +1 -1
  239. package/src/sap/fe/core/type/Email.ts +1 -1
  240. package/src/sap/fe/core/type/FiscalDate.js +2 -2
  241. package/src/sap/fe/core/type/FiscalDate.ts +2 -2
@@ -8,14 +8,14 @@
8
8
  /******/ "use strict";
9
9
  /******/ var __webpack_modules__ = ({
10
10
 
11
- /***/ 685:
11
+ /***/ 797:
12
12
  /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
13
13
 
14
14
 
15
15
  Object.defineProperty(exports, "__esModule", ({ value: true }));
16
16
  exports.convert = void 0;
17
- const VocabularyReferences_1 = __webpack_require__(280);
18
- const utils_1 = __webpack_require__(288);
17
+ const VocabularyReferences_1 = __webpack_require__(145);
18
+ const utils_1 = __webpack_require__(514);
19
19
  /**
20
20
  * Symbol to extend an annotation with the reference to its target.
21
21
  */
@@ -43,7 +43,7 @@ function appendObjectPath(objectPath, visitedObject) {
43
43
  * @returns An object containing the resolved target and the elements that were visited while getting to the target.
44
44
  */
45
45
  function resolveTarget(converter, startElement, path, annotationsTerm) {
46
- var _a, _b, _c, _d;
46
+ var _a, _b, _c, _d, _e;
47
47
  if (path === undefined) {
48
48
  return { target: undefined, objectPath: [], messages: [] };
49
49
  }
@@ -71,7 +71,7 @@ function resolveTarget(converter, startElement, path, annotationsTerm) {
71
71
  pathSegments[0] !== ((_a = converter.getConvertedEntityContainer()) === null || _a === void 0 ? void 0 : _a.fullyQualifiedName)) {
72
72
  // We have a fully qualified name in the path that is not the entity container.
73
73
  startElement =
74
- (_c = (_b = converter.getConvertedEntityType(pathSegments[0])) !== null && _b !== void 0 ? _b : converter.getConvertedComplexType(pathSegments[0])) !== null && _c !== void 0 ? _c : converter.getConvertedAction(pathSegments[0]);
74
+ (_d = (_c = (_b = converter.getConvertedEntityType(pathSegments[0])) !== null && _b !== void 0 ? _b : converter.getConvertedComplexType(pathSegments[0])) !== null && _c !== void 0 ? _c : converter.getConvertedAction(pathSegments[0])) !== null && _d !== void 0 ? _d : converter.getConvertedAction(`${pathSegments[0]}()`); // unbound action
75
75
  pathSegments.shift(); // Let's remove the first path element
76
76
  }
77
77
  else {
@@ -86,7 +86,7 @@ function resolveTarget(converter, startElement, path, annotationsTerm) {
86
86
  // property: start at the entity type or complex type the property belongs to
87
87
  const parentElementFQN = (0, utils_1.substringBeforeFirst)(startElement.fullyQualifiedName, '/');
88
88
  startElement =
89
- (_d = converter.getConvertedEntityType(parentElementFQN)) !== null && _d !== void 0 ? _d : converter.getConvertedComplexType(parentElementFQN);
89
+ (_e = converter.getConvertedEntityType(parentElementFQN)) !== null && _e !== void 0 ? _e : converter.getConvertedComplexType(parentElementFQN);
90
90
  }
91
91
  const result = pathSegments.reduce((current, segment) => {
92
92
  var _a, _b, _c, _d, _e;
@@ -1070,7 +1070,7 @@ exports.convert = convert;
1070
1070
 
1071
1071
  /***/ }),
1072
1072
 
1073
- /***/ 144:
1073
+ /***/ 232:
1074
1074
  /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
1075
1075
 
1076
1076
 
@@ -1089,24 +1089,24 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
1089
1089
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
1090
1090
  };
1091
1091
  Object.defineProperty(exports, "__esModule", ({ value: true }));
1092
- __exportStar(__webpack_require__(685), exports);
1093
- __exportStar(__webpack_require__(288), exports);
1094
- __exportStar(__webpack_require__(394), exports);
1092
+ __exportStar(__webpack_require__(797), exports);
1093
+ __exportStar(__webpack_require__(514), exports);
1094
+ __exportStar(__webpack_require__(777), exports);
1095
1095
 
1096
1096
 
1097
1097
  /***/ }),
1098
1098
 
1099
- /***/ 288:
1099
+ /***/ 514:
1100
1100
  /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
1101
1101
 
1102
1102
 
1103
1103
  Object.defineProperty(exports, "__esModule", ({ value: true }));
1104
1104
  exports.mergeAnnotations = exports.addGetByValue = exports.createIndexedFind = exports.lazy = exports.Decimal = exports.isComplexTypeDefinition = exports.unalias = exports.alias = exports.substringBeforeLast = exports.substringBeforeFirst = exports.splitAtLast = exports.splitAtFirst = exports.defaultReferences = exports.TermToTypes = exports.EnumIsFlag = void 0;
1105
- var EnumIsFlag_1 = __webpack_require__(612);
1105
+ var EnumIsFlag_1 = __webpack_require__(907);
1106
1106
  Object.defineProperty(exports, "EnumIsFlag", ({ enumerable: true, get: function () { return EnumIsFlag_1.EnumIsFlag; } }));
1107
- var TermToTypes_1 = __webpack_require__(374);
1107
+ var TermToTypes_1 = __webpack_require__(246);
1108
1108
  Object.defineProperty(exports, "TermToTypes", ({ enumerable: true, get: function () { return TermToTypes_1.TermToTypes; } }));
1109
- var VocabularyReferences_1 = __webpack_require__(280);
1109
+ var VocabularyReferences_1 = __webpack_require__(145);
1110
1110
  Object.defineProperty(exports, "defaultReferences", ({ enumerable: true, get: function () { return VocabularyReferences_1.VocabularyReferences; } }));
1111
1111
  function splitAt(string, index) {
1112
1112
  return index < 0 ? [string, ''] : [string.substring(0, index), string.substring(index + 1)];
@@ -1365,13 +1365,13 @@ exports.mergeAnnotations = mergeAnnotations;
1365
1365
 
1366
1366
  /***/ }),
1367
1367
 
1368
- /***/ 394:
1368
+ /***/ 777:
1369
1369
  /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
1370
1370
 
1371
1371
 
1372
1372
  Object.defineProperty(exports, "__esModule", ({ value: true }));
1373
1373
  exports.revertTermToGenericType = void 0;
1374
- const utils_1 = __webpack_require__(288);
1374
+ const utils_1 = __webpack_require__(514);
1375
1375
  /**
1376
1376
  * Revert an object to its raw type equivalent.
1377
1377
  *
@@ -1652,14 +1652,14 @@ exports.revertTermToGenericType = revertTermToGenericType;
1652
1652
 
1653
1653
  /***/ }),
1654
1654
 
1655
- /***/ 612:
1655
+ /***/ 907:
1656
1656
  /***/ (function(__unused_webpack_module, exports) {
1657
1657
 
1658
1658
 
1659
1659
  Object.defineProperty(exports, "__esModule", ({ value: true }));
1660
1660
  exports.EnumIsFlag = void 0;
1661
1661
  exports.EnumIsFlag = {
1662
- "Auth.KeyLocation": false,
1662
+ "Authorization.KeyLocation": false,
1663
1663
  "Core.RevisionKind": false,
1664
1664
  "Core.DataModificationOperationKind": false,
1665
1665
  "Core.Permission": true,
@@ -1697,7 +1697,7 @@ exports.EnumIsFlag = {
1697
1697
 
1698
1698
  /***/ }),
1699
1699
 
1700
- /***/ 374:
1700
+ /***/ 246:
1701
1701
  /***/ (function(__unused_webpack_module, exports) {
1702
1702
 
1703
1703
 
@@ -1847,6 +1847,7 @@ var TermToTypes;
1847
1847
  TermToTypes["com.sap.vocabularies.Common.v1.ValueList"] = "com.sap.vocabularies.Common.v1.ValueListType";
1848
1848
  TermToTypes["com.sap.vocabularies.Common.v1.ValueListRelevantQualifiers"] = "Org.OData.Core.V1.SimpleIdentifier";
1849
1849
  TermToTypes["com.sap.vocabularies.Common.v1.ValueListWithFixedValues"] = "Org.OData.Core.V1.Tag";
1850
+ TermToTypes["com.sap.vocabularies.Common.v1.ValueListShowValuesImmediately"] = "Org.OData.Core.V1.Tag";
1850
1851
  TermToTypes["com.sap.vocabularies.Common.v1.ValueListMapping"] = "com.sap.vocabularies.Common.v1.ValueListMappingType";
1851
1852
  TermToTypes["com.sap.vocabularies.Common.v1.IsCalendarYear"] = "Org.OData.Core.V1.Tag";
1852
1853
  TermToTypes["com.sap.vocabularies.Common.v1.IsCalendarHalfyear"] = "Org.OData.Core.V1.Tag";
@@ -1968,7 +1969,7 @@ var TermToTypes;
1968
1969
 
1969
1970
  /***/ }),
1970
1971
 
1971
- /***/ 280:
1972
+ /***/ 145:
1972
1973
  /***/ (function(__unused_webpack_module, exports) {
1973
1974
 
1974
1975
 
@@ -1978,7 +1979,7 @@ exports.VocabularyReferences = void 0;
1978
1979
  * The list of vocabularies with default aliases.
1979
1980
  */
1980
1981
  exports.VocabularyReferences = [
1981
- { alias: "Auth", namespace: "Org.OData.Authorization.V1", uri: "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Authorization.V1.xml" },
1982
+ { alias: "Authorization", namespace: "Org.OData.Authorization.V1", uri: "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Authorization.V1.xml" },
1982
1983
  { alias: "Core", namespace: "Org.OData.Core.V1", uri: "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Core.V1.xml" },
1983
1984
  { alias: "Capabilities", namespace: "Org.OData.Capabilities.V1", uri: "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Capabilities.V1.xml" },
1984
1985
  { alias: "Aggregation", namespace: "Org.OData.Aggregation.V1", uri: "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Aggregation.V1.xml" },
@@ -2029,7 +2030,7 @@ exports.VocabularyReferences = [
2029
2030
  /******/ // startup
2030
2031
  /******/ // Load entry module and return exports
2031
2032
  /******/ // This entry module is referenced by other modules so it can't be inlined
2032
- /******/ var __webpack_exports__ = __webpack_require__(144);
2033
+ /******/ var __webpack_exports__ = __webpack_require__(232);
2033
2034
  /******/ AnnotationConverter = __webpack_exports__;
2034
2035
  /******/
2035
2036
  /******/ })()
@@ -2037,4 +2038,4 @@ exports.VocabularyReferences = [
2037
2038
 
2038
2039
  return AnnotationConverter;
2039
2040
  },true);
2040
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Bbm5vdGF0aW9uQ29udmVydGVyL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2FwLXV4K2Fubm90YXRpb24tY29udmVydGVyQDAuOC4xL25vZGVfbW9kdWxlcy9Ac2FwLXV4L2Fubm90YXRpb24tY29udmVydGVyL3NyYy9jb252ZXJ0ZXIudHMiLCJ3ZWJwYWNrOi8vQW5ub3RhdGlvbkNvbnZlcnRlci9ub2RlX21vZHVsZXMvLnBucG0vQHNhcC11eCthbm5vdGF0aW9uLWNvbnZlcnRlckAwLjguMS9ub2RlX21vZHVsZXMvQHNhcC11eC9hbm5vdGF0aW9uLWNvbnZlcnRlci9zcmMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQW5ub3RhdGlvbkNvbnZlcnRlci9ub2RlX21vZHVsZXMvLnBucG0vQHNhcC11eCthbm5vdGF0aW9uLWNvbnZlcnRlckAwLjguMS9ub2RlX21vZHVsZXMvQHNhcC11eC9hbm5vdGF0aW9uLWNvbnZlcnRlci9zcmMvdXRpbHMudHMiLCJ3ZWJwYWNrOi8vQW5ub3RhdGlvbkNvbnZlcnRlci9ub2RlX21vZHVsZXMvLnBucG0vQHNhcC11eCthbm5vdGF0aW9uLWNvbnZlcnRlckAwLjguMS9ub2RlX21vZHVsZXMvQHNhcC11eC9hbm5vdGF0aW9uLWNvbnZlcnRlci9zcmMvd3JpdGViYWNrLnRzIiwid2VicGFjazovL0Fubm90YXRpb25Db252ZXJ0ZXIvbm9kZV9tb2R1bGVzLy5wbnBtL0BzYXAtdXgrdm9jYWJ1bGFyaWVzLXR5cGVzQDAuMTAuMS9ub2RlX21vZHVsZXMvQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0VudW1Jc0ZsYWcuanMiLCJ3ZWJwYWNrOi8vQW5ub3RhdGlvbkNvbnZlcnRlci9ub2RlX21vZHVsZXMvLnBucG0vQHNhcC11eCt2b2NhYnVsYXJpZXMtdHlwZXNAMC4xMC4xL25vZGVfbW9kdWxlcy9Ac2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVGVybVRvVHlwZXMuanMiLCJ3ZWJwYWNrOi8vQW5ub3RhdGlvbkNvbnZlcnRlci9ub2RlX21vZHVsZXMvLnBucG0vQHNhcC11eCt2b2NhYnVsYXJpZXMtdHlwZXNAMC4xMC4xL25vZGVfbW9kdWxlcy9Ac2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVm9jYWJ1bGFyeVJlZmVyZW5jZXMuanMiLCJ3ZWJwYWNrOi8vQW5ub3RhdGlvbkNvbnZlcnRlci93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9Bbm5vdGF0aW9uQ29udmVydGVyL3dlYnBhY2svc3RhcnR1cCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBeUNBLHdEQUFvRztBQUNwRyx5Q0FhaUI7QUFFakI7O0dBRUc7QUFDSCxNQUFNLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0FBRXREOzs7Ozs7R0FNRztBQUNILFNBQVMsZ0JBQWdCLENBQUMsVUFBaUIsRUFBRSxhQUFrQjtJQUMzRCxJQUFJLFVBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxLQUFLLGFBQWEsRUFBRTtRQUNyRCxVQUFVLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0tBQ2xDO0lBQ0QsT0FBTyxVQUFVLENBQUM7QUFDdEIsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsU0FBUyxhQUFhLENBQ2xCLFNBQW9CLEVBQ3BCLFlBQWlCLEVBQ2pCLElBQXdCLEVBQ3hCLGVBQXdCOztJQUV4QixJQUFJLElBQUksS0FBSyxTQUFTLEVBQUU7UUFDcEIsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLENBQUM7S0FDOUQ7SUFFRCxzREFBc0Q7SUFDdEQsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ3RCLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pC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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLHdDQUF3QyxtQkFBbUIsS0FBSzs7Ozs7Ozs7QUN2UXBEO0FBQ2IsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELDRCQUE0QjtBQUM1QjtBQUNBO0FBQ0E7QUFDQSw0QkFBNEI7QUFDNUIsTUFBTSwySkFBMko7QUFDakssTUFBTSx5SUFBeUk7QUFDL0ksTUFBTSxpS0FBaUs7QUFDdkssTUFBTSw4SkFBOEo7QUFDcEssTUFBTSwySkFBMko7QUFDakssTUFBTSxxSkFBcUo7QUFDM0osTUFBTSxnSkFBZ0o7QUFDdEosTUFBTSx1SUFBdUk7QUFDN0ksTUFBTSw2SUFBNkk7QUFDbkosTUFBTSw0SkFBNEo7QUFDbEssTUFBTSxnSkFBZ0o7QUFDdEosTUFBTSx5SkFBeUo7QUFDL0osTUFBTSwwSUFBMEk7QUFDaEosTUFBTSwySEFBMkg7QUFDakksTUFBTTtBQUNOOzs7Ozs7O1VDdEJBO1VBQ0E7O1VBRUE7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7O1VBRUE7VUFDQTs7VUFFQTtVQUNBO1VBQ0E7Ozs7VUN0QkE7VUFDQTtVQUNBO1VBQ0EiLCJmaWxlIjoiQW5ub3RhdGlvbkNvbnZlcnRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG4gICAgQWN0aW9uLFxuICAgIEFjdGlvbkltcG9ydCxcbiAgICBBY3Rpb25QYXJhbWV0ZXIsXG4gICAgQW5ub3RhdGlvbixcbiAgICBBbm5vdGF0aW9uUGF0aCxcbiAgICBBbm5vdGF0aW9uUmVjb3JkLFxuICAgIEFycmF5V2l0aEluZGV4LFxuICAgIEJhc2VOYXZpZ2F0aW9uUHJvcGVydHksXG4gICAgQ29tcGxleFR5cGUsXG4gICAgQ29udmVydGVkTWV0YWRhdGEsXG4gICAgRW50aXR5Q29udGFpbmVyLFxuICAgIEVudGl0eVNldCxcbiAgICBFbnRpdHlUeXBlLFxuICAgIEV4cHJlc3Npb24sXG4gICAgRnVsbHlRdWFsaWZpZWROYW1lLFxuICAgIE5hdmlnYXRpb25Qcm9wZXJ0eSxcbiAgICBOYXZpZ2F0aW9uUHJvcGVydHlQYXRoLFxuICAgIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbixcbiAgICBQcm9wZXJ0eSxcbiAgICBQcm9wZXJ0eVBhdGgsXG4gICAgUmF3QWN0aW9uLFxuICAgIFJhd0FjdGlvbkltcG9ydCxcbiAgICBSYXdBbm5vdGF0aW9uLFxuICAgIFJhd0NvbXBsZXhUeXBlLFxuICAgIFJhd0VudGl0eUNvbnRhaW5lcixcbiAgICBSYXdFbnRpdHlTZXQsXG4gICAgUmF3RW50aXR5VHlwZSxcbiAgICBSYXdNZXRhZGF0YSxcbiAgICBSYXdOYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nLFxuICAgIFJhd1Byb3BlcnR5LFxuICAgIFJhd1NjaGVtYSxcbiAgICBSYXdTaW5nbGV0b24sXG4gICAgUmF3VHlwZURlZmluaXRpb24sXG4gICAgUmF3VjJOYXZpZ2F0aW9uUHJvcGVydHksXG4gICAgUmF3VjROYXZpZ2F0aW9uUHJvcGVydHksXG4gICAgUmVtb3ZlQW5ub3RhdGlvbkFuZFR5cGUsXG4gICAgUmVzb2x1dGlvblRhcmdldCxcbiAgICBTaW5nbGV0b24sXG4gICAgVHlwZURlZmluaXRpb25cbn0gZnJvbSAnQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMnO1xuaW1wb3J0IHsgVm9jYWJ1bGFyeVJlZmVyZW5jZXMgfSBmcm9tICdAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVm9jYWJ1bGFyeVJlZmVyZW5jZXMnO1xuaW1wb3J0IHtcbiAgICBhZGRHZXRCeVZhbHVlLFxuICAgIGFsaWFzLFxuICAgIERlY2ltYWwsXG4gICAgRW51bUlzRmxhZyxcbiAgICBsYXp5LFxuICAgIG1lcmdlQW5ub3RhdGlvbnMsXG4gICAgc3BsaXRBdEZpcnN0LFxuICAgIHNwbGl0QXRMYXN0LFxuICAgIHN1YnN0cmluZ0JlZm9yZUZpcnN0LFxuICAgIHN1YnN0cmluZ0JlZm9yZUxhc3QsXG4gICAgVGVybVRvVHlwZXMsXG4gICAgdW5hbGlhc1xufSBmcm9tICcuL3V0aWxzJztcblxuLyoqXG4gKiBTeW1ib2wgdG8gZXh0ZW5kIGFuIGFubm90YXRpb24gd2l0aCB0aGUgcmVmZXJlbmNlIHRvIGl0cyB0YXJnZXQuXG4gKi9cbmNvbnN0IEFOTk9UQVRJT05fVEFSR0VUID0gU3ltYm9sKCdBbm5vdGF0aW9uIFRhcmdldCcpO1xuXG4vKipcbiAqIEFwcGVuZCBhbiBvYmplY3QgdG8gdGhlIGxpc3Qgb2YgdmlzaXRlZCBvYmplY3RzIGlmIGl0IGlzIGRpZmZlcmVudCBmcm9tIHRoZSBsYXN0IG9iamVjdCBpbiB0aGUgbGlzdC5cbiAqXG4gKiBAcGFyYW0gb2JqZWN0UGF0aCAgICBUaGUgbGlzdCBvZiB2aXNpdGVkIG9iamVjdHNcbiAqIEBwYXJhbSB2aXNpdGVkT2JqZWN0IFRoZSBvYmplY3RcbiAqIEByZXR1cm5zIFRoZSBsaXN0IG9mIHZpc2l0ZWQgb2JqZWN0c1xuICovXG5mdW5jdGlvbiBhcHBlbmRPYmplY3RQYXRoKG9iamVjdFBhdGg6IGFueVtdLCB2aXNpdGVkT2JqZWN0OiBhbnkpOiBhbnlbXSB7XG4gICAgaWYgKG9iamVjdFBhdGhbb2JqZWN0UGF0aC5sZW5ndGggLSAxXSAhPT0gdmlzaXRlZE9iamVjdCkge1xuICAgICAgICBvYmplY3RQYXRoLnB1c2godmlzaXRlZE9iamVjdCk7XG4gICAgfVxuICAgIHJldHVybiBvYmplY3RQYXRoO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIGEgKHBvc3NpYmx5IHJlbGF0aXZlKSBwYXRoLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXIgICAgICAgICBDb252ZXJ0ZXJcbiAqIEBwYXJhbSBzdGFydEVsZW1lbnQgICAgICBUaGUgc3RhcnRpbmcgcG9pbnQgaW4gY2FzZSBvZiByZWxhdGl2ZSBwYXRoIHJlc29sdXRpb25cbiAqIEBwYXJhbSBwYXRoICAgICAgICAgICAgICBUaGUgcGF0aCB0byByZXNvbHZlXG4gKiBAcGFyYW0gYW5ub3RhdGlvbnNUZXJtICAgT25seSBmb3IgZXJyb3IgcmVwb3J0aW5nOiBUaGUgYW5ub3RhdGlvbiB0ZXJtXG4gKiBAcmV0dXJucyBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgcmVzb2x2ZWQgdGFyZ2V0IGFuZCB0aGUgZWxlbWVudHMgdGhhdCB3ZXJlIHZpc2l0ZWQgd2hpbGUgZ2V0dGluZyB0byB0aGUgdGFyZ2V0LlxuICovXG5mdW5jdGlvbiByZXNvbHZlVGFyZ2V0PFQ+KFxuICAgIGNvbnZlcnRlcjogQ29udmVydGVyLFxuICAgIHN0YXJ0RWxlbWVudDogYW55LFxuICAgIHBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBhbm5vdGF0aW9uc1Rlcm0/OiBzdHJpbmdcbik6IFJlc29sdXRpb25UYXJnZXQ8VD4ge1xuICAgIGlmIChwYXRoID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHsgdGFyZ2V0OiB1bmRlZmluZWQsIG9iamVjdFBhdGg6IFtdLCBtZXNzYWdlczogW10gfTtcbiAgICB9XG5cbiAgICAvLyBhYnNvbHV0ZSBwYXRocyBhbHdheXMgc3RhcnQgYXQgdGhlIGVudGl0eSBjb250YWluZXJcbiAgICBpZiAocGF0aC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgICAgcGF0aCA9IHBhdGguc3Vic3RyaW5nKDEpO1xuICAgICAgICBzdGFydEVsZW1lbnQgPSB1bmRlZmluZWQ7IC8vIHdpbGwgcmVzb2x2ZSB0byB0aGUgZW50aXR5IGNvbnRhaW5lciAoc2VlIGJlbG93KVxuICAgIH1cblxuICAgIGNvbnN0IHBhdGhTZWdtZW50cyA9IHBhdGguc3BsaXQoJy8nKS5yZWR1Y2UoKHRhcmdldFBhdGgsIHNlZ21lbnQpID0+IHtcbiAgICAgICAgaWYgKHNlZ21lbnQuaW5jbHVkZXMoJ0AnKSkge1xuICAgICAgICAgICAgLy8gU2VwYXJhdGUgb3V0IHRoZSBhbm5vdGF0aW9uXG4gICAgICAgICAgICBjb25zdCBbcGF0aFBhcnQsIGFubm90YXRpb25QYXJ0XSA9IHNwbGl0QXRGaXJzdChzZWdtZW50LCAnQCcpO1xuICAgICAgICAgICAgdGFyZ2V0UGF0aC5wdXNoKHBhdGhQYXJ0KTtcbiAgICAgICAgICAgIHRhcmdldFBhdGgucHVzaChgQCR7YW5ub3RhdGlvblBhcnR9YCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0YXJnZXRQYXRoLnB1c2goc2VnbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRhcmdldFBhdGg7XG4gICAgfSwgW10gYXMgc3RyaW5nW10pO1xuXG4gICAgLy8gZGV0ZXJtaW5lIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdGhlIHJlc29sdXRpb25cbiAgICBpZiAoc3RhcnRFbGVtZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gbm8gc3RhcnRpbmcgcG9pbnQgZ2l2ZW46IHN0YXJ0IGF0IHRoZSBlbnRpdHkgY29udGFpbmVyXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHBhdGhTZWdtZW50c1swXS5zdGFydHNXaXRoKGAke2NvbnZlcnRlci5yYXdTY2hlbWEubmFtZXNwYWNlfS5gKSAmJlxuICAgICAgICAgICAgcGF0aFNlZ21lbnRzWzBdICE9PSBjb252ZXJ0ZXIuZ2V0Q29udmVydGVkRW50aXR5Q29udGFpbmVyKCk/LmZ1bGx5UXVhbGlmaWVkTmFtZVxuICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIFdlIGhhdmUgYSBmdWxseSBxdWFsaWZpZWQgbmFtZSBpbiB0aGUgcGF0aCB0aGF0IGlzIG5vdCB0aGUgZW50aXR5IGNvbnRhaW5lci5cbiAgICAgICAgICAgIHN0YXJ0RWxlbWVudCA9XG4gICAgICAgICAgICAgICAgY29udmVydGVyLmdldENvbnZlcnRlZEVudGl0eVR5cGUocGF0aFNlZ21lbnRzWzBdKSA/P1xuICAgICAgICAgICAgICAgIGNvbnZlcnRlci5nZXRDb252ZXJ0ZWRDb21wbGV4VHlwZShwYXRoU2VnbWVudHNbMF0pID8/XG4gICAgICAgICAgICAgICAgY29udmVydGVyLmdldENvbnZlcnRlZEFjdGlvbihwYXRoU2VnbWVudHNbMF0pO1xuICAgICAgICAgICAgcGF0aFNlZ21lbnRzLnNoaWZ0KCk7IC8vIExldCdzIHJlbW92ZSB0aGUgZmlyc3QgcGF0aCBlbGVtZW50XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdGFydEVsZW1lbnQgPSBjb252ZXJ0ZXIuZ2V0Q29udmVydGVkRW50aXR5Q29udGFpbmVyKCk7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHN0YXJ0RWxlbWVudFtBTk5PVEFUSU9OX1RBUkdFVF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBhbm5vdGF0aW9uOiBzdGFydCBhdCB0aGUgYW5ub3RhdGlvbiB0YXJnZXRcbiAgICAgICAgc3RhcnRFbGVtZW50ID0gc3RhcnRFbGVtZW50W0FOTk9UQVRJT05fVEFSR0VUXTtcbiAgICB9IGVsc2UgaWYgKHN0YXJ0RWxlbWVudC5fdHlwZSA9PT0gJ1Byb3BlcnR5Jykge1xuICAgICAgICAvLyBwcm9wZXJ0eTogc3RhcnQgYXQgdGhlIGVudGl0eSB0eXBlIG9yIGNvbXBsZXggdHlwZSB0aGUgcHJvcGVydHkgYmVsb25ncyB0b1xuICAgICAgICBjb25zdCBwYXJlbnRFbGVtZW50RlFOID0gc3Vic3RyaW5nQmVmb3JlRmlyc3Qoc3RhcnRFbGVtZW50LmZ1bGx5UXVhbGlmaWVkTmFtZSwgJy8nKTtcbiAgICAgICAgc3RhcnRFbGVtZW50ID1cbiAgICAgICAgICAgIGNvbnZlcnRlci5nZXRDb252ZXJ0ZWRFbnRpdHlUeXBlKHBhcmVudEVsZW1lbnRGUU4pID8/IGNvbnZlcnRlci5nZXRDb252ZXJ0ZWRDb21wbGV4VHlwZShwYXJlbnRFbGVtZW50RlFOKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBwYXRoU2VnbWVudHMucmVkdWNlKFxuICAgICAgICAoY3VycmVudDogUmVzb2x1dGlvblRhcmdldDxhbnk+LCBzZWdtZW50OiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yID0gKG1lc3NhZ2U6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgIGN1cnJlbnQubWVzc2FnZXMucHVzaCh7IG1lc3NhZ2UgfSk7XG4gICAgICAgICAgICAgICAgY3VycmVudC50YXJnZXQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBpZiAoY3VycmVudC50YXJnZXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjdXJyZW50Lm9iamVjdFBhdGggPSBhcHBlbmRPYmplY3RQYXRoKGN1cnJlbnQub2JqZWN0UGF0aCwgY3VycmVudC50YXJnZXQpO1xuXG4gICAgICAgICAgICAvLyBBbm5vdGF0aW9uXG4gICAgICAgICAgICBpZiAoc2VnbWVudC5zdGFydHNXaXRoKCdAJykgJiYgc2VnbWVudCAhPT0gJ0AkdWk1Lm92ZXJsb2FkJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IFt2b2NhYnVsYXJ5QWxpYXMsIHRlcm1dID0gY29udmVydGVyLnNwbGl0VGVybShzZWdtZW50KTtcbiAgICAgICAgICAgICAgICBjb25zdCBhbm5vdGF0aW9uID0gY3VycmVudC50YXJnZXQuYW5ub3RhdGlvbnNbdm9jYWJ1bGFyeUFsaWFzLnN1YnN0cmluZygxKV0/Llt0ZXJtXTtcblxuICAgICAgICAgICAgICAgIGlmIChhbm5vdGF0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudC50YXJnZXQgPSBhbm5vdGF0aW9uO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKFxuICAgICAgICAgICAgICAgICAgICBgQW5ub3RhdGlvbiAnJHtzZWdtZW50LnN1YnN0cmluZygxKX0nIG5vdCBmb3VuZCBvbiAke2N1cnJlbnQudGFyZ2V0Ll90eXBlfSAnJHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQudGFyZ2V0LmZ1bGx5UXVhbGlmaWVkTmFtZVxuICAgICAgICAgICAgICAgICAgICB9J2BcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyAkUGF0aCAvICRBbm5vdGF0aW9uUGF0aCBzeW50YXhcbiAgICAgICAgICAgIGlmIChjdXJyZW50LnRhcmdldC4kdGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgbGV0IHN1YlBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBpZiAoc2VnbWVudCA9PT0gJyRBbm5vdGF0aW9uUGF0aCcpIHtcbiAgICAgICAgICAgICAgICAgICAgc3ViUGF0aCA9IGN1cnJlbnQudGFyZ2V0LnZhbHVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc2VnbWVudCA9PT0gJyRQYXRoJykge1xuICAgICAgICAgICAgICAgICAgICBzdWJQYXRoID0gY3VycmVudC50YXJnZXQucGF0aDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoc3ViUGF0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN1YlRhcmdldCA9IHJlc29sdmVUYXJnZXQoY29udmVydGVyLCBjdXJyZW50LnRhcmdldFtBTk5PVEFUSU9OX1RBUkdFVF0sIHN1YlBhdGgpO1xuICAgICAgICAgICAgICAgICAgICBzdWJUYXJnZXQub2JqZWN0UGF0aC5mb3JFYWNoKCh2aXNpdGVkU3ViT2JqZWN0OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY3VycmVudC5vYmplY3RQYXRoLmluY2x1ZGVzKHZpc2l0ZWRTdWJPYmplY3QpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC5vYmplY3RQYXRoID0gYXBwZW5kT2JqZWN0UGF0aChjdXJyZW50Lm9iamVjdFBhdGgsIHZpc2l0ZWRTdWJPYmplY3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50LnRhcmdldCA9IHN1YlRhcmdldC50YXJnZXQ7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnQub2JqZWN0UGF0aCA9IGFwcGVuZE9iamVjdFBhdGgoY3VycmVudC5vYmplY3RQYXRoLCBjdXJyZW50LnRhcmdldCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gdHJhdmVyc2UgYmFzZWQgb24gdGhlIGVsZW1lbnQgdHlwZVxuICAgICAgICAgICAgc3dpdGNoIChjdXJyZW50LnRhcmdldD8uX3R5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdTY2hlbWEnOlxuICAgICAgICAgICAgICAgICAgICAvLyBuZXh0IGVsZW1lbnQ6IEVudGl0eVR5cGUsIENvbXBsZXhUeXBlLCBBY3Rpb24sIEVudGl0eUNvbnRhaW5lciA/XG5cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnRW50aXR5Q29udGFpbmVyJzpcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGhpc0VsZW1lbnQgPSBjdXJyZW50LnRhcmdldCBhcyBFbnRpdHlDb250YWluZXI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWdtZW50ID09PSAnJyB8fCBjb252ZXJ0ZXIudW5hbGlhcyhzZWdtZW50KSA9PT0gdGhpc0VsZW1lbnQuZnVsbHlRdWFsaWZpZWROYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5leHQgZWxlbWVudDogRW50aXR5U2V0LCBTaW5nbGV0b24gb3IgQWN0aW9uSW1wb3J0P1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dEVsZW1lbnQ6IEVudGl0eVNldCB8IFNpbmdsZXRvbiB8IEFjdGlvbkltcG9ydCB8IHVuZGVmaW5lZCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc0VsZW1lbnQuZW50aXR5U2V0cy5ieV9uYW1lKHNlZ21lbnQpID8/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc0VsZW1lbnQuc2luZ2xldG9ucy5ieV9uYW1lKHNlZ21lbnQpID8/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc0VsZW1lbnQuYWN0aW9uSW1wb3J0cy5ieV9uYW1lKHNlZ21lbnQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV4dEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LnRhcmdldCA9IG5leHRFbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnRW50aXR5U2V0JzpcbiAgICAgICAgICAgICAgICBjYXNlICdTaW5nbGV0b24nOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRoaXNFbGVtZW50ID0gY3VycmVudC50YXJnZXQgYXMgRW50aXR5U2V0IHwgU2luZ2xldG9uO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWdtZW50ID09PSAnJyB8fCBzZWdtZW50ID09PSAnJFR5cGUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBFbXB0eSBQYXRoIGFmdGVyIGFuIEVudGl0eVNldCBvciBTaW5nbGV0b24gbWVhbnMgRW50aXR5VHlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC50YXJnZXQgPSB0aGlzRWxlbWVudC5lbnRpdHlUeXBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoc2VnbWVudCA9PT0gJyQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWdtZW50ID09PSAnJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5ncyA9IHRoaXNFbGVtZW50Lm5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LnRhcmdldCA9IG5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdzO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBjb250aW51ZSByZXNvbHZpbmcgYXQgdGhlIEVudGl0eVNldCdzIG9yIFNpbmdsZXRvbidzIHR5cGVcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcmVzb2x2ZVRhcmdldChjb252ZXJ0ZXIsIHRoaXNFbGVtZW50LmVudGl0eVR5cGUsIHNlZ21lbnQpO1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50LnRhcmdldCA9IHJlc3VsdC50YXJnZXQ7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnQub2JqZWN0UGF0aCA9IHJlc3VsdC5vYmplY3RQYXRoLnJlZHVjZShhcHBlbmRPYmplY3RQYXRoLCBjdXJyZW50Lm9iamVjdFBhdGgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjYXNlICdFbnRpdHlUeXBlJzpcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGhpc0VsZW1lbnQgPSBjdXJyZW50LnRhcmdldCBhcyBFbnRpdHlUeXBlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VnbWVudCA9PT0gJycgfHwgc2VnbWVudCA9PT0gJyRUeXBlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcm9wZXJ0eSA9IHRoaXNFbGVtZW50LmVudGl0eVByb3BlcnRpZXMuYnlfbmFtZShzZWdtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQudGFyZ2V0ID0gcHJvcGVydHk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5hdmlnYXRpb25Qcm9wZXJ0eSA9IHRoaXNFbGVtZW50Lm5hdmlnYXRpb25Qcm9wZXJ0aWVzLmJ5X25hbWUoc2VnbWVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmF2aWdhdGlvblByb3BlcnR5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC50YXJnZXQgPSBuYXZpZ2F0aW9uUHJvcGVydHk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFjdGlvbk5hbWUgPSBzdWJzdHJpbmdCZWZvcmVGaXJzdChjb252ZXJ0ZXIudW5hbGlhcyhzZWdtZW50KSwgJygnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFjdGlvbiA9IHRoaXNFbGVtZW50LmFjdGlvbnNbYWN0aW9uTmFtZV07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC50YXJnZXQgPSBhY3Rpb247XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlICdBY3Rpb25JbXBvcnQnOiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnRpbnVlIHJlc29sdmluZyBhdCB0aGUgQWN0aW9uXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc29sdmVUYXJnZXQoY29udmVydGVyLCBjdXJyZW50LnRhcmdldC5hY3Rpb24sIHNlZ21lbnQpO1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50LnRhcmdldCA9IHJlc3VsdC50YXJnZXQ7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnQub2JqZWN0UGF0aCA9IHJlc3VsdC5vYmplY3RQYXRoLnJlZHVjZShhcHBlbmRPYmplY3RQYXRoLCBjdXJyZW50Lm9iamVjdFBhdGgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjYXNlICdBY3Rpb24nOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRoaXNFbGVtZW50ID0gY3VycmVudC50YXJnZXQgYXMgQWN0aW9uO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWdtZW50ID09PSAnJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoc2VnbWVudCA9PT0gJ0AkdWk1Lm92ZXJsb2FkJyB8fCBzZWdtZW50ID09PSAnMCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlZ21lbnQgPT09ICckUGFyYW1ldGVyJyAmJiB0aGlzRWxlbWVudC5pc0JvdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LnRhcmdldCA9IHRoaXNFbGVtZW50LnBhcmFtZXRlcnM7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRFbGVtZW50ID1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNFbGVtZW50LnBhcmFtZXRlcnNbc2VnbWVudCBhcyBhbnldID8/XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzRWxlbWVudC5wYXJhbWV0ZXJzLmZpbmQoKHBhcmFtOiBBY3Rpb25QYXJhbWV0ZXIpID0+IHBhcmFtLm5hbWUgPT09IHNlZ21lbnQpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0RWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC50YXJnZXQgPSBuZXh0RWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNhc2UgJ1Byb3BlcnR5JzpcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGhpc0VsZW1lbnQgPSBjdXJyZW50LnRhcmdldCBhcyBQcm9wZXJ0eTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHJvcGVydHkgb3IgTmF2aWdhdGlvblByb3BlcnR5IG9mIHRoZSBDb21wbGV4VHlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdHlwZSA9IHRoaXNFbGVtZW50LnRhcmdldFR5cGUgYXMgQ29tcGxleFR5cGUgfCB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJvcGVydHkgPSB0eXBlLnByb3BlcnRpZXMuYnlfbmFtZShzZWdtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC50YXJnZXQgPSBwcm9wZXJ0eTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmF2aWdhdGlvblByb3BlcnR5ID0gdHlwZS5uYXZpZ2F0aW9uUHJvcGVydGllcy5ieV9uYW1lKHNlZ21lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYXZpZ2F0aW9uUHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC50YXJnZXQgPSBuYXZpZ2F0aW9uUHJvcGVydHk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgJ0FjdGlvblBhcmFtZXRlcic6XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZmVyZW5jZWRUeXBlID0gKGN1cnJlbnQudGFyZ2V0IGFzIEFjdGlvblBhcmFtZXRlcikudHlwZVJlZmVyZW5jZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlZmVyZW5jZWRUeXBlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc29sdmVUYXJnZXQoY29udmVydGVyLCByZWZlcmVuY2VkVHlwZSwgc2VnbWVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LnRhcmdldCA9IHJlc3VsdC50YXJnZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Lm9iamVjdFBhdGggPSByZXN1bHQub2JqZWN0UGF0aC5yZWR1Y2UoYXBwZW5kT2JqZWN0UGF0aCwgY3VycmVudC5vYmplY3RQYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnTmF2aWdhdGlvblByb3BlcnR5JzpcbiAgICAgICAgICAgICAgICAgICAgLy8gY29udGludWUgYXQgdGhlIE5hdmlnYXRpb25Qcm9wZXJ0eSdzIHRhcmdldCB0eXBlXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc29sdmVUYXJnZXQoY29udmVydGVyLCAoY3VycmVudC50YXJnZXQgYXMgTmF2aWdhdGlvblByb3BlcnR5KS50YXJnZXRUeXBlLCBzZWdtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudC50YXJnZXQgPSByZXN1bHQudGFyZ2V0O1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50Lm9iamVjdFBhdGggPSByZXN1bHQub2JqZWN0UGF0aC5yZWR1Y2UoYXBwZW5kT2JqZWN0UGF0aCwgY3VycmVudC5vYmplY3RQYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG5cbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBpZiAoc2VnbWVudCA9PT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQudGFyZ2V0W3NlZ21lbnRdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LnRhcmdldCA9IGN1cnJlbnQudGFyZ2V0W3NlZ21lbnRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC5vYmplY3RQYXRoID0gYXBwZW5kT2JqZWN0UGF0aChjdXJyZW50Lm9iamVjdFBhdGgsIGN1cnJlbnQudGFyZ2V0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBlcnJvcihcbiAgICAgICAgICAgICAgICBgRWxlbWVudCAnJHtzZWdtZW50fScgbm90IGZvdW5kIGF0ICR7Y3VycmVudC50YXJnZXQuX3R5cGV9ICcke2N1cnJlbnQudGFyZ2V0LmZ1bGx5UXVhbGlmaWVkTmFtZX0nYFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSxcbiAgICAgICAgeyB0YXJnZXQ6IHN0YXJ0RWxlbWVudCwgb2JqZWN0UGF0aDogW10sIG1lc3NhZ2VzOiBbXSB9XG4gICAgKTtcblxuICAgIC8vIERpYWdub3N0aWNzXG4gICAgcmVzdWx0Lm1lc3NhZ2VzLmZvckVhY2goKG1lc3NhZ2UpID0+IGNvbnZlcnRlci5sb2dFcnJvcihtZXNzYWdlLm1lc3NhZ2UpKTtcbiAgICBpZiAoIXJlc3VsdC50YXJnZXQpIHtcbiAgICAgICAgaWYgKGFubm90YXRpb25zVGVybSkge1xuICAgICAgICAgICAgY29uc3QgYW5ub3RhdGlvblR5cGUgPSBpbmZlclR5cGVGcm9tVGVybShjb252ZXJ0ZXIsIGFubm90YXRpb25zVGVybSwgc3RhcnRFbGVtZW50LmZ1bGx5UXVhbGlmaWVkTmFtZSk7XG4gICAgICAgICAgICBjb252ZXJ0ZXIubG9nRXJyb3IoXG4gICAgICAgICAgICAgICAgJ1VuYWJsZSB0byByZXNvbHZlIHRoZSBwYXRoIGV4cHJlc3Npb246ICcgK1xuICAgICAgICAgICAgICAgICAgICAnXFxuJyArXG4gICAgICAgICAgICAgICAgICAgIHBhdGggK1xuICAgICAgICAgICAgICAgICAgICAnXFxuJyArXG4gICAgICAgICAgICAgICAgICAgICdcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgJ0hpbnQ6IENoZWNrIGFuZCBjb3JyZWN0IHRoZSBwYXRoIHZhbHVlcyB1bmRlciB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZSBpbiB0aGUgbWV0YWRhdGEgKGFubm90YXRpb24ueG1sIGZpbGUgb3IgQ0RTIGFubm90YXRpb25zIGZvciB0aGUgYXBwbGljYXRpb24pOiBcXG5cXG4nICtcbiAgICAgICAgICAgICAgICAgICAgJzxBbm5vdGF0aW9uIFRlcm0gPSAnICtcbiAgICAgICAgICAgICAgICAgICAgYW5ub3RhdGlvbnNUZXJtICtcbiAgICAgICAgICAgICAgICAgICAgJz4nICtcbiAgICAgICAgICAgICAgICAgICAgJ1xcbicgK1xuICAgICAgICAgICAgICAgICAgICAnPFJlY29yZCBUeXBlID0gJyArXG4gICAgICAgICAgICAgICAgICAgIGFubm90YXRpb25UeXBlICtcbiAgICAgICAgICAgICAgICAgICAgJz4nICtcbiAgICAgICAgICAgICAgICAgICAgJ1xcbicgK1xuICAgICAgICAgICAgICAgICAgICAnPEFubm90YXRpb25QYXRoID0gJyArXG4gICAgICAgICAgICAgICAgICAgIHBhdGggK1xuICAgICAgICAgICAgICAgICAgICAnPidcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb252ZXJ0ZXIubG9nRXJyb3IoXG4gICAgICAgICAgICAgICAgJ1VuYWJsZSB0byByZXNvbHZlIHRoZSBwYXRoIGV4cHJlc3Npb246ICcgK1xuICAgICAgICAgICAgICAgICAgICBwYXRoICtcbiAgICAgICAgICAgICAgICAgICAgJ1xcbicgK1xuICAgICAgICAgICAgICAgICAgICAnXFxuJyArXG4gICAgICAgICAgICAgICAgICAgICdIaW50OiBDaGVjayBhbmQgY29ycmVjdCB0aGUgcGF0aCB2YWx1ZXMgdW5kZXIgdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUgaW4gdGhlIG1ldGFkYXRhIChhbm5vdGF0aW9uLnhtbCBmaWxlIG9yIENEUyBhbm5vdGF0aW9ucyBmb3IgdGhlIGFwcGxpY2F0aW9uKTogXFxuXFxuJyArXG4gICAgICAgICAgICAgICAgICAgICc8QW5ub3RhdGlvbiBUZXJtID0gJyArXG4gICAgICAgICAgICAgICAgICAgIHBhdGhTZWdtZW50c1swXSArXG4gICAgICAgICAgICAgICAgICAgICc+JyArXG4gICAgICAgICAgICAgICAgICAgICdcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgJzxQcm9wZXJ0eVZhbHVlICBQYXRoPSAnICtcbiAgICAgICAgICAgICAgICAgICAgcGF0aFNlZ21lbnRzWzFdICtcbiAgICAgICAgICAgICAgICAgICAgJz4nXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBUeXBlZ3VhcmQgdG8gY2hlY2sgaWYgdGhlIHBhdGggY29udGFpbnMgYW4gYW5ub3RhdGlvbi5cbiAqXG4gKiBAcGFyYW0gcGF0aFN0ciB0aGUgcGF0aCB0byBldmFsdWF0ZVxuICogQHJldHVybnMgdHJ1ZSBpZiB0aGVyZSBpcyBhbiBhbm5vdGF0aW9uIGluIHRoZSBwYXRoLlxuICovXG5mdW5jdGlvbiBpc0Fubm90YXRpb25QYXRoKHBhdGhTdHI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBwYXRoU3RyLmluY2x1ZGVzKCdAJyk7XG59XG5cbnR5cGUgQW5ub3RhdGlvblZhbHVlPFQ+ID0gVCAmIHsgW0FOTk9UQVRJT05fVEFSR0VUXTogYW55IH07XG5cbmZ1bmN0aW9uIG1hcFByb3BlcnR5UGF0aChcbiAgICBjb252ZXJ0ZXI6IENvbnZlcnRlcixcbiAgICBwcm9wZXJ0eVBhdGg6IHsgdHlwZTogJ1Byb3BlcnR5UGF0aCc7IFByb3BlcnR5UGF0aDogc3RyaW5nIH0sXG4gICAgZnVsbHlRdWFsaWZpZWROYW1lOiBGdWxseVF1YWxpZmllZE5hbWUsXG4gICAgY3VycmVudFRhcmdldDogYW55LFxuICAgIGN1cnJlbnRUZXJtOiBzdHJpbmdcbikge1xuICAgIGNvbnN0IHJlc3VsdDogT21pdDxBbm5vdGF0aW9uVmFsdWU8UHJvcGVydHlQYXRoPiwgJyR0YXJnZXQnPiA9IHtcbiAgICAgICAgdHlwZTogJ1Byb3BlcnR5UGF0aCcsXG4gICAgICAgIHZhbHVlOiBwcm9wZXJ0eVBhdGguUHJvcGVydHlQYXRoLFxuICAgICAgICBmdWxseVF1YWxpZmllZE5hbWU6IGZ1bGx5UXVhbGlmaWVkTmFtZSxcbiAgICAgICAgW0FOTk9UQVRJT05fVEFSR0VUXTogY3VycmVudFRhcmdldFxuICAgIH07XG5cbiAgICBsYXp5KFxuICAgICAgICByZXN1bHQgYXMgQW5ub3RhdGlvblZhbHVlPFByb3BlcnR5UGF0aD4sXG4gICAgICAgICckdGFyZ2V0JyxcbiAgICAgICAgKCkgPT4gcmVzb2x2ZVRhcmdldDxQcm9wZXJ0eT4oY29udmVydGVyLCBjdXJyZW50VGFyZ2V0LCBwcm9wZXJ0eVBhdGguUHJvcGVydHlQYXRoLCBjdXJyZW50VGVybSkudGFyZ2V0XG4gICAgKTtcblxuICAgIHJldHVybiByZXN1bHQgYXMgQW5ub3RhdGlvblZhbHVlPFByb3BlcnR5UGF0aD47XG59XG5cbmZ1bmN0aW9uIG1hcEFubm90YXRpb25QYXRoKFxuICAgIGNvbnZlcnRlcjogQ29udmVydGVyLFxuICAgIGFubm90YXRpb25QYXRoOiB7IHR5cGU6ICdBbm5vdGF0aW9uUGF0aCc7IEFubm90YXRpb25QYXRoOiBzdHJpbmcgfSxcbiAgICBmdWxseVF1YWxpZmllZE5hbWU6IEZ1bGx5UXVhbGlmaWVkTmFtZSxcbiAgICBjdXJyZW50VGFyZ2V0OiBhbnksXG4gICAgY3VycmVudFRlcm06IHN0cmluZ1xuKSB7XG4gICAgY29uc3QgcmVzdWx0OiBPbWl0PEFubm90YXRpb25WYWx1ZTxBbm5vdGF0aW9uUGF0aDxhbnk+PiwgJyR0YXJnZXQnPiA9IHtcbiAgICAgICAgdHlwZTogJ0Fubm90YXRpb25QYXRoJyxcbiAgICAgICAgdmFsdWU6IGNvbnZlcnRlci51bmFsaWFzKGFubm90YXRpb25QYXRoLkFubm90YXRpb25QYXRoKSxcbiAgICAgICAgZnVsbHlRdWFsaWZpZWROYW1lOiBmdWxseVF1YWxpZmllZE5hbWUsXG4gICAgICAgIFtBTk5PVEFUSU9OX1RBUkdFVF06IGN1cnJlbnRUYXJnZXRcbiAgICB9O1xuXG4gICAgbGF6eShcbiAgICAgICAgcmVzdWx0IGFzIEFubm90YXRpb25WYWx1ZTxBbm5vdGF0aW9uUGF0aDxhbnk+PixcbiAgICAgICAgJyR0YXJnZXQnLFxuICAgICAgICAoKSA9PiByZXNvbHZlVGFyZ2V0KGNvbnZlcnRlciwgY3VycmVudFRhcmdldCwgcmVzdWx0LnZhbHVlLCBjdXJyZW50VGVybSkudGFyZ2V0XG4gICAgKTtcblxuICAgIHJldHVybiByZXN1bHQgYXMgQW5ub3RhdGlvblZhbHVlPEFubm90YXRpb25QYXRoPGFueT4+O1xufVxuXG5mdW5jdGlvbiBtYXBOYXZpZ2F0aW9uUHJvcGVydHlQYXRoKFxuICAgIGNvbnZlcnRlcjogQ29udmVydGVyLFxuICAgIG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg6IHsgdHlwZTogJ05hdmlnYXRpb25Qcm9wZXJ0eVBhdGgnOyBOYXZpZ2F0aW9uUHJvcGVydHlQYXRoOiBzdHJpbmcgfSxcbiAgICBmdWxseVF1YWxpZmllZE5hbWU6IEZ1bGx5UXVhbGlmaWVkTmFtZSxcbiAgICBjdXJyZW50VGFyZ2V0OiBhbnksXG4gICAgY3VycmVudFRlcm06IHN0cmluZ1xuKSB7XG4gICAgY29uc3QgcmVzdWx0OiBPbWl0PEFubm90YXRpb25WYWx1ZTxOYXZpZ2F0aW9uUHJvcGVydHlQYXRoPiwgJyR0YXJnZXQnPiA9IHtcbiAgICAgICAgdHlwZTogJ05hdmlnYXRpb25Qcm9wZXJ0eVBhdGgnLFxuICAgICAgICB2YWx1ZTogbmF2aWdhdGlvblByb3BlcnR5UGF0aC5OYXZpZ2F0aW9uUHJvcGVydHlQYXRoID8/ICcnLFxuICAgICAgICBmdWxseVF1YWxpZmllZE5hbWU6IGZ1bGx5UXVhbGlmaWVkTmFtZSxcbiAgICAgICAgW0FOTk9UQVRJT05fVEFSR0VUXTogY3VycmVudFRhcmdldFxuICAgIH07XG5cbiAgICBsYXp5KFxuICAgICAgICByZXN1bHQgYXMgQW5ub3RhdGlvblZhbHVlPE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg+LFxuICAgICAgICAnJHRhcmdldCcsXG4gICAgICAgICgpID0+XG4gICAgICAgICAgICByZXNvbHZlVGFyZ2V0PE5hdmlnYXRpb25Qcm9wZXJ0eT4oXG4gICAgICAgICAgICAgICAgY29udmVydGVyLFxuICAgICAgICAgICAgICAgIGN1cnJlbnRUYXJnZXQsXG4gICAgICAgICAgICAgICAgbmF2aWdhdGlvblByb3BlcnR5UGF0aC5OYXZpZ2F0aW9uUHJvcGVydHlQYXRoLFxuICAgICAgICAgICAgICAgIGN1cnJlbnRUZXJtXG4gICAgICAgICAgICApLnRhcmdldFxuICAgICk7XG5cbiAgICByZXR1cm4gcmVzdWx0IGFzIEFubm90YXRpb25WYWx1ZTxOYXZpZ2F0aW9uUHJvcGVydHlQYXRoPjtcbn1cblxuZnVuY3Rpb24gbWFwUGF0aChcbiAgICBjb252ZXJ0ZXI6IENvbnZlcnRlcixcbiAgICBwYXRoOiB7IHR5cGU6ICdQYXRoJzsgUGF0aDogc3RyaW5nIH0sXG4gICAgZnVsbHlRdWFsaWZpZWROYW1lOiBGdWxseVF1YWxpZmllZE5hbWUsXG4gICAgY3VycmVudFRhcmdldDogYW55LFxuICAgIGN1cnJlbnRUZXJtOiBzdHJpbmdcbikge1xuICAgIGNvbnN0IHJlc3VsdDogT21pdDxBbm5vdGF0aW9uVmFsdWU8UGF0aEFubm90YXRpb25FeHByZXNzaW9uPGFueT4+LCAnJHRhcmdldCc+ID0ge1xuICAgICAgICB0eXBlOiAnUGF0aCcsXG4gICAgICAgIHBhdGg6IHBhdGguUGF0aCxcbiAgICAgICAgZnVsbHlRdWFsaWZpZWROYW1lOiBmdWxseVF1YWxpZmllZE5hbWUsXG4gICAgICAgIGdldFZhbHVlKCk6IGFueSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkOyAvLyBUT0RPOiBSZXF1aXJlZCBhY2NvcmRpbmcgdG8gdGhlIHR5cGUuLi5cbiAgICAgICAgfSxcbiAgICAgICAgW0FOTk9UQVRJT05fVEFSR0VUXTogY3VycmVudFRhcmdldFxuICAgIH07XG5cbiAgICBsYXp5KFxuICAgICAgICByZXN1bHQgYXMgQW5ub3RhdGlvblZhbHVlPFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxhbnk+PixcbiAgICAgICAgJyR0YXJnZXQnLFxuICAgICAgICAoKSA9PiByZXNvbHZlVGFyZ2V0PFByb3BlcnR5Pihjb252ZXJ0ZXIsIGN1cnJlbnRUYXJnZXQsIHBhdGguUGF0aCwgY3VycmVudFRlcm0pLnRhcmdldFxuICAgICk7XG5cbiAgICByZXR1cm4gcmVzdWx0IGFzIEFubm90YXRpb25WYWx1ZTxQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb248YW55Pj47XG59XG5cbmZ1bmN0aW9uIHBhcnNlVmFsdWUoXG4gICAgY29udmVydGVyOiBDb252ZXJ0ZXIsXG4gICAgY3VycmVudFRhcmdldDogYW55LFxuICAgIGN1cnJlbnRUZXJtOiBzdHJpbmcsXG4gICAgY3VycmVudFByb3BlcnR5OiBzdHJpbmcsXG4gICAgY3VycmVudFNvdXJjZTogc3RyaW5nLFxuICAgIHByb3BlcnR5VmFsdWU6IEV4cHJlc3Npb24sXG4gICAgdmFsdWVGUU46IHN0cmluZ1xuKSB7XG4gICAgaWYgKHByb3BlcnR5VmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBzd2l0Y2ggKHByb3BlcnR5VmFsdWUudHlwZSkge1xuICAgICAgICBjYXNlICdTdHJpbmcnOlxuICAgICAgICAgICAgcmV0dXJuIHByb3BlcnR5VmFsdWUuU3RyaW5nO1xuICAgICAgICBjYXNlICdJbnQnOlxuICAgICAgICAgICAgcmV0dXJuIHByb3BlcnR5VmFsdWUuSW50O1xuICAgICAgICBjYXNlICdCb29sJzpcbiAgICAgICAgICAgIHJldHVybiBwcm9wZXJ0eVZhbHVlLkJvb2w7XG4gICAgICAgIGNhc2UgJ0RlY2ltYWwnOlxuICAgICAgICAgICAgcmV0dXJuIERlY2ltYWwocHJvcGVydHlWYWx1ZS5EZWNpbWFsKTtcbiAgICAgICAgY2FzZSAnRGF0ZSc6XG4gICAgICAgICAgICByZXR1cm4gcHJvcGVydHlWYWx1ZS5EYXRlO1xuICAgICAgICBjYXNlICdFbnVtTWVtYmVyJzpcbiAgICAgICAgICAgIGNvbnN0IHNwbGl0RW51bSA9IHByb3BlcnR5VmFsdWUuRW51bU1lbWJlci5zcGxpdCgnICcpLm1hcCgoZW51bVZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdW5hbGlhc2VkID0gY29udmVydGVyLnVuYWxpYXMoZW51bVZhbHVlKSA/PyAnJztcbiAgICAgICAgICAgICAgICByZXR1cm4gYWxpYXMoVm9jYWJ1bGFyeVJlZmVyZW5jZXMsIHVuYWxpYXNlZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChzcGxpdEVudW1bMF0gIT09IHVuZGVmaW5lZCAmJiBFbnVtSXNGbGFnW3N1YnN0cmluZ0JlZm9yZUZpcnN0KHNwbGl0RW51bVswXSwgJy8nKV0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3BsaXRFbnVtO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHNwbGl0RW51bVswXTtcblxuICAgICAgICBjYXNlICdQcm9wZXJ0eVBhdGgnOlxuICAgICAgICAgICAgcmV0dXJuIG1hcFByb3BlcnR5UGF0aChjb252ZXJ0ZXIsIHByb3BlcnR5VmFsdWUsIHZhbHVlRlFOLCBjdXJyZW50VGFyZ2V0LCBjdXJyZW50VGVybSk7XG5cbiAgICAgICAgY2FzZSAnTmF2aWdhdGlvblByb3BlcnR5UGF0aCc6XG4gICAgICAgICAgICByZXR1cm4gbWFwTmF2aWdhdGlvblByb3BlcnR5UGF0aChjb252ZXJ0ZXIsIHByb3BlcnR5VmFsdWUsIHZhbHVlRlFOLCBjdXJyZW50VGFyZ2V0LCBjdXJyZW50VGVybSk7XG5cbiAgICAgICAgY2FzZSAnQW5ub3RhdGlvblBhdGgnOlxuICAgICAgICAgICAgcmV0dXJuIG1hcEFubm90YXRpb25QYXRoKGNvbnZlcnRlciwgcHJvcGVydHlWYWx1ZSwgdmFsdWVGUU4sIGN1cnJlbnRUYXJnZXQsIGN1cnJlbnRUZXJtKTtcblxuICAgICAgICBjYXNlICdQYXRoJzoge1xuICAgICAgICAgICAgaWYgKGlzQW5ub3RhdGlvblBhdGgocHJvcGVydHlWYWx1ZS5QYXRoKSkge1xuICAgICAgICAgICAgICAgIC8vIGlubGluZSB0aGUgdGFyZ2V0XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVUYXJnZXQoY29udmVydGVyLCBjdXJyZW50VGFyZ2V0LCBwcm9wZXJ0eVZhbHVlLlBhdGgsIGN1cnJlbnRUZXJtKS50YXJnZXQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBtYXBQYXRoKGNvbnZlcnRlciwgcHJvcGVydHlWYWx1ZSwgdmFsdWVGUU4sIGN1cnJlbnRUYXJnZXQsIGN1cnJlbnRUZXJtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgJ1JlY29yZCc6XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VSZWNvcmQoXG4gICAgICAgICAgICAgICAgY29udmVydGVyLFxuICAgICAgICAgICAgICAgIGN1cnJlbnRUZXJtLFxuICAgICAgICAgICAgICAgIGN1cnJlbnRUYXJnZXQsXG4gICAgICAgICAgICAgICAgY3VycmVudFByb3BlcnR5LFxuICAgICAgICAgICAgICAgIGN1cnJlbnRTb3VyY2UsXG4gICAgICAgICAgICAgICAgcHJvcGVydHlWYWx1ZS5SZWNvcmQsXG4gICAgICAgICAgICAgICAgdmFsdWVGUU5cbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgY2FzZSAnQ29sbGVjdGlvbic6XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VDb2xsZWN0aW9uKFxuICAgICAgICAgICAgICAgIGNvbnZlcnRlcixcbiAgICAgICAgICAgICAgICBjdXJyZW50VGFyZ2V0LFxuICAgICAgICAgICAgICAgIGN1cnJlbnRUZXJtLFxuICAgICAgICAgICAgICAgIGN1cnJlbnRQcm9wZXJ0eSxcbiAgICAgICAgICAgICAgICBjdXJyZW50U291cmNlLFxuICAgICAgICAgICAgICAgIHByb3BlcnR5VmFsdWUuQ29sbGVjdGlvbixcbiAgICAgICAgICAgICAgICB2YWx1ZUZRTlxuICAgICAgICAgICAgKTtcbiAgICAgICAgY2FzZSAnQXBwbHknOlxuICAgICAgICBjYXNlICdOdWxsJzpcbiAgICAgICAgY2FzZSAnTm90JzpcbiAgICAgICAgY2FzZSAnRXEnOlxuICAgICAgICBjYXNlICdOZSc6XG4gICAgICAgIGNhc2UgJ0d0JzpcbiAgICAgICAgY2FzZSAnR2UnOlxuICAgICAgICBjYXNlICdMdCc6XG4gICAgICAgIGNhc2UgJ0xlJzpcbiAgICAgICAgY2FzZSAnSWYnOlxuICAgICAgICBjYXNlICdBbmQnOlxuICAgICAgICBjYXNlICdPcic6XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gcHJvcGVydHlWYWx1ZTtcbiAgICB9XG59XG5cbi8qKlxuICogSW5mZXIgdGhlIHR5cGUgb2YgYSB0ZXJtIGJhc2VkIG9uIGl0cyB0eXBlLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXIgICAgICAgICBDb252ZXJ0ZXJcbiAqIEBwYXJhbSBhbm5vdGF0aW9uc1Rlcm0gICBUaGUgYW5ub3RhdGlvbiB0ZXJtXG4gKiBAcGFyYW0gYW5ub3RhdGlvblRhcmdldCAgVGhlIGFubm90YXRpb24gdGFyZ2V0XG4gKiBAcGFyYW0gY3VycmVudFByb3BlcnR5ICAgVGhlIGN1cnJlbnQgcHJvcGVydHkgb2YgdGhlIHJlY29yZFxuICogQHJldHVybnMgVGhlIGluZmVycmVkIHR5cGUuXG4gKi9cbmZ1bmN0aW9uIGluZmVyVHlwZUZyb21UZXJtKFxuICAgIGNvbnZlcnRlcjogQ29udmVydGVyLFxuICAgIGFubm90YXRpb25zVGVybTogc3RyaW5nLFxuICAgIGFubm90YXRpb25UYXJnZXQ6IHN0cmluZyxcbiAgICBjdXJyZW50UHJvcGVydHk/OiBzdHJpbmdcbikge1xuICAgIGxldCB0YXJnZXRUeXBlID0gKFRlcm1Ub1R5cGVzIGFzIGFueSlbYW5ub3RhdGlvbnNUZXJtXTtcbiAgICBpZiAoY3VycmVudFByb3BlcnR5KSB7XG4gICAgICAgIGFubm90YXRpb25zVGVybSA9IGAke3N1YnN0cmluZ0JlZm9yZUxhc3QoYW5ub3RhdGlvbnNUZXJtLCAnLicpfS4ke2N1cnJlbnRQcm9wZXJ0eX1gO1xuICAgICAgICB0YXJnZXRUeXBlID0gKFRlcm1Ub1R5cGVzIGFzIGFueSlbYW5ub3RhdGlvbnNUZXJtXTtcbiAgICB9XG5cbiAgICBjb252ZXJ0ZXIubG9nRXJyb3IoXG4gICAgICAgIGBUaGUgdHlwZSBvZiB0aGUgcmVjb3JkIHVzZWQgd2l0aGluIHRoZSB0ZXJtICR7YW5ub3RhdGlvbnNUZXJtfSB3YXMgbm90IGRlZmluZWQgYW5kIHdhcyBpbmZlcnJlZCBhcyAke3RhcmdldFR5cGV9LlxuSGludDogSWYgcG9zc2libGUsIHRyeSB0byBtYWludGFpbiB0aGUgVHlwZSBwcm9wZXJ0eSBmb3IgZWFjaCBSZWNvcmQuXG48QW5ub3RhdGlvbnMgVGFyZ2V0PVwiJHthbm5vdGF0aW9uVGFyZ2V0fVwiPlxuXHQ8QW5ub3RhdGlvbiBUZXJtPVwiJHthbm5vdGF0aW9uc1Rlcm19XCI+XG5cdFx0PFJlY29yZD4uLi48L1JlY29yZD5cblx0PC9Bbm5vdGF0aW9uPlxuPC9Bbm5vdGF0aW9ucz5gXG4gICAgKTtcblxuICAgIHJldHVybiB0YXJnZXRUeXBlO1xufVxuXG5mdW5jdGlvbiBpc0RhdGFGaWVsZFdpdGhGb3JBY3Rpb24oYW5ub3RhdGlvbkNvbnRlbnQ6IGFueSkge1xuICAgIHJldHVybiAoXG4gICAgICAgIGFubm90YXRpb25Db250ZW50Lmhhc093blByb3BlcnR5KCdBY3Rpb24nKSAmJlxuICAgICAgICAoYW5ub3RhdGlvbkNvbnRlbnQuJFR5cGUgPT09ICdjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBY3Rpb24nIHx8XG4gICAgICAgICAgICBhbm5vdGF0aW9uQ29udGVudC4kVHlwZSA9PT0gJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFdpdGhBY3Rpb24nKVxuICAgICk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlUmVjb3JkVHlwZShcbiAgICBjb252ZXJ0ZXI6IENvbnZlcnRlcixcbiAgICBjdXJyZW50VGVybTogc3RyaW5nLFxuICAgIGN1cnJlbnRUYXJnZXQ6IGFueSxcbiAgICBjdXJyZW50UHJvcGVydHk6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICByZWNvcmREZWZpbml0aW9uOiBBbm5vdGF0aW9uUmVjb3JkXG4pIHtcbiAgICBsZXQgdGFyZ2V0VHlwZTtcbiAgICBpZiAoIXJlY29yZERlZmluaXRpb24udHlwZSAmJiBjdXJyZW50VGVybSkge1xuICAgICAgICB0YXJnZXRUeXBlID0gaW5mZXJUeXBlRnJvbVRlcm0oY29udmVydGVyLCBjdXJyZW50VGVybSwgY3VycmVudFRhcmdldC5mdWxseVF1YWxpZmllZE5hbWUsIGN1cnJlbnRQcm9wZXJ0eSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGFyZ2V0VHlwZSA9IGNvbnZlcnRlci51bmFsaWFzKHJlY29yZERlZmluaXRpb24udHlwZSk7XG4gICAgfVxuICAgIHJldHVybiB0YXJnZXRUeXBlO1xufVxuXG5mdW5jdGlvbiBwYXJzZVJlY29yZChcbiAgICBjb252ZXJ0ZXI6IENvbnZlcnRlcixcbiAgICBjdXJyZW50VGVybTogc3RyaW5nLFxuICAgIGN1cnJlbnRUYXJnZXQ6IGFueSxcbiAgICBjdXJyZW50UHJvcGVydHk6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBjdXJyZW50U291cmNlOiBzdHJpbmcsXG4gICAgYW5ub3RhdGlvblJlY29yZDogQW5ub3RhdGlvblJlY29yZCxcbiAgICBjdXJyZW50RlFOOiBzdHJpbmdcbikge1xuICAgIGNvbnN0IHJlY29yZDogYW55ID0ge1xuICAgICAgICAkVHlwZTogcGFyc2VSZWNvcmRUeXBlKGNvbnZlcnRlciwgY3VycmVudFRlcm0sIGN1cnJlbnRUYXJnZXQsIGN1cnJlbnRQcm9wZXJ0eSwgYW5ub3RhdGlvblJlY29yZCksXG4gICAgICAgIGZ1bGx5UXVhbGlmaWVkTmFtZTogY3VycmVudEZRTixcbiAgICAgICAgW0FOTk9UQVRJT05fVEFSR0VUXTogY3VycmVudFRhcmdldCxcbiAgICAgICAgX19zb3VyY2U6IGN1cnJlbnRTb3VyY2VcbiAgICB9O1xuXG4gICAgZm9yIChjb25zdCBwcm9wZXJ0eVZhbHVlIG9mIGFubm90YXRpb25SZWNvcmQucHJvcGVydHlWYWx1ZXMpIHtcbiAgICAgICAgbGF6eShyZWNvcmQsIHByb3BlcnR5VmFsdWUubmFtZSwgKCkgPT5cbiAgICAgICAgICAgIHBhcnNlVmFsdWUoXG4gICAgICAgICAgICAgICAgY29udmVydGVyLFxuICAgICAgICAgICAgICAgIGN1cnJlbnRUYXJnZXQsXG4gICAgICAgICAgICAgICAgY3VycmVudFRlcm0sXG4gICAgICAgICAgICAgICAgcHJvcGVydHlWYWx1ZS5uYW1lLFxuICAgICAgICAgICAgICAgIGN1cnJlbnRTb3VyY2UsXG4gICAgICAgICAgICAgICAgcHJvcGVydHlWYWx1ZS52YWx1ZSxcbiAgICAgICAgICAgICAgICBgJHtjdXJyZW50RlFOfS8ke3Byb3BlcnR5VmFsdWUubmFtZX1gXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gYW5ub3RhdGlvbnMgb24gdGhlIHJlY29yZFxuICAgIGxhenkocmVjb3JkLCAnYW5ub3RhdGlvbnMnLCByZXNvbHZlQW5ub3RhdGlvbnNPbkFubm90YXRpb24oY29udmVydGVyLCBhbm5vdGF0aW9uUmVjb3JkLCByZWNvcmQpKTtcblxuICAgIGlmIChpc0RhdGFGaWVsZFdpdGhGb3JBY3Rpb24ocmVjb3JkKSkge1xuICAgICAgICBsYXp5KHJlY29yZCwgJ0FjdGlvblRhcmdldCcsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbk5hbWUgPSBjb252ZXJ0ZXIudW5hbGlhcyhyZWNvcmQuQWN0aW9uPy50b1N0cmluZygpKTtcblxuICAgICAgICAgICAgLy8gKDEpIEJvdW5kIGFjdGlvbiBvZiB0aGUgYW5ub3RhdGlvbiB0YXJnZXQ/XG4gICAgICAgICAgICBsZXQgYWN0aW9uVGFyZ2V0ID0gY3VycmVudFRhcmdldC5hY3Rpb25zW2FjdGlvbk5hbWVdO1xuXG4gICAgICAgICAgICBpZiAoIWFjdGlvblRhcmdldCkge1xuICAgICAgICAgICAgICAgIC8vICgyKSBBY3Rpb25JbXBvcnQgKD0gdW5ib3VuZCBhY3Rpb24pP1xuICAgICAgICAgICAgICAgIGFjdGlvblRhcmdldCA9IGNvbnZlcnRlci5nZXRDb252ZXJ0ZWRBY3Rpb25JbXBvcnQoYWN0aW9uTmFtZSk/LmFjdGlvbjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFhY3Rpb25UYXJnZXQpIHtcbiAgICAgICAgICAgICAgICAvLyAoMykgQm91bmQgYWN0aW9uIG9mIGEgZGlmZmVyZW50IEVudGl0eVR5cGUgKHRoZSBhY3Rpb25OYW1lIGlzIGZ1bGx5IHF1YWxpZmllZCBpbiB0aGlzIGNhc2UpXG4gICAgICAgICAgICAgICAgYWN0aW9uVGFyZ2V0ID0gY29udmVydGVyLmdldENvbnZlcnRlZEFjdGlvbihhY3Rpb25OYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoIWFjdGlvblRhcmdldD8uaXNCb3VuZCkge1xuICAgICAgICAgICAgICAgICAgICBhY3Rpb25UYXJnZXQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIWFjdGlvblRhcmdldCkge1xuICAgICAgICAgICAgICAgIGNvbnZlcnRlci5sb2dFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgYCR7cmVjb3JkLmZ1bGx5UXVhbGlmaWVkTmFtZX06IFVuYWJsZSB0byByZXNvbHZlICcke3JlY29yZC5BY3Rpb259JyAoJyR7YWN0aW9uTmFtZX0nKWBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGFjdGlvblRhcmdldDtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZWNvcmQ7XG59XG5cbmV4cG9ydCB0eXBlIENvbGxlY3Rpb25UeXBlID1cbiAgICB8ICdQcm9wZXJ0eVBhdGgnXG4gICAgfCAnUGF0aCdcbiAgICB8ICdJZidcbiAgICB8ICdBcHBseSdcbiAgICB8ICdOdWxsJ1xuICAgIHwgJ0FuZCdcbiAgICB8ICdFcSdcbiAgICB8ICdOZSdcbiAgICB8ICdOb3QnXG4gICAgfCAnR3QnXG4gICAgfCAnR2UnXG4gICAgfCAnTHQnXG4gICAgfCAnTGUnXG4gICAgfCAnT3InXG4gICAgfCAnQW5ub3RhdGlvblBhdGgnXG4gICAgfCAnTmF2aWdhdGlvblByb3BlcnR5UGF0aCdcbiAgICB8ICdSZWNvcmQnXG4gICAgfCAnU3RyaW5nJ1xuICAgIHwgJ0VtcHR5Q29sbGVjdGlvbic7XG5cbi8qKlxuICogUmV0cmlldmUgb3IgaW5mZXIgdGhlIGNvbGxlY3Rpb24gdHlwZSBiYXNlZCBvbiBpdHMgY29udGVudC5cbiAqXG4gKiBAcGFyYW0gY29sbGVjdGlvbkRlZmluaXRpb25cbiAqIEByZXR1cm5zIHRoZSB0eXBlIG9mIHRoZSBjb2xsZWN0aW9uXG4gKi9cbmZ1bmN0aW9uIGdldE9ySW5mZXJDb2xsZWN0aW9uVHlwZShjb2xsZWN0aW9uRGVmaW5pdGlvbjogYW55W10pOiBDb2xsZWN0aW9uVHlwZSB7XG4gICAgbGV0IHR5cGU6IENvbGxlY3Rpb25UeXBlID0gKGNvbGxlY3Rpb25EZWZpbml0aW9uIGFzIGFueSkudHlwZTtcbiAgICBpZiAodHlwZSA9PT0gdW5kZWZpbmVkICYmIGNvbGxlY3Rpb25EZWZpbml0aW9uLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgZmlyc3RDb2xJdGVtID0gY29sbGVjdGlvbkRlZmluaXRpb25bMF07XG4gICAgICAgIGlmIChmaXJzdENvbEl0ZW0uaGFzT3duUHJvcGVydHkoJ1Byb3BlcnR5UGF0aCcpKSB7XG4gICAgICAgICAgICB0eXBlID0gJ1Byb3BlcnR5UGF0aCc7XG4gICAgICAgIH0gZWxzZSBpZiAoZmlyc3RDb2xJdGVtLmhhc093blByb3BlcnR5KCdQYXRoJykpIHtcbiAgICAgICAgICAgIHR5cGUgPSAnUGF0aCc7XG4gICAgICAgIH0gZWxzZSBpZiAoZmlyc3RDb2xJdGVtLmhhc093blByb3BlcnR5KCdBbm5vdGF0aW9uUGF0aCcpKSB7XG4gICAgICAgICAgICB0eXBlID0gJ0Fubm90YXRpb25QYXRoJztcbiAgICAgICAgfSBlbHNlIGlmIChmaXJzdENvbEl0ZW0uaGFzT3duUHJvcGVydHkoJ05hdmlnYXRpb25Qcm9wZXJ0eVBhdGgnKSkge1xuICAgICAgICAgICAgdHlwZSA9ICdOYXZpZ2F0aW9uUHJvcGVydHlQYXRoJztcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHR5cGVvZiBmaXJzdENvbEl0ZW0gPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgICAoZmlyc3RDb2xJdGVtLmhhc093blByb3BlcnR5KCd0eXBlJykgfHwgZmlyc3RDb2xJdGVtLmhhc093blByb3BlcnR5KCdwcm9wZXJ0eVZhbHVlcycpKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHR5cGUgPSAnUmVjb3JkJztcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZmlyc3RDb2xJdGVtID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdHlwZSA9ICdTdHJpbmcnO1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdHlwZSA9ICdFbXB0eUNvbGxlY3Rpb24nO1xuICAgIH1cbiAgICByZXR1cm4gdHlwZTtcbn1cblxuZnVuY3Rpb24gcGFyc2VDb2xsZWN0aW9uKFxuICAgIGNvbnZlcnRlcjogQ29udmVydGVyLFxuICAgIGN1cnJlbnRUYXJnZXQ6IGFueSxcbiAgICBjdXJyZW50VGVybTogc3RyaW5nLFxuICAgIGN1cnJlbnRQcm9wZXJ0eTogc3RyaW5nLFxuICAgIGN1cnJlbnRTb3VyY2U6IHN0cmluZyxcbiAgICBjb2xsZWN0aW9uRGVmaW5pdGlvbjogYW55W10sXG4gICAgcGFyZW50RlFOOiBzdHJpbmdcbikge1xuICAgIGNvbnN0IGNvbGxlY3Rpb25EZWZpbml0aW9uVHlwZSA9IGdldE9ySW5mZXJDb2xsZWN0aW9uVHlwZShjb2xsZWN0aW9uRGVmaW5pdGlvbik7XG5cbiAgICBzd2l0Y2ggKGNvbGxlY3Rpb25EZWZpbml0aW9uVHlwZSkge1xuICAgICAgICBjYXNlICdQcm9wZXJ0eVBhdGgnOlxuICAgICAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25EZWZpbml0aW9uLm1hcCgocGF0aCwgaW5kZXgpID0+XG4gICAgICAgICAgICAgICAgbWFwUHJvcGVydHlQYXRoKGNvbnZlcnRlciwgcGF0aCwgYCR7cGFyZW50RlFOfS8ke2luZGV4fWAsIGN1cnJlbnRUYXJnZXQsIGN1cnJlbnRUZXJtKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICBjYXNlICdQYXRoJzpcbiAgICAgICAgICAgIC8vIFRPRE86IG1ha2UgbGF6eT9cbiAgICAgICAgICAgIHJldHVybiBjb2xsZWN0aW9uRGVmaW5pdGlvbi5tYXAoKHBhdGhWYWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlVGFyZ2V0KGNvbnZlcnRlciwgY3VycmVudFRhcmdldCwgcGF0aFZhbHVlLlBhdGgsIGN1cnJlbnRUZXJtKS50YXJnZXQ7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBjYXNlICdBbm5vdGF0aW9uUGF0aCc6XG4gICAgICAgICAgICByZXR1cm4gY29sbGVjdGlvbkRlZmluaXRpb24ubWFwKChwYXRoLCBpbmRleCkgPT5cbiAgICAgICAgICAgICAgICBtYXBBbm5vdGF0aW9uUGF0aChjb252ZXJ0ZXIsIHBhdGgsIGAke3BhcmVudEZRTn0vJHtpbmRleH1gLCBjdXJyZW50VGFyZ2V0LCBjdXJyZW50VGVybSlcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgY2FzZSAnTmF2aWdhdGlvblByb3BlcnR5UGF0aCc6XG4gICAgICAgICAgICByZXR1cm4gY29sbGVjdGlvbkRlZmluaXRpb24ubWFwKChwYXRoLCBpbmRleCkgPT5cbiAgICAgICAgICAgICAgICBtYXBOYXZpZ2F0aW9uUHJvcGVydHlQYXRoKGNvbnZlcnRlciwgcGF0aCwgYCR7cGFyZW50RlFOfS8ke2luZGV4fWAsIGN1cnJlbnRUYXJnZXQsIGN1cnJlbnRUZXJtKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICBjYXNlICdSZWNvcmQnOlxuICAgICAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25EZWZpbml0aW9uLm1hcCgocmVjb3JkRGVmaW5pdGlvbiwgcmVjb3JkSWR4KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlUmVjb3JkKFxuICAgICAgICAgICAgICAgICAgICBjb252ZXJ0ZXIsXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXJtLFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGFyZ2V0LFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50UHJvcGVydHksXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgIHJlY29yZERlZmluaXRpb24sXG4gICAgICAgICAgICAgICAgICAgIGAke3BhcmVudEZRTn0vJHtyZWNvcmRJZHh9YFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBjYXNlICdBcHBseSc6XG4gICAgICAgIGNhc2UgJ051bGwnOlxuICAgICAgICBjYXNlICdJZic6XG4gICAgICAgIGNhc2UgJ0VxJzpcbiAgICAgICAgY2FzZSAnTmUnOlxuICAgICAgICBjYXNlICdMdCc6XG4gICAgICAgIGNhc2UgJ0d0JzpcbiAgICAgICAgY2FzZSAnTGUnOlxuICAgICAgICBjYXNlICdHZSc6XG4gICAgICAgIGNhc2UgJ05vdCc6XG4gICAgICAgIGNhc2UgJ0FuZCc6XG4gICAgICAgIGNhc2UgJ09yJzpcbiAgICAgICAgICAgIHJldHVybiBjb2xsZWN0aW9uRGVmaW5pdGlvbi5tYXAoKGlmVmFsdWUpID0+IGlmVmFsdWUpO1xuXG4gICAgICAgIGNhc2UgJ1N0cmluZyc6XG4gICAgICAgICAgICByZXR1cm4gY29sbGVjdGlvbkRlZmluaXRpb24ubWFwKChzdHJpbmdWYWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc3RyaW5nVmFsdWUgPT09ICdzdHJpbmcnIHx8IHN0cmluZ1ZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0cmluZ1ZhbHVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHJpbmdWYWx1ZS5TdHJpbmc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGlmIChjb2xsZWN0aW9uRGVmaW5pdGlvbi5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIGNhc2UnKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGlzVjROYXZpZ2F0aW9uUHJvcGVydHkoXG4gICAgbmF2UHJvcDogUmF3VjJOYXZpZ2F0aW9uUHJvcGVydHkgfCBSYXdWNE5hdmlnYXRpb25Qcm9wZXJ0eVxuKTogbmF2UHJvcCBpcyBSYXdWNE5hdmlnYXRpb25Qcm9wZXJ0eSB7XG4gICAgcmV0dXJuICEhKG5hdlByb3AgYXMgQmFzZU5hdmlnYXRpb25Qcm9wZXJ0eSkudGFyZ2V0VHlwZU5hbWU7XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRBbm5vdGF0aW9uKGNvbnZlcnRlcjogQ29udmVydGVyLCB0YXJnZXQ6IGFueSwgcmF3QW5ub3RhdGlvbjogUmF3QW5ub3RhdGlvbik6IEFubm90YXRpb24ge1xuICAgIGxldCBhbm5vdGF0aW9uOiBhbnk7XG4gICAgaWYgKHJhd0Fubm90YXRpb24ucmVjb3JkKSB7XG4gICAgICAgIGFubm90YXRpb24gPSBwYXJzZVJlY29yZChcbiAgICAgICAgICAgIGNvbnZlcnRlcixcbiAgICAgICAgICAgIHJhd0Fubm90YXRpb24udGVybSxcbiAgICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICAgICcnLFxuICAgICAgICAgICAgKHJhd0Fubm90YXRpb24gYXMgYW55KS5fX3NvdXJjZSxcbiAgICAgICAgICAgIHJhd0Fubm90YXRpb24ucmVjb3JkLFxuICAgICAgICAgICAgKHJhd0Fubm90YXRpb24gYXMgYW55KS5mdWxseVF1YWxpZmllZE5hbWVcbiAgICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHJhd0Fubm90YXRpb24uY29sbGVjdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGFubm90YXRpb24gPSBwYXJzZVZhbHVlKFxuICAgICAgICAgICAgY29udmVydGVyLFxuICAgICAgICAgICAgdGFyZ2V0LFxuICAgICAgICAgICAgcmF3QW5ub3RhdGlvbi50ZXJtLFxuICAgICAgICAgICAgJycsXG4gICAgICAgICAgICAocmF3QW5ub3RhdGlvbiBhcyBhbnkpLl9fc291cmNlLFxuICAgICAgICAgICAgcmF3QW5ub3RhdGlvbi52YWx1ZSA/PyB7IHR5cGU6ICdCb29sJywgQm9vbDogdHJ1ZSB9LFxuICAgICAgICAgICAgKHJhd0Fubm90YXRpb24gYXMgYW55KS5mdWxseVF1YWxpZmllZE5hbWVcbiAgICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHJhd0Fubm90YXRpb24uY29sbGVjdGlvbikge1xuICAgICAgICBhbm5vdGF0aW9uID0gcGFyc2VDb2xsZWN0aW9uKFxuICAgICAgICAgICAgY29udmVydGVyLFxuICAgICAgICAgICAgdGFyZ2V0LFxuICAgICAgICAgICAgcmF3QW5ub3RhdGlvbi50ZXJtLFxuICAgICAgICAgICAgJycsXG4gICAgICAgICAgICAocmF3QW5ub3RhdGlvbiBhcyBhbnkpLl9fc291cmNlLFxuICAgICAgICAgICAgcmF3QW5ub3RhdGlvbi5jb2xsZWN0aW9uLFxuICAgICAgICAgICAgKHJhd0Fubm90YXRpb24gYXMgYW55KS5mdWxseVF1YWxpZmllZE5hbWVcbiAgICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIGNhc2UnKTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHR5cGVvZiBhbm5vdGF0aW9uKSB7XG4gICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LXdyYXBwZXJzXG4gICAgICAgICAgICBhbm5vdGF0aW9uID0gbmV3IFN0cmluZyhhbm5vdGF0aW9uKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctd3JhcHBlcnNcbiAgICAgICAgICAgIGFubm90YXRpb24gPSBuZXcgQm9vbGVhbihhbm5vdGF0aW9uKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICAgICAgYW5ub3RhdGlvbiA9IG5ldyBOdW1iZXIoYW5ub3RhdGlvbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIC8vIGRvIG5vdGhpbmdcbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGFubm90YXRpb24uZnVsbHlRdWFsaWZpZWROYW1lID0gKHJhd0Fubm90YXRpb24gYXMgYW55KS5mdWxseVF1YWxpZmllZE5hbWU7XG4gICAgYW5ub3RhdGlvbltBTk5PVEFUSU9OX1RBUkdFVF0gPSB0YXJnZXQ7XG5cbiAgICBjb25zdCBbdm9jQWxpYXMsIHZvY1Rlcm1dID0gY29udmVydGVyLnNwbGl0VGVybShyYXdBbm5vdGF0aW9uLnRlcm0pO1xuXG4gICAgYW5ub3RhdGlvbi50ZXJtID0gY29udmVydGVyLnVuYWxpYXMoYCR7dm9jQWxpYXN9LiR7dm9jVGVybX1gLCBWb2NhYnVsYXJ5UmVmZXJlbmNlcyk7XG4gICAgYW5ub3RhdGlvbi5xdWFsaWZpZXIgPSByYXdBbm5vdGF0aW9uLnF1YWxpZmllcjtcbiAgICBhbm5vdGF0aW9uLl9fc291cmNlID0gKHJhd0Fubm90YXRpb24gYXMgYW55KS5fX3NvdXJjZTtcblxuICAgIHRyeSB7XG4gICAgICAgIGxhenkoYW5ub3RhdGlvbiwgJ2Fubm90YXRpb25zJywgcmVzb2x2ZUFubm90YXRpb25zT25Bbm5vdGF0aW9uKGNvbnZlcnRlciwgcmF3QW5ub3RhdGlvbiwgYW5ub3RhdGlvbikpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gbm90IGFuIGVycm9yOiBwYXJzZVJlY29yZCgpIGFscmVhZHkgYWRkcyBhbm5vdGF0aW9ucywgYnV0IHRoZSBvdGhlciBwYXJzZVhYWCBmdW5jdGlvbnMgZG9uJ3QsIHNvIHRoaXMgY2FuIGhhcHBlblxuICAgIH1cblxuICAgIHJldHVybiBhbm5vdGF0aW9uIGFzIEFubm90YXRpb247XG59XG5cbmNsYXNzIENvbnZlcnRlciB7XG4gICAgcHJpdmF0ZSBhbm5vdGF0aW9uc0J5VGFyZ2V0OiBSZWNvcmQ8RnVsbHlRdWFsaWZpZWROYW1lLCBBbm5vdGF0aW9uW10+O1xuXG4gICAgLyoqXG4gICAgICogR2V0IHByZXByb2Nlc3NlZCBhbm5vdGF0aW9ucyBvbiB0aGUgc3BlY2lmaWVkIHRhcmdldC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0YXJnZXQgICAgVGhlIGFubm90YXRpb24gdGFyZ2V0XG4gICAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgYW5ub3RhdGlvbnNcbiAgICAgKi9cbiAgICBnZXRBbm5vdGF0aW9ucyh0YXJnZXQ6IEZ1bGx5UXVhbGlmaWVkTmFtZSk6IEFubm90YXRpb25bXSB7XG4gICAgICAgIGlmICh0aGlzLmFubm90YXRpb25zQnlUYXJnZXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgYW5ub3RhdGlvblNvdXJjZXMgPSBPYmplY3Qua2V5cyh0aGlzLnJhd1NjaGVtYS5hbm5vdGF0aW9ucykubWFwKChzb3VyY2UpID0+ICh7XG4gICAgICAgICAgICAgICAgbmFtZTogc291cmNlLFxuICAgICAgICAgICAgICAgIGFubm90YXRpb25MaXN0OiB0aGlzLnJhd1NjaGVtYS5hbm5vdGF0aW9uc1tzb3VyY2VdXG4gICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgIHRoaXMuYW5ub3RhdGlvbnNCeVRhcmdldCA9IG1lcmdlQW5ub3RhdGlvbnModGhpcy5yYXdNZXRhZGF0YS5yZWZlcmVuY2VzLCAuLi5hbm5vdGF0aW9uU291cmNlcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5hbm5vdGF0aW9uc0J5VGFyZ2V0W3RhcmdldF0gPz8gW107XG4gICAgfVxuXG4gICAgZ2V0Q29udmVydGVkRW50aXR5Q29udGFpbmVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRDb252ZXJ0ZWRFbGVtZW50KFxuICAgICAgICAgICAgdGhpcy5yYXdNZXRhZGF0YS5zY2hlbWEuZW50aXR5Q29udGFpbmVyLmZ1bGx5UXVhbGlmaWVkTmFtZSxcbiAgICAgICAgICAgIHRoaXMucmF3TWV0YWRhdGEuc2NoZW1hLmVudGl0eUNvbnRhaW5lcixcbiAgICAgICAgICAgIGNvbnZlcnRFbnRpdHlDb250YWluZXJcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBnZXRDb252ZXJ0ZWRFbnRpdHlTZXQoZnVsbHlRdWFsaWZpZWROYW1lOiBGdWxseVF1YWxpZmllZE5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udmVydGVkT3V0cHV0LmVudGl0eVNldHMuYnlfZnVsbHlRdWFsaWZpZWROYW1lKGZ1bGx5UXVhbGlmaWVkTmFtZSk7XG4gICAgfVxuXG4gICAgZ2V0Q29udmVydGVkU2luZ2xldG9uKGZ1bGx5UXVhbGlmaWVkTmFtZTogRnVsbHlRdWFsaWZpZWROYW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRlZE91dHB1dC5zaW5nbGV0b25zLmJ5X2Z1bGx5UXVhbGlmaWVkTmFtZShmdWxseVF1YWxpZmllZE5hbWUpO1xuICAgIH1cblxuICAgIGdldENvbnZlcnRlZEVudGl0eVR5cGUoZnVsbHlRdWFsaWZpZWROYW1lOiBGdWxseVF1YWxpZmllZE5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udmVydGVkT3V0cHV0LmVudGl0eVR5cGVzLmJ5X2Z1bGx5UXVhbGlmaWVkTmFtZShmdWxseVF1YWxpZmllZE5hbWUpO1xuICAgIH1cblxuICAgIGdldENvbnZlcnRlZENvbXBsZXhUeXBlKGZ1bGx5UXVhbGlmaWVkTmFtZTogRnVsbHlRdWFsaWZpZWROYW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRlZE91dHB1dC5jb21wbGV4VHlwZXMuYnlfZnVsbHlRdWFsaWZpZWROYW1lKGZ1bGx5UXVhbGlmaWVkTmFtZSk7XG4gICAgfVxuXG4gICAgZ2V0Q29udmVydGVkVHlwZURlZmluaXRpb24oZnVsbHlRdWFsaWZpZWROYW1lOiBGdWxseVF1YWxpZmllZE5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udmVydGVkT3V0cHV0LnR5cGVEZWZpbml0aW9ucy5ieV9mdWxseVF1YWxpZmllZE5hbWUoZnVsbHlRdWFsaWZpZWROYW1lKTtcbiAgICB9XG5cbiAgICBnZXRDb252ZXJ0ZWRBY3Rpb25JbXBvcnQoZnVsbHlRdWFsaWZpZWROYW1lOiBGdWxseVF1YWxpZmllZE5hbWUpIHtcbiAgICAgICAgbGV0IGFjdGlvbkltcG9ydCA9IHRoaXMuY29udmVydGVkT3V0cHV0LmFjdGlvbkltcG9ydHMuYnlfZnVsbHlRdWFsaWZpZWROYW1lKGZ1bGx5UXVhbGlmaWVkTmFtZSk7XG4gICAgICAgIGlmICghYWN0aW9uSW1wb3J0KSB7XG4gICAgICAgICAgICBhY3Rpb25JbXBvcnQgPSB0aGlzLmNvbnZlcnRlZE91dHB1dC5hY3Rpb25JbXBvcnRzLmJ5X25hbWUoZnVsbHlRdWFsaWZpZWROYW1lKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWN0aW9uSW1wb3J0O1xuICAgIH1cblxuICAgIGdldENvbnZlcnRlZEFjdGlvbihmdWxseVF1YWxpZmllZE5hbWU6IEZ1bGx5UXVhbGlmaWVkTmFtZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb252ZXJ0ZWRPdXRwdXQuYWN0aW9ucy5ieV9mdWxseVF1YWxpZmllZE5hbWUoZnVsbHlRdWFsaWZpZWROYW1lKTtcbiAgICB9XG5cbiAgICBjb252ZXJ0PENvbnZlcnRlZCwgUmF3IGV4dGVuZHMgUmF3VHlwZTxDb252ZXJ0ZWQ+PihcbiAgICAgICAgcmF3VmFsdWU6IFJhdyxcbiAgICAgICAgbWFwOiAoY29udmVydGVyOiBDb252ZXJ0ZXIsIHJhdzogUmF3KSA9PiBDb252ZXJ0ZWRcbiAgICApOiAoKSA9PiBDb252ZXJ0ZWQ7XG4gICAgY29udmVydDxDb252ZXJ0ZWQsIFJhdyBleHRlbmRzIFJhd1R5cGU8Q29udmVydGVkPiwgSW5kZXhQcm9wZXJ0eSBleHRlbmRzIEV4dHJhY3Q8a2V5b2YgQ29udmVydGVkLCBzdHJpbmc+PihcbiAgICAgICAgcmF3VmFsdWU6IFJhd1tdLFxuICAgICAgICBtYXA6IChjb252ZXJ0ZXI6IENvbnZlcnRlciwgcmF3OiBSYXcpID0+IENvbnZlcnRlZFxuICAgICk6ICgpID0+IEFycmF5V2l0aEluZGV4PENvbnZlcnRlZCwgSW5kZXhQcm9wZXJ0eT47XG4gICAgY29udmVydDxDb252ZXJ0ZWQsIFJhdyBleHRlbmRzIFJhd1R5cGU8Q29udmVydGVkPiwgSW5kZXhQcm9wZXJ0eSBleHRlbmRzIEV4dHJhY3Q8a2V5b2YgQ29udmVydGVkLCBzdHJpbmc+PihcbiAgICAgICAgcmF3VmFsdWU6IFJhdyB8IFJhd1tdLFxuICAgICAgICBtYXA6IChjb252ZXJ0ZXI6IENvbnZlcnRlciwgcmF3OiBSYXcpID0+IENvbnZlcnRlZFxuICAgICk6ICgoKSA9PiBDb252ZXJ0ZWQpIHwgKCgpID0+IEFycmF5V2l0aEluZGV4PENvbnZlcnRlZCwgSW5kZXhQcm9wZXJ0eT4pIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmF3VmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnZlcnRlZCA9IHJhd1ZhbHVlLnJlZHVjZSgoY29udmVydGVkRWxlbWVudHMsIHJhd0VsZW1lbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udmVydGVkRWxlbWVudCA9IHRoaXMuZ2V0Q29udmVydGVkRWxlbWVudChcbiAgICAgICAgICAgICAgICAgICAgICAgIChyYXdFbGVtZW50IGFzIGFueSkuZnVsbHlRdWFsaWZpZWROYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmF3RWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29udmVydGVkRWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udmVydGVkRWxlbWVudHMucHVzaChjb252ZXJ0ZWRFbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udmVydGVkRWxlbWVudHM7XG4gICAgICAgICAgICAgICAgfSwgW10gYXMgQ29udmVydGVkW10pO1xuICAgICAgICAgICAgICAgIGFkZEdldEJ5VmFsdWUoY29udmVydGVkLCAnbmFtZScgYXMgYW55KTtcbiAgICAgICAgICAgICAgICBhZGRHZXRCeVZhbHVlKGNvbnZlcnRlZCwgJ2Z1bGx5UXVhbGlmaWVkTmFtZScgYXMgYW55KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29udmVydGVkIGFzIEFycmF5V2l0aEluZGV4PENvbnZlcnRlZCwgSW5kZXhQcm9wZXJ0eT47XG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuICgpID0+IHRoaXMuZ2V0Q29udmVydGVkRWxlbWVudChyYXdWYWx1ZS5mdWxseVF1YWxpZmllZE5hbWUsIHJhd1ZhbHVlLCBtYXApITtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmF3TWV0YWRhdGE6IFJhd01ldGFkYXRhO1xuICAgIHByaXZhdGUgY29udmVydGVkRWxlbWVudHM6IE1hcDxGdWxseVF1YWxpZmllZE5hbWUsIGFueT4gPSBuZXcgTWFwKCk7XG4gICAgcHJpdmF0ZSBjb252ZXJ0ZWRPdXRwdXQ6IENvbnZlcnRlZE1ldGFkYXRhO1xuXG4gICAgcmF3U2NoZW1hOiBSYXdTY2hlbWE7XG5cbiAgICBjb25zdHJ1Y3RvcihyYXdNZXRhZGF0YTogUmF3TWV0YWRhdGEsIGNvbnZlcnRlZE91dHB1dDogQ29udmVydGVkTWV0YWRhdGEpIHtcbiAgICAgICAgdGhpcy5yYXdNZXRhZGF0YSA9IHJhd01ldGFkYXRhO1xuICAgICAgICB0aGlzLnJhd1NjaGVtYSA9IHJhd01ldGFkYXRhLnNjaGVtYTtcbiAgICAgICAgdGhpcy5jb252ZXJ0ZWRPdXRwdXQgPSBjb252ZXJ0ZWRPdXRwdXQ7XG4gICAgfVxuXG4gICAgZ2V0Q29udmVydGVkRWxlbWVudDxDb252ZXJ0ZWRUeXBlLCBSYXdUeXBlIGV4dGVuZHMgUmVtb3ZlQW5ub3RhdGlvbkFuZFR5cGU8Q29udmVydGVkVHlwZT4+KFxuICAgICAgICBmdWxseVF1YWxpZmllZE5hbWU6IEZ1bGx5UXVhbGlmaWVkTmFtZSxcbiAgICAgICAgcmF3RWxlbWVudDogUmF3VHlwZSB8IHVuZGVmaW5lZCB8ICgoZnVsbHlRdWFsaWZpZWROYW1lOiBGdWxseVF1YWxpZmllZE5hbWUpID0+IFJhd1R5cGUgfCB1bmRlZmluZWQpLFxuICAgICAgICBtYXA6IChjb252ZXJ0ZXI6IENvbnZlcnRlciwgcmF3OiBSYXdUeXBlKSA9PiBDb252ZXJ0ZWRUeXBlXG4gICAgKTogQ29udmVydGVkVHlwZSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGxldCBjb252ZXJ0ZWQ6IENvbnZlcnRlZFR5cGUgfCB1bmRlZmluZWQgPSB0aGlzLmNvbnZlcnRlZEVsZW1lbnRzLmdldChmdWxseVF1YWxpZmllZE5hbWUpO1xuICAgICAgICBpZiAoY29udmVydGVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHJhd01ldGFkYXRhID1cbiAgICAgICAgICAgICAgICB0eXBlb2YgcmF3RWxlbWVudCA9PT0gJ2Z1bmN0aW9uJyA/IHJhd0VsZW1lbnQuYXBwbHkodW5kZWZpbmVkLCBbZnVsbHlRdWFsaWZpZWROYW1lXSkgOiByYXdFbGVtZW50O1xuICAgICAgICAgICAgaWYgKHJhd01ldGFkYXRhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBjb252ZXJ0ZWQgPSBtYXAuYXBwbHkodW5kZWZpbmVkLCBbdGhpcywgcmF3TWV0YWRhdGFdKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnZlcnRlZEVsZW1lbnRzLnNldChmdWxseVF1YWxpZmllZE5hbWUsIGNvbnZlcnRlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnZlcnRlZDtcbiAgICB9XG5cbiAgICBsb2dFcnJvcihtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5jb252ZXJ0ZWRPdXRwdXQuZGlhZ25vc3RpY3MucHVzaCh7IG1lc3NhZ2UgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU3BsaXQgdGhlIGFsaWFzIGZyb20gdGhlIHRlcm0gdmFsdWUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGVybSB0aGUgdmFsdWUgb2YgdGhlIHRlcm1cbiAgICAgKiBAcmV0dXJucyB0aGUgdGVybSBhbGlhcyBhbmQgdGhlIGFjdHVhbCB0ZXJtIHZhbHVlXG4gICAgICovXG4gICAgc3BsaXRUZXJtKHRlcm06IHN0cmluZykge1xuICAgICAgICBjb25zdCBhbGlhc2VkID0gYWxpYXMoVm9jYWJ1bGFyeVJlZmVyZW5jZXMsIHRlcm0pO1xuICAgICAgICByZXR1cm4gc3BsaXRBdExhc3QoYWxpYXNlZCwgJy4nKTtcbiAgICB9XG5cbiAgICB1bmFsaWFzKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQsIHJlZmVyZW5jZXMgPSB0aGlzLnJhd01ldGFkYXRhLnJlZmVyZW5jZXMpIHtcbiAgICAgICAgcmV0dXJuIHVuYWxpYXMocmVmZXJlbmNlcywgdmFsdWUsIHRoaXMucmF3U2NoZW1hLm5hbWVzcGFjZSkgPz8gJyc7XG4gICAgfVxufVxuXG50eXBlIFJhd1R5cGU8VD4gPSBSZW1vdmVBbm5vdGF0aW9uQW5kVHlwZTxUPiAmIHsgZnVsbHlRdWFsaWZpZWROYW1lOiBGdWxseVF1YWxpZmllZE5hbWUgfTtcblxuZnVuY3Rpb24gcmVzb2x2ZUVudGl0eVR5cGUoY29udmVydGVyOiBDb252ZXJ0ZXIsIGZ1bGx5UXVhbGlmaWVkTmFtZTogRnVsbHlRdWFsaWZpZWROYW1lKSB7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgbGV0IGVudGl0eVR5cGUgPSBjb252ZXJ0ZXIuZ2V0Q29udmVydGVkRW50aXR5VHlwZShmdWxseVF1YWxpZmllZE5hbWUpO1xuXG4gICAgICAgIGlmICghZW50aXR5VHlwZSkge1xuICAgICAgICAgICAgY29udmVydGVyLmxvZ0Vycm9yKGBFbnRpdHlUeXBlICcke2Z1bGx5UXVhbGlmaWVkTmFtZX0nIG5vdCBmb3VuZGApO1xuICAgICAgICAgICAgZW50aXR5VHlwZSA9IHt9IGFzIEVudGl0eVR5cGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVudGl0eVR5cGU7XG4gICAgfTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZU5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdzKFxuICAgIGNvbnZlcnRlcjogQ29udmVydGVyLFxuICAgIHJhd05hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdzOiBSYXdOYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nXG4pIHtcbiAgICByZXR1cm4gKCkgPT5cbiAgICAgICAgT2JqZWN0LmtleXMocmF3TmF2aWdhdGlvblByb3BlcnR5QmluZGluZ3MpLnJlZHVjZSgobmF2aWdhdGlvblByb3BlcnR5QmluZGluZ3MsIGJpbmRpbmdQYXRoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByYXdCaW5kaW5nVGFyZ2V0ID0gcmF3TmF2aWdhdGlvblByb3BlcnR5QmluZGluZ3NbYmluZGluZ1BhdGhdO1xuXG4gICAgICAgICAgICBsYXp5KFxuICAgICAgICAgICAgICAgIG5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdzLFxuICAgICAgICAgICAgICAgIGJpbmRpbmdQYXRoLFxuICAgICAgICAgICAgICAgICgpID0+XG4gICAgICAgICAgICAgICAgICAgIC8vIHRoZSBOYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nIHdpbGwgbGVhZCB0byBlaXRoZXIgYW4gRW50aXR5U2V0IG9yIGEgU2luZ2xldG9uLCBpdCBjYW5ub3QgYmUgdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgIChjb252ZXJ0ZXIuZ2V0Q29udmVydGVkRW50aXR5U2V0KHJhd0JpbmRpbmdUYXJnZXQpID8/XG4gICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0ZXIuZ2V0Q29udmVydGVkU2luZ2xldG9uKHJhd0JpbmRpbmdUYXJnZXQpKSFcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gbmF2aWdhdGlvblByb3BlcnR5QmluZGluZ3M7XG4gICAgICAgIH0sIHt9IGFzIEVudGl0eVNldFsnbmF2aWdhdGlvblByb3BlcnR5QmluZGluZyddIHwgU2luZ2xldG9uWyduYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nJ10pO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlQW5ub3RhdGlvbnMoY29udmVydGVyOiBDb252ZXJ0ZXIsIHJhd0Fubm90YXRpb25UYXJnZXQ6IGFueSkge1xuICAgIGNvbnN0IG5lc3RlZEFubm90YXRpb25zID0gcmF3QW5ub3RhdGlvblRhcmdldC5hbm5vdGF0aW9ucztcblxuICAgIHJldHVybiAoKSA9PlxuICAgICAgICBjcmVhdGVBbm5vdGF0aW9uc09iamVjdChcbiAgICAgICAgICAgIGNvbnZlcnRlcixcbiAgICAgICAgICAgIHJhd0Fubm90YXRpb25UYXJnZXQsXG4gICAgICAgICAgICBuZXN0ZWRBbm5vdGF0aW9ucyA/PyBjb252ZXJ0ZXIuZ2V0QW5ub3RhdGlvbnMocmF3QW5ub3RhdGlvblRhcmdldC5mdWxseVF1YWxpZmllZE5hbWUpXG4gICAgICAgICk7XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVBbm5vdGF0aW9uc09uQW5ub3RhdGlvbihcbiAgICBjb252ZXJ0ZXI6IENvbnZlcnRlcixcbiAgICBhbm5vdGF0aW9uUmVjb3JkOiBBbm5vdGF0aW9uUmVjb3JkIHwgUmF3QW5ub3RhdGlvbixcbiAgICBhbm5vdGF0aW9uVGVybTogYW55XG4pIHtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBjb25zdCBjdXJyZW50RlFOID0gYW5ub3RhdGlvblRlcm0uZnVsbHlRdWFsaWZpZWROYW1lO1xuXG4gICAgICAgIC8vIGJlIGdyYWNlZnVsIHdoZW4gcmVzb2x2aW5nIGFubm90YXRpb25zIG9uIGFubm90YXRpb25zOiBTb21ldGltZXMgdGhleSBhcmUgcmVmZXJlbmNlZCBkaXJlY3RseSwgc29tZXRpbWVzIHRoZXlcbiAgICAgICAgLy8gYXJlIHBhcnQgb2YgdGhlIGdsb2JhbCBhbm5vdGF0aW9ucyBsaXN0XG4gICAgICAgIGxldCBhbm5vdGF0aW9ucztcbiAgICAgICAgaWYgKGFubm90YXRpb25SZWNvcmQuYW5ub3RhdGlvbnMgJiYgYW5ub3RhdGlvblJlY29yZC5hbm5vdGF0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBhbm5vdGF0aW9ucyA9IGFubm90YXRpb25SZWNvcmQuYW5ub3RhdGlvbnM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhbm5vdGF0aW9ucyA9IGNvbnZlcnRlci5nZXRBbm5vdGF0aW9ucyhjdXJyZW50RlFOKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFubm90YXRpb25zPy5mb3JFYWNoKChhbm5vdGF0aW9uOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGFubm90YXRpb24udGFyZ2V0ID0gY3VycmVudEZRTjtcbiAgICAgICAgICAgIGFubm90YXRpb24uX19zb3VyY2UgPSBhbm5vdGF0aW9uVGVybS5fX3NvdXJjZTtcbiAgICAgICAgICAgIGFubm90YXRpb25bQU5OT1RBVElPTl9UQVJHRVRdID0gYW5ub3RhdGlvblRlcm1bQU5OT1RBVElPTl9UQVJHRVRdO1xuICAgICAgICAgICAgYW5ub3RhdGlvbi5mdWxseVF1YWxpZmllZE5hbWUgPSBgJHtjdXJyZW50RlFOfUAke2Fubm90YXRpb24udGVybX1gO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gY3JlYXRlQW5ub3RhdGlvbnNPYmplY3QoY29udmVydGVyLCBhbm5vdGF0aW9uVGVybSwgYW5ub3RhdGlvbnMgPz8gW10pO1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUFubm90YXRpb25zT2JqZWN0KGNvbnZlcnRlcjogQ29udmVydGVyLCB0YXJnZXQ6IGFueSwgcmF3QW5ub3RhdGlvbnM6IFJhd0Fubm90YXRpb25bXSkge1xuICAgIHJldHVybiByYXdBbm5vdGF0aW9ucy5yZWR1Y2UoKHZvY2FidWxhcnlBbGlhc2VzLCBhbm5vdGF0aW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IFt2b2NBbGlhcywgdm9jVGVybV0gPSBjb252ZXJ0ZXIuc3BsaXRUZXJtKGFubm90YXRpb24udGVybSk7XG4gICAgICAgIGNvbnN0IHZvY1Rlcm1XaXRoUXVhbGlmaWVyID0gYCR7dm9jVGVybX0ke2Fubm90YXRpb24ucXVhbGlmaWVyID8gJyMnICsgYW5ub3RhdGlvbi5xdWFsaWZpZXIgOiAnJ31gO1xuXG4gICAgICAgIGlmICh2b2NhYnVsYXJ5QWxpYXNlc1t2b2NBbGlhc10gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdm9jYWJ1bGFyeUFsaWFzZXNbdm9jQWxpYXNdID0ge307XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXZvY2FidWxhcnlBbGlhc2VzW3ZvY0FsaWFzXS5oYXNPd25Qcm9wZXJ0eSh2b2NUZXJtV2l0aFF1YWxpZmllcikpIHtcbiAgICAgICAgICAgIGxhenkodm9jYWJ1bGFyeUFsaWFzZXNbdm9jQWxpYXNdLCB2b2NUZXJtV2l0aFF1YWxpZmllciwgKCkgPT5cbiAgICAgICAgICAgICAgICBjb252ZXJ0ZXIuZ2V0Q29udmVydGVkRWxlbWVudChcbiAgICAgICAgICAgICAgICAgICAgKGFubm90YXRpb24gYXMgQW5ub3RhdGlvbikuZnVsbHlRdWFsaWZpZWROYW1lLFxuICAgICAgICAgICAgICAgICAgICBhbm5vdGF0aW9uLFxuICAgICAgICAgICAgICAgICAgICAoY29udmVydGVyLCByYXdBbm5vdGF0aW9uKSA9PiBjb252ZXJ0QW5ub3RhdGlvbihjb252ZXJ0ZXIsIHRhcmdldCwgcmF3QW5ub3RhdGlvbilcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2b2NhYnVsYXJ5QWxpYXNlcztcbiAgICB9LCB7fSBhcyBhbnkpO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIEVudGl0eUNvbnRhaW5lci5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyICAgICBDb252ZXJ0ZXJcbiAqIEBwYXJhbSByYXdFbnRpdHlDb250YWluZXIgICAgVW5jb252ZXJ0ZWQgRW50aXR5Q29udGFpbmVyXG4gKiBAcmV0dXJucyBUaGUgY29udmVydGVkIEVudGl0eUNvbnRhaW5lclxuICovXG5mdW5jdGlvbiBjb252ZXJ0RW50aXR5Q29udGFpbmVyKGNvbnZlcnRlcjogQ29udmVydGVyLCByYXdFbnRpdHlDb250YWluZXI6IFJhd0VudGl0eUNvbnRhaW5lcik6IEVudGl0eUNvbnRhaW5lciB7XG4gICAgY29uc3QgY29udmVydGVkRW50aXR5Q29udGFpbmVyID0gcmF3RW50aXR5Q29udGFpbmVyIGFzIEVudGl0eUNvbnRhaW5lcjtcblxuICAgIGxhenkoY29udmVydGVkRW50aXR5Q29udGFpbmVyLCAnYW5ub3RhdGlvbnMnLCByZXNvbHZlQW5ub3RhdGlvbnMoY29udmVydGVyLCByYXdFbnRpdHlDb250YWluZXIpKTtcblxuICAgIGxhenkoY29udmVydGVkRW50aXR5Q29udGFpbmVyLCAnZW50aXR5U2V0cycsIGNvbnZlcnRlci5jb252ZXJ0KGNvbnZlcnRlci5yYXdTY2hlbWEuZW50aXR5U2V0cywgY29udmVydEVudGl0eVNldCkpO1xuXG4gICAgbGF6eShjb252ZXJ0ZWRFbnRpdHlDb250YWluZXIsICdzaW5nbGV0b25zJywgY29udmVydGVyLmNvbnZlcnQoY29udmVydGVyLnJhd1NjaGVtYS5zaW5nbGV0b25zLCBjb252ZXJ0U2luZ2xldG9uKSk7XG5cbiAgICBsYXp5KFxuICAgICAgICBjb252ZXJ0ZWRFbnRpdHlDb250YWluZXIsXG4gICAgICAgICdhY3Rpb25JbXBvcnRzJyxcbiAgICAgICAgY29udmVydGVyLmNvbnZlcnQoY29udmVydGVyLnJhd1NjaGVtYS5hY3Rpb25JbXBvcnRzLCBjb252ZXJ0QWN0aW9uSW1wb3J0KVxuICAgICk7XG5cbiAgICByZXR1cm4gY29udmVydGVkRW50aXR5Q29udGFpbmVyO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgU2luZ2xldG9uLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXIgICBDb252ZXJ0ZXJcbiAqIEBwYXJhbSByYXdTaW5nbGV0b24gIFVuY29udmVydGVkIFNpbmdsZXRvblxuICogQHJldHVybnMgVGhlIGNvbnZlcnRlZCBTaW5nbGV0b25cbiAqL1xuZnVuY3Rpb24gY29udmVydFNpbmdsZXRvbihjb252ZXJ0ZXI6IENvbnZlcnRlciwgcmF3U2luZ2xldG9uOiBSYXdTaW5nbGV0b24pOiBTaW5nbGV0b24ge1xuICAgIGNvbnN0IGNvbnZlcnRlZFNpbmdsZXRvbiA9IHJhd1NpbmdsZXRvbiBhcyB1bmtub3duIGFzIFNpbmdsZXRvbjtcblxuICAgIGxhenkoY29udmVydGVkU2luZ2xldG9uLCAnZW50aXR5VHlwZScsIHJlc29sdmVFbnRpdHlUeXBlKGNvbnZlcnRlciwgcmF3U2luZ2xldG9uLmVudGl0eVR5cGVOYW1lKSk7XG4gICAgbGF6eShjb252ZXJ0ZWRTaW5nbGV0b24sICdhbm5vdGF0aW9ucycsIHJlc29sdmVBbm5vdGF0aW9ucyhjb252ZXJ0ZXIsIGNvbnZlcnRlZFNpbmdsZXRvbikpO1xuXG4gICAgY29uc3QgX3Jhd05hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdzID0gcmF3U2luZ2xldG9uLm5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmc7XG4gICAgbGF6eShcbiAgICAgICAgY29udmVydGVkU2luZ2xldG9uLFxuICAgICAgICAnbmF2aWdhdGlvblByb3BlcnR5QmluZGluZycsXG4gICAgICAgIHJlc29sdmVOYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5ncyhjb252ZXJ0ZXIsIF9yYXdOYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5ncylcbiAgICApO1xuXG4gICAgcmV0dXJuIGNvbnZlcnRlZFNpbmdsZXRvbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBFbnRpdHlTZXQuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlciAgIENvbnZlcnRlclxuICogQHBhcmFtIHJhd0VudGl0eVNldCAgVW5jb252ZXJ0ZWQgRW50aXR5U2V0XG4gKiBAcmV0dXJucyBUaGUgY29udmVydGVkIEVudGl0eVNldFxuICovXG5mdW5jdGlvbiBjb252ZXJ0RW50aXR5U2V0KGNvbnZlcnRlcjogQ29udmVydGVyLCByYXdFbnRpdHlTZXQ6IFJhd0VudGl0eVNldCk6IEVudGl0eVNldCB7XG4gICAgY29uc3QgY29udmVydGVkRW50aXR5U2V0ID0gcmF3RW50aXR5U2V0IGFzIHVua25vd24gYXMgRW50aXR5U2V0O1xuXG4gICAgbGF6eShjb252ZXJ0ZWRFbnRpdHlTZXQsICdlbnRpdHlUeXBlJywgcmVzb2x2ZUVudGl0eVR5cGUoY29udmVydGVyLCByYXdFbnRpdHlTZXQuZW50aXR5VHlwZU5hbWUpKTtcbiAgICBsYXp5KGNvbnZlcnRlZEVudGl0eVNldCwgJ2Fubm90YXRpb25zJywgcmVzb2x2ZUFubm90YXRpb25zKGNvbnZlcnRlciwgY29udmVydGVkRW50aXR5U2V0KSk7XG5cbiAgICBjb25zdCBfcmF3TmF2aWdhdGlvblByb3BlcnR5QmluZGluZ3MgPSByYXdFbnRpdHlTZXQubmF2aWdhdGlvblByb3BlcnR5QmluZGluZztcbiAgICBsYXp5KFxuICAgICAgICBjb252ZXJ0ZWRFbnRpdHlTZXQsXG4gICAgICAgICduYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nJyxcbiAgICAgICAgcmVzb2x2ZU5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdzKGNvbnZlcnRlciwgX3Jhd05hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdzKVxuICAgICk7XG5cbiAgICByZXR1cm4gY29udmVydGVkRW50aXR5U2V0O1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIEVudGl0eVR5cGUuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlciAgIENvbnZlcnRlclxuICogQHBhcmFtIHJhd0VudGl0eVR5cGUgIFVuY29udmVydGVkIEVudGl0eVR5cGVcbiAqIEByZXR1cm5zIFRoZSBjb252ZXJ0ZWQgRW50aXR5VHlwZVxuICovXG5mdW5jdGlvbiBjb252ZXJ0RW50aXR5VHlwZShjb252ZXJ0ZXI6IENvbnZlcnRlciwgcmF3RW50aXR5VHlwZTogUmF3RW50aXR5VHlwZSk6IEVudGl0eVR5cGUge1xuICAgIGNvbnN0IGNvbnZlcnRlZEVudGl0eVR5cGUgPSByYXdFbnRpdHlUeXBlIGFzIEVudGl0eVR5cGU7XG5cbiAgICByYXdFbnRpdHlUeXBlLmtleXMuZm9yRWFjaCgoa2V5UHJvcDogYW55KSA9PiB7XG4gICAgICAgIGtleVByb3AuaXNLZXkgPSB0cnVlO1xuICAgIH0pO1xuXG4gICAgbGF6eShjb252ZXJ0ZWRFbnRpdHlUeXBlLCAnYW5ub3RhdGlvbnMnLCByZXNvbHZlQW5ub3RhdGlvbnMoY29udmVydGVyLCByYXdFbnRpdHlUeXBlKSk7XG5cbiAgICBsYXp5KGNvbnZlcnRlZEVudGl0eVR5cGUsICdrZXlzJywgY29udmVydGVyLmNvbnZlcnQocmF3RW50aXR5VHlwZS5rZXlzLCBjb252ZXJ0UHJvcGVydHkpKTtcbiAgICBsYXp5KGNvbnZlcnRlZEVudGl0eVR5cGUsICdlbnRpdHlQcm9wZXJ0aWVzJywgY29udmVydGVyLmNvbnZlcnQocmF3RW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzLCBjb252ZXJ0UHJvcGVydHkpKTtcbiAgICBsYXp5KFxuICAgICAgICBjb252ZXJ0ZWRFbnRpdHlUeXBlLFxuICAgICAgICAnbmF2aWdhdGlvblByb3BlcnRpZXMnLFxuICAgICAgICBjb252ZXJ0ZXIuY29udmVydChyYXdFbnRpdHlUeXBlLm5hdmlnYXRpb25Qcm9wZXJ0aWVzIGFzIGFueVtdLCBjb252ZXJ0TmF2aWdhdGlvblByb3BlcnR5KVxuICAgICk7XG5cbiAgICBsYXp5KGNvbnZlcnRlZEVudGl0eVR5cGUsICdhY3Rpb25zJywgKCkgPT5cbiAgICAgICAgY29udmVydGVyLnJhd1NjaGVtYS5hY3Rpb25zXG4gICAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgICAgIChyYXdBY3Rpb24pID0+XG4gICAgICAgICAgICAgICAgICAgIHJhd0FjdGlvbi5pc0JvdW5kICYmXG4gICAgICAgICAgICAgICAgICAgIChyYXdBY3Rpb24uc291cmNlVHlwZSA9PT0gcmF3RW50aXR5VHlwZS5mdWxseVF1YWxpZmllZE5hbWUgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhd0FjdGlvbi5zb3VyY2VUeXBlID09PSBgQ29sbGVjdGlvbigke3Jhd0VudGl0eVR5cGUuZnVsbHlRdWFsaWZpZWROYW1lfSlgKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnJlZHVjZSgoYWN0aW9ucywgcmF3QWN0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmFtZSA9IGAke2NvbnZlcnRlci5yYXdTY2hlbWEubmFtZXNwYWNlfS4ke3Jhd0FjdGlvbi5uYW1lfWA7XG4gICAgICAgICAgICAgICAgYWN0aW9uc1tuYW1lXSA9IGNvbnZlcnRlci5nZXRDb252ZXJ0ZWRBY3Rpb24ocmF3QWN0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSkhO1xuICAgICAgICAgICAgICAgIHJldHVybiBhY3Rpb25zO1xuICAgICAgICAgICAgfSwge30gYXMgRW50aXR5VHlwZVsnYWN0aW9ucyddKVxuICAgICk7XG5cbiAgICBjb252ZXJ0ZWRFbnRpdHlUeXBlLnJlc29sdmVQYXRoID0gKHJlbGF0aXZlUGF0aDogc3RyaW5nLCBpbmNsdWRlVmlzaXRlZE9iamVjdHM/OiBib29sZWFuKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZVRhcmdldChjb252ZXJ0ZXIsIHJhd0VudGl0eVR5cGUsIHJlbGF0aXZlUGF0aCk7XG4gICAgICAgIGlmIChpbmNsdWRlVmlzaXRlZE9iamVjdHMpIHtcbiAgICAgICAgICAgIHJldHVybiB7IHRhcmdldDogcmVzb2x2ZWQudGFyZ2V0LCB2aXNpdGVkT2JqZWN0czogcmVzb2x2ZWQub2JqZWN0UGF0aCwgbWVzc2FnZXM6IHJlc29sdmVkLm1lc3NhZ2VzIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZWQudGFyZ2V0O1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBjb252ZXJ0ZWRFbnRpdHlUeXBlO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgUHJvcGVydHkuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlciAgIENvbnZlcnRlclxuICogQHBhcmFtIHJhd1Byb3BlcnR5ICBVbmNvbnZlcnRlZCBQcm9wZXJ0eVxuICogQHJldHVybnMgVGhlIGNvbnZlcnRlZCBQcm9wZXJ0eVxuICovXG5mdW5jdGlvbiBjb252ZXJ0UHJvcGVydHkoY29udmVydGVyOiBDb252ZXJ0ZXIsIHJhd1Byb3BlcnR5OiBSYXdQcm9wZXJ0eSk6IFByb3BlcnR5IHtcbiAgICBjb25zdCBjb252ZXJ0ZWRQcm9wZXJ0eSA9IHJhd1Byb3BlcnR5IGFzIFByb3BlcnR5O1xuXG4gICAgbGF6eShjb252ZXJ0ZWRQcm9wZXJ0eSwgJ2Fubm90YXRpb25zJywgcmVzb2x2ZUFubm90YXRpb25zKGNvbnZlcnRlciwgcmF3UHJvcGVydHkpKTtcblxuICAgIGxhenkoY29udmVydGVkUHJvcGVydHksICd0YXJnZXRUeXBlJywgKCkgPT4ge1xuICAgICAgICBjb25zdCB0eXBlID0gcmF3UHJvcGVydHkudHlwZTtcbiAgICAgICAgY29uc3QgdHlwZU5hbWUgPSB0eXBlLnN0YXJ0c1dpdGgoJ0NvbGxlY3Rpb24nKSA/IHR5cGUuc3Vic3RyaW5nKDExLCB0eXBlLmxlbmd0aCAtIDEpIDogdHlwZTtcblxuICAgICAgICByZXR1cm4gY29udmVydGVyLmdldENvbnZlcnRlZENvbXBsZXhUeXBlKHR5cGVOYW1lKSA/PyBjb252ZXJ0ZXIuZ2V0Q29udmVydGVkVHlwZURlZmluaXRpb24odHlwZU5hbWUpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNvbnZlcnRlZFByb3BlcnR5O1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgTmF2aWdhdGlvblByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXIgICBDb252ZXJ0ZXJcbiAqIEBwYXJhbSByYXdOYXZpZ2F0aW9uUHJvcGVydHkgIFVuY29udmVydGVkIE5hdmlnYXRpb25Qcm9wZXJ0eVxuICogQHJldHVybnMgVGhlIGNvbnZlcnRlZCBOYXZpZ2F0aW9uUHJvcGVydHlcbiAqL1xuZnVuY3Rpb24gY29udmVydE5hdmlnYXRpb25Qcm9wZXJ0eShcbiAgICBjb252ZXJ0ZXI6IENvbnZlcnRlcixcbiAgICByYXdOYXZpZ2F0aW9uUHJvcGVydHk6IFJhd1YyTmF2aWdhdGlvblByb3BlcnR5IHwgUmF3VjROYXZpZ2F0aW9uUHJvcGVydHlcbik6IE5hdmlnYXRpb25Qcm9wZXJ0eSB7XG4gICAgY29uc3QgY29udmVydGVkTmF2aWdhdGlvblByb3BlcnR5ID0gcmF3TmF2aWdhdGlvblByb3BlcnR5IGFzIE5hdmlnYXRpb25Qcm9wZXJ0eTtcblxuICAgIGNvbnZlcnRlZE5hdmlnYXRpb25Qcm9wZXJ0eS5yZWZlcmVudGlhbENvbnN0cmFpbnQgPSBjb252ZXJ0ZWROYXZpZ2F0aW9uUHJvcGVydHkucmVmZXJlbnRpYWxDb25zdHJhaW50ID8/IFtdO1xuXG4gICAgaWYgKCFpc1Y0TmF2aWdhdGlvblByb3BlcnR5KHJhd05hdmlnYXRpb25Qcm9wZXJ0eSkpIHtcbiAgICAgICAgY29uc3QgYXNzb2NpYXRpb25FbmQgPSBjb252ZXJ0ZXIucmF3U2NoZW1hLmFzc29jaWF0aW9uc1xuICAgICAgICAgICAgLmZpbmQoKGFzc29jaWF0aW9uKSA9PiBhc3NvY2lhdGlvbi5mdWxseVF1YWxpZmllZE5hbWUgPT09IHJhd05hdmlnYXRpb25Qcm9wZXJ0eS5yZWxhdGlvbnNoaXApXG4gICAgICAgICAgICA/LmFzc29jaWF0aW9uRW5kLmZpbmQoKGVuZCkgPT4gZW5kLnJvbGUgPT09IHJhd05hdmlnYXRpb25Qcm9wZXJ0eS50b1JvbGUpO1xuXG4gICAgICAgIGNvbnZlcnRlZE5hdmlnYXRpb25Qcm9wZXJ0eS5pc0NvbGxlY3Rpb24gPSBhc3NvY2lhdGlvbkVuZD8ubXVsdGlwbGljaXR5ID09PSAnKic7XG4gICAgICAgIGNvbnZlcnRlZE5hdmlnYXRpb25Qcm9wZXJ0eS50YXJnZXRUeXBlTmFtZSA9IGFzc29jaWF0aW9uRW5kPy50eXBlID8/ICcnO1xuICAgIH1cblxuICAgIGxhenkoXG4gICAgICAgIGNvbnZlcnRlZE5hdmlnYXRpb25Qcm9wZXJ0eSxcbiAgICAgICAgJ3RhcmdldFR5cGUnLFxuICAgICAgICByZXNvbHZlRW50aXR5VHlwZShjb252ZXJ0ZXIsIChyYXdOYXZpZ2F0aW9uUHJvcGVydHkgYXMgTmF2aWdhdGlvblByb3BlcnR5KS50YXJnZXRUeXBlTmFtZSlcbiAgICApO1xuXG4gICAgbGF6eShjb252ZXJ0ZWROYXZpZ2F0aW9uUHJvcGVydHksICdhbm5vdGF0aW9ucycsIHJlc29sdmVBbm5vdGF0aW9ucyhjb252ZXJ0ZXIsIHJhd05hdmlnYXRpb25Qcm9wZXJ0eSkpO1xuXG4gICAgcmV0dXJuIGNvbnZlcnRlZE5hdmlnYXRpb25Qcm9wZXJ0eTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBBY3Rpb25JbXBvcnQuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlciAgIENvbnZlcnRlclxuICogQHBhcmFtIHJhd0FjdGlvbkltcG9ydCAgVW5jb252ZXJ0ZWQgQWN0aW9uSW1wb3J0XG4gKiBAcmV0dXJucyBUaGUgY29udmVydGVkIEFjdGlvbkltcG9ydFxuICovXG5mdW5jdGlvbiBjb252ZXJ0QWN0aW9uSW1wb3J0KGNvbnZlcnRlcjogQ29udmVydGVyLCByYXdBY3Rpb25JbXBvcnQ6IFJhd0FjdGlvbkltcG9ydCk6IEFjdGlvbkltcG9ydCB7XG4gICAgY29uc3QgY29udmVydGVkQWN0aW9uSW1wb3J0ID0gcmF3QWN0aW9uSW1wb3J0IGFzIEFjdGlvbkltcG9ydDtcblxuICAgIGxhenkoY29udmVydGVkQWN0aW9uSW1wb3J0LCAnYW5ub3RhdGlvbnMnLCByZXNvbHZlQW5ub3RhdGlvbnMoY29udmVydGVyLCByYXdBY3Rpb25JbXBvcnQpKTtcblxuICAgIGxhenkoY29udmVydGVkQWN0aW9uSW1wb3J0LCAnYWN0aW9uJywgKCkgPT4ge1xuICAgICAgICBjb25zdCByYXdBY3Rpb25zID0gY29udmVydGVyLnJhd1NjaGVtYS5hY3Rpb25zLmZpbHRlcihcbiAgICAgICAgICAgIChyYXdBY3Rpb24pID0+ICFyYXdBY3Rpb24uaXNCb3VuZCAmJiByYXdBY3Rpb24uZnVsbHlRdWFsaWZpZWROYW1lLnN0YXJ0c1dpdGgocmF3QWN0aW9uSW1wb3J0LmFjdGlvbk5hbWUpXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gdGhpcyBhbHdheXMgcmVzb2x2ZXMgdG8gYSB1bmlxdWUgdW5ib3VuZCBhY3Rpb24sIGJ1dCByZXNvbHV0aW9uIG9mIHVuYm91bmQgZnVuY3Rpb25zIGNhbiBiZSBhbWJpZ3VvdXM6XG4gICAgICAgIC8vIHVuYm91bmQgZnVuY3Rpb24gRlFOcyBoYXZlIG92ZXJsb2FkcyBkZXBlbmRpbmcgb24gYWxsIG9mIHRoZWlyIHBhcmFtZXRlcnNcbiAgICAgICAgaWYgKHJhd0FjdGlvbnMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgY29udmVydGVyLmxvZ0Vycm9yKGBBbWJpZ3VvdXMgcmVmZXJlbmNlIGluIGFjdGlvbiBpbXBvcnQ6ICR7cmF3QWN0aW9uSW1wb3J0LmZ1bGx5UXVhbGlmaWVkTmFtZX1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHJldHVybiB0aGUgZmlyc3QgbWF0Y2hpbmcgYWN0aW9uIG9yIGZ1bmN0aW9uXG4gICAgICAgIHJldHVybiBjb252ZXJ0ZXIuZ2V0Q29udmVydGVkQWN0aW9uKHJhd0FjdGlvbnNbMF0uZnVsbHlRdWFsaWZpZWROYW1lKSE7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gY29udmVydGVkQWN0aW9uSW1wb3J0O1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIEFjdGlvbi5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyICAgQ29udmVydGVyXG4gKiBAcGFyYW0gcmF3QWN0aW9uICBVbmNvbnZlcnRlZCBBY3Rpb25cbiAqIEByZXR1cm5zIFRoZSBjb252ZXJ0ZWQgQWN0aW9uXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRBY3Rpb24oY29udmVydGVyOiBDb252ZXJ0ZXIsIHJhd0FjdGlvbjogUmF3QWN0aW9uKTogQWN0aW9uIHtcbiAgICBjb25zdCBjb252ZXJ0ZWRBY3Rpb24gPSByYXdBY3Rpb24gYXMgQWN0aW9uO1xuXG4gICAgaWYgKGNvbnZlcnRlZEFjdGlvbi5zb3VyY2VUeXBlKSB7XG4gICAgICAgIGxhenkoY29udmVydGVkQWN0aW9uLCAnc291cmNlRW50aXR5VHlwZScsIHJlc29sdmVFbnRpdHlUeXBlKGNvbnZlcnRlciwgcmF3QWN0aW9uLnNvdXJjZVR5cGUpKTtcbiAgICB9XG5cbiAgICBpZiAoY29udmVydGVkQWN0aW9uLnJldHVyblR5cGUpIHtcbiAgICAgICAgbGF6eShjb252ZXJ0ZWRBY3Rpb24sICdyZXR1cm5FbnRpdHlUeXBlJywgcmVzb2x2ZUVudGl0eVR5cGUoY29udmVydGVyLCByYXdBY3Rpb24ucmV0dXJuVHlwZSkpO1xuICAgIH1cblxuICAgIGxhenkoY29udmVydGVkQWN0aW9uLCAncGFyYW1ldGVycycsIGNvbnZlcnRlci5jb252ZXJ0KHJhd0FjdGlvbi5wYXJhbWV0ZXJzLCBjb252ZXJ0QWN0aW9uUGFyYW1ldGVyKSk7XG5cbiAgICBsYXp5KGNvbnZlcnRlZEFjdGlvbiwgJ2Fubm90YXRpb25zJywgKCkgPT4ge1xuICAgICAgICAvKlxuICAgICAgICAgICAgQW5ub3RhdGlvbiByZXNvbHV0aW9uIHJ1bGUgZm9yIGFjdGlvbnM6XG5cbiAgICAgICAgICAgICgxKSBhbm5vdGF0aW9uIHRhcmdldDogdGhlIHNwZWNpZmljIHVuYm91bmQgb3IgYm91bmQgb3ZlcmxvYWQsIGUuZy5cbiAgICAgICAgICAgICAgICAgICAgLSBmb3IgYWN0aW9uczogICBcIngueS56LnVuYm91bmRBY3Rpb24oKVwiIC8gXCJ4Lnkuei5ib3VuZEFjdGlvbih4Lnkuei5FbnRpdHkpXCJcbiAgICAgICAgICAgICAgICAgICAgLSBmb3IgZnVuY3Rpb25zOiBcIngueS56LnVuYm91bmRGdW5jdGlvbihFZG0uU3RyaW5nKVwiIC8gXCJ4Lnkuei51bmJvdW5kRnVuY3Rpb24oeC55LnouRW50aXR5LEVkbS5TdHJpbmcpXCJcbiAgICAgICAgICAgICgyKSBhbm5vdGF0aW9uIHRhcmdldDogdW5zcGVjaWZpZWQgb3ZlcmxvYWQsIGUuZy5cbiAgICAgICAgICAgICAgICAtIGZvciBhY3Rpb25zOiAgIFwieC55LnoudW5ib3VuZEFjdGlvblwiIC8gXCJ4Lnkuei5ib3VuZEFjdGlvblwiXG4gICAgICAgICAgICAgICAgLSBmb3IgZnVuY3Rpb25zOiBcIngueS56LnVuYm91bmRGdW5jdGlvblwiIC8gXCJ4Lnkuei51bmJvdW5kRnVuY3Rpb25cIlxuXG4gICAgICAgICAgICBXaGVuIHJlc29sdmluZyAoMSkgdGFrZXMgcHJlY2VkZW5jZSBvdmVyICgyKS4gVGhhdCBpcywgYW5ub3RhdGlvbnMgb24gdGhlIHNwZWNpZmljIG92ZXJsb2FkIG92ZXJ3cml0ZVxuICAgICAgICAgICAgYW5ub3RhdGlvbnMgb24gdGhlIHVuc3BlY2lmaWMgb3ZlcmxvYWQsIG9uIHRlcm0vcXVhbGlmaWVyIGxldmVsLlxuICAgICAgICAqL1xuXG4gICAgICAgIGNvbnN0IHVuc3BlY2lmaWNPdmVybG9hZFRhcmdldCA9IHN1YnN0cmluZ0JlZm9yZUZpcnN0KHJhd0FjdGlvbi5mdWxseVF1YWxpZmllZE5hbWUsICcoJyk7XG4gICAgICAgIGNvbnN0IHNwZWNpZmljT3ZlcmxvYWRUYXJnZXQgPSByYXdBY3Rpb24uZnVsbHlRdWFsaWZpZWROYW1lO1xuXG4gICAgICAgIGNvbnN0IGVmZmVjdGl2ZUFubm90YXRpb25zID0gY29udmVydGVyLmdldEFubm90YXRpb25zKHNwZWNpZmljT3ZlcmxvYWRUYXJnZXQpO1xuICAgICAgICBjb25zdCB1bnNwZWNpZmljQW5ub3RhdGlvbnMgPSBjb252ZXJ0ZXIuZ2V0QW5ub3RhdGlvbnModW5zcGVjaWZpY092ZXJsb2FkVGFyZ2V0KTtcblxuICAgICAgICBmb3IgKGNvbnN0IHVuc3BlY2lmaWNBbm5vdGF0aW9uIG9mIHVuc3BlY2lmaWNBbm5vdGF0aW9ucykge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICFlZmZlY3RpdmVBbm5vdGF0aW9ucy5zb21lKFxuICAgICAgICAgICAgICAgICAgICAoYW5ub3RhdGlvbikgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIGFubm90YXRpb24udGVybSA9PT0gdW5zcGVjaWZpY0Fubm90YXRpb24udGVybSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgYW5ub3RhdGlvbi5xdWFsaWZpZXIgPT09IHVuc3BlY2lmaWNBbm5vdGF0aW9uLnF1YWxpZmllclxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGVmZmVjdGl2ZUFubm90YXRpb25zLnB1c2godW5zcGVjaWZpY0Fubm90YXRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNyZWF0ZUFubm90YXRpb25zT2JqZWN0KGNvbnZlcnRlciwgcmF3QWN0aW9uLCBlZmZlY3RpdmVBbm5vdGF0aW9ucyk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gY29udmVydGVkQWN0aW9uO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIEFjdGlvblBhcmFtZXRlci5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyICAgQ29udmVydGVyXG4gKiBAcGFyYW0gcmF3QWN0aW9uUGFyYW1ldGVyICBVbmNvbnZlcnRlZCBBY3Rpb25QYXJhbWV0ZXJcbiAqIEByZXR1cm5zIFRoZSBjb252ZXJ0ZWQgQWN0aW9uUGFyYW1ldGVyXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRBY3Rpb25QYXJhbWV0ZXIoXG4gICAgY29udmVydGVyOiBDb252ZXJ0ZXIsXG4gICAgcmF3QWN0aW9uUGFyYW1ldGVyOiBSYXdBY3Rpb25bJ3BhcmFtZXRlcnMnXVtudW1iZXJdXG4pOiBBY3Rpb25QYXJhbWV0ZXIge1xuICAgIGNvbnN0IGNvbnZlcnRlZEFjdGlvblBhcmFtZXRlciA9IHJhd0FjdGlvblBhcmFtZXRlciBhcyBBY3Rpb25QYXJhbWV0ZXI7XG5cbiAgICBsYXp5KFxuICAgICAgICBjb252ZXJ0ZWRBY3Rpb25QYXJhbWV0ZXIsXG4gICAgICAgICd0eXBlUmVmZXJlbmNlJyxcbiAgICAgICAgKCkgPT5cbiAgICAgICAgICAgIGNvbnZlcnRlci5nZXRDb252ZXJ0ZWRFbnRpdHlUeXBlKHJhd0FjdGlvblBhcmFtZXRlci50eXBlKSA/P1xuICAgICAgICAgICAgY29udmVydGVyLmdldENvbnZlcnRlZENvbXBsZXhUeXBlKHJhd0FjdGlvblBhcmFtZXRlci50eXBlKSA/P1xuICAgICAgICAgICAgY29udmVydGVyLmdldENvbnZlcnRlZFR5cGVEZWZpbml0aW9uKHJhd0FjdGlvblBhcmFtZXRlci50eXBlKVxuICAgICk7XG5cbiAgICBsYXp5KGNvbnZlcnRlZEFjdGlvblBhcmFtZXRlciwgJ2Fubm90YXRpb25zJywgKCkgPT4ge1xuICAgICAgICAvLyBhbm5vdGF0aW9ucyBvbiBhY3Rpb24gcGFyYW1ldGVycyBhcmUgcmVzb2x2ZWQgZm9sbG93aW5nIHRoZSBydWxlcyBmb3IgYWN0aW9uc1xuICAgICAgICBjb25zdCB1bnNwZWNpZmljT3ZlcmxvYWRUYXJnZXQgPVxuICAgICAgICAgICAgcmF3QWN0aW9uUGFyYW1ldGVyLmZ1bGx5UXVhbGlmaWVkTmFtZS5zdWJzdHJpbmcoMCwgcmF3QWN0aW9uUGFyYW1ldGVyLmZ1bGx5UXVhbGlmaWVkTmFtZS5pbmRleE9mKCcoJykpICtcbiAgICAgICAgICAgIHJhd0FjdGlvblBhcmFtZXRlci5mdWxseVF1YWxpZmllZE5hbWUuc3Vic3RyaW5nKHJhd0FjdGlvblBhcmFtZXRlci5mdWxseVF1YWxpZmllZE5hbWUuaW5kZXhPZignKScpICsgMSk7XG4gICAgICAgIGNvbnN0IHNwZWNpZmljT3ZlcmxvYWRUYXJnZXQgPSByYXdBY3Rpb25QYXJhbWV0ZXIuZnVsbHlRdWFsaWZpZWROYW1lO1xuXG4gICAgICAgIGNvbnN0IGVmZmVjdGl2ZUFubm90YXRpb25zID0gY29udmVydGVyLmdldEFubm90YXRpb25zKHNwZWNpZmljT3ZlcmxvYWRUYXJnZXQpO1xuICAgICAgICBjb25zdCB1bnNwZWNpZmljQW5ub3RhdGlvbnMgPSBjb252ZXJ0ZXIuZ2V0QW5ub3RhdGlvbnModW5zcGVjaWZpY092ZXJsb2FkVGFyZ2V0KTtcblxuICAgICAgICBmb3IgKGNvbnN0IHVuc3BlY2lmaWNBbm5vdGF0aW9uIG9mIHVuc3BlY2lmaWNBbm5vdGF0aW9ucykge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICFlZmZlY3RpdmVBbm5vdGF0aW9ucy5zb21lKFxuICAgICAgICAgICAgICAgICAgICAoYW5ub3RhdGlvbikgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIGFubm90YXRpb24udGVybSA9PT0gdW5zcGVjaWZpY0Fubm90YXRpb24udGVybSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgYW5ub3RhdGlvbi5xdWFsaWZpZXIgPT09IHVuc3BlY2lmaWNBbm5vdGF0aW9uLnF1YWxpZmllclxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGVmZmVjdGl2ZUFubm90YXRpb25zLnB1c2godW5zcGVjaWZpY0Fubm90YXRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNyZWF0ZUFubm90YXRpb25zT2JqZWN0KGNvbnZlcnRlciwgcmF3QWN0aW9uUGFyYW1ldGVyLCBlZmZlY3RpdmVBbm5vdGF0aW9ucyk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gY29udmVydGVkQWN0aW9uUGFyYW1ldGVyO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgQ29tcGxleFR5cGUuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlciAgIENvbnZlcnRlclxuICogQHBhcmFtIHJhd0NvbXBsZXhUeXBlICBVbmNvbnZlcnRlZCBDb21wbGV4VHlwZVxuICogQHJldHVybnMgVGhlIGNvbnZlcnRlZCBDb21wbGV4VHlwZVxuICovXG5mdW5jdGlvbiBjb252ZXJ0Q29tcGxleFR5cGUoY29udmVydGVyOiBDb252ZXJ0ZXIsIHJhd0NvbXBsZXhUeXBlOiBSYXdDb21wbGV4VHlwZSk6IENvbXBsZXhUeXBlIHtcbiAgICBjb25zdCBjb252ZXJ0ZWRDb21wbGV4VHlwZSA9IHJhd0NvbXBsZXhUeXBlIGFzIENvbXBsZXhUeXBlO1xuXG4gICAgbGF6eShjb252ZXJ0ZWRDb21wbGV4VHlwZSwgJ3Byb3BlcnRpZXMnLCBjb252ZXJ0ZXIuY29udmVydChyYXdDb21wbGV4VHlwZS5wcm9wZXJ0aWVzLCBjb252ZXJ0UHJvcGVydHkpKTtcbiAgICBsYXp5KFxuICAgICAgICBjb252ZXJ0ZWRDb21wbGV4VHlwZSxcbiAgICAgICAgJ25hdmlnYXRpb25Qcm9wZXJ0aWVzJyxcbiAgICAgICAgY29udmVydGVyLmNvbnZlcnQocmF3Q29tcGxleFR5cGUubmF2aWdhdGlvblByb3BlcnRpZXMgYXMgYW55W10sIGNvbnZlcnROYXZpZ2F0aW9uUHJvcGVydHkpXG4gICAgKTtcbiAgICBsYXp5KGNvbnZlcnRlZENvbXBsZXhUeXBlLCAnYW5ub3RhdGlvbnMnLCByZXNvbHZlQW5ub3RhdGlvbnMoY29udmVydGVyLCByYXdDb21wbGV4VHlwZSkpO1xuXG4gICAgcmV0dXJuIGNvbnZlcnRlZENvbXBsZXhUeXBlO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgVHlwZURlZmluaXRpb24uXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlciAgIENvbnZlcnRlclxuICogQHBhcmFtIHJhd1R5cGVEZWZpbml0aW9uICBVbmNvbnZlcnRlZCBUeXBlRGVmaW5pdGlvblxuICogQHJldHVybnMgVGhlIGNvbnZlcnRlZCBUeXBlRGVmaW5pdGlvblxuICovXG5mdW5jdGlvbiBjb252ZXJ0VHlwZURlZmluaXRpb24oY29udmVydGVyOiBDb252ZXJ0ZXIsIHJhd1R5cGVEZWZpbml0aW9uOiBSYXdUeXBlRGVmaW5pdGlvbik6IFR5cGVEZWZpbml0aW9uIHtcbiAgICBjb25zdCBjb252ZXJ0ZWRUeXBlRGVmaW5pdGlvbiA9IHJhd1R5cGVEZWZpbml0aW9uIGFzIFR5cGVEZWZpbml0aW9uO1xuXG4gICAgbGF6eShjb252ZXJ0ZWRUeXBlRGVmaW5pdGlvbiwgJ2Fubm90YXRpb25zJywgcmVzb2x2ZUFubm90YXRpb25zKGNvbnZlcnRlciwgcmF3VHlwZURlZmluaXRpb24pKTtcblxuICAgIHJldHVybiBjb252ZXJ0ZWRUeXBlRGVmaW5pdGlvbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGEgUmF3TWV0YWRhdGEgaW50byBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gdG8gYmUgdXNlZCB0byBlYXNpbHkgbmF2aWdhdGUgYSBtZXRhZGF0YSBvYmplY3QgYW5kIGl0cyBhbm5vdGF0aW9uLlxuICpcbiAqIEBwYXJhbSByYXdNZXRhZGF0YVxuICogQHJldHVybnMgdGhlIGNvbnZlcnRlZCByZXByZXNlbnRhdGlvbiBvZiB0aGUgbWV0YWRhdGEuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0KHJhd01ldGFkYXRhOiBSYXdNZXRhZGF0YSk6IENvbnZlcnRlZE1ldGFkYXRhIHtcbiAgICAvLyBDb252ZXJ0ZXIgT3V0cHV0XG4gICAgY29uc3QgY29udmVydGVkT3V0cHV0OiBDb252ZXJ0ZWRNZXRhZGF0YSA9IHtcbiAgICAgICAgdmVyc2lvbjogcmF3TWV0YWRhdGEudmVyc2lvbixcbiAgICAgICAgbmFtZXNwYWNlOiByYXdNZXRhZGF0YS5zY2hlbWEubmFtZXNwYWNlLFxuICAgICAgICBhbm5vdGF0aW9uczogcmF3TWV0YWRhdGEuc2NoZW1hLmFubm90YXRpb25zLFxuICAgICAgICByZWZlcmVuY2VzOiBWb2NhYnVsYXJ5UmVmZXJlbmNlcyxcbiAgICAgICAgZGlhZ25vc3RpY3M6IFtdXG4gICAgfSBhcyBhbnk7XG5cbiAgICAvLyBmYWxsIGJhY2sgb24gdGhlIGRlZmF1bHQgcmVmZXJlbmNlcyBpZiB0aGUgY2FsbGVyIGRvZXMgbm90IHNwZWNpZnkgYW55XG4gICAgaWYgKHJhd01ldGFkYXRhLnJlZmVyZW5jZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJhd01ldGFkYXRhLnJlZmVyZW5jZXMgPSBWb2NhYnVsYXJ5UmVmZXJlbmNlcztcbiAgICB9XG5cbiAgICAvLyBDb252ZXJ0ZXJcbiAgICBjb25zdCBjb252ZXJ0ZXIgPSBuZXcgQ29udmVydGVyKHJhd01ldGFkYXRhLCBjb252ZXJ0ZWRPdXRwdXQpO1xuXG4gICAgbGF6eShcbiAgICAgICAgY29udmVydGVkT3V0cHV0LFxuICAgICAgICAnZW50aXR5Q29udGFpbmVyJyxcbiAgICAgICAgY29udmVydGVyLmNvbnZlcnQoY29udmVydGVyLnJhd1NjaGVtYS5lbnRpdHlDb250YWluZXIsIGNvbnZlcnRFbnRpdHlDb250YWluZXIpXG4gICAgKTtcbiAgICBsYXp5KGNvbnZlcnRlZE91dHB1dCwgJ2VudGl0eVNldHMnLCBjb252ZXJ0ZXIuY29udmVydChjb252ZXJ0ZXIucmF3U2NoZW1hLmVudGl0eVNldHMsIGNvbnZlcnRFbnRpdHlTZXQpKTtcbiAgICBsYXp5KGNvbnZlcnRlZE91dHB1dCwgJ3NpbmdsZXRvbnMnLCBjb252ZXJ0ZXIuY29udmVydChjb252ZXJ0ZXIucmF3U2NoZW1hLnNpbmdsZXRvbnMsIGNvbnZlcnRTaW5nbGV0b24pKTtcbiAgICBsYXp5KGNvbnZlcnRlZE91dHB1dCwgJ2VudGl0eVR5cGVzJywgY29udmVydGVyLmNvbnZlcnQoY29udmVydGVyLnJhd1NjaGVtYS5lbnRpdHlUeXBlcywgY29udmVydEVudGl0eVR5cGUpKTtcbiAgICBsYXp5KGNvbnZlcnRlZE91dHB1dCwgJ2FjdGlvbnMnLCBjb252ZXJ0ZXIuY29udmVydChjb252ZXJ0ZXIucmF3U2NoZW1hLmFjdGlvbnMsIGNvbnZlcnRBY3Rpb24pKTtcbiAgICBsYXp5KGNvbnZlcnRlZE91dHB1dCwgJ2NvbXBsZXhUeXBlcycsIGNvbnZlcnRlci5jb252ZXJ0KGNvbnZlcnRlci5yYXdTY2hlbWEuY29tcGxleFR5cGVzLCBjb252ZXJ0Q29tcGxleFR5cGUpKTtcbiAgICBsYXp5KGNvbnZlcnRlZE91dHB1dCwgJ2FjdGlvbkltcG9ydHMnLCBjb252ZXJ0ZXIuY29udmVydChjb252ZXJ0ZXIucmF3U2NoZW1hLmFjdGlvbkltcG9ydHMsIGNvbnZlcnRBY3Rpb25JbXBvcnQpKTtcbiAgICBsYXp5KFxuICAgICAgICBjb252ZXJ0ZWRPdXRwdXQsXG4gICAgICAgICd0eXBlRGVmaW5pdGlvbnMnLFxuICAgICAgICBjb252ZXJ0ZXIuY29udmVydChjb252ZXJ0ZXIucmF3U2NoZW1hLnR5cGVEZWZpbml0aW9ucywgY29udmVydFR5cGVEZWZpbml0aW9uKVxuICAgICk7XG5cbiAgICBjb252ZXJ0ZWRPdXRwdXQucmVzb2x2ZVBhdGggPSBmdW5jdGlvbiByZXNvbHZlUGF0aDxUPihwYXRoOiBzdHJpbmcpOiBSZXNvbHV0aW9uVGFyZ2V0PFQ+IHtcbiAgICAgICAgY29uc3QgdGFyZ2V0UmVzb2x1dGlvbiA9IHJlc29sdmVUYXJnZXQ8VD4oY29udmVydGVyLCB1bmRlZmluZWQsIHBhdGgpO1xuICAgICAgICBpZiAodGFyZ2V0UmVzb2x1dGlvbi50YXJnZXQpIHtcbiAgICAgICAgICAgIGFwcGVuZE9iamVjdFBhdGgodGFyZ2V0UmVzb2x1dGlvbi5vYmplY3RQYXRoLCB0YXJnZXRSZXNvbHV0aW9uLnRhcmdldCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRhcmdldFJlc29sdXRpb247XG4gICAgfTtcblxuICAgIHJldHVybiBjb252ZXJ0ZWRPdXRwdXQ7XG59XG4iLCJleHBvcnQgKiBmcm9tICcuL2NvbnZlcnRlcic7XG5leHBvcnQgKiBmcm9tICcuL3V0aWxzJztcbmV4cG9ydCAqIGZyb20gJy4vd3JpdGViYWNrJztcbiIsImltcG9ydCB0eXBlIHtcbiAgICBBbm5vdGF0aW9uLFxuICAgIEFubm90YXRpb25MaXN0LFxuICAgIEFycmF5V2l0aEluZGV4LFxuICAgIENvbXBsZXhUeXBlLFxuICAgIEluZGV4LFxuICAgIFJlZmVyZW5jZSxcbiAgICBUeXBlRGVmaW5pdGlvblxufSBmcm9tICdAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcyc7XG5cbmV4cG9ydCB7IEVudW1Jc0ZsYWcgfSBmcm9tICdAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvRW51bUlzRmxhZyc7XG5leHBvcnQgeyBUZXJtVG9UeXBlcyB9IGZyb20gJ0BzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9UZXJtVG9UeXBlcyc7XG5leHBvcnQgeyBWb2NhYnVsYXJ5UmVmZXJlbmNlcyBhcyBkZWZhdWx0UmVmZXJlbmNlcyB9IGZyb20gJ0BzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Wb2NhYnVsYXJ5UmVmZXJlbmNlcyc7XG5cbmV4cG9ydCB0eXBlIFJlZmVyZW5jZXNXaXRoTWFwID0gUmVmZXJlbmNlW10gJiB7XG4gICAgcmVmZXJlbmNlTWFwPzogUmVjb3JkPHN0cmluZywgUmVmZXJlbmNlPjtcbiAgICByZXZlcnNlUmVmZXJlbmNlTWFwPzogUmVjb3JkPHN0cmluZywgUmVmZXJlbmNlPjtcbn07XG5cbmZ1bmN0aW9uIHNwbGl0QXQoc3RyaW5nOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiBbc3RyaW5nLCBzdHJpbmddIHtcbiAgICByZXR1cm4gaW5kZXggPCAwID8gW3N0cmluZywgJyddIDogW3N0cmluZy5zdWJzdHJpbmcoMCwgaW5kZXgpLCBzdHJpbmcuc3Vic3RyaW5nKGluZGV4ICsgMSldO1xufVxuXG5mdW5jdGlvbiBzdWJzdHJpbmdBdChzdHJpbmc6IHN0cmluZywgaW5kZXg6IG51bWJlcikge1xuICAgIHJldHVybiBpbmRleCA8IDAgPyBzdHJpbmcgOiBzdHJpbmcuc3Vic3RyaW5nKDAsIGluZGV4KTtcbn1cblxuLyoqXG4gKiBTcGxpdHMgYSBzdHJpbmcgYXQgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgYSBzZXBhcmF0b3IuXG4gKlxuICogQHBhcmFtIHN0cmluZyAgICBUaGUgc3RyaW5nIHRvIHNwbGl0XG4gKiBAcGFyYW0gc2VwYXJhdG9yIFNlcGFyYXRvciwgZS5nLiBhIHNpbmdsZSBjaGFyYWN0ZXIuXG4gKiBAcmV0dXJucyBBbiBhcnJheSBjb25zaXN0aW5nIG9mIHR3byBlbGVtZW50czogdGhlIHBhcnQgYmVmb3JlIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIHRoZSBzZXBhcmF0b3IgYW5kIHRoZSBwYXJ0IGFmdGVyIGl0LiBJZiB0aGUgc3RyaW5nIGRvZXMgbm90IGNvbnRhaW4gdGhlIHNlcGFyYXRvciwgdGhlIHNlY29uZCBlbGVtZW50IGlzIHRoZSBlbXB0eSBzdHJpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzcGxpdEF0Rmlyc3Qoc3RyaW5nOiBzdHJpbmcsIHNlcGFyYXRvcjogc3RyaW5nKTogW3N0cmluZywgc3RyaW5nXSB7XG4gICAgcmV0dXJuIHNwbGl0QXQoc3RyaW5nLCBzdHJpbmcuaW5kZXhPZihzZXBhcmF0b3IpKTtcbn1cblxuLyoqXG4gKiBTcGxpdHMgYSBzdHJpbmcgYXQgdGhlIGxhc3Qgb2NjdXJyZW5jZSBvZiBhIHNlcGFyYXRvci5cbiAqXG4gKiBAcGFyYW0gc3RyaW5nICAgIFRoZSBzdHJpbmcgdG8gc3BsaXRcbiAqIEBwYXJhbSBzZXBhcmF0b3IgU2VwYXJhdG9yLCBlLmcuIGEgc2luZ2xlIGNoYXJhY3Rlci5cbiAqIEByZXR1cm5zIEFuIGFycmF5IGNvbnNpc3Rpbmcgb2YgdHdvIGVsZW1lbnRzOiB0aGUgcGFydCBiZWZvcmUgdGhlIGxhc3Qgb2NjdXJyZW5jZSBvZiB0aGUgc2VwYXJhdG9yIGFuZCB0aGUgcGFydCBhZnRlciBpdC4gSWYgdGhlIHN0cmluZyBkb2VzIG5vdCBjb250YWluIHRoZSBzZXBhcmF0b3IsIHRoZSBzZWNvbmQgZWxlbWVudCBpcyB0aGUgZW1wdHkgc3RyaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3BsaXRBdExhc3Qoc3RyaW5nOiBzdHJpbmcsIHNlcGFyYXRvcjogc3RyaW5nKTogW3N0cmluZywgc3RyaW5nXSB7XG4gICAgcmV0dXJuIHNwbGl0QXQoc3RyaW5nLCBzdHJpbmcubGFzdEluZGV4T2Yoc2VwYXJhdG9yKSk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgc3Vic3RyaW5nIGJlZm9yZSB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBhIHNlcGFyYXRvci5cbiAqXG4gKiBAcGFyYW0gc3RyaW5nICAgIFRoZSBzdHJpbmdcbiAqIEBwYXJhbSBzZXBhcmF0b3IgU2VwYXJhdG9yLCBlLmcuIGEgc2luZ2xlIGNoYXJhY3Rlci5cbiAqIEByZXR1cm5zIFRoZSBzdWJzdHJpbmcgYmVmb3JlIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIHRoZSBzZXBhcmF0b3IsIG9yIHRoZSBpbnB1dCBzdHJpbmcgaWYgaXQgZG9lcyBub3QgY29udGFpbiB0aGUgc2VwYXJhdG9yLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3Vic3RyaW5nQmVmb3JlRmlyc3Qoc3RyaW5nOiBzdHJpbmcsIHNlcGFyYXRvcjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc3Vic3RyaW5nQXQoc3RyaW5nLCBzdHJpbmcuaW5kZXhPZihzZXBhcmF0b3IpKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBzdWJzdHJpbmcgYmVmb3JlIHRoZSBsYXN0IG9jY3VycmVuY2Ugb2YgYSBzZXBhcmF0b3IuXG4gKlxuICogQHBhcmFtIHN0cmluZyAgICBUaGUgc3RyaW5nXG4gKiBAcGFyYW0gc2VwYXJhdG9yIFNlcGFyYXRvciwgZS5nLiBhIHNpbmdsZSBjaGFyYWN0ZXIuXG4gKiBAcmV0dXJucyBUaGUgc3Vic3RyaW5nIGJlZm9yZSB0aGUgbGFzdCBvY2N1cnJlbmNlIG9mIHRoZSBzZXBhcmF0b3IsIG9yIHRoZSBpbnB1dCBzdHJpbmcgaWYgaXQgZG9lcyBub3QgY29udGFpbiB0aGUgc2VwYXJhdG9yLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3Vic3RyaW5nQmVmb3JlTGFzdChzdHJpbmc6IHN0cmluZywgc2VwYXJhdG9yOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdWJzdHJpbmdBdChzdHJpbmcsIHN0cmluZy5sYXN0SW5kZXhPZihzZXBhcmF0b3IpKTtcbn1cblxuLyoqXG4gKiBUcmFuc2Zvcm0gYW4gdW5hbGlhc2VkIHN0cmluZyByZXByZXNlbnRhdGlvbiBhbm5vdGF0aW9uIHRvIHRoZSBhbGlhc2VkIHZlcnNpb24uXG4gKlxuICogQHBhcmFtIHJlZmVyZW5jZXMgY3VycmVudFJlZmVyZW5jZXMgZm9yIHRoZSBwcm9qZWN0XG4gKiBAcGFyYW0gdW5hbGlhc2VkVmFsdWUgdGhlIHVuYWxpYXNlZCB2YWx1ZVxuICogQHJldHVybnMgdGhlIGFsaWFzZWQgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgc2FtZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYWxpYXMocmVmZXJlbmNlczogUmVmZXJlbmNlc1dpdGhNYXAsIHVuYWxpYXNlZFZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghcmVmZXJlbmNlcy5yZXZlcnNlUmVmZXJlbmNlTWFwKSB7XG4gICAgICAgIHJlZmVyZW5jZXMucmV2ZXJzZVJlZmVyZW5jZU1hcCA9IHJlZmVyZW5jZXMucmVkdWNlKChtYXA6IFJlY29yZDxzdHJpbmcsIFJlZmVyZW5jZT4sIHJlZikgPT4ge1xuICAgICAgICAgICAgbWFwW3JlZi5uYW1lc3BhY2VdID0gcmVmO1xuICAgICAgICAgICAgcmV0dXJuIG1hcDtcbiAgICAgICAgfSwge30pO1xuICAgIH1cbiAgICBpZiAoIXVuYWxpYXNlZFZhbHVlKSB7XG4gICAgICAgIHJldHVybiB1bmFsaWFzZWRWYWx1ZTtcbiAgICB9XG4gICAgY29uc3QgW25hbWVzcGFjZSwgdmFsdWVdID0gc3BsaXRBdExhc3QodW5hbGlhc2VkVmFsdWUsICcuJyk7XG4gICAgY29uc3QgcmVmZXJlbmNlID0gcmVmZXJlbmNlcy5yZXZlcnNlUmVmZXJlbmNlTWFwW25hbWVzcGFjZV07XG4gICAgaWYgKHJlZmVyZW5jZSkge1xuICAgICAgICByZXR1cm4gYCR7cmVmZXJlbmNlLmFsaWFzfS4ke3ZhbHVlfWA7XG4gICAgfSBlbHNlIGlmICh1bmFsaWFzZWRWYWx1ZS5pbmNsdWRlcygnQCcpKSB7XG4gICAgICAgIC8vIFRyeSB0byBzZWUgaWYgaXQncyBhbiBhbm5vdGF0aW9uIFBhdGggbGlrZSB0b19TYWxlc09yZGVyL0BVSS5MaW5lSXRlbVxuICAgICAgICBjb25zdCBbcHJlQWxpYXMsIHBvc3RBbGlhc10gPSBzcGxpdEF0Rmlyc3QodW5hbGlhc2VkVmFsdWUsICdAJyk7XG4gICAgICAgIHJldHVybiBgJHtwcmVBbGlhc31AJHthbGlhcyhyZWZlcmVuY2VzLCBwb3N0QWxpYXMpfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHVuYWxpYXNlZFZhbHVlO1xuICAgIH1cbn1cblxuLyoqXG4gKiBUcmFuc2Zvcm0gYW4gYWxpYXNlZCBzdHJpbmcgdG8gaXRzIHVuYWxpYXNlZCB2ZXJzaW9uIGdpdmVuIGEgc2V0IG9mIHJlZmVyZW5jZXMuXG4gKlxuICogQHBhcmFtIHJlZmVyZW5jZXMgVGhlIHJlZmVyZW5jZXMgdG8gdXNlIGZvciB1bmFsaWFzaW5nLlxuICogQHBhcmFtIGFsaWFzZWRWYWx1ZSBUaGUgYWxpYXNlZCB2YWx1ZVxuICogQHBhcmFtIG5hbWVzcGFjZSBUaGUgZmFsbGJhY2sgbmFtZXNwYWNlXG4gKiBAcmV0dXJucyBUaGUgZXF1YWwgdW5hbGlhc2VkIHN0cmluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVuYWxpYXMoXG4gICAgcmVmZXJlbmNlczogUmVmZXJlbmNlc1dpdGhNYXAsXG4gICAgYWxpYXNlZFZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgbmFtZXNwYWNlPzogc3RyaW5nXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IF91bmFsaWFzID0gKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgaWYgKCFyZWZlcmVuY2VzLnJlZmVyZW5jZU1hcCkge1xuICAgICAgICAgICAgcmVmZXJlbmNlcy5yZWZlcmVuY2VNYXAgPSBPYmplY3QuZnJvbUVudHJpZXMocmVmZXJlbmNlcy5tYXAoKHJlZikgPT4gW3JlZi5hbGlhcywgcmVmXSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQWxpYXNlcyBhcmUgb2YgdHlwZSAnU2ltcGxlSWRlbnRpZmllcicgYW5kIG11c3Qgbm90IGNvbnRhaW4gZG90c1xuICAgICAgICBjb25zdCBbbWF5YmVBbGlhcywgcmVzdF0gPSBzcGxpdEF0Rmlyc3QodmFsdWUsICcuJyk7XG5cbiAgICAgICAgaWYgKCFyZXN0IHx8IHJlc3QuaW5jbHVkZXMoJy4nKSkge1xuICAgICAgICAgICAgLy8gZWl0aGVyIHRoZXJlIGlzIG5vIGRvdCBpbiB0aGUgdmFsdWUgb3IgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSAtLT4gbm90aGluZyB0byBkb1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaXNBbm5vdGF0aW9uID0gbWF5YmVBbGlhcy5zdGFydHNXaXRoKCdAJyk7XG4gICAgICAgIGNvbnN0IHZhbHVlVG9VbmFsaWFzID0gaXNBbm5vdGF0aW9uID8gbWF5YmVBbGlhcy5zdWJzdHJpbmcoMSkgOiBtYXliZUFsaWFzO1xuICAgICAgICBjb25zdCBrbm93blJlZmVyZW5jZSA9IHJlZmVyZW5jZXMucmVmZXJlbmNlTWFwW3ZhbHVlVG9VbmFsaWFzXTtcbiAgICAgICAgaWYgKGtub3duUmVmZXJlbmNlKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNBbm5vdGF0aW9uID8gYEAke2tub3duUmVmZXJlbmNlLm5hbWVzcGFjZX0uJHtyZXN0fWAgOiBgJHtrbm93blJlZmVyZW5jZS5uYW1lc3BhY2V9LiR7cmVzdH1gO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlIGFsaWFzIGNvdWxkIG5vdCBiZSByZXNvbHZlZCB1c2luZyB0aGUgcmVmZXJlbmNlcy4gQXNzdW1lIGl0IGlzIHRoZSBcImdsb2JhbFwiIGFsaWFzICg9IG5hbWVzcGFjZSlcbiAgICAgICAgcmV0dXJuIG5hbWVzcGFjZSAmJiAhaXNBbm5vdGF0aW9uID8gYCR7bmFtZXNwYWNlfS4ke3Jlc3R9YCA6IHZhbHVlO1xuICAgIH07XG5cbiAgICByZXR1cm4gYWxpYXNlZFZhbHVlXG4gICAgICAgID8uc3BsaXQoJy8nKVxuICAgICAgICAucmVkdWNlKChzZWdtZW50cywgc2VnbWVudCkgPT4ge1xuICAgICAgICAgICAgLy8gdGhlIHNlZ21lbnQgY291bGQgYmUgYW4gYWN0aW9uLCBsaWtlIFwiZG9Tb21ldGhpbmcoZm9vLmJhcilcIlxuICAgICAgICAgICAgY29uc3QgW2ZpcnN0LCByZXN0XSA9IHNwbGl0QXRGaXJzdChzZWdtZW50LCAnKCcpO1xuICAgICAgICAgICAgY29uc3Qgc3ViU2VnbWVudCA9IFtfdW5hbGlhcyhmaXJzdCldO1xuXG4gICAgICAgICAgICBpZiAocmVzdCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmFtZXRlciA9IHJlc3Quc2xpY2UoMCwgLTEpOyAvLyByZW1vdmUgdHJhaWxpbmcgXCIpXCJcbiAgICAgICAgICAgICAgICBzdWJTZWdtZW50LnB1c2goYCgke191bmFsaWFzKHBhcmFtZXRlcil9KWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VnbWVudHMucHVzaChzdWJTZWdtZW50LmpvaW4oJycpKTtcblxuICAgICAgICAgICAgcmV0dXJuIHNlZ21lbnRzO1xuICAgICAgICB9LCBbXSBhcyBzdHJpbmdbXSlcbiAgICAgICAgPy5qb2luKCcvJyk7XG59XG5cbi8qKlxuICogRGlmZmVyZW50aWF0ZSBiZXR3ZWVuIGEgQ29tcGxleFR5cGUgYW5kIGEgVHlwZURlZmluaXRpb24uXG4gKlxuICogQHBhcmFtIGNvbXBsZXhUeXBlRGVmaW5pdGlvblxuICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgdmFsdWUgaXMgYSBjb21wbGV4IHR5cGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ29tcGxleFR5cGVEZWZpbml0aW9uKFxuICAgIGNvbXBsZXhUeXBlRGVmaW5pdGlvbj86IENvbXBsZXhUeXBlIHwgVHlwZURlZmluaXRpb25cbik6IGNvbXBsZXhUeXBlRGVmaW5pdGlvbiBpcyBDb21wbGV4VHlwZSB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgISFjb21wbGV4VHlwZURlZmluaXRpb24gJiYgY29tcGxleFR5cGVEZWZpbml0aW9uLl90eXBlID09PSAnQ29tcGxleFR5cGUnICYmICEhY29tcGxleFR5cGVEZWZpbml0aW9uLnByb3BlcnRpZXNcbiAgICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gRGVjaW1hbCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgaXNEZWNpbWFsKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0sXG4gICAgICAgIHZhbHVlT2YoKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHRvU3RyaW5nKCkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICB9O1xufVxuXG4vKipcbiAqIERlZmluZXMgYSBsYXp5IHByb3BlcnR5LlxuICpcbiAqIFRoZSBwcm9wZXJ0eSBpcyBpbml0aWFsaXplZCBieSBjYWxsaW5nIHRoZSBpbml0IGZ1bmN0aW9uIG9uIHRoZSBmaXJzdCByZWFkIGFjY2Vzcywgb3IgYnkgZGlyZWN0bHkgYXNzaWduaW5nIGEgdmFsdWUuXG4gKlxuICogQHBhcmFtIG9iamVjdCAgICBUaGUgaG9zdCBvYmplY3RcbiAqIEBwYXJhbSBwcm9wZXJ0eSAgVGhlIGxhenkgcHJvcGVydHkgdG8gYWRkXG4gKiBAcGFyYW0gaW5pdCAgICAgIFRoZSBmdW5jdGlvbiB0aGF0IGluaXRpYWxpemVzIHRoZSBwcm9wZXJ0eSdzIHZhbHVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXp5PFR5cGUsIEtleSBleHRlbmRzIGtleW9mIFR5cGU+KG9iamVjdDogVHlwZSwgcHJvcGVydHk6IEtleSwgaW5pdDogKCkgPT4gVHlwZVtLZXldKSB7XG4gICAgY29uc3QgaW5pdGlhbCA9IFN5bWJvbCgnaW5pdGlhbCcpO1xuICAgIGxldCBfdmFsdWU6IFR5cGVbS2V5XSB8IHR5cGVvZiBpbml0aWFsID0gaW5pdGlhbDtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsIHByb3BlcnR5LCB7XG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG5cbiAgICAgICAgZ2V0KCkge1xuICAgICAgICAgICAgaWYgKF92YWx1ZSA9PT0gaW5pdGlhbCkge1xuICAgICAgICAgICAgICAgIF92YWx1ZSA9IGluaXQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBfdmFsdWU7XG4gICAgICAgIH0sXG5cbiAgICAgICAgc2V0KHZhbHVlOiBUeXBlW0tleV0pIHtcbiAgICAgICAgICAgIF92YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgYWxsb3dzIHRvIGZpbmQgYW4gYXJyYXkgZWxlbWVudCBieSBwcm9wZXJ0eSB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0gYXJyYXkgICAgIFRoZSBhcnJheVxuICogQHBhcmFtIHByb3BlcnR5ICBFbGVtZW50cyBpbiB0aGUgYXJyYXkgYXJlIHNlYXJjaGVkIGJ5IHRoaXMgcHJvcGVydHlcbiAqIEByZXR1cm5zIEEgZnVuY3Rpb24gdGhhdCBjYW4gYmUgdXNlZCB0byBmaW5kIGFuIGVsZW1lbnQgb2YgdGhlIGFycmF5IGJ5IHByb3BlcnR5IHZhbHVlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSW5kZXhlZEZpbmQ8VD4oYXJyYXk6IEFycmF5PFQ+LCBwcm9wZXJ0eToga2V5b2YgVCkge1xuICAgIGNvbnN0IGluZGV4OiBNYXA8VFtrZXlvZiBUXSwgVCB8IHVuZGVmaW5lZD4gPSBuZXcgTWFwKCk7XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gZmluZCh2YWx1ZTogVFtrZXlvZiBUXSkge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gaW5kZXguZ2V0KHZhbHVlKTtcblxuICAgICAgICBpZiAoZWxlbWVudD8uW3Byb3BlcnR5XSA9PT0gdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFycmF5LmZpbmQoKGVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgIGlmICghZWxlbWVudD8uaGFzT3duUHJvcGVydHkocHJvcGVydHkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0eVZhbHVlID0gZWxlbWVudFtwcm9wZXJ0eV07XG4gICAgICAgICAgICBpbmRleC5zZXQocHJvcGVydHlWYWx1ZSwgZWxlbWVudCk7XG4gICAgICAgICAgICByZXR1cm4gcHJvcGVydHlWYWx1ZSA9PT0gdmFsdWU7XG4gICAgICAgIH0pO1xuICAgIH07XG59XG5cbi8qKlxuICogQWRkcyBhICdnZXQgYnkgdmFsdWUnIGZ1bmN0aW9uIHRvIGFuIGFycmF5LlxuICpcbiAqIElmIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggYWRkSW5kZXgobXlBcnJheSwgJ25hbWUnKSwgYSBuZXcgZnVuY3Rpb24gJ2J5X25hbWUodmFsdWUpJyB3aWxsIGJlIGFkZGVkIHRoYXQgYWxsb3dzIHRvXG4gKiBmaW5kIGEgbWVtYmVyIG9mIHRoZSBhcnJheSBieSB0aGUgdmFsdWUgb2YgaXRzICduYW1lJyBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0gYXJyYXkgICAgICBUaGUgYXJyYXlcbiAqIEBwYXJhbSBwcm9wZXJ0eSAgIFRoZSBwcm9wZXJ0eSB0aGF0IHdpbGwgYmUgdXNlZCBieSB0aGUgJ2J5X3twcm9wZXJ0eX0oKScgZnVuY3Rpb25cbiAqIEByZXR1cm5zIFRoZSBhcnJheSB3aXRoIHRoZSBhZGRlZCBmdW5jdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkR2V0QnlWYWx1ZTxULCBQIGV4dGVuZHMgRXh0cmFjdDxrZXlvZiBULCBzdHJpbmc+PihhcnJheTogQXJyYXk8VD4sIHByb3BlcnR5OiBQKSB7XG4gICAgY29uc3QgaW5kZXhOYW1lOiBrZXlvZiBJbmRleDxULCBQPiA9IGBieV8ke3Byb3BlcnR5fWA7XG5cbiAgICBpZiAoIWFycmF5Lmhhc093blByb3BlcnR5KGluZGV4TmFtZSkpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGFycmF5LCBpbmRleE5hbWUsIHsgd3JpdGFibGU6IGZhbHNlLCB2YWx1ZTogY3JlYXRlSW5kZXhlZEZpbmQoYXJyYXksIHByb3BlcnR5KSB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFByb3BlcnR5ICcke2luZGV4TmFtZX0nIGFscmVhZHkgZXhpc3RzYCk7XG4gICAgfVxuICAgIHJldHVybiBhcnJheSBhcyBBcnJheVdpdGhJbmRleDxULCBQPjtcbn1cblxuLyoqXG4gKiBNZXJnZSBhbm5vdGF0aW9ucyBmcm9tIGRpZmZlcmVudCBzb3VyY2VzIHRvZ2V0aGVyIGJ5IG92ZXJ3cml0aW5nIGF0IHRoZSB0ZXJtIGxldmVsLlxuICpcbiAqIEBwYXJhbSByZWZlcmVuY2VzICAgICAgICBSZWZlcmVuY2VzLCB1c2VkIHRvIHJlc29sdmUgYWxpYXNlZCBhbm5vdGF0aW9uIHRhcmdldHMgYW5kIGFsaWFzZWQgYW5ub3RhdGlvbiB0ZXJtcy5cbiAqIEBwYXJhbSBhbm5vdGF0aW9uU291cmNlcyBBbm5vdGF0aW9uIHNvdXJjZXNcbiAqIEByZXR1cm5zIHRoZSByZXN1bHRpbmcgbWVyZ2VkIGFubm90YXRpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUFubm90YXRpb25zKFxuICAgIHJlZmVyZW5jZXM6IFJlZmVyZW5jZVtdLFxuICAgIC4uLmFubm90YXRpb25Tb3VyY2VzOiB7IG5hbWU6IHN0cmluZzsgYW5ub3RhdGlvbkxpc3Q6IEFubm90YXRpb25MaXN0W10gfVtdXG4pOiBSZWNvcmQ8c3RyaW5nLCBBbm5vdGF0aW9uW10+IHtcbiAgICByZXR1cm4gYW5ub3RhdGlvblNvdXJjZXMucmVkdWNlUmlnaHQoKHJlc3VsdCwgeyBuYW1lLCBhbm5vdGF0aW9uTGlzdCB9KSA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgeyB0YXJnZXQsIGFubm90YXRpb25zIH0gb2YgYW5ub3RhdGlvbkxpc3QpIHtcbiAgICAgICAgICAgIGNvbnN0IGFubm90YXRpb25UYXJnZXQgPSB1bmFsaWFzKHJlZmVyZW5jZXMsIHRhcmdldCkgPz8gdGFyZ2V0O1xuICAgICAgICAgICAgaWYgKCFyZXN1bHRbYW5ub3RhdGlvblRhcmdldF0pIHtcbiAgICAgICAgICAgICAgICByZXN1bHRbYW5ub3RhdGlvblRhcmdldF0gPSBbXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgYW5ub3RhdGlvbnNPblRhcmdldCA9IGFubm90YXRpb25zXG4gICAgICAgICAgICAgICAgLm1hcCgocmF3QW5ub3RhdGlvbik6IEFubm90YXRpb24gPT4ge1xuICAgICAgICAgICAgICAgICAgICByYXdBbm5vdGF0aW9uLnRlcm0gPSB1bmFsaWFzKHJlZmVyZW5jZXMsIHJhd0Fubm90YXRpb24udGVybSkgPz8gcmF3QW5ub3RhdGlvbi50ZXJtO1xuXG4gICAgICAgICAgICAgICAgICAgIChyYXdBbm5vdGF0aW9uIGFzIGFueSkuZnVsbHlRdWFsaWZpZWROYW1lID0gcmF3QW5ub3RhdGlvbi5xdWFsaWZpZXJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gYCR7YW5ub3RhdGlvblRhcmdldH1AJHtyYXdBbm5vdGF0aW9uLnRlcm19IyR7cmF3QW5ub3RhdGlvbi5xdWFsaWZpZXJ9YFxuICAgICAgICAgICAgICAgICAgICAgICAgOiBgJHthbm5vdGF0aW9uVGFyZ2V0fUAke3Jhd0Fubm90YXRpb24udGVybX1gO1xuXG4gICAgICAgICAgICAgICAgICAgIChyYXdBbm5vdGF0aW9uIGFzIGFueSkuX19zb3VyY2UgPSBuYW1lO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByYXdBbm5vdGF0aW9uIGFzIEFubm90YXRpb247XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAoYW5ub3RhdGlvbikgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICFyZXN1bHRbYW5ub3RhdGlvblRhcmdldF0uc29tZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXhpc3RpbmdBbm5vdGF0aW9uKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZ0Fubm90YXRpb24udGVybSA9PT0gYW5ub3RhdGlvbi50ZXJtICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQW5ub3RhdGlvbi5xdWFsaWZpZXIgPT09IGFubm90YXRpb24ucXVhbGlmaWVyXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgcmVzdWx0W2Fubm90YXRpb25UYXJnZXRdLnB1c2goLi4uYW5ub3RhdGlvbnNPblRhcmdldCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sIHt9IGFzIFJlY29yZDxzdHJpbmcsIEFubm90YXRpb25bXT4pO1xufVxuIiwiaW1wb3J0IHR5cGUge1xuICAgIEFubm90YXRpb25QYXRoRXhwcmVzc2lvbixcbiAgICBBbm5vdGF0aW9uUmVjb3JkLFxuICAgIEFubm90YXRpb25UZXJtLFxuICAgIEV4cHJlc3Npb24sXG4gICAgTmF2aWdhdGlvblByb3BlcnR5UGF0aEV4cHJlc3Npb24sXG4gICAgUGF0aEV4cHJlc3Npb24sXG4gICAgUHJvcGVydHlQYXRoRXhwcmVzc2lvbixcbiAgICBSYXdBbm5vdGF0aW9uLFxuICAgIFJlZmVyZW5jZVxufSBmcm9tICdAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcyc7XG5pbXBvcnQgeyB1bmFsaWFzIH0gZnJvbSAnLi91dGlscyc7XG5cbi8qKlxuICogUmV2ZXJ0IGFuIG9iamVjdCB0byBpdHMgcmF3IHR5cGUgZXF1aXZhbGVudC5cbiAqXG4gKiBAcGFyYW0gcmVmZXJlbmNlcyB0aGUgY3VycmVudCByZWZlcmVuY2VcbiAqIEBwYXJhbSB2YWx1ZSB0aGUgdmFsdWUgdG8gcmV2ZXJ0XG4gKiBAcmV0dXJucyB0aGUgcmF3IHZhbHVlXG4gKi9cbmZ1bmN0aW9uIHJldmVydE9iamVjdFRvUmF3VHlwZShyZWZlcmVuY2VzOiBSZWZlcmVuY2VbXSwgdmFsdWU6IGFueSkge1xuICAgIGxldCByZXN1bHQ6IEV4cHJlc3Npb24gfCB1bmRlZmluZWQ7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAgIHR5cGU6ICdDb2xsZWN0aW9uJyxcbiAgICAgICAgICAgIENvbGxlY3Rpb246IHZhbHVlLm1hcCgoYW5ubykgPT4gcmV2ZXJ0Q29sbGVjdGlvbkl0ZW1Ub1Jhd1R5cGUocmVmZXJlbmNlcywgYW5ubykpIGFzIGFueVtdXG4gICAgICAgIH07XG4gICAgfSBlbHNlIGlmICh2YWx1ZS5pc0RlY2ltYWw/LigpKSB7XG4gICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAgIHR5cGU6ICdEZWNpbWFsJyxcbiAgICAgICAgICAgIERlY2ltYWw6IHZhbHVlLnZhbHVlT2YoKVxuICAgICAgICB9O1xuICAgIH0gZWxzZSBpZiAodmFsdWUuaXNTdHJpbmc/LigpKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlTWF0Y2hlcyA9IHZhbHVlLnZhbHVlT2YoKS5zcGxpdCgnLicpO1xuICAgICAgICBpZiAodmFsdWVNYXRjaGVzLmxlbmd0aCA+IDEgJiYgcmVmZXJlbmNlcy5maW5kKChyZWYpID0+IHJlZi5hbGlhcyA9PT0gdmFsdWVNYXRjaGVzWzBdKSkge1xuICAgICAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdFbnVtTWVtYmVyJyxcbiAgICAgICAgICAgICAgICBFbnVtTWVtYmVyOiB2YWx1ZS52YWx1ZU9mKClcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ1N0cmluZycsXG4gICAgICAgICAgICAgICAgU3RyaW5nOiB2YWx1ZS52YWx1ZU9mKClcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHZhbHVlLmlzSW50Py4oKSkge1xuICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICB0eXBlOiAnSW50JyxcbiAgICAgICAgICAgIEludDogdmFsdWUudmFsdWVPZigpXG4gICAgICAgIH07XG4gICAgfSBlbHNlIGlmICh2YWx1ZS5pc0Zsb2F0Py4oKSkge1xuICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICB0eXBlOiAnRmxvYXQnLFxuICAgICAgICAgICAgRmxvYXQ6IHZhbHVlLnZhbHVlT2YoKVxuICAgICAgICB9O1xuICAgIH0gZWxzZSBpZiAodmFsdWUuaXNEYXRlPy4oKSkge1xuICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICB0eXBlOiAnRGF0ZScsXG4gICAgICAgICAgICBEYXRlOiB2YWx1ZS52YWx1ZU9mKClcbiAgICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlLmlzQm9vbGVhbj8uKCkpIHtcbiAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgdHlwZTogJ0Jvb2wnLFxuICAgICAgICAgICAgQm9vbDogdmFsdWUudmFsdWVPZigpXG4gICAgICAgIH07XG4gICAgfSBlbHNlIGlmICh2YWx1ZS50eXBlID09PSAnUGF0aCcpIHtcbiAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgdHlwZTogJ1BhdGgnLFxuICAgICAgICAgICAgUGF0aDogdmFsdWUucGF0aFxuICAgICAgICB9O1xuICAgIH0gZWxzZSBpZiAodmFsdWUudHlwZSA9PT0gJ0Fubm90YXRpb25QYXRoJykge1xuICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICB0eXBlOiAnQW5ub3RhdGlvblBhdGgnLFxuICAgICAgICAgICAgQW5ub3RhdGlvblBhdGg6IHZhbHVlLnZhbHVlXG4gICAgICAgIH07XG4gICAgfSBlbHNlIGlmICh2YWx1ZS50eXBlID09PSAnQXBwbHknKSB7XG4gICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAgIHR5cGU6ICdBcHBseScsXG4gICAgICAgICAgICBBcHBseTogdmFsdWUuQXBwbHlcbiAgICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlLnR5cGUgPT09ICdOdWxsJykge1xuICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICB0eXBlOiAnTnVsbCdcbiAgICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlLnR5cGUgPT09ICdQcm9wZXJ0eVBhdGgnKSB7XG4gICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAgIHR5cGU6ICdQcm9wZXJ0eVBhdGgnLFxuICAgICAgICAgICAgUHJvcGVydHlQYXRoOiB2YWx1ZS52YWx1ZVxuICAgICAgICB9O1xuICAgIH0gZWxzZSBpZiAodmFsdWUudHlwZSA9PT0gJ05hdmlnYXRpb25Qcm9wZXJ0eVBhdGgnKSB7XG4gICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAgIHR5cGU6ICdOYXZpZ2F0aW9uUHJvcGVydHlQYXRoJyxcbiAgICAgICAgICAgIE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg6IHZhbHVlLnZhbHVlXG4gICAgICAgIH07XG4gICAgfSBlbHNlIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICckVHlwZScpKSB7XG4gICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAgIHR5cGU6ICdSZWNvcmQnLFxuICAgICAgICAgICAgUmVjb3JkOiByZXZlcnRDb2xsZWN0aW9uSXRlbVRvUmF3VHlwZShyZWZlcmVuY2VzLCB2YWx1ZSkgYXMgQW5ub3RhdGlvblJlY29yZFxuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIFJldmVydCBhIHZhbHVlIHRvIGl0cyByYXcgdmFsdWUgZGVwZW5kaW5nIG9uIGl0cyB0eXBlLlxuICpcbiAqIEBwYXJhbSByZWZlcmVuY2VzIHRoZSBjdXJyZW50IHNldCBvZiByZWZlcmVuY2VcbiAqIEBwYXJhbSB2YWx1ZSB0aGUgdmFsdWUgdG8gcmV2ZXJ0XG4gKiBAcmV0dXJucyB0aGUgcmF3IGV4cHJlc3Npb25cbiAqL1xuZnVuY3Rpb24gcmV2ZXJ0VmFsdWVUb1Jhd1R5cGUocmVmZXJlbmNlczogUmVmZXJlbmNlW10sIHZhbHVlOiBhbnkpOiBFeHByZXNzaW9uIHwgdW5kZWZpbmVkIHtcbiAgICBsZXQgcmVzdWx0OiBFeHByZXNzaW9uIHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IHZhbHVlQ29uc3RydWN0b3IgPSB2YWx1ZT8uY29uc3RydWN0b3IubmFtZTtcbiAgICBzd2l0Y2ggKHZhbHVlQ29uc3RydWN0b3IpIHtcbiAgICAgICAgY2FzZSAnU3RyaW5nJzpcbiAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlTWF0Y2hlcyA9IHZhbHVlLnRvU3RyaW5nKCkuc3BsaXQoJy4nKTtcbiAgICAgICAgICAgIGlmICh2YWx1ZU1hdGNoZXMubGVuZ3RoID4gMSAmJiByZWZlcmVuY2VzLmZpbmQoKHJlZikgPT4gcmVmLmFsaWFzID09PSB2YWx1ZU1hdGNoZXNbMF0pKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnRW51bU1lbWJlcicsXG4gICAgICAgICAgICAgICAgICAgIEVudW1NZW1iZXI6IHZhbHVlLnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdTdHJpbmcnLFxuICAgICAgICAgICAgICAgICAgICBTdHJpbmc6IHZhbHVlLnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ0Jvb2xlYW4nOlxuICAgICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnQm9vbCcsXG4gICAgICAgICAgICAgICAgQm9vbDogdmFsdWUudmFsdWVPZigpXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnTnVtYmVyJzpcbiAgICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgICAgIGlmICh2YWx1ZS50b1N0cmluZygpID09PSB2YWx1ZS50b0ZpeGVkKCkpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdJbnQnLFxuICAgICAgICAgICAgICAgICAgICBJbnQ6IHZhbHVlLnZhbHVlT2YoKVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0RlY2ltYWwnLFxuICAgICAgICAgICAgICAgICAgICBEZWNpbWFsOiB2YWx1ZS52YWx1ZU9mKClcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXN1bHQgPSByZXZlcnRPYmplY3RUb1Jhd1R5cGUocmVmZXJlbmNlcywgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbmNvbnN0IHJlc3RyaWN0ZWRLZXlzID0gWyckVHlwZScsICd0ZXJtJywgJ19fc291cmNlJywgJ3F1YWxpZmllcicsICdBY3Rpb25UYXJnZXQnLCAnZnVsbHlRdWFsaWZpZWROYW1lJywgJ2Fubm90YXRpb25zJ107XG5cbi8qKlxuICogUmV2ZXJ0IHRoZSBjdXJyZW50IGVtYmVkZGVkIGFubm90YXRpb25zIHRvIHRoZWlyIHJhdyB0eXBlLlxuICpcbiAqIEBwYXJhbSByZWZlcmVuY2VzIHRoZSBjdXJyZW50IHNldCBvZiByZWZlcmVuY2VcbiAqIEBwYXJhbSBjdXJyZW50QW5ub3RhdGlvbnMgdGhlIGNvbGxlY3Rpb24gaXRlbSB0byBldmFsdWF0ZVxuICogQHBhcmFtIHRhcmdldEFubm90YXRpb25zIHRoZSBwbGFjZSB3aGVyZSB3ZSBuZWVkIHRvIGFkZCB0aGUgYW5ub3RhdGlvblxuICovXG5mdW5jdGlvbiByZXZlcnRBbm5vdGF0aW9uc1RvUmF3VHlwZShcbiAgICByZWZlcmVuY2VzOiBSZWZlcmVuY2VbXSxcbiAgICBjdXJyZW50QW5ub3RhdGlvbnM6IGFueSxcbiAgICB0YXJnZXRBbm5vdGF0aW9uczogUmF3QW5ub3RhdGlvbltdXG4pIHtcbiAgICBPYmplY3Qua2V5cyhjdXJyZW50QW5ub3RhdGlvbnMpXG4gICAgICAgIC5maWx0ZXIoKGtleSkgPT4ga2V5ICE9PSAnX2Fubm90YXRpb25zJylcbiAgICAgICAgLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoY3VycmVudEFubm90YXRpb25zW2tleV0pLmZvckVhY2goKHRlcm0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWRBbm5vdGF0aW9uID0gcmV2ZXJ0VGVybVRvR2VuZXJpY1R5cGUocmVmZXJlbmNlcywgY3VycmVudEFubm90YXRpb25zW2tleV1bdGVybV0pO1xuICAgICAgICAgICAgICAgIGlmICghcGFyc2VkQW5ub3RhdGlvbi50ZXJtKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuYWxpYXNlZFRlcm0gPSB1bmFsaWFzKHJlZmVyZW5jZXMsIGAke2tleX0uJHt0ZXJtfWApO1xuICAgICAgICAgICAgICAgICAgICBpZiAodW5hbGlhc2VkVGVybSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcXVhbGlmaWVkU3BsaXQgPSB1bmFsaWFzZWRUZXJtLnNwbGl0KCcjJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWRBbm5vdGF0aW9uLnRlcm0gPSBxdWFsaWZpZWRTcGxpdFswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChxdWFsaWZpZWRTcGxpdC5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3ViIEFubm90YXRpb24gd2l0aCBhIHF1YWxpZmllciwgbm90IHN1cmUgd2hlbiB0aGF0IGNhbiBoYXBwZW4gaW4gcmVhbCBzY2VuYXJpb3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWRBbm5vdGF0aW9uLnF1YWxpZmllciA9IHF1YWxpZmllZFNwbGl0WzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRhcmdldEFubm90YXRpb25zLnB1c2gocGFyc2VkQW5ub3RhdGlvbik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG59XG5cbi8qKlxuICogUmV2ZXJ0IHRoZSBjdXJyZW50IGNvbGxlY3Rpb24gaXRlbSB0byB0aGUgY29ycmVzcG9uZGluZyByYXcgYW5ub3RhdGlvbi5cbiAqXG4gKiBAcGFyYW0gcmVmZXJlbmNlcyB0aGUgY3VycmVudCBzZXQgb2YgcmVmZXJlbmNlXG4gKiBAcGFyYW0gY29sbGVjdGlvbkl0ZW0gdGhlIGNvbGxlY3Rpb24gaXRlbSB0byBldmFsdWF0ZVxuICogQHJldHVybnMgdGhlIHJhdyB0eXBlIGVxdWl2YWxlbnRcbiAqL1xuZnVuY3Rpb24gcmV2ZXJ0Q29sbGVjdGlvbkl0ZW1Ub1Jhd1R5cGUoXG4gICAgcmVmZXJlbmNlczogUmVmZXJlbmNlW10sXG4gICAgY29sbGVjdGlvbkl0ZW06IGFueVxuKTpcbiAgICB8IEFubm90YXRpb25SZWNvcmRcbiAgICB8IHN0cmluZ1xuICAgIHwgUHJvcGVydHlQYXRoRXhwcmVzc2lvblxuICAgIHwgUGF0aEV4cHJlc3Npb25cbiAgICB8IE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhFeHByZXNzaW9uXG4gICAgfCBBbm5vdGF0aW9uUGF0aEV4cHJlc3Npb25cbiAgICB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHR5cGVvZiBjb2xsZWN0aW9uSXRlbSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25JdGVtO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGNvbGxlY3Rpb25JdGVtID09PSAnb2JqZWN0Jykge1xuICAgICAgICBpZiAoY29sbGVjdGlvbkl0ZW0uaGFzT3duUHJvcGVydHkoJyRUeXBlJykpIHtcbiAgICAgICAgICAgIC8vIEFubm90YXRpb24gUmVjb3JkXG4gICAgICAgICAgICBjb25zdCBvdXRJdGVtOiBBbm5vdGF0aW9uUmVjb3JkID0ge1xuICAgICAgICAgICAgICAgIHR5cGU6IGNvbGxlY3Rpb25JdGVtLiRUeXBlLFxuICAgICAgICAgICAgICAgIHByb3BlcnR5VmFsdWVzOiBbXSBhcyBhbnlbXVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIC8vIENvdWxkIHZhbGlkYXRlIGtleXMgYW5kIHR5cGUgYmFzZWQgb24gJFR5cGVcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGNvbGxlY3Rpb25JdGVtKS5mb3JFYWNoKChjb2xsZWN0aW9uS2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3RyaWN0ZWRLZXlzLmluZGV4T2YoY29sbGVjdGlvbktleSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gY29sbGVjdGlvbkl0ZW1bY29sbGVjdGlvbktleV07XG4gICAgICAgICAgICAgICAgICAgIG91dEl0ZW0ucHJvcGVydHlWYWx1ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBjb2xsZWN0aW9uS2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHJldmVydFZhbHVlVG9SYXdUeXBlKHJlZmVyZW5jZXMsIHZhbHVlKSBhcyBFeHByZXNzaW9uXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29sbGVjdGlvbktleSA9PT0gJ2Fubm90YXRpb25zJyAmJiBPYmplY3Qua2V5cyhjb2xsZWN0aW9uSXRlbVtjb2xsZWN0aW9uS2V5XSkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBvdXRJdGVtLmFubm90YXRpb25zID0gW107XG4gICAgICAgICAgICAgICAgICAgIHJldmVydEFubm90YXRpb25zVG9SYXdUeXBlKHJlZmVyZW5jZXMsIGNvbGxlY3Rpb25JdGVtW2NvbGxlY3Rpb25LZXldLCBvdXRJdGVtLmFubm90YXRpb25zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBvdXRJdGVtO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbGxlY3Rpb25JdGVtLnR5cGUgPT09ICdQcm9wZXJ0eVBhdGgnKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdQcm9wZXJ0eVBhdGgnLFxuICAgICAgICAgICAgICAgIFByb3BlcnR5UGF0aDogY29sbGVjdGlvbkl0ZW0udmFsdWVcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoY29sbGVjdGlvbkl0ZW0udHlwZSA9PT0gJ0Fubm90YXRpb25QYXRoJykge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnQW5ub3RhdGlvblBhdGgnLFxuICAgICAgICAgICAgICAgIEFubm90YXRpb25QYXRoOiBjb2xsZWN0aW9uSXRlbS52YWx1ZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmIChjb2xsZWN0aW9uSXRlbS50eXBlID09PSAnTmF2aWdhdGlvblByb3BlcnR5UGF0aCcpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ05hdmlnYXRpb25Qcm9wZXJ0eVBhdGgnLFxuICAgICAgICAgICAgICAgIE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg6IGNvbGxlY3Rpb25JdGVtLnZhbHVlXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUmV2ZXJ0IGFuIGFubm90YXRpb24gdGVybSB0byBpdCdzIGdlbmVyaWMgb3IgcmF3IGVxdWl2YWxlbnQuXG4gKlxuICogQHBhcmFtIHJlZmVyZW5jZXMgdGhlIHJlZmVyZW5jZSBvZiB0aGUgY3VycmVudCBjb250ZXh0XG4gKiBAcGFyYW0gYW5ub3RhdGlvbiB0aGUgYW5ub3RhdGlvbiB0ZXJtIHRvIHJldmVydFxuICogQHJldHVybnMgdGhlIHJhdyBhbm5vdGF0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXZlcnRUZXJtVG9HZW5lcmljVHlwZShyZWZlcmVuY2VzOiBSZWZlcmVuY2VbXSwgYW5ub3RhdGlvbjogQW5ub3RhdGlvblRlcm08YW55Pik6IFJhd0Fubm90YXRpb24ge1xuICAgIGNvbnN0IGJhc2VBbm5vdGF0aW9uOiBSYXdBbm5vdGF0aW9uID0ge1xuICAgICAgICB0ZXJtOiBhbm5vdGF0aW9uLnRlcm0sXG4gICAgICAgIHF1YWxpZmllcjogYW5ub3RhdGlvbi5xdWFsaWZpZXJcbiAgICB9O1xuICAgIGlmIChBcnJheS5pc0FycmF5KGFubm90YXRpb24pKSB7XG4gICAgICAgIC8vIENvbGxlY3Rpb25cbiAgICAgICAgaWYgKGFubm90YXRpb24uaGFzT3duUHJvcGVydHkoJ2Fubm90YXRpb25zJykgJiYgT2JqZWN0LmtleXMoKGFubm90YXRpb24gYXMgYW55KS5hbm5vdGF0aW9ucykubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgLy8gQW5ub3RhdGlvbiBvbiBhIGNvbGxlY3Rpb24gaXRzZWxmLCBub3Qgc3VyZSB3aGVuIHRoYXQgaGFwcGVucyBpZiBhdCBhbGxcbiAgICAgICAgICAgIGJhc2VBbm5vdGF0aW9uLmFubm90YXRpb25zID0gW107XG4gICAgICAgICAgICByZXZlcnRBbm5vdGF0aW9uc1RvUmF3VHlwZShyZWZlcmVuY2VzLCAoYW5ub3RhdGlvbiBhcyBhbnkpLmFubm90YXRpb25zLCBiYXNlQW5ub3RhdGlvbi5hbm5vdGF0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLmJhc2VBbm5vdGF0aW9uLFxuICAgICAgICAgICAgY29sbGVjdGlvbjogYW5ub3RhdGlvbi5tYXAoKGFubm8pID0+IHJldmVydENvbGxlY3Rpb25JdGVtVG9SYXdUeXBlKHJlZmVyZW5jZXMsIGFubm8pKSBhcyBhbnlbXVxuICAgICAgICB9O1xuICAgIH0gZWxzZSBpZiAoYW5ub3RhdGlvbi5oYXNPd25Qcm9wZXJ0eSgnJFR5cGUnKSkge1xuICAgICAgICByZXR1cm4geyAuLi5iYXNlQW5ub3RhdGlvbiwgcmVjb3JkOiByZXZlcnRDb2xsZWN0aW9uSXRlbVRvUmF3VHlwZShyZWZlcmVuY2VzLCBhbm5vdGF0aW9uKSBhcyBhbnkgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4geyAuLi5iYXNlQW5ub3RhdGlvbiwgdmFsdWU6IHJldmVydFZhbHVlVG9SYXdUeXBlKHJlZmVyZW5jZXMsIGFubm90YXRpb24pIH07XG4gICAgfVxufVxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkVudW1Jc0ZsYWcgPSB2b2lkIDA7XG5leHBvcnRzLkVudW1Jc0ZsYWcgPSB7XG4gICAgXCJBdXRoLktleUxvY2F0aW9uXCI6IGZhbHNlLFxuICAgIFwiQ29yZS5SZXZpc2lvbktpbmRcIjogZmFsc2UsXG4gICAgXCJDb3JlLkRhdGFNb2RpZmljYXRpb25PcGVyYXRpb25LaW5kXCI6IGZhbHNlLFxuICAgIFwiQ29yZS5QZXJtaXNzaW9uXCI6IHRydWUsXG4gICAgXCJDYXBhYmlsaXRpZXMuQ29uZm9ybWFuY2VMZXZlbFR5cGVcIjogZmFsc2UsXG4gICAgXCJDYXBhYmlsaXRpZXMuSXNvbGF0aW9uTGV2ZWxcIjogdHJ1ZSxcbiAgICBcIkNhcGFiaWxpdGllcy5OYXZpZ2F0aW9uVHlwZVwiOiBmYWxzZSxcbiAgICBcIkNhcGFiaWxpdGllcy5TZWFyY2hFeHByZXNzaW9uc1wiOiB0cnVlLFxuICAgIFwiQ2FwYWJpbGl0aWVzLkh0dHBNZXRob2RcIjogdHJ1ZSxcbiAgICBcIkFnZ3JlZ2F0aW9uLlJvbGx1cFR5cGVcIjogZmFsc2UsXG4gICAgXCJDb21tb24uVGV4dEZvcm1hdFR5cGVcIjogZmFsc2UsXG4gICAgXCJDb21tb24uRmlsdGVyRXhwcmVzc2lvblR5cGVcIjogZmFsc2UsXG4gICAgXCJDb21tb24uRmllbGRDb250cm9sVHlwZVwiOiBmYWxzZSxcbiAgICBcIkNvbW1vbi5FZmZlY3RUeXBlXCI6IHRydWUsXG4gICAgXCJDb21tdW5pY2F0aW9uLktpbmRUeXBlXCI6IGZhbHNlLFxuICAgIFwiQ29tbXVuaWNhdGlvbi5Db250YWN0SW5mb3JtYXRpb25UeXBlXCI6IHRydWUsXG4gICAgXCJDb21tdW5pY2F0aW9uLlBob25lVHlwZVwiOiB0cnVlLFxuICAgIFwiQ29tbXVuaWNhdGlvbi5HZW5kZXJUeXBlXCI6IGZhbHNlLFxuICAgIFwiVUkuVmlzdWFsaXphdGlvblR5cGVcIjogZmFsc2UsXG4gICAgXCJVSS5Dcml0aWNhbGl0eVR5cGVcIjogZmFsc2UsXG4gICAgXCJVSS5JbXByb3ZlbWVudERpcmVjdGlvblR5cGVcIjogZmFsc2UsXG4gICAgXCJVSS5UcmVuZFR5cGVcIjogZmFsc2UsXG4gICAgXCJVSS5DaGFydFR5cGVcIjogZmFsc2UsXG4gICAgXCJVSS5DaGFydEF4aXNTY2FsZUJlaGF2aW9yVHlwZVwiOiBmYWxzZSxcbiAgICBcIlVJLkNoYXJ0QXhpc0F1dG9TY2FsZURhdGFTY29wZVR5cGVcIjogZmFsc2UsXG4gICAgXCJVSS5DaGFydERpbWVuc2lvblJvbGVUeXBlXCI6IGZhbHNlLFxuICAgIFwiVUkuQ2hhcnRNZWFzdXJlUm9sZVR5cGVcIjogZmFsc2UsXG4gICAgXCJVSS5TZWxlY3Rpb25SYW5nZVNpZ25UeXBlXCI6IGZhbHNlLFxuICAgIFwiVUkuU2VsZWN0aW9uUmFuZ2VPcHRpb25UeXBlXCI6IGZhbHNlLFxuICAgIFwiVUkuVGV4dEFycmFuZ2VtZW50VHlwZVwiOiBmYWxzZSxcbiAgICBcIlVJLkltcG9ydGFuY2VUeXBlXCI6IGZhbHNlLFxuICAgIFwiVUkuQ3JpdGljYWxpdHlSZXByZXNlbnRhdGlvblR5cGVcIjogZmFsc2UsXG4gICAgXCJVSS5PcGVyYXRpb25Hcm91cGluZ1R5cGVcIjogZmFsc2UsXG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlRlcm1Ub1R5cGVzID0gdm9pZCAwO1xudmFyIFRlcm1Ub1R5cGVzO1xuKGZ1bmN0aW9uIChUZXJtVG9UeXBlcykge1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkF1dGhvcml6YXRpb24uVjEuU2VjdXJpdHlTY2hlbWVzXCJdID0gXCJPcmcuT0RhdGEuQXV0aG9yaXphdGlvbi5WMS5TZWN1cml0eVNjaGVtZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkF1dGhvcml6YXRpb24uVjEuQXV0aG9yaXphdGlvbnNcIl0gPSBcIk9yZy5PRGF0YS5BdXRob3JpemF0aW9uLlYxLkF1dGhvcml6YXRpb25cIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLlJldmlzaW9uc1wiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuUmV2aXNpb25UeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ29yZS5WMS5MaW5rc1wiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuTGlua1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuRXhhbXBsZVwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuRXhhbXBsZVZhbHVlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ29yZS5WMS5NZXNzYWdlc1wiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuTWVzc2FnZVR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLlZhbHVlRXhjZXB0aW9uXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5WYWx1ZUV4Y2VwdGlvblR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLlJlc291cmNlRXhjZXB0aW9uXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5SZXNvdXJjZUV4Y2VwdGlvblR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLkRhdGFNb2RpZmljYXRpb25FeGNlcHRpb25cIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLkRhdGFNb2RpZmljYXRpb25FeGNlcHRpb25UeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ29yZS5WMS5Jc0xhbmd1YWdlRGVwZW5kZW50XCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLkFwcGxpZXNWaWFDb250YWluZXJcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuRGVyZWZlcmVuY2VhYmxlSURzXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLkNvbnZlbnRpb25hbElEc1wiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ29yZS5WMS5QZXJtaXNzaW9uc1wiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuUGVybWlzc2lvblwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuRGVmYXVsdE5hbWVzcGFjZVwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ29yZS5WMS5JbW11dGFibGVcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuQ29tcHV0ZWRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuQ29tcHV0ZWREZWZhdWx0VmFsdWVcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuSXNVUkxcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuSXNNZWRpYVR5cGVcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuQ29udGVudERpc3Bvc2l0aW9uXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5Db250ZW50RGlzcG9zaXRpb25UeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ29yZS5WMS5PcHRpbWlzdGljQ29uY3VycmVuY3lcIl0gPSBcIkVkbS5Qcm9wZXJ0eVBhdGhcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLkFkZGl0aW9uYWxQcm9wZXJ0aWVzXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLkF1dG9FeHBhbmRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuQXV0b0V4cGFuZFJlZmVyZW5jZXNcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuTWF5SW1wbGVtZW50XCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5RdWFsaWZpZWRUeXBlTmFtZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuT3JkZXJlZFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ29yZS5WMS5Qb3NpdGlvbmFsSW5zZXJ0XCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLkFsdGVybmF0ZUtleXNcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLkFsdGVybmF0ZUtleVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuT3B0aW9uYWxQYXJhbWV0ZXJcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLk9wdGlvbmFsUGFyYW1ldGVyVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuT3BlcmF0aW9uQXZhaWxhYmxlXCJdID0gXCJFZG0uQm9vbGVhblwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuUmVxdWlyZXNFeHBsaWNpdEJpbmRpbmdcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuRXhwbGljaXRPcGVyYXRpb25CaW5kaW5nc1wiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuUXVhbGlmaWVkQm91bmRPcGVyYXRpb25OYW1lXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ29yZS5WMS5TeW1ib2xpY05hbWVcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlNpbXBsZUlkZW50aWZpZXJcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLkdlb21ldHJ5RmVhdHVyZVwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuR2VvbWV0cnlGZWF0dXJlVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuQW55U3RydWN0dXJlXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQ29uZm9ybWFuY2VMZXZlbFwiXSA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5Db25mb3JtYW5jZUxldmVsVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5Bc3luY2hyb25vdXNSZXF1ZXN0c1N1cHBvcnRlZFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkJhdGNoQ29udGludWVPbkVycm9yU3VwcG9ydGVkXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuSXNvbGF0aW9uU3VwcG9ydGVkXCJdID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLklzb2xhdGlvbkxldmVsXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkNyb3NzSm9pblN1cHBvcnRlZFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkNhbGxiYWNrU3VwcG9ydGVkXCJdID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkNhbGxiYWNrVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5DaGFuZ2VUcmFja2luZ1wiXSA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5DaGFuZ2VUcmFja2luZ1R5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQ291bnRSZXN0cmljdGlvbnNcIl0gPSBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQ291bnRSZXN0cmljdGlvbnNUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLk5hdmlnYXRpb25SZXN0cmljdGlvbnNcIl0gPSBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuTmF2aWdhdGlvblJlc3RyaWN0aW9uc1R5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuSW5kZXhhYmxlQnlLZXlcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5Ub3BTdXBwb3J0ZWRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5Ta2lwU3VwcG9ydGVkXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQ29tcHV0ZVN1cHBvcnRlZFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLlNlbGVjdFN1cHBvcnRcIl0gPSBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuU2VsZWN0U3VwcG9ydFR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQmF0Y2hTdXBwb3J0ZWRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5CYXRjaFN1cHBvcnRcIl0gPSBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQmF0Y2hTdXBwb3J0VHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5GaWx0ZXJSZXN0cmljdGlvbnNcIl0gPSBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuRmlsdGVyUmVzdHJpY3Rpb25zVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5Tb3J0UmVzdHJpY3Rpb25zXCJdID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLlNvcnRSZXN0cmljdGlvbnNUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkV4cGFuZFJlc3RyaWN0aW9uc1wiXSA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5FeHBhbmRSZXN0cmljdGlvbnNUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLlNlYXJjaFJlc3RyaWN0aW9uc1wiXSA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5TZWFyY2hSZXN0cmljdGlvbnNUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLktleUFzU2VnbWVudFN1cHBvcnRlZFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLlF1ZXJ5U2VnbWVudFN1cHBvcnRlZFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkluc2VydFJlc3RyaWN0aW9uc1wiXSA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5JbnNlcnRSZXN0cmljdGlvbnNUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkRlZXBJbnNlcnRTdXBwb3J0XCJdID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkRlZXBJbnNlcnRTdXBwb3J0VHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5VcGRhdGVSZXN0cmljdGlvbnNcIl0gPSBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuVXBkYXRlUmVzdHJpY3Rpb25zVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5EZWVwVXBkYXRlU3VwcG9ydFwiXSA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5EZWVwVXBkYXRlU3VwcG9ydFR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuRGVsZXRlUmVzdHJpY3Rpb25zXCJdID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkRlbGV0ZVJlc3RyaWN0aW9uc1R5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQ29sbGVjdGlvblByb3BlcnR5UmVzdHJpY3Rpb25zXCJdID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkNvbGxlY3Rpb25Qcm9wZXJ0eVJlc3RyaWN0aW9uc1R5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuT3BlcmF0aW9uUmVzdHJpY3Rpb25zXCJdID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLk9wZXJhdGlvblJlc3RyaWN0aW9uc1R5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQW5ub3RhdGlvblZhbHVlc0luUXVlcnlTdXBwb3J0ZWRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5Nb2RpZmljYXRpb25RdWVyeU9wdGlvbnNcIl0gPSBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuTW9kaWZpY2F0aW9uUXVlcnlPcHRpb25zVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5SZWFkUmVzdHJpY3Rpb25zXCJdID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLlJlYWRSZXN0cmljdGlvbnNUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkN1c3RvbUhlYWRlcnNcIl0gPSBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQ3VzdG9tUGFyYW1ldGVyXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkN1c3RvbVF1ZXJ5T3B0aW9uc1wiXSA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5DdXN0b21QYXJhbWV0ZXJcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuTWVkaWFMb2NhdGlvblVwZGF0ZVN1cHBvcnRlZFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQWdncmVnYXRpb24uVjEuQXBwbHlTdXBwb3J0ZWRcIl0gPSBcIk9yZy5PRGF0YS5BZ2dyZWdhdGlvbi5WMS5BcHBseVN1cHBvcnRlZFR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5BZ2dyZWdhdGlvbi5WMS5BcHBseVN1cHBvcnRlZERlZmF1bHRzXCJdID0gXCJPcmcuT0RhdGEuQWdncmVnYXRpb24uVjEuQXBwbHlTdXBwb3J0ZWRCYXNlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQWdncmVnYXRpb24uVjEuR3JvdXBhYmxlXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5BZ2dyZWdhdGlvbi5WMS5BZ2dyZWdhdGFibGVcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkFnZ3JlZ2F0aW9uLlYxLkNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXNcIl0gPSBcIkVkbS5Qcm9wZXJ0eVBhdGhcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5BZ2dyZWdhdGlvbi5WMS5MZXZlbGVkSGllcmFyY2h5XCJdID0gXCJFZG0uUHJvcGVydHlQYXRoXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQWdncmVnYXRpb24uVjEuUmVjdXJzaXZlSGllcmFyY2h5XCJdID0gXCJPcmcuT0RhdGEuQWdncmVnYXRpb24uVjEuUmVjdXJzaXZlSGllcmFyY2h5VHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkFnZ3JlZ2F0aW9uLlYxLkF2YWlsYWJsZU9uQWdncmVnYXRlc1wiXSA9IFwiT3JnLk9EYXRhLkFnZ3JlZ2F0aW9uLlYxLkF2YWlsYWJsZU9uQWdncmVnYXRlc1R5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1pbmltdW1cIl0gPSBcIkVkbS5QcmltaXRpdmVUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5NYXhpbXVtXCJdID0gXCJFZG0uUHJpbWl0aXZlVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuRXhjbHVzaXZlXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLkFsbG93ZWRWYWx1ZXNcIl0gPSBcIk9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLkFsbG93ZWRWYWx1ZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuTXVsdGlwbGVPZlwiXSA9IFwiRWRtLkRlY2ltYWxcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLkNvbnN0cmFpbnRcIl0gPSBcIk9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLkNvbnN0cmFpbnRUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5JdGVtc09mXCJdID0gXCJPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5JdGVtc09mVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuT3BlblByb3BlcnR5VHlwZUNvbnN0cmFpbnRcIl0gPSBcIk9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLlNpbmdsZU9yQ29sbGVjdGlvblR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLkRlcml2ZWRUeXBlQ29uc3RyYWludFwiXSA9IFwiT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuU2luZ2xlT3JDb2xsZWN0aW9uVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuQWxsb3dlZFRlcm1zXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5RdWFsaWZpZWRUZXJtTmFtZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuQXBwbGljYWJsZVRlcm1zXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5RdWFsaWZpZWRUZXJtTmFtZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuTWF4SXRlbXNcIl0gPSBcIkVkbS5JbnQ2NFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuTWluSXRlbXNcIl0gPSBcIkVkbS5JbnQ2NFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLk1lYXN1cmVzLlYxLlNjYWxlXCJdID0gXCJFZG0uQnl0ZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLk1lYXN1cmVzLlYxLkR1cmF0aW9uR3JhbnVsYXJpdHlcIl0gPSBcIk9yZy5PRGF0YS5NZWFzdXJlcy5WMS5EdXJhdGlvbkdyYW51bGFyaXR5VHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQW5hbHl0aWNzLnYxLkRpbWVuc2lvblwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5BbmFseXRpY3MudjEuTWVhc3VyZVwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5BbmFseXRpY3MudjEuQWNjdW11bGF0aXZlTWVhc3VyZVwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5BbmFseXRpY3MudjEuUm9sbGVkVXBQcm9wZXJ0eUNvdW50XCJdID0gXCJFZG0uSW50MTZcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkFuYWx5dGljcy52MS5QbGFubmluZ0FjdGlvblwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5BbmFseXRpY3MudjEuQWdncmVnYXRlZFByb3BlcnRpZXNcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkFuYWx5dGljcy52MS5BZ2dyZWdhdGVkUHJvcGVydHlUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5BbmFseXRpY3MudjEuQWdncmVnYXRlZFByb3BlcnR5XCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5BbmFseXRpY3MudjEuQWdncmVnYXRlZFByb3BlcnR5VHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQW5hbHl0aWNzLnYxLkFuYWx5dGljYWxDb250ZXh0XCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5BbmFseXRpY3MudjEuQW5hbHl0aWNhbENvbnRleHRUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU2VydmljZVZlcnNpb25cIl0gPSBcIkVkbS5JbnQzMlwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNlcnZpY2VTY2hlbWFWZXJzaW9uXCJdID0gXCJFZG0uSW50MzJcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0Rm9yXCJdID0gXCJFZG0uUHJvcGVydHlQYXRoXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNMYW5ndWFnZUlkZW50aWZpZXJcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRGb3JtYXRcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0Rm9ybWF0VHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzVGltZXpvbmVcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzRGlnaXRTZXF1ZW5jZVwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNVcHBlckNhc2VcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzQ3VycmVuY3lcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzVW5pdFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVW5pdFNwZWNpZmljU2NhbGVcIl0gPSBcIkVkbS5QcmltaXRpdmVUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVW5pdFNwZWNpZmljUHJlY2lzaW9uXCJdID0gXCJFZG0uUHJpbWl0aXZlVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNlY29uZGFyeUtleVwiXSA9IFwiRWRtLlByb3BlcnR5UGF0aFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLk1pbk9jY3Vyc1wiXSA9IFwiRWRtLkludDY0XCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTWF4T2NjdXJzXCJdID0gXCJFZG0uSW50NjRcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Bc3NvY2lhdGlvbkVudGl0eVwiXSA9IFwiRWRtLk5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EZXJpdmVkTmF2aWdhdGlvblwiXSA9IFwiRWRtLk5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5NYXNrZWRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlJldmVhbE9uRGVtYW5kXCJdID0gXCJFZG0uQm9vbGVhblwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNlbWFudGljT2JqZWN0TWFwcGluZ1wiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNlbWFudGljT2JqZWN0TWFwcGluZ1R5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0luc3RhbmNlQW5ub3RhdGlvblwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9uc1wiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvblR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5GaWVsZENvbnRyb2xcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5GaWVsZENvbnRyb2xUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuQXBwbGljYXRpb25cIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5BcHBsaWNhdGlvblR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UaW1lc3RhbXBcIl0gPSBcIkVkbS5EYXRlVGltZU9mZnNldFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkVycm9yUmVzb2x1dGlvblwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkVycm9yUmVzb2x1dGlvblR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5NZXNzYWdlc1wiXSA9IFwiRWRtLkNvbXBsZXhUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEubnVtZXJpY1NldmVyaXR5XCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTnVtZXJpY01lc3NhZ2VTZXZlcml0eVR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5NYXhpbXVtTnVtZXJpY01lc3NhZ2VTZXZlcml0eVwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLk51bWVyaWNNZXNzYWdlU2V2ZXJpdHlUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNBY3Rpb25Dcml0aWNhbFwiXSA9IFwiRWRtLkJvb2xlYW5cIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5BdHRyaWJ1dGVzXCJdID0gXCJFZG0uUHJvcGVydHlQYXRoXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuUmVsYXRlZFJlY3Vyc2l2ZUhpZXJhcmNoeVwiXSA9IFwiRWRtLkFubm90YXRpb25QYXRoXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSW50ZXJ2YWxcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5JbnRlcnZhbFR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5SZXN1bHRDb250ZXh0XCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TQVBPYmplY3ROb2RlVHlwZVwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNBUE9iamVjdE5vZGVUeXBlVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkNvbXBvc2l0aW9uXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc05hdHVyYWxQZXJzb25cIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RSZWxldmFudFF1YWxpZmllcnNcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlNpbXBsZUlkZW50aWZpZXJcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXNcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdE1hcHBpbmdcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RNYXBwaW5nVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzQ2FsZW5kYXJZZWFyXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0NhbGVuZGFySGFsZnllYXJcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzQ2FsZW5kYXJRdWFydGVyXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0NhbGVuZGFyTW9udGhcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzQ2FsZW5kYXJXZWVrXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0RheU9mQ2FsZW5kYXJNb250aFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNEYXlPZkNhbGVuZGFyWWVhclwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNDYWxlbmRhclllYXJIYWxmeWVhclwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNDYWxlbmRhclllYXJRdWFydGVyXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0NhbGVuZGFyWWVhck1vbnRoXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0NhbGVuZGFyWWVhcldlZWtcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzQ2FsZW5kYXJEYXRlXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0Zpc2NhbFllYXJcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzRmlzY2FsUGVyaW9kXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0Zpc2NhbFllYXJQZXJpb2RcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzRmlzY2FsUXVhcnRlclwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNGaXNjYWxZZWFyUXVhcnRlclwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNGaXNjYWxXZWVrXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0Zpc2NhbFllYXJXZWVrXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0RheU9mRmlzY2FsWWVhclwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNGaXNjYWxZZWFyVmFyaWFudFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTXV0dWFsbHlFeGNsdXNpdmVUZXJtXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdFJvb3RcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdFJvb3RUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnROb2RlXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnROb2RlVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0QWN0aXZhdGlvblZpYVwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuU2ltcGxlSWRlbnRpZmllclwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkVkaXRhYmxlRmllbGRGb3JcIl0gPSBcIkVkbS5Qcm9wZXJ0eVBhdGhcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TZW1hbnRpY0tleVwiXSA9IFwiRWRtLlByb3BlcnR5UGF0aFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNpZGVFZmZlY3RzXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU2lkZUVmZmVjdHNUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRGVmYXVsdFZhbHVlc0Z1bmN0aW9uXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuUXVhbGlmaWVkTmFtZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkZpbHRlckRlZmF1bHRWYWx1ZVwiXSA9IFwiRWRtLlByaW1pdGl2ZVR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5GaWx0ZXJEZWZhdWx0VmFsdWVIaWdoXCJdID0gXCJFZG0uUHJpbWl0aXZlVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNvcnRPcmRlclwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNvcnRPcmRlclR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5SZWN1cnNpdmVIaWVyYXJjaHlcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5SZWN1cnNpdmVIaWVyYXJjaHlUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuQ3JlYXRlZEF0XCJdID0gXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5DcmVhdGVkQnlcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Vc2VySURcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5DaGFuZ2VkQXRcIl0gPSBcIkVkbS5EYXRlVGltZU9mZnNldFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkNoYW5nZWRCeVwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlVzZXJJRFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkFwcGx5TXVsdGlVbml0QmVoYXZpb3JGb3JTb3J0aW5nQW5kRmlsdGVyaW5nXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5QcmltaXRpdmVQcm9wZXJ0eVBhdGhcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29kZUxpc3QudjEuQ3VycmVuY3lDb2Rlc1wiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29kZUxpc3QudjEuQ29kZUxpc3RTb3VyY2VcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvZGVMaXN0LnYxLlVuaXRzT2ZNZWFzdXJlXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db2RlTGlzdC52MS5Db2RlTGlzdFNvdXJjZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29kZUxpc3QudjEuU3RhbmRhcmRDb2RlXCJdID0gXCJFZG0uUHJvcGVydHlQYXRoXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db2RlTGlzdC52MS5FeHRlcm5hbENvZGVcIl0gPSBcIkVkbS5Qcm9wZXJ0eVBhdGhcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvZGVMaXN0LnYxLklzQ29uZmlndXJhdGlvbkRlcHJlY2F0aW9uQ29kZVwiXSA9IFwiRWRtLkJvb2xlYW5cIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW11bmljYXRpb24udjEuQ29udGFjdFwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbXVuaWNhdGlvbi52MS5Db250YWN0VHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbXVuaWNhdGlvbi52MS5BZGRyZXNzXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tdW5pY2F0aW9uLnYxLkFkZHJlc3NUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tdW5pY2F0aW9uLnYxLklzRW1haWxBZGRyZXNzXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW11bmljYXRpb24udjEuSXNQaG9uZU51bWJlclwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tdW5pY2F0aW9uLnYxLkV2ZW50XCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tdW5pY2F0aW9uLnYxLkV2ZW50RGF0YVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbXVuaWNhdGlvbi52MS5UYXNrXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tdW5pY2F0aW9uLnYxLlRhc2tEYXRhXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tdW5pY2F0aW9uLnYxLk1lc3NhZ2VcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW11bmljYXRpb24udjEuTWVzc2FnZURhdGFcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkhpZXJhcmNoeS52MS5SZWN1cnNpdmVIaWVyYXJjaHlcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkhpZXJhcmNoeS52MS5SZWN1cnNpdmVIaWVyYXJjaHlUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5IaWVyYXJjaHkudjEuUmVjdXJzaXZlSGllcmFyY2h5QWN0aW9uc1wiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuSGllcmFyY2h5LnYxLlJlY3Vyc2l2ZUhpZXJhcmNoeUFjdGlvbnNUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5IaWVyYXJjaHkudjEuTWF0Y2hDb3VudFwiXSA9IFwiRWRtLkludDY0XCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5IaWVyYXJjaHkudjEuUmVjdXJzaXZlSGllcmFyY2h5U3VwcG9ydGVkXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlBlcnNvbmFsRGF0YS52MS5FbnRpdHlTZW1hbnRpY3NcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlBlcnNvbmFsRGF0YS52MS5FbnRpdHlTZW1hbnRpY3NUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5QZXJzb25hbERhdGEudjEuRmllbGRTZW1hbnRpY3NcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlBlcnNvbmFsRGF0YS52MS5GaWVsZFNlbWFudGljc1R5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlBlcnNvbmFsRGF0YS52MS5Jc1BvdGVudGlhbGx5UGVyc29uYWxcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuUGVyc29uYWxEYXRhLnYxLklzUG90ZW50aWFsbHlTZW5zaXRpdmVcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuU2Vzc2lvbi52MS5TdGlja3lTZXNzaW9uU3VwcG9ydGVkXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5TZXNzaW9uLnYxLlN0aWNreVNlc3Npb25TdXBwb3J0ZWRUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IZWFkZXJJbmZvXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IZWFkZXJJbmZvVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSWRlbnRpZmljYXRpb25cIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEFic3RyYWN0XCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5CYWRnZVwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQmFkZ2VUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5MaW5lSXRlbVwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkQWJzdHJhY3RcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlN0YXR1c0luZm9cIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEFic3RyYWN0XCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5GaWVsZEdyb3VwXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5GaWVsZEdyb3VwVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ29ubmVjdGVkRmllbGRzXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5Db25uZWN0ZWRGaWVsZHNUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5HZW9Mb2NhdGlvbnNcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkdlb0xvY2F0aW9uVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuR2VvTG9jYXRpb25cIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkdlb0xvY2F0aW9uVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ29udGFjdHNcIl0gPSBcIkVkbS5Bbm5vdGF0aW9uUGF0aFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuTWVkaWFSZXNvdXJjZVwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuTWVkaWFSZXNvdXJjZVR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFQb2ludFwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YVBvaW50VHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuS1BJXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5LUElUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5DaGFydFwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ2hhcnREZWZpbml0aW9uVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVmFsdWVDcml0aWNhbGl0eVwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVmFsdWVDcml0aWNhbGl0eVR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNyaXRpY2FsaXR5TGFiZWxzXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5Dcml0aWNhbGl0eUxhYmVsVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuU2VsZWN0aW9uRmllbGRzXCJdID0gXCJFZG0uUHJvcGVydHlQYXRoXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5GYWNldHNcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkZhY2V0XCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IZWFkZXJGYWNldHNcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkZhY2V0XCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5RdWlja1ZpZXdGYWNldHNcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkZhY2V0XCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5RdWlja0NyZWF0ZUZhY2V0c1wiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRmFjZXRcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkZpbHRlckZhY2V0c1wiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuUmVmZXJlbmNlRmFjZXRcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5QcmVzZW50YXRpb25WYXJpYW50XCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5QcmVzZW50YXRpb25WYXJpYW50VHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuU2VsZWN0aW9uVmFyaWFudFwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuU2VsZWN0aW9uVmFyaWFudFR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlRoaW5nUGVyc3BlY3RpdmVcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSXNTdW1tYXJ5XCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlBhcnRPZlByZXZpZXdcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuTWFwXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkdhbGxlcnlcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSXNJbWFnZVVSTFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5Jc0ltYWdlXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLk11bHRpTGluZVRleHRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50XCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5Ob3RlXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5Ob3RlVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSW1wb3J0YW5jZVwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSW1wb3J0YW5jZVR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhpZGRlblwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5Jc0NvcHlBY3Rpb25cIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ3JlYXRlSGlkZGVuXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlVwZGF0ZUhpZGRlblwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EZWxldGVIaWRkZW5cIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGlkZGVuRmlsdGVyXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkFkYXB0YXRpb25IaWRkZW5cIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRGVmYXVsdFwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkQWJzdHJhY3RcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNyaXRpY2FsaXR5XCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5Dcml0aWNhbGl0eVR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNyaXRpY2FsaXR5Q2FsY3VsYXRpb25cIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNyaXRpY2FsaXR5Q2FsY3VsYXRpb25UeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5FbXBoYXNpemVkXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLk9yZGVyQnlcIl0gPSBcIkVkbS5Qcm9wZXJ0eVBhdGhcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlBhcmFtZXRlckRlZmF1bHRWYWx1ZVwiXSA9IFwiRWRtLlByaW1pdGl2ZVR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlJlY29tbWVuZGF0aW9uU3RhdGVcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlJlY29tbWVuZGF0aW9uU3RhdGVUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5SZWNvbW1lbmRhdGlvbkxpc3RcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlJlY29tbWVuZGF0aW9uTGlzdFR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkV4Y2x1ZGVGcm9tTmF2aWdhdGlvbkNvbnRleHRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRG9Ob3RDaGVja1NjYWxlT2ZNZWFzdXJlZFF1YW50aXR5XCJdID0gXCJFZG0uQm9vbGVhblwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuSFRNTDUudjEuQ3NzRGVmYXVsdHNcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkhUTUw1LnYxLkNzc0RlZmF1bHRzVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuSFRNTDUudjEuTGlua1RhcmdldFwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuSFRNTDUudjEuTGlua1RhcmdldFR5cGVcIjtcbn0pKFRlcm1Ub1R5cGVzID0gZXhwb3J0cy5UZXJtVG9UeXBlcyB8fCAoZXhwb3J0cy5UZXJtVG9UeXBlcyA9IHt9KSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuVm9jYWJ1bGFyeVJlZmVyZW5jZXMgPSB2b2lkIDA7XG4vKipcbiAqIFRoZSBsaXN0IG9mIHZvY2FidWxhcmllcyB3aXRoIGRlZmF1bHQgYWxpYXNlcy5cbiAqL1xuZXhwb3J0cy5Wb2NhYnVsYXJ5UmVmZXJlbmNlcyA9IFtcbiAgICB7IGFsaWFzOiBcIkF1dGhcIiwgbmFtZXNwYWNlOiBcIk9yZy5PRGF0YS5BdXRob3JpemF0aW9uLlYxXCIsIHVyaTogXCJodHRwczovL29hc2lzLXRjcy5naXRodWIuaW8vb2RhdGEtdm9jYWJ1bGFyaWVzL3ZvY2FidWxhcmllcy9PcmcuT0RhdGEuQXV0aG9yaXphdGlvbi5WMS54bWxcIiB9LFxuICAgIHsgYWxpYXM6IFwiQ29yZVwiLCBuYW1lc3BhY2U6IFwiT3JnLk9EYXRhLkNvcmUuVjFcIiwgdXJpOiBcImh0dHBzOi8vb2FzaXMtdGNzLmdpdGh1Yi5pby9vZGF0YS12b2NhYnVsYXJpZXMvdm9jYWJ1bGFyaWVzL09yZy5PRGF0YS5Db3JlLlYxLnhtbFwiIH0sXG4gICAgeyBhbGlhczogXCJDYXBhYmlsaXRpZXNcIiwgbmFtZXNwYWNlOiBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjFcIiwgdXJpOiBcImh0dHBzOi8vb2FzaXMtdGNzLmdpdGh1Yi5pby9vZGF0YS12b2NhYnVsYXJpZXMvdm9jYWJ1bGFyaWVzL09yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEueG1sXCIgfSxcbiAgICB7IGFsaWFzOiBcIkFnZ3JlZ2F0aW9uXCIsIG5hbWVzcGFjZTogXCJPcmcuT0RhdGEuQWdncmVnYXRpb24uVjFcIiwgdXJpOiBcImh0dHBzOi8vb2FzaXMtdGNzLmdpdGh1Yi5pby9vZGF0YS12b2NhYnVsYXJpZXMvdm9jYWJ1bGFyaWVzL09yZy5PRGF0YS5BZ2dyZWdhdGlvbi5WMS54bWxcIiB9LFxuICAgIHsgYWxpYXM6IFwiVmFsaWRhdGlvblwiLCBuYW1lc3BhY2U6IFwiT3JnLk9EYXRhLlZhbGlkYXRpb24uVjFcIiwgdXJpOiBcImh0dHBzOi8vb2FzaXMtdGNzLmdpdGh1Yi5pby9vZGF0YS12b2NhYnVsYXJpZXMvdm9jYWJ1bGFyaWVzL09yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLnhtbFwiIH0sXG4gICAgeyBhbGlhczogXCJNZWFzdXJlc1wiLCBuYW1lc3BhY2U6IFwiT3JnLk9EYXRhLk1lYXN1cmVzLlYxXCIsIHVyaTogXCJodHRwczovL29hc2lzLXRjcy5naXRodWIuaW8vb2RhdGEtdm9jYWJ1bGFyaWVzL3ZvY2FidWxhcmllcy9PcmcuT0RhdGEuTWVhc3VyZXMuVjEueG1sXCIgfSxcbiAgICB7IGFsaWFzOiBcIkFuYWx5dGljc1wiLCBuYW1lc3BhY2U6IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQW5hbHl0aWNzLnYxXCIsIHVyaTogXCJodHRwczovL3NhcC5naXRodWIuaW8vb2RhdGEtdm9jYWJ1bGFyaWVzL3ZvY2FidWxhcmllcy9BbmFseXRpY3MueG1sXCIgfSxcbiAgICB7IGFsaWFzOiBcIkNvbW1vblwiLCBuYW1lc3BhY2U6IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxXCIsIHVyaTogXCJodHRwczovL3NhcC5naXRodWIuaW8vb2RhdGEtdm9jYWJ1bGFyaWVzL3ZvY2FidWxhcmllcy9Db21tb24ueG1sXCIgfSxcbiAgICB7IGFsaWFzOiBcIkNvZGVMaXN0XCIsIG5hbWVzcGFjZTogXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db2RlTGlzdC52MVwiLCB1cmk6IFwiaHR0cHM6Ly9zYXAuZ2l0aHViLmlvL29kYXRhLXZvY2FidWxhcmllcy92b2NhYnVsYXJpZXMvQ29kZUxpc3QueG1sXCIgfSxcbiAgICB7IGFsaWFzOiBcIkNvbW11bmljYXRpb25cIiwgbmFtZXNwYWNlOiBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW11bmljYXRpb24udjFcIiwgdXJpOiBcImh0dHBzOi8vc2FwLmdpdGh1Yi5pby9vZGF0YS12b2NhYnVsYXJpZXMvdm9jYWJ1bGFyaWVzL0NvbW11bmljYXRpb24ueG1sXCIgfSxcbiAgICB7IGFsaWFzOiBcIkhpZXJhcmNoeVwiLCBuYW1lc3BhY2U6IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuSGllcmFyY2h5LnYxXCIsIHVyaTogXCJodHRwczovL3NhcC5naXRodWIuaW8vb2RhdGEtdm9jYWJ1bGFyaWVzL3ZvY2FidWxhcmllcy9IaWVyYXJjaHkueG1sXCIgfSxcbiAgICB7IGFsaWFzOiBcIlBlcnNvbmFsRGF0YVwiLCBuYW1lc3BhY2U6IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuUGVyc29uYWxEYXRhLnYxXCIsIHVyaTogXCJodHRwczovL3NhcC5naXRodWIuaW8vb2RhdGEtdm9jYWJ1bGFyaWVzL3ZvY2FidWxhcmllcy9QZXJzb25hbERhdGEueG1sXCIgfSxcbiAgICB7IGFsaWFzOiBcIlNlc3Npb25cIiwgbmFtZXNwYWNlOiBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlNlc3Npb24udjFcIiwgdXJpOiBcImh0dHBzOi8vc2FwLmdpdGh1Yi5pby9vZGF0YS12b2NhYnVsYXJpZXMvdm9jYWJ1bGFyaWVzL1Nlc3Npb24ueG1sXCIgfSxcbiAgICB7IGFsaWFzOiBcIlVJXCIsIG5hbWVzcGFjZTogXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MVwiLCB1cmk6IFwiaHR0cHM6Ly9zYXAuZ2l0aHViLmlvL29kYXRhLXZvY2FidWxhcmllcy92b2NhYnVsYXJpZXMvVUkueG1sXCIgfSxcbiAgICB7IGFsaWFzOiBcIkhUTUw1XCIsIG5hbWVzcGFjZTogXCJjb20uc2FwLnZvY2FidWxhcmllcy5IVE1MNS52MVwiLCB1cmk6IFwiaHR0cHM6Ly9zYXAuZ2l0aHViLmlvL29kYXRhLXZvY2FidWxhcmllcy92b2NhYnVsYXJpZXMvSFRNTDUueG1sXCIgfVxuXTtcbiIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIiLCIvLyBzdGFydHVwXG4vLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8vIFRoaXMgZW50cnkgbW9kdWxlIGlzIHJlZmVyZW5jZWQgYnkgb3RoZXIgbW9kdWxlcyBzbyBpdCBjYW4ndCBiZSBpbmxpbmVkXG52YXIgX193ZWJwYWNrX2V4cG9ydHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTQ0KTtcbiIsIiJdfQ==
2041
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Bbm5vdGF0aW9uQ29udmVydGVyL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2FwLXV4K2Fubm90YXRpb24tY29udmVydGVyQDAuOC41L25vZGVfbW9kdWxlcy9Ac2FwLXV4L2Fubm90YXRpb24tY29udmVydGVyL3NyYy9jb252ZXJ0ZXIudHMiLCJ3ZWJwYWNrOi8vQW5ub3RhdGlvbkNvbnZlcnRlci9ub2RlX21vZHVsZXMvLnBucG0vQHNhcC11eCthbm5vdGF0aW9uLWNvbnZlcnRlckAwLjguNS9ub2RlX21vZHVsZXMvQHNhcC11eC9hbm5vdGF0aW9uLWNvbnZlcnRlci9zcmMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQW5ub3RhdGlvbkNvbnZlcnRlci9ub2RlX21vZHVsZXMvLnBucG0vQHNhcC11eCthbm5vdGF0aW9uLWNvbnZlcnRlckAwLjguNS9ub2RlX21vZHVsZXMvQHNhcC11eC9hbm5vdGF0aW9uLWNvbnZlcnRlci9zcmMvdXRpbHMudHMiLCJ3ZWJwYWNrOi8vQW5ub3RhdGlvbkNvbnZlcnRlci9ub2RlX21vZHVsZXMvLnBucG0vQHNhcC11eCthbm5vdGF0aW9uLWNvbnZlcnRlckAwLjguNS9ub2RlX21vZHVsZXMvQHNhcC11eC9hbm5vdGF0aW9uLWNvbnZlcnRlci9zcmMvd3JpdGViYWNrLnRzIiwid2VicGFjazovL0Fubm90YXRpb25Db252ZXJ0ZXIvbm9kZV9tb2R1bGVzLy5wbnBtL0BzYXAtdXgrdm9jYWJ1bGFyaWVzLXR5cGVzQDAuMTAuNC9ub2RlX21vZHVsZXMvQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0VudW1Jc0ZsYWcuanMiLCJ3ZWJwYWNrOi8vQW5ub3RhdGlvbkNvbnZlcnRlci9ub2RlX21vZHVsZXMvLnBucG0vQHNhcC11eCt2b2NhYnVsYXJpZXMtdHlwZXNAMC4xMC40L25vZGVfbW9kdWxlcy9Ac2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVGVybVRvVHlwZXMuanMiLCJ3ZWJwYWNrOi8vQW5ub3RhdGlvbkNvbnZlcnRlci9ub2RlX21vZHVsZXMvLnBucG0vQHNhcC11eCt2b2NhYnVsYXJpZXMtdHlwZXNAMC4xMC40L25vZGVfbW9kdWxlcy9Ac2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVm9jYWJ1bGFyeVJlZmVyZW5jZXMuanMiLCJ3ZWJwYWNrOi8vQW5ub3RhdGlvbkNvbnZlcnRlci93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9Bbm5vdGF0aW9uQ29udmVydGVyL3dlYnBhY2svc3RhcnR1cCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBeUNBLHdEQUFvRztBQUNwRyx5Q0FhaUI7QUFFakI7O0dBRUc7QUFDSCxNQUFNLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0FBRXREOzs7Ozs7R0FNRztBQUNILFNBQVMsZ0JBQWdCLENBQUMsVUFBaUIsRUFBRSxhQUFrQjtJQUMzRCxJQUFJLFVBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxLQUFLLGFBQWEsRUFBRTtRQUNyRCxVQUFVLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0tBQ2xDO0lBQ0QsT0FBTyxVQUFVLENBQUM7QUFDdEIsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsU0FBUyxhQUFhLENBQ2xCLFNBQW9CLEVBQ3BCLFlBQWlCLEVBQ2pCLElBQXdCLEVBQ3hCLGVBQXdCOztJQUV4QixJQUFJLElBQUksS0FBSyxTQUFTLEVBQUU7UUFDcEIsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLENBQUM7S0FDOUQ7SUFFRCxzREFBc0Q7SUFDdEQsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ3RCLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pC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QUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLHdDQUF3QyxtQkFBbUIsS0FBSzs7Ozs7Ozs7QUN4UXBEO0FBQ2IsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELDRCQUE0QjtBQUM1QjtBQUNBO0FBQ0E7QUFDQSw0QkFBNEI7QUFDNUIsTUFBTSxvS0FBb0s7QUFDMUssTUFBTSx5SUFBeUk7QUFDL0ksTUFBTSxpS0FBaUs7QUFDdkssTUFBTSw4SkFBOEo7QUFDcEssTUFBTSwySkFBMko7QUFDakssTUFBTSxxSkFBcUo7QUFDM0osTUFBTSxnSkFBZ0o7QUFDdEosTUFBTSx1SUFBdUk7QUFDN0ksTUFBTSw2SUFBNkk7QUFDbkosTUFBTSw0SkFBNEo7QUFDbEssTUFBTSxnSkFBZ0o7QUFDdEosTUFBTSx5SkFBeUo7QUFDL0osTUFBTSwwSUFBMEk7QUFDaEosTUFBTSwySEFBMkg7QUFDakksTUFBTTtBQUNOOzs7Ozs7O1VDdEJBO1VBQ0E7O1VBRUE7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7O1VBRUE7VUFDQTs7VUFFQTtVQUNBO1VBQ0E7Ozs7VUN0QkE7VUFDQTtVQUNBO1VBQ0EiLCJmaWxlIjoiQW5ub3RhdGlvbkNvbnZlcnRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG4gICAgQWN0aW9uLFxuICAgIEFjdGlvbkltcG9ydCxcbiAgICBBY3Rpb25QYXJhbWV0ZXIsXG4gICAgQW5ub3RhdGlvbixcbiAgICBBbm5vdGF0aW9uUGF0aCxcbiAgICBBbm5vdGF0aW9uUmVjb3JkLFxuICAgIEFycmF5V2l0aEluZGV4LFxuICAgIEJhc2VOYXZpZ2F0aW9uUHJvcGVydHksXG4gICAgQ29tcGxleFR5cGUsXG4gICAgQ29udmVydGVkTWV0YWRhdGEsXG4gICAgRW50aXR5Q29udGFpbmVyLFxuICAgIEVudGl0eVNldCxcbiAgICBFbnRpdHlUeXBlLFxuICAgIEV4cHJlc3Npb24sXG4gICAgRnVsbHlRdWFsaWZpZWROYW1lLFxuICAgIE5hdmlnYXRpb25Qcm9wZXJ0eSxcbiAgICBOYXZpZ2F0aW9uUHJvcGVydHlQYXRoLFxuICAgIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbixcbiAgICBQcm9wZXJ0eSxcbiAgICBQcm9wZXJ0eVBhdGgsXG4gICAgUmF3QWN0aW9uLFxuICAgIFJhd0FjdGlvbkltcG9ydCxcbiAgICBSYXdBbm5vdGF0aW9uLFxuICAgIFJhd0NvbXBsZXhUeXBlLFxuICAgIFJhd0VudGl0eUNvbnRhaW5lcixcbiAgICBSYXdFbnRpdHlTZXQsXG4gICAgUmF3RW50aXR5VHlwZSxcbiAgICBSYXdNZXRhZGF0YSxcbiAgICBSYXdOYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nLFxuICAgIFJhd1Byb3BlcnR5LFxuICAgIFJhd1NjaGVtYSxcbiAgICBSYXdTaW5nbGV0b24sXG4gICAgUmF3VHlwZURlZmluaXRpb24sXG4gICAgUmF3VjJOYXZpZ2F0aW9uUHJvcGVydHksXG4gICAgUmF3VjROYXZpZ2F0aW9uUHJvcGVydHksXG4gICAgUmVtb3ZlQW5ub3RhdGlvbkFuZFR5cGUsXG4gICAgUmVzb2x1dGlvblRhcmdldCxcbiAgICBTaW5nbGV0b24sXG4gICAgVHlwZURlZmluaXRpb25cbn0gZnJvbSAnQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMnO1xuaW1wb3J0IHsgVm9jYWJ1bGFyeVJlZmVyZW5jZXMgfSBmcm9tICdAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVm9jYWJ1bGFyeVJlZmVyZW5jZXMnO1xuaW1wb3J0IHtcbiAgICBhZGRHZXRCeVZhbHVlLFxuICAgIGFsaWFzLFxuICAgIERlY2ltYWwsXG4gICAgRW51bUlzRmxhZyxcbiAgICBsYXp5LFxuICAgIG1lcmdlQW5ub3RhdGlvbnMsXG4gICAgc3BsaXRBdEZpcnN0LFxuICAgIHNwbGl0QXRMYXN0LFxuICAgIHN1YnN0cmluZ0JlZm9yZUZpcnN0LFxuICAgIHN1YnN0cmluZ0JlZm9yZUxhc3QsXG4gICAgVGVybVRvVHlwZXMsXG4gICAgdW5hbGlhc1xufSBmcm9tICcuL3V0aWxzJztcblxuLyoqXG4gKiBTeW1ib2wgdG8gZXh0ZW5kIGFuIGFubm90YXRpb24gd2l0aCB0aGUgcmVmZXJlbmNlIHRvIGl0cyB0YXJnZXQuXG4gKi9cbmNvbnN0IEFOTk9UQVRJT05fVEFSR0VUID0gU3ltYm9sKCdBbm5vdGF0aW9uIFRhcmdldCcpO1xuXG4vKipcbiAqIEFwcGVuZCBhbiBvYmplY3QgdG8gdGhlIGxpc3Qgb2YgdmlzaXRlZCBvYmplY3RzIGlmIGl0IGlzIGRpZmZlcmVudCBmcm9tIHRoZSBsYXN0IG9iamVjdCBpbiB0aGUgbGlzdC5cbiAqXG4gKiBAcGFyYW0gb2JqZWN0UGF0aCAgICBUaGUgbGlzdCBvZiB2aXNpdGVkIG9iamVjdHNcbiAqIEBwYXJhbSB2aXNpdGVkT2JqZWN0IFRoZSBvYmplY3RcbiAqIEByZXR1cm5zIFRoZSBsaXN0IG9mIHZpc2l0ZWQgb2JqZWN0c1xuICovXG5mdW5jdGlvbiBhcHBlbmRPYmplY3RQYXRoKG9iamVjdFBhdGg6IGFueVtdLCB2aXNpdGVkT2JqZWN0OiBhbnkpOiBhbnlbXSB7XG4gICAgaWYgKG9iamVjdFBhdGhbb2JqZWN0UGF0aC5sZW5ndGggLSAxXSAhPT0gdmlzaXRlZE9iamVjdCkge1xuICAgICAgICBvYmplY3RQYXRoLnB1c2godmlzaXRlZE9iamVjdCk7XG4gICAgfVxuICAgIHJldHVybiBvYmplY3RQYXRoO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIGEgKHBvc3NpYmx5IHJlbGF0aXZlKSBwYXRoLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXIgICAgICAgICBDb252ZXJ0ZXJcbiAqIEBwYXJhbSBzdGFydEVsZW1lbnQgICAgICBUaGUgc3RhcnRpbmcgcG9pbnQgaW4gY2FzZSBvZiByZWxhdGl2ZSBwYXRoIHJlc29sdXRpb25cbiAqIEBwYXJhbSBwYXRoICAgICAgICAgICAgICBUaGUgcGF0aCB0byByZXNvbHZlXG4gKiBAcGFyYW0gYW5ub3RhdGlvbnNUZXJtICAgT25seSBmb3IgZXJyb3IgcmVwb3J0aW5nOiBUaGUgYW5ub3RhdGlvbiB0ZXJtXG4gKiBAcmV0dXJucyBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgcmVzb2x2ZWQgdGFyZ2V0IGFuZCB0aGUgZWxlbWVudHMgdGhhdCB3ZXJlIHZpc2l0ZWQgd2hpbGUgZ2V0dGluZyB0byB0aGUgdGFyZ2V0LlxuICovXG5mdW5jdGlvbiByZXNvbHZlVGFyZ2V0PFQ+KFxuICAgIGNvbnZlcnRlcjogQ29udmVydGVyLFxuICAgIHN0YXJ0RWxlbWVudDogYW55LFxuICAgIHBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBhbm5vdGF0aW9uc1Rlcm0/OiBzdHJpbmdcbik6IFJlc29sdXRpb25UYXJnZXQ8VD4ge1xuICAgIGlmIChwYXRoID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHsgdGFyZ2V0OiB1bmRlZmluZWQsIG9iamVjdFBhdGg6IFtdLCBtZXNzYWdlczogW10gfTtcbiAgICB9XG5cbiAgICAvLyBhYnNvbHV0ZSBwYXRocyBhbHdheXMgc3RhcnQgYXQgdGhlIGVudGl0eSBjb250YWluZXJcbiAgICBpZiAocGF0aC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgICAgcGF0aCA9IHBhdGguc3Vic3RyaW5nKDEpO1xuICAgICAgICBzdGFydEVsZW1lbnQgPSB1bmRlZmluZWQ7IC8vIHdpbGwgcmVzb2x2ZSB0byB0aGUgZW50aXR5IGNvbnRhaW5lciAoc2VlIGJlbG93KVxuICAgIH1cblxuICAgIGNvbnN0IHBhdGhTZWdtZW50cyA9IHBhdGguc3BsaXQoJy8nKS5yZWR1Y2UoKHRhcmdldFBhdGgsIHNlZ21lbnQpID0+IHtcbiAgICAgICAgaWYgKHNlZ21lbnQuaW5jbHVkZXMoJ0AnKSkge1xuICAgICAgICAgICAgLy8gU2VwYXJhdGUgb3V0IHRoZSBhbm5vdGF0aW9uXG4gICAgICAgICAgICBjb25zdCBbcGF0aFBhcnQsIGFubm90YXRpb25QYXJ0XSA9IHNwbGl0QXRGaXJzdChzZWdtZW50LCAnQCcpO1xuICAgICAgICAgICAgdGFyZ2V0UGF0aC5wdXNoKHBhdGhQYXJ0KTtcbiAgICAgICAgICAgIHRhcmdldFBhdGgucHVzaChgQCR7YW5ub3RhdGlvblBhcnR9YCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0YXJnZXRQYXRoLnB1c2goc2VnbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRhcmdldFBhdGg7XG4gICAgfSwgW10gYXMgc3RyaW5nW10pO1xuXG4gICAgLy8gZGV0ZXJtaW5lIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdGhlIHJlc29sdXRpb25cbiAgICBpZiAoc3RhcnRFbGVtZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gbm8gc3RhcnRpbmcgcG9pbnQgZ2l2ZW46IHN0YXJ0IGF0IHRoZSBlbnRpdHkgY29udGFpbmVyXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHBhdGhTZWdtZW50c1swXS5zdGFydHNXaXRoKGAke2NvbnZlcnRlci5yYXdTY2hlbWEubmFtZXNwYWNlfS5gKSAmJlxuICAgICAgICAgICAgcGF0aFNlZ21lbnRzWzBdICE9PSBjb252ZXJ0ZXIuZ2V0Q29udmVydGVkRW50aXR5Q29udGFpbmVyKCk/LmZ1bGx5UXVhbGlmaWVkTmFtZVxuICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIFdlIGhhdmUgYSBmdWxseSBxdWFsaWZpZWQgbmFtZSBpbiB0aGUgcGF0aCB0aGF0IGlzIG5vdCB0aGUgZW50aXR5IGNvbnRhaW5lci5cbiAgICAgICAgICAgIHN0YXJ0RWxlbWVudCA9XG4gICAgICAgICAgICAgICAgY29udmVydGVyLmdldENvbnZlcnRlZEVudGl0eVR5cGUocGF0aFNlZ21lbnRzWzBdKSA/P1xuICAgICAgICAgICAgICAgIGNvbnZlcnRlci5nZXRDb252ZXJ0ZWRDb21wbGV4VHlwZShwYXRoU2VnbWVudHNbMF0pID8/XG4gICAgICAgICAgICAgICAgY29udmVydGVyLmdldENvbnZlcnRlZEFjdGlvbihwYXRoU2VnbWVudHNbMF0pID8/XG4gICAgICAgICAgICAgICAgY29udmVydGVyLmdldENvbnZlcnRlZEFjdGlvbihgJHtwYXRoU2VnbWVudHNbMF19KClgKTsgLy8gdW5ib3VuZCBhY3Rpb25cbiAgICAgICAgICAgIHBhdGhTZWdtZW50cy5zaGlmdCgpOyAvLyBMZXQncyByZW1vdmUgdGhlIGZpcnN0IHBhdGggZWxlbWVudFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RhcnRFbGVtZW50ID0gY29udmVydGVyLmdldENvbnZlcnRlZEVudGl0eUNvbnRhaW5lcigpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChzdGFydEVsZW1lbnRbQU5OT1RBVElPTl9UQVJHRVRdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gYW5ub3RhdGlvbjogc3RhcnQgYXQgdGhlIGFubm90YXRpb24gdGFyZ2V0XG4gICAgICAgIHN0YXJ0RWxlbWVudCA9IHN0YXJ0RWxlbWVudFtBTk5PVEFUSU9OX1RBUkdFVF07XG4gICAgfSBlbHNlIGlmIChzdGFydEVsZW1lbnQuX3R5cGUgPT09ICdQcm9wZXJ0eScpIHtcbiAgICAgICAgLy8gcHJvcGVydHk6IHN0YXJ0IGF0IHRoZSBlbnRpdHkgdHlwZSBvciBjb21wbGV4IHR5cGUgdGhlIHByb3BlcnR5IGJlbG9uZ3MgdG9cbiAgICAgICAgY29uc3QgcGFyZW50RWxlbWVudEZRTiA9IHN1YnN0cmluZ0JlZm9yZUZpcnN0KHN0YXJ0RWxlbWVudC5mdWxseVF1YWxpZmllZE5hbWUsICcvJyk7XG4gICAgICAgIHN0YXJ0RWxlbWVudCA9XG4gICAgICAgICAgICBjb252ZXJ0ZXIuZ2V0Q29udmVydGVkRW50aXR5VHlwZShwYXJlbnRFbGVtZW50RlFOKSA/PyBjb252ZXJ0ZXIuZ2V0Q29udmVydGVkQ29tcGxleFR5cGUocGFyZW50RWxlbWVudEZRTik7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gcGF0aFNlZ21lbnRzLnJlZHVjZShcbiAgICAgICAgKGN1cnJlbnQ6IFJlc29sdXRpb25UYXJnZXQ8YW55Piwgc2VnbWVudDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBlcnJvciA9IChtZXNzYWdlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICBjdXJyZW50Lm1lc3NhZ2VzLnB1c2goeyBtZXNzYWdlIH0pO1xuICAgICAgICAgICAgICAgIGN1cnJlbnQudGFyZ2V0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgaWYgKGN1cnJlbnQudGFyZ2V0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY3VycmVudC5vYmplY3RQYXRoID0gYXBwZW5kT2JqZWN0UGF0aChjdXJyZW50Lm9iamVjdFBhdGgsIGN1cnJlbnQudGFyZ2V0KTtcblxuICAgICAgICAgICAgLy8gQW5ub3RhdGlvblxuICAgICAgICAgICAgaWYgKHNlZ21lbnQuc3RhcnRzV2l0aCgnQCcpICYmIHNlZ21lbnQgIT09ICdAJHVpNS5vdmVybG9hZCcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBbdm9jYWJ1bGFyeUFsaWFzLCB0ZXJtXSA9IGNvbnZlcnRlci5zcGxpdFRlcm0oc2VnbWVudCk7XG4gICAgICAgICAgICAgICAgY29uc3QgYW5ub3RhdGlvbiA9IGN1cnJlbnQudGFyZ2V0LmFubm90YXRpb25zW3ZvY2FidWxhcnlBbGlhcy5zdWJzdHJpbmcoMSldPy5bdGVybV07XG5cbiAgICAgICAgICAgICAgICBpZiAoYW5ub3RhdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnQudGFyZ2V0ID0gYW5ub3RhdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihcbiAgICAgICAgICAgICAgICAgICAgYEFubm90YXRpb24gJyR7c2VnbWVudC5zdWJzdHJpbmcoMSl9JyBub3QgZm91bmQgb24gJHtjdXJyZW50LnRhcmdldC5fdHlwZX0gJyR7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LnRhcmdldC5mdWxseVF1YWxpZmllZE5hbWVcbiAgICAgICAgICAgICAgICAgICAgfSdgXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gJFBhdGggLyAkQW5ub3RhdGlvblBhdGggc3ludGF4XG4gICAgICAgICAgICBpZiAoY3VycmVudC50YXJnZXQuJHRhcmdldCkge1xuICAgICAgICAgICAgICAgIGxldCBzdWJQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgaWYgKHNlZ21lbnQgPT09ICckQW5ub3RhdGlvblBhdGgnKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1YlBhdGggPSBjdXJyZW50LnRhcmdldC52YWx1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNlZ21lbnQgPT09ICckUGF0aCcpIHtcbiAgICAgICAgICAgICAgICAgICAgc3ViUGF0aCA9IGN1cnJlbnQudGFyZ2V0LnBhdGg7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHN1YlBhdGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdWJUYXJnZXQgPSByZXNvbHZlVGFyZ2V0KGNvbnZlcnRlciwgY3VycmVudC50YXJnZXRbQU5OT1RBVElPTl9UQVJHRVRdLCBzdWJQYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgc3ViVGFyZ2V0Lm9iamVjdFBhdGguZm9yRWFjaCgodmlzaXRlZFN1Yk9iamVjdDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWN1cnJlbnQub2JqZWN0UGF0aC5pbmNsdWRlcyh2aXNpdGVkU3ViT2JqZWN0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQub2JqZWN0UGF0aCA9IGFwcGVuZE9iamVjdFBhdGgoY3VycmVudC5vYmplY3RQYXRoLCB2aXNpdGVkU3ViT2JqZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgY3VycmVudC50YXJnZXQgPSBzdWJUYXJnZXQudGFyZ2V0O1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50Lm9iamVjdFBhdGggPSBhcHBlbmRPYmplY3RQYXRoKGN1cnJlbnQub2JqZWN0UGF0aCwgY3VycmVudC50YXJnZXQpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHRyYXZlcnNlIGJhc2VkIG9uIHRoZSBlbGVtZW50IHR5cGVcbiAgICAgICAgICAgIHN3aXRjaCAoY3VycmVudC50YXJnZXQ/Ll90eXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnU2NoZW1hJzpcbiAgICAgICAgICAgICAgICAgICAgLy8gbmV4dCBlbGVtZW50OiBFbnRpdHlUeXBlLCBDb21wbGV4VHlwZSwgQWN0aW9uLCBFbnRpdHlDb250YWluZXIgP1xuXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ0VudGl0eUNvbnRhaW5lcic6XG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRoaXNFbGVtZW50ID0gY3VycmVudC50YXJnZXQgYXMgRW50aXR5Q29udGFpbmVyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VnbWVudCA9PT0gJycgfHwgY29udmVydGVyLnVuYWxpYXMoc2VnbWVudCkgPT09IHRoaXNFbGVtZW50LmZ1bGx5UXVhbGlmaWVkTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBuZXh0IGVsZW1lbnQ6IEVudGl0eVNldCwgU2luZ2xldG9uIG9yIEFjdGlvbkltcG9ydD9cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRFbGVtZW50OiBFbnRpdHlTZXQgfCBTaW5nbGV0b24gfCBBY3Rpb25JbXBvcnQgfCB1bmRlZmluZWQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNFbGVtZW50LmVudGl0eVNldHMuYnlfbmFtZShzZWdtZW50KSA/P1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNFbGVtZW50LnNpbmdsZXRvbnMuYnlfbmFtZShzZWdtZW50KSA/P1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNFbGVtZW50LmFjdGlvbkltcG9ydHMuYnlfbmFtZShzZWdtZW50KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC50YXJnZXQgPSBuZXh0RWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgJ0VudGl0eVNldCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnU2luZ2xldG9uJzoge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0aGlzRWxlbWVudCA9IGN1cnJlbnQudGFyZ2V0IGFzIEVudGl0eVNldCB8IFNpbmdsZXRvbjtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoc2VnbWVudCA9PT0gJycgfHwgc2VnbWVudCA9PT0gJyRUeXBlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gRW1wdHkgUGF0aCBhZnRlciBhbiBFbnRpdHlTZXQgb3IgU2luZ2xldG9uIG1lYW5zIEVudGl0eVR5cGVcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQudGFyZ2V0ID0gdGhpc0VsZW1lbnQuZW50aXR5VHlwZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlZ21lbnQgPT09ICckJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoc2VnbWVudCA9PT0gJyROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmF2aWdhdGlvblByb3BlcnR5QmluZGluZ3MgPSB0aGlzRWxlbWVudC5uYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC50YXJnZXQgPSBuYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5ncztcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gY29udGludWUgcmVzb2x2aW5nIGF0IHRoZSBFbnRpdHlTZXQncyBvciBTaW5nbGV0b24ncyB0eXBlXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc29sdmVUYXJnZXQoY29udmVydGVyLCB0aGlzRWxlbWVudC5lbnRpdHlUeXBlLCBzZWdtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudC50YXJnZXQgPSByZXN1bHQudGFyZ2V0O1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50Lm9iamVjdFBhdGggPSByZXN1bHQub2JqZWN0UGF0aC5yZWR1Y2UoYXBwZW5kT2JqZWN0UGF0aCwgY3VycmVudC5vYmplY3RQYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY2FzZSAnRW50aXR5VHlwZSc6XG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRoaXNFbGVtZW50ID0gY3VycmVudC50YXJnZXQgYXMgRW50aXR5VHlwZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlZ21lbnQgPT09ICcnIHx8IHNlZ21lbnQgPT09ICckVHlwZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJvcGVydHkgPSB0aGlzRWxlbWVudC5lbnRpdHlQcm9wZXJ0aWVzLmJ5X25hbWUoc2VnbWVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LnRhcmdldCA9IHByb3BlcnR5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuYXZpZ2F0aW9uUHJvcGVydHkgPSB0aGlzRWxlbWVudC5uYXZpZ2F0aW9uUHJvcGVydGllcy5ieV9uYW1lKHNlZ21lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hdmlnYXRpb25Qcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQudGFyZ2V0ID0gbmF2aWdhdGlvblByb3BlcnR5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhY3Rpb25OYW1lID0gc3Vic3RyaW5nQmVmb3JlRmlyc3QoY29udmVydGVyLnVuYWxpYXMoc2VnbWVudCksICcoJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhY3Rpb24gPSB0aGlzRWxlbWVudC5hY3Rpb25zW2FjdGlvbk5hbWVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQudGFyZ2V0ID0gYWN0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnQWN0aW9uSW1wb3J0Jzoge1xuICAgICAgICAgICAgICAgICAgICAvLyBjb250aW51ZSByZXNvbHZpbmcgYXQgdGhlIEFjdGlvblxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSByZXNvbHZlVGFyZ2V0KGNvbnZlcnRlciwgY3VycmVudC50YXJnZXQuYWN0aW9uLCBzZWdtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudC50YXJnZXQgPSByZXN1bHQudGFyZ2V0O1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50Lm9iamVjdFBhdGggPSByZXN1bHQub2JqZWN0UGF0aC5yZWR1Y2UoYXBwZW5kT2JqZWN0UGF0aCwgY3VycmVudC5vYmplY3RQYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY2FzZSAnQWN0aW9uJzoge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0aGlzRWxlbWVudCA9IGN1cnJlbnQudGFyZ2V0IGFzIEFjdGlvbjtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoc2VnbWVudCA9PT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlZ21lbnQgPT09ICdAJHVpNS5vdmVybG9hZCcgfHwgc2VnbWVudCA9PT0gJzAnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWdtZW50ID09PSAnJFBhcmFtZXRlcicgJiYgdGhpc0VsZW1lbnQuaXNCb3VuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC50YXJnZXQgPSB0aGlzRWxlbWVudC5wYXJhbWV0ZXJzO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0RWxlbWVudCA9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzRWxlbWVudC5wYXJhbWV0ZXJzW3NlZ21lbnQgYXMgYW55XSA/P1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpc0VsZW1lbnQucGFyYW1ldGVycy5maW5kKChwYXJhbTogQWN0aW9uUGFyYW1ldGVyKSA9PiBwYXJhbS5uYW1lID09PSBzZWdtZW50KTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQudGFyZ2V0ID0gbmV4dEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjYXNlICdQcm9wZXJ0eSc6XG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRoaXNFbGVtZW50ID0gY3VycmVudC50YXJnZXQgYXMgUHJvcGVydHk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFByb3BlcnR5IG9yIE5hdmlnYXRpb25Qcm9wZXJ0eSBvZiB0aGUgQ29tcGxleFR5cGVcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHR5cGUgPSB0aGlzRWxlbWVudC50YXJnZXRUeXBlIGFzIENvbXBsZXhUeXBlIHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByb3BlcnR5ID0gdHlwZS5wcm9wZXJ0aWVzLmJ5X25hbWUoc2VnbWVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQudGFyZ2V0ID0gcHJvcGVydHk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5hdmlnYXRpb25Qcm9wZXJ0eSA9IHR5cGUubmF2aWdhdGlvblByb3BlcnRpZXMuYnlfbmFtZShzZWdtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmF2aWdhdGlvblByb3BlcnR5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQudGFyZ2V0ID0gbmF2aWdhdGlvblByb3BlcnR5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlICdBY3Rpb25QYXJhbWV0ZXInOlxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWZlcmVuY2VkVHlwZSA9IChjdXJyZW50LnRhcmdldCBhcyBBY3Rpb25QYXJhbWV0ZXIpLnR5cGVSZWZlcmVuY2U7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWZlcmVuY2VkVHlwZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSByZXNvbHZlVGFyZ2V0KGNvbnZlcnRlciwgcmVmZXJlbmNlZFR5cGUsIHNlZ21lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC50YXJnZXQgPSByZXN1bHQudGFyZ2V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC5vYmplY3RQYXRoID0gcmVzdWx0Lm9iamVjdFBhdGgucmVkdWNlKGFwcGVuZE9iamVjdFBhdGgsIGN1cnJlbnQub2JqZWN0UGF0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgJ05hdmlnYXRpb25Qcm9wZXJ0eSc6XG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnRpbnVlIGF0IHRoZSBOYXZpZ2F0aW9uUHJvcGVydHkncyB0YXJnZXQgdHlwZVxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSByZXNvbHZlVGFyZ2V0KGNvbnZlcnRlciwgKGN1cnJlbnQudGFyZ2V0IGFzIE5hdmlnYXRpb25Qcm9wZXJ0eSkudGFyZ2V0VHlwZSwgc2VnbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnQudGFyZ2V0ID0gcmVzdWx0LnRhcmdldDtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudC5vYmplY3RQYXRoID0gcmVzdWx0Lm9iamVjdFBhdGgucmVkdWNlKGFwcGVuZE9iamVjdFBhdGgsIGN1cnJlbnQub2JqZWN0UGF0aCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlZ21lbnQgPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50LnRhcmdldFtzZWdtZW50XSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC50YXJnZXQgPSBjdXJyZW50LnRhcmdldFtzZWdtZW50XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQub2JqZWN0UGF0aCA9IGFwcGVuZE9iamVjdFBhdGgoY3VycmVudC5vYmplY3RQYXRoLCBjdXJyZW50LnRhcmdldCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZXJyb3IoXG4gICAgICAgICAgICAgICAgYEVsZW1lbnQgJyR7c2VnbWVudH0nIG5vdCBmb3VuZCBhdCAke2N1cnJlbnQudGFyZ2V0Ll90eXBlfSAnJHtjdXJyZW50LnRhcmdldC5mdWxseVF1YWxpZmllZE5hbWV9J2BcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0sXG4gICAgICAgIHsgdGFyZ2V0OiBzdGFydEVsZW1lbnQsIG9iamVjdFBhdGg6IFtdLCBtZXNzYWdlczogW10gfVxuICAgICk7XG5cbiAgICAvLyBEaWFnbm9zdGljc1xuICAgIHJlc3VsdC5tZXNzYWdlcy5mb3JFYWNoKChtZXNzYWdlKSA9PiBjb252ZXJ0ZXIubG9nRXJyb3IobWVzc2FnZS5tZXNzYWdlKSk7XG4gICAgaWYgKCFyZXN1bHQudGFyZ2V0KSB7XG4gICAgICAgIGlmIChhbm5vdGF0aW9uc1Rlcm0pIHtcbiAgICAgICAgICAgIGNvbnN0IGFubm90YXRpb25UeXBlID0gaW5mZXJUeXBlRnJvbVRlcm0oY29udmVydGVyLCBhbm5vdGF0aW9uc1Rlcm0sIHN0YXJ0RWxlbWVudC5mdWxseVF1YWxpZmllZE5hbWUpO1xuICAgICAgICAgICAgY29udmVydGVyLmxvZ0Vycm9yKFxuICAgICAgICAgICAgICAgICdVbmFibGUgdG8gcmVzb2x2ZSB0aGUgcGF0aCBleHByZXNzaW9uOiAnICtcbiAgICAgICAgICAgICAgICAgICAgJ1xcbicgK1xuICAgICAgICAgICAgICAgICAgICBwYXRoICtcbiAgICAgICAgICAgICAgICAgICAgJ1xcbicgK1xuICAgICAgICAgICAgICAgICAgICAnXFxuJyArXG4gICAgICAgICAgICAgICAgICAgICdIaW50OiBDaGVjayBhbmQgY29ycmVjdCB0aGUgcGF0aCB2YWx1ZXMgdW5kZXIgdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUgaW4gdGhlIG1ldGFkYXRhIChhbm5vdGF0aW9uLnhtbCBmaWxlIG9yIENEUyBhbm5vdGF0aW9ucyBmb3IgdGhlIGFwcGxpY2F0aW9uKTogXFxuXFxuJyArXG4gICAgICAgICAgICAgICAgICAgICc8QW5ub3RhdGlvbiBUZXJtID0gJyArXG4gICAgICAgICAgICAgICAgICAgIGFubm90YXRpb25zVGVybSArXG4gICAgICAgICAgICAgICAgICAgICc+JyArXG4gICAgICAgICAgICAgICAgICAgICdcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgJzxSZWNvcmQgVHlwZSA9ICcgK1xuICAgICAgICAgICAgICAgICAgICBhbm5vdGF0aW9uVHlwZSArXG4gICAgICAgICAgICAgICAgICAgICc+JyArXG4gICAgICAgICAgICAgICAgICAgICdcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgJzxBbm5vdGF0aW9uUGF0aCA9ICcgK1xuICAgICAgICAgICAgICAgICAgICBwYXRoICtcbiAgICAgICAgICAgICAgICAgICAgJz4nXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29udmVydGVyLmxvZ0Vycm9yKFxuICAgICAgICAgICAgICAgICdVbmFibGUgdG8gcmVzb2x2ZSB0aGUgcGF0aCBleHByZXNzaW9uOiAnICtcbiAgICAgICAgICAgICAgICAgICAgcGF0aCArXG4gICAgICAgICAgICAgICAgICAgICdcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgJ1xcbicgK1xuICAgICAgICAgICAgICAgICAgICAnSGludDogQ2hlY2sgYW5kIGNvcnJlY3QgdGhlIHBhdGggdmFsdWVzIHVuZGVyIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlIGluIHRoZSBtZXRhZGF0YSAoYW5ub3RhdGlvbi54bWwgZmlsZSBvciBDRFMgYW5ub3RhdGlvbnMgZm9yIHRoZSBhcHBsaWNhdGlvbik6IFxcblxcbicgK1xuICAgICAgICAgICAgICAgICAgICAnPEFubm90YXRpb24gVGVybSA9ICcgK1xuICAgICAgICAgICAgICAgICAgICBwYXRoU2VnbWVudHNbMF0gK1xuICAgICAgICAgICAgICAgICAgICAnPicgK1xuICAgICAgICAgICAgICAgICAgICAnXFxuJyArXG4gICAgICAgICAgICAgICAgICAgICc8UHJvcGVydHlWYWx1ZSAgUGF0aD0gJyArXG4gICAgICAgICAgICAgICAgICAgIHBhdGhTZWdtZW50c1sxXSArXG4gICAgICAgICAgICAgICAgICAgICc+J1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogVHlwZWd1YXJkIHRvIGNoZWNrIGlmIHRoZSBwYXRoIGNvbnRhaW5zIGFuIGFubm90YXRpb24uXG4gKlxuICogQHBhcmFtIHBhdGhTdHIgdGhlIHBhdGggdG8gZXZhbHVhdGVcbiAqIEByZXR1cm5zIHRydWUgaWYgdGhlcmUgaXMgYW4gYW5ub3RhdGlvbiBpbiB0aGUgcGF0aC5cbiAqL1xuZnVuY3Rpb24gaXNBbm5vdGF0aW9uUGF0aChwYXRoU3RyOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gcGF0aFN0ci5pbmNsdWRlcygnQCcpO1xufVxuXG50eXBlIEFubm90YXRpb25WYWx1ZTxUPiA9IFQgJiB7IFtBTk5PVEFUSU9OX1RBUkdFVF06IGFueSB9O1xuXG5mdW5jdGlvbiBtYXBQcm9wZXJ0eVBhdGgoXG4gICAgY29udmVydGVyOiBDb252ZXJ0ZXIsXG4gICAgcHJvcGVydHlQYXRoOiB7IHR5cGU6ICdQcm9wZXJ0eVBhdGgnOyBQcm9wZXJ0eVBhdGg6IHN0cmluZyB9LFxuICAgIGZ1bGx5UXVhbGlmaWVkTmFtZTogRnVsbHlRdWFsaWZpZWROYW1lLFxuICAgIGN1cnJlbnRUYXJnZXQ6IGFueSxcbiAgICBjdXJyZW50VGVybTogc3RyaW5nXG4pIHtcbiAgICBjb25zdCByZXN1bHQ6IE9taXQ8QW5ub3RhdGlvblZhbHVlPFByb3BlcnR5UGF0aD4sICckdGFyZ2V0Jz4gPSB7XG4gICAgICAgIHR5cGU6ICdQcm9wZXJ0eVBhdGgnLFxuICAgICAgICB2YWx1ZTogcHJvcGVydHlQYXRoLlByb3BlcnR5UGF0aCxcbiAgICAgICAgZnVsbHlRdWFsaWZpZWROYW1lOiBmdWxseVF1YWxpZmllZE5hbWUsXG4gICAgICAgIFtBTk5PVEFUSU9OX1RBUkdFVF06IGN1cnJlbnRUYXJnZXRcbiAgICB9O1xuXG4gICAgbGF6eShcbiAgICAgICAgcmVzdWx0IGFzIEFubm90YXRpb25WYWx1ZTxQcm9wZXJ0eVBhdGg+LFxuICAgICAgICAnJHRhcmdldCcsXG4gICAgICAgICgpID0+IHJlc29sdmVUYXJnZXQ8UHJvcGVydHk+KGNvbnZlcnRlciwgY3VycmVudFRhcmdldCwgcHJvcGVydHlQYXRoLlByb3BlcnR5UGF0aCwgY3VycmVudFRlcm0pLnRhcmdldFxuICAgICk7XG5cbiAgICByZXR1cm4gcmVzdWx0IGFzIEFubm90YXRpb25WYWx1ZTxQcm9wZXJ0eVBhdGg+O1xufVxuXG5mdW5jdGlvbiBtYXBBbm5vdGF0aW9uUGF0aChcbiAgICBjb252ZXJ0ZXI6IENvbnZlcnRlcixcbiAgICBhbm5vdGF0aW9uUGF0aDogeyB0eXBlOiAnQW5ub3RhdGlvblBhdGgnOyBBbm5vdGF0aW9uUGF0aDogc3RyaW5nIH0sXG4gICAgZnVsbHlRdWFsaWZpZWROYW1lOiBGdWxseVF1YWxpZmllZE5hbWUsXG4gICAgY3VycmVudFRhcmdldDogYW55LFxuICAgIGN1cnJlbnRUZXJtOiBzdHJpbmdcbikge1xuICAgIGNvbnN0IHJlc3VsdDogT21pdDxBbm5vdGF0aW9uVmFsdWU8QW5ub3RhdGlvblBhdGg8YW55Pj4sICckdGFyZ2V0Jz4gPSB7XG4gICAgICAgIHR5cGU6ICdBbm5vdGF0aW9uUGF0aCcsXG4gICAgICAgIHZhbHVlOiBjb252ZXJ0ZXIudW5hbGlhcyhhbm5vdGF0aW9uUGF0aC5Bbm5vdGF0aW9uUGF0aCksXG4gICAgICAgIGZ1bGx5UXVhbGlmaWVkTmFtZTogZnVsbHlRdWFsaWZpZWROYW1lLFxuICAgICAgICBbQU5OT1RBVElPTl9UQVJHRVRdOiBjdXJyZW50VGFyZ2V0XG4gICAgfTtcblxuICAgIGxhenkoXG4gICAgICAgIHJlc3VsdCBhcyBBbm5vdGF0aW9uVmFsdWU8QW5ub3RhdGlvblBhdGg8YW55Pj4sXG4gICAgICAgICckdGFyZ2V0JyxcbiAgICAgICAgKCkgPT4gcmVzb2x2ZVRhcmdldChjb252ZXJ0ZXIsIGN1cnJlbnRUYXJnZXQsIHJlc3VsdC52YWx1ZSwgY3VycmVudFRlcm0pLnRhcmdldFxuICAgICk7XG5cbiAgICByZXR1cm4gcmVzdWx0IGFzIEFubm90YXRpb25WYWx1ZTxBbm5vdGF0aW9uUGF0aDxhbnk+Pjtcbn1cblxuZnVuY3Rpb24gbWFwTmF2aWdhdGlvblByb3BlcnR5UGF0aChcbiAgICBjb252ZXJ0ZXI6IENvbnZlcnRlcixcbiAgICBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoOiB7IHR5cGU6ICdOYXZpZ2F0aW9uUHJvcGVydHlQYXRoJzsgTmF2aWdhdGlvblByb3BlcnR5UGF0aDogc3RyaW5nIH0sXG4gICAgZnVsbHlRdWFsaWZpZWROYW1lOiBGdWxseVF1YWxpZmllZE5hbWUsXG4gICAgY3VycmVudFRhcmdldDogYW55LFxuICAgIGN1cnJlbnRUZXJtOiBzdHJpbmdcbikge1xuICAgIGNvbnN0IHJlc3VsdDogT21pdDxBbm5vdGF0aW9uVmFsdWU8TmF2aWdhdGlvblByb3BlcnR5UGF0aD4sICckdGFyZ2V0Jz4gPSB7XG4gICAgICAgIHR5cGU6ICdOYXZpZ2F0aW9uUHJvcGVydHlQYXRoJyxcbiAgICAgICAgdmFsdWU6IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGguTmF2aWdhdGlvblByb3BlcnR5UGF0aCA/PyAnJyxcbiAgICAgICAgZnVsbHlRdWFsaWZpZWROYW1lOiBmdWxseVF1YWxpZmllZE5hbWUsXG4gICAgICAgIFtBTk5PVEFUSU9OX1RBUkdFVF06IGN1cnJlbnRUYXJnZXRcbiAgICB9O1xuXG4gICAgbGF6eShcbiAgICAgICAgcmVzdWx0IGFzIEFubm90YXRpb25WYWx1ZTxOYXZpZ2F0aW9uUHJvcGVydHlQYXRoPixcbiAgICAgICAgJyR0YXJnZXQnLFxuICAgICAgICAoKSA9PlxuICAgICAgICAgICAgcmVzb2x2ZVRhcmdldDxOYXZpZ2F0aW9uUHJvcGVydHk+KFxuICAgICAgICAgICAgICAgIGNvbnZlcnRlcixcbiAgICAgICAgICAgICAgICBjdXJyZW50VGFyZ2V0LFxuICAgICAgICAgICAgICAgIG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGguTmF2aWdhdGlvblByb3BlcnR5UGF0aCxcbiAgICAgICAgICAgICAgICBjdXJyZW50VGVybVxuICAgICAgICAgICAgKS50YXJnZXRcbiAgICApO1xuXG4gICAgcmV0dXJuIHJlc3VsdCBhcyBBbm5vdGF0aW9uVmFsdWU8TmF2aWdhdGlvblByb3BlcnR5UGF0aD47XG59XG5cbmZ1bmN0aW9uIG1hcFBhdGgoXG4gICAgY29udmVydGVyOiBDb252ZXJ0ZXIsXG4gICAgcGF0aDogeyB0eXBlOiAnUGF0aCc7IFBhdGg6IHN0cmluZyB9LFxuICAgIGZ1bGx5UXVhbGlmaWVkTmFtZTogRnVsbHlRdWFsaWZpZWROYW1lLFxuICAgIGN1cnJlbnRUYXJnZXQ6IGFueSxcbiAgICBjdXJyZW50VGVybTogc3RyaW5nXG4pIHtcbiAgICBjb25zdCByZXN1bHQ6IE9taXQ8QW5ub3RhdGlvblZhbHVlPFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxhbnk+PiwgJyR0YXJnZXQnPiA9IHtcbiAgICAgICAgdHlwZTogJ1BhdGgnLFxuICAgICAgICBwYXRoOiBwYXRoLlBhdGgsXG4gICAgICAgIGZ1bGx5UXVhbGlmaWVkTmFtZTogZnVsbHlRdWFsaWZpZWROYW1lLFxuICAgICAgICBnZXRWYWx1ZSgpOiBhbnkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsgLy8gVE9ETzogUmVxdWlyZWQgYWNjb3JkaW5nIHRvIHRoZSB0eXBlLi4uXG4gICAgICAgIH0sXG4gICAgICAgIFtBTk5PVEFUSU9OX1RBUkdFVF06IGN1cnJlbnRUYXJnZXRcbiAgICB9O1xuXG4gICAgbGF6eShcbiAgICAgICAgcmVzdWx0IGFzIEFubm90YXRpb25WYWx1ZTxQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb248YW55Pj4sXG4gICAgICAgICckdGFyZ2V0JyxcbiAgICAgICAgKCkgPT4gcmVzb2x2ZVRhcmdldDxQcm9wZXJ0eT4oY29udmVydGVyLCBjdXJyZW50VGFyZ2V0LCBwYXRoLlBhdGgsIGN1cnJlbnRUZXJtKS50YXJnZXRcbiAgICApO1xuXG4gICAgcmV0dXJuIHJlc3VsdCBhcyBBbm5vdGF0aW9uVmFsdWU8UGF0aEFubm90YXRpb25FeHByZXNzaW9uPGFueT4+O1xufVxuXG5mdW5jdGlvbiBwYXJzZVZhbHVlKFxuICAgIGNvbnZlcnRlcjogQ29udmVydGVyLFxuICAgIGN1cnJlbnRUYXJnZXQ6IGFueSxcbiAgICBjdXJyZW50VGVybTogc3RyaW5nLFxuICAgIGN1cnJlbnRQcm9wZXJ0eTogc3RyaW5nLFxuICAgIGN1cnJlbnRTb3VyY2U6IHN0cmluZyxcbiAgICBwcm9wZXJ0eVZhbHVlOiBFeHByZXNzaW9uLFxuICAgIHZhbHVlRlFOOiBzdHJpbmdcbikge1xuICAgIGlmIChwcm9wZXJ0eVZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgc3dpdGNoIChwcm9wZXJ0eVZhbHVlLnR5cGUpIHtcbiAgICAgICAgY2FzZSAnU3RyaW5nJzpcbiAgICAgICAgICAgIHJldHVybiBwcm9wZXJ0eVZhbHVlLlN0cmluZztcbiAgICAgICAgY2FzZSAnSW50JzpcbiAgICAgICAgICAgIHJldHVybiBwcm9wZXJ0eVZhbHVlLkludDtcbiAgICAgICAgY2FzZSAnQm9vbCc6XG4gICAgICAgICAgICByZXR1cm4gcHJvcGVydHlWYWx1ZS5Cb29sO1xuICAgICAgICBjYXNlICdEZWNpbWFsJzpcbiAgICAgICAgICAgIHJldHVybiBEZWNpbWFsKHByb3BlcnR5VmFsdWUuRGVjaW1hbCk7XG4gICAgICAgIGNhc2UgJ0RhdGUnOlxuICAgICAgICAgICAgcmV0dXJuIHByb3BlcnR5VmFsdWUuRGF0ZTtcbiAgICAgICAgY2FzZSAnRW51bU1lbWJlcic6XG4gICAgICAgICAgICBjb25zdCBzcGxpdEVudW0gPSBwcm9wZXJ0eVZhbHVlLkVudW1NZW1iZXIuc3BsaXQoJyAnKS5tYXAoKGVudW1WYWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHVuYWxpYXNlZCA9IGNvbnZlcnRlci51bmFsaWFzKGVudW1WYWx1ZSkgPz8gJyc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFsaWFzKFZvY2FidWxhcnlSZWZlcmVuY2VzLCB1bmFsaWFzZWQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoc3BsaXRFbnVtWzBdICE9PSB1bmRlZmluZWQgJiYgRW51bUlzRmxhZ1tzdWJzdHJpbmdCZWZvcmVGaXJzdChzcGxpdEVudW1bMF0sICcvJyldKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNwbGl0RW51bTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzcGxpdEVudW1bMF07XG5cbiAgICAgICAgY2FzZSAnUHJvcGVydHlQYXRoJzpcbiAgICAgICAgICAgIHJldHVybiBtYXBQcm9wZXJ0eVBhdGgoY29udmVydGVyLCBwcm9wZXJ0eVZhbHVlLCB2YWx1ZUZRTiwgY3VycmVudFRhcmdldCwgY3VycmVudFRlcm0pO1xuXG4gICAgICAgIGNhc2UgJ05hdmlnYXRpb25Qcm9wZXJ0eVBhdGgnOlxuICAgICAgICAgICAgcmV0dXJuIG1hcE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgoY29udmVydGVyLCBwcm9wZXJ0eVZhbHVlLCB2YWx1ZUZRTiwgY3VycmVudFRhcmdldCwgY3VycmVudFRlcm0pO1xuXG4gICAgICAgIGNhc2UgJ0Fubm90YXRpb25QYXRoJzpcbiAgICAgICAgICAgIHJldHVybiBtYXBBbm5vdGF0aW9uUGF0aChjb252ZXJ0ZXIsIHByb3BlcnR5VmFsdWUsIHZhbHVlRlFOLCBjdXJyZW50VGFyZ2V0LCBjdXJyZW50VGVybSk7XG5cbiAgICAgICAgY2FzZSAnUGF0aCc6IHtcbiAgICAgICAgICAgIGlmIChpc0Fubm90YXRpb25QYXRoKHByb3BlcnR5VmFsdWUuUGF0aCkpIHtcbiAgICAgICAgICAgICAgICAvLyBpbmxpbmUgdGhlIHRhcmdldFxuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlVGFyZ2V0KGNvbnZlcnRlciwgY3VycmVudFRhcmdldCwgcHJvcGVydHlWYWx1ZS5QYXRoLCBjdXJyZW50VGVybSkudGFyZ2V0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbWFwUGF0aChjb252ZXJ0ZXIsIHByb3BlcnR5VmFsdWUsIHZhbHVlRlFOLCBjdXJyZW50VGFyZ2V0LCBjdXJyZW50VGVybSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlICdSZWNvcmQnOlxuICAgICAgICAgICAgcmV0dXJuIHBhcnNlUmVjb3JkKFxuICAgICAgICAgICAgICAgIGNvbnZlcnRlcixcbiAgICAgICAgICAgICAgICBjdXJyZW50VGVybSxcbiAgICAgICAgICAgICAgICBjdXJyZW50VGFyZ2V0LFxuICAgICAgICAgICAgICAgIGN1cnJlbnRQcm9wZXJ0eSxcbiAgICAgICAgICAgICAgICBjdXJyZW50U291cmNlLFxuICAgICAgICAgICAgICAgIHByb3BlcnR5VmFsdWUuUmVjb3JkLFxuICAgICAgICAgICAgICAgIHZhbHVlRlFOXG4gICAgICAgICAgICApO1xuXG4gICAgICAgIGNhc2UgJ0NvbGxlY3Rpb24nOlxuICAgICAgICAgICAgcmV0dXJuIHBhcnNlQ29sbGVjdGlvbihcbiAgICAgICAgICAgICAgICBjb252ZXJ0ZXIsXG4gICAgICAgICAgICAgICAgY3VycmVudFRhcmdldCxcbiAgICAgICAgICAgICAgICBjdXJyZW50VGVybSxcbiAgICAgICAgICAgICAgICBjdXJyZW50UHJvcGVydHksXG4gICAgICAgICAgICAgICAgY3VycmVudFNvdXJjZSxcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eVZhbHVlLkNvbGxlY3Rpb24sXG4gICAgICAgICAgICAgICAgdmFsdWVGUU5cbiAgICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgJ0FwcGx5JzpcbiAgICAgICAgY2FzZSAnTnVsbCc6XG4gICAgICAgIGNhc2UgJ05vdCc6XG4gICAgICAgIGNhc2UgJ0VxJzpcbiAgICAgICAgY2FzZSAnTmUnOlxuICAgICAgICBjYXNlICdHdCc6XG4gICAgICAgIGNhc2UgJ0dlJzpcbiAgICAgICAgY2FzZSAnTHQnOlxuICAgICAgICBjYXNlICdMZSc6XG4gICAgICAgIGNhc2UgJ0lmJzpcbiAgICAgICAgY2FzZSAnQW5kJzpcbiAgICAgICAgY2FzZSAnT3InOlxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIHByb3BlcnR5VmFsdWU7XG4gICAgfVxufVxuXG4vKipcbiAqIEluZmVyIHRoZSB0eXBlIG9mIGEgdGVybSBiYXNlZCBvbiBpdHMgdHlwZS5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyICAgICAgICAgQ29udmVydGVyXG4gKiBAcGFyYW0gYW5ub3RhdGlvbnNUZXJtICAgVGhlIGFubm90YXRpb24gdGVybVxuICogQHBhcmFtIGFubm90YXRpb25UYXJnZXQgIFRoZSBhbm5vdGF0aW9uIHRhcmdldFxuICogQHBhcmFtIGN1cnJlbnRQcm9wZXJ0eSAgIFRoZSBjdXJyZW50IHByb3BlcnR5IG9mIHRoZSByZWNvcmRcbiAqIEByZXR1cm5zIFRoZSBpbmZlcnJlZCB0eXBlLlxuICovXG5mdW5jdGlvbiBpbmZlclR5cGVGcm9tVGVybShcbiAgICBjb252ZXJ0ZXI6IENvbnZlcnRlcixcbiAgICBhbm5vdGF0aW9uc1Rlcm06IHN0cmluZyxcbiAgICBhbm5vdGF0aW9uVGFyZ2V0OiBzdHJpbmcsXG4gICAgY3VycmVudFByb3BlcnR5Pzogc3RyaW5nXG4pIHtcbiAgICBsZXQgdGFyZ2V0VHlwZSA9IChUZXJtVG9UeXBlcyBhcyBhbnkpW2Fubm90YXRpb25zVGVybV07XG4gICAgaWYgKGN1cnJlbnRQcm9wZXJ0eSkge1xuICAgICAgICBhbm5vdGF0aW9uc1Rlcm0gPSBgJHtzdWJzdHJpbmdCZWZvcmVMYXN0KGFubm90YXRpb25zVGVybSwgJy4nKX0uJHtjdXJyZW50UHJvcGVydHl9YDtcbiAgICAgICAgdGFyZ2V0VHlwZSA9IChUZXJtVG9UeXBlcyBhcyBhbnkpW2Fubm90YXRpb25zVGVybV07XG4gICAgfVxuXG4gICAgY29udmVydGVyLmxvZ0Vycm9yKFxuICAgICAgICBgVGhlIHR5cGUgb2YgdGhlIHJlY29yZCB1c2VkIHdpdGhpbiB0aGUgdGVybSAke2Fubm90YXRpb25zVGVybX0gd2FzIG5vdCBkZWZpbmVkIGFuZCB3YXMgaW5mZXJyZWQgYXMgJHt0YXJnZXRUeXBlfS5cbkhpbnQ6IElmIHBvc3NpYmxlLCB0cnkgdG8gbWFpbnRhaW4gdGhlIFR5cGUgcHJvcGVydHkgZm9yIGVhY2ggUmVjb3JkLlxuPEFubm90YXRpb25zIFRhcmdldD1cIiR7YW5ub3RhdGlvblRhcmdldH1cIj5cblx0PEFubm90YXRpb24gVGVybT1cIiR7YW5ub3RhdGlvbnNUZXJtfVwiPlxuXHRcdDxSZWNvcmQ+Li4uPC9SZWNvcmQ+XG5cdDwvQW5ub3RhdGlvbj5cbjwvQW5ub3RhdGlvbnM+YFxuICAgICk7XG5cbiAgICByZXR1cm4gdGFyZ2V0VHlwZTtcbn1cblxuZnVuY3Rpb24gaXNEYXRhRmllbGRXaXRoRm9yQWN0aW9uKGFubm90YXRpb25Db250ZW50OiBhbnkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgICBhbm5vdGF0aW9uQ29udGVudC5oYXNPd25Qcm9wZXJ0eSgnQWN0aW9uJykgJiZcbiAgICAgICAgKGFubm90YXRpb25Db250ZW50LiRUeXBlID09PSAnY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9yQWN0aW9uJyB8fFxuICAgICAgICAgICAgYW5ub3RhdGlvbkNvbnRlbnQuJFR5cGUgPT09ICdjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRXaXRoQWN0aW9uJylcbiAgICApO1xufVxuXG5mdW5jdGlvbiBwYXJzZVJlY29yZFR5cGUoXG4gICAgY29udmVydGVyOiBDb252ZXJ0ZXIsXG4gICAgY3VycmVudFRlcm06IHN0cmluZyxcbiAgICBjdXJyZW50VGFyZ2V0OiBhbnksXG4gICAgY3VycmVudFByb3BlcnR5OiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgcmVjb3JkRGVmaW5pdGlvbjogQW5ub3RhdGlvblJlY29yZFxuKSB7XG4gICAgbGV0IHRhcmdldFR5cGU7XG4gICAgaWYgKCFyZWNvcmREZWZpbml0aW9uLnR5cGUgJiYgY3VycmVudFRlcm0pIHtcbiAgICAgICAgdGFyZ2V0VHlwZSA9IGluZmVyVHlwZUZyb21UZXJtKGNvbnZlcnRlciwgY3VycmVudFRlcm0sIGN1cnJlbnRUYXJnZXQuZnVsbHlRdWFsaWZpZWROYW1lLCBjdXJyZW50UHJvcGVydHkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRhcmdldFR5cGUgPSBjb252ZXJ0ZXIudW5hbGlhcyhyZWNvcmREZWZpbml0aW9uLnR5cGUpO1xuICAgIH1cbiAgICByZXR1cm4gdGFyZ2V0VHlwZTtcbn1cblxuZnVuY3Rpb24gcGFyc2VSZWNvcmQoXG4gICAgY29udmVydGVyOiBDb252ZXJ0ZXIsXG4gICAgY3VycmVudFRlcm06IHN0cmluZyxcbiAgICBjdXJyZW50VGFyZ2V0OiBhbnksXG4gICAgY3VycmVudFByb3BlcnR5OiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgY3VycmVudFNvdXJjZTogc3RyaW5nLFxuICAgIGFubm90YXRpb25SZWNvcmQ6IEFubm90YXRpb25SZWNvcmQsXG4gICAgY3VycmVudEZRTjogc3RyaW5nXG4pIHtcbiAgICBjb25zdCByZWNvcmQ6IGFueSA9IHtcbiAgICAgICAgJFR5cGU6IHBhcnNlUmVjb3JkVHlwZShjb252ZXJ0ZXIsIGN1cnJlbnRUZXJtLCBjdXJyZW50VGFyZ2V0LCBjdXJyZW50UHJvcGVydHksIGFubm90YXRpb25SZWNvcmQpLFxuICAgICAgICBmdWxseVF1YWxpZmllZE5hbWU6IGN1cnJlbnRGUU4sXG4gICAgICAgIFtBTk5PVEFUSU9OX1RBUkdFVF06IGN1cnJlbnRUYXJnZXQsXG4gICAgICAgIF9fc291cmNlOiBjdXJyZW50U291cmNlXG4gICAgfTtcblxuICAgIGZvciAoY29uc3QgcHJvcGVydHlWYWx1ZSBvZiBhbm5vdGF0aW9uUmVjb3JkLnByb3BlcnR5VmFsdWVzKSB7XG4gICAgICAgIGxhenkocmVjb3JkLCBwcm9wZXJ0eVZhbHVlLm5hbWUsICgpID0+XG4gICAgICAgICAgICBwYXJzZVZhbHVlKFxuICAgICAgICAgICAgICAgIGNvbnZlcnRlcixcbiAgICAgICAgICAgICAgICBjdXJyZW50VGFyZ2V0LFxuICAgICAgICAgICAgICAgIGN1cnJlbnRUZXJtLFxuICAgICAgICAgICAgICAgIHByb3BlcnR5VmFsdWUubmFtZSxcbiAgICAgICAgICAgICAgICBjdXJyZW50U291cmNlLFxuICAgICAgICAgICAgICAgIHByb3BlcnR5VmFsdWUudmFsdWUsXG4gICAgICAgICAgICAgICAgYCR7Y3VycmVudEZRTn0vJHtwcm9wZXJ0eVZhbHVlLm5hbWV9YFxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8vIGFubm90YXRpb25zIG9uIHRoZSByZWNvcmRcbiAgICBsYXp5KHJlY29yZCwgJ2Fubm90YXRpb25zJywgcmVzb2x2ZUFubm90YXRpb25zT25Bbm5vdGF0aW9uKGNvbnZlcnRlciwgYW5ub3RhdGlvblJlY29yZCwgcmVjb3JkKSk7XG5cbiAgICBpZiAoaXNEYXRhRmllbGRXaXRoRm9yQWN0aW9uKHJlY29yZCkpIHtcbiAgICAgICAgbGF6eShyZWNvcmQsICdBY3Rpb25UYXJnZXQnLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhY3Rpb25OYW1lID0gY29udmVydGVyLnVuYWxpYXMocmVjb3JkLkFjdGlvbj8udG9TdHJpbmcoKSk7XG5cbiAgICAgICAgICAgIC8vICgxKSBCb3VuZCBhY3Rpb24gb2YgdGhlIGFubm90YXRpb24gdGFyZ2V0P1xuICAgICAgICAgICAgbGV0IGFjdGlvblRhcmdldCA9IGN1cnJlbnRUYXJnZXQuYWN0aW9uc1thY3Rpb25OYW1lXTtcblxuICAgICAgICAgICAgaWYgKCFhY3Rpb25UYXJnZXQpIHtcbiAgICAgICAgICAgICAgICAvLyAoMikgQWN0aW9uSW1wb3J0ICg9IHVuYm91bmQgYWN0aW9uKT9cbiAgICAgICAgICAgICAgICBhY3Rpb25UYXJnZXQgPSBjb252ZXJ0ZXIuZ2V0Q29udmVydGVkQWN0aW9uSW1wb3J0KGFjdGlvbk5hbWUpPy5hY3Rpb247XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghYWN0aW9uVGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgLy8gKDMpIEJvdW5kIGFjdGlvbiBvZiBhIGRpZmZlcmVudCBFbnRpdHlUeXBlICh0aGUgYWN0aW9uTmFtZSBpcyBmdWxseSBxdWFsaWZpZWQgaW4gdGhpcyBjYXNlKVxuICAgICAgICAgICAgICAgIGFjdGlvblRhcmdldCA9IGNvbnZlcnRlci5nZXRDb252ZXJ0ZWRBY3Rpb24oYWN0aW9uTmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFhY3Rpb25UYXJnZXQ/LmlzQm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uVGFyZ2V0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFhY3Rpb25UYXJnZXQpIHtcbiAgICAgICAgICAgICAgICBjb252ZXJ0ZXIubG9nRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIGAke3JlY29yZC5mdWxseVF1YWxpZmllZE5hbWV9OiBVbmFibGUgdG8gcmVzb2x2ZSAnJHtyZWNvcmQuQWN0aW9ufScgKCcke2FjdGlvbk5hbWV9JylgXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhY3Rpb25UYXJnZXQ7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVjb3JkO1xufVxuXG5leHBvcnQgdHlwZSBDb2xsZWN0aW9uVHlwZSA9XG4gICAgfCAnUHJvcGVydHlQYXRoJ1xuICAgIHwgJ1BhdGgnXG4gICAgfCAnSWYnXG4gICAgfCAnQXBwbHknXG4gICAgfCAnTnVsbCdcbiAgICB8ICdBbmQnXG4gICAgfCAnRXEnXG4gICAgfCAnTmUnXG4gICAgfCAnTm90J1xuICAgIHwgJ0d0J1xuICAgIHwgJ0dlJ1xuICAgIHwgJ0x0J1xuICAgIHwgJ0xlJ1xuICAgIHwgJ09yJ1xuICAgIHwgJ0Fubm90YXRpb25QYXRoJ1xuICAgIHwgJ05hdmlnYXRpb25Qcm9wZXJ0eVBhdGgnXG4gICAgfCAnUmVjb3JkJ1xuICAgIHwgJ1N0cmluZydcbiAgICB8ICdFbXB0eUNvbGxlY3Rpb24nO1xuXG4vKipcbiAqIFJldHJpZXZlIG9yIGluZmVyIHRoZSBjb2xsZWN0aW9uIHR5cGUgYmFzZWQgb24gaXRzIGNvbnRlbnQuXG4gKlxuICogQHBhcmFtIGNvbGxlY3Rpb25EZWZpbml0aW9uXG4gKiBAcmV0dXJucyB0aGUgdHlwZSBvZiB0aGUgY29sbGVjdGlvblxuICovXG5mdW5jdGlvbiBnZXRPckluZmVyQ29sbGVjdGlvblR5cGUoY29sbGVjdGlvbkRlZmluaXRpb246IGFueVtdKTogQ29sbGVjdGlvblR5cGUge1xuICAgIGxldCB0eXBlOiBDb2xsZWN0aW9uVHlwZSA9IChjb2xsZWN0aW9uRGVmaW5pdGlvbiBhcyBhbnkpLnR5cGU7XG4gICAgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCAmJiBjb2xsZWN0aW9uRGVmaW5pdGlvbi5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0Q29sSXRlbSA9IGNvbGxlY3Rpb25EZWZpbml0aW9uWzBdO1xuICAgICAgICBpZiAoZmlyc3RDb2xJdGVtLmhhc093blByb3BlcnR5KCdQcm9wZXJ0eVBhdGgnKSkge1xuICAgICAgICAgICAgdHlwZSA9ICdQcm9wZXJ0eVBhdGgnO1xuICAgICAgICB9IGVsc2UgaWYgKGZpcnN0Q29sSXRlbS5oYXNPd25Qcm9wZXJ0eSgnUGF0aCcpKSB7XG4gICAgICAgICAgICB0eXBlID0gJ1BhdGgnO1xuICAgICAgICB9IGVsc2UgaWYgKGZpcnN0Q29sSXRlbS5oYXNPd25Qcm9wZXJ0eSgnQW5ub3RhdGlvblBhdGgnKSkge1xuICAgICAgICAgICAgdHlwZSA9ICdBbm5vdGF0aW9uUGF0aCc7XG4gICAgICAgIH0gZWxzZSBpZiAoZmlyc3RDb2xJdGVtLmhhc093blByb3BlcnR5KCdOYXZpZ2F0aW9uUHJvcGVydHlQYXRoJykpIHtcbiAgICAgICAgICAgIHR5cGUgPSAnTmF2aWdhdGlvblByb3BlcnR5UGF0aCc7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICB0eXBlb2YgZmlyc3RDb2xJdGVtID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgICAgKGZpcnN0Q29sSXRlbS5oYXNPd25Qcm9wZXJ0eSgndHlwZScpIHx8IGZpcnN0Q29sSXRlbS5oYXNPd25Qcm9wZXJ0eSgncHJvcGVydHlWYWx1ZXMnKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0eXBlID0gJ1JlY29yZCc7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGZpcnN0Q29sSXRlbSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHR5cGUgPSAnU3RyaW5nJztcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHR5cGUgPSAnRW1wdHlDb2xsZWN0aW9uJztcbiAgICB9XG4gICAgcmV0dXJuIHR5cGU7XG59XG5cbmZ1bmN0aW9uIHBhcnNlQ29sbGVjdGlvbihcbiAgICBjb252ZXJ0ZXI6IENvbnZlcnRlcixcbiAgICBjdXJyZW50VGFyZ2V0OiBhbnksXG4gICAgY3VycmVudFRlcm06IHN0cmluZyxcbiAgICBjdXJyZW50UHJvcGVydHk6IHN0cmluZyxcbiAgICBjdXJyZW50U291cmNlOiBzdHJpbmcsXG4gICAgY29sbGVjdGlvbkRlZmluaXRpb246IGFueVtdLFxuICAgIHBhcmVudEZRTjogc3RyaW5nXG4pIHtcbiAgICBjb25zdCBjb2xsZWN0aW9uRGVmaW5pdGlvblR5cGUgPSBnZXRPckluZmVyQ29sbGVjdGlvblR5cGUoY29sbGVjdGlvbkRlZmluaXRpb24pO1xuXG4gICAgc3dpdGNoIChjb2xsZWN0aW9uRGVmaW5pdGlvblR5cGUpIHtcbiAgICAgICAgY2FzZSAnUHJvcGVydHlQYXRoJzpcbiAgICAgICAgICAgIHJldHVybiBjb2xsZWN0aW9uRGVmaW5pdGlvbi5tYXAoKHBhdGgsIGluZGV4KSA9PlxuICAgICAgICAgICAgICAgIG1hcFByb3BlcnR5UGF0aChjb252ZXJ0ZXIsIHBhdGgsIGAke3BhcmVudEZRTn0vJHtpbmRleH1gLCBjdXJyZW50VGFyZ2V0LCBjdXJyZW50VGVybSlcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgY2FzZSAnUGF0aCc6XG4gICAgICAgICAgICAvLyBUT0RPOiBtYWtlIGxhenk/XG4gICAgICAgICAgICByZXR1cm4gY29sbGVjdGlvbkRlZmluaXRpb24ubWFwKChwYXRoVmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZVRhcmdldChjb252ZXJ0ZXIsIGN1cnJlbnRUYXJnZXQsIHBhdGhWYWx1ZS5QYXRoLCBjdXJyZW50VGVybSkudGFyZ2V0O1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgY2FzZSAnQW5ub3RhdGlvblBhdGgnOlxuICAgICAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25EZWZpbml0aW9uLm1hcCgocGF0aCwgaW5kZXgpID0+XG4gICAgICAgICAgICAgICAgbWFwQW5ub3RhdGlvblBhdGgoY29udmVydGVyLCBwYXRoLCBgJHtwYXJlbnRGUU59LyR7aW5kZXh9YCwgY3VycmVudFRhcmdldCwgY3VycmVudFRlcm0pXG4gICAgICAgICAgICApO1xuXG4gICAgICAgIGNhc2UgJ05hdmlnYXRpb25Qcm9wZXJ0eVBhdGgnOlxuICAgICAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25EZWZpbml0aW9uLm1hcCgocGF0aCwgaW5kZXgpID0+XG4gICAgICAgICAgICAgICAgbWFwTmF2aWdhdGlvblByb3BlcnR5UGF0aChjb252ZXJ0ZXIsIHBhdGgsIGAke3BhcmVudEZRTn0vJHtpbmRleH1gLCBjdXJyZW50VGFyZ2V0LCBjdXJyZW50VGVybSlcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgY2FzZSAnUmVjb3JkJzpcbiAgICAgICAgICAgIHJldHVybiBjb2xsZWN0aW9uRGVmaW5pdGlvbi5tYXAoKHJlY29yZERlZmluaXRpb24sIHJlY29yZElkeCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZVJlY29yZChcbiAgICAgICAgICAgICAgICAgICAgY29udmVydGVyLFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGVybSxcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRhcmdldCxcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFByb3BlcnR5LFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50U291cmNlLFxuICAgICAgICAgICAgICAgICAgICByZWNvcmREZWZpbml0aW9uLFxuICAgICAgICAgICAgICAgICAgICBgJHtwYXJlbnRGUU59LyR7cmVjb3JkSWR4fWBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgY2FzZSAnQXBwbHknOlxuICAgICAgICBjYXNlICdOdWxsJzpcbiAgICAgICAgY2FzZSAnSWYnOlxuICAgICAgICBjYXNlICdFcSc6XG4gICAgICAgIGNhc2UgJ05lJzpcbiAgICAgICAgY2FzZSAnTHQnOlxuICAgICAgICBjYXNlICdHdCc6XG4gICAgICAgIGNhc2UgJ0xlJzpcbiAgICAgICAgY2FzZSAnR2UnOlxuICAgICAgICBjYXNlICdOb3QnOlxuICAgICAgICBjYXNlICdBbmQnOlxuICAgICAgICBjYXNlICdPcic6XG4gICAgICAgICAgICByZXR1cm4gY29sbGVjdGlvbkRlZmluaXRpb24ubWFwKChpZlZhbHVlKSA9PiBpZlZhbHVlKTtcblxuICAgICAgICBjYXNlICdTdHJpbmcnOlxuICAgICAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25EZWZpbml0aW9uLm1hcCgoc3RyaW5nVmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHN0cmluZ1ZhbHVlID09PSAnc3RyaW5nJyB8fCBzdHJpbmdWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHJpbmdWYWx1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RyaW5nVmFsdWUuU3RyaW5nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBpZiAoY29sbGVjdGlvbkRlZmluaXRpb24ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBjYXNlJyk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBpc1Y0TmF2aWdhdGlvblByb3BlcnR5KFxuICAgIG5hdlByb3A6IFJhd1YyTmF2aWdhdGlvblByb3BlcnR5IHwgUmF3VjROYXZpZ2F0aW9uUHJvcGVydHlcbik6IG5hdlByb3AgaXMgUmF3VjROYXZpZ2F0aW9uUHJvcGVydHkge1xuICAgIHJldHVybiAhIShuYXZQcm9wIGFzIEJhc2VOYXZpZ2F0aW9uUHJvcGVydHkpLnRhcmdldFR5cGVOYW1lO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0QW5ub3RhdGlvbihjb252ZXJ0ZXI6IENvbnZlcnRlciwgdGFyZ2V0OiBhbnksIHJhd0Fubm90YXRpb246IFJhd0Fubm90YXRpb24pOiBBbm5vdGF0aW9uIHtcbiAgICBsZXQgYW5ub3RhdGlvbjogYW55O1xuICAgIGlmIChyYXdBbm5vdGF0aW9uLnJlY29yZCkge1xuICAgICAgICBhbm5vdGF0aW9uID0gcGFyc2VSZWNvcmQoXG4gICAgICAgICAgICBjb252ZXJ0ZXIsXG4gICAgICAgICAgICByYXdBbm5vdGF0aW9uLnRlcm0sXG4gICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgICAnJyxcbiAgICAgICAgICAgIChyYXdBbm5vdGF0aW9uIGFzIGFueSkuX19zb3VyY2UsXG4gICAgICAgICAgICByYXdBbm5vdGF0aW9uLnJlY29yZCxcbiAgICAgICAgICAgIChyYXdBbm5vdGF0aW9uIGFzIGFueSkuZnVsbHlRdWFsaWZpZWROYW1lXG4gICAgICAgICk7XG4gICAgfSBlbHNlIGlmIChyYXdBbm5vdGF0aW9uLmNvbGxlY3Rpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhbm5vdGF0aW9uID0gcGFyc2VWYWx1ZShcbiAgICAgICAgICAgIGNvbnZlcnRlcixcbiAgICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICAgIHJhd0Fubm90YXRpb24udGVybSxcbiAgICAgICAgICAgICcnLFxuICAgICAgICAgICAgKHJhd0Fubm90YXRpb24gYXMgYW55KS5fX3NvdXJjZSxcbiAgICAgICAgICAgIHJhd0Fubm90YXRpb24udmFsdWUgPz8geyB0eXBlOiAnQm9vbCcsIEJvb2w6IHRydWUgfSxcbiAgICAgICAgICAgIChyYXdBbm5vdGF0aW9uIGFzIGFueSkuZnVsbHlRdWFsaWZpZWROYW1lXG4gICAgICAgICk7XG4gICAgfSBlbHNlIGlmIChyYXdBbm5vdGF0aW9uLmNvbGxlY3Rpb24pIHtcbiAgICAgICAgYW5ub3RhdGlvbiA9IHBhcnNlQ29sbGVjdGlvbihcbiAgICAgICAgICAgIGNvbnZlcnRlcixcbiAgICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICAgIHJhd0Fubm90YXRpb24udGVybSxcbiAgICAgICAgICAgICcnLFxuICAgICAgICAgICAgKHJhd0Fubm90YXRpb24gYXMgYW55KS5fX3NvdXJjZSxcbiAgICAgICAgICAgIHJhd0Fubm90YXRpb24uY29sbGVjdGlvbixcbiAgICAgICAgICAgIChyYXdBbm5vdGF0aW9uIGFzIGFueSkuZnVsbHlRdWFsaWZpZWROYW1lXG4gICAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBjYXNlJyk7XG4gICAgfVxuXG4gICAgc3dpdGNoICh0eXBlb2YgYW5ub3RhdGlvbikge1xuICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy13cmFwcGVyc1xuICAgICAgICAgICAgYW5ub3RhdGlvbiA9IG5ldyBTdHJpbmcoYW5ub3RhdGlvbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LXdyYXBwZXJzXG4gICAgICAgICAgICBhbm5vdGF0aW9uID0gbmV3IEJvb2xlYW4oYW5ub3RhdGlvbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgICAgIGFubm90YXRpb24gPSBuZXcgTnVtYmVyKGFubm90YXRpb24pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAvLyBkbyBub3RoaW5nXG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBhbm5vdGF0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSA9IChyYXdBbm5vdGF0aW9uIGFzIGFueSkuZnVsbHlRdWFsaWZpZWROYW1lO1xuICAgIGFubm90YXRpb25bQU5OT1RBVElPTl9UQVJHRVRdID0gdGFyZ2V0O1xuXG4gICAgY29uc3QgW3ZvY0FsaWFzLCB2b2NUZXJtXSA9IGNvbnZlcnRlci5zcGxpdFRlcm0ocmF3QW5ub3RhdGlvbi50ZXJtKTtcblxuICAgIGFubm90YXRpb24udGVybSA9IGNvbnZlcnRlci51bmFsaWFzKGAke3ZvY0FsaWFzfS4ke3ZvY1Rlcm19YCwgVm9jYWJ1bGFyeVJlZmVyZW5jZXMpO1xuICAgIGFubm90YXRpb24ucXVhbGlmaWVyID0gcmF3QW5ub3RhdGlvbi5xdWFsaWZpZXI7XG4gICAgYW5ub3RhdGlvbi5fX3NvdXJjZSA9IChyYXdBbm5vdGF0aW9uIGFzIGFueSkuX19zb3VyY2U7XG5cbiAgICB0cnkge1xuICAgICAgICBsYXp5KGFubm90YXRpb24sICdhbm5vdGF0aW9ucycsIHJlc29sdmVBbm5vdGF0aW9uc09uQW5ub3RhdGlvbihjb252ZXJ0ZXIsIHJhd0Fubm90YXRpb24sIGFubm90YXRpb24pKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIG5vdCBhbiBlcnJvcjogcGFyc2VSZWNvcmQoKSBhbHJlYWR5IGFkZHMgYW5ub3RhdGlvbnMsIGJ1dCB0aGUgb3RoZXIgcGFyc2VYWFggZnVuY3Rpb25zIGRvbid0LCBzbyB0aGlzIGNhbiBoYXBwZW5cbiAgICB9XG5cbiAgICByZXR1cm4gYW5ub3RhdGlvbiBhcyBBbm5vdGF0aW9uO1xufVxuXG5jbGFzcyBDb252ZXJ0ZXIge1xuICAgIHByaXZhdGUgYW5ub3RhdGlvbnNCeVRhcmdldDogUmVjb3JkPEZ1bGx5UXVhbGlmaWVkTmFtZSwgQW5ub3RhdGlvbltdPjtcblxuICAgIC8qKlxuICAgICAqIEdldCBwcmVwcm9jZXNzZWQgYW5ub3RhdGlvbnMgb24gdGhlIHNwZWNpZmllZCB0YXJnZXQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGFyZ2V0ICAgIFRoZSBhbm5vdGF0aW9uIHRhcmdldFxuICAgICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGFubm90YXRpb25zXG4gICAgICovXG4gICAgZ2V0QW5ub3RhdGlvbnModGFyZ2V0OiBGdWxseVF1YWxpZmllZE5hbWUpOiBBbm5vdGF0aW9uW10ge1xuICAgICAgICBpZiAodGhpcy5hbm5vdGF0aW9uc0J5VGFyZ2V0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGFubm90YXRpb25Tb3VyY2VzID0gT2JqZWN0LmtleXModGhpcy5yYXdTY2hlbWEuYW5ub3RhdGlvbnMpLm1hcCgoc291cmNlKSA9PiAoe1xuICAgICAgICAgICAgICAgIG5hbWU6IHNvdXJjZSxcbiAgICAgICAgICAgICAgICBhbm5vdGF0aW9uTGlzdDogdGhpcy5yYXdTY2hlbWEuYW5ub3RhdGlvbnNbc291cmNlXVxuICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICB0aGlzLmFubm90YXRpb25zQnlUYXJnZXQgPSBtZXJnZUFubm90YXRpb25zKHRoaXMucmF3TWV0YWRhdGEucmVmZXJlbmNlcywgLi4uYW5ub3RhdGlvblNvdXJjZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYW5ub3RhdGlvbnNCeVRhcmdldFt0YXJnZXRdID8/IFtdO1xuICAgIH1cblxuICAgIGdldENvbnZlcnRlZEVudGl0eUNvbnRhaW5lcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29udmVydGVkRWxlbWVudChcbiAgICAgICAgICAgIHRoaXMucmF3TWV0YWRhdGEuc2NoZW1hLmVudGl0eUNvbnRhaW5lci5mdWxseVF1YWxpZmllZE5hbWUsXG4gICAgICAgICAgICB0aGlzLnJhd01ldGFkYXRhLnNjaGVtYS5lbnRpdHlDb250YWluZXIsXG4gICAgICAgICAgICBjb252ZXJ0RW50aXR5Q29udGFpbmVyXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZ2V0Q29udmVydGVkRW50aXR5U2V0KGZ1bGx5UXVhbGlmaWVkTmFtZTogRnVsbHlRdWFsaWZpZWROYW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRlZE91dHB1dC5lbnRpdHlTZXRzLmJ5X2Z1bGx5UXVhbGlmaWVkTmFtZShmdWxseVF1YWxpZmllZE5hbWUpO1xuICAgIH1cblxuICAgIGdldENvbnZlcnRlZFNpbmdsZXRvbihmdWxseVF1YWxpZmllZE5hbWU6IEZ1bGx5UXVhbGlmaWVkTmFtZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb252ZXJ0ZWRPdXRwdXQuc2luZ2xldG9ucy5ieV9mdWxseVF1YWxpZmllZE5hbWUoZnVsbHlRdWFsaWZpZWROYW1lKTtcbiAgICB9XG5cbiAgICBnZXRDb252ZXJ0ZWRFbnRpdHlUeXBlKGZ1bGx5UXVhbGlmaWVkTmFtZTogRnVsbHlRdWFsaWZpZWROYW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRlZE91dHB1dC5lbnRpdHlUeXBlcy5ieV9mdWxseVF1YWxpZmllZE5hbWUoZnVsbHlRdWFsaWZpZWROYW1lKTtcbiAgICB9XG5cbiAgICBnZXRDb252ZXJ0ZWRDb21wbGV4VHlwZShmdWxseVF1YWxpZmllZE5hbWU6IEZ1bGx5UXVhbGlmaWVkTmFtZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb252ZXJ0ZWRPdXRwdXQuY29tcGxleFR5cGVzLmJ5X2Z1bGx5UXVhbGlmaWVkTmFtZShmdWxseVF1YWxpZmllZE5hbWUpO1xuICAgIH1cblxuICAgIGdldENvbnZlcnRlZFR5cGVEZWZpbml0aW9uKGZ1bGx5UXVhbGlmaWVkTmFtZTogRnVsbHlRdWFsaWZpZWROYW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRlZE91dHB1dC50eXBlRGVmaW5pdGlvbnMuYnlfZnVsbHlRdWFsaWZpZWROYW1lKGZ1bGx5UXVhbGlmaWVkTmFtZSk7XG4gICAgfVxuXG4gICAgZ2V0Q29udmVydGVkQWN0aW9uSW1wb3J0KGZ1bGx5UXVhbGlmaWVkTmFtZTogRnVsbHlRdWFsaWZpZWROYW1lKSB7XG4gICAgICAgIGxldCBhY3Rpb25JbXBvcnQgPSB0aGlzLmNvbnZlcnRlZE91dHB1dC5hY3Rpb25JbXBvcnRzLmJ5X2Z1bGx5UXVhbGlmaWVkTmFtZShmdWxseVF1YWxpZmllZE5hbWUpO1xuICAgICAgICBpZiAoIWFjdGlvbkltcG9ydCkge1xuICAgICAgICAgICAgYWN0aW9uSW1wb3J0ID0gdGhpcy5jb252ZXJ0ZWRPdXRwdXQuYWN0aW9uSW1wb3J0cy5ieV9uYW1lKGZ1bGx5UXVhbGlmaWVkTmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjdGlvbkltcG9ydDtcbiAgICB9XG5cbiAgICBnZXRDb252ZXJ0ZWRBY3Rpb24oZnVsbHlRdWFsaWZpZWROYW1lOiBGdWxseVF1YWxpZmllZE5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udmVydGVkT3V0cHV0LmFjdGlvbnMuYnlfZnVsbHlRdWFsaWZpZWROYW1lKGZ1bGx5UXVhbGlmaWVkTmFtZSk7XG4gICAgfVxuXG4gICAgY29udmVydDxDb252ZXJ0ZWQsIFJhdyBleHRlbmRzIFJhd1R5cGU8Q29udmVydGVkPj4oXG4gICAgICAgIHJhd1ZhbHVlOiBSYXcsXG4gICAgICAgIG1hcDogKGNvbnZlcnRlcjogQ29udmVydGVyLCByYXc6IFJhdykgPT4gQ29udmVydGVkXG4gICAgKTogKCkgPT4gQ29udmVydGVkO1xuICAgIGNvbnZlcnQ8Q29udmVydGVkLCBSYXcgZXh0ZW5kcyBSYXdUeXBlPENvbnZlcnRlZD4sIEluZGV4UHJvcGVydHkgZXh0ZW5kcyBFeHRyYWN0PGtleW9mIENvbnZlcnRlZCwgc3RyaW5nPj4oXG4gICAgICAgIHJhd1ZhbHVlOiBSYXdbXSxcbiAgICAgICAgbWFwOiAoY29udmVydGVyOiBDb252ZXJ0ZXIsIHJhdzogUmF3KSA9PiBDb252ZXJ0ZWRcbiAgICApOiAoKSA9PiBBcnJheVdpdGhJbmRleDxDb252ZXJ0ZWQsIEluZGV4UHJvcGVydHk+O1xuICAgIGNvbnZlcnQ8Q29udmVydGVkLCBSYXcgZXh0ZW5kcyBSYXdUeXBlPENvbnZlcnRlZD4sIEluZGV4UHJvcGVydHkgZXh0ZW5kcyBFeHRyYWN0PGtleW9mIENvbnZlcnRlZCwgc3RyaW5nPj4oXG4gICAgICAgIHJhd1ZhbHVlOiBSYXcgfCBSYXdbXSxcbiAgICAgICAgbWFwOiAoY29udmVydGVyOiBDb252ZXJ0ZXIsIHJhdzogUmF3KSA9PiBDb252ZXJ0ZWRcbiAgICApOiAoKCkgPT4gQ29udmVydGVkKSB8ICgoKSA9PiBBcnJheVdpdGhJbmRleDxDb252ZXJ0ZWQsIEluZGV4UHJvcGVydHk+KSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJhd1ZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb252ZXJ0ZWQgPSByYXdWYWx1ZS5yZWR1Y2UoKGNvbnZlcnRlZEVsZW1lbnRzLCByYXdFbGVtZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnZlcnRlZEVsZW1lbnQgPSB0aGlzLmdldENvbnZlcnRlZEVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAocmF3RWxlbWVudCBhcyBhbnkpLmZ1bGx5UXVhbGlmaWVkTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhd0VsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXBcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnZlcnRlZEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRlZEVsZW1lbnRzLnB1c2goY29udmVydGVkRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRlZEVsZW1lbnRzO1xuICAgICAgICAgICAgICAgIH0sIFtdIGFzIENvbnZlcnRlZFtdKTtcbiAgICAgICAgICAgICAgICBhZGRHZXRCeVZhbHVlKGNvbnZlcnRlZCwgJ25hbWUnIGFzIGFueSk7XG4gICAgICAgICAgICAgICAgYWRkR2V0QnlWYWx1ZShjb252ZXJ0ZWQsICdmdWxseVF1YWxpZmllZE5hbWUnIGFzIGFueSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRlZCBhcyBBcnJheVdpdGhJbmRleDxDb252ZXJ0ZWQsIEluZGV4UHJvcGVydHk+O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAoKSA9PiB0aGlzLmdldENvbnZlcnRlZEVsZW1lbnQocmF3VmFsdWUuZnVsbHlRdWFsaWZpZWROYW1lLCByYXdWYWx1ZSwgbWFwKSE7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJhd01ldGFkYXRhOiBSYXdNZXRhZGF0YTtcbiAgICBwcml2YXRlIGNvbnZlcnRlZEVsZW1lbnRzOiBNYXA8RnVsbHlRdWFsaWZpZWROYW1lLCBhbnk+ID0gbmV3IE1hcCgpO1xuICAgIHByaXZhdGUgY29udmVydGVkT3V0cHV0OiBDb252ZXJ0ZWRNZXRhZGF0YTtcblxuICAgIHJhd1NjaGVtYTogUmF3U2NoZW1hO1xuXG4gICAgY29uc3RydWN0b3IocmF3TWV0YWRhdGE6IFJhd01ldGFkYXRhLCBjb252ZXJ0ZWRPdXRwdXQ6IENvbnZlcnRlZE1ldGFkYXRhKSB7XG4gICAgICAgIHRoaXMucmF3TWV0YWRhdGEgPSByYXdNZXRhZGF0YTtcbiAgICAgICAgdGhpcy5yYXdTY2hlbWEgPSByYXdNZXRhZGF0YS5zY2hlbWE7XG4gICAgICAgIHRoaXMuY29udmVydGVkT3V0cHV0ID0gY29udmVydGVkT3V0cHV0O1xuICAgIH1cblxuICAgIGdldENvbnZlcnRlZEVsZW1lbnQ8Q29udmVydGVkVHlwZSwgUmF3VHlwZSBleHRlbmRzIFJlbW92ZUFubm90YXRpb25BbmRUeXBlPENvbnZlcnRlZFR5cGU+PihcbiAgICAgICAgZnVsbHlRdWFsaWZpZWROYW1lOiBGdWxseVF1YWxpZmllZE5hbWUsXG4gICAgICAgIHJhd0VsZW1lbnQ6IFJhd1R5cGUgfCB1bmRlZmluZWQgfCAoKGZ1bGx5UXVhbGlmaWVkTmFtZTogRnVsbHlRdWFsaWZpZWROYW1lKSA9PiBSYXdUeXBlIHwgdW5kZWZpbmVkKSxcbiAgICAgICAgbWFwOiAoY29udmVydGVyOiBDb252ZXJ0ZXIsIHJhdzogUmF3VHlwZSkgPT4gQ29udmVydGVkVHlwZVxuICAgICk6IENvbnZlcnRlZFR5cGUgfCB1bmRlZmluZWQge1xuICAgICAgICBsZXQgY29udmVydGVkOiBDb252ZXJ0ZWRUeXBlIHwgdW5kZWZpbmVkID0gdGhpcy5jb252ZXJ0ZWRFbGVtZW50cy5nZXQoZnVsbHlRdWFsaWZpZWROYW1lKTtcbiAgICAgICAgaWYgKGNvbnZlcnRlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCByYXdNZXRhZGF0YSA9XG4gICAgICAgICAgICAgICAgdHlwZW9mIHJhd0VsZW1lbnQgPT09ICdmdW5jdGlvbicgPyByYXdFbGVtZW50LmFwcGx5KHVuZGVmaW5lZCwgW2Z1bGx5UXVhbGlmaWVkTmFtZV0pIDogcmF3RWxlbWVudDtcbiAgICAgICAgICAgIGlmIChyYXdNZXRhZGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgY29udmVydGVkID0gbWFwLmFwcGx5KHVuZGVmaW5lZCwgW3RoaXMsIHJhd01ldGFkYXRhXSk7XG4gICAgICAgICAgICAgICAgdGhpcy5jb252ZXJ0ZWRFbGVtZW50cy5zZXQoZnVsbHlRdWFsaWZpZWROYW1lLCBjb252ZXJ0ZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb252ZXJ0ZWQ7XG4gICAgfVxuXG4gICAgbG9nRXJyb3IobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuY29udmVydGVkT3V0cHV0LmRpYWdub3N0aWNzLnB1c2goeyBtZXNzYWdlIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNwbGl0IHRoZSBhbGlhcyBmcm9tIHRoZSB0ZXJtIHZhbHVlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHRlcm0gdGhlIHZhbHVlIG9mIHRoZSB0ZXJtXG4gICAgICogQHJldHVybnMgdGhlIHRlcm0gYWxpYXMgYW5kIHRoZSBhY3R1YWwgdGVybSB2YWx1ZVxuICAgICAqL1xuICAgIHNwbGl0VGVybSh0ZXJtOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgYWxpYXNlZCA9IGFsaWFzKFZvY2FidWxhcnlSZWZlcmVuY2VzLCB0ZXJtKTtcbiAgICAgICAgcmV0dXJuIHNwbGl0QXRMYXN0KGFsaWFzZWQsICcuJyk7XG4gICAgfVxuXG4gICAgdW5hbGlhcyh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkLCByZWZlcmVuY2VzID0gdGhpcy5yYXdNZXRhZGF0YS5yZWZlcmVuY2VzKSB7XG4gICAgICAgIHJldHVybiB1bmFsaWFzKHJlZmVyZW5jZXMsIHZhbHVlLCB0aGlzLnJhd1NjaGVtYS5uYW1lc3BhY2UpID8/ICcnO1xuICAgIH1cbn1cblxudHlwZSBSYXdUeXBlPFQ+ID0gUmVtb3ZlQW5ub3RhdGlvbkFuZFR5cGU8VD4gJiB7IGZ1bGx5UXVhbGlmaWVkTmFtZTogRnVsbHlRdWFsaWZpZWROYW1lIH07XG5cbmZ1bmN0aW9uIHJlc29sdmVFbnRpdHlUeXBlKGNvbnZlcnRlcjogQ29udmVydGVyLCBmdWxseVF1YWxpZmllZE5hbWU6IEZ1bGx5UXVhbGlmaWVkTmFtZSkge1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGxldCBlbnRpdHlUeXBlID0gY29udmVydGVyLmdldENvbnZlcnRlZEVudGl0eVR5cGUoZnVsbHlRdWFsaWZpZWROYW1lKTtcblxuICAgICAgICBpZiAoIWVudGl0eVR5cGUpIHtcbiAgICAgICAgICAgIGNvbnZlcnRlci5sb2dFcnJvcihgRW50aXR5VHlwZSAnJHtmdWxseVF1YWxpZmllZE5hbWV9JyBub3QgZm91bmRgKTtcbiAgICAgICAgICAgIGVudGl0eVR5cGUgPSB7fSBhcyBFbnRpdHlUeXBlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbnRpdHlUeXBlO1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVOYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5ncyhcbiAgICBjb252ZXJ0ZXI6IENvbnZlcnRlcixcbiAgICByYXdOYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nczogUmF3TmF2aWdhdGlvblByb3BlcnR5QmluZGluZ1xuKSB7XG4gICAgcmV0dXJuICgpID0+XG4gICAgICAgIE9iamVjdC5rZXlzKHJhd05hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdzKS5yZWR1Y2UoKG5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdzLCBiaW5kaW5nUGF0aCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmF3QmluZGluZ1RhcmdldCA9IHJhd05hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdzW2JpbmRpbmdQYXRoXTtcblxuICAgICAgICAgICAgbGF6eShcbiAgICAgICAgICAgICAgICBuYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5ncyxcbiAgICAgICAgICAgICAgICBiaW5kaW5nUGF0aCxcbiAgICAgICAgICAgICAgICAoKSA9PlxuICAgICAgICAgICAgICAgICAgICAvLyB0aGUgTmF2aWdhdGlvblByb3BlcnR5QmluZGluZyB3aWxsIGxlYWQgdG8gZWl0aGVyIGFuIEVudGl0eVNldCBvciBhIFNpbmdsZXRvbiwgaXQgY2Fubm90IGJlIHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAoY29udmVydGVyLmdldENvbnZlcnRlZEVudGl0eVNldChyYXdCaW5kaW5nVGFyZ2V0KSA/P1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udmVydGVyLmdldENvbnZlcnRlZFNpbmdsZXRvbihyYXdCaW5kaW5nVGFyZ2V0KSkhXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIG5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdzO1xuICAgICAgICB9LCB7fSBhcyBFbnRpdHlTZXRbJ25hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcnXSB8IFNpbmdsZXRvblsnbmF2aWdhdGlvblByb3BlcnR5QmluZGluZyddKTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZUFubm90YXRpb25zKGNvbnZlcnRlcjogQ29udmVydGVyLCByYXdBbm5vdGF0aW9uVGFyZ2V0OiBhbnkpIHtcbiAgICBjb25zdCBuZXN0ZWRBbm5vdGF0aW9ucyA9IHJhd0Fubm90YXRpb25UYXJnZXQuYW5ub3RhdGlvbnM7XG5cbiAgICByZXR1cm4gKCkgPT5cbiAgICAgICAgY3JlYXRlQW5ub3RhdGlvbnNPYmplY3QoXG4gICAgICAgICAgICBjb252ZXJ0ZXIsXG4gICAgICAgICAgICByYXdBbm5vdGF0aW9uVGFyZ2V0LFxuICAgICAgICAgICAgbmVzdGVkQW5ub3RhdGlvbnMgPz8gY29udmVydGVyLmdldEFubm90YXRpb25zKHJhd0Fubm90YXRpb25UYXJnZXQuZnVsbHlRdWFsaWZpZWROYW1lKVxuICAgICAgICApO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlQW5ub3RhdGlvbnNPbkFubm90YXRpb24oXG4gICAgY29udmVydGVyOiBDb252ZXJ0ZXIsXG4gICAgYW5ub3RhdGlvblJlY29yZDogQW5ub3RhdGlvblJlY29yZCB8IFJhd0Fubm90YXRpb24sXG4gICAgYW5ub3RhdGlvblRlcm06IGFueVxuKSB7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgY29uc3QgY3VycmVudEZRTiA9IGFubm90YXRpb25UZXJtLmZ1bGx5UXVhbGlmaWVkTmFtZTtcblxuICAgICAgICAvLyBiZSBncmFjZWZ1bCB3aGVuIHJlc29sdmluZyBhbm5vdGF0aW9ucyBvbiBhbm5vdGF0aW9uczogU29tZXRpbWVzIHRoZXkgYXJlIHJlZmVyZW5jZWQgZGlyZWN0bHksIHNvbWV0aW1lcyB0aGV5XG4gICAgICAgIC8vIGFyZSBwYXJ0IG9mIHRoZSBnbG9iYWwgYW5ub3RhdGlvbnMgbGlzdFxuICAgICAgICBsZXQgYW5ub3RhdGlvbnM7XG4gICAgICAgIGlmIChhbm5vdGF0aW9uUmVjb3JkLmFubm90YXRpb25zICYmIGFubm90YXRpb25SZWNvcmQuYW5ub3RhdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgYW5ub3RhdGlvbnMgPSBhbm5vdGF0aW9uUmVjb3JkLmFubm90YXRpb25zO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYW5ub3RhdGlvbnMgPSBjb252ZXJ0ZXIuZ2V0QW5ub3RhdGlvbnMoY3VycmVudEZRTik7XG4gICAgICAgIH1cblxuICAgICAgICBhbm5vdGF0aW9ucz8uZm9yRWFjaCgoYW5ub3RhdGlvbjogYW55KSA9PiB7XG4gICAgICAgICAgICBhbm5vdGF0aW9uLnRhcmdldCA9IGN1cnJlbnRGUU47XG4gICAgICAgICAgICBhbm5vdGF0aW9uLl9fc291cmNlID0gYW5ub3RhdGlvblRlcm0uX19zb3VyY2U7XG4gICAgICAgICAgICBhbm5vdGF0aW9uW0FOTk9UQVRJT05fVEFSR0VUXSA9IGFubm90YXRpb25UZXJtW0FOTk9UQVRJT05fVEFSR0VUXTtcbiAgICAgICAgICAgIGFubm90YXRpb24uZnVsbHlRdWFsaWZpZWROYW1lID0gYCR7Y3VycmVudEZRTn1AJHthbm5vdGF0aW9uLnRlcm19YDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGNyZWF0ZUFubm90YXRpb25zT2JqZWN0KGNvbnZlcnRlciwgYW5ub3RhdGlvblRlcm0sIGFubm90YXRpb25zID8/IFtdKTtcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVBbm5vdGF0aW9uc09iamVjdChjb252ZXJ0ZXI6IENvbnZlcnRlciwgdGFyZ2V0OiBhbnksIHJhd0Fubm90YXRpb25zOiBSYXdBbm5vdGF0aW9uW10pIHtcbiAgICByZXR1cm4gcmF3QW5ub3RhdGlvbnMucmVkdWNlKCh2b2NhYnVsYXJ5QWxpYXNlcywgYW5ub3RhdGlvbikgPT4ge1xuICAgICAgICBjb25zdCBbdm9jQWxpYXMsIHZvY1Rlcm1dID0gY29udmVydGVyLnNwbGl0VGVybShhbm5vdGF0aW9uLnRlcm0pO1xuICAgICAgICBjb25zdCB2b2NUZXJtV2l0aFF1YWxpZmllciA9IGAke3ZvY1Rlcm19JHthbm5vdGF0aW9uLnF1YWxpZmllciA/ICcjJyArIGFubm90YXRpb24ucXVhbGlmaWVyIDogJyd9YDtcblxuICAgICAgICBpZiAodm9jYWJ1bGFyeUFsaWFzZXNbdm9jQWxpYXNdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHZvY2FidWxhcnlBbGlhc2VzW3ZvY0FsaWFzXSA9IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF2b2NhYnVsYXJ5QWxpYXNlc1t2b2NBbGlhc10uaGFzT3duUHJvcGVydHkodm9jVGVybVdpdGhRdWFsaWZpZXIpKSB7XG4gICAgICAgICAgICBsYXp5KHZvY2FidWxhcnlBbGlhc2VzW3ZvY0FsaWFzXSwgdm9jVGVybVdpdGhRdWFsaWZpZXIsICgpID0+XG4gICAgICAgICAgICAgICAgY29udmVydGVyLmdldENvbnZlcnRlZEVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICAgIChhbm5vdGF0aW9uIGFzIEFubm90YXRpb24pLmZ1bGx5UXVhbGlmaWVkTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgYW5ub3RhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgKGNvbnZlcnRlciwgcmF3QW5ub3RhdGlvbikgPT4gY29udmVydEFubm90YXRpb24oY29udmVydGVyLCB0YXJnZXQsIHJhd0Fubm90YXRpb24pXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdm9jYWJ1bGFyeUFsaWFzZXM7XG4gICAgfSwge30gYXMgYW55KTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBFbnRpdHlDb250YWluZXIuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlciAgICAgQ29udmVydGVyXG4gKiBAcGFyYW0gcmF3RW50aXR5Q29udGFpbmVyICAgIFVuY29udmVydGVkIEVudGl0eUNvbnRhaW5lclxuICogQHJldHVybnMgVGhlIGNvbnZlcnRlZCBFbnRpdHlDb250YWluZXJcbiAqL1xuZnVuY3Rpb24gY29udmVydEVudGl0eUNvbnRhaW5lcihjb252ZXJ0ZXI6IENvbnZlcnRlciwgcmF3RW50aXR5Q29udGFpbmVyOiBSYXdFbnRpdHlDb250YWluZXIpOiBFbnRpdHlDb250YWluZXIge1xuICAgIGNvbnN0IGNvbnZlcnRlZEVudGl0eUNvbnRhaW5lciA9IHJhd0VudGl0eUNvbnRhaW5lciBhcyBFbnRpdHlDb250YWluZXI7XG5cbiAgICBsYXp5KGNvbnZlcnRlZEVudGl0eUNvbnRhaW5lciwgJ2Fubm90YXRpb25zJywgcmVzb2x2ZUFubm90YXRpb25zKGNvbnZlcnRlciwgcmF3RW50aXR5Q29udGFpbmVyKSk7XG5cbiAgICBsYXp5KGNvbnZlcnRlZEVudGl0eUNvbnRhaW5lciwgJ2VudGl0eVNldHMnLCBjb252ZXJ0ZXIuY29udmVydChjb252ZXJ0ZXIucmF3U2NoZW1hLmVudGl0eVNldHMsIGNvbnZlcnRFbnRpdHlTZXQpKTtcblxuICAgIGxhenkoY29udmVydGVkRW50aXR5Q29udGFpbmVyLCAnc2luZ2xldG9ucycsIGNvbnZlcnRlci5jb252ZXJ0KGNvbnZlcnRlci5yYXdTY2hlbWEuc2luZ2xldG9ucywgY29udmVydFNpbmdsZXRvbikpO1xuXG4gICAgbGF6eShcbiAgICAgICAgY29udmVydGVkRW50aXR5Q29udGFpbmVyLFxuICAgICAgICAnYWN0aW9uSW1wb3J0cycsXG4gICAgICAgIGNvbnZlcnRlci5jb252ZXJ0KGNvbnZlcnRlci5yYXdTY2hlbWEuYWN0aW9uSW1wb3J0cywgY29udmVydEFjdGlvbkltcG9ydClcbiAgICApO1xuXG4gICAgcmV0dXJuIGNvbnZlcnRlZEVudGl0eUNvbnRhaW5lcjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIFNpbmdsZXRvbi5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyICAgQ29udmVydGVyXG4gKiBAcGFyYW0gcmF3U2luZ2xldG9uICBVbmNvbnZlcnRlZCBTaW5nbGV0b25cbiAqIEByZXR1cm5zIFRoZSBjb252ZXJ0ZWQgU2luZ2xldG9uXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRTaW5nbGV0b24oY29udmVydGVyOiBDb252ZXJ0ZXIsIHJhd1NpbmdsZXRvbjogUmF3U2luZ2xldG9uKTogU2luZ2xldG9uIHtcbiAgICBjb25zdCBjb252ZXJ0ZWRTaW5nbGV0b24gPSByYXdTaW5nbGV0b24gYXMgdW5rbm93biBhcyBTaW5nbGV0b247XG5cbiAgICBsYXp5KGNvbnZlcnRlZFNpbmdsZXRvbiwgJ2VudGl0eVR5cGUnLCByZXNvbHZlRW50aXR5VHlwZShjb252ZXJ0ZXIsIHJhd1NpbmdsZXRvbi5lbnRpdHlUeXBlTmFtZSkpO1xuICAgIGxhenkoY29udmVydGVkU2luZ2xldG9uLCAnYW5ub3RhdGlvbnMnLCByZXNvbHZlQW5ub3RhdGlvbnMoY29udmVydGVyLCBjb252ZXJ0ZWRTaW5nbGV0b24pKTtcblxuICAgIGNvbnN0IF9yYXdOYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5ncyA9IHJhd1NpbmdsZXRvbi5uYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nO1xuICAgIGxhenkoXG4gICAgICAgIGNvbnZlcnRlZFNpbmdsZXRvbixcbiAgICAgICAgJ25hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcnLFxuICAgICAgICByZXNvbHZlTmF2aWdhdGlvblByb3BlcnR5QmluZGluZ3MoY29udmVydGVyLCBfcmF3TmF2aWdhdGlvblByb3BlcnR5QmluZGluZ3MpXG4gICAgKTtcblxuICAgIHJldHVybiBjb252ZXJ0ZWRTaW5nbGV0b247XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gRW50aXR5U2V0LlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXIgICBDb252ZXJ0ZXJcbiAqIEBwYXJhbSByYXdFbnRpdHlTZXQgIFVuY29udmVydGVkIEVudGl0eVNldFxuICogQHJldHVybnMgVGhlIGNvbnZlcnRlZCBFbnRpdHlTZXRcbiAqL1xuZnVuY3Rpb24gY29udmVydEVudGl0eVNldChjb252ZXJ0ZXI6IENvbnZlcnRlciwgcmF3RW50aXR5U2V0OiBSYXdFbnRpdHlTZXQpOiBFbnRpdHlTZXQge1xuICAgIGNvbnN0IGNvbnZlcnRlZEVudGl0eVNldCA9IHJhd0VudGl0eVNldCBhcyB1bmtub3duIGFzIEVudGl0eVNldDtcblxuICAgIGxhenkoY29udmVydGVkRW50aXR5U2V0LCAnZW50aXR5VHlwZScsIHJlc29sdmVFbnRpdHlUeXBlKGNvbnZlcnRlciwgcmF3RW50aXR5U2V0LmVudGl0eVR5cGVOYW1lKSk7XG4gICAgbGF6eShjb252ZXJ0ZWRFbnRpdHlTZXQsICdhbm5vdGF0aW9ucycsIHJlc29sdmVBbm5vdGF0aW9ucyhjb252ZXJ0ZXIsIGNvbnZlcnRlZEVudGl0eVNldCkpO1xuXG4gICAgY29uc3QgX3Jhd05hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdzID0gcmF3RW50aXR5U2V0Lm5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmc7XG4gICAgbGF6eShcbiAgICAgICAgY29udmVydGVkRW50aXR5U2V0LFxuICAgICAgICAnbmF2aWdhdGlvblByb3BlcnR5QmluZGluZycsXG4gICAgICAgIHJlc29sdmVOYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5ncyhjb252ZXJ0ZXIsIF9yYXdOYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5ncylcbiAgICApO1xuXG4gICAgcmV0dXJuIGNvbnZlcnRlZEVudGl0eVNldDtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBFbnRpdHlUeXBlLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXIgICBDb252ZXJ0ZXJcbiAqIEBwYXJhbSByYXdFbnRpdHlUeXBlICBVbmNvbnZlcnRlZCBFbnRpdHlUeXBlXG4gKiBAcmV0dXJucyBUaGUgY29udmVydGVkIEVudGl0eVR5cGVcbiAqL1xuZnVuY3Rpb24gY29udmVydEVudGl0eVR5cGUoY29udmVydGVyOiBDb252ZXJ0ZXIsIHJhd0VudGl0eVR5cGU6IFJhd0VudGl0eVR5cGUpOiBFbnRpdHlUeXBlIHtcbiAgICBjb25zdCBjb252ZXJ0ZWRFbnRpdHlUeXBlID0gcmF3RW50aXR5VHlwZSBhcyBFbnRpdHlUeXBlO1xuXG4gICAgcmF3RW50aXR5VHlwZS5rZXlzLmZvckVhY2goKGtleVByb3A6IGFueSkgPT4ge1xuICAgICAgICBrZXlQcm9wLmlzS2V5ID0gdHJ1ZTtcbiAgICB9KTtcblxuICAgIGxhenkoY29udmVydGVkRW50aXR5VHlwZSwgJ2Fubm90YXRpb25zJywgcmVzb2x2ZUFubm90YXRpb25zKGNvbnZlcnRlciwgcmF3RW50aXR5VHlwZSkpO1xuXG4gICAgbGF6eShjb252ZXJ0ZWRFbnRpdHlUeXBlLCAna2V5cycsIGNvbnZlcnRlci5jb252ZXJ0KHJhd0VudGl0eVR5cGUua2V5cywgY29udmVydFByb3BlcnR5KSk7XG4gICAgbGF6eShjb252ZXJ0ZWRFbnRpdHlUeXBlLCAnZW50aXR5UHJvcGVydGllcycsIGNvbnZlcnRlci5jb252ZXJ0KHJhd0VudGl0eVR5cGUuZW50aXR5UHJvcGVydGllcywgY29udmVydFByb3BlcnR5KSk7XG4gICAgbGF6eShcbiAgICAgICAgY29udmVydGVkRW50aXR5VHlwZSxcbiAgICAgICAgJ25hdmlnYXRpb25Qcm9wZXJ0aWVzJyxcbiAgICAgICAgY29udmVydGVyLmNvbnZlcnQocmF3RW50aXR5VHlwZS5uYXZpZ2F0aW9uUHJvcGVydGllcyBhcyBhbnlbXSwgY29udmVydE5hdmlnYXRpb25Qcm9wZXJ0eSlcbiAgICApO1xuXG4gICAgbGF6eShjb252ZXJ0ZWRFbnRpdHlUeXBlLCAnYWN0aW9ucycsICgpID0+XG4gICAgICAgIGNvbnZlcnRlci5yYXdTY2hlbWEuYWN0aW9uc1xuICAgICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgICAgICAocmF3QWN0aW9uKSA9PlxuICAgICAgICAgICAgICAgICAgICByYXdBY3Rpb24uaXNCb3VuZCAmJlxuICAgICAgICAgICAgICAgICAgICAocmF3QWN0aW9uLnNvdXJjZVR5cGUgPT09IHJhd0VudGl0eVR5cGUuZnVsbHlRdWFsaWZpZWROYW1lIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICByYXdBY3Rpb24uc291cmNlVHlwZSA9PT0gYENvbGxlY3Rpb24oJHtyYXdFbnRpdHlUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZX0pYClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5yZWR1Y2UoKGFjdGlvbnMsIHJhd0FjdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBgJHtjb252ZXJ0ZXIucmF3U2NoZW1hLm5hbWVzcGFjZX0uJHtyYXdBY3Rpb24ubmFtZX1gO1xuICAgICAgICAgICAgICAgIGFjdGlvbnNbbmFtZV0gPSBjb252ZXJ0ZXIuZ2V0Q29udmVydGVkQWN0aW9uKHJhd0FjdGlvbi5mdWxseVF1YWxpZmllZE5hbWUpITtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWN0aW9ucztcbiAgICAgICAgICAgIH0sIHt9IGFzIEVudGl0eVR5cGVbJ2FjdGlvbnMnXSlcbiAgICApO1xuXG4gICAgY29udmVydGVkRW50aXR5VHlwZS5yZXNvbHZlUGF0aCA9IChyZWxhdGl2ZVBhdGg6IHN0cmluZywgaW5jbHVkZVZpc2l0ZWRPYmplY3RzPzogYm9vbGVhbikgPT4ge1xuICAgICAgICBjb25zdCByZXNvbHZlZCA9IHJlc29sdmVUYXJnZXQoY29udmVydGVyLCByYXdFbnRpdHlUeXBlLCByZWxhdGl2ZVBhdGgpO1xuICAgICAgICBpZiAoaW5jbHVkZVZpc2l0ZWRPYmplY3RzKSB7XG4gICAgICAgICAgICByZXR1cm4geyB0YXJnZXQ6IHJlc29sdmVkLnRhcmdldCwgdmlzaXRlZE9iamVjdHM6IHJlc29sdmVkLm9iamVjdFBhdGgsIG1lc3NhZ2VzOiByZXNvbHZlZC5tZXNzYWdlcyB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVkLnRhcmdldDtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gY29udmVydGVkRW50aXR5VHlwZTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIFByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXIgICBDb252ZXJ0ZXJcbiAqIEBwYXJhbSByYXdQcm9wZXJ0eSAgVW5jb252ZXJ0ZWQgUHJvcGVydHlcbiAqIEByZXR1cm5zIFRoZSBjb252ZXJ0ZWQgUHJvcGVydHlcbiAqL1xuZnVuY3Rpb24gY29udmVydFByb3BlcnR5KGNvbnZlcnRlcjogQ29udmVydGVyLCByYXdQcm9wZXJ0eTogUmF3UHJvcGVydHkpOiBQcm9wZXJ0eSB7XG4gICAgY29uc3QgY29udmVydGVkUHJvcGVydHkgPSByYXdQcm9wZXJ0eSBhcyBQcm9wZXJ0eTtcblxuICAgIGxhenkoY29udmVydGVkUHJvcGVydHksICdhbm5vdGF0aW9ucycsIHJlc29sdmVBbm5vdGF0aW9ucyhjb252ZXJ0ZXIsIHJhd1Byb3BlcnR5KSk7XG5cbiAgICBsYXp5KGNvbnZlcnRlZFByb3BlcnR5LCAndGFyZ2V0VHlwZScsICgpID0+IHtcbiAgICAgICAgY29uc3QgdHlwZSA9IHJhd1Byb3BlcnR5LnR5cGU7XG4gICAgICAgIGNvbnN0IHR5cGVOYW1lID0gdHlwZS5zdGFydHNXaXRoKCdDb2xsZWN0aW9uJykgPyB0eXBlLnN1YnN0cmluZygxMSwgdHlwZS5sZW5ndGggLSAxKSA6IHR5cGU7XG5cbiAgICAgICAgcmV0dXJuIGNvbnZlcnRlci5nZXRDb252ZXJ0ZWRDb21wbGV4VHlwZSh0eXBlTmFtZSkgPz8gY29udmVydGVyLmdldENvbnZlcnRlZFR5cGVEZWZpbml0aW9uKHR5cGVOYW1lKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBjb252ZXJ0ZWRQcm9wZXJ0eTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIE5hdmlnYXRpb25Qcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyICAgQ29udmVydGVyXG4gKiBAcGFyYW0gcmF3TmF2aWdhdGlvblByb3BlcnR5ICBVbmNvbnZlcnRlZCBOYXZpZ2F0aW9uUHJvcGVydHlcbiAqIEByZXR1cm5zIFRoZSBjb252ZXJ0ZWQgTmF2aWdhdGlvblByb3BlcnR5XG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnROYXZpZ2F0aW9uUHJvcGVydHkoXG4gICAgY29udmVydGVyOiBDb252ZXJ0ZXIsXG4gICAgcmF3TmF2aWdhdGlvblByb3BlcnR5OiBSYXdWMk5hdmlnYXRpb25Qcm9wZXJ0eSB8IFJhd1Y0TmF2aWdhdGlvblByb3BlcnR5XG4pOiBOYXZpZ2F0aW9uUHJvcGVydHkge1xuICAgIGNvbnN0IGNvbnZlcnRlZE5hdmlnYXRpb25Qcm9wZXJ0eSA9IHJhd05hdmlnYXRpb25Qcm9wZXJ0eSBhcyBOYXZpZ2F0aW9uUHJvcGVydHk7XG5cbiAgICBjb252ZXJ0ZWROYXZpZ2F0aW9uUHJvcGVydHkucmVmZXJlbnRpYWxDb25zdHJhaW50ID0gY29udmVydGVkTmF2aWdhdGlvblByb3BlcnR5LnJlZmVyZW50aWFsQ29uc3RyYWludCA/PyBbXTtcblxuICAgIGlmICghaXNWNE5hdmlnYXRpb25Qcm9wZXJ0eShyYXdOYXZpZ2F0aW9uUHJvcGVydHkpKSB7XG4gICAgICAgIGNvbnN0IGFzc29jaWF0aW9uRW5kID0gY29udmVydGVyLnJhd1NjaGVtYS5hc3NvY2lhdGlvbnNcbiAgICAgICAgICAgIC5maW5kKChhc3NvY2lhdGlvbikgPT4gYXNzb2NpYXRpb24uZnVsbHlRdWFsaWZpZWROYW1lID09PSByYXdOYXZpZ2F0aW9uUHJvcGVydHkucmVsYXRpb25zaGlwKVxuICAgICAgICAgICAgPy5hc3NvY2lhdGlvbkVuZC5maW5kKChlbmQpID0+IGVuZC5yb2xlID09PSByYXdOYXZpZ2F0aW9uUHJvcGVydHkudG9Sb2xlKTtcblxuICAgICAgICBjb252ZXJ0ZWROYXZpZ2F0aW9uUHJvcGVydHkuaXNDb2xsZWN0aW9uID0gYXNzb2NpYXRpb25FbmQ/Lm11bHRpcGxpY2l0eSA9PT0gJyonO1xuICAgICAgICBjb252ZXJ0ZWROYXZpZ2F0aW9uUHJvcGVydHkudGFyZ2V0VHlwZU5hbWUgPSBhc3NvY2lhdGlvbkVuZD8udHlwZSA/PyAnJztcbiAgICB9XG5cbiAgICBsYXp5KFxuICAgICAgICBjb252ZXJ0ZWROYXZpZ2F0aW9uUHJvcGVydHksXG4gICAgICAgICd0YXJnZXRUeXBlJyxcbiAgICAgICAgcmVzb2x2ZUVudGl0eVR5cGUoY29udmVydGVyLCAocmF3TmF2aWdhdGlvblByb3BlcnR5IGFzIE5hdmlnYXRpb25Qcm9wZXJ0eSkudGFyZ2V0VHlwZU5hbWUpXG4gICAgKTtcblxuICAgIGxhenkoY29udmVydGVkTmF2aWdhdGlvblByb3BlcnR5LCAnYW5ub3RhdGlvbnMnLCByZXNvbHZlQW5ub3RhdGlvbnMoY29udmVydGVyLCByYXdOYXZpZ2F0aW9uUHJvcGVydHkpKTtcblxuICAgIHJldHVybiBjb252ZXJ0ZWROYXZpZ2F0aW9uUHJvcGVydHk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gQWN0aW9uSW1wb3J0LlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXIgICBDb252ZXJ0ZXJcbiAqIEBwYXJhbSByYXdBY3Rpb25JbXBvcnQgIFVuY29udmVydGVkIEFjdGlvbkltcG9ydFxuICogQHJldHVybnMgVGhlIGNvbnZlcnRlZCBBY3Rpb25JbXBvcnRcbiAqL1xuZnVuY3Rpb24gY29udmVydEFjdGlvbkltcG9ydChjb252ZXJ0ZXI6IENvbnZlcnRlciwgcmF3QWN0aW9uSW1wb3J0OiBSYXdBY3Rpb25JbXBvcnQpOiBBY3Rpb25JbXBvcnQge1xuICAgIGNvbnN0IGNvbnZlcnRlZEFjdGlvbkltcG9ydCA9IHJhd0FjdGlvbkltcG9ydCBhcyBBY3Rpb25JbXBvcnQ7XG5cbiAgICBsYXp5KGNvbnZlcnRlZEFjdGlvbkltcG9ydCwgJ2Fubm90YXRpb25zJywgcmVzb2x2ZUFubm90YXRpb25zKGNvbnZlcnRlciwgcmF3QWN0aW9uSW1wb3J0KSk7XG5cbiAgICBsYXp5KGNvbnZlcnRlZEFjdGlvbkltcG9ydCwgJ2FjdGlvbicsICgpID0+IHtcbiAgICAgICAgY29uc3QgcmF3QWN0aW9ucyA9IGNvbnZlcnRlci5yYXdTY2hlbWEuYWN0aW9ucy5maWx0ZXIoXG4gICAgICAgICAgICAocmF3QWN0aW9uKSA9PiAhcmF3QWN0aW9uLmlzQm91bmQgJiYgcmF3QWN0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZS5zdGFydHNXaXRoKHJhd0FjdGlvbkltcG9ydC5hY3Rpb25OYW1lKVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIHRoaXMgYWx3YXlzIHJlc29sdmVzIHRvIGEgdW5pcXVlIHVuYm91bmQgYWN0aW9uLCBidXQgcmVzb2x1dGlvbiBvZiB1bmJvdW5kIGZ1bmN0aW9ucyBjYW4gYmUgYW1iaWd1b3VzOlxuICAgICAgICAvLyB1bmJvdW5kIGZ1bmN0aW9uIEZRTnMgaGF2ZSBvdmVybG9hZHMgZGVwZW5kaW5nIG9uIGFsbCBvZiB0aGVpciBwYXJhbWV0ZXJzXG4gICAgICAgIGlmIChyYXdBY3Rpb25zLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIGNvbnZlcnRlci5sb2dFcnJvcihgQW1iaWd1b3VzIHJlZmVyZW5jZSBpbiBhY3Rpb24gaW1wb3J0OiAke3Jhd0FjdGlvbkltcG9ydC5mdWxseVF1YWxpZmllZE5hbWV9YCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyByZXR1cm4gdGhlIGZpcnN0IG1hdGNoaW5nIGFjdGlvbiBvciBmdW5jdGlvblxuICAgICAgICByZXR1cm4gY29udmVydGVyLmdldENvbnZlcnRlZEFjdGlvbihyYXdBY3Rpb25zWzBdLmZ1bGx5UXVhbGlmaWVkTmFtZSkhO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNvbnZlcnRlZEFjdGlvbkltcG9ydDtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBBY3Rpb24uXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlciAgIENvbnZlcnRlclxuICogQHBhcmFtIHJhd0FjdGlvbiAgVW5jb252ZXJ0ZWQgQWN0aW9uXG4gKiBAcmV0dXJucyBUaGUgY29udmVydGVkIEFjdGlvblxuICovXG5mdW5jdGlvbiBjb252ZXJ0QWN0aW9uKGNvbnZlcnRlcjogQ29udmVydGVyLCByYXdBY3Rpb246IFJhd0FjdGlvbik6IEFjdGlvbiB7XG4gICAgY29uc3QgY29udmVydGVkQWN0aW9uID0gcmF3QWN0aW9uIGFzIEFjdGlvbjtcblxuICAgIGlmIChjb252ZXJ0ZWRBY3Rpb24uc291cmNlVHlwZSkge1xuICAgICAgICBsYXp5KGNvbnZlcnRlZEFjdGlvbiwgJ3NvdXJjZUVudGl0eVR5cGUnLCByZXNvbHZlRW50aXR5VHlwZShjb252ZXJ0ZXIsIHJhd0FjdGlvbi5zb3VyY2VUeXBlKSk7XG4gICAgfVxuXG4gICAgaWYgKGNvbnZlcnRlZEFjdGlvbi5yZXR1cm5UeXBlKSB7XG4gICAgICAgIGxhenkoY29udmVydGVkQWN0aW9uLCAncmV0dXJuRW50aXR5VHlwZScsIHJlc29sdmVFbnRpdHlUeXBlKGNvbnZlcnRlciwgcmF3QWN0aW9uLnJldHVyblR5cGUpKTtcbiAgICB9XG5cbiAgICBsYXp5KGNvbnZlcnRlZEFjdGlvbiwgJ3BhcmFtZXRlcnMnLCBjb252ZXJ0ZXIuY29udmVydChyYXdBY3Rpb24ucGFyYW1ldGVycywgY29udmVydEFjdGlvblBhcmFtZXRlcikpO1xuXG4gICAgbGF6eShjb252ZXJ0ZWRBY3Rpb24sICdhbm5vdGF0aW9ucycsICgpID0+IHtcbiAgICAgICAgLypcbiAgICAgICAgICAgIEFubm90YXRpb24gcmVzb2x1dGlvbiBydWxlIGZvciBhY3Rpb25zOlxuXG4gICAgICAgICAgICAoMSkgYW5ub3RhdGlvbiB0YXJnZXQ6IHRoZSBzcGVjaWZpYyB1bmJvdW5kIG9yIGJvdW5kIG92ZXJsb2FkLCBlLmcuXG4gICAgICAgICAgICAgICAgICAgIC0gZm9yIGFjdGlvbnM6ICAgXCJ4Lnkuei51bmJvdW5kQWN0aW9uKClcIiAvIFwieC55LnouYm91bmRBY3Rpb24oeC55LnouRW50aXR5KVwiXG4gICAgICAgICAgICAgICAgICAgIC0gZm9yIGZ1bmN0aW9uczogXCJ4Lnkuei51bmJvdW5kRnVuY3Rpb24oRWRtLlN0cmluZylcIiAvIFwieC55LnoudW5ib3VuZEZ1bmN0aW9uKHgueS56LkVudGl0eSxFZG0uU3RyaW5nKVwiXG4gICAgICAgICAgICAoMikgYW5ub3RhdGlvbiB0YXJnZXQ6IHVuc3BlY2lmaWVkIG92ZXJsb2FkLCBlLmcuXG4gICAgICAgICAgICAgICAgLSBmb3IgYWN0aW9uczogICBcIngueS56LnVuYm91bmRBY3Rpb25cIiAvIFwieC55LnouYm91bmRBY3Rpb25cIlxuICAgICAgICAgICAgICAgIC0gZm9yIGZ1bmN0aW9uczogXCJ4Lnkuei51bmJvdW5kRnVuY3Rpb25cIiAvIFwieC55LnoudW5ib3VuZEZ1bmN0aW9uXCJcblxuICAgICAgICAgICAgV2hlbiByZXNvbHZpbmcgKDEpIHRha2VzIHByZWNlZGVuY2Ugb3ZlciAoMikuIFRoYXQgaXMsIGFubm90YXRpb25zIG9uIHRoZSBzcGVjaWZpYyBvdmVybG9hZCBvdmVyd3JpdGVcbiAgICAgICAgICAgIGFubm90YXRpb25zIG9uIHRoZSB1bnNwZWNpZmljIG92ZXJsb2FkLCBvbiB0ZXJtL3F1YWxpZmllciBsZXZlbC5cbiAgICAgICAgKi9cblxuICAgICAgICBjb25zdCB1bnNwZWNpZmljT3ZlcmxvYWRUYXJnZXQgPSBzdWJzdHJpbmdCZWZvcmVGaXJzdChyYXdBY3Rpb24uZnVsbHlRdWFsaWZpZWROYW1lLCAnKCcpO1xuICAgICAgICBjb25zdCBzcGVjaWZpY092ZXJsb2FkVGFyZ2V0ID0gcmF3QWN0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZTtcblxuICAgICAgICBjb25zdCBlZmZlY3RpdmVBbm5vdGF0aW9ucyA9IGNvbnZlcnRlci5nZXRBbm5vdGF0aW9ucyhzcGVjaWZpY092ZXJsb2FkVGFyZ2V0KTtcbiAgICAgICAgY29uc3QgdW5zcGVjaWZpY0Fubm90YXRpb25zID0gY29udmVydGVyLmdldEFubm90YXRpb25zKHVuc3BlY2lmaWNPdmVybG9hZFRhcmdldCk7XG5cbiAgICAgICAgZm9yIChjb25zdCB1bnNwZWNpZmljQW5ub3RhdGlvbiBvZiB1bnNwZWNpZmljQW5ub3RhdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAhZWZmZWN0aXZlQW5ub3RhdGlvbnMuc29tZShcbiAgICAgICAgICAgICAgICAgICAgKGFubm90YXRpb24pID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBhbm5vdGF0aW9uLnRlcm0gPT09IHVuc3BlY2lmaWNBbm5vdGF0aW9uLnRlcm0gJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGFubm90YXRpb24ucXVhbGlmaWVyID09PSB1bnNwZWNpZmljQW5ub3RhdGlvbi5xdWFsaWZpZXJcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBlZmZlY3RpdmVBbm5vdGF0aW9ucy5wdXNoKHVuc3BlY2lmaWNBbm5vdGF0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjcmVhdGVBbm5vdGF0aW9uc09iamVjdChjb252ZXJ0ZXIsIHJhd0FjdGlvbiwgZWZmZWN0aXZlQW5ub3RhdGlvbnMpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNvbnZlcnRlZEFjdGlvbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBBY3Rpb25QYXJhbWV0ZXIuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlciAgIENvbnZlcnRlclxuICogQHBhcmFtIHJhd0FjdGlvblBhcmFtZXRlciAgVW5jb252ZXJ0ZWQgQWN0aW9uUGFyYW1ldGVyXG4gKiBAcmV0dXJucyBUaGUgY29udmVydGVkIEFjdGlvblBhcmFtZXRlclxuICovXG5mdW5jdGlvbiBjb252ZXJ0QWN0aW9uUGFyYW1ldGVyKFxuICAgIGNvbnZlcnRlcjogQ29udmVydGVyLFxuICAgIHJhd0FjdGlvblBhcmFtZXRlcjogUmF3QWN0aW9uWydwYXJhbWV0ZXJzJ11bbnVtYmVyXVxuKTogQWN0aW9uUGFyYW1ldGVyIHtcbiAgICBjb25zdCBjb252ZXJ0ZWRBY3Rpb25QYXJhbWV0ZXIgPSByYXdBY3Rpb25QYXJhbWV0ZXIgYXMgQWN0aW9uUGFyYW1ldGVyO1xuXG4gICAgbGF6eShcbiAgICAgICAgY29udmVydGVkQWN0aW9uUGFyYW1ldGVyLFxuICAgICAgICAndHlwZVJlZmVyZW5jZScsXG4gICAgICAgICgpID0+XG4gICAgICAgICAgICBjb252ZXJ0ZXIuZ2V0Q29udmVydGVkRW50aXR5VHlwZShyYXdBY3Rpb25QYXJhbWV0ZXIudHlwZSkgPz9cbiAgICAgICAgICAgIGNvbnZlcnRlci5nZXRDb252ZXJ0ZWRDb21wbGV4VHlwZShyYXdBY3Rpb25QYXJhbWV0ZXIudHlwZSkgPz9cbiAgICAgICAgICAgIGNvbnZlcnRlci5nZXRDb252ZXJ0ZWRUeXBlRGVmaW5pdGlvbihyYXdBY3Rpb25QYXJhbWV0ZXIudHlwZSlcbiAgICApO1xuXG4gICAgbGF6eShjb252ZXJ0ZWRBY3Rpb25QYXJhbWV0ZXIsICdhbm5vdGF0aW9ucycsICgpID0+IHtcbiAgICAgICAgLy8gYW5ub3RhdGlvbnMgb24gYWN0aW9uIHBhcmFtZXRlcnMgYXJlIHJlc29sdmVkIGZvbGxvd2luZyB0aGUgcnVsZXMgZm9yIGFjdGlvbnNcbiAgICAgICAgY29uc3QgdW5zcGVjaWZpY092ZXJsb2FkVGFyZ2V0ID1cbiAgICAgICAgICAgIHJhd0FjdGlvblBhcmFtZXRlci5mdWxseVF1YWxpZmllZE5hbWUuc3Vic3RyaW5nKDAsIHJhd0FjdGlvblBhcmFtZXRlci5mdWxseVF1YWxpZmllZE5hbWUuaW5kZXhPZignKCcpKSArXG4gICAgICAgICAgICByYXdBY3Rpb25QYXJhbWV0ZXIuZnVsbHlRdWFsaWZpZWROYW1lLnN1YnN0cmluZyhyYXdBY3Rpb25QYXJhbWV0ZXIuZnVsbHlRdWFsaWZpZWROYW1lLmluZGV4T2YoJyknKSArIDEpO1xuICAgICAgICBjb25zdCBzcGVjaWZpY092ZXJsb2FkVGFyZ2V0ID0gcmF3QWN0aW9uUGFyYW1ldGVyLmZ1bGx5UXVhbGlmaWVkTmFtZTtcblxuICAgICAgICBjb25zdCBlZmZlY3RpdmVBbm5vdGF0aW9ucyA9IGNvbnZlcnRlci5nZXRBbm5vdGF0aW9ucyhzcGVjaWZpY092ZXJsb2FkVGFyZ2V0KTtcbiAgICAgICAgY29uc3QgdW5zcGVjaWZpY0Fubm90YXRpb25zID0gY29udmVydGVyLmdldEFubm90YXRpb25zKHVuc3BlY2lmaWNPdmVybG9hZFRhcmdldCk7XG5cbiAgICAgICAgZm9yIChjb25zdCB1bnNwZWNpZmljQW5ub3RhdGlvbiBvZiB1bnNwZWNpZmljQW5ub3RhdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAhZWZmZWN0aXZlQW5ub3RhdGlvbnMuc29tZShcbiAgICAgICAgICAgICAgICAgICAgKGFubm90YXRpb24pID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBhbm5vdGF0aW9uLnRlcm0gPT09IHVuc3BlY2lmaWNBbm5vdGF0aW9uLnRlcm0gJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGFubm90YXRpb24ucXVhbGlmaWVyID09PSB1bnNwZWNpZmljQW5ub3RhdGlvbi5xdWFsaWZpZXJcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBlZmZlY3RpdmVBbm5vdGF0aW9ucy5wdXNoKHVuc3BlY2lmaWNBbm5vdGF0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjcmVhdGVBbm5vdGF0aW9uc09iamVjdChjb252ZXJ0ZXIsIHJhd0FjdGlvblBhcmFtZXRlciwgZWZmZWN0aXZlQW5ub3RhdGlvbnMpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNvbnZlcnRlZEFjdGlvblBhcmFtZXRlcjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIENvbXBsZXhUeXBlLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXIgICBDb252ZXJ0ZXJcbiAqIEBwYXJhbSByYXdDb21wbGV4VHlwZSAgVW5jb252ZXJ0ZWQgQ29tcGxleFR5cGVcbiAqIEByZXR1cm5zIFRoZSBjb252ZXJ0ZWQgQ29tcGxleFR5cGVcbiAqL1xuZnVuY3Rpb24gY29udmVydENvbXBsZXhUeXBlKGNvbnZlcnRlcjogQ29udmVydGVyLCByYXdDb21wbGV4VHlwZTogUmF3Q29tcGxleFR5cGUpOiBDb21wbGV4VHlwZSB7XG4gICAgY29uc3QgY29udmVydGVkQ29tcGxleFR5cGUgPSByYXdDb21wbGV4VHlwZSBhcyBDb21wbGV4VHlwZTtcblxuICAgIGxhenkoY29udmVydGVkQ29tcGxleFR5cGUsICdwcm9wZXJ0aWVzJywgY29udmVydGVyLmNvbnZlcnQocmF3Q29tcGxleFR5cGUucHJvcGVydGllcywgY29udmVydFByb3BlcnR5KSk7XG4gICAgbGF6eShcbiAgICAgICAgY29udmVydGVkQ29tcGxleFR5cGUsXG4gICAgICAgICduYXZpZ2F0aW9uUHJvcGVydGllcycsXG4gICAgICAgIGNvbnZlcnRlci5jb252ZXJ0KHJhd0NvbXBsZXhUeXBlLm5hdmlnYXRpb25Qcm9wZXJ0aWVzIGFzIGFueVtdLCBjb252ZXJ0TmF2aWdhdGlvblByb3BlcnR5KVxuICAgICk7XG4gICAgbGF6eShjb252ZXJ0ZWRDb21wbGV4VHlwZSwgJ2Fubm90YXRpb25zJywgcmVzb2x2ZUFubm90YXRpb25zKGNvbnZlcnRlciwgcmF3Q29tcGxleFR5cGUpKTtcblxuICAgIHJldHVybiBjb252ZXJ0ZWRDb21wbGV4VHlwZTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIFR5cGVEZWZpbml0aW9uLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXIgICBDb252ZXJ0ZXJcbiAqIEBwYXJhbSByYXdUeXBlRGVmaW5pdGlvbiAgVW5jb252ZXJ0ZWQgVHlwZURlZmluaXRpb25cbiAqIEByZXR1cm5zIFRoZSBjb252ZXJ0ZWQgVHlwZURlZmluaXRpb25cbiAqL1xuZnVuY3Rpb24gY29udmVydFR5cGVEZWZpbml0aW9uKGNvbnZlcnRlcjogQ29udmVydGVyLCByYXdUeXBlRGVmaW5pdGlvbjogUmF3VHlwZURlZmluaXRpb24pOiBUeXBlRGVmaW5pdGlvbiB7XG4gICAgY29uc3QgY29udmVydGVkVHlwZURlZmluaXRpb24gPSByYXdUeXBlRGVmaW5pdGlvbiBhcyBUeXBlRGVmaW5pdGlvbjtcblxuICAgIGxhenkoY29udmVydGVkVHlwZURlZmluaXRpb24sICdhbm5vdGF0aW9ucycsIHJlc29sdmVBbm5vdGF0aW9ucyhjb252ZXJ0ZXIsIHJhd1R5cGVEZWZpbml0aW9uKSk7XG5cbiAgICByZXR1cm4gY29udmVydGVkVHlwZURlZmluaXRpb247XG59XG5cbi8qKlxuICogQ29udmVydCBhIFJhd01ldGFkYXRhIGludG8gYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIHRvIGJlIHVzZWQgdG8gZWFzaWx5IG5hdmlnYXRlIGEgbWV0YWRhdGEgb2JqZWN0IGFuZCBpdHMgYW5ub3RhdGlvbi5cbiAqXG4gKiBAcGFyYW0gcmF3TWV0YWRhdGFcbiAqIEByZXR1cm5zIHRoZSBjb252ZXJ0ZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1ldGFkYXRhLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydChyYXdNZXRhZGF0YTogUmF3TWV0YWRhdGEpOiBDb252ZXJ0ZWRNZXRhZGF0YSB7XG4gICAgLy8gQ29udmVydGVyIE91dHB1dFxuICAgIGNvbnN0IGNvbnZlcnRlZE91dHB1dDogQ29udmVydGVkTWV0YWRhdGEgPSB7XG4gICAgICAgIHZlcnNpb246IHJhd01ldGFkYXRhLnZlcnNpb24sXG4gICAgICAgIG5hbWVzcGFjZTogcmF3TWV0YWRhdGEuc2NoZW1hLm5hbWVzcGFjZSxcbiAgICAgICAgYW5ub3RhdGlvbnM6IHJhd01ldGFkYXRhLnNjaGVtYS5hbm5vdGF0aW9ucyxcbiAgICAgICAgcmVmZXJlbmNlczogVm9jYWJ1bGFyeVJlZmVyZW5jZXMsXG4gICAgICAgIGRpYWdub3N0aWNzOiBbXVxuICAgIH0gYXMgYW55O1xuXG4gICAgLy8gZmFsbCBiYWNrIG9uIHRoZSBkZWZhdWx0IHJlZmVyZW5jZXMgaWYgdGhlIGNhbGxlciBkb2VzIG5vdCBzcGVjaWZ5IGFueVxuICAgIGlmIChyYXdNZXRhZGF0YS5yZWZlcmVuY2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByYXdNZXRhZGF0YS5yZWZlcmVuY2VzID0gVm9jYWJ1bGFyeVJlZmVyZW5jZXM7XG4gICAgfVxuXG4gICAgLy8gQ29udmVydGVyXG4gICAgY29uc3QgY29udmVydGVyID0gbmV3IENvbnZlcnRlcihyYXdNZXRhZGF0YSwgY29udmVydGVkT3V0cHV0KTtcblxuICAgIGxhenkoXG4gICAgICAgIGNvbnZlcnRlZE91dHB1dCxcbiAgICAgICAgJ2VudGl0eUNvbnRhaW5lcicsXG4gICAgICAgIGNvbnZlcnRlci5jb252ZXJ0KGNvbnZlcnRlci5yYXdTY2hlbWEuZW50aXR5Q29udGFpbmVyLCBjb252ZXJ0RW50aXR5Q29udGFpbmVyKVxuICAgICk7XG4gICAgbGF6eShjb252ZXJ0ZWRPdXRwdXQsICdlbnRpdHlTZXRzJywgY29udmVydGVyLmNvbnZlcnQoY29udmVydGVyLnJhd1NjaGVtYS5lbnRpdHlTZXRzLCBjb252ZXJ0RW50aXR5U2V0KSk7XG4gICAgbGF6eShjb252ZXJ0ZWRPdXRwdXQsICdzaW5nbGV0b25zJywgY29udmVydGVyLmNvbnZlcnQoY29udmVydGVyLnJhd1NjaGVtYS5zaW5nbGV0b25zLCBjb252ZXJ0U2luZ2xldG9uKSk7XG4gICAgbGF6eShjb252ZXJ0ZWRPdXRwdXQsICdlbnRpdHlUeXBlcycsIGNvbnZlcnRlci5jb252ZXJ0KGNvbnZlcnRlci5yYXdTY2hlbWEuZW50aXR5VHlwZXMsIGNvbnZlcnRFbnRpdHlUeXBlKSk7XG4gICAgbGF6eShjb252ZXJ0ZWRPdXRwdXQsICdhY3Rpb25zJywgY29udmVydGVyLmNvbnZlcnQoY29udmVydGVyLnJhd1NjaGVtYS5hY3Rpb25zLCBjb252ZXJ0QWN0aW9uKSk7XG4gICAgbGF6eShjb252ZXJ0ZWRPdXRwdXQsICdjb21wbGV4VHlwZXMnLCBjb252ZXJ0ZXIuY29udmVydChjb252ZXJ0ZXIucmF3U2NoZW1hLmNvbXBsZXhUeXBlcywgY29udmVydENvbXBsZXhUeXBlKSk7XG4gICAgbGF6eShjb252ZXJ0ZWRPdXRwdXQsICdhY3Rpb25JbXBvcnRzJywgY29udmVydGVyLmNvbnZlcnQoY29udmVydGVyLnJhd1NjaGVtYS5hY3Rpb25JbXBvcnRzLCBjb252ZXJ0QWN0aW9uSW1wb3J0KSk7XG4gICAgbGF6eShcbiAgICAgICAgY29udmVydGVkT3V0cHV0LFxuICAgICAgICAndHlwZURlZmluaXRpb25zJyxcbiAgICAgICAgY29udmVydGVyLmNvbnZlcnQoY29udmVydGVyLnJhd1NjaGVtYS50eXBlRGVmaW5pdGlvbnMsIGNvbnZlcnRUeXBlRGVmaW5pdGlvbilcbiAgICApO1xuXG4gICAgY29udmVydGVkT3V0cHV0LnJlc29sdmVQYXRoID0gZnVuY3Rpb24gcmVzb2x2ZVBhdGg8VD4ocGF0aDogc3RyaW5nKTogUmVzb2x1dGlvblRhcmdldDxUPiB7XG4gICAgICAgIGNvbnN0IHRhcmdldFJlc29sdXRpb24gPSByZXNvbHZlVGFyZ2V0PFQ+KGNvbnZlcnRlciwgdW5kZWZpbmVkLCBwYXRoKTtcbiAgICAgICAgaWYgKHRhcmdldFJlc29sdXRpb24udGFyZ2V0KSB7XG4gICAgICAgICAgICBhcHBlbmRPYmplY3RQYXRoKHRhcmdldFJlc29sdXRpb24ub2JqZWN0UGF0aCwgdGFyZ2V0UmVzb2x1dGlvbi50YXJnZXQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0YXJnZXRSZXNvbHV0aW9uO1xuICAgIH07XG5cbiAgICByZXR1cm4gY29udmVydGVkT3V0cHV0O1xufVxuIiwiZXhwb3J0ICogZnJvbSAnLi9jb252ZXJ0ZXInO1xuZXhwb3J0ICogZnJvbSAnLi91dGlscyc7XG5leHBvcnQgKiBmcm9tICcuL3dyaXRlYmFjayc7XG4iLCJpbXBvcnQgdHlwZSB7XG4gICAgQW5ub3RhdGlvbixcbiAgICBBbm5vdGF0aW9uTGlzdCxcbiAgICBBcnJheVdpdGhJbmRleCxcbiAgICBDb21wbGV4VHlwZSxcbiAgICBJbmRleCxcbiAgICBSZWZlcmVuY2UsXG4gICAgVHlwZURlZmluaXRpb25cbn0gZnJvbSAnQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMnO1xuXG5leHBvcnQgeyBFbnVtSXNGbGFnIH0gZnJvbSAnQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0VudW1Jc0ZsYWcnO1xuZXhwb3J0IHsgVGVybVRvVHlwZXMgfSBmcm9tICdAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVGVybVRvVHlwZXMnO1xuZXhwb3J0IHsgVm9jYWJ1bGFyeVJlZmVyZW5jZXMgYXMgZGVmYXVsdFJlZmVyZW5jZXMgfSBmcm9tICdAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVm9jYWJ1bGFyeVJlZmVyZW5jZXMnO1xuXG5leHBvcnQgdHlwZSBSZWZlcmVuY2VzV2l0aE1hcCA9IFJlZmVyZW5jZVtdICYge1xuICAgIHJlZmVyZW5jZU1hcD86IFJlY29yZDxzdHJpbmcsIFJlZmVyZW5jZT47XG4gICAgcmV2ZXJzZVJlZmVyZW5jZU1hcD86IFJlY29yZDxzdHJpbmcsIFJlZmVyZW5jZT47XG59O1xuXG5mdW5jdGlvbiBzcGxpdEF0KHN0cmluZzogc3RyaW5nLCBpbmRleDogbnVtYmVyKTogW3N0cmluZywgc3RyaW5nXSB7XG4gICAgcmV0dXJuIGluZGV4IDwgMCA/IFtzdHJpbmcsICcnXSA6IFtzdHJpbmcuc3Vic3RyaW5nKDAsIGluZGV4KSwgc3RyaW5nLnN1YnN0cmluZyhpbmRleCArIDEpXTtcbn1cblxuZnVuY3Rpb24gc3Vic3RyaW5nQXQoc3RyaW5nOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpIHtcbiAgICByZXR1cm4gaW5kZXggPCAwID8gc3RyaW5nIDogc3RyaW5nLnN1YnN0cmluZygwLCBpbmRleCk7XG59XG5cbi8qKlxuICogU3BsaXRzIGEgc3RyaW5nIGF0IHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIGEgc2VwYXJhdG9yLlxuICpcbiAqIEBwYXJhbSBzdHJpbmcgICAgVGhlIHN0cmluZyB0byBzcGxpdFxuICogQHBhcmFtIHNlcGFyYXRvciBTZXBhcmF0b3IsIGUuZy4gYSBzaW5nbGUgY2hhcmFjdGVyLlxuICogQHJldHVybnMgQW4gYXJyYXkgY29uc2lzdGluZyBvZiB0d28gZWxlbWVudHM6IHRoZSBwYXJ0IGJlZm9yZSB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB0aGUgc2VwYXJhdG9yIGFuZCB0aGUgcGFydCBhZnRlciBpdC4gSWYgdGhlIHN0cmluZyBkb2VzIG5vdCBjb250YWluIHRoZSBzZXBhcmF0b3IsIHRoZSBzZWNvbmQgZWxlbWVudCBpcyB0aGUgZW1wdHkgc3RyaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3BsaXRBdEZpcnN0KHN0cmluZzogc3RyaW5nLCBzZXBhcmF0b3I6IHN0cmluZyk6IFtzdHJpbmcsIHN0cmluZ10ge1xuICAgIHJldHVybiBzcGxpdEF0KHN0cmluZywgc3RyaW5nLmluZGV4T2Yoc2VwYXJhdG9yKSk7XG59XG5cbi8qKlxuICogU3BsaXRzIGEgc3RyaW5nIGF0IHRoZSBsYXN0IG9jY3VycmVuY2Ugb2YgYSBzZXBhcmF0b3IuXG4gKlxuICogQHBhcmFtIHN0cmluZyAgICBUaGUgc3RyaW5nIHRvIHNwbGl0XG4gKiBAcGFyYW0gc2VwYXJhdG9yIFNlcGFyYXRvciwgZS5nLiBhIHNpbmdsZSBjaGFyYWN0ZXIuXG4gKiBAcmV0dXJucyBBbiBhcnJheSBjb25zaXN0aW5nIG9mIHR3byBlbGVtZW50czogdGhlIHBhcnQgYmVmb3JlIHRoZSBsYXN0IG9jY3VycmVuY2Ugb2YgdGhlIHNlcGFyYXRvciBhbmQgdGhlIHBhcnQgYWZ0ZXIgaXQuIElmIHRoZSBzdHJpbmcgZG9lcyBub3QgY29udGFpbiB0aGUgc2VwYXJhdG9yLCB0aGUgc2Vjb25kIGVsZW1lbnQgaXMgdGhlIGVtcHR5IHN0cmluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNwbGl0QXRMYXN0KHN0cmluZzogc3RyaW5nLCBzZXBhcmF0b3I6IHN0cmluZyk6IFtzdHJpbmcsIHN0cmluZ10ge1xuICAgIHJldHVybiBzcGxpdEF0KHN0cmluZywgc3RyaW5nLmxhc3RJbmRleE9mKHNlcGFyYXRvcikpO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHN1YnN0cmluZyBiZWZvcmUgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgYSBzZXBhcmF0b3IuXG4gKlxuICogQHBhcmFtIHN0cmluZyAgICBUaGUgc3RyaW5nXG4gKiBAcGFyYW0gc2VwYXJhdG9yIFNlcGFyYXRvciwgZS5nLiBhIHNpbmdsZSBjaGFyYWN0ZXIuXG4gKiBAcmV0dXJucyBUaGUgc3Vic3RyaW5nIGJlZm9yZSB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB0aGUgc2VwYXJhdG9yLCBvciB0aGUgaW5wdXQgc3RyaW5nIGlmIGl0IGRvZXMgbm90IGNvbnRhaW4gdGhlIHNlcGFyYXRvci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1YnN0cmluZ0JlZm9yZUZpcnN0KHN0cmluZzogc3RyaW5nLCBzZXBhcmF0b3I6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHN1YnN0cmluZ0F0KHN0cmluZywgc3RyaW5nLmluZGV4T2Yoc2VwYXJhdG9yKSk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgc3Vic3RyaW5nIGJlZm9yZSB0aGUgbGFzdCBvY2N1cnJlbmNlIG9mIGEgc2VwYXJhdG9yLlxuICpcbiAqIEBwYXJhbSBzdHJpbmcgICAgVGhlIHN0cmluZ1xuICogQHBhcmFtIHNlcGFyYXRvciBTZXBhcmF0b3IsIGUuZy4gYSBzaW5nbGUgY2hhcmFjdGVyLlxuICogQHJldHVybnMgVGhlIHN1YnN0cmluZyBiZWZvcmUgdGhlIGxhc3Qgb2NjdXJyZW5jZSBvZiB0aGUgc2VwYXJhdG9yLCBvciB0aGUgaW5wdXQgc3RyaW5nIGlmIGl0IGRvZXMgbm90IGNvbnRhaW4gdGhlIHNlcGFyYXRvci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1YnN0cmluZ0JlZm9yZUxhc3Qoc3RyaW5nOiBzdHJpbmcsIHNlcGFyYXRvcjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc3Vic3RyaW5nQXQoc3RyaW5nLCBzdHJpbmcubGFzdEluZGV4T2Yoc2VwYXJhdG9yKSk7XG59XG5cbi8qKlxuICogVHJhbnNmb3JtIGFuIHVuYWxpYXNlZCBzdHJpbmcgcmVwcmVzZW50YXRpb24gYW5ub3RhdGlvbiB0byB0aGUgYWxpYXNlZCB2ZXJzaW9uLlxuICpcbiAqIEBwYXJhbSByZWZlcmVuY2VzIGN1cnJlbnRSZWZlcmVuY2VzIGZvciB0aGUgcHJvamVjdFxuICogQHBhcmFtIHVuYWxpYXNlZFZhbHVlIHRoZSB1bmFsaWFzZWQgdmFsdWVcbiAqIEByZXR1cm5zIHRoZSBhbGlhc2VkIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHNhbWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFsaWFzKHJlZmVyZW5jZXM6IFJlZmVyZW5jZXNXaXRoTWFwLCB1bmFsaWFzZWRWYWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIXJlZmVyZW5jZXMucmV2ZXJzZVJlZmVyZW5jZU1hcCkge1xuICAgICAgICByZWZlcmVuY2VzLnJldmVyc2VSZWZlcmVuY2VNYXAgPSByZWZlcmVuY2VzLnJlZHVjZSgobWFwOiBSZWNvcmQ8c3RyaW5nLCBSZWZlcmVuY2U+LCByZWYpID0+IHtcbiAgICAgICAgICAgIG1hcFtyZWYubmFtZXNwYWNlXSA9IHJlZjtcbiAgICAgICAgICAgIHJldHVybiBtYXA7XG4gICAgICAgIH0sIHt9KTtcbiAgICB9XG4gICAgaWYgKCF1bmFsaWFzZWRWYWx1ZSkge1xuICAgICAgICByZXR1cm4gdW5hbGlhc2VkVmFsdWU7XG4gICAgfVxuICAgIGNvbnN0IFtuYW1lc3BhY2UsIHZhbHVlXSA9IHNwbGl0QXRMYXN0KHVuYWxpYXNlZFZhbHVlLCAnLicpO1xuICAgIGNvbnN0IHJlZmVyZW5jZSA9IHJlZmVyZW5jZXMucmV2ZXJzZVJlZmVyZW5jZU1hcFtuYW1lc3BhY2VdO1xuICAgIGlmIChyZWZlcmVuY2UpIHtcbiAgICAgICAgcmV0dXJuIGAke3JlZmVyZW5jZS5hbGlhc30uJHt2YWx1ZX1gO1xuICAgIH0gZWxzZSBpZiAodW5hbGlhc2VkVmFsdWUuaW5jbHVkZXMoJ0AnKSkge1xuICAgICAgICAvLyBUcnkgdG8gc2VlIGlmIGl0J3MgYW4gYW5ub3RhdGlvbiBQYXRoIGxpa2UgdG9fU2FsZXNPcmRlci9AVUkuTGluZUl0ZW1cbiAgICAgICAgY29uc3QgW3ByZUFsaWFzLCBwb3N0QWxpYXNdID0gc3BsaXRBdEZpcnN0KHVuYWxpYXNlZFZhbHVlLCAnQCcpO1xuICAgICAgICByZXR1cm4gYCR7cHJlQWxpYXN9QCR7YWxpYXMocmVmZXJlbmNlcywgcG9zdEFsaWFzKX1gO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB1bmFsaWFzZWRWYWx1ZTtcbiAgICB9XG59XG5cbi8qKlxuICogVHJhbnNmb3JtIGFuIGFsaWFzZWQgc3RyaW5nIHRvIGl0cyB1bmFsaWFzZWQgdmVyc2lvbiBnaXZlbiBhIHNldCBvZiByZWZlcmVuY2VzLlxuICpcbiAqIEBwYXJhbSByZWZlcmVuY2VzIFRoZSByZWZlcmVuY2VzIHRvIHVzZSBmb3IgdW5hbGlhc2luZy5cbiAqIEBwYXJhbSBhbGlhc2VkVmFsdWUgVGhlIGFsaWFzZWQgdmFsdWVcbiAqIEBwYXJhbSBuYW1lc3BhY2UgVGhlIGZhbGxiYWNrIG5hbWVzcGFjZVxuICogQHJldHVybnMgVGhlIGVxdWFsIHVuYWxpYXNlZCBzdHJpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bmFsaWFzKFxuICAgIHJlZmVyZW5jZXM6IFJlZmVyZW5jZXNXaXRoTWFwLFxuICAgIGFsaWFzZWRWYWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIG5hbWVzcGFjZT86IHN0cmluZ1xuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBfdW5hbGlhcyA9ICh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGlmICghcmVmZXJlbmNlcy5yZWZlcmVuY2VNYXApIHtcbiAgICAgICAgICAgIHJlZmVyZW5jZXMucmVmZXJlbmNlTWFwID0gT2JqZWN0LmZyb21FbnRyaWVzKHJlZmVyZW5jZXMubWFwKChyZWYpID0+IFtyZWYuYWxpYXMsIHJlZl0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFsaWFzZXMgYXJlIG9mIHR5cGUgJ1NpbXBsZUlkZW50aWZpZXInIGFuZCBtdXN0IG5vdCBjb250YWluIGRvdHNcbiAgICAgICAgY29uc3QgW21heWJlQWxpYXMsIHJlc3RdID0gc3BsaXRBdEZpcnN0KHZhbHVlLCAnLicpO1xuXG4gICAgICAgIGlmICghcmVzdCB8fCByZXN0LmluY2x1ZGVzKCcuJykpIHtcbiAgICAgICAgICAgIC8vIGVpdGhlciB0aGVyZSBpcyBubyBkb3QgaW4gdGhlIHZhbHVlIG9yIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgLS0+IG5vdGhpbmcgdG8gZG9cbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlzQW5ub3RhdGlvbiA9IG1heWJlQWxpYXMuc3RhcnRzV2l0aCgnQCcpO1xuICAgICAgICBjb25zdCB2YWx1ZVRvVW5hbGlhcyA9IGlzQW5ub3RhdGlvbiA/IG1heWJlQWxpYXMuc3Vic3RyaW5nKDEpIDogbWF5YmVBbGlhcztcbiAgICAgICAgY29uc3Qga25vd25SZWZlcmVuY2UgPSByZWZlcmVuY2VzLnJlZmVyZW5jZU1hcFt2YWx1ZVRvVW5hbGlhc107XG4gICAgICAgIGlmIChrbm93blJlZmVyZW5jZSkge1xuICAgICAgICAgICAgcmV0dXJuIGlzQW5ub3RhdGlvbiA/IGBAJHtrbm93blJlZmVyZW5jZS5uYW1lc3BhY2V9LiR7cmVzdH1gIDogYCR7a25vd25SZWZlcmVuY2UubmFtZXNwYWNlfS4ke3Jlc3R9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZSBhbGlhcyBjb3VsZCBub3QgYmUgcmVzb2x2ZWQgdXNpbmcgdGhlIHJlZmVyZW5jZXMuIEFzc3VtZSBpdCBpcyB0aGUgXCJnbG9iYWxcIiBhbGlhcyAoPSBuYW1lc3BhY2UpXG4gICAgICAgIHJldHVybiBuYW1lc3BhY2UgJiYgIWlzQW5ub3RhdGlvbiA/IGAke25hbWVzcGFjZX0uJHtyZXN0fWAgOiB2YWx1ZTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGFsaWFzZWRWYWx1ZVxuICAgICAgICA/LnNwbGl0KCcvJylcbiAgICAgICAgLnJlZHVjZSgoc2VnbWVudHMsIHNlZ21lbnQpID0+IHtcbiAgICAgICAgICAgIC8vIHRoZSBzZWdtZW50IGNvdWxkIGJlIGFuIGFjdGlvbiwgbGlrZSBcImRvU29tZXRoaW5nKGZvby5iYXIpXCJcbiAgICAgICAgICAgIGNvbnN0IFtmaXJzdCwgcmVzdF0gPSBzcGxpdEF0Rmlyc3Qoc2VnbWVudCwgJygnKTtcbiAgICAgICAgICAgIGNvbnN0IHN1YlNlZ21lbnQgPSBbX3VuYWxpYXMoZmlyc3QpXTtcblxuICAgICAgICAgICAgaWYgKHJlc3QpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJhbWV0ZXIgPSByZXN0LnNsaWNlKDAsIC0xKTsgLy8gcmVtb3ZlIHRyYWlsaW5nIFwiKVwiXG4gICAgICAgICAgICAgICAgc3ViU2VnbWVudC5wdXNoKGAoJHtfdW5hbGlhcyhwYXJhbWV0ZXIpfSlgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlZ21lbnRzLnB1c2goc3ViU2VnbWVudC5qb2luKCcnKSk7XG5cbiAgICAgICAgICAgIHJldHVybiBzZWdtZW50cztcbiAgICAgICAgfSwgW10gYXMgc3RyaW5nW10pXG4gICAgICAgID8uam9pbignLycpO1xufVxuXG4vKipcbiAqIERpZmZlcmVudGlhdGUgYmV0d2VlbiBhIENvbXBsZXhUeXBlIGFuZCBhIFR5cGVEZWZpbml0aW9uLlxuICpcbiAqIEBwYXJhbSBjb21wbGV4VHlwZURlZmluaXRpb25cbiAqIEByZXR1cm5zIHRydWUgaWYgdGhlIHZhbHVlIGlzIGEgY29tcGxleCB0eXBlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbXBsZXhUeXBlRGVmaW5pdGlvbihcbiAgICBjb21wbGV4VHlwZURlZmluaXRpb24/OiBDb21wbGV4VHlwZSB8IFR5cGVEZWZpbml0aW9uXG4pOiBjb21wbGV4VHlwZURlZmluaXRpb24gaXMgQ29tcGxleFR5cGUge1xuICAgIHJldHVybiAoXG4gICAgICAgICEhY29tcGxleFR5cGVEZWZpbml0aW9uICYmIGNvbXBsZXhUeXBlRGVmaW5pdGlvbi5fdHlwZSA9PT0gJ0NvbXBsZXhUeXBlJyAmJiAhIWNvbXBsZXhUeXBlRGVmaW5pdGlvbi5wcm9wZXJ0aWVzXG4gICAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIERlY2ltYWwodmFsdWU6IG51bWJlcikge1xuICAgIHJldHVybiB7XG4gICAgICAgIGlzRGVjaW1hbCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LFxuICAgICAgICB2YWx1ZU9mKCkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICB0b1N0cmluZygpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgfTtcbn1cblxuLyoqXG4gKiBEZWZpbmVzIGEgbGF6eSBwcm9wZXJ0eS5cbiAqXG4gKiBUaGUgcHJvcGVydHkgaXMgaW5pdGlhbGl6ZWQgYnkgY2FsbGluZyB0aGUgaW5pdCBmdW5jdGlvbiBvbiB0aGUgZmlyc3QgcmVhZCBhY2Nlc3MsIG9yIGJ5IGRpcmVjdGx5IGFzc2lnbmluZyBhIHZhbHVlLlxuICpcbiAqIEBwYXJhbSBvYmplY3QgICAgVGhlIGhvc3Qgb2JqZWN0XG4gKiBAcGFyYW0gcHJvcGVydHkgIFRoZSBsYXp5IHByb3BlcnR5IHRvIGFkZFxuICogQHBhcmFtIGluaXQgICAgICBUaGUgZnVuY3Rpb24gdGhhdCBpbml0aWFsaXplcyB0aGUgcHJvcGVydHkncyB2YWx1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF6eTxUeXBlLCBLZXkgZXh0ZW5kcyBrZXlvZiBUeXBlPihvYmplY3Q6IFR5cGUsIHByb3BlcnR5OiBLZXksIGluaXQ6ICgpID0+IFR5cGVbS2V5XSkge1xuICAgIGNvbnN0IGluaXRpYWwgPSBTeW1ib2woJ2luaXRpYWwnKTtcbiAgICBsZXQgX3ZhbHVlOiBUeXBlW0tleV0gfCB0eXBlb2YgaW5pdGlhbCA9IGluaXRpYWw7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCBwcm9wZXJ0eSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuXG4gICAgICAgIGdldCgpIHtcbiAgICAgICAgICAgIGlmIChfdmFsdWUgPT09IGluaXRpYWwpIHtcbiAgICAgICAgICAgICAgICBfdmFsdWUgPSBpbml0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gX3ZhbHVlO1xuICAgICAgICB9LFxuXG4gICAgICAgIHNldCh2YWx1ZTogVHlwZVtLZXldKSB7XG4gICAgICAgICAgICBfdmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGFsbG93cyB0byBmaW5kIGFuIGFycmF5IGVsZW1lbnQgYnkgcHJvcGVydHkgdmFsdWUuXG4gKlxuICogQHBhcmFtIGFycmF5ICAgICBUaGUgYXJyYXlcbiAqIEBwYXJhbSBwcm9wZXJ0eSAgRWxlbWVudHMgaW4gdGhlIGFycmF5IGFyZSBzZWFyY2hlZCBieSB0aGlzIHByb3BlcnR5XG4gKiBAcmV0dXJucyBBIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIHVzZWQgdG8gZmluZCBhbiBlbGVtZW50IG9mIHRoZSBhcnJheSBieSBwcm9wZXJ0eSB2YWx1ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUluZGV4ZWRGaW5kPFQ+KGFycmF5OiBBcnJheTxUPiwgcHJvcGVydHk6IGtleW9mIFQpIHtcbiAgICBjb25zdCBpbmRleDogTWFwPFRba2V5b2YgVF0sIFQgfCB1bmRlZmluZWQ+ID0gbmV3IE1hcCgpO1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGZpbmQodmFsdWU6IFRba2V5b2YgVF0pIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IGluZGV4LmdldCh2YWx1ZSk7XG5cbiAgICAgICAgaWYgKGVsZW1lbnQ/Lltwcm9wZXJ0eV0gPT09IHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhcnJheS5maW5kKChlbGVtZW50KSA9PiB7XG4gICAgICAgICAgICBpZiAoIWVsZW1lbnQ/Lmhhc093blByb3BlcnR5KHByb3BlcnR5KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcHJvcGVydHlWYWx1ZSA9IGVsZW1lbnRbcHJvcGVydHldO1xuICAgICAgICAgICAgaW5kZXguc2V0KHByb3BlcnR5VmFsdWUsIGVsZW1lbnQpO1xuICAgICAgICAgICAgcmV0dXJuIHByb3BlcnR5VmFsdWUgPT09IHZhbHVlO1xuICAgICAgICB9KTtcbiAgICB9O1xufVxuXG4vKipcbiAqIEFkZHMgYSAnZ2V0IGJ5IHZhbHVlJyBmdW5jdGlvbiB0byBhbiBhcnJheS5cbiAqXG4gKiBJZiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIGFkZEluZGV4KG15QXJyYXksICduYW1lJyksIGEgbmV3IGZ1bmN0aW9uICdieV9uYW1lKHZhbHVlKScgd2lsbCBiZSBhZGRlZCB0aGF0IGFsbG93cyB0b1xuICogZmluZCBhIG1lbWJlciBvZiB0aGUgYXJyYXkgYnkgdGhlIHZhbHVlIG9mIGl0cyAnbmFtZScgcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIGFycmF5ICAgICAgVGhlIGFycmF5XG4gKiBAcGFyYW0gcHJvcGVydHkgICBUaGUgcHJvcGVydHkgdGhhdCB3aWxsIGJlIHVzZWQgYnkgdGhlICdieV97cHJvcGVydHl9KCknIGZ1bmN0aW9uXG4gKiBAcmV0dXJucyBUaGUgYXJyYXkgd2l0aCB0aGUgYWRkZWQgZnVuY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZEdldEJ5VmFsdWU8VCwgUCBleHRlbmRzIEV4dHJhY3Q8a2V5b2YgVCwgc3RyaW5nPj4oYXJyYXk6IEFycmF5PFQ+LCBwcm9wZXJ0eTogUCkge1xuICAgIGNvbnN0IGluZGV4TmFtZToga2V5b2YgSW5kZXg8VCwgUD4gPSBgYnlfJHtwcm9wZXJ0eX1gO1xuXG4gICAgaWYgKCFhcnJheS5oYXNPd25Qcm9wZXJ0eShpbmRleE5hbWUpKSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhcnJheSwgaW5kZXhOYW1lLCB7IHdyaXRhYmxlOiBmYWxzZSwgdmFsdWU6IGNyZWF0ZUluZGV4ZWRGaW5kKGFycmF5LCBwcm9wZXJ0eSkgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQcm9wZXJ0eSAnJHtpbmRleE5hbWV9JyBhbHJlYWR5IGV4aXN0c2ApO1xuICAgIH1cbiAgICByZXR1cm4gYXJyYXkgYXMgQXJyYXlXaXRoSW5kZXg8VCwgUD47XG59XG5cbi8qKlxuICogTWVyZ2UgYW5ub3RhdGlvbnMgZnJvbSBkaWZmZXJlbnQgc291cmNlcyB0b2dldGhlciBieSBvdmVyd3JpdGluZyBhdCB0aGUgdGVybSBsZXZlbC5cbiAqXG4gKiBAcGFyYW0gcmVmZXJlbmNlcyAgICAgICAgUmVmZXJlbmNlcywgdXNlZCB0byByZXNvbHZlIGFsaWFzZWQgYW5ub3RhdGlvbiB0YXJnZXRzIGFuZCBhbGlhc2VkIGFubm90YXRpb24gdGVybXMuXG4gKiBAcGFyYW0gYW5ub3RhdGlvblNvdXJjZXMgQW5ub3RhdGlvbiBzb3VyY2VzXG4gKiBAcmV0dXJucyB0aGUgcmVzdWx0aW5nIG1lcmdlZCBhbm5vdGF0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VBbm5vdGF0aW9ucyhcbiAgICByZWZlcmVuY2VzOiBSZWZlcmVuY2VbXSxcbiAgICAuLi5hbm5vdGF0aW9uU291cmNlczogeyBuYW1lOiBzdHJpbmc7IGFubm90YXRpb25MaXN0OiBBbm5vdGF0aW9uTGlzdFtdIH1bXVxuKTogUmVjb3JkPHN0cmluZywgQW5ub3RhdGlvbltdPiB7XG4gICAgcmV0dXJuIGFubm90YXRpb25Tb3VyY2VzLnJlZHVjZVJpZ2h0KChyZXN1bHQsIHsgbmFtZSwgYW5ub3RhdGlvbkxpc3QgfSkgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IHsgdGFyZ2V0LCBhbm5vdGF0aW9ucyB9IG9mIGFubm90YXRpb25MaXN0KSB7XG4gICAgICAgICAgICBjb25zdCBhbm5vdGF0aW9uVGFyZ2V0ID0gdW5hbGlhcyhyZWZlcmVuY2VzLCB0YXJnZXQpID8/IHRhcmdldDtcbiAgICAgICAgICAgIGlmICghcmVzdWx0W2Fubm90YXRpb25UYXJnZXRdKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0W2Fubm90YXRpb25UYXJnZXRdID0gW107XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGFubm90YXRpb25zT25UYXJnZXQgPSBhbm5vdGF0aW9uc1xuICAgICAgICAgICAgICAgIC5tYXAoKHJhd0Fubm90YXRpb24pOiBBbm5vdGF0aW9uID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmF3QW5ub3RhdGlvbi50ZXJtID0gdW5hbGlhcyhyZWZlcmVuY2VzLCByYXdBbm5vdGF0aW9uLnRlcm0pID8/IHJhd0Fubm90YXRpb24udGVybTtcblxuICAgICAgICAgICAgICAgICAgICAocmF3QW5ub3RhdGlvbiBhcyBhbnkpLmZ1bGx5UXVhbGlmaWVkTmFtZSA9IHJhd0Fubm90YXRpb24ucXVhbGlmaWVyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGAke2Fubm90YXRpb25UYXJnZXR9QCR7cmF3QW5ub3RhdGlvbi50ZXJtfSMke3Jhd0Fubm90YXRpb24ucXVhbGlmaWVyfWBcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYCR7YW5ub3RhdGlvblRhcmdldH1AJHtyYXdBbm5vdGF0aW9uLnRlcm19YDtcblxuICAgICAgICAgICAgICAgICAgICAocmF3QW5ub3RhdGlvbiBhcyBhbnkpLl9fc291cmNlID0gbmFtZTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmF3QW5ub3RhdGlvbiBhcyBBbm5vdGF0aW9uO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgKGFubm90YXRpb24pID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAhcmVzdWx0W2Fubm90YXRpb25UYXJnZXRdLnNvbWUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGV4aXN0aW5nQW5ub3RhdGlvbikgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdBbm5vdGF0aW9uLnRlcm0gPT09IGFubm90YXRpb24udGVybSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZ0Fubm90YXRpb24ucXVhbGlmaWVyID09PSBhbm5vdGF0aW9uLnF1YWxpZmllclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHJlc3VsdFthbm5vdGF0aW9uVGFyZ2V0XS5wdXNoKC4uLmFubm90YXRpb25zT25UYXJnZXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LCB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBBbm5vdGF0aW9uW10+KTtcbn1cbiIsImltcG9ydCB0eXBlIHtcbiAgICBBbm5vdGF0aW9uUGF0aEV4cHJlc3Npb24sXG4gICAgQW5ub3RhdGlvblJlY29yZCxcbiAgICBBbm5vdGF0aW9uVGVybSxcbiAgICBFeHByZXNzaW9uLFxuICAgIE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhFeHByZXNzaW9uLFxuICAgIFBhdGhFeHByZXNzaW9uLFxuICAgIFByb3BlcnR5UGF0aEV4cHJlc3Npb24sXG4gICAgUmF3QW5ub3RhdGlvbixcbiAgICBSZWZlcmVuY2Vcbn0gZnJvbSAnQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMnO1xuaW1wb3J0IHsgdW5hbGlhcyB9IGZyb20gJy4vdXRpbHMnO1xuXG4vKipcbiAqIFJldmVydCBhbiBvYmplY3QgdG8gaXRzIHJhdyB0eXBlIGVxdWl2YWxlbnQuXG4gKlxuICogQHBhcmFtIHJlZmVyZW5jZXMgdGhlIGN1cnJlbnQgcmVmZXJlbmNlXG4gKiBAcGFyYW0gdmFsdWUgdGhlIHZhbHVlIHRvIHJldmVydFxuICogQHJldHVybnMgdGhlIHJhdyB2YWx1ZVxuICovXG5mdW5jdGlvbiByZXZlcnRPYmplY3RUb1Jhd1R5cGUocmVmZXJlbmNlczogUmVmZXJlbmNlW10sIHZhbHVlOiBhbnkpIHtcbiAgICBsZXQgcmVzdWx0OiBFeHByZXNzaW9uIHwgdW5kZWZpbmVkO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICB0eXBlOiAnQ29sbGVjdGlvbicsXG4gICAgICAgICAgICBDb2xsZWN0aW9uOiB2YWx1ZS5tYXAoKGFubm8pID0+IHJldmVydENvbGxlY3Rpb25JdGVtVG9SYXdUeXBlKHJlZmVyZW5jZXMsIGFubm8pKSBhcyBhbnlbXVxuICAgICAgICB9O1xuICAgIH0gZWxzZSBpZiAodmFsdWUuaXNEZWNpbWFsPy4oKSkge1xuICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICB0eXBlOiAnRGVjaW1hbCcsXG4gICAgICAgICAgICBEZWNpbWFsOiB2YWx1ZS52YWx1ZU9mKClcbiAgICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlLmlzU3RyaW5nPy4oKSkge1xuICAgICAgICBjb25zdCB2YWx1ZU1hdGNoZXMgPSB2YWx1ZS52YWx1ZU9mKCkuc3BsaXQoJy4nKTtcbiAgICAgICAgaWYgKHZhbHVlTWF0Y2hlcy5sZW5ndGggPiAxICYmIHJlZmVyZW5jZXMuZmluZCgocmVmKSA9PiByZWYuYWxpYXMgPT09IHZhbHVlTWF0Y2hlc1swXSkpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnRW51bU1lbWJlcicsXG4gICAgICAgICAgICAgICAgRW51bU1lbWJlcjogdmFsdWUudmFsdWVPZigpXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdTdHJpbmcnLFxuICAgICAgICAgICAgICAgIFN0cmluZzogdmFsdWUudmFsdWVPZigpXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmICh2YWx1ZS5pc0ludD8uKCkpIHtcbiAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgdHlwZTogJ0ludCcsXG4gICAgICAgICAgICBJbnQ6IHZhbHVlLnZhbHVlT2YoKVxuICAgICAgICB9O1xuICAgIH0gZWxzZSBpZiAodmFsdWUuaXNGbG9hdD8uKCkpIHtcbiAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgdHlwZTogJ0Zsb2F0JyxcbiAgICAgICAgICAgIEZsb2F0OiB2YWx1ZS52YWx1ZU9mKClcbiAgICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlLmlzRGF0ZT8uKCkpIHtcbiAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgdHlwZTogJ0RhdGUnLFxuICAgICAgICAgICAgRGF0ZTogdmFsdWUudmFsdWVPZigpXG4gICAgICAgIH07XG4gICAgfSBlbHNlIGlmICh2YWx1ZS5pc0Jvb2xlYW4/LigpKSB7XG4gICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAgIHR5cGU6ICdCb29sJyxcbiAgICAgICAgICAgIEJvb2w6IHZhbHVlLnZhbHVlT2YoKVxuICAgICAgICB9O1xuICAgIH0gZWxzZSBpZiAodmFsdWUudHlwZSA9PT0gJ1BhdGgnKSB7XG4gICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAgIHR5cGU6ICdQYXRoJyxcbiAgICAgICAgICAgIFBhdGg6IHZhbHVlLnBhdGhcbiAgICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlLnR5cGUgPT09ICdBbm5vdGF0aW9uUGF0aCcpIHtcbiAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgdHlwZTogJ0Fubm90YXRpb25QYXRoJyxcbiAgICAgICAgICAgIEFubm90YXRpb25QYXRoOiB2YWx1ZS52YWx1ZVxuICAgICAgICB9O1xuICAgIH0gZWxzZSBpZiAodmFsdWUudHlwZSA9PT0gJ0FwcGx5Jykge1xuICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICB0eXBlOiAnQXBwbHknLFxuICAgICAgICAgICAgQXBwbHk6IHZhbHVlLkFwcGx5XG4gICAgICAgIH07XG4gICAgfSBlbHNlIGlmICh2YWx1ZS50eXBlID09PSAnTnVsbCcpIHtcbiAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgdHlwZTogJ051bGwnXG4gICAgICAgIH07XG4gICAgfSBlbHNlIGlmICh2YWx1ZS50eXBlID09PSAnUHJvcGVydHlQYXRoJykge1xuICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICB0eXBlOiAnUHJvcGVydHlQYXRoJyxcbiAgICAgICAgICAgIFByb3BlcnR5UGF0aDogdmFsdWUudmFsdWVcbiAgICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlLnR5cGUgPT09ICdOYXZpZ2F0aW9uUHJvcGVydHlQYXRoJykge1xuICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICB0eXBlOiAnTmF2aWdhdGlvblByb3BlcnR5UGF0aCcsXG4gICAgICAgICAgICBOYXZpZ2F0aW9uUHJvcGVydHlQYXRoOiB2YWx1ZS52YWx1ZVxuICAgICAgICB9O1xuICAgIH0gZWxzZSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCAnJFR5cGUnKSkge1xuICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICB0eXBlOiAnUmVjb3JkJyxcbiAgICAgICAgICAgIFJlY29yZDogcmV2ZXJ0Q29sbGVjdGlvbkl0ZW1Ub1Jhd1R5cGUocmVmZXJlbmNlcywgdmFsdWUpIGFzIEFubm90YXRpb25SZWNvcmRcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBSZXZlcnQgYSB2YWx1ZSB0byBpdHMgcmF3IHZhbHVlIGRlcGVuZGluZyBvbiBpdHMgdHlwZS5cbiAqXG4gKiBAcGFyYW0gcmVmZXJlbmNlcyB0aGUgY3VycmVudCBzZXQgb2YgcmVmZXJlbmNlXG4gKiBAcGFyYW0gdmFsdWUgdGhlIHZhbHVlIHRvIHJldmVydFxuICogQHJldHVybnMgdGhlIHJhdyBleHByZXNzaW9uXG4gKi9cbmZ1bmN0aW9uIHJldmVydFZhbHVlVG9SYXdUeXBlKHJlZmVyZW5jZXM6IFJlZmVyZW5jZVtdLCB2YWx1ZTogYW55KTogRXhwcmVzc2lvbiB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IHJlc3VsdDogRXhwcmVzc2lvbiB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCB2YWx1ZUNvbnN0cnVjdG9yID0gdmFsdWU/LmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgc3dpdGNoICh2YWx1ZUNvbnN0cnVjdG9yKSB7XG4gICAgICAgIGNhc2UgJ1N0cmluZyc6XG4gICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgICAgICBjb25zdCB2YWx1ZU1hdGNoZXMgPSB2YWx1ZS50b1N0cmluZygpLnNwbGl0KCcuJyk7XG4gICAgICAgICAgICBpZiAodmFsdWVNYXRjaGVzLmxlbmd0aCA+IDEgJiYgcmVmZXJlbmNlcy5maW5kKChyZWYpID0+IHJlZi5hbGlhcyA9PT0gdmFsdWVNYXRjaGVzWzBdKSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0VudW1NZW1iZXInLFxuICAgICAgICAgICAgICAgICAgICBFbnVtTWVtYmVyOiB2YWx1ZS50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnU3RyaW5nJyxcbiAgICAgICAgICAgICAgICAgICAgU3RyaW5nOiB2YWx1ZS50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdCb29sZWFuJzpcbiAgICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ0Jvb2wnLFxuICAgICAgICAgICAgICAgIEJvb2w6IHZhbHVlLnZhbHVlT2YoKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ051bWJlcic6XG4gICAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgICAgICBpZiAodmFsdWUudG9TdHJpbmcoKSA9PT0gdmFsdWUudG9GaXhlZCgpKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnSW50JyxcbiAgICAgICAgICAgICAgICAgICAgSW50OiB2YWx1ZS52YWx1ZU9mKClcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdEZWNpbWFsJyxcbiAgICAgICAgICAgICAgICAgICAgRGVjaW1hbDogdmFsdWUudmFsdWVPZigpXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmVzdWx0ID0gcmV2ZXJ0T2JqZWN0VG9SYXdUeXBlKHJlZmVyZW5jZXMsIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG5jb25zdCByZXN0cmljdGVkS2V5cyA9IFsnJFR5cGUnLCAndGVybScsICdfX3NvdXJjZScsICdxdWFsaWZpZXInLCAnQWN0aW9uVGFyZ2V0JywgJ2Z1bGx5UXVhbGlmaWVkTmFtZScsICdhbm5vdGF0aW9ucyddO1xuXG4vKipcbiAqIFJldmVydCB0aGUgY3VycmVudCBlbWJlZGRlZCBhbm5vdGF0aW9ucyB0byB0aGVpciByYXcgdHlwZS5cbiAqXG4gKiBAcGFyYW0gcmVmZXJlbmNlcyB0aGUgY3VycmVudCBzZXQgb2YgcmVmZXJlbmNlXG4gKiBAcGFyYW0gY3VycmVudEFubm90YXRpb25zIHRoZSBjb2xsZWN0aW9uIGl0ZW0gdG8gZXZhbHVhdGVcbiAqIEBwYXJhbSB0YXJnZXRBbm5vdGF0aW9ucyB0aGUgcGxhY2Ugd2hlcmUgd2UgbmVlZCB0byBhZGQgdGhlIGFubm90YXRpb25cbiAqL1xuZnVuY3Rpb24gcmV2ZXJ0QW5ub3RhdGlvbnNUb1Jhd1R5cGUoXG4gICAgcmVmZXJlbmNlczogUmVmZXJlbmNlW10sXG4gICAgY3VycmVudEFubm90YXRpb25zOiBhbnksXG4gICAgdGFyZ2V0QW5ub3RhdGlvbnM6IFJhd0Fubm90YXRpb25bXVxuKSB7XG4gICAgT2JqZWN0LmtleXMoY3VycmVudEFubm90YXRpb25zKVxuICAgICAgICAuZmlsdGVyKChrZXkpID0+IGtleSAhPT0gJ19hbm5vdGF0aW9ucycpXG4gICAgICAgIC5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGN1cnJlbnRBbm5vdGF0aW9uc1trZXldKS5mb3JFYWNoKCh0ZXJtKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyc2VkQW5ub3RhdGlvbiA9IHJldmVydFRlcm1Ub0dlbmVyaWNUeXBlKHJlZmVyZW5jZXMsIGN1cnJlbnRBbm5vdGF0aW9uc1trZXldW3Rlcm1dKTtcbiAgICAgICAgICAgICAgICBpZiAoIXBhcnNlZEFubm90YXRpb24udGVybSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB1bmFsaWFzZWRUZXJtID0gdW5hbGlhcyhyZWZlcmVuY2VzLCBgJHtrZXl9LiR7dGVybX1gKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHVuYWxpYXNlZFRlcm0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHF1YWxpZmllZFNwbGl0ID0gdW5hbGlhc2VkVGVybS5zcGxpdCgnIycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VkQW5ub3RhdGlvbi50ZXJtID0gcXVhbGlmaWVkU3BsaXRbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocXVhbGlmaWVkU3BsaXQubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN1YiBBbm5vdGF0aW9uIHdpdGggYSBxdWFsaWZpZXIsIG5vdCBzdXJlIHdoZW4gdGhhdCBjYW4gaGFwcGVuIGluIHJlYWwgc2NlbmFyaW9zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VkQW5ub3RhdGlvbi5xdWFsaWZpZXIgPSBxdWFsaWZpZWRTcGxpdFsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0YXJnZXRBbm5vdGF0aW9ucy5wdXNoKHBhcnNlZEFubm90YXRpb24pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xufVxuXG4vKipcbiAqIFJldmVydCB0aGUgY3VycmVudCBjb2xsZWN0aW9uIGl0ZW0gdG8gdGhlIGNvcnJlc3BvbmRpbmcgcmF3IGFubm90YXRpb24uXG4gKlxuICogQHBhcmFtIHJlZmVyZW5jZXMgdGhlIGN1cnJlbnQgc2V0IG9mIHJlZmVyZW5jZVxuICogQHBhcmFtIGNvbGxlY3Rpb25JdGVtIHRoZSBjb2xsZWN0aW9uIGl0ZW0gdG8gZXZhbHVhdGVcbiAqIEByZXR1cm5zIHRoZSByYXcgdHlwZSBlcXVpdmFsZW50XG4gKi9cbmZ1bmN0aW9uIHJldmVydENvbGxlY3Rpb25JdGVtVG9SYXdUeXBlKFxuICAgIHJlZmVyZW5jZXM6IFJlZmVyZW5jZVtdLFxuICAgIGNvbGxlY3Rpb25JdGVtOiBhbnlcbik6XG4gICAgfCBBbm5vdGF0aW9uUmVjb3JkXG4gICAgfCBzdHJpbmdcbiAgICB8IFByb3BlcnR5UGF0aEV4cHJlc3Npb25cbiAgICB8IFBhdGhFeHByZXNzaW9uXG4gICAgfCBOYXZpZ2F0aW9uUHJvcGVydHlQYXRoRXhwcmVzc2lvblxuICAgIHwgQW5ub3RhdGlvblBhdGhFeHByZXNzaW9uXG4gICAgfCB1bmRlZmluZWQge1xuICAgIGlmICh0eXBlb2YgY29sbGVjdGlvbkl0ZW0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBjb2xsZWN0aW9uSXRlbTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBjb2xsZWN0aW9uSXRlbSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgaWYgKGNvbGxlY3Rpb25JdGVtLmhhc093blByb3BlcnR5KCckVHlwZScpKSB7XG4gICAgICAgICAgICAvLyBBbm5vdGF0aW9uIFJlY29yZFxuICAgICAgICAgICAgY29uc3Qgb3V0SXRlbTogQW5ub3RhdGlvblJlY29yZCA9IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBjb2xsZWN0aW9uSXRlbS4kVHlwZSxcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eVZhbHVlczogW10gYXMgYW55W11cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyBDb3VsZCB2YWxpZGF0ZSBrZXlzIGFuZCB0eXBlIGJhc2VkIG9uICRUeXBlXG4gICAgICAgICAgICBPYmplY3Qua2V5cyhjb2xsZWN0aW9uSXRlbSkuZm9yRWFjaCgoY29sbGVjdGlvbktleSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZXN0cmljdGVkS2V5cy5pbmRleE9mKGNvbGxlY3Rpb25LZXkpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGNvbGxlY3Rpb25JdGVtW2NvbGxlY3Rpb25LZXldO1xuICAgICAgICAgICAgICAgICAgICBvdXRJdGVtLnByb3BlcnR5VmFsdWVzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogY29sbGVjdGlvbktleSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiByZXZlcnRWYWx1ZVRvUmF3VHlwZShyZWZlcmVuY2VzLCB2YWx1ZSkgYXMgRXhwcmVzc2lvblxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvbGxlY3Rpb25LZXkgPT09ICdhbm5vdGF0aW9ucycgJiYgT2JqZWN0LmtleXMoY29sbGVjdGlvbkl0ZW1bY29sbGVjdGlvbktleV0pLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgb3V0SXRlbS5hbm5vdGF0aW9ucyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICByZXZlcnRBbm5vdGF0aW9uc1RvUmF3VHlwZShyZWZlcmVuY2VzLCBjb2xsZWN0aW9uSXRlbVtjb2xsZWN0aW9uS2V5XSwgb3V0SXRlbS5hbm5vdGF0aW9ucyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gb3V0SXRlbTtcbiAgICAgICAgfSBlbHNlIGlmIChjb2xsZWN0aW9uSXRlbS50eXBlID09PSAnUHJvcGVydHlQYXRoJykge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnUHJvcGVydHlQYXRoJyxcbiAgICAgICAgICAgICAgICBQcm9wZXJ0eVBhdGg6IGNvbGxlY3Rpb25JdGVtLnZhbHVlXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKGNvbGxlY3Rpb25JdGVtLnR5cGUgPT09ICdBbm5vdGF0aW9uUGF0aCcpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ0Fubm90YXRpb25QYXRoJyxcbiAgICAgICAgICAgICAgICBBbm5vdGF0aW9uUGF0aDogY29sbGVjdGlvbkl0ZW0udmFsdWVcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoY29sbGVjdGlvbkl0ZW0udHlwZSA9PT0gJ05hdmlnYXRpb25Qcm9wZXJ0eVBhdGgnKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdOYXZpZ2F0aW9uUHJvcGVydHlQYXRoJyxcbiAgICAgICAgICAgICAgICBOYXZpZ2F0aW9uUHJvcGVydHlQYXRoOiBjb2xsZWN0aW9uSXRlbS52YWx1ZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFJldmVydCBhbiBhbm5vdGF0aW9uIHRlcm0gdG8gaXQncyBnZW5lcmljIG9yIHJhdyBlcXVpdmFsZW50LlxuICpcbiAqIEBwYXJhbSByZWZlcmVuY2VzIHRoZSByZWZlcmVuY2Ugb2YgdGhlIGN1cnJlbnQgY29udGV4dFxuICogQHBhcmFtIGFubm90YXRpb24gdGhlIGFubm90YXRpb24gdGVybSB0byByZXZlcnRcbiAqIEByZXR1cm5zIHRoZSByYXcgYW5ub3RhdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gcmV2ZXJ0VGVybVRvR2VuZXJpY1R5cGUocmVmZXJlbmNlczogUmVmZXJlbmNlW10sIGFubm90YXRpb246IEFubm90YXRpb25UZXJtPGFueT4pOiBSYXdBbm5vdGF0aW9uIHtcbiAgICBjb25zdCBiYXNlQW5ub3RhdGlvbjogUmF3QW5ub3RhdGlvbiA9IHtcbiAgICAgICAgdGVybTogYW5ub3RhdGlvbi50ZXJtLFxuICAgICAgICBxdWFsaWZpZXI6IGFubm90YXRpb24ucXVhbGlmaWVyXG4gICAgfTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShhbm5vdGF0aW9uKSkge1xuICAgICAgICAvLyBDb2xsZWN0aW9uXG4gICAgICAgIGlmIChhbm5vdGF0aW9uLmhhc093blByb3BlcnR5KCdhbm5vdGF0aW9ucycpICYmIE9iamVjdC5rZXlzKChhbm5vdGF0aW9uIGFzIGFueSkuYW5ub3RhdGlvbnMpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIC8vIEFubm90YXRpb24gb24gYSBjb2xsZWN0aW9uIGl0c2VsZiwgbm90IHN1cmUgd2hlbiB0aGF0IGhhcHBlbnMgaWYgYXQgYWxsXG4gICAgICAgICAgICBiYXNlQW5ub3RhdGlvbi5hbm5vdGF0aW9ucyA9IFtdO1xuICAgICAgICAgICAgcmV2ZXJ0QW5ub3RhdGlvbnNUb1Jhd1R5cGUocmVmZXJlbmNlcywgKGFubm90YXRpb24gYXMgYW55KS5hbm5vdGF0aW9ucywgYmFzZUFubm90YXRpb24uYW5ub3RhdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5iYXNlQW5ub3RhdGlvbixcbiAgICAgICAgICAgIGNvbGxlY3Rpb246IGFubm90YXRpb24ubWFwKChhbm5vKSA9PiByZXZlcnRDb2xsZWN0aW9uSXRlbVRvUmF3VHlwZShyZWZlcmVuY2VzLCBhbm5vKSkgYXMgYW55W11cbiAgICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGFubm90YXRpb24uaGFzT3duUHJvcGVydHkoJyRUeXBlJykpIHtcbiAgICAgICAgcmV0dXJuIHsgLi4uYmFzZUFubm90YXRpb24sIHJlY29yZDogcmV2ZXJ0Q29sbGVjdGlvbkl0ZW1Ub1Jhd1R5cGUocmVmZXJlbmNlcywgYW5ub3RhdGlvbikgYXMgYW55IH07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHsgLi4uYmFzZUFubm90YXRpb24sIHZhbHVlOiByZXZlcnRWYWx1ZVRvUmF3VHlwZShyZWZlcmVuY2VzLCBhbm5vdGF0aW9uKSB9O1xuICAgIH1cbn1cbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5FbnVtSXNGbGFnID0gdm9pZCAwO1xuZXhwb3J0cy5FbnVtSXNGbGFnID0ge1xuICAgIFwiQXV0aG9yaXphdGlvbi5LZXlMb2NhdGlvblwiOiBmYWxzZSxcbiAgICBcIkNvcmUuUmV2aXNpb25LaW5kXCI6IGZhbHNlLFxuICAgIFwiQ29yZS5EYXRhTW9kaWZpY2F0aW9uT3BlcmF0aW9uS2luZFwiOiBmYWxzZSxcbiAgICBcIkNvcmUuUGVybWlzc2lvblwiOiB0cnVlLFxuICAgIFwiQ2FwYWJpbGl0aWVzLkNvbmZvcm1hbmNlTGV2ZWxUeXBlXCI6IGZhbHNlLFxuICAgIFwiQ2FwYWJpbGl0aWVzLklzb2xhdGlvbkxldmVsXCI6IHRydWUsXG4gICAgXCJDYXBhYmlsaXRpZXMuTmF2aWdhdGlvblR5cGVcIjogZmFsc2UsXG4gICAgXCJDYXBhYmlsaXRpZXMuU2VhcmNoRXhwcmVzc2lvbnNcIjogdHJ1ZSxcbiAgICBcIkNhcGFiaWxpdGllcy5IdHRwTWV0aG9kXCI6IHRydWUsXG4gICAgXCJBZ2dyZWdhdGlvbi5Sb2xsdXBUeXBlXCI6IGZhbHNlLFxuICAgIFwiQ29tbW9uLlRleHRGb3JtYXRUeXBlXCI6IGZhbHNlLFxuICAgIFwiQ29tbW9uLkZpbHRlckV4cHJlc3Npb25UeXBlXCI6IGZhbHNlLFxuICAgIFwiQ29tbW9uLkZpZWxkQ29udHJvbFR5cGVcIjogZmFsc2UsXG4gICAgXCJDb21tb24uRWZmZWN0VHlwZVwiOiB0cnVlLFxuICAgIFwiQ29tbXVuaWNhdGlvbi5LaW5kVHlwZVwiOiBmYWxzZSxcbiAgICBcIkNvbW11bmljYXRpb24uQ29udGFjdEluZm9ybWF0aW9uVHlwZVwiOiB0cnVlLFxuICAgIFwiQ29tbXVuaWNhdGlvbi5QaG9uZVR5cGVcIjogdHJ1ZSxcbiAgICBcIkNvbW11bmljYXRpb24uR2VuZGVyVHlwZVwiOiBmYWxzZSxcbiAgICBcIlVJLlZpc3VhbGl6YXRpb25UeXBlXCI6IGZhbHNlLFxuICAgIFwiVUkuQ3JpdGljYWxpdHlUeXBlXCI6IGZhbHNlLFxuICAgIFwiVUkuSW1wcm92ZW1lbnREaXJlY3Rpb25UeXBlXCI6IGZhbHNlLFxuICAgIFwiVUkuVHJlbmRUeXBlXCI6IGZhbHNlLFxuICAgIFwiVUkuQ2hhcnRUeXBlXCI6IGZhbHNlLFxuICAgIFwiVUkuQ2hhcnRBeGlzU2NhbGVCZWhhdmlvclR5cGVcIjogZmFsc2UsXG4gICAgXCJVSS5DaGFydEF4aXNBdXRvU2NhbGVEYXRhU2NvcGVUeXBlXCI6IGZhbHNlLFxuICAgIFwiVUkuQ2hhcnREaW1lbnNpb25Sb2xlVHlwZVwiOiBmYWxzZSxcbiAgICBcIlVJLkNoYXJ0TWVhc3VyZVJvbGVUeXBlXCI6IGZhbHNlLFxuICAgIFwiVUkuU2VsZWN0aW9uUmFuZ2VTaWduVHlwZVwiOiBmYWxzZSxcbiAgICBcIlVJLlNlbGVjdGlvblJhbmdlT3B0aW9uVHlwZVwiOiBmYWxzZSxcbiAgICBcIlVJLlRleHRBcnJhbmdlbWVudFR5cGVcIjogZmFsc2UsXG4gICAgXCJVSS5JbXBvcnRhbmNlVHlwZVwiOiBmYWxzZSxcbiAgICBcIlVJLkNyaXRpY2FsaXR5UmVwcmVzZW50YXRpb25UeXBlXCI6IGZhbHNlLFxuICAgIFwiVUkuT3BlcmF0aW9uR3JvdXBpbmdUeXBlXCI6IGZhbHNlLFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5UZXJtVG9UeXBlcyA9IHZvaWQgMDtcbnZhciBUZXJtVG9UeXBlcztcbihmdW5jdGlvbiAoVGVybVRvVHlwZXMpIHtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5BdXRob3JpemF0aW9uLlYxLlNlY3VyaXR5U2NoZW1lc1wiXSA9IFwiT3JnLk9EYXRhLkF1dGhvcml6YXRpb24uVjEuU2VjdXJpdHlTY2hlbWVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5BdXRob3JpemF0aW9uLlYxLkF1dGhvcml6YXRpb25zXCJdID0gXCJPcmcuT0RhdGEuQXV0aG9yaXphdGlvbi5WMS5BdXRob3JpemF0aW9uXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ29yZS5WMS5SZXZpc2lvbnNcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlJldmlzaW9uVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuTGlua3NcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLkxpbmtcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLkV4YW1wbGVcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLkV4YW1wbGVWYWx1ZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuTWVzc2FnZXNcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLk1lc3NhZ2VUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ29yZS5WMS5WYWx1ZUV4Y2VwdGlvblwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVmFsdWVFeGNlcHRpb25UeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ29yZS5WMS5SZXNvdXJjZUV4Y2VwdGlvblwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuUmVzb3VyY2VFeGNlcHRpb25UeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ29yZS5WMS5EYXRhTW9kaWZpY2F0aW9uRXhjZXB0aW9uXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5EYXRhTW9kaWZpY2F0aW9uRXhjZXB0aW9uVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuSXNMYW5ndWFnZURlcGVuZGVudFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ29yZS5WMS5BcHBsaWVzVmlhQ29udGFpbmVyXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLkRlcmVmZXJlbmNlYWJsZUlEc1wiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ29yZS5WMS5Db252ZW50aW9uYWxJRHNcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuUGVybWlzc2lvbnNcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlBlcm1pc3Npb25cIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLkRlZmF1bHROYW1lc3BhY2VcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuSW1tdXRhYmxlXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLkNvbXB1dGVkXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLkNvbXB1dGVkRGVmYXVsdFZhbHVlXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLklzVVJMXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLklzTWVkaWFUeXBlXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLkNvbnRlbnREaXNwb3NpdGlvblwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuQ29udGVudERpc3Bvc2l0aW9uVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuT3B0aW1pc3RpY0NvbmN1cnJlbmN5XCJdID0gXCJFZG0uUHJvcGVydHlQYXRoXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ29yZS5WMS5BZGRpdGlvbmFsUHJvcGVydGllc1wiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ29yZS5WMS5BdXRvRXhwYW5kXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLkF1dG9FeHBhbmRSZWZlcmVuY2VzXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLk1heUltcGxlbWVudFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuUXVhbGlmaWVkVHlwZU5hbWVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLk9yZGVyZWRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuUG9zaXRpb25hbEluc2VydFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ29yZS5WMS5BbHRlcm5hdGVLZXlzXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5BbHRlcm5hdGVLZXlcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLk9wdGlvbmFsUGFyYW1ldGVyXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5PcHRpb25hbFBhcmFtZXRlclR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLk9wZXJhdGlvbkF2YWlsYWJsZVwiXSA9IFwiRWRtLkJvb2xlYW5cIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLlJlcXVpcmVzRXhwbGljaXRCaW5kaW5nXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLkV4cGxpY2l0T3BlcmF0aW9uQmluZGluZ3NcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlF1YWxpZmllZEJvdW5kT3BlcmF0aW9uTmFtZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuU3ltYm9saWNOYW1lXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5TaW1wbGVJZGVudGlmaWVyXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ29yZS5WMS5HZW9tZXRyeUZlYXR1cmVcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLkdlb21ldHJ5RmVhdHVyZVR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLkFueVN0cnVjdHVyZVwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkNvbmZvcm1hbmNlTGV2ZWxcIl0gPSBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQ29uZm9ybWFuY2VMZXZlbFR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQXN5bmNocm9ub3VzUmVxdWVzdHNTdXBwb3J0ZWRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5CYXRjaENvbnRpbnVlT25FcnJvclN1cHBvcnRlZFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLklzb2xhdGlvblN1cHBvcnRlZFwiXSA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5Jc29sYXRpb25MZXZlbFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5Dcm9zc0pvaW5TdXBwb3J0ZWRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5DYWxsYmFja1N1cHBvcnRlZFwiXSA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5DYWxsYmFja1R5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQ2hhbmdlVHJhY2tpbmdcIl0gPSBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQ2hhbmdlVHJhY2tpbmdUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkNvdW50UmVzdHJpY3Rpb25zXCJdID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkNvdW50UmVzdHJpY3Rpb25zVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zXCJdID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLk5hdmlnYXRpb25SZXN0cmljdGlvbnNUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkluZGV4YWJsZUJ5S2V5XCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuVG9wU3VwcG9ydGVkXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuU2tpcFN1cHBvcnRlZFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkNvbXB1dGVTdXBwb3J0ZWRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5TZWxlY3RTdXBwb3J0XCJdID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLlNlbGVjdFN1cHBvcnRUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkJhdGNoU3VwcG9ydGVkXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQmF0Y2hTdXBwb3J0XCJdID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkJhdGNoU3VwcG9ydFR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuRmlsdGVyUmVzdHJpY3Rpb25zXCJdID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkZpbHRlclJlc3RyaWN0aW9uc1R5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuU29ydFJlc3RyaWN0aW9uc1wiXSA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5Tb3J0UmVzdHJpY3Rpb25zVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5FeHBhbmRSZXN0cmljdGlvbnNcIl0gPSBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuRXhwYW5kUmVzdHJpY3Rpb25zVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5TZWFyY2hSZXN0cmljdGlvbnNcIl0gPSBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuU2VhcmNoUmVzdHJpY3Rpb25zVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5LZXlBc1NlZ21lbnRTdXBwb3J0ZWRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5RdWVyeVNlZ21lbnRTdXBwb3J0ZWRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5JbnNlcnRSZXN0cmljdGlvbnNcIl0gPSBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuSW5zZXJ0UmVzdHJpY3Rpb25zVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5EZWVwSW5zZXJ0U3VwcG9ydFwiXSA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5EZWVwSW5zZXJ0U3VwcG9ydFR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuVXBkYXRlUmVzdHJpY3Rpb25zXCJdID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLlVwZGF0ZVJlc3RyaWN0aW9uc1R5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuRGVlcFVwZGF0ZVN1cHBvcnRcIl0gPSBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuRGVlcFVwZGF0ZVN1cHBvcnRUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkRlbGV0ZVJlc3RyaWN0aW9uc1wiXSA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5EZWxldGVSZXN0cmljdGlvbnNUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkNvbGxlY3Rpb25Qcm9wZXJ0eVJlc3RyaWN0aW9uc1wiXSA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5Db2xsZWN0aW9uUHJvcGVydHlSZXN0cmljdGlvbnNUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLk9wZXJhdGlvblJlc3RyaWN0aW9uc1wiXSA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5PcGVyYXRpb25SZXN0cmljdGlvbnNUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkFubm90YXRpb25WYWx1ZXNJblF1ZXJ5U3VwcG9ydGVkXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuTW9kaWZpY2F0aW9uUXVlcnlPcHRpb25zXCJdID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLk1vZGlmaWNhdGlvblF1ZXJ5T3B0aW9uc1R5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuUmVhZFJlc3RyaWN0aW9uc1wiXSA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5SZWFkUmVzdHJpY3Rpb25zVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5DdXN0b21IZWFkZXJzXCJdID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkN1c3RvbVBhcmFtZXRlclwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5DdXN0b21RdWVyeU9wdGlvbnNcIl0gPSBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQ3VzdG9tUGFyYW1ldGVyXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLk1lZGlhTG9jYXRpb25VcGRhdGVTdXBwb3J0ZWRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkFnZ3JlZ2F0aW9uLlYxLkFwcGx5U3VwcG9ydGVkXCJdID0gXCJPcmcuT0RhdGEuQWdncmVnYXRpb24uVjEuQXBwbHlTdXBwb3J0ZWRUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQWdncmVnYXRpb24uVjEuQXBwbHlTdXBwb3J0ZWREZWZhdWx0c1wiXSA9IFwiT3JnLk9EYXRhLkFnZ3JlZ2F0aW9uLlYxLkFwcGx5U3VwcG9ydGVkQmFzZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkFnZ3JlZ2F0aW9uLlYxLkdyb3VwYWJsZVwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQWdncmVnYXRpb24uVjEuQWdncmVnYXRhYmxlXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5BZ2dyZWdhdGlvbi5WMS5Db250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzXCJdID0gXCJFZG0uUHJvcGVydHlQYXRoXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQWdncmVnYXRpb24uVjEuTGV2ZWxlZEhpZXJhcmNoeVwiXSA9IFwiRWRtLlByb3BlcnR5UGF0aFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkFnZ3JlZ2F0aW9uLlYxLlJlY3Vyc2l2ZUhpZXJhcmNoeVwiXSA9IFwiT3JnLk9EYXRhLkFnZ3JlZ2F0aW9uLlYxLlJlY3Vyc2l2ZUhpZXJhcmNoeVR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5BZ2dyZWdhdGlvbi5WMS5BdmFpbGFibGVPbkFnZ3JlZ2F0ZXNcIl0gPSBcIk9yZy5PRGF0YS5BZ2dyZWdhdGlvbi5WMS5BdmFpbGFibGVPbkFnZ3JlZ2F0ZXNUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5NaW5pbXVtXCJdID0gXCJFZG0uUHJpbWl0aXZlVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuTWF4aW11bVwiXSA9IFwiRWRtLlByaW1pdGl2ZVR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLkV4Y2x1c2l2ZVwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5BbGxvd2VkVmFsdWVzXCJdID0gXCJPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5BbGxvd2VkVmFsdWVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk11bHRpcGxlT2ZcIl0gPSBcIkVkbS5EZWNpbWFsXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5Db25zdHJhaW50XCJdID0gXCJPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5Db25zdHJhaW50VHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuSXRlbXNPZlwiXSA9IFwiT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuSXRlbXNPZlR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk9wZW5Qcm9wZXJ0eVR5cGVDb25zdHJhaW50XCJdID0gXCJPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5TaW5nbGVPckNvbGxlY3Rpb25UeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5EZXJpdmVkVHlwZUNvbnN0cmFpbnRcIl0gPSBcIk9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLlNpbmdsZU9yQ29sbGVjdGlvblR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLkFsbG93ZWRUZXJtc1wiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuUXVhbGlmaWVkVGVybU5hbWVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLkFwcGxpY2FibGVUZXJtc1wiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuUXVhbGlmaWVkVGVybU5hbWVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1heEl0ZW1zXCJdID0gXCJFZG0uSW50NjRcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1pbkl0ZW1zXCJdID0gXCJFZG0uSW50NjRcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5NZWFzdXJlcy5WMS5TY2FsZVwiXSA9IFwiRWRtLkJ5dGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5NZWFzdXJlcy5WMS5EdXJhdGlvbkdyYW51bGFyaXR5XCJdID0gXCJPcmcuT0RhdGEuTWVhc3VyZXMuVjEuRHVyYXRpb25HcmFudWxhcml0eVR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkFuYWx5dGljcy52MS5EaW1lbnNpb25cIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQW5hbHl0aWNzLnYxLk1lYXN1cmVcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQW5hbHl0aWNzLnYxLkFjY3VtdWxhdGl2ZU1lYXN1cmVcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQW5hbHl0aWNzLnYxLlJvbGxlZFVwUHJvcGVydHlDb3VudFwiXSA9IFwiRWRtLkludDE2XCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5BbmFseXRpY3MudjEuUGxhbm5pbmdBY3Rpb25cIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQW5hbHl0aWNzLnYxLkFnZ3JlZ2F0ZWRQcm9wZXJ0aWVzXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5BbmFseXRpY3MudjEuQWdncmVnYXRlZFByb3BlcnR5VHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQW5hbHl0aWNzLnYxLkFnZ3JlZ2F0ZWRQcm9wZXJ0eVwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQW5hbHl0aWNzLnYxLkFnZ3JlZ2F0ZWRQcm9wZXJ0eVR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkFuYWx5dGljcy52MS5BbmFseXRpY2FsQ29udGV4dFwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQW5hbHl0aWNzLnYxLkFuYWx5dGljYWxDb250ZXh0VHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNlcnZpY2VWZXJzaW9uXCJdID0gXCJFZG0uSW50MzJcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TZXJ2aWNlU2NoZW1hVmVyc2lvblwiXSA9IFwiRWRtLkludDMyXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dEZvclwiXSA9IFwiRWRtLlByb3BlcnR5UGF0aFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzTGFuZ3VhZ2VJZGVudGlmaWVyXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0Rm9ybWF0XCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dEZvcm1hdFR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc1RpbWV6b25lXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0RpZ2l0U2VxdWVuY2VcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzVXBwZXJDYXNlXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0N1cnJlbmN5XCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc1VuaXRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlVuaXRTcGVjaWZpY1NjYWxlXCJdID0gXCJFZG0uUHJpbWl0aXZlVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlVuaXRTcGVjaWZpY1ByZWNpc2lvblwiXSA9IFwiRWRtLlByaW1pdGl2ZVR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TZWNvbmRhcnlLZXlcIl0gPSBcIkVkbS5Qcm9wZXJ0eVBhdGhcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5NaW5PY2N1cnNcIl0gPSBcIkVkbS5JbnQ2NFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLk1heE9jY3Vyc1wiXSA9IFwiRWRtLkludDY0XCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuQXNzb2NpYXRpb25FbnRpdHlcIl0gPSBcIkVkbS5OYXZpZ2F0aW9uUHJvcGVydHlQYXRoXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRGVyaXZlZE5hdmlnYXRpb25cIl0gPSBcIkVkbS5OYXZpZ2F0aW9uUHJvcGVydHlQYXRoXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTWFza2VkXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5SZXZlYWxPbkRlbWFuZFwiXSA9IFwiRWRtLkJvb2xlYW5cIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TZW1hbnRpY09iamVjdE1hcHBpbmdcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TZW1hbnRpY09iamVjdE1hcHBpbmdUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNJbnN0YW5jZUFubm90YXRpb25cIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnNcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5GaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25UeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRmllbGRDb250cm9sXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRmllbGRDb250cm9sVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkFwcGxpY2F0aW9uXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuQXBwbGljYXRpb25UeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGltZXN0YW1wXCJdID0gXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5FcnJvclJlc29sdXRpb25cIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5FcnJvclJlc29sdXRpb25UeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTWVzc2FnZXNcIl0gPSBcIkVkbS5Db21wbGV4VHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLm51bWVyaWNTZXZlcml0eVwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLk51bWVyaWNNZXNzYWdlU2V2ZXJpdHlUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTWF4aW11bU51bWVyaWNNZXNzYWdlU2V2ZXJpdHlcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5OdW1lcmljTWVzc2FnZVNldmVyaXR5VHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzQWN0aW9uQ3JpdGljYWxcIl0gPSBcIkVkbS5Cb29sZWFuXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuQXR0cmlidXRlc1wiXSA9IFwiRWRtLlByb3BlcnR5UGF0aFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlJlbGF0ZWRSZWN1cnNpdmVIaWVyYXJjaHlcIl0gPSBcIkVkbS5Bbm5vdGF0aW9uUGF0aFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkludGVydmFsXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSW50ZXJ2YWxUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuUmVzdWx0Q29udGV4dFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU0FQT2JqZWN0Tm9kZVR5cGVcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TQVBPYmplY3ROb2RlVHlwZVR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Db21wb3NpdGlvblwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNOYXR1cmFsUGVyc29uXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0UmVsZXZhbnRRdWFsaWZpZXJzXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5TaW1wbGVJZGVudGlmaWVyXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RTaG93VmFsdWVzSW1tZWRpYXRlbHlcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdE1hcHBpbmdcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RNYXBwaW5nVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzQ2FsZW5kYXJZZWFyXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0NhbGVuZGFySGFsZnllYXJcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzQ2FsZW5kYXJRdWFydGVyXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0NhbGVuZGFyTW9udGhcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzQ2FsZW5kYXJXZWVrXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0RheU9mQ2FsZW5kYXJNb250aFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNEYXlPZkNhbGVuZGFyWWVhclwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNDYWxlbmRhclllYXJIYWxmeWVhclwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNDYWxlbmRhclllYXJRdWFydGVyXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0NhbGVuZGFyWWVhck1vbnRoXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0NhbGVuZGFyWWVhcldlZWtcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzQ2FsZW5kYXJEYXRlXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0Zpc2NhbFllYXJcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzRmlzY2FsUGVyaW9kXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0Zpc2NhbFllYXJQZXJpb2RcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzRmlzY2FsUXVhcnRlclwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNGaXNjYWxZZWFyUXVhcnRlclwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNGaXNjYWxXZWVrXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0Zpc2NhbFllYXJXZWVrXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0RheU9mRmlzY2FsWWVhclwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNGaXNjYWxZZWFyVmFyaWFudFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTXV0dWFsbHlFeGNsdXNpdmVUZXJtXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdFJvb3RcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdFJvb3RUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnROb2RlXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnROb2RlVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0QWN0aXZhdGlvblZpYVwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuU2ltcGxlSWRlbnRpZmllclwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkVkaXRhYmxlRmllbGRGb3JcIl0gPSBcIkVkbS5Qcm9wZXJ0eVBhdGhcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TZW1hbnRpY0tleVwiXSA9IFwiRWRtLlByb3BlcnR5UGF0aFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNpZGVFZmZlY3RzXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU2lkZUVmZmVjdHNUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRGVmYXVsdFZhbHVlc0Z1bmN0aW9uXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuUXVhbGlmaWVkTmFtZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkZpbHRlckRlZmF1bHRWYWx1ZVwiXSA9IFwiRWRtLlByaW1pdGl2ZVR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5GaWx0ZXJEZWZhdWx0VmFsdWVIaWdoXCJdID0gXCJFZG0uUHJpbWl0aXZlVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNvcnRPcmRlclwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNvcnRPcmRlclR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5SZWN1cnNpdmVIaWVyYXJjaHlcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5SZWN1cnNpdmVIaWVyYXJjaHlUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuQ3JlYXRlZEF0XCJdID0gXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5DcmVhdGVkQnlcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Vc2VySURcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5DaGFuZ2VkQXRcIl0gPSBcIkVkbS5EYXRlVGltZU9mZnNldFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkNoYW5nZWRCeVwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlVzZXJJRFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkFwcGx5TXVsdGlVbml0QmVoYXZpb3JGb3JTb3J0aW5nQW5kRmlsdGVyaW5nXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5QcmltaXRpdmVQcm9wZXJ0eVBhdGhcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29kZUxpc3QudjEuQ3VycmVuY3lDb2Rlc1wiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29kZUxpc3QudjEuQ29kZUxpc3RTb3VyY2VcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvZGVMaXN0LnYxLlVuaXRzT2ZNZWFzdXJlXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db2RlTGlzdC52MS5Db2RlTGlzdFNvdXJjZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29kZUxpc3QudjEuU3RhbmRhcmRDb2RlXCJdID0gXCJFZG0uUHJvcGVydHlQYXRoXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db2RlTGlzdC52MS5FeHRlcm5hbENvZGVcIl0gPSBcIkVkbS5Qcm9wZXJ0eVBhdGhcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvZGVMaXN0LnYxLklzQ29uZmlndXJhdGlvbkRlcHJlY2F0aW9uQ29kZVwiXSA9IFwiRWRtLkJvb2xlYW5cIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW11bmljYXRpb24udjEuQ29udGFjdFwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbXVuaWNhdGlvbi52MS5Db250YWN0VHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbXVuaWNhdGlvbi52MS5BZGRyZXNzXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tdW5pY2F0aW9uLnYxLkFkZHJlc3NUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tdW5pY2F0aW9uLnYxLklzRW1haWxBZGRyZXNzXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW11bmljYXRpb24udjEuSXNQaG9uZU51bWJlclwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tdW5pY2F0aW9uLnYxLkV2ZW50XCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tdW5pY2F0aW9uLnYxLkV2ZW50RGF0YVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbXVuaWNhdGlvbi52MS5UYXNrXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tdW5pY2F0aW9uLnYxLlRhc2tEYXRhXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tdW5pY2F0aW9uLnYxLk1lc3NhZ2VcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW11bmljYXRpb24udjEuTWVzc2FnZURhdGFcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkhpZXJhcmNoeS52MS5SZWN1cnNpdmVIaWVyYXJjaHlcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkhpZXJhcmNoeS52MS5SZWN1cnNpdmVIaWVyYXJjaHlUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5IaWVyYXJjaHkudjEuUmVjdXJzaXZlSGllcmFyY2h5QWN0aW9uc1wiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuSGllcmFyY2h5LnYxLlJlY3Vyc2l2ZUhpZXJhcmNoeUFjdGlvbnNUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5IaWVyYXJjaHkudjEuTWF0Y2hDb3VudFwiXSA9IFwiRWRtLkludDY0XCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5IaWVyYXJjaHkudjEuUmVjdXJzaXZlSGllcmFyY2h5U3VwcG9ydGVkXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlBlcnNvbmFsRGF0YS52MS5FbnRpdHlTZW1hbnRpY3NcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlBlcnNvbmFsRGF0YS52MS5FbnRpdHlTZW1hbnRpY3NUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5QZXJzb25hbERhdGEudjEuRmllbGRTZW1hbnRpY3NcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlBlcnNvbmFsRGF0YS52MS5GaWVsZFNlbWFudGljc1R5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlBlcnNvbmFsRGF0YS52MS5Jc1BvdGVudGlhbGx5UGVyc29uYWxcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuUGVyc29uYWxEYXRhLnYxLklzUG90ZW50aWFsbHlTZW5zaXRpdmVcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuU2Vzc2lvbi52MS5TdGlja3lTZXNzaW9uU3VwcG9ydGVkXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5TZXNzaW9uLnYxLlN0aWNreVNlc3Npb25TdXBwb3J0ZWRUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IZWFkZXJJbmZvXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IZWFkZXJJbmZvVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSWRlbnRpZmljYXRpb25cIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEFic3RyYWN0XCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5CYWRnZVwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQmFkZ2VUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5MaW5lSXRlbVwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkQWJzdHJhY3RcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlN0YXR1c0luZm9cIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEFic3RyYWN0XCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5GaWVsZEdyb3VwXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5GaWVsZEdyb3VwVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ29ubmVjdGVkRmllbGRzXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5Db25uZWN0ZWRGaWVsZHNUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5HZW9Mb2NhdGlvbnNcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkdlb0xvY2F0aW9uVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuR2VvTG9jYXRpb25cIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkdlb0xvY2F0aW9uVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ29udGFjdHNcIl0gPSBcIkVkbS5Bbm5vdGF0aW9uUGF0aFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuTWVkaWFSZXNvdXJjZVwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuTWVkaWFSZXNvdXJjZVR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFQb2ludFwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YVBvaW50VHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuS1BJXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5LUElUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5DaGFydFwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ2hhcnREZWZpbml0aW9uVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVmFsdWVDcml0aWNhbGl0eVwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVmFsdWVDcml0aWNhbGl0eVR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNyaXRpY2FsaXR5TGFiZWxzXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5Dcml0aWNhbGl0eUxhYmVsVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuU2VsZWN0aW9uRmllbGRzXCJdID0gXCJFZG0uUHJvcGVydHlQYXRoXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5GYWNldHNcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkZhY2V0XCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IZWFkZXJGYWNldHNcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkZhY2V0XCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5RdWlja1ZpZXdGYWNldHNcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkZhY2V0XCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5RdWlja0NyZWF0ZUZhY2V0c1wiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRmFjZXRcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkZpbHRlckZhY2V0c1wiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuUmVmZXJlbmNlRmFjZXRcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5QcmVzZW50YXRpb25WYXJpYW50XCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5QcmVzZW50YXRpb25WYXJpYW50VHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuU2VsZWN0aW9uVmFyaWFudFwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuU2VsZWN0aW9uVmFyaWFudFR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlRoaW5nUGVyc3BlY3RpdmVcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSXNTdW1tYXJ5XCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlBhcnRPZlByZXZpZXdcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuTWFwXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkdhbGxlcnlcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSXNJbWFnZVVSTFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5Jc0ltYWdlXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLk11bHRpTGluZVRleHRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50XCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5Ob3RlXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5Ob3RlVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSW1wb3J0YW5jZVwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSW1wb3J0YW5jZVR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhpZGRlblwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5Jc0NvcHlBY3Rpb25cIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ3JlYXRlSGlkZGVuXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlVwZGF0ZUhpZGRlblwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EZWxldGVIaWRkZW5cIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGlkZGVuRmlsdGVyXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkFkYXB0YXRpb25IaWRkZW5cIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRGVmYXVsdFwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkQWJzdHJhY3RcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNyaXRpY2FsaXR5XCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5Dcml0aWNhbGl0eVR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNyaXRpY2FsaXR5Q2FsY3VsYXRpb25cIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNyaXRpY2FsaXR5Q2FsY3VsYXRpb25UeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5FbXBoYXNpemVkXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLk9yZGVyQnlcIl0gPSBcIkVkbS5Qcm9wZXJ0eVBhdGhcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlBhcmFtZXRlckRlZmF1bHRWYWx1ZVwiXSA9IFwiRWRtLlByaW1pdGl2ZVR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlJlY29tbWVuZGF0aW9uU3RhdGVcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlJlY29tbWVuZGF0aW9uU3RhdGVUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5SZWNvbW1lbmRhdGlvbkxpc3RcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlJlY29tbWVuZGF0aW9uTGlzdFR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkV4Y2x1ZGVGcm9tTmF2aWdhdGlvbkNvbnRleHRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRG9Ob3RDaGVja1NjYWxlT2ZNZWFzdXJlZFF1YW50aXR5XCJdID0gXCJFZG0uQm9vbGVhblwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuSFRNTDUudjEuQ3NzRGVmYXVsdHNcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkhUTUw1LnYxLkNzc0RlZmF1bHRzVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuSFRNTDUudjEuTGlua1RhcmdldFwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuSFRNTDUudjEuTGlua1RhcmdldFR5cGVcIjtcbn0pKFRlcm1Ub1R5cGVzID0gZXhwb3J0cy5UZXJtVG9UeXBlcyB8fCAoZXhwb3J0cy5UZXJtVG9UeXBlcyA9IHt9KSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuVm9jYWJ1bGFyeVJlZmVyZW5jZXMgPSB2b2lkIDA7XG4vKipcbiAqIFRoZSBsaXN0IG9mIHZvY2FidWxhcmllcyB3aXRoIGRlZmF1bHQgYWxpYXNlcy5cbiAqL1xuZXhwb3J0cy5Wb2NhYnVsYXJ5UmVmZXJlbmNlcyA9IFtcbiAgICB7IGFsaWFzOiBcIkF1dGhvcml6YXRpb25cIiwgbmFtZXNwYWNlOiBcIk9yZy5PRGF0YS5BdXRob3JpemF0aW9uLlYxXCIsIHVyaTogXCJodHRwczovL29hc2lzLXRjcy5naXRodWIuaW8vb2RhdGEtdm9jYWJ1bGFyaWVzL3ZvY2FidWxhcmllcy9PcmcuT0RhdGEuQXV0aG9yaXphdGlvbi5WMS54bWxcIiB9LFxuICAgIHsgYWxpYXM6IFwiQ29yZVwiLCBuYW1lc3BhY2U6IFwiT3JnLk9EYXRhLkNvcmUuVjFcIiwgdXJpOiBcImh0dHBzOi8vb2FzaXMtdGNzLmdpdGh1Yi5pby9vZGF0YS12b2NhYnVsYXJpZXMvdm9jYWJ1bGFyaWVzL09yZy5PRGF0YS5Db3JlLlYxLnhtbFwiIH0sXG4gICAgeyBhbGlhczogXCJDYXBhYmlsaXRpZXNcIiwgbmFtZXNwYWNlOiBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjFcIiwgdXJpOiBcImh0dHBzOi8vb2FzaXMtdGNzLmdpdGh1Yi5pby9vZGF0YS12b2NhYnVsYXJpZXMvdm9jYWJ1bGFyaWVzL09yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEueG1sXCIgfSxcbiAgICB7IGFsaWFzOiBcIkFnZ3JlZ2F0aW9uXCIsIG5hbWVzcGFjZTogXCJPcmcuT0RhdGEuQWdncmVnYXRpb24uVjFcIiwgdXJpOiBcImh0dHBzOi8vb2FzaXMtdGNzLmdpdGh1Yi5pby9vZGF0YS12b2NhYnVsYXJpZXMvdm9jYWJ1bGFyaWVzL09yZy5PRGF0YS5BZ2dyZWdhdGlvbi5WMS54bWxcIiB9LFxuICAgIHsgYWxpYXM6IFwiVmFsaWRhdGlvblwiLCBuYW1lc3BhY2U6IFwiT3JnLk9EYXRhLlZhbGlkYXRpb24uVjFcIiwgdXJpOiBcImh0dHBzOi8vb2FzaXMtdGNzLmdpdGh1Yi5pby9vZGF0YS12b2NhYnVsYXJpZXMvdm9jYWJ1bGFyaWVzL09yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLnhtbFwiIH0sXG4gICAgeyBhbGlhczogXCJNZWFzdXJlc1wiLCBuYW1lc3BhY2U6IFwiT3JnLk9EYXRhLk1lYXN1cmVzLlYxXCIsIHVyaTogXCJodHRwczovL29hc2lzLXRjcy5naXRodWIuaW8vb2RhdGEtdm9jYWJ1bGFyaWVzL3ZvY2FidWxhcmllcy9PcmcuT0RhdGEuTWVhc3VyZXMuVjEueG1sXCIgfSxcbiAgICB7IGFsaWFzOiBcIkFuYWx5dGljc1wiLCBuYW1lc3BhY2U6IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQW5hbHl0aWNzLnYxXCIsIHVyaTogXCJodHRwczovL3NhcC5naXRodWIuaW8vb2RhdGEtdm9jYWJ1bGFyaWVzL3ZvY2FidWxhcmllcy9BbmFseXRpY3MueG1sXCIgfSxcbiAgICB7IGFsaWFzOiBcIkNvbW1vblwiLCBuYW1lc3BhY2U6IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxXCIsIHVyaTogXCJodHRwczovL3NhcC5naXRodWIuaW8vb2RhdGEtdm9jYWJ1bGFyaWVzL3ZvY2FidWxhcmllcy9Db21tb24ueG1sXCIgfSxcbiAgICB7IGFsaWFzOiBcIkNvZGVMaXN0XCIsIG5hbWVzcGFjZTogXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db2RlTGlzdC52MVwiLCB1cmk6IFwiaHR0cHM6Ly9zYXAuZ2l0aHViLmlvL29kYXRhLXZvY2FidWxhcmllcy92b2NhYnVsYXJpZXMvQ29kZUxpc3QueG1sXCIgfSxcbiAgICB7IGFsaWFzOiBcIkNvbW11bmljYXRpb25cIiwgbmFtZXNwYWNlOiBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW11bmljYXRpb24udjFcIiwgdXJpOiBcImh0dHBzOi8vc2FwLmdpdGh1Yi5pby9vZGF0YS12b2NhYnVsYXJpZXMvdm9jYWJ1bGFyaWVzL0NvbW11bmljYXRpb24ueG1sXCIgfSxcbiAgICB7IGFsaWFzOiBcIkhpZXJhcmNoeVwiLCBuYW1lc3BhY2U6IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuSGllcmFyY2h5LnYxXCIsIHVyaTogXCJodHRwczovL3NhcC5naXRodWIuaW8vb2RhdGEtdm9jYWJ1bGFyaWVzL3ZvY2FidWxhcmllcy9IaWVyYXJjaHkueG1sXCIgfSxcbiAgICB7IGFsaWFzOiBcIlBlcnNvbmFsRGF0YVwiLCBuYW1lc3BhY2U6IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuUGVyc29uYWxEYXRhLnYxXCIsIHVyaTogXCJodHRwczovL3NhcC5naXRodWIuaW8vb2RhdGEtdm9jYWJ1bGFyaWVzL3ZvY2FidWxhcmllcy9QZXJzb25hbERhdGEueG1sXCIgfSxcbiAgICB7IGFsaWFzOiBcIlNlc3Npb25cIiwgbmFtZXNwYWNlOiBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlNlc3Npb24udjFcIiwgdXJpOiBcImh0dHBzOi8vc2FwLmdpdGh1Yi5pby9vZGF0YS12b2NhYnVsYXJpZXMvdm9jYWJ1bGFyaWVzL1Nlc3Npb24ueG1sXCIgfSxcbiAgICB7IGFsaWFzOiBcIlVJXCIsIG5hbWVzcGFjZTogXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MVwiLCB1cmk6IFwiaHR0cHM6Ly9zYXAuZ2l0aHViLmlvL29kYXRhLXZvY2FidWxhcmllcy92b2NhYnVsYXJpZXMvVUkueG1sXCIgfSxcbiAgICB7IGFsaWFzOiBcIkhUTUw1XCIsIG5hbWVzcGFjZTogXCJjb20uc2FwLnZvY2FidWxhcmllcy5IVE1MNS52MVwiLCB1cmk6IFwiaHR0cHM6Ly9zYXAuZ2l0aHViLmlvL29kYXRhLXZvY2FidWxhcmllcy92b2NhYnVsYXJpZXMvSFRNTDUueG1sXCIgfVxuXTtcbiIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIiLCIvLyBzdGFydHVwXG4vLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8vIFRoaXMgZW50cnkgbW9kdWxlIGlzIHJlZmVyZW5jZWQgYnkgb3RoZXIgbW9kdWxlcyBzbyBpdCBjYW4ndCBiZSBpbmxpbmVkXG52YXIgX193ZWJwYWNrX2V4cG9ydHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjMyKTtcbiIsIiJdfQ==