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.
@@ -0,0 +1,580 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.Manager = void 0;
7
+ var _Utils = require("./Utils");
8
+ var _collection = require("@discordjs/collection");
9
+ var _ManagerCheck = _interopRequireDefault(require("../Utils/ManagerCheck"));
10
+ var _tinyTypedEmitter = require("tiny-typed-emitter");
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 _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; }
14
+ 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); }
15
+ 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); }); }; }
16
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
17
+ 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."); }
18
+ 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; } }
19
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
20
+ function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
21
+ 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; } }
22
+ 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; }
23
+ 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; }
24
+ 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; }
25
+ function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
26
+ 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); } }
27
+ function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
28
+ function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
29
+ function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }
30
+ function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
31
+ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
32
+ function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
33
+ function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }
34
+ function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
35
+ 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; }
36
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
37
+ 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); } /* eslint-disable no-async-promise-executor */
38
+ /**
39
+ * The main hub for interacting with Lavalink and using Magmastream,
40
+ */
41
+ var Manager = exports.Manager = /*#__PURE__*/function (_TypedEmitter) {
42
+ /**
43
+ * Initiates the Manager class.
44
+ * @param options
45
+ */
46
+ function Manager(options) {
47
+ var _this;
48
+ _classCallCheck(this, Manager);
49
+ _this = _callSuper(this, Manager);
50
+ /** The map of players. */
51
+ _defineProperty(_this, "players", new _collection.Collection());
52
+ /** The map of nodes. */
53
+ _defineProperty(_this, "nodes", new _collection.Collection());
54
+ _defineProperty(_this, "initiated", false);
55
+ _defineProperty(_this, "caches", new _collection.Collection());
56
+ (0, _ManagerCheck["default"])(options);
57
+ _Utils.Structure.get("Player").init(_this);
58
+ _Utils.Structure.get("Node").init(_this);
59
+ _Utils.TrackUtils.init(_this);
60
+ if (options.trackPartial) {
61
+ _Utils.TrackUtils.setTrackPartial(options.trackPartial);
62
+ delete options.trackPartial;
63
+ }
64
+ _this.options = _objectSpread({
65
+ plugins: [],
66
+ nodes: [{
67
+ identifier: "default",
68
+ host: "localhost",
69
+ resumeStatus: false,
70
+ resumeTimeout: 1000
71
+ }],
72
+ shards: 1,
73
+ autoPlay: true,
74
+ usePriority: false,
75
+ clientName: "For v3.0",
76
+ defaultSearchPlatform: "youtube",
77
+ useNode: "leastPlayers"
78
+ }, options);
79
+ if (_this.options.plugins) {
80
+ var _iterator = _createForOfIteratorHelper(_this.options.plugins.entries()),
81
+ _step;
82
+ try {
83
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
84
+ var _step$value = _slicedToArray(_step.value, 2),
85
+ index = _step$value[0],
86
+ plugin = _step$value[1];
87
+ if (!(plugin instanceof _Utils.Plugin)) throw new RangeError("Plugin at index ".concat(index, " does not extend Plugin."));
88
+ plugin.load(_this);
89
+ }
90
+ } catch (err) {
91
+ _iterator.e(err);
92
+ } finally {
93
+ _iterator.f();
94
+ }
95
+ }
96
+ if (_this.options.nodes) {
97
+ var _iterator2 = _createForOfIteratorHelper(_this.options.nodes),
98
+ _step2;
99
+ try {
100
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
101
+ var nodeOptions = _step2.value;
102
+ var node = new (_Utils.Structure.get("Node"))(nodeOptions);
103
+ _this.nodes.set(node.options.identifier, node);
104
+ }
105
+ } catch (err) {
106
+ _iterator2.e(err);
107
+ } finally {
108
+ _iterator2.f();
109
+ }
110
+ }
111
+ setInterval(function () {
112
+ _this.caches.clear();
113
+ }, _this.options.caches.time);
114
+ return _this;
115
+ }
116
+
117
+ /**
118
+ * Initiates the Manager.
119
+ * @param clientId
120
+ */
121
+ _inherits(Manager, _TypedEmitter);
122
+ return _createClass(Manager, [{
123
+ key: "leastLoadNode",
124
+ get: /** Returns the nodes that has the least load. */
125
+ function get() {
126
+ return this.nodes.filter(function (node) {
127
+ return node.connected;
128
+ }).sort(function (a, b) {
129
+ var aload = a.stats.cpu ? a.stats.cpu.lavalinkLoad / a.stats.cpu.cores * 100 : 0;
130
+ var bload = b.stats.cpu ? b.stats.cpu.lavalinkLoad / b.stats.cpu.cores * 100 : 0;
131
+ return aload - bload;
132
+ });
133
+ }
134
+
135
+ /** Returns the nodes that has the least amount of players. */
136
+ }, {
137
+ key: "leastPlayersNode",
138
+ get: function get() {
139
+ return this.nodes.filter(function (node) {
140
+ return node.connected;
141
+ }).sort(function (a, b) {
142
+ return a.stats.players - b.stats.players;
143
+ });
144
+ }
145
+
146
+ /** Returns a node based on priority. */
147
+ }, {
148
+ key: "priorityNode",
149
+ get: function get() {
150
+ var filteredNodes = this.nodes.filter(function (node) {
151
+ return node.connected && node.options.priority > 0;
152
+ });
153
+ var totalWeight = filteredNodes.reduce(function (total, node) {
154
+ return total + node.options.priority;
155
+ }, 0);
156
+ var weightedNodes = filteredNodes.map(function (node) {
157
+ return {
158
+ node: node,
159
+ weight: node.options.priority / totalWeight
160
+ };
161
+ });
162
+ var randomNumber = Math.random();
163
+ var cumulativeWeight = 0;
164
+ var _iterator3 = _createForOfIteratorHelper(weightedNodes),
165
+ _step3;
166
+ try {
167
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
168
+ var _step3$value = _step3.value,
169
+ node = _step3$value.node,
170
+ weight = _step3$value.weight;
171
+ cumulativeWeight += weight;
172
+ if (randomNumber <= cumulativeWeight) {
173
+ return node;
174
+ }
175
+ }
176
+ } catch (err) {
177
+ _iterator3.e(err);
178
+ } finally {
179
+ _iterator3.f();
180
+ }
181
+ return this.options.useNode === "leastLoad" ? this.leastLoadNode.first() : this.leastPlayersNode.first();
182
+ }
183
+
184
+ /** Returns the node to use. */
185
+ }, {
186
+ key: "useableNodes",
187
+ get: function get() {
188
+ return this.options.usePriority ? this.priorityNode : this.options.useNode === "leastLoad" ? this.leastLoadNode.first() : this.leastPlayersNode.first();
189
+ }
190
+ }, {
191
+ key: "init",
192
+ value: function init(clientId) {
193
+ if (this.initiated) return this;
194
+ if (typeof clientId !== "undefined") this.options.clientId = clientId;
195
+ if (typeof this.options.clientId !== "string") throw new Error('"clientId" set is not type of "string"');
196
+ if (!this.options.clientId) throw new Error('"clientId" is not set. Pass it in Manager#init() or as a option in the constructor.');
197
+ var _iterator4 = _createForOfIteratorHelper(this.nodes.values()),
198
+ _step4;
199
+ try {
200
+ for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
201
+ var node = _step4.value;
202
+ try {
203
+ node.connect();
204
+ } catch (err) {
205
+ this.emit("NodeError", node, err);
206
+ }
207
+ }
208
+ } catch (err) {
209
+ _iterator4.e(err);
210
+ } finally {
211
+ _iterator4.f();
212
+ }
213
+ this.initiated = true;
214
+ return this;
215
+ }
216
+
217
+ /**
218
+ * Searches the enabled sources based off the URL or the `source` property.
219
+ * @param query
220
+ * @param requester
221
+ * @returns The search result.
222
+ */
223
+ }, {
224
+ key: "search",
225
+ value: (function () {
226
+ var _search = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(query, requester) {
227
+ var _Manager$DEFAULT_SOUR, _query$source;
228
+ var node, data, _query, _source, search, res, searchData, playlistData, tracks, playlist, result, tracksToReplace, _iterator5, _step5, track, _track$title$split$ma, _track$title$split$ma2, author, title, isYouTubeURL;
229
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
230
+ while (1) switch (_context.prev = _context.next) {
231
+ case 0:
232
+ isYouTubeURL = function _isYouTubeURL(uri) {
233
+ return uri.includes("youtube.com") || uri.includes("youtu.be");
234
+ };
235
+ node = this.useableNodes;
236
+ if (node) {
237
+ _context.next = 4;
238
+ break;
239
+ }
240
+ throw new Error("No available nodes.");
241
+ case 4:
242
+ if (!(this.options.caches.enabled && this.options.caches.time > 0 && typeof query === "string")) {
243
+ _context.next = 8;
244
+ break;
245
+ }
246
+ data = this.caches.get(query);
247
+ if (!data) {
248
+ _context.next = 8;
249
+ break;
250
+ }
251
+ return _context.abrupt("return", data);
252
+ case 8:
253
+ _query = typeof query === "string" ? {
254
+ query: query
255
+ } : query;
256
+ _source = (_Manager$DEFAULT_SOUR = Manager.DEFAULT_SOURCES[(_query$source = _query.source) !== null && _query$source !== void 0 ? _query$source : this.options.defaultSearchPlatform]) !== null && _Manager$DEFAULT_SOUR !== void 0 ? _Manager$DEFAULT_SOUR : _query.source;
257
+ search = _query.query;
258
+ if (!/^https?:\/\//.test(search)) {
259
+ search = "".concat(_source, ":").concat(search);
260
+ }
261
+ _context.prev = 12;
262
+ _context.next = 15;
263
+ return node.rest.get("/v4/loadtracks?identifier=".concat(encodeURIComponent(search)));
264
+ case 15:
265
+ res = _context.sent;
266
+ if (res) {
267
+ _context.next = 18;
268
+ break;
269
+ }
270
+ throw new Error("Query not found.");
271
+ case 18:
272
+ searchData = [];
273
+ _context.t0 = res.loadType;
274
+ _context.next = _context.t0 === "search" ? 22 : _context.t0 === "track" ? 24 : _context.t0 === "playlist" ? 26 : 28;
275
+ break;
276
+ case 22:
277
+ searchData = res.data;
278
+ return _context.abrupt("break", 28);
279
+ case 24:
280
+ searchData = [res.data];
281
+ return _context.abrupt("break", 28);
282
+ case 26:
283
+ playlistData = res.data;
284
+ return _context.abrupt("break", 28);
285
+ case 28:
286
+ tracks = searchData.map(function (track) {
287
+ return _Utils.TrackUtils.build(track, requester);
288
+ });
289
+ playlist = null;
290
+ if (res.loadType === "playlist") {
291
+ playlist = {
292
+ name: playlistData.info.name,
293
+ tracks: playlistData.tracks.map(function (track) {
294
+ return _Utils.TrackUtils.build(track, requester);
295
+ }),
296
+ duration: playlistData.tracks.reduce(function (acc, cur) {
297
+ return acc + (cur.info.length || 0);
298
+ }, 0)
299
+ };
300
+ }
301
+ result = {
302
+ loadType: res.loadType,
303
+ tracks: tracks,
304
+ playlist: playlist
305
+ };
306
+ if (this.options.replaceYouTubeCredentials) {
307
+ tracksToReplace = [];
308
+ if (result.loadType === "playlist") {
309
+ tracksToReplace = result.playlist.tracks;
310
+ } else {
311
+ tracksToReplace = result.tracks;
312
+ }
313
+ _iterator5 = _createForOfIteratorHelper(tracksToReplace);
314
+ try {
315
+ for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
316
+ track = _step5.value;
317
+ if (isYouTubeURL(track.uri)) {
318
+ track.author = track.author.replace("- Topic", "");
319
+ track.title = track.title.replace("Topic -", "");
320
+ }
321
+ if (track.title.includes("-")) {
322
+ _track$title$split$ma = track.title.split("-").map(function (str) {
323
+ return str.trim();
324
+ }), _track$title$split$ma2 = _slicedToArray(_track$title$split$ma, 2), author = _track$title$split$ma2[0], title = _track$title$split$ma2[1];
325
+ track.author = author;
326
+ track.title = title;
327
+ }
328
+ }
329
+ } catch (err) {
330
+ _iterator5.e(err);
331
+ } finally {
332
+ _iterator5.f();
333
+ }
334
+ }
335
+ if (this.options.caches.enabled && this.options.caches.time > 0) this.caches.set(search, result);
336
+ return _context.abrupt("return", result);
337
+ case 37:
338
+ _context.prev = 37;
339
+ _context.t1 = _context["catch"](12);
340
+ throw new Error(_context.t1);
341
+ case 40:
342
+ case "end":
343
+ return _context.stop();
344
+ }
345
+ }, _callee, this, [[12, 37]]);
346
+ }));
347
+ function search(_x, _x2) {
348
+ return _search.apply(this, arguments);
349
+ }
350
+ return search;
351
+ }()
352
+ /**
353
+ * Decodes the base64 encoded tracks and returns a TrackData array.
354
+ * @param tracks
355
+ */
356
+ )
357
+ }, {
358
+ key: "decodeTracks",
359
+ value: function decodeTracks(tracks) {
360
+ var _this2 = this;
361
+ return new Promise(/*#__PURE__*/function () {
362
+ var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(resolve, reject) {
363
+ var node;
364
+ return _regeneratorRuntime().wrap(function _callee2$(_context2) {
365
+ while (1) switch (_context2.prev = _context2.next) {
366
+ case 0:
367
+ node = _this2.nodes.first();
368
+ if (node) {
369
+ _context2.next = 3;
370
+ break;
371
+ }
372
+ return _context2.abrupt("return", reject(new Error("No available nodes.")));
373
+ case 3:
374
+ _context2.next = 5;
375
+ return node.rest.post("/v4/decodetracks", JSON.stringify(tracks)).then(function (res) {
376
+ if (!res) return reject(new Error("No data returned from query."));
377
+ resolve(res);
378
+ })["catch"](function (err) {
379
+ return reject(err);
380
+ });
381
+ case 5:
382
+ case "end":
383
+ return _context2.stop();
384
+ }
385
+ }, _callee2);
386
+ }));
387
+ return function (_x3, _x4) {
388
+ return _ref.apply(this, arguments);
389
+ };
390
+ }());
391
+ }
392
+
393
+ /**
394
+ * Decodes the base64 encoded track and returns a TrackData.
395
+ * @param track
396
+ */
397
+ }, {
398
+ key: "decodeTrack",
399
+ value: (function () {
400
+ var _decodeTrack = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3(track) {
401
+ var res;
402
+ return _regeneratorRuntime().wrap(function _callee3$(_context3) {
403
+ while (1) switch (_context3.prev = _context3.next) {
404
+ case 0:
405
+ _context3.next = 2;
406
+ return this.decodeTracks([track]);
407
+ case 2:
408
+ res = _context3.sent;
409
+ return _context3.abrupt("return", res[0]);
410
+ case 4:
411
+ case "end":
412
+ return _context3.stop();
413
+ }
414
+ }, _callee3, this);
415
+ }));
416
+ function decodeTrack(_x5) {
417
+ return _decodeTrack.apply(this, arguments);
418
+ }
419
+ return decodeTrack;
420
+ }()
421
+ /**
422
+ * Creates a player or returns one if it already exists.
423
+ * @param options
424
+ */
425
+ )
426
+ }, {
427
+ key: "create",
428
+ value: function create(options) {
429
+ if (this.players.has(options.guild)) {
430
+ return this.players.get(options.guild);
431
+ }
432
+ return new (_Utils.Structure.get("Player"))(options);
433
+ }
434
+
435
+ /**
436
+ * Returns a player or undefined if it does not exist.
437
+ * @param guild
438
+ */
439
+ }, {
440
+ key: "get",
441
+ value: function get(guild) {
442
+ return this.players.get(guild);
443
+ }
444
+
445
+ /**
446
+ * Destroys a player if it exists.
447
+ * @param guild
448
+ */
449
+ }, {
450
+ key: "destroy",
451
+ value: function destroy(guild) {
452
+ this.players["delete"](guild);
453
+ }
454
+
455
+ /**
456
+ * Creates a node or returns one if it already exists.
457
+ * @param options
458
+ */
459
+ }, {
460
+ key: "createNode",
461
+ value: function createNode(options) {
462
+ if (this.nodes.has(options.identifier || options.host)) {
463
+ return this.nodes.get(options.identifier || options.host);
464
+ }
465
+ return new (_Utils.Structure.get("Node"))(options);
466
+ }
467
+
468
+ /**
469
+ * Destroys a node if it exists.
470
+ * @param identifier
471
+ */
472
+ }, {
473
+ key: "destroyNode",
474
+ value: function destroyNode(identifier) {
475
+ var node = this.nodes.get(identifier);
476
+ if (!node) return;
477
+ node.destroy();
478
+ this.nodes["delete"](identifier);
479
+ }
480
+
481
+ /**
482
+ * Sends voice data to the Lavalink server.
483
+ * @param data
484
+ */
485
+ }, {
486
+ key: "updateVoiceState",
487
+ value: (function () {
488
+ var _updateVoiceState = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee4(data) {
489
+ var update, player, _player$voiceState, sessionId, _player$voiceState$ev, token, endpoint;
490
+ return _regeneratorRuntime().wrap(function _callee4$(_context4) {
491
+ while (1) switch (_context4.prev = _context4.next) {
492
+ case 0:
493
+ if (!("t" in data && !["VOICE_STATE_UPDATE", "VOICE_SERVER_UPDATE"].includes(data.t))) {
494
+ _context4.next = 2;
495
+ break;
496
+ }
497
+ return _context4.abrupt("return");
498
+ case 2:
499
+ update = "d" in data ? data.d : data;
500
+ if (!(!update || !("token" in update) && !("session_id" in update))) {
501
+ _context4.next = 5;
502
+ break;
503
+ }
504
+ return _context4.abrupt("return");
505
+ case 5:
506
+ player = this.players.get(update.guild_id);
507
+ if (player) {
508
+ _context4.next = 8;
509
+ break;
510
+ }
511
+ return _context4.abrupt("return");
512
+ case 8:
513
+ if (!("token" in update)) {
514
+ _context4.next = 14;
515
+ break;
516
+ }
517
+ player.voiceState.event = update;
518
+ _player$voiceState = player.voiceState, sessionId = _player$voiceState.sessionId, _player$voiceState$ev = _player$voiceState.event, token = _player$voiceState$ev.token, endpoint = _player$voiceState$ev.endpoint;
519
+ _context4.next = 13;
520
+ return player.node.rest.updatePlayer({
521
+ guildId: player.guild,
522
+ data: {
523
+ voice: {
524
+ token: token,
525
+ endpoint: endpoint,
526
+ sessionId: sessionId
527
+ }
528
+ }
529
+ });
530
+ case 13:
531
+ return _context4.abrupt("return");
532
+ case 14:
533
+ if (!(update.user_id !== this.options.clientId)) {
534
+ _context4.next = 16;
535
+ break;
536
+ }
537
+ return _context4.abrupt("return");
538
+ case 16:
539
+ if (!update.channel_id) {
540
+ _context4.next = 21;
541
+ break;
542
+ }
543
+ if (player.voiceChannel !== update.channel_id) {
544
+ this.emit("PlayerMove", player, player.voiceChannel, update.channel_id);
545
+ }
546
+ player.voiceState.sessionId = update.session_id;
547
+ player.voiceChannel = update.channel_id;
548
+ return _context4.abrupt("return");
549
+ case 21:
550
+ this.emit("PlayerDisconnect", player, player.voiceChannel);
551
+ player.voiceChannel = null;
552
+ player.voiceState = Object.assign({});
553
+ player.destroy();
554
+ return _context4.abrupt("return");
555
+ case 26:
556
+ case "end":
557
+ return _context4.stop();
558
+ }
559
+ }, _callee4, this);
560
+ }));
561
+ function updateVoiceState(_x6) {
562
+ return _updateVoiceState.apply(this, arguments);
563
+ }
564
+ return updateVoiceState;
565
+ }())
566
+ }]);
567
+ }(_tinyTypedEmitter.TypedEmitter);
568
+ _defineProperty(Manager, "DEFAULT_SOURCES", {
569
+ "youtube music": "ytmsearch",
570
+ youtube: "ytsearch",
571
+ spotify: "spsearch",
572
+ jiosaavn: "jssearch",
573
+ soundcloud: "scsearch",
574
+ deezer: "dzsearch",
575
+ tidal: "tdsearch",
576
+ applemusic: "amsearch",
577
+ bandcamp: "bcsearch",
578
+ tiktok: "tiktok"
579
+ });
580
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfVXRpbHMiLCJyZXF1aXJlIiwiX2NvbGxlY3Rpb24iLCJfTWFuYWdlckNoZWNrIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl90aW55VHlwZWRFbWl0dGVyIiwiZSIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mIiwibyIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiY29uc3RydWN0b3IiLCJwcm90b3R5cGUiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwidCIsInIiLCJPYmplY3QiLCJuIiwiaGFzT3duUHJvcGVydHkiLCJkZWZpbmVQcm9wZXJ0eSIsInZhbHVlIiwiaSIsImEiLCJjIiwiYXN5bmNJdGVyYXRvciIsInUiLCJ0b1N0cmluZ1RhZyIsImRlZmluZSIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsIndyYXAiLCJHZW5lcmF0b3IiLCJjcmVhdGUiLCJDb250ZXh0IiwibWFrZUludm9rZU1ldGhvZCIsInRyeUNhdGNoIiwidHlwZSIsImFyZyIsImNhbGwiLCJoIiwibCIsImYiLCJzIiwieSIsIkdlbmVyYXRvckZ1bmN0aW9uIiwiR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUiLCJwIiwiZCIsImdldFByb3RvdHlwZU9mIiwidiIsInZhbHVlcyIsImciLCJkZWZpbmVJdGVyYXRvck1ldGhvZHMiLCJmb3JFYWNoIiwiX2ludm9rZSIsIkFzeW5jSXRlcmF0b3IiLCJpbnZva2UiLCJyZXNvbHZlIiwiX19hd2FpdCIsInRoZW4iLCJjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZyIsIkVycm9yIiwiZG9uZSIsIm1ldGhvZCIsImRlbGVnYXRlIiwibWF5YmVJbnZva2VEZWxlZ2F0ZSIsInNlbnQiLCJfc2VudCIsImRpc3BhdGNoRXhjZXB0aW9uIiwiYWJydXB0IiwiVHlwZUVycm9yIiwicmVzdWx0TmFtZSIsIm5leHQiLCJuZXh0TG9jIiwicHVzaFRyeUVudHJ5IiwidHJ5TG9jIiwiY2F0Y2hMb2MiLCJmaW5hbGx5TG9jIiwiYWZ0ZXJMb2MiLCJ0cnlFbnRyaWVzIiwicHVzaCIsInJlc2V0VHJ5RW50cnkiLCJjb21wbGV0aW9uIiwicmVzZXQiLCJpc05hTiIsImxlbmd0aCIsImRpc3BsYXlOYW1lIiwiaXNHZW5lcmF0b3JGdW5jdGlvbiIsIm5hbWUiLCJtYXJrIiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJhd3JhcCIsImFzeW5jIiwiUHJvbWlzZSIsImtleXMiLCJyZXZlcnNlIiwicG9wIiwicHJldiIsImNoYXJBdCIsInNsaWNlIiwic3RvcCIsInJ2YWwiLCJoYW5kbGUiLCJjb21wbGV0ZSIsImZpbmlzaCIsIl9jYXRjaCIsImRlbGVnYXRlWWllbGQiLCJhc3luY0dlbmVyYXRvclN0ZXAiLCJfYXN5bmNUb0dlbmVyYXRvciIsImFyZ3VtZW50cyIsImFwcGx5IiwiX25leHQiLCJfdGhyb3ciLCJfc2xpY2VkVG9BcnJheSIsIl9hcnJheVdpdGhIb2xlcyIsIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsIl9ub25JdGVyYWJsZVJlc3QiLCJBcnJheSIsImlzQXJyYXkiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsIl9uIiwiRiIsIl9hcnJheUxpa2VUb0FycmF5IiwidG9TdHJpbmciLCJmcm9tIiwidGVzdCIsIm93bktleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJfb2JqZWN0U3ByZWFkIiwiX2RlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJfY2xhc3NDYWxsQ2hlY2siLCJfZGVmaW5lUHJvcGVydGllcyIsIl90b1Byb3BlcnR5S2V5Iiwia2V5IiwiX2NyZWF0ZUNsYXNzIiwiX2NhbGxTdXBlciIsIl9nZXRQcm90b3R5cGVPZiIsIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwiUmVmZXJlbmNlRXJyb3IiLCJCb29sZWFuIiwidmFsdWVPZiIsImJpbmQiLCJfaW5oZXJpdHMiLCJfc2V0UHJvdG90eXBlT2YiLCJfdG9QcmltaXRpdmUiLCJ0b1ByaW1pdGl2ZSIsIlN0cmluZyIsIk51bWJlciIsIk1hbmFnZXIiLCJleHBvcnRzIiwiX1R5cGVkRW1pdHRlciIsIm9wdGlvbnMiLCJfdGhpcyIsIkNvbGxlY3Rpb24iLCJtYW5hZ2VyQ2hlY2siLCJTdHJ1Y3R1cmUiLCJnZXQiLCJpbml0IiwiVHJhY2tVdGlscyIsInRyYWNrUGFydGlhbCIsInNldFRyYWNrUGFydGlhbCIsInBsdWdpbnMiLCJub2RlcyIsImlkZW50aWZpZXIiLCJob3N0IiwicmVzdW1lU3RhdHVzIiwicmVzdW1lVGltZW91dCIsInNoYXJkcyIsImF1dG9QbGF5IiwidXNlUHJpb3JpdHkiLCJjbGllbnROYW1lIiwiZGVmYXVsdFNlYXJjaFBsYXRmb3JtIiwidXNlTm9kZSIsIl9pdGVyYXRvciIsImVudHJpZXMiLCJfc3RlcCIsIl9zdGVwJHZhbHVlIiwiaW5kZXgiLCJwbHVnaW4iLCJQbHVnaW4iLCJSYW5nZUVycm9yIiwiY29uY2F0IiwibG9hZCIsImVyciIsIl9pdGVyYXRvcjIiLCJfc3RlcDIiLCJub2RlT3B0aW9ucyIsIm5vZGUiLCJzZXQiLCJzZXRJbnRlcnZhbCIsImNhY2hlcyIsImNsZWFyIiwidGltZSIsImNvbm5lY3RlZCIsInNvcnQiLCJiIiwiYWxvYWQiLCJzdGF0cyIsImNwdSIsImxhdmFsaW5rTG9hZCIsImNvcmVzIiwiYmxvYWQiLCJwbGF5ZXJzIiwiZmlsdGVyZWROb2RlcyIsInByaW9yaXR5IiwidG90YWxXZWlnaHQiLCJyZWR1Y2UiLCJ0b3RhbCIsIndlaWdodGVkTm9kZXMiLCJtYXAiLCJ3ZWlnaHQiLCJyYW5kb21OdW1iZXIiLCJNYXRoIiwicmFuZG9tIiwiY3VtdWxhdGl2ZVdlaWdodCIsIl9pdGVyYXRvcjMiLCJfc3RlcDMiLCJfc3RlcDMkdmFsdWUiLCJsZWFzdExvYWROb2RlIiwiZmlyc3QiLCJsZWFzdFBsYXllcnNOb2RlIiwicHJpb3JpdHlOb2RlIiwiY2xpZW50SWQiLCJpbml0aWF0ZWQiLCJfaXRlcmF0b3I0IiwiX3N0ZXA0IiwiY29ubmVjdCIsImVtaXQiLCJfc2VhcmNoIiwiX2NhbGxlZSIsInF1ZXJ5IiwicmVxdWVzdGVyIiwiX01hbmFnZXIkREVGQVVMVF9TT1VSIiwiX3F1ZXJ5JHNvdXJjZSIsImRhdGEiLCJfcXVlcnkiLCJfc291cmNlIiwic2VhcmNoIiwicmVzIiwic2VhcmNoRGF0YSIsInBsYXlsaXN0RGF0YSIsInRyYWNrcyIsInBsYXlsaXN0IiwicmVzdWx0IiwidHJhY2tzVG9SZXBsYWNlIiwiX2l0ZXJhdG9yNSIsIl9zdGVwNSIsInRyYWNrIiwiX3RyYWNrJHRpdGxlJHNwbGl0JG1hIiwiX3RyYWNrJHRpdGxlJHNwbGl0JG1hMiIsImF1dGhvciIsInRpdGxlIiwiaXNZb3VUdWJlVVJMIiwiX2NhbGxlZSQiLCJfY29udGV4dCIsIl9pc1lvdVR1YmVVUkwiLCJ1cmkiLCJpbmNsdWRlcyIsInVzZWFibGVOb2RlcyIsImVuYWJsZWQiLCJERUZBVUxUX1NPVVJDRVMiLCJzb3VyY2UiLCJyZXN0IiwiZW5jb2RlVVJJQ29tcG9uZW50IiwidDAiLCJsb2FkVHlwZSIsImJ1aWxkIiwiaW5mbyIsImR1cmF0aW9uIiwiYWNjIiwiY3VyIiwicmVwbGFjZVlvdVR1YmVDcmVkZW50aWFscyIsInJlcGxhY2UiLCJzcGxpdCIsInN0ciIsInRyaW0iLCJ0MSIsIl94IiwiX3gyIiwiZGVjb2RlVHJhY2tzIiwiX3RoaXMyIiwiX3JlZiIsIl9jYWxsZWUyIiwicmVqZWN0IiwiX2NhbGxlZTIkIiwiX2NvbnRleHQyIiwicG9zdCIsIkpTT04iLCJzdHJpbmdpZnkiLCJfeDMiLCJfeDQiLCJfZGVjb2RlVHJhY2siLCJfY2FsbGVlMyIsIl9jYWxsZWUzJCIsIl9jb250ZXh0MyIsImRlY29kZVRyYWNrIiwiX3g1IiwiaGFzIiwiZ3VpbGQiLCJkZXN0cm95IiwiY3JlYXRlTm9kZSIsImRlc3Ryb3lOb2RlIiwiX3VwZGF0ZVZvaWNlU3RhdGUiLCJfY2FsbGVlNCIsInVwZGF0ZSIsInBsYXllciIsIl9wbGF5ZXIkdm9pY2VTdGF0ZSIsInNlc3Npb25JZCIsIl9wbGF5ZXIkdm9pY2VTdGF0ZSRldiIsInRva2VuIiwiZW5kcG9pbnQiLCJfY2FsbGVlNCQiLCJfY29udGV4dDQiLCJndWlsZF9pZCIsInZvaWNlU3RhdGUiLCJldmVudCIsInVwZGF0ZVBsYXllciIsImd1aWxkSWQiLCJ2b2ljZSIsInVzZXJfaWQiLCJjaGFubmVsX2lkIiwidm9pY2VDaGFubmVsIiwic2Vzc2lvbl9pZCIsImFzc2lnbiIsInVwZGF0ZVZvaWNlU3RhdGUiLCJfeDYiLCJUeXBlZEVtaXR0ZXIiLCJ5b3V0dWJlIiwic3BvdGlmeSIsImppb3NhYXZuIiwic291bmRjbG91ZCIsImRlZXplciIsInRpZGFsIiwiYXBwbGVtdXNpYyIsImJhbmRjYW1wIiwidGlrdG9rIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL1N0cnVjdHVyZXMvTWFuYWdlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1hc3luYy1wcm9taXNlLWV4ZWN1dG9yICovXG5pbXBvcnQge1xuXHRMb2FkVHlwZSxcblx0UGx1Z2luLFxuXHRTdHJ1Y3R1cmUsXG5cdFRyYWNrRGF0YSxcblx0VHJhY2tFbmRFdmVudCxcblx0VHJhY2tFeGNlcHRpb25FdmVudCxcblx0VHJhY2tTdGFydEV2ZW50LFxuXHRUcmFja1N0dWNrRXZlbnQsXG5cdFRyYWNrVXRpbHMsXG5cdFZvaWNlUGFja2V0LFxuXHRWb2ljZVNlcnZlcixcblx0V2ViU29ja2V0Q2xvc2VkRXZlbnQsXG59IGZyb20gXCIuL1V0aWxzXCI7XG5pbXBvcnQgeyBDb2xsZWN0aW9uIH0gZnJvbSBcIkBkaXNjb3JkanMvY29sbGVjdGlvblwiO1xuaW1wb3J0IHsgTm9kZSwgTm9kZU9wdGlvbnMgfSBmcm9tIFwiLi9Ob2RlXCI7XG5pbXBvcnQgeyBQbGF5ZXIsIFBsYXllck9wdGlvbnMsIFRyYWNrLCBVbnJlc29sdmVkVHJhY2sgfSBmcm9tIFwiLi9QbGF5ZXJcIjtcbmltcG9ydCB7IFZvaWNlU3RhdGUgfSBmcm9tIFwiLi5cIjtcbmltcG9ydCBtYW5hZ2VyQ2hlY2sgZnJvbSBcIi4uL1V0aWxzL01hbmFnZXJDaGVja1wiO1xuaW1wb3J0IHsgQ2xpZW50VXNlciwgVXNlciB9IGZyb20gXCJkaXNjb3JkLmpzXCI7XG5pbXBvcnQgeyBUeXBlZEVtaXR0ZXIgfSBmcm9tIFwidGlueS10eXBlZC1lbWl0dGVyXCI7XG5cbi8qKlxuICogVGhlIG1haW4gaHViIGZvciBpbnRlcmFjdGluZyB3aXRoIExhdmFsaW5rIGFuZCB1c2luZyBNYWdtYXN0cmVhbSxcbiAqL1xuZXhwb3J0IGNsYXNzIE1hbmFnZXIgZXh0ZW5kcyBUeXBlZEVtaXR0ZXI8TWFuYWdlckV2ZW50cz4ge1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfU09VUkNFUzogUmVjb3JkPFNlYXJjaFBsYXRmb3JtLCBzdHJpbmc+ID0ge1xuXHRcdFwieW91dHViZSBtdXNpY1wiOiBcInl0bXNlYXJjaFwiLFxuXHRcdHlvdXR1YmU6IFwieXRzZWFyY2hcIixcblx0XHRzcG90aWZ5OiBcInNwc2VhcmNoXCIsXG5cdFx0amlvc2Fhdm46IFwianNzZWFyY2hcIixcblx0XHRzb3VuZGNsb3VkOiBcInNjc2VhcmNoXCIsXG5cdFx0ZGVlemVyOiBcImR6c2VhcmNoXCIsXG5cdFx0dGlkYWw6IFwidGRzZWFyY2hcIixcblx0XHRhcHBsZW11c2ljOiBcImFtc2VhcmNoXCIsXG5cdFx0YmFuZGNhbXA6IFwiYmNzZWFyY2hcIixcblx0XHR0aWt0b2s6IFwidGlrdG9rXCIsXG5cdH07XG5cblx0LyoqIFRoZSBtYXAgb2YgcGxheWVycy4gKi9cblx0cHVibGljIHJlYWRvbmx5IHBsYXllcnMgPSBuZXcgQ29sbGVjdGlvbjxzdHJpbmcsIFBsYXllcj4oKTtcblx0LyoqIFRoZSBtYXAgb2Ygbm9kZXMuICovXG5cdHB1YmxpYyByZWFkb25seSBub2RlcyA9IG5ldyBDb2xsZWN0aW9uPHN0cmluZywgTm9kZT4oKTtcblx0LyoqIFRoZSBvcHRpb25zIHRoYXQgd2VyZSBzZXQuICovXG5cdHB1YmxpYyByZWFkb25seSBvcHRpb25zOiBNYW5hZ2VyT3B0aW9ucztcblx0cHJpdmF0ZSBpbml0aWF0ZWQgPSBmYWxzZTtcblx0cHVibGljIGNhY2hlcyA9IG5ldyBDb2xsZWN0aW9uPHN0cmluZywgU2VhcmNoUmVzdWx0PigpO1xuXG5cdC8qKiBSZXR1cm5zIHRoZSBub2RlcyB0aGF0IGhhcyB0aGUgbGVhc3QgbG9hZC4gKi9cblx0cHVibGljIGdldCBsZWFzdExvYWROb2RlKCk6IENvbGxlY3Rpb248c3RyaW5nLCBOb2RlPiB7XG5cdFx0cmV0dXJuIHRoaXMubm9kZXNcblx0XHRcdC5maWx0ZXIoKG5vZGUpID0+IG5vZGUuY29ubmVjdGVkKVxuXHRcdFx0LnNvcnQoKGEsIGIpID0+IHtcblx0XHRcdFx0Y29uc3QgYWxvYWQgPSBhLnN0YXRzLmNwdSA/IChhLnN0YXRzLmNwdS5sYXZhbGlua0xvYWQgLyBhLnN0YXRzLmNwdS5jb3JlcykgKiAxMDAgOiAwO1xuXHRcdFx0XHRjb25zdCBibG9hZCA9IGIuc3RhdHMuY3B1ID8gKGIuc3RhdHMuY3B1LmxhdmFsaW5rTG9hZCAvIGIuc3RhdHMuY3B1LmNvcmVzKSAqIDEwMCA6IDA7XG5cdFx0XHRcdHJldHVybiBhbG9hZCAtIGJsb2FkO1xuXHRcdFx0fSk7XG5cdH1cblxuXHQvKiogUmV0dXJucyB0aGUgbm9kZXMgdGhhdCBoYXMgdGhlIGxlYXN0IGFtb3VudCBvZiBwbGF5ZXJzLiAqL1xuXHRwcml2YXRlIGdldCBsZWFzdFBsYXllcnNOb2RlKCk6IENvbGxlY3Rpb248c3RyaW5nLCBOb2RlPiB7XG5cdFx0cmV0dXJuIHRoaXMubm9kZXMuZmlsdGVyKChub2RlKSA9PiBub2RlLmNvbm5lY3RlZCkuc29ydCgoYSwgYikgPT4gYS5zdGF0cy5wbGF5ZXJzIC0gYi5zdGF0cy5wbGF5ZXJzKTtcblx0fVxuXG5cdC8qKiBSZXR1cm5zIGEgbm9kZSBiYXNlZCBvbiBwcmlvcml0eS4gKi9cblx0cHJpdmF0ZSBnZXQgcHJpb3JpdHlOb2RlKCk6IE5vZGUge1xuXHRcdGNvbnN0IGZpbHRlcmVkTm9kZXMgPSB0aGlzLm5vZGVzLmZpbHRlcigobm9kZSkgPT4gbm9kZS5jb25uZWN0ZWQgJiYgbm9kZS5vcHRpb25zLnByaW9yaXR5ID4gMCk7XG5cdFx0Y29uc3QgdG90YWxXZWlnaHQgPSBmaWx0ZXJlZE5vZGVzLnJlZHVjZSgodG90YWwsIG5vZGUpID0+IHRvdGFsICsgbm9kZS5vcHRpb25zLnByaW9yaXR5LCAwKTtcblx0XHRjb25zdCB3ZWlnaHRlZE5vZGVzID0gZmlsdGVyZWROb2Rlcy5tYXAoKG5vZGUpID0+ICh7XG5cdFx0XHRub2RlLFxuXHRcdFx0d2VpZ2h0OiBub2RlLm9wdGlvbnMucHJpb3JpdHkgLyB0b3RhbFdlaWdodCxcblx0XHR9KSk7XG5cdFx0Y29uc3QgcmFuZG9tTnVtYmVyID0gTWF0aC5yYW5kb20oKTtcblxuXHRcdGxldCBjdW11bGF0aXZlV2VpZ2h0ID0gMDtcblxuXHRcdGZvciAoY29uc3QgeyBub2RlLCB3ZWlnaHQgfSBvZiB3ZWlnaHRlZE5vZGVzKSB7XG5cdFx0XHRjdW11bGF0aXZlV2VpZ2h0ICs9IHdlaWdodDtcblx0XHRcdGlmIChyYW5kb21OdW1iZXIgPD0gY3VtdWxhdGl2ZVdlaWdodCkge1xuXHRcdFx0XHRyZXR1cm4gbm9kZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5vcHRpb25zLnVzZU5vZGUgPT09IFwibGVhc3RMb2FkXCIgPyB0aGlzLmxlYXN0TG9hZE5vZGUuZmlyc3QoKSA6IHRoaXMubGVhc3RQbGF5ZXJzTm9kZS5maXJzdCgpO1xuXHR9XG5cblx0LyoqIFJldHVybnMgdGhlIG5vZGUgdG8gdXNlLiAqL1xuXHRwdWJsaWMgZ2V0IHVzZWFibGVOb2RlcygpOiBOb2RlIHtcblx0XHRyZXR1cm4gdGhpcy5vcHRpb25zLnVzZVByaW9yaXR5ID8gdGhpcy5wcmlvcml0eU5vZGUgOiB0aGlzLm9wdGlvbnMudXNlTm9kZSA9PT0gXCJsZWFzdExvYWRcIiA/IHRoaXMubGVhc3RMb2FkTm9kZS5maXJzdCgpIDogdGhpcy5sZWFzdFBsYXllcnNOb2RlLmZpcnN0KCk7XG5cdH1cblxuXHQvKipcblx0ICogSW5pdGlhdGVzIHRoZSBNYW5hZ2VyIGNsYXNzLlxuXHQgKiBAcGFyYW0gb3B0aW9uc1xuXHQgKi9cblx0Y29uc3RydWN0b3Iob3B0aW9uczogTWFuYWdlck9wdGlvbnMpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0bWFuYWdlckNoZWNrKG9wdGlvbnMpO1xuXHRcdFN0cnVjdHVyZS5nZXQoXCJQbGF5ZXJcIikuaW5pdCh0aGlzKTtcblx0XHRTdHJ1Y3R1cmUuZ2V0KFwiTm9kZVwiKS5pbml0KHRoaXMpO1xuXHRcdFRyYWNrVXRpbHMuaW5pdCh0aGlzKTtcblx0XHRcblx0XHRpZiAob3B0aW9ucy50cmFja1BhcnRpYWwpIHtcblx0XHRcdFRyYWNrVXRpbHMuc2V0VHJhY2tQYXJ0aWFsKG9wdGlvbnMudHJhY2tQYXJ0aWFsKTtcblx0XHRcdGRlbGV0ZSBvcHRpb25zLnRyYWNrUGFydGlhbDtcblx0XHR9XG5cblx0XHR0aGlzLm9wdGlvbnMgPSB7XG5cdFx0XHRwbHVnaW5zOiBbXSxcblx0XHRcdG5vZGVzOiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRpZGVudGlmaWVyOiBcImRlZmF1bHRcIixcblx0XHRcdFx0XHRob3N0OiBcImxvY2FsaG9zdFwiLFxuXHRcdFx0XHRcdHJlc3VtZVN0YXR1czogZmFsc2UsXG5cdFx0XHRcdFx0cmVzdW1lVGltZW91dDogMTAwMCxcblx0XHRcdFx0fSxcblx0XHRcdF0sXG5cdFx0XHRzaGFyZHM6IDEsXG5cdFx0XHRhdXRvUGxheTogdHJ1ZSxcblx0XHRcdHVzZVByaW9yaXR5OiBmYWxzZSxcblx0XHRcdGNsaWVudE5hbWU6IFwiRm9yIHYzLjBcIixcblx0XHRcdGRlZmF1bHRTZWFyY2hQbGF0Zm9ybTogXCJ5b3V0dWJlXCIsXG5cdFx0XHR1c2VOb2RlOiBcImxlYXN0UGxheWVyc1wiLFxuXHRcdFx0Li4ub3B0aW9ucyxcblx0XHR9O1xuXG5cdFx0aWYgKHRoaXMub3B0aW9ucy5wbHVnaW5zKSB7XG5cdFx0XHRmb3IgKGNvbnN0IFtpbmRleCwgcGx1Z2luXSBvZiB0aGlzLm9wdGlvbnMucGx1Z2lucy5lbnRyaWVzKCkpIHtcblx0XHRcdFx0aWYgKCEocGx1Z2luIGluc3RhbmNlb2YgUGx1Z2luKSkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYFBsdWdpbiBhdCBpbmRleCAke2luZGV4fSBkb2VzIG5vdCBleHRlbmQgUGx1Z2luLmApO1xuXHRcdFx0XHRwbHVnaW4ubG9hZCh0aGlzKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAodGhpcy5vcHRpb25zLm5vZGVzKSB7XG5cdFx0XHRmb3IgKGNvbnN0IG5vZGVPcHRpb25zIG9mIHRoaXMub3B0aW9ucy5ub2Rlcykge1xuXHRcdFx0XHRjb25zdCBub2RlID0gbmV3IChTdHJ1Y3R1cmUuZ2V0KFwiTm9kZVwiKSkobm9kZU9wdGlvbnMpO1xuXHRcdFx0XHR0aGlzLm5vZGVzLnNldChub2RlLm9wdGlvbnMuaWRlbnRpZmllciwgbm9kZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHNldEludGVydmFsKCgpID0+IHtcblx0XHRcdHRoaXMuY2FjaGVzLmNsZWFyKCk7XG5cdFx0fSwgdGhpcy5vcHRpb25zLmNhY2hlcy50aW1lKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBJbml0aWF0ZXMgdGhlIE1hbmFnZXIuXG5cdCAqIEBwYXJhbSBjbGllbnRJZFxuXHQgKi9cblx0cHVibGljIGluaXQoY2xpZW50SWQ/OiBzdHJpbmcpOiB0aGlzIHtcblx0XHRpZiAodGhpcy5pbml0aWF0ZWQpIHJldHVybiB0aGlzO1xuXHRcdGlmICh0eXBlb2YgY2xpZW50SWQgIT09IFwidW5kZWZpbmVkXCIpIHRoaXMub3B0aW9ucy5jbGllbnRJZCA9IGNsaWVudElkO1xuXG5cdFx0aWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMuY2xpZW50SWQgIT09IFwic3RyaW5nXCIpIHRocm93IG5ldyBFcnJvcignXCJjbGllbnRJZFwiIHNldCBpcyBub3QgdHlwZSBvZiBcInN0cmluZ1wiJyk7XG5cblx0XHRpZiAoIXRoaXMub3B0aW9ucy5jbGllbnRJZCkgdGhyb3cgbmV3IEVycm9yKCdcImNsaWVudElkXCIgaXMgbm90IHNldC4gUGFzcyBpdCBpbiBNYW5hZ2VyI2luaXQoKSBvciBhcyBhIG9wdGlvbiBpbiB0aGUgY29uc3RydWN0b3IuJyk7XG5cblx0XHRmb3IgKGNvbnN0IG5vZGUgb2YgdGhpcy5ub2Rlcy52YWx1ZXMoKSkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0bm9kZS5jb25uZWN0KCk7XG5cdFx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdFx0dGhpcy5lbWl0KFwiTm9kZUVycm9yXCIsIG5vZGUsIGVycik7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpcy5pbml0aWF0ZWQgPSB0cnVlO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNlYXJjaGVzIHRoZSBlbmFibGVkIHNvdXJjZXMgYmFzZWQgb2ZmIHRoZSBVUkwgb3IgdGhlIGBzb3VyY2VgIHByb3BlcnR5LlxuXHQgKiBAcGFyYW0gcXVlcnlcblx0ICogQHBhcmFtIHJlcXVlc3RlclxuXHQgKiBAcmV0dXJucyBUaGUgc2VhcmNoIHJlc3VsdC5cblx0ICovXG5cdHB1YmxpYyBhc3luYyBzZWFyY2gocXVlcnk6IHN0cmluZyB8IFNlYXJjaFF1ZXJ5LCByZXF1ZXN0ZXI/OiBVc2VyIHwgQ2xpZW50VXNlcik6IFByb21pc2U8U2VhcmNoUmVzdWx0PiB7XG5cdFx0Y29uc3Qgbm9kZSA9IHRoaXMudXNlYWJsZU5vZGVzO1xuXG5cdFx0aWYgKCFub2RlKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJObyBhdmFpbGFibGUgbm9kZXMuXCIpO1xuXHRcdH1cblx0XHRpZiAodGhpcy5vcHRpb25zLmNhY2hlcy5lbmFibGVkICYmIHRoaXMub3B0aW9ucy5jYWNoZXMudGltZSA+IDAgJiYgdHlwZW9mIHF1ZXJ5ID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRjb25zdCBkYXRhID0gdGhpcy5jYWNoZXMuZ2V0KHF1ZXJ5KTtcblx0XHRcdGlmIChkYXRhKSByZXR1cm4gZGF0YTtcblx0XHR9XG5cdFx0Y29uc3QgX3F1ZXJ5OiBTZWFyY2hRdWVyeSA9IHR5cGVvZiBxdWVyeSA9PT0gXCJzdHJpbmdcIiA/IHsgcXVlcnkgfSA6IHF1ZXJ5O1xuXHRcdGNvbnN0IF9zb3VyY2UgPSBNYW5hZ2VyLkRFRkFVTFRfU09VUkNFU1tfcXVlcnkuc291cmNlID8/IHRoaXMub3B0aW9ucy5kZWZhdWx0U2VhcmNoUGxhdGZvcm1dID8/IF9xdWVyeS5zb3VyY2U7XG5cdFx0bGV0IHNlYXJjaCA9IF9xdWVyeS5xdWVyeTtcblxuXHRcdGlmICghL15odHRwcz86XFwvXFwvLy50ZXN0KHNlYXJjaCkpIHtcblx0XHRcdHNlYXJjaCA9IGAke19zb3VyY2V9OiR7c2VhcmNofWA7XG5cdFx0fVxuXG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHJlcyA9IChhd2FpdCBub2RlLnJlc3QuZ2V0KGAvdjQvbG9hZHRyYWNrcz9pZGVudGlmaWVyPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHNlYXJjaCl9YCkpIGFzIExhdmFsaW5rUmVzcG9uc2U7XG5cdFx0XHRpZiAoIXJlcykgdGhyb3cgbmV3IEVycm9yKFwiUXVlcnkgbm90IGZvdW5kLlwiKTtcblxuXHRcdFx0bGV0IHNlYXJjaERhdGEgPSBbXTtcblx0XHRcdGxldCBwbGF5bGlzdERhdGE6IFBsYXlsaXN0UmF3RGF0YSB8IHVuZGVmaW5lZDtcblxuXHRcdFx0c3dpdGNoIChyZXMubG9hZFR5cGUpIHtcblx0XHRcdFx0Y2FzZSBcInNlYXJjaFwiOlxuXHRcdFx0XHRcdHNlYXJjaERhdGEgPSByZXMuZGF0YSBhcyBUcmFja0RhdGFbXTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlIFwidHJhY2tcIjpcblx0XHRcdFx0XHRzZWFyY2hEYXRhID0gW3Jlcy5kYXRhIGFzIFRyYWNrRGF0YVtdXTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlIFwicGxheWxpc3RcIjpcblx0XHRcdFx0XHRwbGF5bGlzdERhdGEgPSByZXMuZGF0YSBhcyBQbGF5bGlzdFJhd0RhdGE7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHRyYWNrcyA9IHNlYXJjaERhdGEubWFwKCh0cmFjaykgPT4gVHJhY2tVdGlscy5idWlsZCh0cmFjaywgcmVxdWVzdGVyKSk7XG5cdFx0XHRsZXQgcGxheWxpc3QgPSBudWxsO1xuXG5cdFx0XHRpZiAocmVzLmxvYWRUeXBlID09PSBcInBsYXlsaXN0XCIpIHtcblx0XHRcdFx0cGxheWxpc3QgPSB7XG5cdFx0XHRcdFx0bmFtZTogcGxheWxpc3REYXRhIS5pbmZvLm5hbWUsXG5cdFx0XHRcdFx0dHJhY2tzOiBwbGF5bGlzdERhdGEhLnRyYWNrcy5tYXAoKHRyYWNrKSA9PiBUcmFja1V0aWxzLmJ1aWxkKHRyYWNrLCByZXF1ZXN0ZXIpKSxcblx0XHRcdFx0XHRkdXJhdGlvbjogcGxheWxpc3REYXRhIS50cmFja3MucmVkdWNlKChhY2MsIGN1cikgPT4gYWNjICsgKGN1ci5pbmZvLmxlbmd0aCB8fCAwKSwgMCksXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHJlc3VsdDogU2VhcmNoUmVzdWx0ID0ge1xuXHRcdFx0XHRsb2FkVHlwZTogcmVzLmxvYWRUeXBlLFxuXHRcdFx0XHR0cmFja3MsXG5cdFx0XHRcdHBsYXlsaXN0LFxuXHRcdFx0fTtcblxuXHRcdFx0aWYgKHRoaXMub3B0aW9ucy5yZXBsYWNlWW91VHViZUNyZWRlbnRpYWxzKSB7XG5cdFx0XHRcdGxldCB0cmFja3NUb1JlcGxhY2U6IFRyYWNrW10gPSBbXTtcblx0XHRcdFx0aWYgKHJlc3VsdC5sb2FkVHlwZSA9PT0gXCJwbGF5bGlzdFwiKSB7XG5cdFx0XHRcdFx0dHJhY2tzVG9SZXBsYWNlID0gcmVzdWx0LnBsYXlsaXN0LnRyYWNrcztcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0cmFja3NUb1JlcGxhY2UgPSByZXN1bHQudHJhY2tzO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Zm9yIChjb25zdCB0cmFjayBvZiB0cmFja3NUb1JlcGxhY2UpIHtcblx0XHRcdFx0XHRpZiAoaXNZb3VUdWJlVVJMKHRyYWNrLnVyaSkpIHtcblx0XHRcdFx0XHRcdHRyYWNrLmF1dGhvciA9IHRyYWNrLmF1dGhvci5yZXBsYWNlKFwiLSBUb3BpY1wiLCBcIlwiKTtcblx0XHRcdFx0XHRcdHRyYWNrLnRpdGxlID0gdHJhY2sudGl0bGUucmVwbGFjZShcIlRvcGljIC1cIiwgXCJcIik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICh0cmFjay50aXRsZS5pbmNsdWRlcyhcIi1cIikpIHtcblx0XHRcdFx0XHRcdGNvbnN0IFthdXRob3IsIHRpdGxlXSA9IHRyYWNrLnRpdGxlLnNwbGl0KFwiLVwiKS5tYXAoKHN0cjogc3RyaW5nKSA9PiBzdHIudHJpbSgpKTtcblx0XHRcdFx0XHRcdHRyYWNrLmF1dGhvciA9IGF1dGhvcjtcblx0XHRcdFx0XHRcdHRyYWNrLnRpdGxlID0gdGl0bGU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAodGhpcy5vcHRpb25zLmNhY2hlcy5lbmFibGVkICYmIHRoaXMub3B0aW9ucy5jYWNoZXMudGltZSA+IDApIHRoaXMuY2FjaGVzLnNldChzZWFyY2gsIHJlc3VsdCk7XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGVycik7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gaXNZb3VUdWJlVVJMKHVyaTogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0XHRyZXR1cm4gdXJpLmluY2x1ZGVzKFwieW91dHViZS5jb21cIikgfHwgdXJpLmluY2x1ZGVzKFwieW91dHUuYmVcIik7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIERlY29kZXMgdGhlIGJhc2U2NCBlbmNvZGVkIHRyYWNrcyBhbmQgcmV0dXJucyBhIFRyYWNrRGF0YSBhcnJheS5cblx0ICogQHBhcmFtIHRyYWNrc1xuXHQgKi9cblx0cHVibGljIGRlY29kZVRyYWNrcyh0cmFja3M6IHN0cmluZ1tdKTogUHJvbWlzZTxUcmFja0RhdGFbXT4ge1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZShhc3luYyhyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGNvbnN0IG5vZGUgPSB0aGlzLm5vZGVzLmZpcnN0KCk7XG5cdFx0XHRpZiAoIW5vZGUpIHtcblx0XHRcdFx0cmV0dXJuIHJlamVjdChuZXcgRXJyb3IoXCJObyBhdmFpbGFibGUgbm9kZXMuXCIpKTtcblx0XHRcdH1cblx0XG5cdFx0XHRhd2FpdCBub2RlLnJlc3QucG9zdChcIi92NC9kZWNvZGV0cmFja3NcIiwgSlNPTi5zdHJpbmdpZnkodHJhY2tzKSlcblx0XHRcdFx0LnRoZW4oKHJlcykgPT4ge1xuXHRcdFx0XHRcdGlmICghcmVzKSByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcihcIk5vIGRhdGEgcmV0dXJuZWQgZnJvbSBxdWVyeS5cIikpO1xuXHRcdFx0XHRcdHJlc29sdmUocmVzIGFzIFRyYWNrRGF0YVtdKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKChlcnIpID0+IHJlamVjdChlcnIpKTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZWNvZGVzIHRoZSBiYXNlNjQgZW5jb2RlZCB0cmFjayBhbmQgcmV0dXJucyBhIFRyYWNrRGF0YS5cblx0ICogQHBhcmFtIHRyYWNrXG5cdCAqL1xuXHRwdWJsaWMgYXN5bmMgZGVjb2RlVHJhY2sodHJhY2s6IHN0cmluZyk6IFByb21pc2U8VHJhY2tEYXRhPiB7XG5cdFx0Y29uc3QgcmVzID0gYXdhaXQgdGhpcy5kZWNvZGVUcmFja3MoW3RyYWNrXSk7XG5cdFx0cmV0dXJuIHJlc1swXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgcGxheWVyIG9yIHJldHVybnMgb25lIGlmIGl0IGFscmVhZHkgZXhpc3RzLlxuXHQgKiBAcGFyYW0gb3B0aW9uc1xuXHQgKi9cblx0cHVibGljIGNyZWF0ZShvcHRpb25zOiBQbGF5ZXJPcHRpb25zKTogUGxheWVyIHtcblx0XHRpZiAodGhpcy5wbGF5ZXJzLmhhcyhvcHRpb25zLmd1aWxkKSkge1xuXHRcdFx0cmV0dXJuIHRoaXMucGxheWVycy5nZXQob3B0aW9ucy5ndWlsZCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG5ldyAoU3RydWN0dXJlLmdldChcIlBsYXllclwiKSkob3B0aW9ucyk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyBhIHBsYXllciBvciB1bmRlZmluZWQgaWYgaXQgZG9lcyBub3QgZXhpc3QuXG5cdCAqIEBwYXJhbSBndWlsZFxuXHQgKi9cblx0cHVibGljIGdldChndWlsZDogc3RyaW5nKTogUGxheWVyIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gdGhpcy5wbGF5ZXJzLmdldChndWlsZCk7XG5cdH1cblxuXHQvKipcblx0ICogRGVzdHJveXMgYSBwbGF5ZXIgaWYgaXQgZXhpc3RzLlxuXHQgKiBAcGFyYW0gZ3VpbGRcblx0ICovXG5cdHB1YmxpYyBkZXN0cm95KGd1aWxkOiBzdHJpbmcpOiB2b2lkIHtcblx0XHR0aGlzLnBsYXllcnMuZGVsZXRlKGd1aWxkKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgbm9kZSBvciByZXR1cm5zIG9uZSBpZiBpdCBhbHJlYWR5IGV4aXN0cy5cblx0ICogQHBhcmFtIG9wdGlvbnNcblx0ICovXG5cdHB1YmxpYyBjcmVhdGVOb2RlKG9wdGlvbnM6IE5vZGVPcHRpb25zKTogTm9kZSB7XG5cdFx0aWYgKHRoaXMubm9kZXMuaGFzKG9wdGlvbnMuaWRlbnRpZmllciB8fCBvcHRpb25zLmhvc3QpKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5ub2Rlcy5nZXQob3B0aW9ucy5pZGVudGlmaWVyIHx8IG9wdGlvbnMuaG9zdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG5ldyAoU3RydWN0dXJlLmdldChcIk5vZGVcIikpKG9wdGlvbnMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIERlc3Ryb3lzIGEgbm9kZSBpZiBpdCBleGlzdHMuXG5cdCAqIEBwYXJhbSBpZGVudGlmaWVyXG5cdCAqL1xuXHRwdWJsaWMgZGVzdHJveU5vZGUoaWRlbnRpZmllcjogc3RyaW5nKTogdm9pZCB7XG5cdFx0Y29uc3Qgbm9kZSA9IHRoaXMubm9kZXMuZ2V0KGlkZW50aWZpZXIpO1xuXHRcdGlmICghbm9kZSkgcmV0dXJuO1xuXHRcdG5vZGUuZGVzdHJveSgpO1xuXHRcdHRoaXMubm9kZXMuZGVsZXRlKGlkZW50aWZpZXIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNlbmRzIHZvaWNlIGRhdGEgdG8gdGhlIExhdmFsaW5rIHNlcnZlci5cblx0ICogQHBhcmFtIGRhdGFcblx0ICovXG5cdHB1YmxpYyBhc3luYyB1cGRhdGVWb2ljZVN0YXRlKGRhdGE6IFZvaWNlUGFja2V0IHwgVm9pY2VTZXJ2ZXIgfCBWb2ljZVN0YXRlKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKFwidFwiIGluIGRhdGEgJiYgIVtcIlZPSUNFX1NUQVRFX1VQREFURVwiLCBcIlZPSUNFX1NFUlZFUl9VUERBVEVcIl0uaW5jbHVkZXMoZGF0YS50KSkgcmV0dXJuO1xuXG5cdFx0Y29uc3QgdXBkYXRlID0gXCJkXCIgaW4gZGF0YSA/IGRhdGEuZCA6IGRhdGE7XG5cblx0XHRpZiAoIXVwZGF0ZSB8fCAoIShcInRva2VuXCIgaW4gdXBkYXRlKSAmJiAhKFwic2Vzc2lvbl9pZFwiIGluIHVwZGF0ZSkpKSByZXR1cm47XG5cblx0XHRjb25zdCBwbGF5ZXIgPSB0aGlzLnBsYXllcnMuZ2V0KHVwZGF0ZS5ndWlsZF9pZCk7XG5cblx0XHRpZiAoIXBsYXllcikgcmV0dXJuO1xuXHRcdGlmIChcInRva2VuXCIgaW4gdXBkYXRlKSB7XG5cdFx0XHRwbGF5ZXIudm9pY2VTdGF0ZS5ldmVudCA9IHVwZGF0ZTtcblxuXHRcdFx0Y29uc3Qge1xuXHRcdFx0XHRzZXNzaW9uSWQsXG5cdFx0XHRcdGV2ZW50OiB7IHRva2VuLCBlbmRwb2ludCB9LFxuXHRcdFx0fSA9IHBsYXllci52b2ljZVN0YXRlO1xuXG5cdFx0XHRhd2FpdCBwbGF5ZXIubm9kZS5yZXN0LnVwZGF0ZVBsYXllcih7XG5cdFx0XHRcdGd1aWxkSWQ6IHBsYXllci5ndWlsZCxcblx0XHRcdFx0ZGF0YTogeyB2b2ljZTogeyB0b2tlbiwgZW5kcG9pbnQsIHNlc3Npb25JZCB9IH0sXG5cdFx0XHR9KTtcblxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICh1cGRhdGUudXNlcl9pZCAhPT0gdGhpcy5vcHRpb25zLmNsaWVudElkKSByZXR1cm47XG5cdFx0aWYgKHVwZGF0ZS5jaGFubmVsX2lkKSB7XG5cdFx0XHRpZiAocGxheWVyLnZvaWNlQ2hhbm5lbCAhPT0gdXBkYXRlLmNoYW5uZWxfaWQpIHtcblx0XHRcdFx0dGhpcy5lbWl0KFwiUGxheWVyTW92ZVwiLCBwbGF5ZXIsIHBsYXllci52b2ljZUNoYW5uZWwsIHVwZGF0ZS5jaGFubmVsX2lkKTtcblx0XHRcdH1cblxuXHRcdFx0cGxheWVyLnZvaWNlU3RhdGUuc2Vzc2lvbklkID0gdXBkYXRlLnNlc3Npb25faWQ7XG5cdFx0XHRwbGF5ZXIudm9pY2VDaGFubmVsID0gdXBkYXRlLmNoYW5uZWxfaWQ7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5lbWl0KFwiUGxheWVyRGlzY29ubmVjdFwiLCBwbGF5ZXIsIHBsYXllci52b2ljZUNoYW5uZWwpO1xuXHRcdHBsYXllci52b2ljZUNoYW5uZWwgPSBudWxsO1xuXHRcdHBsYXllci52b2ljZVN0YXRlID0gT2JqZWN0LmFzc2lnbih7fSk7XG5cdFx0cGxheWVyLmRlc3Ryb3koKTtcblx0XHRyZXR1cm47XG5cdH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYXlsb2FkIHtcblx0LyoqIFRoZSBPUCBjb2RlICovXG5cdG9wOiBudW1iZXI7XG5cdGQ6IHtcblx0XHRndWlsZF9pZDogc3RyaW5nO1xuXHRcdGNoYW5uZWxfaWQ6IHN0cmluZyB8IG51bGw7XG5cdFx0c2VsZl9tdXRlOiBib29sZWFuO1xuXHRcdHNlbGZfZGVhZjogYm9vbGVhbjtcblx0fTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNYW5hZ2VyT3B0aW9ucyB7XG5cdC8qKiBVc2UgcHJpb3JpdHkgbW9kZSBvdmVyIGxlYXN0IGFtb3VudCBvZiBwbGF5ZXIgb3IgbG9hZD8gKi9cblx0dXNlUHJpb3JpdHk/OiBib29sZWFuO1xuXHQvKiogVXNlIHRoZSBsZWFzdCBhbW91bnQgb2YgcGxheWVycyBvciBsZWFzdCBsb2FkPyAqL1xuXHR1c2VOb2RlPzogXCJsZWFzdExvYWRcIiB8IFwibGVhc3RQbGF5ZXJzXCI7XG5cdC8qKiBUaGUgYXJyYXkgb2Ygbm9kZXMgdG8gY29ubmVjdCB0by4gKi9cblx0bm9kZXM/OiBOb2RlT3B0aW9uc1tdO1xuXHQvKiogVGhlIGNsaWVudCBJRCB0byB1c2UuICovXG5cdGNsaWVudElkPzogc3RyaW5nO1xuXHQvKiogVmFsdWUgdG8gdXNlIGZvciB0aGUgYENsaWVudC1OYW1lYCBoZWFkZXIuICovXG5cdGNsaWVudE5hbWU/OiBzdHJpbmc7XG5cdC8qKiBUaGUgc2hhcmQgY291bnQuICovXG5cdHNoYXJkcz86IG51bWJlcjtcblx0LyoqIEEgYXJyYXkgb2YgcGx1Z2lucyB0byB1c2UuICovXG5cdHBsdWdpbnM/OiBQbHVnaW5bXTtcblx0LyoqIFdoZXRoZXIgcGxheWVycyBzaG91bGQgYXV0b21hdGljYWxseSBwbGF5IHRoZSBuZXh0IHNvbmcuICovXG5cdGF1dG9QbGF5PzogYm9vbGVhbjtcblx0LyoqIEFuIGFycmF5IG9mIHRyYWNrIHByb3BlcnRpZXMgdG8ga2VlcC4gYHRyYWNrYCB3aWxsIGFsd2F5cyBiZSBwcmVzZW50LiAqL1xuXHR0cmFja1BhcnRpYWw/OiBzdHJpbmdbXTtcblx0LyoqIFRoZSBkZWZhdWx0IHNlYXJjaCBwbGF0Zm9ybSB0byB1c2UsIGNhbiBiZSBcInlvdXR1YmVcIiwgXCJ5b3V0dWJlIG11c2ljXCIsIFwic291bmRjbG91ZFwiIG9yIGRlZXplci4gKi9cblx0ZGVmYXVsdFNlYXJjaFBsYXRmb3JtPzogU2VhcmNoUGxhdGZvcm07XG5cdC8qKiBXaGV0aGVyIHRoZSBZb3VUdWJlIHZpZGVvIHRpdGxlcyBzaG91bGQgYmUgcmVwbGFjZWQgaWYgdGhlIEF1dGhvciBkb2VzIG5vdCBleGFjdGx5IG1hdGNoLiAqL1xuXHRyZXBsYWNlWW91VHViZUNyZWRlbnRpYWxzPzogYm9vbGVhbjtcblx0Y2FjaGVzOiB7XG5cdFx0LyoqIFdoZXRoZXIgdG8gY2FjaGUgdGhlIHNlYXJjaCByZXN1bHRzLiAqL1xuXHRcdGVuYWJsZWQ6IGJvb2xlYW47XG5cdFx0LyoqIFRoZSB0aW1lIHRvIGNhY2hlIHRoZSBzZWFyY2ggcmVzdWx0cy4gKi9cblx0XHR0aW1lOiBudW1iZXI7XG5cdH1cblx0LyoqXG5cdCAqIEZ1bmN0aW9uIHRvIHNlbmQgZGF0YSB0byB0aGUgd2Vic29ja2V0LlxuXHQgKiBAcGFyYW0gaWRcblx0ICogQHBhcmFtIHBheWxvYWRcblx0ICovXG5cdHNlbmQoaWQ6IHN0cmluZywgcGF5bG9hZDogUGF5bG9hZCk6IHZvaWQ7XG59XG5cbmV4cG9ydCB0eXBlIFNlYXJjaFBsYXRmb3JtID0gXCJkZWV6ZXJcIiB8IFwic291bmRjbG91ZFwiIHwgXCJ5b3V0dWJlIG11c2ljXCIgfCBcInlvdXR1YmVcIiB8IFwic3BvdGlmeVwiIHwgXCJqaW9zYWF2blwiIHwgXCJ0aWRhbFwiIHwgXCJhcHBsZW11c2ljXCIgfCBcImJhbmRjYW1wXCIgfCBcInRpa3Rva1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaFF1ZXJ5IHtcblx0LyoqIFRoZSBzb3VyY2UgdG8gc2VhcmNoIGZyb20uICovXG5cdHNvdXJjZT86IFNlYXJjaFBsYXRmb3JtIHwgc3RyaW5nO1xuXHQvKiogVGhlIHF1ZXJ5IHRvIHNlYXJjaCBmb3IuICovXG5cdHF1ZXJ5OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGF2YWxpbmtSZXNwb25zZSB7XG5cdGxvYWRUeXBlOiBMb2FkVHlwZTtcblx0ZGF0YTogVHJhY2tEYXRhW10gfCBQbGF5bGlzdFJhd0RhdGE7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VhcmNoUmVzdWx0IHtcblx0LyoqIFRoZSBsb2FkIHR5cGUgb2YgdGhlIHJlc3VsdC4gKi9cblx0bG9hZFR5cGU6IExvYWRUeXBlO1xuXHQvKiogVGhlIGFycmF5IG9mIHRyYWNrcyBmcm9tIHRoZSByZXN1bHQuICovXG5cdHRyYWNrczogVHJhY2tbXTtcblx0LyoqIFRoZSBwbGF5bGlzdCBpbmZvIGlmIHRoZSBsb2FkIHR5cGUgaXMgJ3BsYXlsaXN0Jy4gKi9cblx0cGxheWxpc3Q/OiBQbGF5bGlzdERhdGE7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGxheWxpc3RSYXdEYXRhIHtcblx0aW5mbzoge1xuXHRcdC8qKiBUaGUgcGxheWxpc3QgbmFtZS4gKi9cblx0XHRuYW1lOiBzdHJpbmc7XG5cdH07XG5cdC8qKiBBZGRpdGlvbiBpbmZvIHByb3ZpZGVkIGJ5IHBsdWdpbnMuICovXG5cdHBsdWdpbkluZm86IG9iamVjdDtcblx0LyoqIFRoZSB0cmFja3Mgb2YgdGhlIHBsYXlsaXN0ICovXG5cdHRyYWNrczogVHJhY2tEYXRhW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGxheWxpc3REYXRhIHtcblx0LyoqIFRoZSBwbGF5bGlzdCBuYW1lLiAqL1xuXHRuYW1lOiBzdHJpbmc7XG5cdC8qKiBUaGUgbGVuZ3RoIG9mIHRoZSBwbGF5bGlzdC4gKi9cblx0ZHVyYXRpb246IG51bWJlcjtcblx0LyoqIFRoZSBzb25ncyBvZiB0aGUgcGxheWxpc3QuICovXG5cdHRyYWNrczogVHJhY2tbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNYW5hZ2VyRXZlbnRzIHtcblx0Tm9kZUNyZWF0ZTogKG5vZGU6IE5vZGUpID0+IHZvaWQ7XG5cdE5vZGVEZXN0cm95OiAobm9kZTogTm9kZSkgPT4gdm9pZDtcblx0Tm9kZUNvbm5lY3Q6IChub2RlOiBOb2RlKSA9PiB2b2lkO1xuXHROb2RlUmVjb25uZWN0OiAobm9kZTogTm9kZSkgPT4gdm9pZDtcblx0Tm9kZURpc2Nvbm5lY3Q6IChub2RlOiBOb2RlLCByZWFzb246IHsgY29kZT86IG51bWJlcjsgcmVhc29uPzogc3RyaW5nIH0pID0+IHZvaWQ7XG5cdE5vZGVFcnJvcjogKG5vZGU6IE5vZGUsIGVycm9yOiBFcnJvcikgPT4gdm9pZDtcblx0Tm9kZVJhdzogKHBheWxvYWQ6IHVua25vd24pID0+IHZvaWQ7XG5cdFBsYXllckNyZWF0ZTogKHBsYXllcjogUGxheWVyKSA9PiB2b2lkO1xuXHRQbGF5ZXJEZXN0cm95OiAocGxheWVyOiBQbGF5ZXIpID0+IHZvaWQ7XG5cdFBsYXllclN0YXRlVXBkYXRlOiAob2xkUGxheWVyOiBQbGF5ZXIsIG5ld1BsYXllcjogUGxheWVyKSA9PiB2b2lkO1xuXHRQbGF5ZXJNb3ZlOiAocGxheWVyOiBQbGF5ZXIsIGluaXRDaGFubmVsOiBzdHJpbmcsIG5ld0NoYW5uZWw6IHN0cmluZykgPT4gdm9pZDtcblx0UGxheWVyRGlzY29ubmVjdDogKHBsYXllcjogUGxheWVyLCBvbGRDaGFubmVsOiBzdHJpbmcpID0+IHZvaWQ7XG5cdFF1ZXVlRW5kOiAocGxheWVyOiBQbGF5ZXIsIHRyYWNrOiBUcmFjayB8IFVucmVzb2x2ZWRUcmFjaywgcGF5bG9hZDogVHJhY2tFbmRFdmVudCkgPT4gdm9pZDtcblx0U29ja2V0Q2xvc2VkOiAocGxheWVyOiBQbGF5ZXIsIHBheWxvYWQ6IFdlYlNvY2tldENsb3NlZEV2ZW50KSA9PiB2b2lkO1xuXHRUcmFja1N0YXJ0OiAocGxheWVyOiBQbGF5ZXIsIHRyYWNrOiBUcmFjaywgcGF5bG9hZDogVHJhY2tTdGFydEV2ZW50KSA9PiB2b2lkO1xuXHRUcmFja0VuZDogKHBsYXllcjogUGxheWVyLCB0cmFjazogVHJhY2ssIHBheWxvYWQ6IFRyYWNrRW5kRXZlbnQpID0+IHZvaWQ7XG5cdFRyYWNrU3R1Y2s6IChwbGF5ZXI6IFBsYXllciwgdHJhY2s6IFRyYWNrLCBwYXlsb2FkOiBUcmFja1N0dWNrRXZlbnQpID0+IHZvaWQ7XG5cdFRyYWNrRXJyb3I6IChwbGF5ZXI6IFBsYXllciwgdHJhY2s6IFRyYWNrIHwgVW5yZXNvbHZlZFRyYWNrLCBwYXlsb2FkOiBUcmFja0V4Y2VwdGlvbkV2ZW50KSA9PiB2b2lkO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFDQSxJQUFBQSxNQUFBLEdBQUFDLE9BQUE7QUFjQSxJQUFBQyxXQUFBLEdBQUFELE9BQUE7QUFJQSxJQUFBRSxhQUFBLEdBQUFDLHNCQUFBLENBQUFILE9BQUE7QUFFQSxJQUFBSSxpQkFBQSxHQUFBSixPQUFBO0FBQWtELFNBQUFHLHVCQUFBRSxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsZ0JBQUFBLENBQUE7QUFBQSxTQUFBRSxRQUFBQyxDQUFBLHNDQUFBRCxPQUFBLHdCQUFBRSxNQUFBLHVCQUFBQSxNQUFBLENBQUFDLFFBQUEsYUFBQUYsQ0FBQSxrQkFBQUEsQ0FBQSxnQkFBQUEsQ0FBQSxXQUFBQSxDQUFBLHlCQUFBQyxNQUFBLElBQUFELENBQUEsQ0FBQUcsV0FBQSxLQUFBRixNQUFBLElBQUFELENBQUEsS0FBQUMsTUFBQSxDQUFBRyxTQUFBLHFCQUFBSixDQUFBLEtBQUFELE9BQUEsQ0FBQUMsQ0FBQTtBQUFBLFNBQUFLLG9CQUFBLGtCQXBCbEQscUpBQUFBLG1CQUFBLFlBQUFBLG9CQUFBLFdBQUFSLENBQUEsU0FBQVMsQ0FBQSxFQUFBVCxDQUFBLE9BQUFVLENBQUEsR0FBQUMsTUFBQSxDQUFBSixTQUFBLEVBQUFLLENBQUEsR0FBQUYsQ0FBQSxDQUFBRyxjQUFBLEVBQUFWLENBQUEsR0FBQVEsTUFBQSxDQUFBRyxjQUFBLGNBQUFMLENBQUEsRUFBQVQsQ0FBQSxFQUFBVSxDQUFBLElBQUFELENBQUEsQ0FBQVQs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