@sapui5/sap.fe.core 1.141.2 → 1.142.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (207) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/core/.library +4 -1
  3. package/src/sap/fe/core/ActionRuntime.js +48 -23
  4. package/src/sap/fe/core/ActionRuntime.ts +61 -35
  5. package/src/sap/fe/core/AppComponent.js +76 -6
  6. package/src/sap/fe/core/AppComponent.ts +94 -8
  7. package/src/sap/fe/core/AppStateHandler.js +9 -8
  8. package/src/sap/fe/core/AppStateHandler.ts +13 -9
  9. package/src/sap/fe/core/BaseController.js +8 -5
  10. package/src/sap/fe/core/BaseController.ts +6 -1
  11. package/src/sap/fe/core/CommonUtils.js +4 -123
  12. package/src/sap/fe/core/CommonUtils.ts +3 -172
  13. package/src/sap/fe/core/ExtensionAPI.js +3 -10
  14. package/src/sap/fe/core/ExtensionAPI.ts +2 -14
  15. package/src/sap/fe/core/PageController.js +64 -43
  16. package/src/sap/fe/core/PageController.ts +62 -47
  17. package/src/sap/fe/core/TemplateComponent.js +20 -1
  18. package/src/sap/fe/core/TemplateComponent.ts +24 -2
  19. package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +37 -24
  20. package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +47 -31
  21. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.js +1 -1
  22. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.ts +4 -0
  23. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +4 -1
  24. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +3 -0
  25. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.js +4 -1
  26. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.ts +4 -0
  27. package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +7 -5
  28. package/src/sap/fe/core/controllerextensions/BaseControllerExtension.ts +22 -2
  29. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.js +82 -39
  30. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +91 -54
  31. package/src/sap/fe/core/controllerextensions/EditFlow.js +25 -3
  32. package/src/sap/fe/core/controllerextensions/EditFlow.ts +27 -3
  33. package/src/sap/fe/core/controllerextensions/InlineEditFlow.js +9 -7
  34. package/src/sap/fe/core/controllerextensions/InlineEditFlow.ts +17 -5
  35. package/src/sap/fe/core/controllerextensions/InternalRouting.js +37 -18
  36. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +49 -17
  37. package/src/sap/fe/core/controllerextensions/KPIManagement.js +30 -15
  38. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +32 -14
  39. package/src/sap/fe/core/controllerextensions/MessageHandler.js +9 -10
  40. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +8 -9
  41. package/src/sap/fe/core/controllerextensions/Paginator.js +2 -2
  42. package/src/sap/fe/core/controllerextensions/Paginator.ts +1 -1
  43. package/src/sap/fe/core/controllerextensions/Placeholder.js +10 -2
  44. package/src/sap/fe/core/controllerextensions/Placeholder.ts +5 -1
  45. package/src/sap/fe/core/controllerextensions/Recommendations.js +3 -3
  46. package/src/sap/fe/core/controllerextensions/Recommendations.ts +2 -2
  47. package/src/sap/fe/core/controllerextensions/Routing.js +9 -5
  48. package/src/sap/fe/core/controllerextensions/Routing.ts +7 -7
  49. package/src/sap/fe/core/controllerextensions/Share.js +5 -5
  50. package/src/sap/fe/core/controllerextensions/Share.ts +4 -4
  51. package/src/sap/fe/core/controllerextensions/SideEffects.js +1 -1
  52. package/src/sap/fe/core/controllerextensions/SideEffects.ts +17 -2
  53. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +2 -2
  54. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +1 -1
  55. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +3 -3
  56. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.tsx +3 -2
  57. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +33 -11
  58. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +45 -14
  59. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +37 -3
  60. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +41 -8
  61. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +10 -4
  62. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +6 -1
  63. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.js +7 -7
  64. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.ts +6 -5
  65. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.js +2 -2
  66. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.ts +1 -1
  67. package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.js +2 -1
  68. package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.ts +1 -0
  69. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +10 -6
  70. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +6 -5
  71. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +11 -9
  72. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +22 -9
  73. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.js +9 -4
  74. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.tsx +10 -4
  75. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.js +31 -2
  76. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.tsx +34 -1
  77. package/src/sap/fe/core/converters/ManifestSettings.js +7 -1
  78. package/src/sap/fe/core/converters/ManifestSettings.ts +37 -0
  79. package/src/sap/fe/core/converters/ManifestWrapper.js +29 -9
  80. package/src/sap/fe/core/converters/ManifestWrapper.ts +29 -11
  81. package/src/sap/fe/core/converters/annotations/DataField.js +46 -19
  82. package/src/sap/fe/core/converters/annotations/DataField.ts +93 -19
  83. package/src/sap/fe/core/converters/common/AnnotationConverter.js +88 -35
  84. package/src/sap/fe/core/converters/controls/Common/Action.js +57 -20
  85. package/src/sap/fe/core/converters/controls/Common/Action.ts +71 -21
  86. package/src/sap/fe/core/converters/controls/Common/Chart.js +13 -3
  87. package/src/sap/fe/core/converters/controls/Common/Chart.ts +20 -4
  88. package/src/sap/fe/core/converters/controls/Common/Form.js +18 -3
  89. package/src/sap/fe/core/converters/controls/Common/Form.ts +23 -1
  90. package/src/sap/fe/core/converters/controls/Common/Table.js +89 -57
  91. package/src/sap/fe/core/converters/controls/Common/Table.ts +110 -56
  92. package/src/sap/fe/core/converters/controls/Common/filter/FilterRestrictions.js +243 -0
  93. package/src/sap/fe/core/converters/controls/Common/filter/FilterRestrictions.ts +309 -0
  94. package/src/sap/fe/core/converters/controls/Common/table/Columns.js +142 -58
  95. package/src/sap/fe/core/converters/controls/Common/table/Columns.ts +172 -78
  96. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +12 -18
  97. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +13 -27
  98. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +7 -16
  99. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +6 -17
  100. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +16 -5
  101. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +16 -5
  102. package/src/sap/fe/core/converters/helpers/Aggregation.js +12 -2
  103. package/src/sap/fe/core/converters/helpers/Aggregation.ts +11 -1
  104. package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +27 -3
  105. package/src/sap/fe/core/converters/helpers/DataFieldHelper.ts +28 -1
  106. package/src/sap/fe/core/converters/helpers/ID.js +3 -1
  107. package/src/sap/fe/core/converters/helpers/ID.ts +1 -0
  108. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +5 -2
  109. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +7 -1
  110. package/src/sap/fe/core/converters/templates/ListReportConverter.js +11 -3
  111. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +12 -4
  112. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +19 -8
  113. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +18 -7
  114. package/src/sap/fe/core/designtime/AnnotationBasedChanges.js +8 -3
  115. package/src/sap/fe/core/designtime/AnnotationBasedChanges.ts +7 -2
  116. package/src/sap/fe/core/formatters/FPMFormatter.js +2 -2
  117. package/src/sap/fe/core/formatters/FPMFormatter.ts +1 -1
  118. package/src/sap/fe/core/fpm/Component.js +8 -1
  119. package/src/sap/fe/core/fpm/Component.ts +8 -0
  120. package/src/sap/fe/core/fpm/manifest.json +1 -1
  121. package/src/sap/fe/core/helpers/AppStartupHelper.js +79 -25
  122. package/src/sap/fe/core/helpers/AppStartupHelper.ts +91 -32
  123. package/src/sap/fe/core/helpers/ManifestHelper.js +6 -3
  124. package/src/sap/fe/core/helpers/ManifestHelper.ts +3 -0
  125. package/src/sap/fe/core/helpers/MetaModelFunction.js +12 -3
  126. package/src/sap/fe/core/helpers/MetaModelFunction.ts +11 -3
  127. package/src/sap/fe/core/helpers/ModelHelper.js +48 -9
  128. package/src/sap/fe/core/helpers/ModelHelper.ts +55 -10
  129. package/src/sap/fe/core/helpers/TypeGuards.js +12 -2
  130. package/src/sap/fe/core/helpers/TypeGuards.ts +10 -1
  131. package/src/sap/fe/core/helpers/WebSocket.js +6 -7
  132. package/src/sap/fe/core/helpers/WebSocket.ts +10 -6
  133. package/src/sap/fe/core/library.js +30 -3
  134. package/src/sap/fe/core/library.ts +28 -1
  135. package/src/sap/fe/core/messagebundle.properties +8 -1
  136. package/src/sap/fe/core/messagebundle_ar.properties +7 -0
  137. package/src/sap/fe/core/messagebundle_bg.properties +10 -3
  138. package/src/sap/fe/core/messagebundle_ca.properties +7 -0
  139. package/src/sap/fe/core/messagebundle_cnr.properties +7 -0
  140. package/src/sap/fe/core/messagebundle_cs.properties +7 -0
  141. package/src/sap/fe/core/messagebundle_cy.properties +8 -1
  142. package/src/sap/fe/core/messagebundle_da.properties +7 -0
  143. package/src/sap/fe/core/messagebundle_de.properties +7 -0
  144. package/src/sap/fe/core/messagebundle_el.properties +7 -0
  145. package/src/sap/fe/core/messagebundle_en.properties +8 -1
  146. package/src/sap/fe/core/messagebundle_en_GB.properties +7 -0
  147. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +5 -0
  148. package/src/sap/fe/core/messagebundle_es.properties +8 -1
  149. package/src/sap/fe/core/messagebundle_es_MX.properties +7 -0
  150. package/src/sap/fe/core/messagebundle_et.properties +7 -0
  151. package/src/sap/fe/core/messagebundle_fi.properties +7 -0
  152. package/src/sap/fe/core/messagebundle_fr.properties +16 -9
  153. package/src/sap/fe/core/messagebundle_fr_CA.properties +7 -0
  154. package/src/sap/fe/core/messagebundle_hi.properties +8 -1
  155. package/src/sap/fe/core/messagebundle_hr.properties +7 -0
  156. package/src/sap/fe/core/messagebundle_hu.properties +7 -0
  157. package/src/sap/fe/core/messagebundle_id.properties +7 -0
  158. package/src/sap/fe/core/messagebundle_it.properties +7 -0
  159. package/src/sap/fe/core/messagebundle_iw.properties +7 -0
  160. package/src/sap/fe/core/messagebundle_ja.properties +8 -1
  161. package/src/sap/fe/core/messagebundle_kk.properties +7 -0
  162. package/src/sap/fe/core/messagebundle_ko.properties +7 -0
  163. package/src/sap/fe/core/messagebundle_lt.properties +7 -0
  164. package/src/sap/fe/core/messagebundle_lv.properties +7 -0
  165. package/src/sap/fe/core/messagebundle_mk.properties +7 -0
  166. package/src/sap/fe/core/messagebundle_ms.properties +7 -0
  167. package/src/sap/fe/core/messagebundle_nl.properties +7 -0
  168. package/src/sap/fe/core/messagebundle_no.properties +7 -0
  169. package/src/sap/fe/core/messagebundle_pl.properties +7 -0
  170. package/src/sap/fe/core/messagebundle_pt.properties +7 -0
  171. package/src/sap/fe/core/messagebundle_pt_PT.properties +7 -0
  172. package/src/sap/fe/core/messagebundle_ro.properties +7 -0
  173. package/src/sap/fe/core/messagebundle_ru.properties +7 -0
  174. package/src/sap/fe/core/messagebundle_sh.properties +7 -0
  175. package/src/sap/fe/core/messagebundle_sk.properties +7 -0
  176. package/src/sap/fe/core/messagebundle_sl.properties +7 -0
  177. package/src/sap/fe/core/messagebundle_sr.properties +7 -0
  178. package/src/sap/fe/core/messagebundle_sv.properties +7 -0
  179. package/src/sap/fe/core/messagebundle_th.properties +7 -0
  180. package/src/sap/fe/core/messagebundle_tr.properties +7 -0
  181. package/src/sap/fe/core/messagebundle_uk.properties +7 -0
  182. package/src/sap/fe/core/messagebundle_vi.properties +7 -0
  183. package/src/sap/fe/core/messagebundle_zh_CN.properties +8 -1
  184. package/src/sap/fe/core/messagebundle_zh_TW.properties +7 -0
  185. package/src/sap/fe/core/rootView/Fcl.controller.js +21 -7
  186. package/src/sap/fe/core/rootView/Fcl.controller.ts +28 -6
  187. package/src/sap/fe/core/rootView/RootViewBaseController.js +96 -88
  188. package/src/sap/fe/core/rootView/RootViewBaseController.ts +106 -96
  189. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +14 -10
  190. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +15 -10
  191. package/src/sap/fe/core/services/RoutingServiceFactory.js +16 -7
  192. package/src/sap/fe/core/services/RoutingServiceFactory.ts +23 -10
  193. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +9 -7
  194. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +13 -8
  195. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +62 -6
  196. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +74 -11
  197. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +33 -15
  198. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.ts +31 -11
  199. package/src/sap/fe/core/templating/DisplayModeFormatter.js +4 -5
  200. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +4 -6
  201. package/src/sap/fe/core/templating/UIFormatters.js +17 -2
  202. package/src/sap/fe/core/templating/UIFormatters.ts +25 -1
  203. package/src/sap/fe/core/types/sap.fe.core-auto-ext.d.js +10 -0
  204. package/src/sap/fe/core/types/sap.fe.core-auto-ext.d.ts +369 -0
  205. package/src/sap/fe/core/types/sap.fe.core-manual-ext.d.js +9 -0
  206. package/src/sap/fe/core/types/sap.fe.core-manual-ext.d.ts +49 -0
  207. package/ui5.yaml +2 -0
@@ -2,7 +2,7 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * (c) Copyright 2009-2025 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["sap/fe/core/converters/controls/Common/DataVisualization", "sap/fe/core/converters/controls/Common/Table", "sap/fe/core/converters/controls/Common/table/Columns", "sap/fe/core/converters/controls/ListReport/FilterField", "sap/fe/core/converters/controls/ListReport/VisualFilters", "sap/fe/core/converters/helpers/ConfigurableObject", "sap/fe/core/converters/helpers/IssueManager", "sap/fe/core/converters/helpers/Key", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/helpers/TypeGuards", "sap/fe/core/templating/DataModelPathHelper", "sap/fe/core/templating/PropertyHelper", "sap/m/library"], function (DataVisualization, Table, Columns, FilterField, VisualFilters, ConfigurableObject, IssueManager, Key, ModelHelper, TypeGuards, DataModelPathHelper, PropertyHelper, library) {
5
+ sap.ui.define(["sap/fe/core/converters/controls/Common/DataVisualization", "sap/fe/core/converters/controls/Common/Table", "sap/fe/core/converters/controls/Common/table/Columns", "sap/fe/core/converters/controls/ListReport/FilterField", "sap/fe/core/converters/controls/ListReport/VisualFilters", "sap/fe/core/converters/helpers/ConfigurableObject", "sap/fe/core/converters/helpers/IssueManager", "sap/fe/core/converters/helpers/Key", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/helpers/TypeGuards", "sap/fe/core/templating/DataModelPathHelper", "sap/fe/core/templating/PropertyHelper", "sap/m/library", "../Common/filter/FilterRestrictions"], function (DataVisualization, Table, Columns, FilterField, VisualFilters, ConfigurableObject, IssueManager, Key, ModelHelper, TypeGuards, DataModelPathHelper, PropertyHelper, library, fetchFilterRestrictions) {
6
6
  "use strict";
7
7
 
8
8
  var _exports = {};
@@ -658,23 +658,14 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/DataVisualization", "sap/
658
658
  };
659
659
  }
660
660
  });
661
-
662
- // filterRestrictions
663
- const entitySet = converterContext.getEntitySet();
664
- const oFilterRestrictions = isEntitySet(entitySet) ? entitySet.annotations.Capabilities?.FilterRestrictions : undefined;
665
661
  const oRet = {};
666
- oRet.RequiredProperties = getFilterRestrictions(oFilterRestrictions, "RequiredProperties") || [];
667
- oRet.NonFilterableProperties = getFilterRestrictions(oFilterRestrictions, "NonFilterableProperties") || [];
668
662
  const sEntitySetPath = converterContext.getContextPath();
669
- const aPathParts = sEntitySetPath.split("/");
670
- if (aPathParts.length > 2) {
671
- const sNavigationPath = aPathParts[aPathParts.length - 1];
672
- aPathParts.splice(-1, 1);
673
- const oNavigationRestrictions = getNavigationRestrictions(converterContext, sNavigationPath);
674
- const oNavigationFilterRestrictions = oNavigationRestrictions && oNavigationRestrictions.FilterRestrictions;
675
- oRet.RequiredProperties = oRet.RequiredProperties.concat(getFilterRestrictions(oNavigationFilterRestrictions, "RequiredProperties") || []);
676
- oRet.NonFilterableProperties = oRet.NonFilterableProperties.concat(getFilterRestrictions(oNavigationFilterRestrictions, "NonFilterableProperties") || []);
663
+ let allFilterRestrictions;
664
+ if (sEntitySetPath) {
665
+ allFilterRestrictions = fetchFilterRestrictions.getFilterRestrictionsByDataModel(converterContext.getDataModelObjectPath());
677
666
  }
667
+ oRet.RequiredProperties = allFilterRestrictions ? allFilterRestrictions.RequiredProperties : [];
668
+ oRet.NonFilterableProperties = allFilterRestrictions ? allFilterRestrictions.NonFilterableProperties : [];
678
669
  const aRequiredProps = oRet.RequiredProperties;
679
670
  const aNonFilterableProps = oRet.NonFilterableProperties;
680
671
  const aFetchedProperties = [];
@@ -849,4 +840,4 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/DataVisualization", "sap/
849
840
  _exports.getExpandFilterFields = getExpandFilterFields;
850
841
  return _exports;
851
842
  }, false);
852
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmaWx0ZXJGaWVsZFR5cGUiLCJzRWRtU3RyaW5nIiwic1N0cmluZ0RhdGFUeXBlIiwiZ2V0RmllbGRHcm91cEZpbHRlckdyb3VwcyIsImZpZWxkR3JvdXAiLCJmaWx0ZXJGYWNldE1hcCIsIkRhdGEiLCJmb3JFYWNoIiwiZGF0YUZpZWxkIiwiJFR5cGUiLCJWYWx1ZSIsInBhdGgiLCJncm91cCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImdyb3VwTGFiZWwiLCJMYWJlbCIsInRvU3RyaW5nIiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJxdWFsaWZpZXIiLCJnZXRFeGNsdWRlZEZpbHRlclByb3BlcnRpZXMiLCJsclRhYmxlVmlzdWFsaXphdGlvbnMiLCJjb252ZXJ0ZXJDb250ZXh0Iiwic2VsZWN0aW9uVmFyaWFudFBhdGhzIiwiU2V0IiwibWFuaWZlc3RGaWx0ZXJGaWVsZHMiLCJnZXRNYW5pZmVzdFdyYXBwZXIiLCJnZXRGaWx0ZXJDb25maWd1cmF0aW9uIiwiZmlsdGVyRmllbGRzIiwic2VsZWN0aW9uRmllbGRQYXRocyIsImdldERhdGFNb2RlbE9iamVjdFBhdGgiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiVUkiLCJTZWxlY3Rpb25GaWVsZHMiLCJtYXAiLCJzZWxlY3Rpb25GaWVsZCIsInZhbHVlIiwiT2JqZWN0Iiwia2V5cyIsImZpbHRlciIsImtleSIsInRlbXBsYXRlIiwidmlzdWFsaXphdGlvbiIsInRhYmxlRmlsdGVycyIsImNvbnRyb2wiLCJmaWx0ZXJzIiwiaGlkZGVuRmlsdGVycyIsInBhdGhzIiwicXVpY2tGaWx0ZXJzIiwiYW5ub3RhdGlvblBhdGgiLCJoYXMiLCJhZGQiLCJzZWxlY3Rpb25WYXJpYW50Q29uZmlnIiwiZ2V0U2VsZWN0aW9uVmFyaWFudENvbmZpZ3VyYXRpb24iLCJwcm9wZXJ0eU5hbWVzIiwicHJvcGVydHlOYW1lIiwiZmxhdCIsIl9nZXRDb25kaXRpb25QYXRoIiwiZW50aXR5VHlwZSIsInByb3BlcnR5UGF0aCIsInBhcnRzIiwic3BsaXQiLCJwYXJ0aWFsUGF0aCIsImxlbmd0aCIsInBhcnQiLCJzaGlmdCIsInByb3BlcnR5IiwicmVzb2x2ZVBhdGgiLCJpc011bHRpcGxlTmF2aWdhdGlvblByb3BlcnR5IiwiX2NyZWF0ZUZpbHRlclNlbGVjdGlvbkZpZWxkIiwiZnVsbFByb3BlcnR5UGF0aCIsImluY2x1ZGVIaWRkZW4iLCJ0YXJnZXRUeXBlIiwidW5kZWZpbmVkIiwiSGlkZGVuIiwidmFsdWVPZiIsImdldEFubm90YXRpb25FbnRpdHlUeXBlIiwiZmlsdGVyRmllbGQiLCJLZXlIZWxwZXIiLCJnZXRTZWxlY3Rpb25GaWVsZEtleUZyb21QYXRoIiwiZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aCIsImNvbmRpdGlvblBhdGgiLCJhdmFpbGFiaWxpdHkiLCJIaWRkZW5GaWx0ZXIiLCJsYWJlbCIsIm5hbWUiLCJnZXRTZXR0aW5nc09mRGVmYXVsdEZpbHRlckZpZWxkcyIsInN0YW5kYXJkRHluYW1pY0RhdGVSYW5nZUtleXMiLCJTdGFuZGFyZER5bmFtaWNEYXRlUmFuZ2VLZXlzIiwiVE8iLCJUT01PUlJPVyIsIk5FWFRXRUVLIiwiTkVYVE1PTlRIIiwiTkVYVFFVQVJURVIiLCJORVhUWUVBUiIsInNldHRpbmdzIiwib3BlcmF0b3JDb25maWd1cmF0aW9uIiwiZXF1YWxzIiwiam9pbiIsImV4Y2x1ZGUiLCJfZ2V0U2VsZWN0aW9uRmllbGRzIiwibmF2aWdhdGlvblBhdGgiLCJwcm9wZXJ0aWVzIiwic2VsZWN0aW9uRmllbGRNYXAiLCJmdWxsUGF0aCIsIl9nZXRTZWxlY3Rpb25GaWVsZHNCeVBhdGgiLCJwcm9wZXJ0eVBhdGhzIiwic2VsZWN0aW9uRmllbGRzIiwibG9jYWxTZWxlY3Rpb25GaWVsZHMiLCJlbmhhbmNlZFBhdGgiLCJlbmhhbmNlRGF0YU1vZGVsUGF0aCIsInRhcmdldE9iamVjdCIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwiZmluZCIsIm5hdmlnYXRpb25Qcm9wZXJ0eSIsImlzTmF2aWdhdGlvblByb3BlcnR5IiwiZW50aXR5UHJvcGVydGllcyIsImlzQ29tcGxleFR5cGUiLCJnZXRUYXJnZXROYXZpZ2F0aW9uUGF0aCIsIl9nZXRGaWx0ZXJGaWVsZCIsImdldERpYWdub3N0aWNzIiwiYWRkSXNzdWUiLCJJc3N1ZUNhdGVnb3J5IiwiQW5ub3RhdGlvbiIsIklzc3VlU2V2ZXJpdHkiLCJIaWdoIiwiSXNzdWVUeXBlIiwiTUlTU0lOR19TRUxFQ1RJT05GSUVMRCIsImlzUGFyYW1ldGVyIiwiUmVzdWx0Q29udGV4dCIsIl9nZXREZWZhdWx0RmlsdGVyRmllbGRzIiwiYVNlbGVjdE9wdGlvbnMiLCJleGNsdWRlZEZpbHRlclByb3BlcnRpZXMiLCJhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHMiLCJVSVNlbGVjdGlvbkZpZWxkcyIsIlNlbGVjdGlvbkZpZWxkIiwic2VsZWN0T3B0aW9uIiwiUHJvcGVydHlOYW1lIiwic1Byb3BlcnR5UGF0aCIsImN1cnJlbnRTZWxlY3Rpb25GaWVsZHMiLCJGaWx0ZXJGaWVsZCIsImdldEZpbHRlckZpZWxkIiwicHVzaCIsImRlZmF1bHRGaWx0ZXJWYWx1ZSIsIkZpbHRlckRlZmF1bHRWYWx1ZSIsIl9nZXRQYXJhbWV0ZXJGaWVsZHMiLCJkYXRhTW9kZWxPYmplY3RQYXRoIiwicGFyYW1ldGVyRW50aXR5VHlwZSIsInN0YXJ0aW5nRW50aXR5U2V0IiwiaXNQYXJhbWV0ZXJpemVkIiwidGFyZ2V0RW50aXR5U2V0IiwicGFyYW1ldGVyQ29udmVydGVyQ29udGV4dCIsImdldENvbnZlcnRlckNvbnRleHRGb3IiLCJnZXRGaWx0ZXJCYXJIaWRlQmFzaWNTZWFyY2giLCJsaXN0UmVwb3J0VGFibGVzIiwiY2hhcnRzIiwibm9TZWFyY2hJbkNoYXJ0cyIsImV2ZXJ5IiwiY2hhcnQiLCJhcHBseVN1cHBvcnRlZCIsImVuYWJsZVNlYXJjaCIsIm5vU2VhcmNoSW5UYWJsZXMiLCJ0YWJsZSIsImVuYWJsZUFuYWx5dGljcyIsInR5cGUiLCJlbmFibGVCYXNpY1NlYXJjaCIsImNvbnRleHRQYXRoIiwiZ2V0Q29udGV4dFBhdGgiLCJfZXhwb3J0cyIsImdldE1hbmlmZXN0RmlsdGVyRmllbGRzIiwibWFuaWZlc3RXcmFwcGVyIiwic2V0dGluZ3NDb250ZXh0UGF0aCIsImdldEVudGl0eVNldCIsImZpbHRlckNvbmZpZ3VyYXRpb25QYXRoIiwiZ2V0RmlsdGVyQ29uZmlndXJhdGlvblBhdGgiLCJmYkNvbmZpZyIsImRlZmluZWRGaWx0ZXJGaWVsZHMiLCJnZXRQYXRoRnJvbVNlbGVjdGlvbkZpZWxkS2V5Iiwic0tleSIsIlNsb3QiLCJEZWZhdWx0IiwidmlzdWFsRmlsdGVyIiwiZ2V0VmlzdWFsRmlsdGVycyIsImlzQ3VzdG9tRmlsdGVyIiwic2xvdE5hbWUiLCJkb2N1bWVudFJlZlRleHQiLCJmZXRjaFRleHRGcm9tTWV0YU1vZGVsIiwicG9zaXRpb24iLCJwbGFjZW1lbnQiLCJQbGFjZW1lbnQiLCJBZnRlciIsInJlcXVpcmVkIiwib2JqZWN0UGF0aCIsImZpbHRlckJhckNvbnRleHRQYXRoIiwibWV0YVBhdGgiLCJzdGFydHNXaXRoIiwicmVwbGFjZSIsImdldEZpbHRlclJlc3RyaWN0aW9ucyIsIm9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uIiwic1Jlc3RyaWN0aW9uIiwiYVByb3BzIiwib1Byb3BlcnR5IiwiZ2V0U2VhcmNoRmlsdGVyUHJvcGVydHlJbmZvIiwiZGF0YVR5cGUiLCJtYXhDb25kaXRpb25zIiwiY29uc3RyYWludHMiLCJtYXhMZW5ndGgiLCJnZXRFZGl0U3RhdGVGaWx0ZXJQcm9wZXJ0eUluZm8iLCJoaWRkZW5GaWx0ZXIiLCJnZXRTZWFyY2hSZXN0cmljdGlvbnMiLCJlbnRpdHlTZXQiLCJpc0VudGl0eVNldCIsIkNhcGFiaWxpdGllcyIsIlNlYXJjaFJlc3RyaWN0aW9ucyIsImdldE5hdmlnYXRpb25SZXN0cmljdGlvbnMiLCJzTmF2aWdhdGlvblBhdGgiLCJvTmF2aWdhdGlvblJlc3RyaWN0aW9ucyIsIk5hdmlnYXRpb25SZXN0cmljdGlvbnMiLCJhUmVzdHJpY3RlZFByb3BlcnRpZXMiLCJSZXN0cmljdGVkUHJvcGVydGllcyIsIm9SZXN0cmljdGVkUHJvcGVydHkiLCJOYXZpZ2F0aW9uUHJvcGVydHkiLCJfZmV0Y2hCYXNpY1Byb3BlcnR5SW5mbyIsIm9GaWx0ZXJGaWVsZEluZm8iLCJkaXNwbGF5IiwiY2FzZVNlbnNpdGl2ZSIsIm1lbnUiLCJfZ2V0TWlzc2luZ0xhYmVsRm9yTWFuaWZlc3RGaWx0ZXJGaWVsZHMiLCJoYXNPd25Qcm9wZXJ0eSIsImRpc3BsYXlNb2RlIiwib1Byb3BlcnR5QW5ub3RhdGlvbnMiLCJvQ29sbGVjdGlvbkFubm90YXRpb25zIiwib1RleHRBbm5vdGF0aW9uIiwiVGV4dCIsIm9UZXh0QXJyYW5nbWVudEFubm90YXRpb24iLCJUZXh0QXJyYW5nZW1lbnQiLCJmZXRjaFByb3BlcnR5SW5mbyIsIm9UeXBlQ29uZmlnIiwib1Byb3BlcnR5SW5mbyIsInNBbm5vdGF0aW9uUGF0aCIsInRhcmdldFByb3BlcnR5T2JqZWN0Iiwib0Zvcm1hdE9wdGlvbnMiLCJmb3JtYXRPcHRpb25zIiwib0NvbnN0cmFpbnRzIiwidG9vbHRpcCIsIlF1aWNrSW5mbyIsImFzc2lnbiIsImlzTXVsdGlWYWx1ZSIsImJJc011bHRpVmFsdWUiLCJmaWx0ZXJFeHByZXNzaW9uIiwiaW5kZXhPZiIsIl9pc0ZpbHRlcmFibGVOYXZpZ2F0aW9uUHJvcGVydHkiLCJlbnRyeSIsImluY2x1ZGVzIiwiYWRkQ2hpbGROYXZpZ2F0aW9uUHJvcGVydGllcyIsIm5hdlByb3BlcnRpZXMiLCJ0YXJnZXRQcm9wZXJ0eSIsIiR0YXJnZXQiLCJhZGRpdGlvbmFsUHJvcGVydHlQYXRoIiwiZ2V0QXNzb2NpYXRlZFRleHRQcm9wZXJ0eVBhdGgiLCJnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eVBhdGgiLCJnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5UGF0aCIsImdldEFzc29jaWF0ZWRUaW1lem9uZVByb3BlcnR5UGF0aCIsIm5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgiLCJnZXROYXZpZ2F0aW9uUHJvcGVydGllc1JlY3Vyc2l2ZWx5IiwiVGFyZ2V0IiwiaW5uZXJEYXRhRmllbGQiLCJnZXRSZWxhdGl2ZVBhdGhzIiwiZ2V0QW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhIiwibHJUYWJsZXMiLCJhcmd1bWVudHMiLCJsaW5lSXRlbVRlcm0iLCJnZXRFbnRpdHlUeXBlIiwiZ2V0RW50aXR5VHlwZUFubm90YXRpb24iLCJhbm5vdGF0aW9uIiwiTW9kZWxIZWxwZXIiLCJpc0RyYWZ0Um9vdCIsInNlbGVjdGlvblZhcmlhbnQiLCJnZXRTZWxlY3Rpb25WYXJpYW50IiwiU2VsZWN0T3B0aW9ucyIsInByb3BlcnR5SW5mb0ZpZWxkcyIsInJlZHVjZSIsImZpbHRlclByb3BlcnR5UGF0aCIsImRlZmF1bHRGaWx0ZXJGaWVsZHMiLCJmZXRjaFR5cGVDb25maWciLCJ0eXBlQ29uZmlnIiwiZ2V0VHlwZUNvbmZpZyIsIm51bGxhYmxlIiwicGFyc2VLZWVwc0VtcHR5U3RyaW5nIiwiYXNzaWduRGF0YVR5cGVUb1Byb3BlcnR5SW5mbyIsInByb3BlcnR5SW5mb0ZpZWxkIiwiYVJlcXVpcmVkUHJvcHMiLCJhVHlwZUNvbmZpZyIsImdldE1heENvbmRpdGlvbnMiLCJpc0ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUiLCJwcm9jZXNzU2VsZWN0aW9uRmllbGRzIiwiZGVmYXVsdFZhbHVlUHJvcGVydHlGaWVsZHMiLCJjb25jYXQiLCJwYXJhbWV0ZXJGaWVsZCIsInByb3BlcnR5Q29udmVydHlDb250ZXh0IiwicHJvcGVydHlUYXJnZXRPYmplY3QiLCJvRmlsdGVyUmVzdHJpY3Rpb25zIiwiRmlsdGVyUmVzdHJpY3Rpb25zIiwib1JldCIsIlJlcXVpcmVkUHJvcGVydGllcyIsIk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzIiwic0VudGl0eVNldFBhdGgiLCJhUGF0aFBhcnRzIiwic3BsaWNlIiwib05hdmlnYXRpb25GaWx0ZXJSZXN0cmljdGlvbnMiLCJhTm9uRmlsdGVyYWJsZVByb3BzIiwiYUZldGNoZWRQcm9wZXJ0aWVzIiwiaXNIaWRkZW5EcmFmdEVuYWJsZWQiLCJnZXRTYXBGZU1hbmlmZXN0Q29uZmlndXJhdGlvbiIsImFwcCIsImhpZGVEcmFmdCIsImVuYWJsZWQiLCJpc09iamVjdFBhdGhEcmFmdFN1cHBvcnRlZCIsImVkaXRTdGF0ZUZpbHRlciIsInNob3dEcmFmdEVkaXRTdGF0dXMiLCJzZWFyY2hSZXN0cmljdGlvbnMiLCJoaWRlQmFzaWNTZWFyY2giLCJCb29sZWFuIiwiU2VhcmNoYWJsZSIsIm5hdmlnYXRpb25SZXN0cmljdGlvbnMiLCJGaWx0ZXJhYmxlIiwiaW5zZXJ0Q3VzdG9tTWFuaWZlc3RFbGVtZW50cyIsImluc2VydEN1c3RvbUVsZW1lbnRzIiwiT3ZlcnJpZGVUeXBlIiwib3ZlcndyaXRlIiwic29ydFByb3BlcnR5SW5mb3NCeUdyb3VwTGFiZWwiLCJwcm9wZXJ0eUluZm9zIiwic29ydCIsImEiLCJiIiwiYUdyb3VwTGFiZWxJc1NldCIsImJHcm91cExhYmVsSXNTZXQiLCJsb2NhbGVDb21wYXJlIiwiZ2V0U2VsZWN0aW9uRmllbGRzIiwib0Fubm90YXRlZFNlbGVjdGlvbkZpZWxkRGF0YSIsInBhcmFtZXRlckZpZWxkcyIsInNGZXRjaFByb3BlcnRpZXMiLCJKU09OIiwic3RyaW5naWZ5Iiwic1Byb3BlcnR5SW5mbyIsInByb3BTZWxlY3Rpb25GaWVsZHMiLCJwYXJzZSIsImZpbHRlckZhY2V0cyIsIkZpbHRlckZhY2V0cyIsImFGaWVsZEdyb3VwcyIsImdldEFubm90YXRpb25zQnlUZXJtIiwiaSIsInByZXZpb3VzVmFsdWUiLCJmaWx0ZXJGYWNldCIsIklEIiwiYWxsRmlsdGVycyIsImlzQ2FzZVNlbnNpdGl2ZSIsImdldEV4cGFuZEZpbHRlckZpZWxkcyIsImZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24iLCJ2YWx1ZUxpc3QiLCJyZXF1aXJlZFByb3BlcnRpZXMiLCJGZXRjaFZhbHVlcyJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRmlsdGVyQmFyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQW5ub3RhdGlvblRlcm0sIEVudGl0eVNldCwgRW50aXR5VHlwZSwgTmF2aWdhdGlvblByb3BlcnR5LCBQcm9wZXJ0eSwgUHJvcGVydHlQYXRoIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7XG5cdEZpbHRlclJlc3RyaWN0aW9ucyxcblx0RmlsdGVyUmVzdHJpY3Rpb25zVHlwZSxcblx0TmF2aWdhdGlvblByb3BlcnR5UmVzdHJpY3Rpb24sXG5cdFNlYXJjaFJlc3RyaWN0aW9uc1xufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NhcGFiaWxpdGllc1wiO1xuaW1wb3J0IHR5cGUgeyBWYWx1ZUxpc3QgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW1vblwiO1xuaW1wb3J0IHR5cGUgeyBFbnRpdHlUeXBlQW5ub3RhdGlvbnMsIFByb3BlcnR5QW5ub3RhdGlvbnMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0VkbV9UeXBlc1wiO1xuaW1wb3J0IHR5cGUge1xuXHREYXRhRmllbGQsXG5cdERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdERhdGFGaWVsZFR5cGVzLFxuXHREYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGgsXG5cdERhdGFGaWVsZFdpdGhVcmwsXG5cdEZpZWxkR3JvdXAsXG5cdExpbmVJdGVtLFxuXHRSZWZlcmVuY2VGYWNldFR5cGVzLFxuXHRTZWxlY3RPcHRpb25UeXBlXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB7IFVJQW5ub3RhdGlvblRlcm1zLCBVSUFubm90YXRpb25UeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB0eXBlIENvbnZlcnRlckNvbnRleHQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBQYWdlQ29udGV4dFBhdGhUYXJnZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUgeyBDaGFydFZpc3VhbGl6YXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQ2hhcnRcIjtcbmltcG9ydCB7IGdldFNlbGVjdGlvblZhcmlhbnQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vRGF0YVZpc3VhbGl6YXRpb25cIjtcbmltcG9ydCB0eXBlIHsgVGFibGVWaXN1YWxpemF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL1RhYmxlXCI7XG5pbXBvcnQgeyBnZXRTZWxlY3Rpb25WYXJpYW50Q29uZmlndXJhdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eVR5cGVDb25zdHJhaW50cywgUHJvcGVydHlUeXBlRm9ybWF0T3B0aW9ucyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi90YWJsZS9Db2x1bW5zXCI7XG5pbXBvcnQgeyBnZXRUeXBlQ29uZmlnLCBpc0ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vdGFibGUvQ29sdW1uc1wiO1xuaW1wb3J0IHsgZ2V0TWF4Q29uZGl0aW9ucyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0xpc3RSZXBvcnQvRmlsdGVyRmllbGRcIjtcbmltcG9ydCB0eXBlIHsgVmlzdWFsRmlsdGVycyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0xpc3RSZXBvcnQvVmlzdWFsRmlsdGVyc1wiO1xuaW1wb3J0IHsgZ2V0VmlzdWFsRmlsdGVycyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0xpc3RSZXBvcnQvVmlzdWFsRmlsdGVyc1wiO1xuaW1wb3J0IHR5cGUgeyBDb25maWd1cmFibGVPYmplY3QsIEN1c3RvbUVsZW1lbnQsIFBvc2l0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7IE92ZXJyaWRlVHlwZSwgUGxhY2VtZW50LCBpbnNlcnRDdXN0b21FbGVtZW50cyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgeyBJc3N1ZUNhdGVnb3J5LCBJc3N1ZVNldmVyaXR5LCBJc3N1ZVR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0lzc3VlTWFuYWdlclwiO1xuaW1wb3J0IHsgS2V5SGVscGVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9LZXlcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgaXNDb21wbGV4VHlwZSwgaXNFbnRpdHlTZXQsIGlzTXVsdGlwbGVOYXZpZ2F0aW9uUHJvcGVydHksIGlzTmF2aWdhdGlvblByb3BlcnR5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IHsgZW5oYW5jZURhdGFNb2RlbFBhdGgsIGdldFJlbGF0aXZlUGF0aHMsIGdldFRhcmdldE5hdmlnYXRpb25QYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHtcblx0Z2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHlQYXRoLFxuXHRnZXRBc3NvY2lhdGVkVGV4dFByb3BlcnR5UGF0aCxcblx0Z2V0QXNzb2NpYXRlZFRpbWV6b25lUHJvcGVydHlQYXRoLFxuXHRnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5UGF0aFxufSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9Qcm9wZXJ0eUhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBEZWZhdWx0VHlwZUZvckVkbVR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdHlwZS9FRE1cIjtcbmltcG9ydCB7IFN0YW5kYXJkRHluYW1pY0RhdGVSYW5nZUtleXMgfSBmcm9tIFwic2FwL20vbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgVHlwZUNvbmZpZyBmcm9tIFwic2FwL3VpL21kYy9UeXBlQ29uZmlnXCI7XG5pbXBvcnQgdHlwZSBTaW1wbGVUeXBlIGZyb20gXCJzYXAvdWkvbW9kZWwvU2ltcGxlVHlwZVwiO1xuaW1wb3J0IHR5cGUgeyBNZXRhTW9kZWxUeXBlIH0gZnJvbSBcInR5cGVzL21ldGFtb2RlbF90eXBlc1wiO1xuaW1wb3J0IHR5cGUge1xuXHRBdmFpbGFiaWxpdHlUeXBlLFxuXHRGaWx0ZXJGaWVsZE1hbmlmZXN0Q29uZmlndXJhdGlvbixcblx0RmlsdGVyTWFuaWZlc3RDb25maWd1cmF0aW9uLFxuXHRGaWx0ZXJTZXR0aW5nc1xufSBmcm9tIFwiLi4vLi4vTWFuaWZlc3RTZXR0aW5nc1wiO1xuXG4vL2ltcG9ydCB7IGhhc1ZhbHVlSGVscCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5cbmV4cG9ydCB0eXBlIEZpbHRlckZpZWxkID0gQ29uZmlndXJhYmxlT2JqZWN0ICYge1xuXHR0eXBlPzogc3RyaW5nO1xuXHRrZXk6IHN0cmluZztcblx0ZGF0YVR5cGU/OiBzdHJpbmc7XG5cdG5hbWU/OiBzdHJpbmc7XG5cdGNvbmRpdGlvblBhdGg6IHN0cmluZztcblx0YXZhaWxhYmlsaXR5OiBBdmFpbGFiaWxpdHlUeXBlO1xuXHRhbm5vdGF0aW9uUGF0aDogc3RyaW5nO1xuXHRsYWJlbD86IHN0cmluZztcblx0dGVtcGxhdGU/OiBzdHJpbmc7XG5cdGRvY3VtZW50UmVmVGV4dD86IHN0cmluZztcblx0Z3JvdXA/OiBzdHJpbmc7XG5cdG1lbnU/OiBzdHJpbmc7XG5cdGdyb3VwTGFiZWw/OiBzdHJpbmc7XG5cdHNldHRpbmdzPzogRmlsdGVyU2V0dGluZ3M7XG5cdGlzUGFyYW1ldGVyPzogYm9vbGVhbjtcblx0dmlzdWFsRmlsdGVyPzogVmlzdWFsRmlsdGVycztcblx0Y2FzZVNlbnNpdGl2ZT86IGJvb2xlYW47XG5cdHJlcXVpcmVkPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIE1hbmlmZXN0RmlsdGVyRmllbGQgPSBGaWx0ZXJGaWVsZCAmIHtcblx0c2xvdE5hbWU/OiBzdHJpbmc7XG59O1xuXG50eXBlIEZpbHRlckdyb3VwID0ge1xuXHRncm91cD86IHN0cmluZztcblx0Z3JvdXBMYWJlbD86IHN0cmluZztcbn07XG5cbmVudW0gZmlsdGVyRmllbGRUeXBlIHtcblx0RGVmYXVsdCA9IFwiRGVmYXVsdFwiLFxuXHRTbG90ID0gXCJTbG90XCJcbn1cblxudHlwZSBQcm9wZXJ0eVR5cGVDb25maWcgPSB7XG5cdHR5cGU/OiBzdHJpbmc7XG5cdGNvbnN0cmFpbnRzOiBQcm9wZXJ0eVR5cGVDb25zdHJhaW50cztcblx0Zm9ybWF0T3B0aW9uczogUHJvcGVydHlUeXBlRm9ybWF0T3B0aW9ucztcblx0YmFzZVR5cGU/OiBzdHJpbmc7XG5cdGNsYXNzTmFtZT86IGtleW9mIHR5cGVvZiBEZWZhdWx0VHlwZUZvckVkbVR5cGU7XG5cdHR5cGVJbnN0YW5jZT86IFNpbXBsZVR5cGU7XG59O1xuXG5jb25zdCBzRWRtU3RyaW5nID0gXCJFZG0uU3RyaW5nXCI7XG5jb25zdCBzU3RyaW5nRGF0YVR5cGUgPSBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmluZ1wiO1xuXG5leHBvcnQgdHlwZSBDdXN0b21FbGVtZW50RmlsdGVyRmllbGQgPSBDdXN0b21FbGVtZW50PE1hbmlmZXN0RmlsdGVyRmllbGQ+O1xuXG4vKipcbiAqIEVudGVyIGFsbCBEYXRhRmllbGRzIG9mIGEgZ2l2ZW4gRmllbGRHcm91cCBpbnRvIHRoZSBmaWx0ZXJGYWNldE1hcC5cbiAqIEBwYXJhbSBmaWVsZEdyb3VwXG4gKiBAcmV0dXJucyBUaGUgbWFwIG9mIGZhY2V0cyBmb3IgdGhlIGdpdmVuIEZpZWxkR3JvdXBcbiAqL1xuZnVuY3Rpb24gZ2V0RmllbGRHcm91cEZpbHRlckdyb3VwcyhmaWVsZEdyb3VwOiBGaWVsZEdyb3VwKTogUmVjb3JkPHN0cmluZywgRmlsdGVyR3JvdXA+IHtcblx0Y29uc3QgZmlsdGVyRmFjZXRNYXA6IFJlY29yZDxzdHJpbmcsIEZpbHRlckdyb3VwPiA9IHt9O1xuXHRmaWVsZEdyb3VwLkRhdGEuZm9yRWFjaCgoZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKSA9PiB7XG5cdFx0aWYgKGRhdGFGaWVsZC4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRcIikge1xuXHRcdFx0ZmlsdGVyRmFjZXRNYXBbZGF0YUZpZWxkLlZhbHVlLnBhdGhdID0ge1xuXHRcdFx0XHRncm91cDogZmllbGRHcm91cC5mdWxseVF1YWxpZmllZE5hbWUsXG5cdFx0XHRcdGdyb3VwTGFiZWw6IGZpZWxkR3JvdXAuTGFiZWw/LnRvU3RyaW5nKCkgPz8gZmllbGRHcm91cC5hbm5vdGF0aW9ucz8uQ29tbW9uPy5MYWJlbD8udG9TdHJpbmcoKSA/PyBmaWVsZEdyb3VwLnF1YWxpZmllclxuXHRcdFx0fTtcblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gZmlsdGVyRmFjZXRNYXA7XG59XG5cbi8qKlxuICogR2V0IHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBzZWxlY3Rpb24gdmFyaWFudHMgdXNlZCBpbiB0aGUgZGlmZmVyZW50IHZpc3VhbGl6YXRpb25zIHRoYXQgc2hvdWxkIGJlIGV4Y2x1ZGVkLlxuICogQHBhcmFtIGxyVGFibGVWaXN1YWxpemF0aW9ucyBUaGUgbGlzdCByZXBvcnQgdGFibGVzXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBleGNsdWRlZCBwcm9wZXJ0aWVzXG4gKi9cbmZ1bmN0aW9uIGdldEV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllcyhcblx0bHJUYWJsZVZpc3VhbGl6YXRpb25zOiBUYWJsZVZpc3VhbGl6YXRpb25bXSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBTZXQ8c3RyaW5nPiB7XG5cdGNvbnN0IHNlbGVjdGlvblZhcmlhbnRQYXRocyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXHRjb25zdCBtYW5pZmVzdEZpbHRlckZpZWxkcyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuZ2V0RmlsdGVyQ29uZmlndXJhdGlvbigpLmZpbHRlckZpZWxkcyA/PyB7fTtcblx0Y29uc3Qgc2VsZWN0aW9uRmllbGRQYXRocyA9IG5ldyBTZXQ8c3RyaW5nPihbXG5cdFx0Ly9TZWxlY3Rpb24gRmllbGRzIGNvbWluZyBmcm9tIHRoZSBhbm5vdGF0aW9uXG5cdFx0Li4uKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLnRhcmdldEVudGl0eVR5cGU/LmFubm90YXRpb25zPy5VST8uU2VsZWN0aW9uRmllbGRzID8/IFtdKS5tYXAoXG5cdFx0XHQoc2VsZWN0aW9uRmllbGQpID0+IHNlbGVjdGlvbkZpZWxkLnZhbHVlXG5cdFx0KSxcblx0XHQvL1NlbGVjdGlvbiBGaWVsZHMgY29taW5nIGZyb20gdGhlIG1hbmlmZXN0IGFuZCBub3Qgd2l0aCBjdXN0b20gdGVtcGxhdGVcblx0XHQuLi5PYmplY3Qua2V5cyhtYW5pZmVzdEZpbHRlckZpZWxkcykuZmlsdGVyKChrZXkpID0+ICEhbWFuaWZlc3RGaWx0ZXJGaWVsZHNba2V5XS50ZW1wbGF0ZSlcblx0XSk7XG5cblx0cmV0dXJuIG5ldyBTZXQoXG5cdFx0bHJUYWJsZVZpc3VhbGl6YXRpb25zXG5cdFx0XHQubWFwKCh2aXN1YWxpemF0aW9uKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHRhYmxlRmlsdGVycyA9IHZpc3VhbGl6YXRpb24uY29udHJvbC5maWx0ZXJzO1xuXHRcdFx0XHRpZiAoIXRhYmxlRmlsdGVycykge1xuXHRcdFx0XHRcdHJldHVybiBbXTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gWy4uLih0YWJsZUZpbHRlcnMuaGlkZGVuRmlsdGVycz8ucGF0aHMgPz8gW10pLCAuLi4odGFibGVGaWx0ZXJzLnF1aWNrRmlsdGVycz8ucGF0aHMgPz8gW10pXS5tYXAoKHBhdGgpID0+IHtcblx0XHRcdFx0XHRjb25zdCBhbm5vdGF0aW9uUGF0aCA9IHBhdGguYW5ub3RhdGlvblBhdGg7XG5cdFx0XHRcdFx0aWYgKCFzZWxlY3Rpb25WYXJpYW50UGF0aHMuaGFzKGFubm90YXRpb25QYXRoKSkge1xuXHRcdFx0XHRcdFx0c2VsZWN0aW9uVmFyaWFudFBhdGhzLmFkZChhbm5vdGF0aW9uUGF0aCk7XG5cdFx0XHRcdFx0XHRjb25zdCBzZWxlY3Rpb25WYXJpYW50Q29uZmlnID0gZ2V0U2VsZWN0aW9uVmFyaWFudENvbmZpZ3VyYXRpb24oYW5ub3RhdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRcdFx0XHRcdFx0aWYgKHNlbGVjdGlvblZhcmlhbnRDb25maWcpIHtcblx0XHRcdFx0XHRcdFx0c2VsZWN0aW9uVmFyaWFudENvbmZpZy5wcm9wZXJ0eU5hbWVzID0gc2VsZWN0aW9uVmFyaWFudENvbmZpZy5wcm9wZXJ0eU5hbWVzLmZpbHRlcihcblx0XHRcdFx0XHRcdFx0XHQocHJvcGVydHlOYW1lKSA9PiAhc2VsZWN0aW9uRmllbGRQYXRocy5oYXMocHJvcGVydHlOYW1lKVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gc2VsZWN0aW9uVmFyaWFudENvbmZpZy5wcm9wZXJ0eU5hbWVzO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gW107XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSlcblx0XHRcdC5mbGF0KDIpXG5cdCk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY29uZGl0aW9uIHBhdGggcmVxdWlyZWQgZm9yIHRoZSBjb25kaXRpb24gbW9kZWwuIEl0IGxvb2tzIGFzIGZvbGxvd3M6XG4gKiA8MTpOLVByb3BlcnR5TmFtZT4qXFwvPDE6MS1Qcm9wZXJ0eU5hbWU+LzxQcm9wZXJ0eU5hbWU+LlxuICogQHBhcmFtIGVudGl0eVR5cGUgVGhlIHJvb3QgRW50aXR5VHlwZVxuICogQHBhcmFtIHByb3BlcnR5UGF0aCBUaGUgZnVsbCBwYXRoIHRvIHRoZSB0YXJnZXQgcHJvcGVydHlcbiAqIEByZXR1cm5zIFRoZSBmb3JtYXR0ZWQgY29uZGl0aW9uIHBhdGhcbiAqL1xuY29uc3QgX2dldENvbmRpdGlvblBhdGggPSBmdW5jdGlvbiAoZW50aXR5VHlwZTogRW50aXR5VHlwZSwgcHJvcGVydHlQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRjb25zdCBwYXJ0cyA9IHByb3BlcnR5UGF0aC5zcGxpdChcIi9cIik7XG5cdGxldCBwYXJ0aWFsUGF0aDtcblx0bGV0IGtleSA9IFwiXCI7XG5cdHdoaWxlIChwYXJ0cy5sZW5ndGgpIHtcblx0XHRsZXQgcGFydCA9IHBhcnRzLnNoaWZ0KCkgYXMgc3RyaW5nO1xuXHRcdHBhcnRpYWxQYXRoID0gcGFydGlhbFBhdGggPyBgJHtwYXJ0aWFsUGF0aH0vJHtwYXJ0fWAgOiBwYXJ0O1xuXHRcdGNvbnN0IHByb3BlcnR5OiBQcm9wZXJ0eSB8IE5hdmlnYXRpb25Qcm9wZXJ0eSA9IGVudGl0eVR5cGUucmVzb2x2ZVBhdGgocGFydGlhbFBhdGgpO1xuXHRcdGlmIChpc011bHRpcGxlTmF2aWdhdGlvblByb3BlcnR5KHByb3BlcnR5KSkge1xuXHRcdFx0cGFydCArPSBcIipcIjtcblx0XHR9XG5cdFx0a2V5ID0ga2V5ID8gYCR7a2V5fS8ke3BhcnR9YCA6IHBhcnQ7XG5cdH1cblx0cmV0dXJuIGtleTtcbn07XG5cbmNvbnN0IF9jcmVhdGVGaWx0ZXJTZWxlY3Rpb25GaWVsZCA9IGZ1bmN0aW9uIChcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0cHJvcGVydHk6IFByb3BlcnR5LFxuXHRmdWxsUHJvcGVydHlQYXRoOiBzdHJpbmcsXG5cdGluY2x1ZGVIaWRkZW46IGJvb2xlYW4sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogRmlsdGVyRmllbGQgfCB1bmRlZmluZWQge1xuXHQvLyBpZ25vcmUgY29tcGxleCBwcm9wZXJ0eSB0eXBlcyBhbmQgaGlkZGVuIGFubm90YXRlZCBvbmVzXG5cdGlmIChwcm9wZXJ0eSAmJiBwcm9wZXJ0eS50YXJnZXRUeXBlID09PSB1bmRlZmluZWQgJiYgKGluY2x1ZGVIaWRkZW4gfHwgcHJvcGVydHkuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSAhPT0gdHJ1ZSkpIHtcblx0XHRjb25zdCB0YXJnZXRFbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uRW50aXR5VHlwZShwcm9wZXJ0eSksXG5cdFx0XHRmaWx0ZXJGaWVsZDogRmlsdGVyRmllbGQgPSB7XG5cdFx0XHRcdGtleTogS2V5SGVscGVyLmdldFNlbGVjdGlvbkZpZWxkS2V5RnJvbVBhdGgoZnVsbFByb3BlcnR5UGF0aCksXG5cdFx0XHRcdGFubm90YXRpb25QYXRoOiBjb252ZXJ0ZXJDb250ZXh0LmdldEFic29sdXRlQW5ub3RhdGlvblBhdGgoZnVsbFByb3BlcnR5UGF0aCksXG5cdFx0XHRcdGNvbmRpdGlvblBhdGg6IF9nZXRDb25kaXRpb25QYXRoKGVudGl0eVR5cGUsIGZ1bGxQcm9wZXJ0eVBhdGgpLFxuXHRcdFx0XHRhdmFpbGFiaWxpdHk6IHByb3BlcnR5LmFubm90YXRpb25zPy5VST8uSGlkZGVuRmlsdGVyPy52YWx1ZU9mKCkgPT09IHRydWUgPyBcIkhpZGRlblwiIDogXCJBZGFwdGF0aW9uXCIsXG5cdFx0XHRcdGxhYmVsOiBwcm9wZXJ0eS5hbm5vdGF0aW9ucy5Db21tb24/LkxhYmVsPy50b1N0cmluZygpID8/IHByb3BlcnR5Lm5hbWUsXG5cdFx0XHRcdGdyb3VwOiB0YXJnZXRFbnRpdHlUeXBlLm5hbWUsXG5cdFx0XHRcdGdyb3VwTGFiZWw6IHRhcmdldEVudGl0eVR5cGU/LmFubm90YXRpb25zPy5Db21tb24/LkxhYmVsPy50b1N0cmluZygpID8/IHRhcmdldEVudGl0eVR5cGUubmFtZVxuXHRcdFx0fTtcblx0XHRnZXRTZXR0aW5nc09mRGVmYXVsdEZpbHRlckZpZWxkcyhmaWx0ZXJGaWVsZCk7XG5cdFx0cmV0dXJuIGZpbHRlckZpZWxkO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlIHRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgdGVjaG5pY2FsIHByb3BlcnR5IERyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhLiBPbmx5IHJlbGV2YW50IGZvciBDcmVhdGlvbkRhdGVUaW1lXG4gKiBhbmQgTGFzdENoYW5nZURhdGVUaW1lLCBhcyB0aGV5IGFyZSBkaXNwbGF5aW5nIHRoZSB0aW1lZnJhbWUgcmVsYXRlZCBwcm9wZXJ0aWVzIGFzIGEgU2VtYW50aWNEYXRlUmFuZ2UuXG4gKiBAcGFyYW0gZmlsdGVyRmllbGRcbiAqL1xuY29uc3QgZ2V0U2V0dGluZ3NPZkRlZmF1bHRGaWx0ZXJGaWVsZHMgPSBmdW5jdGlvbiAoZmlsdGVyRmllbGQ6IEZpbHRlckZpZWxkKTogdm9pZCB7XG5cdGlmIChcblx0XHRmaWx0ZXJGaWVsZC5rZXkgPT09IFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGE6OkNyZWF0aW9uRGF0ZVRpbWVcIiB8fFxuXHRcdGZpbHRlckZpZWxkLmtleSA9PT0gXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YTo6TGFzdENoYW5nZURhdGVUaW1lXCJcblx0KSB7XG5cdFx0Y29uc3Qgc3RhbmRhcmREeW5hbWljRGF0ZVJhbmdlS2V5cyA9IFtcblx0XHRcdFN0YW5kYXJkRHluYW1pY0RhdGVSYW5nZUtleXMuVE8sXG5cdFx0XHRTdGFuZGFyZER5bmFtaWNEYXRlUmFuZ2VLZXlzLlRPTU9SUk9XLFxuXHRcdFx0U3RhbmRhcmREeW5hbWljRGF0ZVJhbmdlS2V5cy5ORVhUV0VFSyxcblx0XHRcdFN0YW5kYXJkRHluYW1pY0RhdGVSYW5nZUtleXMuTkVYVE1PTlRILFxuXHRcdFx0U3RhbmRhcmREeW5hbWljRGF0ZVJhbmdlS2V5cy5ORVhUUVVBUlRFUixcblx0XHRcdFN0YW5kYXJkRHluYW1pY0RhdGVSYW5nZUtleXMuTkVYVFlFQVJcblx0XHRdO1xuXHRcdGZpbHRlckZpZWxkLnNldHRpbmdzID0ge1xuXHRcdFx0b3BlcmF0b3JDb25maWd1cmF0aW9uOiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRwYXRoOiBcImtleVwiLFxuXHRcdFx0XHRcdGVxdWFsczogc3RhbmRhcmREeW5hbWljRGF0ZVJhbmdlS2V5cy5qb2luKFwiLFwiKSxcblx0XHRcdFx0XHRleGNsdWRlOiB0cnVlXG5cdFx0XHRcdH1cblx0XHRcdF1cblx0XHR9O1xuXHR9XG59O1xuXG5jb25zdCBfZ2V0U2VsZWN0aW9uRmllbGRzID0gZnVuY3Rpb24gKFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRuYXZpZ2F0aW9uUGF0aDogc3RyaW5nLFxuXHRwcm9wZXJ0aWVzOiBBcnJheTxQcm9wZXJ0eT4gfCB1bmRlZmluZWQsXG5cdGluY2x1ZGVIaWRkZW46IGJvb2xlYW4sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGQ+IHtcblx0Y29uc3Qgc2VsZWN0aW9uRmllbGRNYXA6IFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkPiA9IHt9O1xuXHRpZiAocHJvcGVydGllcykge1xuXHRcdHByb3BlcnRpZXMuZm9yRWFjaCgocHJvcGVydHk6IFByb3BlcnR5KSA9PiB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVBhdGg6IHN0cmluZyA9IHByb3BlcnR5Lm5hbWU7XG5cdFx0XHRjb25zdCBmdWxsUGF0aDogc3RyaW5nID0gKG5hdmlnYXRpb25QYXRoID8gYCR7bmF2aWdhdGlvblBhdGh9L2AgOiBcIlwiKSArIHByb3BlcnR5UGF0aDtcblx0XHRcdGNvbnN0IHNlbGVjdGlvbkZpZWxkID0gX2NyZWF0ZUZpbHRlclNlbGVjdGlvbkZpZWxkKGVudGl0eVR5cGUsIHByb3BlcnR5LCBmdWxsUGF0aCwgaW5jbHVkZUhpZGRlbiwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0XHRpZiAoc2VsZWN0aW9uRmllbGQpIHtcblx0XHRcdFx0c2VsZWN0aW9uRmllbGRNYXBbZnVsbFBhdGhdID0gc2VsZWN0aW9uRmllbGQ7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIHNlbGVjdGlvbkZpZWxkTWFwO1xufTtcblxuY29uc3QgX2dldFNlbGVjdGlvbkZpZWxkc0J5UGF0aCA9IGZ1bmN0aW9uIChcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0cHJvcGVydHlQYXRoczogQXJyYXk8c3RyaW5nPiB8IHVuZGVmaW5lZCxcblx0aW5jbHVkZUhpZGRlbjogYm9vbGVhbixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4ge1xuXHRsZXQgc2VsZWN0aW9uRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4gPSB7fTtcblx0aWYgKHByb3BlcnR5UGF0aHMpIHtcblx0XHRwcm9wZXJ0eVBhdGhzLmZvckVhY2goKHByb3BlcnR5UGF0aDogc3RyaW5nKSA9PiB7XG5cdFx0XHRsZXQgbG9jYWxTZWxlY3Rpb25GaWVsZHM6IFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkPiA9IHt9O1xuXHRcdFx0Y29uc3QgZW5oYW5jZWRQYXRoID0gZW5oYW5jZURhdGFNb2RlbFBhdGg8UHJvcGVydHkgfCBOYXZpZ2F0aW9uUHJvcGVydHk+KFxuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSxcblx0XHRcdFx0cHJvcGVydHlQYXRoXG5cdFx0XHQpO1xuXHRcdFx0Y29uc3QgcHJvcGVydHkgPSBlbmhhbmNlZFBhdGgudGFyZ2V0T2JqZWN0O1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRwcm9wZXJ0eSA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0XHRcdCghaW5jbHVkZUhpZGRlbiAmJlxuXHRcdFx0XHRcdGVuaGFuY2VkUGF0aC5uYXZpZ2F0aW9uUHJvcGVydGllcy5maW5kKFxuXHRcdFx0XHRcdFx0KG5hdmlnYXRpb25Qcm9wZXJ0eSkgPT4gbmF2aWdhdGlvblByb3BlcnR5LmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkgPT09IHRydWVcblx0XHRcdFx0XHQpKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGlmIChpc05hdmlnYXRpb25Qcm9wZXJ0eShwcm9wZXJ0eSkpIHtcblx0XHRcdFx0Ly8gaGFuZGxlIG5hdmlnYXRpb24gcHJvcGVydGllc1xuXHRcdFx0XHRsb2NhbFNlbGVjdGlvbkZpZWxkcyA9IF9nZXRTZWxlY3Rpb25GaWVsZHMoXG5cdFx0XHRcdFx0ZW50aXR5VHlwZSxcblx0XHRcdFx0XHRwcm9wZXJ0eVBhdGgsXG5cdFx0XHRcdFx0cHJvcGVydHkudGFyZ2V0VHlwZS5lbnRpdHlQcm9wZXJ0aWVzLFxuXHRcdFx0XHRcdGluY2x1ZGVIaWRkZW4sXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIGlmIChpc0NvbXBsZXhUeXBlKHByb3BlcnR5LnRhcmdldFR5cGUpKSB7XG5cdFx0XHRcdC8vIGhhbmRsZSBDb21wbGV4VHlwZSBwcm9wZXJ0aWVzXG5cdFx0XHRcdGxvY2FsU2VsZWN0aW9uRmllbGRzID0gX2dldFNlbGVjdGlvbkZpZWxkcyhcblx0XHRcdFx0XHRlbnRpdHlUeXBlLFxuXHRcdFx0XHRcdHByb3BlcnR5UGF0aCxcblx0XHRcdFx0XHRwcm9wZXJ0eS50YXJnZXRUeXBlLnByb3BlcnRpZXMsXG5cdFx0XHRcdFx0aW5jbHVkZUhpZGRlbixcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRsb2NhbFNlbGVjdGlvbkZpZWxkcyA9IF9nZXRTZWxlY3Rpb25GaWVsZHMoXG5cdFx0XHRcdFx0ZW50aXR5VHlwZSxcblx0XHRcdFx0XHRnZXRUYXJnZXROYXZpZ2F0aW9uUGF0aChlbmhhbmNlZFBhdGgsIHRydWUpLFxuXHRcdFx0XHRcdFtwcm9wZXJ0eV0sXG5cdFx0XHRcdFx0aW5jbHVkZUhpZGRlbixcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cblx0XHRcdHNlbGVjdGlvbkZpZWxkcyA9IHtcblx0XHRcdFx0Li4uc2VsZWN0aW9uRmllbGRzLFxuXHRcdFx0XHQuLi5sb2NhbFNlbGVjdGlvbkZpZWxkc1xuXHRcdFx0fTtcblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gc2VsZWN0aW9uRmllbGRzO1xufTtcblxuY29uc3QgX2dldEZpbHRlckZpZWxkID0gZnVuY3Rpb24gKFxuXHRmaWx0ZXJGaWVsZHM6IFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkPixcblx0cHJvcGVydHlQYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZVxuKTogRmlsdGVyRmllbGQgfCB1bmRlZmluZWQge1xuXHRsZXQgZmlsdGVyRmllbGQ6IEZpbHRlckZpZWxkIHwgdW5kZWZpbmVkID0gZmlsdGVyRmllbGRzW3Byb3BlcnR5UGF0aF07XG5cdGlmIChmaWx0ZXJGaWVsZCkge1xuXHRcdGRlbGV0ZSBmaWx0ZXJGaWVsZHNbcHJvcGVydHlQYXRoXTtcblx0fSBlbHNlIHtcblx0XHRmaWx0ZXJGaWVsZCA9IF9jcmVhdGVGaWx0ZXJTZWxlY3Rpb25GaWVsZChlbnRpdHlUeXBlLCBlbnRpdHlUeXBlLnJlc29sdmVQYXRoKHByb3BlcnR5UGF0aCksIHByb3BlcnR5UGF0aCwgdHJ1ZSwgY29udmVydGVyQ29udGV4dCk7XG5cdH1cblx0aWYgKCFmaWx0ZXJGaWVsZCkge1xuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RGlhZ25vc3RpY3MoKT8uYWRkSXNzdWUoSXNzdWVDYXRlZ29yeS5Bbm5vdGF0aW9uLCBJc3N1ZVNldmVyaXR5LkhpZ2gsIElzc3VlVHlwZS5NSVNTSU5HX1NFTEVDVElPTkZJRUxEKTtcblx0fVxuXHQvLyBkZWZpbmVkIFNlbGVjdGlvbkZpZWxkcyBhcmUgYXZhaWxhYmxlIGJ5IGRlZmF1bHRcblx0aWYgKGZpbHRlckZpZWxkKSB7XG5cdFx0ZmlsdGVyRmllbGQuYXZhaWxhYmlsaXR5ID0gZmlsdGVyRmllbGQuYXZhaWxhYmlsaXR5ID09PSBcIkhpZGRlblwiID8gXCJIaWRkZW5cIiA6IFwiRGVmYXVsdFwiO1xuXHRcdGZpbHRlckZpZWxkLmlzUGFyYW1ldGVyID0gISFlbnRpdHlUeXBlLmFubm90YXRpb25zPy5Db21tb24/LlJlc3VsdENvbnRleHQ7XG5cdH1cblx0cmV0dXJuIGZpbHRlckZpZWxkO1xufTtcblxuY29uc3QgX2dldERlZmF1bHRGaWx0ZXJGaWVsZHMgPSBmdW5jdGlvbiAoXG5cdGFTZWxlY3RPcHRpb25zOiBTZWxlY3RPcHRpb25UeXBlW10sXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0ZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzOiBTZXQ8c3RyaW5nPixcblx0YW5ub3RhdGVkU2VsZWN0aW9uRmllbGRzOiBQcm9wZXJ0eVBhdGhbXVxuKTogRmlsdGVyRmllbGRbXSB7XG5cdGNvbnN0IHNlbGVjdGlvbkZpZWxkczogRmlsdGVyRmllbGRbXSA9IFtdO1xuXHRjb25zdCBVSVNlbGVjdGlvbkZpZWxkczogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fTtcblx0Y29uc3QgcHJvcGVydGllcyA9IGVudGl0eVR5cGUuZW50aXR5UHJvcGVydGllcztcblx0Ly8gVXNpbmcgZW50aXR5VHlwZSBpbnN0ZWFkIG9mIGVudGl0eVNldFxuXHRhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHM/LmZvckVhY2goKFNlbGVjdGlvbkZpZWxkKSA9PiB7XG5cdFx0VUlTZWxlY3Rpb25GaWVsZHNbU2VsZWN0aW9uRmllbGQudmFsdWVdID0gdHJ1ZTtcblx0fSk7XG5cdGlmIChhU2VsZWN0T3B0aW9ucyAmJiBhU2VsZWN0T3B0aW9ucy5sZW5ndGggPiAwKSB7XG5cdFx0YVNlbGVjdE9wdGlvbnM/LmZvckVhY2goKHNlbGVjdE9wdGlvbjogU2VsZWN0T3B0aW9uVHlwZSkgPT4ge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlOYW1lID0gc2VsZWN0T3B0aW9uLlByb3BlcnR5TmFtZTtcblx0XHRcdGNvbnN0IHNQcm9wZXJ0eVBhdGggPSBwcm9wZXJ0eU5hbWU/LnZhbHVlO1xuXHRcdFx0Y29uc3QgY3VycmVudFNlbGVjdGlvbkZpZWxkczogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fTtcblx0XHRcdGFubm90YXRlZFNlbGVjdGlvbkZpZWxkcz8uZm9yRWFjaCgoU2VsZWN0aW9uRmllbGQpID0+IHtcblx0XHRcdFx0Y3VycmVudFNlbGVjdGlvbkZpZWxkc1tTZWxlY3Rpb25GaWVsZC52YWx1ZV0gPSB0cnVlO1xuXHRcdFx0fSk7XG5cdFx0XHRpZiAoc1Byb3BlcnR5UGF0aCAmJiAhZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzLmhhcyhzUHJvcGVydHlQYXRoKSkge1xuXHRcdFx0XHRpZiAoIShzUHJvcGVydHlQYXRoIGluIGN1cnJlbnRTZWxlY3Rpb25GaWVsZHMpKSB7XG5cdFx0XHRcdFx0Y29uc3QgRmlsdGVyRmllbGQ6IEZpbHRlckZpZWxkIHwgdW5kZWZpbmVkID0gZ2V0RmlsdGVyRmllbGQoc1Byb3BlcnR5UGF0aCwgY29udmVydGVyQ29udGV4dCwgZW50aXR5VHlwZSk7XG5cdFx0XHRcdFx0aWYgKEZpbHRlckZpZWxkKSB7XG5cdFx0XHRcdFx0XHRzZWxlY3Rpb25GaWVsZHMucHVzaChGaWx0ZXJGaWVsZCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAocHJvcGVydGllcykge1xuXHRcdHByb3BlcnRpZXMuZm9yRWFjaCgocHJvcGVydHk6IFByb3BlcnR5KSA9PiB7XG5cdFx0XHRjb25zdCBkZWZhdWx0RmlsdGVyVmFsdWUgPSBwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5GaWx0ZXJEZWZhdWx0VmFsdWU7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVBhdGggPSBwcm9wZXJ0eS5uYW1lO1xuXHRcdFx0aWYgKCEocHJvcGVydHlQYXRoIGluIGV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllcykpIHtcblx0XHRcdFx0aWYgKGRlZmF1bHRGaWx0ZXJWYWx1ZSAmJiAhKHByb3BlcnR5UGF0aCBpbiBVSVNlbGVjdGlvbkZpZWxkcykpIHtcblx0XHRcdFx0XHRjb25zdCBGaWx0ZXJGaWVsZDogRmlsdGVyRmllbGQgfCB1bmRlZmluZWQgPSBnZXRGaWx0ZXJGaWVsZChwcm9wZXJ0eVBhdGgsIGNvbnZlcnRlckNvbnRleHQsIGVudGl0eVR5cGUpO1xuXHRcdFx0XHRcdGlmIChGaWx0ZXJGaWVsZCkge1xuXHRcdFx0XHRcdFx0c2VsZWN0aW9uRmllbGRzLnB1c2goRmlsdGVyRmllbGQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBzZWxlY3Rpb25GaWVsZHM7XG59O1xuXG4vKipcbiAqIEdldCBhbGwgcGFyYW1ldGVyIGZpbHRlciBmaWVsZHMgaW4gY2FzZSBvZiBhIHBhcmFtZXRlcml6ZWQgc2VydmljZS5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBwYXJhbWV0ZXIgRmlsdGVyRmllbGRzXG4gKi9cbmZ1bmN0aW9uIF9nZXRQYXJhbWV0ZXJGaWVsZHMoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+KTogRmlsdGVyRmllbGRbXSB7XG5cdGNvbnN0IGRhdGFNb2RlbE9iamVjdFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKTtcblx0Y29uc3QgcGFyYW1ldGVyRW50aXR5VHlwZSA9IGRhdGFNb2RlbE9iamVjdFBhdGguc3RhcnRpbmdFbnRpdHlTZXQuZW50aXR5VHlwZTtcblx0Y29uc3QgaXNQYXJhbWV0ZXJpemVkID0gISFwYXJhbWV0ZXJFbnRpdHlUeXBlLmFubm90YXRpb25zPy5Db21tb24/LlJlc3VsdENvbnRleHQgJiYgIWRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0RW50aXR5U2V0O1xuXHRjb25zdCBwYXJhbWV0ZXJDb252ZXJ0ZXJDb250ZXh0ID1cblx0XHRpc1BhcmFtZXRlcml6ZWQgJiYgY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yPEVudGl0eVNldD4oYC8ke2RhdGFNb2RlbE9iamVjdFBhdGguc3RhcnRpbmdFbnRpdHlTZXQubmFtZX1gKTtcblxuXHRyZXR1cm4gKFxuXHRcdHBhcmFtZXRlckNvbnZlcnRlckNvbnRleHRcblx0XHRcdD8gcGFyYW1ldGVyRW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzLm1hcChmdW5jdGlvbiAocHJvcGVydHkpIHtcblx0XHRcdFx0XHRyZXR1cm4gX2dldEZpbHRlckZpZWxkKFxuXHRcdFx0XHRcdFx0e30gYXMgUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGQ+LFxuXHRcdFx0XHRcdFx0cHJvcGVydHkubmFtZSxcblx0XHRcdFx0XHRcdHBhcmFtZXRlckNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdFx0XHRwYXJhbWV0ZXJFbnRpdHlUeXBlXG5cdFx0XHRcdFx0KTtcblx0XHRcdCAgfSlcblx0XHRcdDogW11cblx0KSBhcyBGaWx0ZXJGaWVsZFtdO1xufVxuXG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIEZpbHRlckJhciBzZWFyY2ggZmllbGQgaXMgaGlkZGVuIG9yIG5vdC5cbiAqIEBwYXJhbSBsaXN0UmVwb3J0VGFibGVzIFRoZSBsaXN0IHJlcG9ydCB0YWJsZXNcbiAqIEBwYXJhbSBjaGFydHMgVGhlIEFMUCBjaGFydHNcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgVGhlIGluZm9ybWF0aW9uIGlmIHRoZSBGaWx0ZXJCYXIgc2VhcmNoIGZpZWxkIGlzIGhpZGRlbiBvciBub3RcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEZpbHRlckJhckhpZGVCYXNpY1NlYXJjaCA9IGZ1bmN0aW9uIChcblx0bGlzdFJlcG9ydFRhYmxlczogVGFibGVWaXN1YWxpemF0aW9uW10sXG5cdGNoYXJ0czogQ2hhcnRWaXN1YWxpemF0aW9uW10sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogYm9vbGVhbiB7XG5cdC8vIENoZWNrIGlmIGNoYXJ0cyBhbGxvdyBzZWFyY2hcblx0Y29uc3Qgbm9TZWFyY2hJbkNoYXJ0cyA9IGNoYXJ0cy5sZW5ndGggPT09IDAgfHwgY2hhcnRzLmV2ZXJ5KChjaGFydCkgPT4gIWNoYXJ0LmFwcGx5U3VwcG9ydGVkLmVuYWJsZVNlYXJjaCk7XG5cblx0Ly8gQ2hlY2sgaWYgYWxsIHRhYmxlcyBhcmUgYW5hbHl0aWNhbCBhbmQgbm9uZSBvZiB0aGVtIGFsbG93IGZvciBzZWFyY2hcblx0Ly8gb3IgYWxsIHRhYmxlcyBhcmUgVHJlZVRhYmxlIGFuZCBub25lIG9mIHRoZW0gYWxsb3cgZm9yIHNlYXJjaFxuXHRjb25zdCBub1NlYXJjaEluVGFibGVzID1cblx0XHRsaXN0UmVwb3J0VGFibGVzLmxlbmd0aCA9PT0gMCB8fFxuXHRcdGxpc3RSZXBvcnRUYWJsZXMuZXZlcnkoKHRhYmxlKSA9PiAodGFibGUuZW5hYmxlQW5hbHl0aWNzIHx8IHRhYmxlLmNvbnRyb2wudHlwZSA9PT0gXCJUcmVlVGFibGVcIikgJiYgIXRhYmxlLmVuYWJsZUJhc2ljU2VhcmNoKTtcblxuXHRjb25zdCBjb250ZXh0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udGV4dFBhdGgoKTtcblx0aWYgKGNvbnRleHRQYXRoICYmIG5vU2VhcmNoSW5DaGFydHMgJiYgbm9TZWFyY2hJblRhYmxlcykge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgZmlsdGVyIGZpZWxkcyBmcm9tIHRoZSBtYW5pZmVzdC5cbiAqIEBwYXJhbSBlbnRpdHlUeXBlIFRoZSBjdXJyZW50IGVudGl0eVR5cGVcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIGFubm90YXRpb25QYXRoIEFubm90YXRpb24gcGF0aCBvZiB0aGUgc2VsZWN0aW9uIGZpZWxkc1xuICogQHJldHVybnMgVGhlIGZpbHRlciBmaWVsZHMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3RcbiAqL1xuZXhwb3J0IGNvbnN0IGdldE1hbmlmZXN0RmlsdGVyRmllbGRzID0gZnVuY3Rpb24gKFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGFubm90YXRpb25QYXRoPzogc3RyaW5nXG4pOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21FbGVtZW50RmlsdGVyRmllbGQ+IHtcblx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblxuXHRjb25zdCBzZXR0aW5nc0NvbnRleHRQYXRoID1cblx0XHRtYW5pZmVzdFdyYXBwZXIuZ2V0Q29udGV4dFBhdGgoKSB8fCAobWFuaWZlc3RXcmFwcGVyLmdldEVudGl0eVNldCgpID8gYC8ke21hbmlmZXN0V3JhcHBlci5nZXRFbnRpdHlTZXQoKX1gIDogdW5kZWZpbmVkKTtcblx0Y29uc3QgZmlsdGVyQ29uZmlndXJhdGlvblBhdGggPSBnZXRGaWx0ZXJDb25maWd1cmF0aW9uUGF0aChjb252ZXJ0ZXJDb250ZXh0LCBzZXR0aW5nc0NvbnRleHRQYXRoLCBhbm5vdGF0aW9uUGF0aCk7XG5cdGxldCBmYkNvbmZpZzogRmlsdGVyTWFuaWZlc3RDb25maWd1cmF0aW9uID0ge307XG5cdGZiQ29uZmlnID0gbWFuaWZlc3RXcmFwcGVyLmdldEZpbHRlckNvbmZpZ3VyYXRpb24oZmlsdGVyQ29uZmlndXJhdGlvblBhdGgpO1xuXG5cdGNvbnN0IGRlZmluZWRGaWx0ZXJGaWVsZHM6IFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkTWFuaWZlc3RDb25maWd1cmF0aW9uPiA9IGZiQ29uZmlnPy5maWx0ZXJGaWVsZHMgfHwge307XG5cdGNvbnN0IHNlbGVjdGlvbkZpZWxkczogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGQ+ID0gX2dldFNlbGVjdGlvbkZpZWxkc0J5UGF0aChcblx0XHRlbnRpdHlUeXBlLFxuXHRcdE9iamVjdC5rZXlzKGRlZmluZWRGaWx0ZXJGaWVsZHMpLm1hcCgoa2V5KSA9PiBkZWZpbmVkRmlsdGVyRmllbGRzW2tleV0ucHJvcGVydHkgPz8gS2V5SGVscGVyLmdldFBhdGhGcm9tU2VsZWN0aW9uRmllbGRLZXkoa2V5KSksXG5cdFx0dHJ1ZSxcblx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdCk7XG5cdGNvbnN0IGZpbHRlckZpZWxkczogUmVjb3JkPHN0cmluZywgQ3VzdG9tRWxlbWVudEZpbHRlckZpZWxkPiA9IHt9O1xuXG5cdGZvciAoY29uc3Qgc0tleSBpbiBkZWZpbmVkRmlsdGVyRmllbGRzKSB7XG5cdFx0Y29uc3QgZmlsdGVyRmllbGQgPSBkZWZpbmVkRmlsdGVyRmllbGRzW3NLZXldO1xuXHRcdGNvbnN0IHByb3BlcnR5TmFtZSA9IGZpbHRlckZpZWxkLnByb3BlcnR5ID8/IEtleUhlbHBlci5nZXRQYXRoRnJvbVNlbGVjdGlvbkZpZWxkS2V5KHNLZXkpO1xuXHRcdGNvbnN0IHNlbGVjdGlvbkZpZWxkID0gc2VsZWN0aW9uRmllbGRzW3Byb3BlcnR5TmFtZV07XG5cdFx0Y29uc3QgdHlwZSA9IGZpbHRlckZpZWxkLnR5cGUgPT09IFwiU2xvdFwiID8gZmlsdGVyRmllbGRUeXBlLlNsb3QgOiBmaWx0ZXJGaWVsZFR5cGUuRGVmYXVsdDtcblx0XHRjb25zdCB2aXN1YWxGaWx0ZXIgPVxuXHRcdFx0ZmlsdGVyRmllbGQgJiYgZmlsdGVyRmllbGQ/LnZpc3VhbEZpbHRlclxuXHRcdFx0XHQ/IGdldFZpc3VhbEZpbHRlcnMoZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCwgc0tleSwgZGVmaW5lZEZpbHRlckZpZWxkcylcblx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0aWYgKGZpbHRlckZpZWxkLnRlbXBsYXRlIHx8IGZpbHRlckZpZWxkLnR5cGUgPT09IGZpbHRlckZpZWxkVHlwZS5TbG90KSB7XG5cdFx0XHRpZiAoZmlsdGVyRmllbGQuc2V0dGluZ3MpIHtcblx0XHRcdFx0ZmlsdGVyRmllbGQuc2V0dGluZ3MuaXNDdXN0b21GaWx0ZXIgPSB0cnVlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZmlsdGVyRmllbGQuc2V0dGluZ3MgPSB7XG5cdFx0XHRcdFx0aXNDdXN0b21GaWx0ZXI6IHRydWVcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHR9XG5cdFx0ZmlsdGVyRmllbGRzW3NLZXldID0ge1xuXHRcdFx0a2V5OiBzS2V5LFxuXHRcdFx0dHlwZTogdHlwZSxcblx0XHRcdHNsb3ROYW1lOiBmaWx0ZXJGaWVsZD8uc2xvdE5hbWUgfHwgc0tleSxcblx0XHRcdGFubm90YXRpb25QYXRoOiBzZWxlY3Rpb25GaWVsZD8uYW5ub3RhdGlvblBhdGgsXG5cdFx0XHRjb25kaXRpb25QYXRoOiBmaWx0ZXJGaWVsZC5wcm9wZXJ0eVxuXHRcdFx0XHQ/IEtleUhlbHBlci5nZXRQYXRoRnJvbVNlbGVjdGlvbkZpZWxkS2V5KHNLZXkpXG5cdFx0XHRcdDogc2VsZWN0aW9uRmllbGQ/LmNvbmRpdGlvblBhdGggfHwgcHJvcGVydHlOYW1lLFxuXHRcdFx0ZG9jdW1lbnRSZWZUZXh0OlxuXHRcdFx0XHRmaWx0ZXJGaWVsZC5wcm9wZXJ0eSAmJlxuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmZldGNoVGV4dEZyb21NZXRhTW9kZWwoXG5cdFx0XHRcdFx0XCJ7bWV0YU1vZGVsPlwiICsgZmlsdGVyRmllbGQucHJvcGVydHkgKyBcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRG9jdW1lbnRhdGlvblJlZn1cIlxuXHRcdFx0XHQpLFxuXHRcdFx0dGVtcGxhdGU6IGZpbHRlckZpZWxkLnRlbXBsYXRlLFxuXHRcdFx0bGFiZWw6IGNvbnZlcnRlckNvbnRleHQuZmV0Y2hUZXh0RnJvbU1ldGFNb2RlbChmaWx0ZXJGaWVsZC5sYWJlbCksXG5cdFx0XHRwb3NpdGlvbjogZmlsdGVyRmllbGQucG9zaXRpb24gfHwgeyBwbGFjZW1lbnQ6IFBsYWNlbWVudC5BZnRlciB9LFxuXHRcdFx0YXZhaWxhYmlsaXR5OiBmaWx0ZXJGaWVsZC5hdmFpbGFiaWxpdHkgfHwgXCJEZWZhdWx0XCIsXG5cdFx0XHRzZXR0aW5nczogZmlsdGVyRmllbGQuc2V0dGluZ3MsXG5cdFx0XHR2aXN1YWxGaWx0ZXI6IHZpc3VhbEZpbHRlcixcblx0XHRcdHJlcXVpcmVkOiBmaWx0ZXJGaWVsZC5yZXF1aXJlZFxuXHRcdH07XG5cdH1cblx0cmV0dXJuIGZpbHRlckZpZWxkcztcbn07XG5cbi8qKlxuICogUmV0dXJucyBjb25maWd1cmF0aW9uIHBhdGggdG8gZmV0Y2ggdGhlIGN1c3RvbSBmaWx0ZXIgZmllbGRzIGZyb20gbWFuaWZlc3QuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSBzZXR0aW5nc0NvbnRleHRQYXRoIE1hbmlmZXN0IGVudGl0eSBzZXQgcGF0aCBhbmQgY29udGV4dCBwYXRoXG4gKiBAcGFyYW0gYW5ub3RhdGlvblBhdGggVGhlIGFubm90YXRpb24gcGF0aFxuICogQHJldHVybnMgUGF0aCB0byBmZXRjaCB0aGUgY3VzdG9tIGZpbHRlcnMgZnJvbSB0aGUgbWFuaWZlc3RcbiAqL1xuY29uc3QgZ2V0RmlsdGVyQ29uZmlndXJhdGlvblBhdGggPSBmdW5jdGlvbiAoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0c2V0dGluZ3NDb250ZXh0UGF0aD86IHN0cmluZyxcblx0YW5ub3RhdGlvblBhdGg/OiBzdHJpbmdcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGxldCBvYmplY3RQYXRoO1xuXHRjb25zdCBmaWx0ZXJCYXJDb250ZXh0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udGV4dFBhdGgoKTtcblx0Y29uc3QgbWV0YVBhdGggPSBgJHtmaWx0ZXJCYXJDb250ZXh0UGF0aH0vJHthbm5vdGF0aW9uUGF0aH1gO1xuXHRpZiAoc2V0dGluZ3NDb250ZXh0UGF0aCAmJiBtZXRhUGF0aD8uc3RhcnRzV2l0aChzZXR0aW5nc0NvbnRleHRQYXRoKSAmJiBhbm5vdGF0aW9uUGF0aCkge1xuXHRcdG9iamVjdFBhdGggPSBtZXRhUGF0aC5yZXBsYWNlKGAke3NldHRpbmdzQ29udGV4dFBhdGh9L2AsIFwiXCIpO1xuXHR9IGVsc2Uge1xuXHRcdG9iamVjdFBhdGggPSBhbm5vdGF0aW9uUGF0aDtcblx0fVxuXHRyZXR1cm4gb2JqZWN0UGF0aCA/IG9iamVjdFBhdGggOiB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RmlsdGVyRmllbGQgPSBmdW5jdGlvbiAoXG5cdHByb3BlcnR5UGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGVcbik6IEZpbHRlckZpZWxkIHwgdW5kZWZpbmVkIHtcblx0cmV0dXJuIF9nZXRGaWx0ZXJGaWVsZCh7fSwgcHJvcGVydHlQYXRoLCBjb252ZXJ0ZXJDb250ZXh0LCBlbnRpdHlUeXBlKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRGaWx0ZXJSZXN0cmljdGlvbnMgPSBmdW5jdGlvbiAoXG5cdG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uOiBGaWx0ZXJSZXN0cmljdGlvbnNUeXBlIHwgdW5kZWZpbmVkLFxuXHRzUmVzdHJpY3Rpb246IFwiUmVxdWlyZWRQcm9wZXJ0aWVzXCIgfCBcIk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzXCJcbik6IHN0cmluZ1tdIHtcblx0bGV0IGFQcm9wczogc3RyaW5nW10gPSBbXTtcblx0aWYgKG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uICYmIG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uW3NSZXN0cmljdGlvbl0pIHtcblx0XHRhUHJvcHMgPSBvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbltzUmVzdHJpY3Rpb25dLm1hcChmdW5jdGlvbiAob1Byb3BlcnR5KSB7XG5cdFx0XHRyZXR1cm4gb1Byb3BlcnR5LnZhbHVlO1xuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBhUHJvcHM7XG59O1xuXG5jb25zdCBnZXRTZWFyY2hGaWx0ZXJQcm9wZXJ0eUluZm8gPSBmdW5jdGlvbiAoKTogUHJvcGVydHlJbmZvIHtcblx0cmV0dXJuIHtcblx0XHRuYW1lOiBcIiRzZWFyY2hcIixcblx0XHRwYXRoOiBcIiRzZWFyY2hcIixcblx0XHRkYXRhVHlwZTogc1N0cmluZ0RhdGFUeXBlLFxuXHRcdG1heENvbmRpdGlvbnM6IDEsXG5cdFx0bGFiZWw6IFwi4oCIXCIsXG5cdFx0Y29uc3RyYWludHM6IHsgbWF4TGVuZ3RoOiAxMDAwIH1cblx0fTtcbn07XG5cbmNvbnN0IGdldEVkaXRTdGF0ZUZpbHRlclByb3BlcnR5SW5mbyA9IGZ1bmN0aW9uICgpOiBQcm9wZXJ0eUluZm8ge1xuXHRyZXR1cm4ge1xuXHRcdG5hbWU6IFwiJGVkaXRTdGF0ZVwiLFxuXHRcdG1heENvbmRpdGlvbnM6IDEsXG5cdFx0cGF0aDogXCIkZWRpdFN0YXRlXCIsXG5cdFx0Z3JvdXBMYWJlbDogXCJcIixcblx0XHRncm91cDogXCJcIixcblx0XHRkYXRhVHlwZTogc1N0cmluZ0RhdGFUeXBlLFxuXHRcdGhpZGRlbkZpbHRlcjogZmFsc2Vcblx0fTtcbn07XG5cbmNvbnN0IGdldFNlYXJjaFJlc3RyaWN0aW9ucyA9IGZ1bmN0aW9uIChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiBTZWFyY2hSZXN0cmljdGlvbnMgfCB1bmRlZmluZWQge1xuXHRjb25zdCBlbnRpdHlTZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpO1xuXHRyZXR1cm4gaXNFbnRpdHlTZXQoZW50aXR5U2V0KSA/IGVudGl0eVNldC5hbm5vdGF0aW9ucy5DYXBhYmlsaXRpZXM/LlNlYXJjaFJlc3RyaWN0aW9ucyA6IHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXROYXZpZ2F0aW9uUmVzdHJpY3Rpb25zID0gZnVuY3Rpb24gKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHNOYXZpZ2F0aW9uUGF0aDogc3RyaW5nXG4pOiBOYXZpZ2F0aW9uUHJvcGVydHlSZXN0cmljdGlvbiB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKT8uYW5ub3RhdGlvbnM/LkNhcGFiaWxpdGllcz8uTmF2aWdhdGlvblJlc3RyaWN0aW9ucztcblx0Y29uc3QgYVJlc3RyaWN0ZWRQcm9wZXJ0aWVzID0gb05hdmlnYXRpb25SZXN0cmljdGlvbnMgJiYgb05hdmlnYXRpb25SZXN0cmljdGlvbnMuUmVzdHJpY3RlZFByb3BlcnRpZXM7XG5cdHJldHVybiAoXG5cdFx0YVJlc3RyaWN0ZWRQcm9wZXJ0aWVzICYmXG5cdFx0YVJlc3RyaWN0ZWRQcm9wZXJ0aWVzLmZpbmQoZnVuY3Rpb24gKG9SZXN0cmljdGVkUHJvcGVydHkpIHtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdG9SZXN0cmljdGVkUHJvcGVydHkgJiZcblx0XHRcdFx0b1Jlc3RyaWN0ZWRQcm9wZXJ0eS5OYXZpZ2F0aW9uUHJvcGVydHkgJiZcblx0XHRcdFx0b1Jlc3RyaWN0ZWRQcm9wZXJ0eS5OYXZpZ2F0aW9uUHJvcGVydHkudmFsdWUgPT09IHNOYXZpZ2F0aW9uUGF0aFxuXHRcdFx0KTtcblx0XHR9KVxuXHQpO1xufTtcbi8vIFRoZSBwcm9wZXJ0eUluZm8gdXNlZCBpbnRlcm5hbGx5IHdpdGhpbiBGRVxuZXhwb3J0IHR5cGUgUHJvcGVydHlJbmZvID0ge1xuXHRrZXk/OiBzdHJpbmc7XG5cdGFubm90YXRpb25QYXRoPzogc3RyaW5nO1xuXHRjb25kaXRpb25QYXRoPzogc3RyaW5nO1xuXHRuYW1lOiBzdHJpbmc7XG5cdHBhdGg/OiBzdHJpbmc7XG5cdGxhYmVsPzogc3RyaW5nO1xuXHR0b29sdGlwPzogc3RyaW5nO1xuXHR2aXNpYmxlPzogYm9vbGVhbjtcblx0Z3JvdXBMYWJlbD86IHN0cmluZztcblx0bWF4Q29uZGl0aW9ucz86IG51bWJlcjtcblx0ZGF0YVR5cGU/OiBzdHJpbmc7XG5cdGdyb3VwPzogc3RyaW5nO1xuXHRoaWRkZW5GaWx0ZXI/OiBib29sZWFuO1xuXHRkaXNwbGF5Pzogc3RyaW5nO1xuXHRpc1BhcmFtZXRlcj86IGJvb2xlYW47XG5cdGNhc2VTZW5zaXRpdmU/OiBib29sZWFuO1xuXHRhdmFpbGFiaWxpdHk/OiBBdmFpbGFiaWxpdHlUeXBlO1xuXHRwb3NpdGlvbj86IFBvc2l0aW9uO1xuXHR0eXBlPzogc3RyaW5nO1xuXHR0ZW1wbGF0ZT86IHN0cmluZztcblx0bWVudT86IHN0cmluZztcblx0cmVxdWlyZWQ/OiBib29sZWFuO1xuXHRmaWx0ZXJFeHByZXNzaW9uPzogc3RyaW5nO1xuXHRpc0N1c3RvbUZpbHRlcj86IGJvb2xlYW47XG5cdGNvbnN0cmFpbnRzPzogb2JqZWN0O1xuXHRmb3JtYXRPcHRpb25zPzogb2JqZWN0O1xuXHRzZXR0aW5ncz86IEZpbHRlclNldHRpbmdzO1xuXHR2aXN1YWxGaWx0ZXI/OiBWaXN1YWxGaWx0ZXJzO1xuXHR0eXBlQ29uZmlnPzogVHlwZUNvbmZpZztcblx0ZmlsdGVyYWJsZT86IGJvb2xlYW47XG59O1xuXG4vLyBUaGUgcHJvcGVydHlJbmZvIHdlIHNoYXJlIHdpdGggTURDXG5leHBvcnQgdHlwZSBQcm9wZXJ0eUluZm9FeHRlcm5hbCA9IHtcblx0a2V5OiBzdHJpbmc7XG5cdGxhYmVsOiBzdHJpbmc7XG5cdGRhdGFUeXBlOiBzdHJpbmc7XG5cdGNhc2VTZW5zaXRpdmU/OiBib29sZWFuO1xuXHRncm91cExhYmVsPzogc3RyaW5nO1xuXHRncm91cD86IHN0cmluZztcblx0Y29uc3RyYWludHM/OiBvYmplY3Q7XG5cdGZvcm1hdE9wdGlvbnM/OiBvYmplY3Q7XG5cdG1heENvbmRpdGlvbnM/OiBudW1iZXI7XG5cdHZpc2libGU/OiBib29sZWFuO1xuXHR0b29sdGlwPzogc3RyaW5nO1xuXHRwYXRoPzogc3RyaW5nO1xuXHRyZXF1aXJlZD86IGJvb2xlYW47XG5cdGhpZGRlbkZpbHRlcj86IGJvb2xlYW47XG59O1xuY29uc3QgX2ZldGNoQmFzaWNQcm9wZXJ0eUluZm8gPSBmdW5jdGlvbiAob0ZpbHRlckZpZWxkSW5mbzogRmlsdGVyRmllbGQgfCBQcm9wZXJ0eUluZm8pOiBQcm9wZXJ0eUluZm8ge1xuXHRyZXR1cm4ge1xuXHRcdGtleTogb0ZpbHRlckZpZWxkSW5mby5rZXksXG5cdFx0YW5ub3RhdGlvblBhdGg6IG9GaWx0ZXJGaWVsZEluZm8uYW5ub3RhdGlvblBhdGgsXG5cdFx0Y29uZGl0aW9uUGF0aDogb0ZpbHRlckZpZWxkSW5mby5jb25kaXRpb25QYXRoLFxuXHRcdG5hbWU6IG9GaWx0ZXJGaWVsZEluZm8uY29uZGl0aW9uUGF0aCEsXG5cdFx0bGFiZWw6IG9GaWx0ZXJGaWVsZEluZm8ubGFiZWwsXG5cdFx0aGlkZGVuRmlsdGVyOiBvRmlsdGVyRmllbGRJbmZvLmF2YWlsYWJpbGl0eSA9PT0gXCJIaWRkZW5cIixcblx0XHRkaXNwbGF5OiBcIlZhbHVlXCIsXG5cdFx0aXNQYXJhbWV0ZXI6IG9GaWx0ZXJGaWVsZEluZm8uaXNQYXJhbWV0ZXIsXG5cdFx0Y2FzZVNlbnNpdGl2ZTogb0ZpbHRlckZpZWxkSW5mby5jYXNlU2Vuc2l0aXZlLFxuXHRcdGF2YWlsYWJpbGl0eTogb0ZpbHRlckZpZWxkSW5mby5hdmFpbGFiaWxpdHksXG5cdFx0cG9zaXRpb246IG9GaWx0ZXJGaWVsZEluZm8ucG9zaXRpb24sXG5cdFx0dHlwZTogb0ZpbHRlckZpZWxkSW5mby50eXBlLFxuXHRcdHRlbXBsYXRlOiBvRmlsdGVyRmllbGRJbmZvLnRlbXBsYXRlLFxuXHRcdG1lbnU6IG9GaWx0ZXJGaWVsZEluZm8ubWVudSxcblx0XHRyZXF1aXJlZDogb0ZpbHRlckZpZWxkSW5mby5yZXF1aXJlZCxcblx0XHRpc0N1c3RvbUZpbHRlcjogb0ZpbHRlckZpZWxkSW5mby5zZXR0aW5ncz8uaXNDdXN0b21GaWx0ZXJcblx0fTtcbn07XG5cbmNvbnN0IF9nZXRNaXNzaW5nTGFiZWxGb3JNYW5pZmVzdEZpbHRlckZpZWxkcyA9IGZ1bmN0aW9uIChcblx0ZmlsdGVyRmllbGRzOiBNYW5pZmVzdEZpbHRlckZpZWxkW10sXG5cdG1hbmlmZXN0RmlsdGVyRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21FbGVtZW50RmlsdGVyRmllbGQ+XG4pOiB2b2lkIHtcblx0ZmlsdGVyRmllbGRzLmZvckVhY2goKGZpbHRlckZpZWxkKSA9PiB7XG5cdFx0aWYgKG1hbmlmZXN0RmlsdGVyRmllbGRzLmhhc093blByb3BlcnR5KGZpbHRlckZpZWxkLmtleSkgJiYgIW1hbmlmZXN0RmlsdGVyRmllbGRzW2ZpbHRlckZpZWxkLmtleV0ubGFiZWwpIHtcblx0XHRcdG1hbmlmZXN0RmlsdGVyRmllbGRzW2ZpbHRlckZpZWxkLmtleV0ubGFiZWwgPSBmaWx0ZXJGaWVsZC5sYWJlbDtcblx0XHR9XG5cdH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGRpc3BsYXlNb2RlID0gZnVuY3Rpb24gKFxuXHRvUHJvcGVydHlBbm5vdGF0aW9uczogUHJvcGVydHlBbm5vdGF0aW9ucyB8IHVuZGVmaW5lZCxcblx0b0NvbGxlY3Rpb25Bbm5vdGF0aW9uczogRW50aXR5VHlwZUFubm90YXRpb25zIHwgdW5kZWZpbmVkXG4pOiBzdHJpbmcge1xuXHRjb25zdCBvVGV4dEFubm90YXRpb24gPSBvUHJvcGVydHlBbm5vdGF0aW9ucz8uQ29tbW9uPy5UZXh0LFxuXHRcdG9UZXh0QXJyYW5nbWVudEFubm90YXRpb24gPVxuXHRcdFx0b1RleHRBbm5vdGF0aW9uICYmXG5cdFx0XHQoKG9Qcm9wZXJ0eUFubm90YXRpb25zICYmIG9Qcm9wZXJ0eUFubm90YXRpb25zPy5Db21tb24/LlRleHQ/LmFubm90YXRpb25zPy5VST8uVGV4dEFycmFuZ2VtZW50KSB8fFxuXHRcdFx0XHQob0NvbGxlY3Rpb25Bbm5vdGF0aW9ucyAmJiBvQ29sbGVjdGlvbkFubm90YXRpb25zPy5VST8uVGV4dEFycmFuZ2VtZW50KSk7XG5cblx0aWYgKG9UZXh0QXJyYW5nbWVudEFubm90YXRpb24pIHtcblx0XHRpZiAob1RleHRBcnJhbmdtZW50QW5ub3RhdGlvbi52YWx1ZU9mKCkgPT09IFwiVUkuVGV4dEFycmFuZ2VtZW50VHlwZS9UZXh0T25seVwiKSB7XG5cdFx0XHRyZXR1cm4gXCJEZXNjcmlwdGlvblwiO1xuXHRcdH0gZWxzZSBpZiAob1RleHRBcnJhbmdtZW50QW5ub3RhdGlvbi52YWx1ZU9mKCkgPT09IFwiVUkuVGV4dEFycmFuZ2VtZW50VHlwZS9UZXh0TGFzdFwiKSB7XG5cdFx0XHRyZXR1cm4gXCJWYWx1ZURlc2NyaXB0aW9uXCI7XG5cdFx0fVxuXHRcdHJldHVybiBcIkRlc2NyaXB0aW9uVmFsdWVcIjsgLy9UZXh0Rmlyc3Rcblx0fVxuXHRyZXR1cm4gb1RleHRBbm5vdGF0aW9uID8gXCJEZXNjcmlwdGlvblZhbHVlXCIgOiBcIlZhbHVlXCI7XG59O1xuXG5leHBvcnQgY29uc3QgZmV0Y2hQcm9wZXJ0eUluZm8gPSBmdW5jdGlvbiAoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0b0ZpbHRlckZpZWxkSW5mbzogRmlsdGVyRmllbGQgfCBQcm9wZXJ0eUluZm8sXG5cdG9UeXBlQ29uZmlnOiBQYXJ0aWFsPFByb3BlcnR5VHlwZUNvbmZpZz5cbik6IFByb3BlcnR5SW5mbyB7XG5cdGxldCBvUHJvcGVydHlJbmZvID0gX2ZldGNoQmFzaWNQcm9wZXJ0eUluZm8ob0ZpbHRlckZpZWxkSW5mbyk7XG5cdGNvbnN0IHNBbm5vdGF0aW9uUGF0aCA9IG9GaWx0ZXJGaWVsZEluZm8uYW5ub3RhdGlvblBhdGg7XG5cblx0aWYgKCFzQW5ub3RhdGlvblBhdGgpIHtcblx0XHRyZXR1cm4gb1Byb3BlcnR5SW5mbztcblx0fVxuXHRjb25zdCB0YXJnZXRQcm9wZXJ0eU9iamVjdCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVyQ29udGV4dEZvcjxQcm9wZXJ0eT4oc0Fubm90YXRpb25QYXRoKS5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkudGFyZ2V0T2JqZWN0O1xuXG5cdGNvbnN0IG9Qcm9wZXJ0eUFubm90YXRpb25zID0gdGFyZ2V0UHJvcGVydHlPYmplY3Q/LmFubm90YXRpb25zO1xuXHRjb25zdCBvQ29sbGVjdGlvbkFubm90YXRpb25zID0gY29udmVydGVyQ29udGV4dD8uZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM7XG5cblx0Y29uc3Qgb0Zvcm1hdE9wdGlvbnMgPSBvVHlwZUNvbmZpZy5mb3JtYXRPcHRpb25zO1xuXHRjb25zdCBvQ29uc3RyYWludHMgPSBvVHlwZUNvbmZpZy5jb25zdHJhaW50cztcblxuXHRjb25zdCB0b29sdGlwID0gb1Byb3BlcnR5QW5ub3RhdGlvbnM/LkNvbW1vbj8uUXVpY2tJbmZvPy50b1N0cmluZygpO1xuXG5cdG9Qcm9wZXJ0eUluZm8gPSBPYmplY3QuYXNzaWduKG9Qcm9wZXJ0eUluZm8sIHtcblx0XHRmb3JtYXRPcHRpb25zOiBvRm9ybWF0T3B0aW9ucyxcblx0XHRjb25zdHJhaW50czogb0NvbnN0cmFpbnRzLFxuXHRcdGRpc3BsYXk6IGRpc3BsYXlNb2RlKG9Qcm9wZXJ0eUFubm90YXRpb25zLCBvQ29sbGVjdGlvbkFubm90YXRpb25zKSxcblx0XHR0b29sdGlwOiB0b29sdGlwXG5cdH0pO1xuXHRyZXR1cm4gb1Byb3BlcnR5SW5mbztcbn07XG5cbmV4cG9ydCBjb25zdCBpc011bHRpVmFsdWUgPSBmdW5jdGlvbiAob1Byb3BlcnR5OiBQcm9wZXJ0eUluZm8pOiBib29sZWFuIHtcblx0bGV0IGJJc011bHRpVmFsdWUgPSB0cnVlO1xuXHQvL1NpbmdsZVZhbHVlIHwgTXVsdGlWYWx1ZSB8IFNpbmdsZVJhbmdlIHwgTXVsdGlSYW5nZSB8IFNlYXJjaEV4cHJlc3Npb24gfCBNdWx0aVJhbmdlT3JTZWFyY2hFeHByZXNzaW9uXG5cdHN3aXRjaCAob1Byb3BlcnR5LmZpbHRlckV4cHJlc3Npb24pIHtcblx0XHRjYXNlIFwiU2VhcmNoRXhwcmVzc2lvblwiOlxuXHRcdGNhc2UgXCJTaW5nbGVSYW5nZVwiOlxuXHRcdGNhc2UgXCJTaW5nbGVWYWx1ZVwiOlxuXHRcdFx0YklzTXVsdGlWYWx1ZSA9IGZhbHNlO1xuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdGJyZWFrO1xuXHR9XG5cdGlmIChvUHJvcGVydHkudHlwZSAmJiBvUHJvcGVydHkudHlwZS5pbmRleE9mKFwiQm9vbGVhblwiKSA+IDApIHtcblx0XHRiSXNNdWx0aVZhbHVlID0gZmFsc2U7XG5cdH1cblx0cmV0dXJuIGJJc011bHRpVmFsdWU7XG59O1xuXG5jb25zdCBfaXNGaWx0ZXJhYmxlTmF2aWdhdGlvblByb3BlcnR5ID0gZnVuY3Rpb24gKFxuXHRlbnRyeTogRGF0YUZpZWxkQWJzdHJhY3RUeXBlc1xuKTogZW50cnkgaXMgQW5ub3RhdGlvblRlcm08RGF0YUZpZWxkIHwgRGF0YUZpZWxkV2l0aFVybCB8IERhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aD4ge1xuXHRyZXR1cm4gKFxuXHRcdChlbnRyeS4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkIHx8XG5cdFx0XHRlbnRyeS4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aFVybCB8fFxuXHRcdFx0ZW50cnkuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aCkgJiZcblx0XHRlbnRyeS5WYWx1ZS5wYXRoPy5pbmNsdWRlcyhcIi9cIilcblx0KTtcbn07XG5cbi8qKlxuICogQWRkcyB0aGUgYWRkaXRpb25hbCBwcm9wZXJ0eSB3aGljaCByZWZlcmVuY2VzIHRvIHRoZSB1bml0LCB0aW1lem9uZSwgdGV4dEFycmFuZ2VtZW50IG9yIGN1cnJlbmN5IGZyb20gYSBkYXRhIGZpZWxkLlxuICogQHBhcmFtIGRhdGFGaWVsZCBUaGUgZGF0YSBmaWVsZCB0byBiZSBjb25zaWRlcmVkXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSBuYXZQcm9wZXJ0aWVzIFRoZSBsaXN0IG9mIG5hdmlnYXRpb24gcHJvcGVydGllc1xuICovXG5jb25zdCBhZGRDaGlsZE5hdmlnYXRpb25Qcm9wZXJ0aWVzID0gZnVuY3Rpb24gKFxuXHRkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0bmF2UHJvcGVydGllczogc3RyaW5nW11cbik6IHZvaWQge1xuXHRjb25zdCB0YXJnZXRQcm9wZXJ0eSA9IChkYXRhRmllbGQgYXMgRGF0YUZpZWxkKS5WYWx1ZT8uJHRhcmdldDtcblx0aWYgKHRhcmdldFByb3BlcnR5KSB7XG5cdFx0Y29uc3QgYWRkaXRpb25hbFByb3BlcnR5UGF0aCA9XG5cdFx0XHRnZXRBc3NvY2lhdGVkVGV4dFByb3BlcnR5UGF0aCh0YXJnZXRQcm9wZXJ0eSkgfHxcblx0XHRcdGdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5UGF0aCh0YXJnZXRQcm9wZXJ0eSkgfHxcblx0XHRcdGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHlQYXRoKHRhcmdldFByb3BlcnR5KSB8fFxuXHRcdFx0Z2V0QXNzb2NpYXRlZFRpbWV6b25lUHJvcGVydHlQYXRoKHRhcmdldFByb3BlcnR5KTtcblx0XHRjb25zdCBuYXZpZ2F0aW9uUHJvcGVydHkgPSBhZGRpdGlvbmFsUHJvcGVydHlQYXRoXG5cdFx0XHQ/IGVuaGFuY2VEYXRhTW9kZWxQYXRoKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLCBhZGRpdGlvbmFsUHJvcGVydHlQYXRoKS5uYXZpZ2F0aW9uUHJvcGVydGllc1xuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0aWYgKG5hdmlnYXRpb25Qcm9wZXJ0eT8ubGVuZ3RoKSB7XG5cdFx0XHRjb25zdCBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoID0gbmF2aWdhdGlvblByb3BlcnR5WzBdLm5hbWU7XG5cdFx0XHRpZiAoIW5hdlByb3BlcnRpZXMuaW5jbHVkZXMobmF2aWdhdGlvblByb3BlcnR5UGF0aCkpIHtcblx0XHRcdFx0bmF2UHJvcGVydGllcy5wdXNoKG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufTtcblxuLyoqXG4gKiBHZXRzIHVzZWQgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzIGZvciBhdmFpbGFibGUgZGF0YUZpZWxkLlxuICogQHBhcmFtIG5hdlByb3BlcnRpZXMgVGhlIGxpc3Qgb2YgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0gZGF0YUZpZWxkIFRoZSBkYXRhIGZpZWxkIHRvIGJlIGNvbnNpZGVyZWRcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgVGhlIGxpc3Qgb2YgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzXG4gKi9cbmNvbnN0IGdldE5hdmlnYXRpb25Qcm9wZXJ0aWVzUmVjdXJzaXZlbHkgPSBmdW5jdGlvbiAoXG5cdG5hdlByb3BlcnRpZXM6IHN0cmluZ1tdLFxuXHRkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogc3RyaW5nW10ge1xuXHRzd2l0Y2ggKGRhdGFGaWVsZC4kVHlwZSkge1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbjpcblx0XHRcdGlmIChkYXRhRmllbGQuVGFyZ2V0Py4kdGFyZ2V0Py4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRmllbGRHcm91cFR5cGUpIHtcblx0XHRcdFx0ZGF0YUZpZWxkLlRhcmdldC4kdGFyZ2V0LkRhdGE/LmZvckVhY2goKGlubmVyRGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKSA9PiB7XG5cdFx0XHRcdFx0Z2V0TmF2aWdhdGlvblByb3BlcnRpZXNSZWN1cnNpdmVseShuYXZQcm9wZXJ0aWVzLCBpbm5lckRhdGFGaWVsZCwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGQ6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoVXJsOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoOlxuXHRcdFx0aWYgKF9pc0ZpbHRlcmFibGVOYXZpZ2F0aW9uUHJvcGVydHkoZGF0YUZpZWxkKSkge1xuXHRcdFx0XHRjb25zdCBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoID0gZ2V0UmVsYXRpdmVQYXRocyhcblx0XHRcdFx0XHRlbmhhbmNlRGF0YU1vZGVsUGF0aChjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSwgZGF0YUZpZWxkLlZhbHVlLnBhdGgpLFxuXHRcdFx0XHRcdHRydWVcblx0XHRcdFx0KS5qb2luKFwiL1wiKTtcblx0XHRcdFx0aWYgKCFuYXZQcm9wZXJ0aWVzLmluY2x1ZGVzKG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgpKSB7XG5cdFx0XHRcdFx0bmF2UHJvcGVydGllcy5wdXNoKG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHQvLyBBZGRpdGlvbmFsIHByb3BlcnR5IGZyb20gdGV4dCBhcnJhbmdlbWVudC91bml0cy9jdXJyZW5jaWVzL3RpbWV6b25lLi4uXG5cdFx0XHRhZGRDaGlsZE5hdmlnYXRpb25Qcm9wZXJ0aWVzKGRhdGFGaWVsZCwgY29udmVydGVyQ29udGV4dCwgbmF2UHJvcGVydGllcyk7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0Ly8gT3RoZXIgdHlwZXMgYXJlIG5vdCBzdXBwb3J0ZWRcblx0XHRcdGJyZWFrO1xuXHR9XG5cdHJldHVybiBuYXZQcm9wZXJ0aWVzO1xufTtcblxuY29uc3QgZ2V0QW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhID0gZnVuY3Rpb24gKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGxyVGFibGVzOiBUYWJsZVZpc3VhbGl6YXRpb25bXSA9IFtdLFxuXHRhbm5vdGF0aW9uUGF0aCA9IFwiXCIsXG5cdGluY2x1ZGVIaWRkZW4gPSBmYWxzZSxcblx0bGluZUl0ZW1UZXJtPzogc3RyaW5nXG4pOiB7XG5cdGV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllczogU2V0PHN0cmluZz47XG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGU7XG5cdGFubm90YXRlZFNlbGVjdGlvbkZpZWxkczogUHJvcGVydHlQYXRoW107XG5cdGZpbHRlckZpZWxkczogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGQ+O1xuXHRwcm9wZXJ0eUluZm9GaWVsZHM6IEZpbHRlckZpZWxkW107XG5cdGRlZmF1bHRGaWx0ZXJGaWVsZHM6IEZpbHRlckZpZWxkW107XG59IHtcblx0Ly8gY3JlYXRlIGEgbWFwIG9mIHByb3BlcnRpZXMgdG8gYmUgdXNlZCBpbiBzZWxlY3Rpb24gdmFyaWFudHMgZGVmaW5lZCBpbiB0aGUgZGlmZmVyZW50IHZpc3VhbGl6YXRpb25zIGFuZCBkaWZmZXJlbnQgdmlld3MgKG11bHRpIHRhYmxlIG1vZGUpXG5cdGNvbnN0IGV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllcyA9IGdldEV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllcyhsclRhYmxlcywgY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IGVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblx0Ly9GaWx0ZXJzIHdoaWNoIGhhcyB0byBiZSBhZGRlZCB3aGljaCBpcyBwYXJ0IG9mIFNWL0RlZmF1bHQgYW5ub3RhdGlvbnMgYnV0IG5vdCBwcmVzZW50IGluIHRoZSBTZWxlY3Rpb25GaWVsZHNcblx0Y29uc3QgYW5ub3RhdGVkU2VsZWN0aW9uRmllbGRzID0gKChhbm5vdGF0aW9uUGF0aCAmJiBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGVBbm5vdGF0aW9uKGFubm90YXRpb25QYXRoKT8uYW5ub3RhdGlvbikgfHxcblx0XHRlbnRpdHlUeXBlLmFubm90YXRpb25zPy5VST8uU2VsZWN0aW9uRmllbGRzIHx8XG5cdFx0W10pIGFzIFByb3BlcnR5UGF0aFtdO1xuXG5cdGxldCBuYXZQcm9wZXJ0aWVzOiBzdHJpbmdbXSA9IFtdO1xuXHRpZiAobHJUYWJsZXMubGVuZ3RoID09PSAwICYmICEhbGluZUl0ZW1UZXJtKSB7XG5cdFx0KGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZUFubm90YXRpb24obGluZUl0ZW1UZXJtKS5hbm5vdGF0aW9uIGFzIExpbmVJdGVtKT8uZm9yRWFjaCgoZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKSA9PiB7XG5cdFx0XHRuYXZQcm9wZXJ0aWVzID0gZ2V0TmF2aWdhdGlvblByb3BlcnRpZXNSZWN1cnNpdmVseShuYXZQcm9wZXJ0aWVzLCBkYXRhRmllbGQsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRcdH0pO1xuXHR9XG5cblx0aWYgKE1vZGVsSGVscGVyLmlzRHJhZnRSb290KGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCkpKSB7XG5cdFx0bmF2UHJvcGVydGllcy5wdXNoKFxuXHRcdFx0XCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9DcmVhdGlvbkRhdGVUaW1lXCIsXG5cdFx0XHRcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhL0NyZWF0ZWRCeVVzZXJcIixcblx0XHRcdFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEvTGFzdENoYW5nZURhdGVUaW1lXCIsXG5cdFx0XHRcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhL0xhc3RDaGFuZ2VkQnlVc2VyXCJcblx0XHQpO1xuXHR9XG5cblx0Ly8gY3JlYXRlIGEgbWFwIG9mIGFsbCBwb3RlbnRpYWwgZmlsdGVyIGZpZWxkcyBiYXNlZCBvbi4uLlxuXHRjb25zdCBmaWx0ZXJGaWVsZHM6IFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkPiA9IHtcblx0XHQvLyAuLi5ub24gaGlkZGVuIHByb3BlcnRpZXMgb2YgdGhlIGVudGl0eVxuXHRcdC4uLl9nZXRTZWxlY3Rpb25GaWVsZHMoZW50aXR5VHlwZSwgXCJcIiwgZW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzLCBpbmNsdWRlSGlkZGVuLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHQvLyAuLi4gbm9uIGhpZGRlbiBwcm9wZXJ0aWVzIG9mIG5hdmlnYXRpb24gcHJvcGVydGllc1xuXHRcdC4uLl9nZXRTZWxlY3Rpb25GaWVsZHNCeVBhdGgoZW50aXR5VHlwZSwgbmF2UHJvcGVydGllcywgZmFsc2UsIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdC8vIC4uLmFkZGl0aW9uYWwgbWFuaWZlc3QgZGVmaW5lZCBuYXZpZ2F0aW9uIHByb3BlcnRpZXNcblx0XHQuLi5fZ2V0U2VsZWN0aW9uRmllbGRzQnlQYXRoKFxuXHRcdFx0ZW50aXR5VHlwZSxcblx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuZ2V0RmlsdGVyQ29uZmlndXJhdGlvbigpLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLFxuXHRcdFx0aW5jbHVkZUhpZGRlbixcblx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHQpXG5cdH07XG5cdGxldCBhU2VsZWN0T3B0aW9uczogU2VsZWN0T3B0aW9uVHlwZVtdID0gW107XG5cdGNvbnN0IHNlbGVjdGlvblZhcmlhbnQgPSBnZXRTZWxlY3Rpb25WYXJpYW50KGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRpZiAoc2VsZWN0aW9uVmFyaWFudCkge1xuXHRcdGFTZWxlY3RPcHRpb25zID0gc2VsZWN0aW9uVmFyaWFudC5TZWxlY3RPcHRpb25zO1xuXHR9XG5cblx0Y29uc3QgcHJvcGVydHlJbmZvRmllbGRzOiBGaWx0ZXJGaWVsZFtdID1cblx0XHRhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHM/LnJlZHVjZSgoc2VsZWN0aW9uRmllbGRzOiBGaWx0ZXJGaWVsZFtdLCBzZWxlY3Rpb25GaWVsZCkgPT4ge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlQYXRoID0gc2VsZWN0aW9uRmllbGQudmFsdWU7XG5cdFx0XHRpZiAoIWV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllcy5oYXMocHJvcGVydHlQYXRoKSkge1xuXHRcdFx0XHRsZXQgbmF2aWdhdGlvblBhdGg6IHN0cmluZztcblx0XHRcdFx0aWYgKGFubm90YXRpb25QYXRoPy5zdGFydHNXaXRoKFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlNlbGVjdGlvbkZpZWxkc1wiKSkge1xuXHRcdFx0XHRcdG5hdmlnYXRpb25QYXRoID0gXCJcIjtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRuYXZpZ2F0aW9uUGF0aCA9IGFubm90YXRpb25QYXRoPy5zcGxpdChcIi9AY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuU2VsZWN0aW9uRmllbGRzXCIpWzBdO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgZmlsdGVyUHJvcGVydHlQYXRoID0gbmF2aWdhdGlvblBhdGggPyBuYXZpZ2F0aW9uUGF0aCArIFwiL1wiICsgcHJvcGVydHlQYXRoIDogcHJvcGVydHlQYXRoO1xuXHRcdFx0XHRjb25zdCBmaWx0ZXJGaWVsZDogRmlsdGVyRmllbGQgfCB1bmRlZmluZWQgPSBfZ2V0RmlsdGVyRmllbGQoXG5cdFx0XHRcdFx0ZmlsdGVyRmllbGRzLFxuXHRcdFx0XHRcdGZpbHRlclByb3BlcnR5UGF0aCxcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdGVudGl0eVR5cGVcblx0XHRcdFx0KTtcblx0XHRcdFx0aWYgKGZpbHRlckZpZWxkKSB7XG5cdFx0XHRcdFx0ZmlsdGVyRmllbGQuZ3JvdXAgPSBcIlwiO1xuXHRcdFx0XHRcdGZpbHRlckZpZWxkLmdyb3VwTGFiZWwgPSBcIlwiO1xuXHRcdFx0XHRcdHNlbGVjdGlvbkZpZWxkcy5wdXNoKGZpbHRlckZpZWxkKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHNlbGVjdGlvbkZpZWxkcztcblx0XHR9LCBbXSkgfHwgW107XG5cblx0Y29uc3QgZGVmYXVsdEZpbHRlckZpZWxkcyA9IF9nZXREZWZhdWx0RmlsdGVyRmllbGRzKFxuXHRcdGFTZWxlY3RPcHRpb25zLFxuXHRcdGVudGl0eVR5cGUsXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRleGNsdWRlZEZpbHRlclByb3BlcnRpZXMsXG5cdFx0YW5ub3RhdGVkU2VsZWN0aW9uRmllbGRzXG5cdCk7XG5cblx0cmV0dXJuIHtcblx0XHRleGNsdWRlZEZpbHRlclByb3BlcnRpZXM6IGV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllcyxcblx0XHRlbnRpdHlUeXBlOiBlbnRpdHlUeXBlLFxuXHRcdGFubm90YXRlZFNlbGVjdGlvbkZpZWxkczogYW5ub3RhdGVkU2VsZWN0aW9uRmllbGRzLFxuXHRcdGZpbHRlckZpZWxkczogZmlsdGVyRmllbGRzLFxuXHRcdHByb3BlcnR5SW5mb0ZpZWxkczogcHJvcGVydHlJbmZvRmllbGRzLFxuXHRcdGRlZmF1bHRGaWx0ZXJGaWVsZHM6IGRlZmF1bHRGaWx0ZXJGaWVsZHNcblx0fTtcbn07XG5cbmV4cG9ydCBjb25zdCBmZXRjaFR5cGVDb25maWcgPSBmdW5jdGlvbiAocHJvcGVydHk/OiBQcm9wZXJ0eSk6IFByb3BlcnR5VHlwZUNvbmZpZyB7XG5cdGNvbnN0IHR5cGVDb25maWcgPSBnZXRUeXBlQ29uZmlnKHByb3BlcnR5KSBhcyBQcm9wZXJ0eVR5cGVDb25maWc7XG5cdGlmIChwcm9wZXJ0eT8udHlwZSA9PT0gc0VkbVN0cmluZyAmJiB0eXBlQ29uZmlnLmNvbnN0cmFpbnRzPy5udWxsYWJsZSAhPT0gZmFsc2UpIHtcblx0XHR0eXBlQ29uZmlnLmZvcm1hdE9wdGlvbnMgPSB7XG5cdFx0XHQuLi50eXBlQ29uZmlnLmZvcm1hdE9wdGlvbnMsXG5cdFx0XHRwYXJzZUtlZXBzRW1wdHlTdHJpbmc6IGZhbHNlXG5cdFx0fTtcblx0fVxuXHRyZXR1cm4gdHlwZUNvbmZpZztcbn07XG5cbmV4cG9ydCBjb25zdCBhc3NpZ25EYXRhVHlwZVRvUHJvcGVydHlJbmZvID0gZnVuY3Rpb24gKFxuXHRwcm9wZXJ0eUluZm9GaWVsZDogRmlsdGVyRmllbGQgfCBQcm9wZXJ0eUluZm8sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0YVJlcXVpcmVkUHJvcHM6IHVua25vd25bXSxcblx0YVR5cGVDb25maWc6IFJlY29yZDxzdHJpbmcsIFBhcnRpYWw8UHJvcGVydHlUeXBlQ29uZmlnPj5cbik6IFByb3BlcnR5SW5mbyB7XG5cdGxldCBvUHJvcGVydHlJbmZvID0gZmV0Y2hQcm9wZXJ0eUluZm8oY29udmVydGVyQ29udGV4dCwgcHJvcGVydHlJbmZvRmllbGQsIGFUeXBlQ29uZmlnW3Byb3BlcnR5SW5mb0ZpZWxkLmtleSFdKSxcblx0XHRzUHJvcGVydHlQYXRoID0gXCJcIjtcblx0aWYgKHByb3BlcnR5SW5mb0ZpZWxkLmNvbmRpdGlvblBhdGgpIHtcblx0XHRzUHJvcGVydHlQYXRoID0gcHJvcGVydHlJbmZvRmllbGQuY29uZGl0aW9uUGF0aC5yZXBsYWNlKC9cXCt8XFwqL2csIFwiXCIpO1xuXHR9XG5cdGlmIChvUHJvcGVydHlJbmZvKSB7XG5cdFx0b1Byb3BlcnR5SW5mbyA9IE9iamVjdC5hc3NpZ24ob1Byb3BlcnR5SW5mbywge1xuXHRcdFx0bWF4Q29uZGl0aW9uczogb1Byb3BlcnR5SW5mby5pc1BhcmFtZXRlclxuXHRcdFx0XHQ/IDFcblx0XHRcdFx0OiBnZXRNYXhDb25kaXRpb25zKGVuaGFuY2VEYXRhTW9kZWxQYXRoPFByb3BlcnR5Pihjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSwgc1Byb3BlcnR5UGF0aCkpLFxuXHRcdFx0cmVxdWlyZWQ6IHByb3BlcnR5SW5mb0ZpZWxkLnJlcXVpcmVkID8/IChvUHJvcGVydHlJbmZvLmlzUGFyYW1ldGVyIHx8IGFSZXF1aXJlZFByb3BzLmluY2x1ZGVzKHNQcm9wZXJ0eVBhdGgpKSxcblx0XHRcdGNhc2VTZW5zaXRpdmU6IGlzRmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZShjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdGRhdGFUeXBlOiBhVHlwZUNvbmZpZ1twcm9wZXJ0eUluZm9GaWVsZC5rZXkhXS50eXBlXG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIG9Qcm9wZXJ0eUluZm87XG59O1xuXG5leHBvcnQgY29uc3QgcHJvY2Vzc1NlbGVjdGlvbkZpZWxkcyA9IGZ1bmN0aW9uIChcblx0cHJvcGVydHlJbmZvRmllbGRzOiBGaWx0ZXJGaWVsZFtdLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGRlZmF1bHRWYWx1ZVByb3BlcnR5RmllbGRzPzogRmlsdGVyRmllbGRbXVxuKTogUHJvcGVydHlJbmZvW10ge1xuXHQvL2dldCBUeXBlQ29uZmlnIGZ1bmN0aW9uXG5cdGNvbnN0IGFUeXBlQ29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBQYXJ0aWFsPFByb3BlcnR5VHlwZUNvbmZpZz4+ID0ge307XG5cblx0aWYgKGRlZmF1bHRWYWx1ZVByb3BlcnR5RmllbGRzKSB7XG5cdFx0cHJvcGVydHlJbmZvRmllbGRzID0gcHJvcGVydHlJbmZvRmllbGRzLmNvbmNhdChkZWZhdWx0VmFsdWVQcm9wZXJ0eUZpZWxkcyk7XG5cdH1cblx0Ly9hZGQgdHlwZUNvbmZpZ1xuXHRwcm9wZXJ0eUluZm9GaWVsZHMuZm9yRWFjaChmdW5jdGlvbiAocGFyYW1ldGVyRmllbGQpIHtcblx0XHRpZiAocGFyYW1ldGVyRmllbGQuYW5ub3RhdGlvblBhdGgpIHtcblx0XHRcdGNvbnN0IHByb3BlcnR5Q29udmVydHlDb250ZXh0ID0gY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yPFByb3BlcnR5PihwYXJhbWV0ZXJGaWVsZC5hbm5vdGF0aW9uUGF0aCk7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVRhcmdldE9iamVjdCA9IHByb3BlcnR5Q29udmVydHlDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKS50YXJnZXRPYmplY3Q7XG5cdFx0XHRjb25zdCBvVHlwZUNvbmZpZyA9IGZldGNoVHlwZUNvbmZpZyhwcm9wZXJ0eVRhcmdldE9iamVjdCk7XG5cdFx0XHRhVHlwZUNvbmZpZ1twYXJhbWV0ZXJGaWVsZC5rZXldID0gb1R5cGVDb25maWc7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGFUeXBlQ29uZmlnW3BhcmFtZXRlckZpZWxkLmtleV0gPSB7IHR5cGU6IHNTdHJpbmdEYXRhVHlwZSB9O1xuXHRcdH1cblx0fSk7XG5cblx0Ly8gZmlsdGVyUmVzdHJpY3Rpb25zXG5cdGNvbnN0IGVudGl0eVNldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk7XG5cdGNvbnN0IG9GaWx0ZXJSZXN0cmljdGlvbnMgPSBpc0VudGl0eVNldChlbnRpdHlTZXQpID8gZW50aXR5U2V0LmFubm90YXRpb25zLkNhcGFiaWxpdGllcz8uRmlsdGVyUmVzdHJpY3Rpb25zIDogdW5kZWZpbmVkO1xuXHRjb25zdCBvUmV0OiB7XG5cdFx0UmVxdWlyZWRQcm9wZXJ0aWVzPzogc3RyaW5nW107XG5cdFx0Tm9uRmlsdGVyYWJsZVByb3BlcnRpZXM/OiBzdHJpbmdbXTtcblx0fSA9IHt9O1xuXHRvUmV0LlJlcXVpcmVkUHJvcGVydGllcyA9IGdldEZpbHRlclJlc3RyaWN0aW9ucyhvRmlsdGVyUmVzdHJpY3Rpb25zLCBcIlJlcXVpcmVkUHJvcGVydGllc1wiKSB8fCBbXTtcblx0b1JldC5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcyA9IGdldEZpbHRlclJlc3RyaWN0aW9ucyhvRmlsdGVyUmVzdHJpY3Rpb25zLCBcIk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzXCIpIHx8IFtdO1xuXG5cdGNvbnN0IHNFbnRpdHlTZXRQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpO1xuXHRjb25zdCBhUGF0aFBhcnRzID0gc0VudGl0eVNldFBhdGguc3BsaXQoXCIvXCIpO1xuXHRpZiAoYVBhdGhQYXJ0cy5sZW5ndGggPiAyKSB7XG5cdFx0Y29uc3Qgc05hdmlnYXRpb25QYXRoID0gYVBhdGhQYXJ0c1thUGF0aFBhcnRzLmxlbmd0aCAtIDFdO1xuXHRcdGFQYXRoUGFydHMuc3BsaWNlKC0xLCAxKTtcblx0XHRjb25zdCBvTmF2aWdhdGlvblJlc3RyaWN0aW9ucyA9IGdldE5hdmlnYXRpb25SZXN0cmljdGlvbnMoY29udmVydGVyQ29udGV4dCwgc05hdmlnYXRpb25QYXRoKTtcblx0XHRjb25zdCBvTmF2aWdhdGlvbkZpbHRlclJlc3RyaWN0aW9ucyA9IG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zICYmIG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zLkZpbHRlclJlc3RyaWN0aW9ucztcblx0XHRvUmV0LlJlcXVpcmVkUHJvcGVydGllcyA9IG9SZXQuUmVxdWlyZWRQcm9wZXJ0aWVzLmNvbmNhdChcblx0XHRcdGdldEZpbHRlclJlc3RyaWN0aW9ucyhvTmF2aWdhdGlvbkZpbHRlclJlc3RyaWN0aW9ucywgXCJSZXF1aXJlZFByb3BlcnRpZXNcIikgfHwgW11cblx0XHQpO1xuXHRcdG9SZXQuTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMgPSBvUmV0Lk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzLmNvbmNhdChcblx0XHRcdGdldEZpbHRlclJlc3RyaWN0aW9ucyhvTmF2aWdhdGlvbkZpbHRlclJlc3RyaWN0aW9ucywgXCJOb25GaWx0ZXJhYmxlUHJvcGVydGllc1wiKSB8fCBbXVxuXHRcdCk7XG5cdH1cblx0Y29uc3QgYVJlcXVpcmVkUHJvcHMgPSBvUmV0LlJlcXVpcmVkUHJvcGVydGllcztcblx0Y29uc3QgYU5vbkZpbHRlcmFibGVQcm9wcyA9IG9SZXQuTm9uRmlsdGVyYWJsZVByb3BlcnRpZXM7XG5cdGNvbnN0IGFGZXRjaGVkUHJvcGVydGllczogUHJvcGVydHlJbmZvW10gPSBbXTtcblxuXHQvLyBwcm9jZXNzIHRoZSBmaWVsZHMgdG8gYWRkIG5lY2Vzc2FyeSBwcm9wZXJ0aWVzXG5cdHByb3BlcnR5SW5mb0ZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wZXJ0eUluZm9GaWVsZCkge1xuXHRcdGNvbnN0IHNQcm9wZXJ0eVBhdGggPSBwcm9wZXJ0eUluZm9GaWVsZC5jb25kaXRpb25QYXRoLnJlcGxhY2UoL1srKl0vZywgXCJcIik7XG5cdFx0aWYgKCFhTm9uRmlsdGVyYWJsZVByb3BzLmluY2x1ZGVzKHNQcm9wZXJ0eVBhdGgpKSB7XG5cdFx0XHRjb25zdCBvUHJvcGVydHlJbmZvID0gYXNzaWduRGF0YVR5cGVUb1Byb3BlcnR5SW5mbyhwcm9wZXJ0eUluZm9GaWVsZCwgY29udmVydGVyQ29udGV4dCwgYVJlcXVpcmVkUHJvcHMsIGFUeXBlQ29uZmlnKTtcblx0XHRcdGFGZXRjaGVkUHJvcGVydGllcy5wdXNoKG9Qcm9wZXJ0eUluZm8pO1xuXHRcdH1cblx0fSk7XG5cblx0Ly9hZGQgZWRpdFxuXHRjb25zdCBkYXRhTW9kZWxPYmplY3RQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCk7XG5cdGNvbnN0IGlzSGlkZGVuRHJhZnRFbmFibGVkID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5nZXRTYXBGZU1hbmlmZXN0Q29uZmlndXJhdGlvbigpPy5hcHA/LmhpZGVEcmFmdD8uZW5hYmxlZDtcblx0aWYgKE1vZGVsSGVscGVyLmlzT2JqZWN0UGF0aERyYWZ0U3VwcG9ydGVkKGRhdGFNb2RlbE9iamVjdFBhdGgpKSB7XG5cdFx0Y29uc3QgZWRpdFN0YXRlRmlsdGVyID0gZ2V0RWRpdFN0YXRlRmlsdGVyUHJvcGVydHlJbmZvKCk7IC8vIEZpbHRlciBzaG91bGQgYWx3YXlzIGJlIGFkZGVkIGluIHRoZSBwcm9wZXJ0eUluZm8gb3RoZXJ3aXNlIGR1cGxpY2F0ZSByZWNvcmRzIGFyZSBzaG93biBpbiBSQVBcblx0XHRlZGl0U3RhdGVGaWx0ZXIuaGlkZGVuRmlsdGVyID0gaXNIaWRkZW5EcmFmdEVuYWJsZWQgfHwgIXNob3dEcmFmdEVkaXRTdGF0dXMoY29udmVydGVyQ29udGV4dCk7IC8vSWYgZmlsdGVyIHJlc3RyaWN0aW9ucyBhcmUgYWRkZWQgaXQgaXMgc2V0IHRvIHRydWVcblx0XHRhRmV0Y2hlZFByb3BlcnRpZXMucHVzaChlZGl0U3RhdGVGaWx0ZXIpO1xuXHR9XG5cdC8vIGFkZCBzZWFyY2hcblx0Y29uc3Qgc2VhcmNoUmVzdHJpY3Rpb25zID0gZ2V0U2VhcmNoUmVzdHJpY3Rpb25zKGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBoaWRlQmFzaWNTZWFyY2ggPSBCb29sZWFuKHNlYXJjaFJlc3RyaWN0aW9ucyAmJiAhc2VhcmNoUmVzdHJpY3Rpb25zLlNlYXJjaGFibGUpO1xuXHRpZiAoc0VudGl0eVNldFBhdGggJiYgaGlkZUJhc2ljU2VhcmNoICE9PSB0cnVlKSB7XG5cdFx0aWYgKCFzZWFyY2hSZXN0cmljdGlvbnMgfHwgc2VhcmNoUmVzdHJpY3Rpb25zPy5TZWFyY2hhYmxlKSB7XG5cdFx0XHRhRmV0Y2hlZFByb3BlcnRpZXMucHVzaChnZXRTZWFyY2hGaWx0ZXJQcm9wZXJ0eUluZm8oKSk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGFGZXRjaGVkUHJvcGVydGllcztcbn07XG5cbmV4cG9ydCBjb25zdCBzaG93RHJhZnRFZGl0U3RhdHVzID0gZnVuY3Rpb24gKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pik6IGJvb2xlYW4ge1xuXHRjb25zdCBuYXZpZ2F0aW9uUmVzdHJpY3Rpb25zID0gZ2V0TmF2aWdhdGlvblJlc3RyaWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0LCBcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhXCIpO1xuXHRyZXR1cm4gbmF2aWdhdGlvblJlc3RyaWN0aW9ucz8uRmlsdGVyUmVzdHJpY3Rpb25zPy5GaWx0ZXJhYmxlID09PSBmYWxzZSA/IGZhbHNlIDogdHJ1ZTtcbn07XG5cbmV4cG9ydCBjb25zdCBpbnNlcnRDdXN0b21NYW5pZmVzdEVsZW1lbnRzID0gZnVuY3Rpb24gKFxuXHRmaWx0ZXJGaWVsZHM6IE1hbmlmZXN0RmlsdGVyRmllbGRbXSxcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRhbm5vdGF0aW9uUGF0aDogc3RyaW5nXG4pOiBNYW5pZmVzdEZpbHRlckZpZWxkW10ge1xuXHRjb25zdCBtYW5pZmVzdEZpbHRlckZpZWxkcyA9IGdldE1hbmlmZXN0RmlsdGVyRmllbGRzKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQsIGFubm90YXRpb25QYXRoKTtcblx0X2dldE1pc3NpbmdMYWJlbEZvck1hbmlmZXN0RmlsdGVyRmllbGRzKGZpbHRlckZpZWxkcywgbWFuaWZlc3RGaWx0ZXJGaWVsZHMpO1xuXHRyZXR1cm4gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoZmlsdGVyRmllbGRzLCBtYW5pZmVzdEZpbHRlckZpZWxkcywge1xuXHRcdGF2YWlsYWJpbGl0eTogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRsYWJlbDogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHR0eXBlOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdHBvc2l0aW9uOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdHNsb3ROYW1lOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdGRvY3VtZW50UmVmVGV4dDogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHR0ZW1wbGF0ZTogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRzZXR0aW5nczogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHR2aXN1YWxGaWx0ZXI6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0cmVxdWlyZWQ6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGVcblx0fSk7XG59O1xuXG5leHBvcnQgY29uc3Qgc29ydFByb3BlcnR5SW5mb3NCeUdyb3VwTGFiZWwgPSAocHJvcGVydHlJbmZvczogUHJvcGVydHlJbmZvW10pOiB2b2lkID0+IHtcblx0cHJvcGVydHlJbmZvcy5zb3J0KGZ1bmN0aW9uIChhOiBGaWx0ZXJHcm91cCwgYjogRmlsdGVyR3JvdXApIHtcblx0XHRjb25zdCBhR3JvdXBMYWJlbElzU2V0ID0gYS5ncm91cExhYmVsICE9PSB1bmRlZmluZWQgJiYgYS5ncm91cExhYmVsICE9PSBudWxsO1xuXHRcdGNvbnN0IGJHcm91cExhYmVsSXNTZXQgPSBiLmdyb3VwTGFiZWwgIT09IHVuZGVmaW5lZCAmJiBiLmdyb3VwTGFiZWwgIT09IG51bGw7XG5cdFx0aWYgKCFhR3JvdXBMYWJlbElzU2V0ICYmICFiR3JvdXBMYWJlbElzU2V0KSB7XG5cdFx0XHRyZXR1cm4gMDtcblx0XHR9XG5cdFx0aWYgKGFHcm91cExhYmVsSXNTZXQgJiYgIWJHcm91cExhYmVsSXNTZXQpIHtcblx0XHRcdHJldHVybiAtMTtcblx0XHR9XG5cdFx0aWYgKCFhR3JvdXBMYWJlbElzU2V0ICYmIGJHcm91cExhYmVsSXNTZXQpIHtcblx0XHRcdHJldHVybiAxO1xuXHRcdH1cblx0XHRyZXR1cm4gYS5ncm91cExhYmVsIS5sb2NhbGVDb21wYXJlKGIuZ3JvdXBMYWJlbCEpO1xuXHR9KTtcbn07XG5cbi8qKlxuICogUmV0cmlldmUgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBzZWxlY3Rpb24gZmllbGRzIHRoYXQgd2lsbCBiZSB1c2VkIHdpdGhpbiB0aGUgZmlsdGVyIGJhclxuICogVGhpcyBjb25maWd1cmF0aW9uIHRha2VzIGludG8gYWNjb3VudCB0aGUgYW5ub3RhdGlvbiBhbmQgdGhlIHNlbGVjdGlvbiB2YXJpYW50cy5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gbHJUYWJsZXNcbiAqIEBwYXJhbSBhbm5vdGF0aW9uUGF0aFxuICogQHBhcmFtIFtpbmNsdWRlSGlkZGVuXVxuICogQHBhcmFtIFtsaW5lSXRlbVRlcm1dXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBzZWxlY3Rpb24gZmllbGRzXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRTZWxlY3Rpb25GaWVsZHMgPSBmdW5jdGlvbiAoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0bHJUYWJsZXM6IFRhYmxlVmlzdWFsaXphdGlvbltdID0gW10sXG5cdGFubm90YXRpb25QYXRoID0gXCJcIixcblx0aW5jbHVkZUhpZGRlbj86IGJvb2xlYW4sXG5cdGxpbmVJdGVtVGVybT86IHN0cmluZ1xuKTogeyBzZWxlY3Rpb25GaWVsZHM6IEZpbHRlckZpZWxkW107IHNQcm9wZXJ0eUluZm86IHN0cmluZyB9IHtcblx0Y29uc3Qgb0Fubm90YXRlZFNlbGVjdGlvbkZpZWxkRGF0YSA9IGdldEFubm90YXRlZFNlbGVjdGlvbkZpZWxkRGF0YShcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdGxyVGFibGVzLFxuXHRcdGFubm90YXRpb25QYXRoLFxuXHRcdGluY2x1ZGVIaWRkZW4sXG5cdFx0bGluZUl0ZW1UZXJtXG5cdCk7XG5cdGNvbnN0IHBhcmFtZXRlckZpZWxkcyA9IF9nZXRQYXJhbWV0ZXJGaWVsZHMoY29udmVydGVyQ29udGV4dCk7XG5cdGxldCBwcm9wZXJ0eUluZm9GaWVsZHM6IEZpbHRlckZpZWxkW10gPSBvQW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhLnByb3BlcnR5SW5mb0ZpZWxkcztcblx0Y29uc3QgZW50aXR5VHlwZSA9IG9Bbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEuZW50aXR5VHlwZTtcblxuXHRwcm9wZXJ0eUluZm9GaWVsZHMgPSBwYXJhbWV0ZXJGaWVsZHMuY29uY2F0KHByb3BlcnR5SW5mb0ZpZWxkcyk7XG5cblx0cHJvcGVydHlJbmZvRmllbGRzID0gaW5zZXJ0Q3VzdG9tTWFuaWZlc3RFbGVtZW50cyhwcm9wZXJ0eUluZm9GaWVsZHMsIGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQsIGFubm90YXRpb25QYXRoKTtcblxuXHRjb25zdCBhRmV0Y2hlZFByb3BlcnRpZXMgPSBwcm9jZXNzU2VsZWN0aW9uRmllbGRzKFxuXHRcdHByb3BlcnR5SW5mb0ZpZWxkcyxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdG9Bbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEuZGVmYXVsdEZpbHRlckZpZWxkc1xuXHQpO1xuXHRzb3J0UHJvcGVydHlJbmZvc0J5R3JvdXBMYWJlbChhRmV0Y2hlZFByb3BlcnRpZXMpO1xuXG5cdGxldCBzRmV0Y2hQcm9wZXJ0aWVzID0gSlNPTi5zdHJpbmdpZnkoYUZldGNoZWRQcm9wZXJ0aWVzKTtcblx0c0ZldGNoUHJvcGVydGllcyA9IHNGZXRjaFByb3BlcnRpZXMucmVwbGFjZSgvXFx7L2csIFwiXFxcXHtcIik7XG5cdHNGZXRjaFByb3BlcnRpZXMgPSBzRmV0Y2hQcm9wZXJ0aWVzLnJlcGxhY2UoL1xcfS9nLCBcIlxcXFx9XCIpO1xuXHRjb25zdCBzUHJvcGVydHlJbmZvID0gc0ZldGNoUHJvcGVydGllcztcblx0Ly8gZW5kIG9mIHByb3BlcnR5RmllbGRzIHByb2Nlc3NpbmdcblxuXHQvLyB0byBwb3B1bGF0ZSBzZWxlY3Rpb24gZmllbGRzXG5cdGxldCBwcm9wU2VsZWN0aW9uRmllbGRzOiBGaWx0ZXJGaWVsZFtdID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvQW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhLnByb3BlcnR5SW5mb0ZpZWxkcykpO1xuXHRwcm9wU2VsZWN0aW9uRmllbGRzID0gcGFyYW1ldGVyRmllbGRzLmNvbmNhdChwcm9wU2VsZWN0aW9uRmllbGRzKTtcblx0Ly8gY3JlYXRlIGEgbWFwIG9mIHByb3BlcnRpZXMgdG8gYmUgdXNlZCBpbiBzZWxlY3Rpb24gdmFyaWFudHNcblx0Y29uc3QgZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzID0gb0Fubm90YXRlZFNlbGVjdGlvbkZpZWxkRGF0YS5leGNsdWRlZEZpbHRlclByb3BlcnRpZXM7XG5cdGNvbnN0IGZpbHRlckZhY2V0cyA9IGVudGl0eVR5cGU/LmFubm90YXRpb25zPy5VST8uRmlsdGVyRmFjZXRzO1xuXHRsZXQgZmlsdGVyRmFjZXRNYXA6IFJlY29yZDxzdHJpbmcsIEZpbHRlckdyb3VwPiA9IHt9O1xuXG5cdGNvbnN0IGFGaWVsZEdyb3VwcyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbnNCeVRlcm0oXCJVSVwiLCBVSUFubm90YXRpb25UZXJtcy5GaWVsZEdyb3VwKSBhcyBGaWVsZEdyb3VwW107XG5cblx0aWYgKGZpbHRlckZhY2V0cyA9PT0gdW5kZWZpbmVkIHx8IGZpbHRlckZhY2V0cy5sZW5ndGggPCAwKSB7XG5cdFx0Zm9yIChjb25zdCBpIGluIGFGaWVsZEdyb3Vwcykge1xuXHRcdFx0ZmlsdGVyRmFjZXRNYXAgPSB7XG5cdFx0XHRcdC4uLmZpbHRlckZhY2V0TWFwLFxuXHRcdFx0XHQuLi5nZXRGaWVsZEdyb3VwRmlsdGVyR3JvdXBzKGFGaWVsZEdyb3Vwc1tpXSlcblx0XHRcdH07XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGZpbHRlckZhY2V0TWFwID0gZmlsdGVyRmFjZXRzLnJlZHVjZSgocHJldmlvdXNWYWx1ZTogUmVjb3JkPHN0cmluZywgRmlsdGVyR3JvdXA+LCBmaWx0ZXJGYWNldDogUmVmZXJlbmNlRmFjZXRUeXBlcykgPT4ge1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCAoZmlsdGVyRmFjZXQ/LlRhcmdldD8uJHRhcmdldCBhcyBGaWVsZEdyb3VwKT8uRGF0YT8ubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0cHJldmlvdXNWYWx1ZVsoKGZpbHRlckZhY2V0Py5UYXJnZXQ/LiR0YXJnZXQgYXMgRmllbGRHcm91cCk/LkRhdGFbaV0gYXMgRGF0YUZpZWxkVHlwZXMpPy5WYWx1ZT8ucGF0aF0gPSB7XG5cdFx0XHRcdFx0Z3JvdXA6IGZpbHRlckZhY2V0Py5JRD8udG9TdHJpbmcoKSxcblx0XHRcdFx0XHRncm91cExhYmVsOiBmaWx0ZXJGYWNldD8uTGFiZWw/LnRvU3RyaW5nKClcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBwcmV2aW91c1ZhbHVlO1xuXHRcdH0sIHt9KTtcblx0fVxuXG5cdC8vIGNyZWF0ZSBhIG1hcCBvZiBhbGwgcG90ZW50aWFsIGZpbHRlciBmaWVsZHMgYmFzZWQgb24uLi5cblx0Y29uc3QgZmlsdGVyRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4gPSBvQW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhLmZpbHRlckZpZWxkcztcblxuXHQvLyBmaW5hbGx5IGNyZWF0ZSBmaW5hbCBsaXN0IG9mIGZpbHRlciBmaWVsZHMgYnkgYWRkaW5nIHRoZSBTZWxlY3Rpb25GaWVsZHMgZmlyc3QgKG9yZGVyIG1hdHRlcnMpLi4uXG5cdGNvbnN0IGFsbEZpbHRlcnMgPSBwcm9wU2VsZWN0aW9uRmllbGRzXG5cblx0XHQvLyAuLi5hbmQgYWRkaW5nIHJlbWFpbmluZyBmaWx0ZXIgZmllbGRzLCB0aGF0IGFyZSBub3QgdXNlZCBpbiBhIFNlbGVjdGlvblZhcmlhbnQgKG9yZGVyIGRvZXNuJ3QgbWF0dGVyKVxuXHRcdC5jb25jYXQoXG5cdFx0XHRPYmplY3Qua2V5cyhmaWx0ZXJGaWVsZHMpXG5cdFx0XHRcdC5maWx0ZXIoKHByb3BlcnR5UGF0aCkgPT4gIWV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllcy5oYXMocHJvcGVydHlQYXRoKSlcblx0XHRcdFx0Lm1hcCgocHJvcGVydHlQYXRoKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oZmlsdGVyRmllbGRzW3Byb3BlcnR5UGF0aF0sIGZpbHRlckZhY2V0TWFwW3Byb3BlcnR5UGF0aF0pO1xuXHRcdFx0XHR9KVxuXHRcdCk7XG5cblx0Y29uc3Qgc2VsZWN0aW9uRmllbGRzID0gaW5zZXJ0Q3VzdG9tTWFuaWZlc3RFbGVtZW50cyhhbGxGaWx0ZXJzLCBlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0LCBhbm5vdGF0aW9uUGF0aCk7XG5cblx0Ly8gQWRkIGNhc2VTZW5zaXRpdmUgcHJvcGVydHkgdG8gYWxsIHNlbGVjdGlvbiBmaWVsZHMuXG5cdGNvbnN0IGlzQ2FzZVNlbnNpdGl2ZSA9IGlzRmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZShjb252ZXJ0ZXJDb250ZXh0KTtcblx0c2VsZWN0aW9uRmllbGRzLmZvckVhY2goKGZpbHRlckZpZWxkKSA9PiB7XG5cdFx0ZmlsdGVyRmllbGQuY2FzZVNlbnNpdGl2ZSA9IGlzQ2FzZVNlbnNpdGl2ZTtcblx0fSk7XG5cblx0cmV0dXJuIHsgc2VsZWN0aW9uRmllbGRzLCBzUHJvcGVydHlJbmZvIH07XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgZmlsdGVyIGJhciBpbnNpZGUgYSB2YWx1ZSBoZWxwIGRpYWxvZyBzaG91bGQgYmUgZXhwYW5kZWQuIFRoaXMgaXMgdHJ1ZSBpZiBvbmUgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGhvbGQ6XG4gKiAoMSkgYSBmaWx0ZXIgcHJvcGVydHkgaXMgbWFuZGF0b3J5LFxuICogKDIpIG5vIHNlYXJjaCBmaWVsZCBleGlzdHMgKGVudGl0eSBpc24ndCBzZWFyY2ggZW5hYmxlZCksXG4gKiAoMykgd2hlbiB0aGUgZGF0YSBpc24ndCBsb2FkZWQgYnkgZGVmYXVsdCAoYW5ub3RhdGlvbiBGZXRjaFZhbHVlcyA9IDIpLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gZmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbiBUaGUgRmlsdGVyUmVzdHJpY3Rpb24gYW5ub3RhdGlvblxuICogQHBhcmFtIHZhbHVlTGlzdCBUaGUgVmFsdWVMaXN0IGFubm90YXRpb25cbiAqIEByZXR1cm5zIFRoZSB2YWx1ZSBmb3IgZXhwYW5kRmlsdGVyRmllbGRzXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFeHBhbmRGaWx0ZXJGaWVsZHMgPSBmdW5jdGlvbiAoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0ZmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbjogRmlsdGVyUmVzdHJpY3Rpb25zIHwgdW5kZWZpbmVkLFxuXHR2YWx1ZUxpc3Q6IE1ldGFNb2RlbFR5cGU8VmFsdWVMaXN0PlxuKTogYm9vbGVhbiB7XG5cdGNvbnN0IHJlcXVpcmVkUHJvcGVydGllcyA9IGdldEZpbHRlclJlc3RyaWN0aW9ucyhmaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uLCBcIlJlcXVpcmVkUHJvcGVydGllc1wiKTtcblx0Y29uc3Qgc2VhcmNoUmVzdHJpY3Rpb25zID0gZ2V0U2VhcmNoUmVzdHJpY3Rpb25zKGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBoaWRlQmFzaWNTZWFyY2ggPSBCb29sZWFuKHNlYXJjaFJlc3RyaWN0aW9ucyAmJiAhc2VhcmNoUmVzdHJpY3Rpb25zLlNlYXJjaGFibGUpO1xuXHRpZiAocmVxdWlyZWRQcm9wZXJ0aWVzLmxlbmd0aCA+IDAgfHwgaGlkZUJhc2ljU2VhcmNoIHx8IHZhbHVlTGlzdD8uRmV0Y2hWYWx1ZXMgPT09IDIpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUF5REE7RUFBQSxJQWdDS0EsZUFBZSwwQkFBZkEsZUFBZTtJQUFmQSxlQUFlO0lBQWZBLGVBQWU7SUFBQSxPQUFmQSxlQUFlO0VBQUEsRUFBZkEsZUFBZTtFQWNwQixNQUFNQyxVQUFVLEdBQUcsWUFBWTtFQUMvQixNQUFNQyxlQUFlLEdBQUcs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
843
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmaWx0ZXJGaWVsZFR5cGUiLCJzRWRtU3RyaW5nIiwic1N0cmluZ0RhdGFUeXBlIiwiZ2V0RmllbGRHcm91cEZpbHRlckdyb3VwcyIsImZpZWxkR3JvdXAiLCJmaWx0ZXJGYWNldE1hcCIsIkRhdGEiLCJmb3JFYWNoIiwiZGF0YUZpZWxkIiwiJFR5cGUiLCJWYWx1ZSIsInBhdGgiLCJncm91cCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImdyb3VwTGFiZWwiLCJMYWJlbCIsInRvU3RyaW5nIiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJxdWFsaWZpZXIiLCJnZXRFeGNsdWRlZEZpbHRlclByb3BlcnRpZXMiLCJsclRhYmxlVmlzdWFsaXphdGlvbnMiLCJjb252ZXJ0ZXJDb250ZXh0Iiwic2VsZWN0aW9uVmFyaWFudFBhdGhzIiwiU2V0IiwibWFuaWZlc3RGaWx0ZXJGaWVsZHMiLCJnZXRNYW5pZmVzdFdyYXBwZXIiLCJnZXRGaWx0ZXJDb25maWd1cmF0aW9uIiwiZmlsdGVyRmllbGRzIiwic2VsZWN0aW9uRmllbGRQYXRocyIsImdldERhdGFNb2RlbE9iamVjdFBhdGgiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiVUkiLCJTZWxlY3Rpb25GaWVsZHMiLCJtYXAiLCJzZWxlY3Rpb25GaWVsZCIsInZhbHVlIiwiT2JqZWN0Iiwia2V5cyIsImZpbHRlciIsImtleSIsInRlbXBsYXRlIiwidmlzdWFsaXphdGlvbiIsInRhYmxlRmlsdGVycyIsImNvbnRyb2wiLCJmaWx0ZXJzIiwiaGlkZGVuRmlsdGVycyIsInBhdGhzIiwicXVpY2tGaWx0ZXJzIiwiYW5ub3RhdGlvblBhdGgiLCJoYXMiLCJhZGQiLCJzZWxlY3Rpb25WYXJpYW50Q29uZmlnIiwiZ2V0U2VsZWN0aW9uVmFyaWFudENvbmZpZ3VyYXRpb24iLCJwcm9wZXJ0eU5hbWVzIiwicHJvcGVydHlOYW1lIiwiZmxhdCIsIl9nZXRDb25kaXRpb25QYXRoIiwiZW50aXR5VHlwZSIsInByb3BlcnR5UGF0aCIsInBhcnRzIiwic3BsaXQiLCJwYXJ0aWFsUGF0aCIsImxlbmd0aCIsInBhcnQiLCJzaGlmdCIsInByb3BlcnR5IiwicmVzb2x2ZVBhdGgiLCJpc011bHRpcGxlTmF2aWdhdGlvblByb3BlcnR5IiwiX2NyZWF0ZUZpbHRlclNlbGVjdGlvbkZpZWxkIiwiZnVsbFByb3BlcnR5UGF0aCIsImluY2x1ZGVIaWRkZW4iLCJ0YXJnZXRUeXBlIiwidW5kZWZpbmVkIiwiSGlkZGVuIiwidmFsdWVPZiIsImdldEFubm90YXRpb25FbnRpdHlUeXBlIiwiZmlsdGVyRmllbGQiLCJLZXlIZWxwZXIiLCJnZXRTZWxlY3Rpb25GaWVsZEtleUZyb21QYXRoIiwiZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aCIsImNvbmRpdGlvblBhdGgiLCJhdmFpbGFiaWxpdHkiLCJIaWRkZW5GaWx0ZXIiLCJsYWJlbCIsIm5hbWUiLCJnZXRTZXR0aW5nc09mRGVmYXVsdEZpbHRlckZpZWxkcyIsInN0YW5kYXJkRHluYW1pY0RhdGVSYW5nZUtleXMiLCJTdGFuZGFyZER5bmFtaWNEYXRlUmFuZ2VLZXlzIiwiVE8iLCJUT01PUlJPVyIsIk5FWFRXRUVLIiwiTkVYVE1PTlRIIiwiTkVYVFFVQVJURVIiLCJORVhUWUVBUiIsInNldHRpbmdzIiwib3BlcmF0b3JDb25maWd1cmF0aW9uIiwiZXF1YWxzIiwiam9pbiIsImV4Y2x1ZGUiLCJfZ2V0U2VsZWN0aW9uRmllbGRzIiwibmF2aWdhdGlvblBhdGgiLCJwcm9wZXJ0aWVzIiwic2VsZWN0aW9uRmllbGRNYXAiLCJmdWxsUGF0aCIsIl9nZXRTZWxlY3Rpb25GaWVsZHNCeVBhdGgiLCJwcm9wZXJ0eVBhdGhzIiwic2VsZWN0aW9uRmllbGRzIiwibG9jYWxTZWxlY3Rpb25GaWVsZHMiLCJlbmhhbmNlZFBhdGgiLCJlbmhhbmNlRGF0YU1vZGVsUGF0aCIsInRhcmdldE9iamVjdCIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwiZmluZCIsIm5hdmlnYXRpb25Qcm9wZXJ0eSIsImlzTmF2aWdhdGlvblByb3BlcnR5IiwiZW50aXR5UHJvcGVydGllcyIsImlzQ29tcGxleFR5cGUiLCJnZXRUYXJnZXROYXZpZ2F0aW9uUGF0aCIsIl9nZXRGaWx0ZXJGaWVsZCIsImdldERpYWdub3N0aWNzIiwiYWRkSXNzdWUiLCJJc3N1ZUNhdGVnb3J5IiwiQW5ub3RhdGlvbiIsIklzc3VlU2V2ZXJpdHkiLCJIaWdoIiwiSXNzdWVUeXBlIiwiTUlTU0lOR19TRUxFQ1RJT05GSUVMRCIsImlzUGFyYW1ldGVyIiwiUmVzdWx0Q29udGV4dCIsIl9nZXREZWZhdWx0RmlsdGVyRmllbGRzIiwiYVNlbGVjdE9wdGlvbnMiLCJleGNsdWRlZEZpbHRlclByb3BlcnRpZXMiLCJhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHMiLCJVSVNlbGVjdGlvbkZpZWxkcyIsIlNlbGVjdGlvbkZpZWxkIiwic2VsZWN0T3B0aW9uIiwiUHJvcGVydHlOYW1lIiwic1Byb3BlcnR5UGF0aCIsImN1cnJlbnRTZWxlY3Rpb25GaWVsZHMiLCJGaWx0ZXJGaWVsZCIsImdldEZpbHRlckZpZWxkIiwicHVzaCIsImRlZmF1bHRGaWx0ZXJWYWx1ZSIsIkZpbHRlckRlZmF1bHRWYWx1ZSIsIl9nZXRQYXJhbWV0ZXJGaWVsZHMiLCJkYXRhTW9kZWxPYmplY3RQYXRoIiwicGFyYW1ldGVyRW50aXR5VHlwZSIsInN0YXJ0aW5nRW50aXR5U2V0IiwiaXNQYXJhbWV0ZXJpemVkIiwidGFyZ2V0RW50aXR5U2V0IiwicGFyYW1ldGVyQ29udmVydGVyQ29udGV4dCIsImdldENvbnZlcnRlckNvbnRleHRGb3IiLCJnZXRGaWx0ZXJCYXJIaWRlQmFzaWNTZWFyY2giLCJsaXN0UmVwb3J0VGFibGVzIiwiY2hhcnRzIiwibm9TZWFyY2hJbkNoYXJ0cyIsImV2ZXJ5IiwiY2hhcnQiLCJhcHBseVN1cHBvcnRlZCIsImVuYWJsZVNlYXJjaCIsIm5vU2VhcmNoSW5UYWJsZXMiLCJ0YWJsZSIsImVuYWJsZUFuYWx5dGljcyIsInR5cGUiLCJlbmFibGVCYXNpY1NlYXJjaCIsImNvbnRleHRQYXRoIiwiZ2V0Q29udGV4dFBhdGgiLCJfZXhwb3J0cyIsImdldE1hbmlmZXN0RmlsdGVyRmllbGRzIiwibWFuaWZlc3RXcmFwcGVyIiwic2V0dGluZ3NDb250ZXh0UGF0aCIsImdldEVudGl0eVNldCIsImZpbHRlckNvbmZpZ3VyYXRpb25QYXRoIiwiZ2V0RmlsdGVyQ29uZmlndXJhdGlvblBhdGgiLCJmYkNvbmZpZyIsImRlZmluZWRGaWx0ZXJGaWVsZHMiLCJnZXRQYXRoRnJvbVNlbGVjdGlvbkZpZWxkS2V5Iiwic0tleSIsIlNsb3QiLCJEZWZhdWx0IiwidmlzdWFsRmlsdGVyIiwiZ2V0VmlzdWFsRmlsdGVycyIsImlzQ3VzdG9tRmlsdGVyIiwic2xvdE5hbWUiLCJkb2N1bWVudFJlZlRleHQiLCJmZXRjaFRleHRGcm9tTWV0YU1vZGVsIiwicG9zaXRpb24iLCJwbGFjZW1lbnQiLCJQbGFjZW1lbnQiLCJBZnRlciIsInJlcXVpcmVkIiwib2JqZWN0UGF0aCIsImZpbHRlckJhckNvbnRleHRQYXRoIiwibWV0YVBhdGgiLCJzdGFydHNXaXRoIiwicmVwbGFjZSIsImdldEZpbHRlclJlc3RyaWN0aW9ucyIsIm9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uIiwic1Jlc3RyaWN0aW9uIiwiYVByb3BzIiwib1Byb3BlcnR5IiwiZ2V0U2VhcmNoRmlsdGVyUHJvcGVydHlJbmZvIiwiZGF0YVR5cGUiLCJtYXhDb25kaXRpb25zIiwiY29uc3RyYWludHMiLCJtYXhMZW5ndGgiLCJnZXRFZGl0U3RhdGVGaWx0ZXJQcm9wZXJ0eUluZm8iLCJoaWRkZW5GaWx0ZXIiLCJnZXRTZWFyY2hSZXN0cmljdGlvbnMiLCJlbnRpdHlTZXQiLCJpc0VudGl0eVNldCIsIkNhcGFiaWxpdGllcyIsIlNlYXJjaFJlc3RyaWN0aW9ucyIsImdldE5hdmlnYXRpb25SZXN0cmljdGlvbnMiLCJzTmF2aWdhdGlvblBhdGgiLCJvTmF2aWdhdGlvblJlc3RyaWN0aW9ucyIsIk5hdmlnYXRpb25SZXN0cmljdGlvbnMiLCJhUmVzdHJpY3RlZFByb3BlcnRpZXMiLCJSZXN0cmljdGVkUHJvcGVydGllcyIsIm9SZXN0cmljdGVkUHJvcGVydHkiLCJOYXZpZ2F0aW9uUHJvcGVydHkiLCJfZmV0Y2hCYXNpY1Byb3BlcnR5SW5mbyIsIm9GaWx0ZXJGaWVsZEluZm8iLCJkaXNwbGF5IiwiY2FzZVNlbnNpdGl2ZSIsIm1lbnUiLCJfZ2V0TWlzc2luZ0xhYmVsRm9yTWFuaWZlc3RGaWx0ZXJGaWVsZHMiLCJoYXNPd25Qcm9wZXJ0eSIsImRpc3BsYXlNb2RlIiwib1Byb3BlcnR5QW5ub3RhdGlvbnMiLCJvQ29sbGVjdGlvbkFubm90YXRpb25zIiwib1RleHRBbm5vdGF0aW9uIiwiVGV4dCIsIm9UZXh0QXJyYW5nbWVudEFubm90YXRpb24iLCJUZXh0QXJyYW5nZW1lbnQiLCJmZXRjaFByb3BlcnR5SW5mbyIsIm9UeXBlQ29uZmlnIiwib1Byb3BlcnR5SW5mbyIsInNBbm5vdGF0aW9uUGF0aCIsInRhcmdldFByb3BlcnR5T2JqZWN0Iiwib0Zvcm1hdE9wdGlvbnMiLCJmb3JtYXRPcHRpb25zIiwib0NvbnN0cmFpbnRzIiwidG9vbHRpcCIsIlF1aWNrSW5mbyIsImFzc2lnbiIsImlzTXVsdGlWYWx1ZSIsImJJc011bHRpVmFsdWUiLCJmaWx0ZXJFeHByZXNzaW9uIiwiaW5kZXhPZiIsIl9pc0ZpbHRlcmFibGVOYXZpZ2F0aW9uUHJvcGVydHkiLCJlbnRyeSIsImluY2x1ZGVzIiwiYWRkQ2hpbGROYXZpZ2F0aW9uUHJvcGVydGllcyIsIm5hdlByb3BlcnRpZXMiLCJ0YXJnZXRQcm9wZXJ0eSIsIiR0YXJnZXQiLCJhZGRpdGlvbmFsUHJvcGVydHlQYXRoIiwiZ2V0QXNzb2NpYXRlZFRleHRQcm9wZXJ0eVBhdGgiLCJnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eVBhdGgiLCJnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5UGF0aCIsImdldEFzc29jaWF0ZWRUaW1lem9uZVByb3BlcnR5UGF0aCIsIm5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgiLCJnZXROYXZpZ2F0aW9uUHJvcGVydGllc1JlY3Vyc2l2ZWx5IiwiVGFyZ2V0IiwiaW5uZXJEYXRhRmllbGQiLCJnZXRSZWxhdGl2ZVBhdGhzIiwiZ2V0QW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhIiwibHJUYWJsZXMiLCJhcmd1bWVudHMiLCJsaW5lSXRlbVRlcm0iLCJnZXRFbnRpdHlUeXBlIiwiZ2V0RW50aXR5VHlwZUFubm90YXRpb24iLCJhbm5vdGF0aW9uIiwiTW9kZWxIZWxwZXIiLCJpc0RyYWZ0Um9vdCIsInNlbGVjdGlvblZhcmlhbnQiLCJnZXRTZWxlY3Rpb25WYXJpYW50IiwiU2VsZWN0T3B0aW9ucyIsInByb3BlcnR5SW5mb0ZpZWxkcyIsInJlZHVjZSIsImZpbHRlclByb3BlcnR5UGF0aCIsImRlZmF1bHRGaWx0ZXJGaWVsZHMiLCJmZXRjaFR5cGVDb25maWciLCJ0eXBlQ29uZmlnIiwiZ2V0VHlwZUNvbmZpZyIsIm51bGxhYmxlIiwicGFyc2VLZWVwc0VtcHR5U3RyaW5nIiwiYXNzaWduRGF0YVR5cGVUb1Byb3BlcnR5SW5mbyIsInByb3BlcnR5SW5mb0ZpZWxkIiwiYVJlcXVpcmVkUHJvcHMiLCJhVHlwZUNvbmZpZyIsImdldE1heENvbmRpdGlvbnMiLCJpc0ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUiLCJwcm9jZXNzU2VsZWN0aW9uRmllbGRzIiwiZGVmYXVsdFZhbHVlUHJvcGVydHlGaWVsZHMiLCJjb25jYXQiLCJwYXJhbWV0ZXJGaWVsZCIsInByb3BlcnR5Q29udmVydHlDb250ZXh0IiwicHJvcGVydHlUYXJnZXRPYmplY3QiLCJvUmV0Iiwic0VudGl0eVNldFBhdGgiLCJhbGxGaWx0ZXJSZXN0cmljdGlvbnMiLCJmZXRjaEZpbHRlclJlc3RyaWN0aW9ucyIsImdldEZpbHRlclJlc3RyaWN0aW9uc0J5RGF0YU1vZGVsIiwiUmVxdWlyZWRQcm9wZXJ0aWVzIiwiTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMiLCJhTm9uRmlsdGVyYWJsZVByb3BzIiwiYUZldGNoZWRQcm9wZXJ0aWVzIiwiaXNIaWRkZW5EcmFmdEVuYWJsZWQiLCJnZXRTYXBGZU1hbmlmZXN0Q29uZmlndXJhdGlvbiIsImFwcCIsImhpZGVEcmFmdCIsImVuYWJsZWQiLCJpc09iamVjdFBhdGhEcmFmdFN1cHBvcnRlZCIsImVkaXRTdGF0ZUZpbHRlciIsInNob3dEcmFmdEVkaXRTdGF0dXMiLCJzZWFyY2hSZXN0cmljdGlvbnMiLCJoaWRlQmFzaWNTZWFyY2giLCJCb29sZWFuIiwiU2VhcmNoYWJsZSIsIm5hdmlnYXRpb25SZXN0cmljdGlvbnMiLCJGaWx0ZXJSZXN0cmljdGlvbnMiLCJGaWx0ZXJhYmxlIiwiaW5zZXJ0Q3VzdG9tTWFuaWZlc3RFbGVtZW50cyIsImluc2VydEN1c3RvbUVsZW1lbnRzIiwiT3ZlcnJpZGVUeXBlIiwib3ZlcndyaXRlIiwic29ydFByb3BlcnR5SW5mb3NCeUdyb3VwTGFiZWwiLCJwcm9wZXJ0eUluZm9zIiwic29ydCIsImEiLCJiIiwiYUdyb3VwTGFiZWxJc1NldCIsImJHcm91cExhYmVsSXNTZXQiLCJsb2NhbGVDb21wYXJlIiwiZ2V0U2VsZWN0aW9uRmllbGRzIiwib0Fubm90YXRlZFNlbGVjdGlvbkZpZWxkRGF0YSIsInBhcmFtZXRlckZpZWxkcyIsInNGZXRjaFByb3BlcnRpZXMiLCJKU09OIiwic3RyaW5naWZ5Iiwic1Byb3BlcnR5SW5mbyIsInByb3BTZWxlY3Rpb25GaWVsZHMiLCJwYXJzZSIsImZpbHRlckZhY2V0cyIsIkZpbHRlckZhY2V0cyIsImFGaWVsZEdyb3VwcyIsImdldEFubm90YXRpb25zQnlUZXJtIiwiaSIsInByZXZpb3VzVmFsdWUiLCJmaWx0ZXJGYWNldCIsIklEIiwiYWxsRmlsdGVycyIsImlzQ2FzZVNlbnNpdGl2ZSIsImdldEV4cGFuZEZpbHRlckZpZWxkcyIsImZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24iLCJ2YWx1ZUxpc3QiLCJyZXF1aXJlZFByb3BlcnRpZXMiLCJGZXRjaFZhbHVlcyJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRmlsdGVyQmFyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQW5ub3RhdGlvblRlcm0sIEVudGl0eVNldCwgRW50aXR5VHlwZSwgTmF2aWdhdGlvblByb3BlcnR5LCBQcm9wZXJ0eSwgUHJvcGVydHlQYXRoIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7XG5cdEZpbHRlclJlc3RyaWN0aW9ucyxcblx0RmlsdGVyUmVzdHJpY3Rpb25zVHlwZSxcblx0TmF2aWdhdGlvblByb3BlcnR5UmVzdHJpY3Rpb24sXG5cdFNlYXJjaFJlc3RyaWN0aW9uc1xufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NhcGFiaWxpdGllc1wiO1xuaW1wb3J0IHR5cGUgeyBWYWx1ZUxpc3QgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW1vblwiO1xuaW1wb3J0IHR5cGUgeyBFbnRpdHlUeXBlQW5ub3RhdGlvbnMsIFByb3BlcnR5QW5ub3RhdGlvbnMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0VkbV9UeXBlc1wiO1xuaW1wb3J0IHR5cGUge1xuXHREYXRhRmllbGQsXG5cdERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdERhdGFGaWVsZFR5cGVzLFxuXHREYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGgsXG5cdERhdGFGaWVsZFdpdGhVcmwsXG5cdEZpZWxkR3JvdXAsXG5cdExpbmVJdGVtLFxuXHRSZWZlcmVuY2VGYWNldFR5cGVzLFxuXHRTZWxlY3RPcHRpb25UeXBlXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB7IFVJQW5ub3RhdGlvblRlcm1zLCBVSUFubm90YXRpb25UeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB0eXBlIENvbnZlcnRlckNvbnRleHQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBQYWdlQ29udGV4dFBhdGhUYXJnZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUgeyBDaGFydFZpc3VhbGl6YXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQ2hhcnRcIjtcbmltcG9ydCB7IGdldFNlbGVjdGlvblZhcmlhbnQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vRGF0YVZpc3VhbGl6YXRpb25cIjtcbmltcG9ydCB0eXBlIHsgVGFibGVWaXN1YWxpemF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL1RhYmxlXCI7XG5pbXBvcnQgeyBnZXRTZWxlY3Rpb25WYXJpYW50Q29uZmlndXJhdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eVR5cGVDb25zdHJhaW50cywgUHJvcGVydHlUeXBlRm9ybWF0T3B0aW9ucyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi90YWJsZS9Db2x1bW5zXCI7XG5pbXBvcnQgeyBnZXRUeXBlQ29uZmlnLCBpc0ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vdGFibGUvQ29sdW1uc1wiO1xuaW1wb3J0IHsgZ2V0TWF4Q29uZGl0aW9ucyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0xpc3RSZXBvcnQvRmlsdGVyRmllbGRcIjtcbmltcG9ydCB0eXBlIHsgVmlzdWFsRmlsdGVycyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0xpc3RSZXBvcnQvVmlzdWFsRmlsdGVyc1wiO1xuaW1wb3J0IHsgZ2V0VmlzdWFsRmlsdGVycyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0xpc3RSZXBvcnQvVmlzdWFsRmlsdGVyc1wiO1xuaW1wb3J0IHR5cGUgeyBDb25maWd1cmFibGVPYmplY3QsIEN1c3RvbUVsZW1lbnQsIFBvc2l0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7IE92ZXJyaWRlVHlwZSwgUGxhY2VtZW50LCBpbnNlcnRDdXN0b21FbGVtZW50cyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgeyBJc3N1ZUNhdGVnb3J5LCBJc3N1ZVNldmVyaXR5LCBJc3N1ZVR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0lzc3VlTWFuYWdlclwiO1xuaW1wb3J0IHsgS2V5SGVscGVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9LZXlcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgaXNDb21wbGV4VHlwZSwgaXNFbnRpdHlTZXQsIGlzTXVsdGlwbGVOYXZpZ2F0aW9uUHJvcGVydHksIGlzTmF2aWdhdGlvblByb3BlcnR5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IHsgZW5oYW5jZURhdGFNb2RlbFBhdGgsIGdldFJlbGF0aXZlUGF0aHMsIGdldFRhcmdldE5hdmlnYXRpb25QYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHtcblx0Z2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHlQYXRoLFxuXHRnZXRBc3NvY2lhdGVkVGV4dFByb3BlcnR5UGF0aCxcblx0Z2V0QXNzb2NpYXRlZFRpbWV6b25lUHJvcGVydHlQYXRoLFxuXHRnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5UGF0aFxufSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9Qcm9wZXJ0eUhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBEZWZhdWx0VHlwZUZvckVkbVR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdHlwZS9FRE1cIjtcbmltcG9ydCB7IFN0YW5kYXJkRHluYW1pY0RhdGVSYW5nZUtleXMgfSBmcm9tIFwic2FwL20vbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgVHlwZUNvbmZpZyBmcm9tIFwic2FwL3VpL21kYy9UeXBlQ29uZmlnXCI7XG5pbXBvcnQgdHlwZSBTaW1wbGVUeXBlIGZyb20gXCJzYXAvdWkvbW9kZWwvU2ltcGxlVHlwZVwiO1xuaW1wb3J0IHR5cGUgeyBNZXRhTW9kZWxUeXBlIH0gZnJvbSBcInR5cGVzL21ldGFtb2RlbF90eXBlc1wiO1xuaW1wb3J0IHR5cGUge1xuXHRBdmFpbGFiaWxpdHlUeXBlLFxuXHRGaWx0ZXJGaWVsZE1hbmlmZXN0Q29uZmlndXJhdGlvbixcblx0RmlsdGVyTWFuaWZlc3RDb25maWd1cmF0aW9uLFxuXHRGaWx0ZXJTZXR0aW5nc1xufSBmcm9tIFwiLi4vLi4vTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IGZldGNoRmlsdGVyUmVzdHJpY3Rpb25zIGZyb20gXCIuLi9Db21tb24vZmlsdGVyL0ZpbHRlclJlc3RyaWN0aW9uc1wiO1xuXG4vL2ltcG9ydCB7IGhhc1ZhbHVlSGVscCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5cbmV4cG9ydCB0eXBlIEZpbHRlckZpZWxkID0gQ29uZmlndXJhYmxlT2JqZWN0ICYge1xuXHR0eXBlPzogc3RyaW5nO1xuXHRrZXk6IHN0cmluZztcblx0ZGF0YVR5cGU/OiBzdHJpbmc7XG5cdG5hbWU/OiBzdHJpbmc7XG5cdGNvbmRpdGlvblBhdGg6IHN0cmluZztcblx0YXZhaWxhYmlsaXR5OiBBdmFpbGFiaWxpdHlUeXBlO1xuXHRhbm5vdGF0aW9uUGF0aDogc3RyaW5nO1xuXHRsYWJlbD86IHN0cmluZztcblx0dGVtcGxhdGU/OiBzdHJpbmc7XG5cdGRvY3VtZW50UmVmVGV4dD86IHN0cmluZztcblx0Z3JvdXA/OiBzdHJpbmc7XG5cdG1lbnU/OiBzdHJpbmc7XG5cdGdyb3VwTGFiZWw/OiBzdHJpbmc7XG5cdHNldHRpbmdzPzogRmlsdGVyU2V0dGluZ3M7XG5cdGlzUGFyYW1ldGVyPzogYm9vbGVhbjtcblx0dmlzdWFsRmlsdGVyPzogVmlzdWFsRmlsdGVycztcblx0Y2FzZVNlbnNpdGl2ZT86IGJvb2xlYW47XG5cdHJlcXVpcmVkPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIE1hbmlmZXN0RmlsdGVyRmllbGQgPSBGaWx0ZXJGaWVsZCAmIHtcblx0c2xvdE5hbWU/OiBzdHJpbmc7XG59O1xuXG50eXBlIEZpbHRlckdyb3VwID0ge1xuXHRncm91cD86IHN0cmluZztcblx0Z3JvdXBMYWJlbD86IHN0cmluZztcbn07XG5cbmVudW0gZmlsdGVyRmllbGRUeXBlIHtcblx0RGVmYXVsdCA9IFwiRGVmYXVsdFwiLFxuXHRTbG90ID0gXCJTbG90XCJcbn1cblxudHlwZSBQcm9wZXJ0eVR5cGVDb25maWcgPSB7XG5cdHR5cGU/OiBzdHJpbmc7XG5cdGNvbnN0cmFpbnRzOiBQcm9wZXJ0eVR5cGVDb25zdHJhaW50cztcblx0Zm9ybWF0T3B0aW9uczogUHJvcGVydHlUeXBlRm9ybWF0T3B0aW9ucztcblx0YmFzZVR5cGU/OiBzdHJpbmc7XG5cdGNsYXNzTmFtZT86IGtleW9mIHR5cGVvZiBEZWZhdWx0VHlwZUZvckVkbVR5cGU7XG5cdHR5cGVJbnN0YW5jZT86IFNpbXBsZVR5cGU7XG59O1xuXG5jb25zdCBzRWRtU3RyaW5nID0gXCJFZG0uU3RyaW5nXCI7XG5jb25zdCBzU3RyaW5nRGF0YVR5cGUgPSBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmluZ1wiO1xuXG5leHBvcnQgdHlwZSBDdXN0b21FbGVtZW50RmlsdGVyRmllbGQgPSBDdXN0b21FbGVtZW50PE1hbmlmZXN0RmlsdGVyRmllbGQ+O1xuXG4vKipcbiAqIEVudGVyIGFsbCBEYXRhRmllbGRzIG9mIGEgZ2l2ZW4gRmllbGRHcm91cCBpbnRvIHRoZSBmaWx0ZXJGYWNldE1hcC5cbiAqIEBwYXJhbSBmaWVsZEdyb3VwXG4gKiBAcmV0dXJucyBUaGUgbWFwIG9mIGZhY2V0cyBmb3IgdGhlIGdpdmVuIEZpZWxkR3JvdXBcbiAqL1xuZnVuY3Rpb24gZ2V0RmllbGRHcm91cEZpbHRlckdyb3VwcyhmaWVsZEdyb3VwOiBGaWVsZEdyb3VwKTogUmVjb3JkPHN0cmluZywgRmlsdGVyR3JvdXA+IHtcblx0Y29uc3QgZmlsdGVyRmFjZXRNYXA6IFJlY29yZDxzdHJpbmcsIEZpbHRlckdyb3VwPiA9IHt9O1xuXHRmaWVsZEdyb3VwLkRhdGEuZm9yRWFjaCgoZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKSA9PiB7XG5cdFx0aWYgKGRhdGFGaWVsZC4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRcIikge1xuXHRcdFx0ZmlsdGVyRmFjZXRNYXBbZGF0YUZpZWxkLlZhbHVlLnBhdGhdID0ge1xuXHRcdFx0XHRncm91cDogZmllbGRHcm91cC5mdWxseVF1YWxpZmllZE5hbWUsXG5cdFx0XHRcdGdyb3VwTGFiZWw6IGZpZWxkR3JvdXAuTGFiZWw/LnRvU3RyaW5nKCkgPz8gZmllbGRHcm91cC5hbm5vdGF0aW9ucz8uQ29tbW9uPy5MYWJlbD8udG9TdHJpbmcoKSA/PyBmaWVsZEdyb3VwLnF1YWxpZmllclxuXHRcdFx0fTtcblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gZmlsdGVyRmFjZXRNYXA7XG59XG5cbi8qKlxuICogR2V0IHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBzZWxlY3Rpb24gdmFyaWFudHMgdXNlZCBpbiB0aGUgZGlmZmVyZW50IHZpc3VhbGl6YXRpb25zIHRoYXQgc2hvdWxkIGJlIGV4Y2x1ZGVkLlxuICogQHBhcmFtIGxyVGFibGVWaXN1YWxpemF0aW9ucyBUaGUgbGlzdCByZXBvcnQgdGFibGVzXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBleGNsdWRlZCBwcm9wZXJ0aWVzXG4gKi9cbmZ1bmN0aW9uIGdldEV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllcyhcblx0bHJUYWJsZVZpc3VhbGl6YXRpb25zOiBUYWJsZVZpc3VhbGl6YXRpb25bXSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBTZXQ8c3RyaW5nPiB7XG5cdGNvbnN0IHNlbGVjdGlvblZhcmlhbnRQYXRocyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXHRjb25zdCBtYW5pZmVzdEZpbHRlckZpZWxkcyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuZ2V0RmlsdGVyQ29uZmlndXJhdGlvbigpLmZpbHRlckZpZWxkcyA/PyB7fTtcblx0Y29uc3Qgc2VsZWN0aW9uRmllbGRQYXRocyA9IG5ldyBTZXQ8c3RyaW5nPihbXG5cdFx0Ly9TZWxlY3Rpb24gRmllbGRzIGNvbWluZyBmcm9tIHRoZSBhbm5vdGF0aW9uXG5cdFx0Li4uKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLnRhcmdldEVudGl0eVR5cGU/LmFubm90YXRpb25zPy5VST8uU2VsZWN0aW9uRmllbGRzID8/IFtdKS5tYXAoXG5cdFx0XHQoc2VsZWN0aW9uRmllbGQpID0+IHNlbGVjdGlvbkZpZWxkLnZhbHVlXG5cdFx0KSxcblx0XHQvL1NlbGVjdGlvbiBGaWVsZHMgY29taW5nIGZyb20gdGhlIG1hbmlmZXN0IGFuZCBub3Qgd2l0aCBjdXN0b20gdGVtcGxhdGVcblx0XHQuLi5PYmplY3Qua2V5cyhtYW5pZmVzdEZpbHRlckZpZWxkcykuZmlsdGVyKChrZXkpID0+ICEhbWFuaWZlc3RGaWx0ZXJGaWVsZHNba2V5XS50ZW1wbGF0ZSlcblx0XSk7XG5cblx0cmV0dXJuIG5ldyBTZXQoXG5cdFx0bHJUYWJsZVZpc3VhbGl6YXRpb25zXG5cdFx0XHQubWFwKCh2aXN1YWxpemF0aW9uKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHRhYmxlRmlsdGVycyA9IHZpc3VhbGl6YXRpb24uY29udHJvbC5maWx0ZXJzO1xuXHRcdFx0XHRpZiAoIXRhYmxlRmlsdGVycykge1xuXHRcdFx0XHRcdHJldHVybiBbXTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gWy4uLih0YWJsZUZpbHRlcnMuaGlkZGVuRmlsdGVycz8ucGF0aHMgPz8gW10pLCAuLi4odGFibGVGaWx0ZXJzLnF1aWNrRmlsdGVycz8ucGF0aHMgPz8gW10pXS5tYXAoKHBhdGgpID0+IHtcblx0XHRcdFx0XHRjb25zdCBhbm5vdGF0aW9uUGF0aCA9IHBhdGguYW5ub3RhdGlvblBhdGg7XG5cdFx0XHRcdFx0aWYgKCFzZWxlY3Rpb25WYXJpYW50UGF0aHMuaGFzKGFubm90YXRpb25QYXRoKSkge1xuXHRcdFx0XHRcdFx0c2VsZWN0aW9uVmFyaWFudFBhdGhzLmFkZChhbm5vdGF0aW9uUGF0aCk7XG5cdFx0XHRcdFx0XHRjb25zdCBzZWxlY3Rpb25WYXJpYW50Q29uZmlnID0gZ2V0U2VsZWN0aW9uVmFyaWFudENvbmZpZ3VyYXRpb24oYW5ub3RhdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRcdFx0XHRcdFx0aWYgKHNlbGVjdGlvblZhcmlhbnRDb25maWcpIHtcblx0XHRcdFx0XHRcdFx0c2VsZWN0aW9uVmFyaWFudENvbmZpZy5wcm9wZXJ0eU5hbWVzID0gc2VsZWN0aW9uVmFyaWFudENvbmZpZy5wcm9wZXJ0eU5hbWVzLmZpbHRlcihcblx0XHRcdFx0XHRcdFx0XHQocHJvcGVydHlOYW1lKSA9PiAhc2VsZWN0aW9uRmllbGRQYXRocy5oYXMocHJvcGVydHlOYW1lKVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gc2VsZWN0aW9uVmFyaWFudENvbmZpZy5wcm9wZXJ0eU5hbWVzO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gW107XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSlcblx0XHRcdC5mbGF0KDIpXG5cdCk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY29uZGl0aW9uIHBhdGggcmVxdWlyZWQgZm9yIHRoZSBjb25kaXRpb24gbW9kZWwuIEl0IGxvb2tzIGFzIGZvbGxvd3M6XG4gKiA8MTpOLVByb3BlcnR5TmFtZT4qXFwvPDE6MS1Qcm9wZXJ0eU5hbWU+LzxQcm9wZXJ0eU5hbWU+LlxuICogQHBhcmFtIGVudGl0eVR5cGUgVGhlIHJvb3QgRW50aXR5VHlwZVxuICogQHBhcmFtIHByb3BlcnR5UGF0aCBUaGUgZnVsbCBwYXRoIHRvIHRoZSB0YXJnZXQgcHJvcGVydHlcbiAqIEByZXR1cm5zIFRoZSBmb3JtYXR0ZWQgY29uZGl0aW9uIHBhdGhcbiAqL1xuY29uc3QgX2dldENvbmRpdGlvblBhdGggPSBmdW5jdGlvbiAoZW50aXR5VHlwZTogRW50aXR5VHlwZSwgcHJvcGVydHlQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRjb25zdCBwYXJ0cyA9IHByb3BlcnR5UGF0aC5zcGxpdChcIi9cIik7XG5cdGxldCBwYXJ0aWFsUGF0aDtcblx0bGV0IGtleSA9IFwiXCI7XG5cdHdoaWxlIChwYXJ0cy5sZW5ndGgpIHtcblx0XHRsZXQgcGFydCA9IHBhcnRzLnNoaWZ0KCkgYXMgc3RyaW5nO1xuXHRcdHBhcnRpYWxQYXRoID0gcGFydGlhbFBhdGggPyBgJHtwYXJ0aWFsUGF0aH0vJHtwYXJ0fWAgOiBwYXJ0O1xuXHRcdGNvbnN0IHByb3BlcnR5OiBQcm9wZXJ0eSB8IE5hdmlnYXRpb25Qcm9wZXJ0eSA9IGVudGl0eVR5cGUucmVzb2x2ZVBhdGgocGFydGlhbFBhdGgpO1xuXHRcdGlmIChpc011bHRpcGxlTmF2aWdhdGlvblByb3BlcnR5KHByb3BlcnR5KSkge1xuXHRcdFx0cGFydCArPSBcIipcIjtcblx0XHR9XG5cdFx0a2V5ID0ga2V5ID8gYCR7a2V5fS8ke3BhcnR9YCA6IHBhcnQ7XG5cdH1cblx0cmV0dXJuIGtleTtcbn07XG5cbmNvbnN0IF9jcmVhdGVGaWx0ZXJTZWxlY3Rpb25GaWVsZCA9IGZ1bmN0aW9uIChcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0cHJvcGVydHk6IFByb3BlcnR5LFxuXHRmdWxsUHJvcGVydHlQYXRoOiBzdHJpbmcsXG5cdGluY2x1ZGVIaWRkZW46IGJvb2xlYW4sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogRmlsdGVyRmllbGQgfCB1bmRlZmluZWQge1xuXHQvLyBpZ25vcmUgY29tcGxleCBwcm9wZXJ0eSB0eXBlcyBhbmQgaGlkZGVuIGFubm90YXRlZCBvbmVzXG5cdGlmIChwcm9wZXJ0eSAmJiBwcm9wZXJ0eS50YXJnZXRUeXBlID09PSB1bmRlZmluZWQgJiYgKGluY2x1ZGVIaWRkZW4gfHwgcHJvcGVydHkuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSAhPT0gdHJ1ZSkpIHtcblx0XHRjb25zdCB0YXJnZXRFbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uRW50aXR5VHlwZShwcm9wZXJ0eSksXG5cdFx0XHRmaWx0ZXJGaWVsZDogRmlsdGVyRmllbGQgPSB7XG5cdFx0XHRcdGtleTogS2V5SGVscGVyLmdldFNlbGVjdGlvbkZpZWxkS2V5RnJvbVBhdGgoZnVsbFByb3BlcnR5UGF0aCksXG5cdFx0XHRcdGFubm90YXRpb25QYXRoOiBjb252ZXJ0ZXJDb250ZXh0LmdldEFic29sdXRlQW5ub3RhdGlvblBhdGgoZnVsbFByb3BlcnR5UGF0aCksXG5cdFx0XHRcdGNvbmRpdGlvblBhdGg6IF9nZXRDb25kaXRpb25QYXRoKGVudGl0eVR5cGUsIGZ1bGxQcm9wZXJ0eVBhdGgpLFxuXHRcdFx0XHRhdmFpbGFiaWxpdHk6IHByb3BlcnR5LmFubm90YXRpb25zPy5VST8uSGlkZGVuRmlsdGVyPy52YWx1ZU9mKCkgPT09IHRydWUgPyBcIkhpZGRlblwiIDogXCJBZGFwdGF0aW9uXCIsXG5cdFx0XHRcdGxhYmVsOiBwcm9wZXJ0eS5hbm5vdGF0aW9ucy5Db21tb24/LkxhYmVsPy50b1N0cmluZygpID8/IHByb3BlcnR5Lm5hbWUsXG5cdFx0XHRcdGdyb3VwOiB0YXJnZXRFbnRpdHlUeXBlLm5hbWUsXG5cdFx0XHRcdGdyb3VwTGFiZWw6IHRhcmdldEVudGl0eVR5cGU/LmFubm90YXRpb25zPy5Db21tb24/LkxhYmVsPy50b1N0cmluZygpID8/IHRhcmdldEVudGl0eVR5cGUubmFtZVxuXHRcdFx0fTtcblx0XHRnZXRTZXR0aW5nc09mRGVmYXVsdEZpbHRlckZpZWxkcyhmaWx0ZXJGaWVsZCk7XG5cdFx0cmV0dXJuIGZpbHRlckZpZWxkO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlIHRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgdGVjaG5pY2FsIHByb3BlcnR5IERyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhLiBPbmx5IHJlbGV2YW50IGZvciBDcmVhdGlvbkRhdGVUaW1lXG4gKiBhbmQgTGFzdENoYW5nZURhdGVUaW1lLCBhcyB0aGV5IGFyZSBkaXNwbGF5aW5nIHRoZSB0aW1lZnJhbWUgcmVsYXRlZCBwcm9wZXJ0aWVzIGFzIGEgU2VtYW50aWNEYXRlUmFuZ2UuXG4gKiBAcGFyYW0gZmlsdGVyRmllbGRcbiAqL1xuY29uc3QgZ2V0U2V0dGluZ3NPZkRlZmF1bHRGaWx0ZXJGaWVsZHMgPSBmdW5jdGlvbiAoZmlsdGVyRmllbGQ6IEZpbHRlckZpZWxkKTogdm9pZCB7XG5cdGlmIChcblx0XHRmaWx0ZXJGaWVsZC5rZXkgPT09IFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGE6OkNyZWF0aW9uRGF0ZVRpbWVcIiB8fFxuXHRcdGZpbHRlckZpZWxkLmtleSA9PT0gXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YTo6TGFzdENoYW5nZURhdGVUaW1lXCJcblx0KSB7XG5cdFx0Y29uc3Qgc3RhbmRhcmREeW5hbWljRGF0ZVJhbmdlS2V5cyA9IFtcblx0XHRcdFN0YW5kYXJkRHluYW1pY0RhdGVSYW5nZUtleXMuVE8sXG5cdFx0XHRTdGFuZGFyZER5bmFtaWNEYXRlUmFuZ2VLZXlzLlRPTU9SUk9XLFxuXHRcdFx0U3RhbmRhcmREeW5hbWljRGF0ZVJhbmdlS2V5cy5ORVhUV0VFSyxcblx0XHRcdFN0YW5kYXJkRHluYW1pY0RhdGVSYW5nZUtleXMuTkVYVE1PTlRILFxuXHRcdFx0U3RhbmRhcmREeW5hbWljRGF0ZVJhbmdlS2V5cy5ORVhUUVVBUlRFUixcblx0XHRcdFN0YW5kYXJkRHluYW1pY0RhdGVSYW5nZUtleXMuTkVYVFlFQVJcblx0XHRdO1xuXHRcdGZpbHRlckZpZWxkLnNldHRpbmdzID0ge1xuXHRcdFx0b3BlcmF0b3JDb25maWd1cmF0aW9uOiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRwYXRoOiBcImtleVwiLFxuXHRcdFx0XHRcdGVxdWFsczogc3RhbmRhcmREeW5hbWljRGF0ZVJhbmdlS2V5cy5qb2luKFwiLFwiKSxcblx0XHRcdFx0XHRleGNsdWRlOiB0cnVlXG5cdFx0XHRcdH1cblx0XHRcdF1cblx0XHR9O1xuXHR9XG59O1xuXG5jb25zdCBfZ2V0U2VsZWN0aW9uRmllbGRzID0gZnVuY3Rpb24gKFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRuYXZpZ2F0aW9uUGF0aDogc3RyaW5nLFxuXHRwcm9wZXJ0aWVzOiBBcnJheTxQcm9wZXJ0eT4gfCB1bmRlZmluZWQsXG5cdGluY2x1ZGVIaWRkZW46IGJvb2xlYW4sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGQ+IHtcblx0Y29uc3Qgc2VsZWN0aW9uRmllbGRNYXA6IFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkPiA9IHt9O1xuXHRpZiAocHJvcGVydGllcykge1xuXHRcdHByb3BlcnRpZXMuZm9yRWFjaCgocHJvcGVydHk6IFByb3BlcnR5KSA9PiB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVBhdGg6IHN0cmluZyA9IHByb3BlcnR5Lm5hbWU7XG5cdFx0XHRjb25zdCBmdWxsUGF0aDogc3RyaW5nID0gKG5hdmlnYXRpb25QYXRoID8gYCR7bmF2aWdhdGlvblBhdGh9L2AgOiBcIlwiKSArIHByb3BlcnR5UGF0aDtcblx0XHRcdGNvbnN0IHNlbGVjdGlvbkZpZWxkID0gX2NyZWF0ZUZpbHRlclNlbGVjdGlvbkZpZWxkKGVudGl0eVR5cGUsIHByb3BlcnR5LCBmdWxsUGF0aCwgaW5jbHVkZUhpZGRlbiwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0XHRpZiAoc2VsZWN0aW9uRmllbGQpIHtcblx0XHRcdFx0c2VsZWN0aW9uRmllbGRNYXBbZnVsbFBhdGhdID0gc2VsZWN0aW9uRmllbGQ7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIHNlbGVjdGlvbkZpZWxkTWFwO1xufTtcblxuY29uc3QgX2dldFNlbGVjdGlvbkZpZWxkc0J5UGF0aCA9IGZ1bmN0aW9uIChcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0cHJvcGVydHlQYXRoczogQXJyYXk8c3RyaW5nPiB8IHVuZGVmaW5lZCxcblx0aW5jbHVkZUhpZGRlbjogYm9vbGVhbixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4ge1xuXHRsZXQgc2VsZWN0aW9uRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4gPSB7fTtcblx0aWYgKHByb3BlcnR5UGF0aHMpIHtcblx0XHRwcm9wZXJ0eVBhdGhzLmZvckVhY2goKHByb3BlcnR5UGF0aDogc3RyaW5nKSA9PiB7XG5cdFx0XHRsZXQgbG9jYWxTZWxlY3Rpb25GaWVsZHM6IFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkPiA9IHt9O1xuXHRcdFx0Y29uc3QgZW5oYW5jZWRQYXRoID0gZW5oYW5jZURhdGFNb2RlbFBhdGg8UHJvcGVydHkgfCBOYXZpZ2F0aW9uUHJvcGVydHk+KFxuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSxcblx0XHRcdFx0cHJvcGVydHlQYXRoXG5cdFx0XHQpO1xuXHRcdFx0Y29uc3QgcHJvcGVydHkgPSBlbmhhbmNlZFBhdGgudGFyZ2V0T2JqZWN0O1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRwcm9wZXJ0eSA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0XHRcdCghaW5jbHVkZUhpZGRlbiAmJlxuXHRcdFx0XHRcdGVuaGFuY2VkUGF0aC5uYXZpZ2F0aW9uUHJvcGVydGllcy5maW5kKFxuXHRcdFx0XHRcdFx0KG5hdmlnYXRpb25Qcm9wZXJ0eSkgPT4gbmF2aWdhdGlvblByb3BlcnR5LmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkgPT09IHRydWVcblx0XHRcdFx0XHQpKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGlmIChpc05hdmlnYXRpb25Qcm9wZXJ0eShwcm9wZXJ0eSkpIHtcblx0XHRcdFx0Ly8gaGFuZGxlIG5hdmlnYXRpb24gcHJvcGVydGllc1xuXHRcdFx0XHRsb2NhbFNlbGVjdGlvbkZpZWxkcyA9IF9nZXRTZWxlY3Rpb25GaWVsZHMoXG5cdFx0XHRcdFx0ZW50aXR5VHlwZSxcblx0XHRcdFx0XHRwcm9wZXJ0eVBhdGgsXG5cdFx0XHRcdFx0cHJvcGVydHkudGFyZ2V0VHlwZS5lbnRpdHlQcm9wZXJ0aWVzLFxuXHRcdFx0XHRcdGluY2x1ZGVIaWRkZW4sXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIGlmIChpc0NvbXBsZXhUeXBlKHByb3BlcnR5LnRhcmdldFR5cGUpKSB7XG5cdFx0XHRcdC8vIGhhbmRsZSBDb21wbGV4VHlwZSBwcm9wZXJ0aWVzXG5cdFx0XHRcdGxvY2FsU2VsZWN0aW9uRmllbGRzID0gX2dldFNlbGVjdGlvbkZpZWxkcyhcblx0XHRcdFx0XHRlbnRpdHlUeXBlLFxuXHRcdFx0XHRcdHByb3BlcnR5UGF0aCxcblx0XHRcdFx0XHRwcm9wZXJ0eS50YXJnZXRUeXBlLnByb3BlcnRpZXMsXG5cdFx0XHRcdFx0aW5jbHVkZUhpZGRlbixcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRsb2NhbFNlbGVjdGlvbkZpZWxkcyA9IF9nZXRTZWxlY3Rpb25GaWVsZHMoXG5cdFx0XHRcdFx0ZW50aXR5VHlwZSxcblx0XHRcdFx0XHRnZXRUYXJnZXROYXZpZ2F0aW9uUGF0aChlbmhhbmNlZFBhdGgsIHRydWUpLFxuXHRcdFx0XHRcdFtwcm9wZXJ0eV0sXG5cdFx0XHRcdFx0aW5jbHVkZUhpZGRlbixcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cblx0XHRcdHNlbGVjdGlvbkZpZWxkcyA9IHtcblx0XHRcdFx0Li4uc2VsZWN0aW9uRmllbGRzLFxuXHRcdFx0XHQuLi5sb2NhbFNlbGVjdGlvbkZpZWxkc1xuXHRcdFx0fTtcblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gc2VsZWN0aW9uRmllbGRzO1xufTtcblxuY29uc3QgX2dldEZpbHRlckZpZWxkID0gZnVuY3Rpb24gKFxuXHRmaWx0ZXJGaWVsZHM6IFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkPixcblx0cHJvcGVydHlQYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZVxuKTogRmlsdGVyRmllbGQgfCB1bmRlZmluZWQge1xuXHRsZXQgZmlsdGVyRmllbGQ6IEZpbHRlckZpZWxkIHwgdW5kZWZpbmVkID0gZmlsdGVyRmllbGRzW3Byb3BlcnR5UGF0aF07XG5cdGlmIChmaWx0ZXJGaWVsZCkge1xuXHRcdGRlbGV0ZSBmaWx0ZXJGaWVsZHNbcHJvcGVydHlQYXRoXTtcblx0fSBlbHNlIHtcblx0XHRmaWx0ZXJGaWVsZCA9IF9jcmVhdGVGaWx0ZXJTZWxlY3Rpb25GaWVsZChlbnRpdHlUeXBlLCBlbnRpdHlUeXBlLnJlc29sdmVQYXRoKHByb3BlcnR5UGF0aCksIHByb3BlcnR5UGF0aCwgdHJ1ZSwgY29udmVydGVyQ29udGV4dCk7XG5cdH1cblx0aWYgKCFmaWx0ZXJGaWVsZCkge1xuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RGlhZ25vc3RpY3MoKT8uYWRkSXNzdWUoSXNzdWVDYXRlZ29yeS5Bbm5vdGF0aW9uLCBJc3N1ZVNldmVyaXR5LkhpZ2gsIElzc3VlVHlwZS5NSVNTSU5HX1NFTEVDVElPTkZJRUxEKTtcblx0fVxuXHQvLyBkZWZpbmVkIFNlbGVjdGlvbkZpZWxkcyBhcmUgYXZhaWxhYmxlIGJ5IGRlZmF1bHRcblx0aWYgKGZpbHRlckZpZWxkKSB7XG5cdFx0ZmlsdGVyRmllbGQuYXZhaWxhYmlsaXR5ID0gZmlsdGVyRmllbGQuYXZhaWxhYmlsaXR5ID09PSBcIkhpZGRlblwiID8gXCJIaWRkZW5cIiA6IFwiRGVmYXVsdFwiO1xuXHRcdGZpbHRlckZpZWxkLmlzUGFyYW1ldGVyID0gISFlbnRpdHlUeXBlLmFubm90YXRpb25zPy5Db21tb24/LlJlc3VsdENvbnRleHQ7XG5cdH1cblx0cmV0dXJuIGZpbHRlckZpZWxkO1xufTtcblxuY29uc3QgX2dldERlZmF1bHRGaWx0ZXJGaWVsZHMgPSBmdW5jdGlvbiAoXG5cdGFTZWxlY3RPcHRpb25zOiBTZWxlY3RPcHRpb25UeXBlW10sXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0ZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzOiBTZXQ8c3RyaW5nPixcblx0YW5ub3RhdGVkU2VsZWN0aW9uRmllbGRzOiBQcm9wZXJ0eVBhdGhbXVxuKTogRmlsdGVyRmllbGRbXSB7XG5cdGNvbnN0IHNlbGVjdGlvbkZpZWxkczogRmlsdGVyRmllbGRbXSA9IFtdO1xuXHRjb25zdCBVSVNlbGVjdGlvbkZpZWxkczogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fTtcblx0Y29uc3QgcHJvcGVydGllcyA9IGVudGl0eVR5cGUuZW50aXR5UHJvcGVydGllcztcblx0Ly8gVXNpbmcgZW50aXR5VHlwZSBpbnN0ZWFkIG9mIGVudGl0eVNldFxuXHRhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHM/LmZvckVhY2goKFNlbGVjdGlvbkZpZWxkKSA9PiB7XG5cdFx0VUlTZWxlY3Rpb25GaWVsZHNbU2VsZWN0aW9uRmllbGQudmFsdWVdID0gdHJ1ZTtcblx0fSk7XG5cdGlmIChhU2VsZWN0T3B0aW9ucyAmJiBhU2VsZWN0T3B0aW9ucy5sZW5ndGggPiAwKSB7XG5cdFx0YVNlbGVjdE9wdGlvbnM/LmZvckVhY2goKHNlbGVjdE9wdGlvbjogU2VsZWN0T3B0aW9uVHlwZSkgPT4ge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlOYW1lID0gc2VsZWN0T3B0aW9uLlByb3BlcnR5TmFtZTtcblx0XHRcdGNvbnN0IHNQcm9wZXJ0eVBhdGggPSBwcm9wZXJ0eU5hbWU/LnZhbHVlO1xuXHRcdFx0Y29uc3QgY3VycmVudFNlbGVjdGlvbkZpZWxkczogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fTtcblx0XHRcdGFubm90YXRlZFNlbGVjdGlvbkZpZWxkcz8uZm9yRWFjaCgoU2VsZWN0aW9uRmllbGQpID0+IHtcblx0XHRcdFx0Y3VycmVudFNlbGVjdGlvbkZpZWxkc1tTZWxlY3Rpb25GaWVsZC52YWx1ZV0gPSB0cnVlO1xuXHRcdFx0fSk7XG5cdFx0XHRpZiAoc1Byb3BlcnR5UGF0aCAmJiAhZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzLmhhcyhzUHJvcGVydHlQYXRoKSkge1xuXHRcdFx0XHRpZiAoIShzUHJvcGVydHlQYXRoIGluIGN1cnJlbnRTZWxlY3Rpb25GaWVsZHMpKSB7XG5cdFx0XHRcdFx0Y29uc3QgRmlsdGVyRmllbGQ6IEZpbHRlckZpZWxkIHwgdW5kZWZpbmVkID0gZ2V0RmlsdGVyRmllbGQoc1Byb3BlcnR5UGF0aCwgY29udmVydGVyQ29udGV4dCwgZW50aXR5VHlwZSk7XG5cdFx0XHRcdFx0aWYgKEZpbHRlckZpZWxkKSB7XG5cdFx0XHRcdFx0XHRzZWxlY3Rpb25GaWVsZHMucHVzaChGaWx0ZXJGaWVsZCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAocHJvcGVydGllcykge1xuXHRcdHByb3BlcnRpZXMuZm9yRWFjaCgocHJvcGVydHk6IFByb3BlcnR5KSA9PiB7XG5cdFx0XHRjb25zdCBkZWZhdWx0RmlsdGVyVmFsdWUgPSBwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5GaWx0ZXJEZWZhdWx0VmFsdWU7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVBhdGggPSBwcm9wZXJ0eS5uYW1lO1xuXHRcdFx0aWYgKCEocHJvcGVydHlQYXRoIGluIGV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllcykpIHtcblx0XHRcdFx0aWYgKGRlZmF1bHRGaWx0ZXJWYWx1ZSAmJiAhKHByb3BlcnR5UGF0aCBpbiBVSVNlbGVjdGlvbkZpZWxkcykpIHtcblx0XHRcdFx0XHRjb25zdCBGaWx0ZXJGaWVsZDogRmlsdGVyRmllbGQgfCB1bmRlZmluZWQgPSBnZXRGaWx0ZXJGaWVsZChwcm9wZXJ0eVBhdGgsIGNvbnZlcnRlckNvbnRleHQsIGVudGl0eVR5cGUpO1xuXHRcdFx0XHRcdGlmIChGaWx0ZXJGaWVsZCkge1xuXHRcdFx0XHRcdFx0c2VsZWN0aW9uRmllbGRzLnB1c2goRmlsdGVyRmllbGQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBzZWxlY3Rpb25GaWVsZHM7XG59O1xuXG4vKipcbiAqIEdldCBhbGwgcGFyYW1ldGVyIGZpbHRlciBmaWVsZHMgaW4gY2FzZSBvZiBhIHBhcmFtZXRlcml6ZWQgc2VydmljZS5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBwYXJhbWV0ZXIgRmlsdGVyRmllbGRzXG4gKi9cbmZ1bmN0aW9uIF9nZXRQYXJhbWV0ZXJGaWVsZHMoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+KTogRmlsdGVyRmllbGRbXSB7XG5cdGNvbnN0IGRhdGFNb2RlbE9iamVjdFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKTtcblx0Y29uc3QgcGFyYW1ldGVyRW50aXR5VHlwZSA9IGRhdGFNb2RlbE9iamVjdFBhdGguc3RhcnRpbmdFbnRpdHlTZXQuZW50aXR5VHlwZTtcblx0Y29uc3QgaXNQYXJhbWV0ZXJpemVkID0gISFwYXJhbWV0ZXJFbnRpdHlUeXBlLmFubm90YXRpb25zPy5Db21tb24/LlJlc3VsdENvbnRleHQgJiYgIWRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0RW50aXR5U2V0O1xuXHRjb25zdCBwYXJhbWV0ZXJDb252ZXJ0ZXJDb250ZXh0ID1cblx0XHRpc1BhcmFtZXRlcml6ZWQgJiYgY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yPEVudGl0eVNldD4oYC8ke2RhdGFNb2RlbE9iamVjdFBhdGguc3RhcnRpbmdFbnRpdHlTZXQubmFtZX1gKTtcblxuXHRyZXR1cm4gKFxuXHRcdHBhcmFtZXRlckNvbnZlcnRlckNvbnRleHRcblx0XHRcdD8gcGFyYW1ldGVyRW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzLm1hcChmdW5jdGlvbiAocHJvcGVydHkpIHtcblx0XHRcdFx0XHRyZXR1cm4gX2dldEZpbHRlckZpZWxkKFxuXHRcdFx0XHRcdFx0e30gYXMgUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGQ+LFxuXHRcdFx0XHRcdFx0cHJvcGVydHkubmFtZSxcblx0XHRcdFx0XHRcdHBhcmFtZXRlckNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdFx0XHRwYXJhbWV0ZXJFbnRpdHlUeXBlXG5cdFx0XHRcdFx0KTtcblx0XHRcdCAgfSlcblx0XHRcdDogW11cblx0KSBhcyBGaWx0ZXJGaWVsZFtdO1xufVxuXG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIEZpbHRlckJhciBzZWFyY2ggZmllbGQgaXMgaGlkZGVuIG9yIG5vdC5cbiAqIEBwYXJhbSBsaXN0UmVwb3J0VGFibGVzIFRoZSBsaXN0IHJlcG9ydCB0YWJsZXNcbiAqIEBwYXJhbSBjaGFydHMgVGhlIEFMUCBjaGFydHNcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgVGhlIGluZm9ybWF0aW9uIGlmIHRoZSBGaWx0ZXJCYXIgc2VhcmNoIGZpZWxkIGlzIGhpZGRlbiBvciBub3RcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEZpbHRlckJhckhpZGVCYXNpY1NlYXJjaCA9IGZ1bmN0aW9uIChcblx0bGlzdFJlcG9ydFRhYmxlczogVGFibGVWaXN1YWxpemF0aW9uW10sXG5cdGNoYXJ0czogQ2hhcnRWaXN1YWxpemF0aW9uW10sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogYm9vbGVhbiB7XG5cdC8vIENoZWNrIGlmIGNoYXJ0cyBhbGxvdyBzZWFyY2hcblx0Y29uc3Qgbm9TZWFyY2hJbkNoYXJ0cyA9IGNoYXJ0cy5sZW5ndGggPT09IDAgfHwgY2hhcnRzLmV2ZXJ5KChjaGFydCkgPT4gIWNoYXJ0LmFwcGx5U3VwcG9ydGVkLmVuYWJsZVNlYXJjaCk7XG5cblx0Ly8gQ2hlY2sgaWYgYWxsIHRhYmxlcyBhcmUgYW5hbHl0aWNhbCBhbmQgbm9uZSBvZiB0aGVtIGFsbG93IGZvciBzZWFyY2hcblx0Ly8gb3IgYWxsIHRhYmxlcyBhcmUgVHJlZVRhYmxlIGFuZCBub25lIG9mIHRoZW0gYWxsb3cgZm9yIHNlYXJjaFxuXHRjb25zdCBub1NlYXJjaEluVGFibGVzID1cblx0XHRsaXN0UmVwb3J0VGFibGVzLmxlbmd0aCA9PT0gMCB8fFxuXHRcdGxpc3RSZXBvcnRUYWJsZXMuZXZlcnkoKHRhYmxlKSA9PiAodGFibGUuZW5hYmxlQW5hbHl0aWNzIHx8IHRhYmxlLmNvbnRyb2wudHlwZSA9PT0gXCJUcmVlVGFibGVcIikgJiYgIXRhYmxlLmVuYWJsZUJhc2ljU2VhcmNoKTtcblxuXHRjb25zdCBjb250ZXh0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udGV4dFBhdGgoKTtcblx0aWYgKGNvbnRleHRQYXRoICYmIG5vU2VhcmNoSW5DaGFydHMgJiYgbm9TZWFyY2hJblRhYmxlcykge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgZmlsdGVyIGZpZWxkcyBmcm9tIHRoZSBtYW5pZmVzdC5cbiAqIEBwYXJhbSBlbnRpdHlUeXBlIFRoZSBjdXJyZW50IGVudGl0eVR5cGVcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIGFubm90YXRpb25QYXRoIEFubm90YXRpb24gcGF0aCBvZiB0aGUgc2VsZWN0aW9uIGZpZWxkc1xuICogQHJldHVybnMgVGhlIGZpbHRlciBmaWVsZHMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3RcbiAqL1xuZXhwb3J0IGNvbnN0IGdldE1hbmlmZXN0RmlsdGVyRmllbGRzID0gZnVuY3Rpb24gKFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGFubm90YXRpb25QYXRoPzogc3RyaW5nXG4pOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21FbGVtZW50RmlsdGVyRmllbGQ+IHtcblx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblxuXHRjb25zdCBzZXR0aW5nc0NvbnRleHRQYXRoID1cblx0XHRtYW5pZmVzdFdyYXBwZXIuZ2V0Q29udGV4dFBhdGgoKSB8fCAobWFuaWZlc3RXcmFwcGVyLmdldEVudGl0eVNldCgpID8gYC8ke21hbmlmZXN0V3JhcHBlci5nZXRFbnRpdHlTZXQoKX1gIDogdW5kZWZpbmVkKTtcblx0Y29uc3QgZmlsdGVyQ29uZmlndXJhdGlvblBhdGggPSBnZXRGaWx0ZXJDb25maWd1cmF0aW9uUGF0aChjb252ZXJ0ZXJDb250ZXh0LCBzZXR0aW5nc0NvbnRleHRQYXRoLCBhbm5vdGF0aW9uUGF0aCk7XG5cdGxldCBmYkNvbmZpZzogRmlsdGVyTWFuaWZlc3RDb25maWd1cmF0aW9uID0ge307XG5cdGZiQ29uZmlnID0gbWFuaWZlc3RXcmFwcGVyLmdldEZpbHRlckNvbmZpZ3VyYXRpb24oZmlsdGVyQ29uZmlndXJhdGlvblBhdGgpO1xuXG5cdGNvbnN0IGRlZmluZWRGaWx0ZXJGaWVsZHM6IFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkTWFuaWZlc3RDb25maWd1cmF0aW9uPiA9IGZiQ29uZmlnPy5maWx0ZXJGaWVsZHMgfHwge307XG5cdGNvbnN0IHNlbGVjdGlvbkZpZWxkczogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGQ+ID0gX2dldFNlbGVjdGlvbkZpZWxkc0J5UGF0aChcblx0XHRlbnRpdHlUeXBlLFxuXHRcdE9iamVjdC5rZXlzKGRlZmluZWRGaWx0ZXJGaWVsZHMpLm1hcCgoa2V5KSA9PiBkZWZpbmVkRmlsdGVyRmllbGRzW2tleV0ucHJvcGVydHkgPz8gS2V5SGVscGVyLmdldFBhdGhGcm9tU2VsZWN0aW9uRmllbGRLZXkoa2V5KSksXG5cdFx0dHJ1ZSxcblx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdCk7XG5cdGNvbnN0IGZpbHRlckZpZWxkczogUmVjb3JkPHN0cmluZywgQ3VzdG9tRWxlbWVudEZpbHRlckZpZWxkPiA9IHt9O1xuXG5cdGZvciAoY29uc3Qgc0tleSBpbiBkZWZpbmVkRmlsdGVyRmllbGRzKSB7XG5cdFx0Y29uc3QgZmlsdGVyRmllbGQgPSBkZWZpbmVkRmlsdGVyRmllbGRzW3NLZXldO1xuXHRcdGNvbnN0IHByb3BlcnR5TmFtZSA9IGZpbHRlckZpZWxkLnByb3BlcnR5ID8/IEtleUhlbHBlci5nZXRQYXRoRnJvbVNlbGVjdGlvbkZpZWxkS2V5KHNLZXkpO1xuXHRcdGNvbnN0IHNlbGVjdGlvbkZpZWxkID0gc2VsZWN0aW9uRmllbGRzW3Byb3BlcnR5TmFtZV07XG5cdFx0Y29uc3QgdHlwZSA9IGZpbHRlckZpZWxkLnR5cGUgPT09IFwiU2xvdFwiID8gZmlsdGVyRmllbGRUeXBlLlNsb3QgOiBmaWx0ZXJGaWVsZFR5cGUuRGVmYXVsdDtcblx0XHRjb25zdCB2aXN1YWxGaWx0ZXIgPVxuXHRcdFx0ZmlsdGVyRmllbGQgJiYgZmlsdGVyRmllbGQ/LnZpc3VhbEZpbHRlclxuXHRcdFx0XHQ/IGdldFZpc3VhbEZpbHRlcnMoZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCwgc0tleSwgZGVmaW5lZEZpbHRlckZpZWxkcylcblx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0aWYgKGZpbHRlckZpZWxkLnRlbXBsYXRlIHx8IGZpbHRlckZpZWxkLnR5cGUgPT09IGZpbHRlckZpZWxkVHlwZS5TbG90KSB7XG5cdFx0XHRpZiAoZmlsdGVyRmllbGQuc2V0dGluZ3MpIHtcblx0XHRcdFx0ZmlsdGVyRmllbGQuc2V0dGluZ3MuaXNDdXN0b21GaWx0ZXIgPSB0cnVlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZmlsdGVyRmllbGQuc2V0dGluZ3MgPSB7XG5cdFx0XHRcdFx0aXNDdXN0b21GaWx0ZXI6IHRydWVcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHR9XG5cdFx0ZmlsdGVyRmllbGRzW3NLZXldID0ge1xuXHRcdFx0a2V5OiBzS2V5LFxuXHRcdFx0dHlwZTogdHlwZSxcblx0XHRcdHNsb3ROYW1lOiBmaWx0ZXJGaWVsZD8uc2xvdE5hbWUgfHwgc0tleSxcblx0XHRcdGFubm90YXRpb25QYXRoOiBzZWxlY3Rpb25GaWVsZD8uYW5ub3RhdGlvblBhdGgsXG5cdFx0XHRjb25kaXRpb25QYXRoOiBmaWx0ZXJGaWVsZC5wcm9wZXJ0eVxuXHRcdFx0XHQ/IEtleUhlbHBlci5nZXRQYXRoRnJvbVNlbGVjdGlvbkZpZWxkS2V5KHNLZXkpXG5cdFx0XHRcdDogc2VsZWN0aW9uRmllbGQ/LmNvbmRpdGlvblBhdGggfHwgcHJvcGVydHlOYW1lLFxuXHRcdFx0ZG9jdW1lbnRSZWZUZXh0OlxuXHRcdFx0XHRmaWx0ZXJGaWVsZC5wcm9wZXJ0eSAmJlxuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmZldGNoVGV4dEZyb21NZXRhTW9kZWwoXG5cdFx0XHRcdFx0XCJ7bWV0YU1vZGVsPlwiICsgZmlsdGVyRmllbGQucHJvcGVydHkgKyBcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRG9jdW1lbnRhdGlvblJlZn1cIlxuXHRcdFx0XHQpLFxuXHRcdFx0dGVtcGxhdGU6IGZpbHRlckZpZWxkLnRlbXBsYXRlLFxuXHRcdFx0bGFiZWw6IGNvbnZlcnRlckNvbnRleHQuZmV0Y2hUZXh0RnJvbU1ldGFNb2RlbChmaWx0ZXJGaWVsZC5sYWJlbCksXG5cdFx0XHRwb3NpdGlvbjogZmlsdGVyRmllbGQucG9zaXRpb24gfHwgeyBwbGFjZW1lbnQ6IFBsYWNlbWVudC5BZnRlciB9LFxuXHRcdFx0YXZhaWxhYmlsaXR5OiBmaWx0ZXJGaWVsZC5hdmFpbGFiaWxpdHkgfHwgXCJEZWZhdWx0XCIsXG5cdFx0XHRzZXR0aW5nczogZmlsdGVyRmllbGQuc2V0dGluZ3MsXG5cdFx0XHR2aXN1YWxGaWx0ZXI6IHZpc3VhbEZpbHRlcixcblx0XHRcdHJlcXVpcmVkOiBmaWx0ZXJGaWVsZC5yZXF1aXJlZFxuXHRcdH07XG5cdH1cblx0cmV0dXJuIGZpbHRlckZpZWxkcztcbn07XG5cbi8qKlxuICogUmV0dXJucyBjb25maWd1cmF0aW9uIHBhdGggdG8gZmV0Y2ggdGhlIGN1c3RvbSBmaWx0ZXIgZmllbGRzIGZyb20gbWFuaWZlc3QuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSBzZXR0aW5nc0NvbnRleHRQYXRoIE1hbmlmZXN0IGVudGl0eSBzZXQgcGF0aCBhbmQgY29udGV4dCBwYXRoXG4gKiBAcGFyYW0gYW5ub3RhdGlvblBhdGggVGhlIGFubm90YXRpb24gcGF0aFxuICogQHJldHVybnMgUGF0aCB0byBmZXRjaCB0aGUgY3VzdG9tIGZpbHRlcnMgZnJvbSB0aGUgbWFuaWZlc3RcbiAqL1xuY29uc3QgZ2V0RmlsdGVyQ29uZmlndXJhdGlvblBhdGggPSBmdW5jdGlvbiAoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0c2V0dGluZ3NDb250ZXh0UGF0aD86IHN0cmluZyxcblx0YW5ub3RhdGlvblBhdGg/OiBzdHJpbmdcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGxldCBvYmplY3RQYXRoO1xuXHRjb25zdCBmaWx0ZXJCYXJDb250ZXh0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udGV4dFBhdGgoKTtcblx0Y29uc3QgbWV0YVBhdGggPSBgJHtmaWx0ZXJCYXJDb250ZXh0UGF0aH0vJHthbm5vdGF0aW9uUGF0aH1gO1xuXHRpZiAoc2V0dGluZ3NDb250ZXh0UGF0aCAmJiBtZXRhUGF0aD8uc3RhcnRzV2l0aChzZXR0aW5nc0NvbnRleHRQYXRoKSAmJiBhbm5vdGF0aW9uUGF0aCkge1xuXHRcdG9iamVjdFBhdGggPSBtZXRhUGF0aC5yZXBsYWNlKGAke3NldHRpbmdzQ29udGV4dFBhdGh9L2AsIFwiXCIpO1xuXHR9IGVsc2Uge1xuXHRcdG9iamVjdFBhdGggPSBhbm5vdGF0aW9uUGF0aDtcblx0fVxuXHRyZXR1cm4gb2JqZWN0UGF0aCA/IG9iamVjdFBhdGggOiB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RmlsdGVyRmllbGQgPSBmdW5jdGlvbiAoXG5cdHByb3BlcnR5UGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGVcbik6IEZpbHRlckZpZWxkIHwgdW5kZWZpbmVkIHtcblx0cmV0dXJuIF9nZXRGaWx0ZXJGaWVsZCh7fSwgcHJvcGVydHlQYXRoLCBjb252ZXJ0ZXJDb250ZXh0LCBlbnRpdHlUeXBlKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRGaWx0ZXJSZXN0cmljdGlvbnMgPSBmdW5jdGlvbiAoXG5cdG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uOiBGaWx0ZXJSZXN0cmljdGlvbnNUeXBlIHwgdW5kZWZpbmVkLFxuXHRzUmVzdHJpY3Rpb246IFwiUmVxdWlyZWRQcm9wZXJ0aWVzXCIgfCBcIk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzXCJcbik6IHN0cmluZ1tdIHtcblx0bGV0IGFQcm9wczogc3RyaW5nW10gPSBbXTtcblx0aWYgKG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uICYmIG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uW3NSZXN0cmljdGlvbl0pIHtcblx0XHRhUHJvcHMgPSBvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbltzUmVzdHJpY3Rpb25dLm1hcChmdW5jdGlvbiAob1Byb3BlcnR5KSB7XG5cdFx0XHRyZXR1cm4gb1Byb3BlcnR5LnZhbHVlO1xuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBhUHJvcHM7XG59O1xuXG5jb25zdCBnZXRTZWFyY2hGaWx0ZXJQcm9wZXJ0eUluZm8gPSBmdW5jdGlvbiAoKTogUHJvcGVydHlJbmZvIHtcblx0cmV0dXJuIHtcblx0XHRuYW1lOiBcIiRzZWFyY2hcIixcblx0XHRwYXRoOiBcIiRzZWFyY2hcIixcblx0XHRkYXRhVHlwZTogc1N0cmluZ0RhdGFUeXBlLFxuXHRcdG1heENvbmRpdGlvbnM6IDEsXG5cdFx0bGFiZWw6IFwi4oCIXCIsXG5cdFx0Y29uc3RyYWludHM6IHsgbWF4TGVuZ3RoOiAxMDAwIH1cblx0fTtcbn07XG5cbmNvbnN0IGdldEVkaXRTdGF0ZUZpbHRlclByb3BlcnR5SW5mbyA9IGZ1bmN0aW9uICgpOiBQcm9wZXJ0eUluZm8ge1xuXHRyZXR1cm4ge1xuXHRcdG5hbWU6IFwiJGVkaXRTdGF0ZVwiLFxuXHRcdG1heENvbmRpdGlvbnM6IDEsXG5cdFx0cGF0aDogXCIkZWRpdFN0YXRlXCIsXG5cdFx0Z3JvdXBMYWJlbDogXCJcIixcblx0XHRncm91cDogXCJcIixcblx0XHRkYXRhVHlwZTogc1N0cmluZ0RhdGFUeXBlLFxuXHRcdGhpZGRlbkZpbHRlcjogZmFsc2Vcblx0fTtcbn07XG5cbmNvbnN0IGdldFNlYXJjaFJlc3RyaWN0aW9ucyA9IGZ1bmN0aW9uIChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiBTZWFyY2hSZXN0cmljdGlvbnMgfCB1bmRlZmluZWQge1xuXHRjb25zdCBlbnRpdHlTZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpO1xuXHRyZXR1cm4gaXNFbnRpdHlTZXQoZW50aXR5U2V0KSA/IGVudGl0eVNldC5hbm5vdGF0aW9ucy5DYXBhYmlsaXRpZXM/LlNlYXJjaFJlc3RyaWN0aW9ucyA6IHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXROYXZpZ2F0aW9uUmVzdHJpY3Rpb25zID0gZnVuY3Rpb24gKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHNOYXZpZ2F0aW9uUGF0aDogc3RyaW5nXG4pOiBOYXZpZ2F0aW9uUHJvcGVydHlSZXN0cmljdGlvbiB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKT8uYW5ub3RhdGlvbnM/LkNhcGFiaWxpdGllcz8uTmF2aWdhdGlvblJlc3RyaWN0aW9ucztcblx0Y29uc3QgYVJlc3RyaWN0ZWRQcm9wZXJ0aWVzID0gb05hdmlnYXRpb25SZXN0cmljdGlvbnMgJiYgb05hdmlnYXRpb25SZXN0cmljdGlvbnMuUmVzdHJpY3RlZFByb3BlcnRpZXM7XG5cdHJldHVybiAoXG5cdFx0YVJlc3RyaWN0ZWRQcm9wZXJ0aWVzICYmXG5cdFx0YVJlc3RyaWN0ZWRQcm9wZXJ0aWVzLmZpbmQoZnVuY3Rpb24gKG9SZXN0cmljdGVkUHJvcGVydHkpIHtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdG9SZXN0cmljdGVkUHJvcGVydHkgJiZcblx0XHRcdFx0b1Jlc3RyaWN0ZWRQcm9wZXJ0eS5OYXZpZ2F0aW9uUHJvcGVydHkgJiZcblx0XHRcdFx0b1Jlc3RyaWN0ZWRQcm9wZXJ0eS5OYXZpZ2F0aW9uUHJvcGVydHkudmFsdWUgPT09IHNOYXZpZ2F0aW9uUGF0aFxuXHRcdFx0KTtcblx0XHR9KVxuXHQpO1xufTtcbi8vIFRoZSBwcm9wZXJ0eUluZm8gdXNlZCBpbnRlcm5hbGx5IHdpdGhpbiBGRVxuZXhwb3J0IHR5cGUgUHJvcGVydHlJbmZvID0ge1xuXHRrZXk/OiBzdHJpbmc7XG5cdGFubm90YXRpb25QYXRoPzogc3RyaW5nO1xuXHRjb25kaXRpb25QYXRoPzogc3RyaW5nO1xuXHRuYW1lOiBzdHJpbmc7XG5cdHBhdGg/OiBzdHJpbmc7XG5cdGxhYmVsPzogc3RyaW5nO1xuXHR0b29sdGlwPzogc3RyaW5nO1xuXHR2aXNpYmxlPzogYm9vbGVhbjtcblx0Z3JvdXBMYWJlbD86IHN0cmluZztcblx0bWF4Q29uZGl0aW9ucz86IG51bWJlcjtcblx0ZGF0YVR5cGU/OiBzdHJpbmc7XG5cdGdyb3VwPzogc3RyaW5nO1xuXHRoaWRkZW5GaWx0ZXI/OiBib29sZWFuO1xuXHRkaXNwbGF5Pzogc3RyaW5nO1xuXHRpc1BhcmFtZXRlcj86IGJvb2xlYW47XG5cdGNhc2VTZW5zaXRpdmU/OiBib29sZWFuO1xuXHRhdmFpbGFiaWxpdHk/OiBBdmFpbGFiaWxpdHlUeXBlO1xuXHRwb3NpdGlvbj86IFBvc2l0aW9uO1xuXHR0eXBlPzogc3RyaW5nO1xuXHR0ZW1wbGF0ZT86IHN0cmluZztcblx0bWVudT86IHN0cmluZztcblx0cmVxdWlyZWQ/OiBib29sZWFuO1xuXHRmaWx0ZXJFeHByZXNzaW9uPzogc3RyaW5nO1xuXHRpc0N1c3RvbUZpbHRlcj86IGJvb2xlYW47XG5cdGNvbnN0cmFpbnRzPzogb2JqZWN0O1xuXHRmb3JtYXRPcHRpb25zPzogb2JqZWN0O1xuXHRzZXR0aW5ncz86IEZpbHRlclNldHRpbmdzO1xuXHR2aXN1YWxGaWx0ZXI/OiBWaXN1YWxGaWx0ZXJzO1xuXHR0eXBlQ29uZmlnPzogVHlwZUNvbmZpZztcblx0ZmlsdGVyYWJsZT86IGJvb2xlYW47XG59O1xuXG4vLyBUaGUgcHJvcGVydHlJbmZvIHdlIHNoYXJlIHdpdGggTURDXG5leHBvcnQgdHlwZSBQcm9wZXJ0eUluZm9FeHRlcm5hbCA9IHtcblx0a2V5OiBzdHJpbmc7XG5cdGxhYmVsOiBzdHJpbmc7XG5cdGRhdGFUeXBlOiBzdHJpbmc7XG5cdGNhc2VTZW5zaXRpdmU/OiBib29sZWFuO1xuXHRncm91cExhYmVsPzogc3RyaW5nO1xuXHRncm91cD86IHN0cmluZztcblx0Y29uc3RyYWludHM/OiBvYmplY3Q7XG5cdGZvcm1hdE9wdGlvbnM/OiBvYmplY3Q7XG5cdG1heENvbmRpdGlvbnM/OiBudW1iZXI7XG5cdHZpc2libGU/OiBib29sZWFuO1xuXHR0b29sdGlwPzogc3RyaW5nO1xuXHRwYXRoPzogc3RyaW5nO1xuXHRyZXF1aXJlZD86IGJvb2xlYW47XG5cdGhpZGRlbkZpbHRlcj86IGJvb2xlYW47XG59O1xuY29uc3QgX2ZldGNoQmFzaWNQcm9wZXJ0eUluZm8gPSBmdW5jdGlvbiAob0ZpbHRlckZpZWxkSW5mbzogRmlsdGVyRmllbGQgfCBQcm9wZXJ0eUluZm8pOiBQcm9wZXJ0eUluZm8ge1xuXHRyZXR1cm4ge1xuXHRcdGtleTogb0ZpbHRlckZpZWxkSW5mby5rZXksXG5cdFx0YW5ub3RhdGlvblBhdGg6IG9GaWx0ZXJGaWVsZEluZm8uYW5ub3RhdGlvblBhdGgsXG5cdFx0Y29uZGl0aW9uUGF0aDogb0ZpbHRlckZpZWxkSW5mby5jb25kaXRpb25QYXRoLFxuXHRcdG5hbWU6IG9GaWx0ZXJGaWVsZEluZm8uY29uZGl0aW9uUGF0aCEsXG5cdFx0bGFiZWw6IG9GaWx0ZXJGaWVsZEluZm8ubGFiZWwsXG5cdFx0aGlkZGVuRmlsdGVyOiBvRmlsdGVyRmllbGRJbmZvLmF2YWlsYWJpbGl0eSA9PT0gXCJIaWRkZW5cIixcblx0XHRkaXNwbGF5OiBcIlZhbHVlXCIsXG5cdFx0aXNQYXJhbWV0ZXI6IG9GaWx0ZXJGaWVsZEluZm8uaXNQYXJhbWV0ZXIsXG5cdFx0Y2FzZVNlbnNpdGl2ZTogb0ZpbHRlckZpZWxkSW5mby5jYXNlU2Vuc2l0aXZlLFxuXHRcdGF2YWlsYWJpbGl0eTogb0ZpbHRlckZpZWxkSW5mby5hdmFpbGFiaWxpdHksXG5cdFx0cG9zaXRpb246IG9GaWx0ZXJGaWVsZEluZm8ucG9zaXRpb24sXG5cdFx0dHlwZTogb0ZpbHRlckZpZWxkSW5mby50eXBlLFxuXHRcdHRlbXBsYXRlOiBvRmlsdGVyRmllbGRJbmZvLnRlbXBsYXRlLFxuXHRcdG1lbnU6IG9GaWx0ZXJGaWVsZEluZm8ubWVudSxcblx0XHRyZXF1aXJlZDogb0ZpbHRlckZpZWxkSW5mby5yZXF1aXJlZCxcblx0XHRpc0N1c3RvbUZpbHRlcjogb0ZpbHRlckZpZWxkSW5mby5zZXR0aW5ncz8uaXNDdXN0b21GaWx0ZXJcblx0fTtcbn07XG5cbmNvbnN0IF9nZXRNaXNzaW5nTGFiZWxGb3JNYW5pZmVzdEZpbHRlckZpZWxkcyA9IGZ1bmN0aW9uIChcblx0ZmlsdGVyRmllbGRzOiBNYW5pZmVzdEZpbHRlckZpZWxkW10sXG5cdG1hbmlmZXN0RmlsdGVyRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21FbGVtZW50RmlsdGVyRmllbGQ+XG4pOiB2b2lkIHtcblx0ZmlsdGVyRmllbGRzLmZvckVhY2goKGZpbHRlckZpZWxkKSA9PiB7XG5cdFx0aWYgKG1hbmlmZXN0RmlsdGVyRmllbGRzLmhhc093blByb3BlcnR5KGZpbHRlckZpZWxkLmtleSkgJiYgIW1hbmlmZXN0RmlsdGVyRmllbGRzW2ZpbHRlckZpZWxkLmtleV0ubGFiZWwpIHtcblx0XHRcdG1hbmlmZXN0RmlsdGVyRmllbGRzW2ZpbHRlckZpZWxkLmtleV0ubGFiZWwgPSBmaWx0ZXJGaWVsZC5sYWJlbDtcblx0XHR9XG5cdH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGRpc3BsYXlNb2RlID0gZnVuY3Rpb24gKFxuXHRvUHJvcGVydHlBbm5vdGF0aW9uczogUHJvcGVydHlBbm5vdGF0aW9ucyB8IHVuZGVmaW5lZCxcblx0b0NvbGxlY3Rpb25Bbm5vdGF0aW9uczogRW50aXR5VHlwZUFubm90YXRpb25zIHwgdW5kZWZpbmVkXG4pOiBzdHJpbmcge1xuXHRjb25zdCBvVGV4dEFubm90YXRpb24gPSBvUHJvcGVydHlBbm5vdGF0aW9ucz8uQ29tbW9uPy5UZXh0LFxuXHRcdG9UZXh0QXJyYW5nbWVudEFubm90YXRpb24gPVxuXHRcdFx0b1RleHRBbm5vdGF0aW9uICYmXG5cdFx0XHQoKG9Qcm9wZXJ0eUFubm90YXRpb25zICYmIG9Qcm9wZXJ0eUFubm90YXRpb25zPy5Db21tb24/LlRleHQ/LmFubm90YXRpb25zPy5VST8uVGV4dEFycmFuZ2VtZW50KSB8fFxuXHRcdFx0XHQob0NvbGxlY3Rpb25Bbm5vdGF0aW9ucyAmJiBvQ29sbGVjdGlvbkFubm90YXRpb25zPy5VST8uVGV4dEFycmFuZ2VtZW50KSk7XG5cblx0aWYgKG9UZXh0QXJyYW5nbWVudEFubm90YXRpb24pIHtcblx0XHRpZiAob1RleHRBcnJhbmdtZW50QW5ub3RhdGlvbi52YWx1ZU9mKCkgPT09IFwiVUkuVGV4dEFycmFuZ2VtZW50VHlwZS9UZXh0T25seVwiKSB7XG5cdFx0XHRyZXR1cm4gXCJEZXNjcmlwdGlvblwiO1xuXHRcdH0gZWxzZSBpZiAob1RleHRBcnJhbmdtZW50QW5ub3RhdGlvbi52YWx1ZU9mKCkgPT09IFwiVUkuVGV4dEFycmFuZ2VtZW50VHlwZS9UZXh0TGFzdFwiKSB7XG5cdFx0XHRyZXR1cm4gXCJWYWx1ZURlc2NyaXB0aW9uXCI7XG5cdFx0fVxuXHRcdHJldHVybiBcIkRlc2NyaXB0aW9uVmFsdWVcIjsgLy9UZXh0Rmlyc3Rcblx0fVxuXHRyZXR1cm4gb1RleHRBbm5vdGF0aW9uID8gXCJEZXNjcmlwdGlvblZhbHVlXCIgOiBcIlZhbHVlXCI7XG59O1xuXG5leHBvcnQgY29uc3QgZmV0Y2hQcm9wZXJ0eUluZm8gPSBmdW5jdGlvbiAoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0b0ZpbHRlckZpZWxkSW5mbzogRmlsdGVyRmllbGQgfCBQcm9wZXJ0eUluZm8sXG5cdG9UeXBlQ29uZmlnOiBQYXJ0aWFsPFByb3BlcnR5VHlwZUNvbmZpZz5cbik6IFByb3BlcnR5SW5mbyB7XG5cdGxldCBvUHJvcGVydHlJbmZvID0gX2ZldGNoQmFzaWNQcm9wZXJ0eUluZm8ob0ZpbHRlckZpZWxkSW5mbyk7XG5cdGNvbnN0IHNBbm5vdGF0aW9uUGF0aCA9IG9GaWx0ZXJGaWVsZEluZm8uYW5ub3RhdGlvblBhdGg7XG5cblx0aWYgKCFzQW5ub3RhdGlvblBhdGgpIHtcblx0XHRyZXR1cm4gb1Byb3BlcnR5SW5mbztcblx0fVxuXHRjb25zdCB0YXJnZXRQcm9wZXJ0eU9iamVjdCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVyQ29udGV4dEZvcjxQcm9wZXJ0eT4oc0Fubm90YXRpb25QYXRoKS5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkudGFyZ2V0T2JqZWN0O1xuXG5cdGNvbnN0IG9Qcm9wZXJ0eUFubm90YXRpb25zID0gdGFyZ2V0UHJvcGVydHlPYmplY3Q/LmFubm90YXRpb25zO1xuXHRjb25zdCBvQ29sbGVjdGlvbkFubm90YXRpb25zID0gY29udmVydGVyQ29udGV4dD8uZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM7XG5cblx0Y29uc3Qgb0Zvcm1hdE9wdGlvbnMgPSBvVHlwZUNvbmZpZy5mb3JtYXRPcHRpb25zO1xuXHRjb25zdCBvQ29uc3RyYWludHMgPSBvVHlwZUNvbmZpZy5jb25zdHJhaW50cztcblxuXHRjb25zdCB0b29sdGlwID0gb1Byb3BlcnR5QW5ub3RhdGlvbnM/LkNvbW1vbj8uUXVpY2tJbmZvPy50b1N0cmluZygpO1xuXG5cdG9Qcm9wZXJ0eUluZm8gPSBPYmplY3QuYXNzaWduKG9Qcm9wZXJ0eUluZm8sIHtcblx0XHRmb3JtYXRPcHRpb25zOiBvRm9ybWF0T3B0aW9ucyxcblx0XHRjb25zdHJhaW50czogb0NvbnN0cmFpbnRzLFxuXHRcdGRpc3BsYXk6IGRpc3BsYXlNb2RlKG9Qcm9wZXJ0eUFubm90YXRpb25zLCBvQ29sbGVjdGlvbkFubm90YXRpb25zKSxcblx0XHR0b29sdGlwOiB0b29sdGlwXG5cdH0pO1xuXHRyZXR1cm4gb1Byb3BlcnR5SW5mbztcbn07XG5cbmV4cG9ydCBjb25zdCBpc011bHRpVmFsdWUgPSBmdW5jdGlvbiAob1Byb3BlcnR5OiBQcm9wZXJ0eUluZm8pOiBib29sZWFuIHtcblx0bGV0IGJJc011bHRpVmFsdWUgPSB0cnVlO1xuXHQvL1NpbmdsZVZhbHVlIHwgTXVsdGlWYWx1ZSB8IFNpbmdsZVJhbmdlIHwgTXVsdGlSYW5nZSB8IFNlYXJjaEV4cHJlc3Npb24gfCBNdWx0aVJhbmdlT3JTZWFyY2hFeHByZXNzaW9uXG5cdHN3aXRjaCAob1Byb3BlcnR5LmZpbHRlckV4cHJlc3Npb24pIHtcblx0XHRjYXNlIFwiU2VhcmNoRXhwcmVzc2lvblwiOlxuXHRcdGNhc2UgXCJTaW5nbGVSYW5nZVwiOlxuXHRcdGNhc2UgXCJTaW5nbGVWYWx1ZVwiOlxuXHRcdFx0YklzTXVsdGlWYWx1ZSA9IGZhbHNlO1xuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdGJyZWFrO1xuXHR9XG5cdGlmIChvUHJvcGVydHkudHlwZSAmJiBvUHJvcGVydHkudHlwZS5pbmRleE9mKFwiQm9vbGVhblwiKSA+IDApIHtcblx0XHRiSXNNdWx0aVZhbHVlID0gZmFsc2U7XG5cdH1cblx0cmV0dXJuIGJJc011bHRpVmFsdWU7XG59O1xuXG5jb25zdCBfaXNGaWx0ZXJhYmxlTmF2aWdhdGlvblByb3BlcnR5ID0gZnVuY3Rpb24gKFxuXHRlbnRyeTogRGF0YUZpZWxkQWJzdHJhY3RUeXBlc1xuKTogZW50cnkgaXMgQW5ub3RhdGlvblRlcm08RGF0YUZpZWxkIHwgRGF0YUZpZWxkV2l0aFVybCB8IERhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aD4ge1xuXHRyZXR1cm4gKFxuXHRcdChlbnRyeS4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkIHx8XG5cdFx0XHRlbnRyeS4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aFVybCB8fFxuXHRcdFx0ZW50cnkuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aCkgJiZcblx0XHRlbnRyeS5WYWx1ZS5wYXRoPy5pbmNsdWRlcyhcIi9cIilcblx0KTtcbn07XG5cbi8qKlxuICogQWRkcyB0aGUgYWRkaXRpb25hbCBwcm9wZXJ0eSB3aGljaCByZWZlcmVuY2VzIHRvIHRoZSB1bml0LCB0aW1lem9uZSwgdGV4dEFycmFuZ2VtZW50IG9yIGN1cnJlbmN5IGZyb20gYSBkYXRhIGZpZWxkLlxuICogQHBhcmFtIGRhdGFGaWVsZCBUaGUgZGF0YSBmaWVsZCB0byBiZSBjb25zaWRlcmVkXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSBuYXZQcm9wZXJ0aWVzIFRoZSBsaXN0IG9mIG5hdmlnYXRpb24gcHJvcGVydGllc1xuICovXG5jb25zdCBhZGRDaGlsZE5hdmlnYXRpb25Qcm9wZXJ0aWVzID0gZnVuY3Rpb24gKFxuXHRkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0bmF2UHJvcGVydGllczogc3RyaW5nW11cbik6IHZvaWQge1xuXHRjb25zdCB0YXJnZXRQcm9wZXJ0eSA9IChkYXRhRmllbGQgYXMgRGF0YUZpZWxkKS5WYWx1ZT8uJHRhcmdldDtcblx0aWYgKHRhcmdldFByb3BlcnR5KSB7XG5cdFx0Y29uc3QgYWRkaXRpb25hbFByb3BlcnR5UGF0aCA9XG5cdFx0XHRnZXRBc3NvY2lhdGVkVGV4dFByb3BlcnR5UGF0aCh0YXJnZXRQcm9wZXJ0eSkgfHxcblx0XHRcdGdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5UGF0aCh0YXJnZXRQcm9wZXJ0eSkgfHxcblx0XHRcdGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHlQYXRoKHRhcmdldFByb3BlcnR5KSB8fFxuXHRcdFx0Z2V0QXNzb2NpYXRlZFRpbWV6b25lUHJvcGVydHlQYXRoKHRhcmdldFByb3BlcnR5KTtcblx0XHRjb25zdCBuYXZpZ2F0aW9uUHJvcGVydHkgPSBhZGRpdGlvbmFsUHJvcGVydHlQYXRoXG5cdFx0XHQ/IGVuaGFuY2VEYXRhTW9kZWxQYXRoKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLCBhZGRpdGlvbmFsUHJvcGVydHlQYXRoKS5uYXZpZ2F0aW9uUHJvcGVydGllc1xuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0aWYgKG5hdmlnYXRpb25Qcm9wZXJ0eT8ubGVuZ3RoKSB7XG5cdFx0XHRjb25zdCBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoID0gbmF2aWdhdGlvblByb3BlcnR5WzBdLm5hbWU7XG5cdFx0XHRpZiAoIW5hdlByb3BlcnRpZXMuaW5jbHVkZXMobmF2aWdhdGlvblByb3BlcnR5UGF0aCkpIHtcblx0XHRcdFx0bmF2UHJvcGVydGllcy5wdXNoKG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufTtcblxuLyoqXG4gKiBHZXRzIHVzZWQgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzIGZvciBhdmFpbGFibGUgZGF0YUZpZWxkLlxuICogQHBhcmFtIG5hdlByb3BlcnRpZXMgVGhlIGxpc3Qgb2YgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0gZGF0YUZpZWxkIFRoZSBkYXRhIGZpZWxkIHRvIGJlIGNvbnNpZGVyZWRcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgVGhlIGxpc3Qgb2YgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzXG4gKi9cbmNvbnN0IGdldE5hdmlnYXRpb25Qcm9wZXJ0aWVzUmVjdXJzaXZlbHkgPSBmdW5jdGlvbiAoXG5cdG5hdlByb3BlcnRpZXM6IHN0cmluZ1tdLFxuXHRkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogc3RyaW5nW10ge1xuXHRzd2l0Y2ggKGRhdGFGaWVsZC4kVHlwZSkge1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbjpcblx0XHRcdGlmIChkYXRhRmllbGQuVGFyZ2V0Py4kdGFyZ2V0Py4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRmllbGRHcm91cFR5cGUpIHtcblx0XHRcdFx0ZGF0YUZpZWxkLlRhcmdldC4kdGFyZ2V0LkRhdGE/LmZvckVhY2goKGlubmVyRGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKSA9PiB7XG5cdFx0XHRcdFx0Z2V0TmF2aWdhdGlvblByb3BlcnRpZXNSZWN1cnNpdmVseShuYXZQcm9wZXJ0aWVzLCBpbm5lckRhdGFGaWVsZCwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGQ6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoVXJsOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoOlxuXHRcdFx0aWYgKF9pc0ZpbHRlcmFibGVOYXZpZ2F0aW9uUHJvcGVydHkoZGF0YUZpZWxkKSkge1xuXHRcdFx0XHRjb25zdCBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoID0gZ2V0UmVsYXRpdmVQYXRocyhcblx0XHRcdFx0XHRlbmhhbmNlRGF0YU1vZGVsUGF0aChjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSwgZGF0YUZpZWxkLlZhbHVlLnBhdGgpLFxuXHRcdFx0XHRcdHRydWVcblx0XHRcdFx0KS5qb2luKFwiL1wiKTtcblx0XHRcdFx0aWYgKCFuYXZQcm9wZXJ0aWVzLmluY2x1ZGVzKG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgpKSB7XG5cdFx0XHRcdFx0bmF2UHJvcGVydGllcy5wdXNoKG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHQvLyBBZGRpdGlvbmFsIHByb3BlcnR5IGZyb20gdGV4dCBhcnJhbmdlbWVudC91bml0cy9jdXJyZW5jaWVzL3RpbWV6b25lLi4uXG5cdFx0XHRhZGRDaGlsZE5hdmlnYXRpb25Qcm9wZXJ0aWVzKGRhdGFGaWVsZCwgY29udmVydGVyQ29udGV4dCwgbmF2UHJvcGVydGllcyk7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0Ly8gT3RoZXIgdHlwZXMgYXJlIG5vdCBzdXBwb3J0ZWRcblx0XHRcdGJyZWFrO1xuXHR9XG5cdHJldHVybiBuYXZQcm9wZXJ0aWVzO1xufTtcblxuY29uc3QgZ2V0QW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhID0gZnVuY3Rpb24gKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGxyVGFibGVzOiBUYWJsZVZpc3VhbGl6YXRpb25bXSA9IFtdLFxuXHRhbm5vdGF0aW9uUGF0aCA9IFwiXCIsXG5cdGluY2x1ZGVIaWRkZW4gPSBmYWxzZSxcblx0bGluZUl0ZW1UZXJtPzogc3RyaW5nXG4pOiB7XG5cdGV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllczogU2V0PHN0cmluZz47XG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGU7XG5cdGFubm90YXRlZFNlbGVjdGlvbkZpZWxkczogUHJvcGVydHlQYXRoW107XG5cdGZpbHRlckZpZWxkczogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGQ+O1xuXHRwcm9wZXJ0eUluZm9GaWVsZHM6IEZpbHRlckZpZWxkW107XG5cdGRlZmF1bHRGaWx0ZXJGaWVsZHM6IEZpbHRlckZpZWxkW107XG59IHtcblx0Ly8gY3JlYXRlIGEgbWFwIG9mIHByb3BlcnRpZXMgdG8gYmUgdXNlZCBpbiBzZWxlY3Rpb24gdmFyaWFudHMgZGVmaW5lZCBpbiB0aGUgZGlmZmVyZW50IHZpc3VhbGl6YXRpb25zIGFuZCBkaWZmZXJlbnQgdmlld3MgKG11bHRpIHRhYmxlIG1vZGUpXG5cdGNvbnN0IGV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllcyA9IGdldEV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllcyhsclRhYmxlcywgY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IGVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblx0Ly9GaWx0ZXJzIHdoaWNoIGhhcyB0byBiZSBhZGRlZCB3aGljaCBpcyBwYXJ0IG9mIFNWL0RlZmF1bHQgYW5ub3RhdGlvbnMgYnV0IG5vdCBwcmVzZW50IGluIHRoZSBTZWxlY3Rpb25GaWVsZHNcblx0Y29uc3QgYW5ub3RhdGVkU2VsZWN0aW9uRmllbGRzID0gKChhbm5vdGF0aW9uUGF0aCAmJiBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGVBbm5vdGF0aW9uKGFubm90YXRpb25QYXRoKT8uYW5ub3RhdGlvbikgfHxcblx0XHRlbnRpdHlUeXBlLmFubm90YXRpb25zPy5VST8uU2VsZWN0aW9uRmllbGRzIHx8XG5cdFx0W10pIGFzIFByb3BlcnR5UGF0aFtdO1xuXG5cdGxldCBuYXZQcm9wZXJ0aWVzOiBzdHJpbmdbXSA9IFtdO1xuXHRpZiAobHJUYWJsZXMubGVuZ3RoID09PSAwICYmICEhbGluZUl0ZW1UZXJtKSB7XG5cdFx0KGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZUFubm90YXRpb24obGluZUl0ZW1UZXJtKS5hbm5vdGF0aW9uIGFzIExpbmVJdGVtKT8uZm9yRWFjaCgoZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKSA9PiB7XG5cdFx0XHRuYXZQcm9wZXJ0aWVzID0gZ2V0TmF2aWdhdGlvblByb3BlcnRpZXNSZWN1cnNpdmVseShuYXZQcm9wZXJ0aWVzLCBkYXRhRmllbGQsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRcdH0pO1xuXHR9XG5cblx0aWYgKE1vZGVsSGVscGVyLmlzRHJhZnRSb290KGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCkpKSB7XG5cdFx0bmF2UHJvcGVydGllcy5wdXNoKFxuXHRcdFx0XCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9DcmVhdGlvbkRhdGVUaW1lXCIsXG5cdFx0XHRcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhL0NyZWF0ZWRCeVVzZXJcIixcblx0XHRcdFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEvTGFzdENoYW5nZURhdGVUaW1lXCIsXG5cdFx0XHRcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhL0xhc3RDaGFuZ2VkQnlVc2VyXCJcblx0XHQpO1xuXHR9XG5cblx0Ly8gY3JlYXRlIGEgbWFwIG9mIGFsbCBwb3RlbnRpYWwgZmlsdGVyIGZpZWxkcyBiYXNlZCBvbi4uLlxuXHRjb25zdCBmaWx0ZXJGaWVsZHM6IFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkPiA9IHtcblx0XHQvLyAuLi5ub24gaGlkZGVuIHByb3BlcnRpZXMgb2YgdGhlIGVudGl0eVxuXHRcdC4uLl9nZXRTZWxlY3Rpb25GaWVsZHMoZW50aXR5VHlwZSwgXCJcIiwgZW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzLCBpbmNsdWRlSGlkZGVuLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHQvLyAuLi4gbm9uIGhpZGRlbiBwcm9wZXJ0aWVzIG9mIG5hdmlnYXRpb24gcHJvcGVydGllc1xuXHRcdC4uLl9nZXRTZWxlY3Rpb25GaWVsZHNCeVBhdGgoZW50aXR5VHlwZSwgbmF2UHJvcGVydGllcywgZmFsc2UsIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdC8vIC4uLmFkZGl0aW9uYWwgbWFuaWZlc3QgZGVmaW5lZCBuYXZpZ2F0aW9uIHByb3BlcnRpZXNcblx0XHQuLi5fZ2V0U2VsZWN0aW9uRmllbGRzQnlQYXRoKFxuXHRcdFx0ZW50aXR5VHlwZSxcblx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuZ2V0RmlsdGVyQ29uZmlndXJhdGlvbigpLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLFxuXHRcdFx0aW5jbHVkZUhpZGRlbixcblx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHQpXG5cdH07XG5cdGxldCBhU2VsZWN0T3B0aW9uczogU2VsZWN0T3B0aW9uVHlwZVtdID0gW107XG5cdGNvbnN0IHNlbGVjdGlvblZhcmlhbnQgPSBnZXRTZWxlY3Rpb25WYXJpYW50KGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRpZiAoc2VsZWN0aW9uVmFyaWFudCkge1xuXHRcdGFTZWxlY3RPcHRpb25zID0gc2VsZWN0aW9uVmFyaWFudC5TZWxlY3RPcHRpb25zO1xuXHR9XG5cblx0Y29uc3QgcHJvcGVydHlJbmZvRmllbGRzOiBGaWx0ZXJGaWVsZFtdID1cblx0XHRhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHM/LnJlZHVjZSgoc2VsZWN0aW9uRmllbGRzOiBGaWx0ZXJGaWVsZFtdLCBzZWxlY3Rpb25GaWVsZCkgPT4ge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlQYXRoID0gc2VsZWN0aW9uRmllbGQudmFsdWU7XG5cdFx0XHRpZiAoIWV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllcy5oYXMocHJvcGVydHlQYXRoKSkge1xuXHRcdFx0XHRsZXQgbmF2aWdhdGlvblBhdGg6IHN0cmluZztcblx0XHRcdFx0aWYgKGFubm90YXRpb25QYXRoPy5zdGFydHNXaXRoKFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlNlbGVjdGlvbkZpZWxkc1wiKSkge1xuXHRcdFx0XHRcdG5hdmlnYXRpb25QYXRoID0gXCJcIjtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRuYXZpZ2F0aW9uUGF0aCA9IGFubm90YXRpb25QYXRoPy5zcGxpdChcIi9AY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuU2VsZWN0aW9uRmllbGRzXCIpWzBdO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgZmlsdGVyUHJvcGVydHlQYXRoID0gbmF2aWdhdGlvblBhdGggPyBuYXZpZ2F0aW9uUGF0aCArIFwiL1wiICsgcHJvcGVydHlQYXRoIDogcHJvcGVydHlQYXRoO1xuXHRcdFx0XHRjb25zdCBmaWx0ZXJGaWVsZDogRmlsdGVyRmllbGQgfCB1bmRlZmluZWQgPSBfZ2V0RmlsdGVyRmllbGQoXG5cdFx0XHRcdFx0ZmlsdGVyRmllbGRzLFxuXHRcdFx0XHRcdGZpbHRlclByb3BlcnR5UGF0aCxcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdGVudGl0eVR5cGVcblx0XHRcdFx0KTtcblx0XHRcdFx0aWYgKGZpbHRlckZpZWxkKSB7XG5cdFx0XHRcdFx0ZmlsdGVyRmllbGQuZ3JvdXAgPSBcIlwiO1xuXHRcdFx0XHRcdGZpbHRlckZpZWxkLmdyb3VwTGFiZWwgPSBcIlwiO1xuXHRcdFx0XHRcdHNlbGVjdGlvbkZpZWxkcy5wdXNoKGZpbHRlckZpZWxkKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHNlbGVjdGlvbkZpZWxkcztcblx0XHR9LCBbXSkgfHwgW107XG5cblx0Y29uc3QgZGVmYXVsdEZpbHRlckZpZWxkcyA9IF9nZXREZWZhdWx0RmlsdGVyRmllbGRzKFxuXHRcdGFTZWxlY3RPcHRpb25zLFxuXHRcdGVudGl0eVR5cGUsXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRleGNsdWRlZEZpbHRlclByb3BlcnRpZXMsXG5cdFx0YW5ub3RhdGVkU2VsZWN0aW9uRmllbGRzXG5cdCk7XG5cblx0cmV0dXJuIHtcblx0XHRleGNsdWRlZEZpbHRlclByb3BlcnRpZXM6IGV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllcyxcblx0XHRlbnRpdHlUeXBlOiBlbnRpdHlUeXBlLFxuXHRcdGFubm90YXRlZFNlbGVjdGlvbkZpZWxkczogYW5ub3RhdGVkU2VsZWN0aW9uRmllbGRzLFxuXHRcdGZpbHRlckZpZWxkczogZmlsdGVyRmllbGRzLFxuXHRcdHByb3BlcnR5SW5mb0ZpZWxkczogcHJvcGVydHlJbmZvRmllbGRzLFxuXHRcdGRlZmF1bHRGaWx0ZXJGaWVsZHM6IGRlZmF1bHRGaWx0ZXJGaWVsZHNcblx0fTtcbn07XG5cbmV4cG9ydCBjb25zdCBmZXRjaFR5cGVDb25maWcgPSBmdW5jdGlvbiAocHJvcGVydHk/OiBQcm9wZXJ0eSk6IFByb3BlcnR5VHlwZUNvbmZpZyB7XG5cdGNvbnN0IHR5cGVDb25maWcgPSBnZXRUeXBlQ29uZmlnKHByb3BlcnR5KSBhcyBQcm9wZXJ0eVR5cGVDb25maWc7XG5cdGlmIChwcm9wZXJ0eT8udHlwZSA9PT0gc0VkbVN0cmluZyAmJiB0eXBlQ29uZmlnLmNvbnN0cmFpbnRzPy5udWxsYWJsZSAhPT0gZmFsc2UpIHtcblx0XHR0eXBlQ29uZmlnLmZvcm1hdE9wdGlvbnMgPSB7XG5cdFx0XHQuLi50eXBlQ29uZmlnLmZvcm1hdE9wdGlvbnMsXG5cdFx0XHRwYXJzZUtlZXBzRW1wdHlTdHJpbmc6IGZhbHNlXG5cdFx0fTtcblx0fVxuXHRyZXR1cm4gdHlwZUNvbmZpZztcbn07XG5cbmV4cG9ydCBjb25zdCBhc3NpZ25EYXRhVHlwZVRvUHJvcGVydHlJbmZvID0gZnVuY3Rpb24gKFxuXHRwcm9wZXJ0eUluZm9GaWVsZDogRmlsdGVyRmllbGQgfCBQcm9wZXJ0eUluZm8sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0YVJlcXVpcmVkUHJvcHM6IHVua25vd25bXSxcblx0YVR5cGVDb25maWc6IFJlY29yZDxzdHJpbmcsIFBhcnRpYWw8UHJvcGVydHlUeXBlQ29uZmlnPj5cbik6IFByb3BlcnR5SW5mbyB7XG5cdGxldCBvUHJvcGVydHlJbmZvID0gZmV0Y2hQcm9wZXJ0eUluZm8oY29udmVydGVyQ29udGV4dCwgcHJvcGVydHlJbmZvRmllbGQsIGFUeXBlQ29uZmlnW3Byb3BlcnR5SW5mb0ZpZWxkLmtleSFdKSxcblx0XHRzUHJvcGVydHlQYXRoID0gXCJcIjtcblx0aWYgKHByb3BlcnR5SW5mb0ZpZWxkLmNvbmRpdGlvblBhdGgpIHtcblx0XHRzUHJvcGVydHlQYXRoID0gcHJvcGVydHlJbmZvRmllbGQuY29uZGl0aW9uUGF0aC5yZXBsYWNlKC9cXCt8XFwqL2csIFwiXCIpO1xuXHR9XG5cdGlmIChvUHJvcGVydHlJbmZvKSB7XG5cdFx0b1Byb3BlcnR5SW5mbyA9IE9iamVjdC5hc3NpZ24ob1Byb3BlcnR5SW5mbywge1xuXHRcdFx0bWF4Q29uZGl0aW9uczogb1Byb3BlcnR5SW5mby5pc1BhcmFtZXRlclxuXHRcdFx0XHQ/IDFcblx0XHRcdFx0OiBnZXRNYXhDb25kaXRpb25zKGVuaGFuY2VEYXRhTW9kZWxQYXRoPFByb3BlcnR5Pihjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSwgc1Byb3BlcnR5UGF0aCkpLFxuXHRcdFx0cmVxdWlyZWQ6IHByb3BlcnR5SW5mb0ZpZWxkLnJlcXVpcmVkID8/IChvUHJvcGVydHlJbmZvLmlzUGFyYW1ldGVyIHx8IGFSZXF1aXJlZFByb3BzLmluY2x1ZGVzKHNQcm9wZXJ0eVBhdGgpKSxcblx0XHRcdGNhc2VTZW5zaXRpdmU6IGlzRmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZShjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdGRhdGFUeXBlOiBhVHlwZUNvbmZpZ1twcm9wZXJ0eUluZm9GaWVsZC5rZXkhXS50eXBlXG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIG9Qcm9wZXJ0eUluZm87XG59O1xuXG5leHBvcnQgY29uc3QgcHJvY2Vzc1NlbGVjdGlvbkZpZWxkcyA9IGZ1bmN0aW9uIChcblx0cHJvcGVydHlJbmZvRmllbGRzOiBGaWx0ZXJGaWVsZFtdLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGRlZmF1bHRWYWx1ZVByb3BlcnR5RmllbGRzPzogRmlsdGVyRmllbGRbXVxuKTogUHJvcGVydHlJbmZvW10ge1xuXHQvL2dldCBUeXBlQ29uZmlnIGZ1bmN0aW9uXG5cdGNvbnN0IGFUeXBlQ29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBQYXJ0aWFsPFByb3BlcnR5VHlwZUNvbmZpZz4+ID0ge307XG5cblx0aWYgKGRlZmF1bHRWYWx1ZVByb3BlcnR5RmllbGRzKSB7XG5cdFx0cHJvcGVydHlJbmZvRmllbGRzID0gcHJvcGVydHlJbmZvRmllbGRzLmNvbmNhdChkZWZhdWx0VmFsdWVQcm9wZXJ0eUZpZWxkcyk7XG5cdH1cblx0Ly9hZGQgdHlwZUNvbmZpZ1xuXHRwcm9wZXJ0eUluZm9GaWVsZHMuZm9yRWFjaChmdW5jdGlvbiAocGFyYW1ldGVyRmllbGQpIHtcblx0XHRpZiAocGFyYW1ldGVyRmllbGQuYW5ub3RhdGlvblBhdGgpIHtcblx0XHRcdGNvbnN0IHByb3BlcnR5Q29udmVydHlDb250ZXh0ID0gY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yPFByb3BlcnR5PihwYXJhbWV0ZXJGaWVsZC5hbm5vdGF0aW9uUGF0aCk7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVRhcmdldE9iamVjdCA9IHByb3BlcnR5Q29udmVydHlDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKS50YXJnZXRPYmplY3Q7XG5cdFx0XHRjb25zdCBvVHlwZUNvbmZpZyA9IGZldGNoVHlwZUNvbmZpZyhwcm9wZXJ0eVRhcmdldE9iamVjdCk7XG5cdFx0XHRhVHlwZUNvbmZpZ1twYXJhbWV0ZXJGaWVsZC5rZXldID0gb1R5cGVDb25maWc7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGFUeXBlQ29uZmlnW3BhcmFtZXRlckZpZWxkLmtleV0gPSB7IHR5cGU6IHNTdHJpbmdEYXRhVHlwZSB9O1xuXHRcdH1cblx0fSk7XG5cblx0Y29uc3Qgb1JldDoge1xuXHRcdFJlcXVpcmVkUHJvcGVydGllcz86IHN0cmluZ1tdO1xuXHRcdE5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzPzogc3RyaW5nW107XG5cdH0gPSB7fTtcblxuXHRjb25zdCBzRW50aXR5U2V0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udGV4dFBhdGgoKTtcblx0bGV0IGFsbEZpbHRlclJlc3RyaWN0aW9ucztcblx0aWYgKHNFbnRpdHlTZXRQYXRoKSB7XG5cdFx0YWxsRmlsdGVyUmVzdHJpY3Rpb25zID0gZmV0Y2hGaWx0ZXJSZXN0cmljdGlvbnMuZ2V0RmlsdGVyUmVzdHJpY3Rpb25zQnlEYXRhTW9kZWwoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkpO1xuXHR9XG5cdG9SZXQuUmVxdWlyZWRQcm9wZXJ0aWVzID0gYWxsRmlsdGVyUmVzdHJpY3Rpb25zID8gYWxsRmlsdGVyUmVzdHJpY3Rpb25zLlJlcXVpcmVkUHJvcGVydGllcyA6IFtdO1xuXHRvUmV0Lk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzID0gYWxsRmlsdGVyUmVzdHJpY3Rpb25zID8gYWxsRmlsdGVyUmVzdHJpY3Rpb25zLk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzIDogW107XG5cdGNvbnN0IGFSZXF1aXJlZFByb3BzID0gb1JldC5SZXF1aXJlZFByb3BlcnRpZXM7XG5cdGNvbnN0IGFOb25GaWx0ZXJhYmxlUHJvcHMgPSBvUmV0Lk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzO1xuXHRjb25zdCBhRmV0Y2hlZFByb3BlcnRpZXM6IFByb3BlcnR5SW5mb1tdID0gW107XG5cblx0Ly8gcHJvY2VzcyB0aGUgZmllbGRzIHRvIGFkZCBuZWNlc3NhcnkgcHJvcGVydGllc1xuXHRwcm9wZXJ0eUluZm9GaWVsZHMuZm9yRWFjaChmdW5jdGlvbiAocHJvcGVydHlJbmZvRmllbGQpIHtcblx0XHRjb25zdCBzUHJvcGVydHlQYXRoID0gcHJvcGVydHlJbmZvRmllbGQuY29uZGl0aW9uUGF0aC5yZXBsYWNlKC9bKypdL2csIFwiXCIpO1xuXHRcdGlmICghYU5vbkZpbHRlcmFibGVQcm9wcy5pbmNsdWRlcyhzUHJvcGVydHlQYXRoKSkge1xuXHRcdFx0Y29uc3Qgb1Byb3BlcnR5SW5mbyA9IGFzc2lnbkRhdGFUeXBlVG9Qcm9wZXJ0eUluZm8ocHJvcGVydHlJbmZvRmllbGQsIGNvbnZlcnRlckNvbnRleHQsIGFSZXF1aXJlZFByb3BzLCBhVHlwZUNvbmZpZyk7XG5cdFx0XHRhRmV0Y2hlZFByb3BlcnRpZXMucHVzaChvUHJvcGVydHlJbmZvKTtcblx0XHR9XG5cdH0pO1xuXG5cdC8vYWRkIGVkaXRcblx0Y29uc3QgZGF0YU1vZGVsT2JqZWN0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpO1xuXHRjb25zdCBpc0hpZGRlbkRyYWZ0RW5hYmxlZCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuZ2V0U2FwRmVNYW5pZmVzdENvbmZpZ3VyYXRpb24oKT8uYXBwPy5oaWRlRHJhZnQ/LmVuYWJsZWQ7XG5cdGlmIChNb2RlbEhlbHBlci5pc09iamVjdFBhdGhEcmFmdFN1cHBvcnRlZChkYXRhTW9kZWxPYmplY3RQYXRoKSkge1xuXHRcdGNvbnN0IGVkaXRTdGF0ZUZpbHRlciA9IGdldEVkaXRTdGF0ZUZpbHRlclByb3BlcnR5SW5mbygpOyAvLyBGaWx0ZXIgc2hvdWxkIGFsd2F5cyBiZSBhZGRlZCBpbiB0aGUgcHJvcGVydHlJbmZvIG90aGVyd2lzZSBkdXBsaWNhdGUgcmVjb3JkcyBhcmUgc2hvd24gaW4gUkFQXG5cdFx0ZWRpdFN0YXRlRmlsdGVyLmhpZGRlbkZpbHRlciA9IGlzSGlkZGVuRHJhZnRFbmFibGVkIHx8ICFzaG93RHJhZnRFZGl0U3RhdHVzKGNvbnZlcnRlckNvbnRleHQpOyAvL0lmIGZpbHRlciByZXN0cmljdGlvbnMgYXJlIGFkZGVkIGl0IGlzIHNldCB0byB0cnVlXG5cdFx0YUZldGNoZWRQcm9wZXJ0aWVzLnB1c2goZWRpdFN0YXRlRmlsdGVyKTtcblx0fVxuXHQvLyBhZGQgc2VhcmNoXG5cdGNvbnN0IHNlYXJjaFJlc3RyaWN0aW9ucyA9IGdldFNlYXJjaFJlc3RyaWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgaGlkZUJhc2ljU2VhcmNoID0gQm9vbGVhbihzZWFyY2hSZXN0cmljdGlvbnMgJiYgIXNlYXJjaFJlc3RyaWN0aW9ucy5TZWFyY2hhYmxlKTtcblx0aWYgKHNFbnRpdHlTZXRQYXRoICYmIGhpZGVCYXNpY1NlYXJjaCAhPT0gdHJ1ZSkge1xuXHRcdGlmICghc2VhcmNoUmVzdHJpY3Rpb25zIHx8IHNlYXJjaFJlc3RyaWN0aW9ucz8uU2VhcmNoYWJsZSkge1xuXHRcdFx0YUZldGNoZWRQcm9wZXJ0aWVzLnB1c2goZ2V0U2VhcmNoRmlsdGVyUHJvcGVydHlJbmZvKCkpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBhRmV0Y2hlZFByb3BlcnRpZXM7XG59O1xuXG5leHBvcnQgY29uc3Qgc2hvd0RyYWZ0RWRpdFN0YXR1cyA9IGZ1bmN0aW9uIChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiBib29sZWFuIHtcblx0Y29uc3QgbmF2aWdhdGlvblJlc3RyaWN0aW9ucyA9IGdldE5hdmlnYXRpb25SZXN0cmljdGlvbnMoY29udmVydGVyQ29udGV4dCwgXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YVwiKTtcblx0cmV0dXJuIG5hdmlnYXRpb25SZXN0cmljdGlvbnM/LkZpbHRlclJlc3RyaWN0aW9ucz8uRmlsdGVyYWJsZSA9PT0gZmFsc2UgPyBmYWxzZSA6IHRydWU7XG59O1xuXG5leHBvcnQgY29uc3QgaW5zZXJ0Q3VzdG9tTWFuaWZlc3RFbGVtZW50cyA9IGZ1bmN0aW9uIChcblx0ZmlsdGVyRmllbGRzOiBNYW5pZmVzdEZpbHRlckZpZWxkW10sXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0YW5ub3RhdGlvblBhdGg6IHN0cmluZ1xuKTogTWFuaWZlc3RGaWx0ZXJGaWVsZFtdIHtcblx0Y29uc3QgbWFuaWZlc3RGaWx0ZXJGaWVsZHMgPSBnZXRNYW5pZmVzdEZpbHRlckZpZWxkcyhlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0LCBhbm5vdGF0aW9uUGF0aCk7XG5cdF9nZXRNaXNzaW5nTGFiZWxGb3JNYW5pZmVzdEZpbHRlckZpZWxkcyhmaWx0ZXJGaWVsZHMsIG1hbmlmZXN0RmlsdGVyRmllbGRzKTtcblx0cmV0dXJuIGluc2VydEN1c3RvbUVsZW1lbnRzKGZpbHRlckZpZWxkcywgbWFuaWZlc3RGaWx0ZXJGaWVsZHMsIHtcblx0XHRhdmFpbGFiaWxpdHk6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0bGFiZWw6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0dHlwZTogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRwb3NpdGlvbjogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRzbG90TmFtZTogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRkb2N1bWVudFJlZlRleHQ6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0dGVtcGxhdGU6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0c2V0dGluZ3M6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0dmlzdWFsRmlsdGVyOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdHJlcXVpcmVkOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlXG5cdH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHNvcnRQcm9wZXJ0eUluZm9zQnlHcm91cExhYmVsID0gKHByb3BlcnR5SW5mb3M6IFByb3BlcnR5SW5mb1tdKTogdm9pZCA9PiB7XG5cdHByb3BlcnR5SW5mb3Muc29ydChmdW5jdGlvbiAoYTogRmlsdGVyR3JvdXAsIGI6IEZpbHRlckdyb3VwKSB7XG5cdFx0Y29uc3QgYUdyb3VwTGFiZWxJc1NldCA9IGEuZ3JvdXBMYWJlbCAhPT0gdW5kZWZpbmVkICYmIGEuZ3JvdXBMYWJlbCAhPT0gbnVsbDtcblx0XHRjb25zdCBiR3JvdXBMYWJlbElzU2V0ID0gYi5ncm91cExhYmVsICE9PSB1bmRlZmluZWQgJiYgYi5ncm91cExhYmVsICE9PSBudWxsO1xuXHRcdGlmICghYUdyb3VwTGFiZWxJc1NldCAmJiAhYkdyb3VwTGFiZWxJc1NldCkge1xuXHRcdFx0cmV0dXJuIDA7XG5cdFx0fVxuXHRcdGlmIChhR3JvdXBMYWJlbElzU2V0ICYmICFiR3JvdXBMYWJlbElzU2V0KSB7XG5cdFx0XHRyZXR1cm4gLTE7XG5cdFx0fVxuXHRcdGlmICghYUdyb3VwTGFiZWxJc1NldCAmJiBiR3JvdXBMYWJlbElzU2V0KSB7XG5cdFx0XHRyZXR1cm4gMTtcblx0XHR9XG5cdFx0cmV0dXJuIGEuZ3JvdXBMYWJlbCEubG9jYWxlQ29tcGFyZShiLmdyb3VwTGFiZWwhKTtcblx0fSk7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlIHRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgc2VsZWN0aW9uIGZpZWxkcyB0aGF0IHdpbGwgYmUgdXNlZCB3aXRoaW4gdGhlIGZpbHRlciBiYXJcbiAqIFRoaXMgY29uZmlndXJhdGlvbiB0YWtlcyBpbnRvIGFjY291bnQgdGhlIGFubm90YXRpb24gYW5kIHRoZSBzZWxlY3Rpb24gdmFyaWFudHMuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIGxyVGFibGVzXG4gKiBAcGFyYW0gYW5ub3RhdGlvblBhdGhcbiAqIEBwYXJhbSBbaW5jbHVkZUhpZGRlbl1cbiAqIEBwYXJhbSBbbGluZUl0ZW1UZXJtXVxuICogQHJldHVybnMgQW4gYXJyYXkgb2Ygc2VsZWN0aW9uIGZpZWxkc1xuICovXG5leHBvcnQgY29uc3QgZ2V0U2VsZWN0aW9uRmllbGRzID0gZnVuY3Rpb24gKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGxyVGFibGVzOiBUYWJsZVZpc3VhbGl6YXRpb25bXSA9IFtdLFxuXHRhbm5vdGF0aW9uUGF0aCA9IFwiXCIsXG5cdGluY2x1ZGVIaWRkZW4/OiBib29sZWFuLFxuXHRsaW5lSXRlbVRlcm0/OiBzdHJpbmdcbik6IHsgc2VsZWN0aW9uRmllbGRzOiBGaWx0ZXJGaWVsZFtdOyBzUHJvcGVydHlJbmZvOiBzdHJpbmcgfSB7XG5cdGNvbnN0IG9Bbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEgPSBnZXRBbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEoXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRsclRhYmxlcyxcblx0XHRhbm5vdGF0aW9uUGF0aCxcblx0XHRpbmNsdWRlSGlkZGVuLFxuXHRcdGxpbmVJdGVtVGVybVxuXHQpO1xuXHRjb25zdCBwYXJhbWV0ZXJGaWVsZHMgPSBfZ2V0UGFyYW1ldGVyRmllbGRzKGNvbnZlcnRlckNvbnRleHQpO1xuXHRsZXQgcHJvcGVydHlJbmZvRmllbGRzOiBGaWx0ZXJGaWVsZFtdID0gb0Fubm90YXRlZFNlbGVjdGlvbkZpZWxkRGF0YS5wcm9wZXJ0eUluZm9GaWVsZHM7XG5cdGNvbnN0IGVudGl0eVR5cGUgPSBvQW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhLmVudGl0eVR5cGU7XG5cblx0cHJvcGVydHlJbmZvRmllbGRzID0gcGFyYW1ldGVyRmllbGRzLmNvbmNhdChwcm9wZXJ0eUluZm9GaWVsZHMpO1xuXG5cdHByb3BlcnR5SW5mb0ZpZWxkcyA9IGluc2VydEN1c3RvbU1hbmlmZXN0RWxlbWVudHMocHJvcGVydHlJbmZvRmllbGRzLCBlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0LCBhbm5vdGF0aW9uUGF0aCk7XG5cblx0Y29uc3QgYUZldGNoZWRQcm9wZXJ0aWVzID0gcHJvY2Vzc1NlbGVjdGlvbkZpZWxkcyhcblx0XHRwcm9wZXJ0eUluZm9GaWVsZHMsXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRvQW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhLmRlZmF1bHRGaWx0ZXJGaWVsZHNcblx0KTtcblx0c29ydFByb3BlcnR5SW5mb3NCeUdyb3VwTGFiZWwoYUZldGNoZWRQcm9wZXJ0aWVzKTtcblxuXHRsZXQgc0ZldGNoUHJvcGVydGllcyA9IEpTT04uc3RyaW5naWZ5KGFGZXRjaGVkUHJvcGVydGllcyk7XG5cdHNGZXRjaFByb3BlcnRpZXMgPSBzRmV0Y2hQcm9wZXJ0aWVzLnJlcGxhY2UoL1xcey9nLCBcIlxcXFx7XCIpO1xuXHRzRmV0Y2hQcm9wZXJ0aWVzID0gc0ZldGNoUHJvcGVydGllcy5yZXBsYWNlKC9cXH0vZywgXCJcXFxcfVwiKTtcblx0Y29uc3Qgc1Byb3BlcnR5SW5mbyA9IHNGZXRjaFByb3BlcnRpZXM7XG5cdC8vIGVuZCBvZiBwcm9wZXJ0eUZpZWxkcyBwcm9jZXNzaW5nXG5cblx0Ly8gdG8gcG9wdWxhdGUgc2VsZWN0aW9uIGZpZWxkc1xuXHRsZXQgcHJvcFNlbGVjdGlvbkZpZWxkczogRmlsdGVyRmllbGRbXSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob0Fubm90YXRlZFNlbGVjdGlvbkZpZWxkRGF0YS5wcm9wZXJ0eUluZm9GaWVsZHMpKTtcblx0cHJvcFNlbGVjdGlvbkZpZWxkcyA9IHBhcmFtZXRlckZpZWxkcy5jb25jYXQocHJvcFNlbGVjdGlvbkZpZWxkcyk7XG5cdC8vIGNyZWF0ZSBhIG1hcCBvZiBwcm9wZXJ0aWVzIHRvIGJlIHVzZWQgaW4gc2VsZWN0aW9uIHZhcmlhbnRzXG5cdGNvbnN0IGV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllcyA9IG9Bbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEuZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzO1xuXHRjb25zdCBmaWx0ZXJGYWNldHMgPSBlbnRpdHlUeXBlPy5hbm5vdGF0aW9ucz8uVUk/LkZpbHRlckZhY2V0cztcblx0bGV0IGZpbHRlckZhY2V0TWFwOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJHcm91cD4gPSB7fTtcblxuXHRjb25zdCBhRmllbGRHcm91cHMgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25zQnlUZXJtKFwiVUlcIiwgVUlBbm5vdGF0aW9uVGVybXMuRmllbGRHcm91cCkgYXMgRmllbGRHcm91cFtdO1xuXG5cdGlmIChmaWx0ZXJGYWNldHMgPT09IHVuZGVmaW5lZCB8fCBmaWx0ZXJGYWNldHMubGVuZ3RoIDwgMCkge1xuXHRcdGZvciAoY29uc3QgaSBpbiBhRmllbGRHcm91cHMpIHtcblx0XHRcdGZpbHRlckZhY2V0TWFwID0ge1xuXHRcdFx0XHQuLi5maWx0ZXJGYWNldE1hcCxcblx0XHRcdFx0Li4uZ2V0RmllbGRHcm91cEZpbHRlckdyb3VwcyhhRmllbGRHcm91cHNbaV0pXG5cdFx0XHR9O1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRmaWx0ZXJGYWNldE1hcCA9IGZpbHRlckZhY2V0cy5yZWR1Y2UoKHByZXZpb3VzVmFsdWU6IFJlY29yZDxzdHJpbmcsIEZpbHRlckdyb3VwPiwgZmlsdGVyRmFjZXQ6IFJlZmVyZW5jZUZhY2V0VHlwZXMpID0+IHtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgKGZpbHRlckZhY2V0Py5UYXJnZXQ/LiR0YXJnZXQgYXMgRmllbGRHcm91cCk/LkRhdGE/Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdHByZXZpb3VzVmFsdWVbKChmaWx0ZXJGYWNldD8uVGFyZ2V0Py4kdGFyZ2V0IGFzIEZpZWxkR3JvdXApPy5EYXRhW2ldIGFzIERhdGFGaWVsZFR5cGVzKT8uVmFsdWU/LnBhdGhdID0ge1xuXHRcdFx0XHRcdGdyb3VwOiBmaWx0ZXJGYWNldD8uSUQ/LnRvU3RyaW5nKCksXG5cdFx0XHRcdFx0Z3JvdXBMYWJlbDogZmlsdGVyRmFjZXQ/LkxhYmVsPy50b1N0cmluZygpXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcHJldmlvdXNWYWx1ZTtcblx0XHR9LCB7fSk7XG5cdH1cblxuXHQvLyBjcmVhdGUgYSBtYXAgb2YgYWxsIHBvdGVudGlhbCBmaWx0ZXIgZmllbGRzIGJhc2VkIG9uLi4uXG5cdGNvbnN0IGZpbHRlckZpZWxkczogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGQ+ID0gb0Fubm90YXRlZFNlbGVjdGlvbkZpZWxkRGF0YS5maWx0ZXJGaWVsZHM7XG5cblx0Ly8gZmluYWxseSBjcmVhdGUgZmluYWwgbGlzdCBvZiBmaWx0ZXIgZmllbGRzIGJ5IGFkZGluZyB0aGUgU2VsZWN0aW9uRmllbGRzIGZpcnN0IChvcmRlciBtYXR0ZXJzKS4uLlxuXHRjb25zdCBhbGxGaWx0ZXJzID0gcHJvcFNlbGVjdGlvbkZpZWxkc1xuXG5cdFx0Ly8gLi4uYW5kIGFkZGluZyByZW1haW5pbmcgZmlsdGVyIGZpZWxkcywgdGhhdCBhcmUgbm90IHVzZWQgaW4gYSBTZWxlY3Rpb25WYXJpYW50IChvcmRlciBkb2Vzbid0IG1hdHRlcilcblx0XHQuY29uY2F0KFxuXHRcdFx0T2JqZWN0LmtleXMoZmlsdGVyRmllbGRzKVxuXHRcdFx0XHQuZmlsdGVyKChwcm9wZXJ0eVBhdGgpID0+ICFleGNsdWRlZEZpbHRlclByb3BlcnRpZXMuaGFzKHByb3BlcnR5UGF0aCkpXG5cdFx0XHRcdC5tYXAoKHByb3BlcnR5UGF0aCkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiBPYmplY3QuYXNzaWduKGZpbHRlckZpZWxkc1twcm9wZXJ0eVBhdGhdLCBmaWx0ZXJGYWNldE1hcFtwcm9wZXJ0eVBhdGhdKTtcblx0XHRcdFx0fSlcblx0XHQpO1xuXG5cdGNvbnN0IHNlbGVjdGlvbkZpZWxkcyA9IGluc2VydEN1c3RvbU1hbmlmZXN0RWxlbWVudHMoYWxsRmlsdGVycywgZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCwgYW5ub3RhdGlvblBhdGgpO1xuXG5cdC8vIEFkZCBjYXNlU2Vuc2l0aXZlIHByb3BlcnR5IHRvIGFsbCBzZWxlY3Rpb24gZmllbGRzLlxuXHRjb25zdCBpc0Nhc2VTZW5zaXRpdmUgPSBpc0ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUoY29udmVydGVyQ29udGV4dCk7XG5cdHNlbGVjdGlvbkZpZWxkcy5mb3JFYWNoKChmaWx0ZXJGaWVsZCkgPT4ge1xuXHRcdGZpbHRlckZpZWxkLmNhc2VTZW5zaXRpdmUgPSBpc0Nhc2VTZW5zaXRpdmU7XG5cdH0pO1xuXG5cdHJldHVybiB7IHNlbGVjdGlvbkZpZWxkcywgc1Byb3BlcnR5SW5mbyB9O1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGZpbHRlciBiYXIgaW5zaWRlIGEgdmFsdWUgaGVscCBkaWFsb2cgc2hvdWxkIGJlIGV4cGFuZGVkLiBUaGlzIGlzIHRydWUgaWYgb25lIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBob2xkOlxuICogKDEpIGEgZmlsdGVyIHByb3BlcnR5IGlzIG1hbmRhdG9yeSxcbiAqICgyKSBubyBzZWFyY2ggZmllbGQgZXhpc3RzIChlbnRpdHkgaXNuJ3Qgc2VhcmNoIGVuYWJsZWQpLFxuICogKDMpIHdoZW4gdGhlIGRhdGEgaXNuJ3QgbG9hZGVkIGJ5IGRlZmF1bHQgKGFubm90YXRpb24gRmV0Y2hWYWx1ZXMgPSAyKS5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIGZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24gVGhlIEZpbHRlclJlc3RyaWN0aW9uIGFubm90YXRpb25cbiAqIEBwYXJhbSB2YWx1ZUxpc3QgVGhlIFZhbHVlTGlzdCBhbm5vdGF0aW9uXG4gKiBAcmV0dXJucyBUaGUgdmFsdWUgZm9yIGV4cGFuZEZpbHRlckZpZWxkc1xuICovXG5leHBvcnQgY29uc3QgZ2V0RXhwYW5kRmlsdGVyRmllbGRzID0gZnVuY3Rpb24gKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb246IEZpbHRlclJlc3RyaWN0aW9ucyB8IHVuZGVmaW5lZCxcblx0dmFsdWVMaXN0OiBNZXRhTW9kZWxUeXBlPFZhbHVlTGlzdD5cbik6IGJvb2xlYW4ge1xuXHRjb25zdCByZXF1aXJlZFByb3BlcnRpZXMgPSBnZXRGaWx0ZXJSZXN0cmljdGlvbnMoZmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbiwgXCJSZXF1aXJlZFByb3BlcnRpZXNcIik7XG5cdGNvbnN0IHNlYXJjaFJlc3RyaWN0aW9ucyA9IGdldFNlYXJjaFJlc3RyaWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgaGlkZUJhc2ljU2VhcmNoID0gQm9vbGVhbihzZWFyY2hSZXN0cmljdGlvbnMgJiYgIXNlYXJjaFJlc3RyaWN0aW9ucy5TZWFyY2hhYmxlKTtcblx0aWYgKHJlcXVpcmVkUHJvcGVydGllcy5sZW5ndGggPiAwIHx8IGhpZGVCYXNpY1NlYXJjaCB8fCB2YWx1ZUxpc3Q/LkZldGNoVmFsdWVzID09PSAy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