survey-react-ui 1.9.20 → 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.
- package/package.json +1 -1
- package/survey-react-ui.d.ts +16 -9
- package/survey-react-ui.js +77 -37
- package/survey-react-ui.min.js +2 -2
package/survey-react-ui.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* surveyjs - Survey JavaScript library v1.9.
|
|
2
|
+
* surveyjs - Survey JavaScript library v1.9.21
|
|
3
3
|
* Copyright (c) 2015-2022 Devsoft Baltic OÜ - http://surveyjs.io/
|
|
4
4
|
* License: MIT (http://www.opensource.org/licenses/mit-license.php)
|
|
5
5
|
*/
|
|
@@ -864,9 +864,11 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
864
864
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyActionBarItemDropdown", function() { return SurveyActionBarItemDropdown; });
|
|
865
865
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
|
|
866
866
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
|
|
867
|
-
/* harmony import */ var
|
|
868
|
-
/* harmony import */ var
|
|
869
|
-
/* harmony import */ var
|
|
867
|
+
/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! survey-core */ "survey-core");
|
|
868
|
+
/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(survey_core__WEBPACK_IMPORTED_MODULE_1__);
|
|
869
|
+
/* harmony import */ var _element_factory__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../element-factory */ "./src/react/element-factory.tsx");
|
|
870
|
+
/* harmony import */ var _popup_popup__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../popup/popup */ "./src/react/components/popup/popup.tsx");
|
|
871
|
+
/* harmony import */ var _action_bar_item__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./action-bar-item */ "./src/react/components/action-bar/action-bar-item.tsx");
|
|
870
872
|
var __extends = (undefined && undefined.__extends) || (function () {
|
|
871
873
|
var extendStatics = function (d, b) {
|
|
872
874
|
extendStatics = Object.setPrototypeOf ||
|
|
@@ -886,21 +888,28 @@ var __extends = (undefined && undefined.__extends) || (function () {
|
|
|
886
888
|
|
|
887
889
|
|
|
888
890
|
|
|
891
|
+
|
|
889
892
|
var SurveyActionBarItemDropdown = /** @class */ (function (_super) {
|
|
890
893
|
__extends(SurveyActionBarItemDropdown, _super);
|
|
891
|
-
function SurveyActionBarItemDropdown() {
|
|
892
|
-
|
|
894
|
+
function SurveyActionBarItemDropdown(props) {
|
|
895
|
+
var _this = _super.call(this, props) || this;
|
|
896
|
+
_this.viewModel = new survey_core__WEBPACK_IMPORTED_MODULE_1__["ActionDropdownViewModel"](_this.item);
|
|
897
|
+
return _this;
|
|
893
898
|
}
|
|
894
899
|
SurveyActionBarItemDropdown.prototype.renderButtonContent = function () {
|
|
895
900
|
var buttonContent = _super.prototype.renderButtonContent.call(this);
|
|
896
901
|
return (react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null,
|
|
897
902
|
buttonContent,
|
|
898
|
-
react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(
|
|
903
|
+
react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_popup_popup__WEBPACK_IMPORTED_MODULE_3__["Popup"], { model: this.item.popupModel })));
|
|
904
|
+
};
|
|
905
|
+
SurveyActionBarItemDropdown.prototype.componentWillUnmount = function () {
|
|
906
|
+
_super.prototype.componentWillUnmount.call(this);
|
|
907
|
+
this.viewModel.dispose();
|
|
899
908
|
};
|
|
900
909
|
return SurveyActionBarItemDropdown;
|
|
901
|
-
}(
|
|
910
|
+
}(_action_bar_item__WEBPACK_IMPORTED_MODULE_4__["SurveyActionBarItem"]));
|
|
902
911
|
|
|
903
|
-
|
|
912
|
+
_element_factory__WEBPACK_IMPORTED_MODULE_2__["ReactElementFactory"].Instance.registerElement("sv-action-bar-item-dropdown", function (props) {
|
|
904
913
|
return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(SurveyActionBarItemDropdown, props);
|
|
905
914
|
});
|
|
906
915
|
|
|
@@ -3737,7 +3746,8 @@ var Survey = /** @class */ (function (_super) {
|
|
|
3737
3746
|
if (this.survey.hasLogo) {
|
|
3738
3747
|
customHeader = null;
|
|
3739
3748
|
}
|
|
3740
|
-
var
|
|
3749
|
+
var rootCss = this.survey.getRootCss();
|
|
3750
|
+
var cssClasses = this.rootNodeClassName ? this.rootNodeClassName + " " + rootCss : rootCss;
|
|
3741
3751
|
return (react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("div", { id: this.rootNodeId, ref: this.rootRef, className: cssClasses },
|
|
3742
3752
|
react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("form", { onSubmit: onSubmit },
|
|
3743
3753
|
customHeader,
|
|
@@ -5047,8 +5057,31 @@ var SurveyQuestionCheckbox = /** @class */ (function (_super) {
|
|
|
5047
5057
|
return (react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("fieldset", { role: "presentation", className: this.question.getSelectBaseRootCss(), ref: function (fieldset) { return (_this.control = fieldset); } },
|
|
5048
5058
|
react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("legend", { role: "presentation", className: "sv-hidden" }),
|
|
5049
5059
|
this.question.hasColumns
|
|
5050
|
-
? this.
|
|
5051
|
-
: this.getItems(cssClasses)
|
|
5060
|
+
? this.getColumnedBody(cssClasses)
|
|
5061
|
+
: this.getItems(cssClasses),
|
|
5062
|
+
this.question.hasOther && this.question.isItemSelected(this.question.otherItem) ? this.renderOther() : null));
|
|
5063
|
+
};
|
|
5064
|
+
SurveyQuestionCheckbox.prototype.getHeader = function () {
|
|
5065
|
+
var _this = this;
|
|
5066
|
+
if (this.question.hasHeadItems) {
|
|
5067
|
+
return this.question.headItems.map(function (item, ii) {
|
|
5068
|
+
return _this.renderItem("item_h" + ii, item, false, _this.question.cssClasses, null);
|
|
5069
|
+
});
|
|
5070
|
+
}
|
|
5071
|
+
};
|
|
5072
|
+
SurveyQuestionCheckbox.prototype.getFooter = function () {
|
|
5073
|
+
var _this = this;
|
|
5074
|
+
if (this.question.hasFootItems) {
|
|
5075
|
+
return this.question.footItems.map(function (item, ii) {
|
|
5076
|
+
return _this.renderItem("item_f" + ii, item, false, _this.question.cssClasses, null);
|
|
5077
|
+
});
|
|
5078
|
+
}
|
|
5079
|
+
};
|
|
5080
|
+
SurveyQuestionCheckbox.prototype.getColumnedBody = function (cssClasses) {
|
|
5081
|
+
return (react__WEBPACK_IMPORTED_MODULE_0__["createElement"](react__WEBPACK_IMPORTED_MODULE_0__["Fragment"], null,
|
|
5082
|
+
this.getHeader(),
|
|
5083
|
+
react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("div", { className: cssClasses.rootMultiColumn }, this.getColumns(cssClasses)),
|
|
5084
|
+
this.getFooter()));
|
|
5052
5085
|
};
|
|
5053
5086
|
SurveyQuestionCheckbox.prototype.getColumns = function (cssClasses) {
|
|
5054
5087
|
var _this = this;
|
|
@@ -5076,6 +5109,11 @@ var SurveyQuestionCheckbox = /** @class */ (function (_super) {
|
|
|
5076
5109
|
enumerable: false,
|
|
5077
5110
|
configurable: true
|
|
5078
5111
|
});
|
|
5112
|
+
SurveyQuestionCheckbox.prototype.renderOther = function () {
|
|
5113
|
+
var cssClasses = this.question.cssClasses;
|
|
5114
|
+
return (react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("div", { className: "form-group" },
|
|
5115
|
+
react__WEBPACK_IMPORTED_MODULE_0__["createElement"](_reactquestion_comment__WEBPACK_IMPORTED_MODULE_2__["SurveyQuestionCommentItem"], { question: this.question, otherCss: cssClasses.other, cssClasses: cssClasses, isDisplayMode: this.isDisplayMode })));
|
|
5116
|
+
};
|
|
5079
5117
|
SurveyQuestionCheckbox.prototype.renderItem = function (key, item, isFirst, cssClasses, index) {
|
|
5080
5118
|
var renderedItem = (react__WEBPACK_IMPORTED_MODULE_0__["createElement"](SurveyQuestionCheckboxItem, { key: key, question: this.question, cssClasses: cssClasses, isDisplayMode: this.isDisplayMode, item: item, textStyle: this.textStyle, isFirst: isFirst, index: index }));
|
|
5081
5119
|
var survey = this.question.survey;
|
|
@@ -5170,10 +5208,7 @@ var SurveyQuestionCheckboxItem = /** @class */ (function (_super) {
|
|
|
5170
5208
|
};
|
|
5171
5209
|
SurveyQuestionCheckboxItem.prototype.renderElement = function () {
|
|
5172
5210
|
var isChecked = this.question.isItemSelected(this.item);
|
|
5173
|
-
|
|
5174
|
-
? this.renderOther()
|
|
5175
|
-
: null;
|
|
5176
|
-
return this.renderCheckbox(isChecked, otherItem);
|
|
5211
|
+
return this.renderCheckbox(isChecked, null);
|
|
5177
5212
|
};
|
|
5178
5213
|
Object.defineProperty(SurveyQuestionCheckboxItem.prototype, "inputStyle", {
|
|
5179
5214
|
get: function () {
|
|
@@ -5193,7 +5228,7 @@ var SurveyQuestionCheckboxItem = /** @class */ (function (_super) {
|
|
|
5193
5228
|
var locText = this.item.locText;
|
|
5194
5229
|
return (react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("div", { className: itemClass, role: "presentation" },
|
|
5195
5230
|
react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("label", { className: labelClass, "aria-label": this.question.getAriaItemLabel(this.item) },
|
|
5196
|
-
react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("input", { className: this.cssClasses.itemControl, type: "checkbox", name: this.question.name, value: this.item.value, id: id, style: this.inputStyle, disabled: !this.question.getItemEnabled(this.item), checked: isChecked, onChange: onItemChanged, "aria-describedby": this.question.ariaDescribedBy }),
|
|
5231
|
+
react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("input", { className: this.cssClasses.itemControl, type: "checkbox", name: this.question.name, value: this.item.value != "selectall" ? this.item.value : undefined, id: id, style: this.inputStyle, disabled: !this.question.getItemEnabled(this.item), checked: isChecked, onChange: onItemChanged, "aria-describedby": this.question.ariaDescribedBy }),
|
|
5197
5232
|
this.cssClasses.materialDecorator ?
|
|
5198
5233
|
react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("span", { className: this.cssClasses.materialDecorator }, this.question.itemSvgIcon ?
|
|
5199
5234
|
react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("svg", { className: this.cssClasses.itemDecorator },
|
|
@@ -5203,10 +5238,6 @@ var SurveyQuestionCheckboxItem = /** @class */ (function (_super) {
|
|
|
5203
5238
|
react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("span", { className: this.cssClasses.controlLabel }, text)),
|
|
5204
5239
|
otherItem));
|
|
5205
5240
|
};
|
|
5206
|
-
SurveyQuestionCheckboxItem.prototype.renderOther = function () {
|
|
5207
|
-
return (react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("div", { className: "form-group" },
|
|
5208
|
-
react__WEBPACK_IMPORTED_MODULE_0__["createElement"](_reactquestion_comment__WEBPACK_IMPORTED_MODULE_2__["SurveyQuestionCommentItem"], { question: this.question, otherCss: this.cssClasses.other, cssClasses: this.cssClasses, isDisplayMode: this.isDisplayMode })));
|
|
5209
|
-
};
|
|
5210
5241
|
return SurveyQuestionCheckboxItem;
|
|
5211
5242
|
}(_reactquestion_element__WEBPACK_IMPORTED_MODULE_1__["ReactSurveyElement"]));
|
|
5212
5243
|
|
|
@@ -7247,16 +7278,30 @@ var SurveyQuestionRadiogroup = /** @class */ (function (_super) {
|
|
|
7247
7278
|
}
|
|
7248
7279
|
return (react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("fieldset", { className: this.question.getSelectBaseRootCss(), role: "presentation", ref: function (fieldset) { return (_this.control = fieldset); } },
|
|
7249
7280
|
this.question.hasColumns
|
|
7250
|
-
? this.
|
|
7281
|
+
? this.getColumnedBody(cssClasses)
|
|
7251
7282
|
: this.getItems(cssClasses),
|
|
7283
|
+
this.question.hasOther && this.question.isItemSelected(this.question.otherItem) ? this.renderOther(cssClasses) : null,
|
|
7252
7284
|
clearButton));
|
|
7253
7285
|
};
|
|
7286
|
+
SurveyQuestionRadiogroup.prototype.getFooter = function () {
|
|
7287
|
+
var _this = this;
|
|
7288
|
+
if (this.question.hasFootItems) {
|
|
7289
|
+
return this.question.footItems.map(function (item, ii) {
|
|
7290
|
+
return _this.renderItem("item_f" + ii, item, false, _this.question.cssClasses, null);
|
|
7291
|
+
});
|
|
7292
|
+
}
|
|
7293
|
+
};
|
|
7294
|
+
SurveyQuestionRadiogroup.prototype.getColumnedBody = function (cssClasses) {
|
|
7295
|
+
return (react__WEBPACK_IMPORTED_MODULE_0__["createElement"](react__WEBPACK_IMPORTED_MODULE_0__["Fragment"], null,
|
|
7296
|
+
react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("div", { className: cssClasses.rootMultiColumn }, this.getColumns(cssClasses)),
|
|
7297
|
+
this.getFooter()));
|
|
7298
|
+
};
|
|
7254
7299
|
SurveyQuestionRadiogroup.prototype.getColumns = function (cssClasses) {
|
|
7255
7300
|
var _this = this;
|
|
7256
7301
|
var value = this.getStateValue();
|
|
7257
7302
|
return this.question.columns.map(function (column, ci) {
|
|
7258
7303
|
var items = column.map(function (item, ii) {
|
|
7259
|
-
return _this.renderItem(item, value, cssClasses, "" + ci + ii);
|
|
7304
|
+
return _this.renderItem("item" + ci + ii, item, value, cssClasses, "" + ci + ii);
|
|
7260
7305
|
});
|
|
7261
7306
|
return (react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("div", { key: "column" + ci, className: _this.question.getColumnClass(), role: "presentation" }, items));
|
|
7262
7307
|
});
|
|
@@ -7266,7 +7311,7 @@ var SurveyQuestionRadiogroup = /** @class */ (function (_super) {
|
|
|
7266
7311
|
var value = this.getStateValue();
|
|
7267
7312
|
for (var i = 0; i < this.question.visibleChoices.length; i++) {
|
|
7268
7313
|
var item = this.question.visibleChoices[i];
|
|
7269
|
-
var renderedItem = this.renderItem(item, value, cssClasses, "" + i);
|
|
7314
|
+
var renderedItem = this.renderItem("item" + i, item, value, cssClasses, "" + i);
|
|
7270
7315
|
items.push(renderedItem);
|
|
7271
7316
|
}
|
|
7272
7317
|
return items;
|
|
@@ -7278,8 +7323,11 @@ var SurveyQuestionRadiogroup = /** @class */ (function (_super) {
|
|
|
7278
7323
|
enumerable: false,
|
|
7279
7324
|
configurable: true
|
|
7280
7325
|
});
|
|
7281
|
-
SurveyQuestionRadiogroup.prototype.
|
|
7282
|
-
|
|
7326
|
+
SurveyQuestionRadiogroup.prototype.renderOther = function (cssClasses) {
|
|
7327
|
+
return (react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("div", { className: "form-group" },
|
|
7328
|
+
react__WEBPACK_IMPORTED_MODULE_0__["createElement"](_reactquestion_comment__WEBPACK_IMPORTED_MODULE_2__["SurveyQuestionCommentItem"], { question: this.question, otherCss: cssClasses.other, cssClasses: cssClasses, isDisplayMode: this.isDisplayMode })));
|
|
7329
|
+
};
|
|
7330
|
+
SurveyQuestionRadiogroup.prototype.renderItem = function (key, item, value, cssClasses, index) {
|
|
7283
7331
|
var renderedItem = (react__WEBPACK_IMPORTED_MODULE_0__["createElement"](SurveyQuestionRadioItem, { key: key, question: this.question, cssClasses: cssClasses, isDisplayMode: this.isDisplayMode, item: item, textStyle: this.textStyle, index: index, isChecked: value === item.value }));
|
|
7284
7332
|
var survey = this.question.survey;
|
|
7285
7333
|
var wrappedItem = null;
|
|
@@ -7361,9 +7409,6 @@ var SurveyQuestionRadioItem = /** @class */ (function (_super) {
|
|
|
7361
7409
|
return !!this.question && !!this.item;
|
|
7362
7410
|
};
|
|
7363
7411
|
SurveyQuestionRadioItem.prototype.renderElement = function () {
|
|
7364
|
-
var otherItem = this.question.isOtherItem(this.item) && this.question.isOtherSelected
|
|
7365
|
-
? this.renderOther(this.cssClasses)
|
|
7366
|
-
: null;
|
|
7367
7412
|
var itemText = !this.hideCaption
|
|
7368
7413
|
? this.renderLocString(this.item.locText, this.textStyle)
|
|
7369
7414
|
: "";
|
|
@@ -7380,12 +7425,7 @@ var SurveyQuestionRadioItem = /** @class */ (function (_super) {
|
|
|
7380
7425
|
react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("use", { xlinkHref: this.question.itemSvgIcon })) :
|
|
7381
7426
|
null) :
|
|
7382
7427
|
null,
|
|
7383
|
-
react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("span", { className: controlLabelClass }, itemText))
|
|
7384
|
-
otherItem));
|
|
7385
|
-
};
|
|
7386
|
-
SurveyQuestionRadioItem.prototype.renderOther = function (cssClasses) {
|
|
7387
|
-
return (react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("div", { className: "form-group" },
|
|
7388
|
-
react__WEBPACK_IMPORTED_MODULE_0__["createElement"](_reactquestion_comment__WEBPACK_IMPORTED_MODULE_2__["SurveyQuestionCommentItem"], { question: this.question, otherCss: cssClasses.other, cssClasses: cssClasses, isDisplayMode: this.isDisplayMode })));
|
|
7428
|
+
react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("span", { className: controlLabelClass }, itemText))));
|
|
7389
7429
|
};
|
|
7390
7430
|
return SurveyQuestionRadioItem;
|
|
7391
7431
|
}(_reactquestion_element__WEBPACK_IMPORTED_MODULE_1__["ReactSurveyElement"]));
|
|
@@ -7891,7 +7931,7 @@ var SurveyTimerPanel = /** @class */ (function (_super) {
|
|
|
7891
7931
|
configurable: true
|
|
7892
7932
|
});
|
|
7893
7933
|
SurveyTimerPanel.prototype.render = function () {
|
|
7894
|
-
return react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("div",
|
|
7934
|
+
return react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("div", { className: this.timerModel.survey.getCss().timerRoot }, this.timerModel.text);
|
|
7895
7935
|
};
|
|
7896
7936
|
return SurveyTimerPanel;
|
|
7897
7937
|
}(_reactquestion_element__WEBPACK_IMPORTED_MODULE_1__["ReactSurveyElement"]));
|
|
@@ -8939,4 +8979,4 @@ module.exports = __WEBPACK_EXTERNAL_MODULE_survey_core__;
|
|
|
8939
8979
|
|
|
8940
8980
|
/******/ });
|
|
8941
8981
|
});
|
|
8942
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC93ZWJwYWNrL3VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3Qvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvZW50cmllcy9jb3JlLWV4cG9ydC50cyIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9lbnRyaWVzL3JlYWN0LXVpLW1vZGVsLnRzIiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL2VudHJpZXMvcmVhY3QtdWkudHMiLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvYm9vbGVhbi1jaGVja2JveC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvYm9vbGVhbi1yYWRpby50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvYm9vbGVhbi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXItaXRlbS1kcm9wZG93bi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXItaXRlbS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXItc2VwYXJhdG9yLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLWJhci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9saXN0L2xpc3QtaXRlbS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9saXN0L2xpc3QudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2NvbXBvbmVudHMvbWF0cml4LWFjdGlvbnMvZGV0YWlsLWJ1dHRvbi9kZXRhaWwtYnV0dG9uLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9jb21wb25lbnRzL21hdHJpeC1hY3Rpb25zL2RyYWctZHJvcC1pY29uL2RyYWctZHJvcC1pY29uLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9jb21wb25lbnRzL21hdHJpeC1hY3Rpb25zL3JlbW92ZS1idXR0b24vcmVtb3ZlLWJ1dHRvbi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9tYXRyaXgvcm93LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9jb21wb25lbnRzL3BhbmVsZHluYW1pYy1hY3Rpb25zL3BhbmVsZHluYW1pYy1hZGQtYnRuLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9jb21wb25lbnRzL3BhbmVsZHluYW1pYy1hY3Rpb25zL3BhbmVsZHluYW1pYy1uZXh0LWJ0bi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9wYW5lbGR5bmFtaWMtYWN0aW9ucy9wYW5lbGR5bmFtaWMtcHJldi1idG4udHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2NvbXBvbmVudHMvcGFuZWxkeW5hbWljLWFjdGlvbnMvcGFuZWxkeW5hbWljLXByb2dyZXNzLXRleHQudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2NvbXBvbmVudHMvcG9wdXAvcG9wdXAudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2NvbXBvbmVudHMvc2tlbGV0b24udHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2NvbXBvbmVudHMvc3VydmV5LWhlYWRlci9sb2dvLWltYWdlLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9jb21wb25lbnRzL3N1cnZleS1oZWFkZXIvc3VydmV5LWhlYWRlci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9zdmctaWNvbi9zdmctaWNvbi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy90aXRsZS9kZWZhdWx0LXRpdGxlLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9jb21wb25lbnRzL3RpdGxlL3RpdGxlLWFjdGlvbnMudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2NvbXBvbmVudHMvdGl0bGUvdGl0bGUtY29udGVudC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy90aXRsZS90aXRsZS1lbGVtZW50LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9jdXN0b20td2lkZ2V0LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9lbGVtZW50LWZhY3RvcnkudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2Zsb3ctcGFuZWwudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2ltYWdlLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9pbWFnZXBpY2tlci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcGFnZS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcGFuZWwtYmFzZS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcGFuZWwudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JhdGluZy1kcm9wZG93bi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RTdXJ2ZXkudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0U3VydmV5TmF2aWdhdGlvbi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RTdXJ2ZXlOYXZpZ2F0aW9uQmFzZS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RTdXJ2ZXlQcm9ncmVzcy50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RTdXJ2ZXlQcm9ncmVzc0J1dHRvbnMudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0U3VydmV5V2luZG93LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uX2J1dHRvbmdyb3VwLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uX2NoZWNrYm94LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uX2NvbW1lbnQudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fY3VzdG9tLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uX2Ryb3Bkb3duLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uX2VsZW1lbnQudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fZW1wdHkudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fZXhwcmVzc2lvbi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbl9mYWN0b3J5LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uX2ZpbGUudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25faHRtbC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbl9tYXRyaXgudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fbWF0cml4ZHJvcGRvd24udHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fbWF0cml4ZHJvcGRvd25iYXNlLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uX21hdHJpeGR5bmFtaWMudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fbXVsdGlwbGV0ZXh0LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uX3BhbmVsZHluYW1pYy50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbl9yYWRpb2dyb3VwLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uX3JhbmtpbmcudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fcmF0aW5nLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uX3RleHQudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0c3VydmV5bW9kZWwudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0dGltZXJwYW5lbC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3Qvcm93LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9zaWduYXR1cmVwYWQudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3N0cmluZy1lZGl0b3IudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3N0cmluZy12aWV3ZXIudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3NldHRpbmdzLnRzIiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3V0aWxzL3Jlc3BvbnNpdml0eS1tYW5hZ2VyLnRzIiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3V0aWxzL3V0aWxzLnRzIiwid2VicGFjazovL1N1cnZleVJlYWN0L2V4dGVybmFsIHtcInJvb3RcIjpcIlJlYWN0XCIsXCJjb21tb25qczJcIjpcInJlYWN0XCIsXCJjb21tb25qc1wiOlwicmVhY3RcIixcImFtZFwiOlwicmVhY3RcIn0iLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvZXh0ZXJuYWwge1wicm9vdFwiOlwiUmVhY3RET01cIixcImNvbW1vbmpzMlwiOlwicmVhY3QtZG9tXCIsXCJjb21tb25qc1wiOlwicmVhY3QtZG9tXCIsXCJhbWRcIjpcInJlYWN0LWRvbVwifSIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC9leHRlcm5hbCB7XCJyb290XCI6XCJTdXJ2ZXlcIixcImNvbW1vbmpzMlwiOlwic3VydmV5LWNvcmVcIixcImNvbW1vbmpzXCI6XCJzdXJ2ZXktY29yZVwiLFwiYW1kXCI6XCJzdXJ2ZXktY29yZVwifSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxPO1FDVkE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7OztRQUdBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwwQ0FBMEMsZ0NBQWdDO1FBQzFFO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0Esd0RBQXdELGtCQUFrQjtRQUMxRTtRQUNBLGlEQUFpRCxjQUFjO1FBQy9EOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSx5Q0FBeUMsaUNBQWlDO1FBQzFFLGdIQUFnSCxtQkFBbUIsRUFBRTtRQUNySTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDJCQUEyQiwwQkFBMEIsRUFBRTtRQUN2RCxpQ0FBaUMsZUFBZTtRQUNoRDtRQUNBO1FBQ0E7O1FBRUE7UUFDQSxzREFBc0QsK0RBQStEOztRQUVySDtRQUNBOzs7UUFHQTtRQUNBOzs7Ozs7Ozs7Ozs7O0FDbEZBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFvRTtBQUM3QjtBQUN5Qjs7Ozs7Ozs7Ozs7OztBQ0ZoRTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUFRO0FBQ3VEO0FBQ1E7QUFDRztBQUNkO0FBQ007QUFDdkI7QUFDRjtBQUNJO0FBQ1M7QUFLdEI7QUFJUTtBQUlBO0FBSUM7QUFJRDtBQUNpQztBQUlsQztBQUMwQjtBQUNBO0FBQ2dCO0FBQ0o7QUFDWjtBQUNSO0FBQ2lCO0FB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QUFjLEVBQUUsQ0FBQztLQUN0QjtBQUNILENBQUM7QUFDRCxTQUFTLHVCQUF1QixDQUFDLE9BQW9CLEVBQUUsZ0JBQXdDO0lBQzdGLElBQUksQ0FBQyxPQUFPO1FBQUUsT0FBTztJQUNyQixJQUFJLENBQUMsZ0JBQWdCO1FBQUUsZ0JBQWdCLEdBQUcsVUFBQyxHQUFZLElBQU8sT0FBTyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFckcsSUFBTSxLQUFLLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDeEMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0lBQzlCLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsT0FBTyxDQUFDLFlBQVksR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoSSxDQUFDO0FBQ0QsU0FBUyxnQkFBZ0IsQ0FBQyxLQUFVO0lBQ2xDLE9BQU8sS0FBSyxDQUFDLGFBQWEsSUFBSSxLQUFLLENBQUM7QUFDdEMsQ0FBQztBQUNELFNBQVMsZUFBZSxDQUFDLEtBQVU7SUFDakMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3ZCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztBQUMxQixDQUFDO0FBb0JDOzs7Ozs7Ozs7Ozs7QUN2UEYsbUQ7Ozs7Ozs7Ozs7O0FDQUEsdUQ7Ozs7Ozs7Ozs7O0FDQUEseUQiLCJmaWxlIjoic3VydmV5LXJlYWN0LXVpLmpzIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwicmVhY3RcIiksIHJlcXVpcmUoXCJyZWFjdC1kb21cIiksIHJlcXVpcmUoXCJzdXJ2ZXktY29yZVwiKSk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShcInN1cnZleS1yZWFjdC11aVwiLCBbXCJyZWFjdFwiLCBcInJlYWN0LWRvbVwiLCBcInN1cnZleS1jb3JlXCJdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcInN1cnZleS1yZWFjdC11aVwiXSA9IGZhY3RvcnkocmVxdWlyZShcInJlYWN0XCIpLCByZXF1aXJlKFwicmVhY3QtZG9tXCIpLCByZXF1aXJlKFwic3VydmV5LWNvcmVcIikpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIlN1cnZleVJlYWN0XCJdID0gZmFjdG9yeShyb290W1wiUmVhY3RcIl0sIHJvb3RbXCJSZWFjdERPTVwiXSwgcm9vdFtcIlN1cnZleVwiXSk7XG59KSh0aGlzLCBmdW5jdGlvbihfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX3JlYWN0X18sIF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfcmVhY3RfZG9tX18sIF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfc3VydmV5X2NvcmVfXykge1xucmV0dXJuICIsIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSBcIi4vc3JjL2VudHJpZXMvcmVhY3QtdWkudHNcIik7XG4iLCJleHBvcnQgeyBTdXJ2ZXlNb2RlbCwgTW9kZWwsIFN1cnZleVdpbmRvd01vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5leHBvcnQgeyBzZXR0aW5ncyB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuZXhwb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uLCBzdXJ2ZXlTdHJpbmdzIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG4iLCIvLyByZWFjdFxuZXhwb3J0IHsgU3VydmV5LCBhdHRhY2hLZXkyY2xpY2sgfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RTdXJ2ZXlcIjtcbmV4cG9ydCB7IFJlYWN0U3VydmV5RWxlbWVudHNXcmFwcGVyIH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0c3VydmV5bW9kZWxcIjtcbmV4cG9ydCB7IFN1cnZleU5hdmlnYXRpb25CYXNlIH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0U3VydmV5TmF2aWdhdGlvbkJhc2VcIjtcbmV4cG9ydCB7IFN1cnZleVRpbWVyUGFuZWwgfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3R0aW1lcnBhbmVsXCI7XG5leHBvcnQgeyBTdXJ2ZXlOYXZpZ2F0aW9uIH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0U3VydmV5TmF2aWdhdGlvblwiO1xuZXhwb3J0IHsgU3VydmV5UGFnZSB9IGZyb20gXCIuLi9yZWFjdC9wYWdlXCI7XG5leHBvcnQgeyBTdXJ2ZXlSb3cgfSBmcm9tIFwiLi4vcmVhY3Qvcm93XCI7XG5leHBvcnQgeyBTdXJ2ZXlQYW5lbCB9IGZyb20gXCIuLi9yZWFjdC9wYW5lbFwiO1xuZXhwb3J0IHsgU3VydmV5Rmxvd1BhbmVsIH0gZnJvbSBcIi4uL3JlYWN0L2Zsb3ctcGFuZWxcIjtcbmV4cG9ydCB7XG4gIFN1cnZleVF1ZXN0aW9uLFxuICBTdXJ2ZXlFbGVtZW50RXJyb3JzLFxuICBTdXJ2ZXlRdWVzdGlvbkFuZEVycm9yc0NlbGwsXG59IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uXCI7XG5leHBvcnQge1xuICBTdXJ2ZXlFbGVtZW50QmFzZSxcbiAgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSxcbn0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuZXhwb3J0IHtcbiAgU3VydmV5UXVlc3Rpb25Db21tZW50SXRlbSxcbiAgU3VydmV5UXVlc3Rpb25Db21tZW50LFxufSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbl9jb21tZW50XCI7XG5leHBvcnQge1xuICBTdXJ2ZXlRdWVzdGlvbkNoZWNrYm94LFxuICBTdXJ2ZXlRdWVzdGlvbkNoZWNrYm94SXRlbSxcbn0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25fY2hlY2tib3hcIjtcbmV4cG9ydCB7XG4gIFN1cnZleVF1ZXN0aW9uUmFua2luZyxcbiAgU3VydmV5UXVlc3Rpb25SYW5raW5nSXRlbSxcbn0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25fcmFua2luZ1wiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25Ecm9wZG93biB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX2Ryb3Bkb3duXCI7XG5leHBvcnQge1xuICBTdXJ2ZXlRdWVzdGlvbk1hdHJpeCxcbiAgU3VydmV5UXVlc3Rpb25NYXRyaXhSb3csXG59IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX21hdHJpeFwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25IdG1sIH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25faHRtbFwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25GaWxlIH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25fZmlsZVwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25NdWx0aXBsZVRleHQgfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbl9tdWx0aXBsZXRleHRcIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uUmFkaW9ncm91cCB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX3JhZGlvZ3JvdXBcIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uVGV4dCB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX3RleHRcIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uQm9vbGVhbiB9IGZyb20gXCIuLi9yZWFjdC9ib29sZWFuXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkJvb2xlYW5DaGVja2JveCB9IGZyb20gXCIuLi9yZWFjdC9ib29sZWFuLWNoZWNrYm94XCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkJvb2xlYW5SYWRpbyB9IGZyb20gXCIuLi9yZWFjdC9ib29sZWFuLXJhZGlvXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkVtcHR5IH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25fZW1wdHlcIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uTWF0cml4RHJvcGRvd25DZWxsIH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25fbWF0cml4ZHJvcGRvd25iYXNlXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbk1hdHJpeERyb3Bkb3duIH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25fbWF0cml4ZHJvcGRvd25cIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pYyB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX21hdHJpeGR5bmFtaWNcIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljIH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25fcGFuZWxkeW5hbWljXCI7XG5leHBvcnQgeyBTdXJ2ZXlQcm9ncmVzcyB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdFN1cnZleVByb2dyZXNzXCI7XG5leHBvcnQgeyBTdXJ2ZXlQcm9ncmVzc0J1dHRvbnMgfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RTdXJ2ZXlQcm9ncmVzc0J1dHRvbnNcIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uUmF0aW5nIH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25fcmF0aW5nXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvblJhdGluZ0Ryb3Bkb3duIH0gZnJvbSBcIi4uL3JlYWN0L3JhdGluZy1kcm9wZG93blwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25FeHByZXNzaW9uIH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25fZXhwcmVzc2lvblwiO1xuZXhwb3J0IHsgU3VydmV5V2luZG93IH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0U3VydmV5V2luZG93XCI7XG5leHBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcbmV4cG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vcmVhY3QvZWxlbWVudC1mYWN0b3J5XCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkltYWdlUGlja2VyIH0gZnJvbSBcIi4uL3JlYWN0L2ltYWdlcGlja2VyXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkltYWdlIH0gZnJvbSBcIi4uL3JlYWN0L2ltYWdlXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvblNpZ25hdHVyZVBhZCB9IGZyb20gXCIuLi9yZWFjdC9zaWduYXR1cmVwYWRcIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uQnV0dG9uR3JvdXAgfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbl9idXR0b25ncm91cFwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25DdXN0b20sIFN1cnZleVF1ZXN0aW9uQ29tcG9zaXRlIH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25fY3VzdG9tXCI7XG5cbmV4cG9ydCB7IERlZmF1bHRUaXRsZSB9IGZyb20gXCIuLi9yZWFjdC9jb21wb25lbnRzL3RpdGxlL2RlZmF1bHQtdGl0bGVcIjtcbmV4cG9ydCB7IFBvcHVwIH0gZnJvbSBcIi4uL3JlYWN0L2NvbXBvbmVudHMvcG9wdXAvcG9wdXBcIjtcbmV4cG9ydCB7IExpc3QgfSBmcm9tIFwiLi4vcmVhY3QvY29tcG9uZW50cy9saXN0L2xpc3RcIjtcbmV4cG9ydCB7IFRpdGxlQWN0aW9ucyB9IGZyb20gXCIuLi9yZWFjdC9jb21wb25lbnRzL3RpdGxlL3RpdGxlLWFjdGlvbnNcIjtcbmV4cG9ydCB7IFRpdGxlRWxlbWVudCB9IGZyb20gXCIuLi9yZWFjdC9jb21wb25lbnRzL3RpdGxlL3RpdGxlLWVsZW1lbnRcIjtcbmV4cG9ydCB7IFN1cnZleUFjdGlvbkJhciB9IGZyb20gXCIuLi9yZWFjdC9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLWJhclwiO1xuZXhwb3J0IHsgTG9nb0ltYWdlIH0gZnJvbSBcIi4uL3JlYWN0L2NvbXBvbmVudHMvc3VydmV5LWhlYWRlci9sb2dvLWltYWdlXCI7XG5leHBvcnQgeyBTdXJ2ZXlIZWFkZXIgfSBmcm9tIFwiLi4vcmVhY3QvY29tcG9uZW50cy9zdXJ2ZXktaGVhZGVyL3N1cnZleS1oZWFkZXJcIjtcbmV4cG9ydCB7IFN2Z0ljb24gfSBmcm9tIFwiLi4vcmVhY3QvY29tcG9uZW50cy9zdmctaWNvbi9zdmctaWNvblwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljUmVtb3ZlQnV0dG9uIH0gZnJvbSBcIi4uL3JlYWN0L2NvbXBvbmVudHMvbWF0cml4LWFjdGlvbnMvcmVtb3ZlLWJ1dHRvbi9yZW1vdmUtYnV0dG9uXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbk1hdHJpeERldGFpbEJ1dHRvbiB9IGZyb20gXCIuLi9yZWFjdC9jb21wb25lbnRzL21hdHJpeC1hY3Rpb25zL2RldGFpbC1idXR0b24vZGV0YWlsLWJ1dHRvblwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljRHJhZ0Ryb3BJY29uIH0gZnJvbSBcIi4uL3JlYWN0L2NvbXBvbmVudHMvbWF0cml4LWFjdGlvbnMvZHJhZy1kcm9wLWljb24vZHJhZy1kcm9wLWljb25cIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljQWRkQnV0dG9uIH0gZnJvbSBcIi4uL3JlYWN0L2NvbXBvbmVudHMvcGFuZWxkeW5hbWljLWFjdGlvbnMvcGFuZWxkeW5hbWljLWFkZC1idG5cIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljUHJldkJ1dHRvbiB9IGZyb20gXCIuLi9yZWFjdC9jb21wb25lbnRzL3BhbmVsZHluYW1pYy1hY3Rpb25zL3BhbmVsZHluYW1pYy1wcmV2LWJ0blwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNOZXh0QnV0dG9uIH0gZnJvbSBcIi4uL3JlYWN0L2NvbXBvbmVudHMvcGFuZWxkeW5hbWljLWFjdGlvbnMvcGFuZWxkeW5hbWljLW5leHQtYnRuXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dCB9IGZyb20gXCIuLi9yZWFjdC9jb21wb25lbnRzL3BhbmVsZHluYW1pYy1hY3Rpb25zL3BhbmVsZHluYW1pYy1wcm9ncmVzcy10ZXh0XCI7XG5cbmV4cG9ydCB7IE1hdHJpeFJvdyB9IGZyb20gXCIuLi9yZWFjdC9jb21wb25lbnRzL21hdHJpeC9yb3dcIjtcbmV4cG9ydCB7IFNrZWxldG9uIH0gZnJvbSBcIi4uL3JlYWN0L2NvbXBvbmVudHMvc2tlbGV0b25cIjtcblxuZXhwb3J0IHsgU3VydmV5TG9jU3RyaW5nVmlld2VyIH0gZnJvbSBcIi4uL3JlYWN0L3N0cmluZy12aWV3ZXJcIjtcbmV4cG9ydCB7IFN1cnZleUxvY1N0cmluZ0VkaXRvciB9IGZyb20gXCIuLi9yZWFjdC9zdHJpbmctZWRpdG9yXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vdXRpbHMvcmVzcG9uc2l2aXR5LW1hbmFnZXJcIjtcbmV4cG9ydCB7IHVud3JhcCB9IGZyb20gXCIuLi91dGlscy91dGlsc1wiO1xuXG4vL1VuY29tbWVudCB0byBpbmNsdWRlIHRoZSBcImRhdGVcIiBxdWVzdGlvbiB0eXBlLlxuLy9leHBvcnQge2RlZmF1bHQgYXMgU3VydmV5UXVlc3Rpb25EYXRlfSBmcm9tIFwiLi4vcGx1Z2lucy9yZWFjdC9yZWFjdHF1ZXN0aW9uZGF0ZVwiO1xuIiwiZXhwb3J0ICogZnJvbSBcIi4vcmVhY3QtdWktbW9kZWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvcmUtZXhwb3J0XCI7IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSZW5kZXJlckZhY3RvcnkgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkJvb2xlYW4gfSBmcm9tIFwiLi9ib29sZWFuXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkJvb2xlYW5DaGVja2JveCBleHRlbmRzIFN1cnZleVF1ZXN0aW9uQm9vbGVhbiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGNzc0NsYXNzZXMgPSB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgY29uc3QgaXRlbUNsYXNzID0gdGhpcy5xdWVzdGlvbi5nZXRJdGVtQ3NzKCk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLnJvb3R9PlxuICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPXtpdGVtQ2xhc3N9IG9uQ2xpY2s9e3RoaXMuaGFuZGxlT25DbGlja30+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICByZWY9e3RoaXMuY2hlY2tSZWZ9XG4gICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgbmFtZT17dGhpcy5xdWVzdGlvbi5uYW1lfVxuICAgICAgICAgICAgdmFsdWU9e1xuICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9uLmNoZWNrZWRWYWx1ZSA9PT0gbnVsbFxuICAgICAgICAgICAgICAgID8gXCJcIlxuICAgICAgICAgICAgICAgIDogdGhpcy5xdWVzdGlvbi5jaGVja2VkVmFsdWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlkPXt0aGlzLnF1ZXN0aW9uLmlucHV0SWR9XG4gICAgICAgICAgICBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuY29udHJvbH1cbiAgICAgICAgICAgIGRpc2FibGVkPXt0aGlzLmlzRGlzcGxheU1vZGV9XG4gICAgICAgICAgICBjaGVja2VkPXt0aGlzLnF1ZXN0aW9uLmNoZWNrZWRWYWx1ZSB8fCBmYWxzZX1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZU9uQ2hhbmdlfVxuICAgICAgICAgICAgYXJpYS1yZXF1aXJlZD17dGhpcy5xdWVzdGlvbi5hcmlhUmVxdWlyZWR9XG4gICAgICAgICAgICBhcmlhLWxhYmVsPXt0aGlzLnF1ZXN0aW9uLmFyaWFMYWJlbH1cbiAgICAgICAgICAgIGFyaWEtaW52YWxpZD17dGhpcy5xdWVzdGlvbi5hcmlhSW52YWxpZH1cbiAgICAgICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9e3RoaXMucXVlc3Rpb24uYXJpYURlc2NyaWJlZEJ5fVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtjc3NDbGFzc2VzLm1hdGVyaWFsRGVjb3JhdG9yfT5cbiAgICAgICAgICAgIHsgdGhpcy5xdWVzdGlvbi5zdmdJY29uID9cbiAgICAgICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5pdGVtRGVjb3JhdG9yfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHVzZSB4bGlua0hyZWY9e3RoaXMucXVlc3Rpb24uc3ZnSWNvbn0+PC91c2U+XG4gICAgICAgICAgICAgIDwvc3ZnPjpcbiAgICAgICAgICAgICAgPHN2ZyB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLml0ZW1EZWNvcmF0b3J9PlxuICAgICAgICAgICAgICAgIDxyZWN0XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Nzc0NsYXNzZXMudW5jaGVja2VkUGF0aH1cbiAgICAgICAgICAgICAgICAgIHg9XCI1XCJcbiAgICAgICAgICAgICAgICAgIHk9XCIxMFwiXG4gICAgICAgICAgICAgICAgICB3aWR0aD1cIjE0XCJcbiAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjRcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPHBvbHlnb25cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5jaGVja2VkUGF0aH1cbiAgICAgICAgICAgICAgICAgIHBvaW50cz1cIjE5LDEwIDE0LDEwIDE0LDUgMTAsNSAxMCwxMCA1LDEwIDUsMTQgMTAsMTQgMTAsMTkgMTQsMTkgMTQsMTQgMTksMTQgXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuaW5kZXRlcm1pbmF0ZVBhdGh9XG4gICAgICAgICAgICAgICAgICBkPVwiTTIyLDBIMkMwLjksMCwwLDAuOSwwLDJ2MjBjMCwxLjEsMC45LDIsMiwyaDIwYzEuMSwwLDItMC45LDItMlYyQzI0LDAuOSwyMy4xLDAsMjIsMHogTTIxLDE4TDYsM2gxNVYxOHogTTMsNmwxNSwxNUgzVjZ6XCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImNoZWNrXCIgLz5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAge3RoaXMucXVlc3Rpb24udGl0bGVMb2NhdGlvbiA9PT0gXCJoaWRkZW5cIiAmJiAoXG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0TGFiZWxDc3MoZmFsc2UpfT5cbiAgICAgICAgICAgICAge3RoaXMucmVuZGVyTG9jU3RyaW5nKHRoaXMucXVlc3Rpb24ubG9jRGlzcGxheUxhYmVsKX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICApfVxuICAgICAgICA8L2xhYmVsPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFxuICBcInN2LWJvb2xlYW4tY2hlY2tib3hcIixcbiAgKHByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25Cb29sZWFuQ2hlY2tib3gsIHByb3BzKTtcbiAgfVxuKTtcblxuUmVuZGVyZXJGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUmVuZGVyZXIoXG4gIFwiYm9vbGVhblwiLFxuICBcImNoZWNrYm94XCIsXG4gIFwic3YtYm9vbGVhbi1jaGVja2JveFwiXG4pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSZW5kZXJlckZhY3RvcnkgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkJvb2xlYW4gfSBmcm9tIFwiLi9ib29sZWFuXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkJvb2xlYW5SYWRpbyBleHRlbmRzIFN1cnZleVF1ZXN0aW9uQm9vbGVhbiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJpdmF0ZSByZW5kZXJSYWRpb0l0ZW0odmFsdWU6IGFueSwgbG9jVGV4dDogYW55KTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGNzc0NsYXNzZXMgPSB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgcm9sZT1cInByZXNlbnRhdGlvblwiIGNsYXNzTmFtZT17IHRoaXMucXVlc3Rpb24uZ2V0UmFkaW9JdGVtQ2xhc3MoY3NzQ2xhc3NlcywgdmFsdWUpIH0+XG4gICAgICAgIDxsYWJlbCBjbGFzc05hbWU9IHsgY3NzQ2xhc3Nlcy5yYWRpb0xhYmVsIH0+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgbmFtZSA9IHsgdGhpcy5xdWVzdGlvbi5uYW1lIH1cbiAgICAgICAgICAgIHZhbHVlID0geyB2YWx1ZSB9XG4gICAgICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5ID0geyB0aGlzLnF1ZXN0aW9uLmFyaWFEZXNjcmliZWRCeSB9XG4gICAgICAgICAgICBjaGVja2VkID0geyB2YWx1ZSA9PT0gdGhpcy5xdWVzdGlvbi52YWx1ZSB9XG4gICAgICAgICAgICBkaXNhYmxlZCA9IHsgdGhpcy5xdWVzdGlvbi5pc0lucHV0UmVhZE9ubHkgfVxuICAgICAgICAgICAgY2xhc3NOYW1lID0geyBjc3NDbGFzc2VzLml0ZW1Db250cm9sIH1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXsgdGhpcy5oYW5kbGVPbkNoYW5nZSB9XG4gICAgICAgICAgLz5cbiAgICAgICAgICB7IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5tYXRlcmlhbFJhZGlvRGVjb3JhdG9yP1xuICAgICAgICAgICAgKDxzcGFuIGNsYXNzTmFtZT17IGNzc0NsYXNzZXMubWF0ZXJpYWxSYWRpb0RlY29yYXRvciB9PlxuICAgICAgICAgICAgICB7IHRoaXMucXVlc3Rpb24uaXRlbVN2Z0ljb24gP1xuICAgICAgICAgICAgICAgICg8c3ZnIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5pdGVtUmFkaW9EZWNvcmF0b3J9PlxuICAgICAgICAgICAgICAgICAgPHVzZSB4bGlua0hyZWY9e3RoaXMucXVlc3Rpb24uaXRlbVN2Z0ljb259PjwvdXNlPlxuICAgICAgICAgICAgICAgIDwvc3ZnPik6bnVsbH1cbiAgICAgICAgICAgIDwvc3Bhbj4pOm51bGx9XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPSB7IGNzc0NsYXNzZXMucmFkaW9Db250cm9sTGFiZWwgfT5cbiAgICAgICAgICAgIHsgdGhpcy5yZW5kZXJMb2NTdHJpbmcobG9jVGV4dCkgfVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgaGFuZGxlT25DaGFuZ2UgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgIHRoaXMucXVlc3Rpb24udmFsdWUgPSBldmVudC5uYXRpdmVFdmVudC50YXJnZXQudmFsdWU7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGNzc0NsYXNzZXMgPSB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLnJvb3RSYWRpb30+XG4gICAgICAgIDxmaWVsZHNldCByb2xlPVwicHJlc2VudGF0aW9uXCIgY2xhc3NOYW1lPSB7IGNzc0NsYXNzZXMucmFkaW9GaWVsZHNldCB9PlxuICAgICAgICAgIHsgdGhpcy5yZW5kZXJSYWRpb0l0ZW0oZmFsc2UsIHRoaXMucXVlc3Rpb24ubG9jTGFiZWxGYWxzZSkgfVxuICAgICAgICAgIHsgdGhpcy5yZW5kZXJSYWRpb0l0ZW0odHJ1ZSwgdGhpcy5xdWVzdGlvbi5sb2NMYWJlbFRydWUpIH1cbiAgICAgICAgPC9maWVsZHNldD5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcbiAgXCJzdi1ib29sZWFuLXJhZGlvXCIsXG4gIChwcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uQm9vbGVhblJhZGlvLCBwcm9wcyk7XG4gIH1cbik7XG5cblJlbmRlcmVyRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclJlbmRlcmVyKFxuICBcImJvb2xlYW5cIixcbiAgXCJyYWRpb1wiLFxuICBcInN2LWJvb2xlYW4tcmFkaW9cIlxuKTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25Cb29sZWFuTW9kZWwsIENzc0NsYXNzQnVpbGRlciwgQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uQm9vbGVhbiBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Uge1xuICBwcm90ZWN0ZWQgY2hlY2tSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MSW5wdXRFbGVtZW50PjtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmhhbmRsZU9uQ2hhbmdlID0gdGhpcy5oYW5kbGVPbkNoYW5nZS5iaW5kKHRoaXMpO1xuICAgIHRoaXMuaGFuZGxlT25DbGljayA9IHRoaXMuaGFuZGxlT25DbGljay5iaW5kKHRoaXMpO1xuICAgIHRoaXMuaGFuZGxlT25MYWJlbENsaWNrID0gdGhpcy5oYW5kbGVPbkxhYmVsQ2xpY2suYmluZCh0aGlzKTtcbiAgICB0aGlzLmhhbmRsZU9uU3dpdGNoQ2xpY2sgPSB0aGlzLmhhbmRsZU9uU3dpdGNoQ2xpY2suYmluZCh0aGlzKTtcbiAgICB0aGlzLmNoZWNrUmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uQm9vbGVhbk1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25Cb29sZWFuTW9kZWw7XG4gIH1cbiAgLypcbiAgcHJpdmF0ZSBnZXQgYWxsb3dDbGljaygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5pc0luZGV0ZXJtaW5hdGUgJiYgIXRoaXMuaXNEaXNwbGF5TW9kZTtcbiAgfVxuICAqL1xuICBwcml2YXRlIGRvQ2hlY2sodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnF1ZXN0aW9uLmNoZWNrZWRWYWx1ZSA9IHZhbHVlO1xuICB9XG4gIGhhbmRsZU9uQ2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmRvQ2hlY2soZXZlbnQudGFyZ2V0LmNoZWNrZWQpO1xuICB9XG4gIGhhbmRsZU9uQ2xpY2soZXZlbnQ6IGFueSkge1xuICAgIHRoaXMucXVlc3Rpb24ub25MYWJlbENsaWNrKGV2ZW50LCB0cnVlKTtcbiAgfVxuICBoYW5kbGVPblN3aXRjaENsaWNrKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnF1ZXN0aW9uLm9uU3dpdGNoQ2xpY2tNb2RlbChldmVudC5uYXRpdmVFdmVudCk7XG4gIH1cbiAgaGFuZGxlT25MYWJlbENsaWNrKGV2ZW50OiBhbnksIHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5xdWVzdGlvbi5vbkxhYmVsQ2xpY2soZXZlbnQsIHZhbHVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB1cGRhdGVEb21FbGVtZW50KCkge1xuICAgIGlmICghdGhpcy5xdWVzdGlvbikgcmV0dXJuO1xuICAgIGNvbnN0IGVsID0gdGhpcy5jaGVja1JlZi5jdXJyZW50O1xuICAgIGlmIChlbCkge1xuICAgICAgZWwuaW5kZXRlcm1pbmF0ZSA9IHRoaXMucXVlc3Rpb24uaXNJbmRldGVybWluYXRlO1xuICAgIH1cbiAgICB0aGlzLmNvbnRyb2wgPSBlbDtcbiAgICBzdXBlci51cGRhdGVEb21FbGVtZW50KCk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGNzc0NsYXNzZXMgPSB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgY29uc3QgaXRlbUNsYXNzOiBzdHJpbmcgPSB0aGlzLnF1ZXN0aW9uLmdldEl0ZW1Dc3MoKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMucm9vdH0+XG4gICAgICAgIDxsYWJlbCBjbGFzc05hbWU9e2l0ZW1DbGFzc30gb25DbGljaz17dGhpcy5oYW5kbGVPbkNsaWNrfT5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHJlZj17dGhpcy5jaGVja1JlZn1cbiAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICBuYW1lPXt0aGlzLnF1ZXN0aW9uLm5hbWV9XG4gICAgICAgICAgICB2YWx1ZT17XG4gICAgICAgICAgICAgIHRoaXMucXVlc3Rpb24uY2hlY2tlZFZhbHVlID09PSBudWxsXG4gICAgICAgICAgICAgICAgPyBcIlwiXG4gICAgICAgICAgICAgICAgOiB0aGlzLnF1ZXN0aW9uLmNoZWNrZWRWYWx1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWQ9e3RoaXMucXVlc3Rpb24uaW5wdXRJZH1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5jb250cm9sfVxuICAgICAgICAgICAgZGlzYWJsZWQ9e3RoaXMuaXNEaXNwbGF5TW9kZX1cbiAgICAgICAgICAgIGNoZWNrZWQ9e3RoaXMucXVlc3Rpb24uY2hlY2tlZFZhbHVlIHx8IGZhbHNlfVxuICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlT25DaGFuZ2V9XG4gICAgICAgICAgICBhcmlhLXJlcXVpcmVkPXt0aGlzLnF1ZXN0aW9uLmFyaWFSZXF1aXJlZH1cbiAgICAgICAgICAgIGFyaWEtbGFiZWw9e3RoaXMucXVlc3Rpb24uYXJpYUxhYmVsfVxuICAgICAgICAgICAgYXJpYS1pbnZhbGlkPXt0aGlzLnF1ZXN0aW9uLmFyaWFJbnZhbGlkfVxuICAgICAgICAgICAgYXJpYS1kZXNjcmliZWRieT17dGhpcy5xdWVzdGlvbi5hcmlhRGVzY3JpYmVkQnl9XG4gICAgICAgICAgLz5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldExhYmVsQ3NzKGZhbHNlKX1cbiAgICAgICAgICAgIG9uQ2xpY2s9eyhldmVudCkgPT4gdGhpcy5oYW5kbGVPbkxhYmVsQ2xpY2soZXZlbnQsIGZhbHNlKX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7dGhpcy5yZW5kZXJMb2NTdHJpbmcodGhpcy5xdWVzdGlvbi5sb2NMYWJlbEZhbHNlKX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuc3dpdGNofSBvbkNsaWNrPXt0aGlzLmhhbmRsZU9uU3dpdGNoQ2xpY2t9PlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtjc3NDbGFzc2VzLnNsaWRlcn0+XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9uLmlzRGV0ZXJtaW5hdGVkICYmIGNzc0NsYXNzZXMuc2xpZGVyVGV4dCA/XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuc2xpZGVyVGV4dH0+eyB0aGlzLnJlbmRlckxvY1N0cmluZyh0aGlzLnF1ZXN0aW9uLmdldENoZWNrZWRMYWJlbCgpKSB9PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldExhYmVsQ3NzKHRydWUpfVxuICAgICAgICAgICAgb25DbGljaz17KGV2ZW50KSA9PiB0aGlzLmhhbmRsZU9uTGFiZWxDbGljayhldmVudCwgdHJ1ZSl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge3RoaXMucmVuZGVyTG9jU3RyaW5nKHRoaXMucXVlc3Rpb24ubG9jTGFiZWxUcnVlKX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJib29sZWFuXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbkJvb2xlYW4sIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZmFjdG9yeVwiO1xyXG5pbXBvcnQgeyBQb3B1cCB9IGZyb20gXCIuLi9wb3B1cC9wb3B1cFwiO1xyXG5pbXBvcnQgeyBTdXJ2ZXlBY3Rpb25CYXJJdGVtIH0gZnJvbSBcIi4vYWN0aW9uLWJhci1pdGVtXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgU3VydmV5QWN0aW9uQmFySXRlbURyb3Bkb3duIGV4dGVuZHMgU3VydmV5QWN0aW9uQmFySXRlbSB7XHJcbiAgcmVuZGVyQnV0dG9uQ29udGVudCgpIHtcclxuICAgIGNvbnN0IGJ1dHRvbkNvbnRlbnQgPSBzdXBlci5yZW5kZXJCdXR0b25Db250ZW50KCk7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICA8PlxyXG4gICAgICAgIHtidXR0b25Db250ZW50fVxyXG4gICAgICAgIDxQb3B1cCBtb2RlbD17dGhpcy5pdGVtLnBvcHVwTW9kZWx9PjwvUG9wdXA+XHJcbiAgICAgIDwvPlxyXG4gICAgKTtcclxuICB9XHJcbn1cclxuXHJcblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3YtYWN0aW9uLWJhci1pdGVtLWRyb3Bkb3duXCIsIChwcm9wcykgPT4ge1xyXG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleUFjdGlvbkJhckl0ZW1Ecm9wZG93biwgcHJvcHMpO1xyXG59KTtcclxuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgeyBCYXNlLCBBY3Rpb24gfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcclxuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWZhY3RvcnlcIjtcclxuaW1wb3J0IHsgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwiLi4vLi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XHJcbmltcG9ydCB7IGF0dGFjaEtleTJjbGljayB9IGZyb20gXCIuLi8uLi9yZWFjdFN1cnZleVwiO1xyXG5pbXBvcnQgeyBTdmdJY29uIH0gZnJvbSBcIi4uL3N2Zy1pY29uL3N2Zy1pY29uXCI7XHJcbmltcG9ydCB7IFN1cnZleUFjdGlvbkJhclNlcGFyYXRvciB9IGZyb20gXCIuL2FjdGlvbi1iYXItc2VwYXJhdG9yXCI7XHJcblxyXG5pbnRlcmZhY2UgSUFjdGlvbkJhckl0ZW1Qcm9wcyB7XHJcbiAgaXRlbTogQWN0aW9uO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU3VydmV5QWN0aW9uIGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8SUFjdGlvbkJhckl0ZW1Qcm9wcywgYW55PiB7XHJcbiAgZ2V0IGl0ZW0oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtO1xyXG4gIH1cclxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xyXG4gICAgcmV0dXJuIHRoaXMuaXRlbTtcclxuICB9XHJcblxyXG4gIHJlbmRlckVsZW1lbnQoKSB7XHJcbiAgICAvL3JlZmFjdG9yXHJcbiAgICBjb25zdCBpdGVtQ2xhc3MgPSB0aGlzLml0ZW0uZ2V0QWN0aW9uUm9vdENzcygpO1xyXG4gICAgY29uc3Qgc2VwYXJhdG9yID0gdGhpcy5pdGVtLm5lZWRTZXBhcmF0b3IgPyAoXHJcbiAgICAgIDxTdXJ2ZXlBY3Rpb25CYXJTZXBhcmF0b3I+PC9TdXJ2ZXlBY3Rpb25CYXJTZXBhcmF0b3I+XHJcbiAgICApIDogbnVsbDtcclxuXHJcbiAgICBjb25zdCBpdGVtQ29tcG9uZW50ID0gUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KFxyXG4gICAgICB0aGlzLml0ZW0uY29tcG9uZW50IHx8IFwic3YtYWN0aW9uLWJhci1pdGVtXCIsXHJcbiAgICAgIHtcclxuICAgICAgICBpdGVtOiB0aGlzLml0ZW0sXHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17aXRlbUNsYXNzfSBpZD17dGhpcy5pdGVtLmlkfT5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2LWFjdGlvbl9fY29udGVudFwiPlxyXG4gICAgICAgICAge3NlcGFyYXRvcn1cclxuICAgICAgICAgIHtpdGVtQ29tcG9uZW50fVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU3VydmV5QWN0aW9uQmFySXRlbSBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPFxyXG4gIElBY3Rpb25CYXJJdGVtUHJvcHMsXHJcbiAgYW55XHJcbj4ge1xyXG4gIGdldCBpdGVtKCk6IEFjdGlvbiB7XHJcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtO1xyXG4gIH1cclxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xyXG4gICAgcmV0dXJuIHRoaXMuaXRlbTtcclxuICB9XHJcblxyXG4gIHJlbmRlckVsZW1lbnQoKSB7XHJcbiAgICByZXR1cm4gPD57dGhpcy5yZW5kZXJJbm5lckJ1dHRvbigpfTwvPjtcclxuICB9XHJcblxyXG4gIHJlbmRlclRleHQoKSB7XHJcbiAgICBpZiAoIXRoaXMuaXRlbS5oYXNUaXRsZSkgcmV0dXJuIG51bGw7XHJcbiAgICBjb25zdCB0aXRsZUNsYXNzID0gdGhpcy5pdGVtLmdldEFjdGlvbkJhckl0ZW1UaXRsZUNzcygpO1xyXG4gICAgcmV0dXJuIDxzcGFuIGNsYXNzTmFtZT17dGl0bGVDbGFzc30+e3RoaXMuaXRlbS50aXRsZX08L3NwYW4+O1xyXG4gIH1cclxuXHJcbiAgcmVuZGVyQnV0dG9uQ29udGVudCgpIHtcclxuICAgIGNvbnN0IHRleHQgPSB0aGlzLnJlbmRlclRleHQoKTtcclxuICAgIGNvbnN0IHN2Z0ljb24gPSAhIXRoaXMuaXRlbS5pY29uTmFtZSA/IChcclxuICAgICAgPFN2Z0ljb25cclxuICAgICAgICBjbGFzc05hbWU9e3RoaXMuaXRlbS5jc3NDbGFzc2VzLml0ZW1JY29ufVxyXG4gICAgICAgIHNpemU9e3RoaXMuaXRlbS5pY29uU2l6ZX1cclxuICAgICAgICBpY29uTmFtZT17dGhpcy5pdGVtLmljb25OYW1lfVxyXG4gICAgICA+PC9TdmdJY29uPlxyXG4gICAgKSA6IG51bGw7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICA8PlxyXG4gICAgICAgIHtzdmdJY29ufVxyXG4gICAgICAgIHt0ZXh0fVxyXG4gICAgICA8Lz5cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICByZW5kZXJJbm5lckJ1dHRvbigpIHtcclxuICAgIGNvbnN0IGNsYXNzTmFtZSA9IHRoaXMuaXRlbS5nZXRBY3Rpb25CYXJJdGVtQ3NzKCk7XHJcbiAgICBjb25zdCB0aXRsZSA9IHRoaXMuaXRlbS50b29sdGlwIHx8IHRoaXMuaXRlbS50aXRsZTtcclxuICAgIGNvbnN0IGJ1dHRvbkNvbnRlbnQgPSB0aGlzLnJlbmRlckJ1dHRvbkNvbnRlbnQoKTtcclxuICAgIGNvbnN0IHRhYkluZGV4ID0gdGhpcy5pdGVtLmRpc2FibGVUYWJTdG9wID8gLTEgOiB1bmRlZmluZWQ7XHJcbiAgICBjb25zdCBidXR0b24gPSBhdHRhY2hLZXkyY2xpY2soXHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cclxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICBkaXNhYmxlZD17dGhpcy5pdGVtLmRpc2FibGVkfVxyXG4gICAgICAgIG9uQ2xpY2s9eygpID0+IHRoaXMuaXRlbS5hY3Rpb24odGhpcy5pdGVtKX1cclxuICAgICAgICB0aXRsZT17dGl0bGV9XHJcbiAgICAgICAgdGFiSW5kZXg9e3RhYkluZGV4fVxyXG4gICAgICA+XHJcbiAgICAgICAge2J1dHRvbkNvbnRlbnR9XHJcbiAgICAgIDwvYnV0dG9uPiwgbnVsbCwgeyBwcm9jZXNzRXNjOiBmYWxzZSB9KTtcclxuXHJcbiAgICByZXR1cm4gYnV0dG9uO1xyXG4gIH1cclxufVxyXG5cclxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdi1hY3Rpb24tYmFyLWl0ZW1cIiwgKHByb3BzKSA9PiB7XHJcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5QWN0aW9uQmFySXRlbSwgcHJvcHMpO1xyXG59KTtcclxuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWZhY3RvcnlcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleUFjdGlvbkJhclNlcGFyYXRvciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxhbnksIGFueT4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHJlbmRlcigpIHtcbiAgICB2YXIgY2xhc3NOYW1lID0gYHN2LWFjdGlvbi1iYXItc2VwYXJhdG9yICR7dGhpcy5wcm9wcy5jc3NDbGFzc2VzfWA7XG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWV9PjwvZGl2PjtcbiAgfVxufVxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3YtYWN0aW9uLWJhci1zZXBhcmF0b3JcIixcbiAgKHByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5QWN0aW9uQmFyU2VwYXJhdG9yLCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge1xuICBCYXNlLFxuICBBY3Rpb24sXG4gIEFjdGlvbkNvbnRhaW5lclxufSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IEFkYXB0aXZlQWN0aW9uQ29udGFpbmVyIH0gZnJvbSBcIi4uLy4uLy4uL2FjdGlvbnMvYWRhcHRpdmUtY29udGFpbmVyXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZmFjdG9yeVwiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwiLi4vLi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBTdXJ2ZXlBY3Rpb24gfSBmcm9tIFwiLi9hY3Rpb24tYmFyLWl0ZW1cIjtcblxuZXhwb3J0ICogZnJvbSBcIi4vYWN0aW9uLWJhci1pdGVtLWRyb3Bkb3duXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9hY3Rpb24tYmFyLXNlcGFyYXRvclwiO1xuXG5pbnRlcmZhY2UgSUFjdGlvbkJhclByb3BzIHtcbiAgbW9kZWw6IEFjdGlvbkNvbnRhaW5lcjxBY3Rpb24+O1xuICBoYW5kbGVDbGljaz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlBY3Rpb25CYXIgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxJQWN0aW9uQmFyUHJvcHMsIGFueT4ge1xuICBwcml2YXRlIHJvb3RSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IElBY3Rpb25CYXJQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnJvb3RSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGhhbmRsZUNsaWNrKCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmhhbmRsZUNsaWNrICE9PSB1bmRlZmluZWQgPyB0aGlzLnByb3BzLmhhbmRsZUNsaWNrIDogdHJ1ZTtcbiAgfVxuXG4gIGdldCBtb2RlbCgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5tb2RlbDtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgaWYgKCF0aGlzLm1vZGVsLmhhc0FjdGlvbnMpIHJldHVybjtcbiAgICBjb25zdCBjb250YWluZXI6IEhUTUxEaXZFbGVtZW50ID0gdGhpcy5yb290UmVmLmN1cnJlbnQ7XG4gICAgdGhpcy5tb2RlbC5pbml0UmVzcG9uc2l2aXR5TWFuYWdlcihjb250YWluZXIpO1xuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAgdGhpcy5tb2RlbC5yZXNldFJlc3BvbnNpdml0eU1hbmFnZXIoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cblxuICByZW5kZXJFbGVtZW50KCk6IGFueSB7XG4gICAgaWYgKCF0aGlzLm1vZGVsLmhhc0FjdGlvbnMpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5yZW5kZXJJdGVtcygpO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIHJlZj17dGhpcy5yb290UmVmfVxuICAgICAgICBjbGFzc05hbWU9e3RoaXMubW9kZWwuZ2V0Um9vdENzcygpfVxuICAgICAgICBvbkNsaWNrPXt0aGlzLmhhbmRsZUNsaWNrID8gZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfSA6IHVuZGVmaW5lZH1cbiAgICAgID5cbiAgICAgICAge2l0ZW1zfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIHJlbmRlckl0ZW1zKCkge1xuICAgIHJldHVybiB0aGlzLm1vZGVsLnJlbmRlcmVkQWN0aW9ucy5tYXAoXG4gICAgICAoaXRlbTogQWN0aW9uLCBpdGVtSW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxTdXJ2ZXlBY3Rpb24gaXRlbT17aXRlbX0ga2V5PXtcIml0ZW1cIiArIGl0ZW1JbmRleH0+PC9TdXJ2ZXlBY3Rpb24+XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2LWFjdGlvbi1iYXJcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgIFN1cnZleUFjdGlvbkJhcixcbiAgICAocHJvcHMgYXMgYW55KSBhcyBJQWN0aW9uQmFyUHJvcHNcbiAgKTtcbn0pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgeyBMaXN0TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcclxuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWZhY3RvcnlcIjtcclxuaW1wb3J0IHsgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwiLi4vLi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XHJcbmltcG9ydCB7IGF0dGFjaEtleTJjbGljayB9IGZyb20gXCIuLi8uLi9yZWFjdFN1cnZleVwiO1xyXG5pbXBvcnQgeyBTdmdJY29uIH0gZnJvbSBcIi4uL3N2Zy1pY29uL3N2Zy1pY29uXCI7XHJcblxyXG5pbnRlcmZhY2UgSUxpc3RJdGVtUHJvcHMge1xyXG4gIG1vZGVsOiBMaXN0TW9kZWw7XHJcbiAgaXRlbTogYW55O1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgTGlzdEl0ZW0gZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxJTGlzdEl0ZW1Qcm9wcywgYW55PiB7XHJcbiAgZ2V0IG1vZGVsKCk6IExpc3RNb2RlbCB7XHJcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5tb2RlbDtcclxuICB9XHJcbiAgZ2V0IGl0ZW0oKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW07XHJcbiAgfVxyXG4gIGhhbmRsZUtleWRvd24gPSAoZXZlbnQ6IGFueSkgPT4ge1xyXG4gICAgdGhpcy5tb2RlbC5vbktleURvd24oZXZlbnQpO1xyXG4gIH07XHJcbiAgZ2V0U3RhdGVFbGVtZW50KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaXRlbTtcclxuICB9XHJcbiAgcmVuZGVyKCkge1xyXG4gICAgaWYgKCF0aGlzLml0ZW0pIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBjb25zdCBzdHlsZSA9IHtcclxuICAgICAgcGFkZGluZ0xlZnQ6IHRoaXMubW9kZWwuZ2V0SXRlbUluZGVudCh0aGlzLml0ZW0pLFxyXG4gICAgICBkaXNwbGF5OiB0aGlzLml0ZW0udmlzaWJsZSA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuaXRlbS52aXNpYmxlID8gbnVsbCA6IFwibm9uZVwiLFxyXG4gICAgfTtcclxuICAgIGNvbnN0IGNsYXNzTmFtZSA9IHRoaXMubW9kZWwuZ2V0SXRlbUNsYXNzKHRoaXMuaXRlbSk7XHJcbiAgICBjb25zdCBjb250ZW50ID0gW107XHJcbiAgICBpZiAoIXRoaXMuaXRlbS5jb21wb25lbnQpIHtcclxuICAgICAgY29uc3QgaWNvbiA9IHRoaXMuaXRlbS5pY29uTmFtZSA/IChcclxuICAgICAgICA8U3ZnSWNvblxyXG4gICAgICAgICAga2V5PXsxfVxyXG4gICAgICAgICAgY2xhc3NOYW1lPVwic3YtbGlzdF9faXRlbS1pY29uXCJcclxuICAgICAgICAgIGljb25OYW1lPXt0aGlzLml0ZW0uaWNvbk5hbWV9XHJcbiAgICAgICAgICBzaXplPXsyNH1cclxuICAgICAgICA+PC9TdmdJY29uPlxyXG4gICAgICApIDogbnVsbDtcclxuICAgICAgY29udGVudC5wdXNoKGljb24pO1xyXG4gICAgICBjb250ZW50LnB1c2goPHNwYW4ga2V5PXsyfT57dGhpcy5pdGVtLnRpdGxlfTwvc3Bhbj4pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29udGVudC5wdXNoKFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudCh0aGlzLml0ZW0uY29tcG9uZW50LCB7IGl0ZW06IHRoaXMuaXRlbSB9KSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGF0dGFjaEtleTJjbGljayhcclxuICAgICAgPGxpXHJcbiAgICAgICAgc3R5bGU9e3N0eWxlfVxyXG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxyXG4gICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgIHRoaXMubW9kZWwuc2VsZWN0SXRlbSh0aGlzLml0ZW0pO1xyXG4gICAgICAgIH19XHJcbiAgICAgICAgb25Qb2ludGVyRG93bj17KGV2ZW50OiBhbnkpID0+IHRoaXMubW9kZWwub25Qb2ludGVyRG93bihldmVudCwgdGhpcy5pdGVtKX1cclxuICAgICAgPlxyXG4gICAgICAgIHtjb250ZW50fVxyXG4gICAgICA8L2xpPlxyXG4gICAgKTtcclxuICB9XHJcblxyXG59XHJcblxyXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2LWxpc3QtaXRlbVwiLCAocHJvcHMpID0+IHtcclxuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChMaXN0SXRlbSwgcHJvcHMpO1xyXG59KTtcclxuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgeyBJQWN0aW9uLCBMaXN0TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcclxuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWZhY3RvcnlcIjtcclxuaW1wb3J0IHsgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwiLi4vLi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XHJcbmltcG9ydCB7IFN2Z0ljb24gfSBmcm9tIFwiLi4vc3ZnLWljb24vc3ZnLWljb25cIjtcclxuaW1wb3J0IHsgTGlzdEl0ZW0gfSBmcm9tIFwiLi9saXN0LWl0ZW1cIjtcclxuXHJcbmludGVyZmFjZSBJTGlzdFByb3BzIHtcclxuICBtb2RlbDogTGlzdE1vZGVsO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgTGlzdCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPElMaXN0UHJvcHMsIGFueT4ge1xyXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcclxuICAgIHN1cGVyKHByb3BzKTtcclxuICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgIGZpbHRlcmVkVGV4dDogdGhpcy5tb2RlbC5maWx0ZXJlZFRleHQgfHwgXCJcIlxyXG4gICAgfTtcclxuICB9XHJcbiAgZ2V0IG1vZGVsKCk6IExpc3RNb2RlbCB7XHJcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5tb2RlbDtcclxuICB9XHJcbiAgaGFuZGxlS2V5ZG93biA9IChldmVudDogYW55KSA9PiB7XHJcbiAgICB0aGlzLm1vZGVsLm9uS2V5RG93bihldmVudCk7XHJcbiAgfTtcclxuICBnZXRTdGF0ZUVsZW1lbnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcclxuICB9XHJcbiAgcmVuZGVyRWxlbWVudCgpIHtcclxuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5yZW5kZXJJdGVtcygpO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdi1saXN0X19jb250YWluZXJcIj5cclxuICAgICAgICB7dGhpcy5zZWFyY2hFbGVtZW50Q29udGVudCgpfVxyXG4gICAgICAgIDx1bFxyXG4gICAgICAgICAgY2xhc3NOYW1lPVwic3YtbGlzdFwiXHJcbiAgICAgICAgICBvbk1vdXNlRG93bj17KGUpID0+IHtcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgfX1cclxuICAgICAgICAgIG9uS2V5RG93bj17dGhpcy5oYW5kbGVLZXlkb3dufVxyXG4gICAgICAgID5cclxuICAgICAgICAgIHtpdGVtc31cclxuICAgICAgICA8L3VsPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICk7XHJcbiAgfVxyXG4gIHJlbmRlckl0ZW1zKCkge1xyXG4gICAgaWYgKCF0aGlzLm1vZGVsKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLm1vZGVsLnJlbmRlcmVkQWN0aW9ucztcclxuICAgIGlmICghaXRlbXMpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaXRlbXMubWFwKChpdGVtOiBJQWN0aW9uLCBpdGVtSW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIDxMaXN0SXRlbSBtb2RlbD17dGhpcy5tb2RlbH0gaXRlbT17aXRlbX0ga2V5PXtcIml0ZW1cIiArIGl0ZW1JbmRleH0+PC9MaXN0SXRlbT5cclxuICAgICAgKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2VhcmNoRWxlbWVudENvbnRlbnQoKSB7XHJcbiAgICBpZiAoIXRoaXMubW9kZWwubmVlZEZpbHRlcikgcmV0dXJuIG51bGw7XHJcbiAgICBlbHNlIHtcclxuICAgICAgY29uc3Qgb25DaGFuZ2UgPSAoZTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKGUudGFyZ2V0ID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50KSB7XHJcbiAgICAgICAgICB0aGlzLm1vZGVsLmZpbHRlcmVkVGV4dCA9IGUudGFyZ2V0LnZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2LWxpc3RfX2ZpbHRlclwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtcInN2LWxpc3RfX2ZpbHRlci1pY29uXCJ9PlxyXG4gICAgICAgICAgICA8U3ZnSWNvblxyXG4gICAgICAgICAgICAgIGljb25OYW1lPXtcImljb24tc2VhcmNoXCJ9XHJcbiAgICAgICAgICAgICAgc2l6ZT17XCJhdXRvXCJ9XHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgPC9TdmdJY29uPlxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgY2xhc3NOYW1lPVwic3YtbGlzdF9faW5wdXRcIlxyXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj17dGhpcy5tb2RlbC5maWx0ZXJlZFRleHRQbGFjZWhvbGRlcn1cclxuICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUuZmlsdGVyZWRUZXh0fVxyXG4gICAgICAgICAgICBvbkNoYW5nZT17b25DaGFuZ2V9XHJcbiAgICAgICAgICA+PC9pbnB1dD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3YtbGlzdFwiLCAocHJvcHMpID0+IHtcclxuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChMaXN0LCBwcm9wcyk7XHJcbn0pO1xyXG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBBY3Rpb24sIE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLCBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4uLy4uLy4uL2VsZW1lbnQtZmFjdG9yeVwiO1xuaW1wb3J0IHsgUmVhY3RTdXJ2ZXlFbGVtZW50IH0gZnJvbSBcIi4uLy4uLy4uL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgU3ZnSWNvbiB9IGZyb20gXCIuLi8uLi9zdmctaWNvbi9zdmctaWNvblwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25NYXRyaXhEZXRhaWxCdXR0b24gZXh0ZW5kcyBSZWFjdFN1cnZleUVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuaGFuZGxlT25TaG93SGlkZUNsaWNrID0gdGhpcy5oYW5kbGVPblNob3dIaWRlQ2xpY2suYmluZCh0aGlzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW07XG4gIH1cbiAgZ2V0IGl0ZW0oKTogQWN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtO1xuICB9XG4gIHByaXZhdGUgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW0uZGF0YS5xdWVzdGlvbjtcbiAgfVxuICBwcml2YXRlIGdldCByb3coKTogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW0uZGF0YS5yb3c7XG4gIH1cbiAgaGFuZGxlT25TaG93SGlkZUNsaWNrKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnJvdy5zaG93SGlkZURldGFpbFBhbmVsQ2xpY2soKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGlzRXhwYW5kZWQgPSB0aGlzLnJvdy5pc0RldGFpbFBhbmVsU2hvd2luZztcbiAgICB2YXIgYXJpYUV4cGFuZGVkID0gaXNFeHBhbmRlZDtcbiAgICB2YXIgYXJpYUNvbnRyb2xzID0gaXNFeHBhbmRlZCA/IHRoaXMucm93LmRldGFpbFBhbmVsSWQgOiBudWxsO1xuICAgIHJldHVybiAoXG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBvbkNsaWNrPXt0aGlzLmhhbmRsZU9uU2hvd0hpZGVDbGlja31cbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldERldGFpbFBhbmVsQnV0dG9uQ3NzKHRoaXMucm93KX1cbiAgICAgICAgYXJpYS1leHBhbmRlZD17YXJpYUV4cGFuZGVkfVxuICAgICAgICBhcmlhLWNvbnRyb2xzPXthcmlhQ29udHJvbHN9XG4gICAgICA+XG4gICAgICAgIDxTdmdJY29uXG4gICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldERldGFpbFBhbmVsSWNvbkNzcyh0aGlzLnJvdyl9XG4gICAgICAgICAgaWNvbk5hbWU9e3RoaXMucXVlc3Rpb24uZ2V0RGV0YWlsUGFuZWxJY29uSWQodGhpcy5yb3cpfVxuICAgICAgICAgIHNpemU9e1wiYXV0b1wifVxuICAgICAgICA+XG4gICAgICAgIDwvU3ZnSWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3YtbWF0cml4LWRldGFpbC1idXR0b25cIixcbiAgcHJvcHMgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uTWF0cml4RGV0YWlsQnV0dG9uLCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4uLy4uLy4uL2VsZW1lbnQtZmFjdG9yeVwiO1xuaW1wb3J0IHsgUmVhY3RTdXJ2ZXlFbGVtZW50IH0gZnJvbSBcIi4uLy4uLy4uL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljRHJhZ0Ryb3BJY29uIGV4dGVuZHMgUmVhY3RTdXJ2ZXlFbGVtZW50IHtcbiAgcHJpdmF0ZSBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbS5kYXRhLnF1ZXN0aW9uO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8c3BhblxuICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pY29uRHJhZ31cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdi1tYXRyaXgtZHJhZy1kcm9wLWljb25cIixcbiAgKHByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljRHJhZ0Ryb3BJY29uLCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge1xuICBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSxcbiAgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZSxcbn0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4uLy4uLy4uL2VsZW1lbnQtZmFjdG9yeVwiO1xuaW1wb3J0IHsgUmVhY3RTdXJ2ZXlFbGVtZW50IH0gZnJvbSBcIi4uLy4uLy4uL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljUmVtb3ZlQnV0dG9uIGV4dGVuZHMgUmVhY3RTdXJ2ZXlFbGVtZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmhhbmRsZU9uUm93UmVtb3ZlQ2xpY2sgPSB0aGlzLmhhbmRsZU9uUm93UmVtb3ZlQ2xpY2suYmluZCh0aGlzKTtcbiAgfVxuICBwcml2YXRlIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtLmRhdGEucXVlc3Rpb247XG4gIH1cbiAgcHJpdmF0ZSBnZXQgcm93KCk6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtLmRhdGEucm93O1xuICB9XG4gIGhhbmRsZU9uUm93UmVtb3ZlQ2xpY2soZXZlbnQ6IGFueSkge1xuICAgIHRoaXMucXVlc3Rpb24ucmVtb3ZlUm93VUkodGhpcy5yb3cpO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgcmVtb3ZlUm93VGV4dCA9IHRoaXMucmVuZGVyTG9jU3RyaW5nKHRoaXMucXVlc3Rpb24ubG9jUmVtb3ZlUm93VGV4dCk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldFJlbW92ZVJvd0J1dHRvbkNzcygpfVxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgb25DbGljaz17dGhpcy5oYW5kbGVPblJvd1JlbW92ZUNsaWNrfVxuICAgICAgICBkaXNhYmxlZD17dGhpcy5xdWVzdGlvbi5pc0lucHV0UmVhZE9ubHl9XG4gICAgICA+XG4gICAgICAgIHtyZW1vdmVSb3dUZXh0fVxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pY29uUmVtb3ZlfSAvPlxuICAgICAgPC9idXR0b24+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdi1tYXRyaXgtcmVtb3ZlLWJ1dHRvblwiLFxuICAocHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbk1hdHJpeER5bmFtaWNSZW1vdmVCdXR0b24sIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5pbXBvcnQgeyBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3csIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1mYWN0b3J5XCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50QmFzZSB9IGZyb20gXCIuLi8uLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcblxuaW50ZXJmYWNlIElNQXRyaXhSb3dQcm9wcyB7XG4gIG1vZGVsOiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3c7XG4gIHBhcmVudE1hdHJpeDogUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZTtcbn1cblxuZXhwb3J0IGNsYXNzIE1hdHJpeFJvdyBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPElNQXRyaXhSb3dQcm9wcywgYW55PiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBJTUF0cml4Um93UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgZ2V0IG1vZGVsKCk6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFJvdyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMubW9kZWw7XG4gIH1cbiAgZ2V0IHBhcmVudE1hdHJpeCgpOiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5wYXJlbnRNYXRyaXg7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuICBwcm90ZWN0ZWQgb25Qb2ludGVyRG93bkhhbmRsZXIgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgIHRoaXMucGFyZW50TWF0cml4Lm9uUG9pbnRlckRvd24oZXZlbnQubmF0aXZlRXZlbnQsIHRoaXMubW9kZWwucm93KTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCBtb2RlbCA9IHRoaXMubW9kZWw7XG4gICAgcmV0dXJuIChcbiAgICAgIDx0clxuICAgICAgICBjbGFzc05hbWU9e21vZGVsLmNsYXNzTmFtZX1cbiAgICAgICAgZGF0YS1zdi1kcm9wLXRhcmdldC1tYXRyaXgtcm93PXttb2RlbC5yb3cgJiYgbW9kZWwucm93LmlkfVxuICAgICAgICBvblBvaW50ZXJEb3duPXsoZXZlbnQ6IGFueSkgPT4gdGhpcy5vblBvaW50ZXJEb3duSGFuZGxlcihldmVudCl9XG4gICAgICA+XG4gICAgICAgIHt0aGlzLnByb3BzLmNoaWxkcmVufVxuICAgICAgPC90cj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2LW1hdHJpeC1yb3dcIixcbiAgKHByb3BzOiBJTUF0cml4Um93UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChNYXRyaXhSb3csIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7XG4gIFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWxcbn0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZmFjdG9yeVwiO1xuaW1wb3J0IHsgUmVhY3RTdXJ2ZXlFbGVtZW50IH0gZnJvbSBcIi4uLy4uL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWMgfSBmcm9tIFwiLi4vLi4vcmVhY3RxdWVzdGlvbl9wYW5lbGR5bmFtaWNcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljQWN0aW9uIGV4dGVuZHMgUmVhY3RTdXJ2ZXlFbGVtZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwge1xuICAgIHJldHVybiAodGhpcy5wcm9wcy5pdGVtICYmIHRoaXMucHJvcHMuaXRlbS5kYXRhLnF1ZXN0aW9uKSB8fCB0aGlzLnByb3BzLmRhdGEucXVlc3Rpb247XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljQWRkQnV0dG9uIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNBY3Rpb24ge1xuICBwcm90ZWN0ZWQgaGFuZGxlQ2xpY2sgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgIHRoaXMucXVlc3Rpb24uYWRkUGFuZWxVSSgpO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMucXVlc3Rpb24uY2FuQWRkUGFuZWwpIHJldHVybiBudWxsO1xuICAgIHJldHVybiAoXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0QWRkQnV0dG9uQ3NzKCl9IG9uQ2xpY2s9e3RoaXMuaGFuZGxlQ2xpY2t9ID5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuYnV0dG9uQWRkVGV4dH0+e3RoaXMucXVlc3Rpb24ucGFuZWxBZGRUZXh0fTwvc3Bhbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3YtcGFuZWxkeW5hbWljLWFkZC1idG5cIixcbiAgKHByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNBZGRCdXR0b24sIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1mYWN0b3J5XCI7XG5pbXBvcnQgeyBTdmdJY29uIH0gZnJvbSBcIi4uL3N2Zy1pY29uL3N2Zy1pY29uXCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY0FjdGlvbiB9IGZyb20gXCIuL3BhbmVsZHluYW1pYy1hZGQtYnRuXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY05leHRCdXR0b24gZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY0FjdGlvbiB7XG4gIHByb3RlY3RlZCBoYW5kbGVDbGljayA9IChldmVudDogYW55KSA9PiB7XG4gICAgdGhpcy5xdWVzdGlvbi5nb1RvTmV4dFBhbmVsKCk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IHRpdGxlPXt0aGlzLnF1ZXN0aW9uLnBhbmVsTmV4dFRleHR9IG9uQ2xpY2s9e3RoaXMuaGFuZGxlQ2xpY2t9IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXROZXh0QnV0dG9uQ3NzKCl9PlxuICAgICAgICA8U3ZnSWNvblxuICAgICAgICAgIGljb25OYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucHJvZ3Jlc3NCdG5JY29ufVxuICAgICAgICAgIHNpemU9e1wiYXV0b1wifVxuICAgICAgICA+XG4gICAgICAgIDwvU3ZnSWNvbj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3YtcGFuZWxkeW5hbWljLW5leHQtYnRuXCIsXG4gIChwcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljTmV4dEJ1dHRvbiwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IFN2Z0ljb24gfSBmcm9tIFwiLi4vc3ZnLWljb24vc3ZnLWljb25cIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljQWN0aW9uIH0gZnJvbSBcIi4vcGFuZWxkeW5hbWljLWFkZC1idG5cIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljUHJldkJ1dHRvbiBleHRlbmRzIFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljQWN0aW9uIHtcbiAgcHJvdGVjdGVkIGhhbmRsZUNsaWNrID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICB0aGlzLnF1ZXN0aW9uLmdvVG9QcmV2UGFuZWwoKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgdGl0bGU9e3RoaXMucXVlc3Rpb24ucGFuZWxQcmV2VGV4dH0gb25DbGljaz17dGhpcy5oYW5kbGVDbGlja30gY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldFByZXZCdXR0b25Dc3MoKX0+XG4gICAgICAgIDxTdmdJY29uXG4gICAgICAgICAgaWNvbk5hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5wcm9ncmVzc0J0bkljb259XG4gICAgICAgICAgc2l6ZT17XCJhdXRvXCJ9XG4gICAgICAgID5cbiAgICAgICAgPC9TdmdJY29uPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdi1wYW5lbGR5bmFtaWMtcHJldi1idG5cIixcbiAgKHByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNQcmV2QnV0dG9uLCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZmFjdG9yeVwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNBY3Rpb24gfSBmcm9tIFwiLi9wYW5lbGR5bmFtaWMtYWRkLWJ0blwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNQcm9ncmVzc1RleHQgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY0FjdGlvbiB7XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKDxkaXYgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucHJvZ3Jlc3NUZXh0fT5cbiAgICAgIHt0aGlzLnF1ZXN0aW9uLnByb2dyZXNzVGV4dH1cbiAgICA8L2Rpdj4pO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2LXBhbmVsZHluYW1pYy1wcm9ncmVzcy10ZXh0XCIsXG4gIChwcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0LCBwcm9wcyk7XG4gIH1cbik7IiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcbmltcG9ydCB7IFBvcHVwTW9kZWwsIFBvcHVwQmFzZVZpZXdNb2RlbCwgY3JlYXRlUG9wdXBNb2RhbFZpZXdNb2RlbCwgQ3NzQ2xhc3NCdWlsZGVyLCBzZXR0aW5ncyB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcIi4uLy4uL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuXG5pbnRlcmZhY2UgSVBvcHVwUHJvcHMge1xuICBtb2RlbDogUG9wdXBNb2RlbDtcbn1cblxuZXhwb3J0IGNsYXNzIFBvcHVwIGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8SVBvcHVwUHJvcHMsIGFueT4ge1xuICBwcml2YXRlIHBvcHVwOiBQb3B1cEJhc2VWaWV3TW9kZWw7XG4gIHByaXZhdGUgY29udGFpbmVyUmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBjb25zdHJ1Y3Rvcihwcm9wczogSVBvcHVwUHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5jb250YWluZXJSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgICB0aGlzLnBvcHVwID0gbmV3IFBvcHVwQmFzZVZpZXdNb2RlbCh0aGlzLnByb3BzLm1vZGVsKTtcbiAgICB0aGlzLnBvcHVwLmNyZWF0ZVBvcHVwQ29udGFpbmVyKCk7XG4gIH1cbiAgZ2V0IG1vZGVsKCk6IFBvcHVwTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLm1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICB0aGlzLnBvcHVwLm1vdW50UG9wdXBDb250YWluZXIoKTtcbiAgICB0aGlzLnBvcHVwLnRhcmdldEVsZW1lbnQgPSB0aGlzLmNvbnRhaW5lclJlZi5jdXJyZW50LnBhcmVudEVsZW1lbnQ7XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgdGhpcy5wb3B1cC5kZXN0cm95UG9wdXBDb250YWluZXIoKTtcbiAgfVxuICBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzOiBJUG9wdXBQcm9wcywgbmV4dFN0YXRlOiBhbnkpIHtcbiAgICBpZiAoIXN1cGVyLnNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHMsIG5leHRTdGF0ZSkpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gbmV4dFByb3BzLm1vZGVsICE9PSB0aGlzLnBvcHVwLm1vZGVsO1xuICB9XG4gIHJlbmRlcigpIHtcbiAgICB0aGlzLnBvcHVwLm1vZGVsID0gdGhpcy5tb2RlbDtcbiAgICBjb25zdCBwb3B1cENvbnRhaW5lciA9IFJlYWN0RE9NLmNyZWF0ZVBvcnRhbChcbiAgICAgIDxQb3B1cENvbnRhaW5lciBtb2RlbD17dGhpcy5wb3B1cH0+PC9Qb3B1cENvbnRhaW5lcj4sXG4gICAgICB0aGlzLnBvcHVwLmNvbnRhaW5lclxuICAgICk7XG4gICAgcmV0dXJuIDxkaXYgcmVmPXt0aGlzLmNvbnRhaW5lclJlZn0+e3BvcHVwQ29udGFpbmVyfTwvZGl2PjtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdi1wb3B1cFwiLFxuICAocHJvcHM6IElQb3B1cFByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUG9wdXAsIHByb3BzKTtcbiAgfVxuKTtcblxuZXhwb3J0IGNsYXNzIFBvcHVwQ29udGFpbmVyIGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8YW55LCBhbnk+IHtcbiAgcHVibGljIHByZXZJc1Zpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBoYW5kbGVLZXlkb3duID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICB0aGlzLm1vZGVsLm9uS2V5RG93bihldmVudCk7XG4gIH07XG4gIGdldCBtb2RlbCgpOiBQb3B1cEJhc2VWaWV3TW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLm1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cbiAgY2xpY2tJbnNpZGUgPSAoZXY6IGFueSkgPT4ge1xuICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICB9O1xuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBhbnksIHByZXZTdGF0ZTogYW55KSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKTtcbiAgICBpZiAoIXRoaXMucHJldklzVmlzaWJsZSAmJiB0aGlzLm1vZGVsLmlzVmlzaWJsZSkge1xuICAgICAgdGhpcy5tb2RlbC51cGRhdGVPblNob3dpbmcoKTtcbiAgICB9XG4gICAgdGhpcy5wcmV2SXNWaXNpYmxlID0gdGhpcy5tb2RlbC5pc1Zpc2libGU7XG4gIH1cbiAgcmVuZGVyQ29udGFpbmVyKCkge1xuICAgIGNvbnN0IHBvaW50ZXIgPSB0aGlzLm1vZGVsLnNob3dQb2ludGVyID8gdGhpcy5yZW5kZXJQb2ludGVyKCkgOiBudWxsO1xuICAgIGNvbnN0IGhlYWRlciA9ICEhdGhpcy5tb2RlbC50aXRsZSA/IHRoaXMucmVuZGVySGVhZGVyKCkgOiBudWxsO1xuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLnJlbmRlckNvbnRlbnQoKTtcbiAgICBjb25zdCBmb290ZXIgPSB0aGlzLm1vZGVsLnNob3dGb290ZXIgPyB0aGlzLnJlbmRlckZvb3RlcigpIDogbnVsbDtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9XCJzdi1wb3B1cF9fY29udGFpbmVyXCJcbiAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICBsZWZ0OiB0aGlzLm1vZGVsLmxlZnQsXG4gICAgICAgICAgdG9wOiB0aGlzLm1vZGVsLnRvcCxcbiAgICAgICAgICBoZWlnaHQ6IHRoaXMubW9kZWwuaGVpZ2h0LFxuICAgICAgICB9fVxuICAgICAgICBvbkNsaWNrPXsoZXY6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMuY2xpY2tJbnNpZGUoZXYpO1xuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2LXBvcHVwX3NoYWRvd1wiPlxuICAgICAgICAgIHtwb2ludGVyfVxuICAgICAgICAgIHtoZWFkZXJ9XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdi1wb3B1cF9fc2Nyb2xsaW5nLWNvbnRlbnRcIj5cbiAgICAgICAgICAgIHtjb250ZW50fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIHtmb290ZXJ9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICByZW5kZXJQb2ludGVyKCkge1xuICAgIHJldHVybiAoXG4gICAgICA8c3BhblxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgIGxlZnQ6IHRoaXMubW9kZWwucG9pbnRlclRhcmdldC5sZWZ0LFxuICAgICAgICAgIHRvcDogdGhpcy5tb2RlbC5wb2ludGVyVGFyZ2V0LnRvcCxcbiAgICAgICAgfX1cbiAgICAgICAgY2xhc3NOYW1lPVwic3YtcG9wdXBfX3BvaW50ZXJcIlxuICAgICAgPjwvc3Bhbj5cbiAgICApO1xuICB9XG4gIHJlbmRlckhlYWRlcigpIHtcbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJzdi1wb3B1cF9faGVhZGVyXCI+e3RoaXMubW9kZWwudGl0bGV9PC9kaXY+O1xuICB9XG4gIHJlbmRlckNvbnRlbnQoKSB7XG4gICAgY29uc3QgY29udGVudENvbXBvbmVudCA9IFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChcbiAgICAgIHRoaXMubW9kZWwuY29udGVudENvbXBvbmVudE5hbWUsXG4gICAgICB0aGlzLm1vZGVsLmNvbnRlbnRDb21wb25lbnREYXRhXG4gICAgKTtcbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJzdi1wb3B1cF9fY29udGVudFwiPntjb250ZW50Q29tcG9uZW50fTwvZGl2PjtcbiAgfVxuICByZW5kZXJDYW5jZWxCdXR0b24oKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzTmFtZT1cInN2LXBvcHVwX19mb290ZXItaXRlbSBzdi1wb3B1cF9fYnV0dG9uIHN2LXBvcHVwX19idXR0b24tLWNhbmNlbFwiXG4gICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICB0aGlzLm1vZGVsLmNhbmNlbCgpO1xuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICB7dGhpcy5tb2RlbC5jYW5jZWxCdXR0b25UZXh0fVxuICAgICAgPC9idXR0b24+XG4gICAgKTtcbiAgfVxuICByZW5kZXJBcHBseUJ1dHRvbigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3NOYW1lPVwic3YtcG9wdXBfX2Zvb3Rlci1pdGVtIHN2LXBvcHVwX19idXR0b24gc3YtcG9wdXBfX2J1dHRvbi0tYXBwbHlcIlxuICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgdGhpcy5tb2RlbC5hcHBseSgpO1xuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICB7dGhpcy5tb2RlbC5hcHBseUJ1dHRvblRleHR9XG4gICAgICA8L2J1dHRvbj5cbiAgICApO1xuICB9XG4gIHJlbmRlckZvb3RlcigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdi1wb3B1cF9fZm9vdGVyXCI+XG4gICAgICAgIHt0aGlzLnJlbmRlckNhbmNlbEJ1dHRvbigpfVxuICAgICAgICB7dGhpcy5tb2RlbC5pc01vZGFsID8gdGhpcy5yZW5kZXJBcHBseUJ1dHRvbigpIDogbnVsbH1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMucmVuZGVyQ29udGFpbmVyKCk7XG4gICAgY29uc3QgY2xhc3NOYW1lID0gbmV3IENzc0NsYXNzQnVpbGRlcigpXG4gICAgICAuYXBwZW5kKFwic3YtcG9wdXBcIikuYXBwZW5kKHRoaXMubW9kZWwuc3R5bGVDbGFzcykudG9TdHJpbmcoKTtcbiAgICBjb25zdCBzdHlsZSA9IHtcbiAgICAgIGRpc3BsYXk6IHRoaXMubW9kZWwuaXNWaXNpYmxlID8gXCJcIiA6IFwibm9uZVwiLFxuICAgIH07XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgdGFiSW5kZXg9ey0xfVxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgICBvbkNsaWNrPXsoZTogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5tb2RlbC5jbGlja091dHNpZGUoKTtcbiAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9fVxuICAgICAgICBvbktleURvd249e3RoaXMuaGFuZGxlS2V5ZG93bn1cbiAgICAgID5cbiAgICAgICAge2NvbnRhaW5lcn1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNob3dNb2RhbChcbiAgY29tcG9uZW50TmFtZTogc3RyaW5nLFxuICBkYXRhOiBhbnksXG4gIG9uQXBwbHk6ICgpID0+IGJvb2xlYW4sXG4gIG9uQ2FuY2VsPzogKCkgPT4gdm9pZCxcbiAgY3NzQ2xhc3M/OiBzdHJpbmcsXG4gIHRpdGxlPzogc3RyaW5nLFxuICBkaXNwbGF5TW9kZTogXCJwb3B1cFwiIHwgXCJvdmVybGF5XCIgPSBcInBvcHVwXCJcbikge1xuICBjb25zdCBwb3B1cFZpZXdNb2RlbDogUG9wdXBCYXNlVmlld01vZGVsID0gY3JlYXRlUG9wdXBNb2RhbFZpZXdNb2RlbChcbiAgICBjb21wb25lbnROYW1lLFxuICAgIGRhdGEsXG4gICAgb25BcHBseSxcbiAgICBvbkNhbmNlbCxcbiAgICAoKSA9PiB7XG4gICAgICBSZWFjdERPTS51bm1vdW50Q29tcG9uZW50QXROb2RlKHBvcHVwVmlld01vZGVsLmNvbnRhaW5lcik7XG4gICAgICBwb3B1cFZpZXdNb2RlbC5kZXN0cm95UG9wdXBDb250YWluZXIoKTtcbiAgICB9LFxuICAgIHVuZGVmaW5lZCxcbiAgICBjc3NDbGFzcyxcbiAgICB0aXRsZSxcbiAgICBkaXNwbGF5TW9kZVxuICApO1xuICBSZWFjdERPTS5yZW5kZXIoPFBvcHVwQ29udGFpbmVyIG1vZGVsPXtwb3B1cFZpZXdNb2RlbH0gLz4sIHBvcHVwVmlld01vZGVsLmNvbnRhaW5lcik7XG5cbiAgcG9wdXBWaWV3TW9kZWwubW9kZWwuaXNWaXNpYmxlID0gdHJ1ZTtcbn1cblxuc2V0dGluZ3Muc2hvd01vZGFsID0gc2hvd01vZGFsO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi9lbGVtZW50LWZhY3RvcnlcIjtcblxuZXhwb3J0IGNsYXNzIFNrZWxldG9uIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PGFueSwgYW55PiB7XG4gIHJlbmRlcigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdi1za2VsZXRvbi1lbGVtZW50XCI+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3Ytc2tlbGV0b25cIiwgKHByb3BzOiBhbnkpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU2tlbGV0b24sIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1mYWN0b3J5XCI7XG5cbmludGVyZmFjZSBJTG9nb0ltYWdlUHJvcHMge1xuICBkYXRhOiBTdXJ2ZXlNb2RlbDtcbn1cblxuZXhwb3J0IGNsYXNzIExvZ29JbWFnZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxJTG9nb0ltYWdlUHJvcHMsIGFueT4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogSUxvZ29JbWFnZVByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByaXZhdGUgZ2V0IHN1cnZleSgpOiBTdXJ2ZXlNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZGF0YTtcbiAgfVxuICBwdWJsaWMgcmVuZGVyKCkge1xuICAgIGNvbnN0IGNvbnRlbnQ6IEpTWC5FbGVtZW50W10gPSBbXTtcbiAgICBjb250ZW50LnB1c2goXG4gICAgICA8ZGl2IGtleT17XCJsb2dvLWltYWdlXCJ9IGNsYXNzTmFtZT17dGhpcy5zdXJ2ZXkubG9nb0NsYXNzTmFtZXN9PlxuICAgICAgICA8aW1nXG4gICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnN1cnZleS5jc3MubG9nb0ltYWdlfVxuICAgICAgICAgIHNyYz17dGhpcy5zdXJ2ZXkubG9jTG9nby5yZW5kZXJlZEh0bWx9XG4gICAgICAgICAgYWx0PXt0aGlzLnN1cnZleS5sb2NUaXRsZS5yZW5kZXJlZEh0bWx9XG4gICAgICAgICAgd2lkdGg9e3RoaXMuc3VydmV5LmxvZ29XaWR0aCA/IHRoaXMuc3VydmV5LmxvZ29XaWR0aCA6IHVuZGVmaW5lZH1cbiAgICAgICAgICBoZWlnaHQ9e3RoaXMuc3VydmV5LmxvZ29IZWlnaHQgPyB0aGlzLnN1cnZleS5sb2dvSGVpZ2h0IDogdW5kZWZpbmVkfVxuICAgICAgICAgIHN0eWxlPXt7IG9iamVjdEZpdDogdGhpcy5zdXJ2ZXkubG9nb0ZpdCBhcyBhbnkgfX1cbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gICAgcmV0dXJuIDw+e2NvbnRlbnR9PC8+O1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3YtbG9nby1pbWFnZVwiLCAocHJvcHM6IElMb2dvSW1hZ2VQcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChMb2dvSW1hZ2UsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcIi4uLy4uL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IFRpdGxlRWxlbWVudCB9IGZyb20gXCIuLi90aXRsZS90aXRsZS1lbGVtZW50XCI7XG5cbmludGVyZmFjZSBJU3VydmV5SGVhZGVyUHJvcHMge1xuICBzdXJ2ZXk6IFN1cnZleU1vZGVsO1xufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5SGVhZGVyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PElTdXJ2ZXlIZWFkZXJQcm9wcywgYW55PiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBJU3VydmV5SGVhZGVyUHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHsgY2hhbmdlZDogMCB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgc3VydmV5KCk6IFN1cnZleU1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5zdXJ2ZXk7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgY3NzKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5LmNzcztcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIGNvbnN0IHNlbGY6IFN1cnZleUhlYWRlciA9IHRoaXM7XG4gICAgdGhpcy5zdXJ2ZXkubG9jTG9nby5vbkNoYW5nZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBzZWxmLnNldFN0YXRlKHsgY2hhbmdlZDogc2VsZi5zdGF0ZS5jaGFuZ2VkICsgMSB9KTtcbiAgICB9O1xuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHRoaXMuc3VydmV5LmxvY0xvZ28ub25DaGFuZ2VkID0gZnVuY3Rpb24gKCkgeyB9O1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJUaXRsZSgpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLnN1cnZleS5yZW5kZXJlZEhhc1RpdGxlKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBkZXNjcmlwdGlvbiA9IFN1cnZleUVsZW1lbnRCYXNlLnJlbmRlckxvY1N0cmluZyhcbiAgICAgIHRoaXMuc3VydmV5LmxvY0Rlc2NyaXB0aW9uXG4gICAgKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e3RoaXMuY3NzLmhlYWRlclRleHR9XG4gICAgICAgIHN0eWxlPXt7IG1heFdpZHRoOiB0aGlzLnN1cnZleS50aXRsZU1heFdpZHRoIH19XG4gICAgICA+XG4gICAgICAgIDxUaXRsZUVsZW1lbnQgZWxlbWVudD17dGhpcy5zdXJ2ZXl9PjwvVGl0bGVFbGVtZW50PlxuICAgICAgICB7IHRoaXMuc3VydmV5LnJlbmRlcmVkSGFzRGVzY3JpcHRpb24gPyA8aDUgY2xhc3NOYW1lPXt0aGlzLmNzcy5kZXNjcmlwdGlvbn0+e2Rlc2NyaXB0aW9ufTwvaDU+IDogbnVsbCB9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJMb2dvSW1hZ2UoaXNSZW5kZXI6IGJvb2xlYW4pOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCFpc1JlbmRlcikgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgY29tcG9uZW50TmFtZTogc3RyaW5nID0gdGhpcy5zdXJ2ZXkuZ2V0RWxlbWVudFdyYXBwZXJDb21wb25lbnROYW1lKFxuICAgICAgdGhpcy5zdXJ2ZXksXG4gICAgICBcImxvZ28taW1hZ2VcIlxuICAgICk7XG4gICAgY29uc3QgY29tcG9uZW50RGF0YTogYW55ID0gdGhpcy5zdXJ2ZXkuZ2V0RWxlbWVudFdyYXBwZXJDb21wb25lbnREYXRhKFxuICAgICAgdGhpcy5zdXJ2ZXksXG4gICAgICBcImxvZ28taW1hZ2VcIlxuICAgICk7XG4gICAgcmV0dXJuIFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChjb21wb25lbnROYW1lLCB7XG4gICAgICBkYXRhOiBjb21wb25lbnREYXRhLFxuICAgIH0pO1xuICB9XG4gIHB1YmxpYyByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5zdXJ2ZXkucmVuZGVyZWRIYXNIZWFkZXIpIHJldHVybiBudWxsO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5jc3MuaGVhZGVyfT5cbiAgICAgICAge3RoaXMucmVuZGVyTG9nb0ltYWdlKHRoaXMuc3VydmV5LmlzTG9nb0JlZm9yZSl9XG4gICAgICAgIHt0aGlzLnJlbmRlclRpdGxlKCl9XG4gICAgICAgIHt0aGlzLnJlbmRlckxvZ29JbWFnZSh0aGlzLnN1cnZleS5pc0xvZ29BZnRlcil9XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLmNzcy5oZWFkZXJDbG9zZX0+PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN1cnZleS1oZWFkZXJcIixcbiAgKHByb3BzOiBJU3VydmV5SGVhZGVyUHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlIZWFkZXIsIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1mYWN0b3J5XCI7XG5pbXBvcnQgeyBjcmVhdGVTdmcgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuZXhwb3J0IGNsYXNzIFN2Z0ljb24gZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8YW55LCBhbnk+IHtcbiAgcHJpdmF0ZSBzdmdJY29uUmVmOiBhbnk7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdmdJY29uUmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIH1cblxuICB1cGRhdGVTdmcoKSB7XG4gICAgaWYodGhpcy5wcm9wcy5pY29uTmFtZSlcbiAgICAgIGNyZWF0ZVN2ZyhcbiAgICAgICAgdGhpcy5wcm9wcy5zaXplLFxuICAgICAgICB0aGlzLnByb3BzLndpZHRoLFxuICAgICAgICB0aGlzLnByb3BzLmhlaWdodCxcbiAgICAgICAgdGhpcy5wcm9wcy5pY29uTmFtZSxcbiAgICAgICAgdGhpcy5zdmdJY29uUmVmLmN1cnJlbnRcbiAgICAgICk7XG4gIH1cbiAgY29tcG9uZW50RGlkVXBkYXRlKCkge1xuICAgIHRoaXMudXBkYXRlU3ZnKCk7XG4gIH1cbiAgcmVuZGVyKCkge1xuICAgIGxldCBjbGFzc05hbWUgPSBcInN2LXN2Zy1pY29uXCI7XG4gICAgaWYodGhpcy5wcm9wcy5jbGFzc05hbWUpIHtcbiAgICAgIGNsYXNzTmFtZSArPSBcIiBcIiArIHRoaXMucHJvcHMuY2xhc3NOYW1lO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5wcm9wcy5pY29uTmFtZSA/XG4gICAgICAgIDxzdmcgY2xhc3NOYW1lPXsgY2xhc3NOYW1lIH0gb25DbGljaz17dGhpcy5wcm9wcy5vbkNsaWNrfSByZWY9e3RoaXMuc3ZnSWNvblJlZn0gcm9sZT1cImltZ1wiPjx1c2U+PC91c2U+PC9zdmc+XG4gICAgICAgIDogbnVsbFxuICAgICk7XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgdGhpcy51cGRhdGVTdmcoKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2LXN2Zy1pY29uXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdmdJY29uLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFF1ZXN0aW9uLCBEZWZhdWx0VGl0bGVNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IFRpdGxlQ29udGVudCB9IGZyb20gXCIuL3RpdGxlLWNvbnRlbnRcIjtcblxuZXhwb3J0IGNsYXNzIERlZmF1bHRUaXRsZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxhbnksIGFueT4ge1xuICBwcml2YXRlIGlzTmVlZEZvY3VzID0gZmFsc2U7XG5cbiAgcHJvdGVjdGVkIGdldCBjc3NDbGFzc2VzKCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNzc0NsYXNzZXM7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBlbGVtZW50KCk6IFF1ZXN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5lbGVtZW50O1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIHZhciBleHBhbmRDb2xsYXBzZSA9IG51bGw7XG4gICAgaWYgKHRoaXMuZWxlbWVudC5pc0NvbGxhcHNlZCB8fCB0aGlzLmVsZW1lbnQuaXNFeHBhbmRlZCkge1xuICAgICAgY29uc3QgaWNvbkNzczogc3RyaW5nID0gRGVmYXVsdFRpdGxlTW9kZWwuZ2V0SWNvbkNzcyhcbiAgICAgICAgdGhpcy5jc3NDbGFzc2VzLCB0aGlzLmVsZW1lbnQuaXNDb2xsYXBzZWQpO1xuXG4gICAgICB2YXIgY2hhbmdlRXhwYW5kZWQgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICBsZXQgcXVlc3Rpb24gPSB0aGlzLmVsZW1lbnQ7XG5cbiAgICAgICAgaWYgKCFxdWVzdGlvbi5pc0V4cGFuZGVkICYmICFxdWVzdGlvbi5pc0NvbGxhcHNlZCkgcmV0dXJuO1xuXG4gICAgICAgIHF1ZXN0aW9uLnRvZ2dsZVN0YXRlKCk7XG4gICAgICAgIHRoaXMuaXNOZWVkRm9jdXMgPSBxdWVzdGlvbi5pc0NvbGxhcHNlZDtcbiAgICAgIH07XG4gICAgICB2YXIgcHJlc3NFeHBhbmQgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gMTMpIGNoYW5nZUV4cGFuZGVkKGV2ZW50KTtcbiAgICAgIH07XG4gICAgICB2YXIgYXJpYUV4cGFuZGVkID0gdGhpcy5lbGVtZW50LmlzRXhwYW5kZWQ7XG4gICAgICB2YXIgYXJpYUNvbnRyb2xzID0gdGhpcy5lbGVtZW50LmlzRXhwYW5kZWRcbiAgICAgICAgPyB0aGlzLmVsZW1lbnQuY29udGVudElkXG4gICAgICAgIDogbnVsbDtcbiAgICAgIGV4cGFuZENvbGxhcHNlID0gKFxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzTmFtZT17aWNvbkNzc31cbiAgICAgICAgICB0YWJJbmRleD17MH1cbiAgICAgICAgICBvbktleVVwPXtwcmVzc0V4cGFuZH1cbiAgICAgICAgICBhcmlhLWV4cGFuZGVkPXthcmlhRXhwYW5kZWR9XG4gICAgICAgICAgYXJpYS1jb250cm9scz17YXJpYUNvbnRyb2xzfVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIDxUaXRsZUNvbnRlbnRcbiAgICAgICAgICBlbGVtZW50PXt0aGlzLmVsZW1lbnR9XG4gICAgICAgICAgY3NzQ2xhc3Nlcz17dGhpcy5jc3NDbGFzc2VzfVxuICAgICAgICA+PC9UaXRsZUNvbnRlbnQ+XG4gICAgICAgIHtleHBhbmRDb2xsYXBzZX1cbiAgICAgIDwvPlxuICAgICk7XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICB0aGlzLmRvQWZ0ZXJSZW5kZXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgZG9BZnRlclJlbmRlcigpIHtcbiAgICBpZiAodGhpcy5pc05lZWRGb2N1cykge1xuICAgICAgdGhpcy5lbGVtZW50LmNsaWNrVGl0bGVGdW5jdGlvbigpO1xuICAgICAgdGhpcy5pc05lZWRGb2N1cyA9IGZhbHNlO1xuICAgIH1cbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2LWRlZmF1bHQtdGl0bGVcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KERlZmF1bHRUaXRsZSwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50LCBSZW5kZXJlckZhY3RvcnkgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1mYWN0b3J5XCI7XG5pbXBvcnQgeyBTdXJ2ZXlBY3Rpb25CYXIgfSBmcm9tIFwiLi4vYWN0aW9uLWJhci9hY3Rpb24tYmFyXCI7XG5pbXBvcnQgeyBUaXRsZUNvbnRlbnQgfSBmcm9tIFwiLi90aXRsZS1jb250ZW50XCI7XG5cbmV4cG9ydCBjbGFzcyBUaXRsZUFjdGlvbnMgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8YW55LCBhbnk+IHtcbiAgcHJvdGVjdGVkIGdldCBjc3NDbGFzc2VzKCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNzc0NsYXNzZXM7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBlbGVtZW50KCk6IFN1cnZleUVsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmVsZW1lbnQ7XG4gIH1cblxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHRpdGxlQ29udGVudDogSlNYLkVsZW1lbnQgPSA8VGl0bGVDb250ZW50IGVsZW1lbnQ9e3RoaXMuZWxlbWVudH0gY3NzQ2xhc3Nlcz17dGhpcy5jc3NDbGFzc2VzfT48L1RpdGxlQ29udGVudD47XG4gICAgaWYoIXRoaXMuZWxlbWVudC5oYXNUaXRsZUFjdGlvbnMpIHJldHVybiB0aXRsZUNvbnRlbnQ7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3YtdGl0bGUtYWN0aW9uc1wiPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzdi10aXRsZS1hY3Rpb25zX190aXRsZVwiPnt0aXRsZUNvbnRlbnR9PC9zcGFuPlxuICAgICAgICA8U3VydmV5QWN0aW9uQmFyIG1vZGVsPXt0aGlzLmVsZW1lbnQuZ2V0VGl0bGVUb29sYmFyKCl9PjwvU3VydmV5QWN0aW9uQmFyPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZW5kZXJlckZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJSZW5kZXJlcihcbiAgXCJlbGVtZW50XCIsXG4gIFwidGl0bGUtYWN0aW9uc1wiLFxuICBcInN2LXRpdGxlLWFjdGlvbnNcIlxuKTtcblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdi10aXRsZS1hY3Rpb25zXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUaXRsZUFjdGlvbnMsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudENvcmUgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcIi4uLy4uL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgSVRpdGxlT3duZXIgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuZXhwb3J0IGNsYXNzIFRpdGxlQ29udGVudCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxhbnksIGFueT4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgY3NzQ2xhc3NlcygpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jc3NDbGFzc2VzO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgZWxlbWVudCgpOiBTdXJ2ZXlFbGVtZW50Q29yZSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZWxlbWVudDtcbiAgfVxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHRpdGxlT3duZXIgPSB0aGlzLmVsZW1lbnQuZ2V0VGl0bGVPd25lcigpO1xuICAgIGlmKCF0aXRsZU93bmVyKVxuICAgICAgcmV0dXJuIFN1cnZleUVsZW1lbnRCYXNlLnJlbmRlckxvY1N0cmluZyh0aGlzLmVsZW1lbnQubG9jVGl0bGUpO1xuICAgIHZhciBzcGFucyA9IHRoaXMucmVuZGVyVGl0bGVTcGFucyh0aXRsZU93bmVyLCB0aGlzLmNzc0NsYXNzZXMpO1xuICAgIHJldHVybiA8PntzcGFuc308Lz47XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlclRpdGxlU3BhbnMoZWxlbWVudDogSVRpdGxlT3duZXIsIGNzc0NsYXNzZXM6IGFueSk6IEFycmF5PEpTWC5FbGVtZW50PiB7XG4gICAgdmFyIGdldFNwYWNlU3BhbiA9IChrZXk6IGFueSkgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPHNwYW4gZGF0YS1rZXk9e2tleX0ga2V5PXtrZXl9PlxuICAgICAgICAgICZuYnNwO1xuICAgICAgICA8L3NwYW4+XG4gICAgICApO1xuICAgIH07XG4gICAgdmFyIHNwYW5zID0gW107XG4gICAgaWYgKGVsZW1lbnQuaXNSZXF1aXJlVGV4dE9uU3RhcnQpIHtcbiAgICAgIHNwYW5zLnB1c2godGhpcy5yZW5kZXJSZXF1aXJlVGV4dChlbGVtZW50LCBjc3NDbGFzc2VzKSk7XG4gICAgICBzcGFucy5wdXNoKGdldFNwYWNlU3BhbihcInJlcS1zcFwiKSk7XG4gICAgfVxuICAgIHZhciBxdWVzdGlvbk51bWJlciA9IGVsZW1lbnQubm87XG4gICAgaWYgKHF1ZXN0aW9uTnVtYmVyKSB7XG4gICAgICBzcGFucy5wdXNoKFxuICAgICAgICA8c3BhblxuICAgICAgICAgIGRhdGEta2V5PXtcInFfbnVtXCJ9XG4gICAgICAgICAga2V5PXtcInFfbnVtXCJ9XG4gICAgICAgICAgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLm51bWJlcn1cbiAgICAgICAgICBzdHlsZT17eyBwb3NpdGlvbjogXCJzdGF0aWNcIiB9fVxuICAgICAgICAgIGFyaWEtaGlkZGVuPXt0cnVlfVxuICAgICAgICA+XG4gICAgICAgICAge3F1ZXN0aW9uTnVtYmVyfVxuICAgICAgICA8L3NwYW4+XG4gICAgICApO1xuICAgICAgc3BhbnMucHVzaChnZXRTcGFjZVNwYW4oXCJudW0tc3BcIikpO1xuICAgIH1cbiAgICBpZiAoZWxlbWVudC5pc1JlcXVpcmVUZXh0QmVmb3JlVGl0bGUpIHtcbiAgICAgIHNwYW5zLnB1c2godGhpcy5yZW5kZXJSZXF1aXJlVGV4dChlbGVtZW50LCBjc3NDbGFzc2VzKSk7XG4gICAgICBzcGFucy5wdXNoKGdldFNwYWNlU3BhbihcInJlcS1zcFwiKSk7XG4gICAgfVxuICAgIHNwYW5zLnB1c2goXG4gICAgICBTdXJ2ZXlFbGVtZW50QmFzZS5yZW5kZXJMb2NTdHJpbmcoZWxlbWVudC5sb2NUaXRsZSwgbnVsbCwgXCJxX3RpdGxlXCIpXG4gICAgKTtcbiAgICBpZiAoZWxlbWVudC5pc1JlcXVpcmVUZXh0QWZ0ZXJUaXRsZSkge1xuICAgICAgc3BhbnMucHVzaChnZXRTcGFjZVNwYW4oXCJyZXEtc3BcIikpO1xuICAgICAgc3BhbnMucHVzaCh0aGlzLnJlbmRlclJlcXVpcmVUZXh0KGVsZW1lbnQsIGNzc0NsYXNzZXMpKTtcbiAgICB9XG4gICAgcmV0dXJuIHNwYW5zO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJSZXF1aXJlVGV4dChcbiAgICBlbGVtZW50OiBJVGl0bGVPd25lcixcbiAgICBjc3NDbGFzc2VzOiBhbnlcbiAgKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8c3BhblxuICAgICAgICBkYXRhLWtleT17XCJyZXEtdGV4dFwifVxuICAgICAgICBrZXk9e1wicmVxLXRleHRcIn1cbiAgICAgICAgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLnJlcXVpcmVkVGV4dCB8fCBjc3NDbGFzc2VzLnBhbmVsLnJlcXVpcmVkVGV4dH1cbiAgICAgICAgYXJpYS1oaWRkZW49e3RydWV9XG4gICAgICA+XG4gICAgICAgIHtlbGVtZW50LnJlcXVpcmVkVGV4dH1cbiAgICAgIDwvc3Bhbj5cbiAgICApO1xuICB9XG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50Q29yZSwgZG9LZXkyQ2xpY2tVcCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgVGl0bGVBY3Rpb25zIH0gZnJvbSBcIi4vdGl0bGUtYWN0aW9uc1wiO1xuXG5leHBvcnQgY2xhc3MgVGl0bGVFbGVtZW50IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PGFueSwgYW55PiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgZWxlbWVudCgpOiBTdXJ2ZXlFbGVtZW50Q29yZSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZWxlbWVudDtcbiAgfVxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmVsZW1lbnQ7XG4gICAgaWYgKCFlbGVtZW50IHx8ICFlbGVtZW50Lmhhc1RpdGxlKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCB0aXRsZUNvbnRlbnQgPSAoXG4gICAgICA8VGl0bGVBY3Rpb25zXG4gICAgICAgIGVsZW1lbnQ9e2VsZW1lbnR9XG4gICAgICAgIGNzc0NsYXNzZXM9e2VsZW1lbnQuY3NzQ2xhc3Nlc31cbiAgICAgID48L1RpdGxlQWN0aW9ucz5cbiAgICApO1xuICAgIGxldCBvbkNsaWNrID0gbnVsbDtcbiAgICBsZXQgb25LZXlVcCA9IG51bGw7XG4gICAgaWYgKGVsZW1lbnQuaGFzVGl0bGVFdmVudHMpIHtcbiAgICAgIG9uQ2xpY2sgPSAoKSA9PiB7XG4gICAgICAgIHJldHVybiBlbGVtZW50LnRvZ2dsZVN0YXRlKCk7XG4gICAgICB9O1xuICAgICAgb25LZXlVcCA9IChldnQ6IGFueSkgPT4ge1xuICAgICAgICBkb0tleTJDbGlja1VwKGV2dC5uYXRpdmVFdmVudCk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IEN1c3RvbVRhZyA9IGVsZW1lbnQudGl0bGVUYWdOYW1lIGFzIGtleW9mIEpTWC5JbnRyaW5zaWNFbGVtZW50cztcbiAgICByZXR1cm4gKFxuICAgICAgPEN1c3RvbVRhZ1xuICAgICAgICBjbGFzc05hbWU9e2VsZW1lbnQuY3NzVGl0bGV9XG4gICAgICAgIGlkPXtlbGVtZW50LmFyaWFUaXRsZUlkfVxuICAgICAgICBhcmlhLWxhYmVsPXtcbiAgICAgICAgICBlbGVtZW50LmdldFR5cGUoKSA9PT0gXCJyYWRpb2dyb3VwXCJcbiAgICAgICAgICAgID8gXCJcIlxuICAgICAgICAgICAgOiBlbGVtZW50LmxvY1RpdGxlLnJlbmRlcmVkSHRtbFxuICAgICAgICB9XG4gICAgICAgIHRhYkluZGV4PXtlbGVtZW50LnRpdGxlVGFiSW5kZXh9XG4gICAgICAgIGFyaWEtZXhwYW5kZWQ9e2VsZW1lbnQudGl0bGVBcmlhRXhwYW5kZWR9XG4gICAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgICAgIG9uS2V5VXA9e29uS2V5VXB9XG4gICAgICA+XG4gICAgICAgIHt0aXRsZUNvbnRlbnR9XG4gICAgICA8L0N1c3RvbVRhZz5cbiAgICApO1xuICB9XG59XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleUN1c3RvbVdpZGdldCBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Uge1xuICBwcml2YXRlIHdpZGdldFJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLndpZGdldFJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICB9XG4gIHByaXZhdGUgX2FmdGVyUmVuZGVyKCkge1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uQmFzZS5jdXN0b21XaWRnZXQpIHtcbiAgICAgIGxldCBlbCA9IHRoaXMud2lkZ2V0UmVmLmN1cnJlbnQ7XG4gICAgICBpZiAoISFlbCkge1xuICAgICAgICB0aGlzLnF1ZXN0aW9uQmFzZS5jdXN0b21XaWRnZXQuYWZ0ZXJSZW5kZXIodGhpcy5xdWVzdGlvbkJhc2UsIGVsKTtcbiAgICAgICAgdGhpcy5xdWVzdGlvbkJhc2UuY3VzdG9tV2lkZ2V0RGF0YS5pc05lZWRSZW5kZXIgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICBpZiAodGhpcy5xdWVzdGlvbkJhc2UpIHtcbiAgICAgIHRoaXMuX2FmdGVyUmVuZGVyKCk7XG4gICAgfVxuICB9XG4gIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHM6IGFueSwgcHJldlN0YXRlOiBhbnkpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUpO1xuICAgIHZhciBpc0RlZmF1bHRSZW5kZXIgPVxuICAgICAgISF0aGlzLnF1ZXN0aW9uQmFzZS5jdXN0b21XaWRnZXQgJiZcbiAgICAgIHRoaXMucXVlc3Rpb25CYXNlLmN1c3RvbVdpZGdldC5pc0RlZmF1bHRSZW5kZXI7XG4gICAgaWYgKHRoaXMucXVlc3Rpb25CYXNlICYmICFpc0RlZmF1bHRSZW5kZXIpIHtcbiAgICAgIHRoaXMuX2FmdGVyUmVuZGVyKCk7XG4gICAgfVxuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAgaWYgKHRoaXMucXVlc3Rpb25CYXNlLmN1c3RvbVdpZGdldCkge1xuICAgICAgbGV0IGVsID0gdGhpcy53aWRnZXRSZWYuY3VycmVudDtcbiAgICAgIGlmICghIWVsKSB7XG4gICAgICAgIHRoaXMucXVlc3Rpb25CYXNlLmN1c3RvbVdpZGdldC53aWxsVW5tb3VudCh0aGlzLnF1ZXN0aW9uQmFzZSwgZWwpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzdXBlci5jYW5SZW5kZXIoKSAmJiB0aGlzLnF1ZXN0aW9uQmFzZS52aXNpYmxlO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBsZXQgY3VzdG9tV2lkZ2V0ID0gdGhpcy5xdWVzdGlvbkJhc2UuY3VzdG9tV2lkZ2V0O1xuXG4gICAgaWYgKGN1c3RvbVdpZGdldC5pc0RlZmF1bHRSZW5kZXIpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxkaXYgcmVmPXt0aGlzLndpZGdldFJlZn0+XG4gICAgICAgICAge3RoaXMuY3JlYXRvci5jcmVhdGVRdWVzdGlvbkVsZW1lbnQodGhpcy5xdWVzdGlvbkJhc2UpfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgbGV0IHdpZGdldCA9IG51bGw7XG4gICAgaWYgKGN1c3RvbVdpZGdldC53aWRnZXRKc29uLnJlbmRlcikge1xuICAgICAgd2lkZ2V0ID0gY3VzdG9tV2lkZ2V0LndpZGdldEpzb24ucmVuZGVyKHRoaXMucXVlc3Rpb25CYXNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGN1c3RvbVdpZGdldC5odG1sVGVtcGxhdGUpIHtcbiAgICAgICAgbGV0IGh0bWxWYWx1ZSA9IHsgX19odG1sOiBjdXN0b21XaWRnZXQuaHRtbFRlbXBsYXRlIH07XG4gICAgICAgIHJldHVybiA8ZGl2IHJlZj17dGhpcy53aWRnZXRSZWZ9IGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXtodG1sVmFsdWV9IC8+O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gPGRpdiByZWY9e3RoaXMud2lkZ2V0UmVmfT57d2lkZ2V0fTwvZGl2PjtcbiAgfVxufVxuIiwiaW1wb3J0IHsgSGFzaFRhYmxlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbmV4cG9ydCBjbGFzcyBSZWFjdEVsZW1lbnRGYWN0b3J5IHtcbiAgcHVibGljIHN0YXRpYyBJbnN0YW5jZTogUmVhY3RFbGVtZW50RmFjdG9yeSA9IG5ldyBSZWFjdEVsZW1lbnRGYWN0b3J5KCk7XG4gIHByaXZhdGUgY3JlYXRvckhhc2g6IEhhc2hUYWJsZTwobmFtZTogc3RyaW5nKSA9PiBKU1guRWxlbWVudD4gPSB7fTtcblxuICBwdWJsaWMgcmVnaXN0ZXJFbGVtZW50KFxuICAgIGVsZW1lbnRUeXBlOiBzdHJpbmcsXG4gICAgZWxlbWVudENyZWF0b3I6IChwcm9wczogYW55KSA9PiBKU1guRWxlbWVudFxuICApIHtcbiAgICB0aGlzLmNyZWF0b3JIYXNoW2VsZW1lbnRUeXBlXSA9IGVsZW1lbnRDcmVhdG9yO1xuICB9XG4gIHB1YmxpYyBnZXRBbGxUeXBlcygpOiBBcnJheTxzdHJpbmc+IHtcbiAgICB2YXIgcmVzdWx0ID0gbmV3IEFycmF5PHN0cmluZz4oKTtcbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5jcmVhdG9ySGFzaCkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdC5zb3J0KCk7XG4gIH1cbiAgcHVibGljIGlzRWxlbWVudFJlZ2lzdGVyZWQoZWxlbWVudFR5cGU6IHN0cmluZykge1xuICAgIHJldHVybiAhIXRoaXMuY3JlYXRvckhhc2hbZWxlbWVudFR5cGVdO1xuICB9XG4gIHB1YmxpYyBjcmVhdGVFbGVtZW50KGVsZW1lbnRUeXBlOiBzdHJpbmcsIHBhcmFtczogYW55KTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBjcmVhdG9yID0gdGhpcy5jcmVhdG9ySGFzaFtlbGVtZW50VHlwZV07XG4gICAgaWYgKGNyZWF0b3IgPT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIGNyZWF0b3IocGFyYW1zKTtcbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBGbG93UGFuZWxNb2RlbCwgUXVlc3Rpb24gfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IFN1cnZleVBhbmVsIH0gZnJvbSBcIi4vcGFuZWxcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvblwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5Rmxvd1BhbmVsIGV4dGVuZHMgU3VydmV5UGFuZWwge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHB1YmxpYyBnZXQgZmxvd1BhbmVsKCk6IEZsb3dQYW5lbE1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wYW5lbCBhcyBGbG93UGFuZWxNb2RlbDtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIGlmICghIXRoaXMuZmxvd1BhbmVsKSB7XG4gICAgICB0aGlzLmZsb3dQYW5lbC5vbkN1c3RvbUh0bWxQcm9kdWNpbmcgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICB9O1xuICAgICAgdGhpcy5mbG93UGFuZWwub25HZXRIdG1sRm9yUXVlc3Rpb24gPSB0aGlzLnJlbmRlclF1ZXN0aW9uO1xuICAgIH1cbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIGlmICghIXRoaXMuZmxvd1BhbmVsKSB7XG4gICAgICB0aGlzLmZsb3dQYW5lbC5vbkN1c3RvbUh0bWxQcm9kdWNpbmcgPSBudWxsO1xuICAgICAgdGhpcy5mbG93UGFuZWwub25HZXRIdG1sRm9yUXVlc3Rpb24gPSBudWxsO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgZ2V0UXVlc3Rpb24obmFtZTogc3RyaW5nKTogUXVlc3Rpb24ge1xuICAgIHJldHVybiB0aGlzLmZsb3dQYW5lbC5nZXRRdWVzdGlvbkJ5TmFtZShuYW1lKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyUXVlc3Rpb24ocXVlc3Rpb246IFF1ZXN0aW9uKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCI8cXVlc3Rpb24+XCIgKyBxdWVzdGlvbi5uYW1lICsgXCI8L3F1ZXN0aW9uPlwiO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJSb3dzKCk6IEFycmF5PEpTWC5FbGVtZW50PiB7XG4gICAgcmV0dXJuIFt0aGlzLnJlbmRlckh0bWwoKV07XG4gIH1cbiAgcHJpdmF0ZSByZW5kZXJlZEluZGV4OiBudW1iZXI7XG4gIHByaXZhdGUgZ2V0Tm9kZUluZGV4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucmVuZGVyZWRJbmRleCsrO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJIdG1sKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMuZmxvd1BhbmVsKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBodG1sID0gXCI8c3Bhbj5cIiArIHRoaXMuZmxvd1BhbmVsLnByb2R1Y2VIdG1sKCkgKyBcIjwvc3Bhbj5cIjtcbiAgICBpZiAoIURPTVBhcnNlcikge1xuICAgICAgY29uc3QgaHRtbFZhbHVlID0geyBfX2h0bWw6IGh0bWwgfTtcbiAgICAgIHJldHVybiA8ZGl2IGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXtodG1sVmFsdWV9IC8+O1xuICAgIH1cbiAgICBjb25zdCBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKGh0bWwsIFwidGV4dC94bWxcIik7XG4gICAgdGhpcy5yZW5kZXJlZEluZGV4ID0gMDtcbiAgICByZXR1cm4gdGhpcy5yZW5kZXJQYXJlbnROb2RlKGRvYyk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlck5vZGVzKGRvbU5vZGVzOiBBcnJheTxOb2RlPik6IEFycmF5PEpTWC5FbGVtZW50PiB7XG4gICAgY29uc3Qgbm9kZXMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRvbU5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBub2Rlcy5wdXNoKHRoaXMucmVuZGVyTm9kZShkb21Ob2Rlc1tpXSkpO1xuICAgIH1cbiAgICByZXR1cm4gbm9kZXM7XG4gIH1cbiAgcHJpdmF0ZSBnZXRTdHlsZShub2RlVHlwZTogc3RyaW5nKSB7XG4gICAgY29uc3Qgc3R5bGU6IGFueSA9IHt9O1xuICAgIGlmIChub2RlVHlwZS50b0xvd2VyQ2FzZSgpID09PSBcImJcIikge1xuICAgICAgc3R5bGUuZm9udFdlaWdodCA9IFwiYm9sZFwiO1xuICAgIH1cbiAgICBpZiAobm9kZVR5cGUudG9Mb3dlckNhc2UoKSA9PT0gXCJpXCIpIHtcbiAgICAgIHN0eWxlLmZvbnRTdHlsZSA9IFwiaXRhbGljXCI7XG4gICAgfVxuICAgIGlmIChub2RlVHlwZS50b0xvd2VyQ2FzZSgpID09PSBcInVcIikge1xuICAgICAgc3R5bGUudGV4dERlY29yYXRpb24gPSBcInVuZGVybGluZVwiO1xuICAgIH1cbiAgICByZXR1cm4gc3R5bGU7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlclBhcmVudE5vZGUobm9kZTogTm9kZSk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBub2RlVHlwZSA9IG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMucmVuZGVyTm9kZXModGhpcy5nZXRDaGlsZERvbU5vZGVzKG5vZGUpKTtcbiAgICBpZiAobm9kZVR5cGUgPT09IFwiZGl2XCIpXG4gICAgICByZXR1cm4gPGRpdiBrZXk9e3RoaXMuZ2V0Tm9kZUluZGV4KCl9PntjaGlsZHJlbn08L2Rpdj47XG4gICAgcmV0dXJuIChcbiAgICAgIDxzcGFuIGtleT17dGhpcy5nZXROb2RlSW5kZXgoKX0gc3R5bGU9e3RoaXMuZ2V0U3R5bGUobm9kZVR5cGUpfT5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgPC9zcGFuPlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlck5vZGUobm9kZTogTm9kZSk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMuaGFzVGV4dENoaWxkTm9kZXNPbmx5KG5vZGUpKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJQYXJlbnROb2RlKG5vZGUpO1xuICAgIH1cbiAgICBjb25zdCBub2RlVHlwZSA9IG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAobm9kZVR5cGUgPT09IFwicXVlc3Rpb25cIikge1xuICAgICAgY29uc3QgcXVlc3Rpb24gPSB0aGlzLmZsb3dQYW5lbC5nZXRRdWVzdGlvbkJ5TmFtZShub2RlLnRleHRDb250ZW50KTtcbiAgICAgIGlmICghcXVlc3Rpb24pIHJldHVybiBudWxsO1xuICAgICAgY29uc3QgcXVlc3Rpb25Cb2R5ID0gKFxuICAgICAgICA8U3VydmV5UXVlc3Rpb25cbiAgICAgICAgICBrZXk9e3F1ZXN0aW9uLm5hbWV9XG4gICAgICAgICAgZWxlbWVudD17cXVlc3Rpb259XG4gICAgICAgICAgY3JlYXRvcj17dGhpcy5jcmVhdG9yfVxuICAgICAgICAgIGNzcz17dGhpcy5jc3N9XG4gICAgICAgIC8+XG4gICAgICApO1xuICAgICAgcmV0dXJuIDxzcGFuIGtleT17dGhpcy5nZXROb2RlSW5kZXgoKX0+e3F1ZXN0aW9uQm9keX08L3NwYW4+O1xuICAgIH1cbiAgICBpZiAobm9kZVR5cGUgPT09IFwiZGl2XCIpIHtcbiAgICAgIHJldHVybiA8ZGl2IGtleT17dGhpcy5nZXROb2RlSW5kZXgoKX0+e25vZGUudGV4dENvbnRlbnR9PC9kaXY+O1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPHNwYW4ga2V5PXt0aGlzLmdldE5vZGVJbmRleCgpfSBzdHlsZT17dGhpcy5nZXRTdHlsZShub2RlVHlwZSl9PlxuICAgICAgICB7bm9kZS50ZXh0Q29udGVudH1cbiAgICAgIDwvc3Bhbj5cbiAgICApO1xuICB9XG4gIHByaXZhdGUgZ2V0Q2hpbGREb21Ob2Rlcyhub2RlOiBOb2RlKTogQXJyYXk8Tm9kZT4ge1xuICAgIGNvbnN0IGRvbU5vZGVzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlLmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGRvbU5vZGVzLnB1c2gobm9kZS5jaGlsZE5vZGVzW2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIGRvbU5vZGVzO1xuICB9XG4gIHByaXZhdGUgaGFzVGV4dENoaWxkTm9kZXNPbmx5KG5vZGU6IE5vZGUpOiBib29sZWFuIHtcbiAgICBjb25zdCBub2RlcyA9IG5vZGUuY2hpbGROb2RlcztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAobm9kZXNbaV0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSAhPT0gXCIjdGV4dFwiKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJDb250ZW50KHN0eWxlOiBhbnksIHJvd3M6IEpTWC5FbGVtZW50W10pOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJmLXBhbmVsXCIsIHsgc3R5bGU6IHN0eWxlIH0sIHJvd3MpO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwiZmxvd3BhbmVsXCIsIHByb3BzID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5Rmxvd1BhbmVsLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25JbWFnZU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25JbWFnZSBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Uge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgdGhpcy5xdWVzdGlvbi5sb2NJbWFnZUxpbmsub25DaGFuZ2VkID0gKCkgPT4ge1xuICAgICAgdGhpcy5mb3JjZVVwZGF0ZSgpO1xuICAgIH07XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICB0aGlzLnF1ZXN0aW9uLmxvY0ltYWdlTGluay5vbkNoYW5nZWQgPSAoKSA9PiB7IH07XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uSW1hZ2VNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFF1ZXN0aW9uSW1hZ2VNb2RlbDtcbiAgfVxuICBwcm90ZWN0ZWQgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzdXBlci5jYW5SZW5kZXIoKSAmJiAhIXRoaXMucXVlc3Rpb24uaW1hZ2VMaW5rO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgY3NzQ2xhc3NlcyA9IHRoaXMucXVlc3Rpb24uZ2V0SW1hZ2VDc3MoKTtcbiAgICB2YXIgc3R5bGU6IGFueSA9IHsgb2JqZWN0Rml0OiB0aGlzLnF1ZXN0aW9uLmltYWdlRml0IH07XG4gICAgdmFyIGNvbnRyb2wgPSBudWxsO1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkTW9kZSA9PT0gXCJpbWFnZVwiKSB7XG4gICAgICBjb250cm9sID0gKFxuICAgICAgICA8aW1nXG4gICAgICAgICAgY2xhc3NOYW1lPXtjc3NDbGFzc2VzfVxuICAgICAgICAgIHNyYz17dGhpcy5xdWVzdGlvbi5sb2NJbWFnZUxpbmsucmVuZGVyZWRIdG1sfVxuICAgICAgICAgIGFsdD17dGhpcy5xdWVzdGlvbi50ZXh0IHx8IHRoaXMucXVlc3Rpb24udGl0bGV9XG4gICAgICAgICAgd2lkdGg9e3RoaXMucXVlc3Rpb24ucmVuZGVyZWRXaWR0aH1cbiAgICAgICAgICBoZWlnaHQ9e3RoaXMucXVlc3Rpb24ucmVuZGVyZWRIZWlnaHR9XG4gICAgICAgICAgLy9hbHQ9e2l0ZW0udGV4dCB8fCBpdGVtLnZhbHVlfVxuICAgICAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfVxuICAgIGlmICh0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkTW9kZSA9PT0gXCJ2aWRlb1wiKSB7XG4gICAgICBjb250cm9sID0gKFxuICAgICAgICA8dmlkZW8gY29udHJvbHNcbiAgICAgICAgICBjbGFzc05hbWU9e2Nzc0NsYXNzZXN9XG4gICAgICAgICAgc3JjPXt0aGlzLnF1ZXN0aW9uLmltYWdlTGlua31cbiAgICAgICAgICB3aWR0aD17dGhpcy5xdWVzdGlvbi5yZW5kZXJlZFdpZHRofVxuICAgICAgICAgIGhlaWdodD17dGhpcy5xdWVzdGlvbi5yZW5kZXJlZEhlaWdodH1cbiAgICAgICAgICBzdHlsZT17c3R5bGV9XG4gICAgICAgID48L3ZpZGVvPlxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHRoaXMucXVlc3Rpb24ucmVuZGVyZWRNb2RlID09PSBcInlvdXR1YmVcIikge1xuICAgICAgY29udHJvbCA9IChcbiAgICAgICAgPGlmcmFtZVxuICAgICAgICAgIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlc31cbiAgICAgICAgICBzcmM9e3RoaXMucXVlc3Rpb24uaW1hZ2VMaW5rfVxuICAgICAgICAgIHdpZHRoPXt0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkV2lkdGh9XG4gICAgICAgICAgaGVpZ2h0PXt0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkSGVpZ2h0fVxuICAgICAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICAgICAgPjwvaWZyYW1lPlxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucm9vdH0+e2NvbnRyb2x9PC9kaXY+O1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJpbWFnZVwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25JbWFnZSwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRCYXNlLCBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBRdWVzdGlvbkltYWdlUGlja2VyTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IEl0ZW1WYWx1ZSwgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5pbXBvcnQgeyBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlciB9IGZyb20gXCIuL3JlYWN0c3VydmV5bW9kZWxcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uSW1hZ2VQaWNrZXIgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmhhbmRsZU9uQ2hhbmdlID0gdGhpcy5oYW5kbGVPbkNoYW5nZS5iaW5kKHRoaXMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25JbWFnZVBpY2tlck1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25JbWFnZVBpY2tlck1vZGVsO1xuICB9XG4gIGhhbmRsZU9uQ2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5xdWVzdGlvbi5tdWx0aVNlbGVjdCkge1xuICAgICAgaWYgKGV2ZW50LnRhcmdldC5jaGVja2VkKSB7XG4gICAgICAgIHRoaXMucXVlc3Rpb24udmFsdWUgPSB0aGlzLnF1ZXN0aW9uLnZhbHVlLmNvbmNhdChldmVudC50YXJnZXQudmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGN1cnJWYWx1ZSA9IHRoaXMucXVlc3Rpb24udmFsdWU7XG4gICAgICAgIGN1cnJWYWx1ZS5zcGxpY2UodGhpcy5xdWVzdGlvbi52YWx1ZS5pbmRleE9mKGV2ZW50LnRhcmdldC52YWx1ZSksIDEpO1xuICAgICAgICB0aGlzLnF1ZXN0aW9uLnZhbHVlID0gY3VyclZhbHVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnF1ZXN0aW9uLnZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgIH1cbiAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IHRoaXMucXVlc3Rpb24udmFsdWUgfSk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBjc3NDbGFzc2VzID0gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIHJldHVybiAoXG4gICAgICA8ZmllbGRzZXQgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLnJvb3R9PlxuICAgICAgICA8bGVnZW5kXG4gICAgICAgICAgcm9sZT1cInJhZGlvXCJcbiAgICAgICAgICBhcmlhLWxhYmVsPXt0aGlzLnF1ZXN0aW9uLmxvY1RpdGxlLnJlbmRlcmVkSHRtbH0gLz5cbiAgICAgICAge3RoaXMuZ2V0SXRlbXMoY3NzQ2xhc3Nlcyl9XG4gICAgICA8L2ZpZWxkc2V0PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldEl0ZW1zKGNzc0NsYXNzZXM6IGFueSk6IEFycmF5PGFueT4ge1xuICAgIHZhciBpdGVtcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5xdWVzdGlvbi52aXNpYmxlQ2hvaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGl0ZW0gPSB0aGlzLnF1ZXN0aW9uLnZpc2libGVDaG9pY2VzW2ldO1xuICAgICAgdmFyIGtleSA9IHRoaXMucXVlc3Rpb24ubmFtZSArIFwiLVwiICsgaXRlbS52YWx1ZTtcbiAgICAgIGl0ZW1zLnB1c2godGhpcy5yZW5kZXJJdGVtKGtleSwgaXRlbSwgY3NzQ2xhc3NlcykpO1xuICAgIH1cbiAgICByZXR1cm4gaXRlbXM7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCB0ZXh0U3R5bGUoKTogYW55IHtcbiAgICByZXR1cm4geyBtYXJnaW5MZWZ0OiBcIjNweFwiLCBkaXNwbGF5OiBcImlubGluZVwiLCBwb3NpdGlvbjogXCJzdGF0aWNcIiB9O1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJJdGVtKFxuICAgIGtleTogc3RyaW5nLFxuICAgIGl0ZW06IEl0ZW1WYWx1ZSxcbiAgICBjc3NDbGFzc2VzOiBhbnlcbiAgKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBpc0NoZWNrZWQgPSB0aGlzLnF1ZXN0aW9uLmlzSXRlbVNlbGVjdGVkKGl0ZW0pO1xuICAgIHZhciBpdGVtQ2xhc3MgPSB0aGlzLnF1ZXN0aW9uLmdldEl0ZW1DbGFzcyhpdGVtKTtcbiAgICB2YXIgdGV4dCA9IG51bGw7XG4gICAgaWYgKHRoaXMucXVlc3Rpb24uc2hvd0xhYmVsKSB7XG4gICAgICB0ZXh0ID0gKFxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLml0ZW1UZXh0fVxuICAgICAgICA+XG4gICAgICAgICAge2l0ZW0udGV4dCA/IFN1cnZleUVsZW1lbnRCYXNlLnJlbmRlckxvY1N0cmluZyhpdGVtLmxvY1RleHQpIDogaXRlbS52YWx1ZX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICB2YXIgc3R5bGU6IGFueSA9IHsgb2JqZWN0Rml0OiB0aGlzLnF1ZXN0aW9uLmltYWdlRml0IH07XG5cbiAgICB2YXIgY29udHJvbCA9IG51bGw7XG4gICAgaWYgKHRoaXMucXVlc3Rpb24uY29udGVudE1vZGUgPT09IFwiaW1hZ2VcIikge1xuICAgICAgY29udHJvbCA9IChcbiAgICAgICAgPGltZ1xuICAgICAgICAgIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5pbWFnZX1cbiAgICAgICAgICBzcmM9e2l0ZW1bXCJpbWFnZUxpbmtcIl19XG4gICAgICAgICAgd2lkdGg9eyB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkSW1hZ2VXaWR0aCB9XG4gICAgICAgICAgaGVpZ2h0PXsgdGhpcy5xdWVzdGlvbi5yZW5kZXJlZEltYWdlSGVpZ2h0IH1cbiAgICAgICAgICBhbHQ9e2l0ZW0ubG9jVGV4dC5yZW5kZXJlZEh0bWx9XG4gICAgICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHRoaXMucXVlc3Rpb24uY29udGVudE1vZGUgPT09IFwidmlkZW9cIikge1xuICAgICAgY29udHJvbCA9IChcbiAgICAgICAgPHZpZGVvIGNvbnRyb2xzXG4gICAgICAgICAgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLmltYWdlfVxuICAgICAgICAgIHNyYz17aXRlbVtcImltYWdlTGlua1wiXX1cbiAgICAgICAgICB3aWR0aD17IHRoaXMucXVlc3Rpb24ucmVuZGVyZWRJbWFnZVdpZHRoIH1cbiAgICAgICAgICBoZWlnaHQ9eyB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkSW1hZ2VIZWlnaHQgfVxuICAgICAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICAgICAgPjwvdmlkZW8+XG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHJlbmRlcmVkSXRlbSA9IChcbiAgICAgIDxkaXYga2V5PXtrZXl9IGNsYXNzTmFtZT17aXRlbUNsYXNzfT5cbiAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5sYWJlbH0+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuaXRlbUNvbnRyb2x9XG4gICAgICAgICAgICBpZD17dGhpcy5xdWVzdGlvbi5nZXRJdGVtSWQoaXRlbSl9XG4gICAgICAgICAgICB0eXBlPXt0aGlzLnF1ZXN0aW9uLmlucHV0VHlwZX1cbiAgICAgICAgICAgIG5hbWU9e3RoaXMucXVlc3Rpb24ucXVlc3Rpb25OYW1lfVxuICAgICAgICAgICAgY2hlY2tlZD17aXNDaGVja2VkfVxuICAgICAgICAgICAgdmFsdWU9e2l0ZW0udmFsdWV9XG4gICAgICAgICAgICBkaXNhYmxlZD17IXRoaXMucXVlc3Rpb24uZ2V0SXRlbUVuYWJsZWQoaXRlbSl9XG4gICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVPbkNoYW5nZX1cbiAgICAgICAgICAgIGFyaWEtcmVxdWlyZWQ9e3RoaXMucXVlc3Rpb24uYXJpYVJlcXVpcmVkfVxuICAgICAgICAgICAgYXJpYS1sYWJlbD17dGhpcy5xdWVzdGlvbi5hcmlhTGFiZWx9XG4gICAgICAgICAgICBhcmlhLWludmFsaWQ9e3RoaXMucXVlc3Rpb24uYXJpYUludmFsaWR9XG4gICAgICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PXt0aGlzLnF1ZXN0aW9uLmFyaWFEZXNjcmliZWRCeX1cbiAgICAgICAgICAvPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaXRlbURlY29yYXRvcn0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmltYWdlQ29udGFpbmVyfT5cbiAgICAgICAgICAgICAge2NvbnRyb2x9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIHt0ZXh0fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgICBjb25zdCBzdXJ2ZXkgPSB0aGlzLnF1ZXN0aW9uLnN1cnZleSBhcyBTdXJ2ZXlNb2RlbDtcbiAgICBsZXQgd3JhcHBlZEl0ZW0gPSBudWxsO1xuICAgIGlmKCEhc3VydmV5KSB7XG4gICAgICB3cmFwcGVkSXRlbSA9IFJlYWN0U3VydmV5RWxlbWVudHNXcmFwcGVyLndyYXBJdGVtVmFsdWUoc3VydmV5LCByZW5kZXJlZEl0ZW0sIHRoaXMucXVlc3Rpb24sIGl0ZW0pO1xuICAgIH1cbiAgICByZXR1cm4gd3JhcHBlZEl0ZW0gPz8gcmVuZGVyZWRJdGVtO1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJpbWFnZXBpY2tlclwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25JbWFnZVBpY2tlciwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFBhZ2VNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFBhbmVsTW9kZWxCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlQYW5lbEJhc2UgfSBmcm9tIFwiLi9wYW5lbC1iYXNlXCI7XG5pbXBvcnQgeyBUaXRsZUVsZW1lbnQgfSBmcm9tIFwiLi9jb21wb25lbnRzL3RpdGxlL3RpdGxlLWVsZW1lbnRcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVBhZ2UgZXh0ZW5kcyBTdXJ2ZXlQYW5lbEJhc2Uge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRQYW5lbEJhc2UoKTogUGFuZWxNb2RlbEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnBhZ2U7XG4gIH1cbiAgcHVibGljIGdldCBwYWdlKCk6IFBhZ2VNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucGFuZWxCYXNlIGFzIFBhZ2VNb2RlbDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIHRpdGxlID0gdGhpcy5yZW5kZXJUaXRsZSgpO1xuICAgIHZhciBkZXNjcmlwdGlvbiA9IHRoaXMucmVuZGVyRGVzY3JpcHRpb24oKTtcbiAgICB2YXIgcm93cyA9IHRoaXMucmVuZGVyUm93cyh0aGlzLnBhbmVsQmFzZS5jc3NDbGFzc2VzKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiByZWY9e3RoaXMucm9vdFJlZn0gY2xhc3NOYW1lPXt0aGlzLnBhbmVsQmFzZS5jc3NDbGFzc2VzLnBhZ2Uucm9vdH0+XG4gICAgICAgIHt0aXRsZX1cbiAgICAgICAge2Rlc2NyaXB0aW9ufVxuICAgICAgICB7cm93c31cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlclRpdGxlKCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gPFRpdGxlRWxlbWVudCBlbGVtZW50PXt0aGlzLnBhZ2V9PjwvVGl0bGVFbGVtZW50PjtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRGVzY3JpcHRpb24oKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5wYWdlLl9zaG93RGVzY3JpcHRpb24pIHJldHVybiBudWxsO1xuICAgIHZhciB0ZXh0ID0gU3VydmV5RWxlbWVudEJhc2UucmVuZGVyTG9jU3RyaW5nKHRoaXMucGFnZS5sb2NEZXNjcmlwdGlvbik7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLnBhbmVsQmFzZS5jc3NDbGFzc2VzLnBhZ2UuZGVzY3JpcHRpb259Pnt0ZXh0fTwvZGl2PlxuICAgICk7XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgSVN1cnZleUNyZWF0b3IgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uXCI7XG5pbXBvcnQgeyBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUXVlc3Rpb25Sb3dNb2RlbCwgUGFuZWxNb2RlbCwgUGFuZWxNb2RlbEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlSb3cgfSBmcm9tIFwiLi9yb3dcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVBhbmVsQmFzZSBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPGFueSwgYW55PiB7XG4gIHByb3RlY3RlZCByb290UmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMucm9vdFJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMucGFuZWxCYXNlO1xuICB9XG4gIHByb3RlY3RlZCBjYW5Vc2VQcm9wSW5TdGF0ZShrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBrZXkgIT09IFwiZWxlbWVudHNcIiAmJiBzdXBlci5jYW5Vc2VQcm9wSW5TdGF0ZShrZXkpO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgc3VydmV5KCk6IFN1cnZleU1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdXJ2ZXkoKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGNyZWF0b3IoKTogSVN1cnZleUNyZWF0b3Ige1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNyZWF0b3I7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBjc3MoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5nZXRDc3MoKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHBhbmVsQmFzZSgpOiBQYW5lbE1vZGVsQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UGFuZWxCYXNlKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFBhbmVsQmFzZSgpOiBQYW5lbE1vZGVsQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZWxlbWVudCB8fCB0aGlzLnByb3BzLnF1ZXN0aW9uO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdXJ2ZXkoKTogU3VydmV5TW9kZWwge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnByb3BzLnN1cnZleSB8fCAoISF0aGlzLnBhbmVsQmFzZSA/IHRoaXMucGFuZWxCYXNlLnN1cnZleSA6IG51bGwpXG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Q3NzKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3NzO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgdGhpcy5kb0FmdGVyUmVuZGVyKCk7XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICB2YXIgZWwgPSB0aGlzLnJvb3RSZWYuY3VycmVudDtcbiAgICBpZiAoISFlbCkge1xuICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKFwiZGF0YS1yZW5kZXJlZFwiKTtcbiAgICB9XG4gIH1cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogYW55LCBwcmV2U3RhdGU6IGFueSkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSk7XG4gICAgaWYgKFxuICAgICAgISFwcmV2UHJvcHMucGFnZSAmJlxuICAgICAgISF0aGlzLnN1cnZleSAmJlxuICAgICAgISF0aGlzLnN1cnZleS5jdXJyZW50UGFnZSAmJlxuICAgICAgcHJldlByb3BzLnBhZ2UubmFtZSA9PT0gdGhpcy5zdXJ2ZXkuY3VycmVudFBhZ2UubmFtZVxuICAgIClcbiAgICAgIHJldHVybjtcbiAgICB0aGlzLmRvQWZ0ZXJSZW5kZXIoKTtcbiAgfVxuICBwcml2YXRlIGRvQWZ0ZXJSZW5kZXIoKSB7XG4gICAgdmFyIGVsID0gdGhpcy5yb290UmVmLmN1cnJlbnQ7XG4gICAgaWYgKGVsICYmIHRoaXMuc3VydmV5KSB7XG4gICAgICBpZiAodGhpcy5wYW5lbEJhc2UuaXNQYW5lbCkge1xuICAgICAgICB0aGlzLnN1cnZleS5hZnRlclJlbmRlclBhbmVsKHRoaXMucGFuZWxCYXNlIGFzIFBhbmVsTW9kZWwsIGVsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3VydmV5LmFmdGVyUmVuZGVyUGFnZShlbCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHN1cGVyLmNhblJlbmRlcigpICYmICEhdGhpcy5zdXJ2ZXkgJiYgISF0aGlzLnBhbmVsQmFzZVxuICAgICAgJiYgdGhpcy5wYW5lbEJhc2UuaXNWaXNpYmxlICYmICEhdGhpcy5wYW5lbEJhc2Uuc3VydmV5XG4gICAgKTtcbiAgfVxuICBwcml2YXRlIHJlbmRlcmVkUm93c0NhY2hlOiBhbnkgPSB7fTtcbiAgcHJvdGVjdGVkIHJlbmRlclJvd3MoY3NzOiBhbnkpOiBBcnJheTxKU1guRWxlbWVudD4ge1xuICAgIGlmICh0aGlzLmNoYW5nZWRTdGF0ZVByb3BOYW1lICE9PSBcInJvd3NcIikge1xuICAgICAgdGhpcy5yZW5kZXJlZFJvd3NDYWNoZSA9IHt9O1xuICAgIH1cbiAgICB2YXIgcm93cyA9IFtdO1xuICAgIHZhciBxdWVzdGlvblJvd3MgPSB0aGlzLnBhbmVsQmFzZS5yb3dzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25Sb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcm93ID0gdGhpcy5yZW5kZXJlZFJvd3NDYWNoZVtxdWVzdGlvblJvd3NbaV0uaWRdO1xuICAgICAgaWYgKCFyb3cpIHtcbiAgICAgICAgcm93ID0gdGhpcy5jcmVhdGVSb3cocXVlc3Rpb25Sb3dzW2ldLCBjc3MpO1xuICAgICAgICB0aGlzLnJlbmRlcmVkUm93c0NhY2hlW3F1ZXN0aW9uUm93c1tpXS5pZF0gPSByb3c7XG4gICAgICB9XG4gICAgICByb3dzLnB1c2gocm93KTtcbiAgICB9XG4gICAgcmV0dXJuIHJvd3M7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZVJvdyhyb3c6IFF1ZXN0aW9uUm93TW9kZWwsIGNzczogYW55KTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8U3VydmV5Um93XG4gICAgICAgIGtleT17cm93LmlkfVxuICAgICAgICByb3c9e3Jvd31cbiAgICAgICAgc3VydmV5PXt0aGlzLnN1cnZleX1cbiAgICAgICAgY3JlYXRvcj17dGhpcy5jcmVhdG9yfVxuICAgICAgICBjc3M9e2Nzc31cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50RXJyb3JzIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvblwiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi9lbGVtZW50LWZhY3RvcnlcIjtcblxuaW1wb3J0IHsgU3VydmV5UGFuZWxCYXNlIH0gZnJvbSBcIi4vcGFuZWwtYmFzZVwiO1xuaW1wb3J0IHsgUGFuZWxNb2RlbCwgZG9LZXkyQ2xpY2tVcCwgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0U3VydmV5RWxlbWVudHNXcmFwcGVyIH0gZnJvbSBcIi4vcmVhY3RzdXJ2ZXltb2RlbFwiO1xuaW1wb3J0IHsgU3VydmV5QWN0aW9uQmFyIH0gZnJvbSBcIi4vY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXJcIjtcbmltcG9ydCB7IFRpdGxlRWxlbWVudCB9IGZyb20gXCIuL2NvbXBvbmVudHMvdGl0bGUvdGl0bGUtZWxlbWVudFwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UGFuZWwgZXh0ZW5kcyBTdXJ2ZXlQYW5lbEJhc2Uge1xuICBwcml2YXRlIGhhc0JlZW5FeHBhbmRlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHB1YmxpYyBnZXQgcGFuZWwoKTogUGFuZWxNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucGFuZWxCYXNlIGFzIFBhbmVsTW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGhlYWRlciA9IHRoaXMucmVuZGVySGVhZGVyKCk7XG4gICAgY29uc3QgZXJyb3JzID0gKFxuICAgICAgPFN1cnZleUVsZW1lbnRFcnJvcnNcbiAgICAgICAgZWxlbWVudD17dGhpcy5wYW5lbEJhc2V9XG4gICAgICAgIGNzc0NsYXNzZXM9e3RoaXMucGFuZWxCYXNlLmNzc0NsYXNzZXN9XG4gICAgICAgIGNyZWF0b3I9e3RoaXMuY3JlYXRvcn1cbiAgICAgIC8+XG4gICAgKTtcbiAgICBjb25zdCBzdHlsZSA9IHtcbiAgICAgIHBhZGRpbmdMZWZ0OiB0aGlzLnBhbmVsLmlubmVyUGFkZGluZ0xlZnQsXG4gICAgICBkaXNwbGF5OiAhdGhpcy5wYW5lbC5pc0NvbGxhcHNlZCA/IHVuZGVmaW5lZCA6IFwibm9uZVwiLFxuICAgIH07XG4gICAgbGV0IGNvbnRlbnQ6IEpTWC5FbGVtZW50ID0gbnVsbDtcbiAgICBpZiAoIXRoaXMucGFuZWwuaXNDb2xsYXBzZWQgfHwgdGhpcy5oYXNCZWVuRXhwYW5kZWQpIHtcbiAgICAgIHRoaXMuaGFzQmVlbkV4cGFuZGVkID0gdHJ1ZTtcbiAgICAgIGNvbnN0IHJvd3M6IEpTWC5FbGVtZW50W10gPSB0aGlzLnJlbmRlclJvd3ModGhpcy5wYW5lbEJhc2UuY3NzQ2xhc3Nlcyk7XG4gICAgICBjb25zdCBjbGFzc05hbWU6IHN0cmluZyA9IHRoaXMucGFuZWxCYXNlLmNzc0NsYXNzZXMucGFuZWwuY29udGVudDtcbiAgICAgIGNvbnRlbnQgPSB0aGlzLnJlbmRlckNvbnRlbnQoc3R5bGUsIHJvd3MsIGNsYXNzTmFtZSk7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIHJlZj17dGhpcy5yb290UmVmfVxuICAgICAgICBjbGFzc05hbWU9eyh0aGlzLnBhbmVsQmFzZSBhcyBQYW5lbE1vZGVsKS5nZXRDb250YWluZXJDc3MoKX1cbiAgICAgICAgb25Gb2N1cz17KHRoaXMucGFuZWxCYXNlIGFzIFBhbmVsTW9kZWwpLmZvY3VzSW59XG4gICAgICA+XG4gICAgICAgIHtoZWFkZXJ9XG4gICAgICAgIHtlcnJvcnN9XG4gICAgICAgIHtjb250ZW50fVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVySGVhZGVyKCkge1xuICAgIGlmICghdGhpcy5wYW5lbEJhc2UuaGFzVGl0bGUgJiYgIXRoaXMucGFuZWxCYXNlLmhhc0Rlc2NyaXB0aW9uKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgdGl0bGU6IEpTWC5FbGVtZW50ID0gdGhpcy5yZW5kZXJUaXRsZSgpO1xuICAgIGNvbnN0IGRlc2NyaXB0aW9uOiBKU1guRWxlbWVudCA9IHRoaXMucmVuZGVyRGVzY3JpcHRpb24oKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMucGFuZWxCYXNlLmNzc0NsYXNzZXMucGFuZWwuaGVhZGVyfT5cbiAgICAgICAge3RpdGxlfVxuICAgICAgICB7ZGVzY3JpcHRpb259XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCB3cmFwRWxlbWVudChlbGVtZW50OiBKU1guRWxlbWVudCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBzdXJ2ZXk6IFN1cnZleU1vZGVsID0gdGhpcy5wYW5lbC5zdXJ2ZXkgYXMgU3VydmV5TW9kZWw7XG4gICAgbGV0IHdyYXBwZXI6IEpTWC5FbGVtZW50O1xuICAgIGlmIChzdXJ2ZXkpIHtcbiAgICAgIHdyYXBwZXIgPSBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlci53cmFwRWxlbWVudChzdXJ2ZXksIGVsZW1lbnQsIHRoaXMucGFuZWwpO1xuICAgIH1cbiAgICByZXR1cm4gd3JhcHBlciA/PyBlbGVtZW50O1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJDb250ZW50KHN0eWxlOiBhbnksIHJvd3M6IEpTWC5FbGVtZW50W10sIGNsYXNzTmFtZTogc3RyaW5nKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGJvdHRvbTogSlNYLkVsZW1lbnQgPSB0aGlzLnJlbmRlckJvdHRvbSgpO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IHN0eWxlPXtzdHlsZX0gY2xhc3NOYW1lPXtjbGFzc05hbWV9IGlkPXt0aGlzLnBhbmVsLmNvbnRlbnRJZH0+XG4gICAgICAgIHtyb3dzfVxuICAgICAgICB7Ym90dG9tfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyVGl0bGUoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5wYW5lbEJhc2UudGl0bGUpIHJldHVybiBudWxsO1xuICAgIHJldHVybiA8VGl0bGVFbGVtZW50IGVsZW1lbnQ9e3RoaXMucGFuZWxCYXNlfT48L1RpdGxlRWxlbWVudD47XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckRlc2NyaXB0aW9uKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMucGFuZWxCYXNlLmRlc2NyaXB0aW9uKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgdGV4dCA9IFN1cnZleUVsZW1lbnRCYXNlLnJlbmRlckxvY1N0cmluZyh0aGlzLnBhbmVsQmFzZS5sb2NEZXNjcmlwdGlvbik7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLnBhbmVsLmNzc0NsYXNzZXMucGFuZWwuZGVzY3JpcHRpb259Pnt0ZXh0fTwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckJvdHRvbSgpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgZm9vdGVyVG9vbGJhciA9IHRoaXMucGFuZWwuZ2V0Rm9vdGVyVG9vbGJhcigpO1xuICAgIGlmICghZm9vdGVyVG9vbGJhci5oYXNBY3Rpb25zKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gPFN1cnZleUFjdGlvbkJhciBtb2RlbD17Zm9vdGVyVG9vbGJhcn0+PC9TdXJ2ZXlBY3Rpb25CYXI+O1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwicGFuZWxcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVBhbmVsLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25SYXRpbmdNb2RlbCwgUmVuZGVyZXJGYWN0b3J5IH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25Ecm9wZG93bkJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2Ryb3Bkb3duXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvblJhdGluZ0Ryb3Bkb3duIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25Ecm9wZG93bkJhc2U8UXVlc3Rpb25SYXRpbmdNb2RlbD4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgY3NzQ2xhc3NlcyA9IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3NlcztcbiAgICB2YXIgc2VsZWN0ID0gdGhpcy5yZW5kZXJTZWxlY3QoY3NzQ2xhc3Nlcyk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucm9vdERyb3Bkb3dufT5cbiAgICAgICAge3NlbGVjdH1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXG4gIFwic3YtcmF0aW5nLWRyb3Bkb3duXCIsXG4gIChwcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uUmF0aW5nRHJvcGRvd24sIHByb3BzKTtcbiAgfVxuKTtcblxuUmVuZGVyZXJGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUmVuZGVyZXIoXG4gIFwicmF0aW5nXCIsXG4gIFwiZHJvcGRvd25cIixcbiAgXCJzdi1yYXRpbmctZHJvcGRvd25cIlxuKTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQmFzZSwgUXVlc3Rpb24sIFBhZ2VNb2RlbCwgU3VydmV5RXJyb3IsIFN0eWxlc01hbmFnZXIsIHN1cnZleUNzcywgSGVscGVycywgZG9LZXkyQ2xpY2tVcCwgU3ZnUmVnaXN0cnksIFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlQYWdlIH0gZnJvbSBcIi4vcGFnZVwiO1xuaW1wb3J0IHsgSVN1cnZleUNyZWF0b3IgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uXCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50QmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgU3VydmV5TG9jU3RyaW5nVmlld2VyIH0gZnJvbSBcIi4vc3RyaW5nLXZpZXdlclwiO1xuaW1wb3J0IHsgU3VydmV5SGVhZGVyIH0gZnJvbSBcIi4vY29tcG9uZW50cy9zdXJ2ZXktaGVhZGVyL3N1cnZleS1oZWFkZXJcIjtcbmltcG9ydCB7IFN1cnZleVRpbWVyUGFuZWwgfSBmcm9tIFwiLi9yZWFjdHRpbWVycGFuZWxcIjtcbmltcG9ydCB7IFN1cnZleU5hdmlnYXRpb24gfSBmcm9tIFwiLi9yZWFjdFN1cnZleU5hdmlnYXRpb25cIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4vZWxlbWVudC1mYWN0b3J5XCI7XG5pbXBvcnQgeyBkb0tleTJDbGlja0JsdXIsIGRvS2V5MkNsaWNrRG93biB9IGZyb20gXCIuLi91dGlscy91dGlsc1wiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8YW55LCBhbnk+XG4gIGltcGxlbWVudHMgSVN1cnZleUNyZWF0b3Ige1xuICBwcml2YXRlIHByZXZpb3VzSlNPTiA9IHt9O1xuICBwcml2YXRlIHJvb3RSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIHB1YmxpYyBzdGF0aWMgZ2V0IGNzc1R5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc3VydmV5Q3NzLmN1cnJlbnRUeXBlO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgc2V0IGNzc1R5cGUodmFsdWU6IHN0cmluZykge1xuICAgIFN0eWxlc01hbmFnZXIuYXBwbHlUaGVtZSh2YWx1ZSk7XG4gIH1cbiAgcHJvdGVjdGVkIHN1cnZleTogU3VydmV5TW9kZWw7XG5cbiAgcHJpdmF0ZSByb290Tm9kZUlkOiBzdHJpbmc7IC8vIHJvb3QgZG9tIG5vZGUgSUQgYXR0clxuICBwcml2YXRlIHJvb3ROb2RlQ2xhc3NOYW1lOiBzdHJpbmc7IC8vIHJvb3QgZG9tIG5vZGUgY2xhc3NcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuaGFuZGxlVHJ5QWdhaW5DbGljayA9IHRoaXMuaGFuZGxlVHJ5QWdhaW5DbGljay5iaW5kKHRoaXMpO1xuICAgIHRoaXMuY3JlYXRlU3VydmV5KHByb3BzKTtcbiAgICB0aGlzLnVwZGF0ZVN1cnZleShwcm9wcywge30pO1xuICAgIHRoaXMucm9vdFJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICAgIHRoaXMucm9vdE5vZGVJZCA9IHByb3BzLmlkIHx8IG51bGw7XG4gICAgdGhpcy5yb290Tm9kZUNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSB8fCBcIlwiO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5O1xuICB9XG4gIHNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHM6IGFueSwgbmV4dFN0YXRlOiBhbnkpIHtcbiAgICBpZiAoIXN1cGVyLnNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHMsIG5leHRTdGF0ZSkpIHJldHVybiBmYWxzZTtcbiAgICBpZiAodGhpcy5pc01vZGVsSlNPTkNoYW5nZWQobmV4dFByb3BzKSkge1xuICAgICAgdGhpcy5jcmVhdGVTdXJ2ZXkobmV4dFByb3BzKTtcbiAgICAgIHRoaXMudXBkYXRlU3VydmV5KG5leHRQcm9wcywge30pO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBhbnksIHByZXZTdGF0ZTogYW55KSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKTtcbiAgICB0aGlzLnVwZGF0ZVN1cnZleSh0aGlzLnByb3BzLCBwcmV2UHJvcHMpO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgdmFyIGVsID0gdGhpcy5yb290UmVmLmN1cnJlbnQ7XG4gICAgaWYgKGVsICYmIHRoaXMuc3VydmV5KSB0aGlzLnN1cnZleS5hZnRlclJlbmRlclN1cnZleShlbCk7XG4gICAgaWYgKHRoaXMuc3VydmV5KSB7XG4gICAgICB0aGlzLnN1cnZleS5zdGFydFRpbWVyRnJvbVVJKCk7XG4gICAgfVxuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAgaWYgKHRoaXMuc3VydmV5KSB7XG4gICAgICB0aGlzLnN1cnZleS5zdG9wVGltZXIoKTtcbiAgICB9XG4gIH1cbiAgZG9SZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIFN2Z1JlZ2lzdHJ5LnJlbmRlckljb25zKCk7XG4gICAgbGV0IHJlbmRlclJlc3VsdDogSlNYLkVsZW1lbnQ7XG4gICAgaWYgKHRoaXMuc3VydmV5LnN0YXRlID09IFwiY29tcGxldGVkXCIpIHtcbiAgICAgIHJlbmRlclJlc3VsdCA9IHRoaXMucmVuZGVyQ29tcGxldGVkKCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnN1cnZleS5zdGF0ZSA9PSBcImNvbXBsZXRlZGJlZm9yZVwiKSB7XG4gICAgICByZW5kZXJSZXN1bHQgPSB0aGlzLnJlbmRlckNvbXBsZXRlZEJlZm9yZSgpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zdXJ2ZXkuc3RhdGUgPT0gXCJsb2FkaW5nXCIpIHtcbiAgICAgIHJlbmRlclJlc3VsdCA9IHRoaXMucmVuZGVyTG9hZGluZygpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZW5kZXJSZXN1bHQgPSB0aGlzLnJlbmRlclN1cnZleSgpO1xuICAgIH1cbiAgICBjb25zdCBoZWFkZXI6IEpTWC5FbGVtZW50ID0gPFN1cnZleUhlYWRlciBzdXJ2ZXk9e3RoaXMuc3VydmV5fT48L1N1cnZleUhlYWRlcj47XG4gICAgY29uc3Qgb25TdWJtaXQgPSBmdW5jdGlvbiAoZXZlbnQ6IFJlYWN0LkZvcm1FdmVudDxIVE1MRm9ybUVsZW1lbnQ+KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH07XG4gICAgbGV0IGN1c3RvbUhlYWRlcjogSlNYLkVsZW1lbnQgPSA8ZGl2IGNsYXNzTmFtZT1cInN2X2N1c3RvbV9oZWFkZXJcIiAvPjtcbiAgICBpZiAodGhpcy5zdXJ2ZXkuaGFzTG9nbykge1xuICAgICAgY3VzdG9tSGVhZGVyID0gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgY3NzQ2xhc3NlcyA9IHRoaXMucm9vdE5vZGVDbGFzc05hbWUgPyB0aGlzLnJvb3ROb2RlQ2xhc3NOYW1lICsgXCIgXCIgKyB0aGlzLmNzcy5yb290IDogdGhpcy5jc3Mucm9vdDtcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGlkPXt0aGlzLnJvb3ROb2RlSWR9IHJlZj17dGhpcy5yb290UmVmfSBjbGFzc05hbWU9e2Nzc0NsYXNzZXN9PlxuICAgICAgICA8Zm9ybSBvblN1Ym1pdD17b25TdWJtaXR9PlxuICAgICAgICAgIHtjdXN0b21IZWFkZXJ9XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMuY3NzLmNvbnRhaW5lcn0+XG4gICAgICAgICAgICB7aGVhZGVyfVxuICAgICAgICAgICAge3JlbmRlclJlc3VsdH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9mb3JtPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuZG9SZW5kZXIoKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGNzcygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnN1cnZleS5jc3M7XG4gIH1cbiAgcHVibGljIHNldCBjc3ModmFsdWU6IGFueSkge1xuICAgIHRoaXMuc3VydmV5LmNzcyA9IHZhbHVlO1xuICB9XG4gIGhhbmRsZVRyeUFnYWluQ2xpY2soZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuc3VydmV5LmRvQ29tcGxldGUoKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQ29tcGxldGVkKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMuc3VydmV5LnNob3dDb21wbGV0ZWRQYWdlKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgY29tcGxldGVkU3RhdGUgPSBudWxsO1xuICAgIGlmICh0aGlzLnN1cnZleS5jb21wbGV0ZWRTdGF0ZSkge1xuICAgICAgdmFyIHRyeUFnYWluQnV0dG9uID0gbnVsbDtcbiAgICAgIGlmICh0aGlzLnN1cnZleS5jb21wbGV0ZWRTdGF0ZSA9PSBcImVycm9yXCIpIHtcbiAgICAgICAgdmFyIGJ0blRleHQgPSB0aGlzLnN1cnZleS5nZXRMb2NTdHJpbmcoXCJzYXZlQWdhaW5CdXR0b25cIik7XG4gICAgICAgIHRyeUFnYWluQnV0dG9uID0gKFxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgdHlwZT17XCJidXR0b25cIn1cbiAgICAgICAgICAgIHZhbHVlPXtidG5UZXh0fVxuICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLmNzcy5zYXZlRGF0YS5zYXZlQWdhaW5CdXR0b259XG4gICAgICAgICAgICBvbkNsaWNrPXt0aGlzLmhhbmRsZVRyeUFnYWluQ2xpY2t9XG4gICAgICAgICAgLz5cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHZhciBjc3MgPSB0aGlzLmNzcy5zYXZlRGF0YVt0aGlzLnN1cnZleS5jb21wbGV0ZWRTdGF0ZV07XG4gICAgICBjb21wbGV0ZWRTdGF0ZSA9IChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMuY3NzLnNhdmVEYXRhLnJvb3R9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3N9PlxuICAgICAgICAgICAgPHNwYW4+e3RoaXMuc3VydmV5LmNvbXBsZXRlZFN0YXRlVGV4dH08L3NwYW4+XG4gICAgICAgICAgICB7dHJ5QWdhaW5CdXR0b259XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9XG4gICAgdmFyIGh0bWxWYWx1ZSA9IHsgX19odG1sOiB0aGlzLnN1cnZleS5wcm9jZXNzZWRDb21wbGV0ZWRIdG1sIH07XG4gICAgcmV0dXJuIChcbiAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXtodG1sVmFsdWV9XG4gICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnN1cnZleS5jb21wbGV0ZWRDc3N9XG4gICAgICAgIC8+XG4gICAgICAgIHtjb21wbGV0ZWRTdGF0ZX1cbiAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQ29tcGxldGVkQmVmb3JlKCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgaHRtbFZhbHVlID0geyBfX2h0bWw6IHRoaXMuc3VydmV5LnByb2Nlc3NlZENvbXBsZXRlZEJlZm9yZUh0bWwgfTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBkYW5nZXJvdXNseVNldElubmVySFRNTD17aHRtbFZhbHVlfSBjbGFzc05hbWU9e3RoaXMuY3NzLmJvZHl9IC8+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyTG9hZGluZygpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGh0bWxWYWx1ZSA9IHsgX19odG1sOiB0aGlzLnN1cnZleS5wcm9jZXNzZWRMb2FkaW5nSHRtbCB9O1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXtodG1sVmFsdWV9IGNsYXNzTmFtZT17dGhpcy5jc3MuYm9keX0gLz5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJTdXJ2ZXkoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBhY3RpdmVQYWdlID0gdGhpcy5zdXJ2ZXkuYWN0aXZlUGFnZVxuICAgICAgPyB0aGlzLnJlbmRlclBhZ2UodGhpcy5zdXJ2ZXkuYWN0aXZlUGFnZSlcbiAgICAgIDogbnVsbDtcbiAgICBjb25zdCBpc1N0YXJpbmcgPSB0aGlzLnN1cnZleS5pc1Nob3dTdGFydGluZ1BhZ2U7XG4gICAgdmFyIHBhZ2VJZCA9IHRoaXMuc3VydmV5LmFjdGl2ZVBhZ2UgPyB0aGlzLnN1cnZleS5hY3RpdmVQYWdlLmlkIDogXCJcIjtcbiAgICB2YXIgdG9wUHJvZ3Jlc3MgPSB0aGlzLnN1cnZleS5pc1Nob3dQcm9ncmVzc0Jhck9uVG9wICYmICFpc1N0YXJpbmdcbiAgICAgID8gdGhpcy5yZW5kZXJQcm9ncmVzcyh0cnVlKVxuICAgICAgOiBudWxsO1xuICAgIHZhciBib3R0b21Qcm9ncmVzcyA9IHRoaXMuc3VydmV5LmlzU2hvd1Byb2dyZXNzQmFyT25Cb3R0b20gJiYgIWlzU3RhcmluZ1xuICAgICAgPyB0aGlzLnJlbmRlclByb2dyZXNzKGZhbHNlKVxuICAgICAgOiBudWxsO1xuICAgIGxldCBjbGFzc05hbWUgPSB0aGlzLnN1cnZleS5ib2R5Q3NzO1xuICAgIGlmICghYWN0aXZlUGFnZSkge1xuICAgICAgY2xhc3NOYW1lID0gdGhpcy5jc3MuYm9keUVtcHR5O1xuICAgICAgYWN0aXZlUGFnZSA9IHRoaXMucmVuZGVyRW1wdHlTdXJ2ZXkoKTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgaWQ9e3BhZ2VJZH1cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICA+XG4gICAgICAgIHt0b3BQcm9ncmVzc31cbiAgICAgICAge3RoaXMucmVuZGVyVGltZXJQYW5lbChcInRvcFwiKX1cbiAgICAgICAge3RoaXMucmVuZGVyTmF2aWdhdGlvbihcInRvcFwiKX1cbiAgICAgICAge2FjdGl2ZVBhZ2V9XG4gICAgICAgIHt0aGlzLnJlbmRlclRpbWVyUGFuZWwoXCJib3R0b21cIil9XG4gICAgICAgIHtib3R0b21Qcm9ncmVzc31cbiAgICAgICAge3RoaXMucmVuZGVyTmF2aWdhdGlvbihcImJvdHRvbVwiKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlclRpbWVyUGFuZWwobG9jYXRpb246IHN0cmluZykge1xuICAgIGlmKHRoaXMuc3VydmV5LmlzU2hvd1N0YXJ0aW5nUGFnZSkgcmV0dXJuIG51bGw7XG4gICAgaWYgKGxvY2F0aW9uID09PSBcInRvcFwiICYmICF0aGlzLnN1cnZleS5pc1RpbWVyUGFuZWxTaG93aW5nT25Ub3ApXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICBpZiAobG9jYXRpb24gPT09IFwiYm90dG9tXCIgJiYgIXRoaXMuc3VydmV5LmlzVGltZXJQYW5lbFNob3dpbmdPbkJvdHRvbSlcbiAgICAgIHJldHVybiBudWxsO1xuICAgIHJldHVybiA8U3VydmV5VGltZXJQYW5lbCB0aW1lck1vZGVsPXt0aGlzLnN1cnZleS50aW1lck1vZGVsfSAvPjtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyUGFnZShwYWdlOiBQYWdlTW9kZWwpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTdXJ2ZXlQYWdlXG4gICAgICAgIHN1cnZleT17dGhpcy5zdXJ2ZXl9XG4gICAgICAgIHBhZ2U9e3BhZ2V9XG4gICAgICAgIGNzcz17dGhpcy5jc3N9XG4gICAgICAgIGNyZWF0b3I9e3RoaXN9XG4gICAgICAvPlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlclByb2dyZXNzKGlzVG9wOiBib29sZWFuKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoXG4gICAgICBcInN2LXByb2dyZXNzLVwiICsgdGhpcy5zdXJ2ZXkucHJvZ3Jlc3NCYXJUeXBlLnRvTG93ZXJDYXNlKCksXG4gICAgICB7IHN1cnZleTogdGhpcy5zdXJ2ZXksIGNzczogdGhpcy5jc3MsIGlzVG9wOiBpc1RvcCB9XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyTmF2aWdhdGlvbihuYXZQb3NpdGlvbjogc3RyaW5nKTogSlNYLkVsZW1lbnQge1xuICAgIGlmIChcbiAgICAgIHRoaXMuc3VydmV5LmlzTmF2aWdhdGlvbkJ1dHRvbnNTaG93aW5nICE9PSBcImJvdGhcIiAmJlxuICAgICAgKHRoaXMuc3VydmV5LmlzTmF2aWdhdGlvbkJ1dHRvbnNTaG93aW5nID09PSBcIm5vbmVcIiB8fFxuICAgICAgICB0aGlzLnN1cnZleS5pc05hdmlnYXRpb25CdXR0b25zU2hvd2luZyAhPT0gbmF2UG9zaXRpb24pXG4gICAgKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIDxTdXJ2ZXlOYXZpZ2F0aW9uIHN1cnZleT17dGhpcy5zdXJ2ZXl9IGNzcz17dGhpcy5jc3N9IC8+O1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbXB0eVN1cnZleSgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIDxzcGFuPnt0aGlzLnN1cnZleS5lbXB0eVN1cnZleVRleHR9PC9zcGFuPjtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlU3VydmV5KG5ld1Byb3BzOiBhbnkpIHtcbiAgICBpZiAoIW5ld1Byb3BzKSBuZXdQcm9wcyA9IHt9O1xuICAgIHRoaXMucHJldmlvdXNKU09OID0ge307XG4gICAgaWYgKG5ld1Byb3BzKSB7XG4gICAgICBpZiAobmV3UHJvcHMubW9kZWwpIHtcbiAgICAgICAgdGhpcy5zdXJ2ZXkgPSBuZXdQcm9wcy5tb2RlbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChuZXdQcm9wcy5qc29uKSB7XG4gICAgICAgICAgdGhpcy5wcmV2aW91c0pTT04gPSBuZXdQcm9wcy5qc29uO1xuICAgICAgICAgIHRoaXMuc3VydmV5ID0gbmV3IFN1cnZleU1vZGVsKG5ld1Byb3BzLmpzb24pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3VydmV5ID0gbmV3IFN1cnZleU1vZGVsKCk7XG4gICAgfVxuICAgIGlmICghIW5ld1Byb3BzLmNzcykge1xuICAgICAgdGhpcy5zdXJ2ZXkuY3NzID0gdGhpcy5jc3M7XG4gICAgfVxuICAgIHRoaXMuc2V0U3VydmV5RXZlbnRzKCk7XG4gIH1cbiAgcHJpdmF0ZSBpc01vZGVsSlNPTkNoYW5nZWQobmV3UHJvcHM6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICghIW5ld1Byb3BzW1wibW9kZWxcIl0pIHtcbiAgICAgIHJldHVybiB0aGlzLnN1cnZleSAhPT0gbmV3UHJvcHNbXCJtb2RlbFwiXTtcbiAgICB9XG4gICAgaWYgKCEhbmV3UHJvcHNbXCJqc29uXCJdKSB7XG4gICAgICByZXR1cm4gIUhlbHBlcnMuaXNUd29WYWx1ZUVxdWFscyhuZXdQcm9wc1tcImpzb25cIl0sIHRoaXMucHJldmlvdXNKU09OKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHByb3RlY3RlZCB1cGRhdGVTdXJ2ZXkobmV3UHJvcHM6IGFueSwgb2xkUHJvcHM/OiBhbnkpIHtcbiAgICBpZiAoIW5ld1Byb3BzKSByZXR1cm47XG4gICAgb2xkUHJvcHMgPSBvbGRQcm9wcyB8fCB7fTtcbiAgICBmb3IgKHZhciBrZXkgaW4gbmV3UHJvcHMpIHtcbiAgICAgIGlmIChrZXkgPT0gXCJtb2RlbFwiIHx8IGtleSA9PSBcImNoaWxkcmVuXCIgfHwga2V5ID09IFwianNvblwiKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKGtleSA9PSBcImNzc1wiKSB7XG4gICAgICAgIHRoaXMuc3VydmV5Lm1lcmdlVmFsdWVzKG5ld1Byb3BzLmNzcywgdGhpcy5zdXJ2ZXkuZ2V0Q3NzKCkpO1xuICAgICAgICB0aGlzLnN1cnZleVtcInVwZGF0ZUVsZW1lbnRDc3NcIl0oKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAobmV3UHJvcHNba2V5XSA9PT0gb2xkUHJvcHNba2V5XSkgY29udGludWU7XG4gICAgICBpZiAoa2V5LmluZGV4T2YoXCJvblwiKSA9PSAwICYmIHRoaXMuc3VydmV5W2tleV0gJiYgdGhpcy5zdXJ2ZXlba2V5XS5hZGQpIHtcbiAgICAgICAgaWYgKCEhb2xkUHJvcHNba2V5XSkge1xuICAgICAgICAgIHRoaXMuc3VydmV5W2tleV0ucmVtb3ZlKG9sZFByb3BzW2tleV0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3VydmV5W2tleV0uYWRkKG5ld1Byb3BzW2tleV0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zdXJ2ZXlba2V5XSA9IG5ld1Byb3BzW2tleV07XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBzZXRTdXJ2ZXlFdmVudHMoKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgdGhpcy5zdXJ2ZXkucmVuZGVyQ2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgY291bnRlciA9XG4gICAgICAgICEhc2VsZi5zdGF0ZSAmJiAhIXNlbGYuc3RhdGUubW9kZWxDaGFuZ2VkID8gc2VsZi5zdGF0ZS5tb2RlbENoYW5nZWQgOiAwO1xuICAgICAgc2VsZi5zZXRTdGF0ZSh7IG1vZGVsQ2hhbmdlZDogY291bnRlciArIDEgfSk7XG4gICAgfTtcbiAgICB0aGlzLnN1cnZleS5vblBhcnRpYWxTZW5kLmFkZCgoc2VuZGVyKSA9PiB7XG4gICAgICBpZiAoISFzZWxmLnN0YXRlKSB7XG4gICAgICAgIHNlbGYuc2V0U3RhdGUoc2VsZi5zdGF0ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvL0lTdXJ2ZXlDcmVhdG9yXG4gIHB1YmxpYyBjcmVhdGVRdWVzdGlvbkVsZW1lbnQocXVlc3Rpb246IFF1ZXN0aW9uKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiBSZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVRdWVzdGlvbihcbiAgICAgICFxdWVzdGlvbi5pc0RlZmF1bHRSZW5kZXJpbmcgfHwgcXVlc3Rpb24uaXNEZWZhdWx0UmVuZGVyaW5nKClcbiAgICAgICAgPyBxdWVzdGlvbi5nZXRUZW1wbGF0ZSgpXG4gICAgICAgIDogcXVlc3Rpb24uZ2V0Q29tcG9uZW50TmFtZSgpLFxuICAgICAge1xuICAgICAgICBxdWVzdGlvbjogcXVlc3Rpb24sXG4gICAgICAgIGlzRGlzcGxheU1vZGU6IHF1ZXN0aW9uLmlzSW5wdXRSZWFkT25seSxcbiAgICAgICAgY3JlYXRvcjogdGhpcyxcbiAgICAgIH1cbiAgICApO1xuICB9XG4gIHB1YmxpYyByZW5kZXJFcnJvcihcbiAgICBrZXk6IHN0cmluZyxcbiAgICBlcnJvcjogU3VydmV5RXJyb3IsXG4gICAgY3NzQ2xhc3NlczogYW55XG4gICk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBrZXk9e2tleX0+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5lcnJvci5pY29ufSBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuZXJyb3IuaXRlbX0+XG4gICAgICAgICAgPFN1cnZleUxvY1N0cmluZ1ZpZXdlciBsb2NTdHI9e2Vycm9yLmxvY1RleHR9IC8+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHVibGljIHF1ZXN0aW9uVGl0bGVMb2NhdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN1cnZleS5xdWVzdGlvblRpdGxlTG9jYXRpb247XG4gIH1cbiAgcHVibGljIHF1ZXN0aW9uRXJyb3JMb2NhdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN1cnZleS5xdWVzdGlvbkVycm9yTG9jYXRpb247XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdXJ2ZXlcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleSwgcHJvcHMpO1xufSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBhdHRhY2hLZXkyY2xpY2soZWxlbWVudDogSlNYLkVsZW1lbnQsIHZpZXdNb2RlbD86IGFueSwgb3B0aW9ucyA9IHsgcHJvY2Vzc0VzYzogdHJ1ZSB9KTogSlNYLkVsZW1lbnQge1xuICBpZiAoISF2aWV3TW9kZWwgJiYgdmlld01vZGVsLmRpc2FibGVUYWJTdG9wKSB7XG4gICAgcmV0dXJuIFJlYWN0LmNsb25lRWxlbWVudChlbGVtZW50LCB7IHRhYkluZGV4OiAtMSB9KTtcbiAgfVxuICByZXR1cm4gUmVhY3QuY2xvbmVFbGVtZW50KFxuICAgIGVsZW1lbnQsXG4gICAge1xuICAgICAgdGFiSW5kZXg6IDAsXG4gICAgICBvbktleVVwOiAoZXZ0OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGRvS2V5MkNsaWNrVXAoZXZ0LCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSxcbiAgICAgIG9uS2V5RG93bjogKGV2dDogYW55KSA9PiBkb0tleTJDbGlja0Rvd24oZXZ0LCBvcHRpb25zKSxcbiAgICAgIG9uQmx1cjogKGV2dDogYW55KSA9PiBkb0tleTJDbGlja0JsdXIoZXZ0KVxuICAgIH1cbiAgKTtcbn0iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleU5hdmlnYXRpb25CYXNlIH0gZnJvbSBcIi4vcmVhY3RTdXJ2ZXlOYXZpZ2F0aW9uQmFzZVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5TmF2aWdhdGlvbiBleHRlbmRzIFN1cnZleU5hdmlnYXRpb25CYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmhhbmRsZVByZXZDbGljayA9IHRoaXMuaGFuZGxlUHJldkNsaWNrLmJpbmQodGhpcyk7XG4gICAgdGhpcy5oYW5kbGVOZXh0Q2xpY2sgPSB0aGlzLmhhbmRsZU5leHRDbGljay5iaW5kKHRoaXMpO1xuICAgIHRoaXMuaGFuZGxlTmV4dE1vdXNlRG93biA9IHRoaXMuaGFuZGxlTmV4dE1vdXNlRG93bi5iaW5kKHRoaXMpO1xuICAgIHRoaXMuaGFuZGxlTW91c2VEb3duID0gdGhpcy5oYW5kbGVNb3VzZURvd24uYmluZCh0aGlzKTtcbiAgICB0aGlzLmhhbmRsZUNvbXBsZXRlQ2xpY2sgPSB0aGlzLmhhbmRsZUNvbXBsZXRlQ2xpY2suYmluZCh0aGlzKTtcbiAgICB0aGlzLmhhbmRsZVByZXZpZXdDbGljayA9IHRoaXMuaGFuZGxlUHJldmlld0NsaWNrLmJpbmQodGhpcyk7XG4gICAgdGhpcy5oYW5kbGVTdGFydENsaWNrID0gdGhpcy5oYW5kbGVTdGFydENsaWNrLmJpbmQodGhpcyk7XG4gIH1cbiAgaGFuZGxlUHJldkNsaWNrKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnN1cnZleS5wcmV2UGFnZSgpO1xuICB9XG4gIGhhbmRsZU5leHRDbGljayhldmVudDogYW55KSB7XG4gICAgdGhpcy5zdXJ2ZXkubmV4dFBhZ2VVSUNsaWNrKCk7XG4gIH1cbiAgaGFuZGxlTmV4dE1vdXNlRG93bihldmVudDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5Lm5leHRQYWdlTW91c2VEb3duKCk7XG4gIH1cbiAgaGFuZGxlTW91c2VEb3duKGV2ZW50OiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkubmF2aWdhdGlvbk1vdXNlRG93bigpO1xuICB9XG4gIGhhbmRsZUNvbXBsZXRlQ2xpY2soZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuc3VydmV5LmNvbXBsZXRlTGFzdFBhZ2UoKTtcbiAgfVxuICBoYW5kbGVQcmV2aWV3Q2xpY2soZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuc3VydmV5LnNob3dQcmV2aWV3KCk7XG4gIH1cbiAgaGFuZGxlU3RhcnRDbGljayhldmVudDogYW55KSB7XG4gICAgdGhpcy5zdXJ2ZXkuc3RhcnQoKTtcbiAgfVxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5zdXJ2ZXkgfHwgdGhpcy5zdXJ2ZXkuaXNOYXZpZ2F0aW9uQnV0dG9uc1Nob3dpbmcgPT09IFwibm9uZVwiKVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgdmFyIHByZXZCdXR0b24gPVxuICAgICAgdGhpcy5zdXJ2ZXkuaXNTaG93UHJldkJ1dHRvblxuICAgICAgICA/IHRoaXMucmVuZGVyQnV0dG9uKFxuICAgICAgICAgIHRoaXMuaGFuZGxlUHJldkNsaWNrLFxuICAgICAgICAgIHRoaXMuaGFuZGxlTW91c2VEb3duLFxuICAgICAgICAgIHRoaXMuc3VydmV5LnBhZ2VQcmV2VGV4dCxcbiAgICAgICAgICB0aGlzLnN1cnZleS5jc3NOYXZpZ2F0aW9uUHJldlxuICAgICAgICApXG4gICAgICAgIDogbnVsbDtcbiAgICB2YXIgbmV4dEJ1dHRvbiA9XG4gICAgICB0aGlzLnN1cnZleS5pc1Nob3dOZXh0QnV0dG9uXG4gICAgICAgID8gdGhpcy5yZW5kZXJCdXR0b24oXG4gICAgICAgICAgdGhpcy5oYW5kbGVOZXh0Q2xpY2ssXG4gICAgICAgICAgdGhpcy5oYW5kbGVOZXh0TW91c2VEb3duLFxuICAgICAgICAgIHRoaXMuc3VydmV5LnBhZ2VOZXh0VGV4dCxcbiAgICAgICAgICB0aGlzLnN1cnZleS5jc3NOYXZpZ2F0aW9uTmV4dFxuICAgICAgICApXG4gICAgICAgIDogbnVsbDtcbiAgICB2YXIgY29tcGxldGVCdXR0b24gPVxuICAgICAgdGhpcy5zdXJ2ZXkuaXNDb21wbGV0ZUJ1dHRvblZpc2libGVcbiAgICAgICAgPyB0aGlzLnJlbmRlckJ1dHRvbihcbiAgICAgICAgICB0aGlzLmhhbmRsZUNvbXBsZXRlQ2xpY2ssXG4gICAgICAgICAgdGhpcy5oYW5kbGVNb3VzZURvd24sXG4gICAgICAgICAgdGhpcy5zdXJ2ZXkuY29tcGxldGVUZXh0LFxuICAgICAgICAgIHRoaXMuc3VydmV5LmNzc05hdmlnYXRpb25Db21wbGV0ZVxuICAgICAgICApXG4gICAgICAgIDogbnVsbDtcbiAgICB2YXIgcHJldmlld0J1dHRvbiA9XG4gICAgICB0aGlzLnN1cnZleS5pc1ByZXZpZXdCdXR0b25WaXNpYmxlXG4gICAgICAgID8gdGhpcy5yZW5kZXJCdXR0b24oXG4gICAgICAgICAgdGhpcy5oYW5kbGVQcmV2aWV3Q2xpY2ssXG4gICAgICAgICAgdGhpcy5oYW5kbGVNb3VzZURvd24sXG4gICAgICAgICAgdGhpcy5zdXJ2ZXkucHJldmlld1RleHQsXG4gICAgICAgICAgdGhpcy5zdXJ2ZXkuY3NzTmF2aWdhdGlvblByZXZpZXdcbiAgICAgICAgKVxuICAgICAgICA6IG51bGw7XG4gICAgdmFyIHN0YXJ0QnV0dG9uID0gdGhpcy5zdXJ2ZXkuaXNTaG93U3RhcnRpbmdQYWdlXG4gICAgICA/IHRoaXMucmVuZGVyQnV0dG9uKFxuICAgICAgICB0aGlzLmhhbmRsZVN0YXJ0Q2xpY2ssXG4gICAgICAgIG51bGwsXG4gICAgICAgIHRoaXMuc3VydmV5LnN0YXJ0U3VydmV5VGV4dCxcbiAgICAgICAgdGhpcy5zdXJ2ZXkuY3NzTmF2aWdhdGlvblN0YXJ0XG4gICAgICApXG4gICAgICA6IG51bGw7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLmNzcy5mb290ZXJ9PlxuICAgICAgICB7c3RhcnRCdXR0b259XG4gICAgICAgIHtwcmV2QnV0dG9ufVxuICAgICAgICB7bmV4dEJ1dHRvbn1cbiAgICAgICAge3ByZXZpZXdCdXR0b259XG4gICAgICAgIHtjb21wbGV0ZUJ1dHRvbn1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckJ1dHRvbihcbiAgICBjbGljazogYW55LFxuICAgIG1vdXNlRG93bjogYW55LFxuICAgIHRleHQ6IHN0cmluZyxcbiAgICBidG5DbGFzc05hbWU6IHN0cmluZ1xuICApOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIHN0eWxlID0geyBtYXJnaW5SaWdodDogXCI1cHhcIiB9O1xuICAgIHJldHVybiAoXG4gICAgICA8aW5wdXRcbiAgICAgICAgY2xhc3NOYW1lPXtidG5DbGFzc05hbWV9XG4gICAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIG9uTW91c2VEb3duPXttb3VzZURvd259XG4gICAgICAgIG9uQ2xpY2s9e2NsaWNrfVxuICAgICAgICB2YWx1ZT17dGV4dH1cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5TmF2aWdhdGlvbkJhc2UgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8YW55LCBhbnk+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN0YXRlID0geyB1cGRhdGU6IDAgfTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHN1cnZleSgpOiBTdXJ2ZXlNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuc3VydmV5O1xuICB9XG4gIHByb3RlY3RlZCBnZXQgY3NzKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3NzO1xuICB9XG4gIHByaXZhdGUgdXBkYXRlU3RhdGVGdW5jdGlvbjogYW55ID0gbnVsbDtcbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgaWYgKHRoaXMuc3VydmV5KSB7XG4gICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICB0aGlzLnVwZGF0ZVN0YXRlRnVuY3Rpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNlbGYuc2V0U3RhdGUoeyB1cGRhdGU6IHNlbGYuc3RhdGUudXBkYXRlICsgMSB9KTtcbiAgICAgIH07XG4gICAgICB0aGlzLnN1cnZleS5vblBhZ2VWaXNpYmxlQ2hhbmdlZC5hZGQodGhpcy51cGRhdGVTdGF0ZUZ1bmN0aW9uKTtcbiAgICB9XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgaWYgKHRoaXMuc3VydmV5ICYmIHRoaXMudXBkYXRlU3RhdGVGdW5jdGlvbikge1xuICAgICAgdGhpcy5zdXJ2ZXkub25QYWdlVmlzaWJsZUNoYW5nZWQucmVtb3ZlKHRoaXMudXBkYXRlU3RhdGVGdW5jdGlvbik7XG4gICAgICB0aGlzLnVwZGF0ZVN0YXRlRnVuY3Rpb24gPSBudWxsO1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlQcm9ncmVzc01vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlOYXZpZ2F0aW9uQmFzZSB9IGZyb20gXCIuL3JlYWN0U3VydmV5TmF2aWdhdGlvbkJhc2VcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi9lbGVtZW50LWZhY3RvcnlcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVByb2dyZXNzIGV4dGVuZHMgU3VydmV5TmF2aWdhdGlvbkJhc2Uge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgaXNUb3AoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXNUb3A7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBwcm9ncmVzcygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnN1cnZleS5wcm9ncmVzc1ZhbHVlO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcHJvZ3Jlc3NUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5LnByb2dyZXNzVGV4dDtcbiAgfVxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBzdHlsZSA9IHRoaXMuaXNUb3AgPyB7fSA6IHsgbWFyZ2luVG9wOiBcIjFlbVwiIH07XG4gICAgdmFyIHByb2dyZXNzU3R5bGUgPSB7XG4gICAgICB3aWR0aDogdGhpcy5wcm9ncmVzcyArIFwiJVwiLFxuICAgIH07XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLmNzcy5wcm9ncmVzc30gc3R5bGU9e3N0eWxlfT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIHN0eWxlPXtwcm9ncmVzc1N0eWxlfVxuICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5jc3MucHJvZ3Jlc3NCYXJ9XG4gICAgICAgICAgcm9sZT1cInByb2dyZXNzYmFyXCJcbiAgICAgICAgICBhcmlhLXZhbHVlbWluPXswfVxuICAgICAgICAgIGFyaWEtdmFsdWVtYXg9ezEwMH1cbiAgICAgICAgPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBjbGFzc05hbWU9e1N1cnZleVByb2dyZXNzTW9kZWwuZ2V0UHJvZ3Jlc3NUZXh0SW5CYXJDc3ModGhpcy5jc3MpfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt0aGlzLnByb2dyZXNzVGV4dH1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzTmFtZT17U3VydmV5UHJvZ3Jlc3NNb2RlbC5nZXRQcm9ncmVzc1RleHRVbmRlckJhckNzcyh0aGlzLmNzcyl9XG4gICAgICAgID5cbiAgICAgICAgICB7dGhpcy5wcm9ncmVzc1RleHR9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdi1wcm9ncmVzcy1wYWdlc1wiLCBwcm9wcyA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVByb2dyZXNzLCBwcm9wcyk7XG59KTtcblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3YtcHJvZ3Jlc3MtcXVlc3Rpb25zXCIsIHByb3BzID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UHJvZ3Jlc3MsIHByb3BzKTtcbn0pO1xuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3YtcHJvZ3Jlc3MtY29ycmVjdFF1ZXN0aW9uc1wiLFxuICBwcm9wcyA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UHJvZ3Jlc3MsIHByb3BzKTtcbiAgfVxuKTtcblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2LXByb2dyZXNzLXJlcXVpcmVkUXVlc3Rpb25zXCIsXG4gIHByb3BzID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlQcm9ncmVzcywgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlQcm9ncmVzc0J1dHRvbnNNb2RlbCwgUGFnZU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlOYXZpZ2F0aW9uQmFzZSB9IGZyb20gXCIuL3JlYWN0U3VydmV5TmF2aWdhdGlvbkJhc2VcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi9lbGVtZW50LWZhY3RvcnlcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVByb2dyZXNzQnV0dG9ucyBleHRlbmRzIFN1cnZleU5hdmlnYXRpb25CYXNlIHtcbiAgcHJpdmF0ZSBwcm9ncmVzc0J1dHRvbnNNb2RlbDogU3VydmV5UHJvZ3Jlc3NCdXR0b25zTW9kZWw7XG4gIHByaXZhdGUgdXBkYXRlU2Nyb2xsZXI6IGFueSA9IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBsaXN0Q29udGFpbmVyUmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMucHJvZ3Jlc3NCdXR0b25zTW9kZWwgPSBuZXcgU3VydmV5UHJvZ3Jlc3NCdXR0b25zTW9kZWwodGhpcy5zdXJ2ZXkpO1xuICAgIHRoaXMubGlzdENvbnRhaW5lclJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICB9XG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLmNzcy5wcm9ncmVzc0J1dHRvbnNDb250YWluZXJDZW50ZXJ9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5jc3MucHJvZ3Jlc3NCdXR0b25zQ29udGFpbmVyfT5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9e3RoaXMuZ2V0U2Nyb2xsQnV0dG9uQ3NzKHRydWUpfVxuICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PlxuICAgICAgICAgICAgICB0aGlzLmNsaWNrU2Nyb2xsQnV0dG9uKHRoaXMubGlzdENvbnRhaW5lclJlZi5jdXJyZW50LCB0cnVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9e3RoaXMuY3NzLnByb2dyZXNzQnV0dG9uc0xpc3RDb250YWluZXJ9XG4gICAgICAgICAgICByZWY9e3RoaXMubGlzdENvbnRhaW5lclJlZn1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8dWwgY2xhc3NOYW1lPXt0aGlzLmNzcy5wcm9ncmVzc0J1dHRvbnNMaXN0fT5cbiAgICAgICAgICAgICAge3RoaXMuZ2V0TGlzdEVsZW1lbnRzKCl9XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5nZXRTY3JvbGxCdXR0b25Dc3MoZmFsc2UpfVxuICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PlxuICAgICAgICAgICAgICB0aGlzLmNsaWNrU2Nyb2xsQnV0dG9uKHRoaXMubGlzdENvbnRhaW5lclJlZi5jdXJyZW50LCBmYWxzZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0TGlzdEVsZW1lbnRzKCk6IEpTWC5FbGVtZW50W10ge1xuICAgIGxldCBidXR0b25zOiBKU1guRWxlbWVudFtdID0gW107XG4gICAgdGhpcy5zdXJ2ZXkudmlzaWJsZVBhZ2VzLmZvckVhY2goKHBhZ2U6IFBhZ2VNb2RlbCwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgYnV0dG9ucy5wdXNoKHRoaXMucmVuZGVyTGlzdEVsZW1lbnQocGFnZSwgaW5kZXgpKTtcbiAgICB9KTtcbiAgICByZXR1cm4gYnV0dG9ucztcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyTGlzdEVsZW1lbnQocGFnZTogUGFnZU1vZGVsLCBpbmRleDogbnVtYmVyKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8bGlcbiAgICAgICAga2V5PXtcImxpc3RlbGVtZW50XCIgKyBpbmRleH1cbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLmdldExpc3RFbGVtZW50Q3NzKGluZGV4KX1cbiAgICAgICAgb25DbGljaz17XG4gICAgICAgICAgdGhpcy5pc0xpc3RFbGVtZW50Q2xpY2thYmxlKGluZGV4KVxuICAgICAgICAgICAgPyAoKSA9PiB0aGlzLmNsaWNrTGlzdEVsZW1lbnQoaW5kZXgpXG4gICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICB9XG4gICAgICA+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e3RoaXMuY3NzLnByb2dyZXNzQnV0dG9uc1BhZ2VUaXRsZX1cbiAgICAgICAgICB0aXRsZT17cGFnZS5uYXZpZ2F0aW9uVGl0bGUgfHwgcGFnZS5uYW1lfVxuICAgICAgICA+XG4gICAgICAgICAge3BhZ2UubmF2aWdhdGlvblRpdGxlIHx8IHBhZ2UubmFtZX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e3RoaXMuY3NzLnByb2dyZXNzQnV0dG9uc1BhZ2VEZXNjcmlwdGlvbn1cbiAgICAgICAgICB0aXRsZT17cGFnZS5uYXZpZ2F0aW9uRGVzY3JpcHRpb259XG4gICAgICAgID5cbiAgICAgICAgICB7cGFnZS5uYXZpZ2F0aW9uRGVzY3JpcHRpb259XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9saT5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBpc0xpc3RFbGVtZW50Q2xpY2thYmxlKGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wcm9ncmVzc0J1dHRvbnNNb2RlbC5pc0xpc3RFbGVtZW50Q2xpY2thYmxlKGluZGV4KTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0TGlzdEVsZW1lbnRDc3MoaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvZ3Jlc3NCdXR0b25zTW9kZWwuZ2V0TGlzdEVsZW1lbnRDc3MoaW5kZXgpO1xuICB9XG4gIHByb3RlY3RlZCBjbGlja0xpc3RFbGVtZW50KGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnByb2dyZXNzQnV0dG9uc01vZGVsLmNsaWNrTGlzdEVsZW1lbnQoaW5kZXgpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTY3JvbGxCdXR0b25Dc3MoaXNMZWZ0U2Nyb2xsOiBib29sZWFuKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9ncmVzc0J1dHRvbnNNb2RlbC5nZXRTY3JvbGxCdXR0b25Dc3ModGhpcy5zdGF0ZS5oYXNTY3JvbGxlciwgaXNMZWZ0U2Nyb2xsKTtcbiAgfVxuICBwcm90ZWN0ZWQgY2xpY2tTY3JvbGxCdXR0b24oXG4gICAgbGlzdENvbnRhaW5lckVsZW1lbnQ6IEVsZW1lbnQsXG4gICAgaXNMZWZ0U2Nyb2xsOiBib29sZWFuXG4gICk6IHZvaWQge1xuICAgIGxpc3RDb250YWluZXJFbGVtZW50LnNjcm9sbExlZnQgKz0gKGlzTGVmdFNjcm9sbCA/IC0xIDogMSkgKiA3MDtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICB0aGlzLnVwZGF0ZVNjcm9sbGVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGhhc1Njcm9sbGVyOlxuICAgICAgICAgIHRoaXMubGlzdENvbnRhaW5lclJlZi5jdXJyZW50LnNjcm9sbFdpZHRoID5cbiAgICAgICAgICB0aGlzLmxpc3RDb250YWluZXJSZWYuY3VycmVudC5vZmZzZXRXaWR0aCxcbiAgICAgIH0pO1xuICAgIH0sIDEwMCk7XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLnVwZGF0ZVNjcm9sbGVyICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMudXBkYXRlU2Nyb2xsZXIpO1xuICAgICAgdGhpcy51cGRhdGVTY3JvbGxlciA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdi1wcm9ncmVzcy1idXR0b25zXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlQcm9ncmVzc0J1dHRvbnMsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXkgfSBmcm9tIFwiLi9yZWFjdFN1cnZleVwiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IEJhc2UsIFN1cnZleVdpbmRvd01vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlXaW5kb3cgZXh0ZW5kcyBTdXJ2ZXkge1xuICBwcm90ZWN0ZWQgd2luZG93OiBTdXJ2ZXlXaW5kb3dNb2RlbDtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmhhbmRsZU9uRXhwYW5kZWQgPSB0aGlzLmhhbmRsZU9uRXhwYW5kZWQuYmluZCh0aGlzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50cygpOiBBcnJheTxCYXNlPiB7XG4gICAgcmV0dXJuIFt0aGlzLndpbmRvdywgdGhpcy53aW5kb3cuc3VydmV5XTtcbiAgfVxuICBoYW5kbGVPbkV4cGFuZGVkKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLndpbmRvdy5jaGFuZ2VFeHBhbmRDb2xsYXBzZSgpO1xuICB9XG4gIHByb3RlY3RlZCBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHN1cGVyLmNhblJlbmRlcigpICYmIHRoaXMud2luZG93LmlzU2hvd2luZztcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGhlYWRlciA9IHRoaXMucmVuZGVyV2luZG93SGVhZGVyKCk7XG4gICAgdmFyIGJvZHkgPSB0aGlzLndpbmRvdy5pc0V4cGFuZGVkID8gdGhpcy5yZW5kZXJCb2R5KCkgOiBudWxsO1xuICAgIGxldCBzdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICAgIHBvc2l0aW9uOiBcImZpeGVkXCIsXG4gICAgICBib3R0b206IDMsXG4gICAgICByaWdodDogMTAsXG4gICAgICBtYXhXaWR0aDogXCI2MCVcIixcbiAgICB9O1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy53aW5kb3cuY3NzUm9vdH0gc3R5bGU9e3N0eWxlfT5cbiAgICAgICAge2hlYWRlcn1cbiAgICAgICAge2JvZHl9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJXaW5kb3dIZWFkZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBzdHlsZUEgPSB7IHdpZHRoOiBcIjEwMCVcIiwgY3Vyc29yOiBcInBvaW50ZXJcIiB9O1xuICAgIHZhciBzdHlsZVRpdGxlID0geyBwYWRkaW5nUmlnaHQ6IFwiMTBweFwiIH07XG4gICAgdmFyIGdseXBoQ2xhc3NOYW1lID0gdGhpcy53aW5kb3cuY3NzQnV0dG9uO1xuICAgIGdseXBoQ2xhc3NOYW1lID0gXCJnbHlwaGljb24gcHVsbC1yaWdodCBcIiArIGdseXBoQ2xhc3NOYW1lO1xuICAgIHZhciB0aXRsZSA9IFN1cnZleUVsZW1lbnRCYXNlLnJlbmRlckxvY1N0cmluZyh0aGlzLnN1cnZleS5sb2NUaXRsZSk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLndpbmRvdy5jc3NIZWFkZXJSb290fT5cbiAgICAgICAgPHNwYW4gb25DbGljaz17dGhpcy5oYW5kbGVPbkV4cGFuZGVkfSBzdHlsZT17c3R5bGVBfT5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3RoaXMud2luZG93LmNzc0hlYWRlclRpdGxlfSBzdHlsZT17c3R5bGVUaXRsZX0+XG4gICAgICAgICAgICB7dGl0bGV9XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Z2x5cGhDbGFzc05hbWV9IGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAge3RoaXMud2luZG93LmlzRXhwYW5kZWQgPyAoXG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMuaGFuZGxlT25FeHBhbmRlZH1cbiAgICAgICAgICAgIHN0eWxlPXt7IGZsb2F0OiBcInJpZ2h0XCIsIGN1cnNvcjogXCJwb2ludGVyXCIgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3RoaXMud2luZG93LmNzc0hlYWRlclRpdGxlfSBzdHlsZT17c3R5bGVUaXRsZX0+XG4gICAgICAgICAgICAgIFhcbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQm9keSgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXt0aGlzLndpbmRvdy5jc3NCb2R5fT57dGhpcy5kb1JlbmRlcigpfTwvZGl2PjtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlU3VydmV5KG5ld1Byb3BzOiBhbnkpIHtcbiAgICBpZiAoIW5ld1Byb3BzKSBuZXdQcm9wcyA9IHt9O1xuICAgIHN1cGVyLmNyZWF0ZVN1cnZleShuZXdQcm9wcyk7XG4gICAgdGhpcy53aW5kb3cgPSBuZXcgU3VydmV5V2luZG93TW9kZWwobnVsbCwgdGhpcy5zdXJ2ZXkpO1xuICAgIGlmIChuZXdQcm9wcy5jbG9zZU9uQ29tcGxldGVUaW1lb3V0KSB7XG4gICAgICB0aGlzLndpbmRvdy5jbG9zZU9uQ29tcGxldGVUaW1lb3V0ID0gbmV3UHJvcHMuY2xvc2VPbkNvbXBsZXRlVGltZW91dDtcbiAgICB9XG4gICAgdGhpcy53aW5kb3cuaXNTaG93aW5nID0gdHJ1ZTtcbiAgICBpZiAoIXRoaXMud2luZG93LmlzRXhwYW5kZWQgJiYgKG5ld1Byb3BzLmV4cGFuZGVkIHx8IG5ld1Byb3BzLmlzRXhwYW5kZWQpKVxuICAgICAgdGhpcy53aW5kb3cuZXhwYW5kKCk7XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtcbiAgQmFzZSxcbiAgU3VydmV5RWxlbWVudCxcbiAgU3VydmV5RXJyb3IsXG4gIFF1ZXN0aW9uLFxuICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRDZWxsLFxuICBkb0tleTJDbGlja1VwLFxuICBUb29sdGlwTWFuYWdlcixcbiAgU3VydmV5TW9kZWxcbn0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlciB9IGZyb20gXCIuL3JlYWN0c3VydmV5bW9kZWxcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRCYXNlLCBSZWFjdFN1cnZleUVsZW1lbnQgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uQ29tbWVudEl0ZW0gfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2NvbW1lbnRcIjtcbmltcG9ydCB7IFN1cnZleUN1c3RvbVdpZGdldCB9IGZyb20gXCIuL2N1c3RvbS13aWRnZXRcIjtcbmltcG9ydCB7IFRpdGxlRWxlbWVudCB9IGZyb20gXCIuL2NvbXBvbmVudHMvdGl0bGUvdGl0bGUtZWxlbWVudFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIElTdXJ2ZXlDcmVhdG9yIHtcbiAgY3JlYXRlUXVlc3Rpb25FbGVtZW50KHF1ZXN0aW9uOiBRdWVzdGlvbik6IEpTWC5FbGVtZW50O1xuICByZW5kZXJFcnJvcihrZXk6IHN0cmluZywgZXJyb3I6IFN1cnZleUVycm9yLCBjc3NDbGFzc2VzOiBhbnkpOiBKU1guRWxlbWVudDtcbiAgcXVlc3Rpb25UaXRsZUxvY2F0aW9uKCk6IHN0cmluZztcbiAgcXVlc3Rpb25FcnJvckxvY2F0aW9uKCk6IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uIGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8YW55LCBhbnk+IHtcbiAgcHJpdmF0ZSBpc05lZWRGb2N1cyA9IGZhbHNlO1xuICBwdWJsaWMgc3RhdGljIHJlbmRlclF1ZXN0aW9uQm9keShcbiAgICBjcmVhdG9yOiBJU3VydmV5Q3JlYXRvcixcbiAgICBxdWVzdGlvbjogUXVlc3Rpb25cbiAgKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghcXVlc3Rpb24uaXNWaXNpYmxlKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgY3VzdG9tV2lkZ2V0ID0gcXVlc3Rpb24uY3VzdG9tV2lkZ2V0O1xuICAgIGlmICghY3VzdG9tV2lkZ2V0KSB7XG4gICAgICByZXR1cm4gY3JlYXRvci5jcmVhdGVRdWVzdGlvbkVsZW1lbnQocXVlc3Rpb24pO1xuICAgIH1cbiAgICByZXR1cm4gPFN1cnZleUN1c3RvbVdpZGdldCBjcmVhdG9yPXtjcmVhdG9yfSBxdWVzdGlvbj17cXVlc3Rpb259IC8+O1xuICB9XG4gIHByaXZhdGUgcm9vdFJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnJvb3RSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb24ge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmVsZW1lbnQ7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgY3JlYXRvcigpOiBJU3VydmV5Q3JlYXRvciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3JlYXRvcjtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIGlmICghIXRoaXMucXVlc3Rpb24pIHtcbiAgICAgIHRoaXMucXVlc3Rpb25bXCJyZWFjdFwiXSA9IHRoaXM7XG4gICAgfVxuICAgIHRoaXMuZG9BZnRlclJlbmRlcigpO1xuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAgaWYgKCEhdGhpcy5xdWVzdGlvbikge1xuICAgICAgdGhpcy5xdWVzdGlvbltcInJlYWN0XCJdID0gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgZWwgPSB0aGlzLnJvb3RSZWYuY3VycmVudDtcbiAgICBpZiAoISFlbCkge1xuICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKFwiZGF0YS1yZW5kZXJlZFwiKTtcbiAgICB9XG4gIH1cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogYW55LCBwcmV2U3RhdGU6IGFueSkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSk7XG4gICAgdGhpcy5kb0FmdGVyUmVuZGVyKCk7XG4gIH1cbiAgcHJpdmF0ZSBkb0FmdGVyUmVuZGVyKCkge1xuICAgIGlmICh0aGlzLmlzTmVlZEZvY3VzKSB7XG4gICAgICBpZiAoIXRoaXMucXVlc3Rpb24uaXNDb2xsYXBzZWQpIHtcbiAgICAgICAgdGhpcy5xdWVzdGlvbi5jbGlja1RpdGxlRnVuY3Rpb24oKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuaXNOZWVkRm9jdXMgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHRoaXMucXVlc3Rpb24pIHtcbiAgICAgIHZhciBlbCA9IHRoaXMucm9vdFJlZi5jdXJyZW50O1xuICAgICAgaWYgKGVsICYmIGVsLmdldEF0dHJpYnV0ZShcImRhdGEtcmVuZGVyZWRcIikgIT09IFwiclwiKSB7XG4gICAgICAgIGVsLnNldEF0dHJpYnV0ZShcImRhdGEtcmVuZGVyZWRcIiwgXCJyXCIpO1xuICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoXCJkYXRhLW5hbWVcIiwgdGhpcy5xdWVzdGlvbi5uYW1lKTtcbiAgICAgICAgaWYgKHRoaXMucXVlc3Rpb24uYWZ0ZXJSZW5kZXIpIHtcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uLmFmdGVyUmVuZGVyKGVsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBzdXBlci5jYW5SZW5kZXIoKSAmJlxuICAgICAgISF0aGlzLnF1ZXN0aW9uICYmXG4gICAgICAhIXRoaXMuY3JlYXRvciAmJlxuICAgICAgdGhpcy5xdWVzdGlvbi5pc1Zpc2libGVcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlbmRlclF1ZXN0aW9uQ29udGVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgbGV0IHF1ZXN0aW9uID0gdGhpcy5xdWVzdGlvbjtcbiAgICB2YXIgY29udGVudFN0eWxlID0ge1xuICAgICAgZGlzcGxheTogIXRoaXMucXVlc3Rpb24uaXNDb2xsYXBzZWQgPyBcIlwiIDogXCJub25lXCIsXG4gICAgfTtcbiAgICB2YXIgY3NzQ2xhc3NlcyA9IHF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgdmFyIHF1ZXN0aW9uUmVuZGVyID0gdGhpcy5yZW5kZXJRdWVzdGlvbigpO1xuICAgIHZhciBlcnJvcnNUb3AgPVxuICAgIHRoaXMuY3JlYXRvci5xdWVzdGlvbkVycm9yTG9jYXRpb24oKSA9PT0gXCJ0b3BcIiAmJlxuICAgICF0aGlzLnF1ZXN0aW9uLmlzRXJyb3JzTW9kZVRvb2x0aXBcbiAgICAgID8gdGhpcy5yZW5kZXJFcnJvcnMoY3NzQ2xhc3NlcywgXCJ0b3BcIilcbiAgICAgIDogbnVsbDtcbiAgICB2YXIgZXJyb3JzQm90dG9tID1cbiAgICB0aGlzLmNyZWF0b3IucXVlc3Rpb25FcnJvckxvY2F0aW9uKCkgPT09IFwiYm90dG9tXCIgJiZcbiAgICAhdGhpcy5xdWVzdGlvbi5pc0Vycm9yc01vZGVUb29sdGlwXG4gICAgICA/IHRoaXMucmVuZGVyRXJyb3JzKGNzc0NsYXNzZXMsIFwiYm90dG9tXCIpXG4gICAgICA6IG51bGw7XG4gICAgdmFyIGNvbW1lbnQgPVxuICAgICAgcXVlc3Rpb24gJiYgcXVlc3Rpb24uaGFzQ29tbWVudCA/IHRoaXMucmVuZGVyQ29tbWVudChjc3NDbGFzc2VzKSA6IG51bGw7XG4gICAgY29uc3QgZXJyb3JzVG9vbHRpcCA9XG4gICAgICB0aGlzLnF1ZXN0aW9uLmlzRXJyb3JzTW9kZVRvb2x0aXAgJiYgdGhpcy5xdWVzdGlvbi5oYXNQYXJlbnRcbiAgICAgICAgPyB0aGlzLnJlbmRlckVycm9ycyhjc3NDbGFzc2VzLCBcInRvb2x0aXBcIilcbiAgICAgICAgOiBudWxsO1xuICAgIHZhciBkZXNjcmlwdGlvblVuZGVySW5wdXQgPSBxdWVzdGlvbi5oYXNEZXNjcmlwdGlvblVuZGVySW5wdXRcbiAgICAgID8gdGhpcy5yZW5kZXJEZXNjcmlwdGlvbihjc3NDbGFzc2VzLCB0cnVlKVxuICAgICAgOiBudWxsO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17cXVlc3Rpb24uY3NzQ29udGVudH1cbiAgICAgICAgc3R5bGU9e2NvbnRlbnRTdHlsZX1cbiAgICAgICAgcm9sZT1cInByZXNlbnRhdGlvblwiXG4gICAgICA+XG4gICAgICAgIHtlcnJvcnNUb3B9XG4gICAgICAgIHtxdWVzdGlvblJlbmRlcn1cbiAgICAgICAge2NvbW1lbnR9XG4gICAgICAgIHtlcnJvcnNCb3R0b219XG4gICAgICAgIHtlcnJvcnNUb29sdGlwfVxuICAgICAgICB7ZGVzY3JpcHRpb25VbmRlcklucHV0fVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIHF1ZXN0aW9uID0gdGhpcy5xdWVzdGlvbjtcbiAgICB2YXIgY3NzQ2xhc3NlcyA9IHF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgdmFyIGhlYWRlciA9IHRoaXMucmVuZGVySGVhZGVyKHF1ZXN0aW9uKTtcbiAgICB2YXIgaGVhZGVyVG9wID0gcXVlc3Rpb24uaGFzVGl0bGVPbkxlZnRUb3AgPyBoZWFkZXIgOiBudWxsO1xuICAgIHZhciBoZWFkZXJCb3R0b20gPSBxdWVzdGlvbi5oYXNUaXRsZU9uQm90dG9tID8gaGVhZGVyIDogbnVsbDtcblxuICAgIGNvbnN0IGVycm9yc0Fib3ZlUXVlc3Rpb24gPVxuICAgICAgdGhpcy5xdWVzdGlvbi5pc0Vycm9yc01vZGVUb29sdGlwICYmICF0aGlzLnF1ZXN0aW9uLmhhc1BhcmVudFxuICAgICAgICA/IHRoaXMucmVuZGVyRXJyb3JzKGNzc0NsYXNzZXMsIFwiXCIpXG4gICAgICAgIDogbnVsbDtcblxuICAgIGxldCByb290U3R5bGU6IHsgW2luZGV4OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICAgIGlmICghIXF1ZXN0aW9uLnBhZGRpbmdMZWZ0KSByb290U3R5bGVbXCJwYWRkaW5nTGVmdFwiXSA9IHF1ZXN0aW9uLnBhZGRpbmdMZWZ0O1xuICAgIGlmICghIXF1ZXN0aW9uLnBhZGRpbmdSaWdodClcbiAgICAgIHJvb3RTdHlsZVtcInBhZGRpbmdSaWdodFwiXSA9IHF1ZXN0aW9uLnBhZGRpbmdSaWdodDtcblxuICAgIGxldCBxdWVzdGlvbkNvbnRlbnQgPSB0aGlzLndyYXBRdWVzdGlvbkNvbnRlbnQodGhpcy5yZW5kZXJRdWVzdGlvbkNvbnRlbnQoKSk7XG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICByZWY9e3RoaXMucm9vdFJlZn1cbiAgICAgICAgICBpZD17cXVlc3Rpb24uaWR9XG4gICAgICAgICAgY2xhc3NOYW1lPXtxdWVzdGlvbi5nZXRSb290Q3NzKCl9XG4gICAgICAgICAgc3R5bGU9e3Jvb3RTdHlsZX1cbiAgICAgICAgICByb2xlPXtxdWVzdGlvbi5hcmlhUm9sZX1cbiAgICAgICAgICBhcmlhLXJlcXVpcmVkPXt0aGlzLnF1ZXN0aW9uLmFyaWFSZXF1aXJlZH1cbiAgICAgICAgICBhcmlhLWludmFsaWQ9e3RoaXMucXVlc3Rpb24uYXJpYUludmFsaWR9XG4gICAgICAgICAgYXJpYS1sYWJlbGxlZGJ5PXtxdWVzdGlvbi5oYXNUaXRsZSA/IHF1ZXN0aW9uLmFyaWFUaXRsZUlkIDogbnVsbH1cbiAgICAgICAgPlxuICAgICAgICAgIHtlcnJvcnNBYm92ZVF1ZXN0aW9ufVxuICAgICAgICAgIHtoZWFkZXJUb3B9XG4gICAgICAgICAge3F1ZXN0aW9uQ29udGVudH1cbiAgICAgICAgICB7aGVhZGVyQm90dG9tfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvPlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHdyYXBFbGVtZW50KGVsZW1lbnQ6IEpTWC5FbGVtZW50KTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHN1cnZleTogU3VydmV5TW9kZWwgPSB0aGlzLnF1ZXN0aW9uLnN1cnZleSBhcyBTdXJ2ZXlNb2RlbDtcbiAgICBsZXQgd3JhcHBlcjogSlNYLkVsZW1lbnQ7XG4gICAgaWYgKHN1cnZleSkge1xuICAgICAgd3JhcHBlciA9IFJlYWN0U3VydmV5RWxlbWVudHNXcmFwcGVyLndyYXBFbGVtZW50KHN1cnZleSwgZWxlbWVudCwgdGhpcy5xdWVzdGlvbik7XG4gICAgfVxuICAgIHJldHVybiB3cmFwcGVyID8/IGVsZW1lbnQ7XG4gIH1cbiAgcHJvdGVjdGVkIHdyYXBRdWVzdGlvbkNvbnRlbnQoZWxlbWVudDogSlNYLkVsZW1lbnQpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3Qgc3VydmV5OiBTdXJ2ZXlNb2RlbCA9IHRoaXMucXVlc3Rpb24uc3VydmV5IGFzIFN1cnZleU1vZGVsO1xuICAgIGxldCB3cmFwcGVyOiBKU1guRWxlbWVudDtcbiAgICBpZiAoc3VydmV5KSB7XG4gICAgICB3cmFwcGVyID0gUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIud3JhcFF1ZXN0aW9uQ29udGVudChzdXJ2ZXksIGVsZW1lbnQsIHRoaXMucXVlc3Rpb24pO1xuICAgIH1cbiAgICByZXR1cm4gd3JhcHBlciA/PyBlbGVtZW50O1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJRdWVzdGlvbigpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIFN1cnZleVF1ZXN0aW9uLnJlbmRlclF1ZXN0aW9uQm9keSh0aGlzLmNyZWF0b3IsIHRoaXMucXVlc3Rpb24pO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJEZXNjcmlwdGlvbihcbiAgICBjc3NDbGFzc2VzOiBhbnksXG4gICAgaXNVbmRlcklucHV0OiBib29sZWFuID0gZmFsc2VcbiAgKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBkZXNjcmlwdGlvblRleHQgPSBTdXJ2ZXlFbGVtZW50QmFzZS5yZW5kZXJMb2NTdHJpbmcoXG4gICAgICB0aGlzLnF1ZXN0aW9uLmxvY0Rlc2NyaXB0aW9uXG4gICAgKTtcbiAgICB2YXIgY2xhc3NOYW1lID0gaXNVbmRlcklucHV0XG4gICAgICA/IGNzc0NsYXNzZXMuZGVzY3JpcHRpb25VbmRlcklucHV0XG4gICAgICA6IGNzc0NsYXNzZXMuZGVzY3JpcHRpb247XG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWV9PntkZXNjcmlwdGlvblRleHR9PC9kaXY+O1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJDb21tZW50KGNzc0NsYXNzZXM6IGFueSk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgY29tbWVudFRleHQgPSBTdXJ2ZXlFbGVtZW50QmFzZS5yZW5kZXJMb2NTdHJpbmcoXG4gICAgICB0aGlzLnF1ZXN0aW9uLmxvY0NvbW1lbnRUZXh0XG4gICAgKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5mb3JtR3JvdXB9PlxuICAgICAgICA8ZGl2Pntjb21tZW50VGV4dH08L2Rpdj5cbiAgICAgICAgPFN1cnZleVF1ZXN0aW9uQ29tbWVudEl0ZW1cbiAgICAgICAgICBxdWVzdGlvbj17dGhpcy5xdWVzdGlvbn1cbiAgICAgICAgICBjc3NDbGFzc2VzPXtjc3NDbGFzc2VzfVxuICAgICAgICAgIG90aGVyQ3NzPXtjc3NDbGFzc2VzLm90aGVyfVxuICAgICAgICAgIGlzRGlzcGxheU1vZGU9e3RoaXMucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5fVxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVySGVhZGVyKHF1ZXN0aW9uOiBRdWVzdGlvbik6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgY3NzQ2xhc3NlcyA9IHF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgdmFyIHRpdGxlID0gcXVlc3Rpb24uaGFzVGl0bGUgPyAoXG4gICAgICA8VGl0bGVFbGVtZW50IGVsZW1lbnQ9e3F1ZXN0aW9ufT48L1RpdGxlRWxlbWVudD5cbiAgICApIDogbnVsbDtcbiAgICB2YXIgZGVzY3JpcHRpb24gPSBxdWVzdGlvbi5oYXNEZXNjcmlwdGlvblVuZGVyVGl0bGVcbiAgICAgID8gdGhpcy5yZW5kZXJEZXNjcmlwdGlvbihjc3NDbGFzc2VzKVxuICAgICAgOiBudWxsO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17cXVlc3Rpb24uY3NzSGVhZGVyfSBvbkNsaWNrPXtxdWVzdGlvbi5jbGlja1RpdGxlRnVuY3Rpb259PlxuICAgICAgICB7dGl0bGV9XG4gICAgICAgIHtkZXNjcmlwdGlvbn1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVycm9ycyhjc3NDbGFzc2VzOiBhbnksIGxvY2F0aW9uOiBzdHJpbmcpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTdXJ2ZXlFbGVtZW50RXJyb3JzXG4gICAgICAgIGVsZW1lbnQ9e3RoaXMucXVlc3Rpb259XG4gICAgICAgIGNzc0NsYXNzZXM9e2Nzc0NsYXNzZXN9XG4gICAgICAgIGNyZWF0b3I9e3RoaXMuY3JlYXRvcn1cbiAgICAgICAgbG9jYXRpb249e2xvY2F0aW9ufVxuICAgICAgICBpZD17dGhpcy5xdWVzdGlvbi5pZCArIFwiX2Vycm9yc1wifVxuICAgICAgLz5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwicXVlc3Rpb25cIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uLCBwcm9wcyk7XG59KTtcblxuZXhwb3J0IGNsYXNzIFN1cnZleUVsZW1lbnRFcnJvcnMgZXh0ZW5kcyBSZWFjdFN1cnZleUVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3RhdGUgPSB0aGlzLmdldFN0YXRlKCk7XG4gICAgdGhpcy50b29sdGlwUmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBpZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmlkO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgZWxlbWVudCgpOiBTdXJ2ZXlFbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5lbGVtZW50O1xuICB9XG4gIHByaXZhdGUgZ2V0IGNyZWF0b3IoKTogSVN1cnZleUNyZWF0b3Ige1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNyZWF0b3I7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBsb2NhdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmxvY2F0aW9uO1xuICB9XG4gIHByaXZhdGUgZ2V0U3RhdGUocHJldlN0YXRlOiBhbnkgPSBudWxsKSB7XG4gICAgcmV0dXJuICFwcmV2U3RhdGUgPyB7IGVycm9yOiAwIH0gOiB7IGVycm9yOiBwcmV2U3RhdGUuZXJyb3IgKyAxIH07XG4gIH1cbiAgcHJvdGVjdGVkIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmVsZW1lbnQgJiYgdGhpcy5lbGVtZW50Lmhhc1Zpc2libGVFcnJvcnM7XG4gIH1cbiAgcHJpdmF0ZSB0b29sdGlwTWFuYWdlcjogVG9vbHRpcE1hbmFnZXI7XG4gIHByaXZhdGUgdG9vbHRpcFJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogYW55LCBwcmV2U3RhdGU6IGFueSkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSk7XG4gICAgaWYgKHRoaXMucHJvcHMubG9jYXRpb24gPT0gXCJ0b29sdGlwXCIpIHtcbiAgICAgIGlmICh0aGlzLnRvb2x0aXBSZWYuY3VycmVudCAmJiAhdGhpcy50b29sdGlwTWFuYWdlcikge1xuICAgICAgICB0aGlzLnRvb2x0aXBNYW5hZ2VyID0gbmV3IFRvb2x0aXBNYW5hZ2VyKHRoaXMudG9vbHRpcFJlZi5jdXJyZW50KTtcbiAgICAgIH1cbiAgICAgIGlmICghIXRoaXMudG9vbHRpcE1hbmFnZXIgJiYgIXRoaXMudG9vbHRpcFJlZi5jdXJyZW50KSB7XG4gICAgICAgIHRoaXMuZGlzcG9zZVRvb2x0aXBNYW5hZ2VyKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIGlmICghIXRoaXMudG9vbHRpcE1hbmFnZXIpIHtcbiAgICAgIHRoaXMuZGlzcG9zZVRvb2x0aXBNYW5hZ2VyKCk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZGlzcG9zZVRvb2x0aXBNYW5hZ2VyKCkge1xuICAgIHRoaXMudG9vbHRpcE1hbmFnZXIuZGlzcG9zZSgpO1xuICAgIHRoaXMudG9vbHRpcE1hbmFnZXIgPSB1bmRlZmluZWQ7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGVycm9ycyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50LmVycm9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qga2V5OiBzdHJpbmcgPSBcImVycm9yXCIgKyBpO1xuICAgICAgZXJyb3JzLnB1c2goXG4gICAgICAgIHRoaXMuY3JlYXRvci5yZW5kZXJFcnJvcihrZXksIHRoaXMuZWxlbWVudC5lcnJvcnNbaV0sIHRoaXMuY3NzQ2xhc3NlcylcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgcm9sZT1cImFsZXJ0XCJcbiAgICAgICAgYXJpYS1saXZlPVwicG9saXRlXCJcbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLmVsZW1lbnQuY3NzRXJyb3J9XG4gICAgICAgIGlkPXt0aGlzLmlkfVxuICAgICAgICByZWY9e3RoaXMudG9vbHRpcFJlZn1cbiAgICAgID5cbiAgICAgICAge2Vycm9yc31cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFN1cnZleVF1ZXN0aW9uQW5kRXJyb3JzV3JhcHBlZCBleHRlbmRzIFJlYWN0U3VydmV5RWxlbWVudCB7XG4gIFtpbmRleDogc3RyaW5nXTogYW55O1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb247XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UXVlc3Rpb24oKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGNyZWF0b3IoKTogSVN1cnZleUNyZWF0b3Ige1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNyZWF0b3I7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFF1ZXN0aW9uKCk6IFF1ZXN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5xdWVzdGlvbjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGl0ZW1Dc3MoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtQ3NzO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgdGhpcy5kb0FmdGVyUmVuZGVyKCk7XG4gIH1cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogYW55LCBwcmV2U3RhdGU6IGFueSkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSk7XG4gICAgdGhpcy5kb0FmdGVyUmVuZGVyKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGRvQWZ0ZXJSZW5kZXIoKSB7fVxuICBwcm90ZWN0ZWQgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMucXVlc3Rpb247XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVycm9ycyhlcnJvcnNMb2NhdGlvbjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U2hvd0Vycm9ycygpID8gKFxuICAgICAgPFN1cnZleUVsZW1lbnRFcnJvcnNcbiAgICAgICAgZWxlbWVudD17dGhpcy5xdWVzdGlvbn1cbiAgICAgICAgY3NzQ2xhc3Nlcz17dGhpcy5jc3NDbGFzc2VzfVxuICAgICAgICBjcmVhdG9yPXt0aGlzLmNyZWF0b3J9XG4gICAgICAgIGxvY2F0aW9uPXtlcnJvcnNMb2NhdGlvbn1cbiAgICAgIC8+XG4gICAgKSA6IG51bGw7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckNvbnRlbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBlcnJvcnNMb2NhdGlvbiA9IHRoaXMuY3JlYXRvci5xdWVzdGlvbkVycm9yTG9jYXRpb24oKTtcbiAgICB2YXIgZXJyb3JzID0gdGhpcy5yZW5kZXJFcnJvcnMoZXJyb3JzTG9jYXRpb24pO1xuICAgIHZhciBlcnJvcnNUb3AgPVxuICAgICAgZXJyb3JzTG9jYXRpb24gPT09IFwidG9wXCIgJiYgIXRoaXMucXVlc3Rpb24uaXNFcnJvcnNNb2RlVG9vbHRpcFxuICAgICAgICA/IGVycm9yc1xuICAgICAgICA6IG51bGw7XG4gICAgdmFyIGVycm9yc0JvdHRvbSA9XG4gICAgICBlcnJvcnNMb2NhdGlvbiA9PT0gXCJib3R0b21cIiAmJiAhdGhpcy5xdWVzdGlvbi5pc0Vycm9yc01vZGVUb29sdGlwXG4gICAgICAgID8gZXJyb3JzXG4gICAgICAgIDogbnVsbDtcbiAgICB2YXIgcmVuZGVyZWRRdWVzdGlvbiA9IHRoaXMucmVuZGVyUXVlc3Rpb24oKTtcbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAge2Vycm9yc1RvcH1cbiAgICAgICAge3JlbmRlcmVkUXVlc3Rpb259XG4gICAgICAgIHtlcnJvcnNCb3R0b219XG4gICAgICA8Lz5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBhYnN0cmFjdCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50O1xuICBwcm90ZWN0ZWQgZ2V0U2hvd0Vycm9ycygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5pc1Zpc2libGU7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlclF1ZXN0aW9uKCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gU3VydmV5UXVlc3Rpb24ucmVuZGVyUXVlc3Rpb25Cb2R5KHRoaXMuY3JlYXRvciwgdGhpcy5xdWVzdGlvbik7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uQW5kRXJyb3JzQ2VsbCBleHRlbmRzIFN1cnZleVF1ZXN0aW9uQW5kRXJyb3JzV3JhcHBlZCB7XG4gIFtpbmRleDogc3RyaW5nXTogYW55O1xuICBwcm90ZWN0ZWQgY2VsbFJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxUYWJsZUNlbGxFbGVtZW50PjtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmNlbGxSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uKSB7XG4gICAgICB2YXIgZWwgPSB0aGlzLmNlbGxSZWYuY3VycmVudDtcbiAgICAgIGlmICghIWVsKSB7XG4gICAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZShcImRhdGEtcmVuZGVyZWRcIik7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgc3R5bGUgPSB0aGlzLmdldENlbGxTdHlsZSgpO1xuICAgIHZhciBlcnJvcnNUb29sdGlwID0gdGhpcy5xdWVzdGlvbi5pc0Vycm9yc01vZGVUb29sdGlwXG4gICAgICA/IHRoaXMucmVuZGVyRXJyb3JzKFwidG9vbHRpcFwiKVxuICAgICAgOiBudWxsO1xuICAgIHJldHVybiAoXG4gICAgICA8dGRcbiAgICAgICAgcmVmPXt0aGlzLmNlbGxSZWZ9XG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5pdGVtQ3NzfVxuICAgICAgICBkYXRhLXJlc3BvbnNpdmUtdGl0bGU9e3RoaXMuZ2V0SGVhZGVyVGV4dCgpfVxuICAgICAgICB0aXRsZT17dGhpcy5wcm9wcy5jZWxsLmdldFRpdGxlKCl9XG4gICAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICAgID5cbiAgICAgICAge3RoaXMud3JhcENlbGwodGhpcy5wcm9wcy5jZWxsLFxuICAgICAgICAgIChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLmNzc0NsYXNzZXMuY2VsbFF1ZXN0aW9uV3JhcHBlcn0+XG4gICAgICAgICAgICAgIHt0aGlzLnJlbmRlckNvbnRlbnQoKX1cbiAgICAgICAgICAgICAge2Vycm9yc1Rvb2x0aXB9XG4gICAgICAgICAgICA8L2Rpdj4pXG4gICAgICAgICl9XG4gICAgICA8L3RkPlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldENlbGxTdHlsZSgpOiBhbnkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHByb3RlY3RlZCBnZXRIZWFkZXJUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cbiAgcHJvdGVjdGVkIHdyYXBDZWxsKFxuICAgIGNlbGw6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwsXG4gICAgZWxlbWVudDogSlNYLkVsZW1lbnRcbiAgKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghY2VsbCkge1xuICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxuICAgIGNvbnN0IHN1cnZleTogU3VydmV5TW9kZWwgPSB0aGlzLnF1ZXN0aW9uLnN1cnZleSBhcyBTdXJ2ZXlNb2RlbDtcbiAgICBsZXQgd3JhcHBlcjogSlNYLkVsZW1lbnQ7XG4gICAgaWYgKHN1cnZleSkge1xuICAgICAgd3JhcHBlciA9IFJlYWN0U3VydmV5RWxlbWVudHNXcmFwcGVyLndyYXBNYXRyaXhDZWxsKHN1cnZleSwgZWxlbWVudCwgY2VsbCk7XG4gICAgfVxuICAgIHJldHVybiB3cmFwcGVyID8/IGVsZW1lbnQ7XG4gIH1cbn1cbiIsImltcG9ydCB7IFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBTdmdJY29uIH0gZnJvbSBcIi4vY29tcG9uZW50cy9zdmctaWNvbi9zdmctaWNvblwiO1xuaW1wb3J0IHtcbiAgUXVlc3Rpb25CdXR0b25Hcm91cE1vZGVsLFxuICBCdXR0b25Hcm91cEl0ZW1WYWx1ZSxcbiAgQnV0dG9uR3JvdXBJdGVtTW9kZWwsXG59IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uQnV0dG9uR3JvdXAgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uQnV0dG9uR3JvdXBNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFF1ZXN0aW9uQnV0dG9uR3JvdXBNb2RlbDtcbiAgfVxuICBnZXRTdGF0ZUVsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb247XG4gIH1cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5yZW5kZXJJdGVtcygpO1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnJvb3R9PntpdGVtc308L2Rpdj47XG4gIH1cbiAgcmVuZGVySXRlbXMoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb24udmlzaWJsZUNob2ljZXMubWFwKFxuICAgICAgKGl0ZW06IEJ1dHRvbkdyb3VwSXRlbVZhbHVlLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPFN1cnZleUJ1dHRvbkdyb3VwSXRlbVxuICAgICAgICAgICAga2V5PXt0aGlzLnF1ZXN0aW9uLmlucHV0SWQgKyBcIl9cIiArIGluZGV4fVxuICAgICAgICAgICAgaXRlbT17aXRlbX1cbiAgICAgICAgICAgIHF1ZXN0aW9uPXt0aGlzLnF1ZXN0aW9ufVxuICAgICAgICAgICAgaW5kZXg9e2luZGV4fVxuICAgICAgICAgID48L1N1cnZleUJ1dHRvbkdyb3VwSXRlbT5cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlCdXR0b25Hcm91cEl0ZW0gZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxhbnksIGFueT4ge1xuICBwdWJsaWMgbW9kZWw6IEJ1dHRvbkdyb3VwSXRlbU1vZGVsO1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMubW9kZWwgPSBuZXcgQnV0dG9uR3JvdXBJdGVtTW9kZWwodGhpcy5xdWVzdGlvbiwgdGhpcy5pdGVtLCB0aGlzLmluZGV4KTtcbiAgfVxuICBnZXQgaW5kZXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pbmRleDtcbiAgfVxuICBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25CdXR0b25Hcm91cE1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5xdWVzdGlvbjtcbiAgfVxuICBnZXQgaXRlbSgpOiBCdXR0b25Hcm91cEl0ZW1WYWx1ZSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbTtcbiAgfVxuICBnZXRTdGF0ZUVsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbTtcbiAgfVxuICBwdWJsaWMgcmVuZGVyKCkge1xuICAgIGNvbnN0IGljb24gPSB0aGlzLnJlbmRlckljb24oKTtcbiAgICBjb25zdCBpbnB1dCA9IHRoaXMucmVuZGVySW5wdXQoKTtcbiAgICBjb25zdCBjYXB0aW9uID0gdGhpcy5yZW5kZXJDYXB0aW9uKCk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxsYWJlbFxuICAgICAgICBjbGFzc05hbWU9e3RoaXMubW9kZWwuY3NzLmxhYmVsfVxuICAgICAgICB0aXRsZT17dGhpcy5tb2RlbC5jYXB0aW9uLnJlbmRlcmVkSHRtbH1cbiAgICAgID5cbiAgICAgICAge2lucHV0fVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5tb2RlbC5jc3MuZGVjb3JhdG9yfT5cbiAgICAgICAgICB7aWNvbn1cbiAgICAgICAgICB7Y2FwdGlvbn1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2xhYmVsPlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckljb24oKSB7XG4gICAgaWYgKCEhdGhpcy5tb2RlbC5pY29uTmFtZSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFN2Z0ljb25cbiAgICAgICAgICBjbGFzc05hbWU9e3RoaXMubW9kZWwuY3NzLmljb259XG4gICAgICAgICAgaWNvbk5hbWU9e3RoaXMubW9kZWwuaWNvbk5hbWV9XG4gICAgICAgICAgc2l6ZT17dGhpcy5tb2RlbC5pY29uU2l6ZSB8fCAyNH1cbiAgICAgICAgPjwvU3ZnSWNvbj5cbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJJbnB1dCgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGlucHV0XG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5tb2RlbC5jc3MuY29udHJvbH1cbiAgICAgICAgaWQ9e3RoaXMubW9kZWwuaWR9XG4gICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgIG5hbWU9e3RoaXMubW9kZWwubmFtZX1cbiAgICAgICAgY2hlY2tlZD17dGhpcy5tb2RlbC5zZWxlY3RlZH1cbiAgICAgICAgdmFsdWU9e3RoaXMubW9kZWwudmFsdWV9XG4gICAgICAgIGRpc2FibGVkPXt0aGlzLm1vZGVsLnJlYWRPbmx5fVxuICAgICAgICBvbkNoYW5nZT17KCkgPT4ge1xuICAgICAgICAgIHRoaXMubW9kZWwub25DaGFuZ2UoKTtcbiAgICAgICAgfX1cbiAgICAgICAgYXJpYS1yZXF1aXJlZD17dGhpcy5tb2RlbC5pc1JlcXVpcmVkfVxuICAgICAgICBhcmlhLWxhYmVsPXt0aGlzLm1vZGVsLmNhcHRpb24ucmVuZGVyZWRIdG1sfVxuICAgICAgICBhcmlhLWludmFsaWQ9e3RoaXMubW9kZWwuaGFzRXJyb3JzfVxuICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PXt0aGlzLm1vZGVsLmRlc2NyaWJlZEJ5fVxuICAgICAgICByb2xlPVwicmFkaW9cIlxuICAgICAgLz5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJDYXB0aW9uKCkge1xuICAgIGlmICghdGhpcy5tb2RlbC5zaG93Q2FwdGlvbikgcmV0dXJuIG51bGw7XG4gICAgbGV0IGNhcHRpb24gPSB0aGlzLnJlbmRlckxvY1N0cmluZyh0aGlzLm1vZGVsLmNhcHRpb24pO1xuICAgIHJldHVybiAoXG4gICAgICA8c3BhblxuICAgICAgICBjbGFzc05hbWU9e3RoaXMubW9kZWwuY3NzLmNhcHRpb259XG4gICAgICAgIHRpdGxlPXt0aGlzLm1vZGVsLmNhcHRpb24ucmVuZGVyZWRIdG1sfVxuICAgICAgPlxuICAgICAgICB7Y2FwdGlvbn1cbiAgICAgIDwvc3Bhbj5cbiAgICApO1xuICB9XG59XG5cbi8vIFJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJidXR0b25ncm91cFwiLCBwcm9wcyA9PiB7XG4vLyAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uQnV0dG9uR3JvdXAsIHByb3BzKTtcbi8vIH0pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge1xuICBSZWFjdFN1cnZleUVsZW1lbnQsXG4gIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UsXG59IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25Db21tZW50SXRlbSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fY29tbWVudFwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcbmltcG9ydCB7IFJlYWN0U3VydmV5RWxlbWVudHNXcmFwcGVyIH0gZnJvbSBcIi4vcmVhY3RzdXJ2ZXltb2RlbFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25DaGVja2JveE1vZGVsIH0gZnJvbSBcIi4uL3F1ZXN0aW9uX2NoZWNrYm94XCI7XG5pbXBvcnQgeyBCYXNlLCBJdGVtVmFsdWUsIFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkNoZWNrYm94IGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbkNoZWNrYm94TW9kZWwge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBRdWVzdGlvbkNoZWNrYm94TW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBjc3NDbGFzc2VzID0gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIHJldHVybiAoXG4gICAgICA8ZmllbGRzZXRcbiAgICAgICAgcm9sZT1cInByZXNlbnRhdGlvblwiXG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRTZWxlY3RCYXNlUm9vdENzcygpfVxuICAgICAgICByZWY9eyhmaWVsZHNldCkgPT4gKHRoaXMuY29udHJvbCA9IGZpZWxkc2V0KX1cbiAgICAgID5cbiAgICAgICAgPGxlZ2VuZCByb2xlPVwicHJlc2VudGF0aW9uXCIgY2xhc3NOYW1lPXtcInN2LWhpZGRlblwifT48L2xlZ2VuZD5cbiAgICAgICAge3RoaXMucXVlc3Rpb24uaGFzQ29sdW1uc1xuICAgICAgICAgID8gdGhpcy5nZXRDb2x1bW5zKGNzc0NsYXNzZXMpXG4gICAgICAgICAgOiB0aGlzLmdldEl0ZW1zKGNzc0NsYXNzZXMpfVxuICAgICAgPC9maWVsZHNldD5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBnZXRDb2x1bW5zKGNzc0NsYXNzZXM6IGFueSkge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLmNvbHVtbnMubWFwKChjb2x1bW46IGFueSwgY2k6IG51bWJlcikgPT4ge1xuICAgICAgdmFyIGl0ZW1zID0gY29sdW1uLm1hcCgoaXRlbTogYW55LCBpaTogbnVtYmVyKSA9PlxuICAgICAgICB0aGlzLnJlbmRlckl0ZW0oXG4gICAgICAgICAgXCJpdGVtXCIgKyBpaSxcbiAgICAgICAgICBpdGVtLFxuICAgICAgICAgIGNpID09PSAwICYmIGlpID09PSAwLFxuICAgICAgICAgIGNzc0NsYXNzZXMsXG4gICAgICAgICAgXCJcIiArIGNpICsgaWlcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxkaXYga2V5PXtcImNvbHVtblwiICsgY2l9IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRDb2x1bW5DbGFzcygpfSByb2xlPVwicHJlc2VudGF0aW9uXCI+XG4gICAgICAgICAge2l0ZW1zfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICk7XG4gICAgfSk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldEl0ZW1zKGNzc0NsYXNzZXM6IGFueSk6IEFycmF5PGFueT4ge1xuICAgIHZhciByZW5kZXJlZEl0ZW1zID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnF1ZXN0aW9uLnZpc2libGVDaG9pY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaXRlbSA9IHRoaXMucXVlc3Rpb24udmlzaWJsZUNob2ljZXNbaV07XG4gICAgICB2YXIga2V5ID0gXCJpdGVtXCIgKyBpO1xuICAgICAgdmFyIHJlbmRlcmVkSXRlbSA9IHRoaXMucmVuZGVySXRlbShrZXksIGl0ZW0sIGkgPT0gMCwgY3NzQ2xhc3NlcywgXCJcIiArIGkpO1xuICAgICAgcmVuZGVyZWRJdGVtcy5wdXNoKHJlbmRlcmVkSXRlbSk7XG4gICAgfVxuICAgIHJldHVybiByZW5kZXJlZEl0ZW1zO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgdGV4dFN0eWxlKCk6IGFueSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckl0ZW0oXG4gICAga2V5OiBzdHJpbmcsXG4gICAgaXRlbTogYW55LFxuICAgIGlzRmlyc3Q6IGJvb2xlYW4sXG4gICAgY3NzQ2xhc3NlczogYW55LFxuICAgIGluZGV4OiBzdHJpbmdcbiAgKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHJlbmRlcmVkSXRlbSA9IChcbiAgICAgIDxTdXJ2ZXlRdWVzdGlvbkNoZWNrYm94SXRlbVxuICAgICAgICBrZXk9e2tleX1cbiAgICAgICAgcXVlc3Rpb249e3RoaXMucXVlc3Rpb259XG4gICAgICAgIGNzc0NsYXNzZXM9e2Nzc0NsYXNzZXN9XG4gICAgICAgIGlzRGlzcGxheU1vZGU9e3RoaXMuaXNEaXNwbGF5TW9kZX1cbiAgICAgICAgaXRlbT17aXRlbX1cbiAgICAgICAgdGV4dFN0eWxlPXt0aGlzLnRleHRTdHlsZX1cbiAgICAgICAgaXNGaXJzdD17aXNGaXJzdH1cbiAgICAgICAgaW5kZXg9e2luZGV4fVxuICAgICAgLz5cbiAgICApO1xuICAgIGNvbnN0IHN1cnZleSA9IHRoaXMucXVlc3Rpb24uc3VydmV5IGFzIFN1cnZleU1vZGVsO1xuICAgIGxldCB3cmFwcGVkSXRlbSA9IG51bGw7XG4gICAgaWYoISFzdXJ2ZXkpIHtcbiAgICAgIHdyYXBwZWRJdGVtID0gUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIud3JhcEl0ZW1WYWx1ZShzdXJ2ZXksIHJlbmRlcmVkSXRlbSwgdGhpcy5xdWVzdGlvbiwgaXRlbSk7XG4gICAgfVxuICAgIHJldHVybiB3cmFwcGVkSXRlbSA/PyByZW5kZXJlZEl0ZW07XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkNoZWNrYm94SXRlbSBleHRlbmRzIFJlYWN0U3VydmV5RWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25DaGVja2JveE1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5xdWVzdGlvbjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGl0ZW0oKTogSXRlbVZhbHVlIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgdGV4dFN0eWxlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMudGV4dFN0eWxlO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgaXNGaXJzdCgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmlzRmlyc3Q7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBpbmRleCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmluZGV4O1xuICB9XG4gIHByaXZhdGUgZ2V0IGhpZGVDYXB0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmhpZGVDYXB0aW9uID09PSB0cnVlO1xuICB9XG4gIHB1YmxpYyBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzOiBhbnksIG5leHRTdGF0ZTogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKCFzdXBlci5zaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzLCBuZXh0U3RhdGUpKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIChcbiAgICAgICF0aGlzLnF1ZXN0aW9uLmN1c3RvbVdpZGdldCB8fFxuICAgICAgISF0aGlzLnF1ZXN0aW9uLmN1c3RvbVdpZGdldERhdGEuaXNOZWVkUmVuZGVyIHx8XG4gICAgICAhIXRoaXMucXVlc3Rpb24uY3VzdG9tV2lkZ2V0LndpZGdldEpzb24uaXNEZWZhdWx0UmVuZGVyIHx8XG4gICAgICAhIXRoaXMucXVlc3Rpb24uY3VzdG9tV2lkZ2V0LndpZGdldEpzb24ucmVuZGVyXG4gICAgKTtcbiAgfVxuICBoYW5kbGVPbkNoYW5nZSA9IChldmVudDogYW55KSA9PiB7XG4gICAgdmFyIG5ld1ZhbHVlID0gW10uY29uY2F0KHRoaXMucXVlc3Rpb24ucmVuZGVyZWRWYWx1ZSB8fCBbXSk7XG4gICAgdmFyIGluZGV4ID0gbmV3VmFsdWUuaW5kZXhPZih0aGlzLml0ZW0udmFsdWUpO1xuICAgIGlmIChldmVudC50YXJnZXQuY2hlY2tlZCkge1xuICAgICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgICBuZXdWYWx1ZS5wdXNoKHRoaXMuaXRlbS52YWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgIG5ld1ZhbHVlLnNwbGljZShpbmRleCwgMSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucXVlc3Rpb24ucmVuZGVyZWRWYWx1ZSA9IG5ld1ZhbHVlO1xuICB9XG4gIHNlbGVjdEFsbENoYW5nZWQgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgIHRoaXMucXVlc3Rpb24udG9nZ2xlU2VsZWN0QWxsKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLml0ZW0gJiYgISF0aGlzLnF1ZXN0aW9uO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgaXNDaGVja2VkID0gdGhpcy5xdWVzdGlvbi5pc0l0ZW1TZWxlY3RlZCh0aGlzLml0ZW0pO1xuICAgIHZhciBvdGhlckl0ZW0gPSB0aGlzLnF1ZXN0aW9uLmlzT3RoZXJJdGVtKHRoaXMuaXRlbSkgJiYgaXNDaGVja2VkXG4gICAgICA/IHRoaXMucmVuZGVyT3RoZXIoKVxuICAgICAgOiBudWxsO1xuICAgIHJldHVybiB0aGlzLnJlbmRlckNoZWNrYm94KGlzQ2hlY2tlZCwgb3RoZXJJdGVtKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGlucHV0U3R5bGUoKTogYW55IHtcbiAgICByZXR1cm4gbnVsbDsvL3sgbWFyZ2luUmlnaHQ6IFwiM3B4XCIgfTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQ2hlY2tib3goXG4gICAgaXNDaGVja2VkOiBib29sZWFuLFxuICAgIG90aGVySXRlbTogSlNYLkVsZW1lbnRcbiAgKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBpZCA9IHRoaXMucXVlc3Rpb24uZ2V0SXRlbUlkKHRoaXMuaXRlbSk7XG4gICAgdmFyIHRleHQgPSAhdGhpcy5oaWRlQ2FwdGlvbiA/IHRoaXMucmVuZGVyTG9jU3RyaW5nKHRoaXMuaXRlbS5sb2NUZXh0KSA6IFwiXCI7XG4gICAgbGV0IGl0ZW1DbGFzcyA9IHRoaXMucXVlc3Rpb24uZ2V0SXRlbUNsYXNzKHRoaXMuaXRlbSk7XG4gICAgbGV0IGxhYmVsQ2xhc3MgPSB0aGlzLnF1ZXN0aW9uLmdldExhYmVsQ2xhc3ModGhpcy5pdGVtKTtcbiAgICB2YXIgb25JdGVtQ2hhbmdlZCA9XG4gICAgICB0aGlzLml0ZW0gPT0gdGhpcy5xdWVzdGlvbi5zZWxlY3RBbGxJdGVtXG4gICAgICAgID8gdGhpcy5zZWxlY3RBbGxDaGFuZ2VkXG4gICAgICAgIDogdGhpcy5oYW5kbGVPbkNoYW5nZTtcblxuICAgIHZhciBsb2NUZXh0OiBhbnkgPSB0aGlzLml0ZW0ubG9jVGV4dDtcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17aXRlbUNsYXNzfSByb2xlPVwicHJlc2VudGF0aW9uXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzc05hbWU9e2xhYmVsQ2xhc3N9IGFyaWEtbGFiZWw9e3RoaXMucXVlc3Rpb24uZ2V0QXJpYUl0ZW1MYWJlbCh0aGlzLml0ZW0pfT5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5jc3NDbGFzc2VzLml0ZW1Db250cm9sfVxuICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgIG5hbWU9e3RoaXMucXVlc3Rpb24ubmFtZX1cbiAgICAgICAgICAgIHZhbHVlPXt0aGlzLml0ZW0udmFsdWV9XG4gICAgICAgICAgICBpZD17aWR9XG4gICAgICAgICAgICBzdHlsZT17dGhpcy5pbnB1dFN0eWxlfVxuICAgICAgICAgICAgZGlzYWJsZWQ9eyF0aGlzLnF1ZXN0aW9uLmdldEl0ZW1FbmFibGVkKHRoaXMuaXRlbSl9XG4gICAgICAgICAgICBjaGVja2VkPXtpc0NoZWNrZWR9XG4gICAgICAgICAgICBvbkNoYW5nZT17b25JdGVtQ2hhbmdlZH1cbiAgICAgICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9e3RoaXMucXVlc3Rpb24uYXJpYURlc2NyaWJlZEJ5fVxuICAgICAgICAgIC8+XG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jc3NDbGFzc2VzLm1hdGVyaWFsRGVjb3JhdG9yID9cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXt0aGlzLmNzc0NsYXNzZXMubWF0ZXJpYWxEZWNvcmF0b3J9PlxuICAgICAgICAgICAgICAgIHsgdGhpcy5xdWVzdGlvbi5pdGVtU3ZnSWNvbiA/XG4gICAgICAgICAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5jc3NDbGFzc2VzLml0ZW1EZWNvcmF0b3J9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDx1c2UgeGxpbmtIcmVmPXt0aGlzLnF1ZXN0aW9uLml0ZW1TdmdJY29ufT48L3VzZT5cbiAgICAgICAgICAgICAgICAgIDwvc3ZnPjpcbiAgICAgICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvc3Bhbj4gOlxuICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgfVxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17dGhpcy5jc3NDbGFzc2VzLmNvbnRyb2xMYWJlbH0+XG4gICAgICAgICAgICB7dGV4dH1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICAgIHtvdGhlckl0ZW19XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJPdGhlcigpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICA8U3VydmV5UXVlc3Rpb25Db21tZW50SXRlbVxuICAgICAgICAgIHF1ZXN0aW9uPXt0aGlzLnF1ZXN0aW9ufVxuICAgICAgICAgIG90aGVyQ3NzPXt0aGlzLmNzc0NsYXNzZXMub3RoZXJ9XG4gICAgICAgICAgY3NzQ2xhc3Nlcz17dGhpcy5jc3NDbGFzc2VzfVxuICAgICAgICAgIGlzRGlzcGxheU1vZGU9e3RoaXMuaXNEaXNwbGF5TW9kZX1cbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImNoZWNrYm94XCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbkNoZWNrYm94LCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUmVhY3RTdXJ2ZXlFbGVtZW50LCBTdXJ2ZXlRdWVzdGlvblVuY29udHJvbGxlZEVsZW1lbnQgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFF1ZXN0aW9uQ29tbWVudE1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25Db21tZW50IGV4dGVuZHMgU3VydmV5UXVlc3Rpb25VbmNvbnRyb2xsZWRFbGVtZW50PFF1ZXN0aW9uQ29tbWVudE1vZGVsPiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBvbkJsdXIgPSAhdGhpcy5xdWVzdGlvbi5pc0lucHV0VGV4dFVwZGF0ZSA/IHRoaXMudXBkYXRlVmFsdWVPbkV2ZW50IDogbnVsbDtcbiAgICB2YXIgb25JbnB1dCA9IChldmVudDogYW55KSA9PiB7XG4gICAgICBpZiAodGhpcy5xdWVzdGlvbi5pc0lucHV0VGV4dFVwZGF0ZSlcbiAgICAgICAgdGhpcy51cGRhdGVWYWx1ZU9uRXZlbnQoZXZlbnQpO1xuICAgICAgZWxzZVxuICAgICAgICB0aGlzLnF1ZXN0aW9uLnVwZGF0ZUVsZW1lbnQoKTtcbiAgICB9O1xuICAgIHZhciBwbGFjZUhvbGRlciA9IHRoaXMucXVlc3Rpb24ucmVuZGVyZWRQbGFjZUhvbGRlcjtcbiAgICBpZiAodGhpcy5xdWVzdGlvbi5pc1JlYWRPbmx5UmVuZGVyRGl2KCkpIHtcbiAgICAgIHJldHVybiA8ZGl2Pnt0aGlzLnF1ZXN0aW9uLnZhbHVlfTwvZGl2PjtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDx0ZXh0YXJlYVxuICAgICAgICBpZD17dGhpcy5xdWVzdGlvbi5pbnB1dElkfVxuICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY2xhc3NOYW1lfVxuICAgICAgICBkaXNhYmxlZD17IHRoaXMucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5IH1cbiAgICAgICAgcmVhZE9ubHk9eyB0aGlzLnF1ZXN0aW9uLmlzSW5wdXRSZWFkT25seSB9XG4gICAgICAgIHJlZj17KHRldHhhcmVhKSA9PiAodGhpcy5jb250cm9sID0gdGV0eGFyZWEpfVxuICAgICAgICBtYXhMZW5ndGg9e3RoaXMucXVlc3Rpb24uZ2V0TWF4TGVuZ3RoKCl9XG4gICAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZUhvbGRlcn1cbiAgICAgICAgb25CbHVyPXtvbkJsdXJ9XG4gICAgICAgIG9uSW5wdXQ9e29uSW5wdXR9XG4gICAgICAgIG9uS2V5RG93bj17KGV2ZW50KSA9PiB7IHRoaXMucXVlc3Rpb24ub25LZXlEb3duKGV2ZW50KTsgfX1cbiAgICAgICAgY29scz17dGhpcy5xdWVzdGlvbi5jb2xzfVxuICAgICAgICByb3dzPXt0aGlzLnF1ZXN0aW9uLnJvd3N9XG4gICAgICAgIGFyaWEtcmVxdWlyZWQ9e3RoaXMucXVlc3Rpb24uYXJpYVJlcXVpcmVkfVxuICAgICAgICBhcmlhLWxhYmVsPXt0aGlzLnF1ZXN0aW9uLmFyaWFMYWJlbH1cbiAgICAgICAgYXJpYS1pbnZhbGlkPXt0aGlzLnF1ZXN0aW9uLmFyaWFJbnZhbGlkfVxuICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PXt0aGlzLnF1ZXN0aW9uLmFyaWFEZXNjcmliZWRCeX1cbiAgICAgICAgc3R5bGU9e3sgcmVzaXplOiB0aGlzLnF1ZXN0aW9uLnJlc2l6ZVN0eWxlIH19XG4gICAgICAvPlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uQ29tbWVudEl0ZW0gZXh0ZW5kcyBSZWFjdFN1cnZleUVsZW1lbnQge1xuICBwcm90ZWN0ZWQgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMucHJvcHMucXVlc3Rpb247XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGxldCBxdWVzdGlvbiA9IHRoaXMucHJvcHMucXVlc3Rpb247XG4gICAgbGV0IGNsYXNzTmFtZSA9IHRoaXMucHJvcHMub3RoZXJDc3MgfHwgdGhpcy5jc3NDbGFzc2VzLmNvbW1lbnQ7XG4gICAgbGV0IGhhbmRsZU9uQ2hhbmdlID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBjb21tZW50OiBldmVudC50YXJnZXQudmFsdWUgfSk7XG4gICAgfTtcbiAgICBsZXQgY29tbWVudCA9ICEhdGhpcy5zdGF0ZSAmJiB0aGlzLnN0YXRlLmNvbW1lbnQgIT09IHVuZGVmaW5lZCA/IHRoaXMuc3RhdGUuY29tbWVudCA6IHF1ZXN0aW9uLmNvbW1lbnQgfHwgXCJcIjtcbiAgICBpZiAocXVlc3Rpb24uaXNSZWFkT25seVJlbmRlckRpdigpKSB7XG4gICAgICByZXR1cm4gPGRpdj57Y29tbWVudH08L2Rpdj47XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8dGV4dGFyZWFcbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICAgIHZhbHVlPXtjb21tZW50fVxuICAgICAgICBkaXNhYmxlZD17dGhpcy5pc0Rpc3BsYXlNb2RlfVxuICAgICAgICBtYXhMZW5ndGg9e3F1ZXN0aW9uLmdldE90aGVyc01heExlbmd0aCgpfVxuICAgICAgICBwbGFjZWhvbGRlcj17cXVlc3Rpb24uY29tbWVudE9yT3RoZXJQbGFjZUhvbGRlcn1cbiAgICAgICAgb25DaGFuZ2U9e2hhbmRsZU9uQ2hhbmdlfVxuICAgICAgICBvbkJsdXI9eyhlKSA9PiB7IHF1ZXN0aW9uLm9uQ29tbWVudENoYW5nZShlKTsgaGFuZGxlT25DaGFuZ2UoZSk7IH0gfVxuICAgICAgICBvbklucHV0PXsoZSkgPT4gcXVlc3Rpb24ub25Db21tZW50SW5wdXQoZSl9XG4gICAgICAgIGFyaWEtcmVxdWlyZWQ9e3F1ZXN0aW9uLmlzUmVxdWlyZWR9XG4gICAgICAgIGFyaWEtbGFiZWw9e3F1ZXN0aW9uLmxvY1RpdGxlLnJlbmRlcmVkSHRtbH1cbiAgICAgICAgc3R5bGU9e3sgcmVzaXplOiBxdWVzdGlvbi5yZXNpemVTdHlsZSB9fVxuICAgICAgLz5cbiAgICApO1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJjb21tZW50XCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbkNvbW1lbnQsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvblVuY29udHJvbGxlZEVsZW1lbnQgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvblwiO1xuaW1wb3J0IHsgQmFzZSwgUXVlc3Rpb25DdXN0b21Nb2RlbCwgUXVlc3Rpb25Db21wb3NpdGVNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcbmltcG9ydCB7IFN1cnZleVBhbmVsIH0gZnJvbSBcIi4vcGFuZWxcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uQ3VzdG9tIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25VbmNvbnRyb2xsZWRFbGVtZW50PFF1ZXN0aW9uQ3VzdG9tTW9kZWw+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50cygpOiBBcnJheTxCYXNlPiB7XG4gICAgY29uc3QgcmVzID0gc3VwZXIuZ2V0U3RhdGVFbGVtZW50cygpO1xuICAgIGlmKCEhdGhpcy5xdWVzdGlvbi5jb250ZW50UXVlc3Rpb24pIHtcbiAgICAgIHJlcy5wdXNoKHRoaXMucXVlc3Rpb24uY29udGVudFF1ZXN0aW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIFN1cnZleVF1ZXN0aW9uLnJlbmRlclF1ZXN0aW9uQm9keShcbiAgICAgIHRoaXMuY3JlYXRvcixcbiAgICAgIHRoaXMucXVlc3Rpb24uY29udGVudFF1ZXN0aW9uXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25Db21wb3NpdGUgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvblVuY29udHJvbGxlZEVsZW1lbnQ8UXVlc3Rpb25Db21wb3NpdGVNb2RlbD4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5xdWVzdGlvbi5jb250ZW50UGFuZWw7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8U3VydmV5UGFuZWxcbiAgICAgICAgZWxlbWVudD17dGhpcy5xdWVzdGlvbi5jb250ZW50UGFuZWx9XG4gICAgICAgIGNyZWF0b3I9e3RoaXMuY3JlYXRvcn1cbiAgICAgICAgc3VydmV5PXt0aGlzLnF1ZXN0aW9uLnN1cnZleX1cbiAgICAgID48L1N1cnZleVBhbmVsPlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImN1c3RvbVwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25DdXN0b20sIHByb3BzKTtcbn0pO1xuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImNvbXBvc2l0ZVwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25Db21wb3NpdGUsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge1xuICBTdXJ2ZXlRdWVzdGlvblVuY29udHJvbGxlZEVsZW1lbnQsXG4gIFJlYWN0U3VydmV5RWxlbWVudCxcbn0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBRdWVzdGlvbiB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25Db21tZW50SXRlbSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fY29tbWVudFwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi4vYmFzZVwiO1xuaW1wb3J0IHsgSXRlbVZhbHVlIH0gZnJvbSBcIi4uL2l0ZW12YWx1ZVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25Ecm9wZG93bkJhc2U8VCBleHRlbmRzIFF1ZXN0aW9uPiBleHRlbmRzIFN1cnZleVF1ZXN0aW9uVW5jb250cm9sbGVkRWxlbWVudDxUPiB7XG4gIHByb3RlY3RlZCBzZXRWYWx1ZUNvcmUobmV3VmFsdWU6IGFueSkge1xuICAgIHRoaXMucXVlc3Rpb25CYXNlLnJlbmRlcmVkVmFsdWUgPSBuZXdWYWx1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0VmFsdWVDb3JlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlLnJlbmRlcmVkVmFsdWU7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlclNlbGVjdChjc3NDbGFzc2VzOiBhbnkpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3Qgc2VsZWN0RWxlbWVudCA9IHRoaXMuaXNEaXNwbGF5TW9kZSA/IChcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIDxkaXYgaWQ9e3RoaXMucXVlc3Rpb24uaW5wdXRJZH0gY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldENvbnRyb2xDbGFzcygpfSBkaXNhYmxlZD57IHRoaXMucXVlc3Rpb24ucmVhZE9ubHlUZXh0IH08L2Rpdj4pOlxuICAgICAgKDxzZWxlY3RcbiAgICAgICAgaWQ9e3RoaXMucXVlc3Rpb24uaW5wdXRJZH1cbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldENvbnRyb2xDbGFzcygpfVxuICAgICAgICByZWY9eyhzZWxlY3QpID0+ICh0aGlzLmNvbnRyb2wgPSBzZWxlY3QpfVxuICAgICAgICBhdXRvQ29tcGxldGU9e3RoaXMucXVlc3Rpb24uYXV0b0NvbXBsZXRlfVxuICAgICAgICBvbkNoYW5nZT17dGhpcy51cGRhdGVWYWx1ZU9uRXZlbnR9XG4gICAgICAgIG9uSW5wdXQ9e3RoaXMudXBkYXRlVmFsdWVPbkV2ZW50fVxuICAgICAgICBhcmlhLXJlcXVpcmVkPXt0aGlzLnF1ZXN0aW9uLmFyaWFSZXF1aXJlZH1cbiAgICAgICAgYXJpYS1sYWJlbD17dGhpcy5xdWVzdGlvbi5hcmlhTGFiZWx9XG4gICAgICAgIGFyaWEtaW52YWxpZD17dGhpcy5xdWVzdGlvbi5hcmlhSW52YWxpZH1cbiAgICAgICAgYXJpYS1kZXNjcmliZWRieT17dGhpcy5xdWVzdGlvbi5hcmlhRGVzY3JpYmVkQnl9XG4gICAgICAgIHJlcXVpcmVkPXt0aGlzLnF1ZXN0aW9uLmlzUmVxdWlyZWR9PlxuICAgICAgICB7IHRoaXMucXVlc3Rpb24uc2hvd09wdGlvbnNDYXB0aW9uID8gKDxvcHRpb24gdmFsdWU9XCJcIj57dGhpcy5xdWVzdGlvbi5vcHRpb25zQ2FwdGlvbn08L29wdGlvbj4pIDogbnVsbCB9XG4gICAgICAgIHsgdGhpcy5xdWVzdGlvbi52aXNpYmxlQ2hvaWNlcy5tYXAoKGl0ZW06IEl0ZW1WYWx1ZSwgaTogbnVtYmVyKSA9PiA8U3VydmV5UXVlc3Rpb25PcHRpb25JdGVtIGtleT17XCJpdGVtXCIgKyBpfSBpdGVtPXtpdGVtfS8+KSB9XG4gICAgICA8L3NlbGVjdD4pO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5zZWxlY3RXcmFwcGVyfT5cbiAgICAgICAge3NlbGVjdEVsZW1lbnR9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkRyb3Bkb3duIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25Ecm9wZG93bkJhc2U8UXVlc3Rpb24+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGNzc0NsYXNzZXMgPSB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgdmFyIGNvbW1lbnQgPSB0aGlzLnF1ZXN0aW9uLmlzT3RoZXJTZWxlY3RlZFxuICAgICAgPyB0aGlzLnJlbmRlck90aGVyKGNzc0NsYXNzZXMpXG4gICAgICA6IG51bGw7XG4gICAgdmFyIHNlbGVjdCA9IHRoaXMucmVuZGVyU2VsZWN0KGNzc0NsYXNzZXMpO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5yZW5kZXJDc3NSb290fT5cbiAgICAgICAge3NlbGVjdH1cbiAgICAgICAge2NvbW1lbnR9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJPdGhlcihjc3NDbGFzc2VzOiBhbnkpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICA8U3VydmV5UXVlc3Rpb25Db21tZW50SXRlbVxuICAgICAgICAgIHF1ZXN0aW9uPXt0aGlzLnF1ZXN0aW9ufVxuICAgICAgICAgIG90aGVyQ3NzPXtjc3NDbGFzc2VzLm90aGVyfVxuICAgICAgICAgIGNzc0NsYXNzZXM9e2Nzc0NsYXNzZXN9XG4gICAgICAgICAgaXNEaXNwbGF5TW9kZT17dGhpcy5pc0Rpc3BsYXlNb2RlfVxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25PcHRpb25JdGVtIGV4dGVuZHMgUmVhY3RTdXJ2ZXlFbGVtZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLml0ZW07XG4gIH1cbiAgcHJpdmF0ZSBnZXQgaXRlbSgpOiBJdGVtVmFsdWUge1xuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW07XG4gIH1cbiAgcHJvdGVjdGVkIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLml0ZW07XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8b3B0aW9uIHZhbHVlPXt0aGlzLml0ZW0udmFsdWV9IGRpc2FibGVkPXshdGhpcy5pdGVtLmlzRW5hYmxlZH0+XG4gICAgICAgIHt0aGlzLml0ZW0udGV4dH1cbiAgICAgIDwvb3B0aW9uPlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImRyb3Bkb3duXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbkRyb3Bkb3duLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgSGVscGVycyB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgTG9jYWxpemFibGVTdHJpbmcgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50IH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBJU3VydmV5Q3JlYXRvciB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25cIjtcbmltcG9ydCB7IEJhc2UsIEFycmF5Q2hhbmdlcywgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IFJlYWN0U3VydmV5RWxlbWVudHNXcmFwcGVyIH0gZnJvbSBcIi4vcmVhY3RzdXJ2ZXltb2RlbFwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5RWxlbWVudEJhc2U8UCwgUz4gZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8UCwgUz4ge1xuICBwdWJsaWMgc3RhdGljIHJlbmRlckxvY1N0cmluZyhcbiAgICBsb2NTdHI6IExvY2FsaXphYmxlU3RyaW5nLFxuICAgIHN0eWxlOiBhbnkgPSBudWxsLFxuICAgIGtleT86IHN0cmluZ1xuICApOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChsb2NTdHIucmVuZGVyQXMsIHtcbiAgICAgIGxvY1N0cjogbG9jU3RyLnJlbmRlckFzRGF0YSxcbiAgICAgIHN0eWxlOiBzdHlsZSxcbiAgICAgIGtleToga2V5LFxuICAgIH0pO1xuICB9XG4gIHByaXZhdGUgY2hhbmdlZFN0YXRlUHJvcE5hbWVWYWx1ZTogc3RyaW5nO1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHRoaXMubWFrZUJhc2VFbGVtZW50c1JlYWN0KCk7XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgdGhpcy51bk1ha2VCYXNlRWxlbWVudHNSZWFjdCgpO1xuICB9XG4gIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHM6IGFueSwgcHJldlN0YXRlOiBhbnkpIHtcbiAgICB0aGlzLm1ha2VCYXNlRWxlbWVudHNSZWFjdCgpO1xuICB9XG4gIHByaXZhdGUgX2FsbG93Q29tcG9uZW50VXBkYXRlID0gdHJ1ZTtcbiAgcHJvdGVjdGVkIGFsbG93Q29tcG9uZW50VXBkYXRlKCkge1xuICAgIHRoaXMuX2FsbG93Q29tcG9uZW50VXBkYXRlID0gdHJ1ZTtcbiAgICB0aGlzLmZvcmNlVXBkYXRlKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGRlbnlDb21wb25lbnRVcGRhdGUoKSB7XG4gICAgdGhpcy5fYWxsb3dDb21wb25lbnRVcGRhdGUgPSBmYWxzZTtcbiAgfVxuICBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzOmFueSwgbmV4dFN0YXRlOmFueSk6Ym9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2FsbG93Q29tcG9uZW50VXBkYXRlO1xuICB9XG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLmNhblJlbmRlcigpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLnN0YXJ0RW5kUmVuZGVyaW5nKDEpO1xuICAgIHZhciByZXMgPSB0aGlzLnJlbmRlckVsZW1lbnQoKTtcbiAgICB0aGlzLnN0YXJ0RW5kUmVuZGVyaW5nKC0xKTtcblxuICAgIHJlcyA9IHRoaXMud3JhcEVsZW1lbnQocmVzKTtcblxuICAgIHRoaXMuY2hhbmdlZFN0YXRlUHJvcE5hbWVWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHByb3RlY3RlZCB3cmFwRWxlbWVudChlbGVtZW50OiBKU1guRWxlbWVudCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGlzUmVuZGVyaW5nKCk6IGJvb2xlYW4ge1xuICAgIHZhciBzdGF0ZUVsOiBhbnkgPSB0aGlzLmdldFN0YXRlRWxlbWVudCgpO1xuICAgIHJldHVybiAhIXN0YXRlRWwgJiYgc3RhdGVFbC5yZWFjdFJlbmRlcmluZyA+IDA7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFJlbmRlcmVkRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdGF0ZUVsZW1lbnQoKTtcbiAgfVxuICBwcml2YXRlIHN0YXJ0RW5kUmVuZGVyaW5nKHZhbDogbnVtYmVyKSB7XG4gICAgdmFyIHN0YXRlRWw6IGFueSA9IHRoaXMuZ2V0UmVuZGVyZWRFbGVtZW50KCk7XG4gICAgaWYgKCEhc3RhdGVFbCkge1xuICAgICAgaWYgKCFzdGF0ZUVsLnJlYWN0UmVuZGVyaW5nKSBzdGF0ZUVsLnJlYWN0UmVuZGVyaW5nID0gMDtcbiAgICAgIHN0YXRlRWwucmVhY3RSZW5kZXJpbmcgKz0gdmFsO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGNoYW5nZWRTdGF0ZVByb3BOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY2hhbmdlZFN0YXRlUHJvcE5hbWVWYWx1ZTtcbiAgfVxuICBwcml2YXRlIG1ha2VCYXNlRWxlbWVudHNSZWFjdCgpIHtcbiAgICB2YXIgZWxzID0gdGhpcy5nZXRTdGF0ZUVsZW1lbnRzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMubWFrZUJhc2VFbGVtZW50UmVhY3QoZWxzW2ldKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSB1bk1ha2VCYXNlRWxlbWVudHNSZWFjdCgpIHtcbiAgICB2YXIgZWxzID0gdGhpcy5nZXRTdGF0ZUVsZW1lbnRzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMudW5NYWtlQmFzZUVsZW1lbnRSZWFjdChlbHNbaV0pO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50cygpOiBBcnJheTxCYXNlPiB7XG4gICAgdmFyIGVsID0gdGhpcy5nZXRTdGF0ZUVsZW1lbnQoKTtcbiAgICByZXR1cm4gISFlbCA/IFtlbF0gOiBbXTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgaXNEaXNwbGF5TW9kZSgpOiBib29sZWFuIHtcbiAgICBjb25zdCBwcm9wczogYW55ID0gdGhpcy5wcm9wcztcbiAgICByZXR1cm4gcHJvcHMuaXNEaXNwbGF5TW9kZSB8fCBmYWxzZTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyTG9jU3RyaW5nKFxuICAgIGxvY1N0cjogTG9jYWxpemFibGVTdHJpbmcsXG4gICAgc3R5bGU6IGFueSA9IG51bGxcbiAgKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiBTdXJ2ZXlFbGVtZW50QmFzZS5yZW5kZXJMb2NTdHJpbmcobG9jU3RyLCBzdHlsZSk7XG4gIH1cbiAgcHJpdmF0ZSBtYWtlQmFzZUVsZW1lbnRSZWFjdChzdGF0ZUVsZW1lbnQ6IEJhc2UpIHtcbiAgICBpZiAoIXN0YXRlRWxlbWVudCkgcmV0dXJuO1xuICAgIHN0YXRlRWxlbWVudC5pdGVyYXRlUHJvcGVydGllc0hhc2goKGhhc2gsIGtleSkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmNhblVzZVByb3BJblN0YXRlKGtleSkpIHJldHVybjtcbiAgICAgIHZhciB2YWw6IGFueSA9IGhhc2hba2V5XTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgICAgdmFyIHZhbDogYW55ID0gdmFsO1xuICAgICAgICB2YWxbXCJvbkFycmF5Q2hhbmdlZFwiXSA9IChhcnJheUNoYW5nZXM6IEFycmF5Q2hhbmdlcykgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLmlzUmVuZGVyaW5nKSByZXR1cm47XG4gICAgICAgICAgdGhpcy5jaGFuZ2VkU3RhdGVQcm9wTmFtZVZhbHVlID0ga2V5O1xuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoKHN0YXRlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHZhciBuZXdTdGF0ZTogeyBbaW5kZXg6IHN0cmluZ106IGFueSB9ID0ge307XG4gICAgICAgICAgICBuZXdTdGF0ZVtrZXldID0gdmFsO1xuICAgICAgICAgICAgcmV0dXJuIG5ld1N0YXRlIGFzIFM7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSk7XG4gICAgc3RhdGVFbGVtZW50LnNldFByb3BlcnR5VmFsdWVDb3JlSGFuZGxlciA9IChcbiAgICAgIGhhc2g6IGFueSxcbiAgICAgIGtleTogc3RyaW5nLFxuICAgICAgdmFsOiBhbnlcbiAgICApID0+IHtcbiAgICAgIGlmIChoYXNoW2tleV0gIT09IHZhbCkge1xuICAgICAgICBoYXNoW2tleV0gPSB2YWw7XG4gICAgICAgIGlmICghdGhpcy5jYW5Vc2VQcm9wSW5TdGF0ZShrZXkpKSByZXR1cm47XG4gICAgICAgIGlmICh0aGlzLmlzUmVuZGVyaW5nKSByZXR1cm47XG4gICAgICAgIHRoaXMuY2hhbmdlZFN0YXRlUHJvcE5hbWVWYWx1ZSA9IGtleTtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSgoc3RhdGU6IGFueSkgPT4ge1xuICAgICAgICAgIHZhciBuZXdTdGF0ZTogeyBbaW5kZXg6IHN0cmluZ106IGFueSB9ID0ge307XG4gICAgICAgICAgbmV3U3RhdGVba2V5XSA9IHZhbDtcbiAgICAgICAgICByZXR1cm4gbmV3U3RhdGUgYXMgUztcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuICBwcm90ZWN0ZWQgY2FuVXNlUHJvcEluU3RhdGUoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwcml2YXRlIHVuTWFrZUJhc2VFbGVtZW50UmVhY3Qoc3RhdGVFbGVtZW50OiBCYXNlKSB7XG4gICAgaWYgKCFzdGF0ZUVsZW1lbnQpIHJldHVybjtcbiAgICBzdGF0ZUVsZW1lbnQuc2V0UHJvcGVydHlWYWx1ZUNvcmVIYW5kbGVyID0gdW5kZWZpbmVkO1xuICAgIHN0YXRlRWxlbWVudC5pdGVyYXRlUHJvcGVydGllc0hhc2goKGhhc2gsIGtleSkgPT4ge1xuICAgICAgdmFyIHZhbDogYW55ID0gaGFzaFtrZXldO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgICB2YXIgdmFsOiBhbnkgPSB2YWw7XG4gICAgICAgIHZhbFtcIm9uQXJyYXlDaGFuZ2VkXCJdID0gKCkgPT4ge307XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJlYWN0U3VydmV5RWxlbWVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPGFueSwgYW55PiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBjc3NDbGFzc2VzKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3NzQ2xhc3NlcztcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPGFueSwgYW55PiB7XG4gIGNvbnRyb2w6IEhUTUxFbGVtZW50O1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHM6IGFueSwgcHJldlN0YXRlOiBhbnkpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUpO1xuICAgIHRoaXMudXBkYXRlRG9tRWxlbWVudCgpO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgdGhpcy51cGRhdGVEb21FbGVtZW50KCk7XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICBpZiAoISF0aGlzLnF1ZXN0aW9uQmFzZSkge1xuICAgICAgdGhpcy5xdWVzdGlvbkJhc2UuYmVmb3JlRGVzdHJveVF1ZXN0aW9uRWxlbWVudCh0aGlzLmNvbnRyb2wpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgdXBkYXRlRG9tRWxlbWVudCgpIHtcbiAgICBjb25zdCBlbDogSFRNTEVsZW1lbnQgPSB0aGlzLmNvbnRyb2w7XG4gICAgaWYgKCEhZWwpIHtcbiAgICAgIGlmIChlbC5nZXRBdHRyaWJ1dGUoXCJkYXRhLXJlbmRlcmVkXCIpICE9PSBcInJcIikge1xuICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoXCJkYXRhLXJlbmRlcmVkXCIsIFwiclwiKTtcbiAgICAgICAgdGhpcy5xdWVzdGlvbkJhc2UuYWZ0ZXJSZW5kZXJRdWVzdGlvbkVsZW1lbnQoZWwpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uQmFzZSgpOiBRdWVzdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMucXVlc3Rpb247XG4gIH1cbiAgcHJvdGVjdGVkIGdldFJlbmRlcmVkRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2U7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBjcmVhdG9yKCk6IElTdXJ2ZXlDcmVhdG9yIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jcmVhdG9yO1xuICB9XG4gIHByb3RlY3RlZCBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5xdWVzdGlvbkJhc2UgJiYgISF0aGlzLmNyZWF0b3I7XG4gIH1cbiAgcHVibGljIHNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHM6IGFueSwgbmV4dFN0YXRlOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoIXN1cGVyLnNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHMsIG5leHRTdGF0ZSkpIHJldHVybiBmYWxzZTtcblxuICAgIHJldHVybiAoXG4gICAgICAhdGhpcy5xdWVzdGlvbkJhc2UuY3VzdG9tV2lkZ2V0IHx8XG4gICAgICAhIXRoaXMucXVlc3Rpb25CYXNlLmN1c3RvbVdpZGdldERhdGEuaXNOZWVkUmVuZGVyIHx8XG4gICAgICAhIXRoaXMucXVlc3Rpb25CYXNlLmN1c3RvbVdpZGdldC53aWRnZXRKc29uLmlzRGVmYXVsdFJlbmRlciB8fFxuICAgICAgISF0aGlzLnF1ZXN0aW9uQmFzZS5jdXN0b21XaWRnZXQud2lkZ2V0SnNvbi5yZW5kZXJcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgaXNEaXNwbGF5TW9kZSgpOiBib29sZWFuIHtcbiAgICBjb25zdCBwcm9wczogYW55ID0gdGhpcy5wcm9wcztcbiAgICByZXR1cm4gKFxuICAgICAgcHJvcHMuaXNEaXNwbGF5TW9kZSB8fFxuICAgICAgKCEhdGhpcy5xdWVzdGlvbkJhc2UgJiYgdGhpcy5xdWVzdGlvbkJhc2UuaXNJbnB1dFJlYWRPbmx5KSB8fCBmYWxzZVxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHdyYXBDZWxsKFxuICAgIGNlbGw6IGFueSxcbiAgICBlbGVtZW50OiBKU1guRWxlbWVudCxcbiAgICByZWFzb246IHN0cmluZ1xuICApOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCFyZWFzb24pIHtcbiAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH1cbiAgICBjb25zdCBzdXJ2ZXk6IFN1cnZleU1vZGVsID0gdGhpcy5xdWVzdGlvbkJhc2VcbiAgICAgIC5zdXJ2ZXkgYXMgU3VydmV5TW9kZWw7XG4gICAgbGV0IHdyYXBwZXI6IEpTWC5FbGVtZW50O1xuICAgIGlmIChzdXJ2ZXkpIHtcbiAgICAgIHdyYXBwZXIgPSBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlci53cmFwTWF0cml4Q2VsbChzdXJ2ZXksIGVsZW1lbnQsIGNlbGwsIHJlYXNvbik7XG4gICAgfVxuICAgIHJldHVybiB3cmFwcGVyID8/IGVsZW1lbnQ7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uVW5jb250cm9sbGVkRWxlbWVudDxcbiAgVCBleHRlbmRzIFF1ZXN0aW9uXG4+IGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy51cGRhdGVWYWx1ZU9uRXZlbnQgPSB0aGlzLnVwZGF0ZVZhbHVlT25FdmVudC5iaW5kKHRoaXMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogVCB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFQ7XG4gIH1cbiAgdXBkYXRlVmFsdWVPbkV2ZW50ID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICBpZiAoXG4gICAgICAhSGVscGVycy5pc1R3b1ZhbHVlRXF1YWxzKHRoaXMucXVlc3Rpb25CYXNlLnZhbHVlLCBldmVudC50YXJnZXQudmFsdWUpXG4gICAgKSB7XG4gICAgICB0aGlzLnNldFZhbHVlQ29yZShldmVudC50YXJnZXQudmFsdWUpO1xuICAgIH1cbiAgfTtcbiAgcHJvdGVjdGVkIHNldFZhbHVlQ29yZShuZXdWYWx1ZTogYW55KSB7XG4gICAgdGhpcy5xdWVzdGlvbkJhc2UudmFsdWUgPSBuZXdWYWx1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0VmFsdWVDb3JlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlLnZhbHVlO1xuICB9XG4gIHByb3RlY3RlZCB1cGRhdGVEb21FbGVtZW50KCkge1xuICAgIGlmICghIXRoaXMuY29udHJvbCkge1xuICAgICAgY29uc3QgY29udHJvbDogYW55ID0gdGhpcy5jb250cm9sO1xuICAgICAgY29uc3QgbmV3VmFsdWUgPSB0aGlzLmdldFZhbHVlQ29yZSgpO1xuICAgICAgaWYgKCFIZWxwZXJzLmlzVHdvVmFsdWVFcXVhbHMobmV3VmFsdWUsIGNvbnRyb2wudmFsdWUpKSB7XG4gICAgICAgIGNvbnRyb2wudmFsdWUgPSB0aGlzLmdldFZhbHVlKG5ld1ZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgc3VwZXIudXBkYXRlRG9tRWxlbWVudCgpO1xuICB9XG4gIHByaXZhdGUgZ2V0VmFsdWUodmFsOiBhbnkpOiBhbnkge1xuICAgIGlmIChIZWxwZXJzLmlzVmFsdWVFbXB0eSh2YWwpKSByZXR1cm4gXCJcIjtcbiAgICByZXR1cm4gdmFsO1xuICB9XG59XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFF1ZXN0aW9uRW1wdHlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uRW1wdHkgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN0YXRlID0geyB2YWx1ZTogdGhpcy5xdWVzdGlvbi52YWx1ZSB9O1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25FbXB0eU1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25FbXB0eU1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gPGRpdiAvPjtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiZW1wdHlcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uRW1wdHksIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBRdWVzdGlvbkV4cHJlc3Npb25Nb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uRXhwcmVzc2lvbiBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Uge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25FeHByZXNzaW9uTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBRdWVzdGlvbkV4cHJlc3Npb25Nb2RlbDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGNzc0NsYXNzZXMgPSB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgaWQ9e3RoaXMucXVlc3Rpb24uaW5wdXRJZH1cbiAgICAgICAgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLnJvb3R9XG4gICAgICAgIHJlZj17KGRpdikgPT4gKHRoaXMuY29udHJvbCA9IGRpdil9XG4gICAgICA+XG4gICAgICAgIHt0aGlzLnF1ZXN0aW9uLmZvcm1hdGVkVmFsdWV9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJleHByZXNzaW9uXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbkV4cHJlc3Npb24sIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0IHsgSGFzaFRhYmxlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbmV4cG9ydCBjbGFzcyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB7XG4gIHB1YmxpYyBzdGF0aWMgSW5zdGFuY2U6IFJlYWN0UXVlc3Rpb25GYWN0b3J5ID0gbmV3IFJlYWN0UXVlc3Rpb25GYWN0b3J5KCk7XG4gIHByaXZhdGUgY3JlYXRvckhhc2g6IEhhc2hUYWJsZTwobmFtZTogc3RyaW5nKSA9PiBKU1guRWxlbWVudD4gPSB7fTtcblxuICBwdWJsaWMgcmVnaXN0ZXJRdWVzdGlvbihcbiAgICBxdWVzdGlvblR5cGU6IHN0cmluZyxcbiAgICBxdWVzdGlvbkNyZWF0b3I6IChuYW1lOiBzdHJpbmcpID0+IEpTWC5FbGVtZW50XG4gICkge1xuICAgIHRoaXMuY3JlYXRvckhhc2hbcXVlc3Rpb25UeXBlXSA9IHF1ZXN0aW9uQ3JlYXRvcjtcbiAgfVxuICBwdWJsaWMgZ2V0QWxsVHlwZXMoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG4gICAgZm9yICh2YXIga2V5IGluIHRoaXMuY3JlYXRvckhhc2gpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQuc29ydCgpO1xuICB9XG4gIHB1YmxpYyBjcmVhdGVRdWVzdGlvbihxdWVzdGlvblR5cGU6IHN0cmluZywgcGFyYW1zOiBhbnkpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGNyZWF0b3IgPSB0aGlzLmNyZWF0b3JIYXNoW3F1ZXN0aW9uVHlwZV07XG4gICAgaWYgKGNyZWF0b3IgPT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIGNyZWF0b3IocGFyYW1zKTtcbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvbkZpbGVNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5QWN0aW9uQmFyIH0gZnJvbSBcIi4vY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXJcIjtcbmltcG9ydCB7IFN2Z0ljb24gfSBmcm9tIFwiLi9jb21wb25lbnRzL3N2Zy1pY29uL3N2Zy1pY29uXCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25GaWxlIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbkZpbGVNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFF1ZXN0aW9uRmlsZU1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgcHJldmlldyA9IHRoaXMucmVuZGVyUHJldmlldygpO1xuICAgIHZhciBmaWxlSW5wdXQgPSBudWxsO1xuICAgIHZhciBmaWxlRGVjb3JhdG9yID0gdGhpcy5yZW5kZXJGaWxlRGVjb3JhdG9yKCk7XG4gICAgdmFyIGNsZWFyQnV0dG9uID0gdGhpcy5yZW5kZXJDbGVhckJ1dHRvbihcbiAgICAgIHRoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yZW1vdmVCdXR0b25cbiAgICApO1xuICAgIHZhciBjbGVhckJ1dHRvbkJvdHRvbSA9IHRoaXMucmVuZGVyQ2xlYXJCdXR0b24oXG4gICAgICB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucmVtb3ZlQnV0dG9uQm90dG9tXG4gICAgKTtcblxuICAgIGxldCBtb2JpbGVGaWxlTmF2aWdhdG9yID0gdGhpcy5xdWVzdGlvbi5tb2JpbGVGaWxlTmF2aWdhdG9yVmlzaWJsZT8oPFN1cnZleUFjdGlvbkJhciBtb2RlbCA9IHt0aGlzLnF1ZXN0aW9uLm1vYmlsZUZpbGVOYXZpZ2F0b3J9PjwvU3VydmV5QWN0aW9uQmFyPik6bnVsbDtcbiAgICBmaWxlSW5wdXQgPSAoXG4gICAgICB0aGlzLmlzRGlzcGxheU1vZGUgP1xuICAgICAgICA8aW5wdXRcbiAgICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgICAgZGlzYWJsZWQ9e3RoaXMuaXNEaXNwbGF5TW9kZX1cbiAgICAgICAgICBjbGFzc05hbWU9eyF0aGlzLmlzRGlzcGxheU1vZGUgPyB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuZmlsZUlucHV0IDogdGhpcy5xdWVzdGlvbi5nZXRSZWFkT25seUZpbGVDc3MoKX1cbiAgICAgICAgICBpZD17dGhpcy5xdWVzdGlvbi5pbnB1dElkfVxuICAgICAgICAgIHJlZj17aW5wdXQgPT4gKHRoaXMuY29udHJvbCA9IGlucHV0KX1cbiAgICAgICAgICBzdHlsZT17IXRoaXMuaXNEaXNwbGF5TW9kZSA/IHt9IDogeyBjb2xvcjogXCJ0cmFuc3BhcmVudFwiIH19XG4gICAgICAgICAgb25DaGFuZ2U9eyF0aGlzLmlzRGlzcGxheU1vZGUgPyB0aGlzLnF1ZXN0aW9uLmRvQ2hhbmdlIDogbnVsbH1cbiAgICAgICAgICBtdWx0aXBsZT17dGhpcy5xdWVzdGlvbi5hbGxvd011bHRpcGxlfVxuICAgICAgICAgIHBsYWNlaG9sZGVyPXt0aGlzLnF1ZXN0aW9uLnRpdGxlfVxuICAgICAgICAgIGFjY2VwdD17dGhpcy5xdWVzdGlvbi5hY2NlcHRlZFR5cGVzfVxuICAgICAgICAvPlxuICAgICAgICA6XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICBkaXNhYmxlZD17dGhpcy5pc0Rpc3BsYXlNb2RlfVxuICAgICAgICAgIGNsYXNzTmFtZT17IXRoaXMuaXNEaXNwbGF5TW9kZSA/IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5maWxlSW5wdXQgOiB0aGlzLnF1ZXN0aW9uLmdldFJlYWRPbmx5RmlsZUNzcygpfVxuICAgICAgICAgIGlkPXt0aGlzLnF1ZXN0aW9uLmlucHV0SWR9XG4gICAgICAgICAgcmVmPXtpbnB1dCA9PiAodGhpcy5jb250cm9sID0gaW5wdXQpfVxuICAgICAgICAgIHN0eWxlPXshdGhpcy5pc0Rpc3BsYXlNb2RlID8ge30gOiB7IGNvbG9yOiBcInRyYW5zcGFyZW50XCIgfX1cbiAgICAgICAgICBvbkNoYW5nZT17IXRoaXMuaXNEaXNwbGF5TW9kZSA/IHRoaXMucXVlc3Rpb24uZG9DaGFuZ2UgOiBudWxsfVxuICAgICAgICAgIGFyaWEtcmVxdWlyZWQ9e3RoaXMucXVlc3Rpb24uYXJpYVJlcXVpcmVkfVxuICAgICAgICAgIGFyaWEtbGFiZWw9e3RoaXMucXVlc3Rpb24uYXJpYUxhYmVsfVxuICAgICAgICAgIGFyaWEtaW52YWxpZD17dGhpcy5xdWVzdGlvbi5hcmlhSW52YWxpZH1cbiAgICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PXt0aGlzLnF1ZXN0aW9uLmFyaWFEZXNjcmliZWRCeX1cbiAgICAgICAgICBtdWx0aXBsZT17dGhpcy5xdWVzdGlvbi5hbGxvd011bHRpcGxlfVxuICAgICAgICAgIHRpdGxlPXt0aGlzLnF1ZXN0aW9uLmlucHV0VGl0bGV9XG4gICAgICAgICAgYWNjZXB0PXt0aGlzLnF1ZXN0aW9uLmFjY2VwdGVkVHlwZXN9XG4gICAgICAgIC8+XG4gICAgKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZmlsZVJvb3RDc3N9PlxuICAgICAgICB7ZmlsZUlucHV0fVxuICAgICAgICB7ZmlsZURlY29yYXRvcn1cbiAgICAgICAge2NsZWFyQnV0dG9ufVxuICAgICAgICB7cHJldmlld31cbiAgICAgICAge2NsZWFyQnV0dG9uQm90dG9tfVxuICAgICAgICB7bW9iaWxlRmlsZU5hdmlnYXRvcn1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckZpbGVEZWNvcmF0b3IoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHF1ZXN0aW9uQ3NzID0gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIGxldCBub0ZpbGVDaG9zZW4gPSBudWxsO1xuICAgIGxldCBjaG9vc2VGaWxlID0gbnVsbDtcbiAgICBjaG9vc2VGaWxlID0gKFxuICAgICAgPGxhYmVsXG4gICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0Q2hvb3NlRmlsZUNzcygpfVxuICAgICAgICBodG1sRm9yPXt0aGlzLnF1ZXN0aW9uLmlucHV0SWR9XG4gICAgICAgIGFyaWEtbGFiZWw9e3RoaXMucXVlc3Rpb24uY2hvb3NlQnV0dG9uQ2FwdGlvbn1cbiAgICAgID5cbiAgICAgICAgPHNwYW4+e3RoaXMucXVlc3Rpb24uY2hvb3NlQnV0dG9uQ2FwdGlvbn08L3NwYW4+XG4gICAgICAgIHsoISF0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuY2hvb3NlRmlsZUljb25JZCkgPyA8U3ZnSWNvbiBpY29uTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmNob29zZUZpbGVJY29uSWR9IHNpemU9e1wiYXV0b1wifT48L1N2Z0ljb24+OiBudWxsIH1cbiAgICAgIDwvbGFiZWw+XG4gICAgKTtcbiAgICBpZiAodGhpcy5xdWVzdGlvbi5pc0VtcHR5KCkpIHtcbiAgICAgIG5vRmlsZUNob3NlbiA9IChcbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMubm9GaWxlQ2hvc2VufT5cbiAgICAgICAgICB7dGhpcy5xdWVzdGlvbi5ub0ZpbGVDaG9zZW5DYXB0aW9ufVxuICAgICAgICA8L3NwYW4+XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0RmlsZURlY29yYXRvckNzcygpfVxuICAgICAgICBvbkRyb3A9e3RoaXMucXVlc3Rpb24ub25Ecm9wfVxuICAgICAgICBvbkRyYWdPdmVyPXt0aGlzLnF1ZXN0aW9uLm9uRHJhZ092ZXJ9XG4gICAgICAgIG9uRHJhZ0xlYXZlPXt0aGlzLnF1ZXN0aW9uLm9uRHJhZ0xlYXZlfVxuICAgICAgPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5kcmFnQXJlYVBsYWNlaG9sZGVyfT57dGhpcy5xdWVzdGlvbi5kcmFnQXJlYVBsYWNlaG9sZGVyfTwvc3Bhbj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy53cmFwcGVyfT5cbiAgICAgICAgICB7Y2hvb3NlRmlsZX1cbiAgICAgICAgICB7bm9GaWxlQ2hvc2VufVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckNsZWFyQnV0dG9uKGNsYXNzTmFtZTogc3RyaW5nKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAhdGhpcy5xdWVzdGlvbi5pc0VtcHR5KCkgJiYgIXRoaXMuaXNEaXNwbGF5TW9kZSAmJiAhIWNsYXNzTmFtZT8gKFxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17dGhpcy5xdWVzdGlvbi5kb0NsZWFufSBjbGFzc05hbWU9e2NsYXNzTmFtZX0+XG4gICAgICAgIDxzcGFuPnt0aGlzLnF1ZXN0aW9uLmNsZWFuQnV0dG9uQ2FwdGlvbn08L3NwYW4+XG4gICAgICAgIHsoISF0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucmVtb3ZlQnV0dG9uSWNvbklkKSA/IDxTdmdJY29uIGljb25OYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucmVtb3ZlQnV0dG9uSWNvbklkfSBzaXplPXtcImF1dG9cIn0+PC9TdmdJY29uPjogbnVsbCB9XG4gICAgICA8L2J1dHRvbj5cbiAgICApIDogbnVsbDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRmlsZVNpZ24oY2xhc3NOYW1lOiBzdHJpbmcsIHZhbDogYW55KTogSlNYLkVsZW1lbnQge1xuICAgIGlmKCFjbGFzc05hbWUgfHwgIXZhbC5uYW1lKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZX0+XG4gICAgICAgIDxhXG4gICAgICAgICAgaHJlZj17dmFsLmNvbnRlbnR9XG4gICAgICAgICAgb25DbGljaz17ZXZlbnQgPT4ge1xuICAgICAgICAgICAgdGhpcy5xdWVzdGlvbi5kb0Rvd25sb2FkRmlsZShldmVudCwgdmFsKTtcbiAgICAgICAgICB9fVxuICAgICAgICAgIHRpdGxlPXt2YWwubmFtZX1cbiAgICAgICAgICBkb3dubG9hZD17dmFsLm5hbWV9XG4gICAgICAgICAgc3R5bGU9e3sgd2lkdGg6IHRoaXMucXVlc3Rpb24uaW1hZ2VXaWR0aCArIFwicHhcIiB9fVxuICAgICAgICA+XG4gICAgICAgICAge3ZhbC5uYW1lfVxuICAgICAgICA8L2E+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJQcmV2aWV3KCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMucXVlc3Rpb24ucHJldmlld1ZhbHVlIHx8ICF0aGlzLnF1ZXN0aW9uLnByZXZpZXdWYWx1ZS5sZW5ndGgpIHJldHVybiBudWxsO1xuICAgIHZhciBwcmV2aWV3cyA9IHRoaXMucXVlc3Rpb24ucHJldmlld1ZhbHVlLm1hcCgodmFsLCBpbmRleCkgPT4ge1xuICAgICAgaWYgKCF2YWwpIHJldHVybiBudWxsO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBrZXk9e3RoaXMucXVlc3Rpb24uaW5wdXRJZCArIFwiX1wiICsgaW5kZXh9XG4gICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucHJldmlld31cbiAgICAgICAgICBzdHlsZT17eyBkaXNwbGF5OiB0aGlzLnF1ZXN0aW9uLmlzUHJldmlld1Zpc2libGUoaW5kZXgpID8gdW5kZWZpbmVkIDogXCJub25lXCIgfX1cbiAgICAgICAgPlxuICAgICAgICAgIHt0aGlzLnJlbmRlckZpbGVTaWduKHRoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5maWxlU2lnbiwgdmFsKX1cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmltYWdlV3JhcHBlcn0+XG4gICAgICAgICAgICB7dGhpcy5xdWVzdGlvbi5jYW5QcmV2aWV3SW1hZ2UodmFsKSA/IChcbiAgICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgIHNyYz17dmFsLmNvbnRlbnR9XG4gICAgICAgICAgICAgICAgaGVpZ2h0PXt0aGlzLnF1ZXN0aW9uLmltYWdlSGVpZ2h0fVxuICAgICAgICAgICAgICAgIHdpZHRoPXt0aGlzLnF1ZXN0aW9uLmltYWdlV2lkdGh9XG4gICAgICAgICAgICAgICAgYWx0PVwiRmlsZSBwcmV2aWV3XCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkgOiAodGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmRlZmF1bHRJbWFnZT8oXG4gICAgICAgICAgICAgIDxTdmdJY29uIGljb25OYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuZGVmYXVsdEltYWdlSWNvbklkfSBzaXplPXtcImF1dG9cIn0gY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuZGVmYXVsdEltYWdlfT48L1N2Z0ljb24+XG4gICAgICAgICAgICApOm51bGwpfVxuICAgICAgICAgICAge3ZhbC5uYW1lICYmICF0aGlzLnF1ZXN0aW9uLmlzUmVhZE9ubHkgPyAoXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucmVtb3ZlRmlsZUJ1dHRvbn0gb25DbGljaz17KCkgPT4gdGhpcy5xdWVzdGlvbi5kb1JlbW92ZUZpbGUodmFsKX0+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnJlbW92ZUZpbGV9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3RoaXMucXVlc3Rpb24ucmVtb3ZlRmlsZUNhcHRpb259XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIHsodGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnJlbW92ZUZpbGVTdmdJY29uSWQpID9cbiAgICAgICAgICAgICAgICAgICg8U3ZnSWNvbiBpY29uTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnJlbW92ZUZpbGVTdmdJY29uSWR9IHNpemU9e1wiYXV0b1wifSBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yZW1vdmVGaWxlU3ZnfT48L1N2Z0ljb24+KTogbnVsbCB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAge3RoaXMucmVuZGVyRmlsZVNpZ24odGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmZpbGVTaWduQm90dG9tLCB2YWwpfVxuICAgICAgICA8L3NwYW4+XG4gICAgICApO1xuICAgIH0pO1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmZpbGVMaXN0IHx8IHVuZGVmaW5lZH0+e3ByZXZpZXdzfTwvZGl2PjtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiZmlsZVwiLCBwcm9wcyA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uRmlsZSwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFF1ZXN0aW9uSHRtbE1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25IdG1sIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbkh0bWxNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFF1ZXN0aW9uSHRtbE1vZGVsO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHRoaXMucmVhY3RPblN0ckNoYW5nZWQoKTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLnF1ZXN0aW9uLmxvY0h0bWwub25DaGFuZ2VkID0gZnVuY3Rpb24gKCkge307XG4gIH1cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogYW55LCBwcmV2U3RhdGU6IGFueSkge1xuICAgIHRoaXMucmVhY3RPblN0ckNoYW5nZWQoKTtcbiAgfVxuICBwcml2YXRlIHJlYWN0T25TdHJDaGFuZ2VkKCkge1xuICAgIHRoaXMucXVlc3Rpb24ubG9jSHRtbC5vbkNoYW5nZWQgPSAoKSA9PiB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgY2hhbmdlZDogISF0aGlzLnN0YXRlICYmIHRoaXMuc3RhdGUuY2hhbmdlZCA/IHRoaXMuc3RhdGUuY2hhbmdlZCArIDEgOiAxIH0pO1xuICAgIH07XG4gIH1cbiAgcHJvdGVjdGVkIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gc3VwZXIuY2FuUmVuZGVyKCkgJiYgISF0aGlzLnF1ZXN0aW9uLmh0bWw7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBodG1sVmFsdWUgPSB7IF9faHRtbDogdGhpcy5xdWVzdGlvbi5sb2NIdG1sLnJlbmRlcmVkSHRtbCB9O1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5yZW5kZXJDc3NSb290fVxuICAgICAgICBkYW5nZXJvdXNseVNldElubmVySFRNTD17aHRtbFZhbHVlfVxuICAgICAgLz5cbiAgICApO1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJodG1sXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbkh0bWwsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge1xuICBSZWFjdFN1cnZleUVsZW1lbnQsXG4gIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UsXG59IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25NYXRyaXhNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgTWF0cml4Um93TW9kZWwsIFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuaW1wb3J0IHsgSGVscGVycyB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIgfSBmcm9tIFwiLi9yZWFjdHN1cnZleW1vZGVsXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbk1hdHJpeCBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Uge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3RhdGUgPSB7IHJvd3NDaGFuZ2VkOiAwIH07XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbk1hdHJpeE1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25NYXRyaXhNb2RlbDtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uKSB7XG4gICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICB0aGlzLnF1ZXN0aW9uLnZpc2libGVSb3dzQ2hhbmdlZENhbGxiYWNrID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHNlbGYuc2V0U3RhdGUoeyByb3dzQ2hhbmdlZDogc2VsZi5zdGF0ZS5yb3dzQ2hhbmdlZCArIDEgfSk7XG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uKSB7XG4gICAgICB0aGlzLnF1ZXN0aW9uLnZpc2libGVSb3dzQ2hhbmdlZENhbGxiYWNrID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGNzc0NsYXNzZXMgPSB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgdmFyIHJvd3NUSCA9IHRoaXMucXVlc3Rpb24uaGFzUm93cyA/IDx0ZCAvPiA6IG51bGw7XG4gICAgdmFyIGhlYWRlcnMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucXVlc3Rpb24udmlzaWJsZUNvbHVtbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjb2x1bW4gPSB0aGlzLnF1ZXN0aW9uLnZpc2libGVDb2x1bW5zW2ldO1xuICAgICAgdmFyIGtleSA9IFwiY29sdW1uXCIgKyBpO1xuICAgICAgdmFyIGNvbHVtVGV4dCA9IHRoaXMucmVuZGVyTG9jU3RyaW5nKGNvbHVtbi5sb2NUZXh0KTtcbiAgICAgIGhlYWRlcnMucHVzaChcbiAgICAgICAgPHRoIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmhlYWRlckNlbGx9IGtleT17a2V5fT5cbiAgICAgICAgICB7dGhpcy53cmFwQ2VsbCh7IGNvbHVtbjogY29sdW1uIH0sIGNvbHVtVGV4dCwgXCJjb2x1bW4taGVhZGVyXCIpfVxuICAgICAgICA8L3RoPlxuICAgICAgKTtcbiAgICB9XG4gICAgdmFyIHJvd3MgPSBbXTtcbiAgICB2YXIgdmlzaWJsZVJvd3MgPSB0aGlzLnF1ZXN0aW9uLnZpc2libGVSb3dzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmlzaWJsZVJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciByb3cgPSB2aXNpYmxlUm93c1tpXTtcbiAgICAgIHZhciBrZXkgPSBcInJvdy1cIiArIHJvdy5uYW1lICsgXCItXCIgKyBpO1xuICAgICAgcm93cy5wdXNoKFxuICAgICAgICA8U3VydmV5UXVlc3Rpb25NYXRyaXhSb3dcbiAgICAgICAgICBrZXk9e2tleX1cbiAgICAgICAgICBxdWVzdGlvbj17dGhpcy5xdWVzdGlvbn1cbiAgICAgICAgICBjc3NDbGFzc2VzPXtjc3NDbGFzc2VzfVxuICAgICAgICAgIGlzRGlzcGxheU1vZGU9e3RoaXMuaXNEaXNwbGF5TW9kZX1cbiAgICAgICAgICByb3c9e3Jvd31cbiAgICAgICAgICBpc0ZpcnN0PXtpID09IDB9XG4gICAgICAgIC8+XG4gICAgICApO1xuICAgIH1cbiAgICB2YXIgaGVhZGVyID0gIXRoaXMucXVlc3Rpb24uc2hvd0hlYWRlciA/IG51bGwgOiAoXG4gICAgICA8dGhlYWQ+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICB7cm93c1RIfVxuICAgICAgICAgIHtoZWFkZXJzfVxuICAgICAgICA8L3RyPlxuICAgICAgPC90aGVhZD5cbiAgICApO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy50YWJsZVdyYXBwZXJ9XG4gICAgICAgIHJlZj17cm9vdCA9PiAodGhpcy5jb250cm9sID0gcm9vdCl9XG4gICAgICA+XG4gICAgICAgIDxmaWVsZHNldD5cbiAgICAgICAgICA8bGVnZW5kIGFyaWEtbGFiZWw9e3RoaXMucXVlc3Rpb24ubG9jVGl0bGUucmVuZGVyZWRIdG1sfSAvPlxuICAgICAgICAgIDx0YWJsZSBjbGFzc05hbWU9e2Nzc0NsYXNzZXMucm9vdH0+XG4gICAgICAgICAgICB7aGVhZGVyfVxuICAgICAgICAgICAgPHRib2R5Pntyb3dzfTwvdGJvZHk+XG4gICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgPC9maWVsZHNldD5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uTWF0cml4Um93IGV4dGVuZHMgUmVhY3RTdXJ2ZXlFbGVtZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmhhbmRsZU9uQ2hhbmdlID0gdGhpcy5oYW5kbGVPbkNoYW5nZS5iaW5kKHRoaXMpO1xuICB9XG4gIHByaXZhdGUgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uTWF0cml4TW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnF1ZXN0aW9uO1xuICB9XG4gIHByaXZhdGUgZ2V0IHJvdygpOiBNYXRyaXhSb3dNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMucm93O1xuICB9XG4gIGhhbmRsZU9uQ2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnJvdy52YWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IHRoaXMucm93LnZhbHVlIH0pO1xuICB9XG4gIHByb3RlY3RlZCB3cmFwQ2VsbChjZWxsOiBhbnksIGVsZW1lbnQ6IEpTWC5FbGVtZW50LCByZWFzb246IHN0cmluZyk6IEpTWC5FbGVtZW50IHtcbiAgICBpZighcmVhc29uKSB7XG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG4gICAgY29uc3Qgc3VydmV5OiBTdXJ2ZXlNb2RlbCA9IHRoaXMucXVlc3Rpb24uc3VydmV5IGFzIFN1cnZleU1vZGVsO1xuICAgIGxldCB3cmFwcGVyOiBKU1guRWxlbWVudDtcbiAgICBpZiAoc3VydmV5KSB7XG4gICAgICB3cmFwcGVyID0gUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIud3JhcE1hdHJpeENlbGwoc3VydmV5LCBlbGVtZW50LCBjZWxsLCByZWFzb24pO1xuICAgIH1cbiAgICByZXR1cm4gd3JhcHBlciA/PyBlbGVtZW50O1xuICB9XG4gIHByb3RlY3RlZCBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5yb3c7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciByb3dzVEQgPSBudWxsO1xuXG4gICAgaWYgKHRoaXMucXVlc3Rpb24uaGFzUm93cykge1xuICAgICAgdmFyIHJvd1RleHQgPSB0aGlzLnJlbmRlckxvY1N0cmluZyh0aGlzLnJvdy5sb2NUZXh0KTtcbiAgICAgIHJvd3NURCA9IDx0ZCBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jZWxsfT5cbiAgICAgICAge3RoaXMud3JhcENlbGwoeyByb3c6IHRoaXMucm93IH0sIHJvd1RleHQsIFwicm93LWhlYWRlclwiKX1cbiAgICAgIDwvdGQ+O1xuICAgIH1cblxuICAgIHZhciB0ZHMgPSB0aGlzLmdlbmVyYXRlVGRzKCk7XG4gICAgcmV0dXJuIChcbiAgICAgIDx0ciBjbGFzc05hbWU9e3RoaXMucm93LnJvd0NsYXNzZXN9PlxuICAgICAgICB7cm93c1REfVxuICAgICAgICB7dGRzfVxuICAgICAgPC90cj5cbiAgICApO1xuICB9XG5cbiAgZ2VuZXJhdGVUZHMoKSB7XG4gICAgdmFyIHRkcyA9IFtdO1xuICAgIHZhciByb3cgPSB0aGlzLnJvdztcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5xdWVzdGlvbi52aXNpYmxlQ29sdW1ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHRkID0gbnVsbDtcbiAgICAgIHZhciBjb2x1bW4gPSB0aGlzLnF1ZXN0aW9uLnZpc2libGVDb2x1bW5zW2ldO1xuICAgICAgdmFyIGtleSA9IFwidmFsdWVcIiArIGk7XG5cbiAgICAgIC8vdmFyIGlzQ2hlY2tlZCA9IEhlbHBlcnMuaXNUd29WYWx1ZUVxdWFscyhyb3cudmFsdWUsIGNvbHVtbi52YWx1ZSk7XG4gICAgICB2YXIgaXNDaGVja2VkID0gcm93LnZhbHVlID09IGNvbHVtbi52YWx1ZTtcbiAgICAgIGxldCBpdGVtQ2xhc3MgPSB0aGlzLnF1ZXN0aW9uLmdldEl0ZW1DbGFzcyhyb3csIGNvbHVtbik7XG4gICAgICB2YXIgaW5wdXRJZCA9IHRoaXMucXVlc3Rpb24uaW5wdXRJZCArIFwiX1wiICsgcm93Lm5hbWUgKyBcIl9cIiArIGk7XG4gICAgICBpZiAodGhpcy5xdWVzdGlvbi5oYXNDZWxsVGV4dCkge1xuICAgICAgICB2YXIgZ2V0SGFuZGxlciA9ICF0aGlzLnF1ZXN0aW9uLmlzSW5wdXRSZWFkT25seVxuICAgICAgICAgID8gKGNvbHVtbjogYW55KSA9PiAoKSA9PiB0aGlzLmNlbGxDbGljayhyb3csIGNvbHVtbilcbiAgICAgICAgICA6IG51bGw7XG4gICAgICAgIHRkID0gKFxuICAgICAgICAgIDx0ZFxuICAgICAgICAgICAga2V5PXtrZXl9XG4gICAgICAgICAgICBjbGFzc05hbWU9e2l0ZW1DbGFzc31cbiAgICAgICAgICAgIG9uQ2xpY2s9e2dldEhhbmRsZXIgPyBnZXRIYW5kbGVyKGNvbHVtbikgOiBudWxsfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt0aGlzLnJlbmRlckxvY1N0cmluZyhcbiAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbi5nZXRDZWxsRGlzcGxheUxvY1RleHQocm93Lm5hbWUsIGNvbHVtbilcbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRkID0gKFxuICAgICAgICAgIDx0ZFxuICAgICAgICAgICAga2V5PXtrZXl9XG4gICAgICAgICAgICBkYXRhLXJlc3BvbnNpdmUtdGl0bGU9e2NvbHVtbi5sb2NUZXh0LnJlbmRlcmVkSHRtbH1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmNlbGx9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT17aXRlbUNsYXNzfT5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgaWQ9e2lucHV0SWR9XG4gICAgICAgICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e3RoaXMuY3NzQ2xhc3Nlcy5pdGVtVmFsdWV9XG4gICAgICAgICAgICAgICAgbmFtZT17cm93LmZ1bGxOYW1lfVxuICAgICAgICAgICAgICAgIHZhbHVlPXtjb2x1bW4udmFsdWV9XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3RoaXMuaXNEaXNwbGF5TW9kZX1cbiAgICAgICAgICAgICAgICBjaGVja2VkPXtpc0NoZWNrZWR9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlT25DaGFuZ2V9XG4gICAgICAgICAgICAgICAgYXJpYS1yZXF1aXJlZD17dGhpcy5xdWVzdGlvbi5hcmlhUmVxdWlyZWR9XG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17Y29sdW1uLmxvY1RleHQucmVuZGVyZWRIdG1sfVxuICAgICAgICAgICAgICAgIGFyaWEtaW52YWxpZD17dGhpcy5xdWVzdGlvbi5hcmlhSW52YWxpZH1cbiAgICAgICAgICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PXt0aGlzLnF1ZXN0aW9uLmFyaWFEZXNjcmliZWRCeX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMubWF0ZXJpYWxEZWNvcmF0b3J9PlxuICAgICAgICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLml0ZW1EZWNvcmF0b3J9XG4gICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiLTEyIC0xMiAyNCAyNFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGNpcmNsZSByPVwiNlwiIGN4PVwiMFwiIGN5PVwiMFwiIC8+c1xuICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImNpcmNsZVwiIC8+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImNoZWNrXCIgLz5cbiAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgZGlzcGxheTogXCJub25lXCIgfX0+XG4gICAgICAgICAgICAgICAge3RoaXMucXVlc3Rpb24ubG9jVGl0bGUucmVuZGVyZWRIdG1sfVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICB0ZHMucHVzaCh0ZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRkcztcbiAgfVxuICBjZWxsQ2xpY2socm93OiBhbnksIGNvbHVtbjogYW55KSB7XG4gICAgcm93LnZhbHVlID0gY29sdW1uLnZhbHVlO1xuICAgIHRoaXMuc2V0U3RhdGUoeyB2YWx1ZTogdGhpcy5yb3cudmFsdWUgfSk7XG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcIm1hdHJpeFwiLCBwcm9wcyA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uTWF0cml4LCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25NYXRyaXhEcm9wZG93bkJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX21hdHJpeGRyb3Bkb3duYmFzZVwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uTWF0cml4RHJvcGRvd24gZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbk1hdHJpeERyb3Bkb3duQmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcIm1hdHJpeGRyb3Bkb3duXCIsIHByb3BzID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25NYXRyaXhEcm9wZG93biwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7XG4gIFJlYWN0U3VydmV5RWxlbWVudCxcbiAgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZVxufSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uLCBTdXJ2ZXlRdWVzdGlvbkFuZEVycm9yc0NlbGwgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uXCI7XG5pbXBvcnQge1xuICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLFxuICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3csXG4gIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwsXG4gIEFkYXB0aXZlQWN0aW9uQ29udGFpbmVyLFxuICBRdWVzdGlvblxufSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uQ2hlY2tib3hJdGVtIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9jaGVja2JveFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25SYWRpb0l0ZW0gfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX3JhZGlvZ3JvdXBcIjtcbmltcG9ydCB7IFN1cnZleVBhbmVsIH0gZnJvbSBcIi4vcGFuZWxcIjtcbmltcG9ydCB7IFN1cnZleUFjdGlvbkJhciB9IGZyb20gXCIuL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24tYmFyXCI7XG5pbXBvcnQgeyBNYXRyaXhSb3cgfSBmcm9tIFwiLi9jb21wb25lbnRzL21hdHJpeC9yb3dcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pY0RyYWdEcm9wSWNvbiB9IGZyb20gXCIuL2NvbXBvbmVudHMvbWF0cml4LWFjdGlvbnMvZHJhZy1kcm9wLWljb24vZHJhZy1kcm9wLWljb25cIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uTWF0cml4RHJvcGRvd25CYXNlIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHRoaXMuZ2V0U3RhdGUoKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlO1xuICB9XG4gIHByaXZhdGUgZ2V0U3RhdGUocHJldlN0YXRlOiBhbnkgPSBudWxsKSB7XG4gICAgcmV0dXJuIHsgcm93Q291bnRlcjogIXByZXZTdGF0ZSA/IDAgOiBwcmV2U3RhdGUucm93Q291bnRlciArIDEgfTtcbiAgfVxuICBwcml2YXRlIHVwZGF0ZVN0YXRlT25DYWxsYmFjaygpIHtcbiAgICBpZiAodGhpcy5pc1JlbmRlcmluZykgcmV0dXJuO1xuICAgIHRoaXMuc2V0U3RhdGUodGhpcy5nZXRTdGF0ZSh0aGlzLnN0YXRlKSk7XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICB0aGlzLnF1ZXN0aW9uLnZpc2libGVSb3dzQ2hhbmdlZENhbGxiYWNrID0gKCkgPT4ge1xuICAgICAgdGhpcy51cGRhdGVTdGF0ZU9uQ2FsbGJhY2soKTtcbiAgICB9O1xuICAgIHRoaXMucXVlc3Rpb24ub25SZW5kZXJlZFRhYmxlUmVzZXRDYWxsYmFjayA9ICgpID0+IHtcbiAgICAgIHRoaXMucXVlc3Rpb24ucmVuZGVyZWRUYWJsZS5yZW5kZXJlZFJvd3NDaGFuZ2VkQ2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMudXBkYXRlU3RhdGVPbkNhbGxiYWNrKCk7XG4gICAgICB9O1xuICAgICAgdGhpcy51cGRhdGVTdGF0ZU9uQ2FsbGJhY2soKTtcbiAgICB9O1xuICAgIHRoaXMucXVlc3Rpb24ucmVuZGVyZWRUYWJsZS5yZW5kZXJlZFJvd3NDaGFuZ2VkQ2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZVN0YXRlT25DYWxsYmFjaygpO1xuICAgIH07XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICB0aGlzLnF1ZXN0aW9uLnZpc2libGVSb3dzQ2hhbmdlZENhbGxiYWNrID0gdW5kZWZpbmVkO1xuICAgIHRoaXMucXVlc3Rpb24ub25SZW5kZXJlZFRhYmxlUmVzZXRDYWxsYmFjayA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkVGFibGUucmVuZGVyZWRSb3dzQ2hhbmdlZENhbGxiYWNrID0gdW5kZWZpbmVkO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5yZW5kZXJUYWJsZURpdigpO1xuICB9XG4gIHJlbmRlclRhYmxlRGl2KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgaGVhZGVyID0gdGhpcy5yZW5kZXJIZWFkZXIoKTtcbiAgICB2YXIgZm9vdGVycyA9IHRoaXMucmVuZGVyRm9vdGVyKCk7XG4gICAgdmFyIHJvd3MgPSB0aGlzLnJlbmRlclJvd3MoKTtcbiAgICB2YXIgZGl2U3R5bGUgPSB0aGlzLnF1ZXN0aW9uLnNob3dIb3Jpem9udGFsU2Nyb2xsXG4gICAgICA/ICh7IG92ZXJmbG93WDogXCJzY3JvbGxcIiB9IGFzIFJlYWN0LkNTU1Byb3BlcnRpZXMpXG4gICAgICA6ICh7fSBhcyBSZWFjdC5DU1NQcm9wZXJ0aWVzKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBzdHlsZT17ZGl2U3R5bGV9IHJlZj17KHJvb3QpID0+ICh0aGlzLmNvbnRyb2wgPSByb290KX0+XG4gICAgICAgIDx0YWJsZSBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yb290fT5cbiAgICAgICAgICB7aGVhZGVyfVxuICAgICAgICAgIHtyb3dzfVxuICAgICAgICAgIHtmb290ZXJzfVxuICAgICAgICA8L3RhYmxlPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICByZW5kZXJIZWFkZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciB0YWJsZSA9IHRoaXMucXVlc3Rpb24ucmVuZGVyZWRUYWJsZTtcbiAgICBpZiAoIXRhYmxlLnNob3dIZWFkZXIpIHJldHVybiBudWxsO1xuICAgIHZhciBoZWFkZXJzOiBhbnlbXSA9IFtdO1xuICAgIHZhciBjZWxscyA9IHRhYmxlLmhlYWRlclJvdy5jZWxscztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNlbGxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY2VsbCA9IGNlbGxzW2ldO1xuICAgICAgdmFyIGtleSA9IFwiY29sdW1uXCIgKyBpO1xuICAgICAgdmFyIGNvbHVtblN0eWxlOiBhbnkgPSB7fTtcbiAgICAgIGlmICghIWNlbGwud2lkdGgpIHtcbiAgICAgICAgY29sdW1uU3R5bGUud2lkdGggPSBjZWxsLndpZHRoO1xuICAgICAgfVxuICAgICAgaWYgKCEhY2VsbC5taW5XaWR0aCkge1xuICAgICAgICBjb2x1bW5TdHlsZS5taW5XaWR0aCA9IGNlbGwubWluV2lkdGg7XG4gICAgICB9XG4gICAgICB2YXIgY2VsbENvbnRlbnQgPSB0aGlzLnJlbmRlckNlbGxDb250ZW50KGNlbGwsIFwiY29sdW1uLWhlYWRlclwiLCB7fSk7XG4gICAgICBoZWFkZXJzLnB1c2goXG4gICAgICAgIDx0aFxuICAgICAgICAgIGNsYXNzTmFtZT17Y2VsbC5jbGFzc05hbWV9XG4gICAgICAgICAga2V5PXtrZXl9XG4gICAgICAgICAgc3R5bGU9e2NvbHVtblN0eWxlfVxuICAgICAgICA+XG4gICAgICAgICAge2NlbGxDb250ZW50fVxuICAgICAgICA8L3RoPlxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDx0aGVhZD5cbiAgICAgICAgPHRyPntoZWFkZXJzfTwvdHI+XG4gICAgICA8L3RoZWFkPlxuICAgICk7XG4gIH1cbiAgcmVuZGVyRm9vdGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgdGFibGUgPSB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkVGFibGU7XG4gICAgaWYgKCF0YWJsZS5zaG93Rm9vdGVyKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgcm93ID0gdGhpcy5yZW5kZXJSb3coXG4gICAgICBcImZvb3RlclwiLFxuICAgICAgdGFibGUuZm9vdGVyUm93LFxuICAgICAgdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzXG4gICAgKTtcbiAgICByZXR1cm4gPHRmb290Pntyb3d9PC90Zm9vdD47XG4gIH1cbiAgcmVuZGVyUm93cygpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGNzc0NsYXNzZXMgPSB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgdmFyIHJvd3MgPSBbXTtcbiAgICB2YXIgcmVuZGVyZWRSb3dzID0gdGhpcy5xdWVzdGlvbi5yZW5kZXJlZFRhYmxlLnJvd3M7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZW5kZXJlZFJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJvd3MucHVzaChcbiAgICAgICAgdGhpcy5yZW5kZXJSb3cocmVuZGVyZWRSb3dzW2ldLmlkLCByZW5kZXJlZFJvd3NbaV0sIGNzc0NsYXNzZXMpXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gPHRib2R5Pntyb3dzfTwvdGJvZHk+O1xuICB9XG4gIHJlbmRlclJvdyhcbiAgICBrZXlWYWx1ZTogYW55LFxuICAgIHJvdzogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkUm93LFxuICAgIGNzc0NsYXNzZXM6IGFueVxuICApOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIG1hdHJpeHJvdyA9IFtdO1xuICAgIHZhciBjZWxscyA9IHJvdy5jZWxscztcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2VsbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIG1hdHJpeHJvdy5wdXNoKHRoaXMucmVuZGVyQ2VsbChjZWxsc1tpXSwgaSwgY3NzQ2xhc3NlcykpO1xuICAgIH1cbiAgICB2YXIga2V5ID0gXCJyb3dcIiArIGtleVZhbHVlO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxSZWFjdC5GcmFnbWVudCBrZXk9e2tleX0+XG4gICAgICAgIDxNYXRyaXhSb3cgbW9kZWw9e3Jvd30gcGFyZW50TWF0cml4PXt0aGlzLnF1ZXN0aW9ufT57bWF0cml4cm93fTwvTWF0cml4Um93PlxuICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVyQ2VsbChcbiAgICBjZWxsOiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRDZWxsLFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgY3NzQ2xhc3NlczogYW55XG4gICk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIga2V5ID0gXCJjZWxsXCIgKyBpbmRleDtcbiAgICBpZiAoY2VsbC5oYXNRdWVzdGlvbikge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFN1cnZleVF1ZXN0aW9uTWF0cml4RHJvcGRvd25DZWxsXG4gICAgICAgICAga2V5PXtrZXl9XG4gICAgICAgICAgaXRlbUNzcz17Y2VsbC5jbGFzc05hbWV9XG4gICAgICAgICAgY3NzQ2xhc3Nlcz17Y3NzQ2xhc3Nlc31cbiAgICAgICAgICBjZWxsPXtjZWxsfVxuICAgICAgICAgIGNyZWF0b3I9e3RoaXMuY3JlYXRvcn1cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfVxuICAgIGxldCByZWFzb24gPSBjZWxsLmhhc1RpdGxlID8gXCJyb3ctaGVhZGVyXCIgOiBcIlwiO1xuICAgIHZhciBjZWxsQ29udGVudCA9IHRoaXMucmVuZGVyQ2VsbENvbnRlbnQoY2VsbCwgcmVhc29uLCBjc3NDbGFzc2VzKTtcbiAgICB2YXIgY2VsbFN0eWxlOiBhbnkgPSBudWxsO1xuICAgIGlmICghIWNlbGwud2lkdGggfHwgISFjZWxsLm1pbldpZHRoKSB7XG4gICAgICBjZWxsU3R5bGUgPSB7fTtcbiAgICAgIGlmICghIWNlbGwud2lkdGgpIGNlbGxTdHlsZS53aWR0aCA9IGNlbGwud2lkdGg7XG4gICAgICBpZiAoISFjZWxsLm1pbldpZHRoKSBjZWxsU3R5bGUubWluV2lkdGggPSBjZWxsLm1pbldpZHRoO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8dGRcbiAgICAgICAgY2xhc3NOYW1lPXtjZWxsLmNsYXNzTmFtZX1cbiAgICAgICAga2V5PXtrZXl9XG4gICAgICAgIHN0eWxlPXtjZWxsU3R5bGV9XG4gICAgICAgIGNvbFNwYW49e2NlbGwuY29sU3BhbnN9XG4gICAgICA+XG4gICAgICAgIHtjZWxsQ29udGVudH1cbiAgICAgIDwvdGQ+XG4gICAgKTtcbiAgfVxuICBwcml2YXRlIHJlbmRlckNlbGxDb250ZW50KFxuICAgIGNlbGw6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwsXG4gICAgcmVhc29uOiBzdHJpbmcsXG4gICAgY3NzQ2xhc3NlczogYW55XG4gICk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgY2VsbENvbnRlbnQgPSBudWxsO1xuICAgIHZhciByZXF1aXJlZFNwYWNlID0gbnVsbDtcbiAgICB2YXIgcmVxdWlyZWRUZXh0ID0gbnVsbDtcbiAgICB2YXIgY2VsbFN0eWxlOiBhbnkgPSBudWxsO1xuICAgIGlmICghIWNlbGwud2lkdGggfHwgISFjZWxsLm1pbldpZHRoKSB7XG4gICAgICBjZWxsU3R5bGUgPSB7fTtcbiAgICAgIGlmICghIWNlbGwud2lkdGgpIGNlbGxTdHlsZS53aWR0aCA9IGNlbGwud2lkdGg7XG4gICAgICBpZiAoISFjZWxsLm1pbldpZHRoKSBjZWxsU3R5bGUubWluV2lkdGggPSBjZWxsLm1pbldpZHRoO1xuICAgIH1cbiAgICBpZiAoY2VsbC5oYXNUaXRsZSkge1xuICAgICAgcmVhc29uID0gXCJyb3ctaGVhZGVyXCI7XG4gICAgICBjZWxsQ29udGVudCA9IHRoaXMucmVuZGVyTG9jU3RyaW5nKGNlbGwubG9jVGl0bGUpO1xuICAgICAgaWYgKGNlbGwucmVxdWlyZWRUZXh0KSB7XG4gICAgICAgIHJlcXVpcmVkU3BhY2UgPSA8c3Bhbj4mbmJzcDs8L3NwYW4+O1xuICAgICAgICByZXF1aXJlZFRleHQgPSA8c3Bhbj57Y2VsbC5yZXF1aXJlZFRleHR9PC9zcGFuPjtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNlbGwuaXNEcmFnSGFuZGxlckNlbGwpIHtcbiAgICAgIGNlbGxDb250ZW50ID0gKDw+XG4gICAgICAgIDxTdXJ2ZXlRdWVzdGlvbk1hdHJpeER5bmFtaWNEcmFnRHJvcEljb24gaXRlbT17eyBkYXRhOiB7IHJvdzogY2VsbC5yb3csIHF1ZXN0aW9uOiB0aGlzLnF1ZXN0aW9uIH0gfX0vPlxuICAgICAgPC8+KTtcbiAgICB9XG4gICAgaWYgKGNlbGwuaXNBY3Rpb25zQ2VsbCkge1xuICAgICAgY2VsbENvbnRlbnQgPSAoXG4gICAgICAgIDxTdXJ2ZXlRdWVzdGlvbk1hdHJpeEFjdGlvbnNDZWxsXG4gICAgICAgICAgbW9kZWw9e2NlbGwuaXRlbS5nZXREYXRhKCl9XG4gICAgICAgID48L1N1cnZleVF1ZXN0aW9uTWF0cml4QWN0aW9uc0NlbGw+XG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoY2VsbC5oYXNQYW5lbCkge1xuICAgICAgY2VsbENvbnRlbnQgPSAoXG4gICAgICAgIDxTdXJ2ZXlQYW5lbFxuICAgICAgICAgIGtleT17Y2VsbC5wYW5lbC5pZH1cbiAgICAgICAgICBlbGVtZW50PXtjZWxsLnBhbmVsfVxuICAgICAgICAgIHN1cnZleT17dGhpcy5xdWVzdGlvbi5zdXJ2ZXl9XG4gICAgICAgICAgY3NzQ2xhc3Nlcz17Y3NzQ2xhc3Nlc31cbiAgICAgICAgICBpc0Rpc3BsYXlNb2RlPXt0aGlzLmlzRGlzcGxheU1vZGV9XG4gICAgICAgICAgY3JlYXRvcj17dGhpcy5jcmVhdG9yfVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKCFjZWxsQ29udGVudCkgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCByZWFkeUNlbGwgPSAoXG4gICAgICA8PlxuICAgICAgICB7Y2VsbENvbnRlbnR9XG4gICAgICAgIHtyZXF1aXJlZFNwYWNlfVxuICAgICAgICB7cmVxdWlyZWRUZXh0fVxuICAgICAgPC8+XG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy53cmFwQ2VsbChjZWxsLCByZWFkeUNlbGwsIHJlYXNvbik7XG4gIH1cbn1cblxuY2xhc3MgU3VydmV5UXVlc3Rpb25NYXRyaXhBY3Rpb25zQ2VsbCBleHRlbmRzIFJlYWN0U3VydmV5RWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgZ2V0IG1vZGVsKCk6IEFkYXB0aXZlQWN0aW9uQ29udGFpbmVyIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5tb2RlbDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTdXJ2ZXlBY3Rpb25CYXIgbW9kZWw9e3RoaXMubW9kZWx9IGhhbmRsZUNsaWNrPXtmYWxzZX0+PC9TdXJ2ZXlBY3Rpb25CYXI+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25NYXRyaXhEcm9wZG93bkNlbGwgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkFuZEVycm9yc0NlbGwge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByaXZhdGUgZ2V0IGNlbGwoKTogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkQ2VsbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY2VsbDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0UXVlc3Rpb24oKTogUXVlc3Rpb24ge1xuICAgIHZhciBxID0gc3VwZXIuZ2V0UXVlc3Rpb24oKTtcbiAgICBpZiAoISFxKSByZXR1cm4gcTtcbiAgICByZXR1cm4gISF0aGlzLmNlbGwgPyB0aGlzLmNlbGwucXVlc3Rpb24gOiBudWxsO1xuICB9XG4gIHByb3RlY3RlZCBkb0FmdGVyUmVuZGVyKCkge1xuICAgIHZhciBlbCA9IHRoaXMuY2VsbFJlZi5jdXJyZW50O1xuICAgIGlmIChcbiAgICAgIGVsICYmXG4gICAgICB0aGlzLmNlbGwgJiZcbiAgICAgIHRoaXMucXVlc3Rpb24gJiZcbiAgICAgIHRoaXMucXVlc3Rpb24uc3VydmV5ICYmXG4gICAgICBlbC5nZXRBdHRyaWJ1dGUoXCJkYXRhLXJlbmRlcmVkXCIpICE9PSBcInJcIlxuICAgICkge1xuICAgICAgZWwuc2V0QXR0cmlidXRlKFwiZGF0YS1yZW5kZXJlZFwiLCBcInJcIik7XG4gICAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgICAgY2VsbDogdGhpcy5jZWxsLFxuICAgICAgICBjZWxsUXVlc3Rpb246IHRoaXMucXVlc3Rpb24sXG4gICAgICAgIGh0bWxFbGVtZW50OiBlbCxcbiAgICAgICAgcm93OiB0aGlzLmNlbGwucm93LFxuICAgICAgICBjb2x1bW46IHRoaXMuY2VsbC5jZWxsLmNvbHVtbixcbiAgICAgIH07XG4gICAgICB0aGlzLnF1ZXN0aW9uLnN1cnZleS5tYXRyaXhBZnRlckNlbGxSZW5kZXIodGhpcy5xdWVzdGlvbiwgb3B0aW9ucyk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBnZXRTaG93RXJyb3JzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnF1ZXN0aW9uLmlzVmlzaWJsZSAmJlxuICAgICAgKCF0aGlzLmNlbGwuaXNDaG9pY2UgfHwgdGhpcy5jZWxsLmlzRmlyc3RDaG9pY2UpXG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Q2VsbFN0eWxlKCk6IGFueSB7XG4gICAgdmFyIHJlczogYW55ID0gc3VwZXIuZ2V0Q2VsbFN0eWxlKCk7XG4gICAgaWYgKCEhdGhpcy5jZWxsLndpZHRoIHx8ICEhdGhpcy5jZWxsLm1pbldpZHRoKSB7XG4gICAgICBpZiAoIXJlcykgcmVzID0ge307XG4gICAgICBpZiAoISF0aGlzLmNlbGwud2lkdGgpIHJlcy53aWR0aCA9IHRoaXMuY2VsbC53aWR0aDtcbiAgICAgIGlmICghIXRoaXMuY2VsbC5taW5XaWR0aCkgcmVzLm1pbldpZHRoID0gdGhpcy5jZWxsLm1pbldpZHRoO1xuICAgIH1cblxuICAgIHJldHVybiByZXM7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0SGVhZGVyVGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNlbGwuaGVhZGVycztcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyUXVlc3Rpb24oKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5jZWxsLmlzQ2hvaWNlKVxuICAgICAgcmV0dXJuIFN1cnZleVF1ZXN0aW9uLnJlbmRlclF1ZXN0aW9uQm9keSh0aGlzLmNyZWF0b3IsIHRoaXMucXVlc3Rpb24pO1xuICAgIGlmICh0aGlzLmNlbGwuaXNDaGVja2JveCkgcmV0dXJuIHRoaXMucmVuZGVyQ2VsbENoZWNrYm94QnV0dG9uKCk7XG4gICAgcmV0dXJuIHRoaXMucmVuZGVyQ2VsbFJhZGlvZ3JvdXBCdXR0b24oKTtcbiAgfVxuICBwcml2YXRlIHJlbmRlckNlbGxDaGVja2JveEJ1dHRvbigpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGtleSA9IHRoaXMuY2VsbC5xdWVzdGlvbi5pZCArIFwiaXRlbVwiICsgdGhpcy5jZWxsLmNob2ljZUluZGV4O1xuICAgIHJldHVybiAoXG4gICAgICA8U3VydmV5UXVlc3Rpb25DaGVja2JveEl0ZW1cbiAgICAgICAga2V5PXtrZXl9XG4gICAgICAgIHF1ZXN0aW9uPXt0aGlzLmNlbGwucXVlc3Rpb259XG4gICAgICAgIGNzc0NsYXNzZXM9e3RoaXMuY2VsbC5xdWVzdGlvbi5jc3NDbGFzc2VzfVxuICAgICAgICBpc0Rpc3BsYXlNb2RlPXt0aGlzLmNlbGwucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5fVxuICAgICAgICBpdGVtPXt0aGlzLmNlbGwuaXRlbX1cbiAgICAgICAgaXNGaXJzdD17dGhpcy5jZWxsLmlzRmlyc3RDaG9pY2V9XG4gICAgICAgIGluZGV4PXt0aGlzLmNlbGwuY2hvaWNlSW5kZXgudG9TdHJpbmcoKX1cbiAgICAgICAgaGlkZUNhcHRpb249e3RydWV9XG4gICAgICAvPlxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSByZW5kZXJDZWxsUmFkaW9ncm91cEJ1dHRvbigpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGtleSA9IHRoaXMuY2VsbC5xdWVzdGlvbi5pZCArIFwiaXRlbVwiICsgdGhpcy5jZWxsLmNob2ljZUluZGV4O1xuICAgIHJldHVybiAoXG4gICAgICA8U3VydmV5UXVlc3Rpb25SYWRpb0l0ZW1cbiAgICAgICAga2V5PXtrZXl9XG4gICAgICAgIHF1ZXN0aW9uPXt0aGlzLmNlbGwucXVlc3Rpb259XG4gICAgICAgIGNzc0NsYXNzZXM9e3RoaXMuY2VsbC5xdWVzdGlvbi5jc3NDbGFzc2VzfVxuICAgICAgICBpc0Rpc3BsYXlNb2RlPXt0aGlzLmNlbGwucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5fVxuICAgICAgICBpdGVtPXt0aGlzLmNlbGwuaXRlbX1cbiAgICAgICAgaW5kZXg9e3RoaXMuY2VsbC5jaG9pY2VJbmRleC50b1N0cmluZygpfVxuICAgICAgICBpc0NoZWNrZWQ9e3RoaXMuY2VsbC5xdWVzdGlvbi52YWx1ZSA9PT0gdGhpcy5jZWxsLml0ZW0udmFsdWV9XG4gICAgICAgIGlzRGlzYWJsZWQ9e3RoaXMuY2VsbC5xdWVzdGlvbi5pc1JlYWRPbmx5IHx8ICF0aGlzLmNlbGwuaXRlbS5pc0VuYWJsZWR9XG4gICAgICAgIGhpZGVDYXB0aW9uPXt0cnVlfVxuICAgICAgLz5cbiAgICApO1xuICB9XG59XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbk1hdHJpeERyb3Bkb3duQmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fbWF0cml4ZHJvcGRvd25iYXNlXCI7XG5pbXBvcnQgeyBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25NYXRyaXhEcm9wZG93bkJhc2Uge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuaGFuZGxlT25Sb3dBZGRDbGljayA9IHRoaXMuaGFuZGxlT25Sb3dBZGRDbGljay5iaW5kKHRoaXMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgbWF0cml4KCk6IFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWw7XG4gIH1cbiAgaGFuZGxlT25Sb3dBZGRDbGljayhldmVudDogYW55KSB7XG4gICAgdGhpcy5tYXRyaXguYWRkUm93VUkoKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGNzc0NsYXNzZXMgPSB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgdmFyIHNob3dUYWJsZSA9IHRoaXMucXVlc3Rpb24ucmVuZGVyZWRUYWJsZS5zaG93VGFibGU7XG4gICAgdmFyIG1haW5EaXYgPSBzaG93VGFibGVcbiAgICAgID8gdGhpcy5yZW5kZXJUYWJsZURpdigpXG4gICAgICA6IHRoaXMucmVuZGVyTm9Sb3dzQ29udGVudChjc3NDbGFzc2VzKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdj5cbiAgICAgICAge3RoaXMucmVuZGVyQWRkUm93QnV0dG9uT25Ub3AoY3NzQ2xhc3Nlcyl9XG4gICAgICAgIHttYWluRGl2fVxuICAgICAgICB7dGhpcy5yZW5kZXJBZGRSb3dCdXR0b25PbkJvdHRvbShjc3NDbGFzc2VzKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckFkZFJvd0J1dHRvbk9uVG9wKGNzc0NsYXNzZXM6IGFueSk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMubWF0cml4LnJlbmRlcmVkVGFibGUuc2hvd0FkZFJvd09uVG9wKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gdGhpcy5yZW5kZXJBZGRSb3dCdXR0b24oY3NzQ2xhc3Nlcyk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckFkZFJvd0J1dHRvbk9uQm90dG9tKGNzc0NsYXNzZXM6IGFueSk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMubWF0cml4LnJlbmRlcmVkVGFibGUuc2hvd0FkZFJvd09uQm90dG9tKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gdGhpcy5yZW5kZXJBZGRSb3dCdXR0b24oY3NzQ2xhc3Nlcyk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlck5vUm93c0NvbnRlbnQoY3NzQ2xhc3NlczogYW55KTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHRleHQ6IEpTWC5FbGVtZW50ID0gdGhpcy5yZW5kZXJMb2NTdHJpbmcodGhpcy5tYXRyaXgubG9jRW1wdHlSb3dzVGV4dCk7XG4gICAgY29uc3QgdGV4dERpdjogSlNYLkVsZW1lbnQgPSA8ZGl2IGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5lbXB0eVJvd3NUZXh0fT57dGV4dH08L2Rpdj47XG4gICAgY29uc3QgYnRuOiBKU1guRWxlbWVudCA9IHRoaXMucmVuZGVyQWRkUm93QnV0dG9uKGNzc0NsYXNzZXMsIHRydWUpO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5lbXB0eVJvd3NTZWN0aW9ufT5cbiAgICAgICAge3RleHREaXZ9XG4gICAgICAgIHtidG59XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJBZGRSb3dCdXR0b24oXG4gICAgY3NzQ2xhc3NlczogYW55LFxuICAgIGlzRW1wdHlTZWN0aW9uOiBib29sZWFuID0gZmFsc2VcbiAgKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGFkZFJvd1RleHQ6IEpTWC5FbGVtZW50ID0gdGhpcy5yZW5kZXJMb2NTdHJpbmcodGhpcy5tYXRyaXgubG9jQWRkUm93VGV4dCk7XG4gICAgY29uc3QgYWRkQnV0dG9uID0gKDxidXR0b25cbiAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRBZGRSb3dCdXR0b25Dc3MoaXNFbXB0eVNlY3Rpb24pfVxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBkaXNhYmxlZD17dGhpcy5xdWVzdGlvbi5pc0lucHV0UmVhZE9ubHl9XG4gICAgICBvbkNsaWNrPXtcbiAgICAgICAgdGhpcy5xdWVzdGlvbi5pc0Rlc2lnbk1vZGUgPyB1bmRlZmluZWQgOiB0aGlzLmhhbmRsZU9uUm93QWRkQ2xpY2tcbiAgICAgIH1cbiAgICA+XG4gICAgICB7YWRkUm93VGV4dH1cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5pY29uQWRkfSAvPlxuICAgIDwvYnV0dG9uPik7XG4gICAgcmV0dXJuIChcbiAgICAgIGlzRW1wdHlTZWN0aW9uID8gYWRkQnV0dG9uIDogPGRpdiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuZm9vdGVyfT57YWRkQnV0dG9ufTwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcIm1hdHJpeGR5bmFtaWNcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pYywgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRFcnJvcnMsIFN1cnZleVF1ZXN0aW9uQW5kRXJyb3JzV3JhcHBlZCB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25cIjtcbmltcG9ydCB7IFF1ZXN0aW9uTXVsdGlwbGVUZXh0TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IE11bHRpcGxlVGV4dEl0ZW1Nb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcbmltcG9ydCB7IFRpdGxlQ29udGVudCB9IGZyb20gXCIuL2NvbXBvbmVudHMvdGl0bGUvdGl0bGUtY29udGVudFwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25NdWx0aXBsZVRleHQgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uTXVsdGlwbGVUZXh0TW9kZWwge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBRdWVzdGlvbk11bHRpcGxlVGV4dE1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgY3NzQ2xhc3NlcyA9IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3NlcztcbiAgICB2YXIgdGFibGVSb3dzID0gdGhpcy5xdWVzdGlvbi5nZXRSb3dzKCk7XG4gICAgdmFyIHJvd3MgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRhYmxlUm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgcm93cy5wdXNoKHRoaXMucmVuZGVyUm93KGksIHRhYmxlUm93c1tpXSwgY3NzQ2xhc3NlcykpO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPHRhYmxlIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5yb290fT5cbiAgICAgICAgPHRib2R5Pntyb3dzfTwvdGJvZHk+XG4gICAgICA8L3RhYmxlPlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckl0ZW1Ub29sdGlwRXJyb3IoaXRlbTogTXVsdGlwbGVUZXh0SXRlbU1vZGVsLCBjc3NDbGFzc2VzOiBhbnkpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb24uaXNFcnJvcnNNb2RlVG9vbHRpcCA/IChcbiAgICAgIDxTdXJ2ZXlFbGVtZW50RXJyb3JzXG4gICAgICAgIGVsZW1lbnQ9e2l0ZW0uZWRpdG9yfVxuICAgICAgICBjc3NDbGFzc2VzPXtjc3NDbGFzc2VzfVxuICAgICAgICBjcmVhdG9yPXt0aGlzLmNyZWF0b3J9XG4gICAgICAgIGxvY2F0aW9uPXtcInRvb2x0aXBcIn1cbiAgICAgICAgaWQ9e2l0ZW0uZWRpdG9yLmlkICsgXCJfZXJyb3JzXCJ9XG4gICAgICAvPlxuICAgICk6IG51bGw7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlclJvdyhcbiAgICByb3dJbmRleDogbnVtYmVyLFxuICAgIGl0ZW1zOiBBcnJheTxNdWx0aXBsZVRleHRJdGVtTW9kZWw+LFxuICAgIGNzc0NsYXNzZXM6IGFueVxuICApIHtcbiAgICB2YXIga2V5OiBzdHJpbmcgPSBcIml0ZW1cIiArIHJvd0luZGV4O1xuICAgIHZhciB0ZHMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaXRlbSA9IGl0ZW1zW2ldO1xuICAgICAgdmFyIHNwYW5zID0gW107XG4gICAgICB0ZHMucHVzaChcbiAgICAgICAgPHRkIGtleT17XCJpdGVtXCIgKyBpfSBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jZWxsfT5cbiAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldEl0ZW1MYWJlbENzcyhpdGVtKX0+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuaXRlbVRpdGxlfT5cbiAgICAgICAgICAgICAgPFRpdGxlQ29udGVudCBlbGVtZW50PXtpdGVtLmVkaXRvcn0gY3NzQ2xhc3Nlcz17aXRlbS5lZGl0b3IuY3NzQ2xhc3Nlc30+PC9UaXRsZUNvbnRlbnQ+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8U3VydmV5TXVsdGlwbGVUZXh0SXRlbUVkaXRvclxuICAgICAgICAgICAgICBjc3NDbGFzc2VzPXtjc3NDbGFzc2VzfVxuICAgICAgICAgICAgICBpdGVtQ3NzPXt0aGlzLnF1ZXN0aW9uLmdldEl0ZW1Dc3MoKX1cbiAgICAgICAgICAgICAgcXVlc3Rpb249e2l0ZW0uZWRpdG9yfVxuICAgICAgICAgICAgICBjcmVhdG9yPXt0aGlzLmNyZWF0b3J9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAge3RoaXMucmVuZGVySXRlbVRvb2x0aXBFcnJvcihpdGVtLCBjc3NDbGFzc2VzKX1cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8L3RkPlxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDx0ciBrZXk9e2tleX0gY2xhc3NOYW1lPXtjc3NDbGFzc2VzLnJvd30+XG4gICAgICAgIHt0ZHN9XG4gICAgICA8L3RyPlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleU11bHRpcGxlVGV4dEl0ZW1FZGl0b3IgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkFuZEVycm9yc1dyYXBwZWQge1xuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXt0aGlzLml0ZW1Dc3N9Pnt0aGlzLnJlbmRlckNvbnRlbnQoKX08L2Rpdj47XG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcIm11bHRpcGxldGV4dFwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25NdWx0aXBsZVRleHQsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBTdXJ2ZXlNb2RlbCwgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5UGFuZWwgfSBmcm9tIFwiLi9wYW5lbFwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcbmltcG9ydCB7IFN2Z0ljb24gfSBmcm9tIFwiLi9jb21wb25lbnRzL3N2Zy1pY29uL3N2Zy1pY29uXCI7XG5pbXBvcnQgeyBTdXJ2ZXlBY3Rpb25CYXIgfSBmcm9tIFwiLi9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLWJhclwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNOZXh0QnV0dG9uIH0gZnJvbSBcIi4vY29tcG9uZW50cy9wYW5lbGR5bmFtaWMtYWN0aW9ucy9wYW5lbGR5bmFtaWMtbmV4dC1idG5cIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljUHJldkJ1dHRvbiB9IGZyb20gXCIuL2NvbXBvbmVudHMvcGFuZWxkeW5hbWljLWFjdGlvbnMvcGFuZWxkeW5hbWljLXByZXYtYnRuXCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dCB9IGZyb20gXCIuL2NvbXBvbmVudHMvcGFuZWxkeW5hbWljLWFjdGlvbnMvcGFuZWxkeW5hbWljLXByb2dyZXNzLXRleHRcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljQWRkQnV0dG9uIH0gZnJvbSBcIi4vY29tcG9uZW50cy9wYW5lbGR5bmFtaWMtYWN0aW9ucy9wYW5lbGR5bmFtaWMtYWRkLWJ0blwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWMgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IHBhbmVsQ291bnRlcjogMCB9KTtcbiAgICBjb25zdCBzZWxmOiBTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pYyA9IHRoaXM7XG4gICAgdGhpcy5xdWVzdGlvbi5wYW5lbENvdW50Q2hhbmdlZENhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgc2VsZi51cGRhdGVRdWVzdGlvblJlbmRlcmluZygpO1xuICAgIH07XG4gICAgdGhpcy5xdWVzdGlvbi5jdXJyZW50SW5kZXhDaGFuZ2VkQ2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBzZWxmLnVwZGF0ZVF1ZXN0aW9uUmVuZGVyaW5nKCk7XG4gICAgfTtcbiAgICB0aGlzLnF1ZXN0aW9uLnJlbmRlck1vZGVDaGFuZ2VkQ2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBzZWxmLnVwZGF0ZVF1ZXN0aW9uUmVuZGVyaW5nKCk7XG4gICAgfTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIHRoaXMucXVlc3Rpb24ucGFuZWxDb3VudENoYW5nZWRDYWxsYmFjayA9IG51bGw7XG4gICAgdGhpcy5xdWVzdGlvbi5jdXJyZW50SW5kZXhDaGFuZ2VkQ2FsbGJhY2sgPSBudWxsO1xuICAgIHRoaXMucXVlc3Rpb24ucmVuZGVyTW9kZUNoYW5nZWRDYWxsYmFjayA9IG51bGw7XG4gIH1cbiAgcHJpdmF0ZSB1cGRhdGVRdWVzdGlvblJlbmRlcmluZygpIHtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIHBhbmVsQ291bnRlcjogdGhpcy5zdGF0ZSA/IHRoaXMuc3RhdGUucGFuZWxDb3VudGVyICsgMSA6IDEsXG4gICAgfSk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHBhbmVscyA9IFtdO1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLmlzUmVuZGVyTW9kZUxpc3QpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5xdWVzdGlvbi5wYW5lbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgcGFuZWwgPSB0aGlzLnF1ZXN0aW9uLnBhbmVsc1tpXTtcbiAgICAgICAgcGFuZWxzLnB1c2goXG4gICAgICAgICAgPFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljSXRlbVxuICAgICAgICAgICAga2V5PXtwYW5lbC5pZH1cbiAgICAgICAgICAgIGVsZW1lbnQ9e3BhbmVsfVxuICAgICAgICAgICAgcXVlc3Rpb249e3RoaXMucXVlc3Rpb259XG4gICAgICAgICAgICBpbmRleD17aX1cbiAgICAgICAgICAgIGNzc0NsYXNzZXM9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlc31cbiAgICAgICAgICAgIGlzRGlzcGxheU1vZGU9e3RoaXMuaXNEaXNwbGF5TW9kZX1cbiAgICAgICAgICAgIGNyZWF0b3I9e3RoaXMuY3JlYXRvcn1cbiAgICAgICAgICAvPlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5xdWVzdGlvbi5jdXJyZW50UGFuZWwgIT0gbnVsbCkge1xuICAgICAgICBjb25zdCBwYW5lbCA9IHRoaXMucXVlc3Rpb24uY3VycmVudFBhbmVsO1xuICAgICAgICBwYW5lbHMucHVzaChcbiAgICAgICAgICA8U3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNJdGVtXG4gICAgICAgICAgICBrZXk9e3RoaXMucXVlc3Rpb24uY3VycmVudEluZGV4fVxuICAgICAgICAgICAgZWxlbWVudD17cGFuZWx9XG4gICAgICAgICAgICBxdWVzdGlvbj17dGhpcy5xdWVzdGlvbn1cbiAgICAgICAgICAgIGluZGV4PXt0aGlzLnF1ZXN0aW9uLmN1cnJlbnRJbmRleH1cbiAgICAgICAgICAgIGNzc0NsYXNzZXM9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlc31cbiAgICAgICAgICAgIGlzRGlzcGxheU1vZGU9e3RoaXMuaXNEaXNwbGF5TW9kZX1cbiAgICAgICAgICAgIGNyZWF0b3I9e3RoaXMuY3JlYXRvcn1cbiAgICAgICAgICAvPlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBidG5BZGQ6IEpTWC5FbGVtZW50ID0gdGhpcy5xdWVzdGlvbi5pc1JlbmRlck1vZGVMaXN0ICYmIHRoaXMucXVlc3Rpb25bXCJzaG93TGVnYWN5TmF2aWdhdGlvblwiXVxuICAgICAgPyB0aGlzLnJlbmRlckFkZFJvd0J1dHRvbigpXG4gICAgICA6IG51bGw7XG4gICAgY29uc3QgbmF2VG9wOiBKU1guRWxlbWVudCA9IHRoaXMucXVlc3Rpb24uaXNQcm9ncmVzc1RvcFNob3dpbmdcbiAgICAgID8gdGhpcy5yZW5kZXJOYXZpZ2F0b3IoKVxuICAgICAgOiBudWxsO1xuICAgIGNvbnN0IG5hdkJvdHRvbTogSlNYLkVsZW1lbnQgPSB0aGlzLnF1ZXN0aW9uLmlzUHJvZ3Jlc3NCb3R0b21TaG93aW5nXG4gICAgICA/IHRoaXMucmVuZGVyTmF2aWdhdG9yKClcbiAgICAgIDogbnVsbDtcblxuICAgIGNvbnN0IHN0eWxlOiBhbnkgPSB7fTtcbiAgICBjb25zdCBuYXZWMiA9IHRoaXMucmVuZGVyTmF2aWdhdG9yVjIoKTtcbiAgICBjb25zdCBub0VudHJpZXNQbGFjZWhvbGRlciA9IHRoaXMucmVuZGVyUGxhY2Vob2xkZXIoKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yb290fT5cbiAgICAgICAge25vRW50cmllc1BsYWNlaG9sZGVyfVxuICAgICAgICB7bmF2VG9wfVxuICAgICAgICB7cGFuZWxzfVxuICAgICAgICB7bmF2Qm90dG9tfVxuICAgICAgICB7YnRuQWRkfVxuICAgICAgICB7bmF2VjJ9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJOYXZpZ2F0b3IoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmKCF0aGlzLnF1ZXN0aW9uW1wic2hvd0xlZ2FjeU5hdmlnYXRpb25cIl0pIHtcbiAgICAgIGlmKHRoaXMucXVlc3Rpb24uaXNSYW5nZVNob3dpbmcgJiYgdGhpcy5xdWVzdGlvbi5pc1Byb2dyZXNzVG9wU2hvd2luZykge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJSYW5nZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHJhbmdlOiBKU1guRWxlbWVudCA9IHRoaXMucXVlc3Rpb24uaXNSYW5nZVNob3dpbmcgPyB0aGlzLnJlbmRlclJhbmdlKCkgOiBudWxsO1xuICAgIGNvbnN0IGJ0blByZXY6IEpTWC5FbGVtZW50ID0gdGhpcy5yZW5kcmVyUHJldkJ1dHRvbigpO1xuICAgIGNvbnN0IGJ0bk5leHQ6IEpTWC5FbGVtZW50ID0gdGhpcy5yZW5kcmVyTmV4dEJ1dHRvbigpO1xuICAgIGNvbnN0IGJ0bkFkZDogSlNYLkVsZW1lbnQgPSB0aGlzLnJlbmRlckFkZFJvd0J1dHRvbigpO1xuICAgIGNvbnN0IHByb2dyZXNzQ2xhc3M6IHN0cmluZyA9IHRoaXMucXVlc3Rpb24uaXNQcm9ncmVzc1RvcFNob3dpbmdcbiAgICAgID8gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnByb2dyZXNzVG9wXG4gICAgICA6IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5wcm9ncmVzc0JvdHRvbTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3Byb2dyZXNzQ2xhc3N9PlxuICAgICAgICA8ZGl2IHN0eWxlPXt7IGNsZWFyOiBcImJvdGhcIiB9fT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnByb2dyZXNzQ29udGFpbmVyfT5cbiAgICAgICAgICAgIHtidG5QcmV2fVxuICAgICAgICAgICAge3JhbmdlfVxuICAgICAgICAgICAge2J0bk5leHR9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAge2J0bkFkZH1cbiAgICAgICAgICB7dGhpcy5yZW5kZXJQcm9ncmVzc1RleHQoKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByaXZhdGUgcmVuZGVyUHJvZ3Jlc3NUZXh0KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0IGRhdGE9eyB7IHF1ZXN0aW9uOiB0aGlzLnF1ZXN0aW9uIH19PjwvU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ+XG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZW5kcmVyUHJldkJ1dHRvbigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljUHJldkJ1dHRvbiBkYXRhPXsgeyBxdWVzdGlvbjogdGhpcy5xdWVzdGlvbiB9fT48L1N1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljUHJldkJ1dHRvbj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kcmVyTmV4dEJ1dHRvbigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljTmV4dEJ1dHRvbiBkYXRhPXsgeyBxdWVzdGlvbjogdGhpcy5xdWVzdGlvbiB9fT48L1N1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljTmV4dEJ1dHRvbj5cbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlbmRlclJhbmdlKCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5wcm9ncmVzc30+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5wcm9ncmVzc0Jhcn1cbiAgICAgICAgICBzdHlsZT17eyB3aWR0aDogdGhpcy5xdWVzdGlvbi5wcm9ncmVzcyB9fVxuICAgICAgICAgIHJvbGU9XCJwcm9ncmVzc2JhclwiXG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJBZGRSb3dCdXR0b24oKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8U3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNBZGRCdXR0b24gZGF0YT17IHsgcXVlc3Rpb246IHRoaXMucXVlc3Rpb24gfX0+PC9TdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY0FkZEJ1dHRvbj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJOYXZpZ2F0b3JWMigpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKHRoaXMucXVlc3Rpb24ucGFuZWxDb3VudCA9PT0gMCB8fCB0aGlzLnF1ZXN0aW9uW1wic2hvd0xlZ2FjeU5hdmlnYXRpb25cIl0pIHJldHVybiBudWxsO1xuICAgIGNvbnN0IHJhbmdlOiBKU1guRWxlbWVudCA9IHRoaXMucXVlc3Rpb24uaXNSYW5nZVNob3dpbmcgJiYgIXRoaXMucXVlc3Rpb24uaXNQcm9ncmVzc1RvcFNob3dpbmcgPyB0aGlzLnJlbmRlclJhbmdlKCkgOiBudWxsO1xuICAgIGlmICghdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmZvb3Rlcikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiAoPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5mb290ZXJ9PlxuICAgICAgPGhyIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnNlcGFyYXRvcn0gLz5cbiAgICAgIHtyYW5nZX1cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuZm9vdGVyQnV0dG9uc0NvbnRhaW5lcn0+XG4gICAgICAgIDxTdXJ2ZXlBY3Rpb25CYXIgbW9kZWw9e3RoaXMucXVlc3Rpb24uZm9vdGVyVG9vbGJhcn0+PC9TdXJ2ZXlBY3Rpb25CYXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj4pO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJQbGFjZWhvbGRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKHRoaXMucXVlc3Rpb24uZ2V0U2hvd05vRW50cmllc1BsYWNlaG9sZGVyKCkpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMubm9FbnRyaWVzUGxhY2Vob2xkZXJ9PlxuICAgICAgICAgIDxzcGFuPnt0aGlzLnJlbmRlckxvY1N0cmluZyh0aGlzLnF1ZXN0aW9uLmxvY05vRW50cmllc1RleHQpfTwvc3Bhbj5cbiAgICAgICAgICB7dGhpcy5yZW5kZXJBZGRSb3dCdXR0b24oKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNJdGVtIGV4dGVuZHMgU3VydmV5UGFuZWwge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuaGFuZGxlT25QYW5lbFJlbW92ZUNsaWNrID0gdGhpcy5oYW5kbGVPblBhbmVsUmVtb3ZlQ2xpY2suYmluZCh0aGlzKTtcbiAgfVxuICBwcml2YXRlIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5xdWVzdGlvbjtcbiAgfVxuICBwcml2YXRlIGdldCBpbmRleCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmluZGV4O1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdXJ2ZXkoKTogU3VydmV5TW9kZWwge1xuICAgIHJldHVybiAhIXRoaXMucXVlc3Rpb24gPyAodGhpcy5xdWVzdGlvbi5zdXJ2ZXkgYXMgU3VydmV5TW9kZWwpIDogbnVsbDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Q3NzKCk6IGFueSB7XG4gICAgY29uc3Qgc3VydmV5ID0gdGhpcy5nZXRTdXJ2ZXkoKTtcbiAgICByZXR1cm4gISFzdXJ2ZXkgPyBzdXJ2ZXkuZ2V0Q3NzKCkgOiB7fTtcbiAgfVxuICBoYW5kbGVPblBhbmVsUmVtb3ZlQ2xpY2soZXZlbnQ6IGFueSkge1xuICAgIHRoaXMucXVlc3Rpb24ucmVtb3ZlUGFuZWxVSSh0aGlzLmluZGV4KTtcbiAgfVxuICBwdWJsaWMgcmVuZGVyKCkge1xuICAgIGNvbnN0IHBhbmVsOiBKU1guRWxlbWVudCA9IHN1cGVyLnJlbmRlcigpO1xuICAgIGNvbnN0IHJlbW92ZUJ1dHRvbjogSlNYLkVsZW1lbnQgPSB0aGlzLnJlbmRlckJ1dHRvbigpO1xuICAgIGNvbnN0IHNlcGFyYXRvcjogSlNYLkVsZW1lbnQgPSB0aGlzLnF1ZXN0aW9uLmlzUmVuZGVyTW9kZUxpc3QgJiYgdGhpcy5pbmRleCA8IHRoaXMucXVlc3Rpb24ucGFuZWxDb3VudCAtIDEgP1xuICAgICAgKDxociBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5zZXBhcmF0b3J9IC8+KSA6IG51bGw7XG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldFBhbmVsV3JhcHBlckNzcygpfT5cbiAgICAgICAgICB7cGFuZWx9XG4gICAgICAgICAge3JlbW92ZUJ1dHRvbn1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHtzZXBhcmF0b3J9XG4gICAgICA8Lz5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJCdXR0b24oKTogSlNYLkVsZW1lbnQge1xuICAgIGlmIChcbiAgICAgICF0aGlzLnF1ZXN0aW9uLmNhblJlbW92ZVBhbmVsIHx8XG4gICAgICAodGhpcy5xdWVzdGlvbi5pc1JlbmRlck1vZGVMaXN0ICYmIHRoaXMucGFuZWwuaXNDb2xsYXBzZWQpXG4gICAgKVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIChcbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldFBhbmVsUmVtb3ZlQnV0dG9uQ3NzKCl9XG4gICAgICAgIG9uQ2xpY2s9e3RoaXMuaGFuZGxlT25QYW5lbFJlbW92ZUNsaWNrfVxuICAgICAgICB0eXBlPVwiYnV0dG9uXCI+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuYnV0dG9uUmVtb3ZlVGV4dH1cbiAgICAgICAgPnt0aGlzLnF1ZXN0aW9uLnBhbmVsUmVtb3ZlVGV4dH08L3NwYW4+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaWNvblJlbW92ZX1cbiAgICAgICAgPjwvc3Bhbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcInBhbmVsZHluYW1pY1wiLCBwcm9wcyA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSwgUmVhY3RTdXJ2ZXlFbGVtZW50IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBRdWVzdGlvblJhZGlvZ3JvdXBNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgSXRlbVZhbHVlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkNvbW1lbnRJdGVtIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9jb21tZW50XCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuaW1wb3J0IHsgQmFzZSwgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0U3VydmV5RWxlbWVudHNXcmFwcGVyIH0gZnJvbSBcIi4vcmVhY3RzdXJ2ZXltb2RlbFwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuL2VsZW1lbnQtZmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25SYWRpb2dyb3VwIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvblJhZGlvZ3JvdXBNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFF1ZXN0aW9uUmFkaW9ncm91cE1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgY3NzQ2xhc3NlcyA9IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3NlcztcbiAgICB2YXIgY2xlYXJCdXR0b24gPSBudWxsO1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLmNhblNob3dDbGVhckJ1dHRvbikge1xuICAgICAgY2xlYXJCdXR0b24gPSAoXG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmNsZWFyQnV0dG9ufVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gdGhpcy5xdWVzdGlvbi5jbGVhclZhbHVlKCl9XG4gICAgICAgICAgICB2YWx1ZT17dGhpcy5xdWVzdGlvbi5jbGVhckJ1dHRvbkNhcHRpb259XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPGZpZWxkc2V0XG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRTZWxlY3RCYXNlUm9vdENzcygpfVxuICAgICAgICByb2xlPVwicHJlc2VudGF0aW9uXCJcbiAgICAgICAgcmVmPXsoZmllbGRzZXQpID0+ICh0aGlzLmNvbnRyb2wgPSBmaWVsZHNldCl9XG4gICAgICA+XG4gICAgICAgIHt0aGlzLnF1ZXN0aW9uLmhhc0NvbHVtbnNcbiAgICAgICAgICA/IHRoaXMuZ2V0Q29sdW1ucyhjc3NDbGFzc2VzKVxuICAgICAgICAgIDogdGhpcy5nZXRJdGVtcyhjc3NDbGFzc2VzKX1cbiAgICAgICAge2NsZWFyQnV0dG9ufVxuICAgICAgPC9maWVsZHNldD5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBnZXRDb2x1bW5zKGNzc0NsYXNzZXM6IGFueSkge1xuICAgIHZhciB2YWx1ZSA9IHRoaXMuZ2V0U3RhdGVWYWx1ZSgpO1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLmNvbHVtbnMubWFwKChjb2x1bW46IGFueSwgY2k6IG51bWJlcikgPT4ge1xuICAgICAgdmFyIGl0ZW1zID0gY29sdW1uLm1hcCgoaXRlbTogYW55LCBpaTogbnVtYmVyKSA9PlxuICAgICAgICB0aGlzLnJlbmRlckl0ZW0oaXRlbSwgdmFsdWUsIGNzc0NsYXNzZXMsIFwiXCIgKyBjaSArIGlpKVxuICAgICAgKTtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxkaXYga2V5PXtcImNvbHVtblwiICsgY2l9IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRDb2x1bW5DbGFzcygpfSByb2xlPVwicHJlc2VudGF0aW9uXCI+XG4gICAgICAgICAge2l0ZW1zfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICk7XG4gICAgfSk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldEl0ZW1zKGNzc0NsYXNzZXM6IGFueSk6IEFycmF5PGFueT4ge1xuICAgIHZhciBpdGVtcyA9IFtdO1xuICAgIHZhciB2YWx1ZSA9IHRoaXMuZ2V0U3RhdGVWYWx1ZSgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5xdWVzdGlvbi52aXNpYmxlQ2hvaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGl0ZW0gPSB0aGlzLnF1ZXN0aW9uLnZpc2libGVDaG9pY2VzW2ldO1xuICAgICAgdmFyIHJlbmRlcmVkSXRlbSA9IHRoaXMucmVuZGVySXRlbShpdGVtLCB2YWx1ZSwgY3NzQ2xhc3NlcywgXCJcIiArIGkpO1xuICAgICAgaXRlbXMucHVzaChyZW5kZXJlZEl0ZW0pO1xuICAgIH1cbiAgICByZXR1cm4gaXRlbXM7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCB0ZXh0U3R5bGUoKTogYW55IHtcbiAgICByZXR1cm4gbnVsbDsvL3sgZGlzcGxheTogXCJpbmxpbmVcIiwgcG9zaXRpb246IFwic3RhdGljXCIgfTtcbiAgfVxuICBwcml2YXRlIHJlbmRlckl0ZW0oXG4gICAgaXRlbTogSXRlbVZhbHVlLFxuICAgIHZhbHVlOiBhbnksXG4gICAgY3NzQ2xhc3NlczogYW55LFxuICAgIGluZGV4OiBzdHJpbmdcbiAgKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBrZXkgPSBcIml0ZW1cIiArIGluZGV4O1xuICAgIGNvbnN0IHJlbmRlcmVkSXRlbSA9IChcbiAgICAgIDxTdXJ2ZXlRdWVzdGlvblJhZGlvSXRlbVxuICAgICAgICBrZXk9e2tleX1cbiAgICAgICAgcXVlc3Rpb249e3RoaXMucXVlc3Rpb259XG4gICAgICAgIGNzc0NsYXNzZXM9e2Nzc0NsYXNzZXN9XG4gICAgICAgIGlzRGlzcGxheU1vZGU9e3RoaXMuaXNEaXNwbGF5TW9kZX1cbiAgICAgICAgaXRlbT17aXRlbX1cbiAgICAgICAgdGV4dFN0eWxlPXt0aGlzLnRleHRTdHlsZX1cbiAgICAgICAgaW5kZXg9e2luZGV4fVxuICAgICAgICBpc0NoZWNrZWQ9e3ZhbHVlID09PSBpdGVtLnZhbHVlfVxuICAgICAgLz5cbiAgICApO1xuICAgIGNvbnN0IHN1cnZleSA9IHRoaXMucXVlc3Rpb24uc3VydmV5IGFzIFN1cnZleU1vZGVsO1xuICAgIGxldCB3cmFwcGVkSXRlbSA9IG51bGw7XG4gICAgaWYgKCEhc3VydmV5KSB7XG4gICAgICB3cmFwcGVkSXRlbSA9IFJlYWN0U3VydmV5RWxlbWVudHNXcmFwcGVyLndyYXBJdGVtVmFsdWUoc3VydmV5LCByZW5kZXJlZEl0ZW0sIHRoaXMucXVlc3Rpb24sIGl0ZW0pO1xuICAgIH1cbiAgICByZXR1cm4gd3JhcHBlZEl0ZW0gPz8gcmVuZGVyZWRJdGVtO1xuICB9XG4gIHByaXZhdGUgZ2V0U3RhdGVWYWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiAhdGhpcy5xdWVzdGlvbi5pc0VtcHR5KCkgPyB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkVmFsdWUgOiBcIlwiO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvblJhZGlvSXRlbSBleHRlbmRzIFJlYWN0U3VydmV5RWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5oYW5kbGVPbkNoYW5nZSA9IHRoaXMuaGFuZGxlT25DaGFuZ2UuYmluZCh0aGlzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLml0ZW07XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvblJhZGlvZ3JvdXBNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMucXVlc3Rpb247XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBpdGVtKCk6IEl0ZW1WYWx1ZSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHRleHRTdHlsZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnRleHRTdHlsZTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGluZGV4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaW5kZXg7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBpc0NoZWNrZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXNDaGVja2VkO1xuICB9XG4gIHByaXZhdGUgZ2V0IGhpZGVDYXB0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmhpZGVDYXB0aW9uID09PSB0cnVlO1xuICB9XG4gIHB1YmxpYyBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzOiBhbnksIG5leHRTdGF0ZTogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKCFzdXBlci5zaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzLCBuZXh0U3RhdGUpKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIChcbiAgICAgICF0aGlzLnF1ZXN0aW9uLmN1c3RvbVdpZGdldCB8fFxuICAgICAgISF0aGlzLnF1ZXN0aW9uLmN1c3RvbVdpZGdldERhdGEuaXNOZWVkUmVuZGVyIHx8XG4gICAgICAhIXRoaXMucXVlc3Rpb24uY3VzdG9tV2lkZ2V0LndpZGdldEpzb24uaXNEZWZhdWx0UmVuZGVyIHx8XG4gICAgICAhIXRoaXMucXVlc3Rpb24uY3VzdG9tV2lkZ2V0LndpZGdldEpzb24ucmVuZGVyXG4gICAgKTtcbiAgfVxuICBoYW5kbGVPbkNoYW5nZShldmVudDogYW55KSB7XG4gICAgdGhpcy5xdWVzdGlvbi5yZW5kZXJlZFZhbHVlID0gdGhpcy5pdGVtLnZhbHVlO1xuICB9XG4gIHByb3RlY3RlZCBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5xdWVzdGlvbiAmJiAhIXRoaXMuaXRlbTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIG90aGVySXRlbSA9XG4gICAgICB0aGlzLnF1ZXN0aW9uLmlzT3RoZXJJdGVtKHRoaXMuaXRlbSkgJiYgdGhpcy5xdWVzdGlvbi5pc090aGVyU2VsZWN0ZWRcbiAgICAgICAgPyB0aGlzLnJlbmRlck90aGVyKHRoaXMuY3NzQ2xhc3NlcylcbiAgICAgICAgOiBudWxsO1xuXG4gICAgdmFyIGl0ZW1UZXh0ID0gIXRoaXMuaGlkZUNhcHRpb25cbiAgICAgID8gdGhpcy5yZW5kZXJMb2NTdHJpbmcodGhpcy5pdGVtLmxvY1RleHQsIHRoaXMudGV4dFN0eWxlKVxuICAgICAgOiBcIlwiO1xuICAgIHZhciBpdGVtQ2xhc3MgPSB0aGlzLnF1ZXN0aW9uLmdldEl0ZW1DbGFzcyh0aGlzLml0ZW0pO1xuICAgIHZhciBsYWJlbENsYXNzID0gdGhpcy5xdWVzdGlvbi5nZXRMYWJlbENsYXNzKHRoaXMuaXRlbSk7XG4gICAgdmFyIGxvY1RleHQ6IGFueSA9IHRoaXMuaXRlbS5sb2NUZXh0O1xuICAgIHZhciBjb250cm9sTGFiZWxDbGFzcyA9IHRoaXMucXVlc3Rpb24uZ2V0Q29udHJvbExhYmVsQ2xhc3ModGhpcy5pdGVtKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17aXRlbUNsYXNzfVxuICAgICAgICByb2xlPVwicHJlc2VudGF0aW9uXCJcbiAgICAgID5cbiAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT17bGFiZWxDbGFzc30gYXJpYS1sYWJlbD17dGhpcy5xdWVzdGlvbi5nZXRBcmlhSXRlbUxhYmVsKHRoaXMuaXRlbSl9PlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgYXJpYS1kZXNjcmliZWRieT17dGhpcy5xdWVzdGlvbi5hcmlhRGVzY3JpYmVkQnl9XG4gICAgICAgICAgICBjbGFzc05hbWU9e3RoaXMuY3NzQ2xhc3Nlcy5pdGVtQ29udHJvbH1cbiAgICAgICAgICAgIGlkPXt0aGlzLnF1ZXN0aW9uLmdldEl0ZW1JZCh0aGlzLml0ZW0pfVxuICAgICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICAgIG5hbWU9e3RoaXMucXVlc3Rpb24ucXVlc3Rpb25OYW1lfVxuICAgICAgICAgICAgY2hlY2tlZD17dGhpcy5pc0NoZWNrZWR9XG4gICAgICAgICAgICB2YWx1ZT17dGhpcy5pdGVtLnZhbHVlfVxuICAgICAgICAgICAgZGlzYWJsZWQ9eyF0aGlzLnF1ZXN0aW9uLmdldEl0ZW1FbmFibGVkKHRoaXMuaXRlbSl9XG4gICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVPbkNoYW5nZX1cbiAgICAgICAgICAvPlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3NzQ2xhc3Nlcy5tYXRlcmlhbERlY29yYXRvciA/XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17dGhpcy5jc3NDbGFzc2VzLm1hdGVyaWFsRGVjb3JhdG9yfT5cbiAgICAgICAgICAgICAgICB7dGhpcy5xdWVzdGlvbi5pdGVtU3ZnSWNvbiA/XG4gICAgICAgICAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5jc3NDbGFzc2VzLml0ZW1EZWNvcmF0b3J9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDx1c2UgeGxpbmtIcmVmPXt0aGlzLnF1ZXN0aW9uLml0ZW1TdmdJY29ufT48L3VzZT5cbiAgICAgICAgICAgICAgICAgIDwvc3ZnPiA6XG4gICAgICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L3NwYW4+IDpcbiAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgIH1cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2NvbnRyb2xMYWJlbENsYXNzfT5cbiAgICAgICAgICAgIHtpdGVtVGV4dH1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICAgIHtvdGhlckl0ZW19XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJPdGhlcihjc3NDbGFzc2VzOiBhbnkpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICA8U3VydmV5UXVlc3Rpb25Db21tZW50SXRlbVxuICAgICAgICAgIHF1ZXN0aW9uPXt0aGlzLnF1ZXN0aW9ufVxuICAgICAgICAgIG90aGVyQ3NzPXtjc3NDbGFzc2VzLm90aGVyfVxuICAgICAgICAgIGNzc0NsYXNzZXM9e2Nzc0NsYXNzZXN9XG4gICAgICAgICAgaXNEaXNwbGF5TW9kZT17dGhpcy5pc0Rpc3BsYXlNb2RlfVxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN1cnZleS1yYWRpb2dyb3VwLWl0ZW1cIiwgKHByb3BzOiBhbnkpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25SYWRpb0l0ZW0sIHByb3BzKTtcbn0pO1xuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwicmFkaW9ncm91cFwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25SYWRpb2dyb3VwLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtcbiAgUmVhY3RTdXJ2ZXlFbGVtZW50LFxuICBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlLFxufSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFF1ZXN0aW9uUmFua2luZ01vZGVsLCBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcbmltcG9ydCB7IFJlYWN0U3VydmV5RWxlbWVudHNXcmFwcGVyIH0gZnJvbSBcIi4vcmVhY3RzdXJ2ZXltb2RlbFwiO1xuaW1wb3J0IHsgSXRlbVZhbHVlIH0gZnJvbSBcIi4uL2l0ZW12YWx1ZVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25SYW5raW5nIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25SYW5raW5nTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBRdWVzdGlvblJhbmtpbmdNb2RlbDtcbiAgfVxuXG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24ucm9vdENsYXNzfVxuICAgICAgICByZWY9eyhyb290KSA9PiAodGhpcy5jb250cm9sID0gcm9vdCl9XG4gICAgICA+XG4gICAgICAgIHt0aGlzLmdldEl0ZW1zKCl9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldEl0ZW1zKCk6IEFycmF5PGFueT4ge1xuICAgIGNvbnN0IGl0ZW1zID0gW107XG4gICAgY29uc3QgcmFua2luZ0Nob2ljZXMgPSB0aGlzLnF1ZXN0aW9uLnJhbmtpbmdDaG9pY2VzO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmFua2luZ0Nob2ljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSByYW5raW5nQ2hvaWNlc1tpXTtcbiAgICAgIGl0ZW1zLnB1c2goXG4gICAgICAgIHRoaXMucmVuZGVySXRlbShcbiAgICAgICAgICBpdGVtLFxuICAgICAgICAgIGksXG4gICAgICAgICAgKGV2ZW50OiBQb2ludGVyRXZlbnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb24uaGFuZGxlS2V5ZG93bi5jYWxsKHRoaXMucXVlc3Rpb24sIGV2ZW50LCBpdGVtKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIChldmVudDogYW55KSA9PiB7XG4gICAgICAgICAgICBldmVudC5wZXJzaXN0KCk7XG4gICAgICAgICAgICAvL2V2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uLmhhbmRsZVBvaW50ZXJEb3duLmNhbGwoXG4gICAgICAgICAgICAgIHRoaXMucXVlc3Rpb24sXG4gICAgICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICBldmVudC5jdXJyZW50VGFyZ2V0XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLFxuICAgICAgICAgIHRoaXMucXVlc3Rpb24uZ2V0SXRlbUNsYXNzKGl0ZW0pLFxuICAgICAgICAgIHRoaXMucXVlc3Rpb25cbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGl0ZW1zO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlbmRlckl0ZW0oXG4gICAgaXRlbTogSXRlbVZhbHVlLFxuICAgIGk6IG51bWJlcixcbiAgICBoYW5kbGVLZXlkb3duOiAoZXZlbnQ6IGFueSkgPT4gdm9pZCxcbiAgICBoYW5kbGVQb2ludGVyRG93bjogKGV2ZW50OiBQb2ludGVyRXZlbnQpID0+IHZvaWQsXG4gICAgY3NzQ2xhc3NlczogYW55LFxuICAgIGl0ZW1DbGFzczogc3RyaW5nLFxuICAgIHF1ZXN0aW9uOiBRdWVzdGlvblJhbmtpbmdNb2RlbFxuICApOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3Qga2V5OiBzdHJpbmcgPSBpdGVtLnZhbHVlICsgXCItXCIgKyBpICsgXCItaXRlbVwiO1xuICAgIGNvbnN0IHRleHQ6IEpTWC5FbGVtZW50ID0gdGhpcy5yZW5kZXJMb2NTdHJpbmcoaXRlbS5sb2NUZXh0KTtcbiAgICBjb25zdCBpbmRleCA9IGk7XG4gICAgY29uc3QgaW5kZXhUZXh0OiBzdHJpbmcgPSB0aGlzLnF1ZXN0aW9uLmdldE51bWJlckJ5SW5kZXgoaSk7XG4gICAgY29uc3QgcmVuZGVyZWRJdGVtID0gKFxuICAgICAgPFN1cnZleVF1ZXN0aW9uUmFua2luZ0l0ZW1cbiAgICAgICAga2V5PXtrZXl9XG4gICAgICAgIHRleHQ9e3RleHR9XG4gICAgICAgIGluZGV4PXtpbmRleH1cbiAgICAgICAgaW5kZXhUZXh0PXtpbmRleFRleHR9XG4gICAgICAgIGhhbmRsZUtleWRvd249e2hhbmRsZUtleWRvd259XG4gICAgICAgIGhhbmRsZVBvaW50ZXJEb3duPXtoYW5kbGVQb2ludGVyRG93bn1cbiAgICAgICAgY3NzQ2xhc3Nlcz17Y3NzQ2xhc3Nlc31cbiAgICAgICAgaXRlbUNsYXNzPXtpdGVtQ2xhc3N9XG4gICAgICAgIHF1ZXN0aW9uPXtxdWVzdGlvbn1cbiAgICAgIC8+XG4gICAgKTtcbiAgICBjb25zdCBzdXJ2ZXkgPSB0aGlzLnF1ZXN0aW9uLnN1cnZleSBhcyBTdXJ2ZXlNb2RlbDtcbiAgICBsZXQgd3JhcHBlZEl0ZW0gPSBudWxsO1xuICAgIGlmICghIXN1cnZleSkge1xuICAgICAgd3JhcHBlZEl0ZW0gPSBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlci53cmFwSXRlbVZhbHVlKHN1cnZleSwgcmVuZGVyZWRJdGVtLCB0aGlzLnF1ZXN0aW9uLCBpdGVtKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyYXBwZWRJdGVtID8/IHJlbmRlcmVkSXRlbTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25SYW5raW5nSXRlbSBleHRlbmRzIFJlYWN0U3VydmV5RWxlbWVudCB7XG4gIHByb3RlY3RlZCBnZXQgdGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnRleHQ7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBpbmRleCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmluZGV4O1xuICB9XG4gIHByb3RlY3RlZCBnZXQgaW5kZXhUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaW5kZXhUZXh0O1xuICB9XG4gIHByb3RlY3RlZCBnZXQgaGFuZGxlS2V5ZG93bigpOiAoZXZlbnQ6IGFueSkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaGFuZGxlS2V5ZG93bjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGhhbmRsZVBvaW50ZXJEb3duKCk6IChldmVudDogYW55KSA9PiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5oYW5kbGVQb2ludGVyRG93bjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGNzc0NsYXNzZXMoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jc3NDbGFzc2VzO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgaXRlbUNsYXNzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbUNsYXNzO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5xdWVzdGlvbjtcbiAgfVxuXG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICB0YWJJbmRleD17MH1cbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLml0ZW1DbGFzc31cbiAgICAgICAgb25LZXlEb3duPXt0aGlzLmhhbmRsZUtleWRvd259XG4gICAgICAgIG9uUG9pbnRlckRvd249e3RoaXMuaGFuZGxlUG9pbnRlckRvd259XG4gICAgICAgIGRhdGEtc3YtZHJvcC10YXJnZXQtcmFua2luZy1pdGVtPXt0aGlzLmluZGV4fVxuICAgICAgPlxuICAgICAgICA8ZGl2IHRhYkluZGV4PXstMX0gc3R5bGU9e3sgb3V0bGluZTogXCJub25lXCIgfX0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMuY3NzQ2xhc3Nlcy5pdGVtR2hvc3ROb2RlfSAvPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLmNzc0NsYXNzZXMuaXRlbUNvbnRlbnR9PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMuY3NzQ2xhc3Nlcy5pdGVtSWNvbkNvbnRhaW5lcn0+XG4gICAgICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgICAgICB3aWR0aD1cIjEwXCJcbiAgICAgICAgICAgICAgICBoZWlnaHQ9XCIxNlwiXG4gICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxMCAxNlwiXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldEljb25Ib3ZlckNzcygpfVxuICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk02IDJDNiAwLjkgNi45IDAgOCAwQzkuMSAwIDEwIDAuOSAxMCAyQzEwIDMuMSA5LjEgNCA4IDRDNi45IDQgNiAzLjEgNiAyWk0yIDBDMC45IDAgMCAwLjkgMCAyQzAgMy4xIDAuOSA0IDIgNEMzLjEgNCA0IDMuMSA0IDJDNCAwLjkgMy4xIDAgMiAwWk04IDZDNi45IDYgNiA2LjkgNiA4QzYgOS4xIDYuOSAxMCA4IDEwQzkuMSAxMCAxMCA5LjEgMTAgOEMxMCA2LjkgOS4xIDYgOCA2Wk0yIDZDMC45IDYgMCA2LjkgMCA4QzAgOS4xIDAuOSAxMCAyIDEwQzMuMSAxMCA0IDkuMSA0IDhDNCA2LjkgMy4xIDYgMiA2Wk04IDEyQzYuOSAxMiA2IDEyLjkgNiAxNEM2IDE1LjEgNi45IDE2IDggMTZDOS4xIDE2IDEwIDE1LjEgMTAgMTRDMTAgMTIuOSA5LjEgMTIgOCAxMlpNMiAxMkMwLjkgMTIgMCAxMi45IDAgMTRDMCAxNS4xIDAuOSAxNiAyIDE2QzMuMSAxNiA0IDE1LjEgNCAxNEM0IDEyLjkgMy4xIDEyIDIgMTJaXCIgLz5cbiAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgICAgICB3aWR0aD1cIjEwXCJcbiAgICAgICAgICAgICAgICBoZWlnaHQ9XCIyNFwiXG4gICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxMCAyNFwiXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldEljb25Gb2N1c0NzcygpfVxuICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMCA1TDUgMEwwIDVINFY5SDZWNUgxMFpcIiAvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNiAxOVYxNUg0VjE5SDBMNSAyNEwxMCAxOUg2WlwiIC8+XG4gICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLmNzc0NsYXNzZXMuaXRlbUluZGV4fT57dGhpcy5pbmRleFRleHR9PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5jc3NDbGFzc2VzLmNvbnRyb2xMYWJlbH0+e3RoaXMudGV4dH08L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJyYW5raW5nXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvblJhbmtpbmcsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkNvbW1lbnRJdGVtIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9jb21tZW50XCI7XG5pbXBvcnQgeyBRdWVzdGlvblJhdGluZ01vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZW5kZXJlZFJhdGluZ0l0ZW0gfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvblJhdGluZyBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Uge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuaGFuZGxlT25DbGljayA9IHRoaXMuaGFuZGxlT25DbGljay5iaW5kKHRoaXMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25SYXRpbmdNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFF1ZXN0aW9uUmF0aW5nTW9kZWw7XG4gIH1cbiAgaGFuZGxlT25DbGljayhldmVudDogYW55KSB7XG4gICAgdGhpcy5xdWVzdGlvbi5zZXRWYWx1ZUZyb21DbGljayhldmVudC50YXJnZXQudmFsdWUpO1xuICAgIHRoaXMuc2V0U3RhdGUoeyB2YWx1ZTogdGhpcy5xdWVzdGlvbi52YWx1ZSB9KTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGNzc0NsYXNzZXMgPSB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgdmFyIG1pblRleHQgPSB0aGlzLnF1ZXN0aW9uLm1pblJhdGVEZXNjcmlwdGlvblxuICAgICAgPyB0aGlzLnJlbmRlckxvY1N0cmluZyh0aGlzLnF1ZXN0aW9uLmxvY01pblJhdGVEZXNjcmlwdGlvbilcbiAgICAgIDogbnVsbDtcbiAgICB2YXIgbWF4VGV4dCA9IHRoaXMucXVlc3Rpb24ubWF4UmF0ZURlc2NyaXB0aW9uXG4gICAgICA/IHRoaXMucmVuZGVyTG9jU3RyaW5nKHRoaXMucXVlc3Rpb24ubG9jTWF4UmF0ZURlc2NyaXB0aW9uKVxuICAgICAgOiBudWxsO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5yYXRpbmdSb290Q3NzfSByZWY9eyhkaXYpID0+ICh0aGlzLmNvbnRyb2wgPSBkaXYpfT5cbiAgICAgICAgPGZpZWxkc2V0IHJvbGU9XCJyYWRpb2dyb3VwXCI+XG4gICAgICAgICAgPGxlZ2VuZCByb2xlPVwicHJlc2VudGF0aW9uXCIgY2xhc3NOYW1lPXtcInN2LWhpZGRlblwifT48L2xlZ2VuZD5cbiAgICAgICAgICB7ISF0aGlzLnF1ZXN0aW9uLmhhc01pbkxhYmVsID8gPHNwYW4gY2xhc3NOYW1lPXtjc3NDbGFzc2VzLm1pblRleHR9PnttaW5UZXh0fTwvc3Bhbj46IG51bGx9XG4gICAgICAgICAge3RoaXMucXVlc3Rpb24ucmVuZGVyZWRSYXRlSXRlbXMubWFwKChpdGVtLCBpKSA9PiB0aGlzLnJlbmRlckl0ZW0oXCJ2YWx1ZVwiICsgaSwgaXRlbSwgaSwgY3NzQ2xhc3NlcykpfVxuICAgICAgICAgIHshIXRoaXMucXVlc3Rpb24uaGFzTWF4TGFiZWwgPyA8c3BhbiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMubWF4VGV4dH0+e21heFRleHR9PC9zcGFuPjogbnVsbH1cbiAgICAgICAgPC9maWVsZHNldD5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckl0ZW0oXG4gICAga2V5OiBzdHJpbmcsXG4gICAgaXRlbTogUmVuZGVyZWRSYXRpbmdJdGVtLFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgY3NzQ2xhc3NlczogYW55XG4gICk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgaXRlbVRleHQgPSB0aGlzLnJlbmRlckxvY1N0cmluZyhpdGVtLmxvY1RleHQpO1xuICAgIHJldHVybiAoXG4gICAgICA8bGFiZWwga2V5PXtrZXl9IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRJdGVtQ2xhc3MoaXRlbS5pdGVtVmFsdWUpfT5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICBjbGFzc05hbWU9XCJzdi12aXN1YWxseWhpZGRlblwiXG4gICAgICAgICAgbmFtZT17dGhpcy5xdWVzdGlvbi5uYW1lfVxuICAgICAgICAgIGlkPXt0aGlzLnF1ZXN0aW9uLmlucHV0SWQgKyBcIl9cIiArIGluZGV4fVxuICAgICAgICAgIHZhbHVlPXtpdGVtLnZhbHVlfVxuICAgICAgICAgIGRpc2FibGVkPXt0aGlzLmlzRGlzcGxheU1vZGV9XG4gICAgICAgICAgY2hlY2tlZD17dGhpcy5xdWVzdGlvbi52YWx1ZSA9PSBpdGVtLnZhbHVlfVxuICAgICAgICAgIG9uQ2xpY2s9e3RoaXMuaGFuZGxlT25DbGlja31cbiAgICAgICAgICBvbkNoYW5nZT17KCk9Pnt9fVxuICAgICAgICAgIGFyaWEtcmVxdWlyZWQ9e3RoaXMucXVlc3Rpb24uYXJpYVJlcXVpcmVkfVxuICAgICAgICAgIGFyaWEtbGFiZWw9e3RoaXMucXVlc3Rpb24uYXJpYUxhYmVsfVxuICAgICAgICAgIGFyaWEtaW52YWxpZD17dGhpcy5xdWVzdGlvbi5hcmlhSW52YWxpZH1cbiAgICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PXt0aGlzLnF1ZXN0aW9uLmFyaWFEZXNjcmliZWRCeX1cbiAgICAgICAgLz5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtjc3NDbGFzc2VzLml0ZW1UZXh0fT57aXRlbVRleHR9PC9zcGFuPlxuICAgICAgPC9sYWJlbD5cbiAgICApO1xuICB9XG59XG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwicmF0aW5nXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvblJhdGluZywgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uVW5jb250cm9sbGVkRWxlbWVudCB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25UZXh0TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvblRleHQgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvblVuY29udHJvbGxlZEVsZW1lbnQ8XG4gIFF1ZXN0aW9uVGV4dE1vZGVsXG4+IHtcbiAgcHJpdmF0ZSBfaXNXYWl0aW5nRm9yRW50ZXIgPSBmYWxzZTtcbiAgLy9jb250cm9sUmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTElucHV0RWxlbWVudD47XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgLy90aGlzLmNvbnRyb2xSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVySW5wdXQoKSB7XG4gICAgY29uc3QgaW5wdXRDbGFzcyA9ICh0aGlzLnF1ZXN0aW9uIGFzIFF1ZXN0aW9uVGV4dE1vZGVsKS5nZXRDb250cm9sQ2xhc3MoKTtcbiAgICB2YXIgb25LZXlEb3duID0gbnVsbDtcbiAgICB2YXIgb25LZXlVcCA9IG51bGw7XG4gICAgdmFyIG9uQ29tcG9zaXRpb25VcGRhdGUgPSBudWxsO1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLmlzSW5wdXRUZXh0VXBkYXRlKSB7XG4gICAgICBvbktleURvd24gPSAoZTogYW55KSA9PiAodGhpcy5faXNXYWl0aW5nRm9yRW50ZXIgPSBlLmtleUNvZGUgPT09IDIyOSk7XG4gICAgICBvbktleVVwID0gKGU6IGFueSkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuX2lzV2FpdGluZ0ZvckVudGVyIHx8IGUua2V5Q29kZSA9PT0gMTMpIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlT25FdmVudChlKTtcbiAgICAgICAgICB0aGlzLl9pc1dhaXRpbmdGb3JFbnRlciA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgb25Db21wb3NpdGlvblVwZGF0ZSA9IChlOiBhbnkpID0+IHtcbiAgICAgICAgZS5wZXJzaXN0KCk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMudXBkYXRlVmFsdWVPbkV2ZW50KGUpO1xuICAgICAgICB9LCAxKTtcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vaHR0cHM6Ly9naXRodWIuY29tL3N1cnZleWpzL3N1cnZleS1saWJyYXJ5L2lzc3Vlcy8zMzg0XG4gICAgICBvbktleVVwID0gKGU6IGFueSkgPT4ge1xuICAgICAgICBpZiAoZS5rZXlDb2RlID09PSAxMykge1xuICAgICAgICAgIHRoaXMudXBkYXRlVmFsdWVPbkV2ZW50KGUpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIHZhciBvbkNoYW5nZSA9IChlOiBhbnkpID0+IHtcbiAgICAgIGlmIChlLnRhcmdldCA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkge1xuICAgICAgICBpZiAodGhpcy5xdWVzdGlvbi5pc0lucHV0VGV4dFVwZGF0ZSkge1xuICAgICAgICAgIHRoaXMudXBkYXRlVmFsdWVPbkV2ZW50KGUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlT25FdmVudChlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHZhciBwbGFjZUhvbGRlciA9IHRoaXMucXVlc3Rpb24ucmVuZGVyZWRQbGFjZUhvbGRlcjtcbiAgICBpZiAodGhpcy5xdWVzdGlvbi5pc1JlYWRPbmx5UmVuZGVyRGl2KCkpIHtcbiAgICAgIHJldHVybiA8ZGl2Pnt0aGlzLnF1ZXN0aW9uLnZhbHVlfTwvZGl2PjtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDxpbnB1dFxuICAgICAgICBpZD17dGhpcy5xdWVzdGlvbi5pbnB1dElkfVxuICAgICAgICBkaXNhYmxlZD17dGhpcy5pc0Rpc3BsYXlNb2RlfVxuICAgICAgICBjbGFzc05hbWU9e2lucHV0Q2xhc3N9XG4gICAgICAgIHR5cGU9e3RoaXMucXVlc3Rpb24uaW5wdXRUeXBlfVxuICAgICAgICAvL3JlZj17dGhpcy5jb250cm9sUmVmfVxuICAgICAgICByZWY9eyhpbnB1dCkgPT4gKHRoaXMuY29udHJvbCA9IGlucHV0KX1cbiAgICAgICAgc3R5bGU9e3RoaXMucXVlc3Rpb24uaW5wdXRTdHlsZX1cbiAgICAgICAgbWF4TGVuZ3RoPXt0aGlzLnF1ZXN0aW9uLmdldE1heExlbmd0aCgpfVxuICAgICAgICBtaW49e3RoaXMucXVlc3Rpb24ucmVuZGVyZWRNaW59XG4gICAgICAgIG1heD17dGhpcy5xdWVzdGlvbi5yZW5kZXJlZE1heH1cbiAgICAgICAgc3RlcD17dGhpcy5xdWVzdGlvbi5yZW5kZXJlZFN0ZXB9XG4gICAgICAgIHNpemU9e3RoaXMucXVlc3Rpb24uaW5wdXRTaXplfVxuICAgICAgICBwbGFjZWhvbGRlcj17cGxhY2VIb2xkZXJ9XG4gICAgICAgIGxpc3Q9e3RoaXMucXVlc3Rpb24uZGF0YUxpc3RJZH1cbiAgICAgICAgYXV0b0NvbXBsZXRlPXt0aGlzLnF1ZXN0aW9uLmF1dG9Db21wbGV0ZX1cbiAgICAgICAgb25CbHVyPXt0aGlzLnVwZGF0ZVZhbHVlT25FdmVudH1cbiAgICAgICAgb25DaGFuZ2U9e29uQ2hhbmdlfVxuICAgICAgICBvbktleVVwPXtvbktleVVwfVxuICAgICAgICBvbktleURvd249e29uS2V5RG93bn1cbiAgICAgICAgb25Db21wb3NpdGlvblVwZGF0ZT17b25Db21wb3NpdGlvblVwZGF0ZX1cbiAgICAgICAgYXJpYS1yZXF1aXJlZD17dGhpcy5xdWVzdGlvbi5hcmlhUmVxdWlyZWR9XG4gICAgICAgIGFyaWEtbGFiZWw9e3RoaXMucXVlc3Rpb24uYXJpYUxhYmVsfVxuICAgICAgICBhcmlhLWludmFsaWQ9e3RoaXMucXVlc3Rpb24uYXJpYUludmFsaWR9XG4gICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9e3RoaXMucXVlc3Rpb24uYXJpYURlc2NyaWJlZEJ5fVxuICAgICAgLz5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5xdWVzdGlvbi5kYXRhTGlzdElkID9cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICB7IHRoaXMucmVuZGVySW5wdXQoKSB9XG4gICAgICAgICAgeyB0aGlzLnJlbmRlckRhdGFMaXN0KCkgfVxuICAgICAgICA8L2Rpdj46XG4gICAgICAgIHRoaXMucmVuZGVySW5wdXQoKVxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSByZW5kZXJEYXRhTGlzdCgpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLnF1ZXN0aW9uLmRhdGFMaXN0SWQpIHJldHVybiBudWxsO1xuICAgIHZhciBpdGVtcyA9IHRoaXMucXVlc3Rpb24uZGF0YUxpc3Q7XG4gICAgaWYgKGl0ZW1zLmxlbmd0aCA9PSAwKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgb3B0aW9ucyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIG9wdGlvbnMucHVzaCg8b3B0aW9uIGtleT17XCJpdGVtXCIraX0gdmFsdWU9e2l0ZW1zW2ldfT48L29wdGlvbj4pO1xuICAgIH1cbiAgICByZXR1cm4gPGRhdGFsaXN0IGlkPXt0aGlzLnF1ZXN0aW9uLmRhdGFMaXN0SWR9PntvcHRpb25zfTwvZGF0YWxpc3Q+O1xuICB9XG4gIC8vIHByb3RlY3RlZCB1cGRhdGVEb21FbGVtZW50KCkge1xuICAvLyAgIHRoaXMuY29udHJvbCA9IHRoaXMuY29udHJvbFJlZi5jdXJyZW50O1xuICAvLyAgIHN1cGVyLnVwZGF0ZURvbUVsZW1lbnQoKTtcbiAgLy8gfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwidGV4dFwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25UZXh0LCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCB7IFN1cnZleU1vZGVsLCBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRDZWxsLCBTdXJ2ZXlXaW5kb3dNb2RlbCwgU3VydmV5RWxlbWVudCwgUXVlc3Rpb25Sb3dNb2RlbCwgSXRlbVZhbHVlLCBRdWVzdGlvblNlbGVjdEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi9lbGVtZW50LWZhY3RvcnlcIjtcblxuZXhwb3J0IGNsYXNzIFJlYWN0U3VydmV5RWxlbWVudHNXcmFwcGVyIHtcbiAgcHVibGljIHN0YXRpYyB3cmFwUm93KHN1cnZleTogU3VydmV5TW9kZWwsIGVsZW1lbnQ6IEpTWC5FbGVtZW50LCByb3c6IFF1ZXN0aW9uUm93TW9kZWwpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgY29tcG9uZW50TmFtZSA9IHN1cnZleS5nZXRSb3dXcmFwcGVyQ29tcG9uZW50TmFtZShyb3cpO1xuICAgIGNvbnN0IGNvbXBvbmVudERhdGEgPSBzdXJ2ZXkuZ2V0Um93V3JhcHBlckNvbXBvbmVudERhdGEocm93KTtcbiAgICByZXR1cm4gUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KGNvbXBvbmVudE5hbWUsIHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICByb3csXG4gICAgICBjb21wb25lbnREYXRhLFxuICAgIH0pO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgd3JhcEVsZW1lbnQoc3VydmV5OiBTdXJ2ZXlNb2RlbCwgZWxlbWVudDogSlNYLkVsZW1lbnQsIHF1ZXN0aW9uOiBTdXJ2ZXlFbGVtZW50KTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGNvbXBvbmVudE5hbWUgPSBzdXJ2ZXkuZ2V0RWxlbWVudFdyYXBwZXJDb21wb25lbnROYW1lKHF1ZXN0aW9uKTtcbiAgICBjb25zdCBjb21wb25lbnREYXRhID0gc3VydmV5LmdldEVsZW1lbnRXcmFwcGVyQ29tcG9uZW50RGF0YShxdWVzdGlvbik7XG4gICAgcmV0dXJuIFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChjb21wb25lbnROYW1lLCB7XG4gICAgICBlbGVtZW50LFxuICAgICAgcXVlc3Rpb24sXG4gICAgICBjb21wb25lbnREYXRhLFxuICAgIH0pO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgd3JhcFF1ZXN0aW9uQ29udGVudChzdXJ2ZXk6IFN1cnZleU1vZGVsLCBlbGVtZW50OiBKU1guRWxlbWVudCwgcXVlc3Rpb246IFN1cnZleUVsZW1lbnQpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgY29tcG9uZW50TmFtZSA9IHN1cnZleS5nZXRRdWVzdGlvbkNvbnRlbnRXcmFwcGVyQ29tcG9uZW50TmFtZShxdWVzdGlvbik7XG4gICAgY29uc3QgY29tcG9uZW50RGF0YSA9IHN1cnZleS5nZXRFbGVtZW50V3JhcHBlckNvbXBvbmVudERhdGEocXVlc3Rpb24pO1xuICAgIHJldHVybiBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoY29tcG9uZW50TmFtZSwge1xuICAgICAgZWxlbWVudCxcbiAgICAgIHF1ZXN0aW9uLFxuICAgICAgY29tcG9uZW50RGF0YSxcbiAgICB9KTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIHdyYXBJdGVtVmFsdWUoc3VydmV5OiBTdXJ2ZXlNb2RlbCwgZWxlbWVudDogSlNYLkVsZW1lbnQsIHF1ZXN0aW9uOiBRdWVzdGlvblNlbGVjdEJhc2UsIGl0ZW06IEl0ZW1WYWx1ZSk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBjb21wb25lbnROYW1lID0gc3VydmV5LmdldEl0ZW1WYWx1ZVdyYXBwZXJDb21wb25lbnROYW1lKGl0ZW0sIHF1ZXN0aW9uKTtcbiAgICBjb25zdCBjb21wb25lbnREYXRhID0gc3VydmV5LmdldEl0ZW1WYWx1ZVdyYXBwZXJDb21wb25lbnREYXRhKGl0ZW0sIHF1ZXN0aW9uKTtcbiAgICByZXR1cm4gUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KGNvbXBvbmVudE5hbWUsIHtcbiAgICAgIGtleTogZWxlbWVudC5rZXksXG4gICAgICBlbGVtZW50LFxuICAgICAgcXVlc3Rpb24sXG4gICAgICBpdGVtLFxuICAgICAgY29tcG9uZW50RGF0YSxcbiAgICB9KTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIHdyYXBNYXRyaXhDZWxsKHN1cnZleTogU3VydmV5TW9kZWwsIGVsZW1lbnQ6IEpTWC5FbGVtZW50LCBjZWxsOiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRDZWxsLCByZWFzb246IHN0cmluZyA9IFwiY2VsbFwiKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGNvbXBvbmVudE5hbWUgPSBzdXJ2ZXkuZ2V0RWxlbWVudFdyYXBwZXJDb21wb25lbnROYW1lKGNlbGwsIHJlYXNvbik7XG4gICAgY29uc3QgY29tcG9uZW50RGF0YSA9IHN1cnZleS5nZXRFbGVtZW50V3JhcHBlckNvbXBvbmVudERhdGEoY2VsbCwgcmVhc29uKTtcbiAgICByZXR1cm4gUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KGNvbXBvbmVudE5hbWUsIHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBjZWxsLFxuICAgICAgY29tcG9uZW50RGF0YSxcbiAgICB9KTtcbiAgfVxufVxuXG5TdXJ2ZXlNb2RlbC5wbGF0Zm9ybSA9IFwicmVhY3RcIjtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQmFzZSwgU3VydmV5VGltZXJNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RTdXJ2ZXlFbGVtZW50IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlUaW1lclBhbmVsIGV4dGVuZHMgUmVhY3RTdXJ2ZXlFbGVtZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnRpbWVyTW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCB0aW1lck1vZGVsKCk6IFN1cnZleVRpbWVyTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnRpbWVyTW9kZWw7XG4gIH1cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gPGRpdj57dGhpcy50aW1lck1vZGVsLnRleHR9PC9kaXY+O1xuICB9XG59XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IElTdXJ2ZXlDcmVhdG9yIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvblwiO1xuaW1wb3J0IHsgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFF1ZXN0aW9uUm93TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBJRWxlbWVudCwgQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuL2VsZW1lbnQtZmFjdG9yeVwiO1xuaW1wb3J0IHsgUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIgfSBmcm9tIFwiLi9yZWFjdHN1cnZleW1vZGVsXCI7XG5pbXBvcnQgeyBRdWVzdGlvbiB9IGZyb20gXCIuLi9xdWVzdGlvblwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5Um93IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8YW55LCBhbnk+IHtcbiAgcHJpdmF0ZSByb290UmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMucm9vdFJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICAgIHRoaXMucmVjYWxjdWxhdGVDc3MoKTtcbiAgfVxuICBwcml2YXRlIHJlY2FsY3VsYXRlQ3NzKCkge1xuICAgIHRoaXMucm93LnZpc2libGVFbGVtZW50cy5tYXAoZWxlbWVudCA9PiAoZWxlbWVudCBhcyBRdWVzdGlvbikuY3NzQ2xhc3Nlcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5yb3c7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgcm93KCk6IFF1ZXN0aW9uUm93TW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnJvdztcbiAgfVxuICBwcml2YXRlIGdldCBzdXJ2ZXkoKTogU3VydmV5TW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnN1cnZleTtcbiAgfVxuICBwcml2YXRlIGdldCBjcmVhdG9yKCk6IElTdXJ2ZXlDcmVhdG9yIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jcmVhdG9yO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgY3NzKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3NzO1xuICB9XG4gIHByb3RlY3RlZCBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5yb3cgJiYgISF0aGlzLnN1cnZleSAmJiAhIXRoaXMuY3JlYXRvciAmJiB0aGlzLnJvdy52aXNpYmxlO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50Q29udGVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGVsZW1lbnRzID0gbnVsbDtcbiAgICBlbGVtZW50cyA9IHRoaXMucm93LnZpc2libGVFbGVtZW50cy5tYXAoKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBpbm5lckVsZW1lbnQgPSB0aGlzLmNyZWF0ZUVsZW1lbnQoZWxlbWVudCwgaW5kZXgpO1xuICAgICAgY29uc3QgY3NzID0gKGVsZW1lbnQgYXMgUXVlc3Rpb24pLmNzc0NsYXNzZXNWYWx1ZTtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e2Nzcy5xdWVzdGlvbldyYXBwZXJ9XG4gICAgICAgICAgc3R5bGU9eyhlbGVtZW50IGFzIGFueSkucm9vdFN0eWxlfVxuICAgICAgICAgIGRhdGEta2V5PXtpbm5lckVsZW1lbnQua2V5fVxuICAgICAgICAgIGtleT17aW5uZXJFbGVtZW50LmtleX1cbiAgICAgICAgICBvbkZvY3VzPXsoZWxlbWVudCBhcyBRdWVzdGlvbikuZm9jdXNJbn1cbiAgICAgICAgPlxuICAgICAgICAgIHt0aGlzLnJvdy5pc05lZWRSZW5kZXIgPyBpbm5lckVsZW1lbnQgOiBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoZWxlbWVudC5za2VsZXRvbkNvbXBvbmVudE5hbWUsIHsgZWxlbWVudDogZWxlbWVudCwgY3NzOiB0aGlzLmNzcywgfSl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IHJlZj17dGhpcy5yb290UmVmfSBjbGFzc05hbWU9e3RoaXMucm93LmdldFJvd0NzcygpfSA+XG4gICAgICAgIHtlbGVtZW50c31cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHN1cnZleTogU3VydmV5TW9kZWwgPSB0aGlzLnN1cnZleSBhcyBTdXJ2ZXlNb2RlbDtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5yZW5kZXJFbGVtZW50Q29udGVudCgpO1xuICAgIGNvbnN0IHdyYXBwZXIgPSBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlci53cmFwUm93KHN1cnZleSwgY29udGVudCwgdGhpcy5yb3cpO1xuICAgIHJldHVybiB3cmFwcGVyIHx8IGNvbnRlbnQ7XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICB2YXIgZWwgPSB0aGlzLnJvb3RSZWYuY3VycmVudDtcbiAgICBpZiAoISFlbCAmJiAhdGhpcy5yb3cuaXNOZWVkUmVuZGVyKSB7XG4gICAgICB2YXIgcm93Q29udGFpbmVyRGl2ID0gZWw7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5yb3cuc3RhcnRMYXp5UmVuZGVyaW5nKHJvd0NvbnRhaW5lckRpdik7XG4gICAgICB9LCAxMCk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzOiBhbnksIG5leHRTdGF0ZTogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKCFzdXBlci5zaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzLCBuZXh0U3RhdGUpKSByZXR1cm4gZmFsc2U7XG5cbiAgICBpZiAobmV4dFByb3BzLnJvdyAhPT0gdGhpcy5yb3cpIHtcbiAgICAgIG5leHRQcm9wcy5yb3cuaXNOZWVkUmVuZGVyID0gdGhpcy5yb3cuaXNOZWVkUmVuZGVyO1xuICAgICAgdGhpcy5zdG9wTGF6eVJlbmRlcmluZygpO1xuICAgIH1cbiAgICB0aGlzLnJlY2FsY3VsYXRlQ3NzKCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHJpdmF0ZSBzdG9wTGF6eVJlbmRlcmluZygpIHtcbiAgICB0aGlzLnJvdy5zdG9wTGF6eVJlbmRlcmluZygpO1xuICAgIHRoaXMucm93LmlzTmVlZFJlbmRlciA9ICF0aGlzLnJvdy5pc0xhenlSZW5kZXJpbmcoKTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIHRoaXMuc3RvcExhenlSZW5kZXJpbmcoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjcmVhdGVFbGVtZW50KGVsZW1lbnQ6IElFbGVtZW50LCBlbGVtZW50SW5kZXg/OiBudW1iZXIpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgaW5kZXggPSBlbGVtZW50SW5kZXggPyBcIi1cIiArIGVsZW1lbnRJbmRleCA6IDA7XG4gICAgdmFyIGVsZW1lbnRUeXBlID0gZWxlbWVudC5nZXRUeXBlKCk7XG4gICAgaWYgKCFSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmlzRWxlbWVudFJlZ2lzdGVyZWQoZWxlbWVudFR5cGUpKSB7XG4gICAgICBlbGVtZW50VHlwZSA9IFwicXVlc3Rpb25cIjtcbiAgICB9XG4gICAgcmV0dXJuIFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChlbGVtZW50VHlwZSwge1xuICAgICAga2V5OiBlbGVtZW50Lm5hbWUgKyBpbmRleCxcbiAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgICBjcmVhdG9yOiB0aGlzLmNyZWF0b3IsXG4gICAgICBzdXJ2ZXk6IHRoaXMuc3VydmV5LFxuICAgICAgY3NzOiB0aGlzLmNzcyxcbiAgICB9KTtcbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBRdWVzdGlvblNpZ25hdHVyZVBhZE1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuaW1wb3J0IHsgU3ZnSWNvbiB9IGZyb20gXCIuL2NvbXBvbmVudHMvc3ZnLWljb24vc3ZnLWljb25cIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uU2lnbmF0dXJlUGFkIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHsgdmFsdWU6IHRoaXMucXVlc3Rpb24udmFsdWUgfTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uU2lnbmF0dXJlUGFkTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBRdWVzdGlvblNpZ25hdHVyZVBhZE1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgY3NzQ2xhc3NlcyA9IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3NlcztcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMucm9vdH0gcmVmPXsocm9vdCkgPT4gKHRoaXMuY29udHJvbCA9IHJvb3QpfSBzdHlsZT17eyBoZWlnaHQ6IHRoaXMucXVlc3Rpb24uaGVpZ2h0LCB3aWR0aDogdGhpcy5xdWVzdGlvbi53aWR0aCB9fT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5wbGFjZWhvbGRlcn1cbiAgICAgICAgICBzdHlsZT17eyBkaXNwbGF5OiB0aGlzLnF1ZXN0aW9uLm5lZWRTaG93UGxhY2Vob2xkZXIoKSA/IFwiXCIgOiBcIm5vbmVcIiB9fVxuICAgICAgICA+XG4gICAgICAgICAge3RoaXMucXVlc3Rpb24ucGxhY2VIb2xkZXJUZXh0fVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8Y2FudmFzIHRhYkluZGV4PXswfT48L2NhbnZhcz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLmNvbnRyb2xzfT5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5jbGVhckJ1dHRvbn1cbiAgICAgICAgICAgIHRpdGxlPXt0aGlzLnF1ZXN0aW9uLmNsZWFyQnV0dG9uQ2FwdGlvbn1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmNsZWFyQnV0dG9uSWNvbklkID8gPFN2Z0ljb24gaWNvbk5hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jbGVhckJ1dHRvbkljb25JZH0gc2l6ZT17XCJhdXRvXCJ9PjwvU3ZnSWNvbj4gOiA8c3Bhbj7inJY8L3NwYW4+fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcInNpZ25hdHVyZXBhZFwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25TaWduYXR1cmVQYWQsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgeyBMb2NhbGl6YWJsZVN0cmluZyB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xyXG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4vZWxlbWVudC1mYWN0b3J5XCI7XHJcblxyXG5leHBvcnQgY2xhc3MgU3VydmV5TG9jU3RyaW5nRWRpdG9yIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PGFueSwgYW55PiB7XHJcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xyXG4gICAgc3VwZXIocHJvcHMpO1xyXG4gICAgdGhpcy5zdGF0ZSA9IHsgY2hhbmdlZDogMCB9O1xyXG4gIH1cclxuICBwcml2YXRlIGdldCBsb2NTdHIoKTogTG9jYWxpemFibGVTdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvcHMubG9jU3RyO1xyXG4gIH1cclxuICBwcml2YXRlIGdldCBzdHlsZSgpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvcHMuc3R5bGU7XHJcbiAgfVxyXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xyXG4gICAgaWYgKCF0aGlzLmxvY1N0cikgcmV0dXJuO1xyXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgdGhpcy5sb2NTdHIub25DaGFuZ2VkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICBzZWxmLnNldFN0YXRlKHsgY2hhbmdlZDogc2VsZi5zdGF0ZS5jaGFuZ2VkICsgMSB9KTtcclxuICAgIH07XHJcbiAgfVxyXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xyXG4gICAgaWYgKCF0aGlzLmxvY1N0cikgcmV0dXJuO1xyXG4gICAgdGhpcy5sb2NTdHIub25DaGFuZ2VkID0gZnVuY3Rpb24gKCkge307XHJcbiAgfVxyXG4gIG9uSW5wdXQgPSAoZXZlbnQ6IGFueSkgPT4ge1xyXG4gICAgdGhpcy5sb2NTdHIudGV4dCA9IGV2ZW50LnRhcmdldC5pbm5lclRleHQ7XHJcbiAgfTtcclxuICBvbkNsaWNrID0gKGV2ZW50OiBhbnkpID0+IHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICB9O1xyXG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XHJcbiAgICBpZiAoIXRoaXMubG9jU3RyKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMubG9jU3RyLmhhc0h0bWwpIHtcclxuICAgICAgY29uc3QgaHRtbFZhbHVlID0geyBfX2h0bWw6IHRoaXMubG9jU3RyLnJlbmRlcmVkSHRtbCB9O1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIDxzcGFuXHJcbiAgICAgICAgICBjbGFzc05hbWU9XCJzdi1zdHJpbmctZWRpdG9yXCJcclxuICAgICAgICAgIGNvbnRlbnRFZGl0YWJsZT1cInRydWVcIlxyXG4gICAgICAgICAgc3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nPXt0cnVlfVxyXG4gICAgICAgICAgc3R5bGU9e3RoaXMuc3R5bGV9XHJcbiAgICAgICAgICBkYW5nZXJvdXNseVNldElubmVySFRNTD17aHRtbFZhbHVlfVxyXG4gICAgICAgICAgb25CbHVyPXt0aGlzLm9uSW5wdXR9XHJcbiAgICAgICAgICBvbkNsaWNrPXt0aGlzLm9uQ2xpY2t9XHJcbiAgICAgICAgLz5cclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHJldHVybiAoXHJcbiAgICAgIDxzcGFuXHJcbiAgICAgICAgY2xhc3NOYW1lPVwic3Ytc3RyaW5nLWVkaXRvclwiXHJcbiAgICAgICAgY29udGVudEVkaXRhYmxlPVwidHJ1ZVwiXHJcbiAgICAgICAgc3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nPXt0cnVlfVxyXG4gICAgICAgIHN0eWxlPXt0aGlzLnN0eWxlfVxyXG4gICAgICAgIG9uQmx1cj17dGhpcy5vbklucHV0fVxyXG4gICAgICAgIG9uQ2xpY2s9e3RoaXMub25DbGlja31cclxuICAgICAgPlxyXG4gICAgICAgIHt0aGlzLmxvY1N0ci5yZW5kZXJlZEh0bWx9XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgICk7XHJcbiAgfVxyXG59XHJcblxyXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcclxuICBMb2NhbGl6YWJsZVN0cmluZy5lZGl0YWJsZVJlbmRlcmVyLFxyXG4gIChwcm9wcykgPT4ge1xyXG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5TG9jU3RyaW5nRWRpdG9yLCBwcm9wcyk7XHJcbiAgfVxyXG4pO1xyXG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCB7IExvY2FsaXphYmxlU3RyaW5nIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XHJcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi9lbGVtZW50LWZhY3RvcnlcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlMb2NTdHJpbmdWaWV3ZXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8YW55LCBhbnk+IHtcclxuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XHJcbiAgICBzdXBlcihwcm9wcyk7XHJcbiAgfVxyXG4gIHByaXZhdGUgZ2V0IGxvY1N0cigpOiBMb2NhbGl6YWJsZVN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5sb2NTdHI7XHJcbiAgfVxyXG4gIHByaXZhdGUgZ2V0IHN0eWxlKCk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5zdHlsZTtcclxuICB9XHJcbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XHJcbiAgICB0aGlzLnJlYWN0T25TdHJDaGFuZ2VkKCk7XHJcbiAgfVxyXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xyXG4gICAgaWYgKCF0aGlzLmxvY1N0cikgcmV0dXJuO1xyXG4gICAgdGhpcy5sb2NTdHIub25DaGFuZ2VkID0gZnVuY3Rpb24gKCkge307XHJcbiAgfVxyXG4gIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHM6IGFueSwgcHJldlN0YXRlOiBhbnkpIHtcclxuICAgIGlmKCEhcHJldlByb3BzLmxvY1N0cikge1xyXG4gICAgICBwcmV2UHJvcHMubG9jU3RyLm9uQ2hhbmdlZCA9ICgpID0+IHt9O1xyXG4gICAgfVxyXG4gICAgdGhpcy5yZWFjdE9uU3RyQ2hhbmdlZCgpO1xyXG4gIH1cclxuICBwcml2YXRlIHJlYWN0T25TdHJDaGFuZ2VkKCkge1xyXG4gICAgaWYgKCF0aGlzLmxvY1N0cikgcmV0dXJuO1xyXG4gICAgdGhpcy5sb2NTdHIub25DaGFuZ2VkID0gKCkgPT4ge1xyXG4gICAgICB0aGlzLnNldFN0YXRlKHsgY2hhbmdlZDogISF0aGlzLnN0YXRlICYmIHRoaXMuc3RhdGUuY2hhbmdlZCA/IHRoaXMuc3RhdGUuY2hhbmdlZCArIDEgOiAxIH0pO1xyXG4gICAgfTtcclxuICB9XHJcbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcclxuICAgIGlmICghdGhpcy5sb2NTdHIpIHJldHVybiBudWxsO1xyXG4gICAgaWYgKHRoaXMubG9jU3RyLmhhc0h0bWwpIHtcclxuICAgICAgbGV0IGh0bWxWYWx1ZSA9IHsgX19odG1sOiB0aGlzLmxvY1N0ci5yZW5kZXJlZEh0bWwgfTtcclxuICAgICAgcmV0dXJuIDxzcGFuIGNsYXNzTmFtZT1cInN2LXN0cmluZy12aWV3ZXJcIiBzdHlsZT17dGhpcy5zdHlsZX0gZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e2h0bWxWYWx1ZX0gLz47XHJcbiAgICB9XHJcbiAgICByZXR1cm4gPHNwYW4gY2xhc3NOYW1lPVwic3Ytc3RyaW5nLXZpZXdlclwiIHN0eWxlPXt0aGlzLnN0eWxlfT57dGhpcy5sb2NTdHIucmVuZGVyZWRIdG1sfTwvc3Bhbj47XHJcbiAgfVxyXG59XHJcblxyXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcclxuICBMb2NhbGl6YWJsZVN0cmluZy5kZWZhdWx0UmVuZGVyZXIsXHJcbiAgKHByb3BzKSA9PiB7XHJcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlMb2NTdHJpbmdWaWV3ZXIsIHByb3BzKTtcclxuICB9XHJcbik7XHJcbiIsIi8qKlxuICogR2xvYmFsIHN1cnZleSBzZXR0aW5nc1xuICovXG5leHBvcnQgdmFyIHNldHRpbmdzID0ge1xuICAvKipcbiAgICogT3B0aW9ucyBmb3IgU3VydmV5SlMgY29tcGFyYXRvci4gQnkgZGVmYXVsdCB3ZSB0cmltIHN0cmluZ3MgYW5kIGNvbXBhcmUgdGhlbSBhcyBjYXNlIGluc2Vuc2l0aXZlLiBUbyBjaGFuZ2UgdGhlIGJlaGF2aW9yIHlvdSBjYW4gdXNlIGZvbGxvd2luZyBjb2RlOlxuICAgKiBzZXR0aW5ncy5jb21wYXJhdG9yLnRyaW1TdHJpbmdzID0gZmFsc2U7IC8vXCJhYmMgXCIgd2lsbCBub3QgZXF1YWwgdG8gXCJhYmNcIi4gVGhleSBhcmUgZXF1YWwgYnkgZGVmYXVsdC5cbiAgICogc2V0dGluZ3MuY29tcGFyYXRvci5jYXNlU2Vuc2l0aXZlID0gdHJ1ZTsgLy9cImFiYyBcIiB3aWxsIG5vdCBlcXVhbCB0byBcIkFiY1wiLiBUaGV5IGFyZSBlcXVhbCBieSBkZWZhdWx0LlxuICAgKi9cbiAgY29tcGFyYXRvcjoge1xuICAgIHRyaW1TdHJpbmdzOiB0cnVlLFxuICAgIGNhc2VTZW5zaXRpdmU6IGZhbHNlXG4gIH0sXG4gIC8qKlxuICAgKiBUaGUgcHJlZml4IHRoYXQgdXNlcyB0byBzdG9yZSB0aGUgcXVlc3Rpb24gY29tbWVudCwgYXMge3F1ZXN0aW9uTmFtZX0gKyB7Y29tbWVudFByZWZpeH0uXG4gICAqIFRoZSBkZWZhdWx0XG4gICAqL1xuICBjb21tZW50UHJlZml4OiBcIi1Db21tZW50XCIsXG4gIC8qKlxuICAgKiBFbmNvZGUgcGFyYW1ldGVyIG9uIGNhbGxpbmcgcmVzdGZ1bCB3ZWIgQVBJXG4gICAqL1xuICB3ZWJzZXJ2aWNlRW5jb2RlUGFyYW1ldGVyczogdHJ1ZSxcbiAgLyoqXG4gICAqIENhY2hlIHRoZSByZXN1bHQgZm9yIGNob2ljZXMgZ2V0dGluZyBmcm9tIHdlYiBzZXJ2aWNlcy4gU2V0IHRoaXMgcHJvcGVydHkgdG8gZmFsc2UsIHRvIGRpc2FibGUgdGhlIGNhY2hpbmcuXG4gICAqL1xuICB1c2VDYWNoaW5nRm9yQ2hvaWNlc1Jlc3RmdWw6IHRydWUsXG4gIGdldCB1c2VDYWNoaW5nRm9yQ2hvaWNlc1Jlc3RmdWxsKCkge1xuICAgIHJldHVybiBzZXR0aW5ncy51c2VDYWNoaW5nRm9yQ2hvaWNlc1Jlc3RmdWw7XG4gIH0sXG4gIHNldCB1c2VDYWNoaW5nRm9yQ2hvaWNlc1Jlc3RmdWxsKHZhbDogYm9vbGVhbikge1xuICAgIHNldHRpbmdzLnVzZUNhY2hpbmdGb3JDaG9pY2VzUmVzdGZ1bCA9IHZhbDtcbiAgfSxcbiAgLyoqXG4gICAqIFN1cnZleUpTIHdlYiBzZXJ2aWNlIEFQSSB1cmxcbiAgICovXG4gIHN1cnZleVNlcnZpY2VVcmw6IFwiaHR0cHM6Ly9hcGkuc3VydmV5anMuaW8vcHVibGljL3YxL1N1cnZleVwiLFxuICAvKipcbiAgICogc2VwYXJhdG9yIHRoYXQgY2FuIGFsbG93IHRvIHNldCB2YWx1ZSBhbmQgdGV4dCBvZiBJdGVtVmFsdWUgb2JqZWN0IGluIG9uZSBzdHJpbmcgYXM6IFwidmFsdWV8dGV4dFwiXG4gICAqL1xuICBpdGVtVmFsdWVTZXBhcmF0b3I6IFwifFwiLFxuICAvKipcbiAgICogU2V0IGl0IHRvIHRydWUgdG8gc2VyaWFsaXplIGl0ZW12YWx1ZSBpbnN0YW5jZSBhbHdheXMgYXMgb2JqZWN0IGV2ZW4gaWYgdGV4dCBwcm9wZXJ0eSBpcyBlbXB0eVxuICAgKiBjb25zdCBpdGVtID0gbmV3IFN1cnZleS5JdGVtVmFsdWUoNSk7XG4gICAqIGl0ZW0udG9KU09OKCk7IC8vd2lsbCByZXR1cm4ge3ZhbHVlOiA1fSwgaW5zdGVhZCBvZiA1IGJ5IGRlZmF1bHQuXG4gICAqL1xuICBpdGVtVmFsdWVBbHdheXNTZXJpYWxpemVBc09iamVjdDogZmFsc2UsXG4gIC8qKlxuICAgKiBTZXQgaXQgdG8gdHJ1ZSB0byBzZXJpYWxpemUgaXRlbXZhbHVlIHRleHQgcHJvcGVydHksIGV2ZW4gaWYgaXQgaXMgZW1wdHkgb3IgZXF1YWxzIHRvIHZhbHVlXG4gICAqIGNvbnN0IGl0ZW0gPSBuZXcgU3VydmV5Lkl0ZW1WYWx1ZShcIml0ZW0xXCIpO1xuICAgKiBpdGVtLnRvSlNPTigpOyAvL3dpbGwgcmV0dXJuIHt2YWx1ZTogaXRlbTEsIHRleHQ6IFwiaXRlbTFcIn0sIGluc3RlYWQgb2YgXCJpdGVtMVwiIGJ5IGRlZmF1bHQuXG4gICAqL1xuICBpdGVtVmFsdWVBbHdheXNTZXJpYWxpemVUZXh0OiBmYWxzZSxcbiAgLyoqXG4gICAqIGRlZmF1bHQgbG9jYWxlIG5hbWUgZm9yIGxvY2FsaXphYmxlIHN0cmluZ3MgdGhhdCB1c2VzIGR1cmluZyBzZXJpYWxpemF0aW9uLCB7XCJkZWZhdWx0XCI6IFwiTXkgdGV4dFwiLCBcImRlXCI6IFwiTWVpbiBUZXh0XCJ9XG4gICAqL1xuICBkZWZhdWx0TG9jYWxlTmFtZTogXCJkZWZhdWx0XCIsXG4gIC8qKlxuICAgKiBEZWZhdWx0IHJvdyBuYW1lIGZvciBtYXRyaXggKHNpbmdsZSBjaG9pY2UpXG4gICAqL1xuICBtYXRyaXhEZWZhdWx0Um93TmFtZTogXCJkZWZhdWx0XCIsXG4gIC8qKlxuICAgKiBEZWZhdWx0IGNlbGwgdHlwZSBmb3IgZHJvcGRvd24gYW5kIGR5bmFtaWMgbWF0cmljZXNcbiAgICovXG4gIG1hdHJpeERlZmF1bHRDZWxsVHlwZTogXCJkcm9wZG93blwiLFxuICAvKipcbiAgICogVG90YWwgdmFsdWUgcG9zdGZpeCBmb3IgZHJvcGRvd24gYW5kIGR5bmFtaWMgbWF0cmljZXMuIFRoZSB0b3RhbCB2YWx1ZSBzdG9yZXMgYXM6IHttYXRyaXhOYW1lfSArIHtwb3N0Zml4fVxuICAgKi9cbiAgbWF0cml4VG90YWxWYWx1ZVBvc3RGaXg6IFwiLXRvdGFsXCIsXG4gIC8qKlxuICAgKiBNYXhpbXVtIHJvdyBjb3VudCBpbiBkeW5hbWljIG1hdHJpeFxuICAgKi9cbiAgbWF0cml4TWF4aW11bVJvd0NvdW50OiAxMDAwLFxuICAvKipcbiAgICogTWF4aW11bSByb3dDb3VudCB0aGF0IHJldHVybnMgaW4gYWRkQ29uZGl0aW9uT2JqZWN0c0J5Q29udGV4dCBmdW5jdGlvblxuICAgKi9cbiAgbWF0cml4TWF4Um93Q291bnRJbkNvbmRpdGlvbjogMSxcbiAgLyoqXG4gICAqIE1heGltdW0gcGFuZWwgY291bnQgaW4gZHluYW1pYyBwYW5lbFxuICAgKi9cbiAgcGFuZWxNYXhpbXVtUGFuZWxDb3VudDogMTAwLFxuICAvKipcbiAgICogTWF4aW11bSByYXRlIHZhbHVlIGNvdW50IGluIHJhdGluZyBxdWVzdGlvblxuICAgKi9cbiAgcmF0aW5nTWF4aW11bVJhdGVWYWx1ZUNvdW50OiAyMCxcbiAgLyoqXG4gICAqIERpc2FibGUgdGhlIHF1ZXN0aW9uIHdoaWxlIGNob2ljZXMgYXJlIGdldHRpbmcgZnJvbSB0aGUgd2ViIHNlcnZpY2VcbiAgICovXG4gIGRpc2FibGVPbkdldHRpbmdDaG9pY2VzRnJvbVdlYjogZmFsc2UsXG4gIC8qKlxuICAgKiBTZXQgdG8gdHJ1ZSB0byBhbHdheXMgc2VyaWFsaXplIHRoZSBsb2NhbGl6YXRpb24gc3RyaW5nIGFzIG9iamVjdCBldmVuIGlmIHRoZXJlIGlzIG9ubHkgb25lIHZhbHVlIGZvciBkZWZhdWx0IGxvY2FsZS4gSW5zdGVhZCBvZiBzdHJpbmcgXCJNeVN0clwiIHNlcmlhbGl6ZSBhcyB7ZGVmYXVsdDogXCJNeVN0clwifVxuICAgKi9cbiAgc2VyaWFsaXplTG9jYWxpemFibGVTdHJpbmdBc09iamVjdDogZmFsc2UsXG4gIC8qKlxuICAgKiBTZXQgdG8gZmFsc2UgdG8gaGlkZSBlbXB0eSBwYWdlIHRpdGxlIGFuZCBkZXNjcmlwdGlvbiBpbiBkZXNpZ24gbW9kZVxuICAgKi9cbiAgYWxsb3dTaG93RW1wdHlUaXRsZUluRGVzaWduTW9kZTogdHJ1ZSxcbiAgLyoqXG4gICAqIFNldCB0byBmYWxzZSB0byBoaWRlIGVtcHR5IHBhZ2UgZGVzY3JpcHRpb24gaW4gZGVzaWduIG1vZGVcbiAgICovXG4gIGFsbG93U2hvd0VtcHR5RGVzY3JpcHRpb25JbkRlc2lnbk1vZGU6IHRydWUsXG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSB0byB0cnVlIHRvIGV4ZWN1dGUgdGhlIGNvbXBsZXRlIHRyaWdnZXIgb24gdmFsdWUgY2hhbmdlIGluc3RlYWQgb2Ygb24gbmV4dCBwYWdlLlxuICAgKi9cbiAgZXhlY3V0ZUNvbXBsZXRlVHJpZ2dlck9uVmFsdWVDaGFuZ2VkOiBmYWxzZSxcbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIGZhbHNlIHRvIGV4ZWN1dGUgdGhlIHNraXAgdHJpZ2dlciBvbiBuZXh0IHBhZ2UgaW5zdGVhZCBvZiBvbiB2YWx1ZSBjaGFuZ2UuXG4gICAqL1xuICBleGVjdXRlU2tpcFRyaWdnZXJPblZhbHVlQ2hhbmdlZDogdHJ1ZSxcbiAgLyoqXG4gICAqIFNwZWNpZmllcyBob3cgdGhlIGlucHV0IGZpZWxkIG9mIFtDb21tZW50XShodHRwczovL3N1cnZleWpzLmlvL0RvY3VtZW50YXRpb24vTGlicmFyeT9pZD1xdWVzdGlvbmNvbW1lbnRtb2RlbCkgcXVlc3Rpb25zIGlzIHJlbmRlcmVkIGluIHRoZSByZWFkLW9ubHkgbW9kZS5cbiAgICogQXZhaWxhYmxlIHZhbHVlczpcbiAgICogXCJ0ZXh0YXJlYVwiIChkZWZhdWx0KSAtIEEgJ3RleHRhcmVhJyBlbGVtZW50IGlzIHVzZWQgdG8gcmVuZGVyIGEgQ29tbWVudCBxdWVzdGlvbidzIGlucHV0IGZpZWxkLlxuICAgKiBcImRpdlwiIC0gQSAnZGl2JyBlbGVtZW50IGlzIHVzZWQgdG8gcmVuZGVyIGEgQ29tbWVudCBxdWVzdGlvbidzIGlucHV0IGZpZWxkLlxuICAgKi9cbiAgcmVhZE9ubHlDb21tZW50UmVuZGVyTW9kZTogXCJ0ZXh0YXJlYVwiLFxuICAvKipcbiAgICogU3BlY2lmaWVzIGhvdyB0aGUgaW5wdXQgZmllbGQgb2YgW1RleHRdKGh0dHBzOi8vc3VydmV5anMuaW8vRG9jdW1lbnRhdGlvbi9MaWJyYXJ5P2lkPXF1ZXN0aW9udGV4dG1vZGVsKSBxdWVzdGlvbnMgaXMgcmVuZGVyZWQgaW4gdGhlIHJlYWQtb25seSBtb2RlLlxuICAgKiBBdmFpbGFibGUgdmFsdWVzOlxuICAgKiBcImlucHV0XCIgKGRlZmF1bHQpIC0gQW4gJ2lucHV0JyBlbGVtZW50IGlzIHVzZWQgdG8gcmVuZGVyIGEgVGV4dCBxdWVzdGlvbidzIGlucHV0IGZpZWxkLlxuICAgKiBcImRpdlwiIC0gQSAnZGl2JyBlbGVtZW50IGlzIHVzZWQgdG8gcmVuZGVyIGEgVGV4dCBxdWVzdGlvbidzIGlucHV0IGZpZWxkLlxuICAgKi9cbiAgcmVhZE9ubHlUZXh0UmVuZGVyTW9kZTogXCJpbnB1dFwiLFxuICAvKipcbiAgICogT3ZlcnJpZGUgdGhpcyBmdW5jdGlvbiwgc2V0IHlvdXIgZnVuY3Rpb24sIGlmIHlvdSB3YW50IHRvIHNob3cgeW91ciBvd24gZGlhbG9nIGNvbmZpcm0gd2luZG93IGluc3RlYWQgb2Ygc3RhbmRhcmQgYnJvd3NlciB3aW5kb3cuXG4gICAqIEBwYXJhbSBtZXNzYWdlXG4gICAqL1xuICBjb25maXJtQWN0aW9uRnVuYzogZnVuY3Rpb24gKG1lc3NhZ2U6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBjb25maXJtKG1lc3NhZ2UpO1xuICB9LFxuICAvKipcbiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBtaW5XaWR0aCBjb25zdHJhaW50XG4gICAqL1xuICBtaW5XaWR0aDogXCIzMDBweFwiLFxuICAvKipcbiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBtaW5XaWR0aCBjb25zdHJhaW50XG4gICAqL1xuICBtYXhXaWR0aDogXCJpbml0aWFsXCIsXG4gIC8qKlxuICAgKiBUaGlzIHByb3BlcnR5IHRlbGxzIGhvdyBtYW55IHRpbWVzIHN1cnZleSByZS1ydW4gZXhwcmVzc2lvbnMgb24gdmFsdWUgY2hhbmdlcyBkdXJpbmcgY29uZGl0aW9uIHJ1bm5pbmcuIFdlIG5lZWQgaXQgdG8gYXZvaWQgcmVjdXJzaW9ucyBpbiB0aGUgZXhwcmVzc2lvbnNcbiAgICovXG4gIG1heGltdW1Db25kaXRpb25SdW5Db3VudE9uVmFsdWVDaGFuZ2VkOiAxMCxcbiAgLyoqXG4gICAqIEJ5IGRlZmF1bHQgdmlzaWJsZUluZGV4IGZvciBxdWVzdGlvbiB3aXRoIHRpdGxlTG9jYXRpb24gPSBcImhpZGRlblwiIGlzIC0xLCBhbmQgc3VydmV5IGRvZXNuJ3QgY291bnQgdGhlc2UgcXVlc3Rpb25zIHdoZW4gc2V0IHF1ZXN0aW9ucyBudW1iZXJzLlxuICAgKiBTZXQgaXQgdHJ1ZSwgYW5kIGEgcXVlc3Rpb24gbmV4dCB0byBhIHF1ZXN0aW9uIHdpdGggaGlkZGVuIHRpdGxlIHdpbGwgaW5jcmVhc2UgaXQncyBudW1iZXIuXG4gICAqL1xuICBzZXRRdWVzdGlvblZpc2libGVJbmRleEZvckhpZGRlblRpdGxlOiBmYWxzZSxcbiAgLyoqXG4gICAqIEJ5IGRlZmF1bHQgdmlzaWJsZUluZGV4IGZvciBxdWVzdGlvbiB3aXRoIGhpZGVOdW1iZXIgPSB0cnVlIGlzIC0xLCBhbmQgc3VydmV5IGRvZXNuJ3QgY291bnQgdGhlc2UgcXVlc3Rpb25zIHdoZW4gc2V0IHF1ZXN0aW9ucyBudW1iZXJzLlxuICAgKiBTZXQgaXQgdHJ1ZSwgYW5kIGEgcXVlc3Rpb24gbmV4dCB0byBhIHF1ZXN0aW9uIHdpdGggaGlkZGVuIHRpdGxlIG51bWJlciB3aWxsIGluY3JlYXNlIGl0J3MgbnVtYmVyLlxuICAgKi9cbiAgc2V0UXVlc3Rpb25WaXNpYmxlSW5kZXhGb3JIaWRkZW5OdW1iZXI6IGZhbHNlLFxuICAvKipcbiAgICogQnkgZGVmYXVsdCBhbGwgcm93cyBhcmUgcmVuZGVyZWQgbm8gbWF0dGVycyB3aHd0aGVyIHRoZXkgYXJlIHZpc2libGUuXG4gICAqIFNldCBpdCB0cnVlLCBhbmQgc3VydmV5IG1hcmt1cCByb3dzIHdpbGwgYmUgcmVuZGVyZWQgb25seSBpZiB0aGV5IGFyZSB2aXNpYmxlIGluIHZpZXdwb3J0LlxuICAgKiBUaGlzIGZlYXR1cmUgaXMgZXhwZXJpbWFudGFsIGFuZCBtaWdodCBkbyBub3Qgc3VwcG9ydCBhbGwgdGhlIHVzZSBjYXNlcy5cbiAgICovXG4gIGxhenlSb3dzUmVuZGVyaW5nOiBmYWxzZSxcbiAgbGF6eVJvd3NSZW5kZXJpbmdTdGFydFJvdzogMyxcbiAgLyoqXG4gICAqIEJ5IGRlZmF1bHQgY2hlY2tib3ggYW5kIHJhZGlvZ3JvdXAgaXRlbXMgYXJlIG9yZGVyZWQgaW4gcm93cy5cbiAgICogU2V0IGl0IFwiY29sdW1uXCIsIGFuZCBpdGVtcyB3aWxsIGJlIG9yZGVyZWQgaW4gY29sdW1ucy5cbiAgICovXG4gIHNob3dJdGVtc0luT3JkZXI6IFwiZGVmYXVsdFwiLFxuICAvKipcbiAgICogU3VwcG9ydGVkIHZhbGlkYXRvcnMgYnkgcXVlc3Rpb24gdHlwZXMuIFlvdSBjYW4gbW9kaWZ5IHRoaXMgdmFyaWFibGUgdG8gYWRkIHZhbGlkYXRvcnMgZm9yIG5ldyBxdWVzdGlvbiB0eXBlcyBvciBhZGQvcmVtb3ZlIGZvciBleGlzdGluZyBxdWVzdGlvbiB0eXBlcy5cbiAgICovXG4gIHN1cHBvcnRlZFZhbGlkYXRvcnM6IHtcbiAgICBxdWVzdGlvbjogW1wiZXhwcmVzc2lvblwiXSxcbiAgICBjb21tZW50OiBbXCJ0ZXh0XCIsIFwicmVnZXhcIl0sXG4gICAgdGV4dDogW1wibnVtZXJpY1wiLCBcInRleHRcIiwgXCJyZWdleFwiLCBcImVtYWlsXCJdLFxuICAgIGNoZWNrYm94OiBbXCJhbnN3ZXJjb3VudFwiXSxcbiAgICBpbWFnZXBpY2tlcjogW1wiYW5zd2VyY291bnRcIl0sXG4gIH0sXG4gIC8qKlxuICAgKiBTZXQgdGhlIHZhbHVlIGFzIHN0cmluZyBcInl5eXktbW0tZGRcIi4gdGV4dCBxdWVzdGlvbnMgd2l0aCBpbnB1dFR5cGUgXCJkYXRlXCIgd2lsbCBub3QgYWxsb3cgdG8gc2V0IHRvIHN1cnZleSBkYXRlIHRoYXQgbGVzcyB0aGFuIHRoaXMgdmFsdWVcbiAgICovXG4gIG1pbkRhdGU6IFwiXCIsXG4gIC8qKlxuICAgKiBTZXQgdGhlIHZhbHVlIGFzIHN0cmluZyBcInl5eXktbW0tZGRcIi4gdGV4dCBxdWVzdGlvbnMgd2l0aCBpbnB1dFR5cGUgXCJkYXRlXCIgd2lsbCBub3QgYWxsb3cgdG8gc2V0IHRvIHN1cnZleSBkYXRlIHRoYXQgZ3JlYXRlciB0aGFuIHRoaXMgdmFsdWVcbiAgICovXG4gIG1heERhdGU6IFwiXCIsXG4gIHNob3dNb2RhbDogPFxuICAgIChcbiAgICAgIGNvbXBvbmVudE5hbWU6IHN0cmluZyxcbiAgICAgIGRhdGE6IGFueSxcbiAgICAgIG9uQXBwbHk6ICgpID0+IGJvb2xlYW4sXG4gICAgICBvbkNhbmNlbD86ICgpID0+IHZvaWQsXG4gICAgICBjc3NDbGFzcz86IHN0cmluZyxcbiAgICAgIHRpdGxlPzogc3RyaW5nLFxuICAgICAgZGlzcGxheU1vZGU/OiBcInBvcHVwXCIgfCBcIm92ZXJsYXlcIlxuICAgICkgPT4gdm9pZFxuICAgID51bmRlZmluZWQsXG4gIHN1cHBvcnRDcmVhdG9yVjI6IGZhbHNlLFxuICAvKipcbiAgICogU3BlY2lmaWVzIGEgbGlzdCBvZiBjdXN0b20gaWNvbnMuXG4gICAqIFVzZSB0aGlzIHByb3BlcnR5IHRvIHJlcGxhY2UgU3VydmV5SlMgZGVmYXVsdCBpY29ucyAoZGlzcGxheWVkIGluIFVJIGVsZW1lbnRzIG9mIFN1cnZleUpTIExpYnJhcnkgb3IgQ3JlYXRvcikgd2l0aCB5b3VyIGN1c3RvbSBpY29ucy5cbiAgICogRm9yIGV2ZXJ5IGRlZmF1bHQgaWNvbiB0byByZXBsYWNlLCBhZGQgYSBrZXkvdmFsdWUgb2JqZWN0IHdpdGggdGhlIGRlZmF1bHQgaWNvbidzIG5hbWUgYXMgYSBrZXkgYW5kIHRoZSBuYW1lIG9mIHlvdXIgY3VzdG9tIGljb24gYXMgYSB2YWx1ZS5cbiAgICogRm9yIGV4YW1wbGU6IFN1cnZleS5zZXR0aW5ncy5jdXN0b21JY29uc1tcImljb24tcmVkb1wiXSA9IFwibXktb3duLXJlZG8taWNvblwiXG4gICAqL1xuICBjdXN0b21JY29uczoge30sXG4gIHRpdGxlVGFnczoge1xuICAgIHN1cnZleTogXCJoM1wiLFxuICAgIHBhZ2U6IFwiaDRcIixcbiAgICBwYW5lbDogXCJoNFwiLFxuICAgIHF1ZXN0aW9uOiBcImg1XCIsXG4gIH1cbn07XG4iLCJpbXBvcnQgeyBBY3Rpb24gfSBmcm9tIFwiLi4vYWN0aW9ucy9hY3Rpb25cIjtcbmltcG9ydCB7IEFkYXB0aXZlQWN0aW9uQ29udGFpbmVyIH0gZnJvbSBcIi4uL2FjdGlvbnMvYWRhcHRpdmUtY29udGFpbmVyXCI7XG5cbmludGVyZmFjZSBJRGltZW5zaW9ucyB7XG4gIHNjcm9sbDogbnVtYmVyO1xuICBvZmZzZXQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNsYXNzIFJlc3BvbnNpdml0eU1hbmFnZXIge1xuICBwcml2YXRlIHJlc2l6ZU9ic2VydmVyOiBSZXNpemVPYnNlcnZlciA9IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBpc0luaXRpYWxpemVkID0gZmFsc2U7XG4gIHByb3RlY3RlZCBtaW5EaW1lbnNpb25Db25zdCA9IDU2O1xuICBwcml2YXRlIHNlcGFyYXRvclNpemUgPSAxNztcbiAgcHJpdmF0ZSBzZXBhcmF0b3JBZGRDb25zdCA9IDE7XG4gIHByaXZhdGUgcGFkZGluZ1NpemVDb25zdCA9IDg7XG4gIHByb3RlY3RlZCByZWNhbGNNaW5EaW1lbnNpb25Db25zdCA9IHRydWU7XG5cbiAgcHVibGljIGdldENvbXB1dGVkU3R5bGU6IChcbiAgICBlbHQ6IEVsZW1lbnRcbiAgKSA9PiBDU1NTdHlsZURlY2xhcmF0aW9uID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUuYmluZCh3aW5kb3cpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBjb250YWluZXI6IEhUTUxEaXZFbGVtZW50LFxuICAgIHByaXZhdGUgbW9kZWw6IEFkYXB0aXZlQWN0aW9uQ29udGFpbmVyLFxuICAgIHByaXZhdGUgaXRlbXNTZWxlY3Rvcjogc3RyaW5nLFxuICAgIHByaXZhdGUgZG90c0l0ZW1TaXplOiBudW1iZXIgPSA0OCxcbiAgKSB7XG5cbiAgICB0aGlzLm1vZGVsLnVwZGF0ZUNhbGxiYWNrID0gKGlzUmVzZXRJbml0aWFsaXplZDogYm9vbGVhbikgPT4ge1xuICAgICAgaWYoaXNSZXNldEluaXRpYWxpemVkKVxuICAgICAgICB0aGlzLmlzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICAgIGVsc2VcbiAgICAgICAgdGhpcy5wcm9jZXNzKCk7XG4gICAgfTtcbiAgICBpZiAodHlwZW9mIFJlc2l6ZU9ic2VydmVyICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKChfKSA9PiB0aGlzLnByb2Nlc3MoKSk7XG4gICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLm9ic2VydmUodGhpcy5jb250YWluZXIucGFyZW50RWxlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGdldERpbWVuc2lvbnMoZWxlbWVudDogSFRNTEVsZW1lbnQpOiBJRGltZW5zaW9ucyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNjcm9sbDogZWxlbWVudC5zY3JvbGxXaWR0aCxcbiAgICAgIG9mZnNldDogZWxlbWVudC5vZmZzZXRXaWR0aCxcbiAgICB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldEF2YWlsYWJsZVNwYWNlKCk6IG51bWJlciB7XG4gICAgY29uc3Qgc3R5bGU6IENTU1N0eWxlRGVjbGFyYXRpb24gPSB0aGlzLmdldENvbXB1dGVkU3R5bGUodGhpcy5jb250YWluZXIpO1xuICAgIGxldCBzcGFjZSA9IHRoaXMuY29udGFpbmVyLm9mZnNldFdpZHRoO1xuICAgIGlmIChzdHlsZS5ib3hTaXppbmcgPT09IFwiYm9yZGVyLWJveFwiKSB7XG4gICAgICBzcGFjZSAtPSBwYXJzZUZsb2F0KHN0eWxlLnBhZGRpbmdMZWZ0KSArIHBhcnNlRmxvYXQoc3R5bGUucGFkZGluZ1JpZ2h0KTtcbiAgICB9XG4gICAgcmV0dXJuIHNwYWNlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNhbGNJdGVtU2l6ZShpdGVtOiBIVE1MRGl2RWxlbWVudCk6IG51bWJlciB7XG4gICAgcmV0dXJuIGl0ZW0ub2Zmc2V0V2lkdGg7XG4gIH1cblxuICBwcml2YXRlIGNhbGNNaW5EaW1lbnNpb24oY3VycmVudEFjdGlvbjogQWN0aW9uKSB7XG4gICAgbGV0IG1pbkRpbWVuc2lvbkNvbnN0ID0gdGhpcy5taW5EaW1lbnNpb25Db25zdDtcbiAgICBpZihjdXJyZW50QWN0aW9uLmljb25TaXplICYmIHRoaXMucmVjYWxjTWluRGltZW5zaW9uQ29uc3QpIHtcbiAgICAgIG1pbkRpbWVuc2lvbkNvbnN0ID0gMiAqIGN1cnJlbnRBY3Rpb24uaWNvblNpemUgKyB0aGlzLnBhZGRpbmdTaXplQ29uc3Q7XG4gICAgfVxuICAgIHJldHVybiBjdXJyZW50QWN0aW9uLmNhblNocmlua1xuICAgICAgPyBtaW5EaW1lbnNpb25Db25zdCArXG4gICAgICAoY3VycmVudEFjdGlvbi5uZWVkU2VwYXJhdG9yID8gdGhpcy5zZXBhcmF0b3JTaXplIDogMClcbiAgICAgIDogY3VycmVudEFjdGlvbi5tYXhEaW1lbnNpb247XG4gIH1cblxuICBwcml2YXRlIGNhbGNJdGVtc1NpemVzKCkge1xuICAgIGNvbnN0IGFjdGlvbnMgPSB0aGlzLm1vZGVsLmFjdGlvbnM7XG4gICAgdGhpcy5jb250YWluZXJcbiAgICAgIC5xdWVyeVNlbGVjdG9yQWxsKHRoaXMuaXRlbXNTZWxlY3RvcilcbiAgICAgIC5mb3JFYWNoKChpdGVtOiBIVE1MRGl2RWxlbWVudCwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICBsZXQgY3VycmVudEFjdGlvbiA9IGFjdGlvbnNbaW5kZXhdO1xuICAgICAgICBjdXJyZW50QWN0aW9uLm1heERpbWVuc2lvbiA9IHRoaXMuY2FsY0l0ZW1TaXplKGl0ZW0pO1xuICAgICAgICBjdXJyZW50QWN0aW9uLm1pbkRpbWVuc2lvbiA9IHRoaXMuY2FsY01pbkRpbWVuc2lvbihjdXJyZW50QWN0aW9uKTtcbiAgICAgIH0pO1xuICB9XG4gIHByaXZhdGUgZ2V0IGlzQ29udGFpbmVyVmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISEoXG4gICAgICB0aGlzLmNvbnRhaW5lci5vZmZzZXRXaWR0aCB8fFxuICAgICAgdGhpcy5jb250YWluZXIub2Zmc2V0SGVpZ2h0IHx8XG4gICAgICB0aGlzLmNvbnRhaW5lci5nZXRDbGllbnRSZWN0cygpLmxlbmd0aFxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSBwcm9jZXNzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzQ29udGFpbmVyVmlzaWJsZSkge1xuICAgICAgaWYgKCF0aGlzLmlzSW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgdGhpcy5tb2RlbC5hY3Rpb25zLmZvckVhY2goKGFjdGlvbikgPT4gKGFjdGlvbi5tb2RlID0gXCJsYXJnZVwiKSk7XG4gICAgICAgIHRoaXMuY2FsY0l0ZW1zU2l6ZXMoKTtcbiAgICAgICAgdGhpcy5pc0luaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHRoaXMubW9kZWwuZml0KHRoaXMuZ2V0QXZhaWxhYmxlU3BhY2UoKSwgdGhpcy5kb3RzSXRlbVNpemUpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMubW9kZWwudXBkYXRlQ2FsbGJhY2sgPSB1bmRlZmluZWQ7XG4gICAgaWYgKCEhdGhpcy5yZXNpemVPYnNlcnZlcikge1xuICAgICAgdGhpcy5yZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBWZXJ0aWNhbFJlc3BvbnNpdml0eU1hbmFnZXIgZXh0ZW5kcyBSZXNwb25zaXZpdHlNYW5hZ2VyIHtcbiAgY29uc3RydWN0b3IoXG4gICAgY29udGFpbmVyOiBIVE1MRGl2RWxlbWVudCxcbiAgICBtb2RlbDogQWRhcHRpdmVBY3Rpb25Db250YWluZXIsXG4gICAgaXRlbXNTZWxlY3Rvcjogc3RyaW5nLFxuICAgIGRvdHNJdGVtU2l6ZT86IG51bWJlcixcbiAgICBtaW5EaW1lbnNpb24gPSA0MFxuICApIHtcbiAgICBzdXBlcihjb250YWluZXIsIG1vZGVsLCBpdGVtc1NlbGVjdG9yLCBkb3RzSXRlbVNpemUpO1xuICAgIHRoaXMubWluRGltZW5zaW9uQ29uc3QgPSBtaW5EaW1lbnNpb247XG4gICAgdGhpcy5yZWNhbGNNaW5EaW1lbnNpb25Db25zdCA9IGZhbHNlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldERpbWVuc2lvbnMoKTogSURpbWVuc2lvbnMge1xuICAgIHJldHVybiB7XG4gICAgICBzY3JvbGw6IHRoaXMuY29udGFpbmVyLnNjcm9sbEhlaWdodCxcbiAgICAgIG9mZnNldDogdGhpcy5jb250YWluZXIub2Zmc2V0SGVpZ2h0LFxuICAgIH07XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0QXZhaWxhYmxlU3BhY2UoKTogbnVtYmVyIHtcbiAgICBjb25zdCBzdHlsZTogQ1NTU3R5bGVEZWNsYXJhdGlvbiA9IHRoaXMuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmNvbnRhaW5lcik7XG4gICAgbGV0IHNwYWNlOiBudW1iZXIgPSB0aGlzLmNvbnRhaW5lci5vZmZzZXRIZWlnaHQ7XG4gICAgaWYgKHN0eWxlLmJveFNpemluZyA9PT0gXCJib3JkZXItYm94XCIpIHtcbiAgICAgIHNwYWNlIC09IHBhcnNlRmxvYXQoc3R5bGUucGFkZGluZ1RvcCkgKyBwYXJzZUZsb2F0KHN0eWxlLnBhZGRpbmdCb3R0b20pO1xuICAgIH1cbiAgICByZXR1cm4gc3BhY2U7XG4gIH1cblxuICBwcm90ZWN0ZWQgY2FsY0l0ZW1TaXplKGl0ZW06IEhUTUxEaXZFbGVtZW50KTogbnVtYmVyIHtcbiAgICByZXR1cm4gaXRlbS5vZmZzZXRIZWlnaHQ7XG4gIH1cbn1cbiIsImltcG9ydCB7IHNldHRpbmdzIH0gZnJvbSBcIi4vLi4vc2V0dGluZ3NcIjtcbmZ1bmN0aW9uIGNvbXBhcmVWZXJzaW9ucyhhOiBhbnksIGI6IGFueSkge1xuICBjb25zdCByZWdFeFN0cmlwMDogUmVnRXhwID0gLyhcXC4wKykrJC87XG4gIGNvbnN0IHNlZ21lbnRzQTogc3RyaW5nW10gPSBhLnJlcGxhY2UocmVnRXhTdHJpcDAsIFwiXCIpLnNwbGl0KFwiLlwiKTtcbiAgY29uc3Qgc2VnbWVudHNCOiBzdHJpbmdbXSA9IGIucmVwbGFjZShyZWdFeFN0cmlwMCwgXCJcIikuc3BsaXQoXCIuXCIpO1xuICBjb25zdCBsZW46IG51bWJlciA9IE1hdGgubWluKHNlZ21lbnRzQS5sZW5ndGgsIHNlZ21lbnRzQi5sZW5ndGgpO1xuICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICBjb25zdCBkaWZmOiBudW1iZXIgPVxuICAgICAgcGFyc2VJbnQoc2VnbWVudHNBW2ldLCAxMCkgLSBwYXJzZUludChzZWdtZW50c0JbaV0sIDEwKTtcbiAgICBpZiAoZGlmZikge1xuICAgICAgcmV0dXJuIGRpZmY7XG4gICAgfVxuICB9XG4gIHJldHVybiBzZWdtZW50c0EubGVuZ3RoIC0gc2VnbWVudHNCLmxlbmd0aDtcbn1cbmZ1bmN0aW9uIGNvbmZpcm1BY3Rpb24obWVzc2FnZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGlmICghIXNldHRpbmdzICYmICEhc2V0dGluZ3MuY29uZmlybUFjdGlvbkZ1bmMpXG4gICAgcmV0dXJuIHNldHRpbmdzLmNvbmZpcm1BY3Rpb25GdW5jKG1lc3NhZ2UpO1xuICByZXR1cm4gY29uZmlybShtZXNzYWdlKTtcbn1cbmZ1bmN0aW9uIGRldGVjdElFQnJvd3NlcigpIHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgdWE6IHN0cmluZyA9IHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50O1xuICBjb25zdCBvbGRJZTogbnVtYmVyID0gdWEuaW5kZXhPZihcIk1TSUUgXCIpO1xuICBjb25zdCBlbGV2ZW5JZTogbnVtYmVyID0gdWEuaW5kZXhPZihcIlRyaWRlbnQvXCIpO1xuICByZXR1cm4gb2xkSWUgPiAtMSB8fCBlbGV2ZW5JZSA+IC0xO1xufVxuZnVuY3Rpb24gZGV0ZWN0SUVPckVkZ2UoKSB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gZmFsc2U7XG4gIGlmICh0eXBlb2YgKDxhbnk+ZGV0ZWN0SUVPckVkZ2UpLmlzSUVPckVkZ2UgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBjb25zdCB1YTogc3RyaW5nID0gd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQ7XG4gICAgY29uc3QgbXNpZTogbnVtYmVyID0gdWEuaW5kZXhPZihcIk1TSUUgXCIpO1xuICAgIGNvbnN0IHRyaWRlbnQ6IG51bWJlciA9IHVhLmluZGV4T2YoXCJUcmlkZW50L1wiKTtcbiAgICBjb25zdCBlZGdlOiBudW1iZXIgPSB1YS5pbmRleE9mKFwiRWRnZS9cIik7XG4gICAgKDxhbnk+ZGV0ZWN0SUVPckVkZ2UpLmlzSUVPckVkZ2UgPSBlZGdlID4gMCB8fCB0cmlkZW50ID4gMCB8fCBtc2llID4gMDtcbiAgfVxuICByZXR1cm4gKDxhbnk+ZGV0ZWN0SUVPckVkZ2UpLmlzSUVPckVkZ2U7XG59XG5mdW5jdGlvbiBsb2FkRmlsZUZyb21CYXNlNjQoYjY0RGF0YTogc3RyaW5nLCBmaWxlTmFtZTogc3RyaW5nKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgYnl0ZVN0cmluZzogc3RyaW5nID0gYXRvYihiNjREYXRhLnNwbGl0KFwiLFwiKVsxXSk7XG5cbiAgICAvLyBzZXBhcmF0ZSBvdXQgdGhlIG1pbWUgY29tcG9uZW50XG4gICAgY29uc3QgbWltZVN0cmluZzogc3RyaW5nID0gYjY0RGF0YVxuICAgICAgLnNwbGl0KFwiLFwiKVswXVxuICAgICAgLnNwbGl0KFwiOlwiKVsxXVxuICAgICAgLnNwbGl0KFwiO1wiKVswXTtcblxuICAgIC8vIHdyaXRlIHRoZSBieXRlcyBvZiB0aGUgc3RyaW5nIHRvIGFuIEFycmF5QnVmZmVyXG4gICAgY29uc3QgYWI6IEFycmF5QnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKGJ5dGVTdHJpbmcubGVuZ3RoKTtcbiAgICBjb25zdCBpYTogVWludDhBcnJheSA9IG5ldyBVaW50OEFycmF5KGFiKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ5dGVTdHJpbmcubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlhW2ldID0gYnl0ZVN0cmluZy5jaGFyQ29kZUF0KGkpO1xuICAgIH1cbiAgICAvLyB3cml0ZSB0aGUgQXJyYXlCdWZmZXIgdG8gYSBibG9iLCBhbmQgeW91J3JlIGRvbmVcbiAgICBjb25zdCBiYjogQmxvYiA9IG5ldyBCbG9iKFthYl0sIHsgdHlwZTogbWltZVN0cmluZyB9KTtcbiAgICBpZiAoXG4gICAgICB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgICB3aW5kb3cubmF2aWdhdG9yICYmXG4gICAgICAoPGFueT53aW5kb3cubmF2aWdhdG9yKVtcIm1zU2F2ZUJsb2JcIl1cbiAgICApIHtcbiAgICAgICg8YW55PndpbmRvdy5uYXZpZ2F0b3IpW1wibXNTYXZlT3JPcGVuQmxvYlwiXShiYiwgZmlsZU5hbWUpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7IH1cbn1cbmZ1bmN0aW9uIGlzTW9iaWxlKCkge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5vcmllbnRhdGlvbiAhPT0gXCJ1bmRlZmluZWRcIlxuICApO1xufVxuXG5mdW5jdGlvbiBpc0VsZW1lbnRWaXNpYmxlKFxuICBlbGVtZW50OiBIVE1MRWxlbWVudCxcbiAgdGhyZXNob2xkOiBudW1iZXIgPSAwXG4pOiBib29sZWFuIHtcbiAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCBlbGVtZW50UmVjdDogRE9NUmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGNvbnN0IHZpZXdIZWlnaHQ6IG51bWJlciA9IE1hdGgubWF4KFxuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQsXG4gICAgd2luZG93LmlubmVySGVpZ2h0XG4gICk7XG4gIGNvbnN0IHRvcFdpbjogbnVtYmVyID0gLXRocmVzaG9sZDtcbiAgY29uc3QgYm90dG9tV2luOiBudW1iZXIgPSB2aWV3SGVpZ2h0ICsgdGhyZXNob2xkO1xuICBjb25zdCB0b3BFbDogbnVtYmVyID0gZWxlbWVudFJlY3QudG9wO1xuICBjb25zdCBib3R0b21FbDogbnVtYmVyID0gZWxlbWVudFJlY3QuYm90dG9tO1xuXG4gIGNvbnN0IG1heFRvcDogbnVtYmVyID0gTWF0aC5tYXgodG9wV2luLCB0b3BFbCk7XG4gIGNvbnN0IG1pbkJvdHRvbTogbnVtYmVyID0gTWF0aC5taW4oYm90dG9tV2luLCBib3R0b21FbCk7XG4gIHJldHVybiBtYXhUb3AgPD0gbWluQm90dG9tO1xufVxuXG5mdW5jdGlvbiBmaW5kU2Nyb2xsYWJsZVBhcmVudChlbGVtZW50OiBIVE1MRWxlbWVudCk6IEhUTUxFbGVtZW50IHtcbiAgaWYgKCFlbGVtZW50KSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgfVxuICBpZiAoXG4gICAgZWxlbWVudC5zY3JvbGxIZWlnaHQgPiBlbGVtZW50LmNsaWVudEhlaWdodCAmJlxuICAgIChnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLm92ZXJmbG93WSA9PT0gXCJzY3JvbGxcIiB8fFxuICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5vdmVyZmxvd1kgPT09IFwiYXV0b1wiKVxuICApIHtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuXG4gIGlmIChcbiAgICBlbGVtZW50LnNjcm9sbFdpZHRoID4gZWxlbWVudC5jbGllbnRXaWR0aCAmJlxuICAgIChnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLm92ZXJmbG93WCA9PT0gXCJzY3JvbGxcIiB8fFxuICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5vdmVyZmxvd1ggPT09IFwiYXV0b1wiKVxuICApIHtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuXG4gIHJldHVybiBmaW5kU2Nyb2xsYWJsZVBhcmVudChlbGVtZW50LnBhcmVudEVsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiBzY3JvbGxFbGVtZW50QnlDaGlsZElkKGlkOiBzdHJpbmcpIHtcbiAgaWYgKCFkb2N1bWVudCkgcmV0dXJuO1xuICBjb25zdCBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgaWYgKCFlbCkgcmV0dXJuO1xuICBjb25zdCBzY3JvbGxhYmxlRWwgPSBmaW5kU2Nyb2xsYWJsZVBhcmVudChlbCk7XG4gIGlmICghIXNjcm9sbGFibGVFbCkge1xuICAgIHNjcm9sbGFibGVFbC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudChcInNjcm9sbFwiKSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0SWNvbk5hbWVGcm9tUHJveHkoaWNvbk5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICghaWNvbk5hbWUpIHJldHVybiBpY29uTmFtZTtcbiAgdmFyIHByb3h5TmFtZSA9ICg8YW55PnNldHRpbmdzLmN1c3RvbUljb25zKVtpY29uTmFtZV07XG4gIHJldHVybiAhIXByb3h5TmFtZSA/IHByb3h5TmFtZSA6IGljb25OYW1lO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVTdmcoXG4gIHNpemU6IG51bWJlciB8IHN0cmluZyxcbiAgd2lkdGg6IG51bWJlcixcbiAgaGVpZ2h0OiBudW1iZXIsXG4gIGljb25OYW1lOiBzdHJpbmcsXG4gIHN2Z0VsZW06IGFueVxuKSB7XG4gIGlmKHNpemUgIT09IFwiYXV0b1wiKSB7XG4gICAgc3ZnRWxlbS5zdHlsZS53aWR0aCA9IChzaXplIHx8IHdpZHRoIHx8IDE2KSArIFwicHhcIjtcbiAgICBzdmdFbGVtLnN0eWxlLmhlaWdodCA9IChzaXplIHx8IGhlaWdodCB8fCAxNikgKyBcInB4XCI7XG4gIH1cbiAgY29uc3Qgbm9kZTogYW55ID0gc3ZnRWxlbS5jaGlsZE5vZGVzWzBdO1xuICBjb25zdCByZWFsSWNvbk5hbWUgPSBnZXRJY29uTmFtZUZyb21Qcm94eShpY29uTmFtZSk7XG4gIG5vZGUuc2V0QXR0cmlidXRlTlMoXG4gICAgXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXG4gICAgXCJ4bGluazpocmVmXCIsXG4gICAgXCIjXCIgKyByZWFsSWNvbk5hbWVcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVud3JhcDxUPih2YWx1ZTogVCB8ICgoKSA9PiBUKSk6IFQge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuICg8KCkgPT4gVD52YWx1ZSkoKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2l6ZSh2YWx1ZTogYW55KSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIpIHtcbiAgICByZXR1cm4gXCJcIiArIHZhbHVlICsgXCJweFwiO1xuICB9XG4gIGlmICghIXZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiB2YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgbGFzdFN5bWJvbDogc3RyaW5nID0gdmFsdWVbdmFsdWUubGVuZ3RoIC0gMV07XG4gICAgaWYgKChsYXN0U3ltYm9sID49IFwiMFwiICYmIGxhc3RTeW1ib2wgPD0gXCI5XCIpIHx8IGxhc3RTeW1ib2wgPT0gXCIuXCIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IG51bTogbnVtYmVyID0gcGFyc2VGbG9hdCh2YWx1ZSk7XG4gICAgICAgIHJldHVybiBcIlwiICsgbnVtICsgXCJweFwiO1xuICAgICAgfSBjYXRjaCB7IH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5jb25zdCBrZXlGb2N1c2VkQ2xhc3NOYW1lID0gXCJzdi1mb2N1c2VkLS1ieS1rZXlcIjtcbmZ1bmN0aW9uIGRvS2V5MkNsaWNrQmx1cihldnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgY29uc3QgZWxlbWVudDogYW55ID0gZXZ0LnRhcmdldDtcbiAgaWYgKCFlbGVtZW50IHx8ICFlbGVtZW50LmNsYXNzTGlzdCkgcmV0dXJuO1xuICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoa2V5Rm9jdXNlZENsYXNzTmFtZSk7XG59XG5cbmZ1bmN0aW9uIGRvS2V5MkNsaWNrVXAoZXZ0OiBLZXlib2FyZEV2ZW50LCBvcHRpb25zID0geyBwcm9jZXNzRXNjOiB0cnVlIH0pOiB2b2lkIHtcbiAgaWYgKCEhZXZ0LnRhcmdldCAmJiAoPGFueT5ldnQudGFyZ2V0KVtcImNvbnRlbnRFZGl0YWJsZVwiXSA9PT0gXCJ0cnVlXCIpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgZWxlbWVudDogYW55ID0gZXZ0LnRhcmdldDtcbiAgaWYgKCFlbGVtZW50KSByZXR1cm47XG4gIGNvbnN0IGNoYXI6IG51bWJlciA9IGV2dC53aGljaCB8fCBldnQua2V5Q29kZTtcbiAgaWYgKGNoYXIgPT09IDkpIHtcbiAgICBpZiAoISFlbGVtZW50LmNsYXNzTGlzdCAmJiAhZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoa2V5Rm9jdXNlZENsYXNzTmFtZSkpIHtcbiAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChrZXlGb2N1c2VkQ2xhc3NOYW1lKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoY2hhciA9PT0gMTMgfHwgY2hhciA9PT0gMzIpIHtcbiAgICBpZiAoZWxlbWVudC5jbGljaykgZWxlbWVudC5jbGljaygpO1xuICB9IGVsc2UgaWYgKG9wdGlvbnMucHJvY2Vzc0VzYyAmJiBjaGFyID09PSAyNykge1xuICAgIGlmIChlbGVtZW50LmJsdXIpIGVsZW1lbnQuYmx1cigpO1xuICB9XG59XG5mdW5jdGlvbiBkb0tleTJDbGlja0Rvd24oZXZ0OiBLZXlib2FyZEV2ZW50LCBvcHRpb25zID0geyBwcm9jZXNzRXNjOiB0cnVlIH0pOiB2b2lkIHtcbiAgaWYgKCEhZXZ0LnRhcmdldCAmJiAoPGFueT5ldnQudGFyZ2V0KVtcImNvbnRlbnRFZGl0YWJsZVwiXSA9PT0gXCJ0cnVlXCIpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIGNoYXIgPSBldnQud2hpY2ggfHwgZXZ0LmtleUNvZGU7XG4gIGNvbnN0IHN1cHBvcnRlZENvZGVzID0gWzEzLCAzMl07XG4gIGlmIChvcHRpb25zLnByb2Nlc3NFc2MpIHtcbiAgICBzdXBwb3J0ZWRDb2Rlcy5wdXNoKDI3KTtcbiAgfVxuICBpZiAoc3VwcG9ydGVkQ29kZXMuaW5kZXhPZihjaGFyKSAhPT0gLTEpIHtcbiAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxufVxuZnVuY3Rpb24gaW5jcmVhc2VIZWlnaHRCeUNvbnRlbnQoZWxlbWVudDogSFRNTEVsZW1lbnQsIGdldENvbXB1dGVkU3R5bGU/OiAoZWx0OiBFbGVtZW50KSA9PiBhbnkpIHtcbiAgaWYgKCFlbGVtZW50KSByZXR1cm47XG4gIGlmICghZ2V0Q29tcHV0ZWRTdHlsZSkgZ2V0Q29tcHV0ZWRTdHlsZSA9IChlbHQ6IEVsZW1lbnQpID0+IHsgcmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsdCk7IH07XG5cbiAgY29uc3Qgc3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xuICBlbGVtZW50LnN0eWxlLmhlaWdodCA9IFwiYXV0b1wiO1xuICBlbGVtZW50LnN0eWxlLmhlaWdodCA9IChlbGVtZW50LnNjcm9sbEhlaWdodCArIHBhcnNlRmxvYXQoc3R5bGUuYm9yZGVyVG9wV2lkdGgpICsgcGFyc2VGbG9hdChzdHlsZS5ib3JkZXJCb3R0b21XaWR0aCkpICsgXCJweFwiO1xufVxuZnVuY3Rpb24gZ2V0T3JpZ2luYWxFdmVudChldmVudDogYW55KSB7XG4gIHJldHVybiBldmVudC5vcmlnaW5hbEV2ZW50IHx8IGV2ZW50O1xufVxuZnVuY3Rpb24gcHJldmVudERlZmF1bHRzKGV2ZW50OiBhbnkpIHtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG59XG5cbmV4cG9ydCB7XG4gIGNvbXBhcmVWZXJzaW9ucyxcbiAgY29uZmlybUFjdGlvbixcbiAgZGV0ZWN0SUVPckVkZ2UsXG4gIGRldGVjdElFQnJvd3NlcixcbiAgbG9hZEZpbGVGcm9tQmFzZTY0LFxuICBpc01vYmlsZSxcbiAgaXNFbGVtZW50VmlzaWJsZSxcbiAgZmluZFNjcm9sbGFibGVQYXJlbnQsXG4gIHNjcm9sbEVsZW1lbnRCeUNoaWxkSWQsXG4gIGNyZWF0ZVN2ZyxcbiAgZG9LZXkyQ2xpY2tCbHVyLFxuICBkb0tleTJDbGlja1VwLFxuICBkb0tleTJDbGlja0Rvd24sXG4gIGdldEljb25OYW1lRnJvbVByb3h5LFxuICBpbmNyZWFzZUhlaWdodEJ5Q29udGVudCxcbiAgZ2V0T3JpZ2luYWxFdmVudCxcbiAgcHJldmVudERlZmF1bHRzXG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX3JlYWN0X187IiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX3JlYWN0X2RvbV9fOyIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9zdXJ2ZXlfY29yZV9fOyJdLCJzb3VyY2VSb290IjoiIn0=
|
|
8982
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC93ZWJwYWNrL3VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3Qvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvZW50cmllcy9jb3JlLWV4cG9ydC50cyIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9lbnRyaWVzL3JlYWN0LXVpLW1vZGVsLnRzIiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL2VudHJpZXMvcmVhY3QtdWkudHMiLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvYm9vbGVhbi1jaGVja2JveC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvYm9vbGVhbi1yYWRpby50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvYm9vbGVhbi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXItaXRlbS1kcm9wZG93bi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXItaXRlbS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXItc2VwYXJhdG9yLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLWJhci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9saXN0L2xpc3QtaXRlbS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9saXN0L2xpc3QudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2NvbXBvbmVudHMvbWF0cml4LWFjdGlvbnMvZGV0YWlsLWJ1dHRvbi9kZXRhaWwtYnV0dG9uLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9jb21wb25lbnRzL21hdHJpeC1hY3Rpb25zL2RyYWctZHJvcC1pY29uL2RyYWctZHJvcC1pY29uLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9jb21wb25lbnRzL21hdHJpeC1hY3Rpb25zL3JlbW92ZS1idXR0b24vcmVtb3ZlLWJ1dHRvbi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9tYXRyaXgvcm93LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9jb21wb25lbnRzL3BhbmVsZHluYW1pYy1hY3Rpb25zL3BhbmVsZHluYW1pYy1hZGQtYnRuLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9jb21wb25lbnRzL3BhbmVsZHluYW1pYy1hY3Rpb25zL3BhbmVsZHluYW1pYy1uZXh0LWJ0bi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9wYW5lbGR5bmFtaWMtYWN0aW9ucy9wYW5lbGR5bmFtaWMtcHJldi1idG4udHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2NvbXBvbmVudHMvcGFuZWxkeW5hbWljLWFjdGlvbnMvcGFuZWxkeW5hbWljLXByb2dyZXNzLXRleHQudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2NvbXBvbmVudHMvcG9wdXAvcG9wdXAudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2NvbXBvbmVudHMvc2tlbGV0b24udHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2NvbXBvbmVudHMvc3VydmV5LWhlYWRlci9sb2dvLWltYWdlLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9jb21wb25lbnRzL3N1cnZleS1oZWFkZXIvc3VydmV5LWhlYWRlci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9zdmctaWNvbi9zdmctaWNvbi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy90aXRsZS9kZWZhdWx0LXRpdGxlLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9jb21wb25lbnRzL3RpdGxlL3RpdGxlLWFjdGlvbnMudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2NvbXBvbmVudHMvdGl0bGUvdGl0bGUtY29udGVudC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy90aXRsZS90aXRsZS1lbGVtZW50LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9jdXN0b20td2lkZ2V0LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9lbGVtZW50LWZhY3RvcnkudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2Zsb3ctcGFuZWwudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2ltYWdlLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9pbWFnZXBpY2tlci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcGFnZS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcGFuZWwtYmFzZS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcGFuZWwudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JhdGluZy1kcm9wZG93bi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RTdXJ2ZXkudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0U3VydmV5TmF2aWdhdGlvbi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RTdXJ2ZXlOYXZpZ2F0aW9uQmFzZS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RTdXJ2ZXlQcm9ncmVzcy50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RTdXJ2ZXlQcm9ncmVzc0J1dHRvbnMudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0U3VydmV5V2luZG93LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uX2J1dHRvbmdyb3VwLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uX2NoZWNrYm94LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uX2NvbW1lbnQudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fY3VzdG9tLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uX2Ryb3Bkb3duLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uX2VsZW1lbnQudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fZW1wdHkudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fZXhwcmVzc2lvbi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbl9mYWN0b3J5LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uX2ZpbGUudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25faHRtbC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbl9tYXRyaXgudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fbWF0cml4ZHJvcGRvd24udHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fbWF0cml4ZHJvcGRvd25iYXNlLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uX21hdHJpeGR5bmFtaWMudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fbXVsdGlwbGV0ZXh0LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uX3BhbmVsZHluYW1pYy50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbl9yYWRpb2dyb3VwLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uX3JhbmtpbmcudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fcmF0aW5nLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uX3RleHQudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0c3VydmV5bW9kZWwudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0dGltZXJwYW5lbC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3Qvcm93LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9zaWduYXR1cmVwYWQudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3N0cmluZy1lZGl0b3IudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3N0cmluZy12aWV3ZXIudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3NldHRpbmdzLnRzIiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3V0aWxzL3Jlc3BvbnNpdml0eS1tYW5hZ2VyLnRzIiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3V0aWxzL3V0aWxzLnRzIiwid2VicGFjazovL1N1cnZleVJlYWN0L2V4dGVybmFsIHtcInJvb3RcIjpcIlJlYWN0XCIsXCJjb21tb25qczJcIjpcInJlYWN0XCIsXCJjb21tb25qc1wiOlwicmVhY3RcIixcImFtZFwiOlwicmVhY3RcIn0iLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvZXh0ZXJuYWwge1wicm9vdFwiOlwiUmVhY3RET01cIixcImNvbW1vbmpzMlwiOlwicmVhY3QtZG9tXCIsXCJjb21tb25qc1wiOlwicmVhY3QtZG9tXCIsXCJhbWRcIjpcInJlYWN0LWRvbVwifSIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC9leHRlcm5hbCB7XCJyb290XCI6XCJTdXJ2ZXlcIixcImNvbW1vbmpzMlwiOlwic3VydmV5LWNvcmVcIixcImNvbW1vbmpzXCI6XCJzdXJ2ZXktY29yZVwiLFwiYW1kXCI6XCJzdXJ2ZXktY29yZVwifSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxPO1FDVkE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7OztRQUdBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwwQ0FBMEMsZ0NBQWdDO1FBQzFFO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0Esd0RBQXdELGtCQUFrQjtRQUMxRTtRQUNBLGlEQUFpRCxjQUFjO1FBQy9EOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSx5Q0FBeUMsaUNBQWlDO1FBQzFFLGdIQUFnSCxtQkFBbUIsRUFBRTtRQUNySTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDJCQUEyQiwwQkFBMEIsRUFBRTtRQUN2RCxpQ0FBaUMsZUFBZTtRQUNoRDtRQUNBO1FBQ0E7O1FBRUE7UUFDQSxzREFBc0QsK0RBQStEOztRQUVySDtRQUNBOzs7UUFHQTtRQUNBOzs7Ozs7Ozs7Ozs7O0FDbEZBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFvRTtBQUM3QjtBQUN5Qjs7Ozs7Ozs7Ozs7OztBQ0ZoRTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUFRO0FBQ3VEO0FBQ1E7QUFDRztBQUNkO0FBQ007QUFDdkI7QUFDRjtBQUNJO0FBQ1M7QUFLdEI7QUFJUTtBQUlBO0FBSUM7QUFJRDtBQUNpQztBQUlsQztBQUMwQjtBQUNBO0FBQ2dCO0FBQ0o7QUFDWjtBQUNSO0FBQ2lCO0FB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QUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRXJHLElBQU0sS0FBSyxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3hDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUM5QixPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEksQ0FBQztBQUNELFNBQVMsZ0JBQWdCLENBQUMsS0FBVTtJQUNsQyxPQUFPLEtBQUssQ0FBQyxhQUFhLElBQUksS0FBSyxDQUFDO0FBQ3RDLENBQUM7QUFDRCxTQUFTLGVBQWUsQ0FBQyxLQUFVO0lBQ2pDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN2QixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7QUFDMUIsQ0FBQztBQW9CQzs7Ozs7Ozs7Ozs7O0FDdlBGLG1EOzs7Ozs7Ozs7OztBQ0FBLHVEOzs7Ozs7Ozs7OztBQ0FBLHlEIiwiZmlsZSI6InN1cnZleS1yZWFjdC11aS5qcyIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcInJlYWN0XCIpLCByZXF1aXJlKFwicmVhY3QtZG9tXCIpLCByZXF1aXJlKFwic3VydmV5LWNvcmVcIikpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoXCJzdXJ2ZXktcmVhY3QtdWlcIiwgW1wicmVhY3RcIiwgXCJyZWFjdC1kb21cIiwgXCJzdXJ2ZXktY29yZVwiXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJzdXJ2ZXktcmVhY3QtdWlcIl0gPSBmYWN0b3J5KHJlcXVpcmUoXCJyZWFjdFwiKSwgcmVxdWlyZShcInJlYWN0LWRvbVwiKSwgcmVxdWlyZShcInN1cnZleS1jb3JlXCIpKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJTdXJ2ZXlSZWFjdFwiXSA9IGZhY3Rvcnkocm9vdFtcIlJlYWN0XCJdLCByb290W1wiUmVhY3RET01cIl0sIHJvb3RbXCJTdXJ2ZXlcIl0pO1xufSkodGhpcywgZnVuY3Rpb24oX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9yZWFjdF9fLCBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX3JlYWN0X2RvbV9fLCBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX3N1cnZleV9jb3JlX18pIHtcbnJldHVybiAiLCIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gXCIuL3NyYy9lbnRyaWVzL3JlYWN0LXVpLnRzXCIpO1xuIiwiZXhwb3J0IHsgU3VydmV5TW9kZWwsIE1vZGVsLCBTdXJ2ZXlXaW5kb3dNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuZXhwb3J0IHsgc2V0dGluZ3MgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmV4cG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiwgc3VydmV5U3RyaW5ncyB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuIiwiLy8gcmVhY3RcbmV4cG9ydCB7IFN1cnZleSwgYXR0YWNoS2V5MmNsaWNrIH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0U3VydmV5XCI7XG5leHBvcnQgeyBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlciB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHN1cnZleW1vZGVsXCI7XG5leHBvcnQgeyBTdXJ2ZXlOYXZpZ2F0aW9uQmFzZSB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdFN1cnZleU5hdmlnYXRpb25CYXNlXCI7XG5leHBvcnQgeyBTdXJ2ZXlUaW1lclBhbmVsIH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0dGltZXJwYW5lbFwiO1xuZXhwb3J0IHsgU3VydmV5TmF2aWdhdGlvbiB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdFN1cnZleU5hdmlnYXRpb25cIjtcbmV4cG9ydCB7IFN1cnZleVBhZ2UgfSBmcm9tIFwiLi4vcmVhY3QvcGFnZVwiO1xuZXhwb3J0IHsgU3VydmV5Um93IH0gZnJvbSBcIi4uL3JlYWN0L3Jvd1wiO1xuZXhwb3J0IHsgU3VydmV5UGFuZWwgfSBmcm9tIFwiLi4vcmVhY3QvcGFuZWxcIjtcbmV4cG9ydCB7IFN1cnZleUZsb3dQYW5lbCB9IGZyb20gXCIuLi9yZWFjdC9mbG93LXBhbmVsXCI7XG5leHBvcnQge1xuICBTdXJ2ZXlRdWVzdGlvbixcbiAgU3VydmV5RWxlbWVudEVycm9ycyxcbiAgU3VydmV5UXVlc3Rpb25BbmRFcnJvcnNDZWxsLFxufSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvblwiO1xuZXhwb3J0IHtcbiAgU3VydmV5RWxlbWVudEJhc2UsXG4gIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UsXG59IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmV4cG9ydCB7XG4gIFN1cnZleVF1ZXN0aW9uQ29tbWVudEl0ZW0sXG4gIFN1cnZleVF1ZXN0aW9uQ29tbWVudCxcbn0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25fY29tbWVudFwiO1xuZXhwb3J0IHtcbiAgU3VydmV5UXVlc3Rpb25DaGVja2JveCxcbiAgU3VydmV5UXVlc3Rpb25DaGVja2JveEl0ZW0sXG59IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX2NoZWNrYm94XCI7XG5leHBvcnQge1xuICBTdXJ2ZXlRdWVzdGlvblJhbmtpbmcsXG4gIFN1cnZleVF1ZXN0aW9uUmFua2luZ0l0ZW0sXG59IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX3JhbmtpbmdcIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uRHJvcGRvd24gfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbl9kcm9wZG93blwiO1xuZXhwb3J0IHtcbiAgU3VydmV5UXVlc3Rpb25NYXRyaXgsXG4gIFN1cnZleVF1ZXN0aW9uTWF0cml4Um93LFxufSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbl9tYXRyaXhcIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uSHRtbCB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX2h0bWxcIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uRmlsZSB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX2ZpbGVcIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uTXVsdGlwbGVUZXh0IH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25fbXVsdGlwbGV0ZXh0XCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvblJhZGlvZ3JvdXAgfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbl9yYWRpb2dyb3VwXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvblRleHQgfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbl90ZXh0XCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkJvb2xlYW4gfSBmcm9tIFwiLi4vcmVhY3QvYm9vbGVhblwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25Cb29sZWFuQ2hlY2tib3ggfSBmcm9tIFwiLi4vcmVhY3QvYm9vbGVhbi1jaGVja2JveFwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25Cb29sZWFuUmFkaW8gfSBmcm9tIFwiLi4vcmVhY3QvYm9vbGVhbi1yYWRpb1wiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25FbXB0eSB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX2VtcHR5XCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbk1hdHJpeERyb3Bkb3duQ2VsbCB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX21hdHJpeGRyb3Bkb3duYmFzZVwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25NYXRyaXhEcm9wZG93biB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX21hdHJpeGRyb3Bkb3duXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbk1hdHJpeER5bmFtaWMgfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbl9tYXRyaXhkeW5hbWljXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pYyB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX3BhbmVsZHluYW1pY1wiO1xuZXhwb3J0IHsgU3VydmV5UHJvZ3Jlc3MgfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RTdXJ2ZXlQcm9ncmVzc1wiO1xuZXhwb3J0IHsgU3VydmV5UHJvZ3Jlc3NCdXR0b25zIH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0U3VydmV5UHJvZ3Jlc3NCdXR0b25zXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvblJhdGluZyB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX3JhdGluZ1wiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25SYXRpbmdEcm9wZG93biB9IGZyb20gXCIuLi9yZWFjdC9yYXRpbmctZHJvcGRvd25cIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uRXhwcmVzc2lvbiB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX2V4cHJlc3Npb25cIjtcbmV4cG9ydCB7IFN1cnZleVdpbmRvdyB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdFN1cnZleVdpbmRvd1wiO1xuZXhwb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5leHBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4uL3JlYWN0L2VsZW1lbnQtZmFjdG9yeVwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25JbWFnZVBpY2tlciB9IGZyb20gXCIuLi9yZWFjdC9pbWFnZXBpY2tlclwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25JbWFnZSB9IGZyb20gXCIuLi9yZWFjdC9pbWFnZVwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25TaWduYXR1cmVQYWQgfSBmcm9tIFwiLi4vcmVhY3Qvc2lnbmF0dXJlcGFkXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkJ1dHRvbkdyb3VwIH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25fYnV0dG9uZ3JvdXBcIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uQ3VzdG9tLCBTdXJ2ZXlRdWVzdGlvbkNvbXBvc2l0ZSB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX2N1c3RvbVwiO1xuXG5leHBvcnQgeyBEZWZhdWx0VGl0bGUgfSBmcm9tIFwiLi4vcmVhY3QvY29tcG9uZW50cy90aXRsZS9kZWZhdWx0LXRpdGxlXCI7XG5leHBvcnQgeyBQb3B1cCB9IGZyb20gXCIuLi9yZWFjdC9jb21wb25lbnRzL3BvcHVwL3BvcHVwXCI7XG5leHBvcnQgeyBMaXN0IH0gZnJvbSBcIi4uL3JlYWN0L2NvbXBvbmVudHMvbGlzdC9saXN0XCI7XG5leHBvcnQgeyBUaXRsZUFjdGlvbnMgfSBmcm9tIFwiLi4vcmVhY3QvY29tcG9uZW50cy90aXRsZS90aXRsZS1hY3Rpb25zXCI7XG5leHBvcnQgeyBUaXRsZUVsZW1lbnQgfSBmcm9tIFwiLi4vcmVhY3QvY29tcG9uZW50cy90aXRsZS90aXRsZS1lbGVtZW50XCI7XG5leHBvcnQgeyBTdXJ2ZXlBY3Rpb25CYXIgfSBmcm9tIFwiLi4vcmVhY3QvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXJcIjtcbmV4cG9ydCB7IExvZ29JbWFnZSB9IGZyb20gXCIuLi9yZWFjdC9jb21wb25lbnRzL3N1cnZleS1oZWFkZXIvbG9nby1pbWFnZVwiO1xuZXhwb3J0IHsgU3VydmV5SGVhZGVyIH0gZnJvbSBcIi4uL3JlYWN0L2NvbXBvbmVudHMvc3VydmV5LWhlYWRlci9zdXJ2ZXktaGVhZGVyXCI7XG5leHBvcnQgeyBTdmdJY29uIH0gZnJvbSBcIi4uL3JlYWN0L2NvbXBvbmVudHMvc3ZnLWljb24vc3ZnLWljb25cIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pY1JlbW92ZUJ1dHRvbiB9IGZyb20gXCIuLi9yZWFjdC9jb21wb25lbnRzL21hdHJpeC1hY3Rpb25zL3JlbW92ZS1idXR0b24vcmVtb3ZlLWJ1dHRvblwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25NYXRyaXhEZXRhaWxCdXR0b24gfSBmcm9tIFwiLi4vcmVhY3QvY29tcG9uZW50cy9tYXRyaXgtYWN0aW9ucy9kZXRhaWwtYnV0dG9uL2RldGFpbC1idXR0b25cIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pY0RyYWdEcm9wSWNvbiB9IGZyb20gXCIuLi9yZWFjdC9jb21wb25lbnRzL21hdHJpeC1hY3Rpb25zL2RyYWctZHJvcC1pY29uL2RyYWctZHJvcC1pY29uXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY0FkZEJ1dHRvbiB9IGZyb20gXCIuLi9yZWFjdC9jb21wb25lbnRzL3BhbmVsZHluYW1pYy1hY3Rpb25zL3BhbmVsZHluYW1pYy1hZGQtYnRuXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY1ByZXZCdXR0b24gfSBmcm9tIFwiLi4vcmVhY3QvY29tcG9uZW50cy9wYW5lbGR5bmFtaWMtYWN0aW9ucy9wYW5lbGR5bmFtaWMtcHJldi1idG5cIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljTmV4dEJ1dHRvbiB9IGZyb20gXCIuLi9yZWFjdC9jb21wb25lbnRzL3BhbmVsZHluYW1pYy1hY3Rpb25zL3BhbmVsZHluYW1pYy1uZXh0LWJ0blwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNQcm9ncmVzc1RleHQgfSBmcm9tIFwiLi4vcmVhY3QvY29tcG9uZW50cy9wYW5lbGR5bmFtaWMtYWN0aW9ucy9wYW5lbGR5bmFtaWMtcHJvZ3Jlc3MtdGV4dFwiO1xuXG5leHBvcnQgeyBNYXRyaXhSb3cgfSBmcm9tIFwiLi4vcmVhY3QvY29tcG9uZW50cy9tYXRyaXgvcm93XCI7XG5leHBvcnQgeyBTa2VsZXRvbiB9IGZyb20gXCIuLi9yZWFjdC9jb21wb25lbnRzL3NrZWxldG9uXCI7XG5cbmV4cG9ydCB7IFN1cnZleUxvY1N0cmluZ1ZpZXdlciB9IGZyb20gXCIuLi9yZWFjdC9zdHJpbmctdmlld2VyXCI7XG5leHBvcnQgeyBTdXJ2ZXlMb2NTdHJpbmdFZGl0b3IgfSBmcm9tIFwiLi4vcmVhY3Qvc3RyaW5nLWVkaXRvclwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL3V0aWxzL3Jlc3BvbnNpdml0eS1tYW5hZ2VyXCI7XG5leHBvcnQgeyB1bndyYXAgfSBmcm9tIFwiLi4vdXRpbHMvdXRpbHNcIjtcblxuLy9VbmNvbW1lbnQgdG8gaW5jbHVkZSB0aGUgXCJkYXRlXCIgcXVlc3Rpb24gdHlwZS5cbi8vZXhwb3J0IHtkZWZhdWx0IGFzIFN1cnZleVF1ZXN0aW9uRGF0ZX0gZnJvbSBcIi4uL3BsdWdpbnMvcmVhY3QvcmVhY3RxdWVzdGlvbmRhdGVcIjtcbiIsImV4cG9ydCAqIGZyb20gXCIuL3JlYWN0LXVpLW1vZGVsXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb3JlLWV4cG9ydFwiOyIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUmVuZGVyZXJGYWN0b3J5IH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25Cb29sZWFuIH0gZnJvbSBcIi4vYm9vbGVhblwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25Cb29sZWFuQ2hlY2tib3ggZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkJvb2xlYW4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBjc3NDbGFzc2VzID0gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIGNvbnN0IGl0ZW1DbGFzcyA9IHRoaXMucXVlc3Rpb24uZ2V0SXRlbUNzcygpO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5yb290fT5cbiAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT17aXRlbUNsYXNzfSBvbkNsaWNrPXt0aGlzLmhhbmRsZU9uQ2xpY2t9PlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgcmVmPXt0aGlzLmNoZWNrUmVmfVxuICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgIG5hbWU9e3RoaXMucXVlc3Rpb24ubmFtZX1cbiAgICAgICAgICAgIHZhbHVlPXtcbiAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbi5jaGVja2VkVmFsdWUgPT09IG51bGxcbiAgICAgICAgICAgICAgICA/IFwiXCJcbiAgICAgICAgICAgICAgICA6IHRoaXMucXVlc3Rpb24uY2hlY2tlZFZhbHVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZD17dGhpcy5xdWVzdGlvbi5pbnB1dElkfVxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLmNvbnRyb2x9XG4gICAgICAgICAgICBkaXNhYmxlZD17dGhpcy5pc0Rpc3BsYXlNb2RlfVxuICAgICAgICAgICAgY2hlY2tlZD17dGhpcy5xdWVzdGlvbi5jaGVja2VkVmFsdWUgfHwgZmFsc2V9XG4gICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVPbkNoYW5nZX1cbiAgICAgICAgICAgIGFyaWEtcmVxdWlyZWQ9e3RoaXMucXVlc3Rpb24uYXJpYVJlcXVpcmVkfVxuICAgICAgICAgICAgYXJpYS1sYWJlbD17dGhpcy5xdWVzdGlvbi5hcmlhTGFiZWx9XG4gICAgICAgICAgICBhcmlhLWludmFsaWQ9e3RoaXMucXVlc3Rpb24uYXJpYUludmFsaWR9XG4gICAgICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PXt0aGlzLnF1ZXN0aW9uLmFyaWFEZXNjcmliZWRCeX1cbiAgICAgICAgICAvPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5tYXRlcmlhbERlY29yYXRvcn0+XG4gICAgICAgICAgICB7IHRoaXMucXVlc3Rpb24uc3ZnSWNvbiA/XG4gICAgICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuaXRlbURlY29yYXRvcn1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDx1c2UgeGxpbmtIcmVmPXt0aGlzLnF1ZXN0aW9uLnN2Z0ljb259PjwvdXNlPlxuICAgICAgICAgICAgICA8L3N2Zz46XG4gICAgICAgICAgICAgIDxzdmcgdmlld0JveD1cIjAgMCAyNCAyNFwiIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5pdGVtRGVjb3JhdG9yfT5cbiAgICAgICAgICAgICAgICA8cmVjdFxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLnVuY2hlY2tlZFBhdGh9XG4gICAgICAgICAgICAgICAgICB4PVwiNVwiXG4gICAgICAgICAgICAgICAgICB5PVwiMTBcIlxuICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxNFwiXG4gICAgICAgICAgICAgICAgICBoZWlnaHQ9XCI0XCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxwb2x5Z29uXG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuY2hlY2tlZFBhdGh9XG4gICAgICAgICAgICAgICAgICBwb2ludHM9XCIxOSwxMCAxNCwxMCAxNCw1IDEwLDUgMTAsMTAgNSwxMCA1LDE0IDEwLDE0IDEwLDE5IDE0LDE5IDE0LDE0IDE5LDE0IFwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLmluZGV0ZXJtaW5hdGVQYXRofVxuICAgICAgICAgICAgICAgICAgZD1cIk0yMiwwSDJDMC45LDAsMCwwLjksMCwydjIwYzAsMS4xLDAuOSwyLDIsMmgyMGMxLjEsMCwyLTAuOSwyLTJWMkMyNCwwLjksMjMuMSwwLDIyLDB6IE0yMSwxOEw2LDNoMTVWMTh6IE0zLDZsMTUsMTVIM1Y2elwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJjaGVja1wiIC8+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIHt0aGlzLnF1ZXN0aW9uLnRpdGxlTG9jYXRpb24gPT09IFwiaGlkZGVuXCIgJiYgKFxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldExhYmVsQ3NzKGZhbHNlKX0+XG4gICAgICAgICAgICAgIHt0aGlzLnJlbmRlckxvY1N0cmluZyh0aGlzLnF1ZXN0aW9uLmxvY0Rpc3BsYXlMYWJlbCl9XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcbiAgXCJzdi1ib29sZWFuLWNoZWNrYm94XCIsXG4gIChwcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uQm9vbGVhbkNoZWNrYm94LCBwcm9wcyk7XG4gIH1cbik7XG5cblJlbmRlcmVyRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclJlbmRlcmVyKFxuICBcImJvb2xlYW5cIixcbiAgXCJjaGVja2JveFwiLFxuICBcInN2LWJvb2xlYW4tY2hlY2tib3hcIlxuKTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUmVuZGVyZXJGYWN0b3J5IH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25Cb29sZWFuIH0gZnJvbSBcIi4vYm9vbGVhblwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25Cb29sZWFuUmFkaW8gZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkJvb2xlYW4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByaXZhdGUgcmVuZGVyUmFkaW9JdGVtKHZhbHVlOiBhbnksIGxvY1RleHQ6IGFueSk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBjc3NDbGFzc2VzID0gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IHJvbGU9XCJwcmVzZW50YXRpb25cIiBjbGFzc05hbWU9eyB0aGlzLnF1ZXN0aW9uLmdldFJhZGlvSXRlbUNsYXNzKGNzc0NsYXNzZXMsIHZhbHVlKSB9PlxuICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPSB7IGNzc0NsYXNzZXMucmFkaW9MYWJlbCB9PlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICAgIG5hbWUgPSB7IHRoaXMucXVlc3Rpb24ubmFtZSB9XG4gICAgICAgICAgICB2YWx1ZSA9IHsgdmFsdWUgfVxuICAgICAgICAgICAgYXJpYS1kZXNjcmliZWRieSA9IHsgdGhpcy5xdWVzdGlvbi5hcmlhRGVzY3JpYmVkQnkgfVxuICAgICAgICAgICAgY2hlY2tlZCA9IHsgdmFsdWUgPT09IHRoaXMucXVlc3Rpb24udmFsdWUgfVxuICAgICAgICAgICAgZGlzYWJsZWQgPSB7IHRoaXMucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5IH1cbiAgICAgICAgICAgIGNsYXNzTmFtZSA9IHsgY3NzQ2xhc3Nlcy5pdGVtQ29udHJvbCB9XG4gICAgICAgICAgICBvbkNoYW5nZT17IHRoaXMuaGFuZGxlT25DaGFuZ2UgfVxuICAgICAgICAgIC8+XG4gICAgICAgICAgeyB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMubWF0ZXJpYWxSYWRpb0RlY29yYXRvcj9cbiAgICAgICAgICAgICg8c3BhbiBjbGFzc05hbWU9eyBjc3NDbGFzc2VzLm1hdGVyaWFsUmFkaW9EZWNvcmF0b3IgfT5cbiAgICAgICAgICAgICAgeyB0aGlzLnF1ZXN0aW9uLml0ZW1TdmdJY29uID9cbiAgICAgICAgICAgICAgICAoPHN2ZyBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuaXRlbVJhZGlvRGVjb3JhdG9yfT5cbiAgICAgICAgICAgICAgICAgIDx1c2UgeGxpbmtIcmVmPXt0aGlzLnF1ZXN0aW9uLml0ZW1TdmdJY29ufT48L3VzZT5cbiAgICAgICAgICAgICAgICA8L3N2Zz4pOm51bGx9XG4gICAgICAgICAgICA8L3NwYW4+KTpudWxsfVxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT0geyBjc3NDbGFzc2VzLnJhZGlvQ29udHJvbExhYmVsIH0+XG4gICAgICAgICAgICB7IHRoaXMucmVuZGVyTG9jU3RyaW5nKGxvY1RleHQpIH1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIGhhbmRsZU9uQ2hhbmdlID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICB0aGlzLnF1ZXN0aW9uLnZhbHVlID0gZXZlbnQubmF0aXZlRXZlbnQudGFyZ2V0LnZhbHVlO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBjc3NDbGFzc2VzID0gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5yb290UmFkaW99PlxuICAgICAgICA8ZmllbGRzZXQgcm9sZT1cInByZXNlbnRhdGlvblwiIGNsYXNzTmFtZT0geyBjc3NDbGFzc2VzLnJhZGlvRmllbGRzZXQgfT5cbiAgICAgICAgICB7IHRoaXMucmVuZGVyUmFkaW9JdGVtKGZhbHNlLCB0aGlzLnF1ZXN0aW9uLmxvY0xhYmVsRmFsc2UpIH1cbiAgICAgICAgICB7IHRoaXMucmVuZGVyUmFkaW9JdGVtKHRydWUsIHRoaXMucXVlc3Rpb24ubG9jTGFiZWxUcnVlKSB9XG4gICAgICAgIDwvZmllbGRzZXQ+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXG4gIFwic3YtYm9vbGVhbi1yYWRpb1wiLFxuICAocHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbkJvb2xlYW5SYWRpbywgcHJvcHMpO1xuICB9XG4pO1xuXG5SZW5kZXJlckZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJSZW5kZXJlcihcbiAgXCJib29sZWFuXCIsXG4gIFwicmFkaW9cIixcbiAgXCJzdi1ib29sZWFuLXJhZGlvXCJcbik7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFF1ZXN0aW9uQm9vbGVhbk1vZGVsLCBDc3NDbGFzc0J1aWxkZXIsIEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkJvb2xlYW4gZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgcHJvdGVjdGVkIGNoZWNrUmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTElucHV0RWxlbWVudD47XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5oYW5kbGVPbkNoYW5nZSA9IHRoaXMuaGFuZGxlT25DaGFuZ2UuYmluZCh0aGlzKTtcbiAgICB0aGlzLmhhbmRsZU9uQ2xpY2sgPSB0aGlzLmhhbmRsZU9uQ2xpY2suYmluZCh0aGlzKTtcbiAgICB0aGlzLmhhbmRsZU9uTGFiZWxDbGljayA9IHRoaXMuaGFuZGxlT25MYWJlbENsaWNrLmJpbmQodGhpcyk7XG4gICAgdGhpcy5oYW5kbGVPblN3aXRjaENsaWNrID0gdGhpcy5oYW5kbGVPblN3aXRjaENsaWNrLmJpbmQodGhpcyk7XG4gICAgdGhpcy5jaGVja1JlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb247XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbkJvb2xlYW5Nb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFF1ZXN0aW9uQm9vbGVhbk1vZGVsO1xuICB9XG4gIC8qXG4gIHByaXZhdGUgZ2V0IGFsbG93Q2xpY2soKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb24uaXNJbmRldGVybWluYXRlICYmICF0aGlzLmlzRGlzcGxheU1vZGU7XG4gIH1cbiAgKi9cbiAgcHJpdmF0ZSBkb0NoZWNrKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5xdWVzdGlvbi5jaGVja2VkVmFsdWUgPSB2YWx1ZTtcbiAgfVxuICBoYW5kbGVPbkNoYW5nZShldmVudDogYW55KSB7XG4gICAgdGhpcy5kb0NoZWNrKGV2ZW50LnRhcmdldC5jaGVja2VkKTtcbiAgfVxuICBoYW5kbGVPbkNsaWNrKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnF1ZXN0aW9uLm9uTGFiZWxDbGljayhldmVudCwgdHJ1ZSk7XG4gIH1cbiAgaGFuZGxlT25Td2l0Y2hDbGljayhldmVudDogYW55KSB7XG4gICAgdGhpcy5xdWVzdGlvbi5vblN3aXRjaENsaWNrTW9kZWwoZXZlbnQubmF0aXZlRXZlbnQpO1xuICB9XG4gIGhhbmRsZU9uTGFiZWxDbGljayhldmVudDogYW55LCB2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMucXVlc3Rpb24ub25MYWJlbENsaWNrKGV2ZW50LCB2YWx1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdXBkYXRlRG9tRWxlbWVudCgpIHtcbiAgICBpZiAoIXRoaXMucXVlc3Rpb24pIHJldHVybjtcbiAgICBjb25zdCBlbCA9IHRoaXMuY2hlY2tSZWYuY3VycmVudDtcbiAgICBpZiAoZWwpIHtcbiAgICAgIGVsLmluZGV0ZXJtaW5hdGUgPSB0aGlzLnF1ZXN0aW9uLmlzSW5kZXRlcm1pbmF0ZTtcbiAgICB9XG4gICAgdGhpcy5jb250cm9sID0gZWw7XG4gICAgc3VwZXIudXBkYXRlRG9tRWxlbWVudCgpO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBjc3NDbGFzc2VzID0gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIGNvbnN0IGl0ZW1DbGFzczogc3RyaW5nID0gdGhpcy5xdWVzdGlvbi5nZXRJdGVtQ3NzKCk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLnJvb3R9PlxuICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPXtpdGVtQ2xhc3N9IG9uQ2xpY2s9e3RoaXMuaGFuZGxlT25DbGlja30+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICByZWY9e3RoaXMuY2hlY2tSZWZ9XG4gICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgbmFtZT17dGhpcy5xdWVzdGlvbi5uYW1lfVxuICAgICAgICAgICAgdmFsdWU9e1xuICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9uLmNoZWNrZWRWYWx1ZSA9PT0gbnVsbFxuICAgICAgICAgICAgICAgID8gXCJcIlxuICAgICAgICAgICAgICAgIDogdGhpcy5xdWVzdGlvbi5jaGVja2VkVmFsdWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlkPXt0aGlzLnF1ZXN0aW9uLmlucHV0SWR9XG4gICAgICAgICAgICBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuY29udHJvbH1cbiAgICAgICAgICAgIGRpc2FibGVkPXt0aGlzLmlzRGlzcGxheU1vZGV9XG4gICAgICAgICAgICBjaGVja2VkPXt0aGlzLnF1ZXN0aW9uLmNoZWNrZWRWYWx1ZSB8fCBmYWxzZX1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZU9uQ2hhbmdlfVxuICAgICAgICAgICAgYXJpYS1yZXF1aXJlZD17dGhpcy5xdWVzdGlvbi5hcmlhUmVxdWlyZWR9XG4gICAgICAgICAgICBhcmlhLWxhYmVsPXt0aGlzLnF1ZXN0aW9uLmFyaWFMYWJlbH1cbiAgICAgICAgICAgIGFyaWEtaW52YWxpZD17dGhpcy5xdWVzdGlvbi5hcmlhSW52YWxpZH1cbiAgICAgICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9e3RoaXMucXVlc3Rpb24uYXJpYURlc2NyaWJlZEJ5fVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRMYWJlbENzcyhmYWxzZSl9XG4gICAgICAgICAgICBvbkNsaWNrPXsoZXZlbnQpID0+IHRoaXMuaGFuZGxlT25MYWJlbENsaWNrKGV2ZW50LCBmYWxzZSl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge3RoaXMucmVuZGVyTG9jU3RyaW5nKHRoaXMucXVlc3Rpb24ubG9jTGFiZWxGYWxzZSl9XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLnN3aXRjaH0gb25DbGljaz17dGhpcy5oYW5kbGVPblN3aXRjaENsaWNrfT5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5zbGlkZXJ9PlxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbi5pc0RldGVybWluYXRlZCAmJiBjc3NDbGFzc2VzLnNsaWRlclRleHQgP1xuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtjc3NDbGFzc2VzLnNsaWRlclRleHR9PnsgdGhpcy5yZW5kZXJMb2NTdHJpbmcodGhpcy5xdWVzdGlvbi5nZXRDaGVja2VkTGFiZWwoKSkgfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRMYWJlbENzcyh0cnVlKX1cbiAgICAgICAgICAgIG9uQ2xpY2s9eyhldmVudCkgPT4gdGhpcy5oYW5kbGVPbkxhYmVsQ2xpY2soZXZlbnQsIHRydWUpfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt0aGlzLnJlbmRlckxvY1N0cmluZyh0aGlzLnF1ZXN0aW9uLmxvY0xhYmVsVHJ1ZSl9XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiYm9vbGVhblwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25Cb29sZWFuLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IHsgQWN0aW9uRHJvcGRvd25WaWV3TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcclxuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWZhY3RvcnlcIjtcclxuaW1wb3J0IHsgUG9wdXAgfSBmcm9tIFwiLi4vcG9wdXAvcG9wdXBcIjtcclxuaW1wb3J0IHsgU3VydmV5QWN0aW9uQmFySXRlbSB9IGZyb20gXCIuL2FjdGlvbi1iYXItaXRlbVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleUFjdGlvbkJhckl0ZW1Ecm9wZG93biBleHRlbmRzIFN1cnZleUFjdGlvbkJhckl0ZW0ge1xyXG4gIHByaXZhdGUgdmlld01vZGVsOiBBY3Rpb25Ecm9wZG93blZpZXdNb2RlbDtcclxuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XHJcbiAgICBzdXBlcihwcm9wcyk7XHJcbiAgICB0aGlzLnZpZXdNb2RlbCA9IG5ldyBBY3Rpb25Ecm9wZG93blZpZXdNb2RlbCh0aGlzLml0ZW0pO1xyXG4gIH1cclxuICByZW5kZXJCdXR0b25Db250ZW50KCkge1xyXG4gICAgY29uc3QgYnV0dG9uQ29udGVudCA9IHN1cGVyLnJlbmRlckJ1dHRvbkNvbnRlbnQoKTtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIDw+XHJcbiAgICAgICAge2J1dHRvbkNvbnRlbnR9XHJcbiAgICAgICAgPFBvcHVwIG1vZGVsPXt0aGlzLml0ZW0ucG9wdXBNb2RlbH0+PC9Qb3B1cD5cclxuICAgICAgPC8+XHJcbiAgICApO1xyXG4gIH1cclxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpOiB2b2lkIHtcclxuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XHJcbiAgICB0aGlzLnZpZXdNb2RlbC5kaXNwb3NlKCk7XHJcbiAgfVxyXG59XHJcblxyXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2LWFjdGlvbi1iYXItaXRlbS1kcm9wZG93blwiLCAocHJvcHMpID0+IHtcclxuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlBY3Rpb25CYXJJdGVtRHJvcGRvd24sIHByb3BzKTtcclxufSk7XHJcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IHsgQmFzZSwgQWN0aW9uIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XHJcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1mYWN0b3J5XCI7XHJcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcIi4uLy4uL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xyXG5pbXBvcnQgeyBhdHRhY2hLZXkyY2xpY2sgfSBmcm9tIFwiLi4vLi4vcmVhY3RTdXJ2ZXlcIjtcclxuaW1wb3J0IHsgU3ZnSWNvbiB9IGZyb20gXCIuLi9zdmctaWNvbi9zdmctaWNvblwiO1xyXG5pbXBvcnQgeyBTdXJ2ZXlBY3Rpb25CYXJTZXBhcmF0b3IgfSBmcm9tIFwiLi9hY3Rpb24tYmFyLXNlcGFyYXRvclwiO1xyXG5cclxuaW50ZXJmYWNlIElBY3Rpb25CYXJJdGVtUHJvcHMge1xyXG4gIGl0ZW06IEFjdGlvbjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleUFjdGlvbiBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPElBY3Rpb25CYXJJdGVtUHJvcHMsIGFueT4ge1xyXG4gIGdldCBpdGVtKCkge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbTtcclxuICB9XHJcbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcclxuICAgIHJldHVybiB0aGlzLml0ZW07XHJcbiAgfVxyXG5cclxuICByZW5kZXJFbGVtZW50KCkge1xyXG4gICAgLy9yZWZhY3RvclxyXG4gICAgY29uc3QgaXRlbUNsYXNzID0gdGhpcy5pdGVtLmdldEFjdGlvblJvb3RDc3MoKTtcclxuICAgIGNvbnN0IHNlcGFyYXRvciA9IHRoaXMuaXRlbS5uZWVkU2VwYXJhdG9yID8gKFxyXG4gICAgICA8U3VydmV5QWN0aW9uQmFyU2VwYXJhdG9yPjwvU3VydmV5QWN0aW9uQmFyU2VwYXJhdG9yPlxyXG4gICAgKSA6IG51bGw7XHJcblxyXG4gICAgY29uc3QgaXRlbUNvbXBvbmVudCA9IFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChcclxuICAgICAgdGhpcy5pdGVtLmNvbXBvbmVudCB8fCBcInN2LWFjdGlvbi1iYXItaXRlbVwiLFxyXG4gICAgICB7XHJcbiAgICAgICAgaXRlbTogdGhpcy5pdGVtLFxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgPGRpdiBjbGFzc05hbWU9e2l0ZW1DbGFzc30gaWQ9e3RoaXMuaXRlbS5pZH0+XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdi1hY3Rpb25fX2NvbnRlbnRcIj5cclxuICAgICAgICAgIHtzZXBhcmF0b3J9XHJcbiAgICAgICAgICB7aXRlbUNvbXBvbmVudH1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICApO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleUFjdGlvbkJhckl0ZW0gZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxcclxuICBJQWN0aW9uQmFySXRlbVByb3BzLFxyXG4gIGFueVxyXG4+IHtcclxuICBnZXQgaXRlbSgpOiBBY3Rpb24ge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbTtcclxuICB9XHJcbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcclxuICAgIHJldHVybiB0aGlzLml0ZW07XHJcbiAgfVxyXG5cclxuICByZW5kZXJFbGVtZW50KCkge1xyXG4gICAgcmV0dXJuIDw+e3RoaXMucmVuZGVySW5uZXJCdXR0b24oKX08Lz47XHJcbiAgfVxyXG5cclxuICByZW5kZXJUZXh0KCkge1xyXG4gICAgaWYgKCF0aGlzLml0ZW0uaGFzVGl0bGUpIHJldHVybiBudWxsO1xyXG4gICAgY29uc3QgdGl0bGVDbGFzcyA9IHRoaXMuaXRlbS5nZXRBY3Rpb25CYXJJdGVtVGl0bGVDc3MoKTtcclxuICAgIHJldHVybiA8c3BhbiBjbGFzc05hbWU9e3RpdGxlQ2xhc3N9Pnt0aGlzLml0ZW0udGl0bGV9PC9zcGFuPjtcclxuICB9XHJcblxyXG4gIHJlbmRlckJ1dHRvbkNvbnRlbnQoKSB7XHJcbiAgICBjb25zdCB0ZXh0ID0gdGhpcy5yZW5kZXJUZXh0KCk7XHJcbiAgICBjb25zdCBzdmdJY29uID0gISF0aGlzLml0ZW0uaWNvbk5hbWUgPyAoXHJcbiAgICAgIDxTdmdJY29uXHJcbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLml0ZW0uY3NzQ2xhc3Nlcy5pdGVtSWNvbn1cclxuICAgICAgICBzaXplPXt0aGlzLml0ZW0uaWNvblNpemV9XHJcbiAgICAgICAgaWNvbk5hbWU9e3RoaXMuaXRlbS5pY29uTmFtZX1cclxuICAgICAgPjwvU3ZnSWNvbj5cclxuICAgICkgOiBudWxsO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgPD5cclxuICAgICAgICB7c3ZnSWNvbn1cclxuICAgICAgICB7dGV4dH1cclxuICAgICAgPC8+XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcmVuZGVySW5uZXJCdXR0b24oKSB7XHJcbiAgICBjb25zdCBjbGFzc05hbWUgPSB0aGlzLml0ZW0uZ2V0QWN0aW9uQmFySXRlbUNzcygpO1xyXG4gICAgY29uc3QgdGl0bGUgPSB0aGlzLml0ZW0udG9vbHRpcCB8fCB0aGlzLml0ZW0udGl0bGU7XHJcbiAgICBjb25zdCBidXR0b25Db250ZW50ID0gdGhpcy5yZW5kZXJCdXR0b25Db250ZW50KCk7XHJcbiAgICBjb25zdCB0YWJJbmRleCA9IHRoaXMuaXRlbS5kaXNhYmxlVGFiU3RvcCA/IC0xIDogdW5kZWZpbmVkO1xyXG4gICAgY29uc3QgYnV0dG9uID0gYXR0YWNoS2V5MmNsaWNrKFxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XHJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgZGlzYWJsZWQ9e3RoaXMuaXRlbS5kaXNhYmxlZH1cclxuICAgICAgICBvbkNsaWNrPXsoKSA9PiB0aGlzLml0ZW0uYWN0aW9uKHRoaXMuaXRlbSl9XHJcbiAgICAgICAgdGl0bGU9e3RpdGxlfVxyXG4gICAgICAgIHRhYkluZGV4PXt0YWJJbmRleH1cclxuICAgICAgPlxyXG4gICAgICAgIHtidXR0b25Db250ZW50fVxyXG4gICAgICA8L2J1dHRvbj4sIG51bGwsIHsgcHJvY2Vzc0VzYzogZmFsc2UgfSk7XHJcblxyXG4gICAgcmV0dXJuIGJ1dHRvbjtcclxuICB9XHJcbn1cclxuXHJcblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3YtYWN0aW9uLWJhci1pdGVtXCIsIChwcm9wcykgPT4ge1xyXG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleUFjdGlvbkJhckl0ZW0sIHByb3BzKTtcclxufSk7XHJcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1mYWN0b3J5XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlBY3Rpb25CYXJTZXBhcmF0b3IgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8YW55LCBhbnk+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICByZW5kZXIoKSB7XG4gICAgdmFyIGNsYXNzTmFtZSA9IGBzdi1hY3Rpb24tYmFyLXNlcGFyYXRvciAke3RoaXMucHJvcHMuY3NzQ2xhc3Nlc31gO1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lfT48L2Rpdj47XG4gIH1cbn1cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2LWFjdGlvbi1iYXItc2VwYXJhdG9yXCIsXG4gIChwcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleUFjdGlvbkJhclNlcGFyYXRvciwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtcbiAgQmFzZSxcbiAgQWN0aW9uLFxuICBBY3Rpb25Db250YWluZXJcbn0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBBZGFwdGl2ZUFjdGlvbkNvbnRhaW5lciB9IGZyb20gXCIuLi8uLi8uLi9hY3Rpb25zL2FkYXB0aXZlLWNvbnRhaW5lclwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcIi4uLy4uL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgU3VydmV5QWN0aW9uIH0gZnJvbSBcIi4vYWN0aW9uLWJhci1pdGVtXCI7XG5cbmV4cG9ydCAqIGZyb20gXCIuL2FjdGlvbi1iYXItaXRlbS1kcm9wZG93blwiO1xuZXhwb3J0ICogZnJvbSBcIi4vYWN0aW9uLWJhci1zZXBhcmF0b3JcIjtcblxuaW50ZXJmYWNlIElBY3Rpb25CYXJQcm9wcyB7XG4gIG1vZGVsOiBBY3Rpb25Db250YWluZXI8QWN0aW9uPjtcbiAgaGFuZGxlQ2xpY2s/OiBib29sZWFuO1xufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5QWN0aW9uQmFyIGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8SUFjdGlvbkJhclByb3BzLCBhbnk+IHtcbiAgcHJpdmF0ZSByb290UmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBJQWN0aW9uQmFyUHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5yb290UmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIH1cblxuICBwcml2YXRlIGdldCBoYW5kbGVDbGljaygpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5oYW5kbGVDbGljayAhPT0gdW5kZWZpbmVkID8gdGhpcy5wcm9wcy5oYW5kbGVDbGljayA6IHRydWU7XG4gIH1cblxuICBnZXQgbW9kZWwoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMubW9kZWw7XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIGlmICghdGhpcy5tb2RlbC5oYXNBY3Rpb25zKSByZXR1cm47XG4gICAgY29uc3QgY29udGFpbmVyOiBIVE1MRGl2RWxlbWVudCA9IHRoaXMucm9vdFJlZi5jdXJyZW50O1xuICAgIHRoaXMubW9kZWwuaW5pdFJlc3BvbnNpdml0eU1hbmFnZXIoY29udGFpbmVyKTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIHRoaXMubW9kZWwucmVzZXRSZXNwb25zaXZpdHlNYW5hZ2VyKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG5cbiAgcmVuZGVyRWxlbWVudCgpOiBhbnkge1xuICAgIGlmICghdGhpcy5tb2RlbC5oYXNBY3Rpb25zKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMucmVuZGVySXRlbXMoKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICByZWY9e3RoaXMucm9vdFJlZn1cbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLm1vZGVsLmdldFJvb3RDc3MoKX1cbiAgICAgICAgb25DbGljaz17dGhpcy5oYW5kbGVDbGljayA/IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH0gOiB1bmRlZmluZWR9XG4gICAgICA+XG4gICAgICAgIHtpdGVtc31cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICByZW5kZXJJdGVtcygpIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbC5yZW5kZXJlZEFjdGlvbnMubWFwKFxuICAgICAgKGl0ZW06IEFjdGlvbiwgaXRlbUluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8U3VydmV5QWN0aW9uIGl0ZW09e2l0ZW19IGtleT17XCJpdGVtXCIgKyBpdGVtSW5kZXh9PjwvU3VydmV5QWN0aW9uPlxuICAgICAgICApO1xuICAgICAgfVxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdi1hY3Rpb24tYmFyXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICBTdXJ2ZXlBY3Rpb25CYXIsXG4gICAgKHByb3BzIGFzIGFueSkgYXMgSUFjdGlvbkJhclByb3BzXG4gICk7XG59KTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IHsgTGlzdE1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XHJcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1mYWN0b3J5XCI7XHJcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcIi4uLy4uL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xyXG5pbXBvcnQgeyBhdHRhY2hLZXkyY2xpY2sgfSBmcm9tIFwiLi4vLi4vcmVhY3RTdXJ2ZXlcIjtcclxuaW1wb3J0IHsgU3ZnSWNvbiB9IGZyb20gXCIuLi9zdmctaWNvbi9zdmctaWNvblwiO1xyXG5cclxuaW50ZXJmYWNlIElMaXN0SXRlbVByb3BzIHtcclxuICBtb2RlbDogTGlzdE1vZGVsO1xyXG4gIGl0ZW06IGFueTtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIExpc3RJdGVtIGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8SUxpc3RJdGVtUHJvcHMsIGFueT4ge1xyXG4gIGdldCBtb2RlbCgpOiBMaXN0TW9kZWwge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvcHMubW9kZWw7XHJcbiAgfVxyXG4gIGdldCBpdGVtKCk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtO1xyXG4gIH1cclxuICBoYW5kbGVLZXlkb3duID0gKGV2ZW50OiBhbnkpID0+IHtcclxuICAgIHRoaXMubW9kZWwub25LZXlEb3duKGV2ZW50KTtcclxuICB9O1xyXG4gIGdldFN0YXRlRWxlbWVudCgpIHtcclxuICAgIHJldHVybiB0aGlzLml0ZW07XHJcbiAgfVxyXG4gIHJlbmRlcigpIHtcclxuICAgIGlmICghdGhpcy5pdGVtKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgc3R5bGUgPSB7XHJcbiAgICAgIHBhZGRpbmdMZWZ0OiB0aGlzLm1vZGVsLmdldEl0ZW1JbmRlbnQodGhpcy5pdGVtKSxcclxuICAgICAgZGlzcGxheTogdGhpcy5pdGVtLnZpc2libGUgPT09IHVuZGVmaW5lZCB8fCB0aGlzLml0ZW0udmlzaWJsZSA/IG51bGwgOiBcIm5vbmVcIixcclxuICAgIH07XHJcbiAgICBjb25zdCBjbGFzc05hbWUgPSB0aGlzLm1vZGVsLmdldEl0ZW1DbGFzcyh0aGlzLml0ZW0pO1xyXG4gICAgY29uc3QgY29udGVudCA9IFtdO1xyXG4gICAgaWYgKCF0aGlzLml0ZW0uY29tcG9uZW50KSB7XHJcbiAgICAgIGNvbnN0IGljb24gPSB0aGlzLml0ZW0uaWNvbk5hbWUgPyAoXHJcbiAgICAgICAgPFN2Z0ljb25cclxuICAgICAgICAgIGtleT17MX1cclxuICAgICAgICAgIGNsYXNzTmFtZT1cInN2LWxpc3RfX2l0ZW0taWNvblwiXHJcbiAgICAgICAgICBpY29uTmFtZT17dGhpcy5pdGVtLmljb25OYW1lfVxyXG4gICAgICAgICAgc2l6ZT17MjR9XHJcbiAgICAgICAgPjwvU3ZnSWNvbj5cclxuICAgICAgKSA6IG51bGw7XHJcbiAgICAgIGNvbnRlbnQucHVzaChpY29uKTtcclxuICAgICAgY29udGVudC5wdXNoKDxzcGFuIGtleT17Mn0+e3RoaXMuaXRlbS50aXRsZX08L3NwYW4+KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnRlbnQucHVzaChSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQodGhpcy5pdGVtLmNvbXBvbmVudCwgeyBpdGVtOiB0aGlzLml0ZW0gfSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBhdHRhY2hLZXkyY2xpY2soXHJcbiAgICAgIDxsaVxyXG4gICAgICAgIHN0eWxlPXtzdHlsZX1cclxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cclxuICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm1vZGVsLnNlbGVjdEl0ZW0odGhpcy5pdGVtKTtcclxuICAgICAgICB9fVxyXG4gICAgICAgIG9uUG9pbnRlckRvd249eyhldmVudDogYW55KSA9PiB0aGlzLm1vZGVsLm9uUG9pbnRlckRvd24oZXZlbnQsIHRoaXMuaXRlbSl9XHJcbiAgICAgID5cclxuICAgICAgICB7Y29udGVudH1cclxuICAgICAgPC9saT5cclxuICAgICk7XHJcbiAgfVxyXG5cclxufVxyXG5cclxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdi1saXN0LWl0ZW1cIiwgKHByb3BzKSA9PiB7XHJcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTGlzdEl0ZW0sIHByb3BzKTtcclxufSk7XHJcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IHsgSUFjdGlvbiwgTGlzdE1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XHJcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1mYWN0b3J5XCI7XHJcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcIi4uLy4uL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xyXG5pbXBvcnQgeyBTdmdJY29uIH0gZnJvbSBcIi4uL3N2Zy1pY29uL3N2Zy1pY29uXCI7XHJcbmltcG9ydCB7IExpc3RJdGVtIH0gZnJvbSBcIi4vbGlzdC1pdGVtXCI7XHJcblxyXG5pbnRlcmZhY2UgSUxpc3RQcm9wcyB7XHJcbiAgbW9kZWw6IExpc3RNb2RlbDtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIExpc3QgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxJTGlzdFByb3BzLCBhbnk+IHtcclxuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XHJcbiAgICBzdXBlcihwcm9wcyk7XHJcbiAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICBmaWx0ZXJlZFRleHQ6IHRoaXMubW9kZWwuZmlsdGVyZWRUZXh0IHx8IFwiXCJcclxuICAgIH07XHJcbiAgfVxyXG4gIGdldCBtb2RlbCgpOiBMaXN0TW9kZWwge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvcHMubW9kZWw7XHJcbiAgfVxyXG4gIGhhbmRsZUtleWRvd24gPSAoZXZlbnQ6IGFueSkgPT4ge1xyXG4gICAgdGhpcy5tb2RlbC5vbktleURvd24oZXZlbnQpO1xyXG4gIH07XHJcbiAgZ2V0U3RhdGVFbGVtZW50KCkge1xyXG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XHJcbiAgfVxyXG4gIHJlbmRlckVsZW1lbnQoKSB7XHJcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMucmVuZGVySXRlbXMoKTtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3YtbGlzdF9fY29udGFpbmVyXCI+XHJcbiAgICAgICAge3RoaXMuc2VhcmNoRWxlbWVudENvbnRlbnQoKX1cclxuICAgICAgICA8dWxcclxuICAgICAgICAgIGNsYXNzTmFtZT1cInN2LWxpc3RcIlxyXG4gICAgICAgICAgb25Nb3VzZURvd249eyhlKSA9PiB7XHJcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgIH19XHJcbiAgICAgICAgICBvbktleURvd249e3RoaXMuaGFuZGxlS2V5ZG93bn1cclxuICAgICAgICA+XHJcbiAgICAgICAgICB7aXRlbXN9XHJcbiAgICAgICAgPC91bD5cclxuICAgICAgPC9kaXY+XHJcbiAgICApO1xyXG4gIH1cclxuICByZW5kZXJJdGVtcygpIHtcclxuICAgIGlmICghdGhpcy5tb2RlbCkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5tb2RlbC5yZW5kZXJlZEFjdGlvbnM7XHJcbiAgICBpZiAoIWl0ZW1zKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGl0ZW1zLm1hcCgoaXRlbTogSUFjdGlvbiwgaXRlbUluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICA8TGlzdEl0ZW0gbW9kZWw9e3RoaXMubW9kZWx9IGl0ZW09e2l0ZW19IGtleT17XCJpdGVtXCIgKyBpdGVtSW5kZXh9PjwvTGlzdEl0ZW0+XHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNlYXJjaEVsZW1lbnRDb250ZW50KCkge1xyXG4gICAgaWYgKCF0aGlzLm1vZGVsLm5lZWRGaWx0ZXIpIHJldHVybiBudWxsO1xyXG4gICAgZWxzZSB7XHJcbiAgICAgIGNvbnN0IG9uQ2hhbmdlID0gKGU6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChlLnRhcmdldCA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkge1xyXG4gICAgICAgICAgdGhpcy5tb2RlbC5maWx0ZXJlZFRleHQgPSBlLnRhcmdldC52YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdi1saXN0X19maWx0ZXJcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17XCJzdi1saXN0X19maWx0ZXItaWNvblwifT5cclxuICAgICAgICAgICAgPFN2Z0ljb25cclxuICAgICAgICAgICAgICBpY29uTmFtZT17XCJpY29uLXNlYXJjaFwifVxyXG4gICAgICAgICAgICAgIHNpemU9e1wiYXV0b1wifVxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDwvU3ZnSWNvbj5cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInN2LWxpc3RfX2lucHV0XCJcclxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e3RoaXMubW9kZWwuZmlsdGVyZWRUZXh0UGxhY2Vob2xkZXJ9XHJcbiAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLmZpbHRlcmVkVGV4dH1cclxuICAgICAgICAgICAgb25DaGFuZ2U9e29uQ2hhbmdlfVxyXG4gICAgICAgICAgPjwvaW5wdXQ+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2LWxpc3RcIiwgKHByb3BzKSA9PiB7XHJcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTGlzdCwgcHJvcHMpO1xyXG59KTtcclxuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQWN0aW9uLCBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSwgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi8uLi8uLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IFJlYWN0U3VydmV5RWxlbWVudCB9IGZyb20gXCIuLi8uLi8uLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFN2Z0ljb24gfSBmcm9tIFwiLi4vLi4vc3ZnLWljb24vc3ZnLWljb25cIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uTWF0cml4RGV0YWlsQnV0dG9uIGV4dGVuZHMgUmVhY3RTdXJ2ZXlFbGVtZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmhhbmRsZU9uU2hvd0hpZGVDbGljayA9IHRoaXMuaGFuZGxlT25TaG93SGlkZUNsaWNrLmJpbmQodGhpcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtO1xuICB9XG4gIGdldCBpdGVtKCk6IEFjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbTtcbiAgfVxuICBwcml2YXRlIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtLmRhdGEucXVlc3Rpb247XG4gIH1cbiAgcHJpdmF0ZSBnZXQgcm93KCk6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtLmRhdGEucm93O1xuICB9XG4gIGhhbmRsZU9uU2hvd0hpZGVDbGljayhldmVudDogYW55KSB7XG4gICAgdGhpcy5yb3cuc2hvd0hpZGVEZXRhaWxQYW5lbENsaWNrKCk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBpc0V4cGFuZGVkID0gdGhpcy5yb3cuaXNEZXRhaWxQYW5lbFNob3dpbmc7XG4gICAgdmFyIGFyaWFFeHBhbmRlZCA9IGlzRXhwYW5kZWQ7XG4gICAgdmFyIGFyaWFDb250cm9scyA9IGlzRXhwYW5kZWQgPyB0aGlzLnJvdy5kZXRhaWxQYW5lbElkIDogbnVsbDtcbiAgICByZXR1cm4gKFxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgb25DbGljaz17dGhpcy5oYW5kbGVPblNob3dIaWRlQ2xpY2t9XG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXREZXRhaWxQYW5lbEJ1dHRvbkNzcyh0aGlzLnJvdyl9XG4gICAgICAgIGFyaWEtZXhwYW5kZWQ9e2FyaWFFeHBhbmRlZH1cbiAgICAgICAgYXJpYS1jb250cm9scz17YXJpYUNvbnRyb2xzfVxuICAgICAgPlxuICAgICAgICA8U3ZnSWNvblxuICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXREZXRhaWxQYW5lbEljb25Dc3ModGhpcy5yb3cpfVxuICAgICAgICAgIGljb25OYW1lPXt0aGlzLnF1ZXN0aW9uLmdldERldGFpbFBhbmVsSWNvbklkKHRoaXMucm93KX1cbiAgICAgICAgICBzaXplPXtcImF1dG9cIn1cbiAgICAgICAgPlxuICAgICAgICA8L1N2Z0ljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2LW1hdHJpeC1kZXRhaWwtYnV0dG9uXCIsXG4gIHByb3BzID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbk1hdHJpeERldGFpbEJ1dHRvbiwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi8uLi8uLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IFJlYWN0U3VydmV5RWxlbWVudCB9IGZyb20gXCIuLi8uLi8uLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pY0RyYWdEcm9wSWNvbiBleHRlbmRzIFJlYWN0U3VydmV5RWxlbWVudCB7XG4gIHByaXZhdGUgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW0uZGF0YS5xdWVzdGlvbjtcbiAgfVxuXG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPHNwYW5cbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaWNvbkRyYWd9XG4gICAgICAvPlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3YtbWF0cml4LWRyYWctZHJvcC1pY29uXCIsXG4gIChwcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pY0RyYWdEcm9wSWNvbiwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtcbiAgTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsXG4gIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UsXG59IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi8uLi8uLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IFJlYWN0U3VydmV5RWxlbWVudCB9IGZyb20gXCIuLi8uLi8uLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pY1JlbW92ZUJ1dHRvbiBleHRlbmRzIFJlYWN0U3VydmV5RWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5oYW5kbGVPblJvd1JlbW92ZUNsaWNrID0gdGhpcy5oYW5kbGVPblJvd1JlbW92ZUNsaWNrLmJpbmQodGhpcyk7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbS5kYXRhLnF1ZXN0aW9uO1xuICB9XG4gIHByaXZhdGUgZ2V0IHJvdygpOiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbS5kYXRhLnJvdztcbiAgfVxuICBoYW5kbGVPblJvd1JlbW92ZUNsaWNrKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnF1ZXN0aW9uLnJlbW92ZVJvd1VJKHRoaXMucm93KTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIHJlbW92ZVJvd1RleHQgPSB0aGlzLnJlbmRlckxvY1N0cmluZyh0aGlzLnF1ZXN0aW9uLmxvY1JlbW92ZVJvd1RleHQpO1xuICAgIHJldHVybiAoXG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRSZW1vdmVSb3dCdXR0b25Dc3MoKX1cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIG9uQ2xpY2s9e3RoaXMuaGFuZGxlT25Sb3dSZW1vdmVDbGlja31cbiAgICAgICAgZGlzYWJsZWQ9e3RoaXMucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5fVxuICAgICAgPlxuICAgICAgICB7cmVtb3ZlUm93VGV4dH1cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaWNvblJlbW92ZX0gLz5cbiAgICAgIDwvYnV0dG9uPlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3YtbWF0cml4LXJlbW92ZS1idXR0b25cIixcbiAgKHByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljUmVtb3ZlQnV0dG9uLCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuaW1wb3J0IHsgUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkUm93LCBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZmFjdG9yeVwiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwiLi4vLi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5cbmludGVyZmFjZSBJTUF0cml4Um93UHJvcHMge1xuICBtb2RlbDogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkUm93O1xuICBwYXJlbnRNYXRyaXg6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2U7XG59XG5cbmV4cG9ydCBjbGFzcyBNYXRyaXhSb3cgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxJTUF0cml4Um93UHJvcHMsIGFueT4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogSU1BdHJpeFJvd1Byb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIGdldCBtb2RlbCgpOiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3cge1xuICAgIHJldHVybiB0aGlzLnByb3BzLm1vZGVsO1xuICB9XG4gIGdldCBwYXJlbnRNYXRyaXgoKTogUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMucGFyZW50TWF0cml4O1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIG9uUG9pbnRlckRvd25IYW5kbGVyID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICB0aGlzLnBhcmVudE1hdHJpeC5vblBvaW50ZXJEb3duKGV2ZW50Lm5hdGl2ZUV2ZW50LCB0aGlzLm1vZGVsLnJvdyk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgbW9kZWwgPSB0aGlzLm1vZGVsO1xuICAgIHJldHVybiAoXG4gICAgICA8dHJcbiAgICAgICAgY2xhc3NOYW1lPXttb2RlbC5jbGFzc05hbWV9XG4gICAgICAgIGRhdGEtc3YtZHJvcC10YXJnZXQtbWF0cml4LXJvdz17bW9kZWwucm93ICYmIG1vZGVsLnJvdy5pZH1cbiAgICAgICAgb25Qb2ludGVyRG93bj17KGV2ZW50OiBhbnkpID0+IHRoaXMub25Qb2ludGVyRG93bkhhbmRsZXIoZXZlbnQpfVxuICAgICAgPlxuICAgICAgICB7dGhpcy5wcm9wcy5jaGlsZHJlbn1cbiAgICAgIDwvdHI+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdi1tYXRyaXgtcm93XCIsXG4gIChwcm9wczogSU1BdHJpeFJvd1Byb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTWF0cml4Um93LCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge1xuICBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsXG59IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IFJlYWN0U3VydmV5RWxlbWVudCB9IGZyb20gXCIuLi8uLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljIH0gZnJvbSBcIi4uLy4uL3JlYWN0cXVlc3Rpb25fcGFuZWxkeW5hbWljXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY0FjdGlvbiBleHRlbmRzIFJlYWN0U3VydmV5RWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsIHtcbiAgICByZXR1cm4gKHRoaXMucHJvcHMuaXRlbSAmJiB0aGlzLnByb3BzLml0ZW0uZGF0YS5xdWVzdGlvbikgfHwgdGhpcy5wcm9wcy5kYXRhLnF1ZXN0aW9uO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY0FkZEJ1dHRvbiBleHRlbmRzIFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljQWN0aW9uIHtcbiAgcHJvdGVjdGVkIGhhbmRsZUNsaWNrID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICB0aGlzLnF1ZXN0aW9uLmFkZFBhbmVsVUkoKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLnF1ZXN0aW9uLmNhbkFkZFBhbmVsKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gKFxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldEFkZEJ1dHRvbkNzcygpfSBvbkNsaWNrPXt0aGlzLmhhbmRsZUNsaWNrfSA+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmJ1dHRvbkFkZFRleHR9Pnt0aGlzLnF1ZXN0aW9uLnBhbmVsQWRkVGV4dH08L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2LXBhbmVsZHluYW1pYy1hZGQtYnRuXCIsXG4gIChwcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljQWRkQnV0dG9uLCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZmFjdG9yeVwiO1xuaW1wb3J0IHsgU3ZnSWNvbiB9IGZyb20gXCIuLi9zdmctaWNvbi9zdmctaWNvblwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNBY3Rpb24gfSBmcm9tIFwiLi9wYW5lbGR5bmFtaWMtYWRkLWJ0blwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNOZXh0QnV0dG9uIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNBY3Rpb24ge1xuICBwcm90ZWN0ZWQgaGFuZGxlQ2xpY2sgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgIHRoaXMucXVlc3Rpb24uZ29Ub05leHRQYW5lbCgpO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiB0aXRsZT17dGhpcy5xdWVzdGlvbi5wYW5lbE5leHRUZXh0fSBvbkNsaWNrPXt0aGlzLmhhbmRsZUNsaWNrfSBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0TmV4dEJ1dHRvbkNzcygpfT5cbiAgICAgICAgPFN2Z0ljb25cbiAgICAgICAgICBpY29uTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnByb2dyZXNzQnRuSWNvbn1cbiAgICAgICAgICBzaXplPXtcImF1dG9cIn1cbiAgICAgICAgPlxuICAgICAgICA8L1N2Z0ljb24+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2LXBhbmVsZHluYW1pYy1uZXh0LWJ0blwiLFxuICAocHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY05leHRCdXR0b24sIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1mYWN0b3J5XCI7XG5pbXBvcnQgeyBTdmdJY29uIH0gZnJvbSBcIi4uL3N2Zy1pY29uL3N2Zy1pY29uXCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY0FjdGlvbiB9IGZyb20gXCIuL3BhbmVsZHluYW1pYy1hZGQtYnRuXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY1ByZXZCdXR0b24gZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY0FjdGlvbiB7XG4gIHByb3RlY3RlZCBoYW5kbGVDbGljayA9IChldmVudDogYW55KSA9PiB7XG4gICAgdGhpcy5xdWVzdGlvbi5nb1RvUHJldlBhbmVsKCk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IHRpdGxlPXt0aGlzLnF1ZXN0aW9uLnBhbmVsUHJldlRleHR9IG9uQ2xpY2s9e3RoaXMuaGFuZGxlQ2xpY2t9IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRQcmV2QnV0dG9uQ3NzKCl9PlxuICAgICAgICA8U3ZnSWNvblxuICAgICAgICAgIGljb25OYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucHJvZ3Jlc3NCdG5JY29ufVxuICAgICAgICAgIHNpemU9e1wiYXV0b1wifVxuICAgICAgICA+XG4gICAgICAgIDwvU3ZnSWNvbj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3YtcGFuZWxkeW5hbWljLXByZXYtYnRuXCIsXG4gIChwcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljUHJldkJ1dHRvbiwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljQWN0aW9uIH0gZnJvbSBcIi4vcGFuZWxkeW5hbWljLWFkZC1idG5cIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0IGV4dGVuZHMgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNBY3Rpb24ge1xuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuICg8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnByb2dyZXNzVGV4dH0+XG4gICAgICB7dGhpcy5xdWVzdGlvbi5wcm9ncmVzc1RleHR9XG4gICAgPC9kaXY+KTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdi1wYW5lbGR5bmFtaWMtcHJvZ3Jlc3MtdGV4dFwiLFxuICAocHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dCwgcHJvcHMpO1xuICB9XG4pOyIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5pbXBvcnQgeyBQb3B1cE1vZGVsLCBQb3B1cEJhc2VWaWV3TW9kZWwsIGNyZWF0ZVBvcHVwTW9kYWxWaWV3TW9kZWwsIENzc0NsYXNzQnVpbGRlciwgc2V0dGluZ3MgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1mYWN0b3J5XCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50QmFzZSB9IGZyb20gXCIuLi8uLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcblxuaW50ZXJmYWNlIElQb3B1cFByb3BzIHtcbiAgbW9kZWw6IFBvcHVwTW9kZWw7XG59XG5cbmV4cG9ydCBjbGFzcyBQb3B1cCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPElQb3B1cFByb3BzLCBhbnk+IHtcbiAgcHJpdmF0ZSBwb3B1cDogUG9wdXBCYXNlVmlld01vZGVsO1xuICBwcml2YXRlIGNvbnRhaW5lclJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgY29uc3RydWN0b3IocHJvcHM6IElQb3B1cFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuY29udGFpbmVyUmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gICAgdGhpcy5wb3B1cCA9IG5ldyBQb3B1cEJhc2VWaWV3TW9kZWwodGhpcy5wcm9wcy5tb2RlbCk7XG4gICAgdGhpcy5wb3B1cC5jcmVhdGVQb3B1cENvbnRhaW5lcigpO1xuICB9XG4gIGdldCBtb2RlbCgpOiBQb3B1cE1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5tb2RlbDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgdGhpcy5wb3B1cC5tb3VudFBvcHVwQ29udGFpbmVyKCk7XG4gICAgdGhpcy5wb3B1cC50YXJnZXRFbGVtZW50ID0gdGhpcy5jb250YWluZXJSZWYuY3VycmVudC5wYXJlbnRFbGVtZW50O1xuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHRoaXMucG9wdXAuZGVzdHJveVBvcHVwQ29udGFpbmVyKCk7XG4gIH1cbiAgc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wczogSVBvcHVwUHJvcHMsIG5leHRTdGF0ZTogYW55KSB7XG4gICAgaWYgKCFzdXBlci5zaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzLCBuZXh0U3RhdGUpKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIG5leHRQcm9wcy5tb2RlbCAhPT0gdGhpcy5wb3B1cC5tb2RlbDtcbiAgfVxuICByZW5kZXIoKSB7XG4gICAgdGhpcy5wb3B1cC5tb2RlbCA9IHRoaXMubW9kZWw7XG4gICAgY29uc3QgcG9wdXBDb250YWluZXIgPSBSZWFjdERPTS5jcmVhdGVQb3J0YWwoXG4gICAgICA8UG9wdXBDb250YWluZXIgbW9kZWw9e3RoaXMucG9wdXB9PjwvUG9wdXBDb250YWluZXI+LFxuICAgICAgdGhpcy5wb3B1cC5jb250YWluZXJcbiAgICApO1xuICAgIHJldHVybiA8ZGl2IHJlZj17dGhpcy5jb250YWluZXJSZWZ9Pntwb3B1cENvbnRhaW5lcn08L2Rpdj47XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3YtcG9wdXBcIixcbiAgKHByb3BzOiBJUG9wdXBQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFBvcHVwLCBwcm9wcyk7XG4gIH1cbik7XG5cbmV4cG9ydCBjbGFzcyBQb3B1cENvbnRhaW5lciBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPGFueSwgYW55PiB7XG4gIHB1YmxpYyBwcmV2SXNWaXNpYmxlOiBib29sZWFuID0gZmFsc2U7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgaGFuZGxlS2V5ZG93biA9IChldmVudDogYW55KSA9PiB7XG4gICAgdGhpcy5tb2RlbC5vbktleURvd24oZXZlbnQpO1xuICB9O1xuICBnZXQgbW9kZWwoKTogUG9wdXBCYXNlVmlld01vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5tb2RlbDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG4gIGNsaWNrSW5zaWRlID0gKGV2OiBhbnkpID0+IHtcbiAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfTtcbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogYW55LCBwcmV2U3RhdGU6IGFueSkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSk7XG4gICAgaWYgKCF0aGlzLnByZXZJc1Zpc2libGUgJiYgdGhpcy5tb2RlbC5pc1Zpc2libGUpIHtcbiAgICAgIHRoaXMubW9kZWwudXBkYXRlT25TaG93aW5nKCk7XG4gICAgfVxuICAgIHRoaXMucHJldklzVmlzaWJsZSA9IHRoaXMubW9kZWwuaXNWaXNpYmxlO1xuICB9XG4gIHJlbmRlckNvbnRhaW5lcigpIHtcbiAgICBjb25zdCBwb2ludGVyID0gdGhpcy5tb2RlbC5zaG93UG9pbnRlciA/IHRoaXMucmVuZGVyUG9pbnRlcigpIDogbnVsbDtcbiAgICBjb25zdCBoZWFkZXIgPSAhIXRoaXMubW9kZWwudGl0bGUgPyB0aGlzLnJlbmRlckhlYWRlcigpIDogbnVsbDtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5yZW5kZXJDb250ZW50KCk7XG4gICAgY29uc3QgZm9vdGVyID0gdGhpcy5tb2RlbC5zaG93Rm9vdGVyID8gdGhpcy5yZW5kZXJGb290ZXIoKSA6IG51bGw7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPVwic3YtcG9wdXBfX2NvbnRhaW5lclwiXG4gICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgbGVmdDogdGhpcy5tb2RlbC5sZWZ0LFxuICAgICAgICAgIHRvcDogdGhpcy5tb2RlbC50b3AsXG4gICAgICAgICAgaGVpZ2h0OiB0aGlzLm1vZGVsLmhlaWdodCxcbiAgICAgICAgfX1cbiAgICAgICAgb25DbGljaz17KGV2OiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLmNsaWNrSW5zaWRlKGV2KTtcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdi1wb3B1cF9zaGFkb3dcIj5cbiAgICAgICAgICB7cG9pbnRlcn1cbiAgICAgICAgICB7aGVhZGVyfVxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3YtcG9wdXBfX3Njcm9sbGluZy1jb250ZW50XCI+XG4gICAgICAgICAgICB7Y29udGVudH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB7Zm9vdGVyfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcmVuZGVyUG9pbnRlcigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPHNwYW5cbiAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICBsZWZ0OiB0aGlzLm1vZGVsLnBvaW50ZXJUYXJnZXQubGVmdCxcbiAgICAgICAgICB0b3A6IHRoaXMubW9kZWwucG9pbnRlclRhcmdldC50b3AsXG4gICAgICAgIH19XG4gICAgICAgIGNsYXNzTmFtZT1cInN2LXBvcHVwX19wb2ludGVyXCJcbiAgICAgID48L3NwYW4+XG4gICAgKTtcbiAgfVxuICByZW5kZXJIZWFkZXIoKSB7XG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwic3YtcG9wdXBfX2hlYWRlclwiPnt0aGlzLm1vZGVsLnRpdGxlfTwvZGl2PjtcbiAgfVxuICByZW5kZXJDb250ZW50KCkge1xuICAgIGNvbnN0IGNvbnRlbnRDb21wb25lbnQgPSBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoXG4gICAgICB0aGlzLm1vZGVsLmNvbnRlbnRDb21wb25lbnROYW1lLFxuICAgICAgdGhpcy5tb2RlbC5jb250ZW50Q29tcG9uZW50RGF0YVxuICAgICk7XG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwic3YtcG9wdXBfX2NvbnRlbnRcIj57Y29udGVudENvbXBvbmVudH08L2Rpdj47XG4gIH1cbiAgcmVuZGVyQ2FuY2VsQnV0dG9uKCkge1xuICAgIHJldHVybiAoXG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzc05hbWU9XCJzdi1wb3B1cF9fZm9vdGVyLWl0ZW0gc3YtcG9wdXBfX2J1dHRvbiBzdi1wb3B1cF9fYnV0dG9uLS1jYW5jZWxcIlxuICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgdGhpcy5tb2RlbC5jYW5jZWwoKTtcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAge3RoaXMubW9kZWwuY2FuY2VsQnV0dG9uVGV4dH1cbiAgICAgIDwvYnV0dG9uPlxuICAgICk7XG4gIH1cbiAgcmVuZGVyQXBwbHlCdXR0b24oKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzTmFtZT1cInN2LXBvcHVwX19mb290ZXItaXRlbSBzdi1wb3B1cF9fYnV0dG9uIHN2LXBvcHVwX19idXR0b24tLWFwcGx5XCJcbiAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgIHRoaXMubW9kZWwuYXBwbHkoKTtcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAge3RoaXMubW9kZWwuYXBwbHlCdXR0b25UZXh0fVxuICAgICAgPC9idXR0b24+XG4gICAgKTtcbiAgfVxuICByZW5kZXJGb290ZXIoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3YtcG9wdXBfX2Zvb3RlclwiPlxuICAgICAgICB7dGhpcy5yZW5kZXJDYW5jZWxCdXR0b24oKX1cbiAgICAgICAge3RoaXMubW9kZWwuaXNNb2RhbCA/IHRoaXMucmVuZGVyQXBwbHlCdXR0b24oKSA6IG51bGx9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLnJlbmRlckNvbnRhaW5lcigpO1xuICAgIGNvbnN0IGNsYXNzTmFtZSA9IG5ldyBDc3NDbGFzc0J1aWxkZXIoKVxuICAgICAgLmFwcGVuZChcInN2LXBvcHVwXCIpLmFwcGVuZCh0aGlzLm1vZGVsLnN0eWxlQ2xhc3MpLnRvU3RyaW5nKCk7XG4gICAgY29uc3Qgc3R5bGUgPSB7XG4gICAgICBkaXNwbGF5OiB0aGlzLm1vZGVsLmlzVmlzaWJsZSA/IFwiXCIgOiBcIm5vbmVcIixcbiAgICB9O1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIHRhYkluZGV4PXstMX1cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICAgICAgb25DbGljaz17KGU6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMubW9kZWwuY2xpY2tPdXRzaWRlKCk7XG4gICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfX1cbiAgICAgICAgb25LZXlEb3duPXt0aGlzLmhhbmRsZUtleWRvd259XG4gICAgICA+XG4gICAgICAgIHtjb250YWluZXJ9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaG93TW9kYWwoXG4gIGNvbXBvbmVudE5hbWU6IHN0cmluZyxcbiAgZGF0YTogYW55LFxuICBvbkFwcGx5OiAoKSA9PiBib29sZWFuLFxuICBvbkNhbmNlbD86ICgpID0+IHZvaWQsXG4gIGNzc0NsYXNzPzogc3RyaW5nLFxuICB0aXRsZT86IHN0cmluZyxcbiAgZGlzcGxheU1vZGU6IFwicG9wdXBcIiB8IFwib3ZlcmxheVwiID0gXCJwb3B1cFwiXG4pIHtcbiAgY29uc3QgcG9wdXBWaWV3TW9kZWw6IFBvcHVwQmFzZVZpZXdNb2RlbCA9IGNyZWF0ZVBvcHVwTW9kYWxWaWV3TW9kZWwoXG4gICAgY29tcG9uZW50TmFtZSxcbiAgICBkYXRhLFxuICAgIG9uQXBwbHksXG4gICAgb25DYW5jZWwsXG4gICAgKCkgPT4ge1xuICAgICAgUmVhY3RET00udW5tb3VudENvbXBvbmVudEF0Tm9kZShwb3B1cFZpZXdNb2RlbC5jb250YWluZXIpO1xuICAgICAgcG9wdXBWaWV3TW9kZWwuZGVzdHJveVBvcHVwQ29udGFpbmVyKCk7XG4gICAgfSxcbiAgICB1bmRlZmluZWQsXG4gICAgY3NzQ2xhc3MsXG4gICAgdGl0bGUsXG4gICAgZGlzcGxheU1vZGVcbiAgKTtcbiAgUmVhY3RET00ucmVuZGVyKDxQb3B1cENvbnRhaW5lciBtb2RlbD17cG9wdXBWaWV3TW9kZWx9IC8+LCBwb3B1cFZpZXdNb2RlbC5jb250YWluZXIpO1xuXG4gIHBvcHVwVmlld01vZGVsLm1vZGVsLmlzVmlzaWJsZSA9IHRydWU7XG59XG5cbnNldHRpbmdzLnNob3dNb2RhbCA9IHNob3dNb2RhbDtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vZWxlbWVudC1mYWN0b3J5XCI7XG5cbmV4cG9ydCBjbGFzcyBTa2VsZXRvbiBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxhbnksIGFueT4ge1xuICByZW5kZXIoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3Ytc2tlbGV0b24tZWxlbWVudFwiPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2LXNrZWxldG9uXCIsIChwcm9wczogYW55KSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFNrZWxldG9uLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZmFjdG9yeVwiO1xuXG5pbnRlcmZhY2UgSUxvZ29JbWFnZVByb3BzIHtcbiAgZGF0YTogU3VydmV5TW9kZWw7XG59XG5cbmV4cG9ydCBjbGFzcyBMb2dvSW1hZ2UgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8SUxvZ29JbWFnZVByb3BzLCBhbnk+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IElMb2dvSW1hZ2VQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcml2YXRlIGdldCBzdXJ2ZXkoKTogU3VydmV5TW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmRhdGE7XG4gIH1cbiAgcHVibGljIHJlbmRlcigpIHtcbiAgICBjb25zdCBjb250ZW50OiBKU1guRWxlbWVudFtdID0gW107XG4gICAgY29udGVudC5wdXNoKFxuICAgICAgPGRpdiBrZXk9e1wibG9nby1pbWFnZVwifSBjbGFzc05hbWU9e3RoaXMuc3VydmV5LmxvZ29DbGFzc05hbWVzfT5cbiAgICAgICAgPGltZ1xuICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5zdXJ2ZXkuY3NzLmxvZ29JbWFnZX1cbiAgICAgICAgICBzcmM9e3RoaXMuc3VydmV5LmxvY0xvZ28ucmVuZGVyZWRIdG1sfVxuICAgICAgICAgIGFsdD17dGhpcy5zdXJ2ZXkubG9jVGl0bGUucmVuZGVyZWRIdG1sfVxuICAgICAgICAgIHdpZHRoPXt0aGlzLnN1cnZleS5sb2dvV2lkdGggPyB0aGlzLnN1cnZleS5sb2dvV2lkdGggOiB1bmRlZmluZWR9XG4gICAgICAgICAgaGVpZ2h0PXt0aGlzLnN1cnZleS5sb2dvSGVpZ2h0ID8gdGhpcy5zdXJ2ZXkubG9nb0hlaWdodCA6IHVuZGVmaW5lZH1cbiAgICAgICAgICBzdHlsZT17eyBvYmplY3RGaXQ6IHRoaXMuc3VydmV5LmxvZ29GaXQgYXMgYW55IH19XG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICAgIHJldHVybiA8Pntjb250ZW50fTwvPjtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2LWxvZ28taW1hZ2VcIiwgKHByb3BzOiBJTG9nb0ltYWdlUHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTG9nb0ltYWdlLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50QmFzZSB9IGZyb20gXCIuLi8uLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1mYWN0b3J5XCI7XG5pbXBvcnQgeyBUaXRsZUVsZW1lbnQgfSBmcm9tIFwiLi4vdGl0bGUvdGl0bGUtZWxlbWVudFwiO1xuXG5pbnRlcmZhY2UgSVN1cnZleUhlYWRlclByb3BzIHtcbiAgc3VydmV5OiBTdXJ2ZXlNb2RlbDtcbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleUhlYWRlciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxJU3VydmV5SGVhZGVyUHJvcHMsIGFueT4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogSVN1cnZleUhlYWRlclByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3RhdGUgPSB7IGNoYW5nZWQ6IDAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IHN1cnZleSgpOiBTdXJ2ZXlNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuc3VydmV5O1xuICB9XG4gIHByaXZhdGUgZ2V0IGNzcygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnN1cnZleS5jc3M7XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBjb25zdCBzZWxmOiBTdXJ2ZXlIZWFkZXIgPSB0aGlzO1xuICAgIHRoaXMuc3VydmV5LmxvY0xvZ28ub25DaGFuZ2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgc2VsZi5zZXRTdGF0ZSh7IGNoYW5nZWQ6IHNlbGYuc3RhdGUuY2hhbmdlZCArIDEgfSk7XG4gICAgfTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLnN1cnZleS5sb2NMb2dvLm9uQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHsgfTtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyVGl0bGUoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5zdXJ2ZXkucmVuZGVyZWRIYXNUaXRsZSkgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgZGVzY3JpcHRpb24gPSBTdXJ2ZXlFbGVtZW50QmFzZS5yZW5kZXJMb2NTdHJpbmcoXG4gICAgICB0aGlzLnN1cnZleS5sb2NEZXNjcmlwdGlvblxuICAgICk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLmNzcy5oZWFkZXJUZXh0fVxuICAgICAgICBzdHlsZT17eyBtYXhXaWR0aDogdGhpcy5zdXJ2ZXkudGl0bGVNYXhXaWR0aCB9fVxuICAgICAgPlxuICAgICAgICA8VGl0bGVFbGVtZW50IGVsZW1lbnQ9e3RoaXMuc3VydmV5fT48L1RpdGxlRWxlbWVudD5cbiAgICAgICAgeyB0aGlzLnN1cnZleS5yZW5kZXJlZEhhc0Rlc2NyaXB0aW9uID8gPGg1IGNsYXNzTmFtZT17dGhpcy5jc3MuZGVzY3JpcHRpb259PntkZXNjcmlwdGlvbn08L2g1PiA6IG51bGwgfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyTG9nb0ltYWdlKGlzUmVuZGVyOiBib29sZWFuKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghaXNSZW5kZXIpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IGNvbXBvbmVudE5hbWU6IHN0cmluZyA9IHRoaXMuc3VydmV5LmdldEVsZW1lbnRXcmFwcGVyQ29tcG9uZW50TmFtZShcbiAgICAgIHRoaXMuc3VydmV5LFxuICAgICAgXCJsb2dvLWltYWdlXCJcbiAgICApO1xuICAgIGNvbnN0IGNvbXBvbmVudERhdGE6IGFueSA9IHRoaXMuc3VydmV5LmdldEVsZW1lbnRXcmFwcGVyQ29tcG9uZW50RGF0YShcbiAgICAgIHRoaXMuc3VydmV5LFxuICAgICAgXCJsb2dvLWltYWdlXCJcbiAgICApO1xuICAgIHJldHVybiBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoY29tcG9uZW50TmFtZSwge1xuICAgICAgZGF0YTogY29tcG9uZW50RGF0YSxcbiAgICB9KTtcbiAgfVxuICBwdWJsaWMgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMuc3VydmV5LnJlbmRlcmVkSGFzSGVhZGVyKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMuY3NzLmhlYWRlcn0+XG4gICAgICAgIHt0aGlzLnJlbmRlckxvZ29JbWFnZSh0aGlzLnN1cnZleS5pc0xvZ29CZWZvcmUpfVxuICAgICAgICB7dGhpcy5yZW5kZXJUaXRsZSgpfVxuICAgICAgICB7dGhpcy5yZW5kZXJMb2dvSW1hZ2UodGhpcy5zdXJ2ZXkuaXNMb2dvQWZ0ZXIpfVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5jc3MuaGVhZGVyQ2xvc2V9PjwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdXJ2ZXktaGVhZGVyXCIsXG4gIChwcm9wczogSVN1cnZleUhlYWRlclByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5SGVhZGVyLCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZmFjdG9yeVwiO1xuaW1wb3J0IHsgY3JlYXRlU3ZnIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbmV4cG9ydCBjbGFzcyBTdmdJY29uIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PGFueSwgYW55PiB7XG4gIHByaXZhdGUgc3ZnSWNvblJlZjogYW55O1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3ZnSWNvblJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICB9XG5cbiAgdXBkYXRlU3ZnKCkge1xuICAgIGlmKHRoaXMucHJvcHMuaWNvbk5hbWUpXG4gICAgICBjcmVhdGVTdmcoXG4gICAgICAgIHRoaXMucHJvcHMuc2l6ZSxcbiAgICAgICAgdGhpcy5wcm9wcy53aWR0aCxcbiAgICAgICAgdGhpcy5wcm9wcy5oZWlnaHQsXG4gICAgICAgIHRoaXMucHJvcHMuaWNvbk5hbWUsXG4gICAgICAgIHRoaXMuc3ZnSWNvblJlZi5jdXJyZW50XG4gICAgICApO1xuICB9XG4gIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcbiAgICB0aGlzLnVwZGF0ZVN2ZygpO1xuICB9XG4gIHJlbmRlcigpIHtcbiAgICBsZXQgY2xhc3NOYW1lID0gXCJzdi1zdmctaWNvblwiO1xuICAgIGlmKHRoaXMucHJvcHMuY2xhc3NOYW1lKSB7XG4gICAgICBjbGFzc05hbWUgKz0gXCIgXCIgKyB0aGlzLnByb3BzLmNsYXNzTmFtZTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMucHJvcHMuaWNvbk5hbWUgP1xuICAgICAgICA8c3ZnIGNsYXNzTmFtZT17IGNsYXNzTmFtZSB9IG9uQ2xpY2s9e3RoaXMucHJvcHMub25DbGlja30gcmVmPXt0aGlzLnN2Z0ljb25SZWZ9IHJvbGU9XCJpbWdcIj48dXNlPjwvdXNlPjwvc3ZnPlxuICAgICAgICA6IG51bGxcbiAgICApO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHRoaXMudXBkYXRlU3ZnKCk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdi1zdmctaWNvblwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3ZnSWNvbiwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvbiwgRGVmYXVsdFRpdGxlTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1mYWN0b3J5XCI7XG5pbXBvcnQgeyBUaXRsZUNvbnRlbnQgfSBmcm9tIFwiLi90aXRsZS1jb250ZW50XCI7XG5cbmV4cG9ydCBjbGFzcyBEZWZhdWx0VGl0bGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8YW55LCBhbnk+IHtcbiAgcHJpdmF0ZSBpc05lZWRGb2N1cyA9IGZhbHNlO1xuXG4gIHByb3RlY3RlZCBnZXQgY3NzQ2xhc3NlcygpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jc3NDbGFzc2VzO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgZWxlbWVudCgpOiBRdWVzdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZWxlbWVudDtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICB2YXIgZXhwYW5kQ29sbGFwc2UgPSBudWxsO1xuICAgIGlmICh0aGlzLmVsZW1lbnQuaXNDb2xsYXBzZWQgfHwgdGhpcy5lbGVtZW50LmlzRXhwYW5kZWQpIHtcbiAgICAgIGNvbnN0IGljb25Dc3M6IHN0cmluZyA9IERlZmF1bHRUaXRsZU1vZGVsLmdldEljb25Dc3MoXG4gICAgICAgIHRoaXMuY3NzQ2xhc3NlcywgdGhpcy5lbGVtZW50LmlzQ29sbGFwc2VkKTtcblxuICAgICAgdmFyIGNoYW5nZUV4cGFuZGVkID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgbGV0IHF1ZXN0aW9uID0gdGhpcy5lbGVtZW50O1xuXG4gICAgICAgIGlmICghcXVlc3Rpb24uaXNFeHBhbmRlZCAmJiAhcXVlc3Rpb24uaXNDb2xsYXBzZWQpIHJldHVybjtcblxuICAgICAgICBxdWVzdGlvbi50b2dnbGVTdGF0ZSgpO1xuICAgICAgICB0aGlzLmlzTmVlZEZvY3VzID0gcXVlc3Rpb24uaXNDb2xsYXBzZWQ7XG4gICAgICB9O1xuICAgICAgdmFyIHByZXNzRXhwYW5kID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IDEzKSBjaGFuZ2VFeHBhbmRlZChldmVudCk7XG4gICAgICB9O1xuICAgICAgdmFyIGFyaWFFeHBhbmRlZCA9IHRoaXMuZWxlbWVudC5pc0V4cGFuZGVkO1xuICAgICAgdmFyIGFyaWFDb250cm9scyA9IHRoaXMuZWxlbWVudC5pc0V4cGFuZGVkXG4gICAgICAgID8gdGhpcy5lbGVtZW50LmNvbnRlbnRJZFxuICAgICAgICA6IG51bGw7XG4gICAgICBleHBhbmRDb2xsYXBzZSA9IChcbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBjbGFzc05hbWU9e2ljb25Dc3N9XG4gICAgICAgICAgdGFiSW5kZXg9ezB9XG4gICAgICAgICAgb25LZXlVcD17cHJlc3NFeHBhbmR9XG4gICAgICAgICAgYXJpYS1leHBhbmRlZD17YXJpYUV4cGFuZGVkfVxuICAgICAgICAgIGFyaWEtY29udHJvbHM9e2FyaWFDb250cm9sc31cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICA8VGl0bGVDb250ZW50XG4gICAgICAgICAgZWxlbWVudD17dGhpcy5lbGVtZW50fVxuICAgICAgICAgIGNzc0NsYXNzZXM9e3RoaXMuY3NzQ2xhc3Nlc31cbiAgICAgICAgPjwvVGl0bGVDb250ZW50PlxuICAgICAgICB7ZXhwYW5kQ29sbGFwc2V9XG4gICAgICA8Lz5cbiAgICApO1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgdGhpcy5kb0FmdGVyUmVuZGVyKCk7XG4gIH1cblxuICBwcml2YXRlIGRvQWZ0ZXJSZW5kZXIoKSB7XG4gICAgaWYgKHRoaXMuaXNOZWVkRm9jdXMpIHtcbiAgICAgIHRoaXMuZWxlbWVudC5jbGlja1RpdGxlRnVuY3Rpb24oKTtcbiAgICAgIHRoaXMuaXNOZWVkRm9jdXMgPSBmYWxzZTtcbiAgICB9XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdi1kZWZhdWx0LXRpdGxlXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChEZWZhdWx0VGl0bGUsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudCwgUmVuZGVyZXJGYWN0b3J5IH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZmFjdG9yeVwiO1xuaW1wb3J0IHsgU3VydmV5QWN0aW9uQmFyIH0gZnJvbSBcIi4uL2FjdGlvbi1iYXIvYWN0aW9uLWJhclwiO1xuaW1wb3J0IHsgVGl0bGVDb250ZW50IH0gZnJvbSBcIi4vdGl0bGUtY29udGVudFwiO1xuXG5leHBvcnQgY2xhc3MgVGl0bGVBY3Rpb25zIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PGFueSwgYW55PiB7XG4gIHByb3RlY3RlZCBnZXQgY3NzQ2xhc3NlcygpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jc3NDbGFzc2VzO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgZWxlbWVudCgpOiBTdXJ2ZXlFbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5lbGVtZW50O1xuICB9XG5cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCB0aXRsZUNvbnRlbnQ6IEpTWC5FbGVtZW50ID0gPFRpdGxlQ29udGVudCBlbGVtZW50PXt0aGlzLmVsZW1lbnR9IGNzc0NsYXNzZXM9e3RoaXMuY3NzQ2xhc3Nlc30+PC9UaXRsZUNvbnRlbnQ+O1xuICAgIGlmKCF0aGlzLmVsZW1lbnQuaGFzVGl0bGVBY3Rpb25zKSByZXR1cm4gdGl0bGVDb250ZW50O1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2LXRpdGxlLWFjdGlvbnNcIj5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3YtdGl0bGUtYWN0aW9uc19fdGl0bGVcIj57dGl0bGVDb250ZW50fTwvc3Bhbj5cbiAgICAgICAgPFN1cnZleUFjdGlvbkJhciBtb2RlbD17dGhpcy5lbGVtZW50LmdldFRpdGxlVG9vbGJhcigpfT48L1N1cnZleUFjdGlvbkJhcj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVuZGVyZXJGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUmVuZGVyZXIoXG4gIFwiZWxlbWVudFwiLFxuICBcInRpdGxlLWFjdGlvbnNcIixcbiAgXCJzdi10aXRsZS1hY3Rpb25zXCJcbik7XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3YtdGl0bGUtYWN0aW9uc1wiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVGl0bGVBY3Rpb25zLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRDb3JlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50QmFzZSB9IGZyb20gXCIuLi8uLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IElUaXRsZU93bmVyIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbmV4cG9ydCBjbGFzcyBUaXRsZUNvbnRlbnQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8YW55LCBhbnk+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGNzc0NsYXNzZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3NzQ2xhc3NlcztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGVsZW1lbnQoKTogU3VydmV5RWxlbWVudENvcmUge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmVsZW1lbnQ7XG4gIH1cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCB0aXRsZU93bmVyID0gdGhpcy5lbGVtZW50LmdldFRpdGxlT3duZXIoKTtcbiAgICBpZighdGl0bGVPd25lcilcbiAgICAgIHJldHVybiBTdXJ2ZXlFbGVtZW50QmFzZS5yZW5kZXJMb2NTdHJpbmcodGhpcy5lbGVtZW50LmxvY1RpdGxlKTtcbiAgICB2YXIgc3BhbnMgPSB0aGlzLnJlbmRlclRpdGxlU3BhbnModGl0bGVPd25lciwgdGhpcy5jc3NDbGFzc2VzKTtcbiAgICByZXR1cm4gPD57c3BhbnN9PC8+O1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJUaXRsZVNwYW5zKGVsZW1lbnQ6IElUaXRsZU93bmVyLCBjc3NDbGFzc2VzOiBhbnkpOiBBcnJheTxKU1guRWxlbWVudD4ge1xuICAgIHZhciBnZXRTcGFjZVNwYW4gPSAoa2V5OiBhbnkpID0+IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxzcGFuIGRhdGEta2V5PXtrZXl9IGtleT17a2V5fT5cbiAgICAgICAgICAmbmJzcDtcbiAgICAgICAgPC9zcGFuPlxuICAgICAgKTtcbiAgICB9O1xuICAgIHZhciBzcGFucyA9IFtdO1xuICAgIGlmIChlbGVtZW50LmlzUmVxdWlyZVRleHRPblN0YXJ0KSB7XG4gICAgICBzcGFucy5wdXNoKHRoaXMucmVuZGVyUmVxdWlyZVRleHQoZWxlbWVudCwgY3NzQ2xhc3NlcykpO1xuICAgICAgc3BhbnMucHVzaChnZXRTcGFjZVNwYW4oXCJyZXEtc3BcIikpO1xuICAgIH1cbiAgICB2YXIgcXVlc3Rpb25OdW1iZXIgPSBlbGVtZW50Lm5vO1xuICAgIGlmIChxdWVzdGlvbk51bWJlcikge1xuICAgICAgc3BhbnMucHVzaChcbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBkYXRhLWtleT17XCJxX251bVwifVxuICAgICAgICAgIGtleT17XCJxX251bVwifVxuICAgICAgICAgIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5udW1iZXJ9XG4gICAgICAgICAgc3R5bGU9e3sgcG9zaXRpb246IFwic3RhdGljXCIgfX1cbiAgICAgICAgICBhcmlhLWhpZGRlbj17dHJ1ZX1cbiAgICAgICAgPlxuICAgICAgICAgIHtxdWVzdGlvbk51bWJlcn1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgKTtcbiAgICAgIHNwYW5zLnB1c2goZ2V0U3BhY2VTcGFuKFwibnVtLXNwXCIpKTtcbiAgICB9XG4gICAgaWYgKGVsZW1lbnQuaXNSZXF1aXJlVGV4dEJlZm9yZVRpdGxlKSB7XG4gICAgICBzcGFucy5wdXNoKHRoaXMucmVuZGVyUmVxdWlyZVRleHQoZWxlbWVudCwgY3NzQ2xhc3NlcykpO1xuICAgICAgc3BhbnMucHVzaChnZXRTcGFjZVNwYW4oXCJyZXEtc3BcIikpO1xuICAgIH1cbiAgICBzcGFucy5wdXNoKFxuICAgICAgU3VydmV5RWxlbWVudEJhc2UucmVuZGVyTG9jU3RyaW5nKGVsZW1lbnQubG9jVGl0bGUsIG51bGwsIFwicV90aXRsZVwiKVxuICAgICk7XG4gICAgaWYgKGVsZW1lbnQuaXNSZXF1aXJlVGV4dEFmdGVyVGl0bGUpIHtcbiAgICAgIHNwYW5zLnB1c2goZ2V0U3BhY2VTcGFuKFwicmVxLXNwXCIpKTtcbiAgICAgIHNwYW5zLnB1c2godGhpcy5yZW5kZXJSZXF1aXJlVGV4dChlbGVtZW50LCBjc3NDbGFzc2VzKSk7XG4gICAgfVxuICAgIHJldHVybiBzcGFucztcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyUmVxdWlyZVRleHQoXG4gICAgZWxlbWVudDogSVRpdGxlT3duZXIsXG4gICAgY3NzQ2xhc3NlczogYW55XG4gICk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPHNwYW5cbiAgICAgICAgZGF0YS1rZXk9e1wicmVxLXRleHRcIn1cbiAgICAgICAga2V5PXtcInJlcS10ZXh0XCJ9XG4gICAgICAgIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5yZXF1aXJlZFRleHQgfHwgY3NzQ2xhc3Nlcy5wYW5lbC5yZXF1aXJlZFRleHR9XG4gICAgICAgIGFyaWEtaGlkZGVuPXt0cnVlfVxuICAgICAgPlxuICAgICAgICB7ZWxlbWVudC5yZXF1aXJlZFRleHR9XG4gICAgICA8L3NwYW4+XG4gICAgKTtcbiAgfVxufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudENvcmUsIGRvS2V5MkNsaWNrVXAgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFRpdGxlQWN0aW9ucyB9IGZyb20gXCIuL3RpdGxlLWFjdGlvbnNcIjtcblxuZXhwb3J0IGNsYXNzIFRpdGxlRWxlbWVudCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxhbnksIGFueT4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByaXZhdGUgZ2V0IGVsZW1lbnQoKTogU3VydmV5RWxlbWVudENvcmUge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmVsZW1lbnQ7XG4gIH1cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5lbGVtZW50O1xuICAgIGlmICghZWxlbWVudCB8fCAhZWxlbWVudC5oYXNUaXRsZSkgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgdGl0bGVDb250ZW50ID0gKFxuICAgICAgPFRpdGxlQWN0aW9uc1xuICAgICAgICBlbGVtZW50PXtlbGVtZW50fVxuICAgICAgICBjc3NDbGFzc2VzPXtlbGVtZW50LmNzc0NsYXNzZXN9XG4gICAgICA+PC9UaXRsZUFjdGlvbnM+XG4gICAgKTtcbiAgICBsZXQgb25DbGljayA9IG51bGw7XG4gICAgbGV0IG9uS2V5VXAgPSBudWxsO1xuICAgIGlmIChlbGVtZW50Lmhhc1RpdGxlRXZlbnRzKSB7XG4gICAgICBvbkNsaWNrID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4gZWxlbWVudC50b2dnbGVTdGF0ZSgpO1xuICAgICAgfTtcbiAgICAgIG9uS2V5VXAgPSAoZXZ0OiBhbnkpID0+IHtcbiAgICAgICAgZG9LZXkyQ2xpY2tVcChldnQubmF0aXZlRXZlbnQpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBDdXN0b21UYWcgPSBlbGVtZW50LnRpdGxlVGFnTmFtZSBhcyBrZXlvZiBKU1guSW50cmluc2ljRWxlbWVudHM7XG4gICAgcmV0dXJuIChcbiAgICAgIDxDdXN0b21UYWdcbiAgICAgICAgY2xhc3NOYW1lPXtlbGVtZW50LmNzc1RpdGxlfVxuICAgICAgICBpZD17ZWxlbWVudC5hcmlhVGl0bGVJZH1cbiAgICAgICAgYXJpYS1sYWJlbD17XG4gICAgICAgICAgZWxlbWVudC5nZXRUeXBlKCkgPT09IFwicmFkaW9ncm91cFwiXG4gICAgICAgICAgICA/IFwiXCJcbiAgICAgICAgICAgIDogZWxlbWVudC5sb2NUaXRsZS5yZW5kZXJlZEh0bWxcbiAgICAgICAgfVxuICAgICAgICB0YWJJbmRleD17ZWxlbWVudC50aXRsZVRhYkluZGV4fVxuICAgICAgICBhcmlhLWV4cGFuZGVkPXtlbGVtZW50LnRpdGxlQXJpYUV4cGFuZGVkfVxuICAgICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgICBvbktleVVwPXtvbktleVVwfVxuICAgICAgPlxuICAgICAgICB7dGl0bGVDb250ZW50fVxuICAgICAgPC9DdXN0b21UYWc+XG4gICAgKTtcbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlDdXN0b21XaWRnZXQgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgcHJpdmF0ZSB3aWRnZXRSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy53aWRnZXRSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuICBwcml2YXRlIF9hZnRlclJlbmRlcigpIHtcbiAgICBpZiAodGhpcy5xdWVzdGlvbkJhc2UuY3VzdG9tV2lkZ2V0KSB7XG4gICAgICBsZXQgZWwgPSB0aGlzLndpZGdldFJlZi5jdXJyZW50O1xuICAgICAgaWYgKCEhZWwpIHtcbiAgICAgICAgdGhpcy5xdWVzdGlvbkJhc2UuY3VzdG9tV2lkZ2V0LmFmdGVyUmVuZGVyKHRoaXMucXVlc3Rpb25CYXNlLCBlbCk7XG4gICAgICAgIHRoaXMucXVlc3Rpb25CYXNlLmN1c3RvbVdpZGdldERhdGEuaXNOZWVkUmVuZGVyID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgaWYgKHRoaXMucXVlc3Rpb25CYXNlKSB7XG4gICAgICB0aGlzLl9hZnRlclJlbmRlcigpO1xuICAgIH1cbiAgfVxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBhbnksIHByZXZTdGF0ZTogYW55KSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKTtcbiAgICB2YXIgaXNEZWZhdWx0UmVuZGVyID1cbiAgICAgICEhdGhpcy5xdWVzdGlvbkJhc2UuY3VzdG9tV2lkZ2V0ICYmXG4gICAgICB0aGlzLnF1ZXN0aW9uQmFzZS5jdXN0b21XaWRnZXQuaXNEZWZhdWx0UmVuZGVyO1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uQmFzZSAmJiAhaXNEZWZhdWx0UmVuZGVyKSB7XG4gICAgICB0aGlzLl9hZnRlclJlbmRlcigpO1xuICAgIH1cbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uQmFzZS5jdXN0b21XaWRnZXQpIHtcbiAgICAgIGxldCBlbCA9IHRoaXMud2lkZ2V0UmVmLmN1cnJlbnQ7XG4gICAgICBpZiAoISFlbCkge1xuICAgICAgICB0aGlzLnF1ZXN0aW9uQmFzZS5jdXN0b21XaWRnZXQud2lsbFVubW91bnQodGhpcy5xdWVzdGlvbkJhc2UsIGVsKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gc3VwZXIuY2FuUmVuZGVyKCkgJiYgdGhpcy5xdWVzdGlvbkJhc2UudmlzaWJsZTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgbGV0IGN1c3RvbVdpZGdldCA9IHRoaXMucXVlc3Rpb25CYXNlLmN1c3RvbVdpZGdldDtcblxuICAgIGlmIChjdXN0b21XaWRnZXQuaXNEZWZhdWx0UmVuZGVyKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IHJlZj17dGhpcy53aWRnZXRSZWZ9PlxuICAgICAgICAgIHt0aGlzLmNyZWF0b3IuY3JlYXRlUXVlc3Rpb25FbGVtZW50KHRoaXMucXVlc3Rpb25CYXNlKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH1cblxuICAgIGxldCB3aWRnZXQgPSBudWxsO1xuICAgIGlmIChjdXN0b21XaWRnZXQud2lkZ2V0SnNvbi5yZW5kZXIpIHtcbiAgICAgIHdpZGdldCA9IGN1c3RvbVdpZGdldC53aWRnZXRKc29uLnJlbmRlcih0aGlzLnF1ZXN0aW9uQmFzZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChjdXN0b21XaWRnZXQuaHRtbFRlbXBsYXRlKSB7XG4gICAgICAgIGxldCBodG1sVmFsdWUgPSB7IF9faHRtbDogY3VzdG9tV2lkZ2V0Lmh0bWxUZW1wbGF0ZSB9O1xuICAgICAgICByZXR1cm4gPGRpdiByZWY9e3RoaXMud2lkZ2V0UmVmfSBkYW5nZXJvdXNseVNldElubmVySFRNTD17aHRtbFZhbHVlfSAvPjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIDxkaXYgcmVmPXt0aGlzLndpZGdldFJlZn0+e3dpZGdldH08L2Rpdj47XG4gIH1cbn1cbiIsImltcG9ydCB7IEhhc2hUYWJsZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5leHBvcnQgY2xhc3MgUmVhY3RFbGVtZW50RmFjdG9yeSB7XG4gIHB1YmxpYyBzdGF0aWMgSW5zdGFuY2U6IFJlYWN0RWxlbWVudEZhY3RvcnkgPSBuZXcgUmVhY3RFbGVtZW50RmFjdG9yeSgpO1xuICBwcml2YXRlIGNyZWF0b3JIYXNoOiBIYXNoVGFibGU8KG5hbWU6IHN0cmluZykgPT4gSlNYLkVsZW1lbnQ+ID0ge307XG5cbiAgcHVibGljIHJlZ2lzdGVyRWxlbWVudChcbiAgICBlbGVtZW50VHlwZTogc3RyaW5nLFxuICAgIGVsZW1lbnRDcmVhdG9yOiAocHJvcHM6IGFueSkgPT4gSlNYLkVsZW1lbnRcbiAgKSB7XG4gICAgdGhpcy5jcmVhdG9ySGFzaFtlbGVtZW50VHlwZV0gPSBlbGVtZW50Q3JlYXRvcjtcbiAgfVxuICBwdWJsaWMgZ2V0QWxsVHlwZXMoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG4gICAgZm9yICh2YXIga2V5IGluIHRoaXMuY3JlYXRvckhhc2gpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQuc29ydCgpO1xuICB9XG4gIHB1YmxpYyBpc0VsZW1lbnRSZWdpc3RlcmVkKGVsZW1lbnRUeXBlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gISF0aGlzLmNyZWF0b3JIYXNoW2VsZW1lbnRUeXBlXTtcbiAgfVxuICBwdWJsaWMgY3JlYXRlRWxlbWVudChlbGVtZW50VHlwZTogc3RyaW5nLCBwYXJhbXM6IGFueSk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgY3JlYXRvciA9IHRoaXMuY3JlYXRvckhhc2hbZWxlbWVudFR5cGVdO1xuICAgIGlmIChjcmVhdG9yID09IG51bGwpIHJldHVybiBudWxsO1xuICAgIHJldHVybiBjcmVhdG9yKHBhcmFtcyk7XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgRmxvd1BhbmVsTW9kZWwsIFF1ZXN0aW9uIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4vZWxlbWVudC1mYWN0b3J5XCI7XG5pbXBvcnQgeyBTdXJ2ZXlQYW5lbCB9IGZyb20gXCIuL3BhbmVsXCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbiB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25cIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleUZsb3dQYW5lbCBleHRlbmRzIFN1cnZleVBhbmVsIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGZsb3dQYW5lbCgpOiBGbG93UGFuZWxNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucGFuZWwgYXMgRmxvd1BhbmVsTW9kZWw7XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICBpZiAoISF0aGlzLmZsb3dQYW5lbCkge1xuICAgICAgdGhpcy5mbG93UGFuZWwub25DdXN0b21IdG1sUHJvZHVjaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgfTtcbiAgICAgIHRoaXMuZmxvd1BhbmVsLm9uR2V0SHRtbEZvclF1ZXN0aW9uID0gdGhpcy5yZW5kZXJRdWVzdGlvbjtcbiAgICB9XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICBpZiAoISF0aGlzLmZsb3dQYW5lbCkge1xuICAgICAgdGhpcy5mbG93UGFuZWwub25DdXN0b21IdG1sUHJvZHVjaW5nID0gbnVsbDtcbiAgICAgIHRoaXMuZmxvd1BhbmVsLm9uR2V0SHRtbEZvclF1ZXN0aW9uID0gbnVsbDtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGdldFF1ZXN0aW9uKG5hbWU6IHN0cmluZyk6IFF1ZXN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5mbG93UGFuZWwuZ2V0UXVlc3Rpb25CeU5hbWUobmFtZSk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlclF1ZXN0aW9uKHF1ZXN0aW9uOiBRdWVzdGlvbik6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiPHF1ZXN0aW9uPlwiICsgcXVlc3Rpb24ubmFtZSArIFwiPC9xdWVzdGlvbj5cIjtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyUm93cygpOiBBcnJheTxKU1guRWxlbWVudD4ge1xuICAgIHJldHVybiBbdGhpcy5yZW5kZXJIdG1sKCldO1xuICB9XG4gIHByaXZhdGUgcmVuZGVyZWRJbmRleDogbnVtYmVyO1xuICBwcml2YXRlIGdldE5vZGVJbmRleCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnJlbmRlcmVkSW5kZXgrKztcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVySHRtbCgpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLmZsb3dQYW5lbCkgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgaHRtbCA9IFwiPHNwYW4+XCIgKyB0aGlzLmZsb3dQYW5lbC5wcm9kdWNlSHRtbCgpICsgXCI8L3NwYW4+XCI7XG4gICAgaWYgKCFET01QYXJzZXIpIHtcbiAgICAgIGNvbnN0IGh0bWxWYWx1ZSA9IHsgX19odG1sOiBodG1sIH07XG4gICAgICByZXR1cm4gPGRpdiBkYW5nZXJvdXNseVNldElubmVySFRNTD17aHRtbFZhbHVlfSAvPjtcbiAgICB9XG4gICAgY29uc3QgZG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhodG1sLCBcInRleHQveG1sXCIpO1xuICAgIHRoaXMucmVuZGVyZWRJbmRleCA9IDA7XG4gICAgcmV0dXJuIHRoaXMucmVuZGVyUGFyZW50Tm9kZShkb2MpO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJOb2Rlcyhkb21Ob2RlczogQXJyYXk8Tm9kZT4pOiBBcnJheTxKU1guRWxlbWVudD4ge1xuICAgIGNvbnN0IG5vZGVzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkb21Ob2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgbm9kZXMucHVzaCh0aGlzLnJlbmRlck5vZGUoZG9tTm9kZXNbaV0pKTtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGVzO1xuICB9XG4gIHByaXZhdGUgZ2V0U3R5bGUobm9kZVR5cGU6IHN0cmluZykge1xuICAgIGNvbnN0IHN0eWxlOiBhbnkgPSB7fTtcbiAgICBpZiAobm9kZVR5cGUudG9Mb3dlckNhc2UoKSA9PT0gXCJiXCIpIHtcbiAgICAgIHN0eWxlLmZvbnRXZWlnaHQgPSBcImJvbGRcIjtcbiAgICB9XG4gICAgaWYgKG5vZGVUeXBlLnRvTG93ZXJDYXNlKCkgPT09IFwiaVwiKSB7XG4gICAgICBzdHlsZS5mb250U3R5bGUgPSBcIml0YWxpY1wiO1xuICAgIH1cbiAgICBpZiAobm9kZVR5cGUudG9Mb3dlckNhc2UoKSA9PT0gXCJ1XCIpIHtcbiAgICAgIHN0eWxlLnRleHREZWNvcmF0aW9uID0gXCJ1bmRlcmxpbmVcIjtcbiAgICB9XG4gICAgcmV0dXJuIHN0eWxlO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJQYXJlbnROb2RlKG5vZGU6IE5vZGUpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3Qgbm9kZVR5cGUgPSBub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLnJlbmRlck5vZGVzKHRoaXMuZ2V0Q2hpbGREb21Ob2Rlcyhub2RlKSk7XG4gICAgaWYgKG5vZGVUeXBlID09PSBcImRpdlwiKVxuICAgICAgcmV0dXJuIDxkaXYga2V5PXt0aGlzLmdldE5vZGVJbmRleCgpfT57Y2hpbGRyZW59PC9kaXY+O1xuICAgIHJldHVybiAoXG4gICAgICA8c3BhbiBrZXk9e3RoaXMuZ2V0Tm9kZUluZGV4KCl9IHN0eWxlPXt0aGlzLmdldFN0eWxlKG5vZGVUeXBlKX0+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvc3Bhbj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJOb2RlKG5vZGU6IE5vZGUpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLmhhc1RleHRDaGlsZE5vZGVzT25seShub2RlKSkge1xuICAgICAgcmV0dXJuIHRoaXMucmVuZGVyUGFyZW50Tm9kZShub2RlKTtcbiAgICB9XG4gICAgY29uc3Qgbm9kZVR5cGUgPSBub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKG5vZGVUeXBlID09PSBcInF1ZXN0aW9uXCIpIHtcbiAgICAgIGNvbnN0IHF1ZXN0aW9uID0gdGhpcy5mbG93UGFuZWwuZ2V0UXVlc3Rpb25CeU5hbWUobm9kZS50ZXh0Q29udGVudCk7XG4gICAgICBpZiAoIXF1ZXN0aW9uKSByZXR1cm4gbnVsbDtcbiAgICAgIGNvbnN0IHF1ZXN0aW9uQm9keSA9IChcbiAgICAgICAgPFN1cnZleVF1ZXN0aW9uXG4gICAgICAgICAga2V5PXtxdWVzdGlvbi5uYW1lfVxuICAgICAgICAgIGVsZW1lbnQ9e3F1ZXN0aW9ufVxuICAgICAgICAgIGNyZWF0b3I9e3RoaXMuY3JlYXRvcn1cbiAgICAgICAgICBjc3M9e3RoaXMuY3NzfVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICAgIHJldHVybiA8c3BhbiBrZXk9e3RoaXMuZ2V0Tm9kZUluZGV4KCl9PntxdWVzdGlvbkJvZHl9PC9zcGFuPjtcbiAgICB9XG4gICAgaWYgKG5vZGVUeXBlID09PSBcImRpdlwiKSB7XG4gICAgICByZXR1cm4gPGRpdiBrZXk9e3RoaXMuZ2V0Tm9kZUluZGV4KCl9Pntub2RlLnRleHRDb250ZW50fTwvZGl2PjtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDxzcGFuIGtleT17dGhpcy5nZXROb2RlSW5kZXgoKX0gc3R5bGU9e3RoaXMuZ2V0U3R5bGUobm9kZVR5cGUpfT5cbiAgICAgICAge25vZGUudGV4dENvbnRlbnR9XG4gICAgICA8L3NwYW4+XG4gICAgKTtcbiAgfVxuICBwcml2YXRlIGdldENoaWxkRG9tTm9kZXMobm9kZTogTm9kZSk6IEFycmF5PE5vZGU+IHtcbiAgICBjb25zdCBkb21Ob2RlcyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZS5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBkb21Ob2Rlcy5wdXNoKG5vZGUuY2hpbGROb2Rlc1tpXSk7XG4gICAgfVxuICAgIHJldHVybiBkb21Ob2RlcztcbiAgfVxuICBwcml2YXRlIGhhc1RleHRDaGlsZE5vZGVzT25seShub2RlOiBOb2RlKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgbm9kZXMgPSBub2RlLmNoaWxkTm9kZXM7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKG5vZGVzW2ldLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgIT09IFwiI3RleHRcIikgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQ29udGVudChzdHlsZTogYW55LCByb3dzOiBKU1guRWxlbWVudFtdKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZi1wYW5lbFwiLCB7IHN0eWxlOiBzdHlsZSB9LCByb3dzKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcImZsb3dwYW5lbFwiLCBwcm9wcyA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleUZsb3dQYW5lbCwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFF1ZXN0aW9uSW1hZ2VNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uSW1hZ2UgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIHRoaXMucXVlc3Rpb24ubG9jSW1hZ2VMaW5rLm9uQ2hhbmdlZCA9ICgpID0+IHtcbiAgICAgIHRoaXMuZm9yY2VVcGRhdGUoKTtcbiAgICB9O1xuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAgdGhpcy5xdWVzdGlvbi5sb2NJbWFnZUxpbmsub25DaGFuZ2VkID0gKCkgPT4geyB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbkltYWdlTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBRdWVzdGlvbkltYWdlTW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gc3VwZXIuY2FuUmVuZGVyKCkgJiYgISF0aGlzLnF1ZXN0aW9uLmltYWdlTGluaztcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGNzc0NsYXNzZXMgPSB0aGlzLnF1ZXN0aW9uLmdldEltYWdlQ3NzKCk7XG4gICAgdmFyIHN0eWxlOiBhbnkgPSB7IG9iamVjdEZpdDogdGhpcy5xdWVzdGlvbi5pbWFnZUZpdCB9O1xuICAgIHZhciBjb250cm9sID0gbnVsbDtcbiAgICBpZiAodGhpcy5xdWVzdGlvbi5yZW5kZXJlZE1vZGUgPT09IFwiaW1hZ2VcIikge1xuICAgICAgY29udHJvbCA9IChcbiAgICAgICAgPGltZ1xuICAgICAgICAgIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlc31cbiAgICAgICAgICBzcmM9e3RoaXMucXVlc3Rpb24ubG9jSW1hZ2VMaW5rLnJlbmRlcmVkSHRtbH1cbiAgICAgICAgICBhbHQ9e3RoaXMucXVlc3Rpb24udGV4dCB8fCB0aGlzLnF1ZXN0aW9uLnRpdGxlfVxuICAgICAgICAgIHdpZHRoPXt0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkV2lkdGh9XG4gICAgICAgICAgaGVpZ2h0PXt0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkSGVpZ2h0fVxuICAgICAgICAgIC8vYWx0PXtpdGVtLnRleHQgfHwgaXRlbS52YWx1ZX1cbiAgICAgICAgICBzdHlsZT17c3R5bGV9XG4gICAgICAgIC8+XG4gICAgICApO1xuICAgIH1cbiAgICBpZiAodGhpcy5xdWVzdGlvbi5yZW5kZXJlZE1vZGUgPT09IFwidmlkZW9cIikge1xuICAgICAgY29udHJvbCA9IChcbiAgICAgICAgPHZpZGVvIGNvbnRyb2xzXG4gICAgICAgICAgY2xhc3NOYW1lPXtjc3NDbGFzc2VzfVxuICAgICAgICAgIHNyYz17dGhpcy5xdWVzdGlvbi5pbWFnZUxpbmt9XG4gICAgICAgICAgd2lkdGg9e3RoaXMucXVlc3Rpb24ucmVuZGVyZWRXaWR0aH1cbiAgICAgICAgICBoZWlnaHQ9e3RoaXMucXVlc3Rpb24ucmVuZGVyZWRIZWlnaHR9XG4gICAgICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgICA+PC92aWRlbz5cbiAgICAgICk7XG4gICAgfVxuICAgIGlmICh0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkTW9kZSA9PT0gXCJ5b3V0dWJlXCIpIHtcbiAgICAgIGNvbnRyb2wgPSAoXG4gICAgICAgIDxpZnJhbWVcbiAgICAgICAgICBjbGFzc05hbWU9e2Nzc0NsYXNzZXN9XG4gICAgICAgICAgc3JjPXt0aGlzLnF1ZXN0aW9uLmltYWdlTGlua31cbiAgICAgICAgICB3aWR0aD17dGhpcy5xdWVzdGlvbi5yZW5kZXJlZFdpZHRofVxuICAgICAgICAgIGhlaWdodD17dGhpcy5xdWVzdGlvbi5yZW5kZXJlZEhlaWdodH1cbiAgICAgICAgICBzdHlsZT17c3R5bGV9XG4gICAgICAgID48L2lmcmFtZT5cbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnJvb3R9Pntjb250cm9sfTwvZGl2PjtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiaW1hZ2VcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uSW1hZ2UsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50QmFzZSwgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25JbWFnZVBpY2tlck1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBJdGVtVmFsdWUsIFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuaW1wb3J0IHsgUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIgfSBmcm9tIFwiLi9yZWFjdHN1cnZleW1vZGVsXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkltYWdlUGlja2VyIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5oYW5kbGVPbkNoYW5nZSA9IHRoaXMuaGFuZGxlT25DaGFuZ2UuYmluZCh0aGlzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uSW1hZ2VQaWNrZXJNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFF1ZXN0aW9uSW1hZ2VQaWNrZXJNb2RlbDtcbiAgfVxuICBoYW5kbGVPbkNoYW5nZShldmVudDogYW55KSB7XG4gICAgaWYgKHRoaXMucXVlc3Rpb24ubXVsdGlTZWxlY3QpIHtcbiAgICAgIGlmIChldmVudC50YXJnZXQuY2hlY2tlZCkge1xuICAgICAgICB0aGlzLnF1ZXN0aW9uLnZhbHVlID0gdGhpcy5xdWVzdGlvbi52YWx1ZS5jb25jYXQoZXZlbnQudGFyZ2V0LnZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBjdXJyVmFsdWUgPSB0aGlzLnF1ZXN0aW9uLnZhbHVlO1xuICAgICAgICBjdXJyVmFsdWUuc3BsaWNlKHRoaXMucXVlc3Rpb24udmFsdWUuaW5kZXhPZihldmVudC50YXJnZXQudmFsdWUpLCAxKTtcbiAgICAgICAgdGhpcy5xdWVzdGlvbi52YWx1ZSA9IGN1cnJWYWx1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5xdWVzdGlvbi52YWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICB9XG4gICAgdGhpcy5zZXRTdGF0ZSh7IHZhbHVlOiB0aGlzLnF1ZXN0aW9uLnZhbHVlIH0pO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgY3NzQ2xhc3NlcyA9IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3NlcztcbiAgICByZXR1cm4gKFxuICAgICAgPGZpZWxkc2V0IGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5yb290fT5cbiAgICAgICAgPGxlZ2VuZFxuICAgICAgICAgIHJvbGU9XCJyYWRpb1wiXG4gICAgICAgICAgYXJpYS1sYWJlbD17dGhpcy5xdWVzdGlvbi5sb2NUaXRsZS5yZW5kZXJlZEh0bWx9IC8+XG4gICAgICAgIHt0aGlzLmdldEl0ZW1zKGNzc0NsYXNzZXMpfVxuICAgICAgPC9maWVsZHNldD5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBnZXRJdGVtcyhjc3NDbGFzc2VzOiBhbnkpOiBBcnJheTxhbnk+IHtcbiAgICB2YXIgaXRlbXMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucXVlc3Rpb24udmlzaWJsZUNob2ljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpdGVtID0gdGhpcy5xdWVzdGlvbi52aXNpYmxlQ2hvaWNlc1tpXTtcbiAgICAgIHZhciBrZXkgPSB0aGlzLnF1ZXN0aW9uLm5hbWUgKyBcIi1cIiArIGl0ZW0udmFsdWU7XG4gICAgICBpdGVtcy5wdXNoKHRoaXMucmVuZGVySXRlbShrZXksIGl0ZW0sIGNzc0NsYXNzZXMpKTtcbiAgICB9XG4gICAgcmV0dXJuIGl0ZW1zO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgdGV4dFN0eWxlKCk6IGFueSB7XG4gICAgcmV0dXJuIHsgbWFyZ2luTGVmdDogXCIzcHhcIiwgZGlzcGxheTogXCJpbmxpbmVcIiwgcG9zaXRpb246IFwic3RhdGljXCIgfTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVySXRlbShcbiAgICBrZXk6IHN0cmluZyxcbiAgICBpdGVtOiBJdGVtVmFsdWUsXG4gICAgY3NzQ2xhc3NlczogYW55XG4gICk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgaXNDaGVja2VkID0gdGhpcy5xdWVzdGlvbi5pc0l0ZW1TZWxlY3RlZChpdGVtKTtcbiAgICB2YXIgaXRlbUNsYXNzID0gdGhpcy5xdWVzdGlvbi5nZXRJdGVtQ2xhc3MoaXRlbSk7XG4gICAgdmFyIHRleHQgPSBudWxsO1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLnNob3dMYWJlbCkge1xuICAgICAgdGV4dCA9IChcbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pdGVtVGV4dH1cbiAgICAgICAgPlxuICAgICAgICAgIHtpdGVtLnRleHQgPyBTdXJ2ZXlFbGVtZW50QmFzZS5yZW5kZXJMb2NTdHJpbmcoaXRlbS5sb2NUZXh0KSA6IGl0ZW0udmFsdWV9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgdmFyIHN0eWxlOiBhbnkgPSB7IG9iamVjdEZpdDogdGhpcy5xdWVzdGlvbi5pbWFnZUZpdCB9O1xuXG4gICAgdmFyIGNvbnRyb2wgPSBudWxsO1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLmNvbnRlbnRNb2RlID09PSBcImltYWdlXCIpIHtcbiAgICAgIGNvbnRyb2wgPSAoXG4gICAgICAgIDxpbWdcbiAgICAgICAgICBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuaW1hZ2V9XG4gICAgICAgICAgc3JjPXtpdGVtW1wiaW1hZ2VMaW5rXCJdfVxuICAgICAgICAgIHdpZHRoPXsgdGhpcy5xdWVzdGlvbi5yZW5kZXJlZEltYWdlV2lkdGggfVxuICAgICAgICAgIGhlaWdodD17IHRoaXMucXVlc3Rpb24ucmVuZGVyZWRJbWFnZUhlaWdodCB9XG4gICAgICAgICAgYWx0PXtpdGVtLmxvY1RleHQucmVuZGVyZWRIdG1sfVxuICAgICAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfVxuICAgIGlmICh0aGlzLnF1ZXN0aW9uLmNvbnRlbnRNb2RlID09PSBcInZpZGVvXCIpIHtcbiAgICAgIGNvbnRyb2wgPSAoXG4gICAgICAgIDx2aWRlbyBjb250cm9sc1xuICAgICAgICAgIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5pbWFnZX1cbiAgICAgICAgICBzcmM9e2l0ZW1bXCJpbWFnZUxpbmtcIl19XG4gICAgICAgICAgd2lkdGg9eyB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkSW1hZ2VXaWR0aCB9XG4gICAgICAgICAgaGVpZ2h0PXsgdGhpcy5xdWVzdGlvbi5yZW5kZXJlZEltYWdlSGVpZ2h0IH1cbiAgICAgICAgICBzdHlsZT17c3R5bGV9XG4gICAgICAgID48L3ZpZGVvPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCByZW5kZXJlZEl0ZW0gPSAoXG4gICAgICA8ZGl2IGtleT17a2V5fSBjbGFzc05hbWU9e2l0ZW1DbGFzc30+XG4gICAgICAgIDxsYWJlbCBjbGFzc05hbWU9e2Nzc0NsYXNzZXMubGFiZWx9PlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLml0ZW1Db250cm9sfVxuICAgICAgICAgICAgaWQ9e3RoaXMucXVlc3Rpb24uZ2V0SXRlbUlkKGl0ZW0pfVxuICAgICAgICAgICAgdHlwZT17dGhpcy5xdWVzdGlvbi5pbnB1dFR5cGV9XG4gICAgICAgICAgICBuYW1lPXt0aGlzLnF1ZXN0aW9uLnF1ZXN0aW9uTmFtZX1cbiAgICAgICAgICAgIGNoZWNrZWQ9e2lzQ2hlY2tlZH1cbiAgICAgICAgICAgIHZhbHVlPXtpdGVtLnZhbHVlfVxuICAgICAgICAgICAgZGlzYWJsZWQ9eyF0aGlzLnF1ZXN0aW9uLmdldEl0ZW1FbmFibGVkKGl0ZW0pfVxuICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlT25DaGFuZ2V9XG4gICAgICAgICAgICBhcmlhLXJlcXVpcmVkPXt0aGlzLnF1ZXN0aW9uLmFyaWFSZXF1aXJlZH1cbiAgICAgICAgICAgIGFyaWEtbGFiZWw9e3RoaXMucXVlc3Rpb24uYXJpYUxhYmVsfVxuICAgICAgICAgICAgYXJpYS1pbnZhbGlkPXt0aGlzLnF1ZXN0aW9uLmFyaWFJbnZhbGlkfVxuICAgICAgICAgICAgYXJpYS1kZXNjcmliZWRieT17dGhpcy5xdWVzdGlvbi5hcmlhRGVzY3JpYmVkQnl9XG4gICAgICAgICAgLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLml0ZW1EZWNvcmF0b3J9PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pbWFnZUNvbnRhaW5lcn0+XG4gICAgICAgICAgICAgIHtjb250cm9sfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB7dGV4dH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gICAgY29uc3Qgc3VydmV5ID0gdGhpcy5xdWVzdGlvbi5zdXJ2ZXkgYXMgU3VydmV5TW9kZWw7XG4gICAgbGV0IHdyYXBwZWRJdGVtID0gbnVsbDtcbiAgICBpZighIXN1cnZleSkge1xuICAgICAgd3JhcHBlZEl0ZW0gPSBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlci53cmFwSXRlbVZhbHVlKHN1cnZleSwgcmVuZGVyZWRJdGVtLCB0aGlzLnF1ZXN0aW9uLCBpdGVtKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyYXBwZWRJdGVtID8/IHJlbmRlcmVkSXRlbTtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiaW1hZ2VwaWNrZXJcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uSW1hZ2VQaWNrZXIsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBQYWdlTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBQYW5lbE1vZGVsQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5UGFuZWxCYXNlIH0gZnJvbSBcIi4vcGFuZWwtYmFzZVwiO1xuaW1wb3J0IHsgVGl0bGVFbGVtZW50IH0gZnJvbSBcIi4vY29tcG9uZW50cy90aXRsZS90aXRsZS1lbGVtZW50XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlQYWdlIGV4dGVuZHMgU3VydmV5UGFuZWxCYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0UGFuZWxCYXNlKCk6IFBhbmVsTW9kZWxCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5wYWdlO1xuICB9XG4gIHB1YmxpYyBnZXQgcGFnZSgpOiBQYWdlTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnBhbmVsQmFzZSBhcyBQYWdlTW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciB0aXRsZSA9IHRoaXMucmVuZGVyVGl0bGUoKTtcbiAgICB2YXIgZGVzY3JpcHRpb24gPSB0aGlzLnJlbmRlckRlc2NyaXB0aW9uKCk7XG4gICAgdmFyIHJvd3MgPSB0aGlzLnJlbmRlclJvd3ModGhpcy5wYW5lbEJhc2UuY3NzQ2xhc3Nlcyk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgcmVmPXt0aGlzLnJvb3RSZWZ9IGNsYXNzTmFtZT17dGhpcy5wYW5lbEJhc2UuY3NzQ2xhc3Nlcy5wYWdlLnJvb3R9PlxuICAgICAgICB7dGl0bGV9XG4gICAgICAgIHtkZXNjcmlwdGlvbn1cbiAgICAgICAge3Jvd3N9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJUaXRsZSgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIDxUaXRsZUVsZW1lbnQgZWxlbWVudD17dGhpcy5wYWdlfT48L1RpdGxlRWxlbWVudD47XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckRlc2NyaXB0aW9uKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMucGFnZS5fc2hvd0Rlc2NyaXB0aW9uKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgdGV4dCA9IFN1cnZleUVsZW1lbnRCYXNlLnJlbmRlckxvY1N0cmluZyh0aGlzLnBhZ2UubG9jRGVzY3JpcHRpb24pO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5wYW5lbEJhc2UuY3NzQ2xhc3Nlcy5wYWdlLmRlc2NyaXB0aW9ufT57dGV4dH08L2Rpdj5cbiAgICApO1xuICB9XG59XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IElTdXJ2ZXlDcmVhdG9yIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvblwiO1xuaW1wb3J0IHsgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFF1ZXN0aW9uUm93TW9kZWwsIFBhbmVsTW9kZWwsIFBhbmVsTW9kZWxCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50QmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5Um93IH0gZnJvbSBcIi4vcm93XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlQYW5lbEJhc2UgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxhbnksIGFueT4ge1xuICBwcm90ZWN0ZWQgcm9vdFJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnJvb3RSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnBhbmVsQmFzZTtcbiAgfVxuICBwcm90ZWN0ZWQgY2FuVXNlUHJvcEluU3RhdGUoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4ga2V5ICE9PSBcImVsZW1lbnRzXCIgJiYgc3VwZXIuY2FuVXNlUHJvcEluU3RhdGUoa2V5KTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHN1cnZleSgpOiBTdXJ2ZXlNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3VydmV5KCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBjcmVhdG9yKCk6IElTdXJ2ZXlDcmVhdG9yIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jcmVhdG9yO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgY3NzKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q3NzKCk7XG4gIH1cbiAgcHVibGljIGdldCBwYW5lbEJhc2UoKTogUGFuZWxNb2RlbEJhc2Uge1xuICAgIHJldHVybiB0aGlzLmdldFBhbmVsQmFzZSgpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRQYW5lbEJhc2UoKTogUGFuZWxNb2RlbEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmVsZW1lbnQgfHwgdGhpcy5wcm9wcy5xdWVzdGlvbjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3VydmV5KCk6IFN1cnZleU1vZGVsIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5wcm9wcy5zdXJ2ZXkgfHwgKCEhdGhpcy5wYW5lbEJhc2UgPyB0aGlzLnBhbmVsQmFzZS5zdXJ2ZXkgOiBudWxsKVxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldENzcygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNzcztcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIHRoaXMuZG9BZnRlclJlbmRlcigpO1xuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAgdmFyIGVsID0gdGhpcy5yb290UmVmLmN1cnJlbnQ7XG4gICAgaWYgKCEhZWwpIHtcbiAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZShcImRhdGEtcmVuZGVyZWRcIik7XG4gICAgfVxuICB9XG4gIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHM6IGFueSwgcHJldlN0YXRlOiBhbnkpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUpO1xuICAgIGlmIChcbiAgICAgICEhcHJldlByb3BzLnBhZ2UgJiZcbiAgICAgICEhdGhpcy5zdXJ2ZXkgJiZcbiAgICAgICEhdGhpcy5zdXJ2ZXkuY3VycmVudFBhZ2UgJiZcbiAgICAgIHByZXZQcm9wcy5wYWdlLm5hbWUgPT09IHRoaXMuc3VydmV5LmN1cnJlbnRQYWdlLm5hbWVcbiAgICApXG4gICAgICByZXR1cm47XG4gICAgdGhpcy5kb0FmdGVyUmVuZGVyKCk7XG4gIH1cbiAgcHJpdmF0ZSBkb0FmdGVyUmVuZGVyKCkge1xuICAgIHZhciBlbCA9IHRoaXMucm9vdFJlZi5jdXJyZW50O1xuICAgIGlmIChlbCAmJiB0aGlzLnN1cnZleSkge1xuICAgICAgaWYgKHRoaXMucGFuZWxCYXNlLmlzUGFuZWwpIHtcbiAgICAgICAgdGhpcy5zdXJ2ZXkuYWZ0ZXJSZW5kZXJQYW5lbCh0aGlzLnBhbmVsQmFzZSBhcyBQYW5lbE1vZGVsLCBlbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnN1cnZleS5hZnRlclJlbmRlclBhZ2UoZWwpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBzdXBlci5jYW5SZW5kZXIoKSAmJiAhIXRoaXMuc3VydmV5ICYmICEhdGhpcy5wYW5lbEJhc2VcbiAgICAgICYmIHRoaXMucGFuZWxCYXNlLmlzVmlzaWJsZSAmJiAhIXRoaXMucGFuZWxCYXNlLnN1cnZleVxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSByZW5kZXJlZFJvd3NDYWNoZTogYW55ID0ge307XG4gIHByb3RlY3RlZCByZW5kZXJSb3dzKGNzczogYW55KTogQXJyYXk8SlNYLkVsZW1lbnQ+IHtcbiAgICBpZiAodGhpcy5jaGFuZ2VkU3RhdGVQcm9wTmFtZSAhPT0gXCJyb3dzXCIpIHtcbiAgICAgIHRoaXMucmVuZGVyZWRSb3dzQ2FjaGUgPSB7fTtcbiAgICB9XG4gICAgdmFyIHJvd3MgPSBbXTtcbiAgICB2YXIgcXVlc3Rpb25Sb3dzID0gdGhpcy5wYW5lbEJhc2Uucm93cztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9uUm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHJvdyA9IHRoaXMucmVuZGVyZWRSb3dzQ2FjaGVbcXVlc3Rpb25Sb3dzW2ldLmlkXTtcbiAgICAgIGlmICghcm93KSB7XG4gICAgICAgIHJvdyA9IHRoaXMuY3JlYXRlUm93KHF1ZXN0aW9uUm93c1tpXSwgY3NzKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlZFJvd3NDYWNoZVtxdWVzdGlvblJvd3NbaV0uaWRdID0gcm93O1xuICAgICAgfVxuICAgICAgcm93cy5wdXNoKHJvdyk7XG4gICAgfVxuICAgIHJldHVybiByb3dzO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVSb3cocm93OiBRdWVzdGlvblJvd01vZGVsLCBjc3M6IGFueSk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPFN1cnZleVJvd1xuICAgICAgICBrZXk9e3Jvdy5pZH1cbiAgICAgICAgcm93PXtyb3d9XG4gICAgICAgIHN1cnZleT17dGhpcy5zdXJ2ZXl9XG4gICAgICAgIGNyZWF0b3I9e3RoaXMuY3JlYXRvcn1cbiAgICAgICAgY3NzPXtjc3N9XG4gICAgICAvPlxuICAgICk7XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudEVycm9ycyB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25cIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4vZWxlbWVudC1mYWN0b3J5XCI7XG5cbmltcG9ydCB7IFN1cnZleVBhbmVsQmFzZSB9IGZyb20gXCIuL3BhbmVsLWJhc2VcIjtcbmltcG9ydCB7IFBhbmVsTW9kZWwsIGRvS2V5MkNsaWNrVXAsIFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlciB9IGZyb20gXCIuL3JlYWN0c3VydmV5bW9kZWxcIjtcbmltcG9ydCB7IFN1cnZleUFjdGlvbkJhciB9IGZyb20gXCIuL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24tYmFyXCI7XG5pbXBvcnQgeyBUaXRsZUVsZW1lbnQgfSBmcm9tIFwiLi9jb21wb25lbnRzL3RpdGxlL3RpdGxlLWVsZW1lbnRcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVBhbmVsIGV4dGVuZHMgU3VydmV5UGFuZWxCYXNlIHtcbiAgcHJpdmF0ZSBoYXNCZWVuRXhwYW5kZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHBhbmVsKCk6IFBhbmVsTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnBhbmVsQmFzZSBhcyBQYW5lbE1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBoZWFkZXIgPSB0aGlzLnJlbmRlckhlYWRlcigpO1xuICAgIGNvbnN0IGVycm9ycyA9IChcbiAgICAgIDxTdXJ2ZXlFbGVtZW50RXJyb3JzXG4gICAgICAgIGVsZW1lbnQ9e3RoaXMucGFuZWxCYXNlfVxuICAgICAgICBjc3NDbGFzc2VzPXt0aGlzLnBhbmVsQmFzZS5jc3NDbGFzc2VzfVxuICAgICAgICBjcmVhdG9yPXt0aGlzLmNyZWF0b3J9XG4gICAgICAvPlxuICAgICk7XG4gICAgY29uc3Qgc3R5bGUgPSB7XG4gICAgICBwYWRkaW5nTGVmdDogdGhpcy5wYW5lbC5pbm5lclBhZGRpbmdMZWZ0LFxuICAgICAgZGlzcGxheTogIXRoaXMucGFuZWwuaXNDb2xsYXBzZWQgPyB1bmRlZmluZWQgOiBcIm5vbmVcIixcbiAgICB9O1xuICAgIGxldCBjb250ZW50OiBKU1guRWxlbWVudCA9IG51bGw7XG4gICAgaWYgKCF0aGlzLnBhbmVsLmlzQ29sbGFwc2VkIHx8IHRoaXMuaGFzQmVlbkV4cGFuZGVkKSB7XG4gICAgICB0aGlzLmhhc0JlZW5FeHBhbmRlZCA9IHRydWU7XG4gICAgICBjb25zdCByb3dzOiBKU1guRWxlbWVudFtdID0gdGhpcy5yZW5kZXJSb3dzKHRoaXMucGFuZWxCYXNlLmNzc0NsYXNzZXMpO1xuICAgICAgY29uc3QgY2xhc3NOYW1lOiBzdHJpbmcgPSB0aGlzLnBhbmVsQmFzZS5jc3NDbGFzc2VzLnBhbmVsLmNvbnRlbnQ7XG4gICAgICBjb250ZW50ID0gdGhpcy5yZW5kZXJDb250ZW50KHN0eWxlLCByb3dzLCBjbGFzc05hbWUpO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICByZWY9e3RoaXMucm9vdFJlZn1cbiAgICAgICAgY2xhc3NOYW1lPXsodGhpcy5wYW5lbEJhc2UgYXMgUGFuZWxNb2RlbCkuZ2V0Q29udGFpbmVyQ3NzKCl9XG4gICAgICAgIG9uRm9jdXM9eyh0aGlzLnBhbmVsQmFzZSBhcyBQYW5lbE1vZGVsKS5mb2N1c0lufVxuICAgICAgPlxuICAgICAgICB7aGVhZGVyfVxuICAgICAgICB7ZXJyb3JzfVxuICAgICAgICB7Y29udGVudH1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckhlYWRlcigpIHtcbiAgICBpZiAoIXRoaXMucGFuZWxCYXNlLmhhc1RpdGxlICYmICF0aGlzLnBhbmVsQmFzZS5oYXNEZXNjcmlwdGlvbikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHRpdGxlOiBKU1guRWxlbWVudCA9IHRoaXMucmVuZGVyVGl0bGUoKTtcbiAgICBjb25zdCBkZXNjcmlwdGlvbjogSlNYLkVsZW1lbnQgPSB0aGlzLnJlbmRlckRlc2NyaXB0aW9uKCk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLnBhbmVsQmFzZS5jc3NDbGFzc2VzLnBhbmVsLmhlYWRlcn0+XG4gICAgICAgIHt0aXRsZX1cbiAgICAgICAge2Rlc2NyaXB0aW9ufVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgd3JhcEVsZW1lbnQoZWxlbWVudDogSlNYLkVsZW1lbnQpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3Qgc3VydmV5OiBTdXJ2ZXlNb2RlbCA9IHRoaXMucGFuZWwuc3VydmV5IGFzIFN1cnZleU1vZGVsO1xuICAgIGxldCB3cmFwcGVyOiBKU1guRWxlbWVudDtcbiAgICBpZiAoc3VydmV5KSB7XG4gICAgICB3cmFwcGVyID0gUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIud3JhcEVsZW1lbnQoc3VydmV5LCBlbGVtZW50LCB0aGlzLnBhbmVsKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyYXBwZXIgPz8gZWxlbWVudDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQ29udGVudChzdHlsZTogYW55LCByb3dzOiBKU1guRWxlbWVudFtdLCBjbGFzc05hbWU6IHN0cmluZyk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBib3R0b206IEpTWC5FbGVtZW50ID0gdGhpcy5yZW5kZXJCb3R0b20oKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBzdHlsZT17c3R5bGV9IGNsYXNzTmFtZT17Y2xhc3NOYW1lfSBpZD17dGhpcy5wYW5lbC5jb250ZW50SWR9PlxuICAgICAgICB7cm93c31cbiAgICAgICAge2JvdHRvbX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlclRpdGxlKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMucGFuZWxCYXNlLnRpdGxlKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gPFRpdGxlRWxlbWVudCBlbGVtZW50PXt0aGlzLnBhbmVsQmFzZX0+PC9UaXRsZUVsZW1lbnQ+O1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJEZXNjcmlwdGlvbigpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLnBhbmVsQmFzZS5kZXNjcmlwdGlvbikgcmV0dXJuIG51bGw7XG4gICAgdmFyIHRleHQgPSBTdXJ2ZXlFbGVtZW50QmFzZS5yZW5kZXJMb2NTdHJpbmcodGhpcy5wYW5lbEJhc2UubG9jRGVzY3JpcHRpb24pO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5wYW5lbC5jc3NDbGFzc2VzLnBhbmVsLmRlc2NyaXB0aW9ufT57dGV4dH08L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJCb3R0b20oKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGZvb3RlclRvb2xiYXIgPSB0aGlzLnBhbmVsLmdldEZvb3RlclRvb2xiYXIoKTtcbiAgICBpZiAoIWZvb3RlclRvb2xiYXIuaGFzQWN0aW9ucykgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIDxTdXJ2ZXlBY3Rpb25CYXIgbW9kZWw9e2Zvb3RlclRvb2xiYXJ9PjwvU3VydmV5QWN0aW9uQmFyPjtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInBhbmVsXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlQYW5lbCwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFF1ZXN0aW9uUmF0aW5nTW9kZWwsIFJlbmRlcmVyRmFjdG9yeSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uRHJvcGRvd25CYXNlIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9kcm9wZG93blwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25SYXRpbmdEcm9wZG93biBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRHJvcGRvd25CYXNlPFF1ZXN0aW9uUmF0aW5nTW9kZWw+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGNzc0NsYXNzZXMgPSB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgdmFyIHNlbGVjdCA9IHRoaXMucmVuZGVyU2VsZWN0KGNzc0NsYXNzZXMpO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnJvb3REcm9wZG93bn0+XG4gICAgICAgIHtzZWxlY3R9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFxuICBcInN2LXJhdGluZy1kcm9wZG93blwiLFxuICAocHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvblJhdGluZ0Ryb3Bkb3duLCBwcm9wcyk7XG4gIH1cbik7XG5cblJlbmRlcmVyRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclJlbmRlcmVyKFxuICBcInJhdGluZ1wiLFxuICBcImRyb3Bkb3duXCIsXG4gIFwic3YtcmF0aW5nLWRyb3Bkb3duXCJcbik7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEJhc2UsIFF1ZXN0aW9uLCBQYWdlTW9kZWwsIFN1cnZleUVycm9yLCBTdHlsZXNNYW5hZ2VyLCBzdXJ2ZXlDc3MsIEhlbHBlcnMsIGRvS2V5MkNsaWNrVXAsIFN2Z1JlZ2lzdHJ5LCBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5UGFnZSB9IGZyb20gXCIuL3BhZ2VcIjtcbmltcG9ydCB7IElTdXJ2ZXlDcmVhdG9yIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvblwiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFN1cnZleUxvY1N0cmluZ1ZpZXdlciB9IGZyb20gXCIuL3N0cmluZy12aWV3ZXJcIjtcbmltcG9ydCB7IFN1cnZleUhlYWRlciB9IGZyb20gXCIuL2NvbXBvbmVudHMvc3VydmV5LWhlYWRlci9zdXJ2ZXktaGVhZGVyXCI7XG5pbXBvcnQgeyBTdXJ2ZXlUaW1lclBhbmVsIH0gZnJvbSBcIi4vcmVhY3R0aW1lcnBhbmVsXCI7XG5pbXBvcnQgeyBTdXJ2ZXlOYXZpZ2F0aW9uIH0gZnJvbSBcIi4vcmVhY3RTdXJ2ZXlOYXZpZ2F0aW9uXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuL2VsZW1lbnQtZmFjdG9yeVwiO1xuaW1wb3J0IHsgZG9LZXkyQ2xpY2tCbHVyLCBkb0tleTJDbGlja0Rvd24gfSBmcm9tIFwiLi4vdXRpbHMvdXRpbHNcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleSBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPGFueSwgYW55PlxuICBpbXBsZW1lbnRzIElTdXJ2ZXlDcmVhdG9yIHtcbiAgcHJpdmF0ZSBwcmV2aW91c0pTT04gPSB7fTtcbiAgcHJpdmF0ZSByb290UmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBwdWJsaWMgc3RhdGljIGdldCBjc3NUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHN1cnZleUNzcy5jdXJyZW50VHlwZTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIHNldCBjc3NUeXBlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICBTdHlsZXNNYW5hZ2VyLmFwcGx5VGhlbWUodmFsdWUpO1xuICB9XG4gIHByb3RlY3RlZCBzdXJ2ZXk6IFN1cnZleU1vZGVsO1xuXG4gIHByaXZhdGUgcm9vdE5vZGVJZDogc3RyaW5nOyAvLyByb290IGRvbSBub2RlIElEIGF0dHJcbiAgcHJpdmF0ZSByb290Tm9kZUNsYXNzTmFtZTogc3RyaW5nOyAvLyByb290IGRvbSBub2RlIGNsYXNzXG5cbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmhhbmRsZVRyeUFnYWluQ2xpY2sgPSB0aGlzLmhhbmRsZVRyeUFnYWluQ2xpY2suYmluZCh0aGlzKTtcbiAgICB0aGlzLmNyZWF0ZVN1cnZleShwcm9wcyk7XG4gICAgdGhpcy51cGRhdGVTdXJ2ZXkocHJvcHMsIHt9KTtcbiAgICB0aGlzLnJvb3RSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgICB0aGlzLnJvb3ROb2RlSWQgPSBwcm9wcy5pZCB8fCBudWxsO1xuICAgIHRoaXMucm9vdE5vZGVDbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUgfHwgXCJcIjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnN1cnZleTtcbiAgfVxuICBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzOiBhbnksIG5leHRTdGF0ZTogYW55KSB7XG4gICAgaWYgKCFzdXBlci5zaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzLCBuZXh0U3RhdGUpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHRoaXMuaXNNb2RlbEpTT05DaGFuZ2VkKG5leHRQcm9wcykpIHtcbiAgICAgIHRoaXMuY3JlYXRlU3VydmV5KG5leHRQcm9wcyk7XG4gICAgICB0aGlzLnVwZGF0ZVN1cnZleShuZXh0UHJvcHMsIHt9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogYW55LCBwcmV2U3RhdGU6IGFueSkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSk7XG4gICAgdGhpcy51cGRhdGVTdXJ2ZXkodGhpcy5wcm9wcywgcHJldlByb3BzKTtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIHZhciBlbCA9IHRoaXMucm9vdFJlZi5jdXJyZW50O1xuICAgIGlmIChlbCAmJiB0aGlzLnN1cnZleSkgdGhpcy5zdXJ2ZXkuYWZ0ZXJSZW5kZXJTdXJ2ZXkoZWwpO1xuICAgIGlmICh0aGlzLnN1cnZleSkge1xuICAgICAgdGhpcy5zdXJ2ZXkuc3RhcnRUaW1lckZyb21VSSgpO1xuICAgIH1cbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIGlmICh0aGlzLnN1cnZleSkge1xuICAgICAgdGhpcy5zdXJ2ZXkuc3RvcFRpbWVyKCk7XG4gICAgfVxuICB9XG4gIGRvUmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBTdmdSZWdpc3RyeS5yZW5kZXJJY29ucygpO1xuICAgIGxldCByZW5kZXJSZXN1bHQ6IEpTWC5FbGVtZW50O1xuICAgIGlmICh0aGlzLnN1cnZleS5zdGF0ZSA9PSBcImNvbXBsZXRlZFwiKSB7XG4gICAgICByZW5kZXJSZXN1bHQgPSB0aGlzLnJlbmRlckNvbXBsZXRlZCgpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zdXJ2ZXkuc3RhdGUgPT0gXCJjb21wbGV0ZWRiZWZvcmVcIikge1xuICAgICAgcmVuZGVyUmVzdWx0ID0gdGhpcy5yZW5kZXJDb21wbGV0ZWRCZWZvcmUoKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc3VydmV5LnN0YXRlID09IFwibG9hZGluZ1wiKSB7XG4gICAgICByZW5kZXJSZXN1bHQgPSB0aGlzLnJlbmRlckxvYWRpbmcoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVuZGVyUmVzdWx0ID0gdGhpcy5yZW5kZXJTdXJ2ZXkoKTtcbiAgICB9XG4gICAgY29uc3QgaGVhZGVyOiBKU1guRWxlbWVudCA9IDxTdXJ2ZXlIZWFkZXIgc3VydmV5PXt0aGlzLnN1cnZleX0+PC9TdXJ2ZXlIZWFkZXI+O1xuICAgIGNvbnN0IG9uU3VibWl0ID0gZnVuY3Rpb24gKGV2ZW50OiBSZWFjdC5Gb3JtRXZlbnQ8SFRNTEZvcm1FbGVtZW50Pikge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9O1xuICAgIGxldCBjdXN0b21IZWFkZXI6IEpTWC5FbGVtZW50ID0gPGRpdiBjbGFzc05hbWU9XCJzdl9jdXN0b21faGVhZGVyXCIgLz47XG4gICAgaWYgKHRoaXMuc3VydmV5Lmhhc0xvZ28pIHtcbiAgICAgIGN1c3RvbUhlYWRlciA9IG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHJvb3RDc3MgPSB0aGlzLnN1cnZleS5nZXRSb290Q3NzKCk7XG4gICAgY29uc3QgY3NzQ2xhc3NlcyA9IHRoaXMucm9vdE5vZGVDbGFzc05hbWUgPyB0aGlzLnJvb3ROb2RlQ2xhc3NOYW1lICsgXCIgXCIgKyByb290Q3NzIDogcm9vdENzcztcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGlkPXt0aGlzLnJvb3ROb2RlSWR9IHJlZj17dGhpcy5yb290UmVmfSBjbGFzc05hbWU9e2Nzc0NsYXNzZXN9PlxuICAgICAgICA8Zm9ybSBvblN1Ym1pdD17b25TdWJtaXR9PlxuICAgICAgICAgIHtjdXN0b21IZWFkZXJ9XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMuY3NzLmNvbnRhaW5lcn0+XG4gICAgICAgICAgICB7aGVhZGVyfVxuICAgICAgICAgICAge3JlbmRlclJlc3VsdH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9mb3JtPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuZG9SZW5kZXIoKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGNzcygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnN1cnZleS5jc3M7XG4gIH1cbiAgcHVibGljIHNldCBjc3ModmFsdWU6IGFueSkge1xuICAgIHRoaXMuc3VydmV5LmNzcyA9IHZhbHVlO1xuICB9XG4gIGhhbmRsZVRyeUFnYWluQ2xpY2soZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuc3VydmV5LmRvQ29tcGxldGUoKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQ29tcGxldGVkKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMuc3VydmV5LnNob3dDb21wbGV0ZWRQYWdlKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgY29tcGxldGVkU3RhdGUgPSBudWxsO1xuICAgIGlmICh0aGlzLnN1cnZleS5jb21wbGV0ZWRTdGF0ZSkge1xuICAgICAgdmFyIHRyeUFnYWluQnV0dG9uID0gbnVsbDtcbiAgICAgIGlmICh0aGlzLnN1cnZleS5jb21wbGV0ZWRTdGF0ZSA9PSBcImVycm9yXCIpIHtcbiAgICAgICAgdmFyIGJ0blRleHQgPSB0aGlzLnN1cnZleS5nZXRMb2NTdHJpbmcoXCJzYXZlQWdhaW5CdXR0b25cIik7XG4gICAgICAgIHRyeUFnYWluQnV0dG9uID0gKFxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgdHlwZT17XCJidXR0b25cIn1cbiAgICAgICAgICAgIHZhbHVlPXtidG5UZXh0fVxuICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLmNzcy5zYXZlRGF0YS5zYXZlQWdhaW5CdXR0b259XG4gICAgICAgICAgICBvbkNsaWNrPXt0aGlzLmhhbmRsZVRyeUFnYWluQ2xpY2t9XG4gICAgICAgICAgLz5cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHZhciBjc3MgPSB0aGlzLmNzcy5zYXZlRGF0YVt0aGlzLnN1cnZleS5jb21wbGV0ZWRTdGF0ZV07XG4gICAgICBjb21wbGV0ZWRTdGF0ZSA9IChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMuY3NzLnNhdmVEYXRhLnJvb3R9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3N9PlxuICAgICAgICAgICAgPHNwYW4+e3RoaXMuc3VydmV5LmNvbXBsZXRlZFN0YXRlVGV4dH08L3NwYW4+XG4gICAgICAgICAgICB7dHJ5QWdhaW5CdXR0b259XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9XG4gICAgdmFyIGh0bWxWYWx1ZSA9IHsgX19odG1sOiB0aGlzLnN1cnZleS5wcm9jZXNzZWRDb21wbGV0ZWRIdG1sIH07XG4gICAgcmV0dXJuIChcbiAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXtodG1sVmFsdWV9XG4gICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnN1cnZleS5jb21wbGV0ZWRDc3N9XG4gICAgICAgIC8+XG4gICAgICAgIHtjb21wbGV0ZWRTdGF0ZX1cbiAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQ29tcGxldGVkQmVmb3JlKCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgaHRtbFZhbHVlID0geyBfX2h0bWw6IHRoaXMuc3VydmV5LnByb2Nlc3NlZENvbXBsZXRlZEJlZm9yZUh0bWwgfTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBkYW5nZXJvdXNseVNldElubmVySFRNTD17aHRtbFZhbHVlfSBjbGFzc05hbWU9e3RoaXMuY3NzLmJvZHl9IC8+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyTG9hZGluZygpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGh0bWxWYWx1ZSA9IHsgX19odG1sOiB0aGlzLnN1cnZleS5wcm9jZXNzZWRMb2FkaW5nSHRtbCB9O1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXtodG1sVmFsdWV9IGNsYXNzTmFtZT17dGhpcy5jc3MuYm9keX0gLz5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJTdXJ2ZXkoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBhY3RpdmVQYWdlID0gdGhpcy5zdXJ2ZXkuYWN0aXZlUGFnZVxuICAgICAgPyB0aGlzLnJlbmRlclBhZ2UodGhpcy5zdXJ2ZXkuYWN0aXZlUGFnZSlcbiAgICAgIDogbnVsbDtcbiAgICBjb25zdCBpc1N0YXJpbmcgPSB0aGlzLnN1cnZleS5pc1Nob3dTdGFydGluZ1BhZ2U7XG4gICAgdmFyIHBhZ2VJZCA9IHRoaXMuc3VydmV5LmFjdGl2ZVBhZ2UgPyB0aGlzLnN1cnZleS5hY3RpdmVQYWdlLmlkIDogXCJcIjtcbiAgICB2YXIgdG9wUHJvZ3Jlc3MgPSB0aGlzLnN1cnZleS5pc1Nob3dQcm9ncmVzc0Jhck9uVG9wICYmICFpc1N0YXJpbmdcbiAgICAgID8gdGhpcy5yZW5kZXJQcm9ncmVzcyh0cnVlKVxuICAgICAgOiBudWxsO1xuICAgIHZhciBib3R0b21Qcm9ncmVzcyA9IHRoaXMuc3VydmV5LmlzU2hvd1Byb2dyZXNzQmFyT25Cb3R0b20gJiYgIWlzU3RhcmluZ1xuICAgICAgPyB0aGlzLnJlbmRlclByb2dyZXNzKGZhbHNlKVxuICAgICAgOiBudWxsO1xuICAgIGxldCBjbGFzc05hbWUgPSB0aGlzLnN1cnZleS5ib2R5Q3NzO1xuICAgIGlmICghYWN0aXZlUGFnZSkge1xuICAgICAgY2xhc3NOYW1lID0gdGhpcy5jc3MuYm9keUVtcHR5O1xuICAgICAgYWN0aXZlUGFnZSA9IHRoaXMucmVuZGVyRW1wdHlTdXJ2ZXkoKTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgaWQ9e3BhZ2VJZH1cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICA+XG4gICAgICAgIHt0b3BQcm9ncmVzc31cbiAgICAgICAge3RoaXMucmVuZGVyVGltZXJQYW5lbChcInRvcFwiKX1cbiAgICAgICAge3RoaXMucmVuZGVyTmF2aWdhdGlvbihcInRvcFwiKX1cbiAgICAgICAge2FjdGl2ZVBhZ2V9XG4gICAgICAgIHt0aGlzLnJlbmRlclRpbWVyUGFuZWwoXCJib3R0b21cIil9XG4gICAgICAgIHtib3R0b21Qcm9ncmVzc31cbiAgICAgICAge3RoaXMucmVuZGVyTmF2aWdhdGlvbihcImJvdHRvbVwiKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlclRpbWVyUGFuZWwobG9jYXRpb246IHN0cmluZykge1xuICAgIGlmKHRoaXMuc3VydmV5LmlzU2hvd1N0YXJ0aW5nUGFnZSkgcmV0dXJuIG51bGw7XG4gICAgaWYgKGxvY2F0aW9uID09PSBcInRvcFwiICYmICF0aGlzLnN1cnZleS5pc1RpbWVyUGFuZWxTaG93aW5nT25Ub3ApXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICBpZiAobG9jYXRpb24gPT09IFwiYm90dG9tXCIgJiYgIXRoaXMuc3VydmV5LmlzVGltZXJQYW5lbFNob3dpbmdPbkJvdHRvbSlcbiAgICAgIHJldHVybiBudWxsO1xuICAgIHJldHVybiA8U3VydmV5VGltZXJQYW5lbCB0aW1lck1vZGVsPXt0aGlzLnN1cnZleS50aW1lck1vZGVsfSAvPjtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyUGFnZShwYWdlOiBQYWdlTW9kZWwpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTdXJ2ZXlQYWdlXG4gICAgICAgIHN1cnZleT17dGhpcy5zdXJ2ZXl9XG4gICAgICAgIHBhZ2U9e3BhZ2V9XG4gICAgICAgIGNzcz17dGhpcy5jc3N9XG4gICAgICAgIGNyZWF0b3I9e3RoaXN9XG4gICAgICAvPlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlclByb2dyZXNzKGlzVG9wOiBib29sZWFuKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoXG4gICAgICBcInN2LXByb2dyZXNzLVwiICsgdGhpcy5zdXJ2ZXkucHJvZ3Jlc3NCYXJUeXBlLnRvTG93ZXJDYXNlKCksXG4gICAgICB7IHN1cnZleTogdGhpcy5zdXJ2ZXksIGNzczogdGhpcy5jc3MsIGlzVG9wOiBpc1RvcCB9XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyTmF2aWdhdGlvbihuYXZQb3NpdGlvbjogc3RyaW5nKTogSlNYLkVsZW1lbnQge1xuICAgIGlmIChcbiAgICAgIHRoaXMuc3VydmV5LmlzTmF2aWdhdGlvbkJ1dHRvbnNTaG93aW5nICE9PSBcImJvdGhcIiAmJlxuICAgICAgKHRoaXMuc3VydmV5LmlzTmF2aWdhdGlvbkJ1dHRvbnNTaG93aW5nID09PSBcIm5vbmVcIiB8fFxuICAgICAgICB0aGlzLnN1cnZleS5pc05hdmlnYXRpb25CdXR0b25zU2hvd2luZyAhPT0gbmF2UG9zaXRpb24pXG4gICAgKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIDxTdXJ2ZXlOYXZpZ2F0aW9uIHN1cnZleT17dGhpcy5zdXJ2ZXl9IGNzcz17dGhpcy5jc3N9IC8+O1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbXB0eVN1cnZleSgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIDxzcGFuPnt0aGlzLnN1cnZleS5lbXB0eVN1cnZleVRleHR9PC9zcGFuPjtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlU3VydmV5KG5ld1Byb3BzOiBhbnkpIHtcbiAgICBpZiAoIW5ld1Byb3BzKSBuZXdQcm9wcyA9IHt9O1xuICAgIHRoaXMucHJldmlvdXNKU09OID0ge307XG4gICAgaWYgKG5ld1Byb3BzKSB7XG4gICAgICBpZiAobmV3UHJvcHMubW9kZWwpIHtcbiAgICAgICAgdGhpcy5zdXJ2ZXkgPSBuZXdQcm9wcy5tb2RlbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChuZXdQcm9wcy5qc29uKSB7XG4gICAgICAgICAgdGhpcy5wcmV2aW91c0pTT04gPSBuZXdQcm9wcy5qc29uO1xuICAgICAgICAgIHRoaXMuc3VydmV5ID0gbmV3IFN1cnZleU1vZGVsKG5ld1Byb3BzLmpzb24pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3VydmV5ID0gbmV3IFN1cnZleU1vZGVsKCk7XG4gICAgfVxuICAgIGlmICghIW5ld1Byb3BzLmNzcykge1xuICAgICAgdGhpcy5zdXJ2ZXkuY3NzID0gdGhpcy5jc3M7XG4gICAgfVxuICAgIHRoaXMuc2V0U3VydmV5RXZlbnRzKCk7XG4gIH1cbiAgcHJpdmF0ZSBpc01vZGVsSlNPTkNoYW5nZWQobmV3UHJvcHM6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICghIW5ld1Byb3BzW1wibW9kZWxcIl0pIHtcbiAgICAgIHJldHVybiB0aGlzLnN1cnZleSAhPT0gbmV3UHJvcHNbXCJtb2RlbFwiXTtcbiAgICB9XG4gICAgaWYgKCEhbmV3UHJvcHNbXCJqc29uXCJdKSB7XG4gICAgICByZXR1cm4gIUhlbHBlcnMuaXNUd29WYWx1ZUVxdWFscyhuZXdQcm9wc1tcImpzb25cIl0sIHRoaXMucHJldmlvdXNKU09OKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHByb3RlY3RlZCB1cGRhdGVTdXJ2ZXkobmV3UHJvcHM6IGFueSwgb2xkUHJvcHM/OiBhbnkpIHtcbiAgICBpZiAoIW5ld1Byb3BzKSByZXR1cm47XG4gICAgb2xkUHJvcHMgPSBvbGRQcm9wcyB8fCB7fTtcbiAgICBmb3IgKHZhciBrZXkgaW4gbmV3UHJvcHMpIHtcbiAgICAgIGlmIChrZXkgPT0gXCJtb2RlbFwiIHx8IGtleSA9PSBcImNoaWxkcmVuXCIgfHwga2V5ID09IFwianNvblwiKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKGtleSA9PSBcImNzc1wiKSB7XG4gICAgICAgIHRoaXMuc3VydmV5Lm1lcmdlVmFsdWVzKG5ld1Byb3BzLmNzcywgdGhpcy5zdXJ2ZXkuZ2V0Q3NzKCkpO1xuICAgICAgICB0aGlzLnN1cnZleVtcInVwZGF0ZUVsZW1lbnRDc3NcIl0oKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAobmV3UHJvcHNba2V5XSA9PT0gb2xkUHJvcHNba2V5XSkgY29udGludWU7XG4gICAgICBpZiAoa2V5LmluZGV4T2YoXCJvblwiKSA9PSAwICYmIHRoaXMuc3VydmV5W2tleV0gJiYgdGhpcy5zdXJ2ZXlba2V5XS5hZGQpIHtcbiAgICAgICAgaWYgKCEhb2xkUHJvcHNba2V5XSkge1xuICAgICAgICAgIHRoaXMuc3VydmV5W2tleV0ucmVtb3ZlKG9sZFByb3BzW2tleV0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3VydmV5W2tleV0uYWRkKG5ld1Byb3BzW2tleV0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zdXJ2ZXlba2V5XSA9IG5ld1Byb3BzW2tleV07XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBzZXRTdXJ2ZXlFdmVudHMoKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgdGhpcy5zdXJ2ZXkucmVuZGVyQ2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgY291bnRlciA9XG4gICAgICAgICEhc2VsZi5zdGF0ZSAmJiAhIXNlbGYuc3RhdGUubW9kZWxDaGFuZ2VkID8gc2VsZi5zdGF0ZS5tb2RlbENoYW5nZWQgOiAwO1xuICAgICAgc2VsZi5zZXRTdGF0ZSh7IG1vZGVsQ2hhbmdlZDogY291bnRlciArIDEgfSk7XG4gICAgfTtcbiAgICB0aGlzLnN1cnZleS5vblBhcnRpYWxTZW5kLmFkZCgoc2VuZGVyKSA9PiB7XG4gICAgICBpZiAoISFzZWxmLnN0YXRlKSB7XG4gICAgICAgIHNlbGYuc2V0U3RhdGUoc2VsZi5zdGF0ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvL0lTdXJ2ZXlDcmVhdG9yXG4gIHB1YmxpYyBjcmVhdGVRdWVzdGlvbkVsZW1lbnQocXVlc3Rpb246IFF1ZXN0aW9uKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiBSZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVRdWVzdGlvbihcbiAgICAgICFxdWVzdGlvbi5pc0RlZmF1bHRSZW5kZXJpbmcgfHwgcXVlc3Rpb24uaXNEZWZhdWx0UmVuZGVyaW5nKClcbiAgICAgICAgPyBxdWVzdGlvbi5nZXRUZW1wbGF0ZSgpXG4gICAgICAgIDogcXVlc3Rpb24uZ2V0Q29tcG9uZW50TmFtZSgpLFxuICAgICAge1xuICAgICAgICBxdWVzdGlvbjogcXVlc3Rpb24sXG4gICAgICAgIGlzRGlzcGxheU1vZGU6IHF1ZXN0aW9uLmlzSW5wdXRSZWFkT25seSxcbiAgICAgICAgY3JlYXRvcjogdGhpcyxcbiAgICAgIH1cbiAgICApO1xuICB9XG4gIHB1YmxpYyByZW5kZXJFcnJvcihcbiAgICBrZXk6IHN0cmluZyxcbiAgICBlcnJvcjogU3VydmV5RXJyb3IsXG4gICAgY3NzQ2xhc3NlczogYW55XG4gICk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBrZXk9e2tleX0+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5lcnJvci5pY29ufSBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuZXJyb3IuaXRlbX0+XG4gICAgICAgICAgPFN1cnZleUxvY1N0cmluZ1ZpZXdlciBsb2NTdHI9e2Vycm9yLmxvY1RleHR9IC8+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHVibGljIHF1ZXN0aW9uVGl0bGVMb2NhdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN1cnZleS5xdWVzdGlvblRpdGxlTG9jYXRpb247XG4gIH1cbiAgcHVibGljIHF1ZXN0aW9uRXJyb3JMb2NhdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN1cnZleS5xdWVzdGlvbkVycm9yTG9jYXRpb247XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdXJ2ZXlcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleSwgcHJvcHMpO1xufSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBhdHRhY2hLZXkyY2xpY2soZWxlbWVudDogSlNYLkVsZW1lbnQsIHZpZXdNb2RlbD86IGFueSwgb3B0aW9ucyA9IHsgcHJvY2Vzc0VzYzogdHJ1ZSB9KTogSlNYLkVsZW1lbnQge1xuICBpZiAoISF2aWV3TW9kZWwgJiYgdmlld01vZGVsLmRpc2FibGVUYWJTdG9wKSB7XG4gICAgcmV0dXJuIFJlYWN0LmNsb25lRWxlbWVudChlbGVtZW50LCB7IHRhYkluZGV4OiAtMSB9KTtcbiAgfVxuICByZXR1cm4gUmVhY3QuY2xvbmVFbGVtZW50KFxuICAgIGVsZW1lbnQsXG4gICAge1xuICAgICAgdGFiSW5kZXg6IDAsXG4gICAgICBvbktleVVwOiAoZXZ0OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGRvS2V5MkNsaWNrVXAoZXZ0LCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSxcbiAgICAgIG9uS2V5RG93bjogKGV2dDogYW55KSA9PiBkb0tleTJDbGlja0Rvd24oZXZ0LCBvcHRpb25zKSxcbiAgICAgIG9uQmx1cjogKGV2dDogYW55KSA9PiBkb0tleTJDbGlja0JsdXIoZXZ0KVxuICAgIH1cbiAgKTtcbn0iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleU5hdmlnYXRpb25CYXNlIH0gZnJvbSBcIi4vcmVhY3RTdXJ2ZXlOYXZpZ2F0aW9uQmFzZVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5TmF2aWdhdGlvbiBleHRlbmRzIFN1cnZleU5hdmlnYXRpb25CYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmhhbmRsZVByZXZDbGljayA9IHRoaXMuaGFuZGxlUHJldkNsaWNrLmJpbmQodGhpcyk7XG4gICAgdGhpcy5oYW5kbGVOZXh0Q2xpY2sgPSB0aGlzLmhhbmRsZU5leHRDbGljay5iaW5kKHRoaXMpO1xuICAgIHRoaXMuaGFuZGxlTmV4dE1vdXNlRG93biA9IHRoaXMuaGFuZGxlTmV4dE1vdXNlRG93bi5iaW5kKHRoaXMpO1xuICAgIHRoaXMuaGFuZGxlTW91c2VEb3duID0gdGhpcy5oYW5kbGVNb3VzZURvd24uYmluZCh0aGlzKTtcbiAgICB0aGlzLmhhbmRsZUNvbXBsZXRlQ2xpY2sgPSB0aGlzLmhhbmRsZUNvbXBsZXRlQ2xpY2suYmluZCh0aGlzKTtcbiAgICB0aGlzLmhhbmRsZVByZXZpZXdDbGljayA9IHRoaXMuaGFuZGxlUHJldmlld0NsaWNrLmJpbmQodGhpcyk7XG4gICAgdGhpcy5oYW5kbGVTdGFydENsaWNrID0gdGhpcy5oYW5kbGVTdGFydENsaWNrLmJpbmQodGhpcyk7XG4gIH1cbiAgaGFuZGxlUHJldkNsaWNrKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnN1cnZleS5wcmV2UGFnZSgpO1xuICB9XG4gIGhhbmRsZU5leHRDbGljayhldmVudDogYW55KSB7XG4gICAgdGhpcy5zdXJ2ZXkubmV4dFBhZ2VVSUNsaWNrKCk7XG4gIH1cbiAgaGFuZGxlTmV4dE1vdXNlRG93bihldmVudDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5Lm5leHRQYWdlTW91c2VEb3duKCk7XG4gIH1cbiAgaGFuZGxlTW91c2VEb3duKGV2ZW50OiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkubmF2aWdhdGlvbk1vdXNlRG93bigpO1xuICB9XG4gIGhhbmRsZUNvbXBsZXRlQ2xpY2soZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuc3VydmV5LmNvbXBsZXRlTGFzdFBhZ2UoKTtcbiAgfVxuICBoYW5kbGVQcmV2aWV3Q2xpY2soZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuc3VydmV5LnNob3dQcmV2aWV3KCk7XG4gIH1cbiAgaGFuZGxlU3RhcnRDbGljayhldmVudDogYW55KSB7XG4gICAgdGhpcy5zdXJ2ZXkuc3RhcnQoKTtcbiAgfVxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5zdXJ2ZXkgfHwgdGhpcy5zdXJ2ZXkuaXNOYXZpZ2F0aW9uQnV0dG9uc1Nob3dpbmcgPT09IFwibm9uZVwiKVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgdmFyIHByZXZCdXR0b24gPVxuICAgICAgdGhpcy5zdXJ2ZXkuaXNTaG93UHJldkJ1dHRvblxuICAgICAgICA/IHRoaXMucmVuZGVyQnV0dG9uKFxuICAgICAgICAgIHRoaXMuaGFuZGxlUHJldkNsaWNrLFxuICAgICAgICAgIHRoaXMuaGFuZGxlTW91c2VEb3duLFxuICAgICAgICAgIHRoaXMuc3VydmV5LnBhZ2VQcmV2VGV4dCxcbiAgICAgICAgICB0aGlzLnN1cnZleS5jc3NOYXZpZ2F0aW9uUHJldlxuICAgICAgICApXG4gICAgICAgIDogbnVsbDtcbiAgICB2YXIgbmV4dEJ1dHRvbiA9XG4gICAgICB0aGlzLnN1cnZleS5pc1Nob3dOZXh0QnV0dG9uXG4gICAgICAgID8gdGhpcy5yZW5kZXJCdXR0b24oXG4gICAgICAgICAgdGhpcy5oYW5kbGVOZXh0Q2xpY2ssXG4gICAgICAgICAgdGhpcy5oYW5kbGVOZXh0TW91c2VEb3duLFxuICAgICAgICAgIHRoaXMuc3VydmV5LnBhZ2VOZXh0VGV4dCxcbiAgICAgICAgICB0aGlzLnN1cnZleS5jc3NOYXZpZ2F0aW9uTmV4dFxuICAgICAgICApXG4gICAgICAgIDogbnVsbDtcbiAgICB2YXIgY29tcGxldGVCdXR0b24gPVxuICAgICAgdGhpcy5zdXJ2ZXkuaXNDb21wbGV0ZUJ1dHRvblZpc2libGVcbiAgICAgICAgPyB0aGlzLnJlbmRlckJ1dHRvbihcbiAgICAgICAgICB0aGlzLmhhbmRsZUNvbXBsZXRlQ2xpY2ssXG4gICAgICAgICAgdGhpcy5oYW5kbGVNb3VzZURvd24sXG4gICAgICAgICAgdGhpcy5zdXJ2ZXkuY29tcGxldGVUZXh0LFxuICAgICAgICAgIHRoaXMuc3VydmV5LmNzc05hdmlnYXRpb25Db21wbGV0ZVxuICAgICAgICApXG4gICAgICAgIDogbnVsbDtcbiAgICB2YXIgcHJldmlld0J1dHRvbiA9XG4gICAgICB0aGlzLnN1cnZleS5pc1ByZXZpZXdCdXR0b25WaXNpYmxlXG4gICAgICAgID8gdGhpcy5yZW5kZXJCdXR0b24oXG4gICAgICAgICAgdGhpcy5oYW5kbGVQcmV2aWV3Q2xpY2ssXG4gICAgICAgICAgdGhpcy5oYW5kbGVNb3VzZURvd24sXG4gICAgICAgICAgdGhpcy5zdXJ2ZXkucHJldmlld1RleHQsXG4gICAgICAgICAgdGhpcy5zdXJ2ZXkuY3NzTmF2aWdhdGlvblByZXZpZXdcbiAgICAgICAgKVxuICAgICAgICA6IG51bGw7XG4gICAgdmFyIHN0YXJ0QnV0dG9uID0gdGhpcy5zdXJ2ZXkuaXNTaG93U3RhcnRpbmdQYWdlXG4gICAgICA/IHRoaXMucmVuZGVyQnV0dG9uKFxuICAgICAgICB0aGlzLmhhbmRsZVN0YXJ0Q2xpY2ssXG4gICAgICAgIG51bGwsXG4gICAgICAgIHRoaXMuc3VydmV5LnN0YXJ0U3VydmV5VGV4dCxcbiAgICAgICAgdGhpcy5zdXJ2ZXkuY3NzTmF2aWdhdGlvblN0YXJ0XG4gICAgICApXG4gICAgICA6IG51bGw7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLmNzcy5mb290ZXJ9PlxuICAgICAgICB7c3RhcnRCdXR0b259XG4gICAgICAgIHtwcmV2QnV0dG9ufVxuICAgICAgICB7bmV4dEJ1dHRvbn1cbiAgICAgICAge3ByZXZpZXdCdXR0b259XG4gICAgICAgIHtjb21wbGV0ZUJ1dHRvbn1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckJ1dHRvbihcbiAgICBjbGljazogYW55LFxuICAgIG1vdXNlRG93bjogYW55LFxuICAgIHRleHQ6IHN0cmluZyxcbiAgICBidG5DbGFzc05hbWU6IHN0cmluZ1xuICApOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIHN0eWxlID0geyBtYXJnaW5SaWdodDogXCI1cHhcIiB9O1xuICAgIHJldHVybiAoXG4gICAgICA8aW5wdXRcbiAgICAgICAgY2xhc3NOYW1lPXtidG5DbGFzc05hbWV9XG4gICAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIG9uTW91c2VEb3duPXttb3VzZURvd259XG4gICAgICAgIG9uQ2xpY2s9e2NsaWNrfVxuICAgICAgICB2YWx1ZT17dGV4dH1cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5TmF2aWdhdGlvbkJhc2UgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8YW55LCBhbnk+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN0YXRlID0geyB1cGRhdGU6IDAgfTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHN1cnZleSgpOiBTdXJ2ZXlNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuc3VydmV5O1xuICB9XG4gIHByb3RlY3RlZCBnZXQgY3NzKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3NzO1xuICB9XG4gIHByaXZhdGUgdXBkYXRlU3RhdGVGdW5jdGlvbjogYW55ID0gbnVsbDtcbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgaWYgKHRoaXMuc3VydmV5KSB7XG4gICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICB0aGlzLnVwZGF0ZVN0YXRlRnVuY3Rpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNlbGYuc2V0U3RhdGUoeyB1cGRhdGU6IHNlbGYuc3RhdGUudXBkYXRlICsgMSB9KTtcbiAgICAgIH07XG4gICAgICB0aGlzLnN1cnZleS5vblBhZ2VWaXNpYmxlQ2hhbmdlZC5hZGQodGhpcy51cGRhdGVTdGF0ZUZ1bmN0aW9uKTtcbiAgICB9XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgaWYgKHRoaXMuc3VydmV5ICYmIHRoaXMudXBkYXRlU3RhdGVGdW5jdGlvbikge1xuICAgICAgdGhpcy5zdXJ2ZXkub25QYWdlVmlzaWJsZUNoYW5nZWQucmVtb3ZlKHRoaXMudXBkYXRlU3RhdGVGdW5jdGlvbik7XG4gICAgICB0aGlzLnVwZGF0ZVN0YXRlRnVuY3Rpb24gPSBudWxsO1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlQcm9ncmVzc01vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlOYXZpZ2F0aW9uQmFzZSB9IGZyb20gXCIuL3JlYWN0U3VydmV5TmF2aWdhdGlvbkJhc2VcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi9lbGVtZW50LWZhY3RvcnlcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVByb2dyZXNzIGV4dGVuZHMgU3VydmV5TmF2aWdhdGlvbkJhc2Uge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgaXNUb3AoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXNUb3A7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBwcm9ncmVzcygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnN1cnZleS5wcm9ncmVzc1ZhbHVlO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcHJvZ3Jlc3NUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5LnByb2dyZXNzVGV4dDtcbiAgfVxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBzdHlsZSA9IHRoaXMuaXNUb3AgPyB7fSA6IHsgbWFyZ2luVG9wOiBcIjFlbVwiIH07XG4gICAgdmFyIHByb2dyZXNzU3R5bGUgPSB7XG4gICAgICB3aWR0aDogdGhpcy5wcm9ncmVzcyArIFwiJVwiLFxuICAgIH07XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLmNzcy5wcm9ncmVzc30gc3R5bGU9e3N0eWxlfT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIHN0eWxlPXtwcm9ncmVzc1N0eWxlfVxuICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5jc3MucHJvZ3Jlc3NCYXJ9XG4gICAgICAgICAgcm9sZT1cInByb2dyZXNzYmFyXCJcbiAgICAgICAgICBhcmlhLXZhbHVlbWluPXswfVxuICAgICAgICAgIGFyaWEtdmFsdWVtYXg9ezEwMH1cbiAgICAgICAgPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBjbGFzc05hbWU9e1N1cnZleVByb2dyZXNzTW9kZWwuZ2V0UHJvZ3Jlc3NUZXh0SW5CYXJDc3ModGhpcy5jc3MpfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt0aGlzLnByb2dyZXNzVGV4dH1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzTmFtZT17U3VydmV5UHJvZ3Jlc3NNb2RlbC5nZXRQcm9ncmVzc1RleHRVbmRlckJhckNzcyh0aGlzLmNzcyl9XG4gICAgICAgID5cbiAgICAgICAgICB7dGhpcy5wcm9ncmVzc1RleHR9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdi1wcm9ncmVzcy1wYWdlc1wiLCBwcm9wcyA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVByb2dyZXNzLCBwcm9wcyk7XG59KTtcblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3YtcHJvZ3Jlc3MtcXVlc3Rpb25zXCIsIHByb3BzID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UHJvZ3Jlc3MsIHByb3BzKTtcbn0pO1xuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3YtcHJvZ3Jlc3MtY29ycmVjdFF1ZXN0aW9uc1wiLFxuICBwcm9wcyA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UHJvZ3Jlc3MsIHByb3BzKTtcbiAgfVxuKTtcblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2LXByb2dyZXNzLXJlcXVpcmVkUXVlc3Rpb25zXCIsXG4gIHByb3BzID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlQcm9ncmVzcywgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlQcm9ncmVzc0J1dHRvbnNNb2RlbCwgUGFnZU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlOYXZpZ2F0aW9uQmFzZSB9IGZyb20gXCIuL3JlYWN0U3VydmV5TmF2aWdhdGlvbkJhc2VcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi9lbGVtZW50LWZhY3RvcnlcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVByb2dyZXNzQnV0dG9ucyBleHRlbmRzIFN1cnZleU5hdmlnYXRpb25CYXNlIHtcbiAgcHJpdmF0ZSBwcm9ncmVzc0J1dHRvbnNNb2RlbDogU3VydmV5UHJvZ3Jlc3NCdXR0b25zTW9kZWw7XG4gIHByaXZhdGUgdXBkYXRlU2Nyb2xsZXI6IGFueSA9IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBsaXN0Q29udGFpbmVyUmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMucHJvZ3Jlc3NCdXR0b25zTW9kZWwgPSBuZXcgU3VydmV5UHJvZ3Jlc3NCdXR0b25zTW9kZWwodGhpcy5zdXJ2ZXkpO1xuICAgIHRoaXMubGlzdENvbnRhaW5lclJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICB9XG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLmNzcy5wcm9ncmVzc0J1dHRvbnNDb250YWluZXJDZW50ZXJ9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5jc3MucHJvZ3Jlc3NCdXR0b25zQ29udGFpbmVyfT5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9e3RoaXMuZ2V0U2Nyb2xsQnV0dG9uQ3NzKHRydWUpfVxuICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PlxuICAgICAgICAgICAgICB0aGlzLmNsaWNrU2Nyb2xsQnV0dG9uKHRoaXMubGlzdENvbnRhaW5lclJlZi5jdXJyZW50LCB0cnVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9e3RoaXMuY3NzLnByb2dyZXNzQnV0dG9uc0xpc3RDb250YWluZXJ9XG4gICAgICAgICAgICByZWY9e3RoaXMubGlzdENvbnRhaW5lclJlZn1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8dWwgY2xhc3NOYW1lPXt0aGlzLmNzcy5wcm9ncmVzc0J1dHRvbnNMaXN0fT5cbiAgICAgICAgICAgICAge3RoaXMuZ2V0TGlzdEVsZW1lbnRzKCl9XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5nZXRTY3JvbGxCdXR0b25Dc3MoZmFsc2UpfVxuICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PlxuICAgICAgICAgICAgICB0aGlzLmNsaWNrU2Nyb2xsQnV0dG9uKHRoaXMubGlzdENvbnRhaW5lclJlZi5jdXJyZW50LCBmYWxzZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0TGlzdEVsZW1lbnRzKCk6IEpTWC5FbGVtZW50W10ge1xuICAgIGxldCBidXR0b25zOiBKU1guRWxlbWVudFtdID0gW107XG4gICAgdGhpcy5zdXJ2ZXkudmlzaWJsZVBhZ2VzLmZvckVhY2goKHBhZ2U6IFBhZ2VNb2RlbCwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgYnV0dG9ucy5wdXNoKHRoaXMucmVuZGVyTGlzdEVsZW1lbnQocGFnZSwgaW5kZXgpKTtcbiAgICB9KTtcbiAgICByZXR1cm4gYnV0dG9ucztcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyTGlzdEVsZW1lbnQocGFnZTogUGFnZU1vZGVsLCBpbmRleDogbnVtYmVyKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8bGlcbiAgICAgICAga2V5PXtcImxpc3RlbGVtZW50XCIgKyBpbmRleH1cbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLmdldExpc3RFbGVtZW50Q3NzKGluZGV4KX1cbiAgICAgICAgb25DbGljaz17XG4gICAgICAgICAgdGhpcy5pc0xpc3RFbGVtZW50Q2xpY2thYmxlKGluZGV4KVxuICAgICAgICAgICAgPyAoKSA9PiB0aGlzLmNsaWNrTGlzdEVsZW1lbnQoaW5kZXgpXG4gICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICB9XG4gICAgICA+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e3RoaXMuY3NzLnByb2dyZXNzQnV0dG9uc1BhZ2VUaXRsZX1cbiAgICAgICAgICB0aXRsZT17cGFnZS5uYXZpZ2F0aW9uVGl0bGUgfHwgcGFnZS5uYW1lfVxuICAgICAgICA+XG4gICAgICAgICAge3BhZ2UubmF2aWdhdGlvblRpdGxlIHx8IHBhZ2UubmFtZX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e3RoaXMuY3NzLnByb2dyZXNzQnV0dG9uc1BhZ2VEZXNjcmlwdGlvbn1cbiAgICAgICAgICB0aXRsZT17cGFnZS5uYXZpZ2F0aW9uRGVzY3JpcHRpb259XG4gICAgICAgID5cbiAgICAgICAgICB7cGFnZS5uYXZpZ2F0aW9uRGVzY3JpcHRpb259XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9saT5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBpc0xpc3RFbGVtZW50Q2xpY2thYmxlKGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wcm9ncmVzc0J1dHRvbnNNb2RlbC5pc0xpc3RFbGVtZW50Q2xpY2thYmxlKGluZGV4KTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0TGlzdEVsZW1lbnRDc3MoaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvZ3Jlc3NCdXR0b25zTW9kZWwuZ2V0TGlzdEVsZW1lbnRDc3MoaW5kZXgpO1xuICB9XG4gIHByb3RlY3RlZCBjbGlja0xpc3RFbGVtZW50KGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnByb2dyZXNzQnV0dG9uc01vZGVsLmNsaWNrTGlzdEVsZW1lbnQoaW5kZXgpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTY3JvbGxCdXR0b25Dc3MoaXNMZWZ0U2Nyb2xsOiBib29sZWFuKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9ncmVzc0J1dHRvbnNNb2RlbC5nZXRTY3JvbGxCdXR0b25Dc3ModGhpcy5zdGF0ZS5oYXNTY3JvbGxlciwgaXNMZWZ0U2Nyb2xsKTtcbiAgfVxuICBwcm90ZWN0ZWQgY2xpY2tTY3JvbGxCdXR0b24oXG4gICAgbGlzdENvbnRhaW5lckVsZW1lbnQ6IEVsZW1lbnQsXG4gICAgaXNMZWZ0U2Nyb2xsOiBib29sZWFuXG4gICk6IHZvaWQge1xuICAgIGxpc3RDb250YWluZXJFbGVtZW50LnNjcm9sbExlZnQgKz0gKGlzTGVmdFNjcm9sbCA/IC0xIDogMSkgKiA3MDtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICB0aGlzLnVwZGF0ZVNjcm9sbGVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGhhc1Njcm9sbGVyOlxuICAgICAgICAgIHRoaXMubGlzdENvbnRhaW5lclJlZi5jdXJyZW50LnNjcm9sbFdpZHRoID5cbiAgICAgICAgICB0aGlzLmxpc3RDb250YWluZXJSZWYuY3VycmVudC5vZmZzZXRXaWR0aCxcbiAgICAgIH0pO1xuICAgIH0sIDEwMCk7XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLnVwZGF0ZVNjcm9sbGVyICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMudXBkYXRlU2Nyb2xsZXIpO1xuICAgICAgdGhpcy51cGRhdGVTY3JvbGxlciA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdi1wcm9ncmVzcy1idXR0b25zXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlQcm9ncmVzc0J1dHRvbnMsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXkgfSBmcm9tIFwiLi9yZWFjdFN1cnZleVwiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IEJhc2UsIFN1cnZleVdpbmRvd01vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlXaW5kb3cgZXh0ZW5kcyBTdXJ2ZXkge1xuICBwcm90ZWN0ZWQgd2luZG93OiBTdXJ2ZXlXaW5kb3dNb2RlbDtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmhhbmRsZU9uRXhwYW5kZWQgPSB0aGlzLmhhbmRsZU9uRXhwYW5kZWQuYmluZCh0aGlzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50cygpOiBBcnJheTxCYXNlPiB7XG4gICAgcmV0dXJuIFt0aGlzLndpbmRvdywgdGhpcy53aW5kb3cuc3VydmV5XTtcbiAgfVxuICBoYW5kbGVPbkV4cGFuZGVkKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLndpbmRvdy5jaGFuZ2VFeHBhbmRDb2xsYXBzZSgpO1xuICB9XG4gIHByb3RlY3RlZCBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHN1cGVyLmNhblJlbmRlcigpICYmIHRoaXMud2luZG93LmlzU2hvd2luZztcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGhlYWRlciA9IHRoaXMucmVuZGVyV2luZG93SGVhZGVyKCk7XG4gICAgdmFyIGJvZHkgPSB0aGlzLndpbmRvdy5pc0V4cGFuZGVkID8gdGhpcy5yZW5kZXJCb2R5KCkgOiBudWxsO1xuICAgIGxldCBzdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICAgIHBvc2l0aW9uOiBcImZpeGVkXCIsXG4gICAgICBib3R0b206IDMsXG4gICAgICByaWdodDogMTAsXG4gICAgICBtYXhXaWR0aDogXCI2MCVcIixcbiAgICB9O1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy53aW5kb3cuY3NzUm9vdH0gc3R5bGU9e3N0eWxlfT5cbiAgICAgICAge2hlYWRlcn1cbiAgICAgICAge2JvZHl9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJXaW5kb3dIZWFkZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBzdHlsZUEgPSB7IHdpZHRoOiBcIjEwMCVcIiwgY3Vyc29yOiBcInBvaW50ZXJcIiB9O1xuICAgIHZhciBzdHlsZVRpdGxlID0geyBwYWRkaW5nUmlnaHQ6IFwiMTBweFwiIH07XG4gICAgdmFyIGdseXBoQ2xhc3NOYW1lID0gdGhpcy53aW5kb3cuY3NzQnV0dG9uO1xuICAgIGdseXBoQ2xhc3NOYW1lID0gXCJnbHlwaGljb24gcHVsbC1yaWdodCBcIiArIGdseXBoQ2xhc3NOYW1lO1xuICAgIHZhciB0aXRsZSA9IFN1cnZleUVsZW1lbnRCYXNlLnJlbmRlckxvY1N0cmluZyh0aGlzLnN1cnZleS5sb2NUaXRsZSk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLndpbmRvdy5jc3NIZWFkZXJSb290fT5cbiAgICAgICAgPHNwYW4gb25DbGljaz17dGhpcy5oYW5kbGVPbkV4cGFuZGVkfSBzdHlsZT17c3R5bGVBfT5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3RoaXMud2luZG93LmNzc0hlYWRlclRpdGxlfSBzdHlsZT17c3R5bGVUaXRsZX0+XG4gICAgICAgICAgICB7dGl0bGV9XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Z2x5cGhDbGFzc05hbWV9IGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAge3RoaXMud2luZG93LmlzRXhwYW5kZWQgPyAoXG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMuaGFuZGxlT25FeHBhbmRlZH1cbiAgICAgICAgICAgIHN0eWxlPXt7IGZsb2F0OiBcInJpZ2h0XCIsIGN1cnNvcjogXCJwb2ludGVyXCIgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3RoaXMud2luZG93LmNzc0hlYWRlclRpdGxlfSBzdHlsZT17c3R5bGVUaXRsZX0+XG4gICAgICAgICAgICAgIFhcbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQm9keSgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXt0aGlzLndpbmRvdy5jc3NCb2R5fT57dGhpcy5kb1JlbmRlcigpfTwvZGl2PjtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlU3VydmV5KG5ld1Byb3BzOiBhbnkpIHtcbiAgICBpZiAoIW5ld1Byb3BzKSBuZXdQcm9wcyA9IHt9O1xuICAgIHN1cGVyLmNyZWF0ZVN1cnZleShuZXdQcm9wcyk7XG4gICAgdGhpcy53aW5kb3cgPSBuZXcgU3VydmV5V2luZG93TW9kZWwobnVsbCwgdGhpcy5zdXJ2ZXkpO1xuICAgIGlmIChuZXdQcm9wcy5jbG9zZU9uQ29tcGxldGVUaW1lb3V0KSB7XG4gICAgICB0aGlzLndpbmRvdy5jbG9zZU9uQ29tcGxldGVUaW1lb3V0ID0gbmV3UHJvcHMuY2xvc2VPbkNvbXBsZXRlVGltZW91dDtcbiAgICB9XG4gICAgdGhpcy53aW5kb3cuaXNTaG93aW5nID0gdHJ1ZTtcbiAgICBpZiAoIXRoaXMud2luZG93LmlzRXhwYW5kZWQgJiYgKG5ld1Byb3BzLmV4cGFuZGVkIHx8IG5ld1Byb3BzLmlzRXhwYW5kZWQpKVxuICAgICAgdGhpcy53aW5kb3cuZXhwYW5kKCk7XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtcbiAgQmFzZSxcbiAgU3VydmV5RWxlbWVudCxcbiAgU3VydmV5RXJyb3IsXG4gIFF1ZXN0aW9uLFxuICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRDZWxsLFxuICBkb0tleTJDbGlja1VwLFxuICBUb29sdGlwTWFuYWdlcixcbiAgU3VydmV5TW9kZWxcbn0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlciB9IGZyb20gXCIuL3JlYWN0c3VydmV5bW9kZWxcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRCYXNlLCBSZWFjdFN1cnZleUVsZW1lbnQgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uQ29tbWVudEl0ZW0gfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2NvbW1lbnRcIjtcbmltcG9ydCB7IFN1cnZleUN1c3RvbVdpZGdldCB9IGZyb20gXCIuL2N1c3RvbS13aWRnZXRcIjtcbmltcG9ydCB7IFRpdGxlRWxlbWVudCB9IGZyb20gXCIuL2NvbXBvbmVudHMvdGl0bGUvdGl0bGUtZWxlbWVudFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIElTdXJ2ZXlDcmVhdG9yIHtcbiAgY3JlYXRlUXVlc3Rpb25FbGVtZW50KHF1ZXN0aW9uOiBRdWVzdGlvbik6IEpTWC5FbGVtZW50O1xuICByZW5kZXJFcnJvcihrZXk6IHN0cmluZywgZXJyb3I6IFN1cnZleUVycm9yLCBjc3NDbGFzc2VzOiBhbnkpOiBKU1guRWxlbWVudDtcbiAgcXVlc3Rpb25UaXRsZUxvY2F0aW9uKCk6IHN0cmluZztcbiAgcXVlc3Rpb25FcnJvckxvY2F0aW9uKCk6IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uIGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8YW55LCBhbnk+IHtcbiAgcHJpdmF0ZSBpc05lZWRGb2N1cyA9IGZhbHNlO1xuICBwdWJsaWMgc3RhdGljIHJlbmRlclF1ZXN0aW9uQm9keShcbiAgICBjcmVhdG9yOiBJU3VydmV5Q3JlYXRvcixcbiAgICBxdWVzdGlvbjogUXVlc3Rpb25cbiAgKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghcXVlc3Rpb24uaXNWaXNpYmxlKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgY3VzdG9tV2lkZ2V0ID0gcXVlc3Rpb24uY3VzdG9tV2lkZ2V0O1xuICAgIGlmICghY3VzdG9tV2lkZ2V0KSB7XG4gICAgICByZXR1cm4gY3JlYXRvci5jcmVhdGVRdWVzdGlvbkVsZW1lbnQocXVlc3Rpb24pO1xuICAgIH1cbiAgICByZXR1cm4gPFN1cnZleUN1c3RvbVdpZGdldCBjcmVhdG9yPXtjcmVhdG9yfSBxdWVzdGlvbj17cXVlc3Rpb259IC8+O1xuICB9XG4gIHByaXZhdGUgcm9vdFJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnJvb3RSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb24ge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmVsZW1lbnQ7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgY3JlYXRvcigpOiBJU3VydmV5Q3JlYXRvciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3JlYXRvcjtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIGlmICghIXRoaXMucXVlc3Rpb24pIHtcbiAgICAgIHRoaXMucXVlc3Rpb25bXCJyZWFjdFwiXSA9IHRoaXM7XG4gICAgfVxuICAgIHRoaXMuZG9BZnRlclJlbmRlcigpO1xuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAgaWYgKCEhdGhpcy5xdWVzdGlvbikge1xuICAgICAgdGhpcy5xdWVzdGlvbltcInJlYWN0XCJdID0gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgZWwgPSB0aGlzLnJvb3RSZWYuY3VycmVudDtcbiAgICBpZiAoISFlbCkge1xuICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKFwiZGF0YS1yZW5kZXJlZFwiKTtcbiAgICB9XG4gIH1cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogYW55LCBwcmV2U3RhdGU6IGFueSkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSk7XG4gICAgdGhpcy5kb0FmdGVyUmVuZGVyKCk7XG4gIH1cbiAgcHJpdmF0ZSBkb0FmdGVyUmVuZGVyKCkge1xuICAgIGlmICh0aGlzLmlzTmVlZEZvY3VzKSB7XG4gICAgICBpZiAoIXRoaXMucXVlc3Rpb24uaXNDb2xsYXBzZWQpIHtcbiAgICAgICAgdGhpcy5xdWVzdGlvbi5jbGlja1RpdGxlRnVuY3Rpb24oKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuaXNOZWVkRm9jdXMgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHRoaXMucXVlc3Rpb24pIHtcbiAgICAgIHZhciBlbCA9IHRoaXMucm9vdFJlZi5jdXJyZW50O1xuICAgICAgaWYgKGVsICYmIGVsLmdldEF0dHJpYnV0ZShcImRhdGEtcmVuZGVyZWRcIikgIT09IFwiclwiKSB7XG4gICAgICAgIGVsLnNldEF0dHJpYnV0ZShcImRhdGEtcmVuZGVyZWRcIiwgXCJyXCIpO1xuICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoXCJkYXRhLW5hbWVcIiwgdGhpcy5xdWVzdGlvbi5uYW1lKTtcbiAgICAgICAgaWYgKHRoaXMucXVlc3Rpb24uYWZ0ZXJSZW5kZXIpIHtcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uLmFmdGVyUmVuZGVyKGVsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBzdXBlci5jYW5SZW5kZXIoKSAmJlxuICAgICAgISF0aGlzLnF1ZXN0aW9uICYmXG4gICAgICAhIXRoaXMuY3JlYXRvciAmJlxuICAgICAgdGhpcy5xdWVzdGlvbi5pc1Zpc2libGVcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlbmRlclF1ZXN0aW9uQ29udGVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgbGV0IHF1ZXN0aW9uID0gdGhpcy5xdWVzdGlvbjtcbiAgICB2YXIgY29udGVudFN0eWxlID0ge1xuICAgICAgZGlzcGxheTogIXRoaXMucXVlc3Rpb24uaXNDb2xsYXBzZWQgPyBcIlwiIDogXCJub25lXCIsXG4gICAgfTtcbiAgICB2YXIgY3NzQ2xhc3NlcyA9IHF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgdmFyIHF1ZXN0aW9uUmVuZGVyID0gdGhpcy5yZW5kZXJRdWVzdGlvbigpO1xuICAgIHZhciBlcnJvcnNUb3AgPVxuICAgIHRoaXMuY3JlYXRvci5xdWVzdGlvbkVycm9yTG9jYXRpb24oKSA9PT0gXCJ0b3BcIiAmJlxuICAgICF0aGlzLnF1ZXN0aW9uLmlzRXJyb3JzTW9kZVRvb2x0aXBcbiAgICAgID8gdGhpcy5yZW5kZXJFcnJvcnMoY3NzQ2xhc3NlcywgXCJ0b3BcIilcbiAgICAgIDogbnVsbDtcbiAgICB2YXIgZXJyb3JzQm90dG9tID1cbiAgICB0aGlzLmNyZWF0b3IucXVlc3Rpb25FcnJvckxvY2F0aW9uKCkgPT09IFwiYm90dG9tXCIgJiZcbiAgICAhdGhpcy5xdWVzdGlvbi5pc0Vycm9yc01vZGVUb29sdGlwXG4gICAgICA/IHRoaXMucmVuZGVyRXJyb3JzKGNzc0NsYXNzZXMsIFwiYm90dG9tXCIpXG4gICAgICA6IG51bGw7XG4gICAgdmFyIGNvbW1lbnQgPVxuICAgICAgcXVlc3Rpb24gJiYgcXVlc3Rpb24uaGFzQ29tbWVudCA/IHRoaXMucmVuZGVyQ29tbWVudChjc3NDbGFzc2VzKSA6IG51bGw7XG4gICAgY29uc3QgZXJyb3JzVG9vbHRpcCA9XG4gICAgICB0aGlzLnF1ZXN0aW9uLmlzRXJyb3JzTW9kZVRvb2x0aXAgJiYgdGhpcy5xdWVzdGlvbi5oYXNQYXJlbnRcbiAgICAgICAgPyB0aGlzLnJlbmRlckVycm9ycyhjc3NDbGFzc2VzLCBcInRvb2x0aXBcIilcbiAgICAgICAgOiBudWxsO1xuICAgIHZhciBkZXNjcmlwdGlvblVuZGVySW5wdXQgPSBxdWVzdGlvbi5oYXNEZXNjcmlwdGlvblVuZGVySW5wdXRcbiAgICAgID8gdGhpcy5yZW5kZXJEZXNjcmlwdGlvbihjc3NDbGFzc2VzLCB0cnVlKVxuICAgICAgOiBudWxsO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17cXVlc3Rpb24uY3NzQ29udGVudH1cbiAgICAgICAgc3R5bGU9e2NvbnRlbnRTdHlsZX1cbiAgICAgICAgcm9sZT1cInByZXNlbnRhdGlvblwiXG4gICAgICA+XG4gICAgICAgIHtlcnJvcnNUb3B9XG4gICAgICAgIHtxdWVzdGlvblJlbmRlcn1cbiAgICAgICAge2NvbW1lbnR9XG4gICAgICAgIHtlcnJvcnNCb3R0b219XG4gICAgICAgIHtlcnJvcnNUb29sdGlwfVxuICAgICAgICB7ZGVzY3JpcHRpb25VbmRlcklucHV0fVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIHF1ZXN0aW9uID0gdGhpcy5xdWVzdGlvbjtcbiAgICB2YXIgY3NzQ2xhc3NlcyA9IHF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgdmFyIGhlYWRlciA9IHRoaXMucmVuZGVySGVhZGVyKHF1ZXN0aW9uKTtcbiAgICB2YXIgaGVhZGVyVG9wID0gcXVlc3Rpb24uaGFzVGl0bGVPbkxlZnRUb3AgPyBoZWFkZXIgOiBudWxsO1xuICAgIHZhciBoZWFkZXJCb3R0b20gPSBxdWVzdGlvbi5oYXNUaXRsZU9uQm90dG9tID8gaGVhZGVyIDogbnVsbDtcblxuICAgIGNvbnN0IGVycm9yc0Fib3ZlUXVlc3Rpb24gPVxuICAgICAgdGhpcy5xdWVzdGlvbi5pc0Vycm9yc01vZGVUb29sdGlwICYmICF0aGlzLnF1ZXN0aW9uLmhhc1BhcmVudFxuICAgICAgICA/IHRoaXMucmVuZGVyRXJyb3JzKGNzc0NsYXNzZXMsIFwiXCIpXG4gICAgICAgIDogbnVsbDtcblxuICAgIGxldCByb290U3R5bGU6IHsgW2luZGV4OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICAgIGlmICghIXF1ZXN0aW9uLnBhZGRpbmdMZWZ0KSByb290U3R5bGVbXCJwYWRkaW5nTGVmdFwiXSA9IHF1ZXN0aW9uLnBhZGRpbmdMZWZ0O1xuICAgIGlmICghIXF1ZXN0aW9uLnBhZGRpbmdSaWdodClcbiAgICAgIHJvb3RTdHlsZVtcInBhZGRpbmdSaWdodFwiXSA9IHF1ZXN0aW9uLnBhZGRpbmdSaWdodDtcblxuICAgIGxldCBxdWVzdGlvbkNvbnRlbnQgPSB0aGlzLndyYXBRdWVzdGlvbkNvbnRlbnQodGhpcy5yZW5kZXJRdWVzdGlvbkNvbnRlbnQoKSk7XG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICByZWY9e3RoaXMucm9vdFJlZn1cbiAgICAgICAgICBpZD17cXVlc3Rpb24uaWR9XG4gICAgICAgICAgY2xhc3NOYW1lPXtxdWVzdGlvbi5nZXRSb290Q3NzKCl9XG4gICAgICAgICAgc3R5bGU9e3Jvb3RTdHlsZX1cbiAgICAgICAgICByb2xlPXtxdWVzdGlvbi5hcmlhUm9sZX1cbiAgICAgICAgICBhcmlhLXJlcXVpcmVkPXt0aGlzLnF1ZXN0aW9uLmFyaWFSZXF1aXJlZH1cbiAgICAgICAgICBhcmlhLWludmFsaWQ9e3RoaXMucXVlc3Rpb24uYXJpYUludmFsaWR9XG4gICAgICAgICAgYXJpYS1sYWJlbGxlZGJ5PXtxdWVzdGlvbi5oYXNUaXRsZSA/IHF1ZXN0aW9uLmFyaWFUaXRsZUlkIDogbnVsbH1cbiAgICAgICAgPlxuICAgICAgICAgIHtlcnJvcnNBYm92ZVF1ZXN0aW9ufVxuICAgICAgICAgIHtoZWFkZXJUb3B9XG4gICAgICAgICAge3F1ZXN0aW9uQ29udGVudH1cbiAgICAgICAgICB7aGVhZGVyQm90dG9tfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvPlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHdyYXBFbGVtZW50KGVsZW1lbnQ6IEpTWC5FbGVtZW50KTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHN1cnZleTogU3VydmV5TW9kZWwgPSB0aGlzLnF1ZXN0aW9uLnN1cnZleSBhcyBTdXJ2ZXlNb2RlbDtcbiAgICBsZXQgd3JhcHBlcjogSlNYLkVsZW1lbnQ7XG4gICAgaWYgKHN1cnZleSkge1xuICAgICAgd3JhcHBlciA9IFJlYWN0U3VydmV5RWxlbWVudHNXcmFwcGVyLndyYXBFbGVtZW50KHN1cnZleSwgZWxlbWVudCwgdGhpcy5xdWVzdGlvbik7XG4gICAgfVxuICAgIHJldHVybiB3cmFwcGVyID8/IGVsZW1lbnQ7XG4gIH1cbiAgcHJvdGVjdGVkIHdyYXBRdWVzdGlvbkNvbnRlbnQoZWxlbWVudDogSlNYLkVsZW1lbnQpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3Qgc3VydmV5OiBTdXJ2ZXlNb2RlbCA9IHRoaXMucXVlc3Rpb24uc3VydmV5IGFzIFN1cnZleU1vZGVsO1xuICAgIGxldCB3cmFwcGVyOiBKU1guRWxlbWVudDtcbiAgICBpZiAoc3VydmV5KSB7XG4gICAgICB3cmFwcGVyID0gUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIud3JhcFF1ZXN0aW9uQ29udGVudChzdXJ2ZXksIGVsZW1lbnQsIHRoaXMucXVlc3Rpb24pO1xuICAgIH1cbiAgICByZXR1cm4gd3JhcHBlciA/PyBlbGVtZW50O1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJRdWVzdGlvbigpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIFN1cnZleVF1ZXN0aW9uLnJlbmRlclF1ZXN0aW9uQm9keSh0aGlzLmNyZWF0b3IsIHRoaXMucXVlc3Rpb24pO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJEZXNjcmlwdGlvbihcbiAgICBjc3NDbGFzc2VzOiBhbnksXG4gICAgaXNVbmRlcklucHV0OiBib29sZWFuID0gZmFsc2VcbiAgKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBkZXNjcmlwdGlvblRleHQgPSBTdXJ2ZXlFbGVtZW50QmFzZS5yZW5kZXJMb2NTdHJpbmcoXG4gICAgICB0aGlzLnF1ZXN0aW9uLmxvY0Rlc2NyaXB0aW9uXG4gICAgKTtcbiAgICB2YXIgY2xhc3NOYW1lID0gaXNVbmRlcklucHV0XG4gICAgICA/IGNzc0NsYXNzZXMuZGVzY3JpcHRpb25VbmRlcklucHV0XG4gICAgICA6IGNzc0NsYXNzZXMuZGVzY3JpcHRpb247XG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWV9PntkZXNjcmlwdGlvblRleHR9PC9kaXY+O1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJDb21tZW50KGNzc0NsYXNzZXM6IGFueSk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgY29tbWVudFRleHQgPSBTdXJ2ZXlFbGVtZW50QmFzZS5yZW5kZXJMb2NTdHJpbmcoXG4gICAgICB0aGlzLnF1ZXN0aW9uLmxvY0NvbW1lbnRUZXh0XG4gICAgKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5mb3JtR3JvdXB9PlxuICAgICAgICA8ZGl2Pntjb21tZW50VGV4dH08L2Rpdj5cbiAgICAgICAgPFN1cnZleVF1ZXN0aW9uQ29tbWVudEl0ZW1cbiAgICAgICAgICBxdWVzdGlvbj17dGhpcy5xdWVzdGlvbn1cbiAgICAgICAgICBjc3NDbGFzc2VzPXtjc3NDbGFzc2VzfVxuICAgICAgICAgIG90aGVyQ3NzPXtjc3NDbGFzc2VzLm90aGVyfVxuICAgICAgICAgIGlzRGlzcGxheU1vZGU9e3RoaXMucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5fVxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVySGVhZGVyKHF1ZXN0aW9uOiBRdWVzdGlvbik6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgY3NzQ2xhc3NlcyA9IHF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgdmFyIHRpdGxlID0gcXVlc3Rpb24uaGFzVGl0bGUgPyAoXG4gICAgICA8VGl0bGVFbGVtZW50IGVsZW1lbnQ9e3F1ZXN0aW9ufT48L1RpdGxlRWxlbWVudD5cbiAgICApIDogbnVsbDtcbiAgICB2YXIgZGVzY3JpcHRpb24gPSBxdWVzdGlvbi5oYXNEZXNjcmlwdGlvblVuZGVyVGl0bGVcbiAgICAgID8gdGhpcy5yZW5kZXJEZXNjcmlwdGlvbihjc3NDbGFzc2VzKVxuICAgICAgOiBudWxsO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17cXVlc3Rpb24uY3NzSGVhZGVyfSBvbkNsaWNrPXtxdWVzdGlvbi5jbGlja1RpdGxlRnVuY3Rpb259PlxuICAgICAgICB7dGl0bGV9XG4gICAgICAgIHtkZXNjcmlwdGlvbn1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVycm9ycyhjc3NDbGFzc2VzOiBhbnksIGxvY2F0aW9uOiBzdHJpbmcpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTdXJ2ZXlFbGVtZW50RXJyb3JzXG4gICAgICAgIGVsZW1lbnQ9e3RoaXMucXVlc3Rpb259XG4gICAgICAgIGNzc0NsYXNzZXM9e2Nzc0NsYXNzZXN9XG4gICAgICAgIGNyZWF0b3I9e3RoaXMuY3JlYXRvcn1cbiAgICAgICAgbG9jYXRpb249e2xvY2F0aW9ufVxuICAgICAgICBpZD17dGhpcy5xdWVzdGlvbi5pZCArIFwiX2Vycm9yc1wifVxuICAgICAgLz5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwicXVlc3Rpb25cIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uLCBwcm9wcyk7XG59KTtcblxuZXhwb3J0IGNsYXNzIFN1cnZleUVsZW1lbnRFcnJvcnMgZXh0ZW5kcyBSZWFjdFN1cnZleUVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3RhdGUgPSB0aGlzLmdldFN0YXRlKCk7XG4gICAgdGhpcy50b29sdGlwUmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBpZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmlkO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgZWxlbWVudCgpOiBTdXJ2ZXlFbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5lbGVtZW50O1xuICB9XG4gIHByaXZhdGUgZ2V0IGNyZWF0b3IoKTogSVN1cnZleUNyZWF0b3Ige1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNyZWF0b3I7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBsb2NhdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmxvY2F0aW9uO1xuICB9XG4gIHByaXZhdGUgZ2V0U3RhdGUocHJldlN0YXRlOiBhbnkgPSBudWxsKSB7XG4gICAgcmV0dXJuICFwcmV2U3RhdGUgPyB7IGVycm9yOiAwIH0gOiB7IGVycm9yOiBwcmV2U3RhdGUuZXJyb3IgKyAxIH07XG4gIH1cbiAgcHJvdGVjdGVkIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmVsZW1lbnQgJiYgdGhpcy5lbGVtZW50Lmhhc1Zpc2libGVFcnJvcnM7XG4gIH1cbiAgcHJpdmF0ZSB0b29sdGlwTWFuYWdlcjogVG9vbHRpcE1hbmFnZXI7XG4gIHByaXZhdGUgdG9vbHRpcFJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogYW55LCBwcmV2U3RhdGU6IGFueSkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSk7XG4gICAgaWYgKHRoaXMucHJvcHMubG9jYXRpb24gPT0gXCJ0b29sdGlwXCIpIHtcbiAgICAgIGlmICh0aGlzLnRvb2x0aXBSZWYuY3VycmVudCAmJiAhdGhpcy50b29sdGlwTWFuYWdlcikge1xuICAgICAgICB0aGlzLnRvb2x0aXBNYW5hZ2VyID0gbmV3IFRvb2x0aXBNYW5hZ2VyKHRoaXMudG9vbHRpcFJlZi5jdXJyZW50KTtcbiAgICAgIH1cbiAgICAgIGlmICghIXRoaXMudG9vbHRpcE1hbmFnZXIgJiYgIXRoaXMudG9vbHRpcFJlZi5jdXJyZW50KSB7XG4gICAgICAgIHRoaXMuZGlzcG9zZVRvb2x0aXBNYW5hZ2VyKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIGlmICghIXRoaXMudG9vbHRpcE1hbmFnZXIpIHtcbiAgICAgIHRoaXMuZGlzcG9zZVRvb2x0aXBNYW5hZ2VyKCk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZGlzcG9zZVRvb2x0aXBNYW5hZ2VyKCkge1xuICAgIHRoaXMudG9vbHRpcE1hbmFnZXIuZGlzcG9zZSgpO1xuICAgIHRoaXMudG9vbHRpcE1hbmFnZXIgPSB1bmRlZmluZWQ7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGVycm9ycyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50LmVycm9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qga2V5OiBzdHJpbmcgPSBcImVycm9yXCIgKyBpO1xuICAgICAgZXJyb3JzLnB1c2goXG4gICAgICAgIHRoaXMuY3JlYXRvci5yZW5kZXJFcnJvcihrZXksIHRoaXMuZWxlbWVudC5lcnJvcnNbaV0sIHRoaXMuY3NzQ2xhc3NlcylcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgcm9sZT1cImFsZXJ0XCJcbiAgICAgICAgYXJpYS1saXZlPVwicG9saXRlXCJcbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLmVsZW1lbnQuY3NzRXJyb3J9XG4gICAgICAgIGlkPXt0aGlzLmlkfVxuICAgICAgICByZWY9e3RoaXMudG9vbHRpcFJlZn1cbiAgICAgID5cbiAgICAgICAge2Vycm9yc31cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFN1cnZleVF1ZXN0aW9uQW5kRXJyb3JzV3JhcHBlZCBleHRlbmRzIFJlYWN0U3VydmV5RWxlbWVudCB7XG4gIFtpbmRleDogc3RyaW5nXTogYW55O1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb247XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UXVlc3Rpb24oKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGNyZWF0b3IoKTogSVN1cnZleUNyZWF0b3Ige1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNyZWF0b3I7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFF1ZXN0aW9uKCk6IFF1ZXN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5xdWVzdGlvbjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGl0ZW1Dc3MoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtQ3NzO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgdGhpcy5kb0FmdGVyUmVuZGVyKCk7XG4gIH1cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogYW55LCBwcmV2U3RhdGU6IGFueSkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSk7XG4gICAgdGhpcy5kb0FmdGVyUmVuZGVyKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGRvQWZ0ZXJSZW5kZXIoKSB7fVxuICBwcm90ZWN0ZWQgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMucXVlc3Rpb247XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVycm9ycyhlcnJvcnNMb2NhdGlvbjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U2hvd0Vycm9ycygpID8gKFxuICAgICAgPFN1cnZleUVsZW1lbnRFcnJvcnNcbiAgICAgICAgZWxlbWVudD17dGhpcy5xdWVzdGlvbn1cbiAgICAgICAgY3NzQ2xhc3Nlcz17dGhpcy5jc3NDbGFzc2VzfVxuICAgICAgICBjcmVhdG9yPXt0aGlzLmNyZWF0b3J9XG4gICAgICAgIGxvY2F0aW9uPXtlcnJvcnNMb2NhdGlvbn1cbiAgICAgIC8+XG4gICAgKSA6IG51bGw7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckNvbnRlbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBlcnJvcnNMb2NhdGlvbiA9IHRoaXMuY3JlYXRvci5xdWVzdGlvbkVycm9yTG9jYXRpb24oKTtcbiAgICB2YXIgZXJyb3JzID0gdGhpcy5yZW5kZXJFcnJvcnMoZXJyb3JzTG9jYXRpb24pO1xuICAgIHZhciBlcnJvcnNUb3AgPVxuICAgICAgZXJyb3JzTG9jYXRpb24gPT09IFwidG9wXCIgJiYgIXRoaXMucXVlc3Rpb24uaXNFcnJvcnNNb2RlVG9vbHRpcFxuICAgICAgICA/IGVycm9yc1xuICAgICAgICA6IG51bGw7XG4gICAgdmFyIGVycm9yc0JvdHRvbSA9XG4gICAgICBlcnJvcnNMb2NhdGlvbiA9PT0gXCJib3R0b21cIiAmJiAhdGhpcy5xdWVzdGlvbi5pc0Vycm9yc01vZGVUb29sdGlwXG4gICAgICAgID8gZXJyb3JzXG4gICAgICAgIDogbnVsbDtcbiAgICB2YXIgcmVuZGVyZWRRdWVzdGlvbiA9IHRoaXMucmVuZGVyUXVlc3Rpb24oKTtcbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAge2Vycm9yc1RvcH1cbiAgICAgICAge3JlbmRlcmVkUXVlc3Rpb259XG4gICAgICAgIHtlcnJvcnNCb3R0b219XG4gICAgICA8Lz5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBhYnN0cmFjdCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50O1xuICBwcm90ZWN0ZWQgZ2V0U2hvd0Vycm9ycygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5pc1Zpc2libGU7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlclF1ZXN0aW9uKCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gU3VydmV5UXVlc3Rpb24ucmVuZGVyUXVlc3Rpb25Cb2R5KHRoaXMuY3JlYXRvciwgdGhpcy5xdWVzdGlvbik7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uQW5kRXJyb3JzQ2VsbCBleHRlbmRzIFN1cnZleVF1ZXN0aW9uQW5kRXJyb3JzV3JhcHBlZCB7XG4gIFtpbmRleDogc3RyaW5nXTogYW55O1xuICBwcm90ZWN0ZWQgY2VsbFJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxUYWJsZUNlbGxFbGVtZW50PjtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmNlbGxSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uKSB7XG4gICAgICB2YXIgZWwgPSB0aGlzLmNlbGxSZWYuY3VycmVudDtcbiAgICAgIGlmICghIWVsKSB7XG4gICAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZShcImRhdGEtcmVuZGVyZWRcIik7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgc3R5bGUgPSB0aGlzLmdldENlbGxTdHlsZSgpO1xuICAgIHZhciBlcnJvcnNUb29sdGlwID0gdGhpcy5xdWVzdGlvbi5pc0Vycm9yc01vZGVUb29sdGlwXG4gICAgICA/IHRoaXMucmVuZGVyRXJyb3JzKFwidG9vbHRpcFwiKVxuICAgICAgOiBudWxsO1xuICAgIHJldHVybiAoXG4gICAgICA8dGRcbiAgICAgICAgcmVmPXt0aGlzLmNlbGxSZWZ9XG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5pdGVtQ3NzfVxuICAgICAgICBkYXRhLXJlc3BvbnNpdmUtdGl0bGU9e3RoaXMuZ2V0SGVhZGVyVGV4dCgpfVxuICAgICAgICB0aXRsZT17dGhpcy5wcm9wcy5jZWxsLmdldFRpdGxlKCl9XG4gICAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICAgID5cbiAgICAgICAge3RoaXMud3JhcENlbGwodGhpcy5wcm9wcy5jZWxsLFxuICAgICAgICAgIChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLmNzc0NsYXNzZXMuY2VsbFF1ZXN0aW9uV3JhcHBlcn0+XG4gICAgICAgICAgICAgIHt0aGlzLnJlbmRlckNvbnRlbnQoKX1cbiAgICAgICAgICAgICAge2Vycm9yc1Rvb2x0aXB9XG4gICAgICAgICAgICA8L2Rpdj4pXG4gICAgICAgICl9XG4gICAgICA8L3RkPlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldENlbGxTdHlsZSgpOiBhbnkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHByb3RlY3RlZCBnZXRIZWFkZXJUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cbiAgcHJvdGVjdGVkIHdyYXBDZWxsKFxuICAgIGNlbGw6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwsXG4gICAgZWxlbWVudDogSlNYLkVsZW1lbnRcbiAgKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghY2VsbCkge1xuICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxuICAgIGNvbnN0IHN1cnZleTogU3VydmV5TW9kZWwgPSB0aGlzLnF1ZXN0aW9uLnN1cnZleSBhcyBTdXJ2ZXlNb2RlbDtcbiAgICBsZXQgd3JhcHBlcjogSlNYLkVsZW1lbnQ7XG4gICAgaWYgKHN1cnZleSkge1xuICAgICAgd3JhcHBlciA9IFJlYWN0U3VydmV5RWxlbWVudHNXcmFwcGVyLndyYXBNYXRyaXhDZWxsKHN1cnZleSwgZWxlbWVudCwgY2VsbCk7XG4gICAgfVxuICAgIHJldHVybiB3cmFwcGVyID8/IGVsZW1lbnQ7XG4gIH1cbn1cbiIsImltcG9ydCB7IFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBTdmdJY29uIH0gZnJvbSBcIi4vY29tcG9uZW50cy9zdmctaWNvbi9zdmctaWNvblwiO1xuaW1wb3J0IHtcbiAgUXVlc3Rpb25CdXR0b25Hcm91cE1vZGVsLFxuICBCdXR0b25Hcm91cEl0ZW1WYWx1ZSxcbiAgQnV0dG9uR3JvdXBJdGVtTW9kZWwsXG59IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uQnV0dG9uR3JvdXAgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uQnV0dG9uR3JvdXBNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFF1ZXN0aW9uQnV0dG9uR3JvdXBNb2RlbDtcbiAgfVxuICBnZXRTdGF0ZUVsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb247XG4gIH1cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5yZW5kZXJJdGVtcygpO1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnJvb3R9PntpdGVtc308L2Rpdj47XG4gIH1cbiAgcmVuZGVySXRlbXMoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb24udmlzaWJsZUNob2ljZXMubWFwKFxuICAgICAgKGl0ZW06IEJ1dHRvbkdyb3VwSXRlbVZhbHVlLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPFN1cnZleUJ1dHRvbkdyb3VwSXRlbVxuICAgICAgICAgICAga2V5PXt0aGlzLnF1ZXN0aW9uLmlucHV0SWQgKyBcIl9cIiArIGluZGV4fVxuICAgICAgICAgICAgaXRlbT17aXRlbX1cbiAgICAgICAgICAgIHF1ZXN0aW9uPXt0aGlzLnF1ZXN0aW9ufVxuICAgICAgICAgICAgaW5kZXg9e2luZGV4fVxuICAgICAgICAgID48L1N1cnZleUJ1dHRvbkdyb3VwSXRlbT5cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlCdXR0b25Hcm91cEl0ZW0gZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxhbnksIGFueT4ge1xuICBwdWJsaWMgbW9kZWw6IEJ1dHRvbkdyb3VwSXRlbU1vZGVsO1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMubW9kZWwgPSBuZXcgQnV0dG9uR3JvdXBJdGVtTW9kZWwodGhpcy5xdWVzdGlvbiwgdGhpcy5pdGVtLCB0aGlzLmluZGV4KTtcbiAgfVxuICBnZXQgaW5kZXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pbmRleDtcbiAgfVxuICBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25CdXR0b25Hcm91cE1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5xdWVzdGlvbjtcbiAgfVxuICBnZXQgaXRlbSgpOiBCdXR0b25Hcm91cEl0ZW1WYWx1ZSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbTtcbiAgfVxuICBnZXRTdGF0ZUVsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbTtcbiAgfVxuICBwdWJsaWMgcmVuZGVyKCkge1xuICAgIGNvbnN0IGljb24gPSB0aGlzLnJlbmRlckljb24oKTtcbiAgICBjb25zdCBpbnB1dCA9IHRoaXMucmVuZGVySW5wdXQoKTtcbiAgICBjb25zdCBjYXB0aW9uID0gdGhpcy5yZW5kZXJDYXB0aW9uKCk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxsYWJlbFxuICAgICAgICBjbGFzc05hbWU9e3RoaXMubW9kZWwuY3NzLmxhYmVsfVxuICAgICAgICB0aXRsZT17dGhpcy5tb2RlbC5jYXB0aW9uLnJlbmRlcmVkSHRtbH1cbiAgICAgID5cbiAgICAgICAge2lucHV0fVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5tb2RlbC5jc3MuZGVjb3JhdG9yfT5cbiAgICAgICAgICB7aWNvbn1cbiAgICAgICAgICB7Y2FwdGlvbn1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2xhYmVsPlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckljb24oKSB7XG4gICAgaWYgKCEhdGhpcy5tb2RlbC5pY29uTmFtZSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFN2Z0ljb25cbiAgICAgICAgICBjbGFzc05hbWU9e3RoaXMubW9kZWwuY3NzLmljb259XG4gICAgICAgICAgaWNvbk5hbWU9e3RoaXMubW9kZWwuaWNvbk5hbWV9XG4gICAgICAgICAgc2l6ZT17dGhpcy5tb2RlbC5pY29uU2l6ZSB8fCAyNH1cbiAgICAgICAgPjwvU3ZnSWNvbj5cbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJJbnB1dCgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGlucHV0XG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5tb2RlbC5jc3MuY29udHJvbH1cbiAgICAgICAgaWQ9e3RoaXMubW9kZWwuaWR9XG4gICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgIG5hbWU9e3RoaXMubW9kZWwubmFtZX1cbiAgICAgICAgY2hlY2tlZD17dGhpcy5tb2RlbC5zZWxlY3RlZH1cbiAgICAgICAgdmFsdWU9e3RoaXMubW9kZWwudmFsdWV9XG4gICAgICAgIGRpc2FibGVkPXt0aGlzLm1vZGVsLnJlYWRPbmx5fVxuICAgICAgICBvbkNoYW5nZT17KCkgPT4ge1xuICAgICAgICAgIHRoaXMubW9kZWwub25DaGFuZ2UoKTtcbiAgICAgICAgfX1cbiAgICAgICAgYXJpYS1yZXF1aXJlZD17dGhpcy5tb2RlbC5pc1JlcXVpcmVkfVxuICAgICAgICBhcmlhLWxhYmVsPXt0aGlzLm1vZGVsLmNhcHRpb24ucmVuZGVyZWRIdG1sfVxuICAgICAgICBhcmlhLWludmFsaWQ9e3RoaXMubW9kZWwuaGFzRXJyb3JzfVxuICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PXt0aGlzLm1vZGVsLmRlc2NyaWJlZEJ5fVxuICAgICAgICByb2xlPVwicmFkaW9cIlxuICAgICAgLz5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJDYXB0aW9uKCkge1xuICAgIGlmICghdGhpcy5tb2RlbC5zaG93Q2FwdGlvbikgcmV0dXJuIG51bGw7XG4gICAgbGV0IGNhcHRpb24gPSB0aGlzLnJlbmRlckxvY1N0cmluZyh0aGlzLm1vZGVsLmNhcHRpb24pO1xuICAgIHJldHVybiAoXG4gICAgICA8c3BhblxuICAgICAgICBjbGFzc05hbWU9e3RoaXMubW9kZWwuY3NzLmNhcHRpb259XG4gICAgICAgIHRpdGxlPXt0aGlzLm1vZGVsLmNhcHRpb24ucmVuZGVyZWRIdG1sfVxuICAgICAgPlxuICAgICAgICB7Y2FwdGlvbn1cbiAgICAgIDwvc3Bhbj5cbiAgICApO1xuICB9XG59XG5cbi8vIFJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJidXR0b25ncm91cFwiLCBwcm9wcyA9PiB7XG4vLyAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uQnV0dG9uR3JvdXAsIHByb3BzKTtcbi8vIH0pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge1xuICBSZWFjdFN1cnZleUVsZW1lbnQsXG4gIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UsXG59IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25Db21tZW50SXRlbSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fY29tbWVudFwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcbmltcG9ydCB7IFJlYWN0U3VydmV5RWxlbWVudHNXcmFwcGVyIH0gZnJvbSBcIi4vcmVhY3RzdXJ2ZXltb2RlbFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25DaGVja2JveE1vZGVsIH0gZnJvbSBcIi4uL3F1ZXN0aW9uX2NoZWNrYm94XCI7XG5pbXBvcnQgeyBCYXNlLCBJdGVtVmFsdWUsIFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkNoZWNrYm94IGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbkNoZWNrYm94TW9kZWwge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBRdWVzdGlvbkNoZWNrYm94TW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBjc3NDbGFzc2VzID0gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIHJldHVybiAoXG4gICAgICA8ZmllbGRzZXRcbiAgICAgICAgcm9sZT1cInByZXNlbnRhdGlvblwiXG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRTZWxlY3RCYXNlUm9vdENzcygpfVxuICAgICAgICByZWY9eyhmaWVsZHNldCkgPT4gKHRoaXMuY29udHJvbCA9IGZpZWxkc2V0KX1cbiAgICAgID5cbiAgICAgICAgPGxlZ2VuZCByb2xlPVwicHJlc2VudGF0aW9uXCIgY2xhc3NOYW1lPXtcInN2LWhpZGRlblwifT48L2xlZ2VuZD5cbiAgICAgICAge3RoaXMucXVlc3Rpb24uaGFzQ29sdW1uc1xuICAgICAgICAgID8gdGhpcy5nZXRDb2x1bW5lZEJvZHkoY3NzQ2xhc3NlcylcbiAgICAgICAgICA6IHRoaXMuZ2V0SXRlbXMoY3NzQ2xhc3Nlcyl9XG4gICAgICAgIHt0aGlzLnF1ZXN0aW9uLmhhc090aGVyICYmIHRoaXMucXVlc3Rpb24uaXNJdGVtU2VsZWN0ZWQodGhpcy5xdWVzdGlvbi5vdGhlckl0ZW0pID8gdGhpcy5yZW5kZXJPdGhlcigpIDogbnVsbH1cbiAgICAgIDwvZmllbGRzZXQ+XG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRIZWFkZXIoKSB7XG4gICAgaWYgKHRoaXMucXVlc3Rpb24uaGFzSGVhZEl0ZW1zKSB7XG4gICAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5oZWFkSXRlbXMubWFwKChpdGVtOiBhbnksIGlpOiBudW1iZXIpID0+XG4gICAgICAgIHRoaXMucmVuZGVySXRlbShcbiAgICAgICAgICBcIml0ZW1faFwiICsgaWksXG4gICAgICAgICAgaXRlbSxcbiAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMsXG4gICAgICAgICAgbnVsbFxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Rm9vdGVyKCkge1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLmhhc0Zvb3RJdGVtcykge1xuICAgICAgcmV0dXJuIHRoaXMucXVlc3Rpb24uZm9vdEl0ZW1zLm1hcCgoaXRlbTogYW55LCBpaTogbnVtYmVyKSA9PlxuICAgICAgICB0aGlzLnJlbmRlckl0ZW0oXG4gICAgICAgICAgXCJpdGVtX2ZcIiArIGlpLFxuICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLFxuICAgICAgICAgIG51bGxcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGdldENvbHVtbmVkQm9keShjc3NDbGFzc2VzOiBhbnkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAge3RoaXMuZ2V0SGVhZGVyKCl9XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLnJvb3RNdWx0aUNvbHVtbn0+XG4gICAgICAgICAge3RoaXMuZ2V0Q29sdW1ucyhjc3NDbGFzc2VzKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHt0aGlzLmdldEZvb3RlcigpfVxuICAgICAgPC8+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Q29sdW1ucyhjc3NDbGFzc2VzOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5jb2x1bW5zLm1hcCgoY29sdW1uOiBhbnksIGNpOiBudW1iZXIpID0+IHtcbiAgICAgIHZhciBpdGVtcyA9IGNvbHVtbi5tYXAoKGl0ZW06IGFueSwgaWk6IG51bWJlcikgPT5cbiAgICAgICAgdGhpcy5yZW5kZXJJdGVtKFxuICAgICAgICAgIFwiaXRlbVwiICsgaWksXG4gICAgICAgICAgaXRlbSxcbiAgICAgICAgICBjaSA9PT0gMCAmJiBpaSA9PT0gMCxcbiAgICAgICAgICBjc3NDbGFzc2VzLFxuICAgICAgICAgIFwiXCIgKyBjaSArIGlpXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IGtleT17XCJjb2x1bW5cIiArIGNpfSBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0Q29sdW1uQ2xhc3MoKX0gcm9sZT1cInByZXNlbnRhdGlvblwiPlxuICAgICAgICAgIHtpdGVtc31cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH0pO1xuICB9XG4gIHByb3RlY3RlZCBnZXRJdGVtcyhjc3NDbGFzc2VzOiBhbnkpOiBBcnJheTxhbnk+IHtcbiAgICB2YXIgcmVuZGVyZWRJdGVtcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5xdWVzdGlvbi52aXNpYmxlQ2hvaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGl0ZW0gPSB0aGlzLnF1ZXN0aW9uLnZpc2libGVDaG9pY2VzW2ldO1xuICAgICAgdmFyIGtleSA9IFwiaXRlbVwiICsgaTtcbiAgICAgIHZhciByZW5kZXJlZEl0ZW0gPSB0aGlzLnJlbmRlckl0ZW0oa2V5LCBpdGVtLCBpID09IDAsIGNzc0NsYXNzZXMsIFwiXCIgKyBpKTtcbiAgICAgIHJlbmRlcmVkSXRlbXMucHVzaChyZW5kZXJlZEl0ZW0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVuZGVyZWRJdGVtcztcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHRleHRTdHlsZSgpOiBhbnkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJPdGhlcigpOiBKU1guRWxlbWVudCB7XG4gICAgbGV0IGNzc0NsYXNzZXMgPSB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICA8U3VydmV5UXVlc3Rpb25Db21tZW50SXRlbVxuICAgICAgICAgIHF1ZXN0aW9uPXt0aGlzLnF1ZXN0aW9ufVxuICAgICAgICAgIG90aGVyQ3NzPXtjc3NDbGFzc2VzLm90aGVyfVxuICAgICAgICAgIGNzc0NsYXNzZXM9e2Nzc0NsYXNzZXN9XG4gICAgICAgICAgaXNEaXNwbGF5TW9kZT17dGhpcy5pc0Rpc3BsYXlNb2RlfVxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVySXRlbShcbiAgICBrZXk6IHN0cmluZyxcbiAgICBpdGVtOiBhbnksXG4gICAgaXNGaXJzdDogYm9vbGVhbixcbiAgICBjc3NDbGFzc2VzOiBhbnksXG4gICAgaW5kZXg6IHN0cmluZ1xuICApOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgcmVuZGVyZWRJdGVtID0gKFxuICAgICAgPFN1cnZleVF1ZXN0aW9uQ2hlY2tib3hJdGVtXG4gICAgICAgIGtleT17a2V5fVxuICAgICAgICBxdWVzdGlvbj17dGhpcy5xdWVzdGlvbn1cbiAgICAgICAgY3NzQ2xhc3Nlcz17Y3NzQ2xhc3Nlc31cbiAgICAgICAgaXNEaXNwbGF5TW9kZT17dGhpcy5pc0Rpc3BsYXlNb2RlfVxuICAgICAgICBpdGVtPXtpdGVtfVxuICAgICAgICB0ZXh0U3R5bGU9e3RoaXMudGV4dFN0eWxlfVxuICAgICAgICBpc0ZpcnN0PXtpc0ZpcnN0fVxuICAgICAgICBpbmRleD17aW5kZXh9XG4gICAgICAvPlxuICAgICk7XG4gICAgY29uc3Qgc3VydmV5ID0gdGhpcy5xdWVzdGlvbi5zdXJ2ZXkgYXMgU3VydmV5TW9kZWw7XG4gICAgbGV0IHdyYXBwZWRJdGVtID0gbnVsbDtcbiAgICBpZighIXN1cnZleSkge1xuICAgICAgd3JhcHBlZEl0ZW0gPSBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlci53cmFwSXRlbVZhbHVlKHN1cnZleSwgcmVuZGVyZWRJdGVtLCB0aGlzLnF1ZXN0aW9uLCBpdGVtKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyYXBwZWRJdGVtID8/IHJlbmRlcmVkSXRlbTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uQ2hlY2tib3hJdGVtIGV4dGVuZHMgUmVhY3RTdXJ2ZXlFbGVtZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLml0ZW07XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbkNoZWNrYm94TW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnF1ZXN0aW9uO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgaXRlbSgpOiBJdGVtVmFsdWUge1xuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW07XG4gIH1cbiAgcHJvdGVjdGVkIGdldCB0ZXh0U3R5bGUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy50ZXh0U3R5bGU7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBpc0ZpcnN0KCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXNGaXJzdDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGluZGV4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaW5kZXg7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgaGlkZUNhcHRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaGlkZUNhcHRpb24gPT09IHRydWU7XG4gIH1cbiAgcHVibGljIHNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHM6IGFueSwgbmV4dFN0YXRlOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoIXN1cGVyLnNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHMsIG5leHRTdGF0ZSkpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gKFxuICAgICAgIXRoaXMucXVlc3Rpb24uY3VzdG9tV2lkZ2V0IHx8XG4gICAgICAhIXRoaXMucXVlc3Rpb24uY3VzdG9tV2lkZ2V0RGF0YS5pc05lZWRSZW5kZXIgfHxcbiAgICAgICEhdGhpcy5xdWVzdGlvbi5jdXN0b21XaWRnZXQud2lkZ2V0SnNvbi5pc0RlZmF1bHRSZW5kZXIgfHxcbiAgICAgICEhdGhpcy5xdWVzdGlvbi5jdXN0b21XaWRnZXQud2lkZ2V0SnNvbi5yZW5kZXJcbiAgICApO1xuICB9XG4gIGhhbmRsZU9uQ2hhbmdlID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICB2YXIgbmV3VmFsdWUgPSBbXS5jb25jYXQodGhpcy5xdWVzdGlvbi5yZW5kZXJlZFZhbHVlIHx8IFtdKTtcbiAgICB2YXIgaW5kZXggPSBuZXdWYWx1ZS5pbmRleE9mKHRoaXMuaXRlbS52YWx1ZSk7XG4gICAgaWYgKGV2ZW50LnRhcmdldC5jaGVja2VkKSB7XG4gICAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICAgIG5ld1ZhbHVlLnB1c2godGhpcy5pdGVtLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgbmV3VmFsdWUuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5xdWVzdGlvbi5yZW5kZXJlZFZhbHVlID0gbmV3VmFsdWU7XG4gIH1cbiAgc2VsZWN0QWxsQ2hhbmdlZCA9IChldmVudDogYW55KSA9PiB7XG4gICAgdGhpcy5xdWVzdGlvbi50b2dnbGVTZWxlY3RBbGwoKTtcbiAgfVxuICBwcm90ZWN0ZWQgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuaXRlbSAmJiAhIXRoaXMucXVlc3Rpb247XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBpc0NoZWNrZWQgPSB0aGlzLnF1ZXN0aW9uLmlzSXRlbVNlbGVjdGVkKHRoaXMuaXRlbSk7XG4gICAgcmV0dXJuIHRoaXMucmVuZGVyQ2hlY2tib3goaXNDaGVja2VkLCBudWxsKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGlucHV0U3R5bGUoKTogYW55IHtcbiAgICByZXR1cm4gbnVsbDsvL3sgbWFyZ2luUmlnaHQ6IFwiM3B4XCIgfTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQ2hlY2tib3goXG4gICAgaXNDaGVja2VkOiBib29sZWFuLFxuICAgIG90aGVySXRlbTogSlNYLkVsZW1lbnRcbiAgKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBpZCA9IHRoaXMucXVlc3Rpb24uZ2V0SXRlbUlkKHRoaXMuaXRlbSk7XG4gICAgdmFyIHRleHQgPSAhdGhpcy5oaWRlQ2FwdGlvbiA/IHRoaXMucmVuZGVyTG9jU3RyaW5nKHRoaXMuaXRlbS5sb2NUZXh0KSA6IFwiXCI7XG4gICAgbGV0IGl0ZW1DbGFzcyA9IHRoaXMucXVlc3Rpb24uZ2V0SXRlbUNsYXNzKHRoaXMuaXRlbSk7XG4gICAgbGV0IGxhYmVsQ2xhc3MgPSB0aGlzLnF1ZXN0aW9uLmdldExhYmVsQ2xhc3ModGhpcy5pdGVtKTtcbiAgICB2YXIgb25JdGVtQ2hhbmdlZCA9XG4gICAgICB0aGlzLml0ZW0gPT0gdGhpcy5xdWVzdGlvbi5zZWxlY3RBbGxJdGVtXG4gICAgICAgID8gdGhpcy5zZWxlY3RBbGxDaGFuZ2VkXG4gICAgICAgIDogdGhpcy5oYW5kbGVPbkNoYW5nZTtcblxuICAgIHZhciBsb2NUZXh0OiBhbnkgPSB0aGlzLml0ZW0ubG9jVGV4dDtcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17aXRlbUNsYXNzfSByb2xlPVwicHJlc2VudGF0aW9uXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzc05hbWU9e2xhYmVsQ2xhc3N9IGFyaWEtbGFiZWw9e3RoaXMucXVlc3Rpb24uZ2V0QXJpYUl0ZW1MYWJlbCh0aGlzLml0ZW0pfT5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5jc3NDbGFzc2VzLml0ZW1Db250cm9sfVxuICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgIG5hbWU9e3RoaXMucXVlc3Rpb24ubmFtZX1cbiAgICAgICAgICAgIHZhbHVlPXt0aGlzLml0ZW0udmFsdWUgIT0gXCJzZWxlY3RhbGxcIiA/IHRoaXMuaXRlbS52YWx1ZSA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgIGlkPXtpZH1cbiAgICAgICAgICAgIHN0eWxlPXt0aGlzLmlucHV0U3R5bGV9XG4gICAgICAgICAgICBkaXNhYmxlZD17IXRoaXMucXVlc3Rpb24uZ2V0SXRlbUVuYWJsZWQodGhpcy5pdGVtKX1cbiAgICAgICAgICAgIGNoZWNrZWQ9e2lzQ2hlY2tlZH1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtvbkl0ZW1DaGFuZ2VkfVxuICAgICAgICAgICAgYXJpYS1kZXNjcmliZWRieT17dGhpcy5xdWVzdGlvbi5hcmlhRGVzY3JpYmVkQnl9XG4gICAgICAgICAgLz5cbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNzc0NsYXNzZXMubWF0ZXJpYWxEZWNvcmF0b3IgP1xuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3RoaXMuY3NzQ2xhc3Nlcy5tYXRlcmlhbERlY29yYXRvcn0+XG4gICAgICAgICAgICAgICAgeyB0aGlzLnF1ZXN0aW9uLml0ZW1TdmdJY29uID9cbiAgICAgICAgICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLmNzc0NsYXNzZXMuaXRlbURlY29yYXRvcn1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHVzZSB4bGlua0hyZWY9e3RoaXMucXVlc3Rpb24uaXRlbVN2Z0ljb259PjwvdXNlPlxuICAgICAgICAgICAgICAgICAgPC9zdmc+OlxuICAgICAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9zcGFuPiA6XG4gICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICB9XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXt0aGlzLmNzc0NsYXNzZXMuY29udHJvbExhYmVsfT5cbiAgICAgICAgICAgIHt0ZXh0fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgICAge290aGVySXRlbX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImNoZWNrYm94XCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbkNoZWNrYm94LCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUmVhY3RTdXJ2ZXlFbGVtZW50LCBTdXJ2ZXlRdWVzdGlvblVuY29udHJvbGxlZEVsZW1lbnQgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFF1ZXN0aW9uQ29tbWVudE1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25Db21tZW50IGV4dGVuZHMgU3VydmV5UXVlc3Rpb25VbmNvbnRyb2xsZWRFbGVtZW50PFF1ZXN0aW9uQ29tbWVudE1vZGVsPiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBvbkJsdXIgPSAhdGhpcy5xdWVzdGlvbi5pc0lucHV0VGV4dFVwZGF0ZSA/IHRoaXMudXBkYXRlVmFsdWVPbkV2ZW50IDogbnVsbDtcbiAgICB2YXIgb25JbnB1dCA9IChldmVudDogYW55KSA9PiB7XG4gICAgICBpZiAodGhpcy5xdWVzdGlvbi5pc0lucHV0VGV4dFVwZGF0ZSlcbiAgICAgICAgdGhpcy51cGRhdGVWYWx1ZU9uRXZlbnQoZXZlbnQpO1xuICAgICAgZWxzZVxuICAgICAgICB0aGlzLnF1ZXN0aW9uLnVwZGF0ZUVsZW1lbnQoKTtcbiAgICB9O1xuICAgIHZhciBwbGFjZUhvbGRlciA9IHRoaXMucXVlc3Rpb24ucmVuZGVyZWRQbGFjZUhvbGRlcjtcbiAgICBpZiAodGhpcy5xdWVzdGlvbi5pc1JlYWRPbmx5UmVuZGVyRGl2KCkpIHtcbiAgICAgIHJldHVybiA8ZGl2Pnt0aGlzLnF1ZXN0aW9uLnZhbHVlfTwvZGl2PjtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDx0ZXh0YXJlYVxuICAgICAgICBpZD17dGhpcy5xdWVzdGlvbi5pbnB1dElkfVxuICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY2xhc3NOYW1lfVxuICAgICAgICBkaXNhYmxlZD17IHRoaXMucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5IH1cbiAgICAgICAgcmVhZE9ubHk9eyB0aGlzLnF1ZXN0aW9uLmlzSW5wdXRSZWFkT25seSB9XG4gICAgICAgIHJlZj17KHRldHhhcmVhKSA9PiAodGhpcy5jb250cm9sID0gdGV0eGFyZWEpfVxuICAgICAgICBtYXhMZW5ndGg9e3RoaXMucXVlc3Rpb24uZ2V0TWF4TGVuZ3RoKCl9XG4gICAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZUhvbGRlcn1cbiAgICAgICAgb25CbHVyPXtvbkJsdXJ9XG4gICAgICAgIG9uSW5wdXQ9e29uSW5wdXR9XG4gICAgICAgIG9uS2V5RG93bj17KGV2ZW50KSA9PiB7IHRoaXMucXVlc3Rpb24ub25LZXlEb3duKGV2ZW50KTsgfX1cbiAgICAgICAgY29scz17dGhpcy5xdWVzdGlvbi5jb2xzfVxuICAgICAgICByb3dzPXt0aGlzLnF1ZXN0aW9uLnJvd3N9XG4gICAgICAgIGFyaWEtcmVxdWlyZWQ9e3RoaXMucXVlc3Rpb24uYXJpYVJlcXVpcmVkfVxuICAgICAgICBhcmlhLWxhYmVsPXt0aGlzLnF1ZXN0aW9uLmFyaWFMYWJlbH1cbiAgICAgICAgYXJpYS1pbnZhbGlkPXt0aGlzLnF1ZXN0aW9uLmFyaWFJbnZhbGlkfVxuICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PXt0aGlzLnF1ZXN0aW9uLmFyaWFEZXNjcmliZWRCeX1cbiAgICAgICAgc3R5bGU9e3sgcmVzaXplOiB0aGlzLnF1ZXN0aW9uLnJlc2l6ZVN0eWxlIH19XG4gICAgICAvPlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uQ29tbWVudEl0ZW0gZXh0ZW5kcyBSZWFjdFN1cnZleUVsZW1lbnQge1xuICBwcm90ZWN0ZWQgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMucHJvcHMucXVlc3Rpb247XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGxldCBxdWVzdGlvbiA9IHRoaXMucHJvcHMucXVlc3Rpb247XG4gICAgbGV0IGNsYXNzTmFtZSA9IHRoaXMucHJvcHMub3RoZXJDc3MgfHwgdGhpcy5jc3NDbGFzc2VzLmNvbW1lbnQ7XG4gICAgbGV0IGhhbmRsZU9uQ2hhbmdlID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBjb21tZW50OiBldmVudC50YXJnZXQudmFsdWUgfSk7XG4gICAgfTtcbiAgICBsZXQgY29tbWVudCA9ICEhdGhpcy5zdGF0ZSAmJiB0aGlzLnN0YXRlLmNvbW1lbnQgIT09IHVuZGVmaW5lZCA/IHRoaXMuc3RhdGUuY29tbWVudCA6IHF1ZXN0aW9uLmNvbW1lbnQgfHwgXCJcIjtcbiAgICBpZiAocXVlc3Rpb24uaXNSZWFkT25seVJlbmRlckRpdigpKSB7XG4gICAgICByZXR1cm4gPGRpdj57Y29tbWVudH08L2Rpdj47XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8dGV4dGFyZWFcbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICAgIHZhbHVlPXtjb21tZW50fVxuICAgICAgICBkaXNhYmxlZD17dGhpcy5pc0Rpc3BsYXlNb2RlfVxuICAgICAgICBtYXhMZW5ndGg9e3F1ZXN0aW9uLmdldE90aGVyc01heExlbmd0aCgpfVxuICAgICAgICBwbGFjZWhvbGRlcj17cXVlc3Rpb24uY29tbWVudE9yT3RoZXJQbGFjZUhvbGRlcn1cbiAgICAgICAgb25DaGFuZ2U9e2hhbmRsZU9uQ2hhbmdlfVxuICAgICAgICBvbkJsdXI9eyhlKSA9PiB7IHF1ZXN0aW9uLm9uQ29tbWVudENoYW5nZShlKTsgaGFuZGxlT25DaGFuZ2UoZSk7IH0gfVxuICAgICAgICBvbklucHV0PXsoZSkgPT4gcXVlc3Rpb24ub25Db21tZW50SW5wdXQoZSl9XG4gICAgICAgIGFyaWEtcmVxdWlyZWQ9e3F1ZXN0aW9uLmlzUmVxdWlyZWR9XG4gICAgICAgIGFyaWEtbGFiZWw9e3F1ZXN0aW9uLmxvY1RpdGxlLnJlbmRlcmVkSHRtbH1cbiAgICAgICAgc3R5bGU9e3sgcmVzaXplOiBxdWVzdGlvbi5yZXNpemVTdHlsZSB9fVxuICAgICAgLz5cbiAgICApO1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJjb21tZW50XCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbkNvbW1lbnQsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvblVuY29udHJvbGxlZEVsZW1lbnQgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvblwiO1xuaW1wb3J0IHsgQmFzZSwgUXVlc3Rpb25DdXN0b21Nb2RlbCwgUXVlc3Rpb25Db21wb3NpdGVNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcbmltcG9ydCB7IFN1cnZleVBhbmVsIH0gZnJvbSBcIi4vcGFuZWxcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uQ3VzdG9tIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25VbmNvbnRyb2xsZWRFbGVtZW50PFF1ZXN0aW9uQ3VzdG9tTW9kZWw+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50cygpOiBBcnJheTxCYXNlPiB7XG4gICAgY29uc3QgcmVzID0gc3VwZXIuZ2V0U3RhdGVFbGVtZW50cygpO1xuICAgIGlmKCEhdGhpcy5xdWVzdGlvbi5jb250ZW50UXVlc3Rpb24pIHtcbiAgICAgIHJlcy5wdXNoKHRoaXMucXVlc3Rpb24uY29udGVudFF1ZXN0aW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIFN1cnZleVF1ZXN0aW9uLnJlbmRlclF1ZXN0aW9uQm9keShcbiAgICAgIHRoaXMuY3JlYXRvcixcbiAgICAgIHRoaXMucXVlc3Rpb24uY29udGVudFF1ZXN0aW9uXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25Db21wb3NpdGUgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvblVuY29udHJvbGxlZEVsZW1lbnQ8UXVlc3Rpb25Db21wb3NpdGVNb2RlbD4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5xdWVzdGlvbi5jb250ZW50UGFuZWw7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8U3VydmV5UGFuZWxcbiAgICAgICAgZWxlbWVudD17dGhpcy5xdWVzdGlvbi5jb250ZW50UGFuZWx9XG4gICAgICAgIGNyZWF0b3I9e3RoaXMuY3JlYXRvcn1cbiAgICAgICAgc3VydmV5PXt0aGlzLnF1ZXN0aW9uLnN1cnZleX1cbiAgICAgID48L1N1cnZleVBhbmVsPlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImN1c3RvbVwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25DdXN0b20sIHByb3BzKTtcbn0pO1xuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImNvbXBvc2l0ZVwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25Db21wb3NpdGUsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge1xuICBTdXJ2ZXlRdWVzdGlvblVuY29udHJvbGxlZEVsZW1lbnQsXG4gIFJlYWN0U3VydmV5RWxlbWVudCxcbn0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBRdWVzdGlvbiB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25Db21tZW50SXRlbSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fY29tbWVudFwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi4vYmFzZVwiO1xuaW1wb3J0IHsgSXRlbVZhbHVlIH0gZnJvbSBcIi4uL2l0ZW12YWx1ZVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25Ecm9wZG93bkJhc2U8VCBleHRlbmRzIFF1ZXN0aW9uPiBleHRlbmRzIFN1cnZleVF1ZXN0aW9uVW5jb250cm9sbGVkRWxlbWVudDxUPiB7XG4gIHByb3RlY3RlZCBzZXRWYWx1ZUNvcmUobmV3VmFsdWU6IGFueSkge1xuICAgIHRoaXMucXVlc3Rpb25CYXNlLnJlbmRlcmVkVmFsdWUgPSBuZXdWYWx1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0VmFsdWVDb3JlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlLnJlbmRlcmVkVmFsdWU7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlclNlbGVjdChjc3NDbGFzc2VzOiBhbnkpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3Qgc2VsZWN0RWxlbWVudCA9IHRoaXMuaXNEaXNwbGF5TW9kZSA/IChcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIDxkaXYgaWQ9e3RoaXMucXVlc3Rpb24uaW5wdXRJZH0gY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldENvbnRyb2xDbGFzcygpfSBkaXNhYmxlZD57IHRoaXMucXVlc3Rpb24ucmVhZE9ubHlUZXh0IH08L2Rpdj4pOlxuICAgICAgKDxzZWxlY3RcbiAgICAgICAgaWQ9e3RoaXMucXVlc3Rpb24uaW5wdXRJZH1cbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldENvbnRyb2xDbGFzcygpfVxuICAgICAgICByZWY9eyhzZWxlY3QpID0+ICh0aGlzLmNvbnRyb2wgPSBzZWxlY3QpfVxuICAgICAgICBhdXRvQ29tcGxldGU9e3RoaXMucXVlc3Rpb24uYXV0b0NvbXBsZXRlfVxuICAgICAgICBvbkNoYW5nZT17dGhpcy51cGRhdGVWYWx1ZU9uRXZlbnR9XG4gICAgICAgIG9uSW5wdXQ9e3RoaXMudXBkYXRlVmFsdWVPbkV2ZW50fVxuICAgICAgICBhcmlhLXJlcXVpcmVkPXt0aGlzLnF1ZXN0aW9uLmFyaWFSZXF1aXJlZH1cbiAgICAgICAgYXJpYS1sYWJlbD17dGhpcy5xdWVzdGlvbi5hcmlhTGFiZWx9XG4gICAgICAgIGFyaWEtaW52YWxpZD17dGhpcy5xdWVzdGlvbi5hcmlhSW52YWxpZH1cbiAgICAgICAgYXJpYS1kZXNjcmliZWRieT17dGhpcy5xdWVzdGlvbi5hcmlhRGVzY3JpYmVkQnl9XG4gICAgICAgIHJlcXVpcmVkPXt0aGlzLnF1ZXN0aW9uLmlzUmVxdWlyZWR9PlxuICAgICAgICB7IHRoaXMucXVlc3Rpb24uc2hvd09wdGlvbnNDYXB0aW9uID8gKDxvcHRpb24gdmFsdWU9XCJcIj57dGhpcy5xdWVzdGlvbi5vcHRpb25zQ2FwdGlvbn08L29wdGlvbj4pIDogbnVsbCB9XG4gICAgICAgIHsgdGhpcy5xdWVzdGlvbi52aXNpYmxlQ2hvaWNlcy5tYXAoKGl0ZW06IEl0ZW1WYWx1ZSwgaTogbnVtYmVyKSA9PiA8U3VydmV5UXVlc3Rpb25PcHRpb25JdGVtIGtleT17XCJpdGVtXCIgKyBpfSBpdGVtPXtpdGVtfS8+KSB9XG4gICAgICA8L3NlbGVjdD4pO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5zZWxlY3RXcmFwcGVyfT5cbiAgICAgICAge3NlbGVjdEVsZW1lbnR9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkRyb3Bkb3duIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25Ecm9wZG93bkJhc2U8UXVlc3Rpb24+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGNzc0NsYXNzZXMgPSB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgdmFyIGNvbW1lbnQgPSB0aGlzLnF1ZXN0aW9uLmlzT3RoZXJTZWxlY3RlZFxuICAgICAgPyB0aGlzLnJlbmRlck90aGVyKGNzc0NsYXNzZXMpXG4gICAgICA6IG51bGw7XG4gICAgdmFyIHNlbGVjdCA9IHRoaXMucmVuZGVyU2VsZWN0KGNzc0NsYXNzZXMpO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5yZW5kZXJDc3NSb290fT5cbiAgICAgICAge3NlbGVjdH1cbiAgICAgICAge2NvbW1lbnR9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJPdGhlcihjc3NDbGFzc2VzOiBhbnkpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICA8U3VydmV5UXVlc3Rpb25Db21tZW50SXRlbVxuICAgICAgICAgIHF1ZXN0aW9uPXt0aGlzLnF1ZXN0aW9ufVxuICAgICAgICAgIG90aGVyQ3NzPXtjc3NDbGFzc2VzLm90aGVyfVxuICAgICAgICAgIGNzc0NsYXNzZXM9e2Nzc0NsYXNzZXN9XG4gICAgICAgICAgaXNEaXNwbGF5TW9kZT17dGhpcy5pc0Rpc3BsYXlNb2RlfVxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25PcHRpb25JdGVtIGV4dGVuZHMgUmVhY3RTdXJ2ZXlFbGVtZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLml0ZW07XG4gIH1cbiAgcHJpdmF0ZSBnZXQgaXRlbSgpOiBJdGVtVmFsdWUge1xuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW07XG4gIH1cbiAgcHJvdGVjdGVkIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLml0ZW07XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8b3B0aW9uIHZhbHVlPXt0aGlzLml0ZW0udmFsdWV9IGRpc2FibGVkPXshdGhpcy5pdGVtLmlzRW5hYmxlZH0+XG4gICAgICAgIHt0aGlzLml0ZW0udGV4dH1cbiAgICAgIDwvb3B0aW9uPlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImRyb3Bkb3duXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbkRyb3Bkb3duLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgSGVscGVycyB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgTG9jYWxpemFibGVTdHJpbmcgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50IH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBJU3VydmV5Q3JlYXRvciB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25cIjtcbmltcG9ydCB7IEJhc2UsIEFycmF5Q2hhbmdlcywgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IFJlYWN0U3VydmV5RWxlbWVudHNXcmFwcGVyIH0gZnJvbSBcIi4vcmVhY3RzdXJ2ZXltb2RlbFwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5RWxlbWVudEJhc2U8UCwgUz4gZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8UCwgUz4ge1xuICBwdWJsaWMgc3RhdGljIHJlbmRlckxvY1N0cmluZyhcbiAgICBsb2NTdHI6IExvY2FsaXphYmxlU3RyaW5nLFxuICAgIHN0eWxlOiBhbnkgPSBudWxsLFxuICAgIGtleT86IHN0cmluZ1xuICApOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChsb2NTdHIucmVuZGVyQXMsIHtcbiAgICAgIGxvY1N0cjogbG9jU3RyLnJlbmRlckFzRGF0YSxcbiAgICAgIHN0eWxlOiBzdHlsZSxcbiAgICAgIGtleToga2V5LFxuICAgIH0pO1xuICB9XG4gIHByaXZhdGUgY2hhbmdlZFN0YXRlUHJvcE5hbWVWYWx1ZTogc3RyaW5nO1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHRoaXMubWFrZUJhc2VFbGVtZW50c1JlYWN0KCk7XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgdGhpcy51bk1ha2VCYXNlRWxlbWVudHNSZWFjdCgpO1xuICB9XG4gIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHM6IGFueSwgcHJldlN0YXRlOiBhbnkpIHtcbiAgICB0aGlzLm1ha2VCYXNlRWxlbWVudHNSZWFjdCgpO1xuICB9XG4gIHByaXZhdGUgX2FsbG93Q29tcG9uZW50VXBkYXRlID0gdHJ1ZTtcbiAgcHJvdGVjdGVkIGFsbG93Q29tcG9uZW50VXBkYXRlKCkge1xuICAgIHRoaXMuX2FsbG93Q29tcG9uZW50VXBkYXRlID0gdHJ1ZTtcbiAgICB0aGlzLmZvcmNlVXBkYXRlKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGRlbnlDb21wb25lbnRVcGRhdGUoKSB7XG4gICAgdGhpcy5fYWxsb3dDb21wb25lbnRVcGRhdGUgPSBmYWxzZTtcbiAgfVxuICBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzOmFueSwgbmV4dFN0YXRlOmFueSk6Ym9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2FsbG93Q29tcG9uZW50VXBkYXRlO1xuICB9XG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLmNhblJlbmRlcigpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLnN0YXJ0RW5kUmVuZGVyaW5nKDEpO1xuICAgIHZhciByZXMgPSB0aGlzLnJlbmRlckVsZW1lbnQoKTtcbiAgICB0aGlzLnN0YXJ0RW5kUmVuZGVyaW5nKC0xKTtcblxuICAgIHJlcyA9IHRoaXMud3JhcEVsZW1lbnQocmVzKTtcblxuICAgIHRoaXMuY2hhbmdlZFN0YXRlUHJvcE5hbWVWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHByb3RlY3RlZCB3cmFwRWxlbWVudChlbGVtZW50OiBKU1guRWxlbWVudCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGlzUmVuZGVyaW5nKCk6IGJvb2xlYW4ge1xuICAgIHZhciBzdGF0ZUVsOiBhbnkgPSB0aGlzLmdldFN0YXRlRWxlbWVudCgpO1xuICAgIHJldHVybiAhIXN0YXRlRWwgJiYgc3RhdGVFbC5yZWFjdFJlbmRlcmluZyA+IDA7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFJlbmRlcmVkRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdGF0ZUVsZW1lbnQoKTtcbiAgfVxuICBwcml2YXRlIHN0YXJ0RW5kUmVuZGVyaW5nKHZhbDogbnVtYmVyKSB7XG4gICAgdmFyIHN0YXRlRWw6IGFueSA9IHRoaXMuZ2V0UmVuZGVyZWRFbGVtZW50KCk7XG4gICAgaWYgKCEhc3RhdGVFbCkge1xuICAgICAgaWYgKCFzdGF0ZUVsLnJlYWN0UmVuZGVyaW5nKSBzdGF0ZUVsLnJlYWN0UmVuZGVyaW5nID0gMDtcbiAgICAgIHN0YXRlRWwucmVhY3RSZW5kZXJpbmcgKz0gdmFsO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGNoYW5nZWRTdGF0ZVByb3BOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY2hhbmdlZFN0YXRlUHJvcE5hbWVWYWx1ZTtcbiAgfVxuICBwcml2YXRlIG1ha2VCYXNlRWxlbWVudHNSZWFjdCgpIHtcbiAgICB2YXIgZWxzID0gdGhpcy5nZXRTdGF0ZUVsZW1lbnRzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMubWFrZUJhc2VFbGVtZW50UmVhY3QoZWxzW2ldKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSB1bk1ha2VCYXNlRWxlbWVudHNSZWFjdCgpIHtcbiAgICB2YXIgZWxzID0gdGhpcy5nZXRTdGF0ZUVsZW1lbnRzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMudW5NYWtlQmFzZUVsZW1lbnRSZWFjdChlbHNbaV0pO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50cygpOiBBcnJheTxCYXNlPiB7XG4gICAgdmFyIGVsID0gdGhpcy5nZXRTdGF0ZUVsZW1lbnQoKTtcbiAgICByZXR1cm4gISFlbCA/IFtlbF0gOiBbXTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgaXNEaXNwbGF5TW9kZSgpOiBib29sZWFuIHtcbiAgICBjb25zdCBwcm9wczogYW55ID0gdGhpcy5wcm9wcztcbiAgICByZXR1cm4gcHJvcHMuaXNEaXNwbGF5TW9kZSB8fCBmYWxzZTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyTG9jU3RyaW5nKFxuICAgIGxvY1N0cjogTG9jYWxpemFibGVTdHJpbmcsXG4gICAgc3R5bGU6IGFueSA9IG51bGxcbiAgKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiBTdXJ2ZXlFbGVtZW50QmFzZS5yZW5kZXJMb2NTdHJpbmcobG9jU3RyLCBzdHlsZSk7XG4gIH1cbiAgcHJpdmF0ZSBtYWtlQmFzZUVsZW1lbnRSZWFjdChzdGF0ZUVsZW1lbnQ6IEJhc2UpIHtcbiAgICBpZiAoIXN0YXRlRWxlbWVudCkgcmV0dXJuO1xuICAgIHN0YXRlRWxlbWVudC5pdGVyYXRlUHJvcGVydGllc0hhc2goKGhhc2gsIGtleSkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmNhblVzZVByb3BJblN0YXRlKGtleSkpIHJldHVybjtcbiAgICAgIHZhciB2YWw6IGFueSA9IGhhc2hba2V5XTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgICAgdmFyIHZhbDogYW55ID0gdmFsO1xuICAgICAgICB2YWxbXCJvbkFycmF5Q2hhbmdlZFwiXSA9IChhcnJheUNoYW5nZXM6IEFycmF5Q2hhbmdlcykgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLmlzUmVuZGVyaW5nKSByZXR1cm47XG4gICAgICAgICAgdGhpcy5jaGFuZ2VkU3RhdGVQcm9wTmFtZVZhbHVlID0ga2V5O1xuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoKHN0YXRlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHZhciBuZXdTdGF0ZTogeyBbaW5kZXg6IHN0cmluZ106IGFueSB9ID0ge307XG4gICAgICAgICAgICBuZXdTdGF0ZVtrZXldID0gdmFsO1xuICAgICAgICAgICAgcmV0dXJuIG5ld1N0YXRlIGFzIFM7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSk7XG4gICAgc3RhdGVFbGVtZW50LnNldFByb3BlcnR5VmFsdWVDb3JlSGFuZGxlciA9IChcbiAgICAgIGhhc2g6IGFueSxcbiAgICAgIGtleTogc3RyaW5nLFxuICAgICAgdmFsOiBhbnlcbiAgICApID0+IHtcbiAgICAgIGlmIChoYXNoW2tleV0gIT09IHZhbCkge1xuICAgICAgICBoYXNoW2tleV0gPSB2YWw7XG4gICAgICAgIGlmICghdGhpcy5jYW5Vc2VQcm9wSW5TdGF0ZShrZXkpKSByZXR1cm47XG4gICAgICAgIGlmICh0aGlzLmlzUmVuZGVyaW5nKSByZXR1cm47XG4gICAgICAgIHRoaXMuY2hhbmdlZFN0YXRlUHJvcE5hbWVWYWx1ZSA9IGtleTtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSgoc3RhdGU6IGFueSkgPT4ge1xuICAgICAgICAgIHZhciBuZXdTdGF0ZTogeyBbaW5kZXg6IHN0cmluZ106IGFueSB9ID0ge307XG4gICAgICAgICAgbmV3U3RhdGVba2V5XSA9IHZhbDtcbiAgICAgICAgICByZXR1cm4gbmV3U3RhdGUgYXMgUztcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuICBwcm90ZWN0ZWQgY2FuVXNlUHJvcEluU3RhdGUoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwcml2YXRlIHVuTWFrZUJhc2VFbGVtZW50UmVhY3Qoc3RhdGVFbGVtZW50OiBCYXNlKSB7XG4gICAgaWYgKCFzdGF0ZUVsZW1lbnQpIHJldHVybjtcbiAgICBzdGF0ZUVsZW1lbnQuc2V0UHJvcGVydHlWYWx1ZUNvcmVIYW5kbGVyID0gdW5kZWZpbmVkO1xuICAgIHN0YXRlRWxlbWVudC5pdGVyYXRlUHJvcGVydGllc0hhc2goKGhhc2gsIGtleSkgPT4ge1xuICAgICAgdmFyIHZhbDogYW55ID0gaGFzaFtrZXldO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgICB2YXIgdmFsOiBhbnkgPSB2YWw7XG4gICAgICAgIHZhbFtcIm9uQXJyYXlDaGFuZ2VkXCJdID0gKCkgPT4ge307XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJlYWN0U3VydmV5RWxlbWVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPGFueSwgYW55PiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBjc3NDbGFzc2VzKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3NzQ2xhc3NlcztcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPGFueSwgYW55PiB7XG4gIGNvbnRyb2w6IEhUTUxFbGVtZW50O1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHM6IGFueSwgcHJldlN0YXRlOiBhbnkpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUpO1xuICAgIHRoaXMudXBkYXRlRG9tRWxlbWVudCgpO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgdGhpcy51cGRhdGVEb21FbGVtZW50KCk7XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICBpZiAoISF0aGlzLnF1ZXN0aW9uQmFzZSkge1xuICAgICAgdGhpcy5xdWVzdGlvbkJhc2UuYmVmb3JlRGVzdHJveVF1ZXN0aW9uRWxlbWVudCh0aGlzLmNvbnRyb2wpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgdXBkYXRlRG9tRWxlbWVudCgpIHtcbiAgICBjb25zdCBlbDogSFRNTEVsZW1lbnQgPSB0aGlzLmNvbnRyb2w7XG4gICAgaWYgKCEhZWwpIHtcbiAgICAgIGlmIChlbC5nZXRBdHRyaWJ1dGUoXCJkYXRhLXJlbmRlcmVkXCIpICE9PSBcInJcIikge1xuICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoXCJkYXRhLXJlbmRlcmVkXCIsIFwiclwiKTtcbiAgICAgICAgdGhpcy5xdWVzdGlvbkJhc2UuYWZ0ZXJSZW5kZXJRdWVzdGlvbkVsZW1lbnQoZWwpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uQmFzZSgpOiBRdWVzdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMucXVlc3Rpb247XG4gIH1cbiAgcHJvdGVjdGVkIGdldFJlbmRlcmVkRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2U7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBjcmVhdG9yKCk6IElTdXJ2ZXlDcmVhdG9yIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jcmVhdG9yO1xuICB9XG4gIHByb3RlY3RlZCBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5xdWVzdGlvbkJhc2UgJiYgISF0aGlzLmNyZWF0b3I7XG4gIH1cbiAgcHVibGljIHNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHM6IGFueSwgbmV4dFN0YXRlOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoIXN1cGVyLnNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHMsIG5leHRTdGF0ZSkpIHJldHVybiBmYWxzZTtcblxuICAgIHJldHVybiAoXG4gICAgICAhdGhpcy5xdWVzdGlvbkJhc2UuY3VzdG9tV2lkZ2V0IHx8XG4gICAgICAhIXRoaXMucXVlc3Rpb25CYXNlLmN1c3RvbVdpZGdldERhdGEuaXNOZWVkUmVuZGVyIHx8XG4gICAgICAhIXRoaXMucXVlc3Rpb25CYXNlLmN1c3RvbVdpZGdldC53aWRnZXRKc29uLmlzRGVmYXVsdFJlbmRlciB8fFxuICAgICAgISF0aGlzLnF1ZXN0aW9uQmFzZS5jdXN0b21XaWRnZXQud2lkZ2V0SnNvbi5yZW5kZXJcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgaXNEaXNwbGF5TW9kZSgpOiBib29sZWFuIHtcbiAgICBjb25zdCBwcm9wczogYW55ID0gdGhpcy5wcm9wcztcbiAgICByZXR1cm4gKFxuICAgICAgcHJvcHMuaXNEaXNwbGF5TW9kZSB8fFxuICAgICAgKCEhdGhpcy5xdWVzdGlvbkJhc2UgJiYgdGhpcy5xdWVzdGlvbkJhc2UuaXNJbnB1dFJlYWRPbmx5KSB8fCBmYWxzZVxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHdyYXBDZWxsKFxuICAgIGNlbGw6IGFueSxcbiAgICBlbGVtZW50OiBKU1guRWxlbWVudCxcbiAgICByZWFzb246IHN0cmluZ1xuICApOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCFyZWFzb24pIHtcbiAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH1cbiAgICBjb25zdCBzdXJ2ZXk6IFN1cnZleU1vZGVsID0gdGhpcy5xdWVzdGlvbkJhc2VcbiAgICAgIC5zdXJ2ZXkgYXMgU3VydmV5TW9kZWw7XG4gICAgbGV0IHdyYXBwZXI6IEpTWC5FbGVtZW50O1xuICAgIGlmIChzdXJ2ZXkpIHtcbiAgICAgIHdyYXBwZXIgPSBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlci53cmFwTWF0cml4Q2VsbChzdXJ2ZXksIGVsZW1lbnQsIGNlbGwsIHJlYXNvbik7XG4gICAgfVxuICAgIHJldHVybiB3cmFwcGVyID8/IGVsZW1lbnQ7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uVW5jb250cm9sbGVkRWxlbWVudDxcbiAgVCBleHRlbmRzIFF1ZXN0aW9uXG4+IGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy51cGRhdGVWYWx1ZU9uRXZlbnQgPSB0aGlzLnVwZGF0ZVZhbHVlT25FdmVudC5iaW5kKHRoaXMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogVCB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFQ7XG4gIH1cbiAgdXBkYXRlVmFsdWVPbkV2ZW50ID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICBpZiAoXG4gICAgICAhSGVscGVycy5pc1R3b1ZhbHVlRXF1YWxzKHRoaXMucXVlc3Rpb25CYXNlLnZhbHVlLCBldmVudC50YXJnZXQudmFsdWUpXG4gICAgKSB7XG4gICAgICB0aGlzLnNldFZhbHVlQ29yZShldmVudC50YXJnZXQudmFsdWUpO1xuICAgIH1cbiAgfTtcbiAgcHJvdGVjdGVkIHNldFZhbHVlQ29yZShuZXdWYWx1ZTogYW55KSB7XG4gICAgdGhpcy5xdWVzdGlvbkJhc2UudmFsdWUgPSBuZXdWYWx1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0VmFsdWVDb3JlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlLnZhbHVlO1xuICB9XG4gIHByb3RlY3RlZCB1cGRhdGVEb21FbGVtZW50KCkge1xuICAgIGlmICghIXRoaXMuY29udHJvbCkge1xuICAgICAgY29uc3QgY29udHJvbDogYW55ID0gdGhpcy5jb250cm9sO1xuICAgICAgY29uc3QgbmV3VmFsdWUgPSB0aGlzLmdldFZhbHVlQ29yZSgpO1xuICAgICAgaWYgKCFIZWxwZXJzLmlzVHdvVmFsdWVFcXVhbHMobmV3VmFsdWUsIGNvbnRyb2wudmFsdWUpKSB7XG4gICAgICAgIGNvbnRyb2wudmFsdWUgPSB0aGlzLmdldFZhbHVlKG5ld1ZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgc3VwZXIudXBkYXRlRG9tRWxlbWVudCgpO1xuICB9XG4gIHByaXZhdGUgZ2V0VmFsdWUodmFsOiBhbnkpOiBhbnkge1xuICAgIGlmIChIZWxwZXJzLmlzVmFsdWVFbXB0eSh2YWwpKSByZXR1cm4gXCJcIjtcbiAgICByZXR1cm4gdmFsO1xuICB9XG59XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFF1ZXN0aW9uRW1wdHlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uRW1wdHkgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN0YXRlID0geyB2YWx1ZTogdGhpcy5xdWVzdGlvbi52YWx1ZSB9O1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25FbXB0eU1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25FbXB0eU1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gPGRpdiAvPjtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiZW1wdHlcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uRW1wdHksIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBRdWVzdGlvbkV4cHJlc3Npb25Nb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uRXhwcmVzc2lvbiBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Uge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25FeHByZXNzaW9uTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBRdWVzdGlvbkV4cHJlc3Npb25Nb2RlbDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGNzc0NsYXNzZXMgPSB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgaWQ9e3RoaXMucXVlc3Rpb24uaW5wdXRJZH1cbiAgICAgICAgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLnJvb3R9XG4gICAgICAgIHJlZj17KGRpdikgPT4gKHRoaXMuY29udHJvbCA9IGRpdil9XG4gICAgICA+XG4gICAgICAgIHt0aGlzLnF1ZXN0aW9uLmZvcm1hdGVkVmFsdWV9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJleHByZXNzaW9uXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbkV4cHJlc3Npb24sIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0IHsgSGFzaFRhYmxlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbmV4cG9ydCBjbGFzcyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB7XG4gIHB1YmxpYyBzdGF0aWMgSW5zdGFuY2U6IFJlYWN0UXVlc3Rpb25GYWN0b3J5ID0gbmV3IFJlYWN0UXVlc3Rpb25GYWN0b3J5KCk7XG4gIHByaXZhdGUgY3JlYXRvckhhc2g6IEhhc2hUYWJsZTwobmFtZTogc3RyaW5nKSA9PiBKU1guRWxlbWVudD4gPSB7fTtcblxuICBwdWJsaWMgcmVnaXN0ZXJRdWVzdGlvbihcbiAgICBxdWVzdGlvblR5cGU6IHN0cmluZyxcbiAgICBxdWVzdGlvbkNyZWF0b3I6IChuYW1lOiBzdHJpbmcpID0+IEpTWC5FbGVtZW50XG4gICkge1xuICAgIHRoaXMuY3JlYXRvckhhc2hbcXVlc3Rpb25UeXBlXSA9IHF1ZXN0aW9uQ3JlYXRvcjtcbiAgfVxuICBwdWJsaWMgZ2V0QWxsVHlwZXMoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG4gICAgZm9yICh2YXIga2V5IGluIHRoaXMuY3JlYXRvckhhc2gpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQuc29ydCgpO1xuICB9XG4gIHB1YmxpYyBjcmVhdGVRdWVzdGlvbihxdWVzdGlvblR5cGU6IHN0cmluZywgcGFyYW1zOiBhbnkpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGNyZWF0b3IgPSB0aGlzLmNyZWF0b3JIYXNoW3F1ZXN0aW9uVHlwZV07XG4gICAgaWYgKGNyZWF0b3IgPT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIGNyZWF0b3IocGFyYW1zKTtcbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvbkZpbGVNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5QWN0aW9uQmFyIH0gZnJvbSBcIi4vY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXJcIjtcbmltcG9ydCB7IFN2Z0ljb24gfSBmcm9tIFwiLi9jb21wb25lbnRzL3N2Zy1pY29uL3N2Zy1pY29uXCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25GaWxlIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbkZpbGVNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFF1ZXN0aW9uRmlsZU1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgcHJldmlldyA9IHRoaXMucmVuZGVyUHJldmlldygpO1xuICAgIHZhciBmaWxlSW5wdXQgPSBudWxsO1xuICAgIHZhciBmaWxlRGVjb3JhdG9yID0gdGhpcy5yZW5kZXJGaWxlRGVjb3JhdG9yKCk7XG4gICAgdmFyIGNsZWFyQnV0dG9uID0gdGhpcy5yZW5kZXJDbGVhckJ1dHRvbihcbiAgICAgIHRoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yZW1vdmVCdXR0b25cbiAgICApO1xuICAgIHZhciBjbGVhckJ1dHRvbkJvdHRvbSA9IHRoaXMucmVuZGVyQ2xlYXJCdXR0b24oXG4gICAgICB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucmVtb3ZlQnV0dG9uQm90dG9tXG4gICAgKTtcblxuICAgIGxldCBtb2JpbGVGaWxlTmF2aWdhdG9yID0gdGhpcy5xdWVzdGlvbi5tb2JpbGVGaWxlTmF2aWdhdG9yVmlzaWJsZT8oPFN1cnZleUFjdGlvbkJhciBtb2RlbCA9IHt0aGlzLnF1ZXN0aW9uLm1vYmlsZUZpbGVOYXZpZ2F0b3J9PjwvU3VydmV5QWN0aW9uQmFyPik6bnVsbDtcbiAgICBmaWxlSW5wdXQgPSAoXG4gICAgICB0aGlzLmlzRGlzcGxheU1vZGUgP1xuICAgICAgICA8aW5wdXRcbiAgICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgICAgZGlzYWJsZWQ9e3RoaXMuaXNEaXNwbGF5TW9kZX1cbiAgICAgICAgICBjbGFzc05hbWU9eyF0aGlzLmlzRGlzcGxheU1vZGUgPyB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuZmlsZUlucHV0IDogdGhpcy5xdWVzdGlvbi5nZXRSZWFkT25seUZpbGVDc3MoKX1cbiAgICAgICAgICBpZD17dGhpcy5xdWVzdGlvbi5pbnB1dElkfVxuICAgICAgICAgIHJlZj17aW5wdXQgPT4gKHRoaXMuY29udHJvbCA9IGlucHV0KX1cbiAgICAgICAgICBzdHlsZT17IXRoaXMuaXNEaXNwbGF5TW9kZSA/IHt9IDogeyBjb2xvcjogXCJ0cmFuc3BhcmVudFwiIH19XG4gICAgICAgICAgb25DaGFuZ2U9eyF0aGlzLmlzRGlzcGxheU1vZGUgPyB0aGlzLnF1ZXN0aW9uLmRvQ2hhbmdlIDogbnVsbH1cbiAgICAgICAgICBtdWx0aXBsZT17dGhpcy5xdWVzdGlvbi5hbGxvd011bHRpcGxlfVxuICAgICAgICAgIHBsYWNlaG9sZGVyPXt0aGlzLnF1ZXN0aW9uLnRpdGxlfVxuICAgICAgICAgIGFjY2VwdD17dGhpcy5xdWVzdGlvbi5hY2NlcHRlZFR5cGVzfVxuICAgICAgICAvPlxuICAgICAgICA6XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICBkaXNhYmxlZD17dGhpcy5pc0Rpc3BsYXlNb2RlfVxuICAgICAgICAgIGNsYXNzTmFtZT17IXRoaXMuaXNEaXNwbGF5TW9kZSA/IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5maWxlSW5wdXQgOiB0aGlzLnF1ZXN0aW9uLmdldFJlYWRPbmx5RmlsZUNzcygpfVxuICAgICAgICAgIGlkPXt0aGlzLnF1ZXN0aW9uLmlucHV0SWR9XG4gICAgICAgICAgcmVmPXtpbnB1dCA9PiAodGhpcy5jb250cm9sID0gaW5wdXQpfVxuICAgICAgICAgIHN0eWxlPXshdGhpcy5pc0Rpc3BsYXlNb2RlID8ge30gOiB7IGNvbG9yOiBcInRyYW5zcGFyZW50XCIgfX1cbiAgICAgICAgICBvbkNoYW5nZT17IXRoaXMuaXNEaXNwbGF5TW9kZSA/IHRoaXMucXVlc3Rpb24uZG9DaGFuZ2UgOiBudWxsfVxuICAgICAgICAgIGFyaWEtcmVxdWlyZWQ9e3RoaXMucXVlc3Rpb24uYXJpYVJlcXVpcmVkfVxuICAgICAgICAgIGFyaWEtbGFiZWw9e3RoaXMucXVlc3Rpb24uYXJpYUxhYmVsfVxuICAgICAgICAgIGFyaWEtaW52YWxpZD17dGhpcy5xdWVzdGlvbi5hcmlhSW52YWxpZH1cbiAgICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PXt0aGlzLnF1ZXN0aW9uLmFyaWFEZXNjcmliZWRCeX1cbiAgICAgICAgICBtdWx0aXBsZT17dGhpcy5xdWVzdGlvbi5hbGxvd011bHRpcGxlfVxuICAgICAgICAgIHRpdGxlPXt0aGlzLnF1ZXN0aW9uLmlucHV0VGl0bGV9XG4gICAgICAgICAgYWNjZXB0PXt0aGlzLnF1ZXN0aW9uLmFjY2VwdGVkVHlwZXN9XG4gICAgICAgIC8+XG4gICAgKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZmlsZVJvb3RDc3N9PlxuICAgICAgICB7ZmlsZUlucHV0fVxuICAgICAgICB7ZmlsZURlY29yYXRvcn1cbiAgICAgICAge2NsZWFyQnV0dG9ufVxuICAgICAgICB7cHJldmlld31cbiAgICAgICAge2NsZWFyQnV0dG9uQm90dG9tfVxuICAgICAgICB7bW9iaWxlRmlsZU5hdmlnYXRvcn1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckZpbGVEZWNvcmF0b3IoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHF1ZXN0aW9uQ3NzID0gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIGxldCBub0ZpbGVDaG9zZW4gPSBudWxsO1xuICAgIGxldCBjaG9vc2VGaWxlID0gbnVsbDtcbiAgICBjaG9vc2VGaWxlID0gKFxuICAgICAgPGxhYmVsXG4gICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0Q2hvb3NlRmlsZUNzcygpfVxuICAgICAgICBodG1sRm9yPXt0aGlzLnF1ZXN0aW9uLmlucHV0SWR9XG4gICAgICAgIGFyaWEtbGFiZWw9e3RoaXMucXVlc3Rpb24uY2hvb3NlQnV0dG9uQ2FwdGlvbn1cbiAgICAgID5cbiAgICAgICAgPHNwYW4+e3RoaXMucXVlc3Rpb24uY2hvb3NlQnV0dG9uQ2FwdGlvbn08L3NwYW4+XG4gICAgICAgIHsoISF0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuY2hvb3NlRmlsZUljb25JZCkgPyA8U3ZnSWNvbiBpY29uTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmNob29zZUZpbGVJY29uSWR9IHNpemU9e1wiYXV0b1wifT48L1N2Z0ljb24+OiBudWxsIH1cbiAgICAgIDwvbGFiZWw+XG4gICAgKTtcbiAgICBpZiAodGhpcy5xdWVzdGlvbi5pc0VtcHR5KCkpIHtcbiAgICAgIG5vRmlsZUNob3NlbiA9IChcbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMubm9GaWxlQ2hvc2VufT5cbiAgICAgICAgICB7dGhpcy5xdWVzdGlvbi5ub0ZpbGVDaG9zZW5DYXB0aW9ufVxuICAgICAgICA8L3NwYW4+XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0RmlsZURlY29yYXRvckNzcygpfVxuICAgICAgICBvbkRyb3A9e3RoaXMucXVlc3Rpb24ub25Ecm9wfVxuICAgICAgICBvbkRyYWdPdmVyPXt0aGlzLnF1ZXN0aW9uLm9uRHJhZ092ZXJ9XG4gICAgICAgIG9uRHJhZ0xlYXZlPXt0aGlzLnF1ZXN0aW9uLm9uRHJhZ0xlYXZlfVxuICAgICAgPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5kcmFnQXJlYVBsYWNlaG9sZGVyfT57dGhpcy5xdWVzdGlvbi5kcmFnQXJlYVBsYWNlaG9sZGVyfTwvc3Bhbj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy53cmFwcGVyfT5cbiAgICAgICAgICB7Y2hvb3NlRmlsZX1cbiAgICAgICAgICB7bm9GaWxlQ2hvc2VufVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckNsZWFyQnV0dG9uKGNsYXNzTmFtZTogc3RyaW5nKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAhdGhpcy5xdWVzdGlvbi5pc0VtcHR5KCkgJiYgIXRoaXMuaXNEaXNwbGF5TW9kZSAmJiAhIWNsYXNzTmFtZT8gKFxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17dGhpcy5xdWVzdGlvbi5kb0NsZWFufSBjbGFzc05hbWU9e2NsYXNzTmFtZX0+XG4gICAgICAgIDxzcGFuPnt0aGlzLnF1ZXN0aW9uLmNsZWFuQnV0dG9uQ2FwdGlvbn08L3NwYW4+XG4gICAgICAgIHsoISF0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucmVtb3ZlQnV0dG9uSWNvbklkKSA/IDxTdmdJY29uIGljb25OYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucmVtb3ZlQnV0dG9uSWNvbklkfSBzaXplPXtcImF1dG9cIn0+PC9TdmdJY29uPjogbnVsbCB9XG4gICAgICA8L2J1dHRvbj5cbiAgICApIDogbnVsbDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRmlsZVNpZ24oY2xhc3NOYW1lOiBzdHJpbmcsIHZhbDogYW55KTogSlNYLkVsZW1lbnQge1xuICAgIGlmKCFjbGFzc05hbWUgfHwgIXZhbC5uYW1lKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZX0+XG4gICAgICAgIDxhXG4gICAgICAgICAgaHJlZj17dmFsLmNvbnRlbnR9XG4gICAgICAgICAgb25DbGljaz17ZXZlbnQgPT4ge1xuICAgICAgICAgICAgdGhpcy5xdWVzdGlvbi5kb0Rvd25sb2FkRmlsZShldmVudCwgdmFsKTtcbiAgICAgICAgICB9fVxuICAgICAgICAgIHRpdGxlPXt2YWwubmFtZX1cbiAgICAgICAgICBkb3dubG9hZD17dmFsLm5hbWV9XG4gICAgICAgICAgc3R5bGU9e3sgd2lkdGg6IHRoaXMucXVlc3Rpb24uaW1hZ2VXaWR0aCArIFwicHhcIiB9fVxuICAgICAgICA+XG4gICAgICAgICAge3ZhbC5uYW1lfVxuICAgICAgICA8L2E+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJQcmV2aWV3KCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMucXVlc3Rpb24ucHJldmlld1ZhbHVlIHx8ICF0aGlzLnF1ZXN0aW9uLnByZXZpZXdWYWx1ZS5sZW5ndGgpIHJldHVybiBudWxsO1xuICAgIHZhciBwcmV2aWV3cyA9IHRoaXMucXVlc3Rpb24ucHJldmlld1ZhbHVlLm1hcCgodmFsLCBpbmRleCkgPT4ge1xuICAgICAgaWYgKCF2YWwpIHJldHVybiBudWxsO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBrZXk9e3RoaXMucXVlc3Rpb24uaW5wdXRJZCArIFwiX1wiICsgaW5kZXh9XG4gICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucHJldmlld31cbiAgICAgICAgICBzdHlsZT17eyBkaXNwbGF5OiB0aGlzLnF1ZXN0aW9uLmlzUHJldmlld1Zpc2libGUoaW5kZXgpID8gdW5kZWZpbmVkIDogXCJub25lXCIgfX1cbiAgICAgICAgPlxuICAgICAgICAgIHt0aGlzLnJlbmRlckZpbGVTaWduKHRoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5maWxlU2lnbiwgdmFsKX1cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmltYWdlV3JhcHBlcn0+XG4gICAgICAgICAgICB7dGhpcy5xdWVzdGlvbi5jYW5QcmV2aWV3SW1hZ2UodmFsKSA/IChcbiAgICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgIHNyYz17dmFsLmNvbnRlbnR9XG4gICAgICAgICAgICAgICAgaGVpZ2h0PXt0aGlzLnF1ZXN0aW9uLmltYWdlSGVpZ2h0fVxuICAgICAgICAgICAgICAgIHdpZHRoPXt0aGlzLnF1ZXN0aW9uLmltYWdlV2lkdGh9XG4gICAgICAgICAgICAgICAgYWx0PVwiRmlsZSBwcmV2aWV3XCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkgOiAodGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmRlZmF1bHRJbWFnZT8oXG4gICAgICAgICAgICAgIDxTdmdJY29uIGljb25OYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuZGVmYXVsdEltYWdlSWNvbklkfSBzaXplPXtcImF1dG9cIn0gY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuZGVmYXVsdEltYWdlfT48L1N2Z0ljb24+XG4gICAgICAgICAgICApOm51bGwpfVxuICAgICAgICAgICAge3ZhbC5uYW1lICYmICF0aGlzLnF1ZXN0aW9uLmlzUmVhZE9ubHkgPyAoXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucmVtb3ZlRmlsZUJ1dHRvbn0gb25DbGljaz17KCkgPT4gdGhpcy5xdWVzdGlvbi5kb1JlbW92ZUZpbGUodmFsKX0+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnJlbW92ZUZpbGV9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3RoaXMucXVlc3Rpb24ucmVtb3ZlRmlsZUNhcHRpb259XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIHsodGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnJlbW92ZUZpbGVTdmdJY29uSWQpID9cbiAgICAgICAgICAgICAgICAgICg8U3ZnSWNvbiBpY29uTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnJlbW92ZUZpbGVTdmdJY29uSWR9IHNpemU9e1wiYXV0b1wifSBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yZW1vdmVGaWxlU3ZnfT48L1N2Z0ljb24+KTogbnVsbCB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAge3RoaXMucmVuZGVyRmlsZVNpZ24odGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmZpbGVTaWduQm90dG9tLCB2YWwpfVxuICAgICAgICA8L3NwYW4+XG4gICAgICApO1xuICAgIH0pO1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmZpbGVMaXN0IHx8IHVuZGVmaW5lZH0+e3ByZXZpZXdzfTwvZGl2PjtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiZmlsZVwiLCBwcm9wcyA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uRmlsZSwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFF1ZXN0aW9uSHRtbE1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25IdG1sIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbkh0bWxNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFF1ZXN0aW9uSHRtbE1vZGVsO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHRoaXMucmVhY3RPblN0ckNoYW5nZWQoKTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLnF1ZXN0aW9uLmxvY0h0bWwub25DaGFuZ2VkID0gZnVuY3Rpb24gKCkge307XG4gIH1cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogYW55LCBwcmV2U3RhdGU6IGFueSkge1xuICAgIHRoaXMucmVhY3RPblN0ckNoYW5nZWQoKTtcbiAgfVxuICBwcml2YXRlIHJlYWN0T25TdHJDaGFuZ2VkKCkge1xuICAgIHRoaXMucXVlc3Rpb24ubG9jSHRtbC5vbkNoYW5nZWQgPSAoKSA9PiB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgY2hhbmdlZDogISF0aGlzLnN0YXRlICYmIHRoaXMuc3RhdGUuY2hhbmdlZCA/IHRoaXMuc3RhdGUuY2hhbmdlZCArIDEgOiAxIH0pO1xuICAgIH07XG4gIH1cbiAgcHJvdGVjdGVkIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gc3VwZXIuY2FuUmVuZGVyKCkgJiYgISF0aGlzLnF1ZXN0aW9uLmh0bWw7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBodG1sVmFsdWUgPSB7IF9faHRtbDogdGhpcy5xdWVzdGlvbi5sb2NIdG1sLnJlbmRlcmVkSHRtbCB9O1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5yZW5kZXJDc3NSb290fVxuICAgICAgICBkYW5nZXJvdXNseVNldElubmVySFRNTD17aHRtbFZhbHVlfVxuICAgICAgLz5cbiAgICApO1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJodG1sXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbkh0bWwsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge1xuICBSZWFjdFN1cnZleUVsZW1lbnQsXG4gIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UsXG59IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25NYXRyaXhNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgTWF0cml4Um93TW9kZWwsIFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuaW1wb3J0IHsgSGVscGVycyB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIgfSBmcm9tIFwiLi9yZWFjdHN1cnZleW1vZGVsXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbk1hdHJpeCBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Uge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3RhdGUgPSB7IHJvd3NDaGFuZ2VkOiAwIH07XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbk1hdHJpeE1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25NYXRyaXhNb2RlbDtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uKSB7XG4gICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICB0aGlzLnF1ZXN0aW9uLnZpc2libGVSb3dzQ2hhbmdlZENhbGxiYWNrID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHNlbGYuc2V0U3RhdGUoeyByb3dzQ2hhbmdlZDogc2VsZi5zdGF0ZS5yb3dzQ2hhbmdlZCArIDEgfSk7XG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uKSB7XG4gICAgICB0aGlzLnF1ZXN0aW9uLnZpc2libGVSb3dzQ2hhbmdlZENhbGxiYWNrID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGNzc0NsYXNzZXMgPSB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgdmFyIHJvd3NUSCA9IHRoaXMucXVlc3Rpb24uaGFzUm93cyA/IDx0ZCAvPiA6IG51bGw7XG4gICAgdmFyIGhlYWRlcnMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucXVlc3Rpb24udmlzaWJsZUNvbHVtbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjb2x1bW4gPSB0aGlzLnF1ZXN0aW9uLnZpc2libGVDb2x1bW5zW2ldO1xuICAgICAgdmFyIGtleSA9IFwiY29sdW1uXCIgKyBpO1xuICAgICAgdmFyIGNvbHVtVGV4dCA9IHRoaXMucmVuZGVyTG9jU3RyaW5nKGNvbHVtbi5sb2NUZXh0KTtcbiAgICAgIGhlYWRlcnMucHVzaChcbiAgICAgICAgPHRoIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmhlYWRlckNlbGx9IGtleT17a2V5fT5cbiAgICAgICAgICB7dGhpcy53cmFwQ2VsbCh7IGNvbHVtbjogY29sdW1uIH0sIGNvbHVtVGV4dCwgXCJjb2x1bW4taGVhZGVyXCIpfVxuICAgICAgICA8L3RoPlxuICAgICAgKTtcbiAgICB9XG4gICAgdmFyIHJvd3MgPSBbXTtcbiAgICB2YXIgdmlzaWJsZVJvd3MgPSB0aGlzLnF1ZXN0aW9uLnZpc2libGVSb3dzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmlzaWJsZVJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciByb3cgPSB2aXNpYmxlUm93c1tpXTtcbiAgICAgIHZhciBrZXkgPSBcInJvdy1cIiArIHJvdy5uYW1lICsgXCItXCIgKyBpO1xuICAgICAgcm93cy5wdXNoKFxuICAgICAgICA8U3VydmV5UXVlc3Rpb25NYXRyaXhSb3dcbiAgICAgICAgICBrZXk9e2tleX1cbiAgICAgICAgICBxdWVzdGlvbj17dGhpcy5xdWVzdGlvbn1cbiAgICAgICAgICBjc3NDbGFzc2VzPXtjc3NDbGFzc2VzfVxuICAgICAgICAgIGlzRGlzcGxheU1vZGU9e3RoaXMuaXNEaXNwbGF5TW9kZX1cbiAgICAgICAgICByb3c9e3Jvd31cbiAgICAgICAgICBpc0ZpcnN0PXtpID09IDB9XG4gICAgICAgIC8+XG4gICAgICApO1xuICAgIH1cbiAgICB2YXIgaGVhZGVyID0gIXRoaXMucXVlc3Rpb24uc2hvd0hlYWRlciA/IG51bGwgOiAoXG4gICAgICA8dGhlYWQ+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICB7cm93c1RIfVxuICAgICAgICAgIHtoZWFkZXJzfVxuICAgICAgICA8L3RyPlxuICAgICAgPC90aGVhZD5cbiAgICApO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy50YWJsZVdyYXBwZXJ9XG4gICAgICAgIHJlZj17cm9vdCA9PiAodGhpcy5jb250cm9sID0gcm9vdCl9XG4gICAgICA+XG4gICAgICAgIDxmaWVsZHNldD5cbiAgICAgICAgICA8bGVnZW5kIGFyaWEtbGFiZWw9e3RoaXMucXVlc3Rpb24ubG9jVGl0bGUucmVuZGVyZWRIdG1sfSAvPlxuICAgICAgICAgIDx0YWJsZSBjbGFzc05hbWU9e2Nzc0NsYXNzZXMucm9vdH0+XG4gICAgICAgICAgICB7aGVhZGVyfVxuICAgICAgICAgICAgPHRib2R5Pntyb3dzfTwvdGJvZHk+XG4gICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgPC9maWVsZHNldD5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uTWF0cml4Um93IGV4dGVuZHMgUmVhY3RTdXJ2ZXlFbGVtZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmhhbmRsZU9uQ2hhbmdlID0gdGhpcy5oYW5kbGVPbkNoYW5nZS5iaW5kKHRoaXMpO1xuICB9XG4gIHByaXZhdGUgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uTWF0cml4TW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnF1ZXN0aW9uO1xuICB9XG4gIHByaXZhdGUgZ2V0IHJvdygpOiBNYXRyaXhSb3dNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMucm93O1xuICB9XG4gIGhhbmRsZU9uQ2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnJvdy52YWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IHRoaXMucm93LnZhbHVlIH0pO1xuICB9XG4gIHByb3RlY3RlZCB3cmFwQ2VsbChjZWxsOiBhbnksIGVsZW1lbnQ6IEpTWC5FbGVtZW50LCByZWFzb246IHN0cmluZyk6IEpTWC5FbGVtZW50IHtcbiAgICBpZighcmVhc29uKSB7XG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG4gICAgY29uc3Qgc3VydmV5OiBTdXJ2ZXlNb2RlbCA9IHRoaXMucXVlc3Rpb24uc3VydmV5IGFzIFN1cnZleU1vZGVsO1xuICAgIGxldCB3cmFwcGVyOiBKU1guRWxlbWVudDtcbiAgICBpZiAoc3VydmV5KSB7XG4gICAgICB3cmFwcGVyID0gUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIud3JhcE1hdHJpeENlbGwoc3VydmV5LCBlbGVtZW50LCBjZWxsLCByZWFzb24pO1xuICAgIH1cbiAgICByZXR1cm4gd3JhcHBlciA/PyBlbGVtZW50O1xuICB9XG4gIHByb3RlY3RlZCBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5yb3c7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciByb3dzVEQgPSBudWxsO1xuXG4gICAgaWYgKHRoaXMucXVlc3Rpb24uaGFzUm93cykge1xuICAgICAgdmFyIHJvd1RleHQgPSB0aGlzLnJlbmRlckxvY1N0cmluZyh0aGlzLnJvdy5sb2NUZXh0KTtcbiAgICAgIHJvd3NURCA9IDx0ZCBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jZWxsfT5cbiAgICAgICAge3RoaXMud3JhcENlbGwoeyByb3c6IHRoaXMucm93IH0sIHJvd1RleHQsIFwicm93LWhlYWRlclwiKX1cbiAgICAgIDwvdGQ+O1xuICAgIH1cblxuICAgIHZhciB0ZHMgPSB0aGlzLmdlbmVyYXRlVGRzKCk7XG4gICAgcmV0dXJuIChcbiAgICAgIDx0ciBjbGFzc05hbWU9e3RoaXMucm93LnJvd0NsYXNzZXN9PlxuICAgICAgICB7cm93c1REfVxuICAgICAgICB7dGRzfVxuICAgICAgPC90cj5cbiAgICApO1xuICB9XG5cbiAgZ2VuZXJhdGVUZHMoKSB7XG4gICAgdmFyIHRkcyA9IFtdO1xuICAgIHZhciByb3cgPSB0aGlzLnJvdztcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5xdWVzdGlvbi52aXNpYmxlQ29sdW1ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHRkID0gbnVsbDtcbiAgICAgIHZhciBjb2x1bW4gPSB0aGlzLnF1ZXN0aW9uLnZpc2libGVDb2x1bW5zW2ldO1xuICAgICAgdmFyIGtleSA9IFwidmFsdWVcIiArIGk7XG5cbiAgICAgIC8vdmFyIGlzQ2hlY2tlZCA9IEhlbHBlcnMuaXNUd29WYWx1ZUVxdWFscyhyb3cudmFsdWUsIGNvbHVtbi52YWx1ZSk7XG4gICAgICB2YXIgaXNDaGVja2VkID0gcm93LnZhbHVlID09IGNvbHVtbi52YWx1ZTtcbiAgICAgIGxldCBpdGVtQ2xhc3MgPSB0aGlzLnF1ZXN0aW9uLmdldEl0ZW1DbGFzcyhyb3csIGNvbHVtbik7XG4gICAgICB2YXIgaW5wdXRJZCA9IHRoaXMucXVlc3Rpb24uaW5wdXRJZCArIFwiX1wiICsgcm93Lm5hbWUgKyBcIl9cIiArIGk7XG4gICAgICBpZiAodGhpcy5xdWVzdGlvbi5oYXNDZWxsVGV4dCkge1xuICAgICAgICB2YXIgZ2V0SGFuZGxlciA9ICF0aGlzLnF1ZXN0aW9uLmlzSW5wdXRSZWFkT25seVxuICAgICAgICAgID8gKGNvbHVtbjogYW55KSA9PiAoKSA9PiB0aGlzLmNlbGxDbGljayhyb3csIGNvbHVtbilcbiAgICAgICAgICA6IG51bGw7XG4gICAgICAgIHRkID0gKFxuICAgICAgICAgIDx0ZFxuICAgICAgICAgICAga2V5PXtrZXl9XG4gICAgICAgICAgICBjbGFzc05hbWU9e2l0ZW1DbGFzc31cbiAgICAgICAgICAgIG9uQ2xpY2s9e2dldEhhbmRsZXIgPyBnZXRIYW5kbGVyKGNvbHVtbikgOiBudWxsfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt0aGlzLnJlbmRlckxvY1N0cmluZyhcbiAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbi5nZXRDZWxsRGlzcGxheUxvY1RleHQocm93Lm5hbWUsIGNvbHVtbilcbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRkID0gKFxuICAgICAgICAgIDx0ZFxuICAgICAgICAgICAga2V5PXtrZXl9XG4gICAgICAgICAgICBkYXRhLXJlc3BvbnNpdmUtdGl0bGU9e2NvbHVtbi5sb2NUZXh0LnJlbmRlcmVkSHRtbH1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmNlbGx9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT17aXRlbUNsYXNzfT5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgaWQ9e2lucHV0SWR9XG4gICAgICAgICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e3RoaXMuY3NzQ2xhc3Nlcy5pdGVtVmFsdWV9XG4gICAgICAgICAgICAgICAgbmFtZT17cm93LmZ1bGxOYW1lfVxuICAgICAgICAgICAgICAgIHZhbHVlPXtjb2x1bW4udmFsdWV9XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3RoaXMuaXNEaXNwbGF5TW9kZX1cbiAgICAgICAgICAgICAgICBjaGVja2VkPXtpc0NoZWNrZWR9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlT25DaGFuZ2V9XG4gICAgICAgICAgICAgICAgYXJpYS1yZXF1aXJlZD17dGhpcy5xdWVzdGlvbi5hcmlhUmVxdWlyZWR9XG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17Y29sdW1uLmxvY1RleHQucmVuZGVyZWRIdG1sfVxuICAgICAgICAgICAgICAgIGFyaWEtaW52YWxpZD17dGhpcy5xdWVzdGlvbi5hcmlhSW52YWxpZH1cbiAgICAgICAgICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PXt0aGlzLnF1ZXN0aW9uLmFyaWFEZXNjcmliZWRCeX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMubWF0ZXJpYWxEZWNvcmF0b3J9PlxuICAgICAgICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLml0ZW1EZWNvcmF0b3J9XG4gICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiLTEyIC0xMiAyNCAyNFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGNpcmNsZSByPVwiNlwiIGN4PVwiMFwiIGN5PVwiMFwiIC8+c1xuICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImNpcmNsZVwiIC8+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImNoZWNrXCIgLz5cbiAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgZGlzcGxheTogXCJub25lXCIgfX0+XG4gICAgICAgICAgICAgICAge3RoaXMucXVlc3Rpb24ubG9jVGl0bGUucmVuZGVyZWRIdG1sfVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICB0ZHMucHVzaCh0ZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRkcztcbiAgfVxuICBjZWxsQ2xpY2socm93OiBhbnksIGNvbHVtbjogYW55KSB7XG4gICAgcm93LnZhbHVlID0gY29sdW1uLnZhbHVlO1xuICAgIHRoaXMuc2V0U3RhdGUoeyB2YWx1ZTogdGhpcy5yb3cudmFsdWUgfSk7XG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcIm1hdHJpeFwiLCBwcm9wcyA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uTWF0cml4LCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25NYXRyaXhEcm9wZG93bkJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX21hdHJpeGRyb3Bkb3duYmFzZVwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uTWF0cml4RHJvcGRvd24gZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbk1hdHJpeERyb3Bkb3duQmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcIm1hdHJpeGRyb3Bkb3duXCIsIHByb3BzID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25NYXRyaXhEcm9wZG93biwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7XG4gIFJlYWN0U3VydmV5RWxlbWVudCxcbiAgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZVxufSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uLCBTdXJ2ZXlRdWVzdGlvbkFuZEVycm9yc0NlbGwgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uXCI7XG5pbXBvcnQge1xuICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLFxuICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3csXG4gIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwsXG4gIEFkYXB0aXZlQWN0aW9uQ29udGFpbmVyLFxuICBRdWVzdGlvblxufSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uQ2hlY2tib3hJdGVtIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9jaGVja2JveFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25SYWRpb0l0ZW0gfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX3JhZGlvZ3JvdXBcIjtcbmltcG9ydCB7IFN1cnZleVBhbmVsIH0gZnJvbSBcIi4vcGFuZWxcIjtcbmltcG9ydCB7IFN1cnZleUFjdGlvbkJhciB9IGZyb20gXCIuL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24tYmFyXCI7XG5pbXBvcnQgeyBNYXRyaXhSb3cgfSBmcm9tIFwiLi9jb21wb25lbnRzL21hdHJpeC9yb3dcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pY0RyYWdEcm9wSWNvbiB9IGZyb20gXCIuL2NvbXBvbmVudHMvbWF0cml4LWFjdGlvbnMvZHJhZy1kcm9wLWljb24vZHJhZy1kcm9wLWljb25cIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uTWF0cml4RHJvcGRvd25CYXNlIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHRoaXMuZ2V0U3RhdGUoKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlO1xuICB9XG4gIHByaXZhdGUgZ2V0U3RhdGUocHJldlN0YXRlOiBhbnkgPSBudWxsKSB7XG4gICAgcmV0dXJuIHsgcm93Q291bnRlcjogIXByZXZTdGF0ZSA/IDAgOiBwcmV2U3RhdGUucm93Q291bnRlciArIDEgfTtcbiAgfVxuICBwcml2YXRlIHVwZGF0ZVN0YXRlT25DYWxsYmFjaygpIHtcbiAgICBpZiAodGhpcy5pc1JlbmRlcmluZykgcmV0dXJuO1xuICAgIHRoaXMuc2V0U3RhdGUodGhpcy5nZXRTdGF0ZSh0aGlzLnN0YXRlKSk7XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICB0aGlzLnF1ZXN0aW9uLnZpc2libGVSb3dzQ2hhbmdlZENhbGxiYWNrID0gKCkgPT4ge1xuICAgICAgdGhpcy51cGRhdGVTdGF0ZU9uQ2FsbGJhY2soKTtcbiAgICB9O1xuICAgIHRoaXMucXVlc3Rpb24ub25SZW5kZXJlZFRhYmxlUmVzZXRDYWxsYmFjayA9ICgpID0+IHtcbiAgICAgIHRoaXMucXVlc3Rpb24ucmVuZGVyZWRUYWJsZS5yZW5kZXJlZFJvd3NDaGFuZ2VkQ2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMudXBkYXRlU3RhdGVPbkNhbGxiYWNrKCk7XG4gICAgICB9O1xuICAgICAgdGhpcy51cGRhdGVTdGF0ZU9uQ2FsbGJhY2soKTtcbiAgICB9O1xuICAgIHRoaXMucXVlc3Rpb24ucmVuZGVyZWRUYWJsZS5yZW5kZXJlZFJvd3NDaGFuZ2VkQ2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZVN0YXRlT25DYWxsYmFjaygpO1xuICAgIH07XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICB0aGlzLnF1ZXN0aW9uLnZpc2libGVSb3dzQ2hhbmdlZENhbGxiYWNrID0gdW5kZWZpbmVkO1xuICAgIHRoaXMucXVlc3Rpb24ub25SZW5kZXJlZFRhYmxlUmVzZXRDYWxsYmFjayA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkVGFibGUucmVuZGVyZWRSb3dzQ2hhbmdlZENhbGxiYWNrID0gdW5kZWZpbmVkO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5yZW5kZXJUYWJsZURpdigpO1xuICB9XG4gIHJlbmRlclRhYmxlRGl2KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgaGVhZGVyID0gdGhpcy5yZW5kZXJIZWFkZXIoKTtcbiAgICB2YXIgZm9vdGVycyA9IHRoaXMucmVuZGVyRm9vdGVyKCk7XG4gICAgdmFyIHJvd3MgPSB0aGlzLnJlbmRlclJvd3MoKTtcbiAgICB2YXIgZGl2U3R5bGUgPSB0aGlzLnF1ZXN0aW9uLnNob3dIb3Jpem9udGFsU2Nyb2xsXG4gICAgICA/ICh7IG92ZXJmbG93WDogXCJzY3JvbGxcIiB9IGFzIFJlYWN0LkNTU1Byb3BlcnRpZXMpXG4gICAgICA6ICh7fSBhcyBSZWFjdC5DU1NQcm9wZXJ0aWVzKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBzdHlsZT17ZGl2U3R5bGV9IHJlZj17KHJvb3QpID0+ICh0aGlzLmNvbnRyb2wgPSByb290KX0+XG4gICAgICAgIDx0YWJsZSBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yb290fT5cbiAgICAgICAgICB7aGVhZGVyfVxuICAgICAgICAgIHtyb3dzfVxuICAgICAgICAgIHtmb290ZXJzfVxuICAgICAgICA8L3RhYmxlPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICByZW5kZXJIZWFkZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciB0YWJsZSA9IHRoaXMucXVlc3Rpb24ucmVuZGVyZWRUYWJsZTtcbiAgICBpZiAoIXRhYmxlLnNob3dIZWFkZXIpIHJldHVybiBudWxsO1xuICAgIHZhciBoZWFkZXJzOiBhbnlbXSA9IFtdO1xuICAgIHZhciBjZWxscyA9IHRhYmxlLmhlYWRlclJvdy5jZWxscztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNlbGxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY2VsbCA9IGNlbGxzW2ldO1xuICAgICAgdmFyIGtleSA9IFwiY29sdW1uXCIgKyBpO1xuICAgICAgdmFyIGNvbHVtblN0eWxlOiBhbnkgPSB7fTtcbiAgICAgIGlmICghIWNlbGwud2lkdGgpIHtcbiAgICAgICAgY29sdW1uU3R5bGUud2lkdGggPSBjZWxsLndpZHRoO1xuICAgICAgfVxuICAgICAgaWYgKCEhY2VsbC5taW5XaWR0aCkge1xuICAgICAgICBjb2x1bW5TdHlsZS5taW5XaWR0aCA9IGNlbGwubWluV2lkdGg7XG4gICAgICB9XG4gICAgICB2YXIgY2VsbENvbnRlbnQgPSB0aGlzLnJlbmRlckNlbGxDb250ZW50KGNlbGwsIFwiY29sdW1uLWhlYWRlclwiLCB7fSk7XG4gICAgICBoZWFkZXJzLnB1c2goXG4gICAgICAgIDx0aFxuICAgICAgICAgIGNsYXNzTmFtZT17Y2VsbC5jbGFzc05hbWV9XG4gICAgICAgICAga2V5PXtrZXl9XG4gICAgICAgICAgc3R5bGU9e2NvbHVtblN0eWxlfVxuICAgICAgICA+XG4gICAgICAgICAge2NlbGxDb250ZW50fVxuICAgICAgICA8L3RoPlxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDx0aGVhZD5cbiAgICAgICAgPHRyPntoZWFkZXJzfTwvdHI+XG4gICAgICA8L3RoZWFkPlxuICAgICk7XG4gIH1cbiAgcmVuZGVyRm9vdGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgdGFibGUgPSB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkVGFibGU7XG4gICAgaWYgKCF0YWJsZS5zaG93Rm9vdGVyKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgcm93ID0gdGhpcy5yZW5kZXJSb3coXG4gICAgICBcImZvb3RlclwiLFxuICAgICAgdGFibGUuZm9vdGVyUm93LFxuICAgICAgdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzXG4gICAgKTtcbiAgICByZXR1cm4gPHRmb290Pntyb3d9PC90Zm9vdD47XG4gIH1cbiAgcmVuZGVyUm93cygpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGNzc0NsYXNzZXMgPSB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgdmFyIHJvd3MgPSBbXTtcbiAgICB2YXIgcmVuZGVyZWRSb3dzID0gdGhpcy5xdWVzdGlvbi5yZW5kZXJlZFRhYmxlLnJvd3M7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZW5kZXJlZFJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJvd3MucHVzaChcbiAgICAgICAgdGhpcy5yZW5kZXJSb3cocmVuZGVyZWRSb3dzW2ldLmlkLCByZW5kZXJlZFJvd3NbaV0sIGNzc0NsYXNzZXMpXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gPHRib2R5Pntyb3dzfTwvdGJvZHk+O1xuICB9XG4gIHJlbmRlclJvdyhcbiAgICBrZXlWYWx1ZTogYW55LFxuICAgIHJvdzogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkUm93LFxuICAgIGNzc0NsYXNzZXM6IGFueVxuICApOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIG1hdHJpeHJvdyA9IFtdO1xuICAgIHZhciBjZWxscyA9IHJvdy5jZWxscztcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2VsbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIG1hdHJpeHJvdy5wdXNoKHRoaXMucmVuZGVyQ2VsbChjZWxsc1tpXSwgaSwgY3NzQ2xhc3NlcykpO1xuICAgIH1cbiAgICB2YXIga2V5ID0gXCJyb3dcIiArIGtleVZhbHVlO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxSZWFjdC5GcmFnbWVudCBrZXk9e2tleX0+XG4gICAgICAgIDxNYXRyaXhSb3cgbW9kZWw9e3Jvd30gcGFyZW50TWF0cml4PXt0aGlzLnF1ZXN0aW9ufT57bWF0cml4cm93fTwvTWF0cml4Um93PlxuICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVyQ2VsbChcbiAgICBjZWxsOiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRDZWxsLFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgY3NzQ2xhc3NlczogYW55XG4gICk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIga2V5ID0gXCJjZWxsXCIgKyBpbmRleDtcbiAgICBpZiAoY2VsbC5oYXNRdWVzdGlvbikge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFN1cnZleVF1ZXN0aW9uTWF0cml4RHJvcGRvd25DZWxsXG4gICAgICAgICAga2V5PXtrZXl9XG4gICAgICAgICAgaXRlbUNzcz17Y2VsbC5jbGFzc05hbWV9XG4gICAgICAgICAgY3NzQ2xhc3Nlcz17Y3NzQ2xhc3Nlc31cbiAgICAgICAgICBjZWxsPXtjZWxsfVxuICAgICAgICAgIGNyZWF0b3I9e3RoaXMuY3JlYXRvcn1cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfVxuICAgIGxldCByZWFzb24gPSBjZWxsLmhhc1RpdGxlID8gXCJyb3ctaGVhZGVyXCIgOiBcIlwiO1xuICAgIHZhciBjZWxsQ29udGVudCA9IHRoaXMucmVuZGVyQ2VsbENvbnRlbnQoY2VsbCwgcmVhc29uLCBjc3NDbGFzc2VzKTtcbiAgICB2YXIgY2VsbFN0eWxlOiBhbnkgPSBudWxsO1xuICAgIGlmICghIWNlbGwud2lkdGggfHwgISFjZWxsLm1pbldpZHRoKSB7XG4gICAgICBjZWxsU3R5bGUgPSB7fTtcbiAgICAgIGlmICghIWNlbGwud2lkdGgpIGNlbGxTdHlsZS53aWR0aCA9IGNlbGwud2lkdGg7XG4gICAgICBpZiAoISFjZWxsLm1pbldpZHRoKSBjZWxsU3R5bGUubWluV2lkdGggPSBjZWxsLm1pbldpZHRoO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8dGRcbiAgICAgICAgY2xhc3NOYW1lPXtjZWxsLmNsYXNzTmFtZX1cbiAgICAgICAga2V5PXtrZXl9XG4gICAgICAgIHN0eWxlPXtjZWxsU3R5bGV9XG4gICAgICAgIGNvbFNwYW49e2NlbGwuY29sU3BhbnN9XG4gICAgICA+XG4gICAgICAgIHtjZWxsQ29udGVudH1cbiAgICAgIDwvdGQ+XG4gICAgKTtcbiAgfVxuICBwcml2YXRlIHJlbmRlckNlbGxDb250ZW50KFxuICAgIGNlbGw6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwsXG4gICAgcmVhc29uOiBzdHJpbmcsXG4gICAgY3NzQ2xhc3NlczogYW55XG4gICk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgY2VsbENvbnRlbnQgPSBudWxsO1xuICAgIHZhciByZXF1aXJlZFNwYWNlID0gbnVsbDtcbiAgICB2YXIgcmVxdWlyZWRUZXh0ID0gbnVsbDtcbiAgICB2YXIgY2VsbFN0eWxlOiBhbnkgPSBudWxsO1xuICAgIGlmICghIWNlbGwud2lkdGggfHwgISFjZWxsLm1pbldpZHRoKSB7XG4gICAgICBjZWxsU3R5bGUgPSB7fTtcbiAgICAgIGlmICghIWNlbGwud2lkdGgpIGNlbGxTdHlsZS53aWR0aCA9IGNlbGwud2lkdGg7XG4gICAgICBpZiAoISFjZWxsLm1pbldpZHRoKSBjZWxsU3R5bGUubWluV2lkdGggPSBjZWxsLm1pbldpZHRoO1xuICAgIH1cbiAgICBpZiAoY2VsbC5oYXNUaXRsZSkge1xuICAgICAgcmVhc29uID0gXCJyb3ctaGVhZGVyXCI7XG4gICAgICBjZWxsQ29udGVudCA9IHRoaXMucmVuZGVyTG9jU3RyaW5nKGNlbGwubG9jVGl0bGUpO1xuICAgICAgaWYgKGNlbGwucmVxdWlyZWRUZXh0KSB7XG4gICAgICAgIHJlcXVpcmVkU3BhY2UgPSA8c3Bhbj4mbmJzcDs8L3NwYW4+O1xuICAgICAgICByZXF1aXJlZFRleHQgPSA8c3Bhbj57Y2VsbC5yZXF1aXJlZFRleHR9PC9zcGFuPjtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNlbGwuaXNEcmFnSGFuZGxlckNlbGwpIHtcbiAgICAgIGNlbGxDb250ZW50ID0gKDw+XG4gICAgICAgIDxTdXJ2ZXlRdWVzdGlvbk1hdHJpeER5bmFtaWNEcmFnRHJvcEljb24gaXRlbT17eyBkYXRhOiB7IHJvdzogY2VsbC5yb3csIHF1ZXN0aW9uOiB0aGlzLnF1ZXN0aW9uIH0gfX0vPlxuICAgICAgPC8+KTtcbiAgICB9XG4gICAgaWYgKGNlbGwuaXNBY3Rpb25zQ2VsbCkge1xuICAgICAgY2VsbENvbnRlbnQgPSAoXG4gICAgICAgIDxTdXJ2ZXlRdWVzdGlvbk1hdHJpeEFjdGlvbnNDZWxsXG4gICAgICAgICAgbW9kZWw9e2NlbGwuaXRlbS5nZXREYXRhKCl9XG4gICAgICAgID48L1N1cnZleVF1ZXN0aW9uTWF0cml4QWN0aW9uc0NlbGw+XG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoY2VsbC5oYXNQYW5lbCkge1xuICAgICAgY2VsbENvbnRlbnQgPSAoXG4gICAgICAgIDxTdXJ2ZXlQYW5lbFxuICAgICAgICAgIGtleT17Y2VsbC5wYW5lbC5pZH1cbiAgICAgICAgICBlbGVtZW50PXtjZWxsLnBhbmVsfVxuICAgICAgICAgIHN1cnZleT17dGhpcy5xdWVzdGlvbi5zdXJ2ZXl9XG4gICAgICAgICAgY3NzQ2xhc3Nlcz17Y3NzQ2xhc3Nlc31cbiAgICAgICAgICBpc0Rpc3BsYXlNb2RlPXt0aGlzLmlzRGlzcGxheU1vZGV9XG4gICAgICAgICAgY3JlYXRvcj17dGhpcy5jcmVhdG9yfVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKCFjZWxsQ29udGVudCkgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCByZWFkeUNlbGwgPSAoXG4gICAgICA8PlxuICAgICAgICB7Y2VsbENvbnRlbnR9XG4gICAgICAgIHtyZXF1aXJlZFNwYWNlfVxuICAgICAgICB7cmVxdWlyZWRUZXh0fVxuICAgICAgPC8+XG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy53cmFwQ2VsbChjZWxsLCByZWFkeUNlbGwsIHJlYXNvbik7XG4gIH1cbn1cblxuY2xhc3MgU3VydmV5UXVlc3Rpb25NYXRyaXhBY3Rpb25zQ2VsbCBleHRlbmRzIFJlYWN0U3VydmV5RWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgZ2V0IG1vZGVsKCk6IEFkYXB0aXZlQWN0aW9uQ29udGFpbmVyIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5tb2RlbDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTdXJ2ZXlBY3Rpb25CYXIgbW9kZWw9e3RoaXMubW9kZWx9IGhhbmRsZUNsaWNrPXtmYWxzZX0+PC9TdXJ2ZXlBY3Rpb25CYXI+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25NYXRyaXhEcm9wZG93bkNlbGwgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkFuZEVycm9yc0NlbGwge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByaXZhdGUgZ2V0IGNlbGwoKTogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkQ2VsbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY2VsbDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0UXVlc3Rpb24oKTogUXVlc3Rpb24ge1xuICAgIHZhciBxID0gc3VwZXIuZ2V0UXVlc3Rpb24oKTtcbiAgICBpZiAoISFxKSByZXR1cm4gcTtcbiAgICByZXR1cm4gISF0aGlzLmNlbGwgPyB0aGlzLmNlbGwucXVlc3Rpb24gOiBudWxsO1xuICB9XG4gIHByb3RlY3RlZCBkb0FmdGVyUmVuZGVyKCkge1xuICAgIHZhciBlbCA9IHRoaXMuY2VsbFJlZi5jdXJyZW50O1xuICAgIGlmIChcbiAgICAgIGVsICYmXG4gICAgICB0aGlzLmNlbGwgJiZcbiAgICAgIHRoaXMucXVlc3Rpb24gJiZcbiAgICAgIHRoaXMucXVlc3Rpb24uc3VydmV5ICYmXG4gICAgICBlbC5nZXRBdHRyaWJ1dGUoXCJkYXRhLXJlbmRlcmVkXCIpICE9PSBcInJcIlxuICAgICkge1xuICAgICAgZWwuc2V0QXR0cmlidXRlKFwiZGF0YS1yZW5kZXJlZFwiLCBcInJcIik7XG4gICAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgICAgY2VsbDogdGhpcy5jZWxsLFxuICAgICAgICBjZWxsUXVlc3Rpb246IHRoaXMucXVlc3Rpb24sXG4gICAgICAgIGh0bWxFbGVtZW50OiBlbCxcbiAgICAgICAgcm93OiB0aGlzLmNlbGwucm93LFxuICAgICAgICBjb2x1bW46IHRoaXMuY2VsbC5jZWxsLmNvbHVtbixcbiAgICAgIH07XG4gICAgICB0aGlzLnF1ZXN0aW9uLnN1cnZleS5tYXRyaXhBZnRlckNlbGxSZW5kZXIodGhpcy5xdWVzdGlvbiwgb3B0aW9ucyk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBnZXRTaG93RXJyb3JzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnF1ZXN0aW9uLmlzVmlzaWJsZSAmJlxuICAgICAgKCF0aGlzLmNlbGwuaXNDaG9pY2UgfHwgdGhpcy5jZWxsLmlzRmlyc3RDaG9pY2UpXG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Q2VsbFN0eWxlKCk6IGFueSB7XG4gICAgdmFyIHJlczogYW55ID0gc3VwZXIuZ2V0Q2VsbFN0eWxlKCk7XG4gICAgaWYgKCEhdGhpcy5jZWxsLndpZHRoIHx8ICEhdGhpcy5jZWxsLm1pbldpZHRoKSB7XG4gICAgICBpZiAoIXJlcykgcmVzID0ge307XG4gICAgICBpZiAoISF0aGlzLmNlbGwud2lkdGgpIHJlcy53aWR0aCA9IHRoaXMuY2VsbC53aWR0aDtcbiAgICAgIGlmICghIXRoaXMuY2VsbC5taW5XaWR0aCkgcmVzLm1pbldpZHRoID0gdGhpcy5jZWxsLm1pbldpZHRoO1xuICAgIH1cblxuICAgIHJldHVybiByZXM7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0SGVhZGVyVGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNlbGwuaGVhZGVycztcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyUXVlc3Rpb24oKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5jZWxsLmlzQ2hvaWNlKVxuICAgICAgcmV0dXJuIFN1cnZleVF1ZXN0aW9uLnJlbmRlclF1ZXN0aW9uQm9keSh0aGlzLmNyZWF0b3IsIHRoaXMucXVlc3Rpb24pO1xuICAgIGlmICh0aGlzLmNlbGwuaXNDaGVja2JveCkgcmV0dXJuIHRoaXMucmVuZGVyQ2VsbENoZWNrYm94QnV0dG9uKCk7XG4gICAgcmV0dXJuIHRoaXMucmVuZGVyQ2VsbFJhZGlvZ3JvdXBCdXR0b24oKTtcbiAgfVxuICBwcml2YXRlIHJlbmRlckNlbGxDaGVja2JveEJ1dHRvbigpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGtleSA9IHRoaXMuY2VsbC5xdWVzdGlvbi5pZCArIFwiaXRlbVwiICsgdGhpcy5jZWxsLmNob2ljZUluZGV4O1xuICAgIHJldHVybiAoXG4gICAgICA8U3VydmV5UXVlc3Rpb25DaGVja2JveEl0ZW1cbiAgICAgICAga2V5PXtrZXl9XG4gICAgICAgIHF1ZXN0aW9uPXt0aGlzLmNlbGwucXVlc3Rpb259XG4gICAgICAgIGNzc0NsYXNzZXM9e3RoaXMuY2VsbC5xdWVzdGlvbi5jc3NDbGFzc2VzfVxuICAgICAgICBpc0Rpc3BsYXlNb2RlPXt0aGlzLmNlbGwucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5fVxuICAgICAgICBpdGVtPXt0aGlzLmNlbGwuaXRlbX1cbiAgICAgICAgaXNGaXJzdD17dGhpcy5jZWxsLmlzRmlyc3RDaG9pY2V9XG4gICAgICAgIGluZGV4PXt0aGlzLmNlbGwuY2hvaWNlSW5kZXgudG9TdHJpbmcoKX1cbiAgICAgICAgaGlkZUNhcHRpb249e3RydWV9XG4gICAgICAvPlxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSByZW5kZXJDZWxsUmFkaW9ncm91cEJ1dHRvbigpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGtleSA9IHRoaXMuY2VsbC5xdWVzdGlvbi5pZCArIFwiaXRlbVwiICsgdGhpcy5jZWxsLmNob2ljZUluZGV4O1xuICAgIHJldHVybiAoXG4gICAgICA8U3VydmV5UXVlc3Rpb25SYWRpb0l0ZW1cbiAgICAgICAga2V5PXtrZXl9XG4gICAgICAgIHF1ZXN0aW9uPXt0aGlzLmNlbGwucXVlc3Rpb259XG4gICAgICAgIGNzc0NsYXNzZXM9e3RoaXMuY2VsbC5xdWVzdGlvbi5jc3NDbGFzc2VzfVxuICAgICAgICBpc0Rpc3BsYXlNb2RlPXt0aGlzLmNlbGwucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5fVxuICAgICAgICBpdGVtPXt0aGlzLmNlbGwuaXRlbX1cbiAgICAgICAgaW5kZXg9e3RoaXMuY2VsbC5jaG9pY2VJbmRleC50b1N0cmluZygpfVxuICAgICAgICBpc0NoZWNrZWQ9e3RoaXMuY2VsbC5xdWVzdGlvbi52YWx1ZSA9PT0gdGhpcy5jZWxsLml0ZW0udmFsdWV9XG4gICAgICAgIGlzRGlzYWJsZWQ9e3RoaXMuY2VsbC5xdWVzdGlvbi5pc1JlYWRPbmx5IHx8ICF0aGlzLmNlbGwuaXRlbS5pc0VuYWJsZWR9XG4gICAgICAgIGhpZGVDYXB0aW9uPXt0cnVlfVxuICAgICAgLz5cbiAgICApO1xuICB9XG59XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbk1hdHJpeERyb3Bkb3duQmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fbWF0cml4ZHJvcGRvd25iYXNlXCI7XG5pbXBvcnQgeyBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25NYXRyaXhEcm9wZG93bkJhc2Uge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuaGFuZGxlT25Sb3dBZGRDbGljayA9IHRoaXMuaGFuZGxlT25Sb3dBZGRDbGljay5iaW5kKHRoaXMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgbWF0cml4KCk6IFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWw7XG4gIH1cbiAgaGFuZGxlT25Sb3dBZGRDbGljayhldmVudDogYW55KSB7XG4gICAgdGhpcy5tYXRyaXguYWRkUm93VUkoKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGNzc0NsYXNzZXMgPSB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgdmFyIHNob3dUYWJsZSA9IHRoaXMucXVlc3Rpb24ucmVuZGVyZWRUYWJsZS5zaG93VGFibGU7XG4gICAgdmFyIG1haW5EaXYgPSBzaG93VGFibGVcbiAgICAgID8gdGhpcy5yZW5kZXJUYWJsZURpdigpXG4gICAgICA6IHRoaXMucmVuZGVyTm9Sb3dzQ29udGVudChjc3NDbGFzc2VzKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdj5cbiAgICAgICAge3RoaXMucmVuZGVyQWRkUm93QnV0dG9uT25Ub3AoY3NzQ2xhc3Nlcyl9XG4gICAgICAgIHttYWluRGl2fVxuICAgICAgICB7dGhpcy5yZW5kZXJBZGRSb3dCdXR0b25PbkJvdHRvbShjc3NDbGFzc2VzKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckFkZFJvd0J1dHRvbk9uVG9wKGNzc0NsYXNzZXM6IGFueSk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMubWF0cml4LnJlbmRlcmVkVGFibGUuc2hvd0FkZFJvd09uVG9wKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gdGhpcy5yZW5kZXJBZGRSb3dCdXR0b24oY3NzQ2xhc3Nlcyk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckFkZFJvd0J1dHRvbk9uQm90dG9tKGNzc0NsYXNzZXM6IGFueSk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMubWF0cml4LnJlbmRlcmVkVGFibGUuc2hvd0FkZFJvd09uQm90dG9tKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gdGhpcy5yZW5kZXJBZGRSb3dCdXR0b24oY3NzQ2xhc3Nlcyk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlck5vUm93c0NvbnRlbnQoY3NzQ2xhc3NlczogYW55KTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHRleHQ6IEpTWC5FbGVtZW50ID0gdGhpcy5yZW5kZXJMb2NTdHJpbmcodGhpcy5tYXRyaXgubG9jRW1wdHlSb3dzVGV4dCk7XG4gICAgY29uc3QgdGV4dERpdjogSlNYLkVsZW1lbnQgPSA8ZGl2IGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5lbXB0eVJvd3NUZXh0fT57dGV4dH08L2Rpdj47XG4gICAgY29uc3QgYnRuOiBKU1guRWxlbWVudCA9IHRoaXMucmVuZGVyQWRkUm93QnV0dG9uKGNzc0NsYXNzZXMsIHRydWUpO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5lbXB0eVJvd3NTZWN0aW9ufT5cbiAgICAgICAge3RleHREaXZ9XG4gICAgICAgIHtidG59XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJBZGRSb3dCdXR0b24oXG4gICAgY3NzQ2xhc3NlczogYW55LFxuICAgIGlzRW1wdHlTZWN0aW9uOiBib29sZWFuID0gZmFsc2VcbiAgKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGFkZFJvd1RleHQ6IEpTWC5FbGVtZW50ID0gdGhpcy5yZW5kZXJMb2NTdHJpbmcodGhpcy5tYXRyaXgubG9jQWRkUm93VGV4dCk7XG4gICAgY29uc3QgYWRkQnV0dG9uID0gKDxidXR0b25cbiAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRBZGRSb3dCdXR0b25Dc3MoaXNFbXB0eVNlY3Rpb24pfVxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBkaXNhYmxlZD17dGhpcy5xdWVzdGlvbi5pc0lucHV0UmVhZE9ubHl9XG4gICAgICBvbkNsaWNrPXtcbiAgICAgICAgdGhpcy5xdWVzdGlvbi5pc0Rlc2lnbk1vZGUgPyB1bmRlZmluZWQgOiB0aGlzLmhhbmRsZU9uUm93QWRkQ2xpY2tcbiAgICAgIH1cbiAgICA+XG4gICAgICB7YWRkUm93VGV4dH1cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5pY29uQWRkfSAvPlxuICAgIDwvYnV0dG9uPik7XG4gICAgcmV0dXJuIChcbiAgICAgIGlzRW1wdHlTZWN0aW9uID8gYWRkQnV0dG9uIDogPGRpdiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuZm9vdGVyfT57YWRkQnV0dG9ufTwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcIm1hdHJpeGR5bmFtaWNcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pYywgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRFcnJvcnMsIFN1cnZleVF1ZXN0aW9uQW5kRXJyb3JzV3JhcHBlZCB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25cIjtcbmltcG9ydCB7IFF1ZXN0aW9uTXVsdGlwbGVUZXh0TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IE11bHRpcGxlVGV4dEl0ZW1Nb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcbmltcG9ydCB7IFRpdGxlQ29udGVudCB9IGZyb20gXCIuL2NvbXBvbmVudHMvdGl0bGUvdGl0bGUtY29udGVudFwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25NdWx0aXBsZVRleHQgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uTXVsdGlwbGVUZXh0TW9kZWwge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBRdWVzdGlvbk11bHRpcGxlVGV4dE1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgY3NzQ2xhc3NlcyA9IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3NlcztcbiAgICB2YXIgdGFibGVSb3dzID0gdGhpcy5xdWVzdGlvbi5nZXRSb3dzKCk7XG4gICAgdmFyIHJvd3MgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRhYmxlUm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgcm93cy5wdXNoKHRoaXMucmVuZGVyUm93KGksIHRhYmxlUm93c1tpXSwgY3NzQ2xhc3NlcykpO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPHRhYmxlIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5yb290fT5cbiAgICAgICAgPHRib2R5Pntyb3dzfTwvdGJvZHk+XG4gICAgICA8L3RhYmxlPlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckl0ZW1Ub29sdGlwRXJyb3IoaXRlbTogTXVsdGlwbGVUZXh0SXRlbU1vZGVsLCBjc3NDbGFzc2VzOiBhbnkpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb24uaXNFcnJvcnNNb2RlVG9vbHRpcCA/IChcbiAgICAgIDxTdXJ2ZXlFbGVtZW50RXJyb3JzXG4gICAgICAgIGVsZW1lbnQ9e2l0ZW0uZWRpdG9yfVxuICAgICAgICBjc3NDbGFzc2VzPXtjc3NDbGFzc2VzfVxuICAgICAgICBjcmVhdG9yPXt0aGlzLmNyZWF0b3J9XG4gICAgICAgIGxvY2F0aW9uPXtcInRvb2x0aXBcIn1cbiAgICAgICAgaWQ9e2l0ZW0uZWRpdG9yLmlkICsgXCJfZXJyb3JzXCJ9XG4gICAgICAvPlxuICAgICk6IG51bGw7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlclJvdyhcbiAgICByb3dJbmRleDogbnVtYmVyLFxuICAgIGl0ZW1zOiBBcnJheTxNdWx0aXBsZVRleHRJdGVtTW9kZWw+LFxuICAgIGNzc0NsYXNzZXM6IGFueVxuICApIHtcbiAgICB2YXIga2V5OiBzdHJpbmcgPSBcIml0ZW1cIiArIHJvd0luZGV4O1xuICAgIHZhciB0ZHMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaXRlbSA9IGl0ZW1zW2ldO1xuICAgICAgdmFyIHNwYW5zID0gW107XG4gICAgICB0ZHMucHVzaChcbiAgICAgICAgPHRkIGtleT17XCJpdGVtXCIgKyBpfSBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jZWxsfT5cbiAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldEl0ZW1MYWJlbENzcyhpdGVtKX0+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuaXRlbVRpdGxlfT5cbiAgICAgICAgICAgICAgPFRpdGxlQ29udGVudCBlbGVtZW50PXtpdGVtLmVkaXRvcn0gY3NzQ2xhc3Nlcz17aXRlbS5lZGl0b3IuY3NzQ2xhc3Nlc30+PC9UaXRsZUNvbnRlbnQ+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8U3VydmV5TXVsdGlwbGVUZXh0SXRlbUVkaXRvclxuICAgICAgICAgICAgICBjc3NDbGFzc2VzPXtjc3NDbGFzc2VzfVxuICAgICAgICAgICAgICBpdGVtQ3NzPXt0aGlzLnF1ZXN0aW9uLmdldEl0ZW1Dc3MoKX1cbiAgICAgICAgICAgICAgcXVlc3Rpb249e2l0ZW0uZWRpdG9yfVxuICAgICAgICAgICAgICBjcmVhdG9yPXt0aGlzLmNyZWF0b3J9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAge3RoaXMucmVuZGVySXRlbVRvb2x0aXBFcnJvcihpdGVtLCBjc3NDbGFzc2VzKX1cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8L3RkPlxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDx0ciBrZXk9e2tleX0gY2xhc3NOYW1lPXtjc3NDbGFzc2VzLnJvd30+XG4gICAgICAgIHt0ZHN9XG4gICAgICA8L3RyPlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleU11bHRpcGxlVGV4dEl0ZW1FZGl0b3IgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkFuZEVycm9yc1dyYXBwZWQge1xuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXt0aGlzLml0ZW1Dc3N9Pnt0aGlzLnJlbmRlckNvbnRlbnQoKX08L2Rpdj47XG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcIm11bHRpcGxldGV4dFwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25NdWx0aXBsZVRleHQsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBTdXJ2ZXlNb2RlbCwgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5UGFuZWwgfSBmcm9tIFwiLi9wYW5lbFwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcbmltcG9ydCB7IFN2Z0ljb24gfSBmcm9tIFwiLi9jb21wb25lbnRzL3N2Zy1pY29uL3N2Zy1pY29uXCI7XG5pbXBvcnQgeyBTdXJ2ZXlBY3Rpb25CYXIgfSBmcm9tIFwiLi9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLWJhclwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNOZXh0QnV0dG9uIH0gZnJvbSBcIi4vY29tcG9uZW50cy9wYW5lbGR5bmFtaWMtYWN0aW9ucy9wYW5lbGR5bmFtaWMtbmV4dC1idG5cIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljUHJldkJ1dHRvbiB9IGZyb20gXCIuL2NvbXBvbmVudHMvcGFuZWxkeW5hbWljLWFjdGlvbnMvcGFuZWxkeW5hbWljLXByZXYtYnRuXCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dCB9IGZyb20gXCIuL2NvbXBvbmVudHMvcGFuZWxkeW5hbWljLWFjdGlvbnMvcGFuZWxkeW5hbWljLXByb2dyZXNzLXRleHRcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljQWRkQnV0dG9uIH0gZnJvbSBcIi4vY29tcG9uZW50cy9wYW5lbGR5bmFtaWMtYWN0aW9ucy9wYW5lbGR5bmFtaWMtYWRkLWJ0blwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWMgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IHBhbmVsQ291bnRlcjogMCB9KTtcbiAgICBjb25zdCBzZWxmOiBTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pYyA9IHRoaXM7XG4gICAgdGhpcy5xdWVzdGlvbi5wYW5lbENvdW50Q2hhbmdlZENhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgc2VsZi51cGRhdGVRdWVzdGlvblJlbmRlcmluZygpO1xuICAgIH07XG4gICAgdGhpcy5xdWVzdGlvbi5jdXJyZW50SW5kZXhDaGFuZ2VkQ2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBzZWxmLnVwZGF0ZVF1ZXN0aW9uUmVuZGVyaW5nKCk7XG4gICAgfTtcbiAgICB0aGlzLnF1ZXN0aW9uLnJlbmRlck1vZGVDaGFuZ2VkQ2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBzZWxmLnVwZGF0ZVF1ZXN0aW9uUmVuZGVyaW5nKCk7XG4gICAgfTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIHRoaXMucXVlc3Rpb24ucGFuZWxDb3VudENoYW5nZWRDYWxsYmFjayA9IG51bGw7XG4gICAgdGhpcy5xdWVzdGlvbi5jdXJyZW50SW5kZXhDaGFuZ2VkQ2FsbGJhY2sgPSBudWxsO1xuICAgIHRoaXMucXVlc3Rpb24ucmVuZGVyTW9kZUNoYW5nZWRDYWxsYmFjayA9IG51bGw7XG4gIH1cbiAgcHJpdmF0ZSB1cGRhdGVRdWVzdGlvblJlbmRlcmluZygpIHtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIHBhbmVsQ291bnRlcjogdGhpcy5zdGF0ZSA/IHRoaXMuc3RhdGUucGFuZWxDb3VudGVyICsgMSA6IDEsXG4gICAgfSk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHBhbmVscyA9IFtdO1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLmlzUmVuZGVyTW9kZUxpc3QpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5xdWVzdGlvbi5wYW5lbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgcGFuZWwgPSB0aGlzLnF1ZXN0aW9uLnBhbmVsc1tpXTtcbiAgICAgICAgcGFuZWxzLnB1c2goXG4gICAgICAgICAgPFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljSXRlbVxuICAgICAgICAgICAga2V5PXtwYW5lbC5pZH1cbiAgICAgICAgICAgIGVsZW1lbnQ9e3BhbmVsfVxuICAgICAgICAgICAgcXVlc3Rpb249e3RoaXMucXVlc3Rpb259XG4gICAgICAgICAgICBpbmRleD17aX1cbiAgICAgICAgICAgIGNzc0NsYXNzZXM9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlc31cbiAgICAgICAgICAgIGlzRGlzcGxheU1vZGU9e3RoaXMuaXNEaXNwbGF5TW9kZX1cbiAgICAgICAgICAgIGNyZWF0b3I9e3RoaXMuY3JlYXRvcn1cbiAgICAgICAgICAvPlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5xdWVzdGlvbi5jdXJyZW50UGFuZWwgIT0gbnVsbCkge1xuICAgICAgICBjb25zdCBwYW5lbCA9IHRoaXMucXVlc3Rpb24uY3VycmVudFBhbmVsO1xuICAgICAgICBwYW5lbHMucHVzaChcbiAgICAgICAgICA8U3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNJdGVtXG4gICAgICAgICAgICBrZXk9e3RoaXMucXVlc3Rpb24uY3VycmVudEluZGV4fVxuICAgICAgICAgICAgZWxlbWVudD17cGFuZWx9XG4gICAgICAgICAgICBxdWVzdGlvbj17dGhpcy5xdWVzdGlvbn1cbiAgICAgICAgICAgIGluZGV4PXt0aGlzLnF1ZXN0aW9uLmN1cnJlbnRJbmRleH1cbiAgICAgICAgICAgIGNzc0NsYXNzZXM9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlc31cbiAgICAgICAgICAgIGlzRGlzcGxheU1vZGU9e3RoaXMuaXNEaXNwbGF5TW9kZX1cbiAgICAgICAgICAgIGNyZWF0b3I9e3RoaXMuY3JlYXRvcn1cbiAgICAgICAgICAvPlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBidG5BZGQ6IEpTWC5FbGVtZW50ID0gdGhpcy5xdWVzdGlvbi5pc1JlbmRlck1vZGVMaXN0ICYmIHRoaXMucXVlc3Rpb25bXCJzaG93TGVnYWN5TmF2aWdhdGlvblwiXVxuICAgICAgPyB0aGlzLnJlbmRlckFkZFJvd0J1dHRvbigpXG4gICAgICA6IG51bGw7XG4gICAgY29uc3QgbmF2VG9wOiBKU1guRWxlbWVudCA9IHRoaXMucXVlc3Rpb24uaXNQcm9ncmVzc1RvcFNob3dpbmdcbiAgICAgID8gdGhpcy5yZW5kZXJOYXZpZ2F0b3IoKVxuICAgICAgOiBudWxsO1xuICAgIGNvbnN0IG5hdkJvdHRvbTogSlNYLkVsZW1lbnQgPSB0aGlzLnF1ZXN0aW9uLmlzUHJvZ3Jlc3NCb3R0b21TaG93aW5nXG4gICAgICA/IHRoaXMucmVuZGVyTmF2aWdhdG9yKClcbiAgICAgIDogbnVsbDtcblxuICAgIGNvbnN0IHN0eWxlOiBhbnkgPSB7fTtcbiAgICBjb25zdCBuYXZWMiA9IHRoaXMucmVuZGVyTmF2aWdhdG9yVjIoKTtcbiAgICBjb25zdCBub0VudHJpZXNQbGFjZWhvbGRlciA9IHRoaXMucmVuZGVyUGxhY2Vob2xkZXIoKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yb290fT5cbiAgICAgICAge25vRW50cmllc1BsYWNlaG9sZGVyfVxuICAgICAgICB7bmF2VG9wfVxuICAgICAgICB7cGFuZWxzfVxuICAgICAgICB7bmF2Qm90dG9tfVxuICAgICAgICB7YnRuQWRkfVxuICAgICAgICB7bmF2VjJ9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJOYXZpZ2F0b3IoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmKCF0aGlzLnF1ZXN0aW9uW1wic2hvd0xlZ2FjeU5hdmlnYXRpb25cIl0pIHtcbiAgICAgIGlmKHRoaXMucXVlc3Rpb24uaXNSYW5nZVNob3dpbmcgJiYgdGhpcy5xdWVzdGlvbi5pc1Byb2dyZXNzVG9wU2hvd2luZykge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJSYW5nZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHJhbmdlOiBKU1guRWxlbWVudCA9IHRoaXMucXVlc3Rpb24uaXNSYW5nZVNob3dpbmcgPyB0aGlzLnJlbmRlclJhbmdlKCkgOiBudWxsO1xuICAgIGNvbnN0IGJ0blByZXY6IEpTWC5FbGVtZW50ID0gdGhpcy5yZW5kcmVyUHJldkJ1dHRvbigpO1xuICAgIGNvbnN0IGJ0bk5leHQ6IEpTWC5FbGVtZW50ID0gdGhpcy5yZW5kcmVyTmV4dEJ1dHRvbigpO1xuICAgIGNvbnN0IGJ0bkFkZDogSlNYLkVsZW1lbnQgPSB0aGlzLnJlbmRlckFkZFJvd0J1dHRvbigpO1xuICAgIGNvbnN0IHByb2dyZXNzQ2xhc3M6IHN0cmluZyA9IHRoaXMucXVlc3Rpb24uaXNQcm9ncmVzc1RvcFNob3dpbmdcbiAgICAgID8gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnByb2dyZXNzVG9wXG4gICAgICA6IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5wcm9ncmVzc0JvdHRvbTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3Byb2dyZXNzQ2xhc3N9PlxuICAgICAgICA8ZGl2IHN0eWxlPXt7IGNsZWFyOiBcImJvdGhcIiB9fT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnByb2dyZXNzQ29udGFpbmVyfT5cbiAgICAgICAgICAgIHtidG5QcmV2fVxuICAgICAgICAgICAge3JhbmdlfVxuICAgICAgICAgICAge2J0bk5leHR9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAge2J0bkFkZH1cbiAgICAgICAgICB7dGhpcy5yZW5kZXJQcm9ncmVzc1RleHQoKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByaXZhdGUgcmVuZGVyUHJvZ3Jlc3NUZXh0KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0IGRhdGE9eyB7IHF1ZXN0aW9uOiB0aGlzLnF1ZXN0aW9uIH19PjwvU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ+XG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZW5kcmVyUHJldkJ1dHRvbigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljUHJldkJ1dHRvbiBkYXRhPXsgeyBxdWVzdGlvbjogdGhpcy5xdWVzdGlvbiB9fT48L1N1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljUHJldkJ1dHRvbj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kcmVyTmV4dEJ1dHRvbigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljTmV4dEJ1dHRvbiBkYXRhPXsgeyBxdWVzdGlvbjogdGhpcy5xdWVzdGlvbiB9fT48L1N1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljTmV4dEJ1dHRvbj5cbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlbmRlclJhbmdlKCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5wcm9ncmVzc30+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5wcm9ncmVzc0Jhcn1cbiAgICAgICAgICBzdHlsZT17eyB3aWR0aDogdGhpcy5xdWVzdGlvbi5wcm9ncmVzcyB9fVxuICAgICAgICAgIHJvbGU9XCJwcm9ncmVzc2JhclwiXG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJBZGRSb3dCdXR0b24oKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8U3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNBZGRCdXR0b24gZGF0YT17IHsgcXVlc3Rpb246IHRoaXMucXVlc3Rpb24gfX0+PC9TdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY0FkZEJ1dHRvbj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJOYXZpZ2F0b3JWMigpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKHRoaXMucXVlc3Rpb24ucGFuZWxDb3VudCA9PT0gMCB8fCB0aGlzLnF1ZXN0aW9uW1wic2hvd0xlZ2FjeU5hdmlnYXRpb25cIl0pIHJldHVybiBudWxsO1xuICAgIGNvbnN0IHJhbmdlOiBKU1guRWxlbWVudCA9IHRoaXMucXVlc3Rpb24uaXNSYW5nZVNob3dpbmcgJiYgIXRoaXMucXVlc3Rpb24uaXNQcm9ncmVzc1RvcFNob3dpbmcgPyB0aGlzLnJlbmRlclJhbmdlKCkgOiBudWxsO1xuICAgIGlmICghdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmZvb3Rlcikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiAoPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5mb290ZXJ9PlxuICAgICAgPGhyIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnNlcGFyYXRvcn0gLz5cbiAgICAgIHtyYW5nZX1cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuZm9vdGVyQnV0dG9uc0NvbnRhaW5lcn0+XG4gICAgICAgIDxTdXJ2ZXlBY3Rpb25CYXIgbW9kZWw9e3RoaXMucXVlc3Rpb24uZm9vdGVyVG9vbGJhcn0+PC9TdXJ2ZXlBY3Rpb25CYXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj4pO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJQbGFjZWhvbGRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKHRoaXMucXVlc3Rpb24uZ2V0U2hvd05vRW50cmllc1BsYWNlaG9sZGVyKCkpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMubm9FbnRyaWVzUGxhY2Vob2xkZXJ9PlxuICAgICAgICAgIDxzcGFuPnt0aGlzLnJlbmRlckxvY1N0cmluZyh0aGlzLnF1ZXN0aW9uLmxvY05vRW50cmllc1RleHQpfTwvc3Bhbj5cbiAgICAgICAgICB7dGhpcy5yZW5kZXJBZGRSb3dCdXR0b24oKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNJdGVtIGV4dGVuZHMgU3VydmV5UGFuZWwge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuaGFuZGxlT25QYW5lbFJlbW92ZUNsaWNrID0gdGhpcy5oYW5kbGVPblBhbmVsUmVtb3ZlQ2xpY2suYmluZCh0aGlzKTtcbiAgfVxuICBwcml2YXRlIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5xdWVzdGlvbjtcbiAgfVxuICBwcml2YXRlIGdldCBpbmRleCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmluZGV4O1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdXJ2ZXkoKTogU3VydmV5TW9kZWwge1xuICAgIHJldHVybiAhIXRoaXMucXVlc3Rpb24gPyAodGhpcy5xdWVzdGlvbi5zdXJ2ZXkgYXMgU3VydmV5TW9kZWwpIDogbnVsbDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Q3NzKCk6IGFueSB7XG4gICAgY29uc3Qgc3VydmV5ID0gdGhpcy5nZXRTdXJ2ZXkoKTtcbiAgICByZXR1cm4gISFzdXJ2ZXkgPyBzdXJ2ZXkuZ2V0Q3NzKCkgOiB7fTtcbiAgfVxuICBoYW5kbGVPblBhbmVsUmVtb3ZlQ2xpY2soZXZlbnQ6IGFueSkge1xuICAgIHRoaXMucXVlc3Rpb24ucmVtb3ZlUGFuZWxVSSh0aGlzLmluZGV4KTtcbiAgfVxuICBwdWJsaWMgcmVuZGVyKCkge1xuICAgIGNvbnN0IHBhbmVsOiBKU1guRWxlbWVudCA9IHN1cGVyLnJlbmRlcigpO1xuICAgIGNvbnN0IHJlbW92ZUJ1dHRvbjogSlNYLkVsZW1lbnQgPSB0aGlzLnJlbmRlckJ1dHRvbigpO1xuICAgIGNvbnN0IHNlcGFyYXRvcjogSlNYLkVsZW1lbnQgPSB0aGlzLnF1ZXN0aW9uLmlzUmVuZGVyTW9kZUxpc3QgJiYgdGhpcy5pbmRleCA8IHRoaXMucXVlc3Rpb24ucGFuZWxDb3VudCAtIDEgP1xuICAgICAgKDxociBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5zZXBhcmF0b3J9IC8+KSA6IG51bGw7XG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldFBhbmVsV3JhcHBlckNzcygpfT5cbiAgICAgICAgICB7cGFuZWx9XG4gICAgICAgICAge3JlbW92ZUJ1dHRvbn1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHtzZXBhcmF0b3J9XG4gICAgICA8Lz5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJCdXR0b24oKTogSlNYLkVsZW1lbnQge1xuICAgIGlmIChcbiAgICAgICF0aGlzLnF1ZXN0aW9uLmNhblJlbW92ZVBhbmVsIHx8XG4gICAgICAodGhpcy5xdWVzdGlvbi5pc1JlbmRlck1vZGVMaXN0ICYmIHRoaXMucGFuZWwuaXNDb2xsYXBzZWQpXG4gICAgKVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIChcbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldFBhbmVsUmVtb3ZlQnV0dG9uQ3NzKCl9XG4gICAgICAgIG9uQ2xpY2s9e3RoaXMuaGFuZGxlT25QYW5lbFJlbW92ZUNsaWNrfVxuICAgICAgICB0eXBlPVwiYnV0dG9uXCI+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuYnV0dG9uUmVtb3ZlVGV4dH1cbiAgICAgICAgPnt0aGlzLnF1ZXN0aW9uLnBhbmVsUmVtb3ZlVGV4dH08L3NwYW4+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaWNvblJlbW92ZX1cbiAgICAgICAgPjwvc3Bhbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcInBhbmVsZHluYW1pY1wiLCBwcm9wcyA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSwgUmVhY3RTdXJ2ZXlFbGVtZW50IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBRdWVzdGlvblJhZGlvZ3JvdXBNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgSXRlbVZhbHVlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkNvbW1lbnRJdGVtIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9jb21tZW50XCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuaW1wb3J0IHsgQmFzZSwgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0U3VydmV5RWxlbWVudHNXcmFwcGVyIH0gZnJvbSBcIi4vcmVhY3RzdXJ2ZXltb2RlbFwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuL2VsZW1lbnQtZmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25SYWRpb2dyb3VwIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvblJhZGlvZ3JvdXBNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFF1ZXN0aW9uUmFkaW9ncm91cE1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgY3NzQ2xhc3NlcyA9IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3NlcztcbiAgICB2YXIgY2xlYXJCdXR0b24gPSBudWxsO1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLmNhblNob3dDbGVhckJ1dHRvbikge1xuICAgICAgY2xlYXJCdXR0b24gPSAoXG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmNsZWFyQnV0dG9ufVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gdGhpcy5xdWVzdGlvbi5jbGVhclZhbHVlKCl9XG4gICAgICAgICAgICB2YWx1ZT17dGhpcy5xdWVzdGlvbi5jbGVhckJ1dHRvbkNhcHRpb259XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPGZpZWxkc2V0XG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRTZWxlY3RCYXNlUm9vdENzcygpfVxuICAgICAgICByb2xlPVwicHJlc2VudGF0aW9uXCJcbiAgICAgICAgcmVmPXsoZmllbGRzZXQpID0+ICh0aGlzLmNvbnRyb2wgPSBmaWVsZHNldCl9XG4gICAgICA+XG4gICAgICAgIHt0aGlzLnF1ZXN0aW9uLmhhc0NvbHVtbnNcbiAgICAgICAgICA/IHRoaXMuZ2V0Q29sdW1uZWRCb2R5KGNzc0NsYXNzZXMpXG4gICAgICAgICAgOiB0aGlzLmdldEl0ZW1zKGNzc0NsYXNzZXMpfVxuICAgICAgICB7dGhpcy5xdWVzdGlvbi5oYXNPdGhlciAmJiB0aGlzLnF1ZXN0aW9uLmlzSXRlbVNlbGVjdGVkKHRoaXMucXVlc3Rpb24ub3RoZXJJdGVtKSA/IHRoaXMucmVuZGVyT3RoZXIoY3NzQ2xhc3NlcykgOiBudWxsfVxuICAgICAgICB7Y2xlYXJCdXR0b259XG4gICAgICA8L2ZpZWxkc2V0PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldEZvb3RlcigpIHtcbiAgICBpZiAodGhpcy5xdWVzdGlvbi5oYXNGb290SXRlbXMpIHtcbiAgICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLmZvb3RJdGVtcy5tYXAoKGl0ZW06IGFueSwgaWk6IG51bWJlcikgPT5cbiAgICAgICAgdGhpcy5yZW5kZXJJdGVtKFxuICAgICAgICAgIFwiaXRlbV9mXCIgKyBpaSxcbiAgICAgICAgICBpdGVtLFxuICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgIHRoaXMucXVlc3Rpb24uY3NzQ2xhc3NlcyxcbiAgICAgICAgICBudWxsXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBnZXRDb2x1bW5lZEJvZHkoY3NzQ2xhc3NlczogYW55KSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLnJvb3RNdWx0aUNvbHVtbn0+XG4gICAgICAgICAge3RoaXMuZ2V0Q29sdW1ucyhjc3NDbGFzc2VzKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHt0aGlzLmdldEZvb3RlcigpfVxuICAgICAgPC8+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Q29sdW1ucyhjc3NDbGFzc2VzOiBhbnkpIHtcbiAgICB2YXIgdmFsdWUgPSB0aGlzLmdldFN0YXRlVmFsdWUoKTtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5jb2x1bW5zLm1hcCgoY29sdW1uOiBhbnksIGNpOiBudW1iZXIpID0+IHtcbiAgICAgIHZhciBpdGVtcyA9IGNvbHVtbi5tYXAoKGl0ZW06IGFueSwgaWk6IG51bWJlcikgPT5cbiAgICAgICAgdGhpcy5yZW5kZXJJdGVtKFwiaXRlbVwiICsgY2kgKyBpaSwgaXRlbSwgdmFsdWUsIGNzc0NsYXNzZXMsIFwiXCIgKyBjaSArIGlpKVxuICAgICAgKTtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxkaXYga2V5PXtcImNvbHVtblwiICsgY2l9IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRDb2x1bW5DbGFzcygpfSByb2xlPVwicHJlc2VudGF0aW9uXCI+XG4gICAgICAgICAge2l0ZW1zfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICk7XG4gICAgfSk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldEl0ZW1zKGNzc0NsYXNzZXM6IGFueSk6IEFycmF5PGFueT4ge1xuICAgIHZhciBpdGVtcyA9IFtdO1xuICAgIHZhciB2YWx1ZSA9IHRoaXMuZ2V0U3RhdGVWYWx1ZSgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5xdWVzdGlvbi52aXNpYmxlQ2hvaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGl0ZW0gPSB0aGlzLnF1ZXN0aW9uLnZpc2libGVDaG9pY2VzW2ldO1xuICAgICAgdmFyIHJlbmRlcmVkSXRlbSA9IHRoaXMucmVuZGVySXRlbShcIml0ZW1cIiArIGksIGl0ZW0sIHZhbHVlLCBjc3NDbGFzc2VzLCBcIlwiICsgaSk7XG4gICAgICBpdGVtcy5wdXNoKHJlbmRlcmVkSXRlbSk7XG4gICAgfVxuICAgIHJldHVybiBpdGVtcztcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHRleHRTdHlsZSgpOiBhbnkge1xuICAgIHJldHVybiBudWxsOy8veyBkaXNwbGF5OiBcImlubGluZVwiLCBwb3NpdGlvbjogXCJzdGF0aWNcIiB9O1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJPdGhlcihjc3NDbGFzc2VzOiBhbnkpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICA8U3VydmV5UXVlc3Rpb25Db21tZW50SXRlbVxuICAgICAgICAgIHF1ZXN0aW9uPXt0aGlzLnF1ZXN0aW9ufVxuICAgICAgICAgIG90aGVyQ3NzPXtjc3NDbGFzc2VzLm90aGVyfVxuICAgICAgICAgIGNzc0NsYXNzZXM9e2Nzc0NsYXNzZXN9XG4gICAgICAgICAgaXNEaXNwbGF5TW9kZT17dGhpcy5pc0Rpc3BsYXlNb2RlfVxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcml2YXRlIHJlbmRlckl0ZW0oXG4gICAga2V5OiBzdHJpbmcsXG4gICAgaXRlbTogSXRlbVZhbHVlLFxuICAgIHZhbHVlOiBhbnksXG4gICAgY3NzQ2xhc3NlczogYW55LFxuICAgIGluZGV4OiBzdHJpbmdcbiAgKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHJlbmRlcmVkSXRlbSA9IChcbiAgICAgIDxTdXJ2ZXlRdWVzdGlvblJhZGlvSXRlbVxuICAgICAgICBrZXk9e2tleX1cbiAgICAgICAgcXVlc3Rpb249e3RoaXMucXVlc3Rpb259XG4gICAgICAgIGNzc0NsYXNzZXM9e2Nzc0NsYXNzZXN9XG4gICAgICAgIGlzRGlzcGxheU1vZGU9e3RoaXMuaXNEaXNwbGF5TW9kZX1cbiAgICAgICAgaXRlbT17aXRlbX1cbiAgICAgICAgdGV4dFN0eWxlPXt0aGlzLnRleHRTdHlsZX1cbiAgICAgICAgaW5kZXg9e2luZGV4fVxuICAgICAgICBpc0NoZWNrZWQ9e3ZhbHVlID09PSBpdGVtLnZhbHVlfVxuICAgICAgLz5cbiAgICApO1xuICAgIGNvbnN0IHN1cnZleSA9IHRoaXMucXVlc3Rpb24uc3VydmV5IGFzIFN1cnZleU1vZGVsO1xuICAgIGxldCB3cmFwcGVkSXRlbSA9IG51bGw7XG4gICAgaWYgKCEhc3VydmV5KSB7XG4gICAgICB3cmFwcGVkSXRlbSA9IFJlYWN0U3VydmV5RWxlbWVudHNXcmFwcGVyLndyYXBJdGVtVmFsdWUoc3VydmV5LCByZW5kZXJlZEl0ZW0sIHRoaXMucXVlc3Rpb24sIGl0ZW0pO1xuICAgIH1cbiAgICByZXR1cm4gd3JhcHBlZEl0ZW0gPz8gcmVuZGVyZWRJdGVtO1xuICB9XG4gIHByaXZhdGUgZ2V0U3RhdGVWYWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiAhdGhpcy5xdWVzdGlvbi5pc0VtcHR5KCkgPyB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkVmFsdWUgOiBcIlwiO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvblJhZGlvSXRlbSBleHRlbmRzIFJlYWN0U3VydmV5RWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5oYW5kbGVPbkNoYW5nZSA9IHRoaXMuaGFuZGxlT25DaGFuZ2UuYmluZCh0aGlzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLml0ZW07XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvblJhZGlvZ3JvdXBNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMucXVlc3Rpb247XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBpdGVtKCk6IEl0ZW1WYWx1ZSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHRleHRTdHlsZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnRleHRTdHlsZTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGluZGV4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaW5kZXg7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBpc0NoZWNrZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXNDaGVja2VkO1xuICB9XG4gIHByaXZhdGUgZ2V0IGhpZGVDYXB0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmhpZGVDYXB0aW9uID09PSB0cnVlO1xuICB9XG4gIHB1YmxpYyBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzOiBhbnksIG5leHRTdGF0ZTogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKCFzdXBlci5zaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzLCBuZXh0U3RhdGUpKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIChcbiAgICAgICF0aGlzLnF1ZXN0aW9uLmN1c3RvbVdpZGdldCB8fFxuICAgICAgISF0aGlzLnF1ZXN0aW9uLmN1c3RvbVdpZGdldERhdGEuaXNOZWVkUmVuZGVyIHx8XG4gICAgICAhIXRoaXMucXVlc3Rpb24uY3VzdG9tV2lkZ2V0LndpZGdldEpzb24uaXNEZWZhdWx0UmVuZGVyIHx8XG4gICAgICAhIXRoaXMucXVlc3Rpb24uY3VzdG9tV2lkZ2V0LndpZGdldEpzb24ucmVuZGVyXG4gICAgKTtcbiAgfVxuICBoYW5kbGVPbkNoYW5nZShldmVudDogYW55KSB7XG4gICAgdGhpcy5xdWVzdGlvbi5yZW5kZXJlZFZhbHVlID0gdGhpcy5pdGVtLnZhbHVlO1xuICB9XG4gIHByb3RlY3RlZCBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5xdWVzdGlvbiAmJiAhIXRoaXMuaXRlbTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGl0ZW1UZXh0ID0gIXRoaXMuaGlkZUNhcHRpb25cbiAgICAgID8gdGhpcy5yZW5kZXJMb2NTdHJpbmcodGhpcy5pdGVtLmxvY1RleHQsIHRoaXMudGV4dFN0eWxlKVxuICAgICAgOiBcIlwiO1xuICAgIHZhciBpdGVtQ2xhc3MgPSB0aGlzLnF1ZXN0aW9uLmdldEl0ZW1DbGFzcyh0aGlzLml0ZW0pO1xuICAgIHZhciBsYWJlbENsYXNzID0gdGhpcy5xdWVzdGlvbi5nZXRMYWJlbENsYXNzKHRoaXMuaXRlbSk7XG4gICAgdmFyIGxvY1RleHQ6IGFueSA9IHRoaXMuaXRlbS5sb2NUZXh0O1xuICAgIHZhciBjb250cm9sTGFiZWxDbGFzcyA9IHRoaXMucXVlc3Rpb24uZ2V0Q29udHJvbExhYmVsQ2xhc3ModGhpcy5pdGVtKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17aXRlbUNsYXNzfVxuICAgICAgICByb2xlPVwicHJlc2VudGF0aW9uXCJcbiAgICAgID5cbiAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT17bGFiZWxDbGFzc30gYXJpYS1sYWJlbD17dGhpcy5xdWVzdGlvbi5nZXRBcmlhSXRlbUxhYmVsKHRoaXMuaXRlbSl9PlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgYXJpYS1kZXNjcmliZWRieT17dGhpcy5xdWVzdGlvbi5hcmlhRGVzY3JpYmVkQnl9XG4gICAgICAgICAgICBjbGFzc05hbWU9e3RoaXMuY3NzQ2xhc3Nlcy5pdGVtQ29udHJvbH1cbiAgICAgICAgICAgIGlkPXt0aGlzLnF1ZXN0aW9uLmdldEl0ZW1JZCh0aGlzLml0ZW0pfVxuICAgICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICAgIG5hbWU9e3RoaXMucXVlc3Rpb24ucXVlc3Rpb25OYW1lfVxuICAgICAgICAgICAgY2hlY2tlZD17dGhpcy5pc0NoZWNrZWR9XG4gICAgICAgICAgICB2YWx1ZT17dGhpcy5pdGVtLnZhbHVlfVxuICAgICAgICAgICAgZGlzYWJsZWQ9eyF0aGlzLnF1ZXN0aW9uLmdldEl0ZW1FbmFibGVkKHRoaXMuaXRlbSl9XG4gICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVPbkNoYW5nZX1cbiAgICAgICAgICAvPlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3NzQ2xhc3Nlcy5tYXRlcmlhbERlY29yYXRvciA/XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17dGhpcy5jc3NDbGFzc2VzLm1hdGVyaWFsRGVjb3JhdG9yfT5cbiAgICAgICAgICAgICAgICB7dGhpcy5xdWVzdGlvbi5pdGVtU3ZnSWNvbiA/XG4gICAgICAgICAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5jc3NDbGFzc2VzLml0ZW1EZWNvcmF0b3J9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDx1c2UgeGxpbmtIcmVmPXt0aGlzLnF1ZXN0aW9uLml0ZW1TdmdJY29ufT48L3VzZT5cbiAgICAgICAgICAgICAgICAgIDwvc3ZnPiA6XG4gICAgICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L3NwYW4+IDpcbiAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgIH1cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2NvbnRyb2xMYWJlbENsYXNzfT5cbiAgICAgICAgICAgIHtpdGVtVGV4dH1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3VydmV5LXJhZGlvZ3JvdXAtaXRlbVwiLCAocHJvcHM6IGFueSkgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvblJhZGlvSXRlbSwgcHJvcHMpO1xufSk7XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJyYWRpb2dyb3VwXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvblJhZGlvZ3JvdXAsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge1xuICBSZWFjdFN1cnZleUVsZW1lbnQsXG4gIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UsXG59IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25SYW5raW5nTW9kZWwsIFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuaW1wb3J0IHsgUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIgfSBmcm9tIFwiLi9yZWFjdHN1cnZleW1vZGVsXCI7XG5pbXBvcnQgeyBJdGVtVmFsdWUgfSBmcm9tIFwiLi4vaXRlbXZhbHVlXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvblJhbmtpbmcgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvblJhbmtpbmdNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFF1ZXN0aW9uUmFua2luZ01vZGVsO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5yb290Q2xhc3N9XG4gICAgICAgIHJlZj17KHJvb3QpID0+ICh0aGlzLmNvbnRyb2wgPSByb290KX1cbiAgICAgID5cbiAgICAgICAge3RoaXMuZ2V0SXRlbXMoKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0SXRlbXMoKTogQXJyYXk8YW55PiB7XG4gICAgY29uc3QgaXRlbXMgPSBbXTtcbiAgICBjb25zdCByYW5raW5nQ2hvaWNlcyA9IHRoaXMucXVlc3Rpb24ucmFua2luZ0Nob2ljZXM7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByYW5raW5nQ2hvaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgaXRlbSA9IHJhbmtpbmdDaG9pY2VzW2ldO1xuICAgICAgaXRlbXMucHVzaChcbiAgICAgICAgdGhpcy5yZW5kZXJJdGVtKFxuICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgaSxcbiAgICAgICAgICAoZXZlbnQ6IFBvaW50ZXJFdmVudCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5xdWVzdGlvbi5oYW5kbGVLZXlkb3duLmNhbGwodGhpcy5xdWVzdGlvbiwgZXZlbnQsIGl0ZW0pO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAgIGV2ZW50LnBlcnNpc3QoKTtcbiAgICAgICAgICAgIC8vZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb24uaGFuZGxlUG9pbnRlckRvd24uY2FsbChcbiAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbixcbiAgICAgICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgIGV2ZW50LmN1cnJlbnRUYXJnZXRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMsXG4gICAgICAgICAgdGhpcy5xdWVzdGlvbi5nZXRJdGVtQ2xhc3MoaXRlbSksXG4gICAgICAgICAgdGhpcy5xdWVzdGlvblxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gaXRlbXM7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVuZGVySXRlbShcbiAgICBpdGVtOiBJdGVtVmFsdWUsXG4gICAgaTogbnVtYmVyLFxuICAgIGhhbmRsZUtleWRvd246IChldmVudDogYW55KSA9PiB2b2lkLFxuICAgIGhhbmRsZVBvaW50ZXJEb3duOiAoZXZlbnQ6IFBvaW50ZXJFdmVudCkgPT4gdm9pZCxcbiAgICBjc3NDbGFzc2VzOiBhbnksXG4gICAgaXRlbUNsYXNzOiBzdHJpbmcsXG4gICAgcXVlc3Rpb246IFF1ZXN0aW9uUmFua2luZ01vZGVsXG4gICk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBrZXk6IHN0cmluZyA9IGl0ZW0udmFsdWUgKyBcIi1cIiArIGkgKyBcIi1pdGVtXCI7XG4gICAgY29uc3QgdGV4dDogSlNYLkVsZW1lbnQgPSB0aGlzLnJlbmRlckxvY1N0cmluZyhpdGVtLmxvY1RleHQpO1xuICAgIGNvbnN0IGluZGV4ID0gaTtcbiAgICBjb25zdCBpbmRleFRleHQ6IHN0cmluZyA9IHRoaXMucXVlc3Rpb24uZ2V0TnVtYmVyQnlJbmRleChpKTtcbiAgICBjb25zdCByZW5kZXJlZEl0ZW0gPSAoXG4gICAgICA8U3VydmV5UXVlc3Rpb25SYW5raW5nSXRlbVxuICAgICAgICBrZXk9e2tleX1cbiAgICAgICAgdGV4dD17dGV4dH1cbiAgICAgICAgaW5kZXg9e2luZGV4fVxuICAgICAgICBpbmRleFRleHQ9e2luZGV4VGV4dH1cbiAgICAgICAgaGFuZGxlS2V5ZG93bj17aGFuZGxlS2V5ZG93bn1cbiAgICAgICAgaGFuZGxlUG9pbnRlckRvd249e2hhbmRsZVBvaW50ZXJEb3dufVxuICAgICAgICBjc3NDbGFzc2VzPXtjc3NDbGFzc2VzfVxuICAgICAgICBpdGVtQ2xhc3M9e2l0ZW1DbGFzc31cbiAgICAgICAgcXVlc3Rpb249e3F1ZXN0aW9ufVxuICAgICAgLz5cbiAgICApO1xuICAgIGNvbnN0IHN1cnZleSA9IHRoaXMucXVlc3Rpb24uc3VydmV5IGFzIFN1cnZleU1vZGVsO1xuICAgIGxldCB3cmFwcGVkSXRlbSA9IG51bGw7XG4gICAgaWYgKCEhc3VydmV5KSB7XG4gICAgICB3cmFwcGVkSXRlbSA9IFJlYWN0U3VydmV5RWxlbWVudHNXcmFwcGVyLndyYXBJdGVtVmFsdWUoc3VydmV5LCByZW5kZXJlZEl0ZW0sIHRoaXMucXVlc3Rpb24sIGl0ZW0pO1xuICAgIH1cbiAgICByZXR1cm4gd3JhcHBlZEl0ZW0gPz8gcmVuZGVyZWRJdGVtO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvblJhbmtpbmdJdGVtIGV4dGVuZHMgUmVhY3RTdXJ2ZXlFbGVtZW50IHtcbiAgcHJvdGVjdGVkIGdldCB0ZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMudGV4dDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGluZGV4KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaW5kZXg7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBpbmRleFRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pbmRleFRleHQ7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBoYW5kbGVLZXlkb3duKCk6IChldmVudDogYW55KSA9PiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5oYW5kbGVLZXlkb3duO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgaGFuZGxlUG9pbnRlckRvd24oKTogKGV2ZW50OiBhbnkpID0+IHZvaWQge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmhhbmRsZVBvaW50ZXJEb3duO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgY3NzQ2xhc3NlcygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNzc0NsYXNzZXM7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBpdGVtQ2xhc3MoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtQ2xhc3M7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnF1ZXN0aW9uO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIHRhYkluZGV4PXswfVxuICAgICAgICBjbGFzc05hbWU9e3RoaXMuaXRlbUNsYXNzfVxuICAgICAgICBvbktleURvd249e3RoaXMuaGFuZGxlS2V5ZG93bn1cbiAgICAgICAgb25Qb2ludGVyRG93bj17dGhpcy5oYW5kbGVQb2ludGVyRG93bn1cbiAgICAgICAgZGF0YS1zdi1kcm9wLXRhcmdldC1yYW5raW5nLWl0ZW09e3RoaXMuaW5kZXh9XG4gICAgICA+XG4gICAgICAgIDxkaXYgdGFiSW5kZXg9ey0xfSBzdHlsZT17eyBvdXRsaW5lOiBcIm5vbmVcIiB9fT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5jc3NDbGFzc2VzLml0ZW1HaG9zdE5vZGV9IC8+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMuY3NzQ2xhc3Nlcy5pdGVtQ29udGVudH0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5jc3NDbGFzc2VzLml0ZW1JY29uQ29udGFpbmVyfT5cbiAgICAgICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgICAgIHdpZHRoPVwiMTBcIlxuICAgICAgICAgICAgICAgIGhlaWdodD1cIjE2XCJcbiAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDEwIDE2XCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0SWNvbkhvdmVyQ3NzKCl9XG4gICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTYgMkM2IDAuOSA2LjkgMCA4IDBDOS4xIDAgMTAgMC45IDEwIDJDMTAgMy4xIDkuMSA0IDggNEM2LjkgNCA2IDMuMSA2IDJaTTIgMEMwLjkgMCAwIDAuOSAwIDJDMCAzLjEgMC45IDQgMiA0QzMuMSA0IDQgMy4xIDQgMkM0IDAuOSAzLjEgMCAyIDBaTTggNkM2LjkgNiA2IDYuOSA2IDhDNiA5LjEgNi45IDEwIDggMTBDOS4xIDEwIDEwIDkuMSAxMCA4QzEwIDYuOSA5LjEgNiA4IDZaTTIgNkMwLjkgNiAwIDYuOSAwIDhDMCA5LjEgMC45IDEwIDIgMTBDMy4xIDEwIDQgOS4xIDQgOEM0IDYuOSAzLjEgNiAyIDZaTTggMTJDNi45IDEyIDYgMTIuOSA2IDE0QzYgMTUuMSA2LjkgMTYgOCAxNkM5LjEgMTYgMTAgMTUuMSAxMCAxNEMxMCAxMi45IDkuMSAxMiA4IDEyWk0yIDEyQzAuOSAxMiAwIDEyLjkgMCAxNEMwIDE1LjEgMC45IDE2IDIgMTZDMy4xIDE2IDQgMTUuMSA0IDE0QzQgMTIuOSAzLjEgMTIgMiAxMlpcIiAvPlxuICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgICAgIHdpZHRoPVwiMTBcIlxuICAgICAgICAgICAgICAgIGhlaWdodD1cIjI0XCJcbiAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDEwIDI0XCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0SWNvbkZvY3VzQ3NzKCl9XG4gICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEwIDVMNSAwTDAgNUg0VjlINlY1SDEwWlwiIC8+XG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk02IDE5VjE1SDRWMTlIMEw1IDI0TDEwIDE5SDZaXCIgLz5cbiAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMuY3NzQ2xhc3Nlcy5pdGVtSW5kZXh9Pnt0aGlzLmluZGV4VGV4dH08L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLmNzc0NsYXNzZXMuY29udHJvbExhYmVsfT57dGhpcy50ZXh0fTwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcInJhbmtpbmdcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uUmFua2luZywgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uQ29tbWVudEl0ZW0gfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2NvbW1lbnRcIjtcbmltcG9ydCB7IFF1ZXN0aW9uUmF0aW5nTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlbmRlcmVkUmF0aW5nSXRlbSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uUmF0aW5nIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5oYW5kbGVPbkNsaWNrID0gdGhpcy5oYW5kbGVPbkNsaWNrLmJpbmQodGhpcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvblJhdGluZ01vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25SYXRpbmdNb2RlbDtcbiAgfVxuICBoYW5kbGVPbkNsaWNrKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnF1ZXN0aW9uLnNldFZhbHVlRnJvbUNsaWNrKGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IHZhbHVlOiB0aGlzLnF1ZXN0aW9uLnZhbHVlIH0pO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgY3NzQ2xhc3NlcyA9IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3NlcztcbiAgICB2YXIgbWluVGV4dCA9IHRoaXMucXVlc3Rpb24ubWluUmF0ZURlc2NyaXB0aW9uXG4gICAgICA/IHRoaXMucmVuZGVyTG9jU3RyaW5nKHRoaXMucXVlc3Rpb24ubG9jTWluUmF0ZURlc2NyaXB0aW9uKVxuICAgICAgOiBudWxsO1xuICAgIHZhciBtYXhUZXh0ID0gdGhpcy5xdWVzdGlvbi5tYXhSYXRlRGVzY3JpcHRpb25cbiAgICAgID8gdGhpcy5yZW5kZXJMb2NTdHJpbmcodGhpcy5xdWVzdGlvbi5sb2NNYXhSYXRlRGVzY3JpcHRpb24pXG4gICAgICA6IG51bGw7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLnJhdGluZ1Jvb3RDc3N9IHJlZj17KGRpdikgPT4gKHRoaXMuY29udHJvbCA9IGRpdil9PlxuICAgICAgICA8ZmllbGRzZXQgcm9sZT1cInJhZGlvZ3JvdXBcIj5cbiAgICAgICAgICA8bGVnZW5kIHJvbGU9XCJwcmVzZW50YXRpb25cIiBjbGFzc05hbWU9e1wic3YtaGlkZGVuXCJ9PjwvbGVnZW5kPlxuICAgICAgICAgIHshIXRoaXMucXVlc3Rpb24uaGFzTWluTGFiZWwgPyA8c3BhbiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMubWluVGV4dH0+e21pblRleHR9PC9zcGFuPjogbnVsbH1cbiAgICAgICAgICB7dGhpcy5xdWVzdGlvbi5yZW5kZXJlZFJhdGVJdGVtcy5tYXAoKGl0ZW0sIGkpID0+IHRoaXMucmVuZGVySXRlbShcInZhbHVlXCIgKyBpLCBpdGVtLCBpLCBjc3NDbGFzc2VzKSl9XG4gICAgICAgICAgeyEhdGhpcy5xdWVzdGlvbi5oYXNNYXhMYWJlbCA/IDxzcGFuIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5tYXhUZXh0fT57bWF4VGV4dH08L3NwYW4+OiBudWxsfVxuICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVySXRlbShcbiAgICBrZXk6IHN0cmluZyxcbiAgICBpdGVtOiBSZW5kZXJlZFJhdGluZ0l0ZW0sXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBjc3NDbGFzc2VzOiBhbnlcbiAgKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBpdGVtVGV4dCA9IHRoaXMucmVuZGVyTG9jU3RyaW5nKGl0ZW0ubG9jVGV4dCk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxsYWJlbCBrZXk9e2tleX0gY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldEl0ZW1DbGFzcyhpdGVtLml0ZW1WYWx1ZSl9PlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgIGNsYXNzTmFtZT1cInN2LXZpc3VhbGx5aGlkZGVuXCJcbiAgICAgICAgICBuYW1lPXt0aGlzLnF1ZXN0aW9uLm5hbWV9XG4gICAgICAgICAgaWQ9e3RoaXMucXVlc3Rpb24uaW5wdXRJZCArIFwiX1wiICsgaW5kZXh9XG4gICAgICAgICAgdmFsdWU9e2l0ZW0udmFsdWV9XG4gICAgICAgICAgZGlzYWJsZWQ9e3RoaXMuaXNEaXNwbGF5TW9kZX1cbiAgICAgICAgICBjaGVja2VkPXt0aGlzLnF1ZXN0aW9uLnZhbHVlID09IGl0ZW0udmFsdWV9XG4gICAgICAgICAgb25DbGljaz17dGhpcy5oYW5kbGVPbkNsaWNrfVxuICAgICAgICAgIG9uQ2hhbmdlPXsoKT0+e319XG4gICAgICAgICAgYXJpYS1yZXF1aXJlZD17dGhpcy5xdWVzdGlvbi5hcmlhUmVxdWlyZWR9XG4gICAgICAgICAgYXJpYS1sYWJlbD17dGhpcy5xdWVzdGlvbi5hcmlhTGFiZWx9XG4gICAgICAgICAgYXJpYS1pbnZhbGlkPXt0aGlzLnF1ZXN0aW9uLmFyaWFJbnZhbGlkfVxuICAgICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9e3RoaXMucXVlc3Rpb24uYXJpYURlc2NyaWJlZEJ5fVxuICAgICAgICAvPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuaXRlbVRleHR9PntpdGVtVGV4dH08L3NwYW4+XG4gICAgICA8L2xhYmVsPlxuICAgICk7XG4gIH1cbn1cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJyYXRpbmdcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uUmF0aW5nLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25VbmNvbnRyb2xsZWRFbGVtZW50IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBRdWVzdGlvblRleHRNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uVGV4dCBleHRlbmRzIFN1cnZleVF1ZXN0aW9uVW5jb250cm9sbGVkRWxlbWVudDxcbiAgUXVlc3Rpb25UZXh0TW9kZWxcbj4ge1xuICBwcml2YXRlIF9pc1dhaXRpbmdGb3JFbnRlciA9IGZhbHNlO1xuICAvL2NvbnRyb2xSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MSW5wdXRFbGVtZW50PjtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICAvL3RoaXMuY29udHJvbFJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJJbnB1dCgpIHtcbiAgICBjb25zdCBpbnB1dENsYXNzID0gKHRoaXMucXVlc3Rpb24gYXMgUXVlc3Rpb25UZXh0TW9kZWwpLmdldENvbnRyb2xDbGFzcygpO1xuICAgIHZhciBvbktleURvd24gPSBudWxsO1xuICAgIHZhciBvbktleVVwID0gbnVsbDtcbiAgICB2YXIgb25Db21wb3NpdGlvblVwZGF0ZSA9IG51bGw7XG4gICAgaWYgKHRoaXMucXVlc3Rpb24uaXNJbnB1dFRleHRVcGRhdGUpIHtcbiAgICAgIG9uS2V5RG93biA9IChlOiBhbnkpID0+ICh0aGlzLl9pc1dhaXRpbmdGb3JFbnRlciA9IGUua2V5Q29kZSA9PT0gMjI5KTtcbiAgICAgIG9uS2V5VXAgPSAoZTogYW55KSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5faXNXYWl0aW5nRm9yRW50ZXIgfHwgZS5rZXlDb2RlID09PSAxMykge1xuICAgICAgICAgIHRoaXMudXBkYXRlVmFsdWVPbkV2ZW50KGUpO1xuICAgICAgICAgIHRoaXMuX2lzV2FpdGluZ0ZvckVudGVyID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBvbkNvbXBvc2l0aW9uVXBkYXRlID0gKGU6IGFueSkgPT4ge1xuICAgICAgICBlLnBlcnNpc3QoKTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy51cGRhdGVWYWx1ZU9uRXZlbnQoZSk7XG4gICAgICAgIH0sIDEpO1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy9odHRwczovL2dpdGh1Yi5jb20vc3VydmV5anMvc3VydmV5LWxpYnJhcnkvaXNzdWVzLzMzODRcbiAgICAgIG9uS2V5VXAgPSAoZTogYW55KSA9PiB7XG4gICAgICAgIGlmIChlLmtleUNvZGUgPT09IDEzKSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVWYWx1ZU9uRXZlbnQoZSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIG9uQ2hhbmdlID0gKGU6IGFueSkgPT4ge1xuICAgICAgaWYgKGUudGFyZ2V0ID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50KSB7XG4gICAgICAgIGlmICh0aGlzLnF1ZXN0aW9uLmlzSW5wdXRUZXh0VXBkYXRlKSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVWYWx1ZU9uRXZlbnQoZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudXBkYXRlVmFsdWVPbkV2ZW50KGUpO1xuICAgICAgfVxuICAgIH07XG4gICAgdmFyIHBsYWNlSG9sZGVyID0gdGhpcy5xdWVzdGlvbi5yZW5kZXJlZFBsYWNlSG9sZGVyO1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLmlzUmVhZE9ubHlSZW5kZXJEaXYoKSkge1xuICAgICAgcmV0dXJuIDxkaXY+e3RoaXMucXVlc3Rpb24udmFsdWV9PC9kaXY+O1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPGlucHV0XG4gICAgICAgIGlkPXt0aGlzLnF1ZXN0aW9uLmlucHV0SWR9XG4gICAgICAgIGRpc2FibGVkPXt0aGlzLmlzRGlzcGxheU1vZGV9XG4gICAgICAgIGNsYXNzTmFtZT17aW5wdXRDbGFzc31cbiAgICAgICAgdHlwZT17dGhpcy5xdWVzdGlvbi5pbnB1dFR5cGV9XG4gICAgICAgIC8vcmVmPXt0aGlzLmNvbnRyb2xSZWZ9XG4gICAgICAgIHJlZj17KGlucHV0KSA9PiAodGhpcy5jb250cm9sID0gaW5wdXQpfVxuICAgICAgICBzdHlsZT17dGhpcy5xdWVzdGlvbi5pbnB1dFN0eWxlfVxuICAgICAgICBtYXhMZW5ndGg9e3RoaXMucXVlc3Rpb24uZ2V0TWF4TGVuZ3RoKCl9XG4gICAgICAgIG1pbj17dGhpcy5xdWVzdGlvbi5yZW5kZXJlZE1pbn1cbiAgICAgICAgbWF4PXt0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkTWF4fVxuICAgICAgICBzdGVwPXt0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkU3RlcH1cbiAgICAgICAgc2l6ZT17dGhpcy5xdWVzdGlvbi5pbnB1dFNpemV9XG4gICAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZUhvbGRlcn1cbiAgICAgICAgbGlzdD17dGhpcy5xdWVzdGlvbi5kYXRhTGlzdElkfVxuICAgICAgICBhdXRvQ29tcGxldGU9e3RoaXMucXVlc3Rpb24uYXV0b0NvbXBsZXRlfVxuICAgICAgICBvbkJsdXI9e3RoaXMudXBkYXRlVmFsdWVPbkV2ZW50fVxuICAgICAgICBvbkNoYW5nZT17b25DaGFuZ2V9XG4gICAgICAgIG9uS2V5VXA9e29uS2V5VXB9XG4gICAgICAgIG9uS2V5RG93bj17b25LZXlEb3dufVxuICAgICAgICBvbkNvbXBvc2l0aW9uVXBkYXRlPXtvbkNvbXBvc2l0aW9uVXBkYXRlfVxuICAgICAgICBhcmlhLXJlcXVpcmVkPXt0aGlzLnF1ZXN0aW9uLmFyaWFSZXF1aXJlZH1cbiAgICAgICAgYXJpYS1sYWJlbD17dGhpcy5xdWVzdGlvbi5hcmlhTGFiZWx9XG4gICAgICAgIGFyaWEtaW52YWxpZD17dGhpcy5xdWVzdGlvbi5hcmlhSW52YWxpZH1cbiAgICAgICAgYXJpYS1kZXNjcmliZWRieT17dGhpcy5xdWVzdGlvbi5hcmlhRGVzY3JpYmVkQnl9XG4gICAgICAvPlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnF1ZXN0aW9uLmRhdGFMaXN0SWQgP1xuICAgICAgICA8ZGl2PlxuICAgICAgICAgIHsgdGhpcy5yZW5kZXJJbnB1dCgpIH1cbiAgICAgICAgICB7IHRoaXMucmVuZGVyRGF0YUxpc3QoKSB9XG4gICAgICAgIDwvZGl2PjpcbiAgICAgICAgdGhpcy5yZW5kZXJJbnB1dCgpXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIHJlbmRlckRhdGFMaXN0KCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMucXVlc3Rpb24uZGF0YUxpc3RJZCkgcmV0dXJuIG51bGw7XG4gICAgdmFyIGl0ZW1zID0gdGhpcy5xdWVzdGlvbi5kYXRhTGlzdDtcbiAgICBpZiAoaXRlbXMubGVuZ3RoID09IDApIHJldHVybiBudWxsO1xuICAgIHZhciBvcHRpb25zID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgb3B0aW9ucy5wdXNoKDxvcHRpb24ga2V5PXtcIml0ZW1cIitpfSB2YWx1ZT17aXRlbXNbaV19Pjwvb3B0aW9uPik7XG4gICAgfVxuICAgIHJldHVybiA8ZGF0YWxpc3QgaWQ9e3RoaXMucXVlc3Rpb24uZGF0YUxpc3RJZH0+e29wdGlvbnN9PC9kYXRhbGlzdD47XG4gIH1cbiAgLy8gcHJvdGVjdGVkIHVwZGF0ZURvbUVsZW1lbnQoKSB7XG4gIC8vICAgdGhpcy5jb250cm9sID0gdGhpcy5jb250cm9sUmVmLmN1cnJlbnQ7XG4gIC8vICAgc3VwZXIudXBkYXRlRG9tRWxlbWVudCgpO1xuICAvLyB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJ0ZXh0XCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvblRleHQsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0IHsgU3VydmV5TW9kZWwsIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwsIFN1cnZleVdpbmRvd01vZGVsLCBTdXJ2ZXlFbGVtZW50LCBRdWVzdGlvblJvd01vZGVsLCBJdGVtVmFsdWUsIFF1ZXN0aW9uU2VsZWN0QmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuL2VsZW1lbnQtZmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIge1xuICBwdWJsaWMgc3RhdGljIHdyYXBSb3coc3VydmV5OiBTdXJ2ZXlNb2RlbCwgZWxlbWVudDogSlNYLkVsZW1lbnQsIHJvdzogUXVlc3Rpb25Sb3dNb2RlbCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBjb21wb25lbnROYW1lID0gc3VydmV5LmdldFJvd1dyYXBwZXJDb21wb25lbnROYW1lKHJvdyk7XG4gICAgY29uc3QgY29tcG9uZW50RGF0YSA9IHN1cnZleS5nZXRSb3dXcmFwcGVyQ29tcG9uZW50RGF0YShyb3cpO1xuICAgIHJldHVybiBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoY29tcG9uZW50TmFtZSwge1xuICAgICAgZWxlbWVudCxcbiAgICAgIHJvdyxcbiAgICAgIGNvbXBvbmVudERhdGEsXG4gICAgfSk7XG4gIH1cbiAgcHVibGljIHN0YXRpYyB3cmFwRWxlbWVudChzdXJ2ZXk6IFN1cnZleU1vZGVsLCBlbGVtZW50OiBKU1guRWxlbWVudCwgcXVlc3Rpb246IFN1cnZleUVsZW1lbnQpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgY29tcG9uZW50TmFtZSA9IHN1cnZleS5nZXRFbGVtZW50V3JhcHBlckNvbXBvbmVudE5hbWUocXVlc3Rpb24pO1xuICAgIGNvbnN0IGNvbXBvbmVudERhdGEgPSBzdXJ2ZXkuZ2V0RWxlbWVudFdyYXBwZXJDb21wb25lbnREYXRhKHF1ZXN0aW9uKTtcbiAgICByZXR1cm4gUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KGNvbXBvbmVudE5hbWUsIHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBxdWVzdGlvbixcbiAgICAgIGNvbXBvbmVudERhdGEsXG4gICAgfSk7XG4gIH1cbiAgcHVibGljIHN0YXRpYyB3cmFwUXVlc3Rpb25Db250ZW50KHN1cnZleTogU3VydmV5TW9kZWwsIGVsZW1lbnQ6IEpTWC5FbGVtZW50LCBxdWVzdGlvbjogU3VydmV5RWxlbWVudCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBjb21wb25lbnROYW1lID0gc3VydmV5LmdldFF1ZXN0aW9uQ29udGVudFdyYXBwZXJDb21wb25lbnROYW1lKHF1ZXN0aW9uKTtcbiAgICBjb25zdCBjb21wb25lbnREYXRhID0gc3VydmV5LmdldEVsZW1lbnRXcmFwcGVyQ29tcG9uZW50RGF0YShxdWVzdGlvbik7XG4gICAgcmV0dXJuIFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChjb21wb25lbnROYW1lLCB7XG4gICAgICBlbGVtZW50LFxuICAgICAgcXVlc3Rpb24sXG4gICAgICBjb21wb25lbnREYXRhLFxuICAgIH0pO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgd3JhcEl0ZW1WYWx1ZShzdXJ2ZXk6IFN1cnZleU1vZGVsLCBlbGVtZW50OiBKU1guRWxlbWVudCwgcXVlc3Rpb246IFF1ZXN0aW9uU2VsZWN0QmFzZSwgaXRlbTogSXRlbVZhbHVlKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGNvbXBvbmVudE5hbWUgPSBzdXJ2ZXkuZ2V0SXRlbVZhbHVlV3JhcHBlckNvbXBvbmVudE5hbWUoaXRlbSwgcXVlc3Rpb24pO1xuICAgIGNvbnN0IGNvbXBvbmVudERhdGEgPSBzdXJ2ZXkuZ2V0SXRlbVZhbHVlV3JhcHBlckNvbXBvbmVudERhdGEoaXRlbSwgcXVlc3Rpb24pO1xuICAgIHJldHVybiBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoY29tcG9uZW50TmFtZSwge1xuICAgICAga2V5OiBlbGVtZW50LmtleSxcbiAgICAgIGVsZW1lbnQsXG4gICAgICBxdWVzdGlvbixcbiAgICAgIGl0ZW0sXG4gICAgICBjb21wb25lbnREYXRhLFxuICAgIH0pO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgd3JhcE1hdHJpeENlbGwoc3VydmV5OiBTdXJ2ZXlNb2RlbCwgZWxlbWVudDogSlNYLkVsZW1lbnQsIGNlbGw6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwsIHJlYXNvbjogc3RyaW5nID0gXCJjZWxsXCIpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgY29tcG9uZW50TmFtZSA9IHN1cnZleS5nZXRFbGVtZW50V3JhcHBlckNvbXBvbmVudE5hbWUoY2VsbCwgcmVhc29uKTtcbiAgICBjb25zdCBjb21wb25lbnREYXRhID0gc3VydmV5LmdldEVsZW1lbnRXcmFwcGVyQ29tcG9uZW50RGF0YShjZWxsLCByZWFzb24pO1xuICAgIHJldHVybiBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoY29tcG9uZW50TmFtZSwge1xuICAgICAgZWxlbWVudCxcbiAgICAgIGNlbGwsXG4gICAgICBjb21wb25lbnREYXRhLFxuICAgIH0pO1xuICB9XG59XG5cblN1cnZleU1vZGVsLnBsYXRmb3JtID0gXCJyZWFjdFwiO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBCYXNlLCBTdXJ2ZXlUaW1lck1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFN1cnZleUVsZW1lbnQgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVRpbWVyUGFuZWwgZXh0ZW5kcyBSZWFjdFN1cnZleUVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMudGltZXJNb2RlbDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHRpbWVyTW9kZWwoKTogU3VydmV5VGltZXJNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMudGltZXJNb2RlbDtcbiAgfVxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17dGhpcy50aW1lck1vZGVsLnN1cnZleS5nZXRDc3MoKS50aW1lclJvb3R9Pnt0aGlzLnRpbWVyTW9kZWwudGV4dH08L2Rpdj47XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgSVN1cnZleUNyZWF0b3IgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uXCI7XG5pbXBvcnQgeyBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUXVlc3Rpb25Sb3dNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IElFbGVtZW50LCBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4vZWxlbWVudC1mYWN0b3J5XCI7XG5pbXBvcnQgeyBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlciB9IGZyb20gXCIuL3JlYWN0c3VydmV5bW9kZWxcIjtcbmltcG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSBcIi4uL3F1ZXN0aW9uXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlSb3cgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxhbnksIGFueT4ge1xuICBwcml2YXRlIHJvb3RSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5yb290UmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gICAgdGhpcy5yZWNhbGN1bGF0ZUNzcygpO1xuICB9XG4gIHByaXZhdGUgcmVjYWxjdWxhdGVDc3MoKSB7XG4gICAgdGhpcy5yb3cudmlzaWJsZUVsZW1lbnRzLm1hcChlbGVtZW50ID0+IChlbGVtZW50IGFzIFF1ZXN0aW9uKS5jc3NDbGFzc2VzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnJvdztcbiAgfVxuICBwcml2YXRlIGdldCByb3coKTogUXVlc3Rpb25Sb3dNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMucm93O1xuICB9XG4gIHByaXZhdGUgZ2V0IHN1cnZleSgpOiBTdXJ2ZXlNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuc3VydmV5O1xuICB9XG4gIHByaXZhdGUgZ2V0IGNyZWF0b3IoKTogSVN1cnZleUNyZWF0b3Ige1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNyZWF0b3I7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBjc3MoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jc3M7XG4gIH1cbiAgcHJvdGVjdGVkIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLnJvdyAmJiAhIXRoaXMuc3VydmV5ICYmICEhdGhpcy5jcmVhdG9yICYmIHRoaXMucm93LnZpc2libGU7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnRDb250ZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgZWxlbWVudHMgPSBudWxsO1xuICAgIGVsZW1lbnRzID0gdGhpcy5yb3cudmlzaWJsZUVsZW1lbnRzLm1hcCgoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IGlubmVyRWxlbWVudCA9IHRoaXMuY3JlYXRlRWxlbWVudChlbGVtZW50LCBpbmRleCk7XG4gICAgICBjb25zdCBjc3MgPSAoZWxlbWVudCBhcyBRdWVzdGlvbikuY3NzQ2xhc3Nlc1ZhbHVlO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17Y3NzLnF1ZXN0aW9uV3JhcHBlcn1cbiAgICAgICAgICBzdHlsZT17KGVsZW1lbnQgYXMgYW55KS5yb290U3R5bGV9XG4gICAgICAgICAgZGF0YS1rZXk9e2lubmVyRWxlbWVudC5rZXl9XG4gICAgICAgICAga2V5PXtpbm5lckVsZW1lbnQua2V5fVxuICAgICAgICAgIG9uRm9jdXM9eyhlbGVtZW50IGFzIFF1ZXN0aW9uKS5mb2N1c0lufVxuICAgICAgICA+XG4gICAgICAgICAge3RoaXMucm93LmlzTmVlZFJlbmRlciA/IGlubmVyRWxlbWVudCA6IFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChlbGVtZW50LnNrZWxldG9uQ29tcG9uZW50TmFtZSwgeyBlbGVtZW50OiBlbGVtZW50LCBjc3M6IHRoaXMuY3NzLCB9KX1cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgcmVmPXt0aGlzLnJvb3RSZWZ9IGNsYXNzTmFtZT17dGhpcy5yb3cuZ2V0Um93Q3NzKCl9ID5cbiAgICAgICAge2VsZW1lbnRzfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3Qgc3VydmV5OiBTdXJ2ZXlNb2RlbCA9IHRoaXMuc3VydmV5IGFzIFN1cnZleU1vZGVsO1xuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLnJlbmRlckVsZW1lbnRDb250ZW50KCk7XG4gICAgY29uc3Qgd3JhcHBlciA9IFJlYWN0U3VydmV5RWxlbWVudHNXcmFwcGVyLndyYXBSb3coc3VydmV5LCBjb250ZW50LCB0aGlzLnJvdyk7XG4gICAgcmV0dXJuIHdyYXBwZXIgfHwgY29udGVudDtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIHZhciBlbCA9IHRoaXMucm9vdFJlZi5jdXJyZW50O1xuICAgIGlmICghIWVsICYmICF0aGlzLnJvdy5pc05lZWRSZW5kZXIpIHtcbiAgICAgIHZhciByb3dDb250YWluZXJEaXYgPSBlbDtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnJvdy5zdGFydExhenlSZW5kZXJpbmcocm93Q29udGFpbmVyRGl2KTtcbiAgICAgIH0sIDEwKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIHNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHM6IGFueSwgbmV4dFN0YXRlOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoIXN1cGVyLnNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHMsIG5leHRTdGF0ZSkpIHJldHVybiBmYWxzZTtcblxuICAgIGlmIChuZXh0UHJvcHMucm93ICE9PSB0aGlzLnJvdykge1xuICAgICAgbmV4dFByb3BzLnJvdy5pc05lZWRSZW5kZXIgPSB0aGlzLnJvdy5pc05lZWRSZW5kZXI7XG4gICAgICB0aGlzLnN0b3BMYXp5UmVuZGVyaW5nKCk7XG4gICAgfVxuICAgIHRoaXMucmVjYWxjdWxhdGVDc3MoKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwcml2YXRlIHN0b3BMYXp5UmVuZGVyaW5nKCkge1xuICAgIHRoaXMucm93LnN0b3BMYXp5UmVuZGVyaW5nKCk7XG4gICAgdGhpcy5yb3cuaXNOZWVkUmVuZGVyID0gIXRoaXMucm93LmlzTGF6eVJlbmRlcmluZygpO1xuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAgdGhpcy5zdG9wTGF6eVJlbmRlcmluZygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNyZWF0ZUVsZW1lbnQoZWxlbWVudDogSUVsZW1lbnQsIGVsZW1lbnRJbmRleD86IG51bWJlcik6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBpbmRleCA9IGVsZW1lbnRJbmRleCA/IFwiLVwiICsgZWxlbWVudEluZGV4IDogMDtcbiAgICB2YXIgZWxlbWVudFR5cGUgPSBlbGVtZW50LmdldFR5cGUoKTtcbiAgICBpZiAoIVJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuaXNFbGVtZW50UmVnaXN0ZXJlZChlbGVtZW50VHlwZSkpIHtcbiAgICAgIGVsZW1lbnRUeXBlID0gXCJxdWVzdGlvblwiO1xuICAgIH1cbiAgICByZXR1cm4gUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KGVsZW1lbnRUeXBlLCB7XG4gICAgICBrZXk6IGVsZW1lbnQubmFtZSArIGluZGV4LFxuICAgICAgZWxlbWVudDogZWxlbWVudCxcbiAgICAgIGNyZWF0b3I6IHRoaXMuY3JlYXRvcixcbiAgICAgIHN1cnZleTogdGhpcy5zdXJ2ZXksXG4gICAgICBjc3M6IHRoaXMuY3NzLFxuICAgIH0pO1xuICB9XG59XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFF1ZXN0aW9uU2lnbmF0dXJlUGFkTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5pbXBvcnQgeyBTdmdJY29uIH0gZnJvbSBcIi4vY29tcG9uZW50cy9zdmctaWNvbi9zdmctaWNvblwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25TaWduYXR1cmVQYWQgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN0YXRlID0geyB2YWx1ZTogdGhpcy5xdWVzdGlvbi52YWx1ZSB9O1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25TaWduYXR1cmVQYWRNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFF1ZXN0aW9uU2lnbmF0dXJlUGFkTW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBjc3NDbGFzc2VzID0gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5yb290fSByZWY9eyhyb290KSA9PiAodGhpcy5jb250cm9sID0gcm9vdCl9IHN0eWxlPXt7IGhlaWdodDogdGhpcy5xdWVzdGlvbi5oZWlnaHQsIHdpZHRoOiB0aGlzLnF1ZXN0aW9uLndpZHRoIH19PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLnBsYWNlaG9sZGVyfVxuICAgICAgICAgIHN0eWxlPXt7IGRpc3BsYXk6IHRoaXMucXVlc3Rpb24ubmVlZFNob3dQbGFjZWhvbGRlcigpID8gXCJcIiA6IFwibm9uZVwiIH19XG4gICAgICAgID5cbiAgICAgICAgICB7dGhpcy5xdWVzdGlvbi5wbGFjZUhvbGRlclRleHR9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxjYW52YXMgdGFiSW5kZXg9ezB9PjwvY2FudmFzPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuY29udHJvbHN9PlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLmNsZWFyQnV0dG9ufVxuICAgICAgICAgICAgdGl0bGU9e3RoaXMucXVlc3Rpb24uY2xlYXJCdXR0b25DYXB0aW9ufVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuY2xlYXJCdXR0b25JY29uSWQgPyA8U3ZnSWNvbiBpY29uTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmNsZWFyQnV0dG9uSWNvbklkfSBzaXplPXtcImF1dG9cIn0+PC9TdmdJY29uPiA6IDxzcGFuPuKcljwvc3Bhbj59XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwic2lnbmF0dXJlcGFkXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvblNpZ25hdHVyZVBhZCwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCB7IExvY2FsaXphYmxlU3RyaW5nIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XHJcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi9lbGVtZW50LWZhY3RvcnlcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlMb2NTdHJpbmdFZGl0b3IgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8YW55LCBhbnk+IHtcclxuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XHJcbiAgICBzdXBlcihwcm9wcyk7XHJcbiAgICB0aGlzLnN0YXRlID0geyBjaGFuZ2VkOiAwIH07XHJcbiAgfVxyXG4gIHByaXZhdGUgZ2V0IGxvY1N0cigpOiBMb2NhbGl6YWJsZVN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5sb2NTdHI7XHJcbiAgfVxyXG4gIHByaXZhdGUgZ2V0IHN0eWxlKCk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5zdHlsZTtcclxuICB9XHJcbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XHJcbiAgICBpZiAoIXRoaXMubG9jU3RyKSByZXR1cm47XHJcbiAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICB0aGlzLmxvY1N0ci5vbkNoYW5nZWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHNlbGYuc2V0U3RhdGUoeyBjaGFuZ2VkOiBzZWxmLnN0YXRlLmNoYW5nZWQgKyAxIH0pO1xyXG4gICAgfTtcclxuICB9XHJcbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XHJcbiAgICBpZiAoIXRoaXMubG9jU3RyKSByZXR1cm47XHJcbiAgICB0aGlzLmxvY1N0ci5vbkNoYW5nZWQgPSBmdW5jdGlvbiAoKSB7fTtcclxuICB9XHJcbiAgb25JbnB1dCA9IChldmVudDogYW55KSA9PiB7XHJcbiAgICB0aGlzLmxvY1N0ci50ZXh0ID0gZXZlbnQudGFyZ2V0LmlubmVyVGV4dDtcclxuICB9O1xyXG4gIG9uQ2xpY2sgPSAoZXZlbnQ6IGFueSkgPT4ge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gIH07XHJcbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcclxuICAgIGlmICghdGhpcy5sb2NTdHIpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5sb2NTdHIuaGFzSHRtbCkge1xyXG4gICAgICBjb25zdCBodG1sVmFsdWUgPSB7IF9faHRtbDogdGhpcy5sb2NTdHIucmVuZGVyZWRIdG1sIH07XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgPHNwYW5cclxuICAgICAgICAgIGNsYXNzTmFtZT1cInN2LXN0cmluZy1lZGl0b3JcIlxyXG4gICAgICAgICAgY29udGVudEVkaXRhYmxlPVwidHJ1ZVwiXHJcbiAgICAgICAgICBzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmc9e3RydWV9XHJcbiAgICAgICAgICBzdHlsZT17dGhpcy5zdHlsZX1cclxuICAgICAgICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXtodG1sVmFsdWV9XHJcbiAgICAgICAgICBvbkJsdXI9e3RoaXMub25JbnB1dH1cclxuICAgICAgICAgIG9uQ2xpY2s9e3RoaXMub25DbGlja31cclxuICAgICAgICAvPlxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIChcclxuICAgICAgPHNwYW5cclxuICAgICAgICBjbGFzc05hbWU9XCJzdi1zdHJpbmctZWRpdG9yXCJcclxuICAgICAgICBjb250ZW50RWRpdGFibGU9XCJ0cnVlXCJcclxuICAgICAgICBzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmc9e3RydWV9XHJcbiAgICAgICAgc3R5bGU9e3RoaXMuc3R5bGV9XHJcbiAgICAgICAgb25CbHVyPXt0aGlzLm9uSW5wdXR9XHJcbiAgICAgICAgb25DbGljaz17dGhpcy5vbkNsaWNrfVxyXG4gICAgICA+XHJcbiAgICAgICAge3RoaXMubG9jU3RyLnJlbmRlcmVkSHRtbH1cclxuICAgICAgPC9zcGFuPlxyXG4gICAgKTtcclxuICB9XHJcbn1cclxuXHJcblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxyXG4gIExvY2FsaXphYmxlU3RyaW5nLmVkaXRhYmxlUmVuZGVyZXIsXHJcbiAgKHByb3BzKSA9PiB7XHJcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlMb2NTdHJpbmdFZGl0b3IsIHByb3BzKTtcclxuICB9XHJcbik7XHJcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IHsgTG9jYWxpemFibGVTdHJpbmcgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcclxuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuL2VsZW1lbnQtZmFjdG9yeVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleUxvY1N0cmluZ1ZpZXdlciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxhbnksIGFueT4ge1xyXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcclxuICAgIHN1cGVyKHByb3BzKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBnZXQgbG9jU3RyKCk6IExvY2FsaXphYmxlU3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnByb3BzLmxvY1N0cjtcclxuICB9XHJcbiAgcHJpdmF0ZSBnZXQgc3R5bGUoKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLnByb3BzLnN0eWxlO1xyXG4gIH1cclxuICBjb21wb25lbnREaWRNb3VudCgpIHtcclxuICAgIHRoaXMucmVhY3RPblN0ckNoYW5nZWQoKTtcclxuICB9XHJcbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XHJcbiAgICBpZiAoIXRoaXMubG9jU3RyKSByZXR1cm47XHJcbiAgICB0aGlzLmxvY1N0ci5vbkNoYW5nZWQgPSBmdW5jdGlvbiAoKSB7fTtcclxuICB9XHJcbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogYW55LCBwcmV2U3RhdGU6IGFueSkge1xyXG4gICAgaWYoISFwcmV2UHJvcHMubG9jU3RyKSB7XHJcbiAgICAgIHByZXZQcm9wcy5sb2NTdHIub25DaGFuZ2VkID0gKCkgPT4ge307XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlYWN0T25TdHJDaGFuZ2VkKCk7XHJcbiAgfVxyXG4gIHByaXZhdGUgcmVhY3RPblN0ckNoYW5nZWQoKSB7XHJcbiAgICBpZiAoIXRoaXMubG9jU3RyKSByZXR1cm47XHJcbiAgICB0aGlzLmxvY1N0ci5vbkNoYW5nZWQgPSAoKSA9PiB7XHJcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBjaGFuZ2VkOiAhIXRoaXMuc3RhdGUgJiYgdGhpcy5zdGF0ZS5jaGFuZ2VkID8gdGhpcy5zdGF0ZS5jaGFuZ2VkICsgMSA6IDEgfSk7XHJcbiAgICB9O1xyXG4gIH1cclxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xyXG4gICAgaWYgKCF0aGlzLmxvY1N0cikgcmV0dXJuIG51bGw7XHJcbiAgICBpZiAodGhpcy5sb2NTdHIuaGFzSHRtbCkge1xyXG4gICAgICBsZXQgaHRtbFZhbHVlID0geyBfX2h0bWw6IHRoaXMubG9jU3RyLnJlbmRlcmVkSHRtbCB9O1xyXG4gICAgICByZXR1cm4gPHNwYW4gY2xhc3NOYW1lPVwic3Ytc3RyaW5nLXZpZXdlclwiIHN0eWxlPXt0aGlzLnN0eWxlfSBkYW5nZXJvdXNseVNldElubmVySFRNTD17aHRtbFZhbHVlfSAvPjtcclxuICAgIH1cclxuICAgIHJldHVybiA8c3BhbiBjbGFzc05hbWU9XCJzdi1zdHJpbmctdmlld2VyXCIgc3R5bGU9e3RoaXMuc3R5bGV9Pnt0aGlzLmxvY1N0ci5yZW5kZXJlZEh0bWx9PC9zcGFuPjtcclxuICB9XHJcbn1cclxuXHJcblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxyXG4gIExvY2FsaXphYmxlU3RyaW5nLmRlZmF1bHRSZW5kZXJlcixcclxuICAocHJvcHMpID0+IHtcclxuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleUxvY1N0cmluZ1ZpZXdlciwgcHJvcHMpO1xyXG4gIH1cclxuKTtcclxuIiwiLyoqXG4gKiBHbG9iYWwgc3VydmV5IHNldHRpbmdzXG4gKi9cbmV4cG9ydCB2YXIgc2V0dGluZ3MgPSB7XG4gIC8qKlxuICAgKiBPcHRpb25zIGZvciBTdXJ2ZXlKUyBjb21wYXJhdG9yLiBCeSBkZWZhdWx0IHdlIHRyaW0gc3RyaW5ncyBhbmQgY29tcGFyZSB0aGVtIGFzIGNhc2UgaW5zZW5zaXRpdmUuIFRvIGNoYW5nZSB0aGUgYmVoYXZpb3IgeW91IGNhbiB1c2UgZm9sbG93aW5nIGNvZGU6XG4gICAqIHNldHRpbmdzLmNvbXBhcmF0b3IudHJpbVN0cmluZ3MgPSBmYWxzZTsgLy9cImFiYyBcIiB3aWxsIG5vdCBlcXVhbCB0byBcImFiY1wiLiBUaGV5IGFyZSBlcXVhbCBieSBkZWZhdWx0LlxuICAgKiBzZXR0aW5ncy5jb21wYXJhdG9yLmNhc2VTZW5zaXRpdmUgPSB0cnVlOyAvL1wiYWJjIFwiIHdpbGwgbm90IGVxdWFsIHRvIFwiQWJjXCIuIFRoZXkgYXJlIGVxdWFsIGJ5IGRlZmF1bHQuXG4gICAqL1xuICBjb21wYXJhdG9yOiB7XG4gICAgdHJpbVN0cmluZ3M6IHRydWUsXG4gICAgY2FzZVNlbnNpdGl2ZTogZmFsc2VcbiAgfSxcbiAgLyoqXG4gICAqIFRoZSBwcmVmaXggdGhhdCB1c2VzIHRvIHN0b3JlIHRoZSBxdWVzdGlvbiBjb21tZW50LCBhcyB7cXVlc3Rpb25OYW1lfSArIHtjb21tZW50UHJlZml4fS5cbiAgICogVGhlIGRlZmF1bHRcbiAgICovXG4gIGNvbW1lbnRQcmVmaXg6IFwiLUNvbW1lbnRcIixcbiAgLyoqXG4gICAqIEVuY29kZSBwYXJhbWV0ZXIgb24gY2FsbGluZyByZXN0ZnVsIHdlYiBBUElcbiAgICovXG4gIHdlYnNlcnZpY2VFbmNvZGVQYXJhbWV0ZXJzOiB0cnVlLFxuICAvKipcbiAgICogQ2FjaGUgdGhlIHJlc3VsdCBmb3IgY2hvaWNlcyBnZXR0aW5nIGZyb20gd2ViIHNlcnZpY2VzLiBTZXQgdGhpcyBwcm9wZXJ0eSB0byBmYWxzZSwgdG8gZGlzYWJsZSB0aGUgY2FjaGluZy5cbiAgICovXG4gIHVzZUNhY2hpbmdGb3JDaG9pY2VzUmVzdGZ1bDogdHJ1ZSxcbiAgZ2V0IHVzZUNhY2hpbmdGb3JDaG9pY2VzUmVzdGZ1bGwoKSB7XG4gICAgcmV0dXJuIHNldHRpbmdzLnVzZUNhY2hpbmdGb3JDaG9pY2VzUmVzdGZ1bDtcbiAgfSxcbiAgc2V0IHVzZUNhY2hpbmdGb3JDaG9pY2VzUmVzdGZ1bGwodmFsOiBib29sZWFuKSB7XG4gICAgc2V0dGluZ3MudXNlQ2FjaGluZ0ZvckNob2ljZXNSZXN0ZnVsID0gdmFsO1xuICB9LFxuICAvKipcbiAgICogU3VydmV5SlMgd2ViIHNlcnZpY2UgQVBJIHVybFxuICAgKi9cbiAgc3VydmV5U2VydmljZVVybDogXCJodHRwczovL2FwaS5zdXJ2ZXlqcy5pby9wdWJsaWMvdjEvU3VydmV5XCIsXG4gIC8qKlxuICAgKiBzZXBhcmF0b3IgdGhhdCBjYW4gYWxsb3cgdG8gc2V0IHZhbHVlIGFuZCB0ZXh0IG9mIEl0ZW1WYWx1ZSBvYmplY3QgaW4gb25lIHN0cmluZyBhczogXCJ2YWx1ZXx0ZXh0XCJcbiAgICovXG4gIGl0ZW1WYWx1ZVNlcGFyYXRvcjogXCJ8XCIsXG4gIC8qKlxuICAgKiBTZXQgaXQgdG8gdHJ1ZSB0byBzZXJpYWxpemUgaXRlbXZhbHVlIGluc3RhbmNlIGFsd2F5cyBhcyBvYmplY3QgZXZlbiBpZiB0ZXh0IHByb3BlcnR5IGlzIGVtcHR5XG4gICAqIGNvbnN0IGl0ZW0gPSBuZXcgU3VydmV5Lkl0ZW1WYWx1ZSg1KTtcbiAgICogaXRlbS50b0pTT04oKTsgLy93aWxsIHJldHVybiB7dmFsdWU6IDV9LCBpbnN0ZWFkIG9mIDUgYnkgZGVmYXVsdC5cbiAgICovXG4gIGl0ZW1WYWx1ZUFsd2F5c1NlcmlhbGl6ZUFzT2JqZWN0OiBmYWxzZSxcbiAgLyoqXG4gICAqIFNldCBpdCB0byB0cnVlIHRvIHNlcmlhbGl6ZSBpdGVtdmFsdWUgdGV4dCBwcm9wZXJ0eSwgZXZlbiBpZiBpdCBpcyBlbXB0eSBvciBlcXVhbHMgdG8gdmFsdWVcbiAgICogY29uc3QgaXRlbSA9IG5ldyBTdXJ2ZXkuSXRlbVZhbHVlKFwiaXRlbTFcIik7XG4gICAqIGl0ZW0udG9KU09OKCk7IC8vd2lsbCByZXR1cm4ge3ZhbHVlOiBpdGVtMSwgdGV4dDogXCJpdGVtMVwifSwgaW5zdGVhZCBvZiBcIml0ZW0xXCIgYnkgZGVmYXVsdC5cbiAgICovXG4gIGl0ZW1WYWx1ZUFsd2F5c1NlcmlhbGl6ZVRleHQ6IGZhbHNlLFxuICAvKipcbiAgICogZGVmYXVsdCBsb2NhbGUgbmFtZSBmb3IgbG9jYWxpemFibGUgc3RyaW5ncyB0aGF0IHVzZXMgZHVyaW5nIHNlcmlhbGl6YXRpb24sIHtcImRlZmF1bHRcIjogXCJNeSB0ZXh0XCIsIFwiZGVcIjogXCJNZWluIFRleHRcIn1cbiAgICovXG4gIGRlZmF1bHRMb2NhbGVOYW1lOiBcImRlZmF1bHRcIixcbiAgLyoqXG4gICAqIERlZmF1bHQgcm93IG5hbWUgZm9yIG1hdHJpeCAoc2luZ2xlIGNob2ljZSlcbiAgICovXG4gIG1hdHJpeERlZmF1bHRSb3dOYW1lOiBcImRlZmF1bHRcIixcbiAgLyoqXG4gICAqIERlZmF1bHQgY2VsbCB0eXBlIGZvciBkcm9wZG93biBhbmQgZHluYW1pYyBtYXRyaWNlc1xuICAgKi9cbiAgbWF0cml4RGVmYXVsdENlbGxUeXBlOiBcImRyb3Bkb3duXCIsXG4gIC8qKlxuICAgKiBUb3RhbCB2YWx1ZSBwb3N0Zml4IGZvciBkcm9wZG93biBhbmQgZHluYW1pYyBtYXRyaWNlcy4gVGhlIHRvdGFsIHZhbHVlIHN0b3JlcyBhczoge21hdHJpeE5hbWV9ICsge3Bvc3RmaXh9XG4gICAqL1xuICBtYXRyaXhUb3RhbFZhbHVlUG9zdEZpeDogXCItdG90YWxcIixcbiAgLyoqXG4gICAqIE1heGltdW0gcm93IGNvdW50IGluIGR5bmFtaWMgbWF0cml4XG4gICAqL1xuICBtYXRyaXhNYXhpbXVtUm93Q291bnQ6IDEwMDAsXG4gIC8qKlxuICAgKiBNYXhpbXVtIHJvd0NvdW50IHRoYXQgcmV0dXJucyBpbiBhZGRDb25kaXRpb25PYmplY3RzQnlDb250ZXh0IGZ1bmN0aW9uXG4gICAqL1xuICBtYXRyaXhNYXhSb3dDb3VudEluQ29uZGl0aW9uOiAxLFxuICAvKipcbiAgICogTWF4aW11bSBwYW5lbCBjb3VudCBpbiBkeW5hbWljIHBhbmVsXG4gICAqL1xuICBwYW5lbE1heGltdW1QYW5lbENvdW50OiAxMDAsXG4gIC8qKlxuICAgKiBNYXhpbXVtIHJhdGUgdmFsdWUgY291bnQgaW4gcmF0aW5nIHF1ZXN0aW9uXG4gICAqL1xuICByYXRpbmdNYXhpbXVtUmF0ZVZhbHVlQ291bnQ6IDIwLFxuICAvKipcbiAgICogRGlzYWJsZSB0aGUgcXVlc3Rpb24gd2hpbGUgY2hvaWNlcyBhcmUgZ2V0dGluZyBmcm9tIHRoZSB3ZWIgc2VydmljZVxuICAgKi9cbiAgZGlzYWJsZU9uR2V0dGluZ0Nob2ljZXNGcm9tV2ViOiBmYWxzZSxcbiAgLyoqXG4gICAqIFNldCB0byB0cnVlIHRvIGFsd2F5cyBzZXJpYWxpemUgdGhlIGxvY2FsaXphdGlvbiBzdHJpbmcgYXMgb2JqZWN0IGV2ZW4gaWYgdGhlcmUgaXMgb25seSBvbmUgdmFsdWUgZm9yIGRlZmF1bHQgbG9jYWxlLiBJbnN0ZWFkIG9mIHN0cmluZyBcIk15U3RyXCIgc2VyaWFsaXplIGFzIHtkZWZhdWx0OiBcIk15U3RyXCJ9XG4gICAqL1xuICBzZXJpYWxpemVMb2NhbGl6YWJsZVN0cmluZ0FzT2JqZWN0OiBmYWxzZSxcbiAgLyoqXG4gICAqIFNldCB0byBmYWxzZSB0byBoaWRlIGVtcHR5IHBhZ2UgdGl0bGUgYW5kIGRlc2NyaXB0aW9uIGluIGRlc2lnbiBtb2RlXG4gICAqL1xuICBhbGxvd1Nob3dFbXB0eVRpdGxlSW5EZXNpZ25Nb2RlOiB0cnVlLFxuICAvKipcbiAgICogU2V0IHRvIGZhbHNlIHRvIGhpZGUgZW1wdHkgcGFnZSBkZXNjcmlwdGlvbiBpbiBkZXNpZ24gbW9kZVxuICAgKi9cbiAgYWxsb3dTaG93RW1wdHlEZXNjcmlwdGlvbkluRGVzaWduTW9kZTogdHJ1ZSxcbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIHRydWUgdG8gZXhlY3V0ZSB0aGUgY29tcGxldGUgdHJpZ2dlciBvbiB2YWx1ZSBjaGFuZ2UgaW5zdGVhZCBvZiBvbiBuZXh0IHBhZ2UuXG4gICAqL1xuICBleGVjdXRlQ29tcGxldGVUcmlnZ2VyT25WYWx1ZUNoYW5nZWQ6IGZhbHNlLFxuICAvKipcbiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gZmFsc2UgdG8gZXhlY3V0ZSB0aGUgc2tpcCB0cmlnZ2VyIG9uIG5leHQgcGFnZSBpbnN0ZWFkIG9mIG9uIHZhbHVlIGNoYW5nZS5cbiAgICovXG4gIGV4ZWN1dGVTa2lwVHJpZ2dlck9uVmFsdWVDaGFuZ2VkOiB0cnVlLFxuICAvKipcbiAgICogU3BlY2lmaWVzIGhvdyB0aGUgaW5wdXQgZmllbGQgb2YgW0NvbW1lbnRdKGh0dHBzOi8vc3VydmV5anMuaW8vRG9jdW1lbnRhdGlvbi9MaWJyYXJ5P2lkPXF1ZXN0aW9uY29tbWVudG1vZGVsKSBxdWVzdGlvbnMgaXMgcmVuZGVyZWQgaW4gdGhlIHJlYWQtb25seSBtb2RlLlxuICAgKiBBdmFpbGFibGUgdmFsdWVzOlxuICAgKiBcInRleHRhcmVhXCIgKGRlZmF1bHQpIC0gQSAndGV4dGFyZWEnIGVsZW1lbnQgaXMgdXNlZCB0byByZW5kZXIgYSBDb21tZW50IHF1ZXN0aW9uJ3MgaW5wdXQgZmllbGQuXG4gICAqIFwiZGl2XCIgLSBBICdkaXYnIGVsZW1lbnQgaXMgdXNlZCB0byByZW5kZXIgYSBDb21tZW50IHF1ZXN0aW9uJ3MgaW5wdXQgZmllbGQuXG4gICAqL1xuICByZWFkT25seUNvbW1lbnRSZW5kZXJNb2RlOiBcInRleHRhcmVhXCIsXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgaG93IHRoZSBpbnB1dCBmaWVsZCBvZiBbVGV4dF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9Eb2N1bWVudGF0aW9uL0xpYnJhcnk/aWQ9cXVlc3Rpb250ZXh0bW9kZWwpIHF1ZXN0aW9ucyBpcyByZW5kZXJlZCBpbiB0aGUgcmVhZC1vbmx5IG1vZGUuXG4gICAqIEF2YWlsYWJsZSB2YWx1ZXM6XG4gICAqIFwiaW5wdXRcIiAoZGVmYXVsdCkgLSBBbiAnaW5wdXQnIGVsZW1lbnQgaXMgdXNlZCB0byByZW5kZXIgYSBUZXh0IHF1ZXN0aW9uJ3MgaW5wdXQgZmllbGQuXG4gICAqIFwiZGl2XCIgLSBBICdkaXYnIGVsZW1lbnQgaXMgdXNlZCB0byByZW5kZXIgYSBUZXh0IHF1ZXN0aW9uJ3MgaW5wdXQgZmllbGQuXG4gICAqL1xuICByZWFkT25seVRleHRSZW5kZXJNb2RlOiBcImlucHV0XCIsXG4gIC8qKlxuICAgKiBPdmVycmlkZSB0aGlzIGZ1bmN0aW9uLCBzZXQgeW91ciBmdW5jdGlvbiwgaWYgeW91IHdhbnQgdG8gc2hvdyB5b3VyIG93biBkaWFsb2cgY29uZmlybSB3aW5kb3cgaW5zdGVhZCBvZiBzdGFuZGFyZCBicm93c2VyIHdpbmRvdy5cbiAgICogQHBhcmFtIG1lc3NhZ2VcbiAgICovXG4gIGNvbmZpcm1BY3Rpb25GdW5jOiBmdW5jdGlvbiAobWVzc2FnZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGNvbmZpcm0obWVzc2FnZSk7XG4gIH0sXG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIG1pbldpZHRoIGNvbnN0cmFpbnRcbiAgICovXG4gIG1pbldpZHRoOiBcIjMwMHB4XCIsXG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIG1pbldpZHRoIGNvbnN0cmFpbnRcbiAgICovXG4gIG1heFdpZHRoOiBcImluaXRpYWxcIixcbiAgLyoqXG4gICAqIFRoaXMgcHJvcGVydHkgdGVsbHMgaG93IG1hbnkgdGltZXMgc3VydmV5IHJlLXJ1biBleHByZXNzaW9ucyBvbiB2YWx1ZSBjaGFuZ2VzIGR1cmluZyBjb25kaXRpb24gcnVubmluZy4gV2UgbmVlZCBpdCB0byBhdm9pZCByZWN1cnNpb25zIGluIHRoZSBleHByZXNzaW9uc1xuICAgKi9cbiAgbWF4aW11bUNvbmRpdGlvblJ1bkNvdW50T25WYWx1ZUNoYW5nZWQ6IDEwLFxuICAvKipcbiAgICogQnkgZGVmYXVsdCB2aXNpYmxlSW5kZXggZm9yIHF1ZXN0aW9uIHdpdGggdGl0bGVMb2NhdGlvbiA9IFwiaGlkZGVuXCIgaXMgLTEsIGFuZCBzdXJ2ZXkgZG9lc24ndCBjb3VudCB0aGVzZSBxdWVzdGlvbnMgd2hlbiBzZXQgcXVlc3Rpb25zIG51bWJlcnMuXG4gICAqIFNldCBpdCB0cnVlLCBhbmQgYSBxdWVzdGlvbiBuZXh0IHRvIGEgcXVlc3Rpb24gd2l0aCBoaWRkZW4gdGl0bGUgd2lsbCBpbmNyZWFzZSBpdCdzIG51bWJlci5cbiAgICovXG4gIHNldFF1ZXN0aW9uVmlzaWJsZUluZGV4Rm9ySGlkZGVuVGl0bGU6IGZhbHNlLFxuICAvKipcbiAgICogQnkgZGVmYXVsdCB2aXNpYmxlSW5kZXggZm9yIHF1ZXN0aW9uIHdpdGggaGlkZU51bWJlciA9IHRydWUgaXMgLTEsIGFuZCBzdXJ2ZXkgZG9lc24ndCBjb3VudCB0aGVzZSBxdWVzdGlvbnMgd2hlbiBzZXQgcXVlc3Rpb25zIG51bWJlcnMuXG4gICAqIFNldCBpdCB0cnVlLCBhbmQgYSBxdWVzdGlvbiBuZXh0IHRvIGEgcXVlc3Rpb24gd2l0aCBoaWRkZW4gdGl0bGUgbnVtYmVyIHdpbGwgaW5jcmVhc2UgaXQncyBudW1iZXIuXG4gICAqL1xuICBzZXRRdWVzdGlvblZpc2libGVJbmRleEZvckhpZGRlbk51bWJlcjogZmFsc2UsXG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0IGFsbCByb3dzIGFyZSByZW5kZXJlZCBubyBtYXR0ZXJzIHdod3RoZXIgdGhleSBhcmUgdmlzaWJsZS5cbiAgICogU2V0IGl0IHRydWUsIGFuZCBzdXJ2ZXkgbWFya3VwIHJvd3Mgd2lsbCBiZSByZW5kZXJlZCBvbmx5IGlmIHRoZXkgYXJlIHZpc2libGUgaW4gdmlld3BvcnQuXG4gICAqIFRoaXMgZmVhdHVyZSBpcyBleHBlcmltYW50YWwgYW5kIG1pZ2h0IGRvIG5vdCBzdXBwb3J0IGFsbCB0aGUgdXNlIGNhc2VzLlxuICAgKi9cbiAgbGF6eVJvd3NSZW5kZXJpbmc6IGZhbHNlLFxuICBsYXp5Um93c1JlbmRlcmluZ1N0YXJ0Um93OiAzLFxuICAvKipcbiAgICogQnkgZGVmYXVsdCBjaGVja2JveCBhbmQgcmFkaW9ncm91cCBpdGVtcyBhcmUgb3JkZXJlZCBpbiByb3dzLlxuICAgKiBTZXQgaXQgXCJjb2x1bW5cIiwgYW5kIGl0ZW1zIHdpbGwgYmUgb3JkZXJlZCBpbiBjb2x1bW5zLlxuICAgKi9cbiAgc2hvd0l0ZW1zSW5PcmRlcjogXCJkZWZhdWx0XCIsXG4gIC8qKlxuICAgKiBTdXBwb3J0ZWQgdmFsaWRhdG9ycyBieSBxdWVzdGlvbiB0eXBlcy4gWW91IGNhbiBtb2RpZnkgdGhpcyB2YXJpYWJsZSB0byBhZGQgdmFsaWRhdG9ycyBmb3IgbmV3IHF1ZXN0aW9uIHR5cGVzIG9yIGFkZC9yZW1vdmUgZm9yIGV4aXN0aW5nIHF1ZXN0aW9uIHR5cGVzLlxuICAgKi9cbiAgc3VwcG9ydGVkVmFsaWRhdG9yczoge1xuICAgIHF1ZXN0aW9uOiBbXCJleHByZXNzaW9uXCJdLFxuICAgIGNvbW1lbnQ6IFtcInRleHRcIiwgXCJyZWdleFwiXSxcbiAgICB0ZXh0OiBbXCJudW1lcmljXCIsIFwidGV4dFwiLCBcInJlZ2V4XCIsIFwiZW1haWxcIl0sXG4gICAgY2hlY2tib3g6IFtcImFuc3dlcmNvdW50XCJdLFxuICAgIGltYWdlcGlja2VyOiBbXCJhbnN3ZXJjb3VudFwiXSxcbiAgfSxcbiAgLyoqXG4gICAqIFNldCB0aGUgdmFsdWUgYXMgc3RyaW5nIFwieXl5eS1tbS1kZFwiLiB0ZXh0IHF1ZXN0aW9ucyB3aXRoIGlucHV0VHlwZSBcImRhdGVcIiB3aWxsIG5vdCBhbGxvdyB0byBzZXQgdG8gc3VydmV5IGRhdGUgdGhhdCBsZXNzIHRoYW4gdGhpcyB2YWx1ZVxuICAgKi9cbiAgbWluRGF0ZTogXCJcIixcbiAgLyoqXG4gICAqIFNldCB0aGUgdmFsdWUgYXMgc3RyaW5nIFwieXl5eS1tbS1kZFwiLiB0ZXh0IHF1ZXN0aW9ucyB3aXRoIGlucHV0VHlwZSBcImRhdGVcIiB3aWxsIG5vdCBhbGxvdyB0byBzZXQgdG8gc3VydmV5IGRhdGUgdGhhdCBncmVhdGVyIHRoYW4gdGhpcyB2YWx1ZVxuICAgKi9cbiAgbWF4RGF0ZTogXCJcIixcbiAgc2hvd01vZGFsOiA8XG4gICAgKFxuICAgICAgY29tcG9uZW50TmFtZTogc3RyaW5nLFxuICAgICAgZGF0YTogYW55LFxuICAgICAgb25BcHBseTogKCkgPT4gYm9vbGVhbixcbiAgICAgIG9uQ2FuY2VsPzogKCkgPT4gdm9pZCxcbiAgICAgIGNzc0NsYXNzPzogc3RyaW5nLFxuICAgICAgdGl0bGU/OiBzdHJpbmcsXG4gICAgICBkaXNwbGF5TW9kZT86IFwicG9wdXBcIiB8IFwib3ZlcmxheVwiXG4gICAgKSA9PiB2b2lkXG4gICAgPnVuZGVmaW5lZCxcbiAgc3VwcG9ydENyZWF0b3JWMjogZmFsc2UsXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgYSBsaXN0IG9mIGN1c3RvbSBpY29ucy5cbiAgICogVXNlIHRoaXMgcHJvcGVydHkgdG8gcmVwbGFjZSBTdXJ2ZXlKUyBkZWZhdWx0IGljb25zIChkaXNwbGF5ZWQgaW4gVUkgZWxlbWVudHMgb2YgU3VydmV5SlMgTGlicmFyeSBvciBDcmVhdG9yKSB3aXRoIHlvdXIgY3VzdG9tIGljb25zLlxuICAgKiBGb3IgZXZlcnkgZGVmYXVsdCBpY29uIHRvIHJlcGxhY2UsIGFkZCBhIGtleS92YWx1ZSBvYmplY3Qgd2l0aCB0aGUgZGVmYXVsdCBpY29uJ3MgbmFtZSBhcyBhIGtleSBhbmQgdGhlIG5hbWUgb2YgeW91ciBjdXN0b20gaWNvbiBhcyBhIHZhbHVlLlxuICAgKiBGb3IgZXhhbXBsZTogU3VydmV5LnNldHRpbmdzLmN1c3RvbUljb25zW1wiaWNvbi1yZWRvXCJdID0gXCJteS1vd24tcmVkby1pY29uXCJcbiAgICovXG4gIGN1c3RvbUljb25zOiB7fSxcbiAgdGl0bGVUYWdzOiB7XG4gICAgc3VydmV5OiBcImgzXCIsXG4gICAgcGFnZTogXCJoNFwiLFxuICAgIHBhbmVsOiBcImg0XCIsXG4gICAgcXVlc3Rpb246IFwiaDVcIixcbiAgfVxufTtcbiIsImltcG9ydCB7IEFjdGlvbiB9IGZyb20gXCIuLi9hY3Rpb25zL2FjdGlvblwiO1xuaW1wb3J0IHsgQWRhcHRpdmVBY3Rpb25Db250YWluZXIgfSBmcm9tIFwiLi4vYWN0aW9ucy9hZGFwdGl2ZS1jb250YWluZXJcIjtcblxuaW50ZXJmYWNlIElEaW1lbnNpb25zIHtcbiAgc2Nyb2xsOiBudW1iZXI7XG4gIG9mZnNldDogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgUmVzcG9uc2l2aXR5TWFuYWdlciB7XG4gIHByaXZhdGUgcmVzaXplT2JzZXJ2ZXI6IFJlc2l6ZU9ic2VydmVyID0gdW5kZWZpbmVkO1xuICBwcml2YXRlIGlzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIG1pbkRpbWVuc2lvbkNvbnN0ID0gNTY7XG4gIHByaXZhdGUgc2VwYXJhdG9yU2l6ZSA9IDE3O1xuICBwcml2YXRlIHNlcGFyYXRvckFkZENvbnN0ID0gMTtcbiAgcHJpdmF0ZSBwYWRkaW5nU2l6ZUNvbnN0ID0gODtcbiAgcHJvdGVjdGVkIHJlY2FsY01pbkRpbWVuc2lvbkNvbnN0ID0gdHJ1ZTtcblxuICBwdWJsaWMgZ2V0Q29tcHV0ZWRTdHlsZTogKFxuICAgIGVsdDogRWxlbWVudFxuICApID0+IENTU1N0eWxlRGVjbGFyYXRpb24gPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZS5iaW5kKHdpbmRvdyk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGNvbnRhaW5lcjogSFRNTERpdkVsZW1lbnQsXG4gICAgcHJpdmF0ZSBtb2RlbDogQWRhcHRpdmVBY3Rpb25Db250YWluZXIsXG4gICAgcHJpdmF0ZSBpdGVtc1NlbGVjdG9yOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSBkb3RzSXRlbVNpemU6IG51bWJlciA9IDQ4LFxuICApIHtcblxuICAgIHRoaXMubW9kZWwudXBkYXRlQ2FsbGJhY2sgPSAoaXNSZXNldEluaXRpYWxpemVkOiBib29sZWFuKSA9PiB7XG4gICAgICBpZihpc1Jlc2V0SW5pdGlhbGl6ZWQpXG4gICAgICAgIHRoaXMuaXNJbml0aWFsaXplZCA9IGZhbHNlO1xuICAgICAgZWxzZVxuICAgICAgICB0aGlzLnByb2Nlc3MoKTtcbiAgICB9O1xuICAgIGlmICh0eXBlb2YgUmVzaXplT2JzZXJ2ZXIgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKF8pID0+IHRoaXMucHJvY2VzcygpKTtcbiAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLmNvbnRhaW5lci5wYXJlbnRFbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0RGltZW5zaW9ucyhlbGVtZW50OiBIVE1MRWxlbWVudCk6IElEaW1lbnNpb25zIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2Nyb2xsOiBlbGVtZW50LnNjcm9sbFdpZHRoLFxuICAgICAgb2Zmc2V0OiBlbGVtZW50Lm9mZnNldFdpZHRoLFxuICAgIH07XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0QXZhaWxhYmxlU3BhY2UoKTogbnVtYmVyIHtcbiAgICBjb25zdCBzdHlsZTogQ1NTU3R5bGVEZWNsYXJhdGlvbiA9IHRoaXMuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmNvbnRhaW5lcik7XG4gICAgbGV0IHNwYWNlID0gdGhpcy5jb250YWluZXIub2Zmc2V0V2lkdGg7XG4gICAgaWYgKHN0eWxlLmJveFNpemluZyA9PT0gXCJib3JkZXItYm94XCIpIHtcbiAgICAgIHNwYWNlIC09IHBhcnNlRmxvYXQoc3R5bGUucGFkZGluZ0xlZnQpICsgcGFyc2VGbG9hdChzdHlsZS5wYWRkaW5nUmlnaHQpO1xuICAgIH1cbiAgICByZXR1cm4gc3BhY2U7XG4gIH1cblxuICBwcm90ZWN0ZWQgY2FsY0l0ZW1TaXplKGl0ZW06IEhUTUxEaXZFbGVtZW50KTogbnVtYmVyIHtcbiAgICByZXR1cm4gaXRlbS5vZmZzZXRXaWR0aDtcbiAgfVxuXG4gIHByaXZhdGUgY2FsY01pbkRpbWVuc2lvbihjdXJyZW50QWN0aW9uOiBBY3Rpb24pIHtcbiAgICBsZXQgbWluRGltZW5zaW9uQ29uc3QgPSB0aGlzLm1pbkRpbWVuc2lvbkNvbnN0O1xuICAgIGlmKGN1cnJlbnRBY3Rpb24uaWNvblNpemUgJiYgdGhpcy5yZWNhbGNNaW5EaW1lbnNpb25Db25zdCkge1xuICAgICAgbWluRGltZW5zaW9uQ29uc3QgPSAyICogY3VycmVudEFjdGlvbi5pY29uU2l6ZSArIHRoaXMucGFkZGluZ1NpemVDb25zdDtcbiAgICB9XG4gICAgcmV0dXJuIGN1cnJlbnRBY3Rpb24uY2FuU2hyaW5rXG4gICAgICA/IG1pbkRpbWVuc2lvbkNvbnN0ICtcbiAgICAgIChjdXJyZW50QWN0aW9uLm5lZWRTZXBhcmF0b3IgPyB0aGlzLnNlcGFyYXRvclNpemUgOiAwKVxuICAgICAgOiBjdXJyZW50QWN0aW9uLm1heERpbWVuc2lvbjtcbiAgfVxuXG4gIHByaXZhdGUgY2FsY0l0ZW1zU2l6ZXMoKSB7XG4gICAgY29uc3QgYWN0aW9ucyA9IHRoaXMubW9kZWwuYWN0aW9ucztcbiAgICB0aGlzLmNvbnRhaW5lclxuICAgICAgLnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5pdGVtc1NlbGVjdG9yKVxuICAgICAgLmZvckVhY2goKGl0ZW06IEhUTUxEaXZFbGVtZW50LCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgIGxldCBjdXJyZW50QWN0aW9uID0gYWN0aW9uc1tpbmRleF07XG4gICAgICAgIGN1cnJlbnRBY3Rpb24ubWF4RGltZW5zaW9uID0gdGhpcy5jYWxjSXRlbVNpemUoaXRlbSk7XG4gICAgICAgIGN1cnJlbnRBY3Rpb24ubWluRGltZW5zaW9uID0gdGhpcy5jYWxjTWluRGltZW5zaW9uKGN1cnJlbnRBY3Rpb24pO1xuICAgICAgfSk7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgaXNDb250YWluZXJWaXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIShcbiAgICAgIHRoaXMuY29udGFpbmVyLm9mZnNldFdpZHRoIHx8XG4gICAgICB0aGlzLmNvbnRhaW5lci5vZmZzZXRIZWlnaHQgfHxcbiAgICAgIHRoaXMuY29udGFpbmVyLmdldENsaWVudFJlY3RzKCkubGVuZ3RoXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIHByb2Nlc3MoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNDb250YWluZXJWaXNpYmxlKSB7XG4gICAgICBpZiAoIXRoaXMuaXNJbml0aWFsaXplZCkge1xuICAgICAgICB0aGlzLm1vZGVsLmFjdGlvbnMuZm9yRWFjaCgoYWN0aW9uKSA9PiAoYWN0aW9uLm1vZGUgPSBcImxhcmdlXCIpKTtcbiAgICAgICAgdGhpcy5jYWxjSXRlbXNTaXplcygpO1xuICAgICAgICB0aGlzLmlzSW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgdGhpcy5tb2RlbC5maXQodGhpcy5nZXRBdmFpbGFibGVTcGFjZSgpLCB0aGlzLmRvdHNJdGVtU2l6ZSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5tb2RlbC51cGRhdGVDYWxsYmFjayA9IHVuZGVmaW5lZDtcbiAgICBpZiAoISF0aGlzLnJlc2l6ZU9ic2VydmVyKSB7XG4gICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFZlcnRpY2FsUmVzcG9uc2l2aXR5TWFuYWdlciBleHRlbmRzIFJlc3BvbnNpdml0eU1hbmFnZXIge1xuICBjb25zdHJ1Y3RvcihcbiAgICBjb250YWluZXI6IEhUTUxEaXZFbGVtZW50LFxuICAgIG1vZGVsOiBBZGFwdGl2ZUFjdGlvbkNvbnRhaW5lcixcbiAgICBpdGVtc1NlbGVjdG9yOiBzdHJpbmcsXG4gICAgZG90c0l0ZW1TaXplPzogbnVtYmVyLFxuICAgIG1pbkRpbWVuc2lvbiA9IDQwXG4gICkge1xuICAgIHN1cGVyKGNvbnRhaW5lciwgbW9kZWwsIGl0ZW1zU2VsZWN0b3IsIGRvdHNJdGVtU2l6ZSk7XG4gICAgdGhpcy5taW5EaW1lbnNpb25Db25zdCA9IG1pbkRpbWVuc2lvbjtcbiAgICB0aGlzLnJlY2FsY01pbkRpbWVuc2lvbkNvbnN0ID0gZmFsc2U7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0RGltZW5zaW9ucygpOiBJRGltZW5zaW9ucyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNjcm9sbDogdGhpcy5jb250YWluZXIuc2Nyb2xsSGVpZ2h0LFxuICAgICAgb2Zmc2V0OiB0aGlzLmNvbnRhaW5lci5vZmZzZXRIZWlnaHQsXG4gICAgfTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRBdmFpbGFibGVTcGFjZSgpOiBudW1iZXIge1xuICAgIGNvbnN0IHN0eWxlOiBDU1NTdHlsZURlY2xhcmF0aW9uID0gdGhpcy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuY29udGFpbmVyKTtcbiAgICBsZXQgc3BhY2U6IG51bWJlciA9IHRoaXMuY29udGFpbmVyLm9mZnNldEhlaWdodDtcbiAgICBpZiAoc3R5bGUuYm94U2l6aW5nID09PSBcImJvcmRlci1ib3hcIikge1xuICAgICAgc3BhY2UgLT0gcGFyc2VGbG9hdChzdHlsZS5wYWRkaW5nVG9wKSArIHBhcnNlRmxvYXQoc3R5bGUucGFkZGluZ0JvdHRvbSk7XG4gICAgfVxuICAgIHJldHVybiBzcGFjZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjYWxjSXRlbVNpemUoaXRlbTogSFRNTERpdkVsZW1lbnQpOiBudW1iZXIge1xuICAgIHJldHVybiBpdGVtLm9mZnNldEhlaWdodDtcbiAgfVxufVxuIiwiaW1wb3J0IHsgc2V0dGluZ3MgfSBmcm9tIFwiLi8uLi9zZXR0aW5nc1wiO1xuZnVuY3Rpb24gY29tcGFyZVZlcnNpb25zKGE6IGFueSwgYjogYW55KSB7XG4gIGNvbnN0IHJlZ0V4U3RyaXAwOiBSZWdFeHAgPSAvKFxcLjArKSskLztcbiAgY29uc3Qgc2VnbWVudHNBOiBzdHJpbmdbXSA9IGEucmVwbGFjZShyZWdFeFN0cmlwMCwgXCJcIikuc3BsaXQoXCIuXCIpO1xuICBjb25zdCBzZWdtZW50c0I6IHN0cmluZ1tdID0gYi5yZXBsYWNlKHJlZ0V4U3RyaXAwLCBcIlwiKS5zcGxpdChcIi5cIik7XG4gIGNvbnN0IGxlbjogbnVtYmVyID0gTWF0aC5taW4oc2VnbWVudHNBLmxlbmd0aCwgc2VnbWVudHNCLmxlbmd0aCk7XG4gIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIGNvbnN0IGRpZmY6IG51bWJlciA9XG4gICAgICBwYXJzZUludChzZWdtZW50c0FbaV0sIDEwKSAtIHBhcnNlSW50KHNlZ21lbnRzQltpXSwgMTApO1xuICAgIGlmIChkaWZmKSB7XG4gICAgICByZXR1cm4gZGlmZjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHNlZ21lbnRzQS5sZW5ndGggLSBzZWdtZW50c0IubGVuZ3RoO1xufVxuZnVuY3Rpb24gY29uZmlybUFjdGlvbihtZXNzYWdlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKCEhc2V0dGluZ3MgJiYgISFzZXR0aW5ncy5jb25maXJtQWN0aW9uRnVuYylcbiAgICByZXR1cm4gc2V0dGluZ3MuY29uZmlybUFjdGlvbkZ1bmMobWVzc2FnZSk7XG4gIHJldHVybiBjb25maXJtKG1lc3NhZ2UpO1xufVxuZnVuY3Rpb24gZGV0ZWN0SUVCcm93c2VyKCkge1xuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIGZhbHNlO1xuICBjb25zdCB1YTogc3RyaW5nID0gd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQ7XG4gIGNvbnN0IG9sZEllOiBudW1iZXIgPSB1YS5pbmRleE9mKFwiTVNJRSBcIik7XG4gIGNvbnN0IGVsZXZlbkllOiBudW1iZXIgPSB1YS5pbmRleE9mKFwiVHJpZGVudC9cIik7XG4gIHJldHVybiBvbGRJZSA+IC0xIHx8IGVsZXZlbkllID4gLTE7XG59XG5mdW5jdGlvbiBkZXRlY3RJRU9yRWRnZSgpIHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybiBmYWxzZTtcbiAgaWYgKHR5cGVvZiAoPGFueT5kZXRlY3RJRU9yRWRnZSkuaXNJRU9yRWRnZSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIGNvbnN0IHVhOiBzdHJpbmcgPSB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudDtcbiAgICBjb25zdCBtc2llOiBudW1iZXIgPSB1YS5pbmRleE9mKFwiTVNJRSBcIik7XG4gICAgY29uc3QgdHJpZGVudDogbnVtYmVyID0gdWEuaW5kZXhPZihcIlRyaWRlbnQvXCIpO1xuICAgIGNvbnN0IGVkZ2U6IG51bWJlciA9IHVhLmluZGV4T2YoXCJFZGdlL1wiKTtcbiAgICAoPGFueT5kZXRlY3RJRU9yRWRnZSkuaXNJRU9yRWRnZSA9IGVkZ2UgPiAwIHx8IHRyaWRlbnQgPiAwIHx8IG1zaWUgPiAwO1xuICB9XG4gIHJldHVybiAoPGFueT5kZXRlY3RJRU9yRWRnZSkuaXNJRU9yRWRnZTtcbn1cbmZ1bmN0aW9uIGxvYWRGaWxlRnJvbUJhc2U2NChiNjREYXRhOiBzdHJpbmcsIGZpbGVOYW1lOiBzdHJpbmcpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBieXRlU3RyaW5nOiBzdHJpbmcgPSBhdG9iKGI2NERhdGEuc3BsaXQoXCIsXCIpWzFdKTtcblxuICAgIC8vIHNlcGFyYXRlIG91dCB0aGUgbWltZSBjb21wb25lbnRcbiAgICBjb25zdCBtaW1lU3RyaW5nOiBzdHJpbmcgPSBiNjREYXRhXG4gICAgICAuc3BsaXQoXCIsXCIpWzBdXG4gICAgICAuc3BsaXQoXCI6XCIpWzFdXG4gICAgICAuc3BsaXQoXCI7XCIpWzBdO1xuXG4gICAgLy8gd3JpdGUgdGhlIGJ5dGVzIG9mIHRoZSBzdHJpbmcgdG8gYW4gQXJyYXlCdWZmZXJcbiAgICBjb25zdCBhYjogQXJyYXlCdWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIoYnl0ZVN0cmluZy5sZW5ndGgpO1xuICAgIGNvbnN0IGlhOiBVaW50OEFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYWIpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnl0ZVN0cmluZy5sZW5ndGg7IGkrKykge1xuICAgICAgaWFbaV0gPSBieXRlU3RyaW5nLmNoYXJDb2RlQXQoaSk7XG4gICAgfVxuICAgIC8vIHdyaXRlIHRoZSBBcnJheUJ1ZmZlciB0byBhIGJsb2IsIGFuZCB5b3UncmUgZG9uZVxuICAgIGNvbnN0IGJiOiBCbG9iID0gbmV3IEJsb2IoW2FiXSwgeyB0eXBlOiBtaW1lU3RyaW5nIH0pO1xuICAgIGlmIChcbiAgICAgIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICAgIHdpbmRvdy5uYXZpZ2F0b3IgJiZcbiAgICAgICg8YW55PndpbmRvdy5uYXZpZ2F0b3IpW1wibXNTYXZlQmxvYlwiXVxuICAgICkge1xuICAgICAgKDxhbnk+d2luZG93Lm5hdmlnYXRvcilbXCJtc1NhdmVPck9wZW5CbG9iXCJdKGJiLCBmaWxlTmFtZSk7XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHsgfVxufVxuZnVuY3Rpb24gaXNNb2JpbGUoKSB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93Lm9yaWVudGF0aW9uICE9PSBcInVuZGVmaW5lZFwiXG4gICk7XG59XG5cbmZ1bmN0aW9uIGlzRWxlbWVudFZpc2libGUoXG4gIGVsZW1lbnQ6IEhUTUxFbGVtZW50LFxuICB0aHJlc2hvbGQ6IG51bWJlciA9IDBcbik6IGJvb2xlYW4ge1xuICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IGVsZW1lbnRSZWN0OiBET01SZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgY29uc3Qgdmlld0hlaWdodDogbnVtYmVyID0gTWF0aC5tYXgoXG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCxcbiAgICB3aW5kb3cuaW5uZXJIZWlnaHRcbiAgKTtcbiAgY29uc3QgdG9wV2luOiBudW1iZXIgPSAtdGhyZXNob2xkO1xuICBjb25zdCBib3R0b21XaW46IG51bWJlciA9IHZpZXdIZWlnaHQgKyB0aHJlc2hvbGQ7XG4gIGNvbnN0IHRvcEVsOiBudW1iZXIgPSBlbGVtZW50UmVjdC50b3A7XG4gIGNvbnN0IGJvdHRvbUVsOiBudW1iZXIgPSBlbGVtZW50UmVjdC5ib3R0b207XG5cbiAgY29uc3QgbWF4VG9wOiBudW1iZXIgPSBNYXRoLm1heCh0b3BXaW4sIHRvcEVsKTtcbiAgY29uc3QgbWluQm90dG9tOiBudW1iZXIgPSBNYXRoLm1pbihib3R0b21XaW4sIGJvdHRvbUVsKTtcbiAgcmV0dXJuIG1heFRvcCA8PSBtaW5Cb3R0b207XG59XG5cbmZ1bmN0aW9uIGZpbmRTY3JvbGxhYmxlUGFyZW50KGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnQge1xuICBpZiAoIWVsZW1lbnQpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICB9XG4gIGlmIChcbiAgICBlbGVtZW50LnNjcm9sbEhlaWdodCA+IGVsZW1lbnQuY2xpZW50SGVpZ2h0ICYmXG4gICAgKGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkub3ZlcmZsb3dZID09PSBcInNjcm9sbFwiIHx8XG4gICAgICBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLm92ZXJmbG93WSA9PT0gXCJhdXRvXCIpXG4gICkge1xuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG5cbiAgaWYgKFxuICAgIGVsZW1lbnQuc2Nyb2xsV2lkdGggPiBlbGVtZW50LmNsaWVudFdpZHRoICYmXG4gICAgKGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkub3ZlcmZsb3dYID09PSBcInNjcm9sbFwiIHx8XG4gICAgICBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLm92ZXJmbG93WCA9PT0gXCJhdXRvXCIpXG4gICkge1xuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG5cbiAgcmV0dXJuIGZpbmRTY3JvbGxhYmxlUGFyZW50KGVsZW1lbnQucGFyZW50RWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIHNjcm9sbEVsZW1lbnRCeUNoaWxkSWQoaWQ6IHN0cmluZykge1xuICBpZiAoIWRvY3VtZW50KSByZXR1cm47XG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICBpZiAoIWVsKSByZXR1cm47XG4gIGNvbnN0IHNjcm9sbGFibGVFbCA9IGZpbmRTY3JvbGxhYmxlUGFyZW50KGVsKTtcbiAgaWYgKCEhc2Nyb2xsYWJsZUVsKSB7XG4gICAgc2Nyb2xsYWJsZUVsLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KFwic2Nyb2xsXCIpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRJY29uTmFtZUZyb21Qcm94eShpY29uTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKCFpY29uTmFtZSkgcmV0dXJuIGljb25OYW1lO1xuICB2YXIgcHJveHlOYW1lID0gKDxhbnk+c2V0dGluZ3MuY3VzdG9tSWNvbnMpW2ljb25OYW1lXTtcbiAgcmV0dXJuICEhcHJveHlOYW1lID8gcHJveHlOYW1lIDogaWNvbk5hbWU7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVN2ZyhcbiAgc2l6ZTogbnVtYmVyIHwgc3RyaW5nLFxuICB3aWR0aDogbnVtYmVyLFxuICBoZWlnaHQ6IG51bWJlcixcbiAgaWNvbk5hbWU6IHN0cmluZyxcbiAgc3ZnRWxlbTogYW55XG4pIHtcbiAgaWYoc2l6ZSAhPT0gXCJhdXRvXCIpIHtcbiAgICBzdmdFbGVtLnN0eWxlLndpZHRoID0gKHNpemUgfHwgd2lkdGggfHwgMTYpICsgXCJweFwiO1xuICAgIHN2Z0VsZW0uc3R5bGUuaGVpZ2h0ID0gKHNpemUgfHwgaGVpZ2h0IHx8IDE2KSArIFwicHhcIjtcbiAgfVxuICBjb25zdCBub2RlOiBhbnkgPSBzdmdFbGVtLmNoaWxkTm9kZXNbMF07XG4gIGNvbnN0IHJlYWxJY29uTmFtZSA9IGdldEljb25OYW1lRnJvbVByb3h5KGljb25OYW1lKTtcbiAgbm9kZS5zZXRBdHRyaWJ1dGVOUyhcbiAgICBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixcbiAgICBcInhsaW5rOmhyZWZcIixcbiAgICBcIiNcIiArIHJlYWxJY29uTmFtZVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdW53cmFwPFQ+KHZhbHVlOiBUIHwgKCgpID0+IFQpKTogVCB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gKDwoKSA9PiBUPnZhbHVlKSgpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTaXplKHZhbHVlOiBhbnkpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIikge1xuICAgIHJldHVybiBcIlwiICsgdmFsdWUgKyBcInB4XCI7XG4gIH1cbiAgaWYgKCEhdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmIHZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBsYXN0U3ltYm9sOiBzdHJpbmcgPSB2YWx1ZVt2YWx1ZS5sZW5ndGggLSAxXTtcbiAgICBpZiAoKGxhc3RTeW1ib2wgPj0gXCIwXCIgJiYgbGFzdFN5bWJvbCA8PSBcIjlcIikgfHwgbGFzdFN5bWJvbCA9PSBcIi5cIikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgbnVtOiBudW1iZXIgPSBwYXJzZUZsb2F0KHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIFwiXCIgKyBudW0gKyBcInB4XCI7XG4gICAgICB9IGNhdGNoIHsgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbmNvbnN0IGtleUZvY3VzZWRDbGFzc05hbWUgPSBcInN2LWZvY3VzZWQtLWJ5LWtleVwiO1xuZnVuY3Rpb24gZG9LZXkyQ2xpY2tCbHVyKGV2dDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICBjb25zdCBlbGVtZW50OiBhbnkgPSBldnQudGFyZ2V0O1xuICBpZiAoIWVsZW1lbnQgfHwgIWVsZW1lbnQuY2xhc3NMaXN0KSByZXR1cm47XG4gIGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShrZXlGb2N1c2VkQ2xhc3NOYW1lKTtcbn1cblxuZnVuY3Rpb24gZG9LZXkyQ2xpY2tVcChldnQ6IEtleWJvYXJkRXZlbnQsIG9wdGlvbnMgPSB7IHByb2Nlc3NFc2M6IHRydWUgfSk6IHZvaWQge1xuICBpZiAoISFldnQudGFyZ2V0ICYmICg8YW55PmV2dC50YXJnZXQpW1wiY29udGVudEVkaXRhYmxlXCJdID09PSBcInRydWVcIikge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBlbGVtZW50OiBhbnkgPSBldnQudGFyZ2V0O1xuICBpZiAoIWVsZW1lbnQpIHJldHVybjtcbiAgY29uc3QgY2hhcjogbnVtYmVyID0gZXZ0LndoaWNoIHx8IGV2dC5rZXlDb2RlO1xuICBpZiAoY2hhciA9PT0gOSkge1xuICAgIGlmICghIWVsZW1lbnQuY2xhc3NMaXN0ICYmICFlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhrZXlGb2N1c2VkQ2xhc3NOYW1lKSkge1xuICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKGtleUZvY3VzZWRDbGFzc05hbWUpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChjaGFyID09PSAxMyB8fCBjaGFyID09PSAzMikge1xuICAgIGlmIChlbGVtZW50LmNsaWNrKSBlbGVtZW50LmNsaWNrKCk7XG4gIH0gZWxzZSBpZiAob3B0aW9ucy5wcm9jZXNzRXNjICYmIGNoYXIgPT09IDI3KSB7XG4gICAgaWYgKGVsZW1lbnQuYmx1cikgZWxlbWVudC5ibHVyKCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGRvS2V5MkNsaWNrRG93bihldnQ6IEtleWJvYXJkRXZlbnQsIG9wdGlvbnMgPSB7IHByb2Nlc3NFc2M6IHRydWUgfSk6IHZvaWQge1xuICBpZiAoISFldnQudGFyZ2V0ICYmICg8YW55PmV2dC50YXJnZXQpW1wiY29udGVudEVkaXRhYmxlXCJdID09PSBcInRydWVcIikge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgY2hhciA9IGV2dC53aGljaCB8fCBldnQua2V5Q29kZTtcbiAgY29uc3Qgc3VwcG9ydGVkQ29kZXMgPSBbMTMsIDMyXTtcbiAgaWYgKG9wdGlvbnMucHJvY2Vzc0VzYykge1xuICAgIHN1cHBvcnRlZENvZGVzLnB1c2goMjcpO1xuICB9XG4gIGlmIChzdXBwb3J0ZWRDb2Rlcy5pbmRleE9mKGNoYXIpICE9PSAtMSkge1xuICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG59XG5mdW5jdGlvbiBpbmNyZWFzZUhlaWdodEJ5Q29udGVudChlbGVtZW50OiBIVE1MRWxlbWVudCwgZ2V0Q29tcHV0ZWRTdHlsZT86IChlbHQ6IEVsZW1lbnQpID0+IGFueSkge1xuICBpZiAoIWVsZW1lbnQpIHJldHVybjtcbiAgaWYgKCFnZXRDb21wdXRlZFN0eWxlKSBnZXRDb21wdXRlZFN0eWxlID0gKGVsdDogRWxlbWVudCkgPT4geyByZXR1cm4gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWx0KTsgfTtcblxuICBjb25zdCBzdHlsZSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG4gIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gXCJhdXRvXCI7XG4gIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gKGVsZW1lbnQuc2Nyb2xsSGVpZ2h0ICsgcGFyc2VGbG9hdChzdHlsZS5ib3JkZXJUb3BXaWR0aCkgKyBwYXJzZUZsb2F0KHN0eWxlLmJvcmRlckJvdHRvbVdpZHRoKSkgKyBcInB4XCI7XG59XG5mdW5jdGlvbiBnZXRPcmlnaW5hbEV2ZW50KGV2ZW50OiBhbnkpIHtcbiAgcmV0dXJuIGV2ZW50Lm9yaWdpbmFsRXZlbnQgfHwgZXZlbnQ7XG59XG5mdW5jdGlvbiBwcmV2ZW50RGVmYXVsdHMoZXZlbnQ6IGFueSkge1xuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbn1cblxuZXhwb3J0IHtcbiAgY29tcGFyZVZlcnNpb25zLFxuICBjb25maXJtQWN0aW9uLFxuICBkZXRlY3RJRU9yRWRnZSxcbiAgZGV0ZWN0SUVCcm93c2VyLFxuICBsb2FkRmlsZUZyb21CYXNlNjQsXG4gIGlzTW9iaWxlLFxuICBpc0VsZW1lbnRWaXNpYmxlLFxuICBmaW5kU2Nyb2xsYWJsZVBhcmVudCxcbiAgc2Nyb2xsRWxlbWVudEJ5Q2hpbGRJZCxcbiAgY3JlYXRlU3ZnLFxuICBkb0tleTJDbGlja0JsdXIsXG4gIGRvS2V5MkNsaWNrVXAsXG4gIGRvS2V5MkNsaWNrRG93bixcbiAgZ2V0SWNvbk5hbWVGcm9tUHJveHksXG4gIGluY3JlYXNlSGVpZ2h0QnlDb250ZW50LFxuICBnZXRPcmlnaW5hbEV2ZW50LFxuICBwcmV2ZW50RGVmYXVsdHNcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfcmVhY3RfXzsiLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfcmVhY3RfZG9tX187IiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX3N1cnZleV9jb3JlX187Il0sInNvdXJjZVJvb3QiOiIifQ==
|