for-modules 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/NOTICE.txt +12 -0
- package/README.md +1 -0
- package/babel.config.json +6 -0
- package/dist/Structures/Filters.d.ts +109 -0
- package/dist/Structures/Filters.js +296 -0
- package/dist/Structures/Manager.d.ts +192 -0
- package/dist/Structures/Manager.js +580 -0
- package/dist/Structures/Node.d.ts +140 -0
- package/dist/Structures/Node.js +588 -0
- package/dist/Structures/Player.d.ts +250 -0
- package/dist/Structures/Player.js +750 -0
- package/dist/Structures/Queue.d.ts +38 -0
- package/dist/Structures/Queue.js +180 -0
- package/dist/Structures/Rest.d.ts +60 -0
- package/dist/Structures/Rest.js +246 -0
- package/dist/Structures/Utils.d.ts +174 -0
- package/dist/Structures/Utils.js +318 -0
- package/dist/Utils/FiltersEqualizers.d.ts +12 -0
- package/dist/Utils/FiltersEqualizers.js +227 -0
- package/dist/Utils/ManagerCheck.d.ts +2 -0
- package/dist/Utils/ManagerCheck.js +75 -0
- package/dist/Utils/NodeCheck.d.ts +2 -0
- package/dist/Utils/NodeCheck.js +54 -0
- package/dist/Utils/PlayerCheck.d.ts +2 -0
- package/dist/Utils/PlayerCheck.js +38 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.js +127 -0
- package/eslint.config.d.ts +2 -0
- package/eslint.config.js +12 -0
- package/package.json +51 -0
- package/renovate.json +6 -0
- package/tsconfig.json +25 -0
@@ -0,0 +1,588 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
4
|
+
value: true
|
5
|
+
});
|
6
|
+
exports.Node = void 0;
|
7
|
+
var _Utils = require("./Utils");
|
8
|
+
var _Rest = require("./Rest");
|
9
|
+
var _NodeCheck = _interopRequireDefault(require("../Utils/NodeCheck"));
|
10
|
+
var _ws = _interopRequireDefault(require("ws"));
|
11
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
12
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
13
|
+
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
14
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
15
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
16
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
17
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
18
|
+
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
19
|
+
function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator["return"] && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, "catch": function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; }
|
20
|
+
function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
|
21
|
+
function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
|
22
|
+
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; }
|
23
|
+
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) { _defineProperty(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; }
|
24
|
+
function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
|
25
|
+
function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
|
26
|
+
function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
|
27
|
+
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
28
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
|
29
|
+
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
30
|
+
var Node = exports.Node = /*#__PURE__*/function () {
|
31
|
+
/**
|
32
|
+
* Creates an instance of Node.
|
33
|
+
* @param options
|
34
|
+
*/
|
35
|
+
function Node(options) {
|
36
|
+
_classCallCheck(this, Node);
|
37
|
+
/** The socket for the node. */
|
38
|
+
_defineProperty(this, "socket", null);
|
39
|
+
_defineProperty(this, "reconnectAttempts", 1);
|
40
|
+
this.options = options;
|
41
|
+
if (!this.manager) this.manager = _Utils.Structure.get("Node")._manager;
|
42
|
+
if (!this.manager) throw new RangeError("Manager has not been initiated.");
|
43
|
+
if (this.manager.nodes.has(options.identifier || options.host)) {
|
44
|
+
return this.manager.nodes.get(options.identifier || options.host);
|
45
|
+
}
|
46
|
+
(0, _NodeCheck["default"])(options);
|
47
|
+
this.options = _objectSpread({
|
48
|
+
port: 2333,
|
49
|
+
password: "youshallnotpass",
|
50
|
+
secure: false,
|
51
|
+
retryAmount: 30,
|
52
|
+
retryDelay: 60000,
|
53
|
+
priority: 0
|
54
|
+
}, options);
|
55
|
+
if (this.options.secure) {
|
56
|
+
this.options.port = 443;
|
57
|
+
}
|
58
|
+
this.options.identifier = options.identifier || options.host;
|
59
|
+
this.stats = {
|
60
|
+
players: 0,
|
61
|
+
playingPlayers: 0,
|
62
|
+
uptime: 0,
|
63
|
+
memory: {
|
64
|
+
free: 0,
|
65
|
+
used: 0,
|
66
|
+
allocated: 0,
|
67
|
+
reservable: 0
|
68
|
+
},
|
69
|
+
cpu: {
|
70
|
+
cores: 0,
|
71
|
+
systemLoad: 0,
|
72
|
+
lavalinkLoad: 0
|
73
|
+
},
|
74
|
+
frameStats: {
|
75
|
+
sent: 0,
|
76
|
+
nulled: 0,
|
77
|
+
deficit: 0
|
78
|
+
}
|
79
|
+
};
|
80
|
+
this.manager.nodes.set(this.options.identifier, this);
|
81
|
+
this.manager.emit("NodeCreate", this);
|
82
|
+
this.rest = new _Rest.Rest(this);
|
83
|
+
}
|
84
|
+
|
85
|
+
/** Connects to the Node. */
|
86
|
+
return _createClass(Node, [{
|
87
|
+
key: "connected",
|
88
|
+
get: /** Returns if connected to the Node. */
|
89
|
+
function get() {
|
90
|
+
if (!this.socket) return false;
|
91
|
+
return this.socket.readyState === _ws["default"].OPEN;
|
92
|
+
}
|
93
|
+
|
94
|
+
/** Returns the address for this node. */
|
95
|
+
}, {
|
96
|
+
key: "address",
|
97
|
+
get: function get() {
|
98
|
+
return "".concat(this.options.host, ":").concat(this.options.port);
|
99
|
+
}
|
100
|
+
|
101
|
+
/** @hidden */
|
102
|
+
}, {
|
103
|
+
key: "connect",
|
104
|
+
value: function connect() {
|
105
|
+
if (this.connected) return;
|
106
|
+
var headers = Object.assign({
|
107
|
+
Authorization: this.options.password,
|
108
|
+
"Num-Shards": String(this.manager.options.shards),
|
109
|
+
"User-Id": this.manager.options.clientId,
|
110
|
+
"Client-Name": this.manager.options.clientName
|
111
|
+
});
|
112
|
+
this.socket = new _ws["default"]("ws".concat(this.options.secure ? "s" : "", "://").concat(this.address, "/v4/websocket"), {
|
113
|
+
headers: headers
|
114
|
+
});
|
115
|
+
this.socket.on("open", this.open.bind(this));
|
116
|
+
this.socket.on("close", this.close.bind(this));
|
117
|
+
this.socket.on("message", this.message.bind(this));
|
118
|
+
this.socket.on("error", this.error.bind(this));
|
119
|
+
}
|
120
|
+
|
121
|
+
/** Destroys the Node and all players connected with it. */
|
122
|
+
}, {
|
123
|
+
key: "destroy",
|
124
|
+
value: function destroy() {
|
125
|
+
var _this = this;
|
126
|
+
if (!this.connected) return;
|
127
|
+
var players = this.manager.players.filter(function (p) {
|
128
|
+
return p.node == _this;
|
129
|
+
});
|
130
|
+
if (players.size) players.forEach(function (p) {
|
131
|
+
return p.destroy();
|
132
|
+
});
|
133
|
+
this.socket.close(1000, "destroy");
|
134
|
+
this.socket.removeAllListeners();
|
135
|
+
this.socket = null;
|
136
|
+
this.reconnectAttempts = 1;
|
137
|
+
clearTimeout(this.reconnectTimeout);
|
138
|
+
this.manager.emit("NodeDestroy", this);
|
139
|
+
this.manager.destroyNode(this.options.identifier);
|
140
|
+
}
|
141
|
+
}, {
|
142
|
+
key: "reconnect",
|
143
|
+
value: function reconnect() {
|
144
|
+
var _this2 = this;
|
145
|
+
this.reconnectTimeout = setTimeout(function () {
|
146
|
+
var _this2$socket;
|
147
|
+
if (_this2.reconnectAttempts >= _this2.options.retryAmount) {
|
148
|
+
var error = new Error("Unable to connect after ".concat(_this2.options.retryAmount, " attempts."));
|
149
|
+
_this2.manager.emit("NodeError", _this2, error);
|
150
|
+
return _this2.destroy();
|
151
|
+
}
|
152
|
+
(_this2$socket = _this2.socket) === null || _this2$socket === void 0 || _this2$socket.removeAllListeners();
|
153
|
+
_this2.socket = null;
|
154
|
+
_this2.manager.emit("NodeReconnect", _this2);
|
155
|
+
_this2.connect();
|
156
|
+
_this2.reconnectAttempts++;
|
157
|
+
}, this.options.retryDelay);
|
158
|
+
}
|
159
|
+
}, {
|
160
|
+
key: "open",
|
161
|
+
value: function open() {
|
162
|
+
if (this.reconnectTimeout) clearTimeout(this.reconnectTimeout);
|
163
|
+
this.manager.emit("NodeConnect", this);
|
164
|
+
}
|
165
|
+
}, {
|
166
|
+
key: "close",
|
167
|
+
value: function close(code, reason) {
|
168
|
+
this.manager.emit("NodeDisconnect", this, {
|
169
|
+
code: code,
|
170
|
+
reason: reason
|
171
|
+
});
|
172
|
+
if (code !== 1000 || reason !== "destroy") this.reconnect();
|
173
|
+
}
|
174
|
+
}, {
|
175
|
+
key: "error",
|
176
|
+
value: function error(_error) {
|
177
|
+
if (!_error) return;
|
178
|
+
this.manager.emit("NodeError", this, _error);
|
179
|
+
}
|
180
|
+
}, {
|
181
|
+
key: "message",
|
182
|
+
value: function message(d) {
|
183
|
+
if (Array.isArray(d)) d = Buffer.concat(d);else if (d instanceof ArrayBuffer) d = Buffer.from(d);
|
184
|
+
var payload = JSON.parse(d.toString());
|
185
|
+
if (!payload.op) return;
|
186
|
+
this.manager.emit("NodeRaw", payload);
|
187
|
+
var player;
|
188
|
+
switch (payload.op) {
|
189
|
+
case "stats":
|
190
|
+
delete payload.op;
|
191
|
+
this.stats = _objectSpread({}, payload);
|
192
|
+
break;
|
193
|
+
case "playerUpdate":
|
194
|
+
player = this.manager.players.get(payload.guildId);
|
195
|
+
if (player) player.position = payload.state.position || 0;
|
196
|
+
break;
|
197
|
+
case "event":
|
198
|
+
this.handleEvent(payload);
|
199
|
+
break;
|
200
|
+
case "ready":
|
201
|
+
this.rest.setSessionId(payload.sessionId);
|
202
|
+
this.sessionId = payload.sessionId;
|
203
|
+
if (this.options.resumeStatus) {
|
204
|
+
this.rest.patch("/v4/sessions/".concat(this.sessionId), {
|
205
|
+
resuming: this.options.resumeStatus,
|
206
|
+
timeout: this.options.resumeTimeout
|
207
|
+
});
|
208
|
+
}
|
209
|
+
break;
|
210
|
+
default:
|
211
|
+
this.manager.emit("NodeError", this, new Error("Unexpected op \"".concat(payload.op, "\" with data: ").concat(payload.message)));
|
212
|
+
return;
|
213
|
+
}
|
214
|
+
}
|
215
|
+
}, {
|
216
|
+
key: "handleEvent",
|
217
|
+
value: function () {
|
218
|
+
var _handleEvent = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(payload) {
|
219
|
+
var player, track, type, error, _player$nowPlayingMes;
|
220
|
+
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
221
|
+
while (1) switch (_context.prev = _context.next) {
|
222
|
+
case 0:
|
223
|
+
if (payload.guildId) {
|
224
|
+
_context.next = 2;
|
225
|
+
break;
|
226
|
+
}
|
227
|
+
return _context.abrupt("return");
|
228
|
+
case 2:
|
229
|
+
player = this.manager.players.get(payload.guildId);
|
230
|
+
if (player) {
|
231
|
+
_context.next = 5;
|
232
|
+
break;
|
233
|
+
}
|
234
|
+
return _context.abrupt("return");
|
235
|
+
case 5:
|
236
|
+
track = player.queue.current;
|
237
|
+
type = payload.type;
|
238
|
+
_context.t0 = type;
|
239
|
+
_context.next = _context.t0 === "TrackStartEvent" ? 10 : _context.t0 === "TrackEndEvent" ? 12 : _context.t0 === "TrackStuckEvent" ? 17 : _context.t0 === "TrackExceptionEvent" ? 19 : _context.t0 === "WebSocketClosedEvent" ? 21 : 23;
|
240
|
+
break;
|
241
|
+
case 10:
|
242
|
+
this.trackStart(player, track, payload);
|
243
|
+
return _context.abrupt("break", 26);
|
244
|
+
case 12:
|
245
|
+
if (!(player !== null && player !== void 0 && player.nowPlayingMessage && player !== null && player !== void 0 && player.nowPlayingMessage.deletable)) {
|
246
|
+
_context.next = 15;
|
247
|
+
break;
|
248
|
+
}
|
249
|
+
_context.next = 15;
|
250
|
+
return player === null || player === void 0 || (_player$nowPlayingMes = player.nowPlayingMessage) === null || _player$nowPlayingMes === void 0 ? void 0 : _player$nowPlayingMes["delete"]()["catch"](function () {});
|
251
|
+
case 15:
|
252
|
+
this.trackEnd(player, track, payload);
|
253
|
+
return _context.abrupt("break", 26);
|
254
|
+
case 17:
|
255
|
+
this.trackStuck(player, track, payload);
|
256
|
+
return _context.abrupt("break", 26);
|
257
|
+
case 19:
|
258
|
+
this.trackError(player, track, payload);
|
259
|
+
return _context.abrupt("break", 26);
|
260
|
+
case 21:
|
261
|
+
this.socketClosed(player, payload);
|
262
|
+
return _context.abrupt("break", 26);
|
263
|
+
case 23:
|
264
|
+
error = new Error("Node#event unknown event '".concat(type, "'."));
|
265
|
+
this.manager.emit("NodeError", this, error);
|
266
|
+
return _context.abrupt("break", 26);
|
267
|
+
case 26:
|
268
|
+
case "end":
|
269
|
+
return _context.stop();
|
270
|
+
}
|
271
|
+
}, _callee, this);
|
272
|
+
}));
|
273
|
+
function handleEvent(_x) {
|
274
|
+
return _handleEvent.apply(this, arguments);
|
275
|
+
}
|
276
|
+
return handleEvent;
|
277
|
+
}()
|
278
|
+
}, {
|
279
|
+
key: "trackStart",
|
280
|
+
value: function trackStart(player, track, payload) {
|
281
|
+
player.playing = true;
|
282
|
+
player.paused = false;
|
283
|
+
this.manager.emit("TrackStart", player, track, payload);
|
284
|
+
}
|
285
|
+
}, {
|
286
|
+
key: "trackEnd",
|
287
|
+
value: function () {
|
288
|
+
var _trackEnd = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(player, track, payload) {
|
289
|
+
var reason;
|
290
|
+
return _regeneratorRuntime().wrap(function _callee2$(_context2) {
|
291
|
+
while (1) switch (_context2.prev = _context2.next) {
|
292
|
+
case 0:
|
293
|
+
reason = payload.reason; // If the track failed to load or was cleaned up
|
294
|
+
if (!["loadFailed", "cleanup"].includes(reason)) {
|
295
|
+
_context2.next = 5;
|
296
|
+
break;
|
297
|
+
}
|
298
|
+
this.handleFailedTrack(player, track, payload);
|
299
|
+
_context2.next = 20;
|
300
|
+
break;
|
301
|
+
case 5:
|
302
|
+
if (!(reason === "replaced")) {
|
303
|
+
_context2.next = 10;
|
304
|
+
break;
|
305
|
+
}
|
306
|
+
this.manager.emit("TrackEnd", player, track, payload);
|
307
|
+
player.queue.previous = player.queue.current;
|
308
|
+
_context2.next = 20;
|
309
|
+
break;
|
310
|
+
case 10:
|
311
|
+
if (!(track && (player.trackRepeat || player.queueRepeat))) {
|
312
|
+
_context2.next = 14;
|
313
|
+
break;
|
314
|
+
}
|
315
|
+
this.handleRepeatedTrack(player, track, payload);
|
316
|
+
_context2.next = 20;
|
317
|
+
break;
|
318
|
+
case 14:
|
319
|
+
if (!player.queue.length) {
|
320
|
+
_context2.next = 18;
|
321
|
+
break;
|
322
|
+
}
|
323
|
+
this.playNextTrack(player, track, payload);
|
324
|
+
_context2.next = 20;
|
325
|
+
break;
|
326
|
+
case 18:
|
327
|
+
_context2.next = 20;
|
328
|
+
return this.queueEnd(player, track, payload);
|
329
|
+
case 20:
|
330
|
+
case "end":
|
331
|
+
return _context2.stop();
|
332
|
+
}
|
333
|
+
}, _callee2, this);
|
334
|
+
}));
|
335
|
+
function trackEnd(_x2, _x3, _x4) {
|
336
|
+
return _trackEnd.apply(this, arguments);
|
337
|
+
}
|
338
|
+
return trackEnd;
|
339
|
+
}()
|
340
|
+
}, {
|
341
|
+
key: "extractSpotifyTrackID",
|
342
|
+
value: function extractSpotifyTrackID(url) {
|
343
|
+
var regex = /https:\/\/open\.spotify\.com\/track\/([a-zA-Z0-9]+)/;
|
344
|
+
var match = url.match(regex);
|
345
|
+
return match ? match[1] : null;
|
346
|
+
}
|
347
|
+
}, {
|
348
|
+
key: "extractSpotifyArtistID",
|
349
|
+
value: function extractSpotifyArtistID(url) {
|
350
|
+
var regex = /https:\/\/open\.spotify\.com\/artist\/([a-zA-Z0-9]+)/;
|
351
|
+
var match = url.match(regex);
|
352
|
+
return match ? match[1] : null;
|
353
|
+
}
|
354
|
+
|
355
|
+
// Handle autoplay
|
356
|
+
}, {
|
357
|
+
key: "handleAutoplay",
|
358
|
+
value: function () {
|
359
|
+
var _handleAutoplay = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3(player, track) {
|
360
|
+
var previousTrack, hasSpotifyURL, node, _res, info, isSpotifyPluginEnabled, isSpotifySourceManagerEnabled, trackID, artistID, identifier, recommendedResult, playlistData, recommendedTrack, hasYouTubeURL, videoID, _res2, randomIndex, searchURI, res, tracks, foundTrack, _foundTrack$title$spl, _foundTrack$title$spl2, author, title;
|
361
|
+
return _regeneratorRuntime().wrap(function _callee3$(_context3) {
|
362
|
+
while (1) switch (_context3.prev = _context3.next) {
|
363
|
+
case 0:
|
364
|
+
previousTrack = player.queue.previous;
|
365
|
+
if (!(!player.isAutoplay || !previousTrack)) {
|
366
|
+
_context3.next = 3;
|
367
|
+
break;
|
368
|
+
}
|
369
|
+
return _context3.abrupt("return");
|
370
|
+
case 3:
|
371
|
+
hasSpotifyURL = ["spotify.com", "open.spotify.com"].some(function (url) {
|
372
|
+
return previousTrack.uri.includes(url);
|
373
|
+
});
|
374
|
+
if (!hasSpotifyURL) {
|
375
|
+
_context3.next = 28;
|
376
|
+
break;
|
377
|
+
}
|
378
|
+
node = this.manager.useableNodes;
|
379
|
+
_context3.next = 8;
|
380
|
+
return node.rest.get("/v4/info");
|
381
|
+
case 8:
|
382
|
+
_res = _context3.sent;
|
383
|
+
info = _res;
|
384
|
+
isSpotifyPluginEnabled = info.plugins.some(function (plugin) {
|
385
|
+
return plugin.name === "lavasrc-plugin";
|
386
|
+
});
|
387
|
+
isSpotifySourceManagerEnabled = info.sourceManagers.includes("spotify");
|
388
|
+
if (!(isSpotifyPluginEnabled && isSpotifySourceManagerEnabled)) {
|
389
|
+
_context3.next = 28;
|
390
|
+
break;
|
391
|
+
}
|
392
|
+
trackID = this.extractSpotifyTrackID(previousTrack.uri);
|
393
|
+
artistID = this.extractSpotifyArtistID(previousTrack.pluginInfo.artistUrl);
|
394
|
+
identifier = "";
|
395
|
+
if (trackID && artistID) {
|
396
|
+
identifier = "sprec:seed_artists=".concat(artistID, "&seed_tracks=").concat(trackID);
|
397
|
+
} else if (trackID) {
|
398
|
+
identifier = "sprec:seed_tracks=".concat(trackID);
|
399
|
+
} else if (artistID) {
|
400
|
+
identifier = "sprec:seed_artists=".concat(artistID);
|
401
|
+
}
|
402
|
+
if (!identifier) {
|
403
|
+
_context3.next = 28;
|
404
|
+
break;
|
405
|
+
}
|
406
|
+
_context3.next = 20;
|
407
|
+
return node.rest.get("/v4/loadtracks?identifier=".concat(encodeURIComponent(identifier)));
|
408
|
+
case 20:
|
409
|
+
recommendedResult = _context3.sent;
|
410
|
+
if (!(recommendedResult.loadType === "playlist")) {
|
411
|
+
_context3.next = 28;
|
412
|
+
break;
|
413
|
+
}
|
414
|
+
playlistData = recommendedResult.data;
|
415
|
+
recommendedTrack = playlistData.tracks[0];
|
416
|
+
if (!recommendedTrack) {
|
417
|
+
_context3.next = 28;
|
418
|
+
break;
|
419
|
+
}
|
420
|
+
player.queue.add(_Utils.TrackUtils.build(recommendedTrack, player.get("Internal_BotUser")));
|
421
|
+
player.play();
|
422
|
+
return _context3.abrupt("return");
|
423
|
+
case 28:
|
424
|
+
hasYouTubeURL = ["youtube.com", "youtu.be"].some(function (url) {
|
425
|
+
return previousTrack.uri.includes(url);
|
426
|
+
});
|
427
|
+
videoID = previousTrack.uri.substring(previousTrack.uri.indexOf("=") + 1);
|
428
|
+
if (hasYouTubeURL) {
|
429
|
+
_context3.next = 35;
|
430
|
+
break;
|
431
|
+
}
|
432
|
+
_context3.next = 33;
|
433
|
+
return player.search("".concat(previousTrack.author, " - ").concat(previousTrack.title), player.get("Internal_BotUser"));
|
434
|
+
case 33:
|
435
|
+
_res2 = _context3.sent;
|
436
|
+
videoID = _res2.tracks[0].uri.substring(_res2.tracks[0].uri.indexOf("=") + 1);
|
437
|
+
case 35:
|
438
|
+
do {
|
439
|
+
randomIndex = Math.floor(Math.random() * 23) + 2;
|
440
|
+
searchURI = "https://www.youtube.com/watch?v=".concat(videoID, "&list=RD").concat(videoID, "&index=").concat(randomIndex);
|
441
|
+
} while (track.uri.includes(searchURI));
|
442
|
+
_context3.next = 38;
|
443
|
+
return player.search(searchURI, player.get("Internal_BotUser"));
|
444
|
+
case 38:
|
445
|
+
res = _context3.sent;
|
446
|
+
if (!(res.loadType === "empty" || res.loadType === "error")) {
|
447
|
+
_context3.next = 41;
|
448
|
+
break;
|
449
|
+
}
|
450
|
+
return _context3.abrupt("return");
|
451
|
+
case 41:
|
452
|
+
tracks = res.tracks;
|
453
|
+
if (res.loadType === "playlist") {
|
454
|
+
tracks = res.playlist.tracks;
|
455
|
+
}
|
456
|
+
foundTrack = tracks.sort(function () {
|
457
|
+
return Math.random() - 0.5;
|
458
|
+
}).find(function (shuffledTrack) {
|
459
|
+
return shuffledTrack.uri !== track.uri;
|
460
|
+
});
|
461
|
+
if (foundTrack) {
|
462
|
+
if (this.manager.options.replaceYouTubeCredentials) {
|
463
|
+
foundTrack.author = foundTrack.author.replace("- Topic", "");
|
464
|
+
foundTrack.title = foundTrack.title.replace("Topic -", "");
|
465
|
+
if (foundTrack.title.includes("-")) {
|
466
|
+
_foundTrack$title$spl = foundTrack.title.split("-").map(function (str) {
|
467
|
+
return str.trim();
|
468
|
+
}), _foundTrack$title$spl2 = _slicedToArray(_foundTrack$title$spl, 2), author = _foundTrack$title$spl2[0], title = _foundTrack$title$spl2[1];
|
469
|
+
foundTrack.author = author;
|
470
|
+
foundTrack.title = title;
|
471
|
+
}
|
472
|
+
}
|
473
|
+
player.queue.add(foundTrack);
|
474
|
+
player.play();
|
475
|
+
}
|
476
|
+
case 45:
|
477
|
+
case "end":
|
478
|
+
return _context3.stop();
|
479
|
+
}
|
480
|
+
}, _callee3, this);
|
481
|
+
}));
|
482
|
+
function handleAutoplay(_x5, _x6) {
|
483
|
+
return _handleAutoplay.apply(this, arguments);
|
484
|
+
}
|
485
|
+
return handleAutoplay;
|
486
|
+
}() // Handle the case when a track failed to load or was cleaned up
|
487
|
+
}, {
|
488
|
+
key: "handleFailedTrack",
|
489
|
+
value: function handleFailedTrack(player, track, payload) {
|
490
|
+
player.queue.previous = player.queue.current;
|
491
|
+
player.queue.current = player.queue.shift();
|
492
|
+
if (!player.queue.current) {
|
493
|
+
this.queueEnd(player, track, payload);
|
494
|
+
return;
|
495
|
+
}
|
496
|
+
this.manager.emit("TrackEnd", player, track, payload);
|
497
|
+
if (this.manager.options.autoPlay) player.play();
|
498
|
+
}
|
499
|
+
|
500
|
+
// Handle the case when a track ended and it's set to repeat (track or queue)
|
501
|
+
}, {
|
502
|
+
key: "handleRepeatedTrack",
|
503
|
+
value: function handleRepeatedTrack(player, track, payload) {
|
504
|
+
var queue = player.queue,
|
505
|
+
trackRepeat = player.trackRepeat,
|
506
|
+
queueRepeat = player.queueRepeat;
|
507
|
+
var autoPlay = this.manager.options.autoPlay;
|
508
|
+
if (trackRepeat) {
|
509
|
+
queue.unshift(queue.current);
|
510
|
+
} else if (queueRepeat) {
|
511
|
+
queue.add(queue.current);
|
512
|
+
}
|
513
|
+
queue.previous = queue.current;
|
514
|
+
queue.current = queue.shift();
|
515
|
+
this.manager.emit("TrackEnd", player, track, payload);
|
516
|
+
if (payload.reason === "stopped" && !(queue.current = queue.shift())) {
|
517
|
+
this.queueEnd(player, track, payload);
|
518
|
+
return;
|
519
|
+
}
|
520
|
+
if (autoPlay) player.play();
|
521
|
+
}
|
522
|
+
|
523
|
+
// Handle the case when there's another track in the queue
|
524
|
+
}, {
|
525
|
+
key: "playNextTrack",
|
526
|
+
value: function playNextTrack(player, track, payload) {
|
527
|
+
player.queue.previous = player.queue.current;
|
528
|
+
player.queue.current = player.queue.shift();
|
529
|
+
this.manager.emit("TrackEnd", player, track, payload);
|
530
|
+
if (this.manager.options.autoPlay) player.play();
|
531
|
+
}
|
532
|
+
}, {
|
533
|
+
key: "queueEnd",
|
534
|
+
value: function () {
|
535
|
+
var _queueEnd = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee4(player, track, payload) {
|
536
|
+
return _regeneratorRuntime().wrap(function _callee4$(_context4) {
|
537
|
+
while (1) switch (_context4.prev = _context4.next) {
|
538
|
+
case 0:
|
539
|
+
player.queue.previous = player.queue.current;
|
540
|
+
player.queue.current = null;
|
541
|
+
if (player.isAutoplay) {
|
542
|
+
_context4.next = 8;
|
543
|
+
break;
|
544
|
+
}
|
545
|
+
player.queue.previous = player.queue.current;
|
546
|
+
player.queue.current = null;
|
547
|
+
player.playing = false;
|
548
|
+
this.manager.emit("QueueEnd", player, track, payload);
|
549
|
+
return _context4.abrupt("return");
|
550
|
+
case 8:
|
551
|
+
_context4.next = 10;
|
552
|
+
return this.handleAutoplay(player, track);
|
553
|
+
case 10:
|
554
|
+
case "end":
|
555
|
+
return _context4.stop();
|
556
|
+
}
|
557
|
+
}, _callee4, this);
|
558
|
+
}));
|
559
|
+
function queueEnd(_x7, _x8, _x9) {
|
560
|
+
return _queueEnd.apply(this, arguments);
|
561
|
+
}
|
562
|
+
return queueEnd;
|
563
|
+
}()
|
564
|
+
}, {
|
565
|
+
key: "trackStuck",
|
566
|
+
value: function trackStuck(player, track, payload) {
|
567
|
+
player.stop();
|
568
|
+
this.manager.emit("TrackStuck", player, track, payload);
|
569
|
+
}
|
570
|
+
}, {
|
571
|
+
key: "trackError",
|
572
|
+
value: function trackError(player, track, payload) {
|
573
|
+
player.stop();
|
574
|
+
this.manager.emit("TrackError", player, track, payload);
|
575
|
+
}
|
576
|
+
}, {
|
577
|
+
key: "socketClosed",
|
578
|
+
value: function socketClosed(player, payload) {
|
579
|
+
this.manager.emit("SocketClosed", player, payload);
|
580
|
+
}
|
581
|
+
}], [{
|
582
|
+
key: "init",
|
583
|
+
value: function init(manager) {
|
584
|
+
this._manager = manager;
|
585
|
+
}
|
586
|
+
}]);
|
587
|
+
}();
|
588
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfVXRpbHMiLCJyZXF1aXJlIiwiX1Jlc3QiLCJfTm9kZUNoZWNrIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl93cyIsImUiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsIm8iLCJTeW1ib2wiLCJpdGVyYXRvciIsImNvbnN0cnVjdG9yIiwicHJvdG90eXBlIiwiX3NsaWNlZFRvQXJyYXkiLCJyIiwiX2FycmF5V2l0aEhvbGVzIiwiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwiX25vbkl0ZXJhYmxlUmVzdCIsIlR5cGVFcnJvciIsImEiLCJfYXJyYXlMaWtlVG9BcnJheSIsInQiLCJ0b1N0cmluZyIsImNhbGwiLCJzbGljZSIsIm5hbWUiLCJBcnJheSIsImZyb20iLCJ0ZXN0IiwibGVuZ3RoIiwibiIsImwiLCJpIiwidSIsImYiLCJuZXh0IiwiT2JqZWN0IiwiZG9uZSIsInB1c2giLCJ2YWx1ZSIsImlzQXJyYXkiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwiaGFzT3duUHJvcGVydHkiLCJkZWZpbmVQcm9wZXJ0eSIsImMiLCJhc3luY0l0ZXJhdG9yIiwidG9TdHJpbmdUYWciLCJkZWZpbmUiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJ3cmFwIiwiR2VuZXJhdG9yIiwiY3JlYXRlIiwiQ29udGV4dCIsIm1ha2VJbnZva2VNZXRob2QiLCJ0cnlDYXRjaCIsInR5cGUiLCJhcmciLCJoIiwicyIsInkiLCJHZW5lcmF0b3JGdW5jdGlvbiIsIkdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlIiwicCIsImQiLCJnZXRQcm90b3R5cGVPZiIsInYiLCJ2YWx1ZXMiLCJnIiwiZGVmaW5lSXRlcmF0b3JNZXRob2RzIiwiZm9yRWFjaCIsIl9pbnZva2UiLCJBc3luY0l0ZXJhdG9yIiwiaW52b2tlIiwicmVzb2x2ZSIsIl9fYXdhaXQiLCJ0aGVuIiwiY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmciLCJFcnJvciIsIm1ldGhvZCIsImRlbGVnYXRlIiwibWF5YmVJbnZva2VEZWxlZ2F0ZSIsInNlbnQiLCJfc2VudCIsImRpc3BhdGNoRXhjZXB0aW9uIiwiYWJydXB0IiwicmVzdWx0TmFtZSIsIm5leHRMb2MiLCJwdXNoVHJ5RW50cnkiLCJ0cnlMb2MiLCJjYXRjaExvYyIsImZpbmFsbHlMb2MiLCJhZnRlckxvYyIsInRyeUVudHJpZXMiLCJyZXNldFRyeUVudHJ5IiwiY29tcGxldGlvbiIsInJlc2V0IiwiaXNOYU4iLCJkaXNwbGF5TmFtZSIsImlzR2VuZXJhdG9yRnVuY3Rpb24iLCJtYXJrIiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJhd3JhcCIsImFzeW5jIiwiUHJvbWlzZSIsImtleXMiLCJyZXZlcnNlIiwicG9wIiwicHJldiIsImNoYXJBdCIsInN0b3AiLCJydmFsIiwiaGFuZGxlIiwiY29tcGxldGUiLCJmaW5pc2giLCJfY2F0Y2giLCJkZWxlZ2F0ZVlpZWxkIiwiYXN5bmNHZW5lcmF0b3JTdGVwIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJhcmd1bWVudHMiLCJhcHBseSIsIl9uZXh0IiwiX3Rocm93Iiwib3duS2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsIl9vYmplY3RTcHJlYWQiLCJfZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsIl9jbGFzc0NhbGxDaGVjayIsIl9kZWZpbmVQcm9wZXJ0aWVzIiwiX3RvUHJvcGVydHlLZXkiLCJrZXkiLCJfY3JlYXRlQ2xhc3MiLCJfdG9QcmltaXRpdmUiLCJ0b1ByaW1pdGl2ZSIsIlN0cmluZyIsIk51bWJlciIsIk5vZGUiLCJleHBvcnRzIiwib3B0aW9ucyIsIm1hbmFnZXIiLCJTdHJ1Y3R1cmUiLCJnZXQiLCJfbWFuYWdlciIsIlJhbmdlRXJyb3IiLCJub2RlcyIsImhhcyIsImlkZW50aWZpZXIiLCJob3N0Iiwibm9kZUNoZWNrIiwicG9ydCIsInBhc3N3b3JkIiwic2VjdXJlIiwicmV0cnlBbW91bnQiLCJyZXRyeURlbGF5IiwicHJpb3JpdHkiLCJzdGF0cyIsInBsYXllcnMiLCJwbGF5aW5nUGxheWVycyIsInVwdGltZSIsIm1lbW9yeSIsImZyZWUiLCJ1c2VkIiwiYWxsb2NhdGVkIiwicmVzZXJ2YWJsZSIsImNwdSIsImNvcmVzIiwic3lzdGVtTG9hZCIsImxhdmFsaW5rTG9hZCIsImZyYW1lU3RhdHMiLCJudWxsZWQiLCJkZWZpY2l0Iiwic2V0IiwiZW1pdCIsInJlc3QiLCJSZXN0Iiwic29ja2V0IiwicmVhZHlTdGF0ZSIsIldlYlNvY2tldCIsIk9QRU4iLCJjb25jYXQiLCJjb25uZWN0IiwiY29ubmVjdGVkIiwiaGVhZGVycyIsImFzc2lnbiIsIkF1dGhvcml6YXRpb24iLCJzaGFyZHMiLCJjbGllbnRJZCIsImNsaWVudE5hbWUiLCJhZGRyZXNzIiwib24iLCJvcGVuIiwiYmluZCIsImNsb3NlIiwibWVzc2FnZSIsImVycm9yIiwiZGVzdHJveSIsIl90aGlzIiwibm9kZSIsInNpemUiLCJyZW1vdmVBbGxMaXN0ZW5lcnMiLCJyZWNvbm5lY3RBdHRlbXB0cyIsImNsZWFyVGltZW91dCIsInJlY29ubmVjdFRpbWVvdXQiLCJkZXN0cm95Tm9kZSIsInJlY29ubmVjdCIsIl90aGlzMiIsInNldFRpbWVvdXQiLCJfdGhpczIkc29ja2V0IiwiY29kZSIsInJlYXNvbiIsIkJ1ZmZlciIsIkFycmF5QnVmZmVyIiwicGF5bG9hZCIsIkpTT04iLCJwYXJzZSIsIm9wIiwicGxheWVyIiwiZ3VpbGRJZCIsInBvc2l0aW9uIiwic3RhdGUiLCJoYW5kbGVFdmVudCIsInNldFNlc3Npb25JZCIsInNlc3Npb25JZCIsInJlc3VtZVN0YXR1cyIsInBhdGNoIiwicmVzdW1pbmciLCJ0aW1lb3V0IiwicmVzdW1lVGltZW91dCIsIl9oYW5kbGVFdmVudCIsIl9jYWxsZWUiLCJ0cmFjayIsIl9wbGF5ZXIkbm93UGxheWluZ01lcyIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJxdWV1ZSIsImN1cnJlbnQiLCJ0MCIsInRyYWNrU3RhcnQiLCJub3dQbGF5aW5nTWVzc2FnZSIsImRlbGV0YWJsZSIsInRyYWNrRW5kIiwidHJhY2tTdHVjayIsInRyYWNrRXJyb3IiLCJzb2NrZXRDbG9zZWQiLCJfeCIsInBsYXlpbmciLCJwYXVzZWQiLCJfdHJhY2tFbmQiLCJfY2FsbGVlMiIsIl9jYWxsZWUyJCIsIl9jb250ZXh0MiIsImluY2x1ZGVzIiwiaGFuZGxlRmFpbGVkVHJhY2siLCJwcmV2aW91cyIsInRyYWNrUmVwZWF0IiwicXVldWVSZXBlYXQiLCJoYW5kbGVSZXBlYXRlZFRyYWNrIiwicGxheU5leHRUcmFjayIsInF1ZXVlRW5kIiwiX3gyIiwiX3gzIiwiX3g0IiwiZXh0cmFjdFNwb3RpZnlUcmFja0lEIiwidXJsIiwicmVnZXgiLCJtYXRjaCIsImV4dHJhY3RTcG90aWZ5QXJ0aXN0SUQiLCJfaGFuZGxlQXV0b3BsYXkiLCJfY2FsbGVlMyIsInByZXZpb3VzVHJhY2siLCJoYXNTcG90aWZ5VVJMIiwiX3JlcyIsImluZm8iLCJpc1Nwb3RpZnlQbHVnaW5FbmFibGVkIiwiaXNTcG90aWZ5U291cmNlTWFuYWdlckVuYWJsZWQiLCJ0cmFja0lEIiwiYXJ0aXN0SUQiLCJyZWNvbW1lbmRlZFJlc3VsdCIsInBsYXlsaXN0RGF0YSIsInJlY29tbWVuZGVkVHJhY2siLCJoYXNZb3VUdWJlVVJMIiwidmlkZW9JRCIsIl9yZXMyIiwicmFuZG9tSW5kZXgiLCJzZWFyY2hVUkkiLCJyZXMiLCJ0cmFja3MiLCJmb3VuZFRyYWNrIiwiX2ZvdW5kVHJhY2skdGl0bGUkc3BsIiwiX2ZvdW5kVHJhY2skdGl0bGUkc3BsMiIsImF1dGhvciIsInRpdGxlIiwiX2NhbGxlZTMkIiwiX2NvbnRleHQzIiwiaXNBdXRvcGxheSIsInNvbWUiLCJ1cmkiLCJ1c2VhYmxlTm9kZXMiLCJwbHVnaW5zIiwicGx1Z2luIiwic291cmNlTWFuYWdlcnMiLCJwbHVnaW5JbmZvIiwiYXJ0aXN0VXJsIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwibG9hZFR5cGUiLCJkYXRhIiwiYWRkIiwiVHJhY2tVdGlscyIsImJ1aWxkIiwicGxheSIsInN1YnN0cmluZyIsImluZGV4T2YiLCJzZWFyY2giLCJNYXRoIiwiZmxvb3IiLCJyYW5kb20iLCJwbGF5bGlzdCIsInNvcnQiLCJmaW5kIiwic2h1ZmZsZWRUcmFjayIsInJlcGxhY2VZb3VUdWJlQ3JlZGVudGlhbHMiLCJyZXBsYWNlIiwic3BsaXQiLCJtYXAiLCJzdHIiLCJ0cmltIiwiaGFuZGxlQXV0b3BsYXkiLCJfeDUiLCJfeDYiLCJzaGlmdCIsImF1dG9QbGF5IiwidW5zaGlmdCIsIl9xdWV1ZUVuZCIsIl9jYWxsZWU0IiwiX2NhbGxlZTQkIiwiX2NvbnRleHQ0IiwiX3g3IiwiX3g4IiwiX3g5IiwiaW5pdCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9TdHJ1Y3R1cmVzL05vZGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0UGxheWVyRXZlbnQsXG5cdFBsYXllckV2ZW50cyxcblx0U3RydWN0dXJlLFxuXHRUcmFja0VuZEV2ZW50LFxuXHRUcmFja0V4Y2VwdGlvbkV2ZW50LFxuXHRUcmFja1N0YXJ0RXZlbnQsXG5cdFRyYWNrU3R1Y2tFdmVudCxcblx0VHJhY2tVdGlscyxcblx0V2ViU29ja2V0Q2xvc2VkRXZlbnQsXG59IGZyb20gXCIuL1V0aWxzXCI7XG5pbXBvcnQgeyBMYXZhbGlua1Jlc3BvbnNlLCBNYW5hZ2VyLCBQbGF5bGlzdFJhd0RhdGEgfSBmcm9tIFwiLi9NYW5hZ2VyXCI7XG5pbXBvcnQgeyBQbGF5ZXIsIFRyYWNrLCBVbnJlc29sdmVkVHJhY2sgfSBmcm9tIFwiLi9QbGF5ZXJcIjtcbmltcG9ydCB7IFJlc3QgfSBmcm9tIFwiLi9SZXN0XCI7XG5pbXBvcnQgbm9kZUNoZWNrIGZyb20gXCIuLi9VdGlscy9Ob2RlQ2hlY2tcIjtcbmltcG9ydCBXZWJTb2NrZXQgZnJvbSBcIndzXCI7XG5cbmV4cG9ydCBjbGFzcyBOb2RlIHtcblx0LyoqIFRoZSBzb2NrZXQgZm9yIHRoZSBub2RlLiAqL1xuXHRwdWJsaWMgc29ja2V0OiBXZWJTb2NrZXQgfCBudWxsID0gbnVsbDtcblx0LyoqIFRoZSBzdGF0cyBmb3IgdGhlIG5vZGUuICovXG5cdHB1YmxpYyBzdGF0czogTm9kZVN0YXRzO1xuXHRwdWJsaWMgbWFuYWdlcjogTWFuYWdlcjtcblx0LyoqIFRoZSBub2RlJ3Mgc2Vzc2lvbiBJRC4gKi9cblx0cHVibGljIHNlc3Npb25JZDogc3RyaW5nIHwgbnVsbDtcblx0LyoqIFRoZSBSRVNUIGluc3RhbmNlLiAqL1xuXHRwdWJsaWMgcmVhZG9ubHkgcmVzdDogUmVzdDtcblxuXHRwcml2YXRlIHN0YXRpYyBfbWFuYWdlcjogTWFuYWdlcjtcblx0cHJpdmF0ZSByZWNvbm5lY3RUaW1lb3V0PzogTm9kZUpTLlRpbWVvdXQ7XG5cdHByaXZhdGUgcmVjb25uZWN0QXR0ZW1wdHMgPSAxO1xuXG5cdC8qKiBSZXR1cm5zIGlmIGNvbm5lY3RlZCB0byB0aGUgTm9kZS4gKi9cblx0cHVibGljIGdldCBjb25uZWN0ZWQoKTogYm9vbGVhbiB7XG5cdFx0aWYgKCF0aGlzLnNvY2tldCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0aGlzLnNvY2tldC5yZWFkeVN0YXRlID09PSBXZWJTb2NrZXQuT1BFTjtcblx0fVxuXG5cdC8qKiBSZXR1cm5zIHRoZSBhZGRyZXNzIGZvciB0aGlzIG5vZGUuICovXG5cdHB1YmxpYyBnZXQgYWRkcmVzcygpOiBzdHJpbmcge1xuXHRcdHJldHVybiBgJHt0aGlzLm9wdGlvbnMuaG9zdH06JHt0aGlzLm9wdGlvbnMucG9ydH1gO1xuXHR9XG5cblx0LyoqIEBoaWRkZW4gKi9cblx0cHVibGljIHN0YXRpYyBpbml0KG1hbmFnZXI6IE1hbmFnZXIpOiB2b2lkIHtcblx0XHR0aGlzLl9tYW5hZ2VyID0gbWFuYWdlcjtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIE5vZGUuXG5cdCAqIEBwYXJhbSBvcHRpb25zXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihwdWJsaWMgb3B0aW9uczogTm9kZU9wdGlvbnMpIHtcblx0XHRpZiAoIXRoaXMubWFuYWdlcikgdGhpcy5tYW5hZ2VyID0gU3RydWN0dXJlLmdldChcIk5vZGVcIikuX21hbmFnZXI7XG5cdFx0aWYgKCF0aGlzLm1hbmFnZXIpIHRocm93IG5ldyBSYW5nZUVycm9yKFwiTWFuYWdlciBoYXMgbm90IGJlZW4gaW5pdGlhdGVkLlwiKTtcblxuXHRcdGlmICh0aGlzLm1hbmFnZXIubm9kZXMuaGFzKG9wdGlvbnMuaWRlbnRpZmllciB8fCBvcHRpb25zLmhvc3QpKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5tYW5hZ2VyLm5vZGVzLmdldChvcHRpb25zLmlkZW50aWZpZXIgfHwgb3B0aW9ucy5ob3N0KTtcblx0XHR9XG5cblx0XHRub2RlQ2hlY2sob3B0aW9ucyk7XG5cblx0XHR0aGlzLm9wdGlvbnMgPSB7XG5cdFx0XHRwb3J0OiAyMzMzLFxuXHRcdFx0cGFzc3dvcmQ6IFwieW91c2hhbGxub3RwYXNzXCIsXG5cdFx0XHRzZWN1cmU6IGZhbHNlLFxuXHRcdFx0cmV0cnlBbW91bnQ6IDMwLFxuXHRcdFx0cmV0cnlEZWxheTogNjAwMDAsXG5cdFx0XHRwcmlvcml0eTogMCxcblx0XHRcdC4uLm9wdGlvbnMsXG5cdFx0fTtcblxuXHRcdGlmICh0aGlzLm9wdGlvbnMuc2VjdXJlKSB7XG5cdFx0XHR0aGlzLm9wdGlvbnMucG9ydCA9IDQ0Mztcblx0XHR9XG5cblx0XHR0aGlzLm9wdGlvbnMuaWRlbnRpZmllciA9IG9wdGlvbnMuaWRlbnRpZmllciB8fCBvcHRpb25zLmhvc3Q7XG5cdFx0dGhpcy5zdGF0cyA9IHtcblx0XHRcdHBsYXllcnM6IDAsXG5cdFx0XHRwbGF5aW5nUGxheWVyczogMCxcblx0XHRcdHVwdGltZTogMCxcblx0XHRcdG1lbW9yeToge1xuXHRcdFx0XHRmcmVlOiAwLFxuXHRcdFx0XHR1c2VkOiAwLFxuXHRcdFx0XHRhbGxvY2F0ZWQ6IDAsXG5cdFx0XHRcdHJlc2VydmFibGU6IDAsXG5cdFx0XHR9LFxuXHRcdFx0Y3B1OiB7XG5cdFx0XHRcdGNvcmVzOiAwLFxuXHRcdFx0XHRzeXN0ZW1Mb2FkOiAwLFxuXHRcdFx0XHRsYXZhbGlua0xvYWQ6IDAsXG5cdFx0XHR9LFxuXHRcdFx0ZnJhbWVTdGF0czoge1xuXHRcdFx0XHRzZW50OiAwLFxuXHRcdFx0XHRudWxsZWQ6IDAsXG5cdFx0XHRcdGRlZmljaXQ6IDAsXG5cdFx0XHR9LFxuXHRcdH07XG5cblx0XHR0aGlzLm1hbmFnZXIubm9kZXMuc2V0KHRoaXMub3B0aW9ucy5pZGVudGlmaWVyLCB0aGlzKTtcblx0XHR0aGlzLm1hbmFnZXIuZW1pdChcIk5vZGVDcmVhdGVcIiwgdGhpcyk7XG5cdFx0dGhpcy5yZXN0ID0gbmV3IFJlc3QodGhpcyk7XG5cdH1cblxuXHQvKiogQ29ubmVjdHMgdG8gdGhlIE5vZGUuICovXG5cdHB1YmxpYyBjb25uZWN0KCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLmNvbm5lY3RlZCkgcmV0dXJuO1xuXG5cdFx0Y29uc3QgaGVhZGVycyA9IE9iamVjdC5hc3NpZ24oe1xuXHRcdFx0QXV0aG9yaXphdGlvbjogdGhpcy5vcHRpb25zLnBhc3N3b3JkLFxuXHRcdFx0XCJOdW0tU2hhcmRzXCI6IFN0cmluZyh0aGlzLm1hbmFnZXIub3B0aW9ucy5zaGFyZHMpLFxuXHRcdFx0XCJVc2VyLUlkXCI6IHRoaXMubWFuYWdlci5vcHRpb25zLmNsaWVudElkLFxuXHRcdFx0XCJDbGllbnQtTmFtZVwiOiB0aGlzLm1hbmFnZXIub3B0aW9ucy5jbGllbnROYW1lLFxuXHRcdH0pO1xuXG5cdFx0dGhpcy5zb2NrZXQgPSBuZXcgV2ViU29ja2V0KGB3cyR7dGhpcy5vcHRpb25zLnNlY3VyZSA/IFwic1wiIDogXCJcIn06Ly8ke3RoaXMuYWRkcmVzc30vdjQvd2Vic29ja2V0YCwgeyBoZWFkZXJzIH0pO1xuXHRcdHRoaXMuc29ja2V0Lm9uKFwib3BlblwiLCB0aGlzLm9wZW4uYmluZCh0aGlzKSk7XG5cdFx0dGhpcy5zb2NrZXQub24oXCJjbG9zZVwiLCB0aGlzLmNsb3NlLmJpbmQodGhpcykpO1xuXHRcdHRoaXMuc29ja2V0Lm9uKFwibWVzc2FnZVwiLCB0aGlzLm1lc3NhZ2UuYmluZCh0aGlzKSk7XG5cdFx0dGhpcy5zb2NrZXQub24oXCJlcnJvclwiLCB0aGlzLmVycm9yLmJpbmQodGhpcykpO1xuXHR9XG5cblx0LyoqIERlc3Ryb3lzIHRoZSBOb2RlIGFuZCBhbGwgcGxheWVycyBjb25uZWN0ZWQgd2l0aCBpdC4gKi9cblx0cHVibGljIGRlc3Ryb3koKTogdm9pZCB7XG5cdFx0aWYgKCF0aGlzLmNvbm5lY3RlZCkgcmV0dXJuO1xuXG5cdFx0Y29uc3QgcGxheWVycyA9IHRoaXMubWFuYWdlci5wbGF5ZXJzLmZpbHRlcigocCkgPT4gcC5ub2RlID09IHRoaXMpO1xuXHRcdGlmIChwbGF5ZXJzLnNpemUpIHBsYXllcnMuZm9yRWFjaCgocCkgPT4gcC5kZXN0cm95KCkpO1xuXG5cdFx0dGhpcy5zb2NrZXQuY2xvc2UoMTAwMCwgXCJkZXN0cm95XCIpO1xuXHRcdHRoaXMuc29ja2V0LnJlbW92ZUFsbExpc3RlbmVycygpO1xuXHRcdHRoaXMuc29ja2V0ID0gbnVsbDtcblxuXHRcdHRoaXMucmVjb25uZWN0QXR0ZW1wdHMgPSAxO1xuXHRcdGNsZWFyVGltZW91dCh0aGlzLnJlY29ubmVjdFRpbWVvdXQpO1xuXG5cdFx0dGhpcy5tYW5hZ2VyLmVtaXQoXCJOb2RlRGVzdHJveVwiLCB0aGlzKTtcblx0XHR0aGlzLm1hbmFnZXIuZGVzdHJveU5vZGUodGhpcy5vcHRpb25zLmlkZW50aWZpZXIpO1xuXHR9XG5cblx0cHJpdmF0ZSByZWNvbm5lY3QoKTogdm9pZCB7XG5cdFx0dGhpcy5yZWNvbm5lY3RUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5yZWNvbm5lY3RBdHRlbXB0cyA+PSB0aGlzLm9wdGlvbnMucmV0cnlBbW91bnQpIHtcblx0XHRcdFx0Y29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoYFVuYWJsZSB0byBjb25uZWN0IGFmdGVyICR7dGhpcy5vcHRpb25zLnJldHJ5QW1vdW50fSBhdHRlbXB0cy5gKTtcblxuXHRcdFx0XHR0aGlzLm1hbmFnZXIuZW1pdChcIk5vZGVFcnJvclwiLCB0aGlzLCBlcnJvcik7XG5cdFx0XHRcdHJldHVybiB0aGlzLmRlc3Ryb3koKTtcblx0XHRcdH1cblx0XHRcdHRoaXMuc29ja2V0Py5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcblx0XHRcdHRoaXMuc29ja2V0ID0gbnVsbDtcblx0XHRcdHRoaXMubWFuYWdlci5lbWl0KFwiTm9kZVJlY29ubmVjdFwiLCB0aGlzKTtcblx0XHRcdHRoaXMuY29ubmVjdCgpO1xuXHRcdFx0dGhpcy5yZWNvbm5lY3RBdHRlbXB0cysrO1xuXHRcdH0sIHRoaXMub3B0aW9ucy5yZXRyeURlbGF5KSBhcyB1bmtub3duIGFzIE5vZGVKUy5UaW1lb3V0O1xuXHR9XG5cblx0cHJvdGVjdGVkIG9wZW4oKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMucmVjb25uZWN0VGltZW91dCkgY2xlYXJUaW1lb3V0KHRoaXMucmVjb25uZWN0VGltZW91dCk7XG5cdFx0dGhpcy5tYW5hZ2VyLmVtaXQoXCJOb2RlQ29ubmVjdFwiLCB0aGlzKTtcblx0fVxuXG5cdHByb3RlY3RlZCBjbG9zZShjb2RlOiBudW1iZXIsIHJlYXNvbjogc3RyaW5nKTogdm9pZCB7XG5cdFx0dGhpcy5tYW5hZ2VyLmVtaXQoXCJOb2RlRGlzY29ubmVjdFwiLCB0aGlzLCB7IGNvZGUsIHJlYXNvbiB9KTtcblx0XHRpZiAoY29kZSAhPT0gMTAwMCB8fCByZWFzb24gIT09IFwiZGVzdHJveVwiKSB0aGlzLnJlY29ubmVjdCgpO1xuXHR9XG5cblx0cHJvdGVjdGVkIGVycm9yKGVycm9yOiBFcnJvcik6IHZvaWQge1xuXHRcdGlmICghZXJyb3IpIHJldHVybjtcblx0XHR0aGlzLm1hbmFnZXIuZW1pdChcIk5vZGVFcnJvclwiLCB0aGlzLCBlcnJvcik7XG5cdH1cblxuXHRwcm90ZWN0ZWQgbWVzc2FnZShkOiBCdWZmZXIgfCBzdHJpbmcpOiB2b2lkIHtcblx0XHRpZiAoQXJyYXkuaXNBcnJheShkKSkgZCA9IEJ1ZmZlci5jb25jYXQoZCk7XG5cdFx0ZWxzZSBpZiAoZCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSBkID0gQnVmZmVyLmZyb20oZCk7XG5cblx0XHRjb25zdCBwYXlsb2FkID0gSlNPTi5wYXJzZShkLnRvU3RyaW5nKCkpO1xuXG5cdFx0aWYgKCFwYXlsb2FkLm9wKSByZXR1cm47XG5cdFx0dGhpcy5tYW5hZ2VyLmVtaXQoXCJOb2RlUmF3XCIsIHBheWxvYWQpO1xuXG5cdFx0bGV0IHBsYXllcjogUGxheWVyO1xuXG5cdFx0c3dpdGNoIChwYXlsb2FkLm9wKSB7XG5cdFx0XHRjYXNlIFwic3RhdHNcIjpcblx0XHRcdFx0ZGVsZXRlIHBheWxvYWQub3A7XG5cdFx0XHRcdHRoaXMuc3RhdHMgPSB7IC4uLnBheWxvYWQgfSBhcyB1bmtub3duIGFzIE5vZGVTdGF0cztcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwicGxheWVyVXBkYXRlXCI6XG5cdFx0XHRcdHBsYXllciA9IHRoaXMubWFuYWdlci5wbGF5ZXJzLmdldChwYXlsb2FkLmd1aWxkSWQpO1xuXHRcdFx0XHRpZiAocGxheWVyKSBwbGF5ZXIucG9zaXRpb24gPSBwYXlsb2FkLnN0YXRlLnBvc2l0aW9uIHx8IDA7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcImV2ZW50XCI6XG5cdFx0XHRcdHRoaXMuaGFuZGxlRXZlbnQocGF5bG9hZCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcInJlYWR5XCI6XG5cdFx0XHRcdHRoaXMucmVzdC5zZXRTZXNzaW9uSWQocGF5bG9hZC5zZXNzaW9uSWQpO1xuXHRcdFx0XHR0aGlzLnNlc3Npb25JZCA9IHBheWxvYWQuc2Vzc2lvbklkO1xuXG5cdFx0XHRcdGlmICh0aGlzLm9wdGlvbnMucmVzdW1lU3RhdHVzKSB7XG5cdFx0XHRcdFx0dGhpcy5yZXN0LnBhdGNoKGAvdjQvc2Vzc2lvbnMvJHt0aGlzLnNlc3Npb25JZH1gLCB7XG5cdFx0XHRcdFx0XHRyZXN1bWluZzogdGhpcy5vcHRpb25zLnJlc3VtZVN0YXR1cyxcblx0XHRcdFx0XHRcdHRpbWVvdXQ6IHRoaXMub3B0aW9ucy5yZXN1bWVUaW1lb3V0LFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0dGhpcy5tYW5hZ2VyLmVtaXQoXCJOb2RlRXJyb3JcIiwgdGhpcywgbmV3IEVycm9yKGBVbmV4cGVjdGVkIG9wIFwiJHtwYXlsb2FkLm9wfVwiIHdpdGggZGF0YTogJHtwYXlsb2FkLm1lc3NhZ2V9YCkpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0fVxuXHR9XG5cblx0cHJvdGVjdGVkIGFzeW5jIGhhbmRsZUV2ZW50KHBheWxvYWQ6IFBsYXllckV2ZW50ICYgUGxheWVyRXZlbnRzKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKCFwYXlsb2FkLmd1aWxkSWQpIHJldHVybjtcblxuXHRcdGNvbnN0IHBsYXllciA9IHRoaXMubWFuYWdlci5wbGF5ZXJzLmdldChwYXlsb2FkLmd1aWxkSWQpO1xuXHRcdGlmICghcGxheWVyKSByZXR1cm47XG5cblx0XHRjb25zdCB0cmFjayA9IHBsYXllci5xdWV1ZS5jdXJyZW50O1xuXHRcdGNvbnN0IHR5cGUgPSBwYXlsb2FkLnR5cGU7XG5cblx0XHRsZXQgZXJyb3I6IEVycm9yO1xuXHRcdHN3aXRjaCAodHlwZSkge1xuXHRcdFx0Y2FzZSBcIlRyYWNrU3RhcnRFdmVudFwiOlxuXHRcdFx0XHR0aGlzLnRyYWNrU3RhcnQocGxheWVyLCB0cmFjayBhcyBUcmFjaywgcGF5bG9hZCk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIFwiVHJhY2tFbmRFdmVudFwiOlxuXHRcdFx0XHRpZiAocGxheWVyPy5ub3dQbGF5aW5nTWVzc2FnZSAmJiBwbGF5ZXI/Lm5vd1BsYXlpbmdNZXNzYWdlLmRlbGV0YWJsZSkge1xuXHRcdFx0XHRcdGF3YWl0IHBsYXllcj8ubm93UGxheWluZ01lc3NhZ2U/LmRlbGV0ZSgpLmNhdGNoKCgpID0+IHt9KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRoaXMudHJhY2tFbmQocGxheWVyLCB0cmFjayBhcyBUcmFjaywgcGF5bG9hZCk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIFwiVHJhY2tTdHVja0V2ZW50XCI6XG5cdFx0XHRcdHRoaXMudHJhY2tTdHVjayhwbGF5ZXIsIHRyYWNrIGFzIFRyYWNrLCBwYXlsb2FkKTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgXCJUcmFja0V4Y2VwdGlvbkV2ZW50XCI6XG5cdFx0XHRcdHRoaXMudHJhY2tFcnJvcihwbGF5ZXIsIHRyYWNrLCBwYXlsb2FkKTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgXCJXZWJTb2NrZXRDbG9zZWRFdmVudFwiOlxuXHRcdFx0XHR0aGlzLnNvY2tldENsb3NlZChwbGF5ZXIsIHBheWxvYWQpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0ZXJyb3IgPSBuZXcgRXJyb3IoYE5vZGUjZXZlbnQgdW5rbm93biBldmVudCAnJHt0eXBlfScuYCk7XG5cdFx0XHRcdHRoaXMubWFuYWdlci5lbWl0KFwiTm9kZUVycm9yXCIsIHRoaXMsIGVycm9yKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cblx0cHJvdGVjdGVkIHRyYWNrU3RhcnQocGxheWVyOiBQbGF5ZXIsIHRyYWNrOiBUcmFjaywgcGF5bG9hZDogVHJhY2tTdGFydEV2ZW50KTogdm9pZCB7XG5cdFx0cGxheWVyLnBsYXlpbmcgPSB0cnVlO1xuXHRcdHBsYXllci5wYXVzZWQgPSBmYWxzZTtcblx0XHR0aGlzLm1hbmFnZXIuZW1pdChcIlRyYWNrU3RhcnRcIiwgcGxheWVyLCB0cmFjaywgcGF5bG9hZCk7XG5cdH1cblxuXHRwcm90ZWN0ZWQgYXN5bmMgdHJhY2tFbmQocGxheWVyOiBQbGF5ZXIsIHRyYWNrOiBUcmFjaywgcGF5bG9hZDogVHJhY2tFbmRFdmVudCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IHsgcmVhc29uIH0gPSBwYXlsb2FkO1xuXG5cdFx0Ly8gSWYgdGhlIHRyYWNrIGZhaWxlZCB0byBsb2FkIG9yIHdhcyBjbGVhbmVkIHVwXG5cdFx0aWYgKFtcImxvYWRGYWlsZWRcIiwgXCJjbGVhbnVwXCJdLmluY2x1ZGVzKHJlYXNvbikpIHtcblx0XHRcdHRoaXMuaGFuZGxlRmFpbGVkVHJhY2socGxheWVyLCB0cmFjaywgcGF5bG9hZCk7XG5cdFx0fVxuXHRcdC8vIElmIHRoZSB0cmFjayB3YXMgZm9yY2libHkgcmVwbGFjZWRcblx0XHRlbHNlIGlmIChyZWFzb24gPT09IFwicmVwbGFjZWRcIikge1xuXHRcdFx0dGhpcy5tYW5hZ2VyLmVtaXQoXCJUcmFja0VuZFwiLCBwbGF5ZXIsIHRyYWNrLCBwYXlsb2FkKTtcblx0XHRcdHBsYXllci5xdWV1ZS5wcmV2aW91cyA9IHBsYXllci5xdWV1ZS5jdXJyZW50O1xuXHRcdH1cblx0XHQvLyBJZiB0aGUgdHJhY2sgZW5kZWQgYW5kIGl0J3Mgc2V0IHRvIHJlcGVhdCAodHJhY2sgb3IgcXVldWUpXG5cdFx0ZWxzZSBpZiAodHJhY2sgJiYgKHBsYXllci50cmFja1JlcGVhdCB8fCBwbGF5ZXIucXVldWVSZXBlYXQpKSB7XG5cdFx0XHR0aGlzLmhhbmRsZVJlcGVhdGVkVHJhY2socGxheWVyLCB0cmFjaywgcGF5bG9hZCk7XG5cdFx0fVxuXHRcdC8vIElmIHRoZXJlJ3MgYW5vdGhlciB0cmFjayBpbiB0aGUgcXVldWVcblx0XHRlbHNlIGlmIChwbGF5ZXIucXVldWUubGVuZ3RoKSB7XG5cdFx0XHR0aGlzLnBsYXlOZXh0VHJhY2socGxheWVyLCB0cmFjaywgcGF5bG9hZCk7XG5cdFx0fVxuXHRcdC8vIElmIHRoZXJlIGFyZSBubyBtb3JlIHRyYWNrcyBpbiB0aGUgcXVldWVcblx0XHRlbHNlIHtcblx0XHRcdGF3YWl0IHRoaXMucXVldWVFbmQocGxheWVyLCB0cmFjaywgcGF5bG9hZCk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIGV4dHJhY3RTcG90aWZ5VHJhY2tJRCh1cmw6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuXHRcdGNvbnN0IHJlZ2V4ID0gL2h0dHBzOlxcL1xcL29wZW5cXC5zcG90aWZ5XFwuY29tXFwvdHJhY2tcXC8oW2EtekEtWjAtOV0rKS87XG5cdFx0Y29uc3QgbWF0Y2ggPSB1cmwubWF0Y2gocmVnZXgpO1xuXHRcdHJldHVybiBtYXRjaCA/IG1hdGNoWzFdIDogbnVsbDtcblx0fVxuXG5cdHB1YmxpYyBleHRyYWN0U3BvdGlmeUFydGlzdElEKHVybDogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG5cdFx0Y29uc3QgcmVnZXggPSAvaHR0cHM6XFwvXFwvb3BlblxcLnNwb3RpZnlcXC5jb21cXC9hcnRpc3RcXC8oW2EtekEtWjAtOV0rKS87XG5cdFx0Y29uc3QgbWF0Y2ggPSB1cmwubWF0Y2gocmVnZXgpO1xuXHRcdHJldHVybiBtYXRjaCA/IG1hdGNoWzFdIDogbnVsbDtcblx0fVxuXG5cdC8vIEhhbmRsZSBhdXRvcGxheVxuXHRwcml2YXRlIGFzeW5jIGhhbmRsZUF1dG9wbGF5KHBsYXllcjogUGxheWVyLCB0cmFjazogVHJhY2spIHtcblx0XHRjb25zdCBwcmV2aW91c1RyYWNrID0gcGxheWVyLnF1ZXVlLnByZXZpb3VzO1xuXG5cdFx0aWYgKCFwbGF5ZXIuaXNBdXRvcGxheSB8fCAhcHJldmlvdXNUcmFjaykgcmV0dXJuO1xuXG5cdFx0Y29uc3QgaGFzU3BvdGlmeVVSTCA9IFtcInNwb3RpZnkuY29tXCIsIFwib3Blbi5zcG90aWZ5LmNvbVwiXS5zb21lKCh1cmwpID0+IHByZXZpb3VzVHJhY2sudXJpLmluY2x1ZGVzKHVybCkpO1xuXG5cdFx0aWYgKGhhc1Nwb3RpZnlVUkwpIHtcblx0XHRcdGNvbnN0IG5vZGUgPSB0aGlzLm1hbmFnZXIudXNlYWJsZU5vZGVzO1xuXG5cdFx0XHRjb25zdCByZXMgPSBhd2FpdCBub2RlLnJlc3QuZ2V0KGAvdjQvaW5mb2ApO1xuXHRcdFx0Y29uc3QgaW5mbyA9IHJlcyBhcyBMYXZhbGlua0luZm87XG5cblx0XHRcdGNvbnN0IGlzU3BvdGlmeVBsdWdpbkVuYWJsZWQgPSBpbmZvLnBsdWdpbnMuc29tZSgocGx1Z2luOiB7IG5hbWU6IHN0cmluZyB9KSA9PiBwbHVnaW4ubmFtZSA9PT0gXCJsYXZhc3JjLXBsdWdpblwiKTtcblx0XHRcdGNvbnN0IGlzU3BvdGlmeVNvdXJjZU1hbmFnZXJFbmFibGVkID0gaW5mby5zb3VyY2VNYW5hZ2Vycy5pbmNsdWRlcyhcInNwb3RpZnlcIik7XG5cblx0XHRcdGlmIChpc1Nwb3RpZnlQbHVnaW5FbmFibGVkICYmIGlzU3BvdGlmeVNvdXJjZU1hbmFnZXJFbmFibGVkKSB7XG5cdFx0XHRcdGNvbnN0IHRyYWNrSUQgPSB0aGlzLmV4dHJhY3RTcG90aWZ5VHJhY2tJRChwcmV2aW91c1RyYWNrLnVyaSk7XG5cdFx0XHRcdGNvbnN0IGFydGlzdElEID0gdGhpcy5leHRyYWN0U3BvdGlmeUFydGlzdElEKHByZXZpb3VzVHJhY2sucGx1Z2luSW5mby5hcnRpc3RVcmwpO1xuXG5cdFx0XHRcdGxldCBpZGVudGlmaWVyID0gXCJcIjtcblx0XHRcdFx0aWYgKHRyYWNrSUQgJiYgYXJ0aXN0SUQpIHtcblx0XHRcdFx0XHRpZGVudGlmaWVyID0gYHNwcmVjOnNlZWRfYXJ0aXN0cz0ke2FydGlzdElEfSZzZWVkX3RyYWNrcz0ke3RyYWNrSUR9YDtcblx0XHRcdFx0fSBlbHNlIGlmICh0cmFja0lEKSB7XG5cdFx0XHRcdFx0aWRlbnRpZmllciA9IGBzcHJlYzpzZWVkX3RyYWNrcz0ke3RyYWNrSUR9YDtcblx0XHRcdFx0fSBlbHNlIGlmIChhcnRpc3RJRCkge1xuXHRcdFx0XHRcdGlkZW50aWZpZXIgPSBgc3ByZWM6c2VlZF9hcnRpc3RzPSR7YXJ0aXN0SUR9YDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChpZGVudGlmaWVyKSB7XG5cdFx0XHRcdFx0Y29uc3QgcmVjb21tZW5kZWRSZXN1bHQgPSAoYXdhaXQgbm9kZS5yZXN0LmdldChgL3Y0L2xvYWR0cmFja3M/aWRlbnRpZmllcj0ke2VuY29kZVVSSUNvbXBvbmVudChpZGVudGlmaWVyKX1gKSkgYXMgTGF2YWxpbmtSZXNwb25zZTtcblxuXHRcdFx0XHRcdGlmIChyZWNvbW1lbmRlZFJlc3VsdC5sb2FkVHlwZSA9PT0gXCJwbGF5bGlzdFwiKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBwbGF5bGlzdERhdGEgPSByZWNvbW1lbmRlZFJlc3VsdC5kYXRhIGFzIFBsYXlsaXN0UmF3RGF0YTtcblx0XHRcdFx0XHRcdGNvbnN0IHJlY29tbWVuZGVkVHJhY2sgPSBwbGF5bGlzdERhdGEudHJhY2tzWzBdO1xuXG5cdFx0XHRcdFx0XHRpZiAocmVjb21tZW5kZWRUcmFjaykge1xuXHRcdFx0XHRcdFx0XHRwbGF5ZXIucXVldWUuYWRkKFRyYWNrVXRpbHMuYnVpbGQocmVjb21tZW5kZWRUcmFjaywgcGxheWVyLmdldChcIkludGVybmFsX0JvdFVzZXJcIikpKTtcblx0XHRcdFx0XHRcdFx0cGxheWVyLnBsYXkoKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGNvbnN0IGhhc1lvdVR1YmVVUkwgPSBbXCJ5b3V0dWJlLmNvbVwiLCBcInlvdXR1LmJlXCJdLnNvbWUoKHVybCkgPT4gcHJldmlvdXNUcmFjay51cmkuaW5jbHVkZXModXJsKSk7XG5cblx0XHRsZXQgdmlkZW9JRCA9IHByZXZpb3VzVHJhY2sudXJpLnN1YnN0cmluZyhwcmV2aW91c1RyYWNrLnVyaS5pbmRleE9mKFwiPVwiKSArIDEpO1xuXG5cdFx0aWYgKCFoYXNZb3VUdWJlVVJMKSB7XG5cdFx0XHRjb25zdCByZXMgPSBhd2FpdCBwbGF5ZXIuc2VhcmNoKGAke3ByZXZpb3VzVHJhY2suYXV0aG9yfSAtICR7cHJldmlvdXNUcmFjay50aXRsZX1gLCBwbGF5ZXIuZ2V0KFwiSW50ZXJuYWxfQm90VXNlclwiKSk7XG5cblx0XHRcdHZpZGVvSUQgPSByZXMudHJhY2tzWzBdLnVyaS5zdWJzdHJpbmcocmVzLnRyYWNrc1swXS51cmkuaW5kZXhPZihcIj1cIikgKyAxKTtcblx0XHR9XG5cblx0XHRsZXQgcmFuZG9tSW5kZXg6IG51bWJlcjtcblx0XHRsZXQgc2VhcmNoVVJJOiBzdHJpbmc7XG5cblx0XHRkbyB7XG5cdFx0XHRyYW5kb21JbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDIzKSArIDI7XG5cdFx0XHRzZWFyY2hVUkkgPSBgaHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj0ke3ZpZGVvSUR9Jmxpc3Q9UkQke3ZpZGVvSUR9JmluZGV4PSR7cmFuZG9tSW5kZXh9YDtcblx0XHR9IHdoaWxlICh0cmFjay51cmkuaW5jbHVkZXMoc2VhcmNoVVJJKSk7XG5cblx0XHRjb25zdCByZXMgPSBhd2FpdCBwbGF5ZXIuc2VhcmNoKHNlYXJjaFVSSSwgcGxheWVyLmdldChcIkludGVybmFsX0JvdFVzZXJcIikpO1xuXG5cdFx0aWYgKHJlcy5sb2FkVHlwZSA9PT0gXCJlbXB0eVwiIHx8IHJlcy5sb2FkVHlwZSA9PT0gXCJlcnJvclwiKSByZXR1cm47XG5cblx0XHRsZXQgdHJhY2tzID0gcmVzLnRyYWNrcztcblxuXHRcdGlmIChyZXMubG9hZFR5cGUgPT09IFwicGxheWxpc3RcIikge1xuXHRcdFx0dHJhY2tzID0gcmVzLnBsYXlsaXN0LnRyYWNrcztcblx0XHR9XG5cblx0XHRjb25zdCBmb3VuZFRyYWNrID0gdHJhY2tzLnNvcnQoKCkgPT4gTWF0aC5yYW5kb20oKSAtIDAuNSkuZmluZCgoc2h1ZmZsZWRUcmFjaykgPT4gc2h1ZmZsZWRUcmFjay51cmkgIT09IHRyYWNrLnVyaSk7XG5cblx0XHRpZiAoZm91bmRUcmFjaykge1xuXHRcdFx0aWYgKHRoaXMubWFuYWdlci5vcHRpb25zLnJlcGxhY2VZb3VUdWJlQ3JlZGVudGlhbHMpIHtcblx0XHRcdFx0Zm91bmRUcmFjay5hdXRob3IgPSBmb3VuZFRyYWNrLmF1dGhvci5yZXBsYWNlKFwiLSBUb3BpY1wiLCBcIlwiKTtcblx0XHRcdFx0Zm91bmRUcmFjay50aXRsZSA9IGZvdW5kVHJhY2sudGl0bGUucmVwbGFjZShcIlRvcGljIC1cIiwgXCJcIik7XG5cblx0XHRcdFx0aWYgKGZvdW5kVHJhY2sudGl0bGUuaW5jbHVkZXMoXCItXCIpKSB7XG5cdFx0XHRcdFx0Y29uc3QgW2F1dGhvciwgdGl0bGVdID0gZm91bmRUcmFjay50aXRsZS5zcGxpdChcIi1cIikubWFwKChzdHI6IHN0cmluZykgPT4gc3RyLnRyaW0oKSk7XG5cdFx0XHRcdFx0Zm91bmRUcmFjay5hdXRob3IgPSBhdXRob3I7XG5cdFx0XHRcdFx0Zm91bmRUcmFjay50aXRsZSA9IHRpdGxlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRwbGF5ZXIucXVldWUuYWRkKGZvdW5kVHJhY2spO1xuXHRcdFx0cGxheWVyLnBsYXkoKTtcblx0XHR9XG5cdH1cblxuXHQvLyBIYW5kbGUgdGhlIGNhc2Ugd2hlbiBhIHRyYWNrIGZhaWxlZCB0byBsb2FkIG9yIHdhcyBjbGVhbmVkIHVwXG5cdHByaXZhdGUgaGFuZGxlRmFpbGVkVHJhY2socGxheWVyOiBQbGF5ZXIsIHRyYWNrOiBUcmFjaywgcGF5bG9hZDogVHJhY2tFbmRFdmVudCk6IHZvaWQge1xuXHRcdHBsYXllci5xdWV1ZS5wcmV2aW91cyA9IHBsYXllci5xdWV1ZS5jdXJyZW50O1xuXHRcdHBsYXllci5xdWV1ZS5jdXJyZW50ID0gcGxheWVyLnF1ZXVlLnNoaWZ0KCk7XG5cblx0XHRpZiAoIXBsYXllci5xdWV1ZS5jdXJyZW50KSB7XG5cdFx0XHR0aGlzLnF1ZXVlRW5kKHBsYXllciwgdHJhY2ssIHBheWxvYWQpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMubWFuYWdlci5lbWl0KFwiVHJhY2tFbmRcIiwgcGxheWVyLCB0cmFjaywgcGF5bG9hZCk7XG5cdFx0aWYgKHRoaXMubWFuYWdlci5vcHRpb25zLmF1dG9QbGF5KSBwbGF5ZXIucGxheSgpO1xuXHR9XG5cblx0Ly8gSGFuZGxlIHRoZSBjYXNlIHdoZW4gYSB0cmFjayBlbmRlZCBhbmQgaXQncyBzZXQgdG8gcmVwZWF0ICh0cmFjayBvciBxdWV1ZSlcblx0cHJpdmF0ZSBoYW5kbGVSZXBlYXRlZFRyYWNrKHBsYXllcjogUGxheWVyLCB0cmFjazogVHJhY2ssIHBheWxvYWQ6IFRyYWNrRW5kRXZlbnQpOiB2b2lkIHtcblx0XHRjb25zdCB7IHF1ZXVlLCB0cmFja1JlcGVhdCwgcXVldWVSZXBlYXQgfSA9IHBsYXllcjtcblx0XHRjb25zdCB7IGF1dG9QbGF5IH0gPSB0aGlzLm1hbmFnZXIub3B0aW9ucztcblxuXHRcdGlmICh0cmFja1JlcGVhdCkge1xuXHRcdFx0cXVldWUudW5zaGlmdChxdWV1ZS5jdXJyZW50KTtcblx0XHR9IGVsc2UgaWYgKHF1ZXVlUmVwZWF0KSB7XG5cdFx0XHRxdWV1ZS5hZGQocXVldWUuY3VycmVudCk7XG5cdFx0fVxuXG5cdFx0cXVldWUucHJldmlvdXMgPSBxdWV1ZS5jdXJyZW50O1xuXHRcdHF1ZXVlLmN1cnJlbnQgPSBxdWV1ZS5zaGlmdCgpO1xuXG5cdFx0dGhpcy5tYW5hZ2VyLmVtaXQoXCJUcmFja0VuZFwiLCBwbGF5ZXIsIHRyYWNrLCBwYXlsb2FkKTtcblxuXHRcdGlmIChwYXlsb2FkLnJlYXNvbiA9PT0gXCJzdG9wcGVkXCIgJiYgIShxdWV1ZS5jdXJyZW50ID0gcXVldWUuc2hpZnQoKSkpIHtcblx0XHRcdHRoaXMucXVldWVFbmQocGxheWVyLCB0cmFjaywgcGF5bG9hZCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKGF1dG9QbGF5KSBwbGF5ZXIucGxheSgpO1xuXHR9XG5cblx0Ly8gSGFuZGxlIHRoZSBjYXNlIHdoZW4gdGhlcmUncyBhbm90aGVyIHRyYWNrIGluIHRoZSBxdWV1ZVxuXHRwcml2YXRlIHBsYXlOZXh0VHJhY2socGxheWVyOiBQbGF5ZXIsIHRyYWNrOiBUcmFjaywgcGF5bG9hZDogVHJhY2tFbmRFdmVudCk6IHZvaWQge1xuXHRcdHBsYXllci5xdWV1ZS5wcmV2aW91cyA9IHBsYXllci5xdWV1ZS5jdXJyZW50O1xuXHRcdHBsYXllci5xdWV1ZS5jdXJyZW50ID0gcGxheWVyLnF1ZXVlLnNoaWZ0KCk7XG5cblx0XHR0aGlzLm1hbmFnZXIuZW1pdChcIlRyYWNrRW5kXCIsIHBsYXllciwgdHJhY2ssIHBheWxvYWQpO1xuXHRcdGlmICh0aGlzLm1hbmFnZXIub3B0aW9ucy5hdXRvUGxheSkgcGxheWVyLnBsYXkoKTtcblx0fVxuXG5cdHByb3RlY3RlZCBhc3luYyBxdWV1ZUVuZChwbGF5ZXI6IFBsYXllciwgdHJhY2s6IFRyYWNrLCBwYXlsb2FkOiBUcmFja0VuZEV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0cGxheWVyLnF1ZXVlLnByZXZpb3VzID0gcGxheWVyLnF1ZXVlLmN1cnJlbnQ7XG5cdFx0cGxheWVyLnF1ZXVlLmN1cnJlbnQgPSBudWxsO1xuXG5cdFx0aWYgKCFwbGF5ZXIuaXNBdXRvcGxheSkge1xuXHRcdFx0cGxheWVyLnF1ZXVlLnByZXZpb3VzID0gcGxheWVyLnF1ZXVlLmN1cnJlbnQ7XG5cdFx0XHRwbGF5ZXIucXVldWUuY3VycmVudCA9IG51bGw7XG5cdFx0XHRwbGF5ZXIucGxheWluZyA9IGZhbHNlO1xuXHRcdFx0dGhpcy5tYW5hZ2VyLmVtaXQoXCJRdWV1ZUVuZFwiLCBwbGF5ZXIsIHRyYWNrLCBwYXlsb2FkKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRhd2FpdCB0aGlzLmhhbmRsZUF1dG9wbGF5KHBsYXllciwgdHJhY2spO1xuXHR9XG5cblx0cHJvdGVjdGVkIHRyYWNrU3R1Y2socGxheWVyOiBQbGF5ZXIsIHRyYWNrOiBUcmFjaywgcGF5bG9hZDogVHJhY2tTdHVja0V2ZW50KTogdm9pZCB7XG5cdFx0cGxheWVyLnN0b3AoKTtcblx0XHR0aGlzLm1hbmFnZXIuZW1pdChcIlRyYWNrU3R1Y2tcIiwgcGxheWVyLCB0cmFjaywgcGF5bG9hZCk7XG5cdH1cblxuXHRwcm90ZWN0ZWQgdHJhY2tFcnJvcihwbGF5ZXI6IFBsYXllciwgdHJhY2s6IFRyYWNrIHwgVW5yZXNvbHZlZFRyYWNrLCBwYXlsb2FkOiBUcmFja0V4Y2VwdGlvbkV2ZW50KTogdm9pZCB7XG5cdFx0cGxheWVyLnN0b3AoKTtcblx0XHR0aGlzLm1hbmFnZXIuZW1pdChcIlRyYWNrRXJyb3JcIiwgcGxheWVyLCB0cmFjaywgcGF5bG9hZCk7XG5cdH1cblxuXHRwcm90ZWN0ZWQgc29ja2V0Q2xvc2VkKHBsYXllcjogUGxheWVyLCBwYXlsb2FkOiBXZWJTb2NrZXRDbG9zZWRFdmVudCk6IHZvaWQge1xuXHRcdHRoaXMubWFuYWdlci5lbWl0KFwiU29ja2V0Q2xvc2VkXCIsIHBsYXllciwgcGF5bG9hZCk7XG5cdH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBOb2RlT3B0aW9ucyB7XG5cdC8qKiBUaGUgaG9zdCBmb3IgdGhlIG5vZGUuICovXG5cdGhvc3Q6IHN0cmluZztcblx0LyoqIFRoZSBwb3J0IGZvciB0aGUgbm9kZS4gKi9cblx0cG9ydD86IG51bWJlcjtcblx0LyoqIFRoZSBwYXNzd29yZCBmb3IgdGhlIG5vZGUuICovXG5cdHBhc3N3b3JkPzogc3RyaW5nO1xuXHQvKiogV2hldGhlciB0aGUgaG9zdCB1c2VzIFNTTC4gKi9cblx0c2VjdXJlPzogYm9vbGVhbjtcblx0LyoqIFRoZSBpZGVudGlmaWVyIGZvciB0aGUgbm9kZS4gKi9cblx0aWRlbnRpZmllcj86IHN0cmluZztcblx0LyoqIFRoZSByZXRyeUFtb3VudCBmb3IgdGhlIG5vZGUuICovXG5cdHJldHJ5QW1vdW50PzogbnVtYmVyO1xuXHQvKiogVGhlIHJldHJ5RGVsYXkgZm9yIHRoZSBub2RlLiAqL1xuXHRyZXRyeURlbGF5PzogbnVtYmVyO1xuXHQvKiogV2hldGhlciB0byByZXN1bWUgdGhlIHByZXZpb3VzIHNlc3Npb24uICovXG5cdHJlc3VtZVN0YXR1cz86IGJvb2xlYW47XG5cdC8qKiBUaGUgdGltZSB0aGUgbWFuYWdlciB3aWxsIHdhaXQgYmVmb3JlIHRyeWluZyB0byByZXN1bWUgdGhlIHByZXZpb3VzIHNlc3Npb24uICovXG5cdHJlc3VtZVRpbWVvdXQ/OiBudW1iZXI7XG5cdC8qKiBUaGUgdGltZW91dCB1c2VkIGZvciBhcGkgY2FsbHMuICovXG5cdHJlcXVlc3RUaW1lb3V0PzogbnVtYmVyO1xuXHQvKiogUHJpb3JpdHkgb2YgdGhlIG5vZGUuICovXG5cdHByaW9yaXR5PzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5vZGVTdGF0cyB7XG5cdC8qKiBUaGUgYW1vdW50IG9mIHBsYXllcnMgb24gdGhlIG5vZGUuICovXG5cdHBsYXllcnM6IG51bWJlcjtcblx0LyoqIFRoZSBhbW91bnQgb2YgcGxheWluZyBwbGF5ZXJzIG9uIHRoZSBub2RlLiAqL1xuXHRwbGF5aW5nUGxheWVyczogbnVtYmVyO1xuXHQvKiogVGhlIHVwdGltZSBmb3IgdGhlIG5vZGUuICovXG5cdHVwdGltZTogbnVtYmVyO1xuXHQvKiogVGhlIG1lbW9yeSBzdGF0cyBmb3IgdGhlIG5vZGUuICovXG5cdG1lbW9yeTogTWVtb3J5U3RhdHM7XG5cdC8qKiBUaGUgY3B1IHN0YXRzIGZvciB0aGUgbm9kZS4gKi9cblx0Y3B1OiBDUFVTdGF0cztcblx0LyoqIFRoZSBmcmFtZSBzdGF0cyBmb3IgdGhlIG5vZGUuICovXG5cdGZyYW1lU3RhdHM6IEZyYW1lU3RhdHM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVtb3J5U3RhdHMge1xuXHQvKiogVGhlIGZyZWUgbWVtb3J5IG9mIHRoZSBhbGxvY2F0ZWQgYW1vdW50LiAqL1xuXHRmcmVlOiBudW1iZXI7XG5cdC8qKiBUaGUgdXNlZCBtZW1vcnkgb2YgdGhlIGFsbG9jYXRlZCBhbW91bnQuICovXG5cdHVzZWQ6IG51bWJlcjtcblx0LyoqIFRoZSB0b3RhbCBhbGxvY2F0ZWQgbWVtb3J5LiAqL1xuXHRhbGxvY2F0ZWQ6IG51bWJlcjtcblx0LyoqIFRoZSByZXNlcnZhYmxlIG1lbW9yeS4gKi9cblx0cmVzZXJ2YWJsZTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENQVVN0YXRzIHtcblx0LyoqIFRoZSBjb3JlIGFtb3VudCB0aGUgaG9zdCBtYWNoaW5lIGhhcy4gKi9cblx0Y29yZXM6IG51bWJlcjtcblx0LyoqIFRoZSBzeXN0ZW0gbG9hZC4gKi9cblx0c3lzdGVtTG9hZDogbnVtYmVyO1xuXHQvKiogVGhlIGxhdmFsaW5rIGxvYWQuICovXG5cdGxhdmFsaW5rTG9hZDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZyYW1lU3RhdHMge1xuXHQvKiogVGhlIGFtb3VudCBvZiBzZW50IGZyYW1lcy4gKi9cblx0c2VudD86IG51bWJlcjtcblx0LyoqIFRoZSBhbW91bnQgb2YgbnVsbGVkIGZyYW1lcy4gKi9cblx0bnVsbGVkPzogbnVtYmVyO1xuXHQvKiogVGhlIGFtb3VudCBvZiBkZWZpY2l0IGZyYW1lcy4gKi9cblx0ZGVmaWNpdD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMYXZhbGlua0luZm8ge1xuXHR2ZXJzaW9uOiB7IHNlbXZlcjogc3RyaW5nOyBtYWpvcjogbnVtYmVyOyBtaW5vcjogbnVtYmVyOyBwYXRjaDogbnVtYmVyOyBwcmVSZWxlYXNlOiBzdHJpbmcgfTtcblx0YnVpbGRUaW1lOiBudW1iZXI7XG5cdGdpdDogeyBicmFuY2g6IHN0cmluZzsgY29tbWl0OiBzdHJpbmc7IGNvbW1pdFRpbWU6IG51bWJlciB9O1xuXHRqdm06IHN0cmluZztcblx0bGF2YXBsYXllcjogc3RyaW5nO1xuXHRzb3VyY2VNYW5hZ2Vyczogc3RyaW5nW107XG5cdGZpbHRlcnM6IHN0cmluZ1tdO1xuXHRwbHVnaW5zOiB7IG5hbWU6IHN0cmluZzsgdmVyc2lvbjogc3RyaW5nIH1bXTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQUEsTUFBQSxHQUFBQyxP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
|