diff --git a/app/Http/Controllers/frontend/ServiceController.php b/app/Http/Controllers/frontend/ServiceController.php index aa8e6d2..74dbd49 100644 --- a/app/Http/Controllers/frontend/ServiceController.php +++ b/app/Http/Controllers/frontend/ServiceController.php @@ -794,6 +794,60 @@ class ServiceController extends Controller } } + /** + * Renew service for selected months + */ + public function renew(Request $request) + { + try { + $user = customer(); + if (!$user) { + return response()->json([ + 'error' => true, + 'message' => __('Chưa đăng nhập. Vui lòng đăng nhập để sử dụng tính năng này.'), + ], 401); + } + + $validated = FacadesValidator::make($request->all(), [ + 'product_id' => 'required|string|max:255', + 'plan' => 'required|string|in:3,6,12,24,other', + 'months' => 'nullable|integer|min:1|max:60', + ]); + + if ($validated->fails()) { + return response()->json([ + 'error' => true, + 'message' => __('Dữ liệu không hợp lệ'), + 'errors' => $validated->errors(), + ], 422); + } + + $months = $request->plan === 'other' ? (int) ($request->months ?? 1) : (int) $request->plan; + $productId = $this->sanitizeInput($request->product_id); + + Log::info('Khách yêu cầu gia hạn dịch vụ', [ + 'user_id' => $user->id, + 'product_vmware_id' => $productId, + 'months' => $months, + ]); + + // TODO: implement actual renewal billing/workflow + return response()->json([ + 'error' => false, + 'message' => __('Yêu cầu gia hạn đã được ghi nhận'), + ]); + } catch (\Exception $e) { + Log::error('Lỗi renew', [ + 'user_id' => customer()?->id, + 'error' => $e->getMessage(), + ]); + return response()->json([ + 'error' => true, + 'message' => __('Có lỗi xảy ra khi gia hạn'), + ], 500); + } + } + /** * Secure remove snapshot using session authentication - NO BEARER TOKEN */ diff --git a/public/js/service/service.min.js b/public/js/service/service.min.js index 7550ab1..e3f0517 100644 --- a/public/js/service/service.min.js +++ b/public/js/service/service.min.js @@ -15,7 +15,7 @@ \*****************************************/ /***/ (() => { -eval("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); }\nfunction 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; }\nfunction _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; }\nfunction _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; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _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); }\nfunction _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; }\nfunction 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); }\nfunction _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); }); }; }\n// Global variables - NO SENSITIVE DATA (no tokens)\nvar invoiceId;\nvar invoiceOrdernum;\nvar vmId;\nvar vmHostname;\nvar csrfToken;\n\n// Initialize variables from data attributes or global variables\nfunction initializeVariables() {\n // Get data from meta tags or global variables set in Blade template\n var metaInvoiceId = document.querySelector('meta[name=\"invoice-id\"]');\n var metaInvoiceOrdernum = document.querySelector('meta[name=\"invoice-ordernum\"]');\n var metaVmId = document.querySelector('meta[name=\"vm-id\"]');\n var metaVmHostname = document.querySelector('meta[name=\"vm-hostname\"]');\n var metaCsrfToken = document.querySelector('meta[name=\"csrf-token\"]');\n invoiceId = metaInvoiceId ? metaInvoiceId.getAttribute(\"content\") : window.invoiceId;\n invoiceOrdernum = metaInvoiceOrdernum ? metaInvoiceOrdernum.getAttribute(\"content\") : window.invoiceOrdernum;\n vmId = metaVmId ? metaVmId.getAttribute(\"content\") : window.vmId;\n vmHostname = metaVmHostname ? metaVmHostname.getAttribute(\"content\") : window.vmHostname;\n csrfToken = metaCsrfToken ? metaCsrfToken.getAttribute(\"content\") : window.csrfToken;\n}\n\n// Cấu hình toast nếu có thể\nif (typeof FuiToast !== \"undefined\" && FuiToast.config) {\n FuiToast.config({\n position: \"top-center\"\n });\n}\nfunction showNotification(message) {\n var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \"success\";\n if (type === \"success\") {\n FuiToast.success(message);\n } else {\n FuiToast.error(message);\n }\n}\nfunction createSnapshot() {\n return _createSnapshot.apply(this, arguments);\n} // Handle snapshot form submission with loading notification\nfunction _createSnapshot() {\n _createSnapshot = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee8() {\n var snapshotBtn, requestBody, headers, snapshotPromise;\n return _regeneratorRuntime().wrap(function _callee8$(_context8) {\n while (1) switch (_context8.prev = _context8.next) {\n case 0:\n snapshotBtn = document.getElementById(\"createSnapshotButton\");\n if (!(snapshotBtn && snapshotBtn.disabled)) {\n _context8.next = 3;\n break;\n }\n return _context8.abrupt(\"return\");\n case 3:\n requestBody = {\n product_id: vmId\n };\n headers = {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n \"X-CSRF-TOKEN\": csrfToken\n // NO Authorization header - using session auth\n };\n snapshotPromise = fetch(\"/secure/create-snapshots\", {\n method: \"POST\",\n headers: headers,\n body: JSON.stringify(requestBody),\n credentials: \"same-origin\"\n }).then(/*#__PURE__*/function () {\n var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee7(response) {\n var data, text, errorMessage;\n return _regeneratorRuntime().wrap(function _callee7$(_context7) {\n while (1) switch (_context7.prev = _context7.next) {\n case 0:\n if (!(response.redirected || response.status === 401)) {\n _context7.next = 2;\n break;\n }\n throw new Error(\"Phiên đăng nhập đã hết hạn, vui lòng đăng nhập lại\");\n case 2:\n if (!response.redirected) {\n _context7.next = 4;\n break;\n }\n return _context7.abrupt(\"return\", \"Đã gửi yêu cầu tạo snapshot. Quá trình sẽ mất 3-5 phút, vui lòng chờ đợi.\");\n case 4:\n _context7.prev = 4;\n _context7.next = 7;\n return response.text();\n case 7:\n text = _context7.sent;\n _context7.prev = 8;\n data = JSON.parse(text);\n _context7.next = 20;\n break;\n case 12:\n _context7.prev = 12;\n _context7.t0 = _context7[\"catch\"](8);\n if (!(text.includes(\"success\") || response.ok)) {\n _context7.next = 19;\n break;\n }\n setTimeout(function () {\n location.reload();\n }, 2000);\n return _context7.abrupt(\"return\", \"Đã gửi yêu cầu tạo snapshot. Quá trình sẽ mất 3-5 phút, vui lòng chờ đợi.\");\n case 19:\n throw new Error(\"Có lỗi xảy ra khi gửi yêu cầu tạo snapshot\");\n case 20:\n _context7.next = 25;\n break;\n case 22:\n _context7.prev = 22;\n _context7.t1 = _context7[\"catch\"](4);\n throw new Error(\"Lỗi định dạng dữ liệu từ máy chủ\");\n case 25:\n if (!(data && !data.error)) {\n _context7.next = 30;\n break;\n }\n setTimeout(function () {\n location.reload();\n }, 2000);\n return _context7.abrupt(\"return\", data.message || \"Đã gửi yêu cầu tạo snapshot. Quá trình sẽ mất 3-5 phút, vui lòng chờ đợi.\");\n case 30:\n errorMessage = \"Có lỗi xảy ra khi tạo snapshot\";\n if (data && data.message) {\n if (_typeof(data.message) === \"object\") {\n if (data.message.messages && data.message.messages.length > 0) {\n errorMessage = data.message.messages[0].default_message || data.message.messages[0].message || \"Có lỗi xảy ra\";\n } else if (data.message.error_type) {\n errorMessage = \"L\\u1ED7i: \".concat(data.message.error_type);\n } else {\n errorMessage = \"Có lỗi xảy ra từ hệ thống\";\n }\n } else {\n errorMessage = data.message;\n }\n } else if (data && data.value && data.value.messages && data.value.messages.length > 0) {\n errorMessage = data.value.messages[0].default_message;\n } else if (typeof data === \"string\") {\n errorMessage = data;\n } else if (data && data.error) {\n if (_typeof(data.error) === \"object\") {\n if (data.error.message) {\n errorMessage = data.error.message;\n } else if (data.error.toString && data.error.toString() !== \"[object Object]\") {\n errorMessage = data.error.toString();\n } else {\n errorMessage = \"Có lỗi xảy ra từ hệ thống\";\n }\n } else {\n errorMessage = data.error;\n }\n }\n throw new Error(errorMessage);\n case 33:\n case \"end\":\n return _context7.stop();\n }\n }, _callee7, null, [[4, 22], [8, 12]]);\n }));\n return function (_x) {\n return _ref.apply(this, arguments);\n };\n }());\n FuiToast.promise(snapshotPromise, {\n loading: \"Đang gửi yêu cầu tạo snapshot... (Quá trình mất 3-5 phút vui lòng giữ trang không tắt!)\",\n success: function success(data) {\n return data;\n },\n error: function error(_error2) {\n console.error(_error2);\n return _error2.message || \"Có lỗi xảy ra khi tạo snapshot\";\n }\n }, {\n isClose: true\n });\n case 7:\n case \"end\":\n return _context8.stop();\n }\n }, _callee8);\n }));\n return _createSnapshot.apply(this, arguments);\n}\nfunction handleSnapshotSubmit(event) {\n event.preventDefault();\n var snapshotPromise = new Promise(function (resolve, reject) {\n var form = document.getElementById(\"snapshotForm\");\n var formData = new FormData(form);\n fetch(form.action, {\n method: \"POST\",\n body: formData,\n headers: {\n \"X-CSRF-TOKEN\": csrfToken\n }\n }).then(function (response) {\n if (response.redirected) {\n resolve(\"Đã gửi yêu cầu tạo snapshot! Quá trình sẽ mất 3-5 phút.\");\n window.location.href = response.url;\n } else if (response.ok) {\n resolve(\"Đã gửi yêu cầu tạo snapshot! Quá trình sẽ mất 3-5 phút.\");\n setTimeout(function () {\n window.location.reload();\n }, 2000);\n } else {\n response.text().then(function (text) {\n reject(\"Có lỗi xảy ra khi gửi yêu cầu tạo snapshot\");\n });\n }\n })[\"catch\"](function (error) {\n reject(\"Lỗi kết nối: \" + error.message);\n });\n });\n if (typeof FuiToast !== \"undefined\" && FuiToast.promise) {\n FuiToast.promise(snapshotPromise, {\n loading: \"Đang gửi yêu cầu tạo snapshot...\",\n success: function success(data) {\n return data || \"Đã gửi yêu cầu tạo snapshot!\";\n },\n error: function error(_error) {\n return _error || \"Có lỗi xảy ra khi gửi yêu cầu tạo snapshot\";\n }\n });\n } else {\n if (typeof FuiToast !== \"undefined\") {\n FuiToast.loading(\"Đang gửi yêu cầu tạo snapshot...\", {\n duration: 0\n });\n } else {\n alert(\"Đang gửi yêu cầu tạo snapshot...\");\n }\n setTimeout(function () {\n document.getElementById(\"snapshotForm\").submit();\n }, 500);\n }\n}\nfunction startVirtualMachine() {\n return _startVirtualMachine.apply(this, arguments);\n}\nfunction _startVirtualMachine() {\n _startVirtualMachine = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee10() {\n var startBtn, requestBody, headers, startPromise;\n return _regeneratorRuntime().wrap(function _callee10$(_context10) {\n while (1) switch (_context10.prev = _context10.next) {\n case 0:\n startBtn = document.getElementById(\"startVMButton\");\n if (!(startBtn && startBtn.disabled)) {\n _context10.next = 3;\n break;\n }\n return _context10.abrupt(\"return\");\n case 3:\n requestBody = {\n vm_id: vmId\n };\n headers = {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n \"X-CSRF-TOKEN\": csrfToken\n // NO Authorization header - using session auth\n };\n startPromise = fetch(\"/api/secure/start-vm\", {\n method: \"POST\",\n headers: headers,\n body: JSON.stringify(requestBody),\n credentials: \"same-origin\"\n }).then(/*#__PURE__*/function () {\n var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee9(response) {\n var data, errorMessage;\n return _regeneratorRuntime().wrap(function _callee9$(_context9) {\n while (1) switch (_context9.prev = _context9.next) {\n case 0:\n if (!(response.redirected || response.status === 401)) {\n _context9.next = 2;\n break;\n }\n throw new Error(\"Phiên đăng nhập đã hết hạn, vui lòng đăng nhập lại\");\n case 2:\n _context9.prev = 2;\n _context9.next = 5;\n return response.json();\n case 5:\n data = _context9.sent;\n _context9.next = 11;\n break;\n case 8:\n _context9.prev = 8;\n _context9.t0 = _context9[\"catch\"](2);\n throw new Error(\"Lỗi định dạng dữ liệu từ máy chủ\");\n case 11:\n if (data.error) {\n _context9.next = 16;\n break;\n }\n setTimeout(function () {\n location.reload();\n }, 2000);\n return _context9.abrupt(\"return\", data.message);\n case 16:\n if (!(data.type === \"com.vmware.vapi.std.errors.already_in_desired_state\" || data.message && data.message.error_type === \"ALREADY_IN_DESIRED_STATE\")) {\n _context9.next = 21;\n break;\n }\n setTimeout(function () {\n location.reload();\n }, 2000);\n return _context9.abrupt(\"return\", \"Máy chủ đã được bật\");\n case 21:\n errorMessage = \"Có lỗi xảy ra\";\n if (data.message) {\n if (_typeof(data.message) === \"object\") {\n if (data.message.messages && data.message.messages.length > 0) {\n errorMessage = data.message.messages[0].default_message || data.message.messages[0].message || \"Có lỗi xảy ra\";\n } else if (data.message.error_type) {\n errorMessage = \"L\\u1ED7i: \".concat(data.message.error_type);\n } else {\n errorMessage = \"Có lỗi xảy ra từ hệ thống\";\n }\n } else {\n errorMessage = data.message;\n }\n } else if (data.value && data.value.messages && data.value.messages.length > 0) {\n errorMessage = data.value.messages[0].default_message;\n } else if (typeof data === \"string\") {\n errorMessage = data;\n } else if (data.error) {\n if (_typeof(data.error) === \"object\") {\n if (data.error.message) {\n errorMessage = data.error.message;\n } else if (data.error.toString && data.error.toString() !== \"[object Object]\") {\n errorMessage = data.error.toString();\n } else {\n errorMessage = \"Có lỗi xảy ra từ hệ thống\";\n }\n } else {\n errorMessage = data.error;\n }\n }\n throw new Error(errorMessage);\n case 24:\n case \"end\":\n return _context9.stop();\n }\n }, _callee9, null, [[2, 8]]);\n }));\n return function (_x2) {\n return _ref2.apply(this, arguments);\n };\n }());\n FuiToast.promise(startPromise, {\n loading: \"Đang khởi động máy ảo...\",\n success: function success(data) {\n return data;\n },\n error: function error(_error3) {\n console.error(_error3);\n return _error3.message || \"Có lỗi xảy ra khi khởi động máy ảo\";\n }\n }, {\n isClose: true\n });\n case 7:\n case \"end\":\n return _context10.stop();\n }\n }, _callee10);\n }));\n return _startVirtualMachine.apply(this, arguments);\n}\nfunction stopVirtualMachine() {\n return _stopVirtualMachine.apply(this, arguments);\n} // DOM ready\nfunction _stopVirtualMachine() {\n _stopVirtualMachine = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee12() {\n var stopBtn, requestBody, headers, stopPromise;\n return _regeneratorRuntime().wrap(function _callee12$(_context12) {\n while (1) switch (_context12.prev = _context12.next) {\n case 0:\n stopBtn = document.getElementById(\"stopVMButton\");\n if (!(stopBtn && stopBtn.disabled)) {\n _context12.next = 3;\n break;\n }\n return _context12.abrupt(\"return\");\n case 3:\n requestBody = {\n vm_id: vmId\n };\n headers = {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n \"X-CSRF-TOKEN\": csrfToken\n // NO Authorization header - using session auth\n };\n stopPromise = fetch(\"/api/secure/stop-vm\", {\n method: \"POST\",\n headers: headers,\n body: JSON.stringify(requestBody),\n credentials: \"same-origin\"\n }).then(/*#__PURE__*/function () {\n var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee11(response) {\n var data, errorMessage;\n return _regeneratorRuntime().wrap(function _callee11$(_context11) {\n while (1) switch (_context11.prev = _context11.next) {\n case 0:\n if (!(response.redirected || response.status === 401)) {\n _context11.next = 2;\n break;\n }\n throw new Error(\"Phiên đăng nhập đã hết hạn, vui lòng đăng nhập lại\");\n case 2:\n _context11.prev = 2;\n _context11.next = 5;\n return response.json();\n case 5:\n data = _context11.sent;\n _context11.next = 11;\n break;\n case 8:\n _context11.prev = 8;\n _context11.t0 = _context11[\"catch\"](2);\n throw new Error(\"Lỗi định dạng dữ liệu từ máy chủ\");\n case 11:\n if (data.error) {\n _context11.next = 16;\n break;\n }\n setTimeout(function () {\n location.reload();\n }, 2000);\n return _context11.abrupt(\"return\", data.message);\n case 16:\n if (!(data.type === \"com.vmware.vapi.std.errors.already_in_desired_state\" || data.message && data.message.error_type === \"ALREADY_IN_DESIRED_STATE\")) {\n _context11.next = 21;\n break;\n }\n setTimeout(function () {\n location.reload();\n }, 2000);\n return _context11.abrupt(\"return\", \"Máy chủ đã được tắt\");\n case 21:\n errorMessage = \"Có lỗi xảy ra\";\n if (data.message) {\n if (_typeof(data.message) === \"object\") {\n if (data.message.messages && data.message.messages.length > 0) {\n errorMessage = data.message.messages[0].default_message || data.message.messages[0].message || \"Có lỗi xảy ra\";\n } else if (data.message.error_type) {\n errorMessage = \"L\\u1ED7i: \".concat(data.message.error_type);\n } else {\n errorMessage = \"Có lỗi xảy ra từ hệ thống\";\n }\n } else {\n errorMessage = data.message;\n }\n } else if (data.value && data.value.messages && data.value.messages.length > 0) {\n errorMessage = data.value.messages[0].default_message;\n } else if (typeof data === \"string\") {\n errorMessage = data;\n } else if (data.error) {\n if (_typeof(data.error) === \"object\") {\n if (data.error.message) {\n errorMessage = data.error.message;\n } else if (data.error.toString && data.error.toString() !== \"[object Object]\") {\n errorMessage = data.error.toString();\n } else {\n errorMessage = \"Có lỗi xảy ra từ hệ thống\";\n }\n } else {\n errorMessage = data.error;\n }\n }\n throw new Error(errorMessage);\n case 24:\n case \"end\":\n return _context11.stop();\n }\n }, _callee11, null, [[2, 8]]);\n }));\n return function (_x3) {\n return _ref3.apply(this, arguments);\n };\n }());\n FuiToast.promise(stopPromise, {\n loading: \"Đang dừng máy ảo...\",\n success: function success(data) {\n return data;\n },\n error: function error(_error4) {\n console.error(_error4);\n return _error4.message || \"Có lỗi xảy ra khi dừng máy ảo\";\n }\n }, {\n isClose: true\n });\n case 7:\n case \"end\":\n return _context12.stop();\n }\n }, _callee12);\n }));\n return _stopVirtualMachine.apply(this, arguments);\n}\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n // Initialize variables\n initializeVariables();\n var startBtn = document.getElementById(\"startVMButton\");\n var stopBtn = document.getElementById(\"stopVMButton\");\n var restartBtn = document.getElementById(\"restartVMButton\");\n var snapshotBtn = document.getElementById(\"createSnapshotButton\");\n if (startBtn) {\n startBtn.addEventListener(\"click\", function (e) {\n e.preventDefault();\n e.stopPropagation();\n startVirtualMachine();\n });\n }\n if (stopBtn) {\n stopBtn.addEventListener(\"click\", function (e) {\n e.preventDefault();\n e.stopPropagation();\n stopVirtualMachine();\n });\n }\n if (restartBtn) {\n restartBtn.addEventListener(\"click\", function (e) {\n e.preventDefault();\n e.stopPropagation();\n restartVirtualMachine();\n });\n }\n if (snapshotBtn) {\n snapshotBtn.addEventListener(\"click\", function (e) {\n e.preventDefault();\n e.stopPropagation();\n createSnapshot();\n });\n }\n});\n\n// Snapshot Table Management\nfunction snapshotTable() {\n // Constants\n var API_ENDPOINTS = {\n GET_SNAPSHOTS: \"/dich-vu-dang-ky/secure/get-snapshots\",\n REMOVE_SNAPSHOT: \"/dich-vu-dang-ky/secure/remove-snapshot\",\n REVERT_SNAPSHOT: \"/dich-vu-dang-ky/secure/revert-snapshot\"\n };\n var MESSAGES = {\n VM_ID_NOT_FOUND: \"Không tìm thấy ID máy ảo\",\n CONNECTION_ERROR: \"Không thể kết nối đến máy chủ\",\n GENERIC_ERROR: \"Có lỗi xảy ra\",\n DELETE_SUCCESS: \"Xóa snapshot thành công\",\n REVERT_SUCCESS: \"Khôi phục snapshot thành công\"\n };\n return {\n loading: false,\n snapshots: [],\n error: null,\n // Cache để tránh fetch lại không cần thiết\n _lastFetchTime: 0,\n _cacheTimeout: 30000,\n // 30 seconds\n fetchSnapshots: function fetchSnapshots() {\n var _arguments = arguments,\n _this = this;\n return _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {\n var _window$vmId;\n var forceRefresh, now, vmId, data;\n return _regeneratorRuntime().wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n forceRefresh = _arguments.length > 0 && _arguments[0] !== undefined ? _arguments[0] : false;\n // Check cache\n now = Date.now();\n if (!(!forceRefresh && _this.snapshots.length > 0 && now - _this._lastFetchTime < _this._cacheTimeout)) {\n _context.next = 4;\n break;\n }\n return _context.abrupt(\"return\");\n case 4:\n _this.loading = true;\n _this.error = null;\n vmId = (_window$vmId = window.vmId) === null || _window$vmId === void 0 ? void 0 : _window$vmId.trim();\n if (vmId) {\n _context.next = 10;\n break;\n }\n _this._setError(MESSAGES.VM_ID_NOT_FOUND);\n return _context.abrupt(\"return\");\n case 10:\n _context.prev = 10;\n _context.next = 13;\n return _this._makeRequest(\"\".concat(API_ENDPOINTS.GET_SNAPSHOTS, \"?product_id=\").concat(encodeURIComponent(vmId)));\n case 13:\n data = _context.sent;\n _this._processSnapshotsResponse(data);\n _this._lastFetchTime = now;\n _context.next = 21;\n break;\n case 18:\n _context.prev = 18;\n _context.t0 = _context[\"catch\"](10);\n _this._handleError(\"fetching snapshots\", _context.t0);\n case 21:\n _context.prev = 21;\n _this.loading = false;\n return _context.finish(21);\n case 24:\n case \"end\":\n return _context.stop();\n }\n }, _callee, null, [[10, 18, 21, 24]]);\n }))();\n },\n formatSize: function formatSize(sizeGB, sizeMB) {\n var bytes = this._convertToBytes(sizeGB, sizeMB);\n if (bytes === 0) return \"0 B\";\n return this._formatBytes(bytes);\n },\n deleteSnapshot: function deleteSnapshot(snapshotName) {\n var _this2 = this;\n return _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {\n return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n _context2.next = 2;\n return _this2._confirmAction(\"Xác nhận xóa\", \"B\\u1EA1n c\\xF3 ch\\u1EAFc ch\\u1EAFn mu\\u1ED1n x\\xF3a snapshot \\\"\".concat(snapshotName, \"\\\"? H\\xE0nh \\u0111\\u1ED9ng n\\xE0y kh\\xF4ng th\\u1EC3 ho\\xE0n t\\xE1c.\"), \"Xóa\");\n case 2:\n if (_context2.sent) {\n _context2.next = 4;\n break;\n }\n return _context2.abrupt(\"return\");\n case 4:\n _context2.next = 6;\n return _this2._executeSnapshotAction(API_ENDPOINTS.REMOVE_SNAPSHOT, snapshotName, MESSAGES.DELETE_SUCCESS, \"deleting snapshot\");\n case 6:\n case \"end\":\n return _context2.stop();\n }\n }, _callee2);\n }))();\n },\n revertSnapshot: function revertSnapshot(snapshotName) {\n var _this3 = this;\n return _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3() {\n return _regeneratorRuntime().wrap(function _callee3$(_context3) {\n while (1) switch (_context3.prev = _context3.next) {\n case 0:\n _context3.next = 2;\n return _this3._confirmAction(\"Xác nhận khôi phục\", \"B\\u1EA1n c\\xF3 ch\\u1EAFc ch\\u1EAFn mu\\u1ED1n kh\\xF4i ph\\u1EE5c v\\u1EC1 snapshot \\\"\".concat(snapshotName, \"\\\"? T\\u1EA5t c\\u1EA3 d\\u1EEF li\\u1EC7u hi\\u1EC7n t\\u1EA1i s\\u1EBD b\\u1ECB m\\u1EA5t.\"), \"Khôi phục\");\n case 2:\n if (_context3.sent) {\n _context3.next = 4;\n break;\n }\n return _context3.abrupt(\"return\");\n case 4:\n _context3.next = 6;\n return _this3._executeSnapshotAction(API_ENDPOINTS.REVERT_SNAPSHOT, snapshotName, MESSAGES.REVERT_SUCCESS, \"reverting snapshot\", 2000);\n case 6:\n case \"end\":\n return _context3.stop();\n }\n }, _callee3);\n }))();\n },\n // Public helper methods\n refreshSnapshots: function refreshSnapshots() {\n return this.fetchSnapshots(true);\n },\n getSnapshotCount: function getSnapshotCount() {\n return this.snapshots.length;\n },\n isLoading: function isLoading() {\n return this.loading;\n },\n hasError: function hasError() {\n return this.error !== null;\n },\n // Private helper methods\n _setError: function _setError(message) {\n this.loading = false;\n this.error = message;\n this.snapshots = [];\n },\n _makeRequest: function _makeRequest(url) {\n var _arguments2 = arguments;\n return _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee4() {\n var options, defaultOptions, response;\n return _regeneratorRuntime().wrap(function _callee4$(_context4) {\n while (1) switch (_context4.prev = _context4.next) {\n case 0:\n options = _arguments2.length > 1 && _arguments2[1] !== undefined ? _arguments2[1] : {};\n defaultOptions = {\n method: \"GET\",\n headers: {\n Accept: \"application/json\",\n \"X-CSRF-TOKEN\": csrfToken,\n \"Cache-Control\": \"no-cache\"\n },\n credentials: \"same-origin\"\n };\n _context4.next = 4;\n return fetch(url, _objectSpread(_objectSpread({}, defaultOptions), options));\n case 4:\n response = _context4.sent;\n if (response.ok) {\n _context4.next = 7;\n break;\n }\n throw new Error(\"HTTP error! status: \".concat(response.status));\n case 7:\n return _context4.abrupt(\"return\", response.json());\n case 8:\n case \"end\":\n return _context4.stop();\n }\n }, _callee4);\n }))();\n },\n _processSnapshotsResponse: function _processSnapshotsResponse(data) {\n var _data$data;\n // Handle different response structures\n if (data.error === false && (_data$data = data.data) !== null && _data$data !== void 0 && _data$data.snapshots) {\n this.snapshots = data.data.snapshots;\n } else if (data.error === true) {\n throw new Error(data.message || \"Có lỗi xảy ra khi tải danh sách snapshot\");\n } else if (data.snapshots) {\n this.snapshots = data.snapshots;\n } else {\n this.snapshots = [];\n }\n },\n _convertToBytes: function _convertToBytes(sizeGB, sizeMB) {\n if (sizeGB) {\n return parseFloat(sizeGB) * Math.pow(1024, 3); // GB to bytes\n } else if (sizeMB) {\n return parseFloat(sizeMB) * Math.pow(1024, 2); // MB to bytes\n }\n return 0;\n },\n _formatBytes: function _formatBytes(bytes) {\n var units = [\"B\", \"KB\", \"MB\", \"GB\", \"TB\"];\n var k = 1024;\n var i = Math.floor(Math.log(bytes) / Math.log(k));\n var size = parseFloat((bytes / Math.pow(k, i)).toFixed(2));\n return \"\".concat(size, \" \").concat(units[i]);\n },\n _confirmAction: function _confirmAction(title, text, confirmText) {\n return _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee5() {\n var result;\n return _regeneratorRuntime().wrap(function _callee5$(_context5) {\n while (1) switch (_context5.prev = _context5.next) {\n case 0:\n _context5.next = 2;\n return Swal.fire({\n title: title,\n text: text,\n icon: \"warning\",\n showCancelButton: true,\n confirmButtonColor: title.includes(\"xóa\") ? \"#d33\" : \"#3085d6\",\n cancelButtonColor: title.includes(\"xóa\") ? \"#3085d6\" : \"#d33\",\n confirmButtonText: confirmText,\n cancelButtonText: \"Hủy bỏ\",\n reverseButtons: true\n });\n case 2:\n result = _context5.sent;\n return _context5.abrupt(\"return\", result.isConfirmed);\n case 4:\n case \"end\":\n return _context5.stop();\n }\n }, _callee5);\n }))();\n },\n _executeSnapshotAction: function _executeSnapshotAction(endpoint, snapshotName, successMessage, errorContext) {\n var _arguments3 = arguments,\n _this4 = this;\n return _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee6() {\n var delay, data;\n return _regeneratorRuntime().wrap(function _callee6$(_context6) {\n while (1) switch (_context6.prev = _context6.next) {\n case 0:\n delay = _arguments3.length > 4 && _arguments3[4] !== undefined ? _arguments3[4] : 1000;\n _context6.prev = 1;\n _context6.next = 4;\n return _this4._makeRequest(endpoint, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n \"X-CSRF-TOKEN\": csrfToken\n },\n body: JSON.stringify({\n product_id: window.vmId,\n snapshot_name: snapshotName\n })\n });\n case 4:\n data = _context6.sent;\n if (!(data.error === false)) {\n _context6.next = 10;\n break;\n }\n showNotification(data.message || successMessage, \"success\");\n setTimeout(function () {\n return _this4.refreshSnapshots();\n }, delay);\n _context6.next = 11;\n break;\n case 10:\n throw new Error(data.message || \"\".concat(MESSAGES.GENERIC_ERROR, \" khi \").concat(errorContext));\n case 11:\n _context6.next = 16;\n break;\n case 13:\n _context6.prev = 13;\n _context6.t0 = _context6[\"catch\"](1);\n _this4._handleError(errorContext, _context6.t0);\n case 16:\n case \"end\":\n return _context6.stop();\n }\n }, _callee6, null, [[1, 13]]);\n }))();\n },\n _handleError: function _handleError(context, error) {\n console.error(\"Error \".concat(context, \":\"), error);\n var message = error.message || MESSAGES.CONNECTION_ERROR;\n if (context.includes(\"fetching\")) {\n this._setError(message);\n } else {\n showNotification(message, \"error\");\n }\n }\n };\n}\n\n// Make snapshotTable available globally for Alpine.js\nwindow.snapshotTable = snapshotTable;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvc2VydmljZS9zZXJ2aWNlLmpzIiwibmFtZXMiOlsiX3JlZ2VuZXJhdG9yUnVudGltZSIsImUiLCJ0IiwiciIsIk9iamVjdCIsInByb3RvdHlwZSIsIm4iLCJoYXNPd25Qcm9wZXJ0eSIsIm8iLCJkZWZpbmVQcm9wZXJ0eSIsInZhbHVlIiwiaSIsIlN5bWJvbCIsImEiLCJpdGVyYXRvciIsImMiLCJhc3luY0l0ZXJhdG9yIiwidSIsInRvU3RyaW5nVGFnIiwiZGVmaW5lIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwid3JhcCIsIkdlbmVyYXRvciIsImNyZWF0ZSIsIkNvbnRleHQiLCJtYWtlSW52b2tlTWV0aG9kIiwidHJ5Q2F0Y2giLCJ0eXBlIiwiYXJnIiwiY2FsbCIsImgiLCJsIiwiZiIsInMiLCJ5IiwiR2VuZXJhdG9yRnVuY3Rpb24iLCJHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSIsInAiLCJkIiwiZ2V0UHJvdG90eXBlT2YiLCJ2IiwidmFsdWVzIiwiZyIsImRlZmluZUl0ZXJhdG9yTWV0aG9kcyIsImZvckVhY2giLCJfaW52b2tlIiwiQXN5bmNJdGVyYXRvciIsImludm9rZSIsIl90eXBlb2YiLCJyZXNvbHZlIiwiX19hd2FpdCIsInRoZW4iLCJjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZyIsIkVycm9yIiwiZG9uZSIsIm1ldGhvZCIsImRlbGVnYXRlIiwibWF5YmVJbnZva2VEZWxlZ2F0ZSIsInNlbnQiLCJfc2VudCIsImRpc3BhdGNoRXhjZXB0aW9uIiwiYWJydXB0IiwiVHlwZUVycm9yIiwicmVzdWx0TmFtZSIsIm5leHQiLCJuZXh0TG9jIiwicHVzaFRyeUVudHJ5IiwidHJ5TG9jIiwiY2F0Y2hMb2MiLCJmaW5hbGx5TG9jIiwiYWZ0ZXJMb2MiLCJ0cnlFbnRyaWVzIiwicHVzaCIsInJlc2V0VHJ5RW50cnkiLCJjb21wbGV0aW9uIiwicmVzZXQiLCJpc05hTiIsImxlbmd0aCIsImRpc3BsYXlOYW1lIiwiaXNHZW5lcmF0b3JGdW5jdGlvbiIsImNvbnN0cnVjdG9yIiwibmFtZSIsIm1hcmsiLCJzZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyIsImF3cmFwIiwiYXN5bmMiLCJQcm9taXNlIiwia2V5cyIsInJldmVyc2UiLCJwb3AiLCJwcmV2IiwiY2hhckF0Iiwic2xpY2UiLCJzdG9wIiwicnZhbCIsImhhbmRsZSIsImNvbXBsZXRlIiwiZmluaXNoIiwiX2NhdGNoIiwiZGVsZWdhdGVZaWVsZCIsImFzeW5jR2VuZXJhdG9yU3RlcCIsIl9hc3luY1RvR2VuZXJhdG9yIiwiYXJndW1lbnRzIiwiYXBwbHkiLCJfbmV4dCIsIl90aHJvdyIsImludm9pY2VJZCIsImludm9pY2VPcmRlcm51bSIsInZtSWQiLCJ2bUhvc3RuYW1lIiwiY3NyZlRva2VuIiwiaW5pdGlhbGl6ZVZhcmlhYmxlcyIsIm1ldGFJbnZvaWNlSWQiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3IiLCJtZXRhSW52b2ljZU9yZGVybnVtIiwibWV0YVZtSWQiLCJtZXRhVm1Ib3N0bmFtZSIsIm1ldGFDc3JmVG9rZW4iLCJnZXRBdHRyaWJ1dGUiLCJ3aW5kb3ciLCJGdWlUb2FzdCIsImNvbmZpZyIsInBvc2l0aW9uIiwic2hvd05vdGlmaWNhdGlvbiIsIm1lc3NhZ2UiLCJ1bmRlZmluZWQiLCJzdWNjZXNzIiwiZXJyb3IiLCJjcmVhdGVTbmFwc2hvdCIsIl9jcmVhdGVTbmFwc2hvdCIsIl9jYWxsZWU4Iiwic25hcHNob3RCdG4iLCJyZXF1ZXN0Qm9keSIsImhlYWRlcnMiLCJzbmFwc2hvdFByb21pc2UiLCJfY2FsbGVlOCQiLCJfY29udGV4dDgiLCJnZXRFbGVtZW50QnlJZCIsImRpc2FibGVkIiwicHJvZHVjdF9pZCIsIkFjY2VwdCIsImZldGNoIiwiYm9keSIsIkpTT04iLCJzdHJpbmdpZnkiLCJjcmVkZW50aWFscyIsIl9yZWYiLCJfY2FsbGVlNyIsInJlc3BvbnNlIiwiZGF0YSIsInRleHQiLCJlcnJvck1lc3NhZ2UiLCJfY2FsbGVlNyQiLCJfY29udGV4dDciLCJyZWRpcmVjdGVkIiwic3RhdHVzIiwicGFyc2UiLCJ0MCIsImluY2x1ZGVzIiwib2siLCJzZXRUaW1lb3V0IiwibG9jYXRpb24iLCJyZWxvYWQiLCJ0MSIsIm1lc3NhZ2VzIiwiZGVmYXVsdF9tZXNzYWdlIiwiZXJyb3JfdHlwZSIsImNvbmNhdCIsInRvU3RyaW5nIiwiX3giLCJwcm9taXNlIiwibG9hZGluZyIsImNvbnNvbGUiLCJpc0Nsb3NlIiwiaGFuZGxlU25hcHNob3RTdWJtaXQiLCJldmVudCIsInByZXZlbnREZWZhdWx0IiwicmVqZWN0IiwiZm9ybSIsImZvcm1EYXRhIiwiRm9ybURhdGEiLCJhY3Rpb24iLCJocmVmIiwidXJsIiwiZHVyYXRpb24iLCJhbGVydCIsInN1Ym1pdCIsInN0YXJ0VmlydHVhbE1hY2hpbmUiLCJfc3RhcnRWaXJ0dWFsTWFjaGluZSIsIl9jYWxsZWUxMCIsInN0YXJ0QnRuIiwic3RhcnRQcm9taXNlIiwiX2NhbGxlZTEwJCIsIl9jb250ZXh0MTAiLCJ2bV9pZCIsIl9yZWYyIiwiX2NhbGxlZTkiLCJfY2FsbGVlOSQiLCJfY29udGV4dDkiLCJqc29uIiwiX3gyIiwic3RvcFZpcnR1YWxNYWNoaW5lIiwiX3N0b3BWaXJ0dWFsTWFjaGluZSIsIl9jYWxsZWUxMiIsInN0b3BCdG4iLCJzdG9wUHJvbWlzZSIsIl9jYWxsZWUxMiQiLCJfY29udGV4dDEyIiwiX3JlZjMiLCJfY2FsbGVlMTEiLCJfY2FsbGVlMTEkIiwiX2NvbnRleHQxMSIsIl94MyIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZXN0YXJ0QnRuIiwic3RvcFByb3BhZ2F0aW9uIiwicmVzdGFydFZpcnR1YWxNYWNoaW5lIiwic25hcHNob3RUYWJsZSIsIkFQSV9FTkRQT0lOVFMiLCJHRVRfU05BUFNIT1RTIiwiUkVNT1ZFX1NOQVBTSE9UIiwiUkVWRVJUX1NOQVBTSE9UIiwiTUVTU0FHRVMiLCJWTV9JRF9OT1RfRk9VTkQiLCJDT05ORUNUSU9OX0VSUk9SIiwiR0VORVJJQ19FUlJPUiIsIkRFTEVURV9TVUNDRVNTIiwiUkVWRVJUX1NVQ0NFU1MiLCJzbmFwc2hvdHMiLCJfbGFzdEZldGNoVGltZSIsIl9jYWNoZVRpbWVvdXQiLCJmZXRjaFNuYXBzaG90cyIsIl9hcmd1bWVudHMiLCJfdGhpcyIsIl9jYWxsZWUiLCJfd2luZG93JHZtSWQiLCJmb3JjZVJlZnJlc2giLCJub3ciLCJfY2FsbGVlJCIsIl9jb250ZXh0IiwiRGF0ZSIsInRyaW0iLCJfc2V0RXJyb3IiLCJfbWFrZVJlcXVlc3QiLCJlbmNvZGVVUklDb21wb25lbnQiLCJfcHJvY2Vzc1NuYXBzaG90c1Jlc3BvbnNlIiwiX2hhbmRsZUVycm9yIiwiZm9ybWF0U2l6ZSIsInNpemVHQiIsInNpemVNQiIsImJ5dGVzIiwiX2NvbnZlcnRUb0J5dGVzIiwiX2Zvcm1hdEJ5dGVzIiwiZGVsZXRlU25hcHNob3QiLCJzbmFwc2hvdE5hbWUiLCJfdGhpczIiLCJfY2FsbGVlMiIsIl9jYWxsZWUyJCIsIl9jb250ZXh0MiIsIl9jb25maXJtQWN0aW9uIiwiX2V4ZWN1dGVTbmFwc2hvdEFjdGlvbiIsInJldmVydFNuYXBzaG90IiwiX3RoaXMzIiwiX2NhbGxlZTMiLCJfY2FsbGVlMyQiLCJfY29udGV4dDMiLCJyZWZyZXNoU25hcHNob3RzIiwiZ2V0U25hcHNob3RDb3VudCIsImlzTG9hZGluZyIsImhhc0Vycm9yIiwiX2FyZ3VtZW50czIiLCJfY2FsbGVlNCIsIm9wdGlvbnMiLCJkZWZhdWx0T3B0aW9ucyIsIl9jYWxsZWU0JCIsIl9jb250ZXh0NCIsIl9vYmplY3RTcHJlYWQiLCJfZGF0YSRkYXRhIiwicGFyc2VGbG9hdCIsIk1hdGgiLCJwb3ciLCJ1bml0cyIsImsiLCJmbG9vciIsImxvZyIsInNpemUiLCJ0b0ZpeGVkIiwidGl0bGUiLCJjb25maXJtVGV4dCIsIl9jYWxsZWU1IiwicmVzdWx0IiwiX2NhbGxlZTUkIiwiX2NvbnRleHQ1IiwiU3dhbCIsImZpcmUiLCJpY29uIiwic2hvd0NhbmNlbEJ1dHRvbiIsImNvbmZpcm1CdXR0b25Db2xvciIsImNhbmNlbEJ1dHRvbkNvbG9yIiwiY29uZmlybUJ1dHRvblRleHQiLCJjYW5jZWxCdXR0b25UZXh0IiwicmV2ZXJzZUJ1dHRvbnMiLCJpc0NvbmZpcm1lZCIsImVuZHBvaW50Iiwic3VjY2Vzc01lc3NhZ2UiLCJlcnJvckNvbnRleHQiLCJfYXJndW1lbnRzMyIsIl90aGlzNCIsIl9jYWxsZWU2IiwiZGVsYXkiLCJfY2FsbGVlNiQiLCJfY29udGV4dDYiLCJzbmFwc2hvdF9uYW1lIiwiY29udGV4dCJdLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL3NlcnZpY2Uvc2VydmljZS5qcz9jMTVmIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEdsb2JhbCB2YXJpYWJsZXMgLSBOTyBTRU5TSVRJVkUgREFUQSAobm8gdG9rZW5zKVxyXG5sZXQgaW52b2ljZUlkO1xyXG5sZXQgaW52b2ljZU9yZGVybnVtO1xyXG5sZXQgdm1JZDtcclxubGV0IHZtSG9zdG5hbWU7XHJcbmxldCBjc3JmVG9rZW47XHJcblxyXG4vLyBJbml0aWFsaXplIHZhcmlhYmxlcyBmcm9tIGRhdGEgYXR0cmlidXRlcyBvciBnbG9iYWwgdmFyaWFibGVzXHJcbmZ1bmN0aW9uIGluaXRpYWxpemVWYXJpYWJsZXMoKSB7XHJcbiAgICAvLyBHZXQgZGF0YSBmcm9tIG1ldGEgdGFncyBvciBnbG9iYWwgdmFyaWFibGVzIHNldCBpbiBCbGFkZSB0ZW1wbGF0ZVxyXG4gICAgY29uc3QgbWV0YUludm9pY2VJZCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21ldGFbbmFtZT1cImludm9pY2UtaWRcIl0nKTtcclxuICAgIGNvbnN0IG1ldGFJbnZvaWNlT3JkZXJudW0gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtZXRhW25hbWU9XCJpbnZvaWNlLW9yZGVybnVtXCJdJyk7XHJcbiAgICBjb25zdCBtZXRhVm1JZCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21ldGFbbmFtZT1cInZtLWlkXCJdJyk7XHJcbiAgICBjb25zdCBtZXRhVm1Ib3N0bmFtZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21ldGFbbmFtZT1cInZtLWhvc3RuYW1lXCJdJyk7XHJcbiAgICBjb25zdCBtZXRhQ3NyZlRva2VuID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignbWV0YVtuYW1lPVwiY3NyZi10b2tlblwiXScpO1xyXG5cclxuICAgIGludm9pY2VJZCA9IG1ldGFJbnZvaWNlSWRcclxuICAgICAgICA/IG1ldGFJbnZvaWNlSWQuZ2V0QXR0cmlidXRlKFwiY29udGVudFwiKVxyXG4gICAgICAgIDogd2luZG93Lmludm9pY2VJZDtcclxuICAgIGludm9pY2VPcmRlcm51bSA9IG1ldGFJbnZvaWNlT3JkZXJudW1cclxuICAgICAgICA/IG1ldGFJbnZvaWNlT3JkZXJudW0uZ2V0QXR0cmlidXRlKFwiY29udGVudFwiKVxyXG4gICAgICAgIDogd2luZG93Lmludm9pY2VPcmRlcm51bTtcclxuICAgIHZtSWQgPSBtZXRhVm1JZCA/IG1ldGFWbUlkLmdldEF0dHJpYnV0ZShcImNvbnRlbnRcIikgOiB3aW5kb3cudm1JZDtcclxuICAgIHZtSG9zdG5hbWUgPSBtZXRhVm1Ib3N0bmFtZVxyXG4gICAgICAgID8gbWV0YVZtSG9zdG5hbWUuZ2V0QXR0cmlidXRlKFwiY29udGVudFwiKVxyXG4gICAgICAgIDogd2luZG93LnZtSG9zdG5hbWU7XHJcbiAgICBjc3JmVG9rZW4gPSBtZXRhQ3NyZlRva2VuXHJcbiAgICAgICAgPyBtZXRhQ3NyZlRva2VuLmdldEF0dHJpYnV0ZShcImNvbnRlbnRcIilcclxuICAgICAgICA6IHdpbmRvdy5jc3JmVG9rZW47XHJcbn1cclxuXHJcbi8vIEPhuqV1IGjDrG5oIHRvYXN0IG7hur91IGPDsyB0aOG7g1xyXG5pZiAodHlwZW9mIEZ1aVRvYXN0ICE9PSBcInVuZGVmaW5lZFwiICYmIEZ1aVRvYXN0LmNvbmZpZykge1xyXG4gICAgRnVpVG9hc3QuY29uZmlnKHtcclxuICAgICAgICBwb3NpdGlvbjogXCJ0b3AtY2VudGVyXCIsXHJcbiAgICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gc2hvd05vdGlmaWNhdGlvbihtZXNzYWdlLCB0eXBlID0gXCJzdWNjZXNzXCIpIHtcclxuICAgIGlmICh0eXBlID09PSBcInN1Y2Nlc3NcIikge1xyXG4gICAgICAgIEZ1aVRvYXN0LnN1Y2Nlc3MobWVzc2FnZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIEZ1aVRvYXN0LmVycm9yKG1lc3NhZ2UpO1xyXG4gICAgfVxyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVTbmFwc2hvdCgpIHtcclxuICAgIGNvbnN0IHNuYXBzaG90QnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJjcmVhdGVTbmFwc2hvdEJ1dHRvblwiKTtcclxuICAgIGlmIChzbmFwc2hvdEJ0biAmJiBzbmFwc2hvdEJ0bi5kaXNhYmxlZCkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IHJlcXVlc3RCb2R5ID0ge1xyXG4gICAgICAgIHByb2R1Y3RfaWQ6IHZtSWQsXHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGhlYWRlcnMgPSB7XHJcbiAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXHJcbiAgICAgICAgQWNjZXB0OiBcImFwcGxpY2F0aW9uL2pzb25cIixcclxuICAgICAgICBcIlgtQ1NSRi1UT0tFTlwiOiBjc3JmVG9rZW4sXHJcbiAgICAgICAgLy8gTk8gQXV0aG9yaXphdGlvbiBoZWFkZXIgLSB1c2luZyBzZXNzaW9uIGF1dGhcclxuICAgIH07XHJcblxyXG4gICAgY29uc3Qgc25hcHNob3RQcm9taXNlID0gZmV0Y2goXCIvc2VjdXJlL2NyZWF0ZS1zbmFwc2hvdHNcIiwge1xyXG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXHJcbiAgICAgICAgaGVhZGVyczogaGVhZGVycyxcclxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShyZXF1ZXN0Qm9keSksXHJcbiAgICAgICAgY3JlZGVudGlhbHM6IFwic2FtZS1vcmlnaW5cIixcclxuICAgIH0pLnRoZW4oYXN5bmMgKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLnJlZGlyZWN0ZWQgfHwgcmVzcG9uc2Uuc3RhdHVzID09PSA0MDEpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgICAgICAgXCJQaGnDqm4gxJHEg25nIG5o4bqtcCDEkcOjIGjhur90IGjhuqFuLCB2dWkgbMOybmcgxJHEg25nIG5o4bqtcCBs4bqhaVwiXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBDaGVjayBpZiByZXNwb25zZSBpcyByZWRpcmVjdGVkICh0eXBpY2FsIGZvciBMYXJhdmVsIHJlZGlyZWN0IHJlc3BvbnNlcylcclxuICAgICAgICBpZiAocmVzcG9uc2UucmVkaXJlY3RlZCkge1xyXG4gICAgICAgICAgICAvLyBFeHRyYWN0IG1lc3NhZ2UgZnJvbSBVUkwgaWYgcG9zc2libGUsIG9yIHNob3cgZ2VuZXJpYyBzdWNjZXNzXHJcbiAgICAgICAgICAgIHJldHVybiBcIsSQw6MgZ+G7rWkgecOqdSBj4bqndSB04bqhbyBzbmFwc2hvdC4gUXXDoSB0csOsbmggc+G6vSBt4bqldCAzLTUgcGjDunQsIHZ1aSBsw7JuZyBjaOG7nSDEkeG7o2kuXCI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgZGF0YTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCB0ZXh0ID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpO1xyXG5cclxuICAgICAgICAgICAgLy8gVHJ5IHRvIHBhcnNlIGFzIEpTT04gZmlyc3RcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKHRleHQpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChwYXJzZUVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBJZiBub3QgSlNPTiwgY2hlY2sgZm9yIEhUTUwgd2l0aCBzdWNjZXNzL2Vycm9yIG1lc3NhZ2VzXHJcbiAgICAgICAgICAgICAgICBpZiAodGV4dC5pbmNsdWRlcyhcInN1Y2Nlc3NcIikgfHwgcmVzcG9uc2Uub2spIHtcclxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24ucmVsb2FkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSwgMjAwMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwixJDDoyBn4butaSB5w6p1IGPhuqd1IHThuqFvIHNuYXBzaG90LiBRdcOhIHRyw6xuaCBz4bq9IG3huqV0IDMtNSBwaMO6dCwgdnVpIGzDsm5nIGNo4budIMSR4bujaS5cIjtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIkPDsyBs4buXaSB44bqjeSByYSBraGkgZ+G7rWkgecOqdSBj4bqndSB04bqhbyBzbmFwc2hvdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKHBhcnNlRXJyb3IpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTOG7l2kgxJHhu4tuaCBk4bqhbmcgZOG7ryBsaeG7h3UgdOG7qyBtw6F5IGNo4bunXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gSGFuZGxlIEpTT04gcmVzcG9uc2VcclxuICAgICAgICBpZiAoZGF0YSAmJiAhZGF0YS5lcnJvcikge1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpO1xyXG4gICAgICAgICAgICB9LCAyMDAwKTtcclxuICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgIGRhdGEubWVzc2FnZSB8fFxyXG4gICAgICAgICAgICAgICAgXCLEkMOjIGfhu61pIHnDqnUgY+G6p3UgdOG6oW8gc25hcHNob3QuIFF1w6EgdHLDrG5oIHPhur0gbeG6pXQgMy01IHBow7p0LCB2dWkgbMOybmcgY2jhu50gxJHhu6NpLlwiXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IGVycm9yTWVzc2FnZSA9IFwiQ8OzIGzhu5dpIHjhuqN5IHJhIGtoaSB04bqhbyBzbmFwc2hvdFwiO1xyXG4gICAgICAgICAgICBpZiAoZGF0YSAmJiBkYXRhLm1lc3NhZ2UpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZGF0YS5tZXNzYWdlID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLm1lc3NhZ2UubWVzc2FnZXMgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXNzYWdlLm1lc3NhZ2VzLmxlbmd0aCA+IDBcclxuICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEubWVzc2FnZS5tZXNzYWdlc1swXS5kZWZhdWx0X21lc3NhZ2UgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEubWVzc2FnZS5tZXNzYWdlc1swXS5tZXNzYWdlIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkPDsyBs4buXaSB44bqjeSByYVwiO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YS5tZXNzYWdlLmVycm9yX3R5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gYEzhu5dpOiAke2RhdGEubWVzc2FnZS5lcnJvcl90eXBlfWA7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJDw7MgbOG7l2kgeOG6o3kgcmEgdOG7qyBo4buHIHRo4buRbmdcIjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGRhdGEubWVzc2FnZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICAgICAgIGRhdGEgJiZcclxuICAgICAgICAgICAgICAgIGRhdGEudmFsdWUgJiZcclxuICAgICAgICAgICAgICAgIGRhdGEudmFsdWUubWVzc2FnZXMgJiZcclxuICAgICAgICAgICAgICAgIGRhdGEudmFsdWUubWVzc2FnZXMubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGRhdGEudmFsdWUubWVzc2FnZXNbMF0uZGVmYXVsdF9tZXNzYWdlO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBkYXRhO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGEgJiYgZGF0YS5lcnJvcikge1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkYXRhLmVycm9yID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuZXJyb3IubWVzc2FnZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBkYXRhLmVycm9yLm1lc3NhZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5lcnJvci50b1N0cmluZyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmVycm9yLnRvU3RyaW5nKCkgIT09IFwiW29iamVjdCBPYmplY3RdXCJcclxuICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gZGF0YS5lcnJvci50b1N0cmluZygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFwiQ8OzIGzhu5dpIHjhuqN5IHJhIHThu6sgaOG7hyB0aOG7kW5nXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBkYXRhLmVycm9yO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIEZ1aVRvYXN0LnByb21pc2UoXHJcbiAgICAgICAgc25hcHNob3RQcm9taXNlLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgbG9hZGluZzpcclxuICAgICAgICAgICAgICAgIFwixJBhbmcgZ+G7rWkgecOqdSBj4bqndSB04bqhbyBzbmFwc2hvdC4uLiAoUXXDoSB0csOsbmggbeG6pXQgMy01IHBow7p0IHZ1aSBsw7JuZyBnaeG7ryB0cmFuZyBraMO0bmcgdOG6r3QhKVwiLFxyXG4gICAgICAgICAgICBzdWNjZXNzOiAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yLm1lc3NhZ2UgfHwgXCJDw7MgbOG7l2kgeOG6o3kgcmEga2hpIHThuqFvIHNuYXBzaG90XCI7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlzQ2xvc2U6IHRydWUsXHJcbiAgICAgICAgfVxyXG4gICAgKTtcclxufVxyXG5cclxuLy8gSGFuZGxlIHNuYXBzaG90IGZvcm0gc3VibWlzc2lvbiB3aXRoIGxvYWRpbmcgbm90aWZpY2F0aW9uXHJcbmZ1bmN0aW9uIGhhbmRsZVNuYXBzaG90U3VibWl0KGV2ZW50KSB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIGNvbnN0IHNuYXBzaG90UHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICBjb25zdCBmb3JtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzbmFwc2hvdEZvcm1cIik7XHJcbiAgICAgICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoZm9ybSk7XHJcblxyXG4gICAgICAgIGZldGNoKGZvcm0uYWN0aW9uLCB7XHJcbiAgICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXHJcbiAgICAgICAgICAgIGJvZHk6IGZvcm1EYXRhLFxyXG4gICAgICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAgICAgICBcIlgtQ1NSRi1UT0tFTlwiOiBjc3JmVG9rZW4sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfSlcclxuICAgICAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UucmVkaXJlY3RlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwixJDDoyBn4butaSB5w6p1IGPhuqd1IHThuqFvIHNuYXBzaG90ISBRdcOhIHRyw6xuaCBz4bq9IG3huqV0IDMtNSBwaMO6dC5cIlxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSByZXNwb25zZS51cmw7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlc3BvbnNlLm9rKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCLEkMOjIGfhu61pIHnDqnUgY+G6p3UgdOG6oW8gc25hcHNob3QhIFF1w6EgdHLDrG5oIHPhur0gbeG6pXQgMy01IHBow7p0LlwiXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sIDIwMDApO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZS50ZXh0KCkudGhlbigodGV4dCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoXCJDw7MgbOG7l2kgeOG6o3kgcmEga2hpIGfhu61pIHnDqnUgY+G6p3UgdOG6oW8gc25hcHNob3RcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlamVjdChcIkzhu5dpIGvhur90IG7hu5FpOiBcIiArIGVycm9yLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmICh0eXBlb2YgRnVpVG9hc3QgIT09IFwidW5kZWZpbmVkXCIgJiYgRnVpVG9hc3QucHJvbWlzZSkge1xyXG4gICAgICAgIEZ1aVRvYXN0LnByb21pc2Uoc25hcHNob3RQcm9taXNlLCB7XHJcbiAgICAgICAgICAgIGxvYWRpbmc6IFwixJBhbmcgZ+G7rWkgecOqdSBj4bqndSB04bqhbyBzbmFwc2hvdC4uLlwiLFxyXG4gICAgICAgICAgICBzdWNjZXNzOiAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEgfHwgXCLEkMOjIGfhu61pIHnDqnUgY+G6p3UgdOG6oW8gc25hcHNob3QhXCI7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBlcnJvciB8fCBcIkPDsyBs4buXaSB44bqjeSByYSBraGkgZ+G7rWkgecOqdSBj4bqndSB04bqhbyBzbmFwc2hvdFwiO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAodHlwZW9mIEZ1aVRvYXN0ICE9PSBcInVuZGVmaW5lZFwiKSB7XHJcbiAgICAgICAgICAgIEZ1aVRvYXN0LmxvYWRpbmcoXCLEkGFuZyBn4butaSB5w6p1IGPhuqd1IHThuqFvIHNuYXBzaG90Li4uXCIsIHtcclxuICAgICAgICAgICAgICAgIGR1cmF0aW9uOiAwLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBhbGVydChcIsSQYW5nIGfhu61pIHnDqnUgY+G6p3UgdOG6oW8gc25hcHNob3QuLi5cIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzbmFwc2hvdEZvcm1cIikuc3VibWl0KCk7XHJcbiAgICAgICAgfSwgNTAwKTtcclxuICAgIH1cclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gc3RhcnRWaXJ0dWFsTWFjaGluZSgpIHtcclxuICAgIGNvbnN0IHN0YXJ0QnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdGFydFZNQnV0dG9uXCIpO1xyXG4gICAgaWYgKHN0YXJ0QnRuICYmIHN0YXJ0QnRuLmRpc2FibGVkKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgcmVxdWVzdEJvZHkgPSB7XHJcbiAgICAgICAgdm1faWQ6IHZtSWQsXHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGhlYWRlcnMgPSB7XHJcbiAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXHJcbiAgICAgICAgQWNjZXB0OiBcImFwcGxpY2F0aW9uL2pzb25cIixcclxuICAgICAgICBcIlgtQ1NSRi1UT0tFTlwiOiBjc3JmVG9rZW4sXHJcbiAgICAgICAgLy8gTk8gQXV0aG9yaXphdGlvbiBoZWFkZXIgLSB1c2luZyBzZXNzaW9uIGF1dGhcclxuICAgIH07XHJcblxyXG4gICAgY29uc3Qgc3RhcnRQcm9taXNlID0gZmV0Y2goXCIvYXBpL3NlY3VyZS9zdGFydC12bVwiLCB7XHJcbiAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcclxuICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxyXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHJlcXVlc3RCb2R5KSxcclxuICAgICAgICBjcmVkZW50aWFsczogXCJzYW1lLW9yaWdpblwiLFxyXG4gICAgfSkudGhlbihhc3luYyAocmVzcG9uc2UpID0+IHtcclxuICAgICAgICBpZiAocmVzcG9uc2UucmVkaXJlY3RlZCB8fCByZXNwb25zZS5zdGF0dXMgPT09IDQwMSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgICAgICAgICBcIlBoacOqbiDEkcSDbmcgbmjhuq1wIMSRw6MgaOG6v3QgaOG6oW4sIHZ1aSBsw7JuZyDEkcSDbmcgbmjhuq1wIGzhuqFpXCJcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBkYXRhO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XHJcbiAgICAgICAgfSBjYXRjaCAocGFyc2VFcnJvcikge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJM4buXaSDEkeG7i25oIGThuqFuZyBk4buvIGxp4buHdSB04burIG3DoXkgY2jhu6dcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWRhdGEuZXJyb3IpIHtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsb2NhdGlvbi5yZWxvYWQoKTtcclxuICAgICAgICAgICAgfSwgMjAwMCk7XHJcbiAgICAgICAgICAgIHJldHVybiBkYXRhLm1lc3NhZ2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgZGF0YS50eXBlID09PVxyXG4gICAgICAgICAgICAgICAgICAgIFwiY29tLnZtd2FyZS52YXBpLnN0ZC5lcnJvcnMuYWxyZWFkeV9pbl9kZXNpcmVkX3N0YXRlXCIgfHxcclxuICAgICAgICAgICAgICAgIChkYXRhLm1lc3NhZ2UgJiZcclxuICAgICAgICAgICAgICAgICAgICBkYXRhLm1lc3NhZ2UuZXJyb3JfdHlwZSA9PT0gXCJBTFJFQURZX0lOX0RFU0lSRURfU1RBVEVcIilcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbi5yZWxvYWQoKTtcclxuICAgICAgICAgICAgICAgIH0sIDIwMDApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiTcOheSBjaOG7pyDEkcOjIMSRxrDhu6NjIGLhuq10XCI7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZXJyb3JNZXNzYWdlID0gXCJDw7MgbOG7l2kgeOG6o3kgcmFcIjtcclxuICAgICAgICAgICAgICAgIGlmIChkYXRhLm1lc3NhZ2UpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRhdGEubWVzc2FnZSA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLm1lc3NhZ2UubWVzc2FnZXMgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEubWVzc2FnZS5tZXNzYWdlcy5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLm1lc3NhZ2UubWVzc2FnZXNbMF0uZGVmYXVsdF9tZXNzYWdlIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXNzYWdlLm1lc3NhZ2VzWzBdLm1lc3NhZ2UgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkPDsyBs4buXaSB44bqjeSByYVwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGEubWVzc2FnZS5lcnJvcl90eXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBgTOG7l2k6ICR7ZGF0YS5tZXNzYWdlLmVycm9yX3R5cGV9YDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFwiQ8OzIGzhu5dpIHjhuqN5IHJhIHThu6sgaOG7hyB0aOG7kW5nXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBkYXRhLm1lc3NhZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICAgICAgICAgICBkYXRhLnZhbHVlICYmXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS52YWx1ZS5tZXNzYWdlcyAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGEudmFsdWUubWVzc2FnZXMubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gZGF0YS52YWx1ZS5tZXNzYWdlc1swXS5kZWZhdWx0X21lc3NhZ2U7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gZGF0YTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YS5lcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZGF0YS5lcnJvciA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5lcnJvci5tZXNzYWdlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBkYXRhLmVycm9yLm1lc3NhZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmVycm9yLnRvU3RyaW5nICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmVycm9yLnRvU3RyaW5nKCkgIT09IFwiW29iamVjdCBPYmplY3RdXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBkYXRhLmVycm9yLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIkPDsyBs4buXaSB44bqjeSByYSB04burIGjhu4cgdGjhu5FuZ1wiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gZGF0YS5lcnJvcjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIEZ1aVRvYXN0LnByb21pc2UoXHJcbiAgICAgICAgc3RhcnRQcm9taXNlLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgbG9hZGluZzogXCLEkGFuZyBraOG7n2kgxJHhu5luZyBtw6F5IOG6o28uLi5cIixcclxuICAgICAgICAgICAgc3VjY2VzczogKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBlcnJvci5tZXNzYWdlIHx8IFwiQ8OzIGzhu5dpIHjhuqN5IHJhIGtoaSBraOG7n2kgxJHhu5luZyBtw6F5IOG6o29cIjtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaXNDbG9zZTogdHJ1ZSxcclxuICAgICAgICB9XHJcbiAgICApO1xyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiBzdG9wVmlydHVhbE1hY2hpbmUoKSB7XHJcbiAgICBjb25zdCBzdG9wQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdG9wVk1CdXR0b25cIik7XHJcbiAgICBpZiAoc3RvcEJ0biAmJiBzdG9wQnRuLmRpc2FibGVkKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgcmVxdWVzdEJvZHkgPSB7XHJcbiAgICAgICAgdm1faWQ6IHZtSWQsXHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGhlYWRlcnMgPSB7XHJcbiAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXHJcbiAgICAgICAgQWNjZXB0OiBcImFwcGxpY2F0aW9uL2pzb25cIixcclxuICAgICAgICBcIlgtQ1NSRi1UT0tFTlwiOiBjc3JmVG9rZW4sXHJcbiAgICAgICAgLy8gTk8gQXV0aG9yaXphdGlvbiBoZWFkZXIgLSB1c2luZyBzZXNzaW9uIGF1dGhcclxuICAgIH07XHJcblxyXG4gICAgY29uc3Qgc3RvcFByb21pc2UgPSBmZXRjaChcIi9hcGkvc2VjdXJlL3N0b3Atdm1cIiwge1xyXG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXHJcbiAgICAgICAgaGVhZGVyczogaGVhZGVycyxcclxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShyZXF1ZXN0Qm9keSksXHJcbiAgICAgICAgY3JlZGVudGlhbHM6IFwic2FtZS1vcmlnaW5cIixcclxuICAgIH0pLnRoZW4oYXN5bmMgKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLnJlZGlyZWN0ZWQgfHwgcmVzcG9uc2Uuc3RhdHVzID09PSA0MDEpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgICAgICAgXCJQaGnDqm4gxJHEg25nIG5o4bqtcCDEkcOjIGjhur90IGjhuqFuLCB2dWkgbMOybmcgxJHEg25nIG5o4bqtcCBs4bqhaVwiXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgZGF0YTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xyXG4gICAgICAgIH0gY2F0Y2ggKHBhcnNlRXJyb3IpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTOG7l2kgxJHhu4tuaCBk4bqhbmcgZOG7ryBsaeG7h3UgdOG7qyBtw6F5IGNo4bunXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFkYXRhLmVycm9yKSB7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbG9jYXRpb24ucmVsb2FkKCk7XHJcbiAgICAgICAgICAgIH0sIDIwMDApO1xyXG4gICAgICAgICAgICByZXR1cm4gZGF0YS5tZXNzYWdlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgIGRhdGEudHlwZSA9PT1cclxuICAgICAgICAgICAgICAgICAgICBcImNvbS52bXdhcmUudmFwaS5zdGQuZXJyb3JzLmFscmVhZHlfaW5fZGVzaXJlZF9zdGF0ZVwiIHx8XHJcbiAgICAgICAgICAgICAgICAoZGF0YS5tZXNzYWdlICYmXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXNzYWdlLmVycm9yX3R5cGUgPT09IFwiQUxSRUFEWV9JTl9ERVNJUkVEX1NUQVRFXCIpXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24ucmVsb2FkKCk7XHJcbiAgICAgICAgICAgICAgICB9LCAyMDAwKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBcIk3DoXkgY2jhu6cgxJHDoyDEkcaw4bujYyB04bqvdFwiO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbGV0IGVycm9yTWVzc2FnZSA9IFwiQ8OzIGzhu5dpIHjhuqN5IHJhXCI7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5tZXNzYWdlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkYXRhLm1lc3NhZ2UgPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXNzYWdlLm1lc3NhZ2VzICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLm1lc3NhZ2UubWVzc2FnZXMubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXNzYWdlLm1lc3NhZ2VzWzBdLmRlZmF1bHRfbWVzc2FnZSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEubWVzc2FnZS5tZXNzYWdlc1swXS5tZXNzYWdlIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJDw7MgbOG7l2kgeOG6o3kgcmFcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRhLm1lc3NhZ2UuZXJyb3JfdHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gYEzhu5dpOiAke2RhdGEubWVzc2FnZS5lcnJvcl90eXBlfWA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIkPDsyBs4buXaSB44bqjeSByYSB04burIGjhu4cgdGjhu5FuZ1wiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gZGF0YS5tZXNzYWdlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS52YWx1ZSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGEudmFsdWUubWVzc2FnZXMgJiZcclxuICAgICAgICAgICAgICAgICAgICBkYXRhLnZhbHVlLm1lc3NhZ2VzLmxlbmd0aCA+IDBcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGRhdGEudmFsdWUubWVzc2FnZXNbMF0uZGVmYXVsdF9tZXNzYWdlO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGRhdGE7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGEuZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRhdGEuZXJyb3IgPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuZXJyb3IubWVzc2FnZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gZGF0YS5lcnJvci5tZXNzYWdlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5lcnJvci50b1N0cmluZyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5lcnJvci50b1N0cmluZygpICE9PSBcIltvYmplY3QgT2JqZWN0XVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gZGF0YS5lcnJvci50b1N0cmluZygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJDw7MgbOG7l2kgeOG6o3kgcmEgdOG7qyBo4buHIHRo4buRbmdcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGRhdGEuZXJyb3I7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBGdWlUb2FzdC5wcm9taXNlKFxyXG4gICAgICAgIHN0b3BQcm9taXNlLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgbG9hZGluZzogXCLEkGFuZyBk4burbmcgbcOheSDhuqNvLi4uXCIsXHJcbiAgICAgICAgICAgIHN1Y2Nlc3M6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0YTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IubWVzc2FnZSB8fCBcIkPDsyBs4buXaSB44bqjeSByYSBraGkgZOG7q25nIG3DoXkg4bqjb1wiO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpc0Nsb3NlOiB0cnVlLFxyXG4gICAgICAgIH1cclxuICAgICk7XHJcbn1cclxuXHJcblxyXG4vLyBET00gcmVhZHlcclxuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIkRPTUNvbnRlbnRMb2FkZWRcIiwgZnVuY3Rpb24gKCkge1xyXG4gICAgLy8gSW5pdGlhbGl6ZSB2YXJpYWJsZXNcclxuICAgIGluaXRpYWxpemVWYXJpYWJsZXMoKTtcclxuXHJcbiAgICBjb25zdCBzdGFydEJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3RhcnRWTUJ1dHRvblwiKTtcclxuICAgIGNvbnN0IHN0b3BCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0b3BWTUJ1dHRvblwiKTtcclxuICAgIGNvbnN0IHJlc3RhcnRCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInJlc3RhcnRWTUJ1dHRvblwiKTtcclxuICAgIGNvbnN0IHNuYXBzaG90QnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJjcmVhdGVTbmFwc2hvdEJ1dHRvblwiKTtcclxuXHJcbiAgICBpZiAoc3RhcnRCdG4pIHtcclxuICAgICAgICBzdGFydEJ0bi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICBzdGFydFZpcnR1YWxNYWNoaW5lKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHN0b3BCdG4pIHtcclxuICAgICAgICBzdG9wQnRuLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHN0b3BWaXJ0dWFsTWFjaGluZSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChyZXN0YXJ0QnRuKSB7XHJcbiAgICAgICAgcmVzdGFydEJ0bi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICByZXN0YXJ0VmlydHVhbE1hY2hpbmUoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc25hcHNob3RCdG4pIHtcclxuICAgICAgICBzbmFwc2hvdEJ0bi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICBjcmVhdGVTbmFwc2hvdCgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbi8vIFNuYXBzaG90IFRhYmxlIE1hbmFnZW1lbnRcclxuZnVuY3Rpb24gc25hcHNob3RUYWJsZSgpIHtcclxuICAgIC8vIENvbnN0YW50c1xyXG4gICAgY29uc3QgQVBJX0VORFBPSU5UUyA9IHtcclxuICAgICAgICBHRVRfU05BUFNIT1RTOiBcIi9kaWNoLXZ1LWRhbmcta3kvc2VjdXJlL2dldC1zbmFwc2hvdHNcIixcclxuICAgICAgICBSRU1PVkVfU05BUFNIT1Q6IFwiL2RpY2gtdnUtZGFuZy1reS9zZWN1cmUvcmVtb3ZlLXNuYXBzaG90XCIsXHJcbiAgICAgICAgUkVWRVJUX1NOQVBTSE9UOiBcIi9kaWNoLXZ1LWRhbmcta3kvc2VjdXJlL3JldmVydC1zbmFwc2hvdFwiLFxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBNRVNTQUdFUyA9IHtcclxuICAgICAgICBWTV9JRF9OT1RfRk9VTkQ6IFwiS2jDtG5nIHTDrG0gdGjhuqV5IElEIG3DoXkg4bqjb1wiLFxyXG4gICAgICAgIENPTk5FQ1RJT05fRVJST1I6IFwiS2jDtG5nIHRo4buDIGvhur90IG7hu5FpIMSR4bq/biBtw6F5IGNo4bunXCIsXHJcbiAgICAgICAgR0VORVJJQ19FUlJPUjogXCJDw7MgbOG7l2kgeOG6o3kgcmFcIixcclxuICAgICAgICBERUxFVEVfU1VDQ0VTUzogXCJYw7NhIHNuYXBzaG90IHRow6BuaCBjw7RuZ1wiLFxyXG4gICAgICAgIFJFVkVSVF9TVUNDRVNTOiBcIktow7RpIHBo4bulYyBzbmFwc2hvdCB0aMOgbmggY8O0bmdcIixcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBsb2FkaW5nOiBmYWxzZSxcclxuICAgICAgICBzbmFwc2hvdHM6IFtdLFxyXG4gICAgICAgIGVycm9yOiBudWxsLFxyXG5cclxuICAgICAgICAvLyBDYWNoZSDEkeG7gyB0csOhbmggZmV0Y2ggbOG6oWkga2jDtG5nIGPhuqduIHRoaeG6v3RcclxuICAgICAgICBfbGFzdEZldGNoVGltZTogMCxcclxuICAgICAgICBfY2FjaGVUaW1lb3V0OiAzMDAwMCwgLy8gMzAgc2Vjb25kc1xyXG5cclxuICAgICAgICBhc3luYyBmZXRjaFNuYXBzaG90cyhmb3JjZVJlZnJlc2ggPSBmYWxzZSkge1xyXG4gICAgICAgICAgICAvLyBDaGVjayBjYWNoZVxyXG4gICAgICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAhZm9yY2VSZWZyZXNoICYmXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNuYXBzaG90cy5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICBub3cgLSB0aGlzLl9sYXN0RmV0Y2hUaW1lIDwgdGhpcy5fY2FjaGVUaW1lb3V0XHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHZtSWQgPSB3aW5kb3cudm1JZD8udHJpbSgpO1xyXG4gICAgICAgICAgICBpZiAoIXZtSWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3NldEVycm9yKE1FU1NBR0VTLlZNX0lEX05PVF9GT1VORCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5fbWFrZVJlcXVlc3QoXHJcbiAgICAgICAgICAgICAgICAgICAgYCR7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEFQSV9FTkRQT0lOVFMuR0VUX1NOQVBTSE9UU1xyXG4gICAgICAgICAgICAgICAgICAgIH0/cHJvZHVjdF9pZD0ke2VuY29kZVVSSUNvbXBvbmVudCh2bUlkKX1gXHJcbiAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3NTbmFwc2hvdHNSZXNwb25zZShkYXRhKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2xhc3RGZXRjaFRpbWUgPSBub3c7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVFcnJvcihcImZldGNoaW5nIHNuYXBzaG90c1wiLCBlcnJvcik7XHJcbiAgICAgICAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIGZvcm1hdFNpemUoc2l6ZUdCLCBzaXplTUIpIHtcclxuICAgICAgICAgICAgY29uc3QgYnl0ZXMgPSB0aGlzLl9jb252ZXJ0VG9CeXRlcyhzaXplR0IsIHNpemVNQik7XHJcbiAgICAgICAgICAgIGlmIChieXRlcyA9PT0gMCkgcmV0dXJuIFwiMCBCXCI7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZm9ybWF0Qnl0ZXMoYnl0ZXMpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIGFzeW5jIGRlbGV0ZVNuYXBzaG90KHNuYXBzaG90TmFtZSkge1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAhKGF3YWl0IHRoaXMuX2NvbmZpcm1BY3Rpb24oXHJcbiAgICAgICAgICAgICAgICAgICAgXCJYw6FjIG5o4bqtbiB4w7NhXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgYELhuqFuIGPDsyBjaOG6r2MgY2jhuq9uIG114buRbiB4w7NhIHNuYXBzaG90IFwiJHtzbmFwc2hvdE5hbWV9XCI/IEjDoG5oIMSR4buZbmcgbsOgeSBraMO0bmcgdGjhu4MgaG/DoG4gdMOhYy5gLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiWMOzYVwiXHJcbiAgICAgICAgICAgICAgICApKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9leGVjdXRlU25hcHNob3RBY3Rpb24oXHJcbiAgICAgICAgICAgICAgICBBUElfRU5EUE9JTlRTLlJFTU9WRV9TTkFQU0hPVCxcclxuICAgICAgICAgICAgICAgIHNuYXBzaG90TmFtZSxcclxuICAgICAgICAgICAgICAgIE1FU1NBR0VTLkRFTEVURV9TVUNDRVNTLFxyXG4gICAgICAgICAgICAgICAgXCJkZWxldGluZyBzbmFwc2hvdFwiXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgYXN5bmMgcmV2ZXJ0U25hcHNob3Qoc25hcHNob3ROYW1lKSB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICEoYXdhaXQgdGhpcy5fY29uZmlybUFjdGlvbihcclxuICAgICAgICAgICAgICAgICAgICBcIljDoWMgbmjhuq1uIGtow7RpIHBo4bulY1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIGBC4bqhbiBjw7MgY2jhuq9jIGNo4bqvbiBtdeG7kW4ga2jDtGkgcGjhu6VjIHbhu4Egc25hcHNob3QgXCIke3NuYXBzaG90TmFtZX1cIj8gVOG6pXQgY+G6oyBk4buvIGxp4buHdSBoaeG7h24gdOG6oWkgc+G6vSBi4buLIG3huqV0LmAsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJLaMO0aSBwaOG7pWNcIlxyXG4gICAgICAgICAgICAgICAgKSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fZXhlY3V0ZVNuYXBzaG90QWN0aW9uKFxyXG4gICAgICAgICAgICAgICAgQVBJX0VORFBPSU5UUy5SRVZFUlRfU05BUFNIT1QsXHJcbiAgICAgICAgICAgICAgICBzbmFwc2hvdE5hbWUsXHJcbiAgICAgICAgICAgICAgICBNRVNTQUdFUy5SRVZFUlRfU1VDQ0VTUyxcclxuICAgICAgICAgICAgICAgIFwicmV2ZXJ0aW5nIHNuYXBzaG90XCIsXHJcbiAgICAgICAgICAgICAgICAyMDAwXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLy8gUHVibGljIGhlbHBlciBtZXRob2RzXHJcbiAgICAgICAgcmVmcmVzaFNuYXBzaG90cygpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmV0Y2hTbmFwc2hvdHModHJ1ZSk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgZ2V0U25hcHNob3RDb3VudCgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc25hcHNob3RzLmxlbmd0aDtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBpc0xvYWRpbmcoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvYWRpbmc7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgaGFzRXJyb3IoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVycm9yICE9PSBudWxsO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8vIFByaXZhdGUgaGVscGVyIG1ldGhvZHNcclxuICAgICAgICBfc2V0RXJyb3IobWVzc2FnZSkge1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5lcnJvciA9IG1lc3NhZ2U7XHJcbiAgICAgICAgICAgIHRoaXMuc25hcHNob3RzID0gW107XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgYXN5bmMgX21ha2VSZXF1ZXN0KHVybCwgb3B0aW9ucyA9IHt9KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRPcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxyXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgICAgICAgICAgIEFjY2VwdDogXCJhcHBsaWNhdGlvbi9qc29uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJYLUNTUkYtVE9LRU5cIjogY3NyZlRva2VuLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiQ2FjaGUtQ29udHJvbFwiOiBcIm5vLWNhY2hlXCIsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgY3JlZGVudGlhbHM6IFwic2FtZS1vcmlnaW5cIixcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7XHJcbiAgICAgICAgICAgICAgICAuLi5kZWZhdWx0T3B0aW9ucyxcclxuICAgICAgICAgICAgICAgIC4uLm9wdGlvbnMsXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBIVFRQIGVycm9yISBzdGF0dXM6ICR7cmVzcG9uc2Uuc3RhdHVzfWApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuanNvbigpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIF9wcm9jZXNzU25hcHNob3RzUmVzcG9uc2UoZGF0YSkge1xyXG4gICAgICAgICAgICAvLyBIYW5kbGUgZGlmZmVyZW50IHJlc3BvbnNlIHN0cnVjdHVyZXNcclxuICAgICAgICAgICAgaWYgKGRhdGEuZXJyb3IgPT09IGZhbHNlICYmIGRhdGEuZGF0YT8uc25hcHNob3RzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNuYXBzaG90cyA9IGRhdGEuZGF0YS5zbmFwc2hvdHM7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YS5lcnJvciA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGEubWVzc2FnZSB8fCBcIkPDsyBs4buXaSB44bqjeSByYSBraGkgdOG6o2kgZGFuaCBzw6FjaCBzbmFwc2hvdFwiXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGEuc25hcHNob3RzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNuYXBzaG90cyA9IGRhdGEuc25hcHNob3RzO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zbmFwc2hvdHMgPSBbXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIF9jb252ZXJ0VG9CeXRlcyhzaXplR0IsIHNpemVNQikge1xyXG4gICAgICAgICAgICBpZiAoc2l6ZUdCKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdChzaXplR0IpICogMTAyNCAqKiAzOyAvLyBHQiB0byBieXRlc1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNpemVNQikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQoc2l6ZU1CKSAqIDEwMjQgKiogMjsgLy8gTUIgdG8gYnl0ZXNcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBfZm9ybWF0Qnl0ZXMoYnl0ZXMpIHtcclxuICAgICAgICAgICAgY29uc3QgdW5pdHMgPSBbXCJCXCIsIFwiS0JcIiwgXCJNQlwiLCBcIkdCXCIsIFwiVEJcIl07XHJcbiAgICAgICAgICAgIGNvbnN0IGsgPSAxMDI0O1xyXG4gICAgICAgICAgICBjb25zdCBpID0gTWF0aC5mbG9vcihNYXRoLmxvZyhieXRlcykgLyBNYXRoLmxvZyhrKSk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBzaXplID0gcGFyc2VGbG9hdCgoYnl0ZXMgLyBNYXRoLnBvdyhrLCBpKSkudG9GaXhlZCgyKSk7XHJcbiAgICAgICAgICAgIHJldHVybiBgJHtzaXplfSAke3VuaXRzW2ldfWA7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgYXN5bmMgX2NvbmZpcm1BY3Rpb24odGl0bGUsIHRleHQsIGNvbmZpcm1UZXh0KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IFN3YWwuZmlyZSh7XHJcbiAgICAgICAgICAgICAgICB0aXRsZSxcclxuICAgICAgICAgICAgICAgIHRleHQsXHJcbiAgICAgICAgICAgICAgICBpY29uOiBcIndhcm5pbmdcIixcclxuICAgICAgICAgICAgICAgIHNob3dDYW5jZWxCdXR0b246IHRydWUsXHJcbiAgICAgICAgICAgICAgICBjb25maXJtQnV0dG9uQ29sb3I6IHRpdGxlLmluY2x1ZGVzKFwieMOzYVwiKSA/IFwiI2QzM1wiIDogXCIjMzA4NWQ2XCIsXHJcbiAgICAgICAgICAgICAgICBjYW5jZWxCdXR0b25Db2xvcjogdGl0bGUuaW5jbHVkZXMoXCJ4w7NhXCIpID8gXCIjMzA4NWQ2XCIgOiBcIiNkMzNcIixcclxuICAgICAgICAgICAgICAgIGNvbmZpcm1CdXR0b25UZXh0OiBjb25maXJtVGV4dCxcclxuICAgICAgICAgICAgICAgIGNhbmNlbEJ1dHRvblRleHQ6IFwiSOG7p3kgYuG7j1wiLFxyXG4gICAgICAgICAgICAgICAgcmV2ZXJzZUJ1dHRvbnM6IHRydWUsXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5pc0NvbmZpcm1lZDtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBhc3luYyBfZXhlY3V0ZVNuYXBzaG90QWN0aW9uKFxyXG4gICAgICAgICAgICBlbmRwb2ludCxcclxuICAgICAgICAgICAgc25hcHNob3ROYW1lLFxyXG4gICAgICAgICAgICBzdWNjZXNzTWVzc2FnZSxcclxuICAgICAgICAgICAgZXJyb3JDb250ZXh0LFxyXG4gICAgICAgICAgICBkZWxheSA9IDEwMDBcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLl9tYWtlUmVxdWVzdChlbmRwb2ludCwge1xyXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgQWNjZXB0OiBcImFwcGxpY2F0aW9uL2pzb25cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJYLUNTUkYtVE9LRU5cIjogY3NyZlRva2VuLFxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWN0X2lkOiB3aW5kb3cudm1JZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc25hcHNob3RfbmFtZTogc25hcHNob3ROYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuZXJyb3IgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2hvd05vdGlmaWNhdGlvbihkYXRhLm1lc3NhZ2UgfHwgc3VjY2Vzc01lc3NhZ2UsIFwic3VjY2Vzc1wiKTtcclxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMucmVmcmVzaFNuYXBzaG90cygpLCBkZWxheSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXNzYWdlIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHtNRVNTQUdFUy5HRU5FUklDX0VSUk9SfSBraGkgJHtlcnJvckNvbnRleHR9YFxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVFcnJvcihlcnJvckNvbnRleHQsIGVycm9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIF9oYW5kbGVFcnJvcihjb250ZXh0LCBlcnJvcikge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGBFcnJvciAke2NvbnRleHR9OmAsIGVycm9yKTtcclxuICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IGVycm9yLm1lc3NhZ2UgfHwgTUVTU0FHRVMuQ09OTkVDVElPTl9FUlJPUjtcclxuXHJcbiAgICAgICAgICAgIGlmIChjb250ZXh0LmluY2x1ZGVzKFwiZmV0Y2hpbmdcIikpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3NldEVycm9yKG1lc3NhZ2UpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgc2hvd05vdGlmaWNhdGlvbihtZXNzYWdlLCBcImVycm9yXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgIH07XHJcbn1cclxuXHJcbi8vIE1ha2Ugc25hcHNob3RUYWJsZSBhdmFpbGFibGUgZ2xvYmFsbHkgZm9yIEFscGluZS5qc1xyXG53aW5kb3cuc25hcHNob3RUYWJsZSA9IHNuYXBzaG90VGFibGU7XHJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OytDQUNBLHFKQUFBQSxtQkFBQSxZQUFBQSxvQkFBQSxXQUFBQyxDQUFBLFNBQUFDLENBQUEsRUFBQUQsQ0FBQSxPQUFBRSxDQUFBLEdBQUFDLE1BQUEsQ0FBQUMsU0FBQSxFQUFBQyxDQUFBLEdBQUFILENBQUEsQ0FBQUksY0FBQSxFQUFBQyxDQUFBLEdBQUFKLE1BQUEsQ0FBQUssY0FBQSxjQUFBUCxDQUFBLEVBQUFELENBQUEsRUFBQUUsQ0FBQSxJQUFBRCxDQUFBLENBQUFELENBQUEsSUFBQUUsQ0FBQSxDQUFBTyxLQUFBLEtBQUFDLENBQUEsd0JBQUFDLE1BQUEsR0FBQUEsTUFBQSxPQUFBQyxDQUFBLEdBQUFGLENBQUEsQ0FBQUcsUUFBQSxrQkFBQUMsQ0FBQSxHQUFBSixDQUFBLENBQUFLLGFBQUEsdUJBQUFDLENBQUEsR0FBQU4sQ0FBQSxDQUFBTyxXQUFBLDhCQUFBQyxPQUFBakIsQ0FBQSxFQUFBRCxDQUFBLEVBQUFFLENBQUEsV0FBQUMsTUFBQSxDQUFBSyxjQUFBLENBQUFQLENBQUEsRUFBQUQsQ0FBQSxJQUFBUyxLQUFBLEVBQUFQLENBQUEsRUFBQWlCLFVBQUEsTUFBQUMsWUFBQSxNQUFBQyxR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\n//# sourceURL=webpack-internal:///./resources/js/service/service.js\n"); +eval("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); }\nfunction 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; }\nfunction _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; }\nfunction _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; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _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); }\nfunction _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; }\nfunction 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); }\nfunction _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); }); }; }\n// Global variables - NO SENSITIVE DATA (no tokens)\nvar invoiceId;\nvar invoiceOrdernum;\nvar vmId;\nvar vmHostname;\nvar csrfToken;\n\n// Initialize variables from data attributes or global variables\nfunction initializeVariables() {\n // Get data from meta tags or global variables set in Blade template\n var metaInvoiceId = document.querySelector('meta[name=\"invoice-id\"]');\n var metaInvoiceOrdernum = document.querySelector('meta[name=\"invoice-ordernum\"]');\n var metaVmId = document.querySelector('meta[name=\"vm-id\"]');\n var metaVmHostname = document.querySelector('meta[name=\"vm-hostname\"]');\n var metaCsrfToken = document.querySelector('meta[name=\"csrf-token\"]');\n invoiceId = metaInvoiceId ? metaInvoiceId.getAttribute(\"content\") : window.invoiceId;\n invoiceOrdernum = metaInvoiceOrdernum ? metaInvoiceOrdernum.getAttribute(\"content\") : window.invoiceOrdernum;\n vmId = metaVmId ? metaVmId.getAttribute(\"content\") : window.vmId;\n vmHostname = metaVmHostname ? metaVmHostname.getAttribute(\"content\") : window.vmHostname;\n csrfToken = metaCsrfToken ? metaCsrfToken.getAttribute(\"content\") : window.csrfToken;\n}\n\n// Cấu hình toast nếu có thể\nif (typeof FuiToast !== \"undefined\" && FuiToast.config) {\n FuiToast.config({\n position: \"top-center\"\n });\n}\nfunction showNotification(message) {\n var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \"success\";\n if (type === \"success\") {\n FuiToast.success(message);\n } else {\n FuiToast.error(message);\n }\n}\nfunction createSnapshot() {\n return _createSnapshot.apply(this, arguments);\n} // Handle snapshot form submission with loading notification\nfunction _createSnapshot() {\n _createSnapshot = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee8() {\n var snapshotBtn, requestBody, headers, snapshotPromise;\n return _regeneratorRuntime().wrap(function _callee8$(_context8) {\n while (1) switch (_context8.prev = _context8.next) {\n case 0:\n snapshotBtn = document.getElementById(\"createSnapshotButton\");\n if (!(snapshotBtn && snapshotBtn.disabled)) {\n _context8.next = 3;\n break;\n }\n return _context8.abrupt(\"return\");\n case 3:\n requestBody = {\n product_id: vmId\n };\n headers = {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n \"X-CSRF-TOKEN\": csrfToken\n // NO Authorization header - using session auth\n };\n snapshotPromise = fetch(\"/secure/create-snapshots\", {\n method: \"POST\",\n headers: headers,\n body: JSON.stringify(requestBody),\n credentials: \"same-origin\"\n }).then(/*#__PURE__*/function () {\n var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee7(response) {\n var data, text, errorMessage;\n return _regeneratorRuntime().wrap(function _callee7$(_context7) {\n while (1) switch (_context7.prev = _context7.next) {\n case 0:\n if (!(response.redirected || response.status === 401)) {\n _context7.next = 2;\n break;\n }\n throw new Error(\"Phiên đăng nhập đã hết hạn, vui lòng đăng nhập lại\");\n case 2:\n if (!response.redirected) {\n _context7.next = 4;\n break;\n }\n return _context7.abrupt(\"return\", \"Đã gửi yêu cầu tạo snapshot. Quá trình sẽ mất 3-5 phút, vui lòng chờ đợi.\");\n case 4:\n _context7.prev = 4;\n _context7.next = 7;\n return response.text();\n case 7:\n text = _context7.sent;\n _context7.prev = 8;\n data = JSON.parse(text);\n _context7.next = 20;\n break;\n case 12:\n _context7.prev = 12;\n _context7.t0 = _context7[\"catch\"](8);\n if (!(text.includes(\"success\") || response.ok)) {\n _context7.next = 19;\n break;\n }\n setTimeout(function () {\n location.reload();\n }, 2000);\n return _context7.abrupt(\"return\", \"Đã gửi yêu cầu tạo snapshot. Quá trình sẽ mất 3-5 phút, vui lòng chờ đợi.\");\n case 19:\n throw new Error(\"Có lỗi xảy ra khi gửi yêu cầu tạo snapshot\");\n case 20:\n _context7.next = 25;\n break;\n case 22:\n _context7.prev = 22;\n _context7.t1 = _context7[\"catch\"](4);\n throw new Error(\"Lỗi định dạng dữ liệu từ máy chủ\");\n case 25:\n if (!(data && !data.error)) {\n _context7.next = 30;\n break;\n }\n setTimeout(function () {\n location.reload();\n }, 2000);\n return _context7.abrupt(\"return\", data.message || \"Đã gửi yêu cầu tạo snapshot. Quá trình sẽ mất 3-5 phút, vui lòng chờ đợi.\");\n case 30:\n errorMessage = \"Có lỗi xảy ra khi tạo snapshot\";\n if (data && data.message) {\n if (_typeof(data.message) === \"object\") {\n if (data.message.messages && data.message.messages.length > 0) {\n errorMessage = data.message.messages[0].default_message || data.message.messages[0].message || \"Có lỗi xảy ra\";\n } else if (data.message.error_type) {\n errorMessage = \"L\\u1ED7i: \".concat(data.message.error_type);\n } else {\n errorMessage = \"Có lỗi xảy ra từ hệ thống\";\n }\n } else {\n errorMessage = data.message;\n }\n } else if (data && data.value && data.value.messages && data.value.messages.length > 0) {\n errorMessage = data.value.messages[0].default_message;\n } else if (typeof data === \"string\") {\n errorMessage = data;\n } else if (data && data.error) {\n if (_typeof(data.error) === \"object\") {\n if (data.error.message) {\n errorMessage = data.error.message;\n } else if (data.error.toString && data.error.toString() !== \"[object Object]\") {\n errorMessage = data.error.toString();\n } else {\n errorMessage = \"Có lỗi xảy ra từ hệ thống\";\n }\n } else {\n errorMessage = data.error;\n }\n }\n throw new Error(errorMessage);\n case 33:\n case \"end\":\n return _context7.stop();\n }\n }, _callee7, null, [[4, 22], [8, 12]]);\n }));\n return function (_x) {\n return _ref.apply(this, arguments);\n };\n }());\n FuiToast.promise(snapshotPromise, {\n loading: \"Đang gửi yêu cầu tạo snapshot... (Quá trình mất 3-5 phút vui lòng giữ trang không tắt!)\",\n success: function success(data) {\n return data;\n },\n error: function error(_error2) {\n console.error(_error2);\n return _error2.message || \"Có lỗi xảy ra khi tạo snapshot\";\n }\n }, {\n isClose: true\n });\n case 7:\n case \"end\":\n return _context8.stop();\n }\n }, _callee8);\n }));\n return _createSnapshot.apply(this, arguments);\n}\nfunction handleSnapshotSubmit(event) {\n event.preventDefault();\n var snapshotPromise = new Promise(function (resolve, reject) {\n var form = document.getElementById(\"snapshotForm\");\n var formData = new FormData(form);\n fetch(form.action, {\n method: \"POST\",\n body: formData,\n headers: {\n \"X-CSRF-TOKEN\": csrfToken\n }\n }).then(function (response) {\n if (response.redirected) {\n resolve(\"Đã gửi yêu cầu tạo snapshot! Quá trình sẽ mất 3-5 phút.\");\n window.location.href = response.url;\n } else if (response.ok) {\n resolve(\"Đã gửi yêu cầu tạo snapshot! Quá trình sẽ mất 3-5 phút.\");\n setTimeout(function () {\n window.location.reload();\n }, 2000);\n } else {\n response.text().then(function (text) {\n reject(\"Có lỗi xảy ra khi gửi yêu cầu tạo snapshot\");\n });\n }\n })[\"catch\"](function (error) {\n reject(\"Lỗi kết nối: \" + error.message);\n });\n });\n if (typeof FuiToast !== \"undefined\" && FuiToast.promise) {\n FuiToast.promise(snapshotPromise, {\n loading: \"Đang gửi yêu cầu tạo snapshot...\",\n success: function success(data) {\n return data || \"Đã gửi yêu cầu tạo snapshot!\";\n },\n error: function error(_error) {\n return _error || \"Có lỗi xảy ra khi gửi yêu cầu tạo snapshot\";\n }\n });\n } else {\n if (typeof FuiToast !== \"undefined\") {\n FuiToast.loading(\"Đang gửi yêu cầu tạo snapshot...\", {\n duration: 0\n });\n } else {\n alert(\"Đang gửi yêu cầu tạo snapshot...\");\n }\n setTimeout(function () {\n document.getElementById(\"snapshotForm\").submit();\n }, 500);\n }\n}\nfunction startVirtualMachine() {\n return _startVirtualMachine.apply(this, arguments);\n}\nfunction _startVirtualMachine() {\n _startVirtualMachine = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee10() {\n var startBtn, requestBody, headers, startPromise;\n return _regeneratorRuntime().wrap(function _callee10$(_context10) {\n while (1) switch (_context10.prev = _context10.next) {\n case 0:\n startBtn = document.getElementById(\"startVMButton\");\n if (!(startBtn && startBtn.disabled)) {\n _context10.next = 3;\n break;\n }\n return _context10.abrupt(\"return\");\n case 3:\n requestBody = {\n vm_id: vmId\n };\n headers = {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n \"X-CSRF-TOKEN\": csrfToken\n // NO Authorization header - using session auth\n };\n startPromise = fetch(\"/api/secure/start-vm\", {\n method: \"POST\",\n headers: headers,\n body: JSON.stringify(requestBody),\n credentials: \"same-origin\"\n }).then(/*#__PURE__*/function () {\n var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee9(response) {\n var data, errorMessage;\n return _regeneratorRuntime().wrap(function _callee9$(_context9) {\n while (1) switch (_context9.prev = _context9.next) {\n case 0:\n if (!(response.redirected || response.status === 401)) {\n _context9.next = 2;\n break;\n }\n throw new Error(\"Phiên đăng nhập đã hết hạn, vui lòng đăng nhập lại\");\n case 2:\n _context9.prev = 2;\n _context9.next = 5;\n return response.json();\n case 5:\n data = _context9.sent;\n _context9.next = 11;\n break;\n case 8:\n _context9.prev = 8;\n _context9.t0 = _context9[\"catch\"](2);\n throw new Error(\"Lỗi định dạng dữ liệu từ máy chủ\");\n case 11:\n if (data.error) {\n _context9.next = 16;\n break;\n }\n setTimeout(function () {\n location.reload();\n }, 2000);\n return _context9.abrupt(\"return\", data.message);\n case 16:\n if (!(data.type === \"com.vmware.vapi.std.errors.already_in_desired_state\" || data.message && data.message.error_type === \"ALREADY_IN_DESIRED_STATE\")) {\n _context9.next = 21;\n break;\n }\n setTimeout(function () {\n location.reload();\n }, 2000);\n return _context9.abrupt(\"return\", \"Máy chủ đã được bật\");\n case 21:\n errorMessage = \"Có lỗi xảy ra\";\n if (data.message) {\n if (_typeof(data.message) === \"object\") {\n if (data.message.messages && data.message.messages.length > 0) {\n errorMessage = data.message.messages[0].default_message || data.message.messages[0].message || \"Có lỗi xảy ra\";\n } else if (data.message.error_type) {\n errorMessage = \"L\\u1ED7i: \".concat(data.message.error_type);\n } else {\n errorMessage = \"Có lỗi xảy ra từ hệ thống\";\n }\n } else {\n errorMessage = data.message;\n }\n } else if (data.value && data.value.messages && data.value.messages.length > 0) {\n errorMessage = data.value.messages[0].default_message;\n } else if (typeof data === \"string\") {\n errorMessage = data;\n } else if (data.error) {\n if (_typeof(data.error) === \"object\") {\n if (data.error.message) {\n errorMessage = data.error.message;\n } else if (data.error.toString && data.error.toString() !== \"[object Object]\") {\n errorMessage = data.error.toString();\n } else {\n errorMessage = \"Có lỗi xảy ra từ hệ thống\";\n }\n } else {\n errorMessage = data.error;\n }\n }\n throw new Error(errorMessage);\n case 24:\n case \"end\":\n return _context9.stop();\n }\n }, _callee9, null, [[2, 8]]);\n }));\n return function (_x2) {\n return _ref2.apply(this, arguments);\n };\n }());\n FuiToast.promise(startPromise, {\n loading: \"Đang khởi động máy ảo...\",\n success: function success(data) {\n return data;\n },\n error: function error(_error3) {\n console.error(_error3);\n return _error3.message || \"Có lỗi xảy ra khi khởi động máy ảo\";\n }\n }, {\n isClose: true\n });\n case 7:\n case \"end\":\n return _context10.stop();\n }\n }, _callee10);\n }));\n return _startVirtualMachine.apply(this, arguments);\n}\nfunction stopVirtualMachine() {\n return _stopVirtualMachine.apply(this, arguments);\n} // DOM ready\nfunction _stopVirtualMachine() {\n _stopVirtualMachine = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee12() {\n var stopBtn, requestBody, headers, stopPromise;\n return _regeneratorRuntime().wrap(function _callee12$(_context12) {\n while (1) switch (_context12.prev = _context12.next) {\n case 0:\n stopBtn = document.getElementById(\"stopVMButton\");\n if (!(stopBtn && stopBtn.disabled)) {\n _context12.next = 3;\n break;\n }\n return _context12.abrupt(\"return\");\n case 3:\n requestBody = {\n vm_id: vmId\n };\n headers = {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n \"X-CSRF-TOKEN\": csrfToken\n // NO Authorization header - using session auth\n };\n stopPromise = fetch(\"/api/secure/stop-vm\", {\n method: \"POST\",\n headers: headers,\n body: JSON.stringify(requestBody),\n credentials: \"same-origin\"\n }).then(/*#__PURE__*/function () {\n var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee11(response) {\n var data, errorMessage;\n return _regeneratorRuntime().wrap(function _callee11$(_context11) {\n while (1) switch (_context11.prev = _context11.next) {\n case 0:\n if (!(response.redirected || response.status === 401)) {\n _context11.next = 2;\n break;\n }\n throw new Error(\"Phiên đăng nhập đã hết hạn, vui lòng đăng nhập lại\");\n case 2:\n _context11.prev = 2;\n _context11.next = 5;\n return response.json();\n case 5:\n data = _context11.sent;\n _context11.next = 11;\n break;\n case 8:\n _context11.prev = 8;\n _context11.t0 = _context11[\"catch\"](2);\n throw new Error(\"Lỗi định dạng dữ liệu từ máy chủ\");\n case 11:\n if (data.error) {\n _context11.next = 16;\n break;\n }\n setTimeout(function () {\n location.reload();\n }, 2000);\n return _context11.abrupt(\"return\", data.message);\n case 16:\n if (!(data.type === \"com.vmware.vapi.std.errors.already_in_desired_state\" || data.message && data.message.error_type === \"ALREADY_IN_DESIRED_STATE\")) {\n _context11.next = 21;\n break;\n }\n setTimeout(function () {\n location.reload();\n }, 2000);\n return _context11.abrupt(\"return\", \"Máy chủ đã được tắt\");\n case 21:\n errorMessage = \"Có lỗi xảy ra\";\n if (data.message) {\n if (_typeof(data.message) === \"object\") {\n if (data.message.messages && data.message.messages.length > 0) {\n errorMessage = data.message.messages[0].default_message || data.message.messages[0].message || \"Có lỗi xảy ra\";\n } else if (data.message.error_type) {\n errorMessage = \"L\\u1ED7i: \".concat(data.message.error_type);\n } else {\n errorMessage = \"Có lỗi xảy ra từ hệ thống\";\n }\n } else {\n errorMessage = data.message;\n }\n } else if (data.value && data.value.messages && data.value.messages.length > 0) {\n errorMessage = data.value.messages[0].default_message;\n } else if (typeof data === \"string\") {\n errorMessage = data;\n } else if (data.error) {\n if (_typeof(data.error) === \"object\") {\n if (data.error.message) {\n errorMessage = data.error.message;\n } else if (data.error.toString && data.error.toString() !== \"[object Object]\") {\n errorMessage = data.error.toString();\n } else {\n errorMessage = \"Có lỗi xảy ra từ hệ thống\";\n }\n } else {\n errorMessage = data.error;\n }\n }\n throw new Error(errorMessage);\n case 24:\n case \"end\":\n return _context11.stop();\n }\n }, _callee11, null, [[2, 8]]);\n }));\n return function (_x3) {\n return _ref3.apply(this, arguments);\n };\n }());\n FuiToast.promise(stopPromise, {\n loading: \"Đang dừng máy ảo...\",\n success: function success(data) {\n return data;\n },\n error: function error(_error4) {\n console.error(_error4);\n return _error4.message || \"Có lỗi xảy ra khi dừng máy ảo\";\n }\n }, {\n isClose: true\n });\n case 7:\n case \"end\":\n return _context12.stop();\n }\n }, _callee12);\n }));\n return _stopVirtualMachine.apply(this, arguments);\n}\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n // Initialize variables\n initializeVariables();\n var startBtn = document.getElementById(\"startVMButton\");\n var stopBtn = document.getElementById(\"stopVMButton\");\n var restartBtn = document.getElementById(\"restartVMButton\");\n var snapshotBtn = document.getElementById(\"createSnapshotButton\");\n if (startBtn) {\n startBtn.addEventListener(\"click\", function (e) {\n e.preventDefault();\n e.stopPropagation();\n startVirtualMachine();\n });\n }\n if (stopBtn) {\n stopBtn.addEventListener(\"click\", function (e) {\n e.preventDefault();\n e.stopPropagation();\n stopVirtualMachine();\n });\n }\n if (restartBtn) {\n restartBtn.addEventListener(\"click\", function (e) {\n e.preventDefault();\n e.stopPropagation();\n restartVirtualMachine();\n });\n }\n if (snapshotBtn) {\n snapshotBtn.addEventListener(\"click\", function (e) {\n e.preventDefault();\n e.stopPropagation();\n createSnapshot();\n });\n }\n});\n\n// Snapshot Table Management\nfunction snapshotTable() {\n // Constants\n var API_ENDPOINTS = {\n GET_SNAPSHOTS: \"/dich-vu-dang-ky/secure/get-snapshots\",\n REMOVE_SNAPSHOT: \"/dich-vu-dang-ky/secure/remove-snapshot\",\n REVERT_SNAPSHOT: \"/dich-vu-dang-ky/secure/revert-snapshot\"\n };\n var MESSAGES = {\n VM_ID_NOT_FOUND: \"Không tìm thấy ID máy ảo\",\n CONNECTION_ERROR: \"Không thể kết nối đến máy chủ\",\n GENERIC_ERROR: \"Có lỗi xảy ra\",\n DELETE_SUCCESS: \"Xóa snapshot thành công\",\n REVERT_SUCCESS: \"Khôi phục snapshot thành công\"\n };\n return {\n loading: false,\n snapshots: [],\n error: null,\n // Cache để tránh fetch lại không cần thiết\n _lastFetchTime: 0,\n _cacheTimeout: 30000,\n // 30 seconds\n fetchSnapshots: function fetchSnapshots() {\n var _arguments = arguments,\n _this = this;\n return _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {\n var _window$vmId;\n var forceRefresh, now, vmId, data;\n return _regeneratorRuntime().wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n forceRefresh = _arguments.length > 0 && _arguments[0] !== undefined ? _arguments[0] : false;\n // Check cache\n now = Date.now();\n if (!(!forceRefresh && _this.snapshots.length > 0 && now - _this._lastFetchTime < _this._cacheTimeout)) {\n _context.next = 4;\n break;\n }\n return _context.abrupt(\"return\");\n case 4:\n _this.loading = true;\n _this.error = null;\n vmId = (_window$vmId = window.vmId) === null || _window$vmId === void 0 ? void 0 : _window$vmId.trim();\n if (vmId) {\n _context.next = 10;\n break;\n }\n _this._setError(MESSAGES.VM_ID_NOT_FOUND);\n return _context.abrupt(\"return\");\n case 10:\n _context.prev = 10;\n _context.next = 13;\n return _this._makeRequest(\"\".concat(API_ENDPOINTS.GET_SNAPSHOTS, \"?product_id=\").concat(encodeURIComponent(vmId)));\n case 13:\n data = _context.sent;\n _this._processSnapshotsResponse(data);\n _this._lastFetchTime = now;\n _context.next = 21;\n break;\n case 18:\n _context.prev = 18;\n _context.t0 = _context[\"catch\"](10);\n _this._handleError(\"fetching snapshots\", _context.t0);\n case 21:\n _context.prev = 21;\n _this.loading = false;\n return _context.finish(21);\n case 24:\n case \"end\":\n return _context.stop();\n }\n }, _callee, null, [[10, 18, 21, 24]]);\n }))();\n },\n formatSize: function formatSize(sizeGB, sizeMB) {\n var bytes = this._convertToBytes(sizeGB, sizeMB);\n if (bytes === 0) return \"0 B\";\n return this._formatBytes(bytes);\n },\n deleteSnapshot: function deleteSnapshot(snapshotName) {\n var _this2 = this;\n return _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {\n return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n _context2.next = 2;\n return _this2._confirmAction(\"Xác nhận xóa\", \"B\\u1EA1n c\\xF3 ch\\u1EAFc ch\\u1EAFn mu\\u1ED1n x\\xF3a snapshot \\\"\".concat(snapshotName, \"\\\"? H\\xE0nh \\u0111\\u1ED9ng n\\xE0y kh\\xF4ng th\\u1EC3 ho\\xE0n t\\xE1c.\"), \"Xóa\");\n case 2:\n if (_context2.sent) {\n _context2.next = 4;\n break;\n }\n return _context2.abrupt(\"return\");\n case 4:\n _context2.next = 6;\n return _this2._executeSnapshotAction(API_ENDPOINTS.REMOVE_SNAPSHOT, snapshotName, MESSAGES.DELETE_SUCCESS, \"deleting snapshot\");\n case 6:\n case \"end\":\n return _context2.stop();\n }\n }, _callee2);\n }))();\n },\n revertSnapshot: function revertSnapshot(snapshotName) {\n var _this3 = this;\n return _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3() {\n return _regeneratorRuntime().wrap(function _callee3$(_context3) {\n while (1) switch (_context3.prev = _context3.next) {\n case 0:\n _context3.next = 2;\n return _this3._confirmAction(\"Xác nhận khôi phục\", \"B\\u1EA1n c\\xF3 ch\\u1EAFc ch\\u1EAFn mu\\u1ED1n kh\\xF4i ph\\u1EE5c v\\u1EC1 snapshot \\\"\".concat(snapshotName, \"\\\"? T\\u1EA5t c\\u1EA3 d\\u1EEF li\\u1EC7u hi\\u1EC7n t\\u1EA1i s\\u1EBD b\\u1ECB m\\u1EA5t.\"), \"Khôi phục\");\n case 2:\n if (_context3.sent) {\n _context3.next = 4;\n break;\n }\n return _context3.abrupt(\"return\");\n case 4:\n _context3.next = 6;\n return _this3._executeSnapshotAction(API_ENDPOINTS.REVERT_SNAPSHOT, snapshotName, MESSAGES.REVERT_SUCCESS, \"reverting snapshot\", 2000);\n case 6:\n case \"end\":\n return _context3.stop();\n }\n }, _callee3);\n }))();\n },\n // Public helper methods\n refreshSnapshots: function refreshSnapshots() {\n return this.fetchSnapshots(true);\n },\n getSnapshotCount: function getSnapshotCount() {\n return this.snapshots.length;\n },\n isLoading: function isLoading() {\n return this.loading;\n },\n hasError: function hasError() {\n return this.error !== null;\n },\n // Private helper methods\n _setError: function _setError(message) {\n this.loading = false;\n this.error = message;\n this.snapshots = [];\n },\n _makeRequest: function _makeRequest(url) {\n var _arguments2 = arguments;\n return _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee4() {\n var options, defaultOptions, response;\n return _regeneratorRuntime().wrap(function _callee4$(_context4) {\n while (1) switch (_context4.prev = _context4.next) {\n case 0:\n options = _arguments2.length > 1 && _arguments2[1] !== undefined ? _arguments2[1] : {};\n defaultOptions = {\n method: \"GET\",\n headers: {\n Accept: \"application/json\",\n \"X-CSRF-TOKEN\": csrfToken,\n \"Cache-Control\": \"no-cache\"\n },\n credentials: \"same-origin\"\n };\n _context4.next = 4;\n return fetch(url, _objectSpread(_objectSpread({}, defaultOptions), options));\n case 4:\n response = _context4.sent;\n if (response.ok) {\n _context4.next = 7;\n break;\n }\n throw new Error(\"HTTP error! status: \".concat(response.status));\n case 7:\n return _context4.abrupt(\"return\", response.json());\n case 8:\n case \"end\":\n return _context4.stop();\n }\n }, _callee4);\n }))();\n },\n _processSnapshotsResponse: function _processSnapshotsResponse(data) {\n var _data$data;\n // Handle different response structures\n if (data.error === false && (_data$data = data.data) !== null && _data$data !== void 0 && _data$data.snapshots) {\n this.snapshots = data.data.snapshots;\n } else if (data.error === true) {\n throw new Error(data.message || \"Có lỗi xảy ra khi tải danh sách snapshot\");\n } else if (data.snapshots) {\n this.snapshots = data.snapshots;\n } else {\n this.snapshots = [];\n }\n },\n _convertToBytes: function _convertToBytes(sizeGB, sizeMB) {\n if (sizeGB) {\n return parseFloat(sizeGB) * Math.pow(1024, 3); // GB to bytes\n } else if (sizeMB) {\n return parseFloat(sizeMB) * Math.pow(1024, 2); // MB to bytes\n }\n return 0;\n },\n _formatBytes: function _formatBytes(bytes) {\n var units = [\"B\", \"KB\", \"MB\", \"GB\", \"TB\"];\n var k = 1024;\n var i = Math.floor(Math.log(bytes) / Math.log(k));\n var size = parseFloat((bytes / Math.pow(k, i)).toFixed(2));\n return \"\".concat(size, \" \").concat(units[i]);\n },\n _confirmAction: function _confirmAction(title, text, confirmText) {\n return _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee5() {\n var result;\n return _regeneratorRuntime().wrap(function _callee5$(_context5) {\n while (1) switch (_context5.prev = _context5.next) {\n case 0:\n _context5.next = 2;\n return Swal.fire({\n title: title,\n text: text,\n icon: \"warning\",\n showCancelButton: true,\n confirmButtonColor: title.includes(\"xóa\") ? \"#d33\" : \"#3085d6\",\n cancelButtonColor: title.includes(\"xóa\") ? \"#3085d6\" : \"#d33\",\n confirmButtonText: confirmText,\n cancelButtonText: \"Hủy bỏ\",\n reverseButtons: true\n });\n case 2:\n result = _context5.sent;\n return _context5.abrupt(\"return\", result.isConfirmed);\n case 4:\n case \"end\":\n return _context5.stop();\n }\n }, _callee5);\n }))();\n },\n _executeSnapshotAction: function _executeSnapshotAction(endpoint, snapshotName, successMessage, errorContext) {\n var _arguments3 = arguments,\n _this4 = this;\n return _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee6() {\n var delay, data;\n return _regeneratorRuntime().wrap(function _callee6$(_context6) {\n while (1) switch (_context6.prev = _context6.next) {\n case 0:\n delay = _arguments3.length > 4 && _arguments3[4] !== undefined ? _arguments3[4] : 1000;\n _context6.prev = 1;\n _context6.next = 4;\n return _this4._makeRequest(endpoint, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n \"X-CSRF-TOKEN\": csrfToken\n },\n body: JSON.stringify({\n product_id: window.vmId,\n snapshot_name: snapshotName\n })\n });\n case 4:\n data = _context6.sent;\n if (!(data.error === false)) {\n _context6.next = 10;\n break;\n }\n showNotification(data.message || successMessage, \"success\");\n setTimeout(function () {\n return _this4.refreshSnapshots();\n }, delay);\n _context6.next = 11;\n break;\n case 10:\n throw new Error(data.message || \"\".concat(MESSAGES.GENERIC_ERROR, \" khi \").concat(errorContext));\n case 11:\n _context6.next = 16;\n break;\n case 13:\n _context6.prev = 13;\n _context6.t0 = _context6[\"catch\"](1);\n _this4._handleError(errorContext, _context6.t0);\n case 16:\n case \"end\":\n return _context6.stop();\n }\n }, _callee6, null, [[1, 13]]);\n }))();\n },\n _handleError: function _handleError(context, error) {\n console.error(\"Error \".concat(context, \":\"), error);\n var message = error.message || MESSAGES.CONNECTION_ERROR;\n if (context.includes(\"fetching\")) {\n this._setError(message);\n } else {\n showNotification(message, \"error\");\n }\n }\n };\n}\n\n// Make snapshotTable available globally for Alpine.js\nwindow.snapshotTable = snapshotTable;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVnZW5lcmF0b3JSdW50aW1lIiwiZSIsInQiLCJyIiwiT2JqZWN0IiwicHJvdG90eXBlIiwibiIsImhhc093blByb3BlcnR5IiwibyIsImRlZmluZVByb3BlcnR5IiwidmFsdWUiLCJpIiwiU3ltYm9sIiwiYSIsIml0ZXJhdG9yIiwiYyIsImFzeW5jSXRlcmF0b3IiLCJ1IiwidG9TdHJpbmdUYWciLCJkZWZpbmUiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJ3cmFwIiwiR2VuZXJhdG9yIiwiY3JlYXRlIiwiQ29udGV4dCIsIm1ha2VJbnZva2VNZXRob2QiLCJ0cnlDYXRjaCIsInR5cGUiLCJhcmciLCJjYWxsIiwiaCIsImwiLCJmIiwicyIsInkiLCJHZW5lcmF0b3JGdW5jdGlvbiIsIkdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlIiwicCIsImQiLCJnZXRQcm90b3R5cGVPZiIsInYiLCJ2YWx1ZXMiLCJnIiwiZGVmaW5lSXRlcmF0b3JNZXRob2RzIiwiZm9yRWFjaCIsIl9pbnZva2UiLCJBc3luY0l0ZXJhdG9yIiwiaW52b2tlIiwiX3R5cGVvZiIsInJlc29sdmUiLCJfX2F3YWl0IiwidGhlbiIsImNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnIiwiRXJyb3IiLCJkb25lIiwibWV0aG9kIiwiZGVsZWdhdGUiLCJtYXliZUludm9rZURlbGVnYXRlIiwic2VudCIsIl9zZW50IiwiZGlzcGF0Y2hFeGNlcHRpb24iLCJhYnJ1cHQiLCJUeXBlRXJyb3IiLCJyZXN1bHROYW1lIiwibmV4dCIsIm5leHRMb2MiLCJwdXNoVHJ5RW50cnkiLCJ0cnlMb2MiLCJjYXRjaExvYyIsImZpbmFsbHlMb2MiLCJhZnRlckxvYyIsInRyeUVudHJpZXMiLCJwdXNoIiwicmVzZXRUcnlFbnRyeSIsImNvbXBsZXRpb24iLCJyZXNldCIsImlzTmFOIiwibGVuZ3RoIiwiZGlzcGxheU5hbWUiLCJpc0dlbmVyYXRvckZ1bmN0aW9uIiwiY29uc3RydWN0b3IiLCJuYW1lIiwibWFyayIsInNldFByb3RvdHlwZU9mIiwiX19wcm90b19fIiwiYXdyYXAiLCJhc3luYyIsIlByb21pc2UiLCJrZXlzIiwicmV2ZXJzZSIsInBvcCIsInByZXYiLCJjaGFyQXQiLCJzbGljZSIsInN0b3AiLCJydmFsIiwiaGFuZGxlIiwiY29tcGxldGUiLCJmaW5pc2giLCJfY2F0Y2giLCJkZWxlZ2F0ZVlpZWxkIiwiYXN5bmNHZW5lcmF0b3JTdGVwIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJhcmd1bWVudHMiLCJhcHBseSIsIl9uZXh0IiwiX3Rocm93IiwiaW52b2ljZUlkIiwiaW52b2ljZU9yZGVybnVtIiwidm1JZCIsInZtSG9zdG5hbWUiLCJjc3JmVG9rZW4iLCJpbml0aWFsaXplVmFyaWFibGVzIiwibWV0YUludm9pY2VJZCIsImRvY3VtZW50IiwicXVlcnlTZWxlY3RvciIsIm1ldGFJbnZvaWNlT3JkZXJudW0iLCJtZXRhVm1JZCIsIm1ldGFWbUhvc3RuYW1lIiwibWV0YUNzcmZUb2tlbiIsImdldEF0dHJpYnV0ZSIsIndpbmRvdyIsIkZ1aVRvYXN0IiwiY29uZmlnIiwicG9zaXRpb24iLCJzaG93Tm90aWZpY2F0aW9uIiwibWVzc2FnZSIsInVuZGVmaW5lZCIsInN1Y2Nlc3MiLCJlcnJvciIsImNyZWF0ZVNuYXBzaG90IiwiX2NyZWF0ZVNuYXBzaG90IiwiX2NhbGxlZTgiLCJzbmFwc2hvdEJ0biIsInJlcXVlc3RCb2R5IiwiaGVhZGVycyIsInNuYXBzaG90UHJvbWlzZSIsIl9jYWxsZWU4JCIsIl9jb250ZXh0OCIsImdldEVsZW1lbnRCeUlkIiwiZGlzYWJsZWQiLCJwcm9kdWN0X2lkIiwiQWNjZXB0IiwiZmV0Y2giLCJib2R5IiwiSlNPTiIsInN0cmluZ2lmeSIsImNyZWRlbnRpYWxzIiwiX3JlZiIsIl9jYWxsZWU3IiwicmVzcG9uc2UiLCJkYXRhIiwidGV4dCIsImVycm9yTWVzc2FnZSIsIl9jYWxsZWU3JCIsIl9jb250ZXh0NyIsInJlZGlyZWN0ZWQiLCJzdGF0dXMiLCJwYXJzZSIsInQwIiwiaW5jbHVkZXMiLCJvayIsInNldFRpbWVvdXQiLCJsb2NhdGlvbiIsInJlbG9hZCIsInQxIiwibWVzc2FnZXMiLCJkZWZhdWx0X21lc3NhZ2UiLCJlcnJvcl90eXBlIiwiY29uY2F0IiwidG9TdHJpbmciLCJfeCIsInByb21pc2UiLCJsb2FkaW5nIiwiY29uc29sZSIsImlzQ2xvc2UiLCJoYW5kbGVTbmFwc2hvdFN1Ym1pdCIsImV2ZW50IiwicHJldmVudERlZmF1bHQiLCJyZWplY3QiLCJmb3JtIiwiZm9ybURhdGEiLCJGb3JtRGF0YSIsImFjdGlvbiIsImhyZWYiLCJ1cmwiLCJkdXJhdGlvbiIsImFsZXJ0Iiwic3VibWl0Iiwic3RhcnRWaXJ0dWFsTWFjaGluZSIsIl9zdGFydFZpcnR1YWxNYWNoaW5lIiwiX2NhbGxlZTEwIiwic3RhcnRCdG4iLCJzdGFydFByb21pc2UiLCJfY2FsbGVlMTAkIiwiX2NvbnRleHQxMCIsInZtX2lkIiwiX3JlZjIiLCJfY2FsbGVlOSIsIl9jYWxsZWU5JCIsIl9jb250ZXh0OSIsImpzb24iLCJfeDIiLCJzdG9wVmlydHVhbE1hY2hpbmUiLCJfc3RvcFZpcnR1YWxNYWNoaW5lIiwiX2NhbGxlZTEyIiwic3RvcEJ0biIsInN0b3BQcm9taXNlIiwiX2NhbGxlZTEyJCIsIl9jb250ZXh0MTIiLCJfcmVmMyIsIl9jYWxsZWUxMSIsIl9jYWxsZWUxMSQiLCJfY29udGV4dDExIiwiX3gzIiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlc3RhcnRCdG4iLCJzdG9wUHJvcGFnYXRpb24iLCJyZXN0YXJ0VmlydHVhbE1hY2hpbmUiLCJzbmFwc2hvdFRhYmxlIiwiQVBJX0VORFBPSU5UUyIsIkdFVF9TTkFQU0hPVFMiLCJSRU1PVkVfU05BUFNIT1QiLCJSRVZFUlRfU05BUFNIT1QiLCJNRVNTQUdFUyIsIlZNX0lEX05PVF9GT1VORCIsIkNPTk5FQ1RJT05fRVJST1IiLCJHRU5FUklDX0VSUk9SIiwiREVMRVRFX1NVQ0NFU1MiLCJSRVZFUlRfU1VDQ0VTUyIsInNuYXBzaG90cyIsIl9sYXN0RmV0Y2hUaW1lIiwiX2NhY2hlVGltZW91dCIsImZldGNoU25hcHNob3RzIiwiX2FyZ3VtZW50cyIsIl90aGlzIiwiX2NhbGxlZSIsIl93aW5kb3ckdm1JZCIsImZvcmNlUmVmcmVzaCIsIm5vdyIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJEYXRlIiwidHJpbSIsIl9zZXRFcnJvciIsIl9tYWtlUmVxdWVzdCIsImVuY29kZVVSSUNvbXBvbmVudCIsIl9wcm9jZXNzU25hcHNob3RzUmVzcG9uc2UiLCJfaGFuZGxlRXJyb3IiLCJmb3JtYXRTaXplIiwic2l6ZUdCIiwic2l6ZU1CIiwiYnl0ZXMiLCJfY29udmVydFRvQnl0ZXMiLCJfZm9ybWF0Qnl0ZXMiLCJkZWxldGVTbmFwc2hvdCIsInNuYXBzaG90TmFtZSIsIl90aGlzMiIsIl9jYWxsZWUyIiwiX2NhbGxlZTIkIiwiX2NvbnRleHQyIiwiX2NvbmZpcm1BY3Rpb24iLCJfZXhlY3V0ZVNuYXBzaG90QWN0aW9uIiwicmV2ZXJ0U25hcHNob3QiLCJfdGhpczMiLCJfY2FsbGVlMyIsIl9jYWxsZWUzJCIsIl9jb250ZXh0MyIsInJlZnJlc2hTbmFwc2hvdHMiLCJnZXRTbmFwc2hvdENvdW50IiwiaXNMb2FkaW5nIiwiaGFzRXJyb3IiLCJfYXJndW1lbnRzMiIsIl9jYWxsZWU0Iiwib3B0aW9ucyIsImRlZmF1bHRPcHRpb25zIiwiX2NhbGxlZTQkIiwiX2NvbnRleHQ0IiwiX29iamVjdFNwcmVhZCIsIl9kYXRhJGRhdGEiLCJwYXJzZUZsb2F0IiwiTWF0aCIsInBvdyIsInVuaXRzIiwiayIsImZsb29yIiwibG9nIiwic2l6ZSIsInRvRml4ZWQiLCJ0aXRsZSIsImNvbmZpcm1UZXh0IiwiX2NhbGxlZTUiLCJyZXN1bHQiLCJfY2FsbGVlNSQiLCJfY29udGV4dDUiLCJTd2FsIiwiZmlyZSIsImljb24iLCJzaG93Q2FuY2VsQnV0dG9uIiwiY29uZmlybUJ1dHRvbkNvbG9yIiwiY2FuY2VsQnV0dG9uQ29sb3IiLCJjb25maXJtQnV0dG9uVGV4dCIsImNhbmNlbEJ1dHRvblRleHQiLCJyZXZlcnNlQnV0dG9ucyIsImlzQ29uZmlybWVkIiwiZW5kcG9pbnQiLCJzdWNjZXNzTWVzc2FnZSIsImVycm9yQ29udGV4dCIsIl9hcmd1bWVudHMzIiwiX3RoaXM0IiwiX2NhbGxlZTYiLCJkZWxheSIsIl9jYWxsZWU2JCIsIl9jb250ZXh0NiIsInNuYXBzaG90X25hbWUiLCJjb250ZXh0Il0sInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9zZXJ2aWNlL3NlcnZpY2UuanM/YzE1ZiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBHbG9iYWwgdmFyaWFibGVzIC0gTk8gU0VOU0lUSVZFIERBVEEgKG5vIHRva2VucylcclxubGV0IGludm9pY2VJZDtcclxubGV0IGludm9pY2VPcmRlcm51bTtcclxubGV0IHZtSWQ7XHJcbmxldCB2bUhvc3RuYW1lO1xyXG5sZXQgY3NyZlRva2VuO1xyXG5cclxuLy8gSW5pdGlhbGl6ZSB2YXJpYWJsZXMgZnJvbSBkYXRhIGF0dHJpYnV0ZXMgb3IgZ2xvYmFsIHZhcmlhYmxlc1xyXG5mdW5jdGlvbiBpbml0aWFsaXplVmFyaWFibGVzKCkge1xyXG4gICAgLy8gR2V0IGRhdGEgZnJvbSBtZXRhIHRhZ3Mgb3IgZ2xvYmFsIHZhcmlhYmxlcyBzZXQgaW4gQmxhZGUgdGVtcGxhdGVcclxuICAgIGNvbnN0IG1ldGFJbnZvaWNlSWQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtZXRhW25hbWU9XCJpbnZvaWNlLWlkXCJdJyk7XHJcbiAgICBjb25zdCBtZXRhSW52b2ljZU9yZGVybnVtID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignbWV0YVtuYW1lPVwiaW52b2ljZS1vcmRlcm51bVwiXScpO1xyXG4gICAgY29uc3QgbWV0YVZtSWQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtZXRhW25hbWU9XCJ2bS1pZFwiXScpO1xyXG4gICAgY29uc3QgbWV0YVZtSG9zdG5hbWUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtZXRhW25hbWU9XCJ2bS1ob3N0bmFtZVwiXScpO1xyXG4gICAgY29uc3QgbWV0YUNzcmZUb2tlbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21ldGFbbmFtZT1cImNzcmYtdG9rZW5cIl0nKTtcclxuXHJcbiAgICBpbnZvaWNlSWQgPSBtZXRhSW52b2ljZUlkXHJcbiAgICAgICAgPyBtZXRhSW52b2ljZUlkLmdldEF0dHJpYnV0ZShcImNvbnRlbnRcIilcclxuICAgICAgICA6IHdpbmRvdy5pbnZvaWNlSWQ7XHJcbiAgICBpbnZvaWNlT3JkZXJudW0gPSBtZXRhSW52b2ljZU9yZGVybnVtXHJcbiAgICAgICAgPyBtZXRhSW52b2ljZU9yZGVybnVtLmdldEF0dHJpYnV0ZShcImNvbnRlbnRcIilcclxuICAgICAgICA6IHdpbmRvdy5pbnZvaWNlT3JkZXJudW07XHJcbiAgICB2bUlkID0gbWV0YVZtSWQgPyBtZXRhVm1JZC5nZXRBdHRyaWJ1dGUoXCJjb250ZW50XCIpIDogd2luZG93LnZtSWQ7XHJcbiAgICB2bUhvc3RuYW1lID0gbWV0YVZtSG9zdG5hbWVcclxuICAgICAgICA/IG1ldGFWbUhvc3RuYW1lLmdldEF0dHJpYnV0ZShcImNvbnRlbnRcIilcclxuICAgICAgICA6IHdpbmRvdy52bUhvc3RuYW1lO1xyXG4gICAgY3NyZlRva2VuID0gbWV0YUNzcmZUb2tlblxyXG4gICAgICAgID8gbWV0YUNzcmZUb2tlbi5nZXRBdHRyaWJ1dGUoXCJjb250ZW50XCIpXHJcbiAgICAgICAgOiB3aW5kb3cuY3NyZlRva2VuO1xyXG59XHJcblxyXG4vLyBD4bqldSBow6xuaCB0b2FzdCBu4bq/dSBjw7MgdGjhu4NcclxuaWYgKHR5cGVvZiBGdWlUb2FzdCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBGdWlUb2FzdC5jb25maWcpIHtcclxuICAgIEZ1aVRvYXN0LmNvbmZpZyh7XHJcbiAgICAgICAgcG9zaXRpb246IFwidG9wLWNlbnRlclwiLFxyXG4gICAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNob3dOb3RpZmljYXRpb24obWVzc2FnZSwgdHlwZSA9IFwic3VjY2Vzc1wiKSB7XHJcbiAgICBpZiAodHlwZSA9PT0gXCJzdWNjZXNzXCIpIHtcclxuICAgICAgICBGdWlUb2FzdC5zdWNjZXNzKG1lc3NhZ2UpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBGdWlUb2FzdC5lcnJvcihtZXNzYWdlKTtcclxuICAgIH1cclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlU25hcHNob3QoKSB7XHJcbiAgICBjb25zdCBzbmFwc2hvdEJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiY3JlYXRlU25hcHNob3RCdXR0b25cIik7XHJcbiAgICBpZiAoc25hcHNob3RCdG4gJiYgc25hcHNob3RCdG4uZGlzYWJsZWQpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCByZXF1ZXN0Qm9keSA9IHtcclxuICAgICAgICBwcm9kdWN0X2lkOiB2bUlkLFxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBoZWFkZXJzID0ge1xyXG4gICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxyXG4gICAgICAgIEFjY2VwdDogXCJhcHBsaWNhdGlvbi9qc29uXCIsXHJcbiAgICAgICAgXCJYLUNTUkYtVE9LRU5cIjogY3NyZlRva2VuLFxyXG4gICAgICAgIC8vIE5PIEF1dGhvcml6YXRpb24gaGVhZGVyIC0gdXNpbmcgc2Vzc2lvbiBhdXRoXHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IHNuYXBzaG90UHJvbWlzZSA9IGZldGNoKFwiL3NlY3VyZS9jcmVhdGUtc25hcHNob3RzXCIsIHtcclxuICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxyXG4gICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXHJcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkocmVxdWVzdEJvZHkpLFxyXG4gICAgICAgIGNyZWRlbnRpYWxzOiBcInNhbWUtb3JpZ2luXCIsXHJcbiAgICB9KS50aGVuKGFzeW5jIChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXNwb25zZS5yZWRpcmVjdGVkIHx8IHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAxKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgICAgICAgIFwiUGhpw6puIMSRxINuZyBuaOG6rXAgxJHDoyBo4bq/dCBo4bqhbiwgdnVpIGzDsm5nIMSRxINuZyBuaOG6rXAgbOG6oWlcIlxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gQ2hlY2sgaWYgcmVzcG9uc2UgaXMgcmVkaXJlY3RlZCAodHlwaWNhbCBmb3IgTGFyYXZlbCByZWRpcmVjdCByZXNwb25zZXMpXHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLnJlZGlyZWN0ZWQpIHtcclxuICAgICAgICAgICAgLy8gRXh0cmFjdCBtZXNzYWdlIGZyb20gVVJMIGlmIHBvc3NpYmxlLCBvciBzaG93IGdlbmVyaWMgc3VjY2Vzc1xyXG4gICAgICAgICAgICByZXR1cm4gXCLEkMOjIGfhu61pIHnDqnUgY+G6p3UgdOG6oW8gc25hcHNob3QuIFF1w6EgdHLDrG5oIHPhur0gbeG6pXQgMy01IHBow7p0LCB2dWkgbMOybmcgY2jhu50gxJHhu6NpLlwiO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGRhdGE7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgdGV4dCA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTtcclxuXHJcbiAgICAgICAgICAgIC8vIFRyeSB0byBwYXJzZSBhcyBKU09OIGZpcnN0XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBkYXRhID0gSlNPTi5wYXJzZSh0ZXh0KTtcclxuICAgICAgICAgICAgfSBjYXRjaCAocGFyc2VFcnJvcikge1xyXG4gICAgICAgICAgICAgICAgLy8gSWYgbm90IEpTT04sIGNoZWNrIGZvciBIVE1MIHdpdGggc3VjY2Vzcy9lcnJvciBtZXNzYWdlc1xyXG4gICAgICAgICAgICAgICAgaWYgKHRleHQuaW5jbHVkZXMoXCJzdWNjZXNzXCIpIHx8IHJlc3BvbnNlLm9rKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sIDIwMDApO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcIsSQw6MgZ+G7rWkgecOqdSBj4bqndSB04bqhbyBzbmFwc2hvdC4gUXXDoSB0csOsbmggc+G6vSBt4bqldCAzLTUgcGjDunQsIHZ1aSBsw7JuZyBjaOG7nSDEkeG7o2kuXCI7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJDw7MgbOG7l2kgeOG6o3kgcmEga2hpIGfhu61pIHnDqnUgY+G6p3UgdOG6oW8gc25hcHNob3RcIlxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChwYXJzZUVycm9yKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkzhu5dpIMSR4buLbmggZOG6oW5nIGThu68gbGnhu4d1IHThu6sgbcOheSBjaOG7p1wiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEhhbmRsZSBKU09OIHJlc3BvbnNlXHJcbiAgICAgICAgaWYgKGRhdGEgJiYgIWRhdGEuZXJyb3IpIHtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsb2NhdGlvbi5yZWxvYWQoKTtcclxuICAgICAgICAgICAgfSwgMjAwMCk7XHJcbiAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICBkYXRhLm1lc3NhZ2UgfHxcclxuICAgICAgICAgICAgICAgIFwixJDDoyBn4butaSB5w6p1IGPhuqd1IHThuqFvIHNuYXBzaG90LiBRdcOhIHRyw6xuaCBz4bq9IG3huqV0IDMtNSBwaMO6dCwgdnVpIGzDsm5nIGNo4budIMSR4bujaS5cIlxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCBlcnJvck1lc3NhZ2UgPSBcIkPDsyBs4buXaSB44bqjeSByYSBraGkgdOG6oW8gc25hcHNob3RcIjtcclxuICAgICAgICAgICAgaWYgKGRhdGEgJiYgZGF0YS5tZXNzYWdlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRhdGEubWVzc2FnZSA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXNzYWdlLm1lc3NhZ2VzICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEubWVzc2FnZS5tZXNzYWdlcy5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLm1lc3NhZ2UubWVzc2FnZXNbMF0uZGVmYXVsdF9tZXNzYWdlIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLm1lc3NhZ2UubWVzc2FnZXNbMF0ubWVzc2FnZSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJDw7MgbOG7l2kgeOG6o3kgcmFcIjtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGEubWVzc2FnZS5lcnJvcl90eXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGBM4buXaTogJHtkYXRhLm1lc3NhZ2UuZXJyb3JfdHlwZX1gO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFwiQ8OzIGzhu5dpIHjhuqN5IHJhIHThu6sgaOG7hyB0aOG7kW5nXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBkYXRhLm1lc3NhZ2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgICAgICBkYXRhICYmXHJcbiAgICAgICAgICAgICAgICBkYXRhLnZhbHVlICYmXHJcbiAgICAgICAgICAgICAgICBkYXRhLnZhbHVlLm1lc3NhZ2VzICYmXHJcbiAgICAgICAgICAgICAgICBkYXRhLnZhbHVlLm1lc3NhZ2VzLmxlbmd0aCA+IDBcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBkYXRhLnZhbHVlLm1lc3NhZ2VzWzBdLmRlZmF1bHRfbWVzc2FnZTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gZGF0YTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRhICYmIGRhdGEuZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZGF0YS5lcnJvciA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLmVycm9yLm1lc3NhZ2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gZGF0YS5lcnJvci5tZXNzYWdlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuZXJyb3IudG9TdHJpbmcgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5lcnJvci50b1N0cmluZygpICE9PSBcIltvYmplY3QgT2JqZWN0XVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGRhdGEuZXJyb3IudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIkPDsyBs4buXaSB44bqjeSByYSB04burIGjhu4cgdGjhu5FuZ1wiO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gZGF0YS5lcnJvcjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBGdWlUb2FzdC5wcm9taXNlKFxyXG4gICAgICAgIHNuYXBzaG90UHJvbWlzZSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGxvYWRpbmc6XHJcbiAgICAgICAgICAgICAgICBcIsSQYW5nIGfhu61pIHnDqnUgY+G6p3UgdOG6oW8gc25hcHNob3QuLi4gKFF1w6EgdHLDrG5oIG3huqV0IDMtNSBwaMO6dCB2dWkgbMOybmcgZ2nhu68gdHJhbmcga2jDtG5nIHThuq90ISlcIixcclxuICAgICAgICAgICAgc3VjY2VzczogKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBlcnJvci5tZXNzYWdlIHx8IFwiQ8OzIGzhu5dpIHjhuqN5IHJhIGtoaSB04bqhbyBzbmFwc2hvdFwiO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpc0Nsb3NlOiB0cnVlLFxyXG4gICAgICAgIH1cclxuICAgICk7XHJcbn1cclxuXHJcbi8vIEhhbmRsZSBzbmFwc2hvdCBmb3JtIHN1Ym1pc3Npb24gd2l0aCBsb2FkaW5nIG5vdGlmaWNhdGlvblxyXG5mdW5jdGlvbiBoYW5kbGVTbmFwc2hvdFN1Ym1pdChldmVudCkge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgICBjb25zdCBzbmFwc2hvdFByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgY29uc3QgZm9ybSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic25hcHNob3RGb3JtXCIpO1xyXG4gICAgICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKGZvcm0pO1xyXG5cclxuICAgICAgICBmZXRjaChmb3JtLmFjdGlvbiwge1xyXG4gICAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxyXG4gICAgICAgICAgICBib2R5OiBmb3JtRGF0YSxcclxuICAgICAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgICAgICAgXCJYLUNTUkYtVE9LRU5cIjogY3NyZlRva2VuLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgICAgIC50aGVuKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnJlZGlyZWN0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIsSQw6MgZ+G7rWkgecOqdSBj4bqndSB04bqhbyBzbmFwc2hvdCEgUXXDoSB0csOsbmggc+G6vSBt4bqldCAzLTUgcGjDunQuXCJcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gcmVzcG9uc2UudXJsO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNwb25zZS5vaykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwixJDDoyBn4butaSB5w6p1IGPhuqd1IHThuqFvIHNuYXBzaG90ISBRdcOhIHRyw6xuaCBz4bq9IG3huqV0IDMtNSBwaMO6dC5cIlxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcclxuICAgICAgICAgICAgICAgICAgICB9LCAyMDAwKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UudGV4dCgpLnRoZW4oKHRleHQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KFwiQ8OzIGzhu5dpIHjhuqN5IHJhIGtoaSBn4butaSB5w6p1IGPhuqd1IHThuqFvIHNuYXBzaG90XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZWplY3QoXCJM4buXaSBr4bq/dCBu4buRaTogXCIgKyBlcnJvci5tZXNzYWdlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAodHlwZW9mIEZ1aVRvYXN0ICE9PSBcInVuZGVmaW5lZFwiICYmIEZ1aVRvYXN0LnByb21pc2UpIHtcclxuICAgICAgICBGdWlUb2FzdC5wcm9taXNlKHNuYXBzaG90UHJvbWlzZSwge1xyXG4gICAgICAgICAgICBsb2FkaW5nOiBcIsSQYW5nIGfhu61pIHnDqnUgY+G6p3UgdOG6oW8gc25hcHNob3QuLi5cIixcclxuICAgICAgICAgICAgc3VjY2VzczogKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBkYXRhIHx8IFwixJDDoyBn4butaSB5w6p1IGPhuqd1IHThuqFvIHNuYXBzaG90IVwiO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IgfHwgXCJDw7MgbOG7l2kgeOG6o3kgcmEga2hpIGfhu61pIHnDqnUgY+G6p3UgdOG6oW8gc25hcHNob3RcIjtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBGdWlUb2FzdCAhPT0gXCJ1bmRlZmluZWRcIikge1xyXG4gICAgICAgICAgICBGdWlUb2FzdC5sb2FkaW5nKFwixJBhbmcgZ+G7rWkgecOqdSBj4bqndSB04bqhbyBzbmFwc2hvdC4uLlwiLCB7XHJcbiAgICAgICAgICAgICAgICBkdXJhdGlvbjogMCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgYWxlcnQoXCLEkGFuZyBn4butaSB5w6p1IGPhuqd1IHThuqFvIHNuYXBzaG90Li4uXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic25hcHNob3RGb3JtXCIpLnN1Ym1pdCgpO1xyXG4gICAgICAgIH0sIDUwMCk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIHN0YXJ0VmlydHVhbE1hY2hpbmUoKSB7XHJcbiAgICBjb25zdCBzdGFydEJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3RhcnRWTUJ1dHRvblwiKTtcclxuICAgIGlmIChzdGFydEJ0biAmJiBzdGFydEJ0bi5kaXNhYmxlZCkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IHJlcXVlc3RCb2R5ID0ge1xyXG4gICAgICAgIHZtX2lkOiB2bUlkLFxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBoZWFkZXJzID0ge1xyXG4gICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxyXG4gICAgICAgIEFjY2VwdDogXCJhcHBsaWNhdGlvbi9qc29uXCIsXHJcbiAgICAgICAgXCJYLUNTUkYtVE9LRU5cIjogY3NyZlRva2VuLFxyXG4gICAgICAgIC8vIE5PIEF1dGhvcml6YXRpb24gaGVhZGVyIC0gdXNpbmcgc2Vzc2lvbiBhdXRoXHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IHN0YXJ0UHJvbWlzZSA9IGZldGNoKFwiL2FwaS9zZWN1cmUvc3RhcnQtdm1cIiwge1xyXG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXHJcbiAgICAgICAgaGVhZGVyczogaGVhZGVycyxcclxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShyZXF1ZXN0Qm9keSksXHJcbiAgICAgICAgY3JlZGVudGlhbHM6IFwic2FtZS1vcmlnaW5cIixcclxuICAgIH0pLnRoZW4oYXN5bmMgKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLnJlZGlyZWN0ZWQgfHwgcmVzcG9uc2Uuc3RhdHVzID09PSA0MDEpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgICAgICAgXCJQaGnDqm4gxJHEg25nIG5o4bqtcCDEkcOjIGjhur90IGjhuqFuLCB2dWkgbMOybmcgxJHEg25nIG5o4bqtcCBs4bqhaVwiXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgZGF0YTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xyXG4gICAgICAgIH0gY2F0Y2ggKHBhcnNlRXJyb3IpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTOG7l2kgxJHhu4tuaCBk4bqhbmcgZOG7ryBsaeG7h3UgdOG7qyBtw6F5IGNo4bunXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFkYXRhLmVycm9yKSB7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbG9jYXRpb24ucmVsb2FkKCk7XHJcbiAgICAgICAgICAgIH0sIDIwMDApO1xyXG4gICAgICAgICAgICByZXR1cm4gZGF0YS5tZXNzYWdlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgIGRhdGEudHlwZSA9PT1cclxuICAgICAgICAgICAgICAgICAgICBcImNvbS52bXdhcmUudmFwaS5zdGQuZXJyb3JzLmFscmVhZHlfaW5fZGVzaXJlZF9zdGF0ZVwiIHx8XHJcbiAgICAgICAgICAgICAgICAoZGF0YS5tZXNzYWdlICYmXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXNzYWdlLmVycm9yX3R5cGUgPT09IFwiQUxSRUFEWV9JTl9ERVNJUkVEX1NUQVRFXCIpXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24ucmVsb2FkKCk7XHJcbiAgICAgICAgICAgICAgICB9LCAyMDAwKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBcIk3DoXkgY2jhu6cgxJHDoyDEkcaw4bujYyBi4bqtdFwiO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbGV0IGVycm9yTWVzc2FnZSA9IFwiQ8OzIGzhu5dpIHjhuqN5IHJhXCI7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5tZXNzYWdlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkYXRhLm1lc3NhZ2UgPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXNzYWdlLm1lc3NhZ2VzICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLm1lc3NhZ2UubWVzc2FnZXMubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXNzYWdlLm1lc3NhZ2VzWzBdLmRlZmF1bHRfbWVzc2FnZSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEubWVzc2FnZS5tZXNzYWdlc1swXS5tZXNzYWdlIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJDw7MgbOG7l2kgeOG6o3kgcmFcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRhLm1lc3NhZ2UuZXJyb3JfdHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gYEzhu5dpOiAke2RhdGEubWVzc2FnZS5lcnJvcl90eXBlfWA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIkPDsyBs4buXaSB44bqjeSByYSB04burIGjhu4cgdGjhu5FuZ1wiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gZGF0YS5tZXNzYWdlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS52YWx1ZSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGEudmFsdWUubWVzc2FnZXMgJiZcclxuICAgICAgICAgICAgICAgICAgICBkYXRhLnZhbHVlLm1lc3NhZ2VzLmxlbmd0aCA+IDBcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGRhdGEudmFsdWUubWVzc2FnZXNbMF0uZGVmYXVsdF9tZXNzYWdlO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGRhdGE7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGEuZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRhdGEuZXJyb3IgPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuZXJyb3IubWVzc2FnZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gZGF0YS5lcnJvci5tZXNzYWdlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5lcnJvci50b1N0cmluZyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5lcnJvci50b1N0cmluZygpICE9PSBcIltvYmplY3QgT2JqZWN0XVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gZGF0YS5lcnJvci50b1N0cmluZygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJDw7MgbOG7l2kgeOG6o3kgcmEgdOG7qyBo4buHIHRo4buRbmdcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGRhdGEuZXJyb3I7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBGdWlUb2FzdC5wcm9taXNlKFxyXG4gICAgICAgIHN0YXJ0UHJvbWlzZSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGxvYWRpbmc6IFwixJBhbmcga2jhu59pIMSR4buZbmcgbcOheSDhuqNvLi4uXCIsXHJcbiAgICAgICAgICAgIHN1Y2Nlc3M6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0YTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IubWVzc2FnZSB8fCBcIkPDsyBs4buXaSB44bqjeSByYSBraGkga2jhu59pIMSR4buZbmcgbcOheSDhuqNvXCI7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlzQ2xvc2U6IHRydWUsXHJcbiAgICAgICAgfVxyXG4gICAgKTtcclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gc3RvcFZpcnR1YWxNYWNoaW5lKCkge1xyXG4gICAgY29uc3Qgc3RvcEJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3RvcFZNQnV0dG9uXCIpO1xyXG4gICAgaWYgKHN0b3BCdG4gJiYgc3RvcEJ0bi5kaXNhYmxlZCkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IHJlcXVlc3RCb2R5ID0ge1xyXG4gICAgICAgIHZtX2lkOiB2bUlkLFxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBoZWFkZXJzID0ge1xyXG4gICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxyXG4gICAgICAgIEFjY2VwdDogXCJhcHBsaWNhdGlvbi9qc29uXCIsXHJcbiAgICAgICAgXCJYLUNTUkYtVE9LRU5cIjogY3NyZlRva2VuLFxyXG4gICAgICAgIC8vIE5PIEF1dGhvcml6YXRpb24gaGVhZGVyIC0gdXNpbmcgc2Vzc2lvbiBhdXRoXHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IHN0b3BQcm9taXNlID0gZmV0Y2goXCIvYXBpL3NlY3VyZS9zdG9wLXZtXCIsIHtcclxuICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxyXG4gICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXHJcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkocmVxdWVzdEJvZHkpLFxyXG4gICAgICAgIGNyZWRlbnRpYWxzOiBcInNhbWUtb3JpZ2luXCIsXHJcbiAgICB9KS50aGVuKGFzeW5jIChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXNwb25zZS5yZWRpcmVjdGVkIHx8IHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAxKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgICAgICAgIFwiUGhpw6puIMSRxINuZyBuaOG6rXAgxJHDoyBo4bq/dCBo4bqhbiwgdnVpIGzDsm5nIMSRxINuZyBuaOG6rXAgbOG6oWlcIlxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGRhdGE7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcclxuICAgICAgICB9IGNhdGNoIChwYXJzZUVycm9yKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkzhu5dpIMSR4buLbmggZOG6oW5nIGThu68gbGnhu4d1IHThu6sgbcOheSBjaOG7p1wiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghZGF0YS5lcnJvcikge1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpO1xyXG4gICAgICAgICAgICB9LCAyMDAwKTtcclxuICAgICAgICAgICAgcmV0dXJuIGRhdGEubWVzc2FnZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICBkYXRhLnR5cGUgPT09XHJcbiAgICAgICAgICAgICAgICAgICAgXCJjb20udm13YXJlLnZhcGkuc3RkLmVycm9ycy5hbHJlYWR5X2luX2Rlc2lyZWRfc3RhdGVcIiB8fFxyXG4gICAgICAgICAgICAgICAgKGRhdGEubWVzc2FnZSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGEubWVzc2FnZS5lcnJvcl90eXBlID09PSBcIkFMUkVBRFlfSU5fREVTSVJFRF9TVEFURVwiKVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpO1xyXG4gICAgICAgICAgICAgICAgfSwgMjAwMCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJNw6F5IGNo4bunIMSRw6MgxJHGsOG7o2MgdOG6r3RcIjtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGxldCBlcnJvck1lc3NhZ2UgPSBcIkPDsyBs4buXaSB44bqjeSByYVwiO1xyXG4gICAgICAgICAgICAgICAgaWYgKGRhdGEubWVzc2FnZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZGF0YS5tZXNzYWdlID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEubWVzc2FnZS5tZXNzYWdlcyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXNzYWdlLm1lc3NhZ2VzLmxlbmd0aCA+IDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEubWVzc2FnZS5tZXNzYWdlc1swXS5kZWZhdWx0X21lc3NhZ2UgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLm1lc3NhZ2UubWVzc2FnZXNbMF0ubWVzc2FnZSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiQ8OzIGzhu5dpIHjhuqN5IHJhXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YS5tZXNzYWdlLmVycm9yX3R5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGBM4buXaTogJHtkYXRhLm1lc3NhZ2UuZXJyb3JfdHlwZX1gO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJDw7MgbOG7l2kgeOG6o3kgcmEgdOG7qyBo4buHIHRo4buRbmdcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGRhdGEubWVzc2FnZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGEudmFsdWUgJiZcclxuICAgICAgICAgICAgICAgICAgICBkYXRhLnZhbHVlLm1lc3NhZ2VzICYmXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS52YWx1ZS5tZXNzYWdlcy5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBkYXRhLnZhbHVlLm1lc3NhZ2VzWzBdLmRlZmF1bHRfbWVzc2FnZTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBkYXRhO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRhLmVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkYXRhLmVycm9yID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLmVycm9yLm1lc3NhZ2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGRhdGEuZXJyb3IubWVzc2FnZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuZXJyb3IudG9TdHJpbmcgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuZXJyb3IudG9TdHJpbmcoKSAhPT0gXCJbb2JqZWN0IE9iamVjdF1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGRhdGEuZXJyb3IudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFwiQ8OzIGzhu5dpIHjhuqN5IHJhIHThu6sgaOG7hyB0aOG7kW5nXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBkYXRhLmVycm9yO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgRnVpVG9hc3QucHJvbWlzZShcclxuICAgICAgICBzdG9wUHJvbWlzZSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGxvYWRpbmc6IFwixJBhbmcgZOG7q25nIG3DoXkg4bqjby4uLlwiLFxyXG4gICAgICAgICAgICBzdWNjZXNzOiAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yLm1lc3NhZ2UgfHwgXCJDw7MgbOG7l2kgeOG6o3kgcmEga2hpIGThu6tuZyBtw6F5IOG6o29cIjtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaXNDbG9zZTogdHJ1ZSxcclxuICAgICAgICB9XHJcbiAgICApO1xyXG59XHJcblxyXG5cclxuLy8gRE9NIHJlYWR5XHJcbmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJET01Db250ZW50TG9hZGVkXCIsIGZ1bmN0aW9uICgpIHtcclxuICAgIC8vIEluaXRpYWxpemUgdmFyaWFibGVzXHJcbiAgICBpbml0aWFsaXplVmFyaWFibGVzKCk7XHJcblxyXG4gICAgY29uc3Qgc3RhcnRCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0YXJ0Vk1CdXR0b25cIik7XHJcbiAgICBjb25zdCBzdG9wQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdG9wVk1CdXR0b25cIik7XHJcbiAgICBjb25zdCByZXN0YXJ0QnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJyZXN0YXJ0Vk1CdXR0b25cIik7XHJcbiAgICBjb25zdCBzbmFwc2hvdEJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiY3JlYXRlU25hcHNob3RCdXR0b25cIik7XHJcblxyXG4gICAgaWYgKHN0YXJ0QnRuKSB7XHJcbiAgICAgICAgc3RhcnRCdG4uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgc3RhcnRWaXJ0dWFsTWFjaGluZSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChzdG9wQnRuKSB7XHJcbiAgICAgICAgc3RvcEJ0bi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICBzdG9wVmlydHVhbE1hY2hpbmUoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAocmVzdGFydEJ0bikge1xyXG4gICAgICAgIHJlc3RhcnRCdG4uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgcmVzdGFydFZpcnR1YWxNYWNoaW5lKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHNuYXBzaG90QnRuKSB7XHJcbiAgICAgICAgc25hcHNob3RCdG4uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgY3JlYXRlU25hcHNob3QoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufSk7XHJcblxyXG4vLyBTbmFwc2hvdCBUYWJsZSBNYW5hZ2VtZW50XHJcbmZ1bmN0aW9uIHNuYXBzaG90VGFibGUoKSB7XHJcbiAgICAvLyBDb25zdGFudHNcclxuICAgIGNvbnN0IEFQSV9FTkRQT0lOVFMgPSB7XHJcbiAgICAgICAgR0VUX1NOQVBTSE9UUzogXCIvZGljaC12dS1kYW5nLWt5L3NlY3VyZS9nZXQtc25hcHNob3RzXCIsXHJcbiAgICAgICAgUkVNT1ZFX1NOQVBTSE9UOiBcIi9kaWNoLXZ1LWRhbmcta3kvc2VjdXJlL3JlbW92ZS1zbmFwc2hvdFwiLFxyXG4gICAgICAgIFJFVkVSVF9TTkFQU0hPVDogXCIvZGljaC12dS1kYW5nLWt5L3NlY3VyZS9yZXZlcnQtc25hcHNob3RcIixcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgTUVTU0FHRVMgPSB7XHJcbiAgICAgICAgVk1fSURfTk9UX0ZPVU5EOiBcIktow7RuZyB0w6xtIHRo4bqleSBJRCBtw6F5IOG6o29cIixcclxuICAgICAgICBDT05ORUNUSU9OX0VSUk9SOiBcIktow7RuZyB0aOG7gyBr4bq/dCBu4buRaSDEkeG6v24gbcOheSBjaOG7p1wiLFxyXG4gICAgICAgIEdFTkVSSUNfRVJST1I6IFwiQ8OzIGzhu5dpIHjhuqN5IHJhXCIsXHJcbiAgICAgICAgREVMRVRFX1NVQ0NFU1M6IFwiWMOzYSBzbmFwc2hvdCB0aMOgbmggY8O0bmdcIixcclxuICAgICAgICBSRVZFUlRfU1VDQ0VTUzogXCJLaMO0aSBwaOG7pWMgc25hcHNob3QgdGjDoG5oIGPDtG5nXCIsXHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgbG9hZGluZzogZmFsc2UsXHJcbiAgICAgICAgc25hcHNob3RzOiBbXSxcclxuICAgICAgICBlcnJvcjogbnVsbCxcclxuXHJcbiAgICAgICAgLy8gQ2FjaGUgxJHhu4MgdHLDoW5oIGZldGNoIGzhuqFpIGtow7RuZyBj4bqnbiB0aGnhur90XHJcbiAgICAgICAgX2xhc3RGZXRjaFRpbWU6IDAsXHJcbiAgICAgICAgX2NhY2hlVGltZW91dDogMzAwMDAsIC8vIDMwIHNlY29uZHNcclxuXHJcbiAgICAgICAgYXN5bmMgZmV0Y2hTbmFwc2hvdHMoZm9yY2VSZWZyZXNoID0gZmFsc2UpIHtcclxuICAgICAgICAgICAgLy8gQ2hlY2sgY2FjaGVcclxuICAgICAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgIWZvcmNlUmVmcmVzaCAmJlxyXG4gICAgICAgICAgICAgICAgdGhpcy5zbmFwc2hvdHMubGVuZ3RoID4gMCAmJlxyXG4gICAgICAgICAgICAgICAgbm93IC0gdGhpcy5fbGFzdEZldGNoVGltZSA8IHRoaXMuX2NhY2hlVGltZW91dFxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5lcnJvciA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICBjb25zdCB2bUlkID0gd2luZG93LnZtSWQ/LnRyaW0oKTtcclxuICAgICAgICAgICAgaWYgKCF2bUlkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRFcnJvcihNRVNTQUdFUy5WTV9JRF9OT1RfRk9VTkQpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuX21ha2VSZXF1ZXN0KFxyXG4gICAgICAgICAgICAgICAgICAgIGAke1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBBUElfRU5EUE9JTlRTLkdFVF9TTkFQU0hPVFNcclxuICAgICAgICAgICAgICAgICAgICB9P3Byb2R1Y3RfaWQ9JHtlbmNvZGVVUklDb21wb25lbnQodm1JZCl9YFxyXG4gICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9wcm9jZXNzU25hcHNob3RzUmVzcG9uc2UoZGF0YSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9sYXN0RmV0Y2hUaW1lID0gbm93O1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5faGFuZGxlRXJyb3IoXCJmZXRjaGluZyBzbmFwc2hvdHNcIiwgZXJyb3IpO1xyXG4gICAgICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBmb3JtYXRTaXplKHNpemVHQiwgc2l6ZU1CKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGJ5dGVzID0gdGhpcy5fY29udmVydFRvQnl0ZXMoc2l6ZUdCLCBzaXplTUIpO1xyXG4gICAgICAgICAgICBpZiAoYnl0ZXMgPT09IDApIHJldHVybiBcIjAgQlwiO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Zvcm1hdEJ5dGVzKGJ5dGVzKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBhc3luYyBkZWxldGVTbmFwc2hvdChzbmFwc2hvdE5hbWUpIHtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgIShhd2FpdCB0aGlzLl9jb25maXJtQWN0aW9uKFxyXG4gICAgICAgICAgICAgICAgICAgIFwiWMOhYyBuaOG6rW4geMOzYVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGBC4bqhbiBjw7MgY2jhuq9jIGNo4bqvbiBtdeG7kW4geMOzYSBzbmFwc2hvdCBcIiR7c25hcHNob3ROYW1lfVwiPyBIw6BuaCDEkeG7mW5nIG7DoHkga2jDtG5nIHRo4buDIGhvw6BuIHTDoWMuYCxcclxuICAgICAgICAgICAgICAgICAgICBcIljDs2FcIlxyXG4gICAgICAgICAgICAgICAgKSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fZXhlY3V0ZVNuYXBzaG90QWN0aW9uKFxyXG4gICAgICAgICAgICAgICAgQVBJX0VORFBPSU5UUy5SRU1PVkVfU05BUFNIT1QsXHJcbiAgICAgICAgICAgICAgICBzbmFwc2hvdE5hbWUsXHJcbiAgICAgICAgICAgICAgICBNRVNTQUdFUy5ERUxFVEVfU1VDQ0VTUyxcclxuICAgICAgICAgICAgICAgIFwiZGVsZXRpbmcgc25hcHNob3RcIlxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIGFzeW5jIHJldmVydFNuYXBzaG90KHNuYXBzaG90TmFtZSkge1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAhKGF3YWl0IHRoaXMuX2NvbmZpcm1BY3Rpb24oXHJcbiAgICAgICAgICAgICAgICAgICAgXCJYw6FjIG5o4bqtbiBraMO0aSBwaOG7pWNcIixcclxuICAgICAgICAgICAgICAgICAgICBgQuG6oW4gY8OzIGNo4bqvYyBjaOG6r24gbXXhu5FuIGtow7RpIHBo4bulYyB24buBIHNuYXBzaG90IFwiJHtzbmFwc2hvdE5hbWV9XCI/IFThuqV0IGPhuqMgZOG7ryBsaeG7h3UgaGnhu4duIHThuqFpIHPhur0gYuG7iyBt4bqldC5gLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiS2jDtGkgcGjhu6VjXCJcclxuICAgICAgICAgICAgICAgICkpXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2V4ZWN1dGVTbmFwc2hvdEFjdGlvbihcclxuICAgICAgICAgICAgICAgIEFQSV9FTkRQT0lOVFMuUkVWRVJUX1NOQVBTSE9ULFxyXG4gICAgICAgICAgICAgICAgc25hcHNob3ROYW1lLFxyXG4gICAgICAgICAgICAgICAgTUVTU0FHRVMuUkVWRVJUX1NVQ0NFU1MsXHJcbiAgICAgICAgICAgICAgICBcInJldmVydGluZyBzbmFwc2hvdFwiLFxyXG4gICAgICAgICAgICAgICAgMjAwMFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8vIFB1YmxpYyBoZWxwZXIgbWV0aG9kc1xyXG4gICAgICAgIHJlZnJlc2hTbmFwc2hvdHMoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZldGNoU25hcHNob3RzKHRydWUpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIGdldFNuYXBzaG90Q291bnQoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNuYXBzaG90cy5sZW5ndGg7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgaXNMb2FkaW5nKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2FkaW5nO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIGhhc0Vycm9yKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lcnJvciAhPT0gbnVsbDtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvLyBQcml2YXRlIGhlbHBlciBtZXRob2RzXHJcbiAgICAgICAgX3NldEVycm9yKG1lc3NhZ2UpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBtZXNzYWdlO1xyXG4gICAgICAgICAgICB0aGlzLnNuYXBzaG90cyA9IFtdO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIGFzeW5jIF9tYWtlUmVxdWVzdCh1cmwsIG9wdGlvbnMgPSB7fSkge1xyXG4gICAgICAgICAgICBjb25zdCBkZWZhdWx0T3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgIG1ldGhvZDogXCJHRVRcIixcclxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICAgICAgICAgICBBY2NlcHQ6IFwiYXBwbGljYXRpb24vanNvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiWC1DU1JGLVRPS0VOXCI6IGNzcmZUb2tlbixcclxuICAgICAgICAgICAgICAgICAgICBcIkNhY2hlLUNvbnRyb2xcIjogXCJuby1jYWNoZVwiLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGNyZWRlbnRpYWxzOiBcInNhbWUtb3JpZ2luXCIsXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCwge1xyXG4gICAgICAgICAgICAgICAgLi4uZGVmYXVsdE9wdGlvbnMsXHJcbiAgICAgICAgICAgICAgICAuLi5vcHRpb25zLFxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSFRUUCBlcnJvciEgc3RhdHVzOiAke3Jlc3BvbnNlLnN0YXR1c31gKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBfcHJvY2Vzc1NuYXBzaG90c1Jlc3BvbnNlKGRhdGEpIHtcclxuICAgICAgICAgICAgLy8gSGFuZGxlIGRpZmZlcmVudCByZXNwb25zZSBzdHJ1Y3R1cmVzXHJcbiAgICAgICAgICAgIGlmIChkYXRhLmVycm9yID09PSBmYWxzZSAmJiBkYXRhLmRhdGE/LnNuYXBzaG90cykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zbmFwc2hvdHMgPSBkYXRhLmRhdGEuc25hcHNob3RzO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGEuZXJyb3IgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgICAgICAgICAgICBkYXRhLm1lc3NhZ2UgfHwgXCJDw7MgbOG7l2kgeOG6o3kgcmEga2hpIHThuqNpIGRhbmggc8OhY2ggc25hcHNob3RcIlxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRhLnNuYXBzaG90cykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zbmFwc2hvdHMgPSBkYXRhLnNuYXBzaG90cztcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc25hcHNob3RzID0gW107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBfY29udmVydFRvQnl0ZXMoc2l6ZUdCLCBzaXplTUIpIHtcclxuICAgICAgICAgICAgaWYgKHNpemVHQikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQoc2l6ZUdCKSAqIDEwMjQgKiogMzsgLy8gR0IgdG8gYnl0ZXNcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChzaXplTUIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KHNpemVNQikgKiAxMDI0ICoqIDI7IC8vIE1CIHRvIGJ5dGVzXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgX2Zvcm1hdEJ5dGVzKGJ5dGVzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHVuaXRzID0gW1wiQlwiLCBcIktCXCIsIFwiTUJcIiwgXCJHQlwiLCBcIlRCXCJdO1xyXG4gICAgICAgICAgICBjb25zdCBrID0gMTAyNDtcclxuICAgICAgICAgICAgY29uc3QgaSA9IE1hdGguZmxvb3IoTWF0aC5sb2coYnl0ZXMpIC8gTWF0aC5sb2coaykpO1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgc2l6ZSA9IHBhcnNlRmxvYXQoKGJ5dGVzIC8gTWF0aC5wb3coaywgaSkpLnRvRml4ZWQoMikpO1xyXG4gICAgICAgICAgICByZXR1cm4gYCR7c2l6ZX0gJHt1bml0c1tpXX1gO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIGFzeW5jIF9jb25maXJtQWN0aW9uKHRpdGxlLCB0ZXh0LCBjb25maXJtVGV4dCkge1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBTd2FsLmZpcmUoe1xyXG4gICAgICAgICAgICAgICAgdGl0bGUsXHJcbiAgICAgICAgICAgICAgICB0ZXh0LFxyXG4gICAgICAgICAgICAgICAgaWNvbjogXCJ3YXJuaW5nXCIsXHJcbiAgICAgICAgICAgICAgICBzaG93Q2FuY2VsQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgY29uZmlybUJ1dHRvbkNvbG9yOiB0aXRsZS5pbmNsdWRlcyhcInjDs2FcIikgPyBcIiNkMzNcIiA6IFwiIzMwODVkNlwiLFxyXG4gICAgICAgICAgICAgICAgY2FuY2VsQnV0dG9uQ29sb3I6IHRpdGxlLmluY2x1ZGVzKFwieMOzYVwiKSA/IFwiIzMwODVkNlwiIDogXCIjZDMzXCIsXHJcbiAgICAgICAgICAgICAgICBjb25maXJtQnV0dG9uVGV4dDogY29uZmlybVRleHQsXHJcbiAgICAgICAgICAgICAgICBjYW5jZWxCdXR0b25UZXh0OiBcIkjhu6d5IGLhu49cIixcclxuICAgICAgICAgICAgICAgIHJldmVyc2VCdXR0b25zOiB0cnVlLFxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQuaXNDb25maXJtZWQ7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgYXN5bmMgX2V4ZWN1dGVTbmFwc2hvdEFjdGlvbihcclxuICAgICAgICAgICAgZW5kcG9pbnQsXHJcbiAgICAgICAgICAgIHNuYXBzaG90TmFtZSxcclxuICAgICAgICAgICAgc3VjY2Vzc01lc3NhZ2UsXHJcbiAgICAgICAgICAgIGVycm9yQ29udGV4dCxcclxuICAgICAgICAgICAgZGVsYXkgPSAxMDAwXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5fbWFrZVJlcXVlc3QoZW5kcG9pbnQsIHtcclxuICAgICAgICAgICAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEFjY2VwdDogXCJhcHBsaWNhdGlvbi9qc29uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiWC1DU1JGLVRPS0VOXCI6IGNzcmZUb2tlbixcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjdF9pZDogd2luZG93LnZtSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNuYXBzaG90X25hbWU6IHNuYXBzaG90TmFtZSxcclxuICAgICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChkYXRhLmVycm9yID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNob3dOb3RpZmljYXRpb24oZGF0YS5tZXNzYWdlIHx8IHN1Y2Nlc3NNZXNzYWdlLCBcInN1Y2Nlc3NcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnJlZnJlc2hTbmFwc2hvdHMoKSwgZGVsYXkpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEubWVzc2FnZSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7TUVTU0FHRVMuR0VORVJJQ19FUlJPUn0ga2hpICR7ZXJyb3JDb250ZXh0fWBcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5faGFuZGxlRXJyb3IoZXJyb3JDb250ZXh0LCBlcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBfaGFuZGxlRXJyb3IoY29udGV4dCwgZXJyb3IpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgRXJyb3IgJHtjb250ZXh0fTpgLCBlcnJvcik7XHJcbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvci5tZXNzYWdlIHx8IE1FU1NBR0VTLkNPTk5FQ1RJT05fRVJST1I7XHJcblxyXG4gICAgICAgICAgICBpZiAoY29udGV4dC5pbmNsdWRlcyhcImZldGNoaW5nXCIpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRFcnJvcihtZXNzYWdlKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHNob3dOb3RpZmljYXRpb24obWVzc2FnZSwgXCJlcnJvclwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICB9O1xyXG59XHJcblxyXG4vLyBNYWtlIHNuYXBzaG90VGFibGUgYXZhaWxhYmxlIGdsb2JhbGx5IGZvciBBbHBpbmUuanNcclxud2luZG93LnNuYXBzaG90VGFibGUgPSBzbmFwc2hvdFRhYmxlO1xyXG4iXSwibWFwcGluZ3MiOiI7Ozs7OzsrQ0FDQSxxSkFBQUEsbUJBQUEsWUFBQUEsb0JBQUEsV0FBQUMsQ0FBQSxTQUFBQyxDQUFBLEVBQUFELENBQUEsT0FBQUUsQ0FBQSxHQUFBQyxNQUFBLENBQUFDLFNBQUEsRUFBQUMsQ0FBQSxHQUFBSCxDQUFBLENBQUFJLGNBQUEsRUFBQUMsQ0FBQSxHQUFBSixNQUFBLENBQUFLLGNBQUEsY0FBQVAsQ0FBQSxFQUFBRCxDQUFBLEVBQUFFLENBQUEsSUFBQUQsQ0FBQSxDQUFBRCxDQUFBLElBQUFFLENBQUEsQ0FBQU8sS0FBQSxLQUFBQyxDQUFBLHdCQUFBQyxNQUFBLEdBQUFBLE1BQUEsT0FBQUMsQ0FBQSxHQUFBRixDQUFBLENBQUFHLFFBQUEsa0JBQUFDLENBQUEsR0FBQUosQ0FBQSxDQUFBSyxhQUFBLHVCQUFBQyxDQUFBLEdBQUFOLENBQUEsQ0FBQU8sV0FBQSw4QkFBQUMsT0FBQWpCLENBQUEsRUFBQUQsQ0FBQSxFQUFBRSxDQUFBLFdBQUFDLE1BQUEsQ0FBQUssY0FBQSxDQUFBUCxDQUFBLEVBQUFELENBQUEsSUFBQVMsS0FBQSxFQUFBUCxDQUFBLEVBQUFpQixVQUFBLE1BQUFDLFlBQUEsTUFBQUMsUUFBQSxTQUFBcEIsQ0FBQSxDQUFBRCxDQUFBLFdBQUFrQixNQUFBLG1CQUFBakIsQ0FBQSxJQUFBaUIs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QU8sRUFBRTtrQkFDTCxjQUFjLEVBQUUsa0JBQWtCO2tCQUNsQ08sTUFBTSxFQUFFLGtCQUFrQjtrQkFDMUIsY0FBYyxFQUFFL0I7Z0JBQ3BCLENBQUM7Z0JBQ0RpQyxJQUFJLEVBQUVDLElBQUksQ0FBQ0MsU0FBUyxDQUFDO2tCQUNqQkwsVUFBVSxFQUFFcEIsTUFBTSxDQUFDWixJQUFJO2tCQUN2QjZNLGFBQWEsRUFBRTFEO2dCQUNuQixDQUFDO2NBQ0wsQ0FBQyxDQUFDO1lBQUE7Y0FYSXpHLElBQUksR0FBQWtLLFNBQUEsQ0FBQS9QLElBQUE7Y0FBQSxNQWFONkYsSUFBSSxDQUFDdEIsS0FBSyxLQUFLLEtBQUs7Z0JBQUF3TCxTQUFBLENBQUF6UCxJQUFBO2dCQUFBO2NBQUE7Y0FDcEI2RCxnQkFBZ0IsQ0FBQzBCLElBQUksQ0FBQ3pCLE9BQU8sSUFBSW9MLGNBQWMsRUFBRSxTQUFTLENBQUM7Y0FDM0RoSixVQUFVLENBQUM7Z0JBQUEsT0FBTW1KLE1BQUksQ0FBQ3pDLGdCQUFnQixDQUFDLENBQUM7Y0FBQSxHQUFFMkMsS0FBSyxDQUFDO2NBQUNFLFNBQUEsQ0FBQXpQLElBQUE7Y0FBQTtZQUFBO2NBQUEsTUFFM0MsSUFBSVgsS0FBSyxDQUNYa0csSUFBSSxDQUFDekIsT0FBTyxPQUFBMkMsTUFBQSxDQUNMdUQsUUFBUSxDQUFDRyxhQUFhLFdBQUExRCxNQUFBLENBQVEwSSxZQUFZLENBQ3JELENBQUM7WUFBQTtjQUFBTSxTQUFBLENBQUF6UCxJQUFBO2NBQUE7WUFBQTtjQUFBeVAsU0FBQSxDQUFBOU4sSUFBQTtjQUFBOE4sU0FBQSxDQUFBMUosRUFBQSxHQUFBMEosU0FBQTtjQUdMSixNQUFJLENBQUM3RCxZQUFZLENBQUMyRCxZQUFZLEVBQUFNLFNBQUEsQ0FBQTFKLEVBQU8sQ0FBQztZQUFDO1lBQUE7Y0FBQSxPQUFBMEosU0FBQSxDQUFBM04sSUFBQTtVQUFBO1FBQUEsR0FBQXdOLFFBQUE7TUFBQTtJQUUvQyxDQUFDO0lBRUQ5RCxZQUFZLFdBQVpBLFlBQVlBLENBQUNtRSxPQUFPLEVBQUUxTCxLQUFLLEVBQUU7TUFDekI2QyxPQUFPLENBQUM3QyxLQUFLLFVBQUF3QyxNQUFBLENBQVVrSixPQUFPLFFBQUsxTCxLQUFLLENBQUM7TUFDekMsSUFBTUgsT0FBTyxHQUFHRyxLQUFLLENBQUNILE9BQU8sSUFBSWtHLFFBQVEsQ0FBQ0UsZ0JBQWdCO01BRTFELElBQUl5RixPQUFPLENBQUMzSixRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUU7UUFDOUIsSUFBSSxDQUFDb0YsU0FBUyxDQUFDdEgsT0FBTyxDQUFDO01BQzNCLENBQUMsTUFBTTtRQUNIRCxnQkFBZ0IsQ0FBQ0MsT0FBTyxFQUFFLE9BQU8sQ0FBQztNQUN0QztJQUNKO0VBQ0osQ0FBQztBQUNMOztBQUVBO0FBQ0FMLE1BQU0sQ0FBQ2tHLGFBQWEsR0FBR0EsYUFBYSIsImlnbm9yZUxpc3QiOltdLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvc2VydmljZS9zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./resources/js/service/service.js\n"); /***/ }) diff --git a/resources/views/frontend/service/partials/control-buttons/renewal-button.blade.php b/resources/views/frontend/service/partials/control-buttons/renewal-button.blade.php index 851c405..54f1050 100644 --- a/resources/views/frontend/service/partials/control-buttons/renewal-button.blade.php +++ b/resources/views/frontend/service/partials/control-buttons/renewal-button.blade.php @@ -1,13 +1,14 @@ -{{-- Renewal Button Component --}} -