survey-creator-react 1.9.18 → 1.9.21

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.
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * SurveyJS Creator React v1.9.18
2
+ * SurveyJS Creator React v1.9.21
3
3
  * (c) 2015-2022 Devsoft Baltic OÜ - http://surveyjs.io/
4
4
  * Github: https://github.com/surveyjs/survey-creator
5
5
  * License: https://surveyjs.io/Licenses#SurveyCreator
@@ -469,9 +469,11 @@ var SurveyNavigation = /** @class */ (function (_super) {
469
469
  return _this;
470
470
  }
471
471
  SurveyNavigation.prototype.componentDidMount = function () {
472
+ _super.prototype.componentDidMount.call(this);
472
473
  this.setHandler();
473
474
  };
474
475
  SurveyNavigation.prototype.componentDidUpdate = function (prevProps, prevState) {
476
+ _super.prototype.componentDidUpdate.call(this, prevProps, prevState);
475
477
  this.setHandler();
476
478
  };
477
479
  SurveyNavigation.prototype.setHandler = function () {
@@ -481,6 +483,7 @@ var SurveyNavigation = /** @class */ (function (_super) {
481
483
  this.survey.onPropertyChanged.add(this.onPropChangedHandler);
482
484
  };
483
485
  SurveyNavigation.prototype.componentWillUnmount = function () {
486
+ _super.prototype.componentWillUnmount.call(this);
484
487
  if (this.survey) {
485
488
  this.survey.onPropertyChanged.remove(this.onPropChangedHandler);
486
489
  }
@@ -1258,6 +1261,7 @@ var SurveyLocStringEditor = /** @class */ (function (_super) {
1258
1261
  configurable: true
1259
1262
  });
1260
1263
  SurveyLocStringEditor.prototype.componentDidMount = function () {
1264
+ _super.prototype.componentDidMount.call(this);
1261
1265
  if (!this.locString)
1262
1266
  return;
1263
1267
  var self = this;
@@ -1270,6 +1274,7 @@ var SurveyLocStringEditor = /** @class */ (function (_super) {
1270
1274
  }
1271
1275
  };
1272
1276
  SurveyLocStringEditor.prototype.componentWillUnmount = function () {
1277
+ _super.prototype.componentWillUnmount.call(this);
1273
1278
  if (!this.locString)
1274
1279
  return;
1275
1280
  this.locString.onChanged = function () { };
@@ -1921,7 +1926,7 @@ var PanelAdornerComponent = /** @class */ (function (_super) {
1921
1926
  }
1922
1927
  return (react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: "svc-panel__placeholder_frame" },
1923
1928
  react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: "svc-panel__placeholder" }, this.model.placeholderText),
1924
- this.model.allowEdit ? Object(survey_react_ui__WEBPACK_IMPORTED_MODULE_2__["attachKey2click"])(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: "svc-panel__add-new-question", onClick: function (e) {
1929
+ this.model.allowEdit ? Object(survey_react_ui__WEBPACK_IMPORTED_MODULE_2__["attachKey2click"])(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: "svc-panel__add-new-question svc-action-button", onClick: function (e) {
1925
1930
  e.stopPropagation();
1926
1931
  _this.model.addNewQuestion();
1927
1932
  } },
@@ -1930,11 +1935,12 @@ var PanelAdornerComponent = /** @class */ (function (_super) {
1930
1935
  PanelAdornerComponent.prototype.renderFooter = function () {
1931
1936
  var _this = this;
1932
1937
  return (react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_1___default.a.Fragment, null,
1933
- !this.model.isEmptyElement && this.model.surveyElement.isPanel && this.model.allowEdit ? Object(survey_react_ui__WEBPACK_IMPORTED_MODULE_2__["attachKey2click"])(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: "svc-panel__add-new-question", onClick: function (e) {
1934
- e.stopPropagation();
1935
- _this.model.addNewQuestion();
1936
- } },
1937
- react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("span", { className: "svc-text svc-text--normal svc-text--bold" }, this.model.addNewQuestionText),
1938
+ !this.model.isEmptyElement && this.model.surveyElement.isPanel && this.model.allowEdit ? Object(survey_react_ui__WEBPACK_IMPORTED_MODULE_2__["attachKey2click"])(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: "svc-panel__add-new-question-container" },
1939
+ react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: "svc-panel__add-new-question svc-action-button", onClick: function (e) {
1940
+ e.stopPropagation();
1941
+ _this.model.addNewQuestion();
1942
+ } },
1943
+ react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("span", { className: "svc-text svc-text--normal svc-text--bold" }, this.model.addNewQuestionText)),
1938
1944
  Object(survey_react_ui__WEBPACK_IMPORTED_MODULE_2__["attachKey2click"])(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("button", { type: "button", onClick: function (e) {
1939
1945
  e.stopPropagation();
1940
1946
  _this.model.questionTypeSelectorModel.action();
@@ -2010,7 +2016,9 @@ var QuestionAdornerComponent = /** @class */ (function (_super) {
2010
2016
  var _this = this;
2011
2017
  var content = this.renderElementContent();
2012
2018
  if (!allowInteractions)
2013
- return content;
2019
+ return react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_2___default.a.Fragment, null,
2020
+ content,
2021
+ this.renderFooter());
2014
2022
  return Object(survey_react_ui__WEBPACK_IMPORTED_MODULE_4__["attachKey2click"])(react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: "svc-question__content " + this.model.css(), onClick: function (e) { return _this.model.select(_this.model, new _events__WEBPACK_IMPORTED_MODULE_3__["ReactMouseEvent"](e)); } },
2015
2023
  this.renderHeader(),
2016
2024
  content,
@@ -2256,18 +2264,18 @@ __webpack_require__.r(__webpack_exports__);
2256
2264
  /* harmony import */ var survey_creator_core__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(survey_creator_core__WEBPACK_IMPORTED_MODULE_1__);
2257
2265
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "react");
2258
2266
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);
2259
- /* harmony import */ var _Question__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Question */ "./src/adorners/Question.tsx");
2260
- /* harmony import */ var survey_react_ui__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! survey-react-ui */ "survey-react-ui");
2261
- /* harmony import */ var survey_react_ui__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(survey_react_ui__WEBPACK_IMPORTED_MODULE_4__);
2262
-
2267
+ /* harmony import */ var survey_react_ui__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! survey-react-ui */ "survey-react-ui");
2268
+ /* harmony import */ var survey_react_ui__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(survey_react_ui__WEBPACK_IMPORTED_MODULE_3__);
2263
2269
 
2264
2270
 
2265
2271
 
2266
2272
 
2267
2273
  var QuestionRatingAdornerComponent = /** @class */ (function (_super) {
2268
2274
  Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"])(QuestionRatingAdornerComponent, _super);
2269
- function QuestionRatingAdornerComponent() {
2270
- return _super !== null && _super.apply(this, arguments) || this;
2275
+ function QuestionRatingAdornerComponent(props) {
2276
+ var _this = _super.call(this, props) || this;
2277
+ _this.modelValue = _this.createQuestionViewModel();
2278
+ return _this;
2271
2279
  }
2272
2280
  QuestionRatingAdornerComponent.prototype.createQuestionViewModel = function () {
2273
2281
  return new survey_creator_core__WEBPACK_IMPORTED_MODULE_1__["QuestionRatingAdornerViewModel"](this.props.componentData, this.props.question, null);
@@ -2279,20 +2287,34 @@ var QuestionRatingAdornerComponent = /** @class */ (function (_super) {
2279
2287
  enumerable: false,
2280
2288
  configurable: true
2281
2289
  });
2282
- QuestionRatingAdornerComponent.prototype.renderFooter = function () {
2290
+ Object.defineProperty(QuestionRatingAdornerComponent.prototype, "model", {
2291
+ get: function () {
2292
+ return this.modelValue;
2293
+ },
2294
+ enumerable: false,
2295
+ configurable: true
2296
+ });
2297
+ QuestionRatingAdornerComponent.prototype.getStateElement = function () {
2298
+ return this.model;
2299
+ };
2300
+ QuestionRatingAdornerComponent.prototype.renderElement = function () {
2283
2301
  var model = this.ratingModel;
2284
2302
  return (react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_2___default.a.Fragment, null,
2285
- react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: "svc-rating-question-controls svc-item-value-controls" },
2286
- model.allowRemove ? Object(survey_react_ui__WEBPACK_IMPORTED_MODULE_4__["attachKey2click"])(react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("span", { className: "svc-item-value-controls__button svc-item-value-controls__remove", "aria-label": model.removeTooltip, onClick: function () { return model.removeItem(model); } },
2287
- react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(survey_react_ui__WEBPACK_IMPORTED_MODULE_4__["SvgIcon"], { size: 16, iconName: "icon-remove_16x16" }))) : null,
2288
- model.allowAdd ? Object(survey_react_ui__WEBPACK_IMPORTED_MODULE_4__["attachKey2click"])(react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("span", { className: "svc-item-value-controls__button svc-item-value-controls__add", "aria-label": model.addTooltip, onClick: function () { return model.addItem(model); } },
2289
- react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(survey_react_ui__WEBPACK_IMPORTED_MODULE_4__["SvgIcon"], { size: 16, iconName: "icon-add_16x16" }))) : null),
2290
- _super.prototype.renderFooter.call(this)));
2303
+ react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: "svc-rating-question-content" },
2304
+ react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: "svc-rating-question-controls svc-item-value-controls" },
2305
+ model.allowRemove ? Object(survey_react_ui__WEBPACK_IMPORTED_MODULE_3__["attachKey2click"])(react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("span", { className: "svc-item-value-controls__button svc-item-value-controls__remove", "aria-label": model.removeTooltip, onClick: function () { return model.removeItem(model); } },
2306
+ react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(survey_react_ui__WEBPACK_IMPORTED_MODULE_3__["SvgIcon"], { size: 16, iconName: "icon-remove_16x16" }))) : null,
2307
+ model.allowAdd ? Object(survey_react_ui__WEBPACK_IMPORTED_MODULE_3__["attachKey2click"])(react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("span", { className: "svc-item-value-controls__button svc-item-value-controls__add", "aria-label": model.addTooltip, onClick: function () { return model.addItem(model); } },
2308
+ react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(survey_react_ui__WEBPACK_IMPORTED_MODULE_3__["SvgIcon"], { size: 16, iconName: "icon-add_16x16" }))) : null),
2309
+ this.props.element)));
2291
2310
  };
2292
2311
  return QuestionRatingAdornerComponent;
2293
- }(_Question__WEBPACK_IMPORTED_MODULE_3__["QuestionAdornerComponent"]));
2312
+ }(survey_react_ui__WEBPACK_IMPORTED_MODULE_3__["SurveyElementBase"]));
2294
2313
 
2295
- survey_react_ui__WEBPACK_IMPORTED_MODULE_4__["ReactElementFactory"].Instance.registerElement("svc-rating-question", function (props) {
2314
+ survey_react_ui__WEBPACK_IMPORTED_MODULE_3__["ReactElementFactory"].Instance.registerElement("svc-rating-question", function (props) {
2315
+ return react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(QuestionRatingAdornerComponent, props);
2316
+ });
2317
+ survey_react_ui__WEBPACK_IMPORTED_MODULE_3__["ReactElementFactory"].Instance.registerElement("svc-rating-question-content", function (props) {
2296
2318
  return react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(QuestionRatingAdornerComponent, props);
2297
2319
  });
2298
2320
 
@@ -2626,7 +2648,7 @@ __webpack_require__.r(__webpack_exports__);
2626
2648
  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "StylesManager", function() { return survey_creator_core__WEBPACK_IMPORTED_MODULE_42__["StylesManager"]; });
2627
2649
 
2628
2650
  var Version;
2629
- Version = "".concat("1.9.18");
2651
+ Version = "".concat("1.9.21");
2630
2652
  // import "@survey/creator/survey-creator-core.css";
2631
2653
 
2632
2654
 
@@ -2808,8 +2830,24 @@ __webpack_require__.r(__webpack_exports__);
2808
2830
 
2809
2831
  var TabDesignerComponent = /** @class */ (function (_super) {
2810
2832
  Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"])(TabDesignerComponent, _super);
2811
- function TabDesignerComponent() {
2812
- return _super !== null && _super.apply(this, arguments) || this;
2833
+ function TabDesignerComponent(props) {
2834
+ var _this = _super.call(this, props) || this;
2835
+ _this.denyUpdate = function () {
2836
+ _this.denyComponentUpdate();
2837
+ };
2838
+ _this.allowUpdate = function () {
2839
+ _this.allowComponentUpdate();
2840
+ };
2841
+ _this.addDragDropEvents = function () {
2842
+ _this.creator.onBeforeDrop.add(_this.denyUpdate);
2843
+ _this.creator.onAfterDrop.add(_this.allowUpdate);
2844
+ };
2845
+ _this.clearDragDropEvents = function () {
2846
+ _this.creator.onBeforeDrop.remove(_this.denyUpdate);
2847
+ _this.creator.onAfterDrop.remove(_this.allowUpdate);
2848
+ };
2849
+ _this.renderedPagesCache = {};
2850
+ return _this;
2813
2851
  }
2814
2852
  Object.defineProperty(TabDesignerComponent.prototype, "model", {
2815
2853
  get: function () {
@@ -2825,23 +2863,44 @@ var TabDesignerComponent = /** @class */ (function (_super) {
2825
2863
  enumerable: false,
2826
2864
  configurable: true
2827
2865
  });
2866
+ TabDesignerComponent.prototype.componentDidMount = function () {
2867
+ _super.prototype.componentDidMount.call(this);
2868
+ this.addDragDropEvents();
2869
+ };
2870
+ TabDesignerComponent.prototype.componentWillUnmount = function () {
2871
+ _super.prototype.componentWillUnmount.call(this);
2872
+ this.clearDragDropEvents();
2873
+ };
2828
2874
  TabDesignerComponent.prototype.getStateElements = function () {
2829
2875
  return [this.model, this.model.survey];
2830
2876
  };
2831
- TabDesignerComponent.prototype.renderNewPage = function (className, key) {
2832
- if (key === void 0) { key = ""; }
2833
- return (react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_1___default.a.Fragment, { key: key },
2834
- react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: className, "data-sv-drop-target-survey-element": "newGhostPage" }, this.renderPage(this.model.newPage))));
2835
- };
2836
- TabDesignerComponent.prototype.renderPages = function () {
2877
+ TabDesignerComponent.prototype.getRenderedPages = function () {
2837
2878
  var _this = this;
2838
- var surveyPages = this.creator.survey.pages.map(function (page, index) {
2839
- return (react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: "svc-page", "data-sv-drop-target-page": page.name, "data-sv-drop-target-survey-element": page.name, key: page.id + "-" + index }, _this.renderPage(page)));
2879
+ if (this.changedStatePropName !== "pages") {
2880
+ this.renderedPagesCache = {};
2881
+ }
2882
+ var renderedPages = [];
2883
+ var pages = this.creator.survey.pages;
2884
+ pages.forEach(function (page, index) {
2885
+ var cachedPage = _this.renderedPagesCache[page.id];
2886
+ if (!cachedPage) {
2887
+ cachedPage = _this.createRenderedPage(page, index);
2888
+ _this.renderedPagesCache[page.id] = cachedPage;
2889
+ }
2890
+ renderedPages.push(cachedPage);
2840
2891
  });
2841
2892
  if (this.model.showNewPage) {
2842
- surveyPages.push(this.renderNewPage("svc-page", this.model.newPage.id + "-ghost-new-page"));
2893
+ renderedPages.push(this.renderNewPage("svc-page", this.model.newPage.id + "-ghost-new-page"));
2843
2894
  }
2844
- return surveyPages;
2895
+ return renderedPages;
2896
+ };
2897
+ TabDesignerComponent.prototype.createRenderedPage = function (page, index) {
2898
+ return (react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: "svc-page", "data-sv-drop-target-page": page.name, "data-sv-drop-target-survey-element": page.name, key: page.id + "-" + index }, this.renderPage(page)));
2899
+ };
2900
+ TabDesignerComponent.prototype.renderNewPage = function (className, key) {
2901
+ if (key === void 0) { key = ""; }
2902
+ return (react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_1___default.a.Fragment, { key: key },
2903
+ react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: className, "data-sv-drop-target-survey-element": "newGhostPage" }, !!this.model.newPage ? this.renderPage(this.model.newPage) : null)));
2845
2904
  };
2846
2905
  TabDesignerComponent.prototype.renderPage = function (pageV) {
2847
2906
  return survey_react_ui__WEBPACK_IMPORTED_MODULE_2__["ReactElementFactory"].Instance.createElement("svc-page", { survey: this.creator.survey, page: pageV, creator: this.creator });
@@ -2864,10 +2923,10 @@ var TabDesignerComponent = /** @class */ (function (_super) {
2864
2923
  return (react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_1___default.a.Fragment, null,
2865
2924
  react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: this.model.getDesignerCss() },
2866
2925
  !this.creator.allowEditSurveyTitle ? null :
2867
- react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", null,
2926
+ react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: "svc-designer-header" },
2868
2927
  react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(survey_react_ui__WEBPACK_IMPORTED_MODULE_2__["SurveyHeader"], { survey: survey })),
2869
2928
  react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_Navigation__WEBPACK_IMPORTED_MODULE_4__["SurveyNavigation"], { survey: survey, location: "top" }),
2870
- this.renderPages(),
2929
+ this.getRenderedPages(),
2871
2930
  react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_Navigation__WEBPACK_IMPORTED_MODULE_4__["SurveyNavigation"], { survey: survey, location: "bottom", css: survey.css })),
2872
2931
  this.creator.showPageNavigator ?
2873
2932
  react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: "svc-tab-designer__page-navigator" },
@@ -3450,7 +3509,7 @@ var AdaptiveToolbox = /** @class */ (function (_super) {
3450
3509
  var container = this.rootRef.current;
3451
3510
  if (!container)
3452
3511
  return;
3453
- this.manager = new survey_core__WEBPACK_IMPORTED_MODULE_2__["VerticalResponsivityManager"](container, this.toolbox, ".svc-toolbox__tool:not(.sv-dots)>.sv-action__content", 40);
3512
+ this.manager = new survey_core__WEBPACK_IMPORTED_MODULE_2__["VerticalResponsivityManager"](container, this.toolbox, ".svc-toolbox__tool:not(.sv-dots)>.sv-action__content", 44, 44);
3454
3513
  };
3455
3514
  AdaptiveToolbox.prototype.componentWillUnmount = function () {
3456
3515
  this.manager && (this.manager.dispose());
@@ -3760,4 +3819,4 @@ module.exports = __WEBPACK_EXTERNAL_MODULE_survey_react_ui__;
3760
3819
 
3761
3820
  /******/ });
3762
3821
  });
3763
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yL3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvQWN0aW9uQnV0dG9uLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL0ltYWdlSXRlbVZhbHVlV3JhcHBlci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9JdGVtVmFsdWVXcmFwcGVyLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL0xvZ29JbWFnZS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9NYXRyaXhDZWxsV3JhcHBlci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9OYXZpZ2F0aW9uLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL05vdGlmaWVyLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL09iamVjdFNlbGVjdG9yLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL1BhZ2VOYXZpZ2F0b3IudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvUHJvcGVydHlHcmlkLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL1F1ZXN0aW9uRWRpdG9yQ29udGVudC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9RdWVzdGlvbkVtYmVkZGVkU3VydmV5LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL1F1ZXN0aW9uTGlua1ZhbHVlLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL1Jlc3VsdHMudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvU2lkZUJhci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9TdHJpbmdFZGl0b3IudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvU3VydmV5Q3JlYXRvci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9TdmdCdW5kbGUudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvVGFiYmVkTWVudS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9hZG9ybmVycy9DZWxsUXVlc3Rpb24udHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvYWRvcm5lcnMvQ2VsbFF1ZXN0aW9uRHJvcGRvd24udHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvYWRvcm5lcnMvUGFnZS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9hZG9ybmVycy9QYW5lbC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9hZG9ybmVycy9RdWVzdGlvbi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9hZG9ybmVycy9RdWVzdGlvbkRyb3Bkb3duLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL2Fkb3JuZXJzL1F1ZXN0aW9uRm9vdGVyLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL2Fkb3JuZXJzL1F1ZXN0aW9uSGVhZGVyLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL2Fkb3JuZXJzL1F1ZXN0aW9uSW1hZ2UudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvYWRvcm5lcnMvUXVlc3Rpb25SYXRpbmcudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvYWRvcm5lcnMvUXVlc3Rpb25XaWRnZXQudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvYWRvcm5lcnMvUm93LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL2VudHJpZXMvaGVscGVycy50cyIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL2VudHJpZXMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9ldmVudHMudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy90YWJzL0Rlc2lnbmVyLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL3RhYnMvRW1iZWQudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvdGFicy9Kc29uRWRpdG9yQWNlLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL3RhYnMvSnNvbkVkaXRvclRleHRhcmVhLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL3RhYnMvTG9naWMudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvdGFicy9QcmV2aWV3LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL3RhYnMvU3VydmV5U2ltdWxhdG9yLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL3RhYnMvVHJhbnNsYXRpb24udHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvdGFicy9UcmFuc2xhdGlvbkxpbmVTa2VsZXRvbi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy90b29sYm94L0FkYXB0aXZlVG9vbGJveC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy90b29sYm94L1Rvb2xib3gudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvdG9vbGJveC9Ub29sYm94SXRlbS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci9leHRlcm5hbCB7XCJyb290XCI6XCJSZWFjdFwiLFwiY29tbW9uanMyXCI6XCJyZWFjdFwiLFwiY29tbW9uanNcIjpcInJlYWN0XCIsXCJhbWRcIjpcInJlYWN0XCJ9Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvZXh0ZXJuYWwge1wicm9vdFwiOlwiUmVhY3RET01cIixcImNvbW1vbmpzMlwiOlwicmVhY3QtZG9tXCIsXCJjb21tb25qc1wiOlwicmVhY3QtZG9tXCIsXCJhbWRcIjpcInJlYWN0LWRvbVwifSIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yL2V4dGVybmFsIHtcInJvb3RcIjpcIlN1cnZleVwiLFwiY29tbW9uanMyXCI6XCJzdXJ2ZXktY29yZVwiLFwiY29tbW9uanNcIjpcInN1cnZleS1jb3JlXCIsXCJhbWRcIjpcInN1cnZleS1jb3JlXCJ9Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvZXh0ZXJuYWwge1wicm9vdFwiOlwiU3VydmV5Q3JlYXRvckNvcmVcIixcImNvbW1vbmpzMlwiOlwic3VydmV5LWNyZWF0b3ItY29yZVwiLFwiY29tbW9uanNcIjpcInN1cnZleS1jcmVhdG9yLWNvcmVcIixcImFtZFwiOlwic3VydmV5LWNyZWF0b3ItY29yZVwifSIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yL2V4dGVybmFsIHtcInJvb3RcIjpcIlN1cnZleVJlYWN0XCIsXCJjb21tb25qczJcIjpcInN1cnZleS1yZWFjdC11aVwiLFwiY29tbW9uanNcIjpcInN1cnZleS1yZWFjdC11aVwiLFwiYW1kXCI6XCJzdXJ2ZXktcmVhY3QtdWlcIn0iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELE87UUNWQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTs7O1FBR0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDBDQUEwQyxnQ0FBZ0M7UUFDMUU7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSx3REFBd0Qsa0JBQWtCO1FB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LENBQUM7SUFDaEIsT0FBTyxDQUFDLENBQUM7QUFDWCxDQUFDLENBQUM7Ozs7Ozs7Ozs7Ozs7QUN0REY7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQU8sSUFBSSxPQUFlLENBQUM7QUFDM0IsT0FBTyxHQUFHLFVBQUcsUUFBbUIsQ0FBRSxDQUFDO0FBRW5DLG9EQUFvRDtBQUVuQjtBQUVEO0FBQ0s7QUFDTTtBQUNBO0FBQ0U7QUFDSDtBQUNDO0FBQ0E7QUFDRjtBQUNRO0FBQ2hCO0FBQ0M7QUFFTDtBQUNRO0FBQ0s7QUFDRDtBQUNMO0FBQ0s7QUFDSjtBQUNWO0FBQ1k7QUFDSjtBQUNRO0FBQ2I7QUFDRjtBQUNFO0FBQ0g7QUFDcUI7QUFDaEI7QUFDQTtBQUVDO0FBQ0g7QUFDUTtBQUNLO0FBQ2I7QUFDRTtBQUNJO0FBQ0k7QUFFZDtBQUNRO0FBQ0Y7QUFFdUM7QUFDeEI7QUFDQztBQUNpQjtBQUNJO0FBRW9CO0FBQ3JDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN6RHBEO0lBQ0UseUJBQW1CLEtBQW1EO1FBQW5ELFVBQUssR0FBTCxLQUFLLENBQThDO0lBQUcsQ0FBQztJQUMxRSx5Q0FBZSxHQUFmO1FBQ0UsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUM3QiwyQ0FBMkM7UUFDM0Msb0RBQW9EO0lBQ3RELENBQUM7SUFDRCx3Q0FBYyxHQUFkO1FBQ0UsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUM1QiwwQ0FBMEM7SUFDNUMsQ0FBQztJQUNELHNCQUFJLHlDQUFZO2FBQWhCO1lBQ0UsaUNBQWlDO1lBQ2pDLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQzthQUNELFVBQWlCLEtBQWM7WUFDN0Isa0NBQWtDO1FBQ3BDLENBQUM7OztPQUhBO0lBSUQsc0JBQUksbUNBQU07YUFBVjtZQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFDM0IsQ0FBQzs7O09BQUE7SUFDRCxzQkFBSSwwQ0FBYTthQUFqQjtZQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUM7UUFDbEMsQ0FBQzs7O09BQUE7SUFDRCxzQkFBSSxvQ0FBTzthQUFYO1lBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUM1QixDQUFDOzs7T0FBQTtJQUNELHNCQUFJLG9DQUFPO2FBQVg7WUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO1FBQzVCLENBQUM7OztPQUFBO0lBQ0Qsc0JBQUksb0NBQU87YUFBWDtZQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDO1FBQ3hDLENBQUM7OztPQUFBO0lBQ0Qsc0JBQUksb0NBQU87YUFBWDtZQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDO1FBQ3hDLENBQUM7OztPQUFBO0lBQ0gsc0JBQUM7QUFBRCxDQUFDOztBQUVEO0lBQW9DLGdGQUFlO0lBRWpELHdCQUFtQixLQUFzQztRQUF6RCxZQUNFLGtCQUFNLEtBQUssQ0FBQyxTQUNiO1FBRmtCLFdBQUssR0FBTCxLQUFLLENBQWlDOztJQUV6RCxDQUFDO0lBRUQsc0JBQUksd0NBQVk7YUFBaEI7WUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDO1FBQ2pDLENBQUM7OztPQUFBO0lBQ0gscUJBQUM7QUFBRCxDQUFDLENBVG1DLGVBQWUsR0FTbEQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2pEeUI7QUFNRDtBQUU4QjtBQUNOO0FBTWpEO0lBQTBDLHNGQUFrRDtJQUE1Rjs7SUFrR0EsQ0FBQztJQWpHQyxzQkFBWSx1Q0FBSzthQUFqQjtZQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFDekIsQ0FBQzs7O09BQUE7SUFDRCxzQkFBYyx5Q0FBTzthQUFyQjtZQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFDNUIsQ0FBQzs7O09BQUE7SUFDUywrQ0FBZ0IsR0FBMUI7UUFDRSxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFDTyw0Q0FBYSxHQUFyQixVQUFzQixTQUFpQixFQUFFLEdBQWdCO1FBQWhCLDhCQUFnQjtRQUN2RCxPQUFPLENBQ0wsMkRBQUMsNENBQUssQ0FBQyxRQUFRLElBQUMsR0FBRyxFQUFFLEdBQUc7WUFDdEIsb0VBQ0UsU0FBUyxFQUFFLFNBQVMsd0NBQ2dCLGNBQWMsSUFFakQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUNoQyxDQUNTLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBQ1MsMENBQVcsR0FBckI7UUFBQSxpQkFvQkM7UUFuQkMsSUFBTSxXQUFXLEdBQWtCLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQzlELFVBQUMsSUFBZSxFQUFFLEtBQWE7WUFDN0IsT0FBTyxDQUNMLG9FQUNFLFNBQVMsRUFBRSxVQUFVLDhCQUNLLElBQUksQ0FBQyxJQUFJLHdDQUNDLElBQUksQ0FBQyxJQUFJLEVBQzdDLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxLQUFLLElBRXpCLEtBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQ2xCLENBQ1AsQ0FBQztRQUNKLENBQUMsQ0FDRixDQUFDO1FBRUYsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRTtZQUMxQixXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsR0FBRyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7U0FDN0Y7UUFDRCxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBQ1MseUNBQVUsR0FBcEIsVUFBcUIsS0FBZ0I7UUFDbkMsT0FBTyxtRUFBbUIsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLFVBQVUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNySSxDQUFDO0lBQ0QsNENBQWEsR0FBYjtRQUFBLGlCQWFDO1FBWkMsSUFBTSxvQkFBb0IsR0FBRyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBRTNFLE9BQU8sQ0FDTCwyREFBQyw0Q0FBSyxDQUFDLFFBQVE7WUFDYixvRUFBSyxTQUFTLEVBQUMsaUJBQWlCLElBQzdCLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLG1FQUFtQixDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsc0JBQXNCLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDN0g7WUFDTixvRUFBSyxTQUFTLEVBQUUsb0JBQW9CLEVBQUUsT0FBTyxFQUFFLGNBQU0sWUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsRUFBMUIsQ0FBMEIsSUFDNUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FDNUUsQ0FDUyxDQUNsQixDQUFDO0lBQ0osQ0FBQztJQUVELGdEQUFpQixHQUFqQjtRQUNFLE9BQU8sQ0FBQywyREFBQyw0Q0FBSyxDQUFDLFFBQVE7WUFDckIsb0VBQUssU0FBUyxFQUFDLHFDQUFxQztnQkFDbEQscUVBQU0sU0FBUyxFQUFDLHlEQUF5RCxJQUN0RSxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FDdEI7Z0JBQ04sSUFBSSxDQUFDLGFBQWEsQ0FBQywrQkFBK0IsQ0FBQyxDQUNoRCxDQUNTLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBRUQsK0NBQWdCLEdBQWhCO1FBQ0UsSUFBTSxNQUFNLEdBQWdCLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO1FBRWhELE9BQU8sQ0FBQywyREFBQyw0Q0FBSyxDQUFDLFFBQVE7WUFDckIsb0VBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFO2dCQUN4QyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUMxQzt3QkFDRSwyREFBQyw0REFBWSxJQUFDLE1BQU0sRUFBRSxNQUFNLEdBQWlCLENBQ3pDO2dCQUVSLDJEQUFDLDREQUFnQixJQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFDLEtBQUssR0FBRztnQkFDbEQsSUFBSSxDQUFDLFdBQVcsRUFBRTtnQkFDbkIsMkRBQUMsNERBQWdCLElBQ2YsTUFBTSxFQUFFLE1BQU0sRUFDZCxRQUFRLEVBQUMsUUFBUSxFQUNqQixHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUcsR0FDZixDQUNFO1lBQ0wsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO2dCQUMvQixvRUFBSyxTQUFTLEVBQUMsa0NBQWtDO29CQUFDLDJEQUFDLGtFQUFtQixJQUNwRSxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFDckIsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLEtBQUssR0FDcEIsQ0FBTTtnQkFDN0IsQ0FBQyxDQUFDLElBQUksQ0FFTyxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUNILDJCQUFDO0FBQUQsQ0FBQyxDQWxHeUMsaUVBQWlCLEdBa0cxRDs7QUFFRCxtRUFBbUIsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLGtCQUFrQixFQUFFLFVBQUMsS0FBSztJQUNyRSxPQUFPLDRDQUFLLENBQUMsYUFBYSxDQUN4QixvQkFBb0IsRUFDcEIsS0FBbUMsQ0FDcEMsQ0FBQztBQUNKLENBQUMsQ0FBQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN4SHVCO0FBTUQ7QUFPekI7SUFBdUMsbUZBR3RDO0lBSEQ7O0lBaUJBLENBQUM7SUFiQyxzQkFBWSxvQ0FBSzthQUFqQjtZQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFDekIsQ0FBQzs7O09BQUE7SUFDUywyQ0FBZSxHQUF6QjtRQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBQ0QseUNBQWEsR0FBYjtRQUNFLE9BQU8sQ0FDTCxvRUFBSyxTQUFTLEVBQUMsaURBQWlELElBQzdELElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQywyREFBQyxzREFBTSxJQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQ25FLENBQ1AsQ0FBQztJQUNKLENBQUM7SUFDSCx3QkFBQztBQUFELENBQUMsQ0FqQnNDLGlFQUFpQixHQWlCdkQ7O0FBRUQsbUVBQW1CLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FDMUMsZUFBZSxFQUNmLFVBQUMsS0FBOEI7SUFDN0IsT0FBTyw0Q0FBSyxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUN2RCxDQUFDLENBQ0YsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDckN3QjtBQUUrQztBQU96RTtJQUErQywyRkFHOUM7SUFFQyxtQ0FBWSxLQUFzQztRQUFsRCxZQUNFLGtCQUFNLEtBQUssQ0FBQyxTQUViO1FBREMsS0FBSSxDQUFDLGFBQWEsR0FBRyw0Q0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDOztJQUN6QyxDQUFDO0lBQ1MsbURBQWUsR0FBekI7UUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQUNELHNCQUFZLDRDQUFLO2FBQWpCO1lBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztRQUN6QixDQUFDOzs7T0FBQTtJQUNELHFEQUFpQixHQUFqQjtRQUNFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFzQixDQUFDLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBQ0QsaURBQWEsR0FBYjtRQUNFLE9BQU8sQ0FDTCxvRUFBSyxTQUFTLEVBQUMsMEJBQTBCO1lBQ3ZDLG9FQUFLLFNBQVMsRUFBQyw4QkFBOEI7Z0JBQzNDLG9FQUNFLFNBQVMsRUFBQyxpQ0FBaUMsRUFDM0MsR0FBRyxFQUFFLElBQUksQ0FBQyxhQUFhLEdBQ2xCLENBQ0gsQ0FDRixDQUNQLENBQUM7SUFDSixDQUFDO0lBQ0gsZ0NBQUM7QUFBRCxDQUFDLENBOUI4QyxpRUFBaUIsR0E4Qi9EOztBQUVELG1FQUFtQixDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQzFDLHlCQUF5QixFQUN6QixVQUFDLEtBQXNDO0lBQ3JDLE9BQU8sNENBQUssQ0FBQyxhQUFhLENBQUMseUJBQXlCLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDL0QsQ0FBQyxDQUNGLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzlDeUM7QUFFOEI7QUFPekU7SUFBb0QsZ0dBR25EO0lBQ0Msd0NBQVksS0FBSztRQUFqQixZQUNFLGtCQUFNLEtBQUssQ0FBQyxTQUViO1FBREMsS0FBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDOztJQUNuQyxDQUFDO0lBQ1Msd0RBQWUsR0FBekI7UUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQUNELHNCQUFZLGlEQUFLO2FBQWpCO1lBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztRQUN6QixDQUFDOzs7T0FBQTtJQUNELHNEQUFhLEdBQWI7UUFBQSxpQkFpQ0M7UUFoQ0MsSUFBTSxNQUFNLEdBQWtCLEVBQUUsQ0FBQztRQUNqQyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDWixJQUFNLGtCQUFrQixHQUFVLElBQUksQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUM7UUFDaEUsS0FBSyxJQUFJLENBQUMsR0FBVyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUMxRCxNQUFNLENBQUMsSUFBSSxDQUFDLHFFQUFNLEdBQUcsRUFBRSxHQUFHO2dCQUFFLGdGQUFjLENBQU8sQ0FBQyxDQUFDO1lBQ25ELEdBQUcsRUFBRSxDQUFDO1lBQ04sTUFBTSxDQUFDLElBQUksQ0FBQyxxRUFBTSxHQUFHLEVBQUUsR0FBRyxJQUFHLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFRLENBQUMsQ0FBQztZQUM1RCxHQUFHLEVBQUUsQ0FBQztTQUNQO1FBQ0QsT0FBTyxDQUNMLG9FQUFLLFNBQVMsRUFBQywwQkFBMEI7WUFDdkMsb0VBQUssU0FBUyxFQUFDLDhCQUE4QjtnQkFDM0MseUVBQ0UsU0FBUyxFQUFDLG1DQUFtQyxFQUM3QyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQ3RCLFFBQVEsRUFBRSxVQUFDLENBQW1DO3dCQUM1QyxRQUFDLEtBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO29CQUFsQyxDQUFrQyxFQUVwQyxTQUFTLEVBQUUsVUFBQyxDQUFDLElBQUssWUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUF6QixDQUF5QixFQUMzQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLGdCQUNqQixJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FDdEI7Z0JBQ1gsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDO29CQUNoQix1RUFBUSxJQUFJLEVBQUMsUUFBUSxFQUFDLFNBQVMsRUFBQyxvQ0FBb0MsRUFBQyxPQUFPLEVBQUUsY0FBTSxZQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxFQUF6QixDQUF5QixJQUMxRyxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FDcEI7Z0JBRVYsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLElBQUksb0VBQUssU0FBUyxFQUFDLHFDQUFxQyxJQUFFLE1BQU0sQ0FBTyxDQUU1RixDQUNGLENBQ1AsQ0FBQztJQUNKLENBQUM7SUFDSCxxQ0FBQztBQUFELENBQUMsQ0FoRG1ELGlFQUFpQixHQWdEcEU7O0FBRUQsbUVBQW1CLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FDMUMsOEJBQThCLEVBQzlCLFVBQUMsS0FBMkM7SUFDMUMsT0FBTyw0Q0FBSyxDQUFDLGFBQWEsQ0FBQyw4QkFBOEIsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNwRSxDQUFDLENBQ0YsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2hFc0M7QUFFMEQ7QUFHbEc7SUFBZ0QsNEZBQTJCO0lBQTNFOztJQXdCQSxDQUFDO0lBdkJDLHNCQUFZLDZDQUFLO2FBQWpCO1lBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUMzQixDQUFDOzs7T0FBQTtJQUNTLG9EQUFlLEdBQXpCO1FBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFFRCxrREFBYSxHQUFiO1FBQUEsaUJBZUM7UUFkQyxJQUFNLGVBQWUsR0FBRyx1Q0FBdUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEtBQUssU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsMENBQTBDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hMLE9BQU8sdUVBQWUsQ0FBQyxvRUFDckIsSUFBSSxFQUFDLFFBQVEsRUFDYixPQUFPLEVBQUUsVUFBQyxDQUFDO2dCQUNULENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDcEIsS0FBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN0QixDQUFDLEVBQ0QsU0FBUyxFQUFFLGVBQWUsRUFDMUIsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSztZQUV2QixxRUFBTSxTQUFTLEVBQUMsMENBQTBDLElBQ3ZELElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUNaLENBQ0gsQ0FBQyxDQUFDO0lBQ1YsQ0FBQztJQUNILGlDQUFDO0FBQUQsQ0FBQyxDQXhCK0MsaUVBQWlCLEdBd0JoRTs7QUFDRCxtRUFBbUIsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLDBCQUEwQixFQUFFLFVBQUMsS0FBSztJQUM3RSxPQUFPLDRDQUFLLENBQUMsYUFBYSxDQUFDLDBCQUEwQixFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2hFLENBQUMsQ0FBQyxDQUFDO0FBRUg7SUFBdUMsbUZBQTJCO0lBQWxFOztJQThCQSxDQUFDO0lBN0JDLHNCQUFZLG9DQUFLO2FBQWpCO1lBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztRQUN6QixDQUFDOzs7T0FBQTtJQUNTLDJDQUFlLEdBQXpCO1FBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFFRCx5Q0FBYSxHQUFiO1FBQ0UsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUN2QixJQUFJLFNBQVMsR0FBRywwQkFBMEIsQ0FBQztRQUMzQyxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN2QyxPQUFPLG9FQUFLLFNBQVMsRUFBRSxTQUFTLElBQUcsT0FBTyxDQUFPLENBQUM7SUFDcEQsQ0FBQztJQUNPLDZDQUFpQixHQUF6QjtRQUNFLElBQU0saUJBQWlCLEdBQUcsaURBQWlELEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ2xJLElBQU0sUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLDJEQUFDLDBCQUEwQixJQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksR0FBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDcEgsT0FBTyxDQUNMLDJEQUFDLDhDQUFRO1lBQ1Asb0VBQUssU0FBUyxFQUFFLGlCQUFpQjtnQkFDL0IsMkRBQUMsc0RBQU0sSUFBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQVc7Z0JBQy9DLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQzVCLG9FQUFLLFNBQVMsRUFBQyw4QkFBOEI7b0JBQzNDLHFFQUFNLFNBQVMsRUFBQyxVQUFVLElBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBUSxDQUM5RCxDQUFDO2dCQUNSLFFBQVEsQ0FDTCxDQUNHLENBQ1osQ0FBQztJQUNKLENBQUM7SUFDSCx3QkFBQztBQUFELENBQUMsQ0E5QnNDLGlFQUFpQixHQThCdkQ7O0FBQ0QsbUVBQW1CLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxlQUFlLEVBQUUsVUFBQyxLQUFLO0lBQ2xFLE9BQU8sNENBQUssQ0FBQyxhQUFhLENBQUMsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDdkQsQ0FBQyxDQUFDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ25FdUI7QUFPRDtBQUUyQjtBQUNUO0FBRTNDO0lBQXdELG9HQUEyQjtJQUFuRjs7SUF3QkEsQ0FBQztJQXZCQyxzQkFBWSxxREFBSzthQUFqQjtZQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFDM0IsQ0FBQzs7O09BQUE7SUFDUyw0REFBZSxHQUF6QjtRQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBRUQsMERBQWEsR0FBYjtRQUFBLGlCQWVDO1FBZEMsSUFBTSxlQUFlLEdBQUcsaUNBQWlDLENBQUM7UUFDMUQsT0FBTyx1RUFBZSxDQUFDLG9FQUNyQixJQUFJLEVBQUMsUUFBUSxFQUNiLE9BQU8sRUFBRSxVQUFDLENBQUM7Z0JBQ1QsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUNwQixLQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3RCLENBQUMsRUFDRCxTQUFTLEVBQUUsZUFBZSxFQUMxQixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLO1lBRXZCLHFFQUFNLFNBQVMsRUFBQywwQ0FBMEMsSUFDdkQsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQ1osQ0FDSCxDQUFDLENBQUM7SUFDVixDQUFDO0lBQ0gseUNBQUM7QUFBRCxDQUFDLENBeEJ1RCxpRUFBaUIsR0F3QnhFOztBQUNELG1FQUFtQixDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsNEJBQTRCLEVBQUUsVUFBQyxLQUFLO0lBQy9FLE9BQU8sNENBQUssQ0FBQyxhQUFhLENBQUMsa0NBQWtDLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDeEUsQ0FBQyxDQUFDLENBQUM7QUFFSDtJQUErQywyRkFBMkI7SUFBMUU7O0lBZ0NBLENBQUM7SUEvQkMsc0JBQVksNENBQUs7YUFBakI7WUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBQ3pCLENBQUM7OztPQUFBO0lBQ1MsbURBQWUsR0FBekI7UUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQUVELGlEQUFhLEdBQWI7UUFDRSxJQUFNLG1CQUFtQixHQUFHLGdEQUFnRCxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMseUNBQXlDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2xLLE9BQU8sQ0FDTCxvRUFBSyxTQUFTLEVBQUUsbUJBQW1CO1lBQ2pDLG9FQUFLLFNBQVMsRUFBQyx5QkFBeUI7Z0JBQ3RDLDJEQUFDLGdFQUFlLElBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFvQjtnQkFDL0QsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsMkRBQUMsa0NBQWtDLElBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxHQUFJLENBQUMsQ0FBQyxDQUFDLElBQUk7Z0JBQ3pHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLDJEQUFDLHNEQUFhLElBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQ2xGO1lBQ0wsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQ3BCLENBQ1AsQ0FBQztJQUNKLENBQUM7SUFDRCxvREFBZ0IsR0FBaEI7UUFDRSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsb0JBQW9CLEVBQUU7WUFDbkMsT0FBTyxDQUNMLG9FQUFLLFNBQVMsRUFBQywrQkFBK0I7Z0JBQzVDLDJEQUFDLCtEQUFlLElBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFvQixDQUN4RCxDQUNQLENBQUM7U0FDSDthQUFNO1lBQ0wsT0FBTyxJQUFJLENBQUM7U0FDYjtJQUNILENBQUM7SUFDSCxnQ0FBQztBQUFELENBQUMsQ0FoQzhDLGlFQUFpQixHQWdDL0Q7O0FBRUQsbUVBQW1CLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxjQUFjLEVBQUUsVUFBQyxLQUFLO0lBQ2pFLE9BQU8sNENBQUssQ0FBQyxhQUFhLENBQUMseUJBQXlCLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDL0QsQ0FBQyxDQUFDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzVFeUQ7QUFFbEM7QUFFMUI7SUFBcUMsaUZBQTJCO0lBSzlELHlCQUFZLEtBQVU7ZUFDcEIsa0JBQU0sS0FBSyxDQUFDO0lBQ2QsQ0FBQztJQU5ELHNCQUFZLGtDQUFLO2FBQWpCO1lBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUMxQixDQUFDOzs7T0FBQTtJQUtTLHlDQUFlLEdBQXpCO1FBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFFRCx1Q0FBYSxHQUFiO1FBQ0UsSUFBTSxrQkFBa0IsR0FBRyxvQkFBb0I7WUFDN0MsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLDhCQUE4QixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMxRSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUU7WUFDdEIsT0FBTyxvRUFBSyxTQUFTLEVBQUUsa0JBQWtCLEdBQVEsQ0FBQztTQUNuRDtRQUNELElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUU7WUFDdkIsT0FBTyxDQUNMLG9FQUNFLFNBQVMsRUFBRSxrQkFBa0IsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxxQkFBcUI7Z0JBQ3RFLG9FQUNFLFNBQVMsRUFBQyx1QkFBdUIsRUFDakMsS0FBSyxFQUFFO3dCQUNMLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxVQUFVLEdBQUcsSUFBSTt3QkFDbEQsTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLFdBQVcsR0FBRyxJQUFJO3FCQUNyRDtvQkFFRCxvRUFDRSxTQUFTLEVBQ1Asc0JBQXNCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUU3RCxLQUFLLEVBQUU7NEJBQ0wsS0FBSyxFQUNILENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxvQkFBb0I7Z0NBQzlCLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxXQUFXO2dDQUN2QyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSTs0QkFDbEQsTUFBTSxFQUNKLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxvQkFBb0I7Z0NBQzlCLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxVQUFVO2dDQUN0QyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSTt5QkFDcEQsR0FDSTtvQkFDUCxvRUFDRSxTQUFTLEVBQUMsZUFBZSxFQUN6QixLQUFLLEVBQUU7NEJBQ0wsS0FBSyxFQUNILElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLEtBQUs7Z0NBQy9CLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLEtBQUs7Z0NBQy9CLElBQUk7NEJBQ04sTUFBTSxFQUNKLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLE1BQU07Z0NBQ2hDLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLEtBQUs7Z0NBQy9CLElBQUk7NEJBQ04sU0FBUyxFQUNQLFFBQVE7Z0NBQ1IsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsS0FBSztnQ0FDL0IseUJBQXlCO3lCQUM1Qjt3QkFFRCxvRUFBSyxTQUFTLEVBQUMsdUJBQXVCOzRCQUNwQywyREFBQyxzREFBTSxJQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBVyxDQUN2QyxDQUNGLENBQ0YsQ0FDRixDQUNQLENBQUM7U0FDSDthQUFNO1lBQ0wsT0FBTyxDQUNMLG9FQUNFLFNBQVMsRUFBRSxrQkFBa0I7Z0JBQzdCLG9FQUFLLFNBQVMsRUFBQyx1QkFBdUI7b0JBQ3BDLDJEQUFDLHNEQUFNLElBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFXLENBQ3ZDLENBQ0YsQ0FDUCxDQUFDO1NBQ0g7SUFDSCxDQUFDO0lBQ0gsc0JBQUM7QUFBRCxDQUFDLENBL0VvQyxpRUFBaUIsR0ErRXJEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDcEZ5QjtBQU1EO0FBR3pCO0lBQTZDLHlGQUEyQjtJQUF4RTs7SUFxQ0EsQ0FBQztJQXBDQyxzQkFBWSwwQ0FBSzthQUFqQjtZQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFDekIsQ0FBQzs7O09BQUE7SUFDUyxpREFBZSxHQUF6QjtRQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBQ0QsK0NBQWEsR0FBYjtRQUNFLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQzdCLE9BQU8sQ0FDTCxvRUFBSyxTQUFTLEVBQUMsOENBQThDLElBQzFELElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUN4QixDQUNQLENBQUM7SUFDSixDQUFDO0lBQ0Qsc0RBQW9CLEdBQXBCO1FBQ0UsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRTtZQUN0QixPQUFPLENBQ0wsb0VBQUssU0FBUyxFQUFDLGVBQWU7Z0JBQzVCLHlFQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFRLENBQ25DLENBQ1AsQ0FBQztTQUNIO2FBQU07WUFDTCxPQUFPLENBQ0wsb0VBQUssU0FBUyxFQUFDLFlBQVk7Z0JBQ3pCLG9FQUFLLFNBQVMsRUFBQyxvQ0FBb0M7b0JBQ2pELG9FQUFLLFNBQVMsRUFBQyxnQ0FBZ0M7d0JBQzdDLDJEQUFDLHNEQUFNLElBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsbUJBQW1CLEdBQVcsQ0FDcEQ7b0JBQ04sb0VBQUssU0FBUyxFQUFDLGlEQUFpRDt3QkFDOUQsMkRBQUMsc0RBQU0sSUFBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEdBQVcsQ0FDOUMsQ0FDRixDQUNGLENBQ1AsQ0FBQztTQUNIO0lBQ0gsQ0FBQztJQUNILDhCQUFDO0FBQUQsQ0FBQyxDQXJDNEMsaUVBQWlCLEdBcUM3RDs7QUFFRCxtRUFBbUIsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLHFCQUFxQixFQUFFLFVBQUMsS0FBSztJQUN4RSxPQUFPLDRDQUFLLENBQUMsYUFBYSxDQUFDLHVCQUF1QixFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzdELENBQUMsQ0FBQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNsRHVCO0FBQzRCO0FBRXREO0lBQTZDLHlGQUF5QjtJQUF0RTs7SUFPQSxDQUFDO0lBTkMsd0NBQU0sR0FBTjtRQUNFLE9BQU8sQ0FDTCxvRUFBSyxTQUFTLEVBQUMsOEJBQThCLEdBQ3ZDLENBQ1AsQ0FBQztJQUNKLENBQUM7SUFDSCw4QkFBQztBQUFELENBQUMsQ0FQNEMsNENBQUssQ0FBQyxTQUFTLEdBTzNEOztBQUVELG1FQUFtQixDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsOEJBQThCLEVBQUUsVUFBQyxLQUFVO0lBQ3RGLE9BQU8sNENBQUssQ0FBQyxhQUFhLENBQUMsdUJBQXVCLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDN0QsQ0FBQyxDQUFDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNkdUI7QUFDZ0M7QUFDSjtBQUNHO0FBQ087QUFFaEU7SUFBcUMsaUZBQU87SUFJMUMseUJBQVksS0FBaUM7UUFBN0MsWUFDRSxrQkFBTSxLQUFLLENBQUMsU0FFYjtRQURDLEtBQUksQ0FBQyxPQUFPLEdBQUcsNENBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQzs7SUFDbkMsQ0FBQztJQUVELDJDQUFpQixHQUFqQjtRQUNFLGlCQUFNLGlCQUFpQixXQUFFLENBQUM7UUFDMUIsSUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7UUFDdkMsSUFBSSxDQUFDLFNBQVM7WUFBRSxPQUFPO1FBQ3ZCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSx1RUFBMkIsQ0FDNUMsU0FBUyxFQUNULElBQUksQ0FBQyxPQUFPLEVBQ1osc0RBQXNELEVBQ3RELEVBQUUsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUNELDhDQUFvQixHQUFwQjtRQUNFLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDekMsaUJBQU0sb0JBQW9CLFdBQUUsQ0FBQztJQUMvQixDQUFDO0lBQ0QsZ0NBQU0sR0FBTjtRQUNFLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVU7WUFBRSxPQUFPLElBQUksQ0FBQztRQUUxQyxJQUFNLFNBQVMsR0FBRyxhQUFhLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzFGLE9BQU8sQ0FDTCxvRUFBSyxHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUztZQUMxQyxvRUFBSyxTQUFTLEVBQUMsd0JBQXdCLElBQ3BDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hFLENBQUMsb0VBQUssU0FBUyxFQUFDLHVCQUF1QixJQUNwQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQ25FLENBQUM7Z0JBQ1AsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUV2QixDQUNGLENBQ1AsQ0FBQztJQUNKLENBQUM7SUFFRCxxQ0FBVyxHQUFYLFVBQVksS0FBaUIsRUFBRSxTQUFtQjtRQUFsRCxpQkFJQztRQUhDLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxVQUFDLElBQUksRUFBRSxTQUFTO1lBQy9CLGtFQUFDLHFFQUF3QixJQUFDLElBQUksRUFBRyxJQUFZLEVBQUUsT0FBTyxFQUFFLEtBQUksQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxHQUFHLFNBQVMsR0FBNkI7UUFBaEosQ0FBZ0osQ0FDakosQ0FBQztJQUNKLENBQUM7SUFFUywrQ0FBcUIsR0FBL0IsVUFBZ0MsUUFBYTtRQUMzQyxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDZixJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRTtZQUN2QixLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ2pEO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0gsc0JBQUM7QUFBRCxDQUFDLENBdkRvQyxnREFBTyxHQXVEM0M7O0FBRUQsbUVBQW1CLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxzQkFBc0IsRUFBRSxVQUFDLEtBQUs7SUFDekUsT0FBTyw0Q0FBSyxDQUFDLGFBQWEsQ0FBQyxlQUFlLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDckQsQ0FBQyxDQUFDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNqRXVCO0FBRStCO0FBRTBDO0FBTW5HO0lBQTZCLHlFQUFrRDtJQUM3RSxpQkFBWSxLQUFpQztlQUMzQyxrQkFBTSxLQUFLLENBQUM7SUFDZCxDQUFDO0lBQ0Qsc0JBQVcsNEJBQU87YUFBbEI7WUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQzFCLENBQUM7OztPQUFBO0lBQ0Qsc0JBQVcsNEJBQU87YUFBbEI7WUFDRSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO1FBQzlCLENBQUM7OztPQUFBO0lBQ1MsaUNBQWUsR0FBekI7UUFDRSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUVELHdCQUFNLEdBQU47UUFDRSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFFMUMsT0FBTyxDQUNMLG9FQUFLLFNBQVMsRUFBQyxhQUFhO1lBQzFCLG9FQUFLLFNBQVMsRUFBQyx3QkFBd0IsSUFDcEMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDdEMsQ0FBQyxvRUFBSyxTQUFTLEVBQUMsdUJBQXVCLElBQ3BDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FDMUMsQ0FBQztnQkFDUCxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBRXZCLENBQ0YsQ0FDUCxDQUFDO0lBQ0osQ0FBQztJQUVELDZCQUFXLEdBQVgsVUFBWSxLQUFpQjtRQUE3QixpQkFJQztRQUhDLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxVQUFDLElBQUksRUFBRSxTQUFTO1lBQy9CLGtFQUFDLHFFQUF3QixJQUFDLElBQUksRUFBRyxJQUFZLEVBQUUsT0FBTyxFQUFFLEtBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sR0FBRyxTQUFTLEVBQUUsU0FBUyxFQUFFLEtBQUssR0FBNkI7UUFBNUksQ0FBNEksQ0FDN0ksQ0FBQztJQUNKLENBQUM7SUFDRCxrQ0FBZ0IsR0FBaEI7UUFBQSxpQkFXQztRQVZDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFVBQUMsUUFBUTtZQUMxQyxJQUFNLE1BQU0sR0FBRyxLQUFJLENBQUMsb0JBQW9CLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDbkQsSUFBTSxLQUFLLEdBQUcsS0FBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ25ELE9BQU8sQ0FDTCxvRUFBSyxTQUFTLEVBQUMsdUJBQXVCLEVBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxJQUFJO2dCQUN0RCxNQUFNO2dCQUNOLEtBQUssQ0FDRixDQUNQLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxzQ0FBb0IsR0FBcEIsVUFBcUIsUUFBYTtRQUNoQyxJQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQztRQUNoRSxJQUFNLGdCQUFnQixHQUFHLGtFQUFrRSxHQUFHLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMzSSxPQUFPLHVFQUFlLENBQ3BCLG9FQUFLLFNBQVMsRUFBQyw4QkFBOEIsRUFBQyxPQUFPLEVBQUUsV0FBQyxJQUFJLGVBQVEsQ0FBQyxXQUFXLEVBQUUsRUFBdEIsQ0FBc0I7WUFDaEYscUVBQU0sU0FBUyxFQUFDLDZCQUE2QixJQUFFLFFBQVEsQ0FBQyxJQUFJLENBQVE7WUFDcEUsb0VBQUssU0FBUyxFQUFDLHdDQUF3QztnQkFDckQsMkRBQUMsdURBQU8sSUFBQyxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLE9BQU8sR0FBRyxRQUFRLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBWSxDQUNwRixDQUNGLENBQ1AsQ0FBQztJQUNKLENBQUM7SUFDUyx1Q0FBcUIsR0FBL0IsVUFBZ0MsUUFBYTtRQUMzQyxPQUFPLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNyRSxDQUFDO0lBQ0gsY0FBQztBQUFELENBQUMsQ0FoRTRCLGlFQUFpQixHQWdFN0M7O0FBRUQsbUVBQW1CLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxhQUFhLEVBQUUsVUFBQyxLQUFLO0lBQ2hFLE9BQU8sNENBQUssQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzdDLENBQUMsQ0FBQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUMxRTBCO0FBQ2dCO0FBQ2M7QUFXbEM7QUFRekI7SUFBOEMsMEZBRzdDO0lBR0Msa0NBQVksS0FBSztRQUFqQixZQUNFLGtCQUFNLEtBQUssQ0FBQyxTQUViO1FBREMsS0FBSSxDQUFDLEtBQUssR0FBRyxJQUFJLHdFQUFvQixDQUFDLEtBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQzs7SUFDdkUsQ0FBQztJQUNELHNCQUFXLDBDQUFJO2FBQWY7WUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBQ3pCLENBQUM7OztPQUFBO0lBQ0Qsc0JBQVcsNkNBQU87YUFBbEI7WUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO1FBQzVCLENBQUM7OztPQUFBO0lBQ0Qsc0JBQVcsK0NBQVM7YUFBcEI7WUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO1FBQzlCLENBQUM7OztPQUFBO0lBRVMsa0RBQWUsR0FBekI7UUFDRSxPQUFRLElBQUksQ0FBQyxJQUFZLENBQUM7SUFDNUIsQ0FBQztJQUVELHlDQUFNLEdBQU47UUFBQSxpQkEwQkM7UUF6QkMsSUFBTSxJQUFJLEdBQUssSUFBSSxDQUFDLElBQXVCLENBQUM7UUFDNUMsSUFBTSxTQUFTLEdBQUcsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUNqRyxJQUFNLGFBQWEsR0FBRyxtRUFBbUIsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUM5RCxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxrQkFBa0IsRUFDekM7WUFDRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDZixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDckIsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO1NBQzFCLENBQ0YsQ0FBQztRQUNGLE9BQU8sQ0FDTCxvRUFBSyxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUNyQyxhQUFhLEVBQUUsVUFBQyxLQUFVO2dCQUN4QixLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2hCLEtBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2xDLENBQUM7WUFFRCxvRUFBSyxTQUFTLEVBQUMsb0JBQW9CO2dCQUNoQyxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUN4QyxvRUFBSyxTQUFTLEVBQUMsaUNBQWlDLEdBQU8sQ0FDeEQsQ0FBQyxDQUFDLENBQUMsSUFBSTtnQkFDUCxhQUFhLENBQ1YsQ0FDRixDQUNQLENBQUM7SUFDSixDQUFDO0lBQ0gsK0JBQUM7QUFBRCxDQUFDLENBbkQ2QyxpRUFBaUIsR0FtRDlEOztBQUVEO0lBQThDLDBGQUc3QztJQUVDLGtDQUFZLEtBQUs7UUFBakIsWUFDRSxrQkFBTSxLQUFLLENBQUMsU0FHYjtRQUZDLElBQU0sV0FBVyxHQUF5QixLQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztRQUMxRCxLQUFJLENBQUMsS0FBSyxHQUFHLElBQUksd0VBQW9CLENBQUMsV0FBVyxFQUFFLEtBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7O0lBQ3pFLENBQUM7SUFDRCxzQkFBVywwQ0FBSTthQUFmO1lBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztRQUN6QixDQUFDOzs7T0FBQTtJQUNELHNCQUFXLDZDQUFPO2FBQWxCO1lBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUM1QixDQUFDOzs7T0FBQTtJQUNTLGtEQUFlLEdBQXpCO1FBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFDRCx5Q0FBTSxHQUFOO1FBQUEsaUJBZ0NDO1FBL0JDLElBQU0sU0FBUyxHQUNiLHVDQUF1QyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQy9ELE9BQU8sdUVBQWUsQ0FDcEIsb0VBQ0UsU0FBUyxFQUFFLFNBQVMsRUFDcEIsUUFBUSxFQUFFLENBQUMsRUFDWCxJQUFJLEVBQUMsUUFBUSxnQkFFWCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU87Z0JBQ2pCLEdBQUc7Z0JBQ0gsc0VBQWtCLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQztnQkFDdkMsT0FBTyxFQUVULE9BQU8sRUFBRSxVQUFDLEtBQVU7Z0JBQ2xCLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDaEIsS0FBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUIsQ0FBQztZQUVELHFFQUFNLFNBQVMsRUFBQyw2QkFBNkI7Z0JBQzNDLDJEQUFDLHVEQUFPLElBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQVksQ0FDdEQ7WUFDTixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3RCLHFFQUFNLFNBQVMsRUFBQywyQ0FBMkM7b0JBQ3pELDJEQUFDLHVEQUFPLElBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFDLHdCQUF3QixHQUFXO29CQUM5RixxRUFBTSxTQUFTLEVBQUMseUJBQXlCLElBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQVEsQ0FDN0Q7Z0JBQ1AsQ0FBQztvQkFDRCxxRUFBTSxTQUFTLEVBQUMseUJBQXlCLElBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQVEsQ0FDbkUsQ0FDRyxDQUNQLENBQUM7SUFDSixDQUFDO0lBQ0gsK0JBQUM7QUFBRCxDQUFDLENBcEQ2QyxpRUFBaUIsR0FvRDlEOztBQUVELG1FQUFtQixDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsa0JBQWtCLEVBQUUsVUFBQyxLQUFLO0lBQ3JFLE9BQU8sNENBQUssQ0FBQyxhQUFhLENBQUMsd0JBQXdCLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDOUQsQ0FBQyxDQUFDLENBQUM7Ozs7Ozs7Ozs7OztBQ3RJSCxtRDs7Ozs7Ozs7Ozs7QUNBQSx1RDs7Ozs7Ozs7Ozs7QUNBQSx5RDs7Ozs7Ozs7Ozs7QUNBQSxpRTs7Ozs7Ozs7Ozs7QUNBQSw2RCIsImZpbGUiOiJzdXJ2ZXktY3JlYXRvci1yZWFjdC5qcyIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcInJlYWN0XCIpLCByZXF1aXJlKFwicmVhY3QtZG9tXCIpLCByZXF1aXJlKFwic3VydmV5LWNvcmVcIiksIHJlcXVpcmUoXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCIpLCByZXF1aXJlKFwic3VydmV5LXJlYWN0LXVpXCIpKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFwiU3VydmV5Q3JlYXRvclwiLCBbXCJyZWFjdFwiLCBcInJlYWN0LWRvbVwiLCBcInN1cnZleS1jb3JlXCIsIFwic3VydmV5LWNyZWF0b3ItY29yZVwiLCBcInN1cnZleS1yZWFjdC11aVwiXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJTdXJ2ZXlDcmVhdG9yXCJdID0gZmFjdG9yeShyZXF1aXJlKFwicmVhY3RcIiksIHJlcXVpcmUoXCJyZWFjdC1kb21cIiksIHJlcXVpcmUoXCJzdXJ2ZXktY29yZVwiKSwgcmVxdWlyZShcInN1cnZleS1jcmVhdG9yLWNvcmVcIiksIHJlcXVpcmUoXCJzdXJ2ZXktcmVhY3QtdWlcIikpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIlN1cnZleUNyZWF0b3JcIl0gPSBmYWN0b3J5KHJvb3RbXCJSZWFjdFwiXSwgcm9vdFtcIlJlYWN0RE9NXCJdLCByb290W1wiU3VydmV5XCJdLCByb290W1wiU3VydmV5Q3JlYXRvckNvcmVcIl0sIHJvb3RbXCJTdXJ2ZXlSZWFjdFwiXSk7XG59KSh0aGlzLCBmdW5jdGlvbihfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX3JlYWN0X18sIF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfcmVhY3RfZG9tX18sIF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfc3VydmV5X2NvcmVfXywgX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9zdXJ2ZXlfY3JlYXRvcl9jb3JlX18sIF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfc3VydmV5X3JlYWN0X3VpX18pIHtcbnJldHVybiAiLCIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gXCIuL3NyYy9lbnRyaWVzL2luZGV4LnRzXCIpO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgYXR0YWNoS2V5MmNsaWNrLCBTdXJ2ZXlFbGVtZW50QmFzZSwgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5cbmV4cG9ydCBjbGFzcyBBY3Rpb25CdXR0b24gZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxhbnksIGFueT4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG5cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgbGV0IGNsYXNzZXMgPSB0aGlzLnByb3BzLmNsYXNzZXMgKyBcIiBzdmMtYWN0aW9uLWJ1dHRvblwiO1xuICAgIGlmICh0aGlzLnByb3BzLnNlbGVjdGVkKSB7XG4gICAgICBjbGFzc2VzICs9IFwiIHN2Yy1hY3Rpb24tYnV0dG9uLS1zZWxlY3RlZFwiO1xuICAgIH1cbiAgICBpZiAodGhpcy5wcm9wcy5kaXNhYmxlZCkge1xuICAgICAgY2xhc3NlcyArPSBcIiBzdmMtYWN0aW9uLWJ1dHRvbi0tZGlzYWJsZWRcIjtcbiAgICAgIHJldHVybiA8c3BhbiBjbGFzc05hbWU9e2NsYXNzZXN9Pnt0aGlzLnByb3BzLnRleHR9PC9zcGFuPjtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIHthdHRhY2hLZXkyY2xpY2soXG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2VzfVxuICAgICAgICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgdGhpcy5wcm9wcy5jbGljaygpO1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIHRpdGxlPXt0aGlzLnByb3BzLnRpdGxlfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt0aGlzLnByb3BzLnRleHR9XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICApfVxuICAgICAgPC8+XG4gICAgKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgSW1hZ2VJdGVtVmFsdWVXcmFwcGVyVmlld01vZGVsIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFF1ZXN0aW9uU2VsZWN0QmFzZSwgQmFzZSwgSW1hZ2VJdGVtVmFsdWUgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnksIFN1cnZleUVsZW1lbnRCYXNlLCBTdmdJY29uIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHtcbiAgYXR0YWNoS2V5MmNsaWNrLFxufSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5cbmludGVyZmFjZSBJbWFnZUl0ZW1WYWx1ZUFkb3JuZXJDb21wb25lbnRQcm9wcyB7XG4gIGVsZW1lbnQ6IEpTWC5FbGVtZW50O1xuICBjb21wb25lbnREYXRhOiBhbnk7XG4gIHF1ZXN0aW9uOiBRdWVzdGlvblNlbGVjdEJhc2U7XG4gIGl0ZW06IEltYWdlSXRlbVZhbHVlO1xufVxuXG5leHBvcnQgY2xhc3MgSW1hZ2VJdGVtVmFsdWVBZG9ybmVyQ29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8XG4gIEltYWdlSXRlbVZhbHVlQWRvcm5lckNvbXBvbmVudFByb3BzLFxuICBhbnlcbj4ge1xuICBtb2RlbDogSW1hZ2VJdGVtVmFsdWVXcmFwcGVyVmlld01vZGVsO1xuICBwcml2YXRlIHJvb3RSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IEltYWdlSXRlbVZhbHVlQWRvcm5lckNvbXBvbmVudFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMubW9kZWwgPSBuZXcgSW1hZ2VJdGVtVmFsdWVXcmFwcGVyVmlld01vZGVsKFxuICAgICAgdGhpcy5wcm9wcy5jb21wb25lbnREYXRhLmNyZWF0b3IsXG4gICAgICB0aGlzLnByb3BzLnF1ZXN0aW9uLFxuICAgICAgdGhpcy5wcm9wcy5pdGVtLFxuICAgICAgbnVsbCxcbiAgICAgIG51bGxcbiAgICApO1xuICAgIHRoaXMucm9vdFJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIHRoaXMubW9kZWwuaXRlbXNSb290ID0gdGhpcy5yb290UmVmLmN1cnJlbnQ7XG4gIH1cblxuICBwcmV2ZW50RHJhZ0hhbmRsZXIgPSAoZSkgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgfVxuXG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgLy8gaWYgKHRoaXMubW9kZWwucXVlc3Rpb24uaXNEcmFnZ2VkKSB7XG4gICAgLy8gICByZXR1cm4gbnVsbDtcbiAgICAvLyB9XG4gICAgdGhpcy5tb2RlbC5pdGVtID0gdGhpcy5wcm9wcy5pdGVtO1xuICAgIGNvbnN0IGlzTmV3ID0gIXRoaXMucHJvcHMucXVlc3Rpb24uaXNJdGVtSW5MaXN0KHRoaXMucHJvcHMuaXRlbSk7XG4gICAgY29uc3QgaW1hZ2VXaWR0aCA9ICh0aGlzLnByb3BzLnF1ZXN0aW9uIGFzIGFueSkuaW1hZ2VXaWR0aDtcbiAgICBjb25zdCBpbWFnZUhlaWdodCA9ICh0aGlzLnByb3BzLnF1ZXN0aW9uIGFzIGFueSkuaW1hZ2VIZWlnaHQ7XG5cbiAgICBsZXQgY29udGVudCA9IG51bGw7XG4gICAgaWYgKGlzTmV3KSB7XG4gICAgICBjb250ZW50ID0gKDw+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWltYWdlLWl0ZW0tdmFsdWVfX2l0ZW1cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNkLWltYWdlcGlja2VyX19pdGVtIHNkLWltYWdlcGlja2VyX19pdGVtLS1pbmxpbmVcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJzZC1pbWFnZXBpY2tlcl9fbGFiZWxcIj5cbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyB3aWR0aDogaW1hZ2VXaWR0aCA/IGltYWdlV2lkdGggKyBcInB4XCIgOiB1bmRlZmluZWQsIGhlaWdodDogaW1hZ2VIZWlnaHQgPyBpbWFnZUhlaWdodCArIFwicHhcIiA6IHVuZGVmaW5lZCB9fSBjbGFzc05hbWU9XCJzZC1pbWFnZXBpY2tlcl9faW1hZ2VcIj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1pbWFnZS1pdGVtLXZhbHVlLWNvbnRyb2xzXCI+XG4gICAgICAgICAge3RoaXMubW9kZWwuYWxsb3dBZGQgPyBhdHRhY2hLZXkyY2xpY2soPHNwYW4gY2xhc3NOYW1lPVwic3ZjLWltYWdlLWl0ZW0tdmFsdWUtY29udHJvbHNfX2J1dHRvbiBzdmMtaW1hZ2UtaXRlbS12YWx1ZS1jb250cm9sc19fYWRkXCIgb25DbGljaz17KCkgPT4gdGhpcy5tb2RlbC5jaG9vc2VOZXdGaWxlKHRoaXMubW9kZWwpfT5cbiAgICAgICAgICAgIDxTdmdJY29uIHNpemU9ezI0fSBpY29uTmFtZT17XCJpY29uLWFkZC1sZ1wifT48L1N2Z0ljb24+XG4gICAgICAgICAgPC9zcGFuPikgOiBudWxsfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvPik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRlbnQgPSAoXG4gICAgICAgIDw+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e1wic3ZjLWltYWdlLWl0ZW0tdmFsdWVfX2l0ZW1cIn0+XG4gICAgICAgICAgICB7dGhpcy5wcm9wcy5lbGVtZW50fVxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLWltYWdlLWl0ZW0tdmFsdWUtY29udHJvbHNfX2J1dHRvbiBzdmMtaW1hZ2UtaXRlbS12YWx1ZS1jb250cm9sc19fZHJhZy1hcmVhLWluZGljYXRvclwiXG4gICAgICAgICAgICBvblBvaW50ZXJEb3duPXsoZXZlbnQ6IGFueSkgPT4gdGhpcy5tb2RlbC5vblBvaW50ZXJEb3duKGV2ZW50KX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8U3ZnSWNvbiBzaXplPXsyNH0gaWNvbk5hbWU9e1wiaWNvbi1kcmFnLWFyZWEtaW5kaWNhdG9yXCJ9PjwvU3ZnSWNvbj5cbiAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1pbWFnZS1pdGVtLXZhbHVlLWNvbnRyb2xzXCI+XG4gICAgICAgICAgICB7dGhpcy5tb2RlbC5hbGxvd1JlbW92ZSA/IGF0dGFjaEtleTJjbGljayg8c3BhblxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJzdmMtaW1hZ2UtaXRlbS12YWx1ZS1jb250cm9sc19fYnV0dG9uIHN2Yy1pbWFnZS1pdGVtLXZhbHVlLWNvbnRyb2xzX19jaG9vc2UtZmlsZVwiXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHRoaXMubW9kZWwuY2hvb3NlRmlsZSh0aGlzLm1vZGVsKX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPFN2Z0ljb24gc2l6ZT17MjR9IGljb25OYW1lPXtcImljb24tZmlsZVwifT48L1N2Z0ljb24+XG4gICAgICAgICAgICA8L3NwYW4+KSA6IG51bGx9XG4gICAgICAgICAgICB7dGhpcy5tb2RlbC5hbGxvd1JlbW92ZSA/IGF0dGFjaEtleTJjbGljayg8c3BhblxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJzdmMtaW1hZ2UtaXRlbS12YWx1ZS1jb250cm9sc19fYnV0dG9uIHN2Yy1pbWFnZS1pdGVtLXZhbHVlLWNvbnRyb2xzX19yZW1vdmVcIlxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB0aGlzLm1vZGVsLnJlbW92ZSh0aGlzLm1vZGVsKX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPFN2Z0ljb24gc2l6ZT17MjR9IGljb25OYW1lPXtcImljb24tZGVsZXRlXCJ9PjwvU3ZnSWNvbj5cbiAgICAgICAgICAgIDwvc3Bhbj4pIDogbnVsbH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC8+XG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIHJlZj17dGhpcy5yb290UmVmfVxuICAgICAgICBjbGFzc05hbWU9e1xuICAgICAgICAgIFwic3ZjLWltYWdlLWl0ZW0tdmFsdWUtd3JhcHBlclwiICtcbiAgICAgICAgICAoaXNOZXcgPyBcIiBzdmMtaW1hZ2UtaXRlbS12YWx1ZS0tbmV3XCIgOiBcIlwiKSArXG4gICAgICAgICAgKHRoaXMubW9kZWwuaXNEcmFnRHJvcEdob3N0ID8gXCIgc3ZjLWltYWdlLWl0ZW0tdmFsdWUtd3JhcHBlci0tZ2hvc3RcIiA6IFwiXCIpXG4gICAgICAgIH1cbiAgICAgICAga2V5PXt0aGlzLnByb3BzLmVsZW1lbnQua2V5fVxuICAgICAgICBkYXRhLXN2LWRyb3AtdGFyZ2V0LWl0ZW0tdmFsdWU9e1xuICAgICAgICAgIHRoaXMubW9kZWwuaXNEcmFnZ2FibGUgPyB0aGlzLm1vZGVsLml0ZW0udmFsdWUgOiB1bmRlZmluZWRcbiAgICAgICAgfVxuICAgICAgICBvblBvaW50ZXJEb3duPXsoZXZlbnQ6IGFueSkgPT4gdGhpcy5tb2RlbC5vblBvaW50ZXJEb3duKGV2ZW50KX1cbiAgICAgICAgb25EcmFnU3RhcnQ9e3RoaXMucHJldmVudERyYWdIYW5kbGVyfVxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17XCJzdmMtaW1hZ2UtaXRlbS12YWx1ZS13cmFwcGVyX19naG9zdFwifT48L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e1wic3ZjLWltYWdlLWl0ZW0tdmFsdWUtd3JhcHBlcl9fY29udGVudFwifT5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgICB0YWJJbmRleD17LTF9XG4gICAgICAgICAgICBhY2NlcHQ9XCJpbWFnZS8qXCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInN2Yy1jaG9vc2UtZmlsZS1pbnB1dFwiXG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICBwb3NpdGlvbjogXCJhYnNvbHV0ZVwiLFxuICAgICAgICAgICAgICBvcGFjaXR5OiAwLFxuICAgICAgICAgICAgICB3aWR0aDogXCIxcHhcIixcbiAgICAgICAgICAgICAgaGVpZ2h0OiBcIjFweFwiLFxuICAgICAgICAgICAgICBvdmVyZmxvdzogXCJoaWRkZW5cIlxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAvPlxuICAgICAgICAgIHtjb250ZW50fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLWltYWdlLWl0ZW0tdmFsdWVcIixcbiAgKHByb3BzOiBJbWFnZUl0ZW1WYWx1ZUFkb3JuZXJDb21wb25lbnRQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KEltYWdlSXRlbVZhbHVlQWRvcm5lckNvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IHsgZ2V0TG9jU3RyaW5nLCBJdGVtVmFsdWVXcmFwcGVyVmlld01vZGVsIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0RHJhZ0V2ZW50IH0gZnJvbSBcInNyYy9ldmVudHNcIjtcbmltcG9ydCB7IFF1ZXN0aW9uU2VsZWN0QmFzZSwgQmFzZSwgSXRlbVZhbHVlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQge1xuICBhdHRhY2hLZXkyY2xpY2ssXG4gIFJlYWN0RWxlbWVudEZhY3RvcnksXG4gIFN1cnZleUVsZW1lbnRCYXNlLFxuICBTdmdJY29uXG59IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcblxuaW50ZXJmYWNlIEl0ZW1WYWx1ZUFkb3JuZXJDb21wb25lbnRQcm9wcyB7XG4gIGVsZW1lbnQ6IEpTWC5FbGVtZW50O1xuICBjb21wb25lbnREYXRhOiBhbnk7XG4gIHF1ZXN0aW9uOiBRdWVzdGlvblNlbGVjdEJhc2U7XG4gIGl0ZW06IEl0ZW1WYWx1ZTtcbn1cblxuZXhwb3J0IGNsYXNzIEl0ZW1WYWx1ZUFkb3JuZXJDb21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxcbiAgSXRlbVZhbHVlQWRvcm5lckNvbXBvbmVudFByb3BzLFxuICBhbnlcbj4ge1xuICBtb2RlbDogSXRlbVZhbHVlV3JhcHBlclZpZXdNb2RlbDtcbiAgY29uc3RydWN0b3IocHJvcHM6IEl0ZW1WYWx1ZUFkb3JuZXJDb21wb25lbnRQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLm1vZGVsID0gbmV3IEl0ZW1WYWx1ZVdyYXBwZXJWaWV3TW9kZWwoXG4gICAgICB0aGlzLnByb3BzLmNvbXBvbmVudERhdGEuY3JlYXRvcixcbiAgICAgIHRoaXMucHJvcHMucXVlc3Rpb24sXG4gICAgICB0aGlzLnByb3BzLml0ZW1cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cblxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIC8vIGlmICh0aGlzLm1vZGVsLnF1ZXN0aW9uLmlzRHJhZ2dlZCkge1xuICAgIC8vICAgcmV0dXJuIG51bGw7XG4gICAgLy8gfVxuICAgIHRoaXMubW9kZWwuaXRlbSA9IHRoaXMucHJvcHMuaXRlbTtcbiAgICBjb25zdCBidXR0b24gPSB0aGlzLm1vZGVsLmFsbG93QWRkID8gKFxuICAgICAgYXR0YWNoS2V5MmNsaWNrKDxzcGFuXG4gICAgICAgIGNsYXNzTmFtZT1cInN2Yy1pdGVtLXZhbHVlLWNvbnRyb2xzX19idXR0b24gc3ZjLWl0ZW0tdmFsdWUtY29udHJvbHNfX2FkZFwiXG4gICAgICAgIGFyaWEtbGFiZWw9e3RoaXMubW9kZWwudG9vbHRpcH1cbiAgICAgICAgb25DbGljaz17KCkgPT4gdGhpcy5tb2RlbC5hZGQodGhpcy5tb2RlbCl9XG4gICAgICA+XG4gICAgICAgIDxTdmdJY29uIHNpemU9ezE2fSBpY29uTmFtZT17XCJpY29uLWFkZF8xNngxNlwifT48L1N2Z0ljb24+XG4gICAgICA8L3NwYW4+KVxuICAgICkgOiAoXG4gICAgICA8PlxuICAgICAgICB7XCIgXCJ9XG4gICAgICAgIHt0aGlzLm1vZGVsLmlzRHJhZ2dhYmxlID8gKFxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJzdmMtaXRlbS12YWx1ZS1jb250cm9sc19fYnV0dG9uIHN2Yy1pdGVtLXZhbHVlLWNvbnRyb2xzX19kcmFnXCJcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9e3RoaXMubW9kZWwuZHJhZ1Rvb2x0aXB9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFN2Z0ljb24gY2xhc3NOYW1lPVwic3ZjLWl0ZW0tdmFsdWUtY29udHJvbHNfX2RyYWctaWNvblwiIHNpemU9ezI0fSBpY29uTmFtZT17XCJpY29uLWRyYWctYXJlYS1pbmRpY2F0b3JcIn0+PC9TdmdJY29uPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgKSA6IG51bGx9XG4gICAgICAgIHt0aGlzLm1vZGVsLmFsbG93UmVtb3ZlID8gYXR0YWNoS2V5MmNsaWNrKDxzcGFuXG4gICAgICAgICAgY2xhc3NOYW1lPVwic3ZjLWl0ZW0tdmFsdWUtY29udHJvbHNfX2J1dHRvbiBzdmMtaXRlbS12YWx1ZS1jb250cm9sc19fcmVtb3ZlXCJcbiAgICAgICAgICBhcmlhLWxhYmVsPXt0aGlzLm1vZGVsLnRvb2x0aXB9XG4gICAgICAgICAgb25DbGljaz17KCkgPT4gdGhpcy5tb2RlbC5yZW1vdmUodGhpcy5tb2RlbCl9XG4gICAgICAgID5cbiAgICAgICAgICA8U3ZnSWNvbiBzaXplPXsxNn0gaWNvbk5hbWU9e1wiaWNvbi1yZW1vdmVfMTZ4MTZcIn0+PC9TdmdJY29uPlxuICAgICAgICA8L3NwYW4+KSA6IG51bGx9XG4gICAgICA8Lz5cbiAgICApO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtcbiAgICAgICAgICBcInN2Yy1pdGVtLXZhbHVlLXdyYXBwZXJcIiArXG4gICAgICAgICAgKHRoaXMubW9kZWwuYWxsb3dBZGQgPyBcIiBzdmMtaXRlbS12YWx1ZS0tbmV3XCIgOiBcIlwiKSArXG4gICAgICAgICAgKHRoaXMubW9kZWwuaXNEcmFnZ2luZyA/IFwiIHN2Yy1pdGVtLXZhbHVlLS1kcmFnZ2luZ1wiIDogXCJcIikgK1xuICAgICAgICAgICh0aGlzLm1vZGVsLmlzRHJhZ0Ryb3BHaG9zdCA/IFwiIHN2Yy1pdGVtLXZhbHVlLS1naG9zdFwiIDogXCJcIikgK1xuICAgICAgICAgICh0aGlzLm1vZGVsLmlzRHJhZ0Ryb3BNb3ZlRG93biA/IFwiIHN2Yy1pdGVtLXZhbHVlLS1tb3ZlZG93blwiIDogXCJcIikgK1xuICAgICAgICAgICh0aGlzLm1vZGVsLmlzRHJhZ0Ryb3BNb3ZlVXAgPyBcIiBzdmMtaXRlbS12YWx1ZS0tbW92ZXVwXCIgOiBcIlwiKVxuICAgICAgICB9XG4gICAgICAgIGtleT17dGhpcy5wcm9wcy5lbGVtZW50LmtleX1cbiAgICAgICAgZGF0YS1zdi1kcm9wLXRhcmdldC1pdGVtLXZhbHVlPXtcbiAgICAgICAgICB0aGlzLm1vZGVsLmlzRHJhZ2dhYmxlID8gdGhpcy5tb2RlbC5pdGVtLnZhbHVlIDogdW5kZWZpbmVkXG4gICAgICAgIH1cbiAgICAgICAgb25Qb2ludGVyRG93bj17KGV2ZW50OiBhbnkpID0+IHRoaXMubW9kZWwub25Qb2ludGVyRG93bihldmVudCl9XG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWl0ZW0tdmFsdWVfX2dob3N0XCI+PC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtaXRlbS12YWx1ZS1jb250cm9sc1wiPntidXR0b259PC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e1wic3ZjLWl0ZW0tdmFsdWVfX2l0ZW1cIn0gb25DbGljaz17KGV2ZW50KSA9PiB0aGlzLm1vZGVsLnNlbGVjdCh0aGlzLm1vZGVsLCBldmVudCl9Pnt0aGlzLnByb3BzLmVsZW1lbnR9PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy1pdGVtLXZhbHVlXCIsXG4gIChwcm9wczogSXRlbVZhbHVlQWRvcm5lckNvbXBvbmVudFByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoSXRlbVZhbHVlQWRvcm5lckNvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQmFzZSwgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnksIFN1cnZleUVsZW1lbnRCYXNlLCBMb2dvSW1hZ2UsIFN2Z0ljb24sIGF0dGFjaEtleTJjbGljayB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IENyZWF0b3JCYXNlLCBMb2dvSW1hZ2VWaWV3TW9kZWwgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuXG5pbnRlcmZhY2UgSUxvZ29JbWFnZUNvbXBvbmVudFByb3BzIHtcbiAgZGF0YTogQ3JlYXRvckJhc2U7XG59XG5cbmV4cG9ydCBjbGFzcyBMb2dvSW1hZ2VDb21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxJTG9nb0ltYWdlQ29tcG9uZW50UHJvcHMsIGFueT4ge1xuICBwcml2YXRlIG1vZGVsOiBMb2dvSW1hZ2VWaWV3TW9kZWw7XG4gIHByaXZhdGUgcm9vdFJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgY29uc3RydWN0b3IocHJvcHM6IElMb2dvSW1hZ2VDb21wb25lbnRQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLm1vZGVsID0gbmV3IExvZ29JbWFnZVZpZXdNb2RlbChwcm9wcy5kYXRhLCBudWxsKTtcbiAgICB0aGlzLnJvb3RSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgdGhpcy5tb2RlbC5yb290ID0gdGhpcy5yb290UmVmLmN1cnJlbnQ7XG4gIH1cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBsZXQgY29udGVudDogSlNYLkVsZW1lbnQgPSBudWxsO1xuICAgIGlmICh0aGlzLm1vZGVsLnN1cnZleS5sb2NMb2dvLnJlbmRlcmVkSHRtbCkge1xuICAgICAgY29udGVudCA9IDw+XG4gICAgICAgIDxMb2dvSW1hZ2UgZGF0YT17dGhpcy5wcm9wcy5kYXRhLnN1cnZleX0+PC9Mb2dvSW1hZ2U+XG4gICAgICAgIHt0aGlzLm1vZGVsLmFsbG93RWRpdCA/IDxkaXYgY2xhc3NOYW1lPVwic3ZjLWltYWdlLWl0ZW0tdmFsdWUtY29udHJvbHNcIj5cbiAgICAgICAgICB7YXR0YWNoS2V5MmNsaWNrKDxTdmdJY29uIGNsYXNzTmFtZT1cInN2Yy1pbWFnZS1pdGVtLXZhbHVlLWNvbnRyb2xzX19idXR0b24gc3ZjLWltYWdlLWl0ZW0tdmFsdWUtY29udHJvbHNfX2Nob29zZS1maWxlXCIgc2l6ZT17MjR9IGljb25OYW1lPXtcImljb24tZmlsZVwifSBvbkNsaWNrPXsoKSA9PiB0aGlzLm1vZGVsLmNob29zZUZpbGUodGhpcy5tb2RlbCl9PjwvU3ZnSWNvbj4pfVxuICAgICAgICAgIHthdHRhY2hLZXkyY2xpY2soPFN2Z0ljb24gY2xhc3NOYW1lPVwic3ZjLWltYWdlLWl0ZW0tdmFsdWUtY29udHJvbHNfX2J1dHRvbiBzdmMtaW1hZ2UtaXRlbS12YWx1ZS1jb250cm9sc19fcmVtb3ZlXCIgc2l6ZT17MjR9IGljb25OYW1lPXtcImljb24tZGVsZXRlXCJ9IG9uQ2xpY2s9eygpID0+IHRoaXMubW9kZWwucmVtb3ZlKHRoaXMubW9kZWwpfT48L1N2Z0ljb24+KX1cbiAgICAgICAgPC9kaXY+IDogbnVsbH1cbiAgICAgIDwvPjtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjb250ZW50ID0gdGhpcy5tb2RlbC5hbGxvd0VkaXQgPyBhdHRhY2hLZXkyY2xpY2soPGRpdiBjbGFzc05hbWU9XCJzdmMtbG9nby1pbWFnZS1wbGFjZWhvbGRlclwiIG9uQ2xpY2s9eygpID0+IHRoaXMubW9kZWwuY2hvb3NlRmlsZSh0aGlzLm1vZGVsKX0+e3RoaXMubW9kZWwuY2hvb3NlTG9nb1BsYWNlaG9sZGVyfTwvZGl2PikgOiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiByZWY9e3RoaXMucm9vdFJlZn0gY2xhc3NOYW1lPVwic3ZjLWxvZ28taW1hZ2VcIj5cbiAgICAgICAgPGlucHV0IGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHR5cGU9XCJmaWxlXCIgdGFiSW5kZXg9ey0xfSBhY2NlcHQ9XCJpbWFnZS8qXCIgY2xhc3NOYW1lPVwic3ZjLWNob29zZS1maWxlLWlucHV0XCIgLz5cbiAgICAgICAge2NvbnRlbnR9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3ZjLWxvZ28taW1hZ2VcIixcbiAgKHByb3BzOiBJTG9nb0ltYWdlQ29tcG9uZW50UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChMb2dvSW1hZ2VDb21wb25lbnQsIHByb3BzKTtcbiAgfVxuKTsiLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvblNlbGVjdEJhc2UsIEJhc2UsIEl0ZW1WYWx1ZSwgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IE1hdHJpeENlbGxXcmFwcGVyVmlld01vZGVsLCB0b2dnbGVIb3ZlcmVkIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCB7XG4gIGF0dGFjaEtleTJjbGljayxcbiAgUmVhY3RFbGVtZW50RmFjdG9yeSxcbiAgU3VydmV5RWxlbWVudEJhc2UsXG4gIFN2Z0ljb25cbn0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuXG5pbnRlcmZhY2UgTWF0cml4Q2VsbEFkb3JuZXJDb21wb25lbnRQcm9wcyB7XG4gIGVsZW1lbnQ6IEpTWC5FbGVtZW50O1xuICBjb21wb25lbnREYXRhOiBhbnk7XG4gIHF1ZXN0aW9uOiBRdWVzdGlvblNlbGVjdEJhc2U7XG4gIGNlbGw6IGFueTtcbn1cblxuZXhwb3J0IGNsYXNzIE1hdHJpeENlbGxBZG9ybmVyQ29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8XG4gIE1hdHJpeENlbGxBZG9ybmVyQ29tcG9uZW50UHJvcHMsXG4gIGFueVxuPiB7XG4gIG1vZGVsOiBNYXRyaXhDZWxsV3JhcHBlclZpZXdNb2RlbDtcbiAgY29uc3RydWN0b3IocHJvcHM6IE1hdHJpeENlbGxBZG9ybmVyQ29tcG9uZW50UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMucHJvcHMuY29tcG9uZW50RGF0YTtcbiAgICB0aGlzLm1vZGVsID0gbmV3IE1hdHJpeENlbGxXcmFwcGVyVmlld01vZGVsKFxuICAgICAgZGF0YS5jcmVhdG9yLFxuICAgICAgZGF0YS5lbGVtZW50LFxuICAgICAgZGF0YS5xdWVzdGlvbixcbiAgICAgIGRhdGEucm93LFxuICAgICAgZGF0YS5jb2x1bW4sXG4gICAgKTtcbiAgfVxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBhbnksIHByZXZTdGF0ZTogYW55KSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKTtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5wcm9wcy5jb21wb25lbnREYXRhO1xuICAgIHRoaXMubW9kZWwudGVtcGxhdGVEYXRhID0gZGF0YS5lbGVtZW50O1xuICAgIHRoaXMubW9kZWwucm93ID0gZGF0YS5yb3c7XG4gICAgdGhpcy5tb2RlbC5jb2x1bW4gPSBkYXRhLmNvbHVtbjtcbiAgICB0aGlzLm1vZGVsLnF1ZXN0aW9uID0gZGF0YS5xdWVzdGlvbjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG5cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBsZXQgY29udHJvbHMgPSBudWxsO1xuICAgIGlmICghIXRoaXMubW9kZWwucXVlc3Rpb24pIHtcbiAgICAgIGNvbnRyb2xzID0gPGRpdiBjbGFzc05hbWU9XCJzdmMtbWF0cml4LWNlbGxfX3F1ZXN0aW9uLWNvbnRyb2xzXCI+XG4gICAgICAgIHthdHRhY2hLZXkyY2xpY2soPHNwYW4gY2xhc3NOYW1lPVwic3ZjLW1hdHJpeC1jZWxsX19xdWVzdGlvbi1jb250cm9scy1idXR0b25cIiBvbkNsaWNrPXsoKSA9PiB0aGlzLm1vZGVsLmVkaXRRdWVzdGlvbih0aGlzLm1vZGVsKX0+XG4gICAgICAgICAgPFN2Z0ljb24gc2l6ZT17MjR9IGljb25OYW1lPXtcImljb24tZWRpdFwifT48L1N2Z0ljb24+XG4gICAgICAgIDwvc3Bhbj4pfVxuICAgICAgPC9kaXY+O1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17XCJzdmMtbWF0cml4LWNlbGxcIn1cbiAgICAgICAga2V5PXt0aGlzLnByb3BzLmVsZW1lbnQua2V5fVxuICAgICAgICBvbkNsaWNrPXsoZTogYW55KSA9PiAhdGhpcy5wcm9wcy5xdWVzdGlvbiAmJiB0aGlzLm1vZGVsLnNlbGVjdENvbnRleHQodGhpcy5tb2RlbCwgZSl9XG4gICAgICAgIG9uTW91c2VPdXQ9e2UgPT4gdGhpcy5tb2RlbC5ob3ZlcihlLm5hdGl2ZUV2ZW50LCBlLmN1cnJlbnRUYXJnZXQpfVxuICAgICAgICBvbk1vdXNlT3Zlcj17ZSA9PiB0aGlzLm1vZGVsLmhvdmVyKGUubmF0aXZlRXZlbnQsIGUuY3VycmVudFRhcmdldCl9XG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtcInN2Yy1tYXRyaXgtY2VsbC0tc2VsZWN0ZWRcIiArICh0aGlzLm1vZGVsLmlzU2VsZWN0ZWQgPyBcIiBzdmMtdmlzaWJsZVwiIDogXCJcIil9PjwvZGl2PlxuXG4gICAgICAgIHt0aGlzLnByb3BzLmVsZW1lbnR9XG5cbiAgICAgICAge2NvbnRyb2xzfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtbWF0cml4LWNlbGxcIixcbiAgKHByb3BzOiBNYXRyaXhDZWxsQWRvcm5lckNvbXBvbmVudFByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTWF0cml4Q2VsbEFkb3JuZXJDb21wb25lbnQsIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCB7IFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5LCBTdXJ2ZXlFbGVtZW50QmFzZSB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleU5hdmlnYXRpb24gZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxhbnksIGFueT4ge1xuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICB0aGlzLnNldEhhbmRsZXIoKTtcbiAgfVxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBhbnksIHByZXZTdGF0ZTogYW55KSB7XG4gICAgdGhpcy5zZXRIYW5kbGVyKCk7XG4gIH1cbiAgcHJpdmF0ZSBzZXRIYW5kbGVyKCkge1xuICAgIGlmIChcbiAgICAgICF0aGlzLnN1cnZleSB8fFxuICAgICAgICB0aGlzLnN1cnZleS5vblByb3BlcnR5Q2hhbmdlZC5oYXNGdW5jKHRoaXMub25Qcm9wQ2hhbmdlZEhhbmRsZXIpXG4gICAgKVxuICAgICAgcmV0dXJuO1xuICAgIHRoaXMuc3VydmV5Lm9uUHJvcGVydHlDaGFuZ2VkLmFkZCh0aGlzLm9uUHJvcENoYW5nZWRIYW5kbGVyKTtcbiAgfVxuICAgIHByaXZhdGUgb25Qcm9wQ2hhbmdlZEhhbmRsZXIgPSAoc2VuZGVyOiBhbnksIG9wdGlvbnM6IGFueSk6IGFueSA9PiB7XG4gICAgICBpZiAodGhpcy5pc1JlbmRlcmluZykgcmV0dXJuO1xuICAgICAgY29uc3QgcmVhY3RpdmVQcm9wcyA9IFtcbiAgICAgICAgXCJzaG93UHJvZ3Jlc3NCYXJcIixcbiAgICAgICAgXCJwcm9ncmVzc0JhclR5cGVcIixcbiAgICAgICAgXCJjdXJyZW50UGFnZVZhbHVlXCJcbiAgICAgIF07XG4gICAgICBpZiAocmVhY3RpdmVQcm9wcy5pbmRleE9mKG9wdGlvbnMubmFtZSkgPCAwKSByZXR1cm47XG4gICAgICB2YXIgdmFsOiBhbnkgPSB7fTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVhY3RpdmVQcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgcHJvcE5hbWUgPSByZWFjdGl2ZVByb3BzW2ldO1xuICAgICAgICB2YWxbcHJvcE5hbWVdID0gdGhpcy5zdXJ2ZXlbcHJvcE5hbWVdO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRTdGF0ZSh2YWwpO1xuICAgIH07XG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICBpZiAodGhpcy5zdXJ2ZXkpIHtcbiAgICAgICAgdGhpcy5zdXJ2ZXkub25Qcm9wZXJ0eUNoYW5nZWQucmVtb3ZlKHRoaXMub25Qcm9wQ2hhbmdlZEhhbmRsZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXQgc3VydmV5KCk6IFN1cnZleU1vZGVsIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BzLnN1cnZleTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIGdldCBsb2NhdGlvbigpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIHRoaXMucHJvcHMubG9jYXRpb247XG4gICAgfVxuICAgIHByb3RlY3RlZCBnZXQgaXNUb3AoKTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gdGhpcy5sb2NhdGlvbiA9PSBcInRvcFwiO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIHRoaXMuaXNUb3BcbiAgICAgICAgPyB0aGlzLnN1cnZleS5pc1Nob3dQcm9ncmVzc0Jhck9uVG9wXG4gICAgICAgIDogdGhpcy5zdXJ2ZXkuaXNTaG93UHJvZ3Jlc3NCYXJPbkJvdHRvbTtcbiAgICB9XG4gICAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgICByZXR1cm4gUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KFxuICAgICAgICBcInN2LXByb2dyZXNzLVwiICsgdGhpcy5zdXJ2ZXkucHJvZ3Jlc3NCYXJUeXBlLnRvTG93ZXJDYXNlKCksXG4gICAgICAgIHsgc3VydmV5OiB0aGlzLnN1cnZleSwgY3NzOiB0aGlzLnN1cnZleS5jc3MsIGlzVG9wOiB0aGlzLmlzVG9wIH1cbiAgICAgICk7XG4gICAgfVxufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQmFzZSwgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRCYXNlLCB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IENyZWF0b3JCYXNlLCBOb3RpZmllciB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTm90aWZpZXJDb21wb25lbnRQcm9wcyB7XG4gIGNyZWF0b3I6IENyZWF0b3JCYXNlO1xuICBub3RpZmllcjogTm90aWZpZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBOb3RpZmllckNvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPFxuICBOb3RpZmllckNvbXBvbmVudFByb3BzLFxuICBhbnlcbj4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogTm90aWZpZXJDb21wb25lbnRQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuXG4gIGdldCBub3RpZmllcigpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5ub3RpZmllcjtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubm90aWZpZXI7XG4gIH1cblxuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMubm90aWZpZXIuYWN0aXZlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLm5vdGlmaWVyLmNzc30+XG4gICAgICAgIDxzcGFuPnt0aGlzLm5vdGlmaWVyLm1lc3NhZ2V9PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgT2JqZWN0U2VsZWN0b3JNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5LCBTdXJ2ZXlFbGVtZW50QmFzZSwgTGlzdCB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcblxuaW50ZXJmYWNlIElPYmplY3RTZWxlY3RvckNvbXBvbmVudFByb3BzIHtcbiAgbW9kZWw6IE9iamVjdFNlbGVjdG9yTW9kZWw7XG59XG5jbGFzcyBPYmplY3RTZWxlY3RvckNvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPElPYmplY3RTZWxlY3RvckNvbXBvbmVudFByb3BzLCBhbnk+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IElPYmplY3RTZWxlY3RvckNvbXBvbmVudFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgbW9kZWwoKTogT2JqZWN0U2VsZWN0b3JNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMubW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMubW9kZWwuaXNWaXNpYmxlKSByZXR1cm4gbnVsbDtcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1vYmplY3Qtc2VsZWN0b3JcIj5cbiAgICAgICAgPExpc3QgbW9kZWw9e3RoaXMubW9kZWwubGlzdH0+PC9MaXN0PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2Yy1vYmplY3Qtc2VsZWN0b3JcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgIE9iamVjdFNlbGVjdG9yQ29tcG9uZW50LFxuICAgIHByb3BzIGFzIElPYmplY3RTZWxlY3RvckNvbXBvbmVudFByb3BzXG4gICk7XG59KTtcbiIsImltcG9ydCB7XG4gIEJhc2UsXG4gIElBY3Rpb24sXG4gIFN1cnZleU1vZGVsLFxuICBQYWdlTW9kZWwsXG4gIHVud3JhcFxufSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7XG4gIFN1cnZleUVsZW1lbnRCYXNlLFxuICBTdmdJY29uLFxuICBQb3B1cCxcbiAgYXR0YWNoS2V5MmNsaWNrXG59IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IENyZWF0b3JCYXNlLCBnZXRMb2NTdHJpbmcsIFBhZ2VOYXZpZ2F0b3JWaWV3TW9kZWwgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5pbnRlcmZhY2UgSVN1cnZleVBhZ2VOYXZpZ2F0b3JQcm9wcyB7XG4gIGNyZWF0b3I6IENyZWF0b3JCYXNlO1xuICBwYWdlczogQXJyYXk8UGFnZU1vZGVsPjtcbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleVBhZ2VOYXZpZ2F0b3IgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxcbiAgSVN1cnZleVBhZ2VOYXZpZ2F0b3JQcm9wcyxcbiAgYW55XG4+IHtcbiAgcHJpdmF0ZSBtb2RlbDogUGFnZU5hdmlnYXRvclZpZXdNb2RlbDtcbiAgcHJpdmF0ZSBjb250YWluZXJSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IElTdXJ2ZXlQYWdlTmF2aWdhdG9yUHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5jb250YWluZXJSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgICB0aGlzLm1vZGVsID0gbmV3IFBhZ2VOYXZpZ2F0b3JWaWV3TW9kZWwoXG4gICAgICBwcm9wcy5jcmVhdG9yLnBhZ2VzQ29udHJvbGxlclxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgY29uc3QgZWwgPSB0aGlzLmNvbnRhaW5lclJlZi5jdXJyZW50IGFzIEhUTUxEaXZFbGVtZW50O1xuICAgIGlmICghIWVsKSB7XG4gICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgIGVsLnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudC5vbnNjcm9sbCA9IGZ1bmN0aW9uICh0aGlzOiBHbG9iYWxFdmVudEhhbmRsZXJzLCBldjogRXZlbnQpIHtcbiAgICAgICAgcmV0dXJuIHNlbGYubW9kZWwub25Db250YWluZXJTY3JvbGwoZXYuY3VycmVudFRhcmdldCBhcyBIVE1MRGl2RWxlbWVudCk7XG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIGNvbnN0IGVsID0gdGhpcy5jb250YWluZXJSZWYuY3VycmVudDtcbiAgICBpZiAoISFlbCkge1xuICAgICAgZWwucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50Lm9uc2Nyb2xsID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB0aGlzLm1vZGVsLmRpc3Bvc2UoKTtcbiAgfVxuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBsZXQgY2xhc3NOYW1lID0gXCJzdmMtcGFnZS1uYXZpZ2F0b3JfX3NlbGVjdG9yXCI7XG4gICAgaWYgKHRoaXMubW9kZWwuaXNQb3B1cE9wZW5lZClcbiAgICAgIGNsYXNzTmFtZSArPSBcIiBzdmMtcGFnZS1uYXZpZ2F0b3JfX3NlbGVjdG9yLS1vcGVuZWRcIjtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtcGFnZS1uYXZpZ2F0b3JcIiByZWY9e3RoaXMuY29udGFpbmVyUmVmfSBzdHlsZT17eyBkaXNwbGF5OiB0aGlzLm1vZGVsLnZpc2libGUgPyBcImZsZXhcIiA6IFwibm9uZVwiIH19PlxuICAgICAgICB7YXR0YWNoS2V5MmNsaWNrKDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB0aGlzLm1vZGVsLnRvZ2dsZVBhZ2VTZWxlY3RvcigpfVxuICAgICAgICAgIHRpdGxlPXt0aGlzLm1vZGVsLnBhZ2VTZWxlY3RvckNhcHRpb259XG4gICAgICAgID5cbiAgICAgICAgICA8U3ZnSWNvblxuICAgICAgICAgICAgY2xhc3NOYW1lPVwic3ZjLXBhZ2UtbmF2aWdhdG9yX19uYXZpZ2F0b3ItaWNvblwiXG4gICAgICAgICAgICBpY29uTmFtZT17dGhpcy5tb2RlbC5pY29ufVxuICAgICAgICAgICAgc2l6ZT17MjR9XG4gICAgICAgICAgPjwvU3ZnSWNvbj5cblxuICAgICAgICAgIDxQb3B1cFxuICAgICAgICAgICAgbW9kZWw9e3RoaXMubW9kZWwucG9wdXBNb2RlbH1cbiAgICAgICAgICAvL2NsYXNzTmFtZT1cInN2Yy1wYWdlLW5hdmlnYXRvcl9fcG9wdXBcIlxuICAgICAgICAgID48L1BvcHVwPlxuICAgICAgICA8L2Rpdj4pfVxuICAgICAgICB7dGhpcy5tb2RlbC5pdGVtcy5tYXAoKGl0ZW0pID0+IChcbiAgICAgICAgICA8U3VydmV5UGFnZU5hdmlnYXRvckl0ZW1cbiAgICAgICAgICAgIGtleT17aXRlbS5pZH1cbiAgICAgICAgICAgIGl0ZW09e2l0ZW19XG4gICAgICAgICAgPjwvU3VydmV5UGFnZU5hdmlnYXRvckl0ZW0+XG4gICAgICAgICkpfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIFN1cnZleVBhZ2VOYXZpZ2F0b3JJdGVtIGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8YW55LCBhbnk+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IElBY3Rpb24pIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtIGFzIEJhc2U7XG4gIH1cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgaXRlbSA9IHRoaXMucHJvcHMuaXRlbTtcbiAgICBsZXQgY2xhc3NOYW1lOiBzdHJpbmcgPSBcInN2Yy1wYWdlLW5hdmlnYXRvci1pdGVtLWNvbnRlbnRcIjtcbiAgICBpZiAodW53cmFwKGl0ZW0uYWN0aXZlKSkge1xuICAgICAgY2xhc3NOYW1lICs9IFwiIHN2Yy1wYWdlLW5hdmlnYXRvci1pdGVtLS1zZWxlY3RlZFwiO1xuICAgIH1cbiAgICBpZiAodW53cmFwKGl0ZW0uZGlzYWJsZWQpKSB7XG4gICAgICBjbGFzc05hbWUgKz0gXCIgc3ZjLXBhZ2UtbmF2aWdhdG9yLWl0ZW0tLWRpc2FibGVkXCI7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1wYWdlLW5hdmlnYXRvci1pdGVtXCI+XG4gICAgICAgIHthdHRhY2hLZXkyY2xpY2soPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgICAgICBpdGVtLmFjdGlvbihpdGVtKTtcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgfX1cbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXBhZ2UtbmF2aWdhdG9yLWl0ZW1fX2RvdFwiIHRpdGxlPXtpdGVtLnRpdGxlfT48L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1wYWdlLW5hdmlnYXRvci1pdGVtX19iYW5uZXIgc3ZjLWl0ZW1fX2Jhbm5lclwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXRleHQgc3ZjLXRleHQtLXNtYWxsIHN2Yy10ZXh0LS1ib2xkXCI+e2l0ZW0udGl0bGV9PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXBhZ2UtbmF2aWdhdG9yLWl0ZW1fX2RvdFwiPjwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+KX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFByb3BlcnR5R3JpZFZpZXdNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgeyBCYXNlLCBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5LCBTdXJ2ZXlFbGVtZW50QmFzZSwgUmVhY3RRdWVzdGlvbkZhY3RvcnksIFN1cnZleVF1ZXN0aW9uQnV0dG9uR3JvdXAsIFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5cbmludGVyZmFjZSBJUHJvcGVydHlHcmlkQ29tcG9uZW50UHJvcHMge1xuICBtb2RlbDogUHJvcGVydHlHcmlkVmlld01vZGVsO1xufVxuXG5leHBvcnQgY2xhc3MgUHJvcGVydHlHcmlkQ29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8SVByb3BlcnR5R3JpZENvbXBvbmVudFByb3BzLCBhbnk+IHtcblxuICBnZXQgbW9kZWwoKTogUHJvcGVydHlHcmlkVmlld01vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5tb2RlbDtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cblxuICBwdWJsaWMgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5tb2RlbCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBzdXBlci5jYW5SZW5kZXIoKTtcbiAgfVxuXG4gIHJlbmRlckVsZW1lbnQoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTdXJ2ZXkgbW9kZWw9e3RoaXMubW9kZWwuc3VydmV5fT48L1N1cnZleT5cbiAgICApO1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJidXR0b25ncm91cFwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25CdXR0b25Hcm91cCwgcHJvcHMpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IFByb3BlcnR5R3JpZENvbXBvbmVudDtcblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdmMtcHJvcGVydHktZ3JpZFwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUHJvcGVydHlHcmlkQ29tcG9uZW50LCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCB7IEJhc2UsIFF1ZXN0aW9uLCBTdXJ2ZXlFcnJvciwgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IElTdXJ2ZXlDcmVhdG9yLCBSZWFjdEVsZW1lbnRGYWN0b3J5LCBSZWFjdFF1ZXN0aW9uRmFjdG9yeSwgU3VydmV5UXVlc3Rpb24gfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBDcmVhdG9yQmFzZSB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5cbmludGVyZmFjZSBJUXVlc3Rpb25FZGl0b3JDb250ZW50Q29tcG9uZW50UHJvcHMge1xuICBjcmVhdG9yOiBDcmVhdG9yQmFzZTtcbiAgc3VydmV5OiBTdXJ2ZXlNb2RlbDtcbn1cblxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uRWRpdG9yQ29udGVudENvbXBvbmVudCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxcbiAgSVF1ZXN0aW9uRWRpdG9yQ29udGVudENvbXBvbmVudFByb3BzLFxuICBhbnlcbj4gaW1wbGVtZW50cyBJU3VydmV5Q3JlYXRvciB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBJUXVlc3Rpb25FZGl0b3JDb250ZW50Q29tcG9uZW50UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgZ2V0IHN1cnZleSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5zdXJ2ZXk7XG4gIH1cbiAgcHVibGljIGNyZWF0ZVF1ZXN0aW9uRWxlbWVudChxdWVzdGlvbjogUXVlc3Rpb24pOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIFJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZVF1ZXN0aW9uKFxuICAgICAgIXF1ZXN0aW9uLmlzRGVmYXVsdFJlbmRlcmluZyB8fCBxdWVzdGlvbi5pc0RlZmF1bHRSZW5kZXJpbmcoKVxuICAgICAgICA/IHF1ZXN0aW9uLmdldFRlbXBsYXRlKClcbiAgICAgICAgOiBxdWVzdGlvbi5nZXRDb21wb25lbnROYW1lKCksXG4gICAgICB7XG4gICAgICAgIHF1ZXN0aW9uOiBxdWVzdGlvbixcbiAgICAgICAgaXNEaXNwbGF5TW9kZTogcXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5LFxuICAgICAgICBjcmVhdG9yOiB0aGlzLFxuICAgICAgfVxuICAgICk7XG4gIH1cbiAgcHVibGljIHF1ZXN0aW9uVGl0bGVMb2NhdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN1cnZleS5xdWVzdGlvblRpdGxlTG9jYXRpb247XG4gIH1cbiAgcHVibGljIHF1ZXN0aW9uRXJyb3JMb2NhdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN1cnZleS5xdWVzdGlvbkVycm9yTG9jYXRpb247XG4gIH1cbiAgcmVuZGVyRXJyb3Ioa2V5OiBzdHJpbmcsIGVycm9yOiBTdXJ2ZXlFcnJvciwgY3NzQ2xhc3NlczogYW55KTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBxdWVzdGlvbiA9IHRoaXMuc3VydmV5LmdldEFsbFF1ZXN0aW9ucygpWzBdO1xuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICA8U3VydmV5UXVlc3Rpb24gY3JlYXRvcj17dGhpc30gZWxlbWVudD17cXVlc3Rpb259PjwvU3VydmV5UXVlc3Rpb24+XG4gICAgICA8Lz5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy1xdWVzdGlvbi1lZGl0b3ItY29udGVudFwiLFxuICAocHJvcHM6IElRdWVzdGlvbkVkaXRvckNvbnRlbnRDb21wb25lbnRQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFF1ZXN0aW9uRWRpdG9yQ29udGVudENvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnksIFN1cnZleVBhZ2UsIElTdXJ2ZXlDcmVhdG9yLCBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgUXVlc3Rpb25FbWJlZGRlZFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleUVsZW1lbnRFbWJlZGRlZFN1cnZleSBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Uge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgZW1iZWRkZWRTdXJ2ZXkoKTogUXVlc3Rpb25FbWJlZGRlZFN1cnZleU1vZGVsIHtcbiAgICByZXR1cm4gKHRoaXMucHJvcHMuZWxlbWVudCB8fCB0aGlzLnByb3BzLnF1ZXN0aW9uKSBhcyBRdWVzdGlvbkVtYmVkZGVkU3VydmV5TW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBjcmVhdG9yKCk6IElTdXJ2ZXlDcmVhdG9yIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jcmVhdG9yO1xuICB9XG4gIHB1YmxpYyByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5lbWJlZGRlZFN1cnZleSkgcmV0dXJuIG51bGw7XG4gICAgY29uc3Qgc3VydmV5ID0gdGhpcy5lbWJlZGRlZFN1cnZleS5lbWJlZGRlZFN1cnZleTtcbiAgICBpZiAoIXN1cnZleSB8fCAhc3VydmV5LmN1cnJlbnRQYWdlKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gPFN1cnZleVBhZ2VcbiAgICAgIHN1cnZleT17c3VydmV5fVxuICAgICAgcGFnZT17c3VydmV5LmN1cnJlbnRQYWdlfVxuICAgICAgY3NzPXtzdXJ2ZXkuY3NzfVxuICAgICAgY3JlYXRvcj17dGhpcy5jcmVhdG9yfVxuICAgIC8+O1xuXG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImVtYmVkZGVkc3VydmV5XCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlFbGVtZW50RW1iZWRkZWRTdXJ2ZXksIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtcbiAgUmVhY3RRdWVzdGlvbkZhY3RvcnksXG4gIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Vcbn0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgZWRpdG9yTG9jYWxpemF0aW9uLCBRdWVzdGlvbkxpbmtWYWx1ZU1vZGVsIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCB7IEFjdGlvbkJ1dHRvbiB9IGZyb20gXCIuL0FjdGlvbkJ1dHRvblwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25MaW5rVmFsdWUgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uTGlua1ZhbHVlTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBRdWVzdGlvbkxpbmtWYWx1ZU1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJDbGVhcigpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3Qgc2hvd0NsZWFyID0gKHRoaXMucXVlc3Rpb25CYXNlIGFzIGFueSkuc2hvd0NsZWFyO1xuICAgIGlmICghdGhpcy5xdWVzdGlvbkJhc2UuaXNSZWFkT25seSAmJiBzaG93Q2xlYXIpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxBY3Rpb25CdXR0b25cbiAgICAgICAgICBjbGFzc2VzPXt0aGlzLnF1ZXN0aW9uLmxpbmtDbGVhckJ1dHRvbkNzc0NsYXNzZXN9XG4gICAgICAgICAgY2xpY2s9eygpID0+IHRoaXMucXVlc3Rpb24uZG9DbGVhckNsaWNrKCl9XG4gICAgICAgICAgc2VsZWN0ZWQ9e3RoaXMucXVlc3Rpb24uaXNTZWxlY3RlZH1cbiAgICAgICAgICB0ZXh0PXtlZGl0b3JMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwicGUuY2xlYXJcIil9XG4gICAgICAgID48L0FjdGlvbkJ1dHRvbj5cbiAgICAgICk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAgPEFjdGlvbkJ1dHRvblxuICAgICAgICAgIGNsYXNzZXM9e3RoaXMucXVlc3Rpb24ubGlua1NldEJ1dHRvbkNzc0NsYXNzZXN9XG4gICAgICAgICAgY2xpY2s9eygpID0+IHRoaXMucXVlc3Rpb24uZG9MaW5rQ2xpY2soKX1cbiAgICAgICAgICBzZWxlY3RlZD17dGhpcy5xdWVzdGlvbi5pc1NlbGVjdGVkfVxuICAgICAgICAgIGRpc2FibGVkPXt0aGlzLnF1ZXN0aW9uLmlzUmVhZE9ubHl9XG4gICAgICAgICAgdGV4dD17dGhpcy5xdWVzdGlvbi5saW5rVmFsdWVUZXh0fVxuICAgICAgICAgIHRpdGxlPXt0aGlzLnF1ZXN0aW9uLnRvb2x0aXB9XG4gICAgICAgID48L0FjdGlvbkJ1dHRvbj5cbiAgICAgICAge3RoaXMucmVuZGVyQ2xlYXIoKX1cbiAgICAgIDwvPlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImxpbmt2YWx1ZVwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25MaW5rVmFsdWUsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQmFzZSwgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleVJlc3VsdHNJdGVtTW9kZWwsIFN1cnZleVJlc3VsdHNNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgeyBhdHRhY2hLZXkyY2xpY2ssIFN1cnZleUVsZW1lbnRCYXNlLCBTdmdJY29uIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgQWN0aW9uQnV0dG9uIH0gZnJvbSBcIi4vQWN0aW9uQnV0dG9uXCI7XG5cbmludGVyZmFjZSBJU3VydmV5UmVzdWx0c1Byb3BzIHtcbiAgc3VydmV5OiBTdXJ2ZXlNb2RlbDtcbn1cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlSZXN1bHRzIGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8XG4gIElTdXJ2ZXlSZXN1bHRzUHJvcHMsXG4gIGFueVxuPiB7XG4gIG1vZGVsOiBTdXJ2ZXlSZXN1bHRzTW9kZWw7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBJU3VydmV5UmVzdWx0c1Byb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIGlmIChwcm9wcy5zdXJ2ZXkpIHtcbiAgICAgIHRoaXMubW9kZWwgPSBuZXcgU3VydmV5UmVzdWx0c01vZGVsKHByb3BzLnN1cnZleSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuXG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLm1vZGVsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZkLXRlc3QtcmVzdWx0c1wiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2ZC10ZXN0LXJlc3VsdHNfX2hlYWRlclwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZkLXRlc3QtcmVzdWx0c19faGVhZGVyLXRleHRcIj57dGhpcy5tb2RlbC5zdXJ2ZXlSZXN1bHRzVGV4dH08L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2ZC10ZXN0LXJlc3VsdHNfX2hlYWRlci10eXBlc1wiPlxuICAgICAgICAgICAgPEFjdGlvbkJ1dHRvblxuICAgICAgICAgICAgICBjbGljaz17KCkgPT4gdGhpcy5tb2RlbC5zZWxlY3RUYWJsZUNsaWNrKCl9XG4gICAgICAgICAgICAgIHRleHQ9e3RoaXMubW9kZWwuZ2V0TG9jU3RyaW5nKFwiZWQuc3VydmV5UmVzdWx0c1RhYmxlXCIpfVxuICAgICAgICAgICAgICBzZWxlY3RlZD17dGhpcy5tb2RlbC5pc1RhYmxlU2VsZWN0ZWR9XG4gICAgICAgICAgICAgIGRpc2FibGVkPXtmYWxzZX1cbiAgICAgICAgICAgID48L0FjdGlvbkJ1dHRvbj5cbiAgICAgICAgICAgIDxBY3Rpb25CdXR0b25cbiAgICAgICAgICAgICAgY2xpY2s9eygpID0+IHRoaXMubW9kZWwuc2VsZWN0SnNvbkNsaWNrKCl9XG4gICAgICAgICAgICAgIHRleHQ9e3RoaXMubW9kZWwuZ2V0TG9jU3RyaW5nKFwiZWQuc3VydmV5UmVzdWx0c0pzb25cIil9XG4gICAgICAgICAgICAgIHNlbGVjdGVkPXt0aGlzLm1vZGVsLmlzSnNvblNlbGVjdGVkfVxuICAgICAgICAgICAgICBkaXNhYmxlZD17ZmFsc2V9XG4gICAgICAgICAgICA+PC9BY3Rpb25CdXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7dGhpcy5yZW5kZXJSZXN1bHRBc1RleHQoKX1cbiAgICAgICAge3RoaXMucmVuZGVyUmVzdWx0QXNUYWJsZSgpfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICByZW5kZXJSZXN1bHRBc1RleHQoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICh0aGlzLm1vZGVsLnJlc3VsdFZpZXdUeXBlICE9PSBcInRleHRcIikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2ZC10ZXN0LXJlc3VsdHNfX3RleHQgc3ZkLWxpZ2h0LWJnLWNvbG9yXCI+XG4gICAgICAgIDxkaXY+e3RoaXMubW9kZWwucmVzdWx0VGV4dH08L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcmVuZGVyUmVzdWx0QXNUYWJsZSgpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKHRoaXMubW9kZWwucmVzdWx0Vmlld1R5cGUgIT09IFwidGFibGVcIikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2ZC10ZXN0LXJlc3VsdHNfX3RhYmxlIHN2ZC1saWdodC1iZy1jb2xvclwiPlxuICAgICAgICA8dGFibGU+XG4gICAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgPHRyIGNsYXNzTmFtZT1cInN2ZC1saWdodC1iYWNrZ3JvdW5kLWNvbG9yXCI+XG4gICAgICAgICAgICAgIDx0aCBjbGFzc05hbWU9XCJzdmQtZGFyay1ib3JkZXItY29sb3JcIj5cbiAgICAgICAgICAgICAgICB7dGhpcy5tb2RlbC5yZXN1bHRzVGl0bGV9XG4gICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgIDx0aCBjbGFzc05hbWU9XCJzdmQtZGFyay1ib3JkZXItY29sb3JcIj5cbiAgICAgICAgICAgICAgICB7dGhpcy5tb2RlbC5yZXN1bHRzRGlzcGxheVZhbHVlfVxuICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgIDx0Ym9keT57U3VydmV5UmVzdWx0cy5yZW5kZXJSb3dzKHRoaXMubW9kZWwucmVzdWx0RGF0YSl9PC90Ym9keT5cbiAgICAgICAgPC90YWJsZT5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgc3RhdGljIHJlbmRlclJvd3MoZGF0YTogQXJyYXk8YW55Pik6IEFycmF5PEpTWC5FbGVtZW50PiB7XG4gICAgcmV0dXJuIGRhdGEubWFwKChpdGVtKSA9PiA8U3VydmV5UmVzdWx0c0J5Um93IGtleT17aXRlbS5pZH0gcm93PXtpdGVtfSAvPik7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleVJlc3VsdHNCeVJvdyBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPGFueSwgYW55PiB7XG4gIHByaXZhdGUgZ2V0IHJvdygpOiBTdXJ2ZXlSZXN1bHRzSXRlbU1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5yb3c7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnJvdztcbiAgfVxuXG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIHthdHRhY2hLZXkyY2xpY2soPHRyIG9uQ2xpY2s9eygpID0+IHRoaXMucm93LnRvZ2dsZSgpfT5cbiAgICAgICAgICA8dGRcbiAgICAgICAgICAgIHN0eWxlPXt7IHBhZGRpbmdMZWZ0OiB0aGlzLnJvdy50ZXh0TWFyZ2luIH19XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJzdmQtZGFyay1ib3JkZXItY29sb3JcIj5cblxuICAgICAgICAgICAge3RoaXMucm93LmlzTm9kZSA/IChcbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICBzdHlsZT17eyBsZWZ0OiB0aGlzLnJvdy5tYXJrZXJNYXJnaW4gfX1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e1wic3ZkLXRlc3QtcmVzdWx0c19fbWFya2VyIFwiICsgKHRoaXMucm93LmNvbGxhcHNlZCA/IFwiXCIgOiBcInN2ZC10ZXN0LXJlc3VsdHNfX21hcmtlci0tZXhwYW5kZWRcIil9PlxuICAgICAgICAgICAgICAgIDxTdmdJY29uXG4gICAgICAgICAgICAgICAgICBpY29uTmFtZT17XCJpY29uLWV4cGFuZF8xNngxNlwifVxuICAgICAgICAgICAgICAgICAgc2l6ZT17MTZ9XG4gICAgICAgICAgICAgICAgPjwvU3ZnSWNvbj5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgKSA6IG51bGx9XG5cbiAgICAgICAgICAgIDxzcGFuPnt0aGlzLnJvdy50aXRsZX08L3NwYW4+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8dGQgY2xhc3NOYW1lPXt0aGlzLnJvdy5pc05vZGUgPyBcInN2ZC10ZXN0LXJlc3VsdHNfX25vZGUtdmFsdWVcIiA6IFwic3ZkLWRhcmstYm9yZGVyLWNvbG9yXCJ9PlxuICAgICAgICAgICAge3RoaXMucm93LmdldFN0cmluZyh0aGlzLnJvdy5kaXNwbGF5VmFsdWUpfVxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgIDwvdHI+KX1cbiAgICAgICAge3RoaXMucm93LmlzTm9kZSAmJiAhdGhpcy5yb3cuY29sbGFwc2VkID8gU3VydmV5UmVzdWx0cy5yZW5kZXJSb3dzKHRoaXMucm93LmRhdGEpIDogbnVsbH1cbiAgICAgIDwvPlxuICAgICk7XG4gIH1cbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFNpZGViYXJUYWJNb2RlbCwgU2lkZWJhck1vZGVsIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRCYXNlLCBTdXJ2ZXlBY3Rpb25CYXIsIFJlYWN0UXVlc3Rpb25GYWN0b3J5LCBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuXG5pbnRlcmZhY2UgSVNpZGViYXJDb21wb25lbnRQcm9wcyB7XG4gIG1vZGVsOiBTaWRlYmFyTW9kZWw7XG59XG5cbmV4cG9ydCBjbGFzcyBTaWRlYmFyQ29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8SVNpZGViYXJDb21wb25lbnRQcm9wcywgYW55PiB7XG4gIHByaXZhdGUgY29udGFpbmVyUmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuXG4gIGdldCBtb2RlbCgpOiBTaWRlYmFyTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLm1vZGVsO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IElTaWRlYmFyQ29tcG9uZW50UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5jb250YWluZXJSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIHRoaXMubW9kZWwuaW5pdFJlc2l6ZU1hbmFnZXIodGhpcy5jb250YWluZXJSZWYuY3VycmVudCk7XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICB0aGlzLm1vZGVsLnJlc2V0UmVzaXplTWFuYWdlcigpO1xuICB9XG4gIHB1YmxpYyBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLm1vZGVsKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHN1cGVyLmNhblJlbmRlcigpO1xuICB9XG4gIHJlbmRlckVsZW1lbnQoKSB7XG4gICAgY29uc3Qgc3R5bGUgPSB7IGRpc3BsYXk6ICF0aGlzLm1vZGVsLnZpc2libGUgPyBcIm5vbmVcIiA6IFwiXCIgfTtcbiAgICBjb25zdCBjbGFzc05hbWUgPSBcInN2Yy1zaWRlLWJhclwiICsgKHRoaXMubW9kZWwuZmx5b3V0UGFuZWxNb2RlID8gXCIgc3ZjLWZseW91dC1zaWRlLWJhclwiIDogXCJcIik7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLm1vZGVsLnRhYnMubWFwKChpdGVtKSA9PiA8U2lkZWJhclRhYiBpdGVtPXtpdGVtfSBrZXk9e2l0ZW0uaWR9IC8+KTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZX0gc3R5bGU9e3sgZGlzcGxheTogIXRoaXMubW9kZWwuaGFzVmlzaWJsZVRhYnMgPyBcIm5vbmVcIiA6IFwiXCIgfX0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXNpZGUtYmFyX19zaGFkb3dcIj48L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtZmxleC1jb2x1bW4gc3ZjLXNpZGUtYmFyX193cmFwcGVyXCI+XG4gICAgICAgICAgPGRpdiByZWY9e3RoaXMuY29udGFpbmVyUmVmfSBzdHlsZT17c3R5bGV9IGNsYXNzTmFtZT1cInN2Yy1zaWRlLWJhcl9fY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1zaWRlLWJhcl9fY29udGFpbmVyLWhlYWRlclwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1zaWRlLWJhcl9fY29udGFpbmVyLWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICA8U3VydmV5QWN0aW9uQmFyIG1vZGVsPXt0aGlzLm1vZGVsLnRvb2xiYXJ9PjwvU3VydmV5QWN0aW9uQmFyPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtc2lkZS1iYXJfX2NvbnRhaW5lci10aXRsZVwiPlxuICAgICAgICAgICAgICAgIHt0aGlzLm1vZGVsLmhlYWRlclRleHR9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1zaWRlLWJhcl9fY29udGFpbmVyLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAge2l0ZW1zfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1zaWRlLWJhcl9fY29udGFpbmVyLWNsb3NlXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2QtYnRuIHNkLWJ0bi0tYWN0aW9uIHN2Yy1zaWRlLWJhcl9fY29udGFpbmVyLWNsb3NlLWJ1dHRvblwiIG9uQ2xpY2s9eygpID0+IHRoaXMubW9kZWwuY29sbGFwc2VTaWRlYmFyKCl9PiB7dGhpcy5tb2RlbC5jbG9zZVRleHR9IDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5jbGFzcyBTaWRlYmFyVGFiIGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8YW55LCBhbnk+IHtcbiAgcHJpdmF0ZSBnZXQgaXRlbSgpOiBTaWRlYmFyVGFiTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW07XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLml0ZW07XG4gIH1cblxuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMuaXRlbS52aXNpYmxlKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IGNvbXBvbmVudCA9IFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudCh0aGlzLml0ZW0uY29tcG9uZW50TmFtZSwgeyBtb2RlbDogdGhpcy5pdGVtLm1vZGVsIH0pO1xuXG4gICAgcmV0dXJuIGNvbXBvbmVudDtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwic3ZjLXNpZGUtYmFyLXRhYlwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU2lkZWJhclRhYiwgcHJvcHMpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IFNpZGViYXJDb21wb25lbnQ7XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3ZjLXNpZGUtYmFyXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTaWRlYmFyQ29tcG9uZW50LCBwcm9wcyk7XG59KTsiLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBMb2NhbGl6YWJsZVN0cmluZywgU2VyaWFsaXplciwgSnNvbk9iamVjdFByb3BlcnR5LCBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5LCBTdXJ2ZXlFbGVtZW50QmFzZSwgU3ZnSWNvbiB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IENyZWF0b3JCYXNlLCBTdHJpbmdFZGl0b3JWaWV3TW9kZWxCYXNlLCBlZGl0YWJsZVN0cmluZ1JlbmRlcmVyTmFtZSB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlMb2NTdHJpbmdFZGl0b3IgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxhbnksIGFueT4ge1xuICBwcml2YXRlIGJhc2VNb2RlbDogU3RyaW5nRWRpdG9yVmlld01vZGVsQmFzZTtcbiAgcHJpdmF0ZSBzdlN0cmluZ0VkaXRvclJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgcHJpdmF0ZSBibHVycmVkQnlFc2NhcGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN0YXRlID0geyBjaGFuZ2VkOiAwIH07XG4gICAgdGhpcy5iYXNlTW9kZWwgPSBuZXcgU3RyaW5nRWRpdG9yVmlld01vZGVsQmFzZSh0aGlzLmxvY1N0cmluZywgdGhpcy5jcmVhdG9yKTtcbiAgICB0aGlzLnN2U3RyaW5nRWRpdG9yUmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gICAgdGhpcy5iYXNlTW9kZWwuYmx1ckVkaXRvciA9ICgpID0+IHtcbiAgICAgIHRoaXMuc3ZTdHJpbmdFZGl0b3JSZWYuY3VycmVudC5ibHVyKCk7XG4gICAgICB0aGlzLnN2U3RyaW5nRWRpdG9yUmVmLmN1cnJlbnQuc3BlbGxjaGVjayA9IGZhbHNlO1xuICAgIH07XG4gIH1cbiAgcHJpdmF0ZSBnZXQgbG9jU3RyaW5nKCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5sb2NTdHIubG9jU3RyO1xuICB9XG4gIHByaXZhdGUgZ2V0IGNyZWF0b3IoKTogQ3JlYXRvckJhc2Uge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmxvY1N0ci5jcmVhdG9yO1xuICB9XG4gIHByaXZhdGUgZ2V0IHN0eWxlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuc3R5bGU7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLmJhc2VNb2RlbDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZXJyb3JUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYmFzZU1vZGVsLmVycm9yVGV4dDtcbiAgfVxuXG4gIHB1YmxpYyBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBpZiAoIXRoaXMubG9jU3RyaW5nKSByZXR1cm47XG4gICAgY29uc3Qgc2VsZjogU3VydmV5TG9jU3RyaW5nRWRpdG9yID0gdGhpcztcbiAgICB0aGlzLmxvY1N0cmluZy5vbkNoYW5nZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBzZWxmLnNldFN0YXRlKHsgY2hhbmdlZDogc2VsZi5zdGF0ZS5jaGFuZ2VkICsgMSB9KTtcbiAgICB9O1xuICAgIGlmICh0aGlzLmxvY1N0cmluZ1tcIl9faXNFZGl0aW5nXCJdKSB7XG4gICAgICB0aGlzLnN2U3RyaW5nRWRpdG9yUmVmLmN1cnJlbnQuZm9jdXMoKTtcbiAgICAgIC8vIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdzZWxlY3RBbGwnLCBmYWxzZSwgbnVsbCk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBpZiAoIXRoaXMubG9jU3RyaW5nKSByZXR1cm47XG4gICAgdGhpcy5sb2NTdHJpbmcub25DaGFuZ2VkID0gZnVuY3Rpb24gKCkgeyB9O1xuICB9XG4gIHByaXZhdGUgZ2V0IHBsYWNlaG9sZGVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYmFzZU1vZGVsLnBsYWNlaG9sZGVyO1xuICB9XG4gIHByaXZhdGUgZ2V0IGNvbnRlbnRFZGl0YWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5iYXNlTW9kZWwuY29udGVudEVkaXRhYmxlO1xuICB9XG4gIHByaXZhdGUgb25CbHVyID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICB0aGlzLnN2U3RyaW5nRWRpdG9yUmVmLmN1cnJlbnQuc3BlbGxjaGVjayA9IGZhbHNlO1xuICAgIHRoaXMubG9jU3RyaW5nW1wiX19pc0VkaXRpbmdcIl0gPSBmYWxzZTtcbiAgICB0aGlzLmp1c3RGb2N1c2VkID0gZmFsc2U7XG4gICAgdGhpcy5iYXNlTW9kZWwub25JbnB1dChldmVudC5uYXRpdmVFdmVudCk7XG4gICAgcmV0dXJuIHRoaXMuYmFzZU1vZGVsLmVycm9yVGV4dDtcbiAgfTtcbiAgcHJpdmF0ZSBqdXN0Rm9jdXNlZCA9IGZhbHNlO1xuICBwcml2YXRlIG9uRm9jdXMgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgIHRoaXMuYmFzZU1vZGVsLm9uRm9jdXMoZXZlbnQubmF0aXZlRXZlbnQpO1xuICAgIHRoaXMuanVzdEZvY3VzZWQgPSB0cnVlO1xuICB9O1xuICBwcml2YXRlIG9uS2V5RG93biA9IChldmVudDogUmVhY3QuS2V5Ym9hcmRFdmVudDxIVE1MU3BhbkVsZW1lbnQ+KSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuYmFzZU1vZGVsLm9uS2V5RG93bihldmVudC5uYXRpdmVFdmVudCk7XG4gIH07XG4gIHByaXZhdGUgb25Nb3VzZVVwID0gKGV2ZW50OiBSZWFjdC5Nb3VzZUV2ZW50PEhUTUxTcGFuRWxlbWVudD4pOiBib29sZWFuID0+IHtcbiAgICByZXR1cm4gdGhpcy5iYXNlTW9kZWwub25Nb3VzZVVwKGV2ZW50Lm5hdGl2ZUV2ZW50KTtcbiAgfTtcbiAgcHJpdmF0ZSBkb25lID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICB0aGlzLmJhc2VNb2RlbC5kb25lKGV2ZW50KTtcbiAgICB0aGlzLmxvY1N0cmluZ1tcIl9faXNFZGl0aW5nXCJdID0gZmFsc2U7XG4gIH07XG4gIHByaXZhdGUgZWRpdCA9IChldmVudDogYW55KSA9PiB7XG4gICAgdGhpcy5zdlN0cmluZ0VkaXRvclJlZi5jdXJyZW50LmZvY3VzKCk7XG4gICAgLy8gZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ3NlbGVjdEFsbCcsIGZhbHNlLCBudWxsKTtcbiAgICB0aGlzLmxvY1N0cmluZ1tcIl9faXNFZGl0aW5nXCJdID0gdHJ1ZTtcbiAgICB0aGlzLmJhc2VNb2RlbC5vbkNsaWNrKGV2ZW50KTtcbiAgfTtcbiAgcHJpdmF0ZSBnZXQgY2xhc3NOYW1lKCkge1xuICAgIHJldHVybiB0aGlzLmJhc2VNb2RlbC5jbGFzc05hbWUodGhpcy5sb2NTdHJpbmcucmVuZGVyZWRIdG1sKTtcbiAgfVxuICBwdWJsaWMgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMubG9jU3RyaW5nKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLmJhc2VNb2RlbC5zZXRMb2NTdHJpbmcodGhpcy5sb2NTdHJpbmcpO1xuICAgIH1cbiAgICBsZXQgY29udHJvbCA9IG51bGw7XG4gICAgaWYgKHRoaXMubG9jU3RyaW5nLmhhc0h0bWwpIHtcbiAgICAgIGNvbnN0IGh0bWxWYWx1ZSA9IHsgX19odG1sOiB0aGlzLmJhc2VNb2RlbC5mb2N1c2VkICYmIHRoaXMubG9jU3RyaW5nLnRleHQgfHwgdGhpcy5sb2NTdHJpbmcucmVuZGVyZWRIdG1sIH07XG4gICAgICBjb250cm9sID0gKFxuICAgICAgICA8c3BhblxuICAgICAgICAgIHJlZj17dGhpcy5zdlN0cmluZ0VkaXRvclJlZn1cbiAgICAgICAgICBjbGFzc05hbWU9XCJzdi1zdHJpbmctZWRpdG9yXCJcbiAgICAgICAgICBjb250ZW50RWRpdGFibGU9e3RoaXMuY29udGVudEVkaXRhYmxlfVxuICAgICAgICAgIHNwZWxsQ2hlY2s9e2ZhbHNlfVxuICAgICAgICAgIGFyaWEtcGxhY2Vob2xkZXI9e3RoaXMucGxhY2Vob2xkZXJ9XG4gICAgICAgICAgc3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nPXt0cnVlfVxuICAgICAgICAgIC8vIHN0eWxlPXt0aGlzLnN0eWxlfVxuICAgICAgICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXtodG1sVmFsdWV9XG4gICAgICAgICAgb25CbHVyPXt0aGlzLm9uQmx1cn1cbiAgICAgICAgICBvbkZvY3VzPXt0aGlzLm9uRm9jdXN9XG4gICAgICAgICAgb25LZXlEb3duPXt0aGlzLm9uS2V5RG93bn1cbiAgICAgICAgICBvbk1vdXNlVXA9e3RoaXMub25Nb3VzZVVwfVxuICAgICAgICAgIG9uQ2xpY2s9e3RoaXMuZWRpdH1cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRyb2wgPSAoXG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgcmVmPXt0aGlzLnN2U3RyaW5nRWRpdG9yUmVmfVxuICAgICAgICAgIGNsYXNzTmFtZT1cInN2LXN0cmluZy1lZGl0b3JcIlxuICAgICAgICAgIGNvbnRlbnRFZGl0YWJsZT17dGhpcy5jb250ZW50RWRpdGFibGV9XG4gICAgICAgICAgc3BlbGxDaGVjaz17ZmFsc2V9XG4gICAgICAgICAgYXJpYS1wbGFjZWhvbGRlcj17dGhpcy5wbGFjZWhvbGRlcn1cbiAgICAgICAgICBzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmc9e3RydWV9XG4gICAgICAgICAgLy8gc3R5bGU9e3RoaXMuc3R5bGV9XG4gICAgICAgICAgb25CbHVyPXt0aGlzLm9uQmx1cn1cbiAgICAgICAgICBvbkZvY3VzPXt0aGlzLm9uRm9jdXN9XG4gICAgICAgICAgb25LZXlEb3duPXt0aGlzLm9uS2V5RG93bn1cbiAgICAgICAgICBvbk1vdXNlVXA9e3RoaXMub25Nb3VzZVVwfVxuICAgICAgICAgIG9uQ2xpY2s9e3RoaXMuZWRpdH1cbiAgICAgICAgPlxuICAgICAgICAgIHt0aGlzLmxvY1N0cmluZy5yZW5kZXJlZEh0bWx9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8c3BhbiBjbGFzc05hbWU9e3RoaXMuY2xhc3NOYW1lfT5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXN0cmluZy1lZGl0b3JfX2NvbnRlbnRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1zdHJpbmctZWRpdG9yX19ib3JkZXJcIlxuICAgICAgICAgICAgb25DbGljaz17dGhpcy5lZGl0fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxTdmdJY29uXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cInN2Yy1zdHJpbmctZWRpdG9yX19idXR0b24gc3ZjLXN0cmluZy1lZGl0b3JfX2J1dHRvbi0tZWRpdFwiXG4gICAgICAgICAgICAgIHNpemU9ezE2fVxuICAgICAgICAgICAgICBpY29uTmFtZT17XCJpY29uLWVkaXRcIn1cbiAgICAgICAgICAgID48L1N2Z0ljb24+XG5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB7Y29udHJvbH1cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1zdHJpbmctZWRpdG9yX19jb250cm9sc1wiXG4gICAgICAgICAgICBvbkNsaWNrPXt0aGlzLmVkaXR9PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIHt0aGlzLmVycm9yVGV4dCA/IDxzcGFuIGNsYXNzTmFtZT1cInN2Yy1zdHJpbmctZWRpdG9yX19lcnJvclwiPnt0aGlzLmVycm9yVGV4dH08L3NwYW4+IDogXCJcIn1cbiAgICAgIDwvc3Bhbj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBlZGl0YWJsZVN0cmluZ1JlbmRlcmVyTmFtZSxcbiAgKHByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5TG9jU3RyaW5nRWRpdG9yLCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuXG5pbXBvcnQge1xuICBCYXNlLFxuICBRdWVzdGlvbixcbiAgU3VydmV5RXJyb3IsXG4gIFN1cnZleU1vZGVsXG59IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHtcbiAgU3VydmV5QWN0aW9uQmFyLFxuICBSZWFjdEVsZW1lbnRGYWN0b3J5LFxuICBSZWFjdFF1ZXN0aW9uRmFjdG9yeSxcbiAgU3VydmV5RWxlbWVudEJhc2UsXG4gIFN1cnZleUxvY1N0cmluZ1ZpZXdlcixcbiAgU3VydmV5XG59IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7XG4gIElDcmVhdG9yT3B0aW9ucyxcbiAgQ3JlYXRvckJhc2UsXG4gIElUYWJiZWRNZW51SXRlbVxufSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IHsgVGFiYmVkTWVudUNvbXBvbmVudCB9IGZyb20gXCIuL1RhYmJlZE1lbnVcIjtcbmltcG9ydCB7IE5vdGlmaWVyQ29tcG9uZW50IH0gZnJvbSBcIi4vTm90aWZpZXJcIjtcbmltcG9ydCB7IFN2Z0J1bmRsZUNvbXBvbmVudCB9IGZyb20gXCIuL1N2Z0J1bmRsZVwiO1xuXG5pbnRlcmZhY2UgSVN1cnZleUNyZWF0b3JDb21wb25lbnRQcm9wcyB7XG4gIGNyZWF0b3I6IFN1cnZleUNyZWF0b3I7XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlDcmVhdG9yQ29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8XG4gIElTdXJ2ZXlDcmVhdG9yQ29tcG9uZW50UHJvcHMsXG4gIGFueVxuPiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBJU3VydmV5Q3JlYXRvckNvbXBvbmVudFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMucm9vdE5vZGUgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuICBnZXQgY3JlYXRvcigpOiBDcmVhdG9yQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3JlYXRvcjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNyZWF0b3I7XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICB0aGlzLmNyZWF0b3IuaW5pdEtleWJvYXJkU2hvcnRjdXRzKHRoaXMucm9vdE5vZGUuY3VycmVudCk7XG4gICAgdGhpcy5jcmVhdG9yLmluaXRSZXNwb25zaXZpdHlNYW5hZ2VyKHRoaXMucm9vdE5vZGUuY3VycmVudCk7XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICB0aGlzLmNyZWF0b3IucmVtb3ZlS2V5Ym9hcmRTaG9ydGN1dHModGhpcy5yb290Tm9kZS5jdXJyZW50KTtcbiAgICB0aGlzLmNyZWF0b3IucmVzZXRSZXNwb25zaXZpdHlNYW5hZ2VyKCk7XG4gIH1cbiAgcHJpdmF0ZSByb290Tm9kZTogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcblxuICByZW5kZXJFbGVtZW50KCkge1xuICAgIGNvbnN0IGNyZWF0b3I6IENyZWF0b3JCYXNlID0gdGhpcy5wcm9wcy5jcmVhdG9yO1xuICAgIGlmIChjcmVhdG9yLmlzQ3JlYXRvckRpc3Bvc2VkKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBjcmVhdG9yQ2xhc3NOYW1lID0gXCJzdmMtY3JlYXRvclwiICsgKHRoaXMucHJvcHMuY3JlYXRvci5pc01vYmlsZVZpZXcgPyBcIiBzdmMtY3JlYXRvci0tbW9iaWxlXCIgOiBcIlwiKTtcbiAgICBjb25zdCBhcmVhQ2xhc3NOYW1lID0gXCJzdmMtZnVsbC1jb250YWluZXIgc3ZjLWNyZWF0b3JfX2FyZWEgc3ZjLWZsZXgtY29sdW1uXCIgKyAodGhpcy5wcm9wcy5jcmVhdG9yLmhhdmVDb21tZXJjaWFsTGljZW5zZSA/IFwiXCIgOiBcIiBzdmMtY3JlYXRvcl9fYXJlYS0td2l0aC1iYW5uZXJcIik7XG4gICAgY29uc3QgY29udGVudFdyYXBwZXJDbGFzc05hbWUgPSBcInN2Yy1jcmVhdG9yX19jb250ZW50LXdyYXBwZXIgc3ZjLWZsZXgtcm93XCIgKyAodGhpcy5wcm9wcy5jcmVhdG9yLmlzTW9iaWxlVmlldyA/IFwiIHN2Yy1jcmVhdG9yX19jb250ZW50LXdyYXBwZXItLWZvb3Rlci10b29sYmFyXCIgOiBcIlwiKTtcbiAgICBjb25zdCBmdWxsQ29udGFpbmVyQ2xhc3NOYW1lID0gXCJzdmMtZmxleC1yb3cgc3ZjLWZ1bGwtY29udGFpbmVyXCIgKyAoXCIgc3ZjLWNyZWF0b3JfX3NpZGUtYmFyLS1cIiArIHRoaXMuY3JlYXRvci5zaWRlYmFyTG9jYXRpb24pO1xuICAgIGxldCBsaWNlbnNlQmFubmVyID0gbnVsbDtcbiAgICBpZiAoIXRoaXMucHJvcHMuY3JlYXRvci5oYXZlQ29tbWVyY2lhbExpY2Vuc2UpIHtcbiAgICAgIGxpY2Vuc2VCYW5uZXIgPSAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWNyZWF0b3JfX2Jhbm5lclwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy1jcmVhdG9yX19ub24tY29tbWVyY2lhbC10ZXh0XCI+XG4gICAgICAgICAgICA8YSBocmVmPVwiaHR0cHM6Ly9zdXJ2ZXlqcy5pby9idXlcIj5cbiAgICAgICAgICAgICAge3RoaXMucHJvcHMuY3JlYXRvci5saWNlbnNlVGV4dH1cbiAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9XG4gICAgLy9BTTogd2lkdGggdW5yZWNvZ25pemVkIGJ5IHJlYWN0XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjcmVhdG9yQ2xhc3NOYW1lfSByZWY9e3RoaXMucm9vdE5vZGV9PlxuICAgICAgICA8U3ZnQnVuZGxlQ29tcG9uZW50PjwvU3ZnQnVuZGxlQ29tcG9uZW50PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YXJlYUNsYXNzTmFtZX0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Z1bGxDb250YWluZXJDbGFzc05hbWV9PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtZmxleC1jb2x1bW4gc3ZjLWZsZXgtcm93X19lbGVtZW50IHN2Yy1mbGV4LXJvd19fZWxlbWVudC0tZ3Jvd2luZ1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy10b3AtYmFyXCI+XG4gICAgICAgICAgICAgICAgeyhjcmVhdG9yLnNob3dUYWJzID9cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXRhYmJlZC1tZW51LXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPFRhYmJlZE1lbnVDb21wb25lbnQgbW9kZWw9e2NyZWF0b3IudGFiYmVkTWVudX0+PC9UYWJiZWRNZW51Q29tcG9uZW50PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+IDogbnVsbCl9XG4gICAgICAgICAgICAgICAgeyhjcmVhdG9yLnNob3dUb29sYmFyID9cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXRvb2xiYXItd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICA8U3VydmV5QWN0aW9uQmFyIG1vZGVsPXtjcmVhdG9yLnRvb2xiYXJ9PjwvU3VydmV5QWN0aW9uQmFyPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA6IG51bGwpfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2NvbnRlbnRXcmFwcGVyQ2xhc3NOYW1lfT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1jcmVhdG9yX19jb250ZW50LWhvbGRlciBzdmMtZmxleC1jb2x1bW5cIj5cbiAgICAgICAgICAgICAgICAgIHt0aGlzLnJlbmRlckFjdGl2ZVRhYigpfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtZm9vdGVyLWJhclwiPlxuICAgICAgICAgICAgICAgIHsoY3JlYXRvci5pc01vYmlsZVZpZXcgP1xuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtdG9vbGJhci13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxTdXJ2ZXlBY3Rpb25CYXIgbW9kZWw9e2NyZWF0b3IuZm9vdGVyVG9vbGJhcn0+PC9TdXJ2ZXlBY3Rpb25CYXI+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDogbnVsbCl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB7dGhpcy5yZW5kZXJTaWRlYmFyKCl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAge2xpY2Vuc2VCYW5uZXJ9XG4gICAgICAgICAgPE5vdGlmaWVyQ29tcG9uZW50XG4gICAgICAgICAgICBjcmVhdG9yPXtjcmVhdG9yfVxuICAgICAgICAgICAgbm90aWZpZXI9e2NyZWF0b3Iubm90aWZpZXJ9XG4gICAgICAgICAgPjwvTm90aWZpZXJDb21wb25lbnQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICByZW5kZXJBY3RpdmVUYWIoKSB7XG4gICAgY29uc3QgY3JlYXRvcjogQ3JlYXRvckJhc2UgPSB0aGlzLnByb3BzLmNyZWF0b3I7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjcmVhdG9yLnRhYnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChjcmVhdG9yLnRhYnNbaV0uaWQgPT09IGNyZWF0b3IuYWN0aXZlVGFiKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbmRlckNyZWF0b3JUYWIoY3JlYXRvci50YWJzW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmVuZGVyQ3JlYXRvclRhYih0YWI6IElUYWJiZWRNZW51SXRlbSkge1xuICAgIGlmICh0YWIudmlzaWJsZSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBjcmVhdG9yOiBDcmVhdG9yQmFzZSA9IHRoaXMucHJvcHMuY3JlYXRvcjtcbiAgICBjb25zdCBjb21wb25lbnQgPSAhIXRhYi5yZW5kZXJUYWJcbiAgICAgID8gdGFiLnJlbmRlclRhYigpXG4gICAgICA6IFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudCh0YWIuY29tcG9uZW50Q29udGVudCwge1xuICAgICAgICBjcmVhdG9yOiBjcmVhdG9yLFxuICAgICAgICBzdXJ2ZXk6IGNyZWF0b3Iuc3VydmV5LFxuICAgICAgICBkYXRhOiB0YWIuZGF0YS5tb2RlbFxuICAgICAgfSk7XG4gICAgY29uc3QgY2xhc3NOYW1lID0gXCJzdmMtY3JlYXRvci10YWJcIiArIChjcmVhdG9yLnRvb2xib3hMb2NhdGlvbiA9PSBcInJpZ2h0XCIgPyBcIiBzdmMtY3JlYXRvcl9fdG9vbGJveC0tcmlnaHRcIiA6IFwiXCIpO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGtleT17dGFiLmlkfVxuICAgICAgICBpZD17XCJzY3JvbGxhYmxlRGl2LVwiICsgdGFiLmlkfVxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICAgID5cbiAgICAgICAge2NvbXBvbmVudH1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcmVuZGVyU2lkZWJhcigpIHtcbiAgICBpZiAoISF0aGlzLmNyZWF0b3Iuc2lkZWJhcikge1xuICAgICAgY29uc3QgY2xhc3NOYW1lID0gdGhpcy5jcmVhdG9yLmlzTW9iaWxlVmlldyA/IFwic3YtbW9iaWxlLXNpZGUtYmFyXCIgOiBcIlwiO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZX0+XG4gICAgICAgICAge1JlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChcInN2Yy1zaWRlLWJhclwiLCB7IG1vZGVsOiB0aGlzLmNyZWF0b3Iuc2lkZWJhciB9KX1cbiAgICAgICAgPC9kaXY+KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlDcmVhdG9yIGV4dGVuZHMgQ3JlYXRvckJhc2Uge1xuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBJQ3JlYXRvck9wdGlvbnMgPSB7fSwgb3B0aW9uczI/OiBJQ3JlYXRvck9wdGlvbnMpIHtcbiAgICBzdXBlcihvcHRpb25zLCBvcHRpb25zMik7XG4gIH1cbiAgcHVibGljIHJlbmRlcih0YXJnZXQ6IHN0cmluZyB8IEhUTUxFbGVtZW50KSB7XG4gICAgbGV0IG5vZGU6IEhUTUxFbGVtZW50ID0gdGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgIGlmICh0eXBlb2YgdGFyZ2V0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBub2RlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGFyZ2V0KTtcbiAgICB9XG4gICAgUmVhY3RET00udW5tb3VudENvbXBvbmVudEF0Tm9kZShub2RlKTtcbiAgICBSZWFjdERPTS5yZW5kZXIoXG4gICAgICA8UmVhY3QuU3RyaWN0TW9kZT5cbiAgICAgICAgPFN1cnZleUNyZWF0b3JDb21wb25lbnQgY3JlYXRvcj17dGhpc30gLz5cbiAgICAgIDwvUmVhY3QuU3RyaWN0TW9kZT4sXG4gICAgICBub2RlXG4gICAgKTtcbiAgfVxuXG4gIC8vSVN1cnZleUNyZWF0b3JcbiAgcHVibGljIGNyZWF0ZVF1ZXN0aW9uRWxlbWVudChxdWVzdGlvbjogUXVlc3Rpb24pOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIFJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZVF1ZXN0aW9uKFxuICAgICAgcXVlc3Rpb24uaXNEZWZhdWx0UmVuZGVyaW5nKClcbiAgICAgICAgPyBxdWVzdGlvbi5nZXRUZW1wbGF0ZSgpXG4gICAgICAgIDogcXVlc3Rpb24uZ2V0Q29tcG9uZW50TmFtZSgpLFxuICAgICAge1xuICAgICAgICBxdWVzdGlvbjogcXVlc3Rpb24sXG4gICAgICAgIGlzRGlzcGxheU1vZGU6IHF1ZXN0aW9uLmlzUmVhZE9ubHksXG4gICAgICAgIGNyZWF0b3I6IHRoaXNcbiAgICAgIH1cbiAgICApO1xuICB9XG4gIHB1YmxpYyByZW5kZXJFcnJvcihcbiAgICBrZXk6IHN0cmluZyxcbiAgICBlcnJvcjogU3VydmV5RXJyb3IsXG4gICAgY3NzQ2xhc3NlczogYW55XG4gICk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBrZXk9e2tleX0+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5lcnJvci5pY29ufSBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuZXJyb3IuaXRlbX0+XG4gICAgICAgICAgPFN1cnZleUxvY1N0cmluZ1ZpZXdlciBsb2NTdHI9e2Vycm9yLmxvY1RleHR9IC8+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHVibGljIHF1ZXN0aW9uVGl0bGVMb2NhdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN1cnZleS5xdWVzdGlvblRpdGxlTG9jYXRpb247XG4gIH1cbiAgcHVibGljIHF1ZXN0aW9uRXJyb3JMb2NhdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN1cnZleS5xdWVzdGlvbkVycm9yTG9jYXRpb247XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdXJ2ZXktd2lkZ2V0XCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXksIHByb3BzKTtcbn0pO1xuIiwiXG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBzdmdCdW5kbGUgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcblxuZXhwb3J0IGNsYXNzIFN2Z0J1bmRsZUNvbXBvbmVudCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHByaXZhdGUgY29udGFpbmVyUmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5jb250YWluZXJSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICB0aGlzLmNvbnRhaW5lclJlZi5jdXJyZW50LmlubmVySFRNTCA9IHN2Z0J1bmRsZTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgfVxuICByZW5kZXIoKSB7XG4gICAgcmV0dXJuIDxkaXYgcmVmPXt0aGlzLmNvbnRhaW5lclJlZn0+PC9kaXY+O1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3ZjLXN2Zy1idW5kbGVcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN2Z0J1bmRsZUNvbXBvbmVudCwgcHJvcHMpO1xufSk7IiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQ1NTUHJvcGVydGllcyB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgSVRhYmJlZE1lbnVJdGVtLCBUYWJiZWRNZW51SXRlbSwgVGFiYmVkTWVudUNvbnRhaW5lciB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQge1xuICBCYXNlLFxuICBJQWN0aW9uLFxuICBBY3Rpb24sXG4gIFJlc3BvbnNpdml0eU1hbmFnZXIsXG4gIEFkYXB0aXZlQWN0aW9uQ29udGFpbmVyXG59IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgYXR0YWNoS2V5MmNsaWNrLCBSZWFjdEVsZW1lbnRGYWN0b3J5LCBTdXJ2ZXlFbGVtZW50QmFzZSB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcblxuZXhwb3J0IGludGVyZmFjZSBJVGFiYmVkTWVudUNvbXBvbmVudFByb3BzIHtcbiAgbW9kZWw6IFRhYmJlZE1lbnVDb250YWluZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBUYWJiZWRNZW51Q29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8XG4gIElUYWJiZWRNZW51Q29tcG9uZW50UHJvcHMsXG4gIGFueVxuPiB7XG4gIHByaXZhdGUgbWFuYWdlcjogUmVzcG9uc2l2aXR5TWFuYWdlcjtcbiAgcHJpdmF0ZSByb290UmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuXG4gIHByaXZhdGUgZ2V0IG1vZGVsKCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLm1vZGVsO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMucm9vdFJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICB9XG5cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLm1vZGVsLnJlbmRlcmVkQWN0aW9ucy5tYXAoKGl0ZW0pID0+IDxUYWJiZWRNZW51SXRlbVdyYXBwZXIgaXRlbT17aXRlbX0ga2V5PXtpdGVtLmlkfSAvPik7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgcmVmPXt0aGlzLnJvb3RSZWZ9IGNsYXNzTmFtZT1cInN2Yy10YWJiZWQtbWVudVwiPlxuICAgICAgICB7aXRlbXN9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICBjb25zdCBjb250YWluZXI6IEhUTUxEaXZFbGVtZW50ID0gdGhpcy5yb290UmVmLmN1cnJlbnQ7XG4gICAgaWYgKCFjb250YWluZXIpIHJldHVybjtcbiAgICB0aGlzLm1hbmFnZXIgPSBuZXcgUmVzcG9uc2l2aXR5TWFuYWdlcihcbiAgICAgIGNvbnRhaW5lcixcbiAgICAgIHRoaXMubW9kZWwsXG4gICAgICBcIi5zdmMtdGFiYmVkLW1lbnUtaXRlbS1jb250YWluZXI6bm90KC5zdi1kb3RzKT4uc3YtYWN0aW9uX19jb250ZW50XCJcbiAgICApO1xuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHRoaXMubWFuYWdlciAmJiAodGhpcy5tYW5hZ2VyLmRpc3Bvc2UoKSk7XG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgfVxufVxuXG5jbGFzcyBUYWJiZWRNZW51SXRlbVdyYXBwZXIgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxcbiAgYW55LFxuICBhbnlcbj4ge1xuXG4gIHByaXZhdGUgZ2V0IGl0ZW0oKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbTtcbiAgfVxuXG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGxldCBjc3M6IHN0cmluZyA9IFwic3ZjLXRhYmJlZC1tZW51LWl0ZW0tY29udGFpbmVyXCI7XG4gICAgaWYgKHRoaXMuaXRlbS5jc3MpIHtcbiAgICAgIGNzcyArPSBcIiBcIiArIHRoaXMuaXRlbS5jc3M7XG4gICAgfVxuICAgIGNzcyArPSAoIXRoaXMuaXRlbS5pc1Zpc2libGUgPyBcIiBzdi1hY3Rpb24tLWhpZGRlblwiIDogXCJcIik7XG5cbiAgICBjb25zdCBjb21wb25lbnQgPSBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoXG4gICAgICB0aGlzLml0ZW0uY29tcG9uZW50IHx8IFwic3ZjLXRhYmJlZC1tZW51LWl0ZW1cIixcbiAgICAgIHsgaXRlbTogdGhpcy5pdGVtIH1cbiAgICApO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxzcGFuIGtleT17dGhpcy5pdGVtLmlkfSBjbGFzc05hbWU9e2Nzc30+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3YtYWN0aW9uX19jb250ZW50XCI+XG4gICAgICAgICAge2NvbXBvbmVudH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L3NwYW4+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElUYWJiZWRNZW51SXRlbUNvbXBvbmVudFByb3BzIHtcbiAgaXRlbTogQWN0aW9uO1xufVxuZXhwb3J0IGNsYXNzIFRhYmJlZE1lbnVJdGVtQ29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8XG4gIElUYWJiZWRNZW51SXRlbUNvbXBvbmVudFByb3BzLFxuICBhbnlcbj4ge1xuICBnZXQgaXRlbSgpOiBBY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW07XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuXG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgaXRlbSA9IHRoaXMuaXRlbTtcbiAgICBsZXQgY2xhc3NOYW1lOiBzdHJpbmcgPSBcInN2Yy10YWJiZWQtbWVudS1pdGVtXCI7XG4gICAgaWYgKGl0ZW0uYWN0aXZlKSBjbGFzc05hbWUgKz0gXCIgc3ZjLXRhYmJlZC1tZW51LWl0ZW0tLXNlbGVjdGVkXCI7XG4gICAgaWYgKGl0ZW0uZW5hYmxlZCAhPT0gdW5kZWZpbmVkICYmICFpdGVtLmVuYWJsZWQpXG4gICAgICBjbGFzc05hbWUgKz0gXCIgc3ZjLXRhYmJlZC1tZW51LWl0ZW0tLWRpc2FibGVkXCI7XG4gICAgbGV0IHRpdGxlQ2xhc3NOYW1lOiBzdHJpbmcgPVxuICAgICAgXCJzdmMtdGV4dCBzdmMtdGFiYmVkLW1lbnUtaXRlbV9fdGV4dCBzdmMtdGV4dC0tbm9ybWFsXCI7XG4gICAgaWYgKGl0ZW0uYWN0aXZlKSB0aXRsZUNsYXNzTmFtZSArPSBcIiBzdmMtdGV4dC0tYm9sZFwiO1xuXG4gICAgcmV0dXJuIChhdHRhY2hLZXkyY2xpY2soXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lfSBvbkNsaWNrPXsoKSA9PiBpdGVtLmFjdGlvbihpdGVtKX0+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17dGl0bGVDbGFzc05hbWV9PntpdGVtLnRpdGxlfTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIClcbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy10YWJiZWQtbWVudS1pdGVtXCIsXG4gIChwcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFRhYmJlZE1lbnVJdGVtQ29tcG9uZW50LCBwcm9wcyk7XG4gIH1cbik7XG5leHBvcnQgZGVmYXVsdCBUYWJiZWRNZW51Q29tcG9uZW50O1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQmFzZSwgUXVlc3Rpb24gfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7XG4gIGF0dGFjaEtleTJjbGljayxcbiAgUmVhY3RFbGVtZW50RmFjdG9yeSxcbiAgU3VydmV5RWxlbWVudEJhc2Vcbn0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsLCB0b2dnbGVIb3ZlcmVkIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RHJhZ0V2ZW50LCBSZWFjdE1vdXNlRXZlbnQgfSBmcm9tIFwiLi4vZXZlbnRzXCI7XG5pbXBvcnQgeyBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcyB9IGZyb20gXCIuL1F1ZXN0aW9uXCI7XG5cbmV4cG9ydCBjbGFzcyBDZWxsUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8XG4gIFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzLFxuICBhbnlcbj4ge1xuICBtb2RlbDogUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsO1xuICBjb25zdHJ1Y3Rvcihwcm9wczogUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5tb2RlbCA9IG5ldyBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWwoXG4gICAgICB0aGlzLnByb3BzLmNvbXBvbmVudERhdGEsXG4gICAgICB0aGlzLnByb3BzLnF1ZXN0aW9uLFxuICAgICAgbnVsbFxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuXG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKHRoaXMubW9kZWwuaXNEcmFnZ2VkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgZGF0YS1zdi1kcm9wLXRhcmdldC1zdXJ2ZXktZWxlbWVudD17dGhpcy5tb2RlbC5zdXJ2ZXlFbGVtZW50Lm5hbWV9XG4gICAgICAgICAgY2xhc3NOYW1lPXtcInN2Yy1xdWVzdGlvbl9fYWRvcm5lclwifVxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e1wiIHN2Yy1xdWVzdGlvbl9fY29udGVudC0tc2VsZWN0ZWQtbm8tYm9yZGVyIHN2Yy1xdWVzdGlvbl9fY29udGVudFwifT5cbiAgICAgICAgICAgIHt0aGlzLnByb3BzLmVsZW1lbnR9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy1jZWxsLXF1ZXN0aW9uXCIsXG4gIChwcm9wczogUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChDZWxsUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50LCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgeyBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWwsIHRvZ2dsZUhvdmVyZWQgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUmVhY3REcmFnRXZlbnQsIFJlYWN0TW91c2VFdmVudCB9IGZyb20gXCIuLi9ldmVudHNcIjtcbmltcG9ydCB7IEJhc2UsIEl0ZW1WYWx1ZSwgUXVlc3Rpb25TZWxlY3RCYXNlLCBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSwgU3VydmV5RWxlbWVudEJhc2UsIFJlYWN0U3VydmV5RWxlbWVudHNXcmFwcGVyIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMgfSBmcm9tIFwiLi9RdWVzdGlvblwiO1xuaW1wb3J0IHsgYXR0YWNoS2V5MmNsaWNrIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuXG5leHBvcnQgY2xhc3MgQ2VsbFF1ZXN0aW9uRHJvcGRvd25BZG9ybmVyQ29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8XG4gIFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzLFxuICBhbnlcbj4ge1xuICBtb2RlbDogUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsO1xuICBjb25zdHJ1Y3Rvcihwcm9wczogUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5tb2RlbCA9IG5ldyBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWwoXG4gICAgICB0aGlzLnByb3BzLmNvbXBvbmVudERhdGEsXG4gICAgICB0aGlzLnByb3BzLnF1ZXN0aW9uLFxuICAgICAgbnVsbFxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuXG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKHRoaXMubW9kZWwuaXNEcmFnZ2VkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgcXVlc3Rpb24gPSB0aGlzLnByb3BzLnF1ZXN0aW9uIGFzIFF1ZXN0aW9uU2VsZWN0QmFzZTtcbiAgICBjb25zdCB0ZXh0U3R5bGUgPSAodGhpcy5wcm9wcy5xdWVzdGlvbiBhcyBhbnkpLnRleHRTdHlsZTtcbiAgICByZXR1cm4gKFxuICAgICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgZGF0YS1zdi1kcm9wLXRhcmdldC1zdXJ2ZXktZWxlbWVudD17dGhpcy5tb2RlbC5zdXJ2ZXlFbGVtZW50Lm5hbWV9XG4gICAgICAgICAgY2xhc3NOYW1lPXtcInN2Yy1xdWVzdGlvbl9fYWRvcm5lclwifVxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e1wiIHN2Yy1xdWVzdGlvbl9fY29udGVudC0tc2VsZWN0ZWQtbm8tYm9yZGVyIHN2Yy1xdWVzdGlvbl9fY29udGVudFwifT5cbiAgICAgICAgICAgIHt0aGlzLnByb3BzLmVsZW1lbnR9XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXF1ZXN0aW9uX19kcm9wZG93bi1jaG9pY2VzXCI+XG4gICAgICAgICAgICAgIHtxdWVzdGlvbi52aXNpYmxlQ2hvaWNlcy5tYXAoXG4gICAgICAgICAgICAgICAgKGl0ZW06IEl0ZW1WYWx1ZSwgaW5kZXg6IG51bWJlcikgPT4gKFxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJzdmMtcXVlc3Rpb25fX2Ryb3Bkb3duLWNob2ljZVwiXG4gICAgICAgICAgICAgICAgICAgIGtleT17YGVkaXRhYmxlX2Nob2ljZV8ke2luZGV4fWB9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHtSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlci53cmFwSXRlbVZhbHVlKHF1ZXN0aW9uLnN1cnZleSBhcyBTdXJ2ZXlNb2RlbCxcbiAgICAgICAgICAgICAgICAgICAgICBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICBcInN1cnZleS1yYWRpb2dyb3VwLWl0ZW1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb246IHF1ZXN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBjc3NDbGFzc2VzOiBxdWVzdGlvbi5jc3NDbGFzc2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBpc0Rpc3BsYXlNb2RlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtOiBpdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0U3R5bGU6IHRleHRTdHlsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBpc0NoZWNrZWQ6IHF1ZXN0aW9uLnZhbHVlID09PSBpdGVtLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICBpdGVtXG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLWNlbGwtZHJvcGRvd24tcXVlc3Rpb25cIixcbiAgKHByb3BzOiBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KENlbGxRdWVzdGlvbkRyb3Bkb3duQWRvcm5lckNvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IHsgQmFzZSwgUGFnZU1vZGVsLCBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHtcbiAgYXR0YWNoS2V5MmNsaWNrLFxuICBQb3B1cCxcbiAgU3VydmV5QWN0aW9uQmFyLFxuICBSZWFjdEVsZW1lbnRGYWN0b3J5LFxuICBTdXJ2ZXlFbGVtZW50QmFzZSxcbiAgU3VydmV5UGFnZSxcbiAgU3ZnSWNvblxufSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQge1xuICBDcmVhdG9yQmFzZSxcbiAgUGFnZVZpZXdNb2RlbCxcbiAgU3VydmV5SGVscGVyLFxuICB0b2dnbGVIb3ZlcmVkXG59IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSZWFjdE1vdXNlRXZlbnQgfSBmcm9tIFwiLi4vZXZlbnRzXCI7XG5cbmludGVyZmFjZSBJQ3JlYXRvclN1cnZleVBhZ2VDb21wb25lbnRQcm9wcyB7XG4gIGNyZWF0b3I6IENyZWF0b3JCYXNlO1xuICBzdXJ2ZXk6IFN1cnZleU1vZGVsO1xuICBwYWdlOiBQYWdlTW9kZWw7XG59XG5cbmV4cG9ydCBjbGFzcyBDcmVhdG9yU3VydmV5UGFnZUNvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPFxuICBJQ3JlYXRvclN1cnZleVBhZ2VDb21wb25lbnRQcm9wcyxcbiAgYW55XG4+IHtcbiAgcHJpdmF0ZSBtb2RlbDogUGFnZVZpZXdNb2RlbDtcbiAgcHJpdmF0ZSByb290UmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBjb25zdHJ1Y3Rvcihwcm9wczogSUNyZWF0b3JTdXJ2ZXlQYWdlQ29tcG9uZW50UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5tb2RlbCA9IG5ldyBQYWdlVmlld01vZGVsKFxuICAgICAgdGhpcy5wcm9wcy5jcmVhdG9yLFxuICAgICAgdGhpcy5wcm9wcy5wYWdlXG4gICAgKTtcbiAgICB0aGlzLnJvb3RSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgdGhpcy5tb2RlbC5vblBhZ2VTZWxlY3RlZENhbGxiYWNrID0gKCkgPT4ge1xuICAgICAgaWYgKCEhdGhpcy5yb290UmVmLmN1cnJlbnQpIHtcbiAgICAgICAgU3VydmV5SGVscGVyLnNjcm9sbEludG9WaWV3SWZOZWVkZWQodGhpcy5yb290UmVmLmN1cnJlbnQpO1xuICAgICAgfVxuICAgIH07XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICB0aGlzLm1vZGVsLmRpc3Bvc2UoKTtcbiAgfVxuICBwcm90ZWN0ZWQgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICAhIXRoaXMubW9kZWwgJiZcbiAgICAgIHRoaXMubW9kZWwuaXNQYWdlTGl2ZSAmJlxuICAgICAgISF0aGlzLm1vZGVsLnBhZ2UgJiZcbiAgICAgICEhdGhpcy5tb2RlbC5wYWdlLnN1cnZleVxuICAgICk7XG4gIH1cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLnByb3BzLnBhZ2UpIHJldHVybiBudWxsO1xuICAgIHJldHVybiAoXG4gICAgICBhdHRhY2hLZXkyY2xpY2soPGRpdlxuICAgICAgICByZWY9e3RoaXMucm9vdFJlZn1cbiAgICAgICAgY2xhc3NOYW1lPXtcInN2Yy1wYWdlX19jb250ZW50IFwiICsgdGhpcy5tb2RlbC5jc3N9XG4gICAgICAgIGlkPXt0aGlzLnByb3BzLnBhZ2UuaWR9XG4gICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMubW9kZWwuc2VsZWN0KHRoaXMubW9kZWwsIG5ldyBSZWFjdE1vdXNlRXZlbnQoZSkpO1xuICAgICAgICB9fVxuICAgICAgICBvbk1vdXNlTGVhdmU9eyhlKSA9PiB0aGlzLm1vZGVsLmhvdmVyKGUubmF0aXZlRXZlbnQsIGUuY3VycmVudFRhcmdldCl9XG4gICAgICAgIG9uTW91c2VPdmVyPXsoZSkgPT4gdGhpcy5tb2RlbC5ob3ZlcihlLm5hdGl2ZUV2ZW50LCBlLmN1cnJlbnRUYXJnZXQpfVxuICAgICAgPlxuICAgICAgICB7dGhpcy5yZW5kZXJIZWFkZXIoKX1cbiAgICAgICAge3RoaXMucmVuZGVyQ29udGVudCgpfVxuICAgICAgICB7dGhpcy5yZW5kZXJGb290ZXIoKX1cbiAgICAgIDwvZGl2PilcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJDb250ZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKDxTdXJ2ZXlQYWdlIHBhZ2U9e3RoaXMucHJvcHMucGFnZX0gc3VydmV5PXt0aGlzLnByb3BzLnN1cnZleX0gY3JlYXRvcj17dGhpcy5wcm9wcy5jcmVhdG9yfSBjc3M9e3RoaXMubW9kZWwuY3NzfT48L1N1cnZleVBhZ2U+KTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVySGVhZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKDxkaXYgY2xhc3NOYW1lPVwic3ZjLXBhZ2VfX2NvbnRlbnQtYWN0aW9uc1wiPlxuICAgICAgPFN1cnZleUFjdGlvbkJhciBtb2RlbD17dGhpcy5tb2RlbC5hY3Rpb25Db250YWluZXJ9PjwvU3VydmV5QWN0aW9uQmFyPlxuICAgIDwvZGl2Pik7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckZvb3RlcigpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLm1vZGVsLmFsbG93RWRpdCkgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgcXVlc3Rpb25UeXBlU2VsZWN0b3JNb2RlbCA9IHRoaXMubW9kZWwucXVlc3Rpb25UeXBlU2VsZWN0b3JNb2RlbDtcbiAgICByZXR1cm4gYXR0YWNoS2V5MmNsaWNrKDxkaXZcbiAgICAgIGNsYXNzTmFtZT1cInN2Yy1wYWdlX19hZGQtbmV3LXF1ZXN0aW9uIHN2Yy1idG5cIlxuICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy5tb2RlbC5hZGROZXdRdWVzdGlvbih0aGlzLm1vZGVsLCBuZXcgUmVhY3RNb3VzZUV2ZW50KGUpKTtcbiAgICAgIH19XG4gICAgICBvbk1vdXNlT3Zlcj17KGUpID0+IHRoaXMubW9kZWwuaG92ZXJTdG9wcGVyKGUubmF0aXZlRXZlbnQsIGUuY3VycmVudFRhcmdldCl9XG4gICAgPlxuICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXRleHQgc3ZjLXRleHQtLW5vcm1hbCBzdmMtdGV4dC0tYm9sZFwiPlxuICAgICAgICB7dGhpcy5tb2RlbC5hZGROZXdRdWVzdGlvblRleHR9XG4gICAgICA8L3NwYW4+XG5cbiAgICAgIHthdHRhY2hLZXkyY2xpY2soPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIHF1ZXN0aW9uVHlwZVNlbGVjdG9yTW9kZWwuYWN0aW9uKCk7XG4gICAgICAgIH19XG4gICAgICAgIGNsYXNzTmFtZT1cInN2Yy1wYWdlX19xdWVzdGlvbi10eXBlLXNlbGVjdG9yXCJcbiAgICAgICAgdGl0bGU9e3RoaXMubW9kZWwuYWRkTmV3UXVlc3Rpb25UZXh0fVxuICAgICAgPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzdmMtcGFnZV9fcXVlc3Rpb24tdHlwZS1zZWxlY3Rvci1pY29uXCI+XG4gICAgICAgICAgPFN2Z0ljb25cbiAgICAgICAgICAgIGljb25OYW1lPXtxdWVzdGlvblR5cGVTZWxlY3Rvck1vZGVsLmljb25OYW1lfVxuICAgICAgICAgICAgc2l6ZT17MjR9XG4gICAgICAgICAgPjwvU3ZnSWNvbj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8UG9wdXAgbW9kZWw9e3F1ZXN0aW9uVHlwZVNlbGVjdG9yTW9kZWwucG9wdXBNb2RlbH0+PC9Qb3B1cD5cbiAgICAgIDwvYnV0dG9uPil9XG4gICAgPC9kaXY+KTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2Yy1wYWdlXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChDcmVhdG9yU3VydmV5UGFnZUNvbXBvbmVudCwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgeyBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWwsIHRvZ2dsZUhvdmVyZWQgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUmVhY3REcmFnRXZlbnQsIFJlYWN0TW91c2VFdmVudCB9IGZyb20gXCIuLi9ldmVudHNcIjtcbmltcG9ydCB7IEJhc2UsIFF1ZXN0aW9uIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQge1xuICBTdXJ2ZXlBY3Rpb25CYXIsXG4gIFJlYWN0RWxlbWVudEZhY3RvcnksXG4gIFN1cnZleUVsZW1lbnRCYXNlLFxuICBTdXJ2ZXlRdWVzdGlvbixcbiAgYXR0YWNoS2V5MmNsaWNrLFxuICBTdmdJY29uLFxuICBQb3B1cFxufSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnQsIFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzIH0gZnJvbSBcIi4vUXVlc3Rpb25cIjtcblxuZXhwb3J0IGNsYXNzIFBhbmVsQWRvcm5lckNvbXBvbmVudCBleHRlbmRzIFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICByZW5kZXJFbGVtZW50UGxhY2Vob2xkZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5tb2RlbC5pc0VtcHR5RWxlbWVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1wYW5lbF9fcGxhY2Vob2xkZXJfZnJhbWVcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtcGFuZWxfX3BsYWNlaG9sZGVyXCI+XG4gICAgICAgICAge3RoaXMubW9kZWwucGxhY2Vob2xkZXJUZXh0fVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAge3RoaXMubW9kZWwuYWxsb3dFZGl0ID8gYXR0YWNoS2V5MmNsaWNrKDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9XCJzdmMtcGFuZWxfX2FkZC1uZXctcXVlc3Rpb25cIlxuICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgdGhpcy5tb2RlbC5hZGROZXdRdWVzdGlvbigpO1xuICAgICAgICAgIH19XG4gICAgICAgID5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzdmMtdGV4dCBzdmMtdGV4dC0tbm9ybWFsIHN2Yy10ZXh0LS1ib2xkXCI+XG4gICAgICAgICAgICB7dGhpcy5tb2RlbC5hZGROZXdRdWVzdGlvblRleHR9XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj4pIDogbnVsbH1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckZvb3RlcigpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuICg8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICB7IXRoaXMubW9kZWwuaXNFbXB0eUVsZW1lbnQgJiYgdGhpcy5tb2RlbC5zdXJ2ZXlFbGVtZW50LmlzUGFuZWwgJiYgdGhpcy5tb2RlbC5hbGxvd0VkaXQgPyBhdHRhY2hLZXkyY2xpY2soPGRpdlxuICAgICAgICBjbGFzc05hbWU9XCJzdmMtcGFuZWxfX2FkZC1uZXctcXVlc3Rpb25cIlxuICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgdGhpcy5tb2RlbC5hZGROZXdRdWVzdGlvbigpO1xuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzdmMtdGV4dCBzdmMtdGV4dC0tbm9ybWFsIHN2Yy10ZXh0LS1ib2xkXCI+XG4gICAgICAgICAge3RoaXMubW9kZWwuYWRkTmV3UXVlc3Rpb25UZXh0fVxuICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAge2F0dGFjaEtleTJjbGljayg8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICB0aGlzLm1vZGVsLnF1ZXN0aW9uVHlwZVNlbGVjdG9yTW9kZWwuYWN0aW9uKCk7XG4gICAgICAgICAgfX1cbiAgICAgICAgICBjbGFzc05hbWU9XCJzdmMtcGFuZWxfX3F1ZXN0aW9uLXR5cGUtc2VsZWN0b3JcIlxuICAgICAgICAgIHRpdGxlPXt0aGlzLm1vZGVsLmFkZE5ld1F1ZXN0aW9uVGV4dH1cbiAgICAgICAgPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy1wYW5lbF9fcXVlc3Rpb24tdHlwZS1zZWxlY3Rvci1pY29uXCI+XG4gICAgICAgICAgICA8U3ZnSWNvblxuICAgICAgICAgICAgICBpY29uTmFtZT17dGhpcy5tb2RlbC5xdWVzdGlvblR5cGVTZWxlY3Rvck1vZGVsLmljb25OYW1lfVxuICAgICAgICAgICAgICBzaXplPXsyNH1cbiAgICAgICAgICAgID48L1N2Z0ljb24+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxQb3B1cCBtb2RlbD17dGhpcy5tb2RlbC5xdWVzdGlvblR5cGVTZWxlY3Rvck1vZGVsLnBvcHVwTW9kZWx9PjwvUG9wdXA+XG4gICAgICAgIDwvYnV0dG9uPil9XG4gICAgICA8L2Rpdj4pIDogbnVsbH1cblxuICAgICAge3N1cGVyLnJlbmRlckZvb3RlcigpfVxuICAgIDwvUmVhY3QuRnJhZ21lbnQ+KTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtcGFuZWxcIixcbiAgKHByb3BzOiBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFBhbmVsQWRvcm5lckNvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IHsgUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsLCB0b2dnbGVIb3ZlcmVkIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0RHJhZ0V2ZW50LCBSZWFjdE1vdXNlRXZlbnQgfSBmcm9tIFwiLi4vZXZlbnRzXCI7XG5pbXBvcnQgeyBCYXNlLCBRdWVzdGlvbiB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHtcbiAgU3VydmV5QWN0aW9uQmFyLFxuICBSZWFjdEVsZW1lbnRGYWN0b3J5LFxuICBTdXJ2ZXlFbGVtZW50QmFzZSxcbiAgU3VydmV5UXVlc3Rpb24sXG4gIGF0dGFjaEtleTJjbGljayxcbiAgU3ZnSWNvbixcbiAgUG9wdXBcbn0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzIHtcbiAgZWxlbWVudDogSlNYLkVsZW1lbnQ7XG4gIHF1ZXN0aW9uOiBRdWVzdGlvbjtcbiAgY29tcG9uZW50RGF0YTogYW55O1xufVxuXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8XG4gIFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzLFxuICBhbnlcbj4ge1xuICBwcml2YXRlIG1vZGVsVmFsdWU6IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbDtcbiAgcHJvdGVjdGVkIHJvb3RSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMubW9kZWxWYWx1ZSA9IHRoaXMuY3JlYXRlUXVlc3Rpb25WaWV3TW9kZWwoKTtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlUXVlc3Rpb25WaWV3TW9kZWwoKTogUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsIHtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbChcbiAgICAgIHRoaXMucHJvcHMuY29tcG9uZW50RGF0YSxcbiAgICAgIHRoaXMucHJvcHMucXVlc3Rpb24sXG4gICAgICBudWxsXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgZ2V0IG1vZGVsKCk6IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWxWYWx1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHN1cGVyLmNhblJlbmRlcigpICYmICF0aGlzLm1vZGVsLmlzRHJhZ2dlZDtcbiAgfVxuXG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGFsbG93SW50ZXJhY3Rpb25zID0gdGhpcy5tb2RlbC5zdXJ2ZXlFbGVtZW50XG4gICAgICAuaXNJbnRlcmFjdGl2ZURlc2lnbkVsZW1lbnQ7XG4gICAgY29uc3QgY29udGVudCA9IHRoaXMucmVuZGVyQ29udGVudChhbGxvd0ludGVyYWN0aW9ucyk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgcmVmPXt0aGlzLnJvb3RSZWZ9XG4gICAgICAgIGRhdGEtc3YtZHJvcC10YXJnZXQtc3VydmV5LWVsZW1lbnQ9e3RoaXMubW9kZWwuc3VydmV5RWxlbWVudC5uYW1lIHx8IG51bGx9XG4gICAgICAgIGNsYXNzTmFtZT17XCJzdmMtcXVlc3Rpb25fX2Fkb3JuZXJcIiArIHRoaXMubW9kZWwucm9vdENzcygpfVxuICAgICAgICBvbk1vdXNlT3V0PXtlID0+IGFsbG93SW50ZXJhY3Rpb25zICYmIHRvZ2dsZUhvdmVyZWQoZS5uYXRpdmVFdmVudCwgZS5jdXJyZW50VGFyZ2V0KX1cbiAgICAgICAgb25Nb3VzZU92ZXI9e2UgPT4gYWxsb3dJbnRlcmFjdGlvbnMgJiYgdG9nZ2xlSG92ZXJlZChlLm5hdGl2ZUV2ZW50LCBlLmN1cnJlbnRUYXJnZXQpfVxuICAgICAgPlxuICAgICAgICB7Y29udGVudH1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckNvbnRlbnQoYWxsb3dJbnRlcmFjdGlvbnM6IGJvb2xlYW4pOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGNvbnRlbnQgPSB0aGlzLnJlbmRlckVsZW1lbnRDb250ZW50KCk7XG4gICAgaWYgKCFhbGxvd0ludGVyYWN0aW9ucykgcmV0dXJuIGNvbnRlbnQ7XG4gICAgcmV0dXJuIGF0dGFjaEtleTJjbGljayhcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtcInN2Yy1xdWVzdGlvbl9fY29udGVudCBcIiArIHRoaXMubW9kZWwuY3NzKCl9XG4gICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB0aGlzLm1vZGVsLnNlbGVjdCh0aGlzLm1vZGVsLCBuZXcgUmVhY3RNb3VzZUV2ZW50KGUpKX1cbiAgICAgID5cbiAgICAgICAge3RoaXMucmVuZGVySGVhZGVyKCl9XG4gICAgICAgIHtjb250ZW50fVxuICAgICAgICB7dGhpcy5yZW5kZXJGb290ZXIoKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckhlYWRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChcInN2Yy1xdWVzdGlvbi1oZWFkZXJcIiwgeyBtb2RlbDogdGhpcy5tb2RlbCB9KTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRm9vdGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KFwic3ZjLXF1ZXN0aW9uLWZvb3RlclwiLCB7IGNsYXNzTmFtZTogXCJzdmMtcXVlc3Rpb25fX2NvbnRlbnQtYWN0aW9uc1wiLCBtb2RlbDogdGhpcy5tb2RlbCB9KTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudENvbnRlbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICB7dGhpcy5wcm9wcy5lbGVtZW50fVxuICAgICAgICB7dGhpcy5yZW5kZXJFbGVtZW50UGxhY2Vob2xkZXIoKX1cbiAgICAgIDwvPlxuICAgICk7XG4gIH1cbiAgcmVuZGVyRWxlbWVudFBsYWNlaG9sZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMubW9kZWwuaXNFbXB0eUVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtcGFuZWxfX3BsYWNlaG9sZGVyX2ZyYW1lXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXBhbmVsX19wbGFjZWhvbGRlclwiPlxuICAgICAgICAgIHt0aGlzLm1vZGVsLnBsYWNlaG9sZGVyVGV4dH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy1xdWVzdGlvblwiLFxuICAocHJvcHM6IFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50LCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBJdGVtVmFsdWUsIFF1ZXN0aW9uU2VsZWN0QmFzZSwgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnksIFJlYWN0U3VydmV5RWxlbWVudHNXcmFwcGVyIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHtcbiAgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50LFxuICBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wc1xufSBmcm9tIFwiLi9RdWVzdGlvblwiO1xuXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25Ecm9wZG93bkFkb3JuZXJDb21wb25lbnQgZXh0ZW5kcyBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnQge1xuICByZW5kZXJFbGVtZW50UGxhY2Vob2xkZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHF1ZXN0aW9uID0gdGhpcy5wcm9wcy5xdWVzdGlvbiBhcyBRdWVzdGlvblNlbGVjdEJhc2U7XG4gICAgY29uc3QgdGV4dFN0eWxlID0gKHRoaXMucHJvcHMucXVlc3Rpb24gYXMgYW55KS50ZXh0U3R5bGU7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXF1ZXN0aW9uX19kcm9wZG93bi1jaG9pY2VzXCI+XG4gICAgICAgIHsocXVlc3Rpb24udmlzaWJsZUNob2ljZXMgfHwgW10pLm1hcChcbiAgICAgICAgICAoaXRlbTogSXRlbVZhbHVlLCBpbmRleDogbnVtYmVyKSA9PiAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cInN2Yy1xdWVzdGlvbl9fZHJvcGRvd24tY2hvaWNlXCJcbiAgICAgICAgICAgICAga2V5PXtgZWRpdGFibGVfY2hvaWNlXyR7aW5kZXh9YH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge1JlYWN0U3VydmV5RWxlbWVudHNXcmFwcGVyLndyYXBJdGVtVmFsdWUocXVlc3Rpb24uc3VydmV5IGFzIFN1cnZleU1vZGVsLFxuICAgICAgICAgICAgICAgIFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICAgIFwic3VydmV5LXJhZGlvZ3JvdXAtaXRlbVwiLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbjogcXVlc3Rpb24sXG4gICAgICAgICAgICAgICAgICAgIGNzc0NsYXNzZXM6IHF1ZXN0aW9uLmNzc0NsYXNzZXMsXG4gICAgICAgICAgICAgICAgICAgIGlzRGlzcGxheU1vZGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGl0ZW06IGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgIHRleHRTdHlsZTogdGV4dFN0eWxlLFxuICAgICAgICAgICAgICAgICAgICBpbmRleDogaW5kZXgsXG4gICAgICAgICAgICAgICAgICAgIGlzQ2hlY2tlZDogcXVlc3Rpb24udmFsdWUgPT09IGl0ZW0udmFsdWVcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIHF1ZXN0aW9uLFxuICAgICAgICAgICAgICAgIGl0ZW1cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIClcbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLWRyb3Bkb3duLXF1ZXN0aW9uXCIsXG4gIChwcm9wczogUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChRdWVzdGlvbkRyb3Bkb3duQWRvcm5lckNvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IHsgUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsLCB0b2dnbGVIb3ZlcmVkIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0RHJhZ0V2ZW50LCBSZWFjdE1vdXNlRXZlbnQgfSBmcm9tIFwiLi4vZXZlbnRzXCI7XG5pbXBvcnQgeyBCYXNlLCBRdWVzdGlvbiB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHtcbiAgU3VydmV5QWN0aW9uQmFyLFxuICBSZWFjdEVsZW1lbnRGYWN0b3J5LFxuICBTdXJ2ZXlFbGVtZW50QmFzZSxcbiAgU3VydmV5UXVlc3Rpb24sXG4gIGF0dGFjaEtleTJjbGljayxcbiAgU3ZnSWNvbixcbiAgUG9wdXBcbn0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXN0aW9uV3JhcHBlckZvb3RlclByb3BzIHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBtb2RlbDogUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsO1xufVxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uV3JhcHBlckZvb3RlciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxRdWVzdGlvbldyYXBwZXJGb290ZXJQcm9wcywgYW55PiB7XG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuICg8ZGl2IGNsYXNzTmFtZT17dGhpcy5wcm9wcy5jbGFzc05hbWV9PlxuICAgICAgPFN1cnZleUFjdGlvbkJhciBtb2RlbD17dGhpcy5wcm9wcy5tb2RlbC5hY3Rpb25Db250YWluZXJ9PjwvU3VydmV5QWN0aW9uQmFyPlxuICAgIDwvZGl2Pik7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLXF1ZXN0aW9uLWZvb3RlclwiLFxuICAocHJvcHM6IFF1ZXN0aW9uV3JhcHBlckZvb3RlclByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUXVlc3Rpb25XcmFwcGVyRm9vdGVyLCBwcm9wcyk7XG4gIH1cbik7XG5cbiIsImltcG9ydCB7IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbCwgdG9nZ2xlSG92ZXJlZCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSZWFjdERyYWdFdmVudCwgUmVhY3RNb3VzZUV2ZW50IH0gZnJvbSBcIi4uL2V2ZW50c1wiO1xuaW1wb3J0IHsgQmFzZSwgUXVlc3Rpb24gfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7XG4gIFN1cnZleUFjdGlvbkJhcixcbiAgUmVhY3RFbGVtZW50RmFjdG9yeSxcbiAgU3VydmV5RWxlbWVudEJhc2UsXG4gIFN1cnZleVF1ZXN0aW9uLFxuICBhdHRhY2hLZXkyY2xpY2ssXG4gIFN2Z0ljb24sXG4gIFBvcHVwXG59IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcblxuZXhwb3J0IGludGVyZmFjZSBRdWVzdGlvbldyYXBwZXJIZWFkZXJQcm9wcyB7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgbW9kZWw6IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbDtcbn1cblxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uV3JhcHBlckhlYWRlciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxRdWVzdGlvbldyYXBwZXJIZWFkZXJQcm9wcywgYW55PiB7XG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLnByb3BzLm1vZGVsLmFsbG93RHJhZ2dpbmcpIHJldHVybiBudWxsO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17XCJzdmMtcXVlc3Rpb25fX2RyYWctYXJlYVwifVxuICAgICAgICBvblBvaW50ZXJEb3duPXsoZXZlbnQ6IGFueSkgPT5cbiAgICAgICAgICB0aGlzLnByb3BzLm1vZGVsLm9uUG9pbnRlckRvd24oZXZlbnQpXG4gICAgICAgIH1cbiAgICAgID5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17XCJzdmMtcXVlc3Rpb25fX2RyYWctZWxlbWVudFwifVxuICAgICAgICA+PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy1xdWVzdGlvbi1oZWFkZXJcIixcbiAgKHByb3BzOiBRdWVzdGlvbldyYXBwZXJIZWFkZXJQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFF1ZXN0aW9uV3JhcHBlckhlYWRlciwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IHtcbiAgUXVlc3Rpb25JbWFnZUFkb3JuZXJWaWV3TW9kZWwsXG4gIFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbFxufSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgYXR0YWNoS2V5MmNsaWNrLCBSZWFjdEVsZW1lbnRGYWN0b3J5LCBTdmdJY29uIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHtcbiAgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50LFxuICBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wc1xufSBmcm9tIFwiLi9RdWVzdGlvblwiO1xuXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25JbWFnZUFkb3JuZXJDb21wb25lbnQgZXh0ZW5kcyBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5yb290UmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZVF1ZXN0aW9uVmlld01vZGVsKCk6IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbCB7XG4gICAgcmV0dXJuIG5ldyBRdWVzdGlvbkltYWdlQWRvcm5lclZpZXdNb2RlbChcbiAgICAgIHRoaXMucHJvcHMuY29tcG9uZW50RGF0YSxcbiAgICAgIHRoaXMucHJvcHMucXVlc3Rpb24gYXMgYW55LFxuICAgICAgbnVsbCxcbiAgICAgIG51bGxcbiAgICApO1xuICB9XG4gIHB1YmxpYyBnZXQgaW1hZ2VNb2RlbCgpOiBRdWVzdGlvbkltYWdlQWRvcm5lclZpZXdNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWwgYXMgUXVlc3Rpb25JbWFnZUFkb3JuZXJWaWV3TW9kZWw7XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICB0aGlzLmltYWdlTW9kZWwucXVlc3Rpb25Sb290ID0gdGhpcy5yb290UmVmLmN1cnJlbnQ7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckhlYWRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuICg8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICB0YWJJbmRleD17LTF9XG4gICAgICAgIGFjY2VwdD1cImltYWdlLypcIlxuICAgICAgICBjbGFzc05hbWU9XCJzdmMtY2hvb3NlLWZpbGUtaW5wdXRcIlxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgIHBvc2l0aW9uOiBcImFic29sdXRlXCIsXG4gICAgICAgICAgb3BhY2l0eTogMCxcbiAgICAgICAgICB3aWR0aDogXCIxcHhcIixcbiAgICAgICAgICBoZWlnaHQ6IFwiMXB4XCIsXG4gICAgICAgICAgb3ZlcmZsb3c6IFwiaGlkZGVuXCJcbiAgICAgICAgfX1cbiAgICAgIC8+XG5cbiAgICAgIHtzdXBlci5yZW5kZXJIZWFkZXIoKX1cbiAgICA8L1JlYWN0LkZyYWdtZW50Pik7XG4gIH1cbiAgcmVuZGVyRWxlbWVudFBsYWNlaG9sZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtaW1hZ2UtcXVlc3Rpb24tY29udHJvbHNcIj5cbiAgICAgICAge3RoaXMubW9kZWwuYWxsb3dFZGl0ID8gYXR0YWNoS2V5MmNsaWNrKDxzcGFuXG4gICAgICAgICAgY2xhc3NOYW1lPVwic3ZjLWltYWdlLXF1ZXN0aW9uLWNvbnRyb2xzX19idXR0b24gc3ZjLWltYWdlLXF1ZXN0aW9uLWNvbnRyb2xzX19jaG9vc2UtZmlsZVwiXG4gICAgICAgICAgb25DbGljaz17KCkgPT4gdGhpcy5pbWFnZU1vZGVsLmNob29zZUZpbGUodGhpcy5pbWFnZU1vZGVsKX1cbiAgICAgICAgPlxuICAgICAgICAgIDxTdmdJY29uIHNpemU9ezI0fSBpY29uTmFtZT17XCJpY29uLWZpbGVcIn0+PC9TdmdJY29uPlxuICAgICAgICA8L3NwYW4+KSA6IG51bGx9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy1pbWFnZS1xdWVzdGlvblwiLFxuICAocHJvcHM6IFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUXVlc3Rpb25JbWFnZUFkb3JuZXJDb21wb25lbnQsIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCB7XG4gIFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbCxcbiAgUXVlc3Rpb25SYXRpbmdBZG9ybmVyVmlld01vZGVsXG59IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge1xuICBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnQsXG4gIFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzXG59IGZyb20gXCIuL1F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBhdHRhY2hLZXkyY2xpY2ssIFJlYWN0RWxlbWVudEZhY3RvcnksIFN2Z0ljb24gfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5cbmV4cG9ydCBjbGFzcyBRdWVzdGlvblJhdGluZ0Fkb3JuZXJDb21wb25lbnQgZXh0ZW5kcyBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnQge1xuICBwcm90ZWN0ZWQgY3JlYXRlUXVlc3Rpb25WaWV3TW9kZWwoKTogUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsIHtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uUmF0aW5nQWRvcm5lclZpZXdNb2RlbChcbiAgICAgIHRoaXMucHJvcHMuY29tcG9uZW50RGF0YSxcbiAgICAgIHRoaXMucHJvcHMucXVlc3Rpb24gYXMgYW55LFxuICAgICAgbnVsbFxuICAgICk7XG4gIH1cbiAgcHVibGljIGdldCByYXRpbmdNb2RlbCgpOiBRdWVzdGlvblJhdGluZ0Fkb3JuZXJWaWV3TW9kZWwge1xuICAgIHJldHVybiB0aGlzLm1vZGVsIGFzIFF1ZXN0aW9uUmF0aW5nQWRvcm5lclZpZXdNb2RlbDtcbiAgfVxuXG4gIHByb3RlY3RlZCByZW5kZXJGb290ZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IG1vZGVsID0gdGhpcy5yYXRpbmdNb2RlbDtcbiAgICByZXR1cm4gKDw+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1yYXRpbmctcXVlc3Rpb24tY29udHJvbHMgc3ZjLWl0ZW0tdmFsdWUtY29udHJvbHNcIj5cbiAgICAgICAge21vZGVsLmFsbG93UmVtb3ZlID8gYXR0YWNoS2V5MmNsaWNrKDxzcGFuXG4gICAgICAgICAgY2xhc3NOYW1lPVwic3ZjLWl0ZW0tdmFsdWUtY29udHJvbHNfX2J1dHRvbiBzdmMtaXRlbS12YWx1ZS1jb250cm9sc19fcmVtb3ZlXCJcbiAgICAgICAgICBhcmlhLWxhYmVsPXttb2RlbC5yZW1vdmVUb29sdGlwfVxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IG1vZGVsLnJlbW92ZUl0ZW0obW9kZWwpfVxuICAgICAgICA+XG4gICAgICAgICAgPFN2Z0ljb24gc2l6ZT17MTZ9IGljb25OYW1lPXtcImljb24tcmVtb3ZlXzE2eDE2XCJ9PjwvU3ZnSWNvbj5cbiAgICAgICAgPC9zcGFuPikgOiBudWxsfVxuICAgICAgICB7bW9kZWwuYWxsb3dBZGQgPyBhdHRhY2hLZXkyY2xpY2soPHNwYW5cbiAgICAgICAgICBjbGFzc05hbWU9XCJzdmMtaXRlbS12YWx1ZS1jb250cm9sc19fYnV0dG9uIHN2Yy1pdGVtLXZhbHVlLWNvbnRyb2xzX19hZGRcIlxuICAgICAgICAgIGFyaWEtbGFiZWw9e21vZGVsLmFkZFRvb2x0aXB9XG4gICAgICAgICAgb25DbGljaz17KCkgPT4gbW9kZWwuYWRkSXRlbShtb2RlbCl9XG4gICAgICAgID5cbiAgICAgICAgICA8U3ZnSWNvbiBzaXplPXsxNn0gaWNvbk5hbWU9e1wiaWNvbi1hZGRfMTZ4MTZcIn0+PC9TdmdJY29uPlxuICAgICAgICA8L3NwYW4+KSA6IG51bGx9XG4gICAgICA8L2Rpdj5cbiAgICAgIHtzdXBlci5yZW5kZXJGb290ZXIoKX1cbiAgICA8Lz4pO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy1yYXRpbmctcXVlc3Rpb25cIixcbiAgKHByb3BzOiBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFF1ZXN0aW9uUmF0aW5nQWRvcm5lckNvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IHtcbiAgUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsXG59IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge1xuICBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnQsXG4gIFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzXG59IGZyb20gXCIuL1F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBhdHRhY2hLZXkyY2xpY2ssIFJlYWN0RWxlbWVudEZhY3RvcnksIFN2Z0ljb24gfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5cbmV4cG9ydCBjbGFzcyBRdWVzdGlvbldpZGdldEFkb3JuZXJDb21wb25lbnQgZXh0ZW5kcyBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnQge1xuICBwcm90ZWN0ZWQgY3JlYXRlUXVlc3Rpb25WaWV3TW9kZWwoKTogUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsIHtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbChcbiAgICAgIHRoaXMucHJvcHMuY29tcG9uZW50RGF0YSxcbiAgICAgIHRoaXMucHJvcHMucXVlc3Rpb24gYXMgYW55LFxuICAgICAgbnVsbFxuICAgICk7XG4gIH1cbiAgcHVibGljIGdldCB3aWRnZXRNb2RlbCgpOiBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWwge1xuICAgIHJldHVybiB0aGlzLm1vZGVsIGFzIFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudENvbnRlbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17XCJzdmMtd2lkZ2V0X19jb250ZW50XCJ9XG4gICAgICA+XG4gICAgICAgIHt0aGlzLnByb3BzLmVsZW1lbnR9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy13aWRnZXQtcXVlc3Rpb25cIixcbiAgKHByb3BzOiBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFF1ZXN0aW9uV2lkZ2V0QWRvcm5lckNvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IHsgUm93Vmlld01vZGVsIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEJhc2UsIFF1ZXN0aW9uUm93TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnksIFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMgfSBmcm9tIFwiLi9RdWVzdGlvblwiO1xuXG5pbnRlcmZhY2UgUm93V3JhcHBlckNvbXBvbmVudFByb3BzIHtcbiAgZWxlbWVudDogSlNYLkVsZW1lbnQ7XG4gIGNvbXBvbmVudERhdGE6IGFueTtcbiAgcm93OiBRdWVzdGlvblJvd01vZGVsO1xufVxuXG5leHBvcnQgY2xhc3MgUm93V3JhcHBlciBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPFxuICBSb3dXcmFwcGVyQ29tcG9uZW50UHJvcHMsXG4gIGFueVxuPiB7XG4gIG1vZGVsOiBSb3dWaWV3TW9kZWw7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBSb3dXcmFwcGVyQ29tcG9uZW50UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5tb2RlbCA9IG5ldyBSb3dWaWV3TW9kZWwoXG4gICAgICB0aGlzLnByb3BzLmNvbXBvbmVudERhdGEuY3JlYXRvcixcbiAgICAgIHRoaXMucHJvcHMucm93LFxuICAgICAgbnVsbFxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuXG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAga2V5PXtcInN2Yy1yb3ctXCIgKyB0aGlzLnByb3BzLnJvdy5pZH1cbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLm1vZGVsLmNzc0NsYXNzZXN9XG4gICAgICA+XG4gICAgICAgIHt0aGlzLnByb3BzLmVsZW1lbnR9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy1yb3dcIixcbiAgKHByb3BzOiBSb3dXcmFwcGVyQ29tcG9uZW50UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChSb3dXcmFwcGVyLCBwcm9wcyk7XG4gIH1cbik7XG4iLCJkZWNsYXJlIHZhciBSZWZsZWN0OmFueTtcblxuZXhwb3J0IHZhciBfX2RlY29yYXRlID0gZnVuY3Rpb24oXG4gIGRlY29yYXRvcnM6IGFueSxcbiAgdGFyZ2V0OiBhbnksXG4gIGtleTogYW55LFxuICBkZXNjOiBhbnlcbikge1xuICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsXG4gICAgciA9XG4gICAgICBjIDwgM1xuICAgICAgICA/IHRhcmdldFxuICAgICAgICA6IGRlc2MgPT09IG51bGxcbiAgICAgICAgICA/IChkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkpXG4gICAgICAgICAgOiBkZXNjLFxuICAgIGQ7XG4gIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKVxuICAgIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgZWxzZVxuICAgIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKVxuICAgICAgaWYgKChkID0gZGVjb3JhdG9yc1tpXSkpXG4gICAgICAgIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufTtcblxuZXhwb3J0IHZhciBfX2Fzc2lnbiA9XG4gIE9iamVjdFtcImFzc2lnblwiXSB8fFxuICBmdW5jdGlvbih0YXJnZXQpIHtcbiAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICBmb3IgKHZhciBwIGluIHMpXG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRhcmdldFtwXSA9IHNbcF07XG4gICAgfVxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2V4dGVuZHModGhpc0NsYXNzLCBiYXNlQ2xhc3MpIHtcbiAgZm9yICh2YXIgcCBpbiBiYXNlQ2xhc3MpXG4gICAgaWYgKGJhc2VDbGFzcy5oYXNPd25Qcm9wZXJ0eShwKSkgdGhpc0NsYXNzW3BdID0gYmFzZUNsYXNzW3BdO1xuICBmdW5jdGlvbiBfXygpIHtcbiAgICB0aGlzLmNvbnN0cnVjdG9yID0gdGhpc0NsYXNzO1xuICB9XG4gIHRoaXNDbGFzcy5wcm90b3R5cGUgPVxuICAgIGJhc2VDbGFzcyA9PT0gbnVsbFxuICAgICAgPyBPYmplY3QuY3JlYXRlKGJhc2VDbGFzcylcbiAgICAgIDogKChfXy5wcm90b3R5cGUgPSBiYXNlQ2xhc3MucHJvdG90eXBlKSwgbmV3IF9fKCkpO1xufVxuXG5leHBvcnQgdmFyIF9fc3ByZWFkQXJyYXlzID0gZnVuY3Rpb24gKCkge1xuICBmb3IgKHZhciBzID0gMCwgaSA9IDAsIGlsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGlsOyBpKyspIHMgKz0gYXJndW1lbnRzW2ldLmxlbmd0aDtcbiAgZm9yICh2YXIgciA9IEFycmF5KHMpLCBrID0gMCwgaSA9IDA7IGkgPCBpbDsgaSsrKVxuICAgIGZvciAodmFyIGEgPSBhcmd1bWVudHNbaV0sIGogPSAwLCBqbCA9IGEubGVuZ3RoOyBqIDwgamw7IGorKywgaysrKVxuICAgICAgcltrXSA9IGFbal07XG4gIHJldHVybiByO1xufTtcbiIsImV4cG9ydCBsZXQgVmVyc2lvbjogc3RyaW5nO1xuVmVyc2lvbiA9IGAke3Byb2Nlc3MuZW52LlZFUlNJT059YDtcblxuLy8gaW1wb3J0IFwiQHN1cnZleS9jcmVhdG9yL3N1cnZleS1jcmVhdG9yLWNvcmUuY3NzXCI7XG5cbmV4cG9ydCAqIGZyb20gXCIuLi9TdXJ2ZXlDcmVhdG9yXCI7XG5cbmV4cG9ydCAqIGZyb20gXCIuLi9hZG9ybmVycy9Sb3dcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9hZG9ybmVycy9RdWVzdGlvblwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL2Fkb3JuZXJzL1F1ZXN0aW9uSGVhZGVyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vYWRvcm5lcnMvUXVlc3Rpb25Gb290ZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9hZG9ybmVycy9RdWVzdGlvbkRyb3Bkb3duXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vYWRvcm5lcnMvUXVlc3Rpb25JbWFnZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL2Fkb3JuZXJzL1F1ZXN0aW9uUmF0aW5nXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vYWRvcm5lcnMvUXVlc3Rpb25XaWRnZXRcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9hZG9ybmVycy9DZWxsUXVlc3Rpb25cIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9hZG9ybmVycy9DZWxsUXVlc3Rpb25Ecm9wZG93blwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL2Fkb3JuZXJzL1BhZ2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9hZG9ybmVycy9QYW5lbFwiO1xuXG5leHBvcnQgKiBmcm9tIFwiLi4vTG9nb0ltYWdlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vUXVlc3Rpb25MaW5rVmFsdWVcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9RdWVzdGlvbkVtYmVkZGVkU3VydmV5XCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vUXVlc3Rpb25FZGl0b3JDb250ZW50XCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vSXRlbVZhbHVlV3JhcHBlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL0ltYWdlSXRlbVZhbHVlV3JhcHBlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL01hdHJpeENlbGxXcmFwcGVyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vUmVzdWx0c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4uL3Rvb2xib3gvVG9vbGJveEl0ZW1cIjtcbmV4cG9ydCAqIGZyb20gXCIuLi90b29sYm94L1Rvb2xib3hcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi90b29sYm94L0FkYXB0aXZlVG9vbGJveFwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL1RhYmJlZE1lbnVcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9Ob3RpZmllclwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL05hdmlnYXRpb25cIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9TaWRlQmFyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vdGFicy9UcmFuc2xhdGlvbkxpbmVTa2VsZXRvblwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL0FjdGlvbkJ1dHRvblwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL1N0cmluZ0VkaXRvclwiO1xuXG5leHBvcnQgKiBmcm9tIFwiLi4vdGFicy9EZXNpZ25lclwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL3RhYnMvRW1iZWRcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi90YWJzL0pzb25FZGl0b3JBY2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi90YWJzL0pzb25FZGl0b3JUZXh0YXJlYVwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL3RhYnMvTG9naWNcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi90YWJzL1ByZXZpZXdcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi90YWJzL1RyYW5zbGF0aW9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vdGFicy9TdXJ2ZXlTaW11bGF0b3JcIjtcblxuZXhwb3J0ICogZnJvbSBcIi4uL2V2ZW50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4uL09iamVjdFNlbGVjdG9yXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vUHJvcGVydHlHcmlkXCI7XG5cbmV4cG9ydCB7IGVkaXRvckxvY2FsaXphdGlvbiwgbG9jYWxpemF0aW9uIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmV4cG9ydCB7IHNldHRpbmdzIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmV4cG9ydCB7IHN2Z0J1bmRsZSB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5leHBvcnQgeyBTdXJ2ZXlMb2dpYywgU3VydmV5TG9naWNVSSB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkVkaXRvckRlZmluaXRpb24gfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuZXhwb3J0IHsgSVN1cnZleUNyZWF0b3JPcHRpb25zLCBJUHJvcGVydHlHcmlkRWRpdG9yIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmV4cG9ydCB7IFRvb2xib3hUb29sVmlld01vZGVsLCBQcm9wZXJ0eUdyaWRFZGl0b3JDb2xsZWN0aW9uIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmV4cG9ydCB7IFN0eWxlc01hbmFnZXIgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiOyIsImltcG9ydCB7IElQb3J0YWJsZURyYWdFdmVudCwgSVBvcnRhYmxlTW91c2VFdmVudCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5cbmV4cG9ydCBjbGFzcyBSZWFjdE1vdXNlRXZlbnQgaW1wbGVtZW50cyBJUG9ydGFibGVNb3VzZUV2ZW50IHtcbiAgY29uc3RydWN0b3IocHVibGljIGV2ZW50OiBSZWFjdC5Nb3VzZUV2ZW50PEhUTUxEaXZFbGVtZW50LCBNb3VzZUV2ZW50Pikge31cbiAgc3RvcFByb3BhZ2F0aW9uKCkge1xuICAgIHRoaXMuZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgLy90aGlzLmV2ZW50Lm5hdGl2ZUV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIC8vdGhpcy5ldmVudC5uYXRpdmVFdmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgfVxuICBwcmV2ZW50RGVmYXVsdCgpIHtcbiAgICB0aGlzLmV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgLy90aGlzLmV2ZW50Lm5hdGl2ZUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cbiAgZ2V0IGNhbmNlbEJ1YmJsZSgpOiBib29sZWFuIHtcbiAgICAvL3JldHVybiB0aGlzLmV2ZW50LmNhbmNlbEJ1YmJsZTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgc2V0IGNhbmNlbEJ1YmJsZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIC8vdGhpcy5ldmVudC5jYW5jZWxCdWJibGUgPSB2YWx1ZTtcbiAgfVxuICBnZXQgdGFyZ2V0KCk6IEV2ZW50VGFyZ2V0IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuZXZlbnQudGFyZ2V0O1xuICB9XG4gIGdldCBjdXJyZW50VGFyZ2V0KCk6IEV2ZW50VGFyZ2V0IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuZXZlbnQuY3VycmVudFRhcmdldDtcbiAgfVxuICBnZXQgY2xpZW50WCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmV2ZW50LmNsaWVudFg7XG4gIH1cbiAgZ2V0IGNsaWVudFkoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5ldmVudC5jbGllbnRZO1xuICB9XG4gIGdldCBvZmZzZXRYKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZXZlbnQubmF0aXZlRXZlbnQub2Zmc2V0WDtcbiAgfVxuICBnZXQgb2Zmc2V0WSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmV2ZW50Lm5hdGl2ZUV2ZW50Lm9mZnNldFk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJlYWN0RHJhZ0V2ZW50IGV4dGVuZHMgUmVhY3RNb3VzZUV2ZW50XG4gIGltcGxlbWVudHMgSVBvcnRhYmxlRHJhZ0V2ZW50IHtcbiAgY29uc3RydWN0b3IocHVibGljIGV2ZW50OiBSZWFjdC5EcmFnRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSB7XG4gICAgc3VwZXIoZXZlbnQpO1xuICB9XG5cbiAgZ2V0IGRhdGFUcmFuc2ZlcigpOiBEYXRhVHJhbnNmZXIge1xuICAgIHJldHVybiB0aGlzLmV2ZW50LmRhdGFUcmFuc2ZlcjtcbiAgfVxufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQmFzZSwgU3VydmV5TW9kZWwsIFBhZ2VNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHtcbiAgUmVhY3RFbGVtZW50RmFjdG9yeSxcbiAgU3VydmV5RWxlbWVudEJhc2UsXG4gIFN1cnZleUhlYWRlclxufSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBDcmVhdG9yQmFzZSwgVGFiRGVzaWduZXJWaWV3TW9kZWwgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5UGFnZU5hdmlnYXRvciB9IGZyb20gXCIuLi9QYWdlTmF2aWdhdG9yXCI7XG5pbXBvcnQgeyBTdXJ2ZXlOYXZpZ2F0aW9uIH0gZnJvbSBcIi4uL05hdmlnYXRpb25cIjtcblxuaW50ZXJmYWNlIElUYWJEZXNpZ25lckNvbXBvbmVudFByb3BzIHtcbiAgZGF0YTogVGFiRGVzaWduZXJWaWV3TW9kZWw7XG59XG5cbmV4cG9ydCBjbGFzcyBUYWJEZXNpZ25lckNvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPElUYWJEZXNpZ25lckNvbXBvbmVudFByb3BzLCBhbnk+IHtcbiAgcHJpdmF0ZSBnZXQgbW9kZWwoKTogVGFiRGVzaWduZXJWaWV3TW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmRhdGE7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBjcmVhdG9yKCk6IENyZWF0b3JCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbC5jcmVhdG9yO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnRzKCk6IEFycmF5PEJhc2U+IHtcbiAgICByZXR1cm4gW3RoaXMubW9kZWwsIHRoaXMubW9kZWwuc3VydmV5XTtcbiAgfVxuICBwcml2YXRlIHJlbmRlck5ld1BhZ2UoY2xhc3NOYW1lOiBzdHJpbmcsIGtleTogc3RyaW5nID0gXCJcIikge1xuICAgIHJldHVybiAoXG4gICAgICA8UmVhY3QuRnJhZ21lbnQga2V5PXtrZXl9PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICAgICAgZGF0YS1zdi1kcm9wLXRhcmdldC1zdXJ2ZXktZWxlbWVudD17XCJuZXdHaG9zdFBhZ2VcIn1cbiAgICAgICAgPlxuICAgICAgICAgIHt0aGlzLnJlbmRlclBhZ2UodGhpcy5tb2RlbC5uZXdQYWdlKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L1JlYWN0LkZyYWdtZW50Pik7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlclBhZ2VzKCk6IEpTWC5FbGVtZW50W10ge1xuICAgIGNvbnN0IHN1cnZleVBhZ2VzOiBKU1guRWxlbWVudFtdID0gdGhpcy5jcmVhdG9yLnN1cnZleS5wYWdlcy5tYXAoXG4gICAgICAocGFnZTogUGFnZU1vZGVsLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPXtcInN2Yy1wYWdlXCJ9XG4gICAgICAgICAgICBkYXRhLXN2LWRyb3AtdGFyZ2V0LXBhZ2U9e3BhZ2UubmFtZX1cbiAgICAgICAgICAgIGRhdGEtc3YtZHJvcC10YXJnZXQtc3VydmV5LWVsZW1lbnQ9e3BhZ2UubmFtZX1cbiAgICAgICAgICAgIGtleT17cGFnZS5pZCArIFwiLVwiICsgaW5kZXh9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge3RoaXMucmVuZGVyUGFnZShwYWdlKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgaWYgKHRoaXMubW9kZWwuc2hvd05ld1BhZ2UpIHtcbiAgICAgIHN1cnZleVBhZ2VzLnB1c2godGhpcy5yZW5kZXJOZXdQYWdlKFwic3ZjLXBhZ2VcIiwgdGhpcy5tb2RlbC5uZXdQYWdlLmlkICsgXCItZ2hvc3QtbmV3LXBhZ2VcIikpO1xuICAgIH1cbiAgICByZXR1cm4gc3VydmV5UGFnZXM7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlclBhZ2UocGFnZVY6IFBhZ2VNb2RlbCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KFwic3ZjLXBhZ2VcIiwgeyBzdXJ2ZXk6IHRoaXMuY3JlYXRvci5zdXJ2ZXksIHBhZ2U6IHBhZ2VWLCBjcmVhdG9yOiB0aGlzLmNyZWF0b3IgfSk7XG4gIH1cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgZGVzaWduZXJUYWJDbGFzc05hbWUgPSBcInN2Yy10YWItZGVzaWduZXIgXCIgKyB0aGlzLm1vZGVsLmdldFJvb3RDc3MoKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWZsZXgtY29sdW1uXCI+XG4gICAgICAgICAge3RoaXMubW9kZWwuaXNUb29sYm94VmlzaWJsZSA/IFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChcInN2Yy1hZGFwdGl2ZS10b29sYm94XCIsIHsgbW9kZWw6IHRoaXMuY3JlYXRvciB9KSA6IG51bGx9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17ZGVzaWduZXJUYWJDbGFzc05hbWV9IG9uQ2xpY2s9eygpID0+IHRoaXMubW9kZWwuY2xpY2tEZXNpZ25lcigpfT5cbiAgICAgICAgICB7dGhpcy5tb2RlbC5zaG93UGxhY2Vob2xkZXIgPyB0aGlzLnJlbmRlclBsYWNlSG9sZGVyKCkgOiB0aGlzLnJlbmRlclRhYkNvbnRlbnQoKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgICk7XG4gIH1cblxuICByZW5kZXJQbGFjZUhvbGRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuICg8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1kZXNpZ25lcl9fcGxhY2Vob2xkZXItY29udGFpbmVyXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy1kZXNpZ25lci1wbGFjZWhvbGRlci10ZXh0IHN2Yy10ZXh0IHN2Yy10ZXh0LS1ub3JtYWxcIj5cbiAgICAgICAgICB7dGhpcy5tb2RlbC5wbGFjZWhvbGRlclRleHR9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAge3RoaXMucmVuZGVyTmV3UGFnZShcInN2Yy1kZXNpZ25lci1wbGFjZWhvbGRlci1wYWdlXCIpfVxuICAgICAgPC9kaXY+XG4gICAgPC9SZWFjdC5GcmFnbWVudD4pO1xuICB9XG5cbiAgcmVuZGVyVGFiQ29udGVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3Qgc3VydmV5OiBTdXJ2ZXlNb2RlbCA9IHRoaXMuY3JlYXRvci5zdXJ2ZXk7XG5cbiAgICByZXR1cm4gKDxSZWFjdC5GcmFnbWVudD5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLm1vZGVsLmdldERlc2lnbmVyQ3NzKCl9PlxuICAgICAgICB7IXRoaXMuY3JlYXRvci5hbGxvd0VkaXRTdXJ2ZXlUaXRsZSA/IG51bGwgOlxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8U3VydmV5SGVhZGVyIHN1cnZleT17c3VydmV5fT48L1N1cnZleUhlYWRlcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICA8U3VydmV5TmF2aWdhdGlvbiBzdXJ2ZXk9e3N1cnZleX0gbG9jYXRpb249XCJ0b3BcIiAvPlxuICAgICAgICB7dGhpcy5yZW5kZXJQYWdlcygpfVxuICAgICAgICA8U3VydmV5TmF2aWdhdGlvblxuICAgICAgICAgIHN1cnZleT17c3VydmV5fVxuICAgICAgICAgIGxvY2F0aW9uPVwiYm90dG9tXCJcbiAgICAgICAgICBjc3M9e3N1cnZleS5jc3N9XG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICAgIHt0aGlzLmNyZWF0b3Iuc2hvd1BhZ2VOYXZpZ2F0b3IgP1xuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy10YWItZGVzaWduZXJfX3BhZ2UtbmF2aWdhdG9yXCI+PFN1cnZleVBhZ2VOYXZpZ2F0b3JcbiAgICAgICAgICBjcmVhdG9yPXt0aGlzLmNyZWF0b3J9XG4gICAgICAgICAgcGFnZXM9e3RoaXMuY3JlYXRvci5wYWdlc0NvbnRyb2xsZXIucGFnZXN9XG4gICAgICAgID48L1N1cnZleVBhZ2VOYXZpZ2F0b3I+PC9kaXY+XG4gICAgICAgIDogbnVsbFxuICAgICAgfVxuICAgIDwvUmVhY3QuRnJhZ21lbnQ+KTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2Yy10YWItZGVzaWduZXJcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgIFRhYkRlc2lnbmVyQ29tcG9uZW50LFxuICAgIHByb3BzIGFzIElUYWJEZXNpZ25lckNvbXBvbmVudFByb3BzXG4gICk7XG59KTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7XG4gIFJlYWN0RWxlbWVudEZhY3RvcnksXG4gIFN1cnZleSxcbiAgU3VydmV5RWxlbWVudEJhc2Vcbn0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgRW1iZWRNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5cbmludGVyZmFjZSBJVGFiRW1iZWRDb21wb25lbnRQcm9wcyB7XG4gIGRhdGE6IEVtYmVkTW9kZWw7XG59XG5cbmV4cG9ydCBjbGFzcyBUYWJFbWJlZENvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPFxuICBJVGFiRW1iZWRDb21wb25lbnRQcm9wcyxcbiAgYW55XG4+IHtcbiAgcHJpdmF0ZSBnZXQgbW9kZWwoKTogRW1iZWRNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZGF0YTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1jcmVhdG9yLXRhYl9fY29udGVudCBzdmMtZW1iZWQtdGFiX19jb250ZW50XCI+XG4gICAgICAgIHt0aGlzLm1vZGVsLnN1cnZleSA/IDxTdXJ2ZXkgbW9kZWw9e3RoaXMubW9kZWwuc3VydmV5fT48L1N1cnZleT4gOiBudWxsfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtdGFiLWVtYmVkXCIsXG4gIChwcm9wczogSVRhYkVtYmVkQ29tcG9uZW50UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUYWJFbWJlZENvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSwgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBBY2VKc29uRWRpdG9yTW9kZWwgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuXG5pbnRlcmZhY2UgSVRhYkpzb25FZGl0b3JBY2VDb21wb25lbnRQcm9wcyB7XG4gIGRhdGE6IEFjZUpzb25FZGl0b3JNb2RlbDtcbn1cblxuZXhwb3J0IGNsYXNzIFRhYkpzb25FZGl0b3JBY2VDb21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxcbiAgSVRhYkpzb25FZGl0b3JBY2VDb21wb25lbnRQcm9wcyxcbiAgYW55XG4+IHtcbiAgcHJpdmF0ZSBhY2VFZGl0b3JyUmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBjb25zdHJ1Y3Rvcihwcm9wczogSVRhYkpzb25FZGl0b3JBY2VDb21wb25lbnRQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmFjZUVkaXRvcnJSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG4gIHByaXZhdGUgZ2V0IG1vZGVsKCk6IEFjZUpzb25FZGl0b3JNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZGF0YTtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICB0aGlzLm1vZGVsLmluaXQoYWNlLmVkaXQodGhpcy5hY2VFZGl0b3JyUmVmLmN1cnJlbnQgYXMgSFRNTEVsZW1lbnQpKTtcbiAgfVxuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtY3JlYXRvci10YWJfX2NvbnRlbnRcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtanNvbi1lZGl0b3ItdGFiX19jb250ZW50XCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwic3ZjLWpzb24tZWRpdG9yLXRhYl9fYWNlLWVkaXRvclwiXG4gICAgICAgICAgICByZWY9e3RoaXMuYWNlRWRpdG9yclJlZn1cbiAgICAgICAgICA+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtdGFiLWpzb24tZWRpdG9yLWFjZVwiLFxuICAocHJvcHM6IElUYWJKc29uRWRpdG9yQWNlQ29tcG9uZW50UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUYWJKc29uRWRpdG9yQWNlQ29tcG9uZW50LCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgUmVhY3QsIHsgQ2hhbmdlRXZlbnQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnksIFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgVGV4dGFyZWFKc29uRWRpdG9yTW9kZWwgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuXG5pbnRlcmZhY2UgSVRhYkpzb25FZGl0b3JUZXh0YXJlYUNvbXBvbmVudFByb3BzIHtcbiAgZGF0YTogVGV4dGFyZWFKc29uRWRpdG9yTW9kZWw7XG59XG5cbmV4cG9ydCBjbGFzcyBUYWJKc29uRWRpdG9yVGV4dGFyZWFDb21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxcbiAgSVRhYkpzb25FZGl0b3JUZXh0YXJlYUNvbXBvbmVudFByb3BzLFxuICBhbnlcbj4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLm1vZGVsLmNhblNob3dFcnJvcnMgPSBmYWxzZTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG4gIHByaXZhdGUgZ2V0IG1vZGVsKCk6IFRleHRhcmVhSnNvbkVkaXRvck1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5kYXRhO1xuICB9XG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGVycm9yczogSlNYLkVsZW1lbnRbXSA9IFtdO1xuICAgIHZhciBrZXkgPSAxO1xuICAgIGNvbnN0IHVzZXJGcmllbmRseUVycm9yczogYW55W10gPSB0aGlzLm1vZGVsLnVzZXJGcmllbmRseUVycm9ycztcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgdXNlckZyaWVuZGx5RXJyb3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBlcnJvcnMucHVzaCg8c3BhbiBrZXk9e2tleX0+PGI+RXJyb3I6IDwvYj48L3NwYW4+KTtcbiAgICAgIGtleSsrO1xuICAgICAgZXJyb3JzLnB1c2goPHNwYW4ga2V5PXtrZXl9Pnt1c2VyRnJpZW5kbHlFcnJvcnNbaV19PC9zcGFuPik7XG4gICAgICBrZXkrKztcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWNyZWF0b3ItdGFiX19jb250ZW50XCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWpzb24tZWRpdG9yLXRhYl9fY29udGVudFwiPlxuICAgICAgICAgIDx0ZXh0YXJlYVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwic3ZjLWpzb24tZWRpdG9yLXRhYl9fY29udGVudC1hcmVhXCJcbiAgICAgICAgICAgIHZhbHVlPXt0aGlzLm1vZGVsLnRleHR9XG4gICAgICAgICAgICBvbkNoYW5nZT17KGU6IENoYW5nZUV2ZW50PEhUTUxUZXh0QXJlYUVsZW1lbnQ+KSA9PlxuICAgICAgICAgICAgICAodGhpcy5tb2RlbC50ZXh0ID0gZS50YXJnZXQudmFsdWUpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvbktleURvd249eyhlKSA9PiB0aGlzLm1vZGVsLmNoZWNrS2V5KGUsIGUpfVxuICAgICAgICAgICAgZGlzYWJsZWQ9e3RoaXMubW9kZWwucmVhZE9ubHl9XG4gICAgICAgICAgICBhcmlhLWxhYmVsPXt0aGlzLm1vZGVsLmFyaWFMYWJlbH1cbiAgICAgICAgICA+PC90ZXh0YXJlYT5cbiAgICAgICAgICB7ZXJyb3JzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzTmFtZT1cInN2Yy1qc29uLWVkaXRvci10YWJfX2VycnJvc19idXR0b25cIiBvbkNsaWNrPXsoKSA9PiB0aGlzLm1vZGVsLnRvZ2dsZUVycm9ycygpfT5cbiAgICAgICAgICAgICAge3RoaXMubW9kZWwuZXJyb3JCdXR0b25UZXh0fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgfVxuICAgICAgICAgIHt0aGlzLm1vZGVsLmNhblNob3dFcnJvcnMgJiYgPGRpdiBjbGFzc05hbWU9XCJzdmMtanNvbi1lZGl0b3ItdGFiX19jb250ZW50LWVycm9yc1wiPntlcnJvcnN9PC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLXRhYi1qc29uLWVkaXRvci10ZXh0YXJlYVwiLFxuICAocHJvcHM6IElUYWJKc29uRWRpdG9yVGV4dGFyZWFDb21wb25lbnRQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFRhYkpzb25FZGl0b3JUZXh0YXJlYUNvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IFJlYWN0LCB7IEZyYWdtZW50IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBBY3Rpb24sIEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnksIFN1cnZleUVsZW1lbnRCYXNlLCBTdXJ2ZXksIGF0dGFjaEtleTJjbGljayB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IFN1cnZleUxvZ2ljVUkgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuXG5leHBvcnQgY2xhc3MgVGFiTG9naWNBZGRCdXR0b25Db21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxhbnksIGFueT4ge1xuICBwcml2YXRlIGdldCBtb2RlbCgpOiBBY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmJ1dHRvbjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG5cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgYnV0dG9uQ2xhc3NOYW1lID0gXCJzdmMtbG9naWMtdGFiX19jb250ZW50LWFjdGlvbiBzdmMtYnRuXCIgKyAoKHRoaXMubW9kZWwuZW5hYmxlZCAhPT0gdW5kZWZpbmVkICYmICF0aGlzLm1vZGVsLmVuYWJsZWQpID8gXCIgc3ZjLWxvZ2ljLXRhYl9fY29udGVudC1hY3Rpb24tLWRpc2FibGVkXCIgOiBcIlwiKTtcbiAgICByZXR1cm4gYXR0YWNoS2V5MmNsaWNrKDxkaXZcbiAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy5tb2RlbC5hY3Rpb24oKTtcbiAgICAgIH19XG4gICAgICBjbGFzc05hbWU9e2J1dHRvbkNsYXNzTmFtZX1cbiAgICAgIHRpdGxlPXt0aGlzLm1vZGVsLnRpdGxlfVxuICAgID5cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy10ZXh0IHN2Yy10ZXh0LS1ub3JtYWwgc3ZjLXRleHQtLWJvbGRcIj5cbiAgICAgICAge3RoaXMubW9kZWwudGl0bGV9XG4gICAgICA8L3NwYW4+XG4gICAgPC9kaXY+KTtcbiAgfVxufVxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdmMtdGFiLWxvZ2ljLWFkZC1idXR0b25cIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFRhYkxvZ2ljQWRkQnV0dG9uQ29tcG9uZW50LCBwcm9wcyk7XG59KTtcblxuZXhwb3J0IGNsYXNzIFRhYkxvZ2ljQ29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8YW55LCBhbnk+IHtcbiAgcHJpdmF0ZSBnZXQgbW9kZWwoKTogU3VydmV5TG9naWNVSSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZGF0YTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG5cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGxvZ2ljID0gdGhpcy5tb2RlbDtcbiAgICB2YXIgcm9vdENsYXNzID0gXCJzdmMtY3JlYXRvci10YWJfX2NvbnRlbnRcIjtcbiAgICB2YXIgY29udGVudCA9IHRoaXMucmVuZGVyVmlld0NvbnRlbnQoKTtcbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9e3Jvb3RDbGFzc30+e2NvbnRlbnR9PC9kaXY+O1xuICB9XG4gIHByaXZhdGUgcmVuZGVyVmlld0NvbnRlbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGxvZ2ljVGFiQ2xhc3NOYW1lID0gXCJzdmMtcGx1Z2luLXRhYl9fY29udGVudCBzdmMtbG9naWMtdGFiX19jb250ZW50IFwiICsgKHRoaXMubW9kZWwuaGFzSXRlbXMgPyBcIlwiIDogXCJzdmMtbG9naWMtdGFiX19lbXB0eVwiKTtcbiAgICBjb25zdCBhZGRMb2dpYyA9ICF0aGlzLm1vZGVsLnJlYWRPbmx5ID8gPFRhYkxvZ2ljQWRkQnV0dG9uQ29tcG9uZW50IGJ1dHRvbj17dGhpcy5tb2RlbC5hZGROZXdCdXR0b259IC8+IDogdW5kZWZpbmVkO1xuICAgIHJldHVybiAoXG4gICAgICA8RnJhZ21lbnQ+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtsb2dpY1RhYkNsYXNzTmFtZX0+XG4gICAgICAgICAgPFN1cnZleSBtb2RlbD17dGhpcy5tb2RlbC5pdGVtc1N1cnZleX0+PC9TdXJ2ZXk+XG4gICAgICAgICAge3RoaXMubW9kZWwuaGFzSXRlbXMgPyBudWxsIDogKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtbG9naWMtdGFiX19jb250ZW50LWVtcHR5XCIgPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzdmMtdGV4dFwiPnt0aGlzLm1vZGVsLmVtcHR5VGFiUGxhY2VIb2xkZXJ9PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+KX1cbiAgICAgICAgICB7YWRkTG9naWN9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9GcmFnbWVudD5cbiAgICApO1xuICB9XG59XG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2Yy10YWItbG9naWNcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFRhYkxvZ2ljQ29tcG9uZW50LCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEFjdGlvbiwgQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHtcbiAgU3VydmV5QWN0aW9uQmFyLFxuICBSZWFjdEVsZW1lbnRGYWN0b3J5LFxuICBTdXJ2ZXlFbGVtZW50QmFzZSxcbiAgYXR0YWNoS2V5MmNsaWNrXG59IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IFRlc3RTdXJ2ZXlUYWJWaWV3TW9kZWwgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5U2ltdWxhdG9yIH0gZnJvbSBcIi4vU3VydmV5U2ltdWxhdG9yXCI7XG5pbXBvcnQgeyBTdXJ2ZXlSZXN1bHRzIH0gZnJvbSBcIi4uL1Jlc3VsdHNcIjtcblxuZXhwb3J0IGNsYXNzIFRhYlByZXZpZXdUZXN0U3VydmV5QWdhaW5Db21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxhbnksIGFueT4ge1xuICBwcml2YXRlIGdldCBtb2RlbCgpOiBBY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmJ1dHRvbjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG5cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgYnV0dG9uQ2xhc3NOYW1lID0gXCJzdmMtcHJldmlld19fdGVzdC1hZ2FpbiBzdmMtYnRuXCI7XG4gICAgcmV0dXJuIGF0dGFjaEtleTJjbGljayg8ZGl2XG4gICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHRoaXMubW9kZWwuYWN0aW9uKCk7XG4gICAgICB9fVxuICAgICAgY2xhc3NOYW1lPXtidXR0b25DbGFzc05hbWV9XG4gICAgICB0aXRsZT17dGhpcy5tb2RlbC50aXRsZX1cbiAgICA+XG4gICAgICA8c3BhbiBjbGFzc05hbWU9XCJzdmMtdGV4dCBzdmMtdGV4dC0tbm9ybWFsIHN2Yy10ZXh0LS1ib2xkXCI+XG4gICAgICAgIHt0aGlzLm1vZGVsLnRpdGxlfVxuICAgICAgPC9zcGFuPlxuICAgIDwvZGl2Pik7XG4gIH1cbn1cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3ZjLXRhYi1wcmV2aWV3LXRlc3QtYWdhaW5cIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFRhYlByZXZpZXdUZXN0U3VydmV5QWdhaW5Db21wb25lbnQsIHByb3BzKTtcbn0pO1xuXG5leHBvcnQgY2xhc3MgVGFiUHJldmlld1N1cnZleUNvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPGFueSwgYW55PiB7XG4gIHByaXZhdGUgZ2V0IG1vZGVsKCk6IFRlc3RTdXJ2ZXlUYWJWaWV3TW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmRhdGE7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuXG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHRhYkNvbnRlbnRDbGFzc05hbWUgPSBcInN2Yy1jcmVhdG9yLXRhYl9fY29udGVudCBzdmMtdGVzdC10YWJfX2NvbnRlbnRcIiArICh0aGlzLm1vZGVsLmlzUGFnZVRvb2xiYXJWaXNpYmxlID8gXCIgc3ZjLWNyZWF0b3ItdGFiX19jb250ZW50LS13aXRoLXRvb2xiYXJcIiA6IFwiXCIpO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGFiQ29udGVudENsYXNzTmFtZX0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXBsdWdpbi10YWJfX2NvbnRlbnRcIj5cbiAgICAgICAgICA8U3VydmV5U2ltdWxhdG9yIG1vZGVsPXt0aGlzLm1vZGVsLnNpbXVsYXRvcn0+PC9TdXJ2ZXlTaW11bGF0b3I+XG4gICAgICAgICAgeyF0aGlzLm1vZGVsLmlzUnVubmluZyA/IDxUYWJQcmV2aWV3VGVzdFN1cnZleUFnYWluQ29tcG9uZW50IGJ1dHRvbj17dGhpcy5tb2RlbC50ZXN0QWdhaW5BY3Rpb259IC8+IDogbnVsbH1cbiAgICAgICAgICB7IXRoaXMubW9kZWwuaXNSdW5uaW5nID8gPFN1cnZleVJlc3VsdHMgc3VydmV5PXt0aGlzLm1vZGVsLnNpbXVsYXRvci5zdXJ2ZXl9IC8+IDogbnVsbH1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHt0aGlzLmdldEJvdHRvbVRvb2xiYXIoKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgZ2V0Qm90dG9tVG9vbGJhcigpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKHRoaXMubW9kZWwuaXNQYWdlVG9vbGJhclZpc2libGUpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXRlc3QtdGFiX19jb250ZW50LWFjdGlvbnNcIj5cbiAgICAgICAgICA8U3VydmV5QWN0aW9uQmFyIG1vZGVsPXt0aGlzLm1vZGVsLnBhZ2VzfT48L1N1cnZleUFjdGlvbkJhcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdmMtdGFiLXRlc3RcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFRhYlByZXZpZXdTdXJ2ZXlDb21wb25lbnQsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0IHsgQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5LCBTdXJ2ZXlFbGVtZW50QmFzZSB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IFN1cnZleVNpbXVsYXRvck1vZGVsIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVNpbXVsYXRvciBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPGFueSwgYW55PiB7XG4gIHByaXZhdGUgZ2V0IG1vZGVsKCk6IFN1cnZleVNpbXVsYXRvck1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5tb2RlbDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuXG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IG1haW5TaW11bGF0b3JDbGFzcyA9IFwic3ZkLXNpbXVsYXRvci1tYWluXCIgK1xuICAgICAgKHRoaXMubW9kZWwuZGV2aWNlID09PSBcImRlc2t0b3BcIiA/IFwiIHN2ZC1zaW11bGF0b3ItbWFpbi0tZGVza3RvcFwiIDogXCJcIik7XG4gICAgaWYgKCF0aGlzLm1vZGVsLnN1cnZleSkge1xuICAgICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXttYWluU2ltdWxhdG9yQ2xhc3N9PjwvZGl2PjtcbiAgICB9XG4gICAgaWYgKHRoaXMubW9kZWwuaGFzRnJhbWUpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e21haW5TaW11bGF0b3JDbGFzcyArIFwiIFwiICsgdGhpcy5tb2RlbC5zaW11bGF0b3JNYWluQ3NzQ2xhc3N9PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInN2ZC1zaW11bGF0b3Itd3JhcHBlclwiXG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICB3aWR0aDogdGhpcy5tb2RlbC5zaW11bGF0b3JGcmFtZS5mcmFtZVdpZHRoICsgXCJweFwiLFxuICAgICAgICAgICAgICBoZWlnaHQ6IHRoaXMubW9kZWwuc2ltdWxhdG9yRnJhbWUuZnJhbWVIZWlnaHQgKyBcInB4XCJcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzc05hbWU9e1xuICAgICAgICAgICAgICAgIFwic3ZkLXNpbXVsYXRvci1mcmFtZSBcIiArIHRoaXMubW9kZWwuc2ltdWxhdG9yRnJhbWUuY3NzQ2xhc3NcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgIHdpZHRoOlxuICAgICAgICAgICAgICAgICAgKHRoaXMubW9kZWwubGFuZHNjYXBlT3JpZW50YXRpb25cbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLm1vZGVsLnNpbXVsYXRvckZyYW1lLmZyYW1lSGVpZ2h0XG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy5tb2RlbC5zaW11bGF0b3JGcmFtZS5mcmFtZVdpZHRoKSArIFwicHhcIixcbiAgICAgICAgICAgICAgICBoZWlnaHQ6XG4gICAgICAgICAgICAgICAgICAodGhpcy5tb2RlbC5sYW5kc2NhcGVPcmllbnRhdGlvblxuICAgICAgICAgICAgICAgICAgICA/IHRoaXMubW9kZWwuc2ltdWxhdG9yRnJhbWUuZnJhbWVXaWR0aFxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMubW9kZWwuc2ltdWxhdG9yRnJhbWUuZnJhbWVIZWlnaHQpICsgXCJweFwiXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cInN2ZC1zaW11bGF0b3JcIlxuICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgIHdpZHRoOlxuICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5zaW11bGF0b3JGcmFtZS53aWR0aCAvXG4gICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLnNpbXVsYXRvckZyYW1lLnNjYWxlICtcbiAgICAgICAgICAgICAgICAgIFwicHhcIixcbiAgICAgICAgICAgICAgICBoZWlnaHQ6XG4gICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLnNpbXVsYXRvckZyYW1lLmhlaWdodCAvXG4gICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLnNpbXVsYXRvckZyYW1lLnNjYWxlICtcbiAgICAgICAgICAgICAgICAgIFwicHhcIixcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06XG4gICAgICAgICAgICAgICAgICBcInNjYWxlKFwiICtcbiAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuc2ltdWxhdG9yRnJhbWUuc2NhbGUgK1xuICAgICAgICAgICAgICAgICAgXCIpIHRyYW5zbGF0ZSgtNTAlLCAtNTAlKVwiXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZkLXNpbXVsYXRvci1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgPFN1cnZleSBtb2RlbD17dGhpcy5tb2RlbC5zdXJ2ZXl9PjwvU3VydmV5PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e21haW5TaW11bGF0b3JDbGFzc30+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmQtc2ltdWxhdG9yLWNvbnRlbnRcIj5cbiAgICAgICAgICAgIDxTdXJ2ZXkgbW9kZWw9e3RoaXMubW9kZWwuc3VydmV5fT48L1N1cnZleT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHtcbiAgUmVhY3RFbGVtZW50RmFjdG9yeSxcbiAgU3VydmV5RWxlbWVudEJhc2UsXG4gIFN1cnZleVxufSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBUcmFuc2xhdGlvbiB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5cbmV4cG9ydCBjbGFzcyBUYWJUcmFuc2xhdGlvbkNvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPGFueSwgYW55PiB7XG4gIHByaXZhdGUgZ2V0IG1vZGVsKCk6IFRyYW5zbGF0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5kYXRhO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLm1vZGVsKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtY3JlYXRvci10YWJfX2NvbnRlbnQgc3ZjLXRyYW5zbGF0aW9uLXRhYlwiPlxuICAgICAgICB7dGhpcy5yZW5kZXJFbGVtZW50Q29udGVudCgpfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICByZW5kZXJFbGVtZW50Q29udGVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKHRoaXMubW9kZWwuaXNFbXB0eSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdC1uby1zdHJpbmdzXCI+XG4gICAgICAgICAgPHNwYW4+e3RoaXMubW9kZWwubm9TdHJpbmdzVGV4dH08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdC1jb250ZW50XCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtZmxleC1jb2x1bW4gc3Qtc3RyaW5ncy13cmFwcGVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1mbGV4LXJvdyBzdC1zdHJpbmdzLWhlYWRlclwiPlxuICAgICAgICAgICAgICA8U3VydmV5IG1vZGVsPXt0aGlzLm1vZGVsLnN0cmluZ3NIZWFkZXJTdXJ2ZXl9PjwvU3VydmV5PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1mbGV4LXJvdyBzdmMtcGx1Z2luLXRhYl9fY29udGVudCBzdC1zdHJpbmdzXCI+XG4gICAgICAgICAgICAgIDxTdXJ2ZXkgbW9kZWw9e3RoaXMubW9kZWwuc3RyaW5nc1N1cnZleX0+PC9TdXJ2ZXk+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2Yy10YWItdHJhbnNsYXRpb25cIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFRhYlRyYW5zbGF0aW9uQ29tcG9uZW50LCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5cbmV4cG9ydCBjbGFzcyBUcmFuc2xhdGlvbkxpbmVTa2VsZXRvbiBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxhbnksIGFueT4ge1xuICByZW5kZXIoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2QtdHJhbnNsYXRpb24tbGluZS1za2VsZXRvblwiPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInNkLXRyYW5zbGF0aW9uLWxpbmUtc2tlbGV0b25cIiwgKHByb3BzOiBhbnkpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNsYXRpb25MaW5lU2tlbGV0b24sIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgVmVydGljYWxSZXNwb25zaXZpdHlNYW5hZ2VyIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgU3VydmV5Q3JlYXRvclRvb2xib3hUb29sIH0gZnJvbSBcIi4vVG9vbGJveEl0ZW1cIjtcbmltcG9ydCB7IElTdXJ2ZXlDcmVhdG9yVG9vbGJveFByb3BzLCBUb29sYm94IH0gZnJvbSBcIi4vVG9vbGJveFwiO1xuXG5leHBvcnQgY2xhc3MgQWRhcHRpdmVUb29sYm94IGV4dGVuZHMgVG9vbGJveCB7XG4gIHByaXZhdGUgbWFuYWdlcjogVmVydGljYWxSZXNwb25zaXZpdHlNYW5hZ2VyO1xuICBwcml2YXRlIHJvb3RSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IElTdXJ2ZXlDcmVhdG9yVG9vbGJveFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMucm9vdFJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLnJvb3RSZWYuY3VycmVudDtcbiAgICBpZiAoIWNvbnRhaW5lcikgcmV0dXJuO1xuICAgIHRoaXMubWFuYWdlciA9IG5ldyBWZXJ0aWNhbFJlc3BvbnNpdml0eU1hbmFnZXIoXG4gICAgICBjb250YWluZXIsXG4gICAgICB0aGlzLnRvb2xib3gsXG4gICAgICBcIi5zdmMtdG9vbGJveF9fdG9vbDpub3QoLnN2LWRvdHMpPi5zdi1hY3Rpb25fX2NvbnRlbnRcIixcbiAgICAgIDQwXG4gICAgKTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLm1hbmFnZXIgJiYgKHRoaXMubWFuYWdlci5kaXNwb3NlKCkpO1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gIH1cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMudG9vbGJveC5oYXNBY3Rpb25zKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IGNsYXNzTmFtZSA9IFwic3ZjLXRvb2xib3hcIiArICh0aGlzLnRvb2xib3guaXNDb21wYWN0ID8gXCIgc3ZjLXRvb2xib3gtLWNvbXBhY3RcIiA6IFwiXCIpO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IHJlZj17dGhpcy5yb290UmVmfSBjbGFzc05hbWU9e2NsYXNzTmFtZX0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXRvb2xib3hfX2NvbnRhaW5lclwiPlxuICAgICAgICAgIHsodGhpcy50b29sYm94LmlzQ29tcGFjdCB8fCB0aGlzLnRvb2xib3guY2F0ZWdvcmllcy5sZW5ndGggPT0gMSkgP1xuICAgICAgICAgICAgKDxkaXYgY2xhc3NOYW1lPVwic3ZjLXRvb2xib3hfX2NhdGVnb3J5XCI+XG4gICAgICAgICAgICAgIHt0aGlzLnJlbmRlckl0ZW1zKHRoaXMudG9vbGJveC5yZW5kZXJlZEFjdGlvbnMsIHRoaXMudG9vbGJveC5pc0NvbXBhY3QpfVxuICAgICAgICAgICAgPC9kaXY+KVxuICAgICAgICAgICAgOiB0aGlzLnJlbmRlckNhdGVnb3JpZXMoKVxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVySXRlbXMoaXRlbXM6IEFycmF5PGFueT4sIGlzQ29tcGFjdD86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gaXRlbXMubWFwKChpdGVtLCBpdGVtSW5kZXgpID0+XG4gICAgICA8U3VydmV5Q3JlYXRvclRvb2xib3hUb29sIGl0ZW09eyhpdGVtIGFzIGFueSl9IGNyZWF0b3I9e3RoaXMuY3JlYXRvcn0gaXNDb21wYWN0PXtpc0NvbXBhY3R9IGtleT17XCJpdGVtXCIgKyBpdGVtSW5kZXh9PjwvU3VydmV5Q3JlYXRvclRvb2xib3hUb29sPlxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVuZGVyQ2F0ZWdvcnlDb250ZW50KGNhdGVnb3J5OiBhbnkpOiBBcnJheTxhbnk+IHtcbiAgICBsZXQgaXRlbXMgPSBbXTtcbiAgICBpZiAoIWNhdGVnb3J5LmNvbGxhcHNlZCkge1xuICAgICAgaXRlbXMgPSB0aGlzLnJlbmRlckl0ZW1zKGNhdGVnb3J5Lml0ZW1zLCBmYWxzZSk7XG4gICAgfVxuICAgIHJldHVybiBpdGVtcztcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2Yy1hZGFwdGl2ZS10b29sYm94XCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChBZGFwdGl2ZVRvb2xib3gsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQ3JlYXRvckJhc2UgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5Q3JlYXRvclRvb2xib3hUb29sIH0gZnJvbSBcIi4vVG9vbGJveEl0ZW1cIjtcbmltcG9ydCB7IEJhc2UsIFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBhdHRhY2hLZXkyY2xpY2ssIFJlYWN0RWxlbWVudEZhY3RvcnksIFN1cnZleUVsZW1lbnRCYXNlLCBTdmdJY29uIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIElTdXJ2ZXlDcmVhdG9yVG9vbGJveFByb3BzIHtcbiAgbW9kZWw6IENyZWF0b3JCYXNlO1xufVxuXG5leHBvcnQgY2xhc3MgVG9vbGJveCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPElTdXJ2ZXlDcmVhdG9yVG9vbGJveFByb3BzLCBhbnk+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IElTdXJ2ZXlDcmVhdG9yVG9vbGJveFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHB1YmxpYyBnZXQgY3JlYXRvcigpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5tb2RlbDtcbiAgfVxuICBwdWJsaWMgZ2V0IHRvb2xib3goKSB7XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRvci50b29sYm94O1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMudG9vbGJveDtcbiAgfVxuXG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLnRvb2xib3guaGFzQWN0aW9ucykgcmV0dXJuIG51bGw7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtdG9vbGJveFwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy10b29sYm94X19jb250YWluZXJcIj5cbiAgICAgICAgICB7KHRoaXMudG9vbGJveC5jYXRlZ29yaWVzLmxlbmd0aCA9PSAxKSA/XG4gICAgICAgICAgICAoPGRpdiBjbGFzc05hbWU9XCJzdmMtdG9vbGJveF9fY2F0ZWdvcnlcIj5cbiAgICAgICAgICAgICAge3RoaXMucmVuZGVySXRlbXModGhpcy50b29sYm94LnZpc2libGVBY3Rpb25zKX1cbiAgICAgICAgICAgIDwvZGl2PilcbiAgICAgICAgICAgIDogdGhpcy5yZW5kZXJDYXRlZ29yaWVzKClcbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIHJlbmRlckl0ZW1zKGl0ZW1zOiBBcnJheTxhbnk+KSB7XG4gICAgcmV0dXJuIGl0ZW1zLm1hcCgoaXRlbSwgaXRlbUluZGV4KSA9PlxuICAgICAgPFN1cnZleUNyZWF0b3JUb29sYm94VG9vbCBpdGVtPXsoaXRlbSBhcyBhbnkpfSBjcmVhdG9yPXt0aGlzLmNyZWF0b3J9IGtleT17XCJpdGVtXCIgKyBpdGVtSW5kZXh9IGlzQ29tcGFjdD17ZmFsc2V9PjwvU3VydmV5Q3JlYXRvclRvb2xib3hUb29sPlxuICAgICk7XG4gIH1cbiAgcmVuZGVyQ2F0ZWdvcmllcygpIHtcbiAgICByZXR1cm4gdGhpcy50b29sYm94LmNhdGVnb3JpZXMubWFwKChjYXRlZ29yeSkgPT4ge1xuICAgICAgY29uc3QgaGVhZGVyID0gdGhpcy5yZW5kZXJDYXRlZ29yeUhlYWRlcihjYXRlZ29yeSk7XG4gICAgICBjb25zdCBpdGVtcyA9IHRoaXMucmVuZGVyQ2F0ZWdvcnlDb250ZW50KGNhdGVnb3J5KTtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXRvb2xib3hfX2NhdGVnb3J5XCIga2V5PXtjYXRlZ29yeS5uYW1lfT5cbiAgICAgICAgICB7aGVhZGVyfVxuICAgICAgICAgIHtpdGVtc31cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgcmVuZGVyQ2F0ZWdvcnlIZWFkZXIoY2F0ZWdvcnk6IGFueSk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBpY29uTmFtZSA9IGNhdGVnb3J5LmNvbGxhcHNlZCA/IFwiYXJyb3ctZG93blwiIDogXCJhcnJvdy11cFwiO1xuICAgIGNvbnN0IHN2Z0ljb25DbGFzc05hbWUgPSBcInN2Yy10b29sYm94X19jYXRlZ29yeS1oZWFkZXJfX2J1dHRvbiBzdmMtc3RyaW5nLWVkaXRvcl9fYnV0dG9uLS1cIiArIChjYXRlZ29yeS5jb2xsYXBzZWQgPyBcImV4cGFuZFwiIDogXCJjb2xsYXBzZVwiKTtcbiAgICByZXR1cm4gYXR0YWNoS2V5MmNsaWNrKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtdG9vbGJveF9fY2F0ZWdvcnktaGVhZGVyXCIgb25DbGljaz17ZSA9PiBjYXRlZ29yeS50b2dnbGVTdGF0ZSgpfT5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXRvb2xib3hfX2NhdGVnb3J5LXRpdGxlXCI+e2NhdGVnb3J5Lm5hbWV9PC9zcGFuPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy10b29sYm94X19jYXRlZ29yeS1oZWFkZXJfX2NvbnRyb2xzXCI+XG4gICAgICAgICAgPFN2Z0ljb24gY2xhc3NOYW1lPXtzdmdJY29uQ2xhc3NOYW1lfSBpY29uTmFtZT17XCJpY29uLVwiICsgaWNvbk5hbWV9IHNpemU9ezI0fT48L1N2Z0ljb24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQ2F0ZWdvcnlDb250ZW50KGNhdGVnb3J5OiBhbnkpOiBBcnJheTxhbnk+IHtcbiAgICByZXR1cm4gIWNhdGVnb3J5LmNvbGxhcHNlZCA/IHRoaXMucmVuZGVySXRlbXMoY2F0ZWdvcnkuaXRlbXMpIDogW107XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdmMtdG9vbGJveFwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbGJveCwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQge1xuICBDcmVhdG9yQmFzZSxcbiAgZWRpdG9yTG9jYWxpemF0aW9uLFxuICBJUXVlc3Rpb25Ub29sYm94SXRlbVxufSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IFJlYWN0LCB7IENTU1Byb3BlcnRpZXMgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFRvb2xib3hUb29sVmlld01vZGVsIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCB7XG4gIEFjdGlvbixcbiAgQmFzZSxcbiAgU3VydmV5TW9kZWxcbn0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQge1xuICBhdHRhY2hLZXkyY2xpY2ssXG4gIFJlYWN0RWxlbWVudEZhY3RvcnksXG4gIFN1cnZleUVsZW1lbnRCYXNlLFxuICBTdmdJY29uXG59IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcblxuZXhwb3J0IGludGVyZmFjZSBJU3VydmV5Q3JlYXRvclRvb2xib3hJdGVtUHJvcHMge1xuICBpdGVtOiBJUXVlc3Rpb25Ub29sYm94SXRlbTtcbiAgY3JlYXRvcjogQ3JlYXRvckJhc2U7XG4gIGlzQ29tcGFjdDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleUNyZWF0b3JUb29sYm94VG9vbCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPFxuICBJU3VydmV5Q3JlYXRvclRvb2xib3hJdGVtUHJvcHMsXG4gIGFueVxuPiB7XG4gIG1vZGVsOiBUb29sYm94VG9vbFZpZXdNb2RlbDtcblxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLm1vZGVsID0gbmV3IFRvb2xib3hUb29sVmlld01vZGVsKHRoaXMuaXRlbSwgdGhpcy5wcm9wcy5jcmVhdG9yKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGl0ZW0oKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbTtcbiAgfVxuICBwdWJsaWMgZ2V0IGNyZWF0b3IoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3JlYXRvcjtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzQ29tcGFjdCgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pc0NvbXBhY3Q7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiAodGhpcy5pdGVtIGFzIGFueSk7XG4gIH1cblxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGl0ZW0gPSAoKHRoaXMuaXRlbSBhcyBhbnkpIGFzIEFjdGlvbik7XG4gICAgY29uc3QgY2xhc3NOYW1lID0gXCJzdmMtdG9vbGJveF9fdG9vbCBcIiArIGl0ZW0uY3NzICsgKGl0ZW0uaXNWaXNpYmxlID8gXCJcIiA6IFwiIHN2LWFjdGlvbi0taGlkZGVuXCIpO1xuICAgIGNvbnN0IGl0ZW1Db21wb25lbnQgPSBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoXG4gICAgICB0aGlzLml0ZW0uY29tcG9uZW50IHx8IFwic3ZjLXRvb2xib3gtaXRlbVwiLFxuICAgICAge1xuICAgICAgICBpdGVtOiB0aGlzLml0ZW0sXG4gICAgICAgIGNyZWF0b3I6IHRoaXMuY3JlYXRvcixcbiAgICAgICAgaXNDb21wYWN0OiB0aGlzLmlzQ29tcGFjdFxuICAgICAgfVxuICAgICk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWV9IGtleT17aXRlbS5pZH1cbiAgICAgICAgb25Qb2ludGVyRG93bj17KGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICBldmVudC5wZXJzaXN0KCk7XG4gICAgICAgICAgdGhpcy5tb2RlbC5vblBvaW50ZXJEb3duKGV2ZW50KTtcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdi1hY3Rpb25fX2NvbnRlbnRcIj5cbiAgICAgICAgICB7KHRoaXMuaXNDb21wYWN0ICYmIGl0ZW0ubmVlZFNlcGFyYXRvcikgPyAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy10b29sYm94X19jYXRlZ29yeS1zZXBhcmF0b3JcIj48L2Rpdj5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICB7aXRlbUNvbXBvbmVudH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlDcmVhdG9yVG9vbGJveEl0ZW0gZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxcbiAgSVN1cnZleUNyZWF0b3JUb29sYm94SXRlbVByb3BzLFxuICBhbnlcbj4ge1xuICBtb2RlbDogVG9vbGJveFRvb2xWaWV3TW9kZWw7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIGNvbnN0IHRvb2xib3hJdGVtOiBJUXVlc3Rpb25Ub29sYm94SXRlbSA9IHRoaXMucHJvcHMuaXRlbTtcbiAgICB0aGlzLm1vZGVsID0gbmV3IFRvb2xib3hUb29sVmlld01vZGVsKHRvb2xib3hJdGVtLCB0aGlzLnByb3BzLmNyZWF0b3IpO1xuICB9XG4gIHB1YmxpYyBnZXQgaXRlbSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtO1xuICB9XG4gIHB1YmxpYyBnZXQgY3JlYXRvcigpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jcmVhdG9yO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBjbGFzc05hbWUgPVxuICAgICAgXCJzdmMtdG9vbGJveF9faXRlbSBzdmMtdG9vbGJveF9faXRlbS0tXCIgKyB0aGlzLml0ZW0uaWNvbk5hbWU7XG4gICAgcmV0dXJuIGF0dGFjaEtleTJjbGljayhcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICAgIHRhYkluZGV4PXswfVxuICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgYXJpYS1sYWJlbD17XG4gICAgICAgICAgdGhpcy5pdGVtLnRvb2x0aXAgK1xuICAgICAgICAgIFwiIFwiICtcbiAgICAgICAgICBlZGl0b3JMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwidG9vbGJveFwiKSArXG4gICAgICAgICAgXCIgaXRlbVwiXG4gICAgICAgIH1cbiAgICAgICAgb25DbGljaz17KGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICBldmVudC5wZXJzaXN0KCk7XG4gICAgICAgICAgdGhpcy5tb2RlbC5jbGljayhldmVudCk7XG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy10b29sYm94X19pdGVtLWNvbnRhaW5lclwiPlxuICAgICAgICAgIDxTdmdJY29uIHNpemU9ezI0fSBpY29uTmFtZT17dGhpcy5pdGVtLmljb25OYW1lfT48L1N2Z0ljb24+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgeyh0aGlzLnByb3BzLmlzQ29tcGFjdCA/XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXRvb2xib3hfX2l0ZW0tYmFubmVyIHN2Yy1pdGVtX19iYW5uZXJcIj5cbiAgICAgICAgICAgIDxTdmdJY29uIHNpemU9ezI0fSBpY29uTmFtZT17dGhpcy5pdGVtLmljb25OYW1lfSBjbGFzc05hbWU9XCJzdmMtdG9vbGJveF9faXRlbS1pY29uXCI+PC9TdmdJY29uPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXRvb2xib3hfX2l0ZW0tdGl0bGVcIj57dGhpcy5pdGVtLnRpdGxlfTwvc3Bhbj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgOlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy10b29sYm94X19pdGVtLXRpdGxlXCI+e3RoaXMuaXRlbS50aXRsZX08L3NwYW4+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3ZjLXRvb2xib3gtaXRlbVwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5Q3JlYXRvclRvb2xib3hJdGVtLCBwcm9wcyk7XG59KTtcbiIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9yZWFjdF9fOyIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9yZWFjdF9kb21fXzsiLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfc3VydmV5X2NvcmVfXzsiLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfc3VydmV5X2NyZWF0b3JfY29yZV9fOyIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9zdXJ2ZXlfcmVhY3RfdWlfXzsiXSwic291cmNlUm9vdCI6IiJ9
3822
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yL3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvQWN0aW9uQnV0dG9uLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL0ltYWdlSXRlbVZhbHVlV3JhcHBlci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9JdGVtVmFsdWVXcmFwcGVyLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL0xvZ29JbWFnZS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9NYXRyaXhDZWxsV3JhcHBlci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9OYXZpZ2F0aW9uLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL05vdGlmaWVyLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL09iamVjdFNlbGVjdG9yLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL1BhZ2VOYXZpZ2F0b3IudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvUHJvcGVydHlHcmlkLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL1F1ZXN0aW9uRWRpdG9yQ29udGVudC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9RdWVzdGlvbkVtYmVkZGVkU3VydmV5LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL1F1ZXN0aW9uTGlua1ZhbHVlLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL1Jlc3VsdHMudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvU2lkZUJhci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9TdHJpbmdFZGl0b3IudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvU3VydmV5Q3JlYXRvci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9TdmdCdW5kbGUudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvVGFiYmVkTWVudS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9hZG9ybmVycy9DZWxsUXVlc3Rpb24udHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvYWRvcm5lcnMvQ2VsbFF1ZXN0aW9uRHJvcGRvd24udHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvYWRvcm5lcnMvUGFnZS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9hZG9ybmVycy9QYW5lbC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9hZG9ybmVycy9RdWVzdGlvbi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9hZG9ybmVycy9RdWVzdGlvbkRyb3Bkb3duLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL2Fkb3JuZXJzL1F1ZXN0aW9uRm9vdGVyLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL2Fkb3JuZXJzL1F1ZXN0aW9uSGVhZGVyLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL2Fkb3JuZXJzL1F1ZXN0aW9uSW1hZ2UudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvYWRvcm5lcnMvUXVlc3Rpb25SYXRpbmcudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvYWRvcm5lcnMvUXVlc3Rpb25XaWRnZXQudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvYWRvcm5lcnMvUm93LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL2VudHJpZXMvaGVscGVycy50cyIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL2VudHJpZXMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9ldmVudHMudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy90YWJzL0Rlc2lnbmVyLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL3RhYnMvRW1iZWQudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvdGFicy9Kc29uRWRpdG9yQWNlLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL3RhYnMvSnNvbkVkaXRvclRleHRhcmVhLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL3RhYnMvTG9naWMudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvdGFicy9QcmV2aWV3LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL3RhYnMvU3VydmV5U2ltdWxhdG9yLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL3RhYnMvVHJhbnNsYXRpb24udHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvdGFicy9UcmFuc2xhdGlvbkxpbmVTa2VsZXRvbi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy90b29sYm94L0FkYXB0aXZlVG9vbGJveC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy90b29sYm94L1Rvb2xib3gudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvdG9vbGJveC9Ub29sYm94SXRlbS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci9leHRlcm5hbCB7XCJyb290XCI6XCJSZWFjdFwiLFwiY29tbW9uanMyXCI6XCJyZWFjdFwiLFwiY29tbW9uanNcIjpcInJlYWN0XCIsXCJhbWRcIjpcInJlYWN0XCJ9Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvZXh0ZXJuYWwge1wicm9vdFwiOlwiUmVhY3RET01cIixcImNvbW1vbmpzMlwiOlwicmVhY3QtZG9tXCIsXCJjb21tb25qc1wiOlwicmVhY3QtZG9tXCIsXCJhbWRcIjpcInJlYWN0LWRvbVwifSIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yL2V4dGVybmFsIHtcInJvb3RcIjpcIlN1cnZleVwiLFwiY29tbW9uanMyXCI6XCJzdXJ2ZXktY29yZVwiLFwiY29tbW9uanNcIjpcInN1cnZleS1jb3JlXCIsXCJhbWRcIjpcInN1cnZleS1jb3JlXCJ9Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvZXh0ZXJuYWwge1wicm9vdFwiOlwiU3VydmV5Q3JlYXRvckNvcmVcIixcImNvbW1vbmpzMlwiOlwic3VydmV5LWNyZWF0b3ItY29yZVwiLFwiY29tbW9uanNcIjpcInN1cnZleS1jcmVhdG9yLWNvcmVcIixcImFtZFwiOlwic3VydmV5LWNyZWF0b3ItY29yZVwifSIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yL2V4dGVybmFsIHtcInJvb3RcIjpcIlN1cnZleVJlYWN0XCIsXCJjb21tb25qczJcIjpcInN1cnZleS1yZWFjdC11aVwiLFwiY29tbW9uanNcIjpcInN1cnZleS1yZWFjdC11aVwiLFwiYW1kXCI6XCJzdXJ2ZXktcmVhY3QtdWlcIn0iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELE87UUNWQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTs7O1FBR0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDBDQUEwQyxnQ0FBZ0M7UUFDMUU7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSx3REFBd0Qsa0JBQWtCO1FB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InN1cnZleS1jcmVhdG9yLXJlYWN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwicmVhY3RcIiksIHJlcXVpcmUoXCJyZWFjdC1kb21cIiksIHJlcXVpcmUoXCJzdXJ2ZXktY29yZVwiKSwgcmVxdWlyZShcInN1cnZleS1jcmVhdG9yLWNvcmVcIiksIHJlcXVpcmUoXCJzdXJ2ZXktcmVhY3QtdWlcIikpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoXCJTdXJ2ZXlDcmVhdG9yXCIsIFtcInJlYWN0XCIsIFwicmVhY3QtZG9tXCIsIFwic3VydmV5LWNvcmVcIiwgXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCIsIFwic3VydmV5LXJlYWN0LXVpXCJdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcIlN1cnZleUNyZWF0b3JcIl0gPSBmYWN0b3J5KHJlcXVpcmUoXCJyZWFjdFwiKSwgcmVxdWlyZShcInJlYWN0LWRvbVwiKSwgcmVxdWlyZShcInN1cnZleS1jb3JlXCIpLCByZXF1aXJlKFwic3VydmV5LWNyZWF0b3ItY29yZVwiKSwgcmVxdWlyZShcInN1cnZleS1yZWFjdC11aVwiKSk7XG5cdGVsc2Vcblx0XHRyb290W1wiU3VydmV5Q3JlYXRvclwiXSA9IGZhY3Rvcnkocm9vdFtcIlJlYWN0XCJdLCByb290W1wiUmVhY3RET01cIl0sIHJvb3RbXCJTdXJ2ZXlcIl0sIHJvb3RbXCJTdXJ2ZXlDcmVhdG9yQ29yZVwiXSwgcm9vdFtcIlN1cnZleVJlYWN0XCJdKTtcbn0pKHRoaXMsIGZ1bmN0aW9uKF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfcmVhY3RfXywgX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9yZWFjdF9kb21fXywgX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9zdXJ2ZXlfY29yZV9fLCBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX3N1cnZleV9jcmVhdG9yX2NvcmVfXywgX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9zdXJ2ZXlfcmVhY3RfdWlfXykge1xucmV0dXJuICIsIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSBcIi4vc3JjL2VudHJpZXMvaW5kZXgudHNcIik7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBhdHRhY2hLZXkyY2xpY2ssIFN1cnZleUVsZW1lbnRCYXNlLCB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcblxuZXhwb3J0IGNsYXNzIEFjdGlvbkJ1dHRvbiBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPGFueSwgYW55PiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cblxuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBsZXQgY2xhc3NlcyA9IHRoaXMucHJvcHMuY2xhc3NlcyArIFwiIHN2Yy1hY3Rpb24tYnV0dG9uXCI7XG4gICAgaWYgKHRoaXMucHJvcHMuc2VsZWN0ZWQpIHtcbiAgICAgIGNsYXNzZXMgKz0gXCIgc3ZjLWFjdGlvbi1idXR0b24tLXNlbGVjdGVkXCI7XG4gICAgfVxuICAgIGlmICh0aGlzLnByb3BzLmRpc2FibGVkKSB7XG4gICAgICBjbGFzc2VzICs9IFwiIHN2Yy1hY3Rpb24tYnV0dG9uLS1kaXNhYmxlZFwiO1xuICAgICAgcmV0dXJuIDxzcGFuIGNsYXNzTmFtZT17Y2xhc3Nlc30+e3RoaXMucHJvcHMudGV4dH08L3NwYW4+O1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAge2F0dGFjaEtleTJjbGljayhcbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzZXN9XG4gICAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICB0aGlzLnByb3BzLmNsaWNrKCk7XG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgdGl0bGU9e3RoaXMucHJvcHMudGl0bGV9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge3RoaXMucHJvcHMudGV4dH1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICl9XG4gICAgICA8Lz5cbiAgICApO1xuICB9XG59XG4iLCJpbXBvcnQgeyBJbWFnZUl0ZW1WYWx1ZVdyYXBwZXJWaWV3TW9kZWwgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25TZWxlY3RCYXNlLCBCYXNlLCBJbWFnZUl0ZW1WYWx1ZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSwgU3VydmV5RWxlbWVudEJhc2UsIFN2Z0ljb24gfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQge1xuICBhdHRhY2hLZXkyY2xpY2ssXG59IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcblxuaW50ZXJmYWNlIEltYWdlSXRlbVZhbHVlQWRvcm5lckNvbXBvbmVudFByb3BzIHtcbiAgZWxlbWVudDogSlNYLkVsZW1lbnQ7XG4gIGNvbXBvbmVudERhdGE6IGFueTtcbiAgcXVlc3Rpb246IFF1ZXN0aW9uU2VsZWN0QmFzZTtcbiAgaXRlbTogSW1hZ2VJdGVtVmFsdWU7XG59XG5cbmV4cG9ydCBjbGFzcyBJbWFnZUl0ZW1WYWx1ZUFkb3JuZXJDb21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxcbiAgSW1hZ2VJdGVtVmFsdWVBZG9ybmVyQ29tcG9uZW50UHJvcHMsXG4gIGFueVxuPiB7XG4gIG1vZGVsOiBJbWFnZUl0ZW1WYWx1ZVdyYXBwZXJWaWV3TW9kZWw7XG4gIHByaXZhdGUgcm9vdFJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogSW1hZ2VJdGVtVmFsdWVBZG9ybmVyQ29tcG9uZW50UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5tb2RlbCA9IG5ldyBJbWFnZUl0ZW1WYWx1ZVdyYXBwZXJWaWV3TW9kZWwoXG4gICAgICB0aGlzLnByb3BzLmNvbXBvbmVudERhdGEuY3JlYXRvcixcbiAgICAgIHRoaXMucHJvcHMucXVlc3Rpb24sXG4gICAgICB0aGlzLnByb3BzLml0ZW0sXG4gICAgICBudWxsLFxuICAgICAgbnVsbFxuICAgICk7XG4gICAgdGhpcy5yb290UmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgdGhpcy5tb2RlbC5pdGVtc1Jvb3QgPSB0aGlzLnJvb3RSZWYuY3VycmVudDtcbiAgfVxuXG4gIHByZXZlbnREcmFnSGFuZGxlciA9IChlKSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG5cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICAvLyBpZiAodGhpcy5tb2RlbC5xdWVzdGlvbi5pc0RyYWdnZWQpIHtcbiAgICAvLyAgIHJldHVybiBudWxsO1xuICAgIC8vIH1cbiAgICB0aGlzLm1vZGVsLml0ZW0gPSB0aGlzLnByb3BzLml0ZW07XG4gICAgY29uc3QgaXNOZXcgPSAhdGhpcy5wcm9wcy5xdWVzdGlvbi5pc0l0ZW1Jbkxpc3QodGhpcy5wcm9wcy5pdGVtKTtcbiAgICBjb25zdCBpbWFnZVdpZHRoID0gKHRoaXMucHJvcHMucXVlc3Rpb24gYXMgYW55KS5pbWFnZVdpZHRoO1xuICAgIGNvbnN0IGltYWdlSGVpZ2h0ID0gKHRoaXMucHJvcHMucXVlc3Rpb24gYXMgYW55KS5pbWFnZUhlaWdodDtcblxuICAgIGxldCBjb250ZW50ID0gbnVsbDtcbiAgICBpZiAoaXNOZXcpIHtcbiAgICAgIGNvbnRlbnQgPSAoPD5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtaW1hZ2UtaXRlbS12YWx1ZV9faXRlbVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2QtaW1hZ2VwaWNrZXJfX2l0ZW0gc2QtaW1hZ2VwaWNrZXJfX2l0ZW0tLWlubGluZVwiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cInNkLWltYWdlcGlja2VyX19sYWJlbFwiPlxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IHdpZHRoOiBpbWFnZVdpZHRoID8gaW1hZ2VXaWR0aCArIFwicHhcIiA6IHVuZGVmaW5lZCwgaGVpZ2h0OiBpbWFnZUhlaWdodCA/IGltYWdlSGVpZ2h0ICsgXCJweFwiIDogdW5kZWZpbmVkIH19IGNsYXNzTmFtZT1cInNkLWltYWdlcGlja2VyX19pbWFnZVwiPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWltYWdlLWl0ZW0tdmFsdWUtY29udHJvbHNcIj5cbiAgICAgICAgICB7dGhpcy5tb2RlbC5hbGxvd0FkZCA/IGF0dGFjaEtleTJjbGljayg8c3BhbiBjbGFzc05hbWU9XCJzdmMtaW1hZ2UtaXRlbS12YWx1ZS1jb250cm9sc19fYnV0dG9uIHN2Yy1pbWFnZS1pdGVtLXZhbHVlLWNvbnRyb2xzX19hZGRcIiBvbkNsaWNrPXsoKSA9PiB0aGlzLm1vZGVsLmNob29zZU5ld0ZpbGUodGhpcy5tb2RlbCl9PlxuICAgICAgICAgICAgPFN2Z0ljb24gc2l6ZT17MjR9IGljb25OYW1lPXtcImljb24tYWRkLWxnXCJ9PjwvU3ZnSWNvbj5cbiAgICAgICAgICA8L3NwYW4+KSA6IG51bGx9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC8+KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29udGVudCA9IChcbiAgICAgICAgPD5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17XCJzdmMtaW1hZ2UtaXRlbS12YWx1ZV9faXRlbVwifT5cbiAgICAgICAgICAgIHt0aGlzLnByb3BzLmVsZW1lbnR9XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzdmMtaW1hZ2UtaXRlbS12YWx1ZS1jb250cm9sc19fYnV0dG9uIHN2Yy1pbWFnZS1pdGVtLXZhbHVlLWNvbnRyb2xzX19kcmFnLWFyZWEtaW5kaWNhdG9yXCJcbiAgICAgICAgICAgIG9uUG9pbnRlckRvd249eyhldmVudDogYW55KSA9PiB0aGlzLm1vZGVsLm9uUG9pbnRlckRvd24oZXZlbnQpfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxTdmdJY29uIHNpemU9ezI0fSBpY29uTmFtZT17XCJpY29uLWRyYWctYXJlYS1pbmRpY2F0b3JcIn0+PC9TdmdJY29uPlxuICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWltYWdlLWl0ZW0tdmFsdWUtY29udHJvbHNcIj5cbiAgICAgICAgICAgIHt0aGlzLm1vZGVsLmFsbG93UmVtb3ZlID8gYXR0YWNoS2V5MmNsaWNrKDxzcGFuXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cInN2Yy1pbWFnZS1pdGVtLXZhbHVlLWNvbnRyb2xzX19idXR0b24gc3ZjLWltYWdlLWl0ZW0tdmFsdWUtY29udHJvbHNfX2Nob29zZS1maWxlXCJcbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gdGhpcy5tb2RlbC5jaG9vc2VGaWxlKHRoaXMubW9kZWwpfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8U3ZnSWNvbiBzaXplPXsyNH0gaWNvbk5hbWU9e1wiaWNvbi1maWxlXCJ9PjwvU3ZnSWNvbj5cbiAgICAgICAgICAgIDwvc3Bhbj4pIDogbnVsbH1cbiAgICAgICAgICAgIHt0aGlzLm1vZGVsLmFsbG93UmVtb3ZlID8gYXR0YWNoS2V5MmNsaWNrKDxzcGFuXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cInN2Yy1pbWFnZS1pdGVtLXZhbHVlLWNvbnRyb2xzX19idXR0b24gc3ZjLWltYWdlLWl0ZW0tdmFsdWUtY29udHJvbHNfX3JlbW92ZVwiXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHRoaXMubW9kZWwucmVtb3ZlKHRoaXMubW9kZWwpfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8U3ZnSWNvbiBzaXplPXsyNH0gaWNvbk5hbWU9e1wiaWNvbi1kZWxldGVcIn0+PC9TdmdJY29uPlxuICAgICAgICAgICAgPC9zcGFuPikgOiBudWxsfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8Lz5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgcmVmPXt0aGlzLnJvb3RSZWZ9XG4gICAgICAgIGNsYXNzTmFtZT17XG4gICAgICAgICAgXCJzdmMtaW1hZ2UtaXRlbS12YWx1ZS13cmFwcGVyXCIgK1xuICAgICAgICAgIChpc05ldyA/IFwiIHN2Yy1pbWFnZS1pdGVtLXZhbHVlLS1uZXdcIiA6IFwiXCIpICtcbiAgICAgICAgICAodGhpcy5tb2RlbC5pc0RyYWdEcm9wR2hvc3QgPyBcIiBzdmMtaW1hZ2UtaXRlbS12YWx1ZS13cmFwcGVyLS1naG9zdFwiIDogXCJcIilcbiAgICAgICAgfVxuICAgICAgICBrZXk9e3RoaXMucHJvcHMuZWxlbWVudC5rZXl9XG4gICAgICAgIGRhdGEtc3YtZHJvcC10YXJnZXQtaXRlbS12YWx1ZT17XG4gICAgICAgICAgdGhpcy5tb2RlbC5pc0RyYWdnYWJsZSA/IHRoaXMubW9kZWwuaXRlbS52YWx1ZSA6IHVuZGVmaW5lZFxuICAgICAgICB9XG4gICAgICAgIG9uUG9pbnRlckRvd249eyhldmVudDogYW55KSA9PiB0aGlzLm1vZGVsLm9uUG9pbnRlckRvd24oZXZlbnQpfVxuICAgICAgICBvbkRyYWdTdGFydD17dGhpcy5wcmV2ZW50RHJhZ0hhbmRsZXJ9XG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtcInN2Yy1pbWFnZS1pdGVtLXZhbHVlLXdyYXBwZXJfX2dob3N0XCJ9PjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17XCJzdmMtaW1hZ2UtaXRlbS12YWx1ZS13cmFwcGVyX19jb250ZW50XCJ9PlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgIHRhYkluZGV4PXstMX1cbiAgICAgICAgICAgIGFjY2VwdD1cImltYWdlLypcIlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwic3ZjLWNob29zZS1maWxlLWlucHV0XCJcbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIHBvc2l0aW9uOiBcImFic29sdXRlXCIsXG4gICAgICAgICAgICAgIG9wYWNpdHk6IDAsXG4gICAgICAgICAgICAgIHdpZHRoOiBcIjFweFwiLFxuICAgICAgICAgICAgICBoZWlnaHQ6IFwiMXB4XCIsXG4gICAgICAgICAgICAgIG92ZXJmbG93OiBcImhpZGRlblwiXG4gICAgICAgICAgICB9fVxuICAgICAgICAgIC8+XG4gICAgICAgICAge2NvbnRlbnR9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtaW1hZ2UtaXRlbS12YWx1ZVwiLFxuICAocHJvcHM6IEltYWdlSXRlbVZhbHVlQWRvcm5lckNvbXBvbmVudFByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoSW1hZ2VJdGVtVmFsdWVBZG9ybmVyQ29tcG9uZW50LCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgeyBnZXRMb2NTdHJpbmcsIEl0ZW1WYWx1ZVdyYXBwZXJWaWV3TW9kZWwgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUmVhY3REcmFnRXZlbnQgfSBmcm9tIFwic3JjL2V2ZW50c1wiO1xuaW1wb3J0IHsgUXVlc3Rpb25TZWxlY3RCYXNlLCBCYXNlLCBJdGVtVmFsdWUgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7XG4gIGF0dGFjaEtleTJjbGljayxcbiAgUmVhY3RFbGVtZW50RmFjdG9yeSxcbiAgU3VydmV5RWxlbWVudEJhc2UsXG4gIFN2Z0ljb25cbn0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuXG5pbnRlcmZhY2UgSXRlbVZhbHVlQWRvcm5lckNvbXBvbmVudFByb3BzIHtcbiAgZWxlbWVudDogSlNYLkVsZW1lbnQ7XG4gIGNvbXBvbmVudERhdGE6IGFueTtcbiAgcXVlc3Rpb246IFF1ZXN0aW9uU2VsZWN0QmFzZTtcbiAgaXRlbTogSXRlbVZhbHVlO1xufVxuXG5leHBvcnQgY2xhc3MgSXRlbVZhbHVlQWRvcm5lckNvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPFxuICBJdGVtVmFsdWVBZG9ybmVyQ29tcG9uZW50UHJvcHMsXG4gIGFueVxuPiB7XG4gIG1vZGVsOiBJdGVtVmFsdWVXcmFwcGVyVmlld01vZGVsO1xuICBjb25zdHJ1Y3Rvcihwcm9wczogSXRlbVZhbHVlQWRvcm5lckNvbXBvbmVudFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMubW9kZWwgPSBuZXcgSXRlbVZhbHVlV3JhcHBlclZpZXdNb2RlbChcbiAgICAgIHRoaXMucHJvcHMuY29tcG9uZW50RGF0YS5jcmVhdG9yLFxuICAgICAgdGhpcy5wcm9wcy5xdWVzdGlvbixcbiAgICAgIHRoaXMucHJvcHMuaXRlbVxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuXG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgLy8gaWYgKHRoaXMubW9kZWwucXVlc3Rpb24uaXNEcmFnZ2VkKSB7XG4gICAgLy8gICByZXR1cm4gbnVsbDtcbiAgICAvLyB9XG4gICAgdGhpcy5tb2RlbC5pdGVtID0gdGhpcy5wcm9wcy5pdGVtO1xuICAgIGNvbnN0IGJ1dHRvbiA9IHRoaXMubW9kZWwuYWxsb3dBZGQgPyAoXG4gICAgICBhdHRhY2hLZXkyY2xpY2soPHNwYW5cbiAgICAgICAgY2xhc3NOYW1lPVwic3ZjLWl0ZW0tdmFsdWUtY29udHJvbHNfX2J1dHRvbiBzdmMtaXRlbS12YWx1ZS1jb250cm9sc19fYWRkXCJcbiAgICAgICAgYXJpYS1sYWJlbD17dGhpcy5tb2RlbC50b29sdGlwfVxuICAgICAgICBvbkNsaWNrPXsoKSA9PiB0aGlzLm1vZGVsLmFkZCh0aGlzLm1vZGVsKX1cbiAgICAgID5cbiAgICAgICAgPFN2Z0ljb24gc2l6ZT17MTZ9IGljb25OYW1lPXtcImljb24tYWRkXzE2eDE2XCJ9PjwvU3ZnSWNvbj5cbiAgICAgIDwvc3Bhbj4pXG4gICAgKSA6IChcbiAgICAgIDw+XG4gICAgICAgIHtcIiBcIn1cbiAgICAgICAge3RoaXMubW9kZWwuaXNEcmFnZ2FibGUgPyAoXG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInN2Yy1pdGVtLXZhbHVlLWNvbnRyb2xzX19idXR0b24gc3ZjLWl0ZW0tdmFsdWUtY29udHJvbHNfX2RyYWdcIlxuICAgICAgICAgICAgYXJpYS1sYWJlbD17dGhpcy5tb2RlbC5kcmFnVG9vbHRpcH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8U3ZnSWNvbiBjbGFzc05hbWU9XCJzdmMtaXRlbS12YWx1ZS1jb250cm9sc19fZHJhZy1pY29uXCIgc2l6ZT17MjR9IGljb25OYW1lPXtcImljb24tZHJhZy1hcmVhLWluZGljYXRvclwifT48L1N2Z0ljb24+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICApIDogbnVsbH1cbiAgICAgICAge3RoaXMubW9kZWwuYWxsb3dSZW1vdmUgPyBhdHRhY2hLZXkyY2xpY2soPHNwYW5cbiAgICAgICAgICBjbGFzc05hbWU9XCJzdmMtaXRlbS12YWx1ZS1jb250cm9sc19fYnV0dG9uIHN2Yy1pdGVtLXZhbHVlLWNvbnRyb2xzX19yZW1vdmVcIlxuICAgICAgICAgIGFyaWEtbGFiZWw9e3RoaXMubW9kZWwudG9vbHRpcH1cbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB0aGlzLm1vZGVsLnJlbW92ZSh0aGlzLm1vZGVsKX1cbiAgICAgICAgPlxuICAgICAgICAgIDxTdmdJY29uIHNpemU9ezE2fSBpY29uTmFtZT17XCJpY29uLXJlbW92ZV8xNngxNlwifT48L1N2Z0ljb24+XG4gICAgICAgIDwvc3Bhbj4pIDogbnVsbH1cbiAgICAgIDwvPlxuICAgICk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e1xuICAgICAgICAgIFwic3ZjLWl0ZW0tdmFsdWUtd3JhcHBlclwiICtcbiAgICAgICAgICAodGhpcy5tb2RlbC5hbGxvd0FkZCA/IFwiIHN2Yy1pdGVtLXZhbHVlLS1uZXdcIiA6IFwiXCIpICtcbiAgICAgICAgICAodGhpcy5tb2RlbC5pc0RyYWdnaW5nID8gXCIgc3ZjLWl0ZW0tdmFsdWUtLWRyYWdnaW5nXCIgOiBcIlwiKSArXG4gICAgICAgICAgKHRoaXMubW9kZWwuaXNEcmFnRHJvcEdob3N0ID8gXCIgc3ZjLWl0ZW0tdmFsdWUtLWdob3N0XCIgOiBcIlwiKSArXG4gICAgICAgICAgKHRoaXMubW9kZWwuaXNEcmFnRHJvcE1vdmVEb3duID8gXCIgc3ZjLWl0ZW0tdmFsdWUtLW1vdmVkb3duXCIgOiBcIlwiKSArXG4gICAgICAgICAgKHRoaXMubW9kZWwuaXNEcmFnRHJvcE1vdmVVcCA/IFwiIHN2Yy1pdGVtLXZhbHVlLS1tb3ZldXBcIiA6IFwiXCIpXG4gICAgICAgIH1cbiAgICAgICAga2V5PXt0aGlzLnByb3BzLmVsZW1lbnQua2V5fVxuICAgICAgICBkYXRhLXN2LWRyb3AtdGFyZ2V0LWl0ZW0tdmFsdWU9e1xuICAgICAgICAgIHRoaXMubW9kZWwuaXNEcmFnZ2FibGUgPyB0aGlzLm1vZGVsLml0ZW0udmFsdWUgOiB1bmRlZmluZWRcbiAgICAgICAgfVxuICAgICAgICBvblBvaW50ZXJEb3duPXsoZXZlbnQ6IGFueSkgPT4gdGhpcy5tb2RlbC5vblBvaW50ZXJEb3duKGV2ZW50KX1cbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtaXRlbS12YWx1ZV9fZ2hvc3RcIj48L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1pdGVtLXZhbHVlLWNvbnRyb2xzXCI+e2J1dHRvbn08L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17XCJzdmMtaXRlbS12YWx1ZV9faXRlbVwifSBvbkNsaWNrPXsoZXZlbnQpID0+IHRoaXMubW9kZWwuc2VsZWN0KHRoaXMubW9kZWwsIGV2ZW50KX0+e3RoaXMucHJvcHMuZWxlbWVudH08L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLWl0ZW0tdmFsdWVcIixcbiAgKHByb3BzOiBJdGVtVmFsdWVBZG9ybmVyQ29tcG9uZW50UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChJdGVtVmFsdWVBZG9ybmVyQ29tcG9uZW50LCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBCYXNlLCBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSwgU3VydmV5RWxlbWVudEJhc2UsIExvZ29JbWFnZSwgU3ZnSWNvbiwgYXR0YWNoS2V5MmNsaWNrIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgQ3JlYXRvckJhc2UsIExvZ29JbWFnZVZpZXdNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5cbmludGVyZmFjZSBJTG9nb0ltYWdlQ29tcG9uZW50UHJvcHMge1xuICBkYXRhOiBDcmVhdG9yQmFzZTtcbn1cblxuZXhwb3J0IGNsYXNzIExvZ29JbWFnZUNvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPElMb2dvSW1hZ2VDb21wb25lbnRQcm9wcywgYW55PiB7XG4gIHByaXZhdGUgbW9kZWw6IExvZ29JbWFnZVZpZXdNb2RlbDtcbiAgcHJpdmF0ZSByb290UmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBjb25zdHJ1Y3Rvcihwcm9wczogSUxvZ29JbWFnZUNvbXBvbmVudFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMubW9kZWwgPSBuZXcgTG9nb0ltYWdlVmlld01vZGVsKHByb3BzLmRhdGEsIG51bGwpO1xuICAgIHRoaXMucm9vdFJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICB0aGlzLm1vZGVsLnJvb3QgPSB0aGlzLnJvb3RSZWYuY3VycmVudDtcbiAgfVxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGxldCBjb250ZW50OiBKU1guRWxlbWVudCA9IG51bGw7XG4gICAgaWYgKHRoaXMubW9kZWwuc3VydmV5LmxvY0xvZ28ucmVuZGVyZWRIdG1sKSB7XG4gICAgICBjb250ZW50ID0gPD5cbiAgICAgICAgPExvZ29JbWFnZSBkYXRhPXt0aGlzLnByb3BzLmRhdGEuc3VydmV5fT48L0xvZ29JbWFnZT5cbiAgICAgICAge3RoaXMubW9kZWwuYWxsb3dFZGl0ID8gPGRpdiBjbGFzc05hbWU9XCJzdmMtaW1hZ2UtaXRlbS12YWx1ZS1jb250cm9sc1wiPlxuICAgICAgICAgIHthdHRhY2hLZXkyY2xpY2soPFN2Z0ljb24gY2xhc3NOYW1lPVwic3ZjLWltYWdlLWl0ZW0tdmFsdWUtY29udHJvbHNfX2J1dHRvbiBzdmMtaW1hZ2UtaXRlbS12YWx1ZS1jb250cm9sc19fY2hvb3NlLWZpbGVcIiBzaXplPXsyNH0gaWNvbk5hbWU9e1wiaWNvbi1maWxlXCJ9IG9uQ2xpY2s9eygpID0+IHRoaXMubW9kZWwuY2hvb3NlRmlsZSh0aGlzLm1vZGVsKX0+PC9TdmdJY29uPil9XG4gICAgICAgICAge2F0dGFjaEtleTJjbGljayg8U3ZnSWNvbiBjbGFzc05hbWU9XCJzdmMtaW1hZ2UtaXRlbS12YWx1ZS1jb250cm9sc19fYnV0dG9uIHN2Yy1pbWFnZS1pdGVtLXZhbHVlLWNvbnRyb2xzX19yZW1vdmVcIiBzaXplPXsyNH0gaWNvbk5hbWU9e1wiaWNvbi1kZWxldGVcIn0gb25DbGljaz17KCkgPT4gdGhpcy5tb2RlbC5yZW1vdmUodGhpcy5tb2RlbCl9PjwvU3ZnSWNvbj4pfVxuICAgICAgICA8L2Rpdj4gOiBudWxsfVxuICAgICAgPC8+O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNvbnRlbnQgPSB0aGlzLm1vZGVsLmFsbG93RWRpdCA/IGF0dGFjaEtleTJjbGljayg8ZGl2IGNsYXNzTmFtZT1cInN2Yy1sb2dvLWltYWdlLXBsYWNlaG9sZGVyXCIgb25DbGljaz17KCkgPT4gdGhpcy5tb2RlbC5jaG9vc2VGaWxlKHRoaXMubW9kZWwpfT57dGhpcy5tb2RlbC5jaG9vc2VMb2dvUGxhY2Vob2xkZXJ9PC9kaXY+KSA6IG51bGw7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IHJlZj17dGhpcy5yb290UmVmfSBjbGFzc05hbWU9XCJzdmMtbG9nby1pbWFnZVwiPlxuICAgICAgICA8aW5wdXQgYXJpYS1oaWRkZW49XCJ0cnVlXCIgdHlwZT1cImZpbGVcIiB0YWJJbmRleD17LTF9IGFjY2VwdD1cImltYWdlLypcIiBjbGFzc05hbWU9XCJzdmMtY2hvb3NlLWZpbGUtaW5wdXRcIiAvPlxuICAgICAgICB7Y29udGVudH1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdmMtbG9nby1pbWFnZVwiLFxuICAocHJvcHM6IElMb2dvSW1hZ2VDb21wb25lbnRQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KExvZ29JbWFnZUNvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pOyIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFF1ZXN0aW9uU2VsZWN0QmFzZSwgQmFzZSwgSXRlbVZhbHVlLCBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgTWF0cml4Q2VsbFdyYXBwZXJWaWV3TW9kZWwsIHRvZ2dsZUhvdmVyZWQgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IHtcbiAgYXR0YWNoS2V5MmNsaWNrLFxuICBSZWFjdEVsZW1lbnRGYWN0b3J5LFxuICBTdXJ2ZXlFbGVtZW50QmFzZSxcbiAgU3ZnSWNvblxufSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5cbmludGVyZmFjZSBNYXRyaXhDZWxsQWRvcm5lckNvbXBvbmVudFByb3BzIHtcbiAgZWxlbWVudDogSlNYLkVsZW1lbnQ7XG4gIGNvbXBvbmVudERhdGE6IGFueTtcbiAgcXVlc3Rpb246IFF1ZXN0aW9uU2VsZWN0QmFzZTtcbiAgY2VsbDogYW55O1xufVxuXG5leHBvcnQgY2xhc3MgTWF0cml4Q2VsbEFkb3JuZXJDb21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxcbiAgTWF0cml4Q2VsbEFkb3JuZXJDb21wb25lbnRQcm9wcyxcbiAgYW55XG4+IHtcbiAgbW9kZWw6IE1hdHJpeENlbGxXcmFwcGVyVmlld01vZGVsO1xuICBjb25zdHJ1Y3Rvcihwcm9wczogTWF0cml4Q2VsbEFkb3JuZXJDb21wb25lbnRQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5wcm9wcy5jb21wb25lbnREYXRhO1xuICAgIHRoaXMubW9kZWwgPSBuZXcgTWF0cml4Q2VsbFdyYXBwZXJWaWV3TW9kZWwoXG4gICAgICBkYXRhLmNyZWF0b3IsXG4gICAgICBkYXRhLmVsZW1lbnQsXG4gICAgICBkYXRhLnF1ZXN0aW9uLFxuICAgICAgZGF0YS5yb3csXG4gICAgICBkYXRhLmNvbHVtbixcbiAgICApO1xuICB9XG4gIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHM6IGFueSwgcHJldlN0YXRlOiBhbnkpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUpO1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLnByb3BzLmNvbXBvbmVudERhdGE7XG4gICAgdGhpcy5tb2RlbC50ZW1wbGF0ZURhdGEgPSBkYXRhLmVsZW1lbnQ7XG4gICAgdGhpcy5tb2RlbC5yb3cgPSBkYXRhLnJvdztcbiAgICB0aGlzLm1vZGVsLmNvbHVtbiA9IGRhdGEuY29sdW1uO1xuICAgIHRoaXMubW9kZWwucXVlc3Rpb24gPSBkYXRhLnF1ZXN0aW9uO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cblxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGxldCBjb250cm9scyA9IG51bGw7XG4gICAgaWYgKCEhdGhpcy5tb2RlbC5xdWVzdGlvbikge1xuICAgICAgY29udHJvbHMgPSA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1tYXRyaXgtY2VsbF9fcXVlc3Rpb24tY29udHJvbHNcIj5cbiAgICAgICAge2F0dGFjaEtleTJjbGljayg8c3BhbiBjbGFzc05hbWU9XCJzdmMtbWF0cml4LWNlbGxfX3F1ZXN0aW9uLWNvbnRyb2xzLWJ1dHRvblwiIG9uQ2xpY2s9eygpID0+IHRoaXMubW9kZWwuZWRpdFF1ZXN0aW9uKHRoaXMubW9kZWwpfT5cbiAgICAgICAgICA8U3ZnSWNvbiBzaXplPXsyNH0gaWNvbk5hbWU9e1wiaWNvbi1lZGl0XCJ9PjwvU3ZnSWNvbj5cbiAgICAgICAgPC9zcGFuPil9XG4gICAgICA8L2Rpdj47XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtcInN2Yy1tYXRyaXgtY2VsbFwifVxuICAgICAgICBrZXk9e3RoaXMucHJvcHMuZWxlbWVudC5rZXl9XG4gICAgICAgIG9uQ2xpY2s9eyhlOiBhbnkpID0+ICF0aGlzLnByb3BzLnF1ZXN0aW9uICYmIHRoaXMubW9kZWwuc2VsZWN0Q29udGV4dCh0aGlzLm1vZGVsLCBlKX1cbiAgICAgICAgb25Nb3VzZU91dD17ZSA9PiB0aGlzLm1vZGVsLmhvdmVyKGUubmF0aXZlRXZlbnQsIGUuY3VycmVudFRhcmdldCl9XG4gICAgICAgIG9uTW91c2VPdmVyPXtlID0+IHRoaXMubW9kZWwuaG92ZXIoZS5uYXRpdmVFdmVudCwgZS5jdXJyZW50VGFyZ2V0KX1cbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e1wic3ZjLW1hdHJpeC1jZWxsLS1zZWxlY3RlZFwiICsgKHRoaXMubW9kZWwuaXNTZWxlY3RlZCA/IFwiIHN2Yy12aXNpYmxlXCIgOiBcIlwiKX0+PC9kaXY+XG5cbiAgICAgICAge3RoaXMucHJvcHMuZWxlbWVudH1cblxuICAgICAgICB7Y29udHJvbHN9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy1tYXRyaXgtY2VsbFwiLFxuICAocHJvcHM6IE1hdHJpeENlbGxBZG9ybmVyQ29tcG9uZW50UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChNYXRyaXhDZWxsQWRvcm5lckNvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IHsgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnksIFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5TmF2aWdhdGlvbiBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPGFueSwgYW55PiB7XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgdGhpcy5zZXRIYW5kbGVyKCk7XG4gIH1cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogYW55LCBwcmV2U3RhdGU6IGFueSkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSk7XG4gICAgdGhpcy5zZXRIYW5kbGVyKCk7XG4gIH1cbiAgcHJpdmF0ZSBzZXRIYW5kbGVyKCkge1xuICAgIGlmIChcbiAgICAgICF0aGlzLnN1cnZleSB8fFxuICAgICAgICB0aGlzLnN1cnZleS5vblByb3BlcnR5Q2hhbmdlZC5oYXNGdW5jKHRoaXMub25Qcm9wQ2hhbmdlZEhhbmRsZXIpXG4gICAgKVxuICAgICAgcmV0dXJuO1xuICAgIHRoaXMuc3VydmV5Lm9uUHJvcGVydHlDaGFuZ2VkLmFkZCh0aGlzLm9uUHJvcENoYW5nZWRIYW5kbGVyKTtcbiAgfVxuICAgIHByaXZhdGUgb25Qcm9wQ2hhbmdlZEhhbmRsZXIgPSAoc2VuZGVyOiBhbnksIG9wdGlvbnM6IGFueSk6IGFueSA9PiB7XG4gICAgICBpZiAodGhpcy5pc1JlbmRlcmluZykgcmV0dXJuO1xuICAgICAgY29uc3QgcmVhY3RpdmVQcm9wcyA9IFtcbiAgICAgICAgXCJzaG93UHJvZ3Jlc3NCYXJcIixcbiAgICAgICAgXCJwcm9ncmVzc0JhclR5cGVcIixcbiAgICAgICAgXCJjdXJyZW50UGFnZVZhbHVlXCJcbiAgICAgIF07XG4gICAgICBpZiAocmVhY3RpdmVQcm9wcy5pbmRleE9mKG9wdGlvbnMubmFtZSkgPCAwKSByZXR1cm47XG4gICAgICB2YXIgdmFsOiBhbnkgPSB7fTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVhY3RpdmVQcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgcHJvcE5hbWUgPSByZWFjdGl2ZVByb3BzW2ldO1xuICAgICAgICB2YWxbcHJvcE5hbWVdID0gdGhpcy5zdXJ2ZXlbcHJvcE5hbWVdO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRTdGF0ZSh2YWwpO1xuICAgIH07XG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgICAgaWYgKHRoaXMuc3VydmV5KSB7XG4gICAgICAgIHRoaXMuc3VydmV5Lm9uUHJvcGVydHlDaGFuZ2VkLnJlbW92ZSh0aGlzLm9uUHJvcENoYW5nZWRIYW5kbGVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0IHN1cnZleSgpOiBTdXJ2ZXlNb2RlbCB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9wcy5zdXJ2ZXk7XG4gICAgfVxuICAgIHByb3RlY3RlZCBnZXQgbG9jYXRpb24oKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BzLmxvY2F0aW9uO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgZ2V0IGlzVG9wKCk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIHRoaXMubG9jYXRpb24gPT0gXCJ0b3BcIjtcbiAgICB9XG4gICAgcHJvdGVjdGVkIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiB0aGlzLmlzVG9wXG4gICAgICAgID8gdGhpcy5zdXJ2ZXkuaXNTaG93UHJvZ3Jlc3NCYXJPblRvcFxuICAgICAgICA6IHRoaXMuc3VydmV5LmlzU2hvd1Byb2dyZXNzQmFyT25Cb3R0b207XG4gICAgfVxuICAgIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgICAgcmV0dXJuIFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChcbiAgICAgICAgXCJzdi1wcm9ncmVzcy1cIiArIHRoaXMuc3VydmV5LnByb2dyZXNzQmFyVHlwZS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICB7IHN1cnZleTogdGhpcy5zdXJ2ZXksIGNzczogdGhpcy5zdXJ2ZXkuY3NzLCBpc1RvcDogdGhpcy5pc1RvcCB9XG4gICAgICApO1xuICAgIH1cbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEJhc2UsIFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50QmFzZSwgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBDcmVhdG9yQmFzZSwgTm90aWZpZXIgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5vdGlmaWVyQ29tcG9uZW50UHJvcHMge1xuICBjcmVhdG9yOiBDcmVhdG9yQmFzZTtcbiAgbm90aWZpZXI6IE5vdGlmaWVyO1xufVxuXG5leHBvcnQgY2xhc3MgTm90aWZpZXJDb21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxcbiAgTm90aWZpZXJDb21wb25lbnRQcm9wcyxcbiAgYW55XG4+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IE5vdGlmaWVyQ29tcG9uZW50UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cblxuICBnZXQgbm90aWZpZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMubm90aWZpZXI7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm5vdGlmaWVyO1xuICB9XG5cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLm5vdGlmaWVyLmFjdGl2ZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5ub3RpZmllci5jc3N9PlxuICAgICAgICA8c3Bhbj57dGhpcy5ub3RpZmllci5tZXNzYWdlfTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IE9iamVjdFNlbGVjdG9yTW9kZWwgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSwgU3VydmV5RWxlbWVudEJhc2UsIExpc3QgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5cbmludGVyZmFjZSBJT2JqZWN0U2VsZWN0b3JDb21wb25lbnRQcm9wcyB7XG4gIG1vZGVsOiBPYmplY3RTZWxlY3Rvck1vZGVsO1xufVxuY2xhc3MgT2JqZWN0U2VsZWN0b3JDb21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxJT2JqZWN0U2VsZWN0b3JDb21wb25lbnRQcm9wcywgYW55PiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBJT2JqZWN0U2VsZWN0b3JDb21wb25lbnRQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IG1vZGVsKCk6IE9iamVjdFNlbGVjdG9yTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLm1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLm1vZGVsLmlzVmlzaWJsZSkgcmV0dXJuIG51bGw7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtb2JqZWN0LXNlbGVjdG9yXCI+XG4gICAgICAgIDxMaXN0IG1vZGVsPXt0aGlzLm1vZGVsLmxpc3R9PjwvTGlzdD5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdmMtb2JqZWN0LXNlbGVjdG9yXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICBPYmplY3RTZWxlY3RvckNvbXBvbmVudCxcbiAgICBwcm9wcyBhcyBJT2JqZWN0U2VsZWN0b3JDb21wb25lbnRQcm9wc1xuICApO1xufSk7XG4iLCJpbXBvcnQge1xuICBCYXNlLFxuICBJQWN0aW9uLFxuICBTdXJ2ZXlNb2RlbCxcbiAgUGFnZU1vZGVsLFxuICB1bndyYXBcbn0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQge1xuICBTdXJ2ZXlFbGVtZW50QmFzZSxcbiAgU3ZnSWNvbixcbiAgUG9wdXAsXG4gIGF0dGFjaEtleTJjbGlja1xufSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBDcmVhdG9yQmFzZSwgZ2V0TG9jU3RyaW5nLCBQYWdlTmF2aWdhdG9yVmlld01vZGVsIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW50ZXJmYWNlIElTdXJ2ZXlQYWdlTmF2aWdhdG9yUHJvcHMge1xuICBjcmVhdG9yOiBDcmVhdG9yQmFzZTtcbiAgcGFnZXM6IEFycmF5PFBhZ2VNb2RlbD47XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlQYWdlTmF2aWdhdG9yIGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8XG4gIElTdXJ2ZXlQYWdlTmF2aWdhdG9yUHJvcHMsXG4gIGFueVxuPiB7XG4gIHByaXZhdGUgbW9kZWw6IFBhZ2VOYXZpZ2F0b3JWaWV3TW9kZWw7XG4gIHByaXZhdGUgY29udGFpbmVyUmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBJU3VydmV5UGFnZU5hdmlnYXRvclByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuY29udGFpbmVyUmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gICAgdGhpcy5tb2RlbCA9IG5ldyBQYWdlTmF2aWdhdG9yVmlld01vZGVsKFxuICAgICAgcHJvcHMuY3JlYXRvci5wYWdlc0NvbnRyb2xsZXJcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIGNvbnN0IGVsID0gdGhpcy5jb250YWluZXJSZWYuY3VycmVudCBhcyBIVE1MRGl2RWxlbWVudDtcbiAgICBpZiAoISFlbCkge1xuICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICBlbC5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQub25zY3JvbGwgPSBmdW5jdGlvbiAodGhpczogR2xvYmFsRXZlbnRIYW5kbGVycywgZXY6IEV2ZW50KSB7XG4gICAgICAgIHJldHVybiBzZWxmLm1vZGVsLm9uQ29udGFpbmVyU2Nyb2xsKGV2LmN1cnJlbnRUYXJnZXQgYXMgSFRNTERpdkVsZW1lbnQpO1xuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICBjb25zdCBlbCA9IHRoaXMuY29udGFpbmVyUmVmLmN1cnJlbnQ7XG4gICAgaWYgKCEhZWwpIHtcbiAgICAgIGVsLnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudC5vbnNjcm9sbCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhpcy5tb2RlbC5kaXNwb3NlKCk7XG4gIH1cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgbGV0IGNsYXNzTmFtZSA9IFwic3ZjLXBhZ2UtbmF2aWdhdG9yX19zZWxlY3RvclwiO1xuICAgIGlmICh0aGlzLm1vZGVsLmlzUG9wdXBPcGVuZWQpXG4gICAgICBjbGFzc05hbWUgKz0gXCIgc3ZjLXBhZ2UtbmF2aWdhdG9yX19zZWxlY3Rvci0tb3BlbmVkXCI7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXBhZ2UtbmF2aWdhdG9yXCIgcmVmPXt0aGlzLmNvbnRhaW5lclJlZn0gc3R5bGU9e3sgZGlzcGxheTogdGhpcy5tb2RlbC52aXNpYmxlID8gXCJmbGV4XCIgOiBcIm5vbmVcIiB9fT5cbiAgICAgICAge2F0dGFjaEtleTJjbGljayg8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICAgICAgb25DbGljaz17KCkgPT4gdGhpcy5tb2RlbC50b2dnbGVQYWdlU2VsZWN0b3IoKX1cbiAgICAgICAgICB0aXRsZT17dGhpcy5tb2RlbC5wYWdlU2VsZWN0b3JDYXB0aW9ufVxuICAgICAgICA+XG4gICAgICAgICAgPFN2Z0ljb25cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInN2Yy1wYWdlLW5hdmlnYXRvcl9fbmF2aWdhdG9yLWljb25cIlxuICAgICAgICAgICAgaWNvbk5hbWU9e3RoaXMubW9kZWwuaWNvbn1cbiAgICAgICAgICAgIHNpemU9ezI0fVxuICAgICAgICAgID48L1N2Z0ljb24+XG5cbiAgICAgICAgICA8UG9wdXBcbiAgICAgICAgICAgIG1vZGVsPXt0aGlzLm1vZGVsLnBvcHVwTW9kZWx9XG4gICAgICAgICAgLy9jbGFzc05hbWU9XCJzdmMtcGFnZS1uYXZpZ2F0b3JfX3BvcHVwXCJcbiAgICAgICAgICA+PC9Qb3B1cD5cbiAgICAgICAgPC9kaXY+KX1cbiAgICAgICAge3RoaXMubW9kZWwuaXRlbXMubWFwKChpdGVtKSA9PiAoXG4gICAgICAgICAgPFN1cnZleVBhZ2VOYXZpZ2F0b3JJdGVtXG4gICAgICAgICAgICBrZXk9e2l0ZW0uaWR9XG4gICAgICAgICAgICBpdGVtPXtpdGVtfVxuICAgICAgICAgID48L1N1cnZleVBhZ2VOYXZpZ2F0b3JJdGVtPlxuICAgICAgICApKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlQYWdlTmF2aWdhdG9ySXRlbSBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPGFueSwgYW55PiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBJQWN0aW9uKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbSBhcyBCYXNlO1xuICB9XG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLnByb3BzLml0ZW07XG4gICAgbGV0IGNsYXNzTmFtZTogc3RyaW5nID0gXCJzdmMtcGFnZS1uYXZpZ2F0b3ItaXRlbS1jb250ZW50XCI7XG4gICAgaWYgKHVud3JhcChpdGVtLmFjdGl2ZSkpIHtcbiAgICAgIGNsYXNzTmFtZSArPSBcIiBzdmMtcGFnZS1uYXZpZ2F0b3ItaXRlbS0tc2VsZWN0ZWRcIjtcbiAgICB9XG4gICAgaWYgKHVud3JhcChpdGVtLmRpc2FibGVkKSkge1xuICAgICAgY2xhc3NOYW1lICs9IFwiIHN2Yy1wYWdlLW5hdmlnYXRvci1pdGVtLS1kaXNhYmxlZFwiO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtcGFnZS1uYXZpZ2F0b3ItaXRlbVwiPlxuICAgICAgICB7YXR0YWNoS2V5MmNsaWNrKDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgICAgaXRlbS5hY3Rpb24oaXRlbSk7XG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIH19XG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1wYWdlLW5hdmlnYXRvci1pdGVtX19kb3RcIiB0aXRsZT17aXRlbS50aXRsZX0+PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtcGFnZS1uYXZpZ2F0b3ItaXRlbV9fYmFubmVyIHN2Yy1pdGVtX19iYW5uZXJcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy10ZXh0IHN2Yy10ZXh0LS1zbWFsbCBzdmMtdGV4dC0tYm9sZFwiPntpdGVtLnRpdGxlfTwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy1wYWdlLW5hdmlnYXRvci1pdGVtX19kb3RcIj48L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2Pil9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBQcm9wZXJ0eUdyaWRWaWV3TW9kZWwgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IHsgQmFzZSwgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleSwgU3VydmV5RWxlbWVudEJhc2UsIFJlYWN0UXVlc3Rpb25GYWN0b3J5LCBTdXJ2ZXlRdWVzdGlvbkJ1dHRvbkdyb3VwLCBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuXG5pbnRlcmZhY2UgSVByb3BlcnR5R3JpZENvbXBvbmVudFByb3BzIHtcbiAgbW9kZWw6IFByb3BlcnR5R3JpZFZpZXdNb2RlbDtcbn1cblxuZXhwb3J0IGNsYXNzIFByb3BlcnR5R3JpZENvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPElQcm9wZXJ0eUdyaWRDb21wb25lbnRQcm9wcywgYW55PiB7XG5cbiAgZ2V0IG1vZGVsKCk6IFByb3BlcnR5R3JpZFZpZXdNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMubW9kZWw7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG5cbiAgcHVibGljIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMubW9kZWwpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gc3VwZXIuY2FuUmVuZGVyKCk7XG4gIH1cblxuICByZW5kZXJFbGVtZW50KCkge1xuICAgIHJldHVybiAoXG4gICAgICA8U3VydmV5IG1vZGVsPXt0aGlzLm1vZGVsLnN1cnZleX0+PC9TdXJ2ZXk+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiYnV0dG9uZ3JvdXBcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uQnV0dG9uR3JvdXAsIHByb3BzKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBQcm9wZXJ0eUdyaWRDb21wb25lbnQ7XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3ZjLXByb3BlcnR5LWdyaWRcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFByb3BlcnR5R3JpZENvbXBvbmVudCwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgeyBCYXNlLCBRdWVzdGlvbiwgU3VydmV5RXJyb3IsIFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBJU3VydmV5Q3JlYXRvciwgUmVhY3RFbGVtZW50RmFjdG9yeSwgUmVhY3RRdWVzdGlvbkZhY3RvcnksIFN1cnZleVF1ZXN0aW9uIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgQ3JlYXRvckJhc2UgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5pbnRlcmZhY2UgSVF1ZXN0aW9uRWRpdG9yQ29udGVudENvbXBvbmVudFByb3BzIHtcbiAgY3JlYXRvcjogQ3JlYXRvckJhc2U7XG4gIHN1cnZleTogU3VydmV5TW9kZWw7XG59XG5cbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkVkaXRvckNvbnRlbnRDb21wb25lbnQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8XG4gIElRdWVzdGlvbkVkaXRvckNvbnRlbnRDb21wb25lbnRQcm9wcyxcbiAgYW55XG4+IGltcGxlbWVudHMgSVN1cnZleUNyZWF0b3Ige1xuICBjb25zdHJ1Y3Rvcihwcm9wczogSVF1ZXN0aW9uRWRpdG9yQ29udGVudENvbXBvbmVudFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIGdldCBzdXJ2ZXkoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuc3VydmV5O1xuICB9XG4gIHB1YmxpYyBjcmVhdGVRdWVzdGlvbkVsZW1lbnQocXVlc3Rpb246IFF1ZXN0aW9uKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiBSZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVRdWVzdGlvbihcbiAgICAgICFxdWVzdGlvbi5pc0RlZmF1bHRSZW5kZXJpbmcgfHwgcXVlc3Rpb24uaXNEZWZhdWx0UmVuZGVyaW5nKClcbiAgICAgICAgPyBxdWVzdGlvbi5nZXRUZW1wbGF0ZSgpXG4gICAgICAgIDogcXVlc3Rpb24uZ2V0Q29tcG9uZW50TmFtZSgpLFxuICAgICAge1xuICAgICAgICBxdWVzdGlvbjogcXVlc3Rpb24sXG4gICAgICAgIGlzRGlzcGxheU1vZGU6IHF1ZXN0aW9uLmlzSW5wdXRSZWFkT25seSxcbiAgICAgICAgY3JlYXRvcjogdGhpcyxcbiAgICAgIH1cbiAgICApO1xuICB9XG4gIHB1YmxpYyBxdWVzdGlvblRpdGxlTG9jYXRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkucXVlc3Rpb25UaXRsZUxvY2F0aW9uO1xuICB9XG4gIHB1YmxpYyBxdWVzdGlvbkVycm9yTG9jYXRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkucXVlc3Rpb25FcnJvckxvY2F0aW9uO1xuICB9XG4gIHJlbmRlckVycm9yKGtleTogc3RyaW5nLCBlcnJvcjogU3VydmV5RXJyb3IsIGNzc0NsYXNzZXM6IGFueSk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgcXVlc3Rpb24gPSB0aGlzLnN1cnZleS5nZXRBbGxRdWVzdGlvbnMoKVswXTtcbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAgPFN1cnZleVF1ZXN0aW9uIGNyZWF0b3I9e3RoaXN9IGVsZW1lbnQ9e3F1ZXN0aW9ufT48L1N1cnZleVF1ZXN0aW9uPlxuICAgICAgPC8+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtcXVlc3Rpb24tZWRpdG9yLWNvbnRlbnRcIixcbiAgKHByb3BzOiBJUXVlc3Rpb25FZGl0b3JDb250ZW50Q29tcG9uZW50UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChRdWVzdGlvbkVkaXRvckNvbnRlbnRDb21wb25lbnQsIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5LCBTdXJ2ZXlQYWdlLCBJU3VydmV5Q3JlYXRvciwgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IFF1ZXN0aW9uRW1iZWRkZWRTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlFbGVtZW50RW1iZWRkZWRTdXJ2ZXkgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGVtYmVkZGVkU3VydmV5KCk6IFF1ZXN0aW9uRW1iZWRkZWRTdXJ2ZXlNb2RlbCB7XG4gICAgcmV0dXJuICh0aGlzLnByb3BzLmVsZW1lbnQgfHwgdGhpcy5wcm9wcy5xdWVzdGlvbikgYXMgUXVlc3Rpb25FbWJlZGRlZFN1cnZleU1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgY3JlYXRvcigpOiBJU3VydmV5Q3JlYXRvciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3JlYXRvcjtcbiAgfVxuICBwdWJsaWMgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMuZW1iZWRkZWRTdXJ2ZXkpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IHN1cnZleSA9IHRoaXMuZW1iZWRkZWRTdXJ2ZXkuZW1iZWRkZWRTdXJ2ZXk7XG4gICAgaWYgKCFzdXJ2ZXkgfHwgIXN1cnZleS5jdXJyZW50UGFnZSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIDxTdXJ2ZXlQYWdlXG4gICAgICBzdXJ2ZXk9e3N1cnZleX1cbiAgICAgIHBhZ2U9e3N1cnZleS5jdXJyZW50UGFnZX1cbiAgICAgIGNzcz17c3VydmV5LmNzc31cbiAgICAgIGNyZWF0b3I9e3RoaXMuY3JlYXRvcn1cbiAgICAvPjtcblxuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJlbWJlZGRlZHN1cnZleVwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5RWxlbWVudEVtYmVkZGVkU3VydmV5LCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7XG4gIFJlYWN0UXVlc3Rpb25GYWN0b3J5LFxuICBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlXG59IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IGVkaXRvckxvY2FsaXphdGlvbiwgUXVlc3Rpb25MaW5rVmFsdWVNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgeyBBY3Rpb25CdXR0b24gfSBmcm9tIFwiLi9BY3Rpb25CdXR0b25cIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uTGlua1ZhbHVlIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbkxpbmtWYWx1ZU1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25MaW5rVmFsdWVNb2RlbDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQ2xlYXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHNob3dDbGVhciA9ICh0aGlzLnF1ZXN0aW9uQmFzZSBhcyBhbnkpLnNob3dDbGVhcjtcbiAgICBpZiAoIXRoaXMucXVlc3Rpb25CYXNlLmlzUmVhZE9ubHkgJiYgc2hvd0NsZWFyKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8QWN0aW9uQnV0dG9uXG4gICAgICAgICAgY2xhc3Nlcz17dGhpcy5xdWVzdGlvbi5saW5rQ2xlYXJCdXR0b25Dc3NDbGFzc2VzfVxuICAgICAgICAgIGNsaWNrPXsoKSA9PiB0aGlzLnF1ZXN0aW9uLmRvQ2xlYXJDbGljaygpfVxuICAgICAgICAgIHNlbGVjdGVkPXt0aGlzLnF1ZXN0aW9uLmlzU2VsZWN0ZWR9XG4gICAgICAgICAgdGV4dD17ZWRpdG9yTG9jYWxpemF0aW9uLmdldFN0cmluZyhcInBlLmNsZWFyXCIpfVxuICAgICAgICA+PC9BY3Rpb25CdXR0b24+XG4gICAgICApO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIDxBY3Rpb25CdXR0b25cbiAgICAgICAgICBjbGFzc2VzPXt0aGlzLnF1ZXN0aW9uLmxpbmtTZXRCdXR0b25Dc3NDbGFzc2VzfVxuICAgICAgICAgIGNsaWNrPXsoKSA9PiB0aGlzLnF1ZXN0aW9uLmRvTGlua0NsaWNrKCl9XG4gICAgICAgICAgc2VsZWN0ZWQ9e3RoaXMucXVlc3Rpb24uaXNTZWxlY3RlZH1cbiAgICAgICAgICBkaXNhYmxlZD17dGhpcy5xdWVzdGlvbi5pc1JlYWRPbmx5fVxuICAgICAgICAgIHRleHQ9e3RoaXMucXVlc3Rpb24ubGlua1ZhbHVlVGV4dH1cbiAgICAgICAgICB0aXRsZT17dGhpcy5xdWVzdGlvbi50b29sdGlwfVxuICAgICAgICA+PC9BY3Rpb25CdXR0b24+XG4gICAgICAgIHt0aGlzLnJlbmRlckNsZWFyKCl9XG4gICAgICA8Lz5cbiAgICApO1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJsaW5rdmFsdWVcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uTGlua1ZhbHVlLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEJhc2UsIFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlSZXN1bHRzSXRlbU1vZGVsLCBTdXJ2ZXlSZXN1bHRzTW9kZWwgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IHsgYXR0YWNoS2V5MmNsaWNrLCBTdXJ2ZXlFbGVtZW50QmFzZSwgU3ZnSWNvbiB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IEFjdGlvbkJ1dHRvbiB9IGZyb20gXCIuL0FjdGlvbkJ1dHRvblwiO1xuXG5pbnRlcmZhY2UgSVN1cnZleVJlc3VsdHNQcm9wcyB7XG4gIHN1cnZleTogU3VydmV5TW9kZWw7XG59XG5leHBvcnQgY2xhc3MgU3VydmV5UmVzdWx0cyBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPFxuICBJU3VydmV5UmVzdWx0c1Byb3BzLFxuICBhbnlcbj4ge1xuICBtb2RlbDogU3VydmV5UmVzdWx0c01vZGVsO1xuICBjb25zdHJ1Y3Rvcihwcm9wczogSVN1cnZleVJlc3VsdHNQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICBpZiAocHJvcHMuc3VydmV5KSB7XG4gICAgICB0aGlzLm1vZGVsID0gbmV3IFN1cnZleVJlc3VsdHNNb2RlbChwcm9wcy5zdXJ2ZXkpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cblxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5tb2RlbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2ZC10ZXN0LXJlc3VsdHNcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmQtdGVzdC1yZXN1bHRzX19oZWFkZXJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2ZC10ZXN0LXJlc3VsdHNfX2hlYWRlci10ZXh0XCI+e3RoaXMubW9kZWwuc3VydmV5UmVzdWx0c1RleHR9PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmQtdGVzdC1yZXN1bHRzX19oZWFkZXItdHlwZXNcIj5cbiAgICAgICAgICAgIDxBY3Rpb25CdXR0b25cbiAgICAgICAgICAgICAgY2xpY2s9eygpID0+IHRoaXMubW9kZWwuc2VsZWN0VGFibGVDbGljaygpfVxuICAgICAgICAgICAgICB0ZXh0PXt0aGlzLm1vZGVsLmdldExvY1N0cmluZyhcImVkLnN1cnZleVJlc3VsdHNUYWJsZVwiKX1cbiAgICAgICAgICAgICAgc2VsZWN0ZWQ9e3RoaXMubW9kZWwuaXNUYWJsZVNlbGVjdGVkfVxuICAgICAgICAgICAgICBkaXNhYmxlZD17ZmFsc2V9XG4gICAgICAgICAgICA+PC9BY3Rpb25CdXR0b24+XG4gICAgICAgICAgICA8QWN0aW9uQnV0dG9uXG4gICAgICAgICAgICAgIGNsaWNrPXsoKSA9PiB0aGlzLm1vZGVsLnNlbGVjdEpzb25DbGljaygpfVxuICAgICAgICAgICAgICB0ZXh0PXt0aGlzLm1vZGVsLmdldExvY1N0cmluZyhcImVkLnN1cnZleVJlc3VsdHNKc29uXCIpfVxuICAgICAgICAgICAgICBzZWxlY3RlZD17dGhpcy5tb2RlbC5pc0pzb25TZWxlY3RlZH1cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e2ZhbHNlfVxuICAgICAgICAgICAgPjwvQWN0aW9uQnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAge3RoaXMucmVuZGVyUmVzdWx0QXNUZXh0KCl9XG4gICAgICAgIHt0aGlzLnJlbmRlclJlc3VsdEFzVGFibGUoKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcmVuZGVyUmVzdWx0QXNUZXh0KCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAodGhpcy5tb2RlbC5yZXN1bHRWaWV3VHlwZSAhPT0gXCJ0ZXh0XCIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmQtdGVzdC1yZXN1bHRzX190ZXh0IHN2ZC1saWdodC1iZy1jb2xvclwiPlxuICAgICAgICA8ZGl2Pnt0aGlzLm1vZGVsLnJlc3VsdFRleHR9PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHJlbmRlclJlc3VsdEFzVGFibGUoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICh0aGlzLm1vZGVsLnJlc3VsdFZpZXdUeXBlICE9PSBcInRhYmxlXCIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmQtdGVzdC1yZXN1bHRzX190YWJsZSBzdmQtbGlnaHQtYmctY29sb3JcIj5cbiAgICAgICAgPHRhYmxlPlxuICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgIDx0ciBjbGFzc05hbWU9XCJzdmQtbGlnaHQtYmFja2dyb3VuZC1jb2xvclwiPlxuICAgICAgICAgICAgICA8dGggY2xhc3NOYW1lPVwic3ZkLWRhcmstYm9yZGVyLWNvbG9yXCI+XG4gICAgICAgICAgICAgICAge3RoaXMubW9kZWwucmVzdWx0c1RpdGxlfVxuICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICA8dGggY2xhc3NOYW1lPVwic3ZkLWRhcmstYm9yZGVyLWNvbG9yXCI+XG4gICAgICAgICAgICAgICAge3RoaXMubW9kZWwucmVzdWx0c0Rpc3BsYXlWYWx1ZX1cbiAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICA8dGJvZHk+e1N1cnZleVJlc3VsdHMucmVuZGVyUm93cyh0aGlzLm1vZGVsLnJlc3VsdERhdGEpfTwvdGJvZHk+XG4gICAgICAgIDwvdGFibGU+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHN0YXRpYyByZW5kZXJSb3dzKGRhdGE6IEFycmF5PGFueT4pOiBBcnJheTxKU1guRWxlbWVudD4ge1xuICAgIHJldHVybiBkYXRhLm1hcCgoaXRlbSkgPT4gPFN1cnZleVJlc3VsdHNCeVJvdyBrZXk9e2l0ZW0uaWR9IHJvdz17aXRlbX0gLz4pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlSZXN1bHRzQnlSb3cgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxhbnksIGFueT4ge1xuICBwcml2YXRlIGdldCByb3coKTogU3VydmV5UmVzdWx0c0l0ZW1Nb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMucm93O1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5yb3c7XG4gIH1cblxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICB7YXR0YWNoS2V5MmNsaWNrKDx0ciBvbkNsaWNrPXsoKSA9PiB0aGlzLnJvdy50b2dnbGUoKX0+XG4gICAgICAgICAgPHRkXG4gICAgICAgICAgICBzdHlsZT17eyBwYWRkaW5nTGVmdDogdGhpcy5yb3cudGV4dE1hcmdpbiB9fVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwic3ZkLWRhcmstYm9yZGVyLWNvbG9yXCI+XG5cbiAgICAgICAgICAgIHt0aGlzLnJvdy5pc05vZGUgPyAoXG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgc3R5bGU9e3sgbGVmdDogdGhpcy5yb3cubWFya2VyTWFyZ2luIH19XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtcInN2ZC10ZXN0LXJlc3VsdHNfX21hcmtlciBcIiArICh0aGlzLnJvdy5jb2xsYXBzZWQgPyBcIlwiIDogXCJzdmQtdGVzdC1yZXN1bHRzX19tYXJrZXItLWV4cGFuZGVkXCIpfT5cbiAgICAgICAgICAgICAgICA8U3ZnSWNvblxuICAgICAgICAgICAgICAgICAgaWNvbk5hbWU9e1wiaWNvbi1leHBhbmRfMTZ4MTZcIn1cbiAgICAgICAgICAgICAgICAgIHNpemU9ezE2fVxuICAgICAgICAgICAgICAgID48L1N2Z0ljb24+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICkgOiBudWxsfVxuXG4gICAgICAgICAgICA8c3Bhbj57dGhpcy5yb3cudGl0bGV9PC9zcGFuPlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPHRkIGNsYXNzTmFtZT17dGhpcy5yb3cuaXNOb2RlID8gXCJzdmQtdGVzdC1yZXN1bHRzX19ub2RlLXZhbHVlXCIgOiBcInN2ZC1kYXJrLWJvcmRlci1jb2xvclwifT5cbiAgICAgICAgICAgIHt0aGlzLnJvdy5nZXRTdHJpbmcodGhpcy5yb3cuZGlzcGxheVZhbHVlKX1cbiAgICAgICAgICA8L3RkPlxuICAgICAgICA8L3RyPil9XG4gICAgICAgIHt0aGlzLnJvdy5pc05vZGUgJiYgIXRoaXMucm93LmNvbGxhcHNlZCA/IFN1cnZleVJlc3VsdHMucmVuZGVyUm93cyh0aGlzLnJvdy5kYXRhKSA6IG51bGx9XG4gICAgICA8Lz5cbiAgICApO1xuICB9XG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTaWRlYmFyVGFiTW9kZWwsIFNpZGViYXJNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50QmFzZSwgU3VydmV5QWN0aW9uQmFyLCBSZWFjdFF1ZXN0aW9uRmFjdG9yeSwgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcblxuaW50ZXJmYWNlIElTaWRlYmFyQ29tcG9uZW50UHJvcHMge1xuICBtb2RlbDogU2lkZWJhck1vZGVsO1xufVxuXG5leHBvcnQgY2xhc3MgU2lkZWJhckNvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPElTaWRlYmFyQ29tcG9uZW50UHJvcHMsIGFueT4ge1xuICBwcml2YXRlIGNvbnRhaW5lclJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcblxuICBnZXQgbW9kZWwoKTogU2lkZWJhck1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5tb2RlbDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBJU2lkZWJhckNvbXBvbmVudFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuY29udGFpbmVyUmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICB0aGlzLm1vZGVsLmluaXRSZXNpemVNYW5hZ2VyKHRoaXMuY29udGFpbmVyUmVmLmN1cnJlbnQpO1xuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAgdGhpcy5tb2RlbC5yZXNldFJlc2l6ZU1hbmFnZXIoKTtcbiAgfVxuICBwdWJsaWMgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5tb2RlbCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBzdXBlci5jYW5SZW5kZXIoKTtcbiAgfVxuICByZW5kZXJFbGVtZW50KCkge1xuICAgIGNvbnN0IHN0eWxlID0geyBkaXNwbGF5OiAhdGhpcy5tb2RlbC52aXNpYmxlID8gXCJub25lXCIgOiBcIlwiIH07XG4gICAgY29uc3QgY2xhc3NOYW1lID0gXCJzdmMtc2lkZS1iYXJcIiArICh0aGlzLm1vZGVsLmZseW91dFBhbmVsTW9kZSA/IFwiIHN2Yy1mbHlvdXQtc2lkZS1iYXJcIiA6IFwiXCIpO1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5tb2RlbC50YWJzLm1hcCgoaXRlbSkgPT4gPFNpZGViYXJUYWIgaXRlbT17aXRlbX0ga2V5PXtpdGVtLmlkfSAvPik7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWV9IHN0eWxlPXt7IGRpc3BsYXk6ICF0aGlzLm1vZGVsLmhhc1Zpc2libGVUYWJzID8gXCJub25lXCIgOiBcIlwiIH19PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1zaWRlLWJhcl9fc2hhZG93XCI+PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWZsZXgtY29sdW1uIHN2Yy1zaWRlLWJhcl9fd3JhcHBlclwiPlxuICAgICAgICAgIDxkaXYgcmVmPXt0aGlzLmNvbnRhaW5lclJlZn0gc3R5bGU9e3N0eWxlfSBjbGFzc05hbWU9XCJzdmMtc2lkZS1iYXJfX2NvbnRhaW5lclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtc2lkZS1iYXJfX2NvbnRhaW5lci1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtc2lkZS1iYXJfX2NvbnRhaW5lci1hY3Rpb25zXCI+XG4gICAgICAgICAgICAgICAgPFN1cnZleUFjdGlvbkJhciBtb2RlbD17dGhpcy5tb2RlbC50b29sYmFyfT48L1N1cnZleUFjdGlvbkJhcj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXNpZGUtYmFyX19jb250YWluZXItdGl0bGVcIj5cbiAgICAgICAgICAgICAgICB7dGhpcy5tb2RlbC5oZWFkZXJUZXh0fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtc2lkZS1iYXJfX2NvbnRhaW5lci1jb250ZW50XCI+XG4gICAgICAgICAgICAgIHtpdGVtc31cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtc2lkZS1iYXJfX2NvbnRhaW5lci1jbG9zZVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNkLWJ0biBzZC1idG4tLWFjdGlvbiBzdmMtc2lkZS1iYXJfX2NvbnRhaW5lci1jbG9zZS1idXR0b25cIiBvbkNsaWNrPXsoKSA9PiB0aGlzLm1vZGVsLmNvbGxhcHNlU2lkZWJhcigpfT4ge3RoaXMubW9kZWwuY2xvc2VUZXh0fSA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuY2xhc3MgU2lkZWJhclRhYiBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPGFueSwgYW55PiB7XG4gIHByaXZhdGUgZ2V0IGl0ZW0oKTogU2lkZWJhclRhYk1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtO1xuICB9XG5cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLml0ZW0udmlzaWJsZSkgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCBjb21wb25lbnQgPSBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQodGhpcy5pdGVtLmNvbXBvbmVudE5hbWUsIHsgbW9kZWw6IHRoaXMuaXRlbS5tb2RlbCB9KTtcblxuICAgIHJldHVybiBjb21wb25lbnQ7XG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcInN2Yy1zaWRlLWJhci10YWJcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFNpZGViYXJUYWIsIHByb3BzKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBTaWRlYmFyQ29tcG9uZW50O1xuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2Yy1zaWRlLWJhclwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU2lkZWJhckNvbXBvbmVudCwgcHJvcHMpO1xufSk7IiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgTG9jYWxpemFibGVTdHJpbmcsIFNlcmlhbGl6ZXIsIEpzb25PYmplY3RQcm9wZXJ0eSwgQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSwgU3VydmV5RWxlbWVudEJhc2UsIFN2Z0ljb24gfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBDcmVhdG9yQmFzZSwgU3RyaW5nRWRpdG9yVmlld01vZGVsQmFzZSwgZWRpdGFibGVTdHJpbmdSZW5kZXJlck5hbWUgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5TG9jU3RyaW5nRWRpdG9yIGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8YW55LCBhbnk+IHtcbiAgcHJpdmF0ZSBiYXNlTW9kZWw6IFN0cmluZ0VkaXRvclZpZXdNb2RlbEJhc2U7XG4gIHByaXZhdGUgc3ZTdHJpbmdFZGl0b3JSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIHByaXZhdGUgYmx1cnJlZEJ5RXNjYXBlOiBib29sZWFuID0gZmFsc2U7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHsgY2hhbmdlZDogMCB9O1xuICAgIHRoaXMuYmFzZU1vZGVsID0gbmV3IFN0cmluZ0VkaXRvclZpZXdNb2RlbEJhc2UodGhpcy5sb2NTdHJpbmcsIHRoaXMuY3JlYXRvcik7XG4gICAgdGhpcy5zdlN0cmluZ0VkaXRvclJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICAgIHRoaXMuYmFzZU1vZGVsLmJsdXJFZGl0b3IgPSAoKSA9PiB7XG4gICAgICB0aGlzLnN2U3RyaW5nRWRpdG9yUmVmLmN1cnJlbnQuYmx1cigpO1xuICAgICAgdGhpcy5zdlN0cmluZ0VkaXRvclJlZi5jdXJyZW50LnNwZWxsY2hlY2sgPSBmYWxzZTtcbiAgICB9O1xuICB9XG4gIHByaXZhdGUgZ2V0IGxvY1N0cmluZygpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMubG9jU3RyLmxvY1N0cjtcbiAgfVxuICBwcml2YXRlIGdldCBjcmVhdG9yKCk6IENyZWF0b3JCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5sb2NTdHIuY3JlYXRvcjtcbiAgfVxuICBwcml2YXRlIGdldCBzdHlsZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnN0eWxlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5iYXNlTW9kZWw7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGVycm9yVGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmJhc2VNb2RlbC5lcnJvclRleHQ7XG4gIH1cblxuICBwdWJsaWMgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICBpZiAoIXRoaXMubG9jU3RyaW5nKSByZXR1cm47XG4gICAgY29uc3Qgc2VsZjogU3VydmV5TG9jU3RyaW5nRWRpdG9yID0gdGhpcztcbiAgICB0aGlzLmxvY1N0cmluZy5vbkNoYW5nZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBzZWxmLnNldFN0YXRlKHsgY2hhbmdlZDogc2VsZi5zdGF0ZS5jaGFuZ2VkICsgMSB9KTtcbiAgICB9O1xuICAgIGlmICh0aGlzLmxvY1N0cmluZ1tcIl9faXNFZGl0aW5nXCJdKSB7XG4gICAgICB0aGlzLnN2U3RyaW5nRWRpdG9yUmVmLmN1cnJlbnQuZm9jdXMoKTtcbiAgICAgIC8vIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdzZWxlY3RBbGwnLCBmYWxzZSwgbnVsbCk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIGlmICghdGhpcy5sb2NTdHJpbmcpIHJldHVybjtcbiAgICB0aGlzLmxvY1N0cmluZy5vbkNoYW5nZWQgPSBmdW5jdGlvbiAoKSB7IH07XG4gIH1cbiAgcHJpdmF0ZSBnZXQgcGxhY2Vob2xkZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5iYXNlTW9kZWwucGxhY2Vob2xkZXI7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgY29udGVudEVkaXRhYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmJhc2VNb2RlbC5jb250ZW50RWRpdGFibGU7XG4gIH1cbiAgcHJpdmF0ZSBvbkJsdXIgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgIHRoaXMuc3ZTdHJpbmdFZGl0b3JSZWYuY3VycmVudC5zcGVsbGNoZWNrID0gZmFsc2U7XG4gICAgdGhpcy5sb2NTdHJpbmdbXCJfX2lzRWRpdGluZ1wiXSA9IGZhbHNlO1xuICAgIHRoaXMuanVzdEZvY3VzZWQgPSBmYWxzZTtcbiAgICB0aGlzLmJhc2VNb2RlbC5vbklucHV0KGV2ZW50Lm5hdGl2ZUV2ZW50KTtcbiAgICByZXR1cm4gdGhpcy5iYXNlTW9kZWwuZXJyb3JUZXh0O1xuICB9O1xuICBwcml2YXRlIGp1c3RGb2N1c2VkID0gZmFsc2U7XG4gIHByaXZhdGUgb25Gb2N1cyA9IChldmVudDogYW55KSA9PiB7XG4gICAgdGhpcy5iYXNlTW9kZWwub25Gb2N1cyhldmVudC5uYXRpdmVFdmVudCk7XG4gICAgdGhpcy5qdXN0Rm9jdXNlZCA9IHRydWU7XG4gIH07XG4gIHByaXZhdGUgb25LZXlEb3duID0gKGV2ZW50OiBSZWFjdC5LZXlib2FyZEV2ZW50PEhUTUxTcGFuRWxlbWVudD4pID0+IHtcbiAgICByZXR1cm4gdGhpcy5iYXNlTW9kZWwub25LZXlEb3duKGV2ZW50Lm5hdGl2ZUV2ZW50KTtcbiAgfTtcbiAgcHJpdmF0ZSBvbk1vdXNlVXAgPSAoZXZlbnQ6IFJlYWN0Lk1vdXNlRXZlbnQ8SFRNTFNwYW5FbGVtZW50Pik6IGJvb2xlYW4gPT4ge1xuICAgIHJldHVybiB0aGlzLmJhc2VNb2RlbC5vbk1vdXNlVXAoZXZlbnQubmF0aXZlRXZlbnQpO1xuICB9O1xuICBwcml2YXRlIGRvbmUgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgIHRoaXMuYmFzZU1vZGVsLmRvbmUoZXZlbnQpO1xuICAgIHRoaXMubG9jU3RyaW5nW1wiX19pc0VkaXRpbmdcIl0gPSBmYWxzZTtcbiAgfTtcbiAgcHJpdmF0ZSBlZGl0ID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICB0aGlzLnN2U3RyaW5nRWRpdG9yUmVmLmN1cnJlbnQuZm9jdXMoKTtcbiAgICAvLyBkb2N1bWVudC5leGVjQ29tbWFuZCgnc2VsZWN0QWxsJywgZmFsc2UsIG51bGwpO1xuICAgIHRoaXMubG9jU3RyaW5nW1wiX19pc0VkaXRpbmdcIl0gPSB0cnVlO1xuICAgIHRoaXMuYmFzZU1vZGVsLm9uQ2xpY2soZXZlbnQpO1xuICB9O1xuICBwcml2YXRlIGdldCBjbGFzc05hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuYmFzZU1vZGVsLmNsYXNzTmFtZSh0aGlzLmxvY1N0cmluZy5yZW5kZXJlZEh0bWwpO1xuICB9XG4gIHB1YmxpYyByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5sb2NTdHJpbmcpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuYmFzZU1vZGVsLnNldExvY1N0cmluZyh0aGlzLmxvY1N0cmluZyk7XG4gICAgfVxuICAgIGxldCBjb250cm9sID0gbnVsbDtcbiAgICBpZiAodGhpcy5sb2NTdHJpbmcuaGFzSHRtbCkge1xuICAgICAgY29uc3QgaHRtbFZhbHVlID0geyBfX2h0bWw6IHRoaXMuYmFzZU1vZGVsLmZvY3VzZWQgJiYgdGhpcy5sb2NTdHJpbmcudGV4dCB8fCB0aGlzLmxvY1N0cmluZy5yZW5kZXJlZEh0bWwgfTtcbiAgICAgIGNvbnRyb2wgPSAoXG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgcmVmPXt0aGlzLnN2U3RyaW5nRWRpdG9yUmVmfVxuICAgICAgICAgIGNsYXNzTmFtZT1cInN2LXN0cmluZy1lZGl0b3JcIlxuICAgICAgICAgIGNvbnRlbnRFZGl0YWJsZT17dGhpcy5jb250ZW50RWRpdGFibGV9XG4gICAgICAgICAgc3BlbGxDaGVjaz17ZmFsc2V9XG4gICAgICAgICAgYXJpYS1wbGFjZWhvbGRlcj17dGhpcy5wbGFjZWhvbGRlcn1cbiAgICAgICAgICBzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmc9e3RydWV9XG4gICAgICAgICAgLy8gc3R5bGU9e3RoaXMuc3R5bGV9XG4gICAgICAgICAgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e2h0bWxWYWx1ZX1cbiAgICAgICAgICBvbkJsdXI9e3RoaXMub25CbHVyfVxuICAgICAgICAgIG9uRm9jdXM9e3RoaXMub25Gb2N1c31cbiAgICAgICAgICBvbktleURvd249e3RoaXMub25LZXlEb3dufVxuICAgICAgICAgIG9uTW91c2VVcD17dGhpcy5vbk1vdXNlVXB9XG4gICAgICAgICAgb25DbGljaz17dGhpcy5lZGl0fVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29udHJvbCA9IChcbiAgICAgICAgPHNwYW5cbiAgICAgICAgICByZWY9e3RoaXMuc3ZTdHJpbmdFZGl0b3JSZWZ9XG4gICAgICAgICAgY2xhc3NOYW1lPVwic3Ytc3RyaW5nLWVkaXRvclwiXG4gICAgICAgICAgY29udGVudEVkaXRhYmxlPXt0aGlzLmNvbnRlbnRFZGl0YWJsZX1cbiAgICAgICAgICBzcGVsbENoZWNrPXtmYWxzZX1cbiAgICAgICAgICBhcmlhLXBsYWNlaG9sZGVyPXt0aGlzLnBsYWNlaG9sZGVyfVxuICAgICAgICAgIHN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZz17dHJ1ZX1cbiAgICAgICAgICAvLyBzdHlsZT17dGhpcy5zdHlsZX1cbiAgICAgICAgICBvbkJsdXI9e3RoaXMub25CbHVyfVxuICAgICAgICAgIG9uRm9jdXM9e3RoaXMub25Gb2N1c31cbiAgICAgICAgICBvbktleURvd249e3RoaXMub25LZXlEb3dufVxuICAgICAgICAgIG9uTW91c2VVcD17dGhpcy5vbk1vdXNlVXB9XG4gICAgICAgICAgb25DbGljaz17dGhpcy5lZGl0fVxuICAgICAgICA+XG4gICAgICAgICAge3RoaXMubG9jU3RyaW5nLnJlbmRlcmVkSHRtbH1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDxzcGFuIGNsYXNzTmFtZT17dGhpcy5jbGFzc05hbWV9PlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzdmMtc3RyaW5nLWVkaXRvcl9fY29udGVudFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXN0cmluZy1lZGl0b3JfX2JvcmRlclwiXG4gICAgICAgICAgICBvbkNsaWNrPXt0aGlzLmVkaXR9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFN2Z0ljb25cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwic3ZjLXN0cmluZy1lZGl0b3JfX2J1dHRvbiBzdmMtc3RyaW5nLWVkaXRvcl9fYnV0dG9uLS1lZGl0XCJcbiAgICAgICAgICAgICAgc2l6ZT17MTZ9XG4gICAgICAgICAgICAgIGljb25OYW1lPXtcImljb24tZWRpdFwifVxuICAgICAgICAgICAgPjwvU3ZnSWNvbj5cblxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIHtjb250cm9sfVxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXN0cmluZy1lZGl0b3JfX2NvbnRyb2xzXCJcbiAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMuZWRpdH0+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAge3RoaXMuZXJyb3JUZXh0ID8gPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXN0cmluZy1lZGl0b3JfX2Vycm9yXCI+e3RoaXMuZXJyb3JUZXh0fTwvc3Bhbj4gOiBcIlwifVxuICAgICAgPC9zcGFuPlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIGVkaXRhYmxlU3RyaW5nUmVuZGVyZXJOYW1lLFxuICAocHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlMb2NTdHJpbmdFZGl0b3IsIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5cbmltcG9ydCB7XG4gIEJhc2UsXG4gIFF1ZXN0aW9uLFxuICBTdXJ2ZXlFcnJvcixcbiAgU3VydmV5TW9kZWxcbn0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQge1xuICBTdXJ2ZXlBY3Rpb25CYXIsXG4gIFJlYWN0RWxlbWVudEZhY3RvcnksXG4gIFJlYWN0UXVlc3Rpb25GYWN0b3J5LFxuICBTdXJ2ZXlFbGVtZW50QmFzZSxcbiAgU3VydmV5TG9jU3RyaW5nVmlld2VyLFxuICBTdXJ2ZXlcbn0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHtcbiAgSUNyZWF0b3JPcHRpb25zLFxuICBDcmVhdG9yQmFzZSxcbiAgSVRhYmJlZE1lbnVJdGVtXG59IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgeyBUYWJiZWRNZW51Q29tcG9uZW50IH0gZnJvbSBcIi4vVGFiYmVkTWVudVwiO1xuaW1wb3J0IHsgTm90aWZpZXJDb21wb25lbnQgfSBmcm9tIFwiLi9Ob3RpZmllclwiO1xuaW1wb3J0IHsgU3ZnQnVuZGxlQ29tcG9uZW50IH0gZnJvbSBcIi4vU3ZnQnVuZGxlXCI7XG5cbmludGVyZmFjZSBJU3VydmV5Q3JlYXRvckNvbXBvbmVudFByb3BzIHtcbiAgY3JlYXRvcjogU3VydmV5Q3JlYXRvcjtcbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleUNyZWF0b3JDb21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxcbiAgSVN1cnZleUNyZWF0b3JDb21wb25lbnRQcm9wcyxcbiAgYW55XG4+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IElTdXJ2ZXlDcmVhdG9yQ29tcG9uZW50UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5yb290Tm9kZSA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICB9XG4gIGdldCBjcmVhdG9yKCk6IENyZWF0b3JCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jcmVhdG9yO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3JlYXRvcjtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIHRoaXMuY3JlYXRvci5pbml0S2V5Ym9hcmRTaG9ydGN1dHModGhpcy5yb290Tm9kZS5jdXJyZW50KTtcbiAgICB0aGlzLmNyZWF0b3IuaW5pdFJlc3BvbnNpdml0eU1hbmFnZXIodGhpcy5yb290Tm9kZS5jdXJyZW50KTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIHRoaXMuY3JlYXRvci5yZW1vdmVLZXlib2FyZFNob3J0Y3V0cyh0aGlzLnJvb3ROb2RlLmN1cnJlbnQpO1xuICAgIHRoaXMuY3JlYXRvci5yZXNldFJlc3BvbnNpdml0eU1hbmFnZXIoKTtcbiAgfVxuICBwcml2YXRlIHJvb3ROb2RlOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuXG4gIHJlbmRlckVsZW1lbnQoKSB7XG4gICAgY29uc3QgY3JlYXRvcjogQ3JlYXRvckJhc2UgPSB0aGlzLnByb3BzLmNyZWF0b3I7XG4gICAgaWYgKGNyZWF0b3IuaXNDcmVhdG9yRGlzcG9zZWQpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IGNyZWF0b3JDbGFzc05hbWUgPSBcInN2Yy1jcmVhdG9yXCIgKyAodGhpcy5wcm9wcy5jcmVhdG9yLmlzTW9iaWxlVmlldyA/IFwiIHN2Yy1jcmVhdG9yLS1tb2JpbGVcIiA6IFwiXCIpO1xuICAgIGNvbnN0IGFyZWFDbGFzc05hbWUgPSBcInN2Yy1mdWxsLWNvbnRhaW5lciBzdmMtY3JlYXRvcl9fYXJlYSBzdmMtZmxleC1jb2x1bW5cIiArICh0aGlzLnByb3BzLmNyZWF0b3IuaGF2ZUNvbW1lcmNpYWxMaWNlbnNlID8gXCJcIiA6IFwiIHN2Yy1jcmVhdG9yX19hcmVhLS13aXRoLWJhbm5lclwiKTtcbiAgICBjb25zdCBjb250ZW50V3JhcHBlckNsYXNzTmFtZSA9IFwic3ZjLWNyZWF0b3JfX2NvbnRlbnQtd3JhcHBlciBzdmMtZmxleC1yb3dcIiArICh0aGlzLnByb3BzLmNyZWF0b3IuaXNNb2JpbGVWaWV3ID8gXCIgc3ZjLWNyZWF0b3JfX2NvbnRlbnQtd3JhcHBlci0tZm9vdGVyLXRvb2xiYXJcIiA6IFwiXCIpO1xuICAgIGNvbnN0IGZ1bGxDb250YWluZXJDbGFzc05hbWUgPSBcInN2Yy1mbGV4LXJvdyBzdmMtZnVsbC1jb250YWluZXJcIiArIChcIiBzdmMtY3JlYXRvcl9fc2lkZS1iYXItLVwiICsgdGhpcy5jcmVhdG9yLnNpZGViYXJMb2NhdGlvbik7XG4gICAgbGV0IGxpY2Vuc2VCYW5uZXIgPSBudWxsO1xuICAgIGlmICghdGhpcy5wcm9wcy5jcmVhdG9yLmhhdmVDb21tZXJjaWFsTGljZW5zZSkge1xuICAgICAgbGljZW5zZUJhbm5lciA9IChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtY3JlYXRvcl9fYmFubmVyXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLWNyZWF0b3JfX25vbi1jb21tZXJjaWFsLXRleHRcIj5cbiAgICAgICAgICAgIDxhIGhyZWY9XCJodHRwczovL3N1cnZleWpzLmlvL2J1eVwiPlxuICAgICAgICAgICAgICB7dGhpcy5wcm9wcy5jcmVhdG9yLmxpY2Vuc2VUZXh0fVxuICAgICAgICAgICAgPC9hPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH1cbiAgICAvL0FNOiB3aWR0aCB1bnJlY29nbml6ZWQgYnkgcmVhY3RcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2NyZWF0b3JDbGFzc05hbWV9IHJlZj17dGhpcy5yb290Tm9kZX0+XG4gICAgICAgIDxTdmdCdW5kbGVDb21wb25lbnQ+PC9TdmdCdW5kbGVDb21wb25lbnQ+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXthcmVhQ2xhc3NOYW1lfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17ZnVsbENvbnRhaW5lckNsYXNzTmFtZX0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1mbGV4LWNvbHVtbiBzdmMtZmxleC1yb3dfX2VsZW1lbnQgc3ZjLWZsZXgtcm93X19lbGVtZW50LS1ncm93aW5nXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXRvcC1iYXJcIj5cbiAgICAgICAgICAgICAgICB7KGNyZWF0b3Iuc2hvd1RhYnMgP1xuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtdGFiYmVkLW1lbnUtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICA8VGFiYmVkTWVudUNvbXBvbmVudCBtb2RlbD17Y3JlYXRvci50YWJiZWRNZW51fT48L1RhYmJlZE1lbnVDb21wb25lbnQ+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj4gOiBudWxsKX1cbiAgICAgICAgICAgICAgICB7KGNyZWF0b3Iuc2hvd1Rvb2xiYXIgP1xuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtdG9vbGJhci13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxTdXJ2ZXlBY3Rpb25CYXIgbW9kZWw9e2NyZWF0b3IudG9vbGJhcn0+PC9TdXJ2ZXlBY3Rpb25CYXI+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDogbnVsbCl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y29udGVudFdyYXBwZXJDbGFzc05hbWV9PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWNyZWF0b3JfX2NvbnRlbnQtaG9sZGVyIHN2Yy1mbGV4LWNvbHVtblwiPlxuICAgICAgICAgICAgICAgICAge3RoaXMucmVuZGVyQWN0aXZlVGFiKCl9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1mb290ZXItYmFyXCI+XG4gICAgICAgICAgICAgICAgeyhjcmVhdG9yLmlzTW9iaWxlVmlldyA/XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy10b29sYmFyLXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPFN1cnZleUFjdGlvbkJhciBtb2RlbD17Y3JlYXRvci5mb290ZXJUb29sYmFyfT48L1N1cnZleUFjdGlvbkJhcj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgOiBudWxsKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIHt0aGlzLnJlbmRlclNpZGViYXIoKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB7bGljZW5zZUJhbm5lcn1cbiAgICAgICAgICA8Tm90aWZpZXJDb21wb25lbnRcbiAgICAgICAgICAgIGNyZWF0b3I9e2NyZWF0b3J9XG4gICAgICAgICAgICBub3RpZmllcj17Y3JlYXRvci5ub3RpZmllcn1cbiAgICAgICAgICA+PC9Ob3RpZmllckNvbXBvbmVudD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHJlbmRlckFjdGl2ZVRhYigpIHtcbiAgICBjb25zdCBjcmVhdG9yOiBDcmVhdG9yQmFzZSA9IHRoaXMucHJvcHMuY3JlYXRvcjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNyZWF0b3IudGFicy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGNyZWF0b3IudGFic1tpXS5pZCA9PT0gY3JlYXRvci5hY3RpdmVUYWIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyQ3JlYXRvclRhYihjcmVhdG9yLnRhYnNbaV0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZW5kZXJDcmVhdG9yVGFiKHRhYjogSVRhYmJlZE1lbnVJdGVtKSB7XG4gICAgaWYgKHRhYi52aXNpYmxlID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IGNyZWF0b3I6IENyZWF0b3JCYXNlID0gdGhpcy5wcm9wcy5jcmVhdG9yO1xuICAgIGNvbnN0IGNvbXBvbmVudCA9ICEhdGFiLnJlbmRlclRhYlxuICAgICAgPyB0YWIucmVuZGVyVGFiKClcbiAgICAgIDogUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KHRhYi5jb21wb25lbnRDb250ZW50LCB7XG4gICAgICAgIGNyZWF0b3I6IGNyZWF0b3IsXG4gICAgICAgIHN1cnZleTogY3JlYXRvci5zdXJ2ZXksXG4gICAgICAgIGRhdGE6IHRhYi5kYXRhLm1vZGVsXG4gICAgICB9KTtcbiAgICBjb25zdCBjbGFzc05hbWUgPSBcInN2Yy1jcmVhdG9yLXRhYlwiICsgKGNyZWF0b3IudG9vbGJveExvY2F0aW9uID09IFwicmlnaHRcIiA/IFwiIHN2Yy1jcmVhdG9yX190b29sYm94LS1yaWdodFwiIDogXCJcIik7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAga2V5PXt0YWIuaWR9XG4gICAgICAgIGlkPXtcInNjcm9sbGFibGVEaXYtXCIgKyB0YWIuaWR9XG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgPlxuICAgICAgICB7Y29tcG9uZW50fVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICByZW5kZXJTaWRlYmFyKCkge1xuICAgIGlmICghIXRoaXMuY3JlYXRvci5zaWRlYmFyKSB7XG4gICAgICBjb25zdCBjbGFzc05hbWUgPSB0aGlzLmNyZWF0b3IuaXNNb2JpbGVWaWV3ID8gXCJzdi1tb2JpbGUtc2lkZS1iYXJcIiA6IFwiXCI7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lfT5cbiAgICAgICAgICB7UmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KFwic3ZjLXNpZGUtYmFyXCIsIHsgbW9kZWw6IHRoaXMuY3JlYXRvci5zaWRlYmFyIH0pfVxuICAgICAgICA8L2Rpdj4pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleUNyZWF0b3IgZXh0ZW5kcyBDcmVhdG9yQmFzZSB7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IElDcmVhdG9yT3B0aW9ucyA9IHt9LCBvcHRpb25zMj86IElDcmVhdG9yT3B0aW9ucykge1xuICAgIHN1cGVyKG9wdGlvbnMsIG9wdGlvbnMyKTtcbiAgfVxuICBwdWJsaWMgcmVuZGVyKHRhcmdldDogc3RyaW5nIHwgSFRNTEVsZW1lbnQpIHtcbiAgICBsZXQgbm9kZTogSFRNTEVsZW1lbnQgPSB0YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgaWYgKHR5cGVvZiB0YXJnZXQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIG5vZGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0YXJnZXQpO1xuICAgIH1cbiAgICBSZWFjdERPTS51bm1vdW50Q29tcG9uZW50QXROb2RlKG5vZGUpO1xuICAgIFJlYWN0RE9NLnJlbmRlcihcbiAgICAgIDxSZWFjdC5TdHJpY3RNb2RlPlxuICAgICAgICA8U3VydmV5Q3JlYXRvckNvbXBvbmVudCBjcmVhdG9yPXt0aGlzfSAvPlxuICAgICAgPC9SZWFjdC5TdHJpY3RNb2RlPixcbiAgICAgIG5vZGVcbiAgICApO1xuICB9XG5cbiAgLy9JU3VydmV5Q3JlYXRvclxuICBwdWJsaWMgY3JlYXRlUXVlc3Rpb25FbGVtZW50KHF1ZXN0aW9uOiBRdWVzdGlvbik6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlUXVlc3Rpb24oXG4gICAgICBxdWVzdGlvbi5pc0RlZmF1bHRSZW5kZXJpbmcoKVxuICAgICAgICA/IHF1ZXN0aW9uLmdldFRlbXBsYXRlKClcbiAgICAgICAgOiBxdWVzdGlvbi5nZXRDb21wb25lbnROYW1lKCksXG4gICAgICB7XG4gICAgICAgIHF1ZXN0aW9uOiBxdWVzdGlvbixcbiAgICAgICAgaXNEaXNwbGF5TW9kZTogcXVlc3Rpb24uaXNSZWFkT25seSxcbiAgICAgICAgY3JlYXRvcjogdGhpc1xuICAgICAgfVxuICAgICk7XG4gIH1cbiAgcHVibGljIHJlbmRlckVycm9yKFxuICAgIGtleTogc3RyaW5nLFxuICAgIGVycm9yOiBTdXJ2ZXlFcnJvcixcbiAgICBjc3NDbGFzc2VzOiBhbnlcbiAgKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGtleT17a2V5fT5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtjc3NDbGFzc2VzLmVycm9yLmljb259IGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5lcnJvci5pdGVtfT5cbiAgICAgICAgICA8U3VydmV5TG9jU3RyaW5nVmlld2VyIGxvY1N0cj17ZXJyb3IubG9jVGV4dH0gLz5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwdWJsaWMgcXVlc3Rpb25UaXRsZUxvY2F0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5LnF1ZXN0aW9uVGl0bGVMb2NhdGlvbjtcbiAgfVxuICBwdWJsaWMgcXVlc3Rpb25FcnJvckxvY2F0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5LnF1ZXN0aW9uRXJyb3JMb2NhdGlvbjtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN1cnZleS13aWRnZXRcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleSwgcHJvcHMpO1xufSk7XG4iLCJcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHN2Z0J1bmRsZSB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuXG5leHBvcnQgY2xhc3MgU3ZnQnVuZGxlQ29tcG9uZW50IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSBjb250YWluZXJSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmNvbnRhaW5lclJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHRoaXMuY29udGFpbmVyUmVmLmN1cnJlbnQuaW5uZXJIVE1MID0gc3ZnQnVuZGxlO1xuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICB9XG4gIHJlbmRlcigpIHtcbiAgICByZXR1cm4gPGRpdiByZWY9e3RoaXMuY29udGFpbmVyUmVmfT48L2Rpdj47XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdmMtc3ZnLWJ1bmRsZVwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3ZnQnVuZGxlQ29tcG9uZW50LCBwcm9wcyk7XG59KTsiLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBDU1NQcm9wZXJ0aWVzIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBJVGFiYmVkTWVudUl0ZW0sIFRhYmJlZE1lbnVJdGVtLCBUYWJiZWRNZW51Q29udGFpbmVyIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCB7XG4gIEJhc2UsXG4gIElBY3Rpb24sXG4gIEFjdGlvbixcbiAgUmVzcG9uc2l2aXR5TWFuYWdlcixcbiAgQWRhcHRpdmVBY3Rpb25Db250YWluZXJcbn0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBhdHRhY2hLZXkyY2xpY2ssIFJlYWN0RWxlbWVudEZhY3RvcnksIFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIElUYWJiZWRNZW51Q29tcG9uZW50UHJvcHMge1xuICBtb2RlbDogVGFiYmVkTWVudUNvbnRhaW5lcjtcbn1cblxuZXhwb3J0IGNsYXNzIFRhYmJlZE1lbnVDb21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxcbiAgSVRhYmJlZE1lbnVDb21wb25lbnRQcm9wcyxcbiAgYW55XG4+IHtcbiAgcHJpdmF0ZSBtYW5hZ2VyOiBSZXNwb25zaXZpdHlNYW5hZ2VyO1xuICBwcml2YXRlIHJvb3RSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG5cbiAgcHJpdmF0ZSBnZXQgbW9kZWwoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMubW9kZWw7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5yb290UmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIH1cblxuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMubW9kZWwucmVuZGVyZWRBY3Rpb25zLm1hcCgoaXRlbSkgPT4gPFRhYmJlZE1lbnVJdGVtV3JhcHBlciBpdGVtPXtpdGVtfSBrZXk9e2l0ZW0uaWR9IC8+KTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiByZWY9e3RoaXMucm9vdFJlZn0gY2xhc3NOYW1lPVwic3ZjLXRhYmJlZC1tZW51XCI+XG4gICAgICAgIHtpdGVtc31cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIGNvbnN0IGNvbnRhaW5lcjogSFRNTERpdkVsZW1lbnQgPSB0aGlzLnJvb3RSZWYuY3VycmVudDtcbiAgICBpZiAoIWNvbnRhaW5lcikgcmV0dXJuO1xuICAgIHRoaXMubWFuYWdlciA9IG5ldyBSZXNwb25zaXZpdHlNYW5hZ2VyKFxuICAgICAgY29udGFpbmVyLFxuICAgICAgdGhpcy5tb2RlbCxcbiAgICAgIFwiLnN2Yy10YWJiZWQtbWVudS1pdGVtLWNvbnRhaW5lcjpub3QoLnN2LWRvdHMpPi5zdi1hY3Rpb25fX2NvbnRlbnRcIlxuICAgICk7XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgdGhpcy5tYW5hZ2VyICYmICh0aGlzLm1hbmFnZXIuZGlzcG9zZSgpKTtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICB9XG59XG5cbmNsYXNzIFRhYmJlZE1lbnVJdGVtV3JhcHBlciBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPFxuICBhbnksXG4gIGFueVxuPiB7XG5cbiAgcHJpdmF0ZSBnZXQgaXRlbSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtO1xuICB9XG5cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgbGV0IGNzczogc3RyaW5nID0gXCJzdmMtdGFiYmVkLW1lbnUtaXRlbS1jb250YWluZXJcIjtcbiAgICBpZiAodGhpcy5pdGVtLmNzcykge1xuICAgICAgY3NzICs9IFwiIFwiICsgdGhpcy5pdGVtLmNzcztcbiAgICB9XG4gICAgY3NzICs9ICghdGhpcy5pdGVtLmlzVmlzaWJsZSA/IFwiIHN2LWFjdGlvbi0taGlkZGVuXCIgOiBcIlwiKTtcblxuICAgIGNvbnN0IGNvbXBvbmVudCA9IFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChcbiAgICAgIHRoaXMuaXRlbS5jb21wb25lbnQgfHwgXCJzdmMtdGFiYmVkLW1lbnUtaXRlbVwiLFxuICAgICAgeyBpdGVtOiB0aGlzLml0ZW0gfVxuICAgICk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPHNwYW4ga2V5PXt0aGlzLml0ZW0uaWR9IGNsYXNzTmFtZT17Y3NzfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdi1hY3Rpb25fX2NvbnRlbnRcIj5cbiAgICAgICAgICB7Y29tcG9uZW50fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvc3Bhbj5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRhYmJlZE1lbnVJdGVtQ29tcG9uZW50UHJvcHMge1xuICBpdGVtOiBBY3Rpb247XG59XG5leHBvcnQgY2xhc3MgVGFiYmVkTWVudUl0ZW1Db21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxcbiAgSVRhYmJlZE1lbnVJdGVtQ29tcG9uZW50UHJvcHMsXG4gIGFueVxuPiB7XG4gIGdldCBpdGVtKCk6IEFjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLml0ZW07XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG5cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBpdGVtID0gdGhpcy5pdGVtO1xuICAgIGxldCBjbGFzc05hbWU6IHN0cmluZyA9IFwic3ZjLXRhYmJlZC1tZW51LWl0ZW1cIjtcbiAgICBpZiAoaXRlbS5hY3RpdmUpIGNsYXNzTmFtZSArPSBcIiBzdmMtdGFiYmVkLW1lbnUtaXRlbS0tc2VsZWN0ZWRcIjtcbiAgICBpZiAoaXRlbS5lbmFibGVkICE9PSB1bmRlZmluZWQgJiYgIWl0ZW0uZW5hYmxlZClcbiAgICAgIGNsYXNzTmFtZSArPSBcIiBzdmMtdGFiYmVkLW1lbnUtaXRlbS0tZGlzYWJsZWRcIjtcbiAgICBsZXQgdGl0bGVDbGFzc05hbWU6IHN0cmluZyA9XG4gICAgICBcInN2Yy10ZXh0IHN2Yy10YWJiZWQtbWVudS1pdGVtX190ZXh0IHN2Yy10ZXh0LS1ub3JtYWxcIjtcbiAgICBpZiAoaXRlbS5hY3RpdmUpIHRpdGxlQ2xhc3NOYW1lICs9IFwiIHN2Yy10ZXh0LS1ib2xkXCI7XG5cbiAgICByZXR1cm4gKGF0dGFjaEtleTJjbGljayhcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWV9IG9uQ2xpY2s9eygpID0+IGl0ZW0uYWN0aW9uKGl0ZW0pfT5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXt0aXRsZUNsYXNzTmFtZX0+e2l0ZW0udGl0bGV9PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgKVxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLXRhYmJlZC1tZW51LWl0ZW1cIixcbiAgKHByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVGFiYmVkTWVudUl0ZW1Db21wb25lbnQsIHByb3BzKTtcbiAgfVxuKTtcbmV4cG9ydCBkZWZhdWx0IFRhYmJlZE1lbnVDb21wb25lbnQ7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBCYXNlLCBRdWVzdGlvbiB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHtcbiAgYXR0YWNoS2V5MmNsaWNrLFxuICBSZWFjdEVsZW1lbnRGYWN0b3J5LFxuICBTdXJ2ZXlFbGVtZW50QmFzZVxufSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWwsIHRvZ2dsZUhvdmVyZWQgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IHsgUmVhY3REcmFnRXZlbnQsIFJlYWN0TW91c2VFdmVudCB9IGZyb20gXCIuLi9ldmVudHNcIjtcbmltcG9ydCB7IFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzIH0gZnJvbSBcIi4vUXVlc3Rpb25cIjtcblxuZXhwb3J0IGNsYXNzIENlbGxRdWVzdGlvbkFkb3JuZXJDb21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxcbiAgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMsXG4gIGFueVxuPiB7XG4gIG1vZGVsOiBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWw7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLm1vZGVsID0gbmV3IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbChcbiAgICAgIHRoaXMucHJvcHMuY29tcG9uZW50RGF0YSxcbiAgICAgIHRoaXMucHJvcHMucXVlc3Rpb24sXG4gICAgICBudWxsXG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG5cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAodGhpcy5tb2RlbC5pc0RyYWdnZWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBkYXRhLXN2LWRyb3AtdGFyZ2V0LXN1cnZleS1lbGVtZW50PXt0aGlzLm1vZGVsLnN1cnZleUVsZW1lbnQubmFtZX1cbiAgICAgICAgICBjbGFzc05hbWU9e1wic3ZjLXF1ZXN0aW9uX19hZG9ybmVyXCJ9XG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17XCIgc3ZjLXF1ZXN0aW9uX19jb250ZW50LS1zZWxlY3RlZC1uby1ib3JkZXIgc3ZjLXF1ZXN0aW9uX19jb250ZW50XCJ9PlxuICAgICAgICAgICAge3RoaXMucHJvcHMuZWxlbWVudH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLWNlbGwtcXVlc3Rpb25cIixcbiAgKHByb3BzOiBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KENlbGxRdWVzdGlvbkFkb3JuZXJDb21wb25lbnQsIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCB7IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbCwgdG9nZ2xlSG92ZXJlZCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSZWFjdERyYWdFdmVudCwgUmVhY3RNb3VzZUV2ZW50IH0gZnJvbSBcIi4uL2V2ZW50c1wiO1xuaW1wb3J0IHsgQmFzZSwgSXRlbVZhbHVlLCBRdWVzdGlvblNlbGVjdEJhc2UsIFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5LCBTdXJ2ZXlFbGVtZW50QmFzZSwgUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcyB9IGZyb20gXCIuL1F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBhdHRhY2hLZXkyY2xpY2sgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5cbmV4cG9ydCBjbGFzcyBDZWxsUXVlc3Rpb25Ecm9wZG93bkFkb3JuZXJDb21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxcbiAgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMsXG4gIGFueVxuPiB7XG4gIG1vZGVsOiBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWw7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLm1vZGVsID0gbmV3IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbChcbiAgICAgIHRoaXMucHJvcHMuY29tcG9uZW50RGF0YSxcbiAgICAgIHRoaXMucHJvcHMucXVlc3Rpb24sXG4gICAgICBudWxsXG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG5cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAodGhpcy5tb2RlbC5pc0RyYWdnZWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBxdWVzdGlvbiA9IHRoaXMucHJvcHMucXVlc3Rpb24gYXMgUXVlc3Rpb25TZWxlY3RCYXNlO1xuICAgIGNvbnN0IHRleHRTdHlsZSA9ICh0aGlzLnByb3BzLnF1ZXN0aW9uIGFzIGFueSkudGV4dFN0eWxlO1xuICAgIHJldHVybiAoXG4gICAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBkYXRhLXN2LWRyb3AtdGFyZ2V0LXN1cnZleS1lbGVtZW50PXt0aGlzLm1vZGVsLnN1cnZleUVsZW1lbnQubmFtZX1cbiAgICAgICAgICBjbGFzc05hbWU9e1wic3ZjLXF1ZXN0aW9uX19hZG9ybmVyXCJ9XG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17XCIgc3ZjLXF1ZXN0aW9uX19jb250ZW50LS1zZWxlY3RlZC1uby1ib3JkZXIgc3ZjLXF1ZXN0aW9uX19jb250ZW50XCJ9PlxuICAgICAgICAgICAge3RoaXMucHJvcHMuZWxlbWVudH1cblxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtcXVlc3Rpb25fX2Ryb3Bkb3duLWNob2ljZXNcIj5cbiAgICAgICAgICAgICAge3F1ZXN0aW9uLnZpc2libGVDaG9pY2VzLm1hcChcbiAgICAgICAgICAgICAgICAoaXRlbTogSXRlbVZhbHVlLCBpbmRleDogbnVtYmVyKSA9PiAoXG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInN2Yy1xdWVzdGlvbl9fZHJvcGRvd24tY2hvaWNlXCJcbiAgICAgICAgICAgICAgICAgICAga2V5PXtgZWRpdGFibGVfY2hvaWNlXyR7aW5kZXh9YH1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge1JlYWN0U3VydmV5RWxlbWVudHNXcmFwcGVyLndyYXBJdGVtVmFsdWUocXVlc3Rpb24uc3VydmV5IGFzIFN1cnZleU1vZGVsLFxuICAgICAgICAgICAgICAgICAgICAgIFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICAgICAgICAgIFwic3VydmV5LXJhZGlvZ3JvdXAtaXRlbVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbjogcXVlc3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNzc0NsYXNzZXM6IHF1ZXN0aW9uLmNzc0NsYXNzZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlzRGlzcGxheU1vZGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW06IGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRTdHlsZTogdGV4dFN0eWxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogaW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlzQ2hlY2tlZDogcXVlc3Rpb24udmFsdWUgPT09IGl0ZW0udmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgIGl0ZW1cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtY2VsbC1kcm9wZG93bi1xdWVzdGlvblwiLFxuICAocHJvcHM6IFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2VsbFF1ZXN0aW9uRHJvcGRvd25BZG9ybmVyQ29tcG9uZW50LCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgeyBCYXNlLCBQYWdlTW9kZWwsIFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQge1xuICBhdHRhY2hLZXkyY2xpY2ssXG4gIFBvcHVwLFxuICBTdXJ2ZXlBY3Rpb25CYXIsXG4gIFJlYWN0RWxlbWVudEZhY3RvcnksXG4gIFN1cnZleUVsZW1lbnRCYXNlLFxuICBTdXJ2ZXlQYWdlLFxuICBTdmdJY29uXG59IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7XG4gIENyZWF0b3JCYXNlLFxuICBQYWdlVmlld01vZGVsLFxuICBTdXJ2ZXlIZWxwZXIsXG4gIHRvZ2dsZUhvdmVyZWRcbn0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0TW91c2VFdmVudCB9IGZyb20gXCIuLi9ldmVudHNcIjtcblxuaW50ZXJmYWNlIElDcmVhdG9yU3VydmV5UGFnZUNvbXBvbmVudFByb3BzIHtcbiAgY3JlYXRvcjogQ3JlYXRvckJhc2U7XG4gIHN1cnZleTogU3VydmV5TW9kZWw7XG4gIHBhZ2U6IFBhZ2VNb2RlbDtcbn1cblxuZXhwb3J0IGNsYXNzIENyZWF0b3JTdXJ2ZXlQYWdlQ29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8XG4gIElDcmVhdG9yU3VydmV5UGFnZUNvbXBvbmVudFByb3BzLFxuICBhbnlcbj4ge1xuICBwcml2YXRlIG1vZGVsOiBQYWdlVmlld01vZGVsO1xuICBwcml2YXRlIHJvb3RSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBJQ3JlYXRvclN1cnZleVBhZ2VDb21wb25lbnRQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLm1vZGVsID0gbmV3IFBhZ2VWaWV3TW9kZWwoXG4gICAgICB0aGlzLnByb3BzLmNyZWF0b3IsXG4gICAgICB0aGlzLnByb3BzLnBhZ2VcbiAgICApO1xuICAgIHRoaXMucm9vdFJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICB0aGlzLm1vZGVsLm9uUGFnZVNlbGVjdGVkQ2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICBpZiAoISF0aGlzLnJvb3RSZWYuY3VycmVudCkge1xuICAgICAgICBTdXJ2ZXlIZWxwZXIuc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCh0aGlzLnJvb3RSZWYuY3VycmVudCk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIHRoaXMubW9kZWwuZGlzcG9zZSgpO1xuICB9XG4gIHByb3RlY3RlZCBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgICEhdGhpcy5tb2RlbCAmJlxuICAgICAgdGhpcy5tb2RlbC5pc1BhZ2VMaXZlICYmXG4gICAgICAhIXRoaXMubW9kZWwucGFnZSAmJlxuICAgICAgISF0aGlzLm1vZGVsLnBhZ2Uuc3VydmV5XG4gICAgKTtcbiAgfVxuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMucHJvcHMucGFnZSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIChcbiAgICAgIGF0dGFjaEtleTJjbGljayg8ZGl2XG4gICAgICAgIHJlZj17dGhpcy5yb290UmVmfVxuICAgICAgICBjbGFzc05hbWU9e1wic3ZjLXBhZ2VfX2NvbnRlbnQgXCIgKyB0aGlzLm1vZGVsLmNzc31cbiAgICAgICAgaWQ9e3RoaXMucHJvcHMucGFnZS5pZH1cbiAgICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5tb2RlbC5zZWxlY3QodGhpcy5tb2RlbCwgbmV3IFJlYWN0TW91c2VFdmVudChlKSk7XG4gICAgICAgIH19XG4gICAgICAgIG9uTW91c2VMZWF2ZT17KGUpID0+IHRoaXMubW9kZWwuaG92ZXIoZS5uYXRpdmVFdmVudCwgZS5jdXJyZW50VGFyZ2V0KX1cbiAgICAgICAgb25Nb3VzZU92ZXI9eyhlKSA9PiB0aGlzLm1vZGVsLmhvdmVyKGUubmF0aXZlRXZlbnQsIGUuY3VycmVudFRhcmdldCl9XG4gICAgICA+XG4gICAgICAgIHt0aGlzLnJlbmRlckhlYWRlcigpfVxuICAgICAgICB7dGhpcy5yZW5kZXJDb250ZW50KCl9XG4gICAgICAgIHt0aGlzLnJlbmRlckZvb3RlcigpfVxuICAgICAgPC9kaXY+KVxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckNvbnRlbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoPFN1cnZleVBhZ2UgcGFnZT17dGhpcy5wcm9wcy5wYWdlfSBzdXJ2ZXk9e3RoaXMucHJvcHMuc3VydmV5fSBjcmVhdG9yPXt0aGlzLnByb3BzLmNyZWF0b3J9IGNzcz17dGhpcy5tb2RlbC5jc3N9PjwvU3VydmV5UGFnZT4pO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJIZWFkZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoPGRpdiBjbGFzc05hbWU9XCJzdmMtcGFnZV9fY29udGVudC1hY3Rpb25zXCI+XG4gICAgICA8U3VydmV5QWN0aW9uQmFyIG1vZGVsPXt0aGlzLm1vZGVsLmFjdGlvbkNvbnRhaW5lcn0+PC9TdXJ2ZXlBY3Rpb25CYXI+XG4gICAgPC9kaXY+KTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRm9vdGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMubW9kZWwuYWxsb3dFZGl0KSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBxdWVzdGlvblR5cGVTZWxlY3Rvck1vZGVsID0gdGhpcy5tb2RlbC5xdWVzdGlvblR5cGVTZWxlY3Rvck1vZGVsO1xuICAgIHJldHVybiBhdHRhY2hLZXkyY2xpY2soPGRpdlxuICAgICAgY2xhc3NOYW1lPVwic3ZjLXBhZ2VfX2FkZC1uZXctcXVlc3Rpb24gc3ZjLWJ0blwiXG4gICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLm1vZGVsLmFkZE5ld1F1ZXN0aW9uKHRoaXMubW9kZWwsIG5ldyBSZWFjdE1vdXNlRXZlbnQoZSkpO1xuICAgICAgfX1cbiAgICAgIG9uTW91c2VPdmVyPXsoZSkgPT4gdGhpcy5tb2RlbC5ob3ZlclN0b3BwZXIoZS5uYXRpdmVFdmVudCwgZS5jdXJyZW50VGFyZ2V0KX1cbiAgICA+XG4gICAgICA8c3BhbiBjbGFzc05hbWU9XCJzdmMtdGV4dCBzdmMtdGV4dC0tbm9ybWFsIHN2Yy10ZXh0LS1ib2xkXCI+XG4gICAgICAgIHt0aGlzLm1vZGVsLmFkZE5ld1F1ZXN0aW9uVGV4dH1cbiAgICAgIDwvc3Bhbj5cblxuICAgICAge2F0dGFjaEtleTJjbGljayg8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgcXVlc3Rpb25UeXBlU2VsZWN0b3JNb2RlbC5hY3Rpb24oKTtcbiAgICAgICAgfX1cbiAgICAgICAgY2xhc3NOYW1lPVwic3ZjLXBhZ2VfX3F1ZXN0aW9uLXR5cGUtc2VsZWN0b3JcIlxuICAgICAgICB0aXRsZT17dGhpcy5tb2RlbC5hZGROZXdRdWVzdGlvblRleHR9XG4gICAgICA+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy1wYWdlX19xdWVzdGlvbi10eXBlLXNlbGVjdG9yLWljb25cIj5cbiAgICAgICAgICA8U3ZnSWNvblxuICAgICAgICAgICAgaWNvbk5hbWU9e3F1ZXN0aW9uVHlwZVNlbGVjdG9yTW9kZWwuaWNvbk5hbWV9XG4gICAgICAgICAgICBzaXplPXsyNH1cbiAgICAgICAgICA+PC9TdmdJY29uPlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxQb3B1cCBtb2RlbD17cXVlc3Rpb25UeXBlU2VsZWN0b3JNb2RlbC5wb3B1cE1vZGVsfT48L1BvcHVwPlxuICAgICAgPC9idXR0b24+KX1cbiAgICA8L2Rpdj4pO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3ZjLXBhZ2VcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KENyZWF0b3JTdXJ2ZXlQYWdlQ29tcG9uZW50LCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCB7IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbCwgdG9nZ2xlSG92ZXJlZCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSZWFjdERyYWdFdmVudCwgUmVhY3RNb3VzZUV2ZW50IH0gZnJvbSBcIi4uL2V2ZW50c1wiO1xuaW1wb3J0IHsgQmFzZSwgUXVlc3Rpb24gfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7XG4gIFN1cnZleUFjdGlvbkJhcixcbiAgUmVhY3RFbGVtZW50RmFjdG9yeSxcbiAgU3VydmV5RWxlbWVudEJhc2UsXG4gIFN1cnZleVF1ZXN0aW9uLFxuICBhdHRhY2hLZXkyY2xpY2ssXG4gIFN2Z0ljb24sXG4gIFBvcHVwXG59IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudCwgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMgfSBmcm9tIFwiLi9RdWVzdGlvblwiO1xuXG5leHBvcnQgY2xhc3MgUGFuZWxBZG9ybmVyQ29tcG9uZW50IGV4dGVuZHMgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHJlbmRlckVsZW1lbnRQbGFjZWhvbGRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLm1vZGVsLmlzRW1wdHlFbGVtZW50KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXBhbmVsX19wbGFjZWhvbGRlcl9mcmFtZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1wYW5lbF9fcGxhY2Vob2xkZXJcIj5cbiAgICAgICAgICB7dGhpcy5tb2RlbC5wbGFjZWhvbGRlclRleHR9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7dGhpcy5tb2RlbC5hbGxvd0VkaXQgPyBhdHRhY2hLZXkyY2xpY2soPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT1cInN2Yy1wYW5lbF9fYWRkLW5ldy1xdWVzdGlvbiBzdmMtYWN0aW9uLWJ1dHRvblwiXG4gICAgICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICB0aGlzLm1vZGVsLmFkZE5ld1F1ZXN0aW9uKCk7XG4gICAgICAgICAgfX1cbiAgICAgICAgPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy10ZXh0IHN2Yy10ZXh0LS1ub3JtYWwgc3ZjLXRleHQtLWJvbGRcIj5cbiAgICAgICAgICAgIHt0aGlzLm1vZGVsLmFkZE5ld1F1ZXN0aW9uVGV4dH1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PikgOiBudWxsfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRm9vdGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKDxSZWFjdC5GcmFnbWVudD5cbiAgICAgIHshdGhpcy5tb2RlbC5pc0VtcHR5RWxlbWVudCAmJiB0aGlzLm1vZGVsLnN1cnZleUVsZW1lbnQuaXNQYW5lbCAmJiB0aGlzLm1vZGVsLmFsbG93RWRpdCA/IGF0dGFjaEtleTJjbGljayhcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtcGFuZWxfX2FkZC1uZXctcXVlc3Rpb24tY29udGFpbmVyXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwic3ZjLXBhbmVsX19hZGQtbmV3LXF1ZXN0aW9uIHN2Yy1hY3Rpb24tYnV0dG9uXCJcbiAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgIHRoaXMubW9kZWwuYWRkTmV3UXVlc3Rpb24oKTtcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXRleHQgc3ZjLXRleHQtLW5vcm1hbCBzdmMtdGV4dC0tYm9sZFwiPlxuICAgICAgICAgICAgICB7dGhpcy5tb2RlbC5hZGROZXdRdWVzdGlvblRleHR9XG4gICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB7YXR0YWNoS2V5MmNsaWNrKDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgdGhpcy5tb2RlbC5xdWVzdGlvblR5cGVTZWxlY3Rvck1vZGVsLmFjdGlvbigpO1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInN2Yy1wYW5lbF9fcXVlc3Rpb24tdHlwZS1zZWxlY3RvclwiXG4gICAgICAgICAgICB0aXRsZT17dGhpcy5tb2RlbC5hZGROZXdRdWVzdGlvblRleHR9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXBhbmVsX19xdWVzdGlvbi10eXBlLXNlbGVjdG9yLWljb25cIj5cbiAgICAgICAgICAgICAgPFN2Z0ljb25cbiAgICAgICAgICAgICAgICBpY29uTmFtZT17dGhpcy5tb2RlbC5xdWVzdGlvblR5cGVTZWxlY3Rvck1vZGVsLmljb25OYW1lfVxuICAgICAgICAgICAgICAgIHNpemU9ezI0fVxuICAgICAgICAgICAgICA+PC9TdmdJY29uPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPFBvcHVwIG1vZGVsPXt0aGlzLm1vZGVsLnF1ZXN0aW9uVHlwZVNlbGVjdG9yTW9kZWwucG9wdXBNb2RlbH0+PC9Qb3B1cD5cbiAgICAgICAgICA8L2J1dHRvbj4pfVxuICAgICAgICA8L2Rpdj4pIDogbnVsbH1cblxuICAgICAge3N1cGVyLnJlbmRlckZvb3RlcigpfVxuICAgIDwvUmVhY3QuRnJhZ21lbnQ+KTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtcGFuZWxcIixcbiAgKHByb3BzOiBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFBhbmVsQWRvcm5lckNvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IHsgUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsLCB0b2dnbGVIb3ZlcmVkIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0RHJhZ0V2ZW50LCBSZWFjdE1vdXNlRXZlbnQgfSBmcm9tIFwiLi4vZXZlbnRzXCI7XG5pbXBvcnQgeyBCYXNlLCBRdWVzdGlvbiB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHtcbiAgU3VydmV5QWN0aW9uQmFyLFxuICBSZWFjdEVsZW1lbnRGYWN0b3J5LFxuICBTdXJ2ZXlFbGVtZW50QmFzZSxcbiAgU3VydmV5UXVlc3Rpb24sXG4gIGF0dGFjaEtleTJjbGljayxcbiAgU3ZnSWNvbixcbiAgUG9wdXBcbn0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzIHtcbiAgZWxlbWVudDogSlNYLkVsZW1lbnQ7XG4gIHF1ZXN0aW9uOiBRdWVzdGlvbjtcbiAgY29tcG9uZW50RGF0YTogYW55O1xufVxuXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8XG4gIFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzLFxuICBhbnlcbj4ge1xuICBwcml2YXRlIG1vZGVsVmFsdWU6IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbDtcbiAgcHJvdGVjdGVkIHJvb3RSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMubW9kZWxWYWx1ZSA9IHRoaXMuY3JlYXRlUXVlc3Rpb25WaWV3TW9kZWwoKTtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlUXVlc3Rpb25WaWV3TW9kZWwoKTogUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsIHtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbChcbiAgICAgIHRoaXMucHJvcHMuY29tcG9uZW50RGF0YSxcbiAgICAgIHRoaXMucHJvcHMucXVlc3Rpb24sXG4gICAgICBudWxsXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgZ2V0IG1vZGVsKCk6IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWxWYWx1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHN1cGVyLmNhblJlbmRlcigpICYmICF0aGlzLm1vZGVsLmlzRHJhZ2dlZDtcbiAgfVxuXG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGFsbG93SW50ZXJhY3Rpb25zID0gdGhpcy5tb2RlbC5zdXJ2ZXlFbGVtZW50XG4gICAgICAuaXNJbnRlcmFjdGl2ZURlc2lnbkVsZW1lbnQ7XG4gICAgY29uc3QgY29udGVudCA9IHRoaXMucmVuZGVyQ29udGVudChhbGxvd0ludGVyYWN0aW9ucyk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgcmVmPXt0aGlzLnJvb3RSZWZ9XG4gICAgICAgIGRhdGEtc3YtZHJvcC10YXJnZXQtc3VydmV5LWVsZW1lbnQ9e3RoaXMubW9kZWwuc3VydmV5RWxlbWVudC5uYW1lIHx8IG51bGx9XG4gICAgICAgIGNsYXNzTmFtZT17XCJzdmMtcXVlc3Rpb25fX2Fkb3JuZXJcIiArIHRoaXMubW9kZWwucm9vdENzcygpfVxuICAgICAgICBvbk1vdXNlT3V0PXtlID0+IGFsbG93SW50ZXJhY3Rpb25zICYmIHRvZ2dsZUhvdmVyZWQoZS5uYXRpdmVFdmVudCwgZS5jdXJyZW50VGFyZ2V0KX1cbiAgICAgICAgb25Nb3VzZU92ZXI9e2UgPT4gYWxsb3dJbnRlcmFjdGlvbnMgJiYgdG9nZ2xlSG92ZXJlZChlLm5hdGl2ZUV2ZW50LCBlLmN1cnJlbnRUYXJnZXQpfVxuICAgICAgPlxuICAgICAgICB7Y29udGVudH1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckNvbnRlbnQoYWxsb3dJbnRlcmFjdGlvbnM6IGJvb2xlYW4pOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGNvbnRlbnQgPSB0aGlzLnJlbmRlckVsZW1lbnRDb250ZW50KCk7XG4gICAgaWYgKCFhbGxvd0ludGVyYWN0aW9ucykgcmV0dXJuIDw+eyBjb250ZW50IH17dGhpcy5yZW5kZXJGb290ZXIoKX08Lz47XG4gICAgcmV0dXJuIGF0dGFjaEtleTJjbGljayhcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtcInN2Yy1xdWVzdGlvbl9fY29udGVudCBcIiArIHRoaXMubW9kZWwuY3NzKCl9XG4gICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB0aGlzLm1vZGVsLnNlbGVjdCh0aGlzLm1vZGVsLCBuZXcgUmVhY3RNb3VzZUV2ZW50KGUpKX1cbiAgICAgID5cbiAgICAgICAge3RoaXMucmVuZGVySGVhZGVyKCl9XG4gICAgICAgIHtjb250ZW50fVxuICAgICAgICB7dGhpcy5yZW5kZXJGb290ZXIoKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckhlYWRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChcInN2Yy1xdWVzdGlvbi1oZWFkZXJcIiwgeyBtb2RlbDogdGhpcy5tb2RlbCB9KTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRm9vdGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KFwic3ZjLXF1ZXN0aW9uLWZvb3RlclwiLCB7IGNsYXNzTmFtZTogXCJzdmMtcXVlc3Rpb25fX2NvbnRlbnQtYWN0aW9uc1wiLCBtb2RlbDogdGhpcy5tb2RlbCB9KTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudENvbnRlbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICB7dGhpcy5wcm9wcy5lbGVtZW50fVxuICAgICAgICB7dGhpcy5yZW5kZXJFbGVtZW50UGxhY2Vob2xkZXIoKX1cbiAgICAgIDwvPlxuICAgICk7XG4gIH1cbiAgcmVuZGVyRWxlbWVudFBsYWNlaG9sZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMubW9kZWwuaXNFbXB0eUVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtcGFuZWxfX3BsYWNlaG9sZGVyX2ZyYW1lXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXBhbmVsX19wbGFjZWhvbGRlclwiPlxuICAgICAgICAgIHt0aGlzLm1vZGVsLnBsYWNlaG9sZGVyVGV4dH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy1xdWVzdGlvblwiLFxuICAocHJvcHM6IFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50LCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBJdGVtVmFsdWUsIFF1ZXN0aW9uU2VsZWN0QmFzZSwgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnksIFJlYWN0U3VydmV5RWxlbWVudHNXcmFwcGVyIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHtcbiAgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50LFxuICBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wc1xufSBmcm9tIFwiLi9RdWVzdGlvblwiO1xuXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25Ecm9wZG93bkFkb3JuZXJDb21wb25lbnQgZXh0ZW5kcyBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnQge1xuICByZW5kZXJFbGVtZW50UGxhY2Vob2xkZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHF1ZXN0aW9uID0gdGhpcy5wcm9wcy5xdWVzdGlvbiBhcyBRdWVzdGlvblNlbGVjdEJhc2U7XG4gICAgY29uc3QgdGV4dFN0eWxlID0gKHRoaXMucHJvcHMucXVlc3Rpb24gYXMgYW55KS50ZXh0U3R5bGU7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXF1ZXN0aW9uX19kcm9wZG93bi1jaG9pY2VzXCI+XG4gICAgICAgIHsocXVlc3Rpb24udmlzaWJsZUNob2ljZXMgfHwgW10pLm1hcChcbiAgICAgICAgICAoaXRlbTogSXRlbVZhbHVlLCBpbmRleDogbnVtYmVyKSA9PiAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cInN2Yy1xdWVzdGlvbl9fZHJvcGRvd24tY2hvaWNlXCJcbiAgICAgICAgICAgICAga2V5PXtgZWRpdGFibGVfY2hvaWNlXyR7aW5kZXh9YH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge1JlYWN0U3VydmV5RWxlbWVudHNXcmFwcGVyLndyYXBJdGVtVmFsdWUocXVlc3Rpb24uc3VydmV5IGFzIFN1cnZleU1vZGVsLFxuICAgICAgICAgICAgICAgIFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICAgIFwic3VydmV5LXJhZGlvZ3JvdXAtaXRlbVwiLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbjogcXVlc3Rpb24sXG4gICAgICAgICAgICAgICAgICAgIGNzc0NsYXNzZXM6IHF1ZXN0aW9uLmNzc0NsYXNzZXMsXG4gICAgICAgICAgICAgICAgICAgIGlzRGlzcGxheU1vZGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGl0ZW06IGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgIHRleHRTdHlsZTogdGV4dFN0eWxlLFxuICAgICAgICAgICAgICAgICAgICBpbmRleDogaW5kZXgsXG4gICAgICAgICAgICAgICAgICAgIGlzQ2hlY2tlZDogcXVlc3Rpb24udmFsdWUgPT09IGl0ZW0udmFsdWVcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIHF1ZXN0aW9uLFxuICAgICAgICAgICAgICAgIGl0ZW1cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIClcbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLWRyb3Bkb3duLXF1ZXN0aW9uXCIsXG4gIChwcm9wczogUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChRdWVzdGlvbkRyb3Bkb3duQWRvcm5lckNvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IHsgUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsLCB0b2dnbGVIb3ZlcmVkIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0RHJhZ0V2ZW50LCBSZWFjdE1vdXNlRXZlbnQgfSBmcm9tIFwiLi4vZXZlbnRzXCI7XG5pbXBvcnQgeyBCYXNlLCBRdWVzdGlvbiB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHtcbiAgU3VydmV5QWN0aW9uQmFyLFxuICBSZWFjdEVsZW1lbnRGYWN0b3J5LFxuICBTdXJ2ZXlFbGVtZW50QmFzZSxcbiAgU3VydmV5UXVlc3Rpb24sXG4gIGF0dGFjaEtleTJjbGljayxcbiAgU3ZnSWNvbixcbiAgUG9wdXBcbn0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXN0aW9uV3JhcHBlckZvb3RlclByb3BzIHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBtb2RlbDogUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsO1xufVxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uV3JhcHBlckZvb3RlciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxRdWVzdGlvbldyYXBwZXJGb290ZXJQcm9wcywgYW55PiB7XG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuICg8ZGl2IGNsYXNzTmFtZT17dGhpcy5wcm9wcy5jbGFzc05hbWV9PlxuICAgICAgPFN1cnZleUFjdGlvbkJhciBtb2RlbD17dGhpcy5wcm9wcy5tb2RlbC5hY3Rpb25Db250YWluZXJ9PjwvU3VydmV5QWN0aW9uQmFyPlxuICAgIDwvZGl2Pik7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLXF1ZXN0aW9uLWZvb3RlclwiLFxuICAocHJvcHM6IFF1ZXN0aW9uV3JhcHBlckZvb3RlclByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUXVlc3Rpb25XcmFwcGVyRm9vdGVyLCBwcm9wcyk7XG4gIH1cbik7XG5cbiIsImltcG9ydCB7IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbCwgdG9nZ2xlSG92ZXJlZCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSZWFjdERyYWdFdmVudCwgUmVhY3RNb3VzZUV2ZW50IH0gZnJvbSBcIi4uL2V2ZW50c1wiO1xuaW1wb3J0IHsgQmFzZSwgUXVlc3Rpb24gfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7XG4gIFN1cnZleUFjdGlvbkJhcixcbiAgUmVhY3RFbGVtZW50RmFjdG9yeSxcbiAgU3VydmV5RWxlbWVudEJhc2UsXG4gIFN1cnZleVF1ZXN0aW9uLFxuICBhdHRhY2hLZXkyY2xpY2ssXG4gIFN2Z0ljb24sXG4gIFBvcHVwXG59IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcblxuZXhwb3J0IGludGVyZmFjZSBRdWVzdGlvbldyYXBwZXJIZWFkZXJQcm9wcyB7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgbW9kZWw6IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbDtcbn1cblxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uV3JhcHBlckhlYWRlciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxRdWVzdGlvbldyYXBwZXJIZWFkZXJQcm9wcywgYW55PiB7XG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLnByb3BzLm1vZGVsLmFsbG93RHJhZ2dpbmcpIHJldHVybiBudWxsO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17XCJzdmMtcXVlc3Rpb25fX2RyYWctYXJlYVwifVxuICAgICAgICBvblBvaW50ZXJEb3duPXsoZXZlbnQ6IGFueSkgPT5cbiAgICAgICAgICB0aGlzLnByb3BzLm1vZGVsLm9uUG9pbnRlckRvd24oZXZlbnQpXG4gICAgICAgIH1cbiAgICAgID5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17XCJzdmMtcXVlc3Rpb25fX2RyYWctZWxlbWVudFwifVxuICAgICAgICA+PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy1xdWVzdGlvbi1oZWFkZXJcIixcbiAgKHByb3BzOiBRdWVzdGlvbldyYXBwZXJIZWFkZXJQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFF1ZXN0aW9uV3JhcHBlckhlYWRlciwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IHtcbiAgUXVlc3Rpb25JbWFnZUFkb3JuZXJWaWV3TW9kZWwsXG4gIFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbFxufSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgYXR0YWNoS2V5MmNsaWNrLCBSZWFjdEVsZW1lbnRGYWN0b3J5LCBTdmdJY29uIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHtcbiAgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50LFxuICBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wc1xufSBmcm9tIFwiLi9RdWVzdGlvblwiO1xuXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25JbWFnZUFkb3JuZXJDb21wb25lbnQgZXh0ZW5kcyBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5yb290UmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZVF1ZXN0aW9uVmlld01vZGVsKCk6IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbCB7XG4gICAgcmV0dXJuIG5ldyBRdWVzdGlvbkltYWdlQWRvcm5lclZpZXdNb2RlbChcbiAgICAgIHRoaXMucHJvcHMuY29tcG9uZW50RGF0YSxcbiAgICAgIHRoaXMucHJvcHMucXVlc3Rpb24gYXMgYW55LFxuICAgICAgbnVsbCxcbiAgICAgIG51bGxcbiAgICApO1xuICB9XG4gIHB1YmxpYyBnZXQgaW1hZ2VNb2RlbCgpOiBRdWVzdGlvbkltYWdlQWRvcm5lclZpZXdNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWwgYXMgUXVlc3Rpb25JbWFnZUFkb3JuZXJWaWV3TW9kZWw7XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICB0aGlzLmltYWdlTW9kZWwucXVlc3Rpb25Sb290ID0gdGhpcy5yb290UmVmLmN1cnJlbnQ7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckhlYWRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuICg8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICB0YWJJbmRleD17LTF9XG4gICAgICAgIGFjY2VwdD1cImltYWdlLypcIlxuICAgICAgICBjbGFzc05hbWU9XCJzdmMtY2hvb3NlLWZpbGUtaW5wdXRcIlxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgIHBvc2l0aW9uOiBcImFic29sdXRlXCIsXG4gICAgICAgICAgb3BhY2l0eTogMCxcbiAgICAgICAgICB3aWR0aDogXCIxcHhcIixcbiAgICAgICAgICBoZWlnaHQ6IFwiMXB4XCIsXG4gICAgICAgICAgb3ZlcmZsb3c6IFwiaGlkZGVuXCJcbiAgICAgICAgfX1cbiAgICAgIC8+XG5cbiAgICAgIHtzdXBlci5yZW5kZXJIZWFkZXIoKX1cbiAgICA8L1JlYWN0LkZyYWdtZW50Pik7XG4gIH1cbiAgcmVuZGVyRWxlbWVudFBsYWNlaG9sZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtaW1hZ2UtcXVlc3Rpb24tY29udHJvbHNcIj5cbiAgICAgICAge3RoaXMubW9kZWwuYWxsb3dFZGl0ID8gYXR0YWNoS2V5MmNsaWNrKDxzcGFuXG4gICAgICAgICAgY2xhc3NOYW1lPVwic3ZjLWltYWdlLXF1ZXN0aW9uLWNvbnRyb2xzX19idXR0b24gc3ZjLWltYWdlLXF1ZXN0aW9uLWNvbnRyb2xzX19jaG9vc2UtZmlsZVwiXG4gICAgICAgICAgb25DbGljaz17KCkgPT4gdGhpcy5pbWFnZU1vZGVsLmNob29zZUZpbGUodGhpcy5pbWFnZU1vZGVsKX1cbiAgICAgICAgPlxuICAgICAgICAgIDxTdmdJY29uIHNpemU9ezI0fSBpY29uTmFtZT17XCJpY29uLWZpbGVcIn0+PC9TdmdJY29uPlxuICAgICAgICA8L3NwYW4+KSA6IG51bGx9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy1pbWFnZS1xdWVzdGlvblwiLFxuICAocHJvcHM6IFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUXVlc3Rpb25JbWFnZUFkb3JuZXJDb21wb25lbnQsIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCB7XG4gIFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbCxcbiAgUXVlc3Rpb25SYXRpbmdBZG9ybmVyVmlld01vZGVsXG59IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge1xuICBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnQsXG4gIFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzXG59IGZyb20gXCIuL1F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBhdHRhY2hLZXkyY2xpY2ssIFJlYWN0RWxlbWVudEZhY3RvcnksIFN1cnZleUVsZW1lbnRCYXNlLCBTdmdJY29uIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25SYXRpbmdBZG9ybmVyQ29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8XG4gIFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzLFxuICBhbnlcbj4ge1xuICBwcml2YXRlIG1vZGVsVmFsdWU6IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbDtcbiAgY29uc3RydWN0b3IocHJvcHM6IFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMubW9kZWxWYWx1ZSA9IHRoaXMuY3JlYXRlUXVlc3Rpb25WaWV3TW9kZWwoKTtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlUXVlc3Rpb25WaWV3TW9kZWwoKTogUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsIHtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uUmF0aW5nQWRvcm5lclZpZXdNb2RlbChcbiAgICAgIHRoaXMucHJvcHMuY29tcG9uZW50RGF0YSxcbiAgICAgIHRoaXMucHJvcHMucXVlc3Rpb24gYXMgYW55LFxuICAgICAgbnVsbFxuICAgICk7XG4gIH1cbiAgcHVibGljIGdldCByYXRpbmdNb2RlbCgpOiBRdWVzdGlvblJhdGluZ0Fkb3JuZXJWaWV3TW9kZWwge1xuICAgIHJldHVybiB0aGlzLm1vZGVsIGFzIFF1ZXN0aW9uUmF0aW5nQWRvcm5lclZpZXdNb2RlbDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbW9kZWwoKTogUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbFZhbHVlO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IG1vZGVsID0gdGhpcy5yYXRpbmdNb2RlbDtcbiAgICByZXR1cm4gKDw+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1yYXRpbmctcXVlc3Rpb24tY29udGVudFwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1yYXRpbmctcXVlc3Rpb24tY29udHJvbHMgc3ZjLWl0ZW0tdmFsdWUtY29udHJvbHNcIj5cbiAgICAgICAgICB7bW9kZWwuYWxsb3dSZW1vdmUgPyBhdHRhY2hLZXkyY2xpY2soPHNwYW5cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInN2Yy1pdGVtLXZhbHVlLWNvbnRyb2xzX19idXR0b24gc3ZjLWl0ZW0tdmFsdWUtY29udHJvbHNfX3JlbW92ZVwiXG4gICAgICAgICAgICBhcmlhLWxhYmVsPXttb2RlbC5yZW1vdmVUb29sdGlwfVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gbW9kZWwucmVtb3ZlSXRlbShtb2RlbCl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFN2Z0ljb24gc2l6ZT17MTZ9IGljb25OYW1lPXtcImljb24tcmVtb3ZlXzE2eDE2XCJ9PjwvU3ZnSWNvbj5cbiAgICAgICAgICA8L3NwYW4+KSA6IG51bGx9XG4gICAgICAgICAge21vZGVsLmFsbG93QWRkID8gYXR0YWNoS2V5MmNsaWNrKDxzcGFuXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJzdmMtaXRlbS12YWx1ZS1jb250cm9sc19fYnV0dG9uIHN2Yy1pdGVtLXZhbHVlLWNvbnRyb2xzX19hZGRcIlxuICAgICAgICAgICAgYXJpYS1sYWJlbD17bW9kZWwuYWRkVG9vbHRpcH1cbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IG1vZGVsLmFkZEl0ZW0obW9kZWwpfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxTdmdJY29uIHNpemU9ezE2fSBpY29uTmFtZT17XCJpY29uLWFkZF8xNngxNlwifT48L1N2Z0ljb24+XG4gICAgICAgICAgPC9zcGFuPikgOiBudWxsfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAge3RoaXMucHJvcHMuZWxlbWVudH1cbiAgICAgIDwvZGl2PlxuICAgIDwvPik7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLXJhdGluZy1xdWVzdGlvblwiLFxuICAocHJvcHM6IFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUXVlc3Rpb25SYXRpbmdBZG9ybmVyQ29tcG9uZW50LCBwcm9wcyk7XG4gIH1cbik7XG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtcmF0aW5nLXF1ZXN0aW9uLWNvbnRlbnRcIixcbiAgKHByb3BzOiBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFF1ZXN0aW9uUmF0aW5nQWRvcm5lckNvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IHtcbiAgUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsXG59IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge1xuICBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnQsXG4gIFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzXG59IGZyb20gXCIuL1F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBhdHRhY2hLZXkyY2xpY2ssIFJlYWN0RWxlbWVudEZhY3RvcnksIFN2Z0ljb24gfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5cbmV4cG9ydCBjbGFzcyBRdWVzdGlvbldpZGdldEFkb3JuZXJDb21wb25lbnQgZXh0ZW5kcyBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnQge1xuICBwcm90ZWN0ZWQgY3JlYXRlUXVlc3Rpb25WaWV3TW9kZWwoKTogUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsIHtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbChcbiAgICAgIHRoaXMucHJvcHMuY29tcG9uZW50RGF0YSxcbiAgICAgIHRoaXMucHJvcHMucXVlc3Rpb24gYXMgYW55LFxuICAgICAgbnVsbFxuICAgICk7XG4gIH1cbiAgcHVibGljIGdldCB3aWRnZXRNb2RlbCgpOiBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWwge1xuICAgIHJldHVybiB0aGlzLm1vZGVsIGFzIFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudENvbnRlbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17XCJzdmMtd2lkZ2V0X19jb250ZW50XCJ9XG4gICAgICA+XG4gICAgICAgIHt0aGlzLnByb3BzLmVsZW1lbnR9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy13aWRnZXQtcXVlc3Rpb25cIixcbiAgKHByb3BzOiBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFF1ZXN0aW9uV2lkZ2V0QWRvcm5lckNvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IHsgUm93Vmlld01vZGVsIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEJhc2UsIFF1ZXN0aW9uUm93TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnksIFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMgfSBmcm9tIFwiLi9RdWVzdGlvblwiO1xuXG5pbnRlcmZhY2UgUm93V3JhcHBlckNvbXBvbmVudFByb3BzIHtcbiAgZWxlbWVudDogSlNYLkVsZW1lbnQ7XG4gIGNvbXBvbmVudERhdGE6IGFueTtcbiAgcm93OiBRdWVzdGlvblJvd01vZGVsO1xufVxuXG5leHBvcnQgY2xhc3MgUm93V3JhcHBlciBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPFxuICBSb3dXcmFwcGVyQ29tcG9uZW50UHJvcHMsXG4gIGFueVxuPiB7XG4gIG1vZGVsOiBSb3dWaWV3TW9kZWw7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBSb3dXcmFwcGVyQ29tcG9uZW50UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5tb2RlbCA9IG5ldyBSb3dWaWV3TW9kZWwoXG4gICAgICB0aGlzLnByb3BzLmNvbXBvbmVudERhdGEuY3JlYXRvcixcbiAgICAgIHRoaXMucHJvcHMucm93LFxuICAgICAgbnVsbFxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuXG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAga2V5PXtcInN2Yy1yb3ctXCIgKyB0aGlzLnByb3BzLnJvdy5pZH1cbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLm1vZGVsLmNzc0NsYXNzZXN9XG4gICAgICA+XG4gICAgICAgIHt0aGlzLnByb3BzLmVsZW1lbnR9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy1yb3dcIixcbiAgKHByb3BzOiBSb3dXcmFwcGVyQ29tcG9uZW50UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChSb3dXcmFwcGVyLCBwcm9wcyk7XG4gIH1cbik7XG4iLCJkZWNsYXJlIHZhciBSZWZsZWN0OmFueTtcblxuZXhwb3J0IHZhciBfX2RlY29yYXRlID0gZnVuY3Rpb24oXG4gIGRlY29yYXRvcnM6IGFueSxcbiAgdGFyZ2V0OiBhbnksXG4gIGtleTogYW55LFxuICBkZXNjOiBhbnlcbikge1xuICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsXG4gICAgciA9XG4gICAgICBjIDwgM1xuICAgICAgICA/IHRhcmdldFxuICAgICAgICA6IGRlc2MgPT09IG51bGxcbiAgICAgICAgICA/IChkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkpXG4gICAgICAgICAgOiBkZXNjLFxuICAgIGQ7XG4gIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKVxuICAgIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgZWxzZVxuICAgIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKVxuICAgICAgaWYgKChkID0gZGVjb3JhdG9yc1tpXSkpXG4gICAgICAgIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufTtcblxuZXhwb3J0IHZhciBfX2Fzc2lnbiA9XG4gIE9iamVjdFtcImFzc2lnblwiXSB8fFxuICBmdW5jdGlvbih0YXJnZXQpIHtcbiAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICBmb3IgKHZhciBwIGluIHMpXG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRhcmdldFtwXSA9IHNbcF07XG4gICAgfVxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2V4dGVuZHModGhpc0NsYXNzLCBiYXNlQ2xhc3MpIHtcbiAgZm9yICh2YXIgcCBpbiBiYXNlQ2xhc3MpXG4gICAgaWYgKGJhc2VDbGFzcy5oYXNPd25Qcm9wZXJ0eShwKSkgdGhpc0NsYXNzW3BdID0gYmFzZUNsYXNzW3BdO1xuICBmdW5jdGlvbiBfXygpIHtcbiAgICB0aGlzLmNvbnN0cnVjdG9yID0gdGhpc0NsYXNzO1xuICB9XG4gIHRoaXNDbGFzcy5wcm90b3R5cGUgPVxuICAgIGJhc2VDbGFzcyA9PT0gbnVsbFxuICAgICAgPyBPYmplY3QuY3JlYXRlKGJhc2VDbGFzcylcbiAgICAgIDogKChfXy5wcm90b3R5cGUgPSBiYXNlQ2xhc3MucHJvdG90eXBlKSwgbmV3IF9fKCkpO1xufVxuXG5leHBvcnQgdmFyIF9fc3ByZWFkQXJyYXlzID0gZnVuY3Rpb24gKCkge1xuICBmb3IgKHZhciBzID0gMCwgaSA9IDAsIGlsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGlsOyBpKyspIHMgKz0gYXJndW1lbnRzW2ldLmxlbmd0aDtcbiAgZm9yICh2YXIgciA9IEFycmF5KHMpLCBrID0gMCwgaSA9IDA7IGkgPCBpbDsgaSsrKVxuICAgIGZvciAodmFyIGEgPSBhcmd1bWVudHNbaV0sIGogPSAwLCBqbCA9IGEubGVuZ3RoOyBqIDwgamw7IGorKywgaysrKVxuICAgICAgcltrXSA9IGFbal07XG4gIHJldHVybiByO1xufTtcbiIsImV4cG9ydCBsZXQgVmVyc2lvbjogc3RyaW5nO1xuVmVyc2lvbiA9IGAke3Byb2Nlc3MuZW52LlZFUlNJT059YDtcblxuLy8gaW1wb3J0IFwiQHN1cnZleS9jcmVhdG9yL3N1cnZleS1jcmVhdG9yLWNvcmUuY3NzXCI7XG5cbmV4cG9ydCAqIGZyb20gXCIuLi9TdXJ2ZXlDcmVhdG9yXCI7XG5cbmV4cG9ydCAqIGZyb20gXCIuLi9hZG9ybmVycy9Sb3dcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9hZG9ybmVycy9RdWVzdGlvblwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL2Fkb3JuZXJzL1F1ZXN0aW9uSGVhZGVyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vYWRvcm5lcnMvUXVlc3Rpb25Gb290ZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9hZG9ybmVycy9RdWVzdGlvbkRyb3Bkb3duXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vYWRvcm5lcnMvUXVlc3Rpb25JbWFnZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL2Fkb3JuZXJzL1F1ZXN0aW9uUmF0aW5nXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vYWRvcm5lcnMvUXVlc3Rpb25XaWRnZXRcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9hZG9ybmVycy9DZWxsUXVlc3Rpb25cIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9hZG9ybmVycy9DZWxsUXVlc3Rpb25Ecm9wZG93blwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL2Fkb3JuZXJzL1BhZ2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9hZG9ybmVycy9QYW5lbFwiO1xuXG5leHBvcnQgKiBmcm9tIFwiLi4vTG9nb0ltYWdlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vUXVlc3Rpb25MaW5rVmFsdWVcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9RdWVzdGlvbkVtYmVkZGVkU3VydmV5XCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vUXVlc3Rpb25FZGl0b3JDb250ZW50XCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vSXRlbVZhbHVlV3JhcHBlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL0ltYWdlSXRlbVZhbHVlV3JhcHBlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL01hdHJpeENlbGxXcmFwcGVyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vUmVzdWx0c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4uL3Rvb2xib3gvVG9vbGJveEl0ZW1cIjtcbmV4cG9ydCAqIGZyb20gXCIuLi90b29sYm94L1Rvb2xib3hcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi90b29sYm94L0FkYXB0aXZlVG9vbGJveFwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL1RhYmJlZE1lbnVcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9Ob3RpZmllclwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL05hdmlnYXRpb25cIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9TaWRlQmFyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vdGFicy9UcmFuc2xhdGlvbkxpbmVTa2VsZXRvblwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL0FjdGlvbkJ1dHRvblwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL1N0cmluZ0VkaXRvclwiO1xuXG5leHBvcnQgKiBmcm9tIFwiLi4vdGFicy9EZXNpZ25lclwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL3RhYnMvRW1iZWRcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi90YWJzL0pzb25FZGl0b3JBY2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi90YWJzL0pzb25FZGl0b3JUZXh0YXJlYVwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL3RhYnMvTG9naWNcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi90YWJzL1ByZXZpZXdcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi90YWJzL1RyYW5zbGF0aW9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vdGFicy9TdXJ2ZXlTaW11bGF0b3JcIjtcblxuZXhwb3J0ICogZnJvbSBcIi4uL2V2ZW50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4uL09iamVjdFNlbGVjdG9yXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vUHJvcGVydHlHcmlkXCI7XG5cbmV4cG9ydCB7IGVkaXRvckxvY2FsaXphdGlvbiwgbG9jYWxpemF0aW9uIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmV4cG9ydCB7IHNldHRpbmdzIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmV4cG9ydCB7IHN2Z0J1bmRsZSB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5leHBvcnQgeyBTdXJ2ZXlMb2dpYywgU3VydmV5TG9naWNVSSB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkVkaXRvckRlZmluaXRpb24gfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuZXhwb3J0IHsgSVN1cnZleUNyZWF0b3JPcHRpb25zLCBJUHJvcGVydHlHcmlkRWRpdG9yIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmV4cG9ydCB7IFRvb2xib3hUb29sVmlld01vZGVsLCBQcm9wZXJ0eUdyaWRFZGl0b3JDb2xsZWN0aW9uIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmV4cG9ydCB7IFN0eWxlc01hbmFnZXIgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiOyIsImltcG9ydCB7IElQb3J0YWJsZURyYWdFdmVudCwgSVBvcnRhYmxlTW91c2VFdmVudCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5cbmV4cG9ydCBjbGFzcyBSZWFjdE1vdXNlRXZlbnQgaW1wbGVtZW50cyBJUG9ydGFibGVNb3VzZUV2ZW50IHtcbiAgY29uc3RydWN0b3IocHVibGljIGV2ZW50OiBSZWFjdC5Nb3VzZUV2ZW50PEhUTUxEaXZFbGVtZW50LCBNb3VzZUV2ZW50Pikge31cbiAgc3RvcFByb3BhZ2F0aW9uKCkge1xuICAgIHRoaXMuZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgLy90aGlzLmV2ZW50Lm5hdGl2ZUV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIC8vdGhpcy5ldmVudC5uYXRpdmVFdmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgfVxuICBwcmV2ZW50RGVmYXVsdCgpIHtcbiAgICB0aGlzLmV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgLy90aGlzLmV2ZW50Lm5hdGl2ZUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cbiAgZ2V0IGNhbmNlbEJ1YmJsZSgpOiBib29sZWFuIHtcbiAgICAvL3JldHVybiB0aGlzLmV2ZW50LmNhbmNlbEJ1YmJsZTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgc2V0IGNhbmNlbEJ1YmJsZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIC8vdGhpcy5ldmVudC5jYW5jZWxCdWJibGUgPSB2YWx1ZTtcbiAgfVxuICBnZXQgdGFyZ2V0KCk6IEV2ZW50VGFyZ2V0IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuZXZlbnQudGFyZ2V0O1xuICB9XG4gIGdldCBjdXJyZW50VGFyZ2V0KCk6IEV2ZW50VGFyZ2V0IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuZXZlbnQuY3VycmVudFRhcmdldDtcbiAgfVxuICBnZXQgY2xpZW50WCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmV2ZW50LmNsaWVudFg7XG4gIH1cbiAgZ2V0IGNsaWVudFkoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5ldmVudC5jbGllbnRZO1xuICB9XG4gIGdldCBvZmZzZXRYKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZXZlbnQubmF0aXZlRXZlbnQub2Zmc2V0WDtcbiAgfVxuICBnZXQgb2Zmc2V0WSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmV2ZW50Lm5hdGl2ZUV2ZW50Lm9mZnNldFk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJlYWN0RHJhZ0V2ZW50IGV4dGVuZHMgUmVhY3RNb3VzZUV2ZW50XG4gIGltcGxlbWVudHMgSVBvcnRhYmxlRHJhZ0V2ZW50IHtcbiAgY29uc3RydWN0b3IocHVibGljIGV2ZW50OiBSZWFjdC5EcmFnRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSB7XG4gICAgc3VwZXIoZXZlbnQpO1xuICB9XG5cbiAgZ2V0IGRhdGFUcmFuc2ZlcigpOiBEYXRhVHJhbnNmZXIge1xuICAgIHJldHVybiB0aGlzLmV2ZW50LmRhdGFUcmFuc2ZlcjtcbiAgfVxufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQmFzZSwgU3VydmV5TW9kZWwsIFBhZ2VNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHtcbiAgUmVhY3RFbGVtZW50RmFjdG9yeSxcbiAgU3VydmV5RWxlbWVudEJhc2UsXG4gIFN1cnZleUhlYWRlclxufSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBDcmVhdG9yQmFzZSwgVGFiRGVzaWduZXJWaWV3TW9kZWwgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5UGFnZU5hdmlnYXRvciB9IGZyb20gXCIuLi9QYWdlTmF2aWdhdG9yXCI7XG5pbXBvcnQgeyBTdXJ2ZXlOYXZpZ2F0aW9uIH0gZnJvbSBcIi4uL05hdmlnYXRpb25cIjtcblxuaW50ZXJmYWNlIElUYWJEZXNpZ25lckNvbXBvbmVudFByb3BzIHtcbiAgZGF0YTogVGFiRGVzaWduZXJWaWV3TW9kZWw7XG59XG5cbmV4cG9ydCBjbGFzcyBUYWJEZXNpZ25lckNvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPElUYWJEZXNpZ25lckNvbXBvbmVudFByb3BzLCBhbnk+IHtcbiAgcHJpdmF0ZSBnZXQgbW9kZWwoKTogVGFiRGVzaWduZXJWaWV3TW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmRhdGE7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBjcmVhdG9yKCk6IENyZWF0b3JCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbC5jcmVhdG9yO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVueVVwZGF0ZSA9ICgpID0+IHtcbiAgICB0aGlzLmRlbnlDb21wb25lbnRVcGRhdGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgYWxsb3dVcGRhdGUgPSAoKSA9PiB7XG4gICAgdGhpcy5hbGxvd0NvbXBvbmVudFVwZGF0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGREcmFnRHJvcEV2ZW50cyA9ICgpID0+IHtcbiAgICB0aGlzLmNyZWF0b3Iub25CZWZvcmVEcm9wLmFkZCh0aGlzLmRlbnlVcGRhdGUpO1xuICAgIHRoaXMuY3JlYXRvci5vbkFmdGVyRHJvcC5hZGQodGhpcy5hbGxvd1VwZGF0ZSk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFyRHJhZ0Ryb3BFdmVudHMgPSAoKSA9PiB7XG4gICAgdGhpcy5jcmVhdG9yLm9uQmVmb3JlRHJvcC5yZW1vdmUodGhpcy5kZW55VXBkYXRlKTtcbiAgICB0aGlzLmNyZWF0b3Iub25BZnRlckRyb3AucmVtb3ZlKHRoaXMuYWxsb3dVcGRhdGUpO1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKTogdm9pZCB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICB0aGlzLmFkZERyYWdEcm9wRXZlbnRzKCk7XG4gIH1cblxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpOiB2b2lkIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIHRoaXMuY2xlYXJEcmFnRHJvcEV2ZW50cygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudHMoKTogQXJyYXk8QmFzZT4ge1xuICAgIHJldHVybiBbdGhpcy5tb2RlbCwgdGhpcy5tb2RlbC5zdXJ2ZXldO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJlZFBhZ2VzQ2FjaGU6IGFueSA9IHt9O1xuICBwcm90ZWN0ZWQgZ2V0UmVuZGVyZWRQYWdlcygpOiBKU1guRWxlbWVudFtdIHtcbiAgICBpZiAodGhpcy5jaGFuZ2VkU3RhdGVQcm9wTmFtZSAhPT0gXCJwYWdlc1wiKSB7XG4gICAgICB0aGlzLnJlbmRlcmVkUGFnZXNDYWNoZSA9IHt9O1xuICAgIH1cbiAgICBjb25zdCByZW5kZXJlZFBhZ2VzID0gW107XG4gICAgY29uc3QgcGFnZXMgPSB0aGlzLmNyZWF0b3Iuc3VydmV5LnBhZ2VzO1xuXG4gICAgcGFnZXMuZm9yRWFjaCgocGFnZSwgaW5kZXgpID0+IHtcbiAgICAgIGxldCBjYWNoZWRQYWdlID0gdGhpcy5yZW5kZXJlZFBhZ2VzQ2FjaGVbcGFnZS5pZF07XG4gICAgICBpZiAoIWNhY2hlZFBhZ2UpIHtcbiAgICAgICAgY2FjaGVkUGFnZSA9IHRoaXMuY3JlYXRlUmVuZGVyZWRQYWdlKHBhZ2UsIGluZGV4KTtcbiAgICAgICAgdGhpcy5yZW5kZXJlZFBhZ2VzQ2FjaGVbcGFnZS5pZF0gPSBjYWNoZWRQYWdlO1xuICAgICAgfVxuICAgICAgcmVuZGVyZWRQYWdlcy5wdXNoKGNhY2hlZFBhZ2UpO1xuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMubW9kZWwuc2hvd05ld1BhZ2UpIHtcbiAgICAgIHJlbmRlcmVkUGFnZXMucHVzaCh0aGlzLnJlbmRlck5ld1BhZ2UoXCJzdmMtcGFnZVwiLCB0aGlzLm1vZGVsLm5ld1BhZ2UuaWQgKyBcIi1naG9zdC1uZXctcGFnZVwiKSk7XG4gICAgfVxuICAgIHJldHVybiByZW5kZXJlZFBhZ2VzO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVSZW5kZXJlZFBhZ2UocGFnZTogUGFnZU1vZGVsLCBpbmRleDogbnVtYmVyKTogYW55IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e1wic3ZjLXBhZ2VcIn1cbiAgICAgICAgZGF0YS1zdi1kcm9wLXRhcmdldC1wYWdlPXtwYWdlLm5hbWV9XG4gICAgICAgIGRhdGEtc3YtZHJvcC10YXJnZXQtc3VydmV5LWVsZW1lbnQ9e3BhZ2UubmFtZX1cbiAgICAgICAga2V5PXtwYWdlLmlkICsgXCItXCIgKyBpbmRleH1cbiAgICAgID5cbiAgICAgICAge3RoaXMucmVuZGVyUGFnZShwYWdlKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSByZW5kZXJOZXdQYWdlKGNsYXNzTmFtZTogc3RyaW5nLCBrZXk6IHN0cmluZyA9IFwiXCIpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFJlYWN0LkZyYWdtZW50IGtleT17a2V5fT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgICAgIGRhdGEtc3YtZHJvcC10YXJnZXQtc3VydmV5LWVsZW1lbnQ9e1wibmV3R2hvc3RQYWdlXCJ9XG4gICAgICAgID5cbiAgICAgICAgICB7ISF0aGlzLm1vZGVsLm5ld1BhZ2UgPyB0aGlzLnJlbmRlclBhZ2UodGhpcy5tb2RlbC5uZXdQYWdlKSA6IG51bGx9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9SZWFjdC5GcmFnbWVudD4pO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJQYWdlKHBhZ2VWOiBQYWdlTW9kZWwpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChcInN2Yy1wYWdlXCIsIHsgc3VydmV5OiB0aGlzLmNyZWF0b3Iuc3VydmV5LCBwYWdlOiBwYWdlViwgY3JlYXRvcjogdGhpcy5jcmVhdG9yIH0pO1xuICB9XG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGRlc2lnbmVyVGFiQ2xhc3NOYW1lID0gXCJzdmMtdGFiLWRlc2lnbmVyIFwiICsgdGhpcy5tb2RlbC5nZXRSb290Q3NzKCk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1mbGV4LWNvbHVtblwiPlxuICAgICAgICAgIHt0aGlzLm1vZGVsLmlzVG9vbGJveFZpc2libGUgPyBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoXCJzdmMtYWRhcHRpdmUtdG9vbGJveFwiLCB7IG1vZGVsOiB0aGlzLmNyZWF0b3IgfSkgOiBudWxsfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Rlc2lnbmVyVGFiQ2xhc3NOYW1lfSBvbkNsaWNrPXsoKSA9PiB0aGlzLm1vZGVsLmNsaWNrRGVzaWduZXIoKX0+XG4gICAgICAgICAge3RoaXMubW9kZWwuc2hvd1BsYWNlaG9sZGVyID8gdGhpcy5yZW5kZXJQbGFjZUhvbGRlcigpIDogdGhpcy5yZW5kZXJUYWJDb250ZW50KCl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVyUGxhY2VIb2xkZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoPFJlYWN0LkZyYWdtZW50PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtZGVzaWduZXJfX3BsYWNlaG9sZGVyLWNvbnRhaW5lclwiPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzdmMtZGVzaWduZXItcGxhY2Vob2xkZXItdGV4dCBzdmMtdGV4dCBzdmMtdGV4dC0tbm9ybWFsXCI+XG4gICAgICAgICAge3RoaXMubW9kZWwucGxhY2Vob2xkZXJUZXh0fVxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIHt0aGlzLnJlbmRlck5ld1BhZ2UoXCJzdmMtZGVzaWduZXItcGxhY2Vob2xkZXItcGFnZVwiKX1cbiAgICAgIDwvZGl2PlxuICAgIDwvUmVhY3QuRnJhZ21lbnQ+KTtcbiAgfVxuXG4gIHJlbmRlclRhYkNvbnRlbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHN1cnZleTogU3VydmV5TW9kZWwgPSB0aGlzLmNyZWF0b3Iuc3VydmV5O1xuXG4gICAgcmV0dXJuICg8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5tb2RlbC5nZXREZXNpZ25lckNzcygpfT5cbiAgICAgICAgeyF0aGlzLmNyZWF0b3IuYWxsb3dFZGl0U3VydmV5VGl0bGUgPyBudWxsIDpcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1kZXNpZ25lci1oZWFkZXJcIj5cbiAgICAgICAgICAgIDxTdXJ2ZXlIZWFkZXIgc3VydmV5PXtzdXJ2ZXl9PjwvU3VydmV5SGVhZGVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIDxTdXJ2ZXlOYXZpZ2F0aW9uIHN1cnZleT17c3VydmV5fSBsb2NhdGlvbj1cInRvcFwiIC8+XG4gICAgICAgIHt0aGlzLmdldFJlbmRlcmVkUGFnZXMoKX1cbiAgICAgICAgPFN1cnZleU5hdmlnYXRpb25cbiAgICAgICAgICBzdXJ2ZXk9e3N1cnZleX1cbiAgICAgICAgICBsb2NhdGlvbj1cImJvdHRvbVwiXG4gICAgICAgICAgY3NzPXtzdXJ2ZXkuY3NzfVxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgICB7dGhpcy5jcmVhdG9yLnNob3dQYWdlTmF2aWdhdG9yID9cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtdGFiLWRlc2lnbmVyX19wYWdlLW5hdmlnYXRvclwiPjxTdXJ2ZXlQYWdlTmF2aWdhdG9yXG4gICAgICAgICAgY3JlYXRvcj17dGhpcy5jcmVhdG9yfVxuICAgICAgICAgIHBhZ2VzPXt0aGlzLmNyZWF0b3IucGFnZXNDb250cm9sbGVyLnBhZ2VzfVxuICAgICAgICA+PC9TdXJ2ZXlQYWdlTmF2aWdhdG9yPjwvZGl2PlxuICAgICAgICA6IG51bGxcbiAgICAgIH1cbiAgICA8L1JlYWN0LkZyYWdtZW50Pik7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdmMtdGFiLWRlc2lnbmVyXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICBUYWJEZXNpZ25lckNvbXBvbmVudCxcbiAgICBwcm9wcyBhcyBJVGFiRGVzaWduZXJDb21wb25lbnRQcm9wc1xuICApO1xufSk7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQge1xuICBSZWFjdEVsZW1lbnRGYWN0b3J5LFxuICBTdXJ2ZXksXG4gIFN1cnZleUVsZW1lbnRCYXNlXG59IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IEVtYmVkTW9kZWwgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuXG5pbnRlcmZhY2UgSVRhYkVtYmVkQ29tcG9uZW50UHJvcHMge1xuICBkYXRhOiBFbWJlZE1vZGVsO1xufVxuXG5leHBvcnQgY2xhc3MgVGFiRW1iZWRDb21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxcbiAgSVRhYkVtYmVkQ29tcG9uZW50UHJvcHMsXG4gIGFueVxuPiB7XG4gIHByaXZhdGUgZ2V0IG1vZGVsKCk6IEVtYmVkTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmRhdGE7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtY3JlYXRvci10YWJfX2NvbnRlbnQgc3ZjLWVtYmVkLXRhYl9fY29udGVudFwiPlxuICAgICAgICB7dGhpcy5tb2RlbC5zdXJ2ZXkgPyA8U3VydmV5IG1vZGVsPXt0aGlzLm1vZGVsLnN1cnZleX0+PC9TdXJ2ZXk+IDogbnVsbH1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLXRhYi1lbWJlZFwiLFxuICAocHJvcHM6IElUYWJFbWJlZENvbXBvbmVudFByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVGFiRW1iZWRDb21wb25lbnQsIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnksIFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgQWNlSnNvbkVkaXRvck1vZGVsIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcblxuaW50ZXJmYWNlIElUYWJKc29uRWRpdG9yQWNlQ29tcG9uZW50UHJvcHMge1xuICBkYXRhOiBBY2VKc29uRWRpdG9yTW9kZWw7XG59XG5cbmV4cG9ydCBjbGFzcyBUYWJKc29uRWRpdG9yQWNlQ29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8XG4gIElUYWJKc29uRWRpdG9yQWNlQ29tcG9uZW50UHJvcHMsXG4gIGFueVxuPiB7XG4gIHByaXZhdGUgYWNlRWRpdG9yclJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgY29uc3RydWN0b3IocHJvcHM6IElUYWJKc29uRWRpdG9yQWNlQ29tcG9uZW50UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5hY2VFZGl0b3JyUmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuICBwcml2YXRlIGdldCBtb2RlbCgpOiBBY2VKc29uRWRpdG9yTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmRhdGE7XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgdGhpcy5tb2RlbC5pbml0KGFjZS5lZGl0KHRoaXMuYWNlRWRpdG9yclJlZi5jdXJyZW50IGFzIEhUTUxFbGVtZW50KSk7XG4gIH1cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWNyZWF0b3ItdGFiX19jb250ZW50XCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWpzb24tZWRpdG9yLXRhYl9fY29udGVudFwiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInN2Yy1qc29uLWVkaXRvci10YWJfX2FjZS1lZGl0b3JcIlxuICAgICAgICAgICAgcmVmPXt0aGlzLmFjZUVkaXRvcnJSZWZ9XG4gICAgICAgICAgPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLXRhYi1qc29uLWVkaXRvci1hY2VcIixcbiAgKHByb3BzOiBJVGFiSnNvbkVkaXRvckFjZUNvbXBvbmVudFByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVGFiSnNvbkVkaXRvckFjZUNvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IFJlYWN0LCB7IENoYW5nZUV2ZW50IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5LCBTdXJ2ZXlFbGVtZW50QmFzZSB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IFRleHRhcmVhSnNvbkVkaXRvck1vZGVsIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcblxuaW50ZXJmYWNlIElUYWJKc29uRWRpdG9yVGV4dGFyZWFDb21wb25lbnRQcm9wcyB7XG4gIGRhdGE6IFRleHRhcmVhSnNvbkVkaXRvck1vZGVsO1xufVxuXG5leHBvcnQgY2xhc3MgVGFiSnNvbkVkaXRvclRleHRhcmVhQ29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8XG4gIElUYWJKc29uRWRpdG9yVGV4dGFyZWFDb21wb25lbnRQcm9wcyxcbiAgYW55XG4+IHtcbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5tb2RlbC5jYW5TaG93RXJyb3JzID0gZmFsc2U7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuICBwcml2YXRlIGdldCBtb2RlbCgpOiBUZXh0YXJlYUpzb25FZGl0b3JNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZGF0YTtcbiAgfVxuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBlcnJvcnM6IEpTWC5FbGVtZW50W10gPSBbXTtcbiAgICB2YXIga2V5ID0gMTtcbiAgICBjb25zdCB1c2VyRnJpZW5kbHlFcnJvcnM6IGFueVtdID0gdGhpcy5tb2RlbC51c2VyRnJpZW5kbHlFcnJvcnM7XG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IHVzZXJGcmllbmRseUVycm9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgZXJyb3JzLnB1c2goPHNwYW4ga2V5PXtrZXl9PjxiPkVycm9yOiA8L2I+PC9zcGFuPik7XG4gICAgICBrZXkrKztcbiAgICAgIGVycm9ycy5wdXNoKDxzcGFuIGtleT17a2V5fT57dXNlckZyaWVuZGx5RXJyb3JzW2ldfTwvc3Bhbj4pO1xuICAgICAga2V5Kys7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1jcmVhdG9yLXRhYl9fY29udGVudFwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1qc29uLWVkaXRvci10YWJfX2NvbnRlbnRcIj5cbiAgICAgICAgICA8dGV4dGFyZWFcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInN2Yy1qc29uLWVkaXRvci10YWJfX2NvbnRlbnQtYXJlYVwiXG4gICAgICAgICAgICB2YWx1ZT17dGhpcy5tb2RlbC50ZXh0fVxuICAgICAgICAgICAgb25DaGFuZ2U9eyhlOiBDaGFuZ2VFdmVudDxIVE1MVGV4dEFyZWFFbGVtZW50PikgPT5cbiAgICAgICAgICAgICAgKHRoaXMubW9kZWwudGV4dCA9IGUudGFyZ2V0LnZhbHVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb25LZXlEb3duPXsoZSkgPT4gdGhpcy5tb2RlbC5jaGVja0tleShlLCBlKX1cbiAgICAgICAgICAgIGRpc2FibGVkPXt0aGlzLm1vZGVsLnJlYWRPbmx5fVxuICAgICAgICAgICAgYXJpYS1sYWJlbD17dGhpcy5tb2RlbC5hcmlhTGFiZWx9XG4gICAgICAgICAgPjwvdGV4dGFyZWE+XG4gICAgICAgICAge2Vycm9ycy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzc05hbWU9XCJzdmMtanNvbi1lZGl0b3ItdGFiX19lcnJyb3NfYnV0dG9uXCIgb25DbGljaz17KCkgPT4gdGhpcy5tb2RlbC50b2dnbGVFcnJvcnMoKX0+XG4gICAgICAgICAgICAgIHt0aGlzLm1vZGVsLmVycm9yQnV0dG9uVGV4dH1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIH1cbiAgICAgICAgICB7dGhpcy5tb2RlbC5jYW5TaG93RXJyb3JzICYmIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWpzb24tZWRpdG9yLXRhYl9fY29udGVudC1lcnJvcnNcIj57ZXJyb3JzfTwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy10YWItanNvbi1lZGl0b3ItdGV4dGFyZWFcIixcbiAgKHByb3BzOiBJVGFiSnNvbkVkaXRvclRleHRhcmVhQ29tcG9uZW50UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUYWJKc29uRWRpdG9yVGV4dGFyZWFDb21wb25lbnQsIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCBSZWFjdCwgeyBGcmFnbWVudCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQWN0aW9uLCBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5LCBTdXJ2ZXlFbGVtZW50QmFzZSwgU3VydmV5LCBhdHRhY2hLZXkyY2xpY2sgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBTdXJ2ZXlMb2dpY1VJIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcblxuZXhwb3J0IGNsYXNzIFRhYkxvZ2ljQWRkQnV0dG9uQ29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8YW55LCBhbnk+IHtcbiAgcHJpdmF0ZSBnZXQgbW9kZWwoKTogQWN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5idXR0b247XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuXG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGJ1dHRvbkNsYXNzTmFtZSA9IFwic3ZjLWxvZ2ljLXRhYl9fY29udGVudC1hY3Rpb24gc3ZjLWJ0blwiICsgKCh0aGlzLm1vZGVsLmVuYWJsZWQgIT09IHVuZGVmaW5lZCAmJiAhdGhpcy5tb2RlbC5lbmFibGVkKSA/IFwiIHN2Yy1sb2dpYy10YWJfX2NvbnRlbnQtYWN0aW9uLS1kaXNhYmxlZFwiIDogXCJcIik7XG4gICAgcmV0dXJuIGF0dGFjaEtleTJjbGljayg8ZGl2XG4gICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHRoaXMubW9kZWwuYWN0aW9uKCk7XG4gICAgICB9fVxuICAgICAgY2xhc3NOYW1lPXtidXR0b25DbGFzc05hbWV9XG4gICAgICB0aXRsZT17dGhpcy5tb2RlbC50aXRsZX1cbiAgICA+XG4gICAgICA8c3BhbiBjbGFzc05hbWU9XCJzdmMtdGV4dCBzdmMtdGV4dC0tbm9ybWFsIHN2Yy10ZXh0LS1ib2xkXCI+XG4gICAgICAgIHt0aGlzLm1vZGVsLnRpdGxlfVxuICAgICAgPC9zcGFuPlxuICAgIDwvZGl2Pik7XG4gIH1cbn1cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3ZjLXRhYi1sb2dpYy1hZGQtYnV0dG9uXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUYWJMb2dpY0FkZEJ1dHRvbkNvbXBvbmVudCwgcHJvcHMpO1xufSk7XG5cbmV4cG9ydCBjbGFzcyBUYWJMb2dpY0NvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPGFueSwgYW55PiB7XG4gIHByaXZhdGUgZ2V0IG1vZGVsKCk6IFN1cnZleUxvZ2ljVUkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmRhdGE7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuXG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBsb2dpYyA9IHRoaXMubW9kZWw7XG4gICAgdmFyIHJvb3RDbGFzcyA9IFwic3ZjLWNyZWF0b3ItdGFiX19jb250ZW50XCI7XG4gICAgdmFyIGNvbnRlbnQgPSB0aGlzLnJlbmRlclZpZXdDb250ZW50KCk7XG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXtyb290Q2xhc3N9Pntjb250ZW50fTwvZGl2PjtcbiAgfVxuICBwcml2YXRlIHJlbmRlclZpZXdDb250ZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBsb2dpY1RhYkNsYXNzTmFtZSA9IFwic3ZjLXBsdWdpbi10YWJfX2NvbnRlbnQgc3ZjLWxvZ2ljLXRhYl9fY29udGVudCBcIiArICh0aGlzLm1vZGVsLmhhc0l0ZW1zID8gXCJcIiA6IFwic3ZjLWxvZ2ljLXRhYl9fZW1wdHlcIik7XG4gICAgY29uc3QgYWRkTG9naWMgPSAhdGhpcy5tb2RlbC5yZWFkT25seSA/IDxUYWJMb2dpY0FkZEJ1dHRvbkNvbXBvbmVudCBidXR0b249e3RoaXMubW9kZWwuYWRkTmV3QnV0dG9ufSAvPiA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gKFxuICAgICAgPEZyYWdtZW50PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17bG9naWNUYWJDbGFzc05hbWV9PlxuICAgICAgICAgIDxTdXJ2ZXkgbW9kZWw9e3RoaXMubW9kZWwuaXRlbXNTdXJ2ZXl9PjwvU3VydmV5PlxuICAgICAgICAgIHt0aGlzLm1vZGVsLmhhc0l0ZW1zID8gbnVsbCA6IChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWxvZ2ljLXRhYl9fY29udGVudC1lbXB0eVwiID5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXRleHRcIj57dGhpcy5tb2RlbC5lbXB0eVRhYlBsYWNlSG9sZGVyfTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2Pil9XG4gICAgICAgICAge2FkZExvZ2ljfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvRnJhZ21lbnQ+XG4gICAgKTtcbiAgfVxufVxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdmMtdGFiLWxvZ2ljXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUYWJMb2dpY0NvbXBvbmVudCwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBBY3Rpb24sIEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7XG4gIFN1cnZleUFjdGlvbkJhcixcbiAgUmVhY3RFbGVtZW50RmFjdG9yeSxcbiAgU3VydmV5RWxlbWVudEJhc2UsXG4gIGF0dGFjaEtleTJjbGlja1xufSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBUZXN0U3VydmV5VGFiVmlld01vZGVsIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleVNpbXVsYXRvciB9IGZyb20gXCIuL1N1cnZleVNpbXVsYXRvclwiO1xuaW1wb3J0IHsgU3VydmV5UmVzdWx0cyB9IGZyb20gXCIuLi9SZXN1bHRzXCI7XG5cbmV4cG9ydCBjbGFzcyBUYWJQcmV2aWV3VGVzdFN1cnZleUFnYWluQ29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8YW55LCBhbnk+IHtcbiAgcHJpdmF0ZSBnZXQgbW9kZWwoKTogQWN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5idXR0b247XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuXG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGJ1dHRvbkNsYXNzTmFtZSA9IFwic3ZjLXByZXZpZXdfX3Rlc3QtYWdhaW4gc3ZjLWJ0blwiO1xuICAgIHJldHVybiBhdHRhY2hLZXkyY2xpY2soPGRpdlxuICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLm1vZGVsLmFjdGlvbigpO1xuICAgICAgfX1cbiAgICAgIGNsYXNzTmFtZT17YnV0dG9uQ2xhc3NOYW1lfVxuICAgICAgdGl0bGU9e3RoaXMubW9kZWwudGl0bGV9XG4gICAgPlxuICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXRleHQgc3ZjLXRleHQtLW5vcm1hbCBzdmMtdGV4dC0tYm9sZFwiPlxuICAgICAgICB7dGhpcy5tb2RlbC50aXRsZX1cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj4pO1xuICB9XG59XG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2Yy10YWItcHJldmlldy10ZXN0LWFnYWluXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUYWJQcmV2aWV3VGVzdFN1cnZleUFnYWluQ29tcG9uZW50LCBwcm9wcyk7XG59KTtcblxuZXhwb3J0IGNsYXNzIFRhYlByZXZpZXdTdXJ2ZXlDb21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxhbnksIGFueT4ge1xuICBwcml2YXRlIGdldCBtb2RlbCgpOiBUZXN0U3VydmV5VGFiVmlld01vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5kYXRhO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cblxuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCB0YWJDb250ZW50Q2xhc3NOYW1lID0gXCJzdmMtY3JlYXRvci10YWJfX2NvbnRlbnQgc3ZjLXRlc3QtdGFiX19jb250ZW50XCIgKyAodGhpcy5tb2RlbC5pc1BhZ2VUb29sYmFyVmlzaWJsZSA/IFwiIHN2Yy1jcmVhdG9yLXRhYl9fY29udGVudC0td2l0aC10b29sYmFyXCIgOiBcIlwiKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RhYkNvbnRlbnRDbGFzc05hbWV9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1wbHVnaW4tdGFiX19jb250ZW50XCI+XG4gICAgICAgICAgPFN1cnZleVNpbXVsYXRvciBtb2RlbD17dGhpcy5tb2RlbC5zaW11bGF0b3J9PjwvU3VydmV5U2ltdWxhdG9yPlxuICAgICAgICAgIHshdGhpcy5tb2RlbC5pc1J1bm5pbmcgPyA8VGFiUHJldmlld1Rlc3RTdXJ2ZXlBZ2FpbkNvbXBvbmVudCBidXR0b249e3RoaXMubW9kZWwudGVzdEFnYWluQWN0aW9ufSAvPiA6IG51bGx9XG4gICAgICAgICAgeyF0aGlzLm1vZGVsLmlzUnVubmluZyA/IDxTdXJ2ZXlSZXN1bHRzIHN1cnZleT17dGhpcy5tb2RlbC5zaW11bGF0b3Iuc3VydmV5fSAvPiA6IG51bGx9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7dGhpcy5nZXRCb3R0b21Ub29sYmFyKCl9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIGdldEJvdHRvbVRvb2xiYXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICh0aGlzLm1vZGVsLmlzUGFnZVRvb2xiYXJWaXNpYmxlKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy10ZXN0LXRhYl9fY29udGVudC1hY3Rpb25zXCI+XG4gICAgICAgICAgPFN1cnZleUFjdGlvbkJhciBtb2RlbD17dGhpcy5tb2RlbC5wYWdlc30+PC9TdXJ2ZXlBY3Rpb25CYXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3ZjLXRhYi10ZXN0XCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUYWJQcmV2aWV3U3VydmV5Q29tcG9uZW50LCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCB7IEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleSwgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBTdXJ2ZXlTaW11bGF0b3JNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlTaW11bGF0b3IgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxhbnksIGFueT4ge1xuICBwcml2YXRlIGdldCBtb2RlbCgpOiBTdXJ2ZXlTaW11bGF0b3JNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMubW9kZWw7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cblxuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBtYWluU2ltdWxhdG9yQ2xhc3MgPSBcInN2ZC1zaW11bGF0b3ItbWFpblwiICtcbiAgICAgICh0aGlzLm1vZGVsLmRldmljZSA9PT0gXCJkZXNrdG9wXCIgPyBcIiBzdmQtc2ltdWxhdG9yLW1haW4tLWRlc2t0b3BcIiA6IFwiXCIpO1xuICAgIGlmICghdGhpcy5tb2RlbC5zdXJ2ZXkpIHtcbiAgICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17bWFpblNpbXVsYXRvckNsYXNzfT48L2Rpdj47XG4gICAgfVxuICAgIGlmICh0aGlzLm1vZGVsLmhhc0ZyYW1lKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXttYWluU2ltdWxhdG9yQ2xhc3MgKyBcIiBcIiArIHRoaXMubW9kZWwuc2ltdWxhdG9yTWFpbkNzc0NsYXNzfT5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJzdmQtc2ltdWxhdG9yLXdyYXBwZXJcIlxuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgd2lkdGg6IHRoaXMubW9kZWwuc2ltdWxhdG9yRnJhbWUuZnJhbWVXaWR0aCArIFwicHhcIixcbiAgICAgICAgICAgICAgaGVpZ2h0OiB0aGlzLm1vZGVsLnNpbXVsYXRvckZyYW1lLmZyYW1lSGVpZ2h0ICsgXCJweFwiXG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtcbiAgICAgICAgICAgICAgICBcInN2ZC1zaW11bGF0b3ItZnJhbWUgXCIgKyB0aGlzLm1vZGVsLnNpbXVsYXRvckZyYW1lLmNzc0NsYXNzXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICB3aWR0aDpcbiAgICAgICAgICAgICAgICAgICh0aGlzLm1vZGVsLmxhbmRzY2FwZU9yaWVudGF0aW9uXG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy5tb2RlbC5zaW11bGF0b3JGcmFtZS5mcmFtZUhlaWdodFxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMubW9kZWwuc2ltdWxhdG9yRnJhbWUuZnJhbWVXaWR0aCkgKyBcInB4XCIsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OlxuICAgICAgICAgICAgICAgICAgKHRoaXMubW9kZWwubGFuZHNjYXBlT3JpZW50YXRpb25cbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLm1vZGVsLnNpbXVsYXRvckZyYW1lLmZyYW1lV2lkdGhcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLm1vZGVsLnNpbXVsYXRvckZyYW1lLmZyYW1lSGVpZ2h0KSArIFwicHhcIlxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJzdmQtc2ltdWxhdG9yXCJcbiAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICB3aWR0aDpcbiAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuc2ltdWxhdG9yRnJhbWUud2lkdGggL1xuICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5zaW11bGF0b3JGcmFtZS5zY2FsZSArXG4gICAgICAgICAgICAgICAgICBcInB4XCIsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OlxuICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5zaW11bGF0b3JGcmFtZS5oZWlnaHQgL1xuICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5zaW11bGF0b3JGcmFtZS5zY2FsZSArXG4gICAgICAgICAgICAgICAgICBcInB4XCIsXG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtOlxuICAgICAgICAgICAgICAgICAgXCJzY2FsZShcIiArXG4gICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLnNpbXVsYXRvckZyYW1lLnNjYWxlICtcbiAgICAgICAgICAgICAgICAgIFwiKSB0cmFuc2xhdGUoLTUwJSwgLTUwJSlcIlxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2ZC1zaW11bGF0b3ItY29udGVudFwiPlxuICAgICAgICAgICAgICAgIDxTdXJ2ZXkgbW9kZWw9e3RoaXMubW9kZWwuc3VydmV5fT48L1N1cnZleT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXttYWluU2ltdWxhdG9yQ2xhc3N9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZkLXNpbXVsYXRvci1jb250ZW50XCI+XG4gICAgICAgICAgICA8U3VydmV5IG1vZGVsPXt0aGlzLm1vZGVsLnN1cnZleX0+PC9TdXJ2ZXk+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7XG4gIFJlYWN0RWxlbWVudEZhY3RvcnksXG4gIFN1cnZleUVsZW1lbnRCYXNlLFxuICBTdXJ2ZXlcbn0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgVHJhbnNsYXRpb24gfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuXG5leHBvcnQgY2xhc3MgVGFiVHJhbnNsYXRpb25Db21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxhbnksIGFueT4ge1xuICBwcml2YXRlIGdldCBtb2RlbCgpOiBUcmFuc2xhdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZGF0YTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5tb2RlbCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWNyZWF0b3ItdGFiX19jb250ZW50IHN2Yy10cmFuc2xhdGlvbi10YWJcIj5cbiAgICAgICAge3RoaXMucmVuZGVyRWxlbWVudENvbnRlbnQoKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcmVuZGVyRWxlbWVudENvbnRlbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICh0aGlzLm1vZGVsLmlzRW1wdHkpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3Qtbm8tc3RyaW5nc1wiPlxuICAgICAgICAgIDxzcGFuPnt0aGlzLm1vZGVsLm5vU3RyaW5nc1RleHR9PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3QtY29udGVudFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWZsZXgtY29sdW1uIHN0LXN0cmluZ3Mtd3JhcHBlclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtZmxleC1yb3cgc3Qtc3RyaW5ncy1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgPFN1cnZleSBtb2RlbD17dGhpcy5tb2RlbC5zdHJpbmdzSGVhZGVyU3VydmV5fT48L1N1cnZleT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtZmxleC1yb3cgc3ZjLXBsdWdpbi10YWJfX2NvbnRlbnQgc3Qtc3RyaW5nc1wiPlxuICAgICAgICAgICAgICA8U3VydmV5IG1vZGVsPXt0aGlzLm1vZGVsLnN0cmluZ3NTdXJ2ZXl9PjwvU3VydmV5PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdmMtdGFiLXRyYW5zbGF0aW9uXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUYWJUcmFuc2xhdGlvbkNvbXBvbmVudCwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuXG5leHBvcnQgY2xhc3MgVHJhbnNsYXRpb25MaW5lU2tlbGV0b24gZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8YW55LCBhbnk+IHtcbiAgcmVuZGVyKCkge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInNkLXRyYW5zbGF0aW9uLWxpbmUtc2tlbGV0b25cIj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzZC10cmFuc2xhdGlvbi1saW5lLXNrZWxldG9uXCIsIChwcm9wczogYW55KSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFRyYW5zbGF0aW9uTGluZVNrZWxldG9uLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFZlcnRpY2FsUmVzcG9uc2l2aXR5TWFuYWdlciB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IFN1cnZleUNyZWF0b3JUb29sYm94VG9vbCB9IGZyb20gXCIuL1Rvb2xib3hJdGVtXCI7XG5pbXBvcnQgeyBJU3VydmV5Q3JlYXRvclRvb2xib3hQcm9wcywgVG9vbGJveCB9IGZyb20gXCIuL1Rvb2xib3hcIjtcblxuZXhwb3J0IGNsYXNzIEFkYXB0aXZlVG9vbGJveCBleHRlbmRzIFRvb2xib3gge1xuICBwcml2YXRlIG1hbmFnZXI6IFZlcnRpY2FsUmVzcG9uc2l2aXR5TWFuYWdlcjtcbiAgcHJpdmF0ZSByb290UmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBJU3VydmV5Q3JlYXRvclRvb2xib3hQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnJvb3RSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5yb290UmVmLmN1cnJlbnQ7XG4gICAgaWYgKCFjb250YWluZXIpIHJldHVybjtcbiAgICB0aGlzLm1hbmFnZXIgPSBuZXcgVmVydGljYWxSZXNwb25zaXZpdHlNYW5hZ2VyKFxuICAgICAgY29udGFpbmVyLFxuICAgICAgdGhpcy50b29sYm94LFxuICAgICAgXCIuc3ZjLXRvb2xib3hfX3Rvb2w6bm90KC5zdi1kb3RzKT4uc3YtYWN0aW9uX19jb250ZW50XCIsXG4gICAgICA0NCxcbiAgICAgIDQ0XG4gICAgKTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLm1hbmFnZXIgJiYgKHRoaXMubWFuYWdlci5kaXNwb3NlKCkpO1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gIH1cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMudG9vbGJveC5oYXNBY3Rpb25zKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IGNsYXNzTmFtZSA9IFwic3ZjLXRvb2xib3hcIiArICh0aGlzLnRvb2xib3guaXNDb21wYWN0ID8gXCIgc3ZjLXRvb2xib3gtLWNvbXBhY3RcIiA6IFwiXCIpO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IHJlZj17dGhpcy5yb290UmVmfSBjbGFzc05hbWU9e2NsYXNzTmFtZX0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXRvb2xib3hfX2NvbnRhaW5lclwiPlxuICAgICAgICAgIHsodGhpcy50b29sYm94LmlzQ29tcGFjdCB8fCB0aGlzLnRvb2xib3guY2F0ZWdvcmllcy5sZW5ndGggPT0gMSkgP1xuICAgICAgICAgICAgKDxkaXYgY2xhc3NOYW1lPVwic3ZjLXRvb2xib3hfX2NhdGVnb3J5XCI+XG4gICAgICAgICAgICAgIHt0aGlzLnJlbmRlckl0ZW1zKHRoaXMudG9vbGJveC5yZW5kZXJlZEFjdGlvbnMsIHRoaXMudG9vbGJveC5pc0NvbXBhY3QpfVxuICAgICAgICAgICAgPC9kaXY+KVxuICAgICAgICAgICAgOiB0aGlzLnJlbmRlckNhdGVnb3JpZXMoKVxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVySXRlbXMoaXRlbXM6IEFycmF5PGFueT4sIGlzQ29tcGFjdD86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gaXRlbXMubWFwKChpdGVtLCBpdGVtSW5kZXgpID0+XG4gICAgICA8U3VydmV5Q3JlYXRvclRvb2xib3hUb29sIGl0ZW09eyhpdGVtIGFzIGFueSl9IGNyZWF0b3I9e3RoaXMuY3JlYXRvcn0gaXNDb21wYWN0PXtpc0NvbXBhY3R9IGtleT17XCJpdGVtXCIgKyBpdGVtSW5kZXh9PjwvU3VydmV5Q3JlYXRvclRvb2xib3hUb29sPlxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVuZGVyQ2F0ZWdvcnlDb250ZW50KGNhdGVnb3J5OiBhbnkpOiBBcnJheTxhbnk+IHtcbiAgICBsZXQgaXRlbXMgPSBbXTtcbiAgICBpZiAoIWNhdGVnb3J5LmNvbGxhcHNlZCkge1xuICAgICAgaXRlbXMgPSB0aGlzLnJlbmRlckl0ZW1zKGNhdGVnb3J5Lml0ZW1zLCBmYWxzZSk7XG4gICAgfVxuICAgIHJldHVybiBpdGVtcztcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2Yy1hZGFwdGl2ZS10b29sYm94XCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChBZGFwdGl2ZVRvb2xib3gsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQ3JlYXRvckJhc2UgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5Q3JlYXRvclRvb2xib3hUb29sIH0gZnJvbSBcIi4vVG9vbGJveEl0ZW1cIjtcbmltcG9ydCB7IEJhc2UsIFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBhdHRhY2hLZXkyY2xpY2ssIFJlYWN0RWxlbWVudEZhY3RvcnksIFN1cnZleUVsZW1lbnRCYXNlLCBTdmdJY29uIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIElTdXJ2ZXlDcmVhdG9yVG9vbGJveFByb3BzIHtcbiAgbW9kZWw6IENyZWF0b3JCYXNlO1xufVxuXG5leHBvcnQgY2xhc3MgVG9vbGJveCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPElTdXJ2ZXlDcmVhdG9yVG9vbGJveFByb3BzLCBhbnk+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IElTdXJ2ZXlDcmVhdG9yVG9vbGJveFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHB1YmxpYyBnZXQgY3JlYXRvcigpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5tb2RlbDtcbiAgfVxuICBwdWJsaWMgZ2V0IHRvb2xib3goKSB7XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRvci50b29sYm94O1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMudG9vbGJveDtcbiAgfVxuXG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLnRvb2xib3guaGFzQWN0aW9ucykgcmV0dXJuIG51bGw7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtdG9vbGJveFwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy10b29sYm94X19jb250YWluZXJcIj5cbiAgICAgICAgICB7KHRoaXMudG9vbGJveC5jYXRlZ29yaWVzLmxlbmd0aCA9PSAxKSA/XG4gICAgICAgICAgICAoPGRpdiBjbGFzc05hbWU9XCJzdmMtdG9vbGJveF9fY2F0ZWdvcnlcIj5cbiAgICAgICAgICAgICAge3RoaXMucmVuZGVySXRlbXModGhpcy50b29sYm94LnZpc2libGVBY3Rpb25zKX1cbiAgICAgICAgICAgIDwvZGl2PilcbiAgICAgICAgICAgIDogdGhpcy5yZW5kZXJDYXRlZ29yaWVzKClcbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIHJlbmRlckl0ZW1zKGl0ZW1zOiBBcnJheTxhbnk+KSB7XG4gICAgcmV0dXJuIGl0ZW1zLm1hcCgoaXRlbSwgaXRlbUluZGV4KSA9PlxuICAgICAgPFN1cnZleUNyZWF0b3JUb29sYm94VG9vbCBpdGVtPXsoaXRlbSBhcyBhbnkpfSBjcmVhdG9yPXt0aGlzLmNyZWF0b3J9IGtleT17XCJpdGVtXCIgKyBpdGVtSW5kZXh9IGlzQ29tcGFjdD17ZmFsc2V9PjwvU3VydmV5Q3JlYXRvclRvb2xib3hUb29sPlxuICAgICk7XG4gIH1cbiAgcmVuZGVyQ2F0ZWdvcmllcygpIHtcbiAgICByZXR1cm4gdGhpcy50b29sYm94LmNhdGVnb3JpZXMubWFwKChjYXRlZ29yeSkgPT4ge1xuICAgICAgY29uc3QgaGVhZGVyID0gdGhpcy5yZW5kZXJDYXRlZ29yeUhlYWRlcihjYXRlZ29yeSk7XG4gICAgICBjb25zdCBpdGVtcyA9IHRoaXMucmVuZGVyQ2F0ZWdvcnlDb250ZW50KGNhdGVnb3J5KTtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXRvb2xib3hfX2NhdGVnb3J5XCIga2V5PXtjYXRlZ29yeS5uYW1lfT5cbiAgICAgICAgICB7aGVhZGVyfVxuICAgICAgICAgIHtpdGVtc31cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgcmVuZGVyQ2F0ZWdvcnlIZWFkZXIoY2F0ZWdvcnk6IGFueSk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBpY29uTmFtZSA9IGNhdGVnb3J5LmNvbGxhcHNlZCA/IFwiYXJyb3ctZG93blwiIDogXCJhcnJvdy11cFwiO1xuICAgIGNvbnN0IHN2Z0ljb25DbGFzc05hbWUgPSBcInN2Yy10b29sYm94X19jYXRlZ29yeS1oZWFkZXJfX2J1dHRvbiBzdmMtc3RyaW5nLWVkaXRvcl9fYnV0dG9uLS1cIiArIChjYXRlZ29yeS5jb2xsYXBzZWQgPyBcImV4cGFuZFwiIDogXCJjb2xsYXBzZVwiKTtcbiAgICByZXR1cm4gYXR0YWNoS2V5MmNsaWNrKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtdG9vbGJveF9fY2F0ZWdvcnktaGVhZGVyXCIgb25DbGljaz17ZSA9PiBjYXRlZ29yeS50b2dnbGVTdGF0ZSgpfT5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXRvb2xib3hfX2NhdGVnb3J5LXRpdGxlXCI+e2NhdGVnb3J5Lm5hbWV9PC9zcGFuPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy10b29sYm94X19jYXRlZ29yeS1oZWFkZXJfX2NvbnRyb2xzXCI+XG4gICAgICAgICAgPFN2Z0ljb24gY2xhc3NOYW1lPXtzdmdJY29uQ2xhc3NOYW1lfSBpY29uTmFtZT17XCJpY29uLVwiICsgaWNvbk5hbWV9IHNpemU9ezI0fT48L1N2Z0ljb24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQ2F0ZWdvcnlDb250ZW50KGNhdGVnb3J5OiBhbnkpOiBBcnJheTxhbnk+IHtcbiAgICByZXR1cm4gIWNhdGVnb3J5LmNvbGxhcHNlZCA/IHRoaXMucmVuZGVySXRlbXMoY2F0ZWdvcnkuaXRlbXMpIDogW107XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdmMtdG9vbGJveFwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbGJveCwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQge1xuICBDcmVhdG9yQmFzZSxcbiAgZWRpdG9yTG9jYWxpemF0aW9uLFxuICBJUXVlc3Rpb25Ub29sYm94SXRlbVxufSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IFJlYWN0LCB7IENTU1Byb3BlcnRpZXMgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFRvb2xib3hUb29sVmlld01vZGVsIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCB7XG4gIEFjdGlvbixcbiAgQmFzZSxcbiAgU3VydmV5TW9kZWxcbn0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQge1xuICBhdHRhY2hLZXkyY2xpY2ssXG4gIFJlYWN0RWxlbWVudEZhY3RvcnksXG4gIFN1cnZleUVsZW1lbnRCYXNlLFxuICBTdmdJY29uXG59IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcblxuZXhwb3J0IGludGVyZmFjZSBJU3VydmV5Q3JlYXRvclRvb2xib3hJdGVtUHJvcHMge1xuICBpdGVtOiBJUXVlc3Rpb25Ub29sYm94SXRlbTtcbiAgY3JlYXRvcjogQ3JlYXRvckJhc2U7XG4gIGlzQ29tcGFjdDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleUNyZWF0b3JUb29sYm94VG9vbCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPFxuICBJU3VydmV5Q3JlYXRvclRvb2xib3hJdGVtUHJvcHMsXG4gIGFueVxuPiB7XG4gIG1vZGVsOiBUb29sYm94VG9vbFZpZXdNb2RlbDtcblxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLm1vZGVsID0gbmV3IFRvb2xib3hUb29sVmlld01vZGVsKHRoaXMuaXRlbSwgdGhpcy5wcm9wcy5jcmVhdG9yKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGl0ZW0oKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbTtcbiAgfVxuICBwdWJsaWMgZ2V0IGNyZWF0b3IoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3JlYXRvcjtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzQ29tcGFjdCgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pc0NvbXBhY3Q7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiAodGhpcy5pdGVtIGFzIGFueSk7XG4gIH1cblxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGl0ZW0gPSAoKHRoaXMuaXRlbSBhcyBhbnkpIGFzIEFjdGlvbik7XG4gICAgY29uc3QgY2xhc3NOYW1lID0gXCJzdmMtdG9vbGJveF9fdG9vbCBcIiArIGl0ZW0uY3NzICsgKGl0ZW0uaXNWaXNpYmxlID8gXCJcIiA6IFwiIHN2LWFjdGlvbi0taGlkZGVuXCIpO1xuICAgIGNvbnN0IGl0ZW1Db21wb25lbnQgPSBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoXG4gICAgICB0aGlzLml0ZW0uY29tcG9uZW50IHx8IFwic3ZjLXRvb2xib3gtaXRlbVwiLFxuICAgICAge1xuICAgICAgICBpdGVtOiB0aGlzLml0ZW0sXG4gICAgICAgIGNyZWF0b3I6IHRoaXMuY3JlYXRvcixcbiAgICAgICAgaXNDb21wYWN0OiB0aGlzLmlzQ29tcGFjdFxuICAgICAgfVxuICAgICk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWV9IGtleT17aXRlbS5pZH1cbiAgICAgICAgb25Qb2ludGVyRG93bj17KGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICBldmVudC5wZXJzaXN0KCk7XG4gICAgICAgICAgdGhpcy5tb2RlbC5vblBvaW50ZXJEb3duKGV2ZW50KTtcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdi1hY3Rpb25fX2NvbnRlbnRcIj5cbiAgICAgICAgICB7KHRoaXMuaXNDb21wYWN0ICYmIGl0ZW0ubmVlZFNlcGFyYXRvcikgPyAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy10b29sYm94X19jYXRlZ29yeS1zZXBhcmF0b3JcIj48L2Rpdj5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICB7aXRlbUNvbXBvbmVudH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlDcmVhdG9yVG9vbGJveEl0ZW0gZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxcbiAgSVN1cnZleUNyZWF0b3JUb29sYm94SXRlbVByb3BzLFxuICBhbnlcbj4ge1xuICBtb2RlbDogVG9vbGJveFRvb2xWaWV3TW9kZWw7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIGNvbnN0IHRvb2xib3hJdGVtOiBJUXVlc3Rpb25Ub29sYm94SXRlbSA9IHRoaXMucHJvcHMuaXRlbTtcbiAgICB0aGlzLm1vZGVsID0gbmV3IFRvb2xib3hUb29sVmlld01vZGVsKHRvb2xib3hJdGVtLCB0aGlzLnByb3BzLmNyZWF0b3IpO1xuICB9XG4gIHB1YmxpYyBnZXQgaXRlbSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtO1xuICB9XG4gIHB1YmxpYyBnZXQgY3JlYXRvcigpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jcmVhdG9yO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBjbGFzc05hbWUgPVxuICAgICAgXCJzdmMtdG9vbGJveF9faXRlbSBzdmMtdG9vbGJveF9faXRlbS0tXCIgKyB0aGlzLml0ZW0uaWNvbk5hbWU7XG4gICAgcmV0dXJuIGF0dGFjaEtleTJjbGljayhcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICAgIHRhYkluZGV4PXswfVxuICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgYXJpYS1sYWJlbD17XG4gICAgICAgICAgdGhpcy5pdGVtLnRvb2x0aXAgK1xuICAgICAgICAgIFwiIFwiICtcbiAgICAgICAgICBlZGl0b3JMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwidG9vbGJveFwiKSArXG4gICAgICAgICAgXCIgaXRlbVwiXG4gICAgICAgIH1cbiAgICAgICAgb25DbGljaz17KGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICBldmVudC5wZXJzaXN0KCk7XG4gICAgICAgICAgdGhpcy5tb2RlbC5jbGljayhldmVudCk7XG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy10b29sYm94X19pdGVtLWNvbnRhaW5lclwiPlxuICAgICAgICAgIDxTdmdJY29uIHNpemU9ezI0fSBpY29uTmFtZT17dGhpcy5pdGVtLmljb25OYW1lfT48L1N2Z0ljb24+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgeyh0aGlzLnByb3BzLmlzQ29tcGFjdCA/XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXRvb2xib3hfX2l0ZW0tYmFubmVyIHN2Yy1pdGVtX19iYW5uZXJcIj5cbiAgICAgICAgICAgIDxTdmdJY29uIHNpemU9ezI0fSBpY29uTmFtZT17dGhpcy5pdGVtLmljb25OYW1lfSBjbGFzc05hbWU9XCJzdmMtdG9vbGJveF9faXRlbS1pY29uXCI+PC9TdmdJY29uPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXRvb2xib3hfX2l0ZW0tdGl0bGVcIj57dGhpcy5pdGVtLnRpdGxlfTwvc3Bhbj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgOlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy10b29sYm94X19pdGVtLXRpdGxlXCI+e3RoaXMuaXRlbS50aXRsZX08L3NwYW4+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3ZjLXRvb2xib3gtaXRlbVwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5Q3JlYXRvclRvb2xib3hJdGVtLCBwcm9wcyk7XG59KTtcbiIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9yZWFjdF9fOyIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9yZWFjdF9kb21fXzsiLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfc3VydmV5X2NvcmVfXzsiLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfc3VydmV5X2NyZWF0b3JfY29yZV9fOyIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9zdXJ2ZXlfcmVhY3RfdWlfXzsiXSwic291cmNlUm9vdCI6IiJ9