From bbae3ca3b95f1f45154ce6dab1f605b82d91f73e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20tom=20W=C3=B6rden?= <h.tomwoerden@indiscale.com> Date: Wed, 17 Jul 2024 15:46:15 +0200 Subject: [PATCH] ENH: include entity service --- CHANGELOG.md | 1 + build.properties.d/00_default.properties | 1 + src/core/js/grpc-service.bundle.js | 1 + 3 files changed, 3 insertions(+) create mode 100644 src/core/js/grpc-service.bundle.js diff --git a/CHANGELOG.md b/CHANGELOG.md index b0faf217..bac28604 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] ## ### Added ### +- GRPC Entity Service can be enabled with `BUILD_MODULE_EXT_GRPC_SERVICE` ### Changed ### diff --git a/build.properties.d/00_default.properties b/build.properties.d/00_default.properties index 96017406..c0f013c1 100644 --- a/build.properties.d/00_default.properties +++ b/build.properties.d/00_default.properties @@ -58,6 +58,7 @@ BUILD_MODULE_SHOW_ID_IN_LABEL=DISABLED BUILD_MODULE_LEGACY_QUERY_FORM=DISABLED BUILD_MODULE_LEGACY_MAP=ENABLED BUILD_MODULE_EXT_FILE_UPLOAD=ENABLED +BUILD_MODULE_EXT_GRPC_SERVICE=DISABLED BUILD_MODULE_USER_MANAGEMENT=ENABLED BUILD_MODULE_USER_MANAGEMENT_CHANGE_OWN_PASSWORD_REALM=CaosDB diff --git a/src/core/js/grpc-service.bundle.js b/src/core/js/grpc-service.bundle.js new file mode 100644 index 00000000..389e75f0 --- /dev/null +++ b/src/core/js/grpc-service.bundle.js @@ -0,0 +1 @@ +(()=>{var __webpack_modules__={814:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _indiscale_caosdb_webui_entity_service__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(349);\n/* harmony import */ var _indiscale_caosdb_webui_entity_service__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_indiscale_caosdb_webui_entity_service__WEBPACK_IMPORTED_MODULE_0__);\nfunction _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 _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\nvar service_2 = {\n /**\n * expose the entity service to the legacy webui\n */\n\n init: function () {\n var _init = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {\n var trans;\n return _regeneratorRuntime().wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n // expose transaction\n trans = new _indiscale_caosdb_webui_entity_service__WEBPACK_IMPORTED_MODULE_0__.TransactionService(window.connection.getBasePath() + "api");\n window.GrpcTransactionService = trans;\n window.GrpcTransactionServiceFactory = function (api) {\n return new _indiscale_caosdb_webui_entity_service__WEBPACK_IMPORTED_MODULE_0__.TransactionService(api);\n };\n case 3:\n case "end":\n return _context.stop();\n }\n }, _callee);\n }));\n function init() {\n return _init.apply(this, arguments);\n }\n return init;\n }()\n};\n$(document).ready(function () {\n var build = window.BUILD_MODULE_EXT_GRPC_SERVICE || "${BUILD_MODULE_EXT_GRPC_SERVICE}";\n if (build === "ENABLED") {\n caosdb_modules.register(service_2);\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QTZCLEdBQUcsVUFBQ0MsR0FBRztjQUFBLE9BQUssSUFBSWIsc0ZBQWtCLENBQUNhLEdBQUcsQ0FBQztZQUFBO1VBQUM7VUFBQTtZQUFBLE9BQUFOLFFBQUEsQ0FBQXBCLElBQUE7UUFBQTtNQUFBLEdBQUFpQixPQUFBO0lBQUEsQ0FDN0U7SUFBQSxTQUFBRixLQUFBO01BQUEsT0FBQUMsS0FBQSxDQUFBTixLQUFBLE9BQUFELFNBQUE7SUFBQTtJQUFBLE9BQUFNLElBQUE7RUFBQTtBQUNILENBQUM7QUFFRFksQ0FBQyxDQUFDQyxRQUFRLENBQUMsQ0FBQ0MsS0FBSyxDQUFDLFlBQVk7RUFDNUIsSUFBTUMsS0FBSyxHQUFHVCxNQUFNLENBQUNVLDZCQUE2QixJQUFJLGtDQUFrQztFQUN4RixJQUFJRCxLQUFLLEtBQUssU0FBUyxFQUFFO0lBQ3ZCRSxjQUFjLENBQUNDLFFBQVEsQ0FBQ25CLFNBQVMsQ0FBQztFQUNwQztBQUNGLENBQUMsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0Nhb3NEQldlYnVpMi8uL3NyYy9zZXJ2aWNlLmpzP2JhNWYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVHJhbnNhY3Rpb25TZXJ2aWNlIH0gZnJvbSBcIkBpbmRpc2NhbGUvY2Fvc2RiLXdlYnVpLWVudGl0eS1zZXJ2aWNlXCI7XG5cbmNvbnN0IHNlcnZpY2VfMiA9IHtcbiAgLyoqXG4gICAqIGV4cG9zZSB0aGUgZW50aXR5IHNlcnZpY2UgdG8gdGhlIGxlZ2FjeSB3ZWJ1aVxuICAgKi9cblxuICBpbml0OiBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgLy8gZXhwb3NlIHRyYW5zYWN0aW9uXG4gICAgY29uc3QgdHJhbnMgPSBuZXcgVHJhbnNhY3Rpb25TZXJ2aWNlKHdpbmRvdy5jb25uZWN0aW9uLmdldEJhc2VQYXRoKCkrXCJhcGlcIilcbiAgICB3aW5kb3cuR3JwY1RyYW5zYWN0aW9uU2VydmljZSA9IHRyYW5zO1xuICAgIHdpbmRvdy5HcnBjVHJhbnNhY3Rpb25TZXJ2aWNlRmFjdG9yeSA9IChhcGkpID0+IG5ldyBUcmFuc2FjdGlvblNlcnZpY2UoYXBpKTtcbiAgfSxcbn07XG5cbiQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgYnVpbGQgPSB3aW5kb3cuQlVJTERfTU9EVUxFX0VYVF9HUlBDX1NFUlZJQ0UgfHwgXCIke0JVSUxEX01PRFVMRV9FWFRfR1JQQ19TRVJWSUNFfVwiXG4gIGlmIChidWlsZCA9PT0gXCJFTkFCTEVEXCIpIHtcbiAgICBjYW9zZGJfbW9kdWxlcy5yZWdpc3RlcihzZXJ2aWNlXzIpO1xuICB9XG59KTtcbiJdLCJuYW1lcyI6WyJfcmVnZW5lcmF0b3JSdW50aW1lIiwiZSIsInQiLCJyIiwiT2JqZWN0IiwicHJvdG90eXBlIiwibiIsImhhc093blByb3BlcnR5IiwibyIsImRlZmluZVByb3BlcnR5IiwidmFsdWUiLCJpIiwiU3ltYm9sIiwiYSIsIml0ZXJhdG9yIiwiYyIsImFzeW5jSXRlcmF0b3IiLCJ1IiwidG9TdHJpbmdUYWciLCJkZWZpbmUiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJ3cmFwIiwiR2VuZXJhdG9yIiwiY3JlYXRlIiwiQ29udGV4dCIsIm1ha2VJbnZva2VNZXRob2QiLCJ0cnlDYXRjaCIsInR5cGUiLCJhcmciLCJjYWxsIiwiaCIsImwiLCJmIiwicyIsInkiLCJHZW5lcmF0b3JGdW5jdGlvbiIsIkdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlIiwicCIsImQiLCJnZXRQcm90b3R5cGVPZiIsInYiLCJ2YWx1ZXMiLCJnIiwiZGVmaW5lSXRlcmF0b3JNZXRob2RzIiwiZm9yRWFjaCIsIl9pbnZva2UiLCJBc3luY0l0ZXJhdG9yIiwiaW52b2tlIiwiX3R5cGVvZiIsInJlc29sdmUiLCJfX2F3YWl0IiwidGhlbiIsImNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnIiwiRXJyb3IiLCJkb25lIiwibWV0aG9kIiwiZGVsZWdhdGUiLCJtYXliZUludm9rZURlbGVnYXRlIiwic2VudCIsIl9zZW50IiwiZGlzcGF0Y2hFeGNlcHRpb24iLCJhYnJ1cHQiLCJUeXBlRXJyb3IiLCJyZXN1bHROYW1lIiwibmV4dCIsIm5leHRMb2MiLCJwdXNoVHJ5RW50cnkiLCJ0cnlMb2MiLCJjYXRjaExvYyIsImZpbmFsbHlMb2MiLCJhZnRlckxvYyIsInRyeUVudHJpZXMiLCJwdXNoIiwicmVzZXRUcnlFbnRyeSIsImNvbXBsZXRpb24iLCJyZXNldCIsImlzTmFOIiwibGVuZ3RoIiwiZGlzcGxheU5hbWUiLCJpc0dlbmVyYXRvckZ1bmN0aW9uIiwiY29uc3RydWN0b3IiLCJuYW1lIiwibWFyayIsInNldFByb3RvdHlwZU9mIiwiX19wcm90b19fIiwiYXdyYXAiLCJhc3luYyIsIlByb21pc2UiLCJrZXlzIiwicmV2ZXJzZSIsInBvcCIsInByZXYiLCJjaGFyQXQiLCJzbGljZSIsInN0b3AiLCJydmFsIiwiaGFuZGxlIiwiY29tcGxldGUiLCJmaW5pc2giLCJfY2F0Y2giLCJkZWxlZ2F0ZVlpZWxkIiwiYXN5bmNHZW5lcmF0b3JTdGVwIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJhcmd1bWVudHMiLCJhcHBseSIsIl9uZXh0IiwiX3Rocm93IiwiVHJhbnNhY3Rpb25TZXJ2aWNlIiwic2VydmljZV8yIiwiaW5pdCIsIl9pbml0IiwiX2NhbGxlZSIsInRyYW5zIiwiX2NhbGxlZSQiLCJfY29udGV4dCIsIndpbmRvdyIsImNvbm5lY3Rpb24iLCJnZXRCYXNlUGF0aCIsIkdycGNUcmFuc2FjdGlvblNlcnZpY2UiLCJHcnBjVHJhbnNhY3Rpb25TZXJ2aWNlRmFjdG9yeSIsImFwaSIsIiQiLCJkb2N1bWVudCIsInJlYWR5IiwiYnVpbGQiLCJCVUlMRF9NT0RVTEVfRVhUX0dSUENfU0VSVklDRSIsImNhb3NkYl9tb2R1bGVzIiwicmVnaXN0ZXIiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///814\n')},349:module=>{eval('!function(e,t){ true?module.exports=t():0}(self,(function(){return(()=>{var __webpack_modules__={347:(e,t,o)=>{var r={};r.v1=o(400),t.h=r},400:(e,t,o)=>{var r={};r.web=o(40);var n={caosdb:{}};n.caosdb.entity={},n.caosdb.entity.v1=o(226),n.caosdb.entity.v1.EntityTransactionServiceClient=function(e,t,o){o||(o={}),o.format="text",this.client_=new r.web.GrpcWebClientBase(o),this.hostname_=e.replace(/\\/+$/,"")},n.caosdb.entity.v1.EntityTransactionServicePromiseClient=function(e,t,o){o||(o={}),o.format="text",this.client_=new r.web.GrpcWebClientBase(o),this.hostname_=e.replace(/\\/+$/,"")};var s=new r.web.MethodDescriptor("/caosdb.entity.v1.EntityTransactionService/MultiTransaction",r.web.MethodType.UNARY,n.caosdb.entity.v1.MultiTransactionRequest,n.caosdb.entity.v1.MultiTransactionResponse,(function(e){return e.serializeBinary()}),n.caosdb.entity.v1.MultiTransactionResponse.deserializeBinary);n.caosdb.entity.v1.EntityTransactionServiceClient.prototype.multiTransaction=function(e,t,o){return this.client_.rpcCall(this.hostname_+"/caosdb.entity.v1.EntityTransactionService/MultiTransaction",e,t||{},s,o)},n.caosdb.entity.v1.EntityTransactionServicePromiseClient.prototype.multiTransaction=function(e,t){return this.client_.unaryCall(this.hostname_+"/caosdb.entity.v1.EntityTransactionService/MultiTransaction",e,t||{},s)};var i=new r.web.MethodDescriptor("/caosdb.entity.v1.EntityTransactionService/MultiRetrieveEntityACL",r.web.MethodType.UNARY,n.caosdb.entity.v1.MultiRetrieveEntityACLRequest,n.caosdb.entity.v1.MultiRetrieveEntityACLResponse,(function(e){return e.serializeBinary()}),n.caosdb.entity.v1.MultiRetrieveEntityACLResponse.deserializeBinary);n.caosdb.entity.v1.EntityTransactionServiceClient.prototype.multiRetrieveEntityACL=function(e,t,o){return this.client_.rpcCall(this.hostname_+"/caosdb.entity.v1.EntityTransactionService/MultiRetrieveEntityACL",e,t||{},i,o)},n.caosdb.entity.v1.EntityTransactionServicePromiseClient.prototype.multiRetrieveEntityACL=function(e,t){return this.client_.unaryCall(this.hostname_+"/caosdb.entity.v1.EntityTransactionService/MultiRetrieveEntityACL",e,t||{},i)};var a=new r.web.MethodDescriptor("/caosdb.entity.v1.EntityTransactionService/MultiUpdateEntityACL",r.web.MethodType.UNARY,n.caosdb.entity.v1.MultiUpdateEntityACLRequest,n.caosdb.entity.v1.MultiUpdateEntityACLResponse,(function(e){return e.serializeBinary()}),n.caosdb.entity.v1.MultiUpdateEntityACLResponse.deserializeBinary);n.caosdb.entity.v1.EntityTransactionServiceClient.prototype.multiUpdateEntityACL=function(e,t,o){return this.client_.rpcCall(this.hostname_+"/caosdb.entity.v1.EntityTransactionService/MultiUpdateEntityACL",e,t||{},a,o)},n.caosdb.entity.v1.EntityTransactionServicePromiseClient.prototype.multiUpdateEntityACL=function(e,t){return this.client_.unaryCall(this.hostname_+"/caosdb.entity.v1.EntityTransactionService/MultiUpdateEntityACL",e,t||{},a)},n.caosdb.entity.v1.FileTransmissionServiceClient=function(e,t,o){o||(o={}),o.format="text",this.client_=new r.web.GrpcWebClientBase(o),this.hostname_=e.replace(/\\/+$/,"")},n.caosdb.entity.v1.FileTransmissionServicePromiseClient=function(e,t,o){o||(o={}),o.format="text",this.client_=new r.web.GrpcWebClientBase(o),this.hostname_=e.replace(/\\/+$/,"")};var g=new r.web.MethodDescriptor("/caosdb.entity.v1.FileTransmissionService/RegisterFileUpload",r.web.MethodType.UNARY,n.caosdb.entity.v1.RegisterFileUploadRequest,n.caosdb.entity.v1.RegisterFileUploadResponse,(function(e){return e.serializeBinary()}),n.caosdb.entity.v1.RegisterFileUploadResponse.deserializeBinary);n.caosdb.entity.v1.FileTransmissionServiceClient.prototype.registerFileUpload=function(e,t,o){return this.client_.rpcCall(this.hostname_+"/caosdb.entity.v1.FileTransmissionService/RegisterFileUpload",e,t||{},g,o)},n.caosdb.entity.v1.FileTransmissionServicePromiseClient.prototype.registerFileUpload=function(e,t){return this.client_.unaryCall(this.hostname_+"/caosdb.entity.v1.FileTransmissionService/RegisterFileUpload",e,t||{},g)};var p=new r.web.MethodDescriptor("/caosdb.entity.v1.FileTransmissionService/FileDownload",r.web.MethodType.SERVER_STREAMING,n.caosdb.entity.v1.FileDownloadRequest,n.caosdb.entity.v1.FileDownloadResponse,(function(e){return e.serializeBinary()}),n.caosdb.entity.v1.FileDownloadResponse.deserializeBinary);n.caosdb.entity.v1.FileTransmissionServiceClient.prototype.fileDownload=function(e,t){return this.client_.serverStreaming(this.hostname_+"/caosdb.entity.v1.FileTransmissionService/FileDownload",e,t||{},p)},n.caosdb.entity.v1.FileTransmissionServicePromiseClient.prototype.fileDownload=function(e,t){return this.client_.serverStreaming(this.hostname_+"/caosdb.entity.v1.FileTransmissionService/FileDownload",e,t||{},p)},e.exports=n.caosdb.entity.v1},226:(e,t,o)=>{var r=o(19),n=r,s="undefined"!=typeof globalThis&&globalThis||"undefined"!=typeof window&&window||void 0!==s&&s||"undefined"!=typeof self&&self||function(){return this}.call(null)||Function("return this")();n.exportSymbol("proto.caosdb.entity.v1.AtomicDataType",null,s),n.exportSymbol("proto.caosdb.entity.v1.CollectionValues",null,s),n.exportSymbol("proto.caosdb.entity.v1.DataType",null,s),n.exportSymbol("proto.caosdb.entity.v1.DataType.DataTypeCase",null,s),n.exportSymbol("proto.caosdb.entity.v1.DeleteRequest",null,s),n.exportSymbol("proto.caosdb.entity.v1.DeleteRequest.WrappedRequestCase",null,s),n.exportSymbol("proto.caosdb.entity.v1.DeleteResponse",null,s),n.exportSymbol("proto.caosdb.entity.v1.DeleteResponse.WrappedResponseCase",null,s),n.exportSymbol("proto.caosdb.entity.v1.Entity",null,s),n.exportSymbol("proto.caosdb.entity.v1.EntityACL",null,s),n.exportSymbol("proto.caosdb.entity.v1.EntityAclPermission",null,s),n.exportSymbol("proto.caosdb.entity.v1.EntityPermission",null,s),n.exportSymbol("proto.caosdb.entity.v1.EntityPermissionRule",null,s),n.exportSymbol("proto.caosdb.entity.v1.EntityPermissionRuleCapability",null,s),n.exportSymbol("proto.caosdb.entity.v1.EntityRequest",null,s),n.exportSymbol("proto.caosdb.entity.v1.EntityResponse",null,s),n.exportSymbol("proto.caosdb.entity.v1.EntityRole",null,s),n.exportSymbol("proto.caosdb.entity.v1.FileChunk",null,s),n.exportSymbol("proto.caosdb.entity.v1.FileDescriptor",null,s),n.exportSymbol("proto.caosdb.entity.v1.FileDownloadRequest",null,s),n.exportSymbol("proto.caosdb.entity.v1.FileDownloadResponse",null,s),n.exportSymbol("proto.caosdb.entity.v1.FileTransmissionId",null,s),n.exportSymbol("proto.caosdb.entity.v1.FileTransmissionSettings",null,s),n.exportSymbol("proto.caosdb.entity.v1.FileUploadRequest",null,s),n.exportSymbol("proto.caosdb.entity.v1.FileUploadResponse",null,s),n.exportSymbol("proto.caosdb.entity.v1.FindQueryResult",null,s),n.exportSymbol("proto.caosdb.entity.v1.Hash",null,s),n.exportSymbol("proto.caosdb.entity.v1.IdResponse",null,s),n.exportSymbol("proto.caosdb.entity.v1.Importance",null,s),n.exportSymbol("proto.caosdb.entity.v1.InsertRequest",null,s),n.exportSymbol("proto.caosdb.entity.v1.InsertResponse",null,s),n.exportSymbol("proto.caosdb.entity.v1.InsertResponse.WrappedResponseCase",null,s),n.exportSymbol("proto.caosdb.entity.v1.ListDataType",null,s),n.exportSymbol("proto.caosdb.entity.v1.ListDataType.ListDataTypeCase",null,s),n.exportSymbol("proto.caosdb.entity.v1.Message",null,s),n.exportSymbol("proto.caosdb.entity.v1.MessageCode",null,s),n.exportSymbol("proto.caosdb.entity.v1.MultiRetrieveEntityACLRequest",null,s),n.exportSymbol("proto.caosdb.entity.v1.MultiRetrieveEntityACLResponse",null,s),n.exportSymbol("proto.caosdb.entity.v1.MultiTransactionRequest",null,s),n.exportSymbol("proto.caosdb.entity.v1.MultiTransactionResponse",null,s),n.exportSymbol("proto.caosdb.entity.v1.MultiUpdateEntityACLRequest",null,s),n.exportSymbol("proto.caosdb.entity.v1.MultiUpdateEntityACLResponse",null,s),n.exportSymbol("proto.caosdb.entity.v1.Parent",null,s),n.exportSymbol("proto.caosdb.entity.v1.Property",null,s),n.exportSymbol("proto.caosdb.entity.v1.Query",null,s),n.exportSymbol("proto.caosdb.entity.v1.ReferenceDataType",null,s),n.exportSymbol("proto.caosdb.entity.v1.RegisterFileUploadRequest",null,s),n.exportSymbol("proto.caosdb.entity.v1.RegisterFileUploadResponse",null,s),n.exportSymbol("proto.caosdb.entity.v1.RegistrationStatus",null,s),n.exportSymbol("proto.caosdb.entity.v1.RetrieveRequest",null,s),n.exportSymbol("proto.caosdb.entity.v1.RetrieveRequest.WrappedRequestCase",null,s),n.exportSymbol("proto.caosdb.entity.v1.RetrieveResponse",null,s),n.exportSymbol("proto.caosdb.entity.v1.RetrieveResponse.RetrieveResponseCase",null,s),n.exportSymbol("proto.caosdb.entity.v1.ScalarValue",null,s),n.exportSymbol("proto.caosdb.entity.v1.ScalarValue.ScalarValueCase",null,s),n.exportSymbol("proto.caosdb.entity.v1.SelectQueryColumn",null,s),n.exportSymbol("proto.caosdb.entity.v1.SelectQueryHeader",null,s),n.exportSymbol("proto.caosdb.entity.v1.SelectQueryResult",null,s),n.exportSymbol("proto.caosdb.entity.v1.SelectQueryRow",null,s),n.exportSymbol("proto.caosdb.entity.v1.SpecialValue",null,s),n.exportSymbol("proto.caosdb.entity.v1.TransactionRequest",null,s),n.exportSymbol("proto.caosdb.entity.v1.TransactionRequest.WrappedRequestsCase",null,s),n.exportSymbol("proto.caosdb.entity.v1.TransactionResponse",null,s),n.exportSymbol("proto.caosdb.entity.v1.TransactionResponse.TransactionResponseCase",null,s),n.exportSymbol("proto.caosdb.entity.v1.TransmissionStatus",null,s),n.exportSymbol("proto.caosdb.entity.v1.UpdateRequest",null,s),n.exportSymbol("proto.caosdb.entity.v1.UpdateResponse",null,s),n.exportSymbol("proto.caosdb.entity.v1.UpdateResponse.WrappedResponseCase",null,s),n.exportSymbol("proto.caosdb.entity.v1.Value",null,s),n.exportSymbol("proto.caosdb.entity.v1.Value.ValueCase",null,s),n.exportSymbol("proto.caosdb.entity.v1.Version",null,s),proto.caosdb.entity.v1.ReferenceDataType=function(e){r.Message.initialize(this,e,0,-1,null,null)},n.inherits(proto.caosdb.entity.v1.ReferenceDataType,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.ReferenceDataType.displayName="proto.caosdb.entity.v1.ReferenceDataType"),proto.caosdb.entity.v1.ListDataType=function(e){r.Message.initialize(this,e,0,-1,null,proto.caosdb.entity.v1.ListDataType.oneofGroups_)},n.inherits(proto.caosdb.entity.v1.ListDataType,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.ListDataType.displayName="proto.caosdb.entity.v1.ListDataType"),proto.caosdb.entity.v1.DataType=function(e){r.Message.initialize(this,e,0,-1,null,proto.caosdb.entity.v1.DataType.oneofGroups_)},n.inherits(proto.caosdb.entity.v1.DataType,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.DataType.displayName="proto.caosdb.entity.v1.DataType"),proto.caosdb.entity.v1.CollectionValues=function(e){r.Message.initialize(this,e,0,-1,proto.caosdb.entity.v1.CollectionValues.repeatedFields_,null)},n.inherits(proto.caosdb.entity.v1.CollectionValues,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.CollectionValues.displayName="proto.caosdb.entity.v1.CollectionValues"),proto.caosdb.entity.v1.ScalarValue=function(e){r.Message.initialize(this,e,0,-1,null,proto.caosdb.entity.v1.ScalarValue.oneofGroups_)},n.inherits(proto.caosdb.entity.v1.ScalarValue,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.ScalarValue.displayName="proto.caosdb.entity.v1.ScalarValue"),proto.caosdb.entity.v1.Value=function(e){r.Message.initialize(this,e,0,-1,null,proto.caosdb.entity.v1.Value.oneofGroups_)},n.inherits(proto.caosdb.entity.v1.Value,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.Value.displayName="proto.caosdb.entity.v1.Value"),proto.caosdb.entity.v1.Message=function(e){r.Message.initialize(this,e,0,-1,null,null)},n.inherits(proto.caosdb.entity.v1.Message,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.Message.displayName="proto.caosdb.entity.v1.Message"),proto.caosdb.entity.v1.Version=function(e){r.Message.initialize(this,e,0,-1,null,null)},n.inherits(proto.caosdb.entity.v1.Version,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.Version.displayName="proto.caosdb.entity.v1.Version"),proto.caosdb.entity.v1.Entity=function(e){r.Message.initialize(this,e,0,-1,proto.caosdb.entity.v1.Entity.repeatedFields_,null)},n.inherits(proto.caosdb.entity.v1.Entity,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.Entity.displayName="proto.caosdb.entity.v1.Entity"),proto.caosdb.entity.v1.FileDescriptor=function(e){r.Message.initialize(this,e,0,-1,proto.caosdb.entity.v1.FileDescriptor.repeatedFields_,null)},n.inherits(proto.caosdb.entity.v1.FileDescriptor,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.FileDescriptor.displayName="proto.caosdb.entity.v1.FileDescriptor"),proto.caosdb.entity.v1.Hash=function(e){r.Message.initialize(this,e,0,-1,null,null)},n.inherits(proto.caosdb.entity.v1.Hash,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.Hash.displayName="proto.caosdb.entity.v1.Hash"),proto.caosdb.entity.v1.Property=function(e){r.Message.initialize(this,e,0,-1,proto.caosdb.entity.v1.Property.repeatedFields_,null)},n.inherits(proto.caosdb.entity.v1.Property,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.Property.displayName="proto.caosdb.entity.v1.Property"),proto.caosdb.entity.v1.Parent=function(e){r.Message.initialize(this,e,0,-1,proto.caosdb.entity.v1.Parent.repeatedFields_,null)},n.inherits(proto.caosdb.entity.v1.Parent,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.Parent.displayName="proto.caosdb.entity.v1.Parent"),proto.caosdb.entity.v1.EntityRequest=function(e){r.Message.initialize(this,e,0,-1,null,null)},n.inherits(proto.caosdb.entity.v1.EntityRequest,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.EntityRequest.displayName="proto.caosdb.entity.v1.EntityRequest"),proto.caosdb.entity.v1.EntityResponse=function(e){r.Message.initialize(this,e,0,-1,proto.caosdb.entity.v1.EntityResponse.repeatedFields_,null)},n.inherits(proto.caosdb.entity.v1.EntityResponse,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.EntityResponse.displayName="proto.caosdb.entity.v1.EntityResponse"),proto.caosdb.entity.v1.IdResponse=function(e){r.Message.initialize(this,e,0,-1,proto.caosdb.entity.v1.IdResponse.repeatedFields_,null)},n.inherits(proto.caosdb.entity.v1.IdResponse,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.IdResponse.displayName="proto.caosdb.entity.v1.IdResponse"),proto.caosdb.entity.v1.Query=function(e){r.Message.initialize(this,e,0,-1,null,null)},n.inherits(proto.caosdb.entity.v1.Query,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.Query.displayName="proto.caosdb.entity.v1.Query"),proto.caosdb.entity.v1.FindQueryResult=function(e){r.Message.initialize(this,e,0,-1,proto.caosdb.entity.v1.FindQueryResult.repeatedFields_,null)},n.inherits(proto.caosdb.entity.v1.FindQueryResult,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.FindQueryResult.displayName="proto.caosdb.entity.v1.FindQueryResult"),proto.caosdb.entity.v1.SelectQueryRow=function(e){r.Message.initialize(this,e,0,-1,proto.caosdb.entity.v1.SelectQueryRow.repeatedFields_,null)},n.inherits(proto.caosdb.entity.v1.SelectQueryRow,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.SelectQueryRow.displayName="proto.caosdb.entity.v1.SelectQueryRow"),proto.caosdb.entity.v1.SelectQueryColumn=function(e){r.Message.initialize(this,e,0,-1,null,null)},n.inherits(proto.caosdb.entity.v1.SelectQueryColumn,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.SelectQueryColumn.displayName="proto.caosdb.entity.v1.SelectQueryColumn"),proto.caosdb.entity.v1.SelectQueryHeader=function(e){r.Message.initialize(this,e,0,-1,proto.caosdb.entity.v1.SelectQueryHeader.repeatedFields_,null)},n.inherits(proto.caosdb.entity.v1.SelectQueryHeader,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.SelectQueryHeader.displayName="proto.caosdb.entity.v1.SelectQueryHeader"),proto.caosdb.entity.v1.SelectQueryResult=function(e){r.Message.initialize(this,e,0,-1,proto.caosdb.entity.v1.SelectQueryResult.repeatedFields_,null)},n.inherits(proto.caosdb.entity.v1.SelectQueryResult,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.SelectQueryResult.displayName="proto.caosdb.entity.v1.SelectQueryResult"),proto.caosdb.entity.v1.RetrieveRequest=function(e){r.Message.initialize(this,e,0,-1,null,proto.caosdb.entity.v1.RetrieveRequest.oneofGroups_)},n.inherits(proto.caosdb.entity.v1.RetrieveRequest,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.RetrieveRequest.displayName="proto.caosdb.entity.v1.RetrieveRequest"),proto.caosdb.entity.v1.RetrieveResponse=function(e){r.Message.initialize(this,e,0,-1,null,proto.caosdb.entity.v1.RetrieveResponse.oneofGroups_)},n.inherits(proto.caosdb.entity.v1.RetrieveResponse,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.RetrieveResponse.displayName="proto.caosdb.entity.v1.RetrieveResponse"),proto.caosdb.entity.v1.DeleteRequest=function(e){r.Message.initialize(this,e,0,-1,null,proto.caosdb.entity.v1.DeleteRequest.oneofGroups_)},n.inherits(proto.caosdb.entity.v1.DeleteRequest,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.DeleteRequest.displayName="proto.caosdb.entity.v1.DeleteRequest"),proto.caosdb.entity.v1.DeleteResponse=function(e){r.Message.initialize(this,e,0,-1,null,proto.caosdb.entity.v1.DeleteResponse.oneofGroups_)},n.inherits(proto.caosdb.entity.v1.DeleteResponse,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.DeleteResponse.displayName="proto.caosdb.entity.v1.DeleteResponse"),proto.caosdb.entity.v1.UpdateRequest=function(e){r.Message.initialize(this,e,0,-1,null,null)},n.inherits(proto.caosdb.entity.v1.UpdateRequest,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.UpdateRequest.displayName="proto.caosdb.entity.v1.UpdateRequest"),proto.caosdb.entity.v1.UpdateResponse=function(e){r.Message.initialize(this,e,0,-1,null,proto.caosdb.entity.v1.UpdateResponse.oneofGroups_)},n.inherits(proto.caosdb.entity.v1.UpdateResponse,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.UpdateResponse.displayName="proto.caosdb.entity.v1.UpdateResponse"),proto.caosdb.entity.v1.InsertRequest=function(e){r.Message.initialize(this,e,0,-1,null,null)},n.inherits(proto.caosdb.entity.v1.InsertRequest,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.InsertRequest.displayName="proto.caosdb.entity.v1.InsertRequest"),proto.caosdb.entity.v1.InsertResponse=function(e){r.Message.initialize(this,e,0,-1,null,proto.caosdb.entity.v1.InsertResponse.oneofGroups_)},n.inherits(proto.caosdb.entity.v1.InsertResponse,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.InsertResponse.displayName="proto.caosdb.entity.v1.InsertResponse"),proto.caosdb.entity.v1.TransactionRequest=function(e){r.Message.initialize(this,e,0,-1,null,proto.caosdb.entity.v1.TransactionRequest.oneofGroups_)},n.inherits(proto.caosdb.entity.v1.TransactionRequest,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.TransactionRequest.displayName="proto.caosdb.entity.v1.TransactionRequest"),proto.caosdb.entity.v1.TransactionResponse=function(e){r.Message.initialize(this,e,0,-1,null,proto.caosdb.entity.v1.TransactionResponse.oneofGroups_)},n.inherits(proto.caosdb.entity.v1.TransactionResponse,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.TransactionResponse.displayName="proto.caosdb.entity.v1.TransactionResponse"),proto.caosdb.entity.v1.MultiTransactionRequest=function(e){r.Message.initialize(this,e,0,-1,proto.caosdb.entity.v1.MultiTransactionRequest.repeatedFields_,null)},n.inherits(proto.caosdb.entity.v1.MultiTransactionRequest,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.MultiTransactionRequest.displayName="proto.caosdb.entity.v1.MultiTransactionRequest"),proto.caosdb.entity.v1.MultiTransactionResponse=function(e){r.Message.initialize(this,e,0,-1,proto.caosdb.entity.v1.MultiTransactionResponse.repeatedFields_,null)},n.inherits(proto.caosdb.entity.v1.MultiTransactionResponse,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.MultiTransactionResponse.displayName="proto.caosdb.entity.v1.MultiTransactionResponse"),proto.caosdb.entity.v1.MultiRetrieveEntityACLRequest=function(e){r.Message.initialize(this,e,0,-1,proto.caosdb.entity.v1.MultiRetrieveEntityACLRequest.repeatedFields_,null)},n.inherits(proto.caosdb.entity.v1.MultiRetrieveEntityACLRequest,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.MultiRetrieveEntityACLRequest.displayName="proto.caosdb.entity.v1.MultiRetrieveEntityACLRequest"),proto.caosdb.entity.v1.MultiRetrieveEntityACLResponse=function(e){r.Message.initialize(this,e,0,-1,proto.caosdb.entity.v1.MultiRetrieveEntityACLResponse.repeatedFields_,null)},n.inherits(proto.caosdb.entity.v1.MultiRetrieveEntityACLResponse,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.MultiRetrieveEntityACLResponse.displayName="proto.caosdb.entity.v1.MultiRetrieveEntityACLResponse"),proto.caosdb.entity.v1.MultiUpdateEntityACLRequest=function(e){r.Message.initialize(this,e,0,-1,proto.caosdb.entity.v1.MultiUpdateEntityACLRequest.repeatedFields_,null)},n.inherits(proto.caosdb.entity.v1.MultiUpdateEntityACLRequest,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.MultiUpdateEntityACLRequest.displayName="proto.caosdb.entity.v1.MultiUpdateEntityACLRequest"),proto.caosdb.entity.v1.MultiUpdateEntityACLResponse=function(e){r.Message.initialize(this,e,0,-1,null,null)},n.inherits(proto.caosdb.entity.v1.MultiUpdateEntityACLResponse,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.MultiUpdateEntityACLResponse.displayName="proto.caosdb.entity.v1.MultiUpdateEntityACLResponse"),proto.caosdb.entity.v1.EntityACL=function(e){r.Message.initialize(this,e,0,-1,proto.caosdb.entity.v1.EntityACL.repeatedFields_,null)},n.inherits(proto.caosdb.entity.v1.EntityACL,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.EntityACL.displayName="proto.caosdb.entity.v1.EntityACL"),proto.caosdb.entity.v1.EntityPermissionRule=function(e){r.Message.initialize(this,e,0,-1,proto.caosdb.entity.v1.EntityPermissionRule.repeatedFields_,null)},n.inherits(proto.caosdb.entity.v1.EntityPermissionRule,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.EntityPermissionRule.displayName="proto.caosdb.entity.v1.EntityPermissionRule"),proto.caosdb.entity.v1.FileChunk=function(e){r.Message.initialize(this,e,0,-1,null,null)},n.inherits(proto.caosdb.entity.v1.FileChunk,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.FileChunk.displayName="proto.caosdb.entity.v1.FileChunk"),proto.caosdb.entity.v1.FileTransmissionId=function(e){r.Message.initialize(this,e,0,-1,null,null)},n.inherits(proto.caosdb.entity.v1.FileTransmissionId,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.FileTransmissionId.displayName="proto.caosdb.entity.v1.FileTransmissionId"),proto.caosdb.entity.v1.FileTransmissionSettings=function(e){r.Message.initialize(this,e,0,-1,null,null)},n.inherits(proto.caosdb.entity.v1.FileTransmissionSettings,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.FileTransmissionSettings.displayName="proto.caosdb.entity.v1.FileTransmissionSettings"),proto.caosdb.entity.v1.RegisterFileUploadRequest=function(e){r.Message.initialize(this,e,0,-1,null,null)},n.inherits(proto.caosdb.entity.v1.RegisterFileUploadRequest,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.RegisterFileUploadRequest.displayName="proto.caosdb.entity.v1.RegisterFileUploadRequest"),proto.caosdb.entity.v1.RegisterFileUploadResponse=function(e){r.Message.initialize(this,e,0,-1,null,null)},n.inherits(proto.caosdb.entity.v1.RegisterFileUploadResponse,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.RegisterFileUploadResponse.displayName="proto.caosdb.entity.v1.RegisterFileUploadResponse"),proto.caosdb.entity.v1.FileUploadRequest=function(e){r.Message.initialize(this,e,0,-1,null,null)},n.inherits(proto.caosdb.entity.v1.FileUploadRequest,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.FileUploadRequest.displayName="proto.caosdb.entity.v1.FileUploadRequest"),proto.caosdb.entity.v1.FileUploadResponse=function(e){r.Message.initialize(this,e,0,-1,null,null)},n.inherits(proto.caosdb.entity.v1.FileUploadResponse,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.FileUploadResponse.displayName="proto.caosdb.entity.v1.FileUploadResponse"),proto.caosdb.entity.v1.FileDownloadRequest=function(e){r.Message.initialize(this,e,0,-1,null,null)},n.inherits(proto.caosdb.entity.v1.FileDownloadRequest,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.FileDownloadRequest.displayName="proto.caosdb.entity.v1.FileDownloadRequest"),proto.caosdb.entity.v1.FileDownloadResponse=function(e){r.Message.initialize(this,e,0,-1,null,null)},n.inherits(proto.caosdb.entity.v1.FileDownloadResponse,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.FileDownloadResponse.displayName="proto.caosdb.entity.v1.FileDownloadResponse"),r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.ReferenceDataType.prototype.toObject=function(e){return proto.caosdb.entity.v1.ReferenceDataType.toObject(e,this)},proto.caosdb.entity.v1.ReferenceDataType.toObject=function(e,t){var o={name:r.Message.getFieldWithDefault(t,1,"")};return e&&(o.$jspbMessageInstance=t),o}),proto.caosdb.entity.v1.ReferenceDataType.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.ReferenceDataType;return proto.caosdb.entity.v1.ReferenceDataType.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.ReferenceDataType.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)if(1===t.getFieldNumber()){var o=t.readString();e.setName(o)}else t.skipField();return e},proto.caosdb.entity.v1.ReferenceDataType.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.ReferenceDataType.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.ReferenceDataType.serializeBinaryToWriter=function(e,t){var o;(o=e.getName()).length>0&&t.writeString(1,o)},proto.caosdb.entity.v1.ReferenceDataType.prototype.getName=function(){return r.Message.getFieldWithDefault(this,1,"")},proto.caosdb.entity.v1.ReferenceDataType.prototype.setName=function(e){return r.Message.setProto3StringField(this,1,e)},proto.caosdb.entity.v1.ListDataType.oneofGroups_=[[1,2]],proto.caosdb.entity.v1.ListDataType.ListDataTypeCase={LIST_DATA_TYPE_NOT_SET:0,ATOMIC_DATA_TYPE:1,REFERENCE_DATA_TYPE:2},proto.caosdb.entity.v1.ListDataType.prototype.getListDataTypeCase=function(){return r.Message.computeOneofCase(this,proto.caosdb.entity.v1.ListDataType.oneofGroups_[0])},r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.ListDataType.prototype.toObject=function(e){return proto.caosdb.entity.v1.ListDataType.toObject(e,this)},proto.caosdb.entity.v1.ListDataType.toObject=function(e,t){var o,n={atomicDataType:r.Message.getFieldWithDefault(t,1,0),referenceDataType:(o=t.getReferenceDataType())&&proto.caosdb.entity.v1.ReferenceDataType.toObject(e,o)};return e&&(n.$jspbMessageInstance=t),n}),proto.caosdb.entity.v1.ListDataType.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.ListDataType;return proto.caosdb.entity.v1.ListDataType.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.ListDataType.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)switch(t.getFieldNumber()){case 1:var o=t.readEnum();e.setAtomicDataType(o);break;case 2:o=new proto.caosdb.entity.v1.ReferenceDataType,t.readMessage(o,proto.caosdb.entity.v1.ReferenceDataType.deserializeBinaryFromReader),e.setReferenceDataType(o);break;default:t.skipField()}return e},proto.caosdb.entity.v1.ListDataType.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.ListDataType.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.ListDataType.serializeBinaryToWriter=function(e,t){var o=void 0;null!=(o=r.Message.getField(e,1))&&t.writeEnum(1,o),null!=(o=e.getReferenceDataType())&&t.writeMessage(2,o,proto.caosdb.entity.v1.ReferenceDataType.serializeBinaryToWriter)},proto.caosdb.entity.v1.ListDataType.prototype.getAtomicDataType=function(){return r.Message.getFieldWithDefault(this,1,0)},proto.caosdb.entity.v1.ListDataType.prototype.setAtomicDataType=function(e){return r.Message.setOneofField(this,1,proto.caosdb.entity.v1.ListDataType.oneofGroups_[0],e)},proto.caosdb.entity.v1.ListDataType.prototype.clearAtomicDataType=function(){return r.Message.setOneofField(this,1,proto.caosdb.entity.v1.ListDataType.oneofGroups_[0],void 0)},proto.caosdb.entity.v1.ListDataType.prototype.hasAtomicDataType=function(){return null!=r.Message.getField(this,1)},proto.caosdb.entity.v1.ListDataType.prototype.getReferenceDataType=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.ReferenceDataType,2)},proto.caosdb.entity.v1.ListDataType.prototype.setReferenceDataType=function(e){return r.Message.setOneofWrapperField(this,2,proto.caosdb.entity.v1.ListDataType.oneofGroups_[0],e)},proto.caosdb.entity.v1.ListDataType.prototype.clearReferenceDataType=function(){return this.setReferenceDataType(void 0)},proto.caosdb.entity.v1.ListDataType.prototype.hasReferenceDataType=function(){return null!=r.Message.getField(this,2)},proto.caosdb.entity.v1.DataType.oneofGroups_=[[1,2,3]],proto.caosdb.entity.v1.DataType.DataTypeCase={DATA_TYPE_NOT_SET:0,ATOMIC_DATA_TYPE:1,LIST_DATA_TYPE:2,REFERENCE_DATA_TYPE:3},proto.caosdb.entity.v1.DataType.prototype.getDataTypeCase=function(){return r.Message.computeOneofCase(this,proto.caosdb.entity.v1.DataType.oneofGroups_[0])},r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.DataType.prototype.toObject=function(e){return proto.caosdb.entity.v1.DataType.toObject(e,this)},proto.caosdb.entity.v1.DataType.toObject=function(e,t){var o,n={atomicDataType:r.Message.getFieldWithDefault(t,1,0),listDataType:(o=t.getListDataType())&&proto.caosdb.entity.v1.ListDataType.toObject(e,o),referenceDataType:(o=t.getReferenceDataType())&&proto.caosdb.entity.v1.ReferenceDataType.toObject(e,o)};return e&&(n.$jspbMessageInstance=t),n}),proto.caosdb.entity.v1.DataType.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.DataType;return proto.caosdb.entity.v1.DataType.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.DataType.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)switch(t.getFieldNumber()){case 1:var o=t.readEnum();e.setAtomicDataType(o);break;case 2:o=new proto.caosdb.entity.v1.ListDataType,t.readMessage(o,proto.caosdb.entity.v1.ListDataType.deserializeBinaryFromReader),e.setListDataType(o);break;case 3:o=new proto.caosdb.entity.v1.ReferenceDataType,t.readMessage(o,proto.caosdb.entity.v1.ReferenceDataType.deserializeBinaryFromReader),e.setReferenceDataType(o);break;default:t.skipField()}return e},proto.caosdb.entity.v1.DataType.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.DataType.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.DataType.serializeBinaryToWriter=function(e,t){var o=void 0;null!=(o=r.Message.getField(e,1))&&t.writeEnum(1,o),null!=(o=e.getListDataType())&&t.writeMessage(2,o,proto.caosdb.entity.v1.ListDataType.serializeBinaryToWriter),null!=(o=e.getReferenceDataType())&&t.writeMessage(3,o,proto.caosdb.entity.v1.ReferenceDataType.serializeBinaryToWriter)},proto.caosdb.entity.v1.DataType.prototype.getAtomicDataType=function(){return r.Message.getFieldWithDefault(this,1,0)},proto.caosdb.entity.v1.DataType.prototype.setAtomicDataType=function(e){return r.Message.setOneofField(this,1,proto.caosdb.entity.v1.DataType.oneofGroups_[0],e)},proto.caosdb.entity.v1.DataType.prototype.clearAtomicDataType=function(){return r.Message.setOneofField(this,1,proto.caosdb.entity.v1.DataType.oneofGroups_[0],void 0)},proto.caosdb.entity.v1.DataType.prototype.hasAtomicDataType=function(){return null!=r.Message.getField(this,1)},proto.caosdb.entity.v1.DataType.prototype.getListDataType=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.ListDataType,2)},proto.caosdb.entity.v1.DataType.prototype.setListDataType=function(e){return r.Message.setOneofWrapperField(this,2,proto.caosdb.entity.v1.DataType.oneofGroups_[0],e)},proto.caosdb.entity.v1.DataType.prototype.clearListDataType=function(){return this.setListDataType(void 0)},proto.caosdb.entity.v1.DataType.prototype.hasListDataType=function(){return null!=r.Message.getField(this,2)},proto.caosdb.entity.v1.DataType.prototype.getReferenceDataType=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.ReferenceDataType,3)},proto.caosdb.entity.v1.DataType.prototype.setReferenceDataType=function(e){return r.Message.setOneofWrapperField(this,3,proto.caosdb.entity.v1.DataType.oneofGroups_[0],e)},proto.caosdb.entity.v1.DataType.prototype.clearReferenceDataType=function(){return this.setReferenceDataType(void 0)},proto.caosdb.entity.v1.DataType.prototype.hasReferenceDataType=function(){return null!=r.Message.getField(this,3)},proto.caosdb.entity.v1.CollectionValues.repeatedFields_=[1],r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.CollectionValues.prototype.toObject=function(e){return proto.caosdb.entity.v1.CollectionValues.toObject(e,this)},proto.caosdb.entity.v1.CollectionValues.toObject=function(e,t){var o={valuesList:r.Message.toObjectList(t.getValuesList(),proto.caosdb.entity.v1.ScalarValue.toObject,e)};return e&&(o.$jspbMessageInstance=t),o}),proto.caosdb.entity.v1.CollectionValues.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.CollectionValues;return proto.caosdb.entity.v1.CollectionValues.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.CollectionValues.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)if(1===t.getFieldNumber()){var o=new proto.caosdb.entity.v1.ScalarValue;t.readMessage(o,proto.caosdb.entity.v1.ScalarValue.deserializeBinaryFromReader),e.addValues(o)}else t.skipField();return e},proto.caosdb.entity.v1.CollectionValues.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.CollectionValues.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.CollectionValues.serializeBinaryToWriter=function(e,t){var o;(o=e.getValuesList()).length>0&&t.writeRepeatedMessage(1,o,proto.caosdb.entity.v1.ScalarValue.serializeBinaryToWriter)},proto.caosdb.entity.v1.CollectionValues.prototype.getValuesList=function(){return r.Message.getRepeatedWrapperField(this,proto.caosdb.entity.v1.ScalarValue,1)},proto.caosdb.entity.v1.CollectionValues.prototype.setValuesList=function(e){return r.Message.setRepeatedWrapperField(this,1,e)},proto.caosdb.entity.v1.CollectionValues.prototype.addValues=function(e,t){return r.Message.addToRepeatedWrapperField(this,1,e,proto.caosdb.entity.v1.ScalarValue,t)},proto.caosdb.entity.v1.CollectionValues.prototype.clearValuesList=function(){return this.setValuesList([])},proto.caosdb.entity.v1.ScalarValue.oneofGroups_=[[1,2,3,4,5]],proto.caosdb.entity.v1.ScalarValue.ScalarValueCase={SCALAR_VALUE_NOT_SET:0,INTEGER_VALUE:1,DOUBLE_VALUE:2,BOOLEAN_VALUE:3,STRING_VALUE:4,SPECIAL_VALUE:5},proto.caosdb.entity.v1.ScalarValue.prototype.getScalarValueCase=function(){return r.Message.computeOneofCase(this,proto.caosdb.entity.v1.ScalarValue.oneofGroups_[0])},r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.ScalarValue.prototype.toObject=function(e){return proto.caosdb.entity.v1.ScalarValue.toObject(e,this)},proto.caosdb.entity.v1.ScalarValue.toObject=function(e,t){var o={integerValue:r.Message.getFieldWithDefault(t,1,0),doubleValue:r.Message.getFloatingPointFieldWithDefault(t,2,0),booleanValue:r.Message.getBooleanFieldWithDefault(t,3,!1),stringValue:r.Message.getFieldWithDefault(t,4,""),specialValue:r.Message.getFieldWithDefault(t,5,0)};return e&&(o.$jspbMessageInstance=t),o}),proto.caosdb.entity.v1.ScalarValue.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.ScalarValue;return proto.caosdb.entity.v1.ScalarValue.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.ScalarValue.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)switch(t.getFieldNumber()){case 1:var o=t.readInt64();e.setIntegerValue(o);break;case 2:o=t.readDouble(),e.setDoubleValue(o);break;case 3:o=t.readBool(),e.setBooleanValue(o);break;case 4:o=t.readString(),e.setStringValue(o);break;case 5:o=t.readEnum(),e.setSpecialValue(o);break;default:t.skipField()}return e},proto.caosdb.entity.v1.ScalarValue.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.ScalarValue.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.ScalarValue.serializeBinaryToWriter=function(e,t){var o=void 0;null!=(o=r.Message.getField(e,1))&&t.writeInt64(1,o),null!=(o=r.Message.getField(e,2))&&t.writeDouble(2,o),null!=(o=r.Message.getField(e,3))&&t.writeBool(3,o),null!=(o=r.Message.getField(e,4))&&t.writeString(4,o),null!=(o=r.Message.getField(e,5))&&t.writeEnum(5,o)},proto.caosdb.entity.v1.ScalarValue.prototype.getIntegerValue=function(){return r.Message.getFieldWithDefault(this,1,0)},proto.caosdb.entity.v1.ScalarValue.prototype.setIntegerValue=function(e){return r.Message.setOneofField(this,1,proto.caosdb.entity.v1.ScalarValue.oneofGroups_[0],e)},proto.caosdb.entity.v1.ScalarValue.prototype.clearIntegerValue=function(){return r.Message.setOneofField(this,1,proto.caosdb.entity.v1.ScalarValue.oneofGroups_[0],void 0)},proto.caosdb.entity.v1.ScalarValue.prototype.hasIntegerValue=function(){return null!=r.Message.getField(this,1)},proto.caosdb.entity.v1.ScalarValue.prototype.getDoubleValue=function(){return r.Message.getFloatingPointFieldWithDefault(this,2,0)},proto.caosdb.entity.v1.ScalarValue.prototype.setDoubleValue=function(e){return r.Message.setOneofField(this,2,proto.caosdb.entity.v1.ScalarValue.oneofGroups_[0],e)},proto.caosdb.entity.v1.ScalarValue.prototype.clearDoubleValue=function(){return r.Message.setOneofField(this,2,proto.caosdb.entity.v1.ScalarValue.oneofGroups_[0],void 0)},proto.caosdb.entity.v1.ScalarValue.prototype.hasDoubleValue=function(){return null!=r.Message.getField(this,2)},proto.caosdb.entity.v1.ScalarValue.prototype.getBooleanValue=function(){return r.Message.getBooleanFieldWithDefault(this,3,!1)},proto.caosdb.entity.v1.ScalarValue.prototype.setBooleanValue=function(e){return r.Message.setOneofField(this,3,proto.caosdb.entity.v1.ScalarValue.oneofGroups_[0],e)},proto.caosdb.entity.v1.ScalarValue.prototype.clearBooleanValue=function(){return r.Message.setOneofField(this,3,proto.caosdb.entity.v1.ScalarValue.oneofGroups_[0],void 0)},proto.caosdb.entity.v1.ScalarValue.prototype.hasBooleanValue=function(){return null!=r.Message.getField(this,3)},proto.caosdb.entity.v1.ScalarValue.prototype.getStringValue=function(){return r.Message.getFieldWithDefault(this,4,"")},proto.caosdb.entity.v1.ScalarValue.prototype.setStringValue=function(e){return r.Message.setOneofField(this,4,proto.caosdb.entity.v1.ScalarValue.oneofGroups_[0],e)},proto.caosdb.entity.v1.ScalarValue.prototype.clearStringValue=function(){return r.Message.setOneofField(this,4,proto.caosdb.entity.v1.ScalarValue.oneofGroups_[0],void 0)},proto.caosdb.entity.v1.ScalarValue.prototype.hasStringValue=function(){return null!=r.Message.getField(this,4)},proto.caosdb.entity.v1.ScalarValue.prototype.getSpecialValue=function(){return r.Message.getFieldWithDefault(this,5,0)},proto.caosdb.entity.v1.ScalarValue.prototype.setSpecialValue=function(e){return r.Message.setOneofField(this,5,proto.caosdb.entity.v1.ScalarValue.oneofGroups_[0],e)},proto.caosdb.entity.v1.ScalarValue.prototype.clearSpecialValue=function(){return r.Message.setOneofField(this,5,proto.caosdb.entity.v1.ScalarValue.oneofGroups_[0],void 0)},proto.caosdb.entity.v1.ScalarValue.prototype.hasSpecialValue=function(){return null!=r.Message.getField(this,5)},proto.caosdb.entity.v1.Value.oneofGroups_=[[1,2]],proto.caosdb.entity.v1.Value.ValueCase={VALUE_NOT_SET:0,SCALAR_VALUE:1,LIST_VALUES:2},proto.caosdb.entity.v1.Value.prototype.getValueCase=function(){return r.Message.computeOneofCase(this,proto.caosdb.entity.v1.Value.oneofGroups_[0])},r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.Value.prototype.toObject=function(e){return proto.caosdb.entity.v1.Value.toObject(e,this)},proto.caosdb.entity.v1.Value.toObject=function(e,t){var o,r={scalarValue:(o=t.getScalarValue())&&proto.caosdb.entity.v1.ScalarValue.toObject(e,o),listValues:(o=t.getListValues())&&proto.caosdb.entity.v1.CollectionValues.toObject(e,o)};return e&&(r.$jspbMessageInstance=t),r}),proto.caosdb.entity.v1.Value.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.Value;return proto.caosdb.entity.v1.Value.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.Value.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)switch(t.getFieldNumber()){case 1:var o=new proto.caosdb.entity.v1.ScalarValue;t.readMessage(o,proto.caosdb.entity.v1.ScalarValue.deserializeBinaryFromReader),e.setScalarValue(o);break;case 2:o=new proto.caosdb.entity.v1.CollectionValues,t.readMessage(o,proto.caosdb.entity.v1.CollectionValues.deserializeBinaryFromReader),e.setListValues(o);break;default:t.skipField()}return e},proto.caosdb.entity.v1.Value.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.Value.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.Value.serializeBinaryToWriter=function(e,t){var o=void 0;null!=(o=e.getScalarValue())&&t.writeMessage(1,o,proto.caosdb.entity.v1.ScalarValue.serializeBinaryToWriter),null!=(o=e.getListValues())&&t.writeMessage(2,o,proto.caosdb.entity.v1.CollectionValues.serializeBinaryToWriter)},proto.caosdb.entity.v1.Value.prototype.getScalarValue=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.ScalarValue,1)},proto.caosdb.entity.v1.Value.prototype.setScalarValue=function(e){return r.Message.setOneofWrapperField(this,1,proto.caosdb.entity.v1.Value.oneofGroups_[0],e)},proto.caosdb.entity.v1.Value.prototype.clearScalarValue=function(){return this.setScalarValue(void 0)},proto.caosdb.entity.v1.Value.prototype.hasScalarValue=function(){return null!=r.Message.getField(this,1)},proto.caosdb.entity.v1.Value.prototype.getListValues=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.CollectionValues,2)},proto.caosdb.entity.v1.Value.prototype.setListValues=function(e){return r.Message.setOneofWrapperField(this,2,proto.caosdb.entity.v1.Value.oneofGroups_[0],e)},proto.caosdb.entity.v1.Value.prototype.clearListValues=function(){return this.setListValues(void 0)},proto.caosdb.entity.v1.Value.prototype.hasListValues=function(){return null!=r.Message.getField(this,2)},r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.Message.prototype.toObject=function(e){return proto.caosdb.entity.v1.Message.toObject(e,this)},proto.caosdb.entity.v1.Message.toObject=function(e,t){var o={code:r.Message.getFieldWithDefault(t,1,0),description:r.Message.getFieldWithDefault(t,2,"")};return e&&(o.$jspbMessageInstance=t),o}),proto.caosdb.entity.v1.Message.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.Message;return proto.caosdb.entity.v1.Message.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.Message.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)switch(t.getFieldNumber()){case 1:var o=t.readInt32();e.setCode(o);break;case 2:o=t.readString(),e.setDescription(o);break;default:t.skipField()}return e},proto.caosdb.entity.v1.Message.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.Message.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.Message.serializeBinaryToWriter=function(e,t){var o=void 0;0!==(o=e.getCode())&&t.writeInt32(1,o),(o=e.getDescription()).length>0&&t.writeString(2,o)},proto.caosdb.entity.v1.Message.prototype.getCode=function(){return r.Message.getFieldWithDefault(this,1,0)},proto.caosdb.entity.v1.Message.prototype.setCode=function(e){return r.Message.setProto3IntField(this,1,e)},proto.caosdb.entity.v1.Message.prototype.getDescription=function(){return r.Message.getFieldWithDefault(this,2,"")},proto.caosdb.entity.v1.Message.prototype.setDescription=function(e){return r.Message.setProto3StringField(this,2,e)},r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.Version.prototype.toObject=function(e){return proto.caosdb.entity.v1.Version.toObject(e,this)},proto.caosdb.entity.v1.Version.toObject=function(e,t){var o={id:r.Message.getFieldWithDefault(t,1,"")};return e&&(o.$jspbMessageInstance=t),o}),proto.caosdb.entity.v1.Version.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.Version;return proto.caosdb.entity.v1.Version.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.Version.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)if(1===t.getFieldNumber()){var o=t.readString();e.setId(o)}else t.skipField();return e},proto.caosdb.entity.v1.Version.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.Version.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.Version.serializeBinaryToWriter=function(e,t){var o;(o=e.getId()).length>0&&t.writeString(1,o)},proto.caosdb.entity.v1.Version.prototype.getId=function(){return r.Message.getFieldWithDefault(this,1,"")},proto.caosdb.entity.v1.Version.prototype.setId=function(e){return r.Message.setProto3StringField(this,1,e)},proto.caosdb.entity.v1.Entity.repeatedFields_=[9,10],r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.Entity.prototype.toObject=function(e){return proto.caosdb.entity.v1.Entity.toObject(e,this)},proto.caosdb.entity.v1.Entity.toObject=function(e,t){var o,n={id:r.Message.getFieldWithDefault(t,1,""),name:r.Message.getFieldWithDefault(t,2,""),description:r.Message.getFieldWithDefault(t,3,""),version:(o=t.getVersion())&&proto.caosdb.entity.v1.Version.toObject(e,o),role:r.Message.getFieldWithDefault(t,5,0),unit:r.Message.getFieldWithDefault(t,6,""),dataType:(o=t.getDataType())&&proto.caosdb.entity.v1.DataType.toObject(e,o),value:(o=t.getValue())&&proto.caosdb.entity.v1.Value.toObject(e,o),propertiesList:r.Message.toObjectList(t.getPropertiesList(),proto.caosdb.entity.v1.Property.toObject,e),parentsList:r.Message.toObjectList(t.getParentsList(),proto.caosdb.entity.v1.Parent.toObject,e),fileDescriptor:(o=t.getFileDescriptor())&&proto.caosdb.entity.v1.FileDescriptor.toObject(e,o)};return e&&(n.$jspbMessageInstance=t),n}),proto.caosdb.entity.v1.Entity.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.Entity;return proto.caosdb.entity.v1.Entity.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.Entity.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)switch(t.getFieldNumber()){case 1:var o=t.readString();e.setId(o);break;case 2:o=t.readString(),e.setName(o);break;case 3:o=t.readString(),e.setDescription(o);break;case 4:o=new proto.caosdb.entity.v1.Version,t.readMessage(o,proto.caosdb.entity.v1.Version.deserializeBinaryFromReader),e.setVersion(o);break;case 5:o=t.readEnum(),e.setRole(o);break;case 6:o=t.readString(),e.setUnit(o);break;case 7:o=new proto.caosdb.entity.v1.DataType,t.readMessage(o,proto.caosdb.entity.v1.DataType.deserializeBinaryFromReader),e.setDataType(o);break;case 8:o=new proto.caosdb.entity.v1.Value,t.readMessage(o,proto.caosdb.entity.v1.Value.deserializeBinaryFromReader),e.setValue(o);break;case 9:o=new proto.caosdb.entity.v1.Property,t.readMessage(o,proto.caosdb.entity.v1.Property.deserializeBinaryFromReader),e.addProperties(o);break;case 10:o=new proto.caosdb.entity.v1.Parent,t.readMessage(o,proto.caosdb.entity.v1.Parent.deserializeBinaryFromReader),e.addParents(o);break;case 14:o=new proto.caosdb.entity.v1.FileDescriptor,t.readMessage(o,proto.caosdb.entity.v1.FileDescriptor.deserializeBinaryFromReader),e.setFileDescriptor(o);break;default:t.skipField()}return e},proto.caosdb.entity.v1.Entity.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.Entity.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.Entity.serializeBinaryToWriter=function(e,t){var o=void 0;(o=e.getId()).length>0&&t.writeString(1,o),(o=e.getName()).length>0&&t.writeString(2,o),(o=e.getDescription()).length>0&&t.writeString(3,o),null!=(o=e.getVersion())&&t.writeMessage(4,o,proto.caosdb.entity.v1.Version.serializeBinaryToWriter),0!==(o=e.getRole())&&t.writeEnum(5,o),(o=e.getUnit()).length>0&&t.writeString(6,o),null!=(o=e.getDataType())&&t.writeMessage(7,o,proto.caosdb.entity.v1.DataType.serializeBinaryToWriter),null!=(o=e.getValue())&&t.writeMessage(8,o,proto.caosdb.entity.v1.Value.serializeBinaryToWriter),(o=e.getPropertiesList()).length>0&&t.writeRepeatedMessage(9,o,proto.caosdb.entity.v1.Property.serializeBinaryToWriter),(o=e.getParentsList()).length>0&&t.writeRepeatedMessage(10,o,proto.caosdb.entity.v1.Parent.serializeBinaryToWriter),null!=(o=e.getFileDescriptor())&&t.writeMessage(14,o,proto.caosdb.entity.v1.FileDescriptor.serializeBinaryToWriter)},proto.caosdb.entity.v1.Entity.prototype.getId=function(){return r.Message.getFieldWithDefault(this,1,"")},proto.caosdb.entity.v1.Entity.prototype.setId=function(e){return r.Message.setProto3StringField(this,1,e)},proto.caosdb.entity.v1.Entity.prototype.getName=function(){return r.Message.getFieldWithDefault(this,2,"")},proto.caosdb.entity.v1.Entity.prototype.setName=function(e){return r.Message.setProto3StringField(this,2,e)},proto.caosdb.entity.v1.Entity.prototype.getDescription=function(){return r.Message.getFieldWithDefault(this,3,"")},proto.caosdb.entity.v1.Entity.prototype.setDescription=function(e){return r.Message.setProto3StringField(this,3,e)},proto.caosdb.entity.v1.Entity.prototype.getVersion=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.Version,4)},proto.caosdb.entity.v1.Entity.prototype.setVersion=function(e){return r.Message.setWrapperField(this,4,e)},proto.caosdb.entity.v1.Entity.prototype.clearVersion=function(){return this.setVersion(void 0)},proto.caosdb.entity.v1.Entity.prototype.hasVersion=function(){return null!=r.Message.getField(this,4)},proto.caosdb.entity.v1.Entity.prototype.getRole=function(){return r.Message.getFieldWithDefault(this,5,0)},proto.caosdb.entity.v1.Entity.prototype.setRole=function(e){return r.Message.setProto3EnumField(this,5,e)},proto.caosdb.entity.v1.Entity.prototype.getUnit=function(){return r.Message.getFieldWithDefault(this,6,"")},proto.caosdb.entity.v1.Entity.prototype.setUnit=function(e){return r.Message.setProto3StringField(this,6,e)},proto.caosdb.entity.v1.Entity.prototype.getDataType=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.DataType,7)},proto.caosdb.entity.v1.Entity.prototype.setDataType=function(e){return r.Message.setWrapperField(this,7,e)},proto.caosdb.entity.v1.Entity.prototype.clearDataType=function(){return this.setDataType(void 0)},proto.caosdb.entity.v1.Entity.prototype.hasDataType=function(){return null!=r.Message.getField(this,7)},proto.caosdb.entity.v1.Entity.prototype.getValue=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.Value,8)},proto.caosdb.entity.v1.Entity.prototype.setValue=function(e){return r.Message.setWrapperField(this,8,e)},proto.caosdb.entity.v1.Entity.prototype.clearValue=function(){return this.setValue(void 0)},proto.caosdb.entity.v1.Entity.prototype.hasValue=function(){return null!=r.Message.getField(this,8)},proto.caosdb.entity.v1.Entity.prototype.getPropertiesList=function(){return r.Message.getRepeatedWrapperField(this,proto.caosdb.entity.v1.Property,9)},proto.caosdb.entity.v1.Entity.prototype.setPropertiesList=function(e){return r.Message.setRepeatedWrapperField(this,9,e)},proto.caosdb.entity.v1.Entity.prototype.addProperties=function(e,t){return r.Message.addToRepeatedWrapperField(this,9,e,proto.caosdb.entity.v1.Property,t)},proto.caosdb.entity.v1.Entity.prototype.clearPropertiesList=function(){return this.setPropertiesList([])},proto.caosdb.entity.v1.Entity.prototype.getParentsList=function(){return r.Message.getRepeatedWrapperField(this,proto.caosdb.entity.v1.Parent,10)},proto.caosdb.entity.v1.Entity.prototype.setParentsList=function(e){return r.Message.setRepeatedWrapperField(this,10,e)},proto.caosdb.entity.v1.Entity.prototype.addParents=function(e,t){return r.Message.addToRepeatedWrapperField(this,10,e,proto.caosdb.entity.v1.Parent,t)},proto.caosdb.entity.v1.Entity.prototype.clearParentsList=function(){return this.setParentsList([])},proto.caosdb.entity.v1.Entity.prototype.getFileDescriptor=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.FileDescriptor,14)},proto.caosdb.entity.v1.Entity.prototype.setFileDescriptor=function(e){return r.Message.setWrapperField(this,14,e)},proto.caosdb.entity.v1.Entity.prototype.clearFileDescriptor=function(){return this.setFileDescriptor(void 0)},proto.caosdb.entity.v1.Entity.prototype.hasFileDescriptor=function(){return null!=r.Message.getField(this,14)},proto.caosdb.entity.v1.FileDescriptor.repeatedFields_=[4],r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.FileDescriptor.prototype.toObject=function(e){return proto.caosdb.entity.v1.FileDescriptor.toObject(e,this)},proto.caosdb.entity.v1.FileDescriptor.toObject=function(e,t){var o={entityId:r.Message.getFieldWithDefault(t,1,""),path:r.Message.getFieldWithDefault(t,2,""),size:r.Message.getFieldWithDefault(t,3,0),hashesList:r.Message.toObjectList(t.getHashesList(),proto.caosdb.entity.v1.Hash.toObject,e)};return e&&(o.$jspbMessageInstance=t),o}),proto.caosdb.entity.v1.FileDescriptor.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.FileDescriptor;return proto.caosdb.entity.v1.FileDescriptor.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.FileDescriptor.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)switch(t.getFieldNumber()){case 1:var o=t.readString();e.setEntityId(o);break;case 2:o=t.readString(),e.setPath(o);break;case 3:o=t.readInt64(),e.setSize(o);break;case 4:o=new proto.caosdb.entity.v1.Hash,t.readMessage(o,proto.caosdb.entity.v1.Hash.deserializeBinaryFromReader),e.addHashes(o);break;default:t.skipField()}return e},proto.caosdb.entity.v1.FileDescriptor.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.FileDescriptor.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.FileDescriptor.serializeBinaryToWriter=function(e,t){var o=void 0;(o=e.getEntityId()).length>0&&t.writeString(1,o),(o=e.getPath()).length>0&&t.writeString(2,o),0!==(o=e.getSize())&&t.writeInt64(3,o),(o=e.getHashesList()).length>0&&t.writeRepeatedMessage(4,o,proto.caosdb.entity.v1.Hash.serializeBinaryToWriter)},proto.caosdb.entity.v1.FileDescriptor.prototype.getEntityId=function(){return r.Message.getFieldWithDefault(this,1,"")},proto.caosdb.entity.v1.FileDescriptor.prototype.setEntityId=function(e){return r.Message.setProto3StringField(this,1,e)},proto.caosdb.entity.v1.FileDescriptor.prototype.getPath=function(){return r.Message.getFieldWithDefault(this,2,"")},proto.caosdb.entity.v1.FileDescriptor.prototype.setPath=function(e){return r.Message.setProto3StringField(this,2,e)},proto.caosdb.entity.v1.FileDescriptor.prototype.getSize=function(){return r.Message.getFieldWithDefault(this,3,0)},proto.caosdb.entity.v1.FileDescriptor.prototype.setSize=function(e){return r.Message.setProto3IntField(this,3,e)},proto.caosdb.entity.v1.FileDescriptor.prototype.getHashesList=function(){return r.Message.getRepeatedWrapperField(this,proto.caosdb.entity.v1.Hash,4)},proto.caosdb.entity.v1.FileDescriptor.prototype.setHashesList=function(e){return r.Message.setRepeatedWrapperField(this,4,e)},proto.caosdb.entity.v1.FileDescriptor.prototype.addHashes=function(e,t){return r.Message.addToRepeatedWrapperField(this,4,e,proto.caosdb.entity.v1.Hash,t)},proto.caosdb.entity.v1.FileDescriptor.prototype.clearHashesList=function(){return this.setHashesList([])},r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.Hash.prototype.toObject=function(e){return proto.caosdb.entity.v1.Hash.toObject(e,this)},proto.caosdb.entity.v1.Hash.toObject=function(e,t){var o={algorithm:r.Message.getFieldWithDefault(t,1,""),value:r.Message.getFieldWithDefault(t,2,"")};return e&&(o.$jspbMessageInstance=t),o}),proto.caosdb.entity.v1.Hash.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.Hash;return proto.caosdb.entity.v1.Hash.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.Hash.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)switch(t.getFieldNumber()){case 1:var o=t.readString();e.setAlgorithm(o);break;case 2:o=t.readString(),e.setValue(o);break;default:t.skipField()}return e},proto.caosdb.entity.v1.Hash.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.Hash.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.Hash.serializeBinaryToWriter=function(e,t){var o=void 0;(o=e.getAlgorithm()).length>0&&t.writeString(1,o),(o=e.getValue()).length>0&&t.writeString(2,o)},proto.caosdb.entity.v1.Hash.prototype.getAlgorithm=function(){return r.Message.getFieldWithDefault(this,1,"")},proto.caosdb.entity.v1.Hash.prototype.setAlgorithm=function(e){return r.Message.setProto3StringField(this,1,e)},proto.caosdb.entity.v1.Hash.prototype.getValue=function(){return r.Message.getFieldWithDefault(this,2,"")},proto.caosdb.entity.v1.Hash.prototype.setValue=function(e){return r.Message.setProto3StringField(this,2,e)},proto.caosdb.entity.v1.Property.repeatedFields_=[8,9,10],r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.Property.prototype.toObject=function(e){return proto.caosdb.entity.v1.Property.toObject(e,this)},proto.caosdb.entity.v1.Property.toObject=function(e,t){var o,n={id:r.Message.getFieldWithDefault(t,1,""),name:r.Message.getFieldWithDefault(t,2,""),description:r.Message.getFieldWithDefault(t,3,""),value:(o=t.getValue())&&proto.caosdb.entity.v1.Value.toObject(e,o),importance:r.Message.getFieldWithDefault(t,5,0),unit:r.Message.getFieldWithDefault(t,6,""),dataType:(o=t.getDataType())&&proto.caosdb.entity.v1.DataType.toObject(e,o),errorsList:r.Message.toObjectList(t.getErrorsList(),proto.caosdb.entity.v1.Message.toObject,e),warningsList:r.Message.toObjectList(t.getWarningsList(),proto.caosdb.entity.v1.Message.toObject,e),infosList:r.Message.toObjectList(t.getInfosList(),proto.caosdb.entity.v1.Message.toObject,e)};return e&&(n.$jspbMessageInstance=t),n}),proto.caosdb.entity.v1.Property.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.Property;return proto.caosdb.entity.v1.Property.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.Property.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)switch(t.getFieldNumber()){case 1:var o=t.readString();e.setId(o);break;case 2:o=t.readString(),e.setName(o);break;case 3:o=t.readString(),e.setDescription(o);break;case 4:o=new proto.caosdb.entity.v1.Value,t.readMessage(o,proto.caosdb.entity.v1.Value.deserializeBinaryFromReader),e.setValue(o);break;case 5:o=t.readEnum(),e.setImportance(o);break;case 6:o=t.readString(),e.setUnit(o);break;case 7:o=new proto.caosdb.entity.v1.DataType,t.readMessage(o,proto.caosdb.entity.v1.DataType.deserializeBinaryFromReader),e.setDataType(o);break;case 8:o=new proto.caosdb.entity.v1.Message,t.readMessage(o,proto.caosdb.entity.v1.Message.deserializeBinaryFromReader),e.addErrors(o);break;case 9:o=new proto.caosdb.entity.v1.Message,t.readMessage(o,proto.caosdb.entity.v1.Message.deserializeBinaryFromReader),e.addWarnings(o);break;case 10:o=new proto.caosdb.entity.v1.Message,t.readMessage(o,proto.caosdb.entity.v1.Message.deserializeBinaryFromReader),e.addInfos(o);break;default:t.skipField()}return e},proto.caosdb.entity.v1.Property.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.Property.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.Property.serializeBinaryToWriter=function(e,t){var o=void 0;(o=e.getId()).length>0&&t.writeString(1,o),(o=e.getName()).length>0&&t.writeString(2,o),(o=e.getDescription()).length>0&&t.writeString(3,o),null!=(o=e.getValue())&&t.writeMessage(4,o,proto.caosdb.entity.v1.Value.serializeBinaryToWriter),0!==(o=e.getImportance())&&t.writeEnum(5,o),(o=e.getUnit()).length>0&&t.writeString(6,o),null!=(o=e.getDataType())&&t.writeMessage(7,o,proto.caosdb.entity.v1.DataType.serializeBinaryToWriter),(o=e.getErrorsList()).length>0&&t.writeRepeatedMessage(8,o,proto.caosdb.entity.v1.Message.serializeBinaryToWriter),(o=e.getWarningsList()).length>0&&t.writeRepeatedMessage(9,o,proto.caosdb.entity.v1.Message.serializeBinaryToWriter),(o=e.getInfosList()).length>0&&t.writeRepeatedMessage(10,o,proto.caosdb.entity.v1.Message.serializeBinaryToWriter)},proto.caosdb.entity.v1.Property.prototype.getId=function(){return r.Message.getFieldWithDefault(this,1,"")},proto.caosdb.entity.v1.Property.prototype.setId=function(e){return r.Message.setProto3StringField(this,1,e)},proto.caosdb.entity.v1.Property.prototype.getName=function(){return r.Message.getFieldWithDefault(this,2,"")},proto.caosdb.entity.v1.Property.prototype.setName=function(e){return r.Message.setProto3StringField(this,2,e)},proto.caosdb.entity.v1.Property.prototype.getDescription=function(){return r.Message.getFieldWithDefault(this,3,"")},proto.caosdb.entity.v1.Property.prototype.setDescription=function(e){return r.Message.setProto3StringField(this,3,e)},proto.caosdb.entity.v1.Property.prototype.getValue=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.Value,4)},proto.caosdb.entity.v1.Property.prototype.setValue=function(e){return r.Message.setWrapperField(this,4,e)},proto.caosdb.entity.v1.Property.prototype.clearValue=function(){return this.setValue(void 0)},proto.caosdb.entity.v1.Property.prototype.hasValue=function(){return null!=r.Message.getField(this,4)},proto.caosdb.entity.v1.Property.prototype.getImportance=function(){return r.Message.getFieldWithDefault(this,5,0)},proto.caosdb.entity.v1.Property.prototype.setImportance=function(e){return r.Message.setProto3EnumField(this,5,e)},proto.caosdb.entity.v1.Property.prototype.getUnit=function(){return r.Message.getFieldWithDefault(this,6,"")},proto.caosdb.entity.v1.Property.prototype.setUnit=function(e){return r.Message.setProto3StringField(this,6,e)},proto.caosdb.entity.v1.Property.prototype.getDataType=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.DataType,7)},proto.caosdb.entity.v1.Property.prototype.setDataType=function(e){return r.Message.setWrapperField(this,7,e)},proto.caosdb.entity.v1.Property.prototype.clearDataType=function(){return this.setDataType(void 0)},proto.caosdb.entity.v1.Property.prototype.hasDataType=function(){return null!=r.Message.getField(this,7)},proto.caosdb.entity.v1.Property.prototype.getErrorsList=function(){return r.Message.getRepeatedWrapperField(this,proto.caosdb.entity.v1.Message,8)},proto.caosdb.entity.v1.Property.prototype.setErrorsList=function(e){return r.Message.setRepeatedWrapperField(this,8,e)},proto.caosdb.entity.v1.Property.prototype.addErrors=function(e,t){return r.Message.addToRepeatedWrapperField(this,8,e,proto.caosdb.entity.v1.Message,t)},proto.caosdb.entity.v1.Property.prototype.clearErrorsList=function(){return this.setErrorsList([])},proto.caosdb.entity.v1.Property.prototype.getWarningsList=function(){return r.Message.getRepeatedWrapperField(this,proto.caosdb.entity.v1.Message,9)},proto.caosdb.entity.v1.Property.prototype.setWarningsList=function(e){return r.Message.setRepeatedWrapperField(this,9,e)},proto.caosdb.entity.v1.Property.prototype.addWarnings=function(e,t){return r.Message.addToRepeatedWrapperField(this,9,e,proto.caosdb.entity.v1.Message,t)},proto.caosdb.entity.v1.Property.prototype.clearWarningsList=function(){return this.setWarningsList([])},proto.caosdb.entity.v1.Property.prototype.getInfosList=function(){return r.Message.getRepeatedWrapperField(this,proto.caosdb.entity.v1.Message,10)},proto.caosdb.entity.v1.Property.prototype.setInfosList=function(e){return r.Message.setRepeatedWrapperField(this,10,e)},proto.caosdb.entity.v1.Property.prototype.addInfos=function(e,t){return r.Message.addToRepeatedWrapperField(this,10,e,proto.caosdb.entity.v1.Message,t)},proto.caosdb.entity.v1.Property.prototype.clearInfosList=function(){return this.setInfosList([])},proto.caosdb.entity.v1.Parent.repeatedFields_=[4,5,6],r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.Parent.prototype.toObject=function(e){return proto.caosdb.entity.v1.Parent.toObject(e,this)},proto.caosdb.entity.v1.Parent.toObject=function(e,t){var o={id:r.Message.getFieldWithDefault(t,1,""),name:r.Message.getFieldWithDefault(t,2,""),description:r.Message.getFieldWithDefault(t,3,""),errorsList:r.Message.toObjectList(t.getErrorsList(),proto.caosdb.entity.v1.Message.toObject,e),warningsList:r.Message.toObjectList(t.getWarningsList(),proto.caosdb.entity.v1.Message.toObject,e),infosList:r.Message.toObjectList(t.getInfosList(),proto.caosdb.entity.v1.Message.toObject,e)};return e&&(o.$jspbMessageInstance=t),o}),proto.caosdb.entity.v1.Parent.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.Parent;return proto.caosdb.entity.v1.Parent.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.Parent.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)switch(t.getFieldNumber()){case 1:var o=t.readString();e.setId(o);break;case 2:o=t.readString(),e.setName(o);break;case 3:o=t.readString(),e.setDescription(o);break;case 4:o=new proto.caosdb.entity.v1.Message,t.readMessage(o,proto.caosdb.entity.v1.Message.deserializeBinaryFromReader),e.addErrors(o);break;case 5:o=new proto.caosdb.entity.v1.Message,t.readMessage(o,proto.caosdb.entity.v1.Message.deserializeBinaryFromReader),e.addWarnings(o);break;case 6:o=new proto.caosdb.entity.v1.Message,t.readMessage(o,proto.caosdb.entity.v1.Message.deserializeBinaryFromReader),e.addInfos(o);break;default:t.skipField()}return e},proto.caosdb.entity.v1.Parent.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.Parent.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.Parent.serializeBinaryToWriter=function(e,t){var o=void 0;(o=e.getId()).length>0&&t.writeString(1,o),(o=e.getName()).length>0&&t.writeString(2,o),(o=e.getDescription()).length>0&&t.writeString(3,o),(o=e.getErrorsList()).length>0&&t.writeRepeatedMessage(4,o,proto.caosdb.entity.v1.Message.serializeBinaryToWriter),(o=e.getWarningsList()).length>0&&t.writeRepeatedMessage(5,o,proto.caosdb.entity.v1.Message.serializeBinaryToWriter),(o=e.getInfosList()).length>0&&t.writeRepeatedMessage(6,o,proto.caosdb.entity.v1.Message.serializeBinaryToWriter)},proto.caosdb.entity.v1.Parent.prototype.getId=function(){return r.Message.getFieldWithDefault(this,1,"")},proto.caosdb.entity.v1.Parent.prototype.setId=function(e){return r.Message.setProto3StringField(this,1,e)},proto.caosdb.entity.v1.Parent.prototype.getName=function(){return r.Message.getFieldWithDefault(this,2,"")},proto.caosdb.entity.v1.Parent.prototype.setName=function(e){return r.Message.setProto3StringField(this,2,e)},proto.caosdb.entity.v1.Parent.prototype.getDescription=function(){return r.Message.getFieldWithDefault(this,3,"")},proto.caosdb.entity.v1.Parent.prototype.setDescription=function(e){return r.Message.setProto3StringField(this,3,e)},proto.caosdb.entity.v1.Parent.prototype.getErrorsList=function(){return r.Message.getRepeatedWrapperField(this,proto.caosdb.entity.v1.Message,4)},proto.caosdb.entity.v1.Parent.prototype.setErrorsList=function(e){return r.Message.setRepeatedWrapperField(this,4,e)},proto.caosdb.entity.v1.Parent.prototype.addErrors=function(e,t){return r.Message.addToRepeatedWrapperField(this,4,e,proto.caosdb.entity.v1.Message,t)},proto.caosdb.entity.v1.Parent.prototype.clearErrorsList=function(){return this.setErrorsList([])},proto.caosdb.entity.v1.Parent.prototype.getWarningsList=function(){return r.Message.getRepeatedWrapperField(this,proto.caosdb.entity.v1.Message,5)},proto.caosdb.entity.v1.Parent.prototype.setWarningsList=function(e){return r.Message.setRepeatedWrapperField(this,5,e)},proto.caosdb.entity.v1.Parent.prototype.addWarnings=function(e,t){return r.Message.addToRepeatedWrapperField(this,5,e,proto.caosdb.entity.v1.Message,t)},proto.caosdb.entity.v1.Parent.prototype.clearWarningsList=function(){return this.setWarningsList([])},proto.caosdb.entity.v1.Parent.prototype.getInfosList=function(){return r.Message.getRepeatedWrapperField(this,proto.caosdb.entity.v1.Message,6)},proto.caosdb.entity.v1.Parent.prototype.setInfosList=function(e){return r.Message.setRepeatedWrapperField(this,6,e)},proto.caosdb.entity.v1.Parent.prototype.addInfos=function(e,t){return r.Message.addToRepeatedWrapperField(this,6,e,proto.caosdb.entity.v1.Message,t)},proto.caosdb.entity.v1.Parent.prototype.clearInfosList=function(){return this.setInfosList([])},r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.EntityRequest.prototype.toObject=function(e){return proto.caosdb.entity.v1.EntityRequest.toObject(e,this)},proto.caosdb.entity.v1.EntityRequest.toObject=function(e,t){var o,r={entity:(o=t.getEntity())&&proto.caosdb.entity.v1.Entity.toObject(e,o),uploadId:(o=t.getUploadId())&&proto.caosdb.entity.v1.FileTransmissionId.toObject(e,o)};return e&&(r.$jspbMessageInstance=t),r}),proto.caosdb.entity.v1.EntityRequest.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.EntityRequest;return proto.caosdb.entity.v1.EntityRequest.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.EntityRequest.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)switch(t.getFieldNumber()){case 1:var o=new proto.caosdb.entity.v1.Entity;t.readMessage(o,proto.caosdb.entity.v1.Entity.deserializeBinaryFromReader),e.setEntity(o);break;case 2:o=new proto.caosdb.entity.v1.FileTransmissionId,t.readMessage(o,proto.caosdb.entity.v1.FileTransmissionId.deserializeBinaryFromReader),e.setUploadId(o);break;default:t.skipField()}return e},proto.caosdb.entity.v1.EntityRequest.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.EntityRequest.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.EntityRequest.serializeBinaryToWriter=function(e,t){var o=void 0;null!=(o=e.getEntity())&&t.writeMessage(1,o,proto.caosdb.entity.v1.Entity.serializeBinaryToWriter),null!=(o=e.getUploadId())&&t.writeMessage(2,o,proto.caosdb.entity.v1.FileTransmissionId.serializeBinaryToWriter)},proto.caosdb.entity.v1.EntityRequest.prototype.getEntity=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.Entity,1)},proto.caosdb.entity.v1.EntityRequest.prototype.setEntity=function(e){return r.Message.setWrapperField(this,1,e)},proto.caosdb.entity.v1.EntityRequest.prototype.clearEntity=function(){return this.setEntity(void 0)},proto.caosdb.entity.v1.EntityRequest.prototype.hasEntity=function(){return null!=r.Message.getField(this,1)},proto.caosdb.entity.v1.EntityRequest.prototype.getUploadId=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.FileTransmissionId,2)},proto.caosdb.entity.v1.EntityRequest.prototype.setUploadId=function(e){return r.Message.setWrapperField(this,2,e)},proto.caosdb.entity.v1.EntityRequest.prototype.clearUploadId=function(){return this.setUploadId(void 0)},proto.caosdb.entity.v1.EntityRequest.prototype.hasUploadId=function(){return null!=r.Message.getField(this,2)},proto.caosdb.entity.v1.EntityResponse.repeatedFields_=[3,4,5],r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.EntityResponse.prototype.toObject=function(e){return proto.caosdb.entity.v1.EntityResponse.toObject(e,this)},proto.caosdb.entity.v1.EntityResponse.toObject=function(e,t){var o,n={entity:(o=t.getEntity())&&proto.caosdb.entity.v1.Entity.toObject(e,o),downloadId:(o=t.getDownloadId())&&proto.caosdb.entity.v1.FileTransmissionId.toObject(e,o),errorsList:r.Message.toObjectList(t.getErrorsList(),proto.caosdb.entity.v1.Message.toObject,e),warningsList:r.Message.toObjectList(t.getWarningsList(),proto.caosdb.entity.v1.Message.toObject,e),infosList:r.Message.toObjectList(t.getInfosList(),proto.caosdb.entity.v1.Message.toObject,e)};return e&&(n.$jspbMessageInstance=t),n}),proto.caosdb.entity.v1.EntityResponse.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.EntityResponse;return proto.caosdb.entity.v1.EntityResponse.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.EntityResponse.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)switch(t.getFieldNumber()){case 1:var o=new proto.caosdb.entity.v1.Entity;t.readMessage(o,proto.caosdb.entity.v1.Entity.deserializeBinaryFromReader),e.setEntity(o);break;case 2:o=new proto.caosdb.entity.v1.FileTransmissionId,t.readMessage(o,proto.caosdb.entity.v1.FileTransmissionId.deserializeBinaryFromReader),e.setDownloadId(o);break;case 3:o=new proto.caosdb.entity.v1.Message,t.readMessage(o,proto.caosdb.entity.v1.Message.deserializeBinaryFromReader),e.addErrors(o);break;case 4:o=new proto.caosdb.entity.v1.Message,t.readMessage(o,proto.caosdb.entity.v1.Message.deserializeBinaryFromReader),e.addWarnings(o);break;case 5:o=new proto.caosdb.entity.v1.Message,t.readMessage(o,proto.caosdb.entity.v1.Message.deserializeBinaryFromReader),e.addInfos(o);break;default:t.skipField()}return e},proto.caosdb.entity.v1.EntityResponse.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.EntityResponse.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.EntityResponse.serializeBinaryToWriter=function(e,t){var o=void 0;null!=(o=e.getEntity())&&t.writeMessage(1,o,proto.caosdb.entity.v1.Entity.serializeBinaryToWriter),null!=(o=e.getDownloadId())&&t.writeMessage(2,o,proto.caosdb.entity.v1.FileTransmissionId.serializeBinaryToWriter),(o=e.getErrorsList()).length>0&&t.writeRepeatedMessage(3,o,proto.caosdb.entity.v1.Message.serializeBinaryToWriter),(o=e.getWarningsList()).length>0&&t.writeRepeatedMessage(4,o,proto.caosdb.entity.v1.Message.serializeBinaryToWriter),(o=e.getInfosList()).length>0&&t.writeRepeatedMessage(5,o,proto.caosdb.entity.v1.Message.serializeBinaryToWriter)},proto.caosdb.entity.v1.EntityResponse.prototype.getEntity=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.Entity,1)},proto.caosdb.entity.v1.EntityResponse.prototype.setEntity=function(e){return r.Message.setWrapperField(this,1,e)},proto.caosdb.entity.v1.EntityResponse.prototype.clearEntity=function(){return this.setEntity(void 0)},proto.caosdb.entity.v1.EntityResponse.prototype.hasEntity=function(){return null!=r.Message.getField(this,1)},proto.caosdb.entity.v1.EntityResponse.prototype.getDownloadId=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.FileTransmissionId,2)},proto.caosdb.entity.v1.EntityResponse.prototype.setDownloadId=function(e){return r.Message.setWrapperField(this,2,e)},proto.caosdb.entity.v1.EntityResponse.prototype.clearDownloadId=function(){return this.setDownloadId(void 0)},proto.caosdb.entity.v1.EntityResponse.prototype.hasDownloadId=function(){return null!=r.Message.getField(this,2)},proto.caosdb.entity.v1.EntityResponse.prototype.getErrorsList=function(){return r.Message.getRepeatedWrapperField(this,proto.caosdb.entity.v1.Message,3)},proto.caosdb.entity.v1.EntityResponse.prototype.setErrorsList=function(e){return r.Message.setRepeatedWrapperField(this,3,e)},proto.caosdb.entity.v1.EntityResponse.prototype.addErrors=function(e,t){return r.Message.addToRepeatedWrapperField(this,3,e,proto.caosdb.entity.v1.Message,t)},proto.caosdb.entity.v1.EntityResponse.prototype.clearErrorsList=function(){return this.setErrorsList([])},proto.caosdb.entity.v1.EntityResponse.prototype.getWarningsList=function(){return r.Message.getRepeatedWrapperField(this,proto.caosdb.entity.v1.Message,4)},proto.caosdb.entity.v1.EntityResponse.prototype.setWarningsList=function(e){return r.Message.setRepeatedWrapperField(this,4,e)},proto.caosdb.entity.v1.EntityResponse.prototype.addWarnings=function(e,t){return r.Message.addToRepeatedWrapperField(this,4,e,proto.caosdb.entity.v1.Message,t)},proto.caosdb.entity.v1.EntityResponse.prototype.clearWarningsList=function(){return this.setWarningsList([])},proto.caosdb.entity.v1.EntityResponse.prototype.getInfosList=function(){return r.Message.getRepeatedWrapperField(this,proto.caosdb.entity.v1.Message,5)},proto.caosdb.entity.v1.EntityResponse.prototype.setInfosList=function(e){return r.Message.setRepeatedWrapperField(this,5,e)},proto.caosdb.entity.v1.EntityResponse.prototype.addInfos=function(e,t){return r.Message.addToRepeatedWrapperField(this,5,e,proto.caosdb.entity.v1.Message,t)},proto.caosdb.entity.v1.EntityResponse.prototype.clearInfosList=function(){return this.setInfosList([])},proto.caosdb.entity.v1.IdResponse.repeatedFields_=[2,3,4],r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.IdResponse.prototype.toObject=function(e){return proto.caosdb.entity.v1.IdResponse.toObject(e,this)},proto.caosdb.entity.v1.IdResponse.toObject=function(e,t){var o,n={id:r.Message.getFieldWithDefault(t,1,""),version:(o=t.getVersion())&&proto.caosdb.entity.v1.Version.toObject(e,o),errorsList:r.Message.toObjectList(t.getErrorsList(),proto.caosdb.entity.v1.Message.toObject,e),warningsList:r.Message.toObjectList(t.getWarningsList(),proto.caosdb.entity.v1.Message.toObject,e),infosList:r.Message.toObjectList(t.getInfosList(),proto.caosdb.entity.v1.Message.toObject,e)};return e&&(n.$jspbMessageInstance=t),n}),proto.caosdb.entity.v1.IdResponse.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.IdResponse;return proto.caosdb.entity.v1.IdResponse.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.IdResponse.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)switch(t.getFieldNumber()){case 1:var o=t.readString();e.setId(o);break;case 5:o=new proto.caosdb.entity.v1.Version,t.readMessage(o,proto.caosdb.entity.v1.Version.deserializeBinaryFromReader),e.setVersion(o);break;case 2:o=new proto.caosdb.entity.v1.Message,t.readMessage(o,proto.caosdb.entity.v1.Message.deserializeBinaryFromReader),e.addErrors(o);break;case 3:o=new proto.caosdb.entity.v1.Message,t.readMessage(o,proto.caosdb.entity.v1.Message.deserializeBinaryFromReader),e.addWarnings(o);break;case 4:o=new proto.caosdb.entity.v1.Message,t.readMessage(o,proto.caosdb.entity.v1.Message.deserializeBinaryFromReader),e.addInfos(o);break;default:t.skipField()}return e},proto.caosdb.entity.v1.IdResponse.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.IdResponse.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.IdResponse.serializeBinaryToWriter=function(e,t){var o=void 0;(o=e.getId()).length>0&&t.writeString(1,o),null!=(o=e.getVersion())&&t.writeMessage(5,o,proto.caosdb.entity.v1.Version.serializeBinaryToWriter),(o=e.getErrorsList()).length>0&&t.writeRepeatedMessage(2,o,proto.caosdb.entity.v1.Message.serializeBinaryToWriter),(o=e.getWarningsList()).length>0&&t.writeRepeatedMessage(3,o,proto.caosdb.entity.v1.Message.serializeBinaryToWriter),(o=e.getInfosList()).length>0&&t.writeRepeatedMessage(4,o,proto.caosdb.entity.v1.Message.serializeBinaryToWriter)},proto.caosdb.entity.v1.IdResponse.prototype.getId=function(){return r.Message.getFieldWithDefault(this,1,"")},proto.caosdb.entity.v1.IdResponse.prototype.setId=function(e){return r.Message.setProto3StringField(this,1,e)},proto.caosdb.entity.v1.IdResponse.prototype.getVersion=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.Version,5)},proto.caosdb.entity.v1.IdResponse.prototype.setVersion=function(e){return r.Message.setWrapperField(this,5,e)},proto.caosdb.entity.v1.IdResponse.prototype.clearVersion=function(){return this.setVersion(void 0)},proto.caosdb.entity.v1.IdResponse.prototype.hasVersion=function(){return null!=r.Message.getField(this,5)},proto.caosdb.entity.v1.IdResponse.prototype.getErrorsList=function(){return r.Message.getRepeatedWrapperField(this,proto.caosdb.entity.v1.Message,2)},proto.caosdb.entity.v1.IdResponse.prototype.setErrorsList=function(e){return r.Message.setRepeatedWrapperField(this,2,e)},proto.caosdb.entity.v1.IdResponse.prototype.addErrors=function(e,t){return r.Message.addToRepeatedWrapperField(this,2,e,proto.caosdb.entity.v1.Message,t)},proto.caosdb.entity.v1.IdResponse.prototype.clearErrorsList=function(){return this.setErrorsList([])},proto.caosdb.entity.v1.IdResponse.prototype.getWarningsList=function(){return r.Message.getRepeatedWrapperField(this,proto.caosdb.entity.v1.Message,3)},proto.caosdb.entity.v1.IdResponse.prototype.setWarningsList=function(e){return r.Message.setRepeatedWrapperField(this,3,e)},proto.caosdb.entity.v1.IdResponse.prototype.addWarnings=function(e,t){return r.Message.addToRepeatedWrapperField(this,3,e,proto.caosdb.entity.v1.Message,t)},proto.caosdb.entity.v1.IdResponse.prototype.clearWarningsList=function(){return this.setWarningsList([])},proto.caosdb.entity.v1.IdResponse.prototype.getInfosList=function(){return r.Message.getRepeatedWrapperField(this,proto.caosdb.entity.v1.Message,4)},proto.caosdb.entity.v1.IdResponse.prototype.setInfosList=function(e){return r.Message.setRepeatedWrapperField(this,4,e)},proto.caosdb.entity.v1.IdResponse.prototype.addInfos=function(e,t){return r.Message.addToRepeatedWrapperField(this,4,e,proto.caosdb.entity.v1.Message,t)},proto.caosdb.entity.v1.IdResponse.prototype.clearInfosList=function(){return this.setInfosList([])},r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.Query.prototype.toObject=function(e){return proto.caosdb.entity.v1.Query.toObject(e,this)},proto.caosdb.entity.v1.Query.toObject=function(e,t){var o={query:r.Message.getFieldWithDefault(t,1,"")};return e&&(o.$jspbMessageInstance=t),o}),proto.caosdb.entity.v1.Query.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.Query;return proto.caosdb.entity.v1.Query.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.Query.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)if(1===t.getFieldNumber()){var o=t.readString();e.setQuery(o)}else t.skipField();return e},proto.caosdb.entity.v1.Query.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.Query.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.Query.serializeBinaryToWriter=function(e,t){var o;(o=e.getQuery()).length>0&&t.writeString(1,o)},proto.caosdb.entity.v1.Query.prototype.getQuery=function(){return r.Message.getFieldWithDefault(this,1,"")},proto.caosdb.entity.v1.Query.prototype.setQuery=function(e){return r.Message.setProto3StringField(this,1,e)},proto.caosdb.entity.v1.FindQueryResult.repeatedFields_=[1],r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.FindQueryResult.prototype.toObject=function(e){return proto.caosdb.entity.v1.FindQueryResult.toObject(e,this)},proto.caosdb.entity.v1.FindQueryResult.toObject=function(e,t){var o={resultSetList:r.Message.toObjectList(t.getResultSetList(),proto.caosdb.entity.v1.EntityResponse.toObject,e)};return e&&(o.$jspbMessageInstance=t),o}),proto.caosdb.entity.v1.FindQueryResult.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.FindQueryResult;return proto.caosdb.entity.v1.FindQueryResult.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.FindQueryResult.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)if(1===t.getFieldNumber()){var o=new proto.caosdb.entity.v1.EntityResponse;t.readMessage(o,proto.caosdb.entity.v1.EntityResponse.deserializeBinaryFromReader),e.addResultSet(o)}else t.skipField();return e},proto.caosdb.entity.v1.FindQueryResult.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.FindQueryResult.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.FindQueryResult.serializeBinaryToWriter=function(e,t){var o;(o=e.getResultSetList()).length>0&&t.writeRepeatedMessage(1,o,proto.caosdb.entity.v1.EntityResponse.serializeBinaryToWriter)},proto.caosdb.entity.v1.FindQueryResult.prototype.getResultSetList=function(){return r.Message.getRepeatedWrapperField(this,proto.caosdb.entity.v1.EntityResponse,1)},proto.caosdb.entity.v1.FindQueryResult.prototype.setResultSetList=function(e){return r.Message.setRepeatedWrapperField(this,1,e)},proto.caosdb.entity.v1.FindQueryResult.prototype.addResultSet=function(e,t){return r.Message.addToRepeatedWrapperField(this,1,e,proto.caosdb.entity.v1.EntityResponse,t)},proto.caosdb.entity.v1.FindQueryResult.prototype.clearResultSetList=function(){return this.setResultSetList([])},proto.caosdb.entity.v1.SelectQueryRow.repeatedFields_=[2],r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.SelectQueryRow.prototype.toObject=function(e){return proto.caosdb.entity.v1.SelectQueryRow.toObject(e,this)},proto.caosdb.entity.v1.SelectQueryRow.toObject=function(e,t){var o={cellsList:r.Message.toObjectList(t.getCellsList(),proto.caosdb.entity.v1.Value.toObject,e)};return e&&(o.$jspbMessageInstance=t),o}),proto.caosdb.entity.v1.SelectQueryRow.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.SelectQueryRow;return proto.caosdb.entity.v1.SelectQueryRow.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.SelectQueryRow.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)if(2===t.getFieldNumber()){var o=new proto.caosdb.entity.v1.Value;t.readMessage(o,proto.caosdb.entity.v1.Value.deserializeBinaryFromReader),e.addCells(o)}else t.skipField();return e},proto.caosdb.entity.v1.SelectQueryRow.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.SelectQueryRow.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.SelectQueryRow.serializeBinaryToWriter=function(e,t){var o;(o=e.getCellsList()).length>0&&t.writeRepeatedMessage(2,o,proto.caosdb.entity.v1.Value.serializeBinaryToWriter)},proto.caosdb.entity.v1.SelectQueryRow.prototype.getCellsList=function(){return r.Message.getRepeatedWrapperField(this,proto.caosdb.entity.v1.Value,2)},proto.caosdb.entity.v1.SelectQueryRow.prototype.setCellsList=function(e){return r.Message.setRepeatedWrapperField(this,2,e)},proto.caosdb.entity.v1.SelectQueryRow.prototype.addCells=function(e,t){return r.Message.addToRepeatedWrapperField(this,2,e,proto.caosdb.entity.v1.Value,t)},proto.caosdb.entity.v1.SelectQueryRow.prototype.clearCellsList=function(){return this.setCellsList([])},r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.SelectQueryColumn.prototype.toObject=function(e){return proto.caosdb.entity.v1.SelectQueryColumn.toObject(e,this)},proto.caosdb.entity.v1.SelectQueryColumn.toObject=function(e,t){var o={name:r.Message.getFieldWithDefault(t,1,"")};return e&&(o.$jspbMessageInstance=t),o}),proto.caosdb.entity.v1.SelectQueryColumn.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.SelectQueryColumn;return proto.caosdb.entity.v1.SelectQueryColumn.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.SelectQueryColumn.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)if(1===t.getFieldNumber()){var o=t.readString();e.setName(o)}else t.skipField();return e},proto.caosdb.entity.v1.SelectQueryColumn.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.SelectQueryColumn.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.SelectQueryColumn.serializeBinaryToWriter=function(e,t){var o;(o=e.getName()).length>0&&t.writeString(1,o)},proto.caosdb.entity.v1.SelectQueryColumn.prototype.getName=function(){return r.Message.getFieldWithDefault(this,1,"")},proto.caosdb.entity.v1.SelectQueryColumn.prototype.setName=function(e){return r.Message.setProto3StringField(this,1,e)},proto.caosdb.entity.v1.SelectQueryHeader.repeatedFields_=[1],r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.SelectQueryHeader.prototype.toObject=function(e){return proto.caosdb.entity.v1.SelectQueryHeader.toObject(e,this)},proto.caosdb.entity.v1.SelectQueryHeader.toObject=function(e,t){var o={columnsList:r.Message.toObjectList(t.getColumnsList(),proto.caosdb.entity.v1.SelectQueryColumn.toObject,e)};return e&&(o.$jspbMessageInstance=t),o}),proto.caosdb.entity.v1.SelectQueryHeader.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.SelectQueryHeader;return proto.caosdb.entity.v1.SelectQueryHeader.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.SelectQueryHeader.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)if(1===t.getFieldNumber()){var o=new proto.caosdb.entity.v1.SelectQueryColumn;t.readMessage(o,proto.caosdb.entity.v1.SelectQueryColumn.deserializeBinaryFromReader),e.addColumns(o)}else t.skipField();return e},proto.caosdb.entity.v1.SelectQueryHeader.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.SelectQueryHeader.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.SelectQueryHeader.serializeBinaryToWriter=function(e,t){var o;(o=e.getColumnsList()).length>0&&t.writeRepeatedMessage(1,o,proto.caosdb.entity.v1.SelectQueryColumn.serializeBinaryToWriter)},proto.caosdb.entity.v1.SelectQueryHeader.prototype.getColumnsList=function(){return r.Message.getRepeatedWrapperField(this,proto.caosdb.entity.v1.SelectQueryColumn,1)},proto.caosdb.entity.v1.SelectQueryHeader.prototype.setColumnsList=function(e){return r.Message.setRepeatedWrapperField(this,1,e)},proto.caosdb.entity.v1.SelectQueryHeader.prototype.addColumns=function(e,t){return r.Message.addToRepeatedWrapperField(this,1,e,proto.caosdb.entity.v1.SelectQueryColumn,t)},proto.caosdb.entity.v1.SelectQueryHeader.prototype.clearColumnsList=function(){return this.setColumnsList([])},proto.caosdb.entity.v1.SelectQueryResult.repeatedFields_=[4],r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.SelectQueryResult.prototype.toObject=function(e){return proto.caosdb.entity.v1.SelectQueryResult.toObject(e,this)},proto.caosdb.entity.v1.SelectQueryResult.toObject=function(e,t){var o,n={header:(o=t.getHeader())&&proto.caosdb.entity.v1.SelectQueryHeader.toObject(e,o),dataRowsList:r.Message.toObjectList(t.getDataRowsList(),proto.caosdb.entity.v1.SelectQueryRow.toObject,e)};return e&&(n.$jspbMessageInstance=t),n}),proto.caosdb.entity.v1.SelectQueryResult.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.SelectQueryResult;return proto.caosdb.entity.v1.SelectQueryResult.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.SelectQueryResult.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)switch(t.getFieldNumber()){case 3:var o=new proto.caosdb.entity.v1.SelectQueryHeader;t.readMessage(o,proto.caosdb.entity.v1.SelectQueryHeader.deserializeBinaryFromReader),e.setHeader(o);break;case 4:o=new proto.caosdb.entity.v1.SelectQueryRow,t.readMessage(o,proto.caosdb.entity.v1.SelectQueryRow.deserializeBinaryFromReader),e.addDataRows(o);break;default:t.skipField()}return e},proto.caosdb.entity.v1.SelectQueryResult.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.SelectQueryResult.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.SelectQueryResult.serializeBinaryToWriter=function(e,t){var o=void 0;null!=(o=e.getHeader())&&t.writeMessage(3,o,proto.caosdb.entity.v1.SelectQueryHeader.serializeBinaryToWriter),(o=e.getDataRowsList()).length>0&&t.writeRepeatedMessage(4,o,proto.caosdb.entity.v1.SelectQueryRow.serializeBinaryToWriter)},proto.caosdb.entity.v1.SelectQueryResult.prototype.getHeader=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.SelectQueryHeader,3)},proto.caosdb.entity.v1.SelectQueryResult.prototype.setHeader=function(e){return r.Message.setWrapperField(this,3,e)},proto.caosdb.entity.v1.SelectQueryResult.prototype.clearHeader=function(){return this.setHeader(void 0)},proto.caosdb.entity.v1.SelectQueryResult.prototype.hasHeader=function(){return null!=r.Message.getField(this,3)},proto.caosdb.entity.v1.SelectQueryResult.prototype.getDataRowsList=function(){return r.Message.getRepeatedWrapperField(this,proto.caosdb.entity.v1.SelectQueryRow,4)},proto.caosdb.entity.v1.SelectQueryResult.prototype.setDataRowsList=function(e){return r.Message.setRepeatedWrapperField(this,4,e)},proto.caosdb.entity.v1.SelectQueryResult.prototype.addDataRows=function(e,t){return r.Message.addToRepeatedWrapperField(this,4,e,proto.caosdb.entity.v1.SelectQueryRow,t)},proto.caosdb.entity.v1.SelectQueryResult.prototype.clearDataRowsList=function(){return this.setDataRowsList([])},proto.caosdb.entity.v1.RetrieveRequest.oneofGroups_=[[1,2]],proto.caosdb.entity.v1.RetrieveRequest.WrappedRequestCase={WRAPPED_REQUEST_NOT_SET:0,ID:1,QUERY:2},proto.caosdb.entity.v1.RetrieveRequest.prototype.getWrappedRequestCase=function(){return r.Message.computeOneofCase(this,proto.caosdb.entity.v1.RetrieveRequest.oneofGroups_[0])},r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.RetrieveRequest.prototype.toObject=function(e){return proto.caosdb.entity.v1.RetrieveRequest.toObject(e,this)},proto.caosdb.entity.v1.RetrieveRequest.toObject=function(e,t){var o,n={id:r.Message.getFieldWithDefault(t,1,""),query:(o=t.getQuery())&&proto.caosdb.entity.v1.Query.toObject(e,o),registerFileDownload:r.Message.getBooleanFieldWithDefault(t,3,!1)};return e&&(n.$jspbMessageInstance=t),n}),proto.caosdb.entity.v1.RetrieveRequest.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.RetrieveRequest;return proto.caosdb.entity.v1.RetrieveRequest.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.RetrieveRequest.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)switch(t.getFieldNumber()){case 1:var o=t.readString();e.setId(o);break;case 2:o=new proto.caosdb.entity.v1.Query,t.readMessage(o,proto.caosdb.entity.v1.Query.deserializeBinaryFromReader),e.setQuery(o);break;case 3:o=t.readBool(),e.setRegisterFileDownload(o);break;default:t.skipField()}return e},proto.caosdb.entity.v1.RetrieveRequest.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.RetrieveRequest.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.RetrieveRequest.serializeBinaryToWriter=function(e,t){var o=void 0;null!=(o=r.Message.getField(e,1))&&t.writeString(1,o),null!=(o=e.getQuery())&&t.writeMessage(2,o,proto.caosdb.entity.v1.Query.serializeBinaryToWriter),(o=e.getRegisterFileDownload())&&t.writeBool(3,o)},proto.caosdb.entity.v1.RetrieveRequest.prototype.getId=function(){return r.Message.getFieldWithDefault(this,1,"")},proto.caosdb.entity.v1.RetrieveRequest.prototype.setId=function(e){return r.Message.setOneofField(this,1,proto.caosdb.entity.v1.RetrieveRequest.oneofGroups_[0],e)},proto.caosdb.entity.v1.RetrieveRequest.prototype.clearId=function(){return r.Message.setOneofField(this,1,proto.caosdb.entity.v1.RetrieveRequest.oneofGroups_[0],void 0)},proto.caosdb.entity.v1.RetrieveRequest.prototype.hasId=function(){return null!=r.Message.getField(this,1)},proto.caosdb.entity.v1.RetrieveRequest.prototype.getQuery=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.Query,2)},proto.caosdb.entity.v1.RetrieveRequest.prototype.setQuery=function(e){return r.Message.setOneofWrapperField(this,2,proto.caosdb.entity.v1.RetrieveRequest.oneofGroups_[0],e)},proto.caosdb.entity.v1.RetrieveRequest.prototype.clearQuery=function(){return this.setQuery(void 0)},proto.caosdb.entity.v1.RetrieveRequest.prototype.hasQuery=function(){return null!=r.Message.getField(this,2)},proto.caosdb.entity.v1.RetrieveRequest.prototype.getRegisterFileDownload=function(){return r.Message.getBooleanFieldWithDefault(this,3,!1)},proto.caosdb.entity.v1.RetrieveRequest.prototype.setRegisterFileDownload=function(e){return r.Message.setProto3BooleanField(this,3,e)},proto.caosdb.entity.v1.RetrieveResponse.oneofGroups_=[[1,2,3,4]],proto.caosdb.entity.v1.RetrieveResponse.RetrieveResponseCase={RETRIEVE_RESPONSE_NOT_SET:0,ENTITY_RESPONSE:1,FIND_RESULT:2,SELECT_RESULT:3,COUNT_RESULT:4},proto.caosdb.entity.v1.RetrieveResponse.prototype.getRetrieveResponseCase=function(){return r.Message.computeOneofCase(this,proto.caosdb.entity.v1.RetrieveResponse.oneofGroups_[0])},r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.RetrieveResponse.prototype.toObject=function(e){return proto.caosdb.entity.v1.RetrieveResponse.toObject(e,this)},proto.caosdb.entity.v1.RetrieveResponse.toObject=function(e,t){var o,n={entityResponse:(o=t.getEntityResponse())&&proto.caosdb.entity.v1.EntityResponse.toObject(e,o),findResult:(o=t.getFindResult())&&proto.caosdb.entity.v1.FindQueryResult.toObject(e,o),selectResult:(o=t.getSelectResult())&&proto.caosdb.entity.v1.SelectQueryResult.toObject(e,o),countResult:r.Message.getFieldWithDefault(t,4,0)};return e&&(n.$jspbMessageInstance=t),n}),proto.caosdb.entity.v1.RetrieveResponse.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.RetrieveResponse;return proto.caosdb.entity.v1.RetrieveResponse.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.RetrieveResponse.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)switch(t.getFieldNumber()){case 1:var o=new proto.caosdb.entity.v1.EntityResponse;t.readMessage(o,proto.caosdb.entity.v1.EntityResponse.deserializeBinaryFromReader),e.setEntityResponse(o);break;case 2:o=new proto.caosdb.entity.v1.FindQueryResult,t.readMessage(o,proto.caosdb.entity.v1.FindQueryResult.deserializeBinaryFromReader),e.setFindResult(o);break;case 3:o=new proto.caosdb.entity.v1.SelectQueryResult,t.readMessage(o,proto.caosdb.entity.v1.SelectQueryResult.deserializeBinaryFromReader),e.setSelectResult(o);break;case 4:o=t.readInt64(),e.setCountResult(o);break;default:t.skipField()}return e},proto.caosdb.entity.v1.RetrieveResponse.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.RetrieveResponse.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.RetrieveResponse.serializeBinaryToWriter=function(e,t){var o=void 0;null!=(o=e.getEntityResponse())&&t.writeMessage(1,o,proto.caosdb.entity.v1.EntityResponse.serializeBinaryToWriter),null!=(o=e.getFindResult())&&t.writeMessage(2,o,proto.caosdb.entity.v1.FindQueryResult.serializeBinaryToWriter),null!=(o=e.getSelectResult())&&t.writeMessage(3,o,proto.caosdb.entity.v1.SelectQueryResult.serializeBinaryToWriter),null!=(o=r.Message.getField(e,4))&&t.writeInt64(4,o)},proto.caosdb.entity.v1.RetrieveResponse.prototype.getEntityResponse=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.EntityResponse,1)},proto.caosdb.entity.v1.RetrieveResponse.prototype.setEntityResponse=function(e){return r.Message.setOneofWrapperField(this,1,proto.caosdb.entity.v1.RetrieveResponse.oneofGroups_[0],e)},proto.caosdb.entity.v1.RetrieveResponse.prototype.clearEntityResponse=function(){return this.setEntityResponse(void 0)},proto.caosdb.entity.v1.RetrieveResponse.prototype.hasEntityResponse=function(){return null!=r.Message.getField(this,1)},proto.caosdb.entity.v1.RetrieveResponse.prototype.getFindResult=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.FindQueryResult,2)},proto.caosdb.entity.v1.RetrieveResponse.prototype.setFindResult=function(e){return r.Message.setOneofWrapperField(this,2,proto.caosdb.entity.v1.RetrieveResponse.oneofGroups_[0],e)},proto.caosdb.entity.v1.RetrieveResponse.prototype.clearFindResult=function(){return this.setFindResult(void 0)},proto.caosdb.entity.v1.RetrieveResponse.prototype.hasFindResult=function(){return null!=r.Message.getField(this,2)},proto.caosdb.entity.v1.RetrieveResponse.prototype.getSelectResult=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.SelectQueryResult,3)},proto.caosdb.entity.v1.RetrieveResponse.prototype.setSelectResult=function(e){return r.Message.setOneofWrapperField(this,3,proto.caosdb.entity.v1.RetrieveResponse.oneofGroups_[0],e)},proto.caosdb.entity.v1.RetrieveResponse.prototype.clearSelectResult=function(){return this.setSelectResult(void 0)},proto.caosdb.entity.v1.RetrieveResponse.prototype.hasSelectResult=function(){return null!=r.Message.getField(this,3)},proto.caosdb.entity.v1.RetrieveResponse.prototype.getCountResult=function(){return r.Message.getFieldWithDefault(this,4,0)},proto.caosdb.entity.v1.RetrieveResponse.prototype.setCountResult=function(e){return r.Message.setOneofField(this,4,proto.caosdb.entity.v1.RetrieveResponse.oneofGroups_[0],e)},proto.caosdb.entity.v1.RetrieveResponse.prototype.clearCountResult=function(){return r.Message.setOneofField(this,4,proto.caosdb.entity.v1.RetrieveResponse.oneofGroups_[0],void 0)},proto.caosdb.entity.v1.RetrieveResponse.prototype.hasCountResult=function(){return null!=r.Message.getField(this,4)},proto.caosdb.entity.v1.DeleteRequest.oneofGroups_=[[1]],proto.caosdb.entity.v1.DeleteRequest.WrappedRequestCase={WRAPPED_REQUEST_NOT_SET:0,ID:1},proto.caosdb.entity.v1.DeleteRequest.prototype.getWrappedRequestCase=function(){return r.Message.computeOneofCase(this,proto.caosdb.entity.v1.DeleteRequest.oneofGroups_[0])},r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.DeleteRequest.prototype.toObject=function(e){return proto.caosdb.entity.v1.DeleteRequest.toObject(e,this)},proto.caosdb.entity.v1.DeleteRequest.toObject=function(e,t){var o={id:r.Message.getFieldWithDefault(t,1,"")};return e&&(o.$jspbMessageInstance=t),o}),proto.caosdb.entity.v1.DeleteRequest.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.DeleteRequest;return proto.caosdb.entity.v1.DeleteRequest.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.DeleteRequest.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)if(1===t.getFieldNumber()){var o=t.readString();e.setId(o)}else t.skipField();return e},proto.caosdb.entity.v1.DeleteRequest.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.DeleteRequest.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.DeleteRequest.serializeBinaryToWriter=function(e,t){var o;null!=(o=r.Message.getField(e,1))&&t.writeString(1,o)},proto.caosdb.entity.v1.DeleteRequest.prototype.getId=function(){return r.Message.getFieldWithDefault(this,1,"")},proto.caosdb.entity.v1.DeleteRequest.prototype.setId=function(e){return r.Message.setOneofField(this,1,proto.caosdb.entity.v1.DeleteRequest.oneofGroups_[0],e)},proto.caosdb.entity.v1.DeleteRequest.prototype.clearId=function(){return r.Message.setOneofField(this,1,proto.caosdb.entity.v1.DeleteRequest.oneofGroups_[0],void 0)},proto.caosdb.entity.v1.DeleteRequest.prototype.hasId=function(){return null!=r.Message.getField(this,1)},proto.caosdb.entity.v1.DeleteResponse.oneofGroups_=[[1]],proto.caosdb.entity.v1.DeleteResponse.WrappedResponseCase={WRAPPED_RESPONSE_NOT_SET:0,ID_RESPONSE:1},proto.caosdb.entity.v1.DeleteResponse.prototype.getWrappedResponseCase=function(){return r.Message.computeOneofCase(this,proto.caosdb.entity.v1.DeleteResponse.oneofGroups_[0])},r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.DeleteResponse.prototype.toObject=function(e){return proto.caosdb.entity.v1.DeleteResponse.toObject(e,this)},proto.caosdb.entity.v1.DeleteResponse.toObject=function(e,t){var o,r={idResponse:(o=t.getIdResponse())&&proto.caosdb.entity.v1.IdResponse.toObject(e,o)};return e&&(r.$jspbMessageInstance=t),r}),proto.caosdb.entity.v1.DeleteResponse.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.DeleteResponse;return proto.caosdb.entity.v1.DeleteResponse.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.DeleteResponse.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)if(1===t.getFieldNumber()){var o=new proto.caosdb.entity.v1.IdResponse;t.readMessage(o,proto.caosdb.entity.v1.IdResponse.deserializeBinaryFromReader),e.setIdResponse(o)}else t.skipField();return e},proto.caosdb.entity.v1.DeleteResponse.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.DeleteResponse.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.DeleteResponse.serializeBinaryToWriter=function(e,t){var o;null!=(o=e.getIdResponse())&&t.writeMessage(1,o,proto.caosdb.entity.v1.IdResponse.serializeBinaryToWriter)},proto.caosdb.entity.v1.DeleteResponse.prototype.getIdResponse=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.IdResponse,1)},proto.caosdb.entity.v1.DeleteResponse.prototype.setIdResponse=function(e){return r.Message.setOneofWrapperField(this,1,proto.caosdb.entity.v1.DeleteResponse.oneofGroups_[0],e)},proto.caosdb.entity.v1.DeleteResponse.prototype.clearIdResponse=function(){return this.setIdResponse(void 0)},proto.caosdb.entity.v1.DeleteResponse.prototype.hasIdResponse=function(){return null!=r.Message.getField(this,1)},r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.UpdateRequest.prototype.toObject=function(e){return proto.caosdb.entity.v1.UpdateRequest.toObject(e,this)},proto.caosdb.entity.v1.UpdateRequest.toObject=function(e,t){var o,r={entityRequest:(o=t.getEntityRequest())&&proto.caosdb.entity.v1.EntityRequest.toObject(e,o)};return e&&(r.$jspbMessageInstance=t),r}),proto.caosdb.entity.v1.UpdateRequest.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.UpdateRequest;return proto.caosdb.entity.v1.UpdateRequest.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.UpdateRequest.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)if(1===t.getFieldNumber()){var o=new proto.caosdb.entity.v1.EntityRequest;t.readMessage(o,proto.caosdb.entity.v1.EntityRequest.deserializeBinaryFromReader),e.setEntityRequest(o)}else t.skipField();return e},proto.caosdb.entity.v1.UpdateRequest.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.UpdateRequest.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.UpdateRequest.serializeBinaryToWriter=function(e,t){var o;null!=(o=e.getEntityRequest())&&t.writeMessage(1,o,proto.caosdb.entity.v1.EntityRequest.serializeBinaryToWriter)},proto.caosdb.entity.v1.UpdateRequest.prototype.getEntityRequest=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.EntityRequest,1)},proto.caosdb.entity.v1.UpdateRequest.prototype.setEntityRequest=function(e){return r.Message.setWrapperField(this,1,e)},proto.caosdb.entity.v1.UpdateRequest.prototype.clearEntityRequest=function(){return this.setEntityRequest(void 0)},proto.caosdb.entity.v1.UpdateRequest.prototype.hasEntityRequest=function(){return null!=r.Message.getField(this,1)},proto.caosdb.entity.v1.UpdateResponse.oneofGroups_=[[1]],proto.caosdb.entity.v1.UpdateResponse.WrappedResponseCase={WRAPPED_RESPONSE_NOT_SET:0,ID_RESPONSE:1},proto.caosdb.entity.v1.UpdateResponse.prototype.getWrappedResponseCase=function(){return r.Message.computeOneofCase(this,proto.caosdb.entity.v1.UpdateResponse.oneofGroups_[0])},r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.UpdateResponse.prototype.toObject=function(e){return proto.caosdb.entity.v1.UpdateResponse.toObject(e,this)},proto.caosdb.entity.v1.UpdateResponse.toObject=function(e,t){var o,r={idResponse:(o=t.getIdResponse())&&proto.caosdb.entity.v1.IdResponse.toObject(e,o)};return e&&(r.$jspbMessageInstance=t),r}),proto.caosdb.entity.v1.UpdateResponse.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.UpdateResponse;return proto.caosdb.entity.v1.UpdateResponse.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.UpdateResponse.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)if(1===t.getFieldNumber()){var o=new proto.caosdb.entity.v1.IdResponse;t.readMessage(o,proto.caosdb.entity.v1.IdResponse.deserializeBinaryFromReader),e.setIdResponse(o)}else t.skipField();return e},proto.caosdb.entity.v1.UpdateResponse.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.UpdateResponse.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.UpdateResponse.serializeBinaryToWriter=function(e,t){var o;null!=(o=e.getIdResponse())&&t.writeMessage(1,o,proto.caosdb.entity.v1.IdResponse.serializeBinaryToWriter)},proto.caosdb.entity.v1.UpdateResponse.prototype.getIdResponse=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.IdResponse,1)},proto.caosdb.entity.v1.UpdateResponse.prototype.setIdResponse=function(e){return r.Message.setOneofWrapperField(this,1,proto.caosdb.entity.v1.UpdateResponse.oneofGroups_[0],e)},proto.caosdb.entity.v1.UpdateResponse.prototype.clearIdResponse=function(){return this.setIdResponse(void 0)},proto.caosdb.entity.v1.UpdateResponse.prototype.hasIdResponse=function(){return null!=r.Message.getField(this,1)},r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.InsertRequest.prototype.toObject=function(e){return proto.caosdb.entity.v1.InsertRequest.toObject(e,this)},proto.caosdb.entity.v1.InsertRequest.toObject=function(e,t){var o,r={entityRequest:(o=t.getEntityRequest())&&proto.caosdb.entity.v1.EntityRequest.toObject(e,o)};return e&&(r.$jspbMessageInstance=t),r}),proto.caosdb.entity.v1.InsertRequest.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.InsertRequest;return proto.caosdb.entity.v1.InsertRequest.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.InsertRequest.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)if(1===t.getFieldNumber()){var o=new proto.caosdb.entity.v1.EntityRequest;t.readMessage(o,proto.caosdb.entity.v1.EntityRequest.deserializeBinaryFromReader),e.setEntityRequest(o)}else t.skipField();return e},proto.caosdb.entity.v1.InsertRequest.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.InsertRequest.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.InsertRequest.serializeBinaryToWriter=function(e,t){var o;null!=(o=e.getEntityRequest())&&t.writeMessage(1,o,proto.caosdb.entity.v1.EntityRequest.serializeBinaryToWriter)},proto.caosdb.entity.v1.InsertRequest.prototype.getEntityRequest=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.EntityRequest,1)},proto.caosdb.entity.v1.InsertRequest.prototype.setEntityRequest=function(e){return r.Message.setWrapperField(this,1,e)},proto.caosdb.entity.v1.InsertRequest.prototype.clearEntityRequest=function(){return this.setEntityRequest(void 0)},proto.caosdb.entity.v1.InsertRequest.prototype.hasEntityRequest=function(){return null!=r.Message.getField(this,1)},proto.caosdb.entity.v1.InsertResponse.oneofGroups_=[[1]],proto.caosdb.entity.v1.InsertResponse.WrappedResponseCase={WRAPPED_RESPONSE_NOT_SET:0,ID_RESPONSE:1},proto.caosdb.entity.v1.InsertResponse.prototype.getWrappedResponseCase=function(){return r.Message.computeOneofCase(this,proto.caosdb.entity.v1.InsertResponse.oneofGroups_[0])},r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.InsertResponse.prototype.toObject=function(e){return proto.caosdb.entity.v1.InsertResponse.toObject(e,this)},proto.caosdb.entity.v1.InsertResponse.toObject=function(e,t){var o,r={idResponse:(o=t.getIdResponse())&&proto.caosdb.entity.v1.IdResponse.toObject(e,o)};return e&&(r.$jspbMessageInstance=t),r}),proto.caosdb.entity.v1.InsertResponse.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.InsertResponse;return proto.caosdb.entity.v1.InsertResponse.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.InsertResponse.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)if(1===t.getFieldNumber()){var o=new proto.caosdb.entity.v1.IdResponse;t.readMessage(o,proto.caosdb.entity.v1.IdResponse.deserializeBinaryFromReader),e.setIdResponse(o)}else t.skipField();return e},proto.caosdb.entity.v1.InsertResponse.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.InsertResponse.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.InsertResponse.serializeBinaryToWriter=function(e,t){var o;null!=(o=e.getIdResponse())&&t.writeMessage(1,o,proto.caosdb.entity.v1.IdResponse.serializeBinaryToWriter)},proto.caosdb.entity.v1.InsertResponse.prototype.getIdResponse=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.IdResponse,1)},proto.caosdb.entity.v1.InsertResponse.prototype.setIdResponse=function(e){return r.Message.setOneofWrapperField(this,1,proto.caosdb.entity.v1.InsertResponse.oneofGroups_[0],e)},proto.caosdb.entity.v1.InsertResponse.prototype.clearIdResponse=function(){return this.setIdResponse(void 0)},proto.caosdb.entity.v1.InsertResponse.prototype.hasIdResponse=function(){return null!=r.Message.getField(this,1)},proto.caosdb.entity.v1.TransactionRequest.oneofGroups_=[[1,2,3,4]],proto.caosdb.entity.v1.TransactionRequest.WrappedRequestsCase={WRAPPED_REQUESTS_NOT_SET:0,RETRIEVE_REQUEST:1,UPDATE_REQUEST:2,INSERT_REQUEST:3,DELETE_REQUEST:4},proto.caosdb.entity.v1.TransactionRequest.prototype.getWrappedRequestsCase=function(){return r.Message.computeOneofCase(this,proto.caosdb.entity.v1.TransactionRequest.oneofGroups_[0])},r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.TransactionRequest.prototype.toObject=function(e){return proto.caosdb.entity.v1.TransactionRequest.toObject(e,this)},proto.caosdb.entity.v1.TransactionRequest.toObject=function(e,t){var o,r={retrieveRequest:(o=t.getRetrieveRequest())&&proto.caosdb.entity.v1.RetrieveRequest.toObject(e,o),updateRequest:(o=t.getUpdateRequest())&&proto.caosdb.entity.v1.UpdateRequest.toObject(e,o),insertRequest:(o=t.getInsertRequest())&&proto.caosdb.entity.v1.InsertRequest.toObject(e,o),deleteRequest:(o=t.getDeleteRequest())&&proto.caosdb.entity.v1.DeleteRequest.toObject(e,o)};return e&&(r.$jspbMessageInstance=t),r}),proto.caosdb.entity.v1.TransactionRequest.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.TransactionRequest;return proto.caosdb.entity.v1.TransactionRequest.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.TransactionRequest.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)switch(t.getFieldNumber()){case 1:var o=new proto.caosdb.entity.v1.RetrieveRequest;t.readMessage(o,proto.caosdb.entity.v1.RetrieveRequest.deserializeBinaryFromReader),e.setRetrieveRequest(o);break;case 2:o=new proto.caosdb.entity.v1.UpdateRequest,t.readMessage(o,proto.caosdb.entity.v1.UpdateRequest.deserializeBinaryFromReader),e.setUpdateRequest(o);break;case 3:o=new proto.caosdb.entity.v1.InsertRequest,t.readMessage(o,proto.caosdb.entity.v1.InsertRequest.deserializeBinaryFromReader),e.setInsertRequest(o);break;case 4:o=new proto.caosdb.entity.v1.DeleteRequest,t.readMessage(o,proto.caosdb.entity.v1.DeleteRequest.deserializeBinaryFromReader),e.setDeleteRequest(o);break;default:t.skipField()}return e},proto.caosdb.entity.v1.TransactionRequest.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.TransactionRequest.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.TransactionRequest.serializeBinaryToWriter=function(e,t){var o=void 0;null!=(o=e.getRetrieveRequest())&&t.writeMessage(1,o,proto.caosdb.entity.v1.RetrieveRequest.serializeBinaryToWriter),null!=(o=e.getUpdateRequest())&&t.writeMessage(2,o,proto.caosdb.entity.v1.UpdateRequest.serializeBinaryToWriter),null!=(o=e.getInsertRequest())&&t.writeMessage(3,o,proto.caosdb.entity.v1.InsertRequest.serializeBinaryToWriter),null!=(o=e.getDeleteRequest())&&t.writeMessage(4,o,proto.caosdb.entity.v1.DeleteRequest.serializeBinaryToWriter)},proto.caosdb.entity.v1.TransactionRequest.prototype.getRetrieveRequest=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.RetrieveRequest,1)},proto.caosdb.entity.v1.TransactionRequest.prototype.setRetrieveRequest=function(e){return r.Message.setOneofWrapperField(this,1,proto.caosdb.entity.v1.TransactionRequest.oneofGroups_[0],e)},proto.caosdb.entity.v1.TransactionRequest.prototype.clearRetrieveRequest=function(){return this.setRetrieveRequest(void 0)},proto.caosdb.entity.v1.TransactionRequest.prototype.hasRetrieveRequest=function(){return null!=r.Message.getField(this,1)},proto.caosdb.entity.v1.TransactionRequest.prototype.getUpdateRequest=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.UpdateRequest,2)},proto.caosdb.entity.v1.TransactionRequest.prototype.setUpdateRequest=function(e){return r.Message.setOneofWrapperField(this,2,proto.caosdb.entity.v1.TransactionRequest.oneofGroups_[0],e)},proto.caosdb.entity.v1.TransactionRequest.prototype.clearUpdateRequest=function(){return this.setUpdateRequest(void 0)},proto.caosdb.entity.v1.TransactionRequest.prototype.hasUpdateRequest=function(){return null!=r.Message.getField(this,2)},proto.caosdb.entity.v1.TransactionRequest.prototype.getInsertRequest=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.InsertRequest,3)},proto.caosdb.entity.v1.TransactionRequest.prototype.setInsertRequest=function(e){return r.Message.setOneofWrapperField(this,3,proto.caosdb.entity.v1.TransactionRequest.oneofGroups_[0],e)},proto.caosdb.entity.v1.TransactionRequest.prototype.clearInsertRequest=function(){return this.setInsertRequest(void 0)},proto.caosdb.entity.v1.TransactionRequest.prototype.hasInsertRequest=function(){return null!=r.Message.getField(this,3)},proto.caosdb.entity.v1.TransactionRequest.prototype.getDeleteRequest=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.DeleteRequest,4)},proto.caosdb.entity.v1.TransactionRequest.prototype.setDeleteRequest=function(e){return r.Message.setOneofWrapperField(this,4,proto.caosdb.entity.v1.TransactionRequest.oneofGroups_[0],e)},proto.caosdb.entity.v1.TransactionRequest.prototype.clearDeleteRequest=function(){return this.setDeleteRequest(void 0)},proto.caosdb.entity.v1.TransactionRequest.prototype.hasDeleteRequest=function(){return null!=r.Message.getField(this,4)},proto.caosdb.entity.v1.TransactionResponse.oneofGroups_=[[1,2,3,4]],proto.caosdb.entity.v1.TransactionResponse.TransactionResponseCase={TRANSACTION_RESPONSE_NOT_SET:0,DELETE_RESPONSE:1,UPDATE_RESPONSE:2,RETRIEVE_RESPONSE:3,INSERT_RESPONSE:4},proto.caosdb.entity.v1.TransactionResponse.prototype.getTransactionResponseCase=function(){return r.Message.computeOneofCase(this,proto.caosdb.entity.v1.TransactionResponse.oneofGroups_[0])},r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.TransactionResponse.prototype.toObject=function(e){return proto.caosdb.entity.v1.TransactionResponse.toObject(e,this)},proto.caosdb.entity.v1.TransactionResponse.toObject=function(e,t){var o,r={deleteResponse:(o=t.getDeleteResponse())&&proto.caosdb.entity.v1.DeleteResponse.toObject(e,o),updateResponse:(o=t.getUpdateResponse())&&proto.caosdb.entity.v1.UpdateResponse.toObject(e,o),retrieveResponse:(o=t.getRetrieveResponse())&&proto.caosdb.entity.v1.RetrieveResponse.toObject(e,o),insertResponse:(o=t.getInsertResponse())&&proto.caosdb.entity.v1.InsertResponse.toObject(e,o)};return e&&(r.$jspbMessageInstance=t),r}),proto.caosdb.entity.v1.TransactionResponse.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.TransactionResponse;return proto.caosdb.entity.v1.TransactionResponse.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.TransactionResponse.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)switch(t.getFieldNumber()){case 1:var o=new proto.caosdb.entity.v1.DeleteResponse;t.readMessage(o,proto.caosdb.entity.v1.DeleteResponse.deserializeBinaryFromReader),e.setDeleteResponse(o);break;case 2:o=new proto.caosdb.entity.v1.UpdateResponse,t.readMessage(o,proto.caosdb.entity.v1.UpdateResponse.deserializeBinaryFromReader),e.setUpdateResponse(o);break;case 3:o=new proto.caosdb.entity.v1.RetrieveResponse,t.readMessage(o,proto.caosdb.entity.v1.RetrieveResponse.deserializeBinaryFromReader),e.setRetrieveResponse(o);break;case 4:o=new proto.caosdb.entity.v1.InsertResponse,t.readMessage(o,proto.caosdb.entity.v1.InsertResponse.deserializeBinaryFromReader),e.setInsertResponse(o);break;default:t.skipField()}return e},proto.caosdb.entity.v1.TransactionResponse.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.TransactionResponse.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.TransactionResponse.serializeBinaryToWriter=function(e,t){var o=void 0;null!=(o=e.getDeleteResponse())&&t.writeMessage(1,o,proto.caosdb.entity.v1.DeleteResponse.serializeBinaryToWriter),null!=(o=e.getUpdateResponse())&&t.writeMessage(2,o,proto.caosdb.entity.v1.UpdateResponse.serializeBinaryToWriter),null!=(o=e.getRetrieveResponse())&&t.writeMessage(3,o,proto.caosdb.entity.v1.RetrieveResponse.serializeBinaryToWriter),null!=(o=e.getInsertResponse())&&t.writeMessage(4,o,proto.caosdb.entity.v1.InsertResponse.serializeBinaryToWriter)},proto.caosdb.entity.v1.TransactionResponse.prototype.getDeleteResponse=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.DeleteResponse,1)},proto.caosdb.entity.v1.TransactionResponse.prototype.setDeleteResponse=function(e){return r.Message.setOneofWrapperField(this,1,proto.caosdb.entity.v1.TransactionResponse.oneofGroups_[0],e)},proto.caosdb.entity.v1.TransactionResponse.prototype.clearDeleteResponse=function(){return this.setDeleteResponse(void 0)},proto.caosdb.entity.v1.TransactionResponse.prototype.hasDeleteResponse=function(){return null!=r.Message.getField(this,1)},proto.caosdb.entity.v1.TransactionResponse.prototype.getUpdateResponse=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.UpdateResponse,2)},proto.caosdb.entity.v1.TransactionResponse.prototype.setUpdateResponse=function(e){return r.Message.setOneofWrapperField(this,2,proto.caosdb.entity.v1.TransactionResponse.oneofGroups_[0],e)},proto.caosdb.entity.v1.TransactionResponse.prototype.clearUpdateResponse=function(){return this.setUpdateResponse(void 0)},proto.caosdb.entity.v1.TransactionResponse.prototype.hasUpdateResponse=function(){return null!=r.Message.getField(this,2)},proto.caosdb.entity.v1.TransactionResponse.prototype.getRetrieveResponse=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.RetrieveResponse,3)},proto.caosdb.entity.v1.TransactionResponse.prototype.setRetrieveResponse=function(e){return r.Message.setOneofWrapperField(this,3,proto.caosdb.entity.v1.TransactionResponse.oneofGroups_[0],e)},proto.caosdb.entity.v1.TransactionResponse.prototype.clearRetrieveResponse=function(){return this.setRetrieveResponse(void 0)},proto.caosdb.entity.v1.TransactionResponse.prototype.hasRetrieveResponse=function(){return null!=r.Message.getField(this,3)},proto.caosdb.entity.v1.TransactionResponse.prototype.getInsertResponse=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.InsertResponse,4)},proto.caosdb.entity.v1.TransactionResponse.prototype.setInsertResponse=function(e){return r.Message.setOneofWrapperField(this,4,proto.caosdb.entity.v1.TransactionResponse.oneofGroups_[0],e)},proto.caosdb.entity.v1.TransactionResponse.prototype.clearInsertResponse=function(){return this.setInsertResponse(void 0)},proto.caosdb.entity.v1.TransactionResponse.prototype.hasInsertResponse=function(){return null!=r.Message.getField(this,4)},proto.caosdb.entity.v1.MultiTransactionRequest.repeatedFields_=[1],r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.MultiTransactionRequest.prototype.toObject=function(e){return proto.caosdb.entity.v1.MultiTransactionRequest.toObject(e,this)},proto.caosdb.entity.v1.MultiTransactionRequest.toObject=function(e,t){var o={requestsList:r.Message.toObjectList(t.getRequestsList(),proto.caosdb.entity.v1.TransactionRequest.toObject,e)};return e&&(o.$jspbMessageInstance=t),o}),proto.caosdb.entity.v1.MultiTransactionRequest.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.MultiTransactionRequest;return proto.caosdb.entity.v1.MultiTransactionRequest.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.MultiTransactionRequest.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)if(1===t.getFieldNumber()){var o=new proto.caosdb.entity.v1.TransactionRequest;t.readMessage(o,proto.caosdb.entity.v1.TransactionRequest.deserializeBinaryFromReader),e.addRequests(o)}else t.skipField();return e},proto.caosdb.entity.v1.MultiTransactionRequest.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.MultiTransactionRequest.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.MultiTransactionRequest.serializeBinaryToWriter=function(e,t){var o;(o=e.getRequestsList()).length>0&&t.writeRepeatedMessage(1,o,proto.caosdb.entity.v1.TransactionRequest.serializeBinaryToWriter)},proto.caosdb.entity.v1.MultiTransactionRequest.prototype.getRequestsList=function(){return r.Message.getRepeatedWrapperField(this,proto.caosdb.entity.v1.TransactionRequest,1)},proto.caosdb.entity.v1.MultiTransactionRequest.prototype.setRequestsList=function(e){return r.Message.setRepeatedWrapperField(this,1,e)},proto.caosdb.entity.v1.MultiTransactionRequest.prototype.addRequests=function(e,t){return r.Message.addToRepeatedWrapperField(this,1,e,proto.caosdb.entity.v1.TransactionRequest,t)},proto.caosdb.entity.v1.MultiTransactionRequest.prototype.clearRequestsList=function(){return this.setRequestsList([])},proto.caosdb.entity.v1.MultiTransactionResponse.repeatedFields_=[1,2,3,4],r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.MultiTransactionResponse.prototype.toObject=function(e){return proto.caosdb.entity.v1.MultiTransactionResponse.toObject(e,this)},proto.caosdb.entity.v1.MultiTransactionResponse.toObject=function(e,t){var o={responsesList:r.Message.toObjectList(t.getResponsesList(),proto.caosdb.entity.v1.TransactionResponse.toObject,e),transactionErrorsList:r.Message.toObjectList(t.getTransactionErrorsList(),proto.caosdb.entity.v1.Message.toObject,e),transactionWarningsList:r.Message.toObjectList(t.getTransactionWarningsList(),proto.caosdb.entity.v1.Message.toObject,e),transactionInfosList:r.Message.toObjectList(t.getTransactionInfosList(),proto.caosdb.entity.v1.Message.toObject,e)};return e&&(o.$jspbMessageInstance=t),o}),proto.caosdb.entity.v1.MultiTransactionResponse.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.MultiTransactionResponse;return proto.caosdb.entity.v1.MultiTransactionResponse.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.MultiTransactionResponse.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)switch(t.getFieldNumber()){case 1:var o=new proto.caosdb.entity.v1.TransactionResponse;t.readMessage(o,proto.caosdb.entity.v1.TransactionResponse.deserializeBinaryFromReader),e.addResponses(o);break;case 2:o=new proto.caosdb.entity.v1.Message,t.readMessage(o,proto.caosdb.entity.v1.Message.deserializeBinaryFromReader),e.addTransactionErrors(o);break;case 3:o=new proto.caosdb.entity.v1.Message,t.readMessage(o,proto.caosdb.entity.v1.Message.deserializeBinaryFromReader),e.addTransactionWarnings(o);break;case 4:o=new proto.caosdb.entity.v1.Message,t.readMessage(o,proto.caosdb.entity.v1.Message.deserializeBinaryFromReader),e.addTransactionInfos(o);break;default:t.skipField()}return e},proto.caosdb.entity.v1.MultiTransactionResponse.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.MultiTransactionResponse.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.MultiTransactionResponse.serializeBinaryToWriter=function(e,t){var o=void 0;(o=e.getResponsesList()).length>0&&t.writeRepeatedMessage(1,o,proto.caosdb.entity.v1.TransactionResponse.serializeBinaryToWriter),(o=e.getTransactionErrorsList()).length>0&&t.writeRepeatedMessage(2,o,proto.caosdb.entity.v1.Message.serializeBinaryToWriter),(o=e.getTransactionWarningsList()).length>0&&t.writeRepeatedMessage(3,o,proto.caosdb.entity.v1.Message.serializeBinaryToWriter),(o=e.getTransactionInfosList()).length>0&&t.writeRepeatedMessage(4,o,proto.caosdb.entity.v1.Message.serializeBinaryToWriter)},proto.caosdb.entity.v1.MultiTransactionResponse.prototype.getResponsesList=function(){return r.Message.getRepeatedWrapperField(this,proto.caosdb.entity.v1.TransactionResponse,1)},proto.caosdb.entity.v1.MultiTransactionResponse.prototype.setResponsesList=function(e){return r.Message.setRepeatedWrapperField(this,1,e)},proto.caosdb.entity.v1.MultiTransactionResponse.prototype.addResponses=function(e,t){return r.Message.addToRepeatedWrapperField(this,1,e,proto.caosdb.entity.v1.TransactionResponse,t)},proto.caosdb.entity.v1.MultiTransactionResponse.prototype.clearResponsesList=function(){return this.setResponsesList([])},proto.caosdb.entity.v1.MultiTransactionResponse.prototype.getTransactionErrorsList=function(){return r.Message.getRepeatedWrapperField(this,proto.caosdb.entity.v1.Message,2)},proto.caosdb.entity.v1.MultiTransactionResponse.prototype.setTransactionErrorsList=function(e){return r.Message.setRepeatedWrapperField(this,2,e)},proto.caosdb.entity.v1.MultiTransactionResponse.prototype.addTransactionErrors=function(e,t){return r.Message.addToRepeatedWrapperField(this,2,e,proto.caosdb.entity.v1.Message,t)},proto.caosdb.entity.v1.MultiTransactionResponse.prototype.clearTransactionErrorsList=function(){return this.setTransactionErrorsList([])},proto.caosdb.entity.v1.MultiTransactionResponse.prototype.getTransactionWarningsList=function(){return r.Message.getRepeatedWrapperField(this,proto.caosdb.entity.v1.Message,3)},proto.caosdb.entity.v1.MultiTransactionResponse.prototype.setTransactionWarningsList=function(e){return r.Message.setRepeatedWrapperField(this,3,e)},proto.caosdb.entity.v1.MultiTransactionResponse.prototype.addTransactionWarnings=function(e,t){return r.Message.addToRepeatedWrapperField(this,3,e,proto.caosdb.entity.v1.Message,t)},proto.caosdb.entity.v1.MultiTransactionResponse.prototype.clearTransactionWarningsList=function(){return this.setTransactionWarningsList([])},proto.caosdb.entity.v1.MultiTransactionResponse.prototype.getTransactionInfosList=function(){return r.Message.getRepeatedWrapperField(this,proto.caosdb.entity.v1.Message,4)},proto.caosdb.entity.v1.MultiTransactionResponse.prototype.setTransactionInfosList=function(e){return r.Message.setRepeatedWrapperField(this,4,e)},proto.caosdb.entity.v1.MultiTransactionResponse.prototype.addTransactionInfos=function(e,t){return r.Message.addToRepeatedWrapperField(this,4,e,proto.caosdb.entity.v1.Message,t)},proto.caosdb.entity.v1.MultiTransactionResponse.prototype.clearTransactionInfosList=function(){return this.setTransactionInfosList([])},proto.caosdb.entity.v1.MultiRetrieveEntityACLRequest.repeatedFields_=[1],r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.MultiRetrieveEntityACLRequest.prototype.toObject=function(e){return proto.caosdb.entity.v1.MultiRetrieveEntityACLRequest.toObject(e,this)},proto.caosdb.entity.v1.MultiRetrieveEntityACLRequest.toObject=function(e,t){var o,n={idList:null==(o=r.Message.getRepeatedField(t,1))?void 0:o};return e&&(n.$jspbMessageInstance=t),n}),proto.caosdb.entity.v1.MultiRetrieveEntityACLRequest.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.MultiRetrieveEntityACLRequest;return proto.caosdb.entity.v1.MultiRetrieveEntityACLRequest.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.MultiRetrieveEntityACLRequest.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)if(1===t.getFieldNumber()){var o=t.readString();e.addId(o)}else t.skipField();return e},proto.caosdb.entity.v1.MultiRetrieveEntityACLRequest.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.MultiRetrieveEntityACLRequest.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.MultiRetrieveEntityACLRequest.serializeBinaryToWriter=function(e,t){var o;(o=e.getIdList()).length>0&&t.writeRepeatedString(1,o)},proto.caosdb.entity.v1.MultiRetrieveEntityACLRequest.prototype.getIdList=function(){return r.Message.getRepeatedField(this,1)},proto.caosdb.entity.v1.MultiRetrieveEntityACLRequest.prototype.setIdList=function(e){return r.Message.setField(this,1,e||[])},proto.caosdb.entity.v1.MultiRetrieveEntityACLRequest.prototype.addId=function(e,t){return r.Message.addToRepeatedField(this,1,e,t)},proto.caosdb.entity.v1.MultiRetrieveEntityACLRequest.prototype.clearIdList=function(){return this.setIdList([])},proto.caosdb.entity.v1.MultiRetrieveEntityACLResponse.repeatedFields_=[1],r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.MultiRetrieveEntityACLResponse.prototype.toObject=function(e){return proto.caosdb.entity.v1.MultiRetrieveEntityACLResponse.toObject(e,this)},proto.caosdb.entity.v1.MultiRetrieveEntityACLResponse.toObject=function(e,t){var o={aclsList:r.Message.toObjectList(t.getAclsList(),proto.caosdb.entity.v1.EntityACL.toObject,e)};return e&&(o.$jspbMessageInstance=t),o}),proto.caosdb.entity.v1.MultiRetrieveEntityACLResponse.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.MultiRetrieveEntityACLResponse;return proto.caosdb.entity.v1.MultiRetrieveEntityACLResponse.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.MultiRetrieveEntityACLResponse.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)if(1===t.getFieldNumber()){var o=new proto.caosdb.entity.v1.EntityACL;t.readMessage(o,proto.caosdb.entity.v1.EntityACL.deserializeBinaryFromReader),e.addAcls(o)}else t.skipField();return e},proto.caosdb.entity.v1.MultiRetrieveEntityACLResponse.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.MultiRetrieveEntityACLResponse.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.MultiRetrieveEntityACLResponse.serializeBinaryToWriter=function(e,t){var o;(o=e.getAclsList()).length>0&&t.writeRepeatedMessage(1,o,proto.caosdb.entity.v1.EntityACL.serializeBinaryToWriter)},proto.caosdb.entity.v1.MultiRetrieveEntityACLResponse.prototype.getAclsList=function(){return r.Message.getRepeatedWrapperField(this,proto.caosdb.entity.v1.EntityACL,1)},proto.caosdb.entity.v1.MultiRetrieveEntityACLResponse.prototype.setAclsList=function(e){return r.Message.setRepeatedWrapperField(this,1,e)},proto.caosdb.entity.v1.MultiRetrieveEntityACLResponse.prototype.addAcls=function(e,t){return r.Message.addToRepeatedWrapperField(this,1,e,proto.caosdb.entity.v1.EntityACL,t)},proto.caosdb.entity.v1.MultiRetrieveEntityACLResponse.prototype.clearAclsList=function(){return this.setAclsList([])},proto.caosdb.entity.v1.MultiUpdateEntityACLRequest.repeatedFields_=[1],r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.MultiUpdateEntityACLRequest.prototype.toObject=function(e){return proto.caosdb.entity.v1.MultiUpdateEntityACLRequest.toObject(e,this)},proto.caosdb.entity.v1.MultiUpdateEntityACLRequest.toObject=function(e,t){var o={aclsList:r.Message.toObjectList(t.getAclsList(),proto.caosdb.entity.v1.EntityACL.toObject,e)};return e&&(o.$jspbMessageInstance=t),o}),proto.caosdb.entity.v1.MultiUpdateEntityACLRequest.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.MultiUpdateEntityACLRequest;return proto.caosdb.entity.v1.MultiUpdateEntityACLRequest.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.MultiUpdateEntityACLRequest.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)if(1===t.getFieldNumber()){var o=new proto.caosdb.entity.v1.EntityACL;t.readMessage(o,proto.caosdb.entity.v1.EntityACL.deserializeBinaryFromReader),e.addAcls(o)}else t.skipField();return e},proto.caosdb.entity.v1.MultiUpdateEntityACLRequest.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.MultiUpdateEntityACLRequest.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.MultiUpdateEntityACLRequest.serializeBinaryToWriter=function(e,t){var o;(o=e.getAclsList()).length>0&&t.writeRepeatedMessage(1,o,proto.caosdb.entity.v1.EntityACL.serializeBinaryToWriter)},proto.caosdb.entity.v1.MultiUpdateEntityACLRequest.prototype.getAclsList=function(){return r.Message.getRepeatedWrapperField(this,proto.caosdb.entity.v1.EntityACL,1)},proto.caosdb.entity.v1.MultiUpdateEntityACLRequest.prototype.setAclsList=function(e){return r.Message.setRepeatedWrapperField(this,1,e)},proto.caosdb.entity.v1.MultiUpdateEntityACLRequest.prototype.addAcls=function(e,t){return r.Message.addToRepeatedWrapperField(this,1,e,proto.caosdb.entity.v1.EntityACL,t)},proto.caosdb.entity.v1.MultiUpdateEntityACLRequest.prototype.clearAclsList=function(){return this.setAclsList([])},r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.MultiUpdateEntityACLResponse.prototype.toObject=function(e){return proto.caosdb.entity.v1.MultiUpdateEntityACLResponse.toObject(e,this)},proto.caosdb.entity.v1.MultiUpdateEntityACLResponse.toObject=function(e,t){var o={};return e&&(o.$jspbMessageInstance=t),o}),proto.caosdb.entity.v1.MultiUpdateEntityACLResponse.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.MultiUpdateEntityACLResponse;return proto.caosdb.entity.v1.MultiUpdateEntityACLResponse.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.MultiUpdateEntityACLResponse.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)t.getFieldNumber(),t.skipField();return e},proto.caosdb.entity.v1.MultiUpdateEntityACLResponse.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.MultiUpdateEntityACLResponse.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.MultiUpdateEntityACLResponse.serializeBinaryToWriter=function(e,t){};proto.caosdb.entity.v1.EntityACL.repeatedFields_=[2],r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.EntityACL.prototype.toObject=function(e){return proto.caosdb.entity.v1.EntityACL.toObject(e,this)},proto.caosdb.entity.v1.EntityACL.toObject=function(e,t){var o={id:r.Message.getFieldWithDefault(t,1,""),rulesList:r.Message.toObjectList(t.getRulesList(),proto.caosdb.entity.v1.EntityPermissionRule.toObject,e),permission:r.Message.getFieldWithDefault(t,3,0)};return e&&(o.$jspbMessageInstance=t),o}),proto.caosdb.entity.v1.EntityACL.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.EntityACL;return proto.caosdb.entity.v1.EntityACL.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.EntityACL.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)switch(t.getFieldNumber()){case 1:var o=t.readString();e.setId(o);break;case 2:o=new proto.caosdb.entity.v1.EntityPermissionRule,t.readMessage(o,proto.caosdb.entity.v1.EntityPermissionRule.deserializeBinaryFromReader),e.addRules(o);break;case 3:o=t.readEnum(),e.setPermission(o);break;default:t.skipField()}return e},proto.caosdb.entity.v1.EntityACL.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.EntityACL.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.EntityACL.serializeBinaryToWriter=function(e,t){var o=void 0;(o=e.getId()).length>0&&t.writeString(1,o),(o=e.getRulesList()).length>0&&t.writeRepeatedMessage(2,o,proto.caosdb.entity.v1.EntityPermissionRule.serializeBinaryToWriter),0!==(o=e.getPermission())&&t.writeEnum(3,o)},proto.caosdb.entity.v1.EntityACL.prototype.getId=function(){return r.Message.getFieldWithDefault(this,1,"")},proto.caosdb.entity.v1.EntityACL.prototype.setId=function(e){return r.Message.setProto3StringField(this,1,e)},proto.caosdb.entity.v1.EntityACL.prototype.getRulesList=function(){return r.Message.getRepeatedWrapperField(this,proto.caosdb.entity.v1.EntityPermissionRule,2)},proto.caosdb.entity.v1.EntityACL.prototype.setRulesList=function(e){return r.Message.setRepeatedWrapperField(this,2,e)},proto.caosdb.entity.v1.EntityACL.prototype.addRules=function(e,t){return r.Message.addToRepeatedWrapperField(this,2,e,proto.caosdb.entity.v1.EntityPermissionRule,t)},proto.caosdb.entity.v1.EntityACL.prototype.clearRulesList=function(){return this.setRulesList([])},proto.caosdb.entity.v1.EntityACL.prototype.getPermission=function(){return r.Message.getFieldWithDefault(this,3,0)},proto.caosdb.entity.v1.EntityACL.prototype.setPermission=function(e){return r.Message.setProto3EnumField(this,3,e)},proto.caosdb.entity.v1.EntityPermissionRule.repeatedFields_=[4,5],r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.EntityPermissionRule.prototype.toObject=function(e){return proto.caosdb.entity.v1.EntityPermissionRule.toObject(e,this)},proto.caosdb.entity.v1.EntityPermissionRule.toObject=function(e,t){var o,n={role:r.Message.getFieldWithDefault(t,1,""),priority:r.Message.getBooleanFieldWithDefault(t,2,!1),grant:r.Message.getBooleanFieldWithDefault(t,3,!1),permissionsList:null==(o=r.Message.getRepeatedField(t,4))?void 0:o,capabilitiesList:null==(o=r.Message.getRepeatedField(t,5))?void 0:o};return e&&(n.$jspbMessageInstance=t),n}),proto.caosdb.entity.v1.EntityPermissionRule.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.EntityPermissionRule;return proto.caosdb.entity.v1.EntityPermissionRule.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.EntityPermissionRule.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)switch(t.getFieldNumber()){case 1:var o=t.readString();e.setRole(o);break;case 2:o=t.readBool(),e.setPriority(o);break;case 3:o=t.readBool(),e.setGrant(o);break;case 4:for(var r=t.isDelimited()?t.readPackedEnum():[t.readEnum()],n=0;n<r.length;n++)e.addPermissions(r[n]);break;case 5:for(r=t.isDelimited()?t.readPackedEnum():[t.readEnum()],n=0;n<r.length;n++)e.addCapabilities(r[n]);break;default:t.skipField()}return e},proto.caosdb.entity.v1.EntityPermissionRule.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.EntityPermissionRule.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.EntityPermissionRule.serializeBinaryToWriter=function(e,t){var o=void 0;(o=e.getRole()).length>0&&t.writeString(1,o),(o=e.getPriority())&&t.writeBool(2,o),(o=e.getGrant())&&t.writeBool(3,o),(o=e.getPermissionsList()).length>0&&t.writePackedEnum(4,o),(o=e.getCapabilitiesList()).length>0&&t.writePackedEnum(5,o)},proto.caosdb.entity.v1.EntityPermissionRule.prototype.getRole=function(){return r.Message.getFieldWithDefault(this,1,"")},proto.caosdb.entity.v1.EntityPermissionRule.prototype.setRole=function(e){return r.Message.setProto3StringField(this,1,e)},proto.caosdb.entity.v1.EntityPermissionRule.prototype.getPriority=function(){return r.Message.getBooleanFieldWithDefault(this,2,!1)},proto.caosdb.entity.v1.EntityPermissionRule.prototype.setPriority=function(e){return r.Message.setProto3BooleanField(this,2,e)},proto.caosdb.entity.v1.EntityPermissionRule.prototype.getGrant=function(){return r.Message.getBooleanFieldWithDefault(this,3,!1)},proto.caosdb.entity.v1.EntityPermissionRule.prototype.setGrant=function(e){return r.Message.setProto3BooleanField(this,3,e)},proto.caosdb.entity.v1.EntityPermissionRule.prototype.getPermissionsList=function(){return r.Message.getRepeatedField(this,4)},proto.caosdb.entity.v1.EntityPermissionRule.prototype.setPermissionsList=function(e){return r.Message.setField(this,4,e||[])},proto.caosdb.entity.v1.EntityPermissionRule.prototype.addPermissions=function(e,t){return r.Message.addToRepeatedField(this,4,e,t)},proto.caosdb.entity.v1.EntityPermissionRule.prototype.clearPermissionsList=function(){return this.setPermissionsList([])},proto.caosdb.entity.v1.EntityPermissionRule.prototype.getCapabilitiesList=function(){return r.Message.getRepeatedField(this,5)},proto.caosdb.entity.v1.EntityPermissionRule.prototype.setCapabilitiesList=function(e){return r.Message.setField(this,5,e||[])},proto.caosdb.entity.v1.EntityPermissionRule.prototype.addCapabilities=function(e,t){return r.Message.addToRepeatedField(this,5,e,t)},proto.caosdb.entity.v1.EntityPermissionRule.prototype.clearCapabilitiesList=function(){return this.setCapabilitiesList([])},r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.FileChunk.prototype.toObject=function(e){return proto.caosdb.entity.v1.FileChunk.toObject(e,this)},proto.caosdb.entity.v1.FileChunk.toObject=function(e,t){var o,r={fileTransmissionId:(o=t.getFileTransmissionId())&&proto.caosdb.entity.v1.FileTransmissionId.toObject(e,o),data:t.getData_asB64()};return e&&(r.$jspbMessageInstance=t),r}),proto.caosdb.entity.v1.FileChunk.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.FileChunk;return proto.caosdb.entity.v1.FileChunk.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.FileChunk.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)switch(t.getFieldNumber()){case 1:var o=new proto.caosdb.entity.v1.FileTransmissionId;t.readMessage(o,proto.caosdb.entity.v1.FileTransmissionId.deserializeBinaryFromReader),e.setFileTransmissionId(o);break;case 2:o=t.readBytes(),e.setData(o);break;default:t.skipField()}return e},proto.caosdb.entity.v1.FileChunk.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.FileChunk.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.FileChunk.serializeBinaryToWriter=function(e,t){var o=void 0;null!=(o=e.getFileTransmissionId())&&t.writeMessage(1,o,proto.caosdb.entity.v1.FileTransmissionId.serializeBinaryToWriter),(o=e.getData_asU8()).length>0&&t.writeBytes(2,o)},proto.caosdb.entity.v1.FileChunk.prototype.getFileTransmissionId=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.FileTransmissionId,1)},proto.caosdb.entity.v1.FileChunk.prototype.setFileTransmissionId=function(e){return r.Message.setWrapperField(this,1,e)},proto.caosdb.entity.v1.FileChunk.prototype.clearFileTransmissionId=function(){return this.setFileTransmissionId(void 0)},proto.caosdb.entity.v1.FileChunk.prototype.hasFileTransmissionId=function(){return null!=r.Message.getField(this,1)},proto.caosdb.entity.v1.FileChunk.prototype.getData=function(){return r.Message.getFieldWithDefault(this,2,"")},proto.caosdb.entity.v1.FileChunk.prototype.getData_asB64=function(){return r.Message.bytesAsB64(this.getData())},proto.caosdb.entity.v1.FileChunk.prototype.getData_asU8=function(){return r.Message.bytesAsU8(this.getData())},proto.caosdb.entity.v1.FileChunk.prototype.setData=function(e){return r.Message.setProto3BytesField(this,2,e)},r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.FileTransmissionId.prototype.toObject=function(e){return proto.caosdb.entity.v1.FileTransmissionId.toObject(e,this)},proto.caosdb.entity.v1.FileTransmissionId.toObject=function(e,t){var o={registrationId:r.Message.getFieldWithDefault(t,1,""),fileId:r.Message.getFieldWithDefault(t,2,"")};return e&&(o.$jspbMessageInstance=t),o}),proto.caosdb.entity.v1.FileTransmissionId.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.FileTransmissionId;return proto.caosdb.entity.v1.FileTransmissionId.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.FileTransmissionId.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)switch(t.getFieldNumber()){case 1:var o=t.readString();e.setRegistrationId(o);break;case 2:o=t.readString(),e.setFileId(o);break;default:t.skipField()}return e},proto.caosdb.entity.v1.FileTransmissionId.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.FileTransmissionId.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.FileTransmissionId.serializeBinaryToWriter=function(e,t){var o=void 0;(o=e.getRegistrationId()).length>0&&t.writeString(1,o),(o=e.getFileId()).length>0&&t.writeString(2,o)},proto.caosdb.entity.v1.FileTransmissionId.prototype.getRegistrationId=function(){return r.Message.getFieldWithDefault(this,1,"")},proto.caosdb.entity.v1.FileTransmissionId.prototype.setRegistrationId=function(e){return r.Message.setProto3StringField(this,1,e)},proto.caosdb.entity.v1.FileTransmissionId.prototype.getFileId=function(){return r.Message.getFieldWithDefault(this,2,"")},proto.caosdb.entity.v1.FileTransmissionId.prototype.setFileId=function(e){return r.Message.setProto3StringField(this,2,e)},r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.FileTransmissionSettings.prototype.toObject=function(e){return proto.caosdb.entity.v1.FileTransmissionSettings.toObject(e,this)},proto.caosdb.entity.v1.FileTransmissionSettings.toObject=function(e,t){var o={maxChunkSize:r.Message.getFieldWithDefault(t,1,0),maxFileSize:r.Message.getFieldWithDefault(t,2,0)};return e&&(o.$jspbMessageInstance=t),o}),proto.caosdb.entity.v1.FileTransmissionSettings.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.FileTransmissionSettings;return proto.caosdb.entity.v1.FileTransmissionSettings.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.FileTransmissionSettings.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)switch(t.getFieldNumber()){case 1:var o=t.readInt64();e.setMaxChunkSize(o);break;case 2:o=t.readInt64(),e.setMaxFileSize(o);break;default:t.skipField()}return e},proto.caosdb.entity.v1.FileTransmissionSettings.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.FileTransmissionSettings.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.FileTransmissionSettings.serializeBinaryToWriter=function(e,t){var o=void 0;0!==(o=e.getMaxChunkSize())&&t.writeInt64(1,o),0!==(o=e.getMaxFileSize())&&t.writeInt64(2,o)},proto.caosdb.entity.v1.FileTransmissionSettings.prototype.getMaxChunkSize=function(){return r.Message.getFieldWithDefault(this,1,0)},proto.caosdb.entity.v1.FileTransmissionSettings.prototype.setMaxChunkSize=function(e){return r.Message.setProto3IntField(this,1,e)},proto.caosdb.entity.v1.FileTransmissionSettings.prototype.getMaxFileSize=function(){return r.Message.getFieldWithDefault(this,2,0)},proto.caosdb.entity.v1.FileTransmissionSettings.prototype.setMaxFileSize=function(e){return r.Message.setProto3IntField(this,2,e)},r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.RegisterFileUploadRequest.prototype.toObject=function(e){return proto.caosdb.entity.v1.RegisterFileUploadRequest.toObject(e,this)},proto.caosdb.entity.v1.RegisterFileUploadRequest.toObject=function(e,t){var o={};return e&&(o.$jspbMessageInstance=t),o}),proto.caosdb.entity.v1.RegisterFileUploadRequest.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.RegisterFileUploadRequest;return proto.caosdb.entity.v1.RegisterFileUploadRequest.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.RegisterFileUploadRequest.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)t.getFieldNumber(),t.skipField();return e},proto.caosdb.entity.v1.RegisterFileUploadRequest.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.RegisterFileUploadRequest.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.RegisterFileUploadRequest.serializeBinaryToWriter=function(e,t){},r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.RegisterFileUploadResponse.prototype.toObject=function(e){return proto.caosdb.entity.v1.RegisterFileUploadResponse.toObject(e,this)},proto.caosdb.entity.v1.RegisterFileUploadResponse.toObject=function(e,t){var o,n={status:r.Message.getFieldWithDefault(t,1,0),registrationId:r.Message.getFieldWithDefault(t,2,""),uploadSettings:(o=t.getUploadSettings())&&proto.caosdb.entity.v1.FileTransmissionSettings.toObject(e,o)};return e&&(n.$jspbMessageInstance=t),n}),proto.caosdb.entity.v1.RegisterFileUploadResponse.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.RegisterFileUploadResponse;return proto.caosdb.entity.v1.RegisterFileUploadResponse.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.RegisterFileUploadResponse.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)switch(t.getFieldNumber()){case 1:var o=t.readEnum();e.setStatus(o);break;case 2:o=t.readString(),e.setRegistrationId(o);break;case 4:o=new proto.caosdb.entity.v1.FileTransmissionSettings,t.readMessage(o,proto.caosdb.entity.v1.FileTransmissionSettings.deserializeBinaryFromReader),e.setUploadSettings(o);break;default:t.skipField()}return e},proto.caosdb.entity.v1.RegisterFileUploadResponse.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.RegisterFileUploadResponse.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.RegisterFileUploadResponse.serializeBinaryToWriter=function(e,t){var o=void 0;0!==(o=e.getStatus())&&t.writeEnum(1,o),(o=e.getRegistrationId()).length>0&&t.writeString(2,o),null!=(o=e.getUploadSettings())&&t.writeMessage(4,o,proto.caosdb.entity.v1.FileTransmissionSettings.serializeBinaryToWriter)},proto.caosdb.entity.v1.RegisterFileUploadResponse.prototype.getStatus=function(){return r.Message.getFieldWithDefault(this,1,0)},proto.caosdb.entity.v1.RegisterFileUploadResponse.prototype.setStatus=function(e){return r.Message.setProto3EnumField(this,1,e)},proto.caosdb.entity.v1.RegisterFileUploadResponse.prototype.getRegistrationId=function(){return r.Message.getFieldWithDefault(this,2,"")},proto.caosdb.entity.v1.RegisterFileUploadResponse.prototype.setRegistrationId=function(e){return r.Message.setProto3StringField(this,2,e)},proto.caosdb.entity.v1.RegisterFileUploadResponse.prototype.getUploadSettings=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.FileTransmissionSettings,4)},proto.caosdb.entity.v1.RegisterFileUploadResponse.prototype.setUploadSettings=function(e){return r.Message.setWrapperField(this,4,e)},proto.caosdb.entity.v1.RegisterFileUploadResponse.prototype.clearUploadSettings=function(){return this.setUploadSettings(void 0)},proto.caosdb.entity.v1.RegisterFileUploadResponse.prototype.hasUploadSettings=function(){return null!=r.Message.getField(this,4)},r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.FileUploadRequest.prototype.toObject=function(e){return proto.caosdb.entity.v1.FileUploadRequest.toObject(e,this)},proto.caosdb.entity.v1.FileUploadRequest.toObject=function(e,t){var o,r={chunk:(o=t.getChunk())&&proto.caosdb.entity.v1.FileChunk.toObject(e,o)};return e&&(r.$jspbMessageInstance=t),r}),proto.caosdb.entity.v1.FileUploadRequest.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.FileUploadRequest;return proto.caosdb.entity.v1.FileUploadRequest.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.FileUploadRequest.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)if(1===t.getFieldNumber()){var o=new proto.caosdb.entity.v1.FileChunk;t.readMessage(o,proto.caosdb.entity.v1.FileChunk.deserializeBinaryFromReader),e.setChunk(o)}else t.skipField();return e},proto.caosdb.entity.v1.FileUploadRequest.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.FileUploadRequest.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.FileUploadRequest.serializeBinaryToWriter=function(e,t){var o;null!=(o=e.getChunk())&&t.writeMessage(1,o,proto.caosdb.entity.v1.FileChunk.serializeBinaryToWriter)},proto.caosdb.entity.v1.FileUploadRequest.prototype.getChunk=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.FileChunk,1)},proto.caosdb.entity.v1.FileUploadRequest.prototype.setChunk=function(e){return r.Message.setWrapperField(this,1,e)},proto.caosdb.entity.v1.FileUploadRequest.prototype.clearChunk=function(){return this.setChunk(void 0)},proto.caosdb.entity.v1.FileUploadRequest.prototype.hasChunk=function(){return null!=r.Message.getField(this,1)},r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.FileUploadResponse.prototype.toObject=function(e){return proto.caosdb.entity.v1.FileUploadResponse.toObject(e,this)},proto.caosdb.entity.v1.FileUploadResponse.toObject=function(e,t){var o={status:r.Message.getFieldWithDefault(t,1,0)};return e&&(o.$jspbMessageInstance=t),o}),proto.caosdb.entity.v1.FileUploadResponse.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.FileUploadResponse;return proto.caosdb.entity.v1.FileUploadResponse.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.FileUploadResponse.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)if(1===t.getFieldNumber()){var o=t.readEnum();e.setStatus(o)}else t.skipField();return e},proto.caosdb.entity.v1.FileUploadResponse.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.FileUploadResponse.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.FileUploadResponse.serializeBinaryToWriter=function(e,t){var o;0!==(o=e.getStatus())&&t.writeEnum(1,o)},proto.caosdb.entity.v1.FileUploadResponse.prototype.getStatus=function(){return r.Message.getFieldWithDefault(this,1,0)},proto.caosdb.entity.v1.FileUploadResponse.prototype.setStatus=function(e){return r.Message.setProto3EnumField(this,1,e)},r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.FileDownloadRequest.prototype.toObject=function(e){return proto.caosdb.entity.v1.FileDownloadRequest.toObject(e,this)},proto.caosdb.entity.v1.FileDownloadRequest.toObject=function(e,t){var o,r={fileTransmissionId:(o=t.getFileTransmissionId())&&proto.caosdb.entity.v1.FileTransmissionId.toObject(e,o)};return e&&(r.$jspbMessageInstance=t),r}),proto.caosdb.entity.v1.FileDownloadRequest.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.FileDownloadRequest;return proto.caosdb.entity.v1.FileDownloadRequest.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.FileDownloadRequest.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)if(1===t.getFieldNumber()){var o=new proto.caosdb.entity.v1.FileTransmissionId;t.readMessage(o,proto.caosdb.entity.v1.FileTransmissionId.deserializeBinaryFromReader),e.setFileTransmissionId(o)}else t.skipField();return e},proto.caosdb.entity.v1.FileDownloadRequest.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.FileDownloadRequest.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.FileDownloadRequest.serializeBinaryToWriter=function(e,t){var o;null!=(o=e.getFileTransmissionId())&&t.writeMessage(1,o,proto.caosdb.entity.v1.FileTransmissionId.serializeBinaryToWriter)},proto.caosdb.entity.v1.FileDownloadRequest.prototype.getFileTransmissionId=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.FileTransmissionId,1)},proto.caosdb.entity.v1.FileDownloadRequest.prototype.setFileTransmissionId=function(e){return r.Message.setWrapperField(this,1,e)},proto.caosdb.entity.v1.FileDownloadRequest.prototype.clearFileTransmissionId=function(){return this.setFileTransmissionId(void 0)},proto.caosdb.entity.v1.FileDownloadRequest.prototype.hasFileTransmissionId=function(){return null!=r.Message.getField(this,1)},r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.FileDownloadResponse.prototype.toObject=function(e){return proto.caosdb.entity.v1.FileDownloadResponse.toObject(e,this)},proto.caosdb.entity.v1.FileDownloadResponse.toObject=function(e,t){var o,n={status:r.Message.getFieldWithDefault(t,1,0),chunk:(o=t.getChunk())&&proto.caosdb.entity.v1.FileChunk.toObject(e,o)};return e&&(n.$jspbMessageInstance=t),n}),proto.caosdb.entity.v1.FileDownloadResponse.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.FileDownloadResponse;return proto.caosdb.entity.v1.FileDownloadResponse.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.FileDownloadResponse.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)switch(t.getFieldNumber()){case 1:var o=t.readEnum();e.setStatus(o);break;case 2:o=new proto.caosdb.entity.v1.FileChunk,t.readMessage(o,proto.caosdb.entity.v1.FileChunk.deserializeBinaryFromReader),e.setChunk(o);break;default:t.skipField()}return e},proto.caosdb.entity.v1.FileDownloadResponse.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.FileDownloadResponse.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.FileDownloadResponse.serializeBinaryToWriter=function(e,t){var o=void 0;0!==(o=e.getStatus())&&t.writeEnum(1,o),null!=(o=e.getChunk())&&t.writeMessage(2,o,proto.caosdb.entity.v1.FileChunk.serializeBinaryToWriter)},proto.caosdb.entity.v1.FileDownloadResponse.prototype.getStatus=function(){return r.Message.getFieldWithDefault(this,1,0)},proto.caosdb.entity.v1.FileDownloadResponse.prototype.setStatus=function(e){return r.Message.setProto3EnumField(this,1,e)},proto.caosdb.entity.v1.FileDownloadResponse.prototype.getChunk=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.FileChunk,2)},proto.caosdb.entity.v1.FileDownloadResponse.prototype.setChunk=function(e){return r.Message.setWrapperField(this,2,e)},proto.caosdb.entity.v1.FileDownloadResponse.prototype.clearChunk=function(){return this.setChunk(void 0)},proto.caosdb.entity.v1.FileDownloadResponse.prototype.hasChunk=function(){return null!=r.Message.getField(this,2)},proto.caosdb.entity.v1.AtomicDataType={ATOMIC_DATA_TYPE_UNSPECIFIED:0,ATOMIC_DATA_TYPE_TEXT:1,ATOMIC_DATA_TYPE_DOUBLE:2,ATOMIC_DATA_TYPE_DATETIME:3,ATOMIC_DATA_TYPE_INTEGER:4,ATOMIC_DATA_TYPE_BOOLEAN:5},proto.caosdb.entity.v1.SpecialValue={SPECIAL_VALUE_UNSPECIFIED:0,SPECIAL_VALUE_EMPTY_STRING:1},proto.caosdb.entity.v1.EntityRole={ENTITY_ROLE_UNSPECIFIED:0,ENTITY_ROLE_RECORD_TYPE:1,ENTITY_ROLE_RECORD:2,ENTITY_ROLE_PROPERTY:3,ENTITY_ROLE_FILE:4},proto.caosdb.entity.v1.MessageCode={MESSAGE_CODE_UNSPECIFIED:0,MESSAGE_CODE_UNKNOWN:1,MESSAGE_CODE_ENTITY_DOES_NOT_EXIST:2,MESSAGE_CODE_ENTITY_HAS_NO_PROPERTIES:3,MESSAGE_CODE_ENTITY_HAS_BEEN_DELETED_SUCCESSFULLY:4,MESSAGE_CODE_ENTITY_HAS_UNQUALIFIED_PROPERTIES:5,MESSAGE_CODE_ENTITY_HAS_UNQUALIFIED_PARENTS:6,MESSAGE_CODE_ENTITY_HAS_NO_ID:7,MESSAGE_CODE_REQUIRED_BY_PERSISTENT_ENTITY:8,MESSAGE_CODE_PROPERTY_HAS_NO_DATA_TYPE:9,MESSAGE_CODE_ENTITY_HAS_NO_DESCRIPTION:10,MESSAGE_CODE_ENTITY_HAS_NO_NAME:11,MESSAGE_CODE_OBLIGATORY_PROPERTY_MISSING:12,MESSAGE_CODE_ENTITY_HAS_NO_PARENTS:13,MESSAGE_CODE_FILE_HAS_NO_TARGET_PATH:14,MESSAGE_CODE_TARGET_PATH_NOT_ALLOWED:15,MESSAGE_CODE_TARGET_PATH_EXISTS:16,MESSAGE_CODE_PROPERTY_HAS_NO_UNIT:17,MESSAGE_CODE_CANNOT_PARSE_VALUE:18,MESSAGE_CODE_CHECKSUM_TEST_FAILED:19,MESSAGE_CODE_SIZE_TEST_FAILED:20,MESSAGE_CODE_CANNOT_CREATE_PARENT_FOLDER:21,MESSAGE_CODE_FILE_HAS_NOT_BEEN_UPLOAED:22,MESSAGE_CODE_CANNOT_MOVE_FILE_TO_TARGET_PATH:23,MESSAGE_CODE_CANNOT_PARSE_DATETIME_VALUE:24,MESSAGE_CODE_CANNOT_PARSE_DOUBLE_VALUE:25,MESSAGE_CODE_CANNOT_PARSE_INT_VALUE:26,MESSAGE_CODE_CANNOT_PARSE_BOOL_VALUE:27,MESSAGE_CODE_FILE_NOT_FOUND:28,MESSAGE_CODE_WARNING_OCCURED:29,MESSAGE_CODE_ENTITY_NAME_IS_NOT_UNIQUE:30,MESSAGE_CODE_QUERY_EXCEPTION:31,MESSAGE_CODE_TRANSACTION_ROLL_BACK:32,MESSAGE_CODE_UNKNOWN_UNIT:34,MESSAGE_CODE_AUTHORIZATION_ERROR:35,MESSAGE_CODE_REFERENCE_IS_NOT_ALLOWED_BY_DATA_TYPE:36,MESSAGE_CODE_ENTITY_NAME_DUPLICATES:37,MESSAGE_CODE_DATA_TYPE_NAME_DUPLICATES:38,MESSAGE_CODE_ENTITY_HAS_NO_NAME_OR_ID:39,MESSAGE_CODE_AFFILIATION_ERROR:40,MESSAGE_CODE_QUERY_PARSING_ERROR:41,MESSAGE_CODE_NAME_PROPERTIES_MUST_BE_TEXT:42,MESSAGE_CODE_PARENT_DUPLICATES_WARNING:43,MESSAGE_CODE_PARENT_DUPLICATES_ERROR:44,MESSAGE_CODE_ATOMICITY_ERROR:45,MESSAGE_CODE_NO_SUCH_ENTITY_ROLE:46,MESSAGE_CODE_REQUIRED_BY_UNQUALIFIED:47,MESSAGE_CODE_ENTITY_HAS_UNQUALIFIED_REFERENCE:48,MESSAGE_CODE_REFERENCED_ENTITY_DOES_NOT_EXIST:49,MESSAGE_CODE_REFERENCE_NAME_DUPLICATES:50,MESSAGE_CODE_DATA_TYPE_INHERITANCE_AMBIGUOUS:51,MESSAGE_CODE_DATA_TYPE_DOES_NOT_ACCEPT_COLLECTION_VALUES:52,MESSAGE_CODE_CANNOT_PARSE_UNIT:53,MESSAGE_CODE_ADDITIONAL_PROPERTY:54,MESSAGE_CODE_PROPERTY_WITH_DATA_TYPE_OVERRIDE:55,MESSAGE_CODE_PROPERTY_WITH_DESCRIPTION_OVERRIDE:56,MESSAGE_CODE_PROPERTY_WITH_NAME_OVERRIDE:57,MESSAGE_CODE_INTEGER_VALUE_OUT_OF_RANGE:58,MESSAGE_CODE_INTEGRITY_VIOLATION:59},proto.caosdb.entity.v1.Importance={IMPORTANCE_UNSPECIFIED:0,IMPORTANCE_OBLIGATORY:1,IMPORTANCE_RECOMMENDED:2,IMPORTANCE_SUGGESTED:3,IMPORTANCE_FIX:4},proto.caosdb.entity.v1.EntityAclPermission={ENTITY_ACL_PERMISSION_UNSPECIFIED:0,ENTITY_ACL_PERMISSION_EDIT_ACL:1,ENTITY_ACL_PERMISSION_EDIT_PRIORITY_ACL:2},proto.caosdb.entity.v1.EntityPermissionRuleCapability={ENTITY_PERMISSION_RULE_CAPABILITY_UNSPECIFIED:0,ENTITY_PERMISSION_RULE_CAPABILITY_DELETE:1},proto.caosdb.entity.v1.EntityPermission={ENTITY_PERMISSION_UNSPECIFIED:0,ENTITY_PERMISSION_RETRIEVE_ENTITY:1,ENTITY_PERMISSION_RETRIEVE_ACL:2,ENTITY_PERMISSION_RETRIEVE_HISTORY:3,ENTITY_PERMISSION_RETRIEVE_OWNER:4,ENTITY_PERMISSION_RETRIEVE_FILE:5,ENTITY_PERMISSION_DELETE:6,ENTITY_PERMISSION_EDIT_ACL:7,ENTITY_PERMISSION_UPDATE_DESCRIPTION:8,ENTITY_PERMISSION_UPDATE_VALUE:9,ENTITY_PERMISSION_UPDATE_ROLE:10,ENTITY_PERMISSION_UPDATE_REMOVE_PARENT:11,ENTITY_PERMISSION_UPDATE_ADD_PARENT:12,ENTITY_PERMISSION_UPDATE_REMOVE_PROPERTY:13,ENTITY_PERMISSION_UPDATE_ADD_PROPERTY:14,ENTITY_PERMISSION_UPDATE_NAME:15,ENTITY_PERMISSION_UPDATE_DATA_TYPE:16,ENTITY_PERMISSION_UPDATE_REMOVE_FILE:17,ENTITY_PERMISSION_UPDATE_ADD_FILE:18,ENTITY_PERMISSION_UPDATE_MOVE_FILE:19,ENTITY_PERMISSION_USE_AS_REFERENCE:20,ENTITY_PERMISSION_USE_AS_PROPERTY:21,ENTITY_PERMISSION_USE_AS_PARENT:22,ENTITY_PERMISSION_USE_AS_DATA_TYPE:23,ENTITY_PERMISSION_UPDATE_QUERY_TEMPLATE_DEFINITION:24},proto.caosdb.entity.v1.RegistrationStatus={REGISTRATION_STATUS_UNSPECIFIED:0,REGISTRATION_STATUS_ACCEPTED:1,REGISTRATION_STATUS_REJECTED:2},proto.caosdb.entity.v1.TransmissionStatus={TRANSMISSION_STATUS_UNSPECIFIED:0,TRANSMISSION_STATUS_SUCCESS:1,TRANSMISSION_STATUS_ERROR:2,TRANSMISSION_STATUS_GO_ON:3},n.object.extend(t,proto.caosdb.entity.v1)},19:function(__unused_webpack_module,exports,__nested_webpack_require_166766__){var $jscomp=$jscomp||{};$jscomp.scope={},$jscomp.findInternal=function(e,t,o){e instanceof String&&(e=String(e));for(var r=e.length,n=0;n<r;n++){var s=e[n];if(t.call(o,s,n,e))return{i:n,v:s}}return{i:-1,v:void 0}},$jscomp.ASSUME_ES5=!1,$jscomp.ASSUME_NO_NATIVE_MAP=!1,$jscomp.ASSUME_NO_NATIVE_SET=!1,$jscomp.SIMPLE_FROUND_POLYFILL=!1,$jscomp.defineProperty=$jscomp.ASSUME_ES5||"function"==typeof Object.defineProperties?Object.defineProperty:function(e,t,o){e!=Array.prototype&&e!=Object.prototype&&(e[t]=o.value)},$jscomp.getGlobal=function(e){return"undefined"!=typeof window&&window===e?e:void 0!==__nested_webpack_require_166766__.g&&null!=__nested_webpack_require_166766__.g?__nested_webpack_require_166766__.g:e},$jscomp.global=$jscomp.getGlobal(this),$jscomp.polyfill=function(e,t,o,r){if(t){for(o=$jscomp.global,e=e.split("."),r=0;r<e.length-1;r++){var n=e[r];n in o||(o[n]={}),o=o[n]}(t=t(r=o[e=e[e.length-1]]))!=r&&null!=t&&$jscomp.defineProperty(o,e,{configurable:!0,writable:!0,value:t})}},$jscomp.polyfill("Array.prototype.findIndex",(function(e){return e||function(e,t){return $jscomp.findInternal(this,e,t).i}}),"es6","es3"),$jscomp.checkStringArgs=function(e,t,o){if(null==e)throw new TypeError("The \'this\' value for String.prototype."+o+" must not be null or undefined");if(t instanceof RegExp)throw new TypeError("First argument to String.prototype."+o+" must not be a regular expression");return e+""},$jscomp.polyfill("String.prototype.endsWith",(function(e){return e||function(e,t){var o=$jscomp.checkStringArgs(this,e,"endsWith");e+="",void 0===t&&(t=o.length),t=Math.max(0,Math.min(0|t,o.length));for(var r=e.length;0<r&&0<t;)if(o[--t]!=e[--r])return!1;return 0>=r}}),"es6","es3"),$jscomp.polyfill("Array.prototype.find",(function(e){return e||function(e,t){return $jscomp.findInternal(this,e,t).v}}),"es6","es3"),$jscomp.polyfill("String.prototype.startsWith",(function(e){return e||function(e,t){var o=$jscomp.checkStringArgs(this,e,"startsWith");e+="";var r=o.length,n=e.length;t=Math.max(0,Math.min(0|t,o.length));for(var s=0;s<n&&t<r;)if(o[t++]!=e[s++])return!1;return s>=n}}),"es6","es3"),$jscomp.polyfill("String.prototype.repeat",(function(e){return e||function(e){var t=$jscomp.checkStringArgs(this,null,"repeat");if(0>e||1342177279<e)throw new RangeError("Invalid count value");e|=0;for(var o="";e;)1&e&&(o+=t),(e>>>=1)&&(t+=t);return o}}),"es6","es3");var COMPILED=!0,goog=goog||{};goog.global=this||self,goog.isDef=function(e){return void 0!==e},goog.isString=function(e){return"string"==typeof e},goog.isBoolean=function(e){return"boolean"==typeof e},goog.isNumber=function(e){return"number"==typeof e},goog.exportPath_=function(e,t,o){e=e.split("."),o=o||goog.global,e[0]in o||void 0===o.execScript||o.execScript("var "+e[0]);for(var r;e.length&&(r=e.shift());)!e.length&&goog.isDef(t)?o[r]=t:o=o[r]&&o[r]!==Object.prototype[r]?o[r]:o[r]={}},goog.define=function(e,t){if(!COMPILED){var o=goog.global.CLOSURE_UNCOMPILED_DEFINES,r=goog.global.CLOSURE_DEFINES;o&&void 0===o.nodeType&&Object.prototype.hasOwnProperty.call(o,e)?t=o[e]:r&&void 0===r.nodeType&&Object.prototype.hasOwnProperty.call(r,e)&&(t=r[e])}return t},goog.FEATURESET_YEAR=2012,goog.DEBUG=!0,goog.LOCALE="en",goog.TRUSTED_SITE=!0,goog.STRICT_MODE_COMPATIBLE=!1,goog.DISALLOW_TEST_ONLY_CODE=COMPILED&&!goog.DEBUG,goog.ENABLE_CHROME_APP_SAFE_SCRIPT_LOADING=!1,goog.provide=function(e){if(goog.isInModuleLoader_())throw Error("goog.provide cannot be used within a module.");if(!COMPILED&&goog.isProvided_(e))throw Error(\'Namespace "\'+e+\'" already declared.\');goog.constructNamespace_(e)},goog.constructNamespace_=function(e,t){if(!COMPILED){delete goog.implicitNamespaces_[e];for(var o=e;(o=o.substring(0,o.lastIndexOf(".")))&&!goog.getObjectByName(o);)goog.implicitNamespaces_[o]=!0}goog.exportPath_(e,t)},goog.getScriptNonce=function(e){return e&&e!=goog.global?goog.getScriptNonce_(e.document):(null===goog.cspNonce_&&(goog.cspNonce_=goog.getScriptNonce_(goog.global.document)),goog.cspNonce_)},goog.NONCE_PATTERN_=/^[\\w+/_-]+[=]{0,2}$/,goog.cspNonce_=null,goog.getScriptNonce_=function(e){return(e=e.querySelector&&e.querySelector("script[nonce]"))&&(e=e.nonce||e.getAttribute("nonce"))&&goog.NONCE_PATTERN_.test(e)?e:""},goog.VALID_MODULE_RE_=/^[a-zA-Z_$][a-zA-Z0-9._$]*$/,goog.module=function(e){if(!goog.isString(e)||!e||-1==e.search(goog.VALID_MODULE_RE_))throw Error("Invalid module identifier");if(!goog.isInGoogModuleLoader_())throw Error("Module "+e+" has been loaded incorrectly. Note, modules cannot be loaded as normal scripts. They require some kind of pre-processing step. You\'re likely trying to load a module via a script tag or as a part of a concatenated bundle without rewriting the module. For more info see: https://github.com/google/closure-library/wiki/goog.module:-an-ES6-module-like-alternative-to-goog.provide.");if(goog.moduleLoaderState_.moduleName)throw Error("goog.module may only be called once per module.");if(goog.moduleLoaderState_.moduleName=e,!COMPILED){if(goog.isProvided_(e))throw Error(\'Namespace "\'+e+\'" already declared.\');delete goog.implicitNamespaces_[e]}},goog.module.get=function(e){return goog.module.getInternal_(e)},goog.module.getInternal_=function(e){if(!COMPILED){if(e in goog.loadedModules_)return goog.loadedModules_[e].exports;if(!goog.implicitNamespaces_[e])return null!=(e=goog.getObjectByName(e))?e:null}return null},goog.ModuleType={ES6:"es6",GOOG:"goog"},goog.moduleLoaderState_=null,goog.isInModuleLoader_=function(){return goog.isInGoogModuleLoader_()||goog.isInEs6ModuleLoader_()},goog.isInGoogModuleLoader_=function(){return!!goog.moduleLoaderState_&&goog.moduleLoaderState_.type==goog.ModuleType.GOOG},goog.isInEs6ModuleLoader_=function(){if(goog.moduleLoaderState_&&goog.moduleLoaderState_.type==goog.ModuleType.ES6)return!0;var e=goog.global.$jscomp;return!!e&&"function"==typeof e.getCurrentModulePath&&!!e.getCurrentModulePath()},goog.module.declareLegacyNamespace=function(){if(!COMPILED&&!goog.isInGoogModuleLoader_())throw Error("goog.module.declareLegacyNamespace must be called from within a goog.module");if(!COMPILED&&!goog.moduleLoaderState_.moduleName)throw Error("goog.module must be called prior to goog.module.declareLegacyNamespace.");goog.moduleLoaderState_.declareLegacyNamespace=!0},goog.declareModuleId=function(e){if(!COMPILED){if(!goog.isInEs6ModuleLoader_())throw Error("goog.declareModuleId may only be called from within an ES6 module");if(goog.moduleLoaderState_&&goog.moduleLoaderState_.moduleName)throw Error("goog.declareModuleId may only be called once per module.");if(e in goog.loadedModules_)throw Error(\'Module with namespace "\'+e+\'" already exists.\')}if(goog.moduleLoaderState_)goog.moduleLoaderState_.moduleName=e;else{var t=goog.global.$jscomp;if(!t||"function"!=typeof t.getCurrentModulePath)throw Error(\'Module with namespace "\'+e+\'" has been loaded incorrectly.\');t=t.require(t.getCurrentModulePath()),goog.loadedModules_[e]={exports:t,type:goog.ModuleType.ES6,moduleId:e}}},goog.setTestOnly=function(e){if(goog.DISALLOW_TEST_ONLY_CODE)throw e=e||"",Error("Importing test-only code into non-debug environment"+(e?": "+e:"."))},goog.forwardDeclare=function(e){},COMPILED||(goog.isProvided_=function(e){return e in goog.loadedModules_||!goog.implicitNamespaces_[e]&&goog.isDefAndNotNull(goog.getObjectByName(e))},goog.implicitNamespaces_={"goog.module":!0}),goog.getObjectByName=function(e,t){e=e.split("."),t=t||goog.global;for(var o=0;o<e.length;o++)if(t=t[e[o]],!goog.isDefAndNotNull(t))return null;return t},goog.globalize=function(e,t){for(var o in t=t||goog.global,e)t[o]=e[o]},goog.addDependency=function(e,t,o,r){!COMPILED&&goog.DEPENDENCIES_ENABLED&&goog.debugLoader_.addDependency(e,t,o,r)},goog.ENABLE_DEBUG_LOADER=!0,goog.logToConsole_=function(e){goog.global.console&&goog.global.console.error(e)},goog.require=function(e){if(!COMPILED){if(goog.ENABLE_DEBUG_LOADER&&goog.debugLoader_.requested(e),goog.isProvided_(e)){if(goog.isInModuleLoader_())return goog.module.getInternal_(e)}else if(goog.ENABLE_DEBUG_LOADER){var t=goog.moduleLoaderState_;goog.moduleLoaderState_=null;try{goog.debugLoader_.load_(e)}finally{goog.moduleLoaderState_=t}}return null}},goog.requireType=function(e){return{}},goog.basePath="",goog.nullFunction=function(){},goog.abstractMethod=function(){throw Error("unimplemented abstract method")},goog.addSingletonGetter=function(e){e.instance_=void 0,e.getInstance=function(){return e.instance_?e.instance_:(goog.DEBUG&&(goog.instantiatedSingletons_[goog.instantiatedSingletons_.length]=e),e.instance_=new e)}},goog.instantiatedSingletons_=[],goog.LOAD_MODULE_USING_EVAL=!0,goog.SEAL_MODULE_EXPORTS=goog.DEBUG,goog.loadedModules_={},goog.DEPENDENCIES_ENABLED=!COMPILED&&goog.ENABLE_DEBUG_LOADER,goog.TRANSPILE="detect",goog.ASSUME_ES_MODULES_TRANSPILED=!1,goog.TRANSPILE_TO_LANGUAGE="",goog.TRANSPILER="transpile.js",goog.hasBadLetScoping=null,goog.useSafari10Workaround=function(){if(null==goog.hasBadLetScoping){try{var a=!eval(\'"use strict";let x = 1; function f() { return typeof x; };f() == "number";\')}catch(e){a=!1}goog.hasBadLetScoping=a}return goog.hasBadLetScoping},goog.workaroundSafari10EvalBug=function(e){return"(function(){"+e+"\\n;})();\\n"},goog.loadModule=function(e){var t=goog.moduleLoaderState_;try{if(goog.moduleLoaderState_={moduleName:"",declareLegacyNamespace:!1,type:goog.ModuleType.GOOG},goog.isFunction(e))var o=e.call(void 0,{});else{if(!goog.isString(e))throw Error("Invalid module definition");goog.useSafari10Workaround()&&(e=goog.workaroundSafari10EvalBug(e)),o=goog.loadModuleFromSource_.call(void 0,e)}var r=goog.moduleLoaderState_.moduleName;if(!goog.isString(r)||!r)throw Error(\'Invalid module name "\'+r+\'"\');goog.moduleLoaderState_.declareLegacyNamespace?goog.constructNamespace_(r,o):goog.SEAL_MODULE_EXPORTS&&Object.seal&&"object"==typeof o&&null!=o&&Object.seal(o),goog.loadedModules_[r]={exports:o,type:goog.ModuleType.GOOG,moduleId:goog.moduleLoaderState_.moduleName}}finally{goog.moduleLoaderState_=t}},goog.loadModuleFromSource_=function(a){return eval(a),{}},goog.normalizePath_=function(e){e=e.split("/");for(var t=0;t<e.length;)"."==e[t]?e.splice(t,1):t&&".."==e[t]&&e[t-1]&&".."!=e[t-1]?e.splice(--t,2):t++;return e.join("/")},goog.loadFileSync_=function(e){if(goog.global.CLOSURE_LOAD_FILE_SYNC)return goog.global.CLOSURE_LOAD_FILE_SYNC(e);try{var t=new goog.global.XMLHttpRequest;return t.open("get",e,!1),t.send(),0==t.status||200==t.status?t.responseText:null}catch(e){return null}},goog.transpile_=function(e,t,o){var r=goog.global.$jscomp;r||(goog.global.$jscomp=r={});var n=r.transpile;if(!n){var s=goog.basePath+goog.TRANSPILER,i=goog.loadFileSync_(s);if(i){if(function(){(0,eval)(i+"\\n//# sourceURL="+s)}.call(goog.global),goog.global.$gwtExport&&goog.global.$gwtExport.$jscomp&&!goog.global.$gwtExport.$jscomp.transpile)throw Error(\'The transpiler did not properly export the "transpile" method. $gwtExport: \'+JSON.stringify(goog.global.$gwtExport));goog.global.$jscomp.transpile=goog.global.$gwtExport.$jscomp.transpile,n=(r=goog.global.$jscomp).transpile}}return n||(n=r.transpile=function(e,t){return goog.logToConsole_(t+" requires transpilation but no transpiler was found."),e}),n(e,t,o)},goog.typeOf=function(e){var t=typeof e;if("object"==t){if(!e)return"null";if(e instanceof Array)return"array";if(e instanceof Object)return t;var o=Object.prototype.toString.call(e);if("[object Window]"==o)return"object";if("[object Array]"==o||"number"==typeof e.length&&void 0!==e.splice&&void 0!==e.propertyIsEnumerable&&!e.propertyIsEnumerable("splice"))return"array";if("[object Function]"==o||void 0!==e.call&&void 0!==e.propertyIsEnumerable&&!e.propertyIsEnumerable("call"))return"function"}else if("function"==t&&void 0===e.call)return"object";return t},goog.isNull=function(e){return null===e},goog.isDefAndNotNull=function(e){return null!=e},goog.isArray=function(e){return"array"==goog.typeOf(e)},goog.isArrayLike=function(e){var t=goog.typeOf(e);return"array"==t||"object"==t&&"number"==typeof e.length},goog.isDateLike=function(e){return goog.isObject(e)&&"function"==typeof e.getFullYear},goog.isFunction=function(e){return"function"==goog.typeOf(e)},goog.isObject=function(e){var t=typeof e;return"object"==t&&null!=e||"function"==t},goog.getUid=function(e){return e[goog.UID_PROPERTY_]||(e[goog.UID_PROPERTY_]=++goog.uidCounter_)},goog.hasUid=function(e){return!!e[goog.UID_PROPERTY_]},goog.removeUid=function(e){null!==e&&"removeAttribute"in e&&e.removeAttribute(goog.UID_PROPERTY_);try{delete e[goog.UID_PROPERTY_]}catch(e){}},goog.UID_PROPERTY_="closure_uid_"+(1e9*Math.random()>>>0),goog.uidCounter_=0,goog.getHashCode=goog.getUid,goog.removeHashCode=goog.removeUid,goog.cloneObject=function(e){var t=goog.typeOf(e);if("object"==t||"array"==t){if("function"==typeof e.clone)return e.clone();for(var o in t="array"==t?[]:{},e)t[o]=goog.cloneObject(e[o]);return t}return e},goog.bindNative_=function(e,t,o){return e.call.apply(e.bind,arguments)},goog.bindJs_=function(e,t,o){if(!e)throw Error();if(2<arguments.length){var r=Array.prototype.slice.call(arguments,2);return function(){var o=Array.prototype.slice.call(arguments);return Array.prototype.unshift.apply(o,r),e.apply(t,o)}}return function(){return e.apply(t,arguments)}},goog.bind=function(e,t,o){return Function.prototype.bind&&-1!=Function.prototype.bind.toString().indexOf("native code")?goog.bind=goog.bindNative_:goog.bind=goog.bindJs_,goog.bind.apply(null,arguments)},goog.partial=function(e,t){var o=Array.prototype.slice.call(arguments,1);return function(){var t=o.slice();return t.push.apply(t,arguments),e.apply(this,t)}},goog.mixin=function(e,t){for(var o in t)e[o]=t[o]},goog.now=goog.TRUSTED_SITE&&Date.now||function(){return+new Date},goog.globalEval=function(e){if(goog.global.execScript)goog.global.execScript(e,"JavaScript");else{if(!goog.global.eval)throw Error("goog.globalEval not available");if(null==goog.evalWorksForGlobals_){try{goog.global.eval("var _evalTest_ = 1;")}catch(e){}if(void 0!==goog.global._evalTest_){try{delete goog.global._evalTest_}catch(e){}goog.evalWorksForGlobals_=!0}else goog.evalWorksForGlobals_=!1}if(goog.evalWorksForGlobals_)goog.global.eval(e);else{var t=goog.global.document,o=t.createElement("SCRIPT");o.type="text/javascript",o.defer=!1,o.appendChild(t.createTextNode(e)),t.head.appendChild(o),t.head.removeChild(o)}}},goog.evalWorksForGlobals_=null,goog.getCssName=function(e,t){if("."==String(e).charAt(0))throw Error(\'className passed in goog.getCssName must not start with ".". You passed: \'+e);var o=function(e){return goog.cssNameMapping_[e]||e},r=function(e){e=e.split("-");for(var t=[],r=0;r<e.length;r++)t.push(o(e[r]));return t.join("-")};return r=goog.cssNameMapping_?"BY_WHOLE"==goog.cssNameMappingStyle_?o:r:function(e){return e},e=t?e+"-"+r(t):r(e),goog.global.CLOSURE_CSS_NAME_MAP_FN?goog.global.CLOSURE_CSS_NAME_MAP_FN(e):e},goog.setCssNameMapping=function(e,t){goog.cssNameMapping_=e,goog.cssNameMappingStyle_=t},!COMPILED&&goog.global.CLOSURE_CSS_NAME_MAPPING&&(goog.cssNameMapping_=goog.global.CLOSURE_CSS_NAME_MAPPING),goog.getMsg=function(e,t,o){return o&&o.html&&(e=e.replace(/</g,"<")),t&&(e=e.replace(/\\{\\$([^}]+)}/g,(function(e,o){return null!=t&&o in t?t[o]:e}))),e},goog.getMsgWithFallback=function(e,t){return e},goog.exportSymbol=function(e,t,o){goog.exportPath_(e,t,o)},goog.exportProperty=function(e,t,o){e[t]=o},goog.inherits=function(e,t){function o(){}o.prototype=t.prototype,e.superClass_=t.prototype,e.prototype=new o,e.prototype.constructor=e,e.base=function(e,o,r){for(var n=Array(arguments.length-2),s=2;s<arguments.length;s++)n[s-2]=arguments[s];return t.prototype[o].apply(e,n)}},goog.base=function(e,t,o){var r=arguments.callee.caller;if(goog.STRICT_MODE_COMPATIBLE||goog.DEBUG&&!r)throw Error("arguments.caller not defined. goog.base() cannot be used with strict mode code. See http://www.ecma-international.org/ecma-262/5.1/#sec-C");if(void 0!==r.superClass_){for(var n=Array(arguments.length-1),s=1;s<arguments.length;s++)n[s-1]=arguments[s];return r.superClass_.constructor.apply(e,n)}if("string"!=typeof t&&"symbol"!=typeof t)throw Error("method names provided to goog.base must be a string or a symbol");for(n=Array(arguments.length-2),s=2;s<arguments.length;s++)n[s-2]=arguments[s];s=!1;for(var i=e.constructor.prototype;i;i=Object.getPrototypeOf(i))if(i[t]===r)s=!0;else if(s)return i[t].apply(e,n);if(e[t]===r)return e.constructor.prototype[t].apply(e,n);throw Error("goog.base called from a method of one name to a method of a different name")},goog.scope=function(e){if(goog.isInModuleLoader_())throw Error("goog.scope is not supported within a module.");e.call(goog.global)},COMPILED||(goog.global.COMPILED=COMPILED),goog.defineClass=function(e,t){var o=t.constructor,r=t.statics;return o&&o!=Object.prototype.constructor||(o=function(){throw Error("cannot instantiate an interface (no constructor defined).")}),o=goog.defineClass.createSealingConstructor_(o,e),e&&goog.inherits(o,e),delete t.constructor,delete t.statics,goog.defineClass.applyProperties_(o.prototype,t),null!=r&&(r instanceof Function?r(o):goog.defineClass.applyProperties_(o,r)),o},goog.defineClass.SEAL_CLASS_INSTANCES=goog.DEBUG,goog.defineClass.createSealingConstructor_=function(e,t){if(!goog.defineClass.SEAL_CLASS_INSTANCES)return e;var o=!goog.defineClass.isUnsealable_(t),r=function(){var t=e.apply(this,arguments)||this;return t[goog.UID_PROPERTY_]=t[goog.UID_PROPERTY_],this.constructor===r&&o&&Object.seal instanceof Function&&Object.seal(t),t};return r},goog.defineClass.isUnsealable_=function(e){return e&&e.prototype&&e.prototype[goog.UNSEALABLE_CONSTRUCTOR_PROPERTY_]},goog.defineClass.OBJECT_PROTOTYPE_FIELDS_="constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf".split(" "),goog.defineClass.applyProperties_=function(e,t){for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);for(var r=0;r<goog.defineClass.OBJECT_PROTOTYPE_FIELDS_.length;r++)o=goog.defineClass.OBJECT_PROTOTYPE_FIELDS_[r],Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o])},goog.tagUnsealableClass=function(e){!COMPILED&&goog.defineClass.SEAL_CLASS_INSTANCES&&(e.prototype[goog.UNSEALABLE_CONSTRUCTOR_PROPERTY_]=!0)},goog.UNSEALABLE_CONSTRUCTOR_PROPERTY_="goog_defineClass_legacy_unsealable",!COMPILED&&goog.DEPENDENCIES_ENABLED&&(goog.inHtmlDocument_=function(){var e=goog.global.document;return null!=e&&"write"in e},goog.isDocumentLoading_=function(){var e=goog.global.document;return e.attachEvent?"complete"!=e.readyState:"loading"==e.readyState},goog.findBasePath_=function(){if(goog.isDef(goog.global.CLOSURE_BASE_PATH)&&goog.isString(goog.global.CLOSURE_BASE_PATH))goog.basePath=goog.global.CLOSURE_BASE_PATH;else if(goog.inHtmlDocument_()){var e=goog.global.document,t=e.currentScript;for(t=(e=t?[t]:e.getElementsByTagName("SCRIPT")).length-1;0<=t;--t){var o=e[t].src,r=o.lastIndexOf("?");if(r=-1==r?o.length:r,"base.js"==o.substr(r-7,7)){goog.basePath=o.substr(0,r-7);break}}}},goog.findBasePath_(),goog.Transpiler=function(){this.requiresTranspilation_=null,this.transpilationTarget_=goog.TRANSPILE_TO_LANGUAGE},goog.Transpiler.prototype.createRequiresTranspilation_=function(){function a(t,o){e?d[t]=!0:o()?(c=t,d[t]=!1):e=d[t]=!0}function b(a){try{return!!eval(a)}catch(e){return!1}}var c="es3",d={es3:!1},e=!1,f=goog.global.navigator&&goog.global.navigator.userAgent?goog.global.navigator.userAgent:"";return a("es5",(function(){return b("[1,].length==1")})),a("es6",(function(){return!f.match(/Edge\\/(\\d+)(\\.\\d)*/i)&&b(\'(()=>{"use strict";class X{constructor(){if(new.target!=String)throw 1;this.x=42}}let q=Reflect.construct(X,[],String);if(q.x!=42||!(q instanceof String))throw 1;for(const a of[2,3]){if(a==2)continue;function f(z={a}){let a=0;return z.a}{function f(){return 0;}}return f()==3}})()\')})),a("es7",(function(){return b("2 ** 2 == 4")})),a("es8",(function(){return b("async () => 1, true")})),a("es9",(function(){return b("({...rest} = {}), true")})),a("es_next",(function(){return!1})),{target:c,map:d}},goog.Transpiler.prototype.needsTranspile=function(e,t){if("always"==goog.TRANSPILE)return!0;if("never"==goog.TRANSPILE)return!1;if(!this.requiresTranspilation_){var o=this.createRequiresTranspilation_();this.requiresTranspilation_=o.map,this.transpilationTarget_=this.transpilationTarget_||o.target}if(e in this.requiresTranspilation_)return!!this.requiresTranspilation_[e]||!(!goog.inHtmlDocument_()||"es6"!=t||"noModule"in goog.global.document.createElement("script"));throw Error("Unknown language mode: "+e)},goog.Transpiler.prototype.transpile=function(e,t){return goog.transpile_(e,t,this.transpilationTarget_)},goog.transpiler_=new goog.Transpiler,goog.protectScriptTag_=function(e){return e.replace(/<\\/(SCRIPT)/gi,"\\\\x3c/$1")},goog.DebugLoader_=function(){this.dependencies_={},this.idToPath_={},this.written_={},this.loadingDeps_=[],this.depsToLoad_=[],this.paused_=!1,this.factory_=new goog.DependencyFactory(goog.transpiler_),this.deferredCallbacks_={},this.deferredQueue_=[]},goog.DebugLoader_.prototype.bootstrap=function(e,t){function o(){r&&(goog.global.setTimeout(r,0),r=null)}var r=t;if(e.length){t=[];for(var n=0;n<e.length;n++){var s=this.getPathFromDeps_(e[n]);if(!s)throw Error("Unregonized namespace: "+e[n]);t.push(this.dependencies_[s])}s=goog.require;var i=0;for(n=0;n<e.length;n++)s(e[n]),t[n].onLoad((function(){++i==e.length&&o()}))}else o()},goog.DebugLoader_.prototype.loadClosureDeps=function(){this.depsToLoad_.push(this.factory_.createDependency(goog.normalizePath_(goog.basePath+"deps.js"),"deps.js",[],[],{},!1)),this.loadDeps_()},goog.DebugLoader_.prototype.requested=function(e,t){(e=this.getPathFromDeps_(e))&&(t||this.areDepsLoaded_(this.dependencies_[e].requires))&&(t=this.deferredCallbacks_[e])&&(delete this.deferredCallbacks_[e],t())},goog.DebugLoader_.prototype.setDependencyFactory=function(e){this.factory_=e},goog.DebugLoader_.prototype.load_=function(e){if(!this.getPathFromDeps_(e))throw e="goog.require could not find: "+e,goog.logToConsole_(e),Error(e);var t=this,o=[],r=function(e){var n=t.getPathFromDeps_(e);if(!n)throw Error("Bad dependency path or symbol: "+e);if(!t.written_[n]){for(t.written_[n]=!0,e=t.dependencies_[n],n=0;n<e.requires.length;n++)goog.isProvided_(e.requires[n])||r(e.requires[n]);o.push(e)}};r(e),e=!!this.depsToLoad_.length,this.depsToLoad_=this.depsToLoad_.concat(o),this.paused_||e||this.loadDeps_()},goog.DebugLoader_.prototype.loadDeps_=function(){for(var e=this,t=this.paused_;this.depsToLoad_.length&&!t;)!function(){var o=!1,r=e.depsToLoad_.shift(),n=!1;e.loading_(r);var s={pause:function(){if(o)throw Error("Cannot call pause after the call to load.");t=!0},resume:function(){o?e.resume_():t=!1},loaded:function(){if(n)throw Error("Double call to loaded.");n=!0,e.loaded_(r)},pending:function(){for(var t=[],o=0;o<e.loadingDeps_.length;o++)t.push(e.loadingDeps_[o]);return t},setModuleState:function(e){goog.moduleLoaderState_={type:e,moduleName:"",declareLegacyNamespace:!1}},registerEs6ModuleExports:function(e,t,o){o&&(goog.loadedModules_[o]={exports:t,type:goog.ModuleType.ES6,moduleId:o||""})},registerGoogModuleExports:function(e,t){goog.loadedModules_[e]={exports:t,type:goog.ModuleType.GOOG,moduleId:e}},clearModuleState:function(){goog.moduleLoaderState_=null},defer:function(t){if(o)throw Error("Cannot register with defer after the call to load.");e.defer_(r,t)},areDepsLoaded:function(){return e.areDepsLoaded_(r.requires)}};try{r.load(s)}finally{o=!0}}();t&&this.pause_()},goog.DebugLoader_.prototype.pause_=function(){this.paused_=!0},goog.DebugLoader_.prototype.resume_=function(){this.paused_&&(this.paused_=!1,this.loadDeps_())},goog.DebugLoader_.prototype.loading_=function(e){this.loadingDeps_.push(e)},goog.DebugLoader_.prototype.loaded_=function(e){for(var t=0;t<this.loadingDeps_.length;t++)if(this.loadingDeps_[t]==e){this.loadingDeps_.splice(t,1);break}for(t=0;t<this.deferredQueue_.length;t++)if(this.deferredQueue_[t]==e.path){this.deferredQueue_.splice(t,1);break}if(this.loadingDeps_.length==this.deferredQueue_.length&&!this.depsToLoad_.length)for(;this.deferredQueue_.length;)this.requested(this.deferredQueue_.shift(),!0);e.loaded()},goog.DebugLoader_.prototype.areDepsLoaded_=function(e){for(var t=0;t<e.length;t++){var o=this.getPathFromDeps_(e[t]);if(!o||!(o in this.deferredCallbacks_)&&!goog.isProvided_(e[t]))return!1}return!0},goog.DebugLoader_.prototype.getPathFromDeps_=function(e){return e in this.idToPath_?this.idToPath_[e]:e in this.dependencies_?e:null},goog.DebugLoader_.prototype.defer_=function(e,t){this.deferredCallbacks_[e.path]=t,this.deferredQueue_.push(e.path)},goog.LoadController=function(){},goog.LoadController.prototype.pause=function(){},goog.LoadController.prototype.resume=function(){},goog.LoadController.prototype.loaded=function(){},goog.LoadController.prototype.pending=function(){},goog.LoadController.prototype.registerEs6ModuleExports=function(e,t,o){},goog.LoadController.prototype.setModuleState=function(e){},goog.LoadController.prototype.clearModuleState=function(){},goog.LoadController.prototype.defer=function(e){},goog.LoadController.prototype.areDepsLoaded=function(){},goog.Dependency=function(e,t,o,r,n){this.path=e,this.relativePath=t,this.provides=o,this.requires=r,this.loadFlags=n,this.loaded_=!1,this.loadCallbacks_=[]},goog.Dependency.prototype.getPathName=function(){var e=this.path,t=e.indexOf("://");return 0<=t&&0<=(t=(e=e.substring(t+3)).indexOf("/"))&&(e=e.substring(t+1)),e},goog.Dependency.prototype.onLoad=function(e){this.loaded_?e():this.loadCallbacks_.push(e)},goog.Dependency.prototype.loaded=function(){this.loaded_=!0;var e=this.loadCallbacks_;this.loadCallbacks_=[];for(var t=0;t<e.length;t++)e[t]()},goog.Dependency.defer_=!1,goog.Dependency.callbackMap_={},goog.Dependency.registerCallback_=function(e){var t=Math.random().toString(32);return goog.Dependency.callbackMap_[t]=e,t},goog.Dependency.unregisterCallback_=function(e){delete goog.Dependency.callbackMap_[e]},goog.Dependency.callback_=function(e,t){if(!(e in goog.Dependency.callbackMap_))throw Error("Callback key "+e+" does not exist (was base.js loaded more than once?).");for(var o=goog.Dependency.callbackMap_[e],r=[],n=1;n<arguments.length;n++)r.push(arguments[n]);o.apply(void 0,r)},goog.Dependency.prototype.load=function(e){if(goog.global.CLOSURE_IMPORT_SCRIPT)goog.global.CLOSURE_IMPORT_SCRIPT(this.path)?e.loaded():e.pause();else if(goog.inHtmlDocument_()){var t=goog.global.document;if("complete"==t.readyState&&!goog.ENABLE_CHROME_APP_SAFE_SCRIPT_LOADING){if(/\\bdeps.js$/.test(this.path))return void e.loaded();throw Error(\'Cannot write "\'+this.path+\'" after document load\')}if(!goog.ENABLE_CHROME_APP_SAFE_SCRIPT_LOADING&&goog.isDocumentLoading_()){var o=goog.Dependency.registerCallback_((function(t){goog.DebugLoader_.IS_OLD_IE_&&"complete"!=t.readyState||(goog.Dependency.unregisterCallback_(o),e.loaded())})),r=!goog.DebugLoader_.IS_OLD_IE_&&goog.getScriptNonce()?\' nonce="\'+goog.getScriptNonce()+\'"\':"";r=\'<script src="\'+this.path+\'" \'+(goog.DebugLoader_.IS_OLD_IE_?"onreadystatechange":"onload")+"=\\"goog.Dependency.callback_(\'"+o+\'\\\', this)" type="text/javascript" \'+(goog.Dependency.defer_?"defer":"")+r+"><\\/script>",t.write(goog.TRUSTED_TYPES_POLICY_?goog.TRUSTED_TYPES_POLICY_.createHTML(r):r)}else{var n=t.createElement("script");n.defer=goog.Dependency.defer_,n.async=!1,n.type="text/javascript",(r=goog.getScriptNonce())&&n.setAttribute("nonce",r),goog.DebugLoader_.IS_OLD_IE_?(e.pause(),n.onreadystatechange=function(){"loaded"!=n.readyState&&"complete"!=n.readyState||(e.loaded(),e.resume())}):n.onload=function(){n.onload=null,e.loaded()},n.src=goog.TRUSTED_TYPES_POLICY_?goog.TRUSTED_TYPES_POLICY_.createScriptURL(this.path):this.path,t.head.appendChild(n)}}else goog.logToConsole_("Cannot use default debug loader outside of HTML documents."),"deps.js"==this.relativePath?(goog.logToConsole_("Consider setting CLOSURE_IMPORT_SCRIPT before loading base.js, or setting CLOSURE_NO_DEPS to true."),e.loaded()):e.pause()},goog.Es6ModuleDependency=function(e,t,o,r,n){goog.Dependency.call(this,e,t,o,r,n)},goog.inherits(goog.Es6ModuleDependency,goog.Dependency),goog.Es6ModuleDependency.prototype.load=function(e){if(goog.global.CLOSURE_IMPORT_SCRIPT)goog.global.CLOSURE_IMPORT_SCRIPT(this.path)?e.loaded():e.pause();else if(goog.inHtmlDocument_()){var t=goog.global.document,o=this;if(goog.isDocumentLoading_()){var r=function(e,o){e=o?\'<script type="module" crossorigin>\'+o+"<\\/script>":\'<script type="module" crossorigin src="\'+e+\'"><\\/script>\',t.write(goog.TRUSTED_TYPES_POLICY_?goog.TRUSTED_TYPES_POLICY_.createHTML(e):e)};goog.Dependency.defer_=!0}else r=function(e,o){var r=t.createElement("script");r.defer=!0,r.async=!1,r.type="module",r.setAttribute("crossorigin",!0);var n=goog.getScriptNonce();n&&r.setAttribute("nonce",n),o?r.textContent=goog.TRUSTED_TYPES_POLICY_?goog.TRUSTED_TYPES_POLICY_.createScript(o):o:r.src=goog.TRUSTED_TYPES_POLICY_?goog.TRUSTED_TYPES_POLICY_.createScriptURL(e):e,t.head.appendChild(r)};var n=goog.Dependency.registerCallback_((function(){goog.Dependency.unregisterCallback_(n),e.setModuleState(goog.ModuleType.ES6)}));r(void 0,\'goog.Dependency.callback_("\'+n+\'")\'),r(this.path,void 0);var s=goog.Dependency.registerCallback_((function(t){goog.Dependency.unregisterCallback_(s),e.registerEs6ModuleExports(o.path,t,goog.moduleLoaderState_.moduleName)}));r(void 0,\'import * as m from "\'+this.path+\'"; goog.Dependency.callback_("\'+s+\'", m)\');var i=goog.Dependency.registerCallback_((function(){goog.Dependency.unregisterCallback_(i),e.clearModuleState(),e.loaded()}));r(void 0,\'goog.Dependency.callback_("\'+i+\'")\')}else goog.logToConsole_("Cannot use default debug loader outside of HTML documents."),e.pause()},goog.TransformedDependency=function(e,t,o,r,n){goog.Dependency.call(this,e,t,o,r,n),this.contents_=null,this.lazyFetch_=!goog.inHtmlDocument_()||!("noModule"in goog.global.document.createElement("script"))},goog.inherits(goog.TransformedDependency,goog.Dependency),goog.TransformedDependency.prototype.load=function(e){function t(){r.contents_=goog.loadFileSync_(r.path),r.contents_&&(r.contents_=r.transform(r.contents_),r.contents_&&(r.contents_+="\\n//# sourceURL="+r.path))}function o(){if(r.lazyFetch_&&t(),r.contents_){n&&e.setModuleState(goog.ModuleType.ES6);try{var o=r.contents_;if(r.contents_=null,goog.globalEval(o),n)var s=goog.moduleLoaderState_.moduleName}finally{n&&e.clearModuleState()}n&&goog.global.$jscomp.require.ensure([r.getPathName()],(function(){e.registerEs6ModuleExports(r.path,goog.global.$jscomp.require(r.getPathName()),s)})),e.loaded()}}var r=this;if(goog.global.CLOSURE_IMPORT_SCRIPT)t(),this.contents_&&goog.global.CLOSURE_IMPORT_SCRIPT("",this.contents_)?(this.contents_=null,e.loaded()):e.pause();else{var n=this.loadFlags.module==goog.ModuleType.ES6;this.lazyFetch_||t();var s=1<e.pending().length,i=s&&goog.DebugLoader_.IS_OLD_IE_;if(s=goog.Dependency.defer_&&(s||goog.isDocumentLoading_()),i||s)e.defer((function(){o()}));else{var a=goog.global.document;if(i=goog.inHtmlDocument_()&&"ActiveXObject"in goog.global,n&&goog.inHtmlDocument_()&&goog.isDocumentLoading_()&&!i){goog.Dependency.defer_=!0,e.pause();var g=a.onreadystatechange;a.onreadystatechange=function(){"interactive"==a.readyState&&(a.onreadystatechange=g,o(),e.resume()),goog.isFunction(g)&&g.apply(void 0,arguments)}}else!goog.DebugLoader_.IS_OLD_IE_&&goog.inHtmlDocument_()&&goog.isDocumentLoading_()?function(){var e=goog.global.document,t=goog.Dependency.registerCallback_((function(){goog.Dependency.unregisterCallback_(t),o()})),r=\'<script type="text/javascript">\'+goog.protectScriptTag_(\'goog.Dependency.callback_("\'+t+\'");\')+"<\\/script>";e.write(goog.TRUSTED_TYPES_POLICY_?goog.TRUSTED_TYPES_POLICY_.createHTML(r):r)}():o()}}},goog.TransformedDependency.prototype.transform=function(e){},goog.TranspiledDependency=function(e,t,o,r,n,s){goog.TransformedDependency.call(this,e,t,o,r,n),this.transpiler=s},goog.inherits(goog.TranspiledDependency,goog.TransformedDependency),goog.TranspiledDependency.prototype.transform=function(e){return this.transpiler.transpile(e,this.getPathName())},goog.PreTranspiledEs6ModuleDependency=function(e,t,o,r,n){goog.TransformedDependency.call(this,e,t,o,r,n)},goog.inherits(goog.PreTranspiledEs6ModuleDependency,goog.TransformedDependency),goog.PreTranspiledEs6ModuleDependency.prototype.transform=function(e){return e},goog.GoogModuleDependency=function(e,t,o,r,n,s,i){goog.TransformedDependency.call(this,e,t,o,r,n),this.needsTranspile_=s,this.transpiler_=i},goog.inherits(goog.GoogModuleDependency,goog.TransformedDependency),goog.GoogModuleDependency.prototype.transform=function(e){return this.needsTranspile_&&(e=this.transpiler_.transpile(e,this.getPathName())),goog.LOAD_MODULE_USING_EVAL&&goog.isDef(goog.global.JSON)?"goog.loadModule("+goog.global.JSON.stringify(e+"\\n//# sourceURL="+this.path+"\\n")+");":\'goog.loadModule(function(exports) {"use strict";\'+e+"\\n;return exports});\\n//# sourceURL="+this.path+"\\n"},goog.DebugLoader_.IS_OLD_IE_=!(goog.global.atob||!goog.global.document||!goog.global.document.all),goog.DebugLoader_.prototype.addDependency=function(e,t,o,r){t=t||[],e=e.replace(/\\\\/g,"/");var n=goog.normalizePath_(goog.basePath+e);for(r&&"boolean"!=typeof r||(r=r?{module:goog.ModuleType.GOOG}:{}),o=this.factory_.createDependency(n,e,t,o,r,goog.transpiler_.needsTranspile(r.lang||"es3",r.module)),this.dependencies_[n]=o,o=0;o<t.length;o++)this.idToPath_[t[o]]=n;this.idToPath_[e]=n},goog.DependencyFactory=function(e){this.transpiler=e},goog.DependencyFactory.prototype.createDependency=function(e,t,o,r,n,s){return n.module==goog.ModuleType.GOOG?new goog.GoogModuleDependency(e,t,o,r,n,s,this.transpiler):s?new goog.TranspiledDependency(e,t,o,r,n,this.transpiler):n.module==goog.ModuleType.ES6?"never"==goog.TRANSPILE&&goog.ASSUME_ES_MODULES_TRANSPILED?new goog.PreTranspiledEs6ModuleDependency(e,t,o,r,n):new goog.Es6ModuleDependency(e,t,o,r,n):new goog.Dependency(e,t,o,r,n)},goog.debugLoader_=new goog.DebugLoader_,goog.loadClosureDeps=function(){goog.debugLoader_.loadClosureDeps()},goog.setDependencyFactory=function(e){goog.debugLoader_.setDependencyFactory(e)},goog.global.CLOSURE_NO_DEPS||goog.debugLoader_.loadClosureDeps(),goog.bootstrap=function(e,t){goog.debugLoader_.bootstrap(e,t)}),goog.TRUSTED_TYPES_POLICY_NAME="",goog.identity_=function(e){return e},goog.createTrustedTypesPolicy=function(e){var t=null;if("undefined"==typeof TrustedTypes||!TrustedTypes.createPolicy)return t;try{t=TrustedTypes.createPolicy(e,{createHTML:goog.identity_,createScript:goog.identity_,createScriptURL:goog.identity_,createURL:goog.identity_})}catch(e){goog.logToConsole_(e.message)}return t},goog.TRUSTED_TYPES_POLICY_=goog.TRUSTED_TYPES_POLICY_NAME?goog.createTrustedTypesPolicy(goog.TRUSTED_TYPES_POLICY_NAME+"#base"):null,goog.object={},goog.object.is=function(e,t){return e===t?0!==e||1/e==1/t:e!=e&&t!=t},goog.object.forEach=function(e,t,o){for(var r in e)t.call(o,e[r],r,e)},goog.object.filter=function(e,t,o){var r,n={};for(r in e)t.call(o,e[r],r,e)&&(n[r]=e[r]);return n},goog.object.map=function(e,t,o){var r,n={};for(r in e)n[r]=t.call(o,e[r],r,e);return n},goog.object.some=function(e,t,o){for(var r in e)if(t.call(o,e[r],r,e))return!0;return!1},goog.object.every=function(e,t,o){for(var r in e)if(!t.call(o,e[r],r,e))return!1;return!0},goog.object.getCount=function(e){var t,o=0;for(t in e)o++;return o},goog.object.getAnyKey=function(e){for(var t in e)return t},goog.object.getAnyValue=function(e){for(var t in e)return e[t]},goog.object.contains=function(e,t){return goog.object.containsValue(e,t)},goog.object.getValues=function(e){var t,o=[],r=0;for(t in e)o[r++]=e[t];return o},goog.object.getKeys=function(e){var t,o=[],r=0;for(t in e)o[r++]=t;return o},goog.object.getValueByKeys=function(e,t){var o=goog.isArrayLike(t),r=o?t:arguments;for(o=o?0:1;o<r.length;o++){if(null==e)return;e=e[r[o]]}return e},goog.object.containsKey=function(e,t){return null!==e&&t in e},goog.object.containsValue=function(e,t){for(var o in e)if(e[o]==t)return!0;return!1},goog.object.findKey=function(e,t,o){for(var r in e)if(t.call(o,e[r],r,e))return r},goog.object.findValue=function(e,t,o){return(t=goog.object.findKey(e,t,o))&&e[t]},goog.object.isEmpty=function(e){for(var t in e)return!1;return!0},goog.object.clear=function(e){for(var t in e)delete e[t]},goog.object.remove=function(e,t){var o;return(o=t in e)&&delete e[t],o},goog.object.add=function(e,t,o){if(null!==e&&t in e)throw Error(\'The object already contains the key "\'+t+\'"\');goog.object.set(e,t,o)},goog.object.get=function(e,t,o){return null!==e&&t in e?e[t]:o},goog.object.set=function(e,t,o){e[t]=o},goog.object.setIfUndefined=function(e,t,o){return t in e?e[t]:e[t]=o},goog.object.setWithReturnValueIfNotSet=function(e,t,o){return t in e?e[t]:(o=o(),e[t]=o)},goog.object.equals=function(e,t){for(var o in e)if(!(o in t)||e[o]!==t[o])return!1;for(var r in t)if(!(r in e))return!1;return!0},goog.object.clone=function(e){var t,o={};for(t in e)o[t]=e[t];return o},goog.object.unsafeClone=function(e){var t=goog.typeOf(e);if("object"==t||"array"==t){if(goog.isFunction(e.clone))return e.clone();for(var o in t="array"==t?[]:{},e)t[o]=goog.object.unsafeClone(e[o]);return t}return e},goog.object.transpose=function(e){var t,o={};for(t in e)o[e[t]]=t;return o},goog.object.PROTOTYPE_FIELDS_="constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf".split(" "),goog.object.extend=function(e,t){for(var o,r,n=1;n<arguments.length;n++){for(o in r=arguments[n])e[o]=r[o];for(var s=0;s<goog.object.PROTOTYPE_FIELDS_.length;s++)o=goog.object.PROTOTYPE_FIELDS_[s],Object.prototype.hasOwnProperty.call(r,o)&&(e[o]=r[o])}},goog.object.create=function(e){var t=arguments.length;if(1==t&&goog.isArray(arguments[0]))return goog.object.create.apply(null,arguments[0]);if(t%2)throw Error("Uneven number of arguments");for(var o={},r=0;r<t;r+=2)o[arguments[r]]=arguments[r+1];return o},goog.object.createSet=function(e){var t=arguments.length;if(1==t&&goog.isArray(arguments[0]))return goog.object.createSet.apply(null,arguments[0]);for(var o={},r=0;r<t;r++)o[arguments[r]]=!0;return o},goog.object.createImmutableView=function(e){var t=e;return Object.isFrozen&&!Object.isFrozen(e)&&(t=Object.create(e),Object.freeze(t)),t},goog.object.isImmutableView=function(e){return!!Object.isFrozen&&Object.isFrozen(e)},goog.object.getAllPropertyNames=function(e,t,o){if(!e)return[];if(!Object.getOwnPropertyNames||!Object.getPrototypeOf)return goog.object.getKeys(e);for(var r={};e&&(e!==Object.prototype||t)&&(e!==Function.prototype||o);){for(var n=Object.getOwnPropertyNames(e),s=0;s<n.length;s++)r[n[s]]=!0;e=Object.getPrototypeOf(e)}return goog.object.getKeys(r)},goog.object.getSuperClass=function(e){return(e=Object.getPrototypeOf(e.prototype))&&e.constructor},goog.debug={},goog.debug.Error=function(e){if(Error.captureStackTrace)Error.captureStackTrace(this,goog.debug.Error);else{var t=Error().stack;t&&(this.stack=t)}e&&(this.message=String(e)),this.reportErrorToServer=!0},goog.inherits(goog.debug.Error,Error),goog.debug.Error.prototype.name="CustomError",goog.dom={},goog.dom.NodeType={ELEMENT:1,ATTRIBUTE:2,TEXT:3,CDATA_SECTION:4,ENTITY_REFERENCE:5,ENTITY:6,PROCESSING_INSTRUCTION:7,COMMENT:8,DOCUMENT:9,DOCUMENT_TYPE:10,DOCUMENT_FRAGMENT:11,NOTATION:12},goog.asserts={},goog.asserts.ENABLE_ASSERTS=goog.DEBUG,goog.asserts.AssertionError=function(e,t){goog.debug.Error.call(this,goog.asserts.subs_(e,t)),this.messagePattern=e},goog.inherits(goog.asserts.AssertionError,goog.debug.Error),goog.asserts.AssertionError.prototype.name="AssertionError",goog.asserts.DEFAULT_ERROR_HANDLER=function(e){throw e},goog.asserts.errorHandler_=goog.asserts.DEFAULT_ERROR_HANDLER,goog.asserts.subs_=function(e,t){for(var o="",r=(e=e.split("%s")).length-1,n=0;n<r;n++)o+=e[n]+(n<t.length?t[n]:"%s");return o+e[r]},goog.asserts.doAssertFailure_=function(e,t,o,r){var n="Assertion failed";if(o){n+=": "+o;var s=r}else e&&(n+=": "+e,s=t);e=new goog.asserts.AssertionError(""+n,s||[]),goog.asserts.errorHandler_(e)},goog.asserts.setErrorHandler=function(e){goog.asserts.ENABLE_ASSERTS&&(goog.asserts.errorHandler_=e)},goog.asserts.assert=function(e,t,o){return goog.asserts.ENABLE_ASSERTS&&!e&&goog.asserts.doAssertFailure_("",null,t,Array.prototype.slice.call(arguments,2)),e},goog.asserts.assertExists=function(e,t,o){return goog.asserts.ENABLE_ASSERTS&&null==e&&goog.asserts.doAssertFailure_("Expected to exist: %s.",[e],t,Array.prototype.slice.call(arguments,2)),e},goog.asserts.fail=function(e,t){goog.asserts.ENABLE_ASSERTS&&goog.asserts.errorHandler_(new goog.asserts.AssertionError("Failure"+(e?": "+e:""),Array.prototype.slice.call(arguments,1)))},goog.asserts.assertNumber=function(e,t,o){return goog.asserts.ENABLE_ASSERTS&&!goog.isNumber(e)&&goog.asserts.doAssertFailure_("Expected number but got %s: %s.",[goog.typeOf(e),e],t,Array.prototype.slice.call(arguments,2)),e},goog.asserts.assertString=function(e,t,o){return goog.asserts.ENABLE_ASSERTS&&!goog.isString(e)&&goog.asserts.doAssertFailure_("Expected string but got %s: %s.",[goog.typeOf(e),e],t,Array.prototype.slice.call(arguments,2)),e},goog.asserts.assertFunction=function(e,t,o){return goog.asserts.ENABLE_ASSERTS&&!goog.isFunction(e)&&goog.asserts.doAssertFailure_("Expected function but got %s: %s.",[goog.typeOf(e),e],t,Array.prototype.slice.call(arguments,2)),e},goog.asserts.assertObject=function(e,t,o){return goog.asserts.ENABLE_ASSERTS&&!goog.isObject(e)&&goog.asserts.doAssertFailure_("Expected object but got %s: %s.",[goog.typeOf(e),e],t,Array.prototype.slice.call(arguments,2)),e},goog.asserts.assertArray=function(e,t,o){return goog.asserts.ENABLE_ASSERTS&&!goog.isArray(e)&&goog.asserts.doAssertFailure_("Expected array but got %s: %s.",[goog.typeOf(e),e],t,Array.prototype.slice.call(arguments,2)),e},goog.asserts.assertBoolean=function(e,t,o){return goog.asserts.ENABLE_ASSERTS&&!goog.isBoolean(e)&&goog.asserts.doAssertFailure_("Expected boolean but got %s: %s.",[goog.typeOf(e),e],t,Array.prototype.slice.call(arguments,2)),e},goog.asserts.assertElement=function(e,t,o){return!goog.asserts.ENABLE_ASSERTS||goog.isObject(e)&&e.nodeType==goog.dom.NodeType.ELEMENT||goog.asserts.doAssertFailure_("Expected Element but got %s: %s.",[goog.typeOf(e),e],t,Array.prototype.slice.call(arguments,2)),e},goog.asserts.assertInstanceof=function(e,t,o,r){return!goog.asserts.ENABLE_ASSERTS||e instanceof t||goog.asserts.doAssertFailure_("Expected instanceof %s but got %s.",[goog.asserts.getType_(t),goog.asserts.getType_(e)],o,Array.prototype.slice.call(arguments,3)),e},goog.asserts.assertFinite=function(e,t,o){return!goog.asserts.ENABLE_ASSERTS||"number"==typeof e&&isFinite(e)||goog.asserts.doAssertFailure_("Expected %s to be a finite number but it is not.",[e],t,Array.prototype.slice.call(arguments,2)),e},goog.asserts.assertObjectPrototypeIsIntact=function(){for(var e in Object.prototype)goog.asserts.fail(e+" should not be enumerable in Object.prototype.")},goog.asserts.getType_=function(e){return e instanceof Function?e.displayName||e.name||"unknown type name":e instanceof Object?e.constructor.displayName||e.constructor.name||Object.prototype.toString.call(e):null===e?"null":typeof e};var jspb={BinaryConstants:{},ConstBinaryMessage:function(){},BinaryMessage:function(){}};jspb.BinaryConstants.FieldType={INVALID:-1,DOUBLE:1,FLOAT:2,INT64:3,UINT64:4,INT32:5,FIXED64:6,FIXED32:7,BOOL:8,STRING:9,GROUP:10,MESSAGE:11,BYTES:12,UINT32:13,ENUM:14,SFIXED32:15,SFIXED64:16,SINT32:17,SINT64:18,FHASH64:30,VHASH64:31},jspb.BinaryConstants.WireType={INVALID:-1,VARINT:0,FIXED64:1,DELIMITED:2,START_GROUP:3,END_GROUP:4,FIXED32:5},jspb.BinaryConstants.FieldTypeToWireType=function(e){var t=jspb.BinaryConstants.FieldType,o=jspb.BinaryConstants.WireType;switch(e){case t.INT32:case t.INT64:case t.UINT32:case t.UINT64:case t.SINT32:case t.SINT64:case t.BOOL:case t.ENUM:case t.VHASH64:return o.VARINT;case t.DOUBLE:case t.FIXED64:case t.SFIXED64:case t.FHASH64:return o.FIXED64;case t.STRING:case t.MESSAGE:case t.BYTES:return o.DELIMITED;case t.FLOAT:case t.FIXED32:case t.SFIXED32:return o.FIXED32;default:return o.INVALID}},jspb.BinaryConstants.INVALID_FIELD_NUMBER=-1,jspb.BinaryConstants.FLOAT32_EPS=1401298464324817e-60,jspb.BinaryConstants.FLOAT32_MIN=11754943508222875e-54,jspb.BinaryConstants.FLOAT32_MAX=34028234663852886e22,jspb.BinaryConstants.FLOAT64_EPS=5e-324,jspb.BinaryConstants.FLOAT64_MIN=22250738585072014e-324,jspb.BinaryConstants.FLOAT64_MAX=17976931348623157e292,jspb.BinaryConstants.TWO_TO_20=1048576,jspb.BinaryConstants.TWO_TO_23=8388608,jspb.BinaryConstants.TWO_TO_31=2147483648,jspb.BinaryConstants.TWO_TO_32=4294967296,jspb.BinaryConstants.TWO_TO_52=4503599627370496,jspb.BinaryConstants.TWO_TO_63=0x8000000000000000,jspb.BinaryConstants.TWO_TO_64=0x10000000000000000,jspb.BinaryConstants.ZERO_HASH="\\0\\0\\0\\0\\0\\0\\0\\0",goog.array={},goog.NATIVE_ARRAY_PROTOTYPES=goog.TRUSTED_SITE,goog.array.ASSUME_NATIVE_FUNCTIONS=2012<goog.FEATURESET_YEAR,goog.array.peek=function(e){return e[e.length-1]},goog.array.last=goog.array.peek,goog.array.indexOf=goog.NATIVE_ARRAY_PROTOTYPES&&(goog.array.ASSUME_NATIVE_FUNCTIONS||Array.prototype.indexOf)?function(e,t,o){return goog.asserts.assert(null!=e.length),Array.prototype.indexOf.call(e,t,o)}:function(e,t,o){if(o=null==o?0:0>o?Math.max(0,e.length+o):o,goog.isString(e))return goog.isString(t)&&1==t.length?e.indexOf(t,o):-1;for(;o<e.length;o++)if(o in e&&e[o]===t)return o;return-1},goog.array.lastIndexOf=goog.NATIVE_ARRAY_PROTOTYPES&&(goog.array.ASSUME_NATIVE_FUNCTIONS||Array.prototype.lastIndexOf)?function(e,t,o){return goog.asserts.assert(null!=e.length),Array.prototype.lastIndexOf.call(e,t,null==o?e.length-1:o)}:function(e,t,o){if(0>(o=null==o?e.length-1:o)&&(o=Math.max(0,e.length+o)),goog.isString(e))return goog.isString(t)&&1==t.length?e.lastIndexOf(t,o):-1;for(;0<=o;o--)if(o in e&&e[o]===t)return o;return-1},goog.array.forEach=goog.NATIVE_ARRAY_PROTOTYPES&&(goog.array.ASSUME_NATIVE_FUNCTIONS||Array.prototype.forEach)?function(e,t,o){goog.asserts.assert(null!=e.length),Array.prototype.forEach.call(e,t,o)}:function(e,t,o){for(var r=e.length,n=goog.isString(e)?e.split(""):e,s=0;s<r;s++)s in n&&t.call(o,n[s],s,e)},goog.array.forEachRight=function(e,t,o){var r=e.length,n=goog.isString(e)?e.split(""):e;for(--r;0<=r;--r)r in n&&t.call(o,n[r],r,e)},goog.array.filter=goog.NATIVE_ARRAY_PROTOTYPES&&(goog.array.ASSUME_NATIVE_FUNCTIONS||Array.prototype.filter)?function(e,t,o){return goog.asserts.assert(null!=e.length),Array.prototype.filter.call(e,t,o)}:function(e,t,o){for(var r=e.length,n=[],s=0,i=goog.isString(e)?e.split(""):e,a=0;a<r;a++)if(a in i){var g=i[a];t.call(o,g,a,e)&&(n[s++]=g)}return n},goog.array.map=goog.NATIVE_ARRAY_PROTOTYPES&&(goog.array.ASSUME_NATIVE_FUNCTIONS||Array.prototype.map)?function(e,t,o){return goog.asserts.assert(null!=e.length),Array.prototype.map.call(e,t,o)}:function(e,t,o){for(var r=e.length,n=Array(r),s=goog.isString(e)?e.split(""):e,i=0;i<r;i++)i in s&&(n[i]=t.call(o,s[i],i,e));return n},goog.array.reduce=goog.NATIVE_ARRAY_PROTOTYPES&&(goog.array.ASSUME_NATIVE_FUNCTIONS||Array.prototype.reduce)?function(e,t,o,r){return goog.asserts.assert(null!=e.length),r&&(t=goog.bind(t,r)),Array.prototype.reduce.call(e,t,o)}:function(e,t,o,r){var n=o;return goog.array.forEach(e,(function(o,s){n=t.call(r,n,o,s,e)})),n},goog.array.reduceRight=goog.NATIVE_ARRAY_PROTOTYPES&&(goog.array.ASSUME_NATIVE_FUNCTIONS||Array.prototype.reduceRight)?function(e,t,o,r){return goog.asserts.assert(null!=e.length),goog.asserts.assert(null!=t),r&&(t=goog.bind(t,r)),Array.prototype.reduceRight.call(e,t,o)}:function(e,t,o,r){var n=o;return goog.array.forEachRight(e,(function(o,s){n=t.call(r,n,o,s,e)})),n},goog.array.some=goog.NATIVE_ARRAY_PROTOTYPES&&(goog.array.ASSUME_NATIVE_FUNCTIONS||Array.prototype.some)?function(e,t,o){return goog.asserts.assert(null!=e.length),Array.prototype.some.call(e,t,o)}:function(e,t,o){for(var r=e.length,n=goog.isString(e)?e.split(""):e,s=0;s<r;s++)if(s in n&&t.call(o,n[s],s,e))return!0;return!1},goog.array.every=goog.NATIVE_ARRAY_PROTOTYPES&&(goog.array.ASSUME_NATIVE_FUNCTIONS||Array.prototype.every)?function(e,t,o){return goog.asserts.assert(null!=e.length),Array.prototype.every.call(e,t,o)}:function(e,t,o){for(var r=e.length,n=goog.isString(e)?e.split(""):e,s=0;s<r;s++)if(s in n&&!t.call(o,n[s],s,e))return!1;return!0},goog.array.count=function(e,t,o){var r=0;return goog.array.forEach(e,(function(e,n,s){t.call(o,e,n,s)&&++r}),o),r},goog.array.find=function(e,t,o){return 0>(t=goog.array.findIndex(e,t,o))?null:goog.isString(e)?e.charAt(t):e[t]},goog.array.findIndex=function(e,t,o){for(var r=e.length,n=goog.isString(e)?e.split(""):e,s=0;s<r;s++)if(s in n&&t.call(o,n[s],s,e))return s;return-1},goog.array.findRight=function(e,t,o){return 0>(t=goog.array.findIndexRight(e,t,o))?null:goog.isString(e)?e.charAt(t):e[t]},goog.array.findIndexRight=function(e,t,o){var r=e.length,n=goog.isString(e)?e.split(""):e;for(--r;0<=r;r--)if(r in n&&t.call(o,n[r],r,e))return r;return-1},goog.array.contains=function(e,t){return 0<=goog.array.indexOf(e,t)},goog.array.isEmpty=function(e){return 0==e.length},goog.array.clear=function(e){if(!goog.isArray(e))for(var t=e.length-1;0<=t;t--)delete e[t];e.length=0},goog.array.insert=function(e,t){goog.array.contains(e,t)||e.push(t)},goog.array.insertAt=function(e,t,o){goog.array.splice(e,o,0,t)},goog.array.insertArrayAt=function(e,t,o){goog.partial(goog.array.splice,e,o,0).apply(null,t)},goog.array.insertBefore=function(e,t,o){var r;2==arguments.length||0>(r=goog.array.indexOf(e,o))?e.push(t):goog.array.insertAt(e,t,r)},goog.array.remove=function(e,t){var o;return(o=0<=(t=goog.array.indexOf(e,t)))&&goog.array.removeAt(e,t),o},goog.array.removeLast=function(e,t){return 0<=(t=goog.array.lastIndexOf(e,t))&&(goog.array.removeAt(e,t),!0)},goog.array.removeAt=function(e,t){return goog.asserts.assert(null!=e.length),1==Array.prototype.splice.call(e,t,1).length},goog.array.removeIf=function(e,t,o){return 0<=(t=goog.array.findIndex(e,t,o))&&(goog.array.removeAt(e,t),!0)},goog.array.removeAllIf=function(e,t,o){var r=0;return goog.array.forEachRight(e,(function(n,s){t.call(o,n,s,e)&&goog.array.removeAt(e,s)&&r++})),r},goog.array.concat=function(e){return Array.prototype.concat.apply([],arguments)},goog.array.join=function(e){return Array.prototype.concat.apply([],arguments)},goog.array.toArray=function(e){var t=e.length;if(0<t){for(var o=Array(t),r=0;r<t;r++)o[r]=e[r];return o}return[]},goog.array.clone=goog.array.toArray,goog.array.extend=function(e,t){for(var o=1;o<arguments.length;o++){var r=arguments[o];if(goog.isArrayLike(r)){var n=e.length||0,s=r.length||0;e.length=n+s;for(var i=0;i<s;i++)e[n+i]=r[i]}else e.push(r)}},goog.array.splice=function(e,t,o,r){return goog.asserts.assert(null!=e.length),Array.prototype.splice.apply(e,goog.array.slice(arguments,1))},goog.array.slice=function(e,t,o){return goog.asserts.assert(null!=e.length),2>=arguments.length?Array.prototype.slice.call(e,t):Array.prototype.slice.call(e,t,o)},goog.array.removeDuplicates=function(e,t,o){t=t||e;var r=function(e){return goog.isObject(e)?"o"+goog.getUid(e):(typeof e).charAt(0)+e};o=o||r,r={};for(var n=0,s=0;s<e.length;){var i=e[s++],a=o(i);Object.prototype.hasOwnProperty.call(r,a)||(r[a]=!0,t[n++]=i)}t.length=n},goog.array.binarySearch=function(e,t,o){return goog.array.binarySearch_(e,o||goog.array.defaultCompare,!1,t)},goog.array.binarySelect=function(e,t,o){return goog.array.binarySearch_(e,t,!0,void 0,o)},goog.array.binarySearch_=function(e,t,o,r,n){for(var s,i=0,a=e.length;i<a;){var g=i+a>>1,p=o?t.call(n,e[g],g,e):t(r,e[g]);0<p?i=g+1:(a=g,s=!p)}return s?i:~i},goog.array.sort=function(e,t){e.sort(t||goog.array.defaultCompare)},goog.array.stableSort=function(e,t){for(var o=Array(e.length),r=0;r<e.length;r++)o[r]={index:r,value:e[r]};var n=t||goog.array.defaultCompare;for(goog.array.sort(o,(function(e,t){return n(e.value,t.value)||e.index-t.index})),r=0;r<e.length;r++)e[r]=o[r].value},goog.array.sortByKey=function(e,t,o){var r=o||goog.array.defaultCompare;goog.array.sort(e,(function(e,o){return r(t(e),t(o))}))},goog.array.sortObjectsByKey=function(e,t,o){goog.array.sortByKey(e,(function(e){return e[t]}),o)},goog.array.isSorted=function(e,t,o){t=t||goog.array.defaultCompare;for(var r=1;r<e.length;r++){var n=t(e[r-1],e[r]);if(0<n||0==n&&o)return!1}return!0},goog.array.equals=function(e,t,o){if(!goog.isArrayLike(e)||!goog.isArrayLike(t)||e.length!=t.length)return!1;var r=e.length;o=o||goog.array.defaultCompareEquality;for(var n=0;n<r;n++)if(!o(e[n],t[n]))return!1;return!0},goog.array.compare3=function(e,t,o){o=o||goog.array.defaultCompare;for(var r=Math.min(e.length,t.length),n=0;n<r;n++){var s=o(e[n],t[n]);if(0!=s)return s}return goog.array.defaultCompare(e.length,t.length)},goog.array.defaultCompare=function(e,t){return e>t?1:e<t?-1:0},goog.array.inverseDefaultCompare=function(e,t){return-goog.array.defaultCompare(e,t)},goog.array.defaultCompareEquality=function(e,t){return e===t},goog.array.binaryInsert=function(e,t,o){return 0>(o=goog.array.binarySearch(e,t,o))&&(goog.array.insertAt(e,t,-(o+1)),!0)},goog.array.binaryRemove=function(e,t,o){return 0<=(t=goog.array.binarySearch(e,t,o))&&goog.array.removeAt(e,t)},goog.array.bucket=function(e,t,o){for(var r={},n=0;n<e.length;n++){var s=e[n],i=t.call(o,s,n,e);goog.isDef(i)&&(r[i]||(r[i]=[])).push(s)}return r},goog.array.toObject=function(e,t,o){var r={};return goog.array.forEach(e,(function(n,s){r[t.call(o,n,s,e)]=n})),r},goog.array.range=function(e,t,o){var r=[],n=0,s=e;if(void 0!==t&&(n=e,s=t),0>(o=o||1)*(s-n))return[];if(0<o)for(e=n;e<s;e+=o)r.push(e);else for(e=n;e>s;e+=o)r.push(e);return r},goog.array.repeat=function(e,t){for(var o=[],r=0;r<t;r++)o[r]=e;return o},goog.array.flatten=function(e){for(var t=[],o=0;o<arguments.length;o++){var r=arguments[o];if(goog.isArray(r))for(var n=0;n<r.length;n+=8192){var s=goog.array.slice(r,n,n+8192);s=goog.array.flatten.apply(null,s);for(var i=0;i<s.length;i++)t.push(s[i])}else t.push(r)}return t},goog.array.rotate=function(e,t){return goog.asserts.assert(null!=e.length),e.length&&(0<(t%=e.length)?Array.prototype.unshift.apply(e,e.splice(-t,t)):0>t&&Array.prototype.push.apply(e,e.splice(0,-t))),e},goog.array.moveItem=function(e,t,o){goog.asserts.assert(0<=t&&t<e.length),goog.asserts.assert(0<=o&&o<e.length),t=Array.prototype.splice.call(e,t,1),Array.prototype.splice.call(e,o,0,t[0])},goog.array.zip=function(e){if(!arguments.length)return[];for(var t=[],o=arguments[0].length,r=1;r<arguments.length;r++)arguments[r].length<o&&(o=arguments[r].length);for(r=0;r<o;r++){for(var n=[],s=0;s<arguments.length;s++)n.push(arguments[s][r]);t.push(n)}return t},goog.array.shuffle=function(e,t){t=t||Math.random;for(var o=e.length-1;0<o;o--){var r=Math.floor(t()*(o+1)),n=e[o];e[o]=e[r],e[r]=n}},goog.array.copyByIndex=function(e,t){var o=[];return goog.array.forEach(t,(function(t){o.push(e[t])})),o},goog.array.concatMap=function(e,t,o){return goog.array.concat.apply([],goog.array.map(e,t,o))},goog.crypt={},goog.crypt.stringToByteArray=function(e){for(var t=[],o=0,r=0;r<e.length;r++){var n=e.charCodeAt(r);255<n&&(t[o++]=255&n,n>>=8),t[o++]=n}return t},goog.crypt.byteArrayToString=function(e){if(8192>=e.length)return String.fromCharCode.apply(null,e);for(var t="",o=0;o<e.length;o+=8192){var r=goog.array.slice(e,o,o+8192);t+=String.fromCharCode.apply(null,r)}return t},goog.crypt.byteArrayToHex=function(e,t){return goog.array.map(e,(function(e){return 1<(e=e.toString(16)).length?e:"0"+e})).join(t||"")},goog.crypt.hexToByteArray=function(e){goog.asserts.assert(0==e.length%2,"Key string length must be multiple of 2");for(var t=[],o=0;o<e.length;o+=2)t.push(parseInt(e.substring(o,o+2),16));return t},goog.crypt.stringToUtf8ByteArray=function(e){for(var t=[],o=0,r=0;r<e.length;r++){var n=e.charCodeAt(r);128>n?t[o++]=n:(2048>n?t[o++]=n>>6|192:(55296==(64512&n)&&r+1<e.length&&56320==(64512&e.charCodeAt(r+1))?(n=65536+((1023&n)<<10)+(1023&e.charCodeAt(++r)),t[o++]=n>>18|240,t[o++]=n>>12&63|128):t[o++]=n>>12|224,t[o++]=n>>6&63|128),t[o++]=63&n|128)}return t},goog.crypt.utf8ByteArrayToString=function(e){for(var t=[],o=0,r=0;o<e.length;){var n=e[o++];if(128>n)t[r++]=String.fromCharCode(n);else if(191<n&&224>n){var s=e[o++];t[r++]=String.fromCharCode((31&n)<<6|63&s)}else if(239<n&&365>n){s=e[o++];var i=e[o++];n=((7&n)<<18|(63&s)<<12|(63&i)<<6|63&e[o++])-65536,t[r++]=String.fromCharCode(55296+(n>>10)),t[r++]=String.fromCharCode(56320+(1023&n))}else s=e[o++],i=e[o++],t[r++]=String.fromCharCode((15&n)<<12|(63&s)<<6|63&i)}return t.join("")},goog.crypt.xorByteArray=function(e,t){goog.asserts.assert(e.length==t.length,"XOR array lengths must match");for(var o=[],r=0;r<e.length;r++)o.push(e[r]^t[r]);return o},goog.dom.asserts={},goog.dom.asserts.assertIsLocation=function(e){if(goog.asserts.ENABLE_ASSERTS){var t=goog.dom.asserts.getWindow_(e);t&&(!e||!(e instanceof t.Location)&&e instanceof t.Element)&&goog.asserts.fail("Argument is not a Location (or a non-Element mock); got: %s",goog.dom.asserts.debugStringForType_(e))}return e},goog.dom.asserts.assertIsElementType_=function(e,t){if(goog.asserts.ENABLE_ASSERTS){var o=goog.dom.asserts.getWindow_(e);o&&void 0!==o[t]&&(e&&(e instanceof o[t]||!(e instanceof o.Location||e instanceof o.Element))||goog.asserts.fail("Argument is not a %s (or a non-Element, non-Location mock); got: %s",t,goog.dom.asserts.debugStringForType_(e)))}return e},goog.dom.asserts.assertIsHTMLAnchorElement=function(e){return goog.dom.asserts.assertIsElementType_(e,"HTMLAnchorElement")},goog.dom.asserts.assertIsHTMLButtonElement=function(e){return goog.dom.asserts.assertIsElementType_(e,"HTMLButtonElement")},goog.dom.asserts.assertIsHTMLLinkElement=function(e){return goog.dom.asserts.assertIsElementType_(e,"HTMLLinkElement")},goog.dom.asserts.assertIsHTMLImageElement=function(e){return goog.dom.asserts.assertIsElementType_(e,"HTMLImageElement")},goog.dom.asserts.assertIsHTMLAudioElement=function(e){return goog.dom.asserts.assertIsElementType_(e,"HTMLAudioElement")},goog.dom.asserts.assertIsHTMLVideoElement=function(e){return goog.dom.asserts.assertIsElementType_(e,"HTMLVideoElement")},goog.dom.asserts.assertIsHTMLInputElement=function(e){return goog.dom.asserts.assertIsElementType_(e,"HTMLInputElement")},goog.dom.asserts.assertIsHTMLTextAreaElement=function(e){return goog.dom.asserts.assertIsElementType_(e,"HTMLTextAreaElement")},goog.dom.asserts.assertIsHTMLCanvasElement=function(e){return goog.dom.asserts.assertIsElementType_(e,"HTMLCanvasElement")},goog.dom.asserts.assertIsHTMLEmbedElement=function(e){return goog.dom.asserts.assertIsElementType_(e,"HTMLEmbedElement")},goog.dom.asserts.assertIsHTMLFormElement=function(e){return goog.dom.asserts.assertIsElementType_(e,"HTMLFormElement")},goog.dom.asserts.assertIsHTMLFrameElement=function(e){return goog.dom.asserts.assertIsElementType_(e,"HTMLFrameElement")},goog.dom.asserts.assertIsHTMLIFrameElement=function(e){return goog.dom.asserts.assertIsElementType_(e,"HTMLIFrameElement")},goog.dom.asserts.assertIsHTMLObjectElement=function(e){return goog.dom.asserts.assertIsElementType_(e,"HTMLObjectElement")},goog.dom.asserts.assertIsHTMLScriptElement=function(e){return goog.dom.asserts.assertIsElementType_(e,"HTMLScriptElement")},goog.dom.asserts.debugStringForType_=function(e){if(!goog.isObject(e))return void 0===e?"undefined":null===e?"null":typeof e;try{return e.constructor.displayName||e.constructor.name||Object.prototype.toString.call(e)}catch(e){return"<object could not be stringified>"}},goog.dom.asserts.getWindow_=function(e){try{var t=e&&e.ownerDocument,o=t&&(t.defaultView||t.parentWindow);if((o=o||goog.global).Element&&o.Location)return o}catch(e){}return null},goog.functions={},goog.functions.constant=function(e){return function(){return e}},goog.functions.FALSE=function(){return!1},goog.functions.TRUE=function(){return!0},goog.functions.NULL=function(){return null},goog.functions.identity=function(e,t){return e},goog.functions.error=function(e){return function(){throw Error(e)}},goog.functions.fail=function(e){return function(){throw e}},goog.functions.lock=function(e,t){return t=t||0,function(){return e.apply(this,Array.prototype.slice.call(arguments,0,t))}},goog.functions.nth=function(e){return function(){return arguments[e]}},goog.functions.partialRight=function(e,t){var o=Array.prototype.slice.call(arguments,1);return function(){var t=Array.prototype.slice.call(arguments);return t.push.apply(t,o),e.apply(this,t)}},goog.functions.withReturnValue=function(e,t){return goog.functions.sequence(e,goog.functions.constant(t))},goog.functions.equalTo=function(e,t){return function(o){return t?e==o:e===o}},goog.functions.compose=function(e,t){var o=arguments,r=o.length;return function(){var e;r&&(e=o[r-1].apply(this,arguments));for(var t=r-2;0<=t;t--)e=o[t].call(this,e);return e}},goog.functions.sequence=function(e){var t=arguments,o=t.length;return function(){for(var e,r=0;r<o;r++)e=t[r].apply(this,arguments);return e}},goog.functions.and=function(e){var t=arguments,o=t.length;return function(){for(var e=0;e<o;e++)if(!t[e].apply(this,arguments))return!1;return!0}},goog.functions.or=function(e){var t=arguments,o=t.length;return function(){for(var e=0;e<o;e++)if(t[e].apply(this,arguments))return!0;return!1}},goog.functions.not=function(e){return function(){return!e.apply(this,arguments)}},goog.functions.create=function(e,t){var o=function(){};return o.prototype=e.prototype,o=new o,e.apply(o,Array.prototype.slice.call(arguments,1)),o},goog.functions.CACHE_RETURN_VALUE=!0,goog.functions.cacheReturnValue=function(e){var t,o=!1;return function(){return goog.functions.CACHE_RETURN_VALUE?(o||(t=e(),o=!0),t):e()}},goog.functions.once=function(e){var t=e;return function(){if(t){var e=t;t=null,e()}}},goog.functions.debounce=function(e,t,o){var r=0;return function(n){goog.global.clearTimeout(r);var s=arguments;r=goog.global.setTimeout((function(){e.apply(o,s)}),t)}},goog.functions.throttle=function(e,t,o){var r=0,n=!1,s=[],i=function(){r=0,n&&(n=!1,a())},a=function(){r=goog.global.setTimeout(i,t),e.apply(o,s)};return function(e){s=arguments,r?n=!0:a()}},goog.functions.rateLimit=function(e,t,o){var r=0,n=function(){r=0};return function(s){r||(r=goog.global.setTimeout(n,t),e.apply(o,arguments))}},goog.dom.HtmlElement=function(){},goog.dom.TagName=function(e){this.tagName_=e},goog.dom.TagName.prototype.toString=function(){return this.tagName_},goog.dom.TagName.A=new goog.dom.TagName("A"),goog.dom.TagName.ABBR=new goog.dom.TagName("ABBR"),goog.dom.TagName.ACRONYM=new goog.dom.TagName("ACRONYM"),goog.dom.TagName.ADDRESS=new goog.dom.TagName("ADDRESS"),goog.dom.TagName.APPLET=new goog.dom.TagName("APPLET"),goog.dom.TagName.AREA=new goog.dom.TagName("AREA"),goog.dom.TagName.ARTICLE=new goog.dom.TagName("ARTICLE"),goog.dom.TagName.ASIDE=new goog.dom.TagName("ASIDE"),goog.dom.TagName.AUDIO=new goog.dom.TagName("AUDIO"),goog.dom.TagName.B=new goog.dom.TagName("B"),goog.dom.TagName.BASE=new goog.dom.TagName("BASE"),goog.dom.TagName.BASEFONT=new goog.dom.TagName("BASEFONT"),goog.dom.TagName.BDI=new goog.dom.TagName("BDI"),goog.dom.TagName.BDO=new goog.dom.TagName("BDO"),goog.dom.TagName.BIG=new goog.dom.TagName("BIG"),goog.dom.TagName.BLOCKQUOTE=new goog.dom.TagName("BLOCKQUOTE"),goog.dom.TagName.BODY=new goog.dom.TagName("BODY"),goog.dom.TagName.BR=new goog.dom.TagName("BR"),goog.dom.TagName.BUTTON=new goog.dom.TagName("BUTTON"),goog.dom.TagName.CANVAS=new goog.dom.TagName("CANVAS"),goog.dom.TagName.CAPTION=new goog.dom.TagName("CAPTION"),goog.dom.TagName.CENTER=new goog.dom.TagName("CENTER"),goog.dom.TagName.CITE=new goog.dom.TagName("CITE"),goog.dom.TagName.CODE=new goog.dom.TagName("CODE"),goog.dom.TagName.COL=new goog.dom.TagName("COL"),goog.dom.TagName.COLGROUP=new goog.dom.TagName("COLGROUP"),goog.dom.TagName.COMMAND=new goog.dom.TagName("COMMAND"),goog.dom.TagName.DATA=new goog.dom.TagName("DATA"),goog.dom.TagName.DATALIST=new goog.dom.TagName("DATALIST"),goog.dom.TagName.DD=new goog.dom.TagName("DD"),goog.dom.TagName.DEL=new goog.dom.TagName("DEL"),goog.dom.TagName.DETAILS=new goog.dom.TagName("DETAILS"),goog.dom.TagName.DFN=new goog.dom.TagName("DFN"),goog.dom.TagName.DIALOG=new goog.dom.TagName("DIALOG"),goog.dom.TagName.DIR=new goog.dom.TagName("DIR"),goog.dom.TagName.DIV=new goog.dom.TagName("DIV"),goog.dom.TagName.DL=new goog.dom.TagName("DL"),goog.dom.TagName.DT=new goog.dom.TagName("DT"),goog.dom.TagName.EM=new goog.dom.TagName("EM"),goog.dom.TagName.EMBED=new goog.dom.TagName("EMBED"),goog.dom.TagName.FIELDSET=new goog.dom.TagName("FIELDSET"),goog.dom.TagName.FIGCAPTION=new goog.dom.TagName("FIGCAPTION"),goog.dom.TagName.FIGURE=new goog.dom.TagName("FIGURE"),goog.dom.TagName.FONT=new goog.dom.TagName("FONT"),goog.dom.TagName.FOOTER=new goog.dom.TagName("FOOTER"),goog.dom.TagName.FORM=new goog.dom.TagName("FORM"),goog.dom.TagName.FRAME=new goog.dom.TagName("FRAME"),goog.dom.TagName.FRAMESET=new goog.dom.TagName("FRAMESET"),goog.dom.TagName.H1=new goog.dom.TagName("H1"),goog.dom.TagName.H2=new goog.dom.TagName("H2"),goog.dom.TagName.H3=new goog.dom.TagName("H3"),goog.dom.TagName.H4=new goog.dom.TagName("H4"),goog.dom.TagName.H5=new goog.dom.TagName("H5"),goog.dom.TagName.H6=new goog.dom.TagName("H6"),goog.dom.TagName.HEAD=new goog.dom.TagName("HEAD"),goog.dom.TagName.HEADER=new goog.dom.TagName("HEADER"),goog.dom.TagName.HGROUP=new goog.dom.TagName("HGROUP"),goog.dom.TagName.HR=new goog.dom.TagName("HR"),goog.dom.TagName.HTML=new goog.dom.TagName("HTML"),goog.dom.TagName.I=new goog.dom.TagName("I"),goog.dom.TagName.IFRAME=new goog.dom.TagName("IFRAME"),goog.dom.TagName.IMG=new goog.dom.TagName("IMG"),goog.dom.TagName.INPUT=new goog.dom.TagName("INPUT"),goog.dom.TagName.INS=new goog.dom.TagName("INS"),goog.dom.TagName.ISINDEX=new goog.dom.TagName("ISINDEX"),goog.dom.TagName.KBD=new goog.dom.TagName("KBD"),goog.dom.TagName.KEYGEN=new goog.dom.TagName("KEYGEN"),goog.dom.TagName.LABEL=new goog.dom.TagName("LABEL"),goog.dom.TagName.LEGEND=new goog.dom.TagName("LEGEND"),goog.dom.TagName.LI=new goog.dom.TagName("LI"),goog.dom.TagName.LINK=new goog.dom.TagName("LINK"),goog.dom.TagName.MAIN=new goog.dom.TagName("MAIN"),goog.dom.TagName.MAP=new goog.dom.TagName("MAP"),goog.dom.TagName.MARK=new goog.dom.TagName("MARK"),goog.dom.TagName.MATH=new goog.dom.TagName("MATH"),goog.dom.TagName.MENU=new goog.dom.TagName("MENU"),goog.dom.TagName.MENUITEM=new goog.dom.TagName("MENUITEM"),goog.dom.TagName.META=new goog.dom.TagName("META"),goog.dom.TagName.METER=new goog.dom.TagName("METER"),goog.dom.TagName.NAV=new goog.dom.TagName("NAV"),goog.dom.TagName.NOFRAMES=new goog.dom.TagName("NOFRAMES"),goog.dom.TagName.NOSCRIPT=new goog.dom.TagName("NOSCRIPT"),goog.dom.TagName.OBJECT=new goog.dom.TagName("OBJECT"),goog.dom.TagName.OL=new goog.dom.TagName("OL"),goog.dom.TagName.OPTGROUP=new goog.dom.TagName("OPTGROUP"),goog.dom.TagName.OPTION=new goog.dom.TagName("OPTION"),goog.dom.TagName.OUTPUT=new goog.dom.TagName("OUTPUT"),goog.dom.TagName.P=new goog.dom.TagName("P"),goog.dom.TagName.PARAM=new goog.dom.TagName("PARAM"),goog.dom.TagName.PICTURE=new goog.dom.TagName("PICTURE"),goog.dom.TagName.PRE=new goog.dom.TagName("PRE"),goog.dom.TagName.PROGRESS=new goog.dom.TagName("PROGRESS"),goog.dom.TagName.Q=new goog.dom.TagName("Q"),goog.dom.TagName.RP=new goog.dom.TagName("RP"),goog.dom.TagName.RT=new goog.dom.TagName("RT"),goog.dom.TagName.RTC=new goog.dom.TagName("RTC"),goog.dom.TagName.RUBY=new goog.dom.TagName("RUBY"),goog.dom.TagName.S=new goog.dom.TagName("S"),goog.dom.TagName.SAMP=new goog.dom.TagName("SAMP"),goog.dom.TagName.SCRIPT=new goog.dom.TagName("SCRIPT"),goog.dom.TagName.SECTION=new goog.dom.TagName("SECTION"),goog.dom.TagName.SELECT=new goog.dom.TagName("SELECT"),goog.dom.TagName.SMALL=new goog.dom.TagName("SMALL"),goog.dom.TagName.SOURCE=new goog.dom.TagName("SOURCE"),goog.dom.TagName.SPAN=new goog.dom.TagName("SPAN"),goog.dom.TagName.STRIKE=new goog.dom.TagName("STRIKE"),goog.dom.TagName.STRONG=new goog.dom.TagName("STRONG"),goog.dom.TagName.STYLE=new goog.dom.TagName("STYLE"),goog.dom.TagName.SUB=new goog.dom.TagName("SUB"),goog.dom.TagName.SUMMARY=new goog.dom.TagName("SUMMARY"),goog.dom.TagName.SUP=new goog.dom.TagName("SUP"),goog.dom.TagName.SVG=new goog.dom.TagName("SVG"),goog.dom.TagName.TABLE=new goog.dom.TagName("TABLE"),goog.dom.TagName.TBODY=new goog.dom.TagName("TBODY"),goog.dom.TagName.TD=new goog.dom.TagName("TD"),goog.dom.TagName.TEMPLATE=new goog.dom.TagName("TEMPLATE"),goog.dom.TagName.TEXTAREA=new goog.dom.TagName("TEXTAREA"),goog.dom.TagName.TFOOT=new goog.dom.TagName("TFOOT"),goog.dom.TagName.TH=new goog.dom.TagName("TH"),goog.dom.TagName.THEAD=new goog.dom.TagName("THEAD"),goog.dom.TagName.TIME=new goog.dom.TagName("TIME"),goog.dom.TagName.TITLE=new goog.dom.TagName("TITLE"),goog.dom.TagName.TR=new goog.dom.TagName("TR"),goog.dom.TagName.TRACK=new goog.dom.TagName("TRACK"),goog.dom.TagName.TT=new goog.dom.TagName("TT"),goog.dom.TagName.U=new goog.dom.TagName("U"),goog.dom.TagName.UL=new goog.dom.TagName("UL"),goog.dom.TagName.VAR=new goog.dom.TagName("VAR"),goog.dom.TagName.VIDEO=new goog.dom.TagName("VIDEO"),goog.dom.TagName.WBR=new goog.dom.TagName("WBR"),goog.dom.tags={},goog.dom.tags.VOID_TAGS_={area:!0,base:!0,br:!0,col:!0,command:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0},goog.dom.tags.isVoidTag=function(e){return!0===goog.dom.tags.VOID_TAGS_[e]},goog.html={},goog.html.trustedtypes={},goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY=goog.TRUSTED_TYPES_POLICY_NAME?goog.createTrustedTypesPolicy(goog.TRUSTED_TYPES_POLICY_NAME+"#html"):null,goog.string={},goog.string.TypedString=function(){},goog.string.Const=function(e,t){this.stringConstValueWithSecurityContract__googStringSecurityPrivate_=e===goog.string.Const.GOOG_STRING_CONSTRUCTOR_TOKEN_PRIVATE_&&t||"",this.STRING_CONST_TYPE_MARKER__GOOG_STRING_SECURITY_PRIVATE_=goog.string.Const.TYPE_MARKER_},goog.string.Const.prototype.implementsGoogStringTypedString=!0,goog.string.Const.prototype.getTypedStringValue=function(){return this.stringConstValueWithSecurityContract__googStringSecurityPrivate_},goog.string.Const.prototype.toString=function(){return"Const{"+this.stringConstValueWithSecurityContract__googStringSecurityPrivate_+"}"},goog.string.Const.unwrap=function(e){return e instanceof goog.string.Const&&e.constructor===goog.string.Const&&e.STRING_CONST_TYPE_MARKER__GOOG_STRING_SECURITY_PRIVATE_===goog.string.Const.TYPE_MARKER_?e.stringConstValueWithSecurityContract__googStringSecurityPrivate_:(goog.asserts.fail("expected object of type Const, got \'"+e+"\'"),"type_error:Const")},goog.string.Const.from=function(e){return new goog.string.Const(goog.string.Const.GOOG_STRING_CONSTRUCTOR_TOKEN_PRIVATE_,e)},goog.string.Const.TYPE_MARKER_={},goog.string.Const.GOOG_STRING_CONSTRUCTOR_TOKEN_PRIVATE_={},goog.string.Const.EMPTY=goog.string.Const.from(""),goog.html.SafeScript=function(){this.privateDoNotAccessOrElseSafeScriptWrappedValue_="",this.SAFE_SCRIPT_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_=goog.html.SafeScript.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_},goog.html.SafeScript.prototype.implementsGoogStringTypedString=!0,goog.html.SafeScript.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_={},goog.html.SafeScript.fromConstant=function(e){return 0===(e=goog.string.Const.unwrap(e)).length?goog.html.SafeScript.EMPTY:goog.html.SafeScript.createSafeScriptSecurityPrivateDoNotAccessOrElse(e)},goog.html.SafeScript.fromConstantAndArgs=function(e,t){for(var o=[],r=1;r<arguments.length;r++)o.push(goog.html.SafeScript.stringify_(arguments[r]));return goog.html.SafeScript.createSafeScriptSecurityPrivateDoNotAccessOrElse("("+goog.string.Const.unwrap(e)+")("+o.join(", ")+");")},goog.html.SafeScript.fromJson=function(e){return goog.html.SafeScript.createSafeScriptSecurityPrivateDoNotAccessOrElse(goog.html.SafeScript.stringify_(e))},goog.html.SafeScript.prototype.getTypedStringValue=function(){return this.privateDoNotAccessOrElseSafeScriptWrappedValue_.toString()},goog.DEBUG&&(goog.html.SafeScript.prototype.toString=function(){return"SafeScript{"+this.privateDoNotAccessOrElseSafeScriptWrappedValue_+"}"}),goog.html.SafeScript.unwrap=function(e){return goog.html.SafeScript.unwrapTrustedScript(e).toString()},goog.html.SafeScript.unwrapTrustedScript=function(e){return e instanceof goog.html.SafeScript&&e.constructor===goog.html.SafeScript&&e.SAFE_SCRIPT_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_===goog.html.SafeScript.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_?e.privateDoNotAccessOrElseSafeScriptWrappedValue_:(goog.asserts.fail("expected object of type SafeScript, got \'"+e+"\' of type "+goog.typeOf(e)),"type_error:SafeScript")},goog.html.SafeScript.stringify_=function(e){return JSON.stringify(e).replace(/</g,"\\\\x3c")},goog.html.SafeScript.createSafeScriptSecurityPrivateDoNotAccessOrElse=function(e){return(new goog.html.SafeScript).initSecurityPrivateDoNotAccessOrElse_(e)},goog.html.SafeScript.prototype.initSecurityPrivateDoNotAccessOrElse_=function(e){return this.privateDoNotAccessOrElseSafeScriptWrappedValue_=goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY?goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY.createScript(e):e,this},goog.html.SafeScript.EMPTY=goog.html.SafeScript.createSafeScriptSecurityPrivateDoNotAccessOrElse(""),goog.fs={},goog.fs.url={},goog.fs.url.createObjectUrl=function(e){return goog.fs.url.getUrlObject_().createObjectURL(e)},goog.fs.url.revokeObjectUrl=function(e){goog.fs.url.getUrlObject_().revokeObjectURL(e)},goog.fs.url.getUrlObject_=function(){var e=goog.fs.url.findUrlObject_();if(null!=e)return e;throw Error("This browser doesn\'t seem to support blob URLs")},goog.fs.url.findUrlObject_=function(){return goog.isDef(goog.global.URL)&&goog.isDef(goog.global.URL.createObjectURL)?goog.global.URL:goog.isDef(goog.global.webkitURL)&&goog.isDef(goog.global.webkitURL.createObjectURL)?goog.global.webkitURL:goog.isDef(goog.global.createObjectURL)?goog.global:null},goog.fs.url.browserSupportsObjectUrls=function(){return null!=goog.fs.url.findUrlObject_()},goog.i18n={},goog.i18n.bidi={},goog.i18n.bidi.FORCE_RTL=!1,goog.i18n.bidi.IS_RTL=goog.i18n.bidi.FORCE_RTL||("ar"==goog.LOCALE.substring(0,2).toLowerCase()||"fa"==goog.LOCALE.substring(0,2).toLowerCase()||"he"==goog.LOCALE.substring(0,2).toLowerCase()||"iw"==goog.LOCALE.substring(0,2).toLowerCase()||"ps"==goog.LOCALE.substring(0,2).toLowerCase()||"sd"==goog.LOCALE.substring(0,2).toLowerCase()||"ug"==goog.LOCALE.substring(0,2).toLowerCase()||"ur"==goog.LOCALE.substring(0,2).toLowerCase()||"yi"==goog.LOCALE.substring(0,2).toLowerCase())&&(2==goog.LOCALE.length||"-"==goog.LOCALE.substring(2,3)||"_"==goog.LOCALE.substring(2,3))||3<=goog.LOCALE.length&&"ckb"==goog.LOCALE.substring(0,3).toLowerCase()&&(3==goog.LOCALE.length||"-"==goog.LOCALE.substring(3,4)||"_"==goog.LOCALE.substring(3,4))||7<=goog.LOCALE.length&&("-"==goog.LOCALE.substring(2,3)||"_"==goog.LOCALE.substring(2,3))&&("adlm"==goog.LOCALE.substring(3,7).toLowerCase()||"arab"==goog.LOCALE.substring(3,7).toLowerCase()||"hebr"==goog.LOCALE.substring(3,7).toLowerCase()||"nkoo"==goog.LOCALE.substring(3,7).toLowerCase()||"rohg"==goog.LOCALE.substring(3,7).toLowerCase()||"thaa"==goog.LOCALE.substring(3,7).toLowerCase())||8<=goog.LOCALE.length&&("-"==goog.LOCALE.substring(3,4)||"_"==goog.LOCALE.substring(3,4))&&("adlm"==goog.LOCALE.substring(4,8).toLowerCase()||"arab"==goog.LOCALE.substring(4,8).toLowerCase()||"hebr"==goog.LOCALE.substring(4,8).toLowerCase()||"nkoo"==goog.LOCALE.substring(4,8).toLowerCase()||"rohg"==goog.LOCALE.substring(4,8).toLowerCase()||"thaa"==goog.LOCALE.substring(4,8).toLowerCase()),goog.i18n.bidi.Format={LRE:"",RLE:"",PDF:"",LRM:"",RLM:""},goog.i18n.bidi.Dir={LTR:1,RTL:-1,NEUTRAL:0},goog.i18n.bidi.RIGHT="right",goog.i18n.bidi.LEFT="left",goog.i18n.bidi.I18N_RIGHT=goog.i18n.bidi.IS_RTL?goog.i18n.bidi.LEFT:goog.i18n.bidi.RIGHT,goog.i18n.bidi.I18N_LEFT=goog.i18n.bidi.IS_RTL?goog.i18n.bidi.RIGHT:goog.i18n.bidi.LEFT,goog.i18n.bidi.toDir=function(e,t){return"number"==typeof e?0<e?goog.i18n.bidi.Dir.LTR:0>e?goog.i18n.bidi.Dir.RTL:t?null:goog.i18n.bidi.Dir.NEUTRAL:null==e?null:e?goog.i18n.bidi.Dir.RTL:goog.i18n.bidi.Dir.LTR},goog.i18n.bidi.ltrChars_="A-Za-zÀ-ÖØ-öø-ʸ̀-ऀ-Ⰰ-\\ud801\\ud804-\\ud839\\ud83c-\\udbff豈-︀--",goog.i18n.bidi.rtlChars_="֑-ۯۺ-ࣿ\\ud802-\\ud803\\ud83a-\\ud83bיִ-﷿ﹰ-ﻼ",goog.i18n.bidi.htmlSkipReg_=/<[^>]*>|&[^;]+;/g,goog.i18n.bidi.stripHtmlIfNeeded_=function(e,t){return t?e.replace(goog.i18n.bidi.htmlSkipReg_,""):e},goog.i18n.bidi.rtlCharReg_=new RegExp("["+goog.i18n.bidi.rtlChars_+"]"),goog.i18n.bidi.ltrCharReg_=new RegExp("["+goog.i18n.bidi.ltrChars_+"]"),goog.i18n.bidi.hasAnyRtl=function(e,t){return goog.i18n.bidi.rtlCharReg_.test(goog.i18n.bidi.stripHtmlIfNeeded_(e,t))},goog.i18n.bidi.hasRtlChar=goog.i18n.bidi.hasAnyRtl,goog.i18n.bidi.hasAnyLtr=function(e,t){return goog.i18n.bidi.ltrCharReg_.test(goog.i18n.bidi.stripHtmlIfNeeded_(e,t))},goog.i18n.bidi.ltrRe_=new RegExp("^["+goog.i18n.bidi.ltrChars_+"]"),goog.i18n.bidi.rtlRe_=new RegExp("^["+goog.i18n.bidi.rtlChars_+"]"),goog.i18n.bidi.isRtlChar=function(e){return goog.i18n.bidi.rtlRe_.test(e)},goog.i18n.bidi.isLtrChar=function(e){return goog.i18n.bidi.ltrRe_.test(e)},goog.i18n.bidi.isNeutralChar=function(e){return!goog.i18n.bidi.isLtrChar(e)&&!goog.i18n.bidi.isRtlChar(e)},goog.i18n.bidi.ltrDirCheckRe_=new RegExp("^[^"+goog.i18n.bidi.rtlChars_+"]*["+goog.i18n.bidi.ltrChars_+"]"),goog.i18n.bidi.rtlDirCheckRe_=new RegExp("^[^"+goog.i18n.bidi.ltrChars_+"]*["+goog.i18n.bidi.rtlChars_+"]"),goog.i18n.bidi.startsWithRtl=function(e,t){return goog.i18n.bidi.rtlDirCheckRe_.test(goog.i18n.bidi.stripHtmlIfNeeded_(e,t))},goog.i18n.bidi.isRtlText=goog.i18n.bidi.startsWithRtl,goog.i18n.bidi.startsWithLtr=function(e,t){return goog.i18n.bidi.ltrDirCheckRe_.test(goog.i18n.bidi.stripHtmlIfNeeded_(e,t))},goog.i18n.bidi.isLtrText=goog.i18n.bidi.startsWithLtr,goog.i18n.bidi.isRequiredLtrRe_=/^http:\\/\\/.*/,goog.i18n.bidi.isNeutralText=function(e,t){return e=goog.i18n.bidi.stripHtmlIfNeeded_(e,t),goog.i18n.bidi.isRequiredLtrRe_.test(e)||!goog.i18n.bidi.hasAnyLtr(e)&&!goog.i18n.bidi.hasAnyRtl(e)},goog.i18n.bidi.ltrExitDirCheckRe_=new RegExp("["+goog.i18n.bidi.ltrChars_+"][^"+goog.i18n.bidi.rtlChars_+"]*$"),goog.i18n.bidi.rtlExitDirCheckRe_=new RegExp("["+goog.i18n.bidi.rtlChars_+"][^"+goog.i18n.bidi.ltrChars_+"]*$"),goog.i18n.bidi.endsWithLtr=function(e,t){return goog.i18n.bidi.ltrExitDirCheckRe_.test(goog.i18n.bidi.stripHtmlIfNeeded_(e,t))},goog.i18n.bidi.isLtrExitText=goog.i18n.bidi.endsWithLtr,goog.i18n.bidi.endsWithRtl=function(e,t){return goog.i18n.bidi.rtlExitDirCheckRe_.test(goog.i18n.bidi.stripHtmlIfNeeded_(e,t))},goog.i18n.bidi.isRtlExitText=goog.i18n.bidi.endsWithRtl,goog.i18n.bidi.rtlLocalesRe_=/^(ar|ckb|dv|he|iw|fa|nqo|ps|sd|ug|ur|yi|.*[-_](Adlm|Arab|Hebr|Nkoo|Rohg|Thaa))(?!.*[-_](Latn|Cyrl)($|-|_))($|-|_)/i,goog.i18n.bidi.isRtlLanguage=function(e){return goog.i18n.bidi.rtlLocalesRe_.test(e)},goog.i18n.bidi.bracketGuardTextRe_=/(\\(.*?\\)+)|(\\[.*?\\]+)|(\\{.*?\\}+)|(<.*?>+)/g,goog.i18n.bidi.guardBracketInText=function(e,t){return t=(void 0===t?goog.i18n.bidi.hasAnyRtl(e):t)?goog.i18n.bidi.Format.RLM:goog.i18n.bidi.Format.LRM,e.replace(goog.i18n.bidi.bracketGuardTextRe_,t+"$&"+t)},goog.i18n.bidi.enforceRtlInHtml=function(e){return"<"==e.charAt(0)?e.replace(/<\\w+/,"$& dir=rtl"):"\\n<span dir=rtl>"+e+"</span>"},goog.i18n.bidi.enforceRtlInText=function(e){return goog.i18n.bidi.Format.RLE+e+goog.i18n.bidi.Format.PDF},goog.i18n.bidi.enforceLtrInHtml=function(e){return"<"==e.charAt(0)?e.replace(/<\\w+/,"$& dir=ltr"):"\\n<span dir=ltr>"+e+"</span>"},goog.i18n.bidi.enforceLtrInText=function(e){return goog.i18n.bidi.Format.LRE+e+goog.i18n.bidi.Format.PDF},goog.i18n.bidi.dimensionsRe_=/:\\s*([.\\d][.\\w]*)\\s+([.\\d][.\\w]*)\\s+([.\\d][.\\w]*)\\s+([.\\d][.\\w]*)/g,goog.i18n.bidi.leftRe_=/left/gi,goog.i18n.bidi.rightRe_=/right/gi,goog.i18n.bidi.tempRe_=/%%%%/g,goog.i18n.bidi.mirrorCSS=function(e){return e.replace(goog.i18n.bidi.dimensionsRe_,":$1 $4 $3 $2").replace(goog.i18n.bidi.leftRe_,"%%%%").replace(goog.i18n.bidi.rightRe_,goog.i18n.bidi.LEFT).replace(goog.i18n.bidi.tempRe_,goog.i18n.bidi.RIGHT)},goog.i18n.bidi.doubleQuoteSubstituteRe_=/([\\u0591-\\u05f2])"/g,goog.i18n.bidi.singleQuoteSubstituteRe_=/([\\u0591-\\u05f2])\'/g,goog.i18n.bidi.normalizeHebrewQuote=function(e){return e.replace(goog.i18n.bidi.doubleQuoteSubstituteRe_,"$1״").replace(goog.i18n.bidi.singleQuoteSubstituteRe_,"$1׳")},goog.i18n.bidi.wordSeparatorRe_=/\\s+/,goog.i18n.bidi.hasNumeralsRe_=/[\\d\\u06f0-\\u06f9]/,goog.i18n.bidi.rtlDetectionThreshold_=.4,goog.i18n.bidi.estimateDirection=function(e,t){var o=0,r=0,n=!1;for(e=goog.i18n.bidi.stripHtmlIfNeeded_(e,t).split(goog.i18n.bidi.wordSeparatorRe_),t=0;t<e.length;t++){var s=e[t];goog.i18n.bidi.startsWithRtl(s)?(o++,r++):goog.i18n.bidi.isRequiredLtrRe_.test(s)?n=!0:goog.i18n.bidi.hasAnyLtr(s)?r++:goog.i18n.bidi.hasNumeralsRe_.test(s)&&(n=!0)}return 0==r?n?goog.i18n.bidi.Dir.LTR:goog.i18n.bidi.Dir.NEUTRAL:o/r>goog.i18n.bidi.rtlDetectionThreshold_?goog.i18n.bidi.Dir.RTL:goog.i18n.bidi.Dir.LTR},goog.i18n.bidi.detectRtlDirectionality=function(e,t){return goog.i18n.bidi.estimateDirection(e,t)==goog.i18n.bidi.Dir.RTL},goog.i18n.bidi.setElementDirAndAlign=function(e,t){e&&(t=goog.i18n.bidi.toDir(t))&&(e.style.textAlign=t==goog.i18n.bidi.Dir.RTL?goog.i18n.bidi.RIGHT:goog.i18n.bidi.LEFT,e.dir=t==goog.i18n.bidi.Dir.RTL?"rtl":"ltr")},goog.i18n.bidi.setElementDirByTextDirectionality=function(e,t){switch(goog.i18n.bidi.estimateDirection(t)){case goog.i18n.bidi.Dir.LTR:e.dir="ltr";break;case goog.i18n.bidi.Dir.RTL:e.dir="rtl";break;default:e.removeAttribute("dir")}},goog.i18n.bidi.DirectionalString=function(){},goog.html.TrustedResourceUrl=function(){this.privateDoNotAccessOrElseTrustedResourceUrlWrappedValue_="",this.trustedURL_=null,this.TRUSTED_RESOURCE_URL_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_=goog.html.TrustedResourceUrl.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_},goog.html.TrustedResourceUrl.prototype.implementsGoogStringTypedString=!0,goog.html.TrustedResourceUrl.prototype.getTypedStringValue=function(){return this.privateDoNotAccessOrElseTrustedResourceUrlWrappedValue_.toString()},goog.html.TrustedResourceUrl.prototype.implementsGoogI18nBidiDirectionalString=!0,goog.html.TrustedResourceUrl.prototype.getDirection=function(){return goog.i18n.bidi.Dir.LTR},goog.html.TrustedResourceUrl.prototype.cloneWithParams=function(e,t){var o=goog.html.TrustedResourceUrl.unwrap(this),r=(o=goog.html.TrustedResourceUrl.URL_PARAM_PARSER_.exec(o))[3]||"";return goog.html.TrustedResourceUrl.createTrustedResourceUrlSecurityPrivateDoNotAccessOrElse(o[1]+goog.html.TrustedResourceUrl.stringifyParams_("?",o[2]||"",e)+goog.html.TrustedResourceUrl.stringifyParams_("#",r,t))},goog.DEBUG&&(goog.html.TrustedResourceUrl.prototype.toString=function(){return"TrustedResourceUrl{"+this.privateDoNotAccessOrElseTrustedResourceUrlWrappedValue_+"}"}),goog.html.TrustedResourceUrl.unwrap=function(e){return goog.html.TrustedResourceUrl.unwrapTrustedScriptURL(e).toString()},goog.html.TrustedResourceUrl.unwrapTrustedScriptURL=function(e){return e instanceof goog.html.TrustedResourceUrl&&e.constructor===goog.html.TrustedResourceUrl&&e.TRUSTED_RESOURCE_URL_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_===goog.html.TrustedResourceUrl.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_?e.privateDoNotAccessOrElseTrustedResourceUrlWrappedValue_:(goog.asserts.fail("expected object of type TrustedResourceUrl, got \'"+e+"\' of type "+goog.typeOf(e)),"type_error:TrustedResourceUrl")},goog.html.TrustedResourceUrl.unwrapTrustedURL=function(e){return e.trustedURL_?e.trustedURL_:goog.html.TrustedResourceUrl.unwrap(e)},goog.html.TrustedResourceUrl.format=function(e,t){var o=goog.string.Const.unwrap(e);if(!goog.html.TrustedResourceUrl.BASE_URL_.test(o))throw Error("Invalid TrustedResourceUrl format: "+o);return e=o.replace(goog.html.TrustedResourceUrl.FORMAT_MARKER_,(function(e,r){if(!Object.prototype.hasOwnProperty.call(t,r))throw Error(\'Found marker, "\'+r+\'", in format string, "\'+o+\'", but no valid label mapping found in args: \'+JSON.stringify(t));return(e=t[r])instanceof goog.string.Const?goog.string.Const.unwrap(e):encodeURIComponent(String(e))})),goog.html.TrustedResourceUrl.createTrustedResourceUrlSecurityPrivateDoNotAccessOrElse(e)},goog.html.TrustedResourceUrl.FORMAT_MARKER_=/%{(\\w+)}/g,goog.html.TrustedResourceUrl.BASE_URL_=/^((https:)?\\/\\/[0-9a-z.:[\\]-]+\\/|\\/[^/\\\\]|[^:/\\\\%]+\\/|[^:/\\\\%]*[?#]|about:blank#)/i,goog.html.TrustedResourceUrl.URL_PARAM_PARSER_=/^([^?#]*)(\\?[^#]*)?(#[\\s\\S]*)?/,goog.html.TrustedResourceUrl.formatWithParams=function(e,t,o,r){return goog.html.TrustedResourceUrl.format(e,t).cloneWithParams(o,r)},goog.html.TrustedResourceUrl.fromConstant=function(e){return goog.html.TrustedResourceUrl.createTrustedResourceUrlSecurityPrivateDoNotAccessOrElse(goog.string.Const.unwrap(e))},goog.html.TrustedResourceUrl.fromConstants=function(e){for(var t="",o=0;o<e.length;o++)t+=goog.string.Const.unwrap(e[o]);return goog.html.TrustedResourceUrl.createTrustedResourceUrlSecurityPrivateDoNotAccessOrElse(t)},goog.html.TrustedResourceUrl.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_={},goog.html.TrustedResourceUrl.createTrustedResourceUrlSecurityPrivateDoNotAccessOrElse=function(e){var t=new goog.html.TrustedResourceUrl;return t.privateDoNotAccessOrElseTrustedResourceUrlWrappedValue_=goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY?goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY.createScriptURL(e):e,goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY&&(t.trustedURL_=goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY.createURL(e)),t},goog.html.TrustedResourceUrl.stringifyParams_=function(e,t,o){if(null==o)return t;if(goog.isString(o))return o?e+encodeURIComponent(o):"";for(var r in o){var n=o[r];n=goog.isArray(n)?n:[n];for(var s=0;s<n.length;s++){var i=n[s];null!=i&&(t||(t=e),t+=(t.length>e.length?"&":"")+encodeURIComponent(r)+"="+encodeURIComponent(String(i)))}}return t},goog.string.internal={},goog.string.internal.startsWith=function(e,t){return 0==e.lastIndexOf(t,0)},goog.string.internal.endsWith=function(e,t){var o=e.length-t.length;return 0<=o&&e.indexOf(t,o)==o},goog.string.internal.caseInsensitiveStartsWith=function(e,t){return 0==goog.string.internal.caseInsensitiveCompare(t,e.substr(0,t.length))},goog.string.internal.caseInsensitiveEndsWith=function(e,t){return 0==goog.string.internal.caseInsensitiveCompare(t,e.substr(e.length-t.length,t.length))},goog.string.internal.caseInsensitiveEquals=function(e,t){return e.toLowerCase()==t.toLowerCase()},goog.string.internal.isEmptyOrWhitespace=function(e){return/^[\\s\\xa0]*$/.test(e)},goog.string.internal.trim=goog.TRUSTED_SITE&&String.prototype.trim?function(e){return e.trim()}:function(e){return/^[\\s\\xa0]*([\\s\\S]*?)[\\s\\xa0]*$/.exec(e)[1]},goog.string.internal.caseInsensitiveCompare=function(e,t){return(e=String(e).toLowerCase())<(t=String(t).toLowerCase())?-1:e==t?0:1},goog.string.internal.newLineToBr=function(e,t){return e.replace(/(\\r\\n|\\r|\\n)/g,t?"<br />":"<br>")},goog.string.internal.htmlEscape=function(e,t){if(t)e=e.replace(goog.string.internal.AMP_RE_,"&").replace(goog.string.internal.LT_RE_,"<").replace(goog.string.internal.GT_RE_,">").replace(goog.string.internal.QUOT_RE_,""").replace(goog.string.internal.SINGLE_QUOTE_RE_,"'").replace(goog.string.internal.NULL_RE_,"�");else{if(!goog.string.internal.ALL_RE_.test(e))return e;-1!=e.indexOf("&")&&(e=e.replace(goog.string.internal.AMP_RE_,"&")),-1!=e.indexOf("<")&&(e=e.replace(goog.string.internal.LT_RE_,"<")),-1!=e.indexOf(">")&&(e=e.replace(goog.string.internal.GT_RE_,">")),-1!=e.indexOf(\'"\')&&(e=e.replace(goog.string.internal.QUOT_RE_,""")),-1!=e.indexOf("\'")&&(e=e.replace(goog.string.internal.SINGLE_QUOTE_RE_,"'")),-1!=e.indexOf("\\0")&&(e=e.replace(goog.string.internal.NULL_RE_,"�"))}return e},goog.string.internal.AMP_RE_=/&/g,goog.string.internal.LT_RE_=/</g,goog.string.internal.GT_RE_=/>/g,goog.string.internal.QUOT_RE_=/"/g,goog.string.internal.SINGLE_QUOTE_RE_=/\'/g,goog.string.internal.NULL_RE_=/\\x00/g,goog.string.internal.ALL_RE_=/[\\x00&<>"\']/,goog.string.internal.whitespaceEscape=function(e,t){return goog.string.internal.newLineToBr(e.replace(/ /g,"  "),t)},goog.string.internal.contains=function(e,t){return-1!=e.indexOf(t)},goog.string.internal.caseInsensitiveContains=function(e,t){return goog.string.internal.contains(e.toLowerCase(),t.toLowerCase())},goog.string.internal.compareVersions=function(e,t){var o=0;e=goog.string.internal.trim(String(e)).split("."),t=goog.string.internal.trim(String(t)).split(".");for(var r=Math.max(e.length,t.length),n=0;0==o&&n<r;n++){var s=e[n]||"",i=t[n]||"";do{if(s=/(\\d*)(\\D*)(.*)/.exec(s)||["","","",""],i=/(\\d*)(\\D*)(.*)/.exec(i)||["","","",""],0==s[0].length&&0==i[0].length)break;o=0==s[1].length?0:parseInt(s[1],10);var a=0==i[1].length?0:parseInt(i[1],10);o=goog.string.internal.compareElements_(o,a)||goog.string.internal.compareElements_(0==s[2].length,0==i[2].length)||goog.string.internal.compareElements_(s[2],i[2]),s=s[3],i=i[3]}while(0==o)}return o},goog.string.internal.compareElements_=function(e,t){return e<t?-1:e>t?1:0},goog.html.SafeUrl=function(){this.privateDoNotAccessOrElseSafeUrlWrappedValue_="",this.SAFE_URL_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_=goog.html.SafeUrl.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_},goog.html.SafeUrl.INNOCUOUS_STRING="about:invalid#zClosurez",goog.html.SafeUrl.prototype.implementsGoogStringTypedString=!0,goog.html.SafeUrl.prototype.getTypedStringValue=function(){return this.privateDoNotAccessOrElseSafeUrlWrappedValue_.toString()},goog.html.SafeUrl.prototype.implementsGoogI18nBidiDirectionalString=!0,goog.html.SafeUrl.prototype.getDirection=function(){return goog.i18n.bidi.Dir.LTR},goog.DEBUG&&(goog.html.SafeUrl.prototype.toString=function(){return"SafeUrl{"+this.privateDoNotAccessOrElseSafeUrlWrappedValue_+"}"}),goog.html.SafeUrl.unwrap=function(e){return goog.html.SafeUrl.unwrapTrustedURL(e).toString()},goog.html.SafeUrl.unwrapTrustedURL=function(e){return e instanceof goog.html.SafeUrl&&e.constructor===goog.html.SafeUrl&&e.SAFE_URL_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_===goog.html.SafeUrl.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_?e.privateDoNotAccessOrElseSafeUrlWrappedValue_:(goog.asserts.fail("expected object of type SafeUrl, got \'"+e+"\' of type "+goog.typeOf(e)),"type_error:SafeUrl")},goog.html.SafeUrl.fromConstant=function(e){return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(goog.string.Const.unwrap(e))},goog.html.SAFE_MIME_TYPE_PATTERN_=/^(?:audio\\/(?:3gpp2|3gpp|aac|L16|midi|mp3|mp4|mpeg|oga|ogg|opus|x-m4a|x-wav|wav|webm)|image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp|x-icon)|text\\/csv|video\\/(?:mpeg|mp4|ogg|webm|quicktime))(?:;\\w+=(?:\\w+|"[\\w;=]+"))*$/i,goog.html.SafeUrl.isSafeMimeType=function(e){return goog.html.SAFE_MIME_TYPE_PATTERN_.test(e)},goog.html.SafeUrl.fromBlob=function(e){return e=goog.html.SAFE_MIME_TYPE_PATTERN_.test(e.type)?goog.fs.url.createObjectUrl(e):goog.html.SafeUrl.INNOCUOUS_STRING,goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(e)},goog.html.DATA_URL_PATTERN_=/^data:([^,]*);base64,[a-z0-9+\\/]+=*$/i,goog.html.SafeUrl.fromDataUrl=function(e){var t=(e=e.replace(/(%0A|%0D)/g,"")).match(goog.html.DATA_URL_PATTERN_);return t=t&&goog.html.SAFE_MIME_TYPE_PATTERN_.test(t[1]),goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(t?e:goog.html.SafeUrl.INNOCUOUS_STRING)},goog.html.SafeUrl.fromTelUrl=function(e){return goog.string.internal.caseInsensitiveStartsWith(e,"tel:")||(e=goog.html.SafeUrl.INNOCUOUS_STRING),goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(e)},goog.html.SIP_URL_PATTERN_=/^sip[s]?:[+a-z0-9_.!$%&\'*\\/=^`{|}~-]+@([a-z0-9-]+\\.)+[a-z0-9]{2,63}$/i,goog.html.SafeUrl.fromSipUrl=function(e){return goog.html.SIP_URL_PATTERN_.test(decodeURIComponent(e))||(e=goog.html.SafeUrl.INNOCUOUS_STRING),goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(e)},goog.html.SafeUrl.fromFacebookMessengerUrl=function(e){return goog.string.internal.caseInsensitiveStartsWith(e,"fb-messenger://share")||(e=goog.html.SafeUrl.INNOCUOUS_STRING),goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(e)},goog.html.SafeUrl.fromWhatsAppUrl=function(e){return goog.string.internal.caseInsensitiveStartsWith(e,"whatsapp://send")||(e=goog.html.SafeUrl.INNOCUOUS_STRING),goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(e)},goog.html.SafeUrl.fromSmsUrl=function(e){return goog.string.internal.caseInsensitiveStartsWith(e,"sms:")&&goog.html.SafeUrl.isSmsUrlBodyValid_(e)||(e=goog.html.SafeUrl.INNOCUOUS_STRING),goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(e)},goog.html.SafeUrl.isSmsUrlBodyValid_=function(e){var t=e.indexOf("#");if(0<t&&(e=e.substring(0,t)),!(t=e.match(/[?&]body=/gi)))return!0;if(1<t.length)return!1;if(!(e=e.match(/[?&]body=([^&]*)/)[1]))return!0;try{decodeURIComponent(e)}catch(e){return!1}return/^(?:[a-z0-9\\-_.~]|%[0-9a-f]{2})+$/i.test(e)},goog.html.SafeUrl.fromSshUrl=function(e){return goog.string.internal.caseInsensitiveStartsWith(e,"ssh://")||(e=goog.html.SafeUrl.INNOCUOUS_STRING),goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(e)},goog.html.SafeUrl.sanitizeChromeExtensionUrl=function(e,t){return goog.html.SafeUrl.sanitizeExtensionUrl_(/^chrome-extension:\\/\\/([^\\/]+)\\//,e,t)},goog.html.SafeUrl.sanitizeFirefoxExtensionUrl=function(e,t){return goog.html.SafeUrl.sanitizeExtensionUrl_(/^moz-extension:\\/\\/([^\\/]+)\\//,e,t)},goog.html.SafeUrl.sanitizeEdgeExtensionUrl=function(e,t){return goog.html.SafeUrl.sanitizeExtensionUrl_(/^ms-browser-extension:\\/\\/([^\\/]+)\\//,e,t)},goog.html.SafeUrl.sanitizeExtensionUrl_=function(e,t,o){return(e=e.exec(t))?(e=e[1],-1==(o instanceof goog.string.Const?[goog.string.Const.unwrap(o)]:o.map((function(e){return goog.string.Const.unwrap(e)}))).indexOf(e)&&(t=goog.html.SafeUrl.INNOCUOUS_STRING)):t=goog.html.SafeUrl.INNOCUOUS_STRING,goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(t)},goog.html.SafeUrl.fromTrustedResourceUrl=function(e){return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(goog.html.TrustedResourceUrl.unwrap(e))},goog.html.SAFE_URL_PATTERN_=/^(?:(?:https?|mailto|ftp):|[^:/?#]*(?:[/?#]|$))/i,goog.html.SafeUrl.SAFE_URL_PATTERN=goog.html.SAFE_URL_PATTERN_,goog.html.SafeUrl.sanitize=function(e){return e instanceof goog.html.SafeUrl?e:(e="object"==typeof e&&e.implementsGoogStringTypedString?e.getTypedStringValue():String(e),goog.html.SAFE_URL_PATTERN_.test(e)||(e=goog.html.SafeUrl.INNOCUOUS_STRING),goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(e))},goog.html.SafeUrl.sanitizeAssertUnchanged=function(e,t){return e instanceof goog.html.SafeUrl?e:(e="object"==typeof e&&e.implementsGoogStringTypedString?e.getTypedStringValue():String(e),t&&/^data:/i.test(e)&&(t=goog.html.SafeUrl.fromDataUrl(e)).getTypedStringValue()==e?t:(goog.asserts.assert(goog.html.SAFE_URL_PATTERN_.test(e),"%s does not match the safe URL pattern",e)||(e=goog.html.SafeUrl.INNOCUOUS_STRING),goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(e)))},goog.html.SafeUrl.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_={},goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse=function(e){var t=new goog.html.SafeUrl;return t.privateDoNotAccessOrElseSafeUrlWrappedValue_=goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY?goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY.createURL(e):e,t},goog.html.SafeUrl.ABOUT_BLANK=goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse("about:blank"),goog.html.SafeStyle=function(){this.privateDoNotAccessOrElseSafeStyleWrappedValue_="",this.SAFE_STYLE_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_=goog.html.SafeStyle.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_},goog.html.SafeStyle.prototype.implementsGoogStringTypedString=!0,goog.html.SafeStyle.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_={},goog.html.SafeStyle.fromConstant=function(e){return 0===(e=goog.string.Const.unwrap(e)).length?goog.html.SafeStyle.EMPTY:(goog.asserts.assert(goog.string.internal.endsWith(e,";"),"Last character of style string is not \';\': "+e),goog.asserts.assert(goog.string.internal.contains(e,":"),"Style string must contain at least one \':\', to specify a \\"name: value\\" pair: "+e),goog.html.SafeStyle.createSafeStyleSecurityPrivateDoNotAccessOrElse(e))},goog.html.SafeStyle.prototype.getTypedStringValue=function(){return this.privateDoNotAccessOrElseSafeStyleWrappedValue_},goog.DEBUG&&(goog.html.SafeStyle.prototype.toString=function(){return"SafeStyle{"+this.privateDoNotAccessOrElseSafeStyleWrappedValue_+"}"}),goog.html.SafeStyle.unwrap=function(e){return e instanceof goog.html.SafeStyle&&e.constructor===goog.html.SafeStyle&&e.SAFE_STYLE_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_===goog.html.SafeStyle.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_?e.privateDoNotAccessOrElseSafeStyleWrappedValue_:(goog.asserts.fail("expected object of type SafeStyle, got \'"+e+"\' of type "+goog.typeOf(e)),"type_error:SafeStyle")},goog.html.SafeStyle.createSafeStyleSecurityPrivateDoNotAccessOrElse=function(e){return(new goog.html.SafeStyle).initSecurityPrivateDoNotAccessOrElse_(e)},goog.html.SafeStyle.prototype.initSecurityPrivateDoNotAccessOrElse_=function(e){return this.privateDoNotAccessOrElseSafeStyleWrappedValue_=e,this},goog.html.SafeStyle.EMPTY=goog.html.SafeStyle.createSafeStyleSecurityPrivateDoNotAccessOrElse(""),goog.html.SafeStyle.INNOCUOUS_STRING="zClosurez",goog.html.SafeStyle.create=function(e){var t,o="";for(t in e){if(!/^[-_a-zA-Z0-9]+$/.test(t))throw Error("Name allows only [-_a-zA-Z0-9], got: "+t);var r=e[t];null!=r&&(o+=t+":"+(r=goog.isArray(r)?goog.array.map(r,goog.html.SafeStyle.sanitizePropertyValue_).join(" "):goog.html.SafeStyle.sanitizePropertyValue_(r))+";")}return o?goog.html.SafeStyle.createSafeStyleSecurityPrivateDoNotAccessOrElse(o):goog.html.SafeStyle.EMPTY},goog.html.SafeStyle.sanitizePropertyValue_=function(e){if(e instanceof goog.html.SafeUrl)return\'url("\'+goog.html.SafeUrl.unwrap(e).replace(/</g,"%3c").replace(/[\\\\"]/g,"\\\\$&")+\'")\';if(e=e instanceof goog.string.Const?goog.string.Const.unwrap(e):goog.html.SafeStyle.sanitizePropertyValueString_(String(e)),/[{;}]/.test(e))throw new goog.asserts.AssertionError("Value does not allow [{;}], got: %s.",[e]);return e},goog.html.SafeStyle.sanitizePropertyValueString_=function(e){var t=e.replace(goog.html.SafeStyle.FUNCTIONS_RE_,"$1").replace(goog.html.SafeStyle.FUNCTIONS_RE_,"$1").replace(goog.html.SafeStyle.URL_RE_,"url");return goog.html.SafeStyle.VALUE_RE_.test(t)?goog.html.SafeStyle.COMMENT_RE_.test(e)?(goog.asserts.fail("String value disallows comments, got: "+e),goog.html.SafeStyle.INNOCUOUS_STRING):goog.html.SafeStyle.hasBalancedQuotes_(e)?goog.html.SafeStyle.hasBalancedSquareBrackets_(e)?goog.html.SafeStyle.sanitizeUrl_(e):(goog.asserts.fail("String value requires balanced square brackets and one identifier per pair of brackets, got: "+e),goog.html.SafeStyle.INNOCUOUS_STRING):(goog.asserts.fail("String value requires balanced quotes, got: "+e),goog.html.SafeStyle.INNOCUOUS_STRING):(goog.asserts.fail("String value allows only "+goog.html.SafeStyle.VALUE_ALLOWED_CHARS_+" and simple functions, got: "+e),goog.html.SafeStyle.INNOCUOUS_STRING)},goog.html.SafeStyle.hasBalancedQuotes_=function(e){for(var t=!0,o=!0,r=0;r<e.length;r++){var n=e.charAt(r);"\'"==n&&o?t=!t:\'"\'==n&&t&&(o=!o)}return t&&o},goog.html.SafeStyle.hasBalancedSquareBrackets_=function(e){for(var t=!0,o=/^[-_a-zA-Z0-9]$/,r=0;r<e.length;r++){var n=e.charAt(r);if("]"==n){if(t)return!1;t=!0}else if("["==n){if(!t)return!1;t=!1}else if(!t&&!o.test(n))return!1}return t},goog.html.SafeStyle.VALUE_ALLOWED_CHARS_="[-,.\\"\'%_!# a-zA-Z0-9\\\\[\\\\]]",goog.html.SafeStyle.VALUE_RE_=new RegExp("^"+goog.html.SafeStyle.VALUE_ALLOWED_CHARS_+"+$"),goog.html.SafeStyle.URL_RE_=/\\b(url\\([ \\t\\n]*)(\'[ -&(-\\[\\]-~]*\'|"[ !#-\\[\\]-~]*"|[!#-&*-\\[\\]-~]*)([ \\t\\n]*\\))/g,goog.html.SafeStyle.FUNCTIONS_RE_=/\\b(hsl|hsla|rgb|rgba|matrix|calc|minmax|fit-content|repeat|(rotate|scale|translate)(X|Y|Z|3d)?)\\([-+*/0-9a-z.%\\[\\], ]+\\)/g,goog.html.SafeStyle.COMMENT_RE_=/\\/\\*/,goog.html.SafeStyle.sanitizeUrl_=function(e){return e.replace(goog.html.SafeStyle.URL_RE_,(function(e,t,o,r){var n="";return o=o.replace(/^([\'"])(.*)\\1$/,(function(e,t,o){return n=t,o})),e=goog.html.SafeUrl.sanitize(o).getTypedStringValue(),t+n+e+n+r}))},goog.html.SafeStyle.concat=function(e){var t="",o=function(e){goog.isArray(e)?goog.array.forEach(e,o):t+=goog.html.SafeStyle.unwrap(e)};return goog.array.forEach(arguments,o),t?goog.html.SafeStyle.createSafeStyleSecurityPrivateDoNotAccessOrElse(t):goog.html.SafeStyle.EMPTY},goog.html.SafeStyleSheet=function(){this.privateDoNotAccessOrElseSafeStyleSheetWrappedValue_="",this.SAFE_STYLE_SHEET_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_=goog.html.SafeStyleSheet.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_},goog.html.SafeStyleSheet.prototype.implementsGoogStringTypedString=!0,goog.html.SafeStyleSheet.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_={},goog.html.SafeStyleSheet.createRule=function(e,t){if(goog.string.internal.contains(e,"<"))throw Error("Selector does not allow \'<\', got: "+e);var o=e.replace(/(\'|")((?!\\1)[^\\r\\n\\f\\\\]|\\\\[\\s\\S])*\\1/g,"");if(!/^[-_a-zA-Z0-9#.:* ,>+~[\\]()=^$|]+$/.test(o))throw Error("Selector allows only [-_a-zA-Z0-9#.:* ,>+~[\\\\]()=^$|] and strings, got: "+e);if(!goog.html.SafeStyleSheet.hasBalancedBrackets_(o))throw Error("() and [] in selector must be balanced, got: "+e);return t instanceof goog.html.SafeStyle||(t=goog.html.SafeStyle.create(t)),e=e+"{"+goog.html.SafeStyle.unwrap(t).replace(/</g,"\\\\3C ")+"}",goog.html.SafeStyleSheet.createSafeStyleSheetSecurityPrivateDoNotAccessOrElse(e)},goog.html.SafeStyleSheet.hasBalancedBrackets_=function(e){for(var t={"(":")","[":"]"},o=[],r=0;r<e.length;r++){var n=e[r];if(t[n])o.push(t[n]);else if(goog.object.contains(t,n)&&o.pop()!=n)return!1}return 0==o.length},goog.html.SafeStyleSheet.concat=function(e){var t="",o=function(e){goog.isArray(e)?goog.array.forEach(e,o):t+=goog.html.SafeStyleSheet.unwrap(e)};return goog.array.forEach(arguments,o),goog.html.SafeStyleSheet.createSafeStyleSheetSecurityPrivateDoNotAccessOrElse(t)},goog.html.SafeStyleSheet.fromConstant=function(e){return 0===(e=goog.string.Const.unwrap(e)).length?goog.html.SafeStyleSheet.EMPTY:(goog.asserts.assert(!goog.string.internal.contains(e,"<"),"Forbidden \'<\' character in style sheet string: "+e),goog.html.SafeStyleSheet.createSafeStyleSheetSecurityPrivateDoNotAccessOrElse(e))},goog.html.SafeStyleSheet.prototype.getTypedStringValue=function(){return this.privateDoNotAccessOrElseSafeStyleSheetWrappedValue_},goog.DEBUG&&(goog.html.SafeStyleSheet.prototype.toString=function(){return"SafeStyleSheet{"+this.privateDoNotAccessOrElseSafeStyleSheetWrappedValue_+"}"}),goog.html.SafeStyleSheet.unwrap=function(e){return e instanceof goog.html.SafeStyleSheet&&e.constructor===goog.html.SafeStyleSheet&&e.SAFE_STYLE_SHEET_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_===goog.html.SafeStyleSheet.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_?e.privateDoNotAccessOrElseSafeStyleSheetWrappedValue_:(goog.asserts.fail("expected object of type SafeStyleSheet, got \'"+e+"\' of type "+goog.typeOf(e)),"type_error:SafeStyleSheet")},goog.html.SafeStyleSheet.createSafeStyleSheetSecurityPrivateDoNotAccessOrElse=function(e){return(new goog.html.SafeStyleSheet).initSecurityPrivateDoNotAccessOrElse_(e)},goog.html.SafeStyleSheet.prototype.initSecurityPrivateDoNotAccessOrElse_=function(e){return this.privateDoNotAccessOrElseSafeStyleSheetWrappedValue_=e,this},goog.html.SafeStyleSheet.EMPTY=goog.html.SafeStyleSheet.createSafeStyleSheetSecurityPrivateDoNotAccessOrElse(""),goog.labs={},goog.labs.userAgent={},goog.labs.userAgent.util={},goog.labs.userAgent.util.getNativeUserAgentString_=function(){var e=goog.labs.userAgent.util.getNavigator_();return e&&(e=e.userAgent)?e:""},goog.labs.userAgent.util.getNavigator_=function(){return goog.global.navigator},goog.labs.userAgent.util.userAgent_=goog.labs.userAgent.util.getNativeUserAgentString_(),goog.labs.userAgent.util.setUserAgent=function(e){goog.labs.userAgent.util.userAgent_=e||goog.labs.userAgent.util.getNativeUserAgentString_()},goog.labs.userAgent.util.getUserAgent=function(){return goog.labs.userAgent.util.userAgent_},goog.labs.userAgent.util.matchUserAgent=function(e){var t=goog.labs.userAgent.util.getUserAgent();return goog.string.internal.contains(t,e)},goog.labs.userAgent.util.matchUserAgentIgnoreCase=function(e){var t=goog.labs.userAgent.util.getUserAgent();return goog.string.internal.caseInsensitiveContains(t,e)},goog.labs.userAgent.util.extractVersionTuples=function(e){for(var t,o=/(\\w[\\w ]+)\\/([^\\s]+)\\s*(?:\\((.*?)\\))?/g,r=[];t=o.exec(e);)r.push([t[1],t[2],t[3]||void 0]);return r},goog.labs.userAgent.browser={},goog.labs.userAgent.browser.matchOpera_=function(){return goog.labs.userAgent.util.matchUserAgent("Opera")},goog.labs.userAgent.browser.matchIE_=function(){return goog.labs.userAgent.util.matchUserAgent("Trident")||goog.labs.userAgent.util.matchUserAgent("MSIE")},goog.labs.userAgent.browser.matchEdgeHtml_=function(){return goog.labs.userAgent.util.matchUserAgent("Edge")},goog.labs.userAgent.browser.matchEdgeChromium_=function(){return goog.labs.userAgent.util.matchUserAgent("Edg/")},goog.labs.userAgent.browser.matchOperaChromium_=function(){return goog.labs.userAgent.util.matchUserAgent("OPR")},goog.labs.userAgent.browser.matchFirefox_=function(){return goog.labs.userAgent.util.matchUserAgent("Firefox")||goog.labs.userAgent.util.matchUserAgent("FxiOS")},goog.labs.userAgent.browser.matchSafari_=function(){return goog.labs.userAgent.util.matchUserAgent("Safari")&&!(goog.labs.userAgent.browser.matchChrome_()||goog.labs.userAgent.browser.matchCoast_()||goog.labs.userAgent.browser.matchOpera_()||goog.labs.userAgent.browser.matchEdgeHtml_()||goog.labs.userAgent.browser.matchEdgeChromium_()||goog.labs.userAgent.browser.matchOperaChromium_()||goog.labs.userAgent.browser.matchFirefox_()||goog.labs.userAgent.browser.isSilk()||goog.labs.userAgent.util.matchUserAgent("Android"))},goog.labs.userAgent.browser.matchCoast_=function(){return goog.labs.userAgent.util.matchUserAgent("Coast")},goog.labs.userAgent.browser.matchIosWebview_=function(){return(goog.labs.userAgent.util.matchUserAgent("iPad")||goog.labs.userAgent.util.matchUserAgent("iPhone"))&&!goog.labs.userAgent.browser.matchSafari_()&&!goog.labs.userAgent.browser.matchChrome_()&&!goog.labs.userAgent.browser.matchCoast_()&&!goog.labs.userAgent.browser.matchFirefox_()&&goog.labs.userAgent.util.matchUserAgent("AppleWebKit")},goog.labs.userAgent.browser.matchChrome_=function(){return(goog.labs.userAgent.util.matchUserAgent("Chrome")||goog.labs.userAgent.util.matchUserAgent("CriOS"))&&!goog.labs.userAgent.browser.matchEdgeHtml_()},goog.labs.userAgent.browser.matchAndroidBrowser_=function(){return goog.labs.userAgent.util.matchUserAgent("Android")&&!(goog.labs.userAgent.browser.isChrome()||goog.labs.userAgent.browser.isFirefox()||goog.labs.userAgent.browser.isOpera()||goog.labs.userAgent.browser.isSilk())},goog.labs.userAgent.browser.isOpera=goog.labs.userAgent.browser.matchOpera_,goog.labs.userAgent.browser.isIE=goog.labs.userAgent.browser.matchIE_,goog.labs.userAgent.browser.isEdge=goog.labs.userAgent.browser.matchEdgeHtml_,goog.labs.userAgent.browser.isEdgeChromium=goog.labs.userAgent.browser.matchEdgeChromium_,goog.labs.userAgent.browser.isOperaChromium=goog.labs.userAgent.browser.matchOperaChromium_,goog.labs.userAgent.browser.isFirefox=goog.labs.userAgent.browser.matchFirefox_,goog.labs.userAgent.browser.isSafari=goog.labs.userAgent.browser.matchSafari_,goog.labs.userAgent.browser.isCoast=goog.labs.userAgent.browser.matchCoast_,goog.labs.userAgent.browser.isIosWebview=goog.labs.userAgent.browser.matchIosWebview_,goog.labs.userAgent.browser.isChrome=goog.labs.userAgent.browser.matchChrome_,goog.labs.userAgent.browser.isAndroidBrowser=goog.labs.userAgent.browser.matchAndroidBrowser_,goog.labs.userAgent.browser.isSilk=function(){return goog.labs.userAgent.util.matchUserAgent("Silk")},goog.labs.userAgent.browser.getVersion=function(){function e(e){return e=goog.array.find(e,r),o[e]||""}var t=goog.labs.userAgent.util.getUserAgent();if(goog.labs.userAgent.browser.isIE())return goog.labs.userAgent.browser.getIEVersion_(t);t=goog.labs.userAgent.util.extractVersionTuples(t);var o={};goog.array.forEach(t,(function(e){o[e[0]]=e[1]}));var r=goog.partial(goog.object.containsKey,o);return goog.labs.userAgent.browser.isOpera()?e(["Version","Opera"]):goog.labs.userAgent.browser.isEdge()?e(["Edge"]):goog.labs.userAgent.browser.isEdgeChromium()?e(["Edg"]):goog.labs.userAgent.browser.isChrome()?e(["Chrome","CriOS"]):(t=t[2])&&t[1]||""},goog.labs.userAgent.browser.isVersionOrHigher=function(e){return 0<=goog.string.internal.compareVersions(goog.labs.userAgent.browser.getVersion(),e)},goog.labs.userAgent.browser.getIEVersion_=function(e){var t=/rv: *([\\d\\.]*)/.exec(e);if(t&&t[1])return t[1];t="";var o=/MSIE +([\\d\\.]+)/.exec(e);if(o&&o[1])if(e=/Trident\\/(\\d.\\d)/.exec(e),"7.0"==o[1])if(e&&e[1])switch(e[1]){case"4.0":t="8.0";break;case"5.0":t="9.0";break;case"6.0":t="10.0";break;case"7.0":t="11.0"}else t="7.0";else t=o[1];return t},goog.html.SafeHtml=function(){this.privateDoNotAccessOrElseSafeHtmlWrappedValue_="",this.SAFE_HTML_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_=goog.html.SafeHtml.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_,this.dir_=null},goog.html.SafeHtml.prototype.implementsGoogI18nBidiDirectionalString=!0,goog.html.SafeHtml.prototype.getDirection=function(){return this.dir_},goog.html.SafeHtml.prototype.implementsGoogStringTypedString=!0,goog.html.SafeHtml.prototype.getTypedStringValue=function(){return this.privateDoNotAccessOrElseSafeHtmlWrappedValue_.toString()},goog.DEBUG&&(goog.html.SafeHtml.prototype.toString=function(){return"SafeHtml{"+this.privateDoNotAccessOrElseSafeHtmlWrappedValue_+"}"}),goog.html.SafeHtml.unwrap=function(e){return goog.html.SafeHtml.unwrapTrustedHTML(e).toString()},goog.html.SafeHtml.unwrapTrustedHTML=function(e){return e instanceof goog.html.SafeHtml&&e.constructor===goog.html.SafeHtml&&e.SAFE_HTML_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_===goog.html.SafeHtml.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_?e.privateDoNotAccessOrElseSafeHtmlWrappedValue_:(goog.asserts.fail("expected object of type SafeHtml, got \'"+e+"\' of type "+goog.typeOf(e)),"type_error:SafeHtml")},goog.html.SafeHtml.htmlEscape=function(e){if(e instanceof goog.html.SafeHtml)return e;var t="object"==typeof e,o=null;return t&&e.implementsGoogI18nBidiDirectionalString&&(o=e.getDirection()),e=t&&e.implementsGoogStringTypedString?e.getTypedStringValue():String(e),goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(goog.string.internal.htmlEscape(e),o)},goog.html.SafeHtml.htmlEscapePreservingNewlines=function(e){return e instanceof goog.html.SafeHtml?e:(e=goog.html.SafeHtml.htmlEscape(e),goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(goog.string.internal.newLineToBr(goog.html.SafeHtml.unwrap(e)),e.getDirection()))},goog.html.SafeHtml.htmlEscapePreservingNewlinesAndSpaces=function(e){return e instanceof goog.html.SafeHtml?e:(e=goog.html.SafeHtml.htmlEscape(e),goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(goog.string.internal.whitespaceEscape(goog.html.SafeHtml.unwrap(e)),e.getDirection()))},goog.html.SafeHtml.from=goog.html.SafeHtml.htmlEscape,goog.html.SafeHtml.VALID_NAMES_IN_TAG_=/^[a-zA-Z0-9-]+$/,goog.html.SafeHtml.URL_ATTRIBUTES_={action:!0,cite:!0,data:!0,formaction:!0,href:!0,manifest:!0,poster:!0,src:!0},goog.html.SafeHtml.NOT_ALLOWED_TAG_NAMES_={APPLET:!0,BASE:!0,EMBED:!0,IFRAME:!0,LINK:!0,MATH:!0,META:!0,OBJECT:!0,SCRIPT:!0,STYLE:!0,SVG:!0,TEMPLATE:!0},goog.html.SafeHtml.create=function(e,t,o){return goog.html.SafeHtml.verifyTagName(String(e)),goog.html.SafeHtml.createSafeHtmlTagSecurityPrivateDoNotAccessOrElse(String(e),t,o)},goog.html.SafeHtml.verifyTagName=function(e){if(!goog.html.SafeHtml.VALID_NAMES_IN_TAG_.test(e))throw Error("Invalid tag name <"+e+">.");if(e.toUpperCase()in goog.html.SafeHtml.NOT_ALLOWED_TAG_NAMES_)throw Error("Tag name <"+e+"> is not allowed for SafeHtml.")},goog.html.SafeHtml.createIframe=function(e,t,o,r){e&&goog.html.TrustedResourceUrl.unwrap(e);var n={};return n.src=e||null,n.srcdoc=t&&goog.html.SafeHtml.unwrap(t),e=goog.html.SafeHtml.combineAttributes(n,{sandbox:""},o),goog.html.SafeHtml.createSafeHtmlTagSecurityPrivateDoNotAccessOrElse("iframe",e,r)},goog.html.SafeHtml.createSandboxIframe=function(e,t,o,r){if(!goog.html.SafeHtml.canUseSandboxIframe())throw Error("The browser does not support sandboxed iframes.");var n={};return n.src=e?goog.html.SafeUrl.unwrap(goog.html.SafeUrl.sanitize(e)):null,n.srcdoc=t||null,n.sandbox="",e=goog.html.SafeHtml.combineAttributes(n,{},o),goog.html.SafeHtml.createSafeHtmlTagSecurityPrivateDoNotAccessOrElse("iframe",e,r)},goog.html.SafeHtml.canUseSandboxIframe=function(){return goog.global.HTMLIFrameElement&&"sandbox"in goog.global.HTMLIFrameElement.prototype},goog.html.SafeHtml.createScriptSrc=function(e,t){return goog.html.TrustedResourceUrl.unwrap(e),e=goog.html.SafeHtml.combineAttributes({src:e},{},t),goog.html.SafeHtml.createSafeHtmlTagSecurityPrivateDoNotAccessOrElse("script",e)},goog.html.SafeHtml.createScript=function(e,t){for(var o in t){var r=o.toLowerCase();if("language"==r||"src"==r||"text"==r||"type"==r)throw Error(\'Cannot set "\'+r+\'" attribute\')}for(o="",e=goog.array.concat(e),r=0;r<e.length;r++)o+=goog.html.SafeScript.unwrap(e[r]);return e=goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(o,goog.i18n.bidi.Dir.NEUTRAL),goog.html.SafeHtml.createSafeHtmlTagSecurityPrivateDoNotAccessOrElse("script",t,e)},goog.html.SafeHtml.createStyle=function(e,t){t=goog.html.SafeHtml.combineAttributes({type:"text/css"},{},t);var o="";e=goog.array.concat(e);for(var r=0;r<e.length;r++)o+=goog.html.SafeStyleSheet.unwrap(e[r]);return e=goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(o,goog.i18n.bidi.Dir.NEUTRAL),goog.html.SafeHtml.createSafeHtmlTagSecurityPrivateDoNotAccessOrElse("style",t,e)},goog.html.SafeHtml.createMetaRefresh=function(e,t){return e=goog.html.SafeUrl.unwrap(goog.html.SafeUrl.sanitize(e)),(goog.labs.userAgent.browser.isIE()||goog.labs.userAgent.browser.isEdge())&&goog.string.internal.contains(e,";")&&(e="\'"+e.replace(/\'/g,"%27")+"\'"),goog.html.SafeHtml.createSafeHtmlTagSecurityPrivateDoNotAccessOrElse("meta",{"http-equiv":"refresh",content:(t||0)+"; url="+e})},goog.html.SafeHtml.getAttrNameAndValue_=function(e,t,o){if(o instanceof goog.string.Const)o=goog.string.Const.unwrap(o);else if("style"==t.toLowerCase())o=goog.html.SafeHtml.getStyleValue_(o);else{if(/^on/i.test(t))throw Error(\'Attribute "\'+t+\'" requires goog.string.Const value, "\'+o+\'" given.\');if(t.toLowerCase()in goog.html.SafeHtml.URL_ATTRIBUTES_)if(o instanceof goog.html.TrustedResourceUrl)o=goog.html.TrustedResourceUrl.unwrap(o);else if(o instanceof goog.html.SafeUrl)o=goog.html.SafeUrl.unwrap(o);else{if(!goog.isString(o))throw Error(\'Attribute "\'+t+\'" on tag "\'+e+\'" requires goog.html.SafeUrl, goog.string.Const, or string, value "\'+o+\'" given.\');o=goog.html.SafeUrl.sanitize(o).getTypedStringValue()}}return o.implementsGoogStringTypedString&&(o=o.getTypedStringValue()),goog.asserts.assert(goog.isString(o)||goog.isNumber(o),"String or number value expected, got "+typeof o+" with value: "+o),t+\'="\'+goog.string.internal.htmlEscape(String(o))+\'"\'},goog.html.SafeHtml.getStyleValue_=function(e){if(!goog.isObject(e))throw Error(\'The "style" attribute requires goog.html.SafeStyle or map of style properties, \'+typeof e+" given: "+e);return e instanceof goog.html.SafeStyle||(e=goog.html.SafeStyle.create(e)),goog.html.SafeStyle.unwrap(e)},goog.html.SafeHtml.createWithDir=function(e,t,o,r){return(t=goog.html.SafeHtml.create(t,o,r)).dir_=e,t},goog.html.SafeHtml.join=function(e,t){var o=(e=goog.html.SafeHtml.htmlEscape(e)).getDirection(),r=[],n=function(e){goog.isArray(e)?goog.array.forEach(e,n):(e=goog.html.SafeHtml.htmlEscape(e),r.push(goog.html.SafeHtml.unwrap(e)),e=e.getDirection(),o==goog.i18n.bidi.Dir.NEUTRAL?o=e:e!=goog.i18n.bidi.Dir.NEUTRAL&&o!=e&&(o=null))};return goog.array.forEach(t,n),goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(r.join(goog.html.SafeHtml.unwrap(e)),o)},goog.html.SafeHtml.concat=function(e){return goog.html.SafeHtml.join(goog.html.SafeHtml.EMPTY,Array.prototype.slice.call(arguments))},goog.html.SafeHtml.concatWithDir=function(e,t){var o=goog.html.SafeHtml.concat(goog.array.slice(arguments,1));return o.dir_=e,o},goog.html.SafeHtml.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_={},goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse=function(e,t){return(new goog.html.SafeHtml).initSecurityPrivateDoNotAccessOrElse_(e,t)},goog.html.SafeHtml.prototype.initSecurityPrivateDoNotAccessOrElse_=function(e,t){return this.privateDoNotAccessOrElseSafeHtmlWrappedValue_=goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY?goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY.createHTML(e):e,this.dir_=t,this},goog.html.SafeHtml.createSafeHtmlTagSecurityPrivateDoNotAccessOrElse=function(e,t,o){var r=null,n="<"+e+goog.html.SafeHtml.stringifyAttributes(e,t);return goog.isDefAndNotNull(o)?goog.isArray(o)||(o=[o]):o=[],goog.dom.tags.isVoidTag(e.toLowerCase())?(goog.asserts.assert(!o.length,"Void tag <"+e+"> does not allow content."),n+=">"):(r=goog.html.SafeHtml.concat(o),n+=">"+goog.html.SafeHtml.unwrap(r)+"</"+e+">",r=r.getDirection()),(e=t&&t.dir)&&(r=/^(ltr|rtl|auto)$/i.test(e)?goog.i18n.bidi.Dir.NEUTRAL:null),goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(n,r)},goog.html.SafeHtml.stringifyAttributes=function(e,t){var o="";if(t)for(var r in t){if(!goog.html.SafeHtml.VALID_NAMES_IN_TAG_.test(r))throw Error(\'Invalid attribute name "\'+r+\'".\');var n=t[r];goog.isDefAndNotNull(n)&&(o+=" "+goog.html.SafeHtml.getAttrNameAndValue_(e,r,n))}return o},goog.html.SafeHtml.combineAttributes=function(e,t,o){var r,n={};for(r in e)goog.asserts.assert(r.toLowerCase()==r,"Must be lower case"),n[r]=e[r];for(r in t)goog.asserts.assert(r.toLowerCase()==r,"Must be lower case"),n[r]=t[r];for(r in o){var s=r.toLowerCase();if(s in e)throw Error(\'Cannot override "\'+s+\'" attribute, got "\'+r+\'" with value "\'+o[r]+\'"\');s in t&&delete n[s],n[r]=o[r]}return n},goog.html.SafeHtml.DOCTYPE_HTML=goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse("<!DOCTYPE html>",goog.i18n.bidi.Dir.NEUTRAL),goog.html.SafeHtml.EMPTY=goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse("",goog.i18n.bidi.Dir.NEUTRAL),goog.html.SafeHtml.BR=goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse("<br>",goog.i18n.bidi.Dir.NEUTRAL),goog.html.uncheckedconversions={},goog.html.uncheckedconversions.safeHtmlFromStringKnownToSatisfyTypeContract=function(e,t,o){return goog.asserts.assertString(goog.string.Const.unwrap(e),"must provide justification"),goog.asserts.assert(!goog.string.internal.isEmptyOrWhitespace(goog.string.Const.unwrap(e)),"must provide non-empty justification"),goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(t,o||null)},goog.html.uncheckedconversions.safeScriptFromStringKnownToSatisfyTypeContract=function(e,t){return goog.asserts.assertString(goog.string.Const.unwrap(e),"must provide justification"),goog.asserts.assert(!goog.string.internal.isEmptyOrWhitespace(goog.string.Const.unwrap(e)),"must provide non-empty justification"),goog.html.SafeScript.createSafeScriptSecurityPrivateDoNotAccessOrElse(t)},goog.html.uncheckedconversions.safeStyleFromStringKnownToSatisfyTypeContract=function(e,t){return goog.asserts.assertString(goog.string.Const.unwrap(e),"must provide justification"),goog.asserts.assert(!goog.string.internal.isEmptyOrWhitespace(goog.string.Const.unwrap(e)),"must provide non-empty justification"),goog.html.SafeStyle.createSafeStyleSecurityPrivateDoNotAccessOrElse(t)},goog.html.uncheckedconversions.safeStyleSheetFromStringKnownToSatisfyTypeContract=function(e,t){return goog.asserts.assertString(goog.string.Const.unwrap(e),"must provide justification"),goog.asserts.assert(!goog.string.internal.isEmptyOrWhitespace(goog.string.Const.unwrap(e)),"must provide non-empty justification"),goog.html.SafeStyleSheet.createSafeStyleSheetSecurityPrivateDoNotAccessOrElse(t)},goog.html.uncheckedconversions.safeUrlFromStringKnownToSatisfyTypeContract=function(e,t){return goog.asserts.assertString(goog.string.Const.unwrap(e),"must provide justification"),goog.asserts.assert(!goog.string.internal.isEmptyOrWhitespace(goog.string.Const.unwrap(e)),"must provide non-empty justification"),goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(t)},goog.html.uncheckedconversions.trustedResourceUrlFromStringKnownToSatisfyTypeContract=function(e,t){return goog.asserts.assertString(goog.string.Const.unwrap(e),"must provide justification"),goog.asserts.assert(!goog.string.internal.isEmptyOrWhitespace(goog.string.Const.unwrap(e)),"must provide non-empty justification"),goog.html.TrustedResourceUrl.createTrustedResourceUrlSecurityPrivateDoNotAccessOrElse(t)},goog.dom.safe={},goog.dom.safe.InsertAdjacentHtmlPosition={AFTERBEGIN:"afterbegin",AFTEREND:"afterend",BEFOREBEGIN:"beforebegin",BEFOREEND:"beforeend"},goog.dom.safe.insertAdjacentHtml=function(e,t,o){e.insertAdjacentHTML(t,goog.html.SafeHtml.unwrapTrustedHTML(o))},goog.dom.safe.SET_INNER_HTML_DISALLOWED_TAGS_={MATH:!0,SCRIPT:!0,STYLE:!0,SVG:!0,TEMPLATE:!0},goog.dom.safe.isInnerHtmlCleanupRecursive_=goog.functions.cacheReturnValue((function(){if(goog.DEBUG&&"undefined"==typeof document)return!1;var e=document.createElement("div"),t=document.createElement("div");return t.appendChild(document.createElement("div")),e.appendChild(t),!(goog.DEBUG&&!e.firstChild||(t=e.firstChild.firstChild,e.innerHTML=goog.html.SafeHtml.unwrapTrustedHTML(goog.html.SafeHtml.EMPTY),t.parentElement))})),goog.dom.safe.unsafeSetInnerHtmlDoNotUseOrElse=function(e,t){if(goog.dom.safe.isInnerHtmlCleanupRecursive_())for(;e.lastChild;)e.removeChild(e.lastChild);e.innerHTML=goog.html.SafeHtml.unwrapTrustedHTML(t)},goog.dom.safe.setInnerHtml=function(e,t){if(goog.asserts.ENABLE_ASSERTS){var o=e.tagName.toUpperCase();if(goog.dom.safe.SET_INNER_HTML_DISALLOWED_TAGS_[o])throw Error("goog.dom.safe.setInnerHtml cannot be used to set content of "+e.tagName+".")}goog.dom.safe.unsafeSetInnerHtmlDoNotUseOrElse(e,t)},goog.dom.safe.setOuterHtml=function(e,t){e.outerHTML=goog.html.SafeHtml.unwrapTrustedHTML(t)},goog.dom.safe.setFormElementAction=function(e,t){t=t instanceof goog.html.SafeUrl?t:goog.html.SafeUrl.sanitizeAssertUnchanged(t),goog.dom.asserts.assertIsHTMLFormElement(e).action=goog.html.SafeUrl.unwrapTrustedURL(t)},goog.dom.safe.setButtonFormAction=function(e,t){t=t instanceof goog.html.SafeUrl?t:goog.html.SafeUrl.sanitizeAssertUnchanged(t),goog.dom.asserts.assertIsHTMLButtonElement(e).formAction=goog.html.SafeUrl.unwrapTrustedURL(t)},goog.dom.safe.setInputFormAction=function(e,t){t=t instanceof goog.html.SafeUrl?t:goog.html.SafeUrl.sanitizeAssertUnchanged(t),goog.dom.asserts.assertIsHTMLInputElement(e).formAction=goog.html.SafeUrl.unwrapTrustedURL(t)},goog.dom.safe.setStyle=function(e,t){e.style.cssText=goog.html.SafeStyle.unwrap(t)},goog.dom.safe.documentWrite=function(e,t){e.write(goog.html.SafeHtml.unwrapTrustedHTML(t))},goog.dom.safe.setAnchorHref=function(e,t){goog.dom.asserts.assertIsHTMLAnchorElement(e),t=t instanceof goog.html.SafeUrl?t:goog.html.SafeUrl.sanitizeAssertUnchanged(t),e.href=goog.html.SafeUrl.unwrapTrustedURL(t)},goog.dom.safe.setImageSrc=function(e,t){if(goog.dom.asserts.assertIsHTMLImageElement(e),!(t instanceof goog.html.SafeUrl)){var o=/^data:image\\//i.test(t);t=goog.html.SafeUrl.sanitizeAssertUnchanged(t,o)}e.src=goog.html.SafeUrl.unwrapTrustedURL(t)},goog.dom.safe.setAudioSrc=function(e,t){if(goog.dom.asserts.assertIsHTMLAudioElement(e),!(t instanceof goog.html.SafeUrl)){var o=/^data:audio\\//i.test(t);t=goog.html.SafeUrl.sanitizeAssertUnchanged(t,o)}e.src=goog.html.SafeUrl.unwrapTrustedURL(t)},goog.dom.safe.setVideoSrc=function(e,t){if(goog.dom.asserts.assertIsHTMLVideoElement(e),!(t instanceof goog.html.SafeUrl)){var o=/^data:video\\//i.test(t);t=goog.html.SafeUrl.sanitizeAssertUnchanged(t,o)}e.src=goog.html.SafeUrl.unwrapTrustedURL(t)},goog.dom.safe.setEmbedSrc=function(e,t){goog.dom.asserts.assertIsHTMLEmbedElement(e),e.src=goog.html.TrustedResourceUrl.unwrapTrustedScriptURL(t)},goog.dom.safe.setFrameSrc=function(e,t){goog.dom.asserts.assertIsHTMLFrameElement(e),e.src=goog.html.TrustedResourceUrl.unwrapTrustedURL(t)},goog.dom.safe.setIframeSrc=function(e,t){goog.dom.asserts.assertIsHTMLIFrameElement(e),e.src=goog.html.TrustedResourceUrl.unwrapTrustedURL(t)},goog.dom.safe.setIframeSrcdoc=function(e,t){goog.dom.asserts.assertIsHTMLIFrameElement(e),e.srcdoc=goog.html.SafeHtml.unwrapTrustedHTML(t)},goog.dom.safe.setLinkHrefAndRel=function(e,t,o){goog.dom.asserts.assertIsHTMLLinkElement(e),e.rel=o,goog.string.internal.caseInsensitiveContains(o,"stylesheet")?(goog.asserts.assert(t instanceof goog.html.TrustedResourceUrl,\'URL must be TrustedResourceUrl because "rel" contains "stylesheet"\'),e.href=goog.html.TrustedResourceUrl.unwrapTrustedURL(t)):e.href=t instanceof goog.html.TrustedResourceUrl?goog.html.TrustedResourceUrl.unwrapTrustedURL(t):t instanceof goog.html.SafeUrl?goog.html.SafeUrl.unwrapTrustedURL(t):goog.html.SafeUrl.unwrapTrustedURL(goog.html.SafeUrl.sanitizeAssertUnchanged(t))},goog.dom.safe.setObjectData=function(e,t){goog.dom.asserts.assertIsHTMLObjectElement(e),e.data=goog.html.TrustedResourceUrl.unwrapTrustedScriptURL(t)},goog.dom.safe.setScriptSrc=function(e,t){goog.dom.asserts.assertIsHTMLScriptElement(e),e.src=goog.html.TrustedResourceUrl.unwrapTrustedScriptURL(t),(t=goog.getScriptNonce())&&e.setAttribute("nonce",t)},goog.dom.safe.setScriptContent=function(e,t){goog.dom.asserts.assertIsHTMLScriptElement(e),e.text=goog.html.SafeScript.unwrapTrustedScript(t),(t=goog.getScriptNonce())&&e.setAttribute("nonce",t)},goog.dom.safe.setLocationHref=function(e,t){goog.dom.asserts.assertIsLocation(e),t=t instanceof goog.html.SafeUrl?t:goog.html.SafeUrl.sanitizeAssertUnchanged(t),e.href=goog.html.SafeUrl.unwrapTrustedURL(t)},goog.dom.safe.assignLocation=function(e,t){goog.dom.asserts.assertIsLocation(e),t=t instanceof goog.html.SafeUrl?t:goog.html.SafeUrl.sanitizeAssertUnchanged(t),e.assign(goog.html.SafeUrl.unwrapTrustedURL(t))},goog.dom.safe.replaceLocation=function(e,t){goog.dom.asserts.assertIsLocation(e),t=t instanceof goog.html.SafeUrl?t:goog.html.SafeUrl.sanitizeAssertUnchanged(t),e.replace(goog.html.SafeUrl.unwrapTrustedURL(t))},goog.dom.safe.openInWindow=function(e,t,o,r,n){return e=e instanceof goog.html.SafeUrl?e:goog.html.SafeUrl.sanitizeAssertUnchanged(e),(t||goog.global).open(goog.html.SafeUrl.unwrapTrustedURL(e),o?goog.string.Const.unwrap(o):"",r,n)},goog.dom.safe.parseFromStringHtml=function(e,t){return goog.dom.safe.parseFromString(e,t,"text/html")},goog.dom.safe.parseFromString=function(e,t,o){return e.parseFromString(goog.html.SafeHtml.unwrapTrustedHTML(t),o)},goog.dom.safe.createImageFromBlob=function(e){if(!/^image\\/.*/g.test(e.type))throw Error("goog.dom.safe.createImageFromBlob only accepts MIME type image/.*.");var t=goog.global.URL.createObjectURL(e);return(e=new goog.global.Image).onload=function(){goog.global.URL.revokeObjectURL(t)},goog.dom.safe.setImageSrc(e,goog.html.uncheckedconversions.safeUrlFromStringKnownToSatisfyTypeContract(goog.string.Const.from("Image blob URL."),t)),e},goog.string.DETECT_DOUBLE_ESCAPING=!1,goog.string.FORCE_NON_DOM_HTML_UNESCAPING=!1,goog.string.Unicode={NBSP:" "},goog.string.startsWith=goog.string.internal.startsWith,goog.string.endsWith=goog.string.internal.endsWith,goog.string.caseInsensitiveStartsWith=goog.string.internal.caseInsensitiveStartsWith,goog.string.caseInsensitiveEndsWith=goog.string.internal.caseInsensitiveEndsWith,goog.string.caseInsensitiveEquals=goog.string.internal.caseInsensitiveEquals,goog.string.subs=function(e,t){for(var o=e.split("%s"),r="",n=Array.prototype.slice.call(arguments,1);n.length&&1<o.length;)r+=o.shift()+n.shift();return r+o.join("%s")},goog.string.collapseWhitespace=function(e){return e.replace(/[\\s\\xa0]+/g," ").replace(/^\\s+|\\s+$/g,"")},goog.string.isEmptyOrWhitespace=goog.string.internal.isEmptyOrWhitespace,goog.string.isEmptyString=function(e){return 0==e.length},goog.string.isEmpty=goog.string.isEmptyOrWhitespace,goog.string.isEmptyOrWhitespaceSafe=function(e){return goog.string.isEmptyOrWhitespace(goog.string.makeSafe(e))},goog.string.isEmptySafe=goog.string.isEmptyOrWhitespaceSafe,goog.string.isBreakingWhitespace=function(e){return!/[^\\t\\n\\r ]/.test(e)},goog.string.isAlpha=function(e){return!/[^a-zA-Z]/.test(e)},goog.string.isNumeric=function(e){return!/[^0-9]/.test(e)},goog.string.isAlphaNumeric=function(e){return!/[^a-zA-Z0-9]/.test(e)},goog.string.isSpace=function(e){return" "==e},goog.string.isUnicodeChar=function(e){return 1==e.length&&" "<=e&&"~">=e||""<=e&&"�">=e},goog.string.stripNewlines=function(e){return e.replace(/(\\r\\n|\\r|\\n)+/g," ")},goog.string.canonicalizeNewlines=function(e){return e.replace(/(\\r\\n|\\r|\\n)/g,"\\n")},goog.string.normalizeWhitespace=function(e){return e.replace(/\\xa0|\\s/g," ")},goog.string.normalizeSpaces=function(e){return e.replace(/\\xa0|[ \\t]+/g," ")},goog.string.collapseBreakingSpaces=function(e){return e.replace(/[\\t\\r\\n ]+/g," ").replace(/^[\\t\\r\\n ]+|[\\t\\r\\n ]+$/g,"")},goog.string.trim=goog.string.internal.trim,goog.string.trimLeft=function(e){return e.replace(/^[\\s\\xa0]+/,"")},goog.string.trimRight=function(e){return e.replace(/[\\s\\xa0]+$/,"")},goog.string.caseInsensitiveCompare=goog.string.internal.caseInsensitiveCompare,goog.string.numberAwareCompare_=function(e,t,o){if(e==t)return 0;if(!e)return-1;if(!t)return 1;for(var r=e.toLowerCase().match(o),n=t.toLowerCase().match(o),s=Math.min(r.length,n.length),i=0;i<s;i++){o=r[i];var a=n[i];if(o!=a)return e=parseInt(o,10),!isNaN(e)&&(t=parseInt(a,10),!isNaN(t)&&e-t)?e-t:o<a?-1:1}return r.length!=n.length?r.length-n.length:e<t?-1:1},goog.string.intAwareCompare=function(e,t){return goog.string.numberAwareCompare_(e,t,/\\d+|\\D+/g)},goog.string.floatAwareCompare=function(e,t){return goog.string.numberAwareCompare_(e,t,/\\d+|\\.\\d+|\\D+/g)},goog.string.numerateCompare=goog.string.floatAwareCompare,goog.string.urlEncode=function(e){return encodeURIComponent(String(e))},goog.string.urlDecode=function(e){return decodeURIComponent(e.replace(/\\+/g," "))},goog.string.newLineToBr=goog.string.internal.newLineToBr,goog.string.htmlEscape=function(e,t){return e=goog.string.internal.htmlEscape(e,t),goog.string.DETECT_DOUBLE_ESCAPING&&(e=e.replace(goog.string.E_RE_,"e")),e},goog.string.E_RE_=/e/g,goog.string.unescapeEntities=function(e){return goog.string.contains(e,"&")?!goog.string.FORCE_NON_DOM_HTML_UNESCAPING&&"document"in goog.global?goog.string.unescapeEntitiesUsingDom_(e):goog.string.unescapePureXmlEntities_(e):e},goog.string.unescapeEntitiesWithDocument=function(e,t){return goog.string.contains(e,"&")?goog.string.unescapeEntitiesUsingDom_(e,t):e},goog.string.unescapeEntitiesUsingDom_=function(e,t){var o={"&":"&","<":"<",">":">",""":\'"\'},r=t?t.createElement("div"):goog.global.document.createElement("div");return e.replace(goog.string.HTML_ENTITY_PATTERN_,(function(e,t){var n=o[e];return n||("#"==t.charAt(0)&&(t=Number("0"+t.substr(1)),isNaN(t)||(n=String.fromCharCode(t))),n||(goog.dom.safe.setInnerHtml(r,goog.html.uncheckedconversions.safeHtmlFromStringKnownToSatisfyTypeContract(goog.string.Const.from("Single HTML entity."),e+" ")),n=r.firstChild.nodeValue.slice(0,-1)),o[e]=n)}))},goog.string.unescapePureXmlEntities_=function(e){return e.replace(/&([^;]+);/g,(function(e,t){switch(t){case"amp":return"&";case"lt":return"<";case"gt":return">";case"quot":return\'"\';default:return"#"!=t.charAt(0)||(t=Number("0"+t.substr(1)),isNaN(t))?e:String.fromCharCode(t)}}))},goog.string.HTML_ENTITY_PATTERN_=/&([^;\\s<&]+);?/g,goog.string.whitespaceEscape=function(e,t){return goog.string.newLineToBr(e.replace(/ /g,"  "),t)},goog.string.preserveSpaces=function(e){return e.replace(/(^|[\\n ]) /g,"$1"+goog.string.Unicode.NBSP)},goog.string.stripQuotes=function(e,t){for(var o=t.length,r=0;r<o;r++){var n=1==o?t:t.charAt(r);if(e.charAt(0)==n&&e.charAt(e.length-1)==n)return e.substring(1,e.length-1)}return e},goog.string.truncate=function(e,t,o){return o&&(e=goog.string.unescapeEntities(e)),e.length>t&&(e=e.substring(0,t-3)+"..."),o&&(e=goog.string.htmlEscape(e)),e},goog.string.truncateMiddle=function(e,t,o,r){if(o&&(e=goog.string.unescapeEntities(e)),r&&e.length>t){r>t&&(r=t);var n=e.length-r;e=e.substring(0,t-r)+"..."+e.substring(n)}else e.length>t&&(r=Math.floor(t/2),n=e.length-r,e=e.substring(0,r+t%2)+"..."+e.substring(n));return o&&(e=goog.string.htmlEscape(e)),e},goog.string.specialEscapeChars_={"\\0":"\\\\0","\\b":"\\\\b","\\f":"\\\\f","\\n":"\\\\n","\\r":"\\\\r","\\t":"\\\\t","\\v":"\\\\x0B",\'"\':\'\\\\"\',"\\\\":"\\\\\\\\","<":"\\\\u003C"},goog.string.jsEscapeCache_={"\'":"\\\\\'"},goog.string.quote=function(e){e=String(e);for(var t=[\'"\'],o=0;o<e.length;o++){var r=e.charAt(o),n=r.charCodeAt(0);t[o+1]=goog.string.specialEscapeChars_[r]||(31<n&&127>n?r:goog.string.escapeChar(r))}return t.push(\'"\'),t.join("")},goog.string.escapeString=function(e){for(var t=[],o=0;o<e.length;o++)t[o]=goog.string.escapeChar(e.charAt(o));return t.join("")},goog.string.escapeChar=function(e){if(e in goog.string.jsEscapeCache_)return goog.string.jsEscapeCache_[e];if(e in goog.string.specialEscapeChars_)return goog.string.jsEscapeCache_[e]=goog.string.specialEscapeChars_[e];var t=e.charCodeAt(0);if(31<t&&127>t)var o=e;else 256>t?(o="\\\\x",(16>t||256<t)&&(o+="0")):(o="\\\\u",4096>t&&(o+="0")),o+=t.toString(16).toUpperCase();return goog.string.jsEscapeCache_[e]=o},goog.string.contains=goog.string.internal.contains,goog.string.caseInsensitiveContains=goog.string.internal.caseInsensitiveContains,goog.string.countOf=function(e,t){return e&&t?e.split(t).length-1:0},goog.string.removeAt=function(e,t,o){var r=e;return 0<=t&&t<e.length&&0<o&&(r=e.substr(0,t)+e.substr(t+o,e.length-t-o)),r},goog.string.remove=function(e,t){return e.replace(t,"")},goog.string.removeAll=function(e,t){return t=new RegExp(goog.string.regExpEscape(t),"g"),e.replace(t,"")},goog.string.replaceAll=function(e,t,o){return t=new RegExp(goog.string.regExpEscape(t),"g"),e.replace(t,o.replace(/\\$/g,"$$$$"))},goog.string.regExpEscape=function(e){return String(e).replace(/([-()\\[\\]{}+?*.$\\^|,:#<!\\\\])/g,"\\\\$1").replace(/\\x08/g,"\\\\x08")},goog.string.repeat=String.prototype.repeat?function(e,t){return e.repeat(t)}:function(e,t){return Array(t+1).join(e)},goog.string.padNumber=function(e,t,o){return-1==(o=(e=goog.isDef(o)?e.toFixed(o):String(e)).indexOf("."))&&(o=e.length),goog.string.repeat("0",Math.max(0,t-o))+e},goog.string.makeSafe=function(e){return null==e?"":String(e)},goog.string.buildString=function(e){return Array.prototype.join.call(arguments,"")},goog.string.getRandomString=function(){return Math.floor(2147483648*Math.random()).toString(36)+Math.abs(Math.floor(2147483648*Math.random())^goog.now()).toString(36)},goog.string.compareVersions=goog.string.internal.compareVersions,goog.string.hashCode=function(e){for(var t=0,o=0;o<e.length;++o)t=31*t+e.charCodeAt(o)>>>0;return t},goog.string.uniqueStringCounter_=2147483648*Math.random()|0,goog.string.createUniqueString=function(){return"goog_"+goog.string.uniqueStringCounter_++},goog.string.toNumber=function(e){var t=Number(e);return 0==t&&goog.string.isEmptyOrWhitespace(e)?NaN:t},goog.string.isLowerCamelCase=function(e){return/^[a-z]+([A-Z][a-z]*)*$/.test(e)},goog.string.isUpperCamelCase=function(e){return/^([A-Z][a-z]*)+$/.test(e)},goog.string.toCamelCase=function(e){return String(e).replace(/\\-([a-z])/g,(function(e,t){return t.toUpperCase()}))},goog.string.toSelectorCase=function(e){return String(e).replace(/([A-Z])/g,"-$1").toLowerCase()},goog.string.toTitleCase=function(e,t){return t=goog.isString(t)?goog.string.regExpEscape(t):"\\\\s",e.replace(new RegExp("(^"+(t?"|["+t+"]+":"")+")([a-z])","g"),(function(e,t,o){return t+o.toUpperCase()}))},goog.string.capitalize=function(e){return String(e.charAt(0)).toUpperCase()+String(e.substr(1)).toLowerCase()},goog.string.parseInt=function(e){return isFinite(e)&&(e=String(e)),goog.isString(e)?/^\\s*-?0x/i.test(e)?parseInt(e,16):parseInt(e,10):NaN},goog.string.splitLimit=function(e,t,o){e=e.split(t);for(var r=[];0<o&&e.length;)r.push(e.shift()),o--;return e.length&&r.push(e.join(t)),r},goog.string.lastComponent=function(e,t){if(!t)return e;"string"==typeof t&&(t=[t]);for(var o=-1,r=0;r<t.length;r++)if(""!=t[r]){var n=e.lastIndexOf(t[r]);n>o&&(o=n)}return-1==o?e:e.slice(o+1)},goog.string.editDistance=function(e,t){var o=[],r=[];if(e==t)return 0;if(!e.length||!t.length)return Math.max(e.length,t.length);for(var n=0;n<t.length+1;n++)o[n]=n;for(n=0;n<e.length;n++){r[0]=n+1;for(var s=0;s<t.length;s++)r[s+1]=Math.min(r[s]+1,o[s+1]+1,o[s]+Number(e[n]!=t[s]));for(s=0;s<o.length;s++)o[s]=r[s]}return r[t.length]},goog.labs.userAgent.engine={},goog.labs.userAgent.engine.isPresto=function(){return goog.labs.userAgent.util.matchUserAgent("Presto")},goog.labs.userAgent.engine.isTrident=function(){return goog.labs.userAgent.util.matchUserAgent("Trident")||goog.labs.userAgent.util.matchUserAgent("MSIE")},goog.labs.userAgent.engine.isEdge=function(){return goog.labs.userAgent.util.matchUserAgent("Edge")},goog.labs.userAgent.engine.isWebKit=function(){return goog.labs.userAgent.util.matchUserAgentIgnoreCase("WebKit")&&!goog.labs.userAgent.engine.isEdge()},goog.labs.userAgent.engine.isGecko=function(){return goog.labs.userAgent.util.matchUserAgent("Gecko")&&!goog.labs.userAgent.engine.isWebKit()&&!goog.labs.userAgent.engine.isTrident()&&!goog.labs.userAgent.engine.isEdge()},goog.labs.userAgent.engine.getVersion=function(){var e=goog.labs.userAgent.util.getUserAgent();if(e){e=goog.labs.userAgent.util.extractVersionTuples(e);var t,o=goog.labs.userAgent.engine.getEngineTuple_(e);if(o)return"Gecko"==o[0]?goog.labs.userAgent.engine.getVersionForKey_(e,"Firefox"):o[1];if((e=e[0])&&(t=e[2])&&(t=/Trident\\/([^\\s;]+)/.exec(t)))return t[1]}return""},goog.labs.userAgent.engine.getEngineTuple_=function(e){if(!goog.labs.userAgent.engine.isEdge())return e[1];for(var t=0;t<e.length;t++){var o=e[t];if("Edge"==o[0])return o}},goog.labs.userAgent.engine.isVersionOrHigher=function(e){return 0<=goog.string.compareVersions(goog.labs.userAgent.engine.getVersion(),e)},goog.labs.userAgent.engine.getVersionForKey_=function(e,t){return(e=goog.array.find(e,(function(e){return t==e[0]})))&&e[1]||""},goog.labs.userAgent.platform={},goog.labs.userAgent.platform.isAndroid=function(){return goog.labs.userAgent.util.matchUserAgent("Android")},goog.labs.userAgent.platform.isIpod=function(){return goog.labs.userAgent.util.matchUserAgent("iPod")},goog.labs.userAgent.platform.isIphone=function(){return goog.labs.userAgent.util.matchUserAgent("iPhone")&&!goog.labs.userAgent.util.matchUserAgent("iPod")&&!goog.labs.userAgent.util.matchUserAgent("iPad")},goog.labs.userAgent.platform.isIpad=function(){return goog.labs.userAgent.util.matchUserAgent("iPad")},goog.labs.userAgent.platform.isIos=function(){return goog.labs.userAgent.platform.isIphone()||goog.labs.userAgent.platform.isIpad()||goog.labs.userAgent.platform.isIpod()},goog.labs.userAgent.platform.isMacintosh=function(){return goog.labs.userAgent.util.matchUserAgent("Macintosh")},goog.labs.userAgent.platform.isLinux=function(){return goog.labs.userAgent.util.matchUserAgent("Linux")},goog.labs.userAgent.platform.isWindows=function(){return goog.labs.userAgent.util.matchUserAgent("Windows")},goog.labs.userAgent.platform.isChromeOS=function(){return goog.labs.userAgent.util.matchUserAgent("CrOS")},goog.labs.userAgent.platform.isChromecast=function(){return goog.labs.userAgent.util.matchUserAgent("CrKey")},goog.labs.userAgent.platform.isKaiOS=function(){return goog.labs.userAgent.util.matchUserAgentIgnoreCase("KaiOS")},goog.labs.userAgent.platform.isGo2Phone=function(){return goog.labs.userAgent.util.matchUserAgentIgnoreCase("GAFP")},goog.labs.userAgent.platform.getVersion=function(){var e=goog.labs.userAgent.util.getUserAgent(),t="";return goog.labs.userAgent.platform.isWindows()?t=(e=(t=/Windows (?:NT|Phone) ([0-9.]+)/).exec(e))?e[1]:"0.0":goog.labs.userAgent.platform.isIos()?t=(e=(t=/(?:iPhone|iPod|iPad|CPU)\\s+OS\\s+(\\S+)/).exec(e))&&e[1].replace(/_/g,"."):goog.labs.userAgent.platform.isMacintosh()?t=(e=(t=/Mac OS X ([0-9_.]+)/).exec(e))?e[1].replace(/_/g,"."):"10":goog.labs.userAgent.platform.isKaiOS()?t=(e=(t=/(?:KaiOS)\\/(\\S+)/i).exec(e))&&e[1]:goog.labs.userAgent.platform.isAndroid()?t=(e=(t=/Android\\s+([^\\);]+)(\\)|;)/).exec(e))&&e[1]:goog.labs.userAgent.platform.isChromeOS()&&(t=(e=(t=/(?:CrOS\\s+(?:i686|x86_64)\\s+([0-9.]+))/).exec(e))&&e[1]),t||""},goog.labs.userAgent.platform.isVersionOrHigher=function(e){return 0<=goog.string.compareVersions(goog.labs.userAgent.platform.getVersion(),e)},goog.reflect={},goog.reflect.object=function(e,t){return t},goog.reflect.objectProperty=function(e,t){return e},goog.reflect.sinkValue=function(e){return goog.reflect.sinkValue[" "](e),e},goog.reflect.sinkValue[" "]=goog.nullFunction,goog.reflect.canAccessProperty=function(e,t){try{return goog.reflect.sinkValue(e[t]),!0}catch(e){}return!1},goog.reflect.cache=function(e,t,o,r){return r=r?r(t):t,Object.prototype.hasOwnProperty.call(e,r)?e[r]:e[r]=o(t)},goog.userAgent={},goog.userAgent.ASSUME_IE=!1,goog.userAgent.ASSUME_EDGE=!1,goog.userAgent.ASSUME_GECKO=!1,goog.userAgent.ASSUME_WEBKIT=!1,goog.userAgent.ASSUME_MOBILE_WEBKIT=!1,goog.userAgent.ASSUME_OPERA=!1,goog.userAgent.ASSUME_ANY_VERSION=!1,goog.userAgent.BROWSER_KNOWN_=goog.userAgent.ASSUME_IE||goog.userAgent.ASSUME_EDGE||goog.userAgent.ASSUME_GECKO||goog.userAgent.ASSUME_MOBILE_WEBKIT||goog.userAgent.ASSUME_WEBKIT||goog.userAgent.ASSUME_OPERA,goog.userAgent.getUserAgentString=function(){return goog.labs.userAgent.util.getUserAgent()},goog.userAgent.getNavigatorTyped=function(){return goog.global.navigator||null},goog.userAgent.getNavigator=function(){return goog.userAgent.getNavigatorTyped()},goog.userAgent.OPERA=goog.userAgent.BROWSER_KNOWN_?goog.userAgent.ASSUME_OPERA:goog.labs.userAgent.browser.isOpera(),goog.userAgent.IE=goog.userAgent.BROWSER_KNOWN_?goog.userAgent.ASSUME_IE:goog.labs.userAgent.browser.isIE(),goog.userAgent.EDGE=goog.userAgent.BROWSER_KNOWN_?goog.userAgent.ASSUME_EDGE:goog.labs.userAgent.engine.isEdge(),goog.userAgent.EDGE_OR_IE=goog.userAgent.EDGE||goog.userAgent.IE,goog.userAgent.GECKO=goog.userAgent.BROWSER_KNOWN_?goog.userAgent.ASSUME_GECKO:goog.labs.userAgent.engine.isGecko(),goog.userAgent.WEBKIT=goog.userAgent.BROWSER_KNOWN_?goog.userAgent.ASSUME_WEBKIT||goog.userAgent.ASSUME_MOBILE_WEBKIT:goog.labs.userAgent.engine.isWebKit(),goog.userAgent.isMobile_=function(){return goog.userAgent.WEBKIT&&goog.labs.userAgent.util.matchUserAgent("Mobile")},goog.userAgent.MOBILE=goog.userAgent.ASSUME_MOBILE_WEBKIT||goog.userAgent.isMobile_(),goog.userAgent.SAFARI=goog.userAgent.WEBKIT,goog.userAgent.determinePlatform_=function(){var e=goog.userAgent.getNavigatorTyped();return e&&e.platform||""},goog.userAgent.PLATFORM=goog.userAgent.determinePlatform_(),goog.userAgent.ASSUME_MAC=!1,goog.userAgent.ASSUME_WINDOWS=!1,goog.userAgent.ASSUME_LINUX=!1,goog.userAgent.ASSUME_X11=!1,goog.userAgent.ASSUME_ANDROID=!1,goog.userAgent.ASSUME_IPHONE=!1,goog.userAgent.ASSUME_IPAD=!1,goog.userAgent.ASSUME_IPOD=!1,goog.userAgent.ASSUME_KAIOS=!1,goog.userAgent.ASSUME_GO2PHONE=!1,goog.userAgent.PLATFORM_KNOWN_=goog.userAgent.ASSUME_MAC||goog.userAgent.ASSUME_WINDOWS||goog.userAgent.ASSUME_LINUX||goog.userAgent.ASSUME_X11||goog.userAgent.ASSUME_ANDROID||goog.userAgent.ASSUME_IPHONE||goog.userAgent.ASSUME_IPAD||goog.userAgent.ASSUME_IPOD,goog.userAgent.MAC=goog.userAgent.PLATFORM_KNOWN_?goog.userAgent.ASSUME_MAC:goog.labs.userAgent.platform.isMacintosh(),goog.userAgent.WINDOWS=goog.userAgent.PLATFORM_KNOWN_?goog.userAgent.ASSUME_WINDOWS:goog.labs.userAgent.platform.isWindows(),goog.userAgent.isLegacyLinux_=function(){return goog.labs.userAgent.platform.isLinux()||goog.labs.userAgent.platform.isChromeOS()},goog.userAgent.LINUX=goog.userAgent.PLATFORM_KNOWN_?goog.userAgent.ASSUME_LINUX:goog.userAgent.isLegacyLinux_(),goog.userAgent.isX11_=function(){var e=goog.userAgent.getNavigatorTyped();return!!e&&goog.string.contains(e.appVersion||"","X11")},goog.userAgent.X11=goog.userAgent.PLATFORM_KNOWN_?goog.userAgent.ASSUME_X11:goog.userAgent.isX11_(),goog.userAgent.ANDROID=goog.userAgent.PLATFORM_KNOWN_?goog.userAgent.ASSUME_ANDROID:goog.labs.userAgent.platform.isAndroid(),goog.userAgent.IPHONE=goog.userAgent.PLATFORM_KNOWN_?goog.userAgent.ASSUME_IPHONE:goog.labs.userAgent.platform.isIphone(),goog.userAgent.IPAD=goog.userAgent.PLATFORM_KNOWN_?goog.userAgent.ASSUME_IPAD:goog.labs.userAgent.platform.isIpad(),goog.userAgent.IPOD=goog.userAgent.PLATFORM_KNOWN_?goog.userAgent.ASSUME_IPOD:goog.labs.userAgent.platform.isIpod(),goog.userAgent.IOS=goog.userAgent.PLATFORM_KNOWN_?goog.userAgent.ASSUME_IPHONE||goog.userAgent.ASSUME_IPAD||goog.userAgent.ASSUME_IPOD:goog.labs.userAgent.platform.isIos(),goog.userAgent.KAIOS=goog.userAgent.PLATFORM_KNOWN_?goog.userAgent.ASSUME_KAIOS:goog.labs.userAgent.platform.isKaiOS(),goog.userAgent.GO2PHONE=goog.userAgent.PLATFORM_KNOWN_?goog.userAgent.ASSUME_GO2PHONE:goog.labs.userAgent.platform.isGo2Phone(),goog.userAgent.determineVersion_=function(){var e="",t=goog.userAgent.getVersionRegexResult_();return t&&(e=t?t[1]:""),goog.userAgent.IE&&null!=(t=goog.userAgent.getDocumentMode_())&&t>parseFloat(e)?String(t):e},goog.userAgent.getVersionRegexResult_=function(){var e=goog.userAgent.getUserAgentString();return goog.userAgent.GECKO?/rv:([^\\);]+)(\\)|;)/.exec(e):goog.userAgent.EDGE?/Edge\\/([\\d\\.]+)/.exec(e):goog.userAgent.IE?/\\b(?:MSIE|rv)[: ]([^\\);]+)(\\)|;)/.exec(e):goog.userAgent.WEBKIT?/WebKit\\/(\\S+)/.exec(e):goog.userAgent.OPERA?/(?:Version)[ \\/]?(\\S+)/.exec(e):void 0},goog.userAgent.getDocumentMode_=function(){var e=goog.global.document;return e?e.documentMode:void 0},goog.userAgent.VERSION=goog.userAgent.determineVersion_(),goog.userAgent.compare=function(e,t){return goog.string.compareVersions(e,t)},goog.userAgent.isVersionOrHigherCache_={},goog.userAgent.isVersionOrHigher=function(e){return goog.userAgent.ASSUME_ANY_VERSION||goog.reflect.cache(goog.userAgent.isVersionOrHigherCache_,e,(function(){return 0<=goog.string.compareVersions(goog.userAgent.VERSION,e)}))},goog.userAgent.isVersion=goog.userAgent.isVersionOrHigher,goog.userAgent.isDocumentModeOrHigher=function(e){return Number(goog.userAgent.DOCUMENT_MODE)>=e},goog.userAgent.isDocumentMode=goog.userAgent.isDocumentModeOrHigher,goog.userAgent.DOCUMENT_MODE=function(){if(goog.global.document&&goog.userAgent.IE)return goog.userAgent.getDocumentMode_()}(),goog.userAgent.product={},goog.userAgent.product.ASSUME_FIREFOX=!1,goog.userAgent.product.ASSUME_IPHONE=!1,goog.userAgent.product.ASSUME_IPAD=!1,goog.userAgent.product.ASSUME_ANDROID=!1,goog.userAgent.product.ASSUME_CHROME=!1,goog.userAgent.product.ASSUME_SAFARI=!1,goog.userAgent.product.PRODUCT_KNOWN_=goog.userAgent.ASSUME_IE||goog.userAgent.ASSUME_EDGE||goog.userAgent.ASSUME_OPERA||goog.userAgent.product.ASSUME_FIREFOX||goog.userAgent.product.ASSUME_IPHONE||goog.userAgent.product.ASSUME_IPAD||goog.userAgent.product.ASSUME_ANDROID||goog.userAgent.product.ASSUME_CHROME||goog.userAgent.product.ASSUME_SAFARI,goog.userAgent.product.OPERA=goog.userAgent.OPERA,goog.userAgent.product.IE=goog.userAgent.IE,goog.userAgent.product.EDGE=goog.userAgent.EDGE,goog.userAgent.product.FIREFOX=goog.userAgent.product.PRODUCT_KNOWN_?goog.userAgent.product.ASSUME_FIREFOX:goog.labs.userAgent.browser.isFirefox(),goog.userAgent.product.isIphoneOrIpod_=function(){return goog.labs.userAgent.platform.isIphone()||goog.labs.userAgent.platform.isIpod()},goog.userAgent.product.IPHONE=goog.userAgent.product.PRODUCT_KNOWN_?goog.userAgent.product.ASSUME_IPHONE:goog.userAgent.product.isIphoneOrIpod_(),goog.userAgent.product.IPAD=goog.userAgent.product.PRODUCT_KNOWN_?goog.userAgent.product.ASSUME_IPAD:goog.labs.userAgent.platform.isIpad(),goog.userAgent.product.ANDROID=goog.userAgent.product.PRODUCT_KNOWN_?goog.userAgent.product.ASSUME_ANDROID:goog.labs.userAgent.browser.isAndroidBrowser(),goog.userAgent.product.CHROME=goog.userAgent.product.PRODUCT_KNOWN_?goog.userAgent.product.ASSUME_CHROME:goog.labs.userAgent.browser.isChrome(),goog.userAgent.product.isSafariDesktop_=function(){return goog.labs.userAgent.browser.isSafari()&&!goog.labs.userAgent.platform.isIos()},goog.userAgent.product.SAFARI=goog.userAgent.product.PRODUCT_KNOWN_?goog.userAgent.product.ASSUME_SAFARI:goog.userAgent.product.isSafariDesktop_(),goog.crypt.base64={},goog.crypt.base64.DEFAULT_ALPHABET_COMMON_="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",goog.crypt.base64.ENCODED_VALS=goog.crypt.base64.DEFAULT_ALPHABET_COMMON_+"+/=",goog.crypt.base64.ENCODED_VALS_WEBSAFE=goog.crypt.base64.DEFAULT_ALPHABET_COMMON_+"-_.",goog.crypt.base64.Alphabet={DEFAULT:0,NO_PADDING:1,WEBSAFE:2,WEBSAFE_DOT_PADDING:3,WEBSAFE_NO_PADDING:4},goog.crypt.base64.paddingChars_="=.",goog.crypt.base64.isPadding_=function(e){return goog.string.contains(goog.crypt.base64.paddingChars_,e)},goog.crypt.base64.byteToCharMaps_={};goog.crypt.base64.charToByteMap_=null,goog.crypt.base64.ASSUME_NATIVE_SUPPORT_=goog.userAgent.GECKO||goog.userAgent.WEBKIT&&!goog.userAgent.product.SAFARI||goog.userAgent.OPERA,goog.crypt.base64.HAS_NATIVE_ENCODE_=goog.crypt.base64.ASSUME_NATIVE_SUPPORT_||"function"==typeof goog.global.btoa,goog.crypt.base64.HAS_NATIVE_DECODE_=goog.crypt.base64.ASSUME_NATIVE_SUPPORT_||!goog.userAgent.product.SAFARI&&!goog.userAgent.IE&&"function"==typeof goog.global.atob,goog.crypt.base64.encodeByteArray=function(e,t){goog.asserts.assert(goog.isArrayLike(e),"encodeByteArray takes an array as a parameter"),void 0===t&&(t=goog.crypt.base64.Alphabet.DEFAULT),goog.crypt.base64.init_(),t=goog.crypt.base64.byteToCharMaps_[t];for(var o=[],r=0;r<e.length;r+=3){var n=e[r],s=r+1<e.length,i=s?e[r+1]:0,a=r+2<e.length,g=a?e[r+2]:0,p=n>>2;n=(3&n)<<4|i>>4,i=(15&i)<<2|g>>6,g&=63,a||(g=64,s||(i=64)),o.push(t[p],t[n],t[i]||"",t[g]||"")}return o.join("")},goog.crypt.base64.encodeString=function(e,t){return goog.crypt.base64.HAS_NATIVE_ENCODE_&&!t?goog.global.btoa(e):goog.crypt.base64.encodeByteArray(goog.crypt.stringToByteArray(e),t)},goog.crypt.base64.decodeString=function(e,t){if(goog.crypt.base64.HAS_NATIVE_DECODE_&&!t)return goog.global.atob(e);var o="";return goog.crypt.base64.decodeStringInternal_(e,(function(e){o+=String.fromCharCode(e)})),o},goog.crypt.base64.decodeStringToByteArray=function(e,t){var o=[];return goog.crypt.base64.decodeStringInternal_(e,(function(e){o.push(e)})),o},goog.crypt.base64.decodeStringToUint8Array=function(e){goog.asserts.assert(!goog.userAgent.IE||goog.userAgent.isVersionOrHigher("10"),"Browser does not support typed arrays");var t=e.length,o=3*t/4;o%3?o=Math.floor(o):goog.crypt.base64.isPadding_(e[t-1])&&(o=goog.crypt.base64.isPadding_(e[t-2])?o-2:o-1);var r=new Uint8Array(o),n=0;return goog.crypt.base64.decodeStringInternal_(e,(function(e){r[n++]=e})),r.subarray(0,n)},goog.crypt.base64.decodeStringInternal_=function(e,t){function o(t){for(;r<e.length;){var o=e.charAt(r++),n=goog.crypt.base64.charToByteMap_[o];if(null!=n)return n;if(!goog.string.isEmptyOrWhitespace(o))throw Error("Unknown base64 encoding at char: "+o)}return t}goog.crypt.base64.init_();for(var r=0;;){var n=o(-1),s=o(0),i=o(64),a=o(64);if(64===a&&-1===n)break;t(n<<2|s>>4),64!=i&&(t(s<<4&240|i>>2),64!=a&&t(i<<6&192|a))}},goog.crypt.base64.init_=function(){if(!goog.crypt.base64.charToByteMap_){goog.crypt.base64.charToByteMap_={};for(var e=goog.crypt.base64.DEFAULT_ALPHABET_COMMON_.split(""),t=["+/=","+/","-_=","-_.","-_"],o=0;5>o;o++){var r=e.concat(t[o].split(""));goog.crypt.base64.byteToCharMaps_[o]=r;for(var n=0;n<r.length;n++){var s=r[n],i=goog.crypt.base64.charToByteMap_[s];void 0===i?goog.crypt.base64.charToByteMap_[s]=n:goog.asserts.assert(i===n)}}}},jspb.utils={},jspb.utils.split64Low=0,jspb.utils.split64High=0,jspb.utils.splitUint64=function(e){var t=e>>>0;e=Math.floor((e-t)/jspb.BinaryConstants.TWO_TO_32)>>>0,jspb.utils.split64Low=t,jspb.utils.split64High=e},jspb.utils.splitInt64=function(e){var t=0>e,o=(e=Math.abs(e))>>>0;e=Math.floor((e-o)/jspb.BinaryConstants.TWO_TO_32),e>>>=0,t&&(e=~e>>>0,4294967295<(o=1+(~o>>>0))&&(o=0,4294967295<++e&&(e=0))),jspb.utils.split64Low=o,jspb.utils.split64High=e},jspb.utils.splitZigzag64=function(e){var t=0>e;e=2*Math.abs(e),jspb.utils.splitUint64(e),e=jspb.utils.split64Low;var o=jspb.utils.split64High;t&&(0==e?0==o?o=e=4294967295:(o--,e=4294967295):e--),jspb.utils.split64Low=e,jspb.utils.split64High=o},jspb.utils.splitFloat32=function(e){var t=0>e?1:0;if(0===(e=t?-e:e))0<1/e?(jspb.utils.split64High=0,jspb.utils.split64Low=0):(jspb.utils.split64High=0,jspb.utils.split64Low=2147483648);else if(isNaN(e))jspb.utils.split64High=0,jspb.utils.split64Low=2147483647;else if(e>jspb.BinaryConstants.FLOAT32_MAX)jspb.utils.split64High=0,jspb.utils.split64Low=(t<<31|2139095040)>>>0;else if(e<jspb.BinaryConstants.FLOAT32_MIN)e=Math.round(e/Math.pow(2,-149)),jspb.utils.split64High=0,jspb.utils.split64Low=(t<<31|e)>>>0;else{var o=Math.floor(Math.log(e)/Math.LN2);e*=Math.pow(2,-o),16777216<=(e=Math.round(e*jspb.BinaryConstants.TWO_TO_23))&&++o,jspb.utils.split64High=0,jspb.utils.split64Low=(t<<31|o+127<<23|8388607&e)>>>0}},jspb.utils.splitFloat64=function(e){var t=0>e?1:0;if(0===(e=t?-e:e))jspb.utils.split64High=0<1/e?0:2147483648,jspb.utils.split64Low=0;else if(isNaN(e))jspb.utils.split64High=2147483647,jspb.utils.split64Low=4294967295;else if(e>jspb.BinaryConstants.FLOAT64_MAX)jspb.utils.split64High=(t<<31|2146435072)>>>0,jspb.utils.split64Low=0;else if(e<jspb.BinaryConstants.FLOAT64_MIN){var o=e/Math.pow(2,-1074);e=o/jspb.BinaryConstants.TWO_TO_32,jspb.utils.split64High=(t<<31|e)>>>0,jspb.utils.split64Low=o>>>0}else{var r=0;if(2<=(o=e))for(;2<=o&&1023>r;)r++,o/=2;else for(;1>o&&-1022<r;)o*=2,r--;e=(o=e*Math.pow(2,-r))*jspb.BinaryConstants.TWO_TO_20&1048575,o=o*jspb.BinaryConstants.TWO_TO_52>>>0,jspb.utils.split64High=(t<<31|r+1023<<20|e)>>>0,jspb.utils.split64Low=o}},jspb.utils.splitHash64=function(e){var t=e.charCodeAt(0),o=e.charCodeAt(1),r=e.charCodeAt(2),n=e.charCodeAt(3),s=e.charCodeAt(4),i=e.charCodeAt(5),a=e.charCodeAt(6);e=e.charCodeAt(7),jspb.utils.split64Low=t+(o<<8)+(r<<16)+(n<<24)>>>0,jspb.utils.split64High=s+(i<<8)+(a<<16)+(e<<24)>>>0},jspb.utils.joinUint64=function(e,t){return t*jspb.BinaryConstants.TWO_TO_32+(e>>>0)},jspb.utils.joinInt64=function(e,t){var o=2147483648&t;return o&&(t=~t>>>0,0==(e=1+~e>>>0)&&(t=t+1>>>0)),e=jspb.utils.joinUint64(e,t),o?-e:e},jspb.utils.toZigzag64=function(e,t,o){var r=t>>31;return o(e<<1^r,(t<<1|e>>>31)^r)},jspb.utils.joinZigzag64=function(e,t){return jspb.utils.fromZigzag64(e,t,jspb.utils.joinInt64)},jspb.utils.fromZigzag64=function(e,t,o){var r=-(1&e);return o((e>>>1|t<<31)^r,t>>>1^r)},jspb.utils.joinFloat32=function(e,t){t=2*(e>>31)+1;var o=e>>>23&255;return e&=8388607,255==o?e?NaN:1/0*t:0==o?t*Math.pow(2,-149)*e:t*Math.pow(2,o-150)*(e+Math.pow(2,23))},jspb.utils.joinFloat64=function(e,t){var o=2*(t>>31)+1,r=t>>>20&2047;return e=jspb.BinaryConstants.TWO_TO_32*(1048575&t)+e,2047==r?e?NaN:1/0*o:0==r?o*Math.pow(2,-1074)*e:o*Math.pow(2,r-1075)*(e+jspb.BinaryConstants.TWO_TO_52)},jspb.utils.joinHash64=function(e,t){return String.fromCharCode(e>>>0&255,e>>>8&255,e>>>16&255,e>>>24&255,t>>>0&255,t>>>8&255,t>>>16&255,t>>>24&255)},jspb.utils.DIGITS="0123456789abcdef".split(""),jspb.utils.ZERO_CHAR_CODE_=48,jspb.utils.A_CHAR_CODE_=97,jspb.utils.joinUnsignedDecimalString=function(e,t){function o(e,t){return e=e?String(e):"",t?"0000000".slice(e.length)+e:e}if(2097151>=t)return""+jspb.utils.joinUint64(e,t);var r=(e>>>24|t<<8)>>>0&16777215;return e=(16777215&e)+6777216*r+6710656*(t=t>>16&65535),r+=8147497*t,t*=2,1e7<=e&&(r+=Math.floor(e/1e7),e%=1e7),1e7<=r&&(t+=Math.floor(r/1e7),r%=1e7),o(t,0)+o(r,t)+o(e,1)},jspb.utils.joinSignedDecimalString=function(e,t){var o=2147483648&t;return o&&(t=~t+(0==(e=1+~e>>>0)?1:0)>>>0),e=jspb.utils.joinUnsignedDecimalString(e,t),o?"-"+e:e},jspb.utils.hash64ToDecimalString=function(e,t){jspb.utils.splitHash64(e),e=jspb.utils.split64Low;var o=jspb.utils.split64High;return t?jspb.utils.joinSignedDecimalString(e,o):jspb.utils.joinUnsignedDecimalString(e,o)},jspb.utils.hash64ArrayToDecimalStrings=function(e,t){for(var o=Array(e.length),r=0;r<e.length;r++)o[r]=jspb.utils.hash64ToDecimalString(e[r],t);return o},jspb.utils.decimalStringToHash64=function(e){function t(e,t){for(var o=0;8>o&&(1!==e||0<t);o++)t=e*r[o]+t,r[o]=255&t,t>>>=8}goog.asserts.assert(0<e.length);var o=!1;"-"===e[0]&&(o=!0,e=e.slice(1));for(var r=[0,0,0,0,0,0,0,0],n=0;n<e.length;n++)t(10,e.charCodeAt(n)-jspb.utils.ZERO_CHAR_CODE_);return o&&(function(){for(var e=0;8>e;e++)r[e]=255&~r[e]}(),t(1,1)),goog.crypt.byteArrayToString(r)},jspb.utils.splitDecimalString=function(e){jspb.utils.splitHash64(jspb.utils.decimalStringToHash64(e))},jspb.utils.toHexDigit_=function(e){return String.fromCharCode(10>e?jspb.utils.ZERO_CHAR_CODE_+e:jspb.utils.A_CHAR_CODE_-10+e)},jspb.utils.fromHexCharCode_=function(e){return e>=jspb.utils.A_CHAR_CODE_?e-jspb.utils.A_CHAR_CODE_+10:e-jspb.utils.ZERO_CHAR_CODE_},jspb.utils.hash64ToHexString=function(e){var t=Array(18);t[0]="0",t[1]="x";for(var o=0;8>o;o++){var r=e.charCodeAt(7-o);t[2*o+2]=jspb.utils.toHexDigit_(r>>4),t[2*o+3]=jspb.utils.toHexDigit_(15&r)}return t.join("")},jspb.utils.hexStringToHash64=function(e){e=e.toLowerCase(),goog.asserts.assert(18==e.length),goog.asserts.assert("0"==e[0]),goog.asserts.assert("x"==e[1]);for(var t="",o=0;8>o;o++){var r=jspb.utils.fromHexCharCode_(e.charCodeAt(2*o+2)),n=jspb.utils.fromHexCharCode_(e.charCodeAt(2*o+3));t=String.fromCharCode(16*r+n)+t}return t},jspb.utils.hash64ToNumber=function(e,t){jspb.utils.splitHash64(e),e=jspb.utils.split64Low;var o=jspb.utils.split64High;return t?jspb.utils.joinInt64(e,o):jspb.utils.joinUint64(e,o)},jspb.utils.numberToHash64=function(e){return jspb.utils.splitInt64(e),jspb.utils.joinHash64(jspb.utils.split64Low,jspb.utils.split64High)},jspb.utils.countVarints=function(e,t,o){for(var r=0,n=t;n<o;n++)r+=e[n]>>7;return o-t-r},jspb.utils.countVarintFields=function(e,t,o,r){var n=0;if(128>(r=8*r+jspb.BinaryConstants.WireType.VARINT))for(;t<o&&e[t++]==r;)for(n++;;){var s=e[t++];if(0==(128&s))break}else for(;t<o;){for(s=r;128<s;){if(e[t]!=(127&s|128))return n;t++,s>>=7}if(e[t++]!=s)break;for(n++;0!=(128&(s=e[t++])););}return n},jspb.utils.countFixedFields_=function(e,t,o,r,n){var s=0;if(128>r)for(;t<o&&e[t++]==r;)s++,t+=n;else for(;t<o;){for(var i=r;128<i;){if(e[t++]!=(127&i|128))return s;i>>=7}if(e[t++]!=i)break;s++,t+=n}return s},jspb.utils.countFixed32Fields=function(e,t,o,r){return jspb.utils.countFixedFields_(e,t,o,8*r+jspb.BinaryConstants.WireType.FIXED32,4)},jspb.utils.countFixed64Fields=function(e,t,o,r){return jspb.utils.countFixedFields_(e,t,o,8*r+jspb.BinaryConstants.WireType.FIXED64,8)},jspb.utils.countDelimitedFields=function(e,t,o,r){var n=0;for(r=8*r+jspb.BinaryConstants.WireType.DELIMITED;t<o;){for(var s=r;128<s;){if(e[t++]!=(127&s|128))return n;s>>=7}if(e[t++]!=s)break;n++;for(var i=0,a=1;i+=(127&(s=e[t++]))*a,a*=128,0!=(128&s););t+=i}return n},jspb.utils.debugBytesToTextFormat=function(e){var t=\'"\';if(e){e=jspb.utils.byteSourceToUint8Array(e);for(var o=0;o<e.length;o++)t+="\\\\x",16>e[o]&&(t+="0"),t+=e[o].toString(16)}return t+\'"\'},jspb.utils.debugScalarToTextFormat=function(e){return"string"==typeof e?goog.string.quote(e):e.toString()},jspb.utils.stringToByteArray=function(e){for(var t=new Uint8Array(e.length),o=0;o<e.length;o++){var r=e.charCodeAt(o);if(255<r)throw Error("Conversion error: string contains codepoint outside of byte range");t[o]=r}return t},jspb.utils.byteSourceToUint8Array=function(e){return e.constructor===Uint8Array?e:e.constructor===ArrayBuffer||"undefined"!=typeof Buffer&&e.constructor===Buffer||e.constructor===Array?new Uint8Array(e):e.constructor===String?goog.crypt.base64.decodeStringToUint8Array(e):(goog.asserts.fail("Type not convertible to Uint8Array."),new Uint8Array(0))},jspb.BinaryDecoder=function(e,t,o){this.bytes_=null,this.cursor_=this.end_=this.start_=0,this.error_=!1,e&&this.setBlock(e,t,o)},jspb.BinaryDecoder.instanceCache_=[],jspb.BinaryDecoder.alloc=function(e,t,o){if(jspb.BinaryDecoder.instanceCache_.length){var r=jspb.BinaryDecoder.instanceCache_.pop();return e&&r.setBlock(e,t,o),r}return new jspb.BinaryDecoder(e,t,o)},jspb.BinaryDecoder.prototype.free=function(){this.clear(),100>jspb.BinaryDecoder.instanceCache_.length&&jspb.BinaryDecoder.instanceCache_.push(this)},jspb.BinaryDecoder.prototype.clone=function(){return jspb.BinaryDecoder.alloc(this.bytes_,this.start_,this.end_-this.start_)},jspb.BinaryDecoder.prototype.clear=function(){this.bytes_=null,this.cursor_=this.end_=this.start_=0,this.error_=!1},jspb.BinaryDecoder.prototype.getBuffer=function(){return this.bytes_},jspb.BinaryDecoder.prototype.setBlock=function(e,t,o){this.bytes_=jspb.utils.byteSourceToUint8Array(e),this.start_=void 0!==t?t:0,this.end_=void 0!==o?this.start_+o:this.bytes_.length,this.cursor_=this.start_},jspb.BinaryDecoder.prototype.getEnd=function(){return this.end_},jspb.BinaryDecoder.prototype.setEnd=function(e){this.end_=e},jspb.BinaryDecoder.prototype.reset=function(){this.cursor_=this.start_},jspb.BinaryDecoder.prototype.getCursor=function(){return this.cursor_},jspb.BinaryDecoder.prototype.setCursor=function(e){this.cursor_=e},jspb.BinaryDecoder.prototype.advance=function(e){this.cursor_+=e,goog.asserts.assert(this.cursor_<=this.end_)},jspb.BinaryDecoder.prototype.atEnd=function(){return this.cursor_==this.end_},jspb.BinaryDecoder.prototype.pastEnd=function(){return this.cursor_>this.end_},jspb.BinaryDecoder.prototype.getError=function(){return this.error_||0>this.cursor_||this.cursor_>this.end_},jspb.BinaryDecoder.prototype.readSplitVarint64=function(e){for(var t=128,o=0,r=0,n=0;4>n&&128<=t;n++)o|=(127&(t=this.bytes_[this.cursor_++]))<<7*n;if(128<=t&&(o|=(127&(t=this.bytes_[this.cursor_++]))<<28,r|=(127&t)>>4),128<=t)for(n=0;5>n&&128<=t;n++)r|=(127&(t=this.bytes_[this.cursor_++]))<<7*n+3;if(128>t)return e(o>>>0,r>>>0);goog.asserts.fail("Failed to read varint, encoding is invalid."),this.error_=!0},jspb.BinaryDecoder.prototype.readSplitZigzagVarint64=function(e){return this.readSplitVarint64((function(t,o){return jspb.utils.fromZigzag64(t,o,e)}))},jspb.BinaryDecoder.prototype.readSplitFixed64=function(e){var t=this.bytes_,o=this.cursor_;this.cursor_+=8;for(var r=0,n=0,s=o+7;s>=o;s--)r=r<<8|t[s],n=n<<8|t[s+4];return e(r,n)},jspb.BinaryDecoder.prototype.skipVarint=function(){for(;128&this.bytes_[this.cursor_];)this.cursor_++;this.cursor_++},jspb.BinaryDecoder.prototype.unskipVarint=function(e){for(;128<e;)this.cursor_--,e>>>=7;this.cursor_--},jspb.BinaryDecoder.prototype.readUnsignedVarint32=function(){var e=this.bytes_,t=e[this.cursor_+0],o=127&t;return 128>t?(this.cursor_+=1,goog.asserts.assert(this.cursor_<=this.end_),o):(o|=(127&(t=e[this.cursor_+1]))<<7,128>t?(this.cursor_+=2,goog.asserts.assert(this.cursor_<=this.end_),o):(o|=(127&(t=e[this.cursor_+2]))<<14,128>t?(this.cursor_+=3,goog.asserts.assert(this.cursor_<=this.end_),o):(o|=(127&(t=e[this.cursor_+3]))<<21,128>t?(this.cursor_+=4,goog.asserts.assert(this.cursor_<=this.end_),o):(o|=(15&(t=e[this.cursor_+4]))<<28,128>t?(this.cursor_+=5,goog.asserts.assert(this.cursor_<=this.end_),o>>>0):(this.cursor_+=5,128<=e[this.cursor_++]&&128<=e[this.cursor_++]&&128<=e[this.cursor_++]&&128<=e[this.cursor_++]&&128<=e[this.cursor_++]&&goog.asserts.assert(!1),goog.asserts.assert(this.cursor_<=this.end_),o)))))},jspb.BinaryDecoder.prototype.readSignedVarint32=jspb.BinaryDecoder.prototype.readUnsignedVarint32,jspb.BinaryDecoder.prototype.readUnsignedVarint32String=function(){return this.readUnsignedVarint32().toString()},jspb.BinaryDecoder.prototype.readSignedVarint32String=function(){return this.readSignedVarint32().toString()},jspb.BinaryDecoder.prototype.readZigzagVarint32=function(){var e=this.readUnsignedVarint32();return e>>>1^-(1&e)},jspb.BinaryDecoder.prototype.readUnsignedVarint64=function(){return this.readSplitVarint64(jspb.utils.joinUint64)},jspb.BinaryDecoder.prototype.readUnsignedVarint64String=function(){return this.readSplitVarint64(jspb.utils.joinUnsignedDecimalString)},jspb.BinaryDecoder.prototype.readSignedVarint64=function(){return this.readSplitVarint64(jspb.utils.joinInt64)},jspb.BinaryDecoder.prototype.readSignedVarint64String=function(){return this.readSplitVarint64(jspb.utils.joinSignedDecimalString)},jspb.BinaryDecoder.prototype.readZigzagVarint64=function(){return this.readSplitVarint64(jspb.utils.joinZigzag64)},jspb.BinaryDecoder.prototype.readZigzagVarintHash64=function(){return this.readSplitZigzagVarint64(jspb.utils.joinHash64)},jspb.BinaryDecoder.prototype.readZigzagVarint64String=function(){return this.readSplitZigzagVarint64(jspb.utils.joinSignedDecimalString)},jspb.BinaryDecoder.prototype.readUint8=function(){var e=this.bytes_[this.cursor_+0];return this.cursor_+=1,goog.asserts.assert(this.cursor_<=this.end_),e},jspb.BinaryDecoder.prototype.readUint16=function(){var e=this.bytes_[this.cursor_+0],t=this.bytes_[this.cursor_+1];return this.cursor_+=2,goog.asserts.assert(this.cursor_<=this.end_),e<<0|t<<8},jspb.BinaryDecoder.prototype.readUint32=function(){var e=this.bytes_[this.cursor_+0],t=this.bytes_[this.cursor_+1],o=this.bytes_[this.cursor_+2],r=this.bytes_[this.cursor_+3];return this.cursor_+=4,goog.asserts.assert(this.cursor_<=this.end_),(e<<0|t<<8|o<<16|r<<24)>>>0},jspb.BinaryDecoder.prototype.readUint64=function(){var e=this.readUint32(),t=this.readUint32();return jspb.utils.joinUint64(e,t)},jspb.BinaryDecoder.prototype.readUint64String=function(){var e=this.readUint32(),t=this.readUint32();return jspb.utils.joinUnsignedDecimalString(e,t)},jspb.BinaryDecoder.prototype.readInt8=function(){var e=this.bytes_[this.cursor_+0];return this.cursor_+=1,goog.asserts.assert(this.cursor_<=this.end_),e<<24>>24},jspb.BinaryDecoder.prototype.readInt16=function(){var e=this.bytes_[this.cursor_+0],t=this.bytes_[this.cursor_+1];return this.cursor_+=2,goog.asserts.assert(this.cursor_<=this.end_),(e<<0|t<<8)<<16>>16},jspb.BinaryDecoder.prototype.readInt32=function(){var e=this.bytes_[this.cursor_+0],t=this.bytes_[this.cursor_+1],o=this.bytes_[this.cursor_+2],r=this.bytes_[this.cursor_+3];return this.cursor_+=4,goog.asserts.assert(this.cursor_<=this.end_),e<<0|t<<8|o<<16|r<<24},jspb.BinaryDecoder.prototype.readInt64=function(){var e=this.readUint32(),t=this.readUint32();return jspb.utils.joinInt64(e,t)},jspb.BinaryDecoder.prototype.readInt64String=function(){var e=this.readUint32(),t=this.readUint32();return jspb.utils.joinSignedDecimalString(e,t)},jspb.BinaryDecoder.prototype.readFloat=function(){var e=this.readUint32();return jspb.utils.joinFloat32(e,0)},jspb.BinaryDecoder.prototype.readDouble=function(){var e=this.readUint32(),t=this.readUint32();return jspb.utils.joinFloat64(e,t)},jspb.BinaryDecoder.prototype.readBool=function(){return!!this.bytes_[this.cursor_++]},jspb.BinaryDecoder.prototype.readEnum=function(){return this.readSignedVarint32()},jspb.BinaryDecoder.prototype.readString=function(e){var t=this.bytes_,o=this.cursor_;e=o+e;for(var r=[],n="";o<e;){var s=t[o++];if(128>s)r.push(s);else{if(192>s)continue;if(224>s){var i=t[o++];r.push((31&s)<<6|63&i)}else if(240>s){i=t[o++];var a=t[o++];r.push((15&s)<<12|(63&i)<<6|63&a)}else 248>s&&(s=(7&s)<<18|(63&(i=t[o++]))<<12|(63&(a=t[o++]))<<6|63&t[o++],s-=65536,r.push(55296+(s>>10&1023),56320+(1023&s)))}8192<=r.length&&(n+=String.fromCharCode.apply(null,r),r.length=0)}return n+=goog.crypt.byteArrayToString(r),this.cursor_=o,n},jspb.BinaryDecoder.prototype.readStringWithLength=function(){var e=this.readUnsignedVarint32();return this.readString(e)},jspb.BinaryDecoder.prototype.readBytes=function(e){if(0>e||this.cursor_+e>this.bytes_.length)return this.error_=!0,goog.asserts.fail("Invalid byte length!"),new Uint8Array(0);var t=this.bytes_.subarray(this.cursor_,this.cursor_+e);return this.cursor_+=e,goog.asserts.assert(this.cursor_<=this.end_),t},jspb.BinaryDecoder.prototype.readVarintHash64=function(){return this.readSplitVarint64(jspb.utils.joinHash64)},jspb.BinaryDecoder.prototype.readFixedHash64=function(){var e=this.bytes_,t=this.cursor_,o=e[t+0],r=e[t+1],n=e[t+2],s=e[t+3],i=e[t+4],a=e[t+5],g=e[t+6];return e=e[t+7],this.cursor_+=8,String.fromCharCode(o,r,n,s,i,a,g,e)},jspb.BinaryReader=function(e,t,o){this.decoder_=jspb.BinaryDecoder.alloc(e,t,o),this.fieldCursor_=this.decoder_.getCursor(),this.nextField_=jspb.BinaryConstants.INVALID_FIELD_NUMBER,this.nextWireType_=jspb.BinaryConstants.WireType.INVALID,this.error_=!1,this.readCallbacks_=null},jspb.BinaryReader.instanceCache_=[],jspb.BinaryReader.alloc=function(e,t,o){if(jspb.BinaryReader.instanceCache_.length){var r=jspb.BinaryReader.instanceCache_.pop();return e&&r.decoder_.setBlock(e,t,o),r}return new jspb.BinaryReader(e,t,o)},jspb.BinaryReader.prototype.alloc=jspb.BinaryReader.alloc,jspb.BinaryReader.prototype.free=function(){this.decoder_.clear(),this.nextField_=jspb.BinaryConstants.INVALID_FIELD_NUMBER,this.nextWireType_=jspb.BinaryConstants.WireType.INVALID,this.error_=!1,this.readCallbacks_=null,100>jspb.BinaryReader.instanceCache_.length&&jspb.BinaryReader.instanceCache_.push(this)},jspb.BinaryReader.prototype.getFieldCursor=function(){return this.fieldCursor_},jspb.BinaryReader.prototype.getCursor=function(){return this.decoder_.getCursor()},jspb.BinaryReader.prototype.getBuffer=function(){return this.decoder_.getBuffer()},jspb.BinaryReader.prototype.getFieldNumber=function(){return this.nextField_},jspb.BinaryReader.prototype.getWireType=function(){return this.nextWireType_},jspb.BinaryReader.prototype.isDelimited=function(){return this.nextWireType_==jspb.BinaryConstants.WireType.DELIMITED},jspb.BinaryReader.prototype.isEndGroup=function(){return this.nextWireType_==jspb.BinaryConstants.WireType.END_GROUP},jspb.BinaryReader.prototype.getError=function(){return this.error_||this.decoder_.getError()},jspb.BinaryReader.prototype.setBlock=function(e,t,o){this.decoder_.setBlock(e,t,o),this.nextField_=jspb.BinaryConstants.INVALID_FIELD_NUMBER,this.nextWireType_=jspb.BinaryConstants.WireType.INVALID},jspb.BinaryReader.prototype.reset=function(){this.decoder_.reset(),this.nextField_=jspb.BinaryConstants.INVALID_FIELD_NUMBER,this.nextWireType_=jspb.BinaryConstants.WireType.INVALID},jspb.BinaryReader.prototype.advance=function(e){this.decoder_.advance(e)},jspb.BinaryReader.prototype.nextField=function(){if(this.decoder_.atEnd())return!1;if(this.getError())return goog.asserts.fail("Decoder hit an error"),!1;this.fieldCursor_=this.decoder_.getCursor();var e=this.decoder_.readUnsignedVarint32(),t=e>>>3;return(e&=7)!=jspb.BinaryConstants.WireType.VARINT&&e!=jspb.BinaryConstants.WireType.FIXED32&&e!=jspb.BinaryConstants.WireType.FIXED64&&e!=jspb.BinaryConstants.WireType.DELIMITED&&e!=jspb.BinaryConstants.WireType.START_GROUP&&e!=jspb.BinaryConstants.WireType.END_GROUP?(goog.asserts.fail("Invalid wire type: %s (at position %s)",e,this.fieldCursor_),this.error_=!0,!1):(this.nextField_=t,this.nextWireType_=e,!0)},jspb.BinaryReader.prototype.unskipHeader=function(){this.decoder_.unskipVarint(this.nextField_<<3|this.nextWireType_)},jspb.BinaryReader.prototype.skipMatchingFields=function(){var e=this.nextField_;for(this.unskipHeader();this.nextField()&&this.getFieldNumber()==e;)this.skipField();this.decoder_.atEnd()||this.unskipHeader()},jspb.BinaryReader.prototype.skipVarintField=function(){this.nextWireType_!=jspb.BinaryConstants.WireType.VARINT?(goog.asserts.fail("Invalid wire type for skipVarintField"),this.skipField()):this.decoder_.skipVarint()},jspb.BinaryReader.prototype.skipDelimitedField=function(){if(this.nextWireType_!=jspb.BinaryConstants.WireType.DELIMITED)goog.asserts.fail("Invalid wire type for skipDelimitedField"),this.skipField();else{var e=this.decoder_.readUnsignedVarint32();this.decoder_.advance(e)}},jspb.BinaryReader.prototype.skipFixed32Field=function(){this.nextWireType_!=jspb.BinaryConstants.WireType.FIXED32?(goog.asserts.fail("Invalid wire type for skipFixed32Field"),this.skipField()):this.decoder_.advance(4)},jspb.BinaryReader.prototype.skipFixed64Field=function(){this.nextWireType_!=jspb.BinaryConstants.WireType.FIXED64?(goog.asserts.fail("Invalid wire type for skipFixed64Field"),this.skipField()):this.decoder_.advance(8)},jspb.BinaryReader.prototype.skipGroup=function(){for(var e=this.nextField_;;){if(!this.nextField()){goog.asserts.fail("Unmatched start-group tag: stream EOF"),this.error_=!0;break}if(this.nextWireType_==jspb.BinaryConstants.WireType.END_GROUP){this.nextField_!=e&&(goog.asserts.fail("Unmatched end-group tag"),this.error_=!0);break}this.skipField()}},jspb.BinaryReader.prototype.skipField=function(){switch(this.nextWireType_){case jspb.BinaryConstants.WireType.VARINT:this.skipVarintField();break;case jspb.BinaryConstants.WireType.FIXED64:this.skipFixed64Field();break;case jspb.BinaryConstants.WireType.DELIMITED:this.skipDelimitedField();break;case jspb.BinaryConstants.WireType.FIXED32:this.skipFixed32Field();break;case jspb.BinaryConstants.WireType.START_GROUP:this.skipGroup();break;default:goog.asserts.fail("Invalid wire encoding for field.")}},jspb.BinaryReader.prototype.registerReadCallback=function(e,t){null===this.readCallbacks_&&(this.readCallbacks_={}),goog.asserts.assert(!this.readCallbacks_[e]),this.readCallbacks_[e]=t},jspb.BinaryReader.prototype.runReadCallback=function(e){return goog.asserts.assert(null!==this.readCallbacks_),e=this.readCallbacks_[e],goog.asserts.assert(e),e(this)},jspb.BinaryReader.prototype.readAny=function(e){this.nextWireType_=jspb.BinaryConstants.FieldTypeToWireType(e);var t=jspb.BinaryConstants.FieldType;switch(e){case t.DOUBLE:return this.readDouble();case t.FLOAT:return this.readFloat();case t.INT64:return this.readInt64();case t.UINT64:return this.readUint64();case t.INT32:return this.readInt32();case t.FIXED64:return this.readFixed64();case t.FIXED32:return this.readFixed32();case t.BOOL:return this.readBool();case t.STRING:return this.readString();case t.GROUP:goog.asserts.fail("Group field type not supported in readAny()");case t.MESSAGE:goog.asserts.fail("Message field type not supported in readAny()");case t.BYTES:return this.readBytes();case t.UINT32:return this.readUint32();case t.ENUM:return this.readEnum();case t.SFIXED32:return this.readSfixed32();case t.SFIXED64:return this.readSfixed64();case t.SINT32:return this.readSint32();case t.SINT64:return this.readSint64();case t.FHASH64:return this.readFixedHash64();case t.VHASH64:return this.readVarintHash64();default:goog.asserts.fail("Invalid field type in readAny()")}return 0},jspb.BinaryReader.prototype.readMessage=function(e,t){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.DELIMITED);var o=this.decoder_.getEnd(),r=this.decoder_.readUnsignedVarint32();r=this.decoder_.getCursor()+r,this.decoder_.setEnd(r),t(e,this),this.decoder_.setCursor(r),this.decoder_.setEnd(o)},jspb.BinaryReader.prototype.readGroup=function(e,t,o){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.START_GROUP),goog.asserts.assert(this.nextField_==e),o(t,this),this.error_||this.nextWireType_==jspb.BinaryConstants.WireType.END_GROUP||(goog.asserts.fail("Group submessage did not end with an END_GROUP tag"),this.error_=!0)},jspb.BinaryReader.prototype.getFieldDecoder=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.DELIMITED);var e=this.decoder_.readUnsignedVarint32(),t=this.decoder_.getCursor(),o=t+e;return e=jspb.BinaryDecoder.alloc(this.decoder_.getBuffer(),t,e),this.decoder_.setCursor(o),e},jspb.BinaryReader.prototype.readInt32=function(){return goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT),this.decoder_.readSignedVarint32()},jspb.BinaryReader.prototype.readInt32String=function(){return goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT),this.decoder_.readSignedVarint32String()},jspb.BinaryReader.prototype.readInt64=function(){return goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT),this.decoder_.readSignedVarint64()},jspb.BinaryReader.prototype.readInt64String=function(){return goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT),this.decoder_.readSignedVarint64String()},jspb.BinaryReader.prototype.readUint32=function(){return goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT),this.decoder_.readUnsignedVarint32()},jspb.BinaryReader.prototype.readUint32String=function(){return goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT),this.decoder_.readUnsignedVarint32String()},jspb.BinaryReader.prototype.readUint64=function(){return goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT),this.decoder_.readUnsignedVarint64()},jspb.BinaryReader.prototype.readUint64String=function(){return goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT),this.decoder_.readUnsignedVarint64String()},jspb.BinaryReader.prototype.readSint32=function(){return goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT),this.decoder_.readZigzagVarint32()},jspb.BinaryReader.prototype.readSint64=function(){return goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT),this.decoder_.readZigzagVarint64()},jspb.BinaryReader.prototype.readSint64String=function(){return goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT),this.decoder_.readZigzagVarint64String()},jspb.BinaryReader.prototype.readFixed32=function(){return goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.FIXED32),this.decoder_.readUint32()},jspb.BinaryReader.prototype.readFixed64=function(){return goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.FIXED64),this.decoder_.readUint64()},jspb.BinaryReader.prototype.readFixed64String=function(){return goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.FIXED64),this.decoder_.readUint64String()},jspb.BinaryReader.prototype.readSfixed32=function(){return goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.FIXED32),this.decoder_.readInt32()},jspb.BinaryReader.prototype.readSfixed32String=function(){return goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.FIXED32),this.decoder_.readInt32().toString()},jspb.BinaryReader.prototype.readSfixed64=function(){return goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.FIXED64),this.decoder_.readInt64()},jspb.BinaryReader.prototype.readSfixed64String=function(){return goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.FIXED64),this.decoder_.readInt64String()},jspb.BinaryReader.prototype.readFloat=function(){return goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.FIXED32),this.decoder_.readFloat()},jspb.BinaryReader.prototype.readDouble=function(){return goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.FIXED64),this.decoder_.readDouble()},jspb.BinaryReader.prototype.readBool=function(){return goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT),!!this.decoder_.readUnsignedVarint32()},jspb.BinaryReader.prototype.readEnum=function(){return goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT),this.decoder_.readSignedVarint64()},jspb.BinaryReader.prototype.readString=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.DELIMITED);var e=this.decoder_.readUnsignedVarint32();return this.decoder_.readString(e)},jspb.BinaryReader.prototype.readBytes=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.DELIMITED);var e=this.decoder_.readUnsignedVarint32();return this.decoder_.readBytes(e)},jspb.BinaryReader.prototype.readVarintHash64=function(){return goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT),this.decoder_.readVarintHash64()},jspb.BinaryReader.prototype.readSintHash64=function(){return goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT),this.decoder_.readZigzagVarintHash64()},jspb.BinaryReader.prototype.readSplitVarint64=function(e){return goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT),this.decoder_.readSplitVarint64(e)},jspb.BinaryReader.prototype.readSplitZigzagVarint64=function(e){return goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT),this.decoder_.readSplitVarint64((function(t,o){return jspb.utils.fromZigzag64(t,o,e)}))},jspb.BinaryReader.prototype.readFixedHash64=function(){return goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.FIXED64),this.decoder_.readFixedHash64()},jspb.BinaryReader.prototype.readSplitFixed64=function(e){return goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.FIXED64),this.decoder_.readSplitFixed64(e)},jspb.BinaryReader.prototype.readPackedField_=function(e){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.DELIMITED);var t=this.decoder_.readUnsignedVarint32();t=this.decoder_.getCursor()+t;for(var o=[];this.decoder_.getCursor()<t;)o.push(e.call(this.decoder_));return o},jspb.BinaryReader.prototype.readPackedInt32=function(){return this.readPackedField_(this.decoder_.readSignedVarint32)},jspb.BinaryReader.prototype.readPackedInt32String=function(){return this.readPackedField_(this.decoder_.readSignedVarint32String)},jspb.BinaryReader.prototype.readPackedInt64=function(){return this.readPackedField_(this.decoder_.readSignedVarint64)},jspb.BinaryReader.prototype.readPackedInt64String=function(){return this.readPackedField_(this.decoder_.readSignedVarint64String)},jspb.BinaryReader.prototype.readPackedUint32=function(){return this.readPackedField_(this.decoder_.readUnsignedVarint32)},jspb.BinaryReader.prototype.readPackedUint32String=function(){return this.readPackedField_(this.decoder_.readUnsignedVarint32String)},jspb.BinaryReader.prototype.readPackedUint64=function(){return this.readPackedField_(this.decoder_.readUnsignedVarint64)},jspb.BinaryReader.prototype.readPackedUint64String=function(){return this.readPackedField_(this.decoder_.readUnsignedVarint64String)},jspb.BinaryReader.prototype.readPackedSint32=function(){return this.readPackedField_(this.decoder_.readZigzagVarint32)},jspb.BinaryReader.prototype.readPackedSint64=function(){return this.readPackedField_(this.decoder_.readZigzagVarint64)},jspb.BinaryReader.prototype.readPackedSint64String=function(){return this.readPackedField_(this.decoder_.readZigzagVarint64String)},jspb.BinaryReader.prototype.readPackedFixed32=function(){return this.readPackedField_(this.decoder_.readUint32)},jspb.BinaryReader.prototype.readPackedFixed64=function(){return this.readPackedField_(this.decoder_.readUint64)},jspb.BinaryReader.prototype.readPackedFixed64String=function(){return this.readPackedField_(this.decoder_.readUint64String)},jspb.BinaryReader.prototype.readPackedSfixed32=function(){return this.readPackedField_(this.decoder_.readInt32)},jspb.BinaryReader.prototype.readPackedSfixed64=function(){return this.readPackedField_(this.decoder_.readInt64)},jspb.BinaryReader.prototype.readPackedSfixed64String=function(){return this.readPackedField_(this.decoder_.readInt64String)},jspb.BinaryReader.prototype.readPackedFloat=function(){return this.readPackedField_(this.decoder_.readFloat)},jspb.BinaryReader.prototype.readPackedDouble=function(){return this.readPackedField_(this.decoder_.readDouble)},jspb.BinaryReader.prototype.readPackedBool=function(){return this.readPackedField_(this.decoder_.readBool)},jspb.BinaryReader.prototype.readPackedEnum=function(){return this.readPackedField_(this.decoder_.readEnum)},jspb.BinaryReader.prototype.readPackedVarintHash64=function(){return this.readPackedField_(this.decoder_.readVarintHash64)},jspb.BinaryReader.prototype.readPackedFixedHash64=function(){return this.readPackedField_(this.decoder_.readFixedHash64)},jspb.BinaryEncoder=function(){this.buffer_=[]},jspb.BinaryEncoder.prototype.length=function(){return this.buffer_.length},jspb.BinaryEncoder.prototype.end=function(){var e=this.buffer_;return this.buffer_=[],e},jspb.BinaryEncoder.prototype.writeSplitVarint64=function(e,t){for(goog.asserts.assert(e==Math.floor(e)),goog.asserts.assert(t==Math.floor(t)),goog.asserts.assert(0<=e&&e<jspb.BinaryConstants.TWO_TO_32),goog.asserts.assert(0<=t&&t<jspb.BinaryConstants.TWO_TO_32);0<t||127<e;)this.buffer_.push(127&e|128),e=(e>>>7|t<<25)>>>0,t>>>=7;this.buffer_.push(e)},jspb.BinaryEncoder.prototype.writeSplitFixed64=function(e,t){goog.asserts.assert(e==Math.floor(e)),goog.asserts.assert(t==Math.floor(t)),goog.asserts.assert(0<=e&&e<jspb.BinaryConstants.TWO_TO_32),goog.asserts.assert(0<=t&&t<jspb.BinaryConstants.TWO_TO_32),this.writeUint32(e),this.writeUint32(t)},jspb.BinaryEncoder.prototype.writeUnsignedVarint32=function(e){for(goog.asserts.assert(e==Math.floor(e)),goog.asserts.assert(0<=e&&e<jspb.BinaryConstants.TWO_TO_32);127<e;)this.buffer_.push(127&e|128),e>>>=7;this.buffer_.push(e)},jspb.BinaryEncoder.prototype.writeSignedVarint32=function(e){if(goog.asserts.assert(e==Math.floor(e)),goog.asserts.assert(e>=-jspb.BinaryConstants.TWO_TO_31&&e<jspb.BinaryConstants.TWO_TO_31),0<=e)this.writeUnsignedVarint32(e);else{for(var t=0;9>t;t++)this.buffer_.push(127&e|128),e>>=7;this.buffer_.push(1)}},jspb.BinaryEncoder.prototype.writeUnsignedVarint64=function(e){goog.asserts.assert(e==Math.floor(e)),goog.asserts.assert(0<=e&&e<jspb.BinaryConstants.TWO_TO_64),jspb.utils.splitInt64(e),this.writeSplitVarint64(jspb.utils.split64Low,jspb.utils.split64High)},jspb.BinaryEncoder.prototype.writeSignedVarint64=function(e){goog.asserts.assert(e==Math.floor(e)),goog.asserts.assert(e>=-jspb.BinaryConstants.TWO_TO_63&&e<jspb.BinaryConstants.TWO_TO_63),jspb.utils.splitInt64(e),this.writeSplitVarint64(jspb.utils.split64Low,jspb.utils.split64High)},jspb.BinaryEncoder.prototype.writeZigzagVarint32=function(e){goog.asserts.assert(e==Math.floor(e)),goog.asserts.assert(e>=-jspb.BinaryConstants.TWO_TO_31&&e<jspb.BinaryConstants.TWO_TO_31),this.writeUnsignedVarint32((e<<1^e>>31)>>>0)},jspb.BinaryEncoder.prototype.writeZigzagVarint64=function(e){goog.asserts.assert(e==Math.floor(e)),goog.asserts.assert(e>=-jspb.BinaryConstants.TWO_TO_63&&e<jspb.BinaryConstants.TWO_TO_63),jspb.utils.splitZigzag64(e),this.writeSplitVarint64(jspb.utils.split64Low,jspb.utils.split64High)},jspb.BinaryEncoder.prototype.writeZigzagVarint64String=function(e){this.writeZigzagVarintHash64(jspb.utils.decimalStringToHash64(e))},jspb.BinaryEncoder.prototype.writeZigzagVarintHash64=function(e){var t=this;jspb.utils.splitHash64(e),jspb.utils.toZigzag64(jspb.utils.split64Low,jspb.utils.split64High,(function(e,o){t.writeSplitVarint64(e>>>0,o>>>0)}))},jspb.BinaryEncoder.prototype.writeUint8=function(e){goog.asserts.assert(e==Math.floor(e)),goog.asserts.assert(0<=e&&256>e),this.buffer_.push(e>>>0&255)},jspb.BinaryEncoder.prototype.writeUint16=function(e){goog.asserts.assert(e==Math.floor(e)),goog.asserts.assert(0<=e&&65536>e),this.buffer_.push(e>>>0&255),this.buffer_.push(e>>>8&255)},jspb.BinaryEncoder.prototype.writeUint32=function(e){goog.asserts.assert(e==Math.floor(e)),goog.asserts.assert(0<=e&&e<jspb.BinaryConstants.TWO_TO_32),this.buffer_.push(e>>>0&255),this.buffer_.push(e>>>8&255),this.buffer_.push(e>>>16&255),this.buffer_.push(e>>>24&255)},jspb.BinaryEncoder.prototype.writeUint64=function(e){goog.asserts.assert(e==Math.floor(e)),goog.asserts.assert(0<=e&&e<jspb.BinaryConstants.TWO_TO_64),jspb.utils.splitUint64(e),this.writeUint32(jspb.utils.split64Low),this.writeUint32(jspb.utils.split64High)},jspb.BinaryEncoder.prototype.writeInt8=function(e){goog.asserts.assert(e==Math.floor(e)),goog.asserts.assert(-128<=e&&128>e),this.buffer_.push(e>>>0&255)},jspb.BinaryEncoder.prototype.writeInt16=function(e){goog.asserts.assert(e==Math.floor(e)),goog.asserts.assert(-32768<=e&&32768>e),this.buffer_.push(e>>>0&255),this.buffer_.push(e>>>8&255)},jspb.BinaryEncoder.prototype.writeInt32=function(e){goog.asserts.assert(e==Math.floor(e)),goog.asserts.assert(e>=-jspb.BinaryConstants.TWO_TO_31&&e<jspb.BinaryConstants.TWO_TO_31),this.buffer_.push(e>>>0&255),this.buffer_.push(e>>>8&255),this.buffer_.push(e>>>16&255),this.buffer_.push(e>>>24&255)},jspb.BinaryEncoder.prototype.writeInt64=function(e){goog.asserts.assert(e==Math.floor(e)),goog.asserts.assert(e>=-jspb.BinaryConstants.TWO_TO_63&&e<jspb.BinaryConstants.TWO_TO_63),jspb.utils.splitInt64(e),this.writeSplitFixed64(jspb.utils.split64Low,jspb.utils.split64High)},jspb.BinaryEncoder.prototype.writeInt64String=function(e){goog.asserts.assert(e==Math.floor(e)),goog.asserts.assert(+e>=-jspb.BinaryConstants.TWO_TO_63&&+e<jspb.BinaryConstants.TWO_TO_63),jspb.utils.splitHash64(jspb.utils.decimalStringToHash64(e)),this.writeSplitFixed64(jspb.utils.split64Low,jspb.utils.split64High)},jspb.BinaryEncoder.prototype.writeFloat=function(e){goog.asserts.assert(1/0===e||-1/0===e||isNaN(e)||e>=-jspb.BinaryConstants.FLOAT32_MAX&&e<=jspb.BinaryConstants.FLOAT32_MAX),jspb.utils.splitFloat32(e),this.writeUint32(jspb.utils.split64Low)},jspb.BinaryEncoder.prototype.writeDouble=function(e){goog.asserts.assert(1/0===e||-1/0===e||isNaN(e)||e>=-jspb.BinaryConstants.FLOAT64_MAX&&e<=jspb.BinaryConstants.FLOAT64_MAX),jspb.utils.splitFloat64(e),this.writeUint32(jspb.utils.split64Low),this.writeUint32(jspb.utils.split64High)},jspb.BinaryEncoder.prototype.writeBool=function(e){goog.asserts.assert("boolean"==typeof e||"number"==typeof e),this.buffer_.push(e?1:0)},jspb.BinaryEncoder.prototype.writeEnum=function(e){goog.asserts.assert(e==Math.floor(e)),goog.asserts.assert(e>=-jspb.BinaryConstants.TWO_TO_31&&e<jspb.BinaryConstants.TWO_TO_31),this.writeSignedVarint32(e)},jspb.BinaryEncoder.prototype.writeBytes=function(e){this.buffer_.push.apply(this.buffer_,e)},jspb.BinaryEncoder.prototype.writeVarintHash64=function(e){jspb.utils.splitHash64(e),this.writeSplitVarint64(jspb.utils.split64Low,jspb.utils.split64High)},jspb.BinaryEncoder.prototype.writeFixedHash64=function(e){jspb.utils.splitHash64(e),this.writeUint32(jspb.utils.split64Low),this.writeUint32(jspb.utils.split64High)},jspb.BinaryEncoder.prototype.writeString=function(e){for(var t=this.buffer_.length,o=0;o<e.length;o++){var r=e.charCodeAt(o);if(128>r)this.buffer_.push(r);else if(2048>r)this.buffer_.push(r>>6|192),this.buffer_.push(63&r|128);else if(65536>r)if(55296<=r&&56319>=r&&o+1<e.length){var n=e.charCodeAt(o+1);56320<=n&&57343>=n&&(r=1024*(r-55296)+n-56320+65536,this.buffer_.push(r>>18|240),this.buffer_.push(r>>12&63|128),this.buffer_.push(r>>6&63|128),this.buffer_.push(63&r|128),o++)}else this.buffer_.push(r>>12|224),this.buffer_.push(r>>6&63|128),this.buffer_.push(63&r|128)}return this.buffer_.length-t},jspb.arith={},jspb.arith.UInt64=function(e,t){this.lo=e,this.hi=t},jspb.arith.UInt64.prototype.cmp=function(e){return this.hi<e.hi||this.hi==e.hi&&this.lo<e.lo?-1:this.hi==e.hi&&this.lo==e.lo?0:1},jspb.arith.UInt64.prototype.rightShift=function(){return new jspb.arith.UInt64((this.lo>>>1|(1&this.hi)<<31)>>>0,this.hi>>>1>>>0)},jspb.arith.UInt64.prototype.leftShift=function(){return new jspb.arith.UInt64(this.lo<<1>>>0,(this.hi<<1|this.lo>>>31)>>>0)},jspb.arith.UInt64.prototype.msb=function(){return!!(2147483648&this.hi)},jspb.arith.UInt64.prototype.lsb=function(){return!!(1&this.lo)},jspb.arith.UInt64.prototype.zero=function(){return 0==this.lo&&0==this.hi},jspb.arith.UInt64.prototype.add=function(e){return new jspb.arith.UInt64((this.lo+e.lo&4294967295)>>>0>>>0,((this.hi+e.hi&4294967295)>>>0)+(4294967296<=this.lo+e.lo?1:0)>>>0)},jspb.arith.UInt64.prototype.sub=function(e){return new jspb.arith.UInt64((this.lo-e.lo&4294967295)>>>0>>>0,((this.hi-e.hi&4294967295)>>>0)-(0>this.lo-e.lo?1:0)>>>0)},jspb.arith.UInt64.mul32x32=function(e,t){var o=65535&e,r=65535&t,n=t>>>16;for(t=o*r+65536*(o*n&65535)+65536*((e>>>=16)*r&65535),o=e*n+(o*n>>>16)+(e*r>>>16);4294967296<=t;)t-=4294967296,o+=1;return new jspb.arith.UInt64(t>>>0,o>>>0)},jspb.arith.UInt64.prototype.mul=function(e){var t=jspb.arith.UInt64.mul32x32(this.lo,e);return(e=jspb.arith.UInt64.mul32x32(this.hi,e)).hi=e.lo,e.lo=0,t.add(e)},jspb.arith.UInt64.prototype.div=function(e){if(0==e)return[];var t=new jspb.arith.UInt64(0,0),o=new jspb.arith.UInt64(this.lo,this.hi);e=new jspb.arith.UInt64(e,0);for(var r=new jspb.arith.UInt64(1,0);!e.msb();)e=e.leftShift(),r=r.leftShift();for(;!r.zero();)0>=e.cmp(o)&&(t=t.add(r),o=o.sub(e)),e=e.rightShift(),r=r.rightShift();return[t,o]},jspb.arith.UInt64.prototype.toString=function(){for(var e="",t=this;!t.zero();){var o=(t=t.div(10))[0];e=t[1].lo+e,t=o}return""==e&&(e="0"),e},jspb.arith.UInt64.fromString=function(e){for(var t=new jspb.arith.UInt64(0,0),o=new jspb.arith.UInt64(0,0),r=0;r<e.length;r++){if("0">e[r]||"9"<e[r])return null;var n=parseInt(e[r],10);o.lo=n,t=t.mul(10).add(o)}return t},jspb.arith.UInt64.prototype.clone=function(){return new jspb.arith.UInt64(this.lo,this.hi)},jspb.arith.Int64=function(e,t){this.lo=e,this.hi=t},jspb.arith.Int64.prototype.add=function(e){return new jspb.arith.Int64((this.lo+e.lo&4294967295)>>>0>>>0,((this.hi+e.hi&4294967295)>>>0)+(4294967296<=this.lo+e.lo?1:0)>>>0)},jspb.arith.Int64.prototype.sub=function(e){return new jspb.arith.Int64((this.lo-e.lo&4294967295)>>>0>>>0,((this.hi-e.hi&4294967295)>>>0)-(0>this.lo-e.lo?1:0)>>>0)},jspb.arith.Int64.prototype.clone=function(){return new jspb.arith.Int64(this.lo,this.hi)},jspb.arith.Int64.prototype.toString=function(){var e=0!=(2147483648&this.hi),t=new jspb.arith.UInt64(this.lo,this.hi);return e&&(t=new jspb.arith.UInt64(0,0).sub(t)),(e?"-":"")+t.toString()},jspb.arith.Int64.fromString=function(e){var t=0<e.length&&"-"==e[0];return t&&(e=e.substring(1)),null===(e=jspb.arith.UInt64.fromString(e))?null:(t&&(e=new jspb.arith.UInt64(0,0).sub(e)),new jspb.arith.Int64(e.lo,e.hi))},jspb.BinaryWriter=function(){this.blocks_=[],this.totalLength_=0,this.encoder_=new jspb.BinaryEncoder,this.bookmarks_=[]},jspb.BinaryWriter.prototype.appendUint8Array_=function(e){var t=this.encoder_.end();this.blocks_.push(t),this.blocks_.push(e),this.totalLength_+=t.length+e.length},jspb.BinaryWriter.prototype.beginDelimited_=function(e){return this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.DELIMITED),e=this.encoder_.end(),this.blocks_.push(e),this.totalLength_+=e.length,e.push(this.totalLength_),e},jspb.BinaryWriter.prototype.endDelimited_=function(e){var t=e.pop();for(t=this.totalLength_+this.encoder_.length()-t,goog.asserts.assert(0<=t);127<t;)e.push(127&t|128),t>>>=7,this.totalLength_++;e.push(t),this.totalLength_++},jspb.BinaryWriter.prototype.writeSerializedMessage=function(e,t,o){this.appendUint8Array_(e.subarray(t,o))},jspb.BinaryWriter.prototype.maybeWriteSerializedMessage=function(e,t,o){null!=e&&null!=t&&null!=o&&this.writeSerializedMessage(e,t,o)},jspb.BinaryWriter.prototype.reset=function(){this.blocks_=[],this.encoder_.end(),this.totalLength_=0,this.bookmarks_=[]},jspb.BinaryWriter.prototype.getResultBuffer=function(){goog.asserts.assert(0==this.bookmarks_.length);for(var e=new Uint8Array(this.totalLength_+this.encoder_.length()),t=this.blocks_,o=t.length,r=0,n=0;n<o;n++){var s=t[n];e.set(s,r),r+=s.length}return t=this.encoder_.end(),e.set(t,r),r+=t.length,goog.asserts.assert(r==e.length),this.blocks_=[e],e},jspb.BinaryWriter.prototype.getResultBase64String=function(e){return goog.crypt.base64.encodeByteArray(this.getResultBuffer(),e)},jspb.BinaryWriter.prototype.beginSubMessage=function(e){this.bookmarks_.push(this.beginDelimited_(e))},jspb.BinaryWriter.prototype.endSubMessage=function(){goog.asserts.assert(0<=this.bookmarks_.length),this.endDelimited_(this.bookmarks_.pop())},jspb.BinaryWriter.prototype.writeFieldHeader_=function(e,t){goog.asserts.assert(1<=e&&e==Math.floor(e)),this.encoder_.writeUnsignedVarint32(8*e+t)},jspb.BinaryWriter.prototype.writeAny=function(e,t,o){var r=jspb.BinaryConstants.FieldType;switch(e){case r.DOUBLE:this.writeDouble(t,o);break;case r.FLOAT:this.writeFloat(t,o);break;case r.INT64:this.writeInt64(t,o);break;case r.UINT64:this.writeUint64(t,o);break;case r.INT32:this.writeInt32(t,o);break;case r.FIXED64:this.writeFixed64(t,o);break;case r.FIXED32:this.writeFixed32(t,o);break;case r.BOOL:this.writeBool(t,o);break;case r.STRING:this.writeString(t,o);break;case r.GROUP:goog.asserts.fail("Group field type not supported in writeAny()");break;case r.MESSAGE:goog.asserts.fail("Message field type not supported in writeAny()");break;case r.BYTES:this.writeBytes(t,o);break;case r.UINT32:this.writeUint32(t,o);break;case r.ENUM:this.writeEnum(t,o);break;case r.SFIXED32:this.writeSfixed32(t,o);break;case r.SFIXED64:this.writeSfixed64(t,o);break;case r.SINT32:this.writeSint32(t,o);break;case r.SINT64:this.writeSint64(t,o);break;case r.FHASH64:this.writeFixedHash64(t,o);break;case r.VHASH64:this.writeVarintHash64(t,o);break;default:goog.asserts.fail("Invalid field type in writeAny()")}},jspb.BinaryWriter.prototype.writeUnsignedVarint32_=function(e,t){null!=t&&(this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.VARINT),this.encoder_.writeUnsignedVarint32(t))},jspb.BinaryWriter.prototype.writeSignedVarint32_=function(e,t){null!=t&&(this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.VARINT),this.encoder_.writeSignedVarint32(t))},jspb.BinaryWriter.prototype.writeUnsignedVarint64_=function(e,t){null!=t&&(this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.VARINT),this.encoder_.writeUnsignedVarint64(t))},jspb.BinaryWriter.prototype.writeSignedVarint64_=function(e,t){null!=t&&(this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.VARINT),this.encoder_.writeSignedVarint64(t))},jspb.BinaryWriter.prototype.writeZigzagVarint32_=function(e,t){null!=t&&(this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.VARINT),this.encoder_.writeZigzagVarint32(t))},jspb.BinaryWriter.prototype.writeZigzagVarint64_=function(e,t){null!=t&&(this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.VARINT),this.encoder_.writeZigzagVarint64(t))},jspb.BinaryWriter.prototype.writeZigzagVarint64String_=function(e,t){null!=t&&(this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.VARINT),this.encoder_.writeZigzagVarint64String(t))},jspb.BinaryWriter.prototype.writeZigzagVarintHash64_=function(e,t){null!=t&&(this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.VARINT),this.encoder_.writeZigzagVarintHash64(t))},jspb.BinaryWriter.prototype.writeInt32=function(e,t){null!=t&&(goog.asserts.assert(t>=-jspb.BinaryConstants.TWO_TO_31&&t<jspb.BinaryConstants.TWO_TO_31),this.writeSignedVarint32_(e,t))},jspb.BinaryWriter.prototype.writeInt32String=function(e,t){null!=t&&(t=parseInt(t,10),goog.asserts.assert(t>=-jspb.BinaryConstants.TWO_TO_31&&t<jspb.BinaryConstants.TWO_TO_31),this.writeSignedVarint32_(e,t))},jspb.BinaryWriter.prototype.writeInt64=function(e,t){null!=t&&(goog.asserts.assert(t>=-jspb.BinaryConstants.TWO_TO_63&&t<jspb.BinaryConstants.TWO_TO_63),this.writeSignedVarint64_(e,t))},jspb.BinaryWriter.prototype.writeInt64String=function(e,t){null!=t&&(t=jspb.arith.Int64.fromString(t),this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.VARINT),this.encoder_.writeSplitVarint64(t.lo,t.hi))},jspb.BinaryWriter.prototype.writeUint32=function(e,t){null!=t&&(goog.asserts.assert(0<=t&&t<jspb.BinaryConstants.TWO_TO_32),this.writeUnsignedVarint32_(e,t))},jspb.BinaryWriter.prototype.writeUint32String=function(e,t){null!=t&&(t=parseInt(t,10),goog.asserts.assert(0<=t&&t<jspb.BinaryConstants.TWO_TO_32),this.writeUnsignedVarint32_(e,t))},jspb.BinaryWriter.prototype.writeUint64=function(e,t){null!=t&&(goog.asserts.assert(0<=t&&t<jspb.BinaryConstants.TWO_TO_64),this.writeUnsignedVarint64_(e,t))},jspb.BinaryWriter.prototype.writeUint64String=function(e,t){null!=t&&(t=jspb.arith.UInt64.fromString(t),this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.VARINT),this.encoder_.writeSplitVarint64(t.lo,t.hi))},jspb.BinaryWriter.prototype.writeSint32=function(e,t){null!=t&&(goog.asserts.assert(t>=-jspb.BinaryConstants.TWO_TO_31&&t<jspb.BinaryConstants.TWO_TO_31),this.writeZigzagVarint32_(e,t))},jspb.BinaryWriter.prototype.writeSint64=function(e,t){null!=t&&(goog.asserts.assert(t>=-jspb.BinaryConstants.TWO_TO_63&&t<jspb.BinaryConstants.TWO_TO_63),this.writeZigzagVarint64_(e,t))},jspb.BinaryWriter.prototype.writeSintHash64=function(e,t){null!=t&&this.writeZigzagVarintHash64_(e,t)},jspb.BinaryWriter.prototype.writeSint64String=function(e,t){null!=t&&this.writeZigzagVarint64String_(e,t)},jspb.BinaryWriter.prototype.writeFixed32=function(e,t){null!=t&&(goog.asserts.assert(0<=t&&t<jspb.BinaryConstants.TWO_TO_32),this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.FIXED32),this.encoder_.writeUint32(t))},jspb.BinaryWriter.prototype.writeFixed64=function(e,t){null!=t&&(goog.asserts.assert(0<=t&&t<jspb.BinaryConstants.TWO_TO_64),this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.FIXED64),this.encoder_.writeUint64(t))},jspb.BinaryWriter.prototype.writeFixed64String=function(e,t){null!=t&&(t=jspb.arith.UInt64.fromString(t),this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.FIXED64),this.encoder_.writeSplitFixed64(t.lo,t.hi))},jspb.BinaryWriter.prototype.writeSfixed32=function(e,t){null!=t&&(goog.asserts.assert(t>=-jspb.BinaryConstants.TWO_TO_31&&t<jspb.BinaryConstants.TWO_TO_31),this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.FIXED32),this.encoder_.writeInt32(t))},jspb.BinaryWriter.prototype.writeSfixed64=function(e,t){null!=t&&(goog.asserts.assert(t>=-jspb.BinaryConstants.TWO_TO_63&&t<jspb.BinaryConstants.TWO_TO_63),this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.FIXED64),this.encoder_.writeInt64(t))},jspb.BinaryWriter.prototype.writeSfixed64String=function(e,t){null!=t&&(t=jspb.arith.Int64.fromString(t),this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.FIXED64),this.encoder_.writeSplitFixed64(t.lo,t.hi))},jspb.BinaryWriter.prototype.writeFloat=function(e,t){null!=t&&(this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.FIXED32),this.encoder_.writeFloat(t))},jspb.BinaryWriter.prototype.writeDouble=function(e,t){null!=t&&(this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.FIXED64),this.encoder_.writeDouble(t))},jspb.BinaryWriter.prototype.writeBool=function(e,t){null!=t&&(goog.asserts.assert("boolean"==typeof t||"number"==typeof t),this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.VARINT),this.encoder_.writeBool(t))},jspb.BinaryWriter.prototype.writeEnum=function(e,t){null!=t&&(goog.asserts.assert(t>=-jspb.BinaryConstants.TWO_TO_31&&t<jspb.BinaryConstants.TWO_TO_31),this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.VARINT),this.encoder_.writeSignedVarint32(t))},jspb.BinaryWriter.prototype.writeString=function(e,t){null!=t&&(e=this.beginDelimited_(e),this.encoder_.writeString(t),this.endDelimited_(e))},jspb.BinaryWriter.prototype.writeBytes=function(e,t){null!=t&&(t=jspb.utils.byteSourceToUint8Array(t),this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.DELIMITED),this.encoder_.writeUnsignedVarint32(t.length),this.appendUint8Array_(t))},jspb.BinaryWriter.prototype.writeMessage=function(e,t,o){null!=t&&(e=this.beginDelimited_(e),o(t,this),this.endDelimited_(e))},jspb.BinaryWriter.prototype.writeMessageSet=function(e,t,o){null!=t&&(this.writeFieldHeader_(1,jspb.BinaryConstants.WireType.START_GROUP),this.writeFieldHeader_(2,jspb.BinaryConstants.WireType.VARINT),this.encoder_.writeSignedVarint32(e),e=this.beginDelimited_(3),o(t,this),this.endDelimited_(e),this.writeFieldHeader_(1,jspb.BinaryConstants.WireType.END_GROUP))},jspb.BinaryWriter.prototype.writeGroup=function(e,t,o){null!=t&&(this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.START_GROUP),o(t,this),this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.END_GROUP))},jspb.BinaryWriter.prototype.writeFixedHash64=function(e,t){null!=t&&(goog.asserts.assert(8==t.length),this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.FIXED64),this.encoder_.writeFixedHash64(t))},jspb.BinaryWriter.prototype.writeVarintHash64=function(e,t){null!=t&&(goog.asserts.assert(8==t.length),this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.VARINT),this.encoder_.writeVarintHash64(t))},jspb.BinaryWriter.prototype.writeSplitFixed64=function(e,t,o){this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.FIXED64),this.encoder_.writeSplitFixed64(t,o)},jspb.BinaryWriter.prototype.writeSplitVarint64=function(e,t,o){this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.VARINT),this.encoder_.writeSplitVarint64(t,o)},jspb.BinaryWriter.prototype.writeSplitZigzagVarint64=function(e,t,o){this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.VARINT);var r=this.encoder_;jspb.utils.toZigzag64(t,o,(function(e,t){r.writeSplitVarint64(e>>>0,t>>>0)}))},jspb.BinaryWriter.prototype.writeRepeatedInt32=function(e,t){if(null!=t)for(var o=0;o<t.length;o++)this.writeSignedVarint32_(e,t[o])},jspb.BinaryWriter.prototype.writeRepeatedInt32String=function(e,t){if(null!=t)for(var o=0;o<t.length;o++)this.writeInt32String(e,t[o])},jspb.BinaryWriter.prototype.writeRepeatedInt64=function(e,t){if(null!=t)for(var o=0;o<t.length;o++)this.writeSignedVarint64_(e,t[o])},jspb.BinaryWriter.prototype.writeRepeatedSplitFixed64=function(e,t,o,r){if(null!=t)for(var n=0;n<t.length;n++)this.writeSplitFixed64(e,o(t[n]),r(t[n]))},jspb.BinaryWriter.prototype.writeRepeatedSplitVarint64=function(e,t,o,r){if(null!=t)for(var n=0;n<t.length;n++)this.writeSplitVarint64(e,o(t[n]),r(t[n]))},jspb.BinaryWriter.prototype.writeRepeatedSplitZigzagVarint64=function(e,t,o,r){if(null!=t)for(var n=0;n<t.length;n++)this.writeSplitZigzagVarint64(e,o(t[n]),r(t[n]))},jspb.BinaryWriter.prototype.writeRepeatedInt64String=function(e,t){if(null!=t)for(var o=0;o<t.length;o++)this.writeInt64String(e,t[o])},jspb.BinaryWriter.prototype.writeRepeatedUint32=function(e,t){if(null!=t)for(var o=0;o<t.length;o++)this.writeUnsignedVarint32_(e,t[o])},jspb.BinaryWriter.prototype.writeRepeatedUint32String=function(e,t){if(null!=t)for(var o=0;o<t.length;o++)this.writeUint32String(e,t[o])},jspb.BinaryWriter.prototype.writeRepeatedUint64=function(e,t){if(null!=t)for(var o=0;o<t.length;o++)this.writeUnsignedVarint64_(e,t[o])},jspb.BinaryWriter.prototype.writeRepeatedUint64String=function(e,t){if(null!=t)for(var o=0;o<t.length;o++)this.writeUint64String(e,t[o])},jspb.BinaryWriter.prototype.writeRepeatedSint32=function(e,t){if(null!=t)for(var o=0;o<t.length;o++)this.writeZigzagVarint32_(e,t[o])},jspb.BinaryWriter.prototype.writeRepeatedSint64=function(e,t){if(null!=t)for(var o=0;o<t.length;o++)this.writeZigzagVarint64_(e,t[o])},jspb.BinaryWriter.prototype.writeRepeatedSint64String=function(e,t){if(null!=t)for(var o=0;o<t.length;o++)this.writeZigzagVarint64String_(e,t[o])},jspb.BinaryWriter.prototype.writeRepeatedSintHash64=function(e,t){if(null!=t)for(var o=0;o<t.length;o++)this.writeZigzagVarintHash64_(e,t[o])},jspb.BinaryWriter.prototype.writeRepeatedFixed32=function(e,t){if(null!=t)for(var o=0;o<t.length;o++)this.writeFixed32(e,t[o])},jspb.BinaryWriter.prototype.writeRepeatedFixed64=function(e,t){if(null!=t)for(var o=0;o<t.length;o++)this.writeFixed64(e,t[o])},jspb.BinaryWriter.prototype.writeRepeatedFixed64String=function(e,t){if(null!=t)for(var o=0;o<t.length;o++)this.writeFixed64String(e,t[o])},jspb.BinaryWriter.prototype.writeRepeatedSfixed32=function(e,t){if(null!=t)for(var o=0;o<t.length;o++)this.writeSfixed32(e,t[o])},jspb.BinaryWriter.prototype.writeRepeatedSfixed64=function(e,t){if(null!=t)for(var o=0;o<t.length;o++)this.writeSfixed64(e,t[o])},jspb.BinaryWriter.prototype.writeRepeatedSfixed64String=function(e,t){if(null!=t)for(var o=0;o<t.length;o++)this.writeSfixed64String(e,t[o])},jspb.BinaryWriter.prototype.writeRepeatedFloat=function(e,t){if(null!=t)for(var o=0;o<t.length;o++)this.writeFloat(e,t[o])},jspb.BinaryWriter.prototype.writeRepeatedDouble=function(e,t){if(null!=t)for(var o=0;o<t.length;o++)this.writeDouble(e,t[o])},jspb.BinaryWriter.prototype.writeRepeatedBool=function(e,t){if(null!=t)for(var o=0;o<t.length;o++)this.writeBool(e,t[o])},jspb.BinaryWriter.prototype.writeRepeatedEnum=function(e,t){if(null!=t)for(var o=0;o<t.length;o++)this.writeEnum(e,t[o])},jspb.BinaryWriter.prototype.writeRepeatedString=function(e,t){if(null!=t)for(var o=0;o<t.length;o++)this.writeString(e,t[o])},jspb.BinaryWriter.prototype.writeRepeatedBytes=function(e,t){if(null!=t)for(var o=0;o<t.length;o++)this.writeBytes(e,t[o])},jspb.BinaryWriter.prototype.writeRepeatedMessage=function(e,t,o){if(null!=t)for(var r=0;r<t.length;r++){var n=this.beginDelimited_(e);o(t[r],this),this.endDelimited_(n)}},jspb.BinaryWriter.prototype.writeRepeatedGroup=function(e,t,o){if(null!=t)for(var r=0;r<t.length;r++)this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.START_GROUP),o(t[r],this),this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.END_GROUP)},jspb.BinaryWriter.prototype.writeRepeatedFixedHash64=function(e,t){if(null!=t)for(var o=0;o<t.length;o++)this.writeFixedHash64(e,t[o])},jspb.BinaryWriter.prototype.writeRepeatedVarintHash64=function(e,t){if(null!=t)for(var o=0;o<t.length;o++)this.writeVarintHash64(e,t[o])},jspb.BinaryWriter.prototype.writePackedInt32=function(e,t){if(null!=t&&t.length){e=this.beginDelimited_(e);for(var o=0;o<t.length;o++)this.encoder_.writeSignedVarint32(t[o]);this.endDelimited_(e)}},jspb.BinaryWriter.prototype.writePackedInt32String=function(e,t){if(null!=t&&t.length){e=this.beginDelimited_(e);for(var o=0;o<t.length;o++)this.encoder_.writeSignedVarint32(parseInt(t[o],10));this.endDelimited_(e)}},jspb.BinaryWriter.prototype.writePackedInt64=function(e,t){if(null!=t&&t.length){e=this.beginDelimited_(e);for(var o=0;o<t.length;o++)this.encoder_.writeSignedVarint64(t[o]);this.endDelimited_(e)}},jspb.BinaryWriter.prototype.writePackedSplitFixed64=function(e,t,o,r){if(null!=t){e=this.beginDelimited_(e);for(var n=0;n<t.length;n++)this.encoder_.writeSplitFixed64(o(t[n]),r(t[n]));this.endDelimited_(e)}},jspb.BinaryWriter.prototype.writePackedSplitVarint64=function(e,t,o,r){if(null!=t){e=this.beginDelimited_(e);for(var n=0;n<t.length;n++)this.encoder_.writeSplitVarint64(o(t[n]),r(t[n]));this.endDelimited_(e)}},jspb.BinaryWriter.prototype.writePackedSplitZigzagVarint64=function(e,t,o,r){if(null!=t){e=this.beginDelimited_(e);for(var n=this.encoder_,s=0;s<t.length;s++)jspb.utils.toZigzag64(o(t[s]),r(t[s]),(function(e,t){n.writeSplitVarint64(e>>>0,t>>>0)}));this.endDelimited_(e)}},jspb.BinaryWriter.prototype.writePackedInt64String=function(e,t){if(null!=t&&t.length){e=this.beginDelimited_(e);for(var o=0;o<t.length;o++){var r=jspb.arith.Int64.fromString(t[o]);this.encoder_.writeSplitVarint64(r.lo,r.hi)}this.endDelimited_(e)}},jspb.BinaryWriter.prototype.writePackedUint32=function(e,t){if(null!=t&&t.length){e=this.beginDelimited_(e);for(var o=0;o<t.length;o++)this.encoder_.writeUnsignedVarint32(t[o]);this.endDelimited_(e)}},jspb.BinaryWriter.prototype.writePackedUint32String=function(e,t){if(null!=t&&t.length){e=this.beginDelimited_(e);for(var o=0;o<t.length;o++)this.encoder_.writeUnsignedVarint32(parseInt(t[o],10));this.endDelimited_(e)}},jspb.BinaryWriter.prototype.writePackedUint64=function(e,t){if(null!=t&&t.length){e=this.beginDelimited_(e);for(var o=0;o<t.length;o++)this.encoder_.writeUnsignedVarint64(t[o]);this.endDelimited_(e)}},jspb.BinaryWriter.prototype.writePackedUint64String=function(e,t){if(null!=t&&t.length){e=this.beginDelimited_(e);for(var o=0;o<t.length;o++){var r=jspb.arith.UInt64.fromString(t[o]);this.encoder_.writeSplitVarint64(r.lo,r.hi)}this.endDelimited_(e)}},jspb.BinaryWriter.prototype.writePackedSint32=function(e,t){if(null!=t&&t.length){e=this.beginDelimited_(e);for(var o=0;o<t.length;o++)this.encoder_.writeZigzagVarint32(t[o]);this.endDelimited_(e)}},jspb.BinaryWriter.prototype.writePackedSint64=function(e,t){if(null!=t&&t.length){e=this.beginDelimited_(e);for(var o=0;o<t.length;o++)this.encoder_.writeZigzagVarint64(t[o]);this.endDelimited_(e)}},jspb.BinaryWriter.prototype.writePackedSint64String=function(e,t){if(null!=t&&t.length){e=this.beginDelimited_(e);for(var o=0;o<t.length;o++)this.encoder_.writeZigzagVarintHash64(jspb.utils.decimalStringToHash64(t[o]));this.endDelimited_(e)}},jspb.BinaryWriter.prototype.writePackedSintHash64=function(e,t){if(null!=t&&t.length){e=this.beginDelimited_(e);for(var o=0;o<t.length;o++)this.encoder_.writeZigzagVarintHash64(t[o]);this.endDelimited_(e)}},jspb.BinaryWriter.prototype.writePackedFixed32=function(e,t){if(null!=t&&t.length)for(this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.DELIMITED),this.encoder_.writeUnsignedVarint32(4*t.length),e=0;e<t.length;e++)this.encoder_.writeUint32(t[e])},jspb.BinaryWriter.prototype.writePackedFixed64=function(e,t){if(null!=t&&t.length)for(this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.DELIMITED),this.encoder_.writeUnsignedVarint32(8*t.length),e=0;e<t.length;e++)this.encoder_.writeUint64(t[e])},jspb.BinaryWriter.prototype.writePackedFixed64String=function(e,t){if(null!=t&&t.length)for(this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.DELIMITED),this.encoder_.writeUnsignedVarint32(8*t.length),e=0;e<t.length;e++){var o=jspb.arith.UInt64.fromString(t[e]);this.encoder_.writeSplitFixed64(o.lo,o.hi)}},jspb.BinaryWriter.prototype.writePackedSfixed32=function(e,t){if(null!=t&&t.length)for(this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.DELIMITED),this.encoder_.writeUnsignedVarint32(4*t.length),e=0;e<t.length;e++)this.encoder_.writeInt32(t[e])},jspb.BinaryWriter.prototype.writePackedSfixed64=function(e,t){if(null!=t&&t.length)for(this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.DELIMITED),this.encoder_.writeUnsignedVarint32(8*t.length),e=0;e<t.length;e++)this.encoder_.writeInt64(t[e])},jspb.BinaryWriter.prototype.writePackedSfixed64String=function(e,t){if(null!=t&&t.length)for(this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.DELIMITED),this.encoder_.writeUnsignedVarint32(8*t.length),e=0;e<t.length;e++)this.encoder_.writeInt64String(t[e])},jspb.BinaryWriter.prototype.writePackedFloat=function(e,t){if(null!=t&&t.length)for(this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.DELIMITED),this.encoder_.writeUnsignedVarint32(4*t.length),e=0;e<t.length;e++)this.encoder_.writeFloat(t[e])},jspb.BinaryWriter.prototype.writePackedDouble=function(e,t){if(null!=t&&t.length)for(this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.DELIMITED),this.encoder_.writeUnsignedVarint32(8*t.length),e=0;e<t.length;e++)this.encoder_.writeDouble(t[e])},jspb.BinaryWriter.prototype.writePackedBool=function(e,t){if(null!=t&&t.length)for(this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.DELIMITED),this.encoder_.writeUnsignedVarint32(t.length),e=0;e<t.length;e++)this.encoder_.writeBool(t[e])},jspb.BinaryWriter.prototype.writePackedEnum=function(e,t){if(null!=t&&t.length){e=this.beginDelimited_(e);for(var o=0;o<t.length;o++)this.encoder_.writeEnum(t[o]);this.endDelimited_(e)}},jspb.BinaryWriter.prototype.writePackedFixedHash64=function(e,t){if(null!=t&&t.length)for(this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.DELIMITED),this.encoder_.writeUnsignedVarint32(8*t.length),e=0;e<t.length;e++)this.encoder_.writeFixedHash64(t[e])},jspb.BinaryWriter.prototype.writePackedVarintHash64=function(e,t){if(null!=t&&t.length){e=this.beginDelimited_(e);for(var o=0;o<t.length;o++)this.encoder_.writeVarintHash64(t[o]);this.endDelimited_(e)}},jspb.Map=function(e,t){this.arr_=e,this.valueCtor_=t,this.map_={},this.arrClean=!0,0<this.arr_.length&&this.loadFromArray_()},jspb.Map.prototype.loadFromArray_=function(){for(var e=0;e<this.arr_.length;e++){var t=this.arr_[e],o=t[0];this.map_[o.toString()]=new jspb.Map.Entry_(o,t[1])}this.arrClean=!0},jspb.Map.prototype.toArray=function(){if(this.arrClean){if(this.valueCtor_){var e,t=this.map_;for(e in t)if(Object.prototype.hasOwnProperty.call(t,e)){var o=t[e].valueWrapper;o&&o.toArray()}}}else{for(this.arr_.length=0,(t=this.stringKeys_()).sort(),e=0;e<t.length;e++){var r=this.map_[t[e]];(o=r.valueWrapper)&&o.toArray(),this.arr_.push([r.key,r.value])}this.arrClean=!0}return this.arr_},jspb.Map.prototype.toObject=function(e,t){for(var o=this.toArray(),r=[],n=0;n<o.length;n++){var s=this.map_[o[n][0].toString()];this.wrapEntry_(s);var i=s.valueWrapper;i?(goog.asserts.assert(t),r.push([s.key,t(e,i)])):r.push([s.key,s.value])}return r},jspb.Map.fromObject=function(e,t,o){t=new jspb.Map([],t);for(var r=0;r<e.length;r++){var n=e[r][0],s=o(e[r][1]);t.set(n,s)}return t},jspb.Map.ArrayIteratorIterable_=function(e){this.idx_=0,this.arr_=e},jspb.Map.ArrayIteratorIterable_.prototype.next=function(){return this.idx_<this.arr_.length?{done:!1,value:this.arr_[this.idx_++]}:{done:!0,value:void 0}},"undefined"!=typeof Symbol&&(jspb.Map.ArrayIteratorIterable_.prototype[Symbol.iterator]=function(){return this}),jspb.Map.prototype.getLength=function(){return this.stringKeys_().length},jspb.Map.prototype.clear=function(){this.map_={},this.arrClean=!1},jspb.Map.prototype.del=function(e){e=e.toString();var t=this.map_.hasOwnProperty(e);return delete this.map_[e],this.arrClean=!1,t},jspb.Map.prototype.getEntryList=function(){var e=[],t=this.stringKeys_();t.sort();for(var o=0;o<t.length;o++){var r=this.map_[t[o]];e.push([r.key,r.value])}return e},jspb.Map.prototype.entries=function(){var e=[],t=this.stringKeys_();t.sort();for(var o=0;o<t.length;o++){var r=this.map_[t[o]];e.push([r.key,this.wrapEntry_(r)])}return new jspb.Map.ArrayIteratorIterable_(e)},jspb.Map.prototype.keys=function(){var e=[],t=this.stringKeys_();t.sort();for(var o=0;o<t.length;o++)e.push(this.map_[t[o]].key);return new jspb.Map.ArrayIteratorIterable_(e)},jspb.Map.prototype.values=function(){var e=[],t=this.stringKeys_();t.sort();for(var o=0;o<t.length;o++)e.push(this.wrapEntry_(this.map_[t[o]]));return new jspb.Map.ArrayIteratorIterable_(e)},jspb.Map.prototype.forEach=function(e,t){var o=this.stringKeys_();o.sort();for(var r=0;r<o.length;r++){var n=this.map_[o[r]];e.call(t,this.wrapEntry_(n),n.key,this)}},jspb.Map.prototype.set=function(e,t){var o=new jspb.Map.Entry_(e);return this.valueCtor_?(o.valueWrapper=t,o.value=t.toArray()):o.value=t,this.map_[e.toString()]=o,this.arrClean=!1,this},jspb.Map.prototype.wrapEntry_=function(e){return this.valueCtor_?(e.valueWrapper||(e.valueWrapper=new this.valueCtor_(e.value)),e.valueWrapper):e.value},jspb.Map.prototype.get=function(e){if(e=this.map_[e.toString()])return this.wrapEntry_(e)},jspb.Map.prototype.has=function(e){return e.toString()in this.map_},jspb.Map.prototype.serializeBinary=function(e,t,o,r,n){var s=this.stringKeys_();s.sort();for(var i=0;i<s.length;i++){var a=this.map_[s[i]];t.beginSubMessage(e),o.call(t,1,a.key),this.valueCtor_?r.call(t,2,this.wrapEntry_(a),n):r.call(t,2,a.value),t.endSubMessage()}},jspb.Map.deserializeBinary=function(e,t,o,r,n,s,i){for(;t.nextField()&&!t.isEndGroup();){var a=t.getFieldNumber();1==a?s=o.call(t):2==a&&(e.valueCtor_?(goog.asserts.assert(n),i||(i=new e.valueCtor_),r.call(t,i,n)):i=r.call(t))}goog.asserts.assert(null!=s),goog.asserts.assert(null!=i),e.set(s,i)},jspb.Map.prototype.stringKeys_=function(){var e,t=this.map_,o=[];for(e in t)Object.prototype.hasOwnProperty.call(t,e)&&o.push(e);return o},jspb.Map.Entry_=function(e,t){this.key=e,this.value=t,this.valueWrapper=void 0},jspb.ExtensionFieldInfo=function(e,t,o,r,n){this.fieldIndex=e,this.fieldName=t,this.ctor=o,this.toObjectFn=r,this.isRepeated=n},jspb.ExtensionFieldBinaryInfo=function(e,t,o,r,n,s){this.fieldInfo=e,this.binaryReaderFn=t,this.binaryWriterFn=o,this.binaryMessageSerializeFn=r,this.binaryMessageDeserializeFn=n,this.isPacked=s},jspb.ExtensionFieldInfo.prototype.isMessageType=function(){return!!this.ctor},jspb.Message=function(){},jspb.Message.GENERATE_TO_OBJECT=!0,jspb.Message.GENERATE_FROM_OBJECT=!goog.DISALLOW_TEST_ONLY_CODE,jspb.Message.GENERATE_TO_STRING=!0,jspb.Message.ASSUME_LOCAL_ARRAYS=!1,jspb.Message.SERIALIZE_EMPTY_TRAILING_FIELDS=!0,jspb.Message.SUPPORTS_UINT8ARRAY_="function"==typeof Uint8Array,jspb.Message.prototype.getJsPbMessageId=function(){return this.messageId_},jspb.Message.getIndex_=function(e,t){return t+e.arrayIndexOffset_},jspb.Message.hiddenES6Property_=function(){},jspb.Message.getFieldNumber_=function(e,t){return t-e.arrayIndexOffset_},jspb.Message.initialize=function(e,t,o,r,n,s){if(e.wrappers_=null,t||(t=o?[o]:[]),e.messageId_=o?String(o):void 0,e.arrayIndexOffset_=0===o?-1:0,e.array=t,jspb.Message.initPivotAndExtensionObject_(e,r),e.convertedPrimitiveFields_={},jspb.Message.SERIALIZE_EMPTY_TRAILING_FIELDS||(e.repeatedFields=n),n)for(t=0;t<n.length;t++)(o=n[t])<e.pivot_?(o=jspb.Message.getIndex_(e,o),e.array[o]=e.array[o]||jspb.Message.EMPTY_LIST_SENTINEL_):(jspb.Message.maybeInitEmptyExtensionObject_(e),e.extensionObject_[o]=e.extensionObject_[o]||jspb.Message.EMPTY_LIST_SENTINEL_);if(s&&s.length)for(t=0;t<s.length;t++)jspb.Message.computeOneofCase(e,s[t])},jspb.Message.EMPTY_LIST_SENTINEL_=goog.DEBUG&&Object.freeze?Object.freeze([]):[],jspb.Message.isArray_=function(e){return jspb.Message.ASSUME_LOCAL_ARRAYS?e instanceof Array:Array.isArray(e)},jspb.Message.isExtensionObject_=function(e){return!(null===e||"object"!=typeof e||jspb.Message.isArray_(e)||jspb.Message.SUPPORTS_UINT8ARRAY_&&e instanceof Uint8Array)},jspb.Message.initPivotAndExtensionObject_=function(e,t){var o=e.array.length,r=-1;if(o&&(r=o-1,o=e.array[r],jspb.Message.isExtensionObject_(o)))return e.pivot_=jspb.Message.getFieldNumber_(e,r),void(e.extensionObject_=o);-1<t?(e.pivot_=Math.max(t,jspb.Message.getFieldNumber_(e,r+1)),e.extensionObject_=null):e.pivot_=Number.MAX_VALUE},jspb.Message.maybeInitEmptyExtensionObject_=function(e){var t=jspb.Message.getIndex_(e,e.pivot_);e.array[t]||(e.extensionObject_=e.array[t]={})},jspb.Message.toObjectList=function(e,t,o){for(var r=[],n=0;n<e.length;n++)r[n]=t.call(e[n],o,e[n]);return r},jspb.Message.toObjectExtension=function(e,t,o,r,n){for(var s in o){var i=o[s],a=r.call(e,i);if(null!=a){for(var g in i.fieldName)if(i.fieldName.hasOwnProperty(g))break;t[g]=i.toObjectFn?i.isRepeated?jspb.Message.toObjectList(a,i.toObjectFn,n):i.toObjectFn(n,a):a}}},jspb.Message.serializeBinaryExtensions=function(e,t,o,r){for(var n in o){var s=o[n],i=s.fieldInfo;if(!s.binaryWriterFn)throw Error("Message extension present that was generated without binary serialization support");var a=r.call(e,i);if(null!=a)if(i.isMessageType()){if(!s.binaryMessageSerializeFn)throw Error("Message extension present holding submessage without binary support enabled, and message is being serialized to binary format");s.binaryWriterFn.call(t,i.fieldIndex,a,s.binaryMessageSerializeFn)}else s.binaryWriterFn.call(t,i.fieldIndex,a)}},jspb.Message.readBinaryExtension=function(e,t,o,r,n){var s=o[t.getFieldNumber()];if(s){if(o=s.fieldInfo,!s.binaryReaderFn)throw Error("Deserializing extension whose generated code does not support binary format");if(o.isMessageType()){var i=new o.ctor;s.binaryReaderFn.call(t,i,s.binaryMessageDeserializeFn)}else i=s.binaryReaderFn.call(t);o.isRepeated&&!s.isPacked?(t=r.call(e,o))?t.push(i):n.call(e,o,[i]):n.call(e,o,i)}else t.skipField()},jspb.Message.getField=function(e,t){if(t<e.pivot_){t=jspb.Message.getIndex_(e,t);var o=e.array[t];return o===jspb.Message.EMPTY_LIST_SENTINEL_?e.array[t]=[]:o}if(e.extensionObject_)return(o=e.extensionObject_[t])===jspb.Message.EMPTY_LIST_SENTINEL_?e.extensionObject_[t]=[]:o},jspb.Message.getRepeatedField=function(e,t){return jspb.Message.getField(e,t)},jspb.Message.getOptionalFloatingPointField=function(e,t){return null==(e=jspb.Message.getField(e,t))?e:+e},jspb.Message.getBooleanField=function(e,t){return null==(e=jspb.Message.getField(e,t))?e:!!e},jspb.Message.getRepeatedFloatingPointField=function(e,t){var o=jspb.Message.getRepeatedField(e,t);if(e.convertedPrimitiveFields_||(e.convertedPrimitiveFields_={}),!e.convertedPrimitiveFields_[t]){for(var r=0;r<o.length;r++)o[r]=+o[r];e.convertedPrimitiveFields_[t]=!0}return o},jspb.Message.getRepeatedBooleanField=function(e,t){var o=jspb.Message.getRepeatedField(e,t);if(e.convertedPrimitiveFields_||(e.convertedPrimitiveFields_={}),!e.convertedPrimitiveFields_[t]){for(var r=0;r<o.length;r++)o[r]=!!o[r];e.convertedPrimitiveFields_[t]=!0}return o},jspb.Message.bytesAsB64=function(e){return null==e||"string"==typeof e?e:jspb.Message.SUPPORTS_UINT8ARRAY_&&e instanceof Uint8Array?goog.crypt.base64.encodeByteArray(e):(goog.asserts.fail("Cannot coerce to b64 string: "+goog.typeOf(e)),null)},jspb.Message.bytesAsU8=function(e){return null==e||e instanceof Uint8Array?e:"string"==typeof e?goog.crypt.base64.decodeStringToUint8Array(e):(goog.asserts.fail("Cannot coerce to Uint8Array: "+goog.typeOf(e)),null)},jspb.Message.bytesListAsB64=function(e){return jspb.Message.assertConsistentTypes_(e),e.length&&"string"!=typeof e[0]?goog.array.map(e,jspb.Message.bytesAsB64):e},jspb.Message.bytesListAsU8=function(e){return jspb.Message.assertConsistentTypes_(e),!e.length||e[0]instanceof Uint8Array?e:goog.array.map(e,jspb.Message.bytesAsU8)},jspb.Message.assertConsistentTypes_=function(e){if(goog.DEBUG&&e&&1<e.length){var t=goog.typeOf(e[0]);goog.array.forEach(e,(function(e){goog.typeOf(e)!=t&&goog.asserts.fail("Inconsistent type in JSPB repeated field array. Got "+goog.typeOf(e)+" expected "+t)}))}},jspb.Message.getFieldWithDefault=function(e,t,o){return null==(e=jspb.Message.getField(e,t))?o:e},jspb.Message.getBooleanFieldWithDefault=function(e,t,o){return null==(e=jspb.Message.getBooleanField(e,t))?o:e},jspb.Message.getFloatingPointFieldWithDefault=function(e,t,o){return null==(e=jspb.Message.getOptionalFloatingPointField(e,t))?o:e},jspb.Message.getFieldProto3=jspb.Message.getFieldWithDefault,jspb.Message.getMapField=function(e,t,o,r){if(e.wrappers_||(e.wrappers_={}),t in e.wrappers_)return e.wrappers_[t];var n=jspb.Message.getField(e,t);if(!n){if(o)return;n=[],jspb.Message.setField(e,t,n)}return e.wrappers_[t]=new jspb.Map(n,r)},jspb.Message.setField=function(e,t,o){return goog.asserts.assertInstanceof(e,jspb.Message),t<e.pivot_?e.array[jspb.Message.getIndex_(e,t)]=o:(jspb.Message.maybeInitEmptyExtensionObject_(e),e.extensionObject_[t]=o),e},jspb.Message.setProto3IntField=function(e,t,o){return jspb.Message.setFieldIgnoringDefault_(e,t,o,0)},jspb.Message.setProto3FloatField=function(e,t,o){return jspb.Message.setFieldIgnoringDefault_(e,t,o,0)},jspb.Message.setProto3BooleanField=function(e,t,o){return jspb.Message.setFieldIgnoringDefault_(e,t,o,!1)},jspb.Message.setProto3StringField=function(e,t,o){return jspb.Message.setFieldIgnoringDefault_(e,t,o,"")},jspb.Message.setProto3BytesField=function(e,t,o){return jspb.Message.setFieldIgnoringDefault_(e,t,o,"")},jspb.Message.setProto3EnumField=function(e,t,o){return jspb.Message.setFieldIgnoringDefault_(e,t,o,0)},jspb.Message.setProto3StringIntField=function(e,t,o){return jspb.Message.setFieldIgnoringDefault_(e,t,o,"0")},jspb.Message.setFieldIgnoringDefault_=function(e,t,o,r){return goog.asserts.assertInstanceof(e,jspb.Message),o!==r?jspb.Message.setField(e,t,o):t<e.pivot_?e.array[jspb.Message.getIndex_(e,t)]=null:(jspb.Message.maybeInitEmptyExtensionObject_(e),delete e.extensionObject_[t]),e},jspb.Message.addToRepeatedField=function(e,t,o,r){return goog.asserts.assertInstanceof(e,jspb.Message),t=jspb.Message.getRepeatedField(e,t),null!=r?t.splice(r,0,o):t.push(o),e},jspb.Message.setOneofField=function(e,t,o,r){return goog.asserts.assertInstanceof(e,jspb.Message),(o=jspb.Message.computeOneofCase(e,o))&&o!==t&&void 0!==r&&(e.wrappers_&&o in e.wrappers_&&(e.wrappers_[o]=void 0),jspb.Message.setField(e,o,void 0)),jspb.Message.setField(e,t,r)},jspb.Message.computeOneofCase=function(e,t){for(var o,r,n=0;n<t.length;n++){var s=t[n],i=jspb.Message.getField(e,s);null!=i&&(o=s,r=i,jspb.Message.setField(e,s,void 0))}return o?(jspb.Message.setField(e,o,r),o):0},jspb.Message.getWrapperField=function(e,t,o,r){if(e.wrappers_||(e.wrappers_={}),!e.wrappers_[o]){var n=jspb.Message.getField(e,o);(r||n)&&(e.wrappers_[o]=new t(n))}return e.wrappers_[o]},jspb.Message.getRepeatedWrapperField=function(e,t,o){return jspb.Message.wrapRepeatedField_(e,t,o),(t=e.wrappers_[o])==jspb.Message.EMPTY_LIST_SENTINEL_&&(t=e.wrappers_[o]=[]),t},jspb.Message.wrapRepeatedField_=function(e,t,o){if(e.wrappers_||(e.wrappers_={}),!e.wrappers_[o]){for(var r=jspb.Message.getRepeatedField(e,o),n=[],s=0;s<r.length;s++)n[s]=new t(r[s]);e.wrappers_[o]=n}},jspb.Message.setWrapperField=function(e,t,o){goog.asserts.assertInstanceof(e,jspb.Message),e.wrappers_||(e.wrappers_={});var r=o?o.toArray():o;return e.wrappers_[t]=o,jspb.Message.setField(e,t,r)},jspb.Message.setOneofWrapperField=function(e,t,o,r){goog.asserts.assertInstanceof(e,jspb.Message),e.wrappers_||(e.wrappers_={});var n=r?r.toArray():r;return e.wrappers_[t]=r,jspb.Message.setOneofField(e,t,o,n)},jspb.Message.setRepeatedWrapperField=function(e,t,o){goog.asserts.assertInstanceof(e,jspb.Message),e.wrappers_||(e.wrappers_={}),o=o||[];for(var r=[],n=0;n<o.length;n++)r[n]=o[n].toArray();return e.wrappers_[t]=o,jspb.Message.setField(e,t,r)},jspb.Message.addToRepeatedWrapperField=function(e,t,o,r,n){jspb.Message.wrapRepeatedField_(e,r,t);var s=e.wrappers_[t];return s||(s=e.wrappers_[t]=[]),o=o||new r,e=jspb.Message.getRepeatedField(e,t),null!=n?(s.splice(n,0,o),e.splice(n,0,o.toArray())):(s.push(o),e.push(o.toArray())),o},jspb.Message.toMap=function(e,t,o,r){for(var n={},s=0;s<e.length;s++)n[t.call(e[s])]=o?o.call(e[s],r,e[s]):e[s];return n},jspb.Message.prototype.syncMapFields_=function(){if(this.wrappers_)for(var e in this.wrappers_){var t=this.wrappers_[e];if(Array.isArray(t))for(var o=0;o<t.length;o++)t[o]&&t[o].toArray();else t&&t.toArray()}},jspb.Message.prototype.toArray=function(){return this.syncMapFields_(),this.array},jspb.Message.GENERATE_TO_STRING&&(jspb.Message.prototype.toString=function(){return this.syncMapFields_(),this.array.toString()}),jspb.Message.prototype.getExtension=function(e){if(this.extensionObject_){this.wrappers_||(this.wrappers_={});var t=e.fieldIndex;if(e.isRepeated){if(e.isMessageType())return this.wrappers_[t]||(this.wrappers_[t]=goog.array.map(this.extensionObject_[t]||[],(function(t){return new e.ctor(t)}))),this.wrappers_[t]}else if(e.isMessageType())return!this.wrappers_[t]&&this.extensionObject_[t]&&(this.wrappers_[t]=new e.ctor(this.extensionObject_[t])),this.wrappers_[t];return this.extensionObject_[t]}},jspb.Message.prototype.setExtension=function(e,t){this.wrappers_||(this.wrappers_={}),jspb.Message.maybeInitEmptyExtensionObject_(this);var o=e.fieldIndex;return e.isRepeated?(t=t||[],e.isMessageType()?(this.wrappers_[o]=t,this.extensionObject_[o]=goog.array.map(t,(function(e){return e.toArray()}))):this.extensionObject_[o]=t):e.isMessageType()?(this.wrappers_[o]=t,this.extensionObject_[o]=t?t.toArray():t):this.extensionObject_[o]=t,this},jspb.Message.difference=function(e,t){if(!(e instanceof t.constructor))throw Error("Messages have different types.");var o=e.toArray();t=t.toArray();var r=[],n=0,s=o.length>t.length?o.length:t.length;for(e.getJsPbMessageId()&&(r[0]=e.getJsPbMessageId(),n=1);n<s;n++)jspb.Message.compareFields(o[n],t[n])||(r[n]=t[n]);return new e.constructor(r)},jspb.Message.equals=function(e,t){return e==t||!(!e||!t)&&e instanceof t.constructor&&jspb.Message.compareFields(e.toArray(),t.toArray())},jspb.Message.compareExtensions=function(e,t){e=e||{},t=t||{};var o,r={};for(o in e)r[o]=0;for(o in t)r[o]=0;for(o in r)if(!jspb.Message.compareFields(e[o],t[o]))return!1;return!0},jspb.Message.compareFields=function(e,t){if(e==t)return!0;if(!goog.isObject(e)||!goog.isObject(t))return!!("number"==typeof e&&isNaN(e)||"number"==typeof t&&isNaN(t))&&String(e)==String(t);if(e.constructor!=t.constructor)return!1;if(jspb.Message.SUPPORTS_UINT8ARRAY_&&e.constructor===Uint8Array){if(e.length!=t.length)return!1;for(var o=0;o<e.length;o++)if(e[o]!=t[o])return!1;return!0}if(e.constructor===Array){var r=void 0,n=void 0,s=Math.max(e.length,t.length);for(o=0;o<s;o++){var i=e[o],a=t[o];if(i&&i.constructor==Object&&(goog.asserts.assert(void 0===r),goog.asserts.assert(o===e.length-1),r=i,i=void 0),a&&a.constructor==Object&&(goog.asserts.assert(void 0===n),goog.asserts.assert(o===t.length-1),n=a,a=void 0),!jspb.Message.compareFields(i,a))return!1}return!r&&!n||(r=r||{},n=n||{},jspb.Message.compareExtensions(r,n))}if(e.constructor===Object)return jspb.Message.compareExtensions(e,t);throw Error("Invalid type in JSPB array")},jspb.Message.prototype.cloneMessage=function(){return jspb.Message.cloneMessage(this)},jspb.Message.prototype.clone=function(){return jspb.Message.cloneMessage(this)},jspb.Message.clone=function(e){return jspb.Message.cloneMessage(e)},jspb.Message.cloneMessage=function(e){return new e.constructor(jspb.Message.clone_(e.toArray()))},jspb.Message.copyInto=function(e,t){goog.asserts.assertInstanceof(e,jspb.Message),goog.asserts.assertInstanceof(t,jspb.Message),goog.asserts.assert(e.constructor==t.constructor,"Copy source and target message should have the same type."),e=jspb.Message.clone(e);for(var o=t.toArray(),r=e.toArray(),n=o.length=0;n<r.length;n++)o[n]=r[n];t.wrappers_=e.wrappers_,t.extensionObject_=e.extensionObject_},jspb.Message.clone_=function(e){if(Array.isArray(e)){for(var t=Array(e.length),o=0;o<e.length;o++){var r=e[o];null!=r&&(t[o]="object"==typeof r?jspb.Message.clone_(goog.asserts.assert(r)):r)}return t}if(jspb.Message.SUPPORTS_UINT8ARRAY_&&e instanceof Uint8Array)return new Uint8Array(e);for(o in t={},e)null!=(r=e[o])&&(t[o]="object"==typeof r?jspb.Message.clone_(goog.asserts.assert(r)):r);return t},jspb.Message.registerMessageType=function(e,t){t.messageId=e},jspb.Message.messageSetExtensions={},jspb.Message.messageSetExtensionsBinary={},jspb.Export={},exports.Map=jspb.Map,exports.Message=jspb.Message,exports.BinaryReader=jspb.BinaryReader,exports.BinaryWriter=jspb.BinaryWriter,exports.ExtensionFieldInfo=jspb.ExtensionFieldInfo,exports.ExtensionFieldBinaryInfo=jspb.ExtensionFieldBinaryInfo,exports.exportSymbol=goog.exportSymbol,exports.inherits=goog.inherits,exports.object={extend:goog.object.extend},exports.typeOf=goog.typeOf},40:function(e,t,o){var r;function n(e){var t=0;return function(){return t<e.length?{done:!1,value:e[t++]}:{done:!0}}}var s="function"==typeof Object.defineProperties?Object.defineProperty:function(e,t,o){e!=Array.prototype&&e!=Object.prototype&&(e[t]=o.value)},i=function(e){e=["object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof o.g&&o.g,e];for(var t=0;t<e.length;++t){var r=e[t];if(r&&r.Math==Math)return r}throw Error("Cannot find global object")}(this);function a(){a=function(){},i.Symbol||(i.Symbol=l)}function g(e,t){this.a=e,s(this,"description",{configurable:!0,writable:!0,value:t})}g.prototype.toString=function(){return this.a};var p,l=(p=0,function e(t){if(this instanceof e)throw new TypeError("Symbol is not a constructor");return new g("jscomp_symbol_"+(t||"")+"_"+p++,t)});function u(){a();var e=i.Symbol.iterator;e||(e=i.Symbol.iterator=i.Symbol("Symbol.iterator")),"function"!=typeof Array.prototype[e]&&s(Array.prototype,e,{configurable:!0,writable:!0,value:function(){return function(e){return u(),(e={next:e})[i.Symbol.iterator]=function(){return this},e}(n(this))}}),u=function(){}}function c(e){var t="undefined"!=typeof Symbol&&Symbol.iterator&&e[Symbol.iterator];return t?t.call(e):{next:n(e)}}var d,y="function"==typeof Object.create?Object.create:function(e){function t(){}return t.prototype=e,new t};if("function"==typeof Object.setPrototypeOf)d=Object.setPrototypeOf;else{var f;e:{var b={};try{b.__proto__={V:!0},f=b.V;break e}catch(ee){}f=!1}d=f?function(e,t){if(e.__proto__=t,e.__proto__!==t)throw new TypeError(e+" is not extensible");return e}:null}var h=d;function _(e,t){if(e.prototype=y(t.prototype),e.prototype.constructor=e,h)h(e,t);else for(var o in t)if("prototype"!=o)if(Object.defineProperties){var r=Object.getOwnPropertyDescriptor(t,o);r&&Object.defineProperty(e,o,r)}else e[o]=t[o];e.O=t.prototype}function v(e,t){if(t){var o=i;e=e.split(".");for(var r=0;r<e.length-1;r++){var n=e[r];n in o||(o[n]={}),o=o[n]}(t=t(r=o[e=e[e.length-1]]))!=r&&null!=t&&s(o,e,{configurable:!0,writable:!0,value:t})}}v("Array.prototype.keys",(function(e){return e||function(){return function(e,t){u(),e instanceof String&&(e+="");var o=0,r={next:function(){if(o<e.length){var n=o++;return{value:t(n,e[n]),done:!1}}return r.next=function(){return{done:!0,value:void 0}},r.next()}};return r[Symbol.iterator]=function(){return r},r}(this,(function(e){return e}))}})),v("Array.prototype.find",(function(e){return e||function(e,t){e:{var o=this;o instanceof String&&(o=String(o));for(var r=o.length,n=0;n<r;n++){var s=o[n];if(e.call(t,s,n,o)){e=s;break e}}e=void 0}return e}})),v("Object.is",(function(e){return e||function(e,t){return e===t?0!==e||1/e==1/t:e!=e&&t!=t}})),v("Array.prototype.includes",(function(e){return e||function(e,t){var o=this;o instanceof String&&(o=String(o));var r=o.length;for(0>(t=t||0)&&(t=Math.max(t+r,0));t<r;t++){var n=o[t];if(n===e||Object.is(n,e))return!0}return!1}})),v("Promise",(function(e){function t(e){this.b=0,this.c=void 0,this.a=[];var t=this.f();try{e(t.resolve,t.reject)}catch(e){t.reject(e)}}function o(){this.a=null}function r(e){return e instanceof t?e:new t((function(t){t(e)}))}if(e)return e;o.prototype.b=function(e){if(null==this.a){this.a=[];var t=this;this.c((function(){t.g()}))}this.a.push(e)};var n=i.setTimeout;o.prototype.c=function(e){n(e,0)},o.prototype.g=function(){for(;this.a&&this.a.length;){var e=this.a;this.a=[];for(var t=0;t<e.length;++t){var o=e[t];e[t]=null;try{o()}catch(e){this.f(e)}}}this.a=null},o.prototype.f=function(e){this.c((function(){throw e}))},t.prototype.f=function(){function e(e){return function(r){o||(o=!0,e.call(t,r))}}var t=this,o=!1;return{resolve:e(this.s),reject:e(this.g)}},t.prototype.s=function(e){if(e===this)this.g(new TypeError("A Promise cannot resolve to itself"));else if(e instanceof t)this.v(e);else{e:switch(typeof e){case"object":var o=null!=e;break e;case"function":o=!0;break e;default:o=!1}o?this.m(e):this.h(e)}},t.prototype.m=function(e){var t=void 0;try{t=e.then}catch(e){return void this.g(e)}"function"==typeof t?this.w(t,e):this.h(e)},t.prototype.g=function(e){this.i(2,e)},t.prototype.h=function(e){this.i(1,e)},t.prototype.i=function(e,t){if(0!=this.b)throw Error("Cannot settle("+e+", "+t+"): Promise already settled in state"+this.b);this.b=e,this.c=t,this.l()},t.prototype.l=function(){if(null!=this.a){for(var e=0;e<this.a.length;++e)s.b(this.a[e]);this.a=null}};var s=new o;return t.prototype.v=function(e){var t=this.f();e.F(t.resolve,t.reject)},t.prototype.w=function(e,t){var o=this.f();try{e.call(t,o.resolve,o.reject)}catch(e){o.reject(e)}},t.prototype.then=function(e,o){function r(e,t){return"function"==typeof e?function(t){try{n(e(t))}catch(e){s(e)}}:t}var n,s,i=new t((function(e,t){n=e,s=t}));return this.F(r(e,n),r(o,s)),i},t.prototype.catch=function(e){return this.then(void 0,e)},t.prototype.F=function(e,t){function o(){switch(r.b){case 1:e(r.c);break;case 2:t(r.c);break;default:throw Error("Unexpected state: "+r.b)}}var r=this;null==this.a?s.b(o):this.a.push(o)},t.resolve=r,t.reject=function(e){return new t((function(t,o){o(e)}))},t.race=function(e){return new t((function(t,o){for(var n=c(e),s=n.next();!s.done;s=n.next())r(s.value).F(t,o)}))},t.all=function(e){var o=c(e),n=o.next();return n.done?r([]):new t((function(e,t){function s(t){return function(o){i[t]=o,0==--a&&e(i)}}var i=[],a=0;do{i.push(void 0),a++,r(n.value).F(s(i.length-1),t),n=o.next()}while(!n.done)}))},t}));var E=E||{},m=this||self;function T(e,t){e=e.split("."),t=t||m;for(var o=0;o<e.length;o++)if(null==(t=t[e[o]]))return null;return t}function R(){}function S(e){var t=typeof e;return"object"==t&&null!=e||"function"==t}var A="closure_uid_"+(1e9*Math.random()>>>0),M=0;function I(e,t,o){return e.call.apply(e.bind,arguments)}function O(e,t,o){if(!e)throw Error();if(2<arguments.length){var r=Array.prototype.slice.call(arguments,2);return function(){var o=Array.prototype.slice.call(arguments);return Array.prototype.unshift.apply(o,r),e.apply(t,o)}}return function(){return e.apply(t,arguments)}}function w(e,t,o){return(w=Function.prototype.bind&&-1!=Function.prototype.bind.toString().indexOf("native code")?I:O).apply(null,arguments)}function D(e,t){function o(){}o.prototype=t.prototype,e.O=t.prototype,e.prototype=new o,e.prototype.constructor=e}function F(){this.a={}}function C(e,t,o,r){this.f=e,this.c=t,this.b=o,this.a=r}function L(e,t,o,r){o=void 0===o?{}:o,this.c=e,this.a=o,this.b=t,this.f=void 0===r?null:r}function N(e,t,o){o=void 0===o?{}:o;var r=void 0===r?new F:r;return new C(t,e,o,r)}function j(e,t,o){o=void 0===o?{}:o,t=Error.call(this,t),this.message=t.message,"stack"in t&&(this.stack=t.stack),this.code=e,this.metadata=o}function B(e){this.a=e}function U(e){if(Error.captureStackTrace)Error.captureStackTrace(this,U);else{var t=Error().stack;t&&(this.stack=t)}e&&(this.message=String(e))}function P(e,t){for(var o="",r=(e=e.split("%s")).length-1,n=0;n<r;n++)o+=e[n]+(n<t.length?t[n]:"%s");U.call(this,o+e[r])}function W(){this.l=null,this.i=[],this.m=0,this.b=V,this.f=this.a=this.h=0,this.c=null,this.g=0}F.prototype.get=function(e){return this.a[e]},F.prototype.G=function(){return Object.keys(this.a)},C.prototype.getRequestMessage=function(){return this.f},C.prototype.getMethodDescriptor=function(){return this.c},C.prototype.getMetadata=function(){return this.b},C.prototype.getCallOptions=function(){return this.a},L.prototype.getResponseMessage=function(){return this.c},L.prototype.getMetadata=function(){return this.a},L.prototype.getMethodDescriptor=function(){return this.b},L.prototype.getStatus=function(){return this.f},_(j,Error),j.prototype.name="RpcError",B.prototype.on=function(e,t){return"data"==e||"error"==e?this:this.a.on(e,t)},B.prototype.removeListener=function(e,t){return this.a.removeListener(e,t)},B.prototype.cancel=function(){this.a.cancel()},D(U,Error),U.prototype.name="CustomError",D(P,U),P.prototype.name="AssertionError";var V=0,x=128;function z(e,t,o,r){throw e.b=3,e.l="The stream is broken @"+e.m+"/"+o+". Error: "+r+". With input:\\n"+t,Error(e.l)}var k,H=Array.prototype.indexOf?function(e,t){return Array.prototype.indexOf.call(e,t,void 0)}:function(e,t){if("string"==typeof e)return"string"!=typeof t||1!=t.length?-1:e.indexOf(t,0);for(var o=0;o<e.length;o++)if(o in e&&e[o]===t)return o;return-1},G=String.prototype.trim?function(e){return e.trim()}:function(e){return/^[\\s\\xa0]*([\\s\\S]*?)[\\s\\xa0]*$/.exec(e)[1]};function q(e,t){return-1!=e.indexOf(t)}function Y(e,t){return e<t?-1:e>t?1:0}e:{var Q=m.navigator;if(Q){var K=Q.userAgent;if(K){k=K;break e}}k=""}var $="constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf".split(" ");function X(e){var t=1;e=e.split(":");for(var o=[];0<t&&e.length;)o.push(e.shift()),t--;return e.length&&o.push(e.join(":")),o}function Z(e){return Z[" "](e),e}Z[" "]=R;var J,ee,te=q(k,"Opera"),oe=q(k,"Trident")||q(k,"MSIE"),re=q(k,"Edge"),ne=q(k,"Gecko")&&!(q(k.toLowerCase(),"webkit")&&!q(k,"Edge"))&&!(q(k,"Trident")||q(k,"MSIE"))&&!q(k,"Edge"),se=q(k.toLowerCase(),"webkit")&&!q(k,"Edge");e:{var ie="",ae=(ee=k,ne?/rv:([^\\);]+)(\\)|;)/.exec(ee):re?/Edge\\/([\\d\\.]+)/.exec(ee):oe?/\\b(?:MSIE|rv)[: ]([^\\);]+)(\\)|;)/.exec(ee):se?/WebKit\\/(\\S+)/.exec(ee):te?/(?:Version)[ \\/]?(\\S+)/.exec(ee):void 0);if(ae&&(ie=ae?ae[1]:""),oe){var ge,pe=m.document;if(null!=(ge=pe?pe.documentMode:void 0)&&ge>parseFloat(ie)){J=String(ge);break e}}J=ie}var le={};function ue(){return function(e){var t=le;return Object.prototype.hasOwnProperty.call(t,9)?t[9]:t[9]=function(){for(var e=0,t=G(String(J)).split("."),o=G("9").split("."),r=Math.max(t.length,o.length),n=0;0==e&&n<r;n++){var s=t[n]||"",i=o[n]||"";do{if(s=/(\\d*)(\\D*)(.*)/.exec(s)||["","","",""],i=/(\\d*)(\\D*)(.*)/.exec(i)||["","","",""],0==s[0].length&&0==i[0].length)break;e=Y(0==s[1].length?0:parseInt(s[1],10),0==i[1].length?0:parseInt(i[1],10))||Y(0==s[2].length,0==i[2].length)||Y(s[2],i[2]),s=s[3],i=i[3]}while(0==e)}return 0<=e}()}()}function ce(){0!=de&&(Object.prototype.hasOwnProperty.call(this,A)&&this[A]||(this[A]=++M)),this.K=this.K}var de=0;ce.prototype.K=!1;var ye=Object.freeze||function(e){return e};function fe(e,t){this.type=e,this.a=this.target=t,this.defaultPrevented=!1}fe.prototype.b=function(){this.defaultPrevented=!0};var be=function(){if(!m.addEventListener||!Object.defineProperty)return!1;var e=!1,t=Object.defineProperty({},"passive",{get:function(){e=!0}});try{m.addEventListener("test",R,t),m.removeEventListener("test",R,t)}catch(e){}return e}();function he(e,t){if(fe.call(this,e?e.type:""),this.relatedTarget=this.a=this.target=null,this.button=this.screenY=this.screenX=this.clientY=this.clientX=0,this.key="",this.metaKey=this.shiftKey=this.altKey=this.ctrlKey=!1,this.pointerId=0,this.pointerType="",this.c=null,e){var o=this.type=e.type,r=e.changedTouches&&e.changedTouches.length?e.changedTouches[0]:null;if(this.target=e.target||e.srcElement,this.a=t,t=e.relatedTarget){if(ne){e:{try{Z(t.nodeName);var n=!0;break e}catch(e){}n=!1}n||(t=null)}}else"mouseover"==o?t=e.fromElement:"mouseout"==o&&(t=e.toElement);this.relatedTarget=t,r?(this.clientX=void 0!==r.clientX?r.clientX:r.pageX,this.clientY=void 0!==r.clientY?r.clientY:r.pageY,this.screenX=r.screenX||0,this.screenY=r.screenY||0):(this.clientX=void 0!==e.clientX?e.clientX:e.pageX,this.clientY=void 0!==e.clientY?e.clientY:e.pageY,this.screenX=e.screenX||0,this.screenY=e.screenY||0),this.button=e.button,this.key=e.key||"",this.ctrlKey=e.ctrlKey,this.altKey=e.altKey,this.shiftKey=e.shiftKey,this.metaKey=e.metaKey,this.pointerId=e.pointerId||0,this.pointerType="string"==typeof e.pointerType?e.pointerType:_e[e.pointerType]||"",this.c=e,e.defaultPrevented&&he.O.b.call(this)}}D(he,fe);var _e=ye({2:"touch",3:"pen",4:"mouse"});he.prototype.b=function(){he.O.b.call(this);var e=this.c;e.preventDefault?e.preventDefault():e.returnValue=!1};var ve="closure_listenable_"+(1e6*Math.random()|0),Ee=0;function me(e,t,o,r,n){this.listener=e,this.proxy=null,this.src=t,this.type=o,this.capture=!!r,this.H=n,this.key=++Ee,this.A=this.D=!1}function Te(e){e.A=!0,e.listener=null,e.proxy=null,e.src=null,e.H=null}function Re(e){this.src=e,this.a={},this.b=0}function Se(e,t){var o=t.type;if(o in e.a){var r,n=e.a[o],s=H(n,t);(r=0<=s)&&Array.prototype.splice.call(n,s,1),r&&(Te(t),0==e.a[o].length&&(delete e.a[o],e.b--))}}function Ae(e,t,o,r){for(var n=0;n<e.length;++n){var s=e[n];if(!s.A&&s.listener==t&&s.capture==!!o&&s.H==r)return n}return-1}Re.prototype.add=function(e,t,o,r,n){var s=e.toString();(e=this.a[s])||(e=this.a[s]=[],this.b++);var i=Ae(e,t,r,n);return-1<i?(t=e[i],o||(t.D=!1)):((t=new me(t,this.src,s,!!r,n)).D=o,e.push(t)),t},Re.prototype.remove=function(e,t,o,r){if(!((e=e.toString())in this.a))return!1;var n=this.a[e];return-1<(t=Ae(n,t,o,r))&&(Te(n[t]),Array.prototype.splice.call(n,t,1),0==n.length&&(delete this.a[e],this.b--),!0)};var Me="closure_lm_"+(1e6*Math.random()|0),Ie={};function Oe(e,t,o,r,n){if(r&&r.once)De(e,t,o,r,n);else if(Array.isArray(t))for(var s=0;s<t.length;s++)Oe(e,t[s],o,r,n);else o=Ue(o),e&&e[ve]?e.f.add(String(t),o,!1,S(r)?!!r.capture:!!r,n):we(e,t,o,!1,r,n)}function we(e,t,o,r,n,s){if(!t)throw Error("Invalid event type");var i=S(n)?!!n.capture:!!n,a=je(e);if(a||(e[Me]=a=new Re(e)),!(o=a.add(t,o,r,i,s)).proxy)if(r=function(){var e=Ne;return function t(o){return e.call(t.src,t.listener,o)}}(),o.proxy=r,r.src=e,r.listener=o,e.addEventListener)be||(n=i),void 0===n&&(n=!1),e.addEventListener(t.toString(),r,n);else if(e.attachEvent)e.attachEvent(Le(t.toString()),r);else{if(!e.addListener||!e.removeListener)throw Error("addEventListener and attachEvent are unavailable.");e.addListener(r)}}function De(e,t,o,r,n){if(Array.isArray(t))for(var s=0;s<t.length;s++)De(e,t[s],o,r,n);else o=Ue(o),e&&e[ve]?e.f.add(String(t),o,!0,S(r)?!!r.capture:!!r,n):we(e,t,o,!0,r,n)}function Fe(e,t,o,r,n){if(Array.isArray(t))for(var s=0;s<t.length;s++)Fe(e,t[s],o,r,n);else r=S(r)?!!r.capture:!!r,o=Ue(o),e&&e[ve]?e.f.remove(String(t),o,r,n):e&&(e=je(e))&&(t=e.a[t.toString()],e=-1,t&&(e=Ae(t,o,r,n)),(o=-1<e?t[e]:null)&&Ce(o))}function Ce(e){if("number"!=typeof e&&e&&!e.A){var t=e.src;if(t&&t[ve])Se(t.f,e);else{var o=e.type,r=e.proxy;t.removeEventListener?t.removeEventListener(o,r,e.capture):t.detachEvent?t.detachEvent(Le(o),r):t.addListener&&t.removeListener&&t.removeListener(r),(o=je(t))?(Se(o,e),0==o.b&&(o.src=null,t[Me]=null)):Te(e)}}}function Le(e){return e in Ie?Ie[e]:Ie[e]="on"+e}function Ne(e,t){if(e.A)e=!0;else{t=new he(t,this);var o=e.listener,r=e.H||e.src;e.D&&Ce(e),e=o.call(r,t)}return e}function je(e){return(e=e[Me])instanceof Re?e:null}var Be="__closure_events_fn_"+(1e9*Math.random()>>>0);function Ue(e){return"function"==typeof e?e:(e[Be]||(e[Be]=function(t){return e.handleEvent(t)}),e[Be])}function Pe(){ce.call(this),this.f=new Re(this),this.U=this}function We(e,t){e=e.U;var o=t.type||t;if("string"==typeof t)t=new fe(t,e);else if(t instanceof fe)t.target=t.target||e;else{var r=t;!function(e,t){for(var o,r,n=1;n<arguments.length;n++){for(o in r=arguments[n])e[o]=r[o];for(var s=0;s<$.length;s++)o=$[s],Object.prototype.hasOwnProperty.call(r,o)&&(e[o]=r[o])}}(t=new fe(o,e),r)}Ve(e=t.a=e,o,!0,t),Ve(e,o,!1,t)}function Ve(e,t,o,r){if(t=e.f.a[String(t)]){t=t.concat();for(var n=!0,s=0;s<t.length;++s){var i=t[s];if(i&&!i.A&&i.capture==o){var a=i.listener,g=i.H||i.src;i.D&&Se(e.f,i),n=!1!==a.call(g,r)&&n}}}}function xe(e,t,o){if("function"==typeof e)o&&(e=w(e,o));else{if(!e||"function"!=typeof e.handleEvent)throw Error("Invalid listener argument");e=w(e.handleEvent,e)}return 2147483647<Number(t)?-1:m.setTimeout(e,t||0)}function ze(e,t){this.name=e,this.value=t}D(Pe,ce),Pe.prototype[ve]=!0,Pe.prototype.addEventListener=function(e,t,o,r){Oe(this,e,t,o,r)},Pe.prototype.removeEventListener=function(e,t,o,r){Fe(this,e,t,o,r)},ze.prototype.toString=function(){return this.name};var ke,He,Ge,qe=new ze("OFF",1/0),Ye=new ze("SEVERE",1e3),Qe=new ze("CONFIG",700),Ke=new ze("FINE",500);function $e(){this.clear()}function Xe(e,t,o){this.reset(e||qe,t,o,void 0,void 0)}function Ze(e,t){this.a=null,this.f=[],this.b=(void 0===t?null:t)||null,this.c=[],this.g={a:function(){return e}}}function Je(e){return e.a?e.a:e.b?Je(e.b):(function(e,t){throw new P("Failure"+(e?": "+e:""),Array.prototype.slice.call(arguments,1))}("Root logger has no level set."),qe)}function et(){this.entries={};var e=new Ze("");e.a=Qe,this.entries[""]=e}function tt(e,t,o){var r=e.entries[t];if(r)return void 0!==o&&(r.a=o),r;r=tt(e,t.substr(0,t.lastIndexOf(".")));var n=new Ze(t,r);return e.entries[t]=n,r.c.push(n),void 0!==o&&(n.a=o),n}function ot(){return He||(He=new et),He}function rt(e,t,o){var r;(r=e)&&(r=e&&t)&&(r=(r=t.value)>=(e?Je(tt(ot(),e.a())):qe).value),r&&(t=t||qe,r=tt(ot(),e.a()),"function"==typeof o&&(o=o()),ke||(ke=new $e),function(e,t){for(;e;)e.f.forEach((function(e){e(t)})),e=e.b}(r,e=new Xe(t,o,e.a())))}function nt(e,t){e&&rt(e,Ke,t)}function st(){}function it(e){var t;return(t=e.a)||(t={},pt(e)&&(t[0]=!0,t[1]=!0),t=e.a=t),t}function at(){}function gt(e){return(e=pt(e))?new ActiveXObject(e):new XMLHttpRequest}function pt(e){if(!e.b&&"undefined"==typeof XMLHttpRequest&&"undefined"!=typeof ActiveXObject){for(var t=["MSXML2.XMLHTTP.6.0","MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP","Microsoft.XMLHTTP"],o=0;o<t.length;o++){var r=t[o];try{return new ActiveXObject(r),e.b=r}catch(e){}}throw Error("Could not create ActiveXObject. ActiveX might be disabled, or MSXML might not be installed")}return e.b}function lt(e,t){this.b=e[m.Symbol.iterator](),this.c=t,this.f=0}$e.prototype.clear=function(){},Xe.prototype.reset=function(){},st.prototype.a=null,D(at,st),Ge=new at,a(),u(),lt.prototype[Symbol.iterator]=function(){return this},lt.prototype.next=function(){var e=this.b.next();return{value:e.done?void 0:this.c.call(void 0,e.value,this.f++),done:e.done}},a(),u(),a(),u();var ut="StopIteration"in m?m.StopIteration:{message:"StopIteration",stack:""};function ct(){}function dt(e){if(e instanceof ft||e instanceof bt||e instanceof ht)return e;if("function"==typeof e.next)return new ft((function(){return yt(e)}));if(a(),u(),"function"==typeof e[Symbol.iterator])return a(),u(),new ft((function(){return e[Symbol.iterator]()}));if("function"==typeof e.u)return new ft((function(){return yt(e.u())}));throw Error("Not an iterator or iterable.")}function yt(e){if(!(e instanceof ct))return e;var t=!1;return{next:function(){for(var o;!t;)try{o=e.a();break}catch(e){if(e!==ut)throw e;t=!0}return{value:o,done:t}}}}function ft(e){this.b=e}function bt(e){this.b=e}function ht(e){ft.call(this,(function(){return e})),this.f=e}function _t(e,t){this.o={},this.j=[],this.B=this.size=0;var o=arguments.length;if(1<o){if(o%2)throw Error("Uneven number of arguments");for(var r=0;r<o;r+=2)this.set(arguments[r],arguments[r+1])}else e&&this.addAll(e)}function vt(e){if(e.size!=e.j.length){for(var t=0,o=0;t<e.j.length;){var r=e.j[t];Et(e.o,r)&&(e.j[o++]=r),t++}e.j.length=o}if(e.size!=e.j.length){var n={};for(o=t=0;t<e.j.length;)Et(n,r=e.j[t])||(e.j[o++]=r,n[r]=1),t++;e.j.length=o}}function Et(e,t){return Object.prototype.hasOwnProperty.call(e,t)}ct.prototype.next=function(){return ct.prototype.a.call(this)},ct.prototype.a=function(){throw ut},ct.prototype.u=function(){return this},a(),u(),ft.prototype.u=function(){return new bt(this.b())},ft.prototype[Symbol.iterator]=function(){return new ht(this.b())},ft.prototype.c=function(){return new ht(this.b())},a(),u(),_(bt,ct),bt.prototype.a=function(){var e=this.b.next();if(e.done)throw ut;return e.value},bt.prototype.next=function(){return bt.prototype.a.call(this)},bt.prototype[Symbol.iterator]=function(){return new ht(this.b)},bt.prototype.c=function(){return new ht(this.b)},_(ht,ft),ht.prototype.next=function(){return this.f.next()},(r=_t.prototype).G=function(){return vt(this),this.j.concat()},r.has=function(e){return Et(this.o,e)},r.clear=function(){this.o={},this.B=this.size=this.j.length=0},r.remove=function(e){return this.delete(e)},r.delete=function(e){return!!Et(this.o,e)&&(delete this.o[e],--this.size,this.B++,this.j.length>2*this.size&&vt(this),!0)},r.get=function(e,t){return Et(this.o,e)?this.o[e]:t},r.set=function(e,t){Et(this.o,e)||(this.size+=1,this.j.push(e),this.B++),this.o[e]=t},r.addAll=function(e){if(e instanceof _t)for(var t=e.G(),o=0;o<t.length;o++)this.set(t[o],e.get(t[o]));else for(t in e)this.set(t,e[t])},r.forEach=function(e,t){for(var o=this.G(),r=0;r<o.length;r++){var n=o[r],s=this.get(n);e.call(t,s,n,this)}},r.clone=function(){return new _t(this)},r.keys=function(){return dt(this.u(!0)).c()},r.values=function(){return dt(this.u(!1)).c()},r.entries=function(){var e=this;return function(e,t){return new lt(e,t)}(this.keys(),(function(t){return[t,e.get(t)]}))},r.u=function(e){vt(this);var t=0,o=this.B,r=this,n=new ct;return n.a=function(){if(o!=r.B)throw Error("The map has changed since the iterator was created");if(t>=r.j.length)throw ut;var n=r.j[t++];return e?n:r.o[n]},n.next=n.a.bind(n),n};var mt=/^(?:([^:/?#.]+):)?(?:\\/\\/(?:([^\\\\/?#]*)@)?([^\\\\/?#]*?)(?::([0-9]+))?(?=[\\\\/?#]|$))?([^?#]+)?(?:\\?([^#]*))?(?:#([\\s\\S]*))?$/;function Tt(e){Pe.call(this),this.headers=new _t,this.C=e||null,this.c=!1,this.J=this.a=null,this.P=this.v="",this.g=0,this.l="",this.i=this.N=this.s=this.L=!1,this.h=0,this.w=null,this.m=Rt,this.I=this.M=!1}D(Tt,Pe);var Rt="";Tt.prototype.b=tt(ot(),"goog.net.XhrIo",void 0).g;var St=/^https?$/i,At=["POST","PUT"];function Mt(e,t){e.c=!1,e.a&&(e.i=!0,e.a.abort(),e.i=!1),e.l=t,e.g=5,It(e),wt(e)}function It(e){e.L||(e.L=!0,We(e,"complete"),We(e,"error"))}function Ot(e){if(e.c&&void 0!==E)if(e.J[1]&&4==Ft(e)&&2==e.getStatus())nt(e.b,Lt(e,"Local request error detected and ignored"));else if(e.s&&4==Ft(e))xe(e.R,0,e);else if(We(e,"readystatechange"),4==Ft(e)){nt(e.b,Lt(e,"Request complete")),e.c=!1;try{var t,o=e.getStatus();e:switch(o){case 200:case 201:case 202:case 204:case 206:case 304:case 1223:var r=!0;break e;default:r=!1}if(!(t=r)){var n;if(n=0===o){var s=String(e.v).match(mt)[1]||null;if(!s&&m.self&&m.self.location){var i=m.self.location.protocol;s=i.substr(0,i.length-1)}n=!St.test(s?s.toLowerCase():"")}t=n}if(t)We(e,"complete"),We(e,"success");else{e.g=6;try{var a=2<Ft(e)?e.a.statusText:""}catch(t){nt(e.b,"Can not get status: "+t.message),a=""}e.l=a+" ["+e.getStatus()+"]",It(e)}}finally{wt(e)}}}function wt(e){if(e.a){Dt(e);var t=e.a,o=e.J[0]?R:null;e.a=null,e.J=null,We(e,"ready");try{t.onreadystatechange=o}catch(t){(e=e.b)&&rt(e,Ye,"Problem encountered resetting onreadystatechange: "+t.message)}}}function Dt(e){e.a&&e.I&&(e.a.ontimeout=null),e.w&&(m.clearTimeout(e.w),e.w=null)}function Ft(e){return e.a?e.a.readyState:0}function Ct(e,t){if(e.a&&4==Ft(e))return null===(e=e.a.getResponseHeader(t))?void 0:e}function Lt(e,t){return t+" ["+e.P+" "+e.v+" "+e.getStatus()+"]"}(r=Tt.prototype).T=function(){void 0!==E&&this.a&&(this.l="Timed out after "+this.h+"ms, aborting",this.g=8,nt(this.b,Lt(this,this.l)),We(this,"timeout"),this.abort(8))},r.abort=function(e){this.a&&this.c&&(nt(this.b,Lt(this,"Aborting")),this.c=!1,this.i=!0,this.a.abort(),this.i=!1,this.g=e||7,We(this,"complete"),We(this,"abort"),wt(this))},r.R=function(){this.K||(this.N||this.s||this.i?Ot(this):this.W())},r.W=function(){Ot(this)},r.getStatus=function(){try{return 2<Ft(this)?this.a.status:-1}catch(e){return-1}};var Nt={},jt=null;function Bt(){if(!jt){jt={};for(var e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),t=["+/=","+/","-_=","-_.","-_"],o=0;5>o;o++){var r=e.concat(t[o].split(""));Nt[o]=r;for(var n=0;n<r.length;n++){var s=r[n];void 0===jt[s]&&(jt[s]=n)}}}}var Ut=["content-type","grpc-status","grpc-message"];function Pt(e){this.a=e.Z,this.m=null,this.b=[],this.h=[],this.g=[],this.f=[],this.c=[],this.l=!1,this.i=0,this.s=new W;var t=this;Oe(this.a,"readystatechange",(function(){var e=t.a;if(e=e.a?e.a.getResponseHeader("Content-Type"):null){if(0==(e=e.toLowerCase()).lastIndexOf("application/grpc-web-text",0)){e=t.a;try{var o=e.a?e.a.responseText:""}catch(t){nt(e.b,"Can not get responseText: "+t.message),o=""}if(o=(e=o||"").length-e.length%4,0==(e=e.substr(t.i,o-t.i)).length)return;t.i=o,e=function(e){var t=e.length,o=3*t/4;o%3?o=Math.floor(o):q("=.",e[t-1])&&(o=q("=.",e[t-2])?o-2:o-1);var r=new Uint8Array(o),n=0;return function(e,t){function o(t){for(;r<e.length;){var o=e.charAt(r++),n=jt[o];if(null!=n)return n;if(!/^[\\s\\xa0]*$/.test(o))throw Error("Unknown base64 encoding at char: "+o)}return t}Bt();for(var r=0;;){var n=o(-1),s=o(0),i=o(64),a=o(64);if(64===a&&-1===n)break;t(n<<2|s>>4),64!=i&&(t(s<<4&240|i>>2),64!=a&&t(i<<6&192|a))}}(e,(function(e){r[n++]=e})),r.subarray(0,n)}(e)}else{if(0!=e.lastIndexOf("application/grpc",0))return void Vt(t,new j(2,"Unknown Content-type received."));e=new Uint8Array(function(e){try{if(!e.a)return null;if("response"in e.a)return e.a.response;switch(e.m){case Rt:case"text":return e.a.responseText;case"arraybuffer":if("mozResponseArrayBuffer"in e.a)return e.a.mozResponseArrayBuffer}var t=e.b;return t&&rt(t,Ye,"Response type "+e.m+" is not supported on this browser"),null}catch(t){return nt(e.b,"Can not get response: "+t.message),null}}(t.a))}o=null;try{o=function(e,t){function o(e){a.f++,a.a=(a.a<<8)+e,4==a.f&&(a.b=2,a.g=0,"undefined"!=typeof Uint8Array?a.c=new Uint8Array(a.a):a.c=Array(a.a),0==a.a&&n())}function r(e){a.c[a.g++]=e,a.g==a.a&&n()}function n(){var e={};e[a.h]=a.c,a.i.push(e),a.b=V}var s,i,a=e,g=0;for(s=t instanceof Uint8Array||t instanceof Array?t:new Uint8Array(t);g<s.length;){switch(a.b){case 3:z(a,s,g,"stream already broken");break;case V:0==(i=s[g])||i==x?a.h=i:z(a,s,g,"invalid frame byte"),a.b=1,a.a=0,a.f=0;break;case 1:o(s[g]);break;case 2:r(s[g]);break;default:throw Error("unexpected parser state: "+a.b)}a.m++,g++}return e=a.i,a.i=[],0<e.length?e:null}(t.s,e)}catch(e){Vt(t,new j(2,"Error in parsing response body"))}if(o)for(e=0;e<o.length;e++){if(0 in o[e]){var r=o[e][0];if(r){var n=void 0;try{n=t.m(r)}catch(e){Vt(t,new j(13,"Error when deserializing response data: "+n))}if(n){r=t;for(var s=0;s<r.b.length;s++)r.b[s](n)}}}if(x in o[e]&&0<o[e][x].length){for(r="",n=0;n<o[e][x].length;n++)r+=String.fromCharCode(o[e][x][n]);for(r=r.trim().split("\\r\\n"),n={},s=0;s<r.length;s++){var i=r[s].indexOf(":");n[r[s].substring(0,i).trim()]=r[s].substring(i+1).trim()}r=n,n=0,s="","grpc-status"in r&&(n=Number(r["grpc-status"]),delete r["grpc-status"]),"grpc-message"in r&&(s=r["grpc-message"],delete r["grpc-message"]),Vt(t,new j(n,s,r))}}}})),Oe(this.a,"complete",(function(){var e=t.a.g,o=2,r="",n={},s=function(e){var t={};e=(e.a&&4==Ft(e)&&e.a.getAllResponseHeaders()||"").split("\\r\\n");for(var o=0;o<e.length;o++)if(!/^[\\s\\xa0]*$/.test(e[o])){var r=X(e[o]),n=r[0];if("string"==typeof(r=r[1])){r=r.trim();var s=t[n]||[];t[n]=s,s.push(r)}}return function(e,t){var o,r={};for(o in e)r[o]=t.call(void 0,e[o],o,e);return r}(t,(function(e){return e.join(", ")}))}(t.a);if(Object.keys(s).forEach((function(e){Ut.includes(e)||(n[e]=s[e])})),function(e,t){for(var o=0;o<e.g.length;o++)e.g[o](t)}(t,n),0!=e){switch(e){case 7:o=10;break;case 8:o=4;break;case 6:o=function(e){switch(e){case 200:return 0;case 400:return 3;case 401:return 16;case 403:return 7;case 404:return 5;case 409:return 10;case 412:return 9;case 429:return 8;case 499:return 1;case 500:default:return 2;case 501:return 12;case 503:return 14;case 504:return 4}}(t.a.getStatus());break;default:o=14}10==o&&t.l||Vt(t,new j(o,function(e){switch(e){case 0:return"No Error";case 1:return"Access denied to content document";case 2:return"File not found";case 3:return"Firefox silently errored";case 4:return"Application custom error";case 5:return"An exception occurred";case 6:return"Http response at 400 or 500 level";case 7:return"Request was aborted";case 8:return"Request timed out";case 9:return"The resource is not available offline";default:return"Unrecognized error code"}}(e)))}else e=!1,"grpc-status"in s&&(o=Number(Ct(t.a,"grpc-status")),"grpc-message"in s&&(r=Ct(t.a,"grpc-message")),0!=o&&(Vt(t,new j(o,r||"",s)),e=!0)),e||function(e){for(var t=0;t<e.c.length;t++)e.c[t]()}(t)}))}function Wt(e,t){-1<(t=e.indexOf(t))&&e.splice(t,1)}function Vt(e,t){if(0!=t.code)for(var o=new j(t.code,decodeURIComponent(t.message||""),t.metadata),r=0;r<e.f.length;r++)e.f[r](o);for(t={code:t.code,details:decodeURIComponent(t.message||""),metadata:t.metadata},o=0;o<e.h.length;o++)e.h[o](t)}function xt(e,t){e=void 0===e?{}:e,this.a=e.format||T("format",e)||"text",this.g=e.aa||T("suppressCorsPreflight",e)||!1,this.f=e.withCredentials||T("withCredentials",e)||!1,this.b=e.$||T("streamInterceptors",e)||[],this.h=e.ba||T("unaryInterceptors",e)||[],this.c=t||null}function zt(e,t,o){var r=t.getMethodDescriptor(),n=o+r.name;(o=e.c?e.c:new Tt).M=e.f;var s=new Pt({Z:o});s.m=r.b;var i=t.getMetadata();for(a in i)o.headers.set(a,i[a]);if("text"==e.a?(o.headers.set("Content-Type","application/grpc-web-text"),o.headers.set("Accept","application/grpc-web-text")):o.headers.set("Content-Type","application/grpc-web+proto"),o.headers.set("X-User-Agent","grpc-web-javascript/0.1"),o.headers.set("X-Grpc-Web","1"),o.headers.has("deadline")){var a=Number(o.headers.get("deadline"));a=Math.ceil(a-(new Date).getTime()),o.headers.delete("deadline"),1/0===a&&(a=0),0<a&&(o.headers.set("grpc-timeout",a+"m"),o.h=Math.max(0,Math.max(1e3,Math.ceil(1.1*a))))}if(e.g){a={};for(var g=c((i=o.headers).keys()),p=g.next();!p.done;p=g.next())a[p=p.value]=i.get(p);o.headers.clear();e:{for(l in a){var l=!1;break e}l=!0}l||(a=function(e){var t="";return function(e,t){for(var o in e)t.call(void 0,e[o],o,e)}(e,(function(e,o){t+=o,t+=":",t+=e,t+="\\r\\n"})),t}(a),"string"==typeof n?(l=encodeURIComponent("$httpHeaders"),(l+=a=null!=a?"="+encodeURIComponent(String(a)):"")&&(0>(a=n.indexOf("#"))&&(a=n.length),0>(i=n.indexOf("?"))||i>a?(i=a,g=""):g=n.substring(i+1,a),a=(n=[n.substr(0,i),g,n.substr(a)])[1],n[1]=l?a?a+"&"+l:l:a,n=n[0]+(n[1]?"?"+n[1]:"")+n[2])):n.a("$httpHeaders",a))}for(r=(t=(0,r.a)(t.getRequestMessage())).length,l=[0,0,0,0],a=new Uint8Array(5+r),i=3;0<=i;i--)l[i]=r%256,r>>>=8;if(a.set(new Uint8Array(l),1),a.set(t,5),t=a,"text"==e.a){var u;for(e=t,void 0===u&&(u=0),Bt(),u=Nt[u],t=Array(Math.floor(e.length/3)),r=u[64]||"",l=a=0;a<e.length-2;a+=3){p=e[a];var d=e[a+1];g=e[a+2],i=u[p>>2],p=u[(3&p)<<4|d>>4],d=u[(15&d)<<2|g>>6],g=u[63&g],t[l++]=i+p+d+g}switch(i=0,g=r,e.length-a){case 2:g=u[(15&(i=e[a+1]))<<2]||r;case 1:e=e[a],t[l]=u[e>>2]+u[(3&e)<<4|i>>4]+g+r}t=t.join("")}else"binary"==e.a&&(o.m="arraybuffer");return function(e,t,o){if(e.a)throw Error("[goog.net.XhrIo] Object is active with another request="+e.v+"; newUri="+t);e.v=t,e.l="",e.g=0,e.P="POST",e.L=!1,e.c=!0,e.a=e.C?gt(e.C):gt(Ge),e.J=e.C?it(e.C):it(Ge),e.a.onreadystatechange=w(e.R,e);try{nt(e.b,Lt(e,"Opening Xhr")),e.N=!0,e.a.open("POST",String(t),!0),e.N=!1}catch(t){return nt(e.b,Lt(e,"Error opening Xhr: "+t.message)),void Mt(e,t)}t=o||"";var r=(o=e.headers.clone()).G().find((function(e){return"content-type"==e.toLowerCase()})),n=m.FormData&&t instanceof m.FormData;!(0<=H(At,"POST"))||r||n||o.set("Content-Type","application/x-www-form-urlencoded;charset=utf-8"),o.forEach((function(e,t){this.a.setRequestHeader(t,e)}),e),e.m&&(e.a.responseType=e.m),"withCredentials"in e.a&&e.a.withCredentials!==e.M&&(e.a.withCredentials=e.M);try{Dt(e),0<e.h&&(e.I=function(e){return oe&&ue()&&"number"==typeof e.timeout&&void 0!==e.ontimeout}(e.a),nt(e.b,Lt(e,"Will abort after "+e.h+"ms if incomplete, xhr2 "+e.I)),e.I?(e.a.timeout=e.h,e.a.ontimeout=w(e.T,e)):e.w=xe(e.T,e.h,e)),nt(e.b,Lt(e,"Sending request")),e.s=!0,e.a.send(t),e.s=!1}catch(t){nt(e.b,Lt(e,"Send error: "+t.message)),Mt(e,t)}}(o,n,t),s}function kt(e,t,o){var r=!1,n=null,s=!1;e.on("data",(function(e){r=!0,n=e})),e.on("error",(function(e){0==e.code||s||(s=!0,t(e,null))})),e.on("status",(function(e){0==e.code||s?o&&t(null,null,e):(s=!0,t({code:e.code,message:e.details,metadata:e.metadata},null))})),o&&e.on("metadata",(function(e){t(null,null,null,e)})),e.on("end",(function(){s||(r?t(null,n):t({code:2,message:"Incomplete response"})),o&&t(null,null)}))}function Ht(e,t){var o=e;return t.forEach((function(e){var t=o;o=function(o){return e.intercept(o,t)}})),o}Pt.prototype.on=function(e,t){return"data"==e?this.b.push(t):"status"==e?this.h.push(t):"metadata"==e?this.g.push(t):"end"==e?this.c.push(t):"error"==e&&this.f.push(t),this},Pt.prototype.removeListener=function(e,t){return"data"==e?Wt(this.b,t):"status"==e?Wt(this.h,t):"metadata"==e?Wt(this.g,t):"end"==e?Wt(this.c,t):"error"==e&&Wt(this.f,t),this},Pt.prototype.cancel=function(){this.l=!0,this.a.abort()},Pt.prototype.cancel=Pt.prototype.cancel,Pt.prototype.removeListener=Pt.prototype.removeListener,Pt.prototype.on=Pt.prototype.on,xt.prototype.X=function(e,t,o,r,n){var s=this,i=e.substr(0,e.length-r.name.length);return kt(e=Ht((function(e){return zt(s,e,i)}),this.b).call(this,N(r,t,o)),n,!1),new B(e)},xt.prototype.S=function(e,t,o,r){var n=this,s=e.substr(0,e.length-r.name.length);return Ht((function(e){return new Promise((function(t,o){var r,i,a;kt(zt(n,e,s),(function(n,s,g,p){n?o(n):s?a=s:g?i=g:p?r=p:(n=e.getMethodDescriptor(),t(new L(a,n,s=void 0===(s=r)?{}:s,void 0===i?null:i)))}),!0)}))}),this.h).call(this,N(r,t,o)).then((function(e){return e.getResponseMessage()}))},xt.prototype.unaryCall=function(e,t,o,r){return this.S(e,t,o,r)},xt.prototype.Y=function(e,t,o,r){var n=this,s=e.substr(0,e.length-r.name.length);return Ht((function(e){return zt(n,e,s)}),this.b).call(this,N(r,t,o))},xt.prototype.serverStreaming=xt.prototype.Y,xt.prototype.unaryCall=xt.prototype.unaryCall,xt.prototype.thenableCall=xt.prototype.S,xt.prototype.rpcCall=xt.prototype.X,e.exports.GrpcWebClientBase=xt,e.exports.StatusCode={OK:0,CANCELLED:1,UNKNOWN:2,INVALID_ARGUMENT:3,DEADLINE_EXCEEDED:4,NOT_FOUND:5,ALREADY_EXISTS:6,PERMISSION_DENIED:7,UNAUTHENTICATED:16,RESOURCE_EXHAUSTED:8,FAILED_PRECONDITION:9,ABORTED:10,OUT_OF_RANGE:11,UNIMPLEMENTED:12,INTERNAL:13,UNAVAILABLE:14,DATA_LOSS:15},e.exports.MethodDescriptor=function(e,t,o,r,n,s){this.name=e,this.a=n,this.b=s},e.exports.MethodType={UNARY:"unary",SERVER_STREAMING:"server_streaming",BIDI_STREAMING:"bidi_streaming"}}},__webpack_module_cache__={};function __nested_webpack_require_435574__(e){var t=__webpack_module_cache__[e];if(void 0!==t)return t.exports;var o=__webpack_module_cache__[e]={exports:{}};return __webpack_modules__[e].call(o.exports,o,o.exports,__nested_webpack_require_435574__),o.exports}__nested_webpack_require_435574__.d=(e,t)=>{for(var o in t)__nested_webpack_require_435574__.o(t,o)&&!__nested_webpack_require_435574__.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:t[o]})},__nested_webpack_require_435574__.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),__nested_webpack_require_435574__.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),__nested_webpack_require_435574__.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var __nested_webpack_exports__={};return(()=>{"use strict";__nested_webpack_require_435574__.r(__nested_webpack_exports__),__nested_webpack_require_435574__.d(__nested_webpack_exports__,{Entity:()=>i,EntityACI:()=>d,EntityACL:()=>y,Property:()=>r,TransactionService:()=>M});var e=__nested_webpack_require_435574__(347);function t(e,t){for(var o=0;o<t.length;o++){var r=t[o];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function o(t){var o=e.h.v1.ScalarValue.ScalarValueCase;switch(t.getScalarValueCase()){case o.SCALAR_VALUE_NOT_SET:return;case o.INTEGER_VALUE:return t.getIntegerValue();case o.DOUBLE_VALUE:return t.getDoubleValue();case o.BOOLEAN_VALUE:return t.getBooleanValue();case o.STRING_VALUE:return t.getStringValue();case o.SPECIAL_VALUE:return t.getSpecialValue();default:throw new Error("Unkown value type ".concat(t.getScalarValueCase(),"."))}}var r=function(){function r(e){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,r),this.wrappedProperty=e}var n,s;return n=r,(s=[{key:"getName",value:function(){return this.wrappedProperty.getName()}},{key:"getId",value:function(){return this.wrappedProperty.getId()}},{key:"getUnit",value:function(){return this.wrappedProperty.getUnit()}},{key:"getValue",value:function(){var t=this.wrappedProperty.getValue();if(void 0!==t){var r=e.h.v1.Value.ValueCase;switch(t.getValueCase()){case r.VALUE_NOT_SET:return;case r.SCALAR_VALUE:return o(t.getScalarValue());case r.LIST_VALUES:return t.getListValues().getValuesList().map((function(e){return o(e)}));default:throw new Error("Unknown value type ".concat(t.getValueCase(),"."))}}}},{key:"isList",value:function(){return this.wrappedProperty.getDataType().getDataTypeCase()===e.h.v1.DataType.DataTypeCase.LIST_DATA_TYPE}},{key:"isReference",value:function(){var t=this.wrappedProperty.getDataType(),o=t.getDataTypeCase();return o===e.h.v1.DataType.DataTypeCase.REFERENCE_DATA_TYPE||o===e.h.v1.DataType.DataTypeCase.LIST_DATA_TYPE&&t.getListDataType().getListDataTypeCase()===e.h.v1.ListDataType.ListDataTypeCase.REFERENCE_DATA_TYPE}}])&&t(n.prototype,s),r}();function n(e,t){(null==t||t>e.length)&&(t=e.length);for(var o=0,r=new Array(t);o<t;o++)r[o]=e[o];return r}function s(e,t){for(var o=0;o<t.length;o++){var r=t[o];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}var i=function(){function t(e){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),this.wrappedEntity=e}var o,i;return o=t,(i=[{key:"getDescription",value:function(){return this.wrappedEntity.getDescription()}},{key:"getFilePath",value:function(){if(!this.isFile())throw new Error("Only FILE entities can have a file path.");return this.wrappedEntity.getFileDescriptor().getPath()}},{key:"getId",value:function(){return this.wrappedEntity.getId()}},{key:"getName",value:function(){return this.wrappedEntity.getName()}},{key:"getParents",value:function(){return this.wrappedEntity.getParentsList()}},{key:"getProperties",value:function(){return this.wrappedEntity.getPropertiesList().map((function(e){return new r(e)}))}},{key:"getProperty",value:function(e){var t=this.getProperties();if(t){var o,r=function(e,t){var o="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!o){if(Array.isArray(e)||(o=function(e,t){if(e){if("string"==typeof e)return n(e,t);var o=Object.prototype.toString.call(e).slice(8,-1);return"Object"===o&&e.constructor&&(o=e.constructor.name),"Map"===o||"Set"===o?Array.from(e):"Arguments"===o||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(o)?n(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){o&&(e=o);var r=0,s=function(){};return{s,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:s}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,g=!1;return{s:function(){o=o.call(e)},n:function(){var e=o.next();return a=e.done,e},e:function(e){g=!0,i=e},f:function(){try{a||null==o.return||o.return()}finally{if(g)throw i}}}}(t);try{for(r.s();!(o=r.n()).done;){var s=o.value;if(s.getName().toLowerCase()===e.toLowerCase())return s}}catch(e){r.e(e)}finally{r.f()}}}},{key:"getRole",value:function(){return function(t){var o=e.h.v1.EntityRole;switch(t){case o.ENTITY_ROLE_UNSPECIFIED:return;case o.ENTITY_ROLE_RECORD_TYPE:return"RECORD_TYPE";case o.ENTITY_ROLE_RECORD:return"RECORD";case o.ENTITY_ROLE_PROPERTY:return"PROPERTY";case o.ENTITY_ROLE_FILE:return"FILE";default:throw new Error("Unknown role ".concat(t,"."))}}(this.wrappedEntity.getRole())}},{key:"isRecord",value:function(){return this.wrappedEntity.getRole()===e.h.v1.EntityRole.ENTITY_ROLE_RECORD}},{key:"isFile",value:function(){return this.wrappedEntity.getRole()===e.h.v1.EntityRole.ENTITY_ROLE_FILE}}])&&s(o.prototype,i),t}();function a(e,t){var o="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!o){if(Array.isArray(e)||(o=function(e,t){if(e){if("string"==typeof e)return g(e,t);var o=Object.prototype.toString.call(e).slice(8,-1);return"Object"===o&&e.constructor&&(o=e.constructor.name),"Map"===o||"Set"===o?Array.from(e):"Arguments"===o||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(o)?g(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){o&&(e=o);var r=0,n=function(){};return{s:n,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:n}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var s,i=!0,a=!1;return{s:function(){o=o.call(e)},n:function(){var e=o.next();return i=e.done,e},e:function(e){a=!0,s=e},f:function(){try{i||null==o.return||o.return()}finally{if(a)throw s}}}}function g(e,t){(null==t||t>e.length)&&(t=e.length);for(var o=0,r=new Array(t);o<t;o++)r[o]=e[o];return r}function p(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function l(e,t){for(var o=0;o<t.length;o++){var r=t[o];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function u(e,t,o){return t&&l(e.prototype,t),o&&l(e,o),e}var c,d=function(){function e(t){var o=t.role,r=t.grant,n=t.priority,s=t.permissions,i=t.capabilities;p(this,e),this.role=o,this.grant=r,this.priority=n,this.permissions=s||{retrieve_entity:!1,retrieve_acl:!1,retrieve_history:!1,retrieve_owner:!1,retrieve_file:!1,delete_entity:!1,edit_acl:!1,update_description:!1,update_value:!1,update_role:!1,update_remove_parent:!1,update_add_parent:!1,update_remove_property:!1,update_add_property:!1,update_name:!1,update_data_type:!1,update_query_template_definition:!1,update_remove_file:!1,update_add_file:!1,update_move_file:!1,use_as_reference:!1,use_as_property:!1,use_as_parent:!1,use_as_data_type:!1},this.capabilities=i||{delete_aci:!1}}return u(e,[{key:"isEditAcl",value:function(){return this.permissions.edit_acl}},{key:"setEditAcl",value:function(e){e=void 0===e||e,this.permissions.edit_acl=e}},{key:"isDelete",value:function(){return this.permissions.delete_entity}},{key:"setDelete",value:function(e){e=void 0===e||e,this.permissions.delete_entity=e}},{key:"isFullRetrieve",value:function(){return this.permissions.retrieve_entity&&this.permissions.retrieve_acl&&this.permissions.retrieve_history&&this.permissions.retrieve_owner&&this.permissions.retrieve_file}},{key:"setFullRetrieve",value:function(e){e=void 0===e||e,this.permissions.retrieve_entity=e,this.permissions.retrieve_acl=e,this.permissions.retrieve_history=e,this.permissions.retrieve_owner=e,this.permissions.retrieve_file=e}},{key:"isPartialRetrieve",value:function(){return this.permissions.retrieve_entity||this.permissions.retrieve_acl||this.permissions.retrieve_history||this.permissions.retrieve_owner||this.permissions.retrieve_file}},{key:"isFullUse",value:function(){return this.permissions.use_as_reference&&this.permissions.use_as_property&&this.permissions.use_as_parent&&this.permissions.use_as_data_type}},{key:"setFullUse",value:function(e){e=void 0===e||e,this.permissions.use_as_reference=e,this.permissions.use_as_property=e,this.permissions.use_as_parent=e,this.permissions.use_as_data_type=e}},{key:"isPartialUse",value:function(){return this.permissions.use_as_reference||this.permissions.use_as_property||this.permissions.use_as_parent||this.permissions.use_as_data_type}},{key:"isFullUpdate",value:function(){return this.permissions.update_description&&this.permissions.update_value&&this.permissions.update_role&&this.permissions.update_remove_parent&&this.permissions.update_add_parent&&this.permissions.update_remove_property&&this.permissions.update_add_property&&this.permissions.update_name&&this.permissions.update_data_type&&this.permissions.update_query_template_definition&&this.permissions.update_remove_file&&this.permissions.update_add_file&&this.permissions.update_move_file}},{key:"setFullUpdate",value:function(e){e=void 0===e||e,this.permissions.update_description=e,this.permissions.update_value=e,this.permissions.update_role=e,this.permissions.update_remove_parent=e,this.permissions.update_add_parent=e,this.permissions.update_remove_property=e,this.permissions.update_add_property=e,this.permissions.update_name=e,this.permissions.update_data_type=e,this.permissions.update_query_template_definition=e,this.permissions.update_remove_file=e,this.permissions.update_add_file=e,this.permissions.update_move_file=e}},{key:"isPartialUpdate",value:function(){return this.permissions.update_description||this.permissions.update_value||this.permissions.update_role||this.permissions.update_remove_parent||this.permissions.update_add_parent||this.permissions.update_remove_property||this.permissions.update_add_property||this.permissions.update_name||this.permissions.update_data_type||this.permissions.update_query_template_definition||this.permissions.update_remove_file||this.permissions.update_add_file||this.permissions.update_move_file}},{key:"impliesOwnership",value:function(){return this.grant&&!this.isOtherRole()&&!this.isOwnerRole()&&this.permissions.edit_acl}},{key:"isOtherRole",value:function(){return"?OTHER?"===this.role}},{key:"isOwnerRole",value:function(){return"?OWNER?"===this.role}}]),e}(),y=function(){function e(t){var o=t.id,r=t.acis,n=t.current_permissions;p(this,e),this.id=o,this.acis=r||[],this.current_permissions=n||{}}return u(e,[{key:"getOwners",value:function(){return this.acis.filter((function(e){return e.impliesOwnership()})).map((function(e){return e.role}))}}]),e}(),f={retrieve_entity:e.h.v1.EntityPermission.ENTITY_PERMISSION_RETRIEVE_ENTITY,retrieve_acl:e.h.v1.EntityPermission.ENTITY_PERMISSION_RETRIEVE_ACL,retrieve_history:e.h.v1.EntityPermission.ENTITY_PERMISSION_RETRIEVE_HISTORY,retrieve_owner:e.h.v1.EntityPermission.ENTITY_PERMISSION_RETRIEVE_OWNER,retrieve_file:e.h.v1.EntityPermission.ENTITY_PERMISSION_RETRIEVE_FILE,delete_entity:e.h.v1.EntityPermission.ENTITY_PERMISSION_DELETE,edit_acl:e.h.v1.EntityPermission.ENTITY_PERMISSION_EDIT_ACL,update_description:e.h.v1.EntityPermission.ENTITY_PERMISSION_UPDATE_DESCRIPTION,update_value:e.h.v1.EntityPermission.ENTITY_PERMISSION_UPDATE_VALUE,update_role:e.h.v1.EntityPermission.ENTITY_PERMISSION_UPDATE_ROLE,update_remove_parent:e.h.v1.EntityPermission.ENTITY_PERMISSION_UPDATE_REMOVE_PARENT,update_add_parent:e.h.v1.EntityPermission.ENTITY_PERMISSION_UPDATE_ADD_PARENT,update_remove_property:e.h.v1.EntityPermission.ENTITY_PERMISSION_UPDATE_REMOVE_PROPERTY,update_add_property:e.h.v1.EntityPermission.ENTITY_PERMISSION_UPDATE_ADD_PROPERTY,update_name:e.h.v1.EntityPermission.ENTITY_PERMISSION_UPDATE_NAME,update_data_type:e.h.v1.EntityPermission.ENTITY_PERMISSION_UPDATE_DATA_TYPE,update_query_template_definition:e.h.v1.EntityPermission.ENTITY_PERMISSION_UPDATE_QUERY_TEMPLATE_DEFINITION,update_remove_file:e.h.v1.EntityPermission.ENTITY_PERMISSION_UPDATE_REMOVE_FILE,update_add_file:e.h.v1.EntityPermission.ENTITY_PERMISSION_UPDATE_ADD_FILE,update_move_file:e.h.v1.EntityPermission.ENTITY_PERMISSION_UPDATE_MOVE_FILE,use_as_reference:e.h.v1.EntityPermission.ENTITY_PERMISSION_USE_AS_REFERENCE,use_as_property:e.h.v1.EntityPermission.ENTITY_PERMISSION_USE_AS_PROPERTY,use_as_parent:e.h.v1.EntityPermission.ENTITY_PERMISSION_USE_AS_PARENT,use_as_data_type:e.h.v1.EntityPermission.ENTITY_PERMISSION_USE_AS_DATA_TYPE},b=(c={},Object.keys(f).forEach((function(e){c[f[e]]=e})),c);function h(t){var o=t.getRole(),r=t.getGrant(),n=t.getPriority(),s=t.getPermissionsList(),i=t.getCapabilitiesList(),g=new d({role:o,grant:r,priority:n});return g.permissions=function(e){var t,o={},r=a(e);try{for(r.s();!(t=r.n()).done;){var n=t.value;o[b[n]]=!0}}catch(e){r.e(e)}finally{r.f()}return o}(s),g.capabilities=function(t){var o,r={},n=a(t);try{for(n.s();!(o=n.n()).done;)o.value===e.h.v1.EntityPermissionRuleCapability.ENTITY_PERMISSION_RULE_CAPABILITY_DELETE&&(r.delete_aci=!0)}catch(e){n.e(e)}finally{n.f()}return r}(i),g}function _(t){var o={edit_acl:!1,edit_priority_acl:!1};return t===e.h.v1.EntityAclPermission.ENTITY_ACL_PERMISSION_EDIT_ACL?o.edit_acl=!0:t===e.h.v1.EntityAclPermission.ENTITY_ACL_PERMISSION_EDIT_PRIORITY_ACL&&(o.edit_acl=!0,o.edit_priority_acl=!0),o}function v(e){var t=e.getId(),o=e.getRulesList(),r=e.getPermission();return new y({id:t,acis:o.map(h),current_permissions:_(r)})}function E(t){var o=new e.h.v1.EntityPermissionRule;return o.setRole(t.role),o.setPriority(t.priority),o.setGrant(t.grant),o.setPermissionsList(Object.keys(t.permissions).filter((function(e){return t.permissions[e]&&f[e]})).map((function(e){return f[e]}))),o}function m(t){var o=new e.h.v1.EntityACL;return o.setId(t.id),o.setRulesList(t.acis.map(E)),o}function T(e,t,o,r,n,s,i){try{var a=e[s](i),g=a.value}catch(e){return void o(e)}a.done?t(g):Promise.resolve(g).then(r,n)}function R(e){return function(){var t=this,o=arguments;return new Promise((function(r,n){var s=e.apply(t,o);function i(e){T(s,r,n,i,a,"next",e)}function a(e){T(s,r,n,i,a,"throw",e)}i(void 0)}))}}function S(e,t){(null==t||t>e.length)&&(t=e.length);for(var o=0,r=new Array(t);o<t;o++)r[o]=e[o];return r}function A(e,t){for(var o=0;o<t.length;o++){var r=t[o];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}var M=function(){function t(e){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),this.uri=e||"/api"}var o,r,n,s,i,a;return o=t,r=[{key:"_PrepareTransaction",value:function(t){Array.isArray(t)||(t=[t]);var o,r,n=new e.h.v1.EntityTransactionServiceClient(this.uri,null,null),s=new e.h.v1.MultiTransactionRequest,i=function(e,t){var o="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!o){if(Array.isArray(e)||(o=function(e,t){if(e){if("string"==typeof e)return S(e,t);var o=Object.prototype.toString.call(e).slice(8,-1);return"Object"===o&&e.constructor&&(o=e.constructor.name),"Map"===o||"Set"===o?Array.from(e):"Arguments"===o||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(o)?S(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){o&&(e=o);var r=0,n=function(){};return{s:n,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:n}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var s,i=!0,a=!1;return{s:function(){o=o.call(e)},n:function(){var e=o.next();return i=e.done,e},e:function(e){a=!0,s=e},f:function(){try{i||null==o.return||o.return()}finally{if(a)throw s}}}}(t);try{for(i.s();!(r=i.n()).done;){var a=r.value;(o=new e.h.v1.TransactionRequest).setRetrieveRequest(a),s.addRequests(o)}}catch(e){i.e(e)}finally{i.f()}var g={};return function(e,t){n.multiTransaction(s,g,(function(o,r){o&&t(o),e(r)}))}}},{key:"_CreateRetrieveRequest",value:function(t){var o=new e.h.v1.RetrieveRequest;return o.setId(t),o.setRegisterFileDownload(!1),o}},{key:"_CreateQueryRequest",value:function(t){var o=new e.h.v1.Query;o.setQuery(t);var r=new e.h.v1.RetrieveRequest;return r.setQuery(o),r.setRegisterFileDownload(!1),r}},{key:"retrieve",value:(a=R(regeneratorRuntime.mark((function e(t){var o,r=this;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return Array.isArray(t)||(t=[t]),o=t.map((function(e){return r._CreateRetrieveRequest(e)})),e.abrupt("return",new Promise(this._PrepareTransaction(o)));case 3:case"end":return e.stop()}}),e,this)}))),function(e){return a.apply(this,arguments)})},{key:"executeQuery",value:(i=R(regeneratorRuntime.mark((function e(t){var o;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return o=this._CreateQueryRequest(t),e.abrupt("return",new Promise(this._PrepareTransaction(o)));case 2:case"end":return e.stop()}}),e,this)}))),function(e){return i.apply(this,arguments)})},{key:"retrieveEntityAcl",value:(s=R(regeneratorRuntime.mark((function t(o){var r,n,s;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return r=new e.h.v1.EntityTransactionServicePromiseClient(this.uri,null,null),(n=new e.h.v1.MultiRetrieveEntityACLRequest).addId(o),t.next=5,r.multiRetrieveEntityACL(n,{});case 5:return s=t.sent,t.abrupt("return",v(s.getAclsList()[0]));case 7:case"end":return t.stop()}}),t,this)}))),function(e){return s.apply(this,arguments)})},{key:"updateEntityAcl",value:(n=R(regeneratorRuntime.mark((function t(o){var r,n,s,i;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return r=m(o),n=new e.h.v1.EntityTransactionServicePromiseClient(this.uri,null,null),(s=new e.h.v1.MultiUpdateEntityACLRequest).setAclsList([r]),t.next=6,n.multiUpdateEntityACL(s,{});case 6:return i=t.sent,t.abrupt("return",i);case 8:case"end":return t.stop()}}),t,this)}))),function(e){return n.apply(this,arguments)})}],r&&A(o.prototype,r),t}()})(),__nested_webpack_exports__})()}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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VywrR0FBK0csaUJBQWlCLGNBQWMsZUFBZSw4RUFBOEUsNEJBQTRCLGdCQUFnQixlQUFlLDRDQUE0QywwQkFBMEIsNkhBQTZILHNFQUFzRSxPQUFPLHNDQUFzQyxNQUFNLG9DQUFvQyxvREFBb0QsZ0xBQWdMLHVDQUF1QyxTQUFTLHVCQUF1QixPQUFPLGlCQUFpQixvQkFBb0IsUUFBUSxFQUFFLHNCQUFzQixlQUFlLFFBQVEsTUFBTSw2SkFBNkosZ0JBQWdCLE9BQU8sYUFBYSxZQUFZLGNBQWMsZUFBZSxrQkFBa0IsZUFBZSxTQUFTLGNBQWMsSUFBSSw4QkFBOEIsUUFBUSxnQkFBZ0IsSUFBSSxJQUFJLFVBQVUsZ0JBQWdCLEVBQUUsY0FBYywwRUFBMEUsU0FBUyxPQUFPLFFBQVEsTUFBTSxTQUFTLHFCQUFxQixzQ0FBc0MsYUFBYSxLQUFLLEVBQUUsK0NBQStDLGlDQUFpQyxtREFBbUQsRUFBRSw0Q0FBNEMsdUJBQXVCLGNBQWMsaUNBQWlDLHNEQUFzRCxFQUFFLGlFQUFpRSxhQUFhLDRDQUE0QyxNQUFNLHVCQUF1Qiw2REFBNkQsbUNBQW1DLCtEQUErRCxrQ0FBa0MsVUFBVSxnQkFBZ0IsK0JBQStCLEVBQUUsRUFBRSxxRUFBcUUsTUFBTSw0Q0FBNEMsTUFBTSx1QkFBdUIsd0dBQXdHLGtDQUFrQyxVQUFVLGdCQUFnQiwrQkFBK0IsRUFBRSxFQUFFLDBFQUEwRSxVQUFVLDRDQUE0QyxNQUFNLHVCQUF1QixpTEFBaUwsRUFBRSxnRUFBZ0Usa0NBQWtDLFVBQVUsZ0JBQWdCLCtCQUErQixFQUFFLEVBQUUsd0VBQXdFLFlBQVksNENBQTRDLE1BQU0sdUJBQXVCLDRMQUE0TCxFQUFFLDRDQUE0QyxrQ0FBa0MsVUFBVSxnQkFBZ0IsK0JBQStCLEVBQUUsd0JBQXdCLEdBQUcsSUFBSSwwQkFBbUIsQ0FBQyxJQUFJIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQ2Fvc0RCV2VidWkyLy4vbm9kZV9tb2R1bGVzL0BpbmRpc2NhbGUvY2Fvc2RiLXdlYnVpLWVudGl0eS1zZXJ2aWNlL2Rpc3QvY2Fvc2RiLXdlYnVpLWVudGl0eS1zZXJ2aWNlLmpzPzQzMGMiXSwic291cmNlc0NvbnRlbnQiOlsiIWZ1bmN0aW9uKGUsdCl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwib2JqZWN0XCI9PXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9dCgpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW10sdCk6XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHM/ZXhwb3J0cy5DYW9zREJFbnRpdHlTZXJ2aWNlPXQoKTplLkNhb3NEQkVudGl0eVNlcnZpY2U9dCgpfShzZWxmLChmdW5jdGlvbigpe3JldHVybigoKT0+e3ZhciBfX3dlYnBhY2tfbW9kdWxlc19fPXszNDc6KGUsdCxvKT0+e3ZhciByPXt9O3IudjE9byg0MDApLHQuaD1yfSw0MDA6KGUsdCxvKT0+e3ZhciByPXt9O3Iud2ViPW8oNDApO3ZhciBuPXtjYW9zZGI6e319O24uY2Fvc2RiLmVudGl0eT17fSxuLmNhb3NkYi5lbnRpdHkudjE9bygyMjYpLG4uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlUcmFuc2FjdGlvblNlcnZpY2VDbGllbnQ9ZnVuY3Rpb24oZSx0LG8pe298fChvPXt9KSxvLmZvcm1hdD1cInRleHRcIix0aGlzLmNsaWVudF89bmV3IHIud2ViLkdycGNXZWJDbGllbnRCYXNlKG8pLHRoaXMuaG9zdG5hbWVfPWUucmVwbGFjZSgvXFwvKyQvLFwiXCIpfSxuLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5VHJhbnNhY3Rpb25TZXJ2aWNlUHJvbWlzZUNsaWVudD1mdW5jdGlvbihlLHQsbyl7b3x8KG89e30pLG8uZm9ybWF0PVwidGV4dFwiLHRoaXMuY2xpZW50Xz1uZXcgci53ZWIuR3JwY1dlYkNsaWVudEJhc2UobyksdGhpcy5ob3N0bmFtZV89ZS5yZXBsYWNlKC9cXC8rJC8sXCJcIil9O3ZhciBzPW5ldyByLndlYi5NZXRob2REZXNjcmlwdG9yKFwiL2Nhb3NkYi5lbnRpdHkudjEuRW50aXR5VHJhbnNhY3Rpb25TZXJ2aWNlL011bHRpVHJhbnNhY3Rpb25cIixyLndlYi5NZXRob2RUeXBlLlVOQVJZLG4uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVRyYW5zYWN0aW9uUmVxdWVzdCxuLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlUcmFuc2FjdGlvblJlc3BvbnNlLChmdW5jdGlvbihlKXtyZXR1cm4gZS5zZXJpYWxpemVCaW5hcnkoKX0pLG4uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVRyYW5zYWN0aW9uUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnkpO24uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlUcmFuc2FjdGlvblNlcnZpY2VDbGllbnQucHJvdG90eXBlLm11bHRpVHJhbnNhY3Rpb249ZnVuY3Rpb24oZSx0LG8pe3JldHVybiB0aGlzLmNsaWVudF8ucnBjQ2FsbCh0aGlzLmhvc3RuYW1lXytcIi9jYW9zZGIuZW50aXR5LnYxLkVudGl0eVRyYW5zYWN0aW9uU2VydmljZS9NdWx0aVRyYW5zYWN0aW9uXCIsZSx0fHx7fSxzLG8pfSxuLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5VHJhbnNhY3Rpb25TZXJ2aWNlUHJvbWlzZUNsaWVudC5wcm90b3R5cGUubXVsdGlUcmFuc2FjdGlvbj1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmNsaWVudF8udW5hcnlDYWxsKHRoaXMuaG9zdG5hbWVfK1wiL2Nhb3NkYi5lbnRpdHkudjEuRW50aXR5VHJhbnNhY3Rpb25TZXJ2aWNlL011bHRpVHJhbnNhY3Rpb25cIixlLHR8fHt9LHMpfTt2YXIgaT1uZXcgci53ZWIuTWV0aG9kRGVzY3JpcHRvcihcIi9jYW9zZGIuZW50aXR5LnYxLkVudGl0eVRyYW5zYWN0aW9uU2VydmljZS9NdWx0aVJldHJpZXZlRW50aXR5QUNMXCIsci53ZWIuTWV0aG9kVHlwZS5VTkFSWSxuLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlSZXRyaWV2ZUVudGl0eUFDTFJlcXVlc3Qsbi5jYW9zZGIuZW50aXR5LnYxLk11bHRpUmV0cmlldmVFbnRpdHlBQ0xSZXNwb25zZSwoZnVuY3Rpb24oZSl7cmV0dXJuIGUuc2VyaWFsaXplQmluYXJ5KCl9KSxuLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlSZXRyaWV2ZUVudGl0eUFDTFJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5KTtuLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5VHJhbnNhY3Rpb25TZXJ2aWNlQ2xpZW50LnByb3RvdHlwZS5tdWx0aVJldHJpZXZlRW50aXR5QUNMPWZ1bmN0aW9uKGUsdCxvKXtyZXR1cm4gdGhpcy5jbGllbnRfLnJwY0NhbGwodGhpcy5ob3N0bmFtZV8rXCIvY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlUcmFuc2FjdGlvblNlcnZpY2UvTXVsdGlSZXRyaWV2ZUVudGl0eUFDTFwiLGUsdHx8e30saSxvKX0sbi5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVRyYW5zYWN0aW9uU2VydmljZVByb21pc2VDbGllbnQucHJvdG90eXBlLm11bHRpUmV0cmlldmVFbnRpdHlBQ0w9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5jbGllbnRfLnVuYXJ5Q2FsbCh0aGlzLmhvc3RuYW1lXytcIi9jYW9zZGIuZW50aXR5LnYxLkVudGl0eVRyYW5zYWN0aW9uU2VydmljZS9NdWx0aVJldHJpZXZlRW50aXR5QUNMXCIsZSx0fHx7fSxpKX07dmFyIGE9bmV3IHIud2ViLk1ldGhvZERlc2NyaXB0b3IoXCIvY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlUcmFuc2FjdGlvblNlcnZpY2UvTXVsdGlVcGRhdGVFbnRpdHlBQ0xcIixyLndlYi5NZXRob2RUeXBlLlVOQVJZLG4uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVVwZGF0ZUVudGl0eUFDTFJlcXVlc3Qsbi5jYW9zZGIuZW50aXR5LnYxLk11bHRpVXBkYXRlRW50aXR5QUNMUmVzcG9uc2UsKGZ1bmN0aW9uKGUpe3JldHVybiBlLnNlcmlhbGl6ZUJpbmFyeSgpfSksbi5jYW9zZGIuZW50aXR5LnYxLk11bHRpVXBkYXRlRW50aXR5QUNMUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnkpO24uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlUcmFuc2FjdGlvblNlcnZpY2VDbGllbnQucHJvdG90eXBlLm11bHRpVXBkYXRlRW50aXR5QUNMPWZ1bmN0aW9uKGUsdCxvKXtyZXR1cm4gdGhpcy5jbGllbnRfLnJwY0NhbGwodGhpcy5ob3N0bmFtZV8rXCIvY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlUcmFuc2FjdGlvblNlcnZpY2UvTXVsdGlVcGRhdGVFbnRpdHlBQ0xcIixlLHR8fHt9LGEsbyl9LG4uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlUcmFuc2FjdGlvblNlcnZpY2VQcm9taXNlQ2xpZW50LnByb3RvdHlwZS5tdWx0aVVwZGF0ZUVudGl0eUFDTD1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmNsaWVudF8udW5hcnlDYWxsKHRoaXMuaG9zdG5hbWVfK1wiL2Nhb3NkYi5lbnRpdHkudjEuRW50aXR5VHJhbnNhY3Rpb25TZXJ2aWNlL011bHRpVXBkYXRlRW50aXR5QUNMXCIsZSx0fHx7fSxhKX0sbi5jYW9zZGIuZW50aXR5LnYxLkZpbGVUcmFuc21pc3Npb25TZXJ2aWNlQ2xpZW50PWZ1bmN0aW9uKGUsdCxvKXtvfHwobz17fSksby5mb3JtYXQ9XCJ0ZXh0XCIsdGhpcy5jbGllbnRfPW5ldyByLndlYi5HcnBjV2ViQ2xpZW50QmFzZShvKSx0aGlzLmhvc3RuYW1lXz1lLnJlcGxhY2UoL1xcLyskLyxcIlwiKX0sbi5jYW9zZGIuZW50aXR5LnYxLkZpbGVUcmFuc21pc3Npb25TZXJ2aWNlUHJvbWlzZUNsaWVudD1mdW5jdGlvbihlLHQsbyl7b3x8KG89e30pLG8uZm9ybWF0PVwidGV4dFwiLHRoaXMuY2xpZW50Xz1uZXcgci53ZWIuR3JwY1dlYkNsaWVudEJhc2UobyksdGhpcy5ob3N0bmFtZV89ZS5yZXBsYWNlKC9cXC8rJC8sXCJcIil9O3ZhciBnPW5ldyByLndlYi5NZXRob2REZXNjcmlwdG9yKFwiL2Nhb3NkYi5lbnRpdHkudjEuRmlsZVRyYW5zbWlzc2lvblNlcnZpY2UvUmVnaXN0ZXJGaWxlVXBsb2FkXCIsci53ZWIuTWV0aG9kVHlwZS5VTkFSWSxuLmNhb3NkYi5lbnRpdHkudjEuUmVnaXN0ZXJGaWxlVXBsb2FkUmVxdWVzdCxuLmNhb3NkYi5lbnRpdHkudjEuUmVnaXN0ZXJGaWxlVXBsb2FkUmVzcG9uc2UsKGZ1bmN0aW9uKGUpe3JldHVybiBlLnNlcmlhbGl6ZUJpbmFyeSgpfSksbi5jYW9zZGIuZW50aXR5LnYxLlJlZ2lzdGVyRmlsZVVwbG9hZFJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5KTtuLmNhb3NkYi5lbnRpdHkudjEuRmlsZVRyYW5zbWlzc2lvblNlcnZpY2VDbGllbnQucHJvdG90eXBlLnJlZ2lzdGVyRmlsZVVwbG9hZD1mdW5jdGlvbihlLHQsbyl7cmV0dXJuIHRoaXMuY2xpZW50Xy5ycGNDYWxsKHRoaXMuaG9zdG5hbWVfK1wiL2Nhb3NkYi5lbnRpdHkudjEuRmlsZVRyYW5zbWlzc2lvblNlcnZpY2UvUmVnaXN0ZXJGaWxlVXBsb2FkXCIsZSx0fHx7fSxnLG8pfSxuLmNhb3NkYi5lbnRpdHkudjEuRmlsZVRyYW5zbWlzc2lvblNlcnZpY2VQcm9taXNlQ2xpZW50LnByb3RvdHlwZS5yZWdpc3RlckZpbGVVcGxvYWQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5jbGllbnRfLnVuYXJ5Q2FsbCh0aGlzLmhvc3RuYW1lXytcIi9jYW9zZGIuZW50aXR5LnYxLkZpbGVUcmFuc21pc3Npb25TZXJ2aWNlL1JlZ2lzdGVyRmlsZVVwbG9hZFwiLGUsdHx8e30sZyl9O3ZhciBwPW5ldyByLndlYi5NZXRob2REZXNjcmlwdG9yKFwiL2Nhb3NkYi5lbnRpdHkudjEuRmlsZVRyYW5zbWlzc2lvblNlcnZpY2UvRmlsZURvd25sb2FkXCIsci53ZWIuTWV0aG9kVHlwZS5TRVJWRVJfU1RSRUFNSU5HLG4uY2Fvc2RiLmVudGl0eS52MS5GaWxlRG93bmxvYWRSZXF1ZXN0LG4uY2Fvc2RiLmVudGl0eS52MS5GaWxlRG93bmxvYWRSZXNwb25zZSwoZnVuY3Rpb24oZSl7cmV0dXJuIGUuc2VyaWFsaXplQmluYXJ5KCl9KSxuLmNhb3NkYi5lbnRpdHkudjEuRmlsZURvd25sb2FkUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnkpO24uY2Fvc2RiLmVudGl0eS52MS5GaWxlVHJhbnNtaXNzaW9uU2VydmljZUNsaWVudC5wcm90b3R5cGUuZmlsZURvd25sb2FkPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuY2xpZW50Xy5zZXJ2ZXJTdHJlYW1pbmcodGhpcy5ob3N0bmFtZV8rXCIvY2Fvc2RiLmVudGl0eS52MS5GaWxlVHJhbnNtaXNzaW9uU2VydmljZS9GaWxlRG93bmxvYWRcIixlLHR8fHt9LHApfSxuLmNhb3NkYi5lbnRpdHkudjEuRmlsZVRyYW5zbWlzc2lvblNlcnZpY2VQcm9taXNlQ2xpZW50LnByb3RvdHlwZS5maWxlRG93bmxvYWQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5jbGllbnRfLnNlcnZlclN0cmVhbWluZyh0aGlzLmhvc3RuYW1lXytcIi9jYW9zZGIuZW50aXR5LnYxLkZpbGVUcmFuc21pc3Npb25TZXJ2aWNlL0ZpbGVEb3dubG9hZFwiLGUsdHx8e30scCl9LGUuZXhwb3J0cz1uLmNhb3NkYi5lbnRpdHkudjF9LDIyNjooZSx0LG8pPT57dmFyIHI9bygxOSksbj1yLHM9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbFRoaXMmJmdsb2JhbFRoaXN8fFwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvd3x8dm9pZCAwIT09cyYmc3x8XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGYmJnNlbGZ8fGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LmNhbGwobnVsbCl8fEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKTtuLmV4cG9ydFN5bWJvbChcInByb3RvLmNhb3NkYi5lbnRpdHkudjEuQXRvbWljRGF0YVR5cGVcIixudWxsLHMpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5Db2xsZWN0aW9uVmFsdWVzXCIsbnVsbCxzKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGF0YVR5cGVcIixudWxsLHMpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EYXRhVHlwZS5EYXRhVHlwZUNhc2VcIixudWxsLHMpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EZWxldGVSZXF1ZXN0XCIsbnVsbCxzKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGVsZXRlUmVxdWVzdC5XcmFwcGVkUmVxdWVzdENhc2VcIixudWxsLHMpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EZWxldGVSZXNwb25zZVwiLG51bGwscyksbi5leHBvcnRTeW1ib2woXCJwcm90by5jYW9zZGIuZW50aXR5LnYxLkRlbGV0ZVJlc3BvbnNlLldyYXBwZWRSZXNwb25zZUNhc2VcIixudWxsLHMpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlcIixudWxsLHMpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlBQ0xcIixudWxsLHMpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlBY2xQZXJtaXNzaW9uXCIsbnVsbCxzKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UGVybWlzc2lvblwiLG51bGwscyksbi5leHBvcnRTeW1ib2woXCJwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVBlcm1pc3Npb25SdWxlXCIsbnVsbCxzKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UGVybWlzc2lvblJ1bGVDYXBhYmlsaXR5XCIsbnVsbCxzKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UmVxdWVzdFwiLG51bGwscyksbi5leHBvcnRTeW1ib2woXCJwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVJlc3BvbnNlXCIsbnVsbCxzKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5Um9sZVwiLG51bGwscyksbi5leHBvcnRTeW1ib2woXCJwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVDaHVua1wiLG51bGwscyksbi5leHBvcnRTeW1ib2woXCJwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVEZXNjcmlwdG9yXCIsbnVsbCxzKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZURvd25sb2FkUmVxdWVzdFwiLG51bGwscyksbi5leHBvcnRTeW1ib2woXCJwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVEb3dubG9hZFJlc3BvbnNlXCIsbnVsbCxzKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZVRyYW5zbWlzc2lvbklkXCIsbnVsbCxzKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZVRyYW5zbWlzc2lvblNldHRpbmdzXCIsbnVsbCxzKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZVVwbG9hZFJlcXVlc3RcIixudWxsLHMpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlVXBsb2FkUmVzcG9uc2VcIixudWxsLHMpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaW5kUXVlcnlSZXN1bHRcIixudWxsLHMpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5IYXNoXCIsbnVsbCxzKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLmNhb3NkYi5lbnRpdHkudjEuSWRSZXNwb25zZVwiLG51bGwscyksbi5leHBvcnRTeW1ib2woXCJwcm90by5jYW9zZGIuZW50aXR5LnYxLkltcG9ydGFuY2VcIixudWxsLHMpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5JbnNlcnRSZXF1ZXN0XCIsbnVsbCxzKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLmNhb3NkYi5lbnRpdHkudjEuSW5zZXJ0UmVzcG9uc2VcIixudWxsLHMpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5JbnNlcnRSZXNwb25zZS5XcmFwcGVkUmVzcG9uc2VDYXNlXCIsbnVsbCxzKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLmNhb3NkYi5lbnRpdHkudjEuTGlzdERhdGFUeXBlXCIsbnVsbCxzKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLmNhb3NkYi5lbnRpdHkudjEuTGlzdERhdGFUeXBlLkxpc3REYXRhVHlwZUNhc2VcIixudWxsLHMpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NZXNzYWdlXCIsbnVsbCxzKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZUNvZGVcIixudWxsLHMpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVJldHJpZXZlRW50aXR5QUNMUmVxdWVzdFwiLG51bGwscyksbi5leHBvcnRTeW1ib2woXCJwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpUmV0cmlldmVFbnRpdHlBQ0xSZXNwb25zZVwiLG51bGwscyksbi5leHBvcnRTeW1ib2woXCJwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpVHJhbnNhY3Rpb25SZXF1ZXN0XCIsbnVsbCxzKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlUcmFuc2FjdGlvblJlc3BvbnNlXCIsbnVsbCxzKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlVcGRhdGVFbnRpdHlBQ0xSZXF1ZXN0XCIsbnVsbCxzKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlVcGRhdGVFbnRpdHlBQ0xSZXNwb25zZVwiLG51bGwscyksbi5leHBvcnRTeW1ib2woXCJwcm90by5jYW9zZGIuZW50aXR5LnYxLlBhcmVudFwiLG51bGwscyksbi5leHBvcnRTeW1ib2woXCJwcm90by5jYW9zZGIuZW50aXR5LnYxLlByb3BlcnR5XCIsbnVsbCxzKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLmNhb3NkYi5lbnRpdHkudjEuUXVlcnlcIixudWxsLHMpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZWZlcmVuY2VEYXRhVHlwZVwiLG51bGwscyksbi5leHBvcnRTeW1ib2woXCJwcm90by5jYW9zZGIuZW50aXR5LnYxLlJlZ2lzdGVyRmlsZVVwbG9hZFJlcXVlc3RcIixudWxsLHMpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZWdpc3RlckZpbGVVcGxvYWRSZXNwb25zZVwiLG51bGwscyksbi5leHBvcnRTeW1ib2woXCJwcm90by5jYW9zZGIuZW50aXR5LnYxLlJlZ2lzdHJhdGlvblN0YXR1c1wiLG51bGwscyksbi5leHBvcnRTeW1ib2woXCJwcm90by5jYW9zZGIuZW50aXR5LnYxLlJldHJpZXZlUmVxdWVzdFwiLG51bGwscyksbi5leHBvcnRTeW1ib2woXCJwcm90by5jYW9zZGIuZW50aXR5LnYxLlJldHJpZXZlUmVxdWVzdC5XcmFwcGVkUmVxdWVzdENhc2VcIixudWxsLHMpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZXRyaWV2ZVJlc3BvbnNlXCIsbnVsbCxzKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmV0cmlldmVSZXNwb25zZS5SZXRyaWV2ZVJlc3BvbnNlQ2FzZVwiLG51bGwscyksbi5leHBvcnRTeW1ib2woXCJwcm90by5jYW9zZGIuZW50aXR5LnYxLlNjYWxhclZhbHVlXCIsbnVsbCxzKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2NhbGFyVmFsdWUuU2NhbGFyVmFsdWVDYXNlXCIsbnVsbCxzKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2VsZWN0UXVlcnlDb2x1bW5cIixudWxsLHMpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeUhlYWRlclwiLG51bGwscyksbi5leHBvcnRTeW1ib2woXCJwcm90by5jYW9zZGIuZW50aXR5LnYxLlNlbGVjdFF1ZXJ5UmVzdWx0XCIsbnVsbCxzKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2VsZWN0UXVlcnlSb3dcIixudWxsLHMpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TcGVjaWFsVmFsdWVcIixudWxsLHMpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5UcmFuc2FjdGlvblJlcXVlc3RcIixudWxsLHMpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5UcmFuc2FjdGlvblJlcXVlc3QuV3JhcHBlZFJlcXVlc3RzQ2FzZVwiLG51bGwscyksbi5leHBvcnRTeW1ib2woXCJwcm90by5jYW9zZGIuZW50aXR5LnYxLlRyYW5zYWN0aW9uUmVzcG9uc2VcIixudWxsLHMpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5UcmFuc2FjdGlvblJlc3BvbnNlLlRyYW5zYWN0aW9uUmVzcG9uc2VDYXNlXCIsbnVsbCxzKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNtaXNzaW9uU3RhdHVzXCIsbnVsbCxzKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLmNhb3NkYi5lbnRpdHkudjEuVXBkYXRlUmVxdWVzdFwiLG51bGwscyksbi5leHBvcnRTeW1ib2woXCJwcm90by5jYW9zZGIuZW50aXR5LnYxLlVwZGF0ZVJlc3BvbnNlXCIsbnVsbCxzKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLmNhb3NkYi5lbnRpdHkudjEuVXBkYXRlUmVzcG9uc2UuV3JhcHBlZFJlc3BvbnNlQ2FzZVwiLG51bGwscyksbi5leHBvcnRTeW1ib2woXCJwcm90by5jYW9zZGIuZW50aXR5LnYxLlZhbHVlXCIsbnVsbCxzKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLmNhb3NkYi5lbnRpdHkudjEuVmFsdWUuVmFsdWVDYXNlXCIsbnVsbCxzKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLmNhb3NkYi5lbnRpdHkudjEuVmVyc2lvblwiLG51bGwscykscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZWZlcmVuY2VEYXRhVHlwZT1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCwtMSxudWxsLG51bGwpfSxuLmluaGVyaXRzKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmVmZXJlbmNlRGF0YVR5cGUsci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5jYW9zZGIuZW50aXR5LnYxLlJlZmVyZW5jZURhdGFUeXBlLmRpc3BsYXlOYW1lPVwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZWZlcmVuY2VEYXRhVHlwZVwiKSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkxpc3REYXRhVHlwZT1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCwtMSxudWxsLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTGlzdERhdGFUeXBlLm9uZW9mR3JvdXBzXyl9LG4uaW5oZXJpdHMocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5MaXN0RGF0YVR5cGUsci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5jYW9zZGIuZW50aXR5LnYxLkxpc3REYXRhVHlwZS5kaXNwbGF5TmFtZT1cInByb3RvLmNhb3NkYi5lbnRpdHkudjEuTGlzdERhdGFUeXBlXCIpLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGF0YVR5cGU9ZnVuY3Rpb24oZSl7ci5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxlLDAsLTEsbnVsbCxwcm90by5jYW9zZGIuZW50aXR5LnYxLkRhdGFUeXBlLm9uZW9mR3JvdXBzXyl9LG4uaW5oZXJpdHMocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EYXRhVHlwZSxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGF0YVR5cGUuZGlzcGxheU5hbWU9XCJwcm90by5jYW9zZGIuZW50aXR5LnYxLkRhdGFUeXBlXCIpLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuQ29sbGVjdGlvblZhbHVlcz1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCwtMSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkNvbGxlY3Rpb25WYWx1ZXMucmVwZWF0ZWRGaWVsZHNfLG51bGwpfSxuLmluaGVyaXRzKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuQ29sbGVjdGlvblZhbHVlcyxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuQ29sbGVjdGlvblZhbHVlcy5kaXNwbGF5TmFtZT1cInByb3RvLmNhb3NkYi5lbnRpdHkudjEuQ29sbGVjdGlvblZhbHVlc1wiKSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlNjYWxhclZhbHVlPWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLG51bGwscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TY2FsYXJWYWx1ZS5vbmVvZkdyb3Vwc18pfSxuLmluaGVyaXRzKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2NhbGFyVmFsdWUsci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5jYW9zZGIuZW50aXR5LnYxLlNjYWxhclZhbHVlLmRpc3BsYXlOYW1lPVwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TY2FsYXJWYWx1ZVwiKSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlZhbHVlPWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLG51bGwscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5WYWx1ZS5vbmVvZkdyb3Vwc18pfSxuLmluaGVyaXRzKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVmFsdWUsci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5jYW9zZGIuZW50aXR5LnYxLlZhbHVlLmRpc3BsYXlOYW1lPVwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5WYWx1ZVwiKSxwcm90by5jYW9zZGIuZW50aXR5LnYxLk1lc3NhZ2U9ZnVuY3Rpb24oZSl7ci5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxlLDAsLTEsbnVsbCxudWxsKX0sbi5pbmhlcml0cyhwcm90by5jYW9zZGIuZW50aXR5LnYxLk1lc3NhZ2Usci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5jYW9zZGIuZW50aXR5LnYxLk1lc3NhZ2UuZGlzcGxheU5hbWU9XCJwcm90by5jYW9zZGIuZW50aXR5LnYxLk1lc3NhZ2VcIikscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5WZXJzaW9uPWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLG51bGwsbnVsbCl9LG4uaW5oZXJpdHMocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5WZXJzaW9uLHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5WZXJzaW9uLmRpc3BsYXlOYW1lPVwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5WZXJzaW9uXCIpLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5PWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5LnJlcGVhdGVkRmllbGRzXyxudWxsKX0sbi5pbmhlcml0cyhwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eSxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5LmRpc3BsYXlOYW1lPVwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlcIikscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlRGVzY3JpcHRvcj1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCwtMSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVEZXNjcmlwdG9yLnJlcGVhdGVkRmllbGRzXyxudWxsKX0sbi5pbmhlcml0cyhwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVEZXNjcmlwdG9yLHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlRGVzY3JpcHRvci5kaXNwbGF5TmFtZT1cInByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZURlc2NyaXB0b3JcIikscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5IYXNoPWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLG51bGwsbnVsbCl9LG4uaW5oZXJpdHMocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5IYXNoLHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5IYXNoLmRpc3BsYXlOYW1lPVwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5IYXNoXCIpLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUHJvcGVydHk9ZnVuY3Rpb24oZSl7ci5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxlLDAsLTEscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5Qcm9wZXJ0eS5yZXBlYXRlZEZpZWxkc18sbnVsbCl9LG4uaW5oZXJpdHMocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5Qcm9wZXJ0eSxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUHJvcGVydHkuZGlzcGxheU5hbWU9XCJwcm90by5jYW9zZGIuZW50aXR5LnYxLlByb3BlcnR5XCIpLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUGFyZW50PWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUGFyZW50LnJlcGVhdGVkRmllbGRzXyxudWxsKX0sbi5pbmhlcml0cyhwcm90by5jYW9zZGIuZW50aXR5LnYxLlBhcmVudCxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUGFyZW50LmRpc3BsYXlOYW1lPVwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5QYXJlbnRcIikscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlSZXF1ZXN0PWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLG51bGwsbnVsbCl9LG4uaW5oZXJpdHMocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlSZXF1ZXN0LHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlSZXF1ZXN0LmRpc3BsYXlOYW1lPVwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlSZXF1ZXN0XCIpLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UmVzcG9uc2U9ZnVuY3Rpb24oZSl7ci5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxlLDAsLTEscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlSZXNwb25zZS5yZXBlYXRlZEZpZWxkc18sbnVsbCl9LG4uaW5oZXJpdHMocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlSZXNwb25zZSxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UmVzcG9uc2UuZGlzcGxheU5hbWU9XCJwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVJlc3BvbnNlXCIpLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSWRSZXNwb25zZT1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCwtMSxwcm90by5jYW9zZGIuZW50aXR5LnYxLklkUmVzcG9uc2UucmVwZWF0ZWRGaWVsZHNfLG51bGwpfSxuLmluaGVyaXRzKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSWRSZXNwb25zZSxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSWRSZXNwb25zZS5kaXNwbGF5TmFtZT1cInByb3RvLmNhb3NkYi5lbnRpdHkudjEuSWRSZXNwb25zZVwiKSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlF1ZXJ5PWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLG51bGwsbnVsbCl9LG4uaW5oZXJpdHMocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5RdWVyeSxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUXVlcnkuZGlzcGxheU5hbWU9XCJwcm90by5jYW9zZGIuZW50aXR5LnYxLlF1ZXJ5XCIpLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmluZFF1ZXJ5UmVzdWx0PWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmluZFF1ZXJ5UmVzdWx0LnJlcGVhdGVkRmllbGRzXyxudWxsKX0sbi5pbmhlcml0cyhwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbmRRdWVyeVJlc3VsdCxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmluZFF1ZXJ5UmVzdWx0LmRpc3BsYXlOYW1lPVwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaW5kUXVlcnlSZXN1bHRcIikscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeVJvdz1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCwtMSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlNlbGVjdFF1ZXJ5Um93LnJlcGVhdGVkRmllbGRzXyxudWxsKX0sbi5pbmhlcml0cyhwcm90by5jYW9zZGIuZW50aXR5LnYxLlNlbGVjdFF1ZXJ5Um93LHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeVJvdy5kaXNwbGF5TmFtZT1cInByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2VsZWN0UXVlcnlSb3dcIikscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeUNvbHVtbj1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCwtMSxudWxsLG51bGwpfSxuLmluaGVyaXRzKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2VsZWN0UXVlcnlDb2x1bW4sci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5jYW9zZGIuZW50aXR5LnYxLlNlbGVjdFF1ZXJ5Q29sdW1uLmRpc3BsYXlOYW1lPVwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeUNvbHVtblwiKSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlNlbGVjdFF1ZXJ5SGVhZGVyPWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2VsZWN0UXVlcnlIZWFkZXIucmVwZWF0ZWRGaWVsZHNfLG51bGwpfSxuLmluaGVyaXRzKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2VsZWN0UXVlcnlIZWFkZXIsci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5jYW9zZGIuZW50aXR5LnYxLlNlbGVjdFF1ZXJ5SGVhZGVyLmRpc3BsYXlOYW1lPVwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeUhlYWRlclwiKSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlNlbGVjdFF1ZXJ5UmVzdWx0PWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2VsZWN0UXVlcnlSZXN1bHQucmVwZWF0ZWRGaWVsZHNfLG51bGwpfSxuLmluaGVyaXRzKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2VsZWN0UXVlcnlSZXN1bHQsci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5jYW9zZGIuZW50aXR5LnYxLlNlbGVjdFF1ZXJ5UmVzdWx0LmRpc3BsYXlOYW1lPVwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeVJlc3VsdFwiKSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlJldHJpZXZlUmVxdWVzdD1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCwtMSxudWxsLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmV0cmlldmVSZXF1ZXN0Lm9uZW9mR3JvdXBzXyl9LG4uaW5oZXJpdHMocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZXRyaWV2ZVJlcXVlc3Qsci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5jYW9zZGIuZW50aXR5LnYxLlJldHJpZXZlUmVxdWVzdC5kaXNwbGF5TmFtZT1cInByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmV0cmlldmVSZXF1ZXN0XCIpLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmV0cmlldmVSZXNwb25zZT1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCwtMSxudWxsLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmV0cmlldmVSZXNwb25zZS5vbmVvZkdyb3Vwc18pfSxuLmluaGVyaXRzKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmV0cmlldmVSZXNwb25zZSxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmV0cmlldmVSZXNwb25zZS5kaXNwbGF5TmFtZT1cInByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmV0cmlldmVSZXNwb25zZVwiKSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkRlbGV0ZVJlcXVlc3Q9ZnVuY3Rpb24oZSl7ci5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxlLDAsLTEsbnVsbCxwcm90by5jYW9zZGIuZW50aXR5LnYxLkRlbGV0ZVJlcXVlc3Qub25lb2ZHcm91cHNfKX0sbi5pbmhlcml0cyhwcm90by5jYW9zZGIuZW50aXR5LnYxLkRlbGV0ZVJlcXVlc3Qsci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5jYW9zZGIuZW50aXR5LnYxLkRlbGV0ZVJlcXVlc3QuZGlzcGxheU5hbWU9XCJwcm90by5jYW9zZGIuZW50aXR5LnYxLkRlbGV0ZVJlcXVlc3RcIikscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EZWxldGVSZXNwb25zZT1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCwtMSxudWxsLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGVsZXRlUmVzcG9uc2Uub25lb2ZHcm91cHNfKX0sbi5pbmhlcml0cyhwcm90by5jYW9zZGIuZW50aXR5LnYxLkRlbGV0ZVJlc3BvbnNlLHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EZWxldGVSZXNwb25zZS5kaXNwbGF5TmFtZT1cInByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGVsZXRlUmVzcG9uc2VcIikscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5VcGRhdGVSZXF1ZXN0PWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLG51bGwsbnVsbCl9LG4uaW5oZXJpdHMocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5VcGRhdGVSZXF1ZXN0LHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5VcGRhdGVSZXF1ZXN0LmRpc3BsYXlOYW1lPVwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5VcGRhdGVSZXF1ZXN0XCIpLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVXBkYXRlUmVzcG9uc2U9ZnVuY3Rpb24oZSl7ci5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxlLDAsLTEsbnVsbCxwcm90by5jYW9zZGIuZW50aXR5LnYxLlVwZGF0ZVJlc3BvbnNlLm9uZW9mR3JvdXBzXyl9LG4uaW5oZXJpdHMocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5VcGRhdGVSZXNwb25zZSxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVXBkYXRlUmVzcG9uc2UuZGlzcGxheU5hbWU9XCJwcm90by5jYW9zZGIuZW50aXR5LnYxLlVwZGF0ZVJlc3BvbnNlXCIpLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSW5zZXJ0UmVxdWVzdD1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCwtMSxudWxsLG51bGwpfSxuLmluaGVyaXRzKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSW5zZXJ0UmVxdWVzdCxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSW5zZXJ0UmVxdWVzdC5kaXNwbGF5TmFtZT1cInByb3RvLmNhb3NkYi5lbnRpdHkudjEuSW5zZXJ0UmVxdWVzdFwiKSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkluc2VydFJlc3BvbnNlPWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLG51bGwscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5JbnNlcnRSZXNwb25zZS5vbmVvZkdyb3Vwc18pfSxuLmluaGVyaXRzKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSW5zZXJ0UmVzcG9uc2Usci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5jYW9zZGIuZW50aXR5LnYxLkluc2VydFJlc3BvbnNlLmRpc3BsYXlOYW1lPVwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5JbnNlcnRSZXNwb25zZVwiKSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlRyYW5zYWN0aW9uUmVxdWVzdD1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCwtMSxudWxsLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNhY3Rpb25SZXF1ZXN0Lm9uZW9mR3JvdXBzXyl9LG4uaW5oZXJpdHMocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5UcmFuc2FjdGlvblJlcXVlc3Qsci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5jYW9zZGIuZW50aXR5LnYxLlRyYW5zYWN0aW9uUmVxdWVzdC5kaXNwbGF5TmFtZT1cInByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNhY3Rpb25SZXF1ZXN0XCIpLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNhY3Rpb25SZXNwb25zZT1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCwtMSxudWxsLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNhY3Rpb25SZXNwb25zZS5vbmVvZkdyb3Vwc18pfSxuLmluaGVyaXRzKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNhY3Rpb25SZXNwb25zZSxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNhY3Rpb25SZXNwb25zZS5kaXNwbGF5TmFtZT1cInByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNhY3Rpb25SZXNwb25zZVwiKSxwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpVHJhbnNhY3Rpb25SZXF1ZXN0PWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlUcmFuc2FjdGlvblJlcXVlc3QucmVwZWF0ZWRGaWVsZHNfLG51bGwpfSxuLmluaGVyaXRzKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlUcmFuc2FjdGlvblJlcXVlc3Qsci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpVHJhbnNhY3Rpb25SZXF1ZXN0LmRpc3BsYXlOYW1lPVwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVRyYW5zYWN0aW9uUmVxdWVzdFwiKSxwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpVHJhbnNhY3Rpb25SZXNwb25zZT1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCwtMSxwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpVHJhbnNhY3Rpb25SZXNwb25zZS5yZXBlYXRlZEZpZWxkc18sbnVsbCl9LG4uaW5oZXJpdHMocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVRyYW5zYWN0aW9uUmVzcG9uc2Usci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpVHJhbnNhY3Rpb25SZXNwb25zZS5kaXNwbGF5TmFtZT1cInByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlUcmFuc2FjdGlvblJlc3BvbnNlXCIpLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlSZXRyaWV2ZUVudGl0eUFDTFJlcXVlc3Q9ZnVuY3Rpb24oZSl7ci5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxlLDAsLTEscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVJldHJpZXZlRW50aXR5QUNMUmVxdWVzdC5yZXBlYXRlZEZpZWxkc18sbnVsbCl9LG4uaW5oZXJpdHMocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVJldHJpZXZlRW50aXR5QUNMUmVxdWVzdCxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlSZXRyaWV2ZUVudGl0eUFDTFJlcXVlc3QuZGlzcGxheU5hbWU9XCJwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpUmV0cmlldmVFbnRpdHlBQ0xSZXF1ZXN0XCIpLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlSZXRyaWV2ZUVudGl0eUFDTFJlc3BvbnNlPWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlSZXRyaWV2ZUVudGl0eUFDTFJlc3BvbnNlLnJlcGVhdGVkRmllbGRzXyxudWxsKX0sbi5pbmhlcml0cyhwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpUmV0cmlldmVFbnRpdHlBQ0xSZXNwb25zZSxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlSZXRyaWV2ZUVudGl0eUFDTFJlc3BvbnNlLmRpc3BsYXlOYW1lPVwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVJldHJpZXZlRW50aXR5QUNMUmVzcG9uc2VcIikscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVVwZGF0ZUVudGl0eUFDTFJlcXVlc3Q9ZnVuY3Rpb24oZSl7ci5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxlLDAsLTEscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVVwZGF0ZUVudGl0eUFDTFJlcXVlc3QucmVwZWF0ZWRGaWVsZHNfLG51bGwpfSxuLmluaGVyaXRzKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlVcGRhdGVFbnRpdHlBQ0xSZXF1ZXN0LHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVVwZGF0ZUVudGl0eUFDTFJlcXVlc3QuZGlzcGxheU5hbWU9XCJwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpVXBkYXRlRW50aXR5QUNMUmVxdWVzdFwiKSxwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpVXBkYXRlRW50aXR5QUNMUmVzcG9uc2U9ZnVuY3Rpb24oZSl7ci5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxlLDAsLTEsbnVsbCxudWxsKX0sbi5pbmhlcml0cyhwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpVXBkYXRlRW50aXR5QUNMUmVzcG9uc2Usci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpVXBkYXRlRW50aXR5QUNMUmVzcG9uc2UuZGlzcGxheU5hbWU9XCJwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpVXBkYXRlRW50aXR5QUNMUmVzcG9uc2VcIikscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlBQ0w9ZnVuY3Rpb24oZSl7ci5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxlLDAsLTEscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlBQ0wucmVwZWF0ZWRGaWVsZHNfLG51bGwpfSxuLmluaGVyaXRzKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5QUNMLHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlBQ0wuZGlzcGxheU5hbWU9XCJwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eUFDTFwiKSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVBlcm1pc3Npb25SdWxlPWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UGVybWlzc2lvblJ1bGUucmVwZWF0ZWRGaWVsZHNfLG51bGwpfSxuLmluaGVyaXRzKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UGVybWlzc2lvblJ1bGUsci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVBlcm1pc3Npb25SdWxlLmRpc3BsYXlOYW1lPVwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlQZXJtaXNzaW9uUnVsZVwiKSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVDaHVuaz1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCwtMSxudWxsLG51bGwpfSxuLmluaGVyaXRzKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZUNodW5rLHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlQ2h1bmsuZGlzcGxheU5hbWU9XCJwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVDaHVua1wiKSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVUcmFuc21pc3Npb25JZD1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCwtMSxudWxsLG51bGwpfSxuLmluaGVyaXRzKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZVRyYW5zbWlzc2lvbklkLHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlVHJhbnNtaXNzaW9uSWQuZGlzcGxheU5hbWU9XCJwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVUcmFuc21pc3Npb25JZFwiKSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVUcmFuc21pc3Npb25TZXR0aW5ncz1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCwtMSxudWxsLG51bGwpfSxuLmluaGVyaXRzKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZVRyYW5zbWlzc2lvblNldHRpbmdzLHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlVHJhbnNtaXNzaW9uU2V0dGluZ3MuZGlzcGxheU5hbWU9XCJwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVUcmFuc21pc3Npb25TZXR0aW5nc1wiKSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlJlZ2lzdGVyRmlsZVVwbG9hZFJlcXVlc3Q9ZnVuY3Rpb24oZSl7ci5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxlLDAsLTEsbnVsbCxudWxsKX0sbi5pbmhlcml0cyhwcm90by5jYW9zZGIuZW50aXR5LnYxLlJlZ2lzdGVyRmlsZVVwbG9hZFJlcXVlc3Qsci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5jYW9zZGIuZW50aXR5LnYxLlJlZ2lzdGVyRmlsZVVwbG9hZFJlcXVlc3QuZGlzcGxheU5hbWU9XCJwcm90by5jYW9zZGIuZW50aXR5LnYxLlJlZ2lzdGVyRmlsZVVwbG9hZFJlcXVlc3RcIikscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZWdpc3RlckZpbGVVcGxvYWRSZXNwb25zZT1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCwtMSxudWxsLG51bGwpfSxuLmluaGVyaXRzKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmVnaXN0ZXJGaWxlVXBsb2FkUmVzcG9uc2Usci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5jYW9zZGIuZW50aXR5LnYxLlJlZ2lzdGVyRmlsZVVwbG9hZFJlc3BvbnNlLmRpc3BsYXlOYW1lPVwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZWdpc3RlckZpbGVVcGxvYWRSZXNwb25zZVwiKSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVVcGxvYWRSZXF1ZXN0PWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLG51bGwsbnVsbCl9LG4uaW5oZXJpdHMocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlVXBsb2FkUmVxdWVzdCxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZVVwbG9hZFJlcXVlc3QuZGlzcGxheU5hbWU9XCJwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVVcGxvYWRSZXF1ZXN0XCIpLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZVVwbG9hZFJlc3BvbnNlPWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLG51bGwsbnVsbCl9LG4uaW5oZXJpdHMocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlVXBsb2FkUmVzcG9uc2Usci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVVcGxvYWRSZXNwb25zZS5kaXNwbGF5TmFtZT1cInByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZVVwbG9hZFJlc3BvbnNlXCIpLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZURvd25sb2FkUmVxdWVzdD1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCwtMSxudWxsLG51bGwpfSxuLmluaGVyaXRzKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZURvd25sb2FkUmVxdWVzdCxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZURvd25sb2FkUmVxdWVzdC5kaXNwbGF5TmFtZT1cInByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZURvd25sb2FkUmVxdWVzdFwiKSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVEb3dubG9hZFJlc3BvbnNlPWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLG51bGwsbnVsbCl9LG4uaW5oZXJpdHMocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlRG93bmxvYWRSZXNwb25zZSxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZURvd25sb2FkUmVzcG9uc2UuZGlzcGxheU5hbWU9XCJwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVEb3dubG9hZFJlc3BvbnNlXCIpLHIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihwcm90by5jYW9zZGIuZW50aXR5LnYxLlJlZmVyZW5jZURhdGFUeXBlLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZWZlcmVuY2VEYXRhVHlwZS50b09iamVjdChlLHRoaXMpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlJlZmVyZW5jZURhdGFUeXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG89e25hbWU6ci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodCwxLFwiXCIpfTtyZXR1cm4gZSYmKG8uJGpzcGJNZXNzYWdlSW5zdGFuY2U9dCksb30pLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmVmZXJlbmNlRGF0YVR5cGUuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmVmZXJlbmNlRGF0YVR5cGU7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmVmZXJlbmNlRGF0YVR5cGUuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8sdCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmVmZXJlbmNlRGF0YVR5cGUuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KWlmKDE9PT10LmdldEZpZWxkTnVtYmVyKCkpe3ZhciBvPXQucmVhZFN0cmluZygpO2Uuc2V0TmFtZShvKX1lbHNlIHQuc2tpcEZpZWxkKCk7cmV0dXJuIGV9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmVmZXJlbmNlRGF0YVR5cGUucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZWZlcmVuY2VEYXRhVHlwZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmVmZXJlbmNlRGF0YVR5cGUuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbzsobz1lLmdldE5hbWUoKSkubGVuZ3RoPjAmJnQud3JpdGVTdHJpbmcoMSxvKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZWZlcmVuY2VEYXRhVHlwZS5wcm90b3R5cGUuZ2V0TmFtZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDEsXCJcIil9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmVmZXJlbmNlRGF0YVR5cGUucHJvdG90eXBlLnNldE5hbWU9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLDEsZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTGlzdERhdGFUeXBlLm9uZW9mR3JvdXBzXz1bWzEsMl1dLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTGlzdERhdGFUeXBlLkxpc3REYXRhVHlwZUNhc2U9e0xJU1RfREFUQV9UWVBFX05PVF9TRVQ6MCxBVE9NSUNfREFUQV9UWVBFOjEsUkVGRVJFTkNFX0RBVEFfVFlQRToyfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkxpc3REYXRhVHlwZS5wcm90b3R5cGUuZ2V0TGlzdERhdGFUeXBlQ2FzZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuY29tcHV0ZU9uZW9mQ2FzZSh0aGlzLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTGlzdERhdGFUeXBlLm9uZW9mR3JvdXBzX1swXSl9LHIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihwcm90by5jYW9zZGIuZW50aXR5LnYxLkxpc3REYXRhVHlwZS5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTGlzdERhdGFUeXBlLnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTGlzdERhdGFUeXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG8sbj17YXRvbWljRGF0YVR5cGU6ci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodCwxLDApLHJlZmVyZW5jZURhdGFUeXBlOihvPXQuZ2V0UmVmZXJlbmNlRGF0YVR5cGUoKSkmJnByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmVmZXJlbmNlRGF0YVR5cGUudG9PYmplY3QoZSxvKX07cmV0dXJuIGUmJihuLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLG59KSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkxpc3REYXRhVHlwZS5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5MaXN0RGF0YVR5cGU7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTGlzdERhdGFUeXBlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkxpc3REYXRhVHlwZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspc3dpdGNoKHQuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBvPXQucmVhZEVudW0oKTtlLnNldEF0b21pY0RhdGFUeXBlKG8pO2JyZWFrO2Nhc2UgMjpvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLlJlZmVyZW5jZURhdGFUeXBlLHQucmVhZE1lc3NhZ2Uobyxwcm90by5jYW9zZGIuZW50aXR5LnYxLlJlZmVyZW5jZURhdGFUeXBlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5zZXRSZWZlcmVuY2VEYXRhVHlwZShvKTticmVhaztkZWZhdWx0OnQuc2tpcEZpZWxkKCl9cmV0dXJuIGV9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTGlzdERhdGFUeXBlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTGlzdERhdGFUeXBlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5MaXN0RGF0YVR5cGUuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbz12b2lkIDA7bnVsbCE9KG89ci5NZXNzYWdlLmdldEZpZWxkKGUsMSkpJiZ0LndyaXRlRW51bSgxLG8pLG51bGwhPShvPWUuZ2V0UmVmZXJlbmNlRGF0YVR5cGUoKSkmJnQud3JpdGVNZXNzYWdlKDIsbyxwcm90by5jYW9zZGIuZW50aXR5LnYxLlJlZmVyZW5jZURhdGFUeXBlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5MaXN0RGF0YVR5cGUucHJvdG90eXBlLmdldEF0b21pY0RhdGFUeXBlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMSwwKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5MaXN0RGF0YVR5cGUucHJvdG90eXBlLnNldEF0b21pY0RhdGFUeXBlPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0T25lb2ZGaWVsZCh0aGlzLDEscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5MaXN0RGF0YVR5cGUub25lb2ZHcm91cHNfWzBdLGUpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkxpc3REYXRhVHlwZS5wcm90b3R5cGUuY2xlYXJBdG9taWNEYXRhVHlwZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2Uuc2V0T25lb2ZGaWVsZCh0aGlzLDEscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5MaXN0RGF0YVR5cGUub25lb2ZHcm91cHNfWzBdLHZvaWQgMCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTGlzdERhdGFUeXBlLnByb3RvdHlwZS5oYXNBdG9taWNEYXRhVHlwZT1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywxKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5MaXN0RGF0YVR5cGUucHJvdG90eXBlLmdldFJlZmVyZW5jZURhdGFUeXBlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcyxwcm90by5jYW9zZGIuZW50aXR5LnYxLlJlZmVyZW5jZURhdGFUeXBlLDIpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkxpc3REYXRhVHlwZS5wcm90b3R5cGUuc2V0UmVmZXJlbmNlRGF0YVR5cGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRPbmVvZldyYXBwZXJGaWVsZCh0aGlzLDIscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5MaXN0RGF0YVR5cGUub25lb2ZHcm91cHNfWzBdLGUpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkxpc3REYXRhVHlwZS5wcm90b3R5cGUuY2xlYXJSZWZlcmVuY2VEYXRhVHlwZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldFJlZmVyZW5jZURhdGFUeXBlKHZvaWQgMCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTGlzdERhdGFUeXBlLnByb3RvdHlwZS5oYXNSZWZlcmVuY2VEYXRhVHlwZT1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywyKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EYXRhVHlwZS5vbmVvZkdyb3Vwc189W1sxLDIsM11dLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGF0YVR5cGUuRGF0YVR5cGVDYXNlPXtEQVRBX1RZUEVfTk9UX1NFVDowLEFUT01JQ19EQVRBX1RZUEU6MSxMSVNUX0RBVEFfVFlQRToyLFJFRkVSRU5DRV9EQVRBX1RZUEU6M30scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EYXRhVHlwZS5wcm90b3R5cGUuZ2V0RGF0YVR5cGVDYXNlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5jb21wdXRlT25lb2ZDYXNlKHRoaXMscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EYXRhVHlwZS5vbmVvZkdyb3Vwc19bMF0pfSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EYXRhVHlwZS5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGF0YVR5cGUudG9PYmplY3QoZSx0aGlzKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EYXRhVHlwZS50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvLG49e2F0b21pY0RhdGFUeXBlOnIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHQsMSwwKSxsaXN0RGF0YVR5cGU6KG89dC5nZXRMaXN0RGF0YVR5cGUoKSkmJnByb3RvLmNhb3NkYi5lbnRpdHkudjEuTGlzdERhdGFUeXBlLnRvT2JqZWN0KGUsbykscmVmZXJlbmNlRGF0YVR5cGU6KG89dC5nZXRSZWZlcmVuY2VEYXRhVHlwZSgpKSYmcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZWZlcmVuY2VEYXRhVHlwZS50b09iamVjdChlLG8pfTtyZXR1cm4gZSYmKG4uJGpzcGJNZXNzYWdlSW5zdGFuY2U9dCksbn0pLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGF0YVR5cGUuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGF0YVR5cGU7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGF0YVR5cGUuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8sdCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGF0YVR5cGUuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KXN3aXRjaCh0LmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgbz10LnJlYWRFbnVtKCk7ZS5zZXRBdG9taWNEYXRhVHlwZShvKTticmVhaztjYXNlIDI6bz1uZXcgcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5MaXN0RGF0YVR5cGUsdC5yZWFkTWVzc2FnZShvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTGlzdERhdGFUeXBlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5zZXRMaXN0RGF0YVR5cGUobyk7YnJlYWs7Y2FzZSAzOm89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmVmZXJlbmNlRGF0YVR5cGUsdC5yZWFkTWVzc2FnZShvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmVmZXJlbmNlRGF0YVR5cGUuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLnNldFJlZmVyZW5jZURhdGFUeXBlKG8pO2JyZWFrO2RlZmF1bHQ6dC5za2lwRmllbGQoKX1yZXR1cm4gZX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EYXRhVHlwZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHIuQmluYXJ5V3JpdGVyO3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLkRhdGFUeXBlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EYXRhVHlwZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe3ZhciBvPXZvaWQgMDtudWxsIT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQoZSwxKSkmJnQud3JpdGVFbnVtKDEsbyksbnVsbCE9KG89ZS5nZXRMaXN0RGF0YVR5cGUoKSkmJnQud3JpdGVNZXNzYWdlKDIsbyxwcm90by5jYW9zZGIuZW50aXR5LnYxLkxpc3REYXRhVHlwZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciksbnVsbCE9KG89ZS5nZXRSZWZlcmVuY2VEYXRhVHlwZSgpKSYmdC53cml0ZU1lc3NhZ2UoMyxvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmVmZXJlbmNlRGF0YVR5cGUuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkRhdGFUeXBlLnByb3RvdHlwZS5nZXRBdG9taWNEYXRhVHlwZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDEsMCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGF0YVR5cGUucHJvdG90eXBlLnNldEF0b21pY0RhdGFUeXBlPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0T25lb2ZGaWVsZCh0aGlzLDEscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EYXRhVHlwZS5vbmVvZkdyb3Vwc19bMF0sZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGF0YVR5cGUucHJvdG90eXBlLmNsZWFyQXRvbWljRGF0YVR5cGU9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLnNldE9uZW9mRmllbGQodGhpcywxLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGF0YVR5cGUub25lb2ZHcm91cHNfWzBdLHZvaWQgMCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGF0YVR5cGUucHJvdG90eXBlLmhhc0F0b21pY0RhdGFUeXBlPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDEpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkRhdGFUeXBlLnByb3RvdHlwZS5nZXRMaXN0RGF0YVR5cGU9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTGlzdERhdGFUeXBlLDIpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkRhdGFUeXBlLnByb3RvdHlwZS5zZXRMaXN0RGF0YVR5cGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRPbmVvZldyYXBwZXJGaWVsZCh0aGlzLDIscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EYXRhVHlwZS5vbmVvZkdyb3Vwc19bMF0sZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGF0YVR5cGUucHJvdG90eXBlLmNsZWFyTGlzdERhdGFUeXBlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0TGlzdERhdGFUeXBlKHZvaWQgMCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGF0YVR5cGUucHJvdG90eXBlLmhhc0xpc3REYXRhVHlwZT1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywyKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EYXRhVHlwZS5wcm90b3R5cGUuZ2V0UmVmZXJlbmNlRGF0YVR5cGU9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmVmZXJlbmNlRGF0YVR5cGUsMyl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGF0YVR5cGUucHJvdG90eXBlLnNldFJlZmVyZW5jZURhdGFUeXBlPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0T25lb2ZXcmFwcGVyRmllbGQodGhpcywzLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGF0YVR5cGUub25lb2ZHcm91cHNfWzBdLGUpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkRhdGFUeXBlLnByb3RvdHlwZS5jbGVhclJlZmVyZW5jZURhdGFUeXBlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0UmVmZXJlbmNlRGF0YVR5cGUodm9pZCAwKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EYXRhVHlwZS5wcm90b3R5cGUuaGFzUmVmZXJlbmNlRGF0YVR5cGU9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMyl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuQ29sbGVjdGlvblZhbHVlcy5yZXBlYXRlZEZpZWxkc189WzFdLHIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihwcm90by5jYW9zZGIuZW50aXR5LnYxLkNvbGxlY3Rpb25WYWx1ZXMucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLkNvbGxlY3Rpb25WYWx1ZXMudG9PYmplY3QoZSx0aGlzKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5Db2xsZWN0aW9uVmFsdWVzLnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG89e3ZhbHVlc0xpc3Q6ci5NZXNzYWdlLnRvT2JqZWN0TGlzdCh0LmdldFZhbHVlc0xpc3QoKSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlNjYWxhclZhbHVlLnRvT2JqZWN0LGUpfTtyZXR1cm4gZSYmKG8uJGpzcGJNZXNzYWdlSW5zdGFuY2U9dCksb30pLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuQ29sbGVjdGlvblZhbHVlcy5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5Db2xsZWN0aW9uVmFsdWVzO3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLkNvbGxlY3Rpb25WYWx1ZXMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8sdCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuQ29sbGVjdGlvblZhbHVlcy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspaWYoMT09PXQuZ2V0RmllbGROdW1iZXIoKSl7dmFyIG89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2NhbGFyVmFsdWU7dC5yZWFkTWVzc2FnZShvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2NhbGFyVmFsdWUuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLmFkZFZhbHVlcyhvKX1lbHNlIHQuc2tpcEZpZWxkKCk7cmV0dXJuIGV9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuQ29sbGVjdGlvblZhbHVlcy5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHIuQmluYXJ5V3JpdGVyO3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLkNvbGxlY3Rpb25WYWx1ZXMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkNvbGxlY3Rpb25WYWx1ZXMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbzsobz1lLmdldFZhbHVlc0xpc3QoKSkubGVuZ3RoPjAmJnQud3JpdGVSZXBlYXRlZE1lc3NhZ2UoMSxvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2NhbGFyVmFsdWUuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkNvbGxlY3Rpb25WYWx1ZXMucHJvdG90eXBlLmdldFZhbHVlc0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TY2FsYXJWYWx1ZSwxKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5Db2xsZWN0aW9uVmFsdWVzLnByb3RvdHlwZS5zZXRWYWx1ZXNMaXN0PWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywxLGUpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkNvbGxlY3Rpb25WYWx1ZXMucHJvdG90eXBlLmFkZFZhbHVlcz1mdW5jdGlvbihlLHQpe3JldHVybiByLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDEsZSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlNjYWxhclZhbHVlLHQpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkNvbGxlY3Rpb25WYWx1ZXMucHJvdG90eXBlLmNsZWFyVmFsdWVzTGlzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldFZhbHVlc0xpc3QoW10pfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlNjYWxhclZhbHVlLm9uZW9mR3JvdXBzXz1bWzEsMiwzLDQsNV1dLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2NhbGFyVmFsdWUuU2NhbGFyVmFsdWVDYXNlPXtTQ0FMQVJfVkFMVUVfTk9UX1NFVDowLElOVEVHRVJfVkFMVUU6MSxET1VCTEVfVkFMVUU6MixCT09MRUFOX1ZBTFVFOjMsU1RSSU5HX1ZBTFVFOjQsU1BFQ0lBTF9WQUxVRTo1fSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlNjYWxhclZhbHVlLnByb3RvdHlwZS5nZXRTY2FsYXJWYWx1ZUNhc2U9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmNvbXB1dGVPbmVvZkNhc2UodGhpcyxwcm90by5jYW9zZGIuZW50aXR5LnYxLlNjYWxhclZhbHVlLm9uZW9mR3JvdXBzX1swXSl9LHIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihwcm90by5jYW9zZGIuZW50aXR5LnYxLlNjYWxhclZhbHVlLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TY2FsYXJWYWx1ZS50b09iamVjdChlLHRoaXMpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlNjYWxhclZhbHVlLnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG89e2ludGVnZXJWYWx1ZTpyLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0LDEsMCksZG91YmxlVmFsdWU6ci5NZXNzYWdlLmdldEZsb2F0aW5nUG9pbnRGaWVsZFdpdGhEZWZhdWx0KHQsMiwwKSxib29sZWFuVmFsdWU6ci5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHQsMywhMSksc3RyaW5nVmFsdWU6ci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodCw0LFwiXCIpLHNwZWNpYWxWYWx1ZTpyLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0LDUsMCl9O3JldHVybiBlJiYoby4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxvfSkscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TY2FsYXJWYWx1ZS5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TY2FsYXJWYWx1ZTtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TY2FsYXJWYWx1ZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TY2FsYXJWYWx1ZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspc3dpdGNoKHQuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBvPXQucmVhZEludDY0KCk7ZS5zZXRJbnRlZ2VyVmFsdWUobyk7YnJlYWs7Y2FzZSAyOm89dC5yZWFkRG91YmxlKCksZS5zZXREb3VibGVWYWx1ZShvKTticmVhaztjYXNlIDM6bz10LnJlYWRCb29sKCksZS5zZXRCb29sZWFuVmFsdWUobyk7YnJlYWs7Y2FzZSA0Om89dC5yZWFkU3RyaW5nKCksZS5zZXRTdHJpbmdWYWx1ZShvKTticmVhaztjYXNlIDU6bz10LnJlYWRFbnVtKCksZS5zZXRTcGVjaWFsVmFsdWUobyk7YnJlYWs7ZGVmYXVsdDp0LnNraXBGaWVsZCgpfXJldHVybiBlfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlNjYWxhclZhbHVlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2NhbGFyVmFsdWUuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlNjYWxhclZhbHVlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG89dm9pZCAwO251bGwhPShvPXIuTWVzc2FnZS5nZXRGaWVsZChlLDEpKSYmdC53cml0ZUludDY0KDEsbyksbnVsbCE9KG89ci5NZXNzYWdlLmdldEZpZWxkKGUsMikpJiZ0LndyaXRlRG91YmxlKDIsbyksbnVsbCE9KG89ci5NZXNzYWdlLmdldEZpZWxkKGUsMykpJiZ0LndyaXRlQm9vbCgzLG8pLG51bGwhPShvPXIuTWVzc2FnZS5nZXRGaWVsZChlLDQpKSYmdC53cml0ZVN0cmluZyg0LG8pLG51bGwhPShvPXIuTWVzc2FnZS5nZXRGaWVsZChlLDUpKSYmdC53cml0ZUVudW0oNSxvKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TY2FsYXJWYWx1ZS5wcm90b3R5cGUuZ2V0SW50ZWdlclZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMSwwKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TY2FsYXJWYWx1ZS5wcm90b3R5cGUuc2V0SW50ZWdlclZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0T25lb2ZGaWVsZCh0aGlzLDEscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TY2FsYXJWYWx1ZS5vbmVvZkdyb3Vwc19bMF0sZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2NhbGFyVmFsdWUucHJvdG90eXBlLmNsZWFySW50ZWdlclZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5zZXRPbmVvZkZpZWxkKHRoaXMsMSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlNjYWxhclZhbHVlLm9uZW9mR3JvdXBzX1swXSx2b2lkIDApfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlNjYWxhclZhbHVlLnByb3RvdHlwZS5oYXNJbnRlZ2VyVmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2NhbGFyVmFsdWUucHJvdG90eXBlLmdldERvdWJsZVZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGbG9hdGluZ1BvaW50RmllbGRXaXRoRGVmYXVsdCh0aGlzLDIsMCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2NhbGFyVmFsdWUucHJvdG90eXBlLnNldERvdWJsZVZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0T25lb2ZGaWVsZCh0aGlzLDIscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TY2FsYXJWYWx1ZS5vbmVvZkdyb3Vwc19bMF0sZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2NhbGFyVmFsdWUucHJvdG90eXBlLmNsZWFyRG91YmxlVmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLnNldE9uZW9mRmllbGQodGhpcywyLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2NhbGFyVmFsdWUub25lb2ZHcm91cHNfWzBdLHZvaWQgMCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2NhbGFyVmFsdWUucHJvdG90eXBlLmhhc0RvdWJsZVZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDIpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlNjYWxhclZhbHVlLnByb3RvdHlwZS5nZXRCb29sZWFuVmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHRoaXMsMywhMSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2NhbGFyVmFsdWUucHJvdG90eXBlLnNldEJvb2xlYW5WYWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldE9uZW9mRmllbGQodGhpcywzLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2NhbGFyVmFsdWUub25lb2ZHcm91cHNfWzBdLGUpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlNjYWxhclZhbHVlLnByb3RvdHlwZS5jbGVhckJvb2xlYW5WYWx1ZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2Uuc2V0T25lb2ZGaWVsZCh0aGlzLDMscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TY2FsYXJWYWx1ZS5vbmVvZkdyb3Vwc19bMF0sdm9pZCAwKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TY2FsYXJWYWx1ZS5wcm90b3R5cGUuaGFzQm9vbGVhblZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDMpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlNjYWxhclZhbHVlLnByb3RvdHlwZS5nZXRTdHJpbmdWYWx1ZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDQsXCJcIil9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2NhbGFyVmFsdWUucHJvdG90eXBlLnNldFN0cmluZ1ZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0T25lb2ZGaWVsZCh0aGlzLDQscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TY2FsYXJWYWx1ZS5vbmVvZkdyb3Vwc19bMF0sZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2NhbGFyVmFsdWUucHJvdG90eXBlLmNsZWFyU3RyaW5nVmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLnNldE9uZW9mRmllbGQodGhpcyw0LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2NhbGFyVmFsdWUub25lb2ZHcm91cHNfWzBdLHZvaWQgMCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2NhbGFyVmFsdWUucHJvdG90eXBlLmhhc1N0cmluZ1ZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDQpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlNjYWxhclZhbHVlLnByb3RvdHlwZS5nZXRTcGVjaWFsVmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcyw1LDApfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlNjYWxhclZhbHVlLnByb3RvdHlwZS5zZXRTcGVjaWFsVmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRPbmVvZkZpZWxkKHRoaXMsNSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlNjYWxhclZhbHVlLm9uZW9mR3JvdXBzX1swXSxlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TY2FsYXJWYWx1ZS5wcm90b3R5cGUuY2xlYXJTcGVjaWFsVmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLnNldE9uZW9mRmllbGQodGhpcyw1LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2NhbGFyVmFsdWUub25lb2ZHcm91cHNfWzBdLHZvaWQgMCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2NhbGFyVmFsdWUucHJvdG90eXBlLmhhc1NwZWNpYWxWYWx1ZT1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcyw1KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5WYWx1ZS5vbmVvZkdyb3Vwc189W1sxLDJdXSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlZhbHVlLlZhbHVlQ2FzZT17VkFMVUVfTk9UX1NFVDowLFNDQUxBUl9WQUxVRToxLExJU1RfVkFMVUVTOjJ9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVmFsdWUucHJvdG90eXBlLmdldFZhbHVlQ2FzZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuY29tcHV0ZU9uZW9mQ2FzZSh0aGlzLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVmFsdWUub25lb2ZHcm91cHNfWzBdKX0sci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVmFsdWUucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLlZhbHVlLnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVmFsdWUudG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbyxyPXtzY2FsYXJWYWx1ZToobz10LmdldFNjYWxhclZhbHVlKCkpJiZwcm90by5jYW9zZGIuZW50aXR5LnYxLlNjYWxhclZhbHVlLnRvT2JqZWN0KGUsbyksbGlzdFZhbHVlczoobz10LmdldExpc3RWYWx1ZXMoKSkmJnByb3RvLmNhb3NkYi5lbnRpdHkudjEuQ29sbGVjdGlvblZhbHVlcy50b09iamVjdChlLG8pfTtyZXR1cm4gZSYmKHIuJGpzcGJNZXNzYWdlSW5zdGFuY2U9dCkscn0pLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVmFsdWUuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVmFsdWU7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVmFsdWUuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8sdCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVmFsdWUuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KXN3aXRjaCh0LmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgbz1uZXcgcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TY2FsYXJWYWx1ZTt0LnJlYWRNZXNzYWdlKG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TY2FsYXJWYWx1ZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuc2V0U2NhbGFyVmFsdWUobyk7YnJlYWs7Y2FzZSAyOm89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuQ29sbGVjdGlvblZhbHVlcyx0LnJlYWRNZXNzYWdlKG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5Db2xsZWN0aW9uVmFsdWVzLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5zZXRMaXN0VmFsdWVzKG8pO2JyZWFrO2RlZmF1bHQ6dC5za2lwRmllbGQoKX1yZXR1cm4gZX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5WYWx1ZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHIuQmluYXJ5V3JpdGVyO3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLlZhbHVlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5WYWx1ZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe3ZhciBvPXZvaWQgMDtudWxsIT0obz1lLmdldFNjYWxhclZhbHVlKCkpJiZ0LndyaXRlTWVzc2FnZSgxLG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TY2FsYXJWYWx1ZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciksbnVsbCE9KG89ZS5nZXRMaXN0VmFsdWVzKCkpJiZ0LndyaXRlTWVzc2FnZSgyLG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5Db2xsZWN0aW9uVmFsdWVzLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5WYWx1ZS5wcm90b3R5cGUuZ2V0U2NhbGFyVmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2NhbGFyVmFsdWUsMSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVmFsdWUucHJvdG90eXBlLnNldFNjYWxhclZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0T25lb2ZXcmFwcGVyRmllbGQodGhpcywxLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVmFsdWUub25lb2ZHcm91cHNfWzBdLGUpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlZhbHVlLnByb3RvdHlwZS5jbGVhclNjYWxhclZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0U2NhbGFyVmFsdWUodm9pZCAwKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5WYWx1ZS5wcm90b3R5cGUuaGFzU2NhbGFyVmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVmFsdWUucHJvdG90eXBlLmdldExpc3RWYWx1ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuQ29sbGVjdGlvblZhbHVlcywyKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5WYWx1ZS5wcm90b3R5cGUuc2V0TGlzdFZhbHVlcz1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldE9uZW9mV3JhcHBlckZpZWxkKHRoaXMsMixwcm90by5jYW9zZGIuZW50aXR5LnYxLlZhbHVlLm9uZW9mR3JvdXBzX1swXSxlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5WYWx1ZS5wcm90b3R5cGUuY2xlYXJMaXN0VmFsdWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0TGlzdFZhbHVlcyh2b2lkIDApfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlZhbHVlLnByb3RvdHlwZS5oYXNMaXN0VmFsdWVzPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDIpfSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NZXNzYWdlLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NZXNzYWdlLnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZS50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvPXtjb2RlOnIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHQsMSwwKSxkZXNjcmlwdGlvbjpyLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0LDIsXCJcIil9O3JldHVybiBlJiYoby4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxvfSkscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NZXNzYWdlLmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLk1lc3NhZ2U7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NZXNzYWdlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOylzd2l0Y2godC5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIG89dC5yZWFkSW50MzIoKTtlLnNldENvZGUobyk7YnJlYWs7Y2FzZSAyOm89dC5yZWFkU3RyaW5nKCksZS5zZXREZXNjcmlwdGlvbihvKTticmVhaztkZWZhdWx0OnQuc2tpcEZpZWxkKCl9cmV0dXJuIGV9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHIuQmluYXJ5V3JpdGVyO3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLk1lc3NhZ2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLk1lc3NhZ2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbz12b2lkIDA7MCE9PShvPWUuZ2V0Q29kZSgpKSYmdC53cml0ZUludDMyKDEsbyksKG89ZS5nZXREZXNjcmlwdGlvbigpKS5sZW5ndGg+MCYmdC53cml0ZVN0cmluZygyLG8pfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLk1lc3NhZ2UucHJvdG90eXBlLmdldENvZGU9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywxLDApfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLk1lc3NhZ2UucHJvdG90eXBlLnNldENvZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRQcm90bzNJbnRGaWVsZCh0aGlzLDEsZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZS5wcm90b3R5cGUuZ2V0RGVzY3JpcHRpb249ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywyLFwiXCIpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLk1lc3NhZ2UucHJvdG90eXBlLnNldERlc2NyaXB0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywyLGUpfSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5WZXJzaW9uLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5WZXJzaW9uLnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVmVyc2lvbi50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvPXtpZDpyLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0LDEsXCJcIil9O3JldHVybiBlJiYoby4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxvfSkscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5WZXJzaW9uLmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLlZlcnNpb247cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVmVyc2lvbi5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5WZXJzaW9uLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOylpZigxPT09dC5nZXRGaWVsZE51bWJlcigpKXt2YXIgbz10LnJlYWRTdHJpbmcoKTtlLnNldElkKG8pfWVsc2UgdC5za2lwRmllbGQoKTtyZXR1cm4gZX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5WZXJzaW9uLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVmVyc2lvbi5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVmVyc2lvbi5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe3ZhciBvOyhvPWUuZ2V0SWQoKSkubGVuZ3RoPjAmJnQud3JpdGVTdHJpbmcoMSxvKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5WZXJzaW9uLnByb3RvdHlwZS5nZXRJZD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDEsXCJcIil9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVmVyc2lvbi5wcm90b3R5cGUuc2V0SWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLDEsZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5LnJlcGVhdGVkRmllbGRzXz1bOSwxMF0sci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5LnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHkudG9PYmplY3QoZSx0aGlzKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHkudG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbyxuPXtpZDpyLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0LDEsXCJcIiksbmFtZTpyLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0LDIsXCJcIiksZGVzY3JpcHRpb246ci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodCwzLFwiXCIpLHZlcnNpb246KG89dC5nZXRWZXJzaW9uKCkpJiZwcm90by5jYW9zZGIuZW50aXR5LnYxLlZlcnNpb24udG9PYmplY3QoZSxvKSxyb2xlOnIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHQsNSwwKSx1bml0OnIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHQsNixcIlwiKSxkYXRhVHlwZToobz10LmdldERhdGFUeXBlKCkpJiZwcm90by5jYW9zZGIuZW50aXR5LnYxLkRhdGFUeXBlLnRvT2JqZWN0KGUsbyksdmFsdWU6KG89dC5nZXRWYWx1ZSgpKSYmcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5WYWx1ZS50b09iamVjdChlLG8pLHByb3BlcnRpZXNMaXN0OnIuTWVzc2FnZS50b09iamVjdExpc3QodC5nZXRQcm9wZXJ0aWVzTGlzdCgpLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUHJvcGVydHkudG9PYmplY3QsZSkscGFyZW50c0xpc3Q6ci5NZXNzYWdlLnRvT2JqZWN0TGlzdCh0LmdldFBhcmVudHNMaXN0KCkscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5QYXJlbnQudG9PYmplY3QsZSksZmlsZURlc2NyaXB0b3I6KG89dC5nZXRGaWxlRGVzY3JpcHRvcigpKSYmcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlRGVzY3JpcHRvci50b09iamVjdChlLG8pfTtyZXR1cm4gZSYmKG4uJGpzcGJNZXNzYWdlSW5zdGFuY2U9dCksbn0pLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5LmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eTtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHkuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8sdCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOylzd2l0Y2godC5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIG89dC5yZWFkU3RyaW5nKCk7ZS5zZXRJZChvKTticmVhaztjYXNlIDI6bz10LnJlYWRTdHJpbmcoKSxlLnNldE5hbWUobyk7YnJlYWs7Y2FzZSAzOm89dC5yZWFkU3RyaW5nKCksZS5zZXREZXNjcmlwdGlvbihvKTticmVhaztjYXNlIDQ6bz1uZXcgcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5WZXJzaW9uLHQucmVhZE1lc3NhZ2Uobyxwcm90by5jYW9zZGIuZW50aXR5LnYxLlZlcnNpb24uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLnNldFZlcnNpb24obyk7YnJlYWs7Y2FzZSA1Om89dC5yZWFkRW51bSgpLGUuc2V0Um9sZShvKTticmVhaztjYXNlIDY6bz10LnJlYWRTdHJpbmcoKSxlLnNldFVuaXQobyk7YnJlYWs7Y2FzZSA3Om89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGF0YVR5cGUsdC5yZWFkTWVzc2FnZShvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGF0YVR5cGUuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLnNldERhdGFUeXBlKG8pO2JyZWFrO2Nhc2UgODpvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLlZhbHVlLHQucmVhZE1lc3NhZ2Uobyxwcm90by5jYW9zZGIuZW50aXR5LnYxLlZhbHVlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5zZXRWYWx1ZShvKTticmVhaztjYXNlIDk6bz1uZXcgcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5Qcm9wZXJ0eSx0LnJlYWRNZXNzYWdlKG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5Qcm9wZXJ0eS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuYWRkUHJvcGVydGllcyhvKTticmVhaztjYXNlIDEwOm89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUGFyZW50LHQucmVhZE1lc3NhZ2Uobyxwcm90by5jYW9zZGIuZW50aXR5LnYxLlBhcmVudC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuYWRkUGFyZW50cyhvKTticmVhaztjYXNlIDE0Om89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZURlc2NyaXB0b3IsdC5yZWFkTWVzc2FnZShvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZURlc2NyaXB0b3IuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLnNldEZpbGVEZXNjcmlwdG9yKG8pO2JyZWFrO2RlZmF1bHQ6dC5za2lwRmllbGQoKX1yZXR1cm4gZX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHkucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHkuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe3ZhciBvPXZvaWQgMDsobz1lLmdldElkKCkpLmxlbmd0aD4wJiZ0LndyaXRlU3RyaW5nKDEsbyksKG89ZS5nZXROYW1lKCkpLmxlbmd0aD4wJiZ0LndyaXRlU3RyaW5nKDIsbyksKG89ZS5nZXREZXNjcmlwdGlvbigpKS5sZW5ndGg+MCYmdC53cml0ZVN0cmluZygzLG8pLG51bGwhPShvPWUuZ2V0VmVyc2lvbigpKSYmdC53cml0ZU1lc3NhZ2UoNCxvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVmVyc2lvbi5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciksMCE9PShvPWUuZ2V0Um9sZSgpKSYmdC53cml0ZUVudW0oNSxvKSwobz1lLmdldFVuaXQoKSkubGVuZ3RoPjAmJnQud3JpdGVTdHJpbmcoNixvKSxudWxsIT0obz1lLmdldERhdGFUeXBlKCkpJiZ0LndyaXRlTWVzc2FnZSg3LG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EYXRhVHlwZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciksbnVsbCE9KG89ZS5nZXRWYWx1ZSgpKSYmdC53cml0ZU1lc3NhZ2UoOCxvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVmFsdWUuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpLChvPWUuZ2V0UHJvcGVydGllc0xpc3QoKSkubGVuZ3RoPjAmJnQud3JpdGVSZXBlYXRlZE1lc3NhZ2UoOSxvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUHJvcGVydHkuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpLChvPWUuZ2V0UGFyZW50c0xpc3QoKSkubGVuZ3RoPjAmJnQud3JpdGVSZXBlYXRlZE1lc3NhZ2UoMTAsbyxwcm90by5jYW9zZGIuZW50aXR5LnYxLlBhcmVudC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciksbnVsbCE9KG89ZS5nZXRGaWxlRGVzY3JpcHRvcigpKSYmdC53cml0ZU1lc3NhZ2UoMTQsbyxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVEZXNjcmlwdG9yLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHkucHJvdG90eXBlLmdldElkPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMSxcIlwiKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHkucHJvdG90eXBlLnNldElkPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywxLGUpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eS5wcm90b3R5cGUuZ2V0TmFtZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDIsXCJcIil9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5LnByb3RvdHlwZS5zZXROYW1lPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywyLGUpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eS5wcm90b3R5cGUuZ2V0RGVzY3JpcHRpb249ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywzLFwiXCIpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eS5wcm90b3R5cGUuc2V0RGVzY3JpcHRpb249ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLDMsZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5LnByb3RvdHlwZS5nZXRWZXJzaW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcyxwcm90by5jYW9zZGIuZW50aXR5LnYxLlZlcnNpb24sNCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5LnByb3RvdHlwZS5zZXRWZXJzaW9uPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0V3JhcHBlckZpZWxkKHRoaXMsNCxlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHkucHJvdG90eXBlLmNsZWFyVmVyc2lvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldFZlcnNpb24odm9pZCAwKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHkucHJvdG90eXBlLmhhc1ZlcnNpb249ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsNCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5LnByb3RvdHlwZS5nZXRSb2xlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsNSwwKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHkucHJvdG90eXBlLnNldFJvbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRQcm90bzNFbnVtRmllbGQodGhpcyw1LGUpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eS5wcm90b3R5cGUuZ2V0VW5pdD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDYsXCJcIil9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5LnByb3RvdHlwZS5zZXRVbml0PWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcyw2LGUpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eS5wcm90b3R5cGUuZ2V0RGF0YVR5cGU9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGF0YVR5cGUsNyl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5LnByb3RvdHlwZS5zZXREYXRhVHlwZT1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLDcsZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5LnByb3RvdHlwZS5jbGVhckRhdGFUeXBlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0RGF0YVR5cGUodm9pZCAwKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHkucHJvdG90eXBlLmhhc0RhdGFUeXBlPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDcpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eS5wcm90b3R5cGUuZ2V0VmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVmFsdWUsOCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5LnByb3RvdHlwZS5zZXRWYWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLDgsZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5LnByb3RvdHlwZS5jbGVhclZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0VmFsdWUodm9pZCAwKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHkucHJvdG90eXBlLmhhc1ZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDgpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eS5wcm90b3R5cGUuZ2V0UHJvcGVydGllc0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5Qcm9wZXJ0eSw5KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHkucHJvdG90eXBlLnNldFByb3BlcnRpZXNMaXN0PWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyw5LGUpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eS5wcm90b3R5cGUuYWRkUHJvcGVydGllcz1mdW5jdGlvbihlLHQpe3JldHVybiByLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDksZSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlByb3BlcnR5LHQpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eS5wcm90b3R5cGUuY2xlYXJQcm9wZXJ0aWVzTGlzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldFByb3BlcnRpZXNMaXN0KFtdKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHkucHJvdG90eXBlLmdldFBhcmVudHNMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUGFyZW50LDEwKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHkucHJvdG90eXBlLnNldFBhcmVudHNMaXN0PWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywxMCxlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHkucHJvdG90eXBlLmFkZFBhcmVudHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gci5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywxMCxlLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUGFyZW50LHQpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eS5wcm90b3R5cGUuY2xlYXJQYXJlbnRzTGlzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldFBhcmVudHNMaXN0KFtdKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHkucHJvdG90eXBlLmdldEZpbGVEZXNjcmlwdG9yPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcyxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVEZXNjcmlwdG9yLDE0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHkucHJvdG90eXBlLnNldEZpbGVEZXNjcmlwdG9yPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0V3JhcHBlckZpZWxkKHRoaXMsMTQsZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5LnByb3RvdHlwZS5jbGVhckZpbGVEZXNjcmlwdG9yPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0RmlsZURlc2NyaXB0b3Iodm9pZCAwKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHkucHJvdG90eXBlLmhhc0ZpbGVEZXNjcmlwdG9yPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDE0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlRGVzY3JpcHRvci5yZXBlYXRlZEZpZWxkc189WzRdLHIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVEZXNjcmlwdG9yLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlRGVzY3JpcHRvci50b09iamVjdChlLHRoaXMpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVEZXNjcmlwdG9yLnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG89e2VudGl0eUlkOnIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHQsMSxcIlwiKSxwYXRoOnIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHQsMixcIlwiKSxzaXplOnIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHQsMywwKSxoYXNoZXNMaXN0OnIuTWVzc2FnZS50b09iamVjdExpc3QodC5nZXRIYXNoZXNMaXN0KCkscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5IYXNoLnRvT2JqZWN0LGUpfTtyZXR1cm4gZSYmKG8uJGpzcGJNZXNzYWdlSW5zdGFuY2U9dCksb30pLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZURlc2NyaXB0b3IuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZURlc2NyaXB0b3I7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZURlc2NyaXB0b3IuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8sdCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZURlc2NyaXB0b3IuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KXN3aXRjaCh0LmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgbz10LnJlYWRTdHJpbmcoKTtlLnNldEVudGl0eUlkKG8pO2JyZWFrO2Nhc2UgMjpvPXQucmVhZFN0cmluZygpLGUuc2V0UGF0aChvKTticmVhaztjYXNlIDM6bz10LnJlYWRJbnQ2NCgpLGUuc2V0U2l6ZShvKTticmVhaztjYXNlIDQ6bz1uZXcgcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5IYXNoLHQucmVhZE1lc3NhZ2Uobyxwcm90by5jYW9zZGIuZW50aXR5LnYxLkhhc2guZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLmFkZEhhc2hlcyhvKTticmVhaztkZWZhdWx0OnQuc2tpcEZpZWxkKCl9cmV0dXJuIGV9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZURlc2NyaXB0b3IucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlRGVzY3JpcHRvci5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZURlc2NyaXB0b3Iuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbz12b2lkIDA7KG89ZS5nZXRFbnRpdHlJZCgpKS5sZW5ndGg+MCYmdC53cml0ZVN0cmluZygxLG8pLChvPWUuZ2V0UGF0aCgpKS5sZW5ndGg+MCYmdC53cml0ZVN0cmluZygyLG8pLDAhPT0obz1lLmdldFNpemUoKSkmJnQud3JpdGVJbnQ2NCgzLG8pLChvPWUuZ2V0SGFzaGVzTGlzdCgpKS5sZW5ndGg+MCYmdC53cml0ZVJlcGVhdGVkTWVzc2FnZSg0LG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5IYXNoLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlRGVzY3JpcHRvci5wcm90b3R5cGUuZ2V0RW50aXR5SWQ9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywxLFwiXCIpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVEZXNjcmlwdG9yLnByb3RvdHlwZS5zZXRFbnRpdHlJZD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsMSxlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlRGVzY3JpcHRvci5wcm90b3R5cGUuZ2V0UGF0aD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDIsXCJcIil9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZURlc2NyaXB0b3IucHJvdG90eXBlLnNldFBhdGg9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLDIsZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZURlc2NyaXB0b3IucHJvdG90eXBlLmdldFNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywzLDApfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVEZXNjcmlwdG9yLnByb3RvdHlwZS5zZXRTaXplPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UHJvdG8zSW50RmllbGQodGhpcywzLGUpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVEZXNjcmlwdG9yLnByb3RvdHlwZS5nZXRIYXNoZXNMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSGFzaCw0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlRGVzY3JpcHRvci5wcm90b3R5cGUuc2V0SGFzaGVzTGlzdD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsNCxlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlRGVzY3JpcHRvci5wcm90b3R5cGUuYWRkSGFzaGVzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsNCxlLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSGFzaCx0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlRGVzY3JpcHRvci5wcm90b3R5cGUuY2xlYXJIYXNoZXNMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0SGFzaGVzTGlzdChbXSl9LHIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihwcm90by5jYW9zZGIuZW50aXR5LnYxLkhhc2gucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLkhhc2gudG9PYmplY3QoZSx0aGlzKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5IYXNoLnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG89e2FsZ29yaXRobTpyLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0LDEsXCJcIiksdmFsdWU6ci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodCwyLFwiXCIpfTtyZXR1cm4gZSYmKG8uJGpzcGJNZXNzYWdlSW5zdGFuY2U9dCksb30pLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSGFzaC5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5IYXNoO3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLkhhc2guZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8sdCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSGFzaC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspc3dpdGNoKHQuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBvPXQucmVhZFN0cmluZygpO2Uuc2V0QWxnb3JpdGhtKG8pO2JyZWFrO2Nhc2UgMjpvPXQucmVhZFN0cmluZygpLGUuc2V0VmFsdWUobyk7YnJlYWs7ZGVmYXVsdDp0LnNraXBGaWVsZCgpfXJldHVybiBlfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkhhc2gucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5IYXNoLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5IYXNoLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG89dm9pZCAwOyhvPWUuZ2V0QWxnb3JpdGhtKCkpLmxlbmd0aD4wJiZ0LndyaXRlU3RyaW5nKDEsbyksKG89ZS5nZXRWYWx1ZSgpKS5sZW5ndGg+MCYmdC53cml0ZVN0cmluZygyLG8pfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkhhc2gucHJvdG90eXBlLmdldEFsZ29yaXRobT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDEsXCJcIil9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSGFzaC5wcm90b3R5cGUuc2V0QWxnb3JpdGhtPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywxLGUpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkhhc2gucHJvdG90eXBlLmdldFZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMixcIlwiKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5IYXNoLnByb3RvdHlwZS5zZXRWYWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsMixlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5Qcm9wZXJ0eS5yZXBlYXRlZEZpZWxkc189WzgsOSwxMF0sci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUHJvcGVydHkucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLlByb3BlcnR5LnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUHJvcGVydHkudG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbyxuPXtpZDpyLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0LDEsXCJcIiksbmFtZTpyLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0LDIsXCJcIiksZGVzY3JpcHRpb246ci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodCwzLFwiXCIpLHZhbHVlOihvPXQuZ2V0VmFsdWUoKSkmJnByb3RvLmNhb3NkYi5lbnRpdHkudjEuVmFsdWUudG9PYmplY3QoZSxvKSxpbXBvcnRhbmNlOnIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHQsNSwwKSx1bml0OnIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHQsNixcIlwiKSxkYXRhVHlwZToobz10LmdldERhdGFUeXBlKCkpJiZwcm90by5jYW9zZGIuZW50aXR5LnYxLkRhdGFUeXBlLnRvT2JqZWN0KGUsbyksZXJyb3JzTGlzdDpyLk1lc3NhZ2UudG9PYmplY3RMaXN0KHQuZ2V0RXJyb3JzTGlzdCgpLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZS50b09iamVjdCxlKSx3YXJuaW5nc0xpc3Q6ci5NZXNzYWdlLnRvT2JqZWN0TGlzdCh0LmdldFdhcm5pbmdzTGlzdCgpLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZS50b09iamVjdCxlKSxpbmZvc0xpc3Q6ci5NZXNzYWdlLnRvT2JqZWN0TGlzdCh0LmdldEluZm9zTGlzdCgpLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZS50b09iamVjdCxlKX07cmV0dXJuIGUmJihuLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLG59KSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlByb3BlcnR5LmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLlByb3BlcnR5O3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLlByb3BlcnR5LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlByb3BlcnR5LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOylzd2l0Y2godC5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIG89dC5yZWFkU3RyaW5nKCk7ZS5zZXRJZChvKTticmVhaztjYXNlIDI6bz10LnJlYWRTdHJpbmcoKSxlLnNldE5hbWUobyk7YnJlYWs7Y2FzZSAzOm89dC5yZWFkU3RyaW5nKCksZS5zZXREZXNjcmlwdGlvbihvKTticmVhaztjYXNlIDQ6bz1uZXcgcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5WYWx1ZSx0LnJlYWRNZXNzYWdlKG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5WYWx1ZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuc2V0VmFsdWUobyk7YnJlYWs7Y2FzZSA1Om89dC5yZWFkRW51bSgpLGUuc2V0SW1wb3J0YW5jZShvKTticmVhaztjYXNlIDY6bz10LnJlYWRTdHJpbmcoKSxlLnNldFVuaXQobyk7YnJlYWs7Y2FzZSA3Om89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGF0YVR5cGUsdC5yZWFkTWVzc2FnZShvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGF0YVR5cGUuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLnNldERhdGFUeXBlKG8pO2JyZWFrO2Nhc2UgODpvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLk1lc3NhZ2UsdC5yZWFkTWVzc2FnZShvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuYWRkRXJyb3JzKG8pO2JyZWFrO2Nhc2UgOTpvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLk1lc3NhZ2UsdC5yZWFkTWVzc2FnZShvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuYWRkV2FybmluZ3Mobyk7YnJlYWs7Y2FzZSAxMDpvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLk1lc3NhZ2UsdC5yZWFkTWVzc2FnZShvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuYWRkSW5mb3Mobyk7YnJlYWs7ZGVmYXVsdDp0LnNraXBGaWVsZCgpfXJldHVybiBlfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlByb3BlcnR5LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUHJvcGVydHkuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlByb3BlcnR5LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG89dm9pZCAwOyhvPWUuZ2V0SWQoKSkubGVuZ3RoPjAmJnQud3JpdGVTdHJpbmcoMSxvKSwobz1lLmdldE5hbWUoKSkubGVuZ3RoPjAmJnQud3JpdGVTdHJpbmcoMixvKSwobz1lLmdldERlc2NyaXB0aW9uKCkpLmxlbmd0aD4wJiZ0LndyaXRlU3RyaW5nKDMsbyksbnVsbCE9KG89ZS5nZXRWYWx1ZSgpKSYmdC53cml0ZU1lc3NhZ2UoNCxvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVmFsdWUuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpLDAhPT0obz1lLmdldEltcG9ydGFuY2UoKSkmJnQud3JpdGVFbnVtKDUsbyksKG89ZS5nZXRVbml0KCkpLmxlbmd0aD4wJiZ0LndyaXRlU3RyaW5nKDYsbyksbnVsbCE9KG89ZS5nZXREYXRhVHlwZSgpKSYmdC53cml0ZU1lc3NhZ2UoNyxvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGF0YVR5cGUuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpLChvPWUuZ2V0RXJyb3JzTGlzdCgpKS5sZW5ndGg+MCYmdC53cml0ZVJlcGVhdGVkTWVzc2FnZSg4LG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NZXNzYWdlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKSwobz1lLmdldFdhcm5pbmdzTGlzdCgpKS5sZW5ndGg+MCYmdC53cml0ZVJlcGVhdGVkTWVzc2FnZSg5LG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NZXNzYWdlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKSwobz1lLmdldEluZm9zTGlzdCgpKS5sZW5ndGg+MCYmdC53cml0ZVJlcGVhdGVkTWVzc2FnZSgxMCxvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcil9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUHJvcGVydHkucHJvdG90eXBlLmdldElkPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMSxcIlwiKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5Qcm9wZXJ0eS5wcm90b3R5cGUuc2V0SWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLDEsZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUHJvcGVydHkucHJvdG90eXBlLmdldE5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywyLFwiXCIpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlByb3BlcnR5LnByb3RvdHlwZS5zZXROYW1lPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywyLGUpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlByb3BlcnR5LnByb3RvdHlwZS5nZXREZXNjcmlwdGlvbj1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDMsXCJcIil9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUHJvcGVydHkucHJvdG90eXBlLnNldERlc2NyaXB0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywzLGUpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlByb3BlcnR5LnByb3RvdHlwZS5nZXRWYWx1ZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5WYWx1ZSw0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5Qcm9wZXJ0eS5wcm90b3R5cGUuc2V0VmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRXcmFwcGVyRmllbGQodGhpcyw0LGUpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlByb3BlcnR5LnByb3RvdHlwZS5jbGVhclZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0VmFsdWUodm9pZCAwKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5Qcm9wZXJ0eS5wcm90b3R5cGUuaGFzVmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsNCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUHJvcGVydHkucHJvdG90eXBlLmdldEltcG9ydGFuY2U9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcyw1LDApfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlByb3BlcnR5LnByb3RvdHlwZS5zZXRJbXBvcnRhbmNlPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UHJvdG8zRW51bUZpZWxkKHRoaXMsNSxlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5Qcm9wZXJ0eS5wcm90b3R5cGUuZ2V0VW5pdD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDYsXCJcIil9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUHJvcGVydHkucHJvdG90eXBlLnNldFVuaXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLDYsZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUHJvcGVydHkucHJvdG90eXBlLmdldERhdGFUeXBlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcyxwcm90by5jYW9zZGIuZW50aXR5LnYxLkRhdGFUeXBlLDcpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlByb3BlcnR5LnByb3RvdHlwZS5zZXREYXRhVHlwZT1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLDcsZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUHJvcGVydHkucHJvdG90eXBlLmNsZWFyRGF0YVR5cGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXREYXRhVHlwZSh2b2lkIDApfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlByb3BlcnR5LnByb3RvdHlwZS5oYXNEYXRhVHlwZT1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcyw3KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5Qcm9wZXJ0eS5wcm90b3R5cGUuZ2V0RXJyb3JzTGlzdD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyxwcm90by5jYW9zZGIuZW50aXR5LnYxLk1lc3NhZ2UsOCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUHJvcGVydHkucHJvdG90eXBlLnNldEVycm9yc0xpc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDgsZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUHJvcGVydHkucHJvdG90eXBlLmFkZEVycm9ycz1mdW5jdGlvbihlLHQpe3JldHVybiByLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDgsZSxwcm90by5jYW9zZGIuZW50aXR5LnYxLk1lc3NhZ2UsdCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUHJvcGVydHkucHJvdG90eXBlLmNsZWFyRXJyb3JzTGlzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldEVycm9yc0xpc3QoW10pfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlByb3BlcnR5LnByb3RvdHlwZS5nZXRXYXJuaW5nc0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NZXNzYWdlLDkpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlByb3BlcnR5LnByb3RvdHlwZS5zZXRXYXJuaW5nc0xpc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDksZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUHJvcGVydHkucHJvdG90eXBlLmFkZFdhcm5pbmdzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsOSxlLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZSx0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5Qcm9wZXJ0eS5wcm90b3R5cGUuY2xlYXJXYXJuaW5nc0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRXYXJuaW5nc0xpc3QoW10pfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlByb3BlcnR5LnByb3RvdHlwZS5nZXRJbmZvc0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NZXNzYWdlLDEwKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5Qcm9wZXJ0eS5wcm90b3R5cGUuc2V0SW5mb3NMaXN0PWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywxMCxlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5Qcm9wZXJ0eS5wcm90b3R5cGUuYWRkSW5mb3M9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gci5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywxMCxlLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZSx0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5Qcm9wZXJ0eS5wcm90b3R5cGUuY2xlYXJJbmZvc0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRJbmZvc0xpc3QoW10pfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlBhcmVudC5yZXBlYXRlZEZpZWxkc189WzQsNSw2XSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5QYXJlbnQucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLlBhcmVudC50b09iamVjdChlLHRoaXMpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlBhcmVudC50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvPXtpZDpyLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0LDEsXCJcIiksbmFtZTpyLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0LDIsXCJcIiksZGVzY3JpcHRpb246ci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodCwzLFwiXCIpLGVycm9yc0xpc3Q6ci5NZXNzYWdlLnRvT2JqZWN0TGlzdCh0LmdldEVycm9yc0xpc3QoKSxwcm90by5jYW9zZGIuZW50aXR5LnYxLk1lc3NhZ2UudG9PYmplY3QsZSksd2FybmluZ3NMaXN0OnIuTWVzc2FnZS50b09iamVjdExpc3QodC5nZXRXYXJuaW5nc0xpc3QoKSxwcm90by5jYW9zZGIuZW50aXR5LnYxLk1lc3NhZ2UudG9PYmplY3QsZSksaW5mb3NMaXN0OnIuTWVzc2FnZS50b09iamVjdExpc3QodC5nZXRJbmZvc0xpc3QoKSxwcm90by5jYW9zZGIuZW50aXR5LnYxLk1lc3NhZ2UudG9PYmplY3QsZSl9O3JldHVybiBlJiYoby4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxvfSkscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5QYXJlbnQuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUGFyZW50O3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLlBhcmVudC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5QYXJlbnQuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KXN3aXRjaCh0LmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgbz10LnJlYWRTdHJpbmcoKTtlLnNldElkKG8pO2JyZWFrO2Nhc2UgMjpvPXQucmVhZFN0cmluZygpLGUuc2V0TmFtZShvKTticmVhaztjYXNlIDM6bz10LnJlYWRTdHJpbmcoKSxlLnNldERlc2NyaXB0aW9uKG8pO2JyZWFrO2Nhc2UgNDpvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLk1lc3NhZ2UsdC5yZWFkTWVzc2FnZShvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuYWRkRXJyb3JzKG8pO2JyZWFrO2Nhc2UgNTpvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLk1lc3NhZ2UsdC5yZWFkTWVzc2FnZShvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuYWRkV2FybmluZ3Mobyk7YnJlYWs7Y2FzZSA2Om89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZSx0LnJlYWRNZXNzYWdlKG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NZXNzYWdlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5hZGRJbmZvcyhvKTticmVhaztkZWZhdWx0OnQuc2tpcEZpZWxkKCl9cmV0dXJuIGV9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUGFyZW50LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUGFyZW50LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5QYXJlbnQuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbz12b2lkIDA7KG89ZS5nZXRJZCgpKS5sZW5ndGg+MCYmdC53cml0ZVN0cmluZygxLG8pLChvPWUuZ2V0TmFtZSgpKS5sZW5ndGg+MCYmdC53cml0ZVN0cmluZygyLG8pLChvPWUuZ2V0RGVzY3JpcHRpb24oKSkubGVuZ3RoPjAmJnQud3JpdGVTdHJpbmcoMyxvKSwobz1lLmdldEVycm9yc0xpc3QoKSkubGVuZ3RoPjAmJnQud3JpdGVSZXBlYXRlZE1lc3NhZ2UoNCxvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciksKG89ZS5nZXRXYXJuaW5nc0xpc3QoKSkubGVuZ3RoPjAmJnQud3JpdGVSZXBlYXRlZE1lc3NhZ2UoNSxvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciksKG89ZS5nZXRJbmZvc0xpc3QoKSkubGVuZ3RoPjAmJnQud3JpdGVSZXBlYXRlZE1lc3NhZ2UoNixvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcil9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUGFyZW50LnByb3RvdHlwZS5nZXRJZD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDEsXCJcIil9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUGFyZW50LnByb3RvdHlwZS5zZXRJZD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsMSxlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5QYXJlbnQucHJvdG90eXBlLmdldE5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywyLFwiXCIpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlBhcmVudC5wcm90b3R5cGUuc2V0TmFtZT1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsMixlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5QYXJlbnQucHJvdG90eXBlLmdldERlc2NyaXB0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMyxcIlwiKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5QYXJlbnQucHJvdG90eXBlLnNldERlc2NyaXB0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywzLGUpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlBhcmVudC5wcm90b3R5cGUuZ2V0RXJyb3JzTGlzdD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyxwcm90by5jYW9zZGIuZW50aXR5LnYxLk1lc3NhZ2UsNCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUGFyZW50LnByb3RvdHlwZS5zZXRFcnJvcnNMaXN0PWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyw0LGUpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlBhcmVudC5wcm90b3R5cGUuYWRkRXJyb3JzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsNCxlLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZSx0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5QYXJlbnQucHJvdG90eXBlLmNsZWFyRXJyb3JzTGlzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldEVycm9yc0xpc3QoW10pfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlBhcmVudC5wcm90b3R5cGUuZ2V0V2FybmluZ3NMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZSw1KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5QYXJlbnQucHJvdG90eXBlLnNldFdhcm5pbmdzTGlzdD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsNSxlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5QYXJlbnQucHJvdG90eXBlLmFkZFdhcm5pbmdzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsNSxlLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZSx0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5QYXJlbnQucHJvdG90eXBlLmNsZWFyV2FybmluZ3NMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0V2FybmluZ3NMaXN0KFtdKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5QYXJlbnQucHJvdG90eXBlLmdldEluZm9zTGlzdD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyxwcm90by5jYW9zZGIuZW50aXR5LnYxLk1lc3NhZ2UsNil9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUGFyZW50LnByb3RvdHlwZS5zZXRJbmZvc0xpc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDYsZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUGFyZW50LnByb3RvdHlwZS5hZGRJbmZvcz1mdW5jdGlvbihlLHQpe3JldHVybiByLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDYsZSxwcm90by5jYW9zZGIuZW50aXR5LnYxLk1lc3NhZ2UsdCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUGFyZW50LnByb3RvdHlwZS5jbGVhckluZm9zTGlzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldEluZm9zTGlzdChbXSl9LHIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVJlcXVlc3QucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVJlcXVlc3QudG9PYmplY3QoZSx0aGlzKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlSZXF1ZXN0LnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG8scj17ZW50aXR5OihvPXQuZ2V0RW50aXR5KCkpJiZwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eS50b09iamVjdChlLG8pLHVwbG9hZElkOihvPXQuZ2V0VXBsb2FkSWQoKSkmJnByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZVRyYW5zbWlzc2lvbklkLnRvT2JqZWN0KGUsbyl9O3JldHVybiBlJiYoci4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxyfSkscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVJlcXVlc3Q7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOylzd2l0Y2godC5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIG89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5O3QucmVhZE1lc3NhZ2Uobyxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuc2V0RW50aXR5KG8pO2JyZWFrO2Nhc2UgMjpvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVUcmFuc21pc3Npb25JZCx0LnJlYWRNZXNzYWdlKG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlVHJhbnNtaXNzaW9uSWQuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLnNldFVwbG9hZElkKG8pO2JyZWFrO2RlZmF1bHQ6dC5za2lwRmllbGQoKX1yZXR1cm4gZX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlSZXF1ZXN0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe3ZhciBvPXZvaWQgMDtudWxsIT0obz1lLmdldEVudGl0eSgpKSYmdC53cml0ZU1lc3NhZ2UoMSxvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKSxudWxsIT0obz1lLmdldFVwbG9hZElkKCkpJiZ0LndyaXRlTWVzc2FnZSgyLG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlVHJhbnNtaXNzaW9uSWQuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVJlcXVlc3QucHJvdG90eXBlLmdldEVudGl0eT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHksMSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UmVxdWVzdC5wcm90b3R5cGUuc2V0RW50aXR5PWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0V3JhcHBlckZpZWxkKHRoaXMsMSxlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlSZXF1ZXN0LnByb3RvdHlwZS5jbGVhckVudGl0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldEVudGl0eSh2b2lkIDApfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVJlcXVlc3QucHJvdG90eXBlLmhhc0VudGl0eT1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywxKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlSZXF1ZXN0LnByb3RvdHlwZS5nZXRVcGxvYWRJZD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlVHJhbnNtaXNzaW9uSWQsMil9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UmVxdWVzdC5wcm90b3R5cGUuc2V0VXBsb2FkSWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRXcmFwcGVyRmllbGQodGhpcywyLGUpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVJlcXVlc3QucHJvdG90eXBlLmNsZWFyVXBsb2FkSWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRVcGxvYWRJZCh2b2lkIDApfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVJlcXVlc3QucHJvdG90eXBlLmhhc1VwbG9hZElkPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDIpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVJlc3BvbnNlLnJlcGVhdGVkRmllbGRzXz1bMyw0LDVdLHIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVJlc3BvbnNlLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlSZXNwb25zZS50b09iamVjdChlLHRoaXMpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVJlc3BvbnNlLnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG8sbj17ZW50aXR5OihvPXQuZ2V0RW50aXR5KCkpJiZwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eS50b09iamVjdChlLG8pLGRvd25sb2FkSWQ6KG89dC5nZXREb3dubG9hZElkKCkpJiZwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVUcmFuc21pc3Npb25JZC50b09iamVjdChlLG8pLGVycm9yc0xpc3Q6ci5NZXNzYWdlLnRvT2JqZWN0TGlzdCh0LmdldEVycm9yc0xpc3QoKSxwcm90by5jYW9zZGIuZW50aXR5LnYxLk1lc3NhZ2UudG9PYmplY3QsZSksd2FybmluZ3NMaXN0OnIuTWVzc2FnZS50b09iamVjdExpc3QodC5nZXRXYXJuaW5nc0xpc3QoKSxwcm90by5jYW9zZGIuZW50aXR5LnYxLk1lc3NhZ2UudG9PYmplY3QsZSksaW5mb3NMaXN0OnIuTWVzc2FnZS50b09iamVjdExpc3QodC5nZXRJbmZvc0xpc3QoKSxwcm90by5jYW9zZGIuZW50aXR5LnYxLk1lc3NhZ2UudG9PYmplY3QsZSl9O3JldHVybiBlJiYobi4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxufSkscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlSZXNwb25zZTtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspc3dpdGNoKHQuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eTt0LnJlYWRNZXNzYWdlKG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHkuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLnNldEVudGl0eShvKTticmVhaztjYXNlIDI6bz1uZXcgcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlVHJhbnNtaXNzaW9uSWQsdC5yZWFkTWVzc2FnZShvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZVRyYW5zbWlzc2lvbklkLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5zZXREb3dubG9hZElkKG8pO2JyZWFrO2Nhc2UgMzpvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLk1lc3NhZ2UsdC5yZWFkTWVzc2FnZShvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuYWRkRXJyb3JzKG8pO2JyZWFrO2Nhc2UgNDpvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLk1lc3NhZ2UsdC5yZWFkTWVzc2FnZShvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuYWRkV2FybmluZ3Mobyk7YnJlYWs7Y2FzZSA1Om89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZSx0LnJlYWRNZXNzYWdlKG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NZXNzYWdlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5hZGRJbmZvcyhvKTticmVhaztkZWZhdWx0OnQuc2tpcEZpZWxkKCl9cmV0dXJuIGV9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UmVzcG9uc2UucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbz12b2lkIDA7bnVsbCE9KG89ZS5nZXRFbnRpdHkoKSkmJnQud3JpdGVNZXNzYWdlKDEsbyxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciksbnVsbCE9KG89ZS5nZXREb3dubG9hZElkKCkpJiZ0LndyaXRlTWVzc2FnZSgyLG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlVHJhbnNtaXNzaW9uSWQuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpLChvPWUuZ2V0RXJyb3JzTGlzdCgpKS5sZW5ndGg+MCYmdC53cml0ZVJlcGVhdGVkTWVzc2FnZSgzLG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NZXNzYWdlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKSwobz1lLmdldFdhcm5pbmdzTGlzdCgpKS5sZW5ndGg+MCYmdC53cml0ZVJlcGVhdGVkTWVzc2FnZSg0LG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NZXNzYWdlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKSwobz1lLmdldEluZm9zTGlzdCgpKS5sZW5ndGg+MCYmdC53cml0ZVJlcGVhdGVkTWVzc2FnZSg1LG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NZXNzYWdlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlSZXNwb25zZS5wcm90b3R5cGUuZ2V0RW50aXR5PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcyxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eSwxKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlSZXNwb25zZS5wcm90b3R5cGUuc2V0RW50aXR5PWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0V3JhcHBlckZpZWxkKHRoaXMsMSxlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlSZXNwb25zZS5wcm90b3R5cGUuY2xlYXJFbnRpdHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRFbnRpdHkodm9pZCAwKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlSZXNwb25zZS5wcm90b3R5cGUuaGFzRW50aXR5PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDEpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVJlc3BvbnNlLnByb3RvdHlwZS5nZXREb3dubG9hZElkPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcyxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVUcmFuc21pc3Npb25JZCwyKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlSZXNwb25zZS5wcm90b3R5cGUuc2V0RG93bmxvYWRJZD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLDIsZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UmVzcG9uc2UucHJvdG90eXBlLmNsZWFyRG93bmxvYWRJZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldERvd25sb2FkSWQodm9pZCAwKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlSZXNwb25zZS5wcm90b3R5cGUuaGFzRG93bmxvYWRJZD1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywyKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlSZXNwb25zZS5wcm90b3R5cGUuZ2V0RXJyb3JzTGlzdD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyxwcm90by5jYW9zZGIuZW50aXR5LnYxLk1lc3NhZ2UsMyl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UmVzcG9uc2UucHJvdG90eXBlLnNldEVycm9yc0xpc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDMsZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UmVzcG9uc2UucHJvdG90eXBlLmFkZEVycm9ycz1mdW5jdGlvbihlLHQpe3JldHVybiByLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDMsZSxwcm90by5jYW9zZGIuZW50aXR5LnYxLk1lc3NhZ2UsdCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UmVzcG9uc2UucHJvdG90eXBlLmNsZWFyRXJyb3JzTGlzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldEVycm9yc0xpc3QoW10pfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVJlc3BvbnNlLnByb3RvdHlwZS5nZXRXYXJuaW5nc0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NZXNzYWdlLDQpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVJlc3BvbnNlLnByb3RvdHlwZS5zZXRXYXJuaW5nc0xpc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDQsZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UmVzcG9uc2UucHJvdG90eXBlLmFkZFdhcm5pbmdzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsNCxlLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZSx0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlSZXNwb25zZS5wcm90b3R5cGUuY2xlYXJXYXJuaW5nc0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRXYXJuaW5nc0xpc3QoW10pfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVJlc3BvbnNlLnByb3RvdHlwZS5nZXRJbmZvc0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NZXNzYWdlLDUpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVJlc3BvbnNlLnByb3RvdHlwZS5zZXRJbmZvc0xpc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDUsZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UmVzcG9uc2UucHJvdG90eXBlLmFkZEluZm9zPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsNSxlLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZSx0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlSZXNwb25zZS5wcm90b3R5cGUuY2xlYXJJbmZvc0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRJbmZvc0xpc3QoW10pfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLklkUmVzcG9uc2UucmVwZWF0ZWRGaWVsZHNfPVsyLDMsNF0sci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSWRSZXNwb25zZS5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSWRSZXNwb25zZS50b09iamVjdChlLHRoaXMpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLklkUmVzcG9uc2UudG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbyxuPXtpZDpyLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0LDEsXCJcIiksdmVyc2lvbjoobz10LmdldFZlcnNpb24oKSkmJnByb3RvLmNhb3NkYi5lbnRpdHkudjEuVmVyc2lvbi50b09iamVjdChlLG8pLGVycm9yc0xpc3Q6ci5NZXNzYWdlLnRvT2JqZWN0TGlzdCh0LmdldEVycm9yc0xpc3QoKSxwcm90by5jYW9zZGIuZW50aXR5LnYxLk1lc3NhZ2UudG9PYmplY3QsZSksd2FybmluZ3NMaXN0OnIuTWVzc2FnZS50b09iamVjdExpc3QodC5nZXRXYXJuaW5nc0xpc3QoKSxwcm90by5jYW9zZGIuZW50aXR5LnYxLk1lc3NhZ2UudG9PYmplY3QsZSksaW5mb3NMaXN0OnIuTWVzc2FnZS50b09iamVjdExpc3QodC5nZXRJbmZvc0xpc3QoKSxwcm90by5jYW9zZGIuZW50aXR5LnYxLk1lc3NhZ2UudG9PYmplY3QsZSl9O3JldHVybiBlJiYobi4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxufSkscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5JZFJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLklkUmVzcG9uc2U7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSWRSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5JZFJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOylzd2l0Y2godC5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIG89dC5yZWFkU3RyaW5nKCk7ZS5zZXRJZChvKTticmVhaztjYXNlIDU6bz1uZXcgcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5WZXJzaW9uLHQucmVhZE1lc3NhZ2Uobyxwcm90by5jYW9zZGIuZW50aXR5LnYxLlZlcnNpb24uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLnNldFZlcnNpb24obyk7YnJlYWs7Y2FzZSAyOm89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZSx0LnJlYWRNZXNzYWdlKG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NZXNzYWdlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5hZGRFcnJvcnMobyk7YnJlYWs7Y2FzZSAzOm89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZSx0LnJlYWRNZXNzYWdlKG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NZXNzYWdlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5hZGRXYXJuaW5ncyhvKTticmVhaztjYXNlIDQ6bz1uZXcgcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NZXNzYWdlLHQucmVhZE1lc3NhZ2Uobyxwcm90by5jYW9zZGIuZW50aXR5LnYxLk1lc3NhZ2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLmFkZEluZm9zKG8pO2JyZWFrO2RlZmF1bHQ6dC5za2lwRmllbGQoKX1yZXR1cm4gZX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5JZFJlc3BvbnNlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSWRSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSWRSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe3ZhciBvPXZvaWQgMDsobz1lLmdldElkKCkpLmxlbmd0aD4wJiZ0LndyaXRlU3RyaW5nKDEsbyksbnVsbCE9KG89ZS5nZXRWZXJzaW9uKCkpJiZ0LndyaXRlTWVzc2FnZSg1LG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5WZXJzaW9uLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKSwobz1lLmdldEVycm9yc0xpc3QoKSkubGVuZ3RoPjAmJnQud3JpdGVSZXBlYXRlZE1lc3NhZ2UoMixvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciksKG89ZS5nZXRXYXJuaW5nc0xpc3QoKSkubGVuZ3RoPjAmJnQud3JpdGVSZXBlYXRlZE1lc3NhZ2UoMyxvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciksKG89ZS5nZXRJbmZvc0xpc3QoKSkubGVuZ3RoPjAmJnQud3JpdGVSZXBlYXRlZE1lc3NhZ2UoNCxvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcil9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSWRSZXNwb25zZS5wcm90b3R5cGUuZ2V0SWQ9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywxLFwiXCIpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLklkUmVzcG9uc2UucHJvdG90eXBlLnNldElkPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywxLGUpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLklkUmVzcG9uc2UucHJvdG90eXBlLmdldFZlcnNpb249ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVmVyc2lvbiw1KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5JZFJlc3BvbnNlLnByb3RvdHlwZS5zZXRWZXJzaW9uPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0V3JhcHBlckZpZWxkKHRoaXMsNSxlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5JZFJlc3BvbnNlLnByb3RvdHlwZS5jbGVhclZlcnNpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRWZXJzaW9uKHZvaWQgMCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSWRSZXNwb25zZS5wcm90b3R5cGUuaGFzVmVyc2lvbj1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcyw1KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5JZFJlc3BvbnNlLnByb3RvdHlwZS5nZXRFcnJvcnNMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZSwyKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5JZFJlc3BvbnNlLnByb3RvdHlwZS5zZXRFcnJvcnNMaXN0PWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywyLGUpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLklkUmVzcG9uc2UucHJvdG90eXBlLmFkZEVycm9ycz1mdW5jdGlvbihlLHQpe3JldHVybiByLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDIsZSxwcm90by5jYW9zZGIuZW50aXR5LnYxLk1lc3NhZ2UsdCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSWRSZXNwb25zZS5wcm90b3R5cGUuY2xlYXJFcnJvcnNMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0RXJyb3JzTGlzdChbXSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSWRSZXNwb25zZS5wcm90b3R5cGUuZ2V0V2FybmluZ3NMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZSwzKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5JZFJlc3BvbnNlLnByb3RvdHlwZS5zZXRXYXJuaW5nc0xpc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDMsZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSWRSZXNwb25zZS5wcm90b3R5cGUuYWRkV2FybmluZ3M9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gci5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywzLGUscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NZXNzYWdlLHQpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLklkUmVzcG9uc2UucHJvdG90eXBlLmNsZWFyV2FybmluZ3NMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0V2FybmluZ3NMaXN0KFtdKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5JZFJlc3BvbnNlLnByb3RvdHlwZS5nZXRJbmZvc0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NZXNzYWdlLDQpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLklkUmVzcG9uc2UucHJvdG90eXBlLnNldEluZm9zTGlzdD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsNCxlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5JZFJlc3BvbnNlLnByb3RvdHlwZS5hZGRJbmZvcz1mdW5jdGlvbihlLHQpe3JldHVybiByLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDQsZSxwcm90by5jYW9zZGIuZW50aXR5LnYxLk1lc3NhZ2UsdCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSWRSZXNwb25zZS5wcm90b3R5cGUuY2xlYXJJbmZvc0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRJbmZvc0xpc3QoW10pfSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5RdWVyeS5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUXVlcnkudG9PYmplY3QoZSx0aGlzKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5RdWVyeS50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvPXtxdWVyeTpyLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0LDEsXCJcIil9O3JldHVybiBlJiYoby4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxvfSkscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5RdWVyeS5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5RdWVyeTtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5RdWVyeS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5RdWVyeS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspaWYoMT09PXQuZ2V0RmllbGROdW1iZXIoKSl7dmFyIG89dC5yZWFkU3RyaW5nKCk7ZS5zZXRRdWVyeShvKX1lbHNlIHQuc2tpcEZpZWxkKCk7cmV0dXJuIGV9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUXVlcnkucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5RdWVyeS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUXVlcnkuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbzsobz1lLmdldFF1ZXJ5KCkpLmxlbmd0aD4wJiZ0LndyaXRlU3RyaW5nKDEsbyl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUXVlcnkucHJvdG90eXBlLmdldFF1ZXJ5PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMSxcIlwiKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5RdWVyeS5wcm90b3R5cGUuc2V0UXVlcnk9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLDEsZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmluZFF1ZXJ5UmVzdWx0LnJlcGVhdGVkRmllbGRzXz1bMV0sci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmluZFF1ZXJ5UmVzdWx0LnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaW5kUXVlcnlSZXN1bHQudG9PYmplY3QoZSx0aGlzKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaW5kUXVlcnlSZXN1bHQudG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbz17cmVzdWx0U2V0TGlzdDpyLk1lc3NhZ2UudG9PYmplY3RMaXN0KHQuZ2V0UmVzdWx0U2V0TGlzdCgpLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UmVzcG9uc2UudG9PYmplY3QsZSl9O3JldHVybiBlJiYoby4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxvfSkscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaW5kUXVlcnlSZXN1bHQuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmluZFF1ZXJ5UmVzdWx0O3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbmRRdWVyeVJlc3VsdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaW5kUXVlcnlSZXN1bHQuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KWlmKDE9PT10LmdldEZpZWxkTnVtYmVyKCkpe3ZhciBvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVJlc3BvbnNlO3QucmVhZE1lc3NhZ2Uobyxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5hZGRSZXN1bHRTZXQobyl9ZWxzZSB0LnNraXBGaWVsZCgpO3JldHVybiBlfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbmRRdWVyeVJlc3VsdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHIuQmluYXJ5V3JpdGVyO3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbmRRdWVyeVJlc3VsdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmluZFF1ZXJ5UmVzdWx0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG87KG89ZS5nZXRSZXN1bHRTZXRMaXN0KCkpLmxlbmd0aD4wJiZ0LndyaXRlUmVwZWF0ZWRNZXNzYWdlKDEsbyxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaW5kUXVlcnlSZXN1bHQucHJvdG90eXBlLmdldFJlc3VsdFNldExpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlSZXNwb25zZSwxKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaW5kUXVlcnlSZXN1bHQucHJvdG90eXBlLnNldFJlc3VsdFNldExpc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDEsZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmluZFF1ZXJ5UmVzdWx0LnByb3RvdHlwZS5hZGRSZXN1bHRTZXQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gci5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywxLGUscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlSZXNwb25zZSx0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaW5kUXVlcnlSZXN1bHQucHJvdG90eXBlLmNsZWFyUmVzdWx0U2V0TGlzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldFJlc3VsdFNldExpc3QoW10pfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlNlbGVjdFF1ZXJ5Um93LnJlcGVhdGVkRmllbGRzXz1bMl0sci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2VsZWN0UXVlcnlSb3cucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLlNlbGVjdFF1ZXJ5Um93LnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2VsZWN0UXVlcnlSb3cudG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbz17Y2VsbHNMaXN0OnIuTWVzc2FnZS50b09iamVjdExpc3QodC5nZXRDZWxsc0xpc3QoKSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlZhbHVlLnRvT2JqZWN0LGUpfTtyZXR1cm4gZSYmKG8uJGpzcGJNZXNzYWdlSW5zdGFuY2U9dCksb30pLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2VsZWN0UXVlcnlSb3cuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2VsZWN0UXVlcnlSb3c7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2VsZWN0UXVlcnlSb3cuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8sdCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2VsZWN0UXVlcnlSb3cuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KWlmKDI9PT10LmdldEZpZWxkTnVtYmVyKCkpe3ZhciBvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLlZhbHVlO3QucmVhZE1lc3NhZ2Uobyxwcm90by5jYW9zZGIuZW50aXR5LnYxLlZhbHVlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5hZGRDZWxscyhvKX1lbHNlIHQuc2tpcEZpZWxkKCk7cmV0dXJuIGV9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2VsZWN0UXVlcnlSb3cucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeVJvdy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2VsZWN0UXVlcnlSb3cuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbzsobz1lLmdldENlbGxzTGlzdCgpKS5sZW5ndGg+MCYmdC53cml0ZVJlcGVhdGVkTWVzc2FnZSgyLG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5WYWx1ZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcil9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2VsZWN0UXVlcnlSb3cucHJvdG90eXBlLmdldENlbGxzTGlzdD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyxwcm90by5jYW9zZGIuZW50aXR5LnYxLlZhbHVlLDIpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlNlbGVjdFF1ZXJ5Um93LnByb3RvdHlwZS5zZXRDZWxsc0xpc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDIsZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2VsZWN0UXVlcnlSb3cucHJvdG90eXBlLmFkZENlbGxzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsMixlLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVmFsdWUsdCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2VsZWN0UXVlcnlSb3cucHJvdG90eXBlLmNsZWFyQ2VsbHNMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0Q2VsbHNMaXN0KFtdKX0sci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2VsZWN0UXVlcnlDb2x1bW4ucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLlNlbGVjdFF1ZXJ5Q29sdW1uLnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2VsZWN0UXVlcnlDb2x1bW4udG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbz17bmFtZTpyLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0LDEsXCJcIil9O3JldHVybiBlJiYoby4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxvfSkscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeUNvbHVtbi5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeUNvbHVtbjtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeUNvbHVtbi5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeUNvbHVtbi5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspaWYoMT09PXQuZ2V0RmllbGROdW1iZXIoKSl7dmFyIG89dC5yZWFkU3RyaW5nKCk7ZS5zZXROYW1lKG8pfWVsc2UgdC5za2lwRmllbGQoKTtyZXR1cm4gZX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeUNvbHVtbi5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHIuQmluYXJ5V3JpdGVyO3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLlNlbGVjdFF1ZXJ5Q29sdW1uLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeUNvbHVtbi5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe3ZhciBvOyhvPWUuZ2V0TmFtZSgpKS5sZW5ndGg+MCYmdC53cml0ZVN0cmluZygxLG8pfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlNlbGVjdFF1ZXJ5Q29sdW1uLnByb3RvdHlwZS5nZXROYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMSxcIlwiKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeUNvbHVtbi5wcm90b3R5cGUuc2V0TmFtZT1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsMSxlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeUhlYWRlci5yZXBlYXRlZEZpZWxkc189WzFdLHIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihwcm90by5jYW9zZGIuZW50aXR5LnYxLlNlbGVjdFF1ZXJ5SGVhZGVyLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeUhlYWRlci50b09iamVjdChlLHRoaXMpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlNlbGVjdFF1ZXJ5SGVhZGVyLnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG89e2NvbHVtbnNMaXN0OnIuTWVzc2FnZS50b09iamVjdExpc3QodC5nZXRDb2x1bW5zTGlzdCgpLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2VsZWN0UXVlcnlDb2x1bW4udG9PYmplY3QsZSl9O3JldHVybiBlJiYoby4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxvfSkscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeUhlYWRlci5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeUhlYWRlcjtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeUhlYWRlci5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeUhlYWRlci5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspaWYoMT09PXQuZ2V0RmllbGROdW1iZXIoKSl7dmFyIG89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2VsZWN0UXVlcnlDb2x1bW47dC5yZWFkTWVzc2FnZShvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2VsZWN0UXVlcnlDb2x1bW4uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLmFkZENvbHVtbnMobyl9ZWxzZSB0LnNraXBGaWVsZCgpO3JldHVybiBlfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlNlbGVjdFF1ZXJ5SGVhZGVyLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2VsZWN0UXVlcnlIZWFkZXIuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlNlbGVjdFF1ZXJ5SGVhZGVyLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG87KG89ZS5nZXRDb2x1bW5zTGlzdCgpKS5sZW5ndGg+MCYmdC53cml0ZVJlcGVhdGVkTWVzc2FnZSgxLG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeUNvbHVtbi5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcil9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2VsZWN0UXVlcnlIZWFkZXIucHJvdG90eXBlLmdldENvbHVtbnNMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2VsZWN0UXVlcnlDb2x1bW4sMSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2VsZWN0UXVlcnlIZWFkZXIucHJvdG90eXBlLnNldENvbHVtbnNMaXN0PWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywxLGUpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlNlbGVjdFF1ZXJ5SGVhZGVyLnByb3RvdHlwZS5hZGRDb2x1bW5zPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsMSxlLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2VsZWN0UXVlcnlDb2x1bW4sdCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2VsZWN0UXVlcnlIZWFkZXIucHJvdG90eXBlLmNsZWFyQ29sdW1uc0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRDb2x1bW5zTGlzdChbXSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2VsZWN0UXVlcnlSZXN1bHQucmVwZWF0ZWRGaWVsZHNfPVs0XSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeVJlc3VsdC5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2VsZWN0UXVlcnlSZXN1bHQudG9PYmplY3QoZSx0aGlzKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeVJlc3VsdC50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvLG49e2hlYWRlcjoobz10LmdldEhlYWRlcigpKSYmcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeUhlYWRlci50b09iamVjdChlLG8pLGRhdGFSb3dzTGlzdDpyLk1lc3NhZ2UudG9PYmplY3RMaXN0KHQuZ2V0RGF0YVJvd3NMaXN0KCkscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeVJvdy50b09iamVjdCxlKX07cmV0dXJuIGUmJihuLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLG59KSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlNlbGVjdFF1ZXJ5UmVzdWx0LmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLlNlbGVjdFF1ZXJ5UmVzdWx0O3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLlNlbGVjdFF1ZXJ5UmVzdWx0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlNlbGVjdFF1ZXJ5UmVzdWx0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOylzd2l0Y2godC5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDM6dmFyIG89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2VsZWN0UXVlcnlIZWFkZXI7dC5yZWFkTWVzc2FnZShvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2VsZWN0UXVlcnlIZWFkZXIuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLnNldEhlYWRlcihvKTticmVhaztjYXNlIDQ6bz1uZXcgcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeVJvdyx0LnJlYWRNZXNzYWdlKG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeVJvdy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuYWRkRGF0YVJvd3Mobyk7YnJlYWs7ZGVmYXVsdDp0LnNraXBGaWVsZCgpfXJldHVybiBlfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlNlbGVjdFF1ZXJ5UmVzdWx0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2VsZWN0UXVlcnlSZXN1bHQuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlNlbGVjdFF1ZXJ5UmVzdWx0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG89dm9pZCAwO251bGwhPShvPWUuZ2V0SGVhZGVyKCkpJiZ0LndyaXRlTWVzc2FnZSgzLG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeUhlYWRlci5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciksKG89ZS5nZXREYXRhUm93c0xpc3QoKSkubGVuZ3RoPjAmJnQud3JpdGVSZXBlYXRlZE1lc3NhZ2UoNCxvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2VsZWN0UXVlcnlSb3cuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlNlbGVjdFF1ZXJ5UmVzdWx0LnByb3RvdHlwZS5nZXRIZWFkZXI9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2VsZWN0UXVlcnlIZWFkZXIsMyl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2VsZWN0UXVlcnlSZXN1bHQucHJvdG90eXBlLnNldEhlYWRlcj1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLDMsZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2VsZWN0UXVlcnlSZXN1bHQucHJvdG90eXBlLmNsZWFySGVhZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0SGVhZGVyKHZvaWQgMCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2VsZWN0UXVlcnlSZXN1bHQucHJvdG90eXBlLmhhc0hlYWRlcj1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywzKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeVJlc3VsdC5wcm90b3R5cGUuZ2V0RGF0YVJvd3NMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2VsZWN0UXVlcnlSb3csNCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2VsZWN0UXVlcnlSZXN1bHQucHJvdG90eXBlLnNldERhdGFSb3dzTGlzdD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsNCxlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeVJlc3VsdC5wcm90b3R5cGUuYWRkRGF0YVJvd3M9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gci5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyw0LGUscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeVJvdyx0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeVJlc3VsdC5wcm90b3R5cGUuY2xlYXJEYXRhUm93c0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXREYXRhUm93c0xpc3QoW10pfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlJldHJpZXZlUmVxdWVzdC5vbmVvZkdyb3Vwc189W1sxLDJdXSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlJldHJpZXZlUmVxdWVzdC5XcmFwcGVkUmVxdWVzdENhc2U9e1dSQVBQRURfUkVRVUVTVF9OT1RfU0VUOjAsSUQ6MSxRVUVSWToyfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlJldHJpZXZlUmVxdWVzdC5wcm90b3R5cGUuZ2V0V3JhcHBlZFJlcXVlc3RDYXNlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5jb21wdXRlT25lb2ZDYXNlKHRoaXMscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZXRyaWV2ZVJlcXVlc3Qub25lb2ZHcm91cHNfWzBdKX0sci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmV0cmlldmVSZXF1ZXN0LnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZXRyaWV2ZVJlcXVlc3QudG9PYmplY3QoZSx0aGlzKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZXRyaWV2ZVJlcXVlc3QudG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbyxuPXtpZDpyLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0LDEsXCJcIikscXVlcnk6KG89dC5nZXRRdWVyeSgpKSYmcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5RdWVyeS50b09iamVjdChlLG8pLHJlZ2lzdGVyRmlsZURvd25sb2FkOnIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0LDMsITEpfTtyZXR1cm4gZSYmKG4uJGpzcGJNZXNzYWdlSW5zdGFuY2U9dCksbn0pLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmV0cmlldmVSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLlJldHJpZXZlUmVxdWVzdDtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZXRyaWV2ZVJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8sdCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmV0cmlldmVSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOylzd2l0Y2godC5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIG89dC5yZWFkU3RyaW5nKCk7ZS5zZXRJZChvKTticmVhaztjYXNlIDI6bz1uZXcgcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5RdWVyeSx0LnJlYWRNZXNzYWdlKG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5RdWVyeS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuc2V0UXVlcnkobyk7YnJlYWs7Y2FzZSAzOm89dC5yZWFkQm9vbCgpLGUuc2V0UmVnaXN0ZXJGaWxlRG93bmxvYWQobyk7YnJlYWs7ZGVmYXVsdDp0LnNraXBGaWVsZCgpfXJldHVybiBlfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlJldHJpZXZlUmVxdWVzdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHIuQmluYXJ5V3JpdGVyO3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLlJldHJpZXZlUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmV0cmlldmVSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG89dm9pZCAwO251bGwhPShvPXIuTWVzc2FnZS5nZXRGaWVsZChlLDEpKSYmdC53cml0ZVN0cmluZygxLG8pLG51bGwhPShvPWUuZ2V0UXVlcnkoKSkmJnQud3JpdGVNZXNzYWdlKDIsbyxwcm90by5jYW9zZGIuZW50aXR5LnYxLlF1ZXJ5LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKSwobz1lLmdldFJlZ2lzdGVyRmlsZURvd25sb2FkKCkpJiZ0LndyaXRlQm9vbCgzLG8pfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlJldHJpZXZlUmVxdWVzdC5wcm90b3R5cGUuZ2V0SWQ9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywxLFwiXCIpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlJldHJpZXZlUmVxdWVzdC5wcm90b3R5cGUuc2V0SWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRPbmVvZkZpZWxkKHRoaXMsMSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlJldHJpZXZlUmVxdWVzdC5vbmVvZkdyb3Vwc19bMF0sZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmV0cmlldmVSZXF1ZXN0LnByb3RvdHlwZS5jbGVhcklkPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5zZXRPbmVvZkZpZWxkKHRoaXMsMSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlJldHJpZXZlUmVxdWVzdC5vbmVvZkdyb3Vwc19bMF0sdm9pZCAwKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZXRyaWV2ZVJlcXVlc3QucHJvdG90eXBlLmhhc0lkPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDEpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlJldHJpZXZlUmVxdWVzdC5wcm90b3R5cGUuZ2V0UXVlcnk9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUXVlcnksMil9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmV0cmlldmVSZXF1ZXN0LnByb3RvdHlwZS5zZXRRdWVyeT1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldE9uZW9mV3JhcHBlckZpZWxkKHRoaXMsMixwcm90by5jYW9zZGIuZW50aXR5LnYxLlJldHJpZXZlUmVxdWVzdC5vbmVvZkdyb3Vwc19bMF0sZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmV0cmlldmVSZXF1ZXN0LnByb3RvdHlwZS5jbGVhclF1ZXJ5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0UXVlcnkodm9pZCAwKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZXRyaWV2ZVJlcXVlc3QucHJvdG90eXBlLmhhc1F1ZXJ5PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDIpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlJldHJpZXZlUmVxdWVzdC5wcm90b3R5cGUuZ2V0UmVnaXN0ZXJGaWxlRG93bmxvYWQ9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHRoaXMsMywhMSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmV0cmlldmVSZXF1ZXN0LnByb3RvdHlwZS5zZXRSZWdpc3RlckZpbGVEb3dubG9hZD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFByb3RvM0Jvb2xlYW5GaWVsZCh0aGlzLDMsZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmV0cmlldmVSZXNwb25zZS5vbmVvZkdyb3Vwc189W1sxLDIsMyw0XV0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZXRyaWV2ZVJlc3BvbnNlLlJldHJpZXZlUmVzcG9uc2VDYXNlPXtSRVRSSUVWRV9SRVNQT05TRV9OT1RfU0VUOjAsRU5USVRZX1JFU1BPTlNFOjEsRklORF9SRVNVTFQ6MixTRUxFQ1RfUkVTVUxUOjMsQ09VTlRfUkVTVUxUOjR9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmV0cmlldmVSZXNwb25zZS5wcm90b3R5cGUuZ2V0UmV0cmlldmVSZXNwb25zZUNhc2U9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmNvbXB1dGVPbmVvZkNhc2UodGhpcyxwcm90by5jYW9zZGIuZW50aXR5LnYxLlJldHJpZXZlUmVzcG9uc2Uub25lb2ZHcm91cHNfWzBdKX0sci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmV0cmlldmVSZXNwb25zZS5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmV0cmlldmVSZXNwb25zZS50b09iamVjdChlLHRoaXMpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlJldHJpZXZlUmVzcG9uc2UudG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbyxuPXtlbnRpdHlSZXNwb25zZToobz10LmdldEVudGl0eVJlc3BvbnNlKCkpJiZwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVJlc3BvbnNlLnRvT2JqZWN0KGUsbyksZmluZFJlc3VsdDoobz10LmdldEZpbmRSZXN1bHQoKSkmJnByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmluZFF1ZXJ5UmVzdWx0LnRvT2JqZWN0KGUsbyksc2VsZWN0UmVzdWx0OihvPXQuZ2V0U2VsZWN0UmVzdWx0KCkpJiZwcm90by5jYW9zZGIuZW50aXR5LnYxLlNlbGVjdFF1ZXJ5UmVzdWx0LnRvT2JqZWN0KGUsbyksY291bnRSZXN1bHQ6ci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodCw0LDApfTtyZXR1cm4gZSYmKG4uJGpzcGJNZXNzYWdlSW5zdGFuY2U9dCksbn0pLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmV0cmlldmVSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZXRyaWV2ZVJlc3BvbnNlO3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLlJldHJpZXZlUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8sdCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmV0cmlldmVSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspc3dpdGNoKHQuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVJlc3BvbnNlO3QucmVhZE1lc3NhZ2Uobyxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5zZXRFbnRpdHlSZXNwb25zZShvKTticmVhaztjYXNlIDI6bz1uZXcgcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaW5kUXVlcnlSZXN1bHQsdC5yZWFkTWVzc2FnZShvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmluZFF1ZXJ5UmVzdWx0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5zZXRGaW5kUmVzdWx0KG8pO2JyZWFrO2Nhc2UgMzpvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLlNlbGVjdFF1ZXJ5UmVzdWx0LHQucmVhZE1lc3NhZ2Uobyxwcm90by5jYW9zZGIuZW50aXR5LnYxLlNlbGVjdFF1ZXJ5UmVzdWx0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5zZXRTZWxlY3RSZXN1bHQobyk7YnJlYWs7Y2FzZSA0Om89dC5yZWFkSW50NjQoKSxlLnNldENvdW50UmVzdWx0KG8pO2JyZWFrO2RlZmF1bHQ6dC5za2lwRmllbGQoKX1yZXR1cm4gZX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZXRyaWV2ZVJlc3BvbnNlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmV0cmlldmVSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmV0cmlldmVSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe3ZhciBvPXZvaWQgMDtudWxsIT0obz1lLmdldEVudGl0eVJlc3BvbnNlKCkpJiZ0LndyaXRlTWVzc2FnZSgxLG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciksbnVsbCE9KG89ZS5nZXRGaW5kUmVzdWx0KCkpJiZ0LndyaXRlTWVzc2FnZSgyLG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaW5kUXVlcnlSZXN1bHQuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpLG51bGwhPShvPWUuZ2V0U2VsZWN0UmVzdWx0KCkpJiZ0LndyaXRlTWVzc2FnZSgzLG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeVJlc3VsdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciksbnVsbCE9KG89ci5NZXNzYWdlLmdldEZpZWxkKGUsNCkpJiZ0LndyaXRlSW50NjQoNCxvKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZXRyaWV2ZVJlc3BvbnNlLnByb3RvdHlwZS5nZXRFbnRpdHlSZXNwb25zZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlSZXNwb25zZSwxKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZXRyaWV2ZVJlc3BvbnNlLnByb3RvdHlwZS5zZXRFbnRpdHlSZXNwb25zZT1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldE9uZW9mV3JhcHBlckZpZWxkKHRoaXMsMSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlJldHJpZXZlUmVzcG9uc2Uub25lb2ZHcm91cHNfWzBdLGUpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlJldHJpZXZlUmVzcG9uc2UucHJvdG90eXBlLmNsZWFyRW50aXR5UmVzcG9uc2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRFbnRpdHlSZXNwb25zZSh2b2lkIDApfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlJldHJpZXZlUmVzcG9uc2UucHJvdG90eXBlLmhhc0VudGl0eVJlc3BvbnNlPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDEpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlJldHJpZXZlUmVzcG9uc2UucHJvdG90eXBlLmdldEZpbmRSZXN1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmluZFF1ZXJ5UmVzdWx0LDIpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlJldHJpZXZlUmVzcG9uc2UucHJvdG90eXBlLnNldEZpbmRSZXN1bHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRPbmVvZldyYXBwZXJGaWVsZCh0aGlzLDIscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZXRyaWV2ZVJlc3BvbnNlLm9uZW9mR3JvdXBzX1swXSxlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZXRyaWV2ZVJlc3BvbnNlLnByb3RvdHlwZS5jbGVhckZpbmRSZXN1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRGaW5kUmVzdWx0KHZvaWQgMCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmV0cmlldmVSZXNwb25zZS5wcm90b3R5cGUuaGFzRmluZFJlc3VsdD1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywyKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZXRyaWV2ZVJlc3BvbnNlLnByb3RvdHlwZS5nZXRTZWxlY3RSZXN1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2VsZWN0UXVlcnlSZXN1bHQsMyl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmV0cmlldmVSZXNwb25zZS5wcm90b3R5cGUuc2V0U2VsZWN0UmVzdWx0PWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0T25lb2ZXcmFwcGVyRmllbGQodGhpcywzLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmV0cmlldmVSZXNwb25zZS5vbmVvZkdyb3Vwc19bMF0sZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmV0cmlldmVSZXNwb25zZS5wcm90b3R5cGUuY2xlYXJTZWxlY3RSZXN1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRTZWxlY3RSZXN1bHQodm9pZCAwKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZXRyaWV2ZVJlc3BvbnNlLnByb3RvdHlwZS5oYXNTZWxlY3RSZXN1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMyl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmV0cmlldmVSZXNwb25zZS5wcm90b3R5cGUuZ2V0Q291bnRSZXN1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcyw0LDApfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlJldHJpZXZlUmVzcG9uc2UucHJvdG90eXBlLnNldENvdW50UmVzdWx0PWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0T25lb2ZGaWVsZCh0aGlzLDQscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZXRyaWV2ZVJlc3BvbnNlLm9uZW9mR3JvdXBzX1swXSxlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZXRyaWV2ZVJlc3BvbnNlLnByb3RvdHlwZS5jbGVhckNvdW50UmVzdWx0PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5zZXRPbmVvZkZpZWxkKHRoaXMsNCxwcm90by5jYW9zZGIuZW50aXR5LnYxLlJldHJpZXZlUmVzcG9uc2Uub25lb2ZHcm91cHNfWzBdLHZvaWQgMCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmV0cmlldmVSZXNwb25zZS5wcm90b3R5cGUuaGFzQ291bnRSZXN1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsNCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGVsZXRlUmVxdWVzdC5vbmVvZkdyb3Vwc189W1sxXV0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EZWxldGVSZXF1ZXN0LldyYXBwZWRSZXF1ZXN0Q2FzZT17V1JBUFBFRF9SRVFVRVNUX05PVF9TRVQ6MCxJRDoxfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkRlbGV0ZVJlcXVlc3QucHJvdG90eXBlLmdldFdyYXBwZWRSZXF1ZXN0Q2FzZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuY29tcHV0ZU9uZW9mQ2FzZSh0aGlzLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGVsZXRlUmVxdWVzdC5vbmVvZkdyb3Vwc19bMF0pfSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EZWxldGVSZXF1ZXN0LnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EZWxldGVSZXF1ZXN0LnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGVsZXRlUmVxdWVzdC50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvPXtpZDpyLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0LDEsXCJcIil9O3JldHVybiBlJiYoby4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxvfSkscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EZWxldGVSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLkRlbGV0ZVJlcXVlc3Q7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGVsZXRlUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EZWxldGVSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOylpZigxPT09dC5nZXRGaWVsZE51bWJlcigpKXt2YXIgbz10LnJlYWRTdHJpbmcoKTtlLnNldElkKG8pfWVsc2UgdC5za2lwRmllbGQoKTtyZXR1cm4gZX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EZWxldGVSZXF1ZXN0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGVsZXRlUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGVsZXRlUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe3ZhciBvO251bGwhPShvPXIuTWVzc2FnZS5nZXRGaWVsZChlLDEpKSYmdC53cml0ZVN0cmluZygxLG8pfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkRlbGV0ZVJlcXVlc3QucHJvdG90eXBlLmdldElkPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMSxcIlwiKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EZWxldGVSZXF1ZXN0LnByb3RvdHlwZS5zZXRJZD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldE9uZW9mRmllbGQodGhpcywxLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGVsZXRlUmVxdWVzdC5vbmVvZkdyb3Vwc19bMF0sZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGVsZXRlUmVxdWVzdC5wcm90b3R5cGUuY2xlYXJJZD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2Uuc2V0T25lb2ZGaWVsZCh0aGlzLDEscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EZWxldGVSZXF1ZXN0Lm9uZW9mR3JvdXBzX1swXSx2b2lkIDApfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkRlbGV0ZVJlcXVlc3QucHJvdG90eXBlLmhhc0lkPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDEpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkRlbGV0ZVJlc3BvbnNlLm9uZW9mR3JvdXBzXz1bWzFdXSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkRlbGV0ZVJlc3BvbnNlLldyYXBwZWRSZXNwb25zZUNhc2U9e1dSQVBQRURfUkVTUE9OU0VfTk9UX1NFVDowLElEX1JFU1BPTlNFOjF9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGVsZXRlUmVzcG9uc2UucHJvdG90eXBlLmdldFdyYXBwZWRSZXNwb25zZUNhc2U9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmNvbXB1dGVPbmVvZkNhc2UodGhpcyxwcm90by5jYW9zZGIuZW50aXR5LnYxLkRlbGV0ZVJlc3BvbnNlLm9uZW9mR3JvdXBzX1swXSl9LHIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihwcm90by5jYW9zZGIuZW50aXR5LnYxLkRlbGV0ZVJlc3BvbnNlLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EZWxldGVSZXNwb25zZS50b09iamVjdChlLHRoaXMpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkRlbGV0ZVJlc3BvbnNlLnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG8scj17aWRSZXNwb25zZToobz10LmdldElkUmVzcG9uc2UoKSkmJnByb3RvLmNhb3NkYi5lbnRpdHkudjEuSWRSZXNwb25zZS50b09iamVjdChlLG8pfTtyZXR1cm4gZSYmKHIuJGpzcGJNZXNzYWdlSW5zdGFuY2U9dCkscn0pLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGVsZXRlUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGVsZXRlUmVzcG9uc2U7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGVsZXRlUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8sdCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGVsZXRlUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KWlmKDE9PT10LmdldEZpZWxkTnVtYmVyKCkpe3ZhciBvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLklkUmVzcG9uc2U7dC5yZWFkTWVzc2FnZShvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSWRSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuc2V0SWRSZXNwb25zZShvKX1lbHNlIHQuc2tpcEZpZWxkKCk7cmV0dXJuIGV9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGVsZXRlUmVzcG9uc2UucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EZWxldGVSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGVsZXRlUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbztudWxsIT0obz1lLmdldElkUmVzcG9uc2UoKSkmJnQud3JpdGVNZXNzYWdlKDEsbyxwcm90by5jYW9zZGIuZW50aXR5LnYxLklkUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkRlbGV0ZVJlc3BvbnNlLnByb3RvdHlwZS5nZXRJZFJlc3BvbnNlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcyxwcm90by5jYW9zZGIuZW50aXR5LnYxLklkUmVzcG9uc2UsMSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGVsZXRlUmVzcG9uc2UucHJvdG90eXBlLnNldElkUmVzcG9uc2U9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRPbmVvZldyYXBwZXJGaWVsZCh0aGlzLDEscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EZWxldGVSZXNwb25zZS5vbmVvZkdyb3Vwc19bMF0sZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGVsZXRlUmVzcG9uc2UucHJvdG90eXBlLmNsZWFySWRSZXNwb25zZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldElkUmVzcG9uc2Uodm9pZCAwKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EZWxldGVSZXNwb25zZS5wcm90b3R5cGUuaGFzSWRSZXNwb25zZT1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywxKX0sci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVXBkYXRlUmVxdWVzdC5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVXBkYXRlUmVxdWVzdC50b09iamVjdChlLHRoaXMpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlVwZGF0ZVJlcXVlc3QudG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbyxyPXtlbnRpdHlSZXF1ZXN0OihvPXQuZ2V0RW50aXR5UmVxdWVzdCgpKSYmcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlSZXF1ZXN0LnRvT2JqZWN0KGUsbyl9O3JldHVybiBlJiYoci4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxyfSkscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5VcGRhdGVSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLlVwZGF0ZVJlcXVlc3Q7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVXBkYXRlUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5VcGRhdGVSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOylpZigxPT09dC5nZXRGaWVsZE51bWJlcigpKXt2YXIgbz1uZXcgcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlSZXF1ZXN0O3QucmVhZE1lc3NhZ2Uobyxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLnNldEVudGl0eVJlcXVlc3Qobyl9ZWxzZSB0LnNraXBGaWVsZCgpO3JldHVybiBlfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlVwZGF0ZVJlcXVlc3QucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5VcGRhdGVSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5VcGRhdGVSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG87bnVsbCE9KG89ZS5nZXRFbnRpdHlSZXF1ZXN0KCkpJiZ0LndyaXRlTWVzc2FnZSgxLG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5VcGRhdGVSZXF1ZXN0LnByb3RvdHlwZS5nZXRFbnRpdHlSZXF1ZXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcyxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVJlcXVlc3QsMSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVXBkYXRlUmVxdWVzdC5wcm90b3R5cGUuc2V0RW50aXR5UmVxdWVzdD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLDEsZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVXBkYXRlUmVxdWVzdC5wcm90b3R5cGUuY2xlYXJFbnRpdHlSZXF1ZXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0RW50aXR5UmVxdWVzdCh2b2lkIDApfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlVwZGF0ZVJlcXVlc3QucHJvdG90eXBlLmhhc0VudGl0eVJlcXVlc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVXBkYXRlUmVzcG9uc2Uub25lb2ZHcm91cHNfPVtbMV1dLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVXBkYXRlUmVzcG9uc2UuV3JhcHBlZFJlc3BvbnNlQ2FzZT17V1JBUFBFRF9SRVNQT05TRV9OT1RfU0VUOjAsSURfUkVTUE9OU0U6MX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5VcGRhdGVSZXNwb25zZS5wcm90b3R5cGUuZ2V0V3JhcHBlZFJlc3BvbnNlQ2FzZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuY29tcHV0ZU9uZW9mQ2FzZSh0aGlzLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVXBkYXRlUmVzcG9uc2Uub25lb2ZHcm91cHNfWzBdKX0sci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVXBkYXRlUmVzcG9uc2UucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLlVwZGF0ZVJlc3BvbnNlLnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVXBkYXRlUmVzcG9uc2UudG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbyxyPXtpZFJlc3BvbnNlOihvPXQuZ2V0SWRSZXNwb25zZSgpKSYmcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5JZFJlc3BvbnNlLnRvT2JqZWN0KGUsbyl9O3JldHVybiBlJiYoci4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxyfSkscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5VcGRhdGVSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5VcGRhdGVSZXNwb25zZTtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5VcGRhdGVSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5VcGRhdGVSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspaWYoMT09PXQuZ2V0RmllbGROdW1iZXIoKSl7dmFyIG89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSWRSZXNwb25zZTt0LnJlYWRNZXNzYWdlKG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5JZFJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5zZXRJZFJlc3BvbnNlKG8pfWVsc2UgdC5za2lwRmllbGQoKTtyZXR1cm4gZX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5VcGRhdGVSZXNwb25zZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHIuQmluYXJ5V3JpdGVyO3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLlVwZGF0ZVJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5VcGRhdGVSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe3ZhciBvO251bGwhPShvPWUuZ2V0SWRSZXNwb25zZSgpKSYmdC53cml0ZU1lc3NhZ2UoMSxvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSWRSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcil9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVXBkYXRlUmVzcG9uc2UucHJvdG90eXBlLmdldElkUmVzcG9uc2U9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSWRSZXNwb25zZSwxKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5VcGRhdGVSZXNwb25zZS5wcm90b3R5cGUuc2V0SWRSZXNwb25zZT1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldE9uZW9mV3JhcHBlckZpZWxkKHRoaXMsMSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlVwZGF0ZVJlc3BvbnNlLm9uZW9mR3JvdXBzX1swXSxlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5VcGRhdGVSZXNwb25zZS5wcm90b3R5cGUuY2xlYXJJZFJlc3BvbnNlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0SWRSZXNwb25zZSh2b2lkIDApfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlVwZGF0ZVJlc3BvbnNlLnByb3RvdHlwZS5oYXNJZFJlc3BvbnNlPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDEpfSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5JbnNlcnRSZXF1ZXN0LnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5JbnNlcnRSZXF1ZXN0LnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSW5zZXJ0UmVxdWVzdC50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvLHI9e2VudGl0eVJlcXVlc3Q6KG89dC5nZXRFbnRpdHlSZXF1ZXN0KCkpJiZwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVJlcXVlc3QudG9PYmplY3QoZSxvKX07cmV0dXJuIGUmJihyLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLHJ9KSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkluc2VydFJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSW5zZXJ0UmVxdWVzdDtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5JbnNlcnRSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkluc2VydFJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KWlmKDE9PT10LmdldEZpZWxkTnVtYmVyKCkpe3ZhciBvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVJlcXVlc3Q7dC5yZWFkTWVzc2FnZShvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuc2V0RW50aXR5UmVxdWVzdChvKX1lbHNlIHQuc2tpcEZpZWxkKCk7cmV0dXJuIGV9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSW5zZXJ0UmVxdWVzdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHIuQmluYXJ5V3JpdGVyO3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLkluc2VydFJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkluc2VydFJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbztudWxsIT0obz1lLmdldEVudGl0eVJlcXVlc3QoKSkmJnQud3JpdGVNZXNzYWdlKDEsbyxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkluc2VydFJlcXVlc3QucHJvdG90eXBlLmdldEVudGl0eVJlcXVlc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UmVxdWVzdCwxKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5JbnNlcnRSZXF1ZXN0LnByb3RvdHlwZS5zZXRFbnRpdHlSZXF1ZXN0PWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0V3JhcHBlckZpZWxkKHRoaXMsMSxlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5JbnNlcnRSZXF1ZXN0LnByb3RvdHlwZS5jbGVhckVudGl0eVJlcXVlc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRFbnRpdHlSZXF1ZXN0KHZvaWQgMCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSW5zZXJ0UmVxdWVzdC5wcm90b3R5cGUuaGFzRW50aXR5UmVxdWVzdD1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywxKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5JbnNlcnRSZXNwb25zZS5vbmVvZkdyb3Vwc189W1sxXV0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5JbnNlcnRSZXNwb25zZS5XcmFwcGVkUmVzcG9uc2VDYXNlPXtXUkFQUEVEX1JFU1BPTlNFX05PVF9TRVQ6MCxJRF9SRVNQT05TRToxfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkluc2VydFJlc3BvbnNlLnByb3RvdHlwZS5nZXRXcmFwcGVkUmVzcG9uc2VDYXNlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5jb21wdXRlT25lb2ZDYXNlKHRoaXMscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5JbnNlcnRSZXNwb25zZS5vbmVvZkdyb3Vwc19bMF0pfSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5JbnNlcnRSZXNwb25zZS5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSW5zZXJ0UmVzcG9uc2UudG9PYmplY3QoZSx0aGlzKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5JbnNlcnRSZXNwb25zZS50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvLHI9e2lkUmVzcG9uc2U6KG89dC5nZXRJZFJlc3BvbnNlKCkpJiZwcm90by5jYW9zZGIuZW50aXR5LnYxLklkUmVzcG9uc2UudG9PYmplY3QoZSxvKX07cmV0dXJuIGUmJihyLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLHJ9KSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkluc2VydFJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLkluc2VydFJlc3BvbnNlO3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLkluc2VydFJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkluc2VydFJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOylpZigxPT09dC5nZXRGaWVsZE51bWJlcigpKXt2YXIgbz1uZXcgcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5JZFJlc3BvbnNlO3QucmVhZE1lc3NhZ2Uobyxwcm90by5jYW9zZGIuZW50aXR5LnYxLklkUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLnNldElkUmVzcG9uc2Uobyl9ZWxzZSB0LnNraXBGaWVsZCgpO3JldHVybiBlfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkluc2VydFJlc3BvbnNlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSW5zZXJ0UmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkluc2VydFJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG87bnVsbCE9KG89ZS5nZXRJZFJlc3BvbnNlKCkpJiZ0LndyaXRlTWVzc2FnZSgxLG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5JZFJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5JbnNlcnRSZXNwb25zZS5wcm90b3R5cGUuZ2V0SWRSZXNwb25zZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5JZFJlc3BvbnNlLDEpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkluc2VydFJlc3BvbnNlLnByb3RvdHlwZS5zZXRJZFJlc3BvbnNlPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0T25lb2ZXcmFwcGVyRmllbGQodGhpcywxLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSW5zZXJ0UmVzcG9uc2Uub25lb2ZHcm91cHNfWzBdLGUpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkluc2VydFJlc3BvbnNlLnByb3RvdHlwZS5jbGVhcklkUmVzcG9uc2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRJZFJlc3BvbnNlKHZvaWQgMCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSW5zZXJ0UmVzcG9uc2UucHJvdG90eXBlLmhhc0lkUmVzcG9uc2U9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNhY3Rpb25SZXF1ZXN0Lm9uZW9mR3JvdXBzXz1bWzEsMiwzLDRdXSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlRyYW5zYWN0aW9uUmVxdWVzdC5XcmFwcGVkUmVxdWVzdHNDYXNlPXtXUkFQUEVEX1JFUVVFU1RTX05PVF9TRVQ6MCxSRVRSSUVWRV9SRVFVRVNUOjEsVVBEQVRFX1JFUVVFU1Q6MixJTlNFUlRfUkVRVUVTVDozLERFTEVURV9SRVFVRVNUOjR9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNhY3Rpb25SZXF1ZXN0LnByb3RvdHlwZS5nZXRXcmFwcGVkUmVxdWVzdHNDYXNlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5jb21wdXRlT25lb2ZDYXNlKHRoaXMscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5UcmFuc2FjdGlvblJlcXVlc3Qub25lb2ZHcm91cHNfWzBdKX0sci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNhY3Rpb25SZXF1ZXN0LnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5UcmFuc2FjdGlvblJlcXVlc3QudG9PYmplY3QoZSx0aGlzKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5UcmFuc2FjdGlvblJlcXVlc3QudG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbyxyPXtyZXRyaWV2ZVJlcXVlc3Q6KG89dC5nZXRSZXRyaWV2ZVJlcXVlc3QoKSkmJnByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmV0cmlldmVSZXF1ZXN0LnRvT2JqZWN0KGUsbyksdXBkYXRlUmVxdWVzdDoobz10LmdldFVwZGF0ZVJlcXVlc3QoKSkmJnByb3RvLmNhb3NkYi5lbnRpdHkudjEuVXBkYXRlUmVxdWVzdC50b09iamVjdChlLG8pLGluc2VydFJlcXVlc3Q6KG89dC5nZXRJbnNlcnRSZXF1ZXN0KCkpJiZwcm90by5jYW9zZGIuZW50aXR5LnYxLkluc2VydFJlcXVlc3QudG9PYmplY3QoZSxvKSxkZWxldGVSZXF1ZXN0OihvPXQuZ2V0RGVsZXRlUmVxdWVzdCgpKSYmcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EZWxldGVSZXF1ZXN0LnRvT2JqZWN0KGUsbyl9O3JldHVybiBlJiYoci4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxyfSkscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5UcmFuc2FjdGlvblJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNhY3Rpb25SZXF1ZXN0O3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLlRyYW5zYWN0aW9uUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5UcmFuc2FjdGlvblJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KXN3aXRjaCh0LmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgbz1uZXcgcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZXRyaWV2ZVJlcXVlc3Q7dC5yZWFkTWVzc2FnZShvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmV0cmlldmVSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5zZXRSZXRyaWV2ZVJlcXVlc3Qobyk7YnJlYWs7Y2FzZSAyOm89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVXBkYXRlUmVxdWVzdCx0LnJlYWRNZXNzYWdlKG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5VcGRhdGVSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5zZXRVcGRhdGVSZXF1ZXN0KG8pO2JyZWFrO2Nhc2UgMzpvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLkluc2VydFJlcXVlc3QsdC5yZWFkTWVzc2FnZShvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSW5zZXJ0UmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuc2V0SW5zZXJ0UmVxdWVzdChvKTticmVhaztjYXNlIDQ6bz1uZXcgcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EZWxldGVSZXF1ZXN0LHQucmVhZE1lc3NhZ2Uobyxwcm90by5jYW9zZGIuZW50aXR5LnYxLkRlbGV0ZVJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLnNldERlbGV0ZVJlcXVlc3Qobyk7YnJlYWs7ZGVmYXVsdDp0LnNraXBGaWVsZCgpfXJldHVybiBlfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlRyYW5zYWN0aW9uUmVxdWVzdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHIuQmluYXJ5V3JpdGVyO3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLlRyYW5zYWN0aW9uUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNhY3Rpb25SZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG89dm9pZCAwO251bGwhPShvPWUuZ2V0UmV0cmlldmVSZXF1ZXN0KCkpJiZ0LndyaXRlTWVzc2FnZSgxLG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZXRyaWV2ZVJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpLG51bGwhPShvPWUuZ2V0VXBkYXRlUmVxdWVzdCgpKSYmdC53cml0ZU1lc3NhZ2UoMixvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVXBkYXRlUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciksbnVsbCE9KG89ZS5nZXRJbnNlcnRSZXF1ZXN0KCkpJiZ0LndyaXRlTWVzc2FnZSgzLG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5JbnNlcnRSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKSxudWxsIT0obz1lLmdldERlbGV0ZVJlcXVlc3QoKSkmJnQud3JpdGVNZXNzYWdlKDQsbyxwcm90by5jYW9zZGIuZW50aXR5LnYxLkRlbGV0ZVJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlRyYW5zYWN0aW9uUmVxdWVzdC5wcm90b3R5cGUuZ2V0UmV0cmlldmVSZXF1ZXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcyxwcm90by5jYW9zZGIuZW50aXR5LnYxLlJldHJpZXZlUmVxdWVzdCwxKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5UcmFuc2FjdGlvblJlcXVlc3QucHJvdG90eXBlLnNldFJldHJpZXZlUmVxdWVzdD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldE9uZW9mV3JhcHBlckZpZWxkKHRoaXMsMSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlRyYW5zYWN0aW9uUmVxdWVzdC5vbmVvZkdyb3Vwc19bMF0sZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNhY3Rpb25SZXF1ZXN0LnByb3RvdHlwZS5jbGVhclJldHJpZXZlUmVxdWVzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldFJldHJpZXZlUmVxdWVzdCh2b2lkIDApfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlRyYW5zYWN0aW9uUmVxdWVzdC5wcm90b3R5cGUuaGFzUmV0cmlldmVSZXF1ZXN0PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDEpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlRyYW5zYWN0aW9uUmVxdWVzdC5wcm90b3R5cGUuZ2V0VXBkYXRlUmVxdWVzdD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5VcGRhdGVSZXF1ZXN0LDIpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlRyYW5zYWN0aW9uUmVxdWVzdC5wcm90b3R5cGUuc2V0VXBkYXRlUmVxdWVzdD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldE9uZW9mV3JhcHBlckZpZWxkKHRoaXMsMixwcm90by5jYW9zZGIuZW50aXR5LnYxLlRyYW5zYWN0aW9uUmVxdWVzdC5vbmVvZkdyb3Vwc19bMF0sZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNhY3Rpb25SZXF1ZXN0LnByb3RvdHlwZS5jbGVhclVwZGF0ZVJlcXVlc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRVcGRhdGVSZXF1ZXN0KHZvaWQgMCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNhY3Rpb25SZXF1ZXN0LnByb3RvdHlwZS5oYXNVcGRhdGVSZXF1ZXN0PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDIpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlRyYW5zYWN0aW9uUmVxdWVzdC5wcm90b3R5cGUuZ2V0SW5zZXJ0UmVxdWVzdD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5JbnNlcnRSZXF1ZXN0LDMpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlRyYW5zYWN0aW9uUmVxdWVzdC5wcm90b3R5cGUuc2V0SW5zZXJ0UmVxdWVzdD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldE9uZW9mV3JhcHBlckZpZWxkKHRoaXMsMyxwcm90by5jYW9zZGIuZW50aXR5LnYxLlRyYW5zYWN0aW9uUmVxdWVzdC5vbmVvZkdyb3Vwc19bMF0sZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNhY3Rpb25SZXF1ZXN0LnByb3RvdHlwZS5jbGVhckluc2VydFJlcXVlc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRJbnNlcnRSZXF1ZXN0KHZvaWQgMCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNhY3Rpb25SZXF1ZXN0LnByb3RvdHlwZS5oYXNJbnNlcnRSZXF1ZXN0PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDMpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlRyYW5zYWN0aW9uUmVxdWVzdC5wcm90b3R5cGUuZ2V0RGVsZXRlUmVxdWVzdD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EZWxldGVSZXF1ZXN0LDQpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlRyYW5zYWN0aW9uUmVxdWVzdC5wcm90b3R5cGUuc2V0RGVsZXRlUmVxdWVzdD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldE9uZW9mV3JhcHBlckZpZWxkKHRoaXMsNCxwcm90by5jYW9zZGIuZW50aXR5LnYxLlRyYW5zYWN0aW9uUmVxdWVzdC5vbmVvZkdyb3Vwc19bMF0sZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNhY3Rpb25SZXF1ZXN0LnByb3RvdHlwZS5jbGVhckRlbGV0ZVJlcXVlc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXREZWxldGVSZXF1ZXN0KHZvaWQgMCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNhY3Rpb25SZXF1ZXN0LnByb3RvdHlwZS5oYXNEZWxldGVSZXF1ZXN0PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDQpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlRyYW5zYWN0aW9uUmVzcG9uc2Uub25lb2ZHcm91cHNfPVtbMSwyLDMsNF1dLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNhY3Rpb25SZXNwb25zZS5UcmFuc2FjdGlvblJlc3BvbnNlQ2FzZT17VFJBTlNBQ1RJT05fUkVTUE9OU0VfTk9UX1NFVDowLERFTEVURV9SRVNQT05TRToxLFVQREFURV9SRVNQT05TRToyLFJFVFJJRVZFX1JFU1BPTlNFOjMsSU5TRVJUX1JFU1BPTlNFOjR9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNhY3Rpb25SZXNwb25zZS5wcm90b3R5cGUuZ2V0VHJhbnNhY3Rpb25SZXNwb25zZUNhc2U9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmNvbXB1dGVPbmVvZkNhc2UodGhpcyxwcm90by5jYW9zZGIuZW50aXR5LnYxLlRyYW5zYWN0aW9uUmVzcG9uc2Uub25lb2ZHcm91cHNfWzBdKX0sci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNhY3Rpb25SZXNwb25zZS5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNhY3Rpb25SZXNwb25zZS50b09iamVjdChlLHRoaXMpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlRyYW5zYWN0aW9uUmVzcG9uc2UudG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbyxyPXtkZWxldGVSZXNwb25zZToobz10LmdldERlbGV0ZVJlc3BvbnNlKCkpJiZwcm90by5jYW9zZGIuZW50aXR5LnYxLkRlbGV0ZVJlc3BvbnNlLnRvT2JqZWN0KGUsbyksdXBkYXRlUmVzcG9uc2U6KG89dC5nZXRVcGRhdGVSZXNwb25zZSgpKSYmcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5VcGRhdGVSZXNwb25zZS50b09iamVjdChlLG8pLHJldHJpZXZlUmVzcG9uc2U6KG89dC5nZXRSZXRyaWV2ZVJlc3BvbnNlKCkpJiZwcm90by5jYW9zZGIuZW50aXR5LnYxLlJldHJpZXZlUmVzcG9uc2UudG9PYmplY3QoZSxvKSxpbnNlcnRSZXNwb25zZToobz10LmdldEluc2VydFJlc3BvbnNlKCkpJiZwcm90by5jYW9zZGIuZW50aXR5LnYxLkluc2VydFJlc3BvbnNlLnRvT2JqZWN0KGUsbyl9O3JldHVybiBlJiYoci4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxyfSkscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5UcmFuc2FjdGlvblJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLlRyYW5zYWN0aW9uUmVzcG9uc2U7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNhY3Rpb25SZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5UcmFuc2FjdGlvblJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOylzd2l0Y2godC5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIG89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGVsZXRlUmVzcG9uc2U7dC5yZWFkTWVzc2FnZShvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGVsZXRlUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLnNldERlbGV0ZVJlc3BvbnNlKG8pO2JyZWFrO2Nhc2UgMjpvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLlVwZGF0ZVJlc3BvbnNlLHQucmVhZE1lc3NhZ2Uobyxwcm90by5jYW9zZGIuZW50aXR5LnYxLlVwZGF0ZVJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5zZXRVcGRhdGVSZXNwb25zZShvKTticmVhaztjYXNlIDM6bz1uZXcgcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZXRyaWV2ZVJlc3BvbnNlLHQucmVhZE1lc3NhZ2Uobyxwcm90by5jYW9zZGIuZW50aXR5LnYxLlJldHJpZXZlUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLnNldFJldHJpZXZlUmVzcG9uc2Uobyk7YnJlYWs7Y2FzZSA0Om89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSW5zZXJ0UmVzcG9uc2UsdC5yZWFkTWVzc2FnZShvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSW5zZXJ0UmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLnNldEluc2VydFJlc3BvbnNlKG8pO2JyZWFrO2RlZmF1bHQ6dC5za2lwRmllbGQoKX1yZXR1cm4gZX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5UcmFuc2FjdGlvblJlc3BvbnNlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNhY3Rpb25SZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNhY3Rpb25SZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe3ZhciBvPXZvaWQgMDtudWxsIT0obz1lLmdldERlbGV0ZVJlc3BvbnNlKCkpJiZ0LndyaXRlTWVzc2FnZSgxLG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EZWxldGVSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciksbnVsbCE9KG89ZS5nZXRVcGRhdGVSZXNwb25zZSgpKSYmdC53cml0ZU1lc3NhZ2UoMixvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVXBkYXRlUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpLG51bGwhPShvPWUuZ2V0UmV0cmlldmVSZXNwb25zZSgpKSYmdC53cml0ZU1lc3NhZ2UoMyxvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmV0cmlldmVSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciksbnVsbCE9KG89ZS5nZXRJbnNlcnRSZXNwb25zZSgpKSYmdC53cml0ZU1lc3NhZ2UoNCxvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSW5zZXJ0UmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlRyYW5zYWN0aW9uUmVzcG9uc2UucHJvdG90eXBlLmdldERlbGV0ZVJlc3BvbnNlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcyxwcm90by5jYW9zZGIuZW50aXR5LnYxLkRlbGV0ZVJlc3BvbnNlLDEpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlRyYW5zYWN0aW9uUmVzcG9uc2UucHJvdG90eXBlLnNldERlbGV0ZVJlc3BvbnNlPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0T25lb2ZXcmFwcGVyRmllbGQodGhpcywxLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNhY3Rpb25SZXNwb25zZS5vbmVvZkdyb3Vwc19bMF0sZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNhY3Rpb25SZXNwb25zZS5wcm90b3R5cGUuY2xlYXJEZWxldGVSZXNwb25zZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldERlbGV0ZVJlc3BvbnNlKHZvaWQgMCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNhY3Rpb25SZXNwb25zZS5wcm90b3R5cGUuaGFzRGVsZXRlUmVzcG9uc2U9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNhY3Rpb25SZXNwb25zZS5wcm90b3R5cGUuZ2V0VXBkYXRlUmVzcG9uc2U9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVXBkYXRlUmVzcG9uc2UsMil9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNhY3Rpb25SZXNwb25zZS5wcm90b3R5cGUuc2V0VXBkYXRlUmVzcG9uc2U9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRPbmVvZldyYXBwZXJGaWVsZCh0aGlzLDIscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5UcmFuc2FjdGlvblJlc3BvbnNlLm9uZW9mR3JvdXBzX1swXSxlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5UcmFuc2FjdGlvblJlc3BvbnNlLnByb3RvdHlwZS5jbGVhclVwZGF0ZVJlc3BvbnNlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0VXBkYXRlUmVzcG9uc2Uodm9pZCAwKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5UcmFuc2FjdGlvblJlc3BvbnNlLnByb3RvdHlwZS5oYXNVcGRhdGVSZXNwb25zZT1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywyKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5UcmFuc2FjdGlvblJlc3BvbnNlLnByb3RvdHlwZS5nZXRSZXRyaWV2ZVJlc3BvbnNlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcyxwcm90by5jYW9zZGIuZW50aXR5LnYxLlJldHJpZXZlUmVzcG9uc2UsMyl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNhY3Rpb25SZXNwb25zZS5wcm90b3R5cGUuc2V0UmV0cmlldmVSZXNwb25zZT1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldE9uZW9mV3JhcHBlckZpZWxkKHRoaXMsMyxwcm90by5jYW9zZGIuZW50aXR5LnYxLlRyYW5zYWN0aW9uUmVzcG9uc2Uub25lb2ZHcm91cHNfWzBdLGUpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlRyYW5zYWN0aW9uUmVzcG9uc2UucHJvdG90eXBlLmNsZWFyUmV0cmlldmVSZXNwb25zZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldFJldHJpZXZlUmVzcG9uc2Uodm9pZCAwKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5UcmFuc2FjdGlvblJlc3BvbnNlLnByb3RvdHlwZS5oYXNSZXRyaWV2ZVJlc3BvbnNlPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDMpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlRyYW5zYWN0aW9uUmVzcG9uc2UucHJvdG90eXBlLmdldEluc2VydFJlc3BvbnNlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcyxwcm90by5jYW9zZGIuZW50aXR5LnYxLkluc2VydFJlc3BvbnNlLDQpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlRyYW5zYWN0aW9uUmVzcG9uc2UucHJvdG90eXBlLnNldEluc2VydFJlc3BvbnNlPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0T25lb2ZXcmFwcGVyRmllbGQodGhpcyw0LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNhY3Rpb25SZXNwb25zZS5vbmVvZkdyb3Vwc19bMF0sZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNhY3Rpb25SZXNwb25zZS5wcm90b3R5cGUuY2xlYXJJbnNlcnRSZXNwb25zZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldEluc2VydFJlc3BvbnNlKHZvaWQgMCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNhY3Rpb25SZXNwb25zZS5wcm90b3R5cGUuaGFzSW5zZXJ0UmVzcG9uc2U9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsNCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlUcmFuc2FjdGlvblJlcXVlc3QucmVwZWF0ZWRGaWVsZHNfPVsxXSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVRyYW5zYWN0aW9uUmVxdWVzdC5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlUcmFuc2FjdGlvblJlcXVlc3QudG9PYmplY3QoZSx0aGlzKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVRyYW5zYWN0aW9uUmVxdWVzdC50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvPXtyZXF1ZXN0c0xpc3Q6ci5NZXNzYWdlLnRvT2JqZWN0TGlzdCh0LmdldFJlcXVlc3RzTGlzdCgpLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNhY3Rpb25SZXF1ZXN0LnRvT2JqZWN0LGUpfTtyZXR1cm4gZSYmKG8uJGpzcGJNZXNzYWdlSW5zdGFuY2U9dCksb30pLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlUcmFuc2FjdGlvblJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlUcmFuc2FjdGlvblJlcXVlc3Q7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlUcmFuc2FjdGlvblJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8sdCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlUcmFuc2FjdGlvblJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KWlmKDE9PT10LmdldEZpZWxkTnVtYmVyKCkpe3ZhciBvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLlRyYW5zYWN0aW9uUmVxdWVzdDt0LnJlYWRNZXNzYWdlKG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5UcmFuc2FjdGlvblJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLmFkZFJlcXVlc3RzKG8pfWVsc2UgdC5za2lwRmllbGQoKTtyZXR1cm4gZX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVRyYW5zYWN0aW9uUmVxdWVzdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHIuQmluYXJ5V3JpdGVyO3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpVHJhbnNhY3Rpb25SZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVRyYW5zYWN0aW9uUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe3ZhciBvOyhvPWUuZ2V0UmVxdWVzdHNMaXN0KCkpLmxlbmd0aD4wJiZ0LndyaXRlUmVwZWF0ZWRNZXNzYWdlKDEsbyxwcm90by5jYW9zZGIuZW50aXR5LnYxLlRyYW5zYWN0aW9uUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcil9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlUcmFuc2FjdGlvblJlcXVlc3QucHJvdG90eXBlLmdldFJlcXVlc3RzTGlzdD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyxwcm90by5jYW9zZGIuZW50aXR5LnYxLlRyYW5zYWN0aW9uUmVxdWVzdCwxKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVRyYW5zYWN0aW9uUmVxdWVzdC5wcm90b3R5cGUuc2V0UmVxdWVzdHNMaXN0PWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywxLGUpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpVHJhbnNhY3Rpb25SZXF1ZXN0LnByb3RvdHlwZS5hZGRSZXF1ZXN0cz1mdW5jdGlvbihlLHQpe3JldHVybiByLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDEsZSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlRyYW5zYWN0aW9uUmVxdWVzdCx0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVRyYW5zYWN0aW9uUmVxdWVzdC5wcm90b3R5cGUuY2xlYXJSZXF1ZXN0c0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRSZXF1ZXN0c0xpc3QoW10pfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpVHJhbnNhY3Rpb25SZXNwb25zZS5yZXBlYXRlZEZpZWxkc189WzEsMiwzLDRdLHIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpVHJhbnNhY3Rpb25SZXNwb25zZS5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlUcmFuc2FjdGlvblJlc3BvbnNlLnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlUcmFuc2FjdGlvblJlc3BvbnNlLnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG89e3Jlc3BvbnNlc0xpc3Q6ci5NZXNzYWdlLnRvT2JqZWN0TGlzdCh0LmdldFJlc3BvbnNlc0xpc3QoKSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlRyYW5zYWN0aW9uUmVzcG9uc2UudG9PYmplY3QsZSksdHJhbnNhY3Rpb25FcnJvcnNMaXN0OnIuTWVzc2FnZS50b09iamVjdExpc3QodC5nZXRUcmFuc2FjdGlvbkVycm9yc0xpc3QoKSxwcm90by5jYW9zZGIuZW50aXR5LnYxLk1lc3NhZ2UudG9PYmplY3QsZSksdHJhbnNhY3Rpb25XYXJuaW5nc0xpc3Q6ci5NZXNzYWdlLnRvT2JqZWN0TGlzdCh0LmdldFRyYW5zYWN0aW9uV2FybmluZ3NMaXN0KCkscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NZXNzYWdlLnRvT2JqZWN0LGUpLHRyYW5zYWN0aW9uSW5mb3NMaXN0OnIuTWVzc2FnZS50b09iamVjdExpc3QodC5nZXRUcmFuc2FjdGlvbkluZm9zTGlzdCgpLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZS50b09iamVjdCxlKX07cmV0dXJuIGUmJihvLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLG99KSxwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpVHJhbnNhY3Rpb25SZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVRyYW5zYWN0aW9uUmVzcG9uc2U7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlUcmFuc2FjdGlvblJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpVHJhbnNhY3Rpb25SZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspc3dpdGNoKHQuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLlRyYW5zYWN0aW9uUmVzcG9uc2U7dC5yZWFkTWVzc2FnZShvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNhY3Rpb25SZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuYWRkUmVzcG9uc2VzKG8pO2JyZWFrO2Nhc2UgMjpvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLk1lc3NhZ2UsdC5yZWFkTWVzc2FnZShvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuYWRkVHJhbnNhY3Rpb25FcnJvcnMobyk7YnJlYWs7Y2FzZSAzOm89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZSx0LnJlYWRNZXNzYWdlKG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NZXNzYWdlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5hZGRUcmFuc2FjdGlvbldhcm5pbmdzKG8pO2JyZWFrO2Nhc2UgNDpvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLk1lc3NhZ2UsdC5yZWFkTWVzc2FnZShvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuYWRkVHJhbnNhY3Rpb25JbmZvcyhvKTticmVhaztkZWZhdWx0OnQuc2tpcEZpZWxkKCl9cmV0dXJuIGV9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlUcmFuc2FjdGlvblJlc3BvbnNlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlUcmFuc2FjdGlvblJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVRyYW5zYWN0aW9uUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbz12b2lkIDA7KG89ZS5nZXRSZXNwb25zZXNMaXN0KCkpLmxlbmd0aD4wJiZ0LndyaXRlUmVwZWF0ZWRNZXNzYWdlKDEsbyxwcm90by5jYW9zZGIuZW50aXR5LnYxLlRyYW5zYWN0aW9uUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpLChvPWUuZ2V0VHJhbnNhY3Rpb25FcnJvcnNMaXN0KCkpLmxlbmd0aD4wJiZ0LndyaXRlUmVwZWF0ZWRNZXNzYWdlKDIsbyxwcm90by5jYW9zZGIuZW50aXR5LnYxLk1lc3NhZ2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpLChvPWUuZ2V0VHJhbnNhY3Rpb25XYXJuaW5nc0xpc3QoKSkubGVuZ3RoPjAmJnQud3JpdGVSZXBlYXRlZE1lc3NhZ2UoMyxvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciksKG89ZS5nZXRUcmFuc2FjdGlvbkluZm9zTGlzdCgpKS5sZW5ndGg+MCYmdC53cml0ZVJlcGVhdGVkTWVzc2FnZSg0LG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NZXNzYWdlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVRyYW5zYWN0aW9uUmVzcG9uc2UucHJvdG90eXBlLmdldFJlc3BvbnNlc0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5UcmFuc2FjdGlvblJlc3BvbnNlLDEpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpVHJhbnNhY3Rpb25SZXNwb25zZS5wcm90b3R5cGUuc2V0UmVzcG9uc2VzTGlzdD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsMSxlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVRyYW5zYWN0aW9uUmVzcG9uc2UucHJvdG90eXBlLmFkZFJlc3BvbnNlcz1mdW5jdGlvbihlLHQpe3JldHVybiByLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDEsZSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlRyYW5zYWN0aW9uUmVzcG9uc2UsdCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlUcmFuc2FjdGlvblJlc3BvbnNlLnByb3RvdHlwZS5jbGVhclJlc3BvbnNlc0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRSZXNwb25zZXNMaXN0KFtdKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVRyYW5zYWN0aW9uUmVzcG9uc2UucHJvdG90eXBlLmdldFRyYW5zYWN0aW9uRXJyb3JzTGlzdD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyxwcm90by5jYW9zZGIuZW50aXR5LnYxLk1lc3NhZ2UsMil9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlUcmFuc2FjdGlvblJlc3BvbnNlLnByb3RvdHlwZS5zZXRUcmFuc2FjdGlvbkVycm9yc0xpc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDIsZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlUcmFuc2FjdGlvblJlc3BvbnNlLnByb3RvdHlwZS5hZGRUcmFuc2FjdGlvbkVycm9ycz1mdW5jdGlvbihlLHQpe3JldHVybiByLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDIsZSxwcm90by5jYW9zZGIuZW50aXR5LnYxLk1lc3NhZ2UsdCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlUcmFuc2FjdGlvblJlc3BvbnNlLnByb3RvdHlwZS5jbGVhclRyYW5zYWN0aW9uRXJyb3JzTGlzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldFRyYW5zYWN0aW9uRXJyb3JzTGlzdChbXSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlUcmFuc2FjdGlvblJlc3BvbnNlLnByb3RvdHlwZS5nZXRUcmFuc2FjdGlvbldhcm5pbmdzTGlzdD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyxwcm90by5jYW9zZGIuZW50aXR5LnYxLk1lc3NhZ2UsMyl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlUcmFuc2FjdGlvblJlc3BvbnNlLnByb3RvdHlwZS5zZXRUcmFuc2FjdGlvbldhcm5pbmdzTGlzdD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsMyxlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVRyYW5zYWN0aW9uUmVzcG9uc2UucHJvdG90eXBlLmFkZFRyYW5zYWN0aW9uV2FybmluZ3M9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gci5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywzLGUscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NZXNzYWdlLHQpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpVHJhbnNhY3Rpb25SZXNwb25zZS5wcm90b3R5cGUuY2xlYXJUcmFuc2FjdGlvbldhcm5pbmdzTGlzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldFRyYW5zYWN0aW9uV2FybmluZ3NMaXN0KFtdKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVRyYW5zYWN0aW9uUmVzcG9uc2UucHJvdG90eXBlLmdldFRyYW5zYWN0aW9uSW5mb3NMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZSw0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVRyYW5zYWN0aW9uUmVzcG9uc2UucHJvdG90eXBlLnNldFRyYW5zYWN0aW9uSW5mb3NMaXN0PWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyw0LGUpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpVHJhbnNhY3Rpb25SZXNwb25zZS5wcm90b3R5cGUuYWRkVHJhbnNhY3Rpb25JbmZvcz1mdW5jdGlvbihlLHQpe3JldHVybiByLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDQsZSxwcm90by5jYW9zZGIuZW50aXR5LnYxLk1lc3NhZ2UsdCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlUcmFuc2FjdGlvblJlc3BvbnNlLnByb3RvdHlwZS5jbGVhclRyYW5zYWN0aW9uSW5mb3NMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0VHJhbnNhY3Rpb25JbmZvc0xpc3QoW10pfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpUmV0cmlldmVFbnRpdHlBQ0xSZXF1ZXN0LnJlcGVhdGVkRmllbGRzXz1bMV0sci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlSZXRyaWV2ZUVudGl0eUFDTFJlcXVlc3QucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpUmV0cmlldmVFbnRpdHlBQ0xSZXF1ZXN0LnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlSZXRyaWV2ZUVudGl0eUFDTFJlcXVlc3QudG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbyxuPXtpZExpc3Q6bnVsbD09KG89ci5NZXNzYWdlLmdldFJlcGVhdGVkRmllbGQodCwxKSk/dm9pZCAwOm99O3JldHVybiBlJiYobi4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxufSkscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVJldHJpZXZlRW50aXR5QUNMUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVJldHJpZXZlRW50aXR5QUNMUmVxdWVzdDtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVJldHJpZXZlRW50aXR5QUNMUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVJldHJpZXZlRW50aXR5QUNMUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspaWYoMT09PXQuZ2V0RmllbGROdW1iZXIoKSl7dmFyIG89dC5yZWFkU3RyaW5nKCk7ZS5hZGRJZChvKX1lbHNlIHQuc2tpcEZpZWxkKCk7cmV0dXJuIGV9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlSZXRyaWV2ZUVudGl0eUFDTFJlcXVlc3QucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVJldHJpZXZlRW50aXR5QUNMUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlSZXRyaWV2ZUVudGl0eUFDTFJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbzsobz1lLmdldElkTGlzdCgpKS5sZW5ndGg+MCYmdC53cml0ZVJlcGVhdGVkU3RyaW5nKDEsbyl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlSZXRyaWV2ZUVudGl0eUFDTFJlcXVlc3QucHJvdG90eXBlLmdldElkTGlzdD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZCh0aGlzLDEpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpUmV0cmlldmVFbnRpdHlBQ0xSZXF1ZXN0LnByb3RvdHlwZS5zZXRJZExpc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDEsZXx8W10pfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpUmV0cmlldmVFbnRpdHlBQ0xSZXF1ZXN0LnByb3RvdHlwZS5hZGRJZD1mdW5jdGlvbihlLHQpe3JldHVybiByLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZEZpZWxkKHRoaXMsMSxlLHQpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpUmV0cmlldmVFbnRpdHlBQ0xSZXF1ZXN0LnByb3RvdHlwZS5jbGVhcklkTGlzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldElkTGlzdChbXSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlSZXRyaWV2ZUVudGl0eUFDTFJlc3BvbnNlLnJlcGVhdGVkRmllbGRzXz1bMV0sci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlSZXRyaWV2ZUVudGl0eUFDTFJlc3BvbnNlLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVJldHJpZXZlRW50aXR5QUNMUmVzcG9uc2UudG9PYmplY3QoZSx0aGlzKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVJldHJpZXZlRW50aXR5QUNMUmVzcG9uc2UudG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbz17YWNsc0xpc3Q6ci5NZXNzYWdlLnRvT2JqZWN0TGlzdCh0LmdldEFjbHNMaXN0KCkscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlBQ0wudG9PYmplY3QsZSl9O3JldHVybiBlJiYoby4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxvfSkscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVJldHJpZXZlRW50aXR5QUNMUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlSZXRyaWV2ZUVudGl0eUFDTFJlc3BvbnNlO3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpUmV0cmlldmVFbnRpdHlBQ0xSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVJldHJpZXZlRW50aXR5QUNMUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KWlmKDE9PT10LmdldEZpZWxkTnVtYmVyKCkpe3ZhciBvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eUFDTDt0LnJlYWRNZXNzYWdlKG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlBQ0wuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLmFkZEFjbHMobyl9ZWxzZSB0LnNraXBGaWVsZCgpO3JldHVybiBlfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpUmV0cmlldmVFbnRpdHlBQ0xSZXNwb25zZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHIuQmluYXJ5V3JpdGVyO3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpUmV0cmlldmVFbnRpdHlBQ0xSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlSZXRyaWV2ZUVudGl0eUFDTFJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG87KG89ZS5nZXRBY2xzTGlzdCgpKS5sZW5ndGg+MCYmdC53cml0ZVJlcGVhdGVkTWVzc2FnZSgxLG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlBQ0wuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpUmV0cmlldmVFbnRpdHlBQ0xSZXNwb25zZS5wcm90b3R5cGUuZ2V0QWNsc0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlBQ0wsMSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlSZXRyaWV2ZUVudGl0eUFDTFJlc3BvbnNlLnByb3RvdHlwZS5zZXRBY2xzTGlzdD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsMSxlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVJldHJpZXZlRW50aXR5QUNMUmVzcG9uc2UucHJvdG90eXBlLmFkZEFjbHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gci5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywxLGUscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlBQ0wsdCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlSZXRyaWV2ZUVudGl0eUFDTFJlc3BvbnNlLnByb3RvdHlwZS5jbGVhckFjbHNMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0QWNsc0xpc3QoW10pfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpVXBkYXRlRW50aXR5QUNMUmVxdWVzdC5yZXBlYXRlZEZpZWxkc189WzFdLHIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpVXBkYXRlRW50aXR5QUNMUmVxdWVzdC5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlVcGRhdGVFbnRpdHlBQ0xSZXF1ZXN0LnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlVcGRhdGVFbnRpdHlBQ0xSZXF1ZXN0LnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG89e2FjbHNMaXN0OnIuTWVzc2FnZS50b09iamVjdExpc3QodC5nZXRBY2xzTGlzdCgpLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5QUNMLnRvT2JqZWN0LGUpfTtyZXR1cm4gZSYmKG8uJGpzcGJNZXNzYWdlSW5zdGFuY2U9dCksb30pLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlVcGRhdGVFbnRpdHlBQ0xSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpVXBkYXRlRW50aXR5QUNMUmVxdWVzdDtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVVwZGF0ZUVudGl0eUFDTFJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8sdCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlVcGRhdGVFbnRpdHlBQ0xSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOylpZigxPT09dC5nZXRGaWVsZE51bWJlcigpKXt2YXIgbz1uZXcgcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlBQ0w7dC5yZWFkTWVzc2FnZShvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5QUNMLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5hZGRBY2xzKG8pfWVsc2UgdC5za2lwRmllbGQoKTtyZXR1cm4gZX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVVwZGF0ZUVudGl0eUFDTFJlcXVlc3QucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVVwZGF0ZUVudGl0eUFDTFJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpVXBkYXRlRW50aXR5QUNMUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe3ZhciBvOyhvPWUuZ2V0QWNsc0xpc3QoKSkubGVuZ3RoPjAmJnQud3JpdGVSZXBlYXRlZE1lc3NhZ2UoMSxvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5QUNMLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVVwZGF0ZUVudGl0eUFDTFJlcXVlc3QucHJvdG90eXBlLmdldEFjbHNMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5QUNMLDEpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpVXBkYXRlRW50aXR5QUNMUmVxdWVzdC5wcm90b3R5cGUuc2V0QWNsc0xpc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDEsZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlVcGRhdGVFbnRpdHlBQ0xSZXF1ZXN0LnByb3RvdHlwZS5hZGRBY2xzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsMSxlLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5QUNMLHQpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpVXBkYXRlRW50aXR5QUNMUmVxdWVzdC5wcm90b3R5cGUuY2xlYXJBY2xzTGlzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldEFjbHNMaXN0KFtdKX0sci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlVcGRhdGVFbnRpdHlBQ0xSZXNwb25zZS5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlVcGRhdGVFbnRpdHlBQ0xSZXNwb25zZS50b09iamVjdChlLHRoaXMpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpVXBkYXRlRW50aXR5QUNMUmVzcG9uc2UudG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbz17fTtyZXR1cm4gZSYmKG8uJGpzcGJNZXNzYWdlSW5zdGFuY2U9dCksb30pLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlVcGRhdGVFbnRpdHlBQ0xSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVVwZGF0ZUVudGl0eUFDTFJlc3BvbnNlO3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpVXBkYXRlRW50aXR5QUNMUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8sdCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlVcGRhdGVFbnRpdHlBQ0xSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspdC5nZXRGaWVsZE51bWJlcigpLHQuc2tpcEZpZWxkKCk7cmV0dXJuIGV9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlVcGRhdGVFbnRpdHlBQ0xSZXNwb25zZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHIuQmluYXJ5V3JpdGVyO3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpVXBkYXRlRW50aXR5QUNMUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpVXBkYXRlRW50aXR5QUNMUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt9O3Byb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5QUNMLnJlcGVhdGVkRmllbGRzXz1bMl0sci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5QUNMLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlBQ0wudG9PYmplY3QoZSx0aGlzKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlBQ0wudG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbz17aWQ6ci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodCwxLFwiXCIpLHJ1bGVzTGlzdDpyLk1lc3NhZ2UudG9PYmplY3RMaXN0KHQuZ2V0UnVsZXNMaXN0KCkscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlQZXJtaXNzaW9uUnVsZS50b09iamVjdCxlKSxwZXJtaXNzaW9uOnIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHQsMywwKX07cmV0dXJuIGUmJihvLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLG99KSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eUFDTC5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlBQ0w7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5QUNMLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eUFDTC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspc3dpdGNoKHQuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBvPXQucmVhZFN0cmluZygpO2Uuc2V0SWQobyk7YnJlYWs7Y2FzZSAyOm89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UGVybWlzc2lvblJ1bGUsdC5yZWFkTWVzc2FnZShvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UGVybWlzc2lvblJ1bGUuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLmFkZFJ1bGVzKG8pO2JyZWFrO2Nhc2UgMzpvPXQucmVhZEVudW0oKSxlLnNldFBlcm1pc3Npb24obyk7YnJlYWs7ZGVmYXVsdDp0LnNraXBGaWVsZCgpfXJldHVybiBlfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eUFDTC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHIuQmluYXJ5V3JpdGVyO3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eUFDTC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5QUNMLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG89dm9pZCAwOyhvPWUuZ2V0SWQoKSkubGVuZ3RoPjAmJnQud3JpdGVTdHJpbmcoMSxvKSwobz1lLmdldFJ1bGVzTGlzdCgpKS5sZW5ndGg+MCYmdC53cml0ZVJlcGVhdGVkTWVzc2FnZSgyLG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlQZXJtaXNzaW9uUnVsZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciksMCE9PShvPWUuZ2V0UGVybWlzc2lvbigpKSYmdC53cml0ZUVudW0oMyxvKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlBQ0wucHJvdG90eXBlLmdldElkPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMSxcIlwiKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlBQ0wucHJvdG90eXBlLnNldElkPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywxLGUpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eUFDTC5wcm90b3R5cGUuZ2V0UnVsZXNMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UGVybWlzc2lvblJ1bGUsMil9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5QUNMLnByb3RvdHlwZS5zZXRSdWxlc0xpc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDIsZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5QUNMLnByb3RvdHlwZS5hZGRSdWxlcz1mdW5jdGlvbihlLHQpe3JldHVybiByLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDIsZSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVBlcm1pc3Npb25SdWxlLHQpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eUFDTC5wcm90b3R5cGUuY2xlYXJSdWxlc0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRSdWxlc0xpc3QoW10pfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eUFDTC5wcm90b3R5cGUuZ2V0UGVybWlzc2lvbj1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDMsMCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5QUNMLnByb3RvdHlwZS5zZXRQZXJtaXNzaW9uPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UHJvdG8zRW51bUZpZWxkKHRoaXMsMyxlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlQZXJtaXNzaW9uUnVsZS5yZXBlYXRlZEZpZWxkc189WzQsNV0sci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UGVybWlzc2lvblJ1bGUucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVBlcm1pc3Npb25SdWxlLnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UGVybWlzc2lvblJ1bGUudG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbyxuPXtyb2xlOnIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHQsMSxcIlwiKSxwcmlvcml0eTpyLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQodCwyLCExKSxncmFudDpyLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQodCwzLCExKSxwZXJtaXNzaW9uc0xpc3Q6bnVsbD09KG89ci5NZXNzYWdlLmdldFJlcGVhdGVkRmllbGQodCw0KSk/dm9pZCAwOm8sY2FwYWJpbGl0aWVzTGlzdDpudWxsPT0obz1yLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZCh0LDUpKT92b2lkIDA6b307cmV0dXJuIGUmJihuLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLG59KSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVBlcm1pc3Npb25SdWxlLmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVBlcm1pc3Npb25SdWxlO3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVBlcm1pc3Npb25SdWxlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVBlcm1pc3Npb25SdWxlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOylzd2l0Y2godC5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIG89dC5yZWFkU3RyaW5nKCk7ZS5zZXRSb2xlKG8pO2JyZWFrO2Nhc2UgMjpvPXQucmVhZEJvb2woKSxlLnNldFByaW9yaXR5KG8pO2JyZWFrO2Nhc2UgMzpvPXQucmVhZEJvb2woKSxlLnNldEdyYW50KG8pO2JyZWFrO2Nhc2UgNDpmb3IodmFyIHI9dC5pc0RlbGltaXRlZCgpP3QucmVhZFBhY2tlZEVudW0oKTpbdC5yZWFkRW51bSgpXSxuPTA7bjxyLmxlbmd0aDtuKyspZS5hZGRQZXJtaXNzaW9ucyhyW25dKTticmVhaztjYXNlIDU6Zm9yKHI9dC5pc0RlbGltaXRlZCgpP3QucmVhZFBhY2tlZEVudW0oKTpbdC5yZWFkRW51bSgpXSxuPTA7bjxyLmxlbmd0aDtuKyspZS5hZGRDYXBhYmlsaXRpZXMocltuXSk7YnJlYWs7ZGVmYXVsdDp0LnNraXBGaWVsZCgpfXJldHVybiBlfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVBlcm1pc3Npb25SdWxlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UGVybWlzc2lvblJ1bGUuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVBlcm1pc3Npb25SdWxlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG89dm9pZCAwOyhvPWUuZ2V0Um9sZSgpKS5sZW5ndGg+MCYmdC53cml0ZVN0cmluZygxLG8pLChvPWUuZ2V0UHJpb3JpdHkoKSkmJnQud3JpdGVCb29sKDIsbyksKG89ZS5nZXRHcmFudCgpKSYmdC53cml0ZUJvb2woMyxvKSwobz1lLmdldFBlcm1pc3Npb25zTGlzdCgpKS5sZW5ndGg+MCYmdC53cml0ZVBhY2tlZEVudW0oNCxvKSwobz1lLmdldENhcGFiaWxpdGllc0xpc3QoKSkubGVuZ3RoPjAmJnQud3JpdGVQYWNrZWRFbnVtKDUsbyl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UGVybWlzc2lvblJ1bGUucHJvdG90eXBlLmdldFJvbGU9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywxLFwiXCIpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVBlcm1pc3Npb25SdWxlLnByb3RvdHlwZS5zZXRSb2xlPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywxLGUpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVBlcm1pc3Npb25SdWxlLnByb3RvdHlwZS5nZXRQcmlvcml0eT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQodGhpcywyLCExKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlQZXJtaXNzaW9uUnVsZS5wcm90b3R5cGUuc2V0UHJpb3JpdHk9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRQcm90bzNCb29sZWFuRmllbGQodGhpcywyLGUpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVBlcm1pc3Npb25SdWxlLnByb3RvdHlwZS5nZXRHcmFudD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQodGhpcywzLCExKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlQZXJtaXNzaW9uUnVsZS5wcm90b3R5cGUuc2V0R3JhbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRQcm90bzNCb29sZWFuRmllbGQodGhpcywzLGUpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVBlcm1pc3Npb25SdWxlLnByb3RvdHlwZS5nZXRQZXJtaXNzaW9uc0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFJlcGVhdGVkRmllbGQodGhpcyw0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlQZXJtaXNzaW9uUnVsZS5wcm90b3R5cGUuc2V0UGVybWlzc2lvbnNMaXN0PWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0RmllbGQodGhpcyw0LGV8fFtdKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlQZXJtaXNzaW9uUnVsZS5wcm90b3R5cGUuYWRkUGVybWlzc2lvbnM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gci5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRGaWVsZCh0aGlzLDQsZSx0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlQZXJtaXNzaW9uUnVsZS5wcm90b3R5cGUuY2xlYXJQZXJtaXNzaW9uc0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRQZXJtaXNzaW9uc0xpc3QoW10pfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVBlcm1pc3Npb25SdWxlLnByb3RvdHlwZS5nZXRDYXBhYmlsaXRpZXNMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkKHRoaXMsNSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UGVybWlzc2lvblJ1bGUucHJvdG90eXBlLnNldENhcGFiaWxpdGllc0xpc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDUsZXx8W10pfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVBlcm1pc3Npb25SdWxlLnByb3RvdHlwZS5hZGRDYXBhYmlsaXRpZXM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gci5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRGaWVsZCh0aGlzLDUsZSx0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlQZXJtaXNzaW9uUnVsZS5wcm90b3R5cGUuY2xlYXJDYXBhYmlsaXRpZXNMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0Q2FwYWJpbGl0aWVzTGlzdChbXSl9LHIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVDaHVuay5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZUNodW5rLnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZUNodW5rLnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG8scj17ZmlsZVRyYW5zbWlzc2lvbklkOihvPXQuZ2V0RmlsZVRyYW5zbWlzc2lvbklkKCkpJiZwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVUcmFuc21pc3Npb25JZC50b09iamVjdChlLG8pLGRhdGE6dC5nZXREYXRhX2FzQjY0KCl9O3JldHVybiBlJiYoci4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxyfSkscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlQ2h1bmsuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZUNodW5rO3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVDaHVuay5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlQ2h1bmsuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KXN3aXRjaCh0LmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgbz1uZXcgcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlVHJhbnNtaXNzaW9uSWQ7dC5yZWFkTWVzc2FnZShvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZVRyYW5zbWlzc2lvbklkLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5zZXRGaWxlVHJhbnNtaXNzaW9uSWQobyk7YnJlYWs7Y2FzZSAyOm89dC5yZWFkQnl0ZXMoKSxlLnNldERhdGEobyk7YnJlYWs7ZGVmYXVsdDp0LnNraXBGaWVsZCgpfXJldHVybiBlfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVDaHVuay5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHIuQmluYXJ5V3JpdGVyO3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVDaHVuay5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZUNodW5rLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG89dm9pZCAwO251bGwhPShvPWUuZ2V0RmlsZVRyYW5zbWlzc2lvbklkKCkpJiZ0LndyaXRlTWVzc2FnZSgxLG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlVHJhbnNtaXNzaW9uSWQuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpLChvPWUuZ2V0RGF0YV9hc1U4KCkpLmxlbmd0aD4wJiZ0LndyaXRlQnl0ZXMoMixvKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlQ2h1bmsucHJvdG90eXBlLmdldEZpbGVUcmFuc21pc3Npb25JZD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlVHJhbnNtaXNzaW9uSWQsMSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZUNodW5rLnByb3RvdHlwZS5zZXRGaWxlVHJhbnNtaXNzaW9uSWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRXcmFwcGVyRmllbGQodGhpcywxLGUpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVDaHVuay5wcm90b3R5cGUuY2xlYXJGaWxlVHJhbnNtaXNzaW9uSWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRGaWxlVHJhbnNtaXNzaW9uSWQodm9pZCAwKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlQ2h1bmsucHJvdG90eXBlLmhhc0ZpbGVUcmFuc21pc3Npb25JZD1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywxKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlQ2h1bmsucHJvdG90eXBlLmdldERhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywyLFwiXCIpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVDaHVuay5wcm90b3R5cGUuZ2V0RGF0YV9hc0I2ND1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuYnl0ZXNBc0I2NCh0aGlzLmdldERhdGEoKSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZUNodW5rLnByb3RvdHlwZS5nZXREYXRhX2FzVTg9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmJ5dGVzQXNVOCh0aGlzLmdldERhdGEoKSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZUNodW5rLnByb3RvdHlwZS5zZXREYXRhPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UHJvdG8zQnl0ZXNGaWVsZCh0aGlzLDIsZSl9LHIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVUcmFuc21pc3Npb25JZC5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZVRyYW5zbWlzc2lvbklkLnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZVRyYW5zbWlzc2lvbklkLnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG89e3JlZ2lzdHJhdGlvbklkOnIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHQsMSxcIlwiKSxmaWxlSWQ6ci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodCwyLFwiXCIpfTtyZXR1cm4gZSYmKG8uJGpzcGJNZXNzYWdlSW5zdGFuY2U9dCksb30pLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZVRyYW5zbWlzc2lvbklkLmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVUcmFuc21pc3Npb25JZDtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlVHJhbnNtaXNzaW9uSWQuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8sdCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZVRyYW5zbWlzc2lvbklkLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOylzd2l0Y2godC5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIG89dC5yZWFkU3RyaW5nKCk7ZS5zZXRSZWdpc3RyYXRpb25JZChvKTticmVhaztjYXNlIDI6bz10LnJlYWRTdHJpbmcoKSxlLnNldEZpbGVJZChvKTticmVhaztkZWZhdWx0OnQuc2tpcEZpZWxkKCl9cmV0dXJuIGV9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZVRyYW5zbWlzc2lvbklkLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZVRyYW5zbWlzc2lvbklkLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlVHJhbnNtaXNzaW9uSWQuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbz12b2lkIDA7KG89ZS5nZXRSZWdpc3RyYXRpb25JZCgpKS5sZW5ndGg+MCYmdC53cml0ZVN0cmluZygxLG8pLChvPWUuZ2V0RmlsZUlkKCkpLmxlbmd0aD4wJiZ0LndyaXRlU3RyaW5nKDIsbyl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZVRyYW5zbWlzc2lvbklkLnByb3RvdHlwZS5nZXRSZWdpc3RyYXRpb25JZD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDEsXCJcIil9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZVRyYW5zbWlzc2lvbklkLnByb3RvdHlwZS5zZXRSZWdpc3RyYXRpb25JZD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsMSxlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlVHJhbnNtaXNzaW9uSWQucHJvdG90eXBlLmdldEZpbGVJZD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDIsXCJcIil9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZVRyYW5zbWlzc2lvbklkLnByb3RvdHlwZS5zZXRGaWxlSWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLDIsZSl9LHIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVUcmFuc21pc3Npb25TZXR0aW5ncy5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZVRyYW5zbWlzc2lvblNldHRpbmdzLnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZVRyYW5zbWlzc2lvblNldHRpbmdzLnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG89e21heENodW5rU2l6ZTpyLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0LDEsMCksbWF4RmlsZVNpemU6ci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodCwyLDApfTtyZXR1cm4gZSYmKG8uJGpzcGJNZXNzYWdlSW5zdGFuY2U9dCksb30pLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZVRyYW5zbWlzc2lvblNldHRpbmdzLmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVUcmFuc21pc3Npb25TZXR0aW5ncztyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlVHJhbnNtaXNzaW9uU2V0dGluZ3MuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8sdCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZVRyYW5zbWlzc2lvblNldHRpbmdzLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOylzd2l0Y2godC5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIG89dC5yZWFkSW50NjQoKTtlLnNldE1heENodW5rU2l6ZShvKTticmVhaztjYXNlIDI6bz10LnJlYWRJbnQ2NCgpLGUuc2V0TWF4RmlsZVNpemUobyk7YnJlYWs7ZGVmYXVsdDp0LnNraXBGaWVsZCgpfXJldHVybiBlfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVUcmFuc21pc3Npb25TZXR0aW5ncy5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHIuQmluYXJ5V3JpdGVyO3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVUcmFuc21pc3Npb25TZXR0aW5ncy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZVRyYW5zbWlzc2lvblNldHRpbmdzLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG89dm9pZCAwOzAhPT0obz1lLmdldE1heENodW5rU2l6ZSgpKSYmdC53cml0ZUludDY0KDEsbyksMCE9PShvPWUuZ2V0TWF4RmlsZVNpemUoKSkmJnQud3JpdGVJbnQ2NCgyLG8pfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVUcmFuc21pc3Npb25TZXR0aW5ncy5wcm90b3R5cGUuZ2V0TWF4Q2h1bmtTaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMSwwKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlVHJhbnNtaXNzaW9uU2V0dGluZ3MucHJvdG90eXBlLnNldE1heENodW5rU2l6ZT1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFByb3RvM0ludEZpZWxkKHRoaXMsMSxlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlVHJhbnNtaXNzaW9uU2V0dGluZ3MucHJvdG90eXBlLmdldE1heEZpbGVTaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMiwwKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlVHJhbnNtaXNzaW9uU2V0dGluZ3MucHJvdG90eXBlLnNldE1heEZpbGVTaXplPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UHJvdG8zSW50RmllbGQodGhpcywyLGUpfSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZWdpc3RlckZpbGVVcGxvYWRSZXF1ZXN0LnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZWdpc3RlckZpbGVVcGxvYWRSZXF1ZXN0LnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmVnaXN0ZXJGaWxlVXBsb2FkUmVxdWVzdC50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvPXt9O3JldHVybiBlJiYoby4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxvfSkscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZWdpc3RlckZpbGVVcGxvYWRSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLlJlZ2lzdGVyRmlsZVVwbG9hZFJlcXVlc3Q7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmVnaXN0ZXJGaWxlVXBsb2FkUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZWdpc3RlckZpbGVVcGxvYWRSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOyl0LmdldEZpZWxkTnVtYmVyKCksdC5za2lwRmllbGQoKTtyZXR1cm4gZX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZWdpc3RlckZpbGVVcGxvYWRSZXF1ZXN0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmVnaXN0ZXJGaWxlVXBsb2FkUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmVnaXN0ZXJGaWxlVXBsb2FkUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe30sci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmVnaXN0ZXJGaWxlVXBsb2FkUmVzcG9uc2UucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLlJlZ2lzdGVyRmlsZVVwbG9hZFJlc3BvbnNlLnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmVnaXN0ZXJGaWxlVXBsb2FkUmVzcG9uc2UudG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbyxuPXtzdGF0dXM6ci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodCwxLDApLHJlZ2lzdHJhdGlvbklkOnIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHQsMixcIlwiKSx1cGxvYWRTZXR0aW5nczoobz10LmdldFVwbG9hZFNldHRpbmdzKCkpJiZwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVUcmFuc21pc3Npb25TZXR0aW5ncy50b09iamVjdChlLG8pfTtyZXR1cm4gZSYmKG4uJGpzcGJNZXNzYWdlSW5zdGFuY2U9dCksbn0pLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmVnaXN0ZXJGaWxlVXBsb2FkUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmVnaXN0ZXJGaWxlVXBsb2FkUmVzcG9uc2U7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmVnaXN0ZXJGaWxlVXBsb2FkUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8sdCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmVnaXN0ZXJGaWxlVXBsb2FkUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KXN3aXRjaCh0LmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgbz10LnJlYWRFbnVtKCk7ZS5zZXRTdGF0dXMobyk7YnJlYWs7Y2FzZSAyOm89dC5yZWFkU3RyaW5nKCksZS5zZXRSZWdpc3RyYXRpb25JZChvKTticmVhaztjYXNlIDQ6bz1uZXcgcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlVHJhbnNtaXNzaW9uU2V0dGluZ3MsdC5yZWFkTWVzc2FnZShvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZVRyYW5zbWlzc2lvblNldHRpbmdzLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5zZXRVcGxvYWRTZXR0aW5ncyhvKTticmVhaztkZWZhdWx0OnQuc2tpcEZpZWxkKCl9cmV0dXJuIGV9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmVnaXN0ZXJGaWxlVXBsb2FkUmVzcG9uc2UucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZWdpc3RlckZpbGVVcGxvYWRSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmVnaXN0ZXJGaWxlVXBsb2FkUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbz12b2lkIDA7MCE9PShvPWUuZ2V0U3RhdHVzKCkpJiZ0LndyaXRlRW51bSgxLG8pLChvPWUuZ2V0UmVnaXN0cmF0aW9uSWQoKSkubGVuZ3RoPjAmJnQud3JpdGVTdHJpbmcoMixvKSxudWxsIT0obz1lLmdldFVwbG9hZFNldHRpbmdzKCkpJiZ0LndyaXRlTWVzc2FnZSg0LG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlVHJhbnNtaXNzaW9uU2V0dGluZ3Muc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlJlZ2lzdGVyRmlsZVVwbG9hZFJlc3BvbnNlLnByb3RvdHlwZS5nZXRTdGF0dXM9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywxLDApfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlJlZ2lzdGVyRmlsZVVwbG9hZFJlc3BvbnNlLnByb3RvdHlwZS5zZXRTdGF0dXM9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRQcm90bzNFbnVtRmllbGQodGhpcywxLGUpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlJlZ2lzdGVyRmlsZVVwbG9hZFJlc3BvbnNlLnByb3RvdHlwZS5nZXRSZWdpc3RyYXRpb25JZD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDIsXCJcIil9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmVnaXN0ZXJGaWxlVXBsb2FkUmVzcG9uc2UucHJvdG90eXBlLnNldFJlZ2lzdHJhdGlvbklkPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywyLGUpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlJlZ2lzdGVyRmlsZVVwbG9hZFJlc3BvbnNlLnByb3RvdHlwZS5nZXRVcGxvYWRTZXR0aW5ncz1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlVHJhbnNtaXNzaW9uU2V0dGluZ3MsNCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmVnaXN0ZXJGaWxlVXBsb2FkUmVzcG9uc2UucHJvdG90eXBlLnNldFVwbG9hZFNldHRpbmdzPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0V3JhcHBlckZpZWxkKHRoaXMsNCxlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZWdpc3RlckZpbGVVcGxvYWRSZXNwb25zZS5wcm90b3R5cGUuY2xlYXJVcGxvYWRTZXR0aW5ncz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldFVwbG9hZFNldHRpbmdzKHZvaWQgMCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmVnaXN0ZXJGaWxlVXBsb2FkUmVzcG9uc2UucHJvdG90eXBlLmhhc1VwbG9hZFNldHRpbmdzPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDQpfSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlVXBsb2FkUmVxdWVzdC5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZVVwbG9hZFJlcXVlc3QudG9PYmplY3QoZSx0aGlzKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlVXBsb2FkUmVxdWVzdC50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvLHI9e2NodW5rOihvPXQuZ2V0Q2h1bmsoKSkmJnByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZUNodW5rLnRvT2JqZWN0KGUsbyl9O3JldHVybiBlJiYoci4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxyfSkscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlVXBsb2FkUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlVXBsb2FkUmVxdWVzdDtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlVXBsb2FkUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlVXBsb2FkUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspaWYoMT09PXQuZ2V0RmllbGROdW1iZXIoKSl7dmFyIG89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZUNodW5rO3QucmVhZE1lc3NhZ2Uobyxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVDaHVuay5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuc2V0Q2h1bmsobyl9ZWxzZSB0LnNraXBGaWVsZCgpO3JldHVybiBlfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVVcGxvYWRSZXF1ZXN0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZVVwbG9hZFJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVVcGxvYWRSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG87bnVsbCE9KG89ZS5nZXRDaHVuaygpKSYmdC53cml0ZU1lc3NhZ2UoMSxvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZUNodW5rLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlVXBsb2FkUmVxdWVzdC5wcm90b3R5cGUuZ2V0Q2h1bms9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZUNodW5rLDEpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVVcGxvYWRSZXF1ZXN0LnByb3RvdHlwZS5zZXRDaHVuaz1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLDEsZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZVVwbG9hZFJlcXVlc3QucHJvdG90eXBlLmNsZWFyQ2h1bms9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRDaHVuayh2b2lkIDApfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVVcGxvYWRSZXF1ZXN0LnByb3RvdHlwZS5oYXNDaHVuaz1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywxKX0sci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZVVwbG9hZFJlc3BvbnNlLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlVXBsb2FkUmVzcG9uc2UudG9PYmplY3QoZSx0aGlzKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlVXBsb2FkUmVzcG9uc2UudG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbz17c3RhdHVzOnIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHQsMSwwKX07cmV0dXJuIGUmJihvLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLG99KSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVVcGxvYWRSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlVXBsb2FkUmVzcG9uc2U7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZVVwbG9hZFJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVVcGxvYWRSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspaWYoMT09PXQuZ2V0RmllbGROdW1iZXIoKSl7dmFyIG89dC5yZWFkRW51bSgpO2Uuc2V0U3RhdHVzKG8pfWVsc2UgdC5za2lwRmllbGQoKTtyZXR1cm4gZX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlVXBsb2FkUmVzcG9uc2UucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlVXBsb2FkUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVVcGxvYWRSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe3ZhciBvOzAhPT0obz1lLmdldFN0YXR1cygpKSYmdC53cml0ZUVudW0oMSxvKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlVXBsb2FkUmVzcG9uc2UucHJvdG90eXBlLmdldFN0YXR1cz1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDEsMCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZVVwbG9hZFJlc3BvbnNlLnByb3RvdHlwZS5zZXRTdGF0dXM9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRQcm90bzNFbnVtRmllbGQodGhpcywxLGUpfSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlRG93bmxvYWRSZXF1ZXN0LnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlRG93bmxvYWRSZXF1ZXN0LnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZURvd25sb2FkUmVxdWVzdC50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvLHI9e2ZpbGVUcmFuc21pc3Npb25JZDoobz10LmdldEZpbGVUcmFuc21pc3Npb25JZCgpKSYmcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlVHJhbnNtaXNzaW9uSWQudG9PYmplY3QoZSxvKX07cmV0dXJuIGUmJihyLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLHJ9KSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVEb3dubG9hZFJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZURvd25sb2FkUmVxdWVzdDtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlRG93bmxvYWRSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVEb3dubG9hZFJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KWlmKDE9PT10LmdldEZpZWxkTnVtYmVyKCkpe3ZhciBvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVUcmFuc21pc3Npb25JZDt0LnJlYWRNZXNzYWdlKG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlVHJhbnNtaXNzaW9uSWQuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLnNldEZpbGVUcmFuc21pc3Npb25JZChvKX1lbHNlIHQuc2tpcEZpZWxkKCk7cmV0dXJuIGV9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZURvd25sb2FkUmVxdWVzdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHIuQmluYXJ5V3JpdGVyO3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVEb3dubG9hZFJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVEb3dubG9hZFJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbztudWxsIT0obz1lLmdldEZpbGVUcmFuc21pc3Npb25JZCgpKSYmdC53cml0ZU1lc3NhZ2UoMSxvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZVRyYW5zbWlzc2lvbklkLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlRG93bmxvYWRSZXF1ZXN0LnByb3RvdHlwZS5nZXRGaWxlVHJhbnNtaXNzaW9uSWQ9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZVRyYW5zbWlzc2lvbklkLDEpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVEb3dubG9hZFJlcXVlc3QucHJvdG90eXBlLnNldEZpbGVUcmFuc21pc3Npb25JZD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLDEsZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZURvd25sb2FkUmVxdWVzdC5wcm90b3R5cGUuY2xlYXJGaWxlVHJhbnNtaXNzaW9uSWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRGaWxlVHJhbnNtaXNzaW9uSWQodm9pZCAwKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlRG93bmxvYWRSZXF1ZXN0LnByb3RvdHlwZS5oYXNGaWxlVHJhbnNtaXNzaW9uSWQ9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMSl9LHIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVEb3dubG9hZFJlc3BvbnNlLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlRG93bmxvYWRSZXNwb25zZS50b09iamVjdChlLHRoaXMpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVEb3dubG9hZFJlc3BvbnNlLnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG8sbj17c3RhdHVzOnIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHQsMSwwKSxjaHVuazoobz10LmdldENodW5rKCkpJiZwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVDaHVuay50b09iamVjdChlLG8pfTtyZXR1cm4gZSYmKG4uJGpzcGJNZXNzYWdlSW5zdGFuY2U9dCksbn0pLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZURvd25sb2FkUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZURvd25sb2FkUmVzcG9uc2U7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZURvd25sb2FkUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8sdCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZURvd25sb2FkUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KXN3aXRjaCh0LmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgbz10LnJlYWRFbnVtKCk7ZS5zZXRTdGF0dXMobyk7YnJlYWs7Y2FzZSAyOm89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZUNodW5rLHQucmVhZE1lc3NhZ2Uobyxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVDaHVuay5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuc2V0Q2h1bmsobyk7YnJlYWs7ZGVmYXVsdDp0LnNraXBGaWVsZCgpfXJldHVybiBlfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVEb3dubG9hZFJlc3BvbnNlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZURvd25sb2FkUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVEb3dubG9hZFJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG89dm9pZCAwOzAhPT0obz1lLmdldFN0YXR1cygpKSYmdC53cml0ZUVudW0oMSxvKSxudWxsIT0obz1lLmdldENodW5rKCkpJiZ0LndyaXRlTWVzc2FnZSgyLG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlQ2h1bmsuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVEb3dubG9hZFJlc3BvbnNlLnByb3RvdHlwZS5nZXRTdGF0dXM9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywxLDApfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVEb3dubG9hZFJlc3BvbnNlLnByb3RvdHlwZS5zZXRTdGF0dXM9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRQcm90bzNFbnVtRmllbGQodGhpcywxLGUpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVEb3dubG9hZFJlc3BvbnNlLnByb3RvdHlwZS5nZXRDaHVuaz1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlQ2h1bmssMil9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZURvd25sb2FkUmVzcG9uc2UucHJvdG90eXBlLnNldENodW5rPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0V3JhcHBlckZpZWxkKHRoaXMsMixlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlRG93bmxvYWRSZXNwb25zZS5wcm90b3R5cGUuY2xlYXJDaHVuaz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldENodW5rKHZvaWQgMCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZURvd25sb2FkUmVzcG9uc2UucHJvdG90eXBlLmhhc0NodW5rPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDIpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkF0b21pY0RhdGFUeXBlPXtBVE9NSUNfREFUQV9UWVBFX1VOU1BFQ0lGSUVEOjAsQVRPTUlDX0RBVEFfVFlQRV9URVhUOjEsQVRPTUlDX0RBVEFfVFlQRV9ET1VCTEU6MixBVE9NSUNfREFUQV9UWVBFX0RBVEVUSU1FOjMsQVRPTUlDX0RBVEFfVFlQRV9JTlRFR0VSOjQsQVRPTUlDX0RBVEFfVFlQRV9CT09MRUFOOjV9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU3BlY2lhbFZhbHVlPXtTUEVDSUFMX1ZBTFVFX1VOU1BFQ0lGSUVEOjAsU1BFQ0lBTF9WQUxVRV9FTVBUWV9TVFJJTkc6MX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlSb2xlPXtFTlRJVFlfUk9MRV9VTlNQRUNJRklFRDowLEVOVElUWV9ST0xFX1JFQ09SRF9UWVBFOjEsRU5USVRZX1JPTEVfUkVDT1JEOjIsRU5USVRZX1JPTEVfUFJPUEVSVFk6MyxFTlRJVFlfUk9MRV9GSUxFOjR9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZUNvZGU9e01FU1NBR0VfQ09ERV9VTlNQRUNJRklFRDowLE1FU1NBR0VfQ09ERV9VTktOT1dOOjEsTUVTU0FHRV9DT0RFX0VOVElUWV9ET0VTX05PVF9FWElTVDoyLE1FU1NBR0VfQ09ERV9FTlRJVFlfSEFTX05PX1BST1BFUlRJRVM6MyxNRVNTQUdFX0NPREVfRU5USVRZX0hBU19CRUVOX0RFTEVURURfU1VDQ0VTU0ZVTExZOjQsTUVTU0FHRV9DT0RFX0VOVElUWV9IQVNfVU5RVUFMSUZJRURfUFJPUEVSVElFUzo1LE1FU1NBR0VfQ09ERV9FTlRJVFlfSEFTX1VOUVVBTElGSUVEX1BBUkVOVFM6NixNRVNTQUdFX0NPREVfRU5USVRZX0hBU19OT19JRDo3LE1FU1NBR0VfQ09ERV9SRVFVSVJFRF9CWV9QRVJTSVNURU5UX0VOVElUWTo4LE1FU1NBR0VfQ09ERV9QUk9QRVJUWV9IQVNfTk9fREFUQV9UWVBFOjksTUVTU0FHRV9DT0RFX0VOVElUWV9IQVNfTk9fREVTQ1JJUFRJT046MTAsTUVTU0FHRV9DT0RFX0VOVElUWV9IQVNfTk9fTkFNRToxMSxNRVNTQUdFX0NPREVfT0JMSUdBVE9SWV9QUk9QRVJUWV9NSVNTSU5HOjEyLE1FU1NBR0VfQ09ERV9FTlRJVFlfSEFTX05PX1BBUkVOVFM6MTMsTUVTU0FHRV9DT0RFX0ZJTEVfSEFTX05PX1RBUkdFVF9QQVRIOjE0LE1FU1NBR0VfQ09ERV9UQVJHRVRfUEFUSF9OT1RfQUxMT1dFRDoxNSxNRVNTQUdFX0NPREVfVEFSR0VUX1BBVEhfRVhJU1RTOjE2LE1FU1NBR0VfQ09ERV9QUk9QRVJUWV9IQVNfTk9fVU5JVDoxNyxNRVNTQUdFX0NPREVfQ0FOTk9UX1BBUlNFX1ZBTFVFOjE4LE1FU1NBR0VfQ09ERV9DSEVDS1NVTV9URVNUX0ZBSUxFRDoxOSxNRVNTQUdFX0NPREVfU0laRV9URVNUX0ZBSUxFRDoyMCxNRVNTQUdFX0NPREVfQ0FOTk9UX0NSRUFURV9QQVJFTlRfRk9MREVSOjIxLE1FU1NBR0VfQ09ERV9GSUxFX0hBU19OT1RfQkVFTl9VUExPQUVEOjIyLE1FU1NBR0VfQ09ERV9DQU5OT1RfTU9WRV9GSUxFX1RPX1RBUkdFVF9QQVRIOjIzLE1FU1NBR0VfQ09ERV9DQU5OT1RfUEFSU0VfREFURVRJTUVfVkFMVUU6MjQsTUVTU0FHRV9DT0RFX0NBTk5PVF9QQVJTRV9ET1VCTEVfVkFMVUU6MjUsTUVTU0FHRV9DT0RFX0NBTk5PVF9QQVJTRV9JTlRfVkFMVUU6MjYsTUVTU0FHRV9DT0RFX0NBTk5PVF9QQVJTRV9CT09MX1ZBTFVFOjI3LE1FU1NBR0VfQ09ERV9GSUxFX05PVF9GT1VORDoyOCxNRVNTQUdFX0NPREVfV0FSTklOR19PQ0NVUkVEOjI5LE1FU1NBR0VfQ09ERV9FTlRJVFlfTkFNRV9JU19OT1RfVU5JUVVFOjMwLE1FU1NBR0VfQ09ERV9RVUVSWV9FWENFUFRJT046MzEsTUVTU0FHRV9DT0RFX1RSQU5TQUNUSU9OX1JPTExfQkFDSzozMixNRVNTQUdFX0NPREVfVU5LTk9XTl9VTklUOjM0LE1FU1NBR0VfQ09ERV9BVVRIT1JJWkFUSU9OX0VSUk9SOjM1LE1FU1NBR0VfQ09ERV9SRUZFUkVOQ0VfSVNfTk9UX0FMTE9XRURfQllfREFUQV9UWVBFOjM2LE1FU1NBR0VfQ09ERV9FTlRJVFlfTkFNRV9EVVBMSUNBVEVTOjM3LE1FU1NBR0VfQ09ERV9EQVRBX1RZUEVfTkFNRV9EVVBMSUNBVEVTOjM4LE1FU1NBR0VfQ09ERV9FTlRJVFlfSEFTX05PX05BTUVfT1JfSUQ6MzksTUVTU0FHRV9DT0RFX0FGRklMSUFUSU9OX0VSUk9SOjQwLE1FU1NBR0VfQ09ERV9RVUVSWV9QQVJTSU5HX0VSUk9SOjQxLE1FU1NBR0VfQ09ERV9OQU1FX1BST1BFUlRJRVNfTVVTVF9CRV9URVhUOjQyLE1FU1NBR0VfQ09ERV9QQVJFTlRfRFVQTElDQVRFU19XQVJOSU5HOjQzLE1FU1NBR0VfQ09ERV9QQVJFTlRfRFVQTElDQVRFU19FUlJPUjo0NCxNRVNTQUdFX0NPREVfQVRPTUlDSVRZX0VSUk9SOjQ1LE1FU1NBR0VfQ09ERV9OT19TVUNIX0VOVElUWV9ST0xFOjQ2LE1FU1NBR0VfQ09ERV9SRVFVSVJFRF9CWV9VTlFVQUxJRklFRDo0NyxNRVNTQUdFX0NPREVfRU5USVRZX0hBU19VTlFVQUxJRklFRF9SRUZFUkVOQ0U6NDgsTUVTU0FHRV9DT0RFX1JFRkVSRU5DRURfRU5USVRZX0RPRVNfTk9UX0VYSVNUOjQ5LE1FU1NBR0VfQ09ERV9SRUZFUkVOQ0VfTkFNRV9EVVBMSUNBVEVTOjUwLE1FU1NBR0VfQ09ERV9EQVRBX1RZUEVfSU5IRVJJVEFOQ0VfQU1CSUdVT1VTOjUxLE1FU1NBR0VfQ09ERV9EQVRBX1RZUEVfRE9FU19OT1RfQUNDRVBUX0NPTExFQ1RJT05fVkFMVUVTOjUyLE1FU1NBR0VfQ09ERV9DQU5OT1RfUEFSU0VfVU5JVDo1MyxNRVNTQUdFX0NPREVfQURESVRJT05BTF9QUk9QRVJUWTo1NCxNRVNTQUdFX0NPREVfUFJPUEVSVFlfV0lUSF9EQVRBX1RZUEVfT1ZFUlJJREU6NTUsTUVTU0FHRV9DT0RFX1BST1BFUlRZX1dJVEhfREVTQ1JJUFRJT05fT1ZFUlJJREU6NTYsTUVTU0FHRV9DT0RFX1BST1BFUlRZX1dJVEhfTkFNRV9PVkVSUklERTo1NyxNRVNTQUdFX0NPREVfSU5URUdFUl9WQUxVRV9PVVRfT0ZfUkFOR0U6NTgsTUVTU0FHRV9DT0RFX0lOVEVHUklUWV9WSU9MQVRJT046NTl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSW1wb3J0YW5jZT17SU1QT1JUQU5DRV9VTlNQRUNJRklFRDowLElNUE9SVEFOQ0VfT0JMSUdBVE9SWToxLElNUE9SVEFOQ0VfUkVDT01NRU5ERUQ6MixJTVBPUlRBTkNFX1NVR0dFU1RFRDozLElNUE9SVEFOQ0VfRklYOjR9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5QWNsUGVybWlzc2lvbj17RU5USVRZX0FDTF9QRVJNSVNTSU9OX1VOU1BFQ0lGSUVEOjAsRU5USVRZX0FDTF9QRVJNSVNTSU9OX0VESVRfQUNMOjEsRU5USVRZX0FDTF9QRVJNSVNTSU9OX0VESVRfUFJJT1JJVFlfQUNMOjJ9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UGVybWlzc2lvblJ1bGVDYXBhYmlsaXR5PXtFTlRJVFlfUEVSTUlTU0lPTl9SVUxFX0NBUEFCSUxJVFlfVU5TUEVDSUZJRUQ6MCxFTlRJVFlfUEVSTUlTU0lPTl9SVUxFX0NBUEFCSUxJVFlfREVMRVRFOjF9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UGVybWlzc2lvbj17RU5USVRZX1BFUk1JU1NJT05fVU5TUEVDSUZJRUQ6MCxFTlRJVFlfUEVSTUlTU0lPTl9SRVRSSUVWRV9FTlRJVFk6MSxFTlRJVFlfUEVSTUlTU0lPTl9SRVRSSUVWRV9BQ0w6MixFTlRJVFlfUEVSTUlTU0lPTl9SRVRSSUVWRV9ISVNUT1JZOjMsRU5USVRZX1BFUk1JU1NJT05fUkVUUklFVkVfT1dORVI6NCxFTlRJVFlfUEVSTUlTU0lPTl9SRVRSSUVWRV9GSUxFOjUsRU5USVRZX1BFUk1JU1NJT05fREVMRVRFOjYsRU5USVRZX1BFUk1JU1NJT05fRURJVF9BQ0w6NyxFTlRJVFlfUEVSTUlTU0lPTl9VUERBVEVfREVTQ1JJUFRJT046OCxFTlRJVFlfUEVSTUlTU0lPTl9VUERBVEVfVkFMVUU6OSxFTlRJVFlfUEVSTUlTU0lPTl9VUERBVEVfUk9MRToxMCxFTlRJVFlfUEVSTUlTU0lPTl9VUERBVEVfUkVNT1ZFX1BBUkVOVDoxMSxFTlRJVFlfUEVSTUlTU0lPTl9VUERBVEVfQUREX1BBUkVOVDoxMixFTlRJVFlfUEVSTUlTU0lPTl9VUERBVEVfUkVNT1ZFX1BST1BFUlRZOjEzLEVOVElUWV9QRVJNSVNTSU9OX1VQREFURV9BRERfUFJPUEVSVFk6MTQsRU5USVRZX1BFUk1JU1NJT05fVVBEQVRFX05BTUU6MTUsRU5USVRZX1BFUk1JU1NJT05fVVBEQVRFX0RBVEFfVFlQRToxNixFTlRJVFlfUEVSTUlTU0lPTl9VUERBVEVfUkVNT1ZFX0ZJTEU6MTcsRU5USVRZX1BFUk1JU1NJT05fVVBEQVRFX0FERF9GSUxFOjE4LEVOVElUWV9QRVJNSVNTSU9OX1VQREFURV9NT1ZFX0ZJTEU6MTksRU5USVRZX1BFUk1JU1NJT05fVVNFX0FTX1JFRkVSRU5DRToyMCxFTlRJVFlfUEVSTUlTU0lPTl9VU0VfQVNfUFJPUEVSVFk6MjEsRU5USVRZX1BFUk1JU1NJT05fVVNFX0FTX1BBUkVOVDoyMixFTlRJVFlfUEVSTUlTU0lPTl9VU0VfQVNfREFUQV9UWVBFOjIzLEVOVElUWV9QRVJNSVNTSU9OX1VQREFURV9RVUVSWV9URU1QTEFURV9ERUZJTklUSU9OOjI0fSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlJlZ2lzdHJhdGlvblN0YXR1cz17UkVHSVNUUkFUSU9OX1NUQVRVU19VTlNQRUNJRklFRDowLFJFR0lTVFJBVElPTl9TVEFUVVNfQUNDRVBURUQ6MSxSRUdJU1RSQVRJT05fU1RBVFVTX1JFSkVDVEVEOjJ9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNtaXNzaW9uU3RhdHVzPXtUUkFOU01JU1NJT05fU1RBVFVTX1VOU1BFQ0lGSUVEOjAsVFJBTlNNSVNTSU9OX1NUQVRVU19TVUNDRVNTOjEsVFJBTlNNSVNTSU9OX1NUQVRVU19FUlJPUjoyLFRSQU5TTUlTU0lPTl9TVEFUVVNfR09fT046M30sbi5vYmplY3QuZXh0ZW5kKHQscHJvdG8uY2Fvc2RiLmVudGl0eS52MSl9LDE5OmZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7dmFyICRqc2NvbXA9JGpzY29tcHx8e307JGpzY29tcC5zY29wZT17fSwkanNjb21wLmZpbmRJbnRlcm5hbD1mdW5jdGlvbihlLHQsbyl7ZSBpbnN0YW5jZW9mIFN0cmluZyYmKGU9U3RyaW5nKGUpKTtmb3IodmFyIHI9ZS5sZW5ndGgsbj0wO248cjtuKyspe3ZhciBzPWVbbl07aWYodC5jYWxsKG8scyxuLGUpKXJldHVybntpOm4sdjpzfX1yZXR1cm57aTotMSx2OnZvaWQgMH19LCRqc2NvbXAuQVNTVU1FX0VTNT0hMSwkanNjb21wLkFTU1VNRV9OT19OQVRJVkVfTUFQPSExLCRqc2NvbXAuQVNTVU1FX05PX05BVElWRV9TRVQ9ITEsJGpzY29tcC5TSU1QTEVfRlJPVU5EX1BPTFlGSUxMPSExLCRqc2NvbXAuZGVmaW5lUHJvcGVydHk9JGpzY29tcC5BU1NVTUVfRVM1fHxcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZGVmaW5lUHJvcGVydGllcz9PYmplY3QuZGVmaW5lUHJvcGVydHk6ZnVuY3Rpb24oZSx0LG8pe2UhPUFycmF5LnByb3RvdHlwZSYmZSE9T2JqZWN0LnByb3RvdHlwZSYmKGVbdF09by52YWx1ZSl9LCRqc2NvbXAuZ2V0R2xvYmFsPWZ1bmN0aW9uKGUpe3JldHVyblwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvdz09PWU/ZTp2b2lkIDAhPT1fX3dlYnBhY2tfcmVxdWlyZV9fLmcmJm51bGwhPV9fd2VicGFja19yZXF1aXJlX18uZz9fX3dlYnBhY2tfcmVxdWlyZV9fLmc6ZX0sJGpzY29tcC5nbG9iYWw9JGpzY29tcC5nZXRHbG9iYWwodGhpcyksJGpzY29tcC5wb2x5ZmlsbD1mdW5jdGlvbihlLHQsbyxyKXtpZih0KXtmb3Iobz0kanNjb21wLmdsb2JhbCxlPWUuc3BsaXQoXCIuXCIpLHI9MDtyPGUubGVuZ3RoLTE7cisrKXt2YXIgbj1lW3JdO24gaW4gb3x8KG9bbl09e30pLG89b1tuXX0odD10KHI9b1tlPWVbZS5sZW5ndGgtMV1dKSkhPXImJm51bGwhPXQmJiRqc2NvbXAuZGVmaW5lUHJvcGVydHkobyxlLHtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dH0pfX0sJGpzY29tcC5wb2x5ZmlsbChcIkFycmF5LnByb3RvdHlwZS5maW5kSW5kZXhcIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGV8fGZ1bmN0aW9uKGUsdCl7cmV0dXJuICRqc2NvbXAuZmluZEludGVybmFsKHRoaXMsZSx0KS5pfX0pLFwiZXM2XCIsXCJlczNcIiksJGpzY29tcC5jaGVja1N0cmluZ0FyZ3M9ZnVuY3Rpb24oZSx0LG8pe2lmKG51bGw9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlRoZSAndGhpcycgdmFsdWUgZm9yIFN0cmluZy5wcm90b3R5cGUuXCIrbytcIiBtdXN0IG5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZFwiKTtpZih0IGluc3RhbmNlb2YgUmVnRXhwKXRocm93IG5ldyBUeXBlRXJyb3IoXCJGaXJzdCBhcmd1bWVudCB0byBTdHJpbmcucHJvdG90eXBlLlwiK28rXCIgbXVzdCBub3QgYmUgYSByZWd1bGFyIGV4cHJlc3Npb25cIik7cmV0dXJuIGUrXCJcIn0sJGpzY29tcC5wb2x5ZmlsbChcIlN0cmluZy5wcm90b3R5cGUuZW5kc1dpdGhcIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGV8fGZ1bmN0aW9uKGUsdCl7dmFyIG89JGpzY29tcC5jaGVja1N0cmluZ0FyZ3ModGhpcyxlLFwiZW5kc1dpdGhcIik7ZSs9XCJcIix2b2lkIDA9PT10JiYodD1vLmxlbmd0aCksdD1NYXRoLm1heCgwLE1hdGgubWluKDB8dCxvLmxlbmd0aCkpO2Zvcih2YXIgcj1lLmxlbmd0aDswPHImJjA8dDspaWYob1stLXRdIT1lWy0tcl0pcmV0dXJuITE7cmV0dXJuIDA+PXJ9fSksXCJlczZcIixcImVzM1wiKSwkanNjb21wLnBvbHlmaWxsKFwiQXJyYXkucHJvdG90eXBlLmZpbmRcIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGV8fGZ1bmN0aW9uKGUsdCl7cmV0dXJuICRqc2NvbXAuZmluZEludGVybmFsKHRoaXMsZSx0KS52fX0pLFwiZXM2XCIsXCJlczNcIiksJGpzY29tcC5wb2x5ZmlsbChcIlN0cmluZy5wcm90b3R5cGUuc3RhcnRzV2l0aFwiLChmdW5jdGlvbihlKXtyZXR1cm4gZXx8ZnVuY3Rpb24oZSx0KXt2YXIgbz0kanNjb21wLmNoZWNrU3RyaW5nQXJncyh0aGlzLGUsXCJzdGFydHNXaXRoXCIpO2UrPVwiXCI7dmFyIHI9by5sZW5ndGgsbj1lLmxlbmd0aDt0PU1hdGgubWF4KDAsTWF0aC5taW4oMHx0LG8ubGVuZ3RoKSk7Zm9yKHZhciBzPTA7czxuJiZ0PHI7KWlmKG9bdCsrXSE9ZVtzKytdKXJldHVybiExO3JldHVybiBzPj1ufX0pLFwiZXM2XCIsXCJlczNcIiksJGpzY29tcC5wb2x5ZmlsbChcIlN0cmluZy5wcm90b3R5cGUucmVwZWF0XCIsKGZ1bmN0aW9uKGUpe3JldHVybiBlfHxmdW5jdGlvbihlKXt2YXIgdD0kanNjb21wLmNoZWNrU3RyaW5nQXJncyh0aGlzLG51bGwsXCJyZXBlYXRcIik7aWYoMD5lfHwxMzQyMTc3Mjc5PGUpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbnZhbGlkIGNvdW50IHZhbHVlXCIpO2V8PTA7Zm9yKHZhciBvPVwiXCI7ZTspMSZlJiYobys9dCksKGU+Pj49MSkmJih0Kz10KTtyZXR1cm4gb319KSxcImVzNlwiLFwiZXMzXCIpO3ZhciBDT01QSUxFRD0hMCxnb29nPWdvb2d8fHt9O2dvb2cuZ2xvYmFsPXRoaXN8fHNlbGYsZ29vZy5pc0RlZj1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwIT09ZX0sZ29vZy5pc1N0cmluZz1mdW5jdGlvbihlKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZX0sZ29vZy5pc0Jvb2xlYW49ZnVuY3Rpb24oZSl7cmV0dXJuXCJib29sZWFuXCI9PXR5cGVvZiBlfSxnb29nLmlzTnVtYmVyPWZ1bmN0aW9uKGUpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBlfSxnb29nLmV4cG9ydFBhdGhfPWZ1bmN0aW9uKGUsdCxvKXtlPWUuc3BsaXQoXCIuXCIpLG89b3x8Z29vZy5nbG9iYWwsZVswXWluIG98fHZvaWQgMD09PW8uZXhlY1NjcmlwdHx8by5leGVjU2NyaXB0KFwidmFyIFwiK2VbMF0pO2Zvcih2YXIgcjtlLmxlbmd0aCYmKHI9ZS5zaGlmdCgpKTspIWUubGVuZ3RoJiZnb29nLmlzRGVmKHQpP29bcl09dDpvPW9bcl0mJm9bcl0hPT1PYmplY3QucHJvdG90eXBlW3JdP29bcl06b1tyXT17fX0sZ29vZy5kZWZpbmU9ZnVuY3Rpb24oZSx0KXtpZighQ09NUElMRUQpe3ZhciBvPWdvb2cuZ2xvYmFsLkNMT1NVUkVfVU5DT01QSUxFRF9ERUZJTkVTLHI9Z29vZy5nbG9iYWwuQ0xPU1VSRV9ERUZJTkVTO28mJnZvaWQgMD09PW8ubm9kZVR5cGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLGUpP3Q9b1tlXTpyJiZ2b2lkIDA9PT1yLm5vZGVUeXBlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocixlKSYmKHQ9cltlXSl9cmV0dXJuIHR9LGdvb2cuRkVBVFVSRVNFVF9ZRUFSPTIwMTIsZ29vZy5ERUJVRz0hMCxnb29nLkxPQ0FMRT1cImVuXCIsZ29vZy5UUlVTVEVEX1NJVEU9ITAsZ29vZy5TVFJJQ1RfTU9ERV9DT01QQVRJQkxFPSExLGdvb2cuRElTQUxMT1dfVEVTVF9PTkxZX0NPREU9Q09NUElMRUQmJiFnb29nLkRFQlVHLGdvb2cuRU5BQkxFX0NIUk9NRV9BUFBfU0FGRV9TQ1JJUFRfTE9BRElORz0hMSxnb29nLnByb3ZpZGU9ZnVuY3Rpb24oZSl7aWYoZ29vZy5pc0luTW9kdWxlTG9hZGVyXygpKXRocm93IEVycm9yKFwiZ29vZy5wcm92aWRlIGNhbm5vdCBiZSB1c2VkIHdpdGhpbiBhIG1vZHVsZS5cIik7aWYoIUNPTVBJTEVEJiZnb29nLmlzUHJvdmlkZWRfKGUpKXRocm93IEVycm9yKCdOYW1lc3BhY2UgXCInK2UrJ1wiIGFscmVhZHkgZGVjbGFyZWQuJyk7Z29vZy5jb25zdHJ1Y3ROYW1lc3BhY2VfKGUpfSxnb29nLmNvbnN0cnVjdE5hbWVzcGFjZV89ZnVuY3Rpb24oZSx0KXtpZighQ09NUElMRUQpe2RlbGV0ZSBnb29nLmltcGxpY2l0TmFtZXNwYWNlc19bZV07Zm9yKHZhciBvPWU7KG89by5zdWJzdHJpbmcoMCxvLmxhc3RJbmRleE9mKFwiLlwiKSkpJiYhZ29vZy5nZXRPYmplY3RCeU5hbWUobyk7KWdvb2cuaW1wbGljaXROYW1lc3BhY2VzX1tvXT0hMH1nb29nLmV4cG9ydFBhdGhfKGUsdCl9LGdvb2cuZ2V0U2NyaXB0Tm9uY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUhPWdvb2cuZ2xvYmFsP2dvb2cuZ2V0U2NyaXB0Tm9uY2VfKGUuZG9jdW1lbnQpOihudWxsPT09Z29vZy5jc3BOb25jZV8mJihnb29nLmNzcE5vbmNlXz1nb29nLmdldFNjcmlwdE5vbmNlXyhnb29nLmdsb2JhbC5kb2N1bWVudCkpLGdvb2cuY3NwTm9uY2VfKX0sZ29vZy5OT05DRV9QQVRURVJOXz0vXltcXHcrL18tXStbPV17MCwyfSQvLGdvb2cuY3NwTm9uY2VfPW51bGwsZ29vZy5nZXRTY3JpcHROb25jZV89ZnVuY3Rpb24oZSl7cmV0dXJuKGU9ZS5xdWVyeVNlbGVjdG9yJiZlLnF1ZXJ5U2VsZWN0b3IoXCJzY3JpcHRbbm9uY2VdXCIpKSYmKGU9ZS5ub25jZXx8ZS5nZXRBdHRyaWJ1dGUoXCJub25jZVwiKSkmJmdvb2cuTk9OQ0VfUEFUVEVSTl8udGVzdChlKT9lOlwiXCJ9LGdvb2cuVkFMSURfTU9EVUxFX1JFXz0vXlthLXpBLVpfJF1bYS16QS1aMC05Ll8kXSokLyxnb29nLm1vZHVsZT1mdW5jdGlvbihlKXtpZighZ29vZy5pc1N0cmluZyhlKXx8IWV8fC0xPT1lLnNlYXJjaChnb29nLlZBTElEX01PRFVMRV9SRV8pKXRocm93IEVycm9yKFwiSW52YWxpZCBtb2R1bGUgaWRlbnRpZmllclwiKTtpZighZ29vZy5pc0luR29vZ01vZHVsZUxvYWRlcl8oKSl0aHJvdyBFcnJvcihcIk1vZHVsZSBcIitlK1wiIGhhcyBiZWVuIGxvYWRlZCBpbmNvcnJlY3RseS4gTm90ZSwgbW9kdWxlcyBjYW5ub3QgYmUgbG9hZGVkIGFzIG5vcm1hbCBzY3JpcHRzLiBUaGV5IHJlcXVpcmUgc29tZSBraW5kIG9mIHByZS1wcm9jZXNzaW5nIHN0ZXAuIFlvdSdyZSBsaWtlbHkgdHJ5aW5nIHRvIGxvYWQgYSBtb2R1bGUgdmlhIGEgc2NyaXB0IHRhZyBvciBhcyBhIHBhcnQgb2YgYSBjb25jYXRlbmF0ZWQgYnVuZGxlIHdpdGhvdXQgcmV3cml0aW5nIHRoZSBtb2R1bGUuIEZvciBtb3JlIGluZm8gc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZ29vZ2xlL2Nsb3N1cmUtbGlicmFyeS93aWtpL2dvb2cubW9kdWxlOi1hbi1FUzYtbW9kdWxlLWxpa2UtYWx0ZXJuYXRpdmUtdG8tZ29vZy5wcm92aWRlLlwiKTtpZihnb29nLm1vZHVsZUxvYWRlclN0YXRlXy5tb2R1bGVOYW1lKXRocm93IEVycm9yKFwiZ29vZy5tb2R1bGUgbWF5IG9ubHkgYmUgY2FsbGVkIG9uY2UgcGVyIG1vZHVsZS5cIik7aWYoZ29vZy5tb2R1bGVMb2FkZXJTdGF0ZV8ubW9kdWxlTmFtZT1lLCFDT01QSUxFRCl7aWYoZ29vZy5pc1Byb3ZpZGVkXyhlKSl0aHJvdyBFcnJvcignTmFtZXNwYWNlIFwiJytlKydcIiBhbHJlYWR5IGRlY2xhcmVkLicpO2RlbGV0ZSBnb29nLmltcGxpY2l0TmFtZXNwYWNlc19bZV19fSxnb29nLm1vZHVsZS5nZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cubW9kdWxlLmdldEludGVybmFsXyhlKX0sZ29vZy5tb2R1bGUuZ2V0SW50ZXJuYWxfPWZ1bmN0aW9uKGUpe2lmKCFDT01QSUxFRCl7aWYoZSBpbiBnb29nLmxvYWRlZE1vZHVsZXNfKXJldHVybiBnb29nLmxvYWRlZE1vZHVsZXNfW2VdLmV4cG9ydHM7aWYoIWdvb2cuaW1wbGljaXROYW1lc3BhY2VzX1tlXSlyZXR1cm4gbnVsbCE9KGU9Z29vZy5nZXRPYmplY3RCeU5hbWUoZSkpP2U6bnVsbH1yZXR1cm4gbnVsbH0sZ29vZy5Nb2R1bGVUeXBlPXtFUzY6XCJlczZcIixHT09HOlwiZ29vZ1wifSxnb29nLm1vZHVsZUxvYWRlclN0YXRlXz1udWxsLGdvb2cuaXNJbk1vZHVsZUxvYWRlcl89ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5pc0luR29vZ01vZHVsZUxvYWRlcl8oKXx8Z29vZy5pc0luRXM2TW9kdWxlTG9hZGVyXygpfSxnb29nLmlzSW5Hb29nTW9kdWxlTG9hZGVyXz1mdW5jdGlvbigpe3JldHVybiEhZ29vZy5tb2R1bGVMb2FkZXJTdGF0ZV8mJmdvb2cubW9kdWxlTG9hZGVyU3RhdGVfLnR5cGU9PWdvb2cuTW9kdWxlVHlwZS5HT09HfSxnb29nLmlzSW5FczZNb2R1bGVMb2FkZXJfPWZ1bmN0aW9uKCl7aWYoZ29vZy5tb2R1bGVMb2FkZXJTdGF0ZV8mJmdvb2cubW9kdWxlTG9hZGVyU3RhdGVfLnR5cGU9PWdvb2cuTW9kdWxlVHlwZS5FUzYpcmV0dXJuITA7dmFyIGU9Z29vZy5nbG9iYWwuJGpzY29tcDtyZXR1cm4hIWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGUuZ2V0Q3VycmVudE1vZHVsZVBhdGgmJiEhZS5nZXRDdXJyZW50TW9kdWxlUGF0aCgpfSxnb29nLm1vZHVsZS5kZWNsYXJlTGVnYWN5TmFtZXNwYWNlPWZ1bmN0aW9uKCl7aWYoIUNPTVBJTEVEJiYhZ29vZy5pc0luR29vZ01vZHVsZUxvYWRlcl8oKSl0aHJvdyBFcnJvcihcImdvb2cubW9kdWxlLmRlY2xhcmVMZWdhY3lOYW1lc3BhY2UgbXVzdCBiZSBjYWxsZWQgZnJvbSB3aXRoaW4gYSBnb29nLm1vZHVsZVwiKTtpZighQ09NUElMRUQmJiFnb29nLm1vZHVsZUxvYWRlclN0YXRlXy5tb2R1bGVOYW1lKXRocm93IEVycm9yKFwiZ29vZy5tb2R1bGUgbXVzdCBiZSBjYWxsZWQgcHJpb3IgdG8gZ29vZy5tb2R1bGUuZGVjbGFyZUxlZ2FjeU5hbWVzcGFjZS5cIik7Z29vZy5tb2R1bGVMb2FkZXJTdGF0ZV8uZGVjbGFyZUxlZ2FjeU5hbWVzcGFjZT0hMH0sZ29vZy5kZWNsYXJlTW9kdWxlSWQ9ZnVuY3Rpb24oZSl7aWYoIUNPTVBJTEVEKXtpZighZ29vZy5pc0luRXM2TW9kdWxlTG9hZGVyXygpKXRocm93IEVycm9yKFwiZ29vZy5kZWNsYXJlTW9kdWxlSWQgbWF5IG9ubHkgYmUgY2FsbGVkIGZyb20gd2l0aGluIGFuIEVTNiBtb2R1bGVcIik7aWYoZ29vZy5tb2R1bGVMb2FkZXJTdGF0ZV8mJmdvb2cubW9kdWxlTG9hZGVyU3RhdGVfLm1vZHVsZU5hbWUpdGhyb3cgRXJyb3IoXCJnb29nLmRlY2xhcmVNb2R1bGVJZCBtYXkgb25seSBiZSBjYWxsZWQgb25jZSBwZXIgbW9kdWxlLlwiKTtpZihlIGluIGdvb2cubG9hZGVkTW9kdWxlc18pdGhyb3cgRXJyb3IoJ01vZHVsZSB3aXRoIG5hbWVzcGFjZSBcIicrZSsnXCIgYWxyZWFkeSBleGlzdHMuJyl9aWYoZ29vZy5tb2R1bGVMb2FkZXJTdGF0ZV8pZ29vZy5tb2R1bGVMb2FkZXJTdGF0ZV8ubW9kdWxlTmFtZT1lO2Vsc2V7dmFyIHQ9Z29vZy5nbG9iYWwuJGpzY29tcDtpZighdHx8XCJmdW5jdGlvblwiIT10eXBlb2YgdC5nZXRDdXJyZW50TW9kdWxlUGF0aCl0aHJvdyBFcnJvcignTW9kdWxlIHdpdGggbmFtZXNwYWNlIFwiJytlKydcIiBoYXMgYmVlbiBsb2FkZWQgaW5jb3JyZWN0bHkuJyk7dD10LnJlcXVpcmUodC5nZXRDdXJyZW50TW9kdWxlUGF0aCgpKSxnb29nLmxvYWRlZE1vZHVsZXNfW2VdPXtleHBvcnRzOnQsdHlwZTpnb29nLk1vZHVsZVR5cGUuRVM2LG1vZHVsZUlkOmV9fX0sZ29vZy5zZXRUZXN0T25seT1mdW5jdGlvbihlKXtpZihnb29nLkRJU0FMTE9XX1RFU1RfT05MWV9DT0RFKXRocm93IGU9ZXx8XCJcIixFcnJvcihcIkltcG9ydGluZyB0ZXN0LW9ubHkgY29kZSBpbnRvIG5vbi1kZWJ1ZyBlbnZpcm9ubWVudFwiKyhlP1wiOiBcIitlOlwiLlwiKSl9LGdvb2cuZm9yd2FyZERlY2xhcmU9ZnVuY3Rpb24oZSl7fSxDT01QSUxFRHx8KGdvb2cuaXNQcm92aWRlZF89ZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW4gZ29vZy5sb2FkZWRNb2R1bGVzX3x8IWdvb2cuaW1wbGljaXROYW1lc3BhY2VzX1tlXSYmZ29vZy5pc0RlZkFuZE5vdE51bGwoZ29vZy5nZXRPYmplY3RCeU5hbWUoZSkpfSxnb29nLmltcGxpY2l0TmFtZXNwYWNlc189e1wiZ29vZy5tb2R1bGVcIjohMH0pLGdvb2cuZ2V0T2JqZWN0QnlOYW1lPWZ1bmN0aW9uKGUsdCl7ZT1lLnNwbGl0KFwiLlwiKSx0PXR8fGdvb2cuZ2xvYmFsO2Zvcih2YXIgbz0wO288ZS5sZW5ndGg7bysrKWlmKHQ9dFtlW29dXSwhZ29vZy5pc0RlZkFuZE5vdE51bGwodCkpcmV0dXJuIG51bGw7cmV0dXJuIHR9LGdvb2cuZ2xvYmFsaXplPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBvIGluIHQ9dHx8Z29vZy5nbG9iYWwsZSl0W29dPWVbb119LGdvb2cuYWRkRGVwZW5kZW5jeT1mdW5jdGlvbihlLHQsbyxyKXshQ09NUElMRUQmJmdvb2cuREVQRU5ERU5DSUVTX0VOQUJMRUQmJmdvb2cuZGVidWdMb2FkZXJfLmFkZERlcGVuZGVuY3koZSx0LG8scil9LGdvb2cuRU5BQkxFX0RFQlVHX0xPQURFUj0hMCxnb29nLmxvZ1RvQ29uc29sZV89ZnVuY3Rpb24oZSl7Z29vZy5nbG9iYWwuY29uc29sZSYmZ29vZy5nbG9iYWwuY29uc29sZS5lcnJvcihlKX0sZ29vZy5yZXF1aXJlPWZ1bmN0aW9uKGUpe2lmKCFDT01QSUxFRCl7aWYoZ29vZy5FTkFCTEVfREVCVUdfTE9BREVSJiZnb29nLmRlYnVnTG9hZGVyXy5yZXF1ZXN0ZWQoZSksZ29vZy5pc1Byb3ZpZGVkXyhlKSl7aWYoZ29vZy5pc0luTW9kdWxlTG9hZGVyXygpKXJldHVybiBnb29nLm1vZHVsZS5nZXRJbnRlcm5hbF8oZSl9ZWxzZSBpZihnb29nLkVOQUJMRV9ERUJVR19MT0FERVIpe3ZhciB0PWdvb2cubW9kdWxlTG9hZGVyU3RhdGVfO2dvb2cubW9kdWxlTG9hZGVyU3RhdGVfPW51bGw7dHJ5e2dvb2cuZGVidWdMb2FkZXJfLmxvYWRfKGUpfWZpbmFsbHl7Z29vZy5tb2R1bGVMb2FkZXJTdGF0ZV89dH19cmV0dXJuIG51bGx9fSxnb29nLnJlcXVpcmVUeXBlPWZ1bmN0aW9uKGUpe3JldHVybnt9fSxnb29nLmJhc2VQYXRoPVwiXCIsZ29vZy5udWxsRnVuY3Rpb249ZnVuY3Rpb24oKXt9LGdvb2cuYWJzdHJhY3RNZXRob2Q9ZnVuY3Rpb24oKXt0aHJvdyBFcnJvcihcInVuaW1wbGVtZW50ZWQgYWJzdHJhY3QgbWV0aG9kXCIpfSxnb29nLmFkZFNpbmdsZXRvbkdldHRlcj1mdW5jdGlvbihlKXtlLmluc3RhbmNlXz12b2lkIDAsZS5nZXRJbnN0YW5jZT1mdW5jdGlvbigpe3JldHVybiBlLmluc3RhbmNlXz9lLmluc3RhbmNlXzooZ29vZy5ERUJVRyYmKGdvb2cuaW5zdGFudGlhdGVkU2luZ2xldG9uc19bZ29vZy5pbnN0YW50aWF0ZWRTaW5nbGV0b25zXy5sZW5ndGhdPWUpLGUuaW5zdGFuY2VfPW5ldyBlKX19LGdvb2cuaW5zdGFudGlhdGVkU2luZ2xldG9uc189W10sZ29vZy5MT0FEX01PRFVMRV9VU0lOR19FVkFMPSEwLGdvb2cuU0VBTF9NT0RVTEVfRVhQT1JUUz1nb29nLkRFQlVHLGdvb2cubG9hZGVkTW9kdWxlc189e30sZ29vZy5ERVBFTkRFTkNJRVNfRU5BQkxFRD0hQ09NUElMRUQmJmdvb2cuRU5BQkxFX0RFQlVHX0xPQURFUixnb29nLlRSQU5TUElMRT1cImRldGVjdFwiLGdvb2cuQVNTVU1FX0VTX01PRFVMRVNfVFJBTlNQSUxFRD0hMSxnb29nLlRSQU5TUElMRV9UT19MQU5HVUFHRT1cIlwiLGdvb2cuVFJBTlNQSUxFUj1cInRyYW5zcGlsZS5qc1wiLGdvb2cuaGFzQmFkTGV0U2NvcGluZz1udWxsLGdvb2cudXNlU2FmYXJpMTBXb3JrYXJvdW5kPWZ1bmN0aW9uKCl7aWYobnVsbD09Z29vZy5oYXNCYWRMZXRTY29waW5nKXt0cnl7dmFyIGE9IWV2YWwoJ1widXNlIHN0cmljdFwiO2xldCB4ID0gMTsgZnVuY3Rpb24gZigpIHsgcmV0dXJuIHR5cGVvZiB4OyB9O2YoKSA9PSBcIm51bWJlclwiOycpfWNhdGNoKGUpe2E9ITF9Z29vZy5oYXNCYWRMZXRTY29waW5nPWF9cmV0dXJuIGdvb2cuaGFzQmFkTGV0U2NvcGluZ30sZ29vZy53b3JrYXJvdW5kU2FmYXJpMTBFdmFsQnVnPWZ1bmN0aW9uKGUpe3JldHVyblwiKGZ1bmN0aW9uKCl7XCIrZStcIlxcbjt9KSgpO1xcblwifSxnb29nLmxvYWRNb2R1bGU9ZnVuY3Rpb24oZSl7dmFyIHQ9Z29vZy5tb2R1bGVMb2FkZXJTdGF0ZV87dHJ5e2lmKGdvb2cubW9kdWxlTG9hZGVyU3RhdGVfPXttb2R1bGVOYW1lOlwiXCIsZGVjbGFyZUxlZ2FjeU5hbWVzcGFjZTohMSx0eXBlOmdvb2cuTW9kdWxlVHlwZS5HT09HfSxnb29nLmlzRnVuY3Rpb24oZSkpdmFyIG89ZS5jYWxsKHZvaWQgMCx7fSk7ZWxzZXtpZighZ29vZy5pc1N0cmluZyhlKSl0aHJvdyBFcnJvcihcIkludmFsaWQgbW9kdWxlIGRlZmluaXRpb25cIik7Z29vZy51c2VTYWZhcmkxMFdvcmthcm91bmQoKSYmKGU9Z29vZy53b3JrYXJvdW5kU2FmYXJpMTBFdmFsQnVnKGUpKSxvPWdvb2cubG9hZE1vZHVsZUZyb21Tb3VyY2VfLmNhbGwodm9pZCAwLGUpfXZhciByPWdvb2cubW9kdWxlTG9hZGVyU3RhdGVfLm1vZHVsZU5hbWU7aWYoIWdvb2cuaXNTdHJpbmcocil8fCFyKXRocm93IEVycm9yKCdJbnZhbGlkIG1vZHVsZSBuYW1lIFwiJytyKydcIicpO2dvb2cubW9kdWxlTG9hZGVyU3RhdGVfLmRlY2xhcmVMZWdhY3lOYW1lc3BhY2U/Z29vZy5jb25zdHJ1Y3ROYW1lc3BhY2VfKHIsbyk6Z29vZy5TRUFMX01PRFVMRV9FWFBPUlRTJiZPYmplY3Quc2VhbCYmXCJvYmplY3RcIj09dHlwZW9mIG8mJm51bGwhPW8mJk9iamVjdC5zZWFsKG8pLGdvb2cubG9hZGVkTW9kdWxlc19bcl09e2V4cG9ydHM6byx0eXBlOmdvb2cuTW9kdWxlVHlwZS5HT09HLG1vZHVsZUlkOmdvb2cubW9kdWxlTG9hZGVyU3RhdGVfLm1vZHVsZU5hbWV9fWZpbmFsbHl7Z29vZy5tb2R1bGVMb2FkZXJTdGF0ZV89dH19LGdvb2cubG9hZE1vZHVsZUZyb21Tb3VyY2VfPWZ1bmN0aW9uKGEpe3JldHVybiBldmFsKGEpLHt9fSxnb29nLm5vcm1hbGl6ZVBhdGhfPWZ1bmN0aW9uKGUpe2U9ZS5zcGxpdChcIi9cIik7Zm9yKHZhciB0PTA7dDxlLmxlbmd0aDspXCIuXCI9PWVbdF0/ZS5zcGxpY2UodCwxKTp0JiZcIi4uXCI9PWVbdF0mJmVbdC0xXSYmXCIuLlwiIT1lW3QtMV0/ZS5zcGxpY2UoLS10LDIpOnQrKztyZXR1cm4gZS5qb2luKFwiL1wiKX0sZ29vZy5sb2FkRmlsZVN5bmNfPWZ1bmN0aW9uKGUpe2lmKGdvb2cuZ2xvYmFsLkNMT1NVUkVfTE9BRF9GSUxFX1NZTkMpcmV0dXJuIGdvb2cuZ2xvYmFsLkNMT1NVUkVfTE9BRF9GSUxFX1NZTkMoZSk7dHJ5e3ZhciB0PW5ldyBnb29nLmdsb2JhbC5YTUxIdHRwUmVxdWVzdDtyZXR1cm4gdC5vcGVuKFwiZ2V0XCIsZSwhMSksdC5zZW5kKCksMD09dC5zdGF0dXN8fDIwMD09dC5zdGF0dXM/dC5yZXNwb25zZVRleHQ6bnVsbH1jYXRjaChlKXtyZXR1cm4gbnVsbH19LGdvb2cudHJhbnNwaWxlXz1mdW5jdGlvbihlLHQsbyl7dmFyIHI9Z29vZy5nbG9iYWwuJGpzY29tcDtyfHwoZ29vZy5nbG9iYWwuJGpzY29tcD1yPXt9KTt2YXIgbj1yLnRyYW5zcGlsZTtpZighbil7dmFyIHM9Z29vZy5iYXNlUGF0aCtnb29nLlRSQU5TUElMRVIsaT1nb29nLmxvYWRGaWxlU3luY18ocyk7aWYoaSl7aWYoZnVuY3Rpb24oKXsoMCxldmFsKShpK1wiXFxuLy8jIHNvdXJjZVVSTD1cIitzKX0uY2FsbChnb29nLmdsb2JhbCksZ29vZy5nbG9iYWwuJGd3dEV4cG9ydCYmZ29vZy5nbG9iYWwuJGd3dEV4cG9ydC4kanNjb21wJiYhZ29vZy5nbG9iYWwuJGd3dEV4cG9ydC4kanNjb21wLnRyYW5zcGlsZSl0aHJvdyBFcnJvcignVGhlIHRyYW5zcGlsZXIgZGlkIG5vdCBwcm9wZXJseSBleHBvcnQgdGhlIFwidHJhbnNwaWxlXCIgbWV0aG9kLiAkZ3d0RXhwb3J0OiAnK0pTT04uc3RyaW5naWZ5KGdvb2cuZ2xvYmFsLiRnd3RFeHBvcnQpKTtnb29nLmdsb2JhbC4kanNjb21wLnRyYW5zcGlsZT1nb29nLmdsb2JhbC4kZ3d0RXhwb3J0LiRqc2NvbXAudHJhbnNwaWxlLG49KHI9Z29vZy5nbG9iYWwuJGpzY29tcCkudHJhbnNwaWxlfX1yZXR1cm4gbnx8KG49ci50cmFuc3BpbGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZ29vZy5sb2dUb0NvbnNvbGVfKHQrXCIgcmVxdWlyZXMgdHJhbnNwaWxhdGlvbiBidXQgbm8gdHJhbnNwaWxlciB3YXMgZm91bmQuXCIpLGV9KSxuKGUsdCxvKX0sZ29vZy50eXBlT2Y9ZnVuY3Rpb24oZSl7dmFyIHQ9dHlwZW9mIGU7aWYoXCJvYmplY3RcIj09dCl7aWYoIWUpcmV0dXJuXCJudWxsXCI7aWYoZSBpbnN0YW5jZW9mIEFycmF5KXJldHVyblwiYXJyYXlcIjtpZihlIGluc3RhbmNlb2YgT2JqZWN0KXJldHVybiB0O3ZhciBvPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKTtpZihcIltvYmplY3QgV2luZG93XVwiPT1vKXJldHVyblwib2JqZWN0XCI7aWYoXCJbb2JqZWN0IEFycmF5XVwiPT1vfHxcIm51bWJlclwiPT10eXBlb2YgZS5sZW5ndGgmJnZvaWQgMCE9PWUuc3BsaWNlJiZ2b2lkIDAhPT1lLnByb3BlcnR5SXNFbnVtZXJhYmxlJiYhZS5wcm9wZXJ0eUlzRW51bWVyYWJsZShcInNwbGljZVwiKSlyZXR1cm5cImFycmF5XCI7aWYoXCJbb2JqZWN0IEZ1bmN0aW9uXVwiPT1vfHx2b2lkIDAhPT1lLmNhbGwmJnZvaWQgMCE9PWUucHJvcGVydHlJc0VudW1lcmFibGUmJiFlLnByb3BlcnR5SXNFbnVtZXJhYmxlKFwiY2FsbFwiKSlyZXR1cm5cImZ1bmN0aW9uXCJ9ZWxzZSBpZihcImZ1bmN0aW9uXCI9PXQmJnZvaWQgMD09PWUuY2FsbClyZXR1cm5cIm9iamVjdFwiO3JldHVybiB0fSxnb29nLmlzTnVsbD1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09PWV9LGdvb2cuaXNEZWZBbmROb3ROdWxsPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT1lfSxnb29nLmlzQXJyYXk9ZnVuY3Rpb24oZSl7cmV0dXJuXCJhcnJheVwiPT1nb29nLnR5cGVPZihlKX0sZ29vZy5pc0FycmF5TGlrZT1mdW5jdGlvbihlKXt2YXIgdD1nb29nLnR5cGVPZihlKTtyZXR1cm5cImFycmF5XCI9PXR8fFwib2JqZWN0XCI9PXQmJlwibnVtYmVyXCI9PXR5cGVvZiBlLmxlbmd0aH0sZ29vZy5pc0RhdGVMaWtlPWZ1bmN0aW9uKGUpe3JldHVybiBnb29nLmlzT2JqZWN0KGUpJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLmdldEZ1bGxZZWFyfSxnb29nLmlzRnVuY3Rpb249ZnVuY3Rpb24oZSl7cmV0dXJuXCJmdW5jdGlvblwiPT1nb29nLnR5cGVPZihlKX0sZ29vZy5pc09iamVjdD1mdW5jdGlvbihlKXt2YXIgdD10eXBlb2YgZTtyZXR1cm5cIm9iamVjdFwiPT10JiZudWxsIT1lfHxcImZ1bmN0aW9uXCI9PXR9LGdvb2cuZ2V0VWlkPWZ1bmN0aW9uKGUpe3JldHVybiBlW2dvb2cuVUlEX1BST1BFUlRZX118fChlW2dvb2cuVUlEX1BST1BFUlRZX109Kytnb29nLnVpZENvdW50ZXJfKX0sZ29vZy5oYXNVaWQ9ZnVuY3Rpb24oZSl7cmV0dXJuISFlW2dvb2cuVUlEX1BST1BFUlRZX119LGdvb2cucmVtb3ZlVWlkPWZ1bmN0aW9uKGUpe251bGwhPT1lJiZcInJlbW92ZUF0dHJpYnV0ZVwiaW4gZSYmZS5yZW1vdmVBdHRyaWJ1dGUoZ29vZy5VSURfUFJPUEVSVFlfKTt0cnl7ZGVsZXRlIGVbZ29vZy5VSURfUFJPUEVSVFlfXX1jYXRjaChlKXt9fSxnb29nLlVJRF9QUk9QRVJUWV89XCJjbG9zdXJlX3VpZF9cIisoMWU5Kk1hdGgucmFuZG9tKCk+Pj4wKSxnb29nLnVpZENvdW50ZXJfPTAsZ29vZy5nZXRIYXNoQ29kZT1nb29nLmdldFVpZCxnb29nLnJlbW92ZUhhc2hDb2RlPWdvb2cucmVtb3ZlVWlkLGdvb2cuY2xvbmVPYmplY3Q9ZnVuY3Rpb24oZSl7dmFyIHQ9Z29vZy50eXBlT2YoZSk7aWYoXCJvYmplY3RcIj09dHx8XCJhcnJheVwiPT10KXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLmNsb25lKXJldHVybiBlLmNsb25lKCk7Zm9yKHZhciBvIGluIHQ9XCJhcnJheVwiPT10P1tdOnt9LGUpdFtvXT1nb29nLmNsb25lT2JqZWN0KGVbb10pO3JldHVybiB0fXJldHVybiBlfSxnb29nLmJpbmROYXRpdmVfPWZ1bmN0aW9uKGUsdCxvKXtyZXR1cm4gZS5jYWxsLmFwcGx5KGUuYmluZCxhcmd1bWVudHMpfSxnb29nLmJpbmRKc189ZnVuY3Rpb24oZSx0LG8pe2lmKCFlKXRocm93IEVycm9yKCk7aWYoMjxhcmd1bWVudHMubGVuZ3RoKXt2YXIgcj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMik7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtyZXR1cm4gQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuYXBwbHkobyxyKSxlLmFwcGx5KHQsbyl9fXJldHVybiBmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHQsYXJndW1lbnRzKX19LGdvb2cuYmluZD1mdW5jdGlvbihlLHQsbyl7cmV0dXJuIEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kJiYtMSE9RnVuY3Rpb24ucHJvdG90eXBlLmJpbmQudG9TdHJpbmcoKS5pbmRleE9mKFwibmF0aXZlIGNvZGVcIik/Z29vZy5iaW5kPWdvb2cuYmluZE5hdGl2ZV86Z29vZy5iaW5kPWdvb2cuYmluZEpzXyxnb29nLmJpbmQuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxnb29nLnBhcnRpYWw9ZnVuY3Rpb24oZSx0KXt2YXIgbz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9by5zbGljZSgpO3JldHVybiB0LnB1c2guYXBwbHkodCxhcmd1bWVudHMpLGUuYXBwbHkodGhpcyx0KX19LGdvb2cubWl4aW49ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG8gaW4gdCllW29dPXRbb119LGdvb2cubm93PWdvb2cuVFJVU1RFRF9TSVRFJiZEYXRlLm5vd3x8ZnVuY3Rpb24oKXtyZXR1cm4rbmV3IERhdGV9LGdvb2cuZ2xvYmFsRXZhbD1mdW5jdGlvbihlKXtpZihnb29nLmdsb2JhbC5leGVjU2NyaXB0KWdvb2cuZ2xvYmFsLmV4ZWNTY3JpcHQoZSxcIkphdmFTY3JpcHRcIik7ZWxzZXtpZighZ29vZy5nbG9iYWwuZXZhbCl0aHJvdyBFcnJvcihcImdvb2cuZ2xvYmFsRXZhbCBub3QgYXZhaWxhYmxlXCIpO2lmKG51bGw9PWdvb2cuZXZhbFdvcmtzRm9yR2xvYmFsc18pe3RyeXtnb29nLmdsb2JhbC5ldmFsKFwidmFyIF9ldmFsVGVzdF8gPSAxO1wiKX1jYXRjaChlKXt9aWYodm9pZCAwIT09Z29vZy5nbG9iYWwuX2V2YWxUZXN0Xyl7dHJ5e2RlbGV0ZSBnb29nLmdsb2JhbC5fZXZhbFRlc3RffWNhdGNoKGUpe31nb29nLmV2YWxXb3Jrc0Zvckdsb2JhbHNfPSEwfWVsc2UgZ29vZy5ldmFsV29ya3NGb3JHbG9iYWxzXz0hMX1pZihnb29nLmV2YWxXb3Jrc0Zvckdsb2JhbHNfKWdvb2cuZ2xvYmFsLmV2YWwoZSk7ZWxzZXt2YXIgdD1nb29nLmdsb2JhbC5kb2N1bWVudCxvPXQuY3JlYXRlRWxlbWVudChcIlNDUklQVFwiKTtvLnR5cGU9XCJ0ZXh0L2phdmFzY3JpcHRcIixvLmRlZmVyPSExLG8uYXBwZW5kQ2hpbGQodC5jcmVhdGVUZXh0Tm9kZShlKSksdC5oZWFkLmFwcGVuZENoaWxkKG8pLHQuaGVhZC5yZW1vdmVDaGlsZChvKX19fSxnb29nLmV2YWxXb3Jrc0Zvckdsb2JhbHNfPW51bGwsZ29vZy5nZXRDc3NOYW1lPWZ1bmN0aW9uKGUsdCl7aWYoXCIuXCI9PVN0cmluZyhlKS5jaGFyQXQoMCkpdGhyb3cgRXJyb3IoJ2NsYXNzTmFtZSBwYXNzZWQgaW4gZ29vZy5nZXRDc3NOYW1lIG11c3Qgbm90IHN0YXJ0IHdpdGggXCIuXCIuIFlvdSBwYXNzZWQ6ICcrZSk7dmFyIG89ZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cuY3NzTmFtZU1hcHBpbmdfW2VdfHxlfSxyPWZ1bmN0aW9uKGUpe2U9ZS5zcGxpdChcIi1cIik7Zm9yKHZhciB0PVtdLHI9MDtyPGUubGVuZ3RoO3IrKyl0LnB1c2gobyhlW3JdKSk7cmV0dXJuIHQuam9pbihcIi1cIil9O3JldHVybiByPWdvb2cuY3NzTmFtZU1hcHBpbmdfP1wiQllfV0hPTEVcIj09Z29vZy5jc3NOYW1lTWFwcGluZ1N0eWxlXz9vOnI6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LGU9dD9lK1wiLVwiK3IodCk6cihlKSxnb29nLmdsb2JhbC5DTE9TVVJFX0NTU19OQU1FX01BUF9GTj9nb29nLmdsb2JhbC5DTE9TVVJFX0NTU19OQU1FX01BUF9GTihlKTplfSxnb29nLnNldENzc05hbWVNYXBwaW5nPWZ1bmN0aW9uKGUsdCl7Z29vZy5jc3NOYW1lTWFwcGluZ189ZSxnb29nLmNzc05hbWVNYXBwaW5nU3R5bGVfPXR9LCFDT01QSUxFRCYmZ29vZy5nbG9iYWwuQ0xPU1VSRV9DU1NfTkFNRV9NQVBQSU5HJiYoZ29vZy5jc3NOYW1lTWFwcGluZ189Z29vZy5nbG9iYWwuQ0xPU1VSRV9DU1NfTkFNRV9NQVBQSU5HKSxnb29nLmdldE1zZz1mdW5jdGlvbihlLHQsbyl7cmV0dXJuIG8mJm8uaHRtbCYmKGU9ZS5yZXBsYWNlKC88L2csXCImbHQ7XCIpKSx0JiYoZT1lLnJlcGxhY2UoL1xce1xcJChbXn1dKyl9L2csKGZ1bmN0aW9uKGUsbyl7cmV0dXJuIG51bGwhPXQmJm8gaW4gdD90W29dOmV9KSkpLGV9LGdvb2cuZ2V0TXNnV2l0aEZhbGxiYWNrPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGV9LGdvb2cuZXhwb3J0U3ltYm9sPWZ1bmN0aW9uKGUsdCxvKXtnb29nLmV4cG9ydFBhdGhfKGUsdCxvKX0sZ29vZy5leHBvcnRQcm9wZXJ0eT1mdW5jdGlvbihlLHQsbyl7ZVt0XT1vfSxnb29nLmluaGVyaXRzPWZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbygpe31vLnByb3RvdHlwZT10LnByb3RvdHlwZSxlLnN1cGVyQ2xhc3NfPXQucHJvdG90eXBlLGUucHJvdG90eXBlPW5ldyBvLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5iYXNlPWZ1bmN0aW9uKGUsbyxyKXtmb3IodmFyIG49QXJyYXkoYXJndW1lbnRzLmxlbmd0aC0yKSxzPTI7czxhcmd1bWVudHMubGVuZ3RoO3MrKyluW3MtMl09YXJndW1lbnRzW3NdO3JldHVybiB0LnByb3RvdHlwZVtvXS5hcHBseShlLG4pfX0sZ29vZy5iYXNlPWZ1bmN0aW9uKGUsdCxvKXt2YXIgcj1hcmd1bWVudHMuY2FsbGVlLmNhbGxlcjtpZihnb29nLlNUUklDVF9NT0RFX0NPTVBBVElCTEV8fGdvb2cuREVCVUcmJiFyKXRocm93IEVycm9yKFwiYXJndW1lbnRzLmNhbGxlciBub3QgZGVmaW5lZC4gIGdvb2cuYmFzZSgpIGNhbm5vdCBiZSB1c2VkIHdpdGggc3RyaWN0IG1vZGUgY29kZS4gU2VlIGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi81LjEvI3NlYy1DXCIpO2lmKHZvaWQgMCE9PXIuc3VwZXJDbGFzc18pe2Zvcih2YXIgbj1BcnJheShhcmd1bWVudHMubGVuZ3RoLTEpLHM9MTtzPGFyZ3VtZW50cy5sZW5ndGg7cysrKW5bcy0xXT1hcmd1bWVudHNbc107cmV0dXJuIHIuc3VwZXJDbGFzc18uY29uc3RydWN0b3IuYXBwbHkoZSxuKX1pZihcInN0cmluZ1wiIT10eXBlb2YgdCYmXCJzeW1ib2xcIiE9dHlwZW9mIHQpdGhyb3cgRXJyb3IoXCJtZXRob2QgbmFtZXMgcHJvdmlkZWQgdG8gZ29vZy5iYXNlIG11c3QgYmUgYSBzdHJpbmcgb3IgYSBzeW1ib2xcIik7Zm9yKG49QXJyYXkoYXJndW1lbnRzLmxlbmd0aC0yKSxzPTI7czxhcmd1bWVudHMubGVuZ3RoO3MrKyluW3MtMl09YXJndW1lbnRzW3NdO3M9ITE7Zm9yKHZhciBpPWUuY29uc3RydWN0b3IucHJvdG90eXBlO2k7aT1PYmplY3QuZ2V0UHJvdG90eXBlT2YoaSkpaWYoaVt0XT09PXIpcz0hMDtlbHNlIGlmKHMpcmV0dXJuIGlbdF0uYXBwbHkoZSxuKTtpZihlW3RdPT09cilyZXR1cm4gZS5jb25zdHJ1Y3Rvci5wcm90b3R5cGVbdF0uYXBwbHkoZSxuKTt0aHJvdyBFcnJvcihcImdvb2cuYmFzZSBjYWxsZWQgZnJvbSBhIG1ldGhvZCBvZiBvbmUgbmFtZSB0byBhIG1ldGhvZCBvZiBhIGRpZmZlcmVudCBuYW1lXCIpfSxnb29nLnNjb3BlPWZ1bmN0aW9uKGUpe2lmKGdvb2cuaXNJbk1vZHVsZUxvYWRlcl8oKSl0aHJvdyBFcnJvcihcImdvb2cuc2NvcGUgaXMgbm90IHN1cHBvcnRlZCB3aXRoaW4gYSBtb2R1bGUuXCIpO2UuY2FsbChnb29nLmdsb2JhbCl9LENPTVBJTEVEfHwoZ29vZy5nbG9iYWwuQ09NUElMRUQ9Q09NUElMRUQpLGdvb2cuZGVmaW5lQ2xhc3M9ZnVuY3Rpb24oZSx0KXt2YXIgbz10LmNvbnN0cnVjdG9yLHI9dC5zdGF0aWNzO3JldHVybiBvJiZvIT1PYmplY3QucHJvdG90eXBlLmNvbnN0cnVjdG9yfHwobz1mdW5jdGlvbigpe3Rocm93IEVycm9yKFwiY2Fubm90IGluc3RhbnRpYXRlIGFuIGludGVyZmFjZSAobm8gY29uc3RydWN0b3IgZGVmaW5lZCkuXCIpfSksbz1nb29nLmRlZmluZUNsYXNzLmNyZWF0ZVNlYWxpbmdDb25zdHJ1Y3Rvcl8obyxlKSxlJiZnb29nLmluaGVyaXRzKG8sZSksZGVsZXRlIHQuY29uc3RydWN0b3IsZGVsZXRlIHQuc3RhdGljcyxnb29nLmRlZmluZUNsYXNzLmFwcGx5UHJvcGVydGllc18oby5wcm90b3R5cGUsdCksbnVsbCE9ciYmKHIgaW5zdGFuY2VvZiBGdW5jdGlvbj9yKG8pOmdvb2cuZGVmaW5lQ2xhc3MuYXBwbHlQcm9wZXJ0aWVzXyhvLHIpKSxvfSxnb29nLmRlZmluZUNsYXNzLlNFQUxfQ0xBU1NfSU5TVEFOQ0VTPWdvb2cuREVCVUcsZ29vZy5kZWZpbmVDbGFzcy5jcmVhdGVTZWFsaW5nQ29uc3RydWN0b3JfPWZ1bmN0aW9uKGUsdCl7aWYoIWdvb2cuZGVmaW5lQ2xhc3MuU0VBTF9DTEFTU19JTlNUQU5DRVMpcmV0dXJuIGU7dmFyIG89IWdvb2cuZGVmaW5lQ2xhc3MuaXNVbnNlYWxhYmxlXyh0KSxyPWZ1bmN0aW9uKCl7dmFyIHQ9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7cmV0dXJuIHRbZ29vZy5VSURfUFJPUEVSVFlfXT10W2dvb2cuVUlEX1BST1BFUlRZX10sdGhpcy5jb25zdHJ1Y3Rvcj09PXImJm8mJk9iamVjdC5zZWFsIGluc3RhbmNlb2YgRnVuY3Rpb24mJk9iamVjdC5zZWFsKHQpLHR9O3JldHVybiByfSxnb29nLmRlZmluZUNsYXNzLmlzVW5zZWFsYWJsZV89ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUucHJvdG90eXBlJiZlLnByb3RvdHlwZVtnb29nLlVOU0VBTEFCTEVfQ09OU1RSVUNUT1JfUFJPUEVSVFlfXX0sZ29vZy5kZWZpbmVDbGFzcy5PQkpFQ1RfUFJPVE9UWVBFX0ZJRUxEU189XCJjb25zdHJ1Y3RvciBoYXNPd25Qcm9wZXJ0eSBpc1Byb3RvdHlwZU9mIHByb3BlcnR5SXNFbnVtZXJhYmxlIHRvTG9jYWxlU3RyaW5nIHRvU3RyaW5nIHZhbHVlT2ZcIi5zcGxpdChcIiBcIiksZ29vZy5kZWZpbmVDbGFzcy5hcHBseVByb3BlcnRpZXNfPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBvIGluIHQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbykmJihlW29dPXRbb10pO2Zvcih2YXIgcj0wO3I8Z29vZy5kZWZpbmVDbGFzcy5PQkpFQ1RfUFJPVE9UWVBFX0ZJRUxEU18ubGVuZ3RoO3IrKylvPWdvb2cuZGVmaW5lQ2xhc3MuT0JKRUNUX1BST1RPVFlQRV9GSUVMRFNfW3JdLE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG8pJiYoZVtvXT10W29dKX0sZ29vZy50YWdVbnNlYWxhYmxlQ2xhc3M9ZnVuY3Rpb24oZSl7IUNPTVBJTEVEJiZnb29nLmRlZmluZUNsYXNzLlNFQUxfQ0xBU1NfSU5TVEFOQ0VTJiYoZS5wcm90b3R5cGVbZ29vZy5VTlNFQUxBQkxFX0NPTlNUUlVDVE9SX1BST1BFUlRZX109ITApfSxnb29nLlVOU0VBTEFCTEVfQ09OU1RSVUNUT1JfUFJPUEVSVFlfPVwiZ29vZ19kZWZpbmVDbGFzc19sZWdhY3lfdW5zZWFsYWJsZVwiLCFDT01QSUxFRCYmZ29vZy5ERVBFTkRFTkNJRVNfRU5BQkxFRCYmKGdvb2cuaW5IdG1sRG9jdW1lbnRfPWZ1bmN0aW9uKCl7dmFyIGU9Z29vZy5nbG9iYWwuZG9jdW1lbnQ7cmV0dXJuIG51bGwhPWUmJlwid3JpdGVcImluIGV9LGdvb2cuaXNEb2N1bWVudExvYWRpbmdfPWZ1bmN0aW9uKCl7dmFyIGU9Z29vZy5nbG9iYWwuZG9jdW1lbnQ7cmV0dXJuIGUuYXR0YWNoRXZlbnQ/XCJjb21wbGV0ZVwiIT1lLnJlYWR5U3RhdGU6XCJsb2FkaW5nXCI9PWUucmVhZHlTdGF0ZX0sZ29vZy5maW5kQmFzZVBhdGhfPWZ1bmN0aW9uKCl7aWYoZ29vZy5pc0RlZihnb29nLmdsb2JhbC5DTE9TVVJFX0JBU0VfUEFUSCkmJmdvb2cuaXNTdHJpbmcoZ29vZy5nbG9iYWwuQ0xPU1VSRV9CQVNFX1BBVEgpKWdvb2cuYmFzZVBhdGg9Z29vZy5nbG9iYWwuQ0xPU1VSRV9CQVNFX1BBVEg7ZWxzZSBpZihnb29nLmluSHRtbERvY3VtZW50XygpKXt2YXIgZT1nb29nLmdsb2JhbC5kb2N1bWVudCx0PWUuY3VycmVudFNjcmlwdDtmb3IodD0oZT10P1t0XTplLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiU0NSSVBUXCIpKS5sZW5ndGgtMTswPD10Oy0tdCl7dmFyIG89ZVt0XS5zcmMscj1vLmxhc3RJbmRleE9mKFwiP1wiKTtpZihyPS0xPT1yP28ubGVuZ3RoOnIsXCJiYXNlLmpzXCI9PW8uc3Vic3RyKHItNyw3KSl7Z29vZy5iYXNlUGF0aD1vLnN1YnN0cigwLHItNyk7YnJlYWt9fX19LGdvb2cuZmluZEJhc2VQYXRoXygpLGdvb2cuVHJhbnNwaWxlcj1mdW5jdGlvbigpe3RoaXMucmVxdWlyZXNUcmFuc3BpbGF0aW9uXz1udWxsLHRoaXMudHJhbnNwaWxhdGlvblRhcmdldF89Z29vZy5UUkFOU1BJTEVfVE9fTEFOR1VBR0V9LGdvb2cuVHJhbnNwaWxlci5wcm90b3R5cGUuY3JlYXRlUmVxdWlyZXNUcmFuc3BpbGF0aW9uXz1mdW5jdGlvbigpe2Z1bmN0aW9uIGEodCxvKXtlP2RbdF09ITA6bygpPyhjPXQsZFt0XT0hMSk6ZT1kW3RdPSEwfWZ1bmN0aW9uIGIoYSl7dHJ5e3JldHVybiEhZXZhbChhKX1jYXRjaChlKXtyZXR1cm4hMX19dmFyIGM9XCJlczNcIixkPXtlczM6ITF9LGU9ITEsZj1nb29nLmdsb2JhbC5uYXZpZ2F0b3ImJmdvb2cuZ2xvYmFsLm5hdmlnYXRvci51c2VyQWdlbnQ/Z29vZy5nbG9iYWwubmF2aWdhdG9yLnVzZXJBZ2VudDpcIlwiO3JldHVybiBhKFwiZXM1XCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGIoXCJbMSxdLmxlbmd0aD09MVwiKX0pKSxhKFwiZXM2XCIsKGZ1bmN0aW9uKCl7cmV0dXJuIWYubWF0Y2goL0VkZ2VcXC8oXFxkKykoXFwuXFxkKSovaSkmJmIoJygoKT0+e1widXNlIHN0cmljdFwiO2NsYXNzIFh7Y29uc3RydWN0b3IoKXtpZihuZXcudGFyZ2V0IT1TdHJpbmcpdGhyb3cgMTt0aGlzLng9NDJ9fWxldCBxPVJlZmxlY3QuY29uc3RydWN0KFgsW10sU3RyaW5nKTtpZihxLnghPTQyfHwhKHEgaW5zdGFuY2VvZiBTdHJpbmcpKXRocm93IDE7Zm9yKGNvbnN0IGEgb2ZbMiwzXSl7aWYoYT09Miljb250aW51ZTtmdW5jdGlvbiBmKHo9e2F9KXtsZXQgYT0wO3JldHVybiB6LmF9e2Z1bmN0aW9uIGYoKXtyZXR1cm4gMDt9fXJldHVybiBmKCk9PTN9fSkoKScpfSkpLGEoXCJlczdcIiwoZnVuY3Rpb24oKXtyZXR1cm4gYihcIjIgKiogMiA9PSA0XCIpfSkpLGEoXCJlczhcIiwoZnVuY3Rpb24oKXtyZXR1cm4gYihcImFzeW5jICgpID0+IDEsIHRydWVcIil9KSksYShcImVzOVwiLChmdW5jdGlvbigpe3JldHVybiBiKFwiKHsuLi5yZXN0fSA9IHt9KSwgdHJ1ZVwiKX0pKSxhKFwiZXNfbmV4dFwiLChmdW5jdGlvbigpe3JldHVybiExfSkpLHt0YXJnZXQ6YyxtYXA6ZH19LGdvb2cuVHJhbnNwaWxlci5wcm90b3R5cGUubmVlZHNUcmFuc3BpbGU9ZnVuY3Rpb24oZSx0KXtpZihcImFsd2F5c1wiPT1nb29nLlRSQU5TUElMRSlyZXR1cm4hMDtpZihcIm5ldmVyXCI9PWdvb2cuVFJBTlNQSUxFKXJldHVybiExO2lmKCF0aGlzLnJlcXVpcmVzVHJhbnNwaWxhdGlvbl8pe3ZhciBvPXRoaXMuY3JlYXRlUmVxdWlyZXNUcmFuc3BpbGF0aW9uXygpO3RoaXMucmVxdWlyZXNUcmFuc3BpbGF0aW9uXz1vLm1hcCx0aGlzLnRyYW5zcGlsYXRpb25UYXJnZXRfPXRoaXMudHJhbnNwaWxhdGlvblRhcmdldF98fG8udGFyZ2V0fWlmKGUgaW4gdGhpcy5yZXF1aXJlc1RyYW5zcGlsYXRpb25fKXJldHVybiEhdGhpcy5yZXF1aXJlc1RyYW5zcGlsYXRpb25fW2VdfHwhKCFnb29nLmluSHRtbERvY3VtZW50XygpfHxcImVzNlwiIT10fHxcIm5vTW9kdWxlXCJpbiBnb29nLmdsb2JhbC5kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpKTt0aHJvdyBFcnJvcihcIlVua25vd24gbGFuZ3VhZ2UgbW9kZTogXCIrZSl9LGdvb2cuVHJhbnNwaWxlci5wcm90b3R5cGUudHJhbnNwaWxlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGdvb2cudHJhbnNwaWxlXyhlLHQsdGhpcy50cmFuc3BpbGF0aW9uVGFyZ2V0Xyl9LGdvb2cudHJhbnNwaWxlcl89bmV3IGdvb2cuVHJhbnNwaWxlcixnb29nLnByb3RlY3RTY3JpcHRUYWdfPWZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoLzxcXC8oU0NSSVBUKS9naSxcIlxcXFx4M2MvJDFcIil9LGdvb2cuRGVidWdMb2FkZXJfPWZ1bmN0aW9uKCl7dGhpcy5kZXBlbmRlbmNpZXNfPXt9LHRoaXMuaWRUb1BhdGhfPXt9LHRoaXMud3JpdHRlbl89e30sdGhpcy5sb2FkaW5nRGVwc189W10sdGhpcy5kZXBzVG9Mb2FkXz1bXSx0aGlzLnBhdXNlZF89ITEsdGhpcy5mYWN0b3J5Xz1uZXcgZ29vZy5EZXBlbmRlbmN5RmFjdG9yeShnb29nLnRyYW5zcGlsZXJfKSx0aGlzLmRlZmVycmVkQ2FsbGJhY2tzXz17fSx0aGlzLmRlZmVycmVkUXVldWVfPVtdfSxnb29nLkRlYnVnTG9hZGVyXy5wcm90b3R5cGUuYm9vdHN0cmFwPWZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbygpe3ImJihnb29nLmdsb2JhbC5zZXRUaW1lb3V0KHIsMCkscj1udWxsKX12YXIgcj10O2lmKGUubGVuZ3RoKXt0PVtdO2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgcz10aGlzLmdldFBhdGhGcm9tRGVwc18oZVtuXSk7aWYoIXMpdGhyb3cgRXJyb3IoXCJVbnJlZ29uaXplZCBuYW1lc3BhY2U6IFwiK2Vbbl0pO3QucHVzaCh0aGlzLmRlcGVuZGVuY2llc19bc10pfXM9Z29vZy5yZXF1aXJlO3ZhciBpPTA7Zm9yKG49MDtuPGUubGVuZ3RoO24rKylzKGVbbl0pLHRbbl0ub25Mb2FkKChmdW5jdGlvbigpeysraT09ZS5sZW5ndGgmJm8oKX0pKX1lbHNlIG8oKX0sZ29vZy5EZWJ1Z0xvYWRlcl8ucHJvdG90eXBlLmxvYWRDbG9zdXJlRGVwcz1mdW5jdGlvbigpe3RoaXMuZGVwc1RvTG9hZF8ucHVzaCh0aGlzLmZhY3RvcnlfLmNyZWF0ZURlcGVuZGVuY3koZ29vZy5ub3JtYWxpemVQYXRoXyhnb29nLmJhc2VQYXRoK1wiZGVwcy5qc1wiKSxcImRlcHMuanNcIixbXSxbXSx7fSwhMSkpLHRoaXMubG9hZERlcHNfKCl9LGdvb2cuRGVidWdMb2FkZXJfLnByb3RvdHlwZS5yZXF1ZXN0ZWQ9ZnVuY3Rpb24oZSx0KXsoZT10aGlzLmdldFBhdGhGcm9tRGVwc18oZSkpJiYodHx8dGhpcy5hcmVEZXBzTG9hZGVkXyh0aGlzLmRlcGVuZGVuY2llc19bZV0ucmVxdWlyZXMpKSYmKHQ9dGhpcy5kZWZlcnJlZENhbGxiYWNrc19bZV0pJiYoZGVsZXRlIHRoaXMuZGVmZXJyZWRDYWxsYmFja3NfW2VdLHQoKSl9LGdvb2cuRGVidWdMb2FkZXJfLnByb3RvdHlwZS5zZXREZXBlbmRlbmN5RmFjdG9yeT1mdW5jdGlvbihlKXt0aGlzLmZhY3RvcnlfPWV9LGdvb2cuRGVidWdMb2FkZXJfLnByb3RvdHlwZS5sb2FkXz1mdW5jdGlvbihlKXtpZighdGhpcy5nZXRQYXRoRnJvbURlcHNfKGUpKXRocm93IGU9XCJnb29nLnJlcXVpcmUgY291bGQgbm90IGZpbmQ6IFwiK2UsZ29vZy5sb2dUb0NvbnNvbGVfKGUpLEVycm9yKGUpO3ZhciB0PXRoaXMsbz1bXSxyPWZ1bmN0aW9uKGUpe3ZhciBuPXQuZ2V0UGF0aEZyb21EZXBzXyhlKTtpZighbil0aHJvdyBFcnJvcihcIkJhZCBkZXBlbmRlbmN5IHBhdGggb3Igc3ltYm9sOiBcIitlKTtpZighdC53cml0dGVuX1tuXSl7Zm9yKHQud3JpdHRlbl9bbl09ITAsZT10LmRlcGVuZGVuY2llc19bbl0sbj0wO248ZS5yZXF1aXJlcy5sZW5ndGg7bisrKWdvb2cuaXNQcm92aWRlZF8oZS5yZXF1aXJlc1tuXSl8fHIoZS5yZXF1aXJlc1tuXSk7by5wdXNoKGUpfX07cihlKSxlPSEhdGhpcy5kZXBzVG9Mb2FkXy5sZW5ndGgsdGhpcy5kZXBzVG9Mb2FkXz10aGlzLmRlcHNUb0xvYWRfLmNvbmNhdChvKSx0aGlzLnBhdXNlZF98fGV8fHRoaXMubG9hZERlcHNfKCl9LGdvb2cuRGVidWdMb2FkZXJfLnByb3RvdHlwZS5sb2FkRGVwc189ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcyx0PXRoaXMucGF1c2VkXzt0aGlzLmRlcHNUb0xvYWRfLmxlbmd0aCYmIXQ7KSFmdW5jdGlvbigpe3ZhciBvPSExLHI9ZS5kZXBzVG9Mb2FkXy5zaGlmdCgpLG49ITE7ZS5sb2FkaW5nXyhyKTt2YXIgcz17cGF1c2U6ZnVuY3Rpb24oKXtpZihvKXRocm93IEVycm9yKFwiQ2Fubm90IGNhbGwgcGF1c2UgYWZ0ZXIgdGhlIGNhbGwgdG8gbG9hZC5cIik7dD0hMH0scmVzdW1lOmZ1bmN0aW9uKCl7bz9lLnJlc3VtZV8oKTp0PSExfSxsb2FkZWQ6ZnVuY3Rpb24oKXtpZihuKXRocm93IEVycm9yKFwiRG91YmxlIGNhbGwgdG8gbG9hZGVkLlwiKTtuPSEwLGUubG9hZGVkXyhyKX0scGVuZGluZzpmdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxvPTA7bzxlLmxvYWRpbmdEZXBzXy5sZW5ndGg7bysrKXQucHVzaChlLmxvYWRpbmdEZXBzX1tvXSk7cmV0dXJuIHR9LHNldE1vZHVsZVN0YXRlOmZ1bmN0aW9uKGUpe2dvb2cubW9kdWxlTG9hZGVyU3RhdGVfPXt0eXBlOmUsbW9kdWxlTmFtZTpcIlwiLGRlY2xhcmVMZWdhY3lOYW1lc3BhY2U6ITF9fSxyZWdpc3RlckVzNk1vZHVsZUV4cG9ydHM6ZnVuY3Rpb24oZSx0LG8pe28mJihnb29nLmxvYWRlZE1vZHVsZXNfW29dPXtleHBvcnRzOnQsdHlwZTpnb29nLk1vZHVsZVR5cGUuRVM2LG1vZHVsZUlkOm98fFwiXCJ9KX0scmVnaXN0ZXJHb29nTW9kdWxlRXhwb3J0czpmdW5jdGlvbihlLHQpe2dvb2cubG9hZGVkTW9kdWxlc19bZV09e2V4cG9ydHM6dCx0eXBlOmdvb2cuTW9kdWxlVHlwZS5HT09HLG1vZHVsZUlkOmV9fSxjbGVhck1vZHVsZVN0YXRlOmZ1bmN0aW9uKCl7Z29vZy5tb2R1bGVMb2FkZXJTdGF0ZV89bnVsbH0sZGVmZXI6ZnVuY3Rpb24odCl7aWYobyl0aHJvdyBFcnJvcihcIkNhbm5vdCByZWdpc3RlciB3aXRoIGRlZmVyIGFmdGVyIHRoZSBjYWxsIHRvIGxvYWQuXCIpO2UuZGVmZXJfKHIsdCl9LGFyZURlcHNMb2FkZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS5hcmVEZXBzTG9hZGVkXyhyLnJlcXVpcmVzKX19O3RyeXtyLmxvYWQocyl9ZmluYWxseXtvPSEwfX0oKTt0JiZ0aGlzLnBhdXNlXygpfSxnb29nLkRlYnVnTG9hZGVyXy5wcm90b3R5cGUucGF1c2VfPWZ1bmN0aW9uKCl7dGhpcy5wYXVzZWRfPSEwfSxnb29nLkRlYnVnTG9hZGVyXy5wcm90b3R5cGUucmVzdW1lXz1mdW5jdGlvbigpe3RoaXMucGF1c2VkXyYmKHRoaXMucGF1c2VkXz0hMSx0aGlzLmxvYWREZXBzXygpKX0sZ29vZy5EZWJ1Z0xvYWRlcl8ucHJvdG90eXBlLmxvYWRpbmdfPWZ1bmN0aW9uKGUpe3RoaXMubG9hZGluZ0RlcHNfLnB1c2goZSl9LGdvb2cuRGVidWdMb2FkZXJfLnByb3RvdHlwZS5sb2FkZWRfPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wO3Q8dGhpcy5sb2FkaW5nRGVwc18ubGVuZ3RoO3QrKylpZih0aGlzLmxvYWRpbmdEZXBzX1t0XT09ZSl7dGhpcy5sb2FkaW5nRGVwc18uc3BsaWNlKHQsMSk7YnJlYWt9Zm9yKHQ9MDt0PHRoaXMuZGVmZXJyZWRRdWV1ZV8ubGVuZ3RoO3QrKylpZih0aGlzLmRlZmVycmVkUXVldWVfW3RdPT1lLnBhdGgpe3RoaXMuZGVmZXJyZWRRdWV1ZV8uc3BsaWNlKHQsMSk7YnJlYWt9aWYodGhpcy5sb2FkaW5nRGVwc18ubGVuZ3RoPT10aGlzLmRlZmVycmVkUXVldWVfLmxlbmd0aCYmIXRoaXMuZGVwc1RvTG9hZF8ubGVuZ3RoKWZvcig7dGhpcy5kZWZlcnJlZFF1ZXVlXy5sZW5ndGg7KXRoaXMucmVxdWVzdGVkKHRoaXMuZGVmZXJyZWRRdWV1ZV8uc2hpZnQoKSwhMCk7ZS5sb2FkZWQoKX0sZ29vZy5EZWJ1Z0xvYWRlcl8ucHJvdG90eXBlLmFyZURlcHNMb2FkZWRfPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7dCsrKXt2YXIgbz10aGlzLmdldFBhdGhGcm9tRGVwc18oZVt0XSk7aWYoIW98fCEobyBpbiB0aGlzLmRlZmVycmVkQ2FsbGJhY2tzXykmJiFnb29nLmlzUHJvdmlkZWRfKGVbdF0pKXJldHVybiExfXJldHVybiEwfSxnb29nLkRlYnVnTG9hZGVyXy5wcm90b3R5cGUuZ2V0UGF0aEZyb21EZXBzXz1mdW5jdGlvbihlKXtyZXR1cm4gZSBpbiB0aGlzLmlkVG9QYXRoXz90aGlzLmlkVG9QYXRoX1tlXTplIGluIHRoaXMuZGVwZW5kZW5jaWVzXz9lOm51bGx9LGdvb2cuRGVidWdMb2FkZXJfLnByb3RvdHlwZS5kZWZlcl89ZnVuY3Rpb24oZSx0KXt0aGlzLmRlZmVycmVkQ2FsbGJhY2tzX1tlLnBhdGhdPXQsdGhpcy5kZWZlcnJlZFF1ZXVlXy5wdXNoKGUucGF0aCl9LGdvb2cuTG9hZENvbnRyb2xsZXI9ZnVuY3Rpb24oKXt9LGdvb2cuTG9hZENvbnRyb2xsZXIucHJvdG90eXBlLnBhdXNlPWZ1bmN0aW9uKCl7fSxnb29nLkxvYWRDb250cm9sbGVyLnByb3RvdHlwZS5yZXN1bWU9ZnVuY3Rpb24oKXt9LGdvb2cuTG9hZENvbnRyb2xsZXIucHJvdG90eXBlLmxvYWRlZD1mdW5jdGlvbigpe30sZ29vZy5Mb2FkQ29udHJvbGxlci5wcm90b3R5cGUucGVuZGluZz1mdW5jdGlvbigpe30sZ29vZy5Mb2FkQ29udHJvbGxlci5wcm90b3R5cGUucmVnaXN0ZXJFczZNb2R1bGVFeHBvcnRzPWZ1bmN0aW9uKGUsdCxvKXt9LGdvb2cuTG9hZENvbnRyb2xsZXIucHJvdG90eXBlLnNldE1vZHVsZVN0YXRlPWZ1bmN0aW9uKGUpe30sZ29vZy5Mb2FkQ29udHJvbGxlci5wcm90b3R5cGUuY2xlYXJNb2R1bGVTdGF0ZT1mdW5jdGlvbigpe30sZ29vZy5Mb2FkQ29udHJvbGxlci5wcm90b3R5cGUuZGVmZXI9ZnVuY3Rpb24oZSl7fSxnb29nLkxvYWRDb250cm9sbGVyLnByb3RvdHlwZS5hcmVEZXBzTG9hZGVkPWZ1bmN0aW9uKCl7fSxnb29nLkRlcGVuZGVuY3k9ZnVuY3Rpb24oZSx0LG8scixuKXt0aGlzLnBhdGg9ZSx0aGlzLnJlbGF0aXZlUGF0aD10LHRoaXMucHJvdmlkZXM9byx0aGlzLnJlcXVpcmVzPXIsdGhpcy5sb2FkRmxhZ3M9bix0aGlzLmxvYWRlZF89ITEsdGhpcy5sb2FkQ2FsbGJhY2tzXz1bXX0sZ29vZy5EZXBlbmRlbmN5LnByb3RvdHlwZS5nZXRQYXRoTmFtZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMucGF0aCx0PWUuaW5kZXhPZihcIjovL1wiKTtyZXR1cm4gMDw9dCYmMDw9KHQ9KGU9ZS5zdWJzdHJpbmcodCszKSkuaW5kZXhPZihcIi9cIikpJiYoZT1lLnN1YnN0cmluZyh0KzEpKSxlfSxnb29nLkRlcGVuZGVuY3kucHJvdG90eXBlLm9uTG9hZD1mdW5jdGlvbihlKXt0aGlzLmxvYWRlZF8/ZSgpOnRoaXMubG9hZENhbGxiYWNrc18ucHVzaChlKX0sZ29vZy5EZXBlbmRlbmN5LnByb3RvdHlwZS5sb2FkZWQ9ZnVuY3Rpb24oKXt0aGlzLmxvYWRlZF89ITA7dmFyIGU9dGhpcy5sb2FkQ2FsbGJhY2tzXzt0aGlzLmxvYWRDYWxsYmFja3NfPVtdO2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7dCsrKWVbdF0oKX0sZ29vZy5EZXBlbmRlbmN5LmRlZmVyXz0hMSxnb29nLkRlcGVuZGVuY3kuY2FsbGJhY2tNYXBfPXt9LGdvb2cuRGVwZW5kZW5jeS5yZWdpc3RlckNhbGxiYWNrXz1mdW5jdGlvbihlKXt2YXIgdD1NYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDMyKTtyZXR1cm4gZ29vZy5EZXBlbmRlbmN5LmNhbGxiYWNrTWFwX1t0XT1lLHR9LGdvb2cuRGVwZW5kZW5jeS51bnJlZ2lzdGVyQ2FsbGJhY2tfPWZ1bmN0aW9uKGUpe2RlbGV0ZSBnb29nLkRlcGVuZGVuY3kuY2FsbGJhY2tNYXBfW2VdfSxnb29nLkRlcGVuZGVuY3kuY2FsbGJhY2tfPWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluIGdvb2cuRGVwZW5kZW5jeS5jYWxsYmFja01hcF8pKXRocm93IEVycm9yKFwiQ2FsbGJhY2sga2V5IFwiK2UrXCIgZG9lcyBub3QgZXhpc3QgKHdhcyBiYXNlLmpzIGxvYWRlZCBtb3JlIHRoYW4gb25jZT8pLlwiKTtmb3IodmFyIG89Z29vZy5EZXBlbmRlbmN5LmNhbGxiYWNrTWFwX1tlXSxyPVtdLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXIucHVzaChhcmd1bWVudHNbbl0pO28uYXBwbHkodm9pZCAwLHIpfSxnb29nLkRlcGVuZGVuY3kucHJvdG90eXBlLmxvYWQ9ZnVuY3Rpb24oZSl7aWYoZ29vZy5nbG9iYWwuQ0xPU1VSRV9JTVBPUlRfU0NSSVBUKWdvb2cuZ2xvYmFsLkNMT1NVUkVfSU1QT1JUX1NDUklQVCh0aGlzLnBhdGgpP2UubG9hZGVkKCk6ZS5wYXVzZSgpO2Vsc2UgaWYoZ29vZy5pbkh0bWxEb2N1bWVudF8oKSl7dmFyIHQ9Z29vZy5nbG9iYWwuZG9jdW1lbnQ7aWYoXCJjb21wbGV0ZVwiPT10LnJlYWR5U3RhdGUmJiFnb29nLkVOQUJMRV9DSFJPTUVfQVBQX1NBRkVfU0NSSVBUX0xPQURJTkcpe2lmKC9cXGJkZXBzLmpzJC8udGVzdCh0aGlzLnBhdGgpKXJldHVybiB2b2lkIGUubG9hZGVkKCk7dGhyb3cgRXJyb3IoJ0Nhbm5vdCB3cml0ZSBcIicrdGhpcy5wYXRoKydcIiBhZnRlciBkb2N1bWVudCBsb2FkJyl9aWYoIWdvb2cuRU5BQkxFX0NIUk9NRV9BUFBfU0FGRV9TQ1JJUFRfTE9BRElORyYmZ29vZy5pc0RvY3VtZW50TG9hZGluZ18oKSl7dmFyIG89Z29vZy5EZXBlbmRlbmN5LnJlZ2lzdGVyQ2FsbGJhY2tfKChmdW5jdGlvbih0KXtnb29nLkRlYnVnTG9hZGVyXy5JU19PTERfSUVfJiZcImNvbXBsZXRlXCIhPXQucmVhZHlTdGF0ZXx8KGdvb2cuRGVwZW5kZW5jeS51bnJlZ2lzdGVyQ2FsbGJhY2tfKG8pLGUubG9hZGVkKCkpfSkpLHI9IWdvb2cuRGVidWdMb2FkZXJfLklTX09MRF9JRV8mJmdvb2cuZ2V0U2NyaXB0Tm9uY2UoKT8nIG5vbmNlPVwiJytnb29nLmdldFNjcmlwdE5vbmNlKCkrJ1wiJzpcIlwiO3I9JzxzY3JpcHQgc3JjPVwiJyt0aGlzLnBhdGgrJ1wiICcrKGdvb2cuRGVidWdMb2FkZXJfLklTX09MRF9JRV8/XCJvbnJlYWR5c3RhdGVjaGFuZ2VcIjpcIm9ubG9hZFwiKStcIj1cXFwiZ29vZy5EZXBlbmRlbmN5LmNhbGxiYWNrXygnXCIrbysnXFwnLCB0aGlzKVwiIHR5cGU9XCJ0ZXh0L2phdmFzY3JpcHRcIiAnKyhnb29nLkRlcGVuZGVuY3kuZGVmZXJfP1wiZGVmZXJcIjpcIlwiKStyK1wiPjxcXC9zY3JpcHQ+XCIsdC53cml0ZShnb29nLlRSVVNURURfVFlQRVNfUE9MSUNZXz9nb29nLlRSVVNURURfVFlQRVNfUE9MSUNZXy5jcmVhdGVIVE1MKHIpOnIpfWVsc2V7dmFyIG49dC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO24uZGVmZXI9Z29vZy5EZXBlbmRlbmN5LmRlZmVyXyxuLmFzeW5jPSExLG4udHlwZT1cInRleHQvamF2YXNjcmlwdFwiLChyPWdvb2cuZ2V0U2NyaXB0Tm9uY2UoKSkmJm4uc2V0QXR0cmlidXRlKFwibm9uY2VcIixyKSxnb29nLkRlYnVnTG9hZGVyXy5JU19PTERfSUVfPyhlLnBhdXNlKCksbi5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXtcImxvYWRlZFwiIT1uLnJlYWR5U3RhdGUmJlwiY29tcGxldGVcIiE9bi5yZWFkeVN0YXRlfHwoZS5sb2FkZWQoKSxlLnJlc3VtZSgpKX0pOm4ub25sb2FkPWZ1bmN0aW9uKCl7bi5vbmxvYWQ9bnVsbCxlLmxvYWRlZCgpfSxuLnNyYz1nb29nLlRSVVNURURfVFlQRVNfUE9MSUNZXz9nb29nLlRSVVNURURfVFlQRVNfUE9MSUNZXy5jcmVhdGVTY3JpcHRVUkwodGhpcy5wYXRoKTp0aGlzLnBhdGgsdC5oZWFkLmFwcGVuZENoaWxkKG4pfX1lbHNlIGdvb2cubG9nVG9Db25zb2xlXyhcIkNhbm5vdCB1c2UgZGVmYXVsdCBkZWJ1ZyBsb2FkZXIgb3V0c2lkZSBvZiBIVE1MIGRvY3VtZW50cy5cIiksXCJkZXBzLmpzXCI9PXRoaXMucmVsYXRpdmVQYXRoPyhnb29nLmxvZ1RvQ29uc29sZV8oXCJDb25zaWRlciBzZXR0aW5nIENMT1NVUkVfSU1QT1JUX1NDUklQVCBiZWZvcmUgbG9hZGluZyBiYXNlLmpzLCBvciBzZXR0aW5nIENMT1NVUkVfTk9fREVQUyB0byB0cnVlLlwiKSxlLmxvYWRlZCgpKTplLnBhdXNlKCl9LGdvb2cuRXM2TW9kdWxlRGVwZW5kZW5jeT1mdW5jdGlvbihlLHQsbyxyLG4pe2dvb2cuRGVwZW5kZW5jeS5jYWxsKHRoaXMsZSx0LG8scixuKX0sZ29vZy5pbmhlcml0cyhnb29nLkVzNk1vZHVsZURlcGVuZGVuY3ksZ29vZy5EZXBlbmRlbmN5KSxnb29nLkVzNk1vZHVsZURlcGVuZGVuY3kucHJvdG90eXBlLmxvYWQ9ZnVuY3Rpb24oZSl7aWYoZ29vZy5nbG9iYWwuQ0xPU1VSRV9JTVBPUlRfU0NSSVBUKWdvb2cuZ2xvYmFsLkNMT1NVUkVfSU1QT1JUX1NDUklQVCh0aGlzLnBhdGgpP2UubG9hZGVkKCk6ZS5wYXVzZSgpO2Vsc2UgaWYoZ29vZy5pbkh0bWxEb2N1bWVudF8oKSl7dmFyIHQ9Z29vZy5nbG9iYWwuZG9jdW1lbnQsbz10aGlzO2lmKGdvb2cuaXNEb2N1bWVudExvYWRpbmdfKCkpe3ZhciByPWZ1bmN0aW9uKGUsbyl7ZT1vPyc8c2NyaXB0IHR5cGU9XCJtb2R1bGVcIiBjcm9zc29yaWdpbj4nK28rXCI8XFwvc2NyaXB0PlwiOic8c2NyaXB0IHR5cGU9XCJtb2R1bGVcIiBjcm9zc29yaWdpbiBzcmM9XCInK2UrJ1wiPjxcXC9zY3JpcHQ+Jyx0LndyaXRlKGdvb2cuVFJVU1RFRF9UWVBFU19QT0xJQ1lfP2dvb2cuVFJVU1RFRF9UWVBFU19QT0xJQ1lfLmNyZWF0ZUhUTUwoZSk6ZSl9O2dvb2cuRGVwZW5kZW5jeS5kZWZlcl89ITB9ZWxzZSByPWZ1bmN0aW9uKGUsbyl7dmFyIHI9dC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO3IuZGVmZXI9ITAsci5hc3luYz0hMSxyLnR5cGU9XCJtb2R1bGVcIixyLnNldEF0dHJpYnV0ZShcImNyb3Nzb3JpZ2luXCIsITApO3ZhciBuPWdvb2cuZ2V0U2NyaXB0Tm9uY2UoKTtuJiZyLnNldEF0dHJpYnV0ZShcIm5vbmNlXCIsbiksbz9yLnRleHRDb250ZW50PWdvb2cuVFJVU1RFRF9UWVBFU19QT0xJQ1lfP2dvb2cuVFJVU1RFRF9UWVBFU19QT0xJQ1lfLmNyZWF0ZVNjcmlwdChvKTpvOnIuc3JjPWdvb2cuVFJVU1RFRF9UWVBFU19QT0xJQ1lfP2dvb2cuVFJVU1RFRF9UWVBFU19QT0xJQ1lfLmNyZWF0ZVNjcmlwdFVSTChlKTplLHQuaGVhZC5hcHBlbmRDaGlsZChyKX07dmFyIG49Z29vZy5EZXBlbmRlbmN5LnJlZ2lzdGVyQ2FsbGJhY2tfKChmdW5jdGlvbigpe2dvb2cuRGVwZW5kZW5jeS51bnJlZ2lzdGVyQ2FsbGJhY2tfKG4pLGUuc2V0TW9kdWxlU3RhdGUoZ29vZy5Nb2R1bGVUeXBlLkVTNil9KSk7cih2b2lkIDAsJ2dvb2cuRGVwZW5kZW5jeS5jYWxsYmFja18oXCInK24rJ1wiKScpLHIodGhpcy5wYXRoLHZvaWQgMCk7dmFyIHM9Z29vZy5EZXBlbmRlbmN5LnJlZ2lzdGVyQ2FsbGJhY2tfKChmdW5jdGlvbih0KXtnb29nLkRlcGVuZGVuY3kudW5yZWdpc3RlckNhbGxiYWNrXyhzKSxlLnJlZ2lzdGVyRXM2TW9kdWxlRXhwb3J0cyhvLnBhdGgsdCxnb29nLm1vZHVsZUxvYWRlclN0YXRlXy5tb2R1bGVOYW1lKX0pKTtyKHZvaWQgMCwnaW1wb3J0ICogYXMgbSBmcm9tIFwiJyt0aGlzLnBhdGgrJ1wiOyBnb29nLkRlcGVuZGVuY3kuY2FsbGJhY2tfKFwiJytzKydcIiwgbSknKTt2YXIgaT1nb29nLkRlcGVuZGVuY3kucmVnaXN0ZXJDYWxsYmFja18oKGZ1bmN0aW9uKCl7Z29vZy5EZXBlbmRlbmN5LnVucmVnaXN0ZXJDYWxsYmFja18oaSksZS5jbGVhck1vZHVsZVN0YXRlKCksZS5sb2FkZWQoKX0pKTtyKHZvaWQgMCwnZ29vZy5EZXBlbmRlbmN5LmNhbGxiYWNrXyhcIicraSsnXCIpJyl9ZWxzZSBnb29nLmxvZ1RvQ29uc29sZV8oXCJDYW5ub3QgdXNlIGRlZmF1bHQgZGVidWcgbG9hZGVyIG91dHNpZGUgb2YgSFRNTCBkb2N1bWVudHMuXCIpLGUucGF1c2UoKX0sZ29vZy5UcmFuc2Zvcm1lZERlcGVuZGVuY3k9ZnVuY3Rpb24oZSx0LG8scixuKXtnb29nLkRlcGVuZGVuY3kuY2FsbCh0aGlzLGUsdCxvLHIsbiksdGhpcy5jb250ZW50c189bnVsbCx0aGlzLmxhenlGZXRjaF89IWdvb2cuaW5IdG1sRG9jdW1lbnRfKCl8fCEoXCJub01vZHVsZVwiaW4gZ29vZy5nbG9iYWwuZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKSl9LGdvb2cuaW5oZXJpdHMoZ29vZy5UcmFuc2Zvcm1lZERlcGVuZGVuY3ksZ29vZy5EZXBlbmRlbmN5KSxnb29nLlRyYW5zZm9ybWVkRGVwZW5kZW5jeS5wcm90b3R5cGUubG9hZD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7ci5jb250ZW50c189Z29vZy5sb2FkRmlsZVN5bmNfKHIucGF0aCksci5jb250ZW50c18mJihyLmNvbnRlbnRzXz1yLnRyYW5zZm9ybShyLmNvbnRlbnRzXyksci5jb250ZW50c18mJihyLmNvbnRlbnRzXys9XCJcXG4vLyMgc291cmNlVVJMPVwiK3IucGF0aCkpfWZ1bmN0aW9uIG8oKXtpZihyLmxhenlGZXRjaF8mJnQoKSxyLmNvbnRlbnRzXyl7biYmZS5zZXRNb2R1bGVTdGF0ZShnb29nLk1vZHVsZVR5cGUuRVM2KTt0cnl7dmFyIG89ci5jb250ZW50c187aWYoci5jb250ZW50c189bnVsbCxnb29nLmdsb2JhbEV2YWwobyksbil2YXIgcz1nb29nLm1vZHVsZUxvYWRlclN0YXRlXy5tb2R1bGVOYW1lfWZpbmFsbHl7biYmZS5jbGVhck1vZHVsZVN0YXRlKCl9biYmZ29vZy5nbG9iYWwuJGpzY29tcC5yZXF1aXJlLmVuc3VyZShbci5nZXRQYXRoTmFtZSgpXSwoZnVuY3Rpb24oKXtlLnJlZ2lzdGVyRXM2TW9kdWxlRXhwb3J0cyhyLnBhdGgsZ29vZy5nbG9iYWwuJGpzY29tcC5yZXF1aXJlKHIuZ2V0UGF0aE5hbWUoKSkscyl9KSksZS5sb2FkZWQoKX19dmFyIHI9dGhpcztpZihnb29nLmdsb2JhbC5DTE9TVVJFX0lNUE9SVF9TQ1JJUFQpdCgpLHRoaXMuY29udGVudHNfJiZnb29nLmdsb2JhbC5DTE9TVVJFX0lNUE9SVF9TQ1JJUFQoXCJcIix0aGlzLmNvbnRlbnRzXyk/KHRoaXMuY29udGVudHNfPW51bGwsZS5sb2FkZWQoKSk6ZS5wYXVzZSgpO2Vsc2V7dmFyIG49dGhpcy5sb2FkRmxhZ3MubW9kdWxlPT1nb29nLk1vZHVsZVR5cGUuRVM2O3RoaXMubGF6eUZldGNoX3x8dCgpO3ZhciBzPTE8ZS5wZW5kaW5nKCkubGVuZ3RoLGk9cyYmZ29vZy5EZWJ1Z0xvYWRlcl8uSVNfT0xEX0lFXztpZihzPWdvb2cuRGVwZW5kZW5jeS5kZWZlcl8mJihzfHxnb29nLmlzRG9jdW1lbnRMb2FkaW5nXygpKSxpfHxzKWUuZGVmZXIoKGZ1bmN0aW9uKCl7bygpfSkpO2Vsc2V7dmFyIGE9Z29vZy5nbG9iYWwuZG9jdW1lbnQ7aWYoaT1nb29nLmluSHRtbERvY3VtZW50XygpJiZcIkFjdGl2ZVhPYmplY3RcImluIGdvb2cuZ2xvYmFsLG4mJmdvb2cuaW5IdG1sRG9jdW1lbnRfKCkmJmdvb2cuaXNEb2N1bWVudExvYWRpbmdfKCkmJiFpKXtnb29nLkRlcGVuZGVuY3kuZGVmZXJfPSEwLGUucGF1c2UoKTt2YXIgZz1hLm9ucmVhZHlzdGF0ZWNoYW5nZTthLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe1wiaW50ZXJhY3RpdmVcIj09YS5yZWFkeVN0YXRlJiYoYS5vbnJlYWR5c3RhdGVjaGFuZ2U9ZyxvKCksZS5yZXN1bWUoKSksZ29vZy5pc0Z1bmN0aW9uKGcpJiZnLmFwcGx5KHZvaWQgMCxhcmd1bWVudHMpfX1lbHNlIWdvb2cuRGVidWdMb2FkZXJfLklTX09MRF9JRV8mJmdvb2cuaW5IdG1sRG9jdW1lbnRfKCkmJmdvb2cuaXNEb2N1bWVudExvYWRpbmdfKCk/ZnVuY3Rpb24oKXt2YXIgZT1nb29nLmdsb2JhbC5kb2N1bWVudCx0PWdvb2cuRGVwZW5kZW5jeS5yZWdpc3RlckNhbGxiYWNrXygoZnVuY3Rpb24oKXtnb29nLkRlcGVuZGVuY3kudW5yZWdpc3RlckNhbGxiYWNrXyh0KSxvKCl9KSkscj0nPHNjcmlwdCB0eXBlPVwidGV4dC9qYXZhc2NyaXB0XCI+Jytnb29nLnByb3RlY3RTY3JpcHRUYWdfKCdnb29nLkRlcGVuZGVuY3kuY2FsbGJhY2tfKFwiJyt0KydcIik7JykrXCI8XFwvc2NyaXB0PlwiO2Uud3JpdGUoZ29vZy5UUlVTVEVEX1RZUEVTX1BPTElDWV8/Z29vZy5UUlVTVEVEX1RZUEVTX1BPTElDWV8uY3JlYXRlSFRNTChyKTpyKX0oKTpvKCl9fX0sZ29vZy5UcmFuc2Zvcm1lZERlcGVuZGVuY3kucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihlKXt9LGdvb2cuVHJhbnNwaWxlZERlcGVuZGVuY3k9ZnVuY3Rpb24oZSx0LG8scixuLHMpe2dvb2cuVHJhbnNmb3JtZWREZXBlbmRlbmN5LmNhbGwodGhpcyxlLHQsbyxyLG4pLHRoaXMudHJhbnNwaWxlcj1zfSxnb29nLmluaGVyaXRzKGdvb2cuVHJhbnNwaWxlZERlcGVuZGVuY3ksZ29vZy5UcmFuc2Zvcm1lZERlcGVuZGVuY3kpLGdvb2cuVHJhbnNwaWxlZERlcGVuZGVuY3kucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy50cmFuc3BpbGVyLnRyYW5zcGlsZShlLHRoaXMuZ2V0UGF0aE5hbWUoKSl9LGdvb2cuUHJlVHJhbnNwaWxlZEVzNk1vZHVsZURlcGVuZGVuY3k9ZnVuY3Rpb24oZSx0LG8scixuKXtnb29nLlRyYW5zZm9ybWVkRGVwZW5kZW5jeS5jYWxsKHRoaXMsZSx0LG8scixuKX0sZ29vZy5pbmhlcml0cyhnb29nLlByZVRyYW5zcGlsZWRFczZNb2R1bGVEZXBlbmRlbmN5LGdvb2cuVHJhbnNmb3JtZWREZXBlbmRlbmN5KSxnb29nLlByZVRyYW5zcGlsZWRFczZNb2R1bGVEZXBlbmRlbmN5LnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LGdvb2cuR29vZ01vZHVsZURlcGVuZGVuY3k9ZnVuY3Rpb24oZSx0LG8scixuLHMsaSl7Z29vZy5UcmFuc2Zvcm1lZERlcGVuZGVuY3kuY2FsbCh0aGlzLGUsdCxvLHIsbiksdGhpcy5uZWVkc1RyYW5zcGlsZV89cyx0aGlzLnRyYW5zcGlsZXJfPWl9LGdvb2cuaW5oZXJpdHMoZ29vZy5Hb29nTW9kdWxlRGVwZW5kZW5jeSxnb29nLlRyYW5zZm9ybWVkRGVwZW5kZW5jeSksZ29vZy5Hb29nTW9kdWxlRGVwZW5kZW5jeS5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm5lZWRzVHJhbnNwaWxlXyYmKGU9dGhpcy50cmFuc3BpbGVyXy50cmFuc3BpbGUoZSx0aGlzLmdldFBhdGhOYW1lKCkpKSxnb29nLkxPQURfTU9EVUxFX1VTSU5HX0VWQUwmJmdvb2cuaXNEZWYoZ29vZy5nbG9iYWwuSlNPTik/XCJnb29nLmxvYWRNb2R1bGUoXCIrZ29vZy5nbG9iYWwuSlNPTi5zdHJpbmdpZnkoZStcIlxcbi8vIyBzb3VyY2VVUkw9XCIrdGhpcy5wYXRoK1wiXFxuXCIpK1wiKTtcIjonZ29vZy5sb2FkTW9kdWxlKGZ1bmN0aW9uKGV4cG9ydHMpIHtcInVzZSBzdHJpY3RcIjsnK2UrXCJcXG47cmV0dXJuIGV4cG9ydHN9KTtcXG4vLyMgc291cmNlVVJMPVwiK3RoaXMucGF0aCtcIlxcblwifSxnb29nLkRlYnVnTG9hZGVyXy5JU19PTERfSUVfPSEoZ29vZy5nbG9iYWwuYXRvYnx8IWdvb2cuZ2xvYmFsLmRvY3VtZW50fHwhZ29vZy5nbG9iYWwuZG9jdW1lbnQuYWxsKSxnb29nLkRlYnVnTG9hZGVyXy5wcm90b3R5cGUuYWRkRGVwZW5kZW5jeT1mdW5jdGlvbihlLHQsbyxyKXt0PXR8fFtdLGU9ZS5yZXBsYWNlKC9cXFxcL2csXCIvXCIpO3ZhciBuPWdvb2cubm9ybWFsaXplUGF0aF8oZ29vZy5iYXNlUGF0aCtlKTtmb3IociYmXCJib29sZWFuXCIhPXR5cGVvZiByfHwocj1yP3ttb2R1bGU6Z29vZy5Nb2R1bGVUeXBlLkdPT0d9Ont9KSxvPXRoaXMuZmFjdG9yeV8uY3JlYXRlRGVwZW5kZW5jeShuLGUsdCxvLHIsZ29vZy50cmFuc3BpbGVyXy5uZWVkc1RyYW5zcGlsZShyLmxhbmd8fFwiZXMzXCIsci5tb2R1bGUpKSx0aGlzLmRlcGVuZGVuY2llc19bbl09byxvPTA7bzx0Lmxlbmd0aDtvKyspdGhpcy5pZFRvUGF0aF9bdFtvXV09bjt0aGlzLmlkVG9QYXRoX1tlXT1ufSxnb29nLkRlcGVuZGVuY3lGYWN0b3J5PWZ1bmN0aW9uKGUpe3RoaXMudHJhbnNwaWxlcj1lfSxnb29nLkRlcGVuZGVuY3lGYWN0b3J5LnByb3RvdHlwZS5jcmVhdGVEZXBlbmRlbmN5PWZ1bmN0aW9uKGUsdCxvLHIsbixzKXtyZXR1cm4gbi5tb2R1bGU9PWdvb2cuTW9kdWxlVHlwZS5HT09HP25ldyBnb29nLkdvb2dNb2R1bGVEZXBlbmRlbmN5KGUsdCxvLHIsbixzLHRoaXMudHJhbnNwaWxlcik6cz9uZXcgZ29vZy5UcmFuc3BpbGVkRGVwZW5kZW5jeShlLHQsbyxyLG4sdGhpcy50cmFuc3BpbGVyKTpuLm1vZHVsZT09Z29vZy5Nb2R1bGVUeXBlLkVTNj9cIm5ldmVyXCI9PWdvb2cuVFJBTlNQSUxFJiZnb29nLkFTU1VNRV9FU19NT0RVTEVTX1RSQU5TUElMRUQ/bmV3IGdvb2cuUHJlVHJhbnNwaWxlZEVzNk1vZHVsZURlcGVuZGVuY3koZSx0LG8scixuKTpuZXcgZ29vZy5FczZNb2R1bGVEZXBlbmRlbmN5KGUsdCxvLHIsbik6bmV3IGdvb2cuRGVwZW5kZW5jeShlLHQsbyxyLG4pfSxnb29nLmRlYnVnTG9hZGVyXz1uZXcgZ29vZy5EZWJ1Z0xvYWRlcl8sZ29vZy5sb2FkQ2xvc3VyZURlcHM9ZnVuY3Rpb24oKXtnb29nLmRlYnVnTG9hZGVyXy5sb2FkQ2xvc3VyZURlcHMoKX0sZ29vZy5zZXREZXBlbmRlbmN5RmFjdG9yeT1mdW5jdGlvbihlKXtnb29nLmRlYnVnTG9hZGVyXy5zZXREZXBlbmRlbmN5RmFjdG9yeShlKX0sZ29vZy5nbG9iYWwuQ0xPU1VSRV9OT19ERVBTfHxnb29nLmRlYnVnTG9hZGVyXy5sb2FkQ2xvc3VyZURlcHMoKSxnb29nLmJvb3RzdHJhcD1mdW5jdGlvbihlLHQpe2dvb2cuZGVidWdMb2FkZXJfLmJvb3RzdHJhcChlLHQpfSksZ29vZy5UUlVTVEVEX1RZUEVTX1BPTElDWV9OQU1FPVwiXCIsZ29vZy5pZGVudGl0eV89ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LGdvb2cuY3JlYXRlVHJ1c3RlZFR5cGVzUG9saWN5PWZ1bmN0aW9uKGUpe3ZhciB0PW51bGw7aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIFRydXN0ZWRUeXBlc3x8IVRydXN0ZWRUeXBlcy5jcmVhdGVQb2xpY3kpcmV0dXJuIHQ7dHJ5e3Q9VHJ1c3RlZFR5cGVzLmNyZWF0ZVBvbGljeShlLHtjcmVhdGVIVE1MOmdvb2cuaWRlbnRpdHlfLGNyZWF0ZVNjcmlwdDpnb29nLmlkZW50aXR5XyxjcmVhdGVTY3JpcHRVUkw6Z29vZy5pZGVudGl0eV8sY3JlYXRlVVJMOmdvb2cuaWRlbnRpdHlffSl9Y2F0Y2goZSl7Z29vZy5sb2dUb0NvbnNvbGVfKGUubWVzc2FnZSl9cmV0dXJuIHR9LGdvb2cuVFJVU1RFRF9UWVBFU19QT0xJQ1lfPWdvb2cuVFJVU1RFRF9UWVBFU19QT0xJQ1lfTkFNRT9nb29nLmNyZWF0ZVRydXN0ZWRUeXBlc1BvbGljeShnb29nLlRSVVNURURfVFlQRVNfUE9MSUNZX05BTUUrXCIjYmFzZVwiKTpudWxsLGdvb2cub2JqZWN0PXt9LGdvb2cub2JqZWN0LmlzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT10PzAhPT1lfHwxL2U9PTEvdDplIT1lJiZ0IT10fSxnb29nLm9iamVjdC5mb3JFYWNoPWZ1bmN0aW9uKGUsdCxvKXtmb3IodmFyIHIgaW4gZSl0LmNhbGwobyxlW3JdLHIsZSl9LGdvb2cub2JqZWN0LmZpbHRlcj1mdW5jdGlvbihlLHQsbyl7dmFyIHIsbj17fTtmb3IociBpbiBlKXQuY2FsbChvLGVbcl0scixlKSYmKG5bcl09ZVtyXSk7cmV0dXJuIG59LGdvb2cub2JqZWN0Lm1hcD1mdW5jdGlvbihlLHQsbyl7dmFyIHIsbj17fTtmb3IociBpbiBlKW5bcl09dC5jYWxsKG8sZVtyXSxyLGUpO3JldHVybiBufSxnb29nLm9iamVjdC5zb21lPWZ1bmN0aW9uKGUsdCxvKXtmb3IodmFyIHIgaW4gZSlpZih0LmNhbGwobyxlW3JdLHIsZSkpcmV0dXJuITA7cmV0dXJuITF9LGdvb2cub2JqZWN0LmV2ZXJ5PWZ1bmN0aW9uKGUsdCxvKXtmb3IodmFyIHIgaW4gZSlpZighdC5jYWxsKG8sZVtyXSxyLGUpKXJldHVybiExO3JldHVybiEwfSxnb29nLm9iamVjdC5nZXRDb3VudD1mdW5jdGlvbihlKXt2YXIgdCxvPTA7Zm9yKHQgaW4gZSlvKys7cmV0dXJuIG99LGdvb2cub2JqZWN0LmdldEFueUtleT1mdW5jdGlvbihlKXtmb3IodmFyIHQgaW4gZSlyZXR1cm4gdH0sZ29vZy5vYmplY3QuZ2V0QW55VmFsdWU9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0IGluIGUpcmV0dXJuIGVbdF19LGdvb2cub2JqZWN0LmNvbnRhaW5zPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGdvb2cub2JqZWN0LmNvbnRhaW5zVmFsdWUoZSx0KX0sZ29vZy5vYmplY3QuZ2V0VmFsdWVzPWZ1bmN0aW9uKGUpe3ZhciB0LG89W10scj0wO2Zvcih0IGluIGUpb1tyKytdPWVbdF07cmV0dXJuIG99LGdvb2cub2JqZWN0LmdldEtleXM9ZnVuY3Rpb24oZSl7dmFyIHQsbz1bXSxyPTA7Zm9yKHQgaW4gZSlvW3IrK109dDtyZXR1cm4gb30sZ29vZy5vYmplY3QuZ2V0VmFsdWVCeUtleXM9ZnVuY3Rpb24oZSx0KXt2YXIgbz1nb29nLmlzQXJyYXlMaWtlKHQpLHI9bz90OmFyZ3VtZW50cztmb3Iobz1vPzA6MTtvPHIubGVuZ3RoO28rKyl7aWYobnVsbD09ZSlyZXR1cm47ZT1lW3Jbb11dfXJldHVybiBlfSxnb29nLm9iamVjdC5jb250YWluc0tleT1mdW5jdGlvbihlLHQpe3JldHVybiBudWxsIT09ZSYmdCBpbiBlfSxnb29nLm9iamVjdC5jb250YWluc1ZhbHVlPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBvIGluIGUpaWYoZVtvXT09dClyZXR1cm4hMDtyZXR1cm4hMX0sZ29vZy5vYmplY3QuZmluZEtleT1mdW5jdGlvbihlLHQsbyl7Zm9yKHZhciByIGluIGUpaWYodC5jYWxsKG8sZVtyXSxyLGUpKXJldHVybiByfSxnb29nLm9iamVjdC5maW5kVmFsdWU9ZnVuY3Rpb24oZSx0LG8pe3JldHVybih0PWdvb2cub2JqZWN0LmZpbmRLZXkoZSx0LG8pKSYmZVt0XX0sZ29vZy5vYmplY3QuaXNFbXB0eT1mdW5jdGlvbihlKXtmb3IodmFyIHQgaW4gZSlyZXR1cm4hMTtyZXR1cm4hMH0sZ29vZy5vYmplY3QuY2xlYXI9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0IGluIGUpZGVsZXRlIGVbdF19LGdvb2cub2JqZWN0LnJlbW92ZT1mdW5jdGlvbihlLHQpe3ZhciBvO3JldHVybihvPXQgaW4gZSkmJmRlbGV0ZSBlW3RdLG99LGdvb2cub2JqZWN0LmFkZD1mdW5jdGlvbihlLHQsbyl7aWYobnVsbCE9PWUmJnQgaW4gZSl0aHJvdyBFcnJvcignVGhlIG9iamVjdCBhbHJlYWR5IGNvbnRhaW5zIHRoZSBrZXkgXCInK3QrJ1wiJyk7Z29vZy5vYmplY3Quc2V0KGUsdCxvKX0sZ29vZy5vYmplY3QuZ2V0PWZ1bmN0aW9uKGUsdCxvKXtyZXR1cm4gbnVsbCE9PWUmJnQgaW4gZT9lW3RdOm99LGdvb2cub2JqZWN0LnNldD1mdW5jdGlvbihlLHQsbyl7ZVt0XT1vfSxnb29nLm9iamVjdC5zZXRJZlVuZGVmaW5lZD1mdW5jdGlvbihlLHQsbyl7cmV0dXJuIHQgaW4gZT9lW3RdOmVbdF09b30sZ29vZy5vYmplY3Quc2V0V2l0aFJldHVyblZhbHVlSWZOb3RTZXQ9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiB0IGluIGU/ZVt0XToobz1vKCksZVt0XT1vKX0sZ29vZy5vYmplY3QuZXF1YWxzPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBvIGluIGUpaWYoIShvIGluIHQpfHxlW29dIT09dFtvXSlyZXR1cm4hMTtmb3IodmFyIHIgaW4gdClpZighKHIgaW4gZSkpcmV0dXJuITE7cmV0dXJuITB9LGdvb2cub2JqZWN0LmNsb25lPWZ1bmN0aW9uKGUpe3ZhciB0LG89e307Zm9yKHQgaW4gZSlvW3RdPWVbdF07cmV0dXJuIG99LGdvb2cub2JqZWN0LnVuc2FmZUNsb25lPWZ1bmN0aW9uKGUpe3ZhciB0PWdvb2cudHlwZU9mKGUpO2lmKFwib2JqZWN0XCI9PXR8fFwiYXJyYXlcIj09dCl7aWYoZ29vZy5pc0Z1bmN0aW9uKGUuY2xvbmUpKXJldHVybiBlLmNsb25lKCk7Zm9yKHZhciBvIGluIHQ9XCJhcnJheVwiPT10P1tdOnt9LGUpdFtvXT1nb29nLm9iamVjdC51bnNhZmVDbG9uZShlW29dKTtyZXR1cm4gdH1yZXR1cm4gZX0sZ29vZy5vYmplY3QudHJhbnNwb3NlPWZ1bmN0aW9uKGUpe3ZhciB0LG89e307Zm9yKHQgaW4gZSlvW2VbdF1dPXQ7cmV0dXJuIG99LGdvb2cub2JqZWN0LlBST1RPVFlQRV9GSUVMRFNfPVwiY29uc3RydWN0b3IgaGFzT3duUHJvcGVydHkgaXNQcm90b3R5cGVPZiBwcm9wZXJ0eUlzRW51bWVyYWJsZSB0b0xvY2FsZVN0cmluZyB0b1N0cmluZyB2YWx1ZU9mXCIuc3BsaXQoXCIgXCIpLGdvb2cub2JqZWN0LmV4dGVuZD1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbyxyLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXtmb3IobyBpbiByPWFyZ3VtZW50c1tuXSllW29dPXJbb107Zm9yKHZhciBzPTA7czxnb29nLm9iamVjdC5QUk9UT1RZUEVfRklFTERTXy5sZW5ndGg7cysrKW89Z29vZy5vYmplY3QuUFJPVE9UWVBFX0ZJRUxEU19bc10sT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsbykmJihlW29dPXJbb10pfX0sZ29vZy5vYmplY3QuY3JlYXRlPWZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg7aWYoMT09dCYmZ29vZy5pc0FycmF5KGFyZ3VtZW50c1swXSkpcmV0dXJuIGdvb2cub2JqZWN0LmNyZWF0ZS5hcHBseShudWxsLGFyZ3VtZW50c1swXSk7aWYodCUyKXRocm93IEVycm9yKFwiVW5ldmVuIG51bWJlciBvZiBhcmd1bWVudHNcIik7Zm9yKHZhciBvPXt9LHI9MDtyPHQ7cis9MilvW2FyZ3VtZW50c1tyXV09YXJndW1lbnRzW3IrMV07cmV0dXJuIG99LGdvb2cub2JqZWN0LmNyZWF0ZVNldD1mdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoO2lmKDE9PXQmJmdvb2cuaXNBcnJheShhcmd1bWVudHNbMF0pKXJldHVybiBnb29nLm9iamVjdC5jcmVhdGVTZXQuYXBwbHkobnVsbCxhcmd1bWVudHNbMF0pO2Zvcih2YXIgbz17fSxyPTA7cjx0O3IrKylvW2FyZ3VtZW50c1tyXV09ITA7cmV0dXJuIG99LGdvb2cub2JqZWN0LmNyZWF0ZUltbXV0YWJsZVZpZXc9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gT2JqZWN0LmlzRnJvemVuJiYhT2JqZWN0LmlzRnJvemVuKGUpJiYodD1PYmplY3QuY3JlYXRlKGUpLE9iamVjdC5mcmVlemUodCkpLHR9LGdvb2cub2JqZWN0LmlzSW1tdXRhYmxlVmlldz1mdW5jdGlvbihlKXtyZXR1cm4hIU9iamVjdC5pc0Zyb3plbiYmT2JqZWN0LmlzRnJvemVuKGUpfSxnb29nLm9iamVjdC5nZXRBbGxQcm9wZXJ0eU5hbWVzPWZ1bmN0aW9uKGUsdCxvKXtpZighZSlyZXR1cm5bXTtpZighT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXN8fCFPYmplY3QuZ2V0UHJvdG90eXBlT2YpcmV0dXJuIGdvb2cub2JqZWN0LmdldEtleXMoZSk7Zm9yKHZhciByPXt9O2UmJihlIT09T2JqZWN0LnByb3RvdHlwZXx8dCkmJihlIT09RnVuY3Rpb24ucHJvdG90eXBlfHxvKTspe2Zvcih2YXIgbj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKSxzPTA7czxuLmxlbmd0aDtzKyspcltuW3NdXT0hMDtlPU9iamVjdC5nZXRQcm90b3R5cGVPZihlKX1yZXR1cm4gZ29vZy5vYmplY3QuZ2V0S2V5cyhyKX0sZ29vZy5vYmplY3QuZ2V0U3VwZXJDbGFzcz1mdW5jdGlvbihlKXtyZXR1cm4oZT1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZS5wcm90b3R5cGUpKSYmZS5jb25zdHJ1Y3Rvcn0sZ29vZy5kZWJ1Zz17fSxnb29nLmRlYnVnLkVycm9yPWZ1bmN0aW9uKGUpe2lmKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKUVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsZ29vZy5kZWJ1Zy5FcnJvcik7ZWxzZXt2YXIgdD1FcnJvcigpLnN0YWNrO3QmJih0aGlzLnN0YWNrPXQpfWUmJih0aGlzLm1lc3NhZ2U9U3RyaW5nKGUpKSx0aGlzLnJlcG9ydEVycm9yVG9TZXJ2ZXI9ITB9LGdvb2cuaW5oZXJpdHMoZ29vZy5kZWJ1Zy5FcnJvcixFcnJvciksZ29vZy5kZWJ1Zy5FcnJvci5wcm90b3R5cGUubmFtZT1cIkN1c3RvbUVycm9yXCIsZ29vZy5kb209e30sZ29vZy5kb20uTm9kZVR5cGU9e0VMRU1FTlQ6MSxBVFRSSUJVVEU6MixURVhUOjMsQ0RBVEFfU0VDVElPTjo0LEVOVElUWV9SRUZFUkVOQ0U6NSxFTlRJVFk6NixQUk9DRVNTSU5HX0lOU1RSVUNUSU9OOjcsQ09NTUVOVDo4LERPQ1VNRU5UOjksRE9DVU1FTlRfVFlQRToxMCxET0NVTUVOVF9GUkFHTUVOVDoxMSxOT1RBVElPTjoxMn0sZ29vZy5hc3NlcnRzPXt9LGdvb2cuYXNzZXJ0cy5FTkFCTEVfQVNTRVJUUz1nb29nLkRFQlVHLGdvb2cuYXNzZXJ0cy5Bc3NlcnRpb25FcnJvcj1mdW5jdGlvbihlLHQpe2dvb2cuZGVidWcuRXJyb3IuY2FsbCh0aGlzLGdvb2cuYXNzZXJ0cy5zdWJzXyhlLHQpKSx0aGlzLm1lc3NhZ2VQYXR0ZXJuPWV9LGdvb2cuaW5oZXJpdHMoZ29vZy5hc3NlcnRzLkFzc2VydGlvbkVycm9yLGdvb2cuZGVidWcuRXJyb3IpLGdvb2cuYXNzZXJ0cy5Bc3NlcnRpb25FcnJvci5wcm90b3R5cGUubmFtZT1cIkFzc2VydGlvbkVycm9yXCIsZ29vZy5hc3NlcnRzLkRFRkFVTFRfRVJST1JfSEFORExFUj1mdW5jdGlvbihlKXt0aHJvdyBlfSxnb29nLmFzc2VydHMuZXJyb3JIYW5kbGVyXz1nb29nLmFzc2VydHMuREVGQVVMVF9FUlJPUl9IQU5ETEVSLGdvb2cuYXNzZXJ0cy5zdWJzXz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbz1cIlwiLHI9KGU9ZS5zcGxpdChcIiVzXCIpKS5sZW5ndGgtMSxuPTA7bjxyO24rKylvKz1lW25dKyhuPHQubGVuZ3RoP3Rbbl06XCIlc1wiKTtyZXR1cm4gbytlW3JdfSxnb29nLmFzc2VydHMuZG9Bc3NlcnRGYWlsdXJlXz1mdW5jdGlvbihlLHQsbyxyKXt2YXIgbj1cIkFzc2VydGlvbiBmYWlsZWRcIjtpZihvKXtuKz1cIjogXCIrbzt2YXIgcz1yfWVsc2UgZSYmKG4rPVwiOiBcIitlLHM9dCk7ZT1uZXcgZ29vZy5hc3NlcnRzLkFzc2VydGlvbkVycm9yKFwiXCIrbixzfHxbXSksZ29vZy5hc3NlcnRzLmVycm9ySGFuZGxlcl8oZSl9LGdvb2cuYXNzZXJ0cy5zZXRFcnJvckhhbmRsZXI9ZnVuY3Rpb24oZSl7Z29vZy5hc3NlcnRzLkVOQUJMRV9BU1NFUlRTJiYoZ29vZy5hc3NlcnRzLmVycm9ySGFuZGxlcl89ZSl9LGdvb2cuYXNzZXJ0cy5hc3NlcnQ9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiBnb29nLmFzc2VydHMuRU5BQkxFX0FTU0VSVFMmJiFlJiZnb29nLmFzc2VydHMuZG9Bc3NlcnRGYWlsdXJlXyhcIlwiLG51bGwsdCxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMikpLGV9LGdvb2cuYXNzZXJ0cy5hc3NlcnRFeGlzdHM9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiBnb29nLmFzc2VydHMuRU5BQkxFX0FTU0VSVFMmJm51bGw9PWUmJmdvb2cuYXNzZXJ0cy5kb0Fzc2VydEZhaWx1cmVfKFwiRXhwZWN0ZWQgdG8gZXhpc3Q6ICVzLlwiLFtlXSx0LEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywyKSksZX0sZ29vZy5hc3NlcnRzLmZhaWw9ZnVuY3Rpb24oZSx0KXtnb29nLmFzc2VydHMuRU5BQkxFX0FTU0VSVFMmJmdvb2cuYXNzZXJ0cy5lcnJvckhhbmRsZXJfKG5ldyBnb29nLmFzc2VydHMuQXNzZXJ0aW9uRXJyb3IoXCJGYWlsdXJlXCIrKGU/XCI6IFwiK2U6XCJcIiksQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpKSl9LGdvb2cuYXNzZXJ0cy5hc3NlcnROdW1iZXI9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiBnb29nLmFzc2VydHMuRU5BQkxFX0FTU0VSVFMmJiFnb29nLmlzTnVtYmVyKGUpJiZnb29nLmFzc2VydHMuZG9Bc3NlcnRGYWlsdXJlXyhcIkV4cGVjdGVkIG51bWJlciBidXQgZ290ICVzOiAlcy5cIixbZ29vZy50eXBlT2YoZSksZV0sdCxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMikpLGV9LGdvb2cuYXNzZXJ0cy5hc3NlcnRTdHJpbmc9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiBnb29nLmFzc2VydHMuRU5BQkxFX0FTU0VSVFMmJiFnb29nLmlzU3RyaW5nKGUpJiZnb29nLmFzc2VydHMuZG9Bc3NlcnRGYWlsdXJlXyhcIkV4cGVjdGVkIHN0cmluZyBidXQgZ290ICVzOiAlcy5cIixbZ29vZy50eXBlT2YoZSksZV0sdCxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMikpLGV9LGdvb2cuYXNzZXJ0cy5hc3NlcnRGdW5jdGlvbj1mdW5jdGlvbihlLHQsbyl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5FTkFCTEVfQVNTRVJUUyYmIWdvb2cuaXNGdW5jdGlvbihlKSYmZ29vZy5hc3NlcnRzLmRvQXNzZXJ0RmFpbHVyZV8oXCJFeHBlY3RlZCBmdW5jdGlvbiBidXQgZ290ICVzOiAlcy5cIixbZ29vZy50eXBlT2YoZSksZV0sdCxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMikpLGV9LGdvb2cuYXNzZXJ0cy5hc3NlcnRPYmplY3Q9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiBnb29nLmFzc2VydHMuRU5BQkxFX0FTU0VSVFMmJiFnb29nLmlzT2JqZWN0KGUpJiZnb29nLmFzc2VydHMuZG9Bc3NlcnRGYWlsdXJlXyhcIkV4cGVjdGVkIG9iamVjdCBidXQgZ290ICVzOiAlcy5cIixbZ29vZy50eXBlT2YoZSksZV0sdCxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMikpLGV9LGdvb2cuYXNzZXJ0cy5hc3NlcnRBcnJheT1mdW5jdGlvbihlLHQsbyl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5FTkFCTEVfQVNTRVJUUyYmIWdvb2cuaXNBcnJheShlKSYmZ29vZy5hc3NlcnRzLmRvQXNzZXJ0RmFpbHVyZV8oXCJFeHBlY3RlZCBhcnJheSBidXQgZ290ICVzOiAlcy5cIixbZ29vZy50eXBlT2YoZSksZV0sdCxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMikpLGV9LGdvb2cuYXNzZXJ0cy5hc3NlcnRCb29sZWFuPWZ1bmN0aW9uKGUsdCxvKXtyZXR1cm4gZ29vZy5hc3NlcnRzLkVOQUJMRV9BU1NFUlRTJiYhZ29vZy5pc0Jvb2xlYW4oZSkmJmdvb2cuYXNzZXJ0cy5kb0Fzc2VydEZhaWx1cmVfKFwiRXhwZWN0ZWQgYm9vbGVhbiBidXQgZ290ICVzOiAlcy5cIixbZ29vZy50eXBlT2YoZSksZV0sdCxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMikpLGV9LGdvb2cuYXNzZXJ0cy5hc3NlcnRFbGVtZW50PWZ1bmN0aW9uKGUsdCxvKXtyZXR1cm4hZ29vZy5hc3NlcnRzLkVOQUJMRV9BU1NFUlRTfHxnb29nLmlzT2JqZWN0KGUpJiZlLm5vZGVUeXBlPT1nb29nLmRvbS5Ob2RlVHlwZS5FTEVNRU5UfHxnb29nLmFzc2VydHMuZG9Bc3NlcnRGYWlsdXJlXyhcIkV4cGVjdGVkIEVsZW1lbnQgYnV0IGdvdCAlczogJXMuXCIsW2dvb2cudHlwZU9mKGUpLGVdLHQsQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDIpKSxlfSxnb29nLmFzc2VydHMuYXNzZXJ0SW5zdGFuY2VvZj1mdW5jdGlvbihlLHQsbyxyKXtyZXR1cm4hZ29vZy5hc3NlcnRzLkVOQUJMRV9BU1NFUlRTfHxlIGluc3RhbmNlb2YgdHx8Z29vZy5hc3NlcnRzLmRvQXNzZXJ0RmFpbHVyZV8oXCJFeHBlY3RlZCBpbnN0YW5jZW9mICVzIGJ1dCBnb3QgJXMuXCIsW2dvb2cuYXNzZXJ0cy5nZXRUeXBlXyh0KSxnb29nLmFzc2VydHMuZ2V0VHlwZV8oZSldLG8sQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDMpKSxlfSxnb29nLmFzc2VydHMuYXNzZXJ0RmluaXRlPWZ1bmN0aW9uKGUsdCxvKXtyZXR1cm4hZ29vZy5hc3NlcnRzLkVOQUJMRV9BU1NFUlRTfHxcIm51bWJlclwiPT10eXBlb2YgZSYmaXNGaW5pdGUoZSl8fGdvb2cuYXNzZXJ0cy5kb0Fzc2VydEZhaWx1cmVfKFwiRXhwZWN0ZWQgJXMgdG8gYmUgYSBmaW5pdGUgbnVtYmVyIGJ1dCBpdCBpcyBub3QuXCIsW2VdLHQsQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDIpKSxlfSxnb29nLmFzc2VydHMuYXNzZXJ0T2JqZWN0UHJvdG90eXBlSXNJbnRhY3Q9ZnVuY3Rpb24oKXtmb3IodmFyIGUgaW4gT2JqZWN0LnByb3RvdHlwZSlnb29nLmFzc2VydHMuZmFpbChlK1wiIHNob3VsZCBub3QgYmUgZW51bWVyYWJsZSBpbiBPYmplY3QucHJvdG90eXBlLlwiKX0sZ29vZy5hc3NlcnRzLmdldFR5cGVfPWZ1bmN0aW9uKGUpe3JldHVybiBlIGluc3RhbmNlb2YgRnVuY3Rpb24/ZS5kaXNwbGF5TmFtZXx8ZS5uYW1lfHxcInVua25vd24gdHlwZSBuYW1lXCI6ZSBpbnN0YW5jZW9mIE9iamVjdD9lLmNvbnN0cnVjdG9yLmRpc3BsYXlOYW1lfHxlLmNvbnN0cnVjdG9yLm5hbWV8fE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKTpudWxsPT09ZT9cIm51bGxcIjp0eXBlb2YgZX07dmFyIGpzcGI9e0JpbmFyeUNvbnN0YW50czp7fSxDb25zdEJpbmFyeU1lc3NhZ2U6ZnVuY3Rpb24oKXt9LEJpbmFyeU1lc3NhZ2U6ZnVuY3Rpb24oKXt9fTtqc3BiLkJpbmFyeUNvbnN0YW50cy5GaWVsZFR5cGU9e0lOVkFMSUQ6LTEsRE9VQkxFOjEsRkxPQVQ6MixJTlQ2NDozLFVJTlQ2NDo0LElOVDMyOjUsRklYRUQ2NDo2LEZJWEVEMzI6NyxCT09MOjgsU1RSSU5HOjksR1JPVVA6MTAsTUVTU0FHRToxMSxCWVRFUzoxMixVSU5UMzI6MTMsRU5VTToxNCxTRklYRUQzMjoxNSxTRklYRUQ2NDoxNixTSU5UMzI6MTcsU0lOVDY0OjE4LEZIQVNINjQ6MzAsVkhBU0g2NDozMX0sanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGU9e0lOVkFMSUQ6LTEsVkFSSU5UOjAsRklYRUQ2NDoxLERFTElNSVRFRDoyLFNUQVJUX0dST1VQOjMsRU5EX0dST1VQOjQsRklYRUQzMjo1fSxqc3BiLkJpbmFyeUNvbnN0YW50cy5GaWVsZFR5cGVUb1dpcmVUeXBlPWZ1bmN0aW9uKGUpe3ZhciB0PWpzcGIuQmluYXJ5Q29uc3RhbnRzLkZpZWxkVHlwZSxvPWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlO3N3aXRjaChlKXtjYXNlIHQuSU5UMzI6Y2FzZSB0LklOVDY0OmNhc2UgdC5VSU5UMzI6Y2FzZSB0LlVJTlQ2NDpjYXNlIHQuU0lOVDMyOmNhc2UgdC5TSU5UNjQ6Y2FzZSB0LkJPT0w6Y2FzZSB0LkVOVU06Y2FzZSB0LlZIQVNINjQ6cmV0dXJuIG8uVkFSSU5UO2Nhc2UgdC5ET1VCTEU6Y2FzZSB0LkZJWEVENjQ6Y2FzZSB0LlNGSVhFRDY0OmNhc2UgdC5GSEFTSDY0OnJldHVybiBvLkZJWEVENjQ7Y2FzZSB0LlNUUklORzpjYXNlIHQuTUVTU0FHRTpjYXNlIHQuQllURVM6cmV0dXJuIG8uREVMSU1JVEVEO2Nhc2UgdC5GTE9BVDpjYXNlIHQuRklYRUQzMjpjYXNlIHQuU0ZJWEVEMzI6cmV0dXJuIG8uRklYRUQzMjtkZWZhdWx0OnJldHVybiBvLklOVkFMSUR9fSxqc3BiLkJpbmFyeUNvbnN0YW50cy5JTlZBTElEX0ZJRUxEX05VTUJFUj0tMSxqc3BiLkJpbmFyeUNvbnN0YW50cy5GTE9BVDMyX0VQUz0xNDAxMjk4NDY0MzI0ODE3ZS02MCxqc3BiLkJpbmFyeUNvbnN0YW50cy5GTE9BVDMyX01JTj0xMTc1NDk0MzUwODIyMjg3NWUtNTQsanNwYi5CaW5hcnlDb25zdGFudHMuRkxPQVQzMl9NQVg9MzQwMjgyMzQ2NjM4NTI4ODZlMjIsanNwYi5CaW5hcnlDb25zdGFudHMuRkxPQVQ2NF9FUFM9NWUtMzI0LGpzcGIuQmluYXJ5Q29uc3RhbnRzLkZMT0FUNjRfTUlOPTIyMjUwNzM4NTg1MDcyMDE0ZS0zMjQsanNwYi5CaW5hcnlDb25zdGFudHMuRkxPQVQ2NF9NQVg9MTc5NzY5MzEzNDg2MjMxNTdlMjkyLGpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18yMD0xMDQ4NTc2LGpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18yMz04Mzg4NjA4LGpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18zMT0yMTQ3NDgzNjQ4LGpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18zMj00Mjk0OTY3Mjk2LGpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT181Mj00NTAzNTk5NjI3MzcwNDk2LGpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT182Mz0weDgwMDAwMDAwMDAwMDAwMDAsanNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzY0PTB4MTAwMDAwMDAwMDAwMDAwMDAsanNwYi5CaW5hcnlDb25zdGFudHMuWkVST19IQVNIPVwiXFwwXFwwXFwwXFwwXFwwXFwwXFwwXFwwXCIsZ29vZy5hcnJheT17fSxnb29nLk5BVElWRV9BUlJBWV9QUk9UT1RZUEVTPWdvb2cuVFJVU1RFRF9TSVRFLGdvb2cuYXJyYXkuQVNTVU1FX05BVElWRV9GVU5DVElPTlM9MjAxMjxnb29nLkZFQVRVUkVTRVRfWUVBUixnb29nLmFycmF5LnBlZWs9ZnVuY3Rpb24oZSl7cmV0dXJuIGVbZS5sZW5ndGgtMV19LGdvb2cuYXJyYXkubGFzdD1nb29nLmFycmF5LnBlZWssZ29vZy5hcnJheS5pbmRleE9mPWdvb2cuTkFUSVZFX0FSUkFZX1BST1RPVFlQRVMmJihnb29nLmFycmF5LkFTU1VNRV9OQVRJVkVfRlVOQ1RJT05TfHxBcnJheS5wcm90b3R5cGUuaW5kZXhPZik/ZnVuY3Rpb24oZSx0LG8pe3JldHVybiBnb29nLmFzc2VydHMuYXNzZXJ0KG51bGwhPWUubGVuZ3RoKSxBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGUsdCxvKX06ZnVuY3Rpb24oZSx0LG8pe2lmKG89bnVsbD09bz8wOjA+bz9NYXRoLm1heCgwLGUubGVuZ3RoK28pOm8sZ29vZy5pc1N0cmluZyhlKSlyZXR1cm4gZ29vZy5pc1N0cmluZyh0KSYmMT09dC5sZW5ndGg/ZS5pbmRleE9mKHQsbyk6LTE7Zm9yKDtvPGUubGVuZ3RoO28rKylpZihvIGluIGUmJmVbb109PT10KXJldHVybiBvO3JldHVybi0xfSxnb29nLmFycmF5Lmxhc3RJbmRleE9mPWdvb2cuTkFUSVZFX0FSUkFZX1BST1RPVFlQRVMmJihnb29nLmFycmF5LkFTU1VNRV9OQVRJVkVfRlVOQ1RJT05TfHxBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YpP2Z1bmN0aW9uKGUsdCxvKXtyZXR1cm4gZ29vZy5hc3NlcnRzLmFzc2VydChudWxsIT1lLmxlbmd0aCksQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoZSx0LG51bGw9PW8/ZS5sZW5ndGgtMTpvKX06ZnVuY3Rpb24oZSx0LG8pe2lmKDA+KG89bnVsbD09bz9lLmxlbmd0aC0xOm8pJiYobz1NYXRoLm1heCgwLGUubGVuZ3RoK28pKSxnb29nLmlzU3RyaW5nKGUpKXJldHVybiBnb29nLmlzU3RyaW5nKHQpJiYxPT10Lmxlbmd0aD9lLmxhc3RJbmRleE9mKHQsbyk6LTE7Zm9yKDswPD1vO28tLSlpZihvIGluIGUmJmVbb109PT10KXJldHVybiBvO3JldHVybi0xfSxnb29nLmFycmF5LmZvckVhY2g9Z29vZy5OQVRJVkVfQVJSQVlfUFJPVE9UWVBFUyYmKGdvb2cuYXJyYXkuQVNTVU1FX05BVElWRV9GVU5DVElPTlN8fEFycmF5LnByb3RvdHlwZS5mb3JFYWNoKT9mdW5jdGlvbihlLHQsbyl7Z29vZy5hc3NlcnRzLmFzc2VydChudWxsIT1lLmxlbmd0aCksQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChlLHQsbyl9OmZ1bmN0aW9uKGUsdCxvKXtmb3IodmFyIHI9ZS5sZW5ndGgsbj1nb29nLmlzU3RyaW5nKGUpP2Uuc3BsaXQoXCJcIik6ZSxzPTA7czxyO3MrKylzIGluIG4mJnQuY2FsbChvLG5bc10scyxlKX0sZ29vZy5hcnJheS5mb3JFYWNoUmlnaHQ9ZnVuY3Rpb24oZSx0LG8pe3ZhciByPWUubGVuZ3RoLG49Z29vZy5pc1N0cmluZyhlKT9lLnNwbGl0KFwiXCIpOmU7Zm9yKC0tcjswPD1yOy0tcilyIGluIG4mJnQuY2FsbChvLG5bcl0scixlKX0sZ29vZy5hcnJheS5maWx0ZXI9Z29vZy5OQVRJVkVfQVJSQVlfUFJPVE9UWVBFUyYmKGdvb2cuYXJyYXkuQVNTVU1FX05BVElWRV9GVU5DVElPTlN8fEFycmF5LnByb3RvdHlwZS5maWx0ZXIpP2Z1bmN0aW9uKGUsdCxvKXtyZXR1cm4gZ29vZy5hc3NlcnRzLmFzc2VydChudWxsIT1lLmxlbmd0aCksQXJyYXkucHJvdG90eXBlLmZpbHRlci5jYWxsKGUsdCxvKX06ZnVuY3Rpb24oZSx0LG8pe2Zvcih2YXIgcj1lLmxlbmd0aCxuPVtdLHM9MCxpPWdvb2cuaXNTdHJpbmcoZSk/ZS5zcGxpdChcIlwiKTplLGE9MDthPHI7YSsrKWlmKGEgaW4gaSl7dmFyIGc9aVthXTt0LmNhbGwobyxnLGEsZSkmJihuW3MrK109Zyl9cmV0dXJuIG59LGdvb2cuYXJyYXkubWFwPWdvb2cuTkFUSVZFX0FSUkFZX1BST1RPVFlQRVMmJihnb29nLmFycmF5LkFTU1VNRV9OQVRJVkVfRlVOQ1RJT05TfHxBcnJheS5wcm90b3R5cGUubWFwKT9mdW5jdGlvbihlLHQsbyl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5hc3NlcnQobnVsbCE9ZS5sZW5ndGgpLEFycmF5LnByb3RvdHlwZS5tYXAuY2FsbChlLHQsbyl9OmZ1bmN0aW9uKGUsdCxvKXtmb3IodmFyIHI9ZS5sZW5ndGgsbj1BcnJheShyKSxzPWdvb2cuaXNTdHJpbmcoZSk/ZS5zcGxpdChcIlwiKTplLGk9MDtpPHI7aSsrKWkgaW4gcyYmKG5baV09dC5jYWxsKG8sc1tpXSxpLGUpKTtyZXR1cm4gbn0sZ29vZy5hcnJheS5yZWR1Y2U9Z29vZy5OQVRJVkVfQVJSQVlfUFJPVE9UWVBFUyYmKGdvb2cuYXJyYXkuQVNTVU1FX05BVElWRV9GVU5DVElPTlN8fEFycmF5LnByb3RvdHlwZS5yZWR1Y2UpP2Z1bmN0aW9uKGUsdCxvLHIpe3JldHVybiBnb29nLmFzc2VydHMuYXNzZXJ0KG51bGwhPWUubGVuZ3RoKSxyJiYodD1nb29nLmJpbmQodCxyKSksQXJyYXkucHJvdG90eXBlLnJlZHVjZS5jYWxsKGUsdCxvKX06ZnVuY3Rpb24oZSx0LG8scil7dmFyIG49bztyZXR1cm4gZ29vZy5hcnJheS5mb3JFYWNoKGUsKGZ1bmN0aW9uKG8scyl7bj10LmNhbGwocixuLG8scyxlKX0pKSxufSxnb29nLmFycmF5LnJlZHVjZVJpZ2h0PWdvb2cuTkFUSVZFX0FSUkFZX1BST1RPVFlQRVMmJihnb29nLmFycmF5LkFTU1VNRV9OQVRJVkVfRlVOQ1RJT05TfHxBcnJheS5wcm90b3R5cGUucmVkdWNlUmlnaHQpP2Z1bmN0aW9uKGUsdCxvLHIpe3JldHVybiBnb29nLmFzc2VydHMuYXNzZXJ0KG51bGwhPWUubGVuZ3RoKSxnb29nLmFzc2VydHMuYXNzZXJ0KG51bGwhPXQpLHImJih0PWdvb2cuYmluZCh0LHIpKSxBcnJheS5wcm90b3R5cGUucmVkdWNlUmlnaHQuY2FsbChlLHQsbyl9OmZ1bmN0aW9uKGUsdCxvLHIpe3ZhciBuPW87cmV0dXJuIGdvb2cuYXJyYXkuZm9yRWFjaFJpZ2h0KGUsKGZ1bmN0aW9uKG8scyl7bj10LmNhbGwocixuLG8scyxlKX0pKSxufSxnb29nLmFycmF5LnNvbWU9Z29vZy5OQVRJVkVfQVJSQVlfUFJPVE9UWVBFUyYmKGdvb2cuYXJyYXkuQVNTVU1FX05BVElWRV9GVU5DVElPTlN8fEFycmF5LnByb3RvdHlwZS5zb21lKT9mdW5jdGlvbihlLHQsbyl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5hc3NlcnQobnVsbCE9ZS5sZW5ndGgpLEFycmF5LnByb3RvdHlwZS5zb21lLmNhbGwoZSx0LG8pfTpmdW5jdGlvbihlLHQsbyl7Zm9yKHZhciByPWUubGVuZ3RoLG49Z29vZy5pc1N0cmluZyhlKT9lLnNwbGl0KFwiXCIpOmUscz0wO3M8cjtzKyspaWYocyBpbiBuJiZ0LmNhbGwobyxuW3NdLHMsZSkpcmV0dXJuITA7cmV0dXJuITF9LGdvb2cuYXJyYXkuZXZlcnk9Z29vZy5OQVRJVkVfQVJSQVlfUFJPVE9UWVBFUyYmKGdvb2cuYXJyYXkuQVNTVU1FX05BVElWRV9GVU5DVElPTlN8fEFycmF5LnByb3RvdHlwZS5ldmVyeSk/ZnVuY3Rpb24oZSx0LG8pe3JldHVybiBnb29nLmFzc2VydHMuYXNzZXJ0KG51bGwhPWUubGVuZ3RoKSxBcnJheS5wcm90b3R5cGUuZXZlcnkuY2FsbChlLHQsbyl9OmZ1bmN0aW9uKGUsdCxvKXtmb3IodmFyIHI9ZS5sZW5ndGgsbj1nb29nLmlzU3RyaW5nKGUpP2Uuc3BsaXQoXCJcIik6ZSxzPTA7czxyO3MrKylpZihzIGluIG4mJiF0LmNhbGwobyxuW3NdLHMsZSkpcmV0dXJuITE7cmV0dXJuITB9LGdvb2cuYXJyYXkuY291bnQ9ZnVuY3Rpb24oZSx0LG8pe3ZhciByPTA7cmV0dXJuIGdvb2cuYXJyYXkuZm9yRWFjaChlLChmdW5jdGlvbihlLG4scyl7dC5jYWxsKG8sZSxuLHMpJiYrK3J9KSxvKSxyfSxnb29nLmFycmF5LmZpbmQ9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiAwPih0PWdvb2cuYXJyYXkuZmluZEluZGV4KGUsdCxvKSk/bnVsbDpnb29nLmlzU3RyaW5nKGUpP2UuY2hhckF0KHQpOmVbdF19LGdvb2cuYXJyYXkuZmluZEluZGV4PWZ1bmN0aW9uKGUsdCxvKXtmb3IodmFyIHI9ZS5sZW5ndGgsbj1nb29nLmlzU3RyaW5nKGUpP2Uuc3BsaXQoXCJcIik6ZSxzPTA7czxyO3MrKylpZihzIGluIG4mJnQuY2FsbChvLG5bc10scyxlKSlyZXR1cm4gcztyZXR1cm4tMX0sZ29vZy5hcnJheS5maW5kUmlnaHQ9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiAwPih0PWdvb2cuYXJyYXkuZmluZEluZGV4UmlnaHQoZSx0LG8pKT9udWxsOmdvb2cuaXNTdHJpbmcoZSk/ZS5jaGFyQXQodCk6ZVt0XX0sZ29vZy5hcnJheS5maW5kSW5kZXhSaWdodD1mdW5jdGlvbihlLHQsbyl7dmFyIHI9ZS5sZW5ndGgsbj1nb29nLmlzU3RyaW5nKGUpP2Uuc3BsaXQoXCJcIik6ZTtmb3IoLS1yOzA8PXI7ci0tKWlmKHIgaW4gbiYmdC5jYWxsKG8sbltyXSxyLGUpKXJldHVybiByO3JldHVybi0xfSxnb29nLmFycmF5LmNvbnRhaW5zPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIDA8PWdvb2cuYXJyYXkuaW5kZXhPZihlLHQpfSxnb29nLmFycmF5LmlzRW1wdHk9ZnVuY3Rpb24oZSl7cmV0dXJuIDA9PWUubGVuZ3RofSxnb29nLmFycmF5LmNsZWFyPWZ1bmN0aW9uKGUpe2lmKCFnb29nLmlzQXJyYXkoZSkpZm9yKHZhciB0PWUubGVuZ3RoLTE7MDw9dDt0LS0pZGVsZXRlIGVbdF07ZS5sZW5ndGg9MH0sZ29vZy5hcnJheS5pbnNlcnQ9ZnVuY3Rpb24oZSx0KXtnb29nLmFycmF5LmNvbnRhaW5zKGUsdCl8fGUucHVzaCh0KX0sZ29vZy5hcnJheS5pbnNlcnRBdD1mdW5jdGlvbihlLHQsbyl7Z29vZy5hcnJheS5zcGxpY2UoZSxvLDAsdCl9LGdvb2cuYXJyYXkuaW5zZXJ0QXJyYXlBdD1mdW5jdGlvbihlLHQsbyl7Z29vZy5wYXJ0aWFsKGdvb2cuYXJyYXkuc3BsaWNlLGUsbywwKS5hcHBseShudWxsLHQpfSxnb29nLmFycmF5Lmluc2VydEJlZm9yZT1mdW5jdGlvbihlLHQsbyl7dmFyIHI7Mj09YXJndW1lbnRzLmxlbmd0aHx8MD4ocj1nb29nLmFycmF5LmluZGV4T2YoZSxvKSk/ZS5wdXNoKHQpOmdvb2cuYXJyYXkuaW5zZXJ0QXQoZSx0LHIpfSxnb29nLmFycmF5LnJlbW92ZT1mdW5jdGlvbihlLHQpe3ZhciBvO3JldHVybihvPTA8PSh0PWdvb2cuYXJyYXkuaW5kZXhPZihlLHQpKSkmJmdvb2cuYXJyYXkucmVtb3ZlQXQoZSx0KSxvfSxnb29nLmFycmF5LnJlbW92ZUxhc3Q9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gMDw9KHQ9Z29vZy5hcnJheS5sYXN0SW5kZXhPZihlLHQpKSYmKGdvb2cuYXJyYXkucmVtb3ZlQXQoZSx0KSwhMCl9LGdvb2cuYXJyYXkucmVtb3ZlQXQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZ29vZy5hc3NlcnRzLmFzc2VydChudWxsIT1lLmxlbmd0aCksMT09QXJyYXkucHJvdG90eXBlLnNwbGljZS5jYWxsKGUsdCwxKS5sZW5ndGh9LGdvb2cuYXJyYXkucmVtb3ZlSWY9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiAwPD0odD1nb29nLmFycmF5LmZpbmRJbmRleChlLHQsbykpJiYoZ29vZy5hcnJheS5yZW1vdmVBdChlLHQpLCEwKX0sZ29vZy5hcnJheS5yZW1vdmVBbGxJZj1mdW5jdGlvbihlLHQsbyl7dmFyIHI9MDtyZXR1cm4gZ29vZy5hcnJheS5mb3JFYWNoUmlnaHQoZSwoZnVuY3Rpb24obixzKXt0LmNhbGwobyxuLHMsZSkmJmdvb2cuYXJyYXkucmVtb3ZlQXQoZSxzKSYmcisrfSkpLHJ9LGdvb2cuYXJyYXkuY29uY2F0PWZ1bmN0aW9uKGUpe3JldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLGFyZ3VtZW50cyl9LGdvb2cuYXJyYXkuam9pbj1mdW5jdGlvbihlKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSxhcmd1bWVudHMpfSxnb29nLmFycmF5LnRvQXJyYXk9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGg7aWYoMDx0KXtmb3IodmFyIG89QXJyYXkodCkscj0wO3I8dDtyKyspb1tyXT1lW3JdO3JldHVybiBvfXJldHVybltdfSxnb29nLmFycmF5LmNsb25lPWdvb2cuYXJyYXkudG9BcnJheSxnb29nLmFycmF5LmV4dGVuZD1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbz0xO288YXJndW1lbnRzLmxlbmd0aDtvKyspe3ZhciByPWFyZ3VtZW50c1tvXTtpZihnb29nLmlzQXJyYXlMaWtlKHIpKXt2YXIgbj1lLmxlbmd0aHx8MCxzPXIubGVuZ3RofHwwO2UubGVuZ3RoPW4rcztmb3IodmFyIGk9MDtpPHM7aSsrKWVbbitpXT1yW2ldfWVsc2UgZS5wdXNoKHIpfX0sZ29vZy5hcnJheS5zcGxpY2U9ZnVuY3Rpb24oZSx0LG8scil7cmV0dXJuIGdvb2cuYXNzZXJ0cy5hc3NlcnQobnVsbCE9ZS5sZW5ndGgpLEFycmF5LnByb3RvdHlwZS5zcGxpY2UuYXBwbHkoZSxnb29nLmFycmF5LnNsaWNlKGFyZ3VtZW50cywxKSl9LGdvb2cuYXJyYXkuc2xpY2U9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiBnb29nLmFzc2VydHMuYXNzZXJ0KG51bGwhPWUubGVuZ3RoKSwyPj1hcmd1bWVudHMubGVuZ3RoP0FycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGUsdCk6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZSx0LG8pfSxnb29nLmFycmF5LnJlbW92ZUR1cGxpY2F0ZXM9ZnVuY3Rpb24oZSx0LG8pe3Q9dHx8ZTt2YXIgcj1mdW5jdGlvbihlKXtyZXR1cm4gZ29vZy5pc09iamVjdChlKT9cIm9cIitnb29nLmdldFVpZChlKToodHlwZW9mIGUpLmNoYXJBdCgwKStlfTtvPW98fHIscj17fTtmb3IodmFyIG49MCxzPTA7czxlLmxlbmd0aDspe3ZhciBpPWVbcysrXSxhPW8oaSk7T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsYSl8fChyW2FdPSEwLHRbbisrXT1pKX10Lmxlbmd0aD1ufSxnb29nLmFycmF5LmJpbmFyeVNlYXJjaD1mdW5jdGlvbihlLHQsbyl7cmV0dXJuIGdvb2cuYXJyYXkuYmluYXJ5U2VhcmNoXyhlLG98fGdvb2cuYXJyYXkuZGVmYXVsdENvbXBhcmUsITEsdCl9LGdvb2cuYXJyYXkuYmluYXJ5U2VsZWN0PWZ1bmN0aW9uKGUsdCxvKXtyZXR1cm4gZ29vZy5hcnJheS5iaW5hcnlTZWFyY2hfKGUsdCwhMCx2b2lkIDAsbyl9LGdvb2cuYXJyYXkuYmluYXJ5U2VhcmNoXz1mdW5jdGlvbihlLHQsbyxyLG4pe2Zvcih2YXIgcyxpPTAsYT1lLmxlbmd0aDtpPGE7KXt2YXIgZz1pK2E+PjEscD1vP3QuY2FsbChuLGVbZ10sZyxlKTp0KHIsZVtnXSk7MDxwP2k9ZysxOihhPWcscz0hcCl9cmV0dXJuIHM/aTp+aX0sZ29vZy5hcnJheS5zb3J0PWZ1bmN0aW9uKGUsdCl7ZS5zb3J0KHR8fGdvb2cuYXJyYXkuZGVmYXVsdENvbXBhcmUpfSxnb29nLmFycmF5LnN0YWJsZVNvcnQ9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG89QXJyYXkoZS5sZW5ndGgpLHI9MDtyPGUubGVuZ3RoO3IrKylvW3JdPXtpbmRleDpyLHZhbHVlOmVbcl19O3ZhciBuPXR8fGdvb2cuYXJyYXkuZGVmYXVsdENvbXBhcmU7Zm9yKGdvb2cuYXJyYXkuc29ydChvLChmdW5jdGlvbihlLHQpe3JldHVybiBuKGUudmFsdWUsdC52YWx1ZSl8fGUuaW5kZXgtdC5pbmRleH0pKSxyPTA7cjxlLmxlbmd0aDtyKyspZVtyXT1vW3JdLnZhbHVlfSxnb29nLmFycmF5LnNvcnRCeUtleT1mdW5jdGlvbihlLHQsbyl7dmFyIHI9b3x8Z29vZy5hcnJheS5kZWZhdWx0Q29tcGFyZTtnb29nLmFycmF5LnNvcnQoZSwoZnVuY3Rpb24oZSxvKXtyZXR1cm4gcih0KGUpLHQobykpfSkpfSxnb29nLmFycmF5LnNvcnRPYmplY3RzQnlLZXk9ZnVuY3Rpb24oZSx0LG8pe2dvb2cuYXJyYXkuc29ydEJ5S2V5KGUsKGZ1bmN0aW9uKGUpe3JldHVybiBlW3RdfSksbyl9LGdvb2cuYXJyYXkuaXNTb3J0ZWQ9ZnVuY3Rpb24oZSx0LG8pe3Q9dHx8Z29vZy5hcnJheS5kZWZhdWx0Q29tcGFyZTtmb3IodmFyIHI9MTtyPGUubGVuZ3RoO3IrKyl7dmFyIG49dChlW3ItMV0sZVtyXSk7aWYoMDxufHwwPT1uJiZvKXJldHVybiExfXJldHVybiEwfSxnb29nLmFycmF5LmVxdWFscz1mdW5jdGlvbihlLHQsbyl7aWYoIWdvb2cuaXNBcnJheUxpa2UoZSl8fCFnb29nLmlzQXJyYXlMaWtlKHQpfHxlLmxlbmd0aCE9dC5sZW5ndGgpcmV0dXJuITE7dmFyIHI9ZS5sZW5ndGg7bz1vfHxnb29nLmFycmF5LmRlZmF1bHRDb21wYXJlRXF1YWxpdHk7Zm9yKHZhciBuPTA7bjxyO24rKylpZighbyhlW25dLHRbbl0pKXJldHVybiExO3JldHVybiEwfSxnb29nLmFycmF5LmNvbXBhcmUzPWZ1bmN0aW9uKGUsdCxvKXtvPW98fGdvb2cuYXJyYXkuZGVmYXVsdENvbXBhcmU7Zm9yKHZhciByPU1hdGgubWluKGUubGVuZ3RoLHQubGVuZ3RoKSxuPTA7bjxyO24rKyl7dmFyIHM9byhlW25dLHRbbl0pO2lmKDAhPXMpcmV0dXJuIHN9cmV0dXJuIGdvb2cuYXJyYXkuZGVmYXVsdENvbXBhcmUoZS5sZW5ndGgsdC5sZW5ndGgpfSxnb29nLmFycmF5LmRlZmF1bHRDb21wYXJlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU+dD8xOmU8dD8tMTowfSxnb29nLmFycmF5LmludmVyc2VEZWZhdWx0Q29tcGFyZT1mdW5jdGlvbihlLHQpe3JldHVybi1nb29nLmFycmF5LmRlZmF1bHRDb21wYXJlKGUsdCl9LGdvb2cuYXJyYXkuZGVmYXVsdENvbXBhcmVFcXVhbGl0eT1mdW5jdGlvbihlLHQpe3JldHVybiBlPT09dH0sZ29vZy5hcnJheS5iaW5hcnlJbnNlcnQ9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiAwPihvPWdvb2cuYXJyYXkuYmluYXJ5U2VhcmNoKGUsdCxvKSkmJihnb29nLmFycmF5Lmluc2VydEF0KGUsdCwtKG8rMSkpLCEwKX0sZ29vZy5hcnJheS5iaW5hcnlSZW1vdmU9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiAwPD0odD1nb29nLmFycmF5LmJpbmFyeVNlYXJjaChlLHQsbykpJiZnb29nLmFycmF5LnJlbW92ZUF0KGUsdCl9LGdvb2cuYXJyYXkuYnVja2V0PWZ1bmN0aW9uKGUsdCxvKXtmb3IodmFyIHI9e30sbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgcz1lW25dLGk9dC5jYWxsKG8scyxuLGUpO2dvb2cuaXNEZWYoaSkmJihyW2ldfHwocltpXT1bXSkpLnB1c2gocyl9cmV0dXJuIHJ9LGdvb2cuYXJyYXkudG9PYmplY3Q9ZnVuY3Rpb24oZSx0LG8pe3ZhciByPXt9O3JldHVybiBnb29nLmFycmF5LmZvckVhY2goZSwoZnVuY3Rpb24obixzKXtyW3QuY2FsbChvLG4scyxlKV09bn0pKSxyfSxnb29nLmFycmF5LnJhbmdlPWZ1bmN0aW9uKGUsdCxvKXt2YXIgcj1bXSxuPTAscz1lO2lmKHZvaWQgMCE9PXQmJihuPWUscz10KSwwPihvPW98fDEpKihzLW4pKXJldHVybltdO2lmKDA8bylmb3IoZT1uO2U8cztlKz1vKXIucHVzaChlKTtlbHNlIGZvcihlPW47ZT5zO2UrPW8pci5wdXNoKGUpO3JldHVybiByfSxnb29nLmFycmF5LnJlcGVhdD1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbz1bXSxyPTA7cjx0O3IrKylvW3JdPWU7cmV0dXJuIG99LGdvb2cuYXJyYXkuZmxhdHRlbj1mdW5jdGlvbihlKXtmb3IodmFyIHQ9W10sbz0wO288YXJndW1lbnRzLmxlbmd0aDtvKyspe3ZhciByPWFyZ3VtZW50c1tvXTtpZihnb29nLmlzQXJyYXkocikpZm9yKHZhciBuPTA7bjxyLmxlbmd0aDtuKz04MTkyKXt2YXIgcz1nb29nLmFycmF5LnNsaWNlKHIsbixuKzgxOTIpO3M9Z29vZy5hcnJheS5mbGF0dGVuLmFwcGx5KG51bGwscyk7Zm9yKHZhciBpPTA7aTxzLmxlbmd0aDtpKyspdC5wdXNoKHNbaV0pfWVsc2UgdC5wdXNoKHIpfXJldHVybiB0fSxnb29nLmFycmF5LnJvdGF0ZT1mdW5jdGlvbihlLHQpe3JldHVybiBnb29nLmFzc2VydHMuYXNzZXJ0KG51bGwhPWUubGVuZ3RoKSxlLmxlbmd0aCYmKDA8KHQlPWUubGVuZ3RoKT9BcnJheS5wcm90b3R5cGUudW5zaGlmdC5hcHBseShlLGUuc3BsaWNlKC10LHQpKTowPnQmJkFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGUsZS5zcGxpY2UoMCwtdCkpKSxlfSxnb29nLmFycmF5Lm1vdmVJdGVtPWZ1bmN0aW9uKGUsdCxvKXtnb29nLmFzc2VydHMuYXNzZXJ0KDA8PXQmJnQ8ZS5sZW5ndGgpLGdvb2cuYXNzZXJ0cy5hc3NlcnQoMDw9byYmbzxlLmxlbmd0aCksdD1BcnJheS5wcm90b3R5cGUuc3BsaWNlLmNhbGwoZSx0LDEpLEFycmF5LnByb3RvdHlwZS5zcGxpY2UuY2FsbChlLG8sMCx0WzBdKX0sZ29vZy5hcnJheS56aXA9ZnVuY3Rpb24oZSl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuW107Zm9yKHZhciB0PVtdLG89YXJndW1lbnRzWzBdLmxlbmd0aCxyPTE7cjxhcmd1bWVudHMubGVuZ3RoO3IrKylhcmd1bWVudHNbcl0ubGVuZ3RoPG8mJihvPWFyZ3VtZW50c1tyXS5sZW5ndGgpO2ZvcihyPTA7cjxvO3IrKyl7Zm9yKHZhciBuPVtdLHM9MDtzPGFyZ3VtZW50cy5sZW5ndGg7cysrKW4ucHVzaChhcmd1bWVudHNbc11bcl0pO3QucHVzaChuKX1yZXR1cm4gdH0sZ29vZy5hcnJheS5zaHVmZmxlPWZ1bmN0aW9uKGUsdCl7dD10fHxNYXRoLnJhbmRvbTtmb3IodmFyIG89ZS5sZW5ndGgtMTswPG87by0tKXt2YXIgcj1NYXRoLmZsb29yKHQoKSoobysxKSksbj1lW29dO2Vbb109ZVtyXSxlW3JdPW59fSxnb29nLmFycmF5LmNvcHlCeUluZGV4PWZ1bmN0aW9uKGUsdCl7dmFyIG89W107cmV0dXJuIGdvb2cuYXJyYXkuZm9yRWFjaCh0LChmdW5jdGlvbih0KXtvLnB1c2goZVt0XSl9KSksb30sZ29vZy5hcnJheS5jb25jYXRNYXA9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiBnb29nLmFycmF5LmNvbmNhdC5hcHBseShbXSxnb29nLmFycmF5Lm1hcChlLHQsbykpfSxnb29nLmNyeXB0PXt9LGdvb2cuY3J5cHQuc3RyaW5nVG9CeXRlQXJyYXk9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLG89MCxyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWUuY2hhckNvZGVBdChyKTsyNTU8biYmKHRbbysrXT0yNTUmbixuPj49OCksdFtvKytdPW59cmV0dXJuIHR9LGdvb2cuY3J5cHQuYnl0ZUFycmF5VG9TdHJpbmc9ZnVuY3Rpb24oZSl7aWYoODE5Mj49ZS5sZW5ndGgpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxlKTtmb3IodmFyIHQ9XCJcIixvPTA7bzxlLmxlbmd0aDtvKz04MTkyKXt2YXIgcj1nb29nLmFycmF5LnNsaWNlKGUsbyxvKzgxOTIpO3QrPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxyKX1yZXR1cm4gdH0sZ29vZy5jcnlwdC5ieXRlQXJyYXlUb0hleD1mdW5jdGlvbihlLHQpe3JldHVybiBnb29nLmFycmF5Lm1hcChlLChmdW5jdGlvbihlKXtyZXR1cm4gMTwoZT1lLnRvU3RyaW5nKDE2KSkubGVuZ3RoP2U6XCIwXCIrZX0pKS5qb2luKHR8fFwiXCIpfSxnb29nLmNyeXB0LmhleFRvQnl0ZUFycmF5PWZ1bmN0aW9uKGUpe2dvb2cuYXNzZXJ0cy5hc3NlcnQoMD09ZS5sZW5ndGglMixcIktleSBzdHJpbmcgbGVuZ3RoIG11c3QgYmUgbXVsdGlwbGUgb2YgMlwiKTtmb3IodmFyIHQ9W10sbz0wO288ZS5sZW5ndGg7bys9Mil0LnB1c2gocGFyc2VJbnQoZS5zdWJzdHJpbmcobyxvKzIpLDE2KSk7cmV0dXJuIHR9LGdvb2cuY3J5cHQuc3RyaW5nVG9VdGY4Qnl0ZUFycmF5PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxvPTAscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lLmNoYXJDb2RlQXQocik7MTI4Pm4/dFtvKytdPW46KDIwNDg+bj90W28rK109bj4+NnwxOTI6KDU1Mjk2PT0oNjQ1MTImbikmJnIrMTxlLmxlbmd0aCYmNTYzMjA9PSg2NDUxMiZlLmNoYXJDb2RlQXQocisxKSk/KG49NjU1MzYrKCgxMDIzJm4pPDwxMCkrKDEwMjMmZS5jaGFyQ29kZUF0KCsrcikpLHRbbysrXT1uPj4xOHwyNDAsdFtvKytdPW4+PjEyJjYzfDEyOCk6dFtvKytdPW4+PjEyfDIyNCx0W28rK109bj4+NiY2M3wxMjgpLHRbbysrXT02MyZufDEyOCl9cmV0dXJuIHR9LGdvb2cuY3J5cHQudXRmOEJ5dGVBcnJheVRvU3RyaW5nPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxvPTAscj0wO288ZS5sZW5ndGg7KXt2YXIgbj1lW28rK107aWYoMTI4Pm4pdFtyKytdPVN0cmluZy5mcm9tQ2hhckNvZGUobik7ZWxzZSBpZigxOTE8biYmMjI0Pm4pe3ZhciBzPWVbbysrXTt0W3IrK109U3RyaW5nLmZyb21DaGFyQ29kZSgoMzEmbik8PDZ8NjMmcyl9ZWxzZSBpZigyMzk8biYmMzY1Pm4pe3M9ZVtvKytdO3ZhciBpPWVbbysrXTtuPSgoNyZuKTw8MTh8KDYzJnMpPDwxMnwoNjMmaSk8PDZ8NjMmZVtvKytdKS02NTUzNix0W3IrK109U3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5Nisobj4+MTApKSx0W3IrK109U3RyaW5nLmZyb21DaGFyQ29kZSg1NjMyMCsoMTAyMyZuKSl9ZWxzZSBzPWVbbysrXSxpPWVbbysrXSx0W3IrK109U3RyaW5nLmZyb21DaGFyQ29kZSgoMTUmbik8PDEyfCg2MyZzKTw8Nnw2MyZpKX1yZXR1cm4gdC5qb2luKFwiXCIpfSxnb29nLmNyeXB0LnhvckJ5dGVBcnJheT1mdW5jdGlvbihlLHQpe2dvb2cuYXNzZXJ0cy5hc3NlcnQoZS5sZW5ndGg9PXQubGVuZ3RoLFwiWE9SIGFycmF5IGxlbmd0aHMgbXVzdCBtYXRjaFwiKTtmb3IodmFyIG89W10scj0wO3I8ZS5sZW5ndGg7cisrKW8ucHVzaChlW3JdXnRbcl0pO3JldHVybiBvfSxnb29nLmRvbS5hc3NlcnRzPXt9LGdvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNMb2NhdGlvbj1mdW5jdGlvbihlKXtpZihnb29nLmFzc2VydHMuRU5BQkxFX0FTU0VSVFMpe3ZhciB0PWdvb2cuZG9tLmFzc2VydHMuZ2V0V2luZG93XyhlKTt0JiYoIWV8fCEoZSBpbnN0YW5jZW9mIHQuTG9jYXRpb24pJiZlIGluc3RhbmNlb2YgdC5FbGVtZW50KSYmZ29vZy5hc3NlcnRzLmZhaWwoXCJBcmd1bWVudCBpcyBub3QgYSBMb2NhdGlvbiAob3IgYSBub24tRWxlbWVudCBtb2NrKTsgZ290OiAlc1wiLGdvb2cuZG9tLmFzc2VydHMuZGVidWdTdHJpbmdGb3JUeXBlXyhlKSl9cmV0dXJuIGV9LGdvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNFbGVtZW50VHlwZV89ZnVuY3Rpb24oZSx0KXtpZihnb29nLmFzc2VydHMuRU5BQkxFX0FTU0VSVFMpe3ZhciBvPWdvb2cuZG9tLmFzc2VydHMuZ2V0V2luZG93XyhlKTtvJiZ2b2lkIDAhPT1vW3RdJiYoZSYmKGUgaW5zdGFuY2VvZiBvW3RdfHwhKGUgaW5zdGFuY2VvZiBvLkxvY2F0aW9ufHxlIGluc3RhbmNlb2Ygby5FbGVtZW50KSl8fGdvb2cuYXNzZXJ0cy5mYWlsKFwiQXJndW1lbnQgaXMgbm90IGEgJXMgKG9yIGEgbm9uLUVsZW1lbnQsIG5vbi1Mb2NhdGlvbiBtb2NrKTsgZ290OiAlc1wiLHQsZ29vZy5kb20uYXNzZXJ0cy5kZWJ1Z1N0cmluZ0ZvclR5cGVfKGUpKSl9cmV0dXJuIGV9LGdvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNIVE1MQW5jaG9yRWxlbWVudD1mdW5jdGlvbihlKXtyZXR1cm4gZ29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0VsZW1lbnRUeXBlXyhlLFwiSFRNTEFuY2hvckVsZW1lbnRcIil9LGdvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNIVE1MQnV0dG9uRWxlbWVudD1mdW5jdGlvbihlKXtyZXR1cm4gZ29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0VsZW1lbnRUeXBlXyhlLFwiSFRNTEJ1dHRvbkVsZW1lbnRcIil9LGdvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNIVE1MTGlua0VsZW1lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNFbGVtZW50VHlwZV8oZSxcIkhUTUxMaW5rRWxlbWVudFwiKX0sZ29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0hUTUxJbWFnZUVsZW1lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNFbGVtZW50VHlwZV8oZSxcIkhUTUxJbWFnZUVsZW1lbnRcIil9LGdvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNIVE1MQXVkaW9FbGVtZW50PWZ1bmN0aW9uKGUpe3JldHVybiBnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzRWxlbWVudFR5cGVfKGUsXCJIVE1MQXVkaW9FbGVtZW50XCIpfSxnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzSFRNTFZpZGVvRWxlbWVudD1mdW5jdGlvbihlKXtyZXR1cm4gZ29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0VsZW1lbnRUeXBlXyhlLFwiSFRNTFZpZGVvRWxlbWVudFwiKX0sZ29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0hUTUxJbnB1dEVsZW1lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNFbGVtZW50VHlwZV8oZSxcIkhUTUxJbnB1dEVsZW1lbnRcIil9LGdvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNIVE1MVGV4dEFyZWFFbGVtZW50PWZ1bmN0aW9uKGUpe3JldHVybiBnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzRWxlbWVudFR5cGVfKGUsXCJIVE1MVGV4dEFyZWFFbGVtZW50XCIpfSxnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzSFRNTENhbnZhc0VsZW1lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNFbGVtZW50VHlwZV8oZSxcIkhUTUxDYW52YXNFbGVtZW50XCIpfSxnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzSFRNTEVtYmVkRWxlbWVudD1mdW5jdGlvbihlKXtyZXR1cm4gZ29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0VsZW1lbnRUeXBlXyhlLFwiSFRNTEVtYmVkRWxlbWVudFwiKX0sZ29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0hUTUxGb3JtRWxlbWVudD1mdW5jdGlvbihlKXtyZXR1cm4gZ29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0VsZW1lbnRUeXBlXyhlLFwiSFRNTEZvcm1FbGVtZW50XCIpfSxnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzSFRNTEZyYW1lRWxlbWVudD1mdW5jdGlvbihlKXtyZXR1cm4gZ29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0VsZW1lbnRUeXBlXyhlLFwiSFRNTEZyYW1lRWxlbWVudFwiKX0sZ29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0hUTUxJRnJhbWVFbGVtZW50PWZ1bmN0aW9uKGUpe3JldHVybiBnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzRWxlbWVudFR5cGVfKGUsXCJIVE1MSUZyYW1lRWxlbWVudFwiKX0sZ29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0hUTUxPYmplY3RFbGVtZW50PWZ1bmN0aW9uKGUpe3JldHVybiBnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzRWxlbWVudFR5cGVfKGUsXCJIVE1MT2JqZWN0RWxlbWVudFwiKX0sZ29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0hUTUxTY3JpcHRFbGVtZW50PWZ1bmN0aW9uKGUpe3JldHVybiBnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzRWxlbWVudFR5cGVfKGUsXCJIVE1MU2NyaXB0RWxlbWVudFwiKX0sZ29vZy5kb20uYXNzZXJ0cy5kZWJ1Z1N0cmluZ0ZvclR5cGVfPWZ1bmN0aW9uKGUpe2lmKCFnb29nLmlzT2JqZWN0KGUpKXJldHVybiB2b2lkIDA9PT1lP1widW5kZWZpbmVkXCI6bnVsbD09PWU/XCJudWxsXCI6dHlwZW9mIGU7dHJ5e3JldHVybiBlLmNvbnN0cnVjdG9yLmRpc3BsYXlOYW1lfHxlLmNvbnN0cnVjdG9yLm5hbWV8fE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKX1jYXRjaChlKXtyZXR1cm5cIjxvYmplY3QgY291bGQgbm90IGJlIHN0cmluZ2lmaWVkPlwifX0sZ29vZy5kb20uYXNzZXJ0cy5nZXRXaW5kb3dfPWZ1bmN0aW9uKGUpe3RyeXt2YXIgdD1lJiZlLm93bmVyRG9jdW1lbnQsbz10JiYodC5kZWZhdWx0Vmlld3x8dC5wYXJlbnRXaW5kb3cpO2lmKChvPW98fGdvb2cuZ2xvYmFsKS5FbGVtZW50JiZvLkxvY2F0aW9uKXJldHVybiBvfWNhdGNoKGUpe31yZXR1cm4gbnVsbH0sZ29vZy5mdW5jdGlvbnM9e30sZ29vZy5mdW5jdGlvbnMuY29uc3RhbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fSxnb29nLmZ1bmN0aW9ucy5GQUxTRT1mdW5jdGlvbigpe3JldHVybiExfSxnb29nLmZ1bmN0aW9ucy5UUlVFPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGdvb2cuZnVuY3Rpb25zLk5VTEw9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sZ29vZy5mdW5jdGlvbnMuaWRlbnRpdHk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZX0sZ29vZy5mdW5jdGlvbnMuZXJyb3I9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhyb3cgRXJyb3IoZSl9fSxnb29nLmZ1bmN0aW9ucy5mYWlsPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3Rocm93IGV9fSxnb29nLmZ1bmN0aW9ucy5sb2NrPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ9dHx8MCxmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHRoaXMsQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDAsdCkpfX0sZ29vZy5mdW5jdGlvbnMubnRoPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHNbZV19fSxnb29nLmZ1bmN0aW9ucy5wYXJ0aWFsUmlnaHQ9ZnVuY3Rpb24oZSx0KXt2YXIgbz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtyZXR1cm4gdC5wdXNoLmFwcGx5KHQsbyksZS5hcHBseSh0aGlzLHQpfX0sZ29vZy5mdW5jdGlvbnMud2l0aFJldHVyblZhbHVlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGdvb2cuZnVuY3Rpb25zLnNlcXVlbmNlKGUsZ29vZy5mdW5jdGlvbnMuY29uc3RhbnQodCkpfSxnb29nLmZ1bmN0aW9ucy5lcXVhbFRvPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG8pe3JldHVybiB0P2U9PW86ZT09PW99fSxnb29nLmZ1bmN0aW9ucy5jb21wb3NlPWZ1bmN0aW9uKGUsdCl7dmFyIG89YXJndW1lbnRzLHI9by5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU7ciYmKGU9b1tyLTFdLmFwcGx5KHRoaXMsYXJndW1lbnRzKSk7Zm9yKHZhciB0PXItMjswPD10O3QtLSllPW9bdF0uY2FsbCh0aGlzLGUpO3JldHVybiBlfX0sZ29vZy5mdW5jdGlvbnMuc2VxdWVuY2U9ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLG89dC5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBlLHI9MDtyPG87cisrKWU9dFtyXS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGV9fSxnb29nLmZ1bmN0aW9ucy5hbmQ9ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLG89dC5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTxvO2UrKylpZighdFtlXS5hcHBseSh0aGlzLGFyZ3VtZW50cykpcmV0dXJuITE7cmV0dXJuITB9fSxnb29nLmZ1bmN0aW9ucy5vcj1mdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMsbz10Lmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIGU9MDtlPG87ZSsrKWlmKHRbZV0uYXBwbHkodGhpcyxhcmd1bWVudHMpKXJldHVybiEwO3JldHVybiExfX0sZ29vZy5mdW5jdGlvbnMubm90PWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiFlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LGdvb2cuZnVuY3Rpb25zLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3ZhciBvPWZ1bmN0aW9uKCl7fTtyZXR1cm4gby5wcm90b3R5cGU9ZS5wcm90b3R5cGUsbz1uZXcgbyxlLmFwcGx5KG8sQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpKSxvfSxnb29nLmZ1bmN0aW9ucy5DQUNIRV9SRVRVUk5fVkFMVUU9ITAsZ29vZy5mdW5jdGlvbnMuY2FjaGVSZXR1cm5WYWx1ZT1mdW5jdGlvbihlKXt2YXIgdCxvPSExO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBnb29nLmZ1bmN0aW9ucy5DQUNIRV9SRVRVUk5fVkFMVUU/KG98fCh0PWUoKSxvPSEwKSx0KTplKCl9fSxnb29nLmZ1bmN0aW9ucy5vbmNlPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIGZ1bmN0aW9uKCl7aWYodCl7dmFyIGU9dDt0PW51bGwsZSgpfX19LGdvb2cuZnVuY3Rpb25zLmRlYm91bmNlPWZ1bmN0aW9uKGUsdCxvKXt2YXIgcj0wO3JldHVybiBmdW5jdGlvbihuKXtnb29nLmdsb2JhbC5jbGVhclRpbWVvdXQocik7dmFyIHM9YXJndW1lbnRzO3I9Z29vZy5nbG9iYWwuc2V0VGltZW91dCgoZnVuY3Rpb24oKXtlLmFwcGx5KG8scyl9KSx0KX19LGdvb2cuZnVuY3Rpb25zLnRocm90dGxlPWZ1bmN0aW9uKGUsdCxvKXt2YXIgcj0wLG49ITEscz1bXSxpPWZ1bmN0aW9uKCl7cj0wLG4mJihuPSExLGEoKSl9LGE9ZnVuY3Rpb24oKXtyPWdvb2cuZ2xvYmFsLnNldFRpbWVvdXQoaSx0KSxlLmFwcGx5KG8scyl9O3JldHVybiBmdW5jdGlvbihlKXtzPWFyZ3VtZW50cyxyP249ITA6YSgpfX0sZ29vZy5mdW5jdGlvbnMucmF0ZUxpbWl0PWZ1bmN0aW9uKGUsdCxvKXt2YXIgcj0wLG49ZnVuY3Rpb24oKXtyPTB9O3JldHVybiBmdW5jdGlvbihzKXtyfHwocj1nb29nLmdsb2JhbC5zZXRUaW1lb3V0KG4sdCksZS5hcHBseShvLGFyZ3VtZW50cykpfX0sZ29vZy5kb20uSHRtbEVsZW1lbnQ9ZnVuY3Rpb24oKXt9LGdvb2cuZG9tLlRhZ05hbWU9ZnVuY3Rpb24oZSl7dGhpcy50YWdOYW1lXz1lfSxnb29nLmRvbS5UYWdOYW1lLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRhZ05hbWVffSxnb29nLmRvbS5UYWdOYW1lLkE9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJBXCIpLGdvb2cuZG9tLlRhZ05hbWUuQUJCUj1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkFCQlJcIiksZ29vZy5kb20uVGFnTmFtZS5BQ1JPTllNPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiQUNST05ZTVwiKSxnb29nLmRvbS5UYWdOYW1lLkFERFJFU1M9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJBRERSRVNTXCIpLGdvb2cuZG9tLlRhZ05hbWUuQVBQTEVUPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiQVBQTEVUXCIpLGdvb2cuZG9tLlRhZ05hbWUuQVJFQT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkFSRUFcIiksZ29vZy5kb20uVGFnTmFtZS5BUlRJQ0xFPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiQVJUSUNMRVwiKSxnb29nLmRvbS5UYWdOYW1lLkFTSURFPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiQVNJREVcIiksZ29vZy5kb20uVGFnTmFtZS5BVURJTz1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkFVRElPXCIpLGdvb2cuZG9tLlRhZ05hbWUuQj1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkJcIiksZ29vZy5kb20uVGFnTmFtZS5CQVNFPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiQkFTRVwiKSxnb29nLmRvbS5UYWdOYW1lLkJBU0VGT05UPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiQkFTRUZPTlRcIiksZ29vZy5kb20uVGFnTmFtZS5CREk9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJCRElcIiksZ29vZy5kb20uVGFnTmFtZS5CRE89bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJCRE9cIiksZ29vZy5kb20uVGFnTmFtZS5CSUc9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJCSUdcIiksZ29vZy5kb20uVGFnTmFtZS5CTE9DS1FVT1RFPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiQkxPQ0tRVU9URVwiKSxnb29nLmRvbS5UYWdOYW1lLkJPRFk9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJCT0RZXCIpLGdvb2cuZG9tLlRhZ05hbWUuQlI9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJCUlwiKSxnb29nLmRvbS5UYWdOYW1lLkJVVFRPTj1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkJVVFRPTlwiKSxnb29nLmRvbS5UYWdOYW1lLkNBTlZBUz1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkNBTlZBU1wiKSxnb29nLmRvbS5UYWdOYW1lLkNBUFRJT049bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJDQVBUSU9OXCIpLGdvb2cuZG9tLlRhZ05hbWUuQ0VOVEVSPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiQ0VOVEVSXCIpLGdvb2cuZG9tLlRhZ05hbWUuQ0lURT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkNJVEVcIiksZ29vZy5kb20uVGFnTmFtZS5DT0RFPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiQ09ERVwiKSxnb29nLmRvbS5UYWdOYW1lLkNPTD1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkNPTFwiKSxnb29nLmRvbS5UYWdOYW1lLkNPTEdST1VQPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiQ09MR1JPVVBcIiksZ29vZy5kb20uVGFnTmFtZS5DT01NQU5EPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiQ09NTUFORFwiKSxnb29nLmRvbS5UYWdOYW1lLkRBVEE9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJEQVRBXCIpLGdvb2cuZG9tLlRhZ05hbWUuREFUQUxJU1Q9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJEQVRBTElTVFwiKSxnb29nLmRvbS5UYWdOYW1lLkREPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiRERcIiksZ29vZy5kb20uVGFnTmFtZS5ERUw9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJERUxcIiksZ29vZy5kb20uVGFnTmFtZS5ERVRBSUxTPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiREVUQUlMU1wiKSxnb29nLmRvbS5UYWdOYW1lLkRGTj1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkRGTlwiKSxnb29nLmRvbS5UYWdOYW1lLkRJQUxPRz1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkRJQUxPR1wiKSxnb29nLmRvbS5UYWdOYW1lLkRJUj1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkRJUlwiKSxnb29nLmRvbS5UYWdOYW1lLkRJVj1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkRJVlwiKSxnb29nLmRvbS5UYWdOYW1lLkRMPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiRExcIiksZ29vZy5kb20uVGFnTmFtZS5EVD1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkRUXCIpLGdvb2cuZG9tLlRhZ05hbWUuRU09bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJFTVwiKSxnb29nLmRvbS5UYWdOYW1lLkVNQkVEPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiRU1CRURcIiksZ29vZy5kb20uVGFnTmFtZS5GSUVMRFNFVD1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkZJRUxEU0VUXCIpLGdvb2cuZG9tLlRhZ05hbWUuRklHQ0FQVElPTj1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkZJR0NBUFRJT05cIiksZ29vZy5kb20uVGFnTmFtZS5GSUdVUkU9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJGSUdVUkVcIiksZ29vZy5kb20uVGFnTmFtZS5GT05UPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiRk9OVFwiKSxnb29nLmRvbS5UYWdOYW1lLkZPT1RFUj1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkZPT1RFUlwiKSxnb29nLmRvbS5UYWdOYW1lLkZPUk09bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJGT1JNXCIpLGdvb2cuZG9tLlRhZ05hbWUuRlJBTUU9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJGUkFNRVwiKSxnb29nLmRvbS5UYWdOYW1lLkZSQU1FU0VUPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiRlJBTUVTRVRcIiksZ29vZy5kb20uVGFnTmFtZS5IMT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkgxXCIpLGdvb2cuZG9tLlRhZ05hbWUuSDI9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJIMlwiKSxnb29nLmRvbS5UYWdOYW1lLkgzPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiSDNcIiksZ29vZy5kb20uVGFnTmFtZS5IND1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkg0XCIpLGdvb2cuZG9tLlRhZ05hbWUuSDU9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJINVwiKSxnb29nLmRvbS5UYWdOYW1lLkg2PW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiSDZcIiksZ29vZy5kb20uVGFnTmFtZS5IRUFEPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiSEVBRFwiKSxnb29nLmRvbS5UYWdOYW1lLkhFQURFUj1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkhFQURFUlwiKSxnb29nLmRvbS5UYWdOYW1lLkhHUk9VUD1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkhHUk9VUFwiKSxnb29nLmRvbS5UYWdOYW1lLkhSPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiSFJcIiksZ29vZy5kb20uVGFnTmFtZS5IVE1MPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiSFRNTFwiKSxnb29nLmRvbS5UYWdOYW1lLkk9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJJXCIpLGdvb2cuZG9tLlRhZ05hbWUuSUZSQU1FPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiSUZSQU1FXCIpLGdvb2cuZG9tLlRhZ05hbWUuSU1HPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiSU1HXCIpLGdvb2cuZG9tLlRhZ05hbWUuSU5QVVQ9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJJTlBVVFwiKSxnb29nLmRvbS5UYWdOYW1lLklOUz1uZXcgZ29vZy5kb20uVGFnTmFtZShcIklOU1wiKSxnb29nLmRvbS5UYWdOYW1lLklTSU5ERVg9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJJU0lOREVYXCIpLGdvb2cuZG9tLlRhZ05hbWUuS0JEPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiS0JEXCIpLGdvb2cuZG9tLlRhZ05hbWUuS0VZR0VOPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiS0VZR0VOXCIpLGdvb2cuZG9tLlRhZ05hbWUuTEFCRUw9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJMQUJFTFwiKSxnb29nLmRvbS5UYWdOYW1lLkxFR0VORD1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkxFR0VORFwiKSxnb29nLmRvbS5UYWdOYW1lLkxJPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiTElcIiksZ29vZy5kb20uVGFnTmFtZS5MSU5LPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiTElOS1wiKSxnb29nLmRvbS5UYWdOYW1lLk1BSU49bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJNQUlOXCIpLGdvb2cuZG9tLlRhZ05hbWUuTUFQPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiTUFQXCIpLGdvb2cuZG9tLlRhZ05hbWUuTUFSSz1uZXcgZ29vZy5kb20uVGFnTmFtZShcIk1BUktcIiksZ29vZy5kb20uVGFnTmFtZS5NQVRIPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiTUFUSFwiKSxnb29nLmRvbS5UYWdOYW1lLk1FTlU9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJNRU5VXCIpLGdvb2cuZG9tLlRhZ05hbWUuTUVOVUlURU09bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJNRU5VSVRFTVwiKSxnb29nLmRvbS5UYWdOYW1lLk1FVEE9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJNRVRBXCIpLGdvb2cuZG9tLlRhZ05hbWUuTUVURVI9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJNRVRFUlwiKSxnb29nLmRvbS5UYWdOYW1lLk5BVj1uZXcgZ29vZy5kb20uVGFnTmFtZShcIk5BVlwiKSxnb29nLmRvbS5UYWdOYW1lLk5PRlJBTUVTPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiTk9GUkFNRVNcIiksZ29vZy5kb20uVGFnTmFtZS5OT1NDUklQVD1uZXcgZ29vZy5kb20uVGFnTmFtZShcIk5PU0NSSVBUXCIpLGdvb2cuZG9tLlRhZ05hbWUuT0JKRUNUPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiT0JKRUNUXCIpLGdvb2cuZG9tLlRhZ05hbWUuT0w9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJPTFwiKSxnb29nLmRvbS5UYWdOYW1lLk9QVEdST1VQPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiT1BUR1JPVVBcIiksZ29vZy5kb20uVGFnTmFtZS5PUFRJT049bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJPUFRJT05cIiksZ29vZy5kb20uVGFnTmFtZS5PVVRQVVQ9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJPVVRQVVRcIiksZ29vZy5kb20uVGFnTmFtZS5QPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiUFwiKSxnb29nLmRvbS5UYWdOYW1lLlBBUkFNPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiUEFSQU1cIiksZ29vZy5kb20uVGFnTmFtZS5QSUNUVVJFPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiUElDVFVSRVwiKSxnb29nLmRvbS5UYWdOYW1lLlBSRT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlBSRVwiKSxnb29nLmRvbS5UYWdOYW1lLlBST0dSRVNTPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiUFJPR1JFU1NcIiksZ29vZy5kb20uVGFnTmFtZS5RPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiUVwiKSxnb29nLmRvbS5UYWdOYW1lLlJQPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiUlBcIiksZ29vZy5kb20uVGFnTmFtZS5SVD1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlJUXCIpLGdvb2cuZG9tLlRhZ05hbWUuUlRDPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiUlRDXCIpLGdvb2cuZG9tLlRhZ05hbWUuUlVCWT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlJVQllcIiksZ29vZy5kb20uVGFnTmFtZS5TPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiU1wiKSxnb29nLmRvbS5UYWdOYW1lLlNBTVA9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJTQU1QXCIpLGdvb2cuZG9tLlRhZ05hbWUuU0NSSVBUPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiU0NSSVBUXCIpLGdvb2cuZG9tLlRhZ05hbWUuU0VDVElPTj1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlNFQ1RJT05cIiksZ29vZy5kb20uVGFnTmFtZS5TRUxFQ1Q9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJTRUxFQ1RcIiksZ29vZy5kb20uVGFnTmFtZS5TTUFMTD1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlNNQUxMXCIpLGdvb2cuZG9tLlRhZ05hbWUuU09VUkNFPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiU09VUkNFXCIpLGdvb2cuZG9tLlRhZ05hbWUuU1BBTj1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlNQQU5cIiksZ29vZy5kb20uVGFnTmFtZS5TVFJJS0U9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJTVFJJS0VcIiksZ29vZy5kb20uVGFnTmFtZS5TVFJPTkc9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJTVFJPTkdcIiksZ29vZy5kb20uVGFnTmFtZS5TVFlMRT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlNUWUxFXCIpLGdvb2cuZG9tLlRhZ05hbWUuU1VCPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiU1VCXCIpLGdvb2cuZG9tLlRhZ05hbWUuU1VNTUFSWT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlNVTU1BUllcIiksZ29vZy5kb20uVGFnTmFtZS5TVVA9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJTVVBcIiksZ29vZy5kb20uVGFnTmFtZS5TVkc9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJTVkdcIiksZ29vZy5kb20uVGFnTmFtZS5UQUJMRT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlRBQkxFXCIpLGdvb2cuZG9tLlRhZ05hbWUuVEJPRFk9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJUQk9EWVwiKSxnb29nLmRvbS5UYWdOYW1lLlREPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiVERcIiksZ29vZy5kb20uVGFnTmFtZS5URU1QTEFURT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlRFTVBMQVRFXCIpLGdvb2cuZG9tLlRhZ05hbWUuVEVYVEFSRUE9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJURVhUQVJFQVwiKSxnb29nLmRvbS5UYWdOYW1lLlRGT09UPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiVEZPT1RcIiksZ29vZy5kb20uVGFnTmFtZS5USD1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlRIXCIpLGdvb2cuZG9tLlRhZ05hbWUuVEhFQUQ9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJUSEVBRFwiKSxnb29nLmRvbS5UYWdOYW1lLlRJTUU9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJUSU1FXCIpLGdvb2cuZG9tLlRhZ05hbWUuVElUTEU9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJUSVRMRVwiKSxnb29nLmRvbS5UYWdOYW1lLlRSPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiVFJcIiksZ29vZy5kb20uVGFnTmFtZS5UUkFDSz1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlRSQUNLXCIpLGdvb2cuZG9tLlRhZ05hbWUuVFQ9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJUVFwiKSxnb29nLmRvbS5UYWdOYW1lLlU9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJVXCIpLGdvb2cuZG9tLlRhZ05hbWUuVUw9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJVTFwiKSxnb29nLmRvbS5UYWdOYW1lLlZBUj1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlZBUlwiKSxnb29nLmRvbS5UYWdOYW1lLlZJREVPPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiVklERU9cIiksZ29vZy5kb20uVGFnTmFtZS5XQlI9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJXQlJcIiksZ29vZy5kb20udGFncz17fSxnb29nLmRvbS50YWdzLlZPSURfVEFHU189e2FyZWE6ITAsYmFzZTohMCxicjohMCxjb2w6ITAsY29tbWFuZDohMCxlbWJlZDohMCxocjohMCxpbWc6ITAsaW5wdXQ6ITAsa2V5Z2VuOiEwLGxpbms6ITAsbWV0YTohMCxwYXJhbTohMCxzb3VyY2U6ITAsdHJhY2s6ITAsd2JyOiEwfSxnb29nLmRvbS50YWdzLmlzVm9pZFRhZz1mdW5jdGlvbihlKXtyZXR1cm4hMD09PWdvb2cuZG9tLnRhZ3MuVk9JRF9UQUdTX1tlXX0sZ29vZy5odG1sPXt9LGdvb2cuaHRtbC50cnVzdGVkdHlwZXM9e30sZ29vZy5odG1sLnRydXN0ZWR0eXBlcy5QUklWQVRFX0RPX05PVF9BQ0NFU1NfT1JfRUxTRV9QT0xJQ1k9Z29vZy5UUlVTVEVEX1RZUEVTX1BPTElDWV9OQU1FP2dvb2cuY3JlYXRlVHJ1c3RlZFR5cGVzUG9saWN5KGdvb2cuVFJVU1RFRF9UWVBFU19QT0xJQ1lfTkFNRStcIiNodG1sXCIpOm51bGwsZ29vZy5zdHJpbmc9e30sZ29vZy5zdHJpbmcuVHlwZWRTdHJpbmc9ZnVuY3Rpb24oKXt9LGdvb2cuc3RyaW5nLkNvbnN0PWZ1bmN0aW9uKGUsdCl7dGhpcy5zdHJpbmdDb25zdFZhbHVlV2l0aFNlY3VyaXR5Q29udHJhY3RfX2dvb2dTdHJpbmdTZWN1cml0eVByaXZhdGVfPWU9PT1nb29nLnN0cmluZy5Db25zdC5HT09HX1NUUklOR19DT05TVFJVQ1RPUl9UT0tFTl9QUklWQVRFXyYmdHx8XCJcIix0aGlzLlNUUklOR19DT05TVF9UWVBFX01BUktFUl9fR09PR19TVFJJTkdfU0VDVVJJVFlfUFJJVkFURV89Z29vZy5zdHJpbmcuQ29uc3QuVFlQRV9NQVJLRVJffSxnb29nLnN0cmluZy5Db25zdC5wcm90b3R5cGUuaW1wbGVtZW50c0dvb2dTdHJpbmdUeXBlZFN0cmluZz0hMCxnb29nLnN0cmluZy5Db25zdC5wcm90b3R5cGUuZ2V0VHlwZWRTdHJpbmdWYWx1ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN0cmluZ0NvbnN0VmFsdWVXaXRoU2VjdXJpdHlDb250cmFjdF9fZ29vZ1N0cmluZ1NlY3VyaXR5UHJpdmF0ZV99LGdvb2cuc3RyaW5nLkNvbnN0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVyblwiQ29uc3R7XCIrdGhpcy5zdHJpbmdDb25zdFZhbHVlV2l0aFNlY3VyaXR5Q29udHJhY3RfX2dvb2dTdHJpbmdTZWN1cml0eVByaXZhdGVfK1wifVwifSxnb29nLnN0cmluZy5Db25zdC51bndyYXA9ZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBnb29nLnN0cmluZy5Db25zdCYmZS5jb25zdHJ1Y3Rvcj09PWdvb2cuc3RyaW5nLkNvbnN0JiZlLlNUUklOR19DT05TVF9UWVBFX01BUktFUl9fR09PR19TVFJJTkdfU0VDVVJJVFlfUFJJVkFURV89PT1nb29nLnN0cmluZy5Db25zdC5UWVBFX01BUktFUl8/ZS5zdHJpbmdDb25zdFZhbHVlV2l0aFNlY3VyaXR5Q29udHJhY3RfX2dvb2dTdHJpbmdTZWN1cml0eVByaXZhdGVfOihnb29nLmFzc2VydHMuZmFpbChcImV4cGVjdGVkIG9iamVjdCBvZiB0eXBlIENvbnN0LCBnb3QgJ1wiK2UrXCInXCIpLFwidHlwZV9lcnJvcjpDb25zdFwiKX0sZ29vZy5zdHJpbmcuQ29uc3QuZnJvbT1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IGdvb2cuc3RyaW5nLkNvbnN0KGdvb2cuc3RyaW5nLkNvbnN0LkdPT0dfU1RSSU5HX0NPTlNUUlVDVE9SX1RPS0VOX1BSSVZBVEVfLGUpfSxnb29nLnN0cmluZy5Db25zdC5UWVBFX01BUktFUl89e30sZ29vZy5zdHJpbmcuQ29uc3QuR09PR19TVFJJTkdfQ09OU1RSVUNUT1JfVE9LRU5fUFJJVkFURV89e30sZ29vZy5zdHJpbmcuQ29uc3QuRU1QVFk9Z29vZy5zdHJpbmcuQ29uc3QuZnJvbShcIlwiKSxnb29nLmh0bWwuU2FmZVNjcmlwdD1mdW5jdGlvbigpe3RoaXMucHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlU2FmZVNjcmlwdFdyYXBwZWRWYWx1ZV89XCJcIix0aGlzLlNBRkVfU0NSSVBUX1RZUEVfTUFSS0VSX0dPT0dfSFRNTF9TRUNVUklUWV9QUklWQVRFXz1nb29nLmh0bWwuU2FmZVNjcmlwdC5UWVBFX01BUktFUl9HT09HX0hUTUxfU0VDVVJJVFlfUFJJVkFURV99LGdvb2cuaHRtbC5TYWZlU2NyaXB0LnByb3RvdHlwZS5pbXBsZW1lbnRzR29vZ1N0cmluZ1R5cGVkU3RyaW5nPSEwLGdvb2cuaHRtbC5TYWZlU2NyaXB0LlRZUEVfTUFSS0VSX0dPT0dfSFRNTF9TRUNVUklUWV9QUklWQVRFXz17fSxnb29nLmh0bWwuU2FmZVNjcmlwdC5mcm9tQ29uc3RhbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIDA9PT0oZT1nb29nLnN0cmluZy5Db25zdC51bndyYXAoZSkpLmxlbmd0aD9nb29nLmh0bWwuU2FmZVNjcmlwdC5FTVBUWTpnb29nLmh0bWwuU2FmZVNjcmlwdC5jcmVhdGVTYWZlU2NyaXB0U2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoZSl9LGdvb2cuaHRtbC5TYWZlU2NyaXB0LmZyb21Db25zdGFudEFuZEFyZ3M9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG89W10scj0xO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspby5wdXNoKGdvb2cuaHRtbC5TYWZlU2NyaXB0LnN0cmluZ2lmeV8oYXJndW1lbnRzW3JdKSk7cmV0dXJuIGdvb2cuaHRtbC5TYWZlU2NyaXB0LmNyZWF0ZVNhZmVTY3JpcHRTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShcIihcIitnb29nLnN0cmluZy5Db25zdC51bndyYXAoZSkrXCIpKFwiK28uam9pbihcIiwgXCIpK1wiKTtcIil9LGdvb2cuaHRtbC5TYWZlU2NyaXB0LmZyb21Kc29uPWZ1bmN0aW9uKGUpe3JldHVybiBnb29nLmh0bWwuU2FmZVNjcmlwdC5jcmVhdGVTYWZlU2NyaXB0U2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoZ29vZy5odG1sLlNhZmVTY3JpcHQuc3RyaW5naWZ5XyhlKSl9LGdvb2cuaHRtbC5TYWZlU2NyaXB0LnByb3RvdHlwZS5nZXRUeXBlZFN0cmluZ1ZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlU2FmZVNjcmlwdFdyYXBwZWRWYWx1ZV8udG9TdHJpbmcoKX0sZ29vZy5ERUJVRyYmKGdvb2cuaHRtbC5TYWZlU2NyaXB0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVyblwiU2FmZVNjcmlwdHtcIit0aGlzLnByaXZhdGVEb05vdEFjY2Vzc09yRWxzZVNhZmVTY3JpcHRXcmFwcGVkVmFsdWVfK1wifVwifSksZ29vZy5odG1sLlNhZmVTY3JpcHQudW53cmFwPWZ1bmN0aW9uKGUpe3JldHVybiBnb29nLmh0bWwuU2FmZVNjcmlwdC51bndyYXBUcnVzdGVkU2NyaXB0KGUpLnRvU3RyaW5nKCl9LGdvb2cuaHRtbC5TYWZlU2NyaXB0LnVud3JhcFRydXN0ZWRTY3JpcHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBnb29nLmh0bWwuU2FmZVNjcmlwdCYmZS5jb25zdHJ1Y3Rvcj09PWdvb2cuaHRtbC5TYWZlU2NyaXB0JiZlLlNBRkVfU0NSSVBUX1RZUEVfTUFSS0VSX0dPT0dfSFRNTF9TRUNVUklUWV9QUklWQVRFXz09PWdvb2cuaHRtbC5TYWZlU2NyaXB0LlRZUEVfTUFSS0VSX0dPT0dfSFRNTF9TRUNVUklUWV9QUklWQVRFXz9lLnByaXZhdGVEb05vdEFjY2Vzc09yRWxzZVNhZmVTY3JpcHRXcmFwcGVkVmFsdWVfOihnb29nLmFzc2VydHMuZmFpbChcImV4cGVjdGVkIG9iamVjdCBvZiB0eXBlIFNhZmVTY3JpcHQsIGdvdCAnXCIrZStcIicgb2YgdHlwZSBcIitnb29nLnR5cGVPZihlKSksXCJ0eXBlX2Vycm9yOlNhZmVTY3JpcHRcIil9LGdvb2cuaHRtbC5TYWZlU2NyaXB0LnN0cmluZ2lmeV89ZnVuY3Rpb24oZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpLnJlcGxhY2UoLzwvZyxcIlxcXFx4M2NcIil9LGdvb2cuaHRtbC5TYWZlU2NyaXB0LmNyZWF0ZVNhZmVTY3JpcHRTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZT1mdW5jdGlvbihlKXtyZXR1cm4obmV3IGdvb2cuaHRtbC5TYWZlU2NyaXB0KS5pbml0U2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VfKGUpfSxnb29nLmh0bWwuU2FmZVNjcmlwdC5wcm90b3R5cGUuaW5pdFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlXz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VTYWZlU2NyaXB0V3JhcHBlZFZhbHVlXz1nb29nLmh0bWwudHJ1c3RlZHR5cGVzLlBSSVZBVEVfRE9fTk9UX0FDQ0VTU19PUl9FTFNFX1BPTElDWT9nb29nLmh0bWwudHJ1c3RlZHR5cGVzLlBSSVZBVEVfRE9fTk9UX0FDQ0VTU19PUl9FTFNFX1BPTElDWS5jcmVhdGVTY3JpcHQoZSk6ZSx0aGlzfSxnb29nLmh0bWwuU2FmZVNjcmlwdC5FTVBUWT1nb29nLmh0bWwuU2FmZVNjcmlwdC5jcmVhdGVTYWZlU2NyaXB0U2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoXCJcIiksZ29vZy5mcz17fSxnb29nLmZzLnVybD17fSxnb29nLmZzLnVybC5jcmVhdGVPYmplY3RVcmw9ZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cuZnMudXJsLmdldFVybE9iamVjdF8oKS5jcmVhdGVPYmplY3RVUkwoZSl9LGdvb2cuZnMudXJsLnJldm9rZU9iamVjdFVybD1mdW5jdGlvbihlKXtnb29nLmZzLnVybC5nZXRVcmxPYmplY3RfKCkucmV2b2tlT2JqZWN0VVJMKGUpfSxnb29nLmZzLnVybC5nZXRVcmxPYmplY3RfPWZ1bmN0aW9uKCl7dmFyIGU9Z29vZy5mcy51cmwuZmluZFVybE9iamVjdF8oKTtpZihudWxsIT1lKXJldHVybiBlO3Rocm93IEVycm9yKFwiVGhpcyBicm93c2VyIGRvZXNuJ3Qgc2VlbSB0byBzdXBwb3J0IGJsb2IgVVJMc1wiKX0sZ29vZy5mcy51cmwuZmluZFVybE9iamVjdF89ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5pc0RlZihnb29nLmdsb2JhbC5VUkwpJiZnb29nLmlzRGVmKGdvb2cuZ2xvYmFsLlVSTC5jcmVhdGVPYmplY3RVUkwpP2dvb2cuZ2xvYmFsLlVSTDpnb29nLmlzRGVmKGdvb2cuZ2xvYmFsLndlYmtpdFVSTCkmJmdvb2cuaXNEZWYoZ29vZy5nbG9iYWwud2Via2l0VVJMLmNyZWF0ZU9iamVjdFVSTCk/Z29vZy5nbG9iYWwud2Via2l0VVJMOmdvb2cuaXNEZWYoZ29vZy5nbG9iYWwuY3JlYXRlT2JqZWN0VVJMKT9nb29nLmdsb2JhbDpudWxsfSxnb29nLmZzLnVybC5icm93c2VyU3VwcG9ydHNPYmplY3RVcmxzPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPWdvb2cuZnMudXJsLmZpbmRVcmxPYmplY3RfKCl9LGdvb2cuaTE4bj17fSxnb29nLmkxOG4uYmlkaT17fSxnb29nLmkxOG4uYmlkaS5GT1JDRV9SVEw9ITEsZ29vZy5pMThuLmJpZGkuSVNfUlRMPWdvb2cuaTE4bi5iaWRpLkZPUkNFX1JUTHx8KFwiYXJcIj09Z29vZy5MT0NBTEUuc3Vic3RyaW5nKDAsMikudG9Mb3dlckNhc2UoKXx8XCJmYVwiPT1nb29nLkxPQ0FMRS5zdWJzdHJpbmcoMCwyKS50b0xvd2VyQ2FzZSgpfHxcImhlXCI9PWdvb2cuTE9DQUxFLnN1YnN0cmluZygwLDIpLnRvTG93ZXJDYXNlKCl8fFwiaXdcIj09Z29vZy5MT0NBTEUuc3Vic3RyaW5nKDAsMikudG9Mb3dlckNhc2UoKXx8XCJwc1wiPT1nb29nLkxPQ0FMRS5zdWJzdHJpbmcoMCwyKS50b0xvd2VyQ2FzZSgpfHxcInNkXCI9PWdvb2cuTE9DQUxFLnN1YnN0cmluZygwLDIpLnRvTG93ZXJDYXNlKCl8fFwidWdcIj09Z29vZy5MT0NBTEUuc3Vic3RyaW5nKDAsMikudG9Mb3dlckNhc2UoKXx8XCJ1clwiPT1nb29nLkxPQ0FMRS5zdWJzdHJpbmcoMCwyKS50b0xvd2VyQ2FzZSgpfHxcInlpXCI9PWdvb2cuTE9DQUxFLnN1YnN0cmluZygwLDIpLnRvTG93ZXJDYXNlKCkpJiYoMj09Z29vZy5MT0NBTEUubGVuZ3RofHxcIi1cIj09Z29vZy5MT0NBTEUuc3Vic3RyaW5nKDIsMyl8fFwiX1wiPT1nb29nLkxPQ0FMRS5zdWJzdHJpbmcoMiwzKSl8fDM8PWdvb2cuTE9DQUxFLmxlbmd0aCYmXCJja2JcIj09Z29vZy5MT0NBTEUuc3Vic3RyaW5nKDAsMykudG9Mb3dlckNhc2UoKSYmKDM9PWdvb2cuTE9DQUxFLmxlbmd0aHx8XCItXCI9PWdvb2cuTE9DQUxFLnN1YnN0cmluZygzLDQpfHxcIl9cIj09Z29vZy5MT0NBTEUuc3Vic3RyaW5nKDMsNCkpfHw3PD1nb29nLkxPQ0FMRS5sZW5ndGgmJihcIi1cIj09Z29vZy5MT0NBTEUuc3Vic3RyaW5nKDIsMyl8fFwiX1wiPT1nb29nLkxPQ0FMRS5zdWJzdHJpbmcoMiwzKSkmJihcImFkbG1cIj09Z29vZy5MT0NBTEUuc3Vic3RyaW5nKDMsNykudG9Mb3dlckNhc2UoKXx8XCJhcmFiXCI9PWdvb2cuTE9DQUxFLnN1YnN0cmluZygzLDcpLnRvTG93ZXJDYXNlKCl8fFwiaGViclwiPT1nb29nLkxPQ0FMRS5zdWJzdHJpbmcoMyw3KS50b0xvd2VyQ2FzZSgpfHxcIm5rb29cIj09Z29vZy5MT0NBTEUuc3Vic3RyaW5nKDMsNykudG9Mb3dlckNhc2UoKXx8XCJyb2hnXCI9PWdvb2cuTE9DQUxFLnN1YnN0cmluZygzLDcpLnRvTG93ZXJDYXNlKCl8fFwidGhhYVwiPT1nb29nLkxPQ0FMRS5zdWJzdHJpbmcoMyw3KS50b0xvd2VyQ2FzZSgpKXx8ODw9Z29vZy5MT0NBTEUubGVuZ3RoJiYoXCItXCI9PWdvb2cuTE9DQUxFLnN1YnN0cmluZygzLDQpfHxcIl9cIj09Z29vZy5MT0NBTEUuc3Vic3RyaW5nKDMsNCkpJiYoXCJhZGxtXCI9PWdvb2cuTE9DQUxFLnN1YnN0cmluZyg0LDgpLnRvTG93ZXJDYXNlKCl8fFwiYXJhYlwiPT1nb29nLkxPQ0FMRS5zdWJzdHJpbmcoNCw4KS50b0xvd2VyQ2FzZSgpfHxcImhlYnJcIj09Z29vZy5MT0NBTEUuc3Vic3RyaW5nKDQsOCkudG9Mb3dlckNhc2UoKXx8XCJua29vXCI9PWdvb2cuTE9DQUxFLnN1YnN0cmluZyg0LDgpLnRvTG93ZXJDYXNlKCl8fFwicm9oZ1wiPT1nb29nLkxPQ0FMRS5zdWJzdHJpbmcoNCw4KS50b0xvd2VyQ2FzZSgpfHxcInRoYWFcIj09Z29vZy5MT0NBTEUuc3Vic3RyaW5nKDQsOCkudG9Mb3dlckNhc2UoKSksZ29vZy5pMThuLmJpZGkuRm9ybWF0PXtMUkU6XCLigKpcIixSTEU6XCLigKtcIixQREY6XCLigKxcIixMUk06XCLigI5cIixSTE06XCLigI9cIn0sZ29vZy5pMThuLmJpZGkuRGlyPXtMVFI6MSxSVEw6LTEsTkVVVFJBTDowfSxnb29nLmkxOG4uYmlkaS5SSUdIVD1cInJpZ2h0XCIsZ29vZy5pMThuLmJpZGkuTEVGVD1cImxlZnRcIixnb29nLmkxOG4uYmlkaS5JMThOX1JJR0hUPWdvb2cuaTE4bi5iaWRpLklTX1JUTD9nb29nLmkxOG4uYmlkaS5MRUZUOmdvb2cuaTE4bi5iaWRpLlJJR0hULGdvb2cuaTE4bi5iaWRpLkkxOE5fTEVGVD1nb29nLmkxOG4uYmlkaS5JU19SVEw/Z29vZy5pMThuLmJpZGkuUklHSFQ6Z29vZy5pMThuLmJpZGkuTEVGVCxnb29nLmkxOG4uYmlkaS50b0Rpcj1mdW5jdGlvbihlLHQpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBlPzA8ZT9nb29nLmkxOG4uYmlkaS5EaXIuTFRSOjA+ZT9nb29nLmkxOG4uYmlkaS5EaXIuUlRMOnQ/bnVsbDpnb29nLmkxOG4uYmlkaS5EaXIuTkVVVFJBTDpudWxsPT1lP251bGw6ZT9nb29nLmkxOG4uYmlkaS5EaXIuUlRMOmdvb2cuaTE4bi5iaWRpLkRpci5MVFJ9LGdvb2cuaTE4bi5iaWRpLmx0ckNoYXJzXz1cIkEtWmEtesOALcOWw5gtw7bDuC3KuMyALdaQ4KSALeG/v+KAjuKwgC1cXHVkODAxXFx1ZDgwNC1cXHVkODM5XFx1ZDgzYy1cXHVkYmZm76SALe+snO+4gC3vua/vu70t77+/XCIsZ29vZy5pMThuLmJpZGkucnRsQ2hhcnNfPVwi1pEt26/bui3go7/igI9cXHVkODAyLVxcdWQ4MDNcXHVkODNhLVxcdWQ4M2LvrJ0t77e/77mwLe+7vFwiLGdvb2cuaTE4bi5iaWRpLmh0bWxTa2lwUmVnXz0vPFtePl0qPnwmW147XSs7L2csZ29vZy5pMThuLmJpZGkuc3RyaXBIdG1sSWZOZWVkZWRfPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ/ZS5yZXBsYWNlKGdvb2cuaTE4bi5iaWRpLmh0bWxTa2lwUmVnXyxcIlwiKTplfSxnb29nLmkxOG4uYmlkaS5ydGxDaGFyUmVnXz1uZXcgUmVnRXhwKFwiW1wiK2dvb2cuaTE4bi5iaWRpLnJ0bENoYXJzXytcIl1cIiksZ29vZy5pMThuLmJpZGkubHRyQ2hhclJlZ189bmV3IFJlZ0V4cChcIltcIitnb29nLmkxOG4uYmlkaS5sdHJDaGFyc18rXCJdXCIpLGdvb2cuaTE4bi5iaWRpLmhhc0FueVJ0bD1mdW5jdGlvbihlLHQpe3JldHVybiBnb29nLmkxOG4uYmlkaS5ydGxDaGFyUmVnXy50ZXN0KGdvb2cuaTE4bi5iaWRpLnN0cmlwSHRtbElmTmVlZGVkXyhlLHQpKX0sZ29vZy5pMThuLmJpZGkuaGFzUnRsQ2hhcj1nb29nLmkxOG4uYmlkaS5oYXNBbnlSdGwsZ29vZy5pMThuLmJpZGkuaGFzQW55THRyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGdvb2cuaTE4bi5iaWRpLmx0ckNoYXJSZWdfLnRlc3QoZ29vZy5pMThuLmJpZGkuc3RyaXBIdG1sSWZOZWVkZWRfKGUsdCkpfSxnb29nLmkxOG4uYmlkaS5sdHJSZV89bmV3IFJlZ0V4cChcIl5bXCIrZ29vZy5pMThuLmJpZGkubHRyQ2hhcnNfK1wiXVwiKSxnb29nLmkxOG4uYmlkaS5ydGxSZV89bmV3IFJlZ0V4cChcIl5bXCIrZ29vZy5pMThuLmJpZGkucnRsQ2hhcnNfK1wiXVwiKSxnb29nLmkxOG4uYmlkaS5pc1J0bENoYXI9ZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cuaTE4bi5iaWRpLnJ0bFJlXy50ZXN0KGUpfSxnb29nLmkxOG4uYmlkaS5pc0x0ckNoYXI9ZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cuaTE4bi5iaWRpLmx0clJlXy50ZXN0KGUpfSxnb29nLmkxOG4uYmlkaS5pc05ldXRyYWxDaGFyPWZ1bmN0aW9uKGUpe3JldHVybiFnb29nLmkxOG4uYmlkaS5pc0x0ckNoYXIoZSkmJiFnb29nLmkxOG4uYmlkaS5pc1J0bENoYXIoZSl9LGdvb2cuaTE4bi5iaWRpLmx0ckRpckNoZWNrUmVfPW5ldyBSZWdFeHAoXCJeW15cIitnb29nLmkxOG4uYmlkaS5ydGxDaGFyc18rXCJdKltcIitnb29nLmkxOG4uYmlkaS5sdHJDaGFyc18rXCJdXCIpLGdvb2cuaTE4bi5iaWRpLnJ0bERpckNoZWNrUmVfPW5ldyBSZWdFeHAoXCJeW15cIitnb29nLmkxOG4uYmlkaS5sdHJDaGFyc18rXCJdKltcIitnb29nLmkxOG4uYmlkaS5ydGxDaGFyc18rXCJdXCIpLGdvb2cuaTE4bi5iaWRpLnN0YXJ0c1dpdGhSdGw9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZ29vZy5pMThuLmJpZGkucnRsRGlyQ2hlY2tSZV8udGVzdChnb29nLmkxOG4uYmlkaS5zdHJpcEh0bWxJZk5lZWRlZF8oZSx0KSl9LGdvb2cuaTE4bi5iaWRpLmlzUnRsVGV4dD1nb29nLmkxOG4uYmlkaS5zdGFydHNXaXRoUnRsLGdvb2cuaTE4bi5iaWRpLnN0YXJ0c1dpdGhMdHI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZ29vZy5pMThuLmJpZGkubHRyRGlyQ2hlY2tSZV8udGVzdChnb29nLmkxOG4uYmlkaS5zdHJpcEh0bWxJZk5lZWRlZF8oZSx0KSl9LGdvb2cuaTE4bi5iaWRpLmlzTHRyVGV4dD1nb29nLmkxOG4uYmlkaS5zdGFydHNXaXRoTHRyLGdvb2cuaTE4bi5iaWRpLmlzUmVxdWlyZWRMdHJSZV89L15odHRwOlxcL1xcLy4qLyxnb29nLmkxOG4uYmlkaS5pc05ldXRyYWxUZXh0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9Z29vZy5pMThuLmJpZGkuc3RyaXBIdG1sSWZOZWVkZWRfKGUsdCksZ29vZy5pMThuLmJpZGkuaXNSZXF1aXJlZEx0clJlXy50ZXN0KGUpfHwhZ29vZy5pMThuLmJpZGkuaGFzQW55THRyKGUpJiYhZ29vZy5pMThuLmJpZGkuaGFzQW55UnRsKGUpfSxnb29nLmkxOG4uYmlkaS5sdHJFeGl0RGlyQ2hlY2tSZV89bmV3IFJlZ0V4cChcIltcIitnb29nLmkxOG4uYmlkaS5sdHJDaGFyc18rXCJdW15cIitnb29nLmkxOG4uYmlkaS5ydGxDaGFyc18rXCJdKiRcIiksZ29vZy5pMThuLmJpZGkucnRsRXhpdERpckNoZWNrUmVfPW5ldyBSZWdFeHAoXCJbXCIrZ29vZy5pMThuLmJpZGkucnRsQ2hhcnNfK1wiXVteXCIrZ29vZy5pMThuLmJpZGkubHRyQ2hhcnNfK1wiXSokXCIpLGdvb2cuaTE4bi5iaWRpLmVuZHNXaXRoTHRyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGdvb2cuaTE4bi5iaWRpLmx0ckV4aXREaXJDaGVja1JlXy50ZXN0KGdvb2cuaTE4bi5iaWRpLnN0cmlwSHRtbElmTmVlZGVkXyhlLHQpKX0sZ29vZy5pMThuLmJpZGkuaXNMdHJFeGl0VGV4dD1nb29nLmkxOG4uYmlkaS5lbmRzV2l0aEx0cixnb29nLmkxOG4uYmlkaS5lbmRzV2l0aFJ0bD1mdW5jdGlvbihlLHQpe3JldHVybiBnb29nLmkxOG4uYmlkaS5ydGxFeGl0RGlyQ2hlY2tSZV8udGVzdChnb29nLmkxOG4uYmlkaS5zdHJpcEh0bWxJZk5lZWRlZF8oZSx0KSl9LGdvb2cuaTE4bi5iaWRpLmlzUnRsRXhpdFRleHQ9Z29vZy5pMThuLmJpZGkuZW5kc1dpdGhSdGwsZ29vZy5pMThuLmJpZGkucnRsTG9jYWxlc1JlXz0vXihhcnxja2J8ZHZ8aGV8aXd8ZmF8bnFvfHBzfHNkfHVnfHVyfHlpfC4qWy1fXShBZGxtfEFyYWJ8SGVicnxOa29vfFJvaGd8VGhhYSkpKD8hLipbLV9dKExhdG58Q3lybCkoJHwtfF8pKSgkfC18XykvaSxnb29nLmkxOG4uYmlkaS5pc1J0bExhbmd1YWdlPWZ1bmN0aW9uKGUpe3JldHVybiBnb29nLmkxOG4uYmlkaS5ydGxMb2NhbGVzUmVfLnRlc3QoZSl9LGdvb2cuaTE4bi5iaWRpLmJyYWNrZXRHdWFyZFRleHRSZV89LyhcXCguKj9cXCkrKXwoXFxbLio/XFxdKyl8KFxcey4qP1xcfSspfCg8Lio/PispL2csZ29vZy5pMThuLmJpZGkuZ3VhcmRCcmFja2V0SW5UZXh0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ9KHZvaWQgMD09PXQ/Z29vZy5pMThuLmJpZGkuaGFzQW55UnRsKGUpOnQpP2dvb2cuaTE4bi5iaWRpLkZvcm1hdC5STE06Z29vZy5pMThuLmJpZGkuRm9ybWF0LkxSTSxlLnJlcGxhY2UoZ29vZy5pMThuLmJpZGkuYnJhY2tldEd1YXJkVGV4dFJlXyx0K1wiJCZcIit0KX0sZ29vZy5pMThuLmJpZGkuZW5mb3JjZVJ0bEluSHRtbD1mdW5jdGlvbihlKXtyZXR1cm5cIjxcIj09ZS5jaGFyQXQoMCk/ZS5yZXBsYWNlKC88XFx3Ky8sXCIkJiBkaXI9cnRsXCIpOlwiXFxuPHNwYW4gZGlyPXJ0bD5cIitlK1wiPC9zcGFuPlwifSxnb29nLmkxOG4uYmlkaS5lbmZvcmNlUnRsSW5UZXh0PWZ1bmN0aW9uKGUpe3JldHVybiBnb29nLmkxOG4uYmlkaS5Gb3JtYXQuUkxFK2UrZ29vZy5pMThuLmJpZGkuRm9ybWF0LlBERn0sZ29vZy5pMThuLmJpZGkuZW5mb3JjZUx0ckluSHRtbD1mdW5jdGlvbihlKXtyZXR1cm5cIjxcIj09ZS5jaGFyQXQoMCk/ZS5yZXBsYWNlKC88XFx3Ky8sXCIkJiBkaXI9bHRyXCIpOlwiXFxuPHNwYW4gZGlyPWx0cj5cIitlK1wiPC9zcGFuPlwifSxnb29nLmkxOG4uYmlkaS5lbmZvcmNlTHRySW5UZXh0PWZ1bmN0aW9uKGUpe3JldHVybiBnb29nLmkxOG4uYmlkaS5Gb3JtYXQuTFJFK2UrZ29vZy5pMThuLmJpZGkuRm9ybWF0LlBERn0sZ29vZy5pMThuLmJpZGkuZGltZW5zaW9uc1JlXz0vOlxccyooWy5cXGRdWy5cXHddKilcXHMrKFsuXFxkXVsuXFx3XSopXFxzKyhbLlxcZF1bLlxcd10qKVxccysoWy5cXGRdWy5cXHddKikvZyxnb29nLmkxOG4uYmlkaS5sZWZ0UmVfPS9sZWZ0L2dpLGdvb2cuaTE4bi5iaWRpLnJpZ2h0UmVfPS9yaWdodC9naSxnb29nLmkxOG4uYmlkaS50ZW1wUmVfPS8lJSUlL2csZ29vZy5pMThuLmJpZGkubWlycm9yQ1NTPWZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoZ29vZy5pMThuLmJpZGkuZGltZW5zaW9uc1JlXyxcIjokMSAkNCAkMyAkMlwiKS5yZXBsYWNlKGdvb2cuaTE4bi5iaWRpLmxlZnRSZV8sXCIlJSUlXCIpLnJlcGxhY2UoZ29vZy5pMThuLmJpZGkucmlnaHRSZV8sZ29vZy5pMThuLmJpZGkuTEVGVCkucmVwbGFjZShnb29nLmkxOG4uYmlkaS50ZW1wUmVfLGdvb2cuaTE4bi5iaWRpLlJJR0hUKX0sZ29vZy5pMThuLmJpZGkuZG91YmxlUXVvdGVTdWJzdGl0dXRlUmVfPS8oW1xcdTA1OTEtXFx1MDVmMl0pXCIvZyxnb29nLmkxOG4uYmlkaS5zaW5nbGVRdW90ZVN1YnN0aXR1dGVSZV89LyhbXFx1MDU5MS1cXHUwNWYyXSknL2csZ29vZy5pMThuLmJpZGkubm9ybWFsaXplSGVicmV3UXVvdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZShnb29nLmkxOG4uYmlkaS5kb3VibGVRdW90ZVN1YnN0aXR1dGVSZV8sXCIkMde0XCIpLnJlcGxhY2UoZ29vZy5pMThuLmJpZGkuc2luZ2xlUXVvdGVTdWJzdGl0dXRlUmVfLFwiJDHXs1wiKX0sZ29vZy5pMThuLmJpZGkud29yZFNlcGFyYXRvclJlXz0vXFxzKy8sZ29vZy5pMThuLmJpZGkuaGFzTnVtZXJhbHNSZV89L1tcXGRcXHUwNmYwLVxcdTA2ZjldLyxnb29nLmkxOG4uYmlkaS5ydGxEZXRlY3Rpb25UaHJlc2hvbGRfPS40LGdvb2cuaTE4bi5iaWRpLmVzdGltYXRlRGlyZWN0aW9uPWZ1bmN0aW9uKGUsdCl7dmFyIG89MCxyPTAsbj0hMTtmb3IoZT1nb29nLmkxOG4uYmlkaS5zdHJpcEh0bWxJZk5lZWRlZF8oZSx0KS5zcGxpdChnb29nLmkxOG4uYmlkaS53b3JkU2VwYXJhdG9yUmVfKSx0PTA7dDxlLmxlbmd0aDt0Kyspe3ZhciBzPWVbdF07Z29vZy5pMThuLmJpZGkuc3RhcnRzV2l0aFJ0bChzKT8obysrLHIrKyk6Z29vZy5pMThuLmJpZGkuaXNSZXF1aXJlZEx0clJlXy50ZXN0KHMpP249ITA6Z29vZy5pMThuLmJpZGkuaGFzQW55THRyKHMpP3IrKzpnb29nLmkxOG4uYmlkaS5oYXNOdW1lcmFsc1JlXy50ZXN0KHMpJiYobj0hMCl9cmV0dXJuIDA9PXI/bj9nb29nLmkxOG4uYmlkaS5EaXIuTFRSOmdvb2cuaTE4bi5iaWRpLkRpci5ORVVUUkFMOm8vcj5nb29nLmkxOG4uYmlkaS5ydGxEZXRlY3Rpb25UaHJlc2hvbGRfP2dvb2cuaTE4bi5iaWRpLkRpci5SVEw6Z29vZy5pMThuLmJpZGkuRGlyLkxUUn0sZ29vZy5pMThuLmJpZGkuZGV0ZWN0UnRsRGlyZWN0aW9uYWxpdHk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZ29vZy5pMThuLmJpZGkuZXN0aW1hdGVEaXJlY3Rpb24oZSx0KT09Z29vZy5pMThuLmJpZGkuRGlyLlJUTH0sZ29vZy5pMThuLmJpZGkuc2V0RWxlbWVudERpckFuZEFsaWduPWZ1bmN0aW9uKGUsdCl7ZSYmKHQ9Z29vZy5pMThuLmJpZGkudG9EaXIodCkpJiYoZS5zdHlsZS50ZXh0QWxpZ249dD09Z29vZy5pMThuLmJpZGkuRGlyLlJUTD9nb29nLmkxOG4uYmlkaS5SSUdIVDpnb29nLmkxOG4uYmlkaS5MRUZULGUuZGlyPXQ9PWdvb2cuaTE4bi5iaWRpLkRpci5SVEw/XCJydGxcIjpcImx0clwiKX0sZ29vZy5pMThuLmJpZGkuc2V0RWxlbWVudERpckJ5VGV4dERpcmVjdGlvbmFsaXR5PWZ1bmN0aW9uKGUsdCl7c3dpdGNoKGdvb2cuaTE4bi5iaWRpLmVzdGltYXRlRGlyZWN0aW9uKHQpKXtjYXNlIGdvb2cuaTE4bi5iaWRpLkRpci5MVFI6ZS5kaXI9XCJsdHJcIjticmVhaztjYXNlIGdvb2cuaTE4bi5iaWRpLkRpci5SVEw6ZS5kaXI9XCJydGxcIjticmVhaztkZWZhdWx0OmUucmVtb3ZlQXR0cmlidXRlKFwiZGlyXCIpfX0sZ29vZy5pMThuLmJpZGkuRGlyZWN0aW9uYWxTdHJpbmc9ZnVuY3Rpb24oKXt9LGdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmw9ZnVuY3Rpb24oKXt0aGlzLnByaXZhdGVEb05vdEFjY2Vzc09yRWxzZVRydXN0ZWRSZXNvdXJjZVVybFdyYXBwZWRWYWx1ZV89XCJcIix0aGlzLnRydXN0ZWRVUkxfPW51bGwsdGhpcy5UUlVTVEVEX1JFU09VUkNFX1VSTF9UWVBFX01BUktFUl9HT09HX0hUTUxfU0VDVVJJVFlfUFJJVkFURV89Z29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC5UWVBFX01BUktFUl9HT09HX0hUTUxfU0VDVVJJVFlfUFJJVkFURV99LGdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwucHJvdG90eXBlLmltcGxlbWVudHNHb29nU3RyaW5nVHlwZWRTdHJpbmc9ITAsZ29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC5wcm90b3R5cGUuZ2V0VHlwZWRTdHJpbmdWYWx1ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnByaXZhdGVEb05vdEFjY2Vzc09yRWxzZVRydXN0ZWRSZXNvdXJjZVVybFdyYXBwZWRWYWx1ZV8udG9TdHJpbmcoKX0sZ29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC5wcm90b3R5cGUuaW1wbGVtZW50c0dvb2dJMThuQmlkaURpcmVjdGlvbmFsU3RyaW5nPSEwLGdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwucHJvdG90eXBlLmdldERpcmVjdGlvbj1mdW5jdGlvbigpe3JldHVybiBnb29nLmkxOG4uYmlkaS5EaXIuTFRSfSxnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLnByb3RvdHlwZS5jbG9uZVdpdGhQYXJhbXM9ZnVuY3Rpb24oZSx0KXt2YXIgbz1nb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLnVud3JhcCh0aGlzKSxyPShvPWdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwuVVJMX1BBUkFNX1BBUlNFUl8uZXhlYyhvKSlbM118fFwiXCI7cmV0dXJuIGdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwuY3JlYXRlVHJ1c3RlZFJlc291cmNlVXJsU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2Uob1sxXStnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLnN0cmluZ2lmeVBhcmFtc18oXCI/XCIsb1syXXx8XCJcIixlKStnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLnN0cmluZ2lmeVBhcmFtc18oXCIjXCIscix0KSl9LGdvb2cuREVCVUcmJihnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVyblwiVHJ1c3RlZFJlc291cmNlVXJse1wiK3RoaXMucHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlVHJ1c3RlZFJlc291cmNlVXJsV3JhcHBlZFZhbHVlXytcIn1cIn0pLGdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwudW53cmFwPWZ1bmN0aW9uKGUpe3JldHVybiBnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLnVud3JhcFRydXN0ZWRTY3JpcHRVUkwoZSkudG9TdHJpbmcoKX0sZ29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC51bndyYXBUcnVzdGVkU2NyaXB0VVJMPWZ1bmN0aW9uKGUpe3JldHVybiBlIGluc3RhbmNlb2YgZ29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybCYmZS5jb25zdHJ1Y3Rvcj09PWdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwmJmUuVFJVU1RFRF9SRVNPVVJDRV9VUkxfVFlQRV9NQVJLRVJfR09PR19IVE1MX1NFQ1VSSVRZX1BSSVZBVEVfPT09Z29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC5UWVBFX01BUktFUl9HT09HX0hUTUxfU0VDVVJJVFlfUFJJVkFURV8/ZS5wcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VUcnVzdGVkUmVzb3VyY2VVcmxXcmFwcGVkVmFsdWVfOihnb29nLmFzc2VydHMuZmFpbChcImV4cGVjdGVkIG9iamVjdCBvZiB0eXBlIFRydXN0ZWRSZXNvdXJjZVVybCwgZ290ICdcIitlK1wiJyBvZiB0eXBlIFwiK2dvb2cudHlwZU9mKGUpKSxcInR5cGVfZXJyb3I6VHJ1c3RlZFJlc291cmNlVXJsXCIpfSxnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLnVud3JhcFRydXN0ZWRVUkw9ZnVuY3Rpb24oZSl7cmV0dXJuIGUudHJ1c3RlZFVSTF8/ZS50cnVzdGVkVVJMXzpnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLnVud3JhcChlKX0sZ29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC5mb3JtYXQ9ZnVuY3Rpb24oZSx0KXt2YXIgbz1nb29nLnN0cmluZy5Db25zdC51bndyYXAoZSk7aWYoIWdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwuQkFTRV9VUkxfLnRlc3QobykpdGhyb3cgRXJyb3IoXCJJbnZhbGlkIFRydXN0ZWRSZXNvdXJjZVVybCBmb3JtYXQ6IFwiK28pO3JldHVybiBlPW8ucmVwbGFjZShnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLkZPUk1BVF9NQVJLRVJfLChmdW5jdGlvbihlLHIpe2lmKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxyKSl0aHJvdyBFcnJvcignRm91bmQgbWFya2VyLCBcIicrcisnXCIsIGluIGZvcm1hdCBzdHJpbmcsIFwiJytvKydcIiwgYnV0IG5vIHZhbGlkIGxhYmVsIG1hcHBpbmcgZm91bmQgaW4gYXJnczogJytKU09OLnN0cmluZ2lmeSh0KSk7cmV0dXJuKGU9dFtyXSlpbnN0YW5jZW9mIGdvb2cuc3RyaW5nLkNvbnN0P2dvb2cuc3RyaW5nLkNvbnN0LnVud3JhcChlKTplbmNvZGVVUklDb21wb25lbnQoU3RyaW5nKGUpKX0pKSxnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLmNyZWF0ZVRydXN0ZWRSZXNvdXJjZVVybFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKGUpfSxnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLkZPUk1BVF9NQVJLRVJfPS8leyhcXHcrKX0vZyxnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLkJBU0VfVVJMXz0vXigoaHR0cHM6KT9cXC9cXC9bMC05YS16LjpbXFxdLV0rXFwvfFxcL1teL1xcXFxdfFteOi9cXFxcJV0rXFwvfFteOi9cXFxcJV0qWz8jXXxhYm91dDpibGFuayMpL2ksZ29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC5VUkxfUEFSQU1fUEFSU0VSXz0vXihbXj8jXSopKFxcP1teI10qKT8oI1tcXHNcXFNdKik/Lyxnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLmZvcm1hdFdpdGhQYXJhbXM9ZnVuY3Rpb24oZSx0LG8scil7cmV0dXJuIGdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwuZm9ybWF0KGUsdCkuY2xvbmVXaXRoUGFyYW1zKG8scil9LGdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwuZnJvbUNvbnN0YW50PWZ1bmN0aW9uKGUpe3JldHVybiBnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLmNyZWF0ZVRydXN0ZWRSZXNvdXJjZVVybFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKGdvb2cuc3RyaW5nLkNvbnN0LnVud3JhcChlKSl9LGdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwuZnJvbUNvbnN0YW50cz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9XCJcIixvPTA7bzxlLmxlbmd0aDtvKyspdCs9Z29vZy5zdHJpbmcuQ29uc3QudW53cmFwKGVbb10pO3JldHVybiBnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLmNyZWF0ZVRydXN0ZWRSZXNvdXJjZVVybFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKHQpfSxnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLlRZUEVfTUFSS0VSX0dPT0dfSFRNTF9TRUNVUklUWV9QUklWQVRFXz17fSxnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLmNyZWF0ZVRydXN0ZWRSZXNvdXJjZVVybFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlPWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsO3JldHVybiB0LnByaXZhdGVEb05vdEFjY2Vzc09yRWxzZVRydXN0ZWRSZXNvdXJjZVVybFdyYXBwZWRWYWx1ZV89Z29vZy5odG1sLnRydXN0ZWR0eXBlcy5QUklWQVRFX0RPX05PVF9BQ0NFU1NfT1JfRUxTRV9QT0xJQ1k/Z29vZy5odG1sLnRydXN0ZWR0eXBlcy5QUklWQVRFX0RPX05PVF9BQ0NFU1NfT1JfRUxTRV9QT0xJQ1kuY3JlYXRlU2NyaXB0VVJMKGUpOmUsZ29vZy5odG1sLnRydXN0ZWR0eXBlcy5QUklWQVRFX0RPX05PVF9BQ0NFU1NfT1JfRUxTRV9QT0xJQ1kmJih0LnRydXN0ZWRVUkxfPWdvb2cuaHRtbC50cnVzdGVkdHlwZXMuUFJJVkFURV9ET19OT1RfQUNDRVNTX09SX0VMU0VfUE9MSUNZLmNyZWF0ZVVSTChlKSksdH0sZ29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC5zdHJpbmdpZnlQYXJhbXNfPWZ1bmN0aW9uKGUsdCxvKXtpZihudWxsPT1vKXJldHVybiB0O2lmKGdvb2cuaXNTdHJpbmcobykpcmV0dXJuIG8/ZStlbmNvZGVVUklDb21wb25lbnQobyk6XCJcIjtmb3IodmFyIHIgaW4gbyl7dmFyIG49b1tyXTtuPWdvb2cuaXNBcnJheShuKT9uOltuXTtmb3IodmFyIHM9MDtzPG4ubGVuZ3RoO3MrKyl7dmFyIGk9bltzXTtudWxsIT1pJiYodHx8KHQ9ZSksdCs9KHQubGVuZ3RoPmUubGVuZ3RoP1wiJlwiOlwiXCIpK2VuY29kZVVSSUNvbXBvbmVudChyKStcIj1cIitlbmNvZGVVUklDb21wb25lbnQoU3RyaW5nKGkpKSl9fXJldHVybiB0fSxnb29nLnN0cmluZy5pbnRlcm5hbD17fSxnb29nLnN0cmluZy5pbnRlcm5hbC5zdGFydHNXaXRoPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIDA9PWUubGFzdEluZGV4T2YodCwwKX0sZ29vZy5zdHJpbmcuaW50ZXJuYWwuZW5kc1dpdGg9ZnVuY3Rpb24oZSx0KXt2YXIgbz1lLmxlbmd0aC10Lmxlbmd0aDtyZXR1cm4gMDw9byYmZS5pbmRleE9mKHQsbyk9PW99LGdvb2cuc3RyaW5nLmludGVybmFsLmNhc2VJbnNlbnNpdGl2ZVN0YXJ0c1dpdGg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gMD09Z29vZy5zdHJpbmcuaW50ZXJuYWwuY2FzZUluc2Vuc2l0aXZlQ29tcGFyZSh0LGUuc3Vic3RyKDAsdC5sZW5ndGgpKX0sZ29vZy5zdHJpbmcuaW50ZXJuYWwuY2FzZUluc2Vuc2l0aXZlRW5kc1dpdGg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gMD09Z29vZy5zdHJpbmcuaW50ZXJuYWwuY2FzZUluc2Vuc2l0aXZlQ29tcGFyZSh0LGUuc3Vic3RyKGUubGVuZ3RoLXQubGVuZ3RoLHQubGVuZ3RoKSl9LGdvb2cuc3RyaW5nLmludGVybmFsLmNhc2VJbnNlbnNpdGl2ZUVxdWFscz1mdW5jdGlvbihlLHQpe3JldHVybiBlLnRvTG93ZXJDYXNlKCk9PXQudG9Mb3dlckNhc2UoKX0sZ29vZy5zdHJpbmcuaW50ZXJuYWwuaXNFbXB0eU9yV2hpdGVzcGFjZT1mdW5jdGlvbihlKXtyZXR1cm4vXltcXHNcXHhhMF0qJC8udGVzdChlKX0sZ29vZy5zdHJpbmcuaW50ZXJuYWwudHJpbT1nb29nLlRSVVNURURfU0lURSYmU3RyaW5nLnByb3RvdHlwZS50cmltP2Z1bmN0aW9uKGUpe3JldHVybiBlLnRyaW0oKX06ZnVuY3Rpb24oZSl7cmV0dXJuL15bXFxzXFx4YTBdKihbXFxzXFxTXSo/KVtcXHNcXHhhMF0qJC8uZXhlYyhlKVsxXX0sZ29vZy5zdHJpbmcuaW50ZXJuYWwuY2FzZUluc2Vuc2l0aXZlQ29tcGFyZT1mdW5jdGlvbihlLHQpe3JldHVybihlPVN0cmluZyhlKS50b0xvd2VyQ2FzZSgpKTwodD1TdHJpbmcodCkudG9Mb3dlckNhc2UoKSk/LTE6ZT09dD8wOjF9LGdvb2cuc3RyaW5nLmludGVybmFsLm5ld0xpbmVUb0JyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUucmVwbGFjZSgvKFxcclxcbnxcXHJ8XFxuKS9nLHQ/XCI8YnIgLz5cIjpcIjxicj5cIil9LGdvb2cuc3RyaW5nLmludGVybmFsLmh0bWxFc2NhcGU9ZnVuY3Rpb24oZSx0KXtpZih0KWU9ZS5yZXBsYWNlKGdvb2cuc3RyaW5nLmludGVybmFsLkFNUF9SRV8sXCImYW1wO1wiKS5yZXBsYWNlKGdvb2cuc3RyaW5nLmludGVybmFsLkxUX1JFXyxcIiZsdDtcIikucmVwbGFjZShnb29nLnN0cmluZy5pbnRlcm5hbC5HVF9SRV8sXCImZ3Q7XCIpLnJlcGxhY2UoZ29vZy5zdHJpbmcuaW50ZXJuYWwuUVVPVF9SRV8sXCImcXVvdDtcIikucmVwbGFjZShnb29nLnN0cmluZy5pbnRlcm5hbC5TSU5HTEVfUVVPVEVfUkVfLFwiJiMzOTtcIikucmVwbGFjZShnb29nLnN0cmluZy5pbnRlcm5hbC5OVUxMX1JFXyxcIiYjMDtcIik7ZWxzZXtpZighZ29vZy5zdHJpbmcuaW50ZXJuYWwuQUxMX1JFXy50ZXN0KGUpKXJldHVybiBlOy0xIT1lLmluZGV4T2YoXCImXCIpJiYoZT1lLnJlcGxhY2UoZ29vZy5zdHJpbmcuaW50ZXJuYWwuQU1QX1JFXyxcIiZhbXA7XCIpKSwtMSE9ZS5pbmRleE9mKFwiPFwiKSYmKGU9ZS5yZXBsYWNlKGdvb2cuc3RyaW5nLmludGVybmFsLkxUX1JFXyxcIiZsdDtcIikpLC0xIT1lLmluZGV4T2YoXCI+XCIpJiYoZT1lLnJlcGxhY2UoZ29vZy5zdHJpbmcuaW50ZXJuYWwuR1RfUkVfLFwiJmd0O1wiKSksLTEhPWUuaW5kZXhPZignXCInKSYmKGU9ZS5yZXBsYWNlKGdvb2cuc3RyaW5nLmludGVybmFsLlFVT1RfUkVfLFwiJnF1b3Q7XCIpKSwtMSE9ZS5pbmRleE9mKFwiJ1wiKSYmKGU9ZS5yZXBsYWNlKGdvb2cuc3RyaW5nLmludGVybmFsLlNJTkdMRV9RVU9URV9SRV8sXCImIzM5O1wiKSksLTEhPWUuaW5kZXhPZihcIlxcMFwiKSYmKGU9ZS5yZXBsYWNlKGdvb2cuc3RyaW5nLmludGVybmFsLk5VTExfUkVfLFwiJiMwO1wiKSl9cmV0dXJuIGV9LGdvb2cuc3RyaW5nLmludGVybmFsLkFNUF9SRV89LyYvZyxnb29nLnN0cmluZy5pbnRlcm5hbC5MVF9SRV89LzwvZyxnb29nLnN0cmluZy5pbnRlcm5hbC5HVF9SRV89Lz4vZyxnb29nLnN0cmluZy5pbnRlcm5hbC5RVU9UX1JFXz0vXCIvZyxnb29nLnN0cmluZy5pbnRlcm5hbC5TSU5HTEVfUVVPVEVfUkVfPS8nL2csZ29vZy5zdHJpbmcuaW50ZXJuYWwuTlVMTF9SRV89L1xceDAwL2csZ29vZy5zdHJpbmcuaW50ZXJuYWwuQUxMX1JFXz0vW1xceDAwJjw+XCInXS8sZ29vZy5zdHJpbmcuaW50ZXJuYWwud2hpdGVzcGFjZUVzY2FwZT1mdW5jdGlvbihlLHQpe3JldHVybiBnb29nLnN0cmluZy5pbnRlcm5hbC5uZXdMaW5lVG9CcihlLnJlcGxhY2UoLyAgL2csXCIgJiMxNjA7XCIpLHQpfSxnb29nLnN0cmluZy5pbnRlcm5hbC5jb250YWlucz1mdW5jdGlvbihlLHQpe3JldHVybi0xIT1lLmluZGV4T2YodCl9LGdvb2cuc3RyaW5nLmludGVybmFsLmNhc2VJbnNlbnNpdGl2ZUNvbnRhaW5zPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGdvb2cuc3RyaW5nLmludGVybmFsLmNvbnRhaW5zKGUudG9Mb3dlckNhc2UoKSx0LnRvTG93ZXJDYXNlKCkpfSxnb29nLnN0cmluZy5pbnRlcm5hbC5jb21wYXJlVmVyc2lvbnM9ZnVuY3Rpb24oZSx0KXt2YXIgbz0wO2U9Z29vZy5zdHJpbmcuaW50ZXJuYWwudHJpbShTdHJpbmcoZSkpLnNwbGl0KFwiLlwiKSx0PWdvb2cuc3RyaW5nLmludGVybmFsLnRyaW0oU3RyaW5nKHQpKS5zcGxpdChcIi5cIik7Zm9yKHZhciByPU1hdGgubWF4KGUubGVuZ3RoLHQubGVuZ3RoKSxuPTA7MD09byYmbjxyO24rKyl7dmFyIHM9ZVtuXXx8XCJcIixpPXRbbl18fFwiXCI7ZG97aWYocz0vKFxcZCopKFxcRCopKC4qKS8uZXhlYyhzKXx8W1wiXCIsXCJcIixcIlwiLFwiXCJdLGk9LyhcXGQqKShcXEQqKSguKikvLmV4ZWMoaSl8fFtcIlwiLFwiXCIsXCJcIixcIlwiXSwwPT1zWzBdLmxlbmd0aCYmMD09aVswXS5sZW5ndGgpYnJlYWs7bz0wPT1zWzFdLmxlbmd0aD8wOnBhcnNlSW50KHNbMV0sMTApO3ZhciBhPTA9PWlbMV0ubGVuZ3RoPzA6cGFyc2VJbnQoaVsxXSwxMCk7bz1nb29nLnN0cmluZy5pbnRlcm5hbC5jb21wYXJlRWxlbWVudHNfKG8sYSl8fGdvb2cuc3RyaW5nLmludGVybmFsLmNvbXBhcmVFbGVtZW50c18oMD09c1syXS5sZW5ndGgsMD09aVsyXS5sZW5ndGgpfHxnb29nLnN0cmluZy5pbnRlcm5hbC5jb21wYXJlRWxlbWVudHNfKHNbMl0saVsyXSkscz1zWzNdLGk9aVszXX13aGlsZSgwPT1vKX1yZXR1cm4gb30sZ29vZy5zdHJpbmcuaW50ZXJuYWwuY29tcGFyZUVsZW1lbnRzXz1mdW5jdGlvbihlLHQpe3JldHVybiBlPHQ/LTE6ZT50PzE6MH0sZ29vZy5odG1sLlNhZmVVcmw9ZnVuY3Rpb24oKXt0aGlzLnByaXZhdGVEb05vdEFjY2Vzc09yRWxzZVNhZmVVcmxXcmFwcGVkVmFsdWVfPVwiXCIsdGhpcy5TQUZFX1VSTF9UWVBFX01BUktFUl9HT09HX0hUTUxfU0VDVVJJVFlfUFJJVkFURV89Z29vZy5odG1sLlNhZmVVcmwuVFlQRV9NQVJLRVJfR09PR19IVE1MX1NFQ1VSSVRZX1BSSVZBVEVffSxnb29nLmh0bWwuU2FmZVVybC5JTk5PQ1VPVVNfU1RSSU5HPVwiYWJvdXQ6aW52YWxpZCN6Q2xvc3VyZXpcIixnb29nLmh0bWwuU2FmZVVybC5wcm90b3R5cGUuaW1wbGVtZW50c0dvb2dTdHJpbmdUeXBlZFN0cmluZz0hMCxnb29nLmh0bWwuU2FmZVVybC5wcm90b3R5cGUuZ2V0VHlwZWRTdHJpbmdWYWx1ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnByaXZhdGVEb05vdEFjY2Vzc09yRWxzZVNhZmVVcmxXcmFwcGVkVmFsdWVfLnRvU3RyaW5nKCl9LGdvb2cuaHRtbC5TYWZlVXJsLnByb3RvdHlwZS5pbXBsZW1lbnRzR29vZ0kxOG5CaWRpRGlyZWN0aW9uYWxTdHJpbmc9ITAsZ29vZy5odG1sLlNhZmVVcmwucHJvdG90eXBlLmdldERpcmVjdGlvbj1mdW5jdGlvbigpe3JldHVybiBnb29nLmkxOG4uYmlkaS5EaXIuTFRSfSxnb29nLkRFQlVHJiYoZ29vZy5odG1sLlNhZmVVcmwucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuXCJTYWZlVXJse1wiK3RoaXMucHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlU2FmZVVybFdyYXBwZWRWYWx1ZV8rXCJ9XCJ9KSxnb29nLmh0bWwuU2FmZVVybC51bndyYXA9ZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cuaHRtbC5TYWZlVXJsLnVud3JhcFRydXN0ZWRVUkwoZSkudG9TdHJpbmcoKX0sZ29vZy5odG1sLlNhZmVVcmwudW53cmFwVHJ1c3RlZFVSTD1mdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIGdvb2cuaHRtbC5TYWZlVXJsJiZlLmNvbnN0cnVjdG9yPT09Z29vZy5odG1sLlNhZmVVcmwmJmUuU0FGRV9VUkxfVFlQRV9NQVJLRVJfR09PR19IVE1MX1NFQ1VSSVRZX1BSSVZBVEVfPT09Z29vZy5odG1sLlNhZmVVcmwuVFlQRV9NQVJLRVJfR09PR19IVE1MX1NFQ1VSSVRZX1BSSVZBVEVfP2UucHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlU2FmZVVybFdyYXBwZWRWYWx1ZV86KGdvb2cuYXNzZXJ0cy5mYWlsKFwiZXhwZWN0ZWQgb2JqZWN0IG9mIHR5cGUgU2FmZVVybCwgZ290ICdcIitlK1wiJyBvZiB0eXBlIFwiK2dvb2cudHlwZU9mKGUpKSxcInR5cGVfZXJyb3I6U2FmZVVybFwiKX0sZ29vZy5odG1sLlNhZmVVcmwuZnJvbUNvbnN0YW50PWZ1bmN0aW9uKGUpe3JldHVybiBnb29nLmh0bWwuU2FmZVVybC5jcmVhdGVTYWZlVXJsU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoZ29vZy5zdHJpbmcuQ29uc3QudW53cmFwKGUpKX0sZ29vZy5odG1sLlNBRkVfTUlNRV9UWVBFX1BBVFRFUk5fPS9eKD86YXVkaW9cXC8oPzozZ3BwMnwzZ3BwfGFhY3xMMTZ8bWlkaXxtcDN8bXA0fG1wZWd8b2dhfG9nZ3xvcHVzfHgtbTRhfHgtd2F2fHdhdnx3ZWJtKXxpbWFnZVxcLyg/OmJtcHxnaWZ8anBlZ3xqcGd8cG5nfHRpZmZ8d2VicHx4LWljb24pfHRleHRcXC9jc3Z8dmlkZW9cXC8oPzptcGVnfG1wNHxvZ2d8d2VibXxxdWlja3RpbWUpKSg/OjtcXHcrPSg/Olxcdyt8XCJbXFx3Oz1dK1wiKSkqJC9pLGdvb2cuaHRtbC5TYWZlVXJsLmlzU2FmZU1pbWVUeXBlPWZ1bmN0aW9uKGUpe3JldHVybiBnb29nLmh0bWwuU0FGRV9NSU1FX1RZUEVfUEFUVEVSTl8udGVzdChlKX0sZ29vZy5odG1sLlNhZmVVcmwuZnJvbUJsb2I9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9Z29vZy5odG1sLlNBRkVfTUlNRV9UWVBFX1BBVFRFUk5fLnRlc3QoZS50eXBlKT9nb29nLmZzLnVybC5jcmVhdGVPYmplY3RVcmwoZSk6Z29vZy5odG1sLlNhZmVVcmwuSU5OT0NVT1VTX1NUUklORyxnb29nLmh0bWwuU2FmZVVybC5jcmVhdGVTYWZlVXJsU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoZSl9LGdvb2cuaHRtbC5EQVRBX1VSTF9QQVRURVJOXz0vXmRhdGE6KFteLF0qKTtiYXNlNjQsW2EtejAtOStcXC9dKz0qJC9pLGdvb2cuaHRtbC5TYWZlVXJsLmZyb21EYXRhVXJsPWZ1bmN0aW9uKGUpe3ZhciB0PShlPWUucmVwbGFjZSgvKCUwQXwlMEQpL2csXCJcIikpLm1hdGNoKGdvb2cuaHRtbC5EQVRBX1VSTF9QQVRURVJOXyk7cmV0dXJuIHQ9dCYmZ29vZy5odG1sLlNBRkVfTUlNRV9UWVBFX1BBVFRFUk5fLnRlc3QodFsxXSksZ29vZy5odG1sLlNhZmVVcmwuY3JlYXRlU2FmZVVybFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKHQ/ZTpnb29nLmh0bWwuU2FmZVVybC5JTk5PQ1VPVVNfU1RSSU5HKX0sZ29vZy5odG1sLlNhZmVVcmwuZnJvbVRlbFVybD1mdW5jdGlvbihlKXtyZXR1cm4gZ29vZy5zdHJpbmcuaW50ZXJuYWwuY2FzZUluc2Vuc2l0aXZlU3RhcnRzV2l0aChlLFwidGVsOlwiKXx8KGU9Z29vZy5odG1sLlNhZmVVcmwuSU5OT0NVT1VTX1NUUklORyksZ29vZy5odG1sLlNhZmVVcmwuY3JlYXRlU2FmZVVybFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKGUpfSxnb29nLmh0bWwuU0lQX1VSTF9QQVRURVJOXz0vXnNpcFtzXT86WythLXowLTlfLiEkJSYnKlxcLz1eYHt8fX4tXStAKFthLXowLTktXStcXC4pK1thLXowLTldezIsNjN9JC9pLGdvb2cuaHRtbC5TYWZlVXJsLmZyb21TaXBVcmw9ZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cuaHRtbC5TSVBfVVJMX1BBVFRFUk5fLnRlc3QoZGVjb2RlVVJJQ29tcG9uZW50KGUpKXx8KGU9Z29vZy5odG1sLlNhZmVVcmwuSU5OT0NVT1VTX1NUUklORyksZ29vZy5odG1sLlNhZmVVcmwuY3JlYXRlU2FmZVVybFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKGUpfSxnb29nLmh0bWwuU2FmZVVybC5mcm9tRmFjZWJvb2tNZXNzZW5nZXJVcmw9ZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cuc3RyaW5nLmludGVybmFsLmNhc2VJbnNlbnNpdGl2ZVN0YXJ0c1dpdGgoZSxcImZiLW1lc3NlbmdlcjovL3NoYXJlXCIpfHwoZT1nb29nLmh0bWwuU2FmZVVybC5JTk5PQ1VPVVNfU1RSSU5HKSxnb29nLmh0bWwuU2FmZVVybC5jcmVhdGVTYWZlVXJsU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoZSl9LGdvb2cuaHRtbC5TYWZlVXJsLmZyb21XaGF0c0FwcFVybD1mdW5jdGlvbihlKXtyZXR1cm4gZ29vZy5zdHJpbmcuaW50ZXJuYWwuY2FzZUluc2Vuc2l0aXZlU3RhcnRzV2l0aChlLFwid2hhdHNhcHA6Ly9zZW5kXCIpfHwoZT1nb29nLmh0bWwuU2FmZVVybC5JTk5PQ1VPVVNfU1RSSU5HKSxnb29nLmh0bWwuU2FmZVVybC5jcmVhdGVTYWZlVXJsU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoZSl9LGdvb2cuaHRtbC5TYWZlVXJsLmZyb21TbXNVcmw9ZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cuc3RyaW5nLmludGVybmFsLmNhc2VJbnNlbnNpdGl2ZVN0YXJ0c1dpdGgoZSxcInNtczpcIikmJmdvb2cuaHRtbC5TYWZlVXJsLmlzU21zVXJsQm9keVZhbGlkXyhlKXx8KGU9Z29vZy5odG1sLlNhZmVVcmwuSU5OT0NVT1VTX1NUUklORyksZ29vZy5odG1sLlNhZmVVcmwuY3JlYXRlU2FmZVVybFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKGUpfSxnb29nLmh0bWwuU2FmZVVybC5pc1Ntc1VybEJvZHlWYWxpZF89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5pbmRleE9mKFwiI1wiKTtpZigwPHQmJihlPWUuc3Vic3RyaW5nKDAsdCkpLCEodD1lLm1hdGNoKC9bPyZdYm9keT0vZ2kpKSlyZXR1cm4hMDtpZigxPHQubGVuZ3RoKXJldHVybiExO2lmKCEoZT1lLm1hdGNoKC9bPyZdYm9keT0oW14mXSopLylbMV0pKXJldHVybiEwO3RyeXtkZWNvZGVVUklDb21wb25lbnQoZSl9Y2F0Y2goZSl7cmV0dXJuITF9cmV0dXJuL14oPzpbYS16MC05XFwtXy5+XXwlWzAtOWEtZl17Mn0pKyQvaS50ZXN0KGUpfSxnb29nLmh0bWwuU2FmZVVybC5mcm9tU3NoVXJsPWZ1bmN0aW9uKGUpe3JldHVybiBnb29nLnN0cmluZy5pbnRlcm5hbC5jYXNlSW5zZW5zaXRpdmVTdGFydHNXaXRoKGUsXCJzc2g6Ly9cIil8fChlPWdvb2cuaHRtbC5TYWZlVXJsLklOTk9DVU9VU19TVFJJTkcpLGdvb2cuaHRtbC5TYWZlVXJsLmNyZWF0ZVNhZmVVcmxTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShlKX0sZ29vZy5odG1sLlNhZmVVcmwuc2FuaXRpemVDaHJvbWVFeHRlbnNpb25Vcmw9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZ29vZy5odG1sLlNhZmVVcmwuc2FuaXRpemVFeHRlbnNpb25VcmxfKC9eY2hyb21lLWV4dGVuc2lvbjpcXC9cXC8oW15cXC9dKylcXC8vLGUsdCl9LGdvb2cuaHRtbC5TYWZlVXJsLnNhbml0aXplRmlyZWZveEV4dGVuc2lvblVybD1mdW5jdGlvbihlLHQpe3JldHVybiBnb29nLmh0bWwuU2FmZVVybC5zYW5pdGl6ZUV4dGVuc2lvblVybF8oL15tb3otZXh0ZW5zaW9uOlxcL1xcLyhbXlxcL10rKVxcLy8sZSx0KX0sZ29vZy5odG1sLlNhZmVVcmwuc2FuaXRpemVFZGdlRXh0ZW5zaW9uVXJsPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGdvb2cuaHRtbC5TYWZlVXJsLnNhbml0aXplRXh0ZW5zaW9uVXJsXygvXm1zLWJyb3dzZXItZXh0ZW5zaW9uOlxcL1xcLyhbXlxcL10rKVxcLy8sZSx0KX0sZ29vZy5odG1sLlNhZmVVcmwuc2FuaXRpemVFeHRlbnNpb25VcmxfPWZ1bmN0aW9uKGUsdCxvKXtyZXR1cm4oZT1lLmV4ZWModCkpPyhlPWVbMV0sLTE9PShvIGluc3RhbmNlb2YgZ29vZy5zdHJpbmcuQ29uc3Q/W2dvb2cuc3RyaW5nLkNvbnN0LnVud3JhcChvKV06by5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBnb29nLnN0cmluZy5Db25zdC51bndyYXAoZSl9KSkpLmluZGV4T2YoZSkmJih0PWdvb2cuaHRtbC5TYWZlVXJsLklOTk9DVU9VU19TVFJJTkcpKTp0PWdvb2cuaHRtbC5TYWZlVXJsLklOTk9DVU9VU19TVFJJTkcsZ29vZy5odG1sLlNhZmVVcmwuY3JlYXRlU2FmZVVybFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKHQpfSxnb29nLmh0bWwuU2FmZVVybC5mcm9tVHJ1c3RlZFJlc291cmNlVXJsPWZ1bmN0aW9uKGUpe3JldHVybiBnb29nLmh0bWwuU2FmZVVybC5jcmVhdGVTYWZlVXJsU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoZ29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC51bndyYXAoZSkpfSxnb29nLmh0bWwuU0FGRV9VUkxfUEFUVEVSTl89L14oPzooPzpodHRwcz98bWFpbHRvfGZ0cCk6fFteOi8/I10qKD86Wy8/I118JCkpL2ksZ29vZy5odG1sLlNhZmVVcmwuU0FGRV9VUkxfUEFUVEVSTj1nb29nLmh0bWwuU0FGRV9VUkxfUEFUVEVSTl8sZ29vZy5odG1sLlNhZmVVcmwuc2FuaXRpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBnb29nLmh0bWwuU2FmZVVybD9lOihlPVwib2JqZWN0XCI9PXR5cGVvZiBlJiZlLmltcGxlbWVudHNHb29nU3RyaW5nVHlwZWRTdHJpbmc/ZS5nZXRUeXBlZFN0cmluZ1ZhbHVlKCk6U3RyaW5nKGUpLGdvb2cuaHRtbC5TQUZFX1VSTF9QQVRURVJOXy50ZXN0KGUpfHwoZT1nb29nLmh0bWwuU2FmZVVybC5JTk5PQ1VPVVNfU1RSSU5HKSxnb29nLmh0bWwuU2FmZVVybC5jcmVhdGVTYWZlVXJsU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoZSkpfSxnb29nLmh0bWwuU2FmZVVybC5zYW5pdGl6ZUFzc2VydFVuY2hhbmdlZD1mdW5jdGlvbihlLHQpe3JldHVybiBlIGluc3RhbmNlb2YgZ29vZy5odG1sLlNhZmVVcmw/ZTooZT1cIm9iamVjdFwiPT10eXBlb2YgZSYmZS5pbXBsZW1lbnRzR29vZ1N0cmluZ1R5cGVkU3RyaW5nP2UuZ2V0VHlwZWRTdHJpbmdWYWx1ZSgpOlN0cmluZyhlKSx0JiYvXmRhdGE6L2kudGVzdChlKSYmKHQ9Z29vZy5odG1sLlNhZmVVcmwuZnJvbURhdGFVcmwoZSkpLmdldFR5cGVkU3RyaW5nVmFsdWUoKT09ZT90Oihnb29nLmFzc2VydHMuYXNzZXJ0KGdvb2cuaHRtbC5TQUZFX1VSTF9QQVRURVJOXy50ZXN0KGUpLFwiJXMgZG9lcyBub3QgbWF0Y2ggdGhlIHNhZmUgVVJMIHBhdHRlcm5cIixlKXx8KGU9Z29vZy5odG1sLlNhZmVVcmwuSU5OT0NVT1VTX1NUUklORyksZ29vZy5odG1sLlNhZmVVcmwuY3JlYXRlU2FmZVVybFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKGUpKSl9LGdvb2cuaHRtbC5TYWZlVXJsLlRZUEVfTUFSS0VSX0dPT0dfSFRNTF9TRUNVUklUWV9QUklWQVRFXz17fSxnb29nLmh0bWwuU2FmZVVybC5jcmVhdGVTYWZlVXJsU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2U9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IGdvb2cuaHRtbC5TYWZlVXJsO3JldHVybiB0LnByaXZhdGVEb05vdEFjY2Vzc09yRWxzZVNhZmVVcmxXcmFwcGVkVmFsdWVfPWdvb2cuaHRtbC50cnVzdGVkdHlwZXMuUFJJVkFURV9ET19OT1RfQUNDRVNTX09SX0VMU0VfUE9MSUNZP2dvb2cuaHRtbC50cnVzdGVkdHlwZXMuUFJJVkFURV9ET19OT1RfQUNDRVNTX09SX0VMU0VfUE9MSUNZLmNyZWF0ZVVSTChlKTplLHR9LGdvb2cuaHRtbC5TYWZlVXJsLkFCT1VUX0JMQU5LPWdvb2cuaHRtbC5TYWZlVXJsLmNyZWF0ZVNhZmVVcmxTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShcImFib3V0OmJsYW5rXCIpLGdvb2cuaHRtbC5TYWZlU3R5bGU9ZnVuY3Rpb24oKXt0aGlzLnByaXZhdGVEb05vdEFjY2Vzc09yRWxzZVNhZmVTdHlsZVdyYXBwZWRWYWx1ZV89XCJcIix0aGlzLlNBRkVfU1RZTEVfVFlQRV9NQVJLRVJfR09PR19IVE1MX1NFQ1VSSVRZX1BSSVZBVEVfPWdvb2cuaHRtbC5TYWZlU3R5bGUuVFlQRV9NQVJLRVJfR09PR19IVE1MX1NFQ1VSSVRZX1BSSVZBVEVffSxnb29nLmh0bWwuU2FmZVN0eWxlLnByb3RvdHlwZS5pbXBsZW1lbnRzR29vZ1N0cmluZ1R5cGVkU3RyaW5nPSEwLGdvb2cuaHRtbC5TYWZlU3R5bGUuVFlQRV9NQVJLRVJfR09PR19IVE1MX1NFQ1VSSVRZX1BSSVZBVEVfPXt9LGdvb2cuaHRtbC5TYWZlU3R5bGUuZnJvbUNvbnN0YW50PWZ1bmN0aW9uKGUpe3JldHVybiAwPT09KGU9Z29vZy5zdHJpbmcuQ29uc3QudW53cmFwKGUpKS5sZW5ndGg/Z29vZy5odG1sLlNhZmVTdHlsZS5FTVBUWTooZ29vZy5hc3NlcnRzLmFzc2VydChnb29nLnN0cmluZy5pbnRlcm5hbC5lbmRzV2l0aChlLFwiO1wiKSxcIkxhc3QgY2hhcmFjdGVyIG9mIHN0eWxlIHN0cmluZyBpcyBub3QgJzsnOiBcIitlKSxnb29nLmFzc2VydHMuYXNzZXJ0KGdvb2cuc3RyaW5nLmludGVybmFsLmNvbnRhaW5zKGUsXCI6XCIpLFwiU3R5bGUgc3RyaW5nIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgJzonLCB0byBzcGVjaWZ5IGEgXFxcIm5hbWU6IHZhbHVlXFxcIiBwYWlyOiBcIitlKSxnb29nLmh0bWwuU2FmZVN0eWxlLmNyZWF0ZVNhZmVTdHlsZVNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKGUpKX0sZ29vZy5odG1sLlNhZmVTdHlsZS5wcm90b3R5cGUuZ2V0VHlwZWRTdHJpbmdWYWx1ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnByaXZhdGVEb05vdEFjY2Vzc09yRWxzZVNhZmVTdHlsZVdyYXBwZWRWYWx1ZV99LGdvb2cuREVCVUcmJihnb29nLmh0bWwuU2FmZVN0eWxlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVyblwiU2FmZVN0eWxle1wiK3RoaXMucHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlU2FmZVN0eWxlV3JhcHBlZFZhbHVlXytcIn1cIn0pLGdvb2cuaHRtbC5TYWZlU3R5bGUudW53cmFwPWZ1bmN0aW9uKGUpe3JldHVybiBlIGluc3RhbmNlb2YgZ29vZy5odG1sLlNhZmVTdHlsZSYmZS5jb25zdHJ1Y3Rvcj09PWdvb2cuaHRtbC5TYWZlU3R5bGUmJmUuU0FGRV9TVFlMRV9UWVBFX01BUktFUl9HT09HX0hUTUxfU0VDVVJJVFlfUFJJVkFURV89PT1nb29nLmh0bWwuU2FmZVN0eWxlLlRZUEVfTUFSS0VSX0dPT0dfSFRNTF9TRUNVUklUWV9QUklWQVRFXz9lLnByaXZhdGVEb05vdEFjY2Vzc09yRWxzZVNhZmVTdHlsZVdyYXBwZWRWYWx1ZV86KGdvb2cuYXNzZXJ0cy5mYWlsKFwiZXhwZWN0ZWQgb2JqZWN0IG9mIHR5cGUgU2FmZVN0eWxlLCBnb3QgJ1wiK2UrXCInIG9mIHR5cGUgXCIrZ29vZy50eXBlT2YoZSkpLFwidHlwZV9lcnJvcjpTYWZlU3R5bGVcIil9LGdvb2cuaHRtbC5TYWZlU3R5bGUuY3JlYXRlU2FmZVN0eWxlU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2U9ZnVuY3Rpb24oZSl7cmV0dXJuKG5ldyBnb29nLmh0bWwuU2FmZVN0eWxlKS5pbml0U2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VfKGUpfSxnb29nLmh0bWwuU2FmZVN0eWxlLnByb3RvdHlwZS5pbml0U2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VfPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnByaXZhdGVEb05vdEFjY2Vzc09yRWxzZVNhZmVTdHlsZVdyYXBwZWRWYWx1ZV89ZSx0aGlzfSxnb29nLmh0bWwuU2FmZVN0eWxlLkVNUFRZPWdvb2cuaHRtbC5TYWZlU3R5bGUuY3JlYXRlU2FmZVN0eWxlU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoXCJcIiksZ29vZy5odG1sLlNhZmVTdHlsZS5JTk5PQ1VPVVNfU1RSSU5HPVwiekNsb3N1cmV6XCIsZ29vZy5odG1sLlNhZmVTdHlsZS5jcmVhdGU9ZnVuY3Rpb24oZSl7dmFyIHQsbz1cIlwiO2Zvcih0IGluIGUpe2lmKCEvXlstX2EtekEtWjAtOV0rJC8udGVzdCh0KSl0aHJvdyBFcnJvcihcIk5hbWUgYWxsb3dzIG9ubHkgWy1fYS16QS1aMC05XSwgZ290OiBcIit0KTt2YXIgcj1lW3RdO251bGwhPXImJihvKz10K1wiOlwiKyhyPWdvb2cuaXNBcnJheShyKT9nb29nLmFycmF5Lm1hcChyLGdvb2cuaHRtbC5TYWZlU3R5bGUuc2FuaXRpemVQcm9wZXJ0eVZhbHVlXykuam9pbihcIiBcIik6Z29vZy5odG1sLlNhZmVTdHlsZS5zYW5pdGl6ZVByb3BlcnR5VmFsdWVfKHIpKStcIjtcIil9cmV0dXJuIG8/Z29vZy5odG1sLlNhZmVTdHlsZS5jcmVhdGVTYWZlU3R5bGVTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShvKTpnb29nLmh0bWwuU2FmZVN0eWxlLkVNUFRZfSxnb29nLmh0bWwuU2FmZVN0eWxlLnNhbml0aXplUHJvcGVydHlWYWx1ZV89ZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIGdvb2cuaHRtbC5TYWZlVXJsKXJldHVybid1cmwoXCInK2dvb2cuaHRtbC5TYWZlVXJsLnVud3JhcChlKS5yZXBsYWNlKC88L2csXCIlM2NcIikucmVwbGFjZSgvW1xcXFxcIl0vZyxcIlxcXFwkJlwiKSsnXCIpJztpZihlPWUgaW5zdGFuY2VvZiBnb29nLnN0cmluZy5Db25zdD9nb29nLnN0cmluZy5Db25zdC51bndyYXAoZSk6Z29vZy5odG1sLlNhZmVTdHlsZS5zYW5pdGl6ZVByb3BlcnR5VmFsdWVTdHJpbmdfKFN0cmluZyhlKSksL1t7O31dLy50ZXN0KGUpKXRocm93IG5ldyBnb29nLmFzc2VydHMuQXNzZXJ0aW9uRXJyb3IoXCJWYWx1ZSBkb2VzIG5vdCBhbGxvdyBbezt9XSwgZ290OiAlcy5cIixbZV0pO3JldHVybiBlfSxnb29nLmh0bWwuU2FmZVN0eWxlLnNhbml0aXplUHJvcGVydHlWYWx1ZVN0cmluZ189ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZXBsYWNlKGdvb2cuaHRtbC5TYWZlU3R5bGUuRlVOQ1RJT05TX1JFXyxcIiQxXCIpLnJlcGxhY2UoZ29vZy5odG1sLlNhZmVTdHlsZS5GVU5DVElPTlNfUkVfLFwiJDFcIikucmVwbGFjZShnb29nLmh0bWwuU2FmZVN0eWxlLlVSTF9SRV8sXCJ1cmxcIik7cmV0dXJuIGdvb2cuaHRtbC5TYWZlU3R5bGUuVkFMVUVfUkVfLnRlc3QodCk/Z29vZy5odG1sLlNhZmVTdHlsZS5DT01NRU5UX1JFXy50ZXN0KGUpPyhnb29nLmFzc2VydHMuZmFpbChcIlN0cmluZyB2YWx1ZSBkaXNhbGxvd3MgY29tbWVudHMsIGdvdDogXCIrZSksZ29vZy5odG1sLlNhZmVTdHlsZS5JTk5PQ1VPVVNfU1RSSU5HKTpnb29nLmh0bWwuU2FmZVN0eWxlLmhhc0JhbGFuY2VkUXVvdGVzXyhlKT9nb29nLmh0bWwuU2FmZVN0eWxlLmhhc0JhbGFuY2VkU3F1YXJlQnJhY2tldHNfKGUpP2dvb2cuaHRtbC5TYWZlU3R5bGUuc2FuaXRpemVVcmxfKGUpOihnb29nLmFzc2VydHMuZmFpbChcIlN0cmluZyB2YWx1ZSByZXF1aXJlcyBiYWxhbmNlZCBzcXVhcmUgYnJhY2tldHMgYW5kIG9uZSBpZGVudGlmaWVyIHBlciBwYWlyIG9mIGJyYWNrZXRzLCBnb3Q6IFwiK2UpLGdvb2cuaHRtbC5TYWZlU3R5bGUuSU5OT0NVT1VTX1NUUklORyk6KGdvb2cuYXNzZXJ0cy5mYWlsKFwiU3RyaW5nIHZhbHVlIHJlcXVpcmVzIGJhbGFuY2VkIHF1b3RlcywgZ290OiBcIitlKSxnb29nLmh0bWwuU2FmZVN0eWxlLklOTk9DVU9VU19TVFJJTkcpOihnb29nLmFzc2VydHMuZmFpbChcIlN0cmluZyB2YWx1ZSBhbGxvd3Mgb25seSBcIitnb29nLmh0bWwuU2FmZVN0eWxlLlZBTFVFX0FMTE9XRURfQ0hBUlNfK1wiIGFuZCBzaW1wbGUgZnVuY3Rpb25zLCBnb3Q6IFwiK2UpLGdvb2cuaHRtbC5TYWZlU3R5bGUuSU5OT0NVT1VTX1NUUklORyl9LGdvb2cuaHRtbC5TYWZlU3R5bGUuaGFzQmFsYW5jZWRRdW90ZXNfPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0hMCxvPSEwLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZS5jaGFyQXQocik7XCInXCI9PW4mJm8/dD0hdDonXCInPT1uJiZ0JiYobz0hbyl9cmV0dXJuIHQmJm99LGdvb2cuaHRtbC5TYWZlU3R5bGUuaGFzQmFsYW5jZWRTcXVhcmVCcmFja2V0c189ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PSEwLG89L15bLV9hLXpBLVowLTldJC8scj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lLmNoYXJBdChyKTtpZihcIl1cIj09bil7aWYodClyZXR1cm4hMTt0PSEwfWVsc2UgaWYoXCJbXCI9PW4pe2lmKCF0KXJldHVybiExO3Q9ITF9ZWxzZSBpZighdCYmIW8udGVzdChuKSlyZXR1cm4hMX1yZXR1cm4gdH0sZ29vZy5odG1sLlNhZmVTdHlsZS5WQUxVRV9BTExPV0VEX0NIQVJTXz1cIlstLC5cXFwiJyVfISMgYS16QS1aMC05XFxcXFtcXFxcXV1cIixnb29nLmh0bWwuU2FmZVN0eWxlLlZBTFVFX1JFXz1uZXcgUmVnRXhwKFwiXlwiK2dvb2cuaHRtbC5TYWZlU3R5bGUuVkFMVUVfQUxMT1dFRF9DSEFSU18rXCIrJFwiKSxnb29nLmh0bWwuU2FmZVN0eWxlLlVSTF9SRV89L1xcYih1cmxcXChbIFxcdFxcbl0qKSgnWyAtJigtXFxbXFxdLX5dKid8XCJbICEjLVxcW1xcXS1+XSpcInxbISMtJiotXFxbXFxdLX5dKikoWyBcXHRcXG5dKlxcKSkvZyxnb29nLmh0bWwuU2FmZVN0eWxlLkZVTkNUSU9OU19SRV89L1xcYihoc2x8aHNsYXxyZ2J8cmdiYXxtYXRyaXh8Y2FsY3xtaW5tYXh8Zml0LWNvbnRlbnR8cmVwZWF0fChyb3RhdGV8c2NhbGV8dHJhbnNsYXRlKShYfFl8WnwzZCk/KVxcKFstKyovMC05YS16LiVcXFtcXF0sIF0rXFwpL2csZ29vZy5odG1sLlNhZmVTdHlsZS5DT01NRU5UX1JFXz0vXFwvXFwqLyxnb29nLmh0bWwuU2FmZVN0eWxlLnNhbml0aXplVXJsXz1mdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKGdvb2cuaHRtbC5TYWZlU3R5bGUuVVJMX1JFXywoZnVuY3Rpb24oZSx0LG8scil7dmFyIG49XCJcIjtyZXR1cm4gbz1vLnJlcGxhY2UoL14oWydcIl0pKC4qKVxcMSQvLChmdW5jdGlvbihlLHQsbyl7cmV0dXJuIG49dCxvfSkpLGU9Z29vZy5odG1sLlNhZmVVcmwuc2FuaXRpemUobykuZ2V0VHlwZWRTdHJpbmdWYWx1ZSgpLHQrbitlK24rcn0pKX0sZ29vZy5odG1sLlNhZmVTdHlsZS5jb25jYXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9XCJcIixvPWZ1bmN0aW9uKGUpe2dvb2cuaXNBcnJheShlKT9nb29nLmFycmF5LmZvckVhY2goZSxvKTp0Kz1nb29nLmh0bWwuU2FmZVN0eWxlLnVud3JhcChlKX07cmV0dXJuIGdvb2cuYXJyYXkuZm9yRWFjaChhcmd1bWVudHMsbyksdD9nb29nLmh0bWwuU2FmZVN0eWxlLmNyZWF0ZVNhZmVTdHlsZVNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKHQpOmdvb2cuaHRtbC5TYWZlU3R5bGUuRU1QVFl9LGdvb2cuaHRtbC5TYWZlU3R5bGVTaGVldD1mdW5jdGlvbigpe3RoaXMucHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlU2FmZVN0eWxlU2hlZXRXcmFwcGVkVmFsdWVfPVwiXCIsdGhpcy5TQUZFX1NUWUxFX1NIRUVUX1RZUEVfTUFSS0VSX0dPT0dfSFRNTF9TRUNVUklUWV9QUklWQVRFXz1nb29nLmh0bWwuU2FmZVN0eWxlU2hlZXQuVFlQRV9NQVJLRVJfR09PR19IVE1MX1NFQ1VSSVRZX1BSSVZBVEVffSxnb29nLmh0bWwuU2FmZVN0eWxlU2hlZXQucHJvdG90eXBlLmltcGxlbWVudHNHb29nU3RyaW5nVHlwZWRTdHJpbmc9ITAsZ29vZy5odG1sLlNhZmVTdHlsZVNoZWV0LlRZUEVfTUFSS0VSX0dPT0dfSFRNTF9TRUNVUklUWV9QUklWQVRFXz17fSxnb29nLmh0bWwuU2FmZVN0eWxlU2hlZXQuY3JlYXRlUnVsZT1mdW5jdGlvbihlLHQpe2lmKGdvb2cuc3RyaW5nLmludGVybmFsLmNvbnRhaW5zKGUsXCI8XCIpKXRocm93IEVycm9yKFwiU2VsZWN0b3IgZG9lcyBub3QgYWxsb3cgJzwnLCBnb3Q6IFwiK2UpO3ZhciBvPWUucmVwbGFjZSgvKCd8XCIpKCg/IVxcMSlbXlxcclxcblxcZlxcXFxdfFxcXFxbXFxzXFxTXSkqXFwxL2csXCJcIik7aWYoIS9eWy1fYS16QS1aMC05Iy46KiAsPit+W1xcXSgpPV4kfF0rJC8udGVzdChvKSl0aHJvdyBFcnJvcihcIlNlbGVjdG9yIGFsbG93cyBvbmx5IFstX2EtekEtWjAtOSMuOiogLD4rfltcXFxcXSgpPV4kfF0gYW5kIHN0cmluZ3MsIGdvdDogXCIrZSk7aWYoIWdvb2cuaHRtbC5TYWZlU3R5bGVTaGVldC5oYXNCYWxhbmNlZEJyYWNrZXRzXyhvKSl0aHJvdyBFcnJvcihcIigpIGFuZCBbXSBpbiBzZWxlY3RvciBtdXN0IGJlIGJhbGFuY2VkLCBnb3Q6IFwiK2UpO3JldHVybiB0IGluc3RhbmNlb2YgZ29vZy5odG1sLlNhZmVTdHlsZXx8KHQ9Z29vZy5odG1sLlNhZmVTdHlsZS5jcmVhdGUodCkpLGU9ZStcIntcIitnb29nLmh0bWwuU2FmZVN0eWxlLnVud3JhcCh0KS5yZXBsYWNlKC88L2csXCJcXFxcM0MgXCIpK1wifVwiLGdvb2cuaHRtbC5TYWZlU3R5bGVTaGVldC5jcmVhdGVTYWZlU3R5bGVTaGVldFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKGUpfSxnb29nLmh0bWwuU2FmZVN0eWxlU2hlZXQuaGFzQmFsYW5jZWRCcmFja2V0c189ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXtcIihcIjpcIilcIixcIltcIjpcIl1cIn0sbz1bXSxyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07aWYodFtuXSlvLnB1c2godFtuXSk7ZWxzZSBpZihnb29nLm9iamVjdC5jb250YWlucyh0LG4pJiZvLnBvcCgpIT1uKXJldHVybiExfXJldHVybiAwPT1vLmxlbmd0aH0sZ29vZy5odG1sLlNhZmVTdHlsZVNoZWV0LmNvbmNhdD1mdW5jdGlvbihlKXt2YXIgdD1cIlwiLG89ZnVuY3Rpb24oZSl7Z29vZy5pc0FycmF5KGUpP2dvb2cuYXJyYXkuZm9yRWFjaChlLG8pOnQrPWdvb2cuaHRtbC5TYWZlU3R5bGVTaGVldC51bndyYXAoZSl9O3JldHVybiBnb29nLmFycmF5LmZvckVhY2goYXJndW1lbnRzLG8pLGdvb2cuaHRtbC5TYWZlU3R5bGVTaGVldC5jcmVhdGVTYWZlU3R5bGVTaGVldFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKHQpfSxnb29nLmh0bWwuU2FmZVN0eWxlU2hlZXQuZnJvbUNvbnN0YW50PWZ1bmN0aW9uKGUpe3JldHVybiAwPT09KGU9Z29vZy5zdHJpbmcuQ29uc3QudW53cmFwKGUpKS5sZW5ndGg/Z29vZy5odG1sLlNhZmVTdHlsZVNoZWV0LkVNUFRZOihnb29nLmFzc2VydHMuYXNzZXJ0KCFnb29nLnN0cmluZy5pbnRlcm5hbC5jb250YWlucyhlLFwiPFwiKSxcIkZvcmJpZGRlbiAnPCcgY2hhcmFjdGVyIGluIHN0eWxlIHNoZWV0IHN0cmluZzogXCIrZSksZ29vZy5odG1sLlNhZmVTdHlsZVNoZWV0LmNyZWF0ZVNhZmVTdHlsZVNoZWV0U2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoZSkpfSxnb29nLmh0bWwuU2FmZVN0eWxlU2hlZXQucHJvdG90eXBlLmdldFR5cGVkU3RyaW5nVmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VTYWZlU3R5bGVTaGVldFdyYXBwZWRWYWx1ZV99LGdvb2cuREVCVUcmJihnb29nLmh0bWwuU2FmZVN0eWxlU2hlZXQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuXCJTYWZlU3R5bGVTaGVldHtcIit0aGlzLnByaXZhdGVEb05vdEFjY2Vzc09yRWxzZVNhZmVTdHlsZVNoZWV0V3JhcHBlZFZhbHVlXytcIn1cIn0pLGdvb2cuaHRtbC5TYWZlU3R5bGVTaGVldC51bndyYXA9ZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBnb29nLmh0bWwuU2FmZVN0eWxlU2hlZXQmJmUuY29uc3RydWN0b3I9PT1nb29nLmh0bWwuU2FmZVN0eWxlU2hlZXQmJmUuU0FGRV9TVFlMRV9TSEVFVF9UWVBFX01BUktFUl9HT09HX0hUTUxfU0VDVVJJVFlfUFJJVkFURV89PT1nb29nLmh0bWwuU2FmZVN0eWxlU2hlZXQuVFlQRV9NQVJLRVJfR09PR19IVE1MX1NFQ1VSSVRZX1BSSVZBVEVfP2UucHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlU2FmZVN0eWxlU2hlZXRXcmFwcGVkVmFsdWVfOihnb29nLmFzc2VydHMuZmFpbChcImV4cGVjdGVkIG9iamVjdCBvZiB0eXBlIFNhZmVTdHlsZVNoZWV0LCBnb3QgJ1wiK2UrXCInIG9mIHR5cGUgXCIrZ29vZy50eXBlT2YoZSkpLFwidHlwZV9lcnJvcjpTYWZlU3R5bGVTaGVldFwiKX0sZ29vZy5odG1sLlNhZmVTdHlsZVNoZWV0LmNyZWF0ZVNhZmVTdHlsZVNoZWV0U2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2U9ZnVuY3Rpb24oZSl7cmV0dXJuKG5ldyBnb29nLmh0bWwuU2FmZVN0eWxlU2hlZXQpLmluaXRTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZV8oZSl9LGdvb2cuaHRtbC5TYWZlU3R5bGVTaGVldC5wcm90b3R5cGUuaW5pdFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlXz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VTYWZlU3R5bGVTaGVldFdyYXBwZWRWYWx1ZV89ZSx0aGlzfSxnb29nLmh0bWwuU2FmZVN0eWxlU2hlZXQuRU1QVFk9Z29vZy5odG1sLlNhZmVTdHlsZVNoZWV0LmNyZWF0ZVNhZmVTdHlsZVNoZWV0U2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoXCJcIiksZ29vZy5sYWJzPXt9LGdvb2cubGFicy51c2VyQWdlbnQ9e30sZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsPXt9LGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5nZXROYXRpdmVVc2VyQWdlbnRTdHJpbmdfPWZ1bmN0aW9uKCl7dmFyIGU9Z29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLmdldE5hdmlnYXRvcl8oKTtyZXR1cm4gZSYmKGU9ZS51c2VyQWdlbnQpP2U6XCJcIn0sZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLmdldE5hdmlnYXRvcl89ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5nbG9iYWwubmF2aWdhdG9yfSxnb29nLmxhYnMudXNlckFnZW50LnV0aWwudXNlckFnZW50Xz1nb29nLmxhYnMudXNlckFnZW50LnV0aWwuZ2V0TmF0aXZlVXNlckFnZW50U3RyaW5nXygpLGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5zZXRVc2VyQWdlbnQ9ZnVuY3Rpb24oZSl7Z29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLnVzZXJBZ2VudF89ZXx8Z29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLmdldE5hdGl2ZVVzZXJBZ2VudFN0cmluZ18oKX0sZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLmdldFVzZXJBZ2VudD1mdW5jdGlvbigpe3JldHVybiBnb29nLmxhYnMudXNlckFnZW50LnV0aWwudXNlckFnZW50X30sZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50PWZ1bmN0aW9uKGUpe3ZhciB0PWdvb2cubGFicy51c2VyQWdlbnQudXRpbC5nZXRVc2VyQWdlbnQoKTtyZXR1cm4gZ29vZy5zdHJpbmcuaW50ZXJuYWwuY29udGFpbnModCxlKX0sZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50SWdub3JlQ2FzZT1mdW5jdGlvbihlKXt2YXIgdD1nb29nLmxhYnMudXNlckFnZW50LnV0aWwuZ2V0VXNlckFnZW50KCk7cmV0dXJuIGdvb2cuc3RyaW5nLmludGVybmFsLmNhc2VJbnNlbnNpdGl2ZUNvbnRhaW5zKHQsZSl9LGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5leHRyYWN0VmVyc2lvblR1cGxlcz1mdW5jdGlvbihlKXtmb3IodmFyIHQsbz0vKFxcd1tcXHcgXSspXFwvKFteXFxzXSspXFxzKig/OlxcKCguKj8pXFwpKT8vZyxyPVtdO3Q9by5leGVjKGUpOylyLnB1c2goW3RbMV0sdFsyXSx0WzNdfHx2b2lkIDBdKTtyZXR1cm4gcn0sZ29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyPXt9LGdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaE9wZXJhXz1mdW5jdGlvbigpe3JldHVybiBnb29nLmxhYnMudXNlckFnZW50LnV0aWwubWF0Y2hVc2VyQWdlbnQoXCJPcGVyYVwiKX0sZ29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLm1hdGNoSUVfPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcIlRyaWRlbnRcIil8fGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcIk1TSUVcIil9LGdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaEVkZ2VIdG1sXz1mdW5jdGlvbigpe3JldHVybiBnb29nLmxhYnMudXNlckFnZW50LnV0aWwubWF0Y2hVc2VyQWdlbnQoXCJFZGdlXCIpfSxnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIubWF0Y2hFZGdlQ2hyb21pdW1fPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcIkVkZy9cIil9LGdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaE9wZXJhQ2hyb21pdW1fPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcIk9QUlwiKX0sZ29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLm1hdGNoRmlyZWZveF89ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50KFwiRmlyZWZveFwiKXx8Z29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50KFwiRnhpT1NcIil9LGdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaFNhZmFyaV89ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50KFwiU2FmYXJpXCIpJiYhKGdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaENocm9tZV8oKXx8Z29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLm1hdGNoQ29hc3RfKCl8fGdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaE9wZXJhXygpfHxnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIubWF0Y2hFZGdlSHRtbF8oKXx8Z29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLm1hdGNoRWRnZUNocm9taXVtXygpfHxnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIubWF0Y2hPcGVyYUNocm9taXVtXygpfHxnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIubWF0Y2hGaXJlZm94XygpfHxnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIuaXNTaWxrKCl8fGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcIkFuZHJvaWRcIikpfSxnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIubWF0Y2hDb2FzdF89ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50KFwiQ29hc3RcIil9LGdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaElvc1dlYnZpZXdfPWZ1bmN0aW9uKCl7cmV0dXJuKGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcImlQYWRcIil8fGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcImlQaG9uZVwiKSkmJiFnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIubWF0Y2hTYWZhcmlfKCkmJiFnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIubWF0Y2hDaHJvbWVfKCkmJiFnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIubWF0Y2hDb2FzdF8oKSYmIWdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaEZpcmVmb3hfKCkmJmdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcIkFwcGxlV2ViS2l0XCIpfSxnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIubWF0Y2hDaHJvbWVfPWZ1bmN0aW9uKCl7cmV0dXJuKGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcIkNocm9tZVwiKXx8Z29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50KFwiQ3JpT1NcIikpJiYhZ29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLm1hdGNoRWRnZUh0bWxfKCl9LGdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaEFuZHJvaWRCcm93c2VyXz1mdW5jdGlvbigpe3JldHVybiBnb29nLmxhYnMudXNlckFnZW50LnV0aWwubWF0Y2hVc2VyQWdlbnQoXCJBbmRyb2lkXCIpJiYhKGdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5pc0Nocm9tZSgpfHxnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIuaXNGaXJlZm94KCl8fGdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5pc09wZXJhKCl8fGdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5pc1NpbGsoKSl9LGdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5pc09wZXJhPWdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaE9wZXJhXyxnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIuaXNJRT1nb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIubWF0Y2hJRV8sZ29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLmlzRWRnZT1nb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIubWF0Y2hFZGdlSHRtbF8sZ29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLmlzRWRnZUNocm9taXVtPWdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaEVkZ2VDaHJvbWl1bV8sZ29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLmlzT3BlcmFDaHJvbWl1bT1nb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIubWF0Y2hPcGVyYUNocm9taXVtXyxnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIuaXNGaXJlZm94PWdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaEZpcmVmb3hfLGdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5pc1NhZmFyaT1nb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIubWF0Y2hTYWZhcmlfLGdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5pc0NvYXN0PWdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaENvYXN0Xyxnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIuaXNJb3NXZWJ2aWV3PWdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaElvc1dlYnZpZXdfLGdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5pc0Nocm9tZT1nb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIubWF0Y2hDaHJvbWVfLGdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5pc0FuZHJvaWRCcm93c2VyPWdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaEFuZHJvaWRCcm93c2VyXyxnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIuaXNTaWxrPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcIlNpbGtcIil9LGdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5nZXRWZXJzaW9uPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXtyZXR1cm4gZT1nb29nLmFycmF5LmZpbmQoZSxyKSxvW2VdfHxcIlwifXZhciB0PWdvb2cubGFicy51c2VyQWdlbnQudXRpbC5nZXRVc2VyQWdlbnQoKTtpZihnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIuaXNJRSgpKXJldHVybiBnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIuZ2V0SUVWZXJzaW9uXyh0KTt0PWdvb2cubGFicy51c2VyQWdlbnQudXRpbC5leHRyYWN0VmVyc2lvblR1cGxlcyh0KTt2YXIgbz17fTtnb29nLmFycmF5LmZvckVhY2godCwoZnVuY3Rpb24oZSl7b1tlWzBdXT1lWzFdfSkpO3ZhciByPWdvb2cucGFydGlhbChnb29nLm9iamVjdC5jb250YWluc0tleSxvKTtyZXR1cm4gZ29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLmlzT3BlcmEoKT9lKFtcIlZlcnNpb25cIixcIk9wZXJhXCJdKTpnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIuaXNFZGdlKCk/ZShbXCJFZGdlXCJdKTpnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIuaXNFZGdlQ2hyb21pdW0oKT9lKFtcIkVkZ1wiXSk6Z29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLmlzQ2hyb21lKCk/ZShbXCJDaHJvbWVcIixcIkNyaU9TXCJdKToodD10WzJdKSYmdFsxXXx8XCJcIn0sZ29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLmlzVmVyc2lvbk9ySGlnaGVyPWZ1bmN0aW9uKGUpe3JldHVybiAwPD1nb29nLnN0cmluZy5pbnRlcm5hbC5jb21wYXJlVmVyc2lvbnMoZ29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLmdldFZlcnNpb24oKSxlKX0sZ29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLmdldElFVmVyc2lvbl89ZnVuY3Rpb24oZSl7dmFyIHQ9L3J2OiAqKFtcXGRcXC5dKikvLmV4ZWMoZSk7aWYodCYmdFsxXSlyZXR1cm4gdFsxXTt0PVwiXCI7dmFyIG89L01TSUUgKyhbXFxkXFwuXSspLy5leGVjKGUpO2lmKG8mJm9bMV0paWYoZT0vVHJpZGVudFxcLyhcXGQuXFxkKS8uZXhlYyhlKSxcIjcuMFwiPT1vWzFdKWlmKGUmJmVbMV0pc3dpdGNoKGVbMV0pe2Nhc2VcIjQuMFwiOnQ9XCI4LjBcIjticmVhaztjYXNlXCI1LjBcIjp0PVwiOS4wXCI7YnJlYWs7Y2FzZVwiNi4wXCI6dD1cIjEwLjBcIjticmVhaztjYXNlXCI3LjBcIjp0PVwiMTEuMFwifWVsc2UgdD1cIjcuMFwiO2Vsc2UgdD1vWzFdO3JldHVybiB0fSxnb29nLmh0bWwuU2FmZUh0bWw9ZnVuY3Rpb24oKXt0aGlzLnByaXZhdGVEb05vdEFjY2Vzc09yRWxzZVNhZmVIdG1sV3JhcHBlZFZhbHVlXz1cIlwiLHRoaXMuU0FGRV9IVE1MX1RZUEVfTUFSS0VSX0dPT0dfSFRNTF9TRUNVUklUWV9QUklWQVRFXz1nb29nLmh0bWwuU2FmZUh0bWwuVFlQRV9NQVJLRVJfR09PR19IVE1MX1NFQ1VSSVRZX1BSSVZBVEVfLHRoaXMuZGlyXz1udWxsfSxnb29nLmh0bWwuU2FmZUh0bWwucHJvdG90eXBlLmltcGxlbWVudHNHb29nSTE4bkJpZGlEaXJlY3Rpb25hbFN0cmluZz0hMCxnb29nLmh0bWwuU2FmZUh0bWwucHJvdG90eXBlLmdldERpcmVjdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRpcl99LGdvb2cuaHRtbC5TYWZlSHRtbC5wcm90b3R5cGUuaW1wbGVtZW50c0dvb2dTdHJpbmdUeXBlZFN0cmluZz0hMCxnb29nLmh0bWwuU2FmZUh0bWwucHJvdG90eXBlLmdldFR5cGVkU3RyaW5nVmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VTYWZlSHRtbFdyYXBwZWRWYWx1ZV8udG9TdHJpbmcoKX0sZ29vZy5ERUJVRyYmKGdvb2cuaHRtbC5TYWZlSHRtbC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5cIlNhZmVIdG1se1wiK3RoaXMucHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlU2FmZUh0bWxXcmFwcGVkVmFsdWVfK1wifVwifSksZ29vZy5odG1sLlNhZmVIdG1sLnVud3JhcD1mdW5jdGlvbihlKXtyZXR1cm4gZ29vZy5odG1sLlNhZmVIdG1sLnVud3JhcFRydXN0ZWRIVE1MKGUpLnRvU3RyaW5nKCl9LGdvb2cuaHRtbC5TYWZlSHRtbC51bndyYXBUcnVzdGVkSFRNTD1mdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIGdvb2cuaHRtbC5TYWZlSHRtbCYmZS5jb25zdHJ1Y3Rvcj09PWdvb2cuaHRtbC5TYWZlSHRtbCYmZS5TQUZFX0hUTUxfVFlQRV9NQVJLRVJfR09PR19IVE1MX1NFQ1VSSVRZX1BSSVZBVEVfPT09Z29vZy5odG1sLlNhZmVIdG1sLlRZUEVfTUFSS0VSX0dPT0dfSFRNTF9TRUNVUklUWV9QUklWQVRFXz9lLnByaXZhdGVEb05vdEFjY2Vzc09yRWxzZVNhZmVIdG1sV3JhcHBlZFZhbHVlXzooZ29vZy5hc3NlcnRzLmZhaWwoXCJleHBlY3RlZCBvYmplY3Qgb2YgdHlwZSBTYWZlSHRtbCwgZ290ICdcIitlK1wiJyBvZiB0eXBlIFwiK2dvb2cudHlwZU9mKGUpKSxcInR5cGVfZXJyb3I6U2FmZUh0bWxcIil9LGdvb2cuaHRtbC5TYWZlSHRtbC5odG1sRXNjYXBlPWZ1bmN0aW9uKGUpe2lmKGUgaW5zdGFuY2VvZiBnb29nLmh0bWwuU2FmZUh0bWwpcmV0dXJuIGU7dmFyIHQ9XCJvYmplY3RcIj09dHlwZW9mIGUsbz1udWxsO3JldHVybiB0JiZlLmltcGxlbWVudHNHb29nSTE4bkJpZGlEaXJlY3Rpb25hbFN0cmluZyYmKG89ZS5nZXREaXJlY3Rpb24oKSksZT10JiZlLmltcGxlbWVudHNHb29nU3RyaW5nVHlwZWRTdHJpbmc/ZS5nZXRUeXBlZFN0cmluZ1ZhbHVlKCk6U3RyaW5nKGUpLGdvb2cuaHRtbC5TYWZlSHRtbC5jcmVhdGVTYWZlSHRtbFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKGdvb2cuc3RyaW5nLmludGVybmFsLmh0bWxFc2NhcGUoZSksbyl9LGdvb2cuaHRtbC5TYWZlSHRtbC5odG1sRXNjYXBlUHJlc2VydmluZ05ld2xpbmVzPWZ1bmN0aW9uKGUpe3JldHVybiBlIGluc3RhbmNlb2YgZ29vZy5odG1sLlNhZmVIdG1sP2U6KGU9Z29vZy5odG1sLlNhZmVIdG1sLmh0bWxFc2NhcGUoZSksZ29vZy5odG1sLlNhZmVIdG1sLmNyZWF0ZVNhZmVIdG1sU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoZ29vZy5zdHJpbmcuaW50ZXJuYWwubmV3TGluZVRvQnIoZ29vZy5odG1sLlNhZmVIdG1sLnVud3JhcChlKSksZS5nZXREaXJlY3Rpb24oKSkpfSxnb29nLmh0bWwuU2FmZUh0bWwuaHRtbEVzY2FwZVByZXNlcnZpbmdOZXdsaW5lc0FuZFNwYWNlcz1mdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIGdvb2cuaHRtbC5TYWZlSHRtbD9lOihlPWdvb2cuaHRtbC5TYWZlSHRtbC5odG1sRXNjYXBlKGUpLGdvb2cuaHRtbC5TYWZlSHRtbC5jcmVhdGVTYWZlSHRtbFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKGdvb2cuc3RyaW5nLmludGVybmFsLndoaXRlc3BhY2VFc2NhcGUoZ29vZy5odG1sLlNhZmVIdG1sLnVud3JhcChlKSksZS5nZXREaXJlY3Rpb24oKSkpfSxnb29nLmh0bWwuU2FmZUh0bWwuZnJvbT1nb29nLmh0bWwuU2FmZUh0bWwuaHRtbEVzY2FwZSxnb29nLmh0bWwuU2FmZUh0bWwuVkFMSURfTkFNRVNfSU5fVEFHXz0vXlthLXpBLVowLTktXSskLyxnb29nLmh0bWwuU2FmZUh0bWwuVVJMX0FUVFJJQlVURVNfPXthY3Rpb246ITAsY2l0ZTohMCxkYXRhOiEwLGZvcm1hY3Rpb246ITAsaHJlZjohMCxtYW5pZmVzdDohMCxwb3N0ZXI6ITAsc3JjOiEwfSxnb29nLmh0bWwuU2FmZUh0bWwuTk9UX0FMTE9XRURfVEFHX05BTUVTXz17QVBQTEVUOiEwLEJBU0U6ITAsRU1CRUQ6ITAsSUZSQU1FOiEwLExJTks6ITAsTUFUSDohMCxNRVRBOiEwLE9CSkVDVDohMCxTQ1JJUFQ6ITAsU1RZTEU6ITAsU1ZHOiEwLFRFTVBMQVRFOiEwfSxnb29nLmh0bWwuU2FmZUh0bWwuY3JlYXRlPWZ1bmN0aW9uKGUsdCxvKXtyZXR1cm4gZ29vZy5odG1sLlNhZmVIdG1sLnZlcmlmeVRhZ05hbWUoU3RyaW5nKGUpKSxnb29nLmh0bWwuU2FmZUh0bWwuY3JlYXRlU2FmZUh0bWxUYWdTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShTdHJpbmcoZSksdCxvKX0sZ29vZy5odG1sLlNhZmVIdG1sLnZlcmlmeVRhZ05hbWU9ZnVuY3Rpb24oZSl7aWYoIWdvb2cuaHRtbC5TYWZlSHRtbC5WQUxJRF9OQU1FU19JTl9UQUdfLnRlc3QoZSkpdGhyb3cgRXJyb3IoXCJJbnZhbGlkIHRhZyBuYW1lIDxcIitlK1wiPi5cIik7aWYoZS50b1VwcGVyQ2FzZSgpaW4gZ29vZy5odG1sLlNhZmVIdG1sLk5PVF9BTExPV0VEX1RBR19OQU1FU18pdGhyb3cgRXJyb3IoXCJUYWcgbmFtZSA8XCIrZStcIj4gaXMgbm90IGFsbG93ZWQgZm9yIFNhZmVIdG1sLlwiKX0sZ29vZy5odG1sLlNhZmVIdG1sLmNyZWF0ZUlmcmFtZT1mdW5jdGlvbihlLHQsbyxyKXtlJiZnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLnVud3JhcChlKTt2YXIgbj17fTtyZXR1cm4gbi5zcmM9ZXx8bnVsbCxuLnNyY2RvYz10JiZnb29nLmh0bWwuU2FmZUh0bWwudW53cmFwKHQpLGU9Z29vZy5odG1sLlNhZmVIdG1sLmNvbWJpbmVBdHRyaWJ1dGVzKG4se3NhbmRib3g6XCJcIn0sbyksZ29vZy5odG1sLlNhZmVIdG1sLmNyZWF0ZVNhZmVIdG1sVGFnU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoXCJpZnJhbWVcIixlLHIpfSxnb29nLmh0bWwuU2FmZUh0bWwuY3JlYXRlU2FuZGJveElmcmFtZT1mdW5jdGlvbihlLHQsbyxyKXtpZighZ29vZy5odG1sLlNhZmVIdG1sLmNhblVzZVNhbmRib3hJZnJhbWUoKSl0aHJvdyBFcnJvcihcIlRoZSBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgc2FuZGJveGVkIGlmcmFtZXMuXCIpO3ZhciBuPXt9O3JldHVybiBuLnNyYz1lP2dvb2cuaHRtbC5TYWZlVXJsLnVud3JhcChnb29nLmh0bWwuU2FmZVVybC5zYW5pdGl6ZShlKSk6bnVsbCxuLnNyY2RvYz10fHxudWxsLG4uc2FuZGJveD1cIlwiLGU9Z29vZy5odG1sLlNhZmVIdG1sLmNvbWJpbmVBdHRyaWJ1dGVzKG4se30sbyksZ29vZy5odG1sLlNhZmVIdG1sLmNyZWF0ZVNhZmVIdG1sVGFnU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoXCJpZnJhbWVcIixlLHIpfSxnb29nLmh0bWwuU2FmZUh0bWwuY2FuVXNlU2FuZGJveElmcmFtZT1mdW5jdGlvbigpe3JldHVybiBnb29nLmdsb2JhbC5IVE1MSUZyYW1lRWxlbWVudCYmXCJzYW5kYm94XCJpbiBnb29nLmdsb2JhbC5IVE1MSUZyYW1lRWxlbWVudC5wcm90b3R5cGV9LGdvb2cuaHRtbC5TYWZlSHRtbC5jcmVhdGVTY3JpcHRTcmM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZ29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC51bndyYXAoZSksZT1nb29nLmh0bWwuU2FmZUh0bWwuY29tYmluZUF0dHJpYnV0ZXMoe3NyYzplfSx7fSx0KSxnb29nLmh0bWwuU2FmZUh0bWwuY3JlYXRlU2FmZUh0bWxUYWdTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShcInNjcmlwdFwiLGUpfSxnb29nLmh0bWwuU2FmZUh0bWwuY3JlYXRlU2NyaXB0PWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBvIGluIHQpe3ZhciByPW8udG9Mb3dlckNhc2UoKTtpZihcImxhbmd1YWdlXCI9PXJ8fFwic3JjXCI9PXJ8fFwidGV4dFwiPT1yfHxcInR5cGVcIj09cil0aHJvdyBFcnJvcignQ2Fubm90IHNldCBcIicrcisnXCIgYXR0cmlidXRlJyl9Zm9yKG89XCJcIixlPWdvb2cuYXJyYXkuY29uY2F0KGUpLHI9MDtyPGUubGVuZ3RoO3IrKylvKz1nb29nLmh0bWwuU2FmZVNjcmlwdC51bndyYXAoZVtyXSk7cmV0dXJuIGU9Z29vZy5odG1sLlNhZmVIdG1sLmNyZWF0ZVNhZmVIdG1sU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2Uobyxnb29nLmkxOG4uYmlkaS5EaXIuTkVVVFJBTCksZ29vZy5odG1sLlNhZmVIdG1sLmNyZWF0ZVNhZmVIdG1sVGFnU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoXCJzY3JpcHRcIix0LGUpfSxnb29nLmh0bWwuU2FmZUh0bWwuY3JlYXRlU3R5bGU9ZnVuY3Rpb24oZSx0KXt0PWdvb2cuaHRtbC5TYWZlSHRtbC5jb21iaW5lQXR0cmlidXRlcyh7dHlwZTpcInRleHQvY3NzXCJ9LHt9LHQpO3ZhciBvPVwiXCI7ZT1nb29nLmFycmF5LmNvbmNhdChlKTtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKylvKz1nb29nLmh0bWwuU2FmZVN0eWxlU2hlZXQudW53cmFwKGVbcl0pO3JldHVybiBlPWdvb2cuaHRtbC5TYWZlSHRtbC5jcmVhdGVTYWZlSHRtbFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKG8sZ29vZy5pMThuLmJpZGkuRGlyLk5FVVRSQUwpLGdvb2cuaHRtbC5TYWZlSHRtbC5jcmVhdGVTYWZlSHRtbFRhZ1NlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKFwic3R5bGVcIix0LGUpfSxnb29nLmh0bWwuU2FmZUh0bWwuY3JlYXRlTWV0YVJlZnJlc2g9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT1nb29nLmh0bWwuU2FmZVVybC51bndyYXAoZ29vZy5odG1sLlNhZmVVcmwuc2FuaXRpemUoZSkpLChnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIuaXNJRSgpfHxnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIuaXNFZGdlKCkpJiZnb29nLnN0cmluZy5pbnRlcm5hbC5jb250YWlucyhlLFwiO1wiKSYmKGU9XCInXCIrZS5yZXBsYWNlKC8nL2csXCIlMjdcIikrXCInXCIpLGdvb2cuaHRtbC5TYWZlSHRtbC5jcmVhdGVTYWZlSHRtbFRhZ1NlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKFwibWV0YVwiLHtcImh0dHAtZXF1aXZcIjpcInJlZnJlc2hcIixjb250ZW50Oih0fHwwKStcIjsgdXJsPVwiK2V9KX0sZ29vZy5odG1sLlNhZmVIdG1sLmdldEF0dHJOYW1lQW5kVmFsdWVfPWZ1bmN0aW9uKGUsdCxvKXtpZihvIGluc3RhbmNlb2YgZ29vZy5zdHJpbmcuQ29uc3Qpbz1nb29nLnN0cmluZy5Db25zdC51bndyYXAobyk7ZWxzZSBpZihcInN0eWxlXCI9PXQudG9Mb3dlckNhc2UoKSlvPWdvb2cuaHRtbC5TYWZlSHRtbC5nZXRTdHlsZVZhbHVlXyhvKTtlbHNle2lmKC9eb24vaS50ZXN0KHQpKXRocm93IEVycm9yKCdBdHRyaWJ1dGUgXCInK3QrJ1wiIHJlcXVpcmVzIGdvb2cuc3RyaW5nLkNvbnN0IHZhbHVlLCBcIicrbysnXCIgZ2l2ZW4uJyk7aWYodC50b0xvd2VyQ2FzZSgpaW4gZ29vZy5odG1sLlNhZmVIdG1sLlVSTF9BVFRSSUJVVEVTXylpZihvIGluc3RhbmNlb2YgZ29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybClvPWdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwudW53cmFwKG8pO2Vsc2UgaWYobyBpbnN0YW5jZW9mIGdvb2cuaHRtbC5TYWZlVXJsKW89Z29vZy5odG1sLlNhZmVVcmwudW53cmFwKG8pO2Vsc2V7aWYoIWdvb2cuaXNTdHJpbmcobykpdGhyb3cgRXJyb3IoJ0F0dHJpYnV0ZSBcIicrdCsnXCIgb24gdGFnIFwiJytlKydcIiByZXF1aXJlcyBnb29nLmh0bWwuU2FmZVVybCwgZ29vZy5zdHJpbmcuQ29uc3QsIG9yIHN0cmluZywgdmFsdWUgXCInK28rJ1wiIGdpdmVuLicpO289Z29vZy5odG1sLlNhZmVVcmwuc2FuaXRpemUobykuZ2V0VHlwZWRTdHJpbmdWYWx1ZSgpfX1yZXR1cm4gby5pbXBsZW1lbnRzR29vZ1N0cmluZ1R5cGVkU3RyaW5nJiYobz1vLmdldFR5cGVkU3RyaW5nVmFsdWUoKSksZ29vZy5hc3NlcnRzLmFzc2VydChnb29nLmlzU3RyaW5nKG8pfHxnb29nLmlzTnVtYmVyKG8pLFwiU3RyaW5nIG9yIG51bWJlciB2YWx1ZSBleHBlY3RlZCwgZ290IFwiK3R5cGVvZiBvK1wiIHdpdGggdmFsdWU6IFwiK28pLHQrJz1cIicrZ29vZy5zdHJpbmcuaW50ZXJuYWwuaHRtbEVzY2FwZShTdHJpbmcobykpKydcIid9LGdvb2cuaHRtbC5TYWZlSHRtbC5nZXRTdHlsZVZhbHVlXz1mdW5jdGlvbihlKXtpZighZ29vZy5pc09iamVjdChlKSl0aHJvdyBFcnJvcignVGhlIFwic3R5bGVcIiBhdHRyaWJ1dGUgcmVxdWlyZXMgZ29vZy5odG1sLlNhZmVTdHlsZSBvciBtYXAgb2Ygc3R5bGUgcHJvcGVydGllcywgJyt0eXBlb2YgZStcIiBnaXZlbjogXCIrZSk7cmV0dXJuIGUgaW5zdGFuY2VvZiBnb29nLmh0bWwuU2FmZVN0eWxlfHwoZT1nb29nLmh0bWwuU2FmZVN0eWxlLmNyZWF0ZShlKSksZ29vZy5odG1sLlNhZmVTdHlsZS51bndyYXAoZSl9LGdvb2cuaHRtbC5TYWZlSHRtbC5jcmVhdGVXaXRoRGlyPWZ1bmN0aW9uKGUsdCxvLHIpe3JldHVybih0PWdvb2cuaHRtbC5TYWZlSHRtbC5jcmVhdGUodCxvLHIpKS5kaXJfPWUsdH0sZ29vZy5odG1sLlNhZmVIdG1sLmpvaW49ZnVuY3Rpb24oZSx0KXt2YXIgbz0oZT1nb29nLmh0bWwuU2FmZUh0bWwuaHRtbEVzY2FwZShlKSkuZ2V0RGlyZWN0aW9uKCkscj1bXSxuPWZ1bmN0aW9uKGUpe2dvb2cuaXNBcnJheShlKT9nb29nLmFycmF5LmZvckVhY2goZSxuKTooZT1nb29nLmh0bWwuU2FmZUh0bWwuaHRtbEVzY2FwZShlKSxyLnB1c2goZ29vZy5odG1sLlNhZmVIdG1sLnVud3JhcChlKSksZT1lLmdldERpcmVjdGlvbigpLG89PWdvb2cuaTE4bi5iaWRpLkRpci5ORVVUUkFMP289ZTplIT1nb29nLmkxOG4uYmlkaS5EaXIuTkVVVFJBTCYmbyE9ZSYmKG89bnVsbCkpfTtyZXR1cm4gZ29vZy5hcnJheS5mb3JFYWNoKHQsbiksZ29vZy5odG1sLlNhZmVIdG1sLmNyZWF0ZVNhZmVIdG1sU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2Uoci5qb2luKGdvb2cuaHRtbC5TYWZlSHRtbC51bndyYXAoZSkpLG8pfSxnb29nLmh0bWwuU2FmZUh0bWwuY29uY2F0PWZ1bmN0aW9uKGUpe3JldHVybiBnb29nLmh0bWwuU2FmZUh0bWwuam9pbihnb29nLmh0bWwuU2FmZUh0bWwuRU1QVFksQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSl9LGdvb2cuaHRtbC5TYWZlSHRtbC5jb25jYXRXaXRoRGlyPWZ1bmN0aW9uKGUsdCl7dmFyIG89Z29vZy5odG1sLlNhZmVIdG1sLmNvbmNhdChnb29nLmFycmF5LnNsaWNlKGFyZ3VtZW50cywxKSk7cmV0dXJuIG8uZGlyXz1lLG99LGdvb2cuaHRtbC5TYWZlSHRtbC5UWVBFX01BUktFUl9HT09HX0hUTUxfU0VDVVJJVFlfUFJJVkFURV89e30sZ29vZy5odG1sLlNhZmVIdG1sLmNyZWF0ZVNhZmVIdG1sU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2U9ZnVuY3Rpb24oZSx0KXtyZXR1cm4obmV3IGdvb2cuaHRtbC5TYWZlSHRtbCkuaW5pdFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlXyhlLHQpfSxnb29nLmh0bWwuU2FmZUh0bWwucHJvdG90eXBlLmluaXRTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZV89ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5wcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VTYWZlSHRtbFdyYXBwZWRWYWx1ZV89Z29vZy5odG1sLnRydXN0ZWR0eXBlcy5QUklWQVRFX0RPX05PVF9BQ0NFU1NfT1JfRUxTRV9QT0xJQ1k/Z29vZy5odG1sLnRydXN0ZWR0eXBlcy5QUklWQVRFX0RPX05PVF9BQ0NFU1NfT1JfRUxTRV9QT0xJQ1kuY3JlYXRlSFRNTChlKTplLHRoaXMuZGlyXz10LHRoaXN9LGdvb2cuaHRtbC5TYWZlSHRtbC5jcmVhdGVTYWZlSHRtbFRhZ1NlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlPWZ1bmN0aW9uKGUsdCxvKXt2YXIgcj1udWxsLG49XCI8XCIrZStnb29nLmh0bWwuU2FmZUh0bWwuc3RyaW5naWZ5QXR0cmlidXRlcyhlLHQpO3JldHVybiBnb29nLmlzRGVmQW5kTm90TnVsbChvKT9nb29nLmlzQXJyYXkobyl8fChvPVtvXSk6bz1bXSxnb29nLmRvbS50YWdzLmlzVm9pZFRhZyhlLnRvTG93ZXJDYXNlKCkpPyhnb29nLmFzc2VydHMuYXNzZXJ0KCFvLmxlbmd0aCxcIlZvaWQgdGFnIDxcIitlK1wiPiBkb2VzIG5vdCBhbGxvdyBjb250ZW50LlwiKSxuKz1cIj5cIik6KHI9Z29vZy5odG1sLlNhZmVIdG1sLmNvbmNhdChvKSxuKz1cIj5cIitnb29nLmh0bWwuU2FmZUh0bWwudW53cmFwKHIpK1wiPC9cIitlK1wiPlwiLHI9ci5nZXREaXJlY3Rpb24oKSksKGU9dCYmdC5kaXIpJiYocj0vXihsdHJ8cnRsfGF1dG8pJC9pLnRlc3QoZSk/Z29vZy5pMThuLmJpZGkuRGlyLk5FVVRSQUw6bnVsbCksZ29vZy5odG1sLlNhZmVIdG1sLmNyZWF0ZVNhZmVIdG1sU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UobixyKX0sZ29vZy5odG1sLlNhZmVIdG1sLnN0cmluZ2lmeUF0dHJpYnV0ZXM9ZnVuY3Rpb24oZSx0KXt2YXIgbz1cIlwiO2lmKHQpZm9yKHZhciByIGluIHQpe2lmKCFnb29nLmh0bWwuU2FmZUh0bWwuVkFMSURfTkFNRVNfSU5fVEFHXy50ZXN0KHIpKXRocm93IEVycm9yKCdJbnZhbGlkIGF0dHJpYnV0ZSBuYW1lIFwiJytyKydcIi4nKTt2YXIgbj10W3JdO2dvb2cuaXNEZWZBbmROb3ROdWxsKG4pJiYobys9XCIgXCIrZ29vZy5odG1sLlNhZmVIdG1sLmdldEF0dHJOYW1lQW5kVmFsdWVfKGUscixuKSl9cmV0dXJuIG99LGdvb2cuaHRtbC5TYWZlSHRtbC5jb21iaW5lQXR0cmlidXRlcz1mdW5jdGlvbihlLHQsbyl7dmFyIHIsbj17fTtmb3IociBpbiBlKWdvb2cuYXNzZXJ0cy5hc3NlcnQoci50b0xvd2VyQ2FzZSgpPT1yLFwiTXVzdCBiZSBsb3dlciBjYXNlXCIpLG5bcl09ZVtyXTtmb3IociBpbiB0KWdvb2cuYXNzZXJ0cy5hc3NlcnQoci50b0xvd2VyQ2FzZSgpPT1yLFwiTXVzdCBiZSBsb3dlciBjYXNlXCIpLG5bcl09dFtyXTtmb3IociBpbiBvKXt2YXIgcz1yLnRvTG93ZXJDYXNlKCk7aWYocyBpbiBlKXRocm93IEVycm9yKCdDYW5ub3Qgb3ZlcnJpZGUgXCInK3MrJ1wiIGF0dHJpYnV0ZSwgZ290IFwiJytyKydcIiB3aXRoIHZhbHVlIFwiJytvW3JdKydcIicpO3MgaW4gdCYmZGVsZXRlIG5bc10sbltyXT1vW3JdfXJldHVybiBufSxnb29nLmh0bWwuU2FmZUh0bWwuRE9DVFlQRV9IVE1MPWdvb2cuaHRtbC5TYWZlSHRtbC5jcmVhdGVTYWZlSHRtbFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKFwiPCFET0NUWVBFIGh0bWw+XCIsZ29vZy5pMThuLmJpZGkuRGlyLk5FVVRSQUwpLGdvb2cuaHRtbC5TYWZlSHRtbC5FTVBUWT1nb29nLmh0bWwuU2FmZUh0bWwuY3JlYXRlU2FmZUh0bWxTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShcIlwiLGdvb2cuaTE4bi5iaWRpLkRpci5ORVVUUkFMKSxnb29nLmh0bWwuU2FmZUh0bWwuQlI9Z29vZy5odG1sLlNhZmVIdG1sLmNyZWF0ZVNhZmVIdG1sU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoXCI8YnI+XCIsZ29vZy5pMThuLmJpZGkuRGlyLk5FVVRSQUwpLGdvb2cuaHRtbC51bmNoZWNrZWRjb252ZXJzaW9ucz17fSxnb29nLmh0bWwudW5jaGVja2VkY29udmVyc2lvbnMuc2FmZUh0bWxGcm9tU3RyaW5nS25vd25Ub1NhdGlzZnlUeXBlQ29udHJhY3Q9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiBnb29nLmFzc2VydHMuYXNzZXJ0U3RyaW5nKGdvb2cuc3RyaW5nLkNvbnN0LnVud3JhcChlKSxcIm11c3QgcHJvdmlkZSBqdXN0aWZpY2F0aW9uXCIpLGdvb2cuYXNzZXJ0cy5hc3NlcnQoIWdvb2cuc3RyaW5nLmludGVybmFsLmlzRW1wdHlPcldoaXRlc3BhY2UoZ29vZy5zdHJpbmcuQ29uc3QudW53cmFwKGUpKSxcIm11c3QgcHJvdmlkZSBub24tZW1wdHkganVzdGlmaWNhdGlvblwiKSxnb29nLmh0bWwuU2FmZUh0bWwuY3JlYXRlU2FmZUh0bWxTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZSh0LG98fG51bGwpfSxnb29nLmh0bWwudW5jaGVja2VkY29udmVyc2lvbnMuc2FmZVNjcmlwdEZyb21TdHJpbmdLbm93blRvU2F0aXNmeVR5cGVDb250cmFjdD1mdW5jdGlvbihlLHQpe3JldHVybiBnb29nLmFzc2VydHMuYXNzZXJ0U3RyaW5nKGdvb2cuc3RyaW5nLkNvbnN0LnVud3JhcChlKSxcIm11c3QgcHJvdmlkZSBqdXN0aWZpY2F0aW9uXCIpLGdvb2cuYXNzZXJ0cy5hc3NlcnQoIWdvb2cuc3RyaW5nLmludGVybmFsLmlzRW1wdHlPcldoaXRlc3BhY2UoZ29vZy5zdHJpbmcuQ29uc3QudW53cmFwKGUpKSxcIm11c3QgcHJvdmlkZSBub24tZW1wdHkganVzdGlmaWNhdGlvblwiKSxnb29nLmh0bWwuU2FmZVNjcmlwdC5jcmVhdGVTYWZlU2NyaXB0U2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UodCl9LGdvb2cuaHRtbC51bmNoZWNrZWRjb252ZXJzaW9ucy5zYWZlU3R5bGVGcm9tU3RyaW5nS25vd25Ub1NhdGlzZnlUeXBlQ29udHJhY3Q9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZ29vZy5hc3NlcnRzLmFzc2VydFN0cmluZyhnb29nLnN0cmluZy5Db25zdC51bndyYXAoZSksXCJtdXN0IHByb3ZpZGUganVzdGlmaWNhdGlvblwiKSxnb29nLmFzc2VydHMuYXNzZXJ0KCFnb29nLnN0cmluZy5pbnRlcm5hbC5pc0VtcHR5T3JXaGl0ZXNwYWNlKGdvb2cuc3RyaW5nLkNvbnN0LnVud3JhcChlKSksXCJtdXN0IHByb3ZpZGUgbm9uLWVtcHR5IGp1c3RpZmljYXRpb25cIiksZ29vZy5odG1sLlNhZmVTdHlsZS5jcmVhdGVTYWZlU3R5bGVTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZSh0KX0sZ29vZy5odG1sLnVuY2hlY2tlZGNvbnZlcnNpb25zLnNhZmVTdHlsZVNoZWV0RnJvbVN0cmluZ0tub3duVG9TYXRpc2Z5VHlwZUNvbnRyYWN0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5hc3NlcnRTdHJpbmcoZ29vZy5zdHJpbmcuQ29uc3QudW53cmFwKGUpLFwibXVzdCBwcm92aWRlIGp1c3RpZmljYXRpb25cIiksZ29vZy5hc3NlcnRzLmFzc2VydCghZ29vZy5zdHJpbmcuaW50ZXJuYWwuaXNFbXB0eU9yV2hpdGVzcGFjZShnb29nLnN0cmluZy5Db25zdC51bndyYXAoZSkpLFwibXVzdCBwcm92aWRlIG5vbi1lbXB0eSBqdXN0aWZpY2F0aW9uXCIpLGdvb2cuaHRtbC5TYWZlU3R5bGVTaGVldC5jcmVhdGVTYWZlU3R5bGVTaGVldFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKHQpfSxnb29nLmh0bWwudW5jaGVja2VkY29udmVyc2lvbnMuc2FmZVVybEZyb21TdHJpbmdLbm93blRvU2F0aXNmeVR5cGVDb250cmFjdD1mdW5jdGlvbihlLHQpe3JldHVybiBnb29nLmFzc2VydHMuYXNzZXJ0U3RyaW5nKGdvb2cuc3RyaW5nLkNvbnN0LnVud3JhcChlKSxcIm11c3QgcHJvdmlkZSBqdXN0aWZpY2F0aW9uXCIpLGdvb2cuYXNzZXJ0cy5hc3NlcnQoIWdvb2cuc3RyaW5nLmludGVybmFsLmlzRW1wdHlPcldoaXRlc3BhY2UoZ29vZy5zdHJpbmcuQ29uc3QudW53cmFwKGUpKSxcIm11c3QgcHJvdmlkZSBub24tZW1wdHkganVzdGlmaWNhdGlvblwiKSxnb29nLmh0bWwuU2FmZVVybC5jcmVhdGVTYWZlVXJsU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UodCl9LGdvb2cuaHRtbC51bmNoZWNrZWRjb252ZXJzaW9ucy50cnVzdGVkUmVzb3VyY2VVcmxGcm9tU3RyaW5nS25vd25Ub1NhdGlzZnlUeXBlQ29udHJhY3Q9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZ29vZy5hc3NlcnRzLmFzc2VydFN0cmluZyhnb29nLnN0cmluZy5Db25zdC51bndyYXAoZSksXCJtdXN0IHByb3ZpZGUganVzdGlmaWNhdGlvblwiKSxnb29nLmFzc2VydHMuYXNzZXJ0KCFnb29nLnN0cmluZy5pbnRlcm5hbC5pc0VtcHR5T3JXaGl0ZXNwYWNlKGdvb2cuc3RyaW5nLkNvbnN0LnVud3JhcChlKSksXCJtdXN0IHByb3ZpZGUgbm9uLWVtcHR5IGp1c3RpZmljYXRpb25cIiksZ29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC5jcmVhdGVUcnVzdGVkUmVzb3VyY2VVcmxTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZSh0KX0sZ29vZy5kb20uc2FmZT17fSxnb29nLmRvbS5zYWZlLkluc2VydEFkamFjZW50SHRtbFBvc2l0aW9uPXtBRlRFUkJFR0lOOlwiYWZ0ZXJiZWdpblwiLEFGVEVSRU5EOlwiYWZ0ZXJlbmRcIixCRUZPUkVCRUdJTjpcImJlZm9yZWJlZ2luXCIsQkVGT1JFRU5EOlwiYmVmb3JlZW5kXCJ9LGdvb2cuZG9tLnNhZmUuaW5zZXJ0QWRqYWNlbnRIdG1sPWZ1bmN0aW9uKGUsdCxvKXtlLmluc2VydEFkamFjZW50SFRNTCh0LGdvb2cuaHRtbC5TYWZlSHRtbC51bndyYXBUcnVzdGVkSFRNTChvKSl9LGdvb2cuZG9tLnNhZmUuU0VUX0lOTkVSX0hUTUxfRElTQUxMT1dFRF9UQUdTXz17TUFUSDohMCxTQ1JJUFQ6ITAsU1RZTEU6ITAsU1ZHOiEwLFRFTVBMQVRFOiEwfSxnb29nLmRvbS5zYWZlLmlzSW5uZXJIdG1sQ2xlYW51cFJlY3Vyc2l2ZV89Z29vZy5mdW5jdGlvbnMuY2FjaGVSZXR1cm5WYWx1ZSgoZnVuY3Rpb24oKXtpZihnb29nLkRFQlVHJiZcInVuZGVmaW5lZFwiPT10eXBlb2YgZG9jdW1lbnQpcmV0dXJuITE7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSx0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7cmV0dXJuIHQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSksZS5hcHBlbmRDaGlsZCh0KSwhKGdvb2cuREVCVUcmJiFlLmZpcnN0Q2hpbGR8fCh0PWUuZmlyc3RDaGlsZC5maXJzdENoaWxkLGUuaW5uZXJIVE1MPWdvb2cuaHRtbC5TYWZlSHRtbC51bndyYXBUcnVzdGVkSFRNTChnb29nLmh0bWwuU2FmZUh0bWwuRU1QVFkpLHQucGFyZW50RWxlbWVudCkpfSkpLGdvb2cuZG9tLnNhZmUudW5zYWZlU2V0SW5uZXJIdG1sRG9Ob3RVc2VPckVsc2U9ZnVuY3Rpb24oZSx0KXtpZihnb29nLmRvbS5zYWZlLmlzSW5uZXJIdG1sQ2xlYW51cFJlY3Vyc2l2ZV8oKSlmb3IoO2UubGFzdENoaWxkOyllLnJlbW92ZUNoaWxkKGUubGFzdENoaWxkKTtlLmlubmVySFRNTD1nb29nLmh0bWwuU2FmZUh0bWwudW53cmFwVHJ1c3RlZEhUTUwodCl9LGdvb2cuZG9tLnNhZmUuc2V0SW5uZXJIdG1sPWZ1bmN0aW9uKGUsdCl7aWYoZ29vZy5hc3NlcnRzLkVOQUJMRV9BU1NFUlRTKXt2YXIgbz1lLnRhZ05hbWUudG9VcHBlckNhc2UoKTtpZihnb29nLmRvbS5zYWZlLlNFVF9JTk5FUl9IVE1MX0RJU0FMTE9XRURfVEFHU19bb10pdGhyb3cgRXJyb3IoXCJnb29nLmRvbS5zYWZlLnNldElubmVySHRtbCBjYW5ub3QgYmUgdXNlZCB0byBzZXQgY29udGVudCBvZiBcIitlLnRhZ05hbWUrXCIuXCIpfWdvb2cuZG9tLnNhZmUudW5zYWZlU2V0SW5uZXJIdG1sRG9Ob3RVc2VPckVsc2UoZSx0KX0sZ29vZy5kb20uc2FmZS5zZXRPdXRlckh0bWw9ZnVuY3Rpb24oZSx0KXtlLm91dGVySFRNTD1nb29nLmh0bWwuU2FmZUh0bWwudW53cmFwVHJ1c3RlZEhUTUwodCl9LGdvb2cuZG9tLnNhZmUuc2V0Rm9ybUVsZW1lbnRBY3Rpb249ZnVuY3Rpb24oZSx0KXt0PXQgaW5zdGFuY2VvZiBnb29nLmh0bWwuU2FmZVVybD90Omdvb2cuaHRtbC5TYWZlVXJsLnNhbml0aXplQXNzZXJ0VW5jaGFuZ2VkKHQpLGdvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNIVE1MRm9ybUVsZW1lbnQoZSkuYWN0aW9uPWdvb2cuaHRtbC5TYWZlVXJsLnVud3JhcFRydXN0ZWRVUkwodCl9LGdvb2cuZG9tLnNhZmUuc2V0QnV0dG9uRm9ybUFjdGlvbj1mdW5jdGlvbihlLHQpe3Q9dCBpbnN0YW5jZW9mIGdvb2cuaHRtbC5TYWZlVXJsP3Q6Z29vZy5odG1sLlNhZmVVcmwuc2FuaXRpemVBc3NlcnRVbmNoYW5nZWQodCksZ29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0hUTUxCdXR0b25FbGVtZW50KGUpLmZvcm1BY3Rpb249Z29vZy5odG1sLlNhZmVVcmwudW53cmFwVHJ1c3RlZFVSTCh0KX0sZ29vZy5kb20uc2FmZS5zZXRJbnB1dEZvcm1BY3Rpb249ZnVuY3Rpb24oZSx0KXt0PXQgaW5zdGFuY2VvZiBnb29nLmh0bWwuU2FmZVVybD90Omdvb2cuaHRtbC5TYWZlVXJsLnNhbml0aXplQXNzZXJ0VW5jaGFuZ2VkKHQpLGdvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNIVE1MSW5wdXRFbGVtZW50KGUpLmZvcm1BY3Rpb249Z29vZy5odG1sLlNhZmVVcmwudW53cmFwVHJ1c3RlZFVSTCh0KX0sZ29vZy5kb20uc2FmZS5zZXRTdHlsZT1mdW5jdGlvbihlLHQpe2Uuc3R5bGUuY3NzVGV4dD1nb29nLmh0bWwuU2FmZVN0eWxlLnVud3JhcCh0KX0sZ29vZy5kb20uc2FmZS5kb2N1bWVudFdyaXRlPWZ1bmN0aW9uKGUsdCl7ZS53cml0ZShnb29nLmh0bWwuU2FmZUh0bWwudW53cmFwVHJ1c3RlZEhUTUwodCkpfSxnb29nLmRvbS5zYWZlLnNldEFuY2hvckhyZWY9ZnVuY3Rpb24oZSx0KXtnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzSFRNTEFuY2hvckVsZW1lbnQoZSksdD10IGluc3RhbmNlb2YgZ29vZy5odG1sLlNhZmVVcmw/dDpnb29nLmh0bWwuU2FmZVVybC5zYW5pdGl6ZUFzc2VydFVuY2hhbmdlZCh0KSxlLmhyZWY9Z29vZy5odG1sLlNhZmVVcmwudW53cmFwVHJ1c3RlZFVSTCh0KX0sZ29vZy5kb20uc2FmZS5zZXRJbWFnZVNyYz1mdW5jdGlvbihlLHQpe2lmKGdvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNIVE1MSW1hZ2VFbGVtZW50KGUpLCEodCBpbnN0YW5jZW9mIGdvb2cuaHRtbC5TYWZlVXJsKSl7dmFyIG89L15kYXRhOmltYWdlXFwvL2kudGVzdCh0KTt0PWdvb2cuaHRtbC5TYWZlVXJsLnNhbml0aXplQXNzZXJ0VW5jaGFuZ2VkKHQsbyl9ZS5zcmM9Z29vZy5odG1sLlNhZmVVcmwudW53cmFwVHJ1c3RlZFVSTCh0KX0sZ29vZy5kb20uc2FmZS5zZXRBdWRpb1NyYz1mdW5jdGlvbihlLHQpe2lmKGdvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNIVE1MQXVkaW9FbGVtZW50KGUpLCEodCBpbnN0YW5jZW9mIGdvb2cuaHRtbC5TYWZlVXJsKSl7dmFyIG89L15kYXRhOmF1ZGlvXFwvL2kudGVzdCh0KTt0PWdvb2cuaHRtbC5TYWZlVXJsLnNhbml0aXplQXNzZXJ0VW5jaGFuZ2VkKHQsbyl9ZS5zcmM9Z29vZy5odG1sLlNhZmVVcmwudW53cmFwVHJ1c3RlZFVSTCh0KX0sZ29vZy5kb20uc2FmZS5zZXRWaWRlb1NyYz1mdW5jdGlvbihlLHQpe2lmKGdvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNIVE1MVmlkZW9FbGVtZW50KGUpLCEodCBpbnN0YW5jZW9mIGdvb2cuaHRtbC5TYWZlVXJsKSl7dmFyIG89L15kYXRhOnZpZGVvXFwvL2kudGVzdCh0KTt0PWdvb2cuaHRtbC5TYWZlVXJsLnNhbml0aXplQXNzZXJ0VW5jaGFuZ2VkKHQsbyl9ZS5zcmM9Z29vZy5odG1sLlNhZmVVcmwudW53cmFwVHJ1c3RlZFVSTCh0KX0sZ29vZy5kb20uc2FmZS5zZXRFbWJlZFNyYz1mdW5jdGlvbihlLHQpe2dvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNIVE1MRW1iZWRFbGVtZW50KGUpLGUuc3JjPWdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwudW53cmFwVHJ1c3RlZFNjcmlwdFVSTCh0KX0sZ29vZy5kb20uc2FmZS5zZXRGcmFtZVNyYz1mdW5jdGlvbihlLHQpe2dvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNIVE1MRnJhbWVFbGVtZW50KGUpLGUuc3JjPWdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwudW53cmFwVHJ1c3RlZFVSTCh0KX0sZ29vZy5kb20uc2FmZS5zZXRJZnJhbWVTcmM9ZnVuY3Rpb24oZSx0KXtnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzSFRNTElGcmFtZUVsZW1lbnQoZSksZS5zcmM9Z29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC51bndyYXBUcnVzdGVkVVJMKHQpfSxnb29nLmRvbS5zYWZlLnNldElmcmFtZVNyY2RvYz1mdW5jdGlvbihlLHQpe2dvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNIVE1MSUZyYW1lRWxlbWVudChlKSxlLnNyY2RvYz1nb29nLmh0bWwuU2FmZUh0bWwudW53cmFwVHJ1c3RlZEhUTUwodCl9LGdvb2cuZG9tLnNhZmUuc2V0TGlua0hyZWZBbmRSZWw9ZnVuY3Rpb24oZSx0LG8pe2dvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNIVE1MTGlua0VsZW1lbnQoZSksZS5yZWw9byxnb29nLnN0cmluZy5pbnRlcm5hbC5jYXNlSW5zZW5zaXRpdmVDb250YWlucyhvLFwic3R5bGVzaGVldFwiKT8oZ29vZy5hc3NlcnRzLmFzc2VydCh0IGluc3RhbmNlb2YgZ29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybCwnVVJMIG11c3QgYmUgVHJ1c3RlZFJlc291cmNlVXJsIGJlY2F1c2UgXCJyZWxcIiBjb250YWlucyBcInN0eWxlc2hlZXRcIicpLGUuaHJlZj1nb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLnVud3JhcFRydXN0ZWRVUkwodCkpOmUuaHJlZj10IGluc3RhbmNlb2YgZ29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybD9nb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLnVud3JhcFRydXN0ZWRVUkwodCk6dCBpbnN0YW5jZW9mIGdvb2cuaHRtbC5TYWZlVXJsP2dvb2cuaHRtbC5TYWZlVXJsLnVud3JhcFRydXN0ZWRVUkwodCk6Z29vZy5odG1sLlNhZmVVcmwudW53cmFwVHJ1c3RlZFVSTChnb29nLmh0bWwuU2FmZVVybC5zYW5pdGl6ZUFzc2VydFVuY2hhbmdlZCh0KSl9LGdvb2cuZG9tLnNhZmUuc2V0T2JqZWN0RGF0YT1mdW5jdGlvbihlLHQpe2dvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNIVE1MT2JqZWN0RWxlbWVudChlKSxlLmRhdGE9Z29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC51bndyYXBUcnVzdGVkU2NyaXB0VVJMKHQpfSxnb29nLmRvbS5zYWZlLnNldFNjcmlwdFNyYz1mdW5jdGlvbihlLHQpe2dvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNIVE1MU2NyaXB0RWxlbWVudChlKSxlLnNyYz1nb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLnVud3JhcFRydXN0ZWRTY3JpcHRVUkwodCksKHQ9Z29vZy5nZXRTY3JpcHROb25jZSgpKSYmZS5zZXRBdHRyaWJ1dGUoXCJub25jZVwiLHQpfSxnb29nLmRvbS5zYWZlLnNldFNjcmlwdENvbnRlbnQ9ZnVuY3Rpb24oZSx0KXtnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzSFRNTFNjcmlwdEVsZW1lbnQoZSksZS50ZXh0PWdvb2cuaHRtbC5TYWZlU2NyaXB0LnVud3JhcFRydXN0ZWRTY3JpcHQodCksKHQ9Z29vZy5nZXRTY3JpcHROb25jZSgpKSYmZS5zZXRBdHRyaWJ1dGUoXCJub25jZVwiLHQpfSxnb29nLmRvbS5zYWZlLnNldExvY2F0aW9uSHJlZj1mdW5jdGlvbihlLHQpe2dvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNMb2NhdGlvbihlKSx0PXQgaW5zdGFuY2VvZiBnb29nLmh0bWwuU2FmZVVybD90Omdvb2cuaHRtbC5TYWZlVXJsLnNhbml0aXplQXNzZXJ0VW5jaGFuZ2VkKHQpLGUuaHJlZj1nb29nLmh0bWwuU2FmZVVybC51bndyYXBUcnVzdGVkVVJMKHQpfSxnb29nLmRvbS5zYWZlLmFzc2lnbkxvY2F0aW9uPWZ1bmN0aW9uKGUsdCl7Z29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0xvY2F0aW9uKGUpLHQ9dCBpbnN0YW5jZW9mIGdvb2cuaHRtbC5TYWZlVXJsP3Q6Z29vZy5odG1sLlNhZmVVcmwuc2FuaXRpemVBc3NlcnRVbmNoYW5nZWQodCksZS5hc3NpZ24oZ29vZy5odG1sLlNhZmVVcmwudW53cmFwVHJ1c3RlZFVSTCh0KSl9LGdvb2cuZG9tLnNhZmUucmVwbGFjZUxvY2F0aW9uPWZ1bmN0aW9uKGUsdCl7Z29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0xvY2F0aW9uKGUpLHQ9dCBpbnN0YW5jZW9mIGdvb2cuaHRtbC5TYWZlVXJsP3Q6Z29vZy5odG1sLlNhZmVVcmwuc2FuaXRpemVBc3NlcnRVbmNoYW5nZWQodCksZS5yZXBsYWNlKGdvb2cuaHRtbC5TYWZlVXJsLnVud3JhcFRydXN0ZWRVUkwodCkpfSxnb29nLmRvbS5zYWZlLm9wZW5JbldpbmRvdz1mdW5jdGlvbihlLHQsbyxyLG4pe3JldHVybiBlPWUgaW5zdGFuY2VvZiBnb29nLmh0bWwuU2FmZVVybD9lOmdvb2cuaHRtbC5TYWZlVXJsLnNhbml0aXplQXNzZXJ0VW5jaGFuZ2VkKGUpLCh0fHxnb29nLmdsb2JhbCkub3Blbihnb29nLmh0bWwuU2FmZVVybC51bndyYXBUcnVzdGVkVVJMKGUpLG8/Z29vZy5zdHJpbmcuQ29uc3QudW53cmFwKG8pOlwiXCIscixuKX0sZ29vZy5kb20uc2FmZS5wYXJzZUZyb21TdHJpbmdIdG1sPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGdvb2cuZG9tLnNhZmUucGFyc2VGcm9tU3RyaW5nKGUsdCxcInRleHQvaHRtbFwiKX0sZ29vZy5kb20uc2FmZS5wYXJzZUZyb21TdHJpbmc9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiBlLnBhcnNlRnJvbVN0cmluZyhnb29nLmh0bWwuU2FmZUh0bWwudW53cmFwVHJ1c3RlZEhUTUwodCksbyl9LGdvb2cuZG9tLnNhZmUuY3JlYXRlSW1hZ2VGcm9tQmxvYj1mdW5jdGlvbihlKXtpZighL15pbWFnZVxcLy4qL2cudGVzdChlLnR5cGUpKXRocm93IEVycm9yKFwiZ29vZy5kb20uc2FmZS5jcmVhdGVJbWFnZUZyb21CbG9iIG9ubHkgYWNjZXB0cyBNSU1FIHR5cGUgaW1hZ2UvLiouXCIpO3ZhciB0PWdvb2cuZ2xvYmFsLlVSTC5jcmVhdGVPYmplY3RVUkwoZSk7cmV0dXJuKGU9bmV3IGdvb2cuZ2xvYmFsLkltYWdlKS5vbmxvYWQ9ZnVuY3Rpb24oKXtnb29nLmdsb2JhbC5VUkwucmV2b2tlT2JqZWN0VVJMKHQpfSxnb29nLmRvbS5zYWZlLnNldEltYWdlU3JjKGUsZ29vZy5odG1sLnVuY2hlY2tlZGNvbnZlcnNpb25zLnNhZmVVcmxGcm9tU3RyaW5nS25vd25Ub1NhdGlzZnlUeXBlQ29udHJhY3QoZ29vZy5zdHJpbmcuQ29uc3QuZnJvbShcIkltYWdlIGJsb2IgVVJMLlwiKSx0KSksZX0sZ29vZy5zdHJpbmcuREVURUNUX0RPVUJMRV9FU0NBUElORz0hMSxnb29nLnN0cmluZy5GT1JDRV9OT05fRE9NX0hUTUxfVU5FU0NBUElORz0hMSxnb29nLnN0cmluZy5Vbmljb2RlPXtOQlNQOlwiwqBcIn0sZ29vZy5zdHJpbmcuc3RhcnRzV2l0aD1nb29nLnN0cmluZy5pbnRlcm5hbC5zdGFydHNXaXRoLGdvb2cuc3RyaW5nLmVuZHNXaXRoPWdvb2cuc3RyaW5nLmludGVybmFsLmVuZHNXaXRoLGdvb2cuc3RyaW5nLmNhc2VJbnNlbnNpdGl2ZVN0YXJ0c1dpdGg9Z29vZy5zdHJpbmcuaW50ZXJuYWwuY2FzZUluc2Vuc2l0aXZlU3RhcnRzV2l0aCxnb29nLnN0cmluZy5jYXNlSW5zZW5zaXRpdmVFbmRzV2l0aD1nb29nLnN0cmluZy5pbnRlcm5hbC5jYXNlSW5zZW5zaXRpdmVFbmRzV2l0aCxnb29nLnN0cmluZy5jYXNlSW5zZW5zaXRpdmVFcXVhbHM9Z29vZy5zdHJpbmcuaW50ZXJuYWwuY2FzZUluc2Vuc2l0aXZlRXF1YWxzLGdvb2cuc3RyaW5nLnN1YnM9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG89ZS5zcGxpdChcIiVzXCIpLHI9XCJcIixuPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtuLmxlbmd0aCYmMTxvLmxlbmd0aDspcis9by5zaGlmdCgpK24uc2hpZnQoKTtyZXR1cm4gcitvLmpvaW4oXCIlc1wiKX0sZ29vZy5zdHJpbmcuY29sbGFwc2VXaGl0ZXNwYWNlPWZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoL1tcXHNcXHhhMF0rL2csXCIgXCIpLnJlcGxhY2UoL15cXHMrfFxccyskL2csXCJcIil9LGdvb2cuc3RyaW5nLmlzRW1wdHlPcldoaXRlc3BhY2U9Z29vZy5zdHJpbmcuaW50ZXJuYWwuaXNFbXB0eU9yV2hpdGVzcGFjZSxnb29nLnN0cmluZy5pc0VtcHR5U3RyaW5nPWZ1bmN0aW9uKGUpe3JldHVybiAwPT1lLmxlbmd0aH0sZ29vZy5zdHJpbmcuaXNFbXB0eT1nb29nLnN0cmluZy5pc0VtcHR5T3JXaGl0ZXNwYWNlLGdvb2cuc3RyaW5nLmlzRW1wdHlPcldoaXRlc3BhY2VTYWZlPWZ1bmN0aW9uKGUpe3JldHVybiBnb29nLnN0cmluZy5pc0VtcHR5T3JXaGl0ZXNwYWNlKGdvb2cuc3RyaW5nLm1ha2VTYWZlKGUpKX0sZ29vZy5zdHJpbmcuaXNFbXB0eVNhZmU9Z29vZy5zdHJpbmcuaXNFbXB0eU9yV2hpdGVzcGFjZVNhZmUsZ29vZy5zdHJpbmcuaXNCcmVha2luZ1doaXRlc3BhY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIS9bXlxcdFxcblxcciBdLy50ZXN0KGUpfSxnb29nLnN0cmluZy5pc0FscGhhPWZ1bmN0aW9uKGUpe3JldHVybiEvW15hLXpBLVpdLy50ZXN0KGUpfSxnb29nLnN0cmluZy5pc051bWVyaWM9ZnVuY3Rpb24oZSl7cmV0dXJuIS9bXjAtOV0vLnRlc3QoZSl9LGdvb2cuc3RyaW5nLmlzQWxwaGFOdW1lcmljPWZ1bmN0aW9uKGUpe3JldHVybiEvW15hLXpBLVowLTldLy50ZXN0KGUpfSxnb29nLnN0cmluZy5pc1NwYWNlPWZ1bmN0aW9uKGUpe3JldHVyblwiIFwiPT1lfSxnb29nLnN0cmluZy5pc1VuaWNvZGVDaGFyPWZ1bmN0aW9uKGUpe3JldHVybiAxPT1lLmxlbmd0aCYmXCIgXCI8PWUmJlwiflwiPj1lfHxcIsKAXCI8PWUmJlwi77+9XCI+PWV9LGdvb2cuc3RyaW5nLnN0cmlwTmV3bGluZXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvKFxcclxcbnxcXHJ8XFxuKSsvZyxcIiBcIil9LGdvb2cuc3RyaW5nLmNhbm9uaWNhbGl6ZU5ld2xpbmVzPWZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoLyhcXHJcXG58XFxyfFxcbikvZyxcIlxcblwiKX0sZ29vZy5zdHJpbmcubm9ybWFsaXplV2hpdGVzcGFjZT1mdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9cXHhhMHxcXHMvZyxcIiBcIil9LGdvb2cuc3RyaW5nLm5vcm1hbGl6ZVNwYWNlcz1mdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9cXHhhMHxbIFxcdF0rL2csXCIgXCIpfSxnb29nLnN0cmluZy5jb2xsYXBzZUJyZWFraW5nU3BhY2VzPWZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoL1tcXHRcXHJcXG4gXSsvZyxcIiBcIikucmVwbGFjZSgvXltcXHRcXHJcXG4gXSt8W1xcdFxcclxcbiBdKyQvZyxcIlwiKX0sZ29vZy5zdHJpbmcudHJpbT1nb29nLnN0cmluZy5pbnRlcm5hbC50cmltLGdvb2cuc3RyaW5nLnRyaW1MZWZ0PWZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoL15bXFxzXFx4YTBdKy8sXCJcIil9LGdvb2cuc3RyaW5nLnRyaW1SaWdodD1mdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9bXFxzXFx4YTBdKyQvLFwiXCIpfSxnb29nLnN0cmluZy5jYXNlSW5zZW5zaXRpdmVDb21wYXJlPWdvb2cuc3RyaW5nLmludGVybmFsLmNhc2VJbnNlbnNpdGl2ZUNvbXBhcmUsZ29vZy5zdHJpbmcubnVtYmVyQXdhcmVDb21wYXJlXz1mdW5jdGlvbihlLHQsbyl7aWYoZT09dClyZXR1cm4gMDtpZighZSlyZXR1cm4tMTtpZighdClyZXR1cm4gMTtmb3IodmFyIHI9ZS50b0xvd2VyQ2FzZSgpLm1hdGNoKG8pLG49dC50b0xvd2VyQ2FzZSgpLm1hdGNoKG8pLHM9TWF0aC5taW4oci5sZW5ndGgsbi5sZW5ndGgpLGk9MDtpPHM7aSsrKXtvPXJbaV07dmFyIGE9bltpXTtpZihvIT1hKXJldHVybiBlPXBhcnNlSW50KG8sMTApLCFpc05hTihlKSYmKHQ9cGFyc2VJbnQoYSwxMCksIWlzTmFOKHQpJiZlLXQpP2UtdDpvPGE/LTE6MX1yZXR1cm4gci5sZW5ndGghPW4ubGVuZ3RoP3IubGVuZ3RoLW4ubGVuZ3RoOmU8dD8tMToxfSxnb29nLnN0cmluZy5pbnRBd2FyZUNvbXBhcmU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZ29vZy5zdHJpbmcubnVtYmVyQXdhcmVDb21wYXJlXyhlLHQsL1xcZCt8XFxEKy9nKX0sZ29vZy5zdHJpbmcuZmxvYXRBd2FyZUNvbXBhcmU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZ29vZy5zdHJpbmcubnVtYmVyQXdhcmVDb21wYXJlXyhlLHQsL1xcZCt8XFwuXFxkK3xcXEQrL2cpfSxnb29nLnN0cmluZy5udW1lcmF0ZUNvbXBhcmU9Z29vZy5zdHJpbmcuZmxvYXRBd2FyZUNvbXBhcmUsZ29vZy5zdHJpbmcudXJsRW5jb2RlPWZ1bmN0aW9uKGUpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoU3RyaW5nKGUpKX0sZ29vZy5zdHJpbmcudXJsRGVjb2RlPWZ1bmN0aW9uKGUpe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoZS5yZXBsYWNlKC9cXCsvZyxcIiBcIikpfSxnb29nLnN0cmluZy5uZXdMaW5lVG9Ccj1nb29nLnN0cmluZy5pbnRlcm5hbC5uZXdMaW5lVG9Ccixnb29nLnN0cmluZy5odG1sRXNjYXBlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9Z29vZy5zdHJpbmcuaW50ZXJuYWwuaHRtbEVzY2FwZShlLHQpLGdvb2cuc3RyaW5nLkRFVEVDVF9ET1VCTEVfRVNDQVBJTkcmJihlPWUucmVwbGFjZShnb29nLnN0cmluZy5FX1JFXyxcIiYjMTAxO1wiKSksZX0sZ29vZy5zdHJpbmcuRV9SRV89L2UvZyxnb29nLnN0cmluZy51bmVzY2FwZUVudGl0aWVzPWZ1bmN0aW9uKGUpe3JldHVybiBnb29nLnN0cmluZy5jb250YWlucyhlLFwiJlwiKT8hZ29vZy5zdHJpbmcuRk9SQ0VfTk9OX0RPTV9IVE1MX1VORVNDQVBJTkcmJlwiZG9jdW1lbnRcImluIGdvb2cuZ2xvYmFsP2dvb2cuc3RyaW5nLnVuZXNjYXBlRW50aXRpZXNVc2luZ0RvbV8oZSk6Z29vZy5zdHJpbmcudW5lc2NhcGVQdXJlWG1sRW50aXRpZXNfKGUpOmV9LGdvb2cuc3RyaW5nLnVuZXNjYXBlRW50aXRpZXNXaXRoRG9jdW1lbnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZ29vZy5zdHJpbmcuY29udGFpbnMoZSxcIiZcIik/Z29vZy5zdHJpbmcudW5lc2NhcGVFbnRpdGllc1VzaW5nRG9tXyhlLHQpOmV9LGdvb2cuc3RyaW5nLnVuZXNjYXBlRW50aXRpZXNVc2luZ0RvbV89ZnVuY3Rpb24oZSx0KXt2YXIgbz17XCImYW1wO1wiOlwiJlwiLFwiJmx0O1wiOlwiPFwiLFwiJmd0O1wiOlwiPlwiLFwiJnF1b3Q7XCI6J1wiJ30scj10P3QuY3JlYXRlRWxlbWVudChcImRpdlwiKTpnb29nLmdsb2JhbC5kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO3JldHVybiBlLnJlcGxhY2UoZ29vZy5zdHJpbmcuSFRNTF9FTlRJVFlfUEFUVEVSTl8sKGZ1bmN0aW9uKGUsdCl7dmFyIG49b1tlXTtyZXR1cm4gbnx8KFwiI1wiPT10LmNoYXJBdCgwKSYmKHQ9TnVtYmVyKFwiMFwiK3Quc3Vic3RyKDEpKSxpc05hTih0KXx8KG49U3RyaW5nLmZyb21DaGFyQ29kZSh0KSkpLG58fChnb29nLmRvbS5zYWZlLnNldElubmVySHRtbChyLGdvb2cuaHRtbC51bmNoZWNrZWRjb252ZXJzaW9ucy5zYWZlSHRtbEZyb21TdHJpbmdLbm93blRvU2F0aXNmeVR5cGVDb250cmFjdChnb29nLnN0cmluZy5Db25zdC5mcm9tKFwiU2luZ2xlIEhUTUwgZW50aXR5LlwiKSxlK1wiIFwiKSksbj1yLmZpcnN0Q2hpbGQubm9kZVZhbHVlLnNsaWNlKDAsLTEpKSxvW2VdPW4pfSkpfSxnb29nLnN0cmluZy51bmVzY2FwZVB1cmVYbWxFbnRpdGllc189ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvJihbXjtdKyk7L2csKGZ1bmN0aW9uKGUsdCl7c3dpdGNoKHQpe2Nhc2VcImFtcFwiOnJldHVyblwiJlwiO2Nhc2VcImx0XCI6cmV0dXJuXCI8XCI7Y2FzZVwiZ3RcIjpyZXR1cm5cIj5cIjtjYXNlXCJxdW90XCI6cmV0dXJuJ1wiJztkZWZhdWx0OnJldHVyblwiI1wiIT10LmNoYXJBdCgwKXx8KHQ9TnVtYmVyKFwiMFwiK3Quc3Vic3RyKDEpKSxpc05hTih0KSk/ZTpTdHJpbmcuZnJvbUNoYXJDb2RlKHQpfX0pKX0sZ29vZy5zdHJpbmcuSFRNTF9FTlRJVFlfUEFUVEVSTl89LyYoW147XFxzPCZdKyk7Py9nLGdvb2cuc3RyaW5nLndoaXRlc3BhY2VFc2NhcGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZ29vZy5zdHJpbmcubmV3TGluZVRvQnIoZS5yZXBsYWNlKC8gIC9nLFwiICYjMTYwO1wiKSx0KX0sZ29vZy5zdHJpbmcucHJlc2VydmVTcGFjZXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvKF58W1xcbiBdKSAvZyxcIiQxXCIrZ29vZy5zdHJpbmcuVW5pY29kZS5OQlNQKX0sZ29vZy5zdHJpbmcuc3RyaXBRdW90ZXM9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG89dC5sZW5ndGgscj0wO3I8bztyKyspe3ZhciBuPTE9PW8/dDp0LmNoYXJBdChyKTtpZihlLmNoYXJBdCgwKT09biYmZS5jaGFyQXQoZS5sZW5ndGgtMSk9PW4pcmV0dXJuIGUuc3Vic3RyaW5nKDEsZS5sZW5ndGgtMSl9cmV0dXJuIGV9LGdvb2cuc3RyaW5nLnRydW5jYXRlPWZ1bmN0aW9uKGUsdCxvKXtyZXR1cm4gbyYmKGU9Z29vZy5zdHJpbmcudW5lc2NhcGVFbnRpdGllcyhlKSksZS5sZW5ndGg+dCYmKGU9ZS5zdWJzdHJpbmcoMCx0LTMpK1wiLi4uXCIpLG8mJihlPWdvb2cuc3RyaW5nLmh0bWxFc2NhcGUoZSkpLGV9LGdvb2cuc3RyaW5nLnRydW5jYXRlTWlkZGxlPWZ1bmN0aW9uKGUsdCxvLHIpe2lmKG8mJihlPWdvb2cuc3RyaW5nLnVuZXNjYXBlRW50aXRpZXMoZSkpLHImJmUubGVuZ3RoPnQpe3I+dCYmKHI9dCk7dmFyIG49ZS5sZW5ndGgtcjtlPWUuc3Vic3RyaW5nKDAsdC1yKStcIi4uLlwiK2Uuc3Vic3RyaW5nKG4pfWVsc2UgZS5sZW5ndGg+dCYmKHI9TWF0aC5mbG9vcih0LzIpLG49ZS5sZW5ndGgtcixlPWUuc3Vic3RyaW5nKDAscit0JTIpK1wiLi4uXCIrZS5zdWJzdHJpbmcobikpO3JldHVybiBvJiYoZT1nb29nLnN0cmluZy5odG1sRXNjYXBlKGUpKSxlfSxnb29nLnN0cmluZy5zcGVjaWFsRXNjYXBlQ2hhcnNfPXtcIlxcMFwiOlwiXFxcXDBcIixcIlxcYlwiOlwiXFxcXGJcIixcIlxcZlwiOlwiXFxcXGZcIixcIlxcblwiOlwiXFxcXG5cIixcIlxcclwiOlwiXFxcXHJcIixcIlxcdFwiOlwiXFxcXHRcIixcIlxcdlwiOlwiXFxcXHgwQlwiLCdcIic6J1xcXFxcIicsXCJcXFxcXCI6XCJcXFxcXFxcXFwiLFwiPFwiOlwiXFxcXHUwMDNDXCJ9LGdvb2cuc3RyaW5nLmpzRXNjYXBlQ2FjaGVfPXtcIidcIjpcIlxcXFwnXCJ9LGdvb2cuc3RyaW5nLnF1b3RlPWZ1bmN0aW9uKGUpe2U9U3RyaW5nKGUpO2Zvcih2YXIgdD1bJ1wiJ10sbz0wO288ZS5sZW5ndGg7bysrKXt2YXIgcj1lLmNoYXJBdChvKSxuPXIuY2hhckNvZGVBdCgwKTt0W28rMV09Z29vZy5zdHJpbmcuc3BlY2lhbEVzY2FwZUNoYXJzX1tyXXx8KDMxPG4mJjEyNz5uP3I6Z29vZy5zdHJpbmcuZXNjYXBlQ2hhcihyKSl9cmV0dXJuIHQucHVzaCgnXCInKSx0LmpvaW4oXCJcIil9LGdvb2cuc3RyaW5nLmVzY2FwZVN0cmluZz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9W10sbz0wO288ZS5sZW5ndGg7bysrKXRbb109Z29vZy5zdHJpbmcuZXNjYXBlQ2hhcihlLmNoYXJBdChvKSk7cmV0dXJuIHQuam9pbihcIlwiKX0sZ29vZy5zdHJpbmcuZXNjYXBlQ2hhcj1mdW5jdGlvbihlKXtpZihlIGluIGdvb2cuc3RyaW5nLmpzRXNjYXBlQ2FjaGVfKXJldHVybiBnb29nLnN0cmluZy5qc0VzY2FwZUNhY2hlX1tlXTtpZihlIGluIGdvb2cuc3RyaW5nLnNwZWNpYWxFc2NhcGVDaGFyc18pcmV0dXJuIGdvb2cuc3RyaW5nLmpzRXNjYXBlQ2FjaGVfW2VdPWdvb2cuc3RyaW5nLnNwZWNpYWxFc2NhcGVDaGFyc19bZV07dmFyIHQ9ZS5jaGFyQ29kZUF0KDApO2lmKDMxPHQmJjEyNz50KXZhciBvPWU7ZWxzZSAyNTY+dD8obz1cIlxcXFx4XCIsKDE2PnR8fDI1Njx0KSYmKG8rPVwiMFwiKSk6KG89XCJcXFxcdVwiLDQwOTY+dCYmKG8rPVwiMFwiKSksbys9dC50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtyZXR1cm4gZ29vZy5zdHJpbmcuanNFc2NhcGVDYWNoZV9bZV09b30sZ29vZy5zdHJpbmcuY29udGFpbnM9Z29vZy5zdHJpbmcuaW50ZXJuYWwuY29udGFpbnMsZ29vZy5zdHJpbmcuY2FzZUluc2Vuc2l0aXZlQ29udGFpbnM9Z29vZy5zdHJpbmcuaW50ZXJuYWwuY2FzZUluc2Vuc2l0aXZlQ29udGFpbnMsZ29vZy5zdHJpbmcuY291bnRPZj1mdW5jdGlvbihlLHQpe3JldHVybiBlJiZ0P2Uuc3BsaXQodCkubGVuZ3RoLTE6MH0sZ29vZy5zdHJpbmcucmVtb3ZlQXQ9ZnVuY3Rpb24oZSx0LG8pe3ZhciByPWU7cmV0dXJuIDA8PXQmJnQ8ZS5sZW5ndGgmJjA8byYmKHI9ZS5zdWJzdHIoMCx0KStlLnN1YnN0cih0K28sZS5sZW5ndGgtdC1vKSkscn0sZ29vZy5zdHJpbmcucmVtb3ZlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUucmVwbGFjZSh0LFwiXCIpfSxnb29nLnN0cmluZy5yZW1vdmVBbGw9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD1uZXcgUmVnRXhwKGdvb2cuc3RyaW5nLnJlZ0V4cEVzY2FwZSh0KSxcImdcIiksZS5yZXBsYWNlKHQsXCJcIil9LGdvb2cuc3RyaW5nLnJlcGxhY2VBbGw9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiB0PW5ldyBSZWdFeHAoZ29vZy5zdHJpbmcucmVnRXhwRXNjYXBlKHQpLFwiZ1wiKSxlLnJlcGxhY2UodCxvLnJlcGxhY2UoL1xcJC9nLFwiJCQkJFwiKSl9LGdvb2cuc3RyaW5nLnJlZ0V4cEVzY2FwZT1mdW5jdGlvbihlKXtyZXR1cm4gU3RyaW5nKGUpLnJlcGxhY2UoLyhbLSgpXFxbXFxde30rPyouJFxcXnwsOiM8IVxcXFxdKS9nLFwiXFxcXCQxXCIpLnJlcGxhY2UoL1xceDA4L2csXCJcXFxceDA4XCIpfSxnb29nLnN0cmluZy5yZXBlYXQ9U3RyaW5nLnByb3RvdHlwZS5yZXBlYXQ/ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5yZXBlYXQodCl9OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEFycmF5KHQrMSkuam9pbihlKX0sZ29vZy5zdHJpbmcucGFkTnVtYmVyPWZ1bmN0aW9uKGUsdCxvKXtyZXR1cm4tMT09KG89KGU9Z29vZy5pc0RlZihvKT9lLnRvRml4ZWQobyk6U3RyaW5nKGUpKS5pbmRleE9mKFwiLlwiKSkmJihvPWUubGVuZ3RoKSxnb29nLnN0cmluZy5yZXBlYXQoXCIwXCIsTWF0aC5tYXgoMCx0LW8pKStlfSxnb29nLnN0cmluZy5tYWtlU2FmZT1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT9cIlwiOlN0cmluZyhlKX0sZ29vZy5zdHJpbmcuYnVpbGRTdHJpbmc9ZnVuY3Rpb24oZSl7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5qb2luLmNhbGwoYXJndW1lbnRzLFwiXCIpfSxnb29nLnN0cmluZy5nZXRSYW5kb21TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5mbG9vcigyMTQ3NDgzNjQ4Kk1hdGgucmFuZG9tKCkpLnRvU3RyaW5nKDM2KStNYXRoLmFicyhNYXRoLmZsb29yKDIxNDc0ODM2NDgqTWF0aC5yYW5kb20oKSleZ29vZy5ub3coKSkudG9TdHJpbmcoMzYpfSxnb29nLnN0cmluZy5jb21wYXJlVmVyc2lvbnM9Z29vZy5zdHJpbmcuaW50ZXJuYWwuY29tcGFyZVZlcnNpb25zLGdvb2cuc3RyaW5nLmhhc2hDb2RlPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLG89MDtvPGUubGVuZ3RoOysrbyl0PTMxKnQrZS5jaGFyQ29kZUF0KG8pPj4+MDtyZXR1cm4gdH0sZ29vZy5zdHJpbmcudW5pcXVlU3RyaW5nQ291bnRlcl89MjE0NzQ4MzY0OCpNYXRoLnJhbmRvbSgpfDAsZ29vZy5zdHJpbmcuY3JlYXRlVW5pcXVlU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuXCJnb29nX1wiK2dvb2cuc3RyaW5nLnVuaXF1ZVN0cmluZ0NvdW50ZXJfKyt9LGdvb2cuc3RyaW5nLnRvTnVtYmVyPWZ1bmN0aW9uKGUpe3ZhciB0PU51bWJlcihlKTtyZXR1cm4gMD09dCYmZ29vZy5zdHJpbmcuaXNFbXB0eU9yV2hpdGVzcGFjZShlKT9OYU46dH0sZ29vZy5zdHJpbmcuaXNMb3dlckNhbWVsQ2FzZT1mdW5jdGlvbihlKXtyZXR1cm4vXlthLXpdKyhbQS1aXVthLXpdKikqJC8udGVzdChlKX0sZ29vZy5zdHJpbmcuaXNVcHBlckNhbWVsQ2FzZT1mdW5jdGlvbihlKXtyZXR1cm4vXihbQS1aXVthLXpdKikrJC8udGVzdChlKX0sZ29vZy5zdHJpbmcudG9DYW1lbENhc2U9ZnVuY3Rpb24oZSl7cmV0dXJuIFN0cmluZyhlKS5yZXBsYWNlKC9cXC0oW2Etel0pL2csKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQudG9VcHBlckNhc2UoKX0pKX0sZ29vZy5zdHJpbmcudG9TZWxlY3RvckNhc2U9ZnVuY3Rpb24oZSl7cmV0dXJuIFN0cmluZyhlKS5yZXBsYWNlKC8oW0EtWl0pL2csXCItJDFcIikudG9Mb3dlckNhc2UoKX0sZ29vZy5zdHJpbmcudG9UaXRsZUNhc2U9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD1nb29nLmlzU3RyaW5nKHQpP2dvb2cuc3RyaW5nLnJlZ0V4cEVzY2FwZSh0KTpcIlxcXFxzXCIsZS5yZXBsYWNlKG5ldyBSZWdFeHAoXCIoXlwiKyh0P1wifFtcIit0K1wiXStcIjpcIlwiKStcIikoW2Etel0pXCIsXCJnXCIpLChmdW5jdGlvbihlLHQsbyl7cmV0dXJuIHQrby50b1VwcGVyQ2FzZSgpfSkpfSxnb29nLnN0cmluZy5jYXBpdGFsaXplPWZ1bmN0aW9uKGUpe3JldHVybiBTdHJpbmcoZS5jaGFyQXQoMCkpLnRvVXBwZXJDYXNlKCkrU3RyaW5nKGUuc3Vic3RyKDEpKS50b0xvd2VyQ2FzZSgpfSxnb29nLnN0cmluZy5wYXJzZUludD1mdW5jdGlvbihlKXtyZXR1cm4gaXNGaW5pdGUoZSkmJihlPVN0cmluZyhlKSksZ29vZy5pc1N0cmluZyhlKT8vXlxccyotPzB4L2kudGVzdChlKT9wYXJzZUludChlLDE2KTpwYXJzZUludChlLDEwKTpOYU59LGdvb2cuc3RyaW5nLnNwbGl0TGltaXQ9ZnVuY3Rpb24oZSx0LG8pe2U9ZS5zcGxpdCh0KTtmb3IodmFyIHI9W107MDxvJiZlLmxlbmd0aDspci5wdXNoKGUuc2hpZnQoKSksby0tO3JldHVybiBlLmxlbmd0aCYmci5wdXNoKGUuam9pbih0KSkscn0sZ29vZy5zdHJpbmcubGFzdENvbXBvbmVudD1mdW5jdGlvbihlLHQpe2lmKCF0KXJldHVybiBlO1wic3RyaW5nXCI9PXR5cGVvZiB0JiYodD1bdF0pO2Zvcih2YXIgbz0tMSxyPTA7cjx0Lmxlbmd0aDtyKyspaWYoXCJcIiE9dFtyXSl7dmFyIG49ZS5sYXN0SW5kZXhPZih0W3JdKTtuPm8mJihvPW4pfXJldHVybi0xPT1vP2U6ZS5zbGljZShvKzEpfSxnb29nLnN0cmluZy5lZGl0RGlzdGFuY2U9ZnVuY3Rpb24oZSx0KXt2YXIgbz1bXSxyPVtdO2lmKGU9PXQpcmV0dXJuIDA7aWYoIWUubGVuZ3RofHwhdC5sZW5ndGgpcmV0dXJuIE1hdGgubWF4KGUubGVuZ3RoLHQubGVuZ3RoKTtmb3IodmFyIG49MDtuPHQubGVuZ3RoKzE7bisrKW9bbl09bjtmb3Iobj0wO248ZS5sZW5ndGg7bisrKXtyWzBdPW4rMTtmb3IodmFyIHM9MDtzPHQubGVuZ3RoO3MrKylyW3MrMV09TWF0aC5taW4ocltzXSsxLG9bcysxXSsxLG9bc10rTnVtYmVyKGVbbl0hPXRbc10pKTtmb3Iocz0wO3M8by5sZW5ndGg7cysrKW9bc109cltzXX1yZXR1cm4gclt0Lmxlbmd0aF19LGdvb2cubGFicy51c2VyQWdlbnQuZW5naW5lPXt9LGdvb2cubGFicy51c2VyQWdlbnQuZW5naW5lLmlzUHJlc3RvPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcIlByZXN0b1wiKX0sZ29vZy5sYWJzLnVzZXJBZ2VudC5lbmdpbmUuaXNUcmlkZW50PWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcIlRyaWRlbnRcIil8fGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcIk1TSUVcIil9LGdvb2cubGFicy51c2VyQWdlbnQuZW5naW5lLmlzRWRnZT1mdW5jdGlvbigpe3JldHVybiBnb29nLmxhYnMudXNlckFnZW50LnV0aWwubWF0Y2hVc2VyQWdlbnQoXCJFZGdlXCIpfSxnb29nLmxhYnMudXNlckFnZW50LmVuZ2luZS5pc1dlYktpdD1mdW5jdGlvbigpe3JldHVybiBnb29nLmxhYnMudXNlckFnZW50LnV0aWwubWF0Y2hVc2VyQWdlbnRJZ25vcmVDYXNlKFwiV2ViS2l0XCIpJiYhZ29vZy5sYWJzLnVzZXJBZ2VudC5lbmdpbmUuaXNFZGdlKCl9LGdvb2cubGFicy51c2VyQWdlbnQuZW5naW5lLmlzR2Vja289ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50KFwiR2Vja29cIikmJiFnb29nLmxhYnMudXNlckFnZW50LmVuZ2luZS5pc1dlYktpdCgpJiYhZ29vZy5sYWJzLnVzZXJBZ2VudC5lbmdpbmUuaXNUcmlkZW50KCkmJiFnb29nLmxhYnMudXNlckFnZW50LmVuZ2luZS5pc0VkZ2UoKX0sZ29vZy5sYWJzLnVzZXJBZ2VudC5lbmdpbmUuZ2V0VmVyc2lvbj1mdW5jdGlvbigpe3ZhciBlPWdvb2cubGFicy51c2VyQWdlbnQudXRpbC5nZXRVc2VyQWdlbnQoKTtpZihlKXtlPWdvb2cubGFicy51c2VyQWdlbnQudXRpbC5leHRyYWN0VmVyc2lvblR1cGxlcyhlKTt2YXIgdCxvPWdvb2cubGFicy51c2VyQWdlbnQuZW5naW5lLmdldEVuZ2luZVR1cGxlXyhlKTtpZihvKXJldHVyblwiR2Vja29cIj09b1swXT9nb29nLmxhYnMudXNlckFnZW50LmVuZ2luZS5nZXRWZXJzaW9uRm9yS2V5XyhlLFwiRmlyZWZveFwiKTpvWzFdO2lmKChlPWVbMF0pJiYodD1lWzJdKSYmKHQ9L1RyaWRlbnRcXC8oW15cXHM7XSspLy5leGVjKHQpKSlyZXR1cm4gdFsxXX1yZXR1cm5cIlwifSxnb29nLmxhYnMudXNlckFnZW50LmVuZ2luZS5nZXRFbmdpbmVUdXBsZV89ZnVuY3Rpb24oZSl7aWYoIWdvb2cubGFicy51c2VyQWdlbnQuZW5naW5lLmlzRWRnZSgpKXJldHVybiBlWzFdO2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7dCsrKXt2YXIgbz1lW3RdO2lmKFwiRWRnZVwiPT1vWzBdKXJldHVybiBvfX0sZ29vZy5sYWJzLnVzZXJBZ2VudC5lbmdpbmUuaXNWZXJzaW9uT3JIaWdoZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIDA8PWdvb2cuc3RyaW5nLmNvbXBhcmVWZXJzaW9ucyhnb29nLmxhYnMudXNlckFnZW50LmVuZ2luZS5nZXRWZXJzaW9uKCksZSl9LGdvb2cubGFicy51c2VyQWdlbnQuZW5naW5lLmdldFZlcnNpb25Gb3JLZXlfPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKGU9Z29vZy5hcnJheS5maW5kKGUsKGZ1bmN0aW9uKGUpe3JldHVybiB0PT1lWzBdfSkpKSYmZVsxXXx8XCJcIn0sZ29vZy5sYWJzLnVzZXJBZ2VudC5wbGF0Zm9ybT17fSxnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzQW5kcm9pZD1mdW5jdGlvbigpe3JldHVybiBnb29nLmxhYnMudXNlckFnZW50LnV0aWwubWF0Y2hVc2VyQWdlbnQoXCJBbmRyb2lkXCIpfSxnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzSXBvZD1mdW5jdGlvbigpe3JldHVybiBnb29nLmxhYnMudXNlckFnZW50LnV0aWwubWF0Y2hVc2VyQWdlbnQoXCJpUG9kXCIpfSxnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzSXBob25lPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcImlQaG9uZVwiKSYmIWdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcImlQb2RcIikmJiFnb29nLmxhYnMudXNlckFnZW50LnV0aWwubWF0Y2hVc2VyQWdlbnQoXCJpUGFkXCIpfSxnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzSXBhZD1mdW5jdGlvbigpe3JldHVybiBnb29nLmxhYnMudXNlckFnZW50LnV0aWwubWF0Y2hVc2VyQWdlbnQoXCJpUGFkXCIpfSxnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzSW9zPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNJcGhvbmUoKXx8Z29vZy5sYWJzLnVzZXJBZ2VudC5wbGF0Zm9ybS5pc0lwYWQoKXx8Z29vZy5sYWJzLnVzZXJBZ2VudC5wbGF0Zm9ybS5pc0lwb2QoKX0sZ29vZy5sYWJzLnVzZXJBZ2VudC5wbGF0Zm9ybS5pc01hY2ludG9zaD1mdW5jdGlvbigpe3JldHVybiBnb29nLmxhYnMudXNlckFnZW50LnV0aWwubWF0Y2hVc2VyQWdlbnQoXCJNYWNpbnRvc2hcIil9LGdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNMaW51eD1mdW5jdGlvbigpe3JldHVybiBnb29nLmxhYnMudXNlckFnZW50LnV0aWwubWF0Y2hVc2VyQWdlbnQoXCJMaW51eFwiKX0sZ29vZy5sYWJzLnVzZXJBZ2VudC5wbGF0Zm9ybS5pc1dpbmRvd3M9ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50KFwiV2luZG93c1wiKX0sZ29vZy5sYWJzLnVzZXJBZ2VudC5wbGF0Zm9ybS5pc0Nocm9tZU9TPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcIkNyT1NcIil9LGdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNDaHJvbWVjYXN0PWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcIkNyS2V5XCIpfSxnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzS2FpT1M9ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50SWdub3JlQ2FzZShcIkthaU9TXCIpfSxnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzR28yUGhvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50SWdub3JlQ2FzZShcIkdBRlBcIil9LGdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uZ2V0VmVyc2lvbj1mdW5jdGlvbigpe3ZhciBlPWdvb2cubGFicy51c2VyQWdlbnQudXRpbC5nZXRVc2VyQWdlbnQoKSx0PVwiXCI7cmV0dXJuIGdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNXaW5kb3dzKCk/dD0oZT0odD0vV2luZG93cyAoPzpOVHxQaG9uZSkgKFswLTkuXSspLykuZXhlYyhlKSk/ZVsxXTpcIjAuMFwiOmdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNJb3MoKT90PShlPSh0PS8oPzppUGhvbmV8aVBvZHxpUGFkfENQVSlcXHMrT1NcXHMrKFxcUyspLykuZXhlYyhlKSkmJmVbMV0ucmVwbGFjZSgvXy9nLFwiLlwiKTpnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzTWFjaW50b3NoKCk/dD0oZT0odD0vTWFjIE9TIFggKFswLTlfLl0rKS8pLmV4ZWMoZSkpP2VbMV0ucmVwbGFjZSgvXy9nLFwiLlwiKTpcIjEwXCI6Z29vZy5sYWJzLnVzZXJBZ2VudC5wbGF0Zm9ybS5pc0thaU9TKCk/dD0oZT0odD0vKD86S2FpT1MpXFwvKFxcUyspL2kpLmV4ZWMoZSkpJiZlWzFdOmdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNBbmRyb2lkKCk/dD0oZT0odD0vQW5kcm9pZFxccysoW15cXCk7XSspKFxcKXw7KS8pLmV4ZWMoZSkpJiZlWzFdOmdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNDaHJvbWVPUygpJiYodD0oZT0odD0vKD86Q3JPU1xccysoPzppNjg2fHg4Nl82NClcXHMrKFswLTkuXSspKS8pLmV4ZWMoZSkpJiZlWzFdKSx0fHxcIlwifSxnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzVmVyc2lvbk9ySGlnaGVyPWZ1bmN0aW9uKGUpe3JldHVybiAwPD1nb29nLnN0cmluZy5jb21wYXJlVmVyc2lvbnMoZ29vZy5sYWJzLnVzZXJBZ2VudC5wbGF0Zm9ybS5nZXRWZXJzaW9uKCksZSl9LGdvb2cucmVmbGVjdD17fSxnb29nLnJlZmxlY3Qub2JqZWN0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR9LGdvb2cucmVmbGVjdC5vYmplY3RQcm9wZXJ0eT1mdW5jdGlvbihlLHQpe3JldHVybiBlfSxnb29nLnJlZmxlY3Quc2lua1ZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBnb29nLnJlZmxlY3Quc2lua1ZhbHVlW1wiIFwiXShlKSxlfSxnb29nLnJlZmxlY3Quc2lua1ZhbHVlW1wiIFwiXT1nb29nLm51bGxGdW5jdGlvbixnb29nLnJlZmxlY3QuY2FuQWNjZXNzUHJvcGVydHk9ZnVuY3Rpb24oZSx0KXt0cnl7cmV0dXJuIGdvb2cucmVmbGVjdC5zaW5rVmFsdWUoZVt0XSksITB9Y2F0Y2goZSl7fXJldHVybiExfSxnb29nLnJlZmxlY3QuY2FjaGU9ZnVuY3Rpb24oZSx0LG8scil7cmV0dXJuIHI9cj9yKHQpOnQsT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscik/ZVtyXTplW3JdPW8odCl9LGdvb2cudXNlckFnZW50PXt9LGdvb2cudXNlckFnZW50LkFTU1VNRV9JRT0hMSxnb29nLnVzZXJBZ2VudC5BU1NVTUVfRURHRT0hMSxnb29nLnVzZXJBZ2VudC5BU1NVTUVfR0VDS089ITEsZ29vZy51c2VyQWdlbnQuQVNTVU1FX1dFQktJVD0hMSxnb29nLnVzZXJBZ2VudC5BU1NVTUVfTU9CSUxFX1dFQktJVD0hMSxnb29nLnVzZXJBZ2VudC5BU1NVTUVfT1BFUkE9ITEsZ29vZy51c2VyQWdlbnQuQVNTVU1FX0FOWV9WRVJTSU9OPSExLGdvb2cudXNlckFnZW50LkJST1dTRVJfS05PV05fPWdvb2cudXNlckFnZW50LkFTU1VNRV9JRXx8Z29vZy51c2VyQWdlbnQuQVNTVU1FX0VER0V8fGdvb2cudXNlckFnZW50LkFTU1VNRV9HRUNLT3x8Z29vZy51c2VyQWdlbnQuQVNTVU1FX01PQklMRV9XRUJLSVR8fGdvb2cudXNlckFnZW50LkFTU1VNRV9XRUJLSVR8fGdvb2cudXNlckFnZW50LkFTU1VNRV9PUEVSQSxnb29nLnVzZXJBZ2VudC5nZXRVc2VyQWdlbnRTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLmdldFVzZXJBZ2VudCgpfSxnb29nLnVzZXJBZ2VudC5nZXROYXZpZ2F0b3JUeXBlZD1mdW5jdGlvbigpe3JldHVybiBnb29nLmdsb2JhbC5uYXZpZ2F0b3J8fG51bGx9LGdvb2cudXNlckFnZW50LmdldE5hdmlnYXRvcj1mdW5jdGlvbigpe3JldHVybiBnb29nLnVzZXJBZ2VudC5nZXROYXZpZ2F0b3JUeXBlZCgpfSxnb29nLnVzZXJBZ2VudC5PUEVSQT1nb29nLnVzZXJBZ2VudC5CUk9XU0VSX0tOT1dOXz9nb29nLnVzZXJBZ2VudC5BU1NVTUVfT1BFUkE6Z29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLmlzT3BlcmEoKSxnb29nLnVzZXJBZ2VudC5JRT1nb29nLnVzZXJBZ2VudC5CUk9XU0VSX0tOT1dOXz9nb29nLnVzZXJBZ2VudC5BU1NVTUVfSUU6Z29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLmlzSUUoKSxnb29nLnVzZXJBZ2VudC5FREdFPWdvb2cudXNlckFnZW50LkJST1dTRVJfS05PV05fP2dvb2cudXNlckFnZW50LkFTU1VNRV9FREdFOmdvb2cubGFicy51c2VyQWdlbnQuZW5naW5lLmlzRWRnZSgpLGdvb2cudXNlckFnZW50LkVER0VfT1JfSUU9Z29vZy51c2VyQWdlbnQuRURHRXx8Z29vZy51c2VyQWdlbnQuSUUsZ29vZy51c2VyQWdlbnQuR0VDS089Z29vZy51c2VyQWdlbnQuQlJPV1NFUl9LTk9XTl8/Z29vZy51c2VyQWdlbnQuQVNTVU1FX0dFQ0tPOmdvb2cubGFicy51c2VyQWdlbnQuZW5naW5lLmlzR2Vja28oKSxnb29nLnVzZXJBZ2VudC5XRUJLSVQ9Z29vZy51c2VyQWdlbnQuQlJPV1NFUl9LTk9XTl8/Z29vZy51c2VyQWdlbnQuQVNTVU1FX1dFQktJVHx8Z29vZy51c2VyQWdlbnQuQVNTVU1FX01PQklMRV9XRUJLSVQ6Z29vZy5sYWJzLnVzZXJBZ2VudC5lbmdpbmUuaXNXZWJLaXQoKSxnb29nLnVzZXJBZ2VudC5pc01vYmlsZV89ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy51c2VyQWdlbnQuV0VCS0lUJiZnb29nLmxhYnMudXNlckFnZW50LnV0aWwubWF0Y2hVc2VyQWdlbnQoXCJNb2JpbGVcIil9LGdvb2cudXNlckFnZW50Lk1PQklMRT1nb29nLnVzZXJBZ2VudC5BU1NVTUVfTU9CSUxFX1dFQktJVHx8Z29vZy51c2VyQWdlbnQuaXNNb2JpbGVfKCksZ29vZy51c2VyQWdlbnQuU0FGQVJJPWdvb2cudXNlckFnZW50LldFQktJVCxnb29nLnVzZXJBZ2VudC5kZXRlcm1pbmVQbGF0Zm9ybV89ZnVuY3Rpb24oKXt2YXIgZT1nb29nLnVzZXJBZ2VudC5nZXROYXZpZ2F0b3JUeXBlZCgpO3JldHVybiBlJiZlLnBsYXRmb3JtfHxcIlwifSxnb29nLnVzZXJBZ2VudC5QTEFURk9STT1nb29nLnVzZXJBZ2VudC5kZXRlcm1pbmVQbGF0Zm9ybV8oKSxnb29nLnVzZXJBZ2VudC5BU1NVTUVfTUFDPSExLGdvb2cudXNlckFnZW50LkFTU1VNRV9XSU5ET1dTPSExLGdvb2cudXNlckFnZW50LkFTU1VNRV9MSU5VWD0hMSxnb29nLnVzZXJBZ2VudC5BU1NVTUVfWDExPSExLGdvb2cudXNlckFnZW50LkFTU1VNRV9BTkRST0lEPSExLGdvb2cudXNlckFnZW50LkFTU1VNRV9JUEhPTkU9ITEsZ29vZy51c2VyQWdlbnQuQVNTVU1FX0lQQUQ9ITEsZ29vZy51c2VyQWdlbnQuQVNTVU1FX0lQT0Q9ITEsZ29vZy51c2VyQWdlbnQuQVNTVU1FX0tBSU9TPSExLGdvb2cudXNlckFnZW50LkFTU1VNRV9HTzJQSE9ORT0hMSxnb29nLnVzZXJBZ2VudC5QTEFURk9STV9LTk9XTl89Z29vZy51c2VyQWdlbnQuQVNTVU1FX01BQ3x8Z29vZy51c2VyQWdlbnQuQVNTVU1FX1dJTkRPV1N8fGdvb2cudXNlckFnZW50LkFTU1VNRV9MSU5VWHx8Z29vZy51c2VyQWdlbnQuQVNTVU1FX1gxMXx8Z29vZy51c2VyQWdlbnQuQVNTVU1FX0FORFJPSUR8fGdvb2cudXNlckFnZW50LkFTU1VNRV9JUEhPTkV8fGdvb2cudXNlckFnZW50LkFTU1VNRV9JUEFEfHxnb29nLnVzZXJBZ2VudC5BU1NVTUVfSVBPRCxnb29nLnVzZXJBZ2VudC5NQUM9Z29vZy51c2VyQWdlbnQuUExBVEZPUk1fS05PV05fP2dvb2cudXNlckFnZW50LkFTU1VNRV9NQUM6Z29vZy5sYWJzLnVzZXJBZ2VudC5wbGF0Zm9ybS5pc01hY2ludG9zaCgpLGdvb2cudXNlckFnZW50LldJTkRPV1M9Z29vZy51c2VyQWdlbnQuUExBVEZPUk1fS05PV05fP2dvb2cudXNlckFnZW50LkFTU1VNRV9XSU5ET1dTOmdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNXaW5kb3dzKCksZ29vZy51c2VyQWdlbnQuaXNMZWdhY3lMaW51eF89ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5sYWJzLnVzZXJBZ2VudC5wbGF0Zm9ybS5pc0xpbnV4KCl8fGdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNDaHJvbWVPUygpfSxnb29nLnVzZXJBZ2VudC5MSU5VWD1nb29nLnVzZXJBZ2VudC5QTEFURk9STV9LTk9XTl8/Z29vZy51c2VyQWdlbnQuQVNTVU1FX0xJTlVYOmdvb2cudXNlckFnZW50LmlzTGVnYWN5TGludXhfKCksZ29vZy51c2VyQWdlbnQuaXNYMTFfPWZ1bmN0aW9uKCl7dmFyIGU9Z29vZy51c2VyQWdlbnQuZ2V0TmF2aWdhdG9yVHlwZWQoKTtyZXR1cm4hIWUmJmdvb2cuc3RyaW5nLmNvbnRhaW5zKGUuYXBwVmVyc2lvbnx8XCJcIixcIlgxMVwiKX0sZ29vZy51c2VyQWdlbnQuWDExPWdvb2cudXNlckFnZW50LlBMQVRGT1JNX0tOT1dOXz9nb29nLnVzZXJBZ2VudC5BU1NVTUVfWDExOmdvb2cudXNlckFnZW50LmlzWDExXygpLGdvb2cudXNlckFnZW50LkFORFJPSUQ9Z29vZy51c2VyQWdlbnQuUExBVEZPUk1fS05PV05fP2dvb2cudXNlckFnZW50LkFTU1VNRV9BTkRST0lEOmdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNBbmRyb2lkKCksZ29vZy51c2VyQWdlbnQuSVBIT05FPWdvb2cudXNlckFnZW50LlBMQVRGT1JNX0tOT1dOXz9nb29nLnVzZXJBZ2VudC5BU1NVTUVfSVBIT05FOmdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNJcGhvbmUoKSxnb29nLnVzZXJBZ2VudC5JUEFEPWdvb2cudXNlckFnZW50LlBMQVRGT1JNX0tOT1dOXz9nb29nLnVzZXJBZ2VudC5BU1NVTUVfSVBBRDpnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzSXBhZCgpLGdvb2cudXNlckFnZW50LklQT0Q9Z29vZy51c2VyQWdlbnQuUExBVEZPUk1fS05PV05fP2dvb2cudXNlckFnZW50LkFTU1VNRV9JUE9EOmdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNJcG9kKCksZ29vZy51c2VyQWdlbnQuSU9TPWdvb2cudXNlckFnZW50LlBMQVRGT1JNX0tOT1dOXz9nb29nLnVzZXJBZ2VudC5BU1NVTUVfSVBIT05FfHxnb29nLnVzZXJBZ2VudC5BU1NVTUVfSVBBRHx8Z29vZy51c2VyQWdlbnQuQVNTVU1FX0lQT0Q6Z29vZy5sYWJzLnVzZXJBZ2VudC5wbGF0Zm9ybS5pc0lvcygpLGdvb2cudXNlckFnZW50LktBSU9TPWdvb2cudXNlckFnZW50LlBMQVRGT1JNX0tOT1dOXz9nb29nLnVzZXJBZ2VudC5BU1NVTUVfS0FJT1M6Z29vZy5sYWJzLnVzZXJBZ2VudC5wbGF0Zm9ybS5pc0thaU9TKCksZ29vZy51c2VyQWdlbnQuR08yUEhPTkU9Z29vZy51c2VyQWdlbnQuUExBVEZPUk1fS05PV05fP2dvb2cudXNlckFnZW50LkFTU1VNRV9HTzJQSE9ORTpnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzR28yUGhvbmUoKSxnb29nLnVzZXJBZ2VudC5kZXRlcm1pbmVWZXJzaW9uXz1mdW5jdGlvbigpe3ZhciBlPVwiXCIsdD1nb29nLnVzZXJBZ2VudC5nZXRWZXJzaW9uUmVnZXhSZXN1bHRfKCk7cmV0dXJuIHQmJihlPXQ/dFsxXTpcIlwiKSxnb29nLnVzZXJBZ2VudC5JRSYmbnVsbCE9KHQ9Z29vZy51c2VyQWdlbnQuZ2V0RG9jdW1lbnRNb2RlXygpKSYmdD5wYXJzZUZsb2F0KGUpP1N0cmluZyh0KTplfSxnb29nLnVzZXJBZ2VudC5nZXRWZXJzaW9uUmVnZXhSZXN1bHRfPWZ1bmN0aW9uKCl7dmFyIGU9Z29vZy51c2VyQWdlbnQuZ2V0VXNlckFnZW50U3RyaW5nKCk7cmV0dXJuIGdvb2cudXNlckFnZW50LkdFQ0tPPy9ydjooW15cXCk7XSspKFxcKXw7KS8uZXhlYyhlKTpnb29nLnVzZXJBZ2VudC5FREdFPy9FZGdlXFwvKFtcXGRcXC5dKykvLmV4ZWMoZSk6Z29vZy51c2VyQWdlbnQuSUU/L1xcYig/Ok1TSUV8cnYpWzogXShbXlxcKTtdKykoXFwpfDspLy5leGVjKGUpOmdvb2cudXNlckFnZW50LldFQktJVD8vV2ViS2l0XFwvKFxcUyspLy5leGVjKGUpOmdvb2cudXNlckFnZW50Lk9QRVJBPy8oPzpWZXJzaW9uKVsgXFwvXT8oXFxTKykvLmV4ZWMoZSk6dm9pZCAwfSxnb29nLnVzZXJBZ2VudC5nZXREb2N1bWVudE1vZGVfPWZ1bmN0aW9uKCl7dmFyIGU9Z29vZy5nbG9iYWwuZG9jdW1lbnQ7cmV0dXJuIGU/ZS5kb2N1bWVudE1vZGU6dm9pZCAwfSxnb29nLnVzZXJBZ2VudC5WRVJTSU9OPWdvb2cudXNlckFnZW50LmRldGVybWluZVZlcnNpb25fKCksZ29vZy51c2VyQWdlbnQuY29tcGFyZT1mdW5jdGlvbihlLHQpe3JldHVybiBnb29nLnN0cmluZy5jb21wYXJlVmVyc2lvbnMoZSx0KX0sZ29vZy51c2VyQWdlbnQuaXNWZXJzaW9uT3JIaWdoZXJDYWNoZV89e30sZ29vZy51c2VyQWdlbnQuaXNWZXJzaW9uT3JIaWdoZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cudXNlckFnZW50LkFTU1VNRV9BTllfVkVSU0lPTnx8Z29vZy5yZWZsZWN0LmNhY2hlKGdvb2cudXNlckFnZW50LmlzVmVyc2lvbk9ySGlnaGVyQ2FjaGVfLGUsKGZ1bmN0aW9uKCl7cmV0dXJuIDA8PWdvb2cuc3RyaW5nLmNvbXBhcmVWZXJzaW9ucyhnb29nLnVzZXJBZ2VudC5WRVJTSU9OLGUpfSkpfSxnb29nLnVzZXJBZ2VudC5pc1ZlcnNpb249Z29vZy51c2VyQWdlbnQuaXNWZXJzaW9uT3JIaWdoZXIsZ29vZy51c2VyQWdlbnQuaXNEb2N1bWVudE1vZGVPckhpZ2hlcj1mdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyKGdvb2cudXNlckFnZW50LkRPQ1VNRU5UX01PREUpPj1lfSxnb29nLnVzZXJBZ2VudC5pc0RvY3VtZW50TW9kZT1nb29nLnVzZXJBZ2VudC5pc0RvY3VtZW50TW9kZU9ySGlnaGVyLGdvb2cudXNlckFnZW50LkRPQ1VNRU5UX01PREU9ZnVuY3Rpb24oKXtpZihnb29nLmdsb2JhbC5kb2N1bWVudCYmZ29vZy51c2VyQWdlbnQuSUUpcmV0dXJuIGdvb2cudXNlckFnZW50LmdldERvY3VtZW50TW9kZV8oKX0oKSxnb29nLnVzZXJBZ2VudC5wcm9kdWN0PXt9LGdvb2cudXNlckFnZW50LnByb2R1Y3QuQVNTVU1FX0ZJUkVGT1g9ITEsZ29vZy51c2VyQWdlbnQucHJvZHVjdC5BU1NVTUVfSVBIT05FPSExLGdvb2cudXNlckFnZW50LnByb2R1Y3QuQVNTVU1FX0lQQUQ9ITEsZ29vZy51c2VyQWdlbnQucHJvZHVjdC5BU1NVTUVfQU5EUk9JRD0hMSxnb29nLnVzZXJBZ2VudC5wcm9kdWN0LkFTU1VNRV9DSFJPTUU9ITEsZ29vZy51c2VyQWdlbnQucHJvZHVjdC5BU1NVTUVfU0FGQVJJPSExLGdvb2cudXNlckFnZW50LnByb2R1Y3QuUFJPRFVDVF9LTk9XTl89Z29vZy51c2VyQWdlbnQuQVNTVU1FX0lFfHxnb29nLnVzZXJBZ2VudC5BU1NVTUVfRURHRXx8Z29vZy51c2VyQWdlbnQuQVNTVU1FX09QRVJBfHxnb29nLnVzZXJBZ2VudC5wcm9kdWN0LkFTU1VNRV9GSVJFRk9YfHxnb29nLnVzZXJBZ2VudC5wcm9kdWN0LkFTU1VNRV9JUEhPTkV8fGdvb2cudXNlckFnZW50LnByb2R1Y3QuQVNTVU1FX0lQQUR8fGdvb2cudXNlckFnZW50LnByb2R1Y3QuQVNTVU1FX0FORFJPSUR8fGdvb2cudXNlckFnZW50LnByb2R1Y3QuQVNTVU1FX0NIUk9NRXx8Z29vZy51c2VyQWdlbnQucHJvZHVjdC5BU1NVTUVfU0FGQVJJLGdvb2cudXNlckFnZW50LnByb2R1Y3QuT1BFUkE9Z29vZy51c2VyQWdlbnQuT1BFUkEsZ29vZy51c2VyQWdlbnQucHJvZHVjdC5JRT1nb29nLnVzZXJBZ2VudC5JRSxnb29nLnVzZXJBZ2VudC5wcm9kdWN0LkVER0U9Z29vZy51c2VyQWdlbnQuRURHRSxnb29nLnVzZXJBZ2VudC5wcm9kdWN0LkZJUkVGT1g9Z29vZy51c2VyQWdlbnQucHJvZHVjdC5QUk9EVUNUX0tOT1dOXz9nb29nLnVzZXJBZ2VudC5wcm9kdWN0LkFTU1VNRV9GSVJFRk9YOmdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5pc0ZpcmVmb3goKSxnb29nLnVzZXJBZ2VudC5wcm9kdWN0LmlzSXBob25lT3JJcG9kXz1mdW5jdGlvbigpe3JldHVybiBnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzSXBob25lKCl8fGdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNJcG9kKCl9LGdvb2cudXNlckFnZW50LnByb2R1Y3QuSVBIT05FPWdvb2cudXNlckFnZW50LnByb2R1Y3QuUFJPRFVDVF9LTk9XTl8/Z29vZy51c2VyQWdlbnQucHJvZHVjdC5BU1NVTUVfSVBIT05FOmdvb2cudXNlckFnZW50LnByb2R1Y3QuaXNJcGhvbmVPcklwb2RfKCksZ29vZy51c2VyQWdlbnQucHJvZHVjdC5JUEFEPWdvb2cudXNlckFnZW50LnByb2R1Y3QuUFJPRFVDVF9LTk9XTl8/Z29vZy51c2VyQWdlbnQucHJvZHVjdC5BU1NVTUVfSVBBRDpnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzSXBhZCgpLGdvb2cudXNlckFnZW50LnByb2R1Y3QuQU5EUk9JRD1nb29nLnVzZXJBZ2VudC5wcm9kdWN0LlBST0RVQ1RfS05PV05fP2dvb2cudXNlckFnZW50LnByb2R1Y3QuQVNTVU1FX0FORFJPSUQ6Z29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLmlzQW5kcm9pZEJyb3dzZXIoKSxnb29nLnVzZXJBZ2VudC5wcm9kdWN0LkNIUk9NRT1nb29nLnVzZXJBZ2VudC5wcm9kdWN0LlBST0RVQ1RfS05PV05fP2dvb2cudXNlckFnZW50LnByb2R1Y3QuQVNTVU1FX0NIUk9NRTpnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIuaXNDaHJvbWUoKSxnb29nLnVzZXJBZ2VudC5wcm9kdWN0LmlzU2FmYXJpRGVza3RvcF89ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLmlzU2FmYXJpKCkmJiFnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzSW9zKCl9LGdvb2cudXNlckFnZW50LnByb2R1Y3QuU0FGQVJJPWdvb2cudXNlckFnZW50LnByb2R1Y3QuUFJPRFVDVF9LTk9XTl8/Z29vZy51c2VyQWdlbnQucHJvZHVjdC5BU1NVTUVfU0FGQVJJOmdvb2cudXNlckFnZW50LnByb2R1Y3QuaXNTYWZhcmlEZXNrdG9wXygpLGdvb2cuY3J5cHQuYmFzZTY0PXt9LGdvb2cuY3J5cHQuYmFzZTY0LkRFRkFVTFRfQUxQSEFCRVRfQ09NTU9OXz1cIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5XCIsZ29vZy5jcnlwdC5iYXNlNjQuRU5DT0RFRF9WQUxTPWdvb2cuY3J5cHQuYmFzZTY0LkRFRkFVTFRfQUxQSEFCRVRfQ09NTU9OXytcIisvPVwiLGdvb2cuY3J5cHQuYmFzZTY0LkVOQ09ERURfVkFMU19XRUJTQUZFPWdvb2cuY3J5cHQuYmFzZTY0LkRFRkFVTFRfQUxQSEFCRVRfQ09NTU9OXytcIi1fLlwiLGdvb2cuY3J5cHQuYmFzZTY0LkFscGhhYmV0PXtERUZBVUxUOjAsTk9fUEFERElORzoxLFdFQlNBRkU6MixXRUJTQUZFX0RPVF9QQURESU5HOjMsV0VCU0FGRV9OT19QQURESU5HOjR9LGdvb2cuY3J5cHQuYmFzZTY0LnBhZGRpbmdDaGFyc189XCI9LlwiLGdvb2cuY3J5cHQuYmFzZTY0LmlzUGFkZGluZ189ZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cuc3RyaW5nLmNvbnRhaW5zKGdvb2cuY3J5cHQuYmFzZTY0LnBhZGRpbmdDaGFyc18sZSl9LGdvb2cuY3J5cHQuYmFzZTY0LmJ5dGVUb0NoYXJNYXBzXz17fTtnb29nLmNyeXB0LmJhc2U2NC5jaGFyVG9CeXRlTWFwXz1udWxsLGdvb2cuY3J5cHQuYmFzZTY0LkFTU1VNRV9OQVRJVkVfU1VQUE9SVF89Z29vZy51c2VyQWdlbnQuR0VDS098fGdvb2cudXNlckFnZW50LldFQktJVCYmIWdvb2cudXNlckFnZW50LnByb2R1Y3QuU0FGQVJJfHxnb29nLnVzZXJBZ2VudC5PUEVSQSxnb29nLmNyeXB0LmJhc2U2NC5IQVNfTkFUSVZFX0VOQ09ERV89Z29vZy5jcnlwdC5iYXNlNjQuQVNTVU1FX05BVElWRV9TVVBQT1JUX3x8XCJmdW5jdGlvblwiPT10eXBlb2YgZ29vZy5nbG9iYWwuYnRvYSxnb29nLmNyeXB0LmJhc2U2NC5IQVNfTkFUSVZFX0RFQ09ERV89Z29vZy5jcnlwdC5iYXNlNjQuQVNTVU1FX05BVElWRV9TVVBQT1JUX3x8IWdvb2cudXNlckFnZW50LnByb2R1Y3QuU0FGQVJJJiYhZ29vZy51c2VyQWdlbnQuSUUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGdvb2cuZ2xvYmFsLmF0b2IsZ29vZy5jcnlwdC5iYXNlNjQuZW5jb2RlQnl0ZUFycmF5PWZ1bmN0aW9uKGUsdCl7Z29vZy5hc3NlcnRzLmFzc2VydChnb29nLmlzQXJyYXlMaWtlKGUpLFwiZW5jb2RlQnl0ZUFycmF5IHRha2VzIGFuIGFycmF5IGFzIGEgcGFyYW1ldGVyXCIpLHZvaWQgMD09PXQmJih0PWdvb2cuY3J5cHQuYmFzZTY0LkFscGhhYmV0LkRFRkFVTFQpLGdvb2cuY3J5cHQuYmFzZTY0LmluaXRfKCksdD1nb29nLmNyeXB0LmJhc2U2NC5ieXRlVG9DaGFyTWFwc19bdF07Zm9yKHZhciBvPVtdLHI9MDtyPGUubGVuZ3RoO3IrPTMpe3ZhciBuPWVbcl0scz1yKzE8ZS5sZW5ndGgsaT1zP2VbcisxXTowLGE9cisyPGUubGVuZ3RoLGc9YT9lW3IrMl06MCxwPW4+PjI7bj0oMyZuKTw8NHxpPj40LGk9KDE1JmkpPDwyfGc+PjYsZyY9NjMsYXx8KGc9NjQsc3x8KGk9NjQpKSxvLnB1c2godFtwXSx0W25dLHRbaV18fFwiXCIsdFtnXXx8XCJcIil9cmV0dXJuIG8uam9pbihcIlwiKX0sZ29vZy5jcnlwdC5iYXNlNjQuZW5jb2RlU3RyaW5nPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGdvb2cuY3J5cHQuYmFzZTY0LkhBU19OQVRJVkVfRU5DT0RFXyYmIXQ/Z29vZy5nbG9iYWwuYnRvYShlKTpnb29nLmNyeXB0LmJhc2U2NC5lbmNvZGVCeXRlQXJyYXkoZ29vZy5jcnlwdC5zdHJpbmdUb0J5dGVBcnJheShlKSx0KX0sZ29vZy5jcnlwdC5iYXNlNjQuZGVjb2RlU3RyaW5nPWZ1bmN0aW9uKGUsdCl7aWYoZ29vZy5jcnlwdC5iYXNlNjQuSEFTX05BVElWRV9ERUNPREVfJiYhdClyZXR1cm4gZ29vZy5nbG9iYWwuYXRvYihlKTt2YXIgbz1cIlwiO3JldHVybiBnb29nLmNyeXB0LmJhc2U2NC5kZWNvZGVTdHJpbmdJbnRlcm5hbF8oZSwoZnVuY3Rpb24oZSl7bys9U3RyaW5nLmZyb21DaGFyQ29kZShlKX0pKSxvfSxnb29nLmNyeXB0LmJhc2U2NC5kZWNvZGVTdHJpbmdUb0J5dGVBcnJheT1mdW5jdGlvbihlLHQpe3ZhciBvPVtdO3JldHVybiBnb29nLmNyeXB0LmJhc2U2NC5kZWNvZGVTdHJpbmdJbnRlcm5hbF8oZSwoZnVuY3Rpb24oZSl7by5wdXNoKGUpfSkpLG99LGdvb2cuY3J5cHQuYmFzZTY0LmRlY29kZVN0cmluZ1RvVWludDhBcnJheT1mdW5jdGlvbihlKXtnb29nLmFzc2VydHMuYXNzZXJ0KCFnb29nLnVzZXJBZ2VudC5JRXx8Z29vZy51c2VyQWdlbnQuaXNWZXJzaW9uT3JIaWdoZXIoXCIxMFwiKSxcIkJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB0eXBlZCBhcnJheXNcIik7dmFyIHQ9ZS5sZW5ndGgsbz0zKnQvNDtvJTM/bz1NYXRoLmZsb29yKG8pOmdvb2cuY3J5cHQuYmFzZTY0LmlzUGFkZGluZ18oZVt0LTFdKSYmKG89Z29vZy5jcnlwdC5iYXNlNjQuaXNQYWRkaW5nXyhlW3QtMl0pP28tMjpvLTEpO3ZhciByPW5ldyBVaW50OEFycmF5KG8pLG49MDtyZXR1cm4gZ29vZy5jcnlwdC5iYXNlNjQuZGVjb2RlU3RyaW5nSW50ZXJuYWxfKGUsKGZ1bmN0aW9uKGUpe3JbbisrXT1lfSkpLHIuc3ViYXJyYXkoMCxuKX0sZ29vZy5jcnlwdC5iYXNlNjQuZGVjb2RlU3RyaW5nSW50ZXJuYWxfPWZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbyh0KXtmb3IoO3I8ZS5sZW5ndGg7KXt2YXIgbz1lLmNoYXJBdChyKyspLG49Z29vZy5jcnlwdC5iYXNlNjQuY2hhclRvQnl0ZU1hcF9bb107aWYobnVsbCE9bilyZXR1cm4gbjtpZighZ29vZy5zdHJpbmcuaXNFbXB0eU9yV2hpdGVzcGFjZShvKSl0aHJvdyBFcnJvcihcIlVua25vd24gYmFzZTY0IGVuY29kaW5nIGF0IGNoYXI6IFwiK28pfXJldHVybiB0fWdvb2cuY3J5cHQuYmFzZTY0LmluaXRfKCk7Zm9yKHZhciByPTA7Oyl7dmFyIG49bygtMSkscz1vKDApLGk9byg2NCksYT1vKDY0KTtpZig2ND09PWEmJi0xPT09bilicmVhazt0KG48PDJ8cz4+NCksNjQhPWkmJih0KHM8PDQmMjQwfGk+PjIpLDY0IT1hJiZ0KGk8PDYmMTkyfGEpKX19LGdvb2cuY3J5cHQuYmFzZTY0LmluaXRfPWZ1bmN0aW9uKCl7aWYoIWdvb2cuY3J5cHQuYmFzZTY0LmNoYXJUb0J5dGVNYXBfKXtnb29nLmNyeXB0LmJhc2U2NC5jaGFyVG9CeXRlTWFwXz17fTtmb3IodmFyIGU9Z29vZy5jcnlwdC5iYXNlNjQuREVGQVVMVF9BTFBIQUJFVF9DT01NT05fLnNwbGl0KFwiXCIpLHQ9W1wiKy89XCIsXCIrL1wiLFwiLV89XCIsXCItXy5cIixcIi1fXCJdLG89MDs1Pm87bysrKXt2YXIgcj1lLmNvbmNhdCh0W29dLnNwbGl0KFwiXCIpKTtnb29nLmNyeXB0LmJhc2U2NC5ieXRlVG9DaGFyTWFwc19bb109cjtmb3IodmFyIG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIHM9cltuXSxpPWdvb2cuY3J5cHQuYmFzZTY0LmNoYXJUb0J5dGVNYXBfW3NdO3ZvaWQgMD09PWk/Z29vZy5jcnlwdC5iYXNlNjQuY2hhclRvQnl0ZU1hcF9bc109bjpnb29nLmFzc2VydHMuYXNzZXJ0KGk9PT1uKX19fX0sanNwYi51dGlscz17fSxqc3BiLnV0aWxzLnNwbGl0NjRMb3c9MCxqc3BiLnV0aWxzLnNwbGl0NjRIaWdoPTAsanNwYi51dGlscy5zcGxpdFVpbnQ2ND1mdW5jdGlvbihlKXt2YXIgdD1lPj4+MDtlPU1hdGguZmxvb3IoKGUtdCkvanNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMyKT4+PjAsanNwYi51dGlscy5zcGxpdDY0TG93PXQsanNwYi51dGlscy5zcGxpdDY0SGlnaD1lfSxqc3BiLnV0aWxzLnNwbGl0SW50NjQ9ZnVuY3Rpb24oZSl7dmFyIHQ9MD5lLG89KGU9TWF0aC5hYnMoZSkpPj4+MDtlPU1hdGguZmxvb3IoKGUtbykvanNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMyKSxlPj4+PTAsdCYmKGU9fmU+Pj4wLDQyOTQ5NjcyOTU8KG89MSsofm8+Pj4wKSkmJihvPTAsNDI5NDk2NzI5NTwrK2UmJihlPTApKSksanNwYi51dGlscy5zcGxpdDY0TG93PW8sanNwYi51dGlscy5zcGxpdDY0SGlnaD1lfSxqc3BiLnV0aWxzLnNwbGl0WmlnemFnNjQ9ZnVuY3Rpb24oZSl7dmFyIHQ9MD5lO2U9MipNYXRoLmFicyhlKSxqc3BiLnV0aWxzLnNwbGl0VWludDY0KGUpLGU9anNwYi51dGlscy5zcGxpdDY0TG93O3ZhciBvPWpzcGIudXRpbHMuc3BsaXQ2NEhpZ2g7dCYmKDA9PWU/MD09bz9vPWU9NDI5NDk2NzI5NTooby0tLGU9NDI5NDk2NzI5NSk6ZS0tKSxqc3BiLnV0aWxzLnNwbGl0NjRMb3c9ZSxqc3BiLnV0aWxzLnNwbGl0NjRIaWdoPW99LGpzcGIudXRpbHMuc3BsaXRGbG9hdDMyPWZ1bmN0aW9uKGUpe3ZhciB0PTA+ZT8xOjA7aWYoMD09PShlPXQ/LWU6ZSkpMDwxL2U/KGpzcGIudXRpbHMuc3BsaXQ2NEhpZ2g9MCxqc3BiLnV0aWxzLnNwbGl0NjRMb3c9MCk6KGpzcGIudXRpbHMuc3BsaXQ2NEhpZ2g9MCxqc3BiLnV0aWxzLnNwbGl0NjRMb3c9MjE0NzQ4MzY0OCk7ZWxzZSBpZihpc05hTihlKSlqc3BiLnV0aWxzLnNwbGl0NjRIaWdoPTAsanNwYi51dGlscy5zcGxpdDY0TG93PTIxNDc0ODM2NDc7ZWxzZSBpZihlPmpzcGIuQmluYXJ5Q29uc3RhbnRzLkZMT0FUMzJfTUFYKWpzcGIudXRpbHMuc3BsaXQ2NEhpZ2g9MCxqc3BiLnV0aWxzLnNwbGl0NjRMb3c9KHQ8PDMxfDIxMzkwOTUwNDApPj4+MDtlbHNlIGlmKGU8anNwYi5CaW5hcnlDb25zdGFudHMuRkxPQVQzMl9NSU4pZT1NYXRoLnJvdW5kKGUvTWF0aC5wb3coMiwtMTQ5KSksanNwYi51dGlscy5zcGxpdDY0SGlnaD0wLGpzcGIudXRpbHMuc3BsaXQ2NExvdz0odDw8MzF8ZSk+Pj4wO2Vsc2V7dmFyIG89TWF0aC5mbG9vcihNYXRoLmxvZyhlKS9NYXRoLkxOMik7ZSo9TWF0aC5wb3coMiwtbyksMTY3NzcyMTY8PShlPU1hdGgucm91bmQoZSpqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMjMpKSYmKytvLGpzcGIudXRpbHMuc3BsaXQ2NEhpZ2g9MCxqc3BiLnV0aWxzLnNwbGl0NjRMb3c9KHQ8PDMxfG8rMTI3PDwyM3w4Mzg4NjA3JmUpPj4+MH19LGpzcGIudXRpbHMuc3BsaXRGbG9hdDY0PWZ1bmN0aW9uKGUpe3ZhciB0PTA+ZT8xOjA7aWYoMD09PShlPXQ/LWU6ZSkpanNwYi51dGlscy5zcGxpdDY0SGlnaD0wPDEvZT8wOjIxNDc0ODM2NDgsanNwYi51dGlscy5zcGxpdDY0TG93PTA7ZWxzZSBpZihpc05hTihlKSlqc3BiLnV0aWxzLnNwbGl0NjRIaWdoPTIxNDc0ODM2NDcsanNwYi51dGlscy5zcGxpdDY0TG93PTQyOTQ5NjcyOTU7ZWxzZSBpZihlPmpzcGIuQmluYXJ5Q29uc3RhbnRzLkZMT0FUNjRfTUFYKWpzcGIudXRpbHMuc3BsaXQ2NEhpZ2g9KHQ8PDMxfDIxNDY0MzUwNzIpPj4+MCxqc3BiLnV0aWxzLnNwbGl0NjRMb3c9MDtlbHNlIGlmKGU8anNwYi5CaW5hcnlDb25zdGFudHMuRkxPQVQ2NF9NSU4pe3ZhciBvPWUvTWF0aC5wb3coMiwtMTA3NCk7ZT1vL2pzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18zMixqc3BiLnV0aWxzLnNwbGl0NjRIaWdoPSh0PDwzMXxlKT4+PjAsanNwYi51dGlscy5zcGxpdDY0TG93PW8+Pj4wfWVsc2V7dmFyIHI9MDtpZigyPD0obz1lKSlmb3IoOzI8PW8mJjEwMjM+cjspcisrLG8vPTI7ZWxzZSBmb3IoOzE+byYmLTEwMjI8cjspbyo9MixyLS07ZT0obz1lKk1hdGgucG93KDIsLXIpKSpqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMjAmMTA0ODU3NSxvPW8qanNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzUyPj4+MCxqc3BiLnV0aWxzLnNwbGl0NjRIaWdoPSh0PDwzMXxyKzEwMjM8PDIwfGUpPj4+MCxqc3BiLnV0aWxzLnNwbGl0NjRMb3c9b319LGpzcGIudXRpbHMuc3BsaXRIYXNoNjQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jaGFyQ29kZUF0KDApLG89ZS5jaGFyQ29kZUF0KDEpLHI9ZS5jaGFyQ29kZUF0KDIpLG49ZS5jaGFyQ29kZUF0KDMpLHM9ZS5jaGFyQ29kZUF0KDQpLGk9ZS5jaGFyQ29kZUF0KDUpLGE9ZS5jaGFyQ29kZUF0KDYpO2U9ZS5jaGFyQ29kZUF0KDcpLGpzcGIudXRpbHMuc3BsaXQ2NExvdz10KyhvPDw4KSsocjw8MTYpKyhuPDwyNCk+Pj4wLGpzcGIudXRpbHMuc3BsaXQ2NEhpZ2g9cysoaTw8OCkrKGE8PDE2KSsoZTw8MjQpPj4+MH0sanNwYi51dGlscy5qb2luVWludDY0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQqanNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMyKyhlPj4+MCl9LGpzcGIudXRpbHMuam9pbkludDY0PWZ1bmN0aW9uKGUsdCl7dmFyIG89MjE0NzQ4MzY0OCZ0O3JldHVybiBvJiYodD1+dD4+PjAsMD09KGU9MSt+ZT4+PjApJiYodD10KzE+Pj4wKSksZT1qc3BiLnV0aWxzLmpvaW5VaW50NjQoZSx0KSxvPy1lOmV9LGpzcGIudXRpbHMudG9aaWd6YWc2ND1mdW5jdGlvbihlLHQsbyl7dmFyIHI9dD4+MzE7cmV0dXJuIG8oZTw8MV5yLCh0PDwxfGU+Pj4zMSlecil9LGpzcGIudXRpbHMuam9pblppZ3phZzY0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGpzcGIudXRpbHMuZnJvbVppZ3phZzY0KGUsdCxqc3BiLnV0aWxzLmpvaW5JbnQ2NCl9LGpzcGIudXRpbHMuZnJvbVppZ3phZzY0PWZ1bmN0aW9uKGUsdCxvKXt2YXIgcj0tKDEmZSk7cmV0dXJuIG8oKGU+Pj4xfHQ8PDMxKV5yLHQ+Pj4xXnIpfSxqc3BiLnV0aWxzLmpvaW5GbG9hdDMyPWZ1bmN0aW9uKGUsdCl7dD0yKihlPj4zMSkrMTt2YXIgbz1lPj4+MjMmMjU1O3JldHVybiBlJj04Mzg4NjA3LDI1NT09bz9lP05hTjoxLzAqdDowPT1vP3QqTWF0aC5wb3coMiwtMTQ5KSplOnQqTWF0aC5wb3coMixvLTE1MCkqKGUrTWF0aC5wb3coMiwyMykpfSxqc3BiLnV0aWxzLmpvaW5GbG9hdDY0PWZ1bmN0aW9uKGUsdCl7dmFyIG89MioodD4+MzEpKzEscj10Pj4+MjAmMjA0NztyZXR1cm4gZT1qc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMzIqKDEwNDg1NzUmdCkrZSwyMDQ3PT1yP2U/TmFOOjEvMCpvOjA9PXI/bypNYXRoLnBvdygyLC0xMDc0KSplOm8qTWF0aC5wb3coMixyLTEwNzUpKihlK2pzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT181Mil9LGpzcGIudXRpbHMuam9pbkhhc2g2ND1mdW5jdGlvbihlLHQpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGU+Pj4wJjI1NSxlPj4+OCYyNTUsZT4+PjE2JjI1NSxlPj4+MjQmMjU1LHQ+Pj4wJjI1NSx0Pj4+OCYyNTUsdD4+PjE2JjI1NSx0Pj4+MjQmMjU1KX0sanNwYi51dGlscy5ESUdJVFM9XCIwMTIzNDU2Nzg5YWJjZGVmXCIuc3BsaXQoXCJcIiksanNwYi51dGlscy5aRVJPX0NIQVJfQ09ERV89NDgsanNwYi51dGlscy5BX0NIQVJfQ09ERV89OTcsanNwYi51dGlscy5qb2luVW5zaWduZWREZWNpbWFsU3RyaW5nPWZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbyhlLHQpe3JldHVybiBlPWU/U3RyaW5nKGUpOlwiXCIsdD9cIjAwMDAwMDBcIi5zbGljZShlLmxlbmd0aCkrZTplfWlmKDIwOTcxNTE+PXQpcmV0dXJuXCJcIitqc3BiLnV0aWxzLmpvaW5VaW50NjQoZSx0KTt2YXIgcj0oZT4+PjI0fHQ8PDgpPj4+MCYxNjc3NzIxNTtyZXR1cm4gZT0oMTY3NzcyMTUmZSkrNjc3NzIxNipyKzY3MTA2NTYqKHQ9dD4+MTYmNjU1MzUpLHIrPTgxNDc0OTcqdCx0Kj0yLDFlNzw9ZSYmKHIrPU1hdGguZmxvb3IoZS8xZTcpLGUlPTFlNyksMWU3PD1yJiYodCs9TWF0aC5mbG9vcihyLzFlNyksciU9MWU3KSxvKHQsMCkrbyhyLHQpK28oZSwxKX0sanNwYi51dGlscy5qb2luU2lnbmVkRGVjaW1hbFN0cmluZz1mdW5jdGlvbihlLHQpe3ZhciBvPTIxNDc0ODM2NDgmdDtyZXR1cm4gbyYmKHQ9fnQrKDA9PShlPTErfmU+Pj4wKT8xOjApPj4+MCksZT1qc3BiLnV0aWxzLmpvaW5VbnNpZ25lZERlY2ltYWxTdHJpbmcoZSx0KSxvP1wiLVwiK2U6ZX0sanNwYi51dGlscy5oYXNoNjRUb0RlY2ltYWxTdHJpbmc9ZnVuY3Rpb24oZSx0KXtqc3BiLnV0aWxzLnNwbGl0SGFzaDY0KGUpLGU9anNwYi51dGlscy5zcGxpdDY0TG93O3ZhciBvPWpzcGIudXRpbHMuc3BsaXQ2NEhpZ2g7cmV0dXJuIHQ/anNwYi51dGlscy5qb2luU2lnbmVkRGVjaW1hbFN0cmluZyhlLG8pOmpzcGIudXRpbHMuam9pblVuc2lnbmVkRGVjaW1hbFN0cmluZyhlLG8pfSxqc3BiLnV0aWxzLmhhc2g2NEFycmF5VG9EZWNpbWFsU3RyaW5ncz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbz1BcnJheShlLmxlbmd0aCkscj0wO3I8ZS5sZW5ndGg7cisrKW9bcl09anNwYi51dGlscy5oYXNoNjRUb0RlY2ltYWxTdHJpbmcoZVtyXSx0KTtyZXR1cm4gb30sanNwYi51dGlscy5kZWNpbWFsU3RyaW5nVG9IYXNoNjQ9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlLHQpe2Zvcih2YXIgbz0wOzg+byYmKDEhPT1lfHwwPHQpO28rKyl0PWUqcltvXSt0LHJbb109MjU1JnQsdD4+Pj04fWdvb2cuYXNzZXJ0cy5hc3NlcnQoMDxlLmxlbmd0aCk7dmFyIG89ITE7XCItXCI9PT1lWzBdJiYobz0hMCxlPWUuc2xpY2UoMSkpO2Zvcih2YXIgcj1bMCwwLDAsMCwwLDAsMCwwXSxuPTA7bjxlLmxlbmd0aDtuKyspdCgxMCxlLmNoYXJDb2RlQXQobiktanNwYi51dGlscy5aRVJPX0NIQVJfQ09ERV8pO3JldHVybiBvJiYoZnVuY3Rpb24oKXtmb3IodmFyIGU9MDs4PmU7ZSsrKXJbZV09MjU1Jn5yW2VdfSgpLHQoMSwxKSksZ29vZy5jcnlwdC5ieXRlQXJyYXlUb1N0cmluZyhyKX0sanNwYi51dGlscy5zcGxpdERlY2ltYWxTdHJpbmc9ZnVuY3Rpb24oZSl7anNwYi51dGlscy5zcGxpdEhhc2g2NChqc3BiLnV0aWxzLmRlY2ltYWxTdHJpbmdUb0hhc2g2NChlKSl9LGpzcGIudXRpbHMudG9IZXhEaWdpdF89ZnVuY3Rpb24oZSl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoMTA+ZT9qc3BiLnV0aWxzLlpFUk9fQ0hBUl9DT0RFXytlOmpzcGIudXRpbHMuQV9DSEFSX0NPREVfLTEwK2UpfSxqc3BiLnV0aWxzLmZyb21IZXhDaGFyQ29kZV89ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PWpzcGIudXRpbHMuQV9DSEFSX0NPREVfP2UtanNwYi51dGlscy5BX0NIQVJfQ09ERV8rMTA6ZS1qc3BiLnV0aWxzLlpFUk9fQ0hBUl9DT0RFX30sanNwYi51dGlscy5oYXNoNjRUb0hleFN0cmluZz1mdW5jdGlvbihlKXt2YXIgdD1BcnJheSgxOCk7dFswXT1cIjBcIix0WzFdPVwieFwiO2Zvcih2YXIgbz0wOzg+bztvKyspe3ZhciByPWUuY2hhckNvZGVBdCg3LW8pO3RbMipvKzJdPWpzcGIudXRpbHMudG9IZXhEaWdpdF8ocj4+NCksdFsyKm8rM109anNwYi51dGlscy50b0hleERpZ2l0XygxNSZyKX1yZXR1cm4gdC5qb2luKFwiXCIpfSxqc3BiLnV0aWxzLmhleFN0cmluZ1RvSGFzaDY0PWZ1bmN0aW9uKGUpe2U9ZS50b0xvd2VyQ2FzZSgpLGdvb2cuYXNzZXJ0cy5hc3NlcnQoMTg9PWUubGVuZ3RoKSxnb29nLmFzc2VydHMuYXNzZXJ0KFwiMFwiPT1lWzBdKSxnb29nLmFzc2VydHMuYXNzZXJ0KFwieFwiPT1lWzFdKTtmb3IodmFyIHQ9XCJcIixvPTA7OD5vO28rKyl7dmFyIHI9anNwYi51dGlscy5mcm9tSGV4Q2hhckNvZGVfKGUuY2hhckNvZGVBdCgyKm8rMikpLG49anNwYi51dGlscy5mcm9tSGV4Q2hhckNvZGVfKGUuY2hhckNvZGVBdCgyKm8rMykpO3Q9U3RyaW5nLmZyb21DaGFyQ29kZSgxNipyK24pK3R9cmV0dXJuIHR9LGpzcGIudXRpbHMuaGFzaDY0VG9OdW1iZXI9ZnVuY3Rpb24oZSx0KXtqc3BiLnV0aWxzLnNwbGl0SGFzaDY0KGUpLGU9anNwYi51dGlscy5zcGxpdDY0TG93O3ZhciBvPWpzcGIudXRpbHMuc3BsaXQ2NEhpZ2g7cmV0dXJuIHQ/anNwYi51dGlscy5qb2luSW50NjQoZSxvKTpqc3BiLnV0aWxzLmpvaW5VaW50NjQoZSxvKX0sanNwYi51dGlscy5udW1iZXJUb0hhc2g2ND1mdW5jdGlvbihlKXtyZXR1cm4ganNwYi51dGlscy5zcGxpdEludDY0KGUpLGpzcGIudXRpbHMuam9pbkhhc2g2NChqc3BiLnV0aWxzLnNwbGl0NjRMb3csanNwYi51dGlscy5zcGxpdDY0SGlnaCl9LGpzcGIudXRpbHMuY291bnRWYXJpbnRzPWZ1bmN0aW9uKGUsdCxvKXtmb3IodmFyIHI9MCxuPXQ7bjxvO24rKylyKz1lW25dPj43O3JldHVybiBvLXQtcn0sanNwYi51dGlscy5jb3VudFZhcmludEZpZWxkcz1mdW5jdGlvbihlLHQsbyxyKXt2YXIgbj0wO2lmKDEyOD4ocj04KnIranNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuVkFSSU5UKSlmb3IoO3Q8byYmZVt0KytdPT1yOylmb3IobisrOzspe3ZhciBzPWVbdCsrXTtpZigwPT0oMTI4JnMpKWJyZWFrfWVsc2UgZm9yKDt0PG87KXtmb3Iocz1yOzEyODxzOyl7aWYoZVt0XSE9KDEyNyZzfDEyOCkpcmV0dXJuIG47dCsrLHM+Pj03fWlmKGVbdCsrXSE9cylicmVhaztmb3IobisrOzAhPSgxMjgmKHM9ZVt0KytdKSk7KTt9cmV0dXJuIG59LGpzcGIudXRpbHMuY291bnRGaXhlZEZpZWxkc189ZnVuY3Rpb24oZSx0LG8scixuKXt2YXIgcz0wO2lmKDEyOD5yKWZvcig7dDxvJiZlW3QrK109PXI7KXMrKyx0Kz1uO2Vsc2UgZm9yKDt0PG87KXtmb3IodmFyIGk9cjsxMjg8aTspe2lmKGVbdCsrXSE9KDEyNyZpfDEyOCkpcmV0dXJuIHM7aT4+PTd9aWYoZVt0KytdIT1pKWJyZWFrO3MrKyx0Kz1ufXJldHVybiBzfSxqc3BiLnV0aWxzLmNvdW50Rml4ZWQzMkZpZWxkcz1mdW5jdGlvbihlLHQsbyxyKXtyZXR1cm4ganNwYi51dGlscy5jb3VudEZpeGVkRmllbGRzXyhlLHQsbyw4KnIranNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRklYRUQzMiw0KX0sanNwYi51dGlscy5jb3VudEZpeGVkNjRGaWVsZHM9ZnVuY3Rpb24oZSx0LG8scil7cmV0dXJuIGpzcGIudXRpbHMuY291bnRGaXhlZEZpZWxkc18oZSx0LG8sOCpyK2pzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkZJWEVENjQsOCl9LGpzcGIudXRpbHMuY291bnREZWxpbWl0ZWRGaWVsZHM9ZnVuY3Rpb24oZSx0LG8scil7dmFyIG49MDtmb3Iocj04KnIranNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuREVMSU1JVEVEO3Q8bzspe2Zvcih2YXIgcz1yOzEyODxzOyl7aWYoZVt0KytdIT0oMTI3JnN8MTI4KSlyZXR1cm4gbjtzPj49N31pZihlW3QrK10hPXMpYnJlYWs7bisrO2Zvcih2YXIgaT0wLGE9MTtpKz0oMTI3JihzPWVbdCsrXSkpKmEsYSo9MTI4LDAhPSgxMjgmcyk7KTt0Kz1pfXJldHVybiBufSxqc3BiLnV0aWxzLmRlYnVnQnl0ZXNUb1RleHRGb3JtYXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9J1wiJztpZihlKXtlPWpzcGIudXRpbHMuYnl0ZVNvdXJjZVRvVWludDhBcnJheShlKTtmb3IodmFyIG89MDtvPGUubGVuZ3RoO28rKyl0Kz1cIlxcXFx4XCIsMTY+ZVtvXSYmKHQrPVwiMFwiKSx0Kz1lW29dLnRvU3RyaW5nKDE2KX1yZXR1cm4gdCsnXCInfSxqc3BiLnV0aWxzLmRlYnVnU2NhbGFyVG9UZXh0Rm9ybWF0PWZ1bmN0aW9uKGUpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlP2dvb2cuc3RyaW5nLnF1b3RlKGUpOmUudG9TdHJpbmcoKX0sanNwYi51dGlscy5zdHJpbmdUb0J5dGVBcnJheT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9bmV3IFVpbnQ4QXJyYXkoZS5sZW5ndGgpLG89MDtvPGUubGVuZ3RoO28rKyl7dmFyIHI9ZS5jaGFyQ29kZUF0KG8pO2lmKDI1NTxyKXRocm93IEVycm9yKFwiQ29udmVyc2lvbiBlcnJvcjogc3RyaW5nIGNvbnRhaW5zIGNvZGVwb2ludCBvdXRzaWRlIG9mIGJ5dGUgcmFuZ2VcIik7dFtvXT1yfXJldHVybiB0fSxqc3BiLnV0aWxzLmJ5dGVTb3VyY2VUb1VpbnQ4QXJyYXk9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuY29uc3RydWN0b3I9PT1VaW50OEFycmF5P2U6ZS5jb25zdHJ1Y3Rvcj09PUFycmF5QnVmZmVyfHxcInVuZGVmaW5lZFwiIT10eXBlb2YgQnVmZmVyJiZlLmNvbnN0cnVjdG9yPT09QnVmZmVyfHxlLmNvbnN0cnVjdG9yPT09QXJyYXk/bmV3IFVpbnQ4QXJyYXkoZSk6ZS5jb25zdHJ1Y3Rvcj09PVN0cmluZz9nb29nLmNyeXB0LmJhc2U2NC5kZWNvZGVTdHJpbmdUb1VpbnQ4QXJyYXkoZSk6KGdvb2cuYXNzZXJ0cy5mYWlsKFwiVHlwZSBub3QgY29udmVydGlibGUgdG8gVWludDhBcnJheS5cIiksbmV3IFVpbnQ4QXJyYXkoMCkpfSxqc3BiLkJpbmFyeURlY29kZXI9ZnVuY3Rpb24oZSx0LG8pe3RoaXMuYnl0ZXNfPW51bGwsdGhpcy5jdXJzb3JfPXRoaXMuZW5kXz10aGlzLnN0YXJ0Xz0wLHRoaXMuZXJyb3JfPSExLGUmJnRoaXMuc2V0QmxvY2soZSx0LG8pfSxqc3BiLkJpbmFyeURlY29kZXIuaW5zdGFuY2VDYWNoZV89W10sanNwYi5CaW5hcnlEZWNvZGVyLmFsbG9jPWZ1bmN0aW9uKGUsdCxvKXtpZihqc3BiLkJpbmFyeURlY29kZXIuaW5zdGFuY2VDYWNoZV8ubGVuZ3RoKXt2YXIgcj1qc3BiLkJpbmFyeURlY29kZXIuaW5zdGFuY2VDYWNoZV8ucG9wKCk7cmV0dXJuIGUmJnIuc2V0QmxvY2soZSx0LG8pLHJ9cmV0dXJuIG5ldyBqc3BiLkJpbmFyeURlY29kZXIoZSx0LG8pfSxqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLmZyZWU9ZnVuY3Rpb24oKXt0aGlzLmNsZWFyKCksMTAwPmpzcGIuQmluYXJ5RGVjb2Rlci5pbnN0YW5jZUNhY2hlXy5sZW5ndGgmJmpzcGIuQmluYXJ5RGVjb2Rlci5pbnN0YW5jZUNhY2hlXy5wdXNoKHRoaXMpfSxqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIGpzcGIuQmluYXJ5RGVjb2Rlci5hbGxvYyh0aGlzLmJ5dGVzXyx0aGlzLnN0YXJ0Xyx0aGlzLmVuZF8tdGhpcy5zdGFydF8pfSxqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5ieXRlc189bnVsbCx0aGlzLmN1cnNvcl89dGhpcy5lbmRfPXRoaXMuc3RhcnRfPTAsdGhpcy5lcnJvcl89ITF9LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUuZ2V0QnVmZmVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYnl0ZXNffSxqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnNldEJsb2NrPWZ1bmN0aW9uKGUsdCxvKXt0aGlzLmJ5dGVzXz1qc3BiLnV0aWxzLmJ5dGVTb3VyY2VUb1VpbnQ4QXJyYXkoZSksdGhpcy5zdGFydF89dm9pZCAwIT09dD90OjAsdGhpcy5lbmRfPXZvaWQgMCE9PW8/dGhpcy5zdGFydF8rbzp0aGlzLmJ5dGVzXy5sZW5ndGgsdGhpcy5jdXJzb3JfPXRoaXMuc3RhcnRffSxqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLmdldEVuZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVuZF99LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUuc2V0RW5kPWZ1bmN0aW9uKGUpe3RoaXMuZW5kXz1lfSxqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5jdXJzb3JfPXRoaXMuc3RhcnRffSxqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLmdldEN1cnNvcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnNvcl99LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUuc2V0Q3Vyc29yPWZ1bmN0aW9uKGUpe3RoaXMuY3Vyc29yXz1lfSxqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLmFkdmFuY2U9ZnVuY3Rpb24oZSl7dGhpcy5jdXJzb3JfKz1lLGdvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5jdXJzb3JfPD10aGlzLmVuZF8pfSxqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLmF0RW5kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3Vyc29yXz09dGhpcy5lbmRffSxqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnBhc3RFbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJzb3JfPnRoaXMuZW5kX30sanNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5nZXRFcnJvcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVycm9yX3x8MD50aGlzLmN1cnNvcl98fHRoaXMuY3Vyc29yXz50aGlzLmVuZF99LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZFNwbGl0VmFyaW50NjQ9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTEyOCxvPTAscj0wLG49MDs0Pm4mJjEyODw9dDtuKyspb3w9KDEyNyYodD10aGlzLmJ5dGVzX1t0aGlzLmN1cnNvcl8rK10pKTw8NypuO2lmKDEyODw9dCYmKG98PSgxMjcmKHQ9dGhpcy5ieXRlc19bdGhpcy5jdXJzb3JfKytdKSk8PDI4LHJ8PSgxMjcmdCk+PjQpLDEyODw9dClmb3Iobj0wOzU+biYmMTI4PD10O24rKylyfD0oMTI3Jih0PXRoaXMuYnl0ZXNfW3RoaXMuY3Vyc29yXysrXSkpPDw3Km4rMztpZigxMjg+dClyZXR1cm4gZShvPj4+MCxyPj4+MCk7Z29vZy5hc3NlcnRzLmZhaWwoXCJGYWlsZWQgdG8gcmVhZCB2YXJpbnQsIGVuY29kaW5nIGlzIGludmFsaWQuXCIpLHRoaXMuZXJyb3JfPSEwfSxqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnJlYWRTcGxpdFppZ3phZ1ZhcmludDY0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnJlYWRTcGxpdFZhcmludDY0KChmdW5jdGlvbih0LG8pe3JldHVybiBqc3BiLnV0aWxzLmZyb21aaWd6YWc2NCh0LG8sZSl9KSl9LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZFNwbGl0Rml4ZWQ2ND1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmJ5dGVzXyxvPXRoaXMuY3Vyc29yXzt0aGlzLmN1cnNvcl8rPTg7Zm9yKHZhciByPTAsbj0wLHM9bys3O3M+PW87cy0tKXI9cjw8OHx0W3NdLG49bjw8OHx0W3MrNF07cmV0dXJuIGUocixuKX0sanNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5za2lwVmFyaW50PWZ1bmN0aW9uKCl7Zm9yKDsxMjgmdGhpcy5ieXRlc19bdGhpcy5jdXJzb3JfXTspdGhpcy5jdXJzb3JfKys7dGhpcy5jdXJzb3JfKyt9LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUudW5za2lwVmFyaW50PWZ1bmN0aW9uKGUpe2Zvcig7MTI4PGU7KXRoaXMuY3Vyc29yXy0tLGU+Pj49Nzt0aGlzLmN1cnNvcl8tLX0sanNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkVW5zaWduZWRWYXJpbnQzMj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuYnl0ZXNfLHQ9ZVt0aGlzLmN1cnNvcl8rMF0sbz0xMjcmdDtyZXR1cm4gMTI4PnQ/KHRoaXMuY3Vyc29yXys9MSxnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMuY3Vyc29yXzw9dGhpcy5lbmRfKSxvKToob3w9KDEyNyYodD1lW3RoaXMuY3Vyc29yXysxXSkpPDw3LDEyOD50Pyh0aGlzLmN1cnNvcl8rPTIsZ29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLmN1cnNvcl88PXRoaXMuZW5kXyksbyk6KG98PSgxMjcmKHQ9ZVt0aGlzLmN1cnNvcl8rMl0pKTw8MTQsMTI4PnQ/KHRoaXMuY3Vyc29yXys9Myxnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMuY3Vyc29yXzw9dGhpcy5lbmRfKSxvKToob3w9KDEyNyYodD1lW3RoaXMuY3Vyc29yXyszXSkpPDwyMSwxMjg+dD8odGhpcy5jdXJzb3JfKz00LGdvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5jdXJzb3JfPD10aGlzLmVuZF8pLG8pOihvfD0oMTUmKHQ9ZVt0aGlzLmN1cnNvcl8rNF0pKTw8MjgsMTI4PnQ/KHRoaXMuY3Vyc29yXys9NSxnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMuY3Vyc29yXzw9dGhpcy5lbmRfKSxvPj4+MCk6KHRoaXMuY3Vyc29yXys9NSwxMjg8PWVbdGhpcy5jdXJzb3JfKytdJiYxMjg8PWVbdGhpcy5jdXJzb3JfKytdJiYxMjg8PWVbdGhpcy5jdXJzb3JfKytdJiYxMjg8PWVbdGhpcy5jdXJzb3JfKytdJiYxMjg8PWVbdGhpcy5jdXJzb3JfKytdJiZnb29nLmFzc2VydHMuYXNzZXJ0KCExKSxnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMuY3Vyc29yXzw9dGhpcy5lbmRfKSxvKSkpKSl9LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZFNpZ25lZFZhcmludDMyPWpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZFVuc2lnbmVkVmFyaW50MzIsanNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkVW5zaWduZWRWYXJpbnQzMlN0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRVbnNpZ25lZFZhcmludDMyKCkudG9TdHJpbmcoKX0sanNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkU2lnbmVkVmFyaW50MzJTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkU2lnbmVkVmFyaW50MzIoKS50b1N0cmluZygpfSxqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnJlYWRaaWd6YWdWYXJpbnQzMj1mdW5jdGlvbigpe3ZhciBlPXRoaXMucmVhZFVuc2lnbmVkVmFyaW50MzIoKTtyZXR1cm4gZT4+PjFeLSgxJmUpfSxqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnJlYWRVbnNpZ25lZFZhcmludDY0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFNwbGl0VmFyaW50NjQoanNwYi51dGlscy5qb2luVWludDY0KX0sanNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkVW5zaWduZWRWYXJpbnQ2NFN0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRTcGxpdFZhcmludDY0KGpzcGIudXRpbHMuam9pblVuc2lnbmVkRGVjaW1hbFN0cmluZyl9LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZFNpZ25lZFZhcmludDY0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFNwbGl0VmFyaW50NjQoanNwYi51dGlscy5qb2luSW50NjQpfSxqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnJlYWRTaWduZWRWYXJpbnQ2NFN0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRTcGxpdFZhcmludDY0KGpzcGIudXRpbHMuam9pblNpZ25lZERlY2ltYWxTdHJpbmcpfSxqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnJlYWRaaWd6YWdWYXJpbnQ2ND1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRTcGxpdFZhcmludDY0KGpzcGIudXRpbHMuam9pblppZ3phZzY0KX0sanNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkWmlnemFnVmFyaW50SGFzaDY0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFNwbGl0WmlnemFnVmFyaW50NjQoanNwYi51dGlscy5qb2luSGFzaDY0KX0sanNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkWmlnemFnVmFyaW50NjRTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkU3BsaXRaaWd6YWdWYXJpbnQ2NChqc3BiLnV0aWxzLmpvaW5TaWduZWREZWNpbWFsU3RyaW5nKX0sanNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkVWludDg9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmJ5dGVzX1t0aGlzLmN1cnNvcl8rMF07cmV0dXJuIHRoaXMuY3Vyc29yXys9MSxnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMuY3Vyc29yXzw9dGhpcy5lbmRfKSxlfSxqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnJlYWRVaW50MTY9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmJ5dGVzX1t0aGlzLmN1cnNvcl8rMF0sdD10aGlzLmJ5dGVzX1t0aGlzLmN1cnNvcl8rMV07cmV0dXJuIHRoaXMuY3Vyc29yXys9Mixnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMuY3Vyc29yXzw9dGhpcy5lbmRfKSxlPDwwfHQ8PDh9LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZFVpbnQzMj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuYnl0ZXNfW3RoaXMuY3Vyc29yXyswXSx0PXRoaXMuYnl0ZXNfW3RoaXMuY3Vyc29yXysxXSxvPXRoaXMuYnl0ZXNfW3RoaXMuY3Vyc29yXysyXSxyPXRoaXMuYnl0ZXNfW3RoaXMuY3Vyc29yXyszXTtyZXR1cm4gdGhpcy5jdXJzb3JfKz00LGdvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5jdXJzb3JfPD10aGlzLmVuZF8pLChlPDwwfHQ8PDh8bzw8MTZ8cjw8MjQpPj4+MH0sanNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkVWludDY0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5yZWFkVWludDMyKCksdD10aGlzLnJlYWRVaW50MzIoKTtyZXR1cm4ganNwYi51dGlscy5qb2luVWludDY0KGUsdCl9LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZFVpbnQ2NFN0cmluZz1mdW5jdGlvbigpe3ZhciBlPXRoaXMucmVhZFVpbnQzMigpLHQ9dGhpcy5yZWFkVWludDMyKCk7cmV0dXJuIGpzcGIudXRpbHMuam9pblVuc2lnbmVkRGVjaW1hbFN0cmluZyhlLHQpfSxqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnJlYWRJbnQ4PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5ieXRlc19bdGhpcy5jdXJzb3JfKzBdO3JldHVybiB0aGlzLmN1cnNvcl8rPTEsZ29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLmN1cnNvcl88PXRoaXMuZW5kXyksZTw8MjQ+PjI0fSxqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnJlYWRJbnQxNj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuYnl0ZXNfW3RoaXMuY3Vyc29yXyswXSx0PXRoaXMuYnl0ZXNfW3RoaXMuY3Vyc29yXysxXTtyZXR1cm4gdGhpcy5jdXJzb3JfKz0yLGdvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5jdXJzb3JfPD10aGlzLmVuZF8pLChlPDwwfHQ8PDgpPDwxNj4+MTZ9LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZEludDMyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5ieXRlc19bdGhpcy5jdXJzb3JfKzBdLHQ9dGhpcy5ieXRlc19bdGhpcy5jdXJzb3JfKzFdLG89dGhpcy5ieXRlc19bdGhpcy5jdXJzb3JfKzJdLHI9dGhpcy5ieXRlc19bdGhpcy5jdXJzb3JfKzNdO3JldHVybiB0aGlzLmN1cnNvcl8rPTQsZ29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLmN1cnNvcl88PXRoaXMuZW5kXyksZTw8MHx0PDw4fG88PDE2fHI8PDI0fSxqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnJlYWRJbnQ2ND1mdW5jdGlvbigpe3ZhciBlPXRoaXMucmVhZFVpbnQzMigpLHQ9dGhpcy5yZWFkVWludDMyKCk7cmV0dXJuIGpzcGIudXRpbHMuam9pbkludDY0KGUsdCl9LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZEludDY0U3RyaW5nPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5yZWFkVWludDMyKCksdD10aGlzLnJlYWRVaW50MzIoKTtyZXR1cm4ganNwYi51dGlscy5qb2luU2lnbmVkRGVjaW1hbFN0cmluZyhlLHQpfSxqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnJlYWRGbG9hdD1mdW5jdGlvbigpe3ZhciBlPXRoaXMucmVhZFVpbnQzMigpO3JldHVybiBqc3BiLnV0aWxzLmpvaW5GbG9hdDMyKGUsMCl9LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZERvdWJsZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMucmVhZFVpbnQzMigpLHQ9dGhpcy5yZWFkVWludDMyKCk7cmV0dXJuIGpzcGIudXRpbHMuam9pbkZsb2F0NjQoZSx0KX0sanNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkQm9vbD1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5ieXRlc19bdGhpcy5jdXJzb3JfKytdfSxqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnJlYWRFbnVtPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFNpZ25lZFZhcmludDMyKCl9LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZFN0cmluZz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmJ5dGVzXyxvPXRoaXMuY3Vyc29yXztlPW8rZTtmb3IodmFyIHI9W10sbj1cIlwiO288ZTspe3ZhciBzPXRbbysrXTtpZigxMjg+cylyLnB1c2gocyk7ZWxzZXtpZigxOTI+cyljb250aW51ZTtpZigyMjQ+cyl7dmFyIGk9dFtvKytdO3IucHVzaCgoMzEmcyk8PDZ8NjMmaSl9ZWxzZSBpZigyNDA+cyl7aT10W28rK107dmFyIGE9dFtvKytdO3IucHVzaCgoMTUmcyk8PDEyfCg2MyZpKTw8Nnw2MyZhKX1lbHNlIDI0OD5zJiYocz0oNyZzKTw8MTh8KDYzJihpPXRbbysrXSkpPDwxMnwoNjMmKGE9dFtvKytdKSk8PDZ8NjMmdFtvKytdLHMtPTY1NTM2LHIucHVzaCg1NTI5Nisocz4+MTAmMTAyMyksNTYzMjArKDEwMjMmcykpKX04MTkyPD1yLmxlbmd0aCYmKG4rPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxyKSxyLmxlbmd0aD0wKX1yZXR1cm4gbis9Z29vZy5jcnlwdC5ieXRlQXJyYXlUb1N0cmluZyhyKSx0aGlzLmN1cnNvcl89byxufSxqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnJlYWRTdHJpbmdXaXRoTGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5yZWFkVW5zaWduZWRWYXJpbnQzMigpO3JldHVybiB0aGlzLnJlYWRTdHJpbmcoZSl9LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZEJ5dGVzPWZ1bmN0aW9uKGUpe2lmKDA+ZXx8dGhpcy5jdXJzb3JfK2U+dGhpcy5ieXRlc18ubGVuZ3RoKXJldHVybiB0aGlzLmVycm9yXz0hMCxnb29nLmFzc2VydHMuZmFpbChcIkludmFsaWQgYnl0ZSBsZW5ndGghXCIpLG5ldyBVaW50OEFycmF5KDApO3ZhciB0PXRoaXMuYnl0ZXNfLnN1YmFycmF5KHRoaXMuY3Vyc29yXyx0aGlzLmN1cnNvcl8rZSk7cmV0dXJuIHRoaXMuY3Vyc29yXys9ZSxnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMuY3Vyc29yXzw9dGhpcy5lbmRfKSx0fSxqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnJlYWRWYXJpbnRIYXNoNjQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkU3BsaXRWYXJpbnQ2NChqc3BiLnV0aWxzLmpvaW5IYXNoNjQpfSxqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnJlYWRGaXhlZEhhc2g2ND1mdW5jdGlvbigpe3ZhciBlPXRoaXMuYnl0ZXNfLHQ9dGhpcy5jdXJzb3JfLG89ZVt0KzBdLHI9ZVt0KzFdLG49ZVt0KzJdLHM9ZVt0KzNdLGk9ZVt0KzRdLGE9ZVt0KzVdLGc9ZVt0KzZdO3JldHVybiBlPWVbdCs3XSx0aGlzLmN1cnNvcl8rPTgsU3RyaW5nLmZyb21DaGFyQ29kZShvLHIsbixzLGksYSxnLGUpfSxqc3BiLkJpbmFyeVJlYWRlcj1mdW5jdGlvbihlLHQsbyl7dGhpcy5kZWNvZGVyXz1qc3BiLkJpbmFyeURlY29kZXIuYWxsb2MoZSx0LG8pLHRoaXMuZmllbGRDdXJzb3JfPXRoaXMuZGVjb2Rlcl8uZ2V0Q3Vyc29yKCksdGhpcy5uZXh0RmllbGRfPWpzcGIuQmluYXJ5Q29uc3RhbnRzLklOVkFMSURfRklFTERfTlVNQkVSLHRoaXMubmV4dFdpcmVUeXBlXz1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5JTlZBTElELHRoaXMuZXJyb3JfPSExLHRoaXMucmVhZENhbGxiYWNrc189bnVsbH0sanNwYi5CaW5hcnlSZWFkZXIuaW5zdGFuY2VDYWNoZV89W10sanNwYi5CaW5hcnlSZWFkZXIuYWxsb2M9ZnVuY3Rpb24oZSx0LG8pe2lmKGpzcGIuQmluYXJ5UmVhZGVyLmluc3RhbmNlQ2FjaGVfLmxlbmd0aCl7dmFyIHI9anNwYi5CaW5hcnlSZWFkZXIuaW5zdGFuY2VDYWNoZV8ucG9wKCk7cmV0dXJuIGUmJnIuZGVjb2Rlcl8uc2V0QmxvY2soZSx0LG8pLHJ9cmV0dXJuIG5ldyBqc3BiLkJpbmFyeVJlYWRlcihlLHQsbyl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5hbGxvYz1qc3BiLkJpbmFyeVJlYWRlci5hbGxvYyxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUuZnJlZT1mdW5jdGlvbigpe3RoaXMuZGVjb2Rlcl8uY2xlYXIoKSx0aGlzLm5leHRGaWVsZF89anNwYi5CaW5hcnlDb25zdGFudHMuSU5WQUxJRF9GSUVMRF9OVU1CRVIsdGhpcy5uZXh0V2lyZVR5cGVfPWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLklOVkFMSUQsdGhpcy5lcnJvcl89ITEsdGhpcy5yZWFkQ2FsbGJhY2tzXz1udWxsLDEwMD5qc3BiLkJpbmFyeVJlYWRlci5pbnN0YW5jZUNhY2hlXy5sZW5ndGgmJmpzcGIuQmluYXJ5UmVhZGVyLmluc3RhbmNlQ2FjaGVfLnB1c2godGhpcyl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5nZXRGaWVsZEN1cnNvcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZpZWxkQ3Vyc29yX30sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLmdldEN1cnNvcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRlY29kZXJfLmdldEN1cnNvcigpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUuZ2V0QnVmZmVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVjb2Rlcl8uZ2V0QnVmZmVyKCl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5nZXRGaWVsZE51bWJlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5leHRGaWVsZF99LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5nZXRXaXJlVHlwZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5leHRXaXJlVHlwZV99LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5pc0RlbGltaXRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5leHRXaXJlVHlwZV89PWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkRFTElNSVRFRH0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLmlzRW5kR3JvdXA9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5FTkRfR1JPVVB9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5nZXRFcnJvcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVycm9yX3x8dGhpcy5kZWNvZGVyXy5nZXRFcnJvcigpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUuc2V0QmxvY2s9ZnVuY3Rpb24oZSx0LG8pe3RoaXMuZGVjb2Rlcl8uc2V0QmxvY2soZSx0LG8pLHRoaXMubmV4dEZpZWxkXz1qc3BiLkJpbmFyeUNvbnN0YW50cy5JTlZBTElEX0ZJRUxEX05VTUJFUix0aGlzLm5leHRXaXJlVHlwZV89anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuSU5WQUxJRH0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5kZWNvZGVyXy5yZXNldCgpLHRoaXMubmV4dEZpZWxkXz1qc3BiLkJpbmFyeUNvbnN0YW50cy5JTlZBTElEX0ZJRUxEX05VTUJFUix0aGlzLm5leHRXaXJlVHlwZV89anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuSU5WQUxJRH0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLmFkdmFuY2U9ZnVuY3Rpb24oZSl7dGhpcy5kZWNvZGVyXy5hZHZhbmNlKGUpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUubmV4dEZpZWxkPWZ1bmN0aW9uKCl7aWYodGhpcy5kZWNvZGVyXy5hdEVuZCgpKXJldHVybiExO2lmKHRoaXMuZ2V0RXJyb3IoKSlyZXR1cm4gZ29vZy5hc3NlcnRzLmZhaWwoXCJEZWNvZGVyIGhpdCBhbiBlcnJvclwiKSwhMTt0aGlzLmZpZWxkQ3Vyc29yXz10aGlzLmRlY29kZXJfLmdldEN1cnNvcigpO3ZhciBlPXRoaXMuZGVjb2Rlcl8ucmVhZFVuc2lnbmVkVmFyaW50MzIoKSx0PWU+Pj4zO3JldHVybihlJj03KSE9anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuVkFSSU5UJiZlIT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5GSVhFRDMyJiZlIT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5GSVhFRDY0JiZlIT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5ERUxJTUlURUQmJmUhPWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlNUQVJUX0dST1VQJiZlIT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5FTkRfR1JPVVA/KGdvb2cuYXNzZXJ0cy5mYWlsKFwiSW52YWxpZCB3aXJlIHR5cGU6ICVzIChhdCBwb3NpdGlvbiAlcylcIixlLHRoaXMuZmllbGRDdXJzb3JfKSx0aGlzLmVycm9yXz0hMCwhMSk6KHRoaXMubmV4dEZpZWxkXz10LHRoaXMubmV4dFdpcmVUeXBlXz1lLCEwKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnVuc2tpcEhlYWRlcj1mdW5jdGlvbigpe3RoaXMuZGVjb2Rlcl8udW5za2lwVmFyaW50KHRoaXMubmV4dEZpZWxkXzw8M3x0aGlzLm5leHRXaXJlVHlwZV8pfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUuc2tpcE1hdGNoaW5nRmllbGRzPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5uZXh0RmllbGRfO2Zvcih0aGlzLnVuc2tpcEhlYWRlcigpO3RoaXMubmV4dEZpZWxkKCkmJnRoaXMuZ2V0RmllbGROdW1iZXIoKT09ZTspdGhpcy5za2lwRmllbGQoKTt0aGlzLmRlY29kZXJfLmF0RW5kKCl8fHRoaXMudW5za2lwSGVhZGVyKCl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5za2lwVmFyaW50RmllbGQ9ZnVuY3Rpb24oKXt0aGlzLm5leHRXaXJlVHlwZV8hPWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVD8oZ29vZy5hc3NlcnRzLmZhaWwoXCJJbnZhbGlkIHdpcmUgdHlwZSBmb3Igc2tpcFZhcmludEZpZWxkXCIpLHRoaXMuc2tpcEZpZWxkKCkpOnRoaXMuZGVjb2Rlcl8uc2tpcFZhcmludCgpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUuc2tpcERlbGltaXRlZEZpZWxkPWZ1bmN0aW9uKCl7aWYodGhpcy5uZXh0V2lyZVR5cGVfIT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5ERUxJTUlURUQpZ29vZy5hc3NlcnRzLmZhaWwoXCJJbnZhbGlkIHdpcmUgdHlwZSBmb3Igc2tpcERlbGltaXRlZEZpZWxkXCIpLHRoaXMuc2tpcEZpZWxkKCk7ZWxzZXt2YXIgZT10aGlzLmRlY29kZXJfLnJlYWRVbnNpZ25lZFZhcmludDMyKCk7dGhpcy5kZWNvZGVyXy5hZHZhbmNlKGUpfX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnNraXBGaXhlZDMyRmllbGQ9ZnVuY3Rpb24oKXt0aGlzLm5leHRXaXJlVHlwZV8hPWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkZJWEVEMzI/KGdvb2cuYXNzZXJ0cy5mYWlsKFwiSW52YWxpZCB3aXJlIHR5cGUgZm9yIHNraXBGaXhlZDMyRmllbGRcIiksdGhpcy5za2lwRmllbGQoKSk6dGhpcy5kZWNvZGVyXy5hZHZhbmNlKDQpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUuc2tpcEZpeGVkNjRGaWVsZD1mdW5jdGlvbigpe3RoaXMubmV4dFdpcmVUeXBlXyE9anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRklYRUQ2ND8oZ29vZy5hc3NlcnRzLmZhaWwoXCJJbnZhbGlkIHdpcmUgdHlwZSBmb3Igc2tpcEZpeGVkNjRGaWVsZFwiKSx0aGlzLnNraXBGaWVsZCgpKTp0aGlzLmRlY29kZXJfLmFkdmFuY2UoOCl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5za2lwR3JvdXA9ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy5uZXh0RmllbGRfOzspe2lmKCF0aGlzLm5leHRGaWVsZCgpKXtnb29nLmFzc2VydHMuZmFpbChcIlVubWF0Y2hlZCBzdGFydC1ncm91cCB0YWc6IHN0cmVhbSBFT0ZcIiksdGhpcy5lcnJvcl89ITA7YnJlYWt9aWYodGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5FTkRfR1JPVVApe3RoaXMubmV4dEZpZWxkXyE9ZSYmKGdvb2cuYXNzZXJ0cy5mYWlsKFwiVW5tYXRjaGVkIGVuZC1ncm91cCB0YWdcIiksdGhpcy5lcnJvcl89ITApO2JyZWFrfXRoaXMuc2tpcEZpZWxkKCl9fSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUuc2tpcEZpZWxkPWZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMubmV4dFdpcmVUeXBlXyl7Y2FzZSBqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQ6dGhpcy5za2lwVmFyaW50RmllbGQoKTticmVhaztjYXNlIGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkZJWEVENjQ6dGhpcy5za2lwRml4ZWQ2NEZpZWxkKCk7YnJlYWs7Y2FzZSBqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5ERUxJTUlURUQ6dGhpcy5za2lwRGVsaW1pdGVkRmllbGQoKTticmVhaztjYXNlIGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkZJWEVEMzI6dGhpcy5za2lwRml4ZWQzMkZpZWxkKCk7YnJlYWs7Y2FzZSBqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5TVEFSVF9HUk9VUDp0aGlzLnNraXBHcm91cCgpO2JyZWFrO2RlZmF1bHQ6Z29vZy5hc3NlcnRzLmZhaWwoXCJJbnZhbGlkIHdpcmUgZW5jb2RpbmcgZm9yIGZpZWxkLlwiKX19LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWdpc3RlclJlYWRDYWxsYmFjaz1mdW5jdGlvbihlLHQpe251bGw9PT10aGlzLnJlYWRDYWxsYmFja3NfJiYodGhpcy5yZWFkQ2FsbGJhY2tzXz17fSksZ29vZy5hc3NlcnRzLmFzc2VydCghdGhpcy5yZWFkQ2FsbGJhY2tzX1tlXSksdGhpcy5yZWFkQ2FsbGJhY2tzX1tlXT10fSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucnVuUmVhZENhbGxiYWNrPWZ1bmN0aW9uKGUpe3JldHVybiBnb29nLmFzc2VydHMuYXNzZXJ0KG51bGwhPT10aGlzLnJlYWRDYWxsYmFja3NfKSxlPXRoaXMucmVhZENhbGxiYWNrc19bZV0sZ29vZy5hc3NlcnRzLmFzc2VydChlKSxlKHRoaXMpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZEFueT1mdW5jdGlvbihlKXt0aGlzLm5leHRXaXJlVHlwZV89anNwYi5CaW5hcnlDb25zdGFudHMuRmllbGRUeXBlVG9XaXJlVHlwZShlKTt2YXIgdD1qc3BiLkJpbmFyeUNvbnN0YW50cy5GaWVsZFR5cGU7c3dpdGNoKGUpe2Nhc2UgdC5ET1VCTEU6cmV0dXJuIHRoaXMucmVhZERvdWJsZSgpO2Nhc2UgdC5GTE9BVDpyZXR1cm4gdGhpcy5yZWFkRmxvYXQoKTtjYXNlIHQuSU5UNjQ6cmV0dXJuIHRoaXMucmVhZEludDY0KCk7Y2FzZSB0LlVJTlQ2NDpyZXR1cm4gdGhpcy5yZWFkVWludDY0KCk7Y2FzZSB0LklOVDMyOnJldHVybiB0aGlzLnJlYWRJbnQzMigpO2Nhc2UgdC5GSVhFRDY0OnJldHVybiB0aGlzLnJlYWRGaXhlZDY0KCk7Y2FzZSB0LkZJWEVEMzI6cmV0dXJuIHRoaXMucmVhZEZpeGVkMzIoKTtjYXNlIHQuQk9PTDpyZXR1cm4gdGhpcy5yZWFkQm9vbCgpO2Nhc2UgdC5TVFJJTkc6cmV0dXJuIHRoaXMucmVhZFN0cmluZygpO2Nhc2UgdC5HUk9VUDpnb29nLmFzc2VydHMuZmFpbChcIkdyb3VwIGZpZWxkIHR5cGUgbm90IHN1cHBvcnRlZCBpbiByZWFkQW55KClcIik7Y2FzZSB0Lk1FU1NBR0U6Z29vZy5hc3NlcnRzLmZhaWwoXCJNZXNzYWdlIGZpZWxkIHR5cGUgbm90IHN1cHBvcnRlZCBpbiByZWFkQW55KClcIik7Y2FzZSB0LkJZVEVTOnJldHVybiB0aGlzLnJlYWRCeXRlcygpO2Nhc2UgdC5VSU5UMzI6cmV0dXJuIHRoaXMucmVhZFVpbnQzMigpO2Nhc2UgdC5FTlVNOnJldHVybiB0aGlzLnJlYWRFbnVtKCk7Y2FzZSB0LlNGSVhFRDMyOnJldHVybiB0aGlzLnJlYWRTZml4ZWQzMigpO2Nhc2UgdC5TRklYRUQ2NDpyZXR1cm4gdGhpcy5yZWFkU2ZpeGVkNjQoKTtjYXNlIHQuU0lOVDMyOnJldHVybiB0aGlzLnJlYWRTaW50MzIoKTtjYXNlIHQuU0lOVDY0OnJldHVybiB0aGlzLnJlYWRTaW50NjQoKTtjYXNlIHQuRkhBU0g2NDpyZXR1cm4gdGhpcy5yZWFkRml4ZWRIYXNoNjQoKTtjYXNlIHQuVkhBU0g2NDpyZXR1cm4gdGhpcy5yZWFkVmFyaW50SGFzaDY0KCk7ZGVmYXVsdDpnb29nLmFzc2VydHMuZmFpbChcIkludmFsaWQgZmllbGQgdHlwZSBpbiByZWFkQW55KClcIil9cmV0dXJuIDB9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkTWVzc2FnZT1mdW5jdGlvbihlLHQpe2dvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5ERUxJTUlURUQpO3ZhciBvPXRoaXMuZGVjb2Rlcl8uZ2V0RW5kKCkscj10aGlzLmRlY29kZXJfLnJlYWRVbnNpZ25lZFZhcmludDMyKCk7cj10aGlzLmRlY29kZXJfLmdldEN1cnNvcigpK3IsdGhpcy5kZWNvZGVyXy5zZXRFbmQociksdChlLHRoaXMpLHRoaXMuZGVjb2Rlcl8uc2V0Q3Vyc29yKHIpLHRoaXMuZGVjb2Rlcl8uc2V0RW5kKG8pfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZEdyb3VwPWZ1bmN0aW9uKGUsdCxvKXtnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuU1RBUlRfR1JPVVApLGdvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5uZXh0RmllbGRfPT1lKSxvKHQsdGhpcyksdGhpcy5lcnJvcl98fHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRU5EX0dST1VQfHwoZ29vZy5hc3NlcnRzLmZhaWwoXCJHcm91cCBzdWJtZXNzYWdlIGRpZCBub3QgZW5kIHdpdGggYW4gRU5EX0dST1VQIHRhZ1wiKSx0aGlzLmVycm9yXz0hMCl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5nZXRGaWVsZERlY29kZXI9ZnVuY3Rpb24oKXtnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuREVMSU1JVEVEKTt2YXIgZT10aGlzLmRlY29kZXJfLnJlYWRVbnNpZ25lZFZhcmludDMyKCksdD10aGlzLmRlY29kZXJfLmdldEN1cnNvcigpLG89dCtlO3JldHVybiBlPWpzcGIuQmluYXJ5RGVjb2Rlci5hbGxvYyh0aGlzLmRlY29kZXJfLmdldEJ1ZmZlcigpLHQsZSksdGhpcy5kZWNvZGVyXy5zZXRDdXJzb3IobyksZX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRJbnQzMj1mdW5jdGlvbigpe3JldHVybiBnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuVkFSSU5UKSx0aGlzLmRlY29kZXJfLnJlYWRTaWduZWRWYXJpbnQzMigpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZEludDMyU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpLHRoaXMuZGVjb2Rlcl8ucmVhZFNpZ25lZFZhcmludDMyU3RyaW5nKCl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkSW50NjQ9ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLm5leHRXaXJlVHlwZV89PWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVCksdGhpcy5kZWNvZGVyXy5yZWFkU2lnbmVkVmFyaW50NjQoKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRJbnQ2NFN0cmluZz1mdW5jdGlvbigpe3JldHVybiBnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuVkFSSU5UKSx0aGlzLmRlY29kZXJfLnJlYWRTaWduZWRWYXJpbnQ2NFN0cmluZygpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFVpbnQzMj1mdW5jdGlvbigpe3JldHVybiBnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuVkFSSU5UKSx0aGlzLmRlY29kZXJfLnJlYWRVbnNpZ25lZFZhcmludDMyKCl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkVWludDMyU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpLHRoaXMuZGVjb2Rlcl8ucmVhZFVuc2lnbmVkVmFyaW50MzJTdHJpbmcoKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRVaW50NjQ9ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLm5leHRXaXJlVHlwZV89PWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVCksdGhpcy5kZWNvZGVyXy5yZWFkVW5zaWduZWRWYXJpbnQ2NCgpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFVpbnQ2NFN0cmluZz1mdW5jdGlvbigpe3JldHVybiBnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuVkFSSU5UKSx0aGlzLmRlY29kZXJfLnJlYWRVbnNpZ25lZFZhcmludDY0U3RyaW5nKCl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkU2ludDMyPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpLHRoaXMuZGVjb2Rlcl8ucmVhZFppZ3phZ1ZhcmludDMyKCl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkU2ludDY0PWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpLHRoaXMuZGVjb2Rlcl8ucmVhZFppZ3phZ1ZhcmludDY0KCl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkU2ludDY0U3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpLHRoaXMuZGVjb2Rlcl8ucmVhZFppZ3phZ1ZhcmludDY0U3RyaW5nKCl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkRml4ZWQzMj1mdW5jdGlvbigpe3JldHVybiBnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRklYRUQzMiksdGhpcy5kZWNvZGVyXy5yZWFkVWludDMyKCl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkRml4ZWQ2ND1mdW5jdGlvbigpe3JldHVybiBnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRklYRUQ2NCksdGhpcy5kZWNvZGVyXy5yZWFkVWludDY0KCl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkRml4ZWQ2NFN0cmluZz1mdW5jdGlvbigpe3JldHVybiBnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRklYRUQ2NCksdGhpcy5kZWNvZGVyXy5yZWFkVWludDY0U3RyaW5nKCl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkU2ZpeGVkMzI9ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLm5leHRXaXJlVHlwZV89PWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkZJWEVEMzIpLHRoaXMuZGVjb2Rlcl8ucmVhZEludDMyKCl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkU2ZpeGVkMzJTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLm5leHRXaXJlVHlwZV89PWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkZJWEVEMzIpLHRoaXMuZGVjb2Rlcl8ucmVhZEludDMyKCkudG9TdHJpbmcoKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRTZml4ZWQ2ND1mdW5jdGlvbigpe3JldHVybiBnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRklYRUQ2NCksdGhpcy5kZWNvZGVyXy5yZWFkSW50NjQoKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRTZml4ZWQ2NFN0cmluZz1mdW5jdGlvbigpe3JldHVybiBnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRklYRUQ2NCksdGhpcy5kZWNvZGVyXy5yZWFkSW50NjRTdHJpbmcoKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRGbG9hdD1mdW5jdGlvbigpe3JldHVybiBnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRklYRUQzMiksdGhpcy5kZWNvZGVyXy5yZWFkRmxvYXQoKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWREb3VibGU9ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLm5leHRXaXJlVHlwZV89PWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkZJWEVENjQpLHRoaXMuZGVjb2Rlcl8ucmVhZERvdWJsZSgpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZEJvb2w9ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLm5leHRXaXJlVHlwZV89PWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVCksISF0aGlzLmRlY29kZXJfLnJlYWRVbnNpZ25lZFZhcmludDMyKCl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkRW51bT1mdW5jdGlvbigpe3JldHVybiBnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuVkFSSU5UKSx0aGlzLmRlY29kZXJfLnJlYWRTaWduZWRWYXJpbnQ2NCgpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFN0cmluZz1mdW5jdGlvbigpe2dvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5ERUxJTUlURUQpO3ZhciBlPXRoaXMuZGVjb2Rlcl8ucmVhZFVuc2lnbmVkVmFyaW50MzIoKTtyZXR1cm4gdGhpcy5kZWNvZGVyXy5yZWFkU3RyaW5nKGUpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZEJ5dGVzPWZ1bmN0aW9uKCl7Z29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLm5leHRXaXJlVHlwZV89PWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkRFTElNSVRFRCk7dmFyIGU9dGhpcy5kZWNvZGVyXy5yZWFkVW5zaWduZWRWYXJpbnQzMigpO3JldHVybiB0aGlzLmRlY29kZXJfLnJlYWRCeXRlcyhlKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRWYXJpbnRIYXNoNjQ9ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLm5leHRXaXJlVHlwZV89PWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVCksdGhpcy5kZWNvZGVyXy5yZWFkVmFyaW50SGFzaDY0KCl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkU2ludEhhc2g2ND1mdW5jdGlvbigpe3JldHVybiBnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuVkFSSU5UKSx0aGlzLmRlY29kZXJfLnJlYWRaaWd6YWdWYXJpbnRIYXNoNjQoKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRTcGxpdFZhcmludDY0PWZ1bmN0aW9uKGUpe3JldHVybiBnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuVkFSSU5UKSx0aGlzLmRlY29kZXJfLnJlYWRTcGxpdFZhcmludDY0KGUpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFNwbGl0WmlnemFnVmFyaW50NjQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpLHRoaXMuZGVjb2Rlcl8ucmVhZFNwbGl0VmFyaW50NjQoKGZ1bmN0aW9uKHQsbyl7cmV0dXJuIGpzcGIudXRpbHMuZnJvbVppZ3phZzY0KHQsbyxlKX0pKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRGaXhlZEhhc2g2ND1mdW5jdGlvbigpe3JldHVybiBnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRklYRUQ2NCksdGhpcy5kZWNvZGVyXy5yZWFkRml4ZWRIYXNoNjQoKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRTcGxpdEZpeGVkNjQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5GSVhFRDY0KSx0aGlzLmRlY29kZXJfLnJlYWRTcGxpdEZpeGVkNjQoZSl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkUGFja2VkRmllbGRfPWZ1bmN0aW9uKGUpe2dvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5ERUxJTUlURUQpO3ZhciB0PXRoaXMuZGVjb2Rlcl8ucmVhZFVuc2lnbmVkVmFyaW50MzIoKTt0PXRoaXMuZGVjb2Rlcl8uZ2V0Q3Vyc29yKCkrdDtmb3IodmFyIG89W107dGhpcy5kZWNvZGVyXy5nZXRDdXJzb3IoKTx0OylvLnB1c2goZS5jYWxsKHRoaXMuZGVjb2Rlcl8pKTtyZXR1cm4gb30sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRQYWNrZWRJbnQzMj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRQYWNrZWRGaWVsZF8odGhpcy5kZWNvZGVyXy5yZWFkU2lnbmVkVmFyaW50MzIpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFBhY2tlZEludDMyU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRTaWduZWRWYXJpbnQzMlN0cmluZyl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkUGFja2VkSW50NjQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkUGFja2VkRmllbGRfKHRoaXMuZGVjb2Rlcl8ucmVhZFNpZ25lZFZhcmludDY0KX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRQYWNrZWRJbnQ2NFN0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRQYWNrZWRGaWVsZF8odGhpcy5kZWNvZGVyXy5yZWFkU2lnbmVkVmFyaW50NjRTdHJpbmcpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFBhY2tlZFVpbnQzMj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRQYWNrZWRGaWVsZF8odGhpcy5kZWNvZGVyXy5yZWFkVW5zaWduZWRWYXJpbnQzMil9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkUGFja2VkVWludDMyU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRVbnNpZ25lZFZhcmludDMyU3RyaW5nKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRQYWNrZWRVaW50NjQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkUGFja2VkRmllbGRfKHRoaXMuZGVjb2Rlcl8ucmVhZFVuc2lnbmVkVmFyaW50NjQpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFBhY2tlZFVpbnQ2NFN0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRQYWNrZWRGaWVsZF8odGhpcy5kZWNvZGVyXy5yZWFkVW5zaWduZWRWYXJpbnQ2NFN0cmluZyl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkUGFja2VkU2ludDMyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRaaWd6YWdWYXJpbnQzMil9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkUGFja2VkU2ludDY0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRaaWd6YWdWYXJpbnQ2NCl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkUGFja2VkU2ludDY0U3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRaaWd6YWdWYXJpbnQ2NFN0cmluZyl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkUGFja2VkRml4ZWQzMj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRQYWNrZWRGaWVsZF8odGhpcy5kZWNvZGVyXy5yZWFkVWludDMyKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRQYWNrZWRGaXhlZDY0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRVaW50NjQpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFBhY2tlZEZpeGVkNjRTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkUGFja2VkRmllbGRfKHRoaXMuZGVjb2Rlcl8ucmVhZFVpbnQ2NFN0cmluZyl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkUGFja2VkU2ZpeGVkMzI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkUGFja2VkRmllbGRfKHRoaXMuZGVjb2Rlcl8ucmVhZEludDMyKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRQYWNrZWRTZml4ZWQ2ND1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRQYWNrZWRGaWVsZF8odGhpcy5kZWNvZGVyXy5yZWFkSW50NjQpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFBhY2tlZFNmaXhlZDY0U3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRJbnQ2NFN0cmluZyl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkUGFja2VkRmxvYXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkUGFja2VkRmllbGRfKHRoaXMuZGVjb2Rlcl8ucmVhZEZsb2F0KX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRQYWNrZWREb3VibGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkUGFja2VkRmllbGRfKHRoaXMuZGVjb2Rlcl8ucmVhZERvdWJsZSl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkUGFja2VkQm9vbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRQYWNrZWRGaWVsZF8odGhpcy5kZWNvZGVyXy5yZWFkQm9vbCl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkUGFja2VkRW51bT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRQYWNrZWRGaWVsZF8odGhpcy5kZWNvZGVyXy5yZWFkRW51bSl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkUGFja2VkVmFyaW50SGFzaDY0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRWYXJpbnRIYXNoNjQpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFBhY2tlZEZpeGVkSGFzaDY0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRGaXhlZEhhc2g2NCl9LGpzcGIuQmluYXJ5RW5jb2Rlcj1mdW5jdGlvbigpe3RoaXMuYnVmZmVyXz1bXX0sanNwYi5CaW5hcnlFbmNvZGVyLnByb3RvdHlwZS5sZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5idWZmZXJfLmxlbmd0aH0sanNwYi5CaW5hcnlFbmNvZGVyLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmJ1ZmZlcl87cmV0dXJuIHRoaXMuYnVmZmVyXz1bXSxlfSxqc3BiLkJpbmFyeUVuY29kZXIucHJvdG90eXBlLndyaXRlU3BsaXRWYXJpbnQ2ND1mdW5jdGlvbihlLHQpe2Zvcihnb29nLmFzc2VydHMuYXNzZXJ0KGU9PU1hdGguZmxvb3IoZSkpLGdvb2cuYXNzZXJ0cy5hc3NlcnQodD09TWF0aC5mbG9vcih0KSksZ29vZy5hc3NlcnRzLmFzc2VydCgwPD1lJiZlPGpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18zMiksZ29vZy5hc3NlcnRzLmFzc2VydCgwPD10JiZ0PGpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18zMik7MDx0fHwxMjc8ZTspdGhpcy5idWZmZXJfLnB1c2goMTI3JmV8MTI4KSxlPShlPj4+N3x0PDwyNSk+Pj4wLHQ+Pj49Nzt0aGlzLmJ1ZmZlcl8ucHVzaChlKX0sanNwYi5CaW5hcnlFbmNvZGVyLnByb3RvdHlwZS53cml0ZVNwbGl0Rml4ZWQ2ND1mdW5jdGlvbihlLHQpe2dvb2cuYXNzZXJ0cy5hc3NlcnQoZT09TWF0aC5mbG9vcihlKSksZ29vZy5hc3NlcnRzLmFzc2VydCh0PT1NYXRoLmZsb29yKHQpKSxnb29nLmFzc2VydHMuYXNzZXJ0KDA8PWUmJmU8anNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMyKSxnb29nLmFzc2VydHMuYXNzZXJ0KDA8PXQmJnQ8anNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMyKSx0aGlzLndyaXRlVWludDMyKGUpLHRoaXMud3JpdGVVaW50MzIodCl9LGpzcGIuQmluYXJ5RW5jb2Rlci5wcm90b3R5cGUud3JpdGVVbnNpZ25lZFZhcmludDMyPWZ1bmN0aW9uKGUpe2Zvcihnb29nLmFzc2VydHMuYXNzZXJ0KGU9PU1hdGguZmxvb3IoZSkpLGdvb2cuYXNzZXJ0cy5hc3NlcnQoMDw9ZSYmZTxqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMzIpOzEyNzxlOyl0aGlzLmJ1ZmZlcl8ucHVzaCgxMjcmZXwxMjgpLGU+Pj49Nzt0aGlzLmJ1ZmZlcl8ucHVzaChlKX0sanNwYi5CaW5hcnlFbmNvZGVyLnByb3RvdHlwZS53cml0ZVNpZ25lZFZhcmludDMyPWZ1bmN0aW9uKGUpe2lmKGdvb2cuYXNzZXJ0cy5hc3NlcnQoZT09TWF0aC5mbG9vcihlKSksZ29vZy5hc3NlcnRzLmFzc2VydChlPj0tanNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMxJiZlPGpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18zMSksMDw9ZSl0aGlzLndyaXRlVW5zaWduZWRWYXJpbnQzMihlKTtlbHNle2Zvcih2YXIgdD0wOzk+dDt0KyspdGhpcy5idWZmZXJfLnB1c2goMTI3JmV8MTI4KSxlPj49Nzt0aGlzLmJ1ZmZlcl8ucHVzaCgxKX19LGpzcGIuQmluYXJ5RW5jb2Rlci5wcm90b3R5cGUud3JpdGVVbnNpZ25lZFZhcmludDY0PWZ1bmN0aW9uKGUpe2dvb2cuYXNzZXJ0cy5hc3NlcnQoZT09TWF0aC5mbG9vcihlKSksZ29vZy5hc3NlcnRzLmFzc2VydCgwPD1lJiZlPGpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT182NCksanNwYi51dGlscy5zcGxpdEludDY0KGUpLHRoaXMud3JpdGVTcGxpdFZhcmludDY0KGpzcGIudXRpbHMuc3BsaXQ2NExvdyxqc3BiLnV0aWxzLnNwbGl0NjRIaWdoKX0sanNwYi5CaW5hcnlFbmNvZGVyLnByb3RvdHlwZS53cml0ZVNpZ25lZFZhcmludDY0PWZ1bmN0aW9uKGUpe2dvb2cuYXNzZXJ0cy5hc3NlcnQoZT09TWF0aC5mbG9vcihlKSksZ29vZy5hc3NlcnRzLmFzc2VydChlPj0tanNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzYzJiZlPGpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT182MyksanNwYi51dGlscy5zcGxpdEludDY0KGUpLHRoaXMud3JpdGVTcGxpdFZhcmludDY0KGpzcGIudXRpbHMuc3BsaXQ2NExvdyxqc3BiLnV0aWxzLnNwbGl0NjRIaWdoKX0sanNwYi5CaW5hcnlFbmNvZGVyLnByb3RvdHlwZS53cml0ZVppZ3phZ1ZhcmludDMyPWZ1bmN0aW9uKGUpe2dvb2cuYXNzZXJ0cy5hc3NlcnQoZT09TWF0aC5mbG9vcihlKSksZ29vZy5hc3NlcnRzLmFzc2VydChlPj0tanNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMxJiZlPGpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18zMSksdGhpcy53cml0ZVVuc2lnbmVkVmFyaW50MzIoKGU8PDFeZT4+MzEpPj4+MCl9LGpzcGIuQmluYXJ5RW5jb2Rlci5wcm90b3R5cGUud3JpdGVaaWd6YWdWYXJpbnQ2ND1mdW5jdGlvbihlKXtnb29nLmFzc2VydHMuYXNzZXJ0KGU9PU1hdGguZmxvb3IoZSkpLGdvb2cuYXNzZXJ0cy5hc3NlcnQoZT49LWpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT182MyYmZTxqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fNjMpLGpzcGIudXRpbHMuc3BsaXRaaWd6YWc2NChlKSx0aGlzLndyaXRlU3BsaXRWYXJpbnQ2NChqc3BiLnV0aWxzLnNwbGl0NjRMb3csanNwYi51dGlscy5zcGxpdDY0SGlnaCl9LGpzcGIuQmluYXJ5RW5jb2Rlci5wcm90b3R5cGUud3JpdGVaaWd6YWdWYXJpbnQ2NFN0cmluZz1mdW5jdGlvbihlKXt0aGlzLndyaXRlWmlnemFnVmFyaW50SGFzaDY0KGpzcGIudXRpbHMuZGVjaW1hbFN0cmluZ1RvSGFzaDY0KGUpKX0sanNwYi5CaW5hcnlFbmNvZGVyLnByb3RvdHlwZS53cml0ZVppZ3phZ1ZhcmludEhhc2g2ND1mdW5jdGlvbihlKXt2YXIgdD10aGlzO2pzcGIudXRpbHMuc3BsaXRIYXNoNjQoZSksanNwYi51dGlscy50b1ppZ3phZzY0KGpzcGIudXRpbHMuc3BsaXQ2NExvdyxqc3BiLnV0aWxzLnNwbGl0NjRIaWdoLChmdW5jdGlvbihlLG8pe3Qud3JpdGVTcGxpdFZhcmludDY0KGU+Pj4wLG8+Pj4wKX0pKX0sanNwYi5CaW5hcnlFbmNvZGVyLnByb3RvdHlwZS53cml0ZVVpbnQ4PWZ1bmN0aW9uKGUpe2dvb2cuYXNzZXJ0cy5hc3NlcnQoZT09TWF0aC5mbG9vcihlKSksZ29vZy5hc3NlcnRzLmFzc2VydCgwPD1lJiYyNTY+ZSksdGhpcy5idWZmZXJfLnB1c2goZT4+PjAmMjU1KX0sanNwYi5CaW5hcnlFbmNvZGVyLnByb3RvdHlwZS53cml0ZVVpbnQxNj1mdW5jdGlvbihlKXtnb29nLmFzc2VydHMuYXNzZXJ0KGU9PU1hdGguZmxvb3IoZSkpLGdvb2cuYXNzZXJ0cy5hc3NlcnQoMDw9ZSYmNjU1MzY+ZSksdGhpcy5idWZmZXJfLnB1c2goZT4+PjAmMjU1KSx0aGlzLmJ1ZmZlcl8ucHVzaChlPj4+OCYyNTUpfSxqc3BiLkJpbmFyeUVuY29kZXIucHJvdG90eXBlLndyaXRlVWludDMyPWZ1bmN0aW9uKGUpe2dvb2cuYXNzZXJ0cy5hc3NlcnQoZT09TWF0aC5mbG9vcihlKSksZ29vZy5hc3NlcnRzLmFzc2VydCgwPD1lJiZlPGpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18zMiksdGhpcy5idWZmZXJfLnB1c2goZT4+PjAmMjU1KSx0aGlzLmJ1ZmZlcl8ucHVzaChlPj4+OCYyNTUpLHRoaXMuYnVmZmVyXy5wdXNoKGU+Pj4xNiYyNTUpLHRoaXMuYnVmZmVyXy5wdXNoKGU+Pj4yNCYyNTUpfSxqc3BiLkJpbmFyeUVuY29kZXIucHJvdG90eXBlLndyaXRlVWludDY0PWZ1bmN0aW9uKGUpe2dvb2cuYXNzZXJ0cy5hc3NlcnQoZT09TWF0aC5mbG9vcihlKSksZ29vZy5hc3NlcnRzLmFzc2VydCgwPD1lJiZlPGpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT182NCksanNwYi51dGlscy5zcGxpdFVpbnQ2NChlKSx0aGlzLndyaXRlVWludDMyKGpzcGIudXRpbHMuc3BsaXQ2NExvdyksdGhpcy53cml0ZVVpbnQzMihqc3BiLnV0aWxzLnNwbGl0NjRIaWdoKX0sanNwYi5CaW5hcnlFbmNvZGVyLnByb3RvdHlwZS53cml0ZUludDg9ZnVuY3Rpb24oZSl7Z29vZy5hc3NlcnRzLmFzc2VydChlPT1NYXRoLmZsb29yKGUpKSxnb29nLmFzc2VydHMuYXNzZXJ0KC0xMjg8PWUmJjEyOD5lKSx0aGlzLmJ1ZmZlcl8ucHVzaChlPj4+MCYyNTUpfSxqc3BiLkJpbmFyeUVuY29kZXIucHJvdG90eXBlLndyaXRlSW50MTY9ZnVuY3Rpb24oZSl7Z29vZy5hc3NlcnRzLmFzc2VydChlPT1NYXRoLmZsb29yKGUpKSxnb29nLmFzc2VydHMuYXNzZXJ0KC0zMjc2ODw9ZSYmMzI3Njg+ZSksdGhpcy5idWZmZXJfLnB1c2goZT4+PjAmMjU1KSx0aGlzLmJ1ZmZlcl8ucHVzaChlPj4+OCYyNTUpfSxqc3BiLkJpbmFyeUVuY29kZXIucHJvdG90eXBlLndyaXRlSW50MzI9ZnVuY3Rpb24oZSl7Z29vZy5hc3NlcnRzLmFzc2VydChlPT1NYXRoLmZsb29yKGUpKSxnb29nLmFzc2VydHMuYXNzZXJ0KGU+PS1qc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMzEmJmU8anNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMxKSx0aGlzLmJ1ZmZlcl8ucHVzaChlPj4+MCYyNTUpLHRoaXMuYnVmZmVyXy5wdXNoKGU+Pj44JjI1NSksdGhpcy5idWZmZXJfLnB1c2goZT4+PjE2JjI1NSksdGhpcy5idWZmZXJfLnB1c2goZT4+PjI0JjI1NSl9LGpzcGIuQmluYXJ5RW5jb2Rlci5wcm90b3R5cGUud3JpdGVJbnQ2ND1mdW5jdGlvbihlKXtnb29nLmFzc2VydHMuYXNzZXJ0KGU9PU1hdGguZmxvb3IoZSkpLGdvb2cuYXNzZXJ0cy5hc3NlcnQoZT49LWpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT182MyYmZTxqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fNjMpLGpzcGIudXRpbHMuc3BsaXRJbnQ2NChlKSx0aGlzLndyaXRlU3BsaXRGaXhlZDY0KGpzcGIudXRpbHMuc3BsaXQ2NExvdyxqc3BiLnV0aWxzLnNwbGl0NjRIaWdoKX0sanNwYi5CaW5hcnlFbmNvZGVyLnByb3RvdHlwZS53cml0ZUludDY0U3RyaW5nPWZ1bmN0aW9uKGUpe2dvb2cuYXNzZXJ0cy5hc3NlcnQoZT09TWF0aC5mbG9vcihlKSksZ29vZy5hc3NlcnRzLmFzc2VydCgrZT49LWpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT182MyYmK2U8anNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzYzKSxqc3BiLnV0aWxzLnNwbGl0SGFzaDY0KGpzcGIudXRpbHMuZGVjaW1hbFN0cmluZ1RvSGFzaDY0KGUpKSx0aGlzLndyaXRlU3BsaXRGaXhlZDY0KGpzcGIudXRpbHMuc3BsaXQ2NExvdyxqc3BiLnV0aWxzLnNwbGl0NjRIaWdoKX0sanNwYi5CaW5hcnlFbmNvZGVyLnByb3RvdHlwZS53cml0ZUZsb2F0PWZ1bmN0aW9uKGUpe2dvb2cuYXNzZXJ0cy5hc3NlcnQoMS8wPT09ZXx8LTEvMD09PWV8fGlzTmFOKGUpfHxlPj0tanNwYi5CaW5hcnlDb25zdGFudHMuRkxPQVQzMl9NQVgmJmU8PWpzcGIuQmluYXJ5Q29uc3RhbnRzLkZMT0FUMzJfTUFYKSxqc3BiLnV0aWxzLnNwbGl0RmxvYXQzMihlKSx0aGlzLndyaXRlVWludDMyKGpzcGIudXRpbHMuc3BsaXQ2NExvdyl9LGpzcGIuQmluYXJ5RW5jb2Rlci5wcm90b3R5cGUud3JpdGVEb3VibGU9ZnVuY3Rpb24oZSl7Z29vZy5hc3NlcnRzLmFzc2VydCgxLzA9PT1lfHwtMS8wPT09ZXx8aXNOYU4oZSl8fGU+PS1qc3BiLkJpbmFyeUNvbnN0YW50cy5GTE9BVDY0X01BWCYmZTw9anNwYi5CaW5hcnlDb25zdGFudHMuRkxPQVQ2NF9NQVgpLGpzcGIudXRpbHMuc3BsaXRGbG9hdDY0KGUpLHRoaXMud3JpdGVVaW50MzIoanNwYi51dGlscy5zcGxpdDY0TG93KSx0aGlzLndyaXRlVWludDMyKGpzcGIudXRpbHMuc3BsaXQ2NEhpZ2gpfSxqc3BiLkJpbmFyeUVuY29kZXIucHJvdG90eXBlLndyaXRlQm9vbD1mdW5jdGlvbihlKXtnb29nLmFzc2VydHMuYXNzZXJ0KFwiYm9vbGVhblwiPT10eXBlb2YgZXx8XCJudW1iZXJcIj09dHlwZW9mIGUpLHRoaXMuYnVmZmVyXy5wdXNoKGU/MTowKX0sanNwYi5CaW5hcnlFbmNvZGVyLnByb3RvdHlwZS53cml0ZUVudW09ZnVuY3Rpb24oZSl7Z29vZy5hc3NlcnRzLmFzc2VydChlPT1NYXRoLmZsb29yKGUpKSxnb29nLmFzc2VydHMuYXNzZXJ0KGU+PS1qc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMzEmJmU8anNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMxKSx0aGlzLndyaXRlU2lnbmVkVmFyaW50MzIoZSl9LGpzcGIuQmluYXJ5RW5jb2Rlci5wcm90b3R5cGUud3JpdGVCeXRlcz1mdW5jdGlvbihlKXt0aGlzLmJ1ZmZlcl8ucHVzaC5hcHBseSh0aGlzLmJ1ZmZlcl8sZSl9LGpzcGIuQmluYXJ5RW5jb2Rlci5wcm90b3R5cGUud3JpdGVWYXJpbnRIYXNoNjQ9ZnVuY3Rpb24oZSl7anNwYi51dGlscy5zcGxpdEhhc2g2NChlKSx0aGlzLndyaXRlU3BsaXRWYXJpbnQ2NChqc3BiLnV0aWxzLnNwbGl0NjRMb3csanNwYi51dGlscy5zcGxpdDY0SGlnaCl9LGpzcGIuQmluYXJ5RW5jb2Rlci5wcm90b3R5cGUud3JpdGVGaXhlZEhhc2g2ND1mdW5jdGlvbihlKXtqc3BiLnV0aWxzLnNwbGl0SGFzaDY0KGUpLHRoaXMud3JpdGVVaW50MzIoanNwYi51dGlscy5zcGxpdDY0TG93KSx0aGlzLndyaXRlVWludDMyKGpzcGIudXRpbHMuc3BsaXQ2NEhpZ2gpfSxqc3BiLkJpbmFyeUVuY29kZXIucHJvdG90eXBlLndyaXRlU3RyaW5nPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLmJ1ZmZlcl8ubGVuZ3RoLG89MDtvPGUubGVuZ3RoO28rKyl7dmFyIHI9ZS5jaGFyQ29kZUF0KG8pO2lmKDEyOD5yKXRoaXMuYnVmZmVyXy5wdXNoKHIpO2Vsc2UgaWYoMjA0OD5yKXRoaXMuYnVmZmVyXy5wdXNoKHI+PjZ8MTkyKSx0aGlzLmJ1ZmZlcl8ucHVzaCg2MyZyfDEyOCk7ZWxzZSBpZig2NTUzNj5yKWlmKDU1Mjk2PD1yJiY1NjMxOT49ciYmbysxPGUubGVuZ3RoKXt2YXIgbj1lLmNoYXJDb2RlQXQobysxKTs1NjMyMDw9biYmNTczNDM+PW4mJihyPTEwMjQqKHItNTUyOTYpK24tNTYzMjArNjU1MzYsdGhpcy5idWZmZXJfLnB1c2gocj4+MTh8MjQwKSx0aGlzLmJ1ZmZlcl8ucHVzaChyPj4xMiY2M3wxMjgpLHRoaXMuYnVmZmVyXy5wdXNoKHI+PjYmNjN8MTI4KSx0aGlzLmJ1ZmZlcl8ucHVzaCg2MyZyfDEyOCksbysrKX1lbHNlIHRoaXMuYnVmZmVyXy5wdXNoKHI+PjEyfDIyNCksdGhpcy5idWZmZXJfLnB1c2gocj4+NiY2M3wxMjgpLHRoaXMuYnVmZmVyXy5wdXNoKDYzJnJ8MTI4KX1yZXR1cm4gdGhpcy5idWZmZXJfLmxlbmd0aC10fSxqc3BiLmFyaXRoPXt9LGpzcGIuYXJpdGguVUludDY0PWZ1bmN0aW9uKGUsdCl7dGhpcy5sbz1lLHRoaXMuaGk9dH0sanNwYi5hcml0aC5VSW50NjQucHJvdG90eXBlLmNtcD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5oaTxlLmhpfHx0aGlzLmhpPT1lLmhpJiZ0aGlzLmxvPGUubG8/LTE6dGhpcy5oaT09ZS5oaSYmdGhpcy5sbz09ZS5sbz8wOjF9LGpzcGIuYXJpdGguVUludDY0LnByb3RvdHlwZS5yaWdodFNoaWZ0PWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBqc3BiLmFyaXRoLlVJbnQ2NCgodGhpcy5sbz4+PjF8KDEmdGhpcy5oaSk8PDMxKT4+PjAsdGhpcy5oaT4+PjE+Pj4wKX0sanNwYi5hcml0aC5VSW50NjQucHJvdG90eXBlLmxlZnRTaGlmdD1mdW5jdGlvbigpe3JldHVybiBuZXcganNwYi5hcml0aC5VSW50NjQodGhpcy5sbzw8MT4+PjAsKHRoaXMuaGk8PDF8dGhpcy5sbz4+PjMxKT4+PjApfSxqc3BiLmFyaXRoLlVJbnQ2NC5wcm90b3R5cGUubXNiPWZ1bmN0aW9uKCl7cmV0dXJuISEoMjE0NzQ4MzY0OCZ0aGlzLmhpKX0sanNwYi5hcml0aC5VSW50NjQucHJvdG90eXBlLmxzYj1mdW5jdGlvbigpe3JldHVybiEhKDEmdGhpcy5sbyl9LGpzcGIuYXJpdGguVUludDY0LnByb3RvdHlwZS56ZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDA9PXRoaXMubG8mJjA9PXRoaXMuaGl9LGpzcGIuYXJpdGguVUludDY0LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBqc3BiLmFyaXRoLlVJbnQ2NCgodGhpcy5sbytlLmxvJjQyOTQ5NjcyOTUpPj4+MD4+PjAsKCh0aGlzLmhpK2UuaGkmNDI5NDk2NzI5NSk+Pj4wKSsoNDI5NDk2NzI5Njw9dGhpcy5sbytlLmxvPzE6MCk+Pj4wKX0sanNwYi5hcml0aC5VSW50NjQucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IGpzcGIuYXJpdGguVUludDY0KCh0aGlzLmxvLWUubG8mNDI5NDk2NzI5NSk+Pj4wPj4+MCwoKHRoaXMuaGktZS5oaSY0Mjk0OTY3Mjk1KT4+PjApLSgwPnRoaXMubG8tZS5sbz8xOjApPj4+MCl9LGpzcGIuYXJpdGguVUludDY0Lm11bDMyeDMyPWZ1bmN0aW9uKGUsdCl7dmFyIG89NjU1MzUmZSxyPTY1NTM1JnQsbj10Pj4+MTY7Zm9yKHQ9bypyKzY1NTM2KihvKm4mNjU1MzUpKzY1NTM2KigoZT4+Pj0xNikqciY2NTUzNSksbz1lKm4rKG8qbj4+PjE2KSsoZSpyPj4+MTYpOzQyOTQ5NjcyOTY8PXQ7KXQtPTQyOTQ5NjcyOTYsbys9MTtyZXR1cm4gbmV3IGpzcGIuYXJpdGguVUludDY0KHQ+Pj4wLG8+Pj4wKX0sanNwYi5hcml0aC5VSW50NjQucHJvdG90eXBlLm11bD1mdW5jdGlvbihlKXt2YXIgdD1qc3BiLmFyaXRoLlVJbnQ2NC5tdWwzMngzMih0aGlzLmxvLGUpO3JldHVybihlPWpzcGIuYXJpdGguVUludDY0Lm11bDMyeDMyKHRoaXMuaGksZSkpLmhpPWUubG8sZS5sbz0wLHQuYWRkKGUpfSxqc3BiLmFyaXRoLlVJbnQ2NC5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKGUpe2lmKDA9PWUpcmV0dXJuW107dmFyIHQ9bmV3IGpzcGIuYXJpdGguVUludDY0KDAsMCksbz1uZXcganNwYi5hcml0aC5VSW50NjQodGhpcy5sbyx0aGlzLmhpKTtlPW5ldyBqc3BiLmFyaXRoLlVJbnQ2NChlLDApO2Zvcih2YXIgcj1uZXcganNwYi5hcml0aC5VSW50NjQoMSwwKTshZS5tc2IoKTspZT1lLmxlZnRTaGlmdCgpLHI9ci5sZWZ0U2hpZnQoKTtmb3IoOyFyLnplcm8oKTspMD49ZS5jbXAobykmJih0PXQuYWRkKHIpLG89by5zdWIoZSkpLGU9ZS5yaWdodFNoaWZ0KCkscj1yLnJpZ2h0U2hpZnQoKTtyZXR1cm5bdCxvXX0sanNwYi5hcml0aC5VSW50NjQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPVwiXCIsdD10aGlzOyF0Lnplcm8oKTspe3ZhciBvPSh0PXQuZGl2KDEwKSlbMF07ZT10WzFdLmxvK2UsdD1vfXJldHVyblwiXCI9PWUmJihlPVwiMFwiKSxlfSxqc3BiLmFyaXRoLlVJbnQ2NC5mcm9tU3RyaW5nPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1uZXcganNwYi5hcml0aC5VSW50NjQoMCwwKSxvPW5ldyBqc3BiLmFyaXRoLlVJbnQ2NCgwLDApLHI9MDtyPGUubGVuZ3RoO3IrKyl7aWYoXCIwXCI+ZVtyXXx8XCI5XCI8ZVtyXSlyZXR1cm4gbnVsbDt2YXIgbj1wYXJzZUludChlW3JdLDEwKTtvLmxvPW4sdD10Lm11bCgxMCkuYWRkKG8pfXJldHVybiB0fSxqc3BiLmFyaXRoLlVJbnQ2NC5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGpzcGIuYXJpdGguVUludDY0KHRoaXMubG8sdGhpcy5oaSl9LGpzcGIuYXJpdGguSW50NjQ9ZnVuY3Rpb24oZSx0KXt0aGlzLmxvPWUsdGhpcy5oaT10fSxqc3BiLmFyaXRoLkludDY0LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBqc3BiLmFyaXRoLkludDY0KCh0aGlzLmxvK2UubG8mNDI5NDk2NzI5NSk+Pj4wPj4+MCwoKHRoaXMuaGkrZS5oaSY0Mjk0OTY3Mjk1KT4+PjApKyg0Mjk0OTY3Mjk2PD10aGlzLmxvK2UubG8/MTowKT4+PjApfSxqc3BiLmFyaXRoLkludDY0LnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBqc3BiLmFyaXRoLkludDY0KCh0aGlzLmxvLWUubG8mNDI5NDk2NzI5NSk+Pj4wPj4+MCwoKHRoaXMuaGktZS5oaSY0Mjk0OTY3Mjk1KT4+PjApLSgwPnRoaXMubG8tZS5sbz8xOjApPj4+MCl9LGpzcGIuYXJpdGguSW50NjQucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBqc3BiLmFyaXRoLkludDY0KHRoaXMubG8sdGhpcy5oaSl9LGpzcGIuYXJpdGguSW50NjQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7dmFyIGU9MCE9KDIxNDc0ODM2NDgmdGhpcy5oaSksdD1uZXcganNwYi5hcml0aC5VSW50NjQodGhpcy5sbyx0aGlzLmhpKTtyZXR1cm4gZSYmKHQ9bmV3IGpzcGIuYXJpdGguVUludDY0KDAsMCkuc3ViKHQpKSwoZT9cIi1cIjpcIlwiKSt0LnRvU3RyaW5nKCl9LGpzcGIuYXJpdGguSW50NjQuZnJvbVN0cmluZz1mdW5jdGlvbihlKXt2YXIgdD0wPGUubGVuZ3RoJiZcIi1cIj09ZVswXTtyZXR1cm4gdCYmKGU9ZS5zdWJzdHJpbmcoMSkpLG51bGw9PT0oZT1qc3BiLmFyaXRoLlVJbnQ2NC5mcm9tU3RyaW5nKGUpKT9udWxsOih0JiYoZT1uZXcganNwYi5hcml0aC5VSW50NjQoMCwwKS5zdWIoZSkpLG5ldyBqc3BiLmFyaXRoLkludDY0KGUubG8sZS5oaSkpfSxqc3BiLkJpbmFyeVdyaXRlcj1mdW5jdGlvbigpe3RoaXMuYmxvY2tzXz1bXSx0aGlzLnRvdGFsTGVuZ3RoXz0wLHRoaXMuZW5jb2Rlcl89bmV3IGpzcGIuQmluYXJ5RW5jb2Rlcix0aGlzLmJvb2ttYXJrc189W119LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS5hcHBlbmRVaW50OEFycmF5Xz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmVuY29kZXJfLmVuZCgpO3RoaXMuYmxvY2tzXy5wdXNoKHQpLHRoaXMuYmxvY2tzXy5wdXNoKGUpLHRoaXMudG90YWxMZW5ndGhfKz10Lmxlbmd0aCtlLmxlbmd0aH0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLmJlZ2luRGVsaW1pdGVkXz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy53cml0ZUZpZWxkSGVhZGVyXyhlLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkRFTElNSVRFRCksZT10aGlzLmVuY29kZXJfLmVuZCgpLHRoaXMuYmxvY2tzXy5wdXNoKGUpLHRoaXMudG90YWxMZW5ndGhfKz1lLmxlbmd0aCxlLnB1c2godGhpcy50b3RhbExlbmd0aF8pLGV9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS5lbmREZWxpbWl0ZWRfPWZ1bmN0aW9uKGUpe3ZhciB0PWUucG9wKCk7Zm9yKHQ9dGhpcy50b3RhbExlbmd0aF8rdGhpcy5lbmNvZGVyXy5sZW5ndGgoKS10LGdvb2cuYXNzZXJ0cy5hc3NlcnQoMDw9dCk7MTI3PHQ7KWUucHVzaCgxMjcmdHwxMjgpLHQ+Pj49Nyx0aGlzLnRvdGFsTGVuZ3RoXysrO2UucHVzaCh0KSx0aGlzLnRvdGFsTGVuZ3RoXysrfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVTZXJpYWxpemVkTWVzc2FnZT1mdW5jdGlvbihlLHQsbyl7dGhpcy5hcHBlbmRVaW50OEFycmF5XyhlLnN1YmFycmF5KHQsbykpfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUubWF5YmVXcml0ZVNlcmlhbGl6ZWRNZXNzYWdlPWZ1bmN0aW9uKGUsdCxvKXtudWxsIT1lJiZudWxsIT10JiZudWxsIT1vJiZ0aGlzLndyaXRlU2VyaWFsaXplZE1lc3NhZ2UoZSx0LG8pfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLmJsb2Nrc189W10sdGhpcy5lbmNvZGVyXy5lbmQoKSx0aGlzLnRvdGFsTGVuZ3RoXz0wLHRoaXMuYm9va21hcmtzXz1bXX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLmdldFJlc3VsdEJ1ZmZlcj1mdW5jdGlvbigpe2dvb2cuYXNzZXJ0cy5hc3NlcnQoMD09dGhpcy5ib29rbWFya3NfLmxlbmd0aCk7Zm9yKHZhciBlPW5ldyBVaW50OEFycmF5KHRoaXMudG90YWxMZW5ndGhfK3RoaXMuZW5jb2Rlcl8ubGVuZ3RoKCkpLHQ9dGhpcy5ibG9ja3NfLG89dC5sZW5ndGgscj0wLG49MDtuPG87bisrKXt2YXIgcz10W25dO2Uuc2V0KHMscikscis9cy5sZW5ndGh9cmV0dXJuIHQ9dGhpcy5lbmNvZGVyXy5lbmQoKSxlLnNldCh0LHIpLHIrPXQubGVuZ3RoLGdvb2cuYXNzZXJ0cy5hc3NlcnQocj09ZS5sZW5ndGgpLHRoaXMuYmxvY2tzXz1bZV0sZX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLmdldFJlc3VsdEJhc2U2NFN0cmluZz1mdW5jdGlvbihlKXtyZXR1cm4gZ29vZy5jcnlwdC5iYXNlNjQuZW5jb2RlQnl0ZUFycmF5KHRoaXMuZ2V0UmVzdWx0QnVmZmVyKCksZSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS5iZWdpblN1Yk1lc3NhZ2U9ZnVuY3Rpb24oZSl7dGhpcy5ib29rbWFya3NfLnB1c2godGhpcy5iZWdpbkRlbGltaXRlZF8oZSkpfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUuZW5kU3ViTWVzc2FnZT1mdW5jdGlvbigpe2dvb2cuYXNzZXJ0cy5hc3NlcnQoMDw9dGhpcy5ib29rbWFya3NfLmxlbmd0aCksdGhpcy5lbmREZWxpbWl0ZWRfKHRoaXMuYm9va21hcmtzXy5wb3AoKSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZUZpZWxkSGVhZGVyXz1mdW5jdGlvbihlLHQpe2dvb2cuYXNzZXJ0cy5hc3NlcnQoMTw9ZSYmZT09TWF0aC5mbG9vcihlKSksdGhpcy5lbmNvZGVyXy53cml0ZVVuc2lnbmVkVmFyaW50MzIoOCplK3QpfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVBbnk9ZnVuY3Rpb24oZSx0LG8pe3ZhciByPWpzcGIuQmluYXJ5Q29uc3RhbnRzLkZpZWxkVHlwZTtzd2l0Y2goZSl7Y2FzZSByLkRPVUJMRTp0aGlzLndyaXRlRG91YmxlKHQsbyk7YnJlYWs7Y2FzZSByLkZMT0FUOnRoaXMud3JpdGVGbG9hdCh0LG8pO2JyZWFrO2Nhc2Ugci5JTlQ2NDp0aGlzLndyaXRlSW50NjQodCxvKTticmVhaztjYXNlIHIuVUlOVDY0OnRoaXMud3JpdGVVaW50NjQodCxvKTticmVhaztjYXNlIHIuSU5UMzI6dGhpcy53cml0ZUludDMyKHQsbyk7YnJlYWs7Y2FzZSByLkZJWEVENjQ6dGhpcy53cml0ZUZpeGVkNjQodCxvKTticmVhaztjYXNlIHIuRklYRUQzMjp0aGlzLndyaXRlRml4ZWQzMih0LG8pO2JyZWFrO2Nhc2Ugci5CT09MOnRoaXMud3JpdGVCb29sKHQsbyk7YnJlYWs7Y2FzZSByLlNUUklORzp0aGlzLndyaXRlU3RyaW5nKHQsbyk7YnJlYWs7Y2FzZSByLkdST1VQOmdvb2cuYXNzZXJ0cy5mYWlsKFwiR3JvdXAgZmllbGQgdHlwZSBub3Qgc3VwcG9ydGVkIGluIHdyaXRlQW55KClcIik7YnJlYWs7Y2FzZSByLk1FU1NBR0U6Z29vZy5hc3NlcnRzLmZhaWwoXCJNZXNzYWdlIGZpZWxkIHR5cGUgbm90IHN1cHBvcnRlZCBpbiB3cml0ZUFueSgpXCIpO2JyZWFrO2Nhc2Ugci5CWVRFUzp0aGlzLndyaXRlQnl0ZXModCxvKTticmVhaztjYXNlIHIuVUlOVDMyOnRoaXMud3JpdGVVaW50MzIodCxvKTticmVhaztjYXNlIHIuRU5VTTp0aGlzLndyaXRlRW51bSh0LG8pO2JyZWFrO2Nhc2Ugci5TRklYRUQzMjp0aGlzLndyaXRlU2ZpeGVkMzIodCxvKTticmVhaztjYXNlIHIuU0ZJWEVENjQ6dGhpcy53cml0ZVNmaXhlZDY0KHQsbyk7YnJlYWs7Y2FzZSByLlNJTlQzMjp0aGlzLndyaXRlU2ludDMyKHQsbyk7YnJlYWs7Y2FzZSByLlNJTlQ2NDp0aGlzLndyaXRlU2ludDY0KHQsbyk7YnJlYWs7Y2FzZSByLkZIQVNINjQ6dGhpcy53cml0ZUZpeGVkSGFzaDY0KHQsbyk7YnJlYWs7Y2FzZSByLlZIQVNINjQ6dGhpcy53cml0ZVZhcmludEhhc2g2NCh0LG8pO2JyZWFrO2RlZmF1bHQ6Z29vZy5hc3NlcnRzLmZhaWwoXCJJbnZhbGlkIGZpZWxkIHR5cGUgaW4gd3JpdGVBbnkoKVwiKX19LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVVuc2lnbmVkVmFyaW50MzJfPWZ1bmN0aW9uKGUsdCl7bnVsbCE9dCYmKHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oZSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpLHRoaXMuZW5jb2Rlcl8ud3JpdGVVbnNpZ25lZFZhcmludDMyKHQpKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlU2lnbmVkVmFyaW50MzJfPWZ1bmN0aW9uKGUsdCl7bnVsbCE9dCYmKHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oZSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpLHRoaXMuZW5jb2Rlcl8ud3JpdGVTaWduZWRWYXJpbnQzMih0KSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVVuc2lnbmVkVmFyaW50NjRfPWZ1bmN0aW9uKGUsdCl7bnVsbCE9dCYmKHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oZSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpLHRoaXMuZW5jb2Rlcl8ud3JpdGVVbnNpZ25lZFZhcmludDY0KHQpKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlU2lnbmVkVmFyaW50NjRfPWZ1bmN0aW9uKGUsdCl7bnVsbCE9dCYmKHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oZSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpLHRoaXMuZW5jb2Rlcl8ud3JpdGVTaWduZWRWYXJpbnQ2NCh0KSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVppZ3phZ1ZhcmludDMyXz1mdW5jdGlvbihlLHQpe251bGwhPXQmJih0aGlzLndyaXRlRmllbGRIZWFkZXJfKGUsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuVkFSSU5UKSx0aGlzLmVuY29kZXJfLndyaXRlWmlnemFnVmFyaW50MzIodCkpfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVaaWd6YWdWYXJpbnQ2NF89ZnVuY3Rpb24oZSx0KXtudWxsIT10JiYodGhpcy53cml0ZUZpZWxkSGVhZGVyXyhlLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVCksdGhpcy5lbmNvZGVyXy53cml0ZVppZ3phZ1ZhcmludDY0KHQpKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlWmlnemFnVmFyaW50NjRTdHJpbmdfPWZ1bmN0aW9uKGUsdCl7bnVsbCE9dCYmKHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oZSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpLHRoaXMuZW5jb2Rlcl8ud3JpdGVaaWd6YWdWYXJpbnQ2NFN0cmluZyh0KSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVppZ3phZ1ZhcmludEhhc2g2NF89ZnVuY3Rpb24oZSx0KXtudWxsIT10JiYodGhpcy53cml0ZUZpZWxkSGVhZGVyXyhlLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVCksdGhpcy5lbmNvZGVyXy53cml0ZVppZ3phZ1ZhcmludEhhc2g2NCh0KSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZUludDMyPWZ1bmN0aW9uKGUsdCl7bnVsbCE9dCYmKGdvb2cuYXNzZXJ0cy5hc3NlcnQodD49LWpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18zMSYmdDxqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMzEpLHRoaXMud3JpdGVTaWduZWRWYXJpbnQzMl8oZSx0KSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZUludDMyU3RyaW5nPWZ1bmN0aW9uKGUsdCl7bnVsbCE9dCYmKHQ9cGFyc2VJbnQodCwxMCksZ29vZy5hc3NlcnRzLmFzc2VydCh0Pj0tanNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMxJiZ0PGpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18zMSksdGhpcy53cml0ZVNpZ25lZFZhcmludDMyXyhlLHQpKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlSW50NjQ9ZnVuY3Rpb24oZSx0KXtudWxsIT10JiYoZ29vZy5hc3NlcnRzLmFzc2VydCh0Pj0tanNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzYzJiZ0PGpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT182MyksdGhpcy53cml0ZVNpZ25lZFZhcmludDY0XyhlLHQpKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlSW50NjRTdHJpbmc9ZnVuY3Rpb24oZSx0KXtudWxsIT10JiYodD1qc3BiLmFyaXRoLkludDY0LmZyb21TdHJpbmcodCksdGhpcy53cml0ZUZpZWxkSGVhZGVyXyhlLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVCksdGhpcy5lbmNvZGVyXy53cml0ZVNwbGl0VmFyaW50NjQodC5sbyx0LmhpKSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVVpbnQzMj1mdW5jdGlvbihlLHQpe251bGwhPXQmJihnb29nLmFzc2VydHMuYXNzZXJ0KDA8PXQmJnQ8anNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMyKSx0aGlzLndyaXRlVW5zaWduZWRWYXJpbnQzMl8oZSx0KSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVVpbnQzMlN0cmluZz1mdW5jdGlvbihlLHQpe251bGwhPXQmJih0PXBhcnNlSW50KHQsMTApLGdvb2cuYXNzZXJ0cy5hc3NlcnQoMDw9dCYmdDxqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMzIpLHRoaXMud3JpdGVVbnNpZ25lZFZhcmludDMyXyhlLHQpKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlVWludDY0PWZ1bmN0aW9uKGUsdCl7bnVsbCE9dCYmKGdvb2cuYXNzZXJ0cy5hc3NlcnQoMDw9dCYmdDxqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fNjQpLHRoaXMud3JpdGVVbnNpZ25lZFZhcmludDY0XyhlLHQpKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlVWludDY0U3RyaW5nPWZ1bmN0aW9uKGUsdCl7bnVsbCE9dCYmKHQ9anNwYi5hcml0aC5VSW50NjQuZnJvbVN0cmluZyh0KSx0aGlzLndyaXRlRmllbGRIZWFkZXJfKGUsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuVkFSSU5UKSx0aGlzLmVuY29kZXJfLndyaXRlU3BsaXRWYXJpbnQ2NCh0LmxvLHQuaGkpKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlU2ludDMyPWZ1bmN0aW9uKGUsdCl7bnVsbCE9dCYmKGdvb2cuYXNzZXJ0cy5hc3NlcnQodD49LWpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18zMSYmdDxqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMzEpLHRoaXMud3JpdGVaaWd6YWdWYXJpbnQzMl8oZSx0KSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVNpbnQ2ND1mdW5jdGlvbihlLHQpe251bGwhPXQmJihnb29nLmFzc2VydHMuYXNzZXJ0KHQ+PS1qc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fNjMmJnQ8anNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzYzKSx0aGlzLndyaXRlWmlnemFnVmFyaW50NjRfKGUsdCkpfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVTaW50SGFzaDY0PWZ1bmN0aW9uKGUsdCl7bnVsbCE9dCYmdGhpcy53cml0ZVppZ3phZ1ZhcmludEhhc2g2NF8oZSx0KX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlU2ludDY0U3RyaW5nPWZ1bmN0aW9uKGUsdCl7bnVsbCE9dCYmdGhpcy53cml0ZVppZ3phZ1ZhcmludDY0U3RyaW5nXyhlLHQpfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVGaXhlZDMyPWZ1bmN0aW9uKGUsdCl7bnVsbCE9dCYmKGdvb2cuYXNzZXJ0cy5hc3NlcnQoMDw9dCYmdDxqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMzIpLHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oZSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5GSVhFRDMyKSx0aGlzLmVuY29kZXJfLndyaXRlVWludDMyKHQpKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlRml4ZWQ2ND1mdW5jdGlvbihlLHQpe251bGwhPXQmJihnb29nLmFzc2VydHMuYXNzZXJ0KDA8PXQmJnQ8anNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzY0KSx0aGlzLndyaXRlRmllbGRIZWFkZXJfKGUsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRklYRUQ2NCksdGhpcy5lbmNvZGVyXy53cml0ZVVpbnQ2NCh0KSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZUZpeGVkNjRTdHJpbmc9ZnVuY3Rpb24oZSx0KXtudWxsIT10JiYodD1qc3BiLmFyaXRoLlVJbnQ2NC5mcm9tU3RyaW5nKHQpLHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oZSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5GSVhFRDY0KSx0aGlzLmVuY29kZXJfLndyaXRlU3BsaXRGaXhlZDY0KHQubG8sdC5oaSkpfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVTZml4ZWQzMj1mdW5jdGlvbihlLHQpe251bGwhPXQmJihnb29nLmFzc2VydHMuYXNzZXJ0KHQ+PS1qc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMzEmJnQ8anNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMxKSx0aGlzLndyaXRlRmllbGRIZWFkZXJfKGUsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRklYRUQzMiksdGhpcy5lbmNvZGVyXy53cml0ZUludDMyKHQpKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlU2ZpeGVkNjQ9ZnVuY3Rpb24oZSx0KXtudWxsIT10JiYoZ29vZy5hc3NlcnRzLmFzc2VydCh0Pj0tanNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzYzJiZ0PGpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT182MyksdGhpcy53cml0ZUZpZWxkSGVhZGVyXyhlLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkZJWEVENjQpLHRoaXMuZW5jb2Rlcl8ud3JpdGVJbnQ2NCh0KSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVNmaXhlZDY0U3RyaW5nPWZ1bmN0aW9uKGUsdCl7bnVsbCE9dCYmKHQ9anNwYi5hcml0aC5JbnQ2NC5mcm9tU3RyaW5nKHQpLHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oZSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5GSVhFRDY0KSx0aGlzLmVuY29kZXJfLndyaXRlU3BsaXRGaXhlZDY0KHQubG8sdC5oaSkpfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVGbG9hdD1mdW5jdGlvbihlLHQpe251bGwhPXQmJih0aGlzLndyaXRlRmllbGRIZWFkZXJfKGUsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRklYRUQzMiksdGhpcy5lbmNvZGVyXy53cml0ZUZsb2F0KHQpKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlRG91YmxlPWZ1bmN0aW9uKGUsdCl7bnVsbCE9dCYmKHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oZSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5GSVhFRDY0KSx0aGlzLmVuY29kZXJfLndyaXRlRG91YmxlKHQpKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlQm9vbD1mdW5jdGlvbihlLHQpe251bGwhPXQmJihnb29nLmFzc2VydHMuYXNzZXJ0KFwiYm9vbGVhblwiPT10eXBlb2YgdHx8XCJudW1iZXJcIj09dHlwZW9mIHQpLHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oZSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpLHRoaXMuZW5jb2Rlcl8ud3JpdGVCb29sKHQpKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlRW51bT1mdW5jdGlvbihlLHQpe251bGwhPXQmJihnb29nLmFzc2VydHMuYXNzZXJ0KHQ+PS1qc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMzEmJnQ8anNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMxKSx0aGlzLndyaXRlRmllbGRIZWFkZXJfKGUsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuVkFSSU5UKSx0aGlzLmVuY29kZXJfLndyaXRlU2lnbmVkVmFyaW50MzIodCkpfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVTdHJpbmc9ZnVuY3Rpb24oZSx0KXtudWxsIT10JiYoZT10aGlzLmJlZ2luRGVsaW1pdGVkXyhlKSx0aGlzLmVuY29kZXJfLndyaXRlU3RyaW5nKHQpLHRoaXMuZW5kRGVsaW1pdGVkXyhlKSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZUJ5dGVzPWZ1bmN0aW9uKGUsdCl7bnVsbCE9dCYmKHQ9anNwYi51dGlscy5ieXRlU291cmNlVG9VaW50OEFycmF5KHQpLHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oZSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5ERUxJTUlURUQpLHRoaXMuZW5jb2Rlcl8ud3JpdGVVbnNpZ25lZFZhcmludDMyKHQubGVuZ3RoKSx0aGlzLmFwcGVuZFVpbnQ4QXJyYXlfKHQpKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlTWVzc2FnZT1mdW5jdGlvbihlLHQsbyl7bnVsbCE9dCYmKGU9dGhpcy5iZWdpbkRlbGltaXRlZF8oZSksbyh0LHRoaXMpLHRoaXMuZW5kRGVsaW1pdGVkXyhlKSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZU1lc3NhZ2VTZXQ9ZnVuY3Rpb24oZSx0LG8pe251bGwhPXQmJih0aGlzLndyaXRlRmllbGRIZWFkZXJfKDEsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuU1RBUlRfR1JPVVApLHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oMixqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpLHRoaXMuZW5jb2Rlcl8ud3JpdGVTaWduZWRWYXJpbnQzMihlKSxlPXRoaXMuYmVnaW5EZWxpbWl0ZWRfKDMpLG8odCx0aGlzKSx0aGlzLmVuZERlbGltaXRlZF8oZSksdGhpcy53cml0ZUZpZWxkSGVhZGVyXygxLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkVORF9HUk9VUCkpfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVHcm91cD1mdW5jdGlvbihlLHQsbyl7bnVsbCE9dCYmKHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oZSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5TVEFSVF9HUk9VUCksbyh0LHRoaXMpLHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oZSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5FTkRfR1JPVVApKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlRml4ZWRIYXNoNjQ9ZnVuY3Rpb24oZSx0KXtudWxsIT10JiYoZ29vZy5hc3NlcnRzLmFzc2VydCg4PT10Lmxlbmd0aCksdGhpcy53cml0ZUZpZWxkSGVhZGVyXyhlLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkZJWEVENjQpLHRoaXMuZW5jb2Rlcl8ud3JpdGVGaXhlZEhhc2g2NCh0KSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVZhcmludEhhc2g2ND1mdW5jdGlvbihlLHQpe251bGwhPXQmJihnb29nLmFzc2VydHMuYXNzZXJ0KDg9PXQubGVuZ3RoKSx0aGlzLndyaXRlRmllbGRIZWFkZXJfKGUsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuVkFSSU5UKSx0aGlzLmVuY29kZXJfLndyaXRlVmFyaW50SGFzaDY0KHQpKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlU3BsaXRGaXhlZDY0PWZ1bmN0aW9uKGUsdCxvKXt0aGlzLndyaXRlRmllbGRIZWFkZXJfKGUsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRklYRUQ2NCksdGhpcy5lbmNvZGVyXy53cml0ZVNwbGl0Rml4ZWQ2NCh0LG8pfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVTcGxpdFZhcmludDY0PWZ1bmN0aW9uKGUsdCxvKXt0aGlzLndyaXRlRmllbGRIZWFkZXJfKGUsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuVkFSSU5UKSx0aGlzLmVuY29kZXJfLndyaXRlU3BsaXRWYXJpbnQ2NCh0LG8pfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVTcGxpdFppZ3phZ1ZhcmludDY0PWZ1bmN0aW9uKGUsdCxvKXt0aGlzLndyaXRlRmllbGRIZWFkZXJfKGUsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuVkFSSU5UKTt2YXIgcj10aGlzLmVuY29kZXJfO2pzcGIudXRpbHMudG9aaWd6YWc2NCh0LG8sKGZ1bmN0aW9uKGUsdCl7ci53cml0ZVNwbGl0VmFyaW50NjQoZT4+PjAsdD4+PjApfSkpfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVSZXBlYXRlZEludDMyPWZ1bmN0aW9uKGUsdCl7aWYobnVsbCE9dClmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl0aGlzLndyaXRlU2lnbmVkVmFyaW50MzJfKGUsdFtvXSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVJlcGVhdGVkSW50MzJTdHJpbmc9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10KWZvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXRoaXMud3JpdGVJbnQzMlN0cmluZyhlLHRbb10pfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVSZXBlYXRlZEludDY0PWZ1bmN0aW9uKGUsdCl7aWYobnVsbCE9dClmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl0aGlzLndyaXRlU2lnbmVkVmFyaW50NjRfKGUsdFtvXSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVJlcGVhdGVkU3BsaXRGaXhlZDY0PWZ1bmN0aW9uKGUsdCxvLHIpe2lmKG51bGwhPXQpZm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspdGhpcy53cml0ZVNwbGl0Rml4ZWQ2NChlLG8odFtuXSkscih0W25dKSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVJlcGVhdGVkU3BsaXRWYXJpbnQ2ND1mdW5jdGlvbihlLHQsbyxyKXtpZihudWxsIT10KWZvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXRoaXMud3JpdGVTcGxpdFZhcmludDY0KGUsbyh0W25dKSxyKHRbbl0pKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRTcGxpdFppZ3phZ1ZhcmludDY0PWZ1bmN0aW9uKGUsdCxvLHIpe2lmKG51bGwhPXQpZm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspdGhpcy53cml0ZVNwbGl0WmlnemFnVmFyaW50NjQoZSxvKHRbbl0pLHIodFtuXSkpfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVSZXBlYXRlZEludDY0U3RyaW5nPWZ1bmN0aW9uKGUsdCl7aWYobnVsbCE9dClmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl0aGlzLndyaXRlSW50NjRTdHJpbmcoZSx0W29dKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRVaW50MzI9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10KWZvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXRoaXMud3JpdGVVbnNpZ25lZFZhcmludDMyXyhlLHRbb10pfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVSZXBlYXRlZFVpbnQzMlN0cmluZz1mdW5jdGlvbihlLHQpe2lmKG51bGwhPXQpZm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspdGhpcy53cml0ZVVpbnQzMlN0cmluZyhlLHRbb10pfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVSZXBlYXRlZFVpbnQ2ND1mdW5jdGlvbihlLHQpe2lmKG51bGwhPXQpZm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspdGhpcy53cml0ZVVuc2lnbmVkVmFyaW50NjRfKGUsdFtvXSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVJlcGVhdGVkVWludDY0U3RyaW5nPWZ1bmN0aW9uKGUsdCl7aWYobnVsbCE9dClmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl0aGlzLndyaXRlVWludDY0U3RyaW5nKGUsdFtvXSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVJlcGVhdGVkU2ludDMyPWZ1bmN0aW9uKGUsdCl7aWYobnVsbCE9dClmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl0aGlzLndyaXRlWmlnemFnVmFyaW50MzJfKGUsdFtvXSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVJlcGVhdGVkU2ludDY0PWZ1bmN0aW9uKGUsdCl7aWYobnVsbCE9dClmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl0aGlzLndyaXRlWmlnemFnVmFyaW50NjRfKGUsdFtvXSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVJlcGVhdGVkU2ludDY0U3RyaW5nPWZ1bmN0aW9uKGUsdCl7aWYobnVsbCE9dClmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl0aGlzLndyaXRlWmlnemFnVmFyaW50NjRTdHJpbmdfKGUsdFtvXSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVJlcGVhdGVkU2ludEhhc2g2ND1mdW5jdGlvbihlLHQpe2lmKG51bGwhPXQpZm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspdGhpcy53cml0ZVppZ3phZ1ZhcmludEhhc2g2NF8oZSx0W29dKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRGaXhlZDMyPWZ1bmN0aW9uKGUsdCl7aWYobnVsbCE9dClmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl0aGlzLndyaXRlRml4ZWQzMihlLHRbb10pfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVSZXBlYXRlZEZpeGVkNjQ9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10KWZvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXRoaXMud3JpdGVGaXhlZDY0KGUsdFtvXSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVJlcGVhdGVkRml4ZWQ2NFN0cmluZz1mdW5jdGlvbihlLHQpe2lmKG51bGwhPXQpZm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspdGhpcy53cml0ZUZpeGVkNjRTdHJpbmcoZSx0W29dKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRTZml4ZWQzMj1mdW5jdGlvbihlLHQpe2lmKG51bGwhPXQpZm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspdGhpcy53cml0ZVNmaXhlZDMyKGUsdFtvXSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVJlcGVhdGVkU2ZpeGVkNjQ9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10KWZvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXRoaXMud3JpdGVTZml4ZWQ2NChlLHRbb10pfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVSZXBlYXRlZFNmaXhlZDY0U3RyaW5nPWZ1bmN0aW9uKGUsdCl7aWYobnVsbCE9dClmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl0aGlzLndyaXRlU2ZpeGVkNjRTdHJpbmcoZSx0W29dKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRGbG9hdD1mdW5jdGlvbihlLHQpe2lmKG51bGwhPXQpZm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspdGhpcy53cml0ZUZsb2F0KGUsdFtvXSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVJlcGVhdGVkRG91YmxlPWZ1bmN0aW9uKGUsdCl7aWYobnVsbCE9dClmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl0aGlzLndyaXRlRG91YmxlKGUsdFtvXSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVJlcGVhdGVkQm9vbD1mdW5jdGlvbihlLHQpe2lmKG51bGwhPXQpZm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspdGhpcy53cml0ZUJvb2woZSx0W29dKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRFbnVtPWZ1bmN0aW9uKGUsdCl7aWYobnVsbCE9dClmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl0aGlzLndyaXRlRW51bShlLHRbb10pfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVSZXBlYXRlZFN0cmluZz1mdW5jdGlvbihlLHQpe2lmKG51bGwhPXQpZm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspdGhpcy53cml0ZVN0cmluZyhlLHRbb10pfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVSZXBlYXRlZEJ5dGVzPWZ1bmN0aW9uKGUsdCl7aWYobnVsbCE9dClmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl0aGlzLndyaXRlQnl0ZXMoZSx0W29dKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRNZXNzYWdlPWZ1bmN0aW9uKGUsdCxvKXtpZihudWxsIT10KWZvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10aGlzLmJlZ2luRGVsaW1pdGVkXyhlKTtvKHRbcl0sdGhpcyksdGhpcy5lbmREZWxpbWl0ZWRfKG4pfX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRHcm91cD1mdW5jdGlvbihlLHQsbyl7aWYobnVsbCE9dClmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl0aGlzLndyaXRlRmllbGRIZWFkZXJfKGUsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuU1RBUlRfR1JPVVApLG8odFtyXSx0aGlzKSx0aGlzLndyaXRlRmllbGRIZWFkZXJfKGUsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRU5EX0dST1VQKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRGaXhlZEhhc2g2ND1mdW5jdGlvbihlLHQpe2lmKG51bGwhPXQpZm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspdGhpcy53cml0ZUZpeGVkSGFzaDY0KGUsdFtvXSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVJlcGVhdGVkVmFyaW50SGFzaDY0PWZ1bmN0aW9uKGUsdCl7aWYobnVsbCE9dClmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl0aGlzLndyaXRlVmFyaW50SGFzaDY0KGUsdFtvXSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVBhY2tlZEludDMyPWZ1bmN0aW9uKGUsdCl7aWYobnVsbCE9dCYmdC5sZW5ndGgpe2U9dGhpcy5iZWdpbkRlbGltaXRlZF8oZSk7Zm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspdGhpcy5lbmNvZGVyXy53cml0ZVNpZ25lZFZhcmludDMyKHRbb10pO3RoaXMuZW5kRGVsaW1pdGVkXyhlKX19LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVBhY2tlZEludDMyU3RyaW5nPWZ1bmN0aW9uKGUsdCl7aWYobnVsbCE9dCYmdC5sZW5ndGgpe2U9dGhpcy5iZWdpbkRlbGltaXRlZF8oZSk7Zm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspdGhpcy5lbmNvZGVyXy53cml0ZVNpZ25lZFZhcmludDMyKHBhcnNlSW50KHRbb10sMTApKTt0aGlzLmVuZERlbGltaXRlZF8oZSl9fSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVQYWNrZWRJbnQ2ND1mdW5jdGlvbihlLHQpe2lmKG51bGwhPXQmJnQubGVuZ3RoKXtlPXRoaXMuYmVnaW5EZWxpbWl0ZWRfKGUpO2Zvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXRoaXMuZW5jb2Rlcl8ud3JpdGVTaWduZWRWYXJpbnQ2NCh0W29dKTt0aGlzLmVuZERlbGltaXRlZF8oZSl9fSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVQYWNrZWRTcGxpdEZpeGVkNjQ9ZnVuY3Rpb24oZSx0LG8scil7aWYobnVsbCE9dCl7ZT10aGlzLmJlZ2luRGVsaW1pdGVkXyhlKTtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl0aGlzLmVuY29kZXJfLndyaXRlU3BsaXRGaXhlZDY0KG8odFtuXSkscih0W25dKSk7dGhpcy5lbmREZWxpbWl0ZWRfKGUpfX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUGFja2VkU3BsaXRWYXJpbnQ2ND1mdW5jdGlvbihlLHQsbyxyKXtpZihudWxsIT10KXtlPXRoaXMuYmVnaW5EZWxpbWl0ZWRfKGUpO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXRoaXMuZW5jb2Rlcl8ud3JpdGVTcGxpdFZhcmludDY0KG8odFtuXSkscih0W25dKSk7dGhpcy5lbmREZWxpbWl0ZWRfKGUpfX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUGFja2VkU3BsaXRaaWd6YWdWYXJpbnQ2ND1mdW5jdGlvbihlLHQsbyxyKXtpZihudWxsIT10KXtlPXRoaXMuYmVnaW5EZWxpbWl0ZWRfKGUpO2Zvcih2YXIgbj10aGlzLmVuY29kZXJfLHM9MDtzPHQubGVuZ3RoO3MrKylqc3BiLnV0aWxzLnRvWmlnemFnNjQobyh0W3NdKSxyKHRbc10pLChmdW5jdGlvbihlLHQpe24ud3JpdGVTcGxpdFZhcmludDY0KGU+Pj4wLHQ+Pj4wKX0pKTt0aGlzLmVuZERlbGltaXRlZF8oZSl9fSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVQYWNrZWRJbnQ2NFN0cmluZz1mdW5jdGlvbihlLHQpe2lmKG51bGwhPXQmJnQubGVuZ3RoKXtlPXRoaXMuYmVnaW5EZWxpbWl0ZWRfKGUpO2Zvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXt2YXIgcj1qc3BiLmFyaXRoLkludDY0LmZyb21TdHJpbmcodFtvXSk7dGhpcy5lbmNvZGVyXy53cml0ZVNwbGl0VmFyaW50NjQoci5sbyxyLmhpKX10aGlzLmVuZERlbGltaXRlZF8oZSl9fSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVQYWNrZWRVaW50MzI9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10JiZ0Lmxlbmd0aCl7ZT10aGlzLmJlZ2luRGVsaW1pdGVkXyhlKTtmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl0aGlzLmVuY29kZXJfLndyaXRlVW5zaWduZWRWYXJpbnQzMih0W29dKTt0aGlzLmVuZERlbGltaXRlZF8oZSl9fSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVQYWNrZWRVaW50MzJTdHJpbmc9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10JiZ0Lmxlbmd0aCl7ZT10aGlzLmJlZ2luRGVsaW1pdGVkXyhlKTtmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl0aGlzLmVuY29kZXJfLndyaXRlVW5zaWduZWRWYXJpbnQzMihwYXJzZUludCh0W29dLDEwKSk7dGhpcy5lbmREZWxpbWl0ZWRfKGUpfX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUGFja2VkVWludDY0PWZ1bmN0aW9uKGUsdCl7aWYobnVsbCE9dCYmdC5sZW5ndGgpe2U9dGhpcy5iZWdpbkRlbGltaXRlZF8oZSk7Zm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspdGhpcy5lbmNvZGVyXy53cml0ZVVuc2lnbmVkVmFyaW50NjQodFtvXSk7dGhpcy5lbmREZWxpbWl0ZWRfKGUpfX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUGFja2VkVWludDY0U3RyaW5nPWZ1bmN0aW9uKGUsdCl7aWYobnVsbCE9dCYmdC5sZW5ndGgpe2U9dGhpcy5iZWdpbkRlbGltaXRlZF8oZSk7Zm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciByPWpzcGIuYXJpdGguVUludDY0LmZyb21TdHJpbmcodFtvXSk7dGhpcy5lbmNvZGVyXy53cml0ZVNwbGl0VmFyaW50NjQoci5sbyxyLmhpKX10aGlzLmVuZERlbGltaXRlZF8oZSl9fSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVQYWNrZWRTaW50MzI9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10JiZ0Lmxlbmd0aCl7ZT10aGlzLmJlZ2luRGVsaW1pdGVkXyhlKTtmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl0aGlzLmVuY29kZXJfLndyaXRlWmlnemFnVmFyaW50MzIodFtvXSk7dGhpcy5lbmREZWxpbWl0ZWRfKGUpfX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUGFja2VkU2ludDY0PWZ1bmN0aW9uKGUsdCl7aWYobnVsbCE9dCYmdC5sZW5ndGgpe2U9dGhpcy5iZWdpbkRlbGltaXRlZF8oZSk7Zm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspdGhpcy5lbmNvZGVyXy53cml0ZVppZ3phZ1ZhcmludDY0KHRbb10pO3RoaXMuZW5kRGVsaW1pdGVkXyhlKX19LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVBhY2tlZFNpbnQ2NFN0cmluZz1mdW5jdGlvbihlLHQpe2lmKG51bGwhPXQmJnQubGVuZ3RoKXtlPXRoaXMuYmVnaW5EZWxpbWl0ZWRfKGUpO2Zvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXRoaXMuZW5jb2Rlcl8ud3JpdGVaaWd6YWdWYXJpbnRIYXNoNjQoanNwYi51dGlscy5kZWNpbWFsU3RyaW5nVG9IYXNoNjQodFtvXSkpO3RoaXMuZW5kRGVsaW1pdGVkXyhlKX19LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVBhY2tlZFNpbnRIYXNoNjQ9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10JiZ0Lmxlbmd0aCl7ZT10aGlzLmJlZ2luRGVsaW1pdGVkXyhlKTtmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl0aGlzLmVuY29kZXJfLndyaXRlWmlnemFnVmFyaW50SGFzaDY0KHRbb10pO3RoaXMuZW5kRGVsaW1pdGVkXyhlKX19LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVBhY2tlZEZpeGVkMzI9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10JiZ0Lmxlbmd0aClmb3IodGhpcy53cml0ZUZpZWxkSGVhZGVyXyhlLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkRFTElNSVRFRCksdGhpcy5lbmNvZGVyXy53cml0ZVVuc2lnbmVkVmFyaW50MzIoNCp0Lmxlbmd0aCksZT0wO2U8dC5sZW5ndGg7ZSsrKXRoaXMuZW5jb2Rlcl8ud3JpdGVVaW50MzIodFtlXSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVBhY2tlZEZpeGVkNjQ9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10JiZ0Lmxlbmd0aClmb3IodGhpcy53cml0ZUZpZWxkSGVhZGVyXyhlLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkRFTElNSVRFRCksdGhpcy5lbmNvZGVyXy53cml0ZVVuc2lnbmVkVmFyaW50MzIoOCp0Lmxlbmd0aCksZT0wO2U8dC5sZW5ndGg7ZSsrKXRoaXMuZW5jb2Rlcl8ud3JpdGVVaW50NjQodFtlXSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVBhY2tlZEZpeGVkNjRTdHJpbmc9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10JiZ0Lmxlbmd0aClmb3IodGhpcy53cml0ZUZpZWxkSGVhZGVyXyhlLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkRFTElNSVRFRCksdGhpcy5lbmNvZGVyXy53cml0ZVVuc2lnbmVkVmFyaW50MzIoOCp0Lmxlbmd0aCksZT0wO2U8dC5sZW5ndGg7ZSsrKXt2YXIgbz1qc3BiLmFyaXRoLlVJbnQ2NC5mcm9tU3RyaW5nKHRbZV0pO3RoaXMuZW5jb2Rlcl8ud3JpdGVTcGxpdEZpeGVkNjQoby5sbyxvLmhpKX19LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVBhY2tlZFNmaXhlZDMyPWZ1bmN0aW9uKGUsdCl7aWYobnVsbCE9dCYmdC5sZW5ndGgpZm9yKHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oZSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5ERUxJTUlURUQpLHRoaXMuZW5jb2Rlcl8ud3JpdGVVbnNpZ25lZFZhcmludDMyKDQqdC5sZW5ndGgpLGU9MDtlPHQubGVuZ3RoO2UrKyl0aGlzLmVuY29kZXJfLndyaXRlSW50MzIodFtlXSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVBhY2tlZFNmaXhlZDY0PWZ1bmN0aW9uKGUsdCl7aWYobnVsbCE9dCYmdC5sZW5ndGgpZm9yKHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oZSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5ERUxJTUlURUQpLHRoaXMuZW5jb2Rlcl8ud3JpdGVVbnNpZ25lZFZhcmludDMyKDgqdC5sZW5ndGgpLGU9MDtlPHQubGVuZ3RoO2UrKyl0aGlzLmVuY29kZXJfLndyaXRlSW50NjQodFtlXSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVBhY2tlZFNmaXhlZDY0U3RyaW5nPWZ1bmN0aW9uKGUsdCl7aWYobnVsbCE9dCYmdC5sZW5ndGgpZm9yKHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oZSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5ERUxJTUlURUQpLHRoaXMuZW5jb2Rlcl8ud3JpdGVVbnNpZ25lZFZhcmludDMyKDgqdC5sZW5ndGgpLGU9MDtlPHQubGVuZ3RoO2UrKyl0aGlzLmVuY29kZXJfLndyaXRlSW50NjRTdHJpbmcodFtlXSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVBhY2tlZEZsb2F0PWZ1bmN0aW9uKGUsdCl7aWYobnVsbCE9dCYmdC5sZW5ndGgpZm9yKHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oZSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5ERUxJTUlURUQpLHRoaXMuZW5jb2Rlcl8ud3JpdGVVbnNpZ25lZFZhcmludDMyKDQqdC5sZW5ndGgpLGU9MDtlPHQubGVuZ3RoO2UrKyl0aGlzLmVuY29kZXJfLndyaXRlRmxvYXQodFtlXSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVBhY2tlZERvdWJsZT1mdW5jdGlvbihlLHQpe2lmKG51bGwhPXQmJnQubGVuZ3RoKWZvcih0aGlzLndyaXRlRmllbGRIZWFkZXJfKGUsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuREVMSU1JVEVEKSx0aGlzLmVuY29kZXJfLndyaXRlVW5zaWduZWRWYXJpbnQzMig4KnQubGVuZ3RoKSxlPTA7ZTx0Lmxlbmd0aDtlKyspdGhpcy5lbmNvZGVyXy53cml0ZURvdWJsZSh0W2VdKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUGFja2VkQm9vbD1mdW5jdGlvbihlLHQpe2lmKG51bGwhPXQmJnQubGVuZ3RoKWZvcih0aGlzLndyaXRlRmllbGRIZWFkZXJfKGUsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuREVMSU1JVEVEKSx0aGlzLmVuY29kZXJfLndyaXRlVW5zaWduZWRWYXJpbnQzMih0Lmxlbmd0aCksZT0wO2U8dC5sZW5ndGg7ZSsrKXRoaXMuZW5jb2Rlcl8ud3JpdGVCb29sKHRbZV0pfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVQYWNrZWRFbnVtPWZ1bmN0aW9uKGUsdCl7aWYobnVsbCE9dCYmdC5sZW5ndGgpe2U9dGhpcy5iZWdpbkRlbGltaXRlZF8oZSk7Zm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspdGhpcy5lbmNvZGVyXy53cml0ZUVudW0odFtvXSk7dGhpcy5lbmREZWxpbWl0ZWRfKGUpfX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUGFja2VkRml4ZWRIYXNoNjQ9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10JiZ0Lmxlbmd0aClmb3IodGhpcy53cml0ZUZpZWxkSGVhZGVyXyhlLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkRFTElNSVRFRCksdGhpcy5lbmNvZGVyXy53cml0ZVVuc2lnbmVkVmFyaW50MzIoOCp0Lmxlbmd0aCksZT0wO2U8dC5sZW5ndGg7ZSsrKXRoaXMuZW5jb2Rlcl8ud3JpdGVGaXhlZEhhc2g2NCh0W2VdKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUGFja2VkVmFyaW50SGFzaDY0PWZ1bmN0aW9uKGUsdCl7aWYobnVsbCE9dCYmdC5sZW5ndGgpe2U9dGhpcy5iZWdpbkRlbGltaXRlZF8oZSk7Zm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspdGhpcy5lbmNvZGVyXy53cml0ZVZhcmludEhhc2g2NCh0W29dKTt0aGlzLmVuZERlbGltaXRlZF8oZSl9fSxqc3BiLk1hcD1mdW5jdGlvbihlLHQpe3RoaXMuYXJyXz1lLHRoaXMudmFsdWVDdG9yXz10LHRoaXMubWFwXz17fSx0aGlzLmFyckNsZWFuPSEwLDA8dGhpcy5hcnJfLmxlbmd0aCYmdGhpcy5sb2FkRnJvbUFycmF5XygpfSxqc3BiLk1hcC5wcm90b3R5cGUubG9hZEZyb21BcnJheV89ZnVuY3Rpb24oKXtmb3IodmFyIGU9MDtlPHRoaXMuYXJyXy5sZW5ndGg7ZSsrKXt2YXIgdD10aGlzLmFycl9bZV0sbz10WzBdO3RoaXMubWFwX1tvLnRvU3RyaW5nKCldPW5ldyBqc3BiLk1hcC5FbnRyeV8obyx0WzFdKX10aGlzLmFyckNsZWFuPSEwfSxqc3BiLk1hcC5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbigpe2lmKHRoaXMuYXJyQ2xlYW4pe2lmKHRoaXMudmFsdWVDdG9yXyl7dmFyIGUsdD10aGlzLm1hcF87Zm9yKGUgaW4gdClpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxlKSl7dmFyIG89dFtlXS52YWx1ZVdyYXBwZXI7byYmby50b0FycmF5KCl9fX1lbHNle2Zvcih0aGlzLmFycl8ubGVuZ3RoPTAsKHQ9dGhpcy5zdHJpbmdLZXlzXygpKS5zb3J0KCksZT0wO2U8dC5sZW5ndGg7ZSsrKXt2YXIgcj10aGlzLm1hcF9bdFtlXV07KG89ci52YWx1ZVdyYXBwZXIpJiZvLnRvQXJyYXkoKSx0aGlzLmFycl8ucHVzaChbci5rZXksci52YWx1ZV0pfXRoaXMuYXJyQ2xlYW49ITB9cmV0dXJuIHRoaXMuYXJyX30sanNwYi5NYXAucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBvPXRoaXMudG9BcnJheSgpLHI9W10sbj0wO248by5sZW5ndGg7bisrKXt2YXIgcz10aGlzLm1hcF9bb1tuXVswXS50b1N0cmluZygpXTt0aGlzLndyYXBFbnRyeV8ocyk7dmFyIGk9cy52YWx1ZVdyYXBwZXI7aT8oZ29vZy5hc3NlcnRzLmFzc2VydCh0KSxyLnB1c2goW3Mua2V5LHQoZSxpKV0pKTpyLnB1c2goW3Mua2V5LHMudmFsdWVdKX1yZXR1cm4gcn0sanNwYi5NYXAuZnJvbU9iamVjdD1mdW5jdGlvbihlLHQsbyl7dD1uZXcganNwYi5NYXAoW10sdCk7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl1bMF0scz1vKGVbcl1bMV0pO3Quc2V0KG4scyl9cmV0dXJuIHR9LGpzcGIuTWFwLkFycmF5SXRlcmF0b3JJdGVyYWJsZV89ZnVuY3Rpb24oZSl7dGhpcy5pZHhfPTAsdGhpcy5hcnJfPWV9LGpzcGIuTWFwLkFycmF5SXRlcmF0b3JJdGVyYWJsZV8ucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pZHhfPHRoaXMuYXJyXy5sZW5ndGg/e2RvbmU6ITEsdmFsdWU6dGhpcy5hcnJfW3RoaXMuaWR4XysrXX06e2RvbmU6ITAsdmFsdWU6dm9pZCAwfX0sXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmKGpzcGIuTWFwLkFycmF5SXRlcmF0b3JJdGVyYWJsZV8ucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLGpzcGIuTWFwLnByb3RvdHlwZS5nZXRMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdHJpbmdLZXlzXygpLmxlbmd0aH0sanNwYi5NYXAucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5tYXBfPXt9LHRoaXMuYXJyQ2xlYW49ITF9LGpzcGIuTWFwLnByb3RvdHlwZS5kZWw9ZnVuY3Rpb24oZSl7ZT1lLnRvU3RyaW5nKCk7dmFyIHQ9dGhpcy5tYXBfLmhhc093blByb3BlcnR5KGUpO3JldHVybiBkZWxldGUgdGhpcy5tYXBfW2VdLHRoaXMuYXJyQ2xlYW49ITEsdH0sanNwYi5NYXAucHJvdG90eXBlLmdldEVudHJ5TGlzdD1mdW5jdGlvbigpe3ZhciBlPVtdLHQ9dGhpcy5zdHJpbmdLZXlzXygpO3Quc29ydCgpO2Zvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXt2YXIgcj10aGlzLm1hcF9bdFtvXV07ZS5wdXNoKFtyLmtleSxyLnZhbHVlXSl9cmV0dXJuIGV9LGpzcGIuTWFwLnByb3RvdHlwZS5lbnRyaWVzPWZ1bmN0aW9uKCl7dmFyIGU9W10sdD10aGlzLnN0cmluZ0tleXNfKCk7dC5zb3J0KCk7Zm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciByPXRoaXMubWFwX1t0W29dXTtlLnB1c2goW3Iua2V5LHRoaXMud3JhcEVudHJ5XyhyKV0pfXJldHVybiBuZXcganNwYi5NYXAuQXJyYXlJdGVyYXRvckl0ZXJhYmxlXyhlKX0sanNwYi5NYXAucHJvdG90eXBlLmtleXM9ZnVuY3Rpb24oKXt2YXIgZT1bXSx0PXRoaXMuc3RyaW5nS2V5c18oKTt0LnNvcnQoKTtmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyllLnB1c2godGhpcy5tYXBfW3Rbb11dLmtleSk7cmV0dXJuIG5ldyBqc3BiLk1hcC5BcnJheUl0ZXJhdG9ySXRlcmFibGVfKGUpfSxqc3BiLk1hcC5wcm90b3R5cGUudmFsdWVzPWZ1bmN0aW9uKCl7dmFyIGU9W10sdD10aGlzLnN0cmluZ0tleXNfKCk7dC5zb3J0KCk7Zm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspZS5wdXNoKHRoaXMud3JhcEVudHJ5Xyh0aGlzLm1hcF9bdFtvXV0pKTtyZXR1cm4gbmV3IGpzcGIuTWFwLkFycmF5SXRlcmF0b3JJdGVyYWJsZV8oZSl9LGpzcGIuTWFwLnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKGUsdCl7dmFyIG89dGhpcy5zdHJpbmdLZXlzXygpO28uc29ydCgpO2Zvcih2YXIgcj0wO3I8by5sZW5ndGg7cisrKXt2YXIgbj10aGlzLm1hcF9bb1tyXV07ZS5jYWxsKHQsdGhpcy53cmFwRW50cnlfKG4pLG4ua2V5LHRoaXMpfX0sanNwYi5NYXAucHJvdG90eXBlLnNldD1mdW5jdGlvbihlLHQpe3ZhciBvPW5ldyBqc3BiLk1hcC5FbnRyeV8oZSk7cmV0dXJuIHRoaXMudmFsdWVDdG9yXz8oby52YWx1ZVdyYXBwZXI9dCxvLnZhbHVlPXQudG9BcnJheSgpKTpvLnZhbHVlPXQsdGhpcy5tYXBfW2UudG9TdHJpbmcoKV09byx0aGlzLmFyckNsZWFuPSExLHRoaXN9LGpzcGIuTWFwLnByb3RvdHlwZS53cmFwRW50cnlfPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnZhbHVlQ3Rvcl8/KGUudmFsdWVXcmFwcGVyfHwoZS52YWx1ZVdyYXBwZXI9bmV3IHRoaXMudmFsdWVDdG9yXyhlLnZhbHVlKSksZS52YWx1ZVdyYXBwZXIpOmUudmFsdWV9LGpzcGIuTWFwLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSl7aWYoZT10aGlzLm1hcF9bZS50b1N0cmluZygpXSlyZXR1cm4gdGhpcy53cmFwRW50cnlfKGUpfSxqc3BiLk1hcC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGUpe3JldHVybiBlLnRvU3RyaW5nKClpbiB0aGlzLm1hcF99LGpzcGIuTWFwLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSx0LG8scixuKXt2YXIgcz10aGlzLnN0cmluZ0tleXNfKCk7cy5zb3J0KCk7Zm9yKHZhciBpPTA7aTxzLmxlbmd0aDtpKyspe3ZhciBhPXRoaXMubWFwX1tzW2ldXTt0LmJlZ2luU3ViTWVzc2FnZShlKSxvLmNhbGwodCwxLGEua2V5KSx0aGlzLnZhbHVlQ3Rvcl8/ci5jYWxsKHQsMix0aGlzLndyYXBFbnRyeV8oYSksbik6ci5jYWxsKHQsMixhLnZhbHVlKSx0LmVuZFN1Yk1lc3NhZ2UoKX19LGpzcGIuTWFwLmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUsdCxvLHIsbixzLGkpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOyl7dmFyIGE9dC5nZXRGaWVsZE51bWJlcigpOzE9PWE/cz1vLmNhbGwodCk6Mj09YSYmKGUudmFsdWVDdG9yXz8oZ29vZy5hc3NlcnRzLmFzc2VydChuKSxpfHwoaT1uZXcgZS52YWx1ZUN0b3JfKSxyLmNhbGwodCxpLG4pKTppPXIuY2FsbCh0KSl9Z29vZy5hc3NlcnRzLmFzc2VydChudWxsIT1zKSxnb29nLmFzc2VydHMuYXNzZXJ0KG51bGwhPWkpLGUuc2V0KHMsaSl9LGpzcGIuTWFwLnByb3RvdHlwZS5zdHJpbmdLZXlzXz1mdW5jdGlvbigpe3ZhciBlLHQ9dGhpcy5tYXBfLG89W107Zm9yKGUgaW4gdClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxlKSYmby5wdXNoKGUpO3JldHVybiBvfSxqc3BiLk1hcC5FbnRyeV89ZnVuY3Rpb24oZSx0KXt0aGlzLmtleT1lLHRoaXMudmFsdWU9dCx0aGlzLnZhbHVlV3JhcHBlcj12b2lkIDB9LGpzcGIuRXh0ZW5zaW9uRmllbGRJbmZvPWZ1bmN0aW9uKGUsdCxvLHIsbil7dGhpcy5maWVsZEluZGV4PWUsdGhpcy5maWVsZE5hbWU9dCx0aGlzLmN0b3I9byx0aGlzLnRvT2JqZWN0Rm49cix0aGlzLmlzUmVwZWF0ZWQ9bn0sanNwYi5FeHRlbnNpb25GaWVsZEJpbmFyeUluZm89ZnVuY3Rpb24oZSx0LG8scixuLHMpe3RoaXMuZmllbGRJbmZvPWUsdGhpcy5iaW5hcnlSZWFkZXJGbj10LHRoaXMuYmluYXJ5V3JpdGVyRm49byx0aGlzLmJpbmFyeU1lc3NhZ2VTZXJpYWxpemVGbj1yLHRoaXMuYmluYXJ5TWVzc2FnZURlc2VyaWFsaXplRm49bix0aGlzLmlzUGFja2VkPXN9LGpzcGIuRXh0ZW5zaW9uRmllbGRJbmZvLnByb3RvdHlwZS5pc01lc3NhZ2VUeXBlPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLmN0b3J9LGpzcGIuTWVzc2FnZT1mdW5jdGlvbigpe30sanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVD0hMCxqc3BiLk1lc3NhZ2UuR0VORVJBVEVfRlJPTV9PQkpFQ1Q9IWdvb2cuRElTQUxMT1dfVEVTVF9PTkxZX0NPREUsanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX1NUUklORz0hMCxqc3BiLk1lc3NhZ2UuQVNTVU1FX0xPQ0FMX0FSUkFZUz0hMSxqc3BiLk1lc3NhZ2UuU0VSSUFMSVpFX0VNUFRZX1RSQUlMSU5HX0ZJRUxEUz0hMCxqc3BiLk1lc3NhZ2UuU1VQUE9SVFNfVUlOVDhBUlJBWV89XCJmdW5jdGlvblwiPT10eXBlb2YgVWludDhBcnJheSxqc3BiLk1lc3NhZ2UucHJvdG90eXBlLmdldEpzUGJNZXNzYWdlSWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZXNzYWdlSWRffSxqc3BiLk1lc3NhZ2UuZ2V0SW5kZXhfPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQrZS5hcnJheUluZGV4T2Zmc2V0X30sanNwYi5NZXNzYWdlLmhpZGRlbkVTNlByb3BlcnR5Xz1mdW5jdGlvbigpe30sanNwYi5NZXNzYWdlLmdldEZpZWxkTnVtYmVyXz1mdW5jdGlvbihlLHQpe3JldHVybiB0LWUuYXJyYXlJbmRleE9mZnNldF99LGpzcGIuTWVzc2FnZS5pbml0aWFsaXplPWZ1bmN0aW9uKGUsdCxvLHIsbixzKXtpZihlLndyYXBwZXJzXz1udWxsLHR8fCh0PW8/W29dOltdKSxlLm1lc3NhZ2VJZF89bz9TdHJpbmcobyk6dm9pZCAwLGUuYXJyYXlJbmRleE9mZnNldF89MD09PW8/LTE6MCxlLmFycmF5PXQsanNwYi5NZXNzYWdlLmluaXRQaXZvdEFuZEV4dGVuc2lvbk9iamVjdF8oZSxyKSxlLmNvbnZlcnRlZFByaW1pdGl2ZUZpZWxkc189e30sanNwYi5NZXNzYWdlLlNFUklBTElaRV9FTVBUWV9UUkFJTElOR19GSUVMRFN8fChlLnJlcGVhdGVkRmllbGRzPW4pLG4pZm9yKHQ9MDt0PG4ubGVuZ3RoO3QrKykobz1uW3RdKTxlLnBpdm90Xz8obz1qc3BiLk1lc3NhZ2UuZ2V0SW5kZXhfKGUsbyksZS5hcnJheVtvXT1lLmFycmF5W29dfHxqc3BiLk1lc3NhZ2UuRU1QVFlfTElTVF9TRU5USU5FTF8pOihqc3BiLk1lc3NhZ2UubWF5YmVJbml0RW1wdHlFeHRlbnNpb25PYmplY3RfKGUpLGUuZXh0ZW5zaW9uT2JqZWN0X1tvXT1lLmV4dGVuc2lvbk9iamVjdF9bb118fGpzcGIuTWVzc2FnZS5FTVBUWV9MSVNUX1NFTlRJTkVMXyk7aWYocyYmcy5sZW5ndGgpZm9yKHQ9MDt0PHMubGVuZ3RoO3QrKylqc3BiLk1lc3NhZ2UuY29tcHV0ZU9uZW9mQ2FzZShlLHNbdF0pfSxqc3BiLk1lc3NhZ2UuRU1QVFlfTElTVF9TRU5USU5FTF89Z29vZy5ERUJVRyYmT2JqZWN0LmZyZWV6ZT9PYmplY3QuZnJlZXplKFtdKTpbXSxqc3BiLk1lc3NhZ2UuaXNBcnJheV89ZnVuY3Rpb24oZSl7cmV0dXJuIGpzcGIuTWVzc2FnZS5BU1NVTUVfTE9DQUxfQVJSQVlTP2UgaW5zdGFuY2VvZiBBcnJheTpBcnJheS5pc0FycmF5KGUpfSxqc3BiLk1lc3NhZ2UuaXNFeHRlbnNpb25PYmplY3RfPWZ1bmN0aW9uKGUpe3JldHVybiEobnVsbD09PWV8fFwib2JqZWN0XCIhPXR5cGVvZiBlfHxqc3BiLk1lc3NhZ2UuaXNBcnJheV8oZSl8fGpzcGIuTWVzc2FnZS5TVVBQT1JUU19VSU5UOEFSUkFZXyYmZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpfSxqc3BiLk1lc3NhZ2UuaW5pdFBpdm90QW5kRXh0ZW5zaW9uT2JqZWN0Xz1mdW5jdGlvbihlLHQpe3ZhciBvPWUuYXJyYXkubGVuZ3RoLHI9LTE7aWYobyYmKHI9by0xLG89ZS5hcnJheVtyXSxqc3BiLk1lc3NhZ2UuaXNFeHRlbnNpb25PYmplY3RfKG8pKSlyZXR1cm4gZS5waXZvdF89anNwYi5NZXNzYWdlLmdldEZpZWxkTnVtYmVyXyhlLHIpLHZvaWQoZS5leHRlbnNpb25PYmplY3RfPW8pOy0xPHQ/KGUucGl2b3RfPU1hdGgubWF4KHQsanNwYi5NZXNzYWdlLmdldEZpZWxkTnVtYmVyXyhlLHIrMSkpLGUuZXh0ZW5zaW9uT2JqZWN0Xz1udWxsKTplLnBpdm90Xz1OdW1iZXIuTUFYX1ZBTFVFfSxqc3BiLk1lc3NhZ2UubWF5YmVJbml0RW1wdHlFeHRlbnNpb25PYmplY3RfPWZ1bmN0aW9uKGUpe3ZhciB0PWpzcGIuTWVzc2FnZS5nZXRJbmRleF8oZSxlLnBpdm90Xyk7ZS5hcnJheVt0XXx8KGUuZXh0ZW5zaW9uT2JqZWN0Xz1lLmFycmF5W3RdPXt9KX0sanNwYi5NZXNzYWdlLnRvT2JqZWN0TGlzdD1mdW5jdGlvbihlLHQsbyl7Zm9yKHZhciByPVtdLG49MDtuPGUubGVuZ3RoO24rKylyW25dPXQuY2FsbChlW25dLG8sZVtuXSk7cmV0dXJuIHJ9LGpzcGIuTWVzc2FnZS50b09iamVjdEV4dGVuc2lvbj1mdW5jdGlvbihlLHQsbyxyLG4pe2Zvcih2YXIgcyBpbiBvKXt2YXIgaT1vW3NdLGE9ci5jYWxsKGUsaSk7aWYobnVsbCE9YSl7Zm9yKHZhciBnIGluIGkuZmllbGROYW1lKWlmKGkuZmllbGROYW1lLmhhc093blByb3BlcnR5KGcpKWJyZWFrO3RbZ109aS50b09iamVjdEZuP2kuaXNSZXBlYXRlZD9qc3BiLk1lc3NhZ2UudG9PYmplY3RMaXN0KGEsaS50b09iamVjdEZuLG4pOmkudG9PYmplY3RGbihuLGEpOmF9fX0sanNwYi5NZXNzYWdlLnNlcmlhbGl6ZUJpbmFyeUV4dGVuc2lvbnM9ZnVuY3Rpb24oZSx0LG8scil7Zm9yKHZhciBuIGluIG8pe3ZhciBzPW9bbl0saT1zLmZpZWxkSW5mbztpZighcy5iaW5hcnlXcml0ZXJGbil0aHJvdyBFcnJvcihcIk1lc3NhZ2UgZXh0ZW5zaW9uIHByZXNlbnQgdGhhdCB3YXMgZ2VuZXJhdGVkIHdpdGhvdXQgYmluYXJ5IHNlcmlhbGl6YXRpb24gc3VwcG9ydFwiKTt2YXIgYT1yLmNhbGwoZSxpKTtpZihudWxsIT1hKWlmKGkuaXNNZXNzYWdlVHlwZSgpKXtpZighcy5iaW5hcnlNZXNzYWdlU2VyaWFsaXplRm4pdGhyb3cgRXJyb3IoXCJNZXNzYWdlIGV4dGVuc2lvbiBwcmVzZW50IGhvbGRpbmcgc3VibWVzc2FnZSB3aXRob3V0IGJpbmFyeSBzdXBwb3J0IGVuYWJsZWQsIGFuZCBtZXNzYWdlIGlzIGJlaW5nIHNlcmlhbGl6ZWQgdG8gYmluYXJ5IGZvcm1hdFwiKTtzLmJpbmFyeVdyaXRlckZuLmNhbGwodCxpLmZpZWxkSW5kZXgsYSxzLmJpbmFyeU1lc3NhZ2VTZXJpYWxpemVGbil9ZWxzZSBzLmJpbmFyeVdyaXRlckZuLmNhbGwodCxpLmZpZWxkSW5kZXgsYSl9fSxqc3BiLk1lc3NhZ2UucmVhZEJpbmFyeUV4dGVuc2lvbj1mdW5jdGlvbihlLHQsbyxyLG4pe3ZhciBzPW9bdC5nZXRGaWVsZE51bWJlcigpXTtpZihzKXtpZihvPXMuZmllbGRJbmZvLCFzLmJpbmFyeVJlYWRlckZuKXRocm93IEVycm9yKFwiRGVzZXJpYWxpemluZyBleHRlbnNpb24gd2hvc2UgZ2VuZXJhdGVkIGNvZGUgZG9lcyBub3Qgc3VwcG9ydCBiaW5hcnkgZm9ybWF0XCIpO2lmKG8uaXNNZXNzYWdlVHlwZSgpKXt2YXIgaT1uZXcgby5jdG9yO3MuYmluYXJ5UmVhZGVyRm4uY2FsbCh0LGkscy5iaW5hcnlNZXNzYWdlRGVzZXJpYWxpemVGbil9ZWxzZSBpPXMuYmluYXJ5UmVhZGVyRm4uY2FsbCh0KTtvLmlzUmVwZWF0ZWQmJiFzLmlzUGFja2VkPyh0PXIuY2FsbChlLG8pKT90LnB1c2goaSk6bi5jYWxsKGUsbyxbaV0pOm4uY2FsbChlLG8saSl9ZWxzZSB0LnNraXBGaWVsZCgpfSxqc3BiLk1lc3NhZ2UuZ2V0RmllbGQ9ZnVuY3Rpb24oZSx0KXtpZih0PGUucGl2b3RfKXt0PWpzcGIuTWVzc2FnZS5nZXRJbmRleF8oZSx0KTt2YXIgbz1lLmFycmF5W3RdO3JldHVybiBvPT09anNwYi5NZXNzYWdlLkVNUFRZX0xJU1RfU0VOVElORUxfP2UuYXJyYXlbdF09W106b31pZihlLmV4dGVuc2lvbk9iamVjdF8pcmV0dXJuKG89ZS5leHRlbnNpb25PYmplY3RfW3RdKT09PWpzcGIuTWVzc2FnZS5FTVBUWV9MSVNUX1NFTlRJTkVMXz9lLmV4dGVuc2lvbk9iamVjdF9bdF09W106b30sanNwYi5NZXNzYWdlLmdldFJlcGVhdGVkRmllbGQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4ganNwYi5NZXNzYWdlLmdldEZpZWxkKGUsdCl9LGpzcGIuTWVzc2FnZS5nZXRPcHRpb25hbEZsb2F0aW5nUG9pbnRGaWVsZD1mdW5jdGlvbihlLHQpe3JldHVybiBudWxsPT0oZT1qc3BiLk1lc3NhZ2UuZ2V0RmllbGQoZSx0KSk/ZTorZX0sanNwYi5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZD1mdW5jdGlvbihlLHQpe3JldHVybiBudWxsPT0oZT1qc3BiLk1lc3NhZ2UuZ2V0RmllbGQoZSx0KSk/ZTohIWV9LGpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZEZsb2F0aW5nUG9pbnRGaWVsZD1mdW5jdGlvbihlLHQpe3ZhciBvPWpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkKGUsdCk7aWYoZS5jb252ZXJ0ZWRQcmltaXRpdmVGaWVsZHNffHwoZS5jb252ZXJ0ZWRQcmltaXRpdmVGaWVsZHNfPXt9KSwhZS5jb252ZXJ0ZWRQcmltaXRpdmVGaWVsZHNfW3RdKXtmb3IodmFyIHI9MDtyPG8ubGVuZ3RoO3IrKylvW3JdPStvW3JdO2UuY29udmVydGVkUHJpbWl0aXZlRmllbGRzX1t0XT0hMH1yZXR1cm4gb30sanNwYi5NZXNzYWdlLmdldFJlcGVhdGVkQm9vbGVhbkZpZWxkPWZ1bmN0aW9uKGUsdCl7dmFyIG89anNwYi5NZXNzYWdlLmdldFJlcGVhdGVkRmllbGQoZSx0KTtpZihlLmNvbnZlcnRlZFByaW1pdGl2ZUZpZWxkc198fChlLmNvbnZlcnRlZFByaW1pdGl2ZUZpZWxkc189e30pLCFlLmNvbnZlcnRlZFByaW1pdGl2ZUZpZWxkc19bdF0pe2Zvcih2YXIgcj0wO3I8by5sZW5ndGg7cisrKW9bcl09ISFvW3JdO2UuY29udmVydGVkUHJpbWl0aXZlRmllbGRzX1t0XT0hMH1yZXR1cm4gb30sanNwYi5NZXNzYWdlLmJ5dGVzQXNCNjQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWV8fFwic3RyaW5nXCI9PXR5cGVvZiBlP2U6anNwYi5NZXNzYWdlLlNVUFBPUlRTX1VJTlQ4QVJSQVlfJiZlIGluc3RhbmNlb2YgVWludDhBcnJheT9nb29nLmNyeXB0LmJhc2U2NC5lbmNvZGVCeXRlQXJyYXkoZSk6KGdvb2cuYXNzZXJ0cy5mYWlsKFwiQ2Fubm90IGNvZXJjZSB0byBiNjQgc3RyaW5nOiBcIitnb29nLnR5cGVPZihlKSksbnVsbCl9LGpzcGIuTWVzc2FnZS5ieXRlc0FzVTg9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWV8fGUgaW5zdGFuY2VvZiBVaW50OEFycmF5P2U6XCJzdHJpbmdcIj09dHlwZW9mIGU/Z29vZy5jcnlwdC5iYXNlNjQuZGVjb2RlU3RyaW5nVG9VaW50OEFycmF5KGUpOihnb29nLmFzc2VydHMuZmFpbChcIkNhbm5vdCBjb2VyY2UgdG8gVWludDhBcnJheTogXCIrZ29vZy50eXBlT2YoZSkpLG51bGwpfSxqc3BiLk1lc3NhZ2UuYnl0ZXNMaXN0QXNCNjQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGpzcGIuTWVzc2FnZS5hc3NlcnRDb25zaXN0ZW50VHlwZXNfKGUpLGUubGVuZ3RoJiZcInN0cmluZ1wiIT10eXBlb2YgZVswXT9nb29nLmFycmF5Lm1hcChlLGpzcGIuTWVzc2FnZS5ieXRlc0FzQjY0KTplfSxqc3BiLk1lc3NhZ2UuYnl0ZXNMaXN0QXNVOD1mdW5jdGlvbihlKXtyZXR1cm4ganNwYi5NZXNzYWdlLmFzc2VydENvbnNpc3RlbnRUeXBlc18oZSksIWUubGVuZ3RofHxlWzBdaW5zdGFuY2VvZiBVaW50OEFycmF5P2U6Z29vZy5hcnJheS5tYXAoZSxqc3BiLk1lc3NhZ2UuYnl0ZXNBc1U4KX0sanNwYi5NZXNzYWdlLmFzc2VydENvbnNpc3RlbnRUeXBlc189ZnVuY3Rpb24oZSl7aWYoZ29vZy5ERUJVRyYmZSYmMTxlLmxlbmd0aCl7dmFyIHQ9Z29vZy50eXBlT2YoZVswXSk7Z29vZy5hcnJheS5mb3JFYWNoKGUsKGZ1bmN0aW9uKGUpe2dvb2cudHlwZU9mKGUpIT10JiZnb29nLmFzc2VydHMuZmFpbChcIkluY29uc2lzdGVudCB0eXBlIGluIEpTUEIgcmVwZWF0ZWQgZmllbGQgYXJyYXkuIEdvdCBcIitnb29nLnR5cGVPZihlKStcIiBleHBlY3RlZCBcIit0KX0pKX19LGpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0PWZ1bmN0aW9uKGUsdCxvKXtyZXR1cm4gbnVsbD09KGU9anNwYi5NZXNzYWdlLmdldEZpZWxkKGUsdCkpP286ZX0sanNwYi5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0PWZ1bmN0aW9uKGUsdCxvKXtyZXR1cm4gbnVsbD09KGU9anNwYi5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZChlLHQpKT9vOmV9LGpzcGIuTWVzc2FnZS5nZXRGbG9hdGluZ1BvaW50RmllbGRXaXRoRGVmYXVsdD1mdW5jdGlvbihlLHQsbyl7cmV0dXJuIG51bGw9PShlPWpzcGIuTWVzc2FnZS5nZXRPcHRpb25hbEZsb2F0aW5nUG9pbnRGaWVsZChlLHQpKT9vOmV9LGpzcGIuTWVzc2FnZS5nZXRGaWVsZFByb3RvMz1qc3BiLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCxqc3BiLk1lc3NhZ2UuZ2V0TWFwRmllbGQ9ZnVuY3Rpb24oZSx0LG8scil7aWYoZS53cmFwcGVyc198fChlLndyYXBwZXJzXz17fSksdCBpbiBlLndyYXBwZXJzXylyZXR1cm4gZS53cmFwcGVyc19bdF07dmFyIG49anNwYi5NZXNzYWdlLmdldEZpZWxkKGUsdCk7aWYoIW4pe2lmKG8pcmV0dXJuO249W10sanNwYi5NZXNzYWdlLnNldEZpZWxkKGUsdCxuKX1yZXR1cm4gZS53cmFwcGVyc19bdF09bmV3IGpzcGIuTWFwKG4scil9LGpzcGIuTWVzc2FnZS5zZXRGaWVsZD1mdW5jdGlvbihlLHQsbyl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5hc3NlcnRJbnN0YW5jZW9mKGUsanNwYi5NZXNzYWdlKSx0PGUucGl2b3RfP2UuYXJyYXlbanNwYi5NZXNzYWdlLmdldEluZGV4XyhlLHQpXT1vOihqc3BiLk1lc3NhZ2UubWF5YmVJbml0RW1wdHlFeHRlbnNpb25PYmplY3RfKGUpLGUuZXh0ZW5zaW9uT2JqZWN0X1t0XT1vKSxlfSxqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zSW50RmllbGQ9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGRJZ25vcmluZ0RlZmF1bHRfKGUsdCxvLDApfSxqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zRmxvYXRGaWVsZD1mdW5jdGlvbihlLHQsbyl7cmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZElnbm9yaW5nRGVmYXVsdF8oZSx0LG8sMCl9LGpzcGIuTWVzc2FnZS5zZXRQcm90bzNCb29sZWFuRmllbGQ9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGRJZ25vcmluZ0RlZmF1bHRfKGUsdCxvLCExKX0sanNwYi5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkPWZ1bmN0aW9uKGUsdCxvKXtyZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkSWdub3JpbmdEZWZhdWx0XyhlLHQsbyxcIlwiKX0sanNwYi5NZXNzYWdlLnNldFByb3RvM0J5dGVzRmllbGQ9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGRJZ25vcmluZ0RlZmF1bHRfKGUsdCxvLFwiXCIpfSxqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zRW51bUZpZWxkPWZ1bmN0aW9uKGUsdCxvKXtyZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkSWdub3JpbmdEZWZhdWx0XyhlLHQsbywwKX0sanNwYi5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ludEZpZWxkPWZ1bmN0aW9uKGUsdCxvKXtyZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkSWdub3JpbmdEZWZhdWx0XyhlLHQsbyxcIjBcIil9LGpzcGIuTWVzc2FnZS5zZXRGaWVsZElnbm9yaW5nRGVmYXVsdF89ZnVuY3Rpb24oZSx0LG8scil7cmV0dXJuIGdvb2cuYXNzZXJ0cy5hc3NlcnRJbnN0YW5jZW9mKGUsanNwYi5NZXNzYWdlKSxvIT09cj9qc3BiLk1lc3NhZ2Uuc2V0RmllbGQoZSx0LG8pOnQ8ZS5waXZvdF8/ZS5hcnJheVtqc3BiLk1lc3NhZ2UuZ2V0SW5kZXhfKGUsdCldPW51bGw6KGpzcGIuTWVzc2FnZS5tYXliZUluaXRFbXB0eUV4dGVuc2lvbk9iamVjdF8oZSksZGVsZXRlIGUuZXh0ZW5zaW9uT2JqZWN0X1t0XSksZX0sanNwYi5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRGaWVsZD1mdW5jdGlvbihlLHQsbyxyKXtyZXR1cm4gZ29vZy5hc3NlcnRzLmFzc2VydEluc3RhbmNlb2YoZSxqc3BiLk1lc3NhZ2UpLHQ9anNwYi5NZXNzYWdlLmdldFJlcGVhdGVkRmllbGQoZSx0KSxudWxsIT1yP3Quc3BsaWNlKHIsMCxvKTp0LnB1c2gobyksZX0sanNwYi5NZXNzYWdlLnNldE9uZW9mRmllbGQ9ZnVuY3Rpb24oZSx0LG8scil7cmV0dXJuIGdvb2cuYXNzZXJ0cy5hc3NlcnRJbnN0YW5jZW9mKGUsanNwYi5NZXNzYWdlKSwobz1qc3BiLk1lc3NhZ2UuY29tcHV0ZU9uZW9mQ2FzZShlLG8pKSYmbyE9PXQmJnZvaWQgMCE9PXImJihlLndyYXBwZXJzXyYmbyBpbiBlLndyYXBwZXJzXyYmKGUud3JhcHBlcnNfW29dPXZvaWQgMCksanNwYi5NZXNzYWdlLnNldEZpZWxkKGUsbyx2b2lkIDApKSxqc3BiLk1lc3NhZ2Uuc2V0RmllbGQoZSx0LHIpfSxqc3BiLk1lc3NhZ2UuY29tcHV0ZU9uZW9mQ2FzZT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbyxyLG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHM9dFtuXSxpPWpzcGIuTWVzc2FnZS5nZXRGaWVsZChlLHMpO251bGwhPWkmJihvPXMscj1pLGpzcGIuTWVzc2FnZS5zZXRGaWVsZChlLHMsdm9pZCAwKSl9cmV0dXJuIG8/KGpzcGIuTWVzc2FnZS5zZXRGaWVsZChlLG8sciksbyk6MH0sanNwYi5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZD1mdW5jdGlvbihlLHQsbyxyKXtpZihlLndyYXBwZXJzX3x8KGUud3JhcHBlcnNfPXt9KSwhZS53cmFwcGVyc19bb10pe3ZhciBuPWpzcGIuTWVzc2FnZS5nZXRGaWVsZChlLG8pOyhyfHxuKSYmKGUud3JhcHBlcnNfW29dPW5ldyB0KG4pKX1yZXR1cm4gZS53cmFwcGVyc19bb119LGpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZD1mdW5jdGlvbihlLHQsbyl7cmV0dXJuIGpzcGIuTWVzc2FnZS53cmFwUmVwZWF0ZWRGaWVsZF8oZSx0LG8pLCh0PWUud3JhcHBlcnNfW29dKT09anNwYi5NZXNzYWdlLkVNUFRZX0xJU1RfU0VOVElORUxfJiYodD1lLndyYXBwZXJzX1tvXT1bXSksdH0sanNwYi5NZXNzYWdlLndyYXBSZXBlYXRlZEZpZWxkXz1mdW5jdGlvbihlLHQsbyl7aWYoZS53cmFwcGVyc198fChlLndyYXBwZXJzXz17fSksIWUud3JhcHBlcnNfW29dKXtmb3IodmFyIHI9anNwYi5NZXNzYWdlLmdldFJlcGVhdGVkRmllbGQoZSxvKSxuPVtdLHM9MDtzPHIubGVuZ3RoO3MrKyluW3NdPW5ldyB0KHJbc10pO2Uud3JhcHBlcnNfW29dPW59fSxqc3BiLk1lc3NhZ2Uuc2V0V3JhcHBlckZpZWxkPWZ1bmN0aW9uKGUsdCxvKXtnb29nLmFzc2VydHMuYXNzZXJ0SW5zdGFuY2VvZihlLGpzcGIuTWVzc2FnZSksZS53cmFwcGVyc198fChlLndyYXBwZXJzXz17fSk7dmFyIHI9bz9vLnRvQXJyYXkoKTpvO3JldHVybiBlLndyYXBwZXJzX1t0XT1vLGpzcGIuTWVzc2FnZS5zZXRGaWVsZChlLHQscil9LGpzcGIuTWVzc2FnZS5zZXRPbmVvZldyYXBwZXJGaWVsZD1mdW5jdGlvbihlLHQsbyxyKXtnb29nLmFzc2VydHMuYXNzZXJ0SW5zdGFuY2VvZihlLGpzcGIuTWVzc2FnZSksZS53cmFwcGVyc198fChlLndyYXBwZXJzXz17fSk7dmFyIG49cj9yLnRvQXJyYXkoKTpyO3JldHVybiBlLndyYXBwZXJzX1t0XT1yLGpzcGIuTWVzc2FnZS5zZXRPbmVvZkZpZWxkKGUsdCxvLG4pfSxqc3BiLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQ9ZnVuY3Rpb24oZSx0LG8pe2dvb2cuYXNzZXJ0cy5hc3NlcnRJbnN0YW5jZW9mKGUsanNwYi5NZXNzYWdlKSxlLndyYXBwZXJzX3x8KGUud3JhcHBlcnNfPXt9KSxvPW98fFtdO2Zvcih2YXIgcj1bXSxuPTA7bjxvLmxlbmd0aDtuKyspcltuXT1vW25dLnRvQXJyYXkoKTtyZXR1cm4gZS53cmFwcGVyc19bdF09byxqc3BiLk1lc3NhZ2Uuc2V0RmllbGQoZSx0LHIpfSxqc3BiLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZD1mdW5jdGlvbihlLHQsbyxyLG4pe2pzcGIuTWVzc2FnZS53cmFwUmVwZWF0ZWRGaWVsZF8oZSxyLHQpO3ZhciBzPWUud3JhcHBlcnNfW3RdO3JldHVybiBzfHwocz1lLndyYXBwZXJzX1t0XT1bXSksbz1vfHxuZXcgcixlPWpzcGIuTWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkKGUsdCksbnVsbCE9bj8ocy5zcGxpY2UobiwwLG8pLGUuc3BsaWNlKG4sMCxvLnRvQXJyYXkoKSkpOihzLnB1c2gobyksZS5wdXNoKG8udG9BcnJheSgpKSksb30sanNwYi5NZXNzYWdlLnRvTWFwPWZ1bmN0aW9uKGUsdCxvLHIpe2Zvcih2YXIgbj17fSxzPTA7czxlLmxlbmd0aDtzKyspblt0LmNhbGwoZVtzXSldPW8/by5jYWxsKGVbc10scixlW3NdKTplW3NdO3JldHVybiBufSxqc3BiLk1lc3NhZ2UucHJvdG90eXBlLnN5bmNNYXBGaWVsZHNfPWZ1bmN0aW9uKCl7aWYodGhpcy53cmFwcGVyc18pZm9yKHZhciBlIGluIHRoaXMud3JhcHBlcnNfKXt2YXIgdD10aGlzLndyYXBwZXJzX1tlXTtpZihBcnJheS5pc0FycmF5KHQpKWZvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXRbb10mJnRbb10udG9BcnJheSgpO2Vsc2UgdCYmdC50b0FycmF5KCl9fSxqc3BiLk1lc3NhZ2UucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zeW5jTWFwRmllbGRzXygpLHRoaXMuYXJyYXl9LGpzcGIuTWVzc2FnZS5HRU5FUkFURV9UT19TVFJJTkcmJihqc3BiLk1lc3NhZ2UucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3luY01hcEZpZWxkc18oKSx0aGlzLmFycmF5LnRvU3RyaW5nKCl9KSxqc3BiLk1lc3NhZ2UucHJvdG90eXBlLmdldEV4dGVuc2lvbj1mdW5jdGlvbihlKXtpZih0aGlzLmV4dGVuc2lvbk9iamVjdF8pe3RoaXMud3JhcHBlcnNffHwodGhpcy53cmFwcGVyc189e30pO3ZhciB0PWUuZmllbGRJbmRleDtpZihlLmlzUmVwZWF0ZWQpe2lmKGUuaXNNZXNzYWdlVHlwZSgpKXJldHVybiB0aGlzLndyYXBwZXJzX1t0XXx8KHRoaXMud3JhcHBlcnNfW3RdPWdvb2cuYXJyYXkubWFwKHRoaXMuZXh0ZW5zaW9uT2JqZWN0X1t0XXx8W10sKGZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZS5jdG9yKHQpfSkpKSx0aGlzLndyYXBwZXJzX1t0XX1lbHNlIGlmKGUuaXNNZXNzYWdlVHlwZSgpKXJldHVybiF0aGlzLndyYXBwZXJzX1t0XSYmdGhpcy5leHRlbnNpb25PYmplY3RfW3RdJiYodGhpcy53cmFwcGVyc19bdF09bmV3IGUuY3Rvcih0aGlzLmV4dGVuc2lvbk9iamVjdF9bdF0pKSx0aGlzLndyYXBwZXJzX1t0XTtyZXR1cm4gdGhpcy5leHRlbnNpb25PYmplY3RfW3RdfX0sanNwYi5NZXNzYWdlLnByb3RvdHlwZS5zZXRFeHRlbnNpb249ZnVuY3Rpb24oZSx0KXt0aGlzLndyYXBwZXJzX3x8KHRoaXMud3JhcHBlcnNfPXt9KSxqc3BiLk1lc3NhZ2UubWF5YmVJbml0RW1wdHlFeHRlbnNpb25PYmplY3RfKHRoaXMpO3ZhciBvPWUuZmllbGRJbmRleDtyZXR1cm4gZS5pc1JlcGVhdGVkPyh0PXR8fFtdLGUuaXNNZXNzYWdlVHlwZSgpPyh0aGlzLndyYXBwZXJzX1tvXT10LHRoaXMuZXh0ZW5zaW9uT2JqZWN0X1tvXT1nb29nLmFycmF5Lm1hcCh0LChmdW5jdGlvbihlKXtyZXR1cm4gZS50b0FycmF5KCl9KSkpOnRoaXMuZXh0ZW5zaW9uT2JqZWN0X1tvXT10KTplLmlzTWVzc2FnZVR5cGUoKT8odGhpcy53cmFwcGVyc19bb109dCx0aGlzLmV4dGVuc2lvbk9iamVjdF9bb109dD90LnRvQXJyYXkoKTp0KTp0aGlzLmV4dGVuc2lvbk9iamVjdF9bb109dCx0aGlzfSxqc3BiLk1lc3NhZ2UuZGlmZmVyZW5jZT1mdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQuY29uc3RydWN0b3IpKXRocm93IEVycm9yKFwiTWVzc2FnZXMgaGF2ZSBkaWZmZXJlbnQgdHlwZXMuXCIpO3ZhciBvPWUudG9BcnJheSgpO3Q9dC50b0FycmF5KCk7dmFyIHI9W10sbj0wLHM9by5sZW5ndGg+dC5sZW5ndGg/by5sZW5ndGg6dC5sZW5ndGg7Zm9yKGUuZ2V0SnNQYk1lc3NhZ2VJZCgpJiYoclswXT1lLmdldEpzUGJNZXNzYWdlSWQoKSxuPTEpO248cztuKyspanNwYi5NZXNzYWdlLmNvbXBhcmVGaWVsZHMob1tuXSx0W25dKXx8KHJbbl09dFtuXSk7cmV0dXJuIG5ldyBlLmNvbnN0cnVjdG9yKHIpfSxqc3BiLk1lc3NhZ2UuZXF1YWxzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PXR8fCEoIWV8fCF0KSYmZSBpbnN0YW5jZW9mIHQuY29uc3RydWN0b3ImJmpzcGIuTWVzc2FnZS5jb21wYXJlRmllbGRzKGUudG9BcnJheSgpLHQudG9BcnJheSgpKX0sanNwYi5NZXNzYWdlLmNvbXBhcmVFeHRlbnNpb25zPWZ1bmN0aW9uKGUsdCl7ZT1lfHx7fSx0PXR8fHt9O3ZhciBvLHI9e307Zm9yKG8gaW4gZSlyW29dPTA7Zm9yKG8gaW4gdClyW29dPTA7Zm9yKG8gaW4gcilpZighanNwYi5NZXNzYWdlLmNvbXBhcmVGaWVsZHMoZVtvXSx0W29dKSlyZXR1cm4hMTtyZXR1cm4hMH0sanNwYi5NZXNzYWdlLmNvbXBhcmVGaWVsZHM9ZnVuY3Rpb24oZSx0KXtpZihlPT10KXJldHVybiEwO2lmKCFnb29nLmlzT2JqZWN0KGUpfHwhZ29vZy5pc09iamVjdCh0KSlyZXR1cm4hIShcIm51bWJlclwiPT10eXBlb2YgZSYmaXNOYU4oZSl8fFwibnVtYmVyXCI9PXR5cGVvZiB0JiZpc05hTih0KSkmJlN0cmluZyhlKT09U3RyaW5nKHQpO2lmKGUuY29uc3RydWN0b3IhPXQuY29uc3RydWN0b3IpcmV0dXJuITE7aWYoanNwYi5NZXNzYWdlLlNVUFBPUlRTX1VJTlQ4QVJSQVlfJiZlLmNvbnN0cnVjdG9yPT09VWludDhBcnJheSl7aWYoZS5sZW5ndGghPXQubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgbz0wO288ZS5sZW5ndGg7bysrKWlmKGVbb10hPXRbb10pcmV0dXJuITE7cmV0dXJuITB9aWYoZS5jb25zdHJ1Y3Rvcj09PUFycmF5KXt2YXIgcj12b2lkIDAsbj12b2lkIDAscz1NYXRoLm1heChlLmxlbmd0aCx0Lmxlbmd0aCk7Zm9yKG89MDtvPHM7bysrKXt2YXIgaT1lW29dLGE9dFtvXTtpZihpJiZpLmNvbnN0cnVjdG9yPT1PYmplY3QmJihnb29nLmFzc2VydHMuYXNzZXJ0KHZvaWQgMD09PXIpLGdvb2cuYXNzZXJ0cy5hc3NlcnQobz09PWUubGVuZ3RoLTEpLHI9aSxpPXZvaWQgMCksYSYmYS5jb25zdHJ1Y3Rvcj09T2JqZWN0JiYoZ29vZy5hc3NlcnRzLmFzc2VydCh2b2lkIDA9PT1uKSxnb29nLmFzc2VydHMuYXNzZXJ0KG89PT10Lmxlbmd0aC0xKSxuPWEsYT12b2lkIDApLCFqc3BiLk1lc3NhZ2UuY29tcGFyZUZpZWxkcyhpLGEpKXJldHVybiExfXJldHVybiFyJiYhbnx8KHI9cnx8e30sbj1ufHx7fSxqc3BiLk1lc3NhZ2UuY29tcGFyZUV4dGVuc2lvbnMocixuKSl9aWYoZS5jb25zdHJ1Y3Rvcj09PU9iamVjdClyZXR1cm4ganNwYi5NZXNzYWdlLmNvbXBhcmVFeHRlbnNpb25zKGUsdCk7dGhyb3cgRXJyb3IoXCJJbnZhbGlkIHR5cGUgaW4gSlNQQiBhcnJheVwiKX0sanNwYi5NZXNzYWdlLnByb3RvdHlwZS5jbG9uZU1lc3NhZ2U9ZnVuY3Rpb24oKXtyZXR1cm4ganNwYi5NZXNzYWdlLmNsb25lTWVzc2FnZSh0aGlzKX0sanNwYi5NZXNzYWdlLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBqc3BiLk1lc3NhZ2UuY2xvbmVNZXNzYWdlKHRoaXMpfSxqc3BiLk1lc3NhZ2UuY2xvbmU9ZnVuY3Rpb24oZSl7cmV0dXJuIGpzcGIuTWVzc2FnZS5jbG9uZU1lc3NhZ2UoZSl9LGpzcGIuTWVzc2FnZS5jbG9uZU1lc3NhZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBlLmNvbnN0cnVjdG9yKGpzcGIuTWVzc2FnZS5jbG9uZV8oZS50b0FycmF5KCkpKX0sanNwYi5NZXNzYWdlLmNvcHlJbnRvPWZ1bmN0aW9uKGUsdCl7Z29vZy5hc3NlcnRzLmFzc2VydEluc3RhbmNlb2YoZSxqc3BiLk1lc3NhZ2UpLGdvb2cuYXNzZXJ0cy5hc3NlcnRJbnN0YW5jZW9mKHQsanNwYi5NZXNzYWdlKSxnb29nLmFzc2VydHMuYXNzZXJ0KGUuY29uc3RydWN0b3I9PXQuY29uc3RydWN0b3IsXCJDb3B5IHNvdXJjZSBhbmQgdGFyZ2V0IG1lc3NhZ2Ugc2hvdWxkIGhhdmUgdGhlIHNhbWUgdHlwZS5cIiksZT1qc3BiLk1lc3NhZ2UuY2xvbmUoZSk7Zm9yKHZhciBvPXQudG9BcnJheSgpLHI9ZS50b0FycmF5KCksbj1vLmxlbmd0aD0wO248ci5sZW5ndGg7bisrKW9bbl09cltuXTt0LndyYXBwZXJzXz1lLndyYXBwZXJzXyx0LmV4dGVuc2lvbk9iamVjdF89ZS5leHRlbnNpb25PYmplY3RffSxqc3BiLk1lc3NhZ2UuY2xvbmVfPWZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpe2Zvcih2YXIgdD1BcnJheShlLmxlbmd0aCksbz0wO288ZS5sZW5ndGg7bysrKXt2YXIgcj1lW29dO251bGwhPXImJih0W29dPVwib2JqZWN0XCI9PXR5cGVvZiByP2pzcGIuTWVzc2FnZS5jbG9uZV8oZ29vZy5hc3NlcnRzLmFzc2VydChyKSk6cil9cmV0dXJuIHR9aWYoanNwYi5NZXNzYWdlLlNVUFBPUlRTX1VJTlQ4QVJSQVlfJiZlIGluc3RhbmNlb2YgVWludDhBcnJheSlyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZSk7Zm9yKG8gaW4gdD17fSxlKW51bGwhPShyPWVbb10pJiYodFtvXT1cIm9iamVjdFwiPT10eXBlb2Ygcj9qc3BiLk1lc3NhZ2UuY2xvbmVfKGdvb2cuYXNzZXJ0cy5hc3NlcnQocikpOnIpO3JldHVybiB0fSxqc3BiLk1lc3NhZ2UucmVnaXN0ZXJNZXNzYWdlVHlwZT1mdW5jdGlvbihlLHQpe3QubWVzc2FnZUlkPWV9LGpzcGIuTWVzc2FnZS5tZXNzYWdlU2V0RXh0ZW5zaW9ucz17fSxqc3BiLk1lc3NhZ2UubWVzc2FnZVNldEV4dGVuc2lvbnNCaW5hcnk9e30sanNwYi5FeHBvcnQ9e30sZXhwb3J0cy5NYXA9anNwYi5NYXAsZXhwb3J0cy5NZXNzYWdlPWpzcGIuTWVzc2FnZSxleHBvcnRzLkJpbmFyeVJlYWRlcj1qc3BiLkJpbmFyeVJlYWRlcixleHBvcnRzLkJpbmFyeVdyaXRlcj1qc3BiLkJpbmFyeVdyaXRlcixleHBvcnRzLkV4dGVuc2lvbkZpZWxkSW5mbz1qc3BiLkV4dGVuc2lvbkZpZWxkSW5mbyxleHBvcnRzLkV4dGVuc2lvbkZpZWxkQmluYXJ5SW5mbz1qc3BiLkV4dGVuc2lvbkZpZWxkQmluYXJ5SW5mbyxleHBvcnRzLmV4cG9ydFN5bWJvbD1nb29nLmV4cG9ydFN5bWJvbCxleHBvcnRzLmluaGVyaXRzPWdvb2cuaW5oZXJpdHMsZXhwb3J0cy5vYmplY3Q9e2V4dGVuZDpnb29nLm9iamVjdC5leHRlbmR9LGV4cG9ydHMudHlwZU9mPWdvb2cudHlwZU9mfSw0MDpmdW5jdGlvbihlLHQsbyl7dmFyIHI7ZnVuY3Rpb24gbihlKXt2YXIgdD0wO3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0PGUubGVuZ3RoP3tkb25lOiExLHZhbHVlOmVbdCsrXX06e2RvbmU6ITB9fX12YXIgcz1cImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZGVmaW5lUHJvcGVydGllcz9PYmplY3QuZGVmaW5lUHJvcGVydHk6ZnVuY3Rpb24oZSx0LG8pe2UhPUFycmF5LnByb3RvdHlwZSYmZSE9T2JqZWN0LnByb3RvdHlwZSYmKGVbdF09by52YWx1ZSl9LGk9ZnVuY3Rpb24oZSl7ZT1bXCJvYmplY3RcIj09dHlwZW9mIHdpbmRvdyYmd2luZG93LFwib2JqZWN0XCI9PXR5cGVvZiBzZWxmJiZzZWxmLFwib2JqZWN0XCI9PXR5cGVvZiBvLmcmJm8uZyxlXTtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoOysrdCl7dmFyIHI9ZVt0XTtpZihyJiZyLk1hdGg9PU1hdGgpcmV0dXJuIHJ9dGhyb3cgRXJyb3IoXCJDYW5ub3QgZmluZCBnbG9iYWwgb2JqZWN0XCIpfSh0aGlzKTtmdW5jdGlvbiBhKCl7YT1mdW5jdGlvbigpe30saS5TeW1ib2x8fChpLlN5bWJvbD1sKX1mdW5jdGlvbiBnKGUsdCl7dGhpcy5hPWUscyh0aGlzLFwiZGVzY3JpcHRpb25cIix7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnR9KX1nLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9O3ZhciBwLGw9KHA9MCxmdW5jdGlvbiBlKHQpe2lmKHRoaXMgaW5zdGFuY2VvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3JcIik7cmV0dXJuIG5ldyBnKFwianNjb21wX3N5bWJvbF9cIisodHx8XCJcIikrXCJfXCIrcCsrLHQpfSk7ZnVuY3Rpb24gdSgpe2EoKTt2YXIgZT1pLlN5bWJvbC5pdGVyYXRvcjtlfHwoZT1pLlN5bWJvbC5pdGVyYXRvcj1pLlN5bWJvbChcIlN5bWJvbC5pdGVyYXRvclwiKSksXCJmdW5jdGlvblwiIT10eXBlb2YgQXJyYXkucHJvdG90eXBlW2VdJiZzKEFycmF5LnByb3RvdHlwZSxlLHtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHUoKSwoZT17bmV4dDplfSlbaS5TeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGV9KG4odGhpcykpfX0pLHU9ZnVuY3Rpb24oKXt9fWZ1bmN0aW9uIGMoZSl7dmFyIHQ9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yJiZlW1N5bWJvbC5pdGVyYXRvcl07cmV0dXJuIHQ/dC5jYWxsKGUpOntuZXh0Om4oZSl9fXZhciBkLHk9XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmNyZWF0ZT9PYmplY3QuY3JlYXRlOmZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlPWUsbmV3IHR9O2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5zZXRQcm90b3R5cGVPZilkPU9iamVjdC5zZXRQcm90b3R5cGVPZjtlbHNle3ZhciBmO2U6e3ZhciBiPXt9O3RyeXtiLl9fcHJvdG9fXz17VjohMH0sZj1iLlY7YnJlYWsgZX1jYXRjaChlZSl7fWY9ITF9ZD1mP2Z1bmN0aW9uKGUsdCl7aWYoZS5fX3Byb3RvX189dCxlLl9fcHJvdG9fXyE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcihlK1wiIGlzIG5vdCBleHRlbnNpYmxlXCIpO3JldHVybiBlfTpudWxsfXZhciBoPWQ7ZnVuY3Rpb24gXyhlLHQpe2lmKGUucHJvdG90eXBlPXkodC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsaCloKGUsdCk7ZWxzZSBmb3IodmFyIG8gaW4gdClpZihcInByb3RvdHlwZVwiIT1vKWlmKE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbyk7ciYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbyxyKX1lbHNlIGVbb109dFtvXTtlLk89dC5wcm90b3R5cGV9ZnVuY3Rpb24gdihlLHQpe2lmKHQpe3ZhciBvPWk7ZT1lLnNwbGl0KFwiLlwiKTtmb3IodmFyIHI9MDtyPGUubGVuZ3RoLTE7cisrKXt2YXIgbj1lW3JdO24gaW4gb3x8KG9bbl09e30pLG89b1tuXX0odD10KHI9b1tlPWVbZS5sZW5ndGgtMV1dKSkhPXImJm51bGwhPXQmJnMobyxlLHtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dH0pfX12KFwiQXJyYXkucHJvdG90eXBlLmtleXNcIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGV8fGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7dSgpLGUgaW5zdGFuY2VvZiBTdHJpbmcmJihlKz1cIlwiKTt2YXIgbz0wLHI9e25leHQ6ZnVuY3Rpb24oKXtpZihvPGUubGVuZ3RoKXt2YXIgbj1vKys7cmV0dXJue3ZhbHVlOnQobixlW25dKSxkb25lOiExfX1yZXR1cm4gci5uZXh0PWZ1bmN0aW9uKCl7cmV0dXJue2RvbmU6ITAsdmFsdWU6dm9pZCAwfX0sci5uZXh0KCl9fTtyZXR1cm4gcltTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHJ9LHJ9KHRoaXMsKGZ1bmN0aW9uKGUpe3JldHVybiBlfSkpfX0pKSx2KFwiQXJyYXkucHJvdG90eXBlLmZpbmRcIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGV8fGZ1bmN0aW9uKGUsdCl7ZTp7dmFyIG89dGhpcztvIGluc3RhbmNlb2YgU3RyaW5nJiYobz1TdHJpbmcobykpO2Zvcih2YXIgcj1vLmxlbmd0aCxuPTA7bjxyO24rKyl7dmFyIHM9b1tuXTtpZihlLmNhbGwodCxzLG4sbykpe2U9czticmVhayBlfX1lPXZvaWQgMH1yZXR1cm4gZX19KSksdihcIk9iamVjdC5pc1wiLChmdW5jdGlvbihlKXtyZXR1cm4gZXx8ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09PXQ/MCE9PWV8fDEvZT09MS90OmUhPWUmJnQhPXR9fSkpLHYoXCJBcnJheS5wcm90b3R5cGUuaW5jbHVkZXNcIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGV8fGZ1bmN0aW9uKGUsdCl7dmFyIG89dGhpcztvIGluc3RhbmNlb2YgU3RyaW5nJiYobz1TdHJpbmcobykpO3ZhciByPW8ubGVuZ3RoO2ZvcigwPih0PXR8fDApJiYodD1NYXRoLm1heCh0K3IsMCkpO3Q8cjt0Kyspe3ZhciBuPW9bdF07aWYobj09PWV8fE9iamVjdC5pcyhuLGUpKXJldHVybiEwfXJldHVybiExfX0pKSx2KFwiUHJvbWlzZVwiLChmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpe3RoaXMuYj0wLHRoaXMuYz12b2lkIDAsdGhpcy5hPVtdO3ZhciB0PXRoaXMuZigpO3RyeXtlKHQucmVzb2x2ZSx0LnJlamVjdCl9Y2F0Y2goZSl7dC5yZWplY3QoZSl9fWZ1bmN0aW9uIG8oKXt0aGlzLmE9bnVsbH1mdW5jdGlvbiByKGUpe3JldHVybiBlIGluc3RhbmNlb2YgdD9lOm5ldyB0KChmdW5jdGlvbih0KXt0KGUpfSkpfWlmKGUpcmV0dXJuIGU7by5wcm90b3R5cGUuYj1mdW5jdGlvbihlKXtpZihudWxsPT10aGlzLmEpe3RoaXMuYT1bXTt2YXIgdD10aGlzO3RoaXMuYygoZnVuY3Rpb24oKXt0LmcoKX0pKX10aGlzLmEucHVzaChlKX07dmFyIG49aS5zZXRUaW1lb3V0O28ucHJvdG90eXBlLmM9ZnVuY3Rpb24oZSl7bihlLDApfSxvLnByb3RvdHlwZS5nPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmEmJnRoaXMuYS5sZW5ndGg7KXt2YXIgZT10aGlzLmE7dGhpcy5hPVtdO2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7Kyt0KXt2YXIgbz1lW3RdO2VbdF09bnVsbDt0cnl7bygpfWNhdGNoKGUpe3RoaXMuZihlKX19fXRoaXMuYT1udWxsfSxvLnByb3RvdHlwZS5mPWZ1bmN0aW9uKGUpe3RoaXMuYygoZnVuY3Rpb24oKXt0aHJvdyBlfSkpfSx0LnByb3RvdHlwZS5mPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXtyZXR1cm4gZnVuY3Rpb24ocil7b3x8KG89ITAsZS5jYWxsKHQscikpfX12YXIgdD10aGlzLG89ITE7cmV0dXJue3Jlc29sdmU6ZSh0aGlzLnMpLHJlamVjdDplKHRoaXMuZyl9fSx0LnByb3RvdHlwZS5zPWZ1bmN0aW9uKGUpe2lmKGU9PT10aGlzKXRoaXMuZyhuZXcgVHlwZUVycm9yKFwiQSBQcm9taXNlIGNhbm5vdCByZXNvbHZlIHRvIGl0c2VsZlwiKSk7ZWxzZSBpZihlIGluc3RhbmNlb2YgdCl0aGlzLnYoZSk7ZWxzZXtlOnN3aXRjaCh0eXBlb2YgZSl7Y2FzZVwib2JqZWN0XCI6dmFyIG89bnVsbCE9ZTticmVhayBlO2Nhc2VcImZ1bmN0aW9uXCI6bz0hMDticmVhayBlO2RlZmF1bHQ6bz0hMX1vP3RoaXMubShlKTp0aGlzLmgoZSl9fSx0LnByb3RvdHlwZS5tPWZ1bmN0aW9uKGUpe3ZhciB0PXZvaWQgMDt0cnl7dD1lLnRoZW59Y2F0Y2goZSl7cmV0dXJuIHZvaWQgdGhpcy5nKGUpfVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dGhpcy53KHQsZSk6dGhpcy5oKGUpfSx0LnByb3RvdHlwZS5nPWZ1bmN0aW9uKGUpe3RoaXMuaSgyLGUpfSx0LnByb3RvdHlwZS5oPWZ1bmN0aW9uKGUpe3RoaXMuaSgxLGUpfSx0LnByb3RvdHlwZS5pPWZ1bmN0aW9uKGUsdCl7aWYoMCE9dGhpcy5iKXRocm93IEVycm9yKFwiQ2Fubm90IHNldHRsZShcIitlK1wiLCBcIit0K1wiKTogUHJvbWlzZSBhbHJlYWR5IHNldHRsZWQgaW4gc3RhdGVcIit0aGlzLmIpO3RoaXMuYj1lLHRoaXMuYz10LHRoaXMubCgpfSx0LnByb3RvdHlwZS5sPWZ1bmN0aW9uKCl7aWYobnVsbCE9dGhpcy5hKXtmb3IodmFyIGU9MDtlPHRoaXMuYS5sZW5ndGg7KytlKXMuYih0aGlzLmFbZV0pO3RoaXMuYT1udWxsfX07dmFyIHM9bmV3IG87cmV0dXJuIHQucHJvdG90eXBlLnY9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5mKCk7ZS5GKHQucmVzb2x2ZSx0LnJlamVjdCl9LHQucHJvdG90eXBlLnc9ZnVuY3Rpb24oZSx0KXt2YXIgbz10aGlzLmYoKTt0cnl7ZS5jYWxsKHQsby5yZXNvbHZlLG8ucmVqZWN0KX1jYXRjaChlKXtvLnJlamVjdChlKX19LHQucHJvdG90eXBlLnRoZW49ZnVuY3Rpb24oZSxvKXtmdW5jdGlvbiByKGUsdCl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgZT9mdW5jdGlvbih0KXt0cnl7bihlKHQpKX1jYXRjaChlKXtzKGUpfX06dH12YXIgbixzLGk9bmV3IHQoKGZ1bmN0aW9uKGUsdCl7bj1lLHM9dH0pKTtyZXR1cm4gdGhpcy5GKHIoZSxuKSxyKG8scykpLGl9LHQucHJvdG90eXBlLmNhdGNoPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnRoZW4odm9pZCAwLGUpfSx0LnByb3RvdHlwZS5GPWZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbygpe3N3aXRjaChyLmIpe2Nhc2UgMTplKHIuYyk7YnJlYWs7Y2FzZSAyOnQoci5jKTticmVhaztkZWZhdWx0OnRocm93IEVycm9yKFwiVW5leHBlY3RlZCBzdGF0ZTogXCIrci5iKX19dmFyIHI9dGhpcztudWxsPT10aGlzLmE/cy5iKG8pOnRoaXMuYS5wdXNoKG8pfSx0LnJlc29sdmU9cix0LnJlamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IHQoKGZ1bmN0aW9uKHQsbyl7byhlKX0pKX0sdC5yYWNlPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdCgoZnVuY3Rpb24odCxvKXtmb3IodmFyIG49YyhlKSxzPW4ubmV4dCgpOyFzLmRvbmU7cz1uLm5leHQoKSlyKHMudmFsdWUpLkYodCxvKX0pKX0sdC5hbGw9ZnVuY3Rpb24oZSl7dmFyIG89YyhlKSxuPW8ubmV4dCgpO3JldHVybiBuLmRvbmU/cihbXSk6bmV3IHQoKGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gcyh0KXtyZXR1cm4gZnVuY3Rpb24obyl7aVt0XT1vLDA9PS0tYSYmZShpKX19dmFyIGk9W10sYT0wO2Rve2kucHVzaCh2b2lkIDApLGErKyxyKG4udmFsdWUpLkYocyhpLmxlbmd0aC0xKSx0KSxuPW8ubmV4dCgpfXdoaWxlKCFuLmRvbmUpfSkpfSx0fSkpO3ZhciBFPUV8fHt9LG09dGhpc3x8c2VsZjtmdW5jdGlvbiBUKGUsdCl7ZT1lLnNwbGl0KFwiLlwiKSx0PXR8fG07Zm9yKHZhciBvPTA7bzxlLmxlbmd0aDtvKyspaWYobnVsbD09KHQ9dFtlW29dXSkpcmV0dXJuIG51bGw7cmV0dXJuIHR9ZnVuY3Rpb24gUigpe31mdW5jdGlvbiBTKGUpe3ZhciB0PXR5cGVvZiBlO3JldHVyblwib2JqZWN0XCI9PXQmJm51bGwhPWV8fFwiZnVuY3Rpb25cIj09dH12YXIgQT1cImNsb3N1cmVfdWlkX1wiKygxZTkqTWF0aC5yYW5kb20oKT4+PjApLE09MDtmdW5jdGlvbiBJKGUsdCxvKXtyZXR1cm4gZS5jYWxsLmFwcGx5KGUuYmluZCxhcmd1bWVudHMpfWZ1bmN0aW9uIE8oZSx0LG8pe2lmKCFlKXRocm93IEVycm9yKCk7aWYoMjxhcmd1bWVudHMubGVuZ3RoKXt2YXIgcj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMik7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtyZXR1cm4gQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuYXBwbHkobyxyKSxlLmFwcGx5KHQsbyl9fXJldHVybiBmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHQsYXJndW1lbnRzKX19ZnVuY3Rpb24gdyhlLHQsbyl7cmV0dXJuKHc9RnVuY3Rpb24ucHJvdG90eXBlLmJpbmQmJi0xIT1GdW5jdGlvbi5wcm90b3R5cGUuYmluZC50b1N0cmluZygpLmluZGV4T2YoXCJuYXRpdmUgY29kZVwiKT9JOk8pLmFwcGx5KG51bGwsYXJndW1lbnRzKX1mdW5jdGlvbiBEKGUsdCl7ZnVuY3Rpb24gbygpe31vLnByb3RvdHlwZT10LnByb3RvdHlwZSxlLk89dC5wcm90b3R5cGUsZS5wcm90b3R5cGU9bmV3IG8sZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZX1mdW5jdGlvbiBGKCl7dGhpcy5hPXt9fWZ1bmN0aW9uIEMoZSx0LG8scil7dGhpcy5mPWUsdGhpcy5jPXQsdGhpcy5iPW8sdGhpcy5hPXJ9ZnVuY3Rpb24gTChlLHQsbyxyKXtvPXZvaWQgMD09PW8/e306byx0aGlzLmM9ZSx0aGlzLmE9byx0aGlzLmI9dCx0aGlzLmY9dm9pZCAwPT09cj9udWxsOnJ9ZnVuY3Rpb24gTihlLHQsbyl7bz12b2lkIDA9PT1vP3t9Om87dmFyIHI9dm9pZCAwPT09cj9uZXcgRjpyO3JldHVybiBuZXcgQyh0LGUsbyxyKX1mdW5jdGlvbiBqKGUsdCxvKXtvPXZvaWQgMD09PW8/e306byx0PUVycm9yLmNhbGwodGhpcyx0KSx0aGlzLm1lc3NhZ2U9dC5tZXNzYWdlLFwic3RhY2tcImluIHQmJih0aGlzLnN0YWNrPXQuc3RhY2spLHRoaXMuY29kZT1lLHRoaXMubWV0YWRhdGE9b31mdW5jdGlvbiBCKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIFUoZSl7aWYoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyxVKTtlbHNle3ZhciB0PUVycm9yKCkuc3RhY2s7dCYmKHRoaXMuc3RhY2s9dCl9ZSYmKHRoaXMubWVzc2FnZT1TdHJpbmcoZSkpfWZ1bmN0aW9uIFAoZSx0KXtmb3IodmFyIG89XCJcIixyPShlPWUuc3BsaXQoXCIlc1wiKSkubGVuZ3RoLTEsbj0wO248cjtuKyspbys9ZVtuXSsobjx0Lmxlbmd0aD90W25dOlwiJXNcIik7VS5jYWxsKHRoaXMsbytlW3JdKX1mdW5jdGlvbiBXKCl7dGhpcy5sPW51bGwsdGhpcy5pPVtdLHRoaXMubT0wLHRoaXMuYj1WLHRoaXMuZj10aGlzLmE9dGhpcy5oPTAsdGhpcy5jPW51bGwsdGhpcy5nPTB9Ri5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmFbZV19LEYucHJvdG90eXBlLkc9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5hKX0sQy5wcm90b3R5cGUuZ2V0UmVxdWVzdE1lc3NhZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mfSxDLnByb3RvdHlwZS5nZXRNZXRob2REZXNjcmlwdG9yPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY30sQy5wcm90b3R5cGUuZ2V0TWV0YWRhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxDLnByb3RvdHlwZS5nZXRDYWxsT3B0aW9ucz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LEwucHJvdG90eXBlLmdldFJlc3BvbnNlTWVzc2FnZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN9LEwucHJvdG90eXBlLmdldE1ldGFkYXRhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sTC5wcm90b3R5cGUuZ2V0TWV0aG9kRGVzY3JpcHRvcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ9LEwucHJvdG90eXBlLmdldFN0YXR1cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZ9LF8oaixFcnJvciksai5wcm90b3R5cGUubmFtZT1cIlJwY0Vycm9yXCIsQi5wcm90b3R5cGUub249ZnVuY3Rpb24oZSx0KXtyZXR1cm5cImRhdGFcIj09ZXx8XCJlcnJvclwiPT1lP3RoaXM6dGhpcy5hLm9uKGUsdCl9LEIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuYS5yZW1vdmVMaXN0ZW5lcihlLHQpfSxCLnByb3RvdHlwZS5jYW5jZWw9ZnVuY3Rpb24oKXt0aGlzLmEuY2FuY2VsKCl9LEQoVSxFcnJvciksVS5wcm90b3R5cGUubmFtZT1cIkN1c3RvbUVycm9yXCIsRChQLFUpLFAucHJvdG90eXBlLm5hbWU9XCJBc3NlcnRpb25FcnJvclwiO3ZhciBWPTAseD0xMjg7ZnVuY3Rpb24geihlLHQsbyxyKXt0aHJvdyBlLmI9MyxlLmw9XCJUaGUgc3RyZWFtIGlzIGJyb2tlbiBAXCIrZS5tK1wiL1wiK28rXCIuIEVycm9yOiBcIityK1wiLiBXaXRoIGlucHV0OlxcblwiK3QsRXJyb3IoZS5sKX12YXIgayxIPUFycmF5LnByb3RvdHlwZS5pbmRleE9mP2Z1bmN0aW9uKGUsdCl7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoZSx0LHZvaWQgMCl9OmZ1bmN0aW9uKGUsdCl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuXCJzdHJpbmdcIiE9dHlwZW9mIHR8fDEhPXQubGVuZ3RoPy0xOmUuaW5kZXhPZih0LDApO2Zvcih2YXIgbz0wO288ZS5sZW5ndGg7bysrKWlmKG8gaW4gZSYmZVtvXT09PXQpcmV0dXJuIG87cmV0dXJuLTF9LEc9U3RyaW5nLnByb3RvdHlwZS50cmltP2Z1bmN0aW9uKGUpe3JldHVybiBlLnRyaW0oKX06ZnVuY3Rpb24oZSl7cmV0dXJuL15bXFxzXFx4YTBdKihbXFxzXFxTXSo/KVtcXHNcXHhhMF0qJC8uZXhlYyhlKVsxXX07ZnVuY3Rpb24gcShlLHQpe3JldHVybi0xIT1lLmluZGV4T2YodCl9ZnVuY3Rpb24gWShlLHQpe3JldHVybiBlPHQ/LTE6ZT50PzE6MH1lOnt2YXIgUT1tLm5hdmlnYXRvcjtpZihRKXt2YXIgSz1RLnVzZXJBZ2VudDtpZihLKXtrPUs7YnJlYWsgZX19az1cIlwifXZhciAkPVwiY29uc3RydWN0b3IgaGFzT3duUHJvcGVydHkgaXNQcm90b3R5cGVPZiBwcm9wZXJ0eUlzRW51bWVyYWJsZSB0b0xvY2FsZVN0cmluZyB0b1N0cmluZyB2YWx1ZU9mXCIuc3BsaXQoXCIgXCIpO2Z1bmN0aW9uIFgoZSl7dmFyIHQ9MTtlPWUuc3BsaXQoXCI6XCIpO2Zvcih2YXIgbz1bXTswPHQmJmUubGVuZ3RoOylvLnB1c2goZS5zaGlmdCgpKSx0LS07cmV0dXJuIGUubGVuZ3RoJiZvLnB1c2goZS5qb2luKFwiOlwiKSksb31mdW5jdGlvbiBaKGUpe3JldHVybiBaW1wiIFwiXShlKSxlfVpbXCIgXCJdPVI7dmFyIEosZWUsdGU9cShrLFwiT3BlcmFcIiksb2U9cShrLFwiVHJpZGVudFwiKXx8cShrLFwiTVNJRVwiKSxyZT1xKGssXCJFZGdlXCIpLG5lPXEoayxcIkdlY2tvXCIpJiYhKHEoay50b0xvd2VyQ2FzZSgpLFwid2Via2l0XCIpJiYhcShrLFwiRWRnZVwiKSkmJiEocShrLFwiVHJpZGVudFwiKXx8cShrLFwiTVNJRVwiKSkmJiFxKGssXCJFZGdlXCIpLHNlPXEoay50b0xvd2VyQ2FzZSgpLFwid2Via2l0XCIpJiYhcShrLFwiRWRnZVwiKTtlOnt2YXIgaWU9XCJcIixhZT0oZWU9ayxuZT8vcnY6KFteXFwpO10rKShcXCl8OykvLmV4ZWMoZWUpOnJlPy9FZGdlXFwvKFtcXGRcXC5dKykvLmV4ZWMoZWUpOm9lPy9cXGIoPzpNU0lFfHJ2KVs6IF0oW15cXCk7XSspKFxcKXw7KS8uZXhlYyhlZSk6c2U/L1dlYktpdFxcLyhcXFMrKS8uZXhlYyhlZSk6dGU/Lyg/OlZlcnNpb24pWyBcXC9dPyhcXFMrKS8uZXhlYyhlZSk6dm9pZCAwKTtpZihhZSYmKGllPWFlP2FlWzFdOlwiXCIpLG9lKXt2YXIgZ2UscGU9bS5kb2N1bWVudDtpZihudWxsIT0oZ2U9cGU/cGUuZG9jdW1lbnRNb2RlOnZvaWQgMCkmJmdlPnBhcnNlRmxvYXQoaWUpKXtKPVN0cmluZyhnZSk7YnJlYWsgZX19Sj1pZX12YXIgbGU9e307ZnVuY3Rpb24gdWUoKXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9bGU7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LDkpP3RbOV06dFs5XT1mdW5jdGlvbigpe2Zvcih2YXIgZT0wLHQ9RyhTdHJpbmcoSikpLnNwbGl0KFwiLlwiKSxvPUcoXCI5XCIpLnNwbGl0KFwiLlwiKSxyPU1hdGgubWF4KHQubGVuZ3RoLG8ubGVuZ3RoKSxuPTA7MD09ZSYmbjxyO24rKyl7dmFyIHM9dFtuXXx8XCJcIixpPW9bbl18fFwiXCI7ZG97aWYocz0vKFxcZCopKFxcRCopKC4qKS8uZXhlYyhzKXx8W1wiXCIsXCJcIixcIlwiLFwiXCJdLGk9LyhcXGQqKShcXEQqKSguKikvLmV4ZWMoaSl8fFtcIlwiLFwiXCIsXCJcIixcIlwiXSwwPT1zWzBdLmxlbmd0aCYmMD09aVswXS5sZW5ndGgpYnJlYWs7ZT1ZKDA9PXNbMV0ubGVuZ3RoPzA6cGFyc2VJbnQoc1sxXSwxMCksMD09aVsxXS5sZW5ndGg/MDpwYXJzZUludChpWzFdLDEwKSl8fFkoMD09c1syXS5sZW5ndGgsMD09aVsyXS5sZW5ndGgpfHxZKHNbMl0saVsyXSkscz1zWzNdLGk9aVszXX13aGlsZSgwPT1lKX1yZXR1cm4gMDw9ZX0oKX0oKX1mdW5jdGlvbiBjZSgpezAhPWRlJiYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMsQSkmJnRoaXNbQV18fCh0aGlzW0FdPSsrTSkpLHRoaXMuSz10aGlzLkt9dmFyIGRlPTA7Y2UucHJvdG90eXBlLks9ITE7dmFyIHllPU9iamVjdC5mcmVlemV8fGZ1bmN0aW9uKGUpe3JldHVybiBlfTtmdW5jdGlvbiBmZShlLHQpe3RoaXMudHlwZT1lLHRoaXMuYT10aGlzLnRhcmdldD10LHRoaXMuZGVmYXVsdFByZXZlbnRlZD0hMX1mZS5wcm90b3R5cGUuYj1mdW5jdGlvbigpe3RoaXMuZGVmYXVsdFByZXZlbnRlZD0hMH07dmFyIGJlPWZ1bmN0aW9uKCl7aWYoIW0uYWRkRXZlbnRMaXN0ZW5lcnx8IU9iamVjdC5kZWZpbmVQcm9wZXJ0eSlyZXR1cm4hMTt2YXIgZT0hMSx0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSxcInBhc3NpdmVcIix7Z2V0OmZ1bmN0aW9uKCl7ZT0hMH19KTt0cnl7bS5hZGRFdmVudExpc3RlbmVyKFwidGVzdFwiLFIsdCksbS5yZW1vdmVFdmVudExpc3RlbmVyKFwidGVzdFwiLFIsdCl9Y2F0Y2goZSl7fXJldHVybiBlfSgpO2Z1bmN0aW9uIGhlKGUsdCl7aWYoZmUuY2FsbCh0aGlzLGU/ZS50eXBlOlwiXCIpLHRoaXMucmVsYXRlZFRhcmdldD10aGlzLmE9dGhpcy50YXJnZXQ9bnVsbCx0aGlzLmJ1dHRvbj10aGlzLnNjcmVlblk9dGhpcy5zY3JlZW5YPXRoaXMuY2xpZW50WT10aGlzLmNsaWVudFg9MCx0aGlzLmtleT1cIlwiLHRoaXMubWV0YUtleT10aGlzLnNoaWZ0S2V5PXRoaXMuYWx0S2V5PXRoaXMuY3RybEtleT0hMSx0aGlzLnBvaW50ZXJJZD0wLHRoaXMucG9pbnRlclR5cGU9XCJcIix0aGlzLmM9bnVsbCxlKXt2YXIgbz10aGlzLnR5cGU9ZS50eXBlLHI9ZS5jaGFuZ2VkVG91Y2hlcyYmZS5jaGFuZ2VkVG91Y2hlcy5sZW5ndGg/ZS5jaGFuZ2VkVG91Y2hlc1swXTpudWxsO2lmKHRoaXMudGFyZ2V0PWUudGFyZ2V0fHxlLnNyY0VsZW1lbnQsdGhpcy5hPXQsdD1lLnJlbGF0ZWRUYXJnZXQpe2lmKG5lKXtlOnt0cnl7Wih0Lm5vZGVOYW1lKTt2YXIgbj0hMDticmVhayBlfWNhdGNoKGUpe31uPSExfW58fCh0PW51bGwpfX1lbHNlXCJtb3VzZW92ZXJcIj09bz90PWUuZnJvbUVsZW1lbnQ6XCJtb3VzZW91dFwiPT1vJiYodD1lLnRvRWxlbWVudCk7dGhpcy5yZWxhdGVkVGFyZ2V0PXQscj8odGhpcy5jbGllbnRYPXZvaWQgMCE9PXIuY2xpZW50WD9yLmNsaWVudFg6ci5wYWdlWCx0aGlzLmNsaWVudFk9dm9pZCAwIT09ci5jbGllbnRZP3IuY2xpZW50WTpyLnBhZ2VZLHRoaXMuc2NyZWVuWD1yLnNjcmVlblh8fDAsdGhpcy5zY3JlZW5ZPXIuc2NyZWVuWXx8MCk6KHRoaXMuY2xpZW50WD12b2lkIDAhPT1lLmNsaWVudFg/ZS5jbGllbnRYOmUucGFnZVgsdGhpcy5jbGllbnRZPXZvaWQgMCE9PWUuY2xpZW50WT9lLmNsaWVudFk6ZS5wYWdlWSx0aGlzLnNjcmVlblg9ZS5zY3JlZW5YfHwwLHRoaXMuc2NyZWVuWT1lLnNjcmVlbll8fDApLHRoaXMuYnV0dG9uPWUuYnV0dG9uLHRoaXMua2V5PWUua2V5fHxcIlwiLHRoaXMuY3RybEtleT1lLmN0cmxLZXksdGhpcy5hbHRLZXk9ZS5hbHRLZXksdGhpcy5zaGlmdEtleT1lLnNoaWZ0S2V5LHRoaXMubWV0YUtleT1lLm1ldGFLZXksdGhpcy5wb2ludGVySWQ9ZS5wb2ludGVySWR8fDAsdGhpcy5wb2ludGVyVHlwZT1cInN0cmluZ1wiPT10eXBlb2YgZS5wb2ludGVyVHlwZT9lLnBvaW50ZXJUeXBlOl9lW2UucG9pbnRlclR5cGVdfHxcIlwiLHRoaXMuYz1lLGUuZGVmYXVsdFByZXZlbnRlZCYmaGUuTy5iLmNhbGwodGhpcyl9fUQoaGUsZmUpO3ZhciBfZT15ZSh7MjpcInRvdWNoXCIsMzpcInBlblwiLDQ6XCJtb3VzZVwifSk7aGUucHJvdG90eXBlLmI9ZnVuY3Rpb24oKXtoZS5PLmIuY2FsbCh0aGlzKTt2YXIgZT10aGlzLmM7ZS5wcmV2ZW50RGVmYXVsdD9lLnByZXZlbnREZWZhdWx0KCk6ZS5yZXR1cm5WYWx1ZT0hMX07dmFyIHZlPVwiY2xvc3VyZV9saXN0ZW5hYmxlX1wiKygxZTYqTWF0aC5yYW5kb20oKXwwKSxFZT0wO2Z1bmN0aW9uIG1lKGUsdCxvLHIsbil7dGhpcy5saXN0ZW5lcj1lLHRoaXMucHJveHk9bnVsbCx0aGlzLnNyYz10LHRoaXMudHlwZT1vLHRoaXMuY2FwdHVyZT0hIXIsdGhpcy5IPW4sdGhpcy5rZXk9KytFZSx0aGlzLkE9dGhpcy5EPSExfWZ1bmN0aW9uIFRlKGUpe2UuQT0hMCxlLmxpc3RlbmVyPW51bGwsZS5wcm94eT1udWxsLGUuc3JjPW51bGwsZS5IPW51bGx9ZnVuY3Rpb24gUmUoZSl7dGhpcy5zcmM9ZSx0aGlzLmE9e30sdGhpcy5iPTB9ZnVuY3Rpb24gU2UoZSx0KXt2YXIgbz10LnR5cGU7aWYobyBpbiBlLmEpe3ZhciByLG49ZS5hW29dLHM9SChuLHQpOyhyPTA8PXMpJiZBcnJheS5wcm90b3R5cGUuc3BsaWNlLmNhbGwobixzLDEpLHImJihUZSh0KSwwPT1lLmFbb10ubGVuZ3RoJiYoZGVsZXRlIGUuYVtvXSxlLmItLSkpfX1mdW5jdGlvbiBBZShlLHQsbyxyKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoOysrbil7dmFyIHM9ZVtuXTtpZighcy5BJiZzLmxpc3RlbmVyPT10JiZzLmNhcHR1cmU9PSEhbyYmcy5IPT1yKXJldHVybiBufXJldHVybi0xfVJlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSx0LG8scixuKXt2YXIgcz1lLnRvU3RyaW5nKCk7KGU9dGhpcy5hW3NdKXx8KGU9dGhpcy5hW3NdPVtdLHRoaXMuYisrKTt2YXIgaT1BZShlLHQscixuKTtyZXR1cm4tMTxpPyh0PWVbaV0sb3x8KHQuRD0hMSkpOigodD1uZXcgbWUodCx0aGlzLnNyYyxzLCEhcixuKSkuRD1vLGUucHVzaCh0KSksdH0sUmUucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbihlLHQsbyxyKXtpZighKChlPWUudG9TdHJpbmcoKSlpbiB0aGlzLmEpKXJldHVybiExO3ZhciBuPXRoaXMuYVtlXTtyZXR1cm4tMTwodD1BZShuLHQsbyxyKSkmJihUZShuW3RdKSxBcnJheS5wcm90b3R5cGUuc3BsaWNlLmNhbGwobix0LDEpLDA9PW4ubGVuZ3RoJiYoZGVsZXRlIHRoaXMuYVtlXSx0aGlzLmItLSksITApfTt2YXIgTWU9XCJjbG9zdXJlX2xtX1wiKygxZTYqTWF0aC5yYW5kb20oKXwwKSxJZT17fTtmdW5jdGlvbiBPZShlLHQsbyxyLG4pe2lmKHImJnIub25jZSlEZShlLHQsbyxyLG4pO2Vsc2UgaWYoQXJyYXkuaXNBcnJheSh0KSlmb3IodmFyIHM9MDtzPHQubGVuZ3RoO3MrKylPZShlLHRbc10sbyxyLG4pO2Vsc2Ugbz1VZShvKSxlJiZlW3ZlXT9lLmYuYWRkKFN0cmluZyh0KSxvLCExLFMocik/ISFyLmNhcHR1cmU6ISFyLG4pOndlKGUsdCxvLCExLHIsbil9ZnVuY3Rpb24gd2UoZSx0LG8scixuLHMpe2lmKCF0KXRocm93IEVycm9yKFwiSW52YWxpZCBldmVudCB0eXBlXCIpO3ZhciBpPVMobik/ISFuLmNhcHR1cmU6ISFuLGE9amUoZSk7aWYoYXx8KGVbTWVdPWE9bmV3IFJlKGUpKSwhKG89YS5hZGQodCxvLHIsaSxzKSkucHJveHkpaWYocj1mdW5jdGlvbigpe3ZhciBlPU5lO3JldHVybiBmdW5jdGlvbiB0KG8pe3JldHVybiBlLmNhbGwodC5zcmMsdC5saXN0ZW5lcixvKX19KCksby5wcm94eT1yLHIuc3JjPWUsci5saXN0ZW5lcj1vLGUuYWRkRXZlbnRMaXN0ZW5lciliZXx8KG49aSksdm9pZCAwPT09biYmKG49ITEpLGUuYWRkRXZlbnRMaXN0ZW5lcih0LnRvU3RyaW5nKCkscixuKTtlbHNlIGlmKGUuYXR0YWNoRXZlbnQpZS5hdHRhY2hFdmVudChMZSh0LnRvU3RyaW5nKCkpLHIpO2Vsc2V7aWYoIWUuYWRkTGlzdGVuZXJ8fCFlLnJlbW92ZUxpc3RlbmVyKXRocm93IEVycm9yKFwiYWRkRXZlbnRMaXN0ZW5lciBhbmQgYXR0YWNoRXZlbnQgYXJlIHVuYXZhaWxhYmxlLlwiKTtlLmFkZExpc3RlbmVyKHIpfX1mdW5jdGlvbiBEZShlLHQsbyxyLG4pe2lmKEFycmF5LmlzQXJyYXkodCkpZm9yKHZhciBzPTA7czx0Lmxlbmd0aDtzKyspRGUoZSx0W3NdLG8scixuKTtlbHNlIG89VWUobyksZSYmZVt2ZV0/ZS5mLmFkZChTdHJpbmcodCksbywhMCxTKHIpPyEhci5jYXB0dXJlOiEhcixuKTp3ZShlLHQsbywhMCxyLG4pfWZ1bmN0aW9uIEZlKGUsdCxvLHIsbil7aWYoQXJyYXkuaXNBcnJheSh0KSlmb3IodmFyIHM9MDtzPHQubGVuZ3RoO3MrKylGZShlLHRbc10sbyxyLG4pO2Vsc2Ugcj1TKHIpPyEhci5jYXB0dXJlOiEhcixvPVVlKG8pLGUmJmVbdmVdP2UuZi5yZW1vdmUoU3RyaW5nKHQpLG8scixuKTplJiYoZT1qZShlKSkmJih0PWUuYVt0LnRvU3RyaW5nKCldLGU9LTEsdCYmKGU9QWUodCxvLHIsbikpLChvPS0xPGU/dFtlXTpudWxsKSYmQ2UobykpfWZ1bmN0aW9uIENlKGUpe2lmKFwibnVtYmVyXCIhPXR5cGVvZiBlJiZlJiYhZS5BKXt2YXIgdD1lLnNyYztpZih0JiZ0W3ZlXSlTZSh0LmYsZSk7ZWxzZXt2YXIgbz1lLnR5cGUscj1lLnByb3h5O3QucmVtb3ZlRXZlbnRMaXN0ZW5lcj90LnJlbW92ZUV2ZW50TGlzdGVuZXIobyxyLGUuY2FwdHVyZSk6dC5kZXRhY2hFdmVudD90LmRldGFjaEV2ZW50KExlKG8pLHIpOnQuYWRkTGlzdGVuZXImJnQucmVtb3ZlTGlzdGVuZXImJnQucmVtb3ZlTGlzdGVuZXIociksKG89amUodCkpPyhTZShvLGUpLDA9PW8uYiYmKG8uc3JjPW51bGwsdFtNZV09bnVsbCkpOlRlKGUpfX19ZnVuY3Rpb24gTGUoZSl7cmV0dXJuIGUgaW4gSWU/SWVbZV06SWVbZV09XCJvblwiK2V9ZnVuY3Rpb24gTmUoZSx0KXtpZihlLkEpZT0hMDtlbHNle3Q9bmV3IGhlKHQsdGhpcyk7dmFyIG89ZS5saXN0ZW5lcixyPWUuSHx8ZS5zcmM7ZS5EJiZDZShlKSxlPW8uY2FsbChyLHQpfXJldHVybiBlfWZ1bmN0aW9uIGplKGUpe3JldHVybihlPWVbTWVdKWluc3RhbmNlb2YgUmU/ZTpudWxsfXZhciBCZT1cIl9fY2xvc3VyZV9ldmVudHNfZm5fXCIrKDFlOSpNYXRoLnJhbmRvbSgpPj4+MCk7ZnVuY3Rpb24gVWUoZSl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgZT9lOihlW0JlXXx8KGVbQmVdPWZ1bmN0aW9uKHQpe3JldHVybiBlLmhhbmRsZUV2ZW50KHQpfSksZVtCZV0pfWZ1bmN0aW9uIFBlKCl7Y2UuY2FsbCh0aGlzKSx0aGlzLmY9bmV3IFJlKHRoaXMpLHRoaXMuVT10aGlzfWZ1bmN0aW9uIFdlKGUsdCl7ZT1lLlU7dmFyIG89dC50eXBlfHx0O2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0KXQ9bmV3IGZlKHQsZSk7ZWxzZSBpZih0IGluc3RhbmNlb2YgZmUpdC50YXJnZXQ9dC50YXJnZXR8fGU7ZWxzZXt2YXIgcj10OyFmdW5jdGlvbihlLHQpe2Zvcih2YXIgbyxyLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXtmb3IobyBpbiByPWFyZ3VtZW50c1tuXSllW29dPXJbb107Zm9yKHZhciBzPTA7czwkLmxlbmd0aDtzKyspbz0kW3NdLE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLG8pJiYoZVtvXT1yW29dKX19KHQ9bmV3IGZlKG8sZSkscil9VmUoZT10LmE9ZSxvLCEwLHQpLFZlKGUsbywhMSx0KX1mdW5jdGlvbiBWZShlLHQsbyxyKXtpZih0PWUuZi5hW1N0cmluZyh0KV0pe3Q9dC5jb25jYXQoKTtmb3IodmFyIG49ITAscz0wO3M8dC5sZW5ndGg7KytzKXt2YXIgaT10W3NdO2lmKGkmJiFpLkEmJmkuY2FwdHVyZT09byl7dmFyIGE9aS5saXN0ZW5lcixnPWkuSHx8aS5zcmM7aS5EJiZTZShlLmYsaSksbj0hMSE9PWEuY2FsbChnLHIpJiZufX19fWZ1bmN0aW9uIHhlKGUsdCxvKXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBlKW8mJihlPXcoZSxvKSk7ZWxzZXtpZighZXx8XCJmdW5jdGlvblwiIT10eXBlb2YgZS5oYW5kbGVFdmVudCl0aHJvdyBFcnJvcihcIkludmFsaWQgbGlzdGVuZXIgYXJndW1lbnRcIik7ZT13KGUuaGFuZGxlRXZlbnQsZSl9cmV0dXJuIDIxNDc0ODM2NDc8TnVtYmVyKHQpPy0xOm0uc2V0VGltZW91dChlLHR8fDApfWZ1bmN0aW9uIHplKGUsdCl7dGhpcy5uYW1lPWUsdGhpcy52YWx1ZT10fUQoUGUsY2UpLFBlLnByb3RvdHlwZVt2ZV09ITAsUGUucHJvdG90eXBlLmFkZEV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24oZSx0LG8scil7T2UodGhpcyxlLHQsbyxyKX0sUGUucHJvdG90eXBlLnJlbW92ZUV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24oZSx0LG8scil7RmUodGhpcyxlLHQsbyxyKX0semUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmFtZX07dmFyIGtlLEhlLEdlLHFlPW5ldyB6ZShcIk9GRlwiLDEvMCksWWU9bmV3IHplKFwiU0VWRVJFXCIsMWUzKSxRZT1uZXcgemUoXCJDT05GSUdcIiw3MDApLEtlPW5ldyB6ZShcIkZJTkVcIiw1MDApO2Z1bmN0aW9uICRlKCl7dGhpcy5jbGVhcigpfWZ1bmN0aW9uIFhlKGUsdCxvKXt0aGlzLnJlc2V0KGV8fHFlLHQsbyx2b2lkIDAsdm9pZCAwKX1mdW5jdGlvbiBaZShlLHQpe3RoaXMuYT1udWxsLHRoaXMuZj1bXSx0aGlzLmI9KHZvaWQgMD09PXQ/bnVsbDp0KXx8bnVsbCx0aGlzLmM9W10sdGhpcy5nPXthOmZ1bmN0aW9uKCl7cmV0dXJuIGV9fX1mdW5jdGlvbiBKZShlKXtyZXR1cm4gZS5hP2UuYTplLmI/SmUoZS5iKTooZnVuY3Rpb24oZSx0KXt0aHJvdyBuZXcgUChcIkZhaWx1cmVcIisoZT9cIjogXCIrZTpcIlwiKSxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkpfShcIlJvb3QgbG9nZ2VyIGhhcyBubyBsZXZlbCBzZXQuXCIpLHFlKX1mdW5jdGlvbiBldCgpe3RoaXMuZW50cmllcz17fTt2YXIgZT1uZXcgWmUoXCJcIik7ZS5hPVFlLHRoaXMuZW50cmllc1tcIlwiXT1lfWZ1bmN0aW9uIHR0KGUsdCxvKXt2YXIgcj1lLmVudHJpZXNbdF07aWYocilyZXR1cm4gdm9pZCAwIT09byYmKHIuYT1vKSxyO3I9dHQoZSx0LnN1YnN0cigwLHQubGFzdEluZGV4T2YoXCIuXCIpKSk7dmFyIG49bmV3IFplKHQscik7cmV0dXJuIGUuZW50cmllc1t0XT1uLHIuYy5wdXNoKG4pLHZvaWQgMCE9PW8mJihuLmE9byksbn1mdW5jdGlvbiBvdCgpe3JldHVybiBIZXx8KEhlPW5ldyBldCksSGV9ZnVuY3Rpb24gcnQoZSx0LG8pe3ZhciByOyhyPWUpJiYocj1lJiZ0KSYmKHI9KHI9dC52YWx1ZSk+PShlP0plKHR0KG90KCksZS5hKCkpKTpxZSkudmFsdWUpLHImJih0PXR8fHFlLHI9dHQob3QoKSxlLmEoKSksXCJmdW5jdGlvblwiPT10eXBlb2YgbyYmKG89bygpKSxrZXx8KGtlPW5ldyAkZSksZnVuY3Rpb24oZSx0KXtmb3IoO2U7KWUuZi5mb3JFYWNoKChmdW5jdGlvbihlKXtlKHQpfSkpLGU9ZS5ifShyLGU9bmV3IFhlKHQsbyxlLmEoKSkpKX1mdW5jdGlvbiBudChlLHQpe2UmJnJ0KGUsS2UsdCl9ZnVuY3Rpb24gc3QoKXt9ZnVuY3Rpb24gaXQoZSl7dmFyIHQ7cmV0dXJuKHQ9ZS5hKXx8KHQ9e30scHQoZSkmJih0WzBdPSEwLHRbMV09ITApLHQ9ZS5hPXQpLHR9ZnVuY3Rpb24gYXQoKXt9ZnVuY3Rpb24gZ3QoZSl7cmV0dXJuKGU9cHQoZSkpP25ldyBBY3RpdmVYT2JqZWN0KGUpOm5ldyBYTUxIdHRwUmVxdWVzdH1mdW5jdGlvbiBwdChlKXtpZighZS5iJiZcInVuZGVmaW5lZFwiPT10eXBlb2YgWE1MSHR0cFJlcXVlc3QmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBBY3RpdmVYT2JqZWN0KXtmb3IodmFyIHQ9W1wiTVNYTUwyLlhNTEhUVFAuNi4wXCIsXCJNU1hNTDIuWE1MSFRUUC4zLjBcIixcIk1TWE1MMi5YTUxIVFRQXCIsXCJNaWNyb3NvZnQuWE1MSFRUUFwiXSxvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciByPXRbb107dHJ5e3JldHVybiBuZXcgQWN0aXZlWE9iamVjdChyKSxlLmI9cn1jYXRjaChlKXt9fXRocm93IEVycm9yKFwiQ291bGQgbm90IGNyZWF0ZSBBY3RpdmVYT2JqZWN0LiBBY3RpdmVYIG1pZ2h0IGJlIGRpc2FibGVkLCBvciBNU1hNTCBtaWdodCBub3QgYmUgaW5zdGFsbGVkXCIpfXJldHVybiBlLmJ9ZnVuY3Rpb24gbHQoZSx0KXt0aGlzLmI9ZVttLlN5bWJvbC5pdGVyYXRvcl0oKSx0aGlzLmM9dCx0aGlzLmY9MH0kZS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt9LFhlLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe30sc3QucHJvdG90eXBlLmE9bnVsbCxEKGF0LHN0KSxHZT1uZXcgYXQsYSgpLHUoKSxsdC5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxsdC5wcm90b3R5cGUubmV4dD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuYi5uZXh0KCk7cmV0dXJue3ZhbHVlOmUuZG9uZT92b2lkIDA6dGhpcy5jLmNhbGwodm9pZCAwLGUudmFsdWUsdGhpcy5mKyspLGRvbmU6ZS5kb25lfX0sYSgpLHUoKSxhKCksdSgpO3ZhciB1dD1cIlN0b3BJdGVyYXRpb25cImluIG0/bS5TdG9wSXRlcmF0aW9uOnttZXNzYWdlOlwiU3RvcEl0ZXJhdGlvblwiLHN0YWNrOlwiXCJ9O2Z1bmN0aW9uIGN0KCl7fWZ1bmN0aW9uIGR0KGUpe2lmKGUgaW5zdGFuY2VvZiBmdHx8ZSBpbnN0YW5jZW9mIGJ0fHxlIGluc3RhbmNlb2YgaHQpcmV0dXJuIGU7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgZS5uZXh0KXJldHVybiBuZXcgZnQoKGZ1bmN0aW9uKCl7cmV0dXJuIHl0KGUpfSkpO2lmKGEoKSx1KCksXCJmdW5jdGlvblwiPT10eXBlb2YgZVtTeW1ib2wuaXRlcmF0b3JdKXJldHVybiBhKCksdSgpLG5ldyBmdCgoZnVuY3Rpb24oKXtyZXR1cm4gZVtTeW1ib2wuaXRlcmF0b3JdKCl9KSk7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgZS51KXJldHVybiBuZXcgZnQoKGZ1bmN0aW9uKCl7cmV0dXJuIHl0KGUudSgpKX0pKTt0aHJvdyBFcnJvcihcIk5vdCBhbiBpdGVyYXRvciBvciBpdGVyYWJsZS5cIil9ZnVuY3Rpb24geXQoZSl7aWYoIShlIGluc3RhbmNlb2YgY3QpKXJldHVybiBlO3ZhciB0PSExO3JldHVybntuZXh0OmZ1bmN0aW9uKCl7Zm9yKHZhciBvOyF0Oyl0cnl7bz1lLmEoKTticmVha31jYXRjaChlKXtpZihlIT09dXQpdGhyb3cgZTt0PSEwfXJldHVybnt2YWx1ZTpvLGRvbmU6dH19fX1mdW5jdGlvbiBmdChlKXt0aGlzLmI9ZX1mdW5jdGlvbiBidChlKXt0aGlzLmI9ZX1mdW5jdGlvbiBodChlKXtmdC5jYWxsKHRoaXMsKGZ1bmN0aW9uKCl7cmV0dXJuIGV9KSksdGhpcy5mPWV9ZnVuY3Rpb24gX3QoZSx0KXt0aGlzLm89e30sdGhpcy5qPVtdLHRoaXMuQj10aGlzLnNpemU9MDt2YXIgbz1hcmd1bWVudHMubGVuZ3RoO2lmKDE8byl7aWYobyUyKXRocm93IEVycm9yKFwiVW5ldmVuIG51bWJlciBvZiBhcmd1bWVudHNcIik7Zm9yKHZhciByPTA7cjxvO3IrPTIpdGhpcy5zZXQoYXJndW1lbnRzW3JdLGFyZ3VtZW50c1tyKzFdKX1lbHNlIGUmJnRoaXMuYWRkQWxsKGUpfWZ1bmN0aW9uIHZ0KGUpe2lmKGUuc2l6ZSE9ZS5qLmxlbmd0aCl7Zm9yKHZhciB0PTAsbz0wO3Q8ZS5qLmxlbmd0aDspe3ZhciByPWUualt0XTtFdChlLm8scikmJihlLmpbbysrXT1yKSx0Kyt9ZS5qLmxlbmd0aD1vfWlmKGUuc2l6ZSE9ZS5qLmxlbmd0aCl7dmFyIG49e307Zm9yKG89dD0wO3Q8ZS5qLmxlbmd0aDspRXQobixyPWUualt0XSl8fChlLmpbbysrXT1yLG5bcl09MSksdCsrO2Uuai5sZW5ndGg9b319ZnVuY3Rpb24gRXQoZSx0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCl9Y3QucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24oKXtyZXR1cm4gY3QucHJvdG90eXBlLmEuY2FsbCh0aGlzKX0sY3QucHJvdG90eXBlLmE9ZnVuY3Rpb24oKXt0aHJvdyB1dH0sY3QucHJvdG90eXBlLnU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sYSgpLHUoKSxmdC5wcm90b3R5cGUudT1mdW5jdGlvbigpe3JldHVybiBuZXcgYnQodGhpcy5iKCkpfSxmdC5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiBuZXcgaHQodGhpcy5iKCkpfSxmdC5wcm90b3R5cGUuYz1mdW5jdGlvbigpe3JldHVybiBuZXcgaHQodGhpcy5iKCkpfSxhKCksdSgpLF8oYnQsY3QpLGJ0LnByb3RvdHlwZS5hPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5iLm5leHQoKTtpZihlLmRvbmUpdGhyb3cgdXQ7cmV0dXJuIGUudmFsdWV9LGJ0LnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIGJ0LnByb3RvdHlwZS5hLmNhbGwodGhpcyl9LGJ0LnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBodCh0aGlzLmIpfSxidC5wcm90b3R5cGUuYz1mdW5jdGlvbigpe3JldHVybiBuZXcgaHQodGhpcy5iKX0sXyhodCxmdCksaHQucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mLm5leHQoKX0sKHI9X3QucHJvdG90eXBlKS5HPWZ1bmN0aW9uKCl7cmV0dXJuIHZ0KHRoaXMpLHRoaXMuai5jb25jYXQoKX0sci5oYXM9ZnVuY3Rpb24oZSl7cmV0dXJuIEV0KHRoaXMubyxlKX0sci5jbGVhcj1mdW5jdGlvbigpe3RoaXMubz17fSx0aGlzLkI9dGhpcy5zaXplPXRoaXMuai5sZW5ndGg9MH0sci5yZW1vdmU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZGVsZXRlKGUpfSxyLmRlbGV0ZT1mdW5jdGlvbihlKXtyZXR1cm4hIUV0KHRoaXMubyxlKSYmKGRlbGV0ZSB0aGlzLm9bZV0sLS10aGlzLnNpemUsdGhpcy5CKyssdGhpcy5qLmxlbmd0aD4yKnRoaXMuc2l6ZSYmdnQodGhpcyksITApfSxyLmdldD1mdW5jdGlvbihlLHQpe3JldHVybiBFdCh0aGlzLm8sZSk/dGhpcy5vW2VdOnR9LHIuc2V0PWZ1bmN0aW9uKGUsdCl7RXQodGhpcy5vLGUpfHwodGhpcy5zaXplKz0xLHRoaXMuai5wdXNoKGUpLHRoaXMuQisrKSx0aGlzLm9bZV09dH0sci5hZGRBbGw9ZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIF90KWZvcih2YXIgdD1lLkcoKSxvPTA7bzx0Lmxlbmd0aDtvKyspdGhpcy5zZXQodFtvXSxlLmdldCh0W29dKSk7ZWxzZSBmb3IodCBpbiBlKXRoaXMuc2V0KHQsZVt0XSl9LHIuZm9yRWFjaD1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbz10aGlzLkcoKSxyPTA7cjxvLmxlbmd0aDtyKyspe3ZhciBuPW9bcl0scz10aGlzLmdldChuKTtlLmNhbGwodCxzLG4sdGhpcyl9fSxyLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBfdCh0aGlzKX0sci5rZXlzPWZ1bmN0aW9uKCl7cmV0dXJuIGR0KHRoaXMudSghMCkpLmMoKX0sci52YWx1ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gZHQodGhpcy51KCExKSkuYygpfSxyLmVudHJpZXM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiBmdW5jdGlvbihlLHQpe3JldHVybiBuZXcgbHQoZSx0KX0odGhpcy5rZXlzKCksKGZ1bmN0aW9uKHQpe3JldHVyblt0LGUuZ2V0KHQpXX0pKX0sci51PWZ1bmN0aW9uKGUpe3Z0KHRoaXMpO3ZhciB0PTAsbz10aGlzLkIscj10aGlzLG49bmV3IGN0O3JldHVybiBuLmE9ZnVuY3Rpb24oKXtpZihvIT1yLkIpdGhyb3cgRXJyb3IoXCJUaGUgbWFwIGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBpdGVyYXRvciB3YXMgY3JlYXRlZFwiKTtpZih0Pj1yLmoubGVuZ3RoKXRocm93IHV0O3ZhciBuPXIualt0KytdO3JldHVybiBlP246ci5vW25dfSxuLm5leHQ9bi5hLmJpbmQobiksbn07dmFyIG10PS9eKD86KFteOi8/Iy5dKyk6KT8oPzpcXC9cXC8oPzooW15cXFxcLz8jXSopQCk/KFteXFxcXC8/I10qPykoPzo6KFswLTldKykpPyg/PVtcXFxcLz8jXXwkKSk/KFtePyNdKyk/KD86XFw/KFteI10qKSk/KD86IyhbXFxzXFxTXSopKT8kLztmdW5jdGlvbiBUdChlKXtQZS5jYWxsKHRoaXMpLHRoaXMuaGVhZGVycz1uZXcgX3QsdGhpcy5DPWV8fG51bGwsdGhpcy5jPSExLHRoaXMuSj10aGlzLmE9bnVsbCx0aGlzLlA9dGhpcy52PVwiXCIsdGhpcy5nPTAsdGhpcy5sPVwiXCIsdGhpcy5pPXRoaXMuTj10aGlzLnM9dGhpcy5MPSExLHRoaXMuaD0wLHRoaXMudz1udWxsLHRoaXMubT1SdCx0aGlzLkk9dGhpcy5NPSExfUQoVHQsUGUpO3ZhciBSdD1cIlwiO1R0LnByb3RvdHlwZS5iPXR0KG90KCksXCJnb29nLm5ldC5YaHJJb1wiLHZvaWQgMCkuZzt2YXIgU3Q9L15odHRwcz8kL2ksQXQ9W1wiUE9TVFwiLFwiUFVUXCJdO2Z1bmN0aW9uIE10KGUsdCl7ZS5jPSExLGUuYSYmKGUuaT0hMCxlLmEuYWJvcnQoKSxlLmk9ITEpLGUubD10LGUuZz01LEl0KGUpLHd0KGUpfWZ1bmN0aW9uIEl0KGUpe2UuTHx8KGUuTD0hMCxXZShlLFwiY29tcGxldGVcIiksV2UoZSxcImVycm9yXCIpKX1mdW5jdGlvbiBPdChlKXtpZihlLmMmJnZvaWQgMCE9PUUpaWYoZS5KWzFdJiY0PT1GdChlKSYmMj09ZS5nZXRTdGF0dXMoKSludChlLmIsTHQoZSxcIkxvY2FsIHJlcXVlc3QgZXJyb3IgZGV0ZWN0ZWQgYW5kIGlnbm9yZWRcIikpO2Vsc2UgaWYoZS5zJiY0PT1GdChlKSl4ZShlLlIsMCxlKTtlbHNlIGlmKFdlKGUsXCJyZWFkeXN0YXRlY2hhbmdlXCIpLDQ9PUZ0KGUpKXtudChlLmIsTHQoZSxcIlJlcXVlc3QgY29tcGxldGVcIikpLGUuYz0hMTt0cnl7dmFyIHQsbz1lLmdldFN0YXR1cygpO2U6c3dpdGNoKG8pe2Nhc2UgMjAwOmNhc2UgMjAxOmNhc2UgMjAyOmNhc2UgMjA0OmNhc2UgMjA2OmNhc2UgMzA0OmNhc2UgMTIyMzp2YXIgcj0hMDticmVhayBlO2RlZmF1bHQ6cj0hMX1pZighKHQ9cikpe3ZhciBuO2lmKG49MD09PW8pe3ZhciBzPVN0cmluZyhlLnYpLm1hdGNoKG10KVsxXXx8bnVsbDtpZighcyYmbS5zZWxmJiZtLnNlbGYubG9jYXRpb24pe3ZhciBpPW0uc2VsZi5sb2NhdGlvbi5wcm90b2NvbDtzPWkuc3Vic3RyKDAsaS5sZW5ndGgtMSl9bj0hU3QudGVzdChzP3MudG9Mb3dlckNhc2UoKTpcIlwiKX10PW59aWYodClXZShlLFwiY29tcGxldGVcIiksV2UoZSxcInN1Y2Nlc3NcIik7ZWxzZXtlLmc9Njt0cnl7dmFyIGE9MjxGdChlKT9lLmEuc3RhdHVzVGV4dDpcIlwifWNhdGNoKHQpe250KGUuYixcIkNhbiBub3QgZ2V0IHN0YXR1czogXCIrdC5tZXNzYWdlKSxhPVwiXCJ9ZS5sPWErXCIgW1wiK2UuZ2V0U3RhdHVzKCkrXCJdXCIsSXQoZSl9fWZpbmFsbHl7d3QoZSl9fX1mdW5jdGlvbiB3dChlKXtpZihlLmEpe0R0KGUpO3ZhciB0PWUuYSxvPWUuSlswXT9SOm51bGw7ZS5hPW51bGwsZS5KPW51bGwsV2UoZSxcInJlYWR5XCIpO3RyeXt0Lm9ucmVhZHlzdGF0ZWNoYW5nZT1vfWNhdGNoKHQpeyhlPWUuYikmJnJ0KGUsWWUsXCJQcm9ibGVtIGVuY291bnRlcmVkIHJlc2V0dGluZyBvbnJlYWR5c3RhdGVjaGFuZ2U6IFwiK3QubWVzc2FnZSl9fX1mdW5jdGlvbiBEdChlKXtlLmEmJmUuSSYmKGUuYS5vbnRpbWVvdXQ9bnVsbCksZS53JiYobS5jbGVhclRpbWVvdXQoZS53KSxlLnc9bnVsbCl9ZnVuY3Rpb24gRnQoZSl7cmV0dXJuIGUuYT9lLmEucmVhZHlTdGF0ZTowfWZ1bmN0aW9uIEN0KGUsdCl7aWYoZS5hJiY0PT1GdChlKSlyZXR1cm4gbnVsbD09PShlPWUuYS5nZXRSZXNwb25zZUhlYWRlcih0KSk/dm9pZCAwOmV9ZnVuY3Rpb24gTHQoZSx0KXtyZXR1cm4gdCtcIiBbXCIrZS5QK1wiIFwiK2UuditcIiBcIitlLmdldFN0YXR1cygpK1wiXVwifShyPVR0LnByb3RvdHlwZSkuVD1mdW5jdGlvbigpe3ZvaWQgMCE9PUUmJnRoaXMuYSYmKHRoaXMubD1cIlRpbWVkIG91dCBhZnRlciBcIit0aGlzLmgrXCJtcywgYWJvcnRpbmdcIix0aGlzLmc9OCxudCh0aGlzLmIsTHQodGhpcyx0aGlzLmwpKSxXZSh0aGlzLFwidGltZW91dFwiKSx0aGlzLmFib3J0KDgpKX0sci5hYm9ydD1mdW5jdGlvbihlKXt0aGlzLmEmJnRoaXMuYyYmKG50KHRoaXMuYixMdCh0aGlzLFwiQWJvcnRpbmdcIikpLHRoaXMuYz0hMSx0aGlzLmk9ITAsdGhpcy5hLmFib3J0KCksdGhpcy5pPSExLHRoaXMuZz1lfHw3LFdlKHRoaXMsXCJjb21wbGV0ZVwiKSxXZSh0aGlzLFwiYWJvcnRcIiksd3QodGhpcykpfSxyLlI9ZnVuY3Rpb24oKXt0aGlzLkt8fCh0aGlzLk58fHRoaXMuc3x8dGhpcy5pP090KHRoaXMpOnRoaXMuVygpKX0sci5XPWZ1bmN0aW9uKCl7T3QodGhpcyl9LHIuZ2V0U3RhdHVzPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiAyPEZ0KHRoaXMpP3RoaXMuYS5zdGF0dXM6LTF9Y2F0Y2goZSl7cmV0dXJuLTF9fTt2YXIgTnQ9e30sanQ9bnVsbDtmdW5jdGlvbiBCdCgpe2lmKCFqdCl7anQ9e307Zm9yKHZhciBlPVwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODlcIi5zcGxpdChcIlwiKSx0PVtcIisvPVwiLFwiKy9cIixcIi1fPVwiLFwiLV8uXCIsXCItX1wiXSxvPTA7NT5vO28rKyl7dmFyIHI9ZS5jb25jYXQodFtvXS5zcGxpdChcIlwiKSk7TnRbb109cjtmb3IodmFyIG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIHM9cltuXTt2b2lkIDA9PT1qdFtzXSYmKGp0W3NdPW4pfX19fXZhciBVdD1bXCJjb250ZW50LXR5cGVcIixcImdycGMtc3RhdHVzXCIsXCJncnBjLW1lc3NhZ2VcIl07ZnVuY3Rpb24gUHQoZSl7dGhpcy5hPWUuWix0aGlzLm09bnVsbCx0aGlzLmI9W10sdGhpcy5oPVtdLHRoaXMuZz1bXSx0aGlzLmY9W10sdGhpcy5jPVtdLHRoaXMubD0hMSx0aGlzLmk9MCx0aGlzLnM9bmV3IFc7dmFyIHQ9dGhpcztPZSh0aGlzLmEsXCJyZWFkeXN0YXRlY2hhbmdlXCIsKGZ1bmN0aW9uKCl7dmFyIGU9dC5hO2lmKGU9ZS5hP2UuYS5nZXRSZXNwb25zZUhlYWRlcihcIkNvbnRlbnQtVHlwZVwiKTpudWxsKXtpZigwPT0oZT1lLnRvTG93ZXJDYXNlKCkpLmxhc3RJbmRleE9mKFwiYXBwbGljYXRpb24vZ3JwYy13ZWItdGV4dFwiLDApKXtlPXQuYTt0cnl7dmFyIG89ZS5hP2UuYS5yZXNwb25zZVRleHQ6XCJcIn1jYXRjaCh0KXtudChlLmIsXCJDYW4gbm90IGdldCByZXNwb25zZVRleHQ6IFwiK3QubWVzc2FnZSksbz1cIlwifWlmKG89KGU9b3x8XCJcIikubGVuZ3RoLWUubGVuZ3RoJTQsMD09KGU9ZS5zdWJzdHIodC5pLG8tdC5pKSkubGVuZ3RoKXJldHVybjt0Lmk9byxlPWZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoLG89Myp0LzQ7byUzP289TWF0aC5mbG9vcihvKTpxKFwiPS5cIixlW3QtMV0pJiYobz1xKFwiPS5cIixlW3QtMl0pP28tMjpvLTEpO3ZhciByPW5ldyBVaW50OEFycmF5KG8pLG49MDtyZXR1cm4gZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBvKHQpe2Zvcig7cjxlLmxlbmd0aDspe3ZhciBvPWUuY2hhckF0KHIrKyksbj1qdFtvXTtpZihudWxsIT1uKXJldHVybiBuO2lmKCEvXltcXHNcXHhhMF0qJC8udGVzdChvKSl0aHJvdyBFcnJvcihcIlVua25vd24gYmFzZTY0IGVuY29kaW5nIGF0IGNoYXI6IFwiK28pfXJldHVybiB0fUJ0KCk7Zm9yKHZhciByPTA7Oyl7dmFyIG49bygtMSkscz1vKDApLGk9byg2NCksYT1vKDY0KTtpZig2ND09PWEmJi0xPT09bilicmVhazt0KG48PDJ8cz4+NCksNjQhPWkmJih0KHM8PDQmMjQwfGk+PjIpLDY0IT1hJiZ0KGk8PDYmMTkyfGEpKX19KGUsKGZ1bmN0aW9uKGUpe3JbbisrXT1lfSkpLHIuc3ViYXJyYXkoMCxuKX0oZSl9ZWxzZXtpZigwIT1lLmxhc3RJbmRleE9mKFwiYXBwbGljYXRpb24vZ3JwY1wiLDApKXJldHVybiB2b2lkIFZ0KHQsbmV3IGooMixcIlVua25vd24gQ29udGVudC10eXBlIHJlY2VpdmVkLlwiKSk7ZT1uZXcgVWludDhBcnJheShmdW5jdGlvbihlKXt0cnl7aWYoIWUuYSlyZXR1cm4gbnVsbDtpZihcInJlc3BvbnNlXCJpbiBlLmEpcmV0dXJuIGUuYS5yZXNwb25zZTtzd2l0Y2goZS5tKXtjYXNlIFJ0OmNhc2VcInRleHRcIjpyZXR1cm4gZS5hLnJlc3BvbnNlVGV4dDtjYXNlXCJhcnJheWJ1ZmZlclwiOmlmKFwibW96UmVzcG9uc2VBcnJheUJ1ZmZlclwiaW4gZS5hKXJldHVybiBlLmEubW96UmVzcG9uc2VBcnJheUJ1ZmZlcn12YXIgdD1lLmI7cmV0dXJuIHQmJnJ0KHQsWWUsXCJSZXNwb25zZSB0eXBlIFwiK2UubStcIiBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgYnJvd3NlclwiKSxudWxsfWNhdGNoKHQpe3JldHVybiBudChlLmIsXCJDYW4gbm90IGdldCByZXNwb25zZTogXCIrdC5tZXNzYWdlKSxudWxsfX0odC5hKSl9bz1udWxsO3RyeXtvPWZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbyhlKXthLmYrKyxhLmE9KGEuYTw8OCkrZSw0PT1hLmYmJihhLmI9MixhLmc9MCxcInVuZGVmaW5lZFwiIT10eXBlb2YgVWludDhBcnJheT9hLmM9bmV3IFVpbnQ4QXJyYXkoYS5hKTphLmM9QXJyYXkoYS5hKSwwPT1hLmEmJm4oKSl9ZnVuY3Rpb24gcihlKXthLmNbYS5nKytdPWUsYS5nPT1hLmEmJm4oKX1mdW5jdGlvbiBuKCl7dmFyIGU9e307ZVthLmhdPWEuYyxhLmkucHVzaChlKSxhLmI9Vn12YXIgcyxpLGE9ZSxnPTA7Zm9yKHM9dCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fHQgaW5zdGFuY2VvZiBBcnJheT90Om5ldyBVaW50OEFycmF5KHQpO2c8cy5sZW5ndGg7KXtzd2l0Y2goYS5iKXtjYXNlIDM6eihhLHMsZyxcInN0cmVhbSBhbHJlYWR5IGJyb2tlblwiKTticmVhaztjYXNlIFY6MD09KGk9c1tnXSl8fGk9PXg/YS5oPWk6eihhLHMsZyxcImludmFsaWQgZnJhbWUgYnl0ZVwiKSxhLmI9MSxhLmE9MCxhLmY9MDticmVhaztjYXNlIDE6byhzW2ddKTticmVhaztjYXNlIDI6cihzW2ddKTticmVhaztkZWZhdWx0OnRocm93IEVycm9yKFwidW5leHBlY3RlZCBwYXJzZXIgc3RhdGU6IFwiK2EuYil9YS5tKyssZysrfXJldHVybiBlPWEuaSxhLmk9W10sMDxlLmxlbmd0aD9lOm51bGx9KHQucyxlKX1jYXRjaChlKXtWdCh0LG5ldyBqKDIsXCJFcnJvciBpbiBwYXJzaW5nIHJlc3BvbnNlIGJvZHlcIikpfWlmKG8pZm9yKGU9MDtlPG8ubGVuZ3RoO2UrKyl7aWYoMCBpbiBvW2VdKXt2YXIgcj1vW2VdWzBdO2lmKHIpe3ZhciBuPXZvaWQgMDt0cnl7bj10Lm0ocil9Y2F0Y2goZSl7VnQodCxuZXcgaigxMyxcIkVycm9yIHdoZW4gZGVzZXJpYWxpemluZyByZXNwb25zZSBkYXRhOiBcIituKSl9aWYobil7cj10O2Zvcih2YXIgcz0wO3M8ci5iLmxlbmd0aDtzKyspci5iW3NdKG4pfX19aWYoeCBpbiBvW2VdJiYwPG9bZV1beF0ubGVuZ3RoKXtmb3Iocj1cIlwiLG49MDtuPG9bZV1beF0ubGVuZ3RoO24rKylyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKG9bZV1beF1bbl0pO2ZvcihyPXIudHJpbSgpLnNwbGl0KFwiXFxyXFxuXCIpLG49e30scz0wO3M8ci5sZW5ndGg7cysrKXt2YXIgaT1yW3NdLmluZGV4T2YoXCI6XCIpO25bcltzXS5zdWJzdHJpbmcoMCxpKS50cmltKCldPXJbc10uc3Vic3RyaW5nKGkrMSkudHJpbSgpfXI9bixuPTAscz1cIlwiLFwiZ3JwYy1zdGF0dXNcImluIHImJihuPU51bWJlcihyW1wiZ3JwYy1zdGF0dXNcIl0pLGRlbGV0ZSByW1wiZ3JwYy1zdGF0dXNcIl0pLFwiZ3JwYy1tZXNzYWdlXCJpbiByJiYocz1yW1wiZ3JwYy1tZXNzYWdlXCJdLGRlbGV0ZSByW1wiZ3JwYy1tZXNzYWdlXCJdKSxWdCh0LG5ldyBqKG4scyxyKSl9fX19KSksT2UodGhpcy5hLFwiY29tcGxldGVcIiwoZnVuY3Rpb24oKXt2YXIgZT10LmEuZyxvPTIscj1cIlwiLG49e30scz1mdW5jdGlvbihlKXt2YXIgdD17fTtlPShlLmEmJjQ9PUZ0KGUpJiZlLmEuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCl8fFwiXCIpLnNwbGl0KFwiXFxyXFxuXCIpO2Zvcih2YXIgbz0wO288ZS5sZW5ndGg7bysrKWlmKCEvXltcXHNcXHhhMF0qJC8udGVzdChlW29dKSl7dmFyIHI9WChlW29dKSxuPXJbMF07aWYoXCJzdHJpbmdcIj09dHlwZW9mKHI9clsxXSkpe3I9ci50cmltKCk7dmFyIHM9dFtuXXx8W107dFtuXT1zLHMucHVzaChyKX19cmV0dXJuIGZ1bmN0aW9uKGUsdCl7dmFyIG8scj17fTtmb3IobyBpbiBlKXJbb109dC5jYWxsKHZvaWQgMCxlW29dLG8sZSk7cmV0dXJuIHJ9KHQsKGZ1bmN0aW9uKGUpe3JldHVybiBlLmpvaW4oXCIsIFwiKX0pKX0odC5hKTtpZihPYmplY3Qua2V5cyhzKS5mb3JFYWNoKChmdW5jdGlvbihlKXtVdC5pbmNsdWRlcyhlKXx8KG5bZV09c1tlXSl9KSksZnVuY3Rpb24oZSx0KXtmb3IodmFyIG89MDtvPGUuZy5sZW5ndGg7bysrKWUuZ1tvXSh0KX0odCxuKSwwIT1lKXtzd2l0Y2goZSl7Y2FzZSA3Om89MTA7YnJlYWs7Y2FzZSA4Om89NDticmVhaztjYXNlIDY6bz1mdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSAyMDA6cmV0dXJuIDA7Y2FzZSA0MDA6cmV0dXJuIDM7Y2FzZSA0MDE6cmV0dXJuIDE2O2Nhc2UgNDAzOnJldHVybiA3O2Nhc2UgNDA0OnJldHVybiA1O2Nhc2UgNDA5OnJldHVybiAxMDtjYXNlIDQxMjpyZXR1cm4gOTtjYXNlIDQyOTpyZXR1cm4gODtjYXNlIDQ5OTpyZXR1cm4gMTtjYXNlIDUwMDpkZWZhdWx0OnJldHVybiAyO2Nhc2UgNTAxOnJldHVybiAxMjtjYXNlIDUwMzpyZXR1cm4gMTQ7Y2FzZSA1MDQ6cmV0dXJuIDR9fSh0LmEuZ2V0U3RhdHVzKCkpO2JyZWFrO2RlZmF1bHQ6bz0xNH0xMD09byYmdC5sfHxWdCh0LG5ldyBqKG8sZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm5cIk5vIEVycm9yXCI7Y2FzZSAxOnJldHVyblwiQWNjZXNzIGRlbmllZCB0byBjb250ZW50IGRvY3VtZW50XCI7Y2FzZSAyOnJldHVyblwiRmlsZSBub3QgZm91bmRcIjtjYXNlIDM6cmV0dXJuXCJGaXJlZm94IHNpbGVudGx5IGVycm9yZWRcIjtjYXNlIDQ6cmV0dXJuXCJBcHBsaWNhdGlvbiBjdXN0b20gZXJyb3JcIjtjYXNlIDU6cmV0dXJuXCJBbiBleGNlcHRpb24gb2NjdXJyZWRcIjtjYXNlIDY6cmV0dXJuXCJIdHRwIHJlc3BvbnNlIGF0IDQwMCBvciA1MDAgbGV2ZWxcIjtjYXNlIDc6cmV0dXJuXCJSZXF1ZXN0IHdhcyBhYm9ydGVkXCI7Y2FzZSA4OnJldHVyblwiUmVxdWVzdCB0aW1lZCBvdXRcIjtjYXNlIDk6cmV0dXJuXCJUaGUgcmVzb3VyY2UgaXMgbm90IGF2YWlsYWJsZSBvZmZsaW5lXCI7ZGVmYXVsdDpyZXR1cm5cIlVucmVjb2duaXplZCBlcnJvciBjb2RlXCJ9fShlKSkpfWVsc2UgZT0hMSxcImdycGMtc3RhdHVzXCJpbiBzJiYobz1OdW1iZXIoQ3QodC5hLFwiZ3JwYy1zdGF0dXNcIikpLFwiZ3JwYy1tZXNzYWdlXCJpbiBzJiYocj1DdCh0LmEsXCJncnBjLW1lc3NhZ2VcIikpLDAhPW8mJihWdCh0LG5ldyBqKG8scnx8XCJcIixzKSksZT0hMCkpLGV8fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wO3Q8ZS5jLmxlbmd0aDt0KyspZS5jW3RdKCl9KHQpfSkpfWZ1bmN0aW9uIFd0KGUsdCl7LTE8KHQ9ZS5pbmRleE9mKHQpKSYmZS5zcGxpY2UodCwxKX1mdW5jdGlvbiBWdChlLHQpe2lmKDAhPXQuY29kZSlmb3IodmFyIG89bmV3IGoodC5jb2RlLGRlY29kZVVSSUNvbXBvbmVudCh0Lm1lc3NhZ2V8fFwiXCIpLHQubWV0YWRhdGEpLHI9MDtyPGUuZi5sZW5ndGg7cisrKWUuZltyXShvKTtmb3IodD17Y29kZTp0LmNvZGUsZGV0YWlsczpkZWNvZGVVUklDb21wb25lbnQodC5tZXNzYWdlfHxcIlwiKSxtZXRhZGF0YTp0Lm1ldGFkYXRhfSxvPTA7bzxlLmgubGVuZ3RoO28rKyllLmhbb10odCl9ZnVuY3Rpb24geHQoZSx0KXtlPXZvaWQgMD09PWU/e306ZSx0aGlzLmE9ZS5mb3JtYXR8fFQoXCJmb3JtYXRcIixlKXx8XCJ0ZXh0XCIsdGhpcy5nPWUuYWF8fFQoXCJzdXBwcmVzc0NvcnNQcmVmbGlnaHRcIixlKXx8ITEsdGhpcy5mPWUud2l0aENyZWRlbnRpYWxzfHxUKFwid2l0aENyZWRlbnRpYWxzXCIsZSl8fCExLHRoaXMuYj1lLiR8fFQoXCJzdHJlYW1JbnRlcmNlcHRvcnNcIixlKXx8W10sdGhpcy5oPWUuYmF8fFQoXCJ1bmFyeUludGVyY2VwdG9yc1wiLGUpfHxbXSx0aGlzLmM9dHx8bnVsbH1mdW5jdGlvbiB6dChlLHQsbyl7dmFyIHI9dC5nZXRNZXRob2REZXNjcmlwdG9yKCksbj1vK3IubmFtZTsobz1lLmM/ZS5jOm5ldyBUdCkuTT1lLmY7dmFyIHM9bmV3IFB0KHtaOm99KTtzLm09ci5iO3ZhciBpPXQuZ2V0TWV0YWRhdGEoKTtmb3IoYSBpbiBpKW8uaGVhZGVycy5zZXQoYSxpW2FdKTtpZihcInRleHRcIj09ZS5hPyhvLmhlYWRlcnMuc2V0KFwiQ29udGVudC1UeXBlXCIsXCJhcHBsaWNhdGlvbi9ncnBjLXdlYi10ZXh0XCIpLG8uaGVhZGVycy5zZXQoXCJBY2NlcHRcIixcImFwcGxpY2F0aW9uL2dycGMtd2ViLXRleHRcIikpOm8uaGVhZGVycy5zZXQoXCJDb250ZW50LVR5cGVcIixcImFwcGxpY2F0aW9uL2dycGMtd2ViK3Byb3RvXCIpLG8uaGVhZGVycy5zZXQoXCJYLVVzZXItQWdlbnRcIixcImdycGMtd2ViLWphdmFzY3JpcHQvMC4xXCIpLG8uaGVhZGVycy5zZXQoXCJYLUdycGMtV2ViXCIsXCIxXCIpLG8uaGVhZGVycy5oYXMoXCJkZWFkbGluZVwiKSl7dmFyIGE9TnVtYmVyKG8uaGVhZGVycy5nZXQoXCJkZWFkbGluZVwiKSk7YT1NYXRoLmNlaWwoYS0obmV3IERhdGUpLmdldFRpbWUoKSksby5oZWFkZXJzLmRlbGV0ZShcImRlYWRsaW5lXCIpLDEvMD09PWEmJihhPTApLDA8YSYmKG8uaGVhZGVycy5zZXQoXCJncnBjLXRpbWVvdXRcIixhK1wibVwiKSxvLmg9TWF0aC5tYXgoMCxNYXRoLm1heCgxZTMsTWF0aC5jZWlsKDEuMSphKSkpKX1pZihlLmcpe2E9e307Zm9yKHZhciBnPWMoKGk9by5oZWFkZXJzKS5rZXlzKCkpLHA9Zy5uZXh0KCk7IXAuZG9uZTtwPWcubmV4dCgpKWFbcD1wLnZhbHVlXT1pLmdldChwKTtvLmhlYWRlcnMuY2xlYXIoKTtlOntmb3IobCBpbiBhKXt2YXIgbD0hMTticmVhayBlfWw9ITB9bHx8KGE9ZnVuY3Rpb24oZSl7dmFyIHQ9XCJcIjtyZXR1cm4gZnVuY3Rpb24oZSx0KXtmb3IodmFyIG8gaW4gZSl0LmNhbGwodm9pZCAwLGVbb10sbyxlKX0oZSwoZnVuY3Rpb24oZSxvKXt0Kz1vLHQrPVwiOlwiLHQrPWUsdCs9XCJcXHJcXG5cIn0pKSx0fShhKSxcInN0cmluZ1wiPT10eXBlb2Ygbj8obD1lbmNvZGVVUklDb21wb25lbnQoXCIkaHR0cEhlYWRlcnNcIiksKGwrPWE9bnVsbCE9YT9cIj1cIitlbmNvZGVVUklDb21wb25lbnQoU3RyaW5nKGEpKTpcIlwiKSYmKDA+KGE9bi5pbmRleE9mKFwiI1wiKSkmJihhPW4ubGVuZ3RoKSwwPihpPW4uaW5kZXhPZihcIj9cIikpfHxpPmE/KGk9YSxnPVwiXCIpOmc9bi5zdWJzdHJpbmcoaSsxLGEpLGE9KG49W24uc3Vic3RyKDAsaSksZyxuLnN1YnN0cihhKV0pWzFdLG5bMV09bD9hP2ErXCImXCIrbDpsOmEsbj1uWzBdKyhuWzFdP1wiP1wiK25bMV06XCJcIikrblsyXSkpOm4uYShcIiRodHRwSGVhZGVyc1wiLGEpKX1mb3Iocj0odD0oMCxyLmEpKHQuZ2V0UmVxdWVzdE1lc3NhZ2UoKSkpLmxlbmd0aCxsPVswLDAsMCwwXSxhPW5ldyBVaW50OEFycmF5KDUrciksaT0zOzA8PWk7aS0tKWxbaV09ciUyNTYscj4+Pj04O2lmKGEuc2V0KG5ldyBVaW50OEFycmF5KGwpLDEpLGEuc2V0KHQsNSksdD1hLFwidGV4dFwiPT1lLmEpe3ZhciB1O2ZvcihlPXQsdm9pZCAwPT09dSYmKHU9MCksQnQoKSx1PU50W3VdLHQ9QXJyYXkoTWF0aC5mbG9vcihlLmxlbmd0aC8zKSkscj11WzY0XXx8XCJcIixsPWE9MDthPGUubGVuZ3RoLTI7YSs9Myl7cD1lW2FdO3ZhciBkPWVbYSsxXTtnPWVbYSsyXSxpPXVbcD4+Ml0scD11WygzJnApPDw0fGQ+PjRdLGQ9dVsoMTUmZCk8PDJ8Zz4+Nl0sZz11WzYzJmddLHRbbCsrXT1pK3ArZCtnfXN3aXRjaChpPTAsZz1yLGUubGVuZ3RoLWEpe2Nhc2UgMjpnPXVbKDE1JihpPWVbYSsxXSkpPDwyXXx8cjtjYXNlIDE6ZT1lW2FdLHRbbF09dVtlPj4yXSt1WygzJmUpPDw0fGk+PjRdK2crcn10PXQuam9pbihcIlwiKX1lbHNlXCJiaW5hcnlcIj09ZS5hJiYoby5tPVwiYXJyYXlidWZmZXJcIik7cmV0dXJuIGZ1bmN0aW9uKGUsdCxvKXtpZihlLmEpdGhyb3cgRXJyb3IoXCJbZ29vZy5uZXQuWGhySW9dIE9iamVjdCBpcyBhY3RpdmUgd2l0aCBhbm90aGVyIHJlcXVlc3Q9XCIrZS52K1wiOyBuZXdVcmk9XCIrdCk7ZS52PXQsZS5sPVwiXCIsZS5nPTAsZS5QPVwiUE9TVFwiLGUuTD0hMSxlLmM9ITAsZS5hPWUuQz9ndChlLkMpOmd0KEdlKSxlLko9ZS5DP2l0KGUuQyk6aXQoR2UpLGUuYS5vbnJlYWR5c3RhdGVjaGFuZ2U9dyhlLlIsZSk7dHJ5e250KGUuYixMdChlLFwiT3BlbmluZyBYaHJcIikpLGUuTj0hMCxlLmEub3BlbihcIlBPU1RcIixTdHJpbmcodCksITApLGUuTj0hMX1jYXRjaCh0KXtyZXR1cm4gbnQoZS5iLEx0KGUsXCJFcnJvciBvcGVuaW5nIFhocjogXCIrdC5tZXNzYWdlKSksdm9pZCBNdChlLHQpfXQ9b3x8XCJcIjt2YXIgcj0obz1lLmhlYWRlcnMuY2xvbmUoKSkuRygpLmZpbmQoKGZ1bmN0aW9uKGUpe3JldHVyblwiY29udGVudC10eXBlXCI9PWUudG9Mb3dlckNhc2UoKX0pKSxuPW0uRm9ybURhdGEmJnQgaW5zdGFuY2VvZiBtLkZvcm1EYXRhOyEoMDw9SChBdCxcIlBPU1RcIikpfHxyfHxufHxvLnNldChcIkNvbnRlbnQtVHlwZVwiLFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLThcIiksby5mb3JFYWNoKChmdW5jdGlvbihlLHQpe3RoaXMuYS5zZXRSZXF1ZXN0SGVhZGVyKHQsZSl9KSxlKSxlLm0mJihlLmEucmVzcG9uc2VUeXBlPWUubSksXCJ3aXRoQ3JlZGVudGlhbHNcImluIGUuYSYmZS5hLndpdGhDcmVkZW50aWFscyE9PWUuTSYmKGUuYS53aXRoQ3JlZGVudGlhbHM9ZS5NKTt0cnl7RHQoZSksMDxlLmgmJihlLkk9ZnVuY3Rpb24oZSl7cmV0dXJuIG9lJiZ1ZSgpJiZcIm51bWJlclwiPT10eXBlb2YgZS50aW1lb3V0JiZ2b2lkIDAhPT1lLm9udGltZW91dH0oZS5hKSxudChlLmIsTHQoZSxcIldpbGwgYWJvcnQgYWZ0ZXIgXCIrZS5oK1wibXMgaWYgaW5jb21wbGV0ZSwgeGhyMiBcIitlLkkpKSxlLkk/KGUuYS50aW1lb3V0PWUuaCxlLmEub250aW1lb3V0PXcoZS5ULGUpKTplLnc9eGUoZS5ULGUuaCxlKSksbnQoZS5iLEx0KGUsXCJTZW5kaW5nIHJlcXVlc3RcIikpLGUucz0hMCxlLmEuc2VuZCh0KSxlLnM9ITF9Y2F0Y2godCl7bnQoZS5iLEx0KGUsXCJTZW5kIGVycm9yOiBcIit0Lm1lc3NhZ2UpKSxNdChlLHQpfX0obyxuLHQpLHN9ZnVuY3Rpb24ga3QoZSx0LG8pe3ZhciByPSExLG49bnVsbCxzPSExO2Uub24oXCJkYXRhXCIsKGZ1bmN0aW9uKGUpe3I9ITAsbj1lfSkpLGUub24oXCJlcnJvclwiLChmdW5jdGlvbihlKXswPT1lLmNvZGV8fHN8fChzPSEwLHQoZSxudWxsKSl9KSksZS5vbihcInN0YXR1c1wiLChmdW5jdGlvbihlKXswPT1lLmNvZGV8fHM/byYmdChudWxsLG51bGwsZSk6KHM9ITAsdCh7Y29kZTplLmNvZGUsbWVzc2FnZTplLmRldGFpbHMsbWV0YWRhdGE6ZS5tZXRhZGF0YX0sbnVsbCkpfSkpLG8mJmUub24oXCJtZXRhZGF0YVwiLChmdW5jdGlvbihlKXt0KG51bGwsbnVsbCxudWxsLGUpfSkpLGUub24oXCJlbmRcIiwoZnVuY3Rpb24oKXtzfHwocj90KG51bGwsbik6dCh7Y29kZToyLG1lc3NhZ2U6XCJJbmNvbXBsZXRlIHJlc3BvbnNlXCJ9KSksbyYmdChudWxsLG51bGwpfSkpfWZ1bmN0aW9uIEh0KGUsdCl7dmFyIG89ZTtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgdD1vO289ZnVuY3Rpb24obyl7cmV0dXJuIGUuaW50ZXJjZXB0KG8sdCl9fSkpLG99UHQucHJvdG90eXBlLm9uPWZ1bmN0aW9uKGUsdCl7cmV0dXJuXCJkYXRhXCI9PWU/dGhpcy5iLnB1c2godCk6XCJzdGF0dXNcIj09ZT90aGlzLmgucHVzaCh0KTpcIm1ldGFkYXRhXCI9PWU/dGhpcy5nLnB1c2godCk6XCJlbmRcIj09ZT90aGlzLmMucHVzaCh0KTpcImVycm9yXCI9PWUmJnRoaXMuZi5wdXNoKHQpLHRoaXN9LFB0LnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcj1mdW5jdGlvbihlLHQpe3JldHVyblwiZGF0YVwiPT1lP1d0KHRoaXMuYix0KTpcInN0YXR1c1wiPT1lP1d0KHRoaXMuaCx0KTpcIm1ldGFkYXRhXCI9PWU/V3QodGhpcy5nLHQpOlwiZW5kXCI9PWU/V3QodGhpcy5jLHQpOlwiZXJyb3JcIj09ZSYmV3QodGhpcy5mLHQpLHRoaXN9LFB0LnByb3RvdHlwZS5jYW5jZWw9ZnVuY3Rpb24oKXt0aGlzLmw9ITAsdGhpcy5hLmFib3J0KCl9LFB0LnByb3RvdHlwZS5jYW5jZWw9UHQucHJvdG90eXBlLmNhbmNlbCxQdC5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI9UHQucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyLFB0LnByb3RvdHlwZS5vbj1QdC5wcm90b3R5cGUub24seHQucHJvdG90eXBlLlg9ZnVuY3Rpb24oZSx0LG8scixuKXt2YXIgcz10aGlzLGk9ZS5zdWJzdHIoMCxlLmxlbmd0aC1yLm5hbWUubGVuZ3RoKTtyZXR1cm4ga3QoZT1IdCgoZnVuY3Rpb24oZSl7cmV0dXJuIHp0KHMsZSxpKX0pLHRoaXMuYikuY2FsbCh0aGlzLE4ocix0LG8pKSxuLCExKSxuZXcgQihlKX0seHQucHJvdG90eXBlLlM9ZnVuY3Rpb24oZSx0LG8scil7dmFyIG49dGhpcyxzPWUuc3Vic3RyKDAsZS5sZW5ndGgtci5uYW1lLmxlbmd0aCk7cmV0dXJuIEh0KChmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKHQsbyl7dmFyIHIsaSxhO2t0KHp0KG4sZSxzKSwoZnVuY3Rpb24obixzLGcscCl7bj9vKG4pOnM/YT1zOmc/aT1nOnA/cj1wOihuPWUuZ2V0TWV0aG9kRGVzY3JpcHRvcigpLHQobmV3IEwoYSxuLHM9dm9pZCAwPT09KHM9cik/e306cyx2b2lkIDA9PT1pP251bGw6aSkpKX0pLCEwKX0pKX0pLHRoaXMuaCkuY2FsbCh0aGlzLE4ocix0LG8pKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRSZXNwb25zZU1lc3NhZ2UoKX0pKX0seHQucHJvdG90eXBlLnVuYXJ5Q2FsbD1mdW5jdGlvbihlLHQsbyxyKXtyZXR1cm4gdGhpcy5TKGUsdCxvLHIpfSx4dC5wcm90b3R5cGUuWT1mdW5jdGlvbihlLHQsbyxyKXt2YXIgbj10aGlzLHM9ZS5zdWJzdHIoMCxlLmxlbmd0aC1yLm5hbWUubGVuZ3RoKTtyZXR1cm4gSHQoKGZ1bmN0aW9uKGUpe3JldHVybiB6dChuLGUscyl9KSx0aGlzLmIpLmNhbGwodGhpcyxOKHIsdCxvKSl9LHh0LnByb3RvdHlwZS5zZXJ2ZXJTdHJlYW1pbmc9eHQucHJvdG90eXBlLlkseHQucHJvdG90eXBlLnVuYXJ5Q2FsbD14dC5wcm90b3R5cGUudW5hcnlDYWxsLHh0LnByb3RvdHlwZS50aGVuYWJsZUNhbGw9eHQucHJvdG90eXBlLlMseHQucHJvdG90eXBlLnJwY0NhbGw9eHQucHJvdG90eXBlLlgsZS5leHBvcnRzLkdycGNXZWJDbGllbnRCYXNlPXh0LGUuZXhwb3J0cy5TdGF0dXNDb2RlPXtPSzowLENBTkNFTExFRDoxLFVOS05PV046MixJTlZBTElEX0FSR1VNRU5UOjMsREVBRExJTkVfRVhDRUVERUQ6NCxOT1RfRk9VTkQ6NSxBTFJFQURZX0VYSVNUUzo2LFBFUk1JU1NJT05fREVOSUVEOjcsVU5BVVRIRU5USUNBVEVEOjE2LFJFU09VUkNFX0VYSEFVU1RFRDo4LEZBSUxFRF9QUkVDT05ESVRJT046OSxBQk9SVEVEOjEwLE9VVF9PRl9SQU5HRToxMSxVTklNUExFTUVOVEVEOjEyLElOVEVSTkFMOjEzLFVOQVZBSUxBQkxFOjE0LERBVEFfTE9TUzoxNX0sZS5leHBvcnRzLk1ldGhvZERlc2NyaXB0b3I9ZnVuY3Rpb24oZSx0LG8scixuLHMpe3RoaXMubmFtZT1lLHRoaXMuYT1uLHRoaXMuYj1zfSxlLmV4cG9ydHMuTWV0aG9kVHlwZT17VU5BUlk6XCJ1bmFyeVwiLFNFUlZFUl9TVFJFQU1JTkc6XCJzZXJ2ZXJfc3RyZWFtaW5nXCIsQklESV9TVFJFQU1JTkc6XCJiaWRpX3N0cmVhbWluZ1wifX19LF9fd2VicGFja19tb2R1bGVfY2FjaGVfXz17fTtmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKGUpe3ZhciB0PV9fd2VicGFja19tb2R1bGVfY2FjaGVfX1tlXTtpZih2b2lkIDAhPT10KXJldHVybiB0LmV4cG9ydHM7dmFyIG89X193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW2VdPXtleHBvcnRzOnt9fTtyZXR1cm4gX193ZWJwYWNrX21vZHVsZXNfX1tlXS5jYWxsKG8uZXhwb3J0cyxvLG8uZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKSxvLmV4cG9ydHN9X193ZWJwYWNrX3JlcXVpcmVfXy5kPShlLHQpPT57Zm9yKHZhciBvIGluIHQpX193ZWJwYWNrX3JlcXVpcmVfXy5vKHQsbykmJiFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZSxvKSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbyx7ZW51bWVyYWJsZTohMCxnZXQ6dFtvXX0pfSxfX3dlYnBhY2tfcmVxdWlyZV9fLmc9ZnVuY3Rpb24oKXtpZihcIm9iamVjdFwiPT10eXBlb2YgZ2xvYmFsVGhpcylyZXR1cm4gZ2xvYmFsVGhpczt0cnl7cmV0dXJuIHRoaXN8fG5ldyBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCl9Y2F0Y2goZSl7aWYoXCJvYmplY3RcIj09dHlwZW9mIHdpbmRvdylyZXR1cm4gd2luZG93fX0oKSxfX3dlYnBhY2tfcmVxdWlyZV9fLm89KGUsdCk9Pk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpLF9fd2VicGFja19yZXF1aXJlX18ucj1lPT57XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmU3ltYm9sLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOlwiTW9kdWxlXCJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KX07dmFyIF9fd2VicGFja19leHBvcnRzX189e307cmV0dXJuKCgpPT57XCJ1c2Ugc3RyaWN0XCI7X193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pLF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLHtFbnRpdHk6KCk9PmksRW50aXR5QUNJOigpPT5kLEVudGl0eUFDTDooKT0+eSxQcm9wZXJ0eTooKT0+cixUcmFuc2FjdGlvblNlcnZpY2U6KCk9Pk19KTt2YXIgZT1fX3dlYnBhY2tfcmVxdWlyZV9fKDM0Nyk7ZnVuY3Rpb24gdChlLHQpe2Zvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXt2YXIgcj10W29dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLFwidmFsdWVcImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLmtleSxyKX19ZnVuY3Rpb24gbyh0KXt2YXIgbz1lLmgudjEuU2NhbGFyVmFsdWUuU2NhbGFyVmFsdWVDYXNlO3N3aXRjaCh0LmdldFNjYWxhclZhbHVlQ2FzZSgpKXtjYXNlIG8uU0NBTEFSX1ZBTFVFX05PVF9TRVQ6cmV0dXJuO2Nhc2Ugby5JTlRFR0VSX1ZBTFVFOnJldHVybiB0LmdldEludGVnZXJWYWx1ZSgpO2Nhc2Ugby5ET1VCTEVfVkFMVUU6cmV0dXJuIHQuZ2V0RG91YmxlVmFsdWUoKTtjYXNlIG8uQk9PTEVBTl9WQUxVRTpyZXR1cm4gdC5nZXRCb29sZWFuVmFsdWUoKTtjYXNlIG8uU1RSSU5HX1ZBTFVFOnJldHVybiB0LmdldFN0cmluZ1ZhbHVlKCk7Y2FzZSBvLlNQRUNJQUxfVkFMVUU6cmV0dXJuIHQuZ2V0U3BlY2lhbFZhbHVlKCk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJVbmtvd24gdmFsdWUgdHlwZSBcIi5jb25jYXQodC5nZXRTY2FsYXJWYWx1ZUNhc2UoKSxcIi5cIikpfX12YXIgcj1mdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSl7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX0odGhpcyxyKSx0aGlzLndyYXBwZWRQcm9wZXJ0eT1lfXZhciBuLHM7cmV0dXJuIG49ciwocz1be2tleTpcImdldE5hbWVcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLndyYXBwZWRQcm9wZXJ0eS5nZXROYW1lKCl9fSx7a2V5OlwiZ2V0SWRcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLndyYXBwZWRQcm9wZXJ0eS5nZXRJZCgpfX0se2tleTpcImdldFVuaXRcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLndyYXBwZWRQcm9wZXJ0eS5nZXRVbml0KCl9fSx7a2V5OlwiZ2V0VmFsdWVcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMud3JhcHBlZFByb3BlcnR5LmdldFZhbHVlKCk7aWYodm9pZCAwIT09dCl7dmFyIHI9ZS5oLnYxLlZhbHVlLlZhbHVlQ2FzZTtzd2l0Y2godC5nZXRWYWx1ZUNhc2UoKSl7Y2FzZSByLlZBTFVFX05PVF9TRVQ6cmV0dXJuO2Nhc2Ugci5TQ0FMQVJfVkFMVUU6cmV0dXJuIG8odC5nZXRTY2FsYXJWYWx1ZSgpKTtjYXNlIHIuTElTVF9WQUxVRVM6cmV0dXJuIHQuZ2V0TGlzdFZhbHVlcygpLmdldFZhbHVlc0xpc3QoKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBvKGUpfSkpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biB2YWx1ZSB0eXBlIFwiLmNvbmNhdCh0LmdldFZhbHVlQ2FzZSgpLFwiLlwiKSl9fX19LHtrZXk6XCJpc0xpc3RcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLndyYXBwZWRQcm9wZXJ0eS5nZXREYXRhVHlwZSgpLmdldERhdGFUeXBlQ2FzZSgpPT09ZS5oLnYxLkRhdGFUeXBlLkRhdGFUeXBlQ2FzZS5MSVNUX0RBVEFfVFlQRX19LHtrZXk6XCJpc1JlZmVyZW5jZVwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy53cmFwcGVkUHJvcGVydHkuZ2V0RGF0YVR5cGUoKSxvPXQuZ2V0RGF0YVR5cGVDYXNlKCk7cmV0dXJuIG89PT1lLmgudjEuRGF0YVR5cGUuRGF0YVR5cGVDYXNlLlJFRkVSRU5DRV9EQVRBX1RZUEV8fG89PT1lLmgudjEuRGF0YVR5cGUuRGF0YVR5cGVDYXNlLkxJU1RfREFUQV9UWVBFJiZ0LmdldExpc3REYXRhVHlwZSgpLmdldExpc3REYXRhVHlwZUNhc2UoKT09PWUuaC52MS5MaXN0RGF0YVR5cGUuTGlzdERhdGFUeXBlQ2FzZS5SRUZFUkVOQ0VfREFUQV9UWVBFfX1dKSYmdChuLnByb3RvdHlwZSxzKSxyfSgpO2Z1bmN0aW9uIG4oZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIG89MCxyPW5ldyBBcnJheSh0KTtvPHQ7bysrKXJbb109ZVtvXTtyZXR1cm4gcn1mdW5jdGlvbiBzKGUsdCl7Zm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciByPXRbb107ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIua2V5LHIpfX12YXIgaT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX0odGhpcyx0KSx0aGlzLndyYXBwZWRFbnRpdHk9ZX12YXIgbyxpO3JldHVybiBvPXQsKGk9W3trZXk6XCJnZXREZXNjcmlwdGlvblwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud3JhcHBlZEVudGl0eS5nZXREZXNjcmlwdGlvbigpfX0se2tleTpcImdldEZpbGVQYXRoXCIsdmFsdWU6ZnVuY3Rpb24oKXtpZighdGhpcy5pc0ZpbGUoKSl0aHJvdyBuZXcgRXJyb3IoXCJPbmx5IEZJTEUgZW50aXRpZXMgY2FuIGhhdmUgYSBmaWxlIHBhdGguXCIpO3JldHVybiB0aGlzLndyYXBwZWRFbnRpdHkuZ2V0RmlsZURlc2NyaXB0b3IoKS5nZXRQYXRoKCl9fSx7a2V5OlwiZ2V0SWRcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLndyYXBwZWRFbnRpdHkuZ2V0SWQoKX19LHtrZXk6XCJnZXROYW1lXCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy53cmFwcGVkRW50aXR5LmdldE5hbWUoKX19LHtrZXk6XCJnZXRQYXJlbnRzXCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy53cmFwcGVkRW50aXR5LmdldFBhcmVudHNMaXN0KCl9fSx7a2V5OlwiZ2V0UHJvcGVydGllc1wiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud3JhcHBlZEVudGl0eS5nZXRQcm9wZXJ0aWVzTGlzdCgpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyByKGUpfSkpfX0se2tleTpcImdldFByb3BlcnR5XCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXRQcm9wZXJ0aWVzKCk7aWYodCl7dmFyIG8scj1mdW5jdGlvbihlLHQpe3ZhciBvPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVtcIkBAaXRlcmF0b3JcIl07aWYoIW8pe2lmKEFycmF5LmlzQXJyYXkoZSl8fChvPWZ1bmN0aW9uKGUsdCl7aWYoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIG4oZSx0KTt2YXIgbz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuXCJPYmplY3RcIj09PW8mJmUuY29uc3RydWN0b3ImJihvPWUuY29uc3RydWN0b3IubmFtZSksXCJNYXBcIj09PW98fFwiU2V0XCI9PT1vP0FycmF5LmZyb20oZSk6XCJBcmd1bWVudHNcIj09PW98fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG8pP24oZSx0KTp2b2lkIDB9fShlKSl8fHQmJmUmJlwibnVtYmVyXCI9PXR5cGVvZiBlLmxlbmd0aCl7byYmKGU9byk7dmFyIHI9MCxzPWZ1bmN0aW9uKCl7fTtyZXR1cm57cyxuOmZ1bmN0aW9uKCl7cmV0dXJuIHI+PWUubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTplW3IrK119fSxlOmZ1bmN0aW9uKGUpe3Rocm93IGV9LGY6c319dGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfXZhciBpLGE9ITAsZz0hMTtyZXR1cm57czpmdW5jdGlvbigpe289by5jYWxsKGUpfSxuOmZ1bmN0aW9uKCl7dmFyIGU9by5uZXh0KCk7cmV0dXJuIGE9ZS5kb25lLGV9LGU6ZnVuY3Rpb24oZSl7Zz0hMCxpPWV9LGY6ZnVuY3Rpb24oKXt0cnl7YXx8bnVsbD09by5yZXR1cm58fG8ucmV0dXJuKCl9ZmluYWxseXtpZihnKXRocm93IGl9fX19KHQpO3RyeXtmb3Ioci5zKCk7IShvPXIubigpKS5kb25lOyl7dmFyIHM9by52YWx1ZTtpZihzLmdldE5hbWUoKS50b0xvd2VyQ2FzZSgpPT09ZS50b0xvd2VyQ2FzZSgpKXJldHVybiBzfX1jYXRjaChlKXtyLmUoZSl9ZmluYWxseXtyLmYoKX19fX0se2tleTpcImdldFJvbGVcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgbz1lLmgudjEuRW50aXR5Um9sZTtzd2l0Y2godCl7Y2FzZSBvLkVOVElUWV9ST0xFX1VOU1BFQ0lGSUVEOnJldHVybjtjYXNlIG8uRU5USVRZX1JPTEVfUkVDT1JEX1RZUEU6cmV0dXJuXCJSRUNPUkRfVFlQRVwiO2Nhc2Ugby5FTlRJVFlfUk9MRV9SRUNPUkQ6cmV0dXJuXCJSRUNPUkRcIjtjYXNlIG8uRU5USVRZX1JPTEVfUFJPUEVSVFk6cmV0dXJuXCJQUk9QRVJUWVwiO2Nhc2Ugby5FTlRJVFlfUk9MRV9GSUxFOnJldHVyblwiRklMRVwiO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biByb2xlIFwiLmNvbmNhdCh0LFwiLlwiKSl9fSh0aGlzLndyYXBwZWRFbnRpdHkuZ2V0Um9sZSgpKX19LHtrZXk6XCJpc1JlY29yZFwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud3JhcHBlZEVudGl0eS5nZXRSb2xlKCk9PT1lLmgudjEuRW50aXR5Um9sZS5FTlRJVFlfUk9MRV9SRUNPUkR9fSx7a2V5OlwiaXNGaWxlXCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy53cmFwcGVkRW50aXR5LmdldFJvbGUoKT09PWUuaC52MS5FbnRpdHlSb2xlLkVOVElUWV9ST0xFX0ZJTEV9fV0pJiZzKG8ucHJvdG90eXBlLGkpLHR9KCk7ZnVuY3Rpb24gYShlLHQpe3ZhciBvPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVtcIkBAaXRlcmF0b3JcIl07aWYoIW8pe2lmKEFycmF5LmlzQXJyYXkoZSl8fChvPWZ1bmN0aW9uKGUsdCl7aWYoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIGcoZSx0KTt2YXIgbz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuXCJPYmplY3RcIj09PW8mJmUuY29uc3RydWN0b3ImJihvPWUuY29uc3RydWN0b3IubmFtZSksXCJNYXBcIj09PW98fFwiU2V0XCI9PT1vP0FycmF5LmZyb20oZSk6XCJBcmd1bWVudHNcIj09PW98fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG8pP2coZSx0KTp2b2lkIDB9fShlKSl8fHQmJmUmJlwibnVtYmVyXCI9PXR5cGVvZiBlLmxlbmd0aCl7byYmKGU9byk7dmFyIHI9MCxuPWZ1bmN0aW9uKCl7fTtyZXR1cm57czpuLG46ZnVuY3Rpb24oKXtyZXR1cm4gcj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbcisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjpufX10aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9dmFyIHMsaT0hMCxhPSExO3JldHVybntzOmZ1bmN0aW9uKCl7bz1vLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1vLm5leHQoKTtyZXR1cm4gaT1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXthPSEwLHM9ZX0sZjpmdW5jdGlvbigpe3RyeXtpfHxudWxsPT1vLnJldHVybnx8by5yZXR1cm4oKX1maW5hbGx5e2lmKGEpdGhyb3cgc319fX1mdW5jdGlvbiBnKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciBvPTAscj1uZXcgQXJyYXkodCk7bzx0O28rKylyW29dPWVbb107cmV0dXJuIHJ9ZnVuY3Rpb24gcChlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9ZnVuY3Rpb24gbChlLHQpe2Zvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXt2YXIgcj10W29dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLFwidmFsdWVcImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLmtleSxyKX19ZnVuY3Rpb24gdShlLHQsbyl7cmV0dXJuIHQmJmwoZS5wcm90b3R5cGUsdCksbyYmbChlLG8pLGV9dmFyIGMsZD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dmFyIG89dC5yb2xlLHI9dC5ncmFudCxuPXQucHJpb3JpdHkscz10LnBlcm1pc3Npb25zLGk9dC5jYXBhYmlsaXRpZXM7cCh0aGlzLGUpLHRoaXMucm9sZT1vLHRoaXMuZ3JhbnQ9cix0aGlzLnByaW9yaXR5PW4sdGhpcy5wZXJtaXNzaW9ucz1zfHx7cmV0cmlldmVfZW50aXR5OiExLHJldHJpZXZlX2FjbDohMSxyZXRyaWV2ZV9oaXN0b3J5OiExLHJldHJpZXZlX293bmVyOiExLHJldHJpZXZlX2ZpbGU6ITEsZGVsZXRlX2VudGl0eTohMSxlZGl0X2FjbDohMSx1cGRhdGVfZGVzY3JpcHRpb246ITEsdXBkYXRlX3ZhbHVlOiExLHVwZGF0ZV9yb2xlOiExLHVwZGF0ZV9yZW1vdmVfcGFyZW50OiExLHVwZGF0ZV9hZGRfcGFyZW50OiExLHVwZGF0ZV9yZW1vdmVfcHJvcGVydHk6ITEsdXBkYXRlX2FkZF9wcm9wZXJ0eTohMSx1cGRhdGVfbmFtZTohMSx1cGRhdGVfZGF0YV90eXBlOiExLHVwZGF0ZV9xdWVyeV90ZW1wbGF0ZV9kZWZpbml0aW9uOiExLHVwZGF0ZV9yZW1vdmVfZmlsZTohMSx1cGRhdGVfYWRkX2ZpbGU6ITEsdXBkYXRlX21vdmVfZmlsZTohMSx1c2VfYXNfcmVmZXJlbmNlOiExLHVzZV9hc19wcm9wZXJ0eTohMSx1c2VfYXNfcGFyZW50OiExLHVzZV9hc19kYXRhX3R5cGU6ITF9LHRoaXMuY2FwYWJpbGl0aWVzPWl8fHtkZWxldGVfYWNpOiExfX1yZXR1cm4gdShlLFt7a2V5OlwiaXNFZGl0QWNsXCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wZXJtaXNzaW9ucy5lZGl0X2FjbH19LHtrZXk6XCJzZXRFZGl0QWNsXCIsdmFsdWU6ZnVuY3Rpb24oZSl7ZT12b2lkIDA9PT1lfHxlLHRoaXMucGVybWlzc2lvbnMuZWRpdF9hY2w9ZX19LHtrZXk6XCJpc0RlbGV0ZVwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGVybWlzc2lvbnMuZGVsZXRlX2VudGl0eX19LHtrZXk6XCJzZXREZWxldGVcIix2YWx1ZTpmdW5jdGlvbihlKXtlPXZvaWQgMD09PWV8fGUsdGhpcy5wZXJtaXNzaW9ucy5kZWxldGVfZW50aXR5PWV9fSx7a2V5OlwiaXNGdWxsUmV0cmlldmVcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBlcm1pc3Npb25zLnJldHJpZXZlX2VudGl0eSYmdGhpcy5wZXJtaXNzaW9ucy5yZXRyaWV2ZV9hY2wmJnRoaXMucGVybWlzc2lvbnMucmV0cmlldmVfaGlzdG9yeSYmdGhpcy5wZXJtaXNzaW9ucy5yZXRyaWV2ZV9vd25lciYmdGhpcy5wZXJtaXNzaW9ucy5yZXRyaWV2ZV9maWxlfX0se2tleTpcInNldEZ1bGxSZXRyaWV2ZVwiLHZhbHVlOmZ1bmN0aW9uKGUpe2U9dm9pZCAwPT09ZXx8ZSx0aGlzLnBlcm1pc3Npb25zLnJldHJpZXZlX2VudGl0eT1lLHRoaXMucGVybWlzc2lvbnMucmV0cmlldmVfYWNsPWUsdGhpcy5wZXJtaXNzaW9ucy5yZXRyaWV2ZV9oaXN0b3J5PWUsdGhpcy5wZXJtaXNzaW9ucy5yZXRyaWV2ZV9vd25lcj1lLHRoaXMucGVybWlzc2lvbnMucmV0cmlldmVfZmlsZT1lfX0se2tleTpcImlzUGFydGlhbFJldHJpZXZlXCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wZXJtaXNzaW9ucy5yZXRyaWV2ZV9lbnRpdHl8fHRoaXMucGVybWlzc2lvbnMucmV0cmlldmVfYWNsfHx0aGlzLnBlcm1pc3Npb25zLnJldHJpZXZlX2hpc3Rvcnl8fHRoaXMucGVybWlzc2lvbnMucmV0cmlldmVfb3duZXJ8fHRoaXMucGVybWlzc2lvbnMucmV0cmlldmVfZmlsZX19LHtrZXk6XCJpc0Z1bGxVc2VcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBlcm1pc3Npb25zLnVzZV9hc19yZWZlcmVuY2UmJnRoaXMucGVybWlzc2lvbnMudXNlX2FzX3Byb3BlcnR5JiZ0aGlzLnBlcm1pc3Npb25zLnVzZV9hc19wYXJlbnQmJnRoaXMucGVybWlzc2lvbnMudXNlX2FzX2RhdGFfdHlwZX19LHtrZXk6XCJzZXRGdWxsVXNlXCIsdmFsdWU6ZnVuY3Rpb24oZSl7ZT12b2lkIDA9PT1lfHxlLHRoaXMucGVybWlzc2lvbnMudXNlX2FzX3JlZmVyZW5jZT1lLHRoaXMucGVybWlzc2lvbnMudXNlX2FzX3Byb3BlcnR5PWUsdGhpcy5wZXJtaXNzaW9ucy51c2VfYXNfcGFyZW50PWUsdGhpcy5wZXJtaXNzaW9ucy51c2VfYXNfZGF0YV90eXBlPWV9fSx7a2V5OlwiaXNQYXJ0aWFsVXNlXCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wZXJtaXNzaW9ucy51c2VfYXNfcmVmZXJlbmNlfHx0aGlzLnBlcm1pc3Npb25zLnVzZV9hc19wcm9wZXJ0eXx8dGhpcy5wZXJtaXNzaW9ucy51c2VfYXNfcGFyZW50fHx0aGlzLnBlcm1pc3Npb25zLnVzZV9hc19kYXRhX3R5cGV9fSx7a2V5OlwiaXNGdWxsVXBkYXRlXCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wZXJtaXNzaW9ucy51cGRhdGVfZGVzY3JpcHRpb24mJnRoaXMucGVybWlzc2lvbnMudXBkYXRlX3ZhbHVlJiZ0aGlzLnBlcm1pc3Npb25zLnVwZGF0ZV9yb2xlJiZ0aGlzLnBlcm1pc3Npb25zLnVwZGF0ZV9yZW1vdmVfcGFyZW50JiZ0aGlzLnBlcm1pc3Npb25zLnVwZGF0ZV9hZGRfcGFyZW50JiZ0aGlzLnBlcm1pc3Npb25zLnVwZGF0ZV9yZW1vdmVfcHJvcGVydHkmJnRoaXMucGVybWlzc2lvbnMudXBkYXRlX2FkZF9wcm9wZXJ0eSYmdGhpcy5wZXJtaXNzaW9ucy51cGRhdGVfbmFtZSYmdGhpcy5wZXJtaXNzaW9ucy51cGRhdGVfZGF0YV90eXBlJiZ0aGlzLnBlcm1pc3Npb25zLnVwZGF0ZV9xdWVyeV90ZW1wbGF0ZV9kZWZpbml0aW9uJiZ0aGlzLnBlcm1pc3Npb25zLnVwZGF0ZV9yZW1vdmVfZmlsZSYmdGhpcy5wZXJtaXNzaW9ucy51cGRhdGVfYWRkX2ZpbGUmJnRoaXMucGVybWlzc2lvbnMudXBkYXRlX21vdmVfZmlsZX19LHtrZXk6XCJzZXRGdWxsVXBkYXRlXCIsdmFsdWU6ZnVuY3Rpb24oZSl7ZT12b2lkIDA9PT1lfHxlLHRoaXMucGVybWlzc2lvbnMudXBkYXRlX2Rlc2NyaXB0aW9uPWUsdGhpcy5wZXJtaXNzaW9ucy51cGRhdGVfdmFsdWU9ZSx0aGlzLnBlcm1pc3Npb25zLnVwZGF0ZV9yb2xlPWUsdGhpcy5wZXJtaXNzaW9ucy51cGRhdGVfcmVtb3ZlX3BhcmVudD1lLHRoaXMucGVybWlzc2lvbnMudXBkYXRlX2FkZF9wYXJlbnQ9ZSx0aGlzLnBlcm1pc3Npb25zLnVwZGF0ZV9yZW1vdmVfcHJvcGVydHk9ZSx0aGlzLnBlcm1pc3Npb25zLnVwZGF0ZV9hZGRfcHJvcGVydHk9ZSx0aGlzLnBlcm1pc3Npb25zLnVwZGF0ZV9uYW1lPWUsdGhpcy5wZXJtaXNzaW9ucy51cGRhdGVfZGF0YV90eXBlPWUsdGhpcy5wZXJtaXNzaW9ucy51cGRhdGVfcXVlcnlfdGVtcGxhdGVfZGVmaW5pdGlvbj1lLHRoaXMucGVybWlzc2lvbnMudXBkYXRlX3JlbW92ZV9maWxlPWUsdGhpcy5wZXJtaXNzaW9ucy51cGRhdGVfYWRkX2ZpbGU9ZSx0aGlzLnBlcm1pc3Npb25zLnVwZGF0ZV9tb3ZlX2ZpbGU9ZX19LHtrZXk6XCJpc1BhcnRpYWxVcGRhdGVcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBlcm1pc3Npb25zLnVwZGF0ZV9kZXNjcmlwdGlvbnx8dGhpcy5wZXJtaXNzaW9ucy51cGRhdGVfdmFsdWV8fHRoaXMucGVybWlzc2lvbnMudXBkYXRlX3JvbGV8fHRoaXMucGVybWlzc2lvbnMudXBkYXRlX3JlbW92ZV9wYXJlbnR8fHRoaXMucGVybWlzc2lvbnMudXBkYXRlX2FkZF9wYXJlbnR8fHRoaXMucGVybWlzc2lvbnMudXBkYXRlX3JlbW92ZV9wcm9wZXJ0eXx8dGhpcy5wZXJtaXNzaW9ucy51cGRhdGVfYWRkX3Byb3BlcnR5fHx0aGlzLnBlcm1pc3Npb25zLnVwZGF0ZV9uYW1lfHx0aGlzLnBlcm1pc3Npb25zLnVwZGF0ZV9kYXRhX3R5cGV8fHRoaXMucGVybWlzc2lvbnMudXBkYXRlX3F1ZXJ5X3RlbXBsYXRlX2RlZmluaXRpb258fHRoaXMucGVybWlzc2lvbnMudXBkYXRlX3JlbW92ZV9maWxlfHx0aGlzLnBlcm1pc3Npb25zLnVwZGF0ZV9hZGRfZmlsZXx8dGhpcy5wZXJtaXNzaW9ucy51cGRhdGVfbW92ZV9maWxlfX0se2tleTpcImltcGxpZXNPd25lcnNoaXBcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdyYW50JiYhdGhpcy5pc090aGVyUm9sZSgpJiYhdGhpcy5pc093bmVyUm9sZSgpJiZ0aGlzLnBlcm1pc3Npb25zLmVkaXRfYWNsfX0se2tleTpcImlzT3RoZXJSb2xlXCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5cIj9PVEhFUj9cIj09PXRoaXMucm9sZX19LHtrZXk6XCJpc093bmVyUm9sZVwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuXCI/T1dORVI/XCI9PT10aGlzLnJvbGV9fV0pLGV9KCkseT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dmFyIG89dC5pZCxyPXQuYWNpcyxuPXQuY3VycmVudF9wZXJtaXNzaW9ucztwKHRoaXMsZSksdGhpcy5pZD1vLHRoaXMuYWNpcz1yfHxbXSx0aGlzLmN1cnJlbnRfcGVybWlzc2lvbnM9bnx8e319cmV0dXJuIHUoZSxbe2tleTpcImdldE93bmVyc1wiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYWNpcy5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmltcGxpZXNPd25lcnNoaXAoKX0pKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJvbGV9KSl9fV0pLGV9KCksZj17cmV0cmlldmVfZW50aXR5OmUuaC52MS5FbnRpdHlQZXJtaXNzaW9uLkVOVElUWV9QRVJNSVNTSU9OX1JFVFJJRVZFX0VOVElUWSxyZXRyaWV2ZV9hY2w6ZS5oLnYxLkVudGl0eVBlcm1pc3Npb24uRU5USVRZX1BFUk1JU1NJT05fUkVUUklFVkVfQUNMLHJldHJpZXZlX2hpc3Rvcnk6ZS5oLnYxLkVudGl0eVBlcm1pc3Npb24uRU5USVRZX1BFUk1JU1NJT05fUkVUUklFVkVfSElTVE9SWSxyZXRyaWV2ZV9vd25lcjplLmgudjEuRW50aXR5UGVybWlzc2lvbi5FTlRJVFlfUEVSTUlTU0lPTl9SRVRSSUVWRV9PV05FUixyZXRyaWV2ZV9maWxlOmUuaC52MS5FbnRpdHlQZXJtaXNzaW9uLkVOVElUWV9QRVJNSVNTSU9OX1JFVFJJRVZFX0ZJTEUsZGVsZXRlX2VudGl0eTplLmgudjEuRW50aXR5UGVybWlzc2lvbi5FTlRJVFlfUEVSTUlTU0lPTl9ERUxFVEUsZWRpdF9hY2w6ZS5oLnYxLkVudGl0eVBlcm1pc3Npb24uRU5USVRZX1BFUk1JU1NJT05fRURJVF9BQ0wsdXBkYXRlX2Rlc2NyaXB0aW9uOmUuaC52MS5FbnRpdHlQZXJtaXNzaW9uLkVOVElUWV9QRVJNSVNTSU9OX1VQREFURV9ERVNDUklQVElPTix1cGRhdGVfdmFsdWU6ZS5oLnYxLkVudGl0eVBlcm1pc3Npb24uRU5USVRZX1BFUk1JU1NJT05fVVBEQVRFX1ZBTFVFLHVwZGF0ZV9yb2xlOmUuaC52MS5FbnRpdHlQZXJtaXNzaW9uLkVOVElUWV9QRVJNSVNTSU9OX1VQREFURV9ST0xFLHVwZGF0ZV9yZW1vdmVfcGFyZW50OmUuaC52MS5FbnRpdHlQZXJtaXNzaW9uLkVOVElUWV9QRVJNSVNTSU9OX1VQREFURV9SRU1PVkVfUEFSRU5ULHVwZGF0ZV9hZGRfcGFyZW50OmUuaC52MS5FbnRpdHlQZXJtaXNzaW9uLkVOVElUWV9QRVJNSVNTSU9OX1VQREFURV9BRERfUEFSRU5ULHVwZGF0ZV9yZW1vdmVfcHJvcGVydHk6ZS5oLnYxLkVudGl0eVBlcm1pc3Npb24uRU5USVRZX1BFUk1JU1NJT05fVVBEQVRFX1JFTU9WRV9QUk9QRVJUWSx1cGRhdGVfYWRkX3Byb3BlcnR5OmUuaC52MS5FbnRpdHlQZXJtaXNzaW9uLkVOVElUWV9QRVJNSVNTSU9OX1VQREFURV9BRERfUFJPUEVSVFksdXBkYXRlX25hbWU6ZS5oLnYxLkVudGl0eVBlcm1pc3Npb24uRU5USVRZX1BFUk1JU1NJT05fVVBEQVRFX05BTUUsdXBkYXRlX2RhdGFfdHlwZTplLmgudjEuRW50aXR5UGVybWlzc2lvbi5FTlRJVFlfUEVSTUlTU0lPTl9VUERBVEVfREFUQV9UWVBFLHVwZGF0ZV9xdWVyeV90ZW1wbGF0ZV9kZWZpbml0aW9uOmUuaC52MS5FbnRpdHlQZXJtaXNzaW9uLkVOVElUWV9QRVJNSVNTSU9OX1VQREFURV9RVUVSWV9URU1QTEFURV9ERUZJTklUSU9OLHVwZGF0ZV9yZW1vdmVfZmlsZTplLmgudjEuRW50aXR5UGVybWlzc2lvbi5FTlRJVFlfUEVSTUlTU0lPTl9VUERBVEVfUkVNT1ZFX0ZJTEUsdXBkYXRlX2FkZF9maWxlOmUuaC52MS5FbnRpdHlQZXJtaXNzaW9uLkVOVElUWV9QRVJNSVNTSU9OX1VQREFURV9BRERfRklMRSx1cGRhdGVfbW92ZV9maWxlOmUuaC52MS5FbnRpdHlQZXJtaXNzaW9uLkVOVElUWV9QRVJNSVNTSU9OX1VQREFURV9NT1ZFX0ZJTEUsdXNlX2FzX3JlZmVyZW5jZTplLmgudjEuRW50aXR5UGVybWlzc2lvbi5FTlRJVFlfUEVSTUlTU0lPTl9VU0VfQVNfUkVGRVJFTkNFLHVzZV9hc19wcm9wZXJ0eTplLmgudjEuRW50aXR5UGVybWlzc2lvbi5FTlRJVFlfUEVSTUlTU0lPTl9VU0VfQVNfUFJPUEVSVFksdXNlX2FzX3BhcmVudDplLmgudjEuRW50aXR5UGVybWlzc2lvbi5FTlRJVFlfUEVSTUlTU0lPTl9VU0VfQVNfUEFSRU5ULHVzZV9hc19kYXRhX3R5cGU6ZS5oLnYxLkVudGl0eVBlcm1pc3Npb24uRU5USVRZX1BFUk1JU1NJT05fVVNFX0FTX0RBVEFfVFlQRX0sYj0oYz17fSxPYmplY3Qua2V5cyhmKS5mb3JFYWNoKChmdW5jdGlvbihlKXtjW2ZbZV1dPWV9KSksYyk7ZnVuY3Rpb24gaCh0KXt2YXIgbz10LmdldFJvbGUoKSxyPXQuZ2V0R3JhbnQoKSxuPXQuZ2V0UHJpb3JpdHkoKSxzPXQuZ2V0UGVybWlzc2lvbnNMaXN0KCksaT10LmdldENhcGFiaWxpdGllc0xpc3QoKSxnPW5ldyBkKHtyb2xlOm8sZ3JhbnQ6cixwcmlvcml0eTpufSk7cmV0dXJuIGcucGVybWlzc2lvbnM9ZnVuY3Rpb24oZSl7dmFyIHQsbz17fSxyPWEoZSk7dHJ5e2ZvcihyLnMoKTshKHQ9ci5uKCkpLmRvbmU7KXt2YXIgbj10LnZhbHVlO29bYltuXV09ITB9fWNhdGNoKGUpe3IuZShlKX1maW5hbGx5e3IuZigpfXJldHVybiBvfShzKSxnLmNhcGFiaWxpdGllcz1mdW5jdGlvbih0KXt2YXIgbyxyPXt9LG49YSh0KTt0cnl7Zm9yKG4ucygpOyEobz1uLm4oKSkuZG9uZTspby52YWx1ZT09PWUuaC52MS5FbnRpdHlQZXJtaXNzaW9uUnVsZUNhcGFiaWxpdHkuRU5USVRZX1BFUk1JU1NJT05fUlVMRV9DQVBBQklMSVRZX0RFTEVURSYmKHIuZGVsZXRlX2FjaT0hMCl9Y2F0Y2goZSl7bi5lKGUpfWZpbmFsbHl7bi5mKCl9cmV0dXJuIHJ9KGkpLGd9ZnVuY3Rpb24gXyh0KXt2YXIgbz17ZWRpdF9hY2w6ITEsZWRpdF9wcmlvcml0eV9hY2w6ITF9O3JldHVybiB0PT09ZS5oLnYxLkVudGl0eUFjbFBlcm1pc3Npb24uRU5USVRZX0FDTF9QRVJNSVNTSU9OX0VESVRfQUNMP28uZWRpdF9hY2w9ITA6dD09PWUuaC52MS5FbnRpdHlBY2xQZXJtaXNzaW9uLkVOVElUWV9BQ0xfUEVSTUlTU0lPTl9FRElUX1BSSU9SSVRZX0FDTCYmKG8uZWRpdF9hY2w9ITAsby5lZGl0X3ByaW9yaXR5X2FjbD0hMCksb31mdW5jdGlvbiB2KGUpe3ZhciB0PWUuZ2V0SWQoKSxvPWUuZ2V0UnVsZXNMaXN0KCkscj1lLmdldFBlcm1pc3Npb24oKTtyZXR1cm4gbmV3IHkoe2lkOnQsYWNpczpvLm1hcChoKSxjdXJyZW50X3Blcm1pc3Npb25zOl8ocil9KX1mdW5jdGlvbiBFKHQpe3ZhciBvPW5ldyBlLmgudjEuRW50aXR5UGVybWlzc2lvblJ1bGU7cmV0dXJuIG8uc2V0Um9sZSh0LnJvbGUpLG8uc2V0UHJpb3JpdHkodC5wcmlvcml0eSksby5zZXRHcmFudCh0LmdyYW50KSxvLnNldFBlcm1pc3Npb25zTGlzdChPYmplY3Qua2V5cyh0LnBlcm1pc3Npb25zKS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiB0LnBlcm1pc3Npb25zW2VdJiZmW2VdfSkpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGZbZV19KSkpLG99ZnVuY3Rpb24gbSh0KXt2YXIgbz1uZXcgZS5oLnYxLkVudGl0eUFDTDtyZXR1cm4gby5zZXRJZCh0LmlkKSxvLnNldFJ1bGVzTGlzdCh0LmFjaXMubWFwKEUpKSxvfWZ1bmN0aW9uIFQoZSx0LG8scixuLHMsaSl7dHJ5e3ZhciBhPWVbc10oaSksZz1hLnZhbHVlfWNhdGNoKGUpe3JldHVybiB2b2lkIG8oZSl9YS5kb25lP3QoZyk6UHJvbWlzZS5yZXNvbHZlKGcpLnRoZW4ocixuKX1mdW5jdGlvbiBSKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMsbz1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihyLG4pe3ZhciBzPWUuYXBwbHkodCxvKTtmdW5jdGlvbiBpKGUpe1QocyxyLG4saSxhLFwibmV4dFwiLGUpfWZ1bmN0aW9uIGEoZSl7VChzLHIsbixpLGEsXCJ0aHJvd1wiLGUpfWkodm9pZCAwKX0pKX19ZnVuY3Rpb24gUyhlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgbz0wLHI9bmV3IEFycmF5KHQpO288dDtvKyspcltvXT1lW29dO3JldHVybiByfWZ1bmN0aW9uIEEoZSx0KXtmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl7dmFyIHI9dFtvXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCxcInZhbHVlXCJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsci5rZXkscil9fXZhciBNPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlKXshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfSh0aGlzLHQpLHRoaXMudXJpPWV8fFwiL2FwaVwifXZhciBvLHIsbixzLGksYTtyZXR1cm4gbz10LHI9W3trZXk6XCJfUHJlcGFyZVRyYW5zYWN0aW9uXCIsdmFsdWU6ZnVuY3Rpb24odCl7QXJyYXkuaXNBcnJheSh0KXx8KHQ9W3RdKTt2YXIgbyxyLG49bmV3IGUuaC52MS5FbnRpdHlUcmFuc2FjdGlvblNlcnZpY2VDbGllbnQodGhpcy51cmksbnVsbCxudWxsKSxzPW5ldyBlLmgudjEuTXVsdGlUcmFuc2FjdGlvblJlcXVlc3QsaT1mdW5jdGlvbihlLHQpe3ZhciBvPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVtcIkBAaXRlcmF0b3JcIl07aWYoIW8pe2lmKEFycmF5LmlzQXJyYXkoZSl8fChvPWZ1bmN0aW9uKGUsdCl7aWYoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIFMoZSx0KTt2YXIgbz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuXCJPYmplY3RcIj09PW8mJmUuY29uc3RydWN0b3ImJihvPWUuY29uc3RydWN0b3IubmFtZSksXCJNYXBcIj09PW98fFwiU2V0XCI9PT1vP0FycmF5LmZyb20oZSk6XCJBcmd1bWVudHNcIj09PW98fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG8pP1MoZSx0KTp2b2lkIDB9fShlKSl8fHQmJmUmJlwibnVtYmVyXCI9PXR5cGVvZiBlLmxlbmd0aCl7byYmKGU9byk7dmFyIHI9MCxuPWZ1bmN0aW9uKCl7fTtyZXR1cm57czpuLG46ZnVuY3Rpb24oKXtyZXR1cm4gcj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbcisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjpufX10aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9dmFyIHMsaT0hMCxhPSExO3JldHVybntzOmZ1bmN0aW9uKCl7bz1vLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1vLm5leHQoKTtyZXR1cm4gaT1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXthPSEwLHM9ZX0sZjpmdW5jdGlvbigpe3RyeXtpfHxudWxsPT1vLnJldHVybnx8by5yZXR1cm4oKX1maW5hbGx5e2lmKGEpdGhyb3cgc319fX0odCk7dHJ5e2ZvcihpLnMoKTshKHI9aS5uKCkpLmRvbmU7KXt2YXIgYT1yLnZhbHVlOyhvPW5ldyBlLmgudjEuVHJhbnNhY3Rpb25SZXF1ZXN0KS5zZXRSZXRyaWV2ZVJlcXVlc3QoYSkscy5hZGRSZXF1ZXN0cyhvKX19Y2F0Y2goZSl7aS5lKGUpfWZpbmFsbHl7aS5mKCl9dmFyIGc9e307cmV0dXJuIGZ1bmN0aW9uKGUsdCl7bi5tdWx0aVRyYW5zYWN0aW9uKHMsZywoZnVuY3Rpb24obyxyKXtvJiZ0KG8pLGUocil9KSl9fX0se2tleTpcIl9DcmVhdGVSZXRyaWV2ZVJlcXVlc3RcIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgbz1uZXcgZS5oLnYxLlJldHJpZXZlUmVxdWVzdDtyZXR1cm4gby5zZXRJZCh0KSxvLnNldFJlZ2lzdGVyRmlsZURvd25sb2FkKCExKSxvfX0se2tleTpcIl9DcmVhdGVRdWVyeVJlcXVlc3RcIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgbz1uZXcgZS5oLnYxLlF1ZXJ5O28uc2V0UXVlcnkodCk7dmFyIHI9bmV3IGUuaC52MS5SZXRyaWV2ZVJlcXVlc3Q7cmV0dXJuIHIuc2V0UXVlcnkobyksci5zZXRSZWdpc3RlckZpbGVEb3dubG9hZCghMSkscn19LHtrZXk6XCJyZXRyaWV2ZVwiLHZhbHVlOihhPVIocmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoKGZ1bmN0aW9uIGUodCl7dmFyIG8scj10aGlzO3JldHVybiByZWdlbmVyYXRvclJ1bnRpbWUud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIEFycmF5LmlzQXJyYXkodCl8fCh0PVt0XSksbz10Lm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHIuX0NyZWF0ZVJldHJpZXZlUmVxdWVzdChlKX0pKSxlLmFicnVwdChcInJldHVyblwiLG5ldyBQcm9taXNlKHRoaXMuX1ByZXBhcmVUcmFuc2FjdGlvbihvKSkpO2Nhc2UgMzpjYXNlXCJlbmRcIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSksZnVuY3Rpb24oZSl7cmV0dXJuIGEuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6XCJleGVjdXRlUXVlcnlcIix2YWx1ZTooaT1SKHJlZ2VuZXJhdG9yUnVudGltZS5tYXJrKChmdW5jdGlvbiBlKHQpe3ZhciBvO3JldHVybiByZWdlbmVyYXRvclJ1bnRpbWUud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIG89dGhpcy5fQ3JlYXRlUXVlcnlSZXF1ZXN0KHQpLGUuYWJydXB0KFwicmV0dXJuXCIsbmV3IFByb21pc2UodGhpcy5fUHJlcGFyZVRyYW5zYWN0aW9uKG8pKSk7Y2FzZSAyOmNhc2VcImVuZFwiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbihlKXtyZXR1cm4gaS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleTpcInJldHJpZXZlRW50aXR5QWNsXCIsdmFsdWU6KHM9UihyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gdChvKXt2YXIgcixuLHM7cmV0dXJuIHJlZ2VuZXJhdG9yUnVudGltZS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gcj1uZXcgZS5oLnYxLkVudGl0eVRyYW5zYWN0aW9uU2VydmljZVByb21pc2VDbGllbnQodGhpcy51cmksbnVsbCxudWxsKSwobj1uZXcgZS5oLnYxLk11bHRpUmV0cmlldmVFbnRpdHlBQ0xSZXF1ZXN0KS5hZGRJZChvKSx0Lm5leHQ9NSxyLm11bHRpUmV0cmlldmVFbnRpdHlBQ0wobix7fSk7Y2FzZSA1OnJldHVybiBzPXQuc2VudCx0LmFicnVwdChcInJldHVyblwiLHYocy5nZXRBY2xzTGlzdCgpWzBdKSk7Y2FzZSA3OmNhc2VcImVuZFwiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKSxmdW5jdGlvbihlKXtyZXR1cm4gcy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleTpcInVwZGF0ZUVudGl0eUFjbFwiLHZhbHVlOihuPVIocmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoKGZ1bmN0aW9uIHQobyl7dmFyIHIsbixzLGk7cmV0dXJuIHJlZ2VuZXJhdG9yUnVudGltZS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gcj1tKG8pLG49bmV3IGUuaC52MS5FbnRpdHlUcmFuc2FjdGlvblNlcnZpY2VQcm9taXNlQ2xpZW50KHRoaXMudXJpLG51bGwsbnVsbCksKHM9bmV3IGUuaC52MS5NdWx0aVVwZGF0ZUVudGl0eUFDTFJlcXVlc3QpLnNldEFjbHNMaXN0KFtyXSksdC5uZXh0PTYsbi5tdWx0aVVwZGF0ZUVudGl0eUFDTChzLHt9KTtjYXNlIDY6cmV0dXJuIGk9dC5zZW50LHQuYWJydXB0KFwicmV0dXJuXCIsaSk7Y2FzZSA4OmNhc2VcImVuZFwiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKSxmdW5jdGlvbihlKXtyZXR1cm4gbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX1dLHImJkEoby5wcm90b3R5cGUsciksdH0oKX0pKCksX193ZWJwYWNrX2V4cG9ydHNfX30pKCl9KSk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///349\n')}},__webpack_module_cache__={};function __webpack_require__(e){var t=__webpack_module_cache__[e];if(void 0!==t)return t.exports;var l=__webpack_module_cache__[e]={exports:{}};return __webpack_modules__[e](l,l.exports,__webpack_require__),l.exports}__webpack_require__.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return __webpack_require__.d(t,{a:t}),t},__webpack_require__.d=(e,t)=>{for(var l in t)__webpack_require__.o(t,l)&&!__webpack_require__.o(e,l)&&Object.defineProperty(e,l,{enumerable:!0,get:t[l]})},__webpack_require__.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),__webpack_require__.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var __webpack_exports__=__webpack_require__(814);window.CaosDBWebui2=__webpack_exports__})(); \ No newline at end of file -- GitLab