botframework-directlinejs 0.15.8 → 0.15.9
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/dist/directline.js +1 -1
- package/dist/directline.js.LICENSE.txt +18 -7
- package/dist/stats.json +47422 -28993
- package/lib/createDeferred.js +2 -3
- package/lib/directLine.js +32 -31
- package/lib/directLine.mock.js +19 -24
- package/lib/directLineStreaming.js +459 -482
- package/lib/parseFilename.js +3 -2
- package/lib/streaming/WebSocketClientWithNetworkInformation.js +33 -46
- package/package.json +31 -34
package/lib/createDeferred.js
CHANGED
|
@@ -12,6 +12,5 @@ function createDeferred() {
|
|
|
12
12
|
});
|
|
13
13
|
return deferred;
|
|
14
14
|
}
|
|
15
|
-
var _default = createDeferred;
|
|
16
|
-
|
|
17
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcmVhdGVEZWZlcnJlZCIsImRlZmVycmVkIiwicHJvbWlzZSIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiX2RlZmF1bHQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vc3JjL2NyZWF0ZURlZmVycmVkLnRzIl0sInNvdXJjZXNDb250ZW50IjpbInR5cGUgRGVmZXJyZWQ8VD4gPSB7XG4gIHByb21pc2U6IFByb21pc2U8VD47XG4gIHJlamVjdDogKHJlYXNvbj86IGFueSkgPT4gdm9pZDtcbiAgcmVzb2x2ZTogKHZhbHVlOiBUIHwgUHJvbWlzZUxpa2U8VD4pID0+IHZvaWQ7XG59O1xuXG5mdW5jdGlvbiBjcmVhdGVEZWZlcnJlZDxUPigpOiBEZWZlcnJlZDxUPiB7XG4gIGNvbnN0IGRlZmVycmVkOiBQYXJ0aWFsPERlZmVycmVkPFQ+PiA9IHt9O1xuXG4gIGRlZmVycmVkLnByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgZGVmZXJyZWQucmVqZWN0ID0gcmVqZWN0O1xuICAgIGRlZmVycmVkLnJlc29sdmUgPSByZXNvbHZlO1xuICB9KTtcblxuICByZXR1cm4gZGVmZXJyZWQgYXMgRGVmZXJyZWQ8VD47XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZURlZmVycmVkO1xuZXhwb3J0IHR5cGUgeyBEZWZlcnJlZCB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFNQSxTQUFTQSxjQUFjQSxDQUFBLEVBQW1CO0VBQ3hDLElBQU1DLFFBQThCLEdBQUcsQ0FBQyxDQUFDO0VBRXpDQSxRQUFRLENBQUNDLE9BQU8sR0FBRyxJQUFJQyxPQUFPLENBQUMsVUFBQ0MsT0FBTyxFQUFFQyxNQUFNLEVBQUs7SUFDbERKLFFBQVEsQ0FBQ0ksTUFBTSxHQUFHQSxNQUFNO0lBQ3hCSixRQUFRLENBQUNHLE9BQU8sR0FBR0EsT0FBTztFQUM1QixDQUFDLENBQUM7RUFFRixPQUFPSCxRQUFRO0FBQ2pCO0FBQUMsSUFBQUssUUFBQSxHQUVjTixjQUFjO0FBQUFPLE9BQUEsY0FBQUQsUUFBQSIsImlnbm9yZUxpc3QiOltdfQ==
|
|
15
|
+
var _default = exports["default"] = createDeferred;
|
|
16
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcmVhdGVEZWZlcnJlZCIsImRlZmVycmVkIiwicHJvbWlzZSIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiX2RlZmF1bHQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vc3JjL2NyZWF0ZURlZmVycmVkLnRzIl0sInNvdXJjZXNDb250ZW50IjpbInR5cGUgRGVmZXJyZWQ8VD4gPSB7XG4gIHByb21pc2U6IFByb21pc2U8VD47XG4gIHJlamVjdDogKHJlYXNvbj86IGFueSkgPT4gdm9pZDtcbiAgcmVzb2x2ZTogKHZhbHVlOiBUIHwgUHJvbWlzZUxpa2U8VD4pID0+IHZvaWQ7XG59O1xuXG5mdW5jdGlvbiBjcmVhdGVEZWZlcnJlZDxUPigpOiBEZWZlcnJlZDxUPiB7XG4gIGNvbnN0IGRlZmVycmVkOiBQYXJ0aWFsPERlZmVycmVkPFQ+PiA9IHt9O1xuXG4gIGRlZmVycmVkLnByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgZGVmZXJyZWQucmVqZWN0ID0gcmVqZWN0O1xuICAgIGRlZmVycmVkLnJlc29sdmUgPSByZXNvbHZlO1xuICB9KTtcblxuICByZXR1cm4gZGVmZXJyZWQgYXMgRGVmZXJyZWQ8VD47XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZURlZmVycmVkO1xuZXhwb3J0IHR5cGUgeyBEZWZlcnJlZCB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFNQSxTQUFTQSxjQUFjQSxDQUFBLEVBQW1CO0VBQ3hDLElBQU1DLFFBQThCLEdBQUcsQ0FBQyxDQUFDO0VBRXpDQSxRQUFRLENBQUNDLE9BQU8sR0FBRyxJQUFJQyxPQUFPLENBQUMsVUFBQ0MsT0FBTyxFQUFFQyxNQUFNLEVBQUs7SUFDbERKLFFBQVEsQ0FBQ0ksTUFBTSxHQUFHQSxNQUFNO0lBQ3hCSixRQUFRLENBQUNHLE9BQU8sR0FBR0EsT0FBTztFQUM1QixDQUFDLENBQUM7RUFFRixPQUFPSCxRQUFRO0FBQ2pCO0FBQUMsSUFBQUssUUFBQSxHQUFBQyxPQUFBLGNBRWNQLGNBQWMiLCJpZ25vcmVMaXN0IjpbXX0=
|
package/lib/directLine.js
CHANGED
|
@@ -5,13 +5,13 @@ var _typeof = require("@babel/runtime/helpers/typeof");
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
+
exports.DirectLine = exports.ConnectionStatus = void 0;
|
|
8
9
|
Object.defineProperty(exports, "DirectLineStreaming", {
|
|
9
10
|
enumerable: true,
|
|
10
11
|
get: function get() {
|
|
11
12
|
return _directLineStreaming.DirectLineStreaming;
|
|
12
13
|
}
|
|
13
14
|
});
|
|
14
|
-
exports.DirectLine = exports.ConnectionStatus = void 0;
|
|
15
15
|
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
|
16
16
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
17
17
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
@@ -43,26 +43,29 @@ require("rxjs/add/observable/throw");
|
|
|
43
43
|
var _dedupeFilenames = _interopRequireDefault(require("./dedupeFilenames"));
|
|
44
44
|
var _directLineStreaming = require("./directLineStreaming");
|
|
45
45
|
var _excluded = ["contentUrl"];
|
|
46
|
-
function
|
|
47
|
-
function
|
|
48
|
-
function
|
|
49
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } // In order to keep file size down, only import the parts of rxjs that we use
|
|
46
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
|
47
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
48
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } // In order to keep file size down, only import the parts of rxjs that we use
|
|
50
49
|
var DIRECT_LINE_VERSION = 'DirectLine/3.0';
|
|
51
50
|
|
|
52
51
|
// Direct Line 3.0 types
|
|
53
52
|
|
|
54
53
|
// Deprecated format for Skype channels. For testing legacy bots in Emulator only.
|
|
55
54
|
// These types are specific to this client library, not to Direct Line 3.0
|
|
56
|
-
var ConnectionStatus
|
|
57
|
-
exports.ConnectionStatus = ConnectionStatus;
|
|
58
|
-
(function (ConnectionStatus) {
|
|
55
|
+
var ConnectionStatus = exports.ConnectionStatus = /*#__PURE__*/function (ConnectionStatus) {
|
|
59
56
|
ConnectionStatus[ConnectionStatus["Uninitialized"] = 0] = "Uninitialized";
|
|
57
|
+
// the status when the DirectLine object is first created/constructed
|
|
60
58
|
ConnectionStatus[ConnectionStatus["Connecting"] = 1] = "Connecting";
|
|
59
|
+
// currently trying to connect to the conversation
|
|
61
60
|
ConnectionStatus[ConnectionStatus["Online"] = 2] = "Online";
|
|
61
|
+
// successfully connected to the conversation. Connection is healthy so far as we know.
|
|
62
62
|
ConnectionStatus[ConnectionStatus["ExpiredToken"] = 3] = "ExpiredToken";
|
|
63
|
+
// last operation errored out with an expired token. Possibly waiting for someone to supply a new one.
|
|
63
64
|
ConnectionStatus[ConnectionStatus["FailedToConnect"] = 4] = "FailedToConnect";
|
|
64
|
-
|
|
65
|
-
|
|
65
|
+
// the initial attempt to connect to the conversation failed. No recovery possible.
|
|
66
|
+
ConnectionStatus[ConnectionStatus["Ended"] = 5] = "Ended"; // the bot ended the conversation
|
|
67
|
+
return ConnectionStatus;
|
|
68
|
+
}({});
|
|
66
69
|
var wrapAjaxWithRetry = function wrapAjaxWithRetry(source, scheduler) {
|
|
67
70
|
var notImplemented = function notImplemented() {
|
|
68
71
|
throw new Error('not implemented');
|
|
@@ -130,7 +133,7 @@ var konsole = {
|
|
|
130
133
|
if (typeof window !== 'undefined' && window["botchatDebug"] && message) (_console = console).log.apply(_console, [message].concat(optionalParams));
|
|
131
134
|
}
|
|
132
135
|
};
|
|
133
|
-
var DirectLine = /*#__PURE__*/function () {
|
|
136
|
+
var DirectLine = exports.DirectLine = /*#__PURE__*/function () {
|
|
134
137
|
//ms
|
|
135
138
|
|
|
136
139
|
function DirectLine(options) {
|
|
@@ -190,7 +193,7 @@ var DirectLine = /*#__PURE__*/function () {
|
|
|
190
193
|
|
|
191
194
|
// Every time we're about to make a Direct Line REST call, we call this first to see check the current connection status.
|
|
192
195
|
// Either throws an error (indicating an error state) or emits a null, indicating a (presumably) healthy connection
|
|
193
|
-
(0, _createClass2["default"])(DirectLine, [{
|
|
196
|
+
return (0, _createClass2["default"])(DirectLine, [{
|
|
194
197
|
key: "checkConnection",
|
|
195
198
|
value: function checkConnection() {
|
|
196
199
|
var _this = this;
|
|
@@ -593,10 +596,10 @@ var DirectLine = /*#__PURE__*/function () {
|
|
|
593
596
|
}, {
|
|
594
597
|
key: "observableWebSocket",
|
|
595
598
|
value: function observableWebSocket() {
|
|
596
|
-
var
|
|
599
|
+
var _this0 = this;
|
|
597
600
|
return _Observable.Observable.create(function (subscriber) {
|
|
598
|
-
konsole.log("creating WebSocket",
|
|
599
|
-
var ws = new
|
|
601
|
+
konsole.log("creating WebSocket", _this0.streamUrl);
|
|
602
|
+
var ws = new _this0.services.WebSocket(_this0.streamUrl);
|
|
600
603
|
var sub;
|
|
601
604
|
var closed;
|
|
602
605
|
ws.onopen = function (open) {
|
|
@@ -605,7 +608,7 @@ var DirectLine = /*#__PURE__*/function () {
|
|
|
605
608
|
// If we periodically ping the server with empty messages, it helps Chrome
|
|
606
609
|
// realize when connection breaks, and close the socket. We then throw an
|
|
607
610
|
// error, and that give us the opportunity to attempt to reconnect.
|
|
608
|
-
sub = _Observable.Observable.interval(
|
|
611
|
+
sub = _Observable.Observable.interval(_this0.timeout, _this0.services.scheduler).subscribe(function (_) {
|
|
609
612
|
try {
|
|
610
613
|
ws.send("");
|
|
611
614
|
} catch (e) {
|
|
@@ -647,18 +650,18 @@ var DirectLine = /*#__PURE__*/function () {
|
|
|
647
650
|
}, {
|
|
648
651
|
key: "reconnectToConversation",
|
|
649
652
|
value: function reconnectToConversation() {
|
|
650
|
-
var
|
|
653
|
+
var _this1 = this;
|
|
651
654
|
return this.checkConnection(true).flatMap(function (_) {
|
|
652
|
-
return
|
|
655
|
+
return _this1.services.ajax({
|
|
653
656
|
method: "GET",
|
|
654
|
-
url: "".concat(
|
|
655
|
-
timeout:
|
|
657
|
+
url: "".concat(_this1.domain, "/conversations/").concat(_this1.conversationId, "?watermark=").concat(_this1.watermark),
|
|
658
|
+
timeout: _this1.timeout,
|
|
656
659
|
headers: _objectSpread({
|
|
657
660
|
"Accept": "application/json"
|
|
658
|
-
},
|
|
661
|
+
}, _this1.commonHeaders())
|
|
659
662
|
})["do"](function (result) {
|
|
660
|
-
if (!
|
|
661
|
-
|
|
663
|
+
if (!_this1.secret) _this1.token = result.response.token;
|
|
664
|
+
_this1.streamUrl = result.response.streamUrl;
|
|
662
665
|
}).map(function (_) {
|
|
663
666
|
return null;
|
|
664
667
|
}).retryWhen(function (error$) {
|
|
@@ -666,12 +669,12 @@ var DirectLine = /*#__PURE__*/function () {
|
|
|
666
669
|
if (error.status === 403) {
|
|
667
670
|
// token has expired. We can't recover from this here, but the embedding
|
|
668
671
|
// website might eventually call reconnect() with a new token and streamUrl.
|
|
669
|
-
|
|
672
|
+
_this1.expiredToken();
|
|
670
673
|
} else if (error.status === 404) {
|
|
671
|
-
return _Observable.Observable["throw"](errorConversationEnded,
|
|
674
|
+
return _Observable.Observable["throw"](errorConversationEnded, _this1.services.scheduler);
|
|
672
675
|
}
|
|
673
|
-
return _Observable.Observable.of(error,
|
|
674
|
-
}).delay(
|
|
676
|
+
return _Observable.Observable.of(error, _this1.services.scheduler);
|
|
677
|
+
}).delay(_this1.timeout, _this1.services.scheduler).take(_this1.retries);
|
|
675
678
|
});
|
|
676
679
|
});
|
|
677
680
|
}
|
|
@@ -691,7 +694,7 @@ var DirectLine = /*#__PURE__*/function () {
|
|
|
691
694
|
if (customAgent) {
|
|
692
695
|
clientAgent += "; ".concat(customAgent);
|
|
693
696
|
}
|
|
694
|
-
return "".concat(DIRECT_LINE_VERSION, " (").concat(clientAgent, " ").concat("0.15.
|
|
697
|
+
return "".concat(DIRECT_LINE_VERSION, " (").concat(clientAgent, " ").concat("0.15.9", ")");
|
|
695
698
|
}
|
|
696
699
|
}, {
|
|
697
700
|
key: "setUserId",
|
|
@@ -722,7 +725,5 @@ var DirectLine = /*#__PURE__*/function () {
|
|
|
722
725
|
}
|
|
723
726
|
}
|
|
724
727
|
}]);
|
|
725
|
-
return DirectLine;
|
|
726
728
|
}();
|
|
727
|
-
exports.DirectLine = DirectLine;
|
|
728
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZXF1aXJlIiwiX0JlaGF2aW9yU3ViamVjdCIsIl9PYnNlcnZhYmxlIiwiX2FzeW5jIiwiX2p3dERlY29kZSIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiX2RlZHVwZUZpbGVuYW1lcyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfZGlyZWN0TGluZVN0cmVhbWluZyIsIl9leGNsdWRlZCIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsIm5vZGVJbnRlcm9wIiwiV2Vha01hcCIsImNhY2hlQmFiZWxJbnRlcm9wIiwiY2FjaGVOb2RlSW50ZXJvcCIsIm9iaiIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mIiwiY2FjaGUiLCJoYXMiLCJnZXQiLCJuZXdPYmoiLCJoYXNQcm9wZXJ0eURlc2NyaXB0b3IiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImtleSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImRlc2MiLCJzZXQiLCJvd25LZXlzIiwib2JqZWN0IiwiZW51bWVyYWJsZU9ubHkiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwic3ltYm9scyIsImZpbHRlciIsInN5bSIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwidGFyZ2V0IiwiaSIsImFyZ3VtZW50cyIsImxlbmd0aCIsInNvdXJjZSIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJESVJFQ1RfTElORV9WRVJTSU9OIiwiQ29ubmVjdGlvblN0YXR1cyIsImV4cG9ydHMiLCJ3cmFwQWpheFdpdGhSZXRyeSIsInNjaGVkdWxlciIsIm5vdEltcGxlbWVudGVkIiwiRXJyb3IiLCJpbm5lciIsInJlc3BvbnNlJCIsImVyciIsInN0YXR1cyIsInJldHJ5QWZ0ZXJWYWx1ZSIsInhociIsImdldFJlc3BvbnNlSGVhZGVyIiwicmV0cnlBZnRlciIsIk51bWJlciIsImlzTmFOIiwiT2JzZXJ2YWJsZSIsInRpbWVyIiwiZmxhdE1hcCIsIl8iLCJvdXRlciIsInVybE9yUmVxdWVzdCIsImFzc2lnbiIsInVybCIsImhlYWRlcnMiLCJwb3N0IiwiYm9keSIsInB1dCIsInBhdGNoIiwiX2RlbGV0ZSIsImdldEpTT04iLCJtYWtlU2VydmljZXMiLCJzZXJ2aWNlcyIsIkFzeW5jU2NoZWR1bGVyIiwiYWpheCIsIldlYlNvY2tldCIsInJhbmRvbSIsIk1hdGgiLCJsaWZldGltZVJlZnJlc2hUb2tlbiIsImludGVydmFsUmVmcmVzaFRva2VuIiwiUE9MTElOR19JTlRFUlZBTF9MT1dFUl9CT1VORCIsImVycm9yRXhwaXJlZFRva2VuIiwiZXJyb3JDb252ZXJzYXRpb25FbmRlZCIsImVycm9yRmFpbGVkVG9Db25uZWN0Iiwia29uc29sZSIsImxvZyIsIm1lc3NhZ2UiLCJfY29uc29sZSIsIl9sZW4iLCJvcHRpb25hbFBhcmFtcyIsIkFycmF5IiwiX2tleSIsIndpbmRvdyIsImNvbnNvbGUiLCJjb25jYXQiLCJEaXJlY3RMaW5lIiwib3B0aW9ucyIsIl9jbGFzc0NhbGxDaGVjazIiLCJCZWhhdmlvclN1YmplY3QiLCJVbmluaXRpYWxpemVkIiwic2VjcmV0IiwidG9rZW4iLCJ3ZWJTb2NrZXQiLCJ1bmRlZmluZWQiLCJzdHJlYW1pbmciLCJjb252ZXJzYXRpb25TdGFydFByb3BlcnRpZXMiLCJsb2NhbGUiLCJ0b1N0cmluZyIsImxvY2FsZU9uU3RhcnRDb252ZXJzYXRpb24iLCJ3YXJuIiwiZG9tYWluIiwiY29udmVyc2F0aW9uSWQiLCJ3YXRlcm1hcmsiLCJzdHJlYW1VcmwiLCJ0aW1lb3V0IiwicmV0cmllcyIsIl9ib3RBZ2VudCIsImdldEJvdEFnZW50IiwiYm90QWdlbnQiLCJwYXJzZWRQb2xsaW5nSW50ZXJ2YWwiLCJwb2xsaW5nSW50ZXJ2YWwiLCJleHBpcmVkVG9rZW5FeGhhdXN0aW9uIiwic2V0Q29ubmVjdGlvblN0YXR1c0ZhbGxiYWNrIiwiRXhwaXJlZFRva2VuIiwiRmFpbGVkVG9Db25uZWN0IiwiYWN0aXZpdHkkIiwid2ViU29ja2V0QWN0aXZpdHkkIiwicG9sbGluZ0dldEFjdGl2aXR5JCIsInNoYXJlIiwiX2NyZWF0ZUNsYXNzMiIsInZhbHVlIiwiY2hlY2tDb25uZWN0aW9uIiwiX3RoaXMiLCJvbmNlIiwib2JzIiwiY29ubmVjdGlvblN0YXR1cyQiLCJjb25uZWN0aW9uU3RhdHVzIiwibmV4dCIsIkNvbm5lY3RpbmciLCJPbmxpbmUiLCJvZiIsInN0YXJ0Q29udmVyc2F0aW9uIiwiY29udmVyc2F0aW9uIiwicmVmZXJlbmNlR3JhbW1hcklkIiwicmVmcmVzaFRva2VuTG9vcCIsImVycm9yIiwibWFwIiwiRW5kZWQiLCJ0YWtlIiwiY29ubmVjdGlvblN0YXR1c0Zyb20iLCJjb25uZWN0aW9uU3RhdHVzVG8iLCJtYXhBdHRlbXB0cyIsImF0dGVtcHRzIiwiY3VyclN0YXR1cyIsImV4cGlyZWRUb2tlbiIsImdldFZhbHVlIiwicHJvdGVjdGVkQ29ubmVjdGlvblN0YXR1cyIsIl90aGlzMiIsIm1ldGhvZCIsInVzZXIiLCJpZCIsInVzZXJJZE9uU3RhcnRDb252ZXJzYXRpb24iLCJjb21tb25IZWFkZXJzIiwiYWpheFJlc3BvbnNlIiwicmVzcG9uc2UiLCJyZXRyeVdoZW4iLCJlcnJvciQiLCJtZXJnZU1hcCIsImRlbGF5IiwiX3RoaXMzIiwidG9rZW5SZWZyZXNoU3Vic2NyaXB0aW9uIiwiaW50ZXJ2YWwiLCJyZWZyZXNoVG9rZW4iLCJzdWJzY3JpYmUiLCJEYXRlIiwiX3RoaXM0IiwicmVjb25uZWN0IiwiZW5kIiwidW5zdWJzY3JpYmUiLCJlIiwiZ2V0U2Vzc2lvbklkIiwiX3RoaXM1Iiwid2l0aENyZWRlbnRpYWxzIiwic2Vzc2lvbklkIiwiY2F0Y2hFeHBpcmVkVG9rZW4iLCJwb3N0QWN0aXZpdHkiLCJhY3Rpdml0eSIsIl90aGlzNiIsImRlbGl2ZXJ5TW9kZSIsImZyb20iLCJ0eXBlIiwiYXR0YWNobWVudHMiLCJwb3N0TWVzc2FnZVdpdGhBdHRhY2htZW50cyIsImNhdGNoUG9zdEVycm9yIiwiX3RoaXM3IiwiYXR0YWNobWVudE5hbWVzIiwiZGVkdXBlRmlsZW5hbWVzIiwibWVkaWEiLCJuYW1lIiwiY2xlYW5zZWRBdHRhY2htZW50cyIsImF0dGFjaG1lbnQiLCJpbmRleCIsImZvcm1EYXRhIiwiRm9ybURhdGEiLCJhcHBlbmQiLCJCbG9iIiwiSlNPTiIsInN0cmluZ2lmeSIsIl9yZWYiLCJzdHJpbmciLCJjb250ZW50VXJsIiwib3RoZXJzIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzMiIsInJlc3BvbnNlVHlwZSIsImNvbnRlbnRUeXBlIiwiY291bnQiLCJfdGhpczgiLCJwb2xsZXIkIiwiY3JlYXRlIiwic3Vic2NyaWJlciIsInRyaWdnZXIkIiwic3RhcnRUaW1lc3RhbXAiLCJub3ciLCJBY2NlcHQiLCJyZXN1bHQiLCJzZXRUaW1lb3V0IiwibWF4IiwiZW1wdHkiLCJhY3Rpdml0eUdyb3VwIiwib2JzZXJ2YWJsZUZyb21BY3Rpdml0eUdyb3VwIiwiYWN0aXZpdGllcyIsIl90aGlzOSIsIm9ic2VydmFibGVXZWJTb2NrZXQiLCJnZXRSZXRyeURlbGF5IiwicmVjb25uZWN0VG9Db252ZXJzYXRpb24iLCJmbG9vciIsIl90aGlzMTAiLCJ3cyIsInN1YiIsImNsb3NlZCIsIm9ub3BlbiIsIm9wZW4iLCJzZW5kIiwib25jbG9zZSIsImNsb3NlIiwib25lcnJvciIsIm9ubWVzc2FnZSIsImRhdGEiLCJwYXJzZSIsInJlYWR5U3RhdGUiLCJfdGhpczExIiwiY3VzdG9tQWdlbnQiLCJjbGllbnRBZ2VudCIsInNldFVzZXJJZCIsInVzZXJJZCIsInVzZXJJZEZyb21Ub2tlbiIsInBhcnNlVG9rZW4iLCJ0ZXN0IiwiX3JlZjIiLCJqd3REZWNvZGUiLCJJbnZhbGlkVG9rZW5FcnJvciJdLCJzb3VyY2VzIjpbIi4uL3NyYy9kaXJlY3RMaW5lLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEluIG9yZGVyIHRvIGtlZXAgZmlsZSBzaXplIGRvd24sIG9ubHkgaW1wb3J0IHRoZSBwYXJ0cyBvZiByeGpzIHRoYXQgd2UgdXNlXG5cbmltcG9ydCAnY29yZS1qcy9mZWF0dXJlcy9wcm9taXNlJztcbmltcG9ydCAndXJsLXNlYXJjaC1wYXJhbXMtcG9seWZpbGwnO1xuaW1wb3J0IHsgQWpheFJlc3BvbnNlLCBBamF4Q3JlYXRpb25NZXRob2QsIEFqYXhSZXF1ZXN0LCBBamF4RXJyb3IgfSBmcm9tICdyeGpzL29ic2VydmFibGUvZG9tL0FqYXhPYnNlcnZhYmxlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMvQmVoYXZpb3JTdWJqZWN0JztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzL09ic2VydmFibGUnO1xuaW1wb3J0IHsgSVNjaGVkdWxlciB9IGZyb20gJ3J4anMvU2NoZWR1bGVyJztcbmltcG9ydCB7IFN1YnNjcmliZXIgfSBmcm9tICdyeGpzL1N1YnNjcmliZXInO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcy9TdWJzY3JpcHRpb24nO1xuaW1wb3J0IHsgYXN5bmMgYXMgQXN5bmNTY2hlZHVsZXIgfSBmcm9tICdyeGpzL3NjaGVkdWxlci9hc3luYyc7XG5pbXBvcnQgand0RGVjb2RlLCB7IEp3dFBheWxvYWQsIEludmFsaWRUb2tlbkVycm9yIH0gZnJvbSAnand0LWRlY29kZSc7XG5cbmltcG9ydCAncnhqcy9hZGQvb3BlcmF0b3IvY2F0Y2gnO1xuaW1wb3J0ICdyeGpzL2FkZC9vcGVyYXRvci9jb21iaW5lTGF0ZXN0JztcbmltcG9ydCAncnhqcy9hZGQvb3BlcmF0b3IvY291bnQnO1xuaW1wb3J0ICdyeGpzL2FkZC9vcGVyYXRvci9kZWxheSc7XG5pbXBvcnQgJ3J4anMvYWRkL29wZXJhdG9yL2RvJztcbmltcG9ydCAncnhqcy9hZGQvb3BlcmF0b3IvZmlsdGVyJztcbmltcG9ydCAncnhqcy9hZGQvb3BlcmF0b3IvbWFwJztcbmltcG9ydCAncnhqcy9hZGQvb3BlcmF0b3IvbWVyZ2VNYXAnO1xuaW1wb3J0ICdyeGpzL2FkZC9vcGVyYXRvci9jb25jYXRNYXAnO1xuaW1wb3J0ICdyeGpzL2FkZC9vcGVyYXRvci9yZXRyeVdoZW4nO1xuaW1wb3J0ICdyeGpzL2FkZC9vcGVyYXRvci9zaGFyZSc7XG5pbXBvcnQgJ3J4anMvYWRkL29wZXJhdG9yL3Rha2UnO1xuXG5pbXBvcnQgJ3J4anMvYWRkL29ic2VydmFibGUvZG9tL2FqYXgnO1xuaW1wb3J0ICdyeGpzL2FkZC9vYnNlcnZhYmxlL2VtcHR5JztcbmltcG9ydCAncnhqcy9hZGQvb2JzZXJ2YWJsZS9mcm9tJztcbmltcG9ydCAncnhqcy9hZGQvb2JzZXJ2YWJsZS9pbnRlcnZhbCc7XG5pbXBvcnQgJ3J4anMvYWRkL29ic2VydmFibGUvb2YnO1xuaW1wb3J0ICdyeGpzL2FkZC9vYnNlcnZhYmxlL3Rocm93JztcblxuaW1wb3J0IGRlZHVwZUZpbGVuYW1lcyBmcm9tICcuL2RlZHVwZUZpbGVuYW1lcyc7XG5pbXBvcnQgeyBvYmplY3RFeHByZXNzaW9uIH0gZnJvbSAnQGJhYmVsL3R5cGVzJztcblxuaW1wb3J0IHsgRGlyZWN0TGluZVN0cmVhbWluZyB9IGZyb20gJy4vZGlyZWN0TGluZVN0cmVhbWluZyc7XG5leHBvcnQgeyBEaXJlY3RMaW5lU3RyZWFtaW5nIH07XG5cbmNvbnN0IERJUkVDVF9MSU5FX1ZFUlNJT04gPSAnRGlyZWN0TGluZS8zLjAnO1xuXG5kZWNsYXJlIHZhciBwcm9jZXNzOiB7XG4gICAgYXJjaDogc3RyaW5nO1xuICAgIGVudjoge1xuICAgICAgICBWRVJTSU9OOiBzdHJpbmc7XG4gICAgICAgIG5wbV9wYWNrYWdlX3ZlcnNpb246IHN0cmluZztcbiAgICB9O1xuICAgIHBsYXRmb3JtOiBzdHJpbmc7XG4gICAgcmVsZWFzZTogc3RyaW5nO1xuICAgIHZlcnNpb246IHN0cmluZztcbn07XG5cbi8vIERpcmVjdCBMaW5lIDMuMCB0eXBlc1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbnZlcnNhdGlvbiB7XG4gICAgY29udmVyc2F0aW9uSWQ6IHN0cmluZyxcbiAgICB0b2tlbjogc3RyaW5nLFxuICAgIGVUYWc/OiBzdHJpbmcsXG4gICAgc3RyZWFtVXJsPzogc3RyaW5nLFxuICAgIHJlZmVyZW5jZUdyYW1tYXJJZD86IHN0cmluZ1xufVxuXG5leHBvcnQgdHlwZSBNZWRpYVR5cGUgPSBcImltYWdlL3BuZ1wiIHwgXCJpbWFnZS9qcGdcIiB8IFwiaW1hZ2UvanBlZ1wiIHwgXCJpbWFnZS9naWZcIiB8IFwiaW1hZ2Uvc3ZnK3htbFwiIHwgXCJhdWRpby9tcGVnXCIgfCBcImF1ZGlvL21wNFwiIHwgXCJ2aWRlby9tcDRcIjtcblxuZXhwb3J0IGludGVyZmFjZSBNZWRpYSB7XG4gICAgY29udGVudFR5cGU6IE1lZGlhVHlwZSxcbiAgICBjb250ZW50VXJsOiBzdHJpbmcsXG4gICAgbmFtZT86IHN0cmluZyxcbiAgICB0aHVtYm5haWxVcmw/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVbmtub3duTWVkaWF7XG4gICAgY29udGVudFR5cGU6IHN0cmluZyxcbiAgICBjb250ZW50VXJsOiBzdHJpbmcsXG4gICAgbmFtZT86IHN0cmluZyxcbiAgICB0aHVtYm5haWxVcmw/OiBzdHJpbmdcbn1cblxuZXhwb3J0IHR5cGUgQ2FyZEFjdGlvblR5cGVzID0gXCJjYWxsXCIgfCBcImRvd25sb2FkRmlsZVwifCBcImltQmFja1wiIHwgXCJtZXNzYWdlQmFja1wiIHwgXCJvcGVuVXJsXCIgfCBcInBsYXlBdWRpb1wiIHwgXCJwbGF5VmlkZW9cIiB8IFwicG9zdEJhY2tcIiB8IFwic2lnbmluXCIgfCBcInNob3dJbWFnZVwiO1xuXG5leHBvcnQgdHlwZSBDYXJkQWN0aW9uID0gQ2FsbENhcmRBY3Rpb24gfCBEb3dubG9hZEZpbGVDYXJkQWN0aW9uIHwgSU1CYWNrQ2FyZEFjdGlvbiB8IE1lc3NhZ2VCYWNrQ2FyZEFjdGlvbiB8IE9wZW5VUkxDYXJkQWN0aW9uIHwgUGxheUF1ZGlvQ2FyZEFjdGlvbiB8IFBsYXlWaWRlb0NhcmRBY3Rpb24gfCBQb3N0QmFja0NhcmRBY3Rpb24gfCBTaWduSW5DYXJkQWN0aW9uIHwgU2hvd0ltYWdlQ2FyZEFjdGlvbjtcblxuZXhwb3J0IGludGVyZmFjZSBDYWxsQ2FyZEFjdGlvbiB7XG4gICAgaW1hZ2U/OiBzdHJpbmcsXG4gICAgdGl0bGU6IHN0cmluZyxcbiAgICB0eXBlOiBcImNhbGxcIixcbiAgICB2YWx1ZTogYW55XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRG93bmxvYWRGaWxlQ2FyZEFjdGlvbiB7XG4gICAgaW1hZ2U/OiBzdHJpbmcsXG4gICAgdGl0bGU6IHN0cmluZyxcbiAgICB0eXBlOiBcImRvd25sb2FkRmlsZVwiLFxuICAgIHZhbHVlOiBhbnlcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTUJhY2tDYXJkQWN0aW9uIHtcbiAgICBpbWFnZT86IHN0cmluZyxcbiAgICB0aXRsZT86IHN0cmluZyxcbiAgICB0eXBlOiBcImltQmFja1wiLFxuICAgIHZhbHVlOiBzdHJpbmdcbn1cblxuZXhwb3J0IHR5cGUgTWVzc2FnZUJhY2tDYXJkQWN0aW9uID0gTWVzc2FnZUJhY2tXaXRoSW1hZ2UgfCBNZXNzYWdlQmFja1dpdGhUaXRsZVxuXG5leHBvcnQgaW50ZXJmYWNlIE1lc3NhZ2VCYWNrV2l0aEltYWdlIHtcbiAgICBkaXNwbGF5VGV4dD86IHN0cmluZyxcbiAgICBpbWFnZTogc3RyaW5nLFxuICAgIHRleHQ/OiBzdHJpbmcsXG4gICAgdGl0bGU/OiBzdHJpbmcsXG4gICAgdHlwZTogXCJtZXNzYWdlQmFja1wiLFxuICAgIHZhbHVlPzogYW55XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVzc2FnZUJhY2tXaXRoVGl0bGUge1xuICAgIGRpc3BsYXlUZXh0Pzogc3RyaW5nLFxuICAgIGltYWdlPzogc3RyaW5nLFxuICAgIHRleHQ/OiBzdHJpbmcsXG4gICAgdGl0bGU6IHN0cmluZyxcbiAgICB0eXBlOiBcIm1lc3NhZ2VCYWNrXCIsXG4gICAgdmFsdWU/OiBhbnlcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcGVuVVJMQ2FyZEFjdGlvbiB7XG4gICAgaW1hZ2U/OiBzdHJpbmcsXG4gICAgdGl0bGU6IHN0cmluZyxcbiAgICB0eXBlOiBcIm9wZW5VcmxcIixcbiAgICB2YWx1ZTogYW55XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGxheUF1ZGlvQ2FyZEFjdGlvbiB7XG4gICAgaW1hZ2U/OiBzdHJpbmcsXG4gICAgdGl0bGU6IHN0cmluZyxcbiAgICB0eXBlOiBcInBsYXlBdWRpb1wiLFxuICAgIHZhbHVlOiBhbnlcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQbGF5VmlkZW9DYXJkQWN0aW9uIHtcbiAgICBpbWFnZT86IHN0cmluZyxcbiAgICB0aXRsZTogc3RyaW5nLFxuICAgIHR5cGU6IFwicGxheVZpZGVvXCIsXG4gICAgdmFsdWU6IGFueVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBvc3RCYWNrQ2FyZEFjdGlvbiB7XG4gICAgaW1hZ2U/OiBzdHJpbmcsXG4gICAgdGl0bGU/OiBzdHJpbmcsXG4gICAgdHlwZTogXCJwb3N0QmFja1wiLFxuICAgIHZhbHVlOiBhbnlcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTaG93SW1hZ2VDYXJkQWN0aW9uIHtcbiAgICBpbWFnZT86IHN0cmluZyxcbiAgICB0aXRsZTogc3RyaW5nLFxuICAgIHR5cGU6IFwic2hvd0ltYWdlXCIsXG4gICAgdmFsdWU6IGFueVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNpZ25JbkNhcmRBY3Rpb24ge1xuICAgIGltYWdlPzogc3RyaW5nLFxuICAgIHRpdGxlOiBzdHJpbmcsXG4gICAgdHlwZTogXCJzaWduaW5cIixcbiAgICB2YWx1ZTogYW55XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FyZEltYWdlIHtcbiAgICBhbHQ/OiBzdHJpbmcsXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgdGFwPzogQ2FyZEFjdGlvblxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEhlcm9DYXJkIHtcbiAgICBjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi92bmQubWljcm9zb2Z0LmNhcmQuaGVyb1wiLFxuICAgIGNvbnRlbnQ6IHtcbiAgICAgICAgdGl0bGU/OiBzdHJpbmcsXG4gICAgICAgIHN1YnRpdGxlPzogc3RyaW5nLFxuICAgICAgICB0ZXh0Pzogc3RyaW5nLFxuICAgICAgICBpbWFnZXM/OiBDYXJkSW1hZ2VbXSxcbiAgICAgICAgYnV0dG9ucz86IENhcmRBY3Rpb25bXSxcbiAgICAgICAgdGFwPzogQ2FyZEFjdGlvblxuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBUaHVtYm5haWwge1xuICAgIGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL3ZuZC5taWNyb3NvZnQuY2FyZC50aHVtYm5haWxcIixcbiAgICBjb250ZW50OiB7XG4gICAgICAgIHRpdGxlPzogc3RyaW5nLFxuICAgICAgICBzdWJ0aXRsZT86IHN0cmluZyxcbiAgICAgICAgdGV4dD86IHN0cmluZyxcbiAgICAgICAgaW1hZ2VzPzogQ2FyZEltYWdlW10sXG4gICAgICAgIGJ1dHRvbnM/OiBDYXJkQWN0aW9uW10sXG4gICAgICAgIHRhcD86IENhcmRBY3Rpb25cbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2lnbmluIHtcbiAgICBjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi92bmQubWljcm9zb2Z0LmNhcmQuc2lnbmluXCIsXG4gICAgY29udGVudDoge1xuICAgICAgICB0ZXh0Pzogc3RyaW5nLFxuICAgICAgICBidXR0b25zPzogQ2FyZEFjdGlvbltdXG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9BdXRoIHtcbiAgICBjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi92bmQubWljcm9zb2Z0LmNhcmQub2F1dGhcIixcbiAgICBjb250ZW50OiB7XG4gICAgICAgIHRleHQ/OiBzdHJpbmcsXG4gICAgICAgIGNvbm5lY3Rpb25uYW1lOiBzdHJpbmcsXG4gICAgICAgIGJ1dHRvbnM/OiBDYXJkQWN0aW9uW11cbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVjZWlwdEl0ZW0ge1xuICAgIHRpdGxlPzogc3RyaW5nLFxuICAgIHN1YnRpdGxlPzogc3RyaW5nLFxuICAgIHRleHQ/OiBzdHJpbmcsXG4gICAgaW1hZ2U/OiBDYXJkSW1hZ2UsXG4gICAgcHJpY2U/OiBzdHJpbmcsXG4gICAgcXVhbnRpdHk/OiBzdHJpbmcsXG4gICAgdGFwPzogQ2FyZEFjdGlvblxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlY2VpcHQge1xuICAgIGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL3ZuZC5taWNyb3NvZnQuY2FyZC5yZWNlaXB0XCIsXG4gICAgY29udGVudDoge1xuICAgICAgICB0aXRsZT86IHN0cmluZyxcbiAgICAgICAgZmFjdHM/OiB7IGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIH1bXSxcbiAgICAgICAgaXRlbXM/OiBSZWNlaXB0SXRlbVtdLFxuICAgICAgICB0YXA/OiBDYXJkQWN0aW9uLFxuICAgICAgICB0YXg/OiBzdHJpbmcsXG4gICAgICAgIHZhdD86IHN0cmluZyxcbiAgICAgICAgdG90YWw/OiBzdHJpbmcsXG4gICAgICAgIGJ1dHRvbnM/OiBDYXJkQWN0aW9uW11cbiAgICB9XG59XG5cbi8vIERlcHJlY2F0ZWQgZm9ybWF0IGZvciBTa3lwZSBjaGFubmVscy4gRm9yIHRlc3RpbmcgbGVnYWN5IGJvdHMgaW4gRW11bGF0b3Igb25seS5cbmV4cG9ydCBpbnRlcmZhY2UgRmxleENhcmQge1xuICAgIGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL3ZuZC5taWNyb3NvZnQuY2FyZC5mbGV4XCIsXG4gICAgY29udGVudDoge1xuICAgICAgICB0aXRsZT86IHN0cmluZyxcbiAgICAgICAgc3VidGl0bGU/OiBzdHJpbmcsXG4gICAgICAgIHRleHQ/OiBzdHJpbmcsXG4gICAgICAgIGltYWdlcz86IENhcmRJbWFnZVtdLFxuICAgICAgICBidXR0b25zPzogQ2FyZEFjdGlvbltdLFxuICAgICAgICBhc3BlY3Q/OiBzdHJpbmdcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaW9DYXJkIHtcbiAgICBjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi92bmQubWljcm9zb2Z0LmNhcmQuYXVkaW9cIixcbiAgICBjb250ZW50OiB7XG4gICAgICAgIHRpdGxlPzogc3RyaW5nLFxuICAgICAgICBzdWJ0aXRsZT86IHN0cmluZyxcbiAgICAgICAgdGV4dD86IHN0cmluZyxcbiAgICAgICAgbWVkaWE/OiB7IHVybDogc3RyaW5nLCBwcm9maWxlPzogc3RyaW5nIH1bXSxcbiAgICAgICAgYnV0dG9ucz86IENhcmRBY3Rpb25bXSxcbiAgICAgICAgYXV0b2xvb3A/OiBib29sZWFuLFxuICAgICAgICBhdXRvc3RhcnQ/OiBib29sZWFuXG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvQ2FyZCB7XG4gICAgY29udGVudFR5cGU6IFwiYXBwbGljYXRpb24vdm5kLm1pY3Jvc29mdC5jYXJkLnZpZGVvXCIsXG4gICAgY29udGVudDoge1xuICAgICAgICB0aXRsZT86IHN0cmluZyxcbiAgICAgICAgc3VidGl0bGU/OiBzdHJpbmcsXG4gICAgICAgIHRleHQ/OiBzdHJpbmcsXG4gICAgICAgIG1lZGlhPzogeyB1cmw6IHN0cmluZywgcHJvZmlsZT86IHN0cmluZyB9W10sXG4gICAgICAgIGJ1dHRvbnM/OiBDYXJkQWN0aW9uW10sXG4gICAgICAgIGltYWdlPzogeyB1cmw6IHN0cmluZywgYWx0Pzogc3RyaW5nIH0sXG4gICAgICAgIGF1dG9sb29wPzogYm9vbGVhbixcbiAgICAgICAgYXV0b3N0YXJ0PzogYm9vbGVhblxuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBBZGFwdGl2ZUNhcmQge1xuICAgIGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL3ZuZC5taWNyb3NvZnQuY2FyZC5hZGFwdGl2ZVwiLFxuICAgIGNvbnRlbnQ6IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBbmltYXRpb25DYXJkIHtcbiAgICBjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi92bmQubWljcm9zb2Z0LmNhcmQuYW5pbWF0aW9uXCIsXG4gICAgY29udGVudDoge1xuICAgICAgICB0aXRsZT86IHN0cmluZyxcbiAgICAgICAgc3VidGl0bGU/OiBzdHJpbmcsXG4gICAgICAgIHRleHQ/OiBzdHJpbmcsXG4gICAgICAgIG1lZGlhPzogeyB1cmw6IHN0cmluZywgcHJvZmlsZT86IHN0cmluZyB9W10sXG4gICAgICAgIGJ1dHRvbnM/OiBDYXJkQWN0aW9uW10sXG4gICAgICAgIGltYWdlPzogeyB1cmw6IHN0cmluZywgYWx0Pzogc3RyaW5nIH0sXG4gICAgICAgIGF1dG9sb29wPzogYm9vbGVhbixcbiAgICAgICAgYXV0b3N0YXJ0PzogYm9vbGVhblxuICAgIH1cbn1cblxuZXhwb3J0IHR5cGUgS25vd25NZWRpYSA9IE1lZGlhIHwgSGVyb0NhcmQgfCBUaHVtYm5haWwgfCBTaWduaW4gfCBPQXV0aCB8IFJlY2VpcHQgfCBBdWRpb0NhcmQgfCBWaWRlb0NhcmQgfCBBbmltYXRpb25DYXJkIHwgRmxleENhcmQgfCBBZGFwdGl2ZUNhcmQ7XG5leHBvcnQgdHlwZSBBdHRhY2htZW50ID0gS25vd25NZWRpYSB8IFVua25vd25NZWRpYTtcblxuZXhwb3J0IHR5cGUgVXNlclJvbGUgPSBcImJvdFwiIHwgXCJjaGFubmVsXCIgfCBcInVzZXJcIjtcblxuZXhwb3J0IGludGVyZmFjZSBVc2VyIHtcbiAgICBpZDogc3RyaW5nLFxuICAgIG5hbWU/OiBzdHJpbmcsXG4gICAgaWNvblVybD86IHN0cmluZyxcbiAgICByb2xlPzogVXNlclJvbGVcbn1cblxuZXhwb3J0IHR5cGUgRGVsaXZlcnlNb2RlID0gXCJub3JtYWxcIiB8IFwic3RyZWFtXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUFjdGl2aXR5IHtcbiAgICB0eXBlOiBzdHJpbmcsXG4gICAgY2hhbm5lbERhdGE/OiBhbnksXG4gICAgY2hhbm5lbElkPzogc3RyaW5nLFxuICAgIGNvbnZlcnNhdGlvbj86IHsgaWQ6IHN0cmluZyB9LFxuICAgIGVUYWc/OiBzdHJpbmcsXG4gICAgZnJvbTogVXNlcixcbiAgICBpZD86IHN0cmluZyxcbiAgICB0aW1lc3RhbXA/OiBzdHJpbmcsXG4gICAgZGVsaXZlcnlNb2RlPzogRGVsaXZlcnlNb2RlXG59XG5cbmV4cG9ydCB0eXBlIEF0dGFjaG1lbnRMYXlvdXQgPSBcImxpc3RcIiB8IFwiY2Fyb3VzZWxcIjtcblxuZXhwb3J0IGludGVyZmFjZSBNZXNzYWdlIGV4dGVuZHMgSUFjdGl2aXR5IHtcbiAgICB0eXBlOiBcIm1lc3NhZ2VcIixcbiAgICB0ZXh0Pzogc3RyaW5nLFxuICAgIGxvY2FsZT86IHN0cmluZyxcbiAgICB0ZXh0Rm9ybWF0PzogXCJwbGFpblwiIHwgXCJtYXJrZG93blwiIHwgXCJ4bWxcIixcbiAgICBhdHRhY2htZW50TGF5b3V0PzogQXR0YWNobWVudExheW91dCxcbiAgICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRbXSxcbiAgICBlbnRpdGllcz86IGFueVtdLFxuICAgIHN1Z2dlc3RlZEFjdGlvbnM/OiB7IGFjdGlvbnM6IENhcmRBY3Rpb25bXSwgdG8/OiBzdHJpbmdbXSB9LFxuICAgIHNwZWFrPzogc3RyaW5nLFxuICAgIGlucHV0SGludD86IHN0cmluZyxcbiAgICB2YWx1ZT86IG9iamVjdFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFR5cGluZyBleHRlbmRzIElBY3Rpdml0eSB7XG4gICAgdHlwZTogXCJ0eXBpbmdcIlxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50QWN0aXZpdHkgZXh0ZW5kcyBJQWN0aXZpdHkge1xuICAgIHR5cGU6IFwiZXZlbnRcIixcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgdmFsdWU6IGFueVxufVxuXG5leHBvcnQgdHlwZSBBY3Rpdml0eSA9IE1lc3NhZ2UgfCBUeXBpbmcgfCBFdmVudEFjdGl2aXR5O1xuXG5leHBvcnQgaW50ZXJmYWNlIEFjdGl2aXR5R3JvdXAge1xuICAgIGFjdGl2aXRpZXM6IEFjdGl2aXR5W10sXG4gICAgd2F0ZXJtYXJrOiBzdHJpbmdcbn1cblxuLy8gVGhlc2UgdHlwZXMgYXJlIHNwZWNpZmljIHRvIHRoaXMgY2xpZW50IGxpYnJhcnksIG5vdCB0byBEaXJlY3QgTGluZSAzLjBcblxuZXhwb3J0IGVudW0gQ29ubmVjdGlvblN0YXR1cyB7XG4gICAgVW5pbml0aWFsaXplZCwgICAgICAgICAgICAgIC8vIHRoZSBzdGF0dXMgd2hlbiB0aGUgRGlyZWN0TGluZSBvYmplY3QgaXMgZmlyc3QgY3JlYXRlZC9jb25zdHJ1Y3RlZFxuICAgIENvbm5lY3RpbmcsICAgICAgICAgICAgICAgICAvLyBjdXJyZW50bHkgdHJ5aW5nIHRvIGNvbm5lY3QgdG8gdGhlIGNvbnZlcnNhdGlvblxuICAgIE9ubGluZSwgICAgICAgICAgICAgICAgICAgICAvLyBzdWNjZXNzZnVsbHkgY29ubmVjdGVkIHRvIHRoZSBjb252ZXJzYXRpb24uIENvbm5lY3Rpb24gaXMgaGVhbHRoeSBzbyBmYXIgYXMgd2Uga25vdy5cbiAgICBFeHBpcmVkVG9rZW4sICAgICAgICAgICAgICAgLy8gbGFzdCBvcGVyYXRpb24gZXJyb3JlZCBvdXQgd2l0aCBhbiBleHBpcmVkIHRva2VuLiBQb3NzaWJseSB3YWl0aW5nIGZvciBzb21lb25lIHRvIHN1cHBseSBhIG5ldyBvbmUuXG4gICAgRmFpbGVkVG9Db25uZWN0LCAgICAgICAgICAgIC8vIHRoZSBpbml0aWFsIGF0dGVtcHQgdG8gY29ubmVjdCB0byB0aGUgY29udmVyc2F0aW9uIGZhaWxlZC4gTm8gcmVjb3ZlcnkgcG9zc2libGUuXG4gICAgRW5kZWQgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBib3QgZW5kZWQgdGhlIGNvbnZlcnNhdGlvblxufVxuXG5leHBvcnQgaW50ZXJmYWNlIERpcmVjdExpbmVPcHRpb25zIHtcbiAgICBzZWNyZXQ/OiBzdHJpbmcsXG4gICAgdG9rZW4/OiBzdHJpbmcsXG4gICAgY29udmVyc2F0aW9uSWQ/OiBzdHJpbmcsXG4gICAgd2F0ZXJtYXJrPzogc3RyaW5nLFxuICAgIGRvbWFpbj86IHN0cmluZyxcbiAgICB3ZWJTb2NrZXQ/OiBib29sZWFuLFxuICAgIHBvbGxpbmdJbnRlcnZhbD86IG51bWJlcixcbiAgICBzdHJlYW1Vcmw/OiBzdHJpbmcsXG4gICAgdGltZW91dD86IG51bWJlcixcbiAgICAvLyBBdHRhY2hlZCB0byBhbGwgcmVxdWVzdHMgdG8gaWRlbnRpZnkgcmVxdWVzdGluZyBhZ2VudC5cbiAgICBib3RBZ2VudD86IHN0cmluZyxcbiAgICBjb252ZXJzYXRpb25TdGFydFByb3BlcnRpZXM/OiBhbnksXG4gICAgLyoqXG4gICAgICogUGVyLWNvbnZlcnNhdGlvbiBzd2l0Y2ggZm9yIHN0cmVhbWluZyBkZWxpdmVyeSBtb2RlLlxuICAgICAqIElmIHRydWUsIGV2ZXJ5IG91dGdvaW5nIGFjdGl2aXR5IHdpbGwgaW5jbHVkZSBkZWxpdmVyeU1vZGU6ICdzdHJlYW0nLlxuICAgICAqIElmIGZhbHNlL29taXR0ZWQsIGRlbGl2ZXJ5TW9kZSBpcyBub3Qgc2VudCAoZGVmYXVsdHMgdG8gJ25vcm1hbCcgaW4gQUJTKS5cbiAgICAgKi9cbiAgICBzdHJlYW1pbmc/OiBib29sZWFuXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZXMge1xuICAgIHNjaGVkdWxlcjogSVNjaGVkdWxlcjtcbiAgICBXZWJTb2NrZXQ6IHR5cGVvZiBXZWJTb2NrZXQ7XG4gICAgYWpheDogQWpheENyZWF0aW9uTWV0aG9kO1xuICAgIHJhbmRvbTogKCkgPT4gbnVtYmVyO1xufVxuXG5jb25zdCB3cmFwQWpheFdpdGhSZXRyeSA9IChzb3VyY2U6IEFqYXhDcmVhdGlvbk1ldGhvZCwgc2NoZWR1bGVyOiBJU2NoZWR1bGVyKTogQWpheENyZWF0aW9uTWV0aG9kID0+e1xuXG4gICAgY29uc3Qgbm90SW1wbGVtZW50ZWQgPSAoKTogbmV2ZXIgPT4geyB0aHJvdyBuZXcgRXJyb3IoJ25vdCBpbXBsZW1lbnRlZCcpOyB9O1xuXG4gICAgY29uc3QgaW5uZXIgPSAocmVzcG9uc2UkIDogT2JzZXJ2YWJsZTxBamF4UmVzcG9uc2U+KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZSRcbiAgICAgICAgLmNhdGNoPEFqYXhSZXNwb25zZSwgQWpheFJlc3BvbnNlPigoZXJyKSA9PiB7XG4gICAgICAgICAgICBpZihlcnIuc3RhdHVzID09PSA0Mjkpe1xuICAgICAgICAgICAgICAgIGNvbnN0IHJldHJ5QWZ0ZXJWYWx1ZSA9IGVyci54aHIuZ2V0UmVzcG9uc2VIZWFkZXIoJ1JldHJ5LUFmdGVyJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmV0cnlBZnRlciA9IE51bWJlcihyZXRyeUFmdGVyVmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmKCFpc05hTihyZXRyeUFmdGVyKSl7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPYnNlcnZhYmxlLnRpbWVyKHJldHJ5QWZ0ZXIsIHNjaGVkdWxlcilcbiAgICAgICAgICAgICAgICAgICAgLmZsYXRNYXAoXyA9PiBPYnNlcnZhYmxlLnRocm93KGVyciwgc2NoZWR1bGVyKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gT2JzZXJ2YWJsZS50aHJvdyhlcnIsIHNjaGVkdWxlcik7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBvdXRlciA9ICh1cmxPclJlcXVlc3Q6IHN0cmluZ3wgQWpheFJlcXVlc3QpID0+IHtcbiAgICAgICAgcmV0dXJuIGlubmVyKHNvdXJjZSh1cmxPclJlcXVlc3QpKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24ob3V0ZXIsIHtcbiAgICAgICAgZ2V0OiAodXJsOiBzdHJpbmcsIGhlYWRlcnM/OiBPYmplY3QpOiBPYnNlcnZhYmxlPEFqYXhSZXNwb25zZT4gPT4gbm90SW1wbGVtZW50ZWQoKSxcbiAgICAgICAgcG9zdDogKHVybDogc3RyaW5nLCBib2R5PzogYW55LCBoZWFkZXJzPzogT2JqZWN0KTogT2JzZXJ2YWJsZTxBamF4UmVzcG9uc2U+ID0+IG5vdEltcGxlbWVudGVkKCksXG4gICAgICAgIHB1dDogKHVybDogc3RyaW5nLCBib2R5PzogYW55LCBoZWFkZXJzPzogT2JqZWN0KTogT2JzZXJ2YWJsZTxBamF4UmVzcG9uc2U+ID0+IG5vdEltcGxlbWVudGVkKCksXG4gICAgICAgIHBhdGNoOiAodXJsOiBzdHJpbmcsIGJvZHk/OiBhbnksIGhlYWRlcnM/OiBPYmplY3QpOiBPYnNlcnZhYmxlPEFqYXhSZXNwb25zZT4gPT4gbm90SW1wbGVtZW50ZWQoKSxcbiAgICAgICAgZGVsZXRlOiAodXJsOiBzdHJpbmcsIGhlYWRlcnM/OiBPYmplY3QpOiBPYnNlcnZhYmxlPEFqYXhSZXNwb25zZT4gPT4gbm90SW1wbGVtZW50ZWQoKSxcbiAgICAgICAgZ2V0SlNPTjogPFQ+KHVybDogc3RyaW5nLCBoZWFkZXJzPzogT2JqZWN0KTogT2JzZXJ2YWJsZTxUPiA9PiBub3RJbXBsZW1lbnRlZCgpXG4gICAgfSk7XG59XG5cbmNvbnN0IG1ha2VTZXJ2aWNlcyA9IChzZXJ2aWNlczogUGFydGlhbDxTZXJ2aWNlcz4pOiBTZXJ2aWNlcyA9PiB7XG4gICAgY29uc3Qgc2NoZWR1bGVyID0gc2VydmljZXMuc2NoZWR1bGVyIHx8IEFzeW5jU2NoZWR1bGVyO1xuICAgIHJldHVybiB7XG4gICAgICAgIHNjaGVkdWxlcixcbiAgICAgICAgYWpheDogd3JhcEFqYXhXaXRoUmV0cnkoc2VydmljZXMuYWpheCB8fCBPYnNlcnZhYmxlLmFqYXgsIHNjaGVkdWxlciksXG4gICAgICAgIFdlYlNvY2tldDogc2VydmljZXMuV2ViU29ja2V0IHx8IFdlYlNvY2tldCxcbiAgICAgICAgcmFuZG9tOiBzZXJ2aWNlcy5yYW5kb20gfHwgTWF0aC5yYW5kb20sXG4gICAgfVxufVxuXG5jb25zdCBsaWZldGltZVJlZnJlc2hUb2tlbiA9IDMwICogNjAgKiAxMDAwO1xuY29uc3QgaW50ZXJ2YWxSZWZyZXNoVG9rZW4gPSBsaWZldGltZVJlZnJlc2hUb2tlbiAvIDI7XG5cbmNvbnN0IFBPTExJTkdfSU5URVJWQUxfTE9XRVJfQk9VTkQ6IG51bWJlciA9IDIwMDsgLy9tc1xuXG5jb25zdCBlcnJvckV4cGlyZWRUb2tlbiA9IG5ldyBFcnJvcihcImV4cGlyZWQgdG9rZW5cIik7XG5jb25zdCBlcnJvckNvbnZlcnNhdGlvbkVuZGVkID0gbmV3IEVycm9yKFwiY29udmVyc2F0aW9uIGVuZGVkXCIpO1xuY29uc3QgZXJyb3JGYWlsZWRUb0Nvbm5lY3QgPSBuZXcgRXJyb3IoXCJmYWlsZWQgdG8gY29ubmVjdFwiKTtcblxuY29uc3Qga29uc29sZSA9IHtcbiAgICBsb2c6IChtZXNzYWdlPzogYW55LCAuLi4gb3B0aW9uYWxQYXJhbXM6IGFueVtdKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiAod2luZG93IGFzIGFueSlbXCJib3RjaGF0RGVidWdcIl0gJiYgbWVzc2FnZSlcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKG1lc3NhZ2UsIC4uLiBvcHRpb25hbFBhcmFtcyk7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElCb3RDb25uZWN0aW9uIHtcbiAgICBjb25uZWN0aW9uU3RhdHVzJDogQmVoYXZpb3JTdWJqZWN0PENvbm5lY3Rpb25TdGF0dXM+LFxuICAgIGFjdGl2aXR5JDogT2JzZXJ2YWJsZTxBY3Rpdml0eT4sXG4gICAgZW5kKCk6IHZvaWQsXG4gICAgcmVmZXJlbmNlR3JhbW1hcklkPzogc3RyaW5nLFxuICAgIHBvc3RBY3Rpdml0eShhY3Rpdml0eTogQWN0aXZpdHkpOiBPYnNlcnZhYmxlPHN0cmluZz4sXG4gICAgZ2V0U2Vzc2lvbklkPyA6ICgpID0+IE9ic2VydmFibGU8c3RyaW5nPlxufVxuXG5leHBvcnQgY2xhc3MgRGlyZWN0TGluZSBpbXBsZW1lbnRzIElCb3RDb25uZWN0aW9uIHtcbiAgICBwdWJsaWMgY29ubmVjdGlvblN0YXR1cyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KENvbm5lY3Rpb25TdGF0dXMuVW5pbml0aWFsaXplZCk7XG4gICAgcHVibGljIGFjdGl2aXR5JDogT2JzZXJ2YWJsZTxBY3Rpdml0eT47XG5cbiAgICBwcml2YXRlIGRvbWFpbiA9IFwiaHR0cHM6Ly9kaXJlY3RsaW5lLmJvdGZyYW1ld29yay5jb20vdjMvZGlyZWN0bGluZVwiO1xuICAgIHByaXZhdGUgd2ViU29ja2V0OiBib29sZWFuO1xuXG4gICAgcHJpdmF0ZSBjb252ZXJzYXRpb25JZDogc3RyaW5nO1xuICAgIHByaXZhdGUgZXhwaXJlZFRva2VuRXhoYXVzdGlvbjogRnVuY3Rpb247XG4gICAgcHJpdmF0ZSBzZWNyZXQ6IHN0cmluZztcbiAgICBwcml2YXRlIHRva2VuOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSB3YXRlcm1hcmsgPSAnJztcbiAgICBwcml2YXRlIHN0cmVhbVVybDogc3RyaW5nO1xuICAgIHByaXZhdGUgX2JvdEFnZW50ID0gJyc7XG4gICAgcHJpdmF0ZSBzZXJ2aWNlczogU2VydmljZXM7XG4gICAgcHJpdmF0ZSBfdXNlckFnZW50OiBzdHJpbmc7XG4gICAgcHVibGljIHJlZmVyZW5jZUdyYW1tYXJJZDogc3RyaW5nO1xuICAgIHByaXZhdGUgdGltZW91dCA9IDIwICogMTAwMDtcbiAgICBwcml2YXRlIHJldHJpZXM6IG51bWJlcjtcblxuICAgIHByaXZhdGUgbG9jYWxlT25TdGFydENvbnZlcnNhdGlvbjogc3RyaW5nO1xuICAgIHByaXZhdGUgdXNlcklkT25TdGFydENvbnZlcnNhdGlvbjogc3RyaW5nO1xuXG4gICAgcHJpdmF0ZSBwb2xsaW5nSW50ZXJ2YWw6IG51bWJlciA9IDEwMDA7IC8vbXNcblxuICAgIHByaXZhdGUgdG9rZW5SZWZyZXNoU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gICAgcHJpdmF0ZSBzdHJlYW1pbmc6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zOiBEaXJlY3RMaW5lT3B0aW9ucyAmIFBhcnRpYWw8U2VydmljZXM+KSB7XG4gICAgICAgIHRoaXMuc2VjcmV0ID0gb3B0aW9ucy5zZWNyZXQ7XG4gICAgICAgIHRoaXMudG9rZW4gPSBvcHRpb25zLnNlY3JldCB8fCBvcHRpb25zLnRva2VuO1xuICAgICAgICB0aGlzLndlYlNvY2tldCA9IChvcHRpb25zLndlYlNvY2tldCA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IG9wdGlvbnMud2ViU29ja2V0KSAmJiB0eXBlb2YgV2ViU29ja2V0ICE9PSAndW5kZWZpbmVkJyAmJiBXZWJTb2NrZXQgIT09IHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAob3B0aW9ucy5zdHJlYW1pbmcpIHtcbiAgICAgICAgICAgIHRoaXMuc3RyZWFtaW5nID0gb3B0aW9ucy5zdHJlYW1pbmc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5jb252ZXJzYXRpb25TdGFydFByb3BlcnRpZXMgJiYgb3B0aW9ucy5jb252ZXJzYXRpb25TdGFydFByb3BlcnRpZXMubG9jYWxlKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9wdGlvbnMuY29udmVyc2F0aW9uU3RhcnRQcm9wZXJ0aWVzLmxvY2FsZSkgPT09ICdbb2JqZWN0IFN0cmluZ10nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2NhbGVPblN0YXJ0Q29udmVyc2F0aW9uID0gb3B0aW9ucy5jb252ZXJzYXRpb25TdGFydFByb3BlcnRpZXMubG9jYWxlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ0RpcmVjdExpbmVKUzogY29udmVyc2F0aW9uU3RhcnRQcm9wZXJ0aWVzLmxvY2FsZSB3YXMgaWdub3JlZDogdGhlIGxvY2FsZSBuYW1lIG1heSBiZSBhIEJDUCA0NyBsYW5ndWFnZSB0YWcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLmRvbWFpbikge1xuICAgICAgICAgICAgdGhpcy5kb21haW4gPSBvcHRpb25zLmRvbWFpbjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLmNvbnZlcnNhdGlvbklkKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnZlcnNhdGlvbklkID0gb3B0aW9ucy5jb252ZXJzYXRpb25JZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLndhdGVybWFyaykge1xuICAgICAgICAgICAgdGhpcy53YXRlcm1hcmsgPSAgb3B0aW9ucy53YXRlcm1hcms7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5zdHJlYW1VcmwpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnRva2VuICYmIG9wdGlvbnMuY29udmVyc2F0aW9uSWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0cmVhbVVybCA9IG9wdGlvbnMuc3RyZWFtVXJsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ0RpcmVjdExpbmVKUzogc3RyZWFtVXJsIHdhcyBpZ25vcmVkOiB5b3UgbmVlZCB0byBwcm92aWRlIGEgdG9rZW4gYW5kIGEgY29udmVyc2F0aW9uaWQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLnRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy50aW1lb3V0ID0gb3B0aW9ucy50aW1lb3V0O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yZXRyaWVzID0gKGxpZmV0aW1lUmVmcmVzaFRva2VuIC0gaW50ZXJ2YWxSZWZyZXNoVG9rZW4pIC8gdGhpcy50aW1lb3V0O1xuXG4gICAgICAgIHRoaXMuX2JvdEFnZW50ID0gdGhpcy5nZXRCb3RBZ2VudChvcHRpb25zLmJvdEFnZW50KTtcblxuICAgICAgICB0aGlzLnNlcnZpY2VzID0gbWFrZVNlcnZpY2VzKG9wdGlvbnMpO1xuXG4gICAgICAgIGNvbnN0IHBhcnNlZFBvbGxpbmdJbnRlcnZhbCA9IH5+b3B0aW9ucy5wb2xsaW5nSW50ZXJ2YWw7XG5cbiAgICAgICAgaWYgKHBhcnNlZFBvbGxpbmdJbnRlcnZhbCA8IFBPTExJTkdfSU5URVJWQUxfTE9XRVJfQk9VTkQpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5wb2xsaW5nSW50ZXJ2YWwgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBEaXJlY3RMaW5lSlM6IHByb3ZpZGVkIHBvbGxpbmdJbnRlcnZhbCAoJHsgb3B0aW9ucy5wb2xsaW5nSW50ZXJ2YWwgfSkgaXMgdW5kZXIgbG93ZXIgYm91bmQgKDIwMG1zKSwgdXNpbmcgZGVmYXVsdCBvZiAxMDAwbXNgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucG9sbGluZ0ludGVydmFsID0gcGFyc2VkUG9sbGluZ0ludGVydmFsO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5leHBpcmVkVG9rZW5FeGhhdXN0aW9uID0gdGhpcy5zZXRDb25uZWN0aW9uU3RhdHVzRmFsbGJhY2soXG4gICAgICAgICAgICBDb25uZWN0aW9uU3RhdHVzLkV4cGlyZWRUb2tlbixcbiAgICAgICAgICAgIENvbm5lY3Rpb25TdGF0dXMuRmFpbGVkVG9Db25uZWN0LFxuICAgICAgICAgICAgNVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuYWN0aXZpdHkkID0gKHRoaXMud2ViU29ja2V0XG4gICAgICAgICAgICA/IHRoaXMud2ViU29ja2V0QWN0aXZpdHkkKClcbiAgICAgICAgICAgIDogdGhpcy5wb2xsaW5nR2V0QWN0aXZpdHkkKClcbiAgICAgICAgKS5zaGFyZSgpO1xuICAgIH1cblxuICAgIC8vIEV2ZXJ5IHRpbWUgd2UncmUgYWJvdXQgdG8gbWFrZSBhIERpcmVjdCBMaW5lIFJFU1QgY2FsbCwgd2UgY2FsbCB0aGlzIGZpcnN0IHRvIHNlZSBjaGVjayB0aGUgY3VycmVudCBjb25uZWN0aW9uIHN0YXR1cy5cbiAgICAvLyBFaXRoZXIgdGhyb3dzIGFuIGVycm9yIChpbmRpY2F0aW5nIGFuIGVycm9yIHN0YXRlKSBvciBlbWl0cyBhIG51bGwsIGluZGljYXRpbmcgYSAocHJlc3VtYWJseSkgaGVhbHRoeSBjb25uZWN0aW9uXG4gICAgcHJpdmF0ZSBjaGVja0Nvbm5lY3Rpb24ob25jZSA9IGZhbHNlKSB7XG4gICAgICAgIGxldCBvYnMgPSAgdGhpcy5jb25uZWN0aW9uU3RhdHVzJFxuICAgICAgICAuZmxhdE1hcChjb25uZWN0aW9uU3RhdHVzID0+IHtcbiAgICAgICAgICAgIGlmIChjb25uZWN0aW9uU3RhdHVzID09PSBDb25uZWN0aW9uU3RhdHVzLlVuaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb25TdGF0dXMkLm5leHQoQ29ubmVjdGlvblN0YXR1cy5Db25uZWN0aW5nKTtcblxuICAgICAgICAgICAgICAgIC8vaWYgdG9rZW4gYW5kIHN0cmVhbVVybCBhcmUgZGVmaW5lZCBpdCBtZWFucyByZWNvbm5lY3QgaGFzIGFscmVhZHkgYmVlbiBkb25lLiBTa2lwcGluZyBpdC5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy50b2tlbiAmJiB0aGlzLnN0cmVhbVVybCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb25TdGF0dXMkLm5leHQoQ29ubmVjdGlvblN0YXR1cy5PbmxpbmUpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JzZXJ2YWJsZS5vZihjb25uZWN0aW9uU3RhdHVzLCB0aGlzLnNlcnZpY2VzLnNjaGVkdWxlcik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RhcnRDb252ZXJzYXRpb24oKS5kbyhjb252ZXJzYXRpb24gPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb252ZXJzYXRpb25JZCA9IGNvbnZlcnNhdGlvbi5jb252ZXJzYXRpb25JZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9rZW4gPSB0aGlzLnNlY3JldCB8fCBjb252ZXJzYXRpb24udG9rZW47XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0cmVhbVVybCA9IGNvbnZlcnNhdGlvbi5zdHJlYW1Vcmw7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZmVyZW5jZUdyYW1tYXJJZCA9IGNvbnZlcnNhdGlvbi5yZWZlcmVuY2VHcmFtbWFySWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2VjcmV0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaFRva2VuTG9vcCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb25TdGF0dXMkLm5leHQoQ29ubmVjdGlvblN0YXR1cy5PbmxpbmUpO1xuICAgICAgICAgICAgICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb25TdGF0dXMkLm5leHQoQ29ubmVjdGlvblN0YXR1cy5GYWlsZWRUb0Nvbm5lY3QpO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAubWFwKF8gPT4gY29ubmVjdGlvblN0YXR1cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE9ic2VydmFibGUub2YoY29ubmVjdGlvblN0YXR1cywgdGhpcy5zZXJ2aWNlcy5zY2hlZHVsZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuZmlsdGVyKGNvbm5lY3Rpb25TdGF0dXMgPT4gY29ubmVjdGlvblN0YXR1cyAhPSBDb25uZWN0aW9uU3RhdHVzLlVuaW5pdGlhbGl6ZWQgJiYgY29ubmVjdGlvblN0YXR1cyAhPSBDb25uZWN0aW9uU3RhdHVzLkNvbm5lY3RpbmcpXG4gICAgICAgIC5mbGF0TWFwKGNvbm5lY3Rpb25TdGF0dXMgPT4ge1xuICAgICAgICAgICAgc3dpdGNoIChjb25uZWN0aW9uU3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBDb25uZWN0aW9uU3RhdHVzLkVuZGVkOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JzZXJ2YWJsZS50aHJvdyhlcnJvckNvbnZlcnNhdGlvbkVuZGVkLCB0aGlzLnNlcnZpY2VzLnNjaGVkdWxlcik7XG5cbiAgICAgICAgICAgICAgICBjYXNlIENvbm5lY3Rpb25TdGF0dXMuRmFpbGVkVG9Db25uZWN0OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JzZXJ2YWJsZS50aHJvdyhlcnJvckZhaWxlZFRvQ29ubmVjdCwgdGhpcy5zZXJ2aWNlcy5zY2hlZHVsZXIpO1xuXG4gICAgICAgICAgICAgICAgY2FzZSBDb25uZWN0aW9uU3RhdHVzLkV4cGlyZWRUb2tlbjpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9ic2VydmFibGUub2YoY29ubmVjdGlvblN0YXR1cywgdGhpcy5zZXJ2aWNlcy5zY2hlZHVsZXIpO1xuXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9ic2VydmFibGUub2YoY29ubmVjdGlvblN0YXR1cywgdGhpcy5zZXJ2aWNlcy5zY2hlZHVsZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuXG4gICAgICAgIHJldHVybiBvbmNlID8gb2JzLnRha2UoMSkgOiBvYnM7XG4gICAgfVxuXG4gICAgc2V0Q29ubmVjdGlvblN0YXR1c0ZhbGxiYWNrKFxuICAgICAgICBjb25uZWN0aW9uU3RhdHVzRnJvbTogQ29ubmVjdGlvblN0YXR1cyxcbiAgICAgICAgY29ubmVjdGlvblN0YXR1c1RvOiBDb25uZWN0aW9uU3RhdHVzLFxuICAgICAgICBtYXhBdHRlbXB0cyA9IDVcbiAgICApIHtcbiAgICAgICAgbWF4QXR0ZW1wdHMtLTtcbiAgICAgICAgbGV0IGF0dGVtcHRzID0gMDtcbiAgICAgICAgbGV0IGN1cnJTdGF0dXMgPSBudWxsO1xuICAgICAgICByZXR1cm4gKHN0YXR1czogQ29ubmVjdGlvblN0YXR1cyk6IENvbm5lY3Rpb25TdGF0dXMgPT4ge1xuICAgICAgICAgICAgaWYgKHN0YXR1cyA9PT0gY29ubmVjdGlvblN0YXR1c0Zyb20gJiYgY3VyclN0YXR1cyA9PT0gc3RhdHVzICYmIGF0dGVtcHRzID49IG1heEF0dGVtcHRzKSB7XG4gICAgICAgICAgICAgICAgYXR0ZW1wdHMgPSAwXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbm5lY3Rpb25TdGF0dXNUbztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF0dGVtcHRzKys7XG4gICAgICAgICAgICBjdXJyU3RhdHVzID0gc3RhdHVzO1xuICAgICAgICAgICAgcmV0dXJuIHN0YXR1cztcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGV4cGlyZWRUb2tlbigpIHtcbiAgICAgICAgY29uc3QgY29ubmVjdGlvblN0YXR1cyA9IHRoaXMuY29ubmVjdGlvblN0YXR1cyQuZ2V0VmFsdWUoKTtcbiAgICAgICAgaWYgKGNvbm5lY3Rpb25TdGF0dXMgIT0gQ29ubmVjdGlvblN0YXR1cy5FbmRlZCAmJiBjb25uZWN0aW9uU3RhdHVzICE9IENvbm5lY3Rpb25TdGF0dXMuRmFpbGVkVG9Db25uZWN0KVxuICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9uU3RhdHVzJC5uZXh0KENvbm5lY3Rpb25TdGF0dXMuRXhwaXJlZFRva2VuKTtcblxuICAgICAgICBjb25zdCBwcm90ZWN0ZWRDb25uZWN0aW9uU3RhdHVzID0gdGhpcy5leHBpcmVkVG9rZW5FeGhhdXN0aW9uKHRoaXMuY29ubmVjdGlvblN0YXR1cyQuZ2V0VmFsdWUoKSk7XG4gICAgICAgIHRoaXMuY29ubmVjdGlvblN0YXR1cyQubmV4dChwcm90ZWN0ZWRDb25uZWN0aW9uU3RhdHVzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXJ0Q29udmVyc2F0aW9uKCkge1xuICAgICAgICAvL2lmIGNvbnZlcnNhdGlvbmlkIGlzIHNldCBoZXJlLCBpdCBtZWFucyB3ZSBuZWVkIHRvIGNhbGwgdGhlIHJlY29ubmVjdCBhcGksIGVsc2UgaXQgaXMgYSBuZXcgY29udmVyc2F0aW9uXG4gICAgICAgIGNvbnN0IHVybCA9IHRoaXMuY29udmVyc2F0aW9uSWRcbiAgICAgICAgICAgID8gYCR7dGhpcy5kb21haW59L2NvbnZlcnNhdGlvbnMvJHt0aGlzLmNvbnZlcnNhdGlvbklkfT93YXRlcm1hcms9JHt0aGlzLndhdGVybWFya31gXG4gICAgICAgICAgICA6IGAke3RoaXMuZG9tYWlufS9jb252ZXJzYXRpb25zYDtcbiAgICAgICAgY29uc3QgbWV0aG9kID0gdGhpcy5jb252ZXJzYXRpb25JZCA/IFwiR0VUXCIgOiBcIlBPU1RcIjtcbiAgICAgICAgY29uc3QgYm9keSA9IHRoaXMuY29udmVyc2F0aW9uSWRcbiAgICAgICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICB1c2VyOiB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiB0aGlzLnVzZXJJZE9uU3RhcnRDb252ZXJzYXRpb25cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGxvY2FsZTogdGhpcy5sb2NhbGVPblN0YXJ0Q29udmVyc2F0aW9uXG4gICAgICAgICAgICAgIH07XG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VzLmFqYXgoe1xuICAgICAgICAgICAgbWV0aG9kLFxuICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICAgIHRpbWVvdXQ6IHRoaXMudGltZW91dCxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICBcIkFjY2VwdFwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgICAgICAgICAuLi50aGlzLmNvbW1vbkhlYWRlcnMoKVxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuLy8gICAgICAuZG8oYWpheFJlc3BvbnNlID0+IGtvbnNvbGUubG9nKFwiY29udmVyc2F0aW9uIGFqYXhSZXNwb25zZVwiLCBhamF4UmVzcG9uc2UucmVzcG9uc2UpKVxuICAgICAgICAubWFwKGFqYXhSZXNwb25zZSA9PiBhamF4UmVzcG9uc2UucmVzcG9uc2UgYXMgQ29udmVyc2F0aW9uKVxuICAgICAgICAucmV0cnlXaGVuKGVycm9yJCA9PlxuICAgICAgICAgICAgLy8gZm9yIG5vdyB3ZSBkZWVtIDR4eCBhbmQgNXh4IGVycm9ycyBhcyB1bnJlY292ZXJhYmxlXG4gICAgICAgICAgICAvLyBmb3IgZXZlcnl0aGluZyBlbHNlICh0aW1lb3V0cyksIHJldHJ5IGZvciBhIHdoaWxlXG4gICAgICAgICAgICBlcnJvciQubWVyZ2VNYXAoKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yLnN0YXR1cyA+PSA0MDAgJiYgZXJyb3Iuc3RhdHVzIDwgNjAwXG4gICAgICAgICAgICAgICAgPyBPYnNlcnZhYmxlLnRocm93KGVycm9yLCB0aGlzLnNlcnZpY2VzLnNjaGVkdWxlcilcbiAgICAgICAgICAgICAgICA6IE9ic2VydmFibGUub2YoZXJyb3IsIHRoaXMuc2VydmljZXMuc2NoZWR1bGVyKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5kZWxheSh0aGlzLnRpbWVvdXQsIHRoaXMuc2VydmljZXMuc2NoZWR1bGVyKVxuICAgICAgICAgICAgLnRha2UodGhpcy5yZXRyaWVzKVxuICAgICAgICApXG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWZyZXNoVG9rZW5Mb29wKCkge1xuICAgICAgICB0aGlzLnRva2VuUmVmcmVzaFN1YnNjcmlwdGlvbiA9IE9ic2VydmFibGUuaW50ZXJ2YWwoaW50ZXJ2YWxSZWZyZXNoVG9rZW4sIHRoaXMuc2VydmljZXMuc2NoZWR1bGVyKVxuICAgICAgICAuZmxhdE1hcChfID0+IHRoaXMucmVmcmVzaFRva2VuKCkpXG4gICAgICAgIC5zdWJzY3JpYmUodG9rZW4gPT4ge1xuICAgICAgICAgICAga29uc29sZS5sb2coXCJyZWZyZXNoaW5nIHRva2VuXCIsIHRva2VuLCBcImF0XCIsIG5ldyBEYXRlKCkpO1xuICAgICAgICAgICAgdGhpcy50b2tlbiA9IHRva2VuO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlZnJlc2hUb2tlbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tDb25uZWN0aW9uKHRydWUpXG4gICAgICAgIC5mbGF0TWFwKF8gPT5cbiAgICAgICAgICAgIHRoaXMuc2VydmljZXMuYWpheCh7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgICAgICAgICB1cmw6IGAke3RoaXMuZG9tYWlufS90b2tlbnMvcmVmcmVzaGAsXG4gICAgICAgICAgICAgICAgdGltZW91dDogdGhpcy50aW1lb3V0LFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5jb21tb25IZWFkZXJzKClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLm1hcChhamF4UmVzcG9uc2UgPT4gYWpheFJlc3BvbnNlLnJlc3BvbnNlLnRva2VuIGFzIHN0cmluZylcbiAgICAgICAgICAgIC5yZXRyeVdoZW4oZXJyb3IkID0+IGVycm9yJFxuICAgICAgICAgICAgICAgIC5tZXJnZU1hcChlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvci5zdGF0dXMgPT09IDQwMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlIHRva2VuIGlzIGV4cGlyZWQgdGhlcmUncyBubyByZWFzb24gdG8ga2VlcCB0cnlpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhwaXJlZFRva2VuKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JzZXJ2YWJsZS50aHJvdyhlcnJvciwgdGhpcy5zZXJ2aWNlcy5zY2hlZHVsZXIpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVycm9yLnN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgYm90IGlzIGdvbmUsIHdlIHNob3VsZCBzdG9wIHJldHJ5aW5nXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JzZXJ2YWJsZS50aHJvdyhlcnJvciwgdGhpcy5zZXJ2aWNlcy5zY2hlZHVsZXIpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9ic2VydmFibGUub2YoZXJyb3IsIHRoaXMuc2VydmljZXMuc2NoZWR1bGVyKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5kZWxheSh0aGlzLnRpbWVvdXQsIHRoaXMuc2VydmljZXMuc2NoZWR1bGVyKVxuICAgICAgICAgICAgICAgIC50YWtlKHRoaXMucmV0cmllcylcbiAgICAgICAgICAgIClcbiAgICAgICAgKVxuICAgIH1cblxuICAgIHB1YmxpYyByZWNvbm5lY3QoY29udmVyc2F0aW9uOiBDb252ZXJzYXRpb24pIHtcbiAgICAgICAgdGhpcy50b2tlbiA9IGNvbnZlcnNhdGlvbi50b2tlbjtcbiAgICAgICAgdGhpcy5zdHJlYW1VcmwgPSBjb252ZXJzYXRpb24uc3RyZWFtVXJsO1xuICAgICAgICBpZiAodGhpcy5jb25uZWN0aW9uU3RhdHVzJC5nZXRWYWx1ZSgpID09PSBDb25uZWN0aW9uU3RhdHVzLkV4cGlyZWRUb2tlbilcbiAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvblN0YXR1cyQubmV4dChDb25uZWN0aW9uU3RhdHVzLk9ubGluZSk7XG4gICAgfVxuXG4gICAgZW5kKCkge1xuICAgICAgICBpZiAodGhpcy50b2tlblJlZnJlc2hTdWJzY3JpcHRpb24pXG4gICAgICAgICAgICB0aGlzLnRva2VuUmVmcmVzaFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9uU3RhdHVzJC5uZXh0KENvbm5lY3Rpb25TdGF0dXMuRW5kZWQpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoZSA9PT0gZXJyb3JDb252ZXJzYXRpb25FbmRlZClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB0aHJvdyhlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldFNlc3Npb25JZCgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgICAgICAvLyBJZiB3ZSdyZSBub3QgY29ubmVjdGVkIHRvIHRoZSBib3QsIGdldCBjb25uZWN0ZWRcbiAgICAgICAgLy8gV2lsbCB0aHJvdyBhbiBlcnJvciBpZiB3ZSBhcmUgbm90IGNvbm5lY3RlZFxuICAgICAgICBrb25zb2xlLmxvZyhcImdldFNlc3Npb25JZFwiKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tDb25uZWN0aW9uKHRydWUpXG4gICAgICAgICAgICAuZmxhdE1hcChfID0+XG4gICAgICAgICAgICAgICAgdGhpcy5zZXJ2aWNlcy5hamF4KHtcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgICAgICAgICAgICAgICB1cmw6IGAke3RoaXMuZG9tYWlufS9zZXNzaW9uL2dldHNlc3Npb25pZGAsXG4gICAgICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgdGltZW91dDogdGhpcy50aW1lb3V0LFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuY29tbW9uSGVhZGVycygpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5tYXAoYWpheFJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFqYXhSZXNwb25zZSAmJiBhamF4UmVzcG9uc2UucmVzcG9uc2UgJiYgYWpheFJlc3BvbnNlLnJlc3BvbnNlLnNlc3Npb25JZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAga29uc29sZS5sb2coXCJnZXRTZXNzaW9uSWQgcmVzcG9uc2U6IFwiICsgYWpheFJlc3BvbnNlLnJlc3BvbnNlLnNlc3Npb25JZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWpheFJlc3BvbnNlLnJlc3BvbnNlLnNlc3Npb25JZCBhcyBzdHJpbmc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICAgICAga29uc29sZS5sb2coXCJnZXRTZXNzaW9uSWQgZXJyb3I6IFwiICsgZXJyb3Iuc3RhdHVzKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9ic2VydmFibGUub2YoJycsIHRoaXMuc2VydmljZXMuc2NoZWR1bGVyKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmNhdGNoKGVycm9yID0+IHRoaXMuY2F0Y2hFeHBpcmVkVG9rZW4oZXJyb3IpKTtcbiAgICB9XG5cbiAgICBwb3N0QWN0aXZpdHkoYWN0aXZpdHk6IEFjdGl2aXR5KSB7XG4gICAgICAgIC8vIElmIHN0cmVhbWluZyBpcyBlbmFibGVkIGZvciB0aGlzIERpcmVjdExpbmUgaW5zdGFuY2UsIGFsd2F5cyBzZXQgZGVsaXZlcnlNb2RlIHRvICdzdHJlYW0nXG4gICAgICAgIC8vIGRlZmF1bHQgd291bGQgYmUgJ25vcm1hbCcgYW5kIG5vdCBwYXNzaW5nIGFueXRoaW5nIG1lYW5pbmcgJ25vcm1hbCcgYXMgd2VsbCBvbiBBQlMgc2lkZVxuICAgICAgICBpZiAodGhpcy5zdHJlYW1pbmcpIHtcbiAgICAgICAgICAgIGFjdGl2aXR5LmRlbGl2ZXJ5TW9kZSA9ICdzdHJlYW0nO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgdXNlciBpZCBpcyBzZXQsIGNoZWNrIGlmIGl0IG1hdGNoIGFjdGl2aXR5LmZyb20uaWQgYW5kIGFsd2F5cyBvdmVycmlkZSBpdCBpbiBhY3Rpdml0eVxuICAgICAgICBpZiAodGhpcy51c2VySWRPblN0YXJ0Q29udmVyc2F0aW9uICYmIGFjdGl2aXR5LmZyb20gJiYgYWN0aXZpdHkuZnJvbS5pZCAhPT0gdGhpcy51c2VySWRPblN0YXJ0Q29udmVyc2F0aW9uKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0RpcmVjdExpbmVKUzogQWN0aXZpdHkuZnJvbS5pZCBkb2VzIG5vdCBtYXRjaCB3aXRoIHVzZXIgaWQsIGlnbm9yaW5nIGFjdGl2aXR5LmZyb20uaWQnKTtcbiAgICAgICAgICAgIGFjdGl2aXR5LmZyb20uaWQgPSB0aGlzLnVzZXJJZE9uU3RhcnRDb252ZXJzYXRpb247XG4gICAgICAgIH1cbiAgICAgICAgLy8gVXNlIHBvc3RNZXNzYWdlV2l0aEF0dGFjaG1lbnRzIGZvciBtZXNzYWdlcyB3aXRoIGF0dGFjaG1lbnRzIHRoYXQgYXJlIGxvY2FsIGZpbGVzIChlLmcuIGFuIGltYWdlIHRvIHVwbG9hZClcbiAgICAgICAgLy8gVGVjaG5pY2FsbHkgd2UgY291bGQgdXNlIGl0IGZvciAqYWxsKiBhY3Rpdml0aWVzLCBidXQgcG9zdEFjdGl2aXR5IGlzIG11Y2ggbGlnaHRlciB3ZWlnaHRcbiAgICAgICAgLy8gU28sIHNpbmNlIFdlYkNoYXQgaXMgcGFydGlhbGx5IGEgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIG9mIERpcmVjdCBMaW5lLCB3ZSBpbXBsZW1lbnQgYm90aC5cbiAgICAgICAgaWYgKGFjdGl2aXR5LnR5cGUgPT09IFwibWVzc2FnZVwiICYmIGFjdGl2aXR5LmF0dGFjaG1lbnRzICYmIGFjdGl2aXR5LmF0dGFjaG1lbnRzLmxlbmd0aCA+IDApXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wb3N0TWVzc2FnZVdpdGhBdHRhY2htZW50cyhhY3Rpdml0eSk7XG5cbiAgICAgICAgLy8gSWYgd2UncmUgbm90IGNvbm5lY3RlZCB0byB0aGUgYm90LCBnZXQgY29ubmVjdGVkXG4gICAgICAgIC8vIFdpbGwgdGhyb3cgYW4gZXJyb3IgaWYgd2UgYXJlIG5vdCBjb25uZWN0ZWRcbiAgICAgICAga29uc29sZS5sb2coXCJwb3N0QWN0aXZpdHlcIiwgYWN0aXZpdHkpO1xuICAgICAgICByZXR1cm4gdGhpcy5jaGVja0Nvbm5lY3Rpb24odHJ1ZSlcbiAgICAgICAgLmZsYXRNYXAoXyA9PlxuICAgICAgICAgICAgdGhpcy5zZXJ2aWNlcy5hamF4KHtcbiAgICAgICAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICAgICAgICAgIHVybDogYCR7dGhpcy5kb21haW59L2NvbnZlcnNhdGlvbnMvJHt0aGlzLmNvbnZlcnNhdGlvbklkfS9hY3Rpdml0aWVzYCxcbiAgICAgICAgICAgICAgICBib2R5OiBhY3Rpdml0eSxcbiAgICAgICAgICAgICAgICB0aW1lb3V0OiB0aGlzLnRpbWVvdXQsXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5jb21tb25IZWFkZXJzKClcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5tYXAoYWpheFJlc3BvbnNlID0+IGFqYXhSZXNwb25zZS5yZXNwb25zZS5pZCBhcyBzdHJpbmcpXG4gICAgICAgICAgICAuY2F0Y2goZXJyb3IgPT4gdGhpcy5jYXRjaFBvc3RFcnJvcihlcnJvcikpXG4gICAgICAgIClcbiAgICAgICAgLmNhdGNoKGVycm9yID0+IHRoaXMuY2F0Y2hFeHBpcmVkVG9rZW4oZXJyb3IpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHBvc3RNZXNzYWdlV2l0aEF0dGFjaG1lbnRzKG1lc3NhZ2U6IE1lc3NhZ2UpIHtcbiAgICAgICAgY29uc3QgeyBhdHRhY2htZW50cyB9ID0gbWVzc2FnZTtcbiAgICAgICAgLy8gV2UgY2xlYW4gdGhlIGF0dGFjaG1lbnRzIGJ1dCBtYWtpbmcgc3VyZSBldmVyeSBhdHRhY2htZW50IGhhcyB1bmlxdWUgbmFtZS5cbiAgICAgICAgLy8gSWYgdGhlIGZpbGUgZG8gbm90IGhhdmUgYSBuYW1lLCBDaHJvbWUgd2lsbCBhc3NpZ24gXCJibG9iXCIgd2hlbiBpdCBpcyBhcHBlbmRlZCB0byBGb3JtRGF0YS5cbiAgICAgICAgY29uc3QgYXR0YWNobWVudE5hbWVzOiBzdHJpbmdbXSA9IGRlZHVwZUZpbGVuYW1lcyhhdHRhY2htZW50cy5tYXAoKG1lZGlhOiBNZWRpYSkgPT4gbWVkaWEubmFtZSB8fCAnYmxvYicpKTtcbiAgICAgICAgY29uc3QgY2xlYW5zZWRBdHRhY2htZW50cyA9IGF0dGFjaG1lbnRzLm1hcCgoYXR0YWNobWVudDogTWVkaWEsIGluZGV4OiBudW1iZXIpID0+ICh7XG4gICAgICAgICAgICAuLi5hdHRhY2htZW50LFxuICAgICAgICAgICAgbmFtZTogYXR0YWNobWVudE5hbWVzW2luZGV4XVxuICAgICAgICB9KSk7XG4gICAgICAgIGxldCBmb3JtRGF0YTogRm9ybURhdGE7XG5cbiAgICAgICAgLy8gSWYgd2UncmUgbm90IGNvbm5lY3RlZCB0byB0aGUgYm90LCBnZXQgY29ubmVjdGVkXG4gICAgICAgIC8vIFdpbGwgdGhyb3cgYW4gZXJyb3IgaWYgd2UgYXJlIG5vdCBjb25uZWN0ZWRcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tDb25uZWN0aW9uKHRydWUpXG4gICAgICAgIC5mbGF0TWFwKF8gPT4ge1xuICAgICAgICAgICAgLy8gVG8gc2VuZCB0aGlzIG1lc3NhZ2UgdG8gRGlyZWN0TGluZSB3ZSBuZWVkIHRvIGRlY29uc3RydWN0IGl0IGludG8gYSBcInRlbXBsYXRlXCIgYWN0aXZpdHlcbiAgICAgICAgICAgIC8vIGFuZCBvbmUgYmxvYiBmb3IgZWFjaCBhdHRhY2htZW50LlxuICAgICAgICAgICAgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnYWN0aXZpdHknLCBuZXcgQmxvYihbSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgIC4uLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgLy8gUmVtb3ZpbmcgY29udGVudFVybCBmcm9tIGF0dGFjaG1lbnQsIHdlIHdpbGwgc2VuZCBpdCB2aWEgbXVsdGlwYXJ0XG4gICAgICAgICAgICAgICAgYXR0YWNobWVudHM6IGNsZWFuc2VkQXR0YWNobWVudHMubWFwKCh7IGNvbnRlbnRVcmw6IHN0cmluZywgLi4ub3RoZXJzIH0pID0+ICh7IC4uLm90aGVycyB9KSlcbiAgICAgICAgICAgIH0pXSwgeyB0eXBlOiAnYXBwbGljYXRpb24vdm5kLm1pY3Jvc29mdC5hY3Rpdml0eScgfSkpO1xuXG4gICAgICAgICAgICByZXR1cm4gT2JzZXJ2YWJsZS5mcm9tKGNsZWFuc2VkQXR0YWNobWVudHMsIHRoaXMuc2VydmljZXMuc2NoZWR1bGVyKVxuICAgICAgICAgICAgLmZsYXRNYXAoKG1lZGlhOiBNZWRpYSkgPT5cbiAgICAgICAgICAgICAgICB0aGlzLnNlcnZpY2VzLmFqYXgoe1xuICAgICAgICAgICAgICAgICAgICBtZXRob2Q6IFwiR0VUXCIsXG4gICAgICAgICAgICAgICAgICAgIHVybDogbWVkaWEuY29udGVudFVybCxcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuZG8oYWpheFJlc3BvbnNlID0+XG4gICAgICAgICAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnZmlsZScsIG5ldyBCbG9iKFthamF4UmVzcG9uc2UucmVzcG9uc2VdLCB7IHR5cGU6IG1lZGlhLmNvbnRlbnRUeXBlIH0pLCBtZWRpYS5uYW1lKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5jb3VudCgpXG4gICAgICAgIH0pXG4gICAgICAgIC5mbGF0TWFwKF8gPT5cbiAgICAgICAgICAgIHRoaXMuc2VydmljZXMuYWpheCh7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgICAgICAgICB1cmw6IGAke3RoaXMuZG9tYWlufS9jb252ZXJzYXRpb25zLyR7dGhpcy5jb252ZXJzYXRpb25JZH0vdXBsb2FkP3VzZXJJZD0ke21lc3NhZ2UuZnJvbS5pZH1gLFxuICAgICAgICAgICAgICAgIGJvZHk6IGZvcm1EYXRhLFxuICAgICAgICAgICAgICAgIHRpbWVvdXQ6IHRoaXMudGltZW91dCxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuY29tbW9uSGVhZGVycygpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5tYXAoYWpheFJlc3BvbnNlID0+IGFqYXhSZXNwb25zZS5yZXNwb25zZS5pZCBhcyBzdHJpbmcpXG4gICAgICAgICAgICAuY2F0Y2goZXJyb3IgPT4gdGhpcy5jYXRjaFBvc3RFcnJvcihlcnJvcikpXG4gICAgICAgIClcbiAgICAgICAgLmNhdGNoKGVycm9yID0+IHRoaXMuY2F0Y2hQb3N0RXJyb3IoZXJyb3IpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNhdGNoUG9zdEVycm9yKGVycm9yOiBhbnkpIHtcbiAgICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PT0gNDAzKVxuICAgICAgICAgICAgLy8gdG9rZW4gaGFzIGV4cGlyZWQgKHdpbGwgZmFsbCB0aHJvdWdoIHRvIHJldHVybiBcInJldHJ5XCIpXG4gICAgICAgICAgICB0aGlzLmV4cGlyZWRUb2tlbigpO1xuICAgICAgICBlbHNlIGlmIChlcnJvci5zdGF0dXMgPj0gNDAwICYmIGVycm9yLnN0YXR1cyA8IDUwMClcbiAgICAgICAgICAgIC8vIG1vcmUgdW5yZWNvdmVyYWJsZSBlcnJvcnNcbiAgICAgICAgICAgIHJldHVybiBPYnNlcnZhYmxlLnRocm93KGVycm9yLCB0aGlzLnNlcnZpY2VzLnNjaGVkdWxlcik7XG4gICAgICAgIHJldHVybiBPYnNlcnZhYmxlLm9mKFwicmV0cnlcIiwgdGhpcy5zZXJ2aWNlcy5zY2hlZHVsZXIpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2F0Y2hFeHBpcmVkVG9rZW4oZXJyb3I6IGFueSkge1xuICAgICAgICByZXR1cm4gZXJyb3IgPT09IGVycm9yRXhwaXJlZFRva2VuXG4gICAgICAgID8gT2JzZXJ2YWJsZS5vZihcInJldHJ5XCIsIHRoaXMuc2VydmljZXMuc2NoZWR1bGVyKVxuICAgICAgICA6IE9ic2VydmFibGUudGhyb3coZXJyb3IsIHRoaXMuc2VydmljZXMuc2NoZWR1bGVyKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHBvbGxpbmdHZXRBY3Rpdml0eSQoKSB7XG4gICAgICAgIGNvbnN0IHBvbGxlciQ6IE9ic2VydmFibGU8QWpheFJlc3BvbnNlPiA9IE9ic2VydmFibGUuY3JlYXRlKChzdWJzY3JpYmVyOiBTdWJzY3JpYmVyPGFueT4pID0+IHtcbiAgICAgICAgICAgIC8vIEEgQmVoYXZpb3JTdWJqZWN0IHRvIHRyaWdnZXIgcG9sbGluZy4gU2luY2UgaXQgaXMgYSBCZWhhdmlvclN1YmplY3RcbiAgICAgICAgICAgIC8vIHRoZSBmaXJzdCBldmVudCBpcyBwcm9kdWNlZCBpbW1lZGlhdGVseS5cbiAgICAgICAgICAgIGNvbnN0IHRyaWdnZXIkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KHt9KTtcblxuICAgICAgICAgICAgLy8gVE9ETzogcmVtb3ZlIERhdGUubm93LCB1c2UgcmVhY3RpdmUgaW50ZXJ2YWwgdG8gc3BhY2Ugb3V0IGV2ZXJ5IHJlcXVlc3RcblxuICAgICAgICAgICAgdHJpZ2dlciQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb25uZWN0aW9uU3RhdHVzJC5nZXRWYWx1ZSgpID09PSBDb25uZWN0aW9uU3RhdHVzLk9ubGluZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFydFRpbWVzdGFtcCA9IERhdGUubm93KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXJ2aWNlcy5hamF4KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi50aGlzLmNvbW1vbkhlYWRlcnMoKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IGAkeyB0aGlzLmRvbWFpbiB9L2NvbnZlcnNhdGlvbnMvJHsgdGhpcy5jb252ZXJzYXRpb25JZCB9L2FjdGl2aXRpZXM/d2F0ZXJtYXJrPSR7IHRoaXMud2F0ZXJtYXJrIH1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dDogdGhpcy50aW1lb3V0XG4gICAgICAgICAgICAgICAgICAgIH0pLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgICAgICAgICAgIChyZXN1bHQ6IEFqYXhSZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChyZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdHJpZ2dlciQubmV4dChudWxsKSwgTWF0aC5tYXgoMCwgdGhpcy5wb2xsaW5nSW50ZXJ2YWwgLSBEYXRlLm5vdygpICsgc3RhcnRUaW1lc3RhbXApKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZXJyb3Iuc3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9uU3RhdHVzJC5uZXh0KENvbm5lY3Rpb25TdGF0dXMuRXhwaXJlZFRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdHJpZ2dlciQubmV4dChudWxsKSwgdGhpcy5wb2xsaW5nSW50ZXJ2YWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0MDQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb25TdGF0dXMkLm5leHQoQ29ubmVjdGlvblN0YXR1cy5FbmRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHJvcGFnYXRlIHRoZSBlcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmNoZWNrQ29ubmVjdGlvbigpXG4gICAgICAgIC5mbGF0TWFwKF8gPT4gcG9sbGVyJFxuICAgICAgICAgICAgLmNhdGNoKCgpID0+IE9ic2VydmFibGUuZW1wdHk8QWpheFJlc3BvbnNlPigpKVxuICAgICAgICAgICAgLm1hcChhamF4UmVzcG9uc2UgPT4gYWpheFJlc3BvbnNlLnJlc3BvbnNlIGFzIEFjdGl2aXR5R3JvdXApXG4gICAgICAgICAgICAuZmxhdE1hcChhY3Rpdml0eUdyb3VwID0+IHRoaXMub2JzZXJ2YWJsZUZyb21BY3Rpdml0eUdyb3VwKGFjdGl2aXR5R3JvdXApKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvYnNlcnZhYmxlRnJvbUFjdGl2aXR5R3JvdXAoYWN0aXZpdHlHcm91cDogQWN0aXZpdHlHcm91cCkge1xuICAgICAgICBpZiAoYWN0aXZpdHlHcm91cC53YXRlcm1hcmspXG4gICAgICAgICAgICB0aGlzLndhdGVybWFyayA9IGFjdGl2aXR5R3JvdXAud2F0ZXJtYXJrO1xuICAgICAgICByZXR1cm4gT2JzZXJ2YWJsZS5mcm9tKGFjdGl2aXR5R3JvdXAuYWN0aXZpdGllcywgdGhpcy5zZXJ2aWNlcy5zY2hlZHVsZXIpO1xuICAgIH1cblxuICAgIHByaXZhdGUgd2ViU29ja2V0QWN0aXZpdHkkKCk6IE9ic2VydmFibGU8QWN0aXZpdHk+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tDb25uZWN0aW9uKClcbiAgICAgICAgLmZsYXRNYXAoXyA9PlxuICAgICAgICAgICAgdGhpcy5vYnNlcnZhYmxlV2ViU29ja2V0PEFjdGl2aXR5R3JvdXA+KClcbiAgICAgICAgICAgIC8vIFdlYlNvY2tldHMgY2FuIGJlIGNsb3NlZCBieSB0aGUgc2VydmVyIG9yIHRoZSBicm93c2VyLiBJbiB0aGUgZm9ybWVyIGNhc2Ugd2UgbmVlZCB0b1xuICAgICAgICAgICAgLy8gcmV0cmlldmUgYSBuZXcgc3RyZWFtVXJsLiBJbiB0aGUgbGF0dGVyIGNhc2Ugd2UgY291bGQgZmlyc3QgcmV0cnkgd2l0aCB0aGUgY3VycmVudCBzdHJlYW1VcmwsXG4gICAgICAgICAgICAvLyBidXQgaXQncyBzaW1wbGVyIGp1c3QgdG8gYWx3YXlzIGZldGNoIGEgbmV3IG9uZS5cbiAgICAgICAgICAgIC5yZXRyeVdoZW4oZXJyb3IkID0+IGVycm9yJC5kZWxheSh0aGlzLmdldFJldHJ5RGVsYXkoKSwgdGhpcy5zZXJ2aWNlcy5zY2hlZHVsZXIpLm1lcmdlTWFwKGVycm9yID0+IHRoaXMucmVjb25uZWN0VG9Db252ZXJzYXRpb24oKSkpXG4gICAgICAgIClcbiAgICAgICAgLmZsYXRNYXAoYWN0aXZpdHlHcm91cCA9PiB0aGlzLm9ic2VydmFibGVGcm9tQWN0aXZpdHlHcm91cChhY3Rpdml0eUdyb3VwKSlcbiAgICB9XG5cbiAgICAvLyBSZXR1cm5zIHRoZSBkZWxheSBkdXJhdGlvbiBpbiBtaWxsaXNlY29uZHNcbiAgICBwcml2YXRlIGdldFJldHJ5RGVsYXkoKSB7XG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKDMwMDAgKyB0aGlzLnNlcnZpY2VzLnJhbmRvbSgpICogMTIwMDApO1xuICAgIH1cblxuICAgIC8vIE9yaWdpbmFsbHkgd2UgdXNlZCBPYnNlcnZhYmxlLndlYlNvY2tldCwgYnV0IGl0J3MgZmFpcmx5IG9waW5pb25hdGVkIGFuZCBJIGVuZGVkIHVwIHdyaXRpbmdcbiAgICAvLyBhIGxvdCBvZiBjb2RlIHRvIHdvcmsgYXJvdW5kIHRoZWlyIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIFNpbmNlIFdlYkNoYXQgaXMgbWVhbnQgdG8gYmUgYSByZWZlcmVuY2VcbiAgICAvLyBpbXBsZW1lbnRhdGlvbiwgSSBkZWNpZGVkIHJvbGwgdGhlIGJlbG93LCB3aGVyZSB0aGUgbG9naWMgaXMgbW9yZSBwdXJwb3NlZnVsLiAtIEBiaWxsYmFcbiAgICBwcml2YXRlIG9ic2VydmFibGVXZWJTb2NrZXQ8VD4oKSB7XG4gICAgICAgIHJldHVybiBPYnNlcnZhYmxlLmNyZWF0ZSgoc3Vic2NyaWJlcjogU3Vic2NyaWJlcjxUPikgPT4ge1xuICAgICAgICAgICAga29uc29sZS5sb2coXCJjcmVhdGluZyBXZWJTb2NrZXRcIiwgdGhpcy5zdHJlYW1VcmwpO1xuICAgICAgICAgICAgY29uc3Qgd3MgPSBuZXcgdGhpcy5zZXJ2aWNlcy5XZWJTb2NrZXQodGhpcy5zdHJlYW1VcmwpO1xuICAgICAgICAgICAgbGV0IHN1YjogU3Vic2NyaXB0aW9uO1xuICAgICAgICAgICAgbGV0IGNsb3NlZDogYm9vbGVhbjtcblxuICAgICAgICAgICAgd3Mub25vcGVuID0gb3BlbiA9PiB7XG4gICAgICAgICAgICAgICAga29uc29sZS5sb2coXCJXZWJTb2NrZXQgb3BlblwiLCBvcGVuKTtcbiAgICAgICAgICAgICAgICAvLyBDaHJvbWUgaXMgcHJldHR5IGJhZCBhdCBub3RpY2luZyB3aGVuIGEgV2ViU29ja2V0IGNvbm5lY3Rpb24gaXMgYnJva2VuLlxuICAgICAgICAgICAgICAgIC8vIElmIHdlIHBlcmlvZGljYWxseSBwaW5nIHRoZSBzZXJ2ZXIgd2l0aCBlbXB0eSBtZXNzYWdlcywgaXQgaGVscHMgQ2hyb21lXG4gICAgICAgICAgICAgICAgLy8gcmVhbGl6ZSB3aGVuIGNvbm5lY3Rpb24gYnJlYWtzLCBhbmQgY2xvc2UgdGhlIHNvY2tldC4gV2UgdGhlbiB0aHJvdyBhblxuICAgICAgICAgICAgICAgIC8vIGVycm9yLCBhbmQgdGhhdCBnaXZlIHVzIHRoZSBvcHBvcnR1bml0eSB0byBhdHRlbXB0IHRvIHJlY29ubmVjdC5cbiAgICAgICAgICAgICAgICBzdWIgPSBPYnNlcnZhYmxlLmludGVydmFsKHRoaXMudGltZW91dCwgdGhpcy5zZXJ2aWNlcy5zY2hlZHVsZXIpLnN1YnNjcmliZShfID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdzLnNlbmQoXCJcIilcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBrb25zb2xlLmxvZyhcIlBpbmcgZXJyb3JcIiwgZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgd3Mub25jbG9zZSA9IGNsb3NlID0+IHtcbiAgICAgICAgICAgICAgICBrb25zb2xlLmxvZyhcIldlYlNvY2tldCBjbG9zZVwiLCBjbG9zZSk7XG4gICAgICAgICAgICAgICAgaWYgKHN1Yikgc3ViLnVuc3Vic2NyaWJlKCk7XG5cbiAgICAgICAgICAgICAgICAvLyBSeEpTLnJldHJ5V2hlbiBoYXMgYSBidWcgdGhhdCB3b3VsZCBjYXVzZSBcImVycm9yXCIgc2lnbmFsIHRvIGJlIHNlbnQgYWZ0ZXIgdGhlIG9ic2VydmFibGUgaXMgY29tcGxldGVkL2Vycm9yZWQuXG4gICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBndWFyZCBhZ2FpbnN0IGV4dHJhbmVvdXMgXCJlcnJvclwiIHNpZ25hbCB0byB3b3JrYXJvdW5kIHRoZSBidWcuXG4gICAgICAgICAgICAgICAgY2xvc2VkIHx8IHN1YnNjcmliZXIuZXJyb3IoY2xvc2UpO1xuICAgICAgICAgICAgICAgIGNsb3NlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHdzLm9uZXJyb3IgPSBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAga29uc29sZS5sb2coXCJXZWJTb2NrZXQgZXJyb3JcIiwgZXJyb3IpO1xuICAgICAgICAgICAgICAgIGlmIChzdWIpIHN1Yi51bnN1YnNjcmliZSgpO1xuXG4gICAgICAgICAgICAgICAgLy8gUnhKUy5yZXRyeVdoZW4gaGFzIGEgYnVnIHRoYXQgd291bGQgY2F1c2UgXCJlcnJvclwiIHNpZ25hbCB0byBiZSBzZW50IGFmdGVyIHRoZSBvYnNlcnZhYmxlIGlzIGNvbXBsZXRlZC9lcnJvcmVkLlxuICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gZ3VhcmQgYWdhaW5zdCBleHRyYW5lb3VzIFwiZXJyb3JcIiBzaWduYWwgdG8gd29ya2Fyb3VuZCB0aGUgYnVnLlxuICAgICAgICAgICAgICAgIGNsb3NlZCB8fCBzdWJzY3JpYmVyLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgICAgICBjbG9zZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB3cy5vbm1lc3NhZ2UgPSBtZXNzYWdlID0+IG1lc3NhZ2UuZGF0YSAmJiBzdWJzY3JpYmVyLm5leHQoSlNPTi5wYXJzZShtZXNzYWdlLmRhdGEpKTtcblxuICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgJ3Vuc3Vic2NyaWJlJyBtZXRob2QsIHdoaWNoIGlzIGNhbGxlZCB3aGVuIHRoaXMgb2JzZXJ2YWJsZSBpcyBkaXNwb3NlZC5cbiAgICAgICAgICAgIC8vIFdoZW4gdGhlIFdlYlNvY2tldCBjbG9zZXMgaXRzZWxmLCB3ZSB0aHJvdyBhbiBlcnJvciwgYW5kIHRoaXMgZnVuY3Rpb24gaXMgZXZlbnR1YWxseSBjYWxsZWQuXG4gICAgICAgICAgICAvLyBXaGVuIHRoZSBvYnNlcnZhYmxlIGlzIGNsb3NlZCBmaXJzdCAoZS5nLiB3aGVuIHRlYXJpbmcgZG93biBhIFdlYkNoYXQgaW5zdGFuY2UpIHRoZW5cbiAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8gbWFudWFsbHkgY2xvc2UgdGhlIFdlYlNvY2tldC5cbiAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHdzLnJlYWR5U3RhdGUgPT09IDAgfHwgd3MucmVhZHlTdGF0ZSA9PT0gMSkgd3MuY2xvc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkgYXMgT2JzZXJ2YWJsZTxUPlxuICAgIH1cblxuICAgIHByaXZhdGUgcmVjb25uZWN0VG9Db252ZXJzYXRpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoZWNrQ29ubmVjdGlvbih0cnVlKVxuICAgICAgICAuZmxhdE1hcChfID0+XG4gICAgICAgICAgICB0aGlzLnNlcnZpY2VzLmFqYXgoe1xuICAgICAgICAgICAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgICAgICAgICAgICB1cmw6IGAke3RoaXMuZG9tYWlufS9jb252ZXJzYXRpb25zLyR7dGhpcy5jb252ZXJzYXRpb25JZH0/d2F0ZXJtYXJrPSR7dGhpcy53YXRlcm1hcmt9YCxcbiAgICAgICAgICAgICAgICB0aW1lb3V0OiB0aGlzLnRpbWVvdXQsXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICBcIkFjY2VwdFwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5jb21tb25IZWFkZXJzKClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmRvKHJlc3VsdCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNlY3JldClcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2tlbiA9IHJlc3VsdC5yZXNwb25zZS50b2tlbjtcbiAgICAgICAgICAgICAgICB0aGlzLnN0cmVhbVVybCA9IHJlc3VsdC5yZXNwb25zZS5zdHJlYW1Vcmw7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLm1hcChfID0+IG51bGwpXG4gICAgICAgICAgICAucmV0cnlXaGVuKGVycm9yJCA9PiBlcnJvciRcbiAgICAgICAgICAgICAgICAubWVyZ2VNYXAoZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3Iuc3RhdHVzID09PSA0MDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRva2VuIGhhcyBleHBpcmVkLiBXZSBjYW4ndCByZWNvdmVyIGZyb20gdGhpcyBoZXJlLCBidXQgdGhlIGVtYmVkZGluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2Vic2l0ZSBtaWdodCBldmVudHVhbGx5IGNhbGwgcmVjb25uZWN0KCkgd2l0aCBhIG5ldyB0b2tlbiBhbmQgc3RyZWFtVXJsLlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5leHBpcmVkVG9rZW4oKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlcnJvci5zdGF0dXMgPT09IDQwNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9ic2VydmFibGUudGhyb3coZXJyb3JDb252ZXJzYXRpb25FbmRlZCwgdGhpcy5zZXJ2aWNlcy5zY2hlZHVsZXIpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9ic2VydmFibGUub2YoZXJyb3IsIHRoaXMuc2VydmljZXMuc2NoZWR1bGVyKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5kZWxheSh0aGlzLnRpbWVvdXQsIHRoaXMuc2VydmljZXMuc2NoZWR1bGVyKVxuICAgICAgICAgICAgICAgIC50YWtlKHRoaXMucmV0cmllcylcbiAgICAgICAgICAgIClcbiAgICAgICAgKVxuICAgIH1cblxuICAgIHByaXZhdGUgY29tbW9uSGVhZGVycygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIFwiQXV0aG9yaXphdGlvblwiOiBgQmVhcmVyICR7dGhpcy50b2tlbn1gLFxuICAgICAgICAgICAgXCJ4LW1zLWJvdC1hZ2VudFwiOiB0aGlzLl9ib3RBZ2VudFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Qm90QWdlbnQoY3VzdG9tQWdlbnQ6IHN0cmluZyA9ICcnKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IGNsaWVudEFnZW50ID0gJ2RpcmVjdGxpbmVqcydcblxuICAgICAgICBpZiAoY3VzdG9tQWdlbnQpIHtcbiAgICAgICAgICAgIGNsaWVudEFnZW50ICs9IGA7ICR7Y3VzdG9tQWdlbnR9YFxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGAke0RJUkVDVF9MSU5FX1ZFUlNJT059ICgke2NsaWVudEFnZW50fSAke3Byb2Nlc3MuZW52Lm5wbV9wYWNrYWdlX3ZlcnNpb259KWA7XG4gICAgfVxuXG4gICAgc2V0VXNlcklkKHVzZXJJZDogc3RyaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbm5lY3Rpb25TdGF0dXMkLmdldFZhbHVlKCkgPT09IENvbm5lY3Rpb25TdGF0dXMuT25saW5lKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RpcmVjdExpbmVKUzogSXQgaXMgY29ubmVjdGVkLCB3ZSBjYW5ub3Qgc2V0IHVzZXIgaWQuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB1c2VySWRGcm9tVG9rZW4gPSB0aGlzLnBhcnNlVG9rZW4odGhpcy50b2tlbik7XG4gICAgICAgIGlmICh1c2VySWRGcm9tVG9rZW4pIHtcbiAgICAgICAgICAgIHJldHVybiBjb25zb2xlLndhcm4oJ0RpcmVjdExpbmVKUzogdXNlciBpZCBpcyBhbHJlYWR5IHNldCBpbiB0b2tlbiwgd2lsbCBpZ25vcmUgdGhpcyB1c2VyIGlkLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKC9eZGxfL3UudGVzdCh1c2VySWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gY29uc29sZS53YXJuKCdEaXJlY3RMaW5lSlM6IHVzZXIgaWQgcHJlZml4ZWQgd2l0aCBcImRsX1wiIGlzIHJlc2VydmVkIGFuZCBtdXN0IGJlIGVtYmVkZGVkIGludG8gdGhlIERpcmVjdCBMaW5lIHRva2VuIHRvIHByZXZlbnQgZm9yZ2VyeS4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudXNlcklkT25TdGFydENvbnZlcnNhdGlvbiA9IHVzZXJJZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHBhcnNlVG9rZW4odG9rZW46IHN0cmluZykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgeyB1c2VyIH0gPSBqd3REZWNvZGU8Snd0UGF5bG9hZD4odG9rZW4pIGFzIHsgW2tleTogc3RyaW5nXTogYW55OyB9O1xuICAgICAgICAgICAgcmV0dXJuIHVzZXI7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgSW52YWxpZFRva2VuRXJyb3IpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBQSxPQUFBO0FBQ0FBLE9BQUE7QUFFQSxJQUFBQyxnQkFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsV0FBQSxHQUFBRixPQUFBO0FBSUEsSUFBQUcsTUFBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksVUFBQSxHQUFBQyx1QkFBQSxDQUFBTCxPQUFBO0FBRUFBLE9BQUE7QUFDQUEsT0FBQTtBQUNBQSxPQUFBO0FBQ0FBLE9BQUE7QUFDQUEsT0FBQTtBQUNBQSxPQUFBO0FBQ0FBLE9BQUE7QUFDQUEsT0FBQTtBQUNBQSxPQUFBO0FBQ0FBLE9BQUE7QUFDQUEsT0FBQTtBQUNBQSxPQUFBO0FBRUFBLE9BQUE7QUFDQUEsT0FBQTtBQUNBQSxPQUFBO0FBQ0FBLE9BQUE7QUFDQUEsT0FBQTtBQUNBQSxPQUFBO0FBRUEsSUFBQU0sZ0JBQUEsR0FBQUMsc0JBQUEsQ0FBQVAsT0FBQTtBQUdBLElBQUFRLG9CQUFBLEdBQUFSLE9BQUE7QUFBNEQsSUFBQVMsU0FBQTtBQUFBLFNBQUFDLHlCQUFBQyxXQUFBLGVBQUFDLE9BQUEsa0NBQUFDLGlCQUFBLE9BQUFELE9BQUEsUUFBQUUsZ0JBQUEsT0FBQUYsT0FBQSxZQUFBRix3QkFBQSxZQUFBQSx5QkFBQUMsV0FBQSxXQUFBQSxXQUFBLEdB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
|
|
729
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZXF1aXJlIiwiX0JlaGF2aW9yU3ViamVjdCIsIl9PYnNlcnZhYmxlIiwiX2FzeW5jIiwiX2p3dERlY29kZSIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiX2RlZHVwZUZpbGVuYW1lcyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfZGlyZWN0TGluZVN0cmVhbWluZyIsIl9leGNsdWRlZCIsImUiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwiX19lc01vZHVsZSIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJzZXQiLCJfdCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwib3duS2V5cyIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJmaWx0ZXIiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJESVJFQ1RfTElORV9WRVJTSU9OIiwiQ29ubmVjdGlvblN0YXR1cyIsImV4cG9ydHMiLCJ3cmFwQWpheFdpdGhSZXRyeSIsInNvdXJjZSIsInNjaGVkdWxlciIsIm5vdEltcGxlbWVudGVkIiwiRXJyb3IiLCJpbm5lciIsInJlc3BvbnNlJCIsImVyciIsInN0YXR1cyIsInJldHJ5QWZ0ZXJWYWx1ZSIsInhociIsImdldFJlc3BvbnNlSGVhZGVyIiwicmV0cnlBZnRlciIsIk51bWJlciIsImlzTmFOIiwiT2JzZXJ2YWJsZSIsInRpbWVyIiwiZmxhdE1hcCIsIl8iLCJvdXRlciIsInVybE9yUmVxdWVzdCIsImFzc2lnbiIsInVybCIsImhlYWRlcnMiLCJwb3N0IiwiYm9keSIsInB1dCIsInBhdGNoIiwiZGVsZXRlIiwiZ2V0SlNPTiIsIm1ha2VTZXJ2aWNlcyIsInNlcnZpY2VzIiwiQXN5bmNTY2hlZHVsZXIiLCJhamF4IiwiV2ViU29ja2V0IiwicmFuZG9tIiwiTWF0aCIsImxpZmV0aW1lUmVmcmVzaFRva2VuIiwiaW50ZXJ2YWxSZWZyZXNoVG9rZW4iLCJQT0xMSU5HX0lOVEVSVkFMX0xPV0VSX0JPVU5EIiwiZXJyb3JFeHBpcmVkVG9rZW4iLCJlcnJvckNvbnZlcnNhdGlvbkVuZGVkIiwiZXJyb3JGYWlsZWRUb0Nvbm5lY3QiLCJrb25zb2xlIiwibG9nIiwibWVzc2FnZSIsIl9jb25zb2xlIiwiX2xlbiIsIm9wdGlvbmFsUGFyYW1zIiwiQXJyYXkiLCJfa2V5Iiwid2luZG93IiwiY29uc29sZSIsImNvbmNhdCIsIkRpcmVjdExpbmUiLCJvcHRpb25zIiwiX2NsYXNzQ2FsbENoZWNrMiIsIkJlaGF2aW9yU3ViamVjdCIsIlVuaW5pdGlhbGl6ZWQiLCJzZWNyZXQiLCJ0b2tlbiIsIndlYlNvY2tldCIsInVuZGVmaW5lZCIsInN0cmVhbWluZyIsImNvbnZlcnNhdGlvblN0YXJ0UHJvcGVydGllcyIsImxvY2FsZSIsInByb3RvdHlwZSIsInRvU3RyaW5nIiwibG9jYWxlT25TdGFydENvbnZlcnNhdGlvbiIsIndhcm4iLCJkb21haW4iLCJjb252ZXJzYXRpb25JZCIsIndhdGVybWFyayIsInN0cmVhbVVybCIsInRpbWVvdXQiLCJyZXRyaWVzIiwiX2JvdEFnZW50IiwiZ2V0Qm90QWdlbnQiLCJib3RBZ2VudCIsInBhcnNlZFBvbGxpbmdJbnRlcnZhbCIsInBvbGxpbmdJbnRlcnZhbCIsImV4cGlyZWRUb2tlbkV4aGF1c3Rpb24iLCJzZXRDb25uZWN0aW9uU3RhdHVzRmFsbGJhY2siLCJFeHBpcmVkVG9rZW4iLCJGYWlsZWRUb0Nvbm5lY3QiLCJhY3Rpdml0eSQiLCJ3ZWJTb2NrZXRBY3Rpdml0eSQiLCJwb2xsaW5nR2V0QWN0aXZpdHkkIiwic2hhcmUiLCJfY3JlYXRlQ2xhc3MyIiwia2V5IiwidmFsdWUiLCJjaGVja0Nvbm5lY3Rpb24iLCJfdGhpcyIsIm9uY2UiLCJvYnMiLCJjb25uZWN0aW9uU3RhdHVzJCIsImNvbm5lY3Rpb25TdGF0dXMiLCJuZXh0IiwiQ29ubmVjdGluZyIsIk9ubGluZSIsIm9mIiwic3RhcnRDb252ZXJzYXRpb24iLCJjb252ZXJzYXRpb24iLCJyZWZlcmVuY2VHcmFtbWFySWQiLCJyZWZyZXNoVG9rZW5Mb29wIiwiZXJyb3IiLCJtYXAiLCJFbmRlZCIsInRha2UiLCJjb25uZWN0aW9uU3RhdHVzRnJvbSIsImNvbm5lY3Rpb25TdGF0dXNUbyIsIm1heEF0dGVtcHRzIiwiYXR0ZW1wdHMiLCJjdXJyU3RhdHVzIiwiZXhwaXJlZFRva2VuIiwiZ2V0VmFsdWUiLCJwcm90ZWN0ZWRDb25uZWN0aW9uU3RhdHVzIiwiX3RoaXMyIiwibWV0aG9kIiwidXNlciIsImlkIiwidXNlcklkT25TdGFydENvbnZlcnNhdGlvbiIsImNvbW1vbkhlYWRlcnMiLCJhamF4UmVzcG9uc2UiLCJyZXNwb25zZSIsInJldHJ5V2hlbiIsImVycm9yJCIsIm1lcmdlTWFwIiwiZGVsYXkiLCJfdGhpczMiLCJ0b2tlblJlZnJlc2hTdWJzY3JpcHRpb24iLCJpbnRlcnZhbCIsInJlZnJlc2hUb2tlbiIsInN1YnNjcmliZSIsIkRhdGUiLCJfdGhpczQiLCJyZWNvbm5lY3QiLCJlbmQiLCJ1bnN1YnNjcmliZSIsImdldFNlc3Npb25JZCIsIl90aGlzNSIsIndpdGhDcmVkZW50aWFscyIsInNlc3Npb25JZCIsImNhdGNoRXhwaXJlZFRva2VuIiwicG9zdEFjdGl2aXR5IiwiYWN0aXZpdHkiLCJfdGhpczYiLCJkZWxpdmVyeU1vZGUiLCJmcm9tIiwidHlwZSIsImF0dGFjaG1lbnRzIiwicG9zdE1lc3NhZ2VXaXRoQXR0YWNobWVudHMiLCJjYXRjaFBvc3RFcnJvciIsIl90aGlzNyIsImF0dGFjaG1lbnROYW1lcyIsImRlZHVwZUZpbGVuYW1lcyIsIm1lZGlhIiwibmFtZSIsImNsZWFuc2VkQXR0YWNobWVudHMiLCJhdHRhY2htZW50IiwiaW5kZXgiLCJmb3JtRGF0YSIsIkZvcm1EYXRhIiwiYXBwZW5kIiwiQmxvYiIsIkpTT04iLCJzdHJpbmdpZnkiLCJfcmVmIiwic3RyaW5nIiwiY29udGVudFVybCIsIm90aGVycyIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllczIiLCJyZXNwb25zZVR5cGUiLCJjb250ZW50VHlwZSIsImNvdW50IiwiX3RoaXM4IiwicG9sbGVyJCIsImNyZWF0ZSIsInN1YnNjcmliZXIiLCJ0cmlnZ2VyJCIsInN0YXJ0VGltZXN0YW1wIiwibm93IiwiQWNjZXB0IiwicmVzdWx0Iiwic2V0VGltZW91dCIsIm1heCIsImVtcHR5IiwiYWN0aXZpdHlHcm91cCIsIm9ic2VydmFibGVGcm9tQWN0aXZpdHlHcm91cCIsImFjdGl2aXRpZXMiLCJfdGhpczkiLCJvYnNlcnZhYmxlV2ViU29ja2V0IiwiZ2V0UmV0cnlEZWxheSIsInJlY29ubmVjdFRvQ29udmVyc2F0aW9uIiwiZmxvb3IiLCJfdGhpczAiLCJ3cyIsInN1YiIsImNsb3NlZCIsIm9ub3BlbiIsIm9wZW4iLCJzZW5kIiwib25jbG9zZSIsImNsb3NlIiwib25lcnJvciIsIm9ubWVzc2FnZSIsImRhdGEiLCJwYXJzZSIsInJlYWR5U3RhdGUiLCJfdGhpczEiLCJjdXN0b21BZ2VudCIsImNsaWVudEFnZW50Iiwic2V0VXNlcklkIiwidXNlcklkIiwidXNlcklkRnJvbVRva2VuIiwicGFyc2VUb2tlbiIsInRlc3QiLCJfcmVmMiIsImp3dERlY29kZSIsIkludmFsaWRUb2tlbkVycm9yIl0sInNvdXJjZXMiOlsiLi4vc3JjL2RpcmVjdExpbmUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gSW4gb3JkZXIgdG8ga2VlcCBmaWxlIHNpemUgZG93biwgb25seSBpbXBvcnQgdGhlIHBhcnRzIG9mIHJ4anMgdGhhdCB3ZSB1c2VcblxuaW1wb3J0ICdjb3JlLWpzL2ZlYXR1cmVzL3Byb21pc2UnO1xuaW1wb3J0ICd1cmwtc2VhcmNoLXBhcmFtcy1wb2x5ZmlsbCc7XG5pbXBvcnQgeyBBamF4UmVzcG9uc2UsIEFqYXhDcmVhdGlvbk1ldGhvZCwgQWpheFJlcXVlc3QsIEFqYXhFcnJvciB9IGZyb20gJ3J4anMvb2JzZXJ2YWJsZS9kb20vQWpheE9ic2VydmFibGUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcy9CZWhhdmlvclN1YmplY3QnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMvT2JzZXJ2YWJsZSc7XG5pbXBvcnQgeyBJU2NoZWR1bGVyIH0gZnJvbSAncnhqcy9TY2hlZHVsZXInO1xuaW1wb3J0IHsgU3Vic2NyaWJlciB9IGZyb20gJ3J4anMvU3Vic2NyaWJlcic7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzL1N1YnNjcmlwdGlvbic7XG5pbXBvcnQgeyBhc3luYyBhcyBBc3luY1NjaGVkdWxlciB9IGZyb20gJ3J4anMvc2NoZWR1bGVyL2FzeW5jJztcbmltcG9ydCBqd3REZWNvZGUsIHsgSnd0UGF5bG9hZCwgSW52YWxpZFRva2VuRXJyb3IgfSBmcm9tICdqd3QtZGVjb2RlJztcblxuaW1wb3J0ICdyeGpzL2FkZC9vcGVyYXRvci9jYXRjaCc7XG5pbXBvcnQgJ3J4anMvYWRkL29wZXJhdG9yL2NvbWJpbmVMYXRlc3QnO1xuaW1wb3J0ICdyeGpzL2FkZC9vcGVyYXRvci9jb3VudCc7XG5pbXBvcnQgJ3J4anMvYWRkL29wZXJhdG9yL2RlbGF5JztcbmltcG9ydCAncnhqcy9hZGQvb3BlcmF0b3IvZG8nO1xuaW1wb3J0ICdyeGpzL2FkZC9vcGVyYXRvci9maWx0ZXInO1xuaW1wb3J0ICdyeGpzL2FkZC9vcGVyYXRvci9tYXAnO1xuaW1wb3J0ICdyeGpzL2FkZC9vcGVyYXRvci9tZXJnZU1hcCc7XG5pbXBvcnQgJ3J4anMvYWRkL29wZXJhdG9yL2NvbmNhdE1hcCc7XG5pbXBvcnQgJ3J4anMvYWRkL29wZXJhdG9yL3JldHJ5V2hlbic7XG5pbXBvcnQgJ3J4anMvYWRkL29wZXJhdG9yL3NoYXJlJztcbmltcG9ydCAncnhqcy9hZGQvb3BlcmF0b3IvdGFrZSc7XG5cbmltcG9ydCAncnhqcy9hZGQvb2JzZXJ2YWJsZS9kb20vYWpheCc7XG5pbXBvcnQgJ3J4anMvYWRkL29ic2VydmFibGUvZW1wdHknO1xuaW1wb3J0ICdyeGpzL2FkZC9vYnNlcnZhYmxlL2Zyb20nO1xuaW1wb3J0ICdyeGpzL2FkZC9vYnNlcnZhYmxlL2ludGVydmFsJztcbmltcG9ydCAncnhqcy9hZGQvb2JzZXJ2YWJsZS9vZic7XG5pbXBvcnQgJ3J4anMvYWRkL29ic2VydmFibGUvdGhyb3cnO1xuXG5pbXBvcnQgZGVkdXBlRmlsZW5hbWVzIGZyb20gJy4vZGVkdXBlRmlsZW5hbWVzJztcbmltcG9ydCB7IG9iamVjdEV4cHJlc3Npb24gfSBmcm9tICdAYmFiZWwvdHlwZXMnO1xuXG5pbXBvcnQgeyBEaXJlY3RMaW5lU3RyZWFtaW5nIH0gZnJvbSAnLi9kaXJlY3RMaW5lU3RyZWFtaW5nJztcbmV4cG9ydCB7IERpcmVjdExpbmVTdHJlYW1pbmcgfTtcblxuY29uc3QgRElSRUNUX0xJTkVfVkVSU0lPTiA9ICdEaXJlY3RMaW5lLzMuMCc7XG5cbmRlY2xhcmUgdmFyIHByb2Nlc3M6IHtcbiAgICBhcmNoOiBzdHJpbmc7XG4gICAgZW52OiB7XG4gICAgICAgIFZFUlNJT046IHN0cmluZztcbiAgICAgICAgbnBtX3BhY2thZ2VfdmVyc2lvbjogc3RyaW5nO1xuICAgIH07XG4gICAgcGxhdGZvcm06IHN0cmluZztcbiAgICByZWxlYXNlOiBzdHJpbmc7XG4gICAgdmVyc2lvbjogc3RyaW5nO1xufTtcblxuLy8gRGlyZWN0IExpbmUgMy4wIHR5cGVzXG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29udmVyc2F0aW9uIHtcbiAgICBjb252ZXJzYXRpb25JZDogc3RyaW5nLFxuICAgIHRva2VuOiBzdHJpbmcsXG4gICAgZVRhZz86IHN0cmluZyxcbiAgICBzdHJlYW1Vcmw/OiBzdHJpbmcsXG4gICAgcmVmZXJlbmNlR3JhbW1hcklkPzogc3RyaW5nXG59XG5cbmV4cG9ydCB0eXBlIE1lZGlhVHlwZSA9IFwiaW1hZ2UvcG5nXCIgfCBcImltYWdlL2pwZ1wiIHwgXCJpbWFnZS9qcGVnXCIgfCBcImltYWdlL2dpZlwiIHwgXCJpbWFnZS9zdmcreG1sXCIgfCBcImF1ZGlvL21wZWdcIiB8IFwiYXVkaW8vbXA0XCIgfCBcInZpZGVvL21wNFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1lZGlhIHtcbiAgICBjb250ZW50VHlwZTogTWVkaWFUeXBlLFxuICAgIGNvbnRlbnRVcmw6IHN0cmluZyxcbiAgICBuYW1lPzogc3RyaW5nLFxuICAgIHRodW1ibmFpbFVybD86IHN0cmluZ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVua25vd25NZWRpYXtcbiAgICBjb250ZW50VHlwZTogc3RyaW5nLFxuICAgIGNvbnRlbnRVcmw6IHN0cmluZyxcbiAgICBuYW1lPzogc3RyaW5nLFxuICAgIHRodW1ibmFpbFVybD86IHN0cmluZ1xufVxuXG5leHBvcnQgdHlwZSBDYXJkQWN0aW9uVHlwZXMgPSBcImNhbGxcIiB8IFwiZG93bmxvYWRGaWxlXCJ8IFwiaW1CYWNrXCIgfCBcIm1lc3NhZ2VCYWNrXCIgfCBcIm9wZW5VcmxcIiB8IFwicGxheUF1ZGlvXCIgfCBcInBsYXlWaWRlb1wiIHwgXCJwb3N0QmFja1wiIHwgXCJzaWduaW5cIiB8IFwic2hvd0ltYWdlXCI7XG5cbmV4cG9ydCB0eXBlIENhcmRBY3Rpb24gPSBDYWxsQ2FyZEFjdGlvbiB8IERvd25sb2FkRmlsZUNhcmRBY3Rpb24gfCBJTUJhY2tDYXJkQWN0aW9uIHwgTWVzc2FnZUJhY2tDYXJkQWN0aW9uIHwgT3BlblVSTENhcmRBY3Rpb24gfCBQbGF5QXVkaW9DYXJkQWN0aW9uIHwgUGxheVZpZGVvQ2FyZEFjdGlvbiB8IFBvc3RCYWNrQ2FyZEFjdGlvbiB8IFNpZ25JbkNhcmRBY3Rpb24gfCBTaG93SW1hZ2VDYXJkQWN0aW9uO1xuXG5leHBvcnQgaW50ZXJmYWNlIENhbGxDYXJkQWN0aW9uIHtcbiAgICBpbWFnZT86IHN0cmluZyxcbiAgICB0aXRsZTogc3RyaW5nLFxuICAgIHR5cGU6IFwiY2FsbFwiLFxuICAgIHZhbHVlOiBhbnlcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEb3dubG9hZEZpbGVDYXJkQWN0aW9uIHtcbiAgICBpbWFnZT86IHN0cmluZyxcbiAgICB0aXRsZTogc3RyaW5nLFxuICAgIHR5cGU6IFwiZG93bmxvYWRGaWxlXCIsXG4gICAgdmFsdWU6IGFueVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElNQmFja0NhcmRBY3Rpb24ge1xuICAgIGltYWdlPzogc3RyaW5nLFxuICAgIHRpdGxlPzogc3RyaW5nLFxuICAgIHR5cGU6IFwiaW1CYWNrXCIsXG4gICAgdmFsdWU6IHN0cmluZ1xufVxuXG5leHBvcnQgdHlwZSBNZXNzYWdlQmFja0NhcmRBY3Rpb24gPSBNZXNzYWdlQmFja1dpdGhJbWFnZSB8IE1lc3NhZ2VCYWNrV2l0aFRpdGxlXG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVzc2FnZUJhY2tXaXRoSW1hZ2Uge1xuICAgIGRpc3BsYXlUZXh0Pzogc3RyaW5nLFxuICAgIGltYWdlOiBzdHJpbmcsXG4gICAgdGV4dD86IHN0cmluZyxcbiAgICB0aXRsZT86IHN0cmluZyxcbiAgICB0eXBlOiBcIm1lc3NhZ2VCYWNrXCIsXG4gICAgdmFsdWU/OiBhbnlcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNZXNzYWdlQmFja1dpdGhUaXRsZSB7XG4gICAgZGlzcGxheVRleHQ/OiBzdHJpbmcsXG4gICAgaW1hZ2U/OiBzdHJpbmcsXG4gICAgdGV4dD86IHN0cmluZyxcbiAgICB0aXRsZTogc3RyaW5nLFxuICAgIHR5cGU6IFwibWVzc2FnZUJhY2tcIixcbiAgICB2YWx1ZT86IGFueVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9wZW5VUkxDYXJkQWN0aW9uIHtcbiAgICBpbWFnZT86IHN0cmluZyxcbiAgICB0aXRsZTogc3RyaW5nLFxuICAgIHR5cGU6IFwib3BlblVybFwiLFxuICAgIHZhbHVlOiBhbnlcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQbGF5QXVkaW9DYXJkQWN0aW9uIHtcbiAgICBpbWFnZT86IHN0cmluZyxcbiAgICB0aXRsZTogc3RyaW5nLFxuICAgIHR5cGU6IFwicGxheUF1ZGlvXCIsXG4gICAgdmFsdWU6IGFueVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBsYXlWaWRlb0NhcmRBY3Rpb24ge1xuICAgIGltYWdlPzogc3RyaW5nLFxuICAgIHRpdGxlOiBzdHJpbmcsXG4gICAgdHlwZTogXCJwbGF5VmlkZW9cIixcbiAgICB2YWx1ZTogYW55XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUG9zdEJhY2tDYXJkQWN0aW9uIHtcbiAgICBpbWFnZT86IHN0cmluZyxcbiAgICB0aXRsZT86IHN0cmluZyxcbiAgICB0eXBlOiBcInBvc3RCYWNrXCIsXG4gICAgdmFsdWU6IGFueVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNob3dJbWFnZUNhcmRBY3Rpb24ge1xuICAgIGltYWdlPzogc3RyaW5nLFxuICAgIHRpdGxlOiBzdHJpbmcsXG4gICAgdHlwZTogXCJzaG93SW1hZ2VcIixcbiAgICB2YWx1ZTogYW55XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2lnbkluQ2FyZEFjdGlvbiB7XG4gICAgaW1hZ2U/OiBzdHJpbmcsXG4gICAgdGl0bGU6IHN0cmluZyxcbiAgICB0eXBlOiBcInNpZ25pblwiLFxuICAgIHZhbHVlOiBhbnlcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDYXJkSW1hZ2Uge1xuICAgIGFsdD86IHN0cmluZyxcbiAgICB1cmw6IHN0cmluZyxcbiAgICB0YXA/OiBDYXJkQWN0aW9uXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGVyb0NhcmQge1xuICAgIGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL3ZuZC5taWNyb3NvZnQuY2FyZC5oZXJvXCIsXG4gICAgY29udGVudDoge1xuICAgICAgICB0aXRsZT86IHN0cmluZyxcbiAgICAgICAgc3VidGl0bGU/OiBzdHJpbmcsXG4gICAgICAgIHRleHQ/OiBzdHJpbmcsXG4gICAgICAgIGltYWdlcz86IENhcmRJbWFnZVtdLFxuICAgICAgICBidXR0b25zPzogQ2FyZEFjdGlvbltdLFxuICAgICAgICB0YXA/OiBDYXJkQWN0aW9uXG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRodW1ibmFpbCB7XG4gICAgY29udGVudFR5cGU6IFwiYXBwbGljYXRpb24vdm5kLm1pY3Jvc29mdC5jYXJkLnRodW1ibmFpbFwiLFxuICAgIGNvbnRlbnQ6IHtcbiAgICAgICAgdGl0bGU/OiBzdHJpbmcsXG4gICAgICAgIHN1YnRpdGxlPzogc3RyaW5nLFxuICAgICAgICB0ZXh0Pzogc3RyaW5nLFxuICAgICAgICBpbWFnZXM/OiBDYXJkSW1hZ2VbXSxcbiAgICAgICAgYnV0dG9ucz86IENhcmRBY3Rpb25bXSxcbiAgICAgICAgdGFwPzogQ2FyZEFjdGlvblxuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBTaWduaW4ge1xuICAgIGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL3ZuZC5taWNyb3NvZnQuY2FyZC5zaWduaW5cIixcbiAgICBjb250ZW50OiB7XG4gICAgICAgIHRleHQ/OiBzdHJpbmcsXG4gICAgICAgIGJ1dHRvbnM/OiBDYXJkQWN0aW9uW11cbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT0F1dGgge1xuICAgIGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL3ZuZC5taWNyb3NvZnQuY2FyZC5vYXV0aFwiLFxuICAgIGNvbnRlbnQ6IHtcbiAgICAgICAgdGV4dD86IHN0cmluZyxcbiAgICAgICAgY29ubmVjdGlvbm5hbWU6IHN0cmluZyxcbiAgICAgICAgYnV0dG9ucz86IENhcmRBY3Rpb25bXVxuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZWNlaXB0SXRlbSB7XG4gICAgdGl0bGU/OiBzdHJpbmcsXG4gICAgc3VidGl0bGU/OiBzdHJpbmcsXG4gICAgdGV4dD86IHN0cmluZyxcbiAgICBpbWFnZT86IENhcmRJbWFnZSxcbiAgICBwcmljZT86IHN0cmluZyxcbiAgICBxdWFudGl0eT86IHN0cmluZyxcbiAgICB0YXA/OiBDYXJkQWN0aW9uXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVjZWlwdCB7XG4gICAgY29udGVudFR5cGU6IFwiYXBwbGljYXRpb24vdm5kLm1pY3Jvc29mdC5jYXJkLnJlY2VpcHRcIixcbiAgICBjb250ZW50OiB7XG4gICAgICAgIHRpdGxlPzogc3RyaW5nLFxuICAgICAgICBmYWN0cz86IHsga2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfVtdLFxuICAgICAgICBpdGVtcz86IFJlY2VpcHRJdGVtW10sXG4gICAgICAgIHRhcD86IENhcmRBY3Rpb24sXG4gICAgICAgIHRheD86IHN0cmluZyxcbiAgICAgICAgdmF0Pzogc3RyaW5nLFxuICAgICAgICB0b3RhbD86IHN0cmluZyxcbiAgICAgICAgYnV0dG9ucz86IENhcmRBY3Rpb25bXVxuICAgIH1cbn1cblxuLy8gRGVwcmVjYXRlZCBmb3JtYXQgZm9yIFNreXBlIGNoYW5uZWxzLiBGb3IgdGVzdGluZyBsZWdhY3kgYm90cyBpbiBFbXVsYXRvciBvbmx5LlxuZXhwb3J0IGludGVyZmFjZSBGbGV4Q2FyZCB7XG4gICAgY29udGVudFR5cGU6IFwiYXBwbGljYXRpb24vdm5kLm1pY3Jvc29mdC5jYXJkLmZsZXhcIixcbiAgICBjb250ZW50OiB7XG4gICAgICAgIHRpdGxlPzogc3RyaW5nLFxuICAgICAgICBzdWJ0aXRsZT86IHN0cmluZyxcbiAgICAgICAgdGV4dD86IHN0cmluZyxcbiAgICAgICAgaW1hZ2VzPzogQ2FyZEltYWdlW10sXG4gICAgICAgIGJ1dHRvbnM/OiBDYXJkQWN0aW9uW10sXG4gICAgICAgIGFzcGVjdD86IHN0cmluZ1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBBdWRpb0NhcmQge1xuICAgIGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL3ZuZC5taWNyb3NvZnQuY2FyZC5hdWRpb1wiLFxuICAgIGNvbnRlbnQ6IHtcbiAgICAgICAgdGl0bGU/OiBzdHJpbmcsXG4gICAgICAgIHN1YnRpdGxlPzogc3RyaW5nLFxuICAgICAgICB0ZXh0Pzogc3RyaW5nLFxuICAgICAgICBtZWRpYT86IHsgdXJsOiBzdHJpbmcsIHByb2ZpbGU/OiBzdHJpbmcgfVtdLFxuICAgICAgICBidXR0b25zPzogQ2FyZEFjdGlvbltdLFxuICAgICAgICBhdXRvbG9vcD86IGJvb2xlYW4sXG4gICAgICAgIGF1dG9zdGFydD86IGJvb2xlYW5cbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlkZW9DYXJkIHtcbiAgICBjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi92bmQubWljcm9zb2Z0LmNhcmQudmlkZW9cIixcbiAgICBjb250ZW50OiB7XG4gICAgICAgIHRpdGxlPzogc3RyaW5nLFxuICAgICAgICBzdWJ0aXRsZT86IHN0cmluZyxcbiAgICAgICAgdGV4dD86IHN0cmluZyxcbiAgICAgICAgbWVkaWE/OiB7IHVybDogc3RyaW5nLCBwcm9maWxlPzogc3RyaW5nIH1bXSxcbiAgICAgICAgYnV0dG9ucz86IENhcmRBY3Rpb25bXSxcbiAgICAgICAgaW1hZ2U/OiB7IHVybDogc3RyaW5nLCBhbHQ/OiBzdHJpbmcgfSxcbiAgICAgICAgYXV0b2xvb3A/OiBib29sZWFuLFxuICAgICAgICBhdXRvc3RhcnQ/OiBib29sZWFuXG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFkYXB0aXZlQ2FyZCB7XG4gICAgY29udGVudFR5cGU6IFwiYXBwbGljYXRpb24vdm5kLm1pY3Jvc29mdC5jYXJkLmFkYXB0aXZlXCIsXG4gICAgY29udGVudDogYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFuaW1hdGlvbkNhcmQge1xuICAgIGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL3ZuZC5taWNyb3NvZnQuY2FyZC5hbmltYXRpb25cIixcbiAgICBjb250ZW50OiB7XG4gICAgICAgIHRpdGxlPzogc3RyaW5nLFxuICAgICAgICBzdWJ0aXRsZT86IHN0cmluZyxcbiAgICAgICAgdGV4dD86IHN0cmluZyxcbiAgICAgICAgbWVkaWE/OiB7IHVybDogc3RyaW5nLCBwcm9maWxlPzogc3RyaW5nIH1bXSxcbiAgICAgICAgYnV0dG9ucz86IENhcmRBY3Rpb25bXSxcbiAgICAgICAgaW1hZ2U/OiB7IHVybDogc3RyaW5nLCBhbHQ/OiBzdHJpbmcgfSxcbiAgICAgICAgYXV0b2xvb3A/OiBib29sZWFuLFxuICAgICAgICBhdXRvc3RhcnQ/OiBib29sZWFuXG4gICAgfVxufVxuXG5leHBvcnQgdHlwZSBLbm93bk1lZGlhID0gTWVkaWEgfCBIZXJvQ2FyZCB8IFRodW1ibmFpbCB8IFNpZ25pbiB8IE9BdXRoIHwgUmVjZWlwdCB8IEF1ZGlvQ2FyZCB8IFZpZGVvQ2FyZCB8IEFuaW1hdGlvbkNhcmQgfCBGbGV4Q2FyZCB8IEFkYXB0aXZlQ2FyZDtcbmV4cG9ydCB0eXBlIEF0dGFjaG1lbnQgPSBLbm93bk1lZGlhIHwgVW5rbm93bk1lZGlhO1xuXG5leHBvcnQgdHlwZSBVc2VyUm9sZSA9IFwiYm90XCIgfCBcImNoYW5uZWxcIiB8IFwidXNlclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFVzZXIge1xuICAgIGlkOiBzdHJpbmcsXG4gICAgbmFtZT86IHN0cmluZyxcbiAgICBpY29uVXJsPzogc3RyaW5nLFxuICAgIHJvbGU/OiBVc2VyUm9sZVxufVxuXG5leHBvcnQgdHlwZSBEZWxpdmVyeU1vZGUgPSBcIm5vcm1hbFwiIHwgXCJzdHJlYW1cIjtcblxuZXhwb3J0IGludGVyZmFjZSBJQWN0aXZpdHkge1xuICAgIHR5cGU6IHN0cmluZyxcbiAgICBjaGFubmVsRGF0YT86IGFueSxcbiAgICBjaGFubmVsSWQ/OiBzdHJpbmcsXG4gICAgY29udmVyc2F0aW9uPzogeyBpZDogc3RyaW5nIH0sXG4gICAgZVRhZz86IHN0cmluZyxcbiAgICBmcm9tOiBVc2VyLFxuICAgIGlkPzogc3RyaW5nLFxuICAgIHRpbWVzdGFtcD86IHN0cmluZyxcbiAgICBkZWxpdmVyeU1vZGU/OiBEZWxpdmVyeU1vZGVcbn1cblxuZXhwb3J0IHR5cGUgQXR0YWNobWVudExheW91dCA9IFwibGlzdFwiIHwgXCJjYXJvdXNlbFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1lc3NhZ2UgZXh0ZW5kcyBJQWN0aXZpdHkge1xuICAgIHR5cGU6IFwibWVzc2FnZVwiLFxuICAgIHRleHQ/OiBzdHJpbmcsXG4gICAgbG9jYWxlPzogc3RyaW5nLFxuICAgIHRleHRGb3JtYXQ/OiBcInBsYWluXCIgfCBcIm1hcmtkb3duXCIgfCBcInhtbFwiLFxuICAgIGF0dGFjaG1lbnRMYXlvdXQ/OiBBdHRhY2htZW50TGF5b3V0LFxuICAgIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudFtdLFxuICAgIGVudGl0aWVzPzogYW55W10sXG4gICAgc3VnZ2VzdGVkQWN0aW9ucz86IHsgYWN0aW9uczogQ2FyZEFjdGlvbltdLCB0bz86IHN0cmluZ1tdIH0sXG4gICAgc3BlYWs/OiBzdHJpbmcsXG4gICAgaW5wdXRIaW50Pzogc3RyaW5nLFxuICAgIHZhbHVlPzogb2JqZWN0XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHlwaW5nIGV4dGVuZHMgSUFjdGl2aXR5IHtcbiAgICB0eXBlOiBcInR5cGluZ1wiXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRBY3Rpdml0eSBleHRlbmRzIElBY3Rpdml0eSB7XG4gICAgdHlwZTogXCJldmVudFwiLFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICB2YWx1ZTogYW55XG59XG5cbmV4cG9ydCB0eXBlIEFjdGl2aXR5ID0gTWVzc2FnZSB8IFR5cGluZyB8IEV2ZW50QWN0aXZpdHk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWN0aXZpdHlHcm91cCB7XG4gICAgYWN0aXZpdGllczogQWN0aXZpdHlbXSxcbiAgICB3YXRlcm1hcms6IHN0cmluZ1xufVxuXG4vLyBUaGVzZSB0eXBlcyBhcmUgc3BlY2lmaWMgdG8gdGhpcyBjbGllbnQgbGlicmFyeSwgbm90IHRvIERpcmVjdCBMaW5lIDMuMFxuXG5leHBvcnQgZW51bSBDb25uZWN0aW9uU3RhdHVzIHtcbiAgICBVbmluaXRpYWxpemVkLCAgICAgICAgICAgICAgLy8gdGhlIHN0YXR1cyB3aGVuIHRoZSBEaXJlY3RMaW5lIG9iamVjdCBpcyBmaXJzdCBjcmVhdGVkL2NvbnN0cnVjdGVkXG4gICAgQ29ubmVjdGluZywgICAgICAgICAgICAgICAgIC8vIGN1cnJlbnRseSB0cnlpbmcgdG8gY29ubmVjdCB0byB0aGUgY29udmVyc2F0aW9uXG4gICAgT25saW5lLCAgICAgICAgICAgICAgICAgICAgIC8vIHN1Y2Nlc3NmdWxseSBjb25uZWN0ZWQgdG8gdGhlIGNvbnZlcnNhdGlvbi4gQ29ubmVjdGlvbiBpcyBoZWFsdGh5IHNvIGZhciBhcyB3ZSBrbm93LlxuICAgIEV4cGlyZWRUb2tlbiwgICAgICAgICAgICAgICAvLyBsYXN0IG9wZXJhdGlvbiBlcnJvcmVkIG91dCB3aXRoIGFuIGV4cGlyZWQgdG9rZW4uIFBvc3NpYmx5IHdhaXRpbmcgZm9yIHNvbWVvbmUgdG8gc3VwcGx5IGEgbmV3IG9uZS5cbiAgICBGYWlsZWRUb0Nvbm5lY3QsICAgICAgICAgICAgLy8gdGhlIGluaXRpYWwgYXR0ZW1wdCB0byBjb25uZWN0IHRvIHRoZSBjb252ZXJzYXRpb24gZmFpbGVkLiBObyByZWNvdmVyeSBwb3NzaWJsZS5cbiAgICBFbmRlZCAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGJvdCBlbmRlZCB0aGUgY29udmVyc2F0aW9uXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGlyZWN0TGluZU9wdGlvbnMge1xuICAgIHNlY3JldD86IHN0cmluZyxcbiAgICB0b2tlbj86IHN0cmluZyxcbiAgICBjb252ZXJzYXRpb25JZD86IHN0cmluZyxcbiAgICB3YXRlcm1hcms/OiBzdHJpbmcsXG4gICAgZG9tYWluPzogc3RyaW5nLFxuICAgIHdlYlNvY2tldD86IGJvb2xlYW4sXG4gICAgcG9sbGluZ0ludGVydmFsPzogbnVtYmVyLFxuICAgIHN0cmVhbVVybD86IHN0cmluZyxcbiAgICB0aW1lb3V0PzogbnVtYmVyLFxuICAgIC8vIEF0dGFjaGVkIHRvIGFsbCByZXF1ZXN0cyB0byBpZGVudGlmeSByZXF1ZXN0aW5nIGFnZW50LlxuICAgIGJvdEFnZW50Pzogc3RyaW5nLFxuICAgIGNvbnZlcnNhdGlvblN0YXJ0UHJvcGVydGllcz86IGFueSxcbiAgICAvKipcbiAgICAgKiBQZXItY29udmVyc2F0aW9uIHN3aXRjaCBmb3Igc3RyZWFtaW5nIGRlbGl2ZXJ5IG1vZGUuXG4gICAgICogSWYgdHJ1ZSwgZXZlcnkgb3V0Z29pbmcgYWN0aXZpdHkgd2lsbCBpbmNsdWRlIGRlbGl2ZXJ5TW9kZTogJ3N0cmVhbScuXG4gICAgICogSWYgZmFsc2Uvb21pdHRlZCwgZGVsaXZlcnlNb2RlIGlzIG5vdCBzZW50IChkZWZhdWx0cyB0byAnbm9ybWFsJyBpbiBBQlMpLlxuICAgICAqL1xuICAgIHN0cmVhbWluZz86IGJvb2xlYW5cbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlcyB7XG4gICAgc2NoZWR1bGVyOiBJU2NoZWR1bGVyO1xuICAgIFdlYlNvY2tldDogdHlwZW9mIFdlYlNvY2tldDtcbiAgICBhamF4OiBBamF4Q3JlYXRpb25NZXRob2Q7XG4gICAgcmFuZG9tOiAoKSA9PiBudW1iZXI7XG59XG5cbmNvbnN0IHdyYXBBamF4V2l0aFJldHJ5ID0gKHNvdXJjZTogQWpheENyZWF0aW9uTWV0aG9kLCBzY2hlZHVsZXI6IElTY2hlZHVsZXIpOiBBamF4Q3JlYXRpb25NZXRob2QgPT57XG5cbiAgICBjb25zdCBub3RJbXBsZW1lbnRlZCA9ICgpOiBuZXZlciA9PiB7IHRocm93IG5ldyBFcnJvcignbm90IGltcGxlbWVudGVkJyk7IH07XG5cbiAgICBjb25zdCBpbm5lciA9IChyZXNwb25zZSQgOiBPYnNlcnZhYmxlPEFqYXhSZXNwb25zZT4pID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlJFxuICAgICAgICAuY2F0Y2g8QWpheFJlc3BvbnNlLCBBamF4UmVzcG9uc2U+KChlcnIpID0+IHtcbiAgICAgICAgICAgIGlmKGVyci5zdGF0dXMgPT09IDQyOSl7XG4gICAgICAgICAgICAgICAgY29uc3QgcmV0cnlBZnRlclZhbHVlID0gZXJyLnhoci5nZXRSZXNwb25zZUhlYWRlcignUmV0cnktQWZ0ZXInKTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXRyeUFmdGVyID0gTnVtYmVyKHJldHJ5QWZ0ZXJWYWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYoIWlzTmFOKHJldHJ5QWZ0ZXIpKXtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9ic2VydmFibGUudGltZXIocmV0cnlBZnRlciwgc2NoZWR1bGVyKVxuICAgICAgICAgICAgICAgICAgICAuZmxhdE1hcChfID0+IE9ic2VydmFibGUudGhyb3coZXJyLCBzY2hlZHVsZXIpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBPYnNlcnZhYmxlLnRocm93KGVyciwgc2NoZWR1bGVyKTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IG91dGVyID0gKHVybE9yUmVxdWVzdDogc3RyaW5nfCBBamF4UmVxdWVzdCkgPT4ge1xuICAgICAgICByZXR1cm4gaW5uZXIoc291cmNlKHVybE9yUmVxdWVzdCkpO1xuICAgIH07XG5cbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihvdXRlciwge1xuICAgICAgICBnZXQ6ICh1cmw6IHN0cmluZywgaGVhZGVycz86IE9iamVjdCk6IE9ic2VydmFibGU8QWpheFJlc3BvbnNlPiA9PiBub3RJbXBsZW1lbnRlZCgpLFxuICAgICAgICBwb3N0OiAodXJsOiBzdHJpbmcsIGJvZHk/OiBhbnksIGhlYWRlcnM/OiBPYmplY3QpOiBPYnNlcnZhYmxlPEFqYXhSZXNwb25zZT4gPT4gbm90SW1wbGVtZW50ZWQoKSxcbiAgICAgICAgcHV0OiAodXJsOiBzdHJpbmcsIGJvZHk/OiBhbnksIGhlYWRlcnM/OiBPYmplY3QpOiBPYnNlcnZhYmxlPEFqYXhSZXNwb25zZT4gPT4gbm90SW1wbGVtZW50ZWQoKSxcbiAgICAgICAgcGF0Y2g6ICh1cmw6IHN0cmluZywgYm9keT86IGFueSwgaGVhZGVycz86IE9iamVjdCk6IE9ic2VydmFibGU8QWpheFJlc3BvbnNlPiA9PiBub3RJbXBsZW1lbnRlZCgpLFxuICAgICAgICBkZWxldGU6ICh1cmw6IHN0cmluZywgaGVhZGVycz86IE9iamVjdCk6IE9ic2VydmFibGU8QWpheFJlc3BvbnNlPiA9PiBub3RJbXBsZW1lbnRlZCgpLFxuICAgICAgICBnZXRKU09OOiA8VD4odXJsOiBzdHJpbmcsIGhlYWRlcnM/OiBPYmplY3QpOiBPYnNlcnZhYmxlPFQ+ID0+IG5vdEltcGxlbWVudGVkKClcbiAgICB9KTtcbn1cblxuY29uc3QgbWFrZVNlcnZpY2VzID0gKHNlcnZpY2VzOiBQYXJ0aWFsPFNlcnZpY2VzPik6IFNlcnZpY2VzID0+IHtcbiAgICBjb25zdCBzY2hlZHVsZXIgPSBzZXJ2aWNlcy5zY2hlZHVsZXIgfHwgQXN5bmNTY2hlZHVsZXI7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc2NoZWR1bGVyLFxuICAgICAgICBhamF4OiB3cmFwQWpheFdpdGhSZXRyeShzZXJ2aWNlcy5hamF4IHx8IE9ic2VydmFibGUuYWpheCwgc2NoZWR1bGVyKSxcbiAgICAgICAgV2ViU29ja2V0OiBzZXJ2aWNlcy5XZWJTb2NrZXQgfHwgV2ViU29ja2V0LFxuICAgICAgICByYW5kb206IHNlcnZpY2VzLnJhbmRvbSB8fCBNYXRoLnJhbmRvbSxcbiAgICB9XG59XG5cbmNvbnN0IGxpZmV0aW1lUmVmcmVzaFRva2VuID0gMzAgKiA2MCAqIDEwMDA7XG5jb25zdCBpbnRlcnZhbFJlZnJlc2hUb2tlbiA9IGxpZmV0aW1lUmVmcmVzaFRva2VuIC8gMjtcblxuY29uc3QgUE9MTElOR19JTlRFUlZBTF9MT1dFUl9CT1VORDogbnVtYmVyID0gMjAwOyAvL21zXG5cbmNvbnN0IGVycm9yRXhwaXJlZFRva2VuID0gbmV3IEVycm9yKFwiZXhwaXJlZCB0b2tlblwiKTtcbmNvbnN0IGVycm9yQ29udmVyc2F0aW9uRW5kZWQgPSBuZXcgRXJyb3IoXCJjb252ZXJzYXRpb24gZW5kZWRcIik7XG5jb25zdCBlcnJvckZhaWxlZFRvQ29ubmVjdCA9IG5ldyBFcnJvcihcImZhaWxlZCB0byBjb25uZWN0XCIpO1xuXG5jb25zdCBrb25zb2xlID0ge1xuICAgIGxvZzogKG1lc3NhZ2U/OiBhbnksIC4uLiBvcHRpb25hbFBhcmFtczogYW55W10pID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmICh3aW5kb3cgYXMgYW55KVtcImJvdGNoYXREZWJ1Z1wiXSAmJiBtZXNzYWdlKVxuICAgICAgICAgICAgY29uc29sZS5sb2cobWVzc2FnZSwgLi4uIG9wdGlvbmFsUGFyYW1zKTtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUJvdENvbm5lY3Rpb24ge1xuICAgIGNvbm5lY3Rpb25TdGF0dXMkOiBCZWhhdmlvclN1YmplY3Q8Q29ubmVjdGlvblN0YXR1cz4sXG4gICAgYWN0aXZpdHkkOiBPYnNlcnZhYmxlPEFjdGl2aXR5PixcbiAgICBlbmQoKTogdm9pZCxcbiAgICByZWZlcmVuY2VHcmFtbWFySWQ/OiBzdHJpbmcsXG4gICAgcG9zdEFjdGl2aXR5KGFjdGl2aXR5OiBBY3Rpdml0eSk6IE9ic2VydmFibGU8c3RyaW5nPixcbiAgICBnZXRTZXNzaW9uSWQ/IDogKCkgPT4gT2JzZXJ2YWJsZTxzdHJpbmc+XG59XG5cbmV4cG9ydCBjbGFzcyBEaXJlY3RMaW5lIGltcGxlbWVudHMgSUJvdENvbm5lY3Rpb24ge1xuICAgIHB1YmxpYyBjb25uZWN0aW9uU3RhdHVzJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoQ29ubmVjdGlvblN0YXR1cy5VbmluaXRpYWxpemVkKTtcbiAgICBwdWJsaWMgYWN0aXZpdHkkOiBPYnNlcnZhYmxlPEFjdGl2aXR5PjtcblxuICAgIHByaXZhdGUgZG9tYWluID0gXCJodHRwczovL2RpcmVjdGxpbmUuYm90ZnJhbWV3b3JrLmNvbS92My9kaXJlY3RsaW5lXCI7XG4gICAgcHJpdmF0ZSB3ZWJTb2NrZXQ6IGJvb2xlYW47XG5cbiAgICBwcml2YXRlIGNvbnZlcnNhdGlvbklkOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBleHBpcmVkVG9rZW5FeGhhdXN0aW9uOiBGdW5jdGlvbjtcbiAgICBwcml2YXRlIHNlY3JldDogc3RyaW5nO1xuICAgIHByaXZhdGUgdG9rZW46IHN0cmluZztcbiAgICBwcml2YXRlIHdhdGVybWFyayA9ICcnO1xuICAgIHByaXZhdGUgc3RyZWFtVXJsOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfYm90QWdlbnQgPSAnJztcbiAgICBwcml2YXRlIHNlcnZpY2VzOiBTZXJ2aWNlcztcbiAgICBwcml2YXRlIF91c2VyQWdlbnQ6IHN0cmluZztcbiAgICBwdWJsaWMgcmVmZXJlbmNlR3JhbW1hcklkOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSB0aW1lb3V0ID0gMjAgKiAxMDAwO1xuICAgIHByaXZhdGUgcmV0cmllczogbnVtYmVyO1xuXG4gICAgcHJpdmF0ZSBsb2NhbGVPblN0YXJ0Q29udmVyc2F0aW9uOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSB1c2VySWRPblN0YXJ0Q29udmVyc2F0aW9uOiBzdHJpbmc7XG5cbiAgICBwcml2YXRlIHBvbGxpbmdJbnRlcnZhbDogbnVtYmVyID0gMTAwMDsgLy9tc1xuXG4gICAgcHJpdmF0ZSB0b2tlblJlZnJlc2hTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgICBwcml2YXRlIHN0cmVhbWluZzogYm9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM6IERpcmVjdExpbmVPcHRpb25zICYgUGFydGlhbDxTZXJ2aWNlcz4pIHtcbiAgICAgICAgdGhpcy5zZWNyZXQgPSBvcHRpb25zLnNlY3JldDtcbiAgICAgICAgdGhpcy50b2tlbiA9IG9wdGlvbnMuc2VjcmV0IHx8IG9wdGlvbnMudG9rZW47XG4gICAgICAgIHRoaXMud2ViU29ja2V0ID0gKG9wdGlvbnMud2ViU29ja2V0ID09PSB1bmRlZmluZWQgPyB0cnVlIDogb3B0aW9ucy53ZWJTb2NrZXQpICYmIHR5cGVvZiBXZWJTb2NrZXQgIT09ICd1bmRlZmluZWQnICYmIFdlYlNvY2tldCAhPT0gdW5kZWZpbmVkO1xuXG4gICAgICAgIGlmIChvcHRpb25zLnN0cmVhbWluZykge1xuICAgICAgICAgICAgdGhpcy5zdHJlYW1pbmcgPSBvcHRpb25zLnN0cmVhbWluZztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLmNvbnZlcnNhdGlvblN0YXJ0UHJvcGVydGllcyAmJiBvcHRpb25zLmNvbnZlcnNhdGlvblN0YXJ0UHJvcGVydGllcy5sb2NhbGUpIHtcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob3B0aW9ucy5jb252ZXJzYXRpb25TdGFydFByb3BlcnRpZXMubG9jYWxlKSA9PT0gJ1tvYmplY3QgU3RyaW5nXScpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvY2FsZU9uU3RhcnRDb252ZXJzYXRpb24gPSBvcHRpb25zLmNvbnZlcnNhdGlvblN0YXJ0UHJvcGVydGllcy5sb2NhbGU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignRGlyZWN0TGluZUpTOiBjb252ZXJzYXRpb25TdGFydFByb3BlcnRpZXMubG9jYWxlIHdhcyBpZ25vcmVkOiB0aGUgbG9jYWxlIG5hbWUgbWF5IGJlIGEgQkNQIDQ3IGxhbmd1YWdlIHRhZycpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuZG9tYWluKSB7XG4gICAgICAgICAgICB0aGlzLmRvbWFpbiA9IG9wdGlvbnMuZG9tYWluO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuY29udmVyc2F0aW9uSWQpIHtcbiAgICAgICAgICAgIHRoaXMuY29udmVyc2F0aW9uSWQgPSBvcHRpb25zLmNvbnZlcnNhdGlvbklkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMud2F0ZXJtYXJrKSB7XG4gICAgICAgICAgICB0aGlzLndhdGVybWFyayA9ICBvcHRpb25zLndhdGVybWFyaztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLnN0cmVhbVVybCkge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMudG9rZW4gJiYgb3B0aW9ucy5jb252ZXJzYXRpb25JZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RyZWFtVXJsID0gb3B0aW9ucy5zdHJlYW1Vcmw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignRGlyZWN0TGluZUpTOiBzdHJlYW1Vcmwgd2FzIGlnbm9yZWQ6IHlvdSBuZWVkIHRvIHByb3ZpZGUgYSB0b2tlbiBhbmQgYSBjb252ZXJzYXRpb25pZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMudGltZW91dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLnRpbWVvdXQgPSBvcHRpb25zLnRpbWVvdXQ7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJldHJpZXMgPSAobGlmZXRpbWVSZWZyZXNoVG9rZW4gLSBpbnRlcnZhbFJlZnJlc2hUb2tlbikgLyB0aGlzLnRpbWVvdXQ7XG5cbiAgICAgICAgdGhpcy5fYm90QWdlbnQgPSB0aGlzLmdldEJvdEFnZW50KG9wdGlvbnMuYm90QWdlbnQpO1xuXG4gICAgICAgIHRoaXMuc2VydmljZXMgPSBtYWtlU2VydmljZXMob3B0aW9ucyk7XG5cbiAgICAgICAgY29uc3QgcGFyc2VkUG9sbGluZ0ludGVydmFsID0gfn5vcHRpb25zLnBvbGxpbmdJbnRlcnZhbDtcblxuICAgICAgICBpZiAocGFyc2VkUG9sbGluZ0ludGVydmFsIDwgUE9MTElOR19JTlRFUlZBTF9MT1dFUl9CT1VORCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnBvbGxpbmdJbnRlcnZhbCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYERpcmVjdExpbmVKUzogcHJvdmlkZWQgcG9sbGluZ0ludGVydmFsICgkeyBvcHRpb25zLnBvbGxpbmdJbnRlcnZhbCB9KSBpcyB1bmRlciBsb3dlciBib3VuZCAoMjAwbXMpLCB1c2luZyBkZWZhdWx0IG9mIDEwMDBtc2ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wb2xsaW5nSW50ZXJ2YWwgPSBwYXJzZWRQb2xsaW5nSW50ZXJ2YWw7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmV4cGlyZWRUb2tlbkV4aGF1c3Rpb24gPSB0aGlzLnNldENvbm5lY3Rpb25TdGF0dXNGYWxsYmFjayhcbiAgICAgICAgICAgIENvbm5lY3Rpb25TdGF0dXMuRXhwaXJlZFRva2VuLFxuICAgICAgICAgICAgQ29ubmVjdGlvblN0YXR1cy5GYWlsZWRUb0Nvbm5lY3QsXG4gICAgICAgICAgICA1XG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5hY3Rpdml0eSQgPSAodGhpcy53ZWJTb2NrZXRcbiAgICAgICAgICAgID8gdGhpcy53ZWJTb2NrZXRBY3Rpdml0eSQoKVxuICAgICAgICAgICAgOiB0aGlzLnBvbGxpbmdHZXRBY3Rpdml0eSQoKVxuICAgICAgICApLnNoYXJlKCk7XG4gICAgfVxuXG4gICAgLy8gRXZlcnkgdGltZSB3ZSdyZSBhYm91dCB0byBtYWtlIGEgRGlyZWN0IExpbmUgUkVTVCBjYWxsLCB3ZSBjYWxsIHRoaXMgZmlyc3QgdG8gc2VlIGNoZWNrIHRoZSBjdXJyZW50IGNvbm5lY3Rpb24gc3RhdHVzLlxuICAgIC8vIEVpdGhlciB0aHJvd3MgYW4gZXJyb3IgKGluZGljYXRpbmcgYW4gZXJyb3Igc3RhdGUpIG9yIGVtaXRzIGEgbnVsbCwgaW5kaWNhdGluZyBhIChwcmVzdW1hYmx5KSBoZWFsdGh5IGNvbm5lY3Rpb25cbiAgICBwcml2YXRlIGNoZWNrQ29ubmVjdGlvbihvbmNlID0gZmFsc2UpIHtcbiAgICAgICAgbGV0IG9icyA9ICB0aGlzLmNvbm5lY3Rpb25TdGF0dXMkXG4gICAgICAgIC5mbGF0TWFwKGNvbm5lY3Rpb25TdGF0dXMgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbm5lY3Rpb25TdGF0dXMgPT09IENvbm5lY3Rpb25TdGF0dXMuVW5pbml0aWFsaXplZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvblN0YXR1cyQubmV4dChDb25uZWN0aW9uU3RhdHVzLkNvbm5lY3RpbmcpO1xuXG4gICAgICAgICAgICAgICAgLy9pZiB0b2tlbiBhbmQgc3RyZWFtVXJsIGFyZSBkZWZpbmVkIGl0IG1lYW5zIHJlY29ubmVjdCBoYXMgYWxyZWFkeSBiZWVuIGRvbmUuIFNraXBwaW5nIGl0LlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnRva2VuICYmIHRoaXMuc3RyZWFtVXJsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvblN0YXR1cyQubmV4dChDb25uZWN0aW9uU3RhdHVzLk9ubGluZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPYnNlcnZhYmxlLm9mKGNvbm5lY3Rpb25TdGF0dXMsIHRoaXMuc2VydmljZXMuc2NoZWR1bGVyKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdGFydENvbnZlcnNhdGlvbigpLmRvKGNvbnZlcnNhdGlvbiA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnZlcnNhdGlvbklkID0gY29udmVyc2F0aW9uLmNvbnZlcnNhdGlvbklkO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2tlbiA9IHRoaXMuc2VjcmV0IHx8IGNvbnZlcnNhdGlvbi50b2tlbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RyZWFtVXJsID0gY29udmVyc2F0aW9uLnN0cmVhbVVybDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVmZXJlbmNlR3JhbW1hcklkID0gY29udmVyc2F0aW9uLnJlZmVyZW5jZUdyYW1tYXJJZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5zZWNyZXQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWZyZXNoVG9rZW5Mb29wKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvblN0YXR1cyQubmV4dChDb25uZWN0aW9uU3RhdHVzLk9ubGluZSk7XG4gICAgICAgICAgICAgICAgICAgIH0sIGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvblN0YXR1cyQubmV4dChDb25uZWN0aW9uU3RhdHVzLkZhaWxlZFRvQ29ubmVjdCk7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoXyA9PiBjb25uZWN0aW9uU3RhdHVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gT2JzZXJ2YWJsZS5vZihjb25uZWN0aW9uU3RhdHVzLCB0aGlzLnNlcnZpY2VzLnNjaGVkdWxlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5maWx0ZXIoY29ubmVjdGlvblN0YXR1cyA9PiBjb25uZWN0aW9uU3RhdHVzICE9IENvbm5lY3Rpb25TdGF0dXMuVW5pbml0aWFsaXplZCAmJiBjb25uZWN0aW9uU3RhdHVzICE9IENvbm5lY3Rpb25TdGF0dXMuQ29ubmVjdGluZylcbiAgICAgICAgLmZsYXRNYXAoY29ubmVjdGlvblN0YXR1cyA9PiB7XG4gICAgICAgICAgICBzd2l0Y2ggKGNvbm5lY3Rpb25TdGF0dXMpIHtcbiAgICAgICAgICAgICAgICBjYXNlIENvbm5lY3Rpb25TdGF0dXMuRW5kZWQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPYnNlcnZhYmxlLnRocm93KGVycm9yQ29udmVyc2F0aW9uRW5kZWQsIHRoaXMuc2VydmljZXMuc2NoZWR1bGVyKTtcblxuICAgICAgICAgICAgICAgIGNhc2UgQ29ubmVjdGlvblN0YXR1cy5GYWlsZWRUb0Nvbm5lY3Q6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPYnNlcnZhYmxlLnRocm93KGVycm9yRmFpbGVkVG9Db25uZWN0LCB0aGlzLnNlcnZpY2VzLnNjaGVkdWxlcik7XG5cbiAgICAgICAgICAgICAgICBjYXNlIENvbm5lY3Rpb25TdGF0dXMuRXhwaXJlZFRva2VuOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JzZXJ2YWJsZS5vZihjb25uZWN0aW9uU3RhdHVzLCB0aGlzLnNlcnZpY2VzLnNjaGVkdWxlcik7XG5cbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JzZXJ2YWJsZS5vZihjb25uZWN0aW9uU3RhdHVzLCB0aGlzLnNlcnZpY2VzLnNjaGVkdWxlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG5cbiAgICAgICAgcmV0dXJuIG9uY2UgPyBvYnMudGFrZSgxKSA6IG9icztcbiAgICB9XG5cbiAgICBzZXRDb25uZWN0aW9uU3RhdHVzRmFsbGJhY2soXG4gICAgICAgIGNvbm5lY3Rpb25TdGF0dXNGcm9tOiBDb25uZWN0aW9uU3RhdHVzLFxuICAgICAgICBjb25uZWN0aW9uU3RhdHVzVG86IENvbm5lY3Rpb25TdGF0dXMsXG4gICAgICAgIG1heEF0dGVtcHRzID0gNVxuICAgICkge1xuICAgICAgICBtYXhBdHRlbXB0cy0tO1xuICAgICAgICBsZXQgYXR0ZW1wdHMgPSAwO1xuICAgICAgICBsZXQgY3VyclN0YXR1cyA9IG51bGw7XG4gICAgICAgIHJldHVybiAoc3RhdHVzOiBDb25uZWN0aW9uU3RhdHVzKTogQ29ubmVjdGlvblN0YXR1cyA9PiB7XG4gICAgICAgICAgICBpZiAoc3RhdHVzID09PSBjb25uZWN0aW9uU3RhdHVzRnJvbSAmJiBjdXJyU3RhdHVzID09PSBzdGF0dXMgJiYgYXR0ZW1wdHMgPj0gbWF4QXR0ZW1wdHMpIHtcbiAgICAgICAgICAgICAgICBhdHRlbXB0cyA9IDBcbiAgICAgICAgICAgICAgICByZXR1cm4gY29ubmVjdGlvblN0YXR1c1RvO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXR0ZW1wdHMrKztcbiAgICAgICAgICAgIGN1cnJTdGF0dXMgPSBzdGF0dXM7XG4gICAgICAgICAgICByZXR1cm4gc3RhdHVzO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgZXhwaXJlZFRva2VuKCkge1xuICAgICAgICBjb25zdCBjb25uZWN0aW9uU3RhdHVzID0gdGhpcy5jb25uZWN0aW9uU3RhdHVzJC5nZXRWYWx1ZSgpO1xuICAgICAgICBpZiAoY29ubmVjdGlvblN0YXR1cyAhPSBDb25uZWN0aW9uU3RhdHVzLkVuZGVkICYmIGNvbm5lY3Rpb25TdGF0dXMgIT0gQ29ubmVjdGlvblN0YXR1cy5GYWlsZWRUb0Nvbm5lY3QpXG4gICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb25TdGF0dXMkLm5leHQoQ29ubmVjdGlvblN0YXR1cy5FeHBpcmVkVG9rZW4pO1xuXG4gICAgICAgIGNvbnN0IHByb3RlY3RlZENvbm5lY3Rpb25TdGF0dXMgPSB0aGlzLmV4cGlyZWRUb2tlbkV4aGF1c3Rpb24odGhpcy5jb25uZWN0aW9uU3RhdHVzJC5nZXRWYWx1ZSgpKTtcbiAgICAgICAgdGhpcy5jb25uZWN0aW9uU3RhdHVzJC5uZXh0KHByb3RlY3RlZENvbm5lY3Rpb25TdGF0dXMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhcnRDb252ZXJzYXRpb24oKSB7XG4gICAgICAgIC8vaWYgY29udmVyc2F0aW9uaWQgaXMgc2V0IGhlcmUsIGl0IG1lYW5zIHdlIG5lZWQgdG8gY2FsbCB0aGUgcmVjb25uZWN0IGFwaSwgZWxzZSBpdCBpcyBhIG5ldyBjb252ZXJzYXRpb25cbiAgICAgICAgY29uc3QgdXJsID0gdGhpcy5jb252ZXJzYXRpb25JZFxuICAgICAgICAgICAgPyBgJHt0aGlzLmRvbWFpbn0vY29udmVyc2F0aW9ucy8ke3RoaXMuY29udmVyc2F0aW9uSWR9P3dhdGVybWFyaz0ke3RoaXMud2F0ZXJtYXJrfWBcbiAgICAgICAgICAgIDogYCR7dGhpcy5kb21haW59L2NvbnZlcnNhdGlvbnNgO1xuICAgICAgICBjb25zdCBtZXRob2QgPSB0aGlzLmNvbnZlcnNhdGlvbklkID8gXCJHRVRcIiA6IFwiUE9TVFwiO1xuICAgICAgICBjb25zdCBib2R5ID0gdGhpcy5jb252ZXJzYXRpb25JZFxuICAgICAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgIHVzZXI6IHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IHRoaXMudXNlcklkT25TdGFydENvbnZlcnNhdGlvblxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbG9jYWxlOiB0aGlzLmxvY2FsZU9uU3RhcnRDb252ZXJzYXRpb25cbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZXMuYWpheCh7XG4gICAgICAgICAgICBtZXRob2QsXG4gICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICBib2R5LFxuICAgICAgICAgICAgdGltZW91dDogdGhpcy50aW1lb3V0LFxuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgIFwiQWNjZXB0XCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgICAgICAgIC4uLnRoaXMuY29tbW9uSGVhZGVycygpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4vLyAgICAgIC5kbyhhamF4UmVzcG9uc2UgPT4ga29uc29sZS5sb2coXCJjb252ZXJzYXRpb24gYWpheFJlc3BvbnNlXCIsIGFqYXhSZXNwb25zZS5yZXNwb25zZSkpXG4gICAgICAgIC5tYXAoYWpheFJlc3BvbnNlID0+IGFqYXhSZXNwb25zZS5yZXNwb25zZSBhcyBDb252ZXJzYXRpb24pXG4gICAgICAgIC5yZXRyeVdoZW4oZXJyb3IkID0+XG4gICAgICAgICAgICAvLyBmb3Igbm93IHdlIGRlZW0gNHh4IGFuZCA1eHggZXJyb3JzIGFzIHVucmVjb3ZlcmFibGVcbiAgICAgICAgICAgIC8vIGZvciBldmVyeXRoaW5nIGVsc2UgKHRpbWVvdXRzKSwgcmV0cnkgZm9yIGEgd2hpbGVcbiAgICAgICAgICAgIGVycm9yJC5tZXJnZU1hcCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Iuc3RhdHVzID49IDQwMCAmJiBlcnJvci5zdGF0dXMgPCA2MDBcbiAgICAgICAgICAgICAgICA/IE9ic2VydmFibGUudGhyb3coZXJyb3IsIHRoaXMuc2VydmljZXMuc2NoZWR1bGVyKVxuICAgICAgICAgICAgICAgIDogT2JzZXJ2YWJsZS5vZihlcnJvciwgdGhpcy5zZXJ2aWNlcy5zY2hlZHVsZXIpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmRlbGF5KHRoaXMudGltZW91dCwgdGhpcy5zZXJ2aWNlcy5zY2hlZHVsZXIpXG4gICAgICAgICAgICAudGFrZSh0aGlzLnJldHJpZXMpXG4gICAgICAgIClcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlZnJlc2hUb2tlbkxvb3AoKSB7XG4gICAgICAgIHRoaXMudG9rZW5SZWZyZXNoU3Vic2NyaXB0aW9uID0gT2JzZXJ2YWJsZS5pbnRlcnZhbChpbnRlcnZhbFJlZnJlc2hUb2tlbiwgdGhpcy5zZXJ2aWNlcy5zY2hlZHVsZXIpXG4gICAgICAgIC5mbGF0TWFwKF8gPT4gdGhpcy5yZWZyZXNoVG9rZW4oKSlcbiAgICAgICAgLnN1YnNjcmliZSh0b2tlbiA9PiB7XG4gICAgICAgICAgICBrb25zb2xlLmxvZyhcInJlZnJlc2hpbmcgdG9rZW5cIiwgdG9rZW4sIFwiYXRcIiwgbmV3IERhdGUoKSk7XG4gICAgICAgICAgICB0aGlzLnRva2VuID0gdG9rZW47XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVmcmVzaFRva2VuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGVja0Nvbm5lY3Rpb24odHJ1ZSlcbiAgICAgICAgLmZsYXRNYXAoXyA9PlxuICAgICAgICAgICAgdGhpcy5zZXJ2aWNlcy5hamF4KHtcbiAgICAgICAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICAgICAgICAgIHVybDogYCR7dGhpcy5kb21haW59L3Rva2Vucy9yZWZyZXNoYCxcbiAgICAgICAgICAgICAgICB0aW1lb3V0OiB0aGlzLnRpbWVvdXQsXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAuLi50aGlzLmNvbW1vbkhlYWRlcnMoKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAubWFwKGFqYXhSZXNwb25zZSA9PiBhamF4UmVzcG9uc2UucmVzcG9uc2UudG9rZW4gYXMgc3RyaW5nKVxuICAgICAgICAgICAgLnJldHJ5V2hlbihlcnJvciQgPT4gZXJyb3IkXG4gICAgICAgICAgICAgICAgLm1lcmdlTWFwKGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PT0gNDAzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGUgdG9rZW4gaXMgZXhwaXJlZCB0aGVyZSdzIG5vIHJlYXNvbiB0byBrZWVwIHRyeWluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5leHBpcmVkVG9rZW4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBPYnNlcnZhYmxlLnRocm93KGVycm9yLCB0aGlzLnNlcnZpY2VzLnNjaGVkdWxlcik7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZXJyb3Iuc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBib3QgaXMgZ29uZSwgd2Ugc2hvdWxkIHN0b3AgcmV0cnlpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBPYnNlcnZhYmxlLnRocm93KGVycm9yLCB0aGlzLnNlcnZpY2VzLnNjaGVkdWxlcik7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JzZXJ2YWJsZS5vZihlcnJvciwgdGhpcy5zZXJ2aWNlcy5zY2hlZHVsZXIpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmRlbGF5KHRoaXMudGltZW91dCwgdGhpcy5zZXJ2aWNlcy5zY2hlZHVsZXIpXG4gICAgICAgICAgICAgICAgLnRha2UodGhpcy5yZXRyaWVzKVxuICAgICAgICAgICAgKVxuICAgICAgICApXG4gICAgfVxuXG4gICAgcHVibGljIHJlY29ubmVjdChjb252ZXJzYXRpb246IENvbnZlcnNhdGlvbikge1xuICAgICAgICB0aGlzLnRva2VuID0gY29udmVyc2F0aW9uLnRva2VuO1xuICAgICAgICB0aGlzLnN0cmVhbVVybCA9IGNvbnZlcnNhdGlvbi5zdHJlYW1Vcmw7XG4gICAgICAgIGlmICh0aGlzLmNvbm5lY3Rpb25TdGF0dXMkLmdldFZhbHVlKCkgPT09IENvbm5lY3Rpb25TdGF0dXMuRXhwaXJlZFRva2VuKVxuICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9uU3RhdHVzJC5uZXh0KENvbm5lY3Rpb25TdGF0dXMuT25saW5lKTtcbiAgICB9XG5cbiAgICBlbmQoKSB7XG4gICAgICAgIGlmICh0aGlzLnRva2VuUmVmcmVzaFN1YnNjcmlwdGlvbilcbiAgICAgICAgICAgIHRoaXMudG9rZW5SZWZyZXNoU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb25TdGF0dXMkLm5leHQoQ29ubmVjdGlvblN0YXR1cy5FbmRlZCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGlmIChlID09PSBlcnJvckNvbnZlcnNhdGlvbkVuZGVkKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHRocm93KGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0U2Vzc2lvbklkKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgICAgIC8vIElmIHdlJ3JlIG5vdCBjb25uZWN0ZWQgdG8gdGhlIGJvdCwgZ2V0IGNvbm5lY3RlZFxuICAgICAgICAvLyBXaWxsIHRocm93IGFuIGVycm9yIGlmIHdlIGFyZSBub3QgY29ubmVjdGVkXG4gICAgICAgIGtvbnNvbGUubG9nKFwiZ2V0U2Vzc2lvbklkXCIpO1xuICAgICAgICByZXR1cm4gdGhpcy5jaGVja0Nvbm5lY3Rpb24odHJ1ZSlcbiAgICAgICAgICAgIC5mbGF0TWFwKF8gPT5cbiAgICAgICAgICAgICAgICB0aGlzLnNlcnZpY2VzLmFqYXgoe1xuICAgICAgICAgICAgICAgICAgICBtZXRob2Q6IFwiR0VUXCIsXG4gICAgICAgICAgICAgICAgICAgIHVybDogYCR7dGhpcy5kb21haW59L3Nlc3Npb24vZ2V0c2Vzc2lvbmlkYCxcbiAgICAgICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB0aW1lb3V0OiB0aGlzLnRpbWVvdXQsXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5jb21tb25IZWFkZXJzKClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLm1hcChhamF4UmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYWpheFJlc3BvbnNlICYmIGFqYXhSZXNwb25zZS5yZXNwb25zZSAmJiBhamF4UmVzcG9uc2UucmVzcG9uc2Uuc2Vzc2lvbklkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBrb25zb2xlLmxvZyhcImdldFNlc3Npb25JZCByZXNwb25zZTogXCIgKyBhamF4UmVzcG9uc2UucmVzcG9uc2Uuc2Vzc2lvbklkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhamF4UmVzcG9uc2UucmVzcG9uc2Uuc2Vzc2lvbklkIGFzIHN0cmluZztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgICBrb25zb2xlLmxvZyhcImdldFNlc3Npb25JZCBlcnJvcjogXCIgKyBlcnJvci5zdGF0dXMpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JzZXJ2YWJsZS5vZignJywgdGhpcy5zZXJ2aWNlcy5zY2hlZHVsZXIpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuY2F0Y2goZXJyb3IgPT4gdGhpcy5jYXRjaEV4cGlyZWRUb2tlbihlcnJvcikpO1xuICAgIH1cblxuICAgIHBvc3RBY3Rpdml0eShhY3Rpdml0eTogQWN0aXZpdHkpIHtcbiAgICAgICAgLy8gSWYgc3RyZWFtaW5nIGlzIGVuYWJsZWQgZm9yIHRoaXMgRGlyZWN0TGluZSBpbnN0YW5jZSwgYWx3YXlzIHNldCBkZWxpdmVyeU1vZGUgdG8gJ3N0cmVhbSdcbiAgICAgICAgLy8gZGVmYXVsdCB3b3VsZCBiZSAnbm9ybWFsJyBhbmQgbm90IHBhc3NpbmcgYW55dGhpbmcgbWVhbmluZyAnbm9ybWFsJyBhcyB3ZWxsIG9uIEFCUyBzaWRlXG4gICAgICAgIGlmICh0aGlzLnN0cmVhbWluZykge1xuICAgICAgICAgICAgYWN0aXZpdHkuZGVsaXZlcnlNb2RlID0gJ3N0cmVhbSc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiB1c2VyIGlkIGlzIHNldCwgY2hlY2sgaWYgaXQgbWF0Y2ggYWN0aXZpdHkuZnJvbS5pZCBhbmQgYWx3YXlzIG92ZXJyaWRlIGl0IGluIGFjdGl2aXR5XG4gICAgICAgIGlmICh0aGlzLnVzZXJJZE9uU3RhcnRDb252ZXJzYXRpb24gJiYgYWN0aXZpdHkuZnJvbSAmJiBhY3Rpdml0eS5mcm9tLmlkICE9PSB0aGlzLnVzZXJJZE9uU3RhcnRDb252ZXJzYXRpb24pIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignRGlyZWN0TGluZUpTOiBBY3Rpdml0eS5mcm9tLmlkIGRvZXMgbm90IG1hdGNoIHdpdGggdXNlciBpZCwgaWdub3JpbmcgYWN0aXZpdHkuZnJvbS5pZCcpO1xuICAgICAgICAgICAgYWN0aXZpdHkuZnJvbS5pZCA9IHRoaXMudXNlcklkT25TdGFydENvbnZlcnNhdGlvbjtcbiAgICAgICAgfVxuICAgICAgICAvLyBVc2UgcG9zdE1lc3NhZ2VXaXRoQXR0YWNobWVudHMgZm9yIG1lc3NhZ2VzIHdpdGggYXR0YWNobWVudHMgdGhhdCBhcmUgbG9jYWwgZmlsZXMgKGUuZy4gYW4gaW1hZ2UgdG8gdXBsb2FkKVxuICAgICAgICAvLyBUZWNobmljYWxseSB3ZSBjb3VsZCB1c2UgaXQgZm9yICphbGwqIGFjdGl2aXRpZXMsIGJ1dCBwb3N0QWN0aXZpdHkgaXMgbXVjaCBsaWdodGVyIHdlaWdodFxuICAgICAgICAvLyBTbywgc2luY2UgV2ViQ2hhdCBpcyBwYXJ0aWFsbHkgYSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gb2YgRGlyZWN0IExpbmUsIHdlIGltcGxlbWVudCBib3RoLlxuICAgICAgICBpZiAoYWN0aXZpdHkudHlwZSA9PT0gXCJtZXNzYWdlXCIgJiYgYWN0aXZpdHkuYXR0YWNobWVudHMgJiYgYWN0aXZpdHkuYXR0YWNobWVudHMubGVuZ3RoID4gMClcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvc3RNZXNzYWdlV2l0aEF0dGFjaG1lbnRzKGFjdGl2aXR5KTtcblxuICAgICAgICAvLyBJZiB3ZSdyZSBub3QgY29ubmVjdGVkIHRvIHRoZSBib3QsIGdldCBjb25uZWN0ZWRcbiAgICAgICAgLy8gV2lsbCB0aHJvdyBhbiBlcnJvciBpZiB3ZSBhcmUgbm90IGNvbm5lY3RlZFxuICAgICAgICBrb25zb2xlLmxvZyhcInBvc3RBY3Rpdml0eVwiLCBhY3Rpdml0eSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNoZWNrQ29ubmVjdGlvbih0cnVlKVxuICAgICAgICAuZmxhdE1hcChfID0+XG4gICAgICAgICAgICB0aGlzLnNlcnZpY2VzLmFqYXgoe1xuICAgICAgICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgICAgICAgICAgdXJsOiBgJHt0aGlzLmRvbWFpbn0vY29udmVyc2F0aW9ucy8ke3RoaXMuY29udmVyc2F0aW9uSWR9L2FjdGl2aXRpZXNgLFxuICAgICAgICAgICAgICAgIGJvZHk6IGFjdGl2aXR5LFxuICAgICAgICAgICAgICAgIHRpbWVvdXQ6IHRoaXMudGltZW91dCxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgICAgICAgICAgICAuLi50aGlzLmNvbW1vbkhlYWRlcnMoKVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLm1hcChhamF4UmVzcG9uc2UgPT4gYWpheFJlc3BvbnNlLnJlc3BvbnNlLmlkIGFzIHN0cmluZylcbiAgICAgICAgICAgIC5jYXRjaChlcnJvciA9PiB0aGlzLmNhdGNoUG9zdEVycm9yKGVycm9yKSlcbiAgICAgICAgKVxuICAgICAgICAuY2F0Y2goZXJyb3IgPT4gdGhpcy5jYXRjaEV4cGlyZWRUb2tlbihlcnJvcikpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcG9zdE1lc3NhZ2VXaXRoQXR0YWNobWVudHMobWVzc2FnZTogTWVzc2FnZSkge1xuICAgICAgICBjb25zdCB7IGF0dGFjaG1lbnRzIH0gPSBtZXNzYWdlO1xuICAgICAgICAvLyBXZSBjbGVhbiB0aGUgYXR0YWNobWVudHMgYnV0IG1ha2luZyBzdXJlIGV2ZXJ5IGF0dGFjaG1lbnQgaGFzIHVuaXF1ZSBuYW1lLlxuICAgICAgICAvLyBJZiB0aGUgZmlsZSBkbyBub3QgaGF2ZSBhIG5hbWUsIENocm9tZSB3aWxsIGFzc2lnbiBcImJsb2JcIiB3aGVuIGl0IGlzIGFwcGVuZGVkIHRvIEZvcm1EYXRhLlxuICAgICAgICBjb25zdCBhdHRhY2htZW50TmFtZXM6IHN0cmluZ1tdID0gZGVkdXBlRmlsZW5hbWVzKGF0dGFjaG1lbnRzLm1hcCgobWVkaWE6IE1lZGlhKSA9PiBtZWRpYS5uYW1lIHx8ICdibG9iJykpO1xuICAgICAgICBjb25zdCBjbGVhbnNlZEF0dGFjaG1lbnRzID0gYXR0YWNobWVudHMubWFwKChhdHRhY2htZW50OiBNZWRpYSwgaW5kZXg6IG51bWJlcikgPT4gKHtcbiAgICAgICAgICAgIC4uLmF0dGFjaG1lbnQsXG4gICAgICAgICAgICBuYW1lOiBhdHRhY2htZW50TmFtZXNbaW5kZXhdXG4gICAgICAgIH0pKTtcbiAgICAgICAgbGV0IGZvcm1EYXRhOiBGb3JtRGF0YTtcblxuICAgICAgICAvLyBJZiB3ZSdyZSBub3QgY29ubmVjdGVkIHRvIHRoZSBib3QsIGdldCBjb25uZWN0ZWRcbiAgICAgICAgLy8gV2lsbCB0aHJvdyBhbiBlcnJvciBpZiB3ZSBhcmUgbm90IGNvbm5lY3RlZFxuICAgICAgICByZXR1cm4gdGhpcy5jaGVja0Nvbm5lY3Rpb24odHJ1ZSlcbiAgICAgICAgLmZsYXRNYXAoXyA9PiB7XG4gICAgICAgICAgICAvLyBUbyBzZW5kIHRoaXMgbWVzc2FnZSB0byBEaXJlY3RMaW5lIHdlIG5lZWQgdG8gZGVjb25zdHJ1Y3QgaXQgaW50byBhIFwidGVtcGxhdGVcIiBhY3Rpdml0eVxuICAgICAgICAgICAgLy8gYW5kIG9uZSBibG9iIGZvciBlYWNoIGF0dGFjaG1lbnQuXG4gICAgICAgICAgICBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdhY3Rpdml0eScsIG5ldyBCbG9iKFtKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgLi4ubWVzc2FnZSxcbiAgICAgICAgICAgICAgICAvLyBSZW1vdmluZyBjb250ZW50VXJsIGZyb20gYXR0YWNobWVudCwgd2Ugd2lsbCBzZW5kIGl0IHZpYSBtdWx0aXBhcnRcbiAgICAgICAgICAgICAgICBhdHRhY2htZW50czogY2xlYW5zZWRBdHRhY2htZW50cy5tYXAoKHsgY29udGVudFVybDogc3RyaW5nLCAuLi5vdGhlcnMgfSkgPT4gKHsgLi4ub3RoZXJzIH0pKVxuICAgICAgICAgICAgfSldLCB7IHR5cGU6ICdhcHBsaWNhdGlvbi92bmQubWljcm9zb2Z0LmFjdGl2aXR5JyB9KSk7XG5cbiAgICAgICAgICAgIHJldHVybiBPYnNlcnZhYmxlLmZyb20oY2xlYW5zZWRBdHRhY2htZW50cywgdGhpcy5zZXJ2aWNlcy5zY2hlZHVsZXIpXG4gICAgICAgICAgICAuZmxhdE1hcCgobWVkaWE6IE1lZGlhKSA9PlxuICAgICAgICAgICAgICAgIHRoaXMuc2VydmljZXMuYWpheCh7XG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBtZWRpYS5jb250ZW50VXJsLFxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6ICdhcnJheWJ1ZmZlcidcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5kbyhhamF4UmVzcG9uc2UgPT5cbiAgICAgICAgICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdmaWxlJywgbmV3IEJsb2IoW2FqYXhSZXNwb25zZS5yZXNwb25zZV0sIHsgdHlwZTogbWVkaWEuY29udGVudFR5cGUgfSksIG1lZGlhLm5hbWUpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmNvdW50KClcbiAgICAgICAgfSlcbiAgICAgICAgLmZsYXRNYXAoXyA9PlxuICAgICAgICAgICAgdGhpcy5zZXJ2aWNlcy5hamF4KHtcbiAgICAgICAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICAgICAgICAgIHVybDogYCR7dGhpcy5kb21haW59L2NvbnZlcnNhdGlvbnMvJHt0aGlzLmNvbnZlcnNhdGlvbklkfS91cGxvYWQ/dXNlcklkPSR7bWVzc2FnZS5mcm9tLmlkfWAsXG4gICAgICAgICAgICAgICAgYm9keTogZm9ybURhdGEsXG4gICAgICAgICAgICAgICAgdGltZW91dDogdGhpcy50aW1lb3V0LFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5jb21tb25IZWFkZXJzKClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLm1hcChhamF4UmVzcG9uc2UgPT4gYWpheFJlc3BvbnNlLnJlc3BvbnNlLmlkIGFzIHN0cmluZylcbiAgICAgICAgICAgIC5jYXRjaChlcnJvciA9PiB0aGlzLmNhdGNoUG9zdEVycm9yKGVycm9yKSlcbiAgICAgICAgKVxuICAgICAgICAuY2F0Y2goZXJyb3IgPT4gdGhpcy5jYXRjaFBvc3RFcnJvcihlcnJvcikpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2F0Y2hQb3N0RXJyb3IoZXJyb3I6IGFueSkge1xuICAgICAgICBpZiAoZXJyb3Iuc3RhdHVzID09PSA0MDMpXG4gICAgICAgICAgICAvLyB0b2tlbiBoYXMgZXhwaXJlZCAod2lsbCBmYWxsIHRocm91Z2ggdG8gcmV0dXJuIFwicmV0cnlcIilcbiAgICAgICAgICAgIHRoaXMuZXhwaXJlZFRva2VuKCk7XG4gICAgICAgIGVsc2UgaWYgKGVycm9yLnN0YXR1cyA+PSA0MDAgJiYgZXJyb3Iuc3RhdHVzIDwgNTAwKVxuICAgICAgICAgICAgLy8gbW9yZSB1bnJlY292ZXJhYmxlIGVycm9yc1xuICAgICAgICAgICAgcmV0dXJuIE9ic2VydmFibGUudGhyb3coZXJyb3IsIHRoaXMuc2VydmljZXMuc2NoZWR1bGVyKTtcbiAgICAgICAgcmV0dXJuIE9ic2VydmFibGUub2YoXCJyZXRyeVwiLCB0aGlzLnNlcnZpY2VzLnNjaGVkdWxlcik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYXRjaEV4cGlyZWRUb2tlbihlcnJvcjogYW55KSB7XG4gICAgICAgIHJldHVybiBlcnJvciA9PT0gZXJyb3JFeHBpcmVkVG9rZW5cbiAgICAgICAgPyBPYnNlcnZhYmxlLm9mKFwicmV0cnlcIiwgdGhpcy5zZXJ2aWNlcy5zY2hlZHVsZXIpXG4gICAgICAgIDogT2JzZXJ2YWJsZS50aHJvdyhlcnJvciwgdGhpcy5zZXJ2aWNlcy5zY2hlZHVsZXIpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcG9sbGluZ0dldEFjdGl2aXR5JCgpIHtcbiAgICAgICAgY29uc3QgcG9sbGVyJDogT2JzZXJ2YWJsZTxBamF4UmVzcG9uc2U+ID0gT2JzZXJ2YWJsZS5jcmVhdGUoKHN1YnNjcmliZXI6IFN1YnNjcmliZXI8YW55PikgPT4ge1xuICAgICAgICAgICAgLy8gQSBCZWhhdmlvclN1YmplY3QgdG8gdHJpZ2dlciBwb2xsaW5nLiBTaW5jZSBpdCBpcyBhIEJlaGF2aW9yU3ViamVjdFxuICAgICAgICAgICAgLy8gdGhlIGZpcnN0IGV2ZW50IGlzIHByb2R1Y2VkIGltbWVkaWF0ZWx5LlxuICAgICAgICAgICAgY29uc3QgdHJpZ2dlciQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4oe30pO1xuXG4gICAgICAgICAgICAvLyBUT0RPOiByZW1vdmUgRGF0ZS5ub3csIHVzZSByZWFjdGl2ZSBpbnRlcnZhbCB0byBzcGFjZSBvdXQgZXZlcnkgcmVxdWVzdFxuXG4gICAgICAgICAgICB0cmlnZ2VyJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbm5lY3Rpb25TdGF0dXMkLmdldFZhbHVlKCkgPT09IENvbm5lY3Rpb25TdGF0dXMuT25saW5lKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0VGltZXN0YW1wID0gRGF0ZS5ub3coKTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlcnZpY2VzLmFqYXgoe1xuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjY2VwdDogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuY29tbW9uSGVhZGVycygpXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogYCR7IHRoaXMuZG9tYWluIH0vY29udmVyc2F0aW9ucy8keyB0aGlzLmNvbnZlcnNhdGlvbklkIH0vYWN0aXZpdGllcz93YXRlcm1hcms9JHsgdGhpcy53YXRlcm1hcmsgfWAsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0OiB0aGlzLnRpbWVvdXRcbiAgICAgICAgICAgICAgICAgICAgfSkuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAgICAgICAgICAgKHJlc3VsdDogQWpheFJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0cmlnZ2VyJC5uZXh0KG51bGwpLCBNYXRoLm1heCgwLCB0aGlzLnBvbGxpbmdJbnRlcnZhbCAtIERhdGUubm93KCkgKyBzdGFydFRpbWVzdGFtcCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChlcnJvci5zdGF0dXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0MDM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb25TdGF0dXMkLm5leHQoQ29ubmVjdGlvblN0YXR1cy5FeHBpcmVkVG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0cmlnZ2VyJC5uZXh0KG51bGwpLCB0aGlzLnBvbGxpbmdJbnRlcnZhbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQwNDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvblN0YXR1cyQubmV4dChDb25uZWN0aW9uU3RhdHVzLkVuZGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwcm9wYWdhdGUgdGhlIGVycm9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tDb25uZWN0aW9uKClcbiAgICAgICAgLmZsYXRNYXAoXyA9PiBwb2xsZXIkXG4gICAgICAgICAgICAuY2F0Y2goKCkgPT4gT2JzZXJ2YWJsZS5lbXB0eTxBamF4UmVzcG9uc2U+KCkpXG4gICAgICAgICAgICAubWFwKGFqYXhSZXNwb25zZSA9PiBhamF4UmVzcG9uc2UucmVzcG9uc2UgYXMgQWN0aXZpdHlHcm91cClcbiAgICAgICAgICAgIC5mbGF0TWFwKGFjdGl2aXR5R3JvdXAgPT4gdGhpcy5vYnNlcnZhYmxlRnJvbUFjdGl2aXR5R3JvdXAoYWN0aXZpdHlHcm91cCkpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9ic2VydmFibGVGcm9tQWN0aXZpdHlHcm91cChhY3Rpdml0eUdyb3VwOiBBY3Rpdml0eUdyb3VwKSB7XG4gICAgICAgIGlmIChhY3Rpdml0eUdyb3VwLndhdGVybWFyaylcbiAgICAgICAgICAgIHRoaXMud2F0ZXJtYXJrID0gYWN0aXZpdHlHcm91cC53YXRlcm1hcms7XG4gICAgICAgIHJldHVybiBPYnNlcnZhYmxlLmZyb20oYWN0aXZpdHlHcm91cC5hY3Rpdml0aWVzLCB0aGlzLnNlcnZpY2VzLnNjaGVkdWxlcik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB3ZWJTb2NrZXRBY3Rpdml0eSQoKTogT2JzZXJ2YWJsZTxBY3Rpdml0eT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGVja0Nvbm5lY3Rpb24oKVxuICAgICAgICAuZmxhdE1hcChfID0+XG4gICAgICAgICAgICB0aGlzLm9ic2VydmFibGVXZWJTb2NrZXQ8QWN0aXZpdHlHcm91cD4oKVxuICAgICAgICAgICAgLy8gV2ViU29ja2V0cyBjYW4gYmUgY2xvc2VkIGJ5IHRoZSBzZXJ2ZXIgb3IgdGhlIGJyb3dzZXIuIEluIHRoZSBmb3JtZXIgY2FzZSB3ZSBuZWVkIHRvXG4gICAgICAgICAgICAvLyByZXRyaWV2ZSBhIG5ldyBzdHJlYW1VcmwuIEluIHRoZSBsYXR0ZXIgY2FzZSB3ZSBjb3VsZCBmaXJzdCByZXRyeSB3aXRoIHRoZSBjdXJyZW50IHN0cmVhbVVybCxcbiAgICAgICAgICAgIC8vIGJ1dCBpdCdzIHNpbXBsZXIganVzdCB0byBhbHdheXMgZmV0Y2ggYSBuZXcgb25lLlxuICAgICAgICAgICAgLnJldHJ5V2hlbihlcnJvciQgPT4gZXJyb3IkLmRlbGF5KHRoaXMuZ2V0UmV0cnlEZWxheSgpLCB0aGlzLnNlcnZpY2VzLnNjaGVkdWxlcikubWVyZ2VNYXAoZXJyb3IgPT4gdGhpcy5yZWNvbm5lY3RUb0NvbnZlcnNhdGlvbigpKSlcbiAgICAgICAgKVxuICAgICAgICAuZmxhdE1hcChhY3Rpdml0eUdyb3VwID0+IHRoaXMub2JzZXJ2YWJsZUZyb21BY3Rpdml0eUdyb3VwKGFjdGl2aXR5R3JvdXApKVxuICAgIH1cblxuICAgIC8vIFJldHVybnMgdGhlIGRlbGF5IGR1cmF0aW9uIGluIG1pbGxpc2Vjb25kc1xuICAgIHByaXZhdGUgZ2V0UmV0cnlEZWxheSgpIHtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoMzAwMCArIHRoaXMuc2VydmljZXMucmFuZG9tKCkgKiAxMjAwMCk7XG4gICAgfVxuXG4gICAgLy8gT3JpZ2luYWxseSB3ZSB1c2VkIE9ic2VydmFibGUud2ViU29ja2V0LCBidXQgaXQncyBmYWlybHkgb3BpbmlvbmF0ZWQgYW5kIEkgZW5kZWQgdXAgd3JpdGluZ1xuICAgIC8vIGEgbG90IG9mIGNvZGUgdG8gd29yayBhcm91bmQgdGhlaXIgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gU2luY2UgV2ViQ2hhdCBpcyBtZWFudCB0byBiZSBhIHJlZmVyZW5jZVxuICAgIC8vIGltcGxlbWVudGF0aW9uLCBJIGRlY2lkZWQgcm9sbCB0aGUgYmVsb3csIHdoZXJlIHRoZSBsb2dpYyBpcyBtb3JlIHB1cnBvc2VmdWwuIC0gQGJpbGxiYVxuICAgIHByaXZhdGUgb2JzZXJ2YWJsZVdlYlNvY2tldDxUPigpIHtcbiAgICAgICAgcmV0dXJuIE9ic2VydmFibGUuY3JlYXRlKChzdWJzY3JpYmVyOiBTdWJzY3JpYmVyPFQ+KSA9PiB7XG4gICAgICAgICAgICBrb25zb2xlLmxvZyhcImNyZWF0aW5nIFdlYlNvY2tldFwiLCB0aGlzLnN0cmVhbVVybCk7XG4gICAgICAgICAgICBjb25zdCB3cyA9IG5ldyB0aGlzLnNlcnZpY2VzLldlYlNvY2tldCh0aGlzLnN0cmVhbVVybCk7XG4gICAgICAgICAgICBsZXQgc3ViOiBTdWJzY3JpcHRpb247XG4gICAgICAgICAgICBsZXQgY2xvc2VkOiBib29sZWFuO1xuXG4gICAgICAgICAgICB3cy5vbm9wZW4gPSBvcGVuID0+IHtcbiAgICAgICAgICAgICAgICBrb25zb2xlLmxvZyhcIldlYlNvY2tldCBvcGVuXCIsIG9wZW4pO1xuICAgICAgICAgICAgICAgIC8vIENocm9tZSBpcyBwcmV0dHkgYmFkIGF0IG5vdGljaW5nIHdoZW4gYSBXZWJTb2NrZXQgY29ubmVjdGlvbiBpcyBicm9rZW4uXG4gICAgICAgICAgICAgICAgLy8gSWYgd2UgcGVyaW9kaWNhbGx5IHBpbmcgdGhlIHNlcnZlciB3aXRoIGVtcHR5IG1lc3NhZ2VzLCBpdCBoZWxwcyBDaHJvbWVcbiAgICAgICAgICAgICAgICAvLyByZWFsaXplIHdoZW4gY29ubmVjdGlvbiBicmVha3MsIGFuZCBjbG9zZSB0aGUgc29ja2V0LiBXZSB0aGVuIHRocm93IGFuXG4gICAgICAgICAgICAgICAgLy8gZXJyb3IsIGFuZCB0aGF0IGdpdmUgdXMgdGhlIG9wcG9ydHVuaXR5IHRvIGF0dGVtcHQgdG8gcmVjb25uZWN0LlxuICAgICAgICAgICAgICAgIHN1YiA9IE9ic2VydmFibGUuaW50ZXJ2YWwodGhpcy50aW1lb3V0LCB0aGlzLnNlcnZpY2VzLnNjaGVkdWxlcikuc3Vic2NyaWJlKF8gPT4ge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgd3Muc2VuZChcIlwiKVxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtvbnNvbGUubG9nKFwiUGluZyBlcnJvclwiLCBlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB3cy5vbmNsb3NlID0gY2xvc2UgPT4ge1xuICAgICAgICAgICAgICAgIGtvbnNvbGUubG9nKFwiV2ViU29ja2V0IGNsb3NlXCIsIGNsb3NlKTtcbiAgICAgICAgICAgICAgICBpZiAoc3ViKSBzdWIudW5zdWJzY3JpYmUoKTtcblxuICAgICAgICAgICAgICAgIC8vIFJ4SlMucmV0cnlXaGVuIGhhcyBhIGJ1ZyB0aGF0IHdvdWxkIGNhdXNlIFwiZXJyb3JcIiBzaWduYWwgdG8gYmUgc2VudCBhZnRlciB0aGUgb2JzZXJ2YWJsZSBpcyBjb21wbGV0ZWQvZXJyb3JlZC5cbiAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGd1YXJkIGFnYWluc3QgZXh0cmFuZW91cyBcImVycm9yXCIgc2lnbmFsIHRvIHdvcmthcm91bmQgdGhlIGJ1Zy5cbiAgICAgICAgICAgICAgICBjbG9zZWQgfHwgc3Vic2NyaWJlci5lcnJvcihjbG9zZSk7XG4gICAgICAgICAgICAgICAgY2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgd3Mub25lcnJvciA9IGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICBrb25zb2xlLmxvZyhcIldlYlNvY2tldCBlcnJvclwiLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgaWYgKHN1Yikgc3ViLnVuc3Vic2NyaWJlKCk7XG5cbiAgICAgICAgICAgICAgICAvLyBSeEpTLnJldHJ5V2hlbiBoYXMgYSBidWcgdGhhdCB3b3VsZCBjYXVzZSBcImVycm9yXCIgc2lnbmFsIHRvIGJlIHNlbnQgYWZ0ZXIgdGhlIG9ic2VydmFibGUgaXMgY29tcGxldGVkL2Vycm9yZWQuXG4gICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBndWFyZCBhZ2FpbnN0IGV4dHJhbmVvdXMgXCJlcnJvclwiIHNpZ25hbCB0byB3b3JrYXJvdW5kIHRoZSBidWcuXG4gICAgICAgICAgICAgICAgY2xvc2VkIHx8IHN1YnNjcmliZXIuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgIGNsb3NlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHdzLm9ubWVzc2FnZSA9IG1lc3NhZ2UgPT4gbWVzc2FnZS5kYXRhICYmIHN1YnNjcmliZXIubmV4dChKU09OLnBhcnNlKG1lc3NhZ2UuZGF0YSkpO1xuXG4gICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSAndW5zdWJzY3JpYmUnIG1ldGhvZCwgd2hpY2ggaXMgY2FsbGVkIHdoZW4gdGhpcyBvYnNlcnZhYmxlIGlzIGRpc3Bvc2VkLlxuICAgICAgICAgICAgLy8gV2hlbiB0aGUgV2ViU29ja2V0IGNsb3NlcyBpdHNlbGYsIHdlIHRocm93IGFuIGVycm9yLCBhbmQgdGhpcyBmdW5jdGlvbiBpcyBldmVudHVhbGx5IGNhbGxlZC5cbiAgICAgICAgICAgIC8vIFdoZW4gdGhlIG9ic2VydmFibGUgaXMgY2xvc2VkIGZpcnN0IChlLmcuIHdoZW4gdGVhcmluZyBkb3duIGEgV2ViQ2hhdCBpbnN0YW5jZSkgdGhlblxuICAgICAgICAgICAgLy8gd2UgbmVlZCB0byBtYW51YWxseSBjbG9zZSB0aGUgV2ViU29ja2V0LlxuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAod3MucmVhZHlTdGF0ZSA9PT0gMCB8fCB3cy5yZWFkeVN0YXRlID09PSAxKSB3cy5jbG9zZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KSBhcyBPYnNlcnZhYmxlPFQ+XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWNvbm5lY3RUb0NvbnZlcnNhdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tDb25uZWN0aW9uKHRydWUpXG4gICAgICAgIC5mbGF0TWFwKF8gPT5cbiAgICAgICAgICAgIHRoaXMuc2VydmljZXMuYWpheCh7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgICAgICAgICAgIHVybDogYCR7dGhpcy5kb21haW59L2NvbnZlcnNhdGlvbnMvJHt0aGlzLmNvbnZlcnNhdGlvbklkfT93YXRlcm1hcms9JHt0aGlzLndhdGVybWFya31gLFxuICAgICAgICAgICAgICAgIHRpbWVvdXQ6IHRoaXMudGltZW91dCxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgIFwiQWNjZXB0XCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgICAgICAgICAgICAuLi50aGlzLmNvbW1vbkhlYWRlcnMoKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuZG8ocmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2VjcmV0KVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRva2VuID0gcmVzdWx0LnJlc3BvbnNlLnRva2VuO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RyZWFtVXJsID0gcmVzdWx0LnJlc3BvbnNlLnN0cmVhbVVybDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAubWFwKF8gPT4gbnVsbClcbiAgICAgICAgICAgIC5yZXRyeVdoZW4oZXJyb3IkID0+IGVycm9yJFxuICAgICAgICAgICAgICAgIC5tZXJnZU1hcChlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvci5zdGF0dXMgPT09IDQwMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG9rZW4gaGFzIGV4cGlyZWQuIFdlIGNhbid0IHJlY292ZXIgZnJvbSB0aGlzIGhlcmUsIGJ1dCB0aGUgZW1iZWRkaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZWJzaXRlIG1pZ2h0IGV2ZW50dWFsbHkgY2FsbCByZWNvbm5lY3QoKSB3aXRoIGEgbmV3IHRva2VuIGFuZCBzdHJlYW1VcmwuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cGlyZWRUb2tlbigpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVycm9yLnN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JzZXJ2YWJsZS50aHJvdyhlcnJvckNvbnZlcnNhdGlvbkVuZGVkLCB0aGlzLnNlcnZpY2VzLnNjaGVkdWxlcik7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JzZXJ2YWJsZS5vZihlcnJvciwgdGhpcy5zZXJ2aWNlcy5zY2hlZHVsZXIpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmRlbGF5KHRoaXMudGltZW91dCwgdGhpcy5zZXJ2aWNlcy5zY2hlZHVsZXIpXG4gICAgICAgICAgICAgICAgLnRha2UodGhpcy5yZXRyaWVzKVxuICAgICAgICAgICAgKVxuICAgICAgICApXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb21tb25IZWFkZXJzKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgXCJBdXRob3JpemF0aW9uXCI6IGBCZWFyZXIgJHt0aGlzLnRva2VufWAsXG4gICAgICAgICAgICBcIngtbXMtYm90LWFnZW50XCI6IHRoaXMuX2JvdEFnZW50XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRCb3RBZ2VudChjdXN0b21BZ2VudDogc3RyaW5nID0gJycpOiBzdHJpbmcge1xuICAgICAgICBsZXQgY2xpZW50QWdlbnQgPSAnZGlyZWN0bGluZWpzJ1xuXG4gICAgICAgIGlmIChjdXN0b21BZ2VudCkge1xuICAgICAgICAgICAgY2xpZW50QWdlbnQgKz0gYDsgJHtjdXN0b21BZ2VudH1gXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYCR7RElSRUNUX0xJTkVfVkVSU0lPTn0gKCR7Y2xpZW50QWdlbnR9ICR7cHJvY2Vzcy5lbnYubnBtX3BhY2thZ2VfdmVyc2lvbn0pYDtcbiAgICB9XG5cbiAgICBzZXRVc2VySWQodXNlcklkOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMuY29ubmVjdGlvblN0YXR1cyQuZ2V0VmFsdWUoKSA9PT0gQ29ubmVjdGlvblN0YXR1cy5PbmxpbmUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRGlyZWN0TGluZUpTOiBJdCBpcyBjb25uZWN0ZWQsIHdlIGNhbm5vdCBzZXQgdXNlciBpZC4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHVzZXJJZEZyb21Ub2tlbiA9IHRoaXMucGFyc2VUb2tlbih0aGlzLnRva2VuKTtcbiAgICAgICAgaWYgKHVzZXJJZEZyb21Ub2tlbikge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnNvbGUud2FybignRGlyZWN0TGluZUpTOiB1c2VyIGlkIGlzIGFscmVhZHkgc2V0IGluIHRva2VuLCB3aWxsIGlnbm9yZSB0aGlzIHVzZXIgaWQuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoL15kbF8vdS50ZXN0KHVzZXJJZCkpIHtcbiAgICAgICAgICAgIHJldHVybiBjb25zb2xlLndhcm4oJ0RpcmVjdExpbmVKUzogdXNlciBpZCBwcmVmaXhlZCB3aXRoIFwiZGxfXCIgaXMgcmVzZXJ2ZWQgYW5kIG11c3QgYmUgZW1iZWRkZWQgaW50byB0aGUgRGlyZWN0IExpbmUgdG9rZW4gdG8gcHJldmVudCBmb3JnZXJ5LicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy51c2VySWRPblN0YXJ0Q29udmVyc2F0aW9uID0gdXNlcklkO1xuICAgIH1cblxuICAgIHByaXZhdGUgcGFyc2VUb2tlbih0b2tlbjogc3RyaW5nKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB7IHVzZXIgfSA9IGp3dERlY29kZTxKd3RQYXlsb2FkPih0b2tlbikgYXMgeyBba2V5OiBzdHJpbmddOiBhbnk7IH07XG4gICAgICAgICAgICByZXR1cm4gdXNlcjtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBJbnZhbGlkVG9rZW5FcnJvcikge1xuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUFBLE9BQUE7QUFDQUEsT0FBQTtBQUVBLElBQUFDLGdCQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxXQUFBLEdBQUFGLE9BQUE7QUFJQSxJQUFBRyxNQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxVQUFBLEdBQUFDLHVCQUFBLENBQUFMLE9BQUE7QUFFQUEsT0FBQTtBQUNBQSxPQUFBO0FBQ0FBLE9BQUE7QUFDQUEsT0FBQTtBQUNBQSxPQUFBO0FBQ0FBLE9BQUE7QUFDQUEsT0FBQTtBQUNBQSxPQUFBO0FBQ0FBLE9BQUE7QUFDQUEsT0FBQTtBQUNBQSxPQUFBO0FBQ0FBLE9BQUE7QUFFQUEsT0FBQTtBQUNBQSxPQUFBO0FBQ0FBLE9BQUE7QUFDQUEsT0FBQTtBQUNBQSxPQUFBO0FBQ0FBLE9BQUE7QUFFQSxJQUFBTSxnQkFBQSxHQUFBQyxzQkFBQSxDQUFBUCxPQUFBO0FBR0EsSUFBQVEsb0JBQUEsR0FBQVIsT0FBQTtBQUE0RCxJQUFBUyxTQUFBO0FBQUEsU0FBQUosd0JBQUFLLENBQUEsRUFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxNQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFQLHVCQUFBLFlBQUFBLHdCQUFBSyxDQUFBLEVBQUFDLENBQUEsU0FBQUEsQ0FBQSxJQUFBRCxDQUFBLElBQUFBLENBQUEsQ0FBQUssVUFBQSxTQUFBTCxDQUFBLE1BQUFNLENBQUEsRUFBQUMsQ0FBQSxFQUFBQyxDQUFBLEtBQUFDLFNBQUEsbUJBQUFULENBQUEsaUJBQUFBLENBQUEsZ0JBQUFVLE9BQUEsQ0FBQVYsQ0FB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S0FBSyxDQUFFO1FBQ3ZDLGdCQUFnQixFQUFFLElBQUksQ0FBQ2dCO01BQzNCLENBQUM7SUFDTDtFQUFDO0lBQUFjLEdBQUE7SUFBQUMsS0FBQSxFQUVELFNBQVFkLFdBQVdBLENBQUEsRUFBbUM7TUFBQSxJQUFsQ3NJLFdBQW1CLEdBQUE1TixTQUFBLENBQUFDLE1BQUEsUUFBQUQsU0FBQSxRQUFBdUUsU0FBQSxHQUFBdkUsU0FBQSxNQUFHLEVBQUU7TUFDeEMsSUFBSTZOLFdBQVcsR0FBRyxjQUFjO01BRWhDLElBQUlELFdBQVcsRUFBRTtRQUNiQyxXQUFXLFNBQUEvSixNQUFBLENBQVM4SixXQUFXLENBQUU7TUFDckM7TUFFQSxVQUFBOUosTUFBQSxDQUFVeEQsbUJBQW1CLFFBQUF3RCxNQUFBLENBQUsrSixXQUFXLE9BQUEvSixNQUFBO0lBQ2pEO0VBQUM7SUFBQXFDLEdBQUE7SUFBQUMsS0FBQSxFQUVELFNBQUEwSCxTQUFTQSxDQUFDQyxNQUFjLEVBQUU7TUFDdEIsSUFBSSxJQUFJLENBQUN0SCxpQkFBaUIsQ0FBQ29CLFFBQVEsQ0FBQyxDQUFDLEtBQUt0SCxnQkFBZ0IsQ0FBQ3NHLE1BQU0sRUFBRTtRQUMvRCxNQUFNLElBQUloRyxLQUFLLENBQUMsdURBQXVELENBQUM7TUFDNUU7TUFFQSxJQUFNbU4sZUFBZSxHQUFHLElBQUksQ0FBQ0MsVUFBVSxDQUFDLElBQUksQ0FBQzVKLEtBQUssQ0FBQztNQUNuRCxJQUFJMkosZUFBZSxFQUFFO1FBQ2pCLE9BQU9uSyxPQUFPLENBQUNpQixJQUFJLENBQUMsMEVBQTBFLENBQUM7TUFDbkc7TUFFQSxJQUFJLE1BQU8sQ0FBQ29KLElBQUksQ0FBQ0gsTUFBTSxDQUFDLEVBQUU7UUFDdEIsT0FBT2xLLE9BQU8sQ0FBQ2lCLElBQUksQ0FBQywySEFBMkgsQ0FBQztNQUNwSjtNQUVBLElBQUksQ0FBQ3FELHlCQUF5QixHQUFHNEYsTUFBTTtJQUMzQztFQUFDO0lBQUE1SCxHQUFBO0lBQUFDLEtBQUEsRUFFRCxTQUFRNkgsVUFBVUEsQ0FBQzVKLEtBQWEsRUFBRTtNQUM5QixJQUFJO1FBQ0EsSUFBQThKLEtBQUEsR0FBaUIsSUFBQUMscUJBQVMsRUFBYS9KLEtBQUssQ0FBQztVQUFyQzRELElBQUksR0FBQWtHLEtBQUEsQ0FBSmxHLElBQUk7UUFDWixPQUFPQSxJQUFJO01BQ2YsQ0FBQyxDQUFDLE9BQU83SixDQUFDLEVBQUU7UUFDUixJQUFJQSxDQUFDLFlBQVlpUSw0QkFBaUIsRUFBRTtVQUNoQyxPQUFPOUosU0FBUztRQUNwQjtNQUNKO0lBQ0o7RUFBQztBQUFBIiwiaWdub3JlTGlzdCI6W119
|